diff --git a/31/system/android.car-system-stubs.jar b/31/system/android.car-system-stubs.jar
new file mode 100644
index 0000000..8b7e457
--- /dev/null
+++ b/31/system/android.car-system-stubs.jar
Binary files differ
diff --git a/32/module-lib/android-non-updatable.jar b/32/module-lib/android-non-updatable.jar
new file mode 100644
index 0000000..232b5d1
--- /dev/null
+++ b/32/module-lib/android-non-updatable.jar
Binary files differ
diff --git a/32/module-lib/android.jar b/32/module-lib/android.jar
new file mode 100644
index 0000000..1bc3cd7
--- /dev/null
+++ b/32/module-lib/android.jar
Binary files differ
diff --git a/32/module-lib/api/android-non-updatable-removed.txt b/32/module-lib/api/android-non-updatable-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/android-non-updatable-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/android-non-updatable.txt b/32/module-lib/api/android-non-updatable.txt
new file mode 100644
index 0000000..e48a1da
--- /dev/null
+++ b/32/module-lib/api/android-non-updatable.txt
@@ -0,0 +1,339 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String GET_INTENT_SENDER_INTENT = "android.permission.GET_INTENT_SENDER_INTENT";
+  }
+
+}
+
+package android.app {
+
+  public class ActivityManager {
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener);
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public boolean updateMccMncConfiguration(@NonNull String, @NonNull String);
+  }
+
+  public class AppOpsManager {
+    field public static final String OPSTR_NO_ISOLATED_STORAGE = "android:no_isolated_storage";
+  }
+
+  public class BroadcastOptions {
+    method public int getMaxManifestReceiverApiLevel();
+    method public void setMaxManifestReceiverApiLevel(int);
+  }
+
+  public abstract class HomeVisibilityListener {
+    ctor public HomeVisibilityListener();
+    method public abstract void onHomeVisibilityChanged(boolean);
+  }
+
+  public class NotificationManager {
+    method public boolean hasEnabledNotificationListener(@NonNull String, @NonNull android.os.UserHandle);
+    field public static final String ACTION_NOTIFICATION_LISTENER_ENABLED_CHANGED = "android.app.action.NOTIFICATION_LISTENER_ENABLED_CHANGED";
+  }
+
+  public final class PendingIntent implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.GET_INTENT_SENDER_INTENT) public boolean intentFilterEquals(@Nullable android.app.PendingIntent);
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_INTENT_SENDER_INTENT) public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
+  }
+
+  public class StatusBarManager {
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setExpansionDisabledForSimNetworkLock(boolean);
+  }
+
+}
+
+package android.app.usage {
+
+  public class NetworkStatsManager {
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void notifyNetworkStatus(@NonNull java.util.List<android.net.Network>, @NonNull java.util.List<android.net.NetworkStateSnapshot>, @Nullable String, @NonNull java.util.List<android.net.UnderlyingNetworkInfo>);
+  }
+
+}
+
+package android.content {
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method @NonNull public static android.net.Uri createContentUriForUser(@NonNull android.net.Uri, @NonNull android.os.UserHandle);
+  }
+
+  public abstract class Context {
+    method @NonNull public android.os.UserHandle getUser();
+    field public static final String PAC_PROXY_SERVICE = "pac_proxy";
+    field public static final String TEST_NETWORK_SERVICE = "test_network";
+  }
+
+}
+
+package android.content.pm {
+
+  public abstract class PackageManager {
+    method @NonNull public String getPermissionControllerPackageName();
+  }
+
+}
+
+package android.hardware.usb {
+
+  public class UsbManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public int getGadgetHalVersion();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public int getUsbBandwidthMbps();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public int getUsbHalVersion();
+    field public static final int GADGET_HAL_NOT_SUPPORTED = -1; // 0xffffffff
+    field public static final int GADGET_HAL_V1_0 = 10; // 0xa
+    field public static final int GADGET_HAL_V1_1 = 11; // 0xb
+    field public static final int GADGET_HAL_V1_2 = 12; // 0xc
+    field public static final int USB_DATA_TRANSFER_RATE_10G = 10240; // 0x2800
+    field public static final int USB_DATA_TRANSFER_RATE_20G = 20480; // 0x5000
+    field public static final int USB_DATA_TRANSFER_RATE_40G = 40960; // 0xa000
+    field public static final int USB_DATA_TRANSFER_RATE_5G = 5120; // 0x1400
+    field public static final int USB_DATA_TRANSFER_RATE_FULL_SPEED = 12; // 0xc
+    field public static final int USB_DATA_TRANSFER_RATE_HIGH_SPEED = 480; // 0x1e0
+    field public static final int USB_DATA_TRANSFER_RATE_LOW_SPEED = 2; // 0x2
+    field public static final int USB_DATA_TRANSFER_RATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int USB_HAL_NOT_SUPPORTED = -1; // 0xffffffff
+    field public static final int USB_HAL_V1_0 = 10; // 0xa
+    field public static final int USB_HAL_V1_1 = 11; // 0xb
+    field public static final int USB_HAL_V1_2 = 12; // 0xc
+    field public static final int USB_HAL_V1_3 = 13; // 0xd
+  }
+
+}
+
+package android.media {
+
+  public class AudioManager {
+    method public void adjustStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
+    method public void adjustSuggestedStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
+    method public void setStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
+    field public static final int FLAG_FROM_KEY = 4096; // 0x1000
+  }
+
+  public class MediaMetadataRetriever implements java.lang.AutoCloseable {
+    field public static final int METADATA_KEY_VIDEO_CODEC_MIME_TYPE = 40; // 0x28
+  }
+
+  public class MediaServiceManager {
+    method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaCommunicationServiceRegisterer();
+    method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaSessionServiceRegisterer();
+    method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaTranscodingServiceRegisterer();
+  }
+
+  public static final class MediaServiceManager.ServiceRegisterer {
+    method @Nullable public android.os.IBinder get();
+  }
+
+}
+
+package android.media.session {
+
+  public static final class MediaController.PlaybackInfo implements android.os.Parcelable {
+    ctor public MediaController.PlaybackInfo(int, int, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.media.AudioAttributes, @Nullable String);
+  }
+
+  public final class MediaSession {
+    field public static final int FLAG_EXCLUSIVE_GLOBAL_PRIORITY = 65536; // 0x10000
+  }
+
+  public static final class MediaSession.Token implements android.os.Parcelable {
+    method public int getUid();
+  }
+
+  public final class MediaSessionManager {
+    method public void addOnActiveSessionsChangedListener(@Nullable android.content.ComponentName, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener);
+    method public void dispatchMediaKeyEvent(@NonNull android.view.KeyEvent, boolean);
+    method public void dispatchMediaKeyEventAsSystemService(@NonNull android.view.KeyEvent);
+    method public boolean dispatchMediaKeyEventToSessionAsSystemService(@NonNull android.view.KeyEvent, @NonNull android.media.session.MediaSession.Token);
+    method public void dispatchVolumeKeyEvent(@NonNull android.view.KeyEvent, int, boolean);
+    method public void dispatchVolumeKeyEventAsSystemService(@NonNull android.view.KeyEvent, int);
+    method public void dispatchVolumeKeyEventToSessionAsSystemService(@NonNull android.view.KeyEvent, @NonNull android.media.session.MediaSession.Token);
+    method @NonNull public java.util.List<android.media.session.MediaController> getActiveSessionsForUser(@Nullable android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public void registerRemoteSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.RemoteSessionCallback);
+    method public void unregisterRemoteSessionCallback(@NonNull android.media.session.MediaSessionManager.RemoteSessionCallback);
+    field public static final int RESULT_MEDIA_KEY_HANDLED = 1; // 0x1
+    field public static final int RESULT_MEDIA_KEY_NOT_HANDLED = 0; // 0x0
+  }
+
+  public static interface MediaSessionManager.RemoteSessionCallback {
+    method public void onDefaultRemoteSessionChanged(@Nullable android.media.session.MediaSession.Token);
+    method public void onVolumeChanged(@NonNull android.media.session.MediaSession.Token, int);
+  }
+
+}
+
+package android.net {
+
+  public final class EthernetNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    ctor public EthernetNetworkSpecifier(@NonNull String);
+    method public int describeContents();
+    method @Nullable public String getInterfaceName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.EthernetNetworkSpecifier> CREATOR;
+  }
+
+  public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
+    method public int getResourceId();
+  }
+
+  public class NetworkPolicyManager {
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public int getMultipathPreference(@NonNull android.net.Network);
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public int getRestrictBackgroundStatus(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidNetworkingBlocked(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidRestrictedOnMeteredNetworks(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void registerNetworkPolicyCallback(@Nullable java.util.concurrent.Executor, @NonNull android.net.NetworkPolicyManager.NetworkPolicyCallback);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void unregisterNetworkPolicyCallback(@NonNull android.net.NetworkPolicyManager.NetworkPolicyCallback);
+  }
+
+  public static interface NetworkPolicyManager.NetworkPolicyCallback {
+    method public default void onUidBlockedReasonChanged(int, int);
+  }
+
+  public final class NetworkStateSnapshot implements android.os.Parcelable {
+    ctor public NetworkStateSnapshot(@NonNull android.net.Network, @NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties, @Nullable String, int);
+    method public int describeContents();
+    method public int getLegacyType();
+    method @NonNull public android.net.LinkProperties getLinkProperties();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method @Nullable public String getSubscriberId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkStateSnapshot> CREATOR;
+  }
+
+  public class NetworkWatchlistManager {
+    method @Nullable public byte[] getWatchlistConfigHash();
+  }
+
+  public class PacProxyManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void addPacProxyInstalledListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.PacProxyManager.PacProxyInstalledListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void removePacProxyInstalledListener(@NonNull android.net.PacProxyManager.PacProxyInstalledListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setCurrentProxyScriptUrl(@Nullable android.net.ProxyInfo);
+  }
+
+  public static interface PacProxyManager.PacProxyInstalledListener {
+    method public void onPacProxyInstalled(@Nullable android.net.Network, @NonNull android.net.ProxyInfo);
+  }
+
+  public final class Proxy {
+    method public static void setHttpProxyConfiguration(@Nullable android.net.ProxyInfo);
+  }
+
+  public final class UnderlyingNetworkInfo implements android.os.Parcelable {
+    ctor public UnderlyingNetworkInfo(int, @NonNull String, @NonNull java.util.List<java.lang.String>);
+    method public int describeContents();
+    method @NonNull public String getInterface();
+    method public int getOwnerUid();
+    method @NonNull public java.util.List<java.lang.String> getUnderlyingInterfaces();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.UnderlyingNetworkInfo> CREATOR;
+  }
+
+  public class VpnManager {
+    field public static final int TYPE_VPN_LEGACY = 3; // 0x3
+    field public static final int TYPE_VPN_NONE = -1; // 0xffffffff
+    field public static final int TYPE_VPN_OEM = 4; // 0x4
+    field public static final int TYPE_VPN_PLATFORM = 2; // 0x2
+    field public static final int TYPE_VPN_SERVICE = 1; // 0x1
+  }
+
+}
+
+package android.os {
+
+  public final class BatteryStatsManager {
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void reportNetworkInterfaceForTransports(@NonNull String, @NonNull int[]) throws java.lang.RuntimeException;
+  }
+
+  public class Binder implements android.os.IBinder {
+    method public final void markVintfStability();
+  }
+
+  public class Build {
+    method public static boolean isDebuggable();
+  }
+
+  public static class Build.VERSION {
+    field public static final int DEVICE_INITIAL_SDK_INT;
+  }
+
+  public interface Parcelable {
+    method public default int getStability();
+  }
+
+  public class Process {
+    field public static final int VPN_UID = 1016; // 0x3f8
+  }
+
+  public class StatsServiceManager {
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsCompanionServiceRegisterer();
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsManagerServiceRegisterer();
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsdServiceRegisterer();
+  }
+
+  public static class StatsServiceManager.ServiceNotFoundException extends java.lang.Exception {
+    ctor public StatsServiceManager.ServiceNotFoundException(@NonNull String);
+  }
+
+  public static final class StatsServiceManager.ServiceRegisterer {
+    method @Nullable public android.os.IBinder get();
+    method @Nullable public android.os.IBinder getOrThrow() throws android.os.StatsServiceManager.ServiceNotFoundException;
+  }
+
+}
+
+package android.os.storage {
+
+  public class StorageManager {
+    method public void notifyAppIoBlocked(@NonNull java.util.UUID, int, int, int);
+    method public void notifyAppIoResumed(@NonNull java.util.UUID, int, int, int);
+    field public static final int APP_IO_BLOCKED_REASON_TRANSCODING = 1; // 0x1
+    field public static final int APP_IO_BLOCKED_REASON_UNKNOWN = 0; // 0x0
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method @NonNull public android.os.UserHandle getOwner();
+  }
+
+}
+
+package android.provider {
+
+  public final class DeviceConfig {
+    field public static final String NAMESPACE_ALARM_MANAGER = "alarm_manager";
+    field public static final String NAMESPACE_APP_STANDBY = "app_standby";
+    field public static final String NAMESPACE_DEVICE_IDLE = "device_idle";
+  }
+
+}
+
+package android.telephony {
+
+  public abstract class CellSignalStrength {
+    method public static int getNumSignalStrengthLevels();
+  }
+
+  public class TelephonyManager {
+    method @NonNull public static int[] getAllNetworkTypes();
+  }
+
+}
+
+package android.util {
+
+  public class AtomicFile {
+    ctor public AtomicFile(@NonNull java.io.File, @Nullable android.util.SystemConfigFileCommitEventLogger);
+  }
+
+  public final class Log {
+    method public static int logToRadioBuffer(int, @Nullable String, @Nullable String);
+  }
+
+  public class SystemConfigFileCommitEventLogger {
+    ctor public SystemConfigFileCommitEventLogger(@NonNull String);
+    method public void setStartTime(long);
+  }
+
+}
+
diff --git a/32/module-lib/api/android.net.ipsec.ike-removed.txt b/32/module-lib/api/android.net.ipsec.ike-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/android.net.ipsec.ike-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/android.net.ipsec.ike.txt b/32/module-lib/api/android.net.ipsec.ike.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/android.net.ipsec.ike.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/android.txt b/32/module-lib/api/android.txt
new file mode 100644
index 0000000..e63fc12
--- /dev/null
+++ b/32/module-lib/api/android.txt
@@ -0,0 +1,1465 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String GET_INTENT_SENDER_INTENT = "android.permission.GET_INTENT_SENDER_INTENT";
+  }
+
+}
+
+package android.app {
+
+  public class ActivityManager {
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener);
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public boolean updateMccMncConfiguration(@NonNull String, @NonNull String);
+  }
+
+  public class AppOpsManager {
+    field public static final String OPSTR_NO_ISOLATED_STORAGE = "android:no_isolated_storage";
+  }
+
+  public class BroadcastOptions {
+    method public int getMaxManifestReceiverApiLevel();
+    method public void setMaxManifestReceiverApiLevel(int);
+  }
+
+  public abstract class HomeVisibilityListener {
+    ctor public HomeVisibilityListener();
+    method public abstract void onHomeVisibilityChanged(boolean);
+  }
+
+  public class NotificationManager {
+    method public boolean hasEnabledNotificationListener(@NonNull String, @NonNull android.os.UserHandle);
+    field public static final String ACTION_NOTIFICATION_LISTENER_ENABLED_CHANGED = "android.app.action.NOTIFICATION_LISTENER_ENABLED_CHANGED";
+  }
+
+  public final class PendingIntent implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.GET_INTENT_SENDER_INTENT) public boolean intentFilterEquals(@Nullable android.app.PendingIntent);
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_INTENT_SENDER_INTENT) public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
+  }
+
+  public class StatusBarManager {
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setExpansionDisabledForSimNetworkLock(boolean);
+  }
+
+}
+
+package android.app.role {
+
+  public class RoleFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+  public final class RoleManager {
+    method @Nullable public String getBrowserRoleHolder(int);
+    method @Nullable public String getSmsRoleHolder(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) public boolean setBrowserRoleHolder(@Nullable String, int);
+  }
+
+}
+
+package android.app.usage {
+
+  public class NetworkStatsManager {
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void notifyNetworkStatus(@NonNull java.util.List<android.net.Network>, @NonNull java.util.List<android.net.NetworkStateSnapshot>, @Nullable String, @NonNull java.util.List<android.net.UnderlyingNetworkInfo>);
+  }
+
+}
+
+package android.compat {
+
+  public final class Compatibility {
+    method public static void clearBehaviorChangeDelegate();
+    method public static void clearOverrides();
+    method public static boolean isChangeEnabled(long);
+    method public static void reportUnconditionalChange(long);
+    method public static void setBehaviorChangeDelegate(android.compat.Compatibility.BehaviorChangeDelegate);
+    method public static void setOverrides(android.compat.Compatibility.ChangeConfig);
+  }
+
+  public static interface Compatibility.BehaviorChangeDelegate {
+    method public default boolean isChangeEnabled(long);
+    method public default void onChangeReported(long);
+  }
+
+  public static final class Compatibility.ChangeConfig {
+    ctor public Compatibility.ChangeConfig(@NonNull java.util.Set<java.lang.Long>, @NonNull java.util.Set<java.lang.Long>);
+    method @NonNull public long[] getDisabledChangesArray();
+    method @NonNull public java.util.Set<java.lang.Long> getDisabledSet();
+    method @NonNull public long[] getEnabledChangesArray();
+    method @NonNull public java.util.Set<java.lang.Long> getEnabledSet();
+    method public boolean isEmpty();
+    method public boolean isForceDisabled(long);
+    method public boolean isForceEnabled(long);
+  }
+
+}
+
+package android.content {
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method @NonNull public static android.net.Uri createContentUriForUser(@NonNull android.net.Uri, @NonNull android.os.UserHandle);
+  }
+
+  public abstract class Context {
+    method @NonNull public android.os.UserHandle getUser();
+    field public static final String PAC_PROXY_SERVICE = "pac_proxy";
+    field public static final String TEST_NETWORK_SERVICE = "test_network";
+  }
+
+}
+
+package android.content.pm {
+
+  public abstract class PackageManager {
+    method @NonNull public String getPermissionControllerPackageName();
+  }
+
+}
+
+package android.hardware.usb {
+
+  public class UsbManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public int getGadgetHalVersion();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public int getUsbBandwidthMbps();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public int getUsbHalVersion();
+    field public static final int GADGET_HAL_NOT_SUPPORTED = -1; // 0xffffffff
+    field public static final int GADGET_HAL_V1_0 = 10; // 0xa
+    field public static final int GADGET_HAL_V1_1 = 11; // 0xb
+    field public static final int GADGET_HAL_V1_2 = 12; // 0xc
+    field public static final int USB_DATA_TRANSFER_RATE_10G = 10240; // 0x2800
+    field public static final int USB_DATA_TRANSFER_RATE_20G = 20480; // 0x5000
+    field public static final int USB_DATA_TRANSFER_RATE_40G = 40960; // 0xa000
+    field public static final int USB_DATA_TRANSFER_RATE_5G = 5120; // 0x1400
+    field public static final int USB_DATA_TRANSFER_RATE_FULL_SPEED = 12; // 0xc
+    field public static final int USB_DATA_TRANSFER_RATE_HIGH_SPEED = 480; // 0x1e0
+    field public static final int USB_DATA_TRANSFER_RATE_LOW_SPEED = 2; // 0x2
+    field public static final int USB_DATA_TRANSFER_RATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int USB_HAL_NOT_SUPPORTED = -1; // 0xffffffff
+    field public static final int USB_HAL_V1_0 = 10; // 0xa
+    field public static final int USB_HAL_V1_1 = 11; // 0xb
+    field public static final int USB_HAL_V1_2 = 12; // 0xc
+    field public static final int USB_HAL_V1_3 = 13; // 0xd
+  }
+
+}
+
+package android.media {
+
+  public class AudioManager {
+    method public void adjustStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
+    method public void adjustSuggestedStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
+    method public void setStreamVolumeForUid(int, int, int, @NonNull String, int, int, int);
+    field public static final int FLAG_FROM_KEY = 4096; // 0x1000
+  }
+
+  public class MediaCommunicationManager {
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void registerSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaCommunicationManager.SessionCallback);
+    method public void unregisterSessionCallback(@NonNull android.media.MediaCommunicationManager.SessionCallback);
+  }
+
+  public static interface MediaCommunicationManager.SessionCallback {
+    method public default void onSession2TokenCreated(@NonNull android.media.Session2Token);
+    method public default void onSession2TokensChanged(@NonNull java.util.List<android.media.Session2Token>);
+  }
+
+  public class MediaFrameworkInitializer {
+    method public static void registerServiceWrappers();
+    method public static void setMediaServiceManager(@NonNull android.media.MediaServiceManager);
+  }
+
+  public class MediaMetadataRetriever implements java.lang.AutoCloseable {
+    field public static final int METADATA_KEY_VIDEO_CODEC_MIME_TYPE = 40; // 0x28
+  }
+
+  @Deprecated public final class MediaParceledListSlice<T extends android.os.Parcelable> implements android.os.Parcelable {
+    ctor @Deprecated public MediaParceledListSlice(@NonNull java.util.List<T>);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public static <T extends android.os.Parcelable> android.media.MediaParceledListSlice<T> emptyList();
+    method @Deprecated public java.util.List<T> getList();
+    method @Deprecated public void setInlineCountLimit(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.ClassLoaderCreator<android.media.MediaParceledListSlice> CREATOR;
+  }
+
+  public class MediaServiceManager {
+    method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaCommunicationServiceRegisterer();
+    method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaSessionServiceRegisterer();
+    method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaTranscodingServiceRegisterer();
+  }
+
+  public static final class MediaServiceManager.ServiceRegisterer {
+    method @Nullable public android.os.IBinder get();
+  }
+
+}
+
+package android.media.session {
+
+  public static final class MediaController.PlaybackInfo implements android.os.Parcelable {
+    ctor public MediaController.PlaybackInfo(int, int, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.media.AudioAttributes, @Nullable String);
+  }
+
+  public final class MediaSession {
+    field public static final int FLAG_EXCLUSIVE_GLOBAL_PRIORITY = 65536; // 0x10000
+  }
+
+  public static final class MediaSession.Token implements android.os.Parcelable {
+    method public int getUid();
+  }
+
+  public final class MediaSessionManager {
+    method public void addOnActiveSessionsChangedListener(@Nullable android.content.ComponentName, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener);
+    method public void dispatchMediaKeyEvent(@NonNull android.view.KeyEvent, boolean);
+    method public void dispatchMediaKeyEventAsSystemService(@NonNull android.view.KeyEvent);
+    method public boolean dispatchMediaKeyEventToSessionAsSystemService(@NonNull android.view.KeyEvent, @NonNull android.media.session.MediaSession.Token);
+    method public void dispatchVolumeKeyEvent(@NonNull android.view.KeyEvent, int, boolean);
+    method public void dispatchVolumeKeyEventAsSystemService(@NonNull android.view.KeyEvent, int);
+    method public void dispatchVolumeKeyEventToSessionAsSystemService(@NonNull android.view.KeyEvent, @NonNull android.media.session.MediaSession.Token);
+    method @NonNull public java.util.List<android.media.session.MediaController> getActiveSessionsForUser(@Nullable android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public void registerRemoteSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.RemoteSessionCallback);
+    method public void unregisterRemoteSessionCallback(@NonNull android.media.session.MediaSessionManager.RemoteSessionCallback);
+    field public static final int RESULT_MEDIA_KEY_HANDLED = 1; // 0x1
+    field public static final int RESULT_MEDIA_KEY_NOT_HANDLED = 0; // 0x0
+  }
+
+  public static interface MediaSessionManager.RemoteSessionCallback {
+    method public void onDefaultRemoteSessionChanged(@Nullable android.media.session.MediaSession.Token);
+    method public void onVolumeChanged(@NonNull android.media.session.MediaSession.Token, int);
+  }
+
+}
+
+package android.net {
+
+  public final class ConnectivityFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+  public class ConnectivityManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void factoryReset();
+    method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public java.util.List<android.net.NetworkStateSnapshot> getAllNetworkStateSnapshots();
+    method @Nullable public android.net.ProxyInfo getGlobalProxy();
+    method @NonNull public static android.util.Range<java.lang.Integer> getIpSecNetIdRange();
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerDefaultNetworkCallbackForUid(int, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerSystemDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void requestBackgroundNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @Deprecated public boolean requestRouteToHostAddress(int, java.net.InetAddress);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void setAcceptPartialConnectivity(@NonNull android.net.Network, boolean, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void setAcceptUnvalidated(@NonNull android.net.Network, boolean, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void setAvoidUnvalidated(@NonNull android.net.Network);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void setGlobalProxy(@Nullable android.net.ProxyInfo);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setLegacyLockdownVpnEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void setProfileNetworkPreference(@NonNull android.os.UserHandle, int, @Nullable java.util.concurrent.Executor, @Nullable Runnable);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setRequireVpnForUids(boolean, @NonNull java.util.Collection<android.util.Range<java.lang.Integer>>);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_TEST_NETWORKS, android.Manifest.permission.NETWORK_STACK}) public void simulateDataStall(int, long, @NonNull android.net.Network, @NonNull android.os.PersistableBundle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void startCaptivePortalApp(@NonNull android.net.Network);
+    method public void systemReady();
+    field public static final String ACTION_CLEAR_DNS_CACHE = "android.net.action.CLEAR_DNS_CACHE";
+    field public static final String ACTION_PROMPT_LOST_VALIDATION = "android.net.action.PROMPT_LOST_VALIDATION";
+    field public static final String ACTION_PROMPT_PARTIAL_CONNECTIVITY = "android.net.action.PROMPT_PARTIAL_CONNECTIVITY";
+    field public static final String ACTION_PROMPT_UNVALIDATED = "android.net.action.PROMPT_UNVALIDATED";
+    field public static final int BLOCKED_METERED_REASON_ADMIN_DISABLED = 262144; // 0x40000
+    field public static final int BLOCKED_METERED_REASON_DATA_SAVER = 65536; // 0x10000
+    field public static final int BLOCKED_METERED_REASON_MASK = -65536; // 0xffff0000
+    field public static final int BLOCKED_METERED_REASON_USER_RESTRICTED = 131072; // 0x20000
+    field public static final int BLOCKED_REASON_APP_STANDBY = 4; // 0x4
+    field public static final int BLOCKED_REASON_BATTERY_SAVER = 1; // 0x1
+    field public static final int BLOCKED_REASON_DOZE = 2; // 0x2
+    field public static final int BLOCKED_REASON_LOCKDOWN_VPN = 16; // 0x10
+    field public static final int BLOCKED_REASON_NONE = 0; // 0x0
+    field public static final int BLOCKED_REASON_RESTRICTED_MODE = 8; // 0x8
+    field public static final int PROFILE_NETWORK_PREFERENCE_DEFAULT = 0; // 0x0
+    field public static final int PROFILE_NETWORK_PREFERENCE_ENTERPRISE = 1; // 0x1
+  }
+
+  public static class ConnectivityManager.NetworkCallback {
+    method public void onBlockedStatusChanged(@NonNull android.net.Network, int);
+  }
+
+  public class ConnectivitySettingsManager {
+    method public static void clearGlobalProxy(@NonNull android.content.Context);
+    method @Nullable public static String getCaptivePortalHttpUrl(@NonNull android.content.Context);
+    method public static int getCaptivePortalMode(@NonNull android.content.Context, int);
+    method @NonNull public static java.time.Duration getConnectivityKeepPendingIntentDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method @NonNull public static android.util.Range<java.lang.Integer> getDnsResolverSampleRanges(@NonNull android.content.Context);
+    method @NonNull public static java.time.Duration getDnsResolverSampleValidityDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static int getDnsResolverSuccessThresholdPercent(@NonNull android.content.Context, int);
+    method @Nullable public static android.net.ProxyInfo getGlobalProxy(@NonNull android.content.Context);
+    method @NonNull public static java.time.Duration getMobileDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static boolean getMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
+    method @NonNull public static java.util.Set<java.lang.Integer> getMobileDataPreferredUids(@NonNull android.content.Context);
+    method public static int getNetworkAvoidBadWifi(@NonNull android.content.Context);
+    method @Nullable public static String getNetworkMeteredMultipathPreference(@NonNull android.content.Context);
+    method public static int getNetworkSwitchNotificationMaximumDailyCount(@NonNull android.content.Context, int);
+    method @NonNull public static java.time.Duration getNetworkSwitchNotificationRateDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method @NonNull public static String getPrivateDnsDefaultMode(@NonNull android.content.Context);
+    method @Nullable public static String getPrivateDnsHostname(@NonNull android.content.Context);
+    method public static int getPrivateDnsMode(@NonNull android.content.Context);
+    method @NonNull public static java.util.Set<java.lang.Integer> getUidsAllowedOnRestrictedNetworks(@NonNull android.content.Context);
+    method public static boolean getWifiAlwaysRequested(@NonNull android.content.Context, boolean);
+    method @NonNull public static java.time.Duration getWifiDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setCaptivePortalHttpUrl(@NonNull android.content.Context, @Nullable String);
+    method public static void setCaptivePortalMode(@NonNull android.content.Context, int);
+    method public static void setConnectivityKeepPendingIntentDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setDnsResolverSampleRanges(@NonNull android.content.Context, @NonNull android.util.Range<java.lang.Integer>);
+    method public static void setDnsResolverSampleValidityDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setDnsResolverSuccessThresholdPercent(@NonNull android.content.Context, @IntRange(from=0, to=100) int);
+    method public static void setGlobalProxy(@NonNull android.content.Context, @NonNull android.net.ProxyInfo);
+    method public static void setMobileDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
+    method public static void setMobileDataPreferredUids(@NonNull android.content.Context, @NonNull java.util.Set<java.lang.Integer>);
+    method public static void setNetworkAvoidBadWifi(@NonNull android.content.Context, int);
+    method public static void setNetworkMeteredMultipathPreference(@NonNull android.content.Context, @NonNull String);
+    method public static void setNetworkSwitchNotificationMaximumDailyCount(@NonNull android.content.Context, @IntRange(from=0) int);
+    method public static void setNetworkSwitchNotificationRateDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setPrivateDnsDefaultMode(@NonNull android.content.Context, @NonNull int);
+    method public static void setPrivateDnsHostname(@NonNull android.content.Context, @Nullable String);
+    method public static void setPrivateDnsMode(@NonNull android.content.Context, int);
+    method public static void setUidsAllowedOnRestrictedNetworks(@NonNull android.content.Context, @NonNull java.util.Set<java.lang.Integer>);
+    method public static void setWifiAlwaysRequested(@NonNull android.content.Context, boolean);
+    method public static void setWifiDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    field public static final int CAPTIVE_PORTAL_MODE_AVOID = 2; // 0x2
+    field public static final int CAPTIVE_PORTAL_MODE_IGNORE = 0; // 0x0
+    field public static final int CAPTIVE_PORTAL_MODE_PROMPT = 1; // 0x1
+    field public static final int NETWORK_AVOID_BAD_WIFI_AVOID = 2; // 0x2
+    field public static final int NETWORK_AVOID_BAD_WIFI_IGNORE = 0; // 0x0
+    field public static final int NETWORK_AVOID_BAD_WIFI_PROMPT = 1; // 0x1
+    field public static final int PRIVATE_DNS_MODE_OFF = 1; // 0x1
+    field public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2; // 0x2
+    field public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3; // 0x3
+  }
+
+  public final class EthernetNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    ctor public EthernetNetworkSpecifier(@NonNull String);
+    method public int describeContents();
+    method @Nullable public String getInterfaceName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.EthernetNetworkSpecifier> CREATOR;
+  }
+
+  public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
+    method public int getResourceId();
+  }
+
+  public final class NetworkAgentConfig implements android.os.Parcelable {
+    method @Nullable public String getSubscriberId();
+    method public boolean isBypassableVpn();
+  }
+
+  public static final class NetworkAgentConfig.Builder {
+    method @NonNull public android.net.NetworkAgentConfig.Builder setBypassableVpn(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setSubscriberId(@Nullable String);
+  }
+
+  public final class NetworkCapabilities implements android.os.Parcelable {
+    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getUids();
+    method public boolean hasForbiddenCapability(int);
+    field public static final long REDACT_ALL = -1L; // 0xffffffffffffffffL
+    field public static final long REDACT_FOR_ACCESS_FINE_LOCATION = 1L; // 0x1L
+    field public static final long REDACT_FOR_LOCAL_MAC_ADDRESS = 2L; // 0x2L
+    field public static final long REDACT_FOR_NETWORK_SETTINGS = 4L; // 0x4L
+    field public static final long REDACT_NONE = 0L; // 0x0L
+    field public static final int TRANSPORT_TEST = 7; // 0x7
+  }
+
+  public static final class NetworkCapabilities.Builder {
+    method @NonNull public android.net.NetworkCapabilities.Builder setUids(@Nullable java.util.Set<android.util.Range<java.lang.Integer>>);
+  }
+
+  public class NetworkPolicyManager {
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public int getMultipathPreference(@NonNull android.net.Network);
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public int getRestrictBackgroundStatus(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidNetworkingBlocked(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidRestrictedOnMeteredNetworks(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void registerNetworkPolicyCallback(@Nullable java.util.concurrent.Executor, @NonNull android.net.NetworkPolicyManager.NetworkPolicyCallback);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public void unregisterNetworkPolicyCallback(@NonNull android.net.NetworkPolicyManager.NetworkPolicyCallback);
+  }
+
+  public static interface NetworkPolicyManager.NetworkPolicyCallback {
+    method public default void onUidBlockedReasonChanged(int, int);
+  }
+
+  public class NetworkRequest implements android.os.Parcelable {
+    method @NonNull public int[] getForbiddenCapabilities();
+    method public boolean hasForbiddenCapability(int);
+  }
+
+  public static class NetworkRequest.Builder {
+    method @NonNull public android.net.NetworkRequest.Builder addForbiddenCapability(int);
+    method @NonNull public android.net.NetworkRequest.Builder removeForbiddenCapability(int);
+    method @NonNull public android.net.NetworkRequest.Builder setUids(@Nullable java.util.Set<android.util.Range<java.lang.Integer>>);
+  }
+
+  public final class NetworkStateSnapshot implements android.os.Parcelable {
+    ctor public NetworkStateSnapshot(@NonNull android.net.Network, @NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties, @Nullable String, int);
+    method public int describeContents();
+    method public int getLegacyType();
+    method @NonNull public android.net.LinkProperties getLinkProperties();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method @Nullable public String getSubscriberId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkStateSnapshot> CREATOR;
+  }
+
+  public class NetworkWatchlistManager {
+    method @Nullable public byte[] getWatchlistConfigHash();
+  }
+
+  public class PacProxyManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void addPacProxyInstalledListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.PacProxyManager.PacProxyInstalledListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void removePacProxyInstalledListener(@NonNull android.net.PacProxyManager.PacProxyInstalledListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setCurrentProxyScriptUrl(@Nullable android.net.ProxyInfo);
+  }
+
+  public static interface PacProxyManager.PacProxyInstalledListener {
+    method public void onPacProxyInstalled(@Nullable android.net.Network, @NonNull android.net.ProxyInfo);
+  }
+
+  public final class Proxy {
+    method public static void setHttpProxyConfiguration(@Nullable android.net.ProxyInfo);
+  }
+
+  public final class TestNetworkInterface implements android.os.Parcelable {
+    ctor public TestNetworkInterface(@NonNull android.os.ParcelFileDescriptor, @NonNull String);
+    method public int describeContents();
+    method @NonNull public android.os.ParcelFileDescriptor getFileDescriptor();
+    method @NonNull public String getInterfaceName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TestNetworkInterface> CREATOR;
+  }
+
+  public class TestNetworkManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public android.net.TestNetworkInterface createTapInterface();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public android.net.TestNetworkInterface createTunInterface(@NonNull java.util.Collection<android.net.LinkAddress>);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public void setupTestNetwork(@NonNull String, @NonNull android.os.IBinder);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public void teardownTestNetwork(@NonNull android.net.Network);
+    field public static final String TEST_TAP_PREFIX = "testtap";
+  }
+
+  public final class TestNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    ctor public TestNetworkSpecifier(@NonNull String);
+    method public int describeContents();
+    method @Nullable public String getInterfaceName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TestNetworkSpecifier> CREATOR;
+  }
+
+  public final class TetheringConstants {
+    field public static final String EXTRA_ADD_TETHER_TYPE = "extraAddTetherType";
+    field public static final String EXTRA_PROVISION_CALLBACK = "extraProvisionCallback";
+    field public static final String EXTRA_REM_TETHER_TYPE = "extraRemTetherType";
+    field public static final String EXTRA_RUN_PROVISION = "extraRunProvision";
+    field public static final String EXTRA_SET_ALARM = "extraSetAlarm";
+  }
+
+  public class TetheringManager {
+    ctor public TetheringManager(@NonNull android.content.Context, @NonNull java.util.function.Supplier<android.os.IBinder>);
+    method public int getLastTetherError(@NonNull String);
+    method @NonNull public String[] getTetherableBluetoothRegexs();
+    method @NonNull public String[] getTetherableIfaces();
+    method @NonNull public String[] getTetherableUsbRegexs();
+    method @NonNull public String[] getTetherableWifiRegexs();
+    method @NonNull public String[] getTetheredIfaces();
+    method @NonNull public String[] getTetheringErroredIfaces();
+    method public boolean isTetheringSupported();
+    method public boolean isTetheringSupported(@NonNull String);
+    method public void requestLatestTetheringEntitlementResult(int, @NonNull android.os.ResultReceiver, boolean);
+    method @Deprecated public int setUsbTethering(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void startTethering(int, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.StartTetheringCallback);
+    method @Deprecated public int tether(@NonNull String);
+    method @Deprecated public int untether(@NonNull String);
+  }
+
+  public static interface TetheringManager.TetheringEventCallback {
+    method @Deprecated public default void onTetherableInterfaceRegexpsChanged(@NonNull android.net.TetheringManager.TetheringInterfaceRegexps);
+  }
+
+  @Deprecated public static class TetheringManager.TetheringInterfaceRegexps {
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableBluetoothRegexs();
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableUsbRegexs();
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableWifiRegexs();
+  }
+
+  public interface TransportInfo {
+    method public default long getApplicableRedactions();
+    method @NonNull public default android.net.TransportInfo makeCopy(long);
+  }
+
+  public final class UnderlyingNetworkInfo implements android.os.Parcelable {
+    ctor public UnderlyingNetworkInfo(int, @NonNull String, @NonNull java.util.List<java.lang.String>);
+    method public int describeContents();
+    method @NonNull public String getInterface();
+    method public int getOwnerUid();
+    method @NonNull public java.util.List<java.lang.String> getUnderlyingInterfaces();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.UnderlyingNetworkInfo> CREATOR;
+  }
+
+  public class VpnManager {
+    field public static final int TYPE_VPN_LEGACY = 3; // 0x3
+    field public static final int TYPE_VPN_NONE = -1; // 0xffffffff
+    field public static final int TYPE_VPN_OEM = 4; // 0x4
+    field public static final int TYPE_VPN_PLATFORM = 2; // 0x2
+    field public static final int TYPE_VPN_SERVICE = 1; // 0x1
+  }
+
+  public final class VpnTransportInfo implements android.os.Parcelable android.net.TransportInfo {
+    ctor public VpnTransportInfo(int, @Nullable String);
+    method public int describeContents();
+    method @Nullable public String getSessionId();
+    method public int getType();
+    method @NonNull public android.net.VpnTransportInfo makeCopy(long);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.VpnTransportInfo> CREATOR;
+  }
+
+}
+
+package android.os {
+
+  public final class BatteryStatsManager {
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public void reportNetworkInterfaceForTransports(@NonNull String, @NonNull int[]) throws java.lang.RuntimeException;
+  }
+
+  public class Binder implements android.os.IBinder {
+    method public final void markVintfStability();
+  }
+
+  public class Build {
+    method public static boolean isDebuggable();
+  }
+
+  public static class Build.VERSION {
+    field public static final int DEVICE_INITIAL_SDK_INT;
+  }
+
+  public interface Parcelable {
+    method public default int getStability();
+  }
+
+  public class Process {
+    field public static final int VPN_UID = 1016; // 0x3f8
+  }
+
+  public class StatsFrameworkInitializer {
+    method public static void registerServiceWrappers();
+    method public static void setStatsServiceManager(@NonNull android.os.StatsServiceManager);
+  }
+
+  public class StatsServiceManager {
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsCompanionServiceRegisterer();
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsManagerServiceRegisterer();
+    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsdServiceRegisterer();
+  }
+
+  public static class StatsServiceManager.ServiceNotFoundException extends java.lang.Exception {
+    ctor public StatsServiceManager.ServiceNotFoundException(@NonNull String);
+  }
+
+  public static final class StatsServiceManager.ServiceRegisterer {
+    method @Nullable public android.os.IBinder get();
+    method @Nullable public android.os.IBinder getOrThrow() throws android.os.StatsServiceManager.ServiceNotFoundException;
+  }
+
+}
+
+package android.os.storage {
+
+  public class StorageManager {
+    method public void notifyAppIoBlocked(@NonNull java.util.UUID, int, int, int);
+    method public void notifyAppIoResumed(@NonNull java.util.UUID, int, int, int);
+    field public static final int APP_IO_BLOCKED_REASON_TRANSCODING = 1; // 0x1
+    field public static final int APP_IO_BLOCKED_REASON_UNKNOWN = 0; // 0x0
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method @NonNull public android.os.UserHandle getOwner();
+  }
+
+}
+
+package android.provider {
+
+  public final class DeviceConfig {
+    field public static final String NAMESPACE_ALARM_MANAGER = "alarm_manager";
+    field public static final String NAMESPACE_APP_STANDBY = "app_standby";
+    field public static final String NAMESPACE_DEVICE_IDLE = "device_idle";
+  }
+
+}
+
+package android.scheduling {
+
+  public class SchedulingFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+}
+
+package android.system {
+
+  public final class NetlinkSocketAddress extends java.net.SocketAddress {
+    ctor public NetlinkSocketAddress(int, int);
+    method public int getGroupsMask();
+    method public int getPortId();
+  }
+
+  public final class Os {
+    method @Nullable public static android.system.StructCapUserData[] capget(@NonNull android.system.StructCapUserHeader) throws android.system.ErrnoException;
+    method public static void capset(@NonNull android.system.StructCapUserHeader, @NonNull android.system.StructCapUserData[]) throws android.system.ErrnoException;
+    method public static int getpgid(int) throws android.system.ErrnoException;
+    method @Nullable public static android.system.StructRlimit getrlimit(int) throws android.system.ErrnoException;
+    method public static int getsockoptInt(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method @Nullable public static android.system.StructLinger getsockoptLinger(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static int ioctlInt(@NonNull java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method @Nullable public static java.io.FileDescriptor[] pipe2(int) throws android.system.ErrnoException;
+    method @Nullable public static String realpath(@Nullable String) throws android.system.ErrnoException;
+    method public static void setpgid(int, int) throws android.system.ErrnoException;
+    method public static void setregid(int, int) throws android.system.ErrnoException;
+    method public static void setreuid(int, int) throws android.system.ErrnoException;
+    method public static void setsockoptIfreq(@NonNull java.io.FileDescriptor, int, int, @Nullable String) throws android.system.ErrnoException;
+    method public static void setsockoptLinger(@NonNull java.io.FileDescriptor, int, int, @NonNull android.system.StructLinger) throws android.system.ErrnoException;
+    method public static long splice(@NonNull java.io.FileDescriptor, @Nullable android.system.Int64Ref, @NonNull java.io.FileDescriptor, @Nullable android.system.Int64Ref, long, int) throws android.system.ErrnoException;
+    method public static void unlink(@Nullable String) throws android.system.ErrnoException;
+  }
+
+  public final class OsConstants {
+    method public static int CAP_TO_INDEX(int);
+    method public static int CAP_TO_MASK(int);
+    field public static final int ARPHRD_LOOPBACK;
+    field public static final int EUSERS;
+    field public static final int MAP_POPULATE;
+    field public static final int O_DIRECT;
+    field public static final int PR_CAP_AMBIENT;
+    field public static final int PR_CAP_AMBIENT_RAISE;
+    field public static final int RLIMIT_NOFILE;
+    field public static final int RTMGRP_IPV4_IFADDR;
+    field public static final int SPLICE_F_MORE;
+    field public static final int SPLICE_F_MOVE;
+    field public static final int TIOCOUTQ;
+    field public static final int UDP_ENCAP;
+    field public static final int UDP_ENCAP_ESPINUDP;
+    field public static final int XATTR_CREATE;
+    field public static final int XATTR_REPLACE;
+    field public static final int _LINUX_CAPABILITY_VERSION_3;
+  }
+
+  public final class PacketSocketAddress extends java.net.SocketAddress {
+    ctor public PacketSocketAddress(int, int, byte[]);
+  }
+
+  public final class StructCapUserData {
+    ctor public StructCapUserData(int, int, int);
+    field public final int effective;
+    field public final int inheritable;
+    field public final int permitted;
+  }
+
+  public final class StructCapUserHeader {
+    ctor public StructCapUserHeader(int, int);
+  }
+
+  public final class StructLinger {
+    ctor public StructLinger(int, int);
+    method public boolean isOn();
+    field public final int l_linger;
+  }
+
+  public final class StructRlimit {
+    field public final long rlim_cur;
+  }
+
+  public final class UnixSocketAddress extends java.net.SocketAddress {
+    method public static android.system.UnixSocketAddress createFileSystem(String);
+  }
+
+  public final class VmSocketAddress extends java.net.SocketAddress {
+    ctor public VmSocketAddress(int, int);
+    method public int getSvmCid();
+    method public int getSvmPort();
+  }
+
+}
+
+package android.telephony {
+
+  public abstract class CellSignalStrength {
+    method public static int getNumSignalStrengthLevels();
+  }
+
+  public class TelephonyManager {
+    method @NonNull public static int[] getAllNetworkTypes();
+  }
+
+}
+
+package android.util {
+
+  public class AtomicFile {
+    ctor public AtomicFile(@NonNull java.io.File, @Nullable android.util.SystemConfigFileCommitEventLogger);
+  }
+
+  public final class Log {
+    method public static int logToRadioBuffer(int, @Nullable String, @Nullable String);
+  }
+
+  public class SystemConfigFileCommitEventLogger {
+    ctor public SystemConfigFileCommitEventLogger(@NonNull String);
+    method public void setStartTime(long);
+  }
+
+}
+
+package com.android.okhttp.internalandroidapi {
+
+  public final class AndroidResponseCacheAdapter {
+    ctor public AndroidResponseCacheAdapter(@NonNull com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder);
+    method public void close() throws java.io.IOException;
+    method public void delete() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method @Nullable public java.net.CacheResponse get(@NonNull java.net.URI, @NonNull String, @Nullable java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method @NonNull public com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder getCacheHolder();
+    method public int getHitCount();
+    method public long getMaxSize();
+    method public int getNetworkCount();
+    method public int getRequestCount();
+    method public long getSize() throws java.io.IOException;
+    method @Nullable public java.net.CacheRequest put(@NonNull java.net.URI, @NonNull java.net.URLConnection) throws java.io.IOException;
+  }
+
+  public interface HasCacheHolder {
+    method @NonNull public com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder getCacheHolder();
+  }
+
+  public static final class HasCacheHolder.CacheHolder {
+    method @NonNull public static com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder create(@NonNull java.io.File, long);
+    method public boolean isEquivalent(@NonNull java.io.File, long);
+  }
+
+}
+
+package dalvik.annotation.codegen {
+
+  @java.lang.annotation.Repeatable(CovariantReturnType.CovariantReturnTypes.class) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface CovariantReturnType {
+    method public abstract int presentAfter();
+    method public abstract Class<?> returnType();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public static @interface CovariantReturnType.CovariantReturnTypes {
+    method public abstract dalvik.annotation.codegen.CovariantReturnType[] value();
+  }
+
+}
+
+package dalvik.annotation.optimization {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface CriticalNative {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface FastNative {
+  }
+
+}
+
+package dalvik.system {
+
+  public final class AnnotatedStackTraceElement {
+    method @Nullable public Object getBlockedOn();
+    method @Nullable public Object[] getHeldLocks();
+    method @NonNull public StackTraceElement getStackTraceElement();
+  }
+
+  public class AppSpecializationHooks {
+    method public static void handleCompatChangesBeforeBindingApplication();
+  }
+
+  public class BaseDexClassLoader extends java.lang.ClassLoader {
+    method public void addDexPath(@Nullable String);
+    method public void addNativePath(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public String getLdLibraryPath();
+    method public void reportClassLoaderChain();
+    method public static void setReporter(@Nullable dalvik.system.BaseDexClassLoader.Reporter);
+  }
+
+  public static interface BaseDexClassLoader.Reporter {
+    method public void report(@NonNull java.util.Map<java.lang.String,java.lang.String>);
+  }
+
+  public final class BlockGuard {
+    method @NonNull public static dalvik.system.BlockGuard.Policy getThreadPolicy();
+    method @NonNull public static dalvik.system.BlockGuard.VmPolicy getVmPolicy();
+    method public static void setThreadPolicy(@NonNull dalvik.system.BlockGuard.Policy);
+    method public static void setVmPolicy(@NonNull dalvik.system.BlockGuard.VmPolicy);
+    field public static final dalvik.system.BlockGuard.Policy LAX_POLICY;
+    field public static final dalvik.system.BlockGuard.VmPolicy LAX_VM_POLICY;
+  }
+
+  public static interface BlockGuard.Policy {
+    method public int getPolicyMask();
+    method public void onReadFromDisk();
+    method public void onUnbufferedIO();
+    method public void onWriteToDisk();
+  }
+
+  public static interface BlockGuard.VmPolicy {
+    method public void onPathAccess(@NonNull String);
+  }
+
+  public final class CloseGuard {
+    method public void close();
+    method public static dalvik.system.CloseGuard get();
+    method public static dalvik.system.CloseGuard.Reporter getReporter();
+    method public void open(String);
+    method public void openWithCallSite(String, String);
+    method public static void setEnabled(boolean);
+    method public static void setReporter(dalvik.system.CloseGuard.Reporter);
+    method public void warnIfOpen();
+  }
+
+  public static interface CloseGuard.Reporter {
+    method public void report(String, Throwable);
+    method public default void report(String);
+  }
+
+  public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader {
+    ctor public DelegateLastClassLoader(String, String, ClassLoader, ClassLoader[]);
+  }
+
+  @Deprecated public final class DexFile {
+    method @Deprecated @NonNull public static dalvik.system.DexFile.OptimizationInfo getDexFileOptimizationInfo(@NonNull String, @NonNull String) throws java.io.FileNotFoundException;
+    method @Deprecated @Nullable public static String[] getDexFileOutputPaths(@NonNull String, @NonNull String) throws java.io.FileNotFoundException;
+    method @Deprecated public static int getDexOptNeeded(@NonNull String, @NonNull String, @NonNull String, @Nullable String, boolean, boolean) throws java.io.FileNotFoundException, java.io.IOException;
+    method @Deprecated @NonNull public static String getSafeModeCompilerFilter(@NonNull String);
+    method @Deprecated public static boolean isProfileGuidedCompilerFilter(@NonNull String);
+    method @Deprecated public static boolean isValidCompilerFilter(@NonNull String);
+    field @Deprecated public static final int DEX2OAT_FOR_FILTER = 3; // 0x3
+    field @Deprecated public static final int NO_DEXOPT_NEEDED = 0; // 0x0
+  }
+
+  @Deprecated public static final class DexFile.OptimizationInfo {
+    method @Deprecated @NonNull public String getReason();
+    method @Deprecated @NonNull public String getStatus();
+  }
+
+  public class PathClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public PathClassLoader(@NonNull String, @Nullable String, @Nullable ClassLoader, @Nullable ClassLoader[]);
+  }
+
+  public final class RuntimeHooks {
+    method public static void setTimeZoneIdSupplier(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public static void setUncaughtExceptionPreHandler(@Nullable java.lang.Thread.UncaughtExceptionHandler);
+  }
+
+  public abstract class SocketTagger {
+    ctor public SocketTagger();
+    method public static dalvik.system.SocketTagger get();
+    method public static void set(dalvik.system.SocketTagger);
+    method public abstract void tag(java.io.FileDescriptor) throws java.net.SocketException;
+    method public final void tag(java.net.Socket) throws java.net.SocketException;
+    method public final void tag(java.net.DatagramSocket) throws java.net.SocketException;
+    method public abstract void untag(java.io.FileDescriptor) throws java.net.SocketException;
+    method public final void untag(java.net.Socket) throws java.net.SocketException;
+    method public final void untag(java.net.DatagramSocket) throws java.net.SocketException;
+  }
+
+  public final class VMDebug {
+    method public static void attachAgent(String, ClassLoader) throws java.io.IOException;
+    method public static long countInstancesOfClass(Class, boolean);
+    method public static long[] countInstancesOfClasses(Class[], boolean);
+    method public static void dumpHprofData(String) throws java.io.IOException;
+    method public static void dumpHprofData(String, java.io.FileDescriptor) throws java.io.IOException;
+    method public static void dumpHprofDataDdms();
+    method public static void dumpReferenceTables();
+    method public static int getAllocCount(int);
+    method @dalvik.annotation.optimization.FastNative public static int getLoadedClassCount();
+    method public static int getMethodTracingMode();
+    method public static String getRuntimeStat(String);
+    method public static java.util.Map<java.lang.String,java.lang.String> getRuntimeStats();
+    method public static String[] getVmFeatureList();
+    method @dalvik.annotation.optimization.FastNative public static boolean isDebuggerConnected();
+    method @dalvik.annotation.optimization.FastNative public static boolean isDebuggingEnabled();
+    method @dalvik.annotation.optimization.FastNative public static long lastDebuggerActivity();
+    method @dalvik.annotation.optimization.FastNative public static void printLoadedClasses(int);
+    method public static void resetAllocCount(int);
+    method public static void setAllocTrackerStackDepth(int);
+    method public static void startAllocCounting();
+    method public static void startMethodTracing(String, int, int, boolean, int);
+    method public static void startMethodTracing(String, java.io.FileDescriptor, int, int, boolean, int, boolean);
+    method public static void startMethodTracingDdms(int, int, boolean, int);
+    method public static void stopAllocCounting();
+    method public static void stopMethodTracing();
+    method @dalvik.annotation.optimization.FastNative public static long threadCpuTimeNanos();
+    field public static final int KIND_ALL_COUNTS = -1; // 0xffffffff
+    field public static final int KIND_GLOBAL_ALLOCATED_BYTES = 2; // 0x2
+    field public static final int KIND_GLOBAL_ALLOCATED_OBJECTS = 1; // 0x1
+    field public static final int KIND_GLOBAL_CLASS_INIT_COUNT = 32; // 0x20
+    field public static final int KIND_GLOBAL_CLASS_INIT_TIME = 64; // 0x40
+    field public static final int KIND_GLOBAL_FREED_BYTES = 8; // 0x8
+    field public static final int KIND_GLOBAL_FREED_OBJECTS = 4; // 0x4
+    field public static final int KIND_GLOBAL_GC_INVOCATIONS = 16; // 0x10
+    field public static final int KIND_THREAD_ALLOCATED_BYTES = 131072; // 0x20000
+    field public static final int KIND_THREAD_ALLOCATED_OBJECTS = 65536; // 0x10000
+    field public static final int KIND_THREAD_GC_INVOCATIONS = 1048576; // 0x100000
+    field public static final int TRACE_COUNT_ALLOCS = 1; // 0x1
+  }
+
+  public final class VMRuntime {
+    method @dalvik.annotation.optimization.FastNative public long addressOf(Object);
+    method public static void bootCompleted();
+    method public void clampGrowthLimit();
+    method public void clearGrowthLimit();
+    method public static String getCurrentInstructionSet();
+    method public static String getInstructionSet(String);
+    method public static dalvik.system.VMRuntime getRuntime();
+    method public int getTargetSdkVersion();
+    method @dalvik.annotation.optimization.FastNative public boolean is64Bit();
+    method public static boolean is64BitAbi(String);
+    method public static boolean is64BitInstructionSet(String);
+    method @dalvik.annotation.optimization.FastNative public boolean isCheckJniEnabled();
+    method @dalvik.annotation.optimization.FastNative public boolean isNativeDebuggable();
+    method public static boolean isValidClassLoaderContext(String);
+    method @dalvik.annotation.optimization.FastNative public Object newNonMovableArray(Class<?>, int);
+    method @dalvik.annotation.optimization.FastNative public Object newUnpaddedArray(Class<?>, int);
+    method public void notifyStartupCompleted();
+    method public void preloadDexCaches();
+    method public static void registerAppInfo(String, String, String, String[], int);
+    method public void registerNativeAllocation(long);
+    method @Deprecated public void registerNativeAllocation(int);
+    method public void registerNativeFree(long);
+    method @Deprecated public void registerNativeFree(int);
+    method public static void registerSensitiveThread();
+    method public void requestConcurrentGC();
+    method public static void resetJitCounters();
+    method public static void setDedupeHiddenApiWarnings(boolean);
+    method public void setDisabledCompatChanges(long[]);
+    method public void setHiddenApiAccessLogSamplingRate(int);
+    method public void setHiddenApiExemptions(String[]);
+    method public static void setHiddenApiUsageLogger(dalvik.system.VMRuntime.HiddenApiUsageLogger);
+    method public static void setNonSdkApiUsageConsumer(java.util.function.Consumer<java.lang.String>);
+    method public static void setProcessDataDirectory(String);
+    method public static void setProcessPackageName(String);
+    method public void setTargetSdkVersion(int);
+    method public void updateProcessState(int);
+    method public String vmInstructionSet();
+    method public String vmLibrary();
+    field public static final int CODE_PATH_TYPE_PRIMARY_APK = 1; // 0x1
+    field public static final int CODE_PATH_TYPE_SECONDARY_DEX = 4; // 0x4
+    field public static final int CODE_PATH_TYPE_SPLIT_APK = 2; // 0x2
+    field public static final int SDK_VERSION_CUR_DEVELOPMENT = 10000; // 0x2710
+  }
+
+  public static interface VMRuntime.HiddenApiUsageLogger {
+    method public void hiddenApiUsed(int, String, String, int, boolean);
+    field public static final int ACCESS_METHOD_JNI = 2; // 0x2
+    field public static final int ACCESS_METHOD_LINKING = 3; // 0x3
+    field public static final int ACCESS_METHOD_NONE = 0; // 0x0
+    field public static final int ACCESS_METHOD_REFLECTION = 1; // 0x1
+  }
+
+  public final class VMStack {
+    method @Nullable @dalvik.annotation.optimization.FastNative public static dalvik.system.AnnotatedStackTraceElement[] getAnnotatedThreadStackTrace(Thread);
+  }
+
+  public final class ZygoteHooks {
+    method public static void gcAndFinalize();
+    method public static boolean isIndefiniteThreadSuspensionSafe();
+    method public static void onBeginPreload();
+    method public static void onEndPreload();
+    method public static void postForkChild(int, boolean, boolean, String);
+    method public static void postForkCommon();
+    method public static void postForkSystemServer(int);
+    method public static void preFork();
+    method public static void startZygoteNoThreadCreation();
+    method public static void stopZygoteNoThreadCreation();
+  }
+
+}
+
+package java.io {
+
+  public final class FileDescriptor {
+    method public int getInt$();
+    method public void setInt$(int);
+  }
+
+  public class FileInputStream extends java.io.InputStream {
+    ctor public FileInputStream(java.io.FileDescriptor, boolean);
+  }
+
+}
+
+package java.lang {
+
+  public class Thread implements java.lang.Runnable {
+    method public static java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionPreHandler();
+    method public static void setUncaughtExceptionPreHandler(java.lang.Thread.UncaughtExceptionHandler);
+  }
+
+}
+
+package java.net {
+
+  public class DatagramSocket implements java.io.Closeable {
+    method public java.io.FileDescriptor getFileDescriptor$();
+  }
+
+  public final class Inet4Address extends java.net.InetAddress {
+    field public static final java.net.InetAddress ALL;
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
+  }
+
+  public final class Inet6Address extends java.net.InetAddress {
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
+  }
+
+  public class InetAddress implements java.io.Serializable {
+    method public static void clearDnsCache();
+    method @NonNull public static java.net.InetAddress[] getAllByNameOnNet(@Nullable String, int) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByNameOnNet(@Nullable String, int) throws java.net.UnknownHostException;
+    method @Deprecated public static boolean isNumeric(String);
+    method @Deprecated public static java.net.InetAddress parseNumericAddress(String);
+  }
+
+  public class InetSocketAddress extends java.net.SocketAddress {
+    ctor public InetSocketAddress();
+  }
+
+  public class ServerSocket implements java.io.Closeable {
+    method public java.net.SocketImpl getImpl() throws java.net.SocketException;
+  }
+
+  public class Socket implements java.io.Closeable {
+    method public java.io.FileDescriptor getFileDescriptor$();
+  }
+
+  public abstract class SocketImpl implements java.net.SocketOptions {
+    method public java.io.FileDescriptor getFD$();
+  }
+
+}
+
+package java.nio {
+
+  public abstract class ByteBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.ByteBuffer> {
+    method public void setAccessible(boolean);
+  }
+
+  public class DirectByteBuffer extends java.nio.MappedByteBuffer {
+    ctor public DirectByteBuffer(int, long, java.io.FileDescriptor, Runnable, boolean);
+    method public final long address();
+    method public final void setAccessible(boolean);
+  }
+
+  public final class NIOAccess {
+    method public static Object getBaseArray(java.nio.Buffer);
+    method public static int getBaseArrayOffset(java.nio.Buffer);
+  }
+
+  public final class NioUtils {
+    method public static void freeDirectBuffer(java.nio.ByteBuffer);
+    method public static byte[] unsafeArray(java.nio.ByteBuffer);
+    method public static int unsafeArrayOffset(java.nio.ByteBuffer);
+  }
+
+}
+
+package java.security {
+
+  public abstract class Provider extends java.util.Properties {
+    method public void warmUpServiceProvision();
+  }
+
+  public abstract class Signature extends java.security.SignatureSpi {
+    method public java.security.SignatureSpi getCurrentSpi();
+  }
+
+}
+
+package java.text {
+
+  public abstract class DateFormat extends java.text.Format {
+    method public static final void set24HourTimePref(Boolean);
+  }
+
+}
+
+package java.util {
+
+  public class LinkedHashMap<K, V> extends java.util.HashMap<K,V> implements java.util.Map<K,V> {
+    method public java.util.Map.Entry<K,V> eldest();
+  }
+
+}
+
+package java.util.zip {
+
+  public class ZipEntry implements java.lang.Cloneable {
+    method public long getDataOffset();
+  }
+
+}
+
+package javax.crypto {
+
+  public class Cipher {
+    method public javax.crypto.CipherSpi getCurrentSpi();
+  }
+
+  public class Mac implements java.lang.Cloneable {
+    method public javax.crypto.MacSpi getCurrentSpi();
+  }
+
+}
+
+package javax.net.ssl {
+
+  public abstract class HttpsURLConnection extends java.net.HttpURLConnection {
+    method public static javax.net.ssl.HostnameVerifier getStrictHostnameVerifier();
+  }
+
+}
+
+package libcore.content.type {
+
+  public final class MimeMap {
+    method @NonNull public libcore.content.type.MimeMap.Builder buildUpon();
+    method @NonNull public static libcore.content.type.MimeMap.Builder builder();
+    method @NonNull public java.util.Set<java.lang.String> extensions();
+    method @NonNull public static libcore.content.type.MimeMap getDefault();
+    method @Nullable public String guessExtensionFromMimeType(@Nullable String);
+    method @Nullable public String guessMimeTypeFromExtension(@Nullable String);
+    method public boolean hasExtension(@Nullable String);
+    method public boolean hasMimeType(@Nullable String);
+    method @NonNull public java.util.Set<java.lang.String> mimeTypes();
+    method public static void setDefaultSupplier(@NonNull java.util.function.Supplier<libcore.content.type.MimeMap>);
+  }
+
+  public static final class MimeMap.Builder {
+    method @NonNull public libcore.content.type.MimeMap.Builder addMimeMapping(@NonNull String, @NonNull java.util.List<java.lang.String>);
+    method @NonNull public libcore.content.type.MimeMap build();
+  }
+
+}
+
+package libcore.io {
+
+  public class ForwardingOs implements libcore.io.Os {
+    ctor protected ForwardingOs(@NonNull libcore.io.Os);
+    method public boolean access(@Nullable String, int) throws android.system.ErrnoException;
+    method public java.io.FileDescriptor open(@Nullable String, int, int) throws android.system.ErrnoException;
+    method public void remove(@Nullable String) throws android.system.ErrnoException;
+    method public void rename(@Nullable String, @Nullable String) throws android.system.ErrnoException;
+    method @Nullable public android.system.StructStat stat(@Nullable String) throws android.system.ErrnoException;
+    method public void unlink(@Nullable String) throws android.system.ErrnoException;
+  }
+
+  public final class IoBridge {
+    method public static void closeAndSignalBlockedThreads(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    method @NonNull public static java.io.FileDescriptor open(@NonNull String, int) throws java.io.FileNotFoundException;
+    method public static int read(@NonNull java.io.FileDescriptor, @NonNull byte[], int, int) throws java.io.IOException;
+    method public static void write(@NonNull java.io.FileDescriptor, @NonNull byte[], int, int) throws java.io.IOException;
+  }
+
+  public final class IoUtils {
+    method public static int acquireRawFd(@NonNull java.io.FileDescriptor);
+    method public static void close(@Nullable java.io.FileDescriptor) throws java.io.IOException;
+    method public static void closeQuietly(@Nullable AutoCloseable);
+    method public static void closeQuietly(@Nullable java.io.FileDescriptor);
+    method public static void closeQuietly(@Nullable java.net.Socket);
+    method @NonNull public static byte[] readFileAsByteArray(@NonNull String) throws java.io.IOException;
+    method @NonNull public static String readFileAsString(@NonNull String) throws java.io.IOException;
+    method public static void setBlocking(@NonNull java.io.FileDescriptor, boolean) throws java.io.IOException;
+    method public static void setFdOwner(@NonNull java.io.FileDescriptor, @NonNull Object);
+  }
+
+  public final class Memory {
+    method public static void memmove(@NonNull Object, int, @NonNull Object, int, long);
+    method public static int peekInt(@NonNull byte[], int, @NonNull java.nio.ByteOrder);
+    method public static short peekShort(@NonNull byte[], int, @NonNull java.nio.ByteOrder);
+    method public static void pokeInt(@NonNull byte[], int, int, @NonNull java.nio.ByteOrder);
+    method public static void pokeLong(@NonNull byte[], int, long, @NonNull java.nio.ByteOrder);
+    method public static void pokeShort(@NonNull byte[], int, short, @NonNull java.nio.ByteOrder);
+  }
+
+  public interface Os {
+    method public static boolean compareAndSetDefault(libcore.io.Os, libcore.io.Os);
+    method public static libcore.io.Os getDefault();
+  }
+
+  public final class Streams {
+    method public static int copy(@NonNull java.io.InputStream, @NonNull java.io.OutputStream) throws java.io.IOException;
+    method public static void readFully(@NonNull java.io.InputStream, @NonNull byte[]) throws java.io.IOException;
+    method @NonNull public static byte[] readFully(@NonNull java.io.InputStream) throws java.io.IOException;
+    method @NonNull public static String readFully(@NonNull java.io.Reader) throws java.io.IOException;
+    method @NonNull public static byte[] readFullyNoClose(@NonNull java.io.InputStream) throws java.io.IOException;
+    method public static int readSingleByte(@NonNull java.io.InputStream) throws java.io.IOException;
+    method public static long skipByReading(@NonNull java.io.InputStream, long) throws java.io.IOException;
+    method public static void writeSingleByte(@NonNull java.io.OutputStream, int) throws java.io.IOException;
+  }
+
+}
+
+package libcore.net {
+
+  public class InetAddressUtils {
+    method public static boolean isNumericAddress(String);
+    method public static java.net.InetAddress parseNumericAddress(String);
+  }
+
+  public abstract class NetworkSecurityPolicy {
+    ctor public NetworkSecurityPolicy();
+    method public static libcore.net.NetworkSecurityPolicy getInstance();
+    method public abstract boolean isCertificateTransparencyVerificationRequired(String);
+    method public abstract boolean isCleartextTrafficPermitted();
+    method public abstract boolean isCleartextTrafficPermitted(String);
+    method public static void setInstance(libcore.net.NetworkSecurityPolicy);
+  }
+
+}
+
+package libcore.net.event {
+
+  public final class NetworkEventDispatcher {
+    method public void dispatchNetworkConfigurationChange();
+    method public static libcore.net.event.NetworkEventDispatcher getInstance();
+  }
+
+}
+
+package libcore.net.http {
+
+  public interface Dns {
+    method @NonNull public java.util.List<java.net.InetAddress> lookup(@Nullable String) throws java.net.UnknownHostException;
+  }
+
+  public class HttpURLConnectionFactory {
+    method @NonNull public static libcore.net.http.HttpURLConnectionFactory createInstance();
+    method public java.net.URLConnection openConnection(@NonNull java.net.URL, @NonNull javax.net.SocketFactory, @NonNull java.net.Proxy) throws java.io.IOException;
+    method public void setDns(@NonNull libcore.net.http.Dns);
+    method public void setNewConnectionPool(int, long, @NonNull java.util.concurrent.TimeUnit);
+  }
+
+}
+
+package libcore.util {
+
+  public final class EmptyArray {
+    field @NonNull public static final boolean[] BOOLEAN;
+    field @NonNull public static final byte[] BYTE;
+    field @NonNull public static final float[] FLOAT;
+    field @NonNull public static final int[] INT;
+    field @NonNull public static final long[] LONG;
+    field @NonNull public static final Object[] OBJECT;
+    field @NonNull public static final String[] STRING;
+  }
+
+  public final class FP16 {
+    method public static short ceil(short);
+    method public static int compare(short, short);
+    method public static boolean equals(short, short);
+    method public static short floor(short);
+    method public static boolean greater(short, short);
+    method public static boolean greaterEquals(short, short);
+    method public static boolean isInfinite(short);
+    method public static boolean isNaN(short);
+    method public static boolean isNormalized(short);
+    method public static boolean less(short, short);
+    method public static boolean lessEquals(short, short);
+    method public static short max(short, short);
+    method public static short min(short, short);
+    method public static short rint(short);
+    method public static float toFloat(short);
+    method public static short toHalf(float);
+    method public static String toHexString(short);
+    method public static short trunc(short);
+    field public static final short EPSILON = 5120; // 0x1400
+    field public static final int EXPONENT_BIAS = 15; // 0xf
+    field public static final int EXPONENT_SHIFT = 10; // 0xa
+    field public static final int EXPONENT_SIGNIFICAND_MASK = 32767; // 0x7fff
+    field public static final short LOWEST_VALUE = -1025; // 0xfffffbff
+    field public static final int MAX_EXPONENT = 15; // 0xf
+    field public static final short MAX_VALUE = 31743; // 0x7bff
+    field public static final int MIN_EXPONENT = -14; // 0xfffffff2
+    field public static final short MIN_NORMAL = 1024; // 0x400
+    field public static final short MIN_VALUE = 1; // 0x1
+    field public static final short NEGATIVE_INFINITY = -1024; // 0xfffffc00
+    field public static final short NEGATIVE_ZERO = -32768; // 0xffff8000
+    field public static final short NaN = 32256; // 0x7e00
+    field public static final short POSITIVE_INFINITY = 31744; // 0x7c00
+    field public static final short POSITIVE_ZERO = 0; // 0x0
+    field public static final int SHIFTED_EXPONENT_MASK = 31; // 0x1f
+    field public static final int SIGNIFICAND_MASK = 1023; // 0x3ff
+    field public static final int SIGN_MASK = 32768; // 0x8000
+    field public static final int SIGN_SHIFT = 15; // 0xf
+    field public static final int SIZE = 16; // 0x10
+  }
+
+  public class HexEncoding {
+    method public static byte[] decode(String) throws java.lang.IllegalArgumentException;
+    method public static byte[] decode(String, boolean) throws java.lang.IllegalArgumentException;
+    method public static byte[] decode(char[]) throws java.lang.IllegalArgumentException;
+    method public static byte[] decode(char[], boolean) throws java.lang.IllegalArgumentException;
+    method public static char[] encode(byte[]);
+    method public static char[] encode(byte[], boolean);
+    method public static char[] encode(byte[], int, int);
+    method public static String encodeToString(byte, boolean);
+    method public static String encodeToString(byte[]);
+    method public static String encodeToString(byte[], boolean);
+  }
+
+  public class NativeAllocationRegistry {
+    ctor public NativeAllocationRegistry(@NonNull ClassLoader, long, long);
+    method public static void applyFreeFunction(long, long);
+    method public static libcore.util.NativeAllocationRegistry createMalloced(@NonNull ClassLoader, long, long);
+    method public static libcore.util.NativeAllocationRegistry createMalloced(@NonNull ClassLoader, long);
+    method public static libcore.util.NativeAllocationRegistry createNonmalloced(@NonNull ClassLoader, long, long);
+    method @NonNull public Runnable registerNativeAllocation(@NonNull Object, long);
+  }
+
+  public class SneakyThrow {
+    method public static void sneakyThrow(@NonNull Throwable);
+  }
+
+  public class XmlObjectFactory {
+    method @NonNull public static org.xml.sax.XMLReader newXMLReader();
+    method @NonNull public static org.xmlpull.v1.XmlPullParser newXmlPullParser();
+    method @NonNull public static org.xmlpull.v1.XmlSerializer newXmlSerializer();
+  }
+
+}
+
+package org.apache.harmony.dalvik.ddmc {
+
+  public class Chunk {
+    ctor public Chunk(int, byte[], int, int);
+    ctor public Chunk(int, java.nio.ByteBuffer);
+    field public int type;
+  }
+
+  public abstract class ChunkHandler {
+    ctor public ChunkHandler();
+    method public static org.apache.harmony.dalvik.ddmc.Chunk createFailChunk(int, String);
+    method public abstract org.apache.harmony.dalvik.ddmc.Chunk handleChunk(org.apache.harmony.dalvik.ddmc.Chunk);
+    method public static String name(int);
+    method public abstract void onConnected();
+    method public abstract void onDisconnected();
+    method public static int type(String);
+    method public static java.nio.ByteBuffer wrapChunk(org.apache.harmony.dalvik.ddmc.Chunk);
+    field public static final java.nio.ByteOrder CHUNK_ORDER;
+  }
+
+  public final class DdmServer {
+    method public static void registerHandler(int, org.apache.harmony.dalvik.ddmc.ChunkHandler);
+    method public static void registrationComplete();
+    method public static void sendChunk(org.apache.harmony.dalvik.ddmc.Chunk);
+    method public static org.apache.harmony.dalvik.ddmc.ChunkHandler unregisterHandler(int);
+  }
+
+  public final class DdmVmInternal {
+    method public static void setRecentAllocationsTrackingEnabled(boolean);
+    method public static void setThreadNotifyEnabled(boolean);
+  }
+
+}
+
+package org.json {
+
+  public class JSONObject {
+    method @NonNull public java.util.Set<java.lang.String> keySet();
+  }
+
+}
+
+package sun.misc {
+
+  public class Cleaner extends java.lang.ref.PhantomReference<java.lang.Object> {
+    method public void clean();
+    method public static sun.misc.Cleaner create(Object, Runnable);
+  }
+
+  public final class Unsafe {
+    method public int arrayBaseOffset(Class);
+    method public int arrayIndexScale(Class);
+    method @dalvik.annotation.optimization.FastNative public void copyMemory(long, long, long);
+    method @dalvik.annotation.optimization.FastNative public boolean getBoolean(Object, long);
+    method @dalvik.annotation.optimization.FastNative public byte getByte(Object, long);
+    method @dalvik.annotation.optimization.FastNative public byte getByte(long);
+    method @dalvik.annotation.optimization.FastNative public double getDouble(Object, long);
+    method @dalvik.annotation.optimization.FastNative public double getDouble(long);
+    method @dalvik.annotation.optimization.FastNative public float getFloat(Object, long);
+    method @dalvik.annotation.optimization.FastNative public float getFloat(long);
+    method @dalvik.annotation.optimization.FastNative public int getInt(Object, long);
+    method @dalvik.annotation.optimization.FastNative public int getInt(long);
+    method @dalvik.annotation.optimization.FastNative public long getLong(Object, long);
+    method @dalvik.annotation.optimization.FastNative public long getLong(long);
+    method @dalvik.annotation.optimization.FastNative public Object getObject(Object, long);
+    method public static sun.misc.Unsafe getUnsafe();
+    method public long objectFieldOffset(java.lang.reflect.Field);
+    method @dalvik.annotation.optimization.FastNative public void putBoolean(Object, long, boolean);
+    method @dalvik.annotation.optimization.FastNative public void putByte(Object, long, byte);
+    method @dalvik.annotation.optimization.FastNative public void putByte(long, byte);
+    method @dalvik.annotation.optimization.FastNative public void putDouble(Object, long, double);
+    method @dalvik.annotation.optimization.FastNative public void putDouble(long, double);
+    method @dalvik.annotation.optimization.FastNative public void putFloat(Object, long, float);
+    method @dalvik.annotation.optimization.FastNative public void putFloat(long, float);
+    method @dalvik.annotation.optimization.FastNative public void putInt(Object, long, int);
+    method @dalvik.annotation.optimization.FastNative public void putInt(long, int);
+    method @dalvik.annotation.optimization.FastNative public void putLong(Object, long, long);
+    method @dalvik.annotation.optimization.FastNative public void putLong(long, long);
+    method @dalvik.annotation.optimization.FastNative public void putObject(Object, long, Object);
+  }
+
+}
+
+package sun.security.jca {
+
+  public class Providers {
+    method public static Object startJarVerification();
+    method public static void stopJarVerification(Object);
+  }
+
+}
+
+package sun.security.pkcs {
+
+  public class PKCS7 {
+    ctor public PKCS7(java.io.InputStream) throws java.io.IOException, sun.security.pkcs.ParsingException;
+    ctor public PKCS7(byte[]) throws sun.security.pkcs.ParsingException;
+    method public java.security.cert.X509Certificate[] getCertificates();
+    method public sun.security.pkcs.SignerInfo[] getSignerInfos();
+    method public sun.security.pkcs.SignerInfo verify(sun.security.pkcs.SignerInfo, java.io.InputStream) throws java.io.IOException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
+    method public sun.security.pkcs.SignerInfo[] verify(byte[]) throws java.security.NoSuchAlgorithmException, java.security.SignatureException;
+  }
+
+  public class ParsingException extends java.io.IOException {
+  }
+
+  public class SignerInfo {
+    ctor public SignerInfo();
+    method public java.util.ArrayList<java.security.cert.X509Certificate> getCertificateChain(sun.security.pkcs.PKCS7) throws java.io.IOException;
+  }
+
+}
+
+package sun.security.util {
+
+  public final class ObjectIdentifier implements java.io.Serializable {
+    ctor public ObjectIdentifier(String) throws java.io.IOException;
+  }
+
+}
+
+package sun.security.x509 {
+
+  public class AlgorithmId implements java.io.Serializable {
+    ctor public AlgorithmId(sun.security.util.ObjectIdentifier);
+    method public String getName();
+  }
+
+}
+
diff --git a/32/module-lib/api/art-removed.txt b/32/module-lib/api/art-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/art-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/art.txt b/32/module-lib/api/art.txt
new file mode 100644
index 0000000..15741a7
--- /dev/null
+++ b/32/module-lib/api/art.txt
@@ -0,0 +1,865 @@
+// Signature format: 2.0
+package android.compat {
+
+  public final class Compatibility {
+    method public static void clearBehaviorChangeDelegate();
+    method public static void clearOverrides();
+    method public static boolean isChangeEnabled(long);
+    method public static void reportUnconditionalChange(long);
+    method public static void setBehaviorChangeDelegate(android.compat.Compatibility.BehaviorChangeDelegate);
+    method public static void setOverrides(android.compat.Compatibility.ChangeConfig);
+  }
+
+  public static interface Compatibility.BehaviorChangeDelegate {
+    method public default boolean isChangeEnabled(long);
+    method public default void onChangeReported(long);
+  }
+
+  public static final class Compatibility.ChangeConfig {
+    ctor public Compatibility.ChangeConfig(@NonNull java.util.Set<java.lang.Long>, @NonNull java.util.Set<java.lang.Long>);
+    method @NonNull public long[] getDisabledChangesArray();
+    method @NonNull public java.util.Set<java.lang.Long> getDisabledSet();
+    method @NonNull public long[] getEnabledChangesArray();
+    method @NonNull public java.util.Set<java.lang.Long> getEnabledSet();
+    method public boolean isEmpty();
+    method public boolean isForceDisabled(long);
+    method public boolean isForceEnabled(long);
+  }
+
+}
+
+package android.system {
+
+  public final class NetlinkSocketAddress extends java.net.SocketAddress {
+    ctor public NetlinkSocketAddress(int, int);
+    method public int getGroupsMask();
+    method public int getPortId();
+  }
+
+  public final class Os {
+    method @Nullable public static android.system.StructCapUserData[] capget(@NonNull android.system.StructCapUserHeader) throws android.system.ErrnoException;
+    method public static void capset(@NonNull android.system.StructCapUserHeader, @NonNull android.system.StructCapUserData[]) throws android.system.ErrnoException;
+    method public static int getpgid(int) throws android.system.ErrnoException;
+    method @Nullable public static android.system.StructRlimit getrlimit(int) throws android.system.ErrnoException;
+    method public static int getsockoptInt(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method @Nullable public static android.system.StructLinger getsockoptLinger(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static int ioctlInt(@NonNull java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method @Nullable public static java.io.FileDescriptor[] pipe2(int) throws android.system.ErrnoException;
+    method @Nullable public static String realpath(@Nullable String) throws android.system.ErrnoException;
+    method public static void setpgid(int, int) throws android.system.ErrnoException;
+    method public static void setregid(int, int) throws android.system.ErrnoException;
+    method public static void setreuid(int, int) throws android.system.ErrnoException;
+    method public static void setsockoptIfreq(@NonNull java.io.FileDescriptor, int, int, @Nullable String) throws android.system.ErrnoException;
+    method public static void setsockoptLinger(@NonNull java.io.FileDescriptor, int, int, @NonNull android.system.StructLinger) throws android.system.ErrnoException;
+    method public static long splice(@NonNull java.io.FileDescriptor, @Nullable android.system.Int64Ref, @NonNull java.io.FileDescriptor, @Nullable android.system.Int64Ref, long, int) throws android.system.ErrnoException;
+    method public static void unlink(@Nullable String) throws android.system.ErrnoException;
+  }
+
+  public final class OsConstants {
+    method public static int CAP_TO_INDEX(int);
+    method public static int CAP_TO_MASK(int);
+    field public static final int ARPHRD_LOOPBACK;
+    field public static final int EUSERS;
+    field public static final int MAP_POPULATE;
+    field public static final int O_DIRECT;
+    field public static final int PR_CAP_AMBIENT;
+    field public static final int PR_CAP_AMBIENT_RAISE;
+    field public static final int RLIMIT_NOFILE;
+    field public static final int RTMGRP_IPV4_IFADDR;
+    field public static final int SPLICE_F_MORE;
+    field public static final int SPLICE_F_MOVE;
+    field public static final int TIOCOUTQ;
+    field public static final int UDP_ENCAP;
+    field public static final int UDP_ENCAP_ESPINUDP;
+    field public static final int XATTR_CREATE;
+    field public static final int XATTR_REPLACE;
+    field public static final int _LINUX_CAPABILITY_VERSION_3;
+  }
+
+  public final class PacketSocketAddress extends java.net.SocketAddress {
+    ctor public PacketSocketAddress(int, int, byte[]);
+  }
+
+  public final class StructCapUserData {
+    ctor public StructCapUserData(int, int, int);
+    field public final int effective;
+    field public final int inheritable;
+    field public final int permitted;
+  }
+
+  public final class StructCapUserHeader {
+    ctor public StructCapUserHeader(int, int);
+  }
+
+  public final class StructLinger {
+    ctor public StructLinger(int, int);
+    method public boolean isOn();
+    field public final int l_linger;
+  }
+
+  public final class StructRlimit {
+    field public final long rlim_cur;
+  }
+
+  public final class UnixSocketAddress extends java.net.SocketAddress {
+    method public static android.system.UnixSocketAddress createFileSystem(String);
+  }
+
+  public final class VmSocketAddress extends java.net.SocketAddress {
+    ctor public VmSocketAddress(int, int);
+    method public int getSvmCid();
+    method public int getSvmPort();
+  }
+
+}
+
+package com.android.okhttp.internalandroidapi {
+
+  public final class AndroidResponseCacheAdapter {
+    ctor public AndroidResponseCacheAdapter(@NonNull com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder);
+    method public void close() throws java.io.IOException;
+    method public void delete() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method @Nullable public java.net.CacheResponse get(@NonNull java.net.URI, @NonNull String, @Nullable java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method @NonNull public com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder getCacheHolder();
+    method public int getHitCount();
+    method public long getMaxSize();
+    method public int getNetworkCount();
+    method public int getRequestCount();
+    method public long getSize() throws java.io.IOException;
+    method @Nullable public java.net.CacheRequest put(@NonNull java.net.URI, @NonNull java.net.URLConnection) throws java.io.IOException;
+  }
+
+  public interface HasCacheHolder {
+    method @NonNull public com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder getCacheHolder();
+  }
+
+  public static final class HasCacheHolder.CacheHolder {
+    method @NonNull public static com.android.okhttp.internalandroidapi.HasCacheHolder.CacheHolder create(@NonNull java.io.File, long);
+    method public boolean isEquivalent(@NonNull java.io.File, long);
+  }
+
+}
+
+package dalvik.annotation.codegen {
+
+  @java.lang.annotation.Repeatable(CovariantReturnType.CovariantReturnTypes.class) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface CovariantReturnType {
+    method public abstract int presentAfter();
+    method public abstract Class<?> returnType();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public static @interface CovariantReturnType.CovariantReturnTypes {
+    method public abstract dalvik.annotation.codegen.CovariantReturnType[] value();
+  }
+
+}
+
+package dalvik.annotation.optimization {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface CriticalNative {
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface FastNative {
+  }
+
+}
+
+package dalvik.system {
+
+  public final class AnnotatedStackTraceElement {
+    method @Nullable public Object getBlockedOn();
+    method @Nullable public Object[] getHeldLocks();
+    method @NonNull public StackTraceElement getStackTraceElement();
+  }
+
+  public class AppSpecializationHooks {
+    method public static void handleCompatChangesBeforeBindingApplication();
+  }
+
+  public class BaseDexClassLoader extends java.lang.ClassLoader {
+    method public void addDexPath(@Nullable String);
+    method public void addNativePath(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public String getLdLibraryPath();
+    method public void reportClassLoaderChain();
+    method public static void setReporter(@Nullable dalvik.system.BaseDexClassLoader.Reporter);
+  }
+
+  public static interface BaseDexClassLoader.Reporter {
+    method public void report(@NonNull java.util.Map<java.lang.String,java.lang.String>);
+  }
+
+  public final class BlockGuard {
+    method @NonNull public static dalvik.system.BlockGuard.Policy getThreadPolicy();
+    method @NonNull public static dalvik.system.BlockGuard.VmPolicy getVmPolicy();
+    method public static void setThreadPolicy(@NonNull dalvik.system.BlockGuard.Policy);
+    method public static void setVmPolicy(@NonNull dalvik.system.BlockGuard.VmPolicy);
+    field public static final dalvik.system.BlockGuard.Policy LAX_POLICY;
+    field public static final dalvik.system.BlockGuard.VmPolicy LAX_VM_POLICY;
+  }
+
+  public static interface BlockGuard.Policy {
+    method public int getPolicyMask();
+    method public void onReadFromDisk();
+    method public void onUnbufferedIO();
+    method public void onWriteToDisk();
+  }
+
+  public static interface BlockGuard.VmPolicy {
+    method public void onPathAccess(@NonNull String);
+  }
+
+  public final class CloseGuard {
+    method public void close();
+    method public static dalvik.system.CloseGuard get();
+    method public static dalvik.system.CloseGuard.Reporter getReporter();
+    method public void open(String);
+    method public void openWithCallSite(String, String);
+    method public static void setEnabled(boolean);
+    method public static void setReporter(dalvik.system.CloseGuard.Reporter);
+    method public void warnIfOpen();
+  }
+
+  public static interface CloseGuard.Reporter {
+    method public void report(String, Throwable);
+    method public default void report(String);
+  }
+
+  public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader {
+    ctor public DelegateLastClassLoader(String, String, ClassLoader, ClassLoader[]);
+  }
+
+  @Deprecated public final class DexFile {
+    method @Deprecated @NonNull public static dalvik.system.DexFile.OptimizationInfo getDexFileOptimizationInfo(@NonNull String, @NonNull String) throws java.io.FileNotFoundException;
+    method @Deprecated @Nullable public static String[] getDexFileOutputPaths(@NonNull String, @NonNull String) throws java.io.FileNotFoundException;
+    method @Deprecated public static int getDexOptNeeded(@NonNull String, @NonNull String, @NonNull String, @Nullable String, boolean, boolean) throws java.io.FileNotFoundException, java.io.IOException;
+    method @Deprecated @NonNull public static String getSafeModeCompilerFilter(@NonNull String);
+    method @Deprecated public static boolean isProfileGuidedCompilerFilter(@NonNull String);
+    method @Deprecated public static boolean isValidCompilerFilter(@NonNull String);
+    field @Deprecated public static final int DEX2OAT_FOR_FILTER = 3; // 0x3
+    field @Deprecated public static final int NO_DEXOPT_NEEDED = 0; // 0x0
+  }
+
+  @Deprecated public static final class DexFile.OptimizationInfo {
+    method @Deprecated @NonNull public String getReason();
+    method @Deprecated @NonNull public String getStatus();
+  }
+
+  public class PathClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public PathClassLoader(@NonNull String, @Nullable String, @Nullable ClassLoader, @Nullable ClassLoader[]);
+  }
+
+  public final class RuntimeHooks {
+    method public static void setTimeZoneIdSupplier(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public static void setUncaughtExceptionPreHandler(@Nullable java.lang.Thread.UncaughtExceptionHandler);
+  }
+
+  public abstract class SocketTagger {
+    ctor public SocketTagger();
+    method public static dalvik.system.SocketTagger get();
+    method public static void set(dalvik.system.SocketTagger);
+    method public abstract void tag(java.io.FileDescriptor) throws java.net.SocketException;
+    method public final void tag(java.net.Socket) throws java.net.SocketException;
+    method public final void tag(java.net.DatagramSocket) throws java.net.SocketException;
+    method public abstract void untag(java.io.FileDescriptor) throws java.net.SocketException;
+    method public final void untag(java.net.Socket) throws java.net.SocketException;
+    method public final void untag(java.net.DatagramSocket) throws java.net.SocketException;
+  }
+
+  public final class VMDebug {
+    method public static void attachAgent(String, ClassLoader) throws java.io.IOException;
+    method public static long countInstancesOfClass(Class, boolean);
+    method public static long[] countInstancesOfClasses(Class[], boolean);
+    method public static void dumpHprofData(String) throws java.io.IOException;
+    method public static void dumpHprofData(String, java.io.FileDescriptor) throws java.io.IOException;
+    method public static void dumpHprofDataDdms();
+    method public static void dumpReferenceTables();
+    method public static int getAllocCount(int);
+    method @dalvik.annotation.optimization.FastNative public static int getLoadedClassCount();
+    method public static int getMethodTracingMode();
+    method public static String getRuntimeStat(String);
+    method public static java.util.Map<java.lang.String,java.lang.String> getRuntimeStats();
+    method public static String[] getVmFeatureList();
+    method @dalvik.annotation.optimization.FastNative public static boolean isDebuggerConnected();
+    method @dalvik.annotation.optimization.FastNative public static boolean isDebuggingEnabled();
+    method @dalvik.annotation.optimization.FastNative public static long lastDebuggerActivity();
+    method @dalvik.annotation.optimization.FastNative public static void printLoadedClasses(int);
+    method public static void resetAllocCount(int);
+    method public static void setAllocTrackerStackDepth(int);
+    method public static void startAllocCounting();
+    method public static void startMethodTracing(String, int, int, boolean, int);
+    method public static void startMethodTracing(String, java.io.FileDescriptor, int, int, boolean, int, boolean);
+    method public static void startMethodTracingDdms(int, int, boolean, int);
+    method public static void stopAllocCounting();
+    method public static void stopMethodTracing();
+    method @dalvik.annotation.optimization.FastNative public static long threadCpuTimeNanos();
+    field public static final int KIND_ALL_COUNTS = -1; // 0xffffffff
+    field public static final int KIND_GLOBAL_ALLOCATED_BYTES = 2; // 0x2
+    field public static final int KIND_GLOBAL_ALLOCATED_OBJECTS = 1; // 0x1
+    field public static final int KIND_GLOBAL_CLASS_INIT_COUNT = 32; // 0x20
+    field public static final int KIND_GLOBAL_CLASS_INIT_TIME = 64; // 0x40
+    field public static final int KIND_GLOBAL_FREED_BYTES = 8; // 0x8
+    field public static final int KIND_GLOBAL_FREED_OBJECTS = 4; // 0x4
+    field public static final int KIND_GLOBAL_GC_INVOCATIONS = 16; // 0x10
+    field public static final int KIND_THREAD_ALLOCATED_BYTES = 131072; // 0x20000
+    field public static final int KIND_THREAD_ALLOCATED_OBJECTS = 65536; // 0x10000
+    field public static final int KIND_THREAD_GC_INVOCATIONS = 1048576; // 0x100000
+    field public static final int TRACE_COUNT_ALLOCS = 1; // 0x1
+  }
+
+  public final class VMRuntime {
+    method @dalvik.annotation.optimization.FastNative public long addressOf(Object);
+    method public static void bootCompleted();
+    method public void clampGrowthLimit();
+    method public void clearGrowthLimit();
+    method public static String getCurrentInstructionSet();
+    method public static String getInstructionSet(String);
+    method public static dalvik.system.VMRuntime getRuntime();
+    method public int getTargetSdkVersion();
+    method @dalvik.annotation.optimization.FastNative public boolean is64Bit();
+    method public static boolean is64BitAbi(String);
+    method public static boolean is64BitInstructionSet(String);
+    method @dalvik.annotation.optimization.FastNative public boolean isCheckJniEnabled();
+    method @dalvik.annotation.optimization.FastNative public boolean isNativeDebuggable();
+    method public static boolean isValidClassLoaderContext(String);
+    method @dalvik.annotation.optimization.FastNative public Object newNonMovableArray(Class<?>, int);
+    method @dalvik.annotation.optimization.FastNative public Object newUnpaddedArray(Class<?>, int);
+    method public void notifyStartupCompleted();
+    method public void preloadDexCaches();
+    method public static void registerAppInfo(String, String, String, String[], int);
+    method public void registerNativeAllocation(long);
+    method @Deprecated public void registerNativeAllocation(int);
+    method public void registerNativeFree(long);
+    method @Deprecated public void registerNativeFree(int);
+    method public static void registerSensitiveThread();
+    method public void requestConcurrentGC();
+    method public static void resetJitCounters();
+    method public static void setDedupeHiddenApiWarnings(boolean);
+    method public void setDisabledCompatChanges(long[]);
+    method public void setHiddenApiAccessLogSamplingRate(int);
+    method public void setHiddenApiExemptions(String[]);
+    method public static void setHiddenApiUsageLogger(dalvik.system.VMRuntime.HiddenApiUsageLogger);
+    method public static void setNonSdkApiUsageConsumer(java.util.function.Consumer<java.lang.String>);
+    method public static void setProcessDataDirectory(String);
+    method public static void setProcessPackageName(String);
+    method public void setTargetSdkVersion(int);
+    method public void updateProcessState(int);
+    method public String vmInstructionSet();
+    method public String vmLibrary();
+    field public static final int CODE_PATH_TYPE_PRIMARY_APK = 1; // 0x1
+    field public static final int CODE_PATH_TYPE_SECONDARY_DEX = 4; // 0x4
+    field public static final int CODE_PATH_TYPE_SPLIT_APK = 2; // 0x2
+    field public static final int SDK_VERSION_CUR_DEVELOPMENT = 10000; // 0x2710
+  }
+
+  public static interface VMRuntime.HiddenApiUsageLogger {
+    method public void hiddenApiUsed(int, String, String, int, boolean);
+    field public static final int ACCESS_METHOD_JNI = 2; // 0x2
+    field public static final int ACCESS_METHOD_LINKING = 3; // 0x3
+    field public static final int ACCESS_METHOD_NONE = 0; // 0x0
+    field public static final int ACCESS_METHOD_REFLECTION = 1; // 0x1
+  }
+
+  public final class VMStack {
+    method @Nullable @dalvik.annotation.optimization.FastNative public static dalvik.system.AnnotatedStackTraceElement[] getAnnotatedThreadStackTrace(Thread);
+  }
+
+  public final class ZygoteHooks {
+    method public static void gcAndFinalize();
+    method public static boolean isIndefiniteThreadSuspensionSafe();
+    method public static void onBeginPreload();
+    method public static void onEndPreload();
+    method public static void postForkChild(int, boolean, boolean, String);
+    method public static void postForkCommon();
+    method public static void postForkSystemServer(int);
+    method public static void preFork();
+    method public static void startZygoteNoThreadCreation();
+    method public static void stopZygoteNoThreadCreation();
+  }
+
+}
+
+package java.io {
+
+  public final class FileDescriptor {
+    method public int getInt$();
+    method public void setInt$(int);
+  }
+
+  public class FileInputStream extends java.io.InputStream {
+    ctor public FileInputStream(java.io.FileDescriptor, boolean);
+  }
+
+}
+
+package java.lang {
+
+  public class Thread implements java.lang.Runnable {
+    method public static java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionPreHandler();
+    method public static void setUncaughtExceptionPreHandler(java.lang.Thread.UncaughtExceptionHandler);
+  }
+
+}
+
+package java.net {
+
+  public class DatagramSocket implements java.io.Closeable {
+    method public java.io.FileDescriptor getFileDescriptor$();
+  }
+
+  public final class Inet4Address extends java.net.InetAddress {
+    field public static final java.net.InetAddress ALL;
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
+  }
+
+  public final class Inet6Address extends java.net.InetAddress {
+    field public static final java.net.InetAddress ANY;
+    field public static final java.net.InetAddress LOOPBACK;
+  }
+
+  public class InetAddress implements java.io.Serializable {
+    method public static void clearDnsCache();
+    method @NonNull public static java.net.InetAddress[] getAllByNameOnNet(@Nullable String, int) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByNameOnNet(@Nullable String, int) throws java.net.UnknownHostException;
+    method @Deprecated public static boolean isNumeric(String);
+    method @Deprecated public static java.net.InetAddress parseNumericAddress(String);
+  }
+
+  public class InetSocketAddress extends java.net.SocketAddress {
+    ctor public InetSocketAddress();
+  }
+
+  public class ServerSocket implements java.io.Closeable {
+    method public java.net.SocketImpl getImpl() throws java.net.SocketException;
+  }
+
+  public class Socket implements java.io.Closeable {
+    method public java.io.FileDescriptor getFileDescriptor$();
+  }
+
+  public abstract class SocketImpl implements java.net.SocketOptions {
+    method public java.io.FileDescriptor getFD$();
+  }
+
+}
+
+package java.nio {
+
+  public abstract class ByteBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.ByteBuffer> {
+    method public void setAccessible(boolean);
+  }
+
+  public class DirectByteBuffer extends java.nio.MappedByteBuffer {
+    ctor public DirectByteBuffer(int, long, java.io.FileDescriptor, Runnable, boolean);
+    method public final long address();
+    method public final void setAccessible(boolean);
+  }
+
+  public final class NIOAccess {
+    method public static Object getBaseArray(java.nio.Buffer);
+    method public static int getBaseArrayOffset(java.nio.Buffer);
+  }
+
+  public final class NioUtils {
+    method public static void freeDirectBuffer(java.nio.ByteBuffer);
+    method public static byte[] unsafeArray(java.nio.ByteBuffer);
+    method public static int unsafeArrayOffset(java.nio.ByteBuffer);
+  }
+
+}
+
+package java.security {
+
+  public abstract class Provider extends java.util.Properties {
+    method public void warmUpServiceProvision();
+  }
+
+  public abstract class Signature extends java.security.SignatureSpi {
+    method public java.security.SignatureSpi getCurrentSpi();
+  }
+
+}
+
+package java.text {
+
+  public abstract class DateFormat extends java.text.Format {
+    method public static final void set24HourTimePref(Boolean);
+  }
+
+}
+
+package java.util {
+
+  public class LinkedHashMap<K, V> extends java.util.HashMap<K,V> implements java.util.Map<K,V> {
+    method public java.util.Map.Entry<K,V> eldest();
+  }
+
+}
+
+package java.util.zip {
+
+  public class ZipEntry implements java.lang.Cloneable {
+    method public long getDataOffset();
+  }
+
+}
+
+package javax.crypto {
+
+  public class Cipher {
+    method public javax.crypto.CipherSpi getCurrentSpi();
+  }
+
+  public class Mac implements java.lang.Cloneable {
+    method public javax.crypto.MacSpi getCurrentSpi();
+  }
+
+}
+
+package javax.net.ssl {
+
+  public abstract class HttpsURLConnection extends java.net.HttpURLConnection {
+    method public static javax.net.ssl.HostnameVerifier getStrictHostnameVerifier();
+  }
+
+}
+
+package libcore.content.type {
+
+  public final class MimeMap {
+    method @NonNull public libcore.content.type.MimeMap.Builder buildUpon();
+    method @NonNull public static libcore.content.type.MimeMap.Builder builder();
+    method @NonNull public java.util.Set<java.lang.String> extensions();
+    method @NonNull public static libcore.content.type.MimeMap getDefault();
+    method @Nullable public String guessExtensionFromMimeType(@Nullable String);
+    method @Nullable public String guessMimeTypeFromExtension(@Nullable String);
+    method public boolean hasExtension(@Nullable String);
+    method public boolean hasMimeType(@Nullable String);
+    method @NonNull public java.util.Set<java.lang.String> mimeTypes();
+    method public static void setDefaultSupplier(@NonNull java.util.function.Supplier<libcore.content.type.MimeMap>);
+  }
+
+  public static final class MimeMap.Builder {
+    method @NonNull public libcore.content.type.MimeMap.Builder addMimeMapping(@NonNull String, @NonNull java.util.List<java.lang.String>);
+    method @NonNull public libcore.content.type.MimeMap build();
+  }
+
+}
+
+package libcore.io {
+
+  public class ForwardingOs implements libcore.io.Os {
+    ctor protected ForwardingOs(@NonNull libcore.io.Os);
+    method public boolean access(@Nullable String, int) throws android.system.ErrnoException;
+    method public java.io.FileDescriptor open(@Nullable String, int, int) throws android.system.ErrnoException;
+    method public void remove(@Nullable String) throws android.system.ErrnoException;
+    method public void rename(@Nullable String, @Nullable String) throws android.system.ErrnoException;
+    method @Nullable public android.system.StructStat stat(@Nullable String) throws android.system.ErrnoException;
+    method public void unlink(@Nullable String) throws android.system.ErrnoException;
+  }
+
+  public final class IoBridge {
+    method public static void closeAndSignalBlockedThreads(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    method @NonNull public static java.io.FileDescriptor open(@NonNull String, int) throws java.io.FileNotFoundException;
+    method public static int read(@NonNull java.io.FileDescriptor, @NonNull byte[], int, int) throws java.io.IOException;
+    method public static void write(@NonNull java.io.FileDescriptor, @NonNull byte[], int, int) throws java.io.IOException;
+  }
+
+  public final class IoUtils {
+    method public static int acquireRawFd(@NonNull java.io.FileDescriptor);
+    method public static void close(@Nullable java.io.FileDescriptor) throws java.io.IOException;
+    method public static void closeQuietly(@Nullable AutoCloseable);
+    method public static void closeQuietly(@Nullable java.io.FileDescriptor);
+    method public static void closeQuietly(@Nullable java.net.Socket);
+    method @NonNull public static byte[] readFileAsByteArray(@NonNull String) throws java.io.IOException;
+    method @NonNull public static String readFileAsString(@NonNull String) throws java.io.IOException;
+    method public static void setBlocking(@NonNull java.io.FileDescriptor, boolean) throws java.io.IOException;
+    method public static void setFdOwner(@NonNull java.io.FileDescriptor, @NonNull Object);
+  }
+
+  public final class Memory {
+    method public static void memmove(@NonNull Object, int, @NonNull Object, int, long);
+    method public static int peekInt(@NonNull byte[], int, @NonNull java.nio.ByteOrder);
+    method public static short peekShort(@NonNull byte[], int, @NonNull java.nio.ByteOrder);
+    method public static void pokeInt(@NonNull byte[], int, int, @NonNull java.nio.ByteOrder);
+    method public static void pokeLong(@NonNull byte[], int, long, @NonNull java.nio.ByteOrder);
+    method public static void pokeShort(@NonNull byte[], int, short, @NonNull java.nio.ByteOrder);
+  }
+
+  public interface Os {
+    method public static boolean compareAndSetDefault(libcore.io.Os, libcore.io.Os);
+    method public static libcore.io.Os getDefault();
+  }
+
+  public final class Streams {
+    method public static int copy(@NonNull java.io.InputStream, @NonNull java.io.OutputStream) throws java.io.IOException;
+    method public static void readFully(@NonNull java.io.InputStream, @NonNull byte[]) throws java.io.IOException;
+    method @NonNull public static byte[] readFully(@NonNull java.io.InputStream) throws java.io.IOException;
+    method @NonNull public static String readFully(@NonNull java.io.Reader) throws java.io.IOException;
+    method @NonNull public static byte[] readFullyNoClose(@NonNull java.io.InputStream) throws java.io.IOException;
+    method public static int readSingleByte(@NonNull java.io.InputStream) throws java.io.IOException;
+    method public static long skipByReading(@NonNull java.io.InputStream, long) throws java.io.IOException;
+    method public static void writeSingleByte(@NonNull java.io.OutputStream, int) throws java.io.IOException;
+  }
+
+}
+
+package libcore.net {
+
+  public class InetAddressUtils {
+    method public static boolean isNumericAddress(String);
+    method public static java.net.InetAddress parseNumericAddress(String);
+  }
+
+  public abstract class NetworkSecurityPolicy {
+    ctor public NetworkSecurityPolicy();
+    method public static libcore.net.NetworkSecurityPolicy getInstance();
+    method public abstract boolean isCertificateTransparencyVerificationRequired(String);
+    method public abstract boolean isCleartextTrafficPermitted();
+    method public abstract boolean isCleartextTrafficPermitted(String);
+    method public static void setInstance(libcore.net.NetworkSecurityPolicy);
+  }
+
+}
+
+package libcore.net.event {
+
+  public final class NetworkEventDispatcher {
+    method public void dispatchNetworkConfigurationChange();
+    method public static libcore.net.event.NetworkEventDispatcher getInstance();
+  }
+
+}
+
+package libcore.net.http {
+
+  public interface Dns {
+    method @NonNull public java.util.List<java.net.InetAddress> lookup(@Nullable String) throws java.net.UnknownHostException;
+  }
+
+  public class HttpURLConnectionFactory {
+    method @NonNull public static libcore.net.http.HttpURLConnectionFactory createInstance();
+    method public java.net.URLConnection openConnection(@NonNull java.net.URL, @NonNull javax.net.SocketFactory, @NonNull java.net.Proxy) throws java.io.IOException;
+    method public void setDns(@NonNull libcore.net.http.Dns);
+    method public void setNewConnectionPool(int, long, @NonNull java.util.concurrent.TimeUnit);
+  }
+
+}
+
+package libcore.util {
+
+  public final class EmptyArray {
+    field @NonNull public static final boolean[] BOOLEAN;
+    field @NonNull public static final byte[] BYTE;
+    field @NonNull public static final float[] FLOAT;
+    field @NonNull public static final int[] INT;
+    field @NonNull public static final long[] LONG;
+    field @NonNull public static final Object[] OBJECT;
+    field @NonNull public static final String[] STRING;
+  }
+
+  public final class FP16 {
+    method public static short ceil(short);
+    method public static int compare(short, short);
+    method public static boolean equals(short, short);
+    method public static short floor(short);
+    method public static boolean greater(short, short);
+    method public static boolean greaterEquals(short, short);
+    method public static boolean isInfinite(short);
+    method public static boolean isNaN(short);
+    method public static boolean isNormalized(short);
+    method public static boolean less(short, short);
+    method public static boolean lessEquals(short, short);
+    method public static short max(short, short);
+    method public static short min(short, short);
+    method public static short rint(short);
+    method public static float toFloat(short);
+    method public static short toHalf(float);
+    method public static String toHexString(short);
+    method public static short trunc(short);
+    field public static final short EPSILON = 5120; // 0x1400
+    field public static final int EXPONENT_BIAS = 15; // 0xf
+    field public static final int EXPONENT_SHIFT = 10; // 0xa
+    field public static final int EXPONENT_SIGNIFICAND_MASK = 32767; // 0x7fff
+    field public static final short LOWEST_VALUE = -1025; // 0xfffffbff
+    field public static final int MAX_EXPONENT = 15; // 0xf
+    field public static final short MAX_VALUE = 31743; // 0x7bff
+    field public static final int MIN_EXPONENT = -14; // 0xfffffff2
+    field public static final short MIN_NORMAL = 1024; // 0x400
+    field public static final short MIN_VALUE = 1; // 0x1
+    field public static final short NEGATIVE_INFINITY = -1024; // 0xfffffc00
+    field public static final short NEGATIVE_ZERO = -32768; // 0xffff8000
+    field public static final short NaN = 32256; // 0x7e00
+    field public static final short POSITIVE_INFINITY = 31744; // 0x7c00
+    field public static final short POSITIVE_ZERO = 0; // 0x0
+    field public static final int SHIFTED_EXPONENT_MASK = 31; // 0x1f
+    field public static final int SIGNIFICAND_MASK = 1023; // 0x3ff
+    field public static final int SIGN_MASK = 32768; // 0x8000
+    field public static final int SIGN_SHIFT = 15; // 0xf
+    field public static final int SIZE = 16; // 0x10
+  }
+
+  public class HexEncoding {
+    method public static byte[] decode(String) throws java.lang.IllegalArgumentException;
+    method public static byte[] decode(String, boolean) throws java.lang.IllegalArgumentException;
+    method public static byte[] decode(char[]) throws java.lang.IllegalArgumentException;
+    method public static byte[] decode(char[], boolean) throws java.lang.IllegalArgumentException;
+    method public static char[] encode(byte[]);
+    method public static char[] encode(byte[], boolean);
+    method public static char[] encode(byte[], int, int);
+    method public static String encodeToString(byte, boolean);
+    method public static String encodeToString(byte[]);
+    method public static String encodeToString(byte[], boolean);
+  }
+
+  public class NativeAllocationRegistry {
+    ctor public NativeAllocationRegistry(@NonNull ClassLoader, long, long);
+    method public static void applyFreeFunction(long, long);
+    method public static libcore.util.NativeAllocationRegistry createMalloced(@NonNull ClassLoader, long, long);
+    method public static libcore.util.NativeAllocationRegistry createMalloced(@NonNull ClassLoader, long);
+    method public static libcore.util.NativeAllocationRegistry createNonmalloced(@NonNull ClassLoader, long, long);
+    method @NonNull public Runnable registerNativeAllocation(@NonNull Object, long);
+  }
+
+  public class SneakyThrow {
+    method public static void sneakyThrow(@NonNull Throwable);
+  }
+
+  public class XmlObjectFactory {
+    method @NonNull public static org.xml.sax.XMLReader newXMLReader();
+    method @NonNull public static org.xmlpull.v1.XmlPullParser newXmlPullParser();
+    method @NonNull public static org.xmlpull.v1.XmlSerializer newXmlSerializer();
+  }
+
+}
+
+package org.apache.harmony.dalvik.ddmc {
+
+  public class Chunk {
+    ctor public Chunk(int, byte[], int, int);
+    ctor public Chunk(int, java.nio.ByteBuffer);
+    field public int type;
+  }
+
+  public abstract class ChunkHandler {
+    ctor public ChunkHandler();
+    method public static org.apache.harmony.dalvik.ddmc.Chunk createFailChunk(int, String);
+    method public abstract org.apache.harmony.dalvik.ddmc.Chunk handleChunk(org.apache.harmony.dalvik.ddmc.Chunk);
+    method public static String name(int);
+    method public abstract void onConnected();
+    method public abstract void onDisconnected();
+    method public static int type(String);
+    method public static java.nio.ByteBuffer wrapChunk(org.apache.harmony.dalvik.ddmc.Chunk);
+    field public static final java.nio.ByteOrder CHUNK_ORDER;
+  }
+
+  public final class DdmServer {
+    method public static void registerHandler(int, org.apache.harmony.dalvik.ddmc.ChunkHandler);
+    method public static void registrationComplete();
+    method public static void sendChunk(org.apache.harmony.dalvik.ddmc.Chunk);
+    method public static org.apache.harmony.dalvik.ddmc.ChunkHandler unregisterHandler(int);
+  }
+
+  public final class DdmVmInternal {
+    method public static void setRecentAllocationsTrackingEnabled(boolean);
+    method public static void setThreadNotifyEnabled(boolean);
+  }
+
+}
+
+package org.json {
+
+  public class JSONObject {
+    method @NonNull public java.util.Set<java.lang.String> keySet();
+  }
+
+}
+
+package sun.misc {
+
+  public class Cleaner extends java.lang.ref.PhantomReference<java.lang.Object> {
+    method public void clean();
+    method public static sun.misc.Cleaner create(Object, Runnable);
+  }
+
+  public final class Unsafe {
+    method public int arrayBaseOffset(Class);
+    method public int arrayIndexScale(Class);
+    method @dalvik.annotation.optimization.FastNative public void copyMemory(long, long, long);
+    method @dalvik.annotation.optimization.FastNative public boolean getBoolean(Object, long);
+    method @dalvik.annotation.optimization.FastNative public byte getByte(Object, long);
+    method @dalvik.annotation.optimization.FastNative public byte getByte(long);
+    method @dalvik.annotation.optimization.FastNative public double getDouble(Object, long);
+    method @dalvik.annotation.optimization.FastNative public double getDouble(long);
+    method @dalvik.annotation.optimization.FastNative public float getFloat(Object, long);
+    method @dalvik.annotation.optimization.FastNative public float getFloat(long);
+    method @dalvik.annotation.optimization.FastNative public int getInt(Object, long);
+    method @dalvik.annotation.optimization.FastNative public int getInt(long);
+    method @dalvik.annotation.optimization.FastNative public long getLong(Object, long);
+    method @dalvik.annotation.optimization.FastNative public long getLong(long);
+    method @dalvik.annotation.optimization.FastNative public Object getObject(Object, long);
+    method public static sun.misc.Unsafe getUnsafe();
+    method public long objectFieldOffset(java.lang.reflect.Field);
+    method @dalvik.annotation.optimization.FastNative public void putBoolean(Object, long, boolean);
+    method @dalvik.annotation.optimization.FastNative public void putByte(Object, long, byte);
+    method @dalvik.annotation.optimization.FastNative public void putByte(long, byte);
+    method @dalvik.annotation.optimization.FastNative public void putDouble(Object, long, double);
+    method @dalvik.annotation.optimization.FastNative public void putDouble(long, double);
+    method @dalvik.annotation.optimization.FastNative public void putFloat(Object, long, float);
+    method @dalvik.annotation.optimization.FastNative public void putFloat(long, float);
+    method @dalvik.annotation.optimization.FastNative public void putInt(Object, long, int);
+    method @dalvik.annotation.optimization.FastNative public void putInt(long, int);
+    method @dalvik.annotation.optimization.FastNative public void putLong(Object, long, long);
+    method @dalvik.annotation.optimization.FastNative public void putLong(long, long);
+    method @dalvik.annotation.optimization.FastNative public void putObject(Object, long, Object);
+  }
+
+}
+
+package sun.security.jca {
+
+  public class Providers {
+    method public static Object startJarVerification();
+    method public static void stopJarVerification(Object);
+  }
+
+}
+
+package sun.security.pkcs {
+
+  public class PKCS7 {
+    ctor public PKCS7(java.io.InputStream) throws java.io.IOException, sun.security.pkcs.ParsingException;
+    ctor public PKCS7(byte[]) throws sun.security.pkcs.ParsingException;
+    method public java.security.cert.X509Certificate[] getCertificates();
+    method public sun.security.pkcs.SignerInfo[] getSignerInfos();
+    method public sun.security.pkcs.SignerInfo verify(sun.security.pkcs.SignerInfo, java.io.InputStream) throws java.io.IOException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
+    method public sun.security.pkcs.SignerInfo[] verify(byte[]) throws java.security.NoSuchAlgorithmException, java.security.SignatureException;
+  }
+
+  public class ParsingException extends java.io.IOException {
+  }
+
+  public class SignerInfo {
+    ctor public SignerInfo();
+    method public java.util.ArrayList<java.security.cert.X509Certificate> getCertificateChain(sun.security.pkcs.PKCS7) throws java.io.IOException;
+  }
+
+}
+
+package sun.security.util {
+
+  public final class ObjectIdentifier implements java.io.Serializable {
+    ctor public ObjectIdentifier(String) throws java.io.IOException;
+  }
+
+}
+
+package sun.security.x509 {
+
+  public class AlgorithmId implements java.io.Serializable {
+    ctor public AlgorithmId(sun.security.util.ObjectIdentifier);
+    method public String getName();
+  }
+
+}
+
diff --git a/32/module-lib/api/framework-appsearch-removed.txt b/32/module-lib/api/framework-appsearch-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-appsearch-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-appsearch.txt b/32/module-lib/api/framework-appsearch.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-appsearch.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-connectivity-removed.txt b/32/module-lib/api/framework-connectivity-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-connectivity-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-connectivity.txt b/32/module-lib/api/framework-connectivity.txt
new file mode 100644
index 0000000..7fc0382
--- /dev/null
+++ b/32/module-lib/api/framework-connectivity.txt
@@ -0,0 +1,179 @@
+// Signature format: 2.0
+package android.net {
+
+  public final class ConnectivityFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+  public class ConnectivityManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void factoryReset();
+    method @NonNull @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public java.util.List<android.net.NetworkStateSnapshot> getAllNetworkStateSnapshots();
+    method @Nullable public android.net.ProxyInfo getGlobalProxy();
+    method @NonNull public static android.util.Range<java.lang.Integer> getIpSecNetIdRange();
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerDefaultNetworkCallbackForUid(int, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void registerSystemDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void requestBackgroundNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @Deprecated public boolean requestRouteToHostAddress(int, java.net.InetAddress);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void setAcceptPartialConnectivity(@NonNull android.net.Network, boolean, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void setAcceptUnvalidated(@NonNull android.net.Network, boolean, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void setAvoidUnvalidated(@NonNull android.net.Network);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void setGlobalProxy(@Nullable android.net.ProxyInfo);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setLegacyLockdownVpnEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void setProfileNetworkPreference(@NonNull android.os.UserHandle, int, @Nullable java.util.concurrent.Executor, @Nullable Runnable);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETTINGS}) public void setRequireVpnForUids(boolean, @NonNull java.util.Collection<android.util.Range<java.lang.Integer>>);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_TEST_NETWORKS, android.Manifest.permission.NETWORK_STACK}) public void simulateDataStall(int, long, @NonNull android.net.Network, @NonNull android.os.PersistableBundle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void startCaptivePortalApp(@NonNull android.net.Network);
+    method public void systemReady();
+    field public static final String ACTION_CLEAR_DNS_CACHE = "android.net.action.CLEAR_DNS_CACHE";
+    field public static final String ACTION_PROMPT_LOST_VALIDATION = "android.net.action.PROMPT_LOST_VALIDATION";
+    field public static final String ACTION_PROMPT_PARTIAL_CONNECTIVITY = "android.net.action.PROMPT_PARTIAL_CONNECTIVITY";
+    field public static final String ACTION_PROMPT_UNVALIDATED = "android.net.action.PROMPT_UNVALIDATED";
+    field public static final int BLOCKED_METERED_REASON_ADMIN_DISABLED = 262144; // 0x40000
+    field public static final int BLOCKED_METERED_REASON_DATA_SAVER = 65536; // 0x10000
+    field public static final int BLOCKED_METERED_REASON_MASK = -65536; // 0xffff0000
+    field public static final int BLOCKED_METERED_REASON_USER_RESTRICTED = 131072; // 0x20000
+    field public static final int BLOCKED_REASON_APP_STANDBY = 4; // 0x4
+    field public static final int BLOCKED_REASON_BATTERY_SAVER = 1; // 0x1
+    field public static final int BLOCKED_REASON_DOZE = 2; // 0x2
+    field public static final int BLOCKED_REASON_LOCKDOWN_VPN = 16; // 0x10
+    field public static final int BLOCKED_REASON_NONE = 0; // 0x0
+    field public static final int BLOCKED_REASON_RESTRICTED_MODE = 8; // 0x8
+    field public static final int PROFILE_NETWORK_PREFERENCE_DEFAULT = 0; // 0x0
+    field public static final int PROFILE_NETWORK_PREFERENCE_ENTERPRISE = 1; // 0x1
+  }
+
+  public static class ConnectivityManager.NetworkCallback {
+    method public void onBlockedStatusChanged(@NonNull android.net.Network, int);
+  }
+
+  public class ConnectivitySettingsManager {
+    method public static void clearGlobalProxy(@NonNull android.content.Context);
+    method @Nullable public static String getCaptivePortalHttpUrl(@NonNull android.content.Context);
+    method public static int getCaptivePortalMode(@NonNull android.content.Context, int);
+    method @NonNull public static java.time.Duration getConnectivityKeepPendingIntentDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method @NonNull public static android.util.Range<java.lang.Integer> getDnsResolverSampleRanges(@NonNull android.content.Context);
+    method @NonNull public static java.time.Duration getDnsResolverSampleValidityDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static int getDnsResolverSuccessThresholdPercent(@NonNull android.content.Context, int);
+    method @Nullable public static android.net.ProxyInfo getGlobalProxy(@NonNull android.content.Context);
+    method @NonNull public static java.time.Duration getMobileDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static boolean getMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
+    method @NonNull public static java.util.Set<java.lang.Integer> getMobileDataPreferredUids(@NonNull android.content.Context);
+    method public static int getNetworkAvoidBadWifi(@NonNull android.content.Context);
+    method @Nullable public static String getNetworkMeteredMultipathPreference(@NonNull android.content.Context);
+    method public static int getNetworkSwitchNotificationMaximumDailyCount(@NonNull android.content.Context, int);
+    method @NonNull public static java.time.Duration getNetworkSwitchNotificationRateDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method @NonNull public static String getPrivateDnsDefaultMode(@NonNull android.content.Context);
+    method @Nullable public static String getPrivateDnsHostname(@NonNull android.content.Context);
+    method public static int getPrivateDnsMode(@NonNull android.content.Context);
+    method @NonNull public static java.util.Set<java.lang.Integer> getUidsAllowedOnRestrictedNetworks(@NonNull android.content.Context);
+    method public static boolean getWifiAlwaysRequested(@NonNull android.content.Context, boolean);
+    method @NonNull public static java.time.Duration getWifiDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setCaptivePortalHttpUrl(@NonNull android.content.Context, @Nullable String);
+    method public static void setCaptivePortalMode(@NonNull android.content.Context, int);
+    method public static void setConnectivityKeepPendingIntentDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setDnsResolverSampleRanges(@NonNull android.content.Context, @NonNull android.util.Range<java.lang.Integer>);
+    method public static void setDnsResolverSampleValidityDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setDnsResolverSuccessThresholdPercent(@NonNull android.content.Context, @IntRange(from=0, to=100) int);
+    method public static void setGlobalProxy(@NonNull android.content.Context, @NonNull android.net.ProxyInfo);
+    method public static void setMobileDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setMobileDataAlwaysOn(@NonNull android.content.Context, boolean);
+    method public static void setMobileDataPreferredUids(@NonNull android.content.Context, @NonNull java.util.Set<java.lang.Integer>);
+    method public static void setNetworkAvoidBadWifi(@NonNull android.content.Context, int);
+    method public static void setNetworkMeteredMultipathPreference(@NonNull android.content.Context, @NonNull String);
+    method public static void setNetworkSwitchNotificationMaximumDailyCount(@NonNull android.content.Context, @IntRange(from=0) int);
+    method public static void setNetworkSwitchNotificationRateDuration(@NonNull android.content.Context, @NonNull java.time.Duration);
+    method public static void setPrivateDnsDefaultMode(@NonNull android.content.Context, @NonNull int);
+    method public static void setPrivateDnsHostname(@NonNull android.content.Context, @Nullable String);
+    method public static void setPrivateDnsMode(@NonNull android.content.Context, int);
+    method public static void setUidsAllowedOnRestrictedNetworks(@NonNull android.content.Context, @NonNull java.util.Set<java.lang.Integer>);
+    method public static void setWifiAlwaysRequested(@NonNull android.content.Context, boolean);
+    method public static void setWifiDataActivityTimeout(@NonNull android.content.Context, @NonNull java.time.Duration);
+    field public static final int CAPTIVE_PORTAL_MODE_AVOID = 2; // 0x2
+    field public static final int CAPTIVE_PORTAL_MODE_IGNORE = 0; // 0x0
+    field public static final int CAPTIVE_PORTAL_MODE_PROMPT = 1; // 0x1
+    field public static final int NETWORK_AVOID_BAD_WIFI_AVOID = 2; // 0x2
+    field public static final int NETWORK_AVOID_BAD_WIFI_IGNORE = 0; // 0x0
+    field public static final int NETWORK_AVOID_BAD_WIFI_PROMPT = 1; // 0x1
+    field public static final int PRIVATE_DNS_MODE_OFF = 1; // 0x1
+    field public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2; // 0x2
+    field public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3; // 0x3
+  }
+
+  public final class NetworkAgentConfig implements android.os.Parcelable {
+    method @Nullable public String getSubscriberId();
+    method public boolean isBypassableVpn();
+  }
+
+  public static final class NetworkAgentConfig.Builder {
+    method @NonNull public android.net.NetworkAgentConfig.Builder setBypassableVpn(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setSubscriberId(@Nullable String);
+  }
+
+  public final class NetworkCapabilities implements android.os.Parcelable {
+    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getUids();
+    method public boolean hasForbiddenCapability(int);
+    field public static final long REDACT_ALL = -1L; // 0xffffffffffffffffL
+    field public static final long REDACT_FOR_ACCESS_FINE_LOCATION = 1L; // 0x1L
+    field public static final long REDACT_FOR_LOCAL_MAC_ADDRESS = 2L; // 0x2L
+    field public static final long REDACT_FOR_NETWORK_SETTINGS = 4L; // 0x4L
+    field public static final long REDACT_NONE = 0L; // 0x0L
+    field public static final int TRANSPORT_TEST = 7; // 0x7
+  }
+
+  public static final class NetworkCapabilities.Builder {
+    method @NonNull public android.net.NetworkCapabilities.Builder setUids(@Nullable java.util.Set<android.util.Range<java.lang.Integer>>);
+  }
+
+  public class NetworkRequest implements android.os.Parcelable {
+    method @NonNull public int[] getForbiddenCapabilities();
+    method public boolean hasForbiddenCapability(int);
+  }
+
+  public static class NetworkRequest.Builder {
+    method @NonNull public android.net.NetworkRequest.Builder addForbiddenCapability(int);
+    method @NonNull public android.net.NetworkRequest.Builder removeForbiddenCapability(int);
+    method @NonNull public android.net.NetworkRequest.Builder setUids(@Nullable java.util.Set<android.util.Range<java.lang.Integer>>);
+  }
+
+  public final class TestNetworkInterface implements android.os.Parcelable {
+    ctor public TestNetworkInterface(@NonNull android.os.ParcelFileDescriptor, @NonNull String);
+    method public int describeContents();
+    method @NonNull public android.os.ParcelFileDescriptor getFileDescriptor();
+    method @NonNull public String getInterfaceName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TestNetworkInterface> CREATOR;
+  }
+
+  public class TestNetworkManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public android.net.TestNetworkInterface createTapInterface();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public android.net.TestNetworkInterface createTunInterface(@NonNull java.util.Collection<android.net.LinkAddress>);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public void setupTestNetwork(@NonNull String, @NonNull android.os.IBinder);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TEST_NETWORKS) public void teardownTestNetwork(@NonNull android.net.Network);
+    field public static final String TEST_TAP_PREFIX = "testtap";
+  }
+
+  public final class TestNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    ctor public TestNetworkSpecifier(@NonNull String);
+    method public int describeContents();
+    method @Nullable public String getInterfaceName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TestNetworkSpecifier> CREATOR;
+  }
+
+  public interface TransportInfo {
+    method public default long getApplicableRedactions();
+    method @NonNull public default android.net.TransportInfo makeCopy(long);
+  }
+
+  public final class VpnTransportInfo implements android.os.Parcelable android.net.TransportInfo {
+    ctor public VpnTransportInfo(int, @Nullable String);
+    method public int describeContents();
+    method @Nullable public String getSessionId();
+    method public int getType();
+    method @NonNull public android.net.VpnTransportInfo makeCopy(long);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.VpnTransportInfo> CREATOR;
+  }
+
+}
+
diff --git a/32/module-lib/api/framework-graphics-removed.txt b/32/module-lib/api/framework-graphics-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-graphics-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-graphics.txt b/32/module-lib/api/framework-graphics.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-graphics.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-media-removed.txt b/32/module-lib/api/framework-media-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-media-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-media.txt b/32/module-lib/api/framework-media.txt
new file mode 100644
index 0000000..eb6397a
--- /dev/null
+++ b/32/module-lib/api/framework-media.txt
@@ -0,0 +1,30 @@
+// Signature format: 2.0
+package android.media {
+
+  public class MediaCommunicationManager {
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void registerSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaCommunicationManager.SessionCallback);
+    method public void unregisterSessionCallback(@NonNull android.media.MediaCommunicationManager.SessionCallback);
+  }
+
+  public static interface MediaCommunicationManager.SessionCallback {
+    method public default void onSession2TokenCreated(@NonNull android.media.Session2Token);
+    method public default void onSession2TokensChanged(@NonNull java.util.List<android.media.Session2Token>);
+  }
+
+  public class MediaFrameworkInitializer {
+    method public static void registerServiceWrappers();
+    method public static void setMediaServiceManager(@NonNull android.media.MediaServiceManager);
+  }
+
+  @Deprecated public final class MediaParceledListSlice<T extends android.os.Parcelable> implements android.os.Parcelable {
+    ctor @Deprecated public MediaParceledListSlice(@NonNull java.util.List<T>);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public static <T extends android.os.Parcelable> android.media.MediaParceledListSlice<T> emptyList();
+    method @Deprecated public java.util.List<T> getList();
+    method @Deprecated public void setInlineCountLimit(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.ClassLoaderCreator<android.media.MediaParceledListSlice> CREATOR;
+  }
+
+}
+
diff --git a/32/module-lib/api/framework-mediaprovider-removed.txt b/32/module-lib/api/framework-mediaprovider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-mediaprovider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-mediaprovider.txt b/32/module-lib/api/framework-mediaprovider.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-mediaprovider.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-permission-removed.txt b/32/module-lib/api/framework-permission-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-permission-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-permission-s-removed.txt b/32/module-lib/api/framework-permission-s-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-permission-s-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-permission-s.txt b/32/module-lib/api/framework-permission-s.txt
new file mode 100644
index 0000000..ea38c21
--- /dev/null
+++ b/32/module-lib/api/framework-permission-s.txt
@@ -0,0 +1,15 @@
+// Signature format: 2.0
+package android.app.role {
+
+  public class RoleFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+  public final class RoleManager {
+    method @Nullable public String getBrowserRoleHolder(int);
+    method @Nullable public String getSmsRoleHolder(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) public boolean setBrowserRoleHolder(@Nullable String, int);
+  }
+
+}
+
diff --git a/32/module-lib/api/framework-permission.txt b/32/module-lib/api/framework-permission.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-permission.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-scheduling-removed.txt b/32/module-lib/api/framework-scheduling-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-scheduling-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-scheduling.txt b/32/module-lib/api/framework-scheduling.txt
new file mode 100644
index 0000000..9356eb7
--- /dev/null
+++ b/32/module-lib/api/framework-scheduling.txt
@@ -0,0 +1,9 @@
+// Signature format: 2.0
+package android.scheduling {
+
+  public class SchedulingFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+}
+
diff --git a/32/module-lib/api/framework-sdkextensions-removed.txt b/32/module-lib/api/framework-sdkextensions-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-sdkextensions-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-sdkextensions.txt b/32/module-lib/api/framework-sdkextensions.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-sdkextensions.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-statsd-removed.txt b/32/module-lib/api/framework-statsd-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-statsd-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-statsd.txt b/32/module-lib/api/framework-statsd.txt
new file mode 100644
index 0000000..8b6e217
--- /dev/null
+++ b/32/module-lib/api/framework-statsd.txt
@@ -0,0 +1,10 @@
+// Signature format: 2.0
+package android.os {
+
+  public class StatsFrameworkInitializer {
+    method public static void registerServiceWrappers();
+    method public static void setStatsServiceManager(@NonNull android.os.StatsServiceManager);
+  }
+
+}
+
diff --git a/32/module-lib/api/framework-tethering-removed.txt b/32/module-lib/api/framework-tethering-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-tethering-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-tethering.txt b/32/module-lib/api/framework-tethering.txt
new file mode 100644
index 0000000..0566040
--- /dev/null
+++ b/32/module-lib/api/framework-tethering.txt
@@ -0,0 +1,41 @@
+// Signature format: 2.0
+package android.net {
+
+  public final class TetheringConstants {
+    field public static final String EXTRA_ADD_TETHER_TYPE = "extraAddTetherType";
+    field public static final String EXTRA_PROVISION_CALLBACK = "extraProvisionCallback";
+    field public static final String EXTRA_REM_TETHER_TYPE = "extraRemTetherType";
+    field public static final String EXTRA_RUN_PROVISION = "extraRunProvision";
+    field public static final String EXTRA_SET_ALARM = "extraSetAlarm";
+  }
+
+  public class TetheringManager {
+    ctor public TetheringManager(@NonNull android.content.Context, @NonNull java.util.function.Supplier<android.os.IBinder>);
+    method public int getLastTetherError(@NonNull String);
+    method @NonNull public String[] getTetherableBluetoothRegexs();
+    method @NonNull public String[] getTetherableIfaces();
+    method @NonNull public String[] getTetherableUsbRegexs();
+    method @NonNull public String[] getTetherableWifiRegexs();
+    method @NonNull public String[] getTetheredIfaces();
+    method @NonNull public String[] getTetheringErroredIfaces();
+    method public boolean isTetheringSupported();
+    method public boolean isTetheringSupported(@NonNull String);
+    method public void requestLatestTetheringEntitlementResult(int, @NonNull android.os.ResultReceiver, boolean);
+    method @Deprecated public int setUsbTethering(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void startTethering(int, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.StartTetheringCallback);
+    method @Deprecated public int tether(@NonNull String);
+    method @Deprecated public int untether(@NonNull String);
+  }
+
+  public static interface TetheringManager.TetheringEventCallback {
+    method @Deprecated public default void onTetherableInterfaceRegexpsChanged(@NonNull android.net.TetheringManager.TetheringInterfaceRegexps);
+  }
+
+  @Deprecated public static class TetheringManager.TetheringInterfaceRegexps {
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableBluetoothRegexs();
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableUsbRegexs();
+    method @Deprecated @NonNull public java.util.List<java.lang.String> getTetherableWifiRegexs();
+  }
+
+}
+
diff --git a/32/module-lib/api/framework-wifi-removed.txt b/32/module-lib/api/framework-wifi-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-wifi-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/framework-wifi.txt b/32/module-lib/api/framework-wifi.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/framework-wifi.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/api/removed.txt b/32/module-lib/api/removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/module-lib/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/module-lib/art.jar b/32/module-lib/art.jar
new file mode 100644
index 0000000..bc9bef4
--- /dev/null
+++ b/32/module-lib/art.jar
Binary files differ
diff --git a/32/module-lib/framework-appsearch.jar b/32/module-lib/framework-appsearch.jar
new file mode 100644
index 0000000..a9ec3d4
--- /dev/null
+++ b/32/module-lib/framework-appsearch.jar
Binary files differ
diff --git a/32/module-lib/framework-graphics.jar b/32/module-lib/framework-graphics.jar
new file mode 100644
index 0000000..d0cbc01
--- /dev/null
+++ b/32/module-lib/framework-graphics.jar
Binary files differ
diff --git a/32/module-lib/framework-media.jar b/32/module-lib/framework-media.jar
new file mode 100644
index 0000000..0b49012
--- /dev/null
+++ b/32/module-lib/framework-media.jar
Binary files differ
diff --git a/32/module-lib/framework-permission-s.jar b/32/module-lib/framework-permission-s.jar
new file mode 100644
index 0000000..66835c9
--- /dev/null
+++ b/32/module-lib/framework-permission-s.jar
Binary files differ
diff --git a/32/module-lib/framework-statsd.jar b/32/module-lib/framework-statsd.jar
new file mode 100644
index 0000000..141b45a
--- /dev/null
+++ b/32/module-lib/framework-statsd.jar
Binary files differ
diff --git a/32/module-lib/framework-tethering.jar b/32/module-lib/framework-tethering.jar
new file mode 100644
index 0000000..4d17fbd
--- /dev/null
+++ b/32/module-lib/framework-tethering.jar
Binary files differ
diff --git a/32/public/android-non-updatable.jar b/32/public/android-non-updatable.jar
new file mode 100644
index 0000000..a217e8b
--- /dev/null
+++ b/32/public/android-non-updatable.jar
Binary files differ
diff --git a/32/public/android.jar b/32/public/android.jar
new file mode 100644
index 0000000..32d7c47
--- /dev/null
+++ b/32/public/android.jar
Binary files differ
diff --git a/32/public/android.test.base.jar b/32/public/android.test.base.jar
new file mode 100644
index 0000000..e834e18
--- /dev/null
+++ b/32/public/android.test.base.jar
Binary files differ
diff --git a/32/public/android.test.mock.jar b/32/public/android.test.mock.jar
new file mode 100644
index 0000000..bc79d64
--- /dev/null
+++ b/32/public/android.test.mock.jar
Binary files differ
diff --git a/32/public/android.test.runner.jar b/32/public/android.test.runner.jar
new file mode 100644
index 0000000..4f2cc05
--- /dev/null
+++ b/32/public/android.test.runner.jar
Binary files differ
diff --git a/32/public/api/android-non-updatable-removed.txt b/32/public/api/android-non-updatable-removed.txt
new file mode 100644
index 0000000..bf86422
--- /dev/null
+++ b/32/public/api/android-non-updatable-removed.txt
@@ -0,0 +1,607 @@
+// Signature format: 2.0
+package android.app {
+
+  public class Notification implements android.os.Parcelable {
+    method @Deprecated public String getChannel();
+    method public static Class<? extends android.app.Notification.Style> getNotificationStyleClass(String);
+    method @Deprecated public long getTimeout();
+    method @Deprecated public void setLatestEventInfo(android.content.Context, CharSequence, CharSequence, android.app.PendingIntent);
+  }
+
+  public static final class Notification.BubbleMetadata implements android.os.Parcelable {
+    method @Deprecated @Nullable public android.graphics.drawable.Icon getBubbleIcon();
+    method @Deprecated @Nullable public android.app.PendingIntent getBubbleIntent();
+  }
+
+  public static final class Notification.BubbleMetadata.Builder {
+    method @Deprecated @NonNull public android.app.Notification.BubbleMetadata.Builder createIntentBubble(@NonNull android.app.PendingIntent, @NonNull android.graphics.drawable.Icon);
+    method @Deprecated @NonNull public android.app.Notification.BubbleMetadata.Builder createShortcutBubble(@NonNull String);
+  }
+
+  public static class Notification.Builder {
+    method @Deprecated public android.app.Notification.Builder setChannel(String);
+    method @Deprecated public android.app.Notification.Builder setTimeout(long);
+  }
+
+}
+
+package android.app.slice {
+
+  public final class Slice implements android.os.Parcelable {
+    field @Deprecated public static final String EXTRA_SLIDER_VALUE = "android.app.slice.extra.SLIDER_VALUE";
+    field @Deprecated public static final String SUBTYPE_SLIDER = "slider";
+  }
+
+  public static class Slice.Builder {
+    ctor @Deprecated public Slice.Builder(@NonNull android.net.Uri);
+    method @Deprecated public android.app.slice.Slice.Builder addTimestamp(long, @Nullable String, java.util.List<java.lang.String>);
+    method @Deprecated public android.app.slice.Slice.Builder setSpec(android.app.slice.SliceSpec);
+  }
+
+  public final class SliceItem implements android.os.Parcelable {
+    method @Deprecated public long getTimestamp();
+    field @Deprecated public static final String FORMAT_TIMESTAMP = "long";
+  }
+
+  public class SliceManager {
+    method @Deprecated @Nullable public android.app.slice.Slice bindSlice(@NonNull android.net.Uri, @NonNull java.util.List<android.app.slice.SliceSpec>);
+    method @Deprecated @Nullable public android.app.slice.Slice bindSlice(@NonNull android.content.Intent, @NonNull java.util.List<android.app.slice.SliceSpec>);
+    method @Deprecated public void pinSlice(@NonNull android.net.Uri, @NonNull java.util.List<android.app.slice.SliceSpec>);
+  }
+
+  public abstract class SliceProvider extends android.content.ContentProvider {
+    method @Deprecated public android.app.slice.Slice onBindSlice(android.net.Uri, java.util.List<android.app.slice.SliceSpec>);
+  }
+
+}
+
+package android.app.usage {
+
+  public class StorageStatsManager {
+    method @Deprecated public long getFreeBytes(String) throws java.io.IOException;
+    method @Deprecated public long getTotalBytes(String) throws java.io.IOException;
+    method @Deprecated public boolean isQuotaSupported(String);
+    method @Deprecated public android.app.usage.ExternalStorageStats queryExternalStatsForUser(String, android.os.UserHandle) throws java.io.IOException;
+    method @Deprecated public android.app.usage.StorageStats queryStatsForPackage(String, String, android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.app.usage.StorageStats queryStatsForUid(String, int) throws java.io.IOException;
+    method @Deprecated public android.app.usage.StorageStats queryStatsForUser(String, android.os.UserHandle) throws java.io.IOException;
+  }
+
+}
+
+package android.content {
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method @Deprecated @Nullable public final String getCallingFeatureId();
+  }
+
+  public abstract class ContentResolver {
+    method @Deprecated public void notifyChange(@NonNull Iterable<android.net.Uri>, @Nullable android.database.ContentObserver, int);
+  }
+
+  public abstract class Context {
+    method @Deprecated @NonNull public android.content.Context createFeatureContext(@Nullable String);
+    method @Deprecated @Nullable public String getFeatureId();
+    method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+    method public abstract java.io.File getSharedPreferencesPath(String);
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+    method public java.io.File getSharedPreferencesPath(String);
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field @Deprecated public static final String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+  }
+
+}
+
+package android.content.pm {
+
+  public class PackageInfo implements android.os.Parcelable {
+    field public static final int REQUESTED_PERMISSION_REQUIRED = 1; // 0x1
+  }
+
+  public abstract class PackageManager {
+    method public abstract boolean setInstantAppCookie(@Nullable byte[]);
+  }
+
+  public final class SharedLibraryInfo implements android.os.Parcelable {
+    method public boolean isBuiltin();
+    method public boolean isDynamic();
+    method public boolean isStatic();
+  }
+
+}
+
+package android.database {
+
+  public abstract class AbstractCursor implements android.database.CrossProcessCursor {
+    field protected Long mCurrentRowID;
+    field protected int mRowIdColumnIndex;
+    field protected java.util.HashMap<java.lang.Long,java.util.Map<java.lang.String,java.lang.Object>> mUpdatedRows;
+  }
+
+}
+
+package android.graphics {
+
+  @Deprecated public class AvoidXfermode extends android.graphics.Xfermode {
+    ctor public AvoidXfermode(int, int, android.graphics.AvoidXfermode.Mode);
+  }
+
+  public enum AvoidXfermode.Mode {
+    enum_constant public static final android.graphics.AvoidXfermode.Mode AVOID;
+    enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
+  }
+
+  public class Canvas {
+    method @Deprecated public boolean clipRegion(@NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method @Deprecated public boolean clipRegion(@NonNull android.graphics.Region);
+    method @Deprecated public int save(int);
+    field @Deprecated public static final int CLIP_SAVE_FLAG = 2; // 0x2
+    field @Deprecated public static final int CLIP_TO_LAYER_SAVE_FLAG = 16; // 0x10
+    field @Deprecated public static final int FULL_COLOR_LAYER_SAVE_FLAG = 8; // 0x8
+    field @Deprecated public static final int HAS_ALPHA_LAYER_SAVE_FLAG = 4; // 0x4
+    field @Deprecated public static final int MATRIX_SAVE_FLAG = 1; // 0x1
+  }
+
+  public final class ImageDecoder implements java.lang.AutoCloseable {
+    method @Deprecated public boolean getAsAlphaMask();
+    method @Deprecated public boolean getConserveMemory();
+    method @Deprecated public boolean getDecodeAsAlphaMask();
+    method @Deprecated public boolean getMutable();
+    method @Deprecated public boolean getRequireUnpremultiplied();
+    method @Deprecated public android.graphics.ImageDecoder setAsAlphaMask(boolean);
+    method @Deprecated public void setConserveMemory(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setDecodeAsAlphaMask(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setMutable(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setRequireUnpremultiplied(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setResize(int, int);
+    method @Deprecated public android.graphics.ImageDecoder setResize(int);
+    field @Deprecated public static final int ERROR_SOURCE_ERROR = 3; // 0x3
+    field @Deprecated public static final int ERROR_SOURCE_EXCEPTION = 1; // 0x1
+    field @Deprecated public static final int ERROR_SOURCE_INCOMPLETE = 2; // 0x2
+  }
+
+  @Deprecated public static class ImageDecoder.IncompleteException extends java.io.IOException {
+    ctor public ImageDecoder.IncompleteException();
+  }
+
+  @Deprecated public class LayerRasterizer extends android.graphics.Rasterizer {
+    ctor public LayerRasterizer();
+    method public void addLayer(android.graphics.Paint, float, float);
+    method public void addLayer(android.graphics.Paint);
+  }
+
+  public class Paint {
+    method @Deprecated public android.graphics.Rasterizer getRasterizer();
+    method @Deprecated public android.graphics.Rasterizer setRasterizer(android.graphics.Rasterizer);
+  }
+
+  public class Picture {
+    method @Deprecated public static android.graphics.Picture createFromStream(@NonNull java.io.InputStream);
+    method @Deprecated public void writeToStream(@NonNull java.io.OutputStream);
+  }
+
+  @Deprecated public class PixelXorXfermode extends android.graphics.Xfermode {
+    ctor public PixelXorXfermode(int);
+  }
+
+  public class Rasterizer {
+    ctor public Rasterizer();
+  }
+
+}
+
+package android.graphics.drawable {
+
+  public class AnimatedImageDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
+    method @Deprecated public int getLoopCount(int);
+    method @Deprecated public void setLoopCount(int);
+    field @Deprecated public static final int LOOP_INFINITE = -1; // 0xffffffff
+  }
+
+}
+
+package android.hardware {
+
+  public final class SensorDirectChannel implements java.nio.channels.Channel {
+    method @Deprecated public boolean isValid();
+  }
+
+}
+
+package android.location {
+
+  public class Location implements android.os.Parcelable {
+    method @Deprecated public void removeBearingAccuracy();
+    method @Deprecated public void removeSpeedAccuracy();
+    method @Deprecated public void removeVerticalAccuracy();
+  }
+
+}
+
+package android.media {
+
+  public final class AudioFormat implements android.os.Parcelable {
+    ctor public AudioFormat();
+  }
+
+}
+
+package android.media.tv {
+
+  public class TvView extends android.view.ViewGroup {
+    method public void requestUnblockContent(android.media.tv.TvContentRating);
+  }
+
+}
+
+package android.net {
+
+  @Deprecated public class NetworkBadging {
+    method @NonNull public static android.graphics.drawable.Drawable getWifiIcon(@IntRange(from=0, to=4) int, int, @Nullable android.content.res.Resources.Theme);
+    field public static final int BADGING_4K = 30; // 0x1e
+    field public static final int BADGING_HD = 20; // 0x14
+    field public static final int BADGING_NONE = 0; // 0x0
+    field public static final int BADGING_SD = 10; // 0xa
+  }
+
+  @IntDef({0x0, 0xa, 0x14, 0x1e}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NetworkBadging.Badging {
+  }
+
+  public final class Proxy {
+    field @Deprecated public static final String EXTRA_PROXY_INFO = "android.intent.extra.PROXY_INFO";
+  }
+
+  @Deprecated public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory {
+    method @Deprecated public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache);
+  }
+
+  public class TrafficStats {
+    method @Deprecated public static void setThreadStatsUidSelf();
+  }
+
+}
+
+package android.os {
+
+  public class BatteryManager {
+    ctor public BatteryManager();
+  }
+
+  public final class PowerManager {
+    method public void goToSleep(long);
+    method @Deprecated public void userActivity(long, boolean);
+    method @Deprecated public void wakeUp(long);
+  }
+
+  public class RecoverySystem {
+    ctor public RecoverySystem();
+  }
+
+  public static final class StrictMode.ThreadPolicy.Builder {
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnThreadViolationListener, @NonNull java.util.concurrent.Executor);
+  }
+
+  public static final class StrictMode.VmPolicy.Builder {
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnVmViolationListener, @NonNull java.util.concurrent.Executor);
+  }
+
+  public final class SystemClock {
+    method @NonNull public static java.time.Clock elapsedRealtimeClock();
+    method @NonNull public static java.time.Clock uptimeClock();
+  }
+
+  public class TestLooperManager {
+    method @Deprecated public android.os.MessageQueue getQueue();
+  }
+
+  public class UserManager {
+    method public android.graphics.drawable.Drawable getBadgedDrawableForUser(android.graphics.drawable.Drawable, android.os.UserHandle, android.graphics.Rect, int);
+    method public android.graphics.drawable.Drawable getBadgedIconForUser(android.graphics.drawable.Drawable, android.os.UserHandle);
+    method public CharSequence getBadgedLabelForUser(CharSequence, android.os.UserHandle);
+  }
+
+}
+
+package android.os.storage {
+
+  public class StorageManager {
+    method @NonNull public android.os.storage.StorageVolume getPrimaryVolume();
+    method @NonNull public android.os.storage.StorageVolume[] getVolumeList();
+  }
+
+}
+
+package android.provider {
+
+  public class Browser {
+    method @RequiresPermission(allOf={"com.android.browser.permission.READ_HISTORY_BOOKMARKS", "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"}, apis="..22") public static final void addSearchUrl(android.content.ContentResolver, String);
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final boolean canClearHistory(android.content.ContentResolver);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void clearHistory(android.content.ContentResolver);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void clearSearches(android.content.ContentResolver);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void deleteFromHistory(android.content.ContentResolver, String);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void deleteHistoryTimeFrame(android.content.ContentResolver, long, long);
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final android.database.Cursor getAllBookmarks(android.content.ContentResolver) throws java.lang.IllegalStateException;
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final android.database.Cursor getAllVisitedUrls(android.content.ContentResolver) throws java.lang.IllegalStateException;
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final void requestAllIcons(android.content.ContentResolver, String, android.webkit.WebIconDatabase.IconListener);
+    method public static final void saveBookmark(android.content.Context, String, String);
+    method @RequiresPermission(allOf={"com.android.browser.permission.READ_HISTORY_BOOKMARKS", "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"}, apis="..22") public static final void truncateHistory(android.content.ContentResolver);
+    method @RequiresPermission(allOf={"com.android.browser.permission.READ_HISTORY_BOOKMARKS", "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"}, apis="..22") public static final void updateVisitedHistory(android.content.ContentResolver, String, boolean);
+    field @RequiresPermission.Read(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") @RequiresPermission.Write(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final android.net.Uri BOOKMARKS_URI;
+    field public static final String[] HISTORY_PROJECTION;
+    field public static final int HISTORY_PROJECTION_BOOKMARK_INDEX = 4; // 0x4
+    field public static final int HISTORY_PROJECTION_DATE_INDEX = 3; // 0x3
+    field public static final int HISTORY_PROJECTION_FAVICON_INDEX = 6; // 0x6
+    field public static final int HISTORY_PROJECTION_ID_INDEX = 0; // 0x0
+    field public static final int HISTORY_PROJECTION_TITLE_INDEX = 5; // 0x5
+    field public static final int HISTORY_PROJECTION_URL_INDEX = 1; // 0x1
+    field public static final int HISTORY_PROJECTION_VISITS_INDEX = 2; // 0x2
+    field public static final String[] SEARCHES_PROJECTION;
+    field public static final int SEARCHES_PROJECTION_DATE_INDEX = 2; // 0x2
+    field public static final int SEARCHES_PROJECTION_SEARCH_INDEX = 1; // 0x1
+    field @RequiresPermission.Read(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") @RequiresPermission.Write(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final android.net.Uri SEARCHES_URI;
+    field public static final String[] TRUNCATE_HISTORY_PROJECTION;
+    field public static final int TRUNCATE_HISTORY_PROJECTION_ID_INDEX = 0; // 0x0
+    field public static final int TRUNCATE_N_OLDEST = 5; // 0x5
+  }
+
+  public static class Browser.BookmarkColumns implements android.provider.BaseColumns {
+    ctor public Browser.BookmarkColumns();
+    field public static final String BOOKMARK = "bookmark";
+    field public static final String CREATED = "created";
+    field public static final String DATE = "date";
+    field public static final String FAVICON = "favicon";
+    field public static final String TITLE = "title";
+    field public static final String URL = "url";
+    field public static final String VISITS = "visits";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  public static class Browser.SearchColumns implements android.provider.BaseColumns {
+    ctor public Browser.SearchColumns();
+    field public static final String DATE = "date";
+    field public static final String SEARCH = "search";
+    field @Deprecated public static final String URL = "url";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated public static final class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "stream_items";
+  }
+
+  @Deprecated public static final class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "stream_items";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated public static final class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
+    field @Deprecated public static final String PHOTO = "photo";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated protected static interface ContactsContract.StreamItemPhotosColumns {
+    field @Deprecated public static final String PHOTO_FILE_ID = "photo_file_id";
+    field @Deprecated public static final String PHOTO_URI = "photo_uri";
+    field @Deprecated public static final String SORT_INDEX = "sort_index";
+    field @Deprecated public static final String STREAM_ITEM_ID = "stream_item_id";
+    field @Deprecated public static final String SYNC1 = "stream_item_photo_sync1";
+    field @Deprecated public static final String SYNC2 = "stream_item_photo_sync2";
+    field @Deprecated public static final String SYNC3 = "stream_item_photo_sync3";
+    field @Deprecated public static final String SYNC4 = "stream_item_photo_sync4";
+  }
+
+  @Deprecated public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
+    field @Deprecated public static final android.net.Uri CONTENT_LIMIT_URI;
+    field @Deprecated public static final android.net.Uri CONTENT_PHOTO_URI;
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String MAX_ITEMS = "max_items";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "photo";
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated protected static interface ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String ACCOUNT_NAME = "account_name";
+    field @Deprecated public static final String ACCOUNT_TYPE = "account_type";
+    field @Deprecated public static final String COMMENTS = "comments";
+    field @Deprecated public static final String CONTACT_ID = "contact_id";
+    field @Deprecated public static final String CONTACT_LOOKUP_KEY = "contact_lookup";
+    field @Deprecated public static final String DATA_SET = "data_set";
+    field @Deprecated public static final String RAW_CONTACT_ID = "raw_contact_id";
+    field @Deprecated public static final String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
+    field @Deprecated public static final String RES_ICON = "icon";
+    field @Deprecated public static final String RES_LABEL = "label";
+    field @Deprecated public static final String RES_PACKAGE = "res_package";
+    field @Deprecated public static final String SYNC1 = "stream_item_sync1";
+    field @Deprecated public static final String SYNC2 = "stream_item_sync2";
+    field @Deprecated public static final String SYNC3 = "stream_item_sync3";
+    field @Deprecated public static final String SYNC4 = "stream_item_sync4";
+    field @Deprecated public static final String TEXT = "text";
+    field @Deprecated public static final String TIMESTAMP = "timestamp";
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    field @Deprecated public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync";
+  }
+
+  public static final class Settings.System extends android.provider.Settings.NameValueTable {
+    field public static final String APPEND_FOR_LAST_AUDIBLE = "_last_audible";
+    field public static final String VOLUME_ALARM = "volume_alarm";
+    field public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco";
+    field public static final String VOLUME_MUSIC = "volume_music";
+    field public static final String VOLUME_NOTIFICATION = "volume_notification";
+    field public static final String VOLUME_RING = "volume_ring";
+    field public static final String[] VOLUME_SETTINGS;
+    field public static final String VOLUME_SYSTEM = "volume_system";
+    field public static final String VOLUME_VOICE = "volume_voice";
+  }
+
+}
+
+package android.speech.tts {
+
+  public abstract class UtteranceProgressListener {
+    method @Deprecated public void onUtteranceRangeStart(String, int, int);
+  }
+
+}
+
+package android.telephony {
+
+  public class NetworkScan {
+    method @Deprecated public void stop() throws android.os.RemoteException;
+  }
+
+  public class TelephonyManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) public java.util.List<android.telephony.NeighboringCellInfo> getNeighboringCellInfo();
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, android.telephony.TelephonyScanManager.NetworkScanCallback);
+  }
+
+}
+
+package android.text.format {
+
+  public class DateFormat {
+    field @Deprecated public static final char AM_PM = 97; // 0x0061 'a'
+    field @Deprecated public static final char CAPITAL_AM_PM = 65; // 0x0041 'A'
+    field @Deprecated public static final char DATE = 100; // 0x0064 'd'
+    field @Deprecated public static final char DAY = 69; // 0x0045 'E'
+    field @Deprecated public static final char HOUR = 104; // 0x0068 'h'
+    field @Deprecated public static final char HOUR_OF_DAY = 107; // 0x006b 'k'
+    field @Deprecated public static final char MINUTE = 109; // 0x006d 'm'
+    field @Deprecated public static final char MONTH = 77; // 0x004d 'M'
+    field @Deprecated public static final char QUOTE = 39; // 0x0027 '\''
+    field @Deprecated public static final char SECONDS = 115; // 0x0073 's'
+    field @Deprecated public static final char STANDALONE_MONTH = 76; // 0x004c 'L'
+    field @Deprecated public static final char TIME_ZONE = 122; // 0x007a 'z'
+    field @Deprecated public static final char YEAR = 121; // 0x0079 'y'
+  }
+
+}
+
+package android.text.style {
+
+  public class RasterizerSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance {
+    ctor public RasterizerSpan(android.graphics.Rasterizer);
+    method public android.graphics.Rasterizer getRasterizer();
+    method public void updateDrawState(android.text.TextPaint);
+  }
+
+}
+
+package android.util {
+
+  @Deprecated public class FloatMath {
+    method public static float ceil(float);
+    method public static float cos(float);
+    method public static float exp(float);
+    method public static float floor(float);
+    method public static float hypot(float, float);
+    method public static float pow(float, float);
+    method public static float sin(float);
+    method public static float sqrt(float);
+  }
+
+}
+
+package android.view {
+
+  @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
+    method protected void initializeFadingEdge(android.content.res.TypedArray);
+    method protected void initializeScrollbars(android.content.res.TypedArray);
+  }
+
+  public class ViewConfiguration {
+    method public int getScaledScrollFactor();
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
+    field public static final int TYPE_STATUS_BAR_PANEL = 2014; // 0x7de
+  }
+
+}
+
+package android.view.translation {
+
+  public final class TranslationManager {
+    method @Deprecated public void addOnDeviceTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+    method @Deprecated public void addTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+    method @Deprecated @Nullable @WorkerThread public android.view.translation.Translator createOnDeviceTranslator(@NonNull android.view.translation.TranslationContext);
+    method @Deprecated @Nullable @WorkerThread public android.view.translation.Translator createTranslator(@NonNull android.view.translation.TranslationContext);
+    method @Deprecated @NonNull @WorkerThread public java.util.Set<android.view.translation.TranslationCapability> getTranslationCapabilities(int, int);
+    method @Deprecated @Nullable public android.app.PendingIntent getTranslationSettingsActivityIntent();
+    method @Deprecated public void removeOnDeviceTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+    method @Deprecated public void removeTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+  }
+
+  public static final class TranslationRequest.Builder {
+    method @Deprecated @NonNull public android.view.translation.TranslationRequest.Builder addTranslationRequestValue(@NonNull android.view.translation.TranslationRequestValue);
+    method @Deprecated @NonNull public android.view.translation.TranslationRequest.Builder addViewTranslationRequest(@NonNull android.view.translation.ViewTranslationRequest);
+  }
+
+  public static final class TranslationResponse.Builder {
+    method @Deprecated @NonNull public android.view.translation.TranslationResponse.Builder setTranslationStatus(int);
+  }
+
+  public final class TranslationSpec implements android.os.Parcelable {
+    ctor @Deprecated public TranslationSpec(@NonNull String, int);
+    method @Deprecated @NonNull public String getLanguage();
+  }
+
+  public class Translator {
+    method @Deprecated @Nullable public void translate(@NonNull android.view.translation.TranslationRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
+  }
+
+  public interface UiTranslationStateCallback {
+    method @Deprecated public default void onStarted(@NonNull String, @NonNull String);
+  }
+
+}
+
+package android.webkit {
+
+  public class WebViewClient {
+    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+  }
+
+}
+
+package android.widget {
+
+  @android.widget.RemoteViews.RemoteView public class ListView extends android.widget.AbsListView {
+    method protected <T extends android.view.View> T findViewTraversal(@IdRes int);
+    method protected <T extends android.view.View> T findViewWithTagTraversal(Object);
+  }
+
+  public class PopupWindow {
+    method @Deprecated public boolean isClipToScreenEnabled();
+    method @Deprecated public boolean isLayoutInScreenEnabled();
+    method @Deprecated public void setClipToScreenEnabled(boolean);
+    method @Deprecated public void setLayoutInScreenEnabled(boolean);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
+    method public static int getTextColor(android.content.Context, android.content.res.TypedArray, int);
+    method public static android.content.res.ColorStateList getTextColors(android.content.Context, android.content.res.TypedArray);
+  }
+
+}
+
diff --git a/32/public/api/android-non-updatable.txt b/32/public/api/android-non-updatable.txt
new file mode 100644
index 0000000..1dd401d
--- /dev/null
+++ b/32/public/api/android-non-updatable.txt
@@ -0,0 +1,57935 @@
+// Signature format: 2.0
+package android {
+
+  public final class Manifest {
+    ctor public Manifest();
+  }
+
+  public static final class Manifest.permission {
+    ctor public Manifest.permission();
+    field public static final String ACCEPT_HANDOVER = "android.permission.ACCEPT_HANDOVER";
+    field public static final String ACCESS_BACKGROUND_LOCATION = "android.permission.ACCESS_BACKGROUND_LOCATION";
+    field public static final String ACCESS_BLOBS_ACROSS_USERS = "android.permission.ACCESS_BLOBS_ACROSS_USERS";
+    field public static final String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
+    field public static final String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION";
+    field public static final String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
+    field public static final String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS";
+    field public static final String ACCESS_MEDIA_LOCATION = "android.permission.ACCESS_MEDIA_LOCATION";
+    field public static final String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE";
+    field public static final String ACCESS_NOTIFICATION_POLICY = "android.permission.ACCESS_NOTIFICATION_POLICY";
+    field public static final String ACCESS_WIFI_STATE = "android.permission.ACCESS_WIFI_STATE";
+    field public static final String ACCOUNT_MANAGER = "android.permission.ACCOUNT_MANAGER";
+    field public static final String ACTIVITY_RECOGNITION = "android.permission.ACTIVITY_RECOGNITION";
+    field public static final String ADD_VOICEMAIL = "com.android.voicemail.permission.ADD_VOICEMAIL";
+    field public static final String ANSWER_PHONE_CALLS = "android.permission.ANSWER_PHONE_CALLS";
+    field public static final String BATTERY_STATS = "android.permission.BATTERY_STATS";
+    field public static final String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE";
+    field public static final String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
+    field public static final String BIND_AUTOFILL_SERVICE = "android.permission.BIND_AUTOFILL_SERVICE";
+    field public static final String BIND_CALL_REDIRECTION_SERVICE = "android.permission.BIND_CALL_REDIRECTION_SERVICE";
+    field public static final String BIND_CARRIER_MESSAGING_CLIENT_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE";
+    field @Deprecated public static final String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE";
+    field public static final String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES";
+    field @Deprecated public static final String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
+    field public static final String BIND_COMPANION_DEVICE_SERVICE = "android.permission.BIND_COMPANION_DEVICE_SERVICE";
+    field public static final String BIND_CONDITION_PROVIDER_SERVICE = "android.permission.BIND_CONDITION_PROVIDER_SERVICE";
+    field public static final String BIND_CONTROLS = "android.permission.BIND_CONTROLS";
+    field public static final String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN";
+    field public static final String BIND_DREAM_SERVICE = "android.permission.BIND_DREAM_SERVICE";
+    field public static final String BIND_INCALL_SERVICE = "android.permission.BIND_INCALL_SERVICE";
+    field public static final String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
+    field public static final String BIND_MIDI_DEVICE_SERVICE = "android.permission.BIND_MIDI_DEVICE_SERVICE";
+    field public static final String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
+    field public static final String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
+    field public static final String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
+    field public static final String BIND_QUICK_ACCESS_WALLET_SERVICE = "android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE";
+    field public static final String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE";
+    field public static final String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
+    field public static final String BIND_SCREENING_SERVICE = "android.permission.BIND_SCREENING_SERVICE";
+    field public static final String BIND_TELECOM_CONNECTION_SERVICE = "android.permission.BIND_TELECOM_CONNECTION_SERVICE";
+    field public static final String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
+    field public static final String BIND_TV_INPUT = "android.permission.BIND_TV_INPUT";
+    field public static final String BIND_VISUAL_VOICEMAIL_SERVICE = "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE";
+    field public static final String BIND_VOICE_INTERACTION = "android.permission.BIND_VOICE_INTERACTION";
+    field public static final String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE";
+    field public static final String BIND_VR_LISTENER_SERVICE = "android.permission.BIND_VR_LISTENER_SERVICE";
+    field public static final String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER";
+    field public static final String BLUETOOTH = "android.permission.BLUETOOTH";
+    field public static final String BLUETOOTH_ADMIN = "android.permission.BLUETOOTH_ADMIN";
+    field public static final String BLUETOOTH_ADVERTISE = "android.permission.BLUETOOTH_ADVERTISE";
+    field public static final String BLUETOOTH_CONNECT = "android.permission.BLUETOOTH_CONNECT";
+    field public static final String BLUETOOTH_PRIVILEGED = "android.permission.BLUETOOTH_PRIVILEGED";
+    field public static final String BLUETOOTH_SCAN = "android.permission.BLUETOOTH_SCAN";
+    field public static final String BODY_SENSORS = "android.permission.BODY_SENSORS";
+    field public static final String BROADCAST_PACKAGE_REMOVED = "android.permission.BROADCAST_PACKAGE_REMOVED";
+    field public static final String BROADCAST_SMS = "android.permission.BROADCAST_SMS";
+    field public static final String BROADCAST_STICKY = "android.permission.BROADCAST_STICKY";
+    field public static final String BROADCAST_WAP_PUSH = "android.permission.BROADCAST_WAP_PUSH";
+    field public static final String CALL_COMPANION_APP = "android.permission.CALL_COMPANION_APP";
+    field public static final String CALL_PHONE = "android.permission.CALL_PHONE";
+    field public static final String CALL_PRIVILEGED = "android.permission.CALL_PRIVILEGED";
+    field public static final String CAMERA = "android.permission.CAMERA";
+    field public static final String CAPTURE_AUDIO_OUTPUT = "android.permission.CAPTURE_AUDIO_OUTPUT";
+    field public static final String CHANGE_COMPONENT_ENABLED_STATE = "android.permission.CHANGE_COMPONENT_ENABLED_STATE";
+    field public static final String CHANGE_CONFIGURATION = "android.permission.CHANGE_CONFIGURATION";
+    field public static final String CHANGE_NETWORK_STATE = "android.permission.CHANGE_NETWORK_STATE";
+    field public static final String CHANGE_WIFI_MULTICAST_STATE = "android.permission.CHANGE_WIFI_MULTICAST_STATE";
+    field public static final String CHANGE_WIFI_STATE = "android.permission.CHANGE_WIFI_STATE";
+    field public static final String CLEAR_APP_CACHE = "android.permission.CLEAR_APP_CACHE";
+    field public static final String CONTROL_LOCATION_UPDATES = "android.permission.CONTROL_LOCATION_UPDATES";
+    field public static final String DELETE_CACHE_FILES = "android.permission.DELETE_CACHE_FILES";
+    field public static final String DELETE_PACKAGES = "android.permission.DELETE_PACKAGES";
+    field public static final String DIAGNOSTIC = "android.permission.DIAGNOSTIC";
+    field public static final String DISABLE_KEYGUARD = "android.permission.DISABLE_KEYGUARD";
+    field public static final String DUMP = "android.permission.DUMP";
+    field public static final String EXPAND_STATUS_BAR = "android.permission.EXPAND_STATUS_BAR";
+    field public static final String FACTORY_TEST = "android.permission.FACTORY_TEST";
+    field public static final String FOREGROUND_SERVICE = "android.permission.FOREGROUND_SERVICE";
+    field public static final String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS";
+    field public static final String GET_ACCOUNTS_PRIVILEGED = "android.permission.GET_ACCOUNTS_PRIVILEGED";
+    field public static final String GET_PACKAGE_SIZE = "android.permission.GET_PACKAGE_SIZE";
+    field @Deprecated public static final String GET_TASKS = "android.permission.GET_TASKS";
+    field public static final String GLOBAL_SEARCH = "android.permission.GLOBAL_SEARCH";
+    field public static final String HIDE_OVERLAY_WINDOWS = "android.permission.HIDE_OVERLAY_WINDOWS";
+    field public static final String HIGH_SAMPLING_RATE_SENSORS = "android.permission.HIGH_SAMPLING_RATE_SENSORS";
+    field public static final String INSTALL_LOCATION_PROVIDER = "android.permission.INSTALL_LOCATION_PROVIDER";
+    field public static final String INSTALL_PACKAGES = "android.permission.INSTALL_PACKAGES";
+    field public static final String INSTALL_SHORTCUT = "com.android.launcher.permission.INSTALL_SHORTCUT";
+    field public static final String INSTANT_APP_FOREGROUND_SERVICE = "android.permission.INSTANT_APP_FOREGROUND_SERVICE";
+    field public static final String INTERACT_ACROSS_PROFILES = "android.permission.INTERACT_ACROSS_PROFILES";
+    field public static final String INTERNET = "android.permission.INTERNET";
+    field public static final String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES";
+    field public static final String LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK = "android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK";
+    field public static final String LOADER_USAGE_STATS = "android.permission.LOADER_USAGE_STATS";
+    field public static final String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE";
+    field public static final String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
+    field public static final String MANAGE_EXTERNAL_STORAGE = "android.permission.MANAGE_EXTERNAL_STORAGE";
+    field public static final String MANAGE_MEDIA = "android.permission.MANAGE_MEDIA";
+    field public static final String MANAGE_ONGOING_CALLS = "android.permission.MANAGE_ONGOING_CALLS";
+    field public static final String MANAGE_OWN_CALLS = "android.permission.MANAGE_OWN_CALLS";
+    field public static final String MASTER_CLEAR = "android.permission.MASTER_CLEAR";
+    field public static final String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL";
+    field public static final String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS";
+    field public static final String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE";
+    field public static final String MOUNT_FORMAT_FILESYSTEMS = "android.permission.MOUNT_FORMAT_FILESYSTEMS";
+    field public static final String MOUNT_UNMOUNT_FILESYSTEMS = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS";
+    field public static final String NFC = "android.permission.NFC";
+    field public static final String NFC_PREFERRED_PAYMENT_INFO = "android.permission.NFC_PREFERRED_PAYMENT_INFO";
+    field public static final String NFC_TRANSACTION_EVENT = "android.permission.NFC_TRANSACTION_EVENT";
+    field public static final String PACKAGE_USAGE_STATS = "android.permission.PACKAGE_USAGE_STATS";
+    field @Deprecated public static final String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY";
+    field @Deprecated public static final String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS";
+    field public static final String QUERY_ALL_PACKAGES = "android.permission.QUERY_ALL_PACKAGES";
+    field public static final String READ_CALENDAR = "android.permission.READ_CALENDAR";
+    field public static final String READ_CALL_LOG = "android.permission.READ_CALL_LOG";
+    field public static final String READ_CONTACTS = "android.permission.READ_CONTACTS";
+    field public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE";
+    field @Deprecated public static final String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE";
+    field public static final String READ_LOGS = "android.permission.READ_LOGS";
+    field public static final String READ_PHONE_NUMBERS = "android.permission.READ_PHONE_NUMBERS";
+    field public static final String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
+    field public static final String READ_PRECISE_PHONE_STATE = "android.permission.READ_PRECISE_PHONE_STATE";
+    field public static final String READ_SMS = "android.permission.READ_SMS";
+    field public static final String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS";
+    field public static final String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS";
+    field public static final String READ_VOICEMAIL = "com.android.voicemail.permission.READ_VOICEMAIL";
+    field public static final String REBOOT = "android.permission.REBOOT";
+    field public static final String RECEIVE_BOOT_COMPLETED = "android.permission.RECEIVE_BOOT_COMPLETED";
+    field public static final String RECEIVE_MMS = "android.permission.RECEIVE_MMS";
+    field public static final String RECEIVE_SMS = "android.permission.RECEIVE_SMS";
+    field public static final String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH";
+    field public static final String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
+    field public static final String REORDER_TASKS = "android.permission.REORDER_TASKS";
+    field public static final String REQUEST_COMPANION_PROFILE_WATCH = "android.permission.REQUEST_COMPANION_PROFILE_WATCH";
+    field public static final String REQUEST_COMPANION_RUN_IN_BACKGROUND = "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND";
+    field public static final String REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND = "android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND";
+    field public static final String REQUEST_COMPANION_USE_DATA_IN_BACKGROUND = "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND";
+    field public static final String REQUEST_DELETE_PACKAGES = "android.permission.REQUEST_DELETE_PACKAGES";
+    field public static final String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
+    field public static final String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
+    field public static final String REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE = "android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE";
+    field public static final String REQUEST_PASSWORD_COMPLEXITY = "android.permission.REQUEST_PASSWORD_COMPLEXITY";
+    field @Deprecated public static final String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
+    field public static final String SCHEDULE_EXACT_ALARM = "android.permission.SCHEDULE_EXACT_ALARM";
+    field public static final String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
+    field public static final String SEND_SMS = "android.permission.SEND_SMS";
+    field public static final String SET_ALARM = "com.android.alarm.permission.SET_ALARM";
+    field public static final String SET_ALWAYS_FINISH = "android.permission.SET_ALWAYS_FINISH";
+    field public static final String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE";
+    field public static final String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP";
+    field @Deprecated public static final String SET_PREFERRED_APPLICATIONS = "android.permission.SET_PREFERRED_APPLICATIONS";
+    field public static final String SET_PROCESS_LIMIT = "android.permission.SET_PROCESS_LIMIT";
+    field public static final String SET_TIME = "android.permission.SET_TIME";
+    field public static final String SET_TIME_ZONE = "android.permission.SET_TIME_ZONE";
+    field public static final String SET_WALLPAPER = "android.permission.SET_WALLPAPER";
+    field public static final String SET_WALLPAPER_HINTS = "android.permission.SET_WALLPAPER_HINTS";
+    field public static final String SIGNAL_PERSISTENT_PROCESSES = "android.permission.SIGNAL_PERSISTENT_PROCESSES";
+    field @Deprecated public static final String SMS_FINANCIAL_TRANSACTIONS = "android.permission.SMS_FINANCIAL_TRANSACTIONS";
+    field public static final String START_FOREGROUND_SERVICES_FROM_BACKGROUND = "android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND";
+    field public static final String START_VIEW_PERMISSION_USAGE = "android.permission.START_VIEW_PERMISSION_USAGE";
+    field public static final String STATUS_BAR = "android.permission.STATUS_BAR";
+    field public static final String SYSTEM_ALERT_WINDOW = "android.permission.SYSTEM_ALERT_WINDOW";
+    field public static final String TRANSMIT_IR = "android.permission.TRANSMIT_IR";
+    field public static final String UNINSTALL_SHORTCUT = "com.android.launcher.permission.UNINSTALL_SHORTCUT";
+    field public static final String UPDATE_DEVICE_STATS = "android.permission.UPDATE_DEVICE_STATS";
+    field public static final String UPDATE_PACKAGES_WITHOUT_USER_ACTION = "android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION";
+    field public static final String USE_BIOMETRIC = "android.permission.USE_BIOMETRIC";
+    field @Deprecated public static final String USE_FINGERPRINT = "android.permission.USE_FINGERPRINT";
+    field public static final String USE_FULL_SCREEN_INTENT = "android.permission.USE_FULL_SCREEN_INTENT";
+    field public static final String USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER = "android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER";
+    field public static final String USE_SIP = "android.permission.USE_SIP";
+    field public static final String UWB_RANGING = "android.permission.UWB_RANGING";
+    field public static final String VIBRATE = "android.permission.VIBRATE";
+    field public static final String WAKE_LOCK = "android.permission.WAKE_LOCK";
+    field public static final String WRITE_APN_SETTINGS = "android.permission.WRITE_APN_SETTINGS";
+    field public static final String WRITE_CALENDAR = "android.permission.WRITE_CALENDAR";
+    field public static final String WRITE_CALL_LOG = "android.permission.WRITE_CALL_LOG";
+    field public static final String WRITE_CONTACTS = "android.permission.WRITE_CONTACTS";
+    field public static final String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE";
+    field public static final String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES";
+    field public static final String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS";
+    field public static final String WRITE_SETTINGS = "android.permission.WRITE_SETTINGS";
+    field public static final String WRITE_SYNC_SETTINGS = "android.permission.WRITE_SYNC_SETTINGS";
+    field public static final String WRITE_VOICEMAIL = "com.android.voicemail.permission.WRITE_VOICEMAIL";
+  }
+
+  public static final class Manifest.permission_group {
+    ctor public Manifest.permission_group();
+    field public static final String ACTIVITY_RECOGNITION = "android.permission-group.ACTIVITY_RECOGNITION";
+    field public static final String CALENDAR = "android.permission-group.CALENDAR";
+    field public static final String CALL_LOG = "android.permission-group.CALL_LOG";
+    field public static final String CAMERA = "android.permission-group.CAMERA";
+    field public static final String CONTACTS = "android.permission-group.CONTACTS";
+    field public static final String LOCATION = "android.permission-group.LOCATION";
+    field public static final String MICROPHONE = "android.permission-group.MICROPHONE";
+    field public static final String NEARBY_DEVICES = "android.permission-group.NEARBY_DEVICES";
+    field public static final String PHONE = "android.permission-group.PHONE";
+    field public static final String SENSORS = "android.permission-group.SENSORS";
+    field public static final String SMS = "android.permission-group.SMS";
+    field public static final String STORAGE = "android.permission-group.STORAGE";
+  }
+
+  public final class R {
+    ctor public R();
+  }
+
+  public static final class R.anim {
+    ctor public R.anim();
+    field public static final int accelerate_decelerate_interpolator = 17432580; // 0x10a0004
+    field public static final int accelerate_interpolator = 17432581; // 0x10a0005
+    field public static final int anticipate_interpolator = 17432583; // 0x10a0007
+    field public static final int anticipate_overshoot_interpolator = 17432585; // 0x10a0009
+    field public static final int bounce_interpolator = 17432586; // 0x10a000a
+    field public static final int cycle_interpolator = 17432588; // 0x10a000c
+    field public static final int decelerate_interpolator = 17432582; // 0x10a0006
+    field public static final int fade_in = 17432576; // 0x10a0000
+    field public static final int fade_out = 17432577; // 0x10a0001
+    field public static final int linear_interpolator = 17432587; // 0x10a000b
+    field public static final int overshoot_interpolator = 17432584; // 0x10a0008
+    field public static final int slide_in_left = 17432578; // 0x10a0002
+    field public static final int slide_out_right = 17432579; // 0x10a0003
+  }
+
+  public static final class R.animator {
+    ctor public R.animator();
+    field public static final int fade_in = 17498112; // 0x10b0000
+    field public static final int fade_out = 17498113; // 0x10b0001
+  }
+
+  public static final class R.array {
+    ctor public R.array();
+    field public static final int emailAddressTypes = 17235968; // 0x1070000
+    field public static final int imProtocols = 17235969; // 0x1070001
+    field public static final int organizationTypes = 17235970; // 0x1070002
+    field public static final int phoneTypes = 17235971; // 0x1070003
+    field public static final int postalAddressTypes = 17235972; // 0x1070004
+  }
+
+  public static final class R.attr {
+    ctor public R.attr();
+    field public static final int absListViewStyle = 16842858; // 0x101006a
+    field public static final int accessibilityEventTypes = 16843648; // 0x1010380
+    field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
+    field public static final int accessibilityFlags = 16843652; // 0x1010384
+    field public static final int accessibilityHeading = 16844160; // 0x1010580
+    field public static final int accessibilityLiveRegion = 16843758; // 0x10103ee
+    field public static final int accessibilityPaneTitle = 16844156; // 0x101057c
+    field public static final int accessibilityTraversalAfter = 16843986; // 0x10104d2
+    field public static final int accessibilityTraversalBefore = 16843985; // 0x10104d1
+    field public static final int accountPreferences = 16843423; // 0x101029f
+    field public static final int accountType = 16843407; // 0x101028f
+    field public static final int action = 16842797; // 0x101002d
+    field public static final int actionBarDivider = 16843675; // 0x101039b
+    field public static final int actionBarItemBackground = 16843676; // 0x101039c
+    field public static final int actionBarPopupTheme = 16843917; // 0x101048d
+    field public static final int actionBarSize = 16843499; // 0x10102eb
+    field public static final int actionBarSplitStyle = 16843656; // 0x1010388
+    field public static final int actionBarStyle = 16843470; // 0x10102ce
+    field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
+    field public static final int actionBarTabStyle = 16843507; // 0x10102f3
+    field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
+    field public static final int actionBarTheme = 16843825; // 0x1010431
+    field public static final int actionBarWidgetTheme = 16843671; // 0x1010397
+    field public static final int actionButtonStyle = 16843480; // 0x10102d8
+    field public static final int actionDropDownStyle = 16843479; // 0x10102d7
+    field public static final int actionLayout = 16843515; // 0x10102fb
+    field public static final int actionMenuTextAppearance = 16843616; // 0x1010360
+    field public static final int actionMenuTextColor = 16843617; // 0x1010361
+    field public static final int actionModeBackground = 16843483; // 0x10102db
+    field public static final int actionModeCloseButtonStyle = 16843511; // 0x10102f7
+    field public static final int actionModeCloseDrawable = 16843484; // 0x10102dc
+    field public static final int actionModeCopyDrawable = 16843538; // 0x1010312
+    field public static final int actionModeCutDrawable = 16843537; // 0x1010311
+    field public static final int actionModeFindDrawable = 16843898; // 0x101047a
+    field public static final int actionModePasteDrawable = 16843539; // 0x1010313
+    field public static final int actionModeSelectAllDrawable = 16843646; // 0x101037e
+    field public static final int actionModeShareDrawable = 16843897; // 0x1010479
+    field public static final int actionModeSplitBackground = 16843677; // 0x101039d
+    field public static final int actionModeStyle = 16843668; // 0x1010394
+    field public static final int actionModeWebSearchDrawable = 16843899; // 0x101047b
+    field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6
+    field public static final int actionOverflowMenuStyle = 16843844; // 0x1010444
+    field public static final int actionProviderClass = 16843657; // 0x1010389
+    field public static final int actionViewClass = 16843516; // 0x10102fc
+    field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd
+    field public static final int activityCloseEnterAnimation = 16842938; // 0x10100ba
+    field public static final int activityCloseExitAnimation = 16842939; // 0x10100bb
+    field public static final int activityOpenEnterAnimation = 16842936; // 0x10100b8
+    field public static final int activityOpenExitAnimation = 16842937; // 0x10100b9
+    field public static final int addPrintersActivity = 16843750; // 0x10103e6
+    field public static final int addStatesFromChildren = 16842992; // 0x10100f0
+    field public static final int adjustViewBounds = 16843038; // 0x101011e
+    field public static final int advancedPrintOptionsActivity = 16843761; // 0x10103f1
+    field public static final int alertDialogIcon = 16843605; // 0x1010355
+    field public static final int alertDialogStyle = 16842845; // 0x101005d
+    field public static final int alertDialogTheme = 16843529; // 0x1010309
+    field public static final int alignmentMode = 16843642; // 0x101037a
+    field public static final int allContactsName = 16843468; // 0x10102cc
+    field public static final int allowAudioPlaybackCapture = 16844289; // 0x1010601
+    field public static final int allowBackup = 16843392; // 0x1010280
+    field public static final int allowClearUserData = 16842757; // 0x1010005
+    field public static final int allowClickWhenDisabled = 16844312; // 0x1010618
+    field public static final int allowEmbedded = 16843765; // 0x10103f5
+    field public static final int allowNativeHeapPointerTagging = 16844306; // 0x1010612
+    field public static final int allowParallelSyncs = 16843570; // 0x1010332
+    field public static final int allowSingleTap = 16843353; // 0x1010259
+    field public static final int allowTaskReparenting = 16843268; // 0x1010204
+    field public static final int allowUndo = 16843999; // 0x10104df
+    field public static final int alpha = 16843551; // 0x101031f
+    field public static final int alphabeticModifiers = 16844110; // 0x101054e
+    field public static final int alphabeticShortcut = 16843235; // 0x10101e3
+    field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
+    field public static final int alwaysRetainTaskState = 16843267; // 0x1010203
+    field @Deprecated public static final int amPmBackgroundColor = 16843941; // 0x10104a5
+    field @Deprecated public static final int amPmTextColor = 16843940; // 0x10104a4
+    field public static final int ambientShadowAlpha = 16843966; // 0x10104be
+    field public static final int angle = 16843168; // 0x10101a0
+    field public static final int animateFirstView = 16843477; // 0x10102d5
+    field public static final int animateLayoutChanges = 16843506; // 0x10102f2
+    field public static final int animateOnClick = 16843356; // 0x101025c
+    field public static final int animatedImageDrawable = 16844298; // 0x101060a
+    field public static final int animation = 16843213; // 0x10101cd
+    field public static final int animationCache = 16842989; // 0x10100ed
+    field public static final int animationDuration = 16843026; // 0x1010112
+    field public static final int animationOrder = 16843214; // 0x10101ce
+    field @Deprecated public static final int animationResolution = 16843546; // 0x101031a
+    field public static final int antialias = 16843034; // 0x101011a
+    field @Deprecated public static final int anyDensity = 16843372; // 0x101026c
+    field public static final int apduServiceBanner = 16843757; // 0x10103ed
+    field public static final int apiKey = 16843281; // 0x1010211
+    field public static final int appCategory = 16844101; // 0x1010545
+    field public static final int appComponentFactory = 16844154; // 0x101057a
+    field public static final int attributionTags = 16844354; // 0x1010642
+    field public static final int attributionsAreUserVisible = 16844363; // 0x101064b
+    field public static final int author = 16843444; // 0x10102b4
+    field public static final int authorities = 16842776; // 0x1010018
+    field public static final int autoAdvanceViewId = 16843535; // 0x101030f
+    field public static final int autoCompleteTextViewStyle = 16842859; // 0x101006b
+    field public static final int autoLink = 16842928; // 0x10100b0
+    field public static final int autoMirrored = 16843754; // 0x10103ea
+    field public static final int autoRemoveFromRecents = 16843847; // 0x1010447
+    field public static final int autoRevokePermissions = 16844307; // 0x1010613
+    field public static final int autoSizeMaxTextSize = 16844102; // 0x1010546
+    field public static final int autoSizeMinTextSize = 16844088; // 0x1010538
+    field public static final int autoSizePresetSizes = 16844087; // 0x1010537
+    field public static final int autoSizeStepGranularity = 16844086; // 0x1010536
+    field public static final int autoSizeTextType = 16844085; // 0x1010535
+    field public static final int autoStart = 16843445; // 0x10102b5
+    field @Deprecated public static final int autoText = 16843114; // 0x101016a
+    field public static final int autoUrlDetect = 16843404; // 0x101028c
+    field public static final int autoVerify = 16844014; // 0x10104ee
+    field public static final int autofillHints = 16844118; // 0x1010556
+    field public static final int autofilledHighlight = 16844136; // 0x1010568
+    field public static final int background = 16842964; // 0x10100d4
+    field public static final int backgroundDimAmount = 16842802; // 0x1010032
+    field public static final int backgroundDimEnabled = 16843295; // 0x101021f
+    field public static final int backgroundSplit = 16843659; // 0x101038b
+    field public static final int backgroundStacked = 16843658; // 0x101038a
+    field public static final int backgroundTint = 16843883; // 0x101046b
+    field public static final int backgroundTintMode = 16843884; // 0x101046c
+    field public static final int backupAgent = 16843391; // 0x101027f
+    field public static final int backupInForeground = 16844058; // 0x101051a
+    field public static final int banner = 16843762; // 0x10103f2
+    field public static final int baseline = 16843548; // 0x101031c
+    field public static final int baselineAlignBottom = 16843042; // 0x1010122
+    field public static final int baselineAligned = 16843046; // 0x1010126
+    field public static final int baselineAlignedChildIndex = 16843047; // 0x1010127
+    field public static final int bitmap = 16844054; // 0x1010516
+    field public static final int borderlessButtonStyle = 16843563; // 0x101032b
+    field public static final int bottom = 16843184; // 0x10101b0
+    field public static final int bottomBright = 16842957; // 0x10100cd
+    field public static final int bottomDark = 16842953; // 0x10100c9
+    field public static final int bottomLeftRadius = 16843179; // 0x10101ab
+    field public static final int bottomMedium = 16842958; // 0x10100ce
+    field public static final int bottomOffset = 16843351; // 0x1010257
+    field public static final int bottomRightRadius = 16843180; // 0x10101ac
+    field public static final int breadCrumbShortTitle = 16843524; // 0x1010304
+    field public static final int breadCrumbTitle = 16843523; // 0x1010303
+    field public static final int breakStrategy = 16843997; // 0x10104dd
+    field public static final int bufferType = 16843086; // 0x101014e
+    field public static final int button = 16843015; // 0x1010107
+    field public static final int buttonBarButtonStyle = 16843567; // 0x101032f
+    field public static final int buttonBarNegativeButtonStyle = 16843915; // 0x101048b
+    field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a
+    field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489
+    field public static final int buttonBarStyle = 16843566; // 0x101032e
+    field public static final int buttonCornerRadius = 16844149; // 0x1010575
+    field public static final int buttonGravity = 16844030; // 0x10104fe
+    field public static final int buttonStyle = 16842824; // 0x1010048
+    field public static final int buttonStyleInset = 16842826; // 0x101004a
+    field public static final int buttonStyleSmall = 16842825; // 0x1010049
+    field public static final int buttonStyleToggle = 16842827; // 0x101004b
+    field public static final int buttonTint = 16843887; // 0x101046f
+    field public static final int buttonTintMode = 16843888; // 0x1010470
+    field public static final int cacheColorHint = 16843009; // 0x1010101
+    field public static final int calendarTextColor = 16843931; // 0x101049b
+    field public static final int calendarViewShown = 16843596; // 0x101034c
+    field public static final int calendarViewStyle = 16843613; // 0x101035d
+    field public static final int canControlMagnification = 16844039; // 0x1010507
+    field public static final int canPauseRecording = 16844314; // 0x101061a
+    field public static final int canPerformGestures = 16844045; // 0x101050d
+    field public static final int canRecord = 16844060; // 0x101051c
+    field @Deprecated public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
+    field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9
+    field public static final int canRequestFingerprintGestures = 16844109; // 0x101054d
+    field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7
+    field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
+    field public static final int canTakeScreenshot = 16844303; // 0x101060f
+    field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230
+    field public static final int cantSaveState = 16844142; // 0x101056e
+    field @Deprecated public static final int capitalize = 16843113; // 0x1010169
+    field public static final int category = 16843752; // 0x10103e8
+    field public static final int centerBright = 16842956; // 0x10100cc
+    field public static final int centerColor = 16843275; // 0x101020b
+    field public static final int centerDark = 16842952; // 0x10100c8
+    field public static final int centerMedium = 16842959; // 0x10100cf
+    field public static final int centerX = 16843170; // 0x10101a2
+    field public static final int centerY = 16843171; // 0x10101a3
+    field public static final int certDigest = 16844104; // 0x1010548
+    field public static final int checkBoxPreferenceStyle = 16842895; // 0x101008f
+    field public static final int checkMark = 16843016; // 0x1010108
+    field public static final int checkMarkTint = 16843943; // 0x10104a7
+    field public static final int checkMarkTintMode = 16843944; // 0x10104a8
+    field public static final int checkable = 16843237; // 0x10101e5
+    field public static final int checkableBehavior = 16843232; // 0x10101e0
+    field public static final int checkboxStyle = 16842860; // 0x101006c
+    field public static final int checked = 16843014; // 0x1010106
+    field public static final int checkedButton = 16843080; // 0x1010148
+    field public static final int checkedTextViewStyle = 16843720; // 0x10103c8
+    field public static final int childDivider = 16843025; // 0x1010111
+    field public static final int childIndicator = 16843020; // 0x101010c
+    field public static final int childIndicatorEnd = 16843732; // 0x10103d4
+    field public static final int childIndicatorLeft = 16843023; // 0x101010f
+    field public static final int childIndicatorRight = 16843024; // 0x1010110
+    field public static final int childIndicatorStart = 16843731; // 0x10103d3
+    field public static final int choiceMode = 16843051; // 0x101012b
+    field public static final int classLoader = 16844139; // 0x101056b
+    field public static final int clearTaskOnLaunch = 16842773; // 0x1010015
+    field public static final int clickable = 16842981; // 0x10100e5
+    field public static final int clipChildren = 16842986; // 0x10100ea
+    field public static final int clipOrientation = 16843274; // 0x101020a
+    field public static final int clipToOutline = 16844328; // 0x1010628
+    field public static final int clipToPadding = 16842987; // 0x10100eb
+    field public static final int closeIcon = 16843905; // 0x1010481
+    field @Deprecated public static final int codes = 16843330; // 0x1010242
+    field public static final int collapseColumns = 16843083; // 0x101014b
+    field public static final int collapseContentDescription = 16843984; // 0x10104d0
+    field public static final int collapseIcon = 16844031; // 0x10104ff
+    field public static final int color = 16843173; // 0x10101a5
+    field public static final int colorAccent = 16843829; // 0x1010435
+    field public static final int colorActivatedHighlight = 16843664; // 0x1010390
+    field public static final int colorBackground = 16842801; // 0x1010031
+    field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
+    field public static final int colorBackgroundFloating = 16844002; // 0x10104e2
+    field public static final int colorButtonNormal = 16843819; // 0x101042b
+    field public static final int colorControlActivated = 16843818; // 0x101042a
+    field public static final int colorControlHighlight = 16843820; // 0x101042c
+    field public static final int colorControlNormal = 16843817; // 0x1010429
+    field public static final int colorEdgeEffect = 16843982; // 0x10104ce
+    field public static final int colorError = 16844099; // 0x1010543
+    field public static final int colorFocusedHighlight = 16843663; // 0x101038f
+    field public static final int colorForeground = 16842800; // 0x1010030
+    field public static final int colorForegroundInverse = 16843270; // 0x1010206
+    field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
+    field public static final int colorMode = 16844106; // 0x101054a
+    field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
+    field public static final int colorPressedHighlight = 16843661; // 0x101038d
+    field public static final int colorPrimary = 16843827; // 0x1010433
+    field public static final int colorPrimaryDark = 16843828; // 0x1010434
+    field public static final int colorSecondary = 16844080; // 0x1010530
+    field public static final int columnCount = 16843639; // 0x1010377
+    field public static final int columnDelay = 16843215; // 0x10101cf
+    field public static final int columnOrderPreserved = 16843640; // 0x1010378
+    field public static final int columnWidth = 16843031; // 0x1010117
+    field public static final int commitIcon = 16843909; // 0x1010485
+    field public static final int compatibleWidthLimitDp = 16843621; // 0x1010365
+    field public static final int completionHint = 16843122; // 0x1010172
+    field public static final int completionHintView = 16843123; // 0x1010173
+    field public static final int completionThreshold = 16843124; // 0x1010174
+    field public static final int configChanges = 16842783; // 0x101001f
+    field public static final int configure = 16843357; // 0x101025d
+    field public static final int constantSize = 16843158; // 0x1010196
+    field public static final int content = 16843355; // 0x101025b
+    field public static final int contentAgeHint = 16843961; // 0x10104b9
+    field public static final int contentAuthority = 16843408; // 0x1010290
+    field public static final int contentDescription = 16843379; // 0x1010273
+    field public static final int contentInsetEnd = 16843860; // 0x1010454
+    field public static final int contentInsetEndWithActions = 16844067; // 0x1010523
+    field public static final int contentInsetLeft = 16843861; // 0x1010455
+    field public static final int contentInsetRight = 16843862; // 0x1010456
+    field public static final int contentInsetStart = 16843859; // 0x1010453
+    field public static final int contentInsetStartWithNavigation = 16844066; // 0x1010522
+    field public static final int contextClickable = 16844007; // 0x10104e7
+    field public static final int contextDescription = 16844078; // 0x101052e
+    field public static final int contextPopupMenuStyle = 16844033; // 0x1010501
+    field public static final int contextUri = 16844077; // 0x101052d
+    field public static final int controlX1 = 16843772; // 0x10103fc
+    field public static final int controlX2 = 16843774; // 0x10103fe
+    field public static final int controlY1 = 16843773; // 0x10103fd
+    field public static final int controlY2 = 16843775; // 0x10103ff
+    field public static final int countDown = 16844059; // 0x101051b
+    field public static final int country = 16843962; // 0x10104ba
+    field public static final int cropToPadding = 16843043; // 0x1010123
+    field public static final int crossProfile = 16844302; // 0x101060e
+    field public static final int cursorVisible = 16843090; // 0x1010152
+    field public static final int customNavigationLayout = 16843474; // 0x10102d2
+    field public static final int customTokens = 16843579; // 0x101033b
+    field public static final int cycles = 16843220; // 0x10101d4
+    field public static final int dashGap = 16843175; // 0x10101a7
+    field public static final int dashWidth = 16843174; // 0x10101a6
+    field public static final int data = 16842798; // 0x101002e
+    field public static final int dataExtractionRules = 16844350; // 0x101063e
+    field public static final int datePickerDialogTheme = 16843948; // 0x10104ac
+    field public static final int datePickerMode = 16843955; // 0x10104b3
+    field public static final int datePickerStyle = 16843612; // 0x101035c
+    field public static final int dateTextAppearance = 16843593; // 0x1010349
+    field @Deprecated public static final int dayOfWeekBackground = 16843924; // 0x1010494
+    field @Deprecated public static final int dayOfWeekTextAppearance = 16843925; // 0x1010495
+    field public static final int debuggable = 16842767; // 0x101000f
+    field public static final int defaultFocusHighlightEnabled = 16844130; // 0x1010562
+    field public static final int defaultHeight = 16844021; // 0x10104f5
+    field public static final int defaultToDeviceProtectedStorage = 16844036; // 0x1010504
+    field public static final int defaultValue = 16843245; // 0x10101ed
+    field public static final int defaultWidth = 16844020; // 0x10104f4
+    field public static final int delay = 16843212; // 0x10101cc
+    field public static final int dependency = 16843244; // 0x10101ec
+    field public static final int descendantFocusability = 16842993; // 0x10100f1
+    field public static final int description = 16842784; // 0x1010020
+    field public static final int detachWallpaper = 16843430; // 0x10102a6
+    field public static final int detailColumn = 16843427; // 0x10102a3
+    field public static final int detailSocialSummary = 16843428; // 0x10102a4
+    field public static final int detailsElementBackground = 16843598; // 0x101034e
+    field public static final int dial = 16843010; // 0x1010102
+    field public static final int dialTint = 16844342; // 0x1010636
+    field public static final int dialTintMode = 16844343; // 0x1010637
+    field public static final int dialogCornerRadius = 16844145; // 0x1010571
+    field public static final int dialogIcon = 16843252; // 0x10101f4
+    field public static final int dialogLayout = 16843255; // 0x10101f7
+    field public static final int dialogMessage = 16843251; // 0x10101f3
+    field public static final int dialogPreferenceStyle = 16842897; // 0x1010091
+    field public static final int dialogPreferredPadding = 16843987; // 0x10104d3
+    field public static final int dialogTheme = 16843528; // 0x1010308
+    field public static final int dialogTitle = 16843250; // 0x10101f2
+    field public static final int digits = 16843110; // 0x1010166
+    field public static final int directBootAware = 16844037; // 0x1010505
+    field public static final int direction = 16843217; // 0x10101d1
+    field @Deprecated public static final int directionDescriptions = 16843681; // 0x10103a1
+    field public static final int directionPriority = 16843218; // 0x10101d2
+    field public static final int disableDependentsState = 16843249; // 0x10101f1
+    field public static final int disabledAlpha = 16842803; // 0x1010033
+    field public static final int displayOptions = 16843472; // 0x10102d0
+    field public static final int dither = 16843036; // 0x101011c
+    field public static final int divider = 16843049; // 0x1010129
+    field public static final int dividerHeight = 16843050; // 0x101012a
+    field public static final int dividerHorizontal = 16843564; // 0x101032c
+    field public static final int dividerPadding = 16843562; // 0x101032a
+    field public static final int dividerVertical = 16843530; // 0x101030a
+    field public static final int documentLaunchMode = 16843845; // 0x1010445
+    field public static final int drawSelectorOnTop = 16843004; // 0x10100fc
+    field public static final int drawable = 16843161; // 0x1010199
+    field public static final int drawableBottom = 16843118; // 0x101016e
+    field public static final int drawableEnd = 16843667; // 0x1010393
+    field public static final int drawableLeft = 16843119; // 0x101016f
+    field public static final int drawablePadding = 16843121; // 0x1010171
+    field public static final int drawableRight = 16843120; // 0x1010170
+    field public static final int drawableStart = 16843666; // 0x1010392
+    field public static final int drawableTint = 16843990; // 0x10104d6
+    field public static final int drawableTintMode = 16843991; // 0x10104d7
+    field public static final int drawableTop = 16843117; // 0x101016d
+    field public static final int drawingCacheQuality = 16842984; // 0x10100e8
+    field public static final int dropDownAnchor = 16843363; // 0x1010263
+    field public static final int dropDownHeight = 16843395; // 0x1010283
+    field public static final int dropDownHintAppearance = 16842888; // 0x1010088
+    field public static final int dropDownHorizontalOffset = 16843436; // 0x10102ac
+    field public static final int dropDownItemStyle = 16842886; // 0x1010086
+    field public static final int dropDownListViewStyle = 16842861; // 0x101006d
+    field public static final int dropDownSelector = 16843125; // 0x1010175
+    field public static final int dropDownSpinnerStyle = 16843478; // 0x10102d6
+    field public static final int dropDownVerticalOffset = 16843437; // 0x10102ad
+    field public static final int dropDownWidth = 16843362; // 0x1010262
+    field public static final int duplicateParentState = 16842985; // 0x10100e9
+    field public static final int duration = 16843160; // 0x1010198
+    field public static final int editTextBackground = 16843602; // 0x1010352
+    field public static final int editTextColor = 16843601; // 0x1010351
+    field public static final int editTextPreferenceStyle = 16842898; // 0x1010092
+    field public static final int editTextStyle = 16842862; // 0x101006e
+    field @Deprecated public static final int editable = 16843115; // 0x101016b
+    field public static final int editorExtras = 16843300; // 0x1010224
+    field public static final int effectColor = 16844361; // 0x1010649
+    field public static final int elegantTextHeight = 16843869; // 0x101045d
+    field public static final int elevation = 16843840; // 0x1010440
+    field public static final int ellipsize = 16842923; // 0x10100ab
+    field public static final int ems = 16843096; // 0x1010158
+    field public static final int enableVrMode = 16844069; // 0x1010525
+    field public static final int enabled = 16842766; // 0x101000e
+    field public static final int end = 16843996; // 0x10104dc
+    field public static final int endColor = 16843166; // 0x101019e
+    field public static final int endX = 16844050; // 0x1010512
+    field public static final int endY = 16844051; // 0x1010513
+    field @Deprecated public static final int endYear = 16843133; // 0x101017d
+    field public static final int enforceNavigationBarContrast = 16844293; // 0x1010605
+    field public static final int enforceStatusBarContrast = 16844292; // 0x1010604
+    field public static final int enterFadeDuration = 16843532; // 0x101030c
+    field public static final int entries = 16842930; // 0x10100b2
+    field public static final int entryValues = 16843256; // 0x10101f8
+    field public static final int eventsInterceptionEnabled = 16843389; // 0x101027d
+    field public static final int excludeClass = 16843842; // 0x1010442
+    field public static final int excludeFromRecents = 16842775; // 0x1010017
+    field public static final int excludeId = 16843841; // 0x1010441
+    field public static final int excludeName = 16843854; // 0x101044e
+    field public static final int exitFadeDuration = 16843533; // 0x101030d
+    field public static final int expandableListPreferredChildIndicatorLeft = 16842834; // 0x1010052
+    field public static final int expandableListPreferredChildIndicatorRight = 16842835; // 0x1010053
+    field public static final int expandableListPreferredChildPaddingLeft = 16842831; // 0x101004f
+    field public static final int expandableListPreferredItemIndicatorLeft = 16842832; // 0x1010050
+    field public static final int expandableListPreferredItemIndicatorRight = 16842833; // 0x1010051
+    field public static final int expandableListPreferredItemPaddingLeft = 16842830; // 0x101004e
+    field public static final int expandableListViewStyle = 16842863; // 0x101006f
+    field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6
+    field public static final int exported = 16842768; // 0x1010010
+    field public static final int externalService = 16844046; // 0x101050e
+    field public static final int extraTension = 16843371; // 0x101026b
+    field public static final int extractNativeLibs = 16844010; // 0x10104ea
+    field public static final int factor = 16843219; // 0x10101d3
+    field public static final int fadeDuration = 16843384; // 0x1010278
+    field public static final int fadeEnabled = 16843390; // 0x101027e
+    field public static final int fadeOffset = 16843383; // 0x1010277
+    field public static final int fadeScrollbars = 16843434; // 0x10102aa
+    field public static final int fadingEdge = 16842975; // 0x10100df
+    field public static final int fadingEdgeLength = 16842976; // 0x10100e0
+    field public static final int fadingMode = 16843745; // 0x10103e1
+    field public static final int fallbackLineSpacing = 16844155; // 0x101057b
+    field public static final int fastScrollAlwaysVisible = 16843573; // 0x1010335
+    field public static final int fastScrollEnabled = 16843302; // 0x1010226
+    field public static final int fastScrollOverlayPosition = 16843578; // 0x101033a
+    field public static final int fastScrollPreviewBackgroundLeft = 16843575; // 0x1010337
+    field public static final int fastScrollPreviewBackgroundRight = 16843576; // 0x1010338
+    field public static final int fastScrollStyle = 16843767; // 0x10103f7
+    field public static final int fastScrollTextColor = 16843609; // 0x1010359
+    field public static final int fastScrollThumbDrawable = 16843574; // 0x1010336
+    field public static final int fastScrollTrackDrawable = 16843577; // 0x1010339
+    field public static final int fillAfter = 16843197; // 0x10101bd
+    field public static final int fillAlpha = 16843980; // 0x10104cc
+    field public static final int fillBefore = 16843196; // 0x10101bc
+    field public static final int fillColor = 16843780; // 0x1010404
+    field public static final int fillEnabled = 16843343; // 0x101024f
+    field public static final int fillType = 16844062; // 0x101051e
+    field public static final int fillViewport = 16843130; // 0x101017a
+    field public static final int filter = 16843035; // 0x101011b
+    field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4
+    field public static final int fingerprintAuthDrawable = 16844008; // 0x10104e8
+    field public static final int finishOnCloseSystemDialogs = 16843431; // 0x10102a7
+    field public static final int finishOnTaskLaunch = 16842772; // 0x1010014
+    field public static final int firstBaselineToTopHeight = 16844157; // 0x101057d
+    field public static final int firstDayOfWeek = 16843581; // 0x101033d
+    field public static final int fitsSystemWindows = 16842973; // 0x10100dd
+    field public static final int flipInterval = 16843129; // 0x1010179
+    field public static final int focusable = 16842970; // 0x10100da
+    field public static final int focusableInTouchMode = 16842971; // 0x10100db
+    field public static final int focusedByDefault = 16844100; // 0x1010544
+    field @Deprecated public static final int focusedMonthDateColor = 16843587; // 0x1010343
+    field public static final int font = 16844082; // 0x1010532
+    field public static final int fontFamily = 16843692; // 0x10103ac
+    field public static final int fontFeatureSettings = 16843959; // 0x10104b7
+    field @Deprecated public static final int fontProviderAuthority = 16844112; // 0x1010550
+    field @Deprecated public static final int fontProviderCerts = 16844125; // 0x101055d
+    field @Deprecated public static final int fontProviderPackage = 16844119; // 0x1010557
+    field @Deprecated public static final int fontProviderQuery = 16844113; // 0x1010551
+    field public static final int fontProviderSystemFontFamily = 16844322; // 0x1010622
+    field public static final int fontStyle = 16844095; // 0x101053f
+    field public static final int fontVariationSettings = 16844144; // 0x1010570
+    field public static final int fontWeight = 16844083; // 0x1010533
+    field public static final int footerDividersEnabled = 16843311; // 0x101022f
+    field public static final int forceDarkAllowed = 16844172; // 0x101058c
+    field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521
+    field public static final int forceQueryable = 16844296; // 0x1010608
+    field public static final int forceUriPermissions = 16844191; // 0x101059f
+    field public static final int foreground = 16843017; // 0x1010109
+    field public static final int foregroundGravity = 16843264; // 0x1010200
+    field public static final int foregroundServiceType = 16844185; // 0x1010599
+    field public static final int foregroundTint = 16843885; // 0x101046d
+    field public static final int foregroundTintMode = 16843886; // 0x101046e
+    field public static final int format = 16843013; // 0x1010105
+    field public static final int format12Hour = 16843722; // 0x10103ca
+    field public static final int format24Hour = 16843723; // 0x10103cb
+    field public static final int fraction = 16843992; // 0x10104d8
+    field public static final int fragment = 16843491; // 0x10102e3
+    field public static final int fragmentAllowEnterTransitionOverlap = 16843976; // 0x10104c8
+    field public static final int fragmentAllowReturnTransitionOverlap = 16843977; // 0x10104c9
+    field public static final int fragmentCloseEnterAnimation = 16843495; // 0x10102e7
+    field public static final int fragmentCloseExitAnimation = 16843496; // 0x10102e8
+    field public static final int fragmentEnterTransition = 16843971; // 0x10104c3
+    field public static final int fragmentExitTransition = 16843970; // 0x10104c2
+    field public static final int fragmentFadeEnterAnimation = 16843497; // 0x10102e9
+    field public static final int fragmentFadeExitAnimation = 16843498; // 0x10102ea
+    field public static final int fragmentOpenEnterAnimation = 16843493; // 0x10102e5
+    field public static final int fragmentOpenExitAnimation = 16843494; // 0x10102e6
+    field public static final int fragmentReenterTransition = 16843975; // 0x10104c7
+    field public static final int fragmentReturnTransition = 16843973; // 0x10104c5
+    field public static final int fragmentSharedElementEnterTransition = 16843972; // 0x10104c4
+    field public static final int fragmentSharedElementReturnTransition = 16843974; // 0x10104c6
+    field public static final int freezesText = 16843116; // 0x101016c
+    field public static final int fromAlpha = 16843210; // 0x10101ca
+    field public static final int fromDegrees = 16843187; // 0x10101b3
+    field public static final int fromId = 16843850; // 0x101044a
+    field public static final int fromScene = 16843741; // 0x10103dd
+    field public static final int fromXDelta = 16843206; // 0x10101c6
+    field public static final int fromXScale = 16843202; // 0x10101c2
+    field public static final int fromYDelta = 16843208; // 0x10101c8
+    field public static final int fromYScale = 16843204; // 0x10101c4
+    field public static final int fullBackupContent = 16844011; // 0x10104eb
+    field public static final int fullBackupOnly = 16843891; // 0x1010473
+    field public static final int fullBright = 16842954; // 0x10100ca
+    field public static final int fullDark = 16842950; // 0x10100c6
+    field public static final int functionalTest = 16842787; // 0x1010023
+    field public static final int galleryItemBackground = 16842828; // 0x101004c
+    field public static final int galleryStyle = 16842864; // 0x1010070
+    field public static final int gestureColor = 16843381; // 0x1010275
+    field public static final int gestureStrokeAngleThreshold = 16843388; // 0x101027c
+    field public static final int gestureStrokeLengthThreshold = 16843386; // 0x101027a
+    field public static final int gestureStrokeSquarenessThreshold = 16843387; // 0x101027b
+    field public static final int gestureStrokeType = 16843385; // 0x1010279
+    field public static final int gestureStrokeWidth = 16843380; // 0x1010274
+    field public static final int glEsVersion = 16843393; // 0x1010281
+    field public static final int goIcon = 16843906; // 0x1010482
+    field public static final int gradientRadius = 16843172; // 0x10101a4
+    field public static final int grantUriPermissions = 16842779; // 0x101001b
+    field public static final int gravity = 16842927; // 0x10100af
+    field public static final int gridViewStyle = 16842865; // 0x1010071
+    field public static final int groupIndicator = 16843019; // 0x101010b
+    field public static final int gwpAsanMode = 16844310; // 0x1010616
+    field public static final int hand_hour = 16843011; // 0x1010103
+    field public static final int hand_hourTint = 16844344; // 0x1010638
+    field public static final int hand_hourTintMode = 16844345; // 0x1010639
+    field public static final int hand_minute = 16843012; // 0x1010104
+    field public static final int hand_minuteTint = 16844346; // 0x101063a
+    field public static final int hand_minuteTintMode = 16844347; // 0x101063b
+    field public static final int hand_second = 16844323; // 0x1010623
+    field public static final int hand_secondTint = 16844348; // 0x101063c
+    field public static final int hand_secondTintMode = 16844349; // 0x101063d
+    field public static final int handle = 16843354; // 0x101025a
+    field public static final int handleProfiling = 16842786; // 0x1010022
+    field public static final int hapticFeedbackEnabled = 16843358; // 0x101025e
+    field public static final int hardwareAccelerated = 16843475; // 0x10102d3
+    field public static final int hasCode = 16842764; // 0x101000c
+    field public static final int hasFragileUserData = 16844186; // 0x101059a
+    field @Deprecated public static final int headerAmPmTextAppearance = 16843936; // 0x10104a0
+    field public static final int headerBackground = 16843055; // 0x101012f
+    field @Deprecated public static final int headerDayOfMonthTextAppearance = 16843927; // 0x1010497
+    field public static final int headerDividersEnabled = 16843310; // 0x101022e
+    field @Deprecated public static final int headerMonthTextAppearance = 16843926; // 0x1010496
+    field @Deprecated public static final int headerTimeTextAppearance = 16843935; // 0x101049f
+    field @Deprecated public static final int headerYearTextAppearance = 16843928; // 0x1010498
+    field public static final int height = 16843093; // 0x1010155
+    field public static final int hideOnContentScroll = 16843843; // 0x1010443
+    field public static final int hint = 16843088; // 0x1010150
+    field public static final int homeAsUpIndicator = 16843531; // 0x101030b
+    field public static final int homeLayout = 16843549; // 0x101031d
+    field public static final int horizontalDivider = 16843053; // 0x101012d
+    field @Deprecated public static final int horizontalGap = 16843327; // 0x101023f
+    field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
+    field public static final int horizontalSpacing = 16843028; // 0x1010114
+    field public static final int host = 16842792; // 0x1010028
+    field public static final int hotSpotX = 16844055; // 0x1010517
+    field public static final int hotSpotY = 16844056; // 0x1010518
+    field public static final int htmlDescription = 16844299; // 0x101060b
+    field public static final int hyphenationFrequency = 16843998; // 0x10104de
+    field public static final int icon = 16842754; // 0x1010002
+    field @Deprecated public static final int iconPreview = 16843337; // 0x1010249
+    field public static final int iconSpaceReserved = 16844129; // 0x1010561
+    field public static final int iconTint = 16844126; // 0x101055e
+    field public static final int iconTintMode = 16844127; // 0x101055f
+    field public static final int iconifiedByDefault = 16843514; // 0x10102fa
+    field public static final int id = 16842960; // 0x10100d0
+    field public static final int identifier = 16844294; // 0x1010606
+    field public static final int ignoreGravity = 16843263; // 0x10101ff
+    field public static final int imageButtonStyle = 16842866; // 0x1010072
+    field public static final int imageWellStyle = 16842867; // 0x1010073
+    field public static final int imeActionId = 16843366; // 0x1010266
+    field public static final int imeActionLabel = 16843365; // 0x1010265
+    field public static final int imeExtractEnterAnimation = 16843368; // 0x1010268
+    field public static final int imeExtractExitAnimation = 16843369; // 0x1010269
+    field public static final int imeFullscreenBackground = 16843308; // 0x101022c
+    field public static final int imeOptions = 16843364; // 0x1010264
+    field public static final int imeSubtypeExtraValue = 16843502; // 0x10102ee
+    field public static final int imeSubtypeLocale = 16843500; // 0x10102ec
+    field public static final int imeSubtypeMode = 16843501; // 0x10102ed
+    field public static final int immersive = 16843456; // 0x10102c0
+    field public static final int importantForAccessibility = 16843690; // 0x10103aa
+    field public static final int importantForAutofill = 16844120; // 0x1010558
+    field public static final int importantForContentCapture = 16844295; // 0x1010607
+    field public static final int inAnimation = 16843127; // 0x1010177
+    field public static final int includeFontPadding = 16843103; // 0x101015f
+    field public static final int includeInGlobalSearch = 16843374; // 0x101026e
+    field public static final int indeterminate = 16843065; // 0x1010139
+    field public static final int indeterminateBehavior = 16843070; // 0x101013e
+    field public static final int indeterminateDrawable = 16843067; // 0x101013b
+    field public static final int indeterminateDuration = 16843069; // 0x101013d
+    field public static final int indeterminateOnly = 16843066; // 0x101013a
+    field public static final int indeterminateProgressStyle = 16843544; // 0x1010318
+    field public static final int indeterminateTint = 16843881; // 0x1010469
+    field public static final int indeterminateTintMode = 16843882; // 0x101046a
+    field public static final int indicatorEnd = 16843730; // 0x10103d2
+    field public static final int indicatorLeft = 16843021; // 0x101010d
+    field public static final int indicatorRight = 16843022; // 0x101010e
+    field public static final int indicatorStart = 16843729; // 0x10103d1
+    field public static final int inflatedId = 16842995; // 0x10100f3
+    field public static final int inheritShowWhenLocked = 16844188; // 0x101059c
+    field public static final int initOrder = 16842778; // 0x101001a
+    field public static final int initialKeyguardLayout = 16843714; // 0x10103c2
+    field public static final int initialLayout = 16843345; // 0x1010251
+    field public static final int innerRadius = 16843359; // 0x101025f
+    field public static final int innerRadiusRatio = 16843163; // 0x101019b
+    field @Deprecated public static final int inputMethod = 16843112; // 0x1010168
+    field public static final int inputType = 16843296; // 0x1010220
+    field public static final int inset = 16843957; // 0x10104b5
+    field public static final int insetBottom = 16843194; // 0x10101ba
+    field public static final int insetLeft = 16843191; // 0x10101b7
+    field public static final int insetRight = 16843192; // 0x10101b8
+    field public static final int insetTop = 16843193; // 0x10101b9
+    field public static final int installLocation = 16843447; // 0x10102b7
+    field public static final int interactiveUiTimeout = 16844181; // 0x1010595
+    field public static final int interpolator = 16843073; // 0x1010141
+    field public static final int isAccessibilityTool = 16844353; // 0x1010641
+    field public static final int isAlwaysSyncable = 16843571; // 0x1010333
+    field public static final int isAsciiCapable = 16843753; // 0x10103e9
+    field public static final int isAuxiliary = 16843647; // 0x101037f
+    field public static final int isDefault = 16843297; // 0x1010221
+    field public static final int isFeatureSplit = 16844123; // 0x101055b
+    field public static final int isGame = 16843764; // 0x10103f4
+    field public static final int isIndicator = 16843079; // 0x1010147
+    field public static final int isLightTheme = 16844176; // 0x1010590
+    field @Deprecated public static final int isModifier = 16843334; // 0x1010246
+    field @Deprecated public static final int isRepeatable = 16843336; // 0x1010248
+    field public static final int isScrollContainer = 16843342; // 0x101024e
+    field public static final int isSplitRequired = 16844177; // 0x1010591
+    field public static final int isStatic = 16844122; // 0x101055a
+    field @Deprecated public static final int isSticky = 16843335; // 0x1010247
+    field public static final int isolatedProcess = 16843689; // 0x10103a9
+    field public static final int isolatedSplits = 16844107; // 0x101054b
+    field public static final int itemBackground = 16843056; // 0x1010130
+    field public static final int itemIconDisabledAlpha = 16843057; // 0x1010131
+    field public static final int itemPadding = 16843565; // 0x101032d
+    field public static final int itemTextAppearance = 16843052; // 0x101012c
+    field public static final int justificationMode = 16844135; // 0x1010567
+    field public static final int keepScreenOn = 16843286; // 0x1010216
+    field public static final int key = 16843240; // 0x10101e8
+    field @Deprecated public static final int keyBackground = 16843315; // 0x1010233
+    field @Deprecated public static final int keyEdgeFlags = 16843333; // 0x1010245
+    field @Deprecated public static final int keyHeight = 16843326; // 0x101023e
+    field @Deprecated public static final int keyIcon = 16843340; // 0x101024c
+    field @Deprecated public static final int keyLabel = 16843339; // 0x101024b
+    field @Deprecated public static final int keyOutputText = 16843338; // 0x101024a
+    field @Deprecated public static final int keyPreviewHeight = 16843321; // 0x1010239
+    field @Deprecated public static final int keyPreviewLayout = 16843319; // 0x1010237
+    field @Deprecated public static final int keyPreviewOffset = 16843320; // 0x1010238
+    field public static final int keySet = 16843739; // 0x10103db
+    field @Deprecated public static final int keyTextColor = 16843318; // 0x1010236
+    field @Deprecated public static final int keyTextSize = 16843316; // 0x1010234
+    field @Deprecated public static final int keyWidth = 16843325; // 0x101023d
+    field public static final int keyboardLayout = 16843691; // 0x10103ab
+    field @Deprecated public static final int keyboardMode = 16843341; // 0x101024d
+    field public static final int keyboardNavigationCluster = 16844096; // 0x1010540
+    field public static final int keycode = 16842949; // 0x10100c5
+    field public static final int killAfterRestore = 16843420; // 0x101029c
+    field public static final int knownCerts = 16844330; // 0x101062a
+    field public static final int lStar = 16844359; // 0x1010647
+    field public static final int label = 16842753; // 0x1010001
+    field public static final int labelFor = 16843718; // 0x10103c6
+    field @Deprecated public static final int labelTextSize = 16843317; // 0x1010235
+    field public static final int languageTag = 16844040; // 0x1010508
+    field public static final int largeHeap = 16843610; // 0x101035a
+    field public static final int largeScreens = 16843398; // 0x1010286
+    field public static final int largestWidthLimitDp = 16843622; // 0x1010366
+    field public static final int lastBaselineToBottomHeight = 16844158; // 0x101057e
+    field public static final int launchMode = 16842781; // 0x101001d
+    field public static final int launchTaskBehindSourceAnimation = 16843922; // 0x1010492
+    field public static final int launchTaskBehindTargetAnimation = 16843921; // 0x1010491
+    field public static final int layerType = 16843604; // 0x1010354
+    field public static final int layout = 16842994; // 0x10100f2
+    field public static final int layoutAnimation = 16842988; // 0x10100ec
+    field public static final int layoutDirection = 16843698; // 0x10103b2
+    field public static final int layoutMode = 16843738; // 0x10103da
+    field public static final int layout_above = 16843140; // 0x1010184
+    field public static final int layout_alignBaseline = 16843142; // 0x1010186
+    field public static final int layout_alignBottom = 16843146; // 0x101018a
+    field public static final int layout_alignEnd = 16843706; // 0x10103ba
+    field public static final int layout_alignLeft = 16843143; // 0x1010187
+    field public static final int layout_alignParentBottom = 16843150; // 0x101018e
+    field public static final int layout_alignParentEnd = 16843708; // 0x10103bc
+    field public static final int layout_alignParentLeft = 16843147; // 0x101018b
+    field public static final int layout_alignParentRight = 16843149; // 0x101018d
+    field public static final int layout_alignParentStart = 16843707; // 0x10103bb
+    field public static final int layout_alignParentTop = 16843148; // 0x101018c
+    field public static final int layout_alignRight = 16843145; // 0x1010189
+    field public static final int layout_alignStart = 16843705; // 0x10103b9
+    field public static final int layout_alignTop = 16843144; // 0x1010188
+    field public static final int layout_alignWithParentIfMissing = 16843154; // 0x1010192
+    field public static final int layout_below = 16843141; // 0x1010185
+    field public static final int layout_centerHorizontal = 16843152; // 0x1010190
+    field public static final int layout_centerInParent = 16843151; // 0x101018f
+    field public static final int layout_centerVertical = 16843153; // 0x1010191
+    field public static final int layout_column = 16843084; // 0x101014c
+    field public static final int layout_columnSpan = 16843645; // 0x101037d
+    field public static final int layout_columnWeight = 16843865; // 0x1010459
+    field public static final int layout_gravity = 16842931; // 0x10100b3
+    field public static final int layout_height = 16842997; // 0x10100f5
+    field public static final int layout_margin = 16842998; // 0x10100f6
+    field public static final int layout_marginBottom = 16843002; // 0x10100fa
+    field public static final int layout_marginEnd = 16843702; // 0x10103b6
+    field public static final int layout_marginHorizontal = 16844091; // 0x101053b
+    field public static final int layout_marginLeft = 16842999; // 0x10100f7
+    field public static final int layout_marginRight = 16843001; // 0x10100f9
+    field public static final int layout_marginStart = 16843701; // 0x10103b5
+    field public static final int layout_marginTop = 16843000; // 0x10100f8
+    field public static final int layout_marginVertical = 16844092; // 0x101053c
+    field public static final int layout_row = 16843643; // 0x101037b
+    field public static final int layout_rowSpan = 16843644; // 0x101037c
+    field public static final int layout_rowWeight = 16843864; // 0x1010458
+    field public static final int layout_scale = 16843155; // 0x1010193
+    field public static final int layout_span = 16843085; // 0x101014d
+    field public static final int layout_toEndOf = 16843704; // 0x10103b8
+    field public static final int layout_toLeftOf = 16843138; // 0x1010182
+    field public static final int layout_toRightOf = 16843139; // 0x1010183
+    field public static final int layout_toStartOf = 16843703; // 0x10103b7
+    field public static final int layout_weight = 16843137; // 0x1010181
+    field public static final int layout_width = 16842996; // 0x10100f4
+    field public static final int layout_x = 16843135; // 0x101017f
+    field public static final int layout_y = 16843136; // 0x1010180
+    field public static final int left = 16843181; // 0x10101ad
+    field public static final int letterSpacing = 16843958; // 0x10104b6
+    field public static final int level = 16844032; // 0x1010500
+    field public static final int lineHeight = 16844159; // 0x101057f
+    field public static final int lineSpacingExtra = 16843287; // 0x1010217
+    field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
+    field public static final int lines = 16843092; // 0x1010154
+    field public static final int linksClickable = 16842929; // 0x10100b1
+    field public static final int listChoiceBackgroundIndicator = 16843504; // 0x10102f0
+    field public static final int listChoiceIndicatorMultiple = 16843290; // 0x101021a
+    field public static final int listChoiceIndicatorSingle = 16843289; // 0x1010219
+    field public static final int listDivider = 16843284; // 0x1010214
+    field public static final int listDividerAlertDialog = 16843525; // 0x1010305
+    field public static final int listMenuViewStyle = 16844018; // 0x10104f2
+    field public static final int listPopupWindowStyle = 16843519; // 0x10102ff
+    field public static final int listPreferredItemHeight = 16842829; // 0x101004d
+    field public static final int listPreferredItemHeightLarge = 16843654; // 0x1010386
+    field public static final int listPreferredItemHeightSmall = 16843655; // 0x1010387
+    field public static final int listPreferredItemPaddingEnd = 16843710; // 0x10103be
+    field public static final int listPreferredItemPaddingLeft = 16843683; // 0x10103a3
+    field public static final int listPreferredItemPaddingRight = 16843684; // 0x10103a4
+    field public static final int listPreferredItemPaddingStart = 16843709; // 0x10103bd
+    field public static final int listSelector = 16843003; // 0x10100fb
+    field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208
+    field public static final int listViewStyle = 16842868; // 0x1010074
+    field public static final int listViewWhiteStyle = 16842869; // 0x1010075
+    field public static final int lockTaskMode = 16844013; // 0x10104ed
+    field public static final int logo = 16843454; // 0x10102be
+    field public static final int logoDescription = 16844009; // 0x10104e9
+    field public static final int longClickable = 16842982; // 0x10100e6
+    field public static final int loopViews = 16843527; // 0x1010307
+    field public static final int manageSpaceActivity = 16842756; // 0x1010004
+    field public static final int mapViewStyle = 16842890; // 0x101008a
+    field public static final int marqueeRepeatLimit = 16843293; // 0x101021d
+    field public static final int matchOrder = 16843855; // 0x101044f
+    field public static final int max = 16843062; // 0x1010136
+    field public static final int maxAspectRatio = 16844128; // 0x1010560
+    field public static final int maxButtonHeight = 16844029; // 0x10104fd
+    field public static final int maxDate = 16843584; // 0x1010340
+    field public static final int maxEms = 16843095; // 0x1010157
+    field public static final int maxHeight = 16843040; // 0x1010120
+    field public static final int maxItemsPerRow = 16843060; // 0x1010134
+    field public static final int maxLength = 16843104; // 0x1010160
+    field public static final int maxLevel = 16843186; // 0x10101b2
+    field public static final int maxLines = 16843091; // 0x1010153
+    field public static final int maxLongVersionCode = 16844163; // 0x1010583
+    field public static final int maxRecents = 16843846; // 0x1010446
+    field public static final int maxResizeHeight = 16844339; // 0x1010633
+    field public static final int maxResizeWidth = 16844338; // 0x1010632
+    field public static final int maxRows = 16843059; // 0x1010133
+    field public static final int maxSdkVersion = 16843377; // 0x1010271
+    field public static final int maxWidth = 16843039; // 0x101011f
+    field public static final int maximumAngle = 16843903; // 0x101047f
+    field public static final int measureAllChildren = 16843018; // 0x101010a
+    field public static final int measureWithLargestChild = 16843476; // 0x10102d4
+    field public static final int mediaRouteButtonStyle = 16843693; // 0x10103ad
+    field public static final int mediaRouteTypes = 16843694; // 0x10103ae
+    field public static final int memtagMode = 16844324; // 0x1010624
+    field public static final int menuCategory = 16843230; // 0x10101de
+    field public static final int mimeGroup = 16844309; // 0x1010615
+    field public static final int mimeType = 16842790; // 0x1010026
+    field public static final int min = 16844089; // 0x1010539
+    field public static final int minAspectRatio = 16844187; // 0x101059b
+    field public static final int minDate = 16843583; // 0x101033f
+    field public static final int minEms = 16843098; // 0x101015a
+    field public static final int minHeight = 16843072; // 0x1010140
+    field public static final int minLevel = 16843185; // 0x10101b1
+    field public static final int minLines = 16843094; // 0x1010156
+    field public static final int minResizeHeight = 16843670; // 0x1010396
+    field public static final int minResizeWidth = 16843669; // 0x1010395
+    field public static final int minSdkVersion = 16843276; // 0x101020c
+    field public static final int minWidth = 16843071; // 0x101013f
+    field public static final int minimumHorizontalAngle = 16843901; // 0x101047d
+    field public static final int minimumVerticalAngle = 16843902; // 0x101047e
+    field public static final int mipMap = 16843725; // 0x10103cd
+    field public static final int mirrorForRtl = 16843726; // 0x10103ce
+    field public static final int mode = 16843134; // 0x101017e
+    field public static final int moreIcon = 16843061; // 0x1010135
+    field public static final int multiArch = 16843918; // 0x101048e
+    field public static final int multiprocess = 16842771; // 0x1010013
+    field public static final int name = 16842755; // 0x1010003
+    field public static final int nativeHeapZeroInitialized = 16844325; // 0x1010625
+    field public static final int navigationBarColor = 16843858; // 0x1010452
+    field public static final int navigationBarDividerColor = 16844141; // 0x101056d
+    field public static final int navigationContentDescription = 16843969; // 0x10104c1
+    field public static final int navigationIcon = 16843968; // 0x10104c0
+    field public static final int navigationMode = 16843471; // 0x10102cf
+    field public static final int negativeButtonText = 16843254; // 0x10101f6
+    field public static final int nestedScrollingEnabled = 16843830; // 0x1010436
+    field public static final int networkSecurityConfig = 16844071; // 0x1010527
+    field public static final int nextClusterForward = 16844098; // 0x1010542
+    field public static final int nextFocusDown = 16842980; // 0x10100e4
+    field public static final int nextFocusForward = 16843580; // 0x101033c
+    field public static final int nextFocusLeft = 16842977; // 0x10100e1
+    field public static final int nextFocusRight = 16842978; // 0x10100e2
+    field public static final int nextFocusUp = 16842979; // 0x10100e3
+    field public static final int noHistory = 16843309; // 0x101022d
+    field public static final int nonInteractiveUiTimeout = 16844175; // 0x101058f
+    field public static final int normalScreens = 16843397; // 0x1010285
+    field public static final int notificationTimeout = 16843651; // 0x1010383
+    field public static final int numColumns = 16843032; // 0x1010118
+    field public static final int numStars = 16843076; // 0x1010144
+    field public static final int numberPickerStyle = 16844068; // 0x1010524
+    field public static final int numbersBackgroundColor = 16843938; // 0x10104a2
+    field public static final int numbersInnerTextColor = 16844001; // 0x10104e1
+    field public static final int numbersSelectorColor = 16843939; // 0x10104a3
+    field public static final int numbersTextColor = 16843937; // 0x10104a1
+    field @Deprecated public static final int numeric = 16843109; // 0x1010165
+    field public static final int numericModifiers = 16844111; // 0x101054f
+    field public static final int numericShortcut = 16843236; // 0x10101e4
+    field public static final int offset = 16844052; // 0x1010514
+    field @Deprecated public static final int onClick = 16843375; // 0x101026f
+    field public static final int oneshot = 16843159; // 0x1010197
+    field public static final int opacity = 16843550; // 0x101031e
+    field public static final int opticalInsetBottom = 16844171; // 0x101058b
+    field public static final int opticalInsetLeft = 16844168; // 0x1010588
+    field public static final int opticalInsetRight = 16844170; // 0x101058a
+    field public static final int opticalInsetTop = 16844169; // 0x1010589
+    field public static final int order = 16843242; // 0x10101ea
+    field public static final int orderInCategory = 16843231; // 0x10101df
+    field public static final int ordering = 16843490; // 0x10102e2
+    field public static final int orderingFromXml = 16843239; // 0x10101e7
+    field public static final int orientation = 16842948; // 0x10100c4
+    field public static final int outAnimation = 16843128; // 0x1010178
+    field public static final int outlineAmbientShadowColor = 16844162; // 0x1010582
+    field public static final int outlineProvider = 16843960; // 0x10104b8
+    field public static final int outlineSpotShadowColor = 16844161; // 0x1010581
+    field public static final int overScrollFooter = 16843459; // 0x10102c3
+    field public static final int overScrollHeader = 16843458; // 0x10102c2
+    field public static final int overScrollMode = 16843457; // 0x10102c1
+    field public static final int overlapAnchor = 16843874; // 0x1010462
+    field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2
+    field public static final int packageNames = 16843649; // 0x1010381
+    field public static final int packageType = 16844167; // 0x1010587
+    field public static final int padding = 16842965; // 0x10100d5
+    field public static final int paddingBottom = 16842969; // 0x10100d9
+    field public static final int paddingEnd = 16843700; // 0x10103b4
+    field public static final int paddingHorizontal = 16844093; // 0x101053d
+    field public static final int paddingLeft = 16842966; // 0x10100d6
+    field public static final int paddingMode = 16843863; // 0x1010457
+    field public static final int paddingRight = 16842968; // 0x10100d8
+    field public static final int paddingStart = 16843699; // 0x10103b3
+    field public static final int paddingTop = 16842967; // 0x10100d7
+    field public static final int paddingVertical = 16844094; // 0x101053e
+    field public static final int panelBackground = 16842846; // 0x101005e
+    field public static final int panelColorBackground = 16842849; // 0x1010061
+    field public static final int panelColorForeground = 16842848; // 0x1010060
+    field public static final int panelFullBackground = 16842847; // 0x101005f
+    field public static final int panelTextAppearance = 16842850; // 0x1010062
+    field public static final int parentActivityName = 16843687; // 0x10103a7
+    field @Deprecated public static final int password = 16843100; // 0x101015c
+    field public static final int passwordsActivity = 16844351; // 0x101063f
+    field public static final int path = 16842794; // 0x101002a
+    field public static final int pathAdvancedPattern = 16844320; // 0x1010620
+    field public static final int pathData = 16843781; // 0x1010405
+    field public static final int pathPattern = 16842796; // 0x101002c
+    field public static final int pathPrefix = 16842795; // 0x101002b
+    field public static final int pathSuffix = 16844318; // 0x101061e
+    field public static final int patternPathData = 16843978; // 0x10104ca
+    field public static final int permission = 16842758; // 0x1010006
+    field public static final int permissionFlags = 16843719; // 0x10103c7
+    field public static final int permissionGroup = 16842762; // 0x101000a
+    field public static final int permissionGroupFlags = 16843717; // 0x10103c5
+    field public static final int persistableMode = 16843821; // 0x101042d
+    field public static final int persistent = 16842765; // 0x101000d
+    field public static final int persistentDrawingCache = 16842990; // 0x10100ee
+    field public static final int persistentWhenFeatureAvailable = 16844131; // 0x1010563
+    field @Deprecated public static final int phoneNumber = 16843111; // 0x1010167
+    field public static final int pivotX = 16843189; // 0x10101b5
+    field public static final int pivotY = 16843190; // 0x10101b6
+    field public static final int pointerIcon = 16844041; // 0x1010509
+    field public static final int popupAnimationStyle = 16843465; // 0x10102c9
+    field public static final int popupBackground = 16843126; // 0x1010176
+    field @Deprecated public static final int popupCharacters = 16843332; // 0x1010244
+    field public static final int popupElevation = 16843916; // 0x101048c
+    field public static final int popupEnterTransition = 16844063; // 0x101051f
+    field public static final int popupExitTransition = 16844064; // 0x1010520
+    field @Deprecated public static final int popupKeyboard = 16843331; // 0x1010243
+    field @Deprecated public static final int popupLayout = 16843323; // 0x101023b
+    field public static final int popupMenuStyle = 16843520; // 0x1010300
+    field public static final int popupTheme = 16843945; // 0x10104a9
+    field public static final int popupWindowStyle = 16842870; // 0x1010076
+    field public static final int port = 16842793; // 0x1010029
+    field public static final int positiveButtonText = 16843253; // 0x10101f5
+    field public static final int preferMinimalPostProcessing = 16844300; // 0x101060c
+    field public static final int preferenceCategoryStyle = 16842892; // 0x101008c
+    field public static final int preferenceFragmentStyle = 16844038; // 0x1010506
+    field public static final int preferenceInformationStyle = 16842893; // 0x101008d
+    field public static final int preferenceLayoutChild = 16842900; // 0x1010094
+    field public static final int preferenceScreenStyle = 16842891; // 0x101008b
+    field public static final int preferenceStyle = 16842894; // 0x101008e
+    field public static final int presentationTheme = 16843712; // 0x10103c0
+    field public static final int preserveLegacyExternalStorage = 16844308; // 0x1010614
+    field public static final int previewImage = 16843482; // 0x10102da
+    field public static final int previewLayout = 16844327; // 0x1010627
+    field public static final int primaryContentAlpha = 16844114; // 0x1010552
+    field public static final int priority = 16842780; // 0x101001c
+    field public static final int privateImeOptions = 16843299; // 0x1010223
+    field public static final int process = 16842769; // 0x1010011
+    field public static final int progress = 16843063; // 0x1010137
+    field public static final int progressBackgroundTint = 16843877; // 0x1010465
+    field public static final int progressBackgroundTintMode = 16843878; // 0x1010466
+    field public static final int progressBarPadding = 16843545; // 0x1010319
+    field public static final int progressBarStyle = 16842871; // 0x1010077
+    field public static final int progressBarStyleHorizontal = 16842872; // 0x1010078
+    field public static final int progressBarStyleInverse = 16843399; // 0x1010287
+    field public static final int progressBarStyleLarge = 16842874; // 0x101007a
+    field public static final int progressBarStyleLargeInverse = 16843401; // 0x1010289
+    field public static final int progressBarStyleSmall = 16842873; // 0x1010079
+    field public static final int progressBarStyleSmallInverse = 16843400; // 0x1010288
+    field public static final int progressBarStyleSmallTitle = 16843279; // 0x101020f
+    field public static final int progressDrawable = 16843068; // 0x101013c
+    field public static final int progressTint = 16843875; // 0x1010463
+    field public static final int progressTintMode = 16843876; // 0x1010464
+    field public static final int prompt = 16843131; // 0x101017b
+    field public static final int propertyName = 16843489; // 0x10102e1
+    field public static final int propertyXName = 16843892; // 0x1010474
+    field public static final int propertyYName = 16843893; // 0x1010475
+    field public static final int protectionLevel = 16842761; // 0x1010009
+    field public static final int publicKey = 16843686; // 0x10103a6
+    field public static final int queryActionMsg = 16843227; // 0x10101db
+    field public static final int queryAfterZeroResults = 16843394; // 0x1010282
+    field public static final int queryBackground = 16843911; // 0x1010487
+    field public static final int queryHint = 16843608; // 0x1010358
+    field public static final int quickContactBadgeStyleSmallWindowLarge = 16843443; // 0x10102b3
+    field public static final int quickContactBadgeStyleSmallWindowMedium = 16843442; // 0x10102b2
+    field public static final int quickContactBadgeStyleSmallWindowSmall = 16843441; // 0x10102b1
+    field public static final int quickContactBadgeStyleWindowLarge = 16843440; // 0x10102b0
+    field public static final int quickContactBadgeStyleWindowMedium = 16843439; // 0x10102af
+    field public static final int quickContactBadgeStyleWindowSmall = 16843438; // 0x10102ae
+    field public static final int radioButtonStyle = 16842878; // 0x101007e
+    field public static final int radius = 16843176; // 0x10101a8
+    field public static final int rating = 16843077; // 0x1010145
+    field public static final int ratingBarStyle = 16842876; // 0x101007c
+    field public static final int ratingBarStyleIndicator = 16843280; // 0x1010210
+    field public static final int ratingBarStyleSmall = 16842877; // 0x101007d
+    field public static final int readPermission = 16842759; // 0x1010007
+    field public static final int recognitionService = 16843932; // 0x101049c
+    field public static final int recreateOnConfigChanges = 16844103; // 0x1010547
+    field public static final int recycleEnabled = 16844121; // 0x1010559
+    field public static final int relinquishTaskIdentity = 16843894; // 0x1010476
+    field public static final int reparent = 16843964; // 0x10104bc
+    field public static final int reparentWithOverlay = 16843965; // 0x10104bd
+    field public static final int repeatCount = 16843199; // 0x10101bf
+    field public static final int repeatMode = 16843200; // 0x10101c0
+    field public static final int reqFiveWayNav = 16843314; // 0x1010232
+    field public static final int reqHardKeyboard = 16843305; // 0x1010229
+    field public static final int reqKeyboardType = 16843304; // 0x1010228
+    field public static final int reqNavigation = 16843306; // 0x101022a
+    field public static final int reqTouchScreen = 16843303; // 0x1010227
+    field public static final int requestLegacyExternalStorage = 16844291; // 0x1010603
+    field public static final int requestRawExternalStorageAccess = 16844357; // 0x1010645
+    field public static final int requireDeviceScreenOn = 16844317; // 0x101061d
+    field public static final int requireDeviceUnlock = 16843756; // 0x10103ec
+    field public static final int required = 16843406; // 0x101028e
+    field public static final int requiredAccountType = 16843734; // 0x10103d6
+    field public static final int requiredFeature = 16844116; // 0x1010554
+    field public static final int requiredForAllUsers = 16843728; // 0x10103d0
+    field public static final int requiredNotFeature = 16844117; // 0x1010555
+    field public static final int requiresFadingEdge = 16843685; // 0x10103a5
+    field public static final int requiresSmallestWidthDp = 16843620; // 0x1010364
+    field public static final int resizeClip = 16843983; // 0x10104cf
+    field public static final int resizeMode = 16843619; // 0x1010363
+    field public static final int resizeable = 16843405; // 0x101028d
+    field public static final int resizeableActivity = 16844022; // 0x10104f6
+    field public static final int resource = 16842789; // 0x1010025
+    field public static final int resourcesMap = 16844297; // 0x1010609
+    field public static final int restoreAnyVersion = 16843450; // 0x10102ba
+    field @Deprecated public static final int restoreNeedsApplication = 16843421; // 0x101029d
+    field public static final int restrictedAccountType = 16843733; // 0x10103d5
+    field public static final int restrictionType = 16843923; // 0x1010493
+    field public static final int resumeWhilePausing = 16843954; // 0x10104b2
+    field public static final int reversible = 16843851; // 0x101044b
+    field public static final int revisionCode = 16843989; // 0x10104d5
+    field public static final int right = 16843183; // 0x10101af
+    field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
+    field public static final int ringtoneType = 16843257; // 0x10101f9
+    field public static final int rollbackDataPolicy = 16844311; // 0x1010617
+    field public static final int rotation = 16843558; // 0x1010326
+    field public static final int rotationAnimation = 16844090; // 0x101053a
+    field public static final int rotationX = 16843559; // 0x1010327
+    field public static final int rotationY = 16843560; // 0x1010328
+    field public static final int roundIcon = 16844076; // 0x101052c
+    field public static final int rowCount = 16843637; // 0x1010375
+    field public static final int rowDelay = 16843216; // 0x10101d0
+    field @Deprecated public static final int rowEdgeFlags = 16843329; // 0x1010241
+    field public static final int rowHeight = 16843058; // 0x1010132
+    field public static final int rowOrderPreserved = 16843638; // 0x1010376
+    field public static final int saveEnabled = 16842983; // 0x10100e7
+    field public static final int scaleGravity = 16843262; // 0x10101fe
+    field public static final int scaleHeight = 16843261; // 0x10101fd
+    field public static final int scaleType = 16843037; // 0x101011d
+    field public static final int scaleWidth = 16843260; // 0x10101fc
+    field public static final int scaleX = 16843556; // 0x1010324
+    field public static final int scaleY = 16843557; // 0x1010325
+    field public static final int scheme = 16842791; // 0x1010027
+    field public static final int screenDensity = 16843467; // 0x10102cb
+    field public static final int screenOrientation = 16842782; // 0x101001e
+    field public static final int screenReaderFocusable = 16844148; // 0x1010574
+    field public static final int screenSize = 16843466; // 0x10102ca
+    field public static final int scrollHorizontally = 16843099; // 0x101015b
+    field public static final int scrollIndicators = 16844006; // 0x10104e6
+    field public static final int scrollViewStyle = 16842880; // 0x1010080
+    field public static final int scrollX = 16842962; // 0x10100d2
+    field public static final int scrollY = 16842963; // 0x10100d3
+    field public static final int scrollbarAlwaysDrawHorizontalTrack = 16842856; // 0x1010068
+    field public static final int scrollbarAlwaysDrawVerticalTrack = 16842857; // 0x1010069
+    field public static final int scrollbarDefaultDelayBeforeFade = 16843433; // 0x10102a9
+    field public static final int scrollbarFadeDuration = 16843432; // 0x10102a8
+    field public static final int scrollbarSize = 16842851; // 0x1010063
+    field public static final int scrollbarStyle = 16842879; // 0x101007f
+    field public static final int scrollbarThumbHorizontal = 16842852; // 0x1010064
+    field public static final int scrollbarThumbVertical = 16842853; // 0x1010065
+    field public static final int scrollbarTrackHorizontal = 16842854; // 0x1010066
+    field public static final int scrollbarTrackVertical = 16842855; // 0x1010067
+    field public static final int scrollbars = 16842974; // 0x10100de
+    field public static final int scrollingCache = 16843006; // 0x10100fe
+    field @Deprecated public static final int searchButtonText = 16843269; // 0x1010205
+    field public static final int searchHintIcon = 16843988; // 0x10104d4
+    field public static final int searchIcon = 16843907; // 0x1010483
+    field public static final int searchMode = 16843221; // 0x10101d5
+    field public static final int searchSettingsDescription = 16843402; // 0x101028a
+    field public static final int searchSuggestAuthority = 16843222; // 0x10101d6
+    field public static final int searchSuggestIntentAction = 16843225; // 0x10101d9
+    field public static final int searchSuggestIntentData = 16843226; // 0x10101da
+    field public static final int searchSuggestPath = 16843223; // 0x10101d7
+    field public static final int searchSuggestSelection = 16843224; // 0x10101d8
+    field public static final int searchSuggestThreshold = 16843373; // 0x101026d
+    field public static final int searchViewStyle = 16843904; // 0x1010480
+    field public static final int secondaryContentAlpha = 16844115; // 0x1010553
+    field public static final int secondaryProgress = 16843064; // 0x1010138
+    field public static final int secondaryProgressTint = 16843879; // 0x1010467
+    field public static final int secondaryProgressTintMode = 16843880; // 0x1010468
+    field public static final int secureElementName = 16844290; // 0x1010602
+    field public static final int seekBarStyle = 16842875; // 0x101007b
+    field public static final int segmentedButtonStyle = 16843568; // 0x1010330
+    field public static final int selectAllOnFocus = 16843102; // 0x101015e
+    field public static final int selectable = 16843238; // 0x10101e6
+    field public static final int selectableAsDefault = 16844352; // 0x1010640
+    field public static final int selectableItemBackground = 16843534; // 0x101030e
+    field public static final int selectableItemBackgroundBorderless = 16843868; // 0x101045c
+    field @Deprecated public static final int selectedDateVerticalBar = 16843591; // 0x1010347
+    field @Deprecated public static final int selectedWeekBackgroundColor = 16843586; // 0x1010342
+    field public static final int selectionDividerHeight = 16844184; // 0x1010598
+    field public static final int sessionService = 16843837; // 0x101043d
+    field public static final int settingsActivity = 16843301; // 0x1010225
+    field public static final int settingsSliceUri = 16844179; // 0x1010593
+    field public static final int setupActivity = 16843766; // 0x10103f6
+    field public static final int shadowColor = 16843105; // 0x1010161
+    field public static final int shadowDx = 16843106; // 0x1010162
+    field public static final int shadowDy = 16843107; // 0x1010163
+    field public static final int shadowRadius = 16843108; // 0x1010164
+    field public static final int shape = 16843162; // 0x101019a
+    field public static final int shareInterpolator = 16843195; // 0x10101bb
+    field @Deprecated public static final int sharedUserId = 16842763; // 0x101000b
+    field @Deprecated public static final int sharedUserLabel = 16843361; // 0x1010261
+    field public static final int shell = 16844180; // 0x1010594
+    field public static final int shortcutDisabledMessage = 16844075; // 0x101052b
+    field public static final int shortcutId = 16844072; // 0x1010528
+    field public static final int shortcutLongLabel = 16844074; // 0x101052a
+    field public static final int shortcutShortLabel = 16844073; // 0x1010529
+    field public static final int shouldDisableView = 16843246; // 0x10101ee
+    field public static final int shouldUseDefaultUnfoldTransition = 16844364; // 0x101064c
+    field public static final int showAsAction = 16843481; // 0x10102d9
+    field public static final int showDefault = 16843258; // 0x10101fa
+    field public static final int showDividers = 16843561; // 0x1010329
+    field public static final int showForAllUsers = 16844015; // 0x10104ef
+    field public static final int showInInputMethodPicker = 16844360; // 0x1010648
+    field public static final int showMetadataInPreview = 16844079; // 0x101052f
+    field @Deprecated public static final int showOnLockScreen = 16843721; // 0x10103c9
+    field public static final int showSilent = 16843259; // 0x10101fb
+    field public static final int showText = 16843949; // 0x10104ad
+    field @Deprecated public static final int showWeekNumber = 16843582; // 0x101033e
+    field public static final int showWhenLocked = 16844137; // 0x1010569
+    field @Deprecated public static final int shownWeekCount = 16843585; // 0x1010341
+    field public static final int shrinkColumns = 16843082; // 0x101014a
+    field @Deprecated public static final int singleLine = 16843101; // 0x101015d
+    field public static final int singleLineTitle = 16844124; // 0x101055c
+    field public static final int singleUser = 16843711; // 0x10103bf
+    field public static final int slideEdge = 16843824; // 0x1010430
+    field public static final int smallIcon = 16843422; // 0x101029e
+    field public static final int smallScreens = 16843396; // 0x1010284
+    field public static final int smoothScrollbar = 16843313; // 0x1010231
+    field public static final int soundEffectsEnabled = 16843285; // 0x1010215
+    field public static final int spacing = 16843027; // 0x1010113
+    field public static final int spinnerDropDownItemStyle = 16842887; // 0x1010087
+    field public static final int spinnerItemStyle = 16842889; // 0x1010089
+    field public static final int spinnerMode = 16843505; // 0x10102f1
+    field public static final int spinnerStyle = 16842881; // 0x1010081
+    field public static final int spinnersShown = 16843595; // 0x101034b
+    field public static final int splashScreenTheme = 16844337; // 0x1010631
+    field public static final int splitMotionEvents = 16843503; // 0x10102ef
+    field public static final int splitName = 16844105; // 0x1010549
+    field public static final int splitTrack = 16843852; // 0x101044c
+    field public static final int spotShadowAlpha = 16843967; // 0x10104bf
+    field public static final int src = 16843033; // 0x1010119
+    field public static final int ssp = 16843747; // 0x10103e3
+    field public static final int sspAdvancedPattern = 16844321; // 0x1010621
+    field public static final int sspPattern = 16843749; // 0x10103e5
+    field public static final int sspPrefix = 16843748; // 0x10103e4
+    field public static final int sspSuffix = 16844319; // 0x101061f
+    field public static final int stackFromBottom = 16843005; // 0x10100fd
+    field public static final int stackViewStyle = 16843838; // 0x101043e
+    field public static final int starStyle = 16842882; // 0x1010082
+    field public static final int start = 16843995; // 0x10104db
+    field public static final int startColor = 16843165; // 0x101019d
+    field public static final int startDelay = 16843746; // 0x10103e2
+    field public static final int startOffset = 16843198; // 0x10101be
+    field public static final int startX = 16844048; // 0x1010510
+    field public static final int startY = 16844049; // 0x1010511
+    field @Deprecated public static final int startYear = 16843132; // 0x101017c
+    field public static final int stateListAnimator = 16843848; // 0x1010448
+    field public static final int stateNotNeeded = 16842774; // 0x1010016
+    field public static final int state_above_anchor = 16842922; // 0x10100aa
+    field public static final int state_accelerated = 16843547; // 0x101031b
+    field public static final int state_activated = 16843518; // 0x10102fe
+    field public static final int state_active = 16842914; // 0x10100a2
+    field public static final int state_checkable = 16842911; // 0x101009f
+    field public static final int state_checked = 16842912; // 0x10100a0
+    field public static final int state_drag_can_accept = 16843624; // 0x1010368
+    field public static final int state_drag_hovered = 16843625; // 0x1010369
+    field public static final int state_empty = 16842921; // 0x10100a9
+    field public static final int state_enabled = 16842910; // 0x101009e
+    field public static final int state_expanded = 16842920; // 0x10100a8
+    field public static final int state_first = 16842916; // 0x10100a4
+    field public static final int state_focused = 16842908; // 0x101009c
+    field public static final int state_hovered = 16843623; // 0x1010367
+    field public static final int state_last = 16842918; // 0x10100a6
+    field @Deprecated public static final int state_long_pressable = 16843324; // 0x101023c
+    field public static final int state_middle = 16842917; // 0x10100a5
+    field public static final int state_multiline = 16843597; // 0x101034d
+    field public static final int state_pressed = 16842919; // 0x10100a7
+    field public static final int state_selected = 16842913; // 0x10100a1
+    field public static final int state_single = 16842915; // 0x10100a3
+    field public static final int state_window_focused = 16842909; // 0x101009d
+    field public static final int staticWallpaperPreview = 16843569; // 0x1010331
+    field public static final int statusBarColor = 16843857; // 0x1010451
+    field public static final int stepSize = 16843078; // 0x1010146
+    field public static final int stopWithTask = 16843626; // 0x101036a
+    field public static final int streamType = 16843273; // 0x1010209
+    field public static final int stretchColumns = 16843081; // 0x1010149
+    field public static final int stretchMode = 16843030; // 0x1010116
+    field public static final int strokeAlpha = 16843979; // 0x10104cb
+    field public static final int strokeColor = 16843782; // 0x1010406
+    field public static final int strokeLineCap = 16843787; // 0x101040b
+    field public static final int strokeLineJoin = 16843788; // 0x101040c
+    field public static final int strokeMiterLimit = 16843789; // 0x101040d
+    field public static final int strokeWidth = 16843783; // 0x1010407
+    field public static final int subMenuArrow = 16844019; // 0x10104f3
+    field public static final int submitBackground = 16843912; // 0x1010488
+    field public static final int subtitle = 16843473; // 0x10102d1
+    field public static final int subtitleTextAppearance = 16843823; // 0x101042f
+    field public static final int subtitleTextColor = 16844004; // 0x10104e4
+    field public static final int subtitleTextStyle = 16843513; // 0x10102f9
+    field public static final int subtypeExtraValue = 16843674; // 0x101039a
+    field public static final int subtypeId = 16843713; // 0x10103c1
+    field public static final int subtypeLocale = 16843673; // 0x1010399
+    field public static final int suggestActionMsg = 16843228; // 0x10101dc
+    field public static final int suggestActionMsgColumn = 16843229; // 0x10101dd
+    field public static final int suggestionRowLayout = 16843910; // 0x1010486
+    field public static final int summary = 16843241; // 0x10101e9
+    field public static final int summaryColumn = 16843426; // 0x10102a2
+    field public static final int summaryOff = 16843248; // 0x10101f0
+    field public static final int summaryOn = 16843247; // 0x10101ef
+    field public static final int supportsAssist = 16844016; // 0x10104f0
+    field public static final int supportsInlineSuggestions = 16844301; // 0x101060d
+    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1
+    field public static final int supportsLocalInteraction = 16844047; // 0x101050f
+    field public static final int supportsMultipleDisplays = 16844182; // 0x1010596
+    field public static final int supportsPictureInPicture = 16844023; // 0x10104f7
+    field public static final int supportsRtl = 16843695; // 0x10103af
+    field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
+    field public static final int supportsUploading = 16843419; // 0x101029b
+    field public static final int suppressesSpellChecker = 16844355; // 0x1010643
+    field public static final int switchMinWidth = 16843632; // 0x1010370
+    field public static final int switchPadding = 16843633; // 0x1010371
+    field public static final int switchPreferenceStyle = 16843629; // 0x101036d
+    field public static final int switchStyle = 16843839; // 0x101043f
+    field public static final int switchTextAppearance = 16843630; // 0x101036e
+    field public static final int switchTextOff = 16843628; // 0x101036c
+    field public static final int switchTextOn = 16843627; // 0x101036b
+    field public static final int syncable = 16842777; // 0x1010019
+    field public static final int tabStripEnabled = 16843453; // 0x10102bd
+    field public static final int tabStripLeft = 16843451; // 0x10102bb
+    field public static final int tabStripRight = 16843452; // 0x10102bc
+    field public static final int tabWidgetStyle = 16842883; // 0x1010083
+    field public static final int tag = 16842961; // 0x10100d1
+    field public static final int targetActivity = 16843266; // 0x1010202
+    field public static final int targetCellHeight = 16844341; // 0x1010635
+    field public static final int targetCellWidth = 16844340; // 0x1010634
+    field public static final int targetClass = 16842799; // 0x101002f
+    field @Deprecated public static final int targetDescriptions = 16843680; // 0x10103a0
+    field public static final int targetId = 16843740; // 0x10103dc
+    field public static final int targetName = 16843853; // 0x101044d
+    field public static final int targetPackage = 16842785; // 0x1010021
+    field public static final int targetProcesses = 16844097; // 0x1010541
+    field @Deprecated public static final int targetSandboxVersion = 16844108; // 0x101054c
+    field public static final int targetSdkVersion = 16843376; // 0x1010270
+    field public static final int taskAffinity = 16842770; // 0x1010012
+    field public static final int taskCloseEnterAnimation = 16842942; // 0x10100be
+    field public static final int taskCloseExitAnimation = 16842943; // 0x10100bf
+    field public static final int taskOpenEnterAnimation = 16842940; // 0x10100bc
+    field public static final int taskOpenExitAnimation = 16842941; // 0x10100bd
+    field public static final int taskToBackEnterAnimation = 16842946; // 0x10100c2
+    field public static final int taskToBackExitAnimation = 16842947; // 0x10100c3
+    field public static final int taskToFrontEnterAnimation = 16842944; // 0x10100c0
+    field public static final int taskToFrontExitAnimation = 16842945; // 0x10100c1
+    field public static final int tension = 16843370; // 0x101026a
+    field public static final int testOnly = 16843378; // 0x1010272
+    field public static final int text = 16843087; // 0x101014f
+    field public static final int textAlignment = 16843697; // 0x10103b1
+    field public static final int textAllCaps = 16843660; // 0x101038c
+    field public static final int textAppearance = 16842804; // 0x1010034
+    field public static final int textAppearanceButton = 16843271; // 0x1010207
+    field public static final int textAppearanceInverse = 16842805; // 0x1010035
+    field public static final int textAppearanceLarge = 16842816; // 0x1010040
+    field public static final int textAppearanceLargeInverse = 16842819; // 0x1010043
+    field public static final int textAppearanceLargePopupMenu = 16843521; // 0x1010301
+    field public static final int textAppearanceListItem = 16843678; // 0x101039e
+    field public static final int textAppearanceListItemSecondary = 16843826; // 0x1010432
+    field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f
+    field public static final int textAppearanceMedium = 16842817; // 0x1010041
+    field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044
+    field public static final int textAppearancePopupMenuHeader = 16844034; // 0x1010502
+    field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0
+    field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1
+    field public static final int textAppearanceSmall = 16842818; // 0x1010042
+    field public static final int textAppearanceSmallInverse = 16842821; // 0x1010045
+    field public static final int textAppearanceSmallPopupMenu = 16843522; // 0x1010302
+    field public static final int textCheckMark = 16842822; // 0x1010046
+    field public static final int textCheckMarkInverse = 16842823; // 0x1010047
+    field public static final int textColor = 16842904; // 0x1010098
+    field public static final int textColorAlertDialogListItem = 16843526; // 0x1010306
+    field public static final int textColorHighlight = 16842905; // 0x1010099
+    field public static final int textColorHighlightInverse = 16843599; // 0x101034f
+    field public static final int textColorHint = 16842906; // 0x101009a
+    field public static final int textColorHintInverse = 16842815; // 0x101003f
+    field public static final int textColorLink = 16842907; // 0x101009b
+    field public static final int textColorLinkInverse = 16843600; // 0x1010350
+    field public static final int textColorPrimary = 16842806; // 0x1010036
+    field public static final int textColorPrimaryDisableOnly = 16842807; // 0x1010037
+    field public static final int textColorPrimaryInverse = 16842809; // 0x1010039
+    field public static final int textColorPrimaryInverseDisableOnly = 16843403; // 0x101028b
+    field public static final int textColorPrimaryInverseNoDisable = 16842813; // 0x101003d
+    field public static final int textColorPrimaryNoDisable = 16842811; // 0x101003b
+    field public static final int textColorSecondary = 16842808; // 0x1010038
+    field public static final int textColorSecondaryInverse = 16842810; // 0x101003a
+    field public static final int textColorSecondaryInverseNoDisable = 16842814; // 0x101003e
+    field public static final int textColorSecondaryNoDisable = 16842812; // 0x101003c
+    field public static final int textColorTertiary = 16843282; // 0x1010212
+    field public static final int textColorTertiaryInverse = 16843283; // 0x1010213
+    field public static final int textCursorDrawable = 16843618; // 0x1010362
+    field public static final int textDirection = 16843696; // 0x10103b0
+    field public static final int textEditNoPasteWindowLayout = 16843541; // 0x1010315
+    field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314
+    field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f
+    field public static final int textEditSidePasteWindowLayout = 16843614; // 0x101035e
+    field public static final int textEditSuggestionItemLayout = 16843636; // 0x1010374
+    field public static final int textFilterEnabled = 16843007; // 0x10100ff
+    field public static final int textFontWeight = 16844165; // 0x1010585
+    field public static final int textIsSelectable = 16843542; // 0x1010316
+    field public static final int textLocale = 16844178; // 0x1010592
+    field public static final int textOff = 16843045; // 0x1010125
+    field public static final int textOn = 16843044; // 0x1010124
+    field public static final int textScaleX = 16843089; // 0x1010151
+    field public static final int textSelectHandle = 16843463; // 0x10102c7
+    field public static final int textSelectHandleLeft = 16843461; // 0x10102c5
+    field public static final int textSelectHandleRight = 16843462; // 0x10102c6
+    field public static final int textSelectHandleWindowStyle = 16843464; // 0x10102c8
+    field public static final int textSize = 16842901; // 0x1010095
+    field public static final int textStyle = 16842903; // 0x1010097
+    field public static final int textSuggestionsWindowStyle = 16843635; // 0x1010373
+    field public static final int textViewStyle = 16842884; // 0x1010084
+    field public static final int theme = 16842752; // 0x1010000
+    field public static final int thickness = 16843360; // 0x1010260
+    field public static final int thicknessRatio = 16843164; // 0x101019c
+    field public static final int thumb = 16843074; // 0x1010142
+    field public static final int thumbOffset = 16843075; // 0x1010143
+    field public static final int thumbPosition = 16844005; // 0x10104e5
+    field public static final int thumbTextPadding = 16843634; // 0x1010372
+    field public static final int thumbTint = 16843889; // 0x1010471
+    field public static final int thumbTintMode = 16843890; // 0x1010472
+    field public static final int thumbnail = 16843429; // 0x10102a5
+    field public static final int tickMark = 16844042; // 0x101050a
+    field public static final int tickMarkTint = 16844043; // 0x101050b
+    field public static final int tickMarkTintMode = 16844044; // 0x101050c
+    field public static final int tileMode = 16843265; // 0x1010201
+    field public static final int tileModeX = 16843895; // 0x1010477
+    field public static final int tileModeY = 16843896; // 0x1010478
+    field public static final int timePickerDialogTheme = 16843934; // 0x101049e
+    field public static final int timePickerMode = 16843956; // 0x10104b4
+    field public static final int timePickerStyle = 16843933; // 0x101049d
+    field public static final int timeZone = 16843724; // 0x10103cc
+    field public static final int tint = 16843041; // 0x1010121
+    field public static final int tintMode = 16843771; // 0x10103fb
+    field public static final int title = 16843233; // 0x10101e1
+    field public static final int titleCondensed = 16843234; // 0x10101e2
+    field public static final int titleMargin = 16844024; // 0x10104f8
+    field public static final int titleMarginBottom = 16844028; // 0x10104fc
+    field public static final int titleMarginEnd = 16844026; // 0x10104fa
+    field public static final int titleMarginStart = 16844025; // 0x10104f9
+    field public static final int titleMarginTop = 16844027; // 0x10104fb
+    field public static final int titleTextAppearance = 16843822; // 0x101042e
+    field public static final int titleTextColor = 16844003; // 0x10104e3
+    field public static final int titleTextStyle = 16843512; // 0x10102f8
+    field public static final int toAlpha = 16843211; // 0x10101cb
+    field public static final int toDegrees = 16843188; // 0x10101b4
+    field public static final int toId = 16843849; // 0x1010449
+    field public static final int toScene = 16843742; // 0x10103de
+    field public static final int toXDelta = 16843207; // 0x10101c7
+    field public static final int toXScale = 16843203; // 0x10101c3
+    field public static final int toYDelta = 16843209; // 0x10101c9
+    field public static final int toYScale = 16843205; // 0x10101c5
+    field public static final int toolbarStyle = 16843946; // 0x10104aa
+    field public static final int tooltipText = 16844084; // 0x1010534
+    field public static final int top = 16843182; // 0x10101ae
+    field public static final int topBright = 16842955; // 0x10100cb
+    field public static final int topDark = 16842951; // 0x10100c7
+    field public static final int topLeftRadius = 16843177; // 0x10101a9
+    field public static final int topOffset = 16843352; // 0x1010258
+    field public static final int topRightRadius = 16843178; // 0x10101aa
+    field public static final int touchscreenBlocksFocus = 16843919; // 0x101048f
+    field public static final int track = 16843631; // 0x101036f
+    field public static final int trackTint = 16843993; // 0x10104d9
+    field public static final int trackTintMode = 16843994; // 0x10104da
+    field public static final int transcriptMode = 16843008; // 0x1010100
+    field public static final int transformPivotX = 16843552; // 0x1010320
+    field public static final int transformPivotY = 16843553; // 0x1010321
+    field public static final int transition = 16843743; // 0x10103df
+    field public static final int transitionGroup = 16843777; // 0x1010401
+    field public static final int transitionName = 16843776; // 0x1010400
+    field public static final int transitionOrdering = 16843744; // 0x10103e0
+    field public static final int transitionVisibilityMode = 16843900; // 0x101047c
+    field public static final int translateX = 16843866; // 0x101045a
+    field public static final int translateY = 16843867; // 0x101045b
+    field public static final int translationX = 16843554; // 0x1010322
+    field public static final int translationY = 16843555; // 0x1010323
+    field public static final int translationZ = 16843770; // 0x10103fa
+    field public static final int trimPathEnd = 16843785; // 0x1010409
+    field public static final int trimPathOffset = 16843786; // 0x101040a
+    field public static final int trimPathStart = 16843784; // 0x1010408
+    field public static final int ttcIndex = 16844143; // 0x101056f
+    field public static final int tunerCount = 16844061; // 0x101051d
+    field public static final int turnScreenOn = 16844138; // 0x101056a
+    field public static final int type = 16843169; // 0x10101a1
+    field public static final int typeface = 16842902; // 0x1010096
+    field public static final int uiOptions = 16843672; // 0x1010398
+    field public static final int uncertainGestureColor = 16843382; // 0x1010276
+    field @Deprecated public static final int unfocusedMonthDateColor = 16843588; // 0x1010344
+    field public static final int unselectedAlpha = 16843278; // 0x101020e
+    field public static final int updatePeriodMillis = 16843344; // 0x1010250
+    field public static final int use32bitAbi = 16844053; // 0x1010515
+    field public static final int useAppZygote = 16844183; // 0x1010597
+    field public static final int useDefaultMargins = 16843641; // 0x1010379
+    field public static final int useEmbeddedDex = 16844190; // 0x101059e
+    field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
+    field public static final int useLevel = 16843167; // 0x101019f
+    field public static final int userVisible = 16843409; // 0x1010291
+    field public static final int usesCleartextTraffic = 16844012; // 0x10104ec
+    field public static final int usesPermissionFlags = 16844356; // 0x1010644
+    field public static final int value = 16842788; // 0x1010024
+    field public static final int valueFrom = 16843486; // 0x10102de
+    field public static final int valueTo = 16843487; // 0x10102df
+    field public static final int valueType = 16843488; // 0x10102e0
+    field public static final int variablePadding = 16843157; // 0x1010195
+    field public static final int vendor = 16843751; // 0x10103e7
+    field public static final int version = 16844057; // 0x1010519
+    field public static final int versionCode = 16843291; // 0x101021b
+    field public static final int versionCodeMajor = 16844150; // 0x1010576
+    field public static final int versionMajor = 16844151; // 0x1010577
+    field public static final int versionName = 16843292; // 0x101021c
+    field @Deprecated public static final int verticalCorrection = 16843322; // 0x101023a
+    field public static final int verticalDivider = 16843054; // 0x101012e
+    field @Deprecated public static final int verticalGap = 16843328; // 0x1010240
+    field public static final int verticalScrollbarPosition = 16843572; // 0x1010334
+    field public static final int verticalSpacing = 16843029; // 0x1010115
+    field public static final int viewportHeight = 16843779; // 0x1010403
+    field public static final int viewportWidth = 16843778; // 0x1010402
+    field public static final int visibility = 16842972; // 0x10100dc
+    field public static final int visible = 16843156; // 0x1010194
+    field public static final int visibleToInstantApps = 16844081; // 0x1010531
+    field public static final int vmSafeMode = 16843448; // 0x10102b8
+    field public static final int voiceIcon = 16843908; // 0x1010484
+    field public static final int voiceLanguage = 16843349; // 0x1010255
+    field public static final int voiceLanguageModel = 16843347; // 0x1010253
+    field public static final int voiceMaxResults = 16843350; // 0x1010256
+    field public static final int voicePromptText = 16843348; // 0x1010254
+    field public static final int voiceSearchMode = 16843346; // 0x1010252
+    field public static final int wallpaperCloseEnterAnimation = 16843413; // 0x1010295
+    field public static final int wallpaperCloseExitAnimation = 16843414; // 0x1010296
+    field public static final int wallpaperIntraCloseEnterAnimation = 16843417; // 0x1010299
+    field public static final int wallpaperIntraCloseExitAnimation = 16843418; // 0x101029a
+    field public static final int wallpaperIntraOpenEnterAnimation = 16843415; // 0x1010297
+    field public static final int wallpaperIntraOpenExitAnimation = 16843416; // 0x1010298
+    field public static final int wallpaperOpenEnterAnimation = 16843411; // 0x1010293
+    field public static final int wallpaperOpenExitAnimation = 16843412; // 0x1010294
+    field public static final int webTextViewStyle = 16843449; // 0x10102b9
+    field public static final int webViewStyle = 16842885; // 0x1010085
+    field public static final int weekDayTextAppearance = 16843592; // 0x1010348
+    field @Deprecated public static final int weekNumberColor = 16843589; // 0x1010345
+    field @Deprecated public static final int weekSeparatorLineColor = 16843590; // 0x1010346
+    field public static final int weightSum = 16843048; // 0x1010128
+    field public static final int widgetCategory = 16843716; // 0x10103c4
+    field public static final int widgetFeatures = 16844153; // 0x1010579
+    field public static final int widgetLayout = 16843243; // 0x10101eb
+    field public static final int width = 16843097; // 0x1010159
+    field public static final int windowActionBar = 16843469; // 0x10102cd
+    field public static final int windowActionBarOverlay = 16843492; // 0x10102e4
+    field public static final int windowActionModeOverlay = 16843485; // 0x10102dd
+    field public static final int windowActivityTransitions = 16843981; // 0x10104cd
+    field public static final int windowAllowEnterTransitionOverlap = 16843836; // 0x101043c
+    field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b
+    field public static final int windowAnimationStyle = 16842926; // 0x10100ae
+    field public static final int windowBackground = 16842836; // 0x1010054
+    field public static final int windowBackgroundBlurRadius = 16844331; // 0x101062b
+    field public static final int windowBackgroundFallback = 16844035; // 0x1010503
+    field public static final int windowBlurBehindEnabled = 16844316; // 0x101061c
+    field public static final int windowBlurBehindRadius = 16844315; // 0x101061b
+    field public static final int windowClipToOutline = 16843947; // 0x10104ab
+    field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b
+    field public static final int windowContentOverlay = 16842841; // 0x1010059
+    field public static final int windowContentTransitionManager = 16843769; // 0x10103f9
+    field public static final int windowContentTransitions = 16843768; // 0x10103f8
+    field public static final int windowDisablePreview = 16843298; // 0x1010222
+    field public static final int windowDrawsSystemBarBackgrounds = 16843856; // 0x1010450
+    field public static final int windowElevation = 16843920; // 0x1010490
+    field public static final int windowEnableSplitTouch = 16843543; // 0x1010317
+    field public static final int windowEnterAnimation = 16842932; // 0x10100b4
+    field public static final int windowEnterTransition = 16843831; // 0x1010437
+    field public static final int windowExitAnimation = 16842933; // 0x10100b5
+    field public static final int windowExitTransition = 16843832; // 0x1010438
+    field public static final int windowFrame = 16842837; // 0x1010055
+    field public static final int windowFullscreen = 16843277; // 0x101020d
+    field public static final int windowHideAnimation = 16842935; // 0x10100b7
+    field public static final int windowIsFloating = 16842839; // 0x1010057
+    field public static final int windowIsTranslucent = 16842840; // 0x1010058
+    field public static final int windowLayoutAffinity = 16844313; // 0x1010619
+    field public static final int windowLayoutInDisplayCutoutMode = 16844166; // 0x1010586
+    field public static final int windowLightNavigationBar = 16844140; // 0x101056c
+    field public static final int windowLightStatusBar = 16844000; // 0x10104e0
+    field public static final int windowMinWidthMajor = 16843606; // 0x1010356
+    field public static final int windowMinWidthMinor = 16843607; // 0x1010357
+    field public static final int windowNoDisplay = 16843294; // 0x101021e
+    field public static final int windowNoTitle = 16842838; // 0x1010056
+    field @Deprecated public static final int windowOverscan = 16843727; // 0x10103cf
+    field public static final int windowReenterTransition = 16843951; // 0x10104af
+    field public static final int windowReturnTransition = 16843950; // 0x10104ae
+    field public static final int windowSharedElementEnterTransition = 16843833; // 0x1010439
+    field public static final int windowSharedElementExitTransition = 16843834; // 0x101043a
+    field public static final int windowSharedElementReenterTransition = 16843953; // 0x10104b1
+    field public static final int windowSharedElementReturnTransition = 16843952; // 0x10104b0
+    field public static final int windowSharedElementsUseOverlay = 16843963; // 0x10104bb
+    field public static final int windowShowAnimation = 16842934; // 0x10100b6
+    field public static final int windowShowWallpaper = 16843410; // 0x1010292
+    field public static final int windowSoftInputMode = 16843307; // 0x101022b
+    field public static final int windowSplashScreenAnimatedIcon = 16844333; // 0x101062d
+    field public static final int windowSplashScreenAnimationDuration = 16844334; // 0x101062e
+    field public static final int windowSplashScreenBackground = 16844332; // 0x101062c
+    field public static final int windowSplashScreenBrandingImage = 16844335; // 0x101062f
+    field public static final int windowSplashScreenIconBackgroundColor = 16844336; // 0x1010630
+    field @Deprecated public static final int windowSplashscreenContent = 16844132; // 0x1010564
+    field @Deprecated public static final int windowSwipeToDismiss = 16843763; // 0x10103f3
+    field public static final int windowTitleBackgroundStyle = 16842844; // 0x101005c
+    field public static final int windowTitleSize = 16842842; // 0x101005a
+    field public static final int windowTitleStyle = 16842843; // 0x101005b
+    field public static final int windowTransitionBackgroundFadeDuration = 16843873; // 0x1010461
+    field public static final int windowTranslucentNavigation = 16843760; // 0x10103f0
+    field public static final int windowTranslucentStatus = 16843759; // 0x10103ef
+    field public static final int writePermission = 16842760; // 0x1010008
+    field public static final int x = 16842924; // 0x10100ac
+    field public static final int xlargeScreens = 16843455; // 0x10102bf
+    field public static final int y = 16842925; // 0x10100ad
+    field @Deprecated public static final int yearListItemTextAppearance = 16843929; // 0x1010499
+    field @Deprecated public static final int yearListSelectorColor = 16843930; // 0x101049a
+    field public static final int yesNoPreferenceStyle = 16842896; // 0x1010090
+    field public static final int zAdjustment = 16843201; // 0x10101c1
+    field public static final int zygotePreloadName = 16844189; // 0x101059d
+  }
+
+  public static final class R.bool {
+    ctor public R.bool();
+  }
+
+  public static final class R.color {
+    ctor public R.color();
+    field public static final int background_dark = 17170446; // 0x106000e
+    field public static final int background_light = 17170447; // 0x106000f
+    field public static final int black = 17170444; // 0x106000c
+    field public static final int darker_gray = 17170432; // 0x1060000
+    field public static final int holo_blue_bright = 17170459; // 0x106001b
+    field public static final int holo_blue_dark = 17170451; // 0x1060013
+    field public static final int holo_blue_light = 17170450; // 0x1060012
+    field public static final int holo_green_dark = 17170453; // 0x1060015
+    field public static final int holo_green_light = 17170452; // 0x1060014
+    field public static final int holo_orange_dark = 17170457; // 0x1060019
+    field public static final int holo_orange_light = 17170456; // 0x1060018
+    field public static final int holo_purple = 17170458; // 0x106001a
+    field public static final int holo_red_dark = 17170455; // 0x1060017
+    field public static final int holo_red_light = 17170454; // 0x1060016
+    field @Deprecated public static final int primary_text_dark = 17170433; // 0x1060001
+    field @Deprecated public static final int primary_text_dark_nodisable = 17170434; // 0x1060002
+    field @Deprecated public static final int primary_text_light = 17170435; // 0x1060003
+    field @Deprecated public static final int primary_text_light_nodisable = 17170436; // 0x1060004
+    field @Deprecated public static final int secondary_text_dark = 17170437; // 0x1060005
+    field @Deprecated public static final int secondary_text_dark_nodisable = 17170438; // 0x1060006
+    field @Deprecated public static final int secondary_text_light = 17170439; // 0x1060007
+    field @Deprecated public static final int secondary_text_light_nodisable = 17170440; // 0x1060008
+    field public static final int system_accent1_0 = 17170487; // 0x1060037
+    field public static final int system_accent1_10 = 17170488; // 0x1060038
+    field public static final int system_accent1_100 = 17170490; // 0x106003a
+    field public static final int system_accent1_1000 = 17170499; // 0x1060043
+    field public static final int system_accent1_200 = 17170491; // 0x106003b
+    field public static final int system_accent1_300 = 17170492; // 0x106003c
+    field public static final int system_accent1_400 = 17170493; // 0x106003d
+    field public static final int system_accent1_50 = 17170489; // 0x1060039
+    field public static final int system_accent1_500 = 17170494; // 0x106003e
+    field public static final int system_accent1_600 = 17170495; // 0x106003f
+    field public static final int system_accent1_700 = 17170496; // 0x1060040
+    field public static final int system_accent1_800 = 17170497; // 0x1060041
+    field public static final int system_accent1_900 = 17170498; // 0x1060042
+    field public static final int system_accent2_0 = 17170500; // 0x1060044
+    field public static final int system_accent2_10 = 17170501; // 0x1060045
+    field public static final int system_accent2_100 = 17170503; // 0x1060047
+    field public static final int system_accent2_1000 = 17170512; // 0x1060050
+    field public static final int system_accent2_200 = 17170504; // 0x1060048
+    field public static final int system_accent2_300 = 17170505; // 0x1060049
+    field public static final int system_accent2_400 = 17170506; // 0x106004a
+    field public static final int system_accent2_50 = 17170502; // 0x1060046
+    field public static final int system_accent2_500 = 17170507; // 0x106004b
+    field public static final int system_accent2_600 = 17170508; // 0x106004c
+    field public static final int system_accent2_700 = 17170509; // 0x106004d
+    field public static final int system_accent2_800 = 17170510; // 0x106004e
+    field public static final int system_accent2_900 = 17170511; // 0x106004f
+    field public static final int system_accent3_0 = 17170513; // 0x1060051
+    field public static final int system_accent3_10 = 17170514; // 0x1060052
+    field public static final int system_accent3_100 = 17170516; // 0x1060054
+    field public static final int system_accent3_1000 = 17170525; // 0x106005d
+    field public static final int system_accent3_200 = 17170517; // 0x1060055
+    field public static final int system_accent3_300 = 17170518; // 0x1060056
+    field public static final int system_accent3_400 = 17170519; // 0x1060057
+    field public static final int system_accent3_50 = 17170515; // 0x1060053
+    field public static final int system_accent3_500 = 17170520; // 0x1060058
+    field public static final int system_accent3_600 = 17170521; // 0x1060059
+    field public static final int system_accent3_700 = 17170522; // 0x106005a
+    field public static final int system_accent3_800 = 17170523; // 0x106005b
+    field public static final int system_accent3_900 = 17170524; // 0x106005c
+    field public static final int system_neutral1_0 = 17170461; // 0x106001d
+    field public static final int system_neutral1_10 = 17170462; // 0x106001e
+    field public static final int system_neutral1_100 = 17170464; // 0x1060020
+    field public static final int system_neutral1_1000 = 17170473; // 0x1060029
+    field public static final int system_neutral1_200 = 17170465; // 0x1060021
+    field public static final int system_neutral1_300 = 17170466; // 0x1060022
+    field public static final int system_neutral1_400 = 17170467; // 0x1060023
+    field public static final int system_neutral1_50 = 17170463; // 0x106001f
+    field public static final int system_neutral1_500 = 17170468; // 0x1060024
+    field public static final int system_neutral1_600 = 17170469; // 0x1060025
+    field public static final int system_neutral1_700 = 17170470; // 0x1060026
+    field public static final int system_neutral1_800 = 17170471; // 0x1060027
+    field public static final int system_neutral1_900 = 17170472; // 0x1060028
+    field public static final int system_neutral2_0 = 17170474; // 0x106002a
+    field public static final int system_neutral2_10 = 17170475; // 0x106002b
+    field public static final int system_neutral2_100 = 17170477; // 0x106002d
+    field public static final int system_neutral2_1000 = 17170486; // 0x1060036
+    field public static final int system_neutral2_200 = 17170478; // 0x106002e
+    field public static final int system_neutral2_300 = 17170479; // 0x106002f
+    field public static final int system_neutral2_400 = 17170480; // 0x1060030
+    field public static final int system_neutral2_50 = 17170476; // 0x106002c
+    field public static final int system_neutral2_500 = 17170481; // 0x1060031
+    field public static final int system_neutral2_600 = 17170482; // 0x1060032
+    field public static final int system_neutral2_700 = 17170483; // 0x1060033
+    field public static final int system_neutral2_800 = 17170484; // 0x1060034
+    field public static final int system_neutral2_900 = 17170485; // 0x1060035
+    field public static final int tab_indicator_text = 17170441; // 0x1060009
+    field @Deprecated public static final int tertiary_text_dark = 17170448; // 0x1060010
+    field @Deprecated public static final int tertiary_text_light = 17170449; // 0x1060011
+    field public static final int transparent = 17170445; // 0x106000d
+    field public static final int white = 17170443; // 0x106000b
+    field public static final int widget_edittext_dark = 17170442; // 0x106000a
+  }
+
+  public static final class R.dimen {
+    ctor public R.dimen();
+    field public static final int app_icon_size = 17104896; // 0x1050000
+    field public static final int dialog_min_width_major = 17104899; // 0x1050003
+    field public static final int dialog_min_width_minor = 17104900; // 0x1050004
+    field public static final int notification_large_icon_height = 17104902; // 0x1050006
+    field public static final int notification_large_icon_width = 17104901; // 0x1050005
+    field public static final int system_app_widget_background_radius = 17104904; // 0x1050008
+    field public static final int system_app_widget_inner_radius = 17104905; // 0x1050009
+    field public static final int thumbnail_height = 17104897; // 0x1050001
+    field public static final int thumbnail_width = 17104898; // 0x1050002
+  }
+
+  public static final class R.drawable {
+    ctor public R.drawable();
+    field public static final int alert_dark_frame = 17301504; // 0x1080000
+    field public static final int alert_light_frame = 17301505; // 0x1080001
+    field public static final int arrow_down_float = 17301506; // 0x1080002
+    field public static final int arrow_up_float = 17301507; // 0x1080003
+    field public static final int bottom_bar = 17301658; // 0x108009a
+    field public static final int btn_default = 17301508; // 0x1080004
+    field public static final int btn_default_small = 17301509; // 0x1080005
+    field public static final int btn_dialog = 17301527; // 0x1080017
+    field public static final int btn_dropdown = 17301510; // 0x1080006
+    field public static final int btn_minus = 17301511; // 0x1080007
+    field public static final int btn_plus = 17301512; // 0x1080008
+    field public static final int btn_radio = 17301513; // 0x1080009
+    field public static final int btn_star = 17301514; // 0x108000a
+    field public static final int btn_star_big_off = 17301515; // 0x108000b
+    field public static final int btn_star_big_on = 17301516; // 0x108000c
+    field public static final int button_onoff_indicator_off = 17301518; // 0x108000e
+    field public static final int button_onoff_indicator_on = 17301517; // 0x108000d
+    field public static final int checkbox_off_background = 17301519; // 0x108000f
+    field public static final int checkbox_on_background = 17301520; // 0x1080010
+    field public static final int dark_header = 17301669; // 0x10800a5
+    field public static final int dialog_frame = 17301521; // 0x1080011
+    field public static final int dialog_holo_dark_frame = 17301682; // 0x10800b2
+    field public static final int dialog_holo_light_frame = 17301683; // 0x10800b3
+    field public static final int divider_horizontal_bright = 17301522; // 0x1080012
+    field public static final int divider_horizontal_dark = 17301524; // 0x1080014
+    field public static final int divider_horizontal_dim_dark = 17301525; // 0x1080015
+    field public static final int divider_horizontal_textfield = 17301523; // 0x1080013
+    field public static final int edit_text = 17301526; // 0x1080016
+    field public static final int editbox_background = 17301528; // 0x1080018
+    field public static final int editbox_background_normal = 17301529; // 0x1080019
+    field public static final int editbox_dropdown_dark_frame = 17301530; // 0x108001a
+    field public static final int editbox_dropdown_light_frame = 17301531; // 0x108001b
+    field public static final int gallery_thumb = 17301532; // 0x108001c
+    field public static final int ic_btn_speak_now = 17301668; // 0x10800a4
+    field public static final int ic_delete = 17301533; // 0x108001d
+    field public static final int ic_dialog_alert = 17301543; // 0x1080027
+    field public static final int ic_dialog_dialer = 17301544; // 0x1080028
+    field public static final int ic_dialog_email = 17301545; // 0x1080029
+    field public static final int ic_dialog_info = 17301659; // 0x108009b
+    field public static final int ic_dialog_map = 17301546; // 0x108002a
+    field public static final int ic_input_add = 17301547; // 0x108002b
+    field public static final int ic_input_delete = 17301548; // 0x108002c
+    field public static final int ic_input_get = 17301549; // 0x108002d
+    field public static final int ic_lock_idle_alarm = 17301550; // 0x108002e
+    field public static final int ic_lock_idle_charging = 17301534; // 0x108001e
+    field public static final int ic_lock_idle_lock = 17301535; // 0x108001f
+    field public static final int ic_lock_idle_low_battery = 17301536; // 0x1080020
+    field public static final int ic_lock_lock = 17301551; // 0x108002f
+    field public static final int ic_lock_power_off = 17301552; // 0x1080030
+    field public static final int ic_lock_silent_mode = 17301553; // 0x1080031
+    field public static final int ic_lock_silent_mode_off = 17301554; // 0x1080032
+    field public static final int ic_media_ff = 17301537; // 0x1080021
+    field public static final int ic_media_next = 17301538; // 0x1080022
+    field public static final int ic_media_pause = 17301539; // 0x1080023
+    field public static final int ic_media_play = 17301540; // 0x1080024
+    field public static final int ic_media_previous = 17301541; // 0x1080025
+    field public static final int ic_media_rew = 17301542; // 0x1080026
+    field public static final int ic_menu_add = 17301555; // 0x1080033
+    field public static final int ic_menu_agenda = 17301556; // 0x1080034
+    field public static final int ic_menu_always_landscape_portrait = 17301557; // 0x1080035
+    field public static final int ic_menu_call = 17301558; // 0x1080036
+    field public static final int ic_menu_camera = 17301559; // 0x1080037
+    field public static final int ic_menu_close_clear_cancel = 17301560; // 0x1080038
+    field public static final int ic_menu_compass = 17301561; // 0x1080039
+    field public static final int ic_menu_crop = 17301562; // 0x108003a
+    field public static final int ic_menu_day = 17301563; // 0x108003b
+    field public static final int ic_menu_delete = 17301564; // 0x108003c
+    field public static final int ic_menu_directions = 17301565; // 0x108003d
+    field public static final int ic_menu_edit = 17301566; // 0x108003e
+    field public static final int ic_menu_gallery = 17301567; // 0x108003f
+    field public static final int ic_menu_help = 17301568; // 0x1080040
+    field public static final int ic_menu_info_details = 17301569; // 0x1080041
+    field public static final int ic_menu_manage = 17301570; // 0x1080042
+    field public static final int ic_menu_mapmode = 17301571; // 0x1080043
+    field public static final int ic_menu_month = 17301572; // 0x1080044
+    field public static final int ic_menu_more = 17301573; // 0x1080045
+    field public static final int ic_menu_my_calendar = 17301574; // 0x1080046
+    field public static final int ic_menu_mylocation = 17301575; // 0x1080047
+    field public static final int ic_menu_myplaces = 17301576; // 0x1080048
+    field public static final int ic_menu_preferences = 17301577; // 0x1080049
+    field public static final int ic_menu_recent_history = 17301578; // 0x108004a
+    field public static final int ic_menu_report_image = 17301579; // 0x108004b
+    field public static final int ic_menu_revert = 17301580; // 0x108004c
+    field public static final int ic_menu_rotate = 17301581; // 0x108004d
+    field public static final int ic_menu_save = 17301582; // 0x108004e
+    field public static final int ic_menu_search = 17301583; // 0x108004f
+    field public static final int ic_menu_send = 17301584; // 0x1080050
+    field public static final int ic_menu_set_as = 17301585; // 0x1080051
+    field public static final int ic_menu_share = 17301586; // 0x1080052
+    field public static final int ic_menu_slideshow = 17301587; // 0x1080053
+    field public static final int ic_menu_sort_alphabetically = 17301660; // 0x108009c
+    field public static final int ic_menu_sort_by_size = 17301661; // 0x108009d
+    field public static final int ic_menu_today = 17301588; // 0x1080054
+    field public static final int ic_menu_upload = 17301589; // 0x1080055
+    field public static final int ic_menu_upload_you_tube = 17301590; // 0x1080056
+    field public static final int ic_menu_view = 17301591; // 0x1080057
+    field public static final int ic_menu_week = 17301592; // 0x1080058
+    field public static final int ic_menu_zoom = 17301593; // 0x1080059
+    field public static final int ic_notification_clear_all = 17301594; // 0x108005a
+    field public static final int ic_notification_overlay = 17301595; // 0x108005b
+    field public static final int ic_partial_secure = 17301596; // 0x108005c
+    field public static final int ic_popup_disk_full = 17301597; // 0x108005d
+    field public static final int ic_popup_reminder = 17301598; // 0x108005e
+    field public static final int ic_popup_sync = 17301599; // 0x108005f
+    field public static final int ic_search_category_default = 17301600; // 0x1080060
+    field public static final int ic_secure = 17301601; // 0x1080061
+    field public static final int list_selector_background = 17301602; // 0x1080062
+    field public static final int menu_frame = 17301603; // 0x1080063
+    field public static final int menu_full_frame = 17301604; // 0x1080064
+    field public static final int menuitem_background = 17301605; // 0x1080065
+    field public static final int picture_frame = 17301606; // 0x1080066
+    field public static final int presence_audio_away = 17301679; // 0x10800af
+    field public static final int presence_audio_busy = 17301680; // 0x10800b0
+    field public static final int presence_audio_online = 17301681; // 0x10800b1
+    field public static final int presence_away = 17301607; // 0x1080067
+    field public static final int presence_busy = 17301608; // 0x1080068
+    field public static final int presence_invisible = 17301609; // 0x1080069
+    field public static final int presence_offline = 17301610; // 0x108006a
+    field public static final int presence_online = 17301611; // 0x108006b
+    field public static final int presence_video_away = 17301676; // 0x10800ac
+    field public static final int presence_video_busy = 17301677; // 0x10800ad
+    field public static final int presence_video_online = 17301678; // 0x10800ae
+    field public static final int progress_horizontal = 17301612; // 0x108006c
+    field public static final int progress_indeterminate_horizontal = 17301613; // 0x108006d
+    field public static final int radiobutton_off_background = 17301614; // 0x108006e
+    field public static final int radiobutton_on_background = 17301615; // 0x108006f
+    field public static final int screen_background_dark = 17301656; // 0x1080098
+    field public static final int screen_background_dark_transparent = 17301673; // 0x10800a9
+    field public static final int screen_background_light = 17301657; // 0x1080099
+    field public static final int screen_background_light_transparent = 17301674; // 0x10800aa
+    field public static final int spinner_background = 17301616; // 0x1080070
+    field public static final int spinner_dropdown_background = 17301617; // 0x1080071
+    field public static final int star_big_off = 17301619; // 0x1080073
+    field public static final int star_big_on = 17301618; // 0x1080072
+    field public static final int star_off = 17301621; // 0x1080075
+    field public static final int star_on = 17301620; // 0x1080074
+    field public static final int stat_notify_call_mute = 17301622; // 0x1080076
+    field public static final int stat_notify_chat = 17301623; // 0x1080077
+    field public static final int stat_notify_error = 17301624; // 0x1080078
+    field public static final int stat_notify_missed_call = 17301631; // 0x108007f
+    field public static final int stat_notify_more = 17301625; // 0x1080079
+    field public static final int stat_notify_sdcard = 17301626; // 0x108007a
+    field public static final int stat_notify_sdcard_prepare = 17301675; // 0x10800ab
+    field public static final int stat_notify_sdcard_usb = 17301627; // 0x108007b
+    field public static final int stat_notify_sync = 17301628; // 0x108007c
+    field public static final int stat_notify_sync_noanim = 17301629; // 0x108007d
+    field public static final int stat_notify_voicemail = 17301630; // 0x108007e
+    field public static final int stat_sys_data_bluetooth = 17301632; // 0x1080080
+    field public static final int stat_sys_download = 17301633; // 0x1080081
+    field public static final int stat_sys_download_done = 17301634; // 0x1080082
+    field public static final int stat_sys_headset = 17301635; // 0x1080083
+    field @Deprecated public static final int stat_sys_phone_call = 17301636; // 0x1080084
+    field @Deprecated public static final int stat_sys_phone_call_forward = 17301637; // 0x1080085
+    field @Deprecated public static final int stat_sys_phone_call_on_hold = 17301638; // 0x1080086
+    field public static final int stat_sys_speakerphone = 17301639; // 0x1080087
+    field public static final int stat_sys_upload = 17301640; // 0x1080088
+    field public static final int stat_sys_upload_done = 17301641; // 0x1080089
+    field @Deprecated public static final int stat_sys_vp_phone_call = 17301671; // 0x10800a7
+    field @Deprecated public static final int stat_sys_vp_phone_call_on_hold = 17301672; // 0x10800a8
+    field public static final int stat_sys_warning = 17301642; // 0x108008a
+    field public static final int status_bar_item_app_background = 17301643; // 0x108008b
+    field public static final int status_bar_item_background = 17301644; // 0x108008c
+    field public static final int sym_action_call = 17301645; // 0x108008d
+    field public static final int sym_action_chat = 17301646; // 0x108008e
+    field public static final int sym_action_email = 17301647; // 0x108008f
+    field public static final int sym_call_incoming = 17301648; // 0x1080090
+    field public static final int sym_call_missed = 17301649; // 0x1080091
+    field public static final int sym_call_outgoing = 17301650; // 0x1080092
+    field public static final int sym_contact_card = 17301652; // 0x1080094
+    field public static final int sym_def_app_icon = 17301651; // 0x1080093
+    field public static final int title_bar = 17301653; // 0x1080095
+    field public static final int title_bar_tall = 17301670; // 0x10800a6
+    field public static final int toast_frame = 17301654; // 0x1080096
+    field public static final int zoom_plate = 17301655; // 0x1080097
+  }
+
+  public static final class R.fraction {
+    ctor public R.fraction();
+  }
+
+  public static final class R.id {
+    ctor public R.id();
+    field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
+    field public static final int accessibilityActionDragCancel = 16908375; // 0x1020057
+    field public static final int accessibilityActionDragDrop = 16908374; // 0x1020056
+    field public static final int accessibilityActionDragStart = 16908373; // 0x1020055
+    field public static final int accessibilityActionHideTooltip = 16908357; // 0x1020045
+    field public static final int accessibilityActionImeEnter = 16908372; // 0x1020054
+    field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042
+    field public static final int accessibilityActionPageDown = 16908359; // 0x1020047
+    field public static final int accessibilityActionPageLeft = 16908360; // 0x1020048
+    field public static final int accessibilityActionPageRight = 16908361; // 0x1020049
+    field public static final int accessibilityActionPageUp = 16908358; // 0x1020046
+    field public static final int accessibilityActionPressAndHold = 16908362; // 0x102004a
+    field public static final int accessibilityActionScrollDown = 16908346; // 0x102003a
+    field public static final int accessibilityActionScrollLeft = 16908345; // 0x1020039
+    field public static final int accessibilityActionScrollRight = 16908347; // 0x102003b
+    field public static final int accessibilityActionScrollToPosition = 16908343; // 0x1020037
+    field public static final int accessibilityActionScrollUp = 16908344; // 0x1020038
+    field public static final int accessibilityActionSetProgress = 16908349; // 0x102003d
+    field public static final int accessibilityActionShowOnScreen = 16908342; // 0x1020036
+    field public static final int accessibilityActionShowTooltip = 16908356; // 0x1020044
+    field public static final int accessibilitySystemActionBack = 16908363; // 0x102004b
+    field public static final int accessibilitySystemActionHome = 16908364; // 0x102004c
+    field public static final int accessibilitySystemActionLockScreen = 16908370; // 0x1020052
+    field public static final int accessibilitySystemActionNotifications = 16908366; // 0x102004e
+    field public static final int accessibilitySystemActionPowerDialog = 16908368; // 0x1020050
+    field public static final int accessibilitySystemActionQuickSettings = 16908367; // 0x102004f
+    field public static final int accessibilitySystemActionRecents = 16908365; // 0x102004d
+    field public static final int accessibilitySystemActionTakeScreenshot = 16908371; // 0x1020053
+    field public static final int accessibilitySystemActionToggleSplitScreen = 16908369; // 0x1020051
+    field public static final int addToDictionary = 16908330; // 0x102002a
+    field public static final int autofill = 16908355; // 0x1020043
+    field public static final int background = 16908288; // 0x1020000
+    field public static final int button1 = 16908313; // 0x1020019
+    field public static final int button2 = 16908314; // 0x102001a
+    field public static final int button3 = 16908315; // 0x102001b
+    field public static final int candidatesArea = 16908317; // 0x102001d
+    field public static final int checkbox = 16908289; // 0x1020001
+    field public static final int closeButton = 16908327; // 0x1020027
+    field public static final int content = 16908290; // 0x1020002
+    field public static final int copy = 16908321; // 0x1020021
+    field public static final int copyUrl = 16908323; // 0x1020023
+    field public static final int custom = 16908331; // 0x102002b
+    field public static final int cut = 16908320; // 0x1020020
+    field public static final int edit = 16908291; // 0x1020003
+    field public static final int empty = 16908292; // 0x1020004
+    field public static final int extractArea = 16908316; // 0x102001c
+    field public static final int hint = 16908293; // 0x1020005
+    field public static final int home = 16908332; // 0x102002c
+    field public static final int icon = 16908294; // 0x1020006
+    field public static final int icon1 = 16908295; // 0x1020007
+    field public static final int icon2 = 16908296; // 0x1020008
+    field public static final int icon_frame = 16908350; // 0x102003e
+    field public static final int input = 16908297; // 0x1020009
+    field public static final int inputArea = 16908318; // 0x102001e
+    field public static final int inputExtractEditText = 16908325; // 0x1020025
+    field @Deprecated public static final int keyboardView = 16908326; // 0x1020026
+    field public static final int list = 16908298; // 0x102000a
+    field public static final int list_container = 16908351; // 0x102003f
+    field public static final int mask = 16908334; // 0x102002e
+    field public static final int message = 16908299; // 0x102000b
+    field public static final int navigationBarBackground = 16908336; // 0x1020030
+    field public static final int paste = 16908322; // 0x1020022
+    field public static final int pasteAsPlainText = 16908337; // 0x1020031
+    field public static final int primary = 16908300; // 0x102000c
+    field public static final int progress = 16908301; // 0x102000d
+    field public static final int redo = 16908339; // 0x1020033
+    field public static final int replaceText = 16908340; // 0x1020034
+    field public static final int secondaryProgress = 16908303; // 0x102000f
+    field public static final int selectAll = 16908319; // 0x102001f
+    field public static final int selectTextMode = 16908333; // 0x102002d
+    field public static final int selectedIcon = 16908302; // 0x102000e
+    field public static final int shareText = 16908341; // 0x1020035
+    field public static final int startSelectingText = 16908328; // 0x1020028
+    field public static final int statusBarBackground = 16908335; // 0x102002f
+    field public static final int stopSelectingText = 16908329; // 0x1020029
+    field public static final int summary = 16908304; // 0x1020010
+    field public static final int switchInputMethod = 16908324; // 0x1020024
+    field public static final int switch_widget = 16908352; // 0x1020040
+    field public static final int tabcontent = 16908305; // 0x1020011
+    field public static final int tabhost = 16908306; // 0x1020012
+    field public static final int tabs = 16908307; // 0x1020013
+    field public static final int text1 = 16908308; // 0x1020014
+    field public static final int text2 = 16908309; // 0x1020015
+    field public static final int textAssist = 16908353; // 0x1020041
+    field public static final int title = 16908310; // 0x1020016
+    field public static final int toggle = 16908311; // 0x1020017
+    field public static final int undo = 16908338; // 0x1020032
+    field public static final int widget_frame = 16908312; // 0x1020018
+  }
+
+  public static final class R.integer {
+    ctor public R.integer();
+    field public static final int config_longAnimTime = 17694722; // 0x10e0002
+    field public static final int config_mediumAnimTime = 17694721; // 0x10e0001
+    field public static final int config_shortAnimTime = 17694720; // 0x10e0000
+    field public static final int status_bar_notification_info_maxnum = 17694723; // 0x10e0003
+  }
+
+  public static final class R.interpolator {
+    ctor public R.interpolator();
+    field public static final int accelerate_cubic = 17563650; // 0x10c0002
+    field public static final int accelerate_decelerate = 17563654; // 0x10c0006
+    field public static final int accelerate_quad = 17563648; // 0x10c0000
+    field public static final int accelerate_quint = 17563652; // 0x10c0004
+    field public static final int anticipate = 17563655; // 0x10c0007
+    field public static final int anticipate_overshoot = 17563657; // 0x10c0009
+    field public static final int bounce = 17563658; // 0x10c000a
+    field public static final int cycle = 17563660; // 0x10c000c
+    field public static final int decelerate_cubic = 17563651; // 0x10c0003
+    field public static final int decelerate_quad = 17563649; // 0x10c0001
+    field public static final int decelerate_quint = 17563653; // 0x10c0005
+    field public static final int fast_out_extra_slow_in = 17563674; // 0x10c001a
+    field public static final int fast_out_linear_in = 17563663; // 0x10c000f
+    field public static final int fast_out_slow_in = 17563661; // 0x10c000d
+    field public static final int linear = 17563659; // 0x10c000b
+    field public static final int linear_out_slow_in = 17563662; // 0x10c000e
+    field public static final int overshoot = 17563656; // 0x10c0008
+  }
+
+  public static final class R.layout {
+    ctor public R.layout();
+    field public static final int activity_list_item = 17367040; // 0x1090000
+    field public static final int browser_link_context_header = 17367054; // 0x109000e
+    field public static final int expandable_list_content = 17367041; // 0x1090001
+    field public static final int list_content = 17367060; // 0x1090014
+    field public static final int preference_category = 17367042; // 0x1090002
+    field public static final int select_dialog_item = 17367057; // 0x1090011
+    field public static final int select_dialog_multichoice = 17367059; // 0x1090013
+    field public static final int select_dialog_singlechoice = 17367058; // 0x1090012
+    field public static final int simple_dropdown_item_1line = 17367050; // 0x109000a
+    field public static final int simple_expandable_list_item_1 = 17367046; // 0x1090006
+    field public static final int simple_expandable_list_item_2 = 17367047; // 0x1090007
+    field public static final int simple_gallery_item = 17367051; // 0x109000b
+    field public static final int simple_list_item_1 = 17367043; // 0x1090003
+    field public static final int simple_list_item_2 = 17367044; // 0x1090004
+    field public static final int simple_list_item_activated_1 = 17367062; // 0x1090016
+    field public static final int simple_list_item_activated_2 = 17367063; // 0x1090017
+    field public static final int simple_list_item_checked = 17367045; // 0x1090005
+    field public static final int simple_list_item_multiple_choice = 17367056; // 0x1090010
+    field public static final int simple_list_item_single_choice = 17367055; // 0x109000f
+    field public static final int simple_selectable_list_item = 17367061; // 0x1090015
+    field public static final int simple_spinner_dropdown_item = 17367049; // 0x1090009
+    field public static final int simple_spinner_item = 17367048; // 0x1090008
+    field public static final int test_list_item = 17367052; // 0x109000c
+    field public static final int two_line_list_item = 17367053; // 0x109000d
+  }
+
+  public static final class R.menu {
+    ctor public R.menu();
+  }
+
+  public static final class R.mipmap {
+    ctor public R.mipmap();
+    field public static final int sym_def_app_icon = 17629184; // 0x10d0000
+  }
+
+  public static final class R.plurals {
+    ctor public R.plurals();
+  }
+
+  public static final class R.raw {
+    ctor public R.raw();
+  }
+
+  public static final class R.string {
+    ctor public R.string();
+    field public static final int VideoView_error_button = 17039376; // 0x1040010
+    field public static final int VideoView_error_text_invalid_progressive_playback = 17039381; // 0x1040015
+    field public static final int VideoView_error_text_unknown = 17039377; // 0x1040011
+    field public static final int VideoView_error_title = 17039378; // 0x1040012
+    field public static final int autofill = 17039386; // 0x104001a
+    field public static final int cancel = 17039360; // 0x1040000
+    field public static final int copy = 17039361; // 0x1040001
+    field public static final int copyUrl = 17039362; // 0x1040002
+    field public static final int cut = 17039363; // 0x1040003
+    field public static final int defaultMsisdnAlphaTag = 17039365; // 0x1040005
+    field public static final int defaultVoiceMailAlphaTag = 17039364; // 0x1040004
+    field public static final int dialog_alert_title = 17039380; // 0x1040014
+    field public static final int emptyPhoneNumber = 17039366; // 0x1040006
+    field public static final int fingerprint_icon_content_description = 17039384; // 0x1040018
+    field public static final int httpErrorBadUrl = 17039367; // 0x1040007
+    field public static final int httpErrorUnsupportedScheme = 17039368; // 0x1040008
+    field @Deprecated public static final int no = 17039369; // 0x1040009
+    field public static final int ok = 17039370; // 0x104000a
+    field public static final int paste = 17039371; // 0x104000b
+    field public static final int paste_as_plain_text = 17039385; // 0x1040019
+    field public static final int search_go = 17039372; // 0x104000c
+    field public static final int selectAll = 17039373; // 0x104000d
+    field public static final int selectTextMode = 17039382; // 0x1040016
+    field public static final int status_bar_notification_info_overflow = 17039383; // 0x1040017
+    field public static final int unknownName = 17039374; // 0x104000e
+    field public static final int untitled = 17039375; // 0x104000f
+    field @Deprecated public static final int yes = 17039379; // 0x1040013
+  }
+
+  public static final class R.style {
+    ctor public R.style();
+    field public static final int Animation = 16973824; // 0x1030000
+    field public static final int Animation_Activity = 16973825; // 0x1030001
+    field public static final int Animation_Dialog = 16973826; // 0x1030002
+    field public static final int Animation_InputMethod = 16973910; // 0x1030056
+    field public static final int Animation_Toast = 16973828; // 0x1030004
+    field public static final int Animation_Translucent = 16973827; // 0x1030003
+    field public static final int DeviceDefault_ButtonBar = 16974287; // 0x10301cf
+    field public static final int DeviceDefault_ButtonBar_AlertDialog = 16974288; // 0x10301d0
+    field public static final int DeviceDefault_Light_ButtonBar = 16974290; // 0x10301d2
+    field public static final int DeviceDefault_Light_ButtonBar_AlertDialog = 16974291; // 0x10301d3
+    field public static final int DeviceDefault_Light_SegmentedButton = 16974292; // 0x10301d4
+    field public static final int DeviceDefault_SegmentedButton = 16974289; // 0x10301d1
+    field public static final int Holo_ButtonBar = 16974053; // 0x10300e5
+    field public static final int Holo_ButtonBar_AlertDialog = 16974055; // 0x10300e7
+    field public static final int Holo_Light_ButtonBar = 16974054; // 0x10300e6
+    field public static final int Holo_Light_ButtonBar_AlertDialog = 16974056; // 0x10300e8
+    field public static final int Holo_Light_SegmentedButton = 16974058; // 0x10300ea
+    field public static final int Holo_SegmentedButton = 16974057; // 0x10300e9
+    field public static final int MediaButton = 16973879; // 0x1030037
+    field public static final int MediaButton_Ffwd = 16973883; // 0x103003b
+    field public static final int MediaButton_Next = 16973881; // 0x1030039
+    field public static final int MediaButton_Pause = 16973885; // 0x103003d
+    field public static final int MediaButton_Play = 16973882; // 0x103003a
+    field public static final int MediaButton_Previous = 16973880; // 0x1030038
+    field public static final int MediaButton_Rew = 16973884; // 0x103003c
+    field public static final int TextAppearance = 16973886; // 0x103003e
+    field public static final int TextAppearance_DeviceDefault = 16974253; // 0x10301ad
+    field public static final int TextAppearance_DeviceDefault_DialogWindowTitle = 16974264; // 0x10301b8
+    field public static final int TextAppearance_DeviceDefault_Inverse = 16974254; // 0x10301ae
+    field public static final int TextAppearance_DeviceDefault_Large = 16974255; // 0x10301af
+    field public static final int TextAppearance_DeviceDefault_Large_Inverse = 16974256; // 0x10301b0
+    field public static final int TextAppearance_DeviceDefault_Medium = 16974257; // 0x10301b1
+    field public static final int TextAppearance_DeviceDefault_Medium_Inverse = 16974258; // 0x10301b2
+    field public static final int TextAppearance_DeviceDefault_SearchResult_Subtitle = 16974262; // 0x10301b6
+    field public static final int TextAppearance_DeviceDefault_SearchResult_Title = 16974261; // 0x10301b5
+    field public static final int TextAppearance_DeviceDefault_Small = 16974259; // 0x10301b3
+    field public static final int TextAppearance_DeviceDefault_Small_Inverse = 16974260; // 0x10301b4
+    field public static final int TextAppearance_DeviceDefault_Widget = 16974265; // 0x10301b9
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Menu = 16974286; // 0x10301ce
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle = 16974279; // 0x10301c7
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse = 16974283; // 0x10301cb
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title = 16974278; // 0x10301c6
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse = 16974282; // 0x10301ca
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle = 16974281; // 0x10301c9
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse = 16974285; // 0x10301cd
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title = 16974280; // 0x10301c8
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse = 16974284; // 0x10301cc
+    field public static final int TextAppearance_DeviceDefault_Widget_Button = 16974266; // 0x10301ba
+    field public static final int TextAppearance_DeviceDefault_Widget_DropDownHint = 16974271; // 0x10301bf
+    field public static final int TextAppearance_DeviceDefault_Widget_DropDownItem = 16974272; // 0x10301c0
+    field public static final int TextAppearance_DeviceDefault_Widget_EditText = 16974274; // 0x10301c2
+    field public static final int TextAppearance_DeviceDefault_Widget_IconMenu_Item = 16974267; // 0x10301bb
+    field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu = 16974275; // 0x10301c3
+    field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Large = 16974276; // 0x10301c4
+    field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Small = 16974277; // 0x10301c5
+    field public static final int TextAppearance_DeviceDefault_Widget_TabWidget = 16974268; // 0x10301bc
+    field public static final int TextAppearance_DeviceDefault_Widget_TextView = 16974269; // 0x10301bd
+    field public static final int TextAppearance_DeviceDefault_Widget_TextView_PopupMenu = 16974270; // 0x10301be
+    field public static final int TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem = 16974273; // 0x10301c1
+    field public static final int TextAppearance_DeviceDefault_WindowTitle = 16974263; // 0x10301b7
+    field public static final int TextAppearance_DialogWindowTitle = 16973889; // 0x1030041
+    field public static final int TextAppearance_Holo = 16974075; // 0x10300fb
+    field public static final int TextAppearance_Holo_DialogWindowTitle = 16974103; // 0x1030117
+    field public static final int TextAppearance_Holo_Inverse = 16974076; // 0x10300fc
+    field public static final int TextAppearance_Holo_Large = 16974077; // 0x10300fd
+    field public static final int TextAppearance_Holo_Large_Inverse = 16974078; // 0x10300fe
+    field public static final int TextAppearance_Holo_Medium = 16974079; // 0x10300ff
+    field public static final int TextAppearance_Holo_Medium_Inverse = 16974080; // 0x1030100
+    field public static final int TextAppearance_Holo_SearchResult_Subtitle = 16974084; // 0x1030104
+    field public static final int TextAppearance_Holo_SearchResult_Title = 16974083; // 0x1030103
+    field public static final int TextAppearance_Holo_Small = 16974081; // 0x1030101
+    field public static final int TextAppearance_Holo_Small_Inverse = 16974082; // 0x1030102
+    field public static final int TextAppearance_Holo_Widget = 16974085; // 0x1030105
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Menu = 16974112; // 0x1030120
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle = 16974099; // 0x1030113
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse = 16974109; // 0x103011d
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Title = 16974098; // 0x1030112
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Title_Inverse = 16974108; // 0x103011c
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle = 16974101; // 0x1030115
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse = 16974111; // 0x103011f
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Title = 16974100; // 0x1030114
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Title_Inverse = 16974110; // 0x103011e
+    field public static final int TextAppearance_Holo_Widget_Button = 16974086; // 0x1030106
+    field public static final int TextAppearance_Holo_Widget_DropDownHint = 16974091; // 0x103010b
+    field public static final int TextAppearance_Holo_Widget_DropDownItem = 16974092; // 0x103010c
+    field public static final int TextAppearance_Holo_Widget_EditText = 16974094; // 0x103010e
+    field public static final int TextAppearance_Holo_Widget_IconMenu_Item = 16974087; // 0x1030107
+    field public static final int TextAppearance_Holo_Widget_PopupMenu = 16974095; // 0x103010f
+    field public static final int TextAppearance_Holo_Widget_PopupMenu_Large = 16974096; // 0x1030110
+    field public static final int TextAppearance_Holo_Widget_PopupMenu_Small = 16974097; // 0x1030111
+    field public static final int TextAppearance_Holo_Widget_TabWidget = 16974088; // 0x1030108
+    field public static final int TextAppearance_Holo_Widget_TextView = 16974089; // 0x1030109
+    field public static final int TextAppearance_Holo_Widget_TextView_PopupMenu = 16974090; // 0x103010a
+    field public static final int TextAppearance_Holo_Widget_TextView_SpinnerItem = 16974093; // 0x103010d
+    field public static final int TextAppearance_Holo_WindowTitle = 16974102; // 0x1030116
+    field public static final int TextAppearance_Inverse = 16973887; // 0x103003f
+    field public static final int TextAppearance_Large = 16973890; // 0x1030042
+    field public static final int TextAppearance_Large_Inverse = 16973891; // 0x1030043
+    field public static final int TextAppearance_Material = 16974317; // 0x10301ed
+    field public static final int TextAppearance_Material_Body1 = 16974320; // 0x10301f0
+    field public static final int TextAppearance_Material_Body2 = 16974319; // 0x10301ef
+    field public static final int TextAppearance_Material_Button = 16974318; // 0x10301ee
+    field public static final int TextAppearance_Material_Caption = 16974321; // 0x10301f1
+    field public static final int TextAppearance_Material_DialogWindowTitle = 16974322; // 0x10301f2
+    field public static final int TextAppearance_Material_Display1 = 16974326; // 0x10301f6
+    field public static final int TextAppearance_Material_Display2 = 16974325; // 0x10301f5
+    field public static final int TextAppearance_Material_Display3 = 16974324; // 0x10301f4
+    field public static final int TextAppearance_Material_Display4 = 16974323; // 0x10301f3
+    field public static final int TextAppearance_Material_Headline = 16974327; // 0x10301f7
+    field public static final int TextAppearance_Material_Inverse = 16974328; // 0x10301f8
+    field public static final int TextAppearance_Material_Large = 16974329; // 0x10301f9
+    field public static final int TextAppearance_Material_Large_Inverse = 16974330; // 0x10301fa
+    field public static final int TextAppearance_Material_Medium = 16974331; // 0x10301fb
+    field public static final int TextAppearance_Material_Medium_Inverse = 16974332; // 0x10301fc
+    field public static final int TextAppearance_Material_Menu = 16974333; // 0x10301fd
+    field public static final int TextAppearance_Material_Notification = 16974334; // 0x10301fe
+    field public static final int TextAppearance_Material_Notification_Emphasis = 16974335; // 0x10301ff
+    field public static final int TextAppearance_Material_Notification_Info = 16974336; // 0x1030200
+    field public static final int TextAppearance_Material_Notification_Line2 = 16974337; // 0x1030201
+    field public static final int TextAppearance_Material_Notification_Time = 16974338; // 0x1030202
+    field public static final int TextAppearance_Material_Notification_Title = 16974339; // 0x1030203
+    field public static final int TextAppearance_Material_SearchResult_Subtitle = 16974340; // 0x1030204
+    field public static final int TextAppearance_Material_SearchResult_Title = 16974341; // 0x1030205
+    field public static final int TextAppearance_Material_Small = 16974342; // 0x1030206
+    field public static final int TextAppearance_Material_Small_Inverse = 16974343; // 0x1030207
+    field public static final int TextAppearance_Material_Subhead = 16974344; // 0x1030208
+    field public static final int TextAppearance_Material_Title = 16974345; // 0x1030209
+    field public static final int TextAppearance_Material_Widget = 16974347; // 0x103020b
+    field public static final int TextAppearance_Material_Widget_ActionBar_Menu = 16974348; // 0x103020c
+    field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle = 16974349; // 0x103020d
+    field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle_Inverse = 16974350; // 0x103020e
+    field public static final int TextAppearance_Material_Widget_ActionBar_Title = 16974351; // 0x103020f
+    field public static final int TextAppearance_Material_Widget_ActionBar_Title_Inverse = 16974352; // 0x1030210
+    field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle = 16974353; // 0x1030211
+    field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle_Inverse = 16974354; // 0x1030212
+    field public static final int TextAppearance_Material_Widget_ActionMode_Title = 16974355; // 0x1030213
+    field public static final int TextAppearance_Material_Widget_ActionMode_Title_Inverse = 16974356; // 0x1030214
+    field public static final int TextAppearance_Material_Widget_Button = 16974357; // 0x1030215
+    field public static final int TextAppearance_Material_Widget_Button_Borderless_Colored = 16974559; // 0x10302df
+    field public static final int TextAppearance_Material_Widget_Button_Colored = 16974558; // 0x10302de
+    field public static final int TextAppearance_Material_Widget_Button_Inverse = 16974548; // 0x10302d4
+    field public static final int TextAppearance_Material_Widget_DropDownHint = 16974358; // 0x1030216
+    field public static final int TextAppearance_Material_Widget_DropDownItem = 16974359; // 0x1030217
+    field public static final int TextAppearance_Material_Widget_EditText = 16974360; // 0x1030218
+    field public static final int TextAppearance_Material_Widget_IconMenu_Item = 16974361; // 0x1030219
+    field public static final int TextAppearance_Material_Widget_PopupMenu = 16974362; // 0x103021a
+    field public static final int TextAppearance_Material_Widget_PopupMenu_Large = 16974363; // 0x103021b
+    field public static final int TextAppearance_Material_Widget_PopupMenu_Small = 16974364; // 0x103021c
+    field public static final int TextAppearance_Material_Widget_TabWidget = 16974365; // 0x103021d
+    field public static final int TextAppearance_Material_Widget_TextView = 16974366; // 0x103021e
+    field public static final int TextAppearance_Material_Widget_TextView_PopupMenu = 16974367; // 0x103021f
+    field public static final int TextAppearance_Material_Widget_TextView_SpinnerItem = 16974368; // 0x1030220
+    field public static final int TextAppearance_Material_Widget_Toolbar_Subtitle = 16974369; // 0x1030221
+    field public static final int TextAppearance_Material_Widget_Toolbar_Title = 16974370; // 0x1030222
+    field public static final int TextAppearance_Material_WindowTitle = 16974346; // 0x103020a
+    field public static final int TextAppearance_Medium = 16973892; // 0x1030044
+    field public static final int TextAppearance_Medium_Inverse = 16973893; // 0x1030045
+    field public static final int TextAppearance_Small = 16973894; // 0x1030046
+    field public static final int TextAppearance_Small_Inverse = 16973895; // 0x1030047
+    field public static final int TextAppearance_StatusBar_EventContent = 16973927; // 0x1030067
+    field public static final int TextAppearance_StatusBar_EventContent_Title = 16973928; // 0x1030068
+    field public static final int TextAppearance_StatusBar_Icon = 16973926; // 0x1030066
+    field public static final int TextAppearance_StatusBar_Title = 16973925; // 0x1030065
+    field public static final int TextAppearance_SuggestionHighlight = 16974104; // 0x1030118
+    field public static final int TextAppearance_Theme = 16973888; // 0x1030040
+    field public static final int TextAppearance_Theme_Dialog = 16973896; // 0x1030048
+    field public static final int TextAppearance_Widget = 16973897; // 0x1030049
+    field public static final int TextAppearance_Widget_Button = 16973898; // 0x103004a
+    field public static final int TextAppearance_Widget_DropDownHint = 16973904; // 0x1030050
+    field public static final int TextAppearance_Widget_DropDownItem = 16973905; // 0x1030051
+    field public static final int TextAppearance_Widget_EditText = 16973900; // 0x103004c
+    field public static final int TextAppearance_Widget_IconMenu_Item = 16973899; // 0x103004b
+    field public static final int TextAppearance_Widget_PopupMenu_Large = 16973952; // 0x1030080
+    field public static final int TextAppearance_Widget_PopupMenu_Small = 16973953; // 0x1030081
+    field public static final int TextAppearance_Widget_TabWidget = 16973901; // 0x103004d
+    field public static final int TextAppearance_Widget_TextView = 16973902; // 0x103004e
+    field public static final int TextAppearance_Widget_TextView_PopupMenu = 16973903; // 0x103004f
+    field public static final int TextAppearance_Widget_TextView_SpinnerItem = 16973906; // 0x1030052
+    field public static final int TextAppearance_WindowTitle = 16973907; // 0x1030053
+    field public static final int Theme = 16973829; // 0x1030005
+    field public static final int ThemeOverlay = 16974407; // 0x1030247
+    field public static final int ThemeOverlay_DeviceDefault_Accent_DayNight = 16974564; // 0x10302e4
+    field public static final int ThemeOverlay_Material = 16974408; // 0x1030248
+    field public static final int ThemeOverlay_Material_ActionBar = 16974409; // 0x1030249
+    field public static final int ThemeOverlay_Material_Dark = 16974411; // 0x103024b
+    field public static final int ThemeOverlay_Material_Dark_ActionBar = 16974412; // 0x103024c
+    field public static final int ThemeOverlay_Material_Dialog = 16974550; // 0x10302d6
+    field public static final int ThemeOverlay_Material_Dialog_Alert = 16974551; // 0x10302d7
+    field public static final int ThemeOverlay_Material_Light = 16974410; // 0x103024a
+    field public static final int Theme_Black = 16973832; // 0x1030008
+    field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009
+    field public static final int Theme_Black_NoTitleBar_Fullscreen = 16973834; // 0x103000a
+    field public static final int Theme_DeviceDefault = 16974120; // 0x1030128
+    field public static final int Theme_DeviceDefault_DayNight = 16974563; // 0x10302e3
+    field public static final int Theme_DeviceDefault_Dialog = 16974126; // 0x103012e
+    field public static final int Theme_DeviceDefault_DialogWhenLarge = 16974134; // 0x1030136
+    field public static final int Theme_DeviceDefault_DialogWhenLarge_NoActionBar = 16974135; // 0x1030137
+    field public static final int Theme_DeviceDefault_Dialog_Alert = 16974545; // 0x10302d1
+    field public static final int Theme_DeviceDefault_Dialog_MinWidth = 16974127; // 0x103012f
+    field public static final int Theme_DeviceDefault_Dialog_NoActionBar = 16974128; // 0x1030130
+    field public static final int Theme_DeviceDefault_Dialog_NoActionBar_MinWidth = 16974129; // 0x1030131
+    field public static final int Theme_DeviceDefault_InputMethod = 16974142; // 0x103013e
+    field public static final int Theme_DeviceDefault_Light = 16974123; // 0x103012b
+    field public static final int Theme_DeviceDefault_Light_DarkActionBar = 16974143; // 0x103013f
+    field public static final int Theme_DeviceDefault_Light_Dialog = 16974130; // 0x1030132
+    field public static final int Theme_DeviceDefault_Light_DialogWhenLarge = 16974136; // 0x1030138
+    field public static final int Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar = 16974137; // 0x1030139
+    field public static final int Theme_DeviceDefault_Light_Dialog_Alert = 16974546; // 0x10302d2
+    field public static final int Theme_DeviceDefault_Light_Dialog_MinWidth = 16974131; // 0x1030133
+    field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar = 16974132; // 0x1030134
+    field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth = 16974133; // 0x1030135
+    field public static final int Theme_DeviceDefault_Light_NoActionBar = 16974124; // 0x103012c
+    field public static final int Theme_DeviceDefault_Light_NoActionBar_Fullscreen = 16974125; // 0x103012d
+    field public static final int Theme_DeviceDefault_Light_NoActionBar_Overscan = 16974304; // 0x10301e0
+    field public static final int Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor = 16974308; // 0x10301e4
+    field public static final int Theme_DeviceDefault_Light_Panel = 16974139; // 0x103013b
+    field public static final int Theme_DeviceDefault_NoActionBar = 16974121; // 0x1030129
+    field public static final int Theme_DeviceDefault_NoActionBar_Fullscreen = 16974122; // 0x103012a
+    field public static final int Theme_DeviceDefault_NoActionBar_Overscan = 16974303; // 0x10301df
+    field public static final int Theme_DeviceDefault_NoActionBar_TranslucentDecor = 16974307; // 0x10301e3
+    field public static final int Theme_DeviceDefault_Panel = 16974138; // 0x103013a
+    field public static final int Theme_DeviceDefault_Settings = 16974371; // 0x1030223
+    field public static final int Theme_DeviceDefault_Wallpaper = 16974140; // 0x103013c
+    field public static final int Theme_DeviceDefault_Wallpaper_NoTitleBar = 16974141; // 0x103013d
+    field public static final int Theme_Dialog = 16973835; // 0x103000b
+    field @Deprecated public static final int Theme_Holo = 16973931; // 0x103006b
+    field @Deprecated public static final int Theme_Holo_Dialog = 16973935; // 0x103006f
+    field @Deprecated public static final int Theme_Holo_DialogWhenLarge = 16973943; // 0x1030077
+    field @Deprecated public static final int Theme_Holo_DialogWhenLarge_NoActionBar = 16973944; // 0x1030078
+    field @Deprecated public static final int Theme_Holo_Dialog_MinWidth = 16973936; // 0x1030070
+    field @Deprecated public static final int Theme_Holo_Dialog_NoActionBar = 16973937; // 0x1030071
+    field @Deprecated public static final int Theme_Holo_Dialog_NoActionBar_MinWidth = 16973938; // 0x1030072
+    field @Deprecated public static final int Theme_Holo_InputMethod = 16973951; // 0x103007f
+    field @Deprecated public static final int Theme_Holo_Light = 16973934; // 0x103006e
+    field @Deprecated public static final int Theme_Holo_Light_DarkActionBar = 16974105; // 0x1030119
+    field @Deprecated public static final int Theme_Holo_Light_Dialog = 16973939; // 0x1030073
+    field @Deprecated public static final int Theme_Holo_Light_DialogWhenLarge = 16973945; // 0x1030079
+    field @Deprecated public static final int Theme_Holo_Light_DialogWhenLarge_NoActionBar = 16973946; // 0x103007a
+    field @Deprecated public static final int Theme_Holo_Light_Dialog_MinWidth = 16973940; // 0x1030074
+    field @Deprecated public static final int Theme_Holo_Light_Dialog_NoActionBar = 16973941; // 0x1030075
+    field @Deprecated public static final int Theme_Holo_Light_Dialog_NoActionBar_MinWidth = 16973942; // 0x1030076
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar = 16974064; // 0x10300f0
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar_Fullscreen = 16974065; // 0x10300f1
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar_Overscan = 16974302; // 0x10301de
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar_TranslucentDecor = 16974306; // 0x10301e2
+    field @Deprecated public static final int Theme_Holo_Light_Panel = 16973948; // 0x103007c
+    field @Deprecated public static final int Theme_Holo_NoActionBar = 16973932; // 0x103006c
+    field @Deprecated public static final int Theme_Holo_NoActionBar_Fullscreen = 16973933; // 0x103006d
+    field @Deprecated public static final int Theme_Holo_NoActionBar_Overscan = 16974301; // 0x10301dd
+    field @Deprecated public static final int Theme_Holo_NoActionBar_TranslucentDecor = 16974305; // 0x10301e1
+    field @Deprecated public static final int Theme_Holo_Panel = 16973947; // 0x103007b
+    field @Deprecated public static final int Theme_Holo_Wallpaper = 16973949; // 0x103007d
+    field @Deprecated public static final int Theme_Holo_Wallpaper_NoTitleBar = 16973950; // 0x103007e
+    field public static final int Theme_InputMethod = 16973908; // 0x1030054
+    field public static final int Theme_Light = 16973836; // 0x103000c
+    field public static final int Theme_Light_NoTitleBar = 16973837; // 0x103000d
+    field public static final int Theme_Light_NoTitleBar_Fullscreen = 16973838; // 0x103000e
+    field public static final int Theme_Light_Panel = 16973914; // 0x103005a
+    field public static final int Theme_Light_WallpaperSettings = 16973922; // 0x1030062
+    field public static final int Theme_Material = 16974372; // 0x1030224
+    field public static final int Theme_Material_Dialog = 16974373; // 0x1030225
+    field public static final int Theme_Material_DialogWhenLarge = 16974379; // 0x103022b
+    field public static final int Theme_Material_DialogWhenLarge_NoActionBar = 16974380; // 0x103022c
+    field public static final int Theme_Material_Dialog_Alert = 16974374; // 0x1030226
+    field public static final int Theme_Material_Dialog_MinWidth = 16974375; // 0x1030227
+    field public static final int Theme_Material_Dialog_NoActionBar = 16974376; // 0x1030228
+    field public static final int Theme_Material_Dialog_NoActionBar_MinWidth = 16974377; // 0x1030229
+    field public static final int Theme_Material_Dialog_Presentation = 16974378; // 0x103022a
+    field public static final int Theme_Material_InputMethod = 16974381; // 0x103022d
+    field public static final int Theme_Material_Light = 16974391; // 0x1030237
+    field public static final int Theme_Material_Light_DarkActionBar = 16974392; // 0x1030238
+    field public static final int Theme_Material_Light_Dialog = 16974393; // 0x1030239
+    field public static final int Theme_Material_Light_DialogWhenLarge = 16974399; // 0x103023f
+    field public static final int Theme_Material_Light_DialogWhenLarge_DarkActionBar = 16974552; // 0x10302d8
+    field public static final int Theme_Material_Light_DialogWhenLarge_NoActionBar = 16974400; // 0x1030240
+    field public static final int Theme_Material_Light_Dialog_Alert = 16974394; // 0x103023a
+    field public static final int Theme_Material_Light_Dialog_MinWidth = 16974395; // 0x103023b
+    field public static final int Theme_Material_Light_Dialog_NoActionBar = 16974396; // 0x103023c
+    field public static final int Theme_Material_Light_Dialog_NoActionBar_MinWidth = 16974397; // 0x103023d
+    field public static final int Theme_Material_Light_Dialog_Presentation = 16974398; // 0x103023e
+    field public static final int Theme_Material_Light_LightStatusBar = 16974549; // 0x10302d5
+    field public static final int Theme_Material_Light_NoActionBar = 16974401; // 0x1030241
+    field public static final int Theme_Material_Light_NoActionBar_Fullscreen = 16974402; // 0x1030242
+    field @Deprecated public static final int Theme_Material_Light_NoActionBar_Overscan = 16974403; // 0x1030243
+    field public static final int Theme_Material_Light_NoActionBar_TranslucentDecor = 16974404; // 0x1030244
+    field public static final int Theme_Material_Light_Panel = 16974405; // 0x1030245
+    field public static final int Theme_Material_Light_Voice = 16974406; // 0x1030246
+    field public static final int Theme_Material_NoActionBar = 16974382; // 0x103022e
+    field public static final int Theme_Material_NoActionBar_Fullscreen = 16974383; // 0x103022f
+    field @Deprecated public static final int Theme_Material_NoActionBar_Overscan = 16974384; // 0x1030230
+    field public static final int Theme_Material_NoActionBar_TranslucentDecor = 16974385; // 0x1030231
+    field public static final int Theme_Material_Panel = 16974386; // 0x1030232
+    field public static final int Theme_Material_Settings = 16974387; // 0x1030233
+    field public static final int Theme_Material_Voice = 16974388; // 0x1030234
+    field public static final int Theme_Material_Wallpaper = 16974389; // 0x1030235
+    field public static final int Theme_Material_Wallpaper_NoTitleBar = 16974390; // 0x1030236
+    field public static final int Theme_NoDisplay = 16973909; // 0x1030055
+    field public static final int Theme_NoTitleBar = 16973830; // 0x1030006
+    field public static final int Theme_NoTitleBar_Fullscreen = 16973831; // 0x1030007
+    field public static final int Theme_NoTitleBar_OverlayActionModes = 16973930; // 0x103006a
+    field public static final int Theme_Panel = 16973913; // 0x1030059
+    field public static final int Theme_Translucent = 16973839; // 0x103000f
+    field public static final int Theme_Translucent_NoTitleBar = 16973840; // 0x1030010
+    field public static final int Theme_Translucent_NoTitleBar_Fullscreen = 16973841; // 0x1030011
+    field public static final int Theme_Wallpaper = 16973918; // 0x103005e
+    field public static final int Theme_WallpaperSettings = 16973921; // 0x1030061
+    field public static final int Theme_Wallpaper_NoTitleBar = 16973919; // 0x103005f
+    field public static final int Theme_Wallpaper_NoTitleBar_Fullscreen = 16973920; // 0x1030060
+    field public static final int Theme_WithActionBar = 16973929; // 0x1030069
+    field public static final int Widget = 16973842; // 0x1030012
+    field public static final int Widget_AbsListView = 16973843; // 0x1030013
+    field public static final int Widget_ActionBar = 16973954; // 0x1030082
+    field public static final int Widget_ActionBar_TabBar = 16974068; // 0x10300f4
+    field public static final int Widget_ActionBar_TabText = 16974067; // 0x10300f3
+    field public static final int Widget_ActionBar_TabView = 16974066; // 0x10300f2
+    field public static final int Widget_ActionButton = 16973956; // 0x1030084
+    field public static final int Widget_ActionButton_CloseMode = 16973960; // 0x1030088
+    field public static final int Widget_ActionButton_Overflow = 16973959; // 0x1030087
+    field public static final int Widget_AutoCompleteTextView = 16973863; // 0x1030027
+    field public static final int Widget_Button = 16973844; // 0x1030014
+    field public static final int Widget_Button_Inset = 16973845; // 0x1030015
+    field public static final int Widget_Button_Small = 16973846; // 0x1030016
+    field public static final int Widget_Button_Toggle = 16973847; // 0x1030017
+    field public static final int Widget_CalendarView = 16974059; // 0x10300eb
+    field public static final int Widget_CompoundButton = 16973848; // 0x1030018
+    field public static final int Widget_CompoundButton_CheckBox = 16973849; // 0x1030019
+    field public static final int Widget_CompoundButton_RadioButton = 16973850; // 0x103001a
+    field public static final int Widget_CompoundButton_Star = 16973851; // 0x103001b
+    field public static final int Widget_DatePicker = 16974062; // 0x10300ee
+    field public static final int Widget_DeviceDefault = 16974144; // 0x1030140
+    field public static final int Widget_DeviceDefault_ActionBar = 16974187; // 0x103016b
+    field public static final int Widget_DeviceDefault_ActionBar_Solid = 16974195; // 0x1030173
+    field public static final int Widget_DeviceDefault_ActionBar_TabBar = 16974194; // 0x1030172
+    field public static final int Widget_DeviceDefault_ActionBar_TabText = 16974193; // 0x1030171
+    field public static final int Widget_DeviceDefault_ActionBar_TabView = 16974192; // 0x1030170
+    field public static final int Widget_DeviceDefault_ActionButton = 16974182; // 0x1030166
+    field public static final int Widget_DeviceDefault_ActionButton_CloseMode = 16974186; // 0x103016a
+    field public static final int Widget_DeviceDefault_ActionButton_Overflow = 16974183; // 0x1030167
+    field public static final int Widget_DeviceDefault_ActionButton_TextButton = 16974184; // 0x1030168
+    field public static final int Widget_DeviceDefault_ActionMode = 16974185; // 0x1030169
+    field public static final int Widget_DeviceDefault_AutoCompleteTextView = 16974151; // 0x1030147
+    field public static final int Widget_DeviceDefault_Button = 16974145; // 0x1030141
+    field public static final int Widget_DeviceDefault_Button_Borderless = 16974188; // 0x103016c
+    field public static final int Widget_DeviceDefault_Button_Borderless_Colored = 16974561; // 0x10302e1
+    field public static final int Widget_DeviceDefault_Button_Borderless_Small = 16974149; // 0x1030145
+    field public static final int Widget_DeviceDefault_Button_Colored = 16974560; // 0x10302e0
+    field public static final int Widget_DeviceDefault_Button_Inset = 16974147; // 0x1030143
+    field public static final int Widget_DeviceDefault_Button_Small = 16974146; // 0x1030142
+    field public static final int Widget_DeviceDefault_Button_Toggle = 16974148; // 0x1030144
+    field public static final int Widget_DeviceDefault_CalendarView = 16974190; // 0x103016e
+    field public static final int Widget_DeviceDefault_CheckedTextView = 16974299; // 0x10301db
+    field public static final int Widget_DeviceDefault_CompoundButton_CheckBox = 16974152; // 0x1030148
+    field public static final int Widget_DeviceDefault_CompoundButton_RadioButton = 16974169; // 0x1030159
+    field public static final int Widget_DeviceDefault_CompoundButton_Star = 16974173; // 0x103015d
+    field public static final int Widget_DeviceDefault_DatePicker = 16974191; // 0x103016f
+    field public static final int Widget_DeviceDefault_DropDownItem = 16974177; // 0x1030161
+    field public static final int Widget_DeviceDefault_DropDownItem_Spinner = 16974178; // 0x1030162
+    field public static final int Widget_DeviceDefault_EditText = 16974154; // 0x103014a
+    field public static final int Widget_DeviceDefault_ExpandableListView = 16974155; // 0x103014b
+    field public static final int Widget_DeviceDefault_FastScroll = 16974313; // 0x10301e9
+    field public static final int Widget_DeviceDefault_GridView = 16974156; // 0x103014c
+    field public static final int Widget_DeviceDefault_HorizontalScrollView = 16974171; // 0x103015b
+    field public static final int Widget_DeviceDefault_ImageButton = 16974157; // 0x103014d
+    field public static final int Widget_DeviceDefault_Light = 16974196; // 0x1030174
+    field public static final int Widget_DeviceDefault_Light_ActionBar = 16974243; // 0x10301a3
+    field public static final int Widget_DeviceDefault_Light_ActionBar_Solid = 16974247; // 0x10301a7
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_Solid_Inverse = 16974248; // 0x10301a8
+    field public static final int Widget_DeviceDefault_Light_ActionBar_TabBar = 16974246; // 0x10301a6
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse = 16974249; // 0x10301a9
+    field public static final int Widget_DeviceDefault_Light_ActionBar_TabText = 16974245; // 0x10301a5
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_TabText_Inverse = 16974251; // 0x10301ab
+    field public static final int Widget_DeviceDefault_Light_ActionBar_TabView = 16974244; // 0x10301a4
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_TabView_Inverse = 16974250; // 0x10301aa
+    field public static final int Widget_DeviceDefault_Light_ActionButton = 16974239; // 0x103019f
+    field public static final int Widget_DeviceDefault_Light_ActionButton_CloseMode = 16974242; // 0x10301a2
+    field public static final int Widget_DeviceDefault_Light_ActionButton_Overflow = 16974240; // 0x10301a0
+    field public static final int Widget_DeviceDefault_Light_ActionMode = 16974241; // 0x10301a1
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionMode_Inverse = 16974252; // 0x10301ac
+    field public static final int Widget_DeviceDefault_Light_AutoCompleteTextView = 16974203; // 0x103017b
+    field public static final int Widget_DeviceDefault_Light_Button = 16974197; // 0x1030175
+    field public static final int Widget_DeviceDefault_Light_Button_Borderless_Small = 16974201; // 0x1030179
+    field public static final int Widget_DeviceDefault_Light_Button_Inset = 16974199; // 0x1030177
+    field public static final int Widget_DeviceDefault_Light_Button_Small = 16974198; // 0x1030176
+    field public static final int Widget_DeviceDefault_Light_Button_Toggle = 16974200; // 0x1030178
+    field public static final int Widget_DeviceDefault_Light_CalendarView = 16974238; // 0x103019e
+    field public static final int Widget_DeviceDefault_Light_CheckedTextView = 16974300; // 0x10301dc
+    field public static final int Widget_DeviceDefault_Light_CompoundButton_CheckBox = 16974204; // 0x103017c
+    field public static final int Widget_DeviceDefault_Light_CompoundButton_RadioButton = 16974224; // 0x1030190
+    field public static final int Widget_DeviceDefault_Light_CompoundButton_Star = 16974228; // 0x1030194
+    field public static final int Widget_DeviceDefault_Light_DropDownItem = 16974232; // 0x1030198
+    field public static final int Widget_DeviceDefault_Light_DropDownItem_Spinner = 16974233; // 0x1030199
+    field public static final int Widget_DeviceDefault_Light_EditText = 16974206; // 0x103017e
+    field public static final int Widget_DeviceDefault_Light_ExpandableListView = 16974207; // 0x103017f
+    field public static final int Widget_DeviceDefault_Light_FastScroll = 16974315; // 0x10301eb
+    field public static final int Widget_DeviceDefault_Light_GridView = 16974208; // 0x1030180
+    field public static final int Widget_DeviceDefault_Light_HorizontalScrollView = 16974226; // 0x1030192
+    field public static final int Widget_DeviceDefault_Light_ImageButton = 16974209; // 0x1030181
+    field public static final int Widget_DeviceDefault_Light_ListPopupWindow = 16974235; // 0x103019b
+    field public static final int Widget_DeviceDefault_Light_ListView = 16974210; // 0x1030182
+    field public static final int Widget_DeviceDefault_Light_ListView_DropDown = 16974205; // 0x103017d
+    field public static final int Widget_DeviceDefault_Light_MediaRouteButton = 16974296; // 0x10301d8
+    field public static final int Widget_DeviceDefault_Light_PopupMenu = 16974236; // 0x103019c
+    field public static final int Widget_DeviceDefault_Light_PopupWindow = 16974211; // 0x1030183
+    field public static final int Widget_DeviceDefault_Light_ProgressBar = 16974212; // 0x1030184
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Horizontal = 16974213; // 0x1030185
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Inverse = 16974217; // 0x1030189
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Large = 16974216; // 0x1030188
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Large_Inverse = 16974219; // 0x103018b
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Small = 16974214; // 0x1030186
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Inverse = 16974218; // 0x103018a
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Title = 16974215; // 0x1030187
+    field public static final int Widget_DeviceDefault_Light_RatingBar = 16974221; // 0x103018d
+    field public static final int Widget_DeviceDefault_Light_RatingBar_Indicator = 16974222; // 0x103018e
+    field public static final int Widget_DeviceDefault_Light_RatingBar_Small = 16974223; // 0x103018f
+    field public static final int Widget_DeviceDefault_Light_ScrollView = 16974225; // 0x1030191
+    field public static final int Widget_DeviceDefault_Light_SeekBar = 16974220; // 0x103018c
+    field public static final int Widget_DeviceDefault_Light_Spinner = 16974227; // 0x1030193
+    field public static final int Widget_DeviceDefault_Light_StackView = 16974316; // 0x10301ec
+    field public static final int Widget_DeviceDefault_Light_Tab = 16974237; // 0x103019d
+    field public static final int Widget_DeviceDefault_Light_TabWidget = 16974229; // 0x1030195
+    field public static final int Widget_DeviceDefault_Light_TextView = 16974202; // 0x103017a
+    field public static final int Widget_DeviceDefault_Light_TextView_SpinnerItem = 16974234; // 0x103019a
+    field public static final int Widget_DeviceDefault_Light_WebTextView = 16974230; // 0x1030196
+    field public static final int Widget_DeviceDefault_Light_WebView = 16974231; // 0x1030197
+    field public static final int Widget_DeviceDefault_ListPopupWindow = 16974180; // 0x1030164
+    field public static final int Widget_DeviceDefault_ListView = 16974158; // 0x103014e
+    field public static final int Widget_DeviceDefault_ListView_DropDown = 16974153; // 0x1030149
+    field public static final int Widget_DeviceDefault_MediaRouteButton = 16974295; // 0x10301d7
+    field public static final int Widget_DeviceDefault_PopupMenu = 16974181; // 0x1030165
+    field public static final int Widget_DeviceDefault_PopupWindow = 16974159; // 0x103014f
+    field public static final int Widget_DeviceDefault_ProgressBar = 16974160; // 0x1030150
+    field public static final int Widget_DeviceDefault_ProgressBar_Horizontal = 16974161; // 0x1030151
+    field public static final int Widget_DeviceDefault_ProgressBar_Large = 16974164; // 0x1030154
+    field public static final int Widget_DeviceDefault_ProgressBar_Small = 16974162; // 0x1030152
+    field public static final int Widget_DeviceDefault_ProgressBar_Small_Title = 16974163; // 0x1030153
+    field public static final int Widget_DeviceDefault_RatingBar = 16974166; // 0x1030156
+    field public static final int Widget_DeviceDefault_RatingBar_Indicator = 16974167; // 0x1030157
+    field public static final int Widget_DeviceDefault_RatingBar_Small = 16974168; // 0x1030158
+    field public static final int Widget_DeviceDefault_ScrollView = 16974170; // 0x103015a
+    field public static final int Widget_DeviceDefault_SeekBar = 16974165; // 0x1030155
+    field public static final int Widget_DeviceDefault_Spinner = 16974172; // 0x103015c
+    field public static final int Widget_DeviceDefault_StackView = 16974314; // 0x10301ea
+    field public static final int Widget_DeviceDefault_Tab = 16974189; // 0x103016d
+    field public static final int Widget_DeviceDefault_TabWidget = 16974174; // 0x103015e
+    field public static final int Widget_DeviceDefault_TextView = 16974150; // 0x1030146
+    field public static final int Widget_DeviceDefault_TextView_SpinnerItem = 16974179; // 0x1030163
+    field public static final int Widget_DeviceDefault_WebTextView = 16974175; // 0x103015f
+    field public static final int Widget_DeviceDefault_WebView = 16974176; // 0x1030160
+    field public static final int Widget_DropDownItem = 16973867; // 0x103002b
+    field public static final int Widget_DropDownItem_Spinner = 16973868; // 0x103002c
+    field public static final int Widget_EditText = 16973859; // 0x1030023
+    field public static final int Widget_ExpandableListView = 16973860; // 0x1030024
+    field public static final int Widget_FastScroll = 16974309; // 0x10301e5
+    field public static final int Widget_FragmentBreadCrumbs = 16973961; // 0x1030089
+    field public static final int Widget_Gallery = 16973877; // 0x1030035
+    field public static final int Widget_GridView = 16973874; // 0x1030032
+    field public static final int Widget_Holo = 16973962; // 0x103008a
+    field public static final int Widget_Holo_ActionBar = 16974004; // 0x10300b4
+    field public static final int Widget_Holo_ActionBar_Solid = 16974113; // 0x1030121
+    field public static final int Widget_Holo_ActionBar_TabBar = 16974071; // 0x10300f7
+    field public static final int Widget_Holo_ActionBar_TabText = 16974070; // 0x10300f6
+    field public static final int Widget_Holo_ActionBar_TabView = 16974069; // 0x10300f5
+    field public static final int Widget_Holo_ActionButton = 16973999; // 0x10300af
+    field public static final int Widget_Holo_ActionButton_CloseMode = 16974003; // 0x10300b3
+    field public static final int Widget_Holo_ActionButton_Overflow = 16974000; // 0x10300b0
+    field public static final int Widget_Holo_ActionButton_TextButton = 16974001; // 0x10300b1
+    field public static final int Widget_Holo_ActionMode = 16974002; // 0x10300b2
+    field public static final int Widget_Holo_AutoCompleteTextView = 16973968; // 0x1030090
+    field public static final int Widget_Holo_Button = 16973963; // 0x103008b
+    field public static final int Widget_Holo_Button_Borderless = 16974050; // 0x10300e2
+    field public static final int Widget_Holo_Button_Borderless_Small = 16974106; // 0x103011a
+    field public static final int Widget_Holo_Button_Inset = 16973965; // 0x103008d
+    field public static final int Widget_Holo_Button_Small = 16973964; // 0x103008c
+    field public static final int Widget_Holo_Button_Toggle = 16973966; // 0x103008e
+    field public static final int Widget_Holo_CalendarView = 16974060; // 0x10300ec
+    field public static final int Widget_Holo_CheckedTextView = 16974297; // 0x10301d9
+    field public static final int Widget_Holo_CompoundButton_CheckBox = 16973969; // 0x1030091
+    field public static final int Widget_Holo_CompoundButton_RadioButton = 16973986; // 0x10300a2
+    field public static final int Widget_Holo_CompoundButton_Star = 16973990; // 0x10300a6
+    field public static final int Widget_Holo_DatePicker = 16974063; // 0x10300ef
+    field public static final int Widget_Holo_DropDownItem = 16973994; // 0x10300aa
+    field public static final int Widget_Holo_DropDownItem_Spinner = 16973995; // 0x10300ab
+    field public static final int Widget_Holo_EditText = 16973971; // 0x1030093
+    field public static final int Widget_Holo_ExpandableListView = 16973972; // 0x1030094
+    field public static final int Widget_Holo_GridView = 16973973; // 0x1030095
+    field public static final int Widget_Holo_HorizontalScrollView = 16973988; // 0x10300a4
+    field public static final int Widget_Holo_ImageButton = 16973974; // 0x1030096
+    field public static final int Widget_Holo_Light = 16974005; // 0x10300b5
+    field public static final int Widget_Holo_Light_ActionBar = 16974049; // 0x10300e1
+    field public static final int Widget_Holo_Light_ActionBar_Solid = 16974114; // 0x1030122
+    field public static final int Widget_Holo_Light_ActionBar_Solid_Inverse = 16974115; // 0x1030123
+    field public static final int Widget_Holo_Light_ActionBar_TabBar = 16974074; // 0x10300fa
+    field public static final int Widget_Holo_Light_ActionBar_TabBar_Inverse = 16974116; // 0x1030124
+    field public static final int Widget_Holo_Light_ActionBar_TabText = 16974073; // 0x10300f9
+    field public static final int Widget_Holo_Light_ActionBar_TabText_Inverse = 16974118; // 0x1030126
+    field public static final int Widget_Holo_Light_ActionBar_TabView = 16974072; // 0x10300f8
+    field public static final int Widget_Holo_Light_ActionBar_TabView_Inverse = 16974117; // 0x1030125
+    field public static final int Widget_Holo_Light_ActionButton = 16974045; // 0x10300dd
+    field public static final int Widget_Holo_Light_ActionButton_CloseMode = 16974048; // 0x10300e0
+    field public static final int Widget_Holo_Light_ActionButton_Overflow = 16974046; // 0x10300de
+    field public static final int Widget_Holo_Light_ActionMode = 16974047; // 0x10300df
+    field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974119; // 0x1030127
+    field public static final int Widget_Holo_Light_AutoCompleteTextView = 16974011; // 0x10300bb
+    field public static final int Widget_Holo_Light_Button = 16974006; // 0x10300b6
+    field public static final int Widget_Holo_Light_Button_Borderless_Small = 16974107; // 0x103011b
+    field public static final int Widget_Holo_Light_Button_Inset = 16974008; // 0x10300b8
+    field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7
+    field public static final int Widget_Holo_Light_Button_Toggle = 16974009; // 0x10300b9
+    field public static final int Widget_Holo_Light_CalendarView = 16974061; // 0x10300ed
+    field public static final int Widget_Holo_Light_CheckedTextView = 16974298; // 0x10301da
+    field public static final int Widget_Holo_Light_CompoundButton_CheckBox = 16974012; // 0x10300bc
+    field public static final int Widget_Holo_Light_CompoundButton_RadioButton = 16974032; // 0x10300d0
+    field public static final int Widget_Holo_Light_CompoundButton_Star = 16974036; // 0x10300d4
+    field public static final int Widget_Holo_Light_DropDownItem = 16974040; // 0x10300d8
+    field public static final int Widget_Holo_Light_DropDownItem_Spinner = 16974041; // 0x10300d9
+    field public static final int Widget_Holo_Light_EditText = 16974014; // 0x10300be
+    field public static final int Widget_Holo_Light_ExpandableListView = 16974015; // 0x10300bf
+    field public static final int Widget_Holo_Light_GridView = 16974016; // 0x10300c0
+    field public static final int Widget_Holo_Light_HorizontalScrollView = 16974034; // 0x10300d2
+    field public static final int Widget_Holo_Light_ImageButton = 16974017; // 0x10300c1
+    field public static final int Widget_Holo_Light_ListPopupWindow = 16974043; // 0x10300db
+    field public static final int Widget_Holo_Light_ListView = 16974018; // 0x10300c2
+    field public static final int Widget_Holo_Light_ListView_DropDown = 16974013; // 0x10300bd
+    field public static final int Widget_Holo_Light_MediaRouteButton = 16974294; // 0x10301d6
+    field public static final int Widget_Holo_Light_PopupMenu = 16974044; // 0x10300dc
+    field public static final int Widget_Holo_Light_PopupWindow = 16974019; // 0x10300c3
+    field public static final int Widget_Holo_Light_ProgressBar = 16974020; // 0x10300c4
+    field public static final int Widget_Holo_Light_ProgressBar_Horizontal = 16974021; // 0x10300c5
+    field public static final int Widget_Holo_Light_ProgressBar_Inverse = 16974025; // 0x10300c9
+    field public static final int Widget_Holo_Light_ProgressBar_Large = 16974024; // 0x10300c8
+    field public static final int Widget_Holo_Light_ProgressBar_Large_Inverse = 16974027; // 0x10300cb
+    field public static final int Widget_Holo_Light_ProgressBar_Small = 16974022; // 0x10300c6
+    field public static final int Widget_Holo_Light_ProgressBar_Small_Inverse = 16974026; // 0x10300ca
+    field public static final int Widget_Holo_Light_ProgressBar_Small_Title = 16974023; // 0x10300c7
+    field public static final int Widget_Holo_Light_RatingBar = 16974029; // 0x10300cd
+    field public static final int Widget_Holo_Light_RatingBar_Indicator = 16974030; // 0x10300ce
+    field public static final int Widget_Holo_Light_RatingBar_Small = 16974031; // 0x10300cf
+    field public static final int Widget_Holo_Light_ScrollView = 16974033; // 0x10300d1
+    field public static final int Widget_Holo_Light_SeekBar = 16974028; // 0x10300cc
+    field public static final int Widget_Holo_Light_Spinner = 16974035; // 0x10300d3
+    field public static final int Widget_Holo_Light_Tab = 16974052; // 0x10300e4
+    field public static final int Widget_Holo_Light_TabWidget = 16974037; // 0x10300d5
+    field public static final int Widget_Holo_Light_TextView = 16974010; // 0x10300ba
+    field public static final int Widget_Holo_Light_TextView_SpinnerItem = 16974042; // 0x10300da
+    field public static final int Widget_Holo_Light_WebTextView = 16974038; // 0x10300d6
+    field public static final int Widget_Holo_Light_WebView = 16974039; // 0x10300d7
+    field public static final int Widget_Holo_ListPopupWindow = 16973997; // 0x10300ad
+    field public static final int Widget_Holo_ListView = 16973975; // 0x1030097
+    field public static final int Widget_Holo_ListView_DropDown = 16973970; // 0x1030092
+    field public static final int Widget_Holo_MediaRouteButton = 16974293; // 0x10301d5
+    field public static final int Widget_Holo_PopupMenu = 16973998; // 0x10300ae
+    field public static final int Widget_Holo_PopupWindow = 16973976; // 0x1030098
+    field public static final int Widget_Holo_ProgressBar = 16973977; // 0x1030099
+    field public static final int Widget_Holo_ProgressBar_Horizontal = 16973978; // 0x103009a
+    field public static final int Widget_Holo_ProgressBar_Large = 16973981; // 0x103009d
+    field public static final int Widget_Holo_ProgressBar_Small = 16973979; // 0x103009b
+    field public static final int Widget_Holo_ProgressBar_Small_Title = 16973980; // 0x103009c
+    field public static final int Widget_Holo_RatingBar = 16973983; // 0x103009f
+    field public static final int Widget_Holo_RatingBar_Indicator = 16973984; // 0x10300a0
+    field public static final int Widget_Holo_RatingBar_Small = 16973985; // 0x10300a1
+    field public static final int Widget_Holo_ScrollView = 16973987; // 0x10300a3
+    field public static final int Widget_Holo_SeekBar = 16973982; // 0x103009e
+    field public static final int Widget_Holo_Spinner = 16973989; // 0x10300a5
+    field public static final int Widget_Holo_Tab = 16974051; // 0x10300e3
+    field public static final int Widget_Holo_TabWidget = 16973991; // 0x10300a7
+    field public static final int Widget_Holo_TextView = 16973967; // 0x103008f
+    field public static final int Widget_Holo_TextView_SpinnerItem = 16973996; // 0x10300ac
+    field public static final int Widget_Holo_WebTextView = 16973992; // 0x10300a8
+    field public static final int Widget_Holo_WebView = 16973993; // 0x10300a9
+    field public static final int Widget_ImageButton = 16973862; // 0x1030026
+    field public static final int Widget_ImageWell = 16973861; // 0x1030025
+    field @Deprecated public static final int Widget_KeyboardView = 16973911; // 0x1030057
+    field public static final int Widget_ListPopupWindow = 16973957; // 0x1030085
+    field public static final int Widget_ListView = 16973870; // 0x103002e
+    field public static final int Widget_ListView_DropDown = 16973872; // 0x1030030
+    field public static final int Widget_ListView_Menu = 16973873; // 0x1030031
+    field public static final int Widget_ListView_White = 16973871; // 0x103002f
+    field public static final int Widget_Material = 16974413; // 0x103024d
+    field public static final int Widget_Material_ActionBar = 16974414; // 0x103024e
+    field public static final int Widget_Material_ActionBar_Solid = 16974415; // 0x103024f
+    field public static final int Widget_Material_ActionBar_TabBar = 16974416; // 0x1030250
+    field public static final int Widget_Material_ActionBar_TabText = 16974417; // 0x1030251
+    field public static final int Widget_Material_ActionBar_TabView = 16974418; // 0x1030252
+    field public static final int Widget_Material_ActionButton = 16974419; // 0x1030253
+    field public static final int Widget_Material_ActionButton_CloseMode = 16974420; // 0x1030254
+    field public static final int Widget_Material_ActionButton_Overflow = 16974421; // 0x1030255
+    field public static final int Widget_Material_ActionMode = 16974422; // 0x1030256
+    field public static final int Widget_Material_AutoCompleteTextView = 16974423; // 0x1030257
+    field public static final int Widget_Material_Button = 16974424; // 0x1030258
+    field public static final int Widget_Material_ButtonBar = 16974431; // 0x103025f
+    field public static final int Widget_Material_ButtonBar_AlertDialog = 16974432; // 0x1030260
+    field public static final int Widget_Material_Button_Borderless = 16974425; // 0x1030259
+    field public static final int Widget_Material_Button_Borderless_Colored = 16974426; // 0x103025a
+    field public static final int Widget_Material_Button_Borderless_Small = 16974427; // 0x103025b
+    field public static final int Widget_Material_Button_Colored = 16974547; // 0x10302d3
+    field public static final int Widget_Material_Button_Inset = 16974428; // 0x103025c
+    field public static final int Widget_Material_Button_Small = 16974429; // 0x103025d
+    field public static final int Widget_Material_Button_Toggle = 16974430; // 0x103025e
+    field public static final int Widget_Material_CalendarView = 16974433; // 0x1030261
+    field public static final int Widget_Material_CheckedTextView = 16974434; // 0x1030262
+    field public static final int Widget_Material_CompoundButton_CheckBox = 16974435; // 0x1030263
+    field public static final int Widget_Material_CompoundButton_RadioButton = 16974436; // 0x1030264
+    field public static final int Widget_Material_CompoundButton_Star = 16974437; // 0x1030265
+    field public static final int Widget_Material_CompoundButton_Switch = 16974554; // 0x10302da
+    field public static final int Widget_Material_DatePicker = 16974438; // 0x1030266
+    field public static final int Widget_Material_DropDownItem = 16974439; // 0x1030267
+    field public static final int Widget_Material_DropDownItem_Spinner = 16974440; // 0x1030268
+    field public static final int Widget_Material_EditText = 16974441; // 0x1030269
+    field public static final int Widget_Material_ExpandableListView = 16974442; // 0x103026a
+    field public static final int Widget_Material_FastScroll = 16974443; // 0x103026b
+    field public static final int Widget_Material_GridView = 16974444; // 0x103026c
+    field public static final int Widget_Material_HorizontalScrollView = 16974445; // 0x103026d
+    field public static final int Widget_Material_ImageButton = 16974446; // 0x103026e
+    field public static final int Widget_Material_Light = 16974478; // 0x103028e
+    field public static final int Widget_Material_Light_ActionBar = 16974479; // 0x103028f
+    field public static final int Widget_Material_Light_ActionBar_Solid = 16974480; // 0x1030290
+    field public static final int Widget_Material_Light_ActionBar_TabBar = 16974481; // 0x1030291
+    field public static final int Widget_Material_Light_ActionBar_TabText = 16974482; // 0x1030292
+    field public static final int Widget_Material_Light_ActionBar_TabView = 16974483; // 0x1030293
+    field public static final int Widget_Material_Light_ActionButton = 16974484; // 0x1030294
+    field public static final int Widget_Material_Light_ActionButton_CloseMode = 16974485; // 0x1030295
+    field public static final int Widget_Material_Light_ActionButton_Overflow = 16974486; // 0x1030296
+    field public static final int Widget_Material_Light_ActionMode = 16974487; // 0x1030297
+    field public static final int Widget_Material_Light_AutoCompleteTextView = 16974488; // 0x1030298
+    field public static final int Widget_Material_Light_Button = 16974489; // 0x1030299
+    field public static final int Widget_Material_Light_ButtonBar = 16974496; // 0x10302a0
+    field public static final int Widget_Material_Light_ButtonBar_AlertDialog = 16974497; // 0x10302a1
+    field public static final int Widget_Material_Light_Button_Borderless = 16974490; // 0x103029a
+    field public static final int Widget_Material_Light_Button_Borderless_Colored = 16974491; // 0x103029b
+    field public static final int Widget_Material_Light_Button_Borderless_Small = 16974492; // 0x103029c
+    field public static final int Widget_Material_Light_Button_Inset = 16974493; // 0x103029d
+    field public static final int Widget_Material_Light_Button_Small = 16974494; // 0x103029e
+    field public static final int Widget_Material_Light_Button_Toggle = 16974495; // 0x103029f
+    field public static final int Widget_Material_Light_CalendarView = 16974498; // 0x10302a2
+    field public static final int Widget_Material_Light_CheckedTextView = 16974499; // 0x10302a3
+    field public static final int Widget_Material_Light_CompoundButton_CheckBox = 16974500; // 0x10302a4
+    field public static final int Widget_Material_Light_CompoundButton_RadioButton = 16974501; // 0x10302a5
+    field public static final int Widget_Material_Light_CompoundButton_Star = 16974502; // 0x10302a6
+    field public static final int Widget_Material_Light_CompoundButton_Switch = 16974555; // 0x10302db
+    field public static final int Widget_Material_Light_DatePicker = 16974503; // 0x10302a7
+    field public static final int Widget_Material_Light_DropDownItem = 16974504; // 0x10302a8
+    field public static final int Widget_Material_Light_DropDownItem_Spinner = 16974505; // 0x10302a9
+    field public static final int Widget_Material_Light_EditText = 16974506; // 0x10302aa
+    field public static final int Widget_Material_Light_ExpandableListView = 16974507; // 0x10302ab
+    field public static final int Widget_Material_Light_FastScroll = 16974508; // 0x10302ac
+    field public static final int Widget_Material_Light_GridView = 16974509; // 0x10302ad
+    field public static final int Widget_Material_Light_HorizontalScrollView = 16974510; // 0x10302ae
+    field public static final int Widget_Material_Light_ImageButton = 16974511; // 0x10302af
+    field public static final int Widget_Material_Light_ListPopupWindow = 16974512; // 0x10302b0
+    field public static final int Widget_Material_Light_ListView = 16974513; // 0x10302b1
+    field public static final int Widget_Material_Light_ListView_DropDown = 16974514; // 0x10302b2
+    field public static final int Widget_Material_Light_MediaRouteButton = 16974515; // 0x10302b3
+    field public static final int Widget_Material_Light_NumberPicker = 16974557; // 0x10302dd
+    field public static final int Widget_Material_Light_PopupMenu = 16974516; // 0x10302b4
+    field public static final int Widget_Material_Light_PopupMenu_Overflow = 16974517; // 0x10302b5
+    field public static final int Widget_Material_Light_PopupWindow = 16974518; // 0x10302b6
+    field public static final int Widget_Material_Light_ProgressBar = 16974519; // 0x10302b7
+    field public static final int Widget_Material_Light_ProgressBar_Horizontal = 16974520; // 0x10302b8
+    field public static final int Widget_Material_Light_ProgressBar_Inverse = 16974521; // 0x10302b9
+    field public static final int Widget_Material_Light_ProgressBar_Large = 16974522; // 0x10302ba
+    field public static final int Widget_Material_Light_ProgressBar_Large_Inverse = 16974523; // 0x10302bb
+    field public static final int Widget_Material_Light_ProgressBar_Small = 16974524; // 0x10302bc
+    field public static final int Widget_Material_Light_ProgressBar_Small_Inverse = 16974525; // 0x10302bd
+    field public static final int Widget_Material_Light_ProgressBar_Small_Title = 16974526; // 0x10302be
+    field public static final int Widget_Material_Light_RatingBar = 16974527; // 0x10302bf
+    field public static final int Widget_Material_Light_RatingBar_Indicator = 16974528; // 0x10302c0
+    field public static final int Widget_Material_Light_RatingBar_Small = 16974529; // 0x10302c1
+    field public static final int Widget_Material_Light_ScrollView = 16974530; // 0x10302c2
+    field public static final int Widget_Material_Light_SearchView = 16974531; // 0x10302c3
+    field public static final int Widget_Material_Light_SeekBar = 16974532; // 0x10302c4
+    field public static final int Widget_Material_Light_SegmentedButton = 16974533; // 0x10302c5
+    field public static final int Widget_Material_Light_Spinner = 16974535; // 0x10302c7
+    field public static final int Widget_Material_Light_Spinner_Underlined = 16974536; // 0x10302c8
+    field public static final int Widget_Material_Light_StackView = 16974534; // 0x10302c6
+    field public static final int Widget_Material_Light_Tab = 16974537; // 0x10302c9
+    field public static final int Widget_Material_Light_TabWidget = 16974538; // 0x10302ca
+    field public static final int Widget_Material_Light_TextView = 16974539; // 0x10302cb
+    field public static final int Widget_Material_Light_TextView_SpinnerItem = 16974540; // 0x10302cc
+    field public static final int Widget_Material_Light_TimePicker = 16974541; // 0x10302cd
+    field public static final int Widget_Material_Light_WebTextView = 16974542; // 0x10302ce
+    field public static final int Widget_Material_Light_WebView = 16974543; // 0x10302cf
+    field public static final int Widget_Material_ListPopupWindow = 16974447; // 0x103026f
+    field public static final int Widget_Material_ListView = 16974448; // 0x1030270
+    field public static final int Widget_Material_ListView_DropDown = 16974449; // 0x1030271
+    field public static final int Widget_Material_MediaRouteButton = 16974450; // 0x1030272
+    field public static final int Widget_Material_NumberPicker = 16974556; // 0x10302dc
+    field public static final int Widget_Material_PopupMenu = 16974451; // 0x1030273
+    field public static final int Widget_Material_PopupMenu_Overflow = 16974452; // 0x1030274
+    field public static final int Widget_Material_PopupWindow = 16974453; // 0x1030275
+    field public static final int Widget_Material_ProgressBar = 16974454; // 0x1030276
+    field public static final int Widget_Material_ProgressBar_Horizontal = 16974455; // 0x1030277
+    field public static final int Widget_Material_ProgressBar_Large = 16974456; // 0x1030278
+    field public static final int Widget_Material_ProgressBar_Small = 16974457; // 0x1030279
+    field public static final int Widget_Material_ProgressBar_Small_Title = 16974458; // 0x103027a
+    field public static final int Widget_Material_RatingBar = 16974459; // 0x103027b
+    field public static final int Widget_Material_RatingBar_Indicator = 16974460; // 0x103027c
+    field public static final int Widget_Material_RatingBar_Small = 16974461; // 0x103027d
+    field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e
+    field public static final int Widget_Material_SearchView = 16974463; // 0x103027f
+    field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280
+    field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9
+    field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281
+    field public static final int Widget_Material_Spinner = 16974467; // 0x1030283
+    field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284
+    field public static final int Widget_Material_StackView = 16974466; // 0x1030282
+    field public static final int Widget_Material_Tab = 16974469; // 0x1030285
+    field public static final int Widget_Material_TabWidget = 16974470; // 0x1030286
+    field public static final int Widget_Material_TextView = 16974471; // 0x1030287
+    field public static final int Widget_Material_TextView_SpinnerItem = 16974472; // 0x1030288
+    field public static final int Widget_Material_TimePicker = 16974473; // 0x1030289
+    field public static final int Widget_Material_Toolbar = 16974474; // 0x103028a
+    field public static final int Widget_Material_Toolbar_Button_Navigation = 16974475; // 0x103028b
+    field public static final int Widget_Material_WebTextView = 16974476; // 0x103028c
+    field public static final int Widget_Material_WebView = 16974477; // 0x103028d
+    field public static final int Widget_PopupMenu = 16973958; // 0x1030086
+    field public static final int Widget_PopupWindow = 16973878; // 0x1030036
+    field public static final int Widget_ProgressBar = 16973852; // 0x103001c
+    field public static final int Widget_ProgressBar_Horizontal = 16973855; // 0x103001f
+    field public static final int Widget_ProgressBar_Inverse = 16973915; // 0x103005b
+    field public static final int Widget_ProgressBar_Large = 16973853; // 0x103001d
+    field public static final int Widget_ProgressBar_Large_Inverse = 16973916; // 0x103005c
+    field public static final int Widget_ProgressBar_Small = 16973854; // 0x103001e
+    field public static final int Widget_ProgressBar_Small_Inverse = 16973917; // 0x103005d
+    field public static final int Widget_RatingBar = 16973857; // 0x1030021
+    field public static final int Widget_ScrollView = 16973869; // 0x103002d
+    field public static final int Widget_SeekBar = 16973856; // 0x1030020
+    field public static final int Widget_Spinner = 16973864; // 0x1030028
+    field public static final int Widget_Spinner_DropDown = 16973955; // 0x1030083
+    field public static final int Widget_StackView = 16974310; // 0x10301e6
+    field public static final int Widget_TabWidget = 16973876; // 0x1030034
+    field public static final int Widget_TextView = 16973858; // 0x1030022
+    field public static final int Widget_TextView_PopupMenu = 16973865; // 0x1030029
+    field public static final int Widget_TextView_SpinnerItem = 16973866; // 0x103002a
+    field public static final int Widget_Toolbar = 16974311; // 0x10301e7
+    field public static final int Widget_Toolbar_Button_Navigation = 16974312; // 0x10301e8
+    field public static final int Widget_WebView = 16973875; // 0x1030033
+  }
+
+  public static final class R.transition {
+    ctor public R.transition();
+    field public static final int explode = 17760259; // 0x10f0003
+    field public static final int fade = 17760258; // 0x10f0002
+    field public static final int move = 17760257; // 0x10f0001
+    field public static final int no_transition = 17760256; // 0x10f0000
+    field public static final int slide_bottom = 17760260; // 0x10f0004
+    field public static final int slide_left = 17760263; // 0x10f0007
+    field public static final int slide_right = 17760262; // 0x10f0006
+    field public static final int slide_top = 17760261; // 0x10f0005
+  }
+
+  public static final class R.xml {
+    ctor public R.xml();
+  }
+
+}
+
+package android.accessibilityservice {
+
+  public final class AccessibilityButtonController {
+    method public boolean isAccessibilityButtonAvailable();
+    method public void registerAccessibilityButtonCallback(@NonNull android.accessibilityservice.AccessibilityButtonController.AccessibilityButtonCallback);
+    method public void registerAccessibilityButtonCallback(@NonNull android.accessibilityservice.AccessibilityButtonController.AccessibilityButtonCallback, @NonNull android.os.Handler);
+    method public void unregisterAccessibilityButtonCallback(@NonNull android.accessibilityservice.AccessibilityButtonController.AccessibilityButtonCallback);
+  }
+
+  public abstract static class AccessibilityButtonController.AccessibilityButtonCallback {
+    ctor public AccessibilityButtonController.AccessibilityButtonCallback();
+    method public void onAvailabilityChanged(android.accessibilityservice.AccessibilityButtonController, boolean);
+    method public void onClicked(android.accessibilityservice.AccessibilityButtonController);
+  }
+
+  public final class AccessibilityGestureEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static String gestureIdToString(int);
+    method public int getDisplayId();
+    method public int getGestureId();
+    method @NonNull public java.util.List<android.view.MotionEvent> getMotionEvents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.AccessibilityGestureEvent> CREATOR;
+  }
+
+  public abstract class AccessibilityService extends android.app.Service {
+    ctor public AccessibilityService();
+    method public final void disableSelf();
+    method public final boolean dispatchGesture(@NonNull android.accessibilityservice.GestureDescription, @Nullable android.accessibilityservice.AccessibilityService.GestureResultCallback, @Nullable android.os.Handler);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method @NonNull public final android.accessibilityservice.AccessibilityButtonController getAccessibilityButtonController();
+    method @NonNull public final android.accessibilityservice.AccessibilityButtonController getAccessibilityButtonController(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public final android.accessibilityservice.FingerprintGestureController getFingerprintGestureController();
+    method @NonNull public final android.accessibilityservice.AccessibilityService.MagnificationController getMagnificationController();
+    method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
+    method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
+    method @NonNull public final android.accessibilityservice.AccessibilityService.SoftKeyboardController getSoftKeyboardController();
+    method @NonNull public final java.util.List<android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction> getSystemActions();
+    method public java.util.List<android.view.accessibility.AccessibilityWindowInfo> getWindows();
+    method @NonNull public final android.util.SparseArray<java.util.List<android.view.accessibility.AccessibilityWindowInfo>> getWindowsOnAllDisplays();
+    method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated protected boolean onGesture(int);
+    method public boolean onGesture(@NonNull android.accessibilityservice.AccessibilityGestureEvent);
+    method public abstract void onInterrupt();
+    method protected boolean onKeyEvent(android.view.KeyEvent);
+    method protected void onServiceConnected();
+    method public void onSystemActionsChanged();
+    method public final boolean performGlobalAction(int);
+    method public void setAccessibilityFocusAppearance(int, @ColorInt int);
+    method public void setGestureDetectionPassthroughRegion(int, @NonNull android.graphics.Region);
+    method public final void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo);
+    method public void setTouchExplorationPassthroughRegion(int, @NonNull android.graphics.Region);
+    method public void takeScreenshot(int, @NonNull java.util.concurrent.Executor, @NonNull android.accessibilityservice.AccessibilityService.TakeScreenshotCallback);
+    field public static final int ERROR_TAKE_SCREENSHOT_INTERNAL_ERROR = 1; // 0x1
+    field public static final int ERROR_TAKE_SCREENSHOT_INTERVAL_TIME_SHORT = 3; // 0x3
+    field public static final int ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY = 4; // 0x4
+    field public static final int ERROR_TAKE_SCREENSHOT_NO_ACCESSIBILITY_ACCESS = 2; // 0x2
+    field public static final int GESTURE_2_FINGER_DOUBLE_TAP = 20; // 0x14
+    field public static final int GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD = 40; // 0x28
+    field public static final int GESTURE_2_FINGER_SINGLE_TAP = 19; // 0x13
+    field public static final int GESTURE_2_FINGER_SWIPE_DOWN = 26; // 0x1a
+    field public static final int GESTURE_2_FINGER_SWIPE_LEFT = 27; // 0x1b
+    field public static final int GESTURE_2_FINGER_SWIPE_RIGHT = 28; // 0x1c
+    field public static final int GESTURE_2_FINGER_SWIPE_UP = 25; // 0x19
+    field public static final int GESTURE_2_FINGER_TRIPLE_TAP = 21; // 0x15
+    field public static final int GESTURE_2_FINGER_TRIPLE_TAP_AND_HOLD = 43; // 0x2b
+    field public static final int GESTURE_3_FINGER_DOUBLE_TAP = 23; // 0x17
+    field public static final int GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD = 41; // 0x29
+    field public static final int GESTURE_3_FINGER_SINGLE_TAP = 22; // 0x16
+    field public static final int GESTURE_3_FINGER_SINGLE_TAP_AND_HOLD = 44; // 0x2c
+    field public static final int GESTURE_3_FINGER_SWIPE_DOWN = 30; // 0x1e
+    field public static final int GESTURE_3_FINGER_SWIPE_LEFT = 31; // 0x1f
+    field public static final int GESTURE_3_FINGER_SWIPE_RIGHT = 32; // 0x20
+    field public static final int GESTURE_3_FINGER_SWIPE_UP = 29; // 0x1d
+    field public static final int GESTURE_3_FINGER_TRIPLE_TAP = 24; // 0x18
+    field public static final int GESTURE_3_FINGER_TRIPLE_TAP_AND_HOLD = 45; // 0x2d
+    field public static final int GESTURE_4_FINGER_DOUBLE_TAP = 38; // 0x26
+    field public static final int GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD = 42; // 0x2a
+    field public static final int GESTURE_4_FINGER_SINGLE_TAP = 37; // 0x25
+    field public static final int GESTURE_4_FINGER_SWIPE_DOWN = 34; // 0x22
+    field public static final int GESTURE_4_FINGER_SWIPE_LEFT = 35; // 0x23
+    field public static final int GESTURE_4_FINGER_SWIPE_RIGHT = 36; // 0x24
+    field public static final int GESTURE_4_FINGER_SWIPE_UP = 33; // 0x21
+    field public static final int GESTURE_4_FINGER_TRIPLE_TAP = 39; // 0x27
+    field public static final int GESTURE_DOUBLE_TAP = 17; // 0x11
+    field public static final int GESTURE_DOUBLE_TAP_AND_HOLD = 18; // 0x12
+    field public static final int GESTURE_SWIPE_DOWN = 2; // 0x2
+    field public static final int GESTURE_SWIPE_DOWN_AND_LEFT = 15; // 0xf
+    field public static final int GESTURE_SWIPE_DOWN_AND_RIGHT = 16; // 0x10
+    field public static final int GESTURE_SWIPE_DOWN_AND_UP = 8; // 0x8
+    field public static final int GESTURE_SWIPE_LEFT = 3; // 0x3
+    field public static final int GESTURE_SWIPE_LEFT_AND_DOWN = 10; // 0xa
+    field public static final int GESTURE_SWIPE_LEFT_AND_RIGHT = 5; // 0x5
+    field public static final int GESTURE_SWIPE_LEFT_AND_UP = 9; // 0x9
+    field public static final int GESTURE_SWIPE_RIGHT = 4; // 0x4
+    field public static final int GESTURE_SWIPE_RIGHT_AND_DOWN = 12; // 0xc
+    field public static final int GESTURE_SWIPE_RIGHT_AND_LEFT = 6; // 0x6
+    field public static final int GESTURE_SWIPE_RIGHT_AND_UP = 11; // 0xb
+    field public static final int GESTURE_SWIPE_UP = 1; // 0x1
+    field public static final int GESTURE_SWIPE_UP_AND_DOWN = 7; // 0x7
+    field public static final int GESTURE_SWIPE_UP_AND_LEFT = 13; // 0xd
+    field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe
+    field public static final int GESTURE_UNKNOWN = 0; // 0x0
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_ALL_APPS = 14; // 0xe
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON = 11; // 0xb
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON_CHOOSER = 12; // 0xc
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_SHORTCUT = 13; // 0xd
+    field public static final int GLOBAL_ACTION_BACK = 1; // 0x1
+    field public static final int GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE = 15; // 0xf
+    field public static final int GLOBAL_ACTION_HOME = 2; // 0x2
+    field public static final int GLOBAL_ACTION_KEYCODE_HEADSETHOOK = 10; // 0xa
+    field public static final int GLOBAL_ACTION_LOCK_SCREEN = 8; // 0x8
+    field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4
+    field public static final int GLOBAL_ACTION_POWER_DIALOG = 6; // 0x6
+    field public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5; // 0x5
+    field public static final int GLOBAL_ACTION_RECENTS = 3; // 0x3
+    field public static final int GLOBAL_ACTION_TAKE_SCREENSHOT = 9; // 0x9
+    field public static final int GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN = 7; // 0x7
+    field public static final String SERVICE_INTERFACE = "android.accessibilityservice.AccessibilityService";
+    field public static final String SERVICE_META_DATA = "android.accessibilityservice";
+    field public static final int SHOW_MODE_AUTO = 0; // 0x0
+    field public static final int SHOW_MODE_HIDDEN = 1; // 0x1
+    field public static final int SHOW_MODE_IGNORE_HARD_KEYBOARD = 2; // 0x2
+  }
+
+  public abstract static class AccessibilityService.GestureResultCallback {
+    ctor public AccessibilityService.GestureResultCallback();
+    method public void onCancelled(android.accessibilityservice.GestureDescription);
+    method public void onCompleted(android.accessibilityservice.GestureDescription);
+  }
+
+  public static final class AccessibilityService.MagnificationController {
+    method public void addListener(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener);
+    method public void addListener(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener, @Nullable android.os.Handler);
+    method public float getCenterX();
+    method public float getCenterY();
+    method @NonNull public android.graphics.Region getMagnificationRegion();
+    method public float getScale();
+    method public boolean removeListener(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener);
+    method public boolean reset(boolean);
+    method public boolean setCenter(float, float, boolean);
+    method public boolean setScale(float, boolean);
+  }
+
+  public static interface AccessibilityService.MagnificationController.OnMagnificationChangedListener {
+    method public void onMagnificationChanged(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController, @NonNull android.graphics.Region, float, float, float);
+  }
+
+  public static final class AccessibilityService.ScreenshotResult {
+    method @NonNull public android.graphics.ColorSpace getColorSpace();
+    method @NonNull public android.hardware.HardwareBuffer getHardwareBuffer();
+    method public long getTimestamp();
+  }
+
+  public static final class AccessibilityService.SoftKeyboardController {
+    method public void addOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener);
+    method public void addOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener, @Nullable android.os.Handler);
+    method public int getShowMode();
+    method public boolean removeOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener);
+    method public boolean setShowMode(int);
+    method public boolean switchToInputMethod(@NonNull String);
+  }
+
+  public static interface AccessibilityService.SoftKeyboardController.OnShowModeChangedListener {
+    method public void onShowModeChanged(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController, int);
+  }
+
+  public static interface AccessibilityService.TakeScreenshotCallback {
+    method public void onFailure(int);
+    method public void onSuccess(@NonNull android.accessibilityservice.AccessibilityService.ScreenshotResult);
+  }
+
+  public class AccessibilityServiceInfo implements android.os.Parcelable {
+    ctor public AccessibilityServiceInfo();
+    method public static String capabilityToString(int);
+    method public int describeContents();
+    method public static String feedbackTypeToString(int);
+    method public static String flagToString(int);
+    method @Deprecated public boolean getCanRetrieveWindowContent();
+    method public int getCapabilities();
+    method @Deprecated public String getDescription();
+    method public String getId();
+    method public int getInteractiveUiTimeoutMillis();
+    method public int getNonInteractiveUiTimeoutMillis();
+    method public android.content.pm.ResolveInfo getResolveInfo();
+    method public String getSettingsActivityName();
+    method public boolean isAccessibilityTool();
+    method public String loadDescription(android.content.pm.PackageManager);
+    method public CharSequence loadSummary(android.content.pm.PackageManager);
+    method public void setInteractiveUiTimeoutMillis(@IntRange(from=0) int);
+    method public void setNonInteractiveUiTimeoutMillis(@IntRange(from=0) int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10
+    field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20
+    field @Deprecated public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+    field public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8; // 0x8
+    field public static final int CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES = 64; // 0x40
+    field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+    field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+    field public static final int CAPABILITY_CAN_TAKE_SCREENSHOT = 128; // 0x80
+    field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.AccessibilityServiceInfo> CREATOR;
+    field public static final int DEFAULT = 1; // 0x1
+    field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+    field public static final int FEEDBACK_AUDIBLE = 4; // 0x4
+    field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+    field public static final int FEEDBACK_GENERIC = 16; // 0x10
+    field public static final int FEEDBACK_HAPTIC = 2; // 0x2
+    field public static final int FEEDBACK_SPOKEN = 1; // 0x1
+    field public static final int FEEDBACK_VISUAL = 8; // 0x8
+    field public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 128; // 0x80
+    field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+    field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+    field public static final int FLAG_REQUEST_2_FINGER_PASSTHROUGH = 8192; // 0x2000
+    field public static final int FLAG_REQUEST_ACCESSIBILITY_BUTTON = 256; // 0x100
+    field @Deprecated public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+    field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+    field public static final int FLAG_REQUEST_FINGERPRINT_GESTURES = 512; // 0x200
+    field public static final int FLAG_REQUEST_MULTI_FINGER_GESTURES = 4096; // 0x1000
+    field public static final int FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK = 1024; // 0x400
+    field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+    field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
+    field public static final int FLAG_SEND_MOTION_EVENTS = 16384; // 0x4000
+    field public static final int FLAG_SERVICE_HANDLES_DOUBLE_TAP = 2048; // 0x800
+    field public int eventTypes;
+    field public int feedbackType;
+    field public int flags;
+    field public long notificationTimeout;
+    field public String[] packageNames;
+  }
+
+  public final class FingerprintGestureController {
+    method public boolean isGestureDetectionAvailable();
+    method public void registerFingerprintGestureCallback(@NonNull android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback, @Nullable android.os.Handler);
+    method public void unregisterFingerprintGestureCallback(android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback);
+    field public static final int FINGERPRINT_GESTURE_SWIPE_DOWN = 8; // 0x8
+    field public static final int FINGERPRINT_GESTURE_SWIPE_LEFT = 2; // 0x2
+    field public static final int FINGERPRINT_GESTURE_SWIPE_RIGHT = 1; // 0x1
+    field public static final int FINGERPRINT_GESTURE_SWIPE_UP = 4; // 0x4
+  }
+
+  public abstract static class FingerprintGestureController.FingerprintGestureCallback {
+    ctor public FingerprintGestureController.FingerprintGestureCallback();
+    method public void onGestureDetected(int);
+    method public void onGestureDetectionAvailabilityChanged(boolean);
+  }
+
+  public final class GestureDescription {
+    method public int getDisplayId();
+    method public static long getMaxGestureDuration();
+    method public static int getMaxStrokeCount();
+    method public android.accessibilityservice.GestureDescription.StrokeDescription getStroke(@IntRange(from=0) int);
+    method public int getStrokeCount();
+  }
+
+  public static class GestureDescription.Builder {
+    ctor public GestureDescription.Builder();
+    method public android.accessibilityservice.GestureDescription.Builder addStroke(@NonNull android.accessibilityservice.GestureDescription.StrokeDescription);
+    method public android.accessibilityservice.GestureDescription build();
+    method @NonNull public android.accessibilityservice.GestureDescription.Builder setDisplayId(int);
+  }
+
+  public static class GestureDescription.StrokeDescription {
+    ctor public GestureDescription.StrokeDescription(@NonNull android.graphics.Path, @IntRange(from=0) long, @IntRange(from=0) long);
+    ctor public GestureDescription.StrokeDescription(@NonNull android.graphics.Path, @IntRange(from=0) long, @IntRange(from=0) long, boolean);
+    method public android.accessibilityservice.GestureDescription.StrokeDescription continueStroke(android.graphics.Path, long, long, boolean);
+    method public long getDuration();
+    method public android.graphics.Path getPath();
+    method public long getStartTime();
+    method public boolean willContinue();
+  }
+
+}
+
+package android.accounts {
+
+  public abstract class AbstractAccountAuthenticator {
+    ctor public AbstractAccountAuthenticator(android.content.Context);
+    method public abstract android.os.Bundle addAccount(android.accounts.AccountAuthenticatorResponse, String, String, String[], android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle addAccountFromCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle confirmCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle editProperties(android.accounts.AccountAuthenticatorResponse, String);
+    method public android.os.Bundle finishSession(android.accounts.AccountAuthenticatorResponse, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle getAccountCredentialsForCloning(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle getAccountRemovalAllowed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle getAuthToken(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract String getAuthTokenLabel(String);
+    method public final android.os.IBinder getIBinder();
+    method public abstract android.os.Bundle hasFeatures(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String[]) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle isCredentialsUpdateSuggested(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle startAddAccountSession(android.accounts.AccountAuthenticatorResponse, String, String, String[], android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle startUpdateCredentialsSession(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle updateCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    field public static final String KEY_CUSTOM_TOKEN_EXPIRY = "android.accounts.expiry";
+  }
+
+  public class Account implements android.os.Parcelable {
+    ctor public Account(String, String);
+    ctor public Account(android.os.Parcel);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accounts.Account> CREATOR;
+    field public final String name;
+    field public final String type;
+  }
+
+  @Deprecated public class AccountAuthenticatorActivity extends android.app.Activity {
+    ctor @Deprecated public AccountAuthenticatorActivity();
+    method @Deprecated public final void setAccountAuthenticatorResult(android.os.Bundle);
+  }
+
+  public class AccountAuthenticatorResponse implements android.os.Parcelable {
+    ctor public AccountAuthenticatorResponse(android.os.Parcel);
+    method public int describeContents();
+    method public void onError(int, String);
+    method public void onRequestContinued();
+    method public void onResult(android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accounts.AccountAuthenticatorResponse> CREATOR;
+  }
+
+  public class AccountManager {
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> addAccount(String, String, String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public boolean addAccountExplicitly(android.accounts.Account, String, android.os.Bundle);
+    method public boolean addAccountExplicitly(android.accounts.Account, String, android.os.Bundle, java.util.Map<java.lang.String,java.lang.Integer>);
+    method @RequiresPermission(value="android.permission.GET_ACCOUNTS", apis="..22") public void addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean);
+    method public void addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, String[]);
+    method @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public String blockingGetAuthToken(android.accounts.Account, String, boolean) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public void clearPassword(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> confirmCredentials(android.accounts.Account, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> editProperties(String, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> finishSession(android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public static android.accounts.AccountManager get(android.content.Context);
+    method public int getAccountVisibility(android.accounts.Account, String);
+    method @NonNull @RequiresPermission(value="android.permission.GET_ACCOUNTS", apis="..22") public android.accounts.Account[] getAccounts();
+    method public java.util.Map<android.accounts.Account,java.lang.Integer> getAccountsAndVisibilityForPackage(String, String);
+    method @NonNull @RequiresPermission(value="android.permission.GET_ACCOUNTS", apis="..22") public android.accounts.Account[] getAccountsByType(String);
+    method public android.accounts.AccountManagerFuture<android.accounts.Account[]> getAccountsByTypeAndFeatures(String, String[], android.accounts.AccountManagerCallback<android.accounts.Account[]>, android.os.Handler);
+    method @NonNull public android.accounts.Account[] getAccountsByTypeForPackage(String, String);
+    method @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @Deprecated @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthTokenByFeatures(String, String, String[], android.app.Activity, android.os.Bundle, android.os.Bundle, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AuthenticatorDescription[] getAuthenticatorTypes();
+    method public java.util.Map<java.lang.String,java.lang.Integer> getPackagesAndVisibilityForAccount(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public String getPassword(android.accounts.Account);
+    method public String getPreviousName(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public String getUserData(android.accounts.Account, String);
+    method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_ACCOUNTS", "android.permission.USE_CREDENTIALS"}, apis="..22") public void invalidateAuthToken(String, String);
+    method public android.accounts.AccountManagerFuture<java.lang.Boolean> isCredentialsUpdateSuggested(android.accounts.Account, String, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
+    method @Deprecated public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, String[], boolean, String, String, String[], android.os.Bundle);
+    method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.List<android.accounts.Account>, String[], String, String, String[], android.os.Bundle);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public boolean notifyAccountAuthenticated(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public String peekAuthToken(android.accounts.Account, String);
+    method @Deprecated @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> removeAccount(android.accounts.Account, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public boolean removeAccountExplicitly(android.accounts.Account);
+    method public void removeOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.accounts.Account> renameAccount(android.accounts.Account, @Size(min=1) String, android.accounts.AccountManagerCallback<android.accounts.Account>, android.os.Handler);
+    method public boolean setAccountVisibility(android.accounts.Account, String, int);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public void setAuthToken(android.accounts.Account, String, String);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public void setPassword(android.accounts.Account, String);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public void setUserData(android.accounts.Account, String, String);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(String, String, String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    field public static final String ACTION_ACCOUNT_REMOVED = "android.accounts.action.ACCOUNT_REMOVED";
+    field public static final String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
+    field public static final String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
+    field public static final String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
+    field public static final int ERROR_CODE_BAD_ARGUMENTS = 7; // 0x7
+    field public static final int ERROR_CODE_BAD_AUTHENTICATION = 9; // 0x9
+    field public static final int ERROR_CODE_BAD_REQUEST = 8; // 0x8
+    field public static final int ERROR_CODE_CANCELED = 4; // 0x4
+    field public static final int ERROR_CODE_INVALID_RESPONSE = 5; // 0x5
+    field public static final int ERROR_CODE_NETWORK_ERROR = 3; // 0x3
+    field public static final int ERROR_CODE_REMOTE_EXCEPTION = 1; // 0x1
+    field public static final int ERROR_CODE_UNSUPPORTED_OPERATION = 6; // 0x6
+    field public static final String KEY_ACCOUNTS = "accounts";
+    field public static final String KEY_ACCOUNT_AUTHENTICATOR_RESPONSE = "accountAuthenticatorResponse";
+    field public static final String KEY_ACCOUNT_MANAGER_RESPONSE = "accountManagerResponse";
+    field public static final String KEY_ACCOUNT_NAME = "authAccount";
+    field public static final String KEY_ACCOUNT_SESSION_BUNDLE = "accountSessionBundle";
+    field public static final String KEY_ACCOUNT_STATUS_TOKEN = "accountStatusToken";
+    field public static final String KEY_ACCOUNT_TYPE = "accountType";
+    field public static final String KEY_ANDROID_PACKAGE_NAME = "androidPackageName";
+    field public static final String KEY_AUTHENTICATOR_TYPES = "authenticator_types";
+    field public static final String KEY_AUTHTOKEN = "authtoken";
+    field public static final String KEY_AUTH_FAILED_MESSAGE = "authFailedMessage";
+    field public static final String KEY_AUTH_TOKEN_LABEL = "authTokenLabelKey";
+    field public static final String KEY_BOOLEAN_RESULT = "booleanResult";
+    field public static final String KEY_CALLER_PID = "callerPid";
+    field public static final String KEY_CALLER_UID = "callerUid";
+    field public static final String KEY_ERROR_CODE = "errorCode";
+    field public static final String KEY_ERROR_MESSAGE = "errorMessage";
+    field public static final String KEY_INTENT = "intent";
+    field public static final String KEY_LAST_AUTHENTICATED_TIME = "lastAuthenticatedTime";
+    field public static final String KEY_PASSWORD = "password";
+    field public static final String KEY_USERDATA = "userdata";
+    field @Deprecated public static final String LOGIN_ACCOUNTS_CHANGED_ACTION = "android.accounts.LOGIN_ACCOUNTS_CHANGED";
+    field public static final String PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE = "android:accounts:key_legacy_not_visible";
+    field public static final String PACKAGE_NAME_KEY_LEGACY_VISIBLE = "android:accounts:key_legacy_visible";
+    field public static final int VISIBILITY_NOT_VISIBLE = 3; // 0x3
+    field public static final int VISIBILITY_UNDEFINED = 0; // 0x0
+    field public static final int VISIBILITY_USER_MANAGED_NOT_VISIBLE = 4; // 0x4
+    field public static final int VISIBILITY_USER_MANAGED_VISIBLE = 2; // 0x2
+    field public static final int VISIBILITY_VISIBLE = 1; // 0x1
+  }
+
+  public interface AccountManagerCallback<V> {
+    method public void run(android.accounts.AccountManagerFuture<V>);
+  }
+
+  public interface AccountManagerFuture<V> {
+    method public boolean cancel(boolean);
+    method public V getResult() throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
+    method public V getResult(long, java.util.concurrent.TimeUnit) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+  }
+
+  public class AccountsException extends java.lang.Exception {
+    ctor public AccountsException();
+    ctor public AccountsException(String);
+    ctor public AccountsException(String, Throwable);
+    ctor public AccountsException(Throwable);
+  }
+
+  public class AuthenticatorDescription implements android.os.Parcelable {
+    ctor public AuthenticatorDescription(String, String, int, int, int, int, boolean);
+    ctor public AuthenticatorDescription(String, String, int, int, int, int);
+    method public int describeContents();
+    method public static android.accounts.AuthenticatorDescription newKey(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accounts.AuthenticatorDescription> CREATOR;
+    field public final int accountPreferencesId;
+    field public final boolean customTokens;
+    field public final int iconId;
+    field public final int labelId;
+    field public final String packageName;
+    field public final int smallIconId;
+    field public final String type;
+  }
+
+  public class AuthenticatorException extends android.accounts.AccountsException {
+    ctor public AuthenticatorException();
+    ctor public AuthenticatorException(String);
+    ctor public AuthenticatorException(String, Throwable);
+    ctor public AuthenticatorException(Throwable);
+  }
+
+  public class NetworkErrorException extends android.accounts.AccountsException {
+    ctor public NetworkErrorException();
+    ctor public NetworkErrorException(String);
+    ctor public NetworkErrorException(String, Throwable);
+    ctor public NetworkErrorException(Throwable);
+  }
+
+  public interface OnAccountsUpdateListener {
+    method public void onAccountsUpdated(android.accounts.Account[]);
+  }
+
+  public class OperationCanceledException extends android.accounts.AccountsException {
+    ctor public OperationCanceledException();
+    ctor public OperationCanceledException(String);
+    ctor public OperationCanceledException(String, Throwable);
+    ctor public OperationCanceledException(Throwable);
+  }
+
+}
+
+package android.animation {
+
+  public abstract class Animator implements java.lang.Cloneable {
+    ctor public Animator();
+    method public void addListener(android.animation.Animator.AnimatorListener);
+    method public void addPauseListener(android.animation.Animator.AnimatorPauseListener);
+    method public void cancel();
+    method public android.animation.Animator clone();
+    method public void end();
+    method public abstract long getDuration();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public java.util.ArrayList<android.animation.Animator.AnimatorListener> getListeners();
+    method public abstract long getStartDelay();
+    method public long getTotalDuration();
+    method public boolean isPaused();
+    method public abstract boolean isRunning();
+    method public boolean isStarted();
+    method public void pause();
+    method public void removeAllListeners();
+    method public void removeListener(android.animation.Animator.AnimatorListener);
+    method public void removePauseListener(android.animation.Animator.AnimatorPauseListener);
+    method public void resume();
+    method public abstract android.animation.Animator setDuration(long);
+    method public abstract void setInterpolator(android.animation.TimeInterpolator);
+    method public abstract void setStartDelay(long);
+    method public void setTarget(@Nullable Object);
+    method public void setupEndValues();
+    method public void setupStartValues();
+    method public void start();
+    field public static final long DURATION_INFINITE = -1L; // 0xffffffffffffffffL
+  }
+
+  public static interface Animator.AnimatorListener {
+    method public void onAnimationCancel(android.animation.Animator);
+    method public default void onAnimationEnd(android.animation.Animator, boolean);
+    method public void onAnimationEnd(android.animation.Animator);
+    method public void onAnimationRepeat(android.animation.Animator);
+    method public default void onAnimationStart(android.animation.Animator, boolean);
+    method public void onAnimationStart(android.animation.Animator);
+  }
+
+  public static interface Animator.AnimatorPauseListener {
+    method public void onAnimationPause(android.animation.Animator);
+    method public void onAnimationResume(android.animation.Animator);
+  }
+
+  public class AnimatorInflater {
+    ctor public AnimatorInflater();
+    method public static android.animation.Animator loadAnimator(android.content.Context, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.animation.StateListAnimator loadStateListAnimator(android.content.Context, int) throws android.content.res.Resources.NotFoundException;
+  }
+
+  public abstract class AnimatorListenerAdapter implements android.animation.Animator.AnimatorListener android.animation.Animator.AnimatorPauseListener {
+    ctor public AnimatorListenerAdapter();
+    method public void onAnimationCancel(android.animation.Animator);
+    method public void onAnimationEnd(android.animation.Animator);
+    method public void onAnimationPause(android.animation.Animator);
+    method public void onAnimationRepeat(android.animation.Animator);
+    method public void onAnimationResume(android.animation.Animator);
+    method public void onAnimationStart(android.animation.Animator);
+  }
+
+  public final class AnimatorSet extends android.animation.Animator {
+    ctor public AnimatorSet();
+    method public android.animation.AnimatorSet clone();
+    method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
+    method public long getCurrentPlayTime();
+    method public long getDuration();
+    method public long getStartDelay();
+    method public boolean isRunning();
+    method public android.animation.AnimatorSet.Builder play(android.animation.Animator);
+    method public void playSequentially(android.animation.Animator...);
+    method public void playSequentially(java.util.List<android.animation.Animator>);
+    method public void playTogether(android.animation.Animator...);
+    method public void playTogether(java.util.Collection<android.animation.Animator>);
+    method public void reverse();
+    method public void setCurrentPlayTime(long);
+    method public android.animation.AnimatorSet setDuration(long);
+    method public void setInterpolator(android.animation.TimeInterpolator);
+    method public void setStartDelay(long);
+  }
+
+  public class AnimatorSet.Builder {
+    method public android.animation.AnimatorSet.Builder after(android.animation.Animator);
+    method public android.animation.AnimatorSet.Builder after(long);
+    method public android.animation.AnimatorSet.Builder before(android.animation.Animator);
+    method public android.animation.AnimatorSet.Builder with(android.animation.Animator);
+  }
+
+  public class ArgbEvaluator implements android.animation.TypeEvaluator {
+    ctor public ArgbEvaluator();
+    method public Object evaluate(float, Object, Object);
+  }
+
+  public abstract class BidirectionalTypeConverter<T, V> extends android.animation.TypeConverter<T,V> {
+    ctor public BidirectionalTypeConverter(Class<T>, Class<V>);
+    method public abstract T convertBack(V);
+    method public android.animation.BidirectionalTypeConverter<V,T> invert();
+  }
+
+  public class FloatArrayEvaluator implements android.animation.TypeEvaluator<float[]> {
+    ctor public FloatArrayEvaluator();
+    ctor public FloatArrayEvaluator(float[]);
+    method public float[] evaluate(float, float[], float[]);
+  }
+
+  public class FloatEvaluator implements android.animation.TypeEvaluator<java.lang.Number> {
+    ctor public FloatEvaluator();
+    method public Float evaluate(float, Number, Number);
+  }
+
+  public class IntArrayEvaluator implements android.animation.TypeEvaluator<int[]> {
+    ctor public IntArrayEvaluator();
+    ctor public IntArrayEvaluator(int[]);
+    method public int[] evaluate(float, int[], int[]);
+  }
+
+  public class IntEvaluator implements android.animation.TypeEvaluator<java.lang.Integer> {
+    ctor public IntEvaluator();
+    method public Integer evaluate(float, Integer, Integer);
+  }
+
+  public abstract class Keyframe implements java.lang.Cloneable {
+    ctor public Keyframe();
+    method public abstract android.animation.Keyframe clone();
+    method public float getFraction();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public Class getType();
+    method public abstract Object getValue();
+    method public boolean hasValue();
+    method public static android.animation.Keyframe ofFloat(float, float);
+    method public static android.animation.Keyframe ofFloat(float);
+    method public static android.animation.Keyframe ofInt(float, int);
+    method public static android.animation.Keyframe ofInt(float);
+    method public static android.animation.Keyframe ofObject(float, Object);
+    method public static android.animation.Keyframe ofObject(float);
+    method public void setFraction(float);
+    method public void setInterpolator(android.animation.TimeInterpolator);
+    method public abstract void setValue(Object);
+  }
+
+  public class LayoutTransition {
+    ctor public LayoutTransition();
+    method public void addChild(android.view.ViewGroup, android.view.View);
+    method public void addTransitionListener(android.animation.LayoutTransition.TransitionListener);
+    method public void disableTransitionType(int);
+    method public void enableTransitionType(int);
+    method public android.animation.Animator getAnimator(int);
+    method public long getDuration(int);
+    method public android.animation.TimeInterpolator getInterpolator(int);
+    method public long getStagger(int);
+    method public long getStartDelay(int);
+    method public java.util.List<android.animation.LayoutTransition.TransitionListener> getTransitionListeners();
+    method @Deprecated public void hideChild(android.view.ViewGroup, android.view.View);
+    method public void hideChild(android.view.ViewGroup, android.view.View, int);
+    method public boolean isChangingLayout();
+    method public boolean isRunning();
+    method public boolean isTransitionTypeEnabled(int);
+    method public void removeChild(android.view.ViewGroup, android.view.View);
+    method public void removeTransitionListener(android.animation.LayoutTransition.TransitionListener);
+    method public void setAnimateParentHierarchy(boolean);
+    method public void setAnimator(int, android.animation.Animator);
+    method public void setDuration(long);
+    method public void setDuration(int, long);
+    method public void setInterpolator(int, android.animation.TimeInterpolator);
+    method public void setStagger(int, long);
+    method public void setStartDelay(int, long);
+    method @Deprecated public void showChild(android.view.ViewGroup, android.view.View);
+    method public void showChild(android.view.ViewGroup, android.view.View, int);
+    field public static final int APPEARING = 2; // 0x2
+    field public static final int CHANGE_APPEARING = 0; // 0x0
+    field public static final int CHANGE_DISAPPEARING = 1; // 0x1
+    field public static final int CHANGING = 4; // 0x4
+    field public static final int DISAPPEARING = 3; // 0x3
+  }
+
+  public static interface LayoutTransition.TransitionListener {
+    method public void endTransition(android.animation.LayoutTransition, android.view.ViewGroup, android.view.View, int);
+    method public void startTransition(android.animation.LayoutTransition, android.view.ViewGroup, android.view.View, int);
+  }
+
+  public final class ObjectAnimator extends android.animation.ValueAnimator {
+    ctor public ObjectAnimator();
+    method public android.animation.ObjectAnimator clone();
+    method @Nullable public String getPropertyName();
+    method @Nullable public Object getTarget();
+    method public static android.animation.ObjectAnimator ofArgb(Object, String, int...);
+    method public static <T> android.animation.ObjectAnimator ofArgb(T, android.util.Property<T,java.lang.Integer>, int...);
+    method public static android.animation.ObjectAnimator ofFloat(Object, String, float...);
+    method public static android.animation.ObjectAnimator ofFloat(Object, String, String, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T,java.lang.Float>, float...);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T,java.lang.Float>, android.util.Property<T,java.lang.Float>, android.graphics.Path);
+    method public static android.animation.ObjectAnimator ofInt(Object, String, int...);
+    method public static android.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T,java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T,java.lang.Integer>, android.util.Property<T,java.lang.Integer>, android.graphics.Path);
+    method public static android.animation.ObjectAnimator ofMultiFloat(Object, String, float[][]);
+    method public static android.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <T> android.animation.ObjectAnimator ofMultiFloat(Object, String, android.animation.TypeConverter<T,float[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static android.animation.ObjectAnimator ofMultiInt(Object, String, int[][]);
+    method public static android.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <T> android.animation.ObjectAnimator ofMultiInt(Object, String, android.animation.TypeConverter<T,int[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static android.animation.ObjectAnimator ofObject(Object, String, android.animation.TypeEvaluator, java.lang.Object...);
+    method @NonNull public static android.animation.ObjectAnimator ofObject(Object, String, @Nullable android.animation.TypeConverter<android.graphics.PointF,?>, android.graphics.Path);
+    method @NonNull @java.lang.SafeVarargs public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T,V>, android.animation.TypeEvaluator<V>, V...);
+    method @NonNull @java.lang.SafeVarargs public static <T, V, P> android.animation.ObjectAnimator ofObject(T, android.util.Property<T,P>, android.animation.TypeConverter<V,P>, android.animation.TypeEvaluator<V>, V...);
+    method @NonNull public static <T, V> android.animation.ObjectAnimator ofObject(T, @NonNull android.util.Property<T,V>, @Nullable android.animation.TypeConverter<android.graphics.PointF,V>, android.graphics.Path);
+    method @NonNull public static android.animation.ObjectAnimator ofPropertyValuesHolder(Object, android.animation.PropertyValuesHolder...);
+    method public void setAutoCancel(boolean);
+    method @NonNull public android.animation.ObjectAnimator setDuration(long);
+    method public void setProperty(@NonNull android.util.Property);
+    method public void setPropertyName(@NonNull String);
+  }
+
+  public class PointFEvaluator implements android.animation.TypeEvaluator<android.graphics.PointF> {
+    ctor public PointFEvaluator();
+    ctor public PointFEvaluator(android.graphics.PointF);
+    method public android.graphics.PointF evaluate(float, android.graphics.PointF, android.graphics.PointF);
+  }
+
+  public class PropertyValuesHolder implements java.lang.Cloneable {
+    method public android.animation.PropertyValuesHolder clone();
+    method public String getPropertyName();
+    method public static android.animation.PropertyValuesHolder ofFloat(String, float...);
+    method public static android.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float>, float...);
+    method public static android.animation.PropertyValuesHolder ofInt(String, int...);
+    method public static android.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer>, int...);
+    method public static android.animation.PropertyValuesHolder ofKeyframe(String, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(String, float[][]);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <V> android.animation.PropertyValuesHolder ofMultiFloat(String, android.animation.TypeConverter<V,float[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiFloat(String, android.animation.TypeConverter<T,float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(String, int[][]);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <V> android.animation.PropertyValuesHolder ofMultiInt(String, android.animation.TypeConverter<V,int[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiInt(String, android.animation.TypeConverter<T,int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofObject(String, android.animation.TypeEvaluator, java.lang.Object...);
+    method public static android.animation.PropertyValuesHolder ofObject(String, android.animation.TypeConverter<android.graphics.PointF,?>, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
+    method @java.lang.SafeVarargs public static <T, V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?,V>, android.animation.TypeConverter<T,V>, android.animation.TypeEvaluator<T>, T...);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?,V>, android.animation.TypeConverter<android.graphics.PointF,V>, android.graphics.Path);
+    method public void setConverter(android.animation.TypeConverter);
+    method public void setEvaluator(android.animation.TypeEvaluator);
+    method public void setFloatValues(float...);
+    method public void setIntValues(int...);
+    method public void setKeyframes(android.animation.Keyframe...);
+    method public void setObjectValues(java.lang.Object...);
+    method public void setProperty(android.util.Property);
+    method public void setPropertyName(String);
+  }
+
+  public class RectEvaluator implements android.animation.TypeEvaluator<android.graphics.Rect> {
+    ctor public RectEvaluator();
+    ctor public RectEvaluator(android.graphics.Rect);
+    method public android.graphics.Rect evaluate(float, android.graphics.Rect, android.graphics.Rect);
+  }
+
+  public class StateListAnimator implements java.lang.Cloneable {
+    ctor public StateListAnimator();
+    method public void addState(int[], android.animation.Animator);
+    method public android.animation.StateListAnimator clone();
+    method public void jumpToCurrentState();
+  }
+
+  public class TimeAnimator extends android.animation.ValueAnimator {
+    ctor public TimeAnimator();
+    method public void setTimeListener(android.animation.TimeAnimator.TimeListener);
+  }
+
+  public static interface TimeAnimator.TimeListener {
+    method public void onTimeUpdate(android.animation.TimeAnimator, long, long);
+  }
+
+  public interface TimeInterpolator {
+    method public float getInterpolation(float);
+  }
+
+  public abstract class TypeConverter<T, V> {
+    ctor public TypeConverter(Class<T>, Class<V>);
+    method public abstract V convert(T);
+  }
+
+  public interface TypeEvaluator<T> {
+    method public T evaluate(float, T, T);
+  }
+
+  public class ValueAnimator extends android.animation.Animator {
+    ctor public ValueAnimator();
+    method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
+    method public static boolean areAnimatorsEnabled();
+    method public android.animation.ValueAnimator clone();
+    method public float getAnimatedFraction();
+    method public Object getAnimatedValue();
+    method public Object getAnimatedValue(String);
+    method public long getCurrentPlayTime();
+    method public long getDuration();
+    method public static long getFrameDelay();
+    method public int getRepeatCount();
+    method public int getRepeatMode();
+    method public long getStartDelay();
+    method public android.animation.PropertyValuesHolder[] getValues();
+    method public boolean isRunning();
+    method public static android.animation.ValueAnimator ofArgb(int...);
+    method public static android.animation.ValueAnimator ofFloat(float...);
+    method public static android.animation.ValueAnimator ofInt(int...);
+    method public static android.animation.ValueAnimator ofObject(android.animation.TypeEvaluator, java.lang.Object...);
+    method public static android.animation.ValueAnimator ofPropertyValuesHolder(android.animation.PropertyValuesHolder...);
+    method public void removeAllUpdateListeners();
+    method public void removeUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
+    method public void reverse();
+    method public void setCurrentFraction(float);
+    method public void setCurrentPlayTime(long);
+    method public android.animation.ValueAnimator setDuration(long);
+    method public void setEvaluator(android.animation.TypeEvaluator);
+    method public void setFloatValues(float...);
+    method public static void setFrameDelay(long);
+    method public void setIntValues(int...);
+    method public void setInterpolator(android.animation.TimeInterpolator);
+    method public void setObjectValues(java.lang.Object...);
+    method public void setRepeatCount(int);
+    method public void setRepeatMode(int);
+    method public void setStartDelay(long);
+    method public void setValues(android.animation.PropertyValuesHolder...);
+    field public static final int INFINITE = -1; // 0xffffffff
+    field public static final int RESTART = 1; // 0x1
+    field public static final int REVERSE = 2; // 0x2
+  }
+
+  public static interface ValueAnimator.AnimatorUpdateListener {
+    method public void onAnimationUpdate(android.animation.ValueAnimator);
+  }
+
+}
+
+package android.annotation {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface SuppressLint {
+    method public abstract String[] value();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD}) public @interface TargetApi {
+    method public abstract int value();
+  }
+
+}
+
+package android.app {
+
+  public abstract class ActionBar {
+    ctor public ActionBar();
+    method public abstract void addOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab, boolean);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab, int);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab, int, boolean);
+    method public abstract android.view.View getCustomView();
+    method public abstract int getDisplayOptions();
+    method public float getElevation();
+    method public abstract int getHeight();
+    method public int getHideOffset();
+    method @Deprecated public abstract int getNavigationItemCount();
+    method @Deprecated public abstract int getNavigationMode();
+    method @Deprecated public abstract int getSelectedNavigationIndex();
+    method @Deprecated public abstract android.app.ActionBar.Tab getSelectedTab();
+    method public abstract CharSequence getSubtitle();
+    method @Deprecated public abstract android.app.ActionBar.Tab getTabAt(int);
+    method @Deprecated public abstract int getTabCount();
+    method public android.content.Context getThemedContext();
+    method public abstract CharSequence getTitle();
+    method public abstract void hide();
+    method public boolean isHideOnContentScrollEnabled();
+    method public abstract boolean isShowing();
+    method @Deprecated public abstract android.app.ActionBar.Tab newTab();
+    method @Deprecated public abstract void removeAllTabs();
+    method public abstract void removeOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener);
+    method @Deprecated public abstract void removeTab(android.app.ActionBar.Tab);
+    method @Deprecated public abstract void removeTabAt(int);
+    method @Deprecated public abstract void selectTab(android.app.ActionBar.Tab);
+    method public abstract void setBackgroundDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public abstract void setCustomView(android.view.View);
+    method public abstract void setCustomView(android.view.View, android.app.ActionBar.LayoutParams);
+    method public abstract void setCustomView(@LayoutRes int);
+    method public abstract void setDisplayHomeAsUpEnabled(boolean);
+    method public abstract void setDisplayOptions(int);
+    method public abstract void setDisplayOptions(int, int);
+    method public abstract void setDisplayShowCustomEnabled(boolean);
+    method public abstract void setDisplayShowHomeEnabled(boolean);
+    method public abstract void setDisplayShowTitleEnabled(boolean);
+    method public abstract void setDisplayUseLogoEnabled(boolean);
+    method public void setElevation(float);
+    method public void setHideOffset(int);
+    method public void setHideOnContentScrollEnabled(boolean);
+    method public void setHomeActionContentDescription(CharSequence);
+    method public void setHomeActionContentDescription(@StringRes int);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+    method public void setHomeAsUpIndicator(@DrawableRes int);
+    method public void setHomeButtonEnabled(boolean);
+    method public abstract void setIcon(@DrawableRes int);
+    method public abstract void setIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.app.ActionBar.OnNavigationListener);
+    method public abstract void setLogo(@DrawableRes int);
+    method public abstract void setLogo(android.graphics.drawable.Drawable);
+    method @Deprecated public abstract void setNavigationMode(int);
+    method @Deprecated public abstract void setSelectedNavigationItem(int);
+    method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public abstract void setSubtitle(CharSequence);
+    method public abstract void setSubtitle(@StringRes int);
+    method public abstract void setTitle(CharSequence);
+    method public abstract void setTitle(@StringRes int);
+    method public abstract void show();
+    field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+    field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+    field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+    field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+    field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+    field @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
+    field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
+    field @Deprecated public static final int NAVIGATION_MODE_TABS = 2; // 0x2
+  }
+
+  public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public ActionBar.LayoutParams(@NonNull android.content.Context, android.util.AttributeSet);
+    ctor public ActionBar.LayoutParams(int, int);
+    ctor public ActionBar.LayoutParams(int, int, int);
+    ctor public ActionBar.LayoutParams(int);
+    ctor public ActionBar.LayoutParams(android.app.ActionBar.LayoutParams);
+    ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+    field public int gravity;
+  }
+
+  public static interface ActionBar.OnMenuVisibilityListener {
+    method public void onMenuVisibilityChanged(boolean);
+  }
+
+  @Deprecated public static interface ActionBar.OnNavigationListener {
+    method @Deprecated public boolean onNavigationItemSelected(int, long);
+  }
+
+  @Deprecated public abstract static class ActionBar.Tab {
+    ctor @Deprecated public ActionBar.Tab();
+    method @Deprecated public abstract CharSequence getContentDescription();
+    method @Deprecated public abstract android.view.View getCustomView();
+    method @Deprecated public abstract android.graphics.drawable.Drawable getIcon();
+    method @Deprecated public abstract int getPosition();
+    method @Deprecated public abstract Object getTag();
+    method @Deprecated public abstract CharSequence getText();
+    method @Deprecated public abstract void select();
+    method @Deprecated public abstract android.app.ActionBar.Tab setContentDescription(@StringRes int);
+    method @Deprecated public abstract android.app.ActionBar.Tab setContentDescription(CharSequence);
+    method @Deprecated public abstract android.app.ActionBar.Tab setCustomView(android.view.View);
+    method @Deprecated public abstract android.app.ActionBar.Tab setCustomView(@LayoutRes int);
+    method @Deprecated public abstract android.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public abstract android.app.ActionBar.Tab setIcon(@DrawableRes int);
+    method @Deprecated public abstract android.app.ActionBar.Tab setTabListener(android.app.ActionBar.TabListener);
+    method @Deprecated public abstract android.app.ActionBar.Tab setTag(Object);
+    method @Deprecated public abstract android.app.ActionBar.Tab setText(CharSequence);
+    method @Deprecated public abstract android.app.ActionBar.Tab setText(@StringRes int);
+    field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
+  }
+
+  @Deprecated public static interface ActionBar.TabListener {
+    method @Deprecated public void onTabReselected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
+    method @Deprecated public void onTabSelected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
+    method @Deprecated public void onTabUnselected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
+  }
+
+  @UiContext public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    ctor public Activity();
+    method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void closeContextMenu();
+    method public void closeOptionsMenu();
+    method public android.app.PendingIntent createPendingResult(int, @NonNull android.content.Intent, int);
+    method @Deprecated public final void dismissDialog(int);
+    method public final void dismissKeyboardShortcutsHelper();
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public void dump(@NonNull String, @Nullable java.io.FileDescriptor, @NonNull java.io.PrintWriter, @Nullable String[]);
+    method @Deprecated public void enterPictureInPictureMode();
+    method public boolean enterPictureInPictureMode(@NonNull android.app.PictureInPictureParams);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method public void finish();
+    method public void finishActivity(int);
+    method @Deprecated public void finishActivityFromChild(@NonNull android.app.Activity, int);
+    method public void finishAffinity();
+    method public void finishAfterTransition();
+    method public void finishAndRemoveTask();
+    method @Deprecated public void finishFromChild(android.app.Activity);
+    method @Nullable public android.app.ActionBar getActionBar();
+    method public final android.app.Application getApplication();
+    method @Nullable public android.content.ComponentName getCallingActivity();
+    method @Nullable public String getCallingPackage();
+    method public int getChangingConfigurations();
+    method public android.content.ComponentName getComponentName();
+    method public android.transition.Scene getContentScene();
+    method public android.transition.TransitionManager getContentTransitionManager();
+    method @Nullable public android.view.View getCurrentFocus();
+    method @Deprecated public android.app.FragmentManager getFragmentManager();
+    method public android.content.Intent getIntent();
+    method @Nullable public Object getLastNonConfigurationInstance();
+    method @NonNull public android.view.LayoutInflater getLayoutInflater();
+    method @Deprecated public android.app.LoaderManager getLoaderManager();
+    method @NonNull public String getLocalClassName();
+    method public int getMaxNumPictureInPictureActions();
+    method public final android.media.session.MediaController getMediaController();
+    method @NonNull public android.view.MenuInflater getMenuInflater();
+    method public final android.app.Activity getParent();
+    method @Nullable public android.content.Intent getParentActivityIntent();
+    method public android.content.SharedPreferences getPreferences(int);
+    method @Nullable public android.net.Uri getReferrer();
+    method public int getRequestedOrientation();
+    method public final android.view.SearchEvent getSearchEvent();
+    method @NonNull public final android.window.SplashScreen getSplashScreen();
+    method public int getTaskId();
+    method public final CharSequence getTitle();
+    method public final int getTitleColor();
+    method public android.app.VoiceInteractor getVoiceInteractor();
+    method public final int getVolumeControlStream();
+    method public android.view.Window getWindow();
+    method public android.view.WindowManager getWindowManager();
+    method public boolean hasWindowFocus();
+    method public void invalidateOptionsMenu();
+    method public boolean isActivityTransitionRunning();
+    method public boolean isChangingConfigurations();
+    method public final boolean isChild();
+    method public boolean isDestroyed();
+    method public boolean isFinishing();
+    method public boolean isImmersive();
+    method public boolean isInMultiWindowMode();
+    method public boolean isInPictureInPictureMode();
+    method public boolean isLaunchedFromBubble();
+    method public boolean isLocalVoiceInteractionSupported();
+    method public boolean isTaskRoot();
+    method public boolean isVoiceInteraction();
+    method public boolean isVoiceInteractionRoot();
+    method @Deprecated public final android.database.Cursor managedQuery(android.net.Uri, String[], String, String[], String);
+    method public boolean moveTaskToBack(boolean);
+    method public boolean navigateUpTo(android.content.Intent);
+    method @Deprecated public boolean navigateUpToFromChild(android.app.Activity, android.content.Intent);
+    method @CallSuper public void onActionModeFinished(android.view.ActionMode);
+    method @CallSuper public void onActionModeStarted(android.view.ActionMode);
+    method public void onActivityReenter(int, android.content.Intent);
+    method protected void onActivityResult(int, int, android.content.Intent);
+    method @Deprecated public void onAttachFragment(android.app.Fragment);
+    method public void onAttachedToWindow();
+    method public void onBackPressed();
+    method protected void onChildTitleChanged(android.app.Activity, CharSequence);
+    method public void onConfigurationChanged(@NonNull android.content.res.Configuration);
+    method public void onContentChanged();
+    method public boolean onContextItemSelected(@NonNull android.view.MenuItem);
+    method public void onContextMenuClosed(@NonNull android.view.Menu);
+    method @CallSuper @MainThread protected void onCreate(@Nullable android.os.Bundle);
+    method public void onCreate(@Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+    method @Nullable public CharSequence onCreateDescription();
+    method @Deprecated protected android.app.Dialog onCreateDialog(int);
+    method @Deprecated @Nullable protected android.app.Dialog onCreateDialog(int, android.os.Bundle);
+    method public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder);
+    method public boolean onCreateOptionsMenu(android.view.Menu);
+    method public boolean onCreatePanelMenu(int, @NonNull android.view.Menu);
+    method @Nullable public android.view.View onCreatePanelView(int);
+    method @Deprecated public boolean onCreateThumbnail(android.graphics.Bitmap, android.graphics.Canvas);
+    method @Nullable public android.view.View onCreateView(@NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+    method @Nullable public android.view.View onCreateView(@Nullable android.view.View, @NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+    method @CallSuper protected void onDestroy();
+    method public void onDetachedFromWindow();
+    method public void onEnterAnimationComplete();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public void onGetDirectActions(@NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<java.util.List<android.app.DirectAction>>);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyShortcut(int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onLocalVoiceInteractionStarted();
+    method public void onLocalVoiceInteractionStopped();
+    method public void onLowMemory();
+    method public boolean onMenuItemSelected(int, @NonNull android.view.MenuItem);
+    method public boolean onMenuOpened(int, @NonNull android.view.Menu);
+    method public void onMultiWindowModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onMultiWindowModeChanged(boolean);
+    method public boolean onNavigateUp();
+    method @Deprecated public boolean onNavigateUpFromChild(android.app.Activity);
+    method protected void onNewIntent(android.content.Intent);
+    method public boolean onOptionsItemSelected(@NonNull android.view.MenuItem);
+    method public void onOptionsMenuClosed(android.view.Menu);
+    method public void onPanelClosed(int, @NonNull android.view.Menu);
+    method @CallSuper protected void onPause();
+    method public void onPerformDirectAction(@NonNull String, @NonNull android.os.Bundle, @NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<android.os.Bundle>);
+    method public void onPictureInPictureModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onPictureInPictureModeChanged(boolean);
+    method public boolean onPictureInPictureRequested();
+    method public void onPictureInPictureUiStateChanged(@NonNull android.app.PictureInPictureUiState);
+    method @CallSuper protected void onPostCreate(@Nullable android.os.Bundle);
+    method public void onPostCreate(@Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method @CallSuper protected void onPostResume();
+    method @Deprecated protected void onPrepareDialog(int, android.app.Dialog);
+    method @Deprecated protected void onPrepareDialog(int, android.app.Dialog, android.os.Bundle);
+    method public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder);
+    method public boolean onPrepareOptionsMenu(android.view.Menu);
+    method public boolean onPreparePanel(int, @Nullable android.view.View, @NonNull android.view.Menu);
+    method public void onProvideAssistContent(android.app.assist.AssistContent);
+    method public void onProvideAssistData(android.os.Bundle);
+    method public android.net.Uri onProvideReferrer();
+    method public void onRequestPermissionsResult(int, @NonNull String[], @NonNull int[]);
+    method @CallSuper protected void onRestart();
+    method protected void onRestoreInstanceState(@NonNull android.os.Bundle);
+    method public void onRestoreInstanceState(@Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method @CallSuper protected void onResume();
+    method public Object onRetainNonConfigurationInstance();
+    method protected void onSaveInstanceState(@NonNull android.os.Bundle);
+    method public void onSaveInstanceState(@NonNull android.os.Bundle, @NonNull android.os.PersistableBundle);
+    method public boolean onSearchRequested(@Nullable android.view.SearchEvent);
+    method public boolean onSearchRequested();
+    method @CallSuper protected void onStart();
+    method @Deprecated public void onStateNotSaved();
+    method @CallSuper protected void onStop();
+    method protected void onTitleChanged(CharSequence, int);
+    method public void onTopResumedActivityChanged(boolean);
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public void onTrimMemory(int);
+    method public void onUserInteraction();
+    method protected void onUserLeaveHint();
+    method @Deprecated @CallSuper public void onVisibleBehindCanceled();
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+    method public void openContextMenu(android.view.View);
+    method public void openOptionsMenu();
+    method public void overridePendingTransition(int, int);
+    method public void postponeEnterTransition();
+    method public void recreate();
+    method public void registerActivityLifecycleCallbacks(@NonNull android.app.Application.ActivityLifecycleCallbacks);
+    method public void registerForContextMenu(android.view.View);
+    method public boolean releaseInstance();
+    method @Deprecated public final void removeDialog(int);
+    method public void reportFullyDrawn();
+    method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
+    method public final void requestPermissions(@NonNull String[], int);
+    method public final void requestShowKeyboardShortcuts();
+    method @Deprecated public boolean requestVisibleBehind(boolean);
+    method public final boolean requestWindowFeature(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public final void runOnUiThread(Runnable);
+    method public void setActionBar(@Nullable android.widget.Toolbar);
+    method public void setContentTransitionManager(android.transition.TransitionManager);
+    method public void setContentView(@LayoutRes int);
+    method public void setContentView(android.view.View);
+    method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public final void setDefaultKeyMode(int);
+    method public void setEnterSharedElementCallback(android.app.SharedElementCallback);
+    method public void setExitSharedElementCallback(android.app.SharedElementCallback);
+    method public final void setFeatureDrawable(int, android.graphics.drawable.Drawable);
+    method public final void setFeatureDrawableAlpha(int, int);
+    method public final void setFeatureDrawableResource(int, @DrawableRes int);
+    method public final void setFeatureDrawableUri(int, android.net.Uri);
+    method public void setFinishOnTouchOutside(boolean);
+    method public void setImmersive(boolean);
+    method public void setInheritShowWhenLocked(boolean);
+    method public void setIntent(android.content.Intent);
+    method public void setLocusContext(@Nullable android.content.LocusId, @Nullable android.os.Bundle);
+    method public final void setMediaController(android.media.session.MediaController);
+    method public void setPictureInPictureParams(@NonNull android.app.PictureInPictureParams);
+    method @Deprecated public final void setProgress(int);
+    method @Deprecated public final void setProgressBarIndeterminate(boolean);
+    method @Deprecated public final void setProgressBarIndeterminateVisibility(boolean);
+    method @Deprecated public final void setProgressBarVisibility(boolean);
+    method public void setRequestedOrientation(int);
+    method public final void setResult(int);
+    method public final void setResult(int, android.content.Intent);
+    method @Deprecated public final void setSecondaryProgress(int);
+    method public void setShowWhenLocked(boolean);
+    method public void setTaskDescription(android.app.ActivityManager.TaskDescription);
+    method public void setTitle(CharSequence);
+    method public void setTitle(int);
+    method @Deprecated public void setTitleColor(int);
+    method public boolean setTranslucent(boolean);
+    method public void setTurnScreenOn(boolean);
+    method public void setVisible(boolean);
+    method public final void setVolumeControlStream(int);
+    method public void setVrModeEnabled(boolean, @NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean shouldShowRequestPermissionRationale(@NonNull String);
+    method public boolean shouldUpRecreateTask(android.content.Intent);
+    method public boolean showAssist(android.os.Bundle);
+    method @Deprecated public final void showDialog(int);
+    method @Deprecated public final boolean showDialog(int, android.os.Bundle);
+    method public void showLockTaskEscapeMessage();
+    method @Nullable public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
+    method @Nullable public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int);
+    method public void startActivityForResult(@RequiresPermission android.content.Intent, int);
+    method public void startActivityForResult(@RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method @Deprecated public void startActivityFromChild(@NonNull android.app.Activity, @RequiresPermission android.content.Intent, int);
+    method @Deprecated public void startActivityFromChild(@NonNull android.app.Activity, @RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method @Deprecated public void startActivityFromFragment(@NonNull android.app.Fragment, @RequiresPermission android.content.Intent, int);
+    method @Deprecated public void startActivityFromFragment(@NonNull android.app.Fragment, @RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method public boolean startActivityIfNeeded(@NonNull @RequiresPermission android.content.Intent, int);
+    method public boolean startActivityIfNeeded(@NonNull @RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method public void startIntentSenderForResult(android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public void startIntentSenderForResult(android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public void startLocalVoiceInteraction(android.os.Bundle);
+    method public void startLockTask();
+    method @Deprecated public void startManagingCursor(android.database.Cursor);
+    method public boolean startNextMatchingActivity(@NonNull @RequiresPermission android.content.Intent);
+    method public boolean startNextMatchingActivity(@NonNull @RequiresPermission android.content.Intent, @Nullable android.os.Bundle);
+    method public void startPostponedEnterTransition();
+    method public void startSearch(@Nullable String, boolean, @Nullable android.os.Bundle, boolean);
+    method public void stopLocalVoiceInteraction();
+    method public void stopLockTask();
+    method @Deprecated public void stopManagingCursor(android.database.Cursor);
+    method public void takeKeyEvents(boolean);
+    method public void triggerSearch(String, @Nullable android.os.Bundle);
+    method public void unregisterActivityLifecycleCallbacks(@NonNull android.app.Application.ActivityLifecycleCallbacks);
+    method public void unregisterForContextMenu(android.view.View);
+    field public static final int DEFAULT_KEYS_DIALER = 1; // 0x1
+    field public static final int DEFAULT_KEYS_DISABLE = 0; // 0x0
+    field public static final int DEFAULT_KEYS_SEARCH_GLOBAL = 4; // 0x4
+    field public static final int DEFAULT_KEYS_SEARCH_LOCAL = 3; // 0x3
+    field public static final int DEFAULT_KEYS_SHORTCUT = 2; // 0x2
+    field protected static final int[] FOCUSED_STATE_SET;
+    field public static final int RESULT_CANCELED = 0; // 0x0
+    field public static final int RESULT_FIRST_USER = 1; // 0x1
+    field public static final int RESULT_OK = -1; // 0xffffffff
+  }
+
+  @Deprecated public class ActivityGroup extends android.app.Activity {
+    ctor @Deprecated public ActivityGroup();
+    ctor @Deprecated public ActivityGroup(boolean);
+    method @Deprecated public android.app.Activity getCurrentActivity();
+    method @Deprecated public final android.app.LocalActivityManager getLocalActivityManager();
+  }
+
+  public class ActivityManager {
+    method public int addAppTask(@NonNull android.app.Activity, @NonNull android.content.Intent, @Nullable android.app.ActivityManager.TaskDescription, @NonNull android.graphics.Bitmap);
+    method public void appNotResponding(@NonNull String);
+    method public boolean clearApplicationUserData();
+    method public void clearWatchHeapLimit();
+    method @RequiresPermission(android.Manifest.permission.DUMP) public void dumpPackageState(java.io.FileDescriptor, String);
+    method public android.util.Size getAppTaskThumbnailSize();
+    method public java.util.List<android.app.ActivityManager.AppTask> getAppTasks();
+    method public android.content.pm.ConfigurationInfo getDeviceConfigurationInfo();
+    method @NonNull public java.util.List<android.app.ApplicationExitInfo> getHistoricalProcessExitReasons(@Nullable String, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public int getLargeMemoryClass();
+    method public int getLauncherLargeIconDensity();
+    method public int getLauncherLargeIconSize();
+    method public int getLockTaskModeState();
+    method public int getMemoryClass();
+    method public void getMemoryInfo(android.app.ActivityManager.MemoryInfo);
+    method public static void getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo);
+    method public android.os.Debug.MemoryInfo[] getProcessMemoryInfo(int[]);
+    method public java.util.List<android.app.ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState();
+    method @Deprecated public java.util.List<android.app.ActivityManager.RecentTaskInfo> getRecentTasks(int, int) throws java.lang.SecurityException;
+    method public java.util.List<android.app.ActivityManager.RunningAppProcessInfo> getRunningAppProcesses();
+    method public android.app.PendingIntent getRunningServiceControlPanel(android.content.ComponentName) throws java.lang.SecurityException;
+    method @Deprecated public java.util.List<android.app.ActivityManager.RunningServiceInfo> getRunningServices(int) throws java.lang.SecurityException;
+    method @Deprecated public java.util.List<android.app.ActivityManager.RunningTaskInfo> getRunningTasks(int) throws java.lang.SecurityException;
+    method public boolean isActivityStartAllowedOnDisplay(@NonNull android.content.Context, int, @NonNull android.content.Intent);
+    method public boolean isBackgroundRestricted();
+    method @Deprecated public boolean isInLockTaskMode();
+    method public static boolean isLowMemoryKillReportSupported();
+    method public boolean isLowRamDevice();
+    method @Deprecated public static boolean isRunningInTestHarness();
+    method public static boolean isRunningInUserTestHarness();
+    method public static boolean isUserAMonkey();
+    method @RequiresPermission(android.Manifest.permission.KILL_BACKGROUND_PROCESSES) public void killBackgroundProcesses(String);
+    method @RequiresPermission(android.Manifest.permission.REORDER_TASKS) public void moveTaskToFront(int, int);
+    method @RequiresPermission(android.Manifest.permission.REORDER_TASKS) public void moveTaskToFront(int, int, android.os.Bundle);
+    method @Deprecated public void restartPackage(String);
+    method public void setProcessStateSummary(@Nullable byte[]);
+    method public static void setVrThread(int);
+    method public void setWatchHeapLimit(long);
+    field public static final String ACTION_REPORT_HEAP_LIMIT = "android.app.action.REPORT_HEAP_LIMIT";
+    field public static final int LOCK_TASK_MODE_LOCKED = 1; // 0x1
+    field public static final int LOCK_TASK_MODE_NONE = 0; // 0x0
+    field public static final int LOCK_TASK_MODE_PINNED = 2; // 0x2
+    field public static final String META_HOME_ALTERNATE = "android.app.home.alternate";
+    field public static final int MOVE_TASK_NO_USER_ACTION = 2; // 0x2
+    field public static final int MOVE_TASK_WITH_HOME = 1; // 0x1
+    field public static final int RECENT_IGNORE_UNAVAILABLE = 2; // 0x2
+    field public static final int RECENT_WITH_EXCLUDED = 1; // 0x1
+  }
+
+  public static class ActivityManager.AppTask {
+    method public void finishAndRemoveTask();
+    method public android.app.ActivityManager.RecentTaskInfo getTaskInfo();
+    method public void moveToFront();
+    method public void setExcludeFromRecents(boolean);
+    method public void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
+  }
+
+  public static class ActivityManager.MemoryInfo implements android.os.Parcelable {
+    ctor public ActivityManager.MemoryInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.MemoryInfo> CREATOR;
+    field public long availMem;
+    field public boolean lowMemory;
+    field public long threshold;
+    field public long totalMem;
+  }
+
+  public static class ActivityManager.ProcessErrorStateInfo implements android.os.Parcelable {
+    ctor public ActivityManager.ProcessErrorStateInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CRASHED = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.ProcessErrorStateInfo> CREATOR;
+    field public static final int NOT_RESPONDING = 2; // 0x2
+    field public static final int NO_ERROR = 0; // 0x0
+    field public int condition;
+    field public byte[] crashData;
+    field public String longMsg;
+    field public int pid;
+    field public String processName;
+    field public String shortMsg;
+    field public String stackTrace;
+    field public String tag;
+    field public int uid;
+  }
+
+  public static class ActivityManager.RecentTaskInfo extends android.app.TaskInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RecentTaskInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RecentTaskInfo> CREATOR;
+    field @Deprecated public int affiliatedTaskId;
+    field @Deprecated public CharSequence description;
+    field @Deprecated public int id;
+    field @Deprecated public int persistentId;
+  }
+
+  public static class ActivityManager.RunningAppProcessInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RunningAppProcessInfo();
+    ctor public ActivityManager.RunningAppProcessInfo(String, int, String[]);
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningAppProcessInfo> CREATOR;
+    field @Deprecated public static final int IMPORTANCE_BACKGROUND = 400; // 0x190
+    field public static final int IMPORTANCE_CACHED = 400; // 0x190
+    field public static final int IMPORTANCE_CANT_SAVE_STATE = 350; // 0x15e
+    field @Deprecated public static final int IMPORTANCE_EMPTY = 500; // 0x1f4
+    field public static final int IMPORTANCE_FOREGROUND = 100; // 0x64
+    field public static final int IMPORTANCE_FOREGROUND_SERVICE = 125; // 0x7d
+    field public static final int IMPORTANCE_GONE = 1000; // 0x3e8
+    field public static final int IMPORTANCE_PERCEPTIBLE = 230; // 0xe6
+    field public static final int IMPORTANCE_PERCEPTIBLE_PRE_26 = 130; // 0x82
+    field public static final int IMPORTANCE_SERVICE = 300; // 0x12c
+    field public static final int IMPORTANCE_TOP_SLEEPING = 325; // 0x145
+    field @Deprecated public static final int IMPORTANCE_TOP_SLEEPING_PRE_28 = 150; // 0x96
+    field public static final int IMPORTANCE_VISIBLE = 200; // 0xc8
+    field public static final int REASON_PROVIDER_IN_USE = 1; // 0x1
+    field public static final int REASON_SERVICE_IN_USE = 2; // 0x2
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+    field public int importance;
+    field public int importanceReasonCode;
+    field public android.content.ComponentName importanceReasonComponent;
+    field public int importanceReasonPid;
+    field public int lastTrimLevel;
+    field public int lru;
+    field public int pid;
+    field public String[] pkgList;
+    field public String processName;
+    field public int uid;
+  }
+
+  public static class ActivityManager.RunningServiceInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RunningServiceInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningServiceInfo> CREATOR;
+    field public static final int FLAG_FOREGROUND = 2; // 0x2
+    field public static final int FLAG_PERSISTENT_PROCESS = 8; // 0x8
+    field public static final int FLAG_STARTED = 1; // 0x1
+    field public static final int FLAG_SYSTEM_PROCESS = 4; // 0x4
+    field public long activeSince;
+    field public int clientCount;
+    field public int clientLabel;
+    field public String clientPackage;
+    field public int crashCount;
+    field public int flags;
+    field public boolean foreground;
+    field public long lastActivityTime;
+    field public int pid;
+    field public String process;
+    field public long restarting;
+    field public android.content.ComponentName service;
+    field public boolean started;
+    field public int uid;
+  }
+
+  public static class ActivityManager.RunningTaskInfo extends android.app.TaskInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RunningTaskInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningTaskInfo> CREATOR;
+    field @Deprecated public CharSequence description;
+    field @Deprecated public int id;
+    field @Deprecated public int numRunning;
+    field @Deprecated public android.graphics.Bitmap thumbnail;
+  }
+
+  public static class ActivityManager.TaskDescription implements android.os.Parcelable {
+    ctor public ActivityManager.TaskDescription(String, @DrawableRes int, int);
+    ctor public ActivityManager.TaskDescription(String, @DrawableRes int);
+    ctor public ActivityManager.TaskDescription(String);
+    ctor public ActivityManager.TaskDescription();
+    ctor @Deprecated public ActivityManager.TaskDescription(String, android.graphics.Bitmap, int);
+    ctor @Deprecated public ActivityManager.TaskDescription(String, android.graphics.Bitmap);
+    ctor public ActivityManager.TaskDescription(android.app.ActivityManager.TaskDescription);
+    method public int describeContents();
+    method @Deprecated public android.graphics.Bitmap getIcon();
+    method public String getLabel();
+    method public int getPrimaryColor();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.TaskDescription> CREATOR;
+  }
+
+  public class ActivityOptions {
+    method @Nullable public android.graphics.Rect getLaunchBounds();
+    method public int getLaunchDisplayId();
+    method public boolean getLockTaskMode();
+    method public static android.app.ActivityOptions makeBasic();
+    method public static android.app.ActivityOptions makeClipRevealAnimation(android.view.View, int, int, int, int);
+    method public static android.app.ActivityOptions makeCustomAnimation(android.content.Context, int, int);
+    method public static android.app.ActivityOptions makeScaleUpAnimation(android.view.View, int, int, int, int);
+    method public static android.app.ActivityOptions makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+    method @java.lang.SafeVarargs public static android.app.ActivityOptions makeSceneTransitionAnimation(android.app.Activity, android.util.Pair<android.view.View,java.lang.String>...);
+    method public static android.app.ActivityOptions makeTaskLaunchBehind();
+    method public static android.app.ActivityOptions makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+    method public void requestUsageTimeReport(android.app.PendingIntent);
+    method public android.app.ActivityOptions setAppVerificationBundle(android.os.Bundle);
+    method public android.app.ActivityOptions setLaunchBounds(@Nullable android.graphics.Rect);
+    method public android.app.ActivityOptions setLaunchDisplayId(int);
+    method public android.app.ActivityOptions setLockTaskEnabled(boolean);
+    method public android.os.Bundle toBundle();
+    method public void update(android.app.ActivityOptions);
+    field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+    field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+  }
+
+  public class AlarmManager {
+    method public boolean canScheduleExactAlarms();
+    method public void cancel(android.app.PendingIntent);
+    method public void cancel(android.app.AlarmManager.OnAlarmListener);
+    method public android.app.AlarmManager.AlarmClockInfo getNextAlarmClock();
+    method public void set(int, long, android.app.PendingIntent);
+    method public void set(int, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.SCHEDULE_EXACT_ALARM) public void setAlarmClock(android.app.AlarmManager.AlarmClockInfo, android.app.PendingIntent);
+    method public void setAndAllowWhileIdle(int, long, android.app.PendingIntent);
+    method @RequiresPermission(value=android.Manifest.permission.SCHEDULE_EXACT_ALARM, conditional=true) public void setExact(int, long, android.app.PendingIntent);
+    method @RequiresPermission(value=android.Manifest.permission.SCHEDULE_EXACT_ALARM, conditional=true) public void setExact(int, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler);
+    method @RequiresPermission(value=android.Manifest.permission.SCHEDULE_EXACT_ALARM, conditional=true) public void setExactAndAllowWhileIdle(int, long, android.app.PendingIntent);
+    method public void setInexactRepeating(int, long, long, android.app.PendingIntent);
+    method public void setRepeating(int, long, long, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.SET_TIME) public void setTime(long);
+    method @RequiresPermission(android.Manifest.permission.SET_TIME_ZONE) public void setTimeZone(String);
+    method public void setWindow(int, long, long, android.app.PendingIntent);
+    method public void setWindow(int, long, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler);
+    field public static final String ACTION_NEXT_ALARM_CLOCK_CHANGED = "android.app.action.NEXT_ALARM_CLOCK_CHANGED";
+    field public static final String ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED = "android.app.action.SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED";
+    field public static final int ELAPSED_REALTIME = 3; // 0x3
+    field public static final int ELAPSED_REALTIME_WAKEUP = 2; // 0x2
+    field public static final long INTERVAL_DAY = 86400000L; // 0x5265c00L
+    field public static final long INTERVAL_FIFTEEN_MINUTES = 900000L; // 0xdbba0L
+    field public static final long INTERVAL_HALF_DAY = 43200000L; // 0x2932e00L
+    field public static final long INTERVAL_HALF_HOUR = 1800000L; // 0x1b7740L
+    field public static final long INTERVAL_HOUR = 3600000L; // 0x36ee80L
+    field public static final int RTC = 1; // 0x1
+    field public static final int RTC_WAKEUP = 0; // 0x0
+  }
+
+  public static final class AlarmManager.AlarmClockInfo implements android.os.Parcelable {
+    ctor public AlarmManager.AlarmClockInfo(long, android.app.PendingIntent);
+    method public int describeContents();
+    method public android.app.PendingIntent getShowIntent();
+    method public long getTriggerTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AlarmManager.AlarmClockInfo> CREATOR;
+  }
+
+  public static interface AlarmManager.OnAlarmListener {
+    method public void onAlarm();
+  }
+
+  public class AlertDialog extends android.app.Dialog implements android.content.DialogInterface {
+    ctor protected AlertDialog(android.content.Context);
+    ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+    ctor protected AlertDialog(android.content.Context, @StyleRes int);
+    method public android.widget.Button getButton(int);
+    method public android.widget.ListView getListView();
+    method public void setButton(int, CharSequence, android.os.Message);
+    method public void setButton(int, CharSequence, android.content.DialogInterface.OnClickListener);
+    method @Deprecated public void setButton(CharSequence, android.os.Message);
+    method @Deprecated public void setButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method @Deprecated public void setButton2(CharSequence, android.os.Message);
+    method @Deprecated public void setButton2(CharSequence, android.content.DialogInterface.OnClickListener);
+    method @Deprecated public void setButton3(CharSequence, android.os.Message);
+    method @Deprecated public void setButton3(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public void setCustomTitle(android.view.View);
+    method public void setIcon(@DrawableRes int);
+    method public void setIcon(android.graphics.drawable.Drawable);
+    method public void setIconAttribute(@AttrRes int);
+    method public void setInverseBackgroundForced(boolean);
+    method public void setMessage(CharSequence);
+    method public void setView(android.view.View);
+    method public void setView(android.view.View, int, int, int, int);
+    field @Deprecated public static final int THEME_DEVICE_DEFAULT_DARK = 4; // 0x4
+    field @Deprecated public static final int THEME_DEVICE_DEFAULT_LIGHT = 5; // 0x5
+    field @Deprecated public static final int THEME_HOLO_DARK = 2; // 0x2
+    field @Deprecated public static final int THEME_HOLO_LIGHT = 3; // 0x3
+    field @Deprecated public static final int THEME_TRADITIONAL = 1; // 0x1
+  }
+
+  public static class AlertDialog.Builder {
+    ctor public AlertDialog.Builder(android.content.Context);
+    ctor public AlertDialog.Builder(android.content.Context, int);
+    method public android.app.AlertDialog create();
+    method public android.content.Context getContext();
+    method public android.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setCancelable(boolean);
+    method public android.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, String);
+    method public android.app.AlertDialog.Builder setCustomTitle(android.view.View);
+    method public android.app.AlertDialog.Builder setIcon(@DrawableRes int);
+    method public android.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable);
+    method public android.app.AlertDialog.Builder setIconAttribute(@AttrRes int);
+    method @Deprecated public android.app.AlertDialog.Builder setInverseBackgroundForced(boolean);
+    method public android.app.AlertDialog.Builder setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setItems(CharSequence[], android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setMessage(@StringRes int);
+    method public android.app.AlertDialog.Builder setMessage(CharSequence);
+    method public android.app.AlertDialog.Builder setMultiChoiceItems(@ArrayRes int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.app.AlertDialog.Builder setMultiChoiceItems(CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, String, String, android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.app.AlertDialog.Builder setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setNegativeButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setNeutralButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener);
+    method public android.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener);
+    method public android.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+    method public android.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener);
+    method public android.app.AlertDialog.Builder setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setPositiveButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, String, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(CharSequence[], int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setTitle(@StringRes int);
+    method public android.app.AlertDialog.Builder setTitle(CharSequence);
+    method public android.app.AlertDialog.Builder setView(int);
+    method public android.app.AlertDialog.Builder setView(android.view.View);
+    method public android.app.AlertDialog show();
+  }
+
+  @Deprecated public class AliasActivity extends android.app.Activity {
+    ctor @Deprecated public AliasActivity();
+  }
+
+  public class AppComponentFactory {
+    ctor public AppComponentFactory();
+    method @NonNull public android.app.Activity instantiateActivity(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public android.app.Application instantiateApplication(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public ClassLoader instantiateClassLoader(@NonNull ClassLoader, @NonNull android.content.pm.ApplicationInfo);
+    method @NonNull public android.content.ContentProvider instantiateProvider(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public android.content.BroadcastReceiver instantiateReceiver(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public android.app.Service instantiateService(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public class AppOpsManager {
+    method @Deprecated public int checkOp(@NonNull String, int, @NonNull String);
+    method @Deprecated public int checkOpNoThrow(@NonNull String, int, @NonNull String);
+    method @Deprecated public void checkPackage(int, @NonNull String);
+    method @Deprecated public void finishOp(@NonNull String, int, @NonNull String);
+    method public void finishOp(@NonNull String, int, @NonNull String, @Nullable String);
+    method public void finishProxyOp(@NonNull String, int, @NonNull String, @Nullable String);
+    method public boolean isOpActive(@NonNull String, int, @NonNull String);
+    method @Deprecated public int noteOp(@NonNull String, int, @NonNull String);
+    method public int noteOp(@NonNull String, int, @Nullable String, @Nullable String, @Nullable String);
+    method @Deprecated public int noteOpNoThrow(@NonNull String, int, @NonNull String);
+    method public int noteOpNoThrow(@NonNull String, int, @NonNull String, @Nullable String, @Nullable String);
+    method @Deprecated public int noteProxyOp(@NonNull String, @NonNull String);
+    method public int noteProxyOp(@NonNull String, @Nullable String, int, @Nullable String, @Nullable String);
+    method @Deprecated public int noteProxyOpNoThrow(@NonNull String, @NonNull String);
+    method @Deprecated public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int);
+    method public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int, @Nullable String, @Nullable String);
+    method @Nullable public static String permissionToOp(@NonNull String);
+    method public void setOnOpNotedCallback(@Nullable java.util.concurrent.Executor, @Nullable android.app.AppOpsManager.OnOpNotedCallback);
+    method @Deprecated public int startOp(@NonNull String, int, @NonNull String);
+    method public int startOp(@NonNull String, int, @Nullable String, @Nullable String, @Nullable String);
+    method @Deprecated public int startOpNoThrow(@NonNull String, int, @NonNull String);
+    method public int startOpNoThrow(@NonNull String, int, @NonNull String, @NonNull String, @Nullable String);
+    method public int startProxyOp(@NonNull String, int, @NonNull String, @Nullable String, @Nullable String);
+    method public int startProxyOpNoThrow(@NonNull String, int, @NonNull String, @Nullable String, @Nullable String);
+    method public void startWatchingActive(@NonNull String[], @NonNull java.util.concurrent.Executor, @NonNull android.app.AppOpsManager.OnOpActiveChangedListener);
+    method public void startWatchingMode(@NonNull String, @Nullable String, @NonNull android.app.AppOpsManager.OnOpChangedListener);
+    method public void startWatchingMode(@NonNull String, @Nullable String, int, @NonNull android.app.AppOpsManager.OnOpChangedListener);
+    method public void stopWatchingActive(@NonNull android.app.AppOpsManager.OnOpActiveChangedListener);
+    method public void stopWatchingMode(@NonNull android.app.AppOpsManager.OnOpChangedListener);
+    method public int unsafeCheckOp(@NonNull String, int, @NonNull String);
+    method public int unsafeCheckOpNoThrow(@NonNull String, int, @NonNull String);
+    method public int unsafeCheckOpRaw(@NonNull String, int, @NonNull String);
+    method public int unsafeCheckOpRawNoThrow(@NonNull String, int, @NonNull String);
+    field public static final int MODE_ALLOWED = 0; // 0x0
+    field public static final int MODE_DEFAULT = 3; // 0x3
+    field public static final int MODE_ERRORED = 2; // 0x2
+    field public static final int MODE_FOREGROUND = 4; // 0x4
+    field public static final int MODE_IGNORED = 1; // 0x1
+    field public static final String OPSTR_ADD_VOICEMAIL = "android:add_voicemail";
+    field public static final String OPSTR_ANSWER_PHONE_CALLS = "android:answer_phone_calls";
+    field public static final String OPSTR_BODY_SENSORS = "android:body_sensors";
+    field public static final String OPSTR_CALL_PHONE = "android:call_phone";
+    field public static final String OPSTR_CAMERA = "android:camera";
+    field public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
+    field public static final String OPSTR_FINE_LOCATION = "android:fine_location";
+    field public static final String OPSTR_GET_USAGE_STATS = "android:get_usage_stats";
+    field public static final String OPSTR_MOCK_LOCATION = "android:mock_location";
+    field public static final String OPSTR_MONITOR_HIGH_POWER_LOCATION = "android:monitor_location_high_power";
+    field public static final String OPSTR_MONITOR_LOCATION = "android:monitor_location";
+    field public static final String OPSTR_PICTURE_IN_PICTURE = "android:picture_in_picture";
+    field public static final String OPSTR_PROCESS_OUTGOING_CALLS = "android:process_outgoing_calls";
+    field public static final String OPSTR_READ_CALENDAR = "android:read_calendar";
+    field public static final String OPSTR_READ_CALL_LOG = "android:read_call_log";
+    field public static final String OPSTR_READ_CELL_BROADCASTS = "android:read_cell_broadcasts";
+    field public static final String OPSTR_READ_CONTACTS = "android:read_contacts";
+    field public static final String OPSTR_READ_EXTERNAL_STORAGE = "android:read_external_storage";
+    field public static final String OPSTR_READ_PHONE_NUMBERS = "android:read_phone_numbers";
+    field public static final String OPSTR_READ_PHONE_STATE = "android:read_phone_state";
+    field public static final String OPSTR_READ_SMS = "android:read_sms";
+    field public static final String OPSTR_RECEIVE_MMS = "android:receive_mms";
+    field public static final String OPSTR_RECEIVE_SMS = "android:receive_sms";
+    field public static final String OPSTR_RECEIVE_WAP_PUSH = "android:receive_wap_push";
+    field public static final String OPSTR_RECORD_AUDIO = "android:record_audio";
+    field public static final String OPSTR_SEND_SMS = "android:send_sms";
+    field public static final String OPSTR_SYSTEM_ALERT_WINDOW = "android:system_alert_window";
+    field public static final String OPSTR_USE_FINGERPRINT = "android:use_fingerprint";
+    field public static final String OPSTR_USE_SIP = "android:use_sip";
+    field public static final String OPSTR_WRITE_CALENDAR = "android:write_calendar";
+    field public static final String OPSTR_WRITE_CALL_LOG = "android:write_call_log";
+    field public static final String OPSTR_WRITE_CONTACTS = "android:write_contacts";
+    field public static final String OPSTR_WRITE_EXTERNAL_STORAGE = "android:write_external_storage";
+    field public static final String OPSTR_WRITE_SETTINGS = "android:write_settings";
+    field public static final int WATCH_FOREGROUND_CHANGES = 1; // 0x1
+  }
+
+  public static interface AppOpsManager.OnOpActiveChangedListener {
+    method public void onOpActiveChanged(@NonNull String, int, @NonNull String, boolean);
+  }
+
+  public static interface AppOpsManager.OnOpChangedListener {
+    method public void onOpChanged(String, String);
+  }
+
+  public abstract static class AppOpsManager.OnOpNotedCallback {
+    ctor public AppOpsManager.OnOpNotedCallback();
+    method public abstract void onAsyncNoted(@NonNull android.app.AsyncNotedAppOp);
+    method public abstract void onNoted(@NonNull android.app.SyncNotedAppOp);
+    method public abstract void onSelfNoted(@NonNull android.app.SyncNotedAppOp);
+  }
+
+  public class Application extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
+    ctor public Application();
+    method public static String getProcessName();
+    method @CallSuper public void onConfigurationChanged(@NonNull android.content.res.Configuration);
+    method @CallSuper public void onCreate();
+    method @CallSuper public void onLowMemory();
+    method @CallSuper public void onTerminate();
+    method @CallSuper public void onTrimMemory(int);
+    method public void registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+    method public void registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener);
+    method public void unregisterActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+    method public void unregisterOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener);
+  }
+
+  public static interface Application.ActivityLifecycleCallbacks {
+    method public void onActivityCreated(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public void onActivityDestroyed(@NonNull android.app.Activity);
+    method public void onActivityPaused(@NonNull android.app.Activity);
+    method public default void onActivityPostCreated(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public default void onActivityPostDestroyed(@NonNull android.app.Activity);
+    method public default void onActivityPostPaused(@NonNull android.app.Activity);
+    method public default void onActivityPostResumed(@NonNull android.app.Activity);
+    method public default void onActivityPostSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public default void onActivityPostStarted(@NonNull android.app.Activity);
+    method public default void onActivityPostStopped(@NonNull android.app.Activity);
+    method public default void onActivityPreCreated(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public default void onActivityPreDestroyed(@NonNull android.app.Activity);
+    method public default void onActivityPrePaused(@NonNull android.app.Activity);
+    method public default void onActivityPreResumed(@NonNull android.app.Activity);
+    method public default void onActivityPreSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public default void onActivityPreStarted(@NonNull android.app.Activity);
+    method public default void onActivityPreStopped(@NonNull android.app.Activity);
+    method public void onActivityResumed(@NonNull android.app.Activity);
+    method public void onActivitySaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public void onActivityStarted(@NonNull android.app.Activity);
+    method public void onActivityStopped(@NonNull android.app.Activity);
+  }
+
+  public static interface Application.OnProvideAssistDataListener {
+    method public void onProvideAssistData(android.app.Activity, android.os.Bundle);
+  }
+
+  public class ApplicationErrorReport implements android.os.Parcelable {
+    ctor public ApplicationErrorReport();
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public static android.content.ComponentName getErrorReportReceiver(android.content.Context, String, int);
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ApplicationErrorReport> CREATOR;
+    field public static final int TYPE_ANR = 2; // 0x2
+    field public static final int TYPE_BATTERY = 3; // 0x3
+    field public static final int TYPE_CRASH = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+    field public static final int TYPE_RUNNING_SERVICE = 5; // 0x5
+    field public android.app.ApplicationErrorReport.AnrInfo anrInfo;
+    field public android.app.ApplicationErrorReport.BatteryInfo batteryInfo;
+    field public android.app.ApplicationErrorReport.CrashInfo crashInfo;
+    field public String installerPackageName;
+    field public String packageName;
+    field public String processName;
+    field public android.app.ApplicationErrorReport.RunningServiceInfo runningServiceInfo;
+    field public boolean systemApp;
+    field public long time;
+    field public int type;
+  }
+
+  public static class ApplicationErrorReport.AnrInfo {
+    ctor public ApplicationErrorReport.AnrInfo();
+    ctor public ApplicationErrorReport.AnrInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String activity;
+    field public String cause;
+    field public String info;
+  }
+
+  public static class ApplicationErrorReport.BatteryInfo {
+    ctor public ApplicationErrorReport.BatteryInfo();
+    ctor public ApplicationErrorReport.BatteryInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String checkinDetails;
+    field public long durationMicros;
+    field public String usageDetails;
+    field public int usagePercent;
+  }
+
+  public static class ApplicationErrorReport.CrashInfo {
+    ctor public ApplicationErrorReport.CrashInfo();
+    ctor public ApplicationErrorReport.CrashInfo(Throwable);
+    ctor public ApplicationErrorReport.CrashInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String exceptionClassName;
+    field public String exceptionMessage;
+    field public String stackTrace;
+    field public String throwClassName;
+    field public String throwFileName;
+    field public int throwLineNumber;
+    field public String throwMethodName;
+  }
+
+  public static class ApplicationErrorReport.RunningServiceInfo {
+    ctor public ApplicationErrorReport.RunningServiceInfo();
+    ctor public ApplicationErrorReport.RunningServiceInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public long durationMillis;
+    field public String serviceDetails;
+  }
+
+  public final class ApplicationExitInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDefiningUid();
+    method @Nullable public String getDescription();
+    method public int getImportance();
+    method public int getPackageUid();
+    method public int getPid();
+    method @NonNull public String getProcessName();
+    method @Nullable public byte[] getProcessStateSummary();
+    method public long getPss();
+    method public int getRealUid();
+    method public int getReason();
+    method public long getRss();
+    method public int getStatus();
+    method public long getTimestamp();
+    method @Nullable public java.io.InputStream getTraceInputStream() throws java.io.IOException;
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ApplicationExitInfo> CREATOR;
+    field public static final int REASON_ANR = 6; // 0x6
+    field public static final int REASON_CRASH = 4; // 0x4
+    field public static final int REASON_CRASH_NATIVE = 5; // 0x5
+    field public static final int REASON_DEPENDENCY_DIED = 12; // 0xc
+    field public static final int REASON_EXCESSIVE_RESOURCE_USAGE = 9; // 0x9
+    field public static final int REASON_EXIT_SELF = 1; // 0x1
+    field public static final int REASON_INITIALIZATION_FAILURE = 7; // 0x7
+    field public static final int REASON_LOW_MEMORY = 3; // 0x3
+    field public static final int REASON_OTHER = 13; // 0xd
+    field public static final int REASON_PERMISSION_CHANGE = 8; // 0x8
+    field public static final int REASON_SIGNALED = 2; // 0x2
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+    field public static final int REASON_USER_REQUESTED = 10; // 0xa
+    field public static final int REASON_USER_STOPPED = 11; // 0xb
+  }
+
+  public final class AsyncNotedAppOp implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @NonNull public String getMessage();
+    method @IntRange(from=0) public int getNotingUid();
+    method @NonNull public String getOp();
+    method public long getTime();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AsyncNotedAppOp> CREATOR;
+  }
+
+  public final class AuthenticationRequiredException extends java.lang.SecurityException implements android.os.Parcelable {
+    ctor public AuthenticationRequiredException(Throwable, android.app.PendingIntent);
+    method public int describeContents();
+    method public android.app.PendingIntent getUserAction();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AuthenticationRequiredException> CREATOR;
+  }
+
+  public final class AutomaticZenRule implements android.os.Parcelable {
+    ctor @Deprecated public AutomaticZenRule(String, android.content.ComponentName, android.net.Uri, int, boolean);
+    ctor public AutomaticZenRule(@NonNull String, @Nullable android.content.ComponentName, @Nullable android.content.ComponentName, @NonNull android.net.Uri, @Nullable android.service.notification.ZenPolicy, int, boolean);
+    ctor public AutomaticZenRule(android.os.Parcel);
+    method public int describeContents();
+    method public android.net.Uri getConditionId();
+    method @Nullable public android.content.ComponentName getConfigurationActivity();
+    method public long getCreationTime();
+    method public int getInterruptionFilter();
+    method public String getName();
+    method public android.content.ComponentName getOwner();
+    method public android.service.notification.ZenPolicy getZenPolicy();
+    method public boolean isEnabled();
+    method public void setConditionId(android.net.Uri);
+    method public void setConfigurationActivity(@Nullable android.content.ComponentName);
+    method public void setEnabled(boolean);
+    method public void setInterruptionFilter(int);
+    method public void setName(String);
+    method public void setZenPolicy(android.service.notification.ZenPolicy);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AutomaticZenRule> CREATOR;
+  }
+
+  public final class BackgroundServiceStartNotAllowedException extends android.app.ServiceStartNotAllowedException implements android.os.Parcelable {
+    ctor public BackgroundServiceStartNotAllowedException(@NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.BackgroundServiceStartNotAllowedException> CREATOR;
+  }
+
+  public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
+    ctor public DatePickerDialog(@NonNull android.content.Context);
+    ctor public DatePickerDialog(@NonNull android.content.Context, @StyleRes int);
+    ctor public DatePickerDialog(@NonNull android.content.Context, @Nullable android.app.DatePickerDialog.OnDateSetListener, int, int, int);
+    ctor public DatePickerDialog(@NonNull android.content.Context, @StyleRes int, @Nullable android.app.DatePickerDialog.OnDateSetListener, int, int, int);
+    method @NonNull public android.widget.DatePicker getDatePicker();
+    method public void onClick(@NonNull android.content.DialogInterface, int);
+    method public void onDateChanged(@NonNull android.widget.DatePicker, int, int, int);
+    method public void setOnDateSetListener(@Nullable android.app.DatePickerDialog.OnDateSetListener);
+    method public void updateDate(int, int, int);
+  }
+
+  public static interface DatePickerDialog.OnDateSetListener {
+    method public void onDateSet(android.widget.DatePicker, int, int, int);
+  }
+
+  public class Dialog implements android.content.DialogInterface android.view.KeyEvent.Callback android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    ctor public Dialog(@NonNull @UiContext android.content.Context);
+    ctor public Dialog(@NonNull @UiContext android.content.Context, @StyleRes int);
+    ctor protected Dialog(@NonNull @UiContext android.content.Context, boolean, @Nullable android.content.DialogInterface.OnCancelListener);
+    method public void addContentView(@NonNull android.view.View, @Nullable android.view.ViewGroup.LayoutParams);
+    method public void cancel();
+    method public void closeOptionsMenu();
+    method public void create();
+    method public void dismiss();
+    method public boolean dispatchGenericMotionEvent(@NonNull android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(@NonNull android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(@NonNull android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(@NonNull android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(@NonNull android.view.MotionEvent);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method @Nullable public android.app.ActionBar getActionBar();
+    method @NonNull @UiContext public final android.content.Context getContext();
+    method @Nullable public android.view.View getCurrentFocus();
+    method @NonNull public android.view.LayoutInflater getLayoutInflater();
+    method @Nullable public final android.app.Activity getOwnerActivity();
+    method @Nullable public final android.view.SearchEvent getSearchEvent();
+    method public final int getVolumeControlStream();
+    method @Nullable public android.view.Window getWindow();
+    method public void hide();
+    method public void invalidateOptionsMenu();
+    method public boolean isShowing();
+    method @CallSuper public void onActionModeFinished(android.view.ActionMode);
+    method @CallSuper public void onActionModeStarted(android.view.ActionMode);
+    method public void onAttachedToWindow();
+    method public void onBackPressed();
+    method public void onContentChanged();
+    method public boolean onContextItemSelected(@NonNull android.view.MenuItem);
+    method public void onContextMenuClosed(@NonNull android.view.Menu);
+    method protected void onCreate(android.os.Bundle);
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+    method public boolean onCreateOptionsMenu(@NonNull android.view.Menu);
+    method public boolean onCreatePanelMenu(int, @NonNull android.view.Menu);
+    method public android.view.View onCreatePanelView(int);
+    method public void onDetachedFromWindow();
+    method public boolean onGenericMotionEvent(@NonNull android.view.MotionEvent);
+    method public boolean onKeyDown(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyShortcut(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyUp(int, @NonNull android.view.KeyEvent);
+    method public boolean onMenuItemSelected(int, @NonNull android.view.MenuItem);
+    method public boolean onMenuOpened(int, @NonNull android.view.Menu);
+    method public boolean onOptionsItemSelected(@NonNull android.view.MenuItem);
+    method public void onOptionsMenuClosed(@NonNull android.view.Menu);
+    method public void onPanelClosed(int, @NonNull android.view.Menu);
+    method public boolean onPrepareOptionsMenu(@NonNull android.view.Menu);
+    method public boolean onPreparePanel(int, @Nullable android.view.View, @NonNull android.view.Menu);
+    method public void onRestoreInstanceState(@NonNull android.os.Bundle);
+    method @NonNull public android.os.Bundle onSaveInstanceState();
+    method public boolean onSearchRequested(@NonNull android.view.SearchEvent);
+    method public boolean onSearchRequested();
+    method protected void onStart();
+    method protected void onStop();
+    method public boolean onTouchEvent(@NonNull android.view.MotionEvent);
+    method public boolean onTrackballEvent(@NonNull android.view.MotionEvent);
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+    method public void openContextMenu(@NonNull android.view.View);
+    method public void openOptionsMenu();
+    method public void registerForContextMenu(@NonNull android.view.View);
+    method public final boolean requestWindowFeature(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public void setCancelMessage(@Nullable android.os.Message);
+    method public void setCancelable(boolean);
+    method public void setCanceledOnTouchOutside(boolean);
+    method public void setContentView(@LayoutRes int);
+    method public void setContentView(@NonNull android.view.View);
+    method public void setContentView(@NonNull android.view.View, @Nullable android.view.ViewGroup.LayoutParams);
+    method public void setDismissMessage(@Nullable android.os.Message);
+    method public final void setFeatureDrawable(int, @Nullable android.graphics.drawable.Drawable);
+    method public final void setFeatureDrawableAlpha(int, int);
+    method public final void setFeatureDrawableResource(int, @DrawableRes int);
+    method public final void setFeatureDrawableUri(int, @Nullable android.net.Uri);
+    method public void setOnCancelListener(@Nullable android.content.DialogInterface.OnCancelListener);
+    method public void setOnDismissListener(@Nullable android.content.DialogInterface.OnDismissListener);
+    method public void setOnKeyListener(@Nullable android.content.DialogInterface.OnKeyListener);
+    method public void setOnShowListener(@Nullable android.content.DialogInterface.OnShowListener);
+    method public final void setOwnerActivity(@NonNull android.app.Activity);
+    method public void setTitle(@Nullable CharSequence);
+    method public void setTitle(@StringRes int);
+    method public final void setVolumeControlStream(int);
+    method public void show();
+    method public void takeKeyEvents(boolean);
+    method public void unregisterForContextMenu(@NonNull android.view.View);
+  }
+
+  @Deprecated public class DialogFragment extends android.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    ctor @Deprecated public DialogFragment();
+    method @Deprecated public void dismiss();
+    method @Deprecated public void dismissAllowingStateLoss();
+    method @Deprecated public android.app.Dialog getDialog();
+    method @Deprecated public boolean getShowsDialog();
+    method @Deprecated public int getTheme();
+    method @Deprecated public boolean isCancelable();
+    method @Deprecated public void onCancel(android.content.DialogInterface);
+    method @Deprecated public android.app.Dialog onCreateDialog(android.os.Bundle);
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+    method @Deprecated public void setCancelable(boolean);
+    method @Deprecated public void setShowsDialog(boolean);
+    method @Deprecated public void setStyle(int, int);
+    method @Deprecated public void show(android.app.FragmentManager, String);
+    method @Deprecated public int show(android.app.FragmentTransaction, String);
+    field @Deprecated public static final int STYLE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int STYLE_NO_FRAME = 2; // 0x2
+    field @Deprecated public static final int STYLE_NO_INPUT = 3; // 0x3
+    field @Deprecated public static final int STYLE_NO_TITLE = 1; // 0x1
+  }
+
+  public final class DirectAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method @Nullable public android.content.LocusId getLocusId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.DirectAction> CREATOR;
+  }
+
+  public static final class DirectAction.Builder {
+    ctor public DirectAction.Builder(@NonNull String);
+    method @NonNull public android.app.DirectAction build();
+    method @NonNull public android.app.DirectAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.DirectAction.Builder setLocusId(@Nullable android.content.LocusId);
+  }
+
+  public class DownloadManager {
+    method @Deprecated public long addCompletedDownload(String, String, boolean, String, String, long, boolean);
+    method @Deprecated public long addCompletedDownload(String, String, boolean, String, String, long, boolean, android.net.Uri, android.net.Uri);
+    method public long enqueue(android.app.DownloadManager.Request);
+    method public static Long getMaxBytesOverMobile(android.content.Context);
+    method public String getMimeTypeForDownloadedFile(long);
+    method public static Long getRecommendedMaxBytesOverMobile(android.content.Context);
+    method public android.net.Uri getUriForDownloadedFile(long);
+    method public android.os.ParcelFileDescriptor openDownloadedFile(long) throws java.io.FileNotFoundException;
+    method public android.database.Cursor query(android.app.DownloadManager.Query);
+    method public int remove(long...);
+    field public static final String ACTION_DOWNLOAD_COMPLETE = "android.intent.action.DOWNLOAD_COMPLETE";
+    field public static final String ACTION_NOTIFICATION_CLICKED = "android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED";
+    field public static final String ACTION_VIEW_DOWNLOADS = "android.intent.action.VIEW_DOWNLOADS";
+    field public static final String COLUMN_BYTES_DOWNLOADED_SO_FAR = "bytes_so_far";
+    field public static final String COLUMN_DESCRIPTION = "description";
+    field public static final String COLUMN_ID = "_id";
+    field public static final String COLUMN_LAST_MODIFIED_TIMESTAMP = "last_modified_timestamp";
+    field @Deprecated public static final String COLUMN_LOCAL_FILENAME = "local_filename";
+    field public static final String COLUMN_LOCAL_URI = "local_uri";
+    field public static final String COLUMN_MEDIAPROVIDER_URI = "mediaprovider_uri";
+    field public static final String COLUMN_MEDIA_TYPE = "media_type";
+    field public static final String COLUMN_REASON = "reason";
+    field public static final String COLUMN_STATUS = "status";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_TOTAL_SIZE_BYTES = "total_size";
+    field public static final String COLUMN_URI = "uri";
+    field public static final int ERROR_CANNOT_RESUME = 1008; // 0x3f0
+    field public static final int ERROR_DEVICE_NOT_FOUND = 1007; // 0x3ef
+    field public static final int ERROR_FILE_ALREADY_EXISTS = 1009; // 0x3f1
+    field public static final int ERROR_FILE_ERROR = 1001; // 0x3e9
+    field public static final int ERROR_HTTP_DATA_ERROR = 1004; // 0x3ec
+    field public static final int ERROR_INSUFFICIENT_SPACE = 1006; // 0x3ee
+    field public static final int ERROR_TOO_MANY_REDIRECTS = 1005; // 0x3ed
+    field public static final int ERROR_UNHANDLED_HTTP_CODE = 1002; // 0x3ea
+    field public static final int ERROR_UNKNOWN = 1000; // 0x3e8
+    field public static final String EXTRA_DOWNLOAD_ID = "extra_download_id";
+    field public static final String EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS = "extra_click_download_ids";
+    field public static final String INTENT_EXTRAS_SORT_BY_SIZE = "android.app.DownloadManager.extra_sortBySize";
+    field public static final int PAUSED_QUEUED_FOR_WIFI = 3; // 0x3
+    field public static final int PAUSED_UNKNOWN = 4; // 0x4
+    field public static final int PAUSED_WAITING_FOR_NETWORK = 2; // 0x2
+    field public static final int PAUSED_WAITING_TO_RETRY = 1; // 0x1
+    field public static final int STATUS_FAILED = 16; // 0x10
+    field public static final int STATUS_PAUSED = 4; // 0x4
+    field public static final int STATUS_PENDING = 1; // 0x1
+    field public static final int STATUS_RUNNING = 2; // 0x2
+    field public static final int STATUS_SUCCESSFUL = 8; // 0x8
+  }
+
+  public static class DownloadManager.Query {
+    ctor public DownloadManager.Query();
+    method public android.app.DownloadManager.Query setFilterById(long...);
+    method public android.app.DownloadManager.Query setFilterByStatus(int);
+  }
+
+  public static class DownloadManager.Request {
+    ctor public DownloadManager.Request(android.net.Uri);
+    method public android.app.DownloadManager.Request addRequestHeader(String, String);
+    method @Deprecated public void allowScanningByMediaScanner();
+    method public android.app.DownloadManager.Request setAllowedNetworkTypes(int);
+    method public android.app.DownloadManager.Request setAllowedOverMetered(boolean);
+    method public android.app.DownloadManager.Request setAllowedOverRoaming(boolean);
+    method public android.app.DownloadManager.Request setDescription(CharSequence);
+    method public android.app.DownloadManager.Request setDestinationInExternalFilesDir(android.content.Context, String, String);
+    method public android.app.DownloadManager.Request setDestinationInExternalPublicDir(String, String);
+    method public android.app.DownloadManager.Request setDestinationUri(android.net.Uri);
+    method public android.app.DownloadManager.Request setMimeType(String);
+    method public android.app.DownloadManager.Request setNotificationVisibility(int);
+    method public android.app.DownloadManager.Request setRequiresCharging(boolean);
+    method public android.app.DownloadManager.Request setRequiresDeviceIdle(boolean);
+    method @Deprecated public android.app.DownloadManager.Request setShowRunningNotification(boolean);
+    method public android.app.DownloadManager.Request setTitle(CharSequence);
+    method @Deprecated public android.app.DownloadManager.Request setVisibleInDownloadsUi(boolean);
+    field public static final int NETWORK_MOBILE = 1; // 0x1
+    field public static final int NETWORK_WIFI = 2; // 0x2
+    field public static final int VISIBILITY_HIDDEN = 2; // 0x2
+    field public static final int VISIBILITY_VISIBLE = 0; // 0x0
+    field public static final int VISIBILITY_VISIBLE_NOTIFY_COMPLETED = 1; // 0x1
+    field public static final int VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION = 3; // 0x3
+  }
+
+  @Deprecated public class ExpandableListActivity extends android.app.Activity implements android.widget.ExpandableListView.OnChildClickListener android.widget.ExpandableListView.OnGroupCollapseListener android.widget.ExpandableListView.OnGroupExpandListener android.view.View.OnCreateContextMenuListener {
+    ctor @Deprecated public ExpandableListActivity();
+    method @Deprecated public android.widget.ExpandableListAdapter getExpandableListAdapter();
+    method @Deprecated public android.widget.ExpandableListView getExpandableListView();
+    method @Deprecated public long getSelectedId();
+    method @Deprecated public long getSelectedPosition();
+    method @Deprecated public boolean onChildClick(android.widget.ExpandableListView, android.view.View, int, int, long);
+    method @Deprecated public void onGroupCollapse(int);
+    method @Deprecated public void onGroupExpand(int);
+    method @Deprecated public void setListAdapter(android.widget.ExpandableListAdapter);
+    method @Deprecated public boolean setSelectedChild(int, int, boolean);
+    method @Deprecated public void setSelectedGroup(int);
+  }
+
+  public final class ForegroundServiceStartNotAllowedException extends android.app.ServiceStartNotAllowedException implements android.os.Parcelable {
+    ctor public ForegroundServiceStartNotAllowedException(@NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ForegroundServiceStartNotAllowedException> CREATOR;
+  }
+
+  @Deprecated public class Fragment implements android.content.ComponentCallbacks2 android.view.View.OnCreateContextMenuListener {
+    ctor @Deprecated public Fragment();
+    method @Deprecated public void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public final boolean equals(@Nullable Object);
+    method @Deprecated public final android.app.Activity getActivity();
+    method @Deprecated public boolean getAllowEnterTransitionOverlap();
+    method @Deprecated public boolean getAllowReturnTransitionOverlap();
+    method @Deprecated public final android.os.Bundle getArguments();
+    method @Deprecated public final android.app.FragmentManager getChildFragmentManager();
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated public android.transition.Transition getEnterTransition();
+    method @Deprecated public android.transition.Transition getExitTransition();
+    method @Deprecated public final android.app.FragmentManager getFragmentManager();
+    method @Deprecated @Nullable public final Object getHost();
+    method @Deprecated public final int getId();
+    method @Deprecated public final android.view.LayoutInflater getLayoutInflater();
+    method @Deprecated public android.app.LoaderManager getLoaderManager();
+    method @Deprecated public final android.app.Fragment getParentFragment();
+    method @Deprecated public android.transition.Transition getReenterTransition();
+    method @Deprecated public final android.content.res.Resources getResources();
+    method @Deprecated public final boolean getRetainInstance();
+    method @Deprecated public android.transition.Transition getReturnTransition();
+    method @Deprecated public android.transition.Transition getSharedElementEnterTransition();
+    method @Deprecated public android.transition.Transition getSharedElementReturnTransition();
+    method @Deprecated public final String getString(@StringRes int);
+    method @Deprecated public final String getString(@StringRes int, java.lang.Object...);
+    method @Deprecated public final String getTag();
+    method @Deprecated public final android.app.Fragment getTargetFragment();
+    method @Deprecated public final int getTargetRequestCode();
+    method @Deprecated public final CharSequence getText(@StringRes int);
+    method @Deprecated public boolean getUserVisibleHint();
+    method @Deprecated @Nullable public android.view.View getView();
+    method @Deprecated public final int hashCode();
+    method @Deprecated public static android.app.Fragment instantiate(android.content.Context, String);
+    method @Deprecated public static android.app.Fragment instantiate(android.content.Context, String, @Nullable android.os.Bundle);
+    method @Deprecated public final boolean isAdded();
+    method @Deprecated public final boolean isDetached();
+    method @Deprecated public final boolean isHidden();
+    method @Deprecated public final boolean isInLayout();
+    method @Deprecated public final boolean isRemoving();
+    method @Deprecated public final boolean isResumed();
+    method @Deprecated public final boolean isStateSaved();
+    method @Deprecated public final boolean isVisible();
+    method @Deprecated @CallSuper public void onActivityCreated(@Nullable android.os.Bundle);
+    method @Deprecated public void onActivityResult(int, int, android.content.Intent);
+    method @Deprecated @CallSuper public void onAttach(android.content.Context);
+    method @Deprecated @CallSuper public void onAttach(android.app.Activity);
+    method @Deprecated public void onAttachFragment(android.app.Fragment);
+    method @Deprecated @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
+    method @Deprecated public boolean onContextItemSelected(android.view.MenuItem);
+    method @Deprecated @CallSuper public void onCreate(@Nullable android.os.Bundle);
+    method @Deprecated public android.animation.Animator onCreateAnimator(int, boolean, int);
+    method @Deprecated public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+    method @Deprecated public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method @Deprecated @Nullable public android.view.View onCreateView(android.view.LayoutInflater, @Nullable android.view.ViewGroup, android.os.Bundle);
+    method @Deprecated @CallSuper public void onDestroy();
+    method @Deprecated public void onDestroyOptionsMenu();
+    method @Deprecated @CallSuper public void onDestroyView();
+    method @Deprecated @CallSuper public void onDetach();
+    method @Deprecated public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+    method @Deprecated public void onHiddenChanged(boolean);
+    method @Deprecated @CallSuper public void onInflate(android.util.AttributeSet, android.os.Bundle);
+    method @Deprecated @CallSuper public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+    method @Deprecated @CallSuper public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+    method @Deprecated @CallSuper public void onLowMemory();
+    method @Deprecated public void onMultiWindowModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onMultiWindowModeChanged(boolean);
+    method @Deprecated public boolean onOptionsItemSelected(android.view.MenuItem);
+    method @Deprecated public void onOptionsMenuClosed(android.view.Menu);
+    method @Deprecated @CallSuper public void onPause();
+    method @Deprecated public void onPictureInPictureModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onPictureInPictureModeChanged(boolean);
+    method @Deprecated public void onPrepareOptionsMenu(android.view.Menu);
+    method @Deprecated public void onRequestPermissionsResult(int, @NonNull String[], @NonNull int[]);
+    method @Deprecated @CallSuper public void onResume();
+    method @Deprecated public void onSaveInstanceState(android.os.Bundle);
+    method @Deprecated @CallSuper public void onStart();
+    method @Deprecated @CallSuper public void onStop();
+    method @Deprecated @CallSuper public void onTrimMemory(int);
+    method @Deprecated public void onViewCreated(android.view.View, @Nullable android.os.Bundle);
+    method @Deprecated @CallSuper public void onViewStateRestored(android.os.Bundle);
+    method @Deprecated public void postponeEnterTransition();
+    method @Deprecated public void registerForContextMenu(android.view.View);
+    method @Deprecated public final void requestPermissions(@NonNull String[], int);
+    method @Deprecated public void setAllowEnterTransitionOverlap(boolean);
+    method @Deprecated public void setAllowReturnTransitionOverlap(boolean);
+    method @Deprecated public void setArguments(android.os.Bundle);
+    method @Deprecated public void setEnterSharedElementCallback(android.app.SharedElementCallback);
+    method @Deprecated public void setEnterTransition(android.transition.Transition);
+    method @Deprecated public void setExitSharedElementCallback(android.app.SharedElementCallback);
+    method @Deprecated public void setExitTransition(android.transition.Transition);
+    method @Deprecated public void setHasOptionsMenu(boolean);
+    method @Deprecated public void setInitialSavedState(android.app.Fragment.SavedState);
+    method @Deprecated public void setMenuVisibility(boolean);
+    method @Deprecated public void setReenterTransition(android.transition.Transition);
+    method @Deprecated public void setRetainInstance(boolean);
+    method @Deprecated public void setReturnTransition(android.transition.Transition);
+    method @Deprecated public void setSharedElementEnterTransition(android.transition.Transition);
+    method @Deprecated public void setSharedElementReturnTransition(android.transition.Transition);
+    method @Deprecated public void setTargetFragment(android.app.Fragment, int);
+    method @Deprecated public void setUserVisibleHint(boolean);
+    method @Deprecated public boolean shouldShowRequestPermissionRationale(@NonNull String);
+    method @Deprecated public void startActivity(android.content.Intent);
+    method @Deprecated public void startActivity(android.content.Intent, android.os.Bundle);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int, android.os.Bundle);
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startPostponedEnterTransition();
+    method @Deprecated public void unregisterForContextMenu(android.view.View);
+  }
+
+  @Deprecated public static class Fragment.InstantiationException extends android.util.AndroidRuntimeException {
+    ctor @Deprecated public Fragment.InstantiationException(String, Exception);
+  }
+
+  @Deprecated public static class Fragment.SavedState implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final android.os.Parcelable.ClassLoaderCreator<android.app.Fragment.SavedState> CREATOR;
+  }
+
+  @Deprecated public class FragmentBreadCrumbs extends android.view.ViewGroup implements android.app.FragmentManager.OnBackStackChangedListener {
+    ctor @Deprecated public FragmentBreadCrumbs(android.content.Context);
+    ctor @Deprecated public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet, int);
+    method @Deprecated public void onBackStackChanged();
+    method @Deprecated public void setActivity(android.app.Activity);
+    method @Deprecated public void setMaxVisible(int);
+    method @Deprecated public void setOnBreadCrumbClickListener(android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener);
+    method @Deprecated public void setParentTitle(CharSequence, CharSequence, android.view.View.OnClickListener);
+    method @Deprecated public void setTitle(CharSequence, CharSequence);
+  }
+
+  @Deprecated public static interface FragmentBreadCrumbs.OnBreadCrumbClickListener {
+    method @Deprecated public boolean onBreadCrumbClick(android.app.FragmentManager.BackStackEntry, int);
+  }
+
+  @Deprecated public abstract class FragmentContainer {
+    ctor @Deprecated public FragmentContainer();
+    method @Deprecated @Nullable public abstract <T extends android.view.View> T onFindViewById(@IdRes int);
+    method @Deprecated public abstract boolean onHasView();
+  }
+
+  @Deprecated public class FragmentController {
+    method @Deprecated public void attachHost(android.app.Fragment);
+    method @Deprecated public static final android.app.FragmentController createController(android.app.FragmentHostCallback<?>);
+    method @Deprecated public void dispatchActivityCreated();
+    method @Deprecated public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method @Deprecated public boolean dispatchContextItemSelected(android.view.MenuItem);
+    method @Deprecated public void dispatchCreate();
+    method @Deprecated public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method @Deprecated public void dispatchDestroy();
+    method @Deprecated public void dispatchDestroyView();
+    method @Deprecated public void dispatchLowMemory();
+    method @Deprecated public void dispatchMultiWindowModeChanged(boolean);
+    method @Deprecated public void dispatchMultiWindowModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+    method @Deprecated public void dispatchOptionsMenuClosed(android.view.Menu);
+    method @Deprecated public void dispatchPause();
+    method @Deprecated public void dispatchPictureInPictureModeChanged(boolean);
+    method @Deprecated public void dispatchPictureInPictureModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+    method @Deprecated public void dispatchResume();
+    method @Deprecated public void dispatchStart();
+    method @Deprecated public void dispatchStop();
+    method @Deprecated public void dispatchTrimMemory(int);
+    method @Deprecated public void doLoaderDestroy();
+    method @Deprecated public void doLoaderStart();
+    method @Deprecated public void doLoaderStop(boolean);
+    method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public boolean execPendingActions();
+    method @Deprecated @Nullable public android.app.Fragment findFragmentByWho(String);
+    method @Deprecated public android.app.FragmentManager getFragmentManager();
+    method @Deprecated public android.app.LoaderManager getLoaderManager();
+    method @Deprecated public void noteStateNotSaved();
+    method @Deprecated public android.view.View onCreateView(android.view.View, String, android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void reportLoaderStart();
+    method @Deprecated public void restoreAllState(android.os.Parcelable, java.util.List<android.app.Fragment>);
+    method @Deprecated public void restoreAllState(android.os.Parcelable, android.app.FragmentManagerNonConfig);
+    method @Deprecated public void restoreLoaderNonConfig(android.util.ArrayMap<java.lang.String,android.app.LoaderManager>);
+    method @Deprecated public android.util.ArrayMap<java.lang.String,android.app.LoaderManager> retainLoaderNonConfig();
+    method @Deprecated public android.app.FragmentManagerNonConfig retainNestedNonConfig();
+    method @Deprecated public java.util.List<android.app.Fragment> retainNonConfig();
+    method @Deprecated public android.os.Parcelable saveAllState();
+  }
+
+  @Deprecated public abstract class FragmentHostCallback<E> extends android.app.FragmentContainer {
+    ctor @Deprecated public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method @Deprecated public void onAttachFragment(android.app.Fragment);
+    method @Deprecated public void onDump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated @Nullable public <T extends android.view.View> T onFindViewById(int);
+    method @Deprecated @Nullable public abstract E onGetHost();
+    method @Deprecated public android.view.LayoutInflater onGetLayoutInflater();
+    method @Deprecated public int onGetWindowAnimations();
+    method @Deprecated public boolean onHasView();
+    method @Deprecated public boolean onHasWindowAnimations();
+    method @Deprecated public void onInvalidateOptionsMenu();
+    method @Deprecated public void onRequestPermissionsFromFragment(@NonNull android.app.Fragment, @NonNull String[], int);
+    method @Deprecated public boolean onShouldSaveFragmentState(android.app.Fragment);
+    method @Deprecated public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
+    method @Deprecated public void onStartIntentSenderFromFragment(android.app.Fragment, android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public boolean onUseFragmentManagerInflaterFactory();
+  }
+
+  @Deprecated public abstract class FragmentManager {
+    ctor @Deprecated public FragmentManager();
+    method @Deprecated public abstract void addOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener);
+    method @Deprecated public abstract android.app.FragmentTransaction beginTransaction();
+    method @Deprecated public abstract void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public static void enableDebugLogging(boolean);
+    method @Deprecated public abstract boolean executePendingTransactions();
+    method @Deprecated public abstract android.app.Fragment findFragmentById(int);
+    method @Deprecated public abstract android.app.Fragment findFragmentByTag(String);
+    method @Deprecated public abstract android.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+    method @Deprecated public abstract int getBackStackEntryCount();
+    method @Deprecated public abstract android.app.Fragment getFragment(android.os.Bundle, String);
+    method @Deprecated public abstract java.util.List<android.app.Fragment> getFragments();
+    method @Deprecated public abstract android.app.Fragment getPrimaryNavigationFragment();
+    method @Deprecated public void invalidateOptionsMenu();
+    method @Deprecated public abstract boolean isDestroyed();
+    method @Deprecated public abstract boolean isStateSaved();
+    method @Deprecated public abstract void popBackStack();
+    method @Deprecated public abstract void popBackStack(String, int);
+    method @Deprecated public abstract void popBackStack(int, int);
+    method @Deprecated public abstract boolean popBackStackImmediate();
+    method @Deprecated public abstract boolean popBackStackImmediate(String, int);
+    method @Deprecated public abstract boolean popBackStackImmediate(int, int);
+    method @Deprecated public abstract void putFragment(android.os.Bundle, String, android.app.Fragment);
+    method @Deprecated public abstract void registerFragmentLifecycleCallbacks(android.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+    method @Deprecated public abstract void removeOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener);
+    method @Deprecated public abstract android.app.Fragment.SavedState saveFragmentInstanceState(android.app.Fragment);
+    method @Deprecated public abstract void unregisterFragmentLifecycleCallbacks(android.app.FragmentManager.FragmentLifecycleCallbacks);
+    field @Deprecated public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+  }
+
+  @Deprecated public static interface FragmentManager.BackStackEntry {
+    method @Deprecated public CharSequence getBreadCrumbShortTitle();
+    method @Deprecated public int getBreadCrumbShortTitleRes();
+    method @Deprecated public CharSequence getBreadCrumbTitle();
+    method @Deprecated public int getBreadCrumbTitleRes();
+    method @Deprecated public int getId();
+    method @Deprecated public String getName();
+  }
+
+  @Deprecated public abstract static class FragmentManager.FragmentLifecycleCallbacks {
+    ctor @Deprecated public FragmentManager.FragmentLifecycleCallbacks();
+    method @Deprecated public void onFragmentActivityCreated(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentAttached(android.app.FragmentManager, android.app.Fragment, android.content.Context);
+    method @Deprecated public void onFragmentCreated(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentDestroyed(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentDetached(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentPaused(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentPreAttached(android.app.FragmentManager, android.app.Fragment, android.content.Context);
+    method @Deprecated public void onFragmentPreCreated(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentResumed(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentSaveInstanceState(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentStarted(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentStopped(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentViewCreated(android.app.FragmentManager, android.app.Fragment, android.view.View, android.os.Bundle);
+    method @Deprecated public void onFragmentViewDestroyed(android.app.FragmentManager, android.app.Fragment);
+  }
+
+  @Deprecated public static interface FragmentManager.OnBackStackChangedListener {
+    method @Deprecated public void onBackStackChanged();
+  }
+
+  @Deprecated public class FragmentManagerNonConfig {
+  }
+
+  @Deprecated public abstract class FragmentTransaction {
+    ctor @Deprecated public FragmentTransaction();
+    method @Deprecated public abstract android.app.FragmentTransaction add(android.app.Fragment, String);
+    method @Deprecated public abstract android.app.FragmentTransaction add(@IdRes int, android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction add(@IdRes int, android.app.Fragment, String);
+    method @Deprecated public abstract android.app.FragmentTransaction addSharedElement(android.view.View, String);
+    method @Deprecated public abstract android.app.FragmentTransaction addToBackStack(@Nullable String);
+    method @Deprecated public abstract android.app.FragmentTransaction attach(android.app.Fragment);
+    method @Deprecated public abstract int commit();
+    method @Deprecated public abstract int commitAllowingStateLoss();
+    method @Deprecated public abstract void commitNow();
+    method @Deprecated public abstract void commitNowAllowingStateLoss();
+    method @Deprecated public abstract android.app.FragmentTransaction detach(android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction disallowAddToBackStack();
+    method @Deprecated public abstract android.app.FragmentTransaction hide(android.app.Fragment);
+    method @Deprecated public abstract boolean isAddToBackStackAllowed();
+    method @Deprecated public abstract boolean isEmpty();
+    method @Deprecated public abstract android.app.FragmentTransaction remove(android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction replace(@IdRes int, android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction replace(@IdRes int, android.app.Fragment, String);
+    method @Deprecated public abstract android.app.FragmentTransaction runOnCommit(Runnable);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbTitle(CharSequence);
+    method @Deprecated public abstract android.app.FragmentTransaction setCustomAnimations(@AnimatorRes int, @AnimatorRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setCustomAnimations(@AnimatorRes int, @AnimatorRes int, @AnimatorRes int, @AnimatorRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setPrimaryNavigationFragment(android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction setReorderingAllowed(boolean);
+    method @Deprecated public abstract android.app.FragmentTransaction setTransition(int);
+    method @Deprecated public abstract android.app.FragmentTransaction setTransitionStyle(@StyleRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction show(android.app.Fragment);
+    field @Deprecated public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
+    field @Deprecated public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
+    field @Deprecated public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
+    field @Deprecated public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
+    field @Deprecated public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
+    field @Deprecated public static final int TRANSIT_NONE = 0; // 0x0
+    field @Deprecated public static final int TRANSIT_UNSET = -1; // 0xffffffff
+  }
+
+  public final class GameManager {
+    method public int getGameMode();
+    field public static final int GAME_MODE_BATTERY = 3; // 0x3
+    field public static final int GAME_MODE_PERFORMANCE = 2; // 0x2
+    field public static final int GAME_MODE_STANDARD = 1; // 0x1
+    field public static final int GAME_MODE_UNSUPPORTED = 0; // 0x0
+  }
+
+  public class Instrumentation {
+    ctor public Instrumentation();
+    method public android.os.TestLooperManager acquireLooperManager(android.os.Looper);
+    method public void addMonitor(android.app.Instrumentation.ActivityMonitor);
+    method public android.app.Instrumentation.ActivityMonitor addMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean);
+    method public android.app.Instrumentation.ActivityMonitor addMonitor(String, android.app.Instrumentation.ActivityResult, boolean);
+    method public void addResults(android.os.Bundle);
+    method public void callActivityOnCreate(android.app.Activity, android.os.Bundle);
+    method public void callActivityOnCreate(android.app.Activity, android.os.Bundle, android.os.PersistableBundle);
+    method public void callActivityOnDestroy(android.app.Activity);
+    method public void callActivityOnNewIntent(android.app.Activity, android.content.Intent);
+    method public void callActivityOnPause(android.app.Activity);
+    method public void callActivityOnPictureInPictureRequested(@NonNull android.app.Activity);
+    method public void callActivityOnPostCreate(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public void callActivityOnPostCreate(@NonNull android.app.Activity, @Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method public void callActivityOnRestart(android.app.Activity);
+    method public void callActivityOnRestoreInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public void callActivityOnRestoreInstanceState(@NonNull android.app.Activity, @Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method public void callActivityOnResume(android.app.Activity);
+    method public void callActivityOnSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public void callActivityOnSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle, @NonNull android.os.PersistableBundle);
+    method public void callActivityOnStart(android.app.Activity);
+    method public void callActivityOnStop(android.app.Activity);
+    method public void callActivityOnUserLeaving(android.app.Activity);
+    method public void callApplicationOnCreate(android.app.Application);
+    method public boolean checkMonitorHit(android.app.Instrumentation.ActivityMonitor, int);
+    method public void endPerformanceSnapshot();
+    method public void finish(int, android.os.Bundle);
+    method public android.os.Bundle getAllocCounts();
+    method public android.os.Bundle getBinderCounts();
+    method public android.content.ComponentName getComponentName();
+    method public android.content.Context getContext();
+    method public String getProcessName();
+    method public android.content.Context getTargetContext();
+    method public android.app.UiAutomation getUiAutomation();
+    method public android.app.UiAutomation getUiAutomation(int);
+    method public boolean invokeContextMenuAction(android.app.Activity, int, int);
+    method public boolean invokeMenuActionSync(android.app.Activity, int, int);
+    method public boolean isProfiling();
+    method public android.app.Activity newActivity(Class<?>, android.content.Context, android.os.IBinder, android.app.Application, android.content.Intent, android.content.pm.ActivityInfo, CharSequence, android.app.Activity, String, Object) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Activity newActivity(ClassLoader, String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Application newApplication(ClassLoader, String, android.content.Context) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static android.app.Application newApplication(Class<?>, android.content.Context) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public void onCreate(android.os.Bundle);
+    method public void onDestroy();
+    method public boolean onException(Object, Throwable);
+    method public void onStart();
+    method public void removeMonitor(android.app.Instrumentation.ActivityMonitor);
+    method public void runOnMainSync(Runnable);
+    method public void sendCharacterSync(int);
+    method public void sendKeyDownUpSync(int);
+    method public void sendKeySync(android.view.KeyEvent);
+    method public void sendPointerSync(android.view.MotionEvent);
+    method public void sendStatus(int, android.os.Bundle);
+    method public void sendStringSync(String);
+    method public void sendTrackballEventSync(android.view.MotionEvent);
+    method public void setAutomaticPerformanceSnapshots();
+    method public void setInTouchMode(boolean);
+    method public void start();
+    method public android.app.Activity startActivitySync(android.content.Intent);
+    method @NonNull public android.app.Activity startActivitySync(@NonNull android.content.Intent, @Nullable android.os.Bundle);
+    method @Deprecated public void startAllocCounting();
+    method public void startPerformanceSnapshot();
+    method public void startProfiling();
+    method @Deprecated public void stopAllocCounting();
+    method public void stopProfiling();
+    method public void waitForIdle(Runnable);
+    method public void waitForIdleSync();
+    method public android.app.Activity waitForMonitor(android.app.Instrumentation.ActivityMonitor);
+    method public android.app.Activity waitForMonitorWithTimeout(android.app.Instrumentation.ActivityMonitor, long);
+    field public static final String REPORT_KEY_IDENTIFIER = "id";
+    field public static final String REPORT_KEY_STREAMRESULT = "stream";
+  }
+
+  public static class Instrumentation.ActivityMonitor {
+    ctor public Instrumentation.ActivityMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean);
+    ctor public Instrumentation.ActivityMonitor(String, android.app.Instrumentation.ActivityResult, boolean);
+    ctor public Instrumentation.ActivityMonitor();
+    method public final android.content.IntentFilter getFilter();
+    method public final int getHits();
+    method public final android.app.Activity getLastActivity();
+    method public final android.app.Instrumentation.ActivityResult getResult();
+    method public final boolean isBlocking();
+    method public android.app.Instrumentation.ActivityResult onStartActivity(android.content.Intent);
+    method public final android.app.Activity waitForActivity();
+    method public final android.app.Activity waitForActivityWithTimeout(long);
+  }
+
+  public static final class Instrumentation.ActivityResult {
+    ctor public Instrumentation.ActivityResult(int, android.content.Intent);
+    method public int getResultCode();
+    method public android.content.Intent getResultData();
+  }
+
+  @Deprecated public abstract class IntentService extends android.app.Service {
+    ctor @Deprecated public IntentService(String);
+    method @Deprecated @Nullable public android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated @WorkerThread protected abstract void onHandleIntent(@Nullable android.content.Intent);
+    method @Deprecated public void onStart(@Nullable android.content.Intent, int);
+    method @Deprecated public void setIntentRedelivery(boolean);
+  }
+
+  public class KeyguardManager {
+    method @Deprecated public android.content.Intent createConfirmDeviceCredentialIntent(CharSequence, CharSequence);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult);
+    method @Deprecated public boolean inKeyguardRestrictedInputMode();
+    method public boolean isDeviceLocked();
+    method public boolean isDeviceSecure();
+    method public boolean isKeyguardLocked();
+    method public boolean isKeyguardSecure();
+    method @Deprecated public android.app.KeyguardManager.KeyguardLock newKeyguardLock(String);
+    method public void requestDismissKeyguard(@NonNull android.app.Activity, @Nullable android.app.KeyguardManager.KeyguardDismissCallback);
+  }
+
+  public abstract static class KeyguardManager.KeyguardDismissCallback {
+    ctor public KeyguardManager.KeyguardDismissCallback();
+    method public void onDismissCancelled();
+    method public void onDismissError();
+    method public void onDismissSucceeded();
+  }
+
+  @Deprecated public class KeyguardManager.KeyguardLock {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void disableKeyguard();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void reenableKeyguard();
+  }
+
+  @Deprecated public static interface KeyguardManager.OnKeyguardExitResult {
+    method @Deprecated public void onKeyguardExitResult(boolean);
+  }
+
+  @Deprecated public abstract class LauncherActivity extends android.app.ListActivity {
+    ctor @Deprecated public LauncherActivity();
+    method @Deprecated protected android.content.Intent getTargetIntent();
+    method @Deprecated protected android.content.Intent intentForPosition(int);
+    method @Deprecated protected android.app.LauncherActivity.ListItem itemForPosition(int);
+    method @Deprecated public java.util.List<android.app.LauncherActivity.ListItem> makeListItems();
+    method @Deprecated protected java.util.List<android.content.pm.ResolveInfo> onQueryPackageManager(android.content.Intent);
+    method @Deprecated protected void onSetContentView();
+  }
+
+  @Deprecated public class LauncherActivity.IconResizer {
+    ctor @Deprecated public LauncherActivity.IconResizer();
+    method @Deprecated public android.graphics.drawable.Drawable createIconThumbnail(android.graphics.drawable.Drawable);
+  }
+
+  @Deprecated public static class LauncherActivity.ListItem {
+    ctor @Deprecated public LauncherActivity.ListItem();
+    field @Deprecated public String className;
+    field @Deprecated public android.os.Bundle extras;
+    field @Deprecated public android.graphics.drawable.Drawable icon;
+    field @Deprecated public CharSequence label;
+    field @Deprecated public String packageName;
+    field @Deprecated public android.content.pm.ResolveInfo resolveInfo;
+  }
+
+  @Deprecated public class ListActivity extends android.app.Activity {
+    ctor @Deprecated public ListActivity();
+    method @Deprecated public android.widget.ListAdapter getListAdapter();
+    method @Deprecated public android.widget.ListView getListView();
+    method @Deprecated public long getSelectedItemId();
+    method @Deprecated public int getSelectedItemPosition();
+    method @Deprecated protected void onListItemClick(android.widget.ListView, android.view.View, int, long);
+    method @Deprecated public void setListAdapter(android.widget.ListAdapter);
+    method @Deprecated public void setSelection(int);
+  }
+
+  @Deprecated public class ListFragment extends android.app.Fragment {
+    ctor @Deprecated public ListFragment();
+    method @Deprecated public android.widget.ListAdapter getListAdapter();
+    method @Deprecated public android.widget.ListView getListView();
+    method @Deprecated public long getSelectedItemId();
+    method @Deprecated public int getSelectedItemPosition();
+    method @Deprecated public void onListItemClick(android.widget.ListView, android.view.View, int, long);
+    method @Deprecated public void setEmptyText(CharSequence);
+    method @Deprecated public void setListAdapter(android.widget.ListAdapter);
+    method @Deprecated public void setListShown(boolean);
+    method @Deprecated public void setListShownNoAnimation(boolean);
+    method @Deprecated public void setSelection(int);
+  }
+
+  @Deprecated public abstract class LoaderManager {
+    ctor @Deprecated public LoaderManager();
+    method @Deprecated public abstract void destroyLoader(int);
+    method @Deprecated public abstract void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public static void enableDebugLogging(boolean);
+    method @Deprecated public abstract <D> android.content.Loader<D> getLoader(int);
+    method @Deprecated public abstract <D> android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method @Deprecated public abstract <D> android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+  }
+
+  @Deprecated public static interface LoaderManager.LoaderCallbacks<D> {
+    method @Deprecated public android.content.Loader<D> onCreateLoader(int, android.os.Bundle);
+    method @Deprecated public void onLoadFinished(android.content.Loader<D>, D);
+    method @Deprecated public void onLoaderReset(android.content.Loader<D>);
+  }
+
+  @Deprecated public class LocalActivityManager {
+    ctor @Deprecated public LocalActivityManager(android.app.Activity, boolean);
+    method @Deprecated public android.view.Window destroyActivity(String, boolean);
+    method @Deprecated public void dispatchCreate(android.os.Bundle);
+    method @Deprecated public void dispatchDestroy(boolean);
+    method @Deprecated public void dispatchPause(boolean);
+    method @Deprecated public void dispatchResume();
+    method @Deprecated public void dispatchStop();
+    method @Deprecated public android.app.Activity getActivity(String);
+    method @Deprecated public android.app.Activity getCurrentActivity();
+    method @Deprecated public String getCurrentId();
+    method @Deprecated public void removeAllActivities();
+    method @Deprecated public android.os.Bundle saveInstanceState();
+    method @Deprecated public android.view.Window startActivity(String, android.content.Intent);
+  }
+
+  public class MediaRouteActionProvider extends android.view.ActionProvider {
+    ctor public MediaRouteActionProvider(android.content.Context);
+    method public android.view.View onCreateActionView();
+    method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
+    method public void setRouteTypes(int);
+  }
+
+  public class MediaRouteButton extends android.view.View {
+    ctor public MediaRouteButton(android.content.Context);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getRouteTypes();
+    method public void onAttachedToWindow();
+    method public void onDetachedFromWindow();
+    method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
+    method public void setRouteTypes(int);
+    method public void showDialog();
+  }
+
+  public class NativeActivity extends android.app.Activity implements android.view.InputQueue.Callback android.view.SurfaceHolder.Callback2 android.view.ViewTreeObserver.OnGlobalLayoutListener {
+    ctor public NativeActivity();
+    method public void onGlobalLayout();
+    method public void onInputQueueCreated(android.view.InputQueue);
+    method public void onInputQueueDestroyed(android.view.InputQueue);
+    method public void surfaceChanged(android.view.SurfaceHolder, int, int, int);
+    method public void surfaceCreated(android.view.SurfaceHolder);
+    method public void surfaceDestroyed(android.view.SurfaceHolder);
+    method public void surfaceRedrawNeeded(android.view.SurfaceHolder);
+    field public static final String META_DATA_FUNC_NAME = "android.app.func_name";
+    field public static final String META_DATA_LIB_NAME = "android.app.lib_name";
+  }
+
+  public class Notification implements android.os.Parcelable {
+    ctor public Notification();
+    ctor @Deprecated public Notification(int, CharSequence, long);
+    ctor public Notification(android.os.Parcel);
+    method public android.app.Notification clone();
+    method public int describeContents();
+    method @Nullable public android.util.Pair<android.app.RemoteInput,android.app.Notification.Action> findRemoteInputActionPair(boolean);
+    method public boolean getAllowSystemGeneratedContextualActions();
+    method public int getBadgeIconType();
+    method @Nullable public android.app.Notification.BubbleMetadata getBubbleMetadata();
+    method public String getChannelId();
+    method @NonNull public java.util.List<android.app.Notification.Action> getContextualActions();
+    method public String getGroup();
+    method public int getGroupAlertBehavior();
+    method public android.graphics.drawable.Icon getLargeIcon();
+    method @Nullable public android.content.LocusId getLocusId();
+    method public CharSequence getSettingsText();
+    method public String getShortcutId();
+    method public android.graphics.drawable.Icon getSmallIcon();
+    method public String getSortKey();
+    method public long getTimeoutAfter();
+    method public boolean hasImage();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.media.AudioAttributes AUDIO_ATTRIBUTES_DEFAULT;
+    field public static final int BADGE_ICON_LARGE = 2; // 0x2
+    field public static final int BADGE_ICON_NONE = 0; // 0x0
+    field public static final int BADGE_ICON_SMALL = 1; // 0x1
+    field public static final String CATEGORY_ALARM = "alarm";
+    field public static final String CATEGORY_CALL = "call";
+    field public static final String CATEGORY_EMAIL = "email";
+    field public static final String CATEGORY_ERROR = "err";
+    field public static final String CATEGORY_EVENT = "event";
+    field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
+    field public static final String CATEGORY_MESSAGE = "msg";
+    field public static final String CATEGORY_MISSED_CALL = "missed_call";
+    field public static final String CATEGORY_NAVIGATION = "navigation";
+    field public static final String CATEGORY_PROGRESS = "progress";
+    field public static final String CATEGORY_PROMO = "promo";
+    field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+    field public static final String CATEGORY_REMINDER = "reminder";
+    field public static final String CATEGORY_SERVICE = "service";
+    field public static final String CATEGORY_SOCIAL = "social";
+    field public static final String CATEGORY_STATUS = "status";
+    field public static final String CATEGORY_STOPWATCH = "stopwatch";
+    field public static final String CATEGORY_SYSTEM = "sys";
+    field public static final String CATEGORY_TRANSPORT = "transport";
+    field public static final String CATEGORY_WORKOUT = "workout";
+    field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification> CREATOR;
+    field public static final int DEFAULT_ALL = -1; // 0xffffffff
+    field public static final int DEFAULT_LIGHTS = 4; // 0x4
+    field public static final int DEFAULT_SOUND = 1; // 0x1
+    field public static final int DEFAULT_VIBRATE = 2; // 0x2
+    field public static final String EXTRA_ANSWER_COLOR = "android.answerColor";
+    field public static final String EXTRA_ANSWER_INTENT = "android.answerIntent";
+    field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+    field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+    field public static final String EXTRA_BIG_TEXT = "android.bigText";
+    field public static final String EXTRA_CALL_IS_VIDEO = "android.callIsVideo";
+    field public static final String EXTRA_CALL_PERSON = "android.callPerson";
+    field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+    field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
+    field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+    field public static final String EXTRA_COLORIZED = "android.colorized";
+    field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+    field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+    field public static final String EXTRA_DECLINE_COLOR = "android.declineColor";
+    field public static final String EXTRA_DECLINE_INTENT = "android.declineIntent";
+    field public static final String EXTRA_HANG_UP_INTENT = "android.hangUpIntent";
+    field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
+    field public static final String EXTRA_INFO_TEXT = "android.infoText";
+    field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+    field @Deprecated public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+    field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+    field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+    field public static final String EXTRA_MESSAGES = "android.messages";
+    field public static final String EXTRA_MESSAGING_PERSON = "android.messagingUser";
+    field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+    field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
+    field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
+    field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
+    field public static final String EXTRA_PICTURE = "android.picture";
+    field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
+    field public static final String EXTRA_PICTURE_ICON = "android.pictureIcon";
+    field public static final String EXTRA_PROGRESS = "android.progress";
+    field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+    field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+    field public static final String EXTRA_REMOTE_INPUT_DRAFT = "android.remoteInputDraft";
+    field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+    field @Deprecated public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+    field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
+    field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+    field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+    field @Deprecated public static final String EXTRA_SMALL_ICON = "android.icon";
+    field public static final String EXTRA_SUB_TEXT = "android.subText";
+    field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+    field public static final String EXTRA_TEMPLATE = "android.template";
+    field public static final String EXTRA_TEXT = "android.text";
+    field public static final String EXTRA_TEXT_LINES = "android.textLines";
+    field public static final String EXTRA_TITLE = "android.title";
+    field public static final String EXTRA_TITLE_BIG = "android.title.big";
+    field public static final String EXTRA_VERIFICATION_ICON = "android.verificationIcon";
+    field public static final String EXTRA_VERIFICATION_TEXT = "android.verificationText";
+    field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+    field public static final int FLAG_BUBBLE = 4096; // 0x1000
+    field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+    field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+    field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+    field public static final int FLAG_INSISTENT = 4; // 0x4
+    field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+    field public static final int FLAG_NO_CLEAR = 32; // 0x20
+    field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+    field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+    field @Deprecated public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+    field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
+    field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
+    field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
+    field public static final int GROUP_ALERT_ALL = 0; // 0x0
+    field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+    field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+    field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
+    field @Deprecated public static final int PRIORITY_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int PRIORITY_HIGH = 1; // 0x1
+    field @Deprecated public static final int PRIORITY_LOW = -1; // 0xffffffff
+    field @Deprecated public static final int PRIORITY_MAX = 2; // 0x2
+    field @Deprecated public static final int PRIORITY_MIN = -2; // 0xfffffffe
+    field @Deprecated public static final int STREAM_DEFAULT = -1; // 0xffffffff
+    field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+    field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+    field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+    field public android.app.Notification.Action[] actions;
+    field @Deprecated public android.media.AudioAttributes audioAttributes;
+    field @Deprecated public int audioStreamType;
+    field @Deprecated public android.widget.RemoteViews bigContentView;
+    field public String category;
+    field @ColorInt public int color;
+    field public android.app.PendingIntent contentIntent;
+    field @Deprecated public android.widget.RemoteViews contentView;
+    field @Deprecated public int defaults;
+    field public android.app.PendingIntent deleteIntent;
+    field public android.os.Bundle extras;
+    field public int flags;
+    field public android.app.PendingIntent fullScreenIntent;
+    field @Deprecated public android.widget.RemoteViews headsUpContentView;
+    field @Deprecated @DrawableRes public int icon;
+    field public int iconLevel;
+    field @Deprecated public android.graphics.Bitmap largeIcon;
+    field @Deprecated @ColorInt public int ledARGB;
+    field @Deprecated public int ledOffMS;
+    field @Deprecated public int ledOnMS;
+    field public int number;
+    field @Deprecated public int priority;
+    field public android.app.Notification publicVersion;
+    field @Deprecated public android.net.Uri sound;
+    field public CharSequence tickerText;
+    field @Deprecated public android.widget.RemoteViews tickerView;
+    field @Deprecated public long[] vibrate;
+    field public int visibility;
+    field public long when;
+  }
+
+  public static class Notification.Action implements android.os.Parcelable {
+    ctor @Deprecated public Notification.Action(int, CharSequence, android.app.PendingIntent);
+    method public android.app.Notification.Action clone();
+    method public int describeContents();
+    method public boolean getAllowGeneratedReplies();
+    method public android.app.RemoteInput[] getDataOnlyRemoteInputs();
+    method public android.os.Bundle getExtras();
+    method public android.graphics.drawable.Icon getIcon();
+    method public android.app.RemoteInput[] getRemoteInputs();
+    method public int getSemanticAction();
+    method public boolean isAuthenticationRequired();
+    method public boolean isContextual();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.Action> CREATOR;
+    field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+    field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+    field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+    field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+    field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+    field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+    field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+    field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+    field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+    field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+    field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+    field public android.app.PendingIntent actionIntent;
+    field @Deprecated public int icon;
+    field public CharSequence title;
+  }
+
+  public static final class Notification.Action.Builder {
+    ctor @Deprecated public Notification.Action.Builder(int, CharSequence, android.app.PendingIntent);
+    ctor public Notification.Action.Builder(android.graphics.drawable.Icon, CharSequence, android.app.PendingIntent);
+    ctor public Notification.Action.Builder(android.app.Notification.Action);
+    method @NonNull public android.app.Notification.Action.Builder addExtras(android.os.Bundle);
+    method @NonNull public android.app.Notification.Action.Builder addRemoteInput(android.app.RemoteInput);
+    method @NonNull public android.app.Notification.Action build();
+    method @NonNull public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Extender);
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public android.app.Notification.Action.Builder setAllowGeneratedReplies(boolean);
+    method @NonNull public android.app.Notification.Action.Builder setAuthenticationRequired(boolean);
+    method @NonNull public android.app.Notification.Action.Builder setContextual(boolean);
+    method @NonNull public android.app.Notification.Action.Builder setSemanticAction(int);
+  }
+
+  public static interface Notification.Action.Extender {
+    method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder);
+  }
+
+  public static final class Notification.Action.WearableExtender implements android.app.Notification.Action.Extender {
+    ctor public Notification.Action.WearableExtender();
+    ctor public Notification.Action.WearableExtender(android.app.Notification.Action);
+    method public android.app.Notification.Action.WearableExtender clone();
+    method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder);
+    method @Deprecated public CharSequence getCancelLabel();
+    method @Deprecated public CharSequence getConfirmLabel();
+    method public boolean getHintDisplayActionInline();
+    method public boolean getHintLaunchesActivity();
+    method @Deprecated public CharSequence getInProgressLabel();
+    method public boolean isAvailableOffline();
+    method public android.app.Notification.Action.WearableExtender setAvailableOffline(boolean);
+    method @Deprecated public android.app.Notification.Action.WearableExtender setCancelLabel(CharSequence);
+    method @Deprecated public android.app.Notification.Action.WearableExtender setConfirmLabel(CharSequence);
+    method public android.app.Notification.Action.WearableExtender setHintDisplayActionInline(boolean);
+    method public android.app.Notification.Action.WearableExtender setHintLaunchesActivity(boolean);
+    method @Deprecated public android.app.Notification.Action.WearableExtender setInProgressLabel(CharSequence);
+  }
+
+  public static class Notification.BigPictureStyle extends android.app.Notification.Style {
+    ctor public Notification.BigPictureStyle();
+    ctor @Deprecated public Notification.BigPictureStyle(android.app.Notification.Builder);
+    method @NonNull public android.app.Notification.BigPictureStyle bigLargeIcon(@Nullable android.graphics.Bitmap);
+    method @NonNull public android.app.Notification.BigPictureStyle bigLargeIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BigPictureStyle bigPicture(@Nullable android.graphics.Bitmap);
+    method @NonNull public android.app.Notification.BigPictureStyle bigPicture(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BigPictureStyle setBigContentTitle(@Nullable CharSequence);
+    method @NonNull public android.app.Notification.BigPictureStyle setContentDescription(@Nullable CharSequence);
+    method @NonNull public android.app.Notification.BigPictureStyle setSummaryText(@Nullable CharSequence);
+    method @NonNull public android.app.Notification.BigPictureStyle showBigPictureWhenCollapsed(boolean);
+  }
+
+  public static class Notification.BigTextStyle extends android.app.Notification.Style {
+    ctor public Notification.BigTextStyle();
+    ctor @Deprecated public Notification.BigTextStyle(android.app.Notification.Builder);
+    method public android.app.Notification.BigTextStyle bigText(CharSequence);
+    method public android.app.Notification.BigTextStyle setBigContentTitle(CharSequence);
+    method public android.app.Notification.BigTextStyle setSummaryText(CharSequence);
+  }
+
+  public static final class Notification.BubbleMetadata implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getAutoExpandBubble();
+    method @Nullable public android.app.PendingIntent getDeleteIntent();
+    method @Dimension(unit=android.annotation.Dimension.DP) public int getDesiredHeight();
+    method @DimenRes public int getDesiredHeightResId();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @Nullable public android.app.PendingIntent getIntent();
+    method @Nullable public String getShortcutId();
+    method public boolean isBubbleSuppressable();
+    method public boolean isBubbleSuppressed();
+    method public boolean isNotificationSuppressed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.BubbleMetadata> CREATOR;
+  }
+
+  public static final class Notification.BubbleMetadata.Builder {
+    ctor @Deprecated public Notification.BubbleMetadata.Builder();
+    ctor public Notification.BubbleMetadata.Builder(@NonNull String);
+    ctor public Notification.BubbleMetadata.Builder(@NonNull android.app.PendingIntent, @NonNull android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BubbleMetadata build();
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setDeleteIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=android.annotation.Dimension.DP) int);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setIcon(@NonNull android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressNotification(boolean);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressableBubble(boolean);
+  }
+
+  public static class Notification.Builder {
+    ctor public Notification.Builder(android.content.Context, String);
+    ctor @Deprecated public Notification.Builder(android.content.Context);
+    method @Deprecated public android.app.Notification.Builder addAction(int, CharSequence, android.app.PendingIntent);
+    method @NonNull public android.app.Notification.Builder addAction(android.app.Notification.Action);
+    method @NonNull public android.app.Notification.Builder addExtras(android.os.Bundle);
+    method @Deprecated public android.app.Notification.Builder addPerson(String);
+    method @NonNull public android.app.Notification.Builder addPerson(android.app.Person);
+    method @NonNull public android.app.Notification build();
+    method public android.widget.RemoteViews createBigContentView();
+    method public android.widget.RemoteViews createContentView();
+    method public android.widget.RemoteViews createHeadsUpContentView();
+    method @NonNull public android.app.Notification.Builder extend(android.app.Notification.Extender);
+    method public android.os.Bundle getExtras();
+    method @Deprecated public android.app.Notification getNotification();
+    method public android.app.Notification.Style getStyle();
+    method @NonNull public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
+    method @NonNull public android.app.Notification.Builder setActions(android.app.Notification.Action...);
+    method @NonNull public android.app.Notification.Builder setAllowSystemGeneratedContextualActions(boolean);
+    method @NonNull public android.app.Notification.Builder setAutoCancel(boolean);
+    method @NonNull public android.app.Notification.Builder setBadgeIconType(int);
+    method @NonNull public android.app.Notification.Builder setBubbleMetadata(@Nullable android.app.Notification.BubbleMetadata);
+    method @NonNull public android.app.Notification.Builder setCategory(String);
+    method @NonNull public android.app.Notification.Builder setChannelId(String);
+    method @NonNull public android.app.Notification.Builder setChronometerCountDown(boolean);
+    method @NonNull public android.app.Notification.Builder setColor(@ColorInt int);
+    method @NonNull public android.app.Notification.Builder setColorized(boolean);
+    method @Deprecated public android.app.Notification.Builder setContent(android.widget.RemoteViews);
+    method @Deprecated public android.app.Notification.Builder setContentInfo(CharSequence);
+    method @NonNull public android.app.Notification.Builder setContentIntent(android.app.PendingIntent);
+    method @NonNull public android.app.Notification.Builder setContentText(CharSequence);
+    method @NonNull public android.app.Notification.Builder setContentTitle(CharSequence);
+    method @NonNull public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews);
+    method @NonNull public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews);
+    method @NonNull public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+    method @Deprecated public android.app.Notification.Builder setDefaults(int);
+    method @NonNull public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent);
+    method @NonNull public android.app.Notification.Builder setExtras(android.os.Bundle);
+    method @NonNull public android.app.Notification.Builder setFlag(int, boolean);
+    method @NonNull public android.app.Notification.Builder setForegroundServiceBehavior(int);
+    method @NonNull public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+    method @NonNull public android.app.Notification.Builder setGroup(String);
+    method @NonNull public android.app.Notification.Builder setGroupAlertBehavior(int);
+    method @NonNull public android.app.Notification.Builder setGroupSummary(boolean);
+    method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
+    method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
+    method @Deprecated public android.app.Notification.Builder setLights(@ColorInt int, int, int);
+    method @NonNull public android.app.Notification.Builder setLocalOnly(boolean);
+    method @NonNull public android.app.Notification.Builder setLocusId(@Nullable android.content.LocusId);
+    method @NonNull public android.app.Notification.Builder setNumber(int);
+    method @NonNull public android.app.Notification.Builder setOngoing(boolean);
+    method @NonNull public android.app.Notification.Builder setOnlyAlertOnce(boolean);
+    method @Deprecated public android.app.Notification.Builder setPriority(int);
+    method @NonNull public android.app.Notification.Builder setProgress(int, int, boolean);
+    method @NonNull public android.app.Notification.Builder setPublicVersion(android.app.Notification);
+    method @NonNull public android.app.Notification.Builder setRemoteInputHistory(CharSequence[]);
+    method @NonNull public android.app.Notification.Builder setSettingsText(CharSequence);
+    method @NonNull public android.app.Notification.Builder setShortcutId(String);
+    method @NonNull public android.app.Notification.Builder setShowWhen(boolean);
+    method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int);
+    method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int, int);
+    method @NonNull public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.Builder setSortKey(String);
+    method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri);
+    method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, int);
+    method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes);
+    method @NonNull public android.app.Notification.Builder setStyle(android.app.Notification.Style);
+    method @NonNull public android.app.Notification.Builder setSubText(CharSequence);
+    method @NonNull public android.app.Notification.Builder setTicker(CharSequence);
+    method @Deprecated public android.app.Notification.Builder setTicker(CharSequence, android.widget.RemoteViews);
+    method @NonNull public android.app.Notification.Builder setTimeoutAfter(long);
+    method @NonNull public android.app.Notification.Builder setUsesChronometer(boolean);
+    method @Deprecated public android.app.Notification.Builder setVibrate(long[]);
+    method @NonNull public android.app.Notification.Builder setVisibility(int);
+    method @NonNull public android.app.Notification.Builder setWhen(long);
+  }
+
+  public static class Notification.CallStyle extends android.app.Notification.Style {
+    method @NonNull public static android.app.Notification.CallStyle forIncomingCall(@NonNull android.app.Person, @NonNull android.app.PendingIntent, @NonNull android.app.PendingIntent);
+    method @NonNull public static android.app.Notification.CallStyle forOngoingCall(@NonNull android.app.Person, @NonNull android.app.PendingIntent);
+    method @NonNull public static android.app.Notification.CallStyle forScreeningCall(@NonNull android.app.Person, @NonNull android.app.PendingIntent, @NonNull android.app.PendingIntent);
+    method @NonNull public android.app.Notification.CallStyle setAnswerButtonColorHint(@ColorInt int);
+    method @NonNull public android.app.Notification.CallStyle setDeclineButtonColorHint(@ColorInt int);
+    method @NonNull public android.app.Notification.CallStyle setIsVideo(boolean);
+    method @NonNull public android.app.Notification.CallStyle setVerificationIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.CallStyle setVerificationText(@Nullable CharSequence);
+  }
+
+  public static final class Notification.CarExtender implements android.app.Notification.Extender {
+    ctor public Notification.CarExtender();
+    ctor public Notification.CarExtender(android.app.Notification);
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+    method @ColorInt public int getColor();
+    method public android.graphics.Bitmap getLargeIcon();
+    method public android.app.Notification.CarExtender.UnreadConversation getUnreadConversation();
+    method public android.app.Notification.CarExtender setColor(@ColorInt int);
+    method public android.app.Notification.CarExtender setLargeIcon(android.graphics.Bitmap);
+    method public android.app.Notification.CarExtender setUnreadConversation(android.app.Notification.CarExtender.UnreadConversation);
+  }
+
+  public static class Notification.CarExtender.Builder {
+    ctor public Notification.CarExtender.Builder(String);
+    method public android.app.Notification.CarExtender.Builder addMessage(String);
+    method public android.app.Notification.CarExtender.UnreadConversation build();
+    method public android.app.Notification.CarExtender.Builder setLatestTimestamp(long);
+    method public android.app.Notification.CarExtender.Builder setReadPendingIntent(android.app.PendingIntent);
+    method public android.app.Notification.CarExtender.Builder setReplyAction(android.app.PendingIntent, android.app.RemoteInput);
+  }
+
+  public static class Notification.CarExtender.UnreadConversation {
+    method public long getLatestTimestamp();
+    method public String[] getMessages();
+    method public String getParticipant();
+    method public String[] getParticipants();
+    method public android.app.PendingIntent getReadPendingIntent();
+    method public android.app.RemoteInput getRemoteInput();
+    method public android.app.PendingIntent getReplyPendingIntent();
+  }
+
+  public static class Notification.DecoratedCustomViewStyle extends android.app.Notification.Style {
+    ctor public Notification.DecoratedCustomViewStyle();
+  }
+
+  public static class Notification.DecoratedMediaCustomViewStyle extends android.app.Notification.MediaStyle {
+    ctor public Notification.DecoratedMediaCustomViewStyle();
+  }
+
+  public static interface Notification.Extender {
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+  }
+
+  public static class Notification.InboxStyle extends android.app.Notification.Style {
+    ctor public Notification.InboxStyle();
+    ctor @Deprecated public Notification.InboxStyle(android.app.Notification.Builder);
+    method public android.app.Notification.InboxStyle addLine(CharSequence);
+    method public android.app.Notification.InboxStyle setBigContentTitle(CharSequence);
+    method public android.app.Notification.InboxStyle setSummaryText(CharSequence);
+  }
+
+  public static class Notification.MediaStyle extends android.app.Notification.Style {
+    ctor public Notification.MediaStyle();
+    ctor @Deprecated public Notification.MediaStyle(android.app.Notification.Builder);
+    method public android.app.Notification.MediaStyle setMediaSession(android.media.session.MediaSession.Token);
+    method public android.app.Notification.MediaStyle setShowActionsInCompactView(int...);
+  }
+
+  public static class Notification.MessagingStyle extends android.app.Notification.Style {
+    ctor @Deprecated public Notification.MessagingStyle(@NonNull CharSequence);
+    ctor public Notification.MessagingStyle(@NonNull android.app.Person);
+    method public android.app.Notification.MessagingStyle addHistoricMessage(android.app.Notification.MessagingStyle.Message);
+    method @Deprecated public android.app.Notification.MessagingStyle addMessage(CharSequence, long, CharSequence);
+    method public android.app.Notification.MessagingStyle addMessage(@NonNull CharSequence, long, @Nullable android.app.Person);
+    method public android.app.Notification.MessagingStyle addMessage(android.app.Notification.MessagingStyle.Message);
+    method @Nullable public CharSequence getConversationTitle();
+    method public java.util.List<android.app.Notification.MessagingStyle.Message> getHistoricMessages();
+    method public java.util.List<android.app.Notification.MessagingStyle.Message> getMessages();
+    method @NonNull public android.app.Person getUser();
+    method @Deprecated public CharSequence getUserDisplayName();
+    method public boolean isGroupConversation();
+    method public android.app.Notification.MessagingStyle setConversationTitle(@Nullable CharSequence);
+    method public android.app.Notification.MessagingStyle setGroupConversation(boolean);
+    field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+  }
+
+  public static final class Notification.MessagingStyle.Message {
+    ctor @Deprecated public Notification.MessagingStyle.Message(CharSequence, long, CharSequence);
+    ctor public Notification.MessagingStyle.Message(@NonNull CharSequence, long, @Nullable android.app.Person);
+    method public String getDataMimeType();
+    method public android.net.Uri getDataUri();
+    method public android.os.Bundle getExtras();
+    method @NonNull public static java.util.List<android.app.Notification.MessagingStyle.Message> getMessagesFromBundleArray(@Nullable android.os.Parcelable[]);
+    method @Deprecated public CharSequence getSender();
+    method @Nullable public android.app.Person getSenderPerson();
+    method public CharSequence getText();
+    method public long getTimestamp();
+    method public android.app.Notification.MessagingStyle.Message setData(String, android.net.Uri);
+  }
+
+  public abstract static class Notification.Style {
+    ctor public Notification.Style();
+    method public android.app.Notification build();
+    method protected void checkBuilder();
+    method protected android.widget.RemoteViews getStandardView(int);
+    method protected void internalSetBigContentTitle(CharSequence);
+    method protected void internalSetSummaryText(CharSequence);
+    method public void setBuilder(android.app.Notification.Builder);
+    field protected android.app.Notification.Builder mBuilder;
+  }
+
+  public static final class Notification.WearableExtender implements android.app.Notification.Extender {
+    ctor public Notification.WearableExtender();
+    ctor public Notification.WearableExtender(android.app.Notification);
+    method public android.app.Notification.WearableExtender addAction(android.app.Notification.Action);
+    method public android.app.Notification.WearableExtender addActions(java.util.List<android.app.Notification.Action>);
+    method @Deprecated public android.app.Notification.WearableExtender addPage(android.app.Notification);
+    method @Deprecated public android.app.Notification.WearableExtender addPages(java.util.List<android.app.Notification>);
+    method public android.app.Notification.WearableExtender clearActions();
+    method @Deprecated public android.app.Notification.WearableExtender clearPages();
+    method public android.app.Notification.WearableExtender clone();
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+    method public java.util.List<android.app.Notification.Action> getActions();
+    method @Deprecated public android.graphics.Bitmap getBackground();
+    method public String getBridgeTag();
+    method public int getContentAction();
+    method @Deprecated public int getContentIcon();
+    method @Deprecated public int getContentIconGravity();
+    method public boolean getContentIntentAvailableOffline();
+    method @Deprecated public int getCustomContentHeight();
+    method @Deprecated public int getCustomSizePreset();
+    method public String getDismissalId();
+    method @Deprecated public android.app.PendingIntent getDisplayIntent();
+    method @Deprecated public int getGravity();
+    method @Deprecated public boolean getHintAmbientBigPicture();
+    method @Deprecated public boolean getHintAvoidBackgroundClipping();
+    method public boolean getHintContentIntentLaunchesActivity();
+    method @Deprecated public boolean getHintHideIcon();
+    method @Deprecated public int getHintScreenTimeout();
+    method @Deprecated public boolean getHintShowBackgroundOnly();
+    method @Deprecated public java.util.List<android.app.Notification> getPages();
+    method public boolean getStartScrollBottom();
+    method @Deprecated public android.app.Notification.WearableExtender setBackground(android.graphics.Bitmap);
+    method public android.app.Notification.WearableExtender setBridgeTag(String);
+    method public android.app.Notification.WearableExtender setContentAction(int);
+    method @Deprecated public android.app.Notification.WearableExtender setContentIcon(int);
+    method @Deprecated public android.app.Notification.WearableExtender setContentIconGravity(int);
+    method public android.app.Notification.WearableExtender setContentIntentAvailableOffline(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setCustomContentHeight(int);
+    method @Deprecated public android.app.Notification.WearableExtender setCustomSizePreset(int);
+    method public android.app.Notification.WearableExtender setDismissalId(String);
+    method @Deprecated public android.app.Notification.WearableExtender setDisplayIntent(android.app.PendingIntent);
+    method @Deprecated public android.app.Notification.WearableExtender setGravity(int);
+    method @Deprecated public android.app.Notification.WearableExtender setHintAmbientBigPicture(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setHintAvoidBackgroundClipping(boolean);
+    method public android.app.Notification.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setHintHideIcon(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setHintScreenTimeout(int);
+    method @Deprecated public android.app.Notification.WearableExtender setHintShowBackgroundOnly(boolean);
+    method public android.app.Notification.WearableExtender setStartScrollBottom(boolean);
+    field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+    field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+    field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+    field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+    field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+    field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+    field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+    field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+  }
+
+  public final class NotificationChannel implements android.os.Parcelable {
+    ctor public NotificationChannel(String, CharSequence, int);
+    method public boolean canBubble();
+    method public boolean canBypassDnd();
+    method public boolean canShowBadge();
+    method public int describeContents();
+    method public void enableLights(boolean);
+    method public void enableVibration(boolean);
+    method public android.media.AudioAttributes getAudioAttributes();
+    method @Nullable public String getConversationId();
+    method public String getDescription();
+    method public String getGroup();
+    method public String getId();
+    method public int getImportance();
+    method public int getLightColor();
+    method public int getLockscreenVisibility();
+    method public CharSequence getName();
+    method @Nullable public String getParentChannelId();
+    method public android.net.Uri getSound();
+    method public long[] getVibrationPattern();
+    method public boolean hasUserSetImportance();
+    method public boolean hasUserSetSound();
+    method public boolean isConversation();
+    method public boolean isDemoted();
+    method public boolean isImportantConversation();
+    method public void setAllowBubbles(boolean);
+    method public void setBypassDnd(boolean);
+    method public void setConversationId(@NonNull String, @NonNull String);
+    method public void setDescription(String);
+    method public void setGroup(String);
+    method public void setImportance(int);
+    method public void setLightColor(int);
+    method public void setLockscreenVisibility(int);
+    method public void setName(CharSequence);
+    method public void setShowBadge(boolean);
+    method public void setSound(android.net.Uri, android.media.AudioAttributes);
+    method public void setVibrationPattern(long[]);
+    method public boolean shouldShowLights();
+    method public boolean shouldVibrate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationChannel> CREATOR;
+    field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
+    field public static final String EDIT_CONVERSATION = "conversation";
+    field public static final String EDIT_IMPORTANCE = "importance";
+    field public static final String EDIT_LAUNCHER = "launcher";
+    field public static final String EDIT_LOCKED_DEVICE = "locked";
+    field public static final String EDIT_SOUND = "sound";
+    field public static final String EDIT_VIBRATION = "vibration";
+    field public static final String EDIT_ZEN = "zen";
+  }
+
+  public final class NotificationChannelGroup implements android.os.Parcelable {
+    ctor public NotificationChannelGroup(String, CharSequence);
+    method public android.app.NotificationChannelGroup clone();
+    method public int describeContents();
+    method public java.util.List<android.app.NotificationChannel> getChannels();
+    method public String getDescription();
+    method public String getId();
+    method public CharSequence getName();
+    method public boolean isBlocked();
+    method public void setDescription(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationChannelGroup> CREATOR;
+  }
+
+  public class NotificationManager {
+    method public String addAutomaticZenRule(android.app.AutomaticZenRule);
+    method @Deprecated public boolean areBubblesAllowed();
+    method public boolean areBubblesEnabled();
+    method public boolean areNotificationsEnabled();
+    method public boolean areNotificationsPaused();
+    method public boolean canNotifyAsPackage(@NonNull String);
+    method public void cancel(int);
+    method public void cancel(@Nullable String, int);
+    method public void cancelAll();
+    method public void cancelAsPackage(@NonNull String, @Nullable String, int);
+    method public void createNotificationChannel(@NonNull android.app.NotificationChannel);
+    method public void createNotificationChannelGroup(@NonNull android.app.NotificationChannelGroup);
+    method public void createNotificationChannelGroups(@NonNull java.util.List<android.app.NotificationChannelGroup>);
+    method public void createNotificationChannels(@NonNull java.util.List<android.app.NotificationChannel>);
+    method public void deleteNotificationChannel(String);
+    method public void deleteNotificationChannelGroup(String);
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications();
+    method public android.app.AutomaticZenRule getAutomaticZenRule(String);
+    method public java.util.Map<java.lang.String,android.app.AutomaticZenRule> getAutomaticZenRules();
+    method public int getBubblePreference();
+    method @NonNull public android.app.NotificationManager.Policy getConsolidatedNotificationPolicy();
+    method public final int getCurrentInterruptionFilter();
+    method public int getImportance();
+    method public android.app.NotificationChannel getNotificationChannel(String);
+    method @Nullable public android.app.NotificationChannel getNotificationChannel(@NonNull String, @NonNull String);
+    method public android.app.NotificationChannelGroup getNotificationChannelGroup(String);
+    method public java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups();
+    method public java.util.List<android.app.NotificationChannel> getNotificationChannels();
+    method @Nullable public String getNotificationDelegate();
+    method public android.app.NotificationManager.Policy getNotificationPolicy();
+    method public boolean isNotificationListenerAccessGranted(android.content.ComponentName);
+    method public boolean isNotificationPolicyAccessGranted();
+    method public void notify(int, android.app.Notification);
+    method public void notify(String, int, android.app.Notification);
+    method public void notifyAsPackage(@NonNull String, @Nullable String, int, @NonNull android.app.Notification);
+    method public boolean removeAutomaticZenRule(String);
+    method public void setAutomaticZenRuleState(@NonNull String, @NonNull android.service.notification.Condition);
+    method public final void setInterruptionFilter(int);
+    method public void setNotificationDelegate(@Nullable String);
+    method public void setNotificationPolicy(@NonNull android.app.NotificationManager.Policy);
+    method public boolean shouldHideSilentStatusBarIcons();
+    method public boolean updateAutomaticZenRule(String, android.app.AutomaticZenRule);
+    field public static final String ACTION_APP_BLOCK_STATE_CHANGED = "android.app.action.APP_BLOCK_STATE_CHANGED";
+    field public static final String ACTION_AUTOMATIC_ZEN_RULE = "android.app.action.AUTOMATIC_ZEN_RULE";
+    field public static final String ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED = "android.app.action.AUTOMATIC_ZEN_RULE_STATUS_CHANGED";
+    field public static final String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED";
+    field public static final String ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED = "android.app.action.NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED";
+    field public static final String ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED = "android.app.action.NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED";
+    field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED = "android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED";
+    field public static final String ACTION_NOTIFICATION_POLICY_CHANGED = "android.app.action.NOTIFICATION_POLICY_CHANGED";
+    field public static final int AUTOMATIC_RULE_STATUS_DISABLED = 2; // 0x2
+    field public static final int AUTOMATIC_RULE_STATUS_ENABLED = 1; // 0x1
+    field public static final int AUTOMATIC_RULE_STATUS_REMOVED = 3; // 0x3
+    field public static final int AUTOMATIC_RULE_STATUS_UNKNOWN = -1; // 0xffffffff
+    field public static final int BUBBLE_PREFERENCE_ALL = 1; // 0x1
+    field public static final int BUBBLE_PREFERENCE_NONE = 0; // 0x0
+    field public static final int BUBBLE_PREFERENCE_SELECTED = 2; // 0x2
+    field public static final String EXTRA_AUTOMATIC_RULE_ID = "android.app.extra.AUTOMATIC_RULE_ID";
+    field public static final String EXTRA_AUTOMATIC_ZEN_RULE_ID = "android.app.extra.AUTOMATIC_ZEN_RULE_ID";
+    field public static final String EXTRA_AUTOMATIC_ZEN_RULE_STATUS = "android.app.extra.AUTOMATIC_ZEN_RULE_STATUS";
+    field public static final String EXTRA_BLOCKED_STATE = "android.app.extra.BLOCKED_STATE";
+    field public static final String EXTRA_NOTIFICATION_CHANNEL_GROUP_ID = "android.app.extra.NOTIFICATION_CHANNEL_GROUP_ID";
+    field public static final String EXTRA_NOTIFICATION_CHANNEL_ID = "android.app.extra.NOTIFICATION_CHANNEL_ID";
+    field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+    field public static final int IMPORTANCE_HIGH = 4; // 0x4
+    field public static final int IMPORTANCE_LOW = 2; // 0x2
+    field public static final int IMPORTANCE_MAX = 5; // 0x5
+    field public static final int IMPORTANCE_MIN = 1; // 0x1
+    field public static final int IMPORTANCE_NONE = 0; // 0x0
+    field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+    field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
+    field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
+    field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
+    field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
+    field public static final String META_DATA_AUTOMATIC_RULE_TYPE = "android.service.zen.automatic.ruleType";
+    field public static final String META_DATA_RULE_INSTANCE_LIMIT = "android.service.zen.automatic.ruleInstanceLimit";
+  }
+
+  public static class NotificationManager.Policy implements android.os.Parcelable {
+    ctor public NotificationManager.Policy(int, int, int);
+    ctor public NotificationManager.Policy(int, int, int, int);
+    ctor public NotificationManager.Policy(int, int, int, int, int);
+    method public int describeContents();
+    method public static String priorityCategoriesToString(int);
+    method public static String prioritySendersToString(int);
+    method public static String suppressedEffectsToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONVERSATION_SENDERS_ANYONE = 1; // 0x1
+    field public static final int CONVERSATION_SENDERS_IMPORTANT = 2; // 0x2
+    field public static final int CONVERSATION_SENDERS_NONE = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationManager.Policy> CREATOR;
+    field public static final int PRIORITY_CATEGORY_ALARMS = 32; // 0x20
+    field public static final int PRIORITY_CATEGORY_CALLS = 8; // 0x8
+    field public static final int PRIORITY_CATEGORY_CONVERSATIONS = 256; // 0x100
+    field public static final int PRIORITY_CATEGORY_EVENTS = 2; // 0x2
+    field public static final int PRIORITY_CATEGORY_MEDIA = 64; // 0x40
+    field public static final int PRIORITY_CATEGORY_MESSAGES = 4; // 0x4
+    field public static final int PRIORITY_CATEGORY_REMINDERS = 1; // 0x1
+    field public static final int PRIORITY_CATEGORY_REPEAT_CALLERS = 16; // 0x10
+    field public static final int PRIORITY_CATEGORY_SYSTEM = 128; // 0x80
+    field public static final int PRIORITY_SENDERS_ANY = 0; // 0x0
+    field public static final int PRIORITY_SENDERS_CONTACTS = 1; // 0x1
+    field public static final int PRIORITY_SENDERS_STARRED = 2; // 0x2
+    field public static final int SUPPRESSED_EFFECT_AMBIENT = 128; // 0x80
+    field public static final int SUPPRESSED_EFFECT_BADGE = 64; // 0x40
+    field public static final int SUPPRESSED_EFFECT_FULL_SCREEN_INTENT = 4; // 0x4
+    field public static final int SUPPRESSED_EFFECT_LIGHTS = 8; // 0x8
+    field public static final int SUPPRESSED_EFFECT_NOTIFICATION_LIST = 256; // 0x100
+    field public static final int SUPPRESSED_EFFECT_PEEK = 16; // 0x10
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_OFF = 1; // 0x1
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_ON = 2; // 0x2
+    field public static final int SUPPRESSED_EFFECT_STATUS_BAR = 32; // 0x20
+    field public final int priorityCallSenders;
+    field public final int priorityCategories;
+    field public final int priorityConversationSenders;
+    field public final int priorityMessageSenders;
+    field public final int suppressedVisualEffects;
+  }
+
+  public final class PendingIntent implements android.os.Parcelable {
+    method public void cancel();
+    method public int describeContents();
+    method public static android.app.PendingIntent getActivities(android.content.Context, int, @NonNull android.content.Intent[], int);
+    method public static android.app.PendingIntent getActivities(android.content.Context, int, @NonNull android.content.Intent[], int, @Nullable android.os.Bundle);
+    method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int);
+    method public static android.app.PendingIntent getActivity(android.content.Context, int, @NonNull android.content.Intent, int, @Nullable android.os.Bundle);
+    method public static android.app.PendingIntent getBroadcast(android.content.Context, int, @NonNull android.content.Intent, int);
+    method @Nullable public String getCreatorPackage();
+    method public int getCreatorUid();
+    method @NonNull public android.os.UserHandle getCreatorUserHandle();
+    method public static android.app.PendingIntent getForegroundService(android.content.Context, int, @NonNull android.content.Intent, int);
+    method @NonNull public android.content.IntentSender getIntentSender();
+    method public static android.app.PendingIntent getService(android.content.Context, int, @NonNull android.content.Intent, int);
+    method @Deprecated @Nullable public String getTargetPackage();
+    method public boolean isActivity();
+    method public boolean isBroadcast();
+    method public boolean isForegroundService();
+    method public boolean isImmutable();
+    method public boolean isService();
+    method @Nullable public static android.app.PendingIntent readPendingIntentOrNullFromParcel(@NonNull android.os.Parcel);
+    method public void send() throws android.app.PendingIntent.CanceledException;
+    method public void send(int) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent) throws android.app.PendingIntent.CanceledException;
+    method public void send(int, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler, @Nullable String) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler, @Nullable String, @Nullable android.os.Bundle) throws android.app.PendingIntent.CanceledException;
+    method public static void writePendingIntentOrNullToParcel(@Nullable android.app.PendingIntent, @NonNull android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.PendingIntent> CREATOR;
+    field public static final int FLAG_CANCEL_CURRENT = 268435456; // 0x10000000
+    field public static final int FLAG_IMMUTABLE = 67108864; // 0x4000000
+    field public static final int FLAG_MUTABLE = 33554432; // 0x2000000
+    field public static final int FLAG_NO_CREATE = 536870912; // 0x20000000
+    field public static final int FLAG_ONE_SHOT = 1073741824; // 0x40000000
+    field public static final int FLAG_UPDATE_CURRENT = 134217728; // 0x8000000
+  }
+
+  public static class PendingIntent.CanceledException extends android.util.AndroidException {
+    ctor public PendingIntent.CanceledException();
+    ctor public PendingIntent.CanceledException(String);
+    ctor public PendingIntent.CanceledException(Exception);
+  }
+
+  public static interface PendingIntent.OnFinished {
+    method public void onSendFinished(android.app.PendingIntent, android.content.Intent, int, String, android.os.Bundle);
+  }
+
+  public final class Person implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @Nullable public String getKey();
+    method @Nullable public CharSequence getName();
+    method @Nullable public String getUri();
+    method public boolean isBot();
+    method public boolean isImportant();
+    method public android.app.Person.Builder toBuilder();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Person> CREATOR;
+  }
+
+  public static class Person.Builder {
+    ctor public Person.Builder();
+    method @NonNull public android.app.Person build();
+    method @NonNull public android.app.Person.Builder setBot(boolean);
+    method @NonNull public android.app.Person.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Person.Builder setImportant(boolean);
+    method @NonNull public android.app.Person.Builder setKey(@Nullable String);
+    method @NonNull public android.app.Person.Builder setName(@Nullable CharSequence);
+    method @NonNull public android.app.Person.Builder setUri(@Nullable String);
+  }
+
+  public final class PictureInPictureParams implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.PictureInPictureParams> CREATOR;
+  }
+
+  public static class PictureInPictureParams.Builder {
+    ctor public PictureInPictureParams.Builder();
+    method public android.app.PictureInPictureParams build();
+    method public android.app.PictureInPictureParams.Builder setActions(java.util.List<android.app.RemoteAction>);
+    method public android.app.PictureInPictureParams.Builder setAspectRatio(android.util.Rational);
+    method @NonNull public android.app.PictureInPictureParams.Builder setAutoEnterEnabled(boolean);
+    method @NonNull public android.app.PictureInPictureParams.Builder setSeamlessResizeEnabled(boolean);
+    method public android.app.PictureInPictureParams.Builder setSourceRectHint(android.graphics.Rect);
+  }
+
+  public final class PictureInPictureUiState implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isStashed();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.PictureInPictureUiState> CREATOR;
+  }
+
+  public class Presentation extends android.app.Dialog {
+    ctor public Presentation(android.content.Context, android.view.Display);
+    ctor public Presentation(android.content.Context, android.view.Display, int);
+    method public android.view.Display getDisplay();
+    method public android.content.res.Resources getResources();
+    method public void onDisplayChanged();
+    method public void onDisplayRemoved();
+  }
+
+  @Deprecated public class ProgressDialog extends android.app.AlertDialog {
+    ctor @Deprecated public ProgressDialog(android.content.Context);
+    ctor @Deprecated public ProgressDialog(android.content.Context, int);
+    method @Deprecated public int getMax();
+    method @Deprecated public int getProgress();
+    method @Deprecated public int getSecondaryProgress();
+    method @Deprecated public void incrementProgressBy(int);
+    method @Deprecated public void incrementSecondaryProgressBy(int);
+    method @Deprecated public boolean isIndeterminate();
+    method @Deprecated public void onStart();
+    method @Deprecated public void setIndeterminate(boolean);
+    method @Deprecated public void setIndeterminateDrawable(android.graphics.drawable.Drawable);
+    method @Deprecated public void setMax(int);
+    method @Deprecated public void setProgress(int);
+    method @Deprecated public void setProgressDrawable(android.graphics.drawable.Drawable);
+    method @Deprecated public void setProgressNumberFormat(String);
+    method @Deprecated public void setProgressPercentFormat(java.text.NumberFormat);
+    method @Deprecated public void setProgressStyle(int);
+    method @Deprecated public void setSecondaryProgress(int);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence, boolean);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence, boolean, boolean);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence, boolean, boolean, android.content.DialogInterface.OnCancelListener);
+    field @Deprecated public static final int STYLE_HORIZONTAL = 1; // 0x1
+    field @Deprecated public static final int STYLE_SPINNER = 0; // 0x0
+  }
+
+  public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable {
+    ctor public RecoverableSecurityException(@NonNull Throwable, @NonNull CharSequence, @NonNull android.app.RemoteAction);
+    method public int describeContents();
+    method @NonNull public android.app.RemoteAction getUserAction();
+    method @NonNull public CharSequence getUserMessage();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RecoverableSecurityException> CREATOR;
+  }
+
+  public final class RemoteAction implements android.os.Parcelable {
+    ctor public RemoteAction(@NonNull android.graphics.drawable.Icon, @NonNull CharSequence, @NonNull CharSequence, @NonNull android.app.PendingIntent);
+    method public android.app.RemoteAction clone();
+    method public int describeContents();
+    method public void dump(String, java.io.PrintWriter);
+    method @NonNull public android.app.PendingIntent getActionIntent();
+    method @NonNull public CharSequence getContentDescription();
+    method @NonNull public android.graphics.drawable.Icon getIcon();
+    method @NonNull public CharSequence getTitle();
+    method public boolean isEnabled();
+    method public void setEnabled(boolean);
+    method public void setShouldShowIcon(boolean);
+    method public boolean shouldShowIcon();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RemoteAction> CREATOR;
+  }
+
+  public final class RemoteInput implements android.os.Parcelable {
+    method public static void addDataResultToIntent(android.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String,android.net.Uri>);
+    method public static void addResultsToIntent(android.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+    method public int describeContents();
+    method public boolean getAllowFreeFormInput();
+    method public java.util.Set<java.lang.String> getAllowedDataTypes();
+    method public CharSequence[] getChoices();
+    method public static java.util.Map<java.lang.String,android.net.Uri> getDataResultsFromIntent(android.content.Intent, String);
+    method public int getEditChoicesBeforeSending();
+    method public android.os.Bundle getExtras();
+    method public CharSequence getLabel();
+    method public String getResultKey();
+    method public static android.os.Bundle getResultsFromIntent(android.content.Intent);
+    method public static int getResultsSource(android.content.Intent);
+    method public boolean isDataOnly();
+    method public static void setResultsSource(android.content.Intent, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RemoteInput> CREATOR;
+    field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+    field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+    field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+    field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+    field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+    field public static final int SOURCE_CHOICE = 1; // 0x1
+    field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+  }
+
+  public static final class RemoteInput.Builder {
+    ctor public RemoteInput.Builder(@NonNull String);
+    method @NonNull public android.app.RemoteInput.Builder addExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.RemoteInput build();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public android.app.RemoteInput.Builder setAllowDataType(@NonNull String, boolean);
+    method @NonNull public android.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+    method @NonNull public android.app.RemoteInput.Builder setChoices(@Nullable CharSequence[]);
+    method @NonNull public android.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
+    method @NonNull public android.app.RemoteInput.Builder setLabel(@Nullable CharSequence);
+  }
+
+  public class SearchManager implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    method public android.content.ComponentName getGlobalSearchActivity();
+    method public android.app.SearchableInfo getSearchableInfo(android.content.ComponentName);
+    method public java.util.List<android.app.SearchableInfo> getSearchablesInGlobalSearch();
+    method @Deprecated public void onCancel(android.content.DialogInterface);
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method public void setOnCancelListener(android.app.SearchManager.OnCancelListener);
+    method public void setOnDismissListener(android.app.SearchManager.OnDismissListener);
+    method public void startSearch(String, boolean, android.content.ComponentName, android.os.Bundle, boolean);
+    method public void stopSearch();
+    method public void triggerSearch(String, android.content.ComponentName, android.os.Bundle);
+    field public static final String ACTION_KEY = "action_key";
+    field public static final String ACTION_MSG = "action_msg";
+    field public static final String APP_DATA = "app_data";
+    field public static final String CURSOR_EXTRA_KEY_IN_PROGRESS = "in_progress";
+    field public static final String EXTRA_DATA_KEY = "intent_extra_data_key";
+    field public static final String EXTRA_NEW_SEARCH = "new_search";
+    field public static final String EXTRA_SELECT_QUERY = "select_query";
+    field public static final String EXTRA_WEB_SEARCH_PENDINGINTENT = "web_search_pendingintent";
+    field public static final int FLAG_QUERY_REFINEMENT = 1; // 0x1
+    field public static final String INTENT_ACTION_GLOBAL_SEARCH = "android.search.action.GLOBAL_SEARCH";
+    field public static final String INTENT_ACTION_SEARCHABLES_CHANGED = "android.search.action.SEARCHABLES_CHANGED";
+    field public static final String INTENT_ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
+    field public static final String INTENT_ACTION_SEARCH_SETTINGS_CHANGED = "android.search.action.SETTINGS_CHANGED";
+    field public static final String INTENT_ACTION_WEB_SEARCH_SETTINGS = "android.search.action.WEB_SEARCH_SETTINGS";
+    field public static final String INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED = "android.search.action.GLOBAL_SEARCH_ACTIVITY_CHANGED";
+    field public static final char MENU_KEY = 115; // 0x0073 's'
+    field public static final int MENU_KEYCODE = 47; // 0x2f
+    field public static final String QUERY = "query";
+    field public static final String SHORTCUT_MIME_TYPE = "vnd.android.cursor.item/vnd.android.search.suggest";
+    field public static final String SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG = "suggest_audio_channel_config";
+    field public static final String SUGGEST_COLUMN_CONTENT_TYPE = "suggest_content_type";
+    field public static final String SUGGEST_COLUMN_DURATION = "suggest_duration";
+    field public static final String SUGGEST_COLUMN_FLAGS = "suggest_flags";
+    field public static final String SUGGEST_COLUMN_FORMAT = "suggest_format";
+    field public static final String SUGGEST_COLUMN_ICON_1 = "suggest_icon_1";
+    field public static final String SUGGEST_COLUMN_ICON_2 = "suggest_icon_2";
+    field public static final String SUGGEST_COLUMN_INTENT_ACTION = "suggest_intent_action";
+    field public static final String SUGGEST_COLUMN_INTENT_DATA = "suggest_intent_data";
+    field public static final String SUGGEST_COLUMN_INTENT_DATA_ID = "suggest_intent_data_id";
+    field public static final String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data";
+    field public static final String SUGGEST_COLUMN_IS_LIVE = "suggest_is_live";
+    field public static final String SUGGEST_COLUMN_LAST_ACCESS_HINT = "suggest_last_access_hint";
+    field public static final String SUGGEST_COLUMN_PRODUCTION_YEAR = "suggest_production_year";
+    field public static final String SUGGEST_COLUMN_PURCHASE_PRICE = "suggest_purchase_price";
+    field public static final String SUGGEST_COLUMN_QUERY = "suggest_intent_query";
+    field public static final String SUGGEST_COLUMN_RATING_SCORE = "suggest_rating_score";
+    field public static final String SUGGEST_COLUMN_RATING_STYLE = "suggest_rating_style";
+    field public static final String SUGGEST_COLUMN_RENTAL_PRICE = "suggest_rental_price";
+    field public static final String SUGGEST_COLUMN_RESULT_CARD_IMAGE = "suggest_result_card_image";
+    field public static final String SUGGEST_COLUMN_SHORTCUT_ID = "suggest_shortcut_id";
+    field public static final String SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING = "suggest_spinner_while_refreshing";
+    field public static final String SUGGEST_COLUMN_TEXT_1 = "suggest_text_1";
+    field public static final String SUGGEST_COLUMN_TEXT_2 = "suggest_text_2";
+    field public static final String SUGGEST_COLUMN_TEXT_2_URL = "suggest_text_2_url";
+    field public static final String SUGGEST_COLUMN_VIDEO_HEIGHT = "suggest_video_height";
+    field public static final String SUGGEST_COLUMN_VIDEO_WIDTH = "suggest_video_width";
+    field public static final String SUGGEST_MIME_TYPE = "vnd.android.cursor.dir/vnd.android.search.suggest";
+    field public static final String SUGGEST_NEVER_MAKE_SHORTCUT = "_-1";
+    field public static final String SUGGEST_PARAMETER_LIMIT = "limit";
+    field public static final String SUGGEST_URI_PATH_QUERY = "search_suggest_query";
+    field public static final String SUGGEST_URI_PATH_SHORTCUT = "search_suggest_shortcut";
+    field public static final String USER_QUERY = "user_query";
+  }
+
+  public static interface SearchManager.OnCancelListener {
+    method public void onCancel();
+  }
+
+  public static interface SearchManager.OnDismissListener {
+    method public void onDismiss();
+  }
+
+  public final class SearchableInfo implements android.os.Parcelable {
+    method public boolean autoUrlDetect();
+    method public int describeContents();
+    method public int getHintId();
+    method public int getImeOptions();
+    method public int getInputType();
+    method public android.content.ComponentName getSearchActivity();
+    method public int getSettingsDescriptionId();
+    method public String getSuggestAuthority();
+    method public String getSuggestIntentAction();
+    method public String getSuggestIntentData();
+    method public String getSuggestPackage();
+    method public String getSuggestPath();
+    method public String getSuggestSelection();
+    method public int getSuggestThreshold();
+    method @StringRes public int getVoiceLanguageId();
+    method @StringRes public int getVoiceLanguageModeId();
+    method public int getVoiceMaxResults();
+    method @StringRes public int getVoicePromptTextId();
+    method public boolean getVoiceSearchEnabled();
+    method public boolean getVoiceSearchLaunchRecognizer();
+    method public boolean getVoiceSearchLaunchWebSearch();
+    method public boolean queryAfterZeroResults();
+    method public boolean shouldIncludeInGlobalSearch();
+    method public boolean shouldRewriteQueryFromData();
+    method public boolean shouldRewriteQueryFromText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.SearchableInfo> CREATOR;
+  }
+
+  public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
+    ctor public Service();
+    method protected void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public final android.app.Application getApplication();
+    method public final int getForegroundServiceType();
+    method @Nullable public abstract android.os.IBinder onBind(android.content.Intent);
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onCreate();
+    method public void onDestroy();
+    method public void onLowMemory();
+    method public void onRebind(android.content.Intent);
+    method @Deprecated public void onStart(android.content.Intent, int);
+    method public int onStartCommand(android.content.Intent, int, int);
+    method public void onTaskRemoved(android.content.Intent);
+    method public void onTrimMemory(int);
+    method public boolean onUnbind(android.content.Intent);
+    method public final void startForeground(int, android.app.Notification);
+    method public final void startForeground(int, @NonNull android.app.Notification, int);
+    method public final void stopForeground(boolean);
+    method public final void stopForeground(int);
+    method public final void stopSelf();
+    method public final void stopSelf(int);
+    method public final boolean stopSelfResult(int);
+    field public static final int START_CONTINUATION_MASK = 15; // 0xf
+    field public static final int START_FLAG_REDELIVERY = 1; // 0x1
+    field public static final int START_FLAG_RETRY = 2; // 0x2
+    field public static final int START_NOT_STICKY = 2; // 0x2
+    field public static final int START_REDELIVER_INTENT = 3; // 0x3
+    field public static final int START_STICKY = 1; // 0x1
+    field public static final int START_STICKY_COMPATIBILITY = 0; // 0x0
+    field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+    field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+  }
+
+  public abstract class ServiceStartNotAllowedException extends java.lang.IllegalStateException {
+  }
+
+  public abstract class SharedElementCallback {
+    ctor public SharedElementCallback();
+    method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF);
+    method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable);
+    method public void onMapSharedElements(java.util.List<java.lang.String>, java.util.Map<java.lang.String,android.view.View>);
+    method public void onRejectSharedElements(java.util.List<android.view.View>);
+    method public void onSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+    method public void onSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+    method public void onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.app.SharedElementCallback.OnSharedElementsReadyListener);
+  }
+
+  public static interface SharedElementCallback.OnSharedElementsReadyListener {
+    method public void onSharedElementsReady();
+  }
+
+  public class StatusBarManager {
+  }
+
+  public final class SyncNotedAppOp implements android.os.Parcelable {
+    ctor public SyncNotedAppOp(@IntRange(from=0L) int, @Nullable String);
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @NonNull public String getOp();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.SyncNotedAppOp> CREATOR;
+  }
+
+  @Deprecated public class TabActivity extends android.app.ActivityGroup {
+    ctor @Deprecated public TabActivity();
+    method @Deprecated public android.widget.TabHost getTabHost();
+    method @Deprecated public android.widget.TabWidget getTabWidget();
+    method @Deprecated public void setDefaultTab(String);
+    method @Deprecated public void setDefaultTab(int);
+  }
+
+  public class TaskInfo {
+    method public boolean isVisible();
+    field @Nullable public android.content.ComponentName baseActivity;
+    field @NonNull public android.content.Intent baseIntent;
+    field public boolean isRunning;
+    field public int numActivities;
+    field @Nullable public android.content.ComponentName origActivity;
+    field @Nullable public android.app.ActivityManager.TaskDescription taskDescription;
+    field public int taskId;
+    field @Nullable public android.content.ComponentName topActivity;
+  }
+
+  public class TaskStackBuilder {
+    method public android.app.TaskStackBuilder addNextIntent(android.content.Intent);
+    method public android.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+    method public android.app.TaskStackBuilder addParentStack(android.app.Activity);
+    method public android.app.TaskStackBuilder addParentStack(Class<?>);
+    method public android.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+    method public static android.app.TaskStackBuilder create(android.content.Context);
+    method public android.content.Intent editIntentAt(int);
+    method public int getIntentCount();
+    method @NonNull public android.content.Intent[] getIntents();
+    method public android.app.PendingIntent getPendingIntent(int, int);
+    method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle);
+    method public void startActivities();
+    method public void startActivities(android.os.Bundle);
+  }
+
+  public class TimePickerDialog extends android.app.AlertDialog implements android.content.DialogInterface.OnClickListener android.widget.TimePicker.OnTimeChangedListener {
+    ctor public TimePickerDialog(android.content.Context, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean);
+    ctor public TimePickerDialog(android.content.Context, int, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean);
+    method public void onClick(android.content.DialogInterface, int);
+    method public void onTimeChanged(android.widget.TimePicker, int, int);
+    method public void updateTime(int, int);
+  }
+
+  public static interface TimePickerDialog.OnTimeSetListener {
+    method public void onTimeSet(android.widget.TimePicker, int, int);
+  }
+
+  public final class UiAutomation {
+    method public void adoptShellPermissionIdentity();
+    method public void adoptShellPermissionIdentity(@Nullable java.lang.String...);
+    method public void clearWindowAnimationFrameStats();
+    method public boolean clearWindowContentFrameStats(int);
+    method public void dropShellPermissionIdentity();
+    method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;
+    method public android.os.ParcelFileDescriptor executeShellCommand(String);
+    method @NonNull public android.os.ParcelFileDescriptor[] executeShellCommandRw(@NonNull String);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
+    method public android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
+    method public android.view.WindowAnimationFrameStats getWindowAnimationFrameStats();
+    method public android.view.WindowContentFrameStats getWindowContentFrameStats(int);
+    method public java.util.List<android.view.accessibility.AccessibilityWindowInfo> getWindows();
+    method @NonNull public android.util.SparseArray<java.util.List<android.view.accessibility.AccessibilityWindowInfo>> getWindowsOnAllDisplays();
+    method public void grantRuntimePermission(String, String);
+    method public void grantRuntimePermissionAsUser(String, String, android.os.UserHandle);
+    method public boolean injectInputEvent(android.view.InputEvent, boolean);
+    method public boolean performGlobalAction(int);
+    method public void revokeRuntimePermission(String, String);
+    method public void revokeRuntimePermissionAsUser(String, String, android.os.UserHandle);
+    method public void setOnAccessibilityEventListener(android.app.UiAutomation.OnAccessibilityEventListener);
+    method public boolean setRotation(int);
+    method public void setRunAsMonkey(boolean);
+    method public void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo);
+    method public android.graphics.Bitmap takeScreenshot();
+    method public void waitForIdle(long, long) throws java.util.concurrent.TimeoutException;
+    field public static final int FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES = 1; // 0x1
+    field public static final int FLAG_DONT_USE_ACCESSIBILITY = 2; // 0x2
+    field public static final int ROTATION_FREEZE_0 = 0; // 0x0
+    field public static final int ROTATION_FREEZE_180 = 2; // 0x2
+    field public static final int ROTATION_FREEZE_270 = 3; // 0x3
+    field public static final int ROTATION_FREEZE_90 = 1; // 0x1
+    field public static final int ROTATION_FREEZE_CURRENT = -1; // 0xffffffff
+    field public static final int ROTATION_UNFREEZE = -2; // 0xfffffffe
+  }
+
+  public static interface UiAutomation.AccessibilityEventFilter {
+    method public boolean accept(android.view.accessibility.AccessibilityEvent);
+  }
+
+  public static interface UiAutomation.OnAccessibilityEventListener {
+    method public void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+  }
+
+  public class UiModeManager {
+    method public void disableCarMode(int);
+    method public void enableCarMode(int);
+    method public int getCurrentModeType();
+    method @NonNull public java.time.LocalTime getCustomNightModeEnd();
+    method @NonNull public java.time.LocalTime getCustomNightModeStart();
+    method public int getNightMode();
+    method public void setApplicationNightMode(int);
+    method public void setCustomNightModeEnd(@NonNull java.time.LocalTime);
+    method public void setCustomNightModeStart(@NonNull java.time.LocalTime);
+    method public void setNightMode(int);
+    field public static String ACTION_ENTER_CAR_MODE;
+    field public static String ACTION_ENTER_DESK_MODE;
+    field public static String ACTION_EXIT_CAR_MODE;
+    field public static String ACTION_EXIT_DESK_MODE;
+    field public static final int DISABLE_CAR_MODE_GO_HOME = 1; // 0x1
+    field public static final int ENABLE_CAR_MODE_ALLOW_SLEEP = 2; // 0x2
+    field public static final int ENABLE_CAR_MODE_GO_CAR_HOME = 1; // 0x1
+    field public static final int MODE_NIGHT_AUTO = 0; // 0x0
+    field public static final int MODE_NIGHT_CUSTOM = 3; // 0x3
+    field public static final int MODE_NIGHT_NO = 1; // 0x1
+    field public static final int MODE_NIGHT_YES = 2; // 0x2
+  }
+
+  public final class VoiceInteractor {
+    method public android.app.VoiceInteractor.Request getActiveRequest(String);
+    method public android.app.VoiceInteractor.Request[] getActiveRequests();
+    method public boolean isDestroyed();
+    method public void notifyDirectActionsChanged();
+    method public boolean registerOnDestroyedCallback(@NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method public boolean submitRequest(android.app.VoiceInteractor.Request);
+    method public boolean submitRequest(android.app.VoiceInteractor.Request, String);
+    method public boolean[] supportsCommands(String[]);
+    method public boolean unregisterOnDestroyedCallback(@NonNull Runnable);
+  }
+
+  public static class VoiceInteractor.AbortVoiceRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.AbortVoiceRequest(@Nullable android.app.VoiceInteractor.Prompt, @Nullable android.os.Bundle);
+    method public void onAbortResult(android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.CommandRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.CommandRequest(String, android.os.Bundle);
+    method public void onCommandResult(boolean, android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.CompleteVoiceRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.CompleteVoiceRequest(@Nullable android.app.VoiceInteractor.Prompt, @Nullable android.os.Bundle);
+    method public void onCompleteResult(android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.ConfirmationRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.ConfirmationRequest(@Nullable android.app.VoiceInteractor.Prompt, @Nullable android.os.Bundle);
+    method public void onConfirmationResult(boolean, android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.PickOptionRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.PickOptionRequest(@Nullable android.app.VoiceInteractor.Prompt, android.app.VoiceInteractor.PickOptionRequest.Option[], @Nullable android.os.Bundle);
+    method public void onPickOptionResult(boolean, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
+  }
+
+  public static final class VoiceInteractor.PickOptionRequest.Option implements android.os.Parcelable {
+    ctor public VoiceInteractor.PickOptionRequest.Option(CharSequence, int);
+    method public android.app.VoiceInteractor.PickOptionRequest.Option addSynonym(CharSequence);
+    method public int countSynonyms();
+    method public int describeContents();
+    method public android.os.Bundle getExtras();
+    method public int getIndex();
+    method public CharSequence getLabel();
+    method public CharSequence getSynonymAt(int);
+    method public void setExtras(android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.VoiceInteractor.PickOptionRequest.Option> CREATOR;
+  }
+
+  public static class VoiceInteractor.Prompt implements android.os.Parcelable {
+    ctor public VoiceInteractor.Prompt(@NonNull CharSequence[], @NonNull CharSequence);
+    ctor public VoiceInteractor.Prompt(@NonNull CharSequence);
+    method public int countVoicePrompts();
+    method public int describeContents();
+    method @NonNull public CharSequence getVisualPrompt();
+    method @NonNull public CharSequence getVoicePromptAt(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.VoiceInteractor.Prompt> CREATOR;
+  }
+
+  public abstract static class VoiceInteractor.Request {
+    method public void cancel();
+    method public android.app.Activity getActivity();
+    method public android.content.Context getContext();
+    method public String getName();
+    method public void onAttached(android.app.Activity);
+    method public void onCancel();
+    method public void onDetached();
+  }
+
+  public final class WallpaperColors implements android.os.Parcelable {
+    ctor public WallpaperColors(android.os.Parcel);
+    ctor public WallpaperColors(@NonNull android.graphics.Color, @Nullable android.graphics.Color, @Nullable android.graphics.Color);
+    ctor public WallpaperColors(@NonNull android.graphics.Color, @Nullable android.graphics.Color, @Nullable android.graphics.Color, int);
+    method public int describeContents();
+    method public static android.app.WallpaperColors fromBitmap(@NonNull android.graphics.Bitmap);
+    method public static android.app.WallpaperColors fromDrawable(android.graphics.drawable.Drawable);
+    method public int getColorHints();
+    method @NonNull public android.graphics.Color getPrimaryColor();
+    method @Nullable public android.graphics.Color getSecondaryColor();
+    method @Nullable public android.graphics.Color getTertiaryColor();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;
+    field public static final int HINT_SUPPORTS_DARK_TEXT = 1; // 0x1
+    field public static final int HINT_SUPPORTS_DARK_THEME = 2; // 0x2
+  }
+
+  public final class WallpaperInfo implements android.os.Parcelable {
+    ctor public WallpaperInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public android.content.ComponentName getComponent();
+    method public String getPackageName();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public String getServiceName();
+    method public String getSettingsActivity();
+    method @Nullable public android.net.Uri getSettingsSliceUri();
+    method public boolean getShowMetadataInPreview();
+    method public CharSequence loadAuthor(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public CharSequence loadContextDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public android.net.Uri loadContextUri(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadThumbnail(android.content.pm.PackageManager);
+    method public boolean shouldUseDefaultUnfoldTransition();
+    method public boolean supportsMultipleDisplays();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperInfo> CREATOR;
+  }
+
+  public class WallpaperManager {
+    method public void addOnColorsChangedListener(@NonNull android.app.WallpaperManager.OnColorsChangedListener, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clear() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clear(int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clearWallpaper();
+    method public void clearWallpaperOffsets(android.os.IBinder);
+    method public void forgetLoadedWallpaper();
+    method public android.graphics.drawable.Drawable getBuiltInDrawable();
+    method public android.graphics.drawable.Drawable getBuiltInDrawable(int);
+    method public android.graphics.drawable.Drawable getBuiltInDrawable(int, int, boolean, float, float);
+    method public android.graphics.drawable.Drawable getBuiltInDrawable(int, int, boolean, float, float, int);
+    method public android.content.Intent getCropAndSetWallpaperIntent(android.net.Uri);
+    method public int getDesiredMinimumHeight();
+    method public int getDesiredMinimumWidth();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.graphics.drawable.Drawable getDrawable();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.graphics.drawable.Drawable getFastDrawable();
+    method public static android.app.WallpaperManager getInstance(android.content.Context);
+    method @Nullable public android.app.WallpaperColors getWallpaperColors(int);
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.os.ParcelFileDescriptor getWallpaperFile(int);
+    method public int getWallpaperId(int);
+    method public android.app.WallpaperInfo getWallpaperInfo();
+    method public boolean hasResourceWallpaper(@RawRes int);
+    method public boolean isSetWallpaperAllowed();
+    method public boolean isWallpaperSupported();
+    method public android.graphics.drawable.Drawable peekDrawable();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.graphics.drawable.Drawable peekFastDrawable();
+    method public void removeOnColorsChangedListener(@NonNull android.app.WallpaperManager.OnColorsChangedListener);
+    method public void sendWallpaperCommand(android.os.IBinder, String, int, int, int, android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void setBitmap(android.graphics.Bitmap) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean, int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_HINTS) public void setDisplayPadding(android.graphics.Rect);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void setResource(@RawRes int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setResource(@RawRes int, int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void setStream(java.io.InputStream) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStream(java.io.InputStream, android.graphics.Rect, boolean, int) throws java.io.IOException;
+    method public void setWallpaperOffsetSteps(float, float);
+    method public void setWallpaperOffsets(android.os.IBinder, float, float);
+    method public void suggestDesiredDimensions(int, int);
+    field public static final String ACTION_CHANGE_LIVE_WALLPAPER = "android.service.wallpaper.CHANGE_LIVE_WALLPAPER";
+    field public static final String ACTION_CROP_AND_SET_WALLPAPER = "android.service.wallpaper.CROP_AND_SET_WALLPAPER";
+    field public static final String ACTION_LIVE_WALLPAPER_CHOOSER = "android.service.wallpaper.LIVE_WALLPAPER_CHOOSER";
+    field public static final String COMMAND_DROP = "android.home.drop";
+    field public static final String COMMAND_SECONDARY_TAP = "android.wallpaper.secondaryTap";
+    field public static final String COMMAND_TAP = "android.wallpaper.tap";
+    field public static final String EXTRA_LIVE_WALLPAPER_COMPONENT = "android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT";
+    field public static final int FLAG_LOCK = 2; // 0x2
+    field public static final int FLAG_SYSTEM = 1; // 0x1
+    field public static final String WALLPAPER_PREVIEW_META_DATA = "android.wallpaper.preview";
+  }
+
+  public static interface WallpaperManager.OnColorsChangedListener {
+    method public void onColorsChanged(android.app.WallpaperColors, int);
+  }
+
+  public interface ZygotePreload {
+    method public void doPreload(@NonNull android.content.pm.ApplicationInfo);
+  }
+
+}
+
+package android.app.admin {
+
+  public final class ConnectEvent extends android.app.admin.NetworkEvent implements android.os.Parcelable {
+    method public java.net.InetAddress getInetAddress();
+    method public int getPort();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.ConnectEvent> CREATOR;
+  }
+
+  public class DelegatedAdminReceiver extends android.content.BroadcastReceiver {
+    ctor public DelegatedAdminReceiver();
+    method @Nullable public String onChoosePrivateKeyAlias(@NonNull android.content.Context, @NonNull android.content.Intent, int, @Nullable android.net.Uri, @Nullable String);
+    method public void onNetworkLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent, long, @IntRange(from=1) int);
+    method public final void onReceive(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onSecurityLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent);
+  }
+
+  public final class DeviceAdminInfo implements android.os.Parcelable {
+    ctor public DeviceAdminInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public android.content.pm.ActivityInfo getActivityInfo();
+    method @NonNull public android.content.ComponentName getComponent();
+    method public String getPackageName();
+    method public String getReceiverName();
+    method public String getTagForPolicy(int);
+    method public boolean isVisible();
+    method public CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public boolean supportsTransferOwnership();
+    method public boolean usesPolicy(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.DeviceAdminInfo> CREATOR;
+    field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7
+    field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8
+    field public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; // 0x9
+    field public static final int USES_POLICY_EXPIRE_PASSWORD = 6; // 0x6
+    field public static final int USES_POLICY_FORCE_LOCK = 3; // 0x3
+    field public static final int USES_POLICY_LIMIT_PASSWORD = 0; // 0x0
+    field public static final int USES_POLICY_RESET_PASSWORD = 2; // 0x2
+    field public static final int USES_POLICY_WATCH_LOGIN = 1; // 0x1
+    field public static final int USES_POLICY_WIPE_DATA = 4; // 0x4
+  }
+
+  public class DeviceAdminReceiver extends android.content.BroadcastReceiver {
+    ctor public DeviceAdminReceiver();
+    method @NonNull public android.app.admin.DevicePolicyManager getManager(@NonNull android.content.Context);
+    method @NonNull public android.content.ComponentName getWho(@NonNull android.content.Context);
+    method public void onBugreportFailed(@NonNull android.content.Context, @NonNull android.content.Intent, int);
+    method public void onBugreportShared(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull String);
+    method public void onBugreportSharingDeclined(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method @Nullable public String onChoosePrivateKeyAlias(@NonNull android.content.Context, @NonNull android.content.Intent, int, @Nullable android.net.Uri, @Nullable String);
+    method public void onComplianceAcknowledgementRequired(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method @Nullable public CharSequence onDisableRequested(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onDisabled(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onEnabled(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onLockTaskModeEntering(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull String);
+    method public void onLockTaskModeExiting(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onNetworkLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent, long, @IntRange(from=1) int);
+    method public void onOperationSafetyStateChanged(@NonNull android.content.Context, int, boolean);
+    method @Deprecated public void onPasswordChanged(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordChanged(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method @Deprecated public void onPasswordExpiring(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordExpiring(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method @Deprecated public void onPasswordFailed(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordFailed(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method @Deprecated public void onPasswordSucceeded(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordSucceeded(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onProfileProvisioningComplete(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method @Deprecated public void onReadyForUserInitialization(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onReceive(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onSecurityLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onSystemUpdatePending(@NonNull android.content.Context, @NonNull android.content.Intent, long);
+    method public void onTransferAffiliatedProfileOwnershipComplete(@NonNull android.content.Context, @NonNull android.os.UserHandle);
+    method public void onTransferOwnershipComplete(@NonNull android.content.Context, @Nullable android.os.PersistableBundle);
+    method public void onUserAdded(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserRemoved(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserStarted(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserStopped(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserSwitched(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    field public static final String ACTION_CHOOSE_PRIVATE_KEY_ALIAS = "android.app.action.CHOOSE_PRIVATE_KEY_ALIAS";
+    field public static final String ACTION_DEVICE_ADMIN_DISABLED = "android.app.action.DEVICE_ADMIN_DISABLED";
+    field public static final String ACTION_DEVICE_ADMIN_DISABLE_REQUESTED = "android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED";
+    field public static final String ACTION_DEVICE_ADMIN_ENABLED = "android.app.action.DEVICE_ADMIN_ENABLED";
+    field public static final String ACTION_LOCK_TASK_ENTERING = "android.app.action.LOCK_TASK_ENTERING";
+    field public static final String ACTION_LOCK_TASK_EXITING = "android.app.action.LOCK_TASK_EXITING";
+    field public static final String ACTION_NETWORK_LOGS_AVAILABLE = "android.app.action.NETWORK_LOGS_AVAILABLE";
+    field public static final String ACTION_PASSWORD_CHANGED = "android.app.action.ACTION_PASSWORD_CHANGED";
+    field public static final String ACTION_PASSWORD_EXPIRING = "android.app.action.ACTION_PASSWORD_EXPIRING";
+    field public static final String ACTION_PASSWORD_FAILED = "android.app.action.ACTION_PASSWORD_FAILED";
+    field public static final String ACTION_PASSWORD_SUCCEEDED = "android.app.action.ACTION_PASSWORD_SUCCEEDED";
+    field public static final String ACTION_PROFILE_PROVISIONING_COMPLETE = "android.app.action.PROFILE_PROVISIONING_COMPLETE";
+    field public static final String ACTION_SECURITY_LOGS_AVAILABLE = "android.app.action.SECURITY_LOGS_AVAILABLE";
+    field public static final int BUGREPORT_FAILURE_FAILED_COMPLETING = 0; // 0x0
+    field public static final int BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE = 1; // 0x1
+    field public static final String DEVICE_ADMIN_META_DATA = "android.app.device_admin";
+    field public static final String EXTRA_DISABLE_WARNING = "android.app.extra.DISABLE_WARNING";
+    field public static final String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE";
+    field public static final String EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE = "android.app.extra.TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE";
+  }
+
+  public class DeviceAdminService extends android.app.Service {
+    ctor public DeviceAdminService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+  }
+
+  public class DevicePolicyManager {
+    method public void acknowledgeDeviceCompliant();
+    method public void addCrossProfileIntentFilter(@NonNull android.content.ComponentName, android.content.IntentFilter, int);
+    method public boolean addCrossProfileWidgetProvider(@NonNull android.content.ComponentName, String);
+    method public int addOverrideApn(@NonNull android.content.ComponentName, @NonNull android.telephony.data.ApnSetting);
+    method public void addPersistentPreferredActivity(@NonNull android.content.ComponentName, android.content.IntentFilter, @NonNull android.content.ComponentName);
+    method public void addUserRestriction(@NonNull android.content.ComponentName, String);
+    method public boolean bindDeviceAdminServiceAsUser(@NonNull android.content.ComponentName, android.content.Intent, @NonNull android.content.ServiceConnection, int, @NonNull android.os.UserHandle);
+    method public boolean canAdminGrantSensorsPermissions();
+    method public boolean canUsbDataSignalingBeDisabled();
+    method public void clearApplicationUserData(@NonNull android.content.ComponentName, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.app.admin.DevicePolicyManager.OnClearApplicationUserDataListener);
+    method public void clearCrossProfileIntentFilters(@NonNull android.content.ComponentName);
+    method @Deprecated public void clearDeviceOwnerApp(String);
+    method public void clearPackagePersistentPreferredActivities(@NonNull android.content.ComponentName, String);
+    method @Deprecated public void clearProfileOwner(@NonNull android.content.ComponentName);
+    method public boolean clearResetPasswordToken(android.content.ComponentName);
+    method public void clearUserRestriction(@NonNull android.content.ComponentName, String);
+    method public android.content.Intent createAdminSupportIntent(@NonNull String);
+    method @Nullable public android.os.UserHandle createAndManageUser(@NonNull android.content.ComponentName, @NonNull String, @NonNull android.content.ComponentName, @Nullable android.os.PersistableBundle, int);
+    method public void enableSystemApp(@NonNull android.content.ComponentName, String);
+    method public int enableSystemApp(@NonNull android.content.ComponentName, android.content.Intent);
+    method public android.security.AttestedKeyPair generateKeyPair(@Nullable android.content.ComponentName, @NonNull String, @NonNull android.security.keystore.KeyGenParameterSpec, int);
+    method @Nullable public String[] getAccountTypesWithManagementDisabled();
+    method @Nullable public java.util.List<android.content.ComponentName> getActiveAdmins();
+    method @NonNull public java.util.Set<java.lang.String> getAffiliationIds(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.Set<java.lang.String> getAlwaysOnVpnLockdownWhitelist(@NonNull android.content.ComponentName);
+    method @Nullable public String getAlwaysOnVpnPackage(@NonNull android.content.ComponentName);
+    method @NonNull @WorkerThread public android.os.Bundle getApplicationRestrictions(@Nullable android.content.ComponentName, String);
+    method @Deprecated @Nullable public String getApplicationRestrictionsManagingPackage(@NonNull android.content.ComponentName);
+    method public boolean getAutoTimeEnabled(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean getAutoTimeRequired();
+    method public boolean getAutoTimeZoneEnabled(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<android.os.UserHandle> getBindDeviceAdminTargetUsers(@NonNull android.content.ComponentName);
+    method public boolean getBluetoothContactSharingDisabled(@NonNull android.content.ComponentName);
+    method public boolean getCameraDisabled(@Nullable android.content.ComponentName);
+    method @Deprecated @Nullable public String getCertInstallerPackage(@NonNull android.content.ComponentName) throws java.lang.SecurityException;
+    method @Nullable public java.util.Set<java.lang.String> getCrossProfileCalendarPackages(@NonNull android.content.ComponentName);
+    method public boolean getCrossProfileCallerIdDisabled(@NonNull android.content.ComponentName);
+    method public boolean getCrossProfileContactsSearchDisabled(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.Set<java.lang.String> getCrossProfilePackages(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<java.lang.String> getCrossProfileWidgetProviders(@NonNull android.content.ComponentName);
+    method public int getCurrentFailedPasswordAttempts();
+    method @Nullable public java.util.List<java.lang.String> getDelegatePackages(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getDelegatedScopes(@Nullable android.content.ComponentName, @NonNull String);
+    method public CharSequence getDeviceOwnerLockScreenInfo();
+    method public CharSequence getEndUserSessionMessage(@NonNull android.content.ComponentName);
+    method @NonNull public String getEnrollmentSpecificId();
+    method @Nullable public android.app.admin.FactoryResetProtectionPolicy getFactoryResetProtectionPolicy(@Nullable android.content.ComponentName);
+    method @Nullable public String getGlobalPrivateDnsHost(@NonNull android.content.ComponentName);
+    method public int getGlobalPrivateDnsMode(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<byte[]> getInstalledCaCerts(@Nullable android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getKeepUninstalledPackages(@Nullable android.content.ComponentName);
+    method @NonNull public java.util.Map<java.lang.Integer,java.util.Set<java.lang.String>> getKeyPairGrants(@NonNull String);
+    method public int getKeyguardDisabledFeatures(@Nullable android.content.ComponentName);
+    method public int getLockTaskFeatures(@NonNull android.content.ComponentName);
+    method @NonNull public String[] getLockTaskPackages(@NonNull android.content.ComponentName);
+    method @Nullable public CharSequence getLongSupportMessage(@NonNull android.content.ComponentName);
+    method public long getManagedProfileMaximumTimeOff(@NonNull android.content.ComponentName);
+    method public int getMaximumFailedPasswordsForWipe(@Nullable android.content.ComponentName);
+    method public long getMaximumTimeToLock(@Nullable android.content.ComponentName);
+    method @NonNull public java.util.List<java.lang.String> getMeteredDataDisabledPackages(@NonNull android.content.ComponentName);
+    method public int getNearbyAppStreamingPolicy();
+    method public int getNearbyNotificationStreamingPolicy();
+    method @Deprecated @ColorInt public int getOrganizationColor(@NonNull android.content.ComponentName);
+    method @Nullable public CharSequence getOrganizationName(@NonNull android.content.ComponentName);
+    method public java.util.List<android.telephony.data.ApnSetting> getOverrideApns(@NonNull android.content.ComponentName);
+    method @NonNull public android.app.admin.DevicePolicyManager getParentProfileInstance(@NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.REQUEST_PASSWORD_COMPLEXITY) public int getPasswordComplexity();
+    method public long getPasswordExpiration(@Nullable android.content.ComponentName);
+    method public long getPasswordExpirationTimeout(@Nullable android.content.ComponentName);
+    method public int getPasswordHistoryLength(@Nullable android.content.ComponentName);
+    method public int getPasswordMaximumLength(int);
+    method @Deprecated public int getPasswordMinimumLength(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumLetters(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumLowerCase(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumNonLetter(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumNumeric(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumSymbols(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumUpperCase(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordQuality(@Nullable android.content.ComponentName);
+    method @Nullable public android.app.admin.SystemUpdateInfo getPendingSystemUpdate(@NonNull android.content.ComponentName);
+    method public int getPermissionGrantState(@Nullable android.content.ComponentName, @NonNull String, @NonNull String);
+    method public int getPermissionPolicy(android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getPermittedAccessibilityServices(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getPermittedCrossProfileNotificationListeners(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getPermittedInputMethods(@NonNull android.content.ComponentName);
+    method public int getPersonalAppsSuspendedReasons(@NonNull android.content.ComponentName);
+    method public int getRequiredPasswordComplexity();
+    method public long getRequiredStrongAuthTimeout(@Nullable android.content.ComponentName);
+    method public boolean getScreenCaptureDisabled(@Nullable android.content.ComponentName);
+    method public java.util.List<android.os.UserHandle> getSecondaryUsers(@NonNull android.content.ComponentName);
+    method public CharSequence getShortSupportMessage(@NonNull android.content.ComponentName);
+    method public CharSequence getStartUserSessionMessage(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean getStorageEncryption(@Nullable android.content.ComponentName);
+    method public int getStorageEncryptionStatus();
+    method @Nullable public android.app.admin.SystemUpdatePolicy getSystemUpdatePolicy();
+    method @Nullable public android.os.PersistableBundle getTransferOwnershipBundle();
+    method @Nullable public java.util.List<android.os.PersistableBundle> getTrustAgentConfiguration(@Nullable android.content.ComponentName, @NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<java.lang.String> getUserControlDisabledPackages(@NonNull android.content.ComponentName);
+    method @NonNull public android.os.Bundle getUserRestrictions(@NonNull android.content.ComponentName);
+    method @Nullable public String getWifiMacAddress(@NonNull android.content.ComponentName);
+    method public boolean grantKeyPairToApp(@Nullable android.content.ComponentName, @NonNull String, @NonNull String);
+    method public boolean grantKeyPairToWifiAuth(@NonNull String);
+    method public boolean hasCaCertInstalled(@Nullable android.content.ComponentName, byte[]);
+    method public boolean hasGrantedPolicy(@NonNull android.content.ComponentName, int);
+    method public boolean hasKeyPair(@NonNull String);
+    method public boolean hasLockdownAdminConfiguredNetworks(@NonNull android.content.ComponentName);
+    method public boolean installCaCert(@Nullable android.content.ComponentName, byte[]);
+    method public boolean installExistingPackage(@NonNull android.content.ComponentName, String);
+    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate, @NonNull String);
+    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate[], @NonNull String, boolean);
+    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate[], @NonNull String, int);
+    method public void installSystemUpdate(@NonNull android.content.ComponentName, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback);
+    method public boolean isActivePasswordSufficient();
+    method public boolean isActivePasswordSufficientForDeviceRequirement();
+    method public boolean isAdminActive(@NonNull android.content.ComponentName);
+    method public boolean isAffiliatedUser();
+    method public boolean isAlwaysOnVpnLockdownEnabled(@NonNull android.content.ComponentName);
+    method public boolean isApplicationHidden(@NonNull android.content.ComponentName, String);
+    method public boolean isBackupServiceEnabled(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean isCallerApplicationRestrictionsManagingPackage();
+    method public boolean isCommonCriteriaModeEnabled(@Nullable android.content.ComponentName);
+    method public boolean isComplianceAcknowledgementRequired();
+    method public boolean isDeviceIdAttestationSupported();
+    method public boolean isDeviceOwnerApp(String);
+    method public boolean isEphemeralUser(@NonNull android.content.ComponentName);
+    method public boolean isKeyPairGrantedToWifiAuth(@NonNull String);
+    method public boolean isLockTaskPermitted(String);
+    method public boolean isLogoutEnabled();
+    method public boolean isManagedProfile(@NonNull android.content.ComponentName);
+    method public boolean isMasterVolumeMuted(@NonNull android.content.ComponentName);
+    method public boolean isNetworkLoggingEnabled(@Nullable android.content.ComponentName);
+    method public boolean isOrganizationOwnedDeviceWithManagedProfile();
+    method public boolean isOverrideApnEnabled(@NonNull android.content.ComponentName);
+    method public boolean isPackageSuspended(@NonNull android.content.ComponentName, String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean isPreferentialNetworkServiceEnabled();
+    method public boolean isProfileOwnerApp(String);
+    method public boolean isProvisioningAllowed(@NonNull String);
+    method public boolean isResetPasswordTokenActive(android.content.ComponentName);
+    method public boolean isSafeOperation(int);
+    method public boolean isSecurityLoggingEnabled(@Nullable android.content.ComponentName);
+    method public boolean isUninstallBlocked(@Nullable android.content.ComponentName, String);
+    method public boolean isUniqueDeviceAttestationSupported();
+    method public boolean isUsbDataSignalingEnabled();
+    method public boolean isUsingUnifiedPassword(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<android.os.UserHandle> listForegroundAffiliatedUsers();
+    method public void lockNow();
+    method public void lockNow(int);
+    method public int logoutUser(@NonNull android.content.ComponentName);
+    method public void reboot(@NonNull android.content.ComponentName);
+    method public void removeActiveAdmin(@NonNull android.content.ComponentName);
+    method public boolean removeCrossProfileWidgetProvider(@NonNull android.content.ComponentName, String);
+    method public boolean removeKeyPair(@Nullable android.content.ComponentName, @NonNull String);
+    method public boolean removeOverrideApn(@NonNull android.content.ComponentName, int);
+    method public boolean removeUser(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public boolean requestBugreport(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean resetPassword(String, int);
+    method public boolean resetPasswordWithToken(@NonNull android.content.ComponentName, String, byte[], int);
+    method @Nullable public java.util.List<android.app.admin.NetworkEvent> retrieveNetworkLogs(@Nullable android.content.ComponentName, long);
+    method @Nullable public java.util.List<android.app.admin.SecurityLog.SecurityEvent> retrievePreRebootSecurityLogs(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.List<android.app.admin.SecurityLog.SecurityEvent> retrieveSecurityLogs(@NonNull android.content.ComponentName);
+    method public boolean revokeKeyPairFromApp(@Nullable android.content.ComponentName, @NonNull String, @NonNull String);
+    method public boolean revokeKeyPairFromWifiAuth(@NonNull String);
+    method public void setAccountManagementDisabled(@NonNull android.content.ComponentName, String, boolean);
+    method public void setAffiliationIds(@NonNull android.content.ComponentName, @NonNull java.util.Set<java.lang.String>);
+    method public void setAlwaysOnVpnPackage(@NonNull android.content.ComponentName, @Nullable String, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void setAlwaysOnVpnPackage(@NonNull android.content.ComponentName, @Nullable String, boolean, @Nullable java.util.Set<java.lang.String>) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean setApplicationHidden(@NonNull android.content.ComponentName, String, boolean);
+    method @WorkerThread public void setApplicationRestrictions(@Nullable android.content.ComponentName, String, android.os.Bundle);
+    method @Deprecated public void setApplicationRestrictionsManagingPackage(@NonNull android.content.ComponentName, @Nullable String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void setAutoTimeEnabled(@NonNull android.content.ComponentName, boolean);
+    method @Deprecated public void setAutoTimeRequired(@NonNull android.content.ComponentName, boolean);
+    method public void setAutoTimeZoneEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setBackupServiceEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setBluetoothContactSharingDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setCameraDisabled(@NonNull android.content.ComponentName, boolean);
+    method @Deprecated public void setCertInstallerPackage(@NonNull android.content.ComponentName, @Nullable String) throws java.lang.SecurityException;
+    method public void setCommonCriteriaModeEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setConfiguredNetworksLockdownState(@NonNull android.content.ComponentName, boolean);
+    method public void setCrossProfileCalendarPackages(@NonNull android.content.ComponentName, @Nullable java.util.Set<java.lang.String>);
+    method public void setCrossProfileCallerIdDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setCrossProfileContactsSearchDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setCrossProfilePackages(@NonNull android.content.ComponentName, @NonNull java.util.Set<java.lang.String>);
+    method public void setDefaultSmsApplication(@NonNull android.content.ComponentName, @NonNull String);
+    method public void setDelegatedScopes(@NonNull android.content.ComponentName, @NonNull String, @NonNull java.util.List<java.lang.String>);
+    method public void setDeviceOwnerLockScreenInfo(@NonNull android.content.ComponentName, CharSequence);
+    method public void setEndUserSessionMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setFactoryResetProtectionPolicy(@NonNull android.content.ComponentName, @Nullable android.app.admin.FactoryResetProtectionPolicy);
+    method public int setGlobalPrivateDnsModeOpportunistic(@NonNull android.content.ComponentName);
+    method @WorkerThread public int setGlobalPrivateDnsModeSpecifiedHost(@NonNull android.content.ComponentName, @NonNull String);
+    method public void setGlobalSetting(@NonNull android.content.ComponentName, String, String);
+    method public void setKeepUninstalledPackages(@Nullable android.content.ComponentName, @NonNull java.util.List<java.lang.String>);
+    method public boolean setKeyPairCertificate(@Nullable android.content.ComponentName, @NonNull String, @NonNull java.util.List<java.security.cert.Certificate>, boolean);
+    method public boolean setKeyguardDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setKeyguardDisabledFeatures(@NonNull android.content.ComponentName, int);
+    method public void setLocationEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setLockTaskFeatures(@NonNull android.content.ComponentName, int);
+    method public void setLockTaskPackages(@NonNull android.content.ComponentName, @NonNull String[]) throws java.lang.SecurityException;
+    method public void setLogoutEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setLongSupportMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setManagedProfileMaximumTimeOff(@NonNull android.content.ComponentName, long);
+    method public void setMasterVolumeMuted(@NonNull android.content.ComponentName, boolean);
+    method public void setMaximumFailedPasswordsForWipe(@NonNull android.content.ComponentName, int);
+    method public void setMaximumTimeToLock(@NonNull android.content.ComponentName, long);
+    method @NonNull public java.util.List<java.lang.String> setMeteredDataDisabledPackages(@NonNull android.content.ComponentName, @NonNull java.util.List<java.lang.String>);
+    method public void setNearbyAppStreamingPolicy(int);
+    method public void setNearbyNotificationStreamingPolicy(int);
+    method public void setNetworkLoggingEnabled(@Nullable android.content.ComponentName, boolean);
+    method @Deprecated public void setOrganizationColor(@NonNull android.content.ComponentName, int);
+    method public void setOrganizationId(@NonNull String);
+    method public void setOrganizationName(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setOverrideApnsEnabled(@NonNull android.content.ComponentName, boolean);
+    method @NonNull public String[] setPackagesSuspended(@NonNull android.content.ComponentName, @NonNull String[], boolean);
+    method public void setPasswordExpirationTimeout(@NonNull android.content.ComponentName, long);
+    method public void setPasswordHistoryLength(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumLength(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumLetters(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumLowerCase(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumNonLetter(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumNumeric(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumSymbols(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumUpperCase(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordQuality(@NonNull android.content.ComponentName, int);
+    method public boolean setPermissionGrantState(@NonNull android.content.ComponentName, @NonNull String, @NonNull String, int);
+    method public void setPermissionPolicy(@NonNull android.content.ComponentName, int);
+    method public boolean setPermittedAccessibilityServices(@NonNull android.content.ComponentName, java.util.List<java.lang.String>);
+    method public boolean setPermittedCrossProfileNotificationListeners(@NonNull android.content.ComponentName, @Nullable java.util.List<java.lang.String>);
+    method public boolean setPermittedInputMethods(@NonNull android.content.ComponentName, java.util.List<java.lang.String>);
+    method public void setPersonalAppsSuspended(@NonNull android.content.ComponentName, boolean);
+    method public void setPreferentialNetworkServiceEnabled(boolean);
+    method public void setProfileEnabled(@NonNull android.content.ComponentName);
+    method public void setProfileName(@NonNull android.content.ComponentName, String);
+    method public void setRecommendedGlobalProxy(@NonNull android.content.ComponentName, @Nullable android.net.ProxyInfo);
+    method public void setRequiredPasswordComplexity(int);
+    method public void setRequiredStrongAuthTimeout(@NonNull android.content.ComponentName, long);
+    method public boolean setResetPasswordToken(android.content.ComponentName, byte[]);
+    method public void setRestrictionsProvider(@NonNull android.content.ComponentName, @Nullable android.content.ComponentName);
+    method public void setScreenCaptureDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setSecureSetting(@NonNull android.content.ComponentName, String, String);
+    method public void setSecurityLoggingEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setShortSupportMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setStartUserSessionMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public boolean setStatusBarDisabled(@NonNull android.content.ComponentName, boolean);
+    method @Deprecated public int setStorageEncryption(@NonNull android.content.ComponentName, boolean);
+    method public void setSystemSetting(@NonNull android.content.ComponentName, @NonNull String, String);
+    method public void setSystemUpdatePolicy(@NonNull android.content.ComponentName, android.app.admin.SystemUpdatePolicy);
+    method public boolean setTime(@NonNull android.content.ComponentName, long);
+    method public boolean setTimeZone(@NonNull android.content.ComponentName, String);
+    method public void setTrustAgentConfiguration(@NonNull android.content.ComponentName, @NonNull android.content.ComponentName, android.os.PersistableBundle);
+    method public void setUninstallBlocked(@Nullable android.content.ComponentName, String, boolean);
+    method public void setUsbDataSignalingEnabled(boolean);
+    method public void setUserControlDisabledPackages(@NonNull android.content.ComponentName, @NonNull java.util.List<java.lang.String>);
+    method public void setUserIcon(@NonNull android.content.ComponentName, android.graphics.Bitmap);
+    method public int startUserInBackground(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public int stopUser(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public boolean switchUser(@NonNull android.content.ComponentName, @Nullable android.os.UserHandle);
+    method public void transferOwnership(@NonNull android.content.ComponentName, @NonNull android.content.ComponentName, @Nullable android.os.PersistableBundle);
+    method public void uninstallAllUserCaCerts(@Nullable android.content.ComponentName);
+    method public void uninstallCaCert(@Nullable android.content.ComponentName, byte[]);
+    method public boolean updateOverrideApn(@NonNull android.content.ComponentName, int, @NonNull android.telephony.data.ApnSetting);
+    method public void wipeData(int);
+    method public void wipeData(int, @NonNull CharSequence);
+    field public static final String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN";
+    field public static final String ACTION_ADMIN_POLICY_COMPLIANCE = "android.app.action.ADMIN_POLICY_COMPLIANCE";
+    field public static final String ACTION_APPLICATION_DELEGATION_SCOPES_CHANGED = "android.app.action.APPLICATION_DELEGATION_SCOPES_CHANGED";
+    field public static final String ACTION_CHECK_POLICY_COMPLIANCE = "android.app.action.CHECK_POLICY_COMPLIANCE";
+    field public static final String ACTION_DEVICE_ADMIN_SERVICE = "android.app.action.DEVICE_ADMIN_SERVICE";
+    field public static final String ACTION_DEVICE_OWNER_CHANGED = "android.app.action.DEVICE_OWNER_CHANGED";
+    field public static final String ACTION_GET_PROVISIONING_MODE = "android.app.action.GET_PROVISIONING_MODE";
+    field public static final String ACTION_MANAGED_PROFILE_PROVISIONED = "android.app.action.MANAGED_PROFILE_PROVISIONED";
+    field public static final String ACTION_PROFILE_OWNER_CHANGED = "android.app.action.PROFILE_OWNER_CHANGED";
+    field public static final String ACTION_PROVISIONING_SUCCESSFUL = "android.app.action.PROVISIONING_SUCCESSFUL";
+    field @Deprecated public static final String ACTION_PROVISION_MANAGED_DEVICE = "android.app.action.PROVISION_MANAGED_DEVICE";
+    field public static final String ACTION_PROVISION_MANAGED_PROFILE = "android.app.action.PROVISION_MANAGED_PROFILE";
+    field public static final String ACTION_SET_NEW_PARENT_PROFILE_PASSWORD = "android.app.action.SET_NEW_PARENT_PROFILE_PASSWORD";
+    field public static final String ACTION_SET_NEW_PASSWORD = "android.app.action.SET_NEW_PASSWORD";
+    field public static final String ACTION_START_ENCRYPTION = "android.app.action.START_ENCRYPTION";
+    field public static final String ACTION_SYSTEM_UPDATE_POLICY_CHANGED = "android.app.action.SYSTEM_UPDATE_POLICY_CHANGED";
+    field public static final String DELEGATION_APP_RESTRICTIONS = "delegation-app-restrictions";
+    field public static final String DELEGATION_BLOCK_UNINSTALL = "delegation-block-uninstall";
+    field public static final String DELEGATION_CERT_INSTALL = "delegation-cert-install";
+    field public static final String DELEGATION_CERT_SELECTION = "delegation-cert-selection";
+    field public static final String DELEGATION_ENABLE_SYSTEM_APP = "delegation-enable-system-app";
+    field public static final String DELEGATION_INSTALL_EXISTING_PACKAGE = "delegation-install-existing-package";
+    field public static final String DELEGATION_KEEP_UNINSTALLED_PACKAGES = "delegation-keep-uninstalled-packages";
+    field public static final String DELEGATION_NETWORK_LOGGING = "delegation-network-logging";
+    field public static final String DELEGATION_PACKAGE_ACCESS = "delegation-package-access";
+    field public static final String DELEGATION_PERMISSION_GRANT = "delegation-permission-grant";
+    field public static final String DELEGATION_SECURITY_LOGGING = "delegation-security-logging";
+    field public static final int ENCRYPTION_STATUS_ACTIVATING = 2; // 0x2
+    field public static final int ENCRYPTION_STATUS_ACTIVE = 3; // 0x3
+    field public static final int ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY = 4; // 0x4
+    field public static final int ENCRYPTION_STATUS_ACTIVE_PER_USER = 5; // 0x5
+    field public static final int ENCRYPTION_STATUS_INACTIVE = 1; // 0x1
+    field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0
+    field public static final String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION";
+    field public static final String EXTRA_DELEGATION_SCOPES = "android.app.extra.DELEGATION_SCOPES";
+    field public static final String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN";
+    field public static final String EXTRA_DEVICE_PASSWORD_REQUIREMENT_ONLY = "android.app.extra.DEVICE_PASSWORD_REQUIREMENT_ONLY";
+    field @RequiresPermission(android.Manifest.permission.REQUEST_PASSWORD_COMPLEXITY) public static final String EXTRA_PASSWORD_COMPLEXITY = "android.app.extra.PASSWORD_COMPLEXITY";
+    field public static final String EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE = "android.app.extra.PROVISIONING_ACCOUNT_TO_MIGRATE";
+    field public static final String EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE = "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE";
+    field public static final String EXTRA_PROVISIONING_ALLOWED_PROVISIONING_MODES = "android.app.extra.PROVISIONING_ALLOWED_PROVISIONING_MODES";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE = "android.app.extra.PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION";
+    field @Deprecated public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM";
+    field public static final String EXTRA_PROVISIONING_DISCLAIMERS = "android.app.extra.PROVISIONING_DISCLAIMERS";
+    field public static final String EXTRA_PROVISIONING_DISCLAIMER_CONTENT = "android.app.extra.PROVISIONING_DISCLAIMER_CONTENT";
+    field public static final String EXTRA_PROVISIONING_DISCLAIMER_HEADER = "android.app.extra.PROVISIONING_DISCLAIMER_HEADER";
+    field @Deprecated public static final String EXTRA_PROVISIONING_EMAIL_ADDRESS = "android.app.extra.PROVISIONING_EMAIL_ADDRESS";
+    field public static final String EXTRA_PROVISIONING_IMEI = "android.app.extra.PROVISIONING_IMEI";
+    field public static final String EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION = "android.app.extra.PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION";
+    field public static final String EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED = "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED";
+    field public static final String EXTRA_PROVISIONING_LOCALE = "android.app.extra.PROVISIONING_LOCALE";
+    field public static final String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME";
+    field public static final String EXTRA_PROVISIONING_LOGO_URI = "android.app.extra.PROVISIONING_LOGO_URI";
+    field @Deprecated public static final String EXTRA_PROVISIONING_MAIN_COLOR = "android.app.extra.PROVISIONING_MAIN_COLOR";
+    field public static final String EXTRA_PROVISIONING_MODE = "android.app.extra.PROVISIONING_MODE";
+    field public static final String EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT = "android.app.extra.PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT";
+    field public static final String EXTRA_PROVISIONING_SERIAL_NUMBER = "android.app.extra.PROVISIONING_SERIAL_NUMBER";
+    field public static final String EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS = "android.app.extra.PROVISIONING_SKIP_EDUCATION_SCREENS";
+    field public static final String EXTRA_PROVISIONING_SKIP_ENCRYPTION = "android.app.extra.PROVISIONING_SKIP_ENCRYPTION";
+    field @Deprecated public static final String EXTRA_PROVISIONING_SKIP_USER_CONSENT = "android.app.extra.PROVISIONING_SKIP_USER_CONSENT";
+    field public static final String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE";
+    field public static final String EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY = "android.app.extra.PROVISIONING_WIFI_ANONYMOUS_IDENTITY";
+    field public static final String EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE = "android.app.extra.PROVISIONING_WIFI_CA_CERTIFICATE";
+    field public static final String EXTRA_PROVISIONING_WIFI_DOMAIN = "android.app.extra.PROVISIONING_WIFI_DOMAIN";
+    field public static final String EXTRA_PROVISIONING_WIFI_EAP_METHOD = "android.app.extra.PROVISIONING_WIFI_EAP_METHOD";
+    field public static final String EXTRA_PROVISIONING_WIFI_HIDDEN = "android.app.extra.PROVISIONING_WIFI_HIDDEN";
+    field public static final String EXTRA_PROVISIONING_WIFI_IDENTITY = "android.app.extra.PROVISIONING_WIFI_IDENTITY";
+    field public static final String EXTRA_PROVISIONING_WIFI_PAC_URL = "android.app.extra.PROVISIONING_WIFI_PAC_URL";
+    field public static final String EXTRA_PROVISIONING_WIFI_PASSWORD = "android.app.extra.PROVISIONING_WIFI_PASSWORD";
+    field public static final String EXTRA_PROVISIONING_WIFI_PHASE2_AUTH = "android.app.extra.PROVISIONING_WIFI_PHASE2_AUTH";
+    field public static final String EXTRA_PROVISIONING_WIFI_PROXY_BYPASS = "android.app.extra.PROVISIONING_WIFI_PROXY_BYPASS";
+    field public static final String EXTRA_PROVISIONING_WIFI_PROXY_HOST = "android.app.extra.PROVISIONING_WIFI_PROXY_HOST";
+    field public static final String EXTRA_PROVISIONING_WIFI_PROXY_PORT = "android.app.extra.PROVISIONING_WIFI_PROXY_PORT";
+    field public static final String EXTRA_PROVISIONING_WIFI_SECURITY_TYPE = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE";
+    field public static final String EXTRA_PROVISIONING_WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID";
+    field public static final String EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE = "android.app.extra.PROVISIONING_WIFI_USER_CERTIFICATE";
+    field public static final int FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY = 1; // 0x1
+    field public static final int FLAG_MANAGED_CAN_ACCESS_PARENT = 2; // 0x2
+    field public static final int FLAG_PARENT_CAN_ACCESS_MANAGED = 1; // 0x1
+    field public static final int ID_TYPE_BASE_INFO = 1; // 0x1
+    field public static final int ID_TYPE_IMEI = 4; // 0x4
+    field public static final int ID_TYPE_INDIVIDUAL_ATTESTATION = 16; // 0x10
+    field public static final int ID_TYPE_MEID = 8; // 0x8
+    field public static final int ID_TYPE_SERIAL = 2; // 0x2
+    field public static final int INSTALLKEY_REQUEST_CREDENTIALS_ACCESS = 1; // 0x1
+    field public static final int INSTALLKEY_SET_USER_SELECTABLE = 2; // 0x2
+    field public static final int KEYGUARD_DISABLE_BIOMETRICS = 416; // 0x1a0
+    field public static final int KEYGUARD_DISABLE_FACE = 128; // 0x80
+    field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
+    field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
+    field public static final int KEYGUARD_DISABLE_FINGERPRINT = 32; // 0x20
+    field public static final int KEYGUARD_DISABLE_IRIS = 256; // 0x100
+    field public static final int KEYGUARD_DISABLE_REMOTE_INPUT = 64; // 0x40
+    field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
+    field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4
+    field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10
+    field public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 8; // 0x8
+    field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1
+    field public static final int LEAVE_ALL_SYSTEM_APPS_ENABLED = 16; // 0x10
+    field public static final int LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK = 64; // 0x40
+    field public static final int LOCK_TASK_FEATURE_GLOBAL_ACTIONS = 16; // 0x10
+    field public static final int LOCK_TASK_FEATURE_HOME = 4; // 0x4
+    field public static final int LOCK_TASK_FEATURE_KEYGUARD = 32; // 0x20
+    field public static final int LOCK_TASK_FEATURE_NONE = 0; // 0x0
+    field public static final int LOCK_TASK_FEATURE_NOTIFICATIONS = 2; // 0x2
+    field public static final int LOCK_TASK_FEATURE_OVERVIEW = 8; // 0x8
+    field public static final int LOCK_TASK_FEATURE_SYSTEM_INFO = 1; // 0x1
+    field public static final int MAKE_USER_EPHEMERAL = 2; // 0x2
+    field public static final String MIME_TYPE_PROVISIONING_NFC = "application/com.android.managedprovisioning";
+    field public static final int NEARBY_STREAMING_DISABLED = 1; // 0x1
+    field public static final int NEARBY_STREAMING_ENABLED = 2; // 0x2
+    field public static final int NEARBY_STREAMING_NOT_CONTROLLED_BY_POLICY = 0; // 0x0
+    field public static final int NEARBY_STREAMING_SAME_MANAGED_ACCOUNT_ONLY = 3; // 0x3
+    field public static final int OPERATION_SAFETY_REASON_DRIVING_DISTRACTION = 1; // 0x1
+    field public static final int PASSWORD_COMPLEXITY_HIGH = 327680; // 0x50000
+    field public static final int PASSWORD_COMPLEXITY_LOW = 65536; // 0x10000
+    field public static final int PASSWORD_COMPLEXITY_MEDIUM = 196608; // 0x30000
+    field public static final int PASSWORD_COMPLEXITY_NONE = 0; // 0x0
+    field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000
+    field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000
+    field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000
+    field public static final int PASSWORD_QUALITY_COMPLEX = 393216; // 0x60000
+    field public static final int PASSWORD_QUALITY_NUMERIC = 131072; // 0x20000
+    field public static final int PASSWORD_QUALITY_NUMERIC_COMPLEX = 196608; // 0x30000
+    field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000
+    field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0
+    field public static final int PERMISSION_GRANT_STATE_DEFAULT = 0; // 0x0
+    field public static final int PERMISSION_GRANT_STATE_DENIED = 2; // 0x2
+    field public static final int PERMISSION_GRANT_STATE_GRANTED = 1; // 0x1
+    field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2
+    field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1
+    field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0
+    field public static final int PERSONAL_APPS_NOT_SUSPENDED = 0; // 0x0
+    field public static final int PERSONAL_APPS_SUSPENDED_EXPLICITLY = 1; // 0x1
+    field public static final int PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT = 2; // 0x2
+    field public static final String POLICY_DISABLE_CAMERA = "policy_disable_camera";
+    field public static final String POLICY_DISABLE_SCREEN_CAPTURE = "policy_disable_screen_capture";
+    field public static final int PRIVATE_DNS_MODE_OFF = 1; // 0x1
+    field public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2; // 0x2
+    field public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3; // 0x3
+    field public static final int PRIVATE_DNS_MODE_UNKNOWN = 0; // 0x0
+    field public static final int PRIVATE_DNS_SET_ERROR_FAILURE_SETTING = 2; // 0x2
+    field public static final int PRIVATE_DNS_SET_ERROR_HOST_NOT_SERVING = 1; // 0x1
+    field public static final int PRIVATE_DNS_SET_NO_ERROR = 0; // 0x0
+    field public static final int PROVISIONING_MODE_FULLY_MANAGED_DEVICE = 1; // 0x1
+    field public static final int PROVISIONING_MODE_MANAGED_PROFILE = 2; // 0x2
+    field public static final int PROVISIONING_MODE_MANAGED_PROFILE_ON_PERSONAL_DEVICE = 3; // 0x3
+    field public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 2; // 0x2
+    field public static final int RESET_PASSWORD_REQUIRE_ENTRY = 1; // 0x1
+    field public static final int SKIP_SETUP_WIZARD = 1; // 0x1
+    field public static final int WIPE_EUICC = 4; // 0x4
+    field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1
+    field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2
+    field public static final int WIPE_SILENTLY = 8; // 0x8
+  }
+
+  public abstract static class DevicePolicyManager.InstallSystemUpdateCallback {
+    ctor public DevicePolicyManager.InstallSystemUpdateCallback();
+    method public void onInstallUpdateError(int, @NonNull String);
+    field public static final int UPDATE_ERROR_BATTERY_LOW = 5; // 0x5
+    field public static final int UPDATE_ERROR_FILE_NOT_FOUND = 4; // 0x4
+    field public static final int UPDATE_ERROR_INCORRECT_OS_VERSION = 2; // 0x2
+    field public static final int UPDATE_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int UPDATE_ERROR_UPDATE_FILE_INVALID = 3; // 0x3
+  }
+
+  public static interface DevicePolicyManager.OnClearApplicationUserDataListener {
+    method public void onApplicationUserDataCleared(String, boolean);
+  }
+
+  public final class DnsEvent extends android.app.admin.NetworkEvent implements android.os.Parcelable {
+    method public String getHostname();
+    method public java.util.List<java.net.InetAddress> getInetAddresses();
+    method public int getTotalResolvedAddressCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.DnsEvent> CREATOR;
+  }
+
+  public final class FactoryResetProtectionPolicy implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getFactoryResetProtectionAccounts();
+    method public boolean isFactoryResetProtectionEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.FactoryResetProtectionPolicy> CREATOR;
+  }
+
+  public static class FactoryResetProtectionPolicy.Builder {
+    ctor public FactoryResetProtectionPolicy.Builder();
+    method @NonNull public android.app.admin.FactoryResetProtectionPolicy build();
+    method @NonNull public android.app.admin.FactoryResetProtectionPolicy.Builder setFactoryResetProtectionAccounts(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public android.app.admin.FactoryResetProtectionPolicy.Builder setFactoryResetProtectionEnabled(boolean);
+  }
+
+  public class FreezePeriod {
+    ctor public FreezePeriod(java.time.MonthDay, java.time.MonthDay);
+    method public java.time.MonthDay getEnd();
+    method public java.time.MonthDay getStart();
+  }
+
+  public abstract class NetworkEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getId();
+    method public String getPackageName();
+    method public long getTimestamp();
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.NetworkEvent> CREATOR;
+  }
+
+  public class SecurityLog {
+    ctor public SecurityLog();
+    field public static final int LEVEL_ERROR = 3; // 0x3
+    field public static final int LEVEL_INFO = 1; // 0x1
+    field public static final int LEVEL_WARNING = 2; // 0x2
+    field public static final int TAG_ADB_SHELL_CMD = 210002; // 0x33452
+    field public static final int TAG_ADB_SHELL_INTERACTIVE = 210001; // 0x33451
+    field public static final int TAG_APP_PROCESS_START = 210005; // 0x33455
+    field public static final int TAG_CAMERA_POLICY_SET = 210034; // 0x33472
+    field public static final int TAG_CERT_AUTHORITY_INSTALLED = 210029; // 0x3346d
+    field public static final int TAG_CERT_AUTHORITY_REMOVED = 210030; // 0x3346e
+    field public static final int TAG_CERT_VALIDATION_FAILURE = 210033; // 0x33471
+    field public static final int TAG_CRYPTO_SELF_TEST_COMPLETED = 210031; // 0x3346f
+    field public static final int TAG_KEYGUARD_DISABLED_FEATURES_SET = 210021; // 0x33465
+    field public static final int TAG_KEYGUARD_DISMISSED = 210006; // 0x33456
+    field public static final int TAG_KEYGUARD_DISMISS_AUTH_ATTEMPT = 210007; // 0x33457
+    field public static final int TAG_KEYGUARD_SECURED = 210008; // 0x33458
+    field public static final int TAG_KEY_DESTRUCTION = 210026; // 0x3346a
+    field public static final int TAG_KEY_GENERATED = 210024; // 0x33468
+    field public static final int TAG_KEY_IMPORT = 210025; // 0x33469
+    field public static final int TAG_KEY_INTEGRITY_VIOLATION = 210032; // 0x33470
+    field public static final int TAG_LOGGING_STARTED = 210011; // 0x3345b
+    field public static final int TAG_LOGGING_STOPPED = 210012; // 0x3345c
+    field public static final int TAG_LOG_BUFFER_SIZE_CRITICAL = 210015; // 0x3345f
+    field public static final int TAG_MAX_PASSWORD_ATTEMPTS_SET = 210020; // 0x33464
+    field public static final int TAG_MAX_SCREEN_LOCK_TIMEOUT_SET = 210019; // 0x33463
+    field public static final int TAG_MEDIA_MOUNT = 210013; // 0x3345d
+    field public static final int TAG_MEDIA_UNMOUNT = 210014; // 0x3345e
+    field public static final int TAG_OS_SHUTDOWN = 210010; // 0x3345a
+    field public static final int TAG_OS_STARTUP = 210009; // 0x33459
+    field public static final int TAG_PASSWORD_COMPLEXITY_REQUIRED = 210035; // 0x33473
+    field public static final int TAG_PASSWORD_COMPLEXITY_SET = 210017; // 0x33461
+    field public static final int TAG_PASSWORD_EXPIRATION_SET = 210016; // 0x33460
+    field public static final int TAG_PASSWORD_HISTORY_LENGTH_SET = 210018; // 0x33462
+    field public static final int TAG_REMOTE_LOCK = 210022; // 0x33466
+    field public static final int TAG_SYNC_RECV_FILE = 210003; // 0x33453
+    field public static final int TAG_SYNC_SEND_FILE = 210004; // 0x33454
+    field public static final int TAG_USER_RESTRICTION_ADDED = 210027; // 0x3346b
+    field public static final int TAG_USER_RESTRICTION_REMOVED = 210028; // 0x3346c
+    field public static final int TAG_WIPE_FAILURE = 210023; // 0x33467
+  }
+
+  public static final class SecurityLog.SecurityEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public Object getData();
+    method public long getId();
+    method public int getLogLevel();
+    method public int getTag();
+    method public long getTimeNanos();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SecurityLog.SecurityEvent> CREATOR;
+  }
+
+  public final class SystemUpdateInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getReceivedTime();
+    method public int getSecurityPatchState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdateInfo> CREATOR;
+    field public static final int SECURITY_PATCH_STATE_FALSE = 1; // 0x1
+    field public static final int SECURITY_PATCH_STATE_TRUE = 2; // 0x2
+    field public static final int SECURITY_PATCH_STATE_UNKNOWN = 0; // 0x0
+  }
+
+  public final class SystemUpdatePolicy implements android.os.Parcelable {
+    method public static android.app.admin.SystemUpdatePolicy createAutomaticInstallPolicy();
+    method public static android.app.admin.SystemUpdatePolicy createPostponeInstallPolicy();
+    method public static android.app.admin.SystemUpdatePolicy createWindowedInstallPolicy(int, int);
+    method public int describeContents();
+    method public java.util.List<android.app.admin.FreezePeriod> getFreezePeriods();
+    method public int getInstallWindowEnd();
+    method public int getInstallWindowStart();
+    method public int getPolicyType();
+    method public android.app.admin.SystemUpdatePolicy setFreezePeriods(java.util.List<android.app.admin.FreezePeriod>);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy> CREATOR;
+    field public static final int TYPE_INSTALL_AUTOMATIC = 1; // 0x1
+    field public static final int TYPE_INSTALL_WINDOWED = 2; // 0x2
+    field public static final int TYPE_POSTPONE = 3; // 0x3
+  }
+
+  public static final class SystemUpdatePolicy.ValidationFailedException extends java.lang.IllegalArgumentException implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getErrorCode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy.ValidationFailedException> CREATOR;
+    field public static final int ERROR_COMBINED_FREEZE_PERIOD_TOO_CLOSE = 6; // 0x6
+    field public static final int ERROR_COMBINED_FREEZE_PERIOD_TOO_LONG = 5; // 0x5
+    field public static final int ERROR_DUPLICATE_OR_OVERLAP = 2; // 0x2
+    field public static final int ERROR_NEW_FREEZE_PERIOD_TOO_CLOSE = 4; // 0x4
+    field public static final int ERROR_NEW_FREEZE_PERIOD_TOO_LONG = 3; // 0x3
+    field public static final int ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  public final class UnsafeStateException extends java.lang.IllegalStateException implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.Integer> getReasons();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.UnsafeStateException> CREATOR;
+  }
+
+}
+
+package android.app.assist {
+
+  public class AssistContent implements android.os.Parcelable {
+    ctor public AssistContent();
+    method public int describeContents();
+    method public android.content.ClipData getClipData();
+    method public android.os.Bundle getExtras();
+    method public android.content.Intent getIntent();
+    method public String getStructuredData();
+    method public android.net.Uri getWebUri();
+    method public boolean isAppProvidedIntent();
+    method public boolean isAppProvidedWebUri();
+    method public void setClipData(android.content.ClipData);
+    method public void setIntent(android.content.Intent);
+    method public void setStructuredData(String);
+    method public void setWebUri(android.net.Uri);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.assist.AssistContent> CREATOR;
+  }
+
+  public class AssistStructure implements android.os.Parcelable {
+    ctor public AssistStructure();
+    method public int describeContents();
+    method public long getAcquisitionEndTime();
+    method public long getAcquisitionStartTime();
+    method public android.content.ComponentName getActivityComponent();
+    method public android.app.assist.AssistStructure.WindowNode getWindowNodeAt(int);
+    method public int getWindowNodeCount();
+    method public boolean isHomeActivity();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.assist.AssistStructure> CREATOR;
+  }
+
+  public static class AssistStructure.ViewNode {
+    method public float getAlpha();
+    method @Nullable public String[] getAutofillHints();
+    method @Nullable public android.view.autofill.AutofillId getAutofillId();
+    method @Nullable public CharSequence[] getAutofillOptions();
+    method public int getAutofillType();
+    method @Nullable public android.view.autofill.AutofillValue getAutofillValue();
+    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
+    method public int getChildCount();
+    method @Nullable public String getClassName();
+    method @Nullable public CharSequence getContentDescription();
+    method public float getElevation();
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getHeight();
+    method @Nullable public String getHint();
+    method @Nullable public String getHintIdEntry();
+    method @Nullable public android.view.ViewStructure.HtmlInfo getHtmlInfo();
+    method public int getId();
+    method @Nullable public String getIdEntry();
+    method @Nullable public String getIdPackage();
+    method @Nullable public String getIdType();
+    method public int getImportantForAutofill();
+    method public int getInputType();
+    method public int getLeft();
+    method @Nullable public android.os.LocaleList getLocaleList();
+    method public int getMaxTextEms();
+    method public int getMaxTextLength();
+    method public int getMinTextEms();
+    method @Nullable public String[] getReceiveContentMimeTypes();
+    method public int getScrollX();
+    method public int getScrollY();
+    method @Nullable public CharSequence getText();
+    method public int getTextBackgroundColor();
+    method public int getTextColor();
+    method @Nullable public String getTextIdEntry();
+    method @Nullable public int[] getTextLineBaselines();
+    method @Nullable public int[] getTextLineCharOffsets();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method public float getTextSize();
+    method public int getTextStyle();
+    method public int getTop();
+    method public android.graphics.Matrix getTransformation();
+    method public int getVisibility();
+    method @Nullable public String getWebDomain();
+    method @Nullable public String getWebScheme();
+    method public int getWidth();
+    method public boolean isAccessibilityFocused();
+    method public boolean isActivated();
+    method public boolean isAssistBlocked();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isClickable();
+    method public boolean isContextClickable();
+    method public boolean isEnabled();
+    method public boolean isFocusable();
+    method public boolean isFocused();
+    method public boolean isLongClickable();
+    method public boolean isOpaque();
+    method public boolean isSelected();
+    field public static final int TEXT_COLOR_UNDEFINED = 1; // 0x1
+    field public static final int TEXT_STYLE_BOLD = 1; // 0x1
+    field public static final int TEXT_STYLE_ITALIC = 2; // 0x2
+    field public static final int TEXT_STYLE_STRIKE_THRU = 8; // 0x8
+    field public static final int TEXT_STYLE_UNDERLINE = 4; // 0x4
+  }
+
+  public static class AssistStructure.WindowNode {
+    method public int getDisplayId();
+    method public int getHeight();
+    method public int getLeft();
+    method public android.app.assist.AssistStructure.ViewNode getRootViewNode();
+    method public CharSequence getTitle();
+    method public int getTop();
+    method public int getWidth();
+  }
+
+}
+
+package android.app.backup {
+
+  public abstract class BackupAgent extends android.content.ContextWrapper {
+    ctor public BackupAgent();
+    method public final void fullBackupFile(java.io.File, android.app.backup.FullBackupDataOutput);
+    method public abstract void onBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onCreate();
+    method public void onDestroy();
+    method public void onFullBackup(android.app.backup.FullBackupDataOutput) throws java.io.IOException;
+    method public void onQuotaExceeded(long, long);
+    method public abstract void onRestore(android.app.backup.BackupDataInput, int, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onRestore(android.app.backup.BackupDataInput, long, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onRestoreFile(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long) throws java.io.IOException;
+    method public void onRestoreFinished();
+    field public static final int FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED = 1; // 0x1
+    field public static final int FLAG_DEVICE_TO_DEVICE_TRANSFER = 2; // 0x2
+    field public static final int TYPE_DIRECTORY = 2; // 0x2
+    field public static final int TYPE_FILE = 1; // 0x1
+  }
+
+  public class BackupAgentHelper extends android.app.backup.BackupAgent {
+    ctor public BackupAgentHelper();
+    method public void addHelper(String, android.app.backup.BackupHelper);
+    method public void onBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onRestore(android.app.backup.BackupDataInput, int, android.os.ParcelFileDescriptor) throws java.io.IOException;
+  }
+
+  public class BackupDataInput {
+    method public int getDataSize();
+    method public String getKey();
+    method public int readEntityData(byte[], int, int) throws java.io.IOException;
+    method public boolean readNextHeader() throws java.io.IOException;
+    method public void skipEntityData() throws java.io.IOException;
+  }
+
+  public class BackupDataInputStream extends java.io.InputStream {
+    method public String getKey();
+    method public int read() throws java.io.IOException;
+    method public int size();
+  }
+
+  public class BackupDataOutput {
+    method public long getQuota();
+    method public int getTransportFlags();
+    method public int writeEntityData(byte[], int) throws java.io.IOException;
+    method public int writeEntityHeader(String, int) throws java.io.IOException;
+  }
+
+  public interface BackupHelper {
+    method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor);
+    method public void restoreEntity(android.app.backup.BackupDataInputStream);
+    method public void writeNewStateDescription(android.os.ParcelFileDescriptor);
+  }
+
+  public class BackupManager {
+    ctor public BackupManager(android.content.Context);
+    method public void dataChanged();
+    method public static void dataChanged(String);
+    method @Nullable public android.os.UserHandle getUserForAncestralSerialNumber(long);
+    method @Deprecated public int requestRestore(android.app.backup.RestoreObserver);
+  }
+
+  public class FileBackupHelper implements android.app.backup.BackupHelper {
+    ctor public FileBackupHelper(android.content.Context, java.lang.String...);
+    method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor);
+    method public void restoreEntity(android.app.backup.BackupDataInputStream);
+    method public void writeNewStateDescription(android.os.ParcelFileDescriptor);
+  }
+
+  public class FullBackupDataOutput {
+    method public long getQuota();
+    method public int getTransportFlags();
+  }
+
+  public abstract class RestoreObserver {
+    ctor public RestoreObserver();
+    method public void onUpdate(int, String);
+    method public void restoreFinished(int);
+    method public void restoreStarting(int);
+  }
+
+  public class SharedPreferencesBackupHelper implements android.app.backup.BackupHelper {
+    ctor public SharedPreferencesBackupHelper(android.content.Context, java.lang.String...);
+    method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor);
+    method public void restoreEntity(android.app.backup.BackupDataInputStream);
+    method public void writeNewStateDescription(android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package android.app.blob {
+
+  public final class BlobHandle implements android.os.Parcelable {
+    method @NonNull public static android.app.blob.BlobHandle createWithSha256(@NonNull byte[], @NonNull CharSequence, long, @NonNull String);
+    method public int describeContents();
+    method public long getExpiryTimeMillis();
+    method @NonNull public CharSequence getLabel();
+    method @NonNull public byte[] getSha256Digest();
+    method @NonNull public String getTag();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.blob.BlobHandle> CREATOR;
+  }
+
+  public class BlobStoreManager {
+    method public void abandonSession(@IntRange(from=1) long) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int, long) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence, long) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence) throws java.io.IOException;
+    method @IntRange(from=1) public long createSession(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+    method @NonNull public java.util.List<android.app.blob.BlobHandle> getLeasedBlobs() throws java.io.IOException;
+    method @IntRange(from=0) public long getRemainingLeaseQuotaBytes();
+    method @NonNull public android.os.ParcelFileDescriptor openBlob(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+    method @NonNull public android.app.blob.BlobStoreManager.Session openSession(@IntRange(from=1) long) throws java.io.IOException;
+    method public void releaseLease(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+  }
+
+  public static class BlobStoreManager.Session implements java.io.Closeable {
+    method public void abandon() throws java.io.IOException;
+    method public void allowPackageAccess(@NonNull String, @NonNull byte[]) throws java.io.IOException;
+    method public void allowPublicAccess() throws java.io.IOException;
+    method public void allowSameSignatureAccess() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void commit(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>) throws java.io.IOException;
+    method public long getSize() throws java.io.IOException;
+    method public boolean isPackageAccessAllowed(@NonNull String, @NonNull byte[]) throws java.io.IOException;
+    method public boolean isPublicAccessAllowed() throws java.io.IOException;
+    method public boolean isSameSignatureAccessAllowed() throws java.io.IOException;
+    method @NonNull public android.os.ParcelFileDescriptor openRead() throws java.io.IOException;
+    method @NonNull public android.os.ParcelFileDescriptor openWrite(long, long) throws java.io.IOException;
+  }
+
+}
+
+package android.app.job {
+
+  public class JobInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getBackoffPolicy();
+    method @Nullable public android.content.ClipData getClipData();
+    method public int getClipGrantFlags();
+    method public long getEstimatedNetworkDownloadBytes();
+    method public long getEstimatedNetworkUploadBytes();
+    method @NonNull public android.os.PersistableBundle getExtras();
+    method public long getFlexMillis();
+    method public int getId();
+    method public long getInitialBackoffMillis();
+    method public long getIntervalMillis();
+    method public long getMaxExecutionDelayMillis();
+    method public static final long getMinFlexMillis();
+    method public long getMinLatencyMillis();
+    method public static final long getMinPeriodMillis();
+    method @Deprecated public int getNetworkType();
+    method @Nullable public android.net.NetworkRequest getRequiredNetwork();
+    method @NonNull public android.content.ComponentName getService();
+    method @NonNull public android.os.Bundle getTransientExtras();
+    method public long getTriggerContentMaxDelay();
+    method public long getTriggerContentUpdateDelay();
+    method @Nullable public android.app.job.JobInfo.TriggerContentUri[] getTriggerContentUris();
+    method public boolean isExpedited();
+    method public boolean isImportantWhileForeground();
+    method public boolean isPeriodic();
+    method public boolean isPersisted();
+    method public boolean isPrefetch();
+    method public boolean isRequireBatteryNotLow();
+    method public boolean isRequireCharging();
+    method public boolean isRequireDeviceIdle();
+    method public boolean isRequireStorageNotLow();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BACKOFF_POLICY_EXPONENTIAL = 1; // 0x1
+    field public static final int BACKOFF_POLICY_LINEAR = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobInfo> CREATOR;
+    field public static final long DEFAULT_INITIAL_BACKOFF_MILLIS = 30000L; // 0x7530L
+    field public static final long MAX_BACKOFF_DELAY_MILLIS = 18000000L; // 0x112a880L
+    field public static final int NETWORK_BYTES_UNKNOWN = -1; // 0xffffffff
+    field public static final int NETWORK_TYPE_ANY = 1; // 0x1
+    field public static final int NETWORK_TYPE_CELLULAR = 4; // 0x4
+    field @Deprecated public static final int NETWORK_TYPE_METERED = 4; // 0x4
+    field public static final int NETWORK_TYPE_NONE = 0; // 0x0
+    field public static final int NETWORK_TYPE_NOT_ROAMING = 3; // 0x3
+    field public static final int NETWORK_TYPE_UNMETERED = 2; // 0x2
+  }
+
+  public static final class JobInfo.Builder {
+    ctor public JobInfo.Builder(int, @NonNull android.content.ComponentName);
+    method public android.app.job.JobInfo.Builder addTriggerContentUri(@NonNull android.app.job.JobInfo.TriggerContentUri);
+    method public android.app.job.JobInfo build();
+    method public android.app.job.JobInfo.Builder setBackoffCriteria(long, int);
+    method public android.app.job.JobInfo.Builder setClipData(@Nullable android.content.ClipData, int);
+    method public android.app.job.JobInfo.Builder setEstimatedNetworkBytes(long, long);
+    method @NonNull public android.app.job.JobInfo.Builder setExpedited(boolean);
+    method public android.app.job.JobInfo.Builder setExtras(@NonNull android.os.PersistableBundle);
+    method @Deprecated public android.app.job.JobInfo.Builder setImportantWhileForeground(boolean);
+    method public android.app.job.JobInfo.Builder setMinimumLatency(long);
+    method public android.app.job.JobInfo.Builder setOverrideDeadline(long);
+    method public android.app.job.JobInfo.Builder setPeriodic(long);
+    method public android.app.job.JobInfo.Builder setPeriodic(long, long);
+    method @RequiresPermission(android.Manifest.permission.RECEIVE_BOOT_COMPLETED) public android.app.job.JobInfo.Builder setPersisted(boolean);
+    method public android.app.job.JobInfo.Builder setPrefetch(boolean);
+    method public android.app.job.JobInfo.Builder setRequiredNetwork(@Nullable android.net.NetworkRequest);
+    method public android.app.job.JobInfo.Builder setRequiredNetworkType(int);
+    method public android.app.job.JobInfo.Builder setRequiresBatteryNotLow(boolean);
+    method public android.app.job.JobInfo.Builder setRequiresCharging(boolean);
+    method public android.app.job.JobInfo.Builder setRequiresDeviceIdle(boolean);
+    method public android.app.job.JobInfo.Builder setRequiresStorageNotLow(boolean);
+    method public android.app.job.JobInfo.Builder setTransientExtras(@NonNull android.os.Bundle);
+    method public android.app.job.JobInfo.Builder setTriggerContentMaxDelay(long);
+    method public android.app.job.JobInfo.Builder setTriggerContentUpdateDelay(long);
+  }
+
+  public static final class JobInfo.TriggerContentUri implements android.os.Parcelable {
+    ctor public JobInfo.TriggerContentUri(@NonNull android.net.Uri, int);
+    method public int describeContents();
+    method public int getFlags();
+    method public android.net.Uri getUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobInfo.TriggerContentUri> CREATOR;
+    field public static final int FLAG_NOTIFY_FOR_DESCENDANTS = 1; // 0x1
+  }
+
+  public class JobParameters implements android.os.Parcelable {
+    method public void completeWork(@NonNull android.app.job.JobWorkItem);
+    method @Nullable public android.app.job.JobWorkItem dequeueWork();
+    method public int describeContents();
+    method @Nullable public android.content.ClipData getClipData();
+    method public int getClipGrantFlags();
+    method @NonNull public android.os.PersistableBundle getExtras();
+    method public int getJobId();
+    method @Nullable public android.net.Network getNetwork();
+    method public int getStopReason();
+    method @NonNull public android.os.Bundle getTransientExtras();
+    method @Nullable public String[] getTriggeredContentAuthorities();
+    method @Nullable public android.net.Uri[] getTriggeredContentUris();
+    method public boolean isExpeditedJob();
+    method public boolean isOverrideDeadlineExpired();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobParameters> CREATOR;
+    field public static final int STOP_REASON_APP_STANDBY = 12; // 0xc
+    field public static final int STOP_REASON_BACKGROUND_RESTRICTION = 11; // 0xb
+    field public static final int STOP_REASON_CANCELLED_BY_APP = 1; // 0x1
+    field public static final int STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW = 5; // 0x5
+    field public static final int STOP_REASON_CONSTRAINT_CHARGING = 6; // 0x6
+    field public static final int STOP_REASON_CONSTRAINT_CONNECTIVITY = 7; // 0x7
+    field public static final int STOP_REASON_CONSTRAINT_DEVICE_IDLE = 8; // 0x8
+    field public static final int STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW = 9; // 0x9
+    field public static final int STOP_REASON_DEVICE_STATE = 4; // 0x4
+    field public static final int STOP_REASON_PREEMPT = 2; // 0x2
+    field public static final int STOP_REASON_QUOTA = 10; // 0xa
+    field public static final int STOP_REASON_SYSTEM_PROCESSING = 14; // 0xe
+    field public static final int STOP_REASON_TIMEOUT = 3; // 0x3
+    field public static final int STOP_REASON_UNDEFINED = 0; // 0x0
+    field public static final int STOP_REASON_USER = 13; // 0xd
+  }
+
+  public abstract class JobScheduler {
+    ctor public JobScheduler();
+    method public abstract void cancel(int);
+    method public abstract void cancelAll();
+    method public abstract int enqueue(@NonNull android.app.job.JobInfo, @NonNull android.app.job.JobWorkItem);
+    method @NonNull public abstract java.util.List<android.app.job.JobInfo> getAllPendingJobs();
+    method @Nullable public abstract android.app.job.JobInfo getPendingJob(int);
+    method public abstract int schedule(@NonNull android.app.job.JobInfo);
+    field public static final int RESULT_FAILURE = 0; // 0x0
+    field public static final int RESULT_SUCCESS = 1; // 0x1
+  }
+
+  public abstract class JobService extends android.app.Service {
+    ctor public JobService();
+    method public final void jobFinished(android.app.job.JobParameters, boolean);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract boolean onStartJob(android.app.job.JobParameters);
+    method public abstract boolean onStopJob(android.app.job.JobParameters);
+    field public static final String PERMISSION_BIND = "android.permission.BIND_JOB_SERVICE";
+  }
+
+  public abstract class JobServiceEngine {
+    ctor public JobServiceEngine(android.app.Service);
+    method public final android.os.IBinder getBinder();
+    method public void jobFinished(android.app.job.JobParameters, boolean);
+    method public abstract boolean onStartJob(android.app.job.JobParameters);
+    method public abstract boolean onStopJob(android.app.job.JobParameters);
+  }
+
+  public final class JobWorkItem implements android.os.Parcelable {
+    ctor public JobWorkItem(android.content.Intent);
+    ctor public JobWorkItem(android.content.Intent, long, long);
+    method public int describeContents();
+    method public int getDeliveryCount();
+    method public long getEstimatedNetworkDownloadBytes();
+    method public long getEstimatedNetworkUploadBytes();
+    method public android.content.Intent getIntent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobWorkItem> CREATOR;
+  }
+
+}
+
+package android.app.people {
+
+  public final class ConversationStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getActivity();
+    method public int getAvailability();
+    method @Nullable public CharSequence getDescription();
+    method public long getEndTimeMillis();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @NonNull public String getId();
+    method public long getStartTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ACTIVITY_ANNIVERSARY = 2; // 0x2
+    field public static final int ACTIVITY_AUDIO = 4; // 0x4
+    field public static final int ACTIVITY_BIRTHDAY = 1; // 0x1
+    field public static final int ACTIVITY_GAME = 6; // 0x6
+    field public static final int ACTIVITY_LOCATION = 7; // 0x7
+    field public static final int ACTIVITY_NEW_STORY = 3; // 0x3
+    field public static final int ACTIVITY_OTHER = 0; // 0x0
+    field public static final int ACTIVITY_UPCOMING_BIRTHDAY = 8; // 0x8
+    field public static final int ACTIVITY_VIDEO = 5; // 0x5
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_BUSY = 1; // 0x1
+    field public static final int AVAILABILITY_OFFLINE = 2; // 0x2
+    field public static final int AVAILABILITY_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.people.ConversationStatus> CREATOR;
+  }
+
+  public static final class ConversationStatus.Builder {
+    ctor public ConversationStatus.Builder(@NonNull String, @NonNull int);
+    method @NonNull public android.app.people.ConversationStatus build();
+    method @NonNull public android.app.people.ConversationStatus.Builder setAvailability(int);
+    method @NonNull public android.app.people.ConversationStatus.Builder setDescription(@Nullable CharSequence);
+    method @NonNull public android.app.people.ConversationStatus.Builder setEndTimeMillis(long);
+    method @NonNull public android.app.people.ConversationStatus.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.people.ConversationStatus.Builder setStartTimeMillis(long);
+  }
+
+  public final class PeopleManager {
+    method public void addOrUpdateStatus(@NonNull String, @NonNull android.app.people.ConversationStatus);
+    method public void clearStatus(@NonNull String, @NonNull String);
+    method public void clearStatuses(@NonNull String);
+    method @NonNull public java.util.List<android.app.people.ConversationStatus> getStatuses(@NonNull String);
+  }
+
+}
+
+package android.app.slice {
+
+  public final class Slice implements android.os.Parcelable {
+    ctor protected Slice(android.os.Parcel);
+    method public int describeContents();
+    method public java.util.List<java.lang.String> getHints();
+    method public java.util.List<android.app.slice.SliceItem> getItems();
+    method @Nullable public android.app.slice.SliceSpec getSpec();
+    method public android.net.Uri getUri();
+    method public boolean isCallerNeeded();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.Slice> CREATOR;
+    field public static final String EXTRA_RANGE_VALUE = "android.app.slice.extra.RANGE_VALUE";
+    field public static final String EXTRA_TOGGLE_STATE = "android.app.slice.extra.TOGGLE_STATE";
+    field public static final String HINT_ACTIONS = "actions";
+    field public static final String HINT_ERROR = "error";
+    field public static final String HINT_HORIZONTAL = "horizontal";
+    field public static final String HINT_KEYWORDS = "keywords";
+    field public static final String HINT_LARGE = "large";
+    field public static final String HINT_LAST_UPDATED = "last_updated";
+    field public static final String HINT_LIST = "list";
+    field public static final String HINT_LIST_ITEM = "list_item";
+    field public static final String HINT_NO_TINT = "no_tint";
+    field public static final String HINT_PARTIAL = "partial";
+    field public static final String HINT_PERMISSION_REQUEST = "permission_request";
+    field public static final String HINT_SEE_MORE = "see_more";
+    field public static final String HINT_SELECTED = "selected";
+    field public static final String HINT_SHORTCUT = "shortcut";
+    field public static final String HINT_SUMMARY = "summary";
+    field public static final String HINT_TITLE = "title";
+    field public static final String HINT_TTL = "ttl";
+    field public static final String SUBTYPE_COLOR = "color";
+    field public static final String SUBTYPE_CONTENT_DESCRIPTION = "content_description";
+    field public static final String SUBTYPE_LAYOUT_DIRECTION = "layout_direction";
+    field public static final String SUBTYPE_MAX = "max";
+    field public static final String SUBTYPE_MESSAGE = "message";
+    field public static final String SUBTYPE_MILLIS = "millis";
+    field public static final String SUBTYPE_PRIORITY = "priority";
+    field public static final String SUBTYPE_RANGE = "range";
+    field public static final String SUBTYPE_SOURCE = "source";
+    field public static final String SUBTYPE_TOGGLE = "toggle";
+    field public static final String SUBTYPE_VALUE = "value";
+  }
+
+  public static class Slice.Builder {
+    ctor public Slice.Builder(@NonNull android.net.Uri, android.app.slice.SliceSpec);
+    ctor public Slice.Builder(@NonNull android.app.slice.Slice.Builder);
+    method public android.app.slice.Slice.Builder addAction(@NonNull android.app.PendingIntent, @NonNull android.app.slice.Slice, @Nullable String);
+    method public android.app.slice.Slice.Builder addBundle(android.os.Bundle, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addHints(java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addIcon(android.graphics.drawable.Icon, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addInt(int, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addLong(long, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addRemoteInput(android.app.RemoteInput, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addSubSlice(@NonNull android.app.slice.Slice, @Nullable String);
+    method public android.app.slice.Slice.Builder addText(CharSequence, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice build();
+    method public android.app.slice.Slice.Builder setCallerNeeded(boolean);
+  }
+
+  public final class SliceItem implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.app.PendingIntent getAction();
+    method public android.os.Bundle getBundle();
+    method public String getFormat();
+    method @NonNull public java.util.List<java.lang.String> getHints();
+    method public android.graphics.drawable.Icon getIcon();
+    method public int getInt();
+    method public long getLong();
+    method public android.app.RemoteInput getRemoteInput();
+    method public android.app.slice.Slice getSlice();
+    method public String getSubType();
+    method public CharSequence getText();
+    method public boolean hasHint(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.SliceItem> CREATOR;
+    field public static final String FORMAT_ACTION = "action";
+    field public static final String FORMAT_BUNDLE = "bundle";
+    field public static final String FORMAT_IMAGE = "image";
+    field public static final String FORMAT_INT = "int";
+    field public static final String FORMAT_LONG = "long";
+    field public static final String FORMAT_REMOTE_INPUT = "input";
+    field public static final String FORMAT_SLICE = "slice";
+    field public static final String FORMAT_TEXT = "text";
+  }
+
+  public class SliceManager {
+    method @Nullable public android.app.slice.Slice bindSlice(@NonNull android.net.Uri, @NonNull java.util.Set<android.app.slice.SliceSpec>);
+    method @Nullable public android.app.slice.Slice bindSlice(@NonNull android.content.Intent, @NonNull java.util.Set<android.app.slice.SliceSpec>);
+    method public int checkSlicePermission(@NonNull android.net.Uri, int, int);
+    method @NonNull public java.util.List<android.net.Uri> getPinnedSlices();
+    method @NonNull public java.util.Set<android.app.slice.SliceSpec> getPinnedSpecs(android.net.Uri);
+    method @NonNull @WorkerThread public java.util.Collection<android.net.Uri> getSliceDescendants(@NonNull android.net.Uri);
+    method public void grantSlicePermission(@NonNull String, @NonNull android.net.Uri);
+    method @Nullable public android.net.Uri mapIntentToUri(@NonNull android.content.Intent);
+    method public void pinSlice(@NonNull android.net.Uri, @NonNull java.util.Set<android.app.slice.SliceSpec>);
+    method public void revokeSlicePermission(@NonNull String, @NonNull android.net.Uri);
+    method public void unpinSlice(@NonNull android.net.Uri);
+    field public static final String CATEGORY_SLICE = "android.app.slice.category.SLICE";
+    field public static final String SLICE_METADATA_KEY = "android.metadata.SLICE_URI";
+  }
+
+  public class SliceMetrics {
+    ctor public SliceMetrics(@NonNull android.content.Context, @NonNull android.net.Uri);
+    method public void logHidden();
+    method public void logTouch(int, @NonNull android.net.Uri);
+    method public void logVisible();
+  }
+
+  public abstract class SliceProvider extends android.content.ContentProvider {
+    ctor public SliceProvider(@NonNull java.lang.String...);
+    ctor public SliceProvider();
+    method public final int delete(android.net.Uri, String, String[]);
+    method public final String getType(android.net.Uri);
+    method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public android.app.slice.Slice onBindSlice(android.net.Uri, java.util.Set<android.app.slice.SliceSpec>);
+    method @NonNull public android.app.PendingIntent onCreatePermissionRequest(android.net.Uri);
+    method @NonNull public java.util.Collection<android.net.Uri> onGetSliceDescendants(@NonNull android.net.Uri);
+    method @NonNull public android.net.Uri onMapIntentToUri(android.content.Intent);
+    method public void onSlicePinned(android.net.Uri);
+    method public void onSliceUnpinned(android.net.Uri);
+    method public final android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method public final android.database.Cursor query(android.net.Uri, String[], String, String[], String, android.os.CancellationSignal);
+    method public final android.database.Cursor query(android.net.Uri, String[], android.os.Bundle, android.os.CancellationSignal);
+    method public final int update(android.net.Uri, android.content.ContentValues, String, String[]);
+    field public static final String SLICE_TYPE = "vnd.android.slice";
+  }
+
+  public final class SliceSpec implements android.os.Parcelable {
+    ctor public SliceSpec(@NonNull String, int);
+    method public boolean canRender(@NonNull android.app.slice.SliceSpec);
+    method public int describeContents();
+    method public int getRevision();
+    method public String getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.SliceSpec> CREATOR;
+  }
+
+}
+
+package android.app.usage {
+
+  public final class ConfigurationStats implements android.os.Parcelable {
+    ctor public ConfigurationStats(android.app.usage.ConfigurationStats);
+    method public int describeContents();
+    method public int getActivationCount();
+    method public android.content.res.Configuration getConfiguration();
+    method public long getFirstTimeStamp();
+    method public long getLastTimeActive();
+    method public long getLastTimeStamp();
+    method public long getTotalTimeActive();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.ConfigurationStats> CREATOR;
+  }
+
+  public final class EventStats implements android.os.Parcelable {
+    ctor public EventStats(android.app.usage.EventStats);
+    method public void add(android.app.usage.EventStats);
+    method public int describeContents();
+    method public int getCount();
+    method public int getEventType();
+    method public long getFirstTimeStamp();
+    method public long getLastEventTime();
+    method public long getLastTimeStamp();
+    method public long getTotalTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.EventStats> CREATOR;
+  }
+
+  public final class ExternalStorageStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAppBytes();
+    method public long getAudioBytes();
+    method public long getImageBytes();
+    method public long getTotalBytes();
+    method public long getVideoBytes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.ExternalStorageStats> CREATOR;
+  }
+
+  public final class NetworkStats implements java.lang.AutoCloseable {
+    method public void close();
+    method public boolean getNextBucket(android.app.usage.NetworkStats.Bucket);
+    method public boolean hasNextBucket();
+  }
+
+  public static class NetworkStats.Bucket {
+    ctor public NetworkStats.Bucket();
+    method public int getDefaultNetworkStatus();
+    method public long getEndTimeStamp();
+    method public int getMetered();
+    method public int getRoaming();
+    method public long getRxBytes();
+    method public long getRxPackets();
+    method public long getStartTimeStamp();
+    method public int getState();
+    method public int getTag();
+    method public long getTxBytes();
+    method public long getTxPackets();
+    method public int getUid();
+    field public static final int DEFAULT_NETWORK_ALL = -1; // 0xffffffff
+    field public static final int DEFAULT_NETWORK_NO = 1; // 0x1
+    field public static final int DEFAULT_NETWORK_YES = 2; // 0x2
+    field public static final int METERED_ALL = -1; // 0xffffffff
+    field public static final int METERED_NO = 1; // 0x1
+    field public static final int METERED_YES = 2; // 0x2
+    field public static final int ROAMING_ALL = -1; // 0xffffffff
+    field public static final int ROAMING_NO = 1; // 0x1
+    field public static final int ROAMING_YES = 2; // 0x2
+    field public static final int STATE_ALL = -1; // 0xffffffff
+    field public static final int STATE_DEFAULT = 1; // 0x1
+    field public static final int STATE_FOREGROUND = 2; // 0x2
+    field public static final int TAG_NONE = 0; // 0x0
+    field public static final int UID_ALL = -1; // 0xffffffff
+    field public static final int UID_REMOVED = -4; // 0xfffffffc
+    field public static final int UID_TETHERING = -5; // 0xfffffffb
+  }
+
+  public class NetworkStatsManager {
+    method @WorkerThread public android.app.usage.NetworkStats queryDetails(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUid(int, String, long, long, int) throws java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTag(int, String, long, long, int, int) throws java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTagState(int, String, long, long, int, int, int) throws java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats querySummary(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForDevice(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForUser(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method public void registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback);
+    method public void registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback, @Nullable android.os.Handler);
+    method public void unregisterUsageCallback(android.app.usage.NetworkStatsManager.UsageCallback);
+  }
+
+  public abstract static class NetworkStatsManager.UsageCallback {
+    ctor public NetworkStatsManager.UsageCallback();
+    method public abstract void onThresholdReached(int, String);
+  }
+
+  public final class StorageStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAppBytes();
+    method public long getCacheBytes();
+    method public long getDataBytes();
+    method public long getExternalCacheBytes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR;
+  }
+
+  public class StorageStatsManager {
+    method @WorkerThread public long getFreeBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @WorkerThread public long getTotalBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @NonNull @WorkerThread public android.app.usage.ExternalStorageStats queryExternalStatsForUser(@NonNull java.util.UUID, @NonNull android.os.UserHandle) throws java.io.IOException;
+    method @NonNull @WorkerThread public android.app.usage.StorageStats queryStatsForPackage(@NonNull java.util.UUID, @NonNull String, @NonNull android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @WorkerThread public android.app.usage.StorageStats queryStatsForUid(@NonNull java.util.UUID, int) throws java.io.IOException;
+    method @NonNull @WorkerThread public android.app.usage.StorageStats queryStatsForUser(@NonNull java.util.UUID, @NonNull android.os.UserHandle) throws java.io.IOException;
+  }
+
+  public final class UsageEvents implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getNextEvent(android.app.usage.UsageEvents.Event);
+    method public boolean hasNextEvent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.UsageEvents> CREATOR;
+  }
+
+  public static final class UsageEvents.Event {
+    ctor public UsageEvents.Event();
+    method public int getAppStandbyBucket();
+    method public String getClassName();
+    method public android.content.res.Configuration getConfiguration();
+    method public int getEventType();
+    method public String getPackageName();
+    method public String getShortcutId();
+    method public long getTimeStamp();
+    field public static final int ACTIVITY_PAUSED = 2; // 0x2
+    field public static final int ACTIVITY_RESUMED = 1; // 0x1
+    field public static final int ACTIVITY_STOPPED = 23; // 0x17
+    field public static final int CONFIGURATION_CHANGE = 5; // 0x5
+    field public static final int DEVICE_SHUTDOWN = 26; // 0x1a
+    field public static final int DEVICE_STARTUP = 27; // 0x1b
+    field public static final int FOREGROUND_SERVICE_START = 19; // 0x13
+    field public static final int FOREGROUND_SERVICE_STOP = 20; // 0x14
+    field public static final int KEYGUARD_HIDDEN = 18; // 0x12
+    field public static final int KEYGUARD_SHOWN = 17; // 0x11
+    field @Deprecated public static final int MOVE_TO_BACKGROUND = 2; // 0x2
+    field @Deprecated public static final int MOVE_TO_FOREGROUND = 1; // 0x1
+    field public static final int NONE = 0; // 0x0
+    field public static final int SCREEN_INTERACTIVE = 15; // 0xf
+    field public static final int SCREEN_NON_INTERACTIVE = 16; // 0x10
+    field public static final int SHORTCUT_INVOCATION = 8; // 0x8
+    field public static final int STANDBY_BUCKET_CHANGED = 11; // 0xb
+    field public static final int USER_INTERACTION = 7; // 0x7
+  }
+
+  public final class UsageStats implements android.os.Parcelable {
+    ctor public UsageStats(android.app.usage.UsageStats);
+    method public void add(android.app.usage.UsageStats);
+    method public int describeContents();
+    method public long getFirstTimeStamp();
+    method public long getLastTimeForegroundServiceUsed();
+    method public long getLastTimeStamp();
+    method public long getLastTimeUsed();
+    method public long getLastTimeVisible();
+    method public String getPackageName();
+    method public long getTotalTimeForegroundServiceUsed();
+    method public long getTotalTimeInForeground();
+    method public long getTotalTimeVisible();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.UsageStats> CREATOR;
+  }
+
+  public final class UsageStatsManager {
+    method public int getAppStandbyBucket();
+    method public boolean isAppInactive(String);
+    method public java.util.Map<java.lang.String,android.app.usage.UsageStats> queryAndAggregateUsageStats(long, long);
+    method public java.util.List<android.app.usage.ConfigurationStats> queryConfigurations(int, long, long);
+    method public java.util.List<android.app.usage.EventStats> queryEventStats(int, long, long);
+    method public android.app.usage.UsageEvents queryEvents(long, long);
+    method public android.app.usage.UsageEvents queryEventsForSelf(long, long);
+    method public java.util.List<android.app.usage.UsageStats> queryUsageStats(int, long, long);
+    field public static final int INTERVAL_BEST = 4; // 0x4
+    field public static final int INTERVAL_DAILY = 0; // 0x0
+    field public static final int INTERVAL_MONTHLY = 2; // 0x2
+    field public static final int INTERVAL_WEEKLY = 1; // 0x1
+    field public static final int INTERVAL_YEARLY = 3; // 0x3
+    field public static final int STANDBY_BUCKET_ACTIVE = 10; // 0xa
+    field public static final int STANDBY_BUCKET_FREQUENT = 30; // 0x1e
+    field public static final int STANDBY_BUCKET_RARE = 40; // 0x28
+    field public static final int STANDBY_BUCKET_RESTRICTED = 45; // 0x2d
+    field public static final int STANDBY_BUCKET_WORKING_SET = 20; // 0x14
+  }
+
+}
+
+package android.appwidget {
+
+  public class AppWidgetHost {
+    ctor public AppWidgetHost(android.content.Context, int);
+    method public int allocateAppWidgetId();
+    method protected void clearViews();
+    method public final android.appwidget.AppWidgetHostView createView(android.content.Context, int, android.appwidget.AppWidgetProviderInfo);
+    method public static void deleteAllHosts();
+    method public void deleteAppWidgetId(int);
+    method public void deleteHost();
+    method public int[] getAppWidgetIds();
+    method public void onAppWidgetRemoved(int);
+    method protected android.appwidget.AppWidgetHostView onCreateView(android.content.Context, int, android.appwidget.AppWidgetProviderInfo);
+    method protected void onProviderChanged(int, android.appwidget.AppWidgetProviderInfo);
+    method protected void onProvidersChanged();
+    method public final void startAppWidgetConfigureActivityForResult(@NonNull android.app.Activity, int, int, int, @Nullable android.os.Bundle);
+    method public void startListening();
+    method public void stopListening();
+  }
+
+  public class AppWidgetHostView extends android.widget.FrameLayout {
+    ctor public AppWidgetHostView(android.content.Context);
+    ctor public AppWidgetHostView(android.content.Context, int, int);
+    method public int getAppWidgetId();
+    method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo();
+    method public static android.graphics.Rect getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect);
+    method protected android.view.View getDefaultView();
+    method protected android.view.View getErrorView();
+    method protected void prepareView(android.view.View);
+    method public void resetColorResources();
+    method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo);
+    method public void setColorResources(@NonNull android.util.SparseIntArray);
+    method public void setExecutor(java.util.concurrent.Executor);
+    method public void setOnLightBackground(boolean);
+    method public void updateAppWidget(android.widget.RemoteViews);
+    method public void updateAppWidgetOptions(android.os.Bundle);
+    method @Deprecated public void updateAppWidgetSize(android.os.Bundle, int, int, int, int);
+    method public void updateAppWidgetSize(@NonNull android.os.Bundle, @NonNull java.util.List<android.util.SizeF>);
+  }
+
+  public class AppWidgetManager {
+    method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName);
+    method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName, android.os.Bundle);
+    method public boolean bindAppWidgetIdIfAllowed(int, android.os.UserHandle, android.content.ComponentName, android.os.Bundle);
+    method public int[] getAppWidgetIds(android.content.ComponentName);
+    method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo(int);
+    method public android.os.Bundle getAppWidgetOptions(int);
+    method public java.util.List<android.appwidget.AppWidgetProviderInfo> getInstalledProviders();
+    method @NonNull public java.util.List<android.appwidget.AppWidgetProviderInfo> getInstalledProvidersForPackage(@NonNull String, @Nullable android.os.UserHandle);
+    method @NonNull public java.util.List<android.appwidget.AppWidgetProviderInfo> getInstalledProvidersForProfile(@Nullable android.os.UserHandle);
+    method public static android.appwidget.AppWidgetManager getInstance(android.content.Context);
+    method public boolean isRequestPinAppWidgetSupported();
+    method public void notifyAppWidgetViewDataChanged(int[], int);
+    method public void notifyAppWidgetViewDataChanged(int, int);
+    method public void partiallyUpdateAppWidget(int[], android.widget.RemoteViews);
+    method public void partiallyUpdateAppWidget(int, android.widget.RemoteViews);
+    method public boolean requestPinAppWidget(@NonNull android.content.ComponentName, @Nullable android.os.Bundle, @Nullable android.app.PendingIntent);
+    method public void updateAppWidget(int[], android.widget.RemoteViews);
+    method public void updateAppWidget(int, android.widget.RemoteViews);
+    method public void updateAppWidget(android.content.ComponentName, android.widget.RemoteViews);
+    method public void updateAppWidgetOptions(int, android.os.Bundle);
+    method public void updateAppWidgetProviderInfo(android.content.ComponentName, @Nullable String);
+    field public static final String ACTION_APPWIDGET_BIND = "android.appwidget.action.APPWIDGET_BIND";
+    field public static final String ACTION_APPWIDGET_CONFIGURE = "android.appwidget.action.APPWIDGET_CONFIGURE";
+    field public static final String ACTION_APPWIDGET_DELETED = "android.appwidget.action.APPWIDGET_DELETED";
+    field public static final String ACTION_APPWIDGET_DISABLED = "android.appwidget.action.APPWIDGET_DISABLED";
+    field public static final String ACTION_APPWIDGET_ENABLED = "android.appwidget.action.APPWIDGET_ENABLED";
+    field public static final String ACTION_APPWIDGET_HOST_RESTORED = "android.appwidget.action.APPWIDGET_HOST_RESTORED";
+    field public static final String ACTION_APPWIDGET_OPTIONS_CHANGED = "android.appwidget.action.APPWIDGET_UPDATE_OPTIONS";
+    field public static final String ACTION_APPWIDGET_PICK = "android.appwidget.action.APPWIDGET_PICK";
+    field public static final String ACTION_APPWIDGET_RESTORED = "android.appwidget.action.APPWIDGET_RESTORED";
+    field public static final String ACTION_APPWIDGET_UPDATE = "android.appwidget.action.APPWIDGET_UPDATE";
+    field public static final String EXTRA_APPWIDGET_ID = "appWidgetId";
+    field public static final String EXTRA_APPWIDGET_IDS = "appWidgetIds";
+    field public static final String EXTRA_APPWIDGET_OLD_IDS = "appWidgetOldIds";
+    field public static final String EXTRA_APPWIDGET_OPTIONS = "appWidgetOptions";
+    field public static final String EXTRA_APPWIDGET_PREVIEW = "appWidgetPreview";
+    field public static final String EXTRA_APPWIDGET_PROVIDER = "appWidgetProvider";
+    field public static final String EXTRA_APPWIDGET_PROVIDER_PROFILE = "appWidgetProviderProfile";
+    field public static final String EXTRA_CUSTOM_EXTRAS = "customExtras";
+    field public static final String EXTRA_CUSTOM_INFO = "customInfo";
+    field public static final String EXTRA_HOST_ID = "hostId";
+    field public static final int INVALID_APPWIDGET_ID = 0; // 0x0
+    field public static final String META_DATA_APPWIDGET_PROVIDER = "android.appwidget.provider";
+    field public static final String OPTION_APPWIDGET_HOST_CATEGORY = "appWidgetCategory";
+    field public static final String OPTION_APPWIDGET_MAX_HEIGHT = "appWidgetMaxHeight";
+    field public static final String OPTION_APPWIDGET_MAX_WIDTH = "appWidgetMaxWidth";
+    field public static final String OPTION_APPWIDGET_MIN_HEIGHT = "appWidgetMinHeight";
+    field public static final String OPTION_APPWIDGET_MIN_WIDTH = "appWidgetMinWidth";
+    field public static final String OPTION_APPWIDGET_RESTORE_COMPLETED = "appWidgetRestoreCompleted";
+    field public static final String OPTION_APPWIDGET_SIZES = "appWidgetSizes";
+  }
+
+  public class AppWidgetProvider extends android.content.BroadcastReceiver {
+    ctor public AppWidgetProvider();
+    method public void onAppWidgetOptionsChanged(android.content.Context, android.appwidget.AppWidgetManager, int, android.os.Bundle);
+    method public void onDeleted(android.content.Context, int[]);
+    method public void onDisabled(android.content.Context);
+    method public void onEnabled(android.content.Context);
+    method public void onReceive(android.content.Context, android.content.Intent);
+    method public void onRestored(android.content.Context, int[], int[]);
+    method public void onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]);
+  }
+
+  public class AppWidgetProviderInfo implements android.os.Parcelable {
+    ctor public AppWidgetProviderInfo();
+    ctor public AppWidgetProviderInfo(android.os.Parcel);
+    method public android.appwidget.AppWidgetProviderInfo clone();
+    method public int describeContents();
+    method @NonNull public android.content.pm.ActivityInfo getActivityInfo();
+    method public final android.os.UserHandle getProfile();
+    method @Nullable public final CharSequence loadDescription(@NonNull android.content.Context);
+    method public final android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context, int);
+    method public final String loadLabel(android.content.pm.PackageManager);
+    method public final android.graphics.drawable.Drawable loadPreviewImage(@NonNull android.content.Context, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.appwidget.AppWidgetProviderInfo> CREATOR;
+    field public static final int RESIZE_BOTH = 3; // 0x3
+    field public static final int RESIZE_HORIZONTAL = 1; // 0x1
+    field public static final int RESIZE_NONE = 0; // 0x0
+    field public static final int RESIZE_VERTICAL = 2; // 0x2
+    field public static final int WIDGET_CATEGORY_HOME_SCREEN = 1; // 0x1
+    field public static final int WIDGET_CATEGORY_KEYGUARD = 2; // 0x2
+    field public static final int WIDGET_CATEGORY_SEARCHBOX = 4; // 0x4
+    field public static final int WIDGET_FEATURE_CONFIGURATION_OPTIONAL = 4; // 0x4
+    field public static final int WIDGET_FEATURE_HIDE_FROM_PICKER = 2; // 0x2
+    field public static final int WIDGET_FEATURE_RECONFIGURABLE = 1; // 0x1
+    field public int autoAdvanceViewId;
+    field public android.content.ComponentName configure;
+    field @IdRes public int descriptionRes;
+    field public int icon;
+    field public int initialKeyguardLayout;
+    field public int initialLayout;
+    field @Deprecated public String label;
+    field public int maxResizeHeight;
+    field public int maxResizeWidth;
+    field public int minHeight;
+    field public int minResizeHeight;
+    field public int minResizeWidth;
+    field public int minWidth;
+    field public int previewImage;
+    field @IdRes public int previewLayout;
+    field public android.content.ComponentName provider;
+    field public int resizeMode;
+    field public int targetCellHeight;
+    field public int targetCellWidth;
+    field public int updatePeriodMillis;
+    field public int widgetCategory;
+    field public int widgetFeatures;
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile {
+    method public void finalize();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isA2dpPlaying(android.bluetooth.BluetoothDevice);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_PLAYING_STATE_CHANGED = "android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED";
+    field public static final int STATE_NOT_PLAYING = 11; // 0xb
+    field public static final int STATE_PLAYING = 10; // 0xa
+  }
+
+  public final class BluetoothAdapter {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean cancelDiscovery();
+    method public static boolean checkBluetoothAddress(String);
+    method public void closeProfileProxy(int, android.bluetooth.BluetoothProfile);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disable();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean enable();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, "android.permission.LOCAL_MAC_ADDRESS"}) public String getAddress();
+    method public android.bluetooth.le.BluetoothLeAdvertiser getBluetoothLeAdvertiser();
+    method public android.bluetooth.le.BluetoothLeScanner getBluetoothLeScanner();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.Set<android.bluetooth.BluetoothDevice> getBondedDevices();
+    method @Deprecated public static android.bluetooth.BluetoothAdapter getDefaultAdapter();
+    method public int getLeMaximumAdvertisingDataLength();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public String getName();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getProfileConnectionState(int);
+    method public boolean getProfileProxy(android.content.Context, android.bluetooth.BluetoothProfile.ServiceListener, int);
+    method public android.bluetooth.BluetoothDevice getRemoteDevice(String);
+    method public android.bluetooth.BluetoothDevice getRemoteDevice(byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public int getScanMode();
+    method public int getState();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean isDiscovering();
+    method public boolean isEnabled();
+    method public boolean isLe2MPhySupported();
+    method public boolean isLeCodedPhySupported();
+    method public boolean isLeExtendedAdvertisingSupported();
+    method public boolean isLePeriodicAdvertisingSupported();
+    method public boolean isMultipleAdvertisementSupported();
+    method public boolean isOffloadedFilteringSupported();
+    method public boolean isOffloadedScanBatchingSupported();
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingInsecureL2capChannel() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingInsecureRfcommWithServiceRecord(String, java.util.UUID) throws java.io.IOException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingL2capChannel() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingRfcommWithServiceRecord(String, java.util.UUID) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean setName(String);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean startDiscovery();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean startLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean startLeScan(java.util.UUID[], android.bluetooth.BluetoothAdapter.LeScanCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void stopLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_LOCAL_NAME_CHANGED = "android.bluetooth.adapter.action.LOCAL_NAME_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public static final String ACTION_REQUEST_DISCOVERABLE = "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_REQUEST_ENABLE = "android.bluetooth.adapter.action.REQUEST_ENABLE";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_SCAN_MODE_CHANGED = "android.bluetooth.adapter.action.SCAN_MODE_CHANGED";
+    field public static final String ACTION_STATE_CHANGED = "android.bluetooth.adapter.action.STATE_CHANGED";
+    field public static final int ERROR = -2147483648; // 0x80000000
+    field public static final String EXTRA_CONNECTION_STATE = "android.bluetooth.adapter.extra.CONNECTION_STATE";
+    field public static final String EXTRA_DISCOVERABLE_DURATION = "android.bluetooth.adapter.extra.DISCOVERABLE_DURATION";
+    field public static final String EXTRA_LOCAL_NAME = "android.bluetooth.adapter.extra.LOCAL_NAME";
+    field public static final String EXTRA_PREVIOUS_CONNECTION_STATE = "android.bluetooth.adapter.extra.PREVIOUS_CONNECTION_STATE";
+    field public static final String EXTRA_PREVIOUS_SCAN_MODE = "android.bluetooth.adapter.extra.PREVIOUS_SCAN_MODE";
+    field public static final String EXTRA_PREVIOUS_STATE = "android.bluetooth.adapter.extra.PREVIOUS_STATE";
+    field public static final String EXTRA_SCAN_MODE = "android.bluetooth.adapter.extra.SCAN_MODE";
+    field public static final String EXTRA_STATE = "android.bluetooth.adapter.extra.STATE";
+    field public static final int SCAN_MODE_CONNECTABLE = 21; // 0x15
+    field public static final int SCAN_MODE_CONNECTABLE_DISCOVERABLE = 23; // 0x17
+    field public static final int SCAN_MODE_NONE = 20; // 0x14
+    field public static final int STATE_CONNECTED = 2; // 0x2
+    field public static final int STATE_CONNECTING = 1; // 0x1
+    field public static final int STATE_DISCONNECTED = 0; // 0x0
+    field public static final int STATE_DISCONNECTING = 3; // 0x3
+    field public static final int STATE_OFF = 10; // 0xa
+    field public static final int STATE_ON = 12; // 0xc
+    field public static final int STATE_TURNING_OFF = 13; // 0xd
+    field public static final int STATE_TURNING_ON = 11; // 0xb
+  }
+
+  public static interface BluetoothAdapter.LeScanCallback {
+    method public void onLeScan(android.bluetooth.BluetoothDevice, int, byte[]);
+  }
+
+  public class BluetoothAssignedNumbers {
+    field public static final int AAMP_OF_AMERICA = 190; // 0xbe
+    field public static final int ACCEL_SEMICONDUCTOR = 74; // 0x4a
+    field public static final int ACE_SENSOR = 188; // 0xbc
+    field public static final int ADIDAS = 195; // 0xc3
+    field public static final int ADVANCED_PANMOBIL_SYSTEMS = 145; // 0x91
+    field public static final int AIROHA_TECHNOLOGY = 148; // 0x94
+    field public static final int ALCATEL = 36; // 0x24
+    field public static final int ALPWISE = 154; // 0x9a
+    field public static final int AMICCOM_ELECTRONICS = 192; // 0xc0
+    field public static final int APLIX = 189; // 0xbd
+    field public static final int APPLE = 76; // 0x4c
+    field public static final int APT_LICENSING = 79; // 0x4f
+    field public static final int ARCHOS = 207; // 0xcf
+    field public static final int ARP_DEVICES = 168; // 0xa8
+    field public static final int ATHEROS_COMMUNICATIONS = 69; // 0x45
+    field public static final int ATMEL = 19; // 0x13
+    field public static final int AUSTCO_COMMUNICATION_SYSTEMS = 213; // 0xd5
+    field public static final int AUTONET_MOBILE = 127; // 0x7f
+    field public static final int AVAGO = 78; // 0x4e
+    field public static final int AVM_BERLIN = 31; // 0x1f
+    field public static final int A_AND_D_ENGINEERING = 105; // 0x69
+    field public static final int A_AND_R_CAMBRIDGE = 124; // 0x7c
+    field public static final int BANDSPEED = 32; // 0x20
+    field public static final int BAND_XI_INTERNATIONAL = 100; // 0x64
+    field public static final int BDE_TECHNOLOGY = 180; // 0xb4
+    field public static final int BEATS_ELECTRONICS = 204; // 0xcc
+    field public static final int BEAUTIFUL_ENTERPRISE = 108; // 0x6c
+    field public static final int BEKEY = 178; // 0xb2
+    field public static final int BELKIN_INTERNATIONAL = 92; // 0x5c
+    field public static final int BINAURIC = 203; // 0xcb
+    field public static final int BIOSENTRONICS = 219; // 0xdb
+    field public static final int BLUEGIGA = 71; // 0x47
+    field public static final int BLUERADIOS = 133; // 0x85
+    field public static final int BLUETOOTH_SIG = 63; // 0x3f
+    field public static final int BLUETREK_TECHNOLOGIES = 151; // 0x97
+    field public static final int BOSE = 158; // 0x9e
+    field public static final int BRIARTEK = 109; // 0x6d
+    field public static final int BROADCOM = 15; // 0xf
+    field public static final int CAEN_RFID = 170; // 0xaa
+    field public static final int CAMBRIDGE_SILICON_RADIO = 10; // 0xa
+    field public static final int CATC = 52; // 0x34
+    field public static final int CINETIX = 175; // 0xaf
+    field public static final int CLARINOX_TECHNOLOGIES = 179; // 0xb3
+    field public static final int COLORFY = 156; // 0x9c
+    field public static final int COMMIL = 51; // 0x33
+    field public static final int CONEXANT_SYSTEMS = 28; // 0x1c
+    field public static final int CONNECTBLUE = 113; // 0x71
+    field public static final int CONTINENTAL_AUTOMOTIVE = 75; // 0x4b
+    field public static final int CONWISE_TECHNOLOGY = 66; // 0x42
+    field public static final int CREATIVE_TECHNOLOGY = 118; // 0x76
+    field public static final int C_TECHNOLOGIES = 38; // 0x26
+    field public static final int DANLERS = 225; // 0xe1
+    field public static final int DELORME_PUBLISHING_COMPANY = 128; // 0x80
+    field public static final int DEXCOM = 208; // 0xd0
+    field public static final int DIALOG_SEMICONDUCTOR = 210; // 0xd2
+    field public static final int DIGIANSWER = 12; // 0xc
+    field public static final int ECLIPSE = 53; // 0x35
+    field public static final int ECOTEST = 136; // 0x88
+    field public static final int ELGATO_SYSTEMS = 206; // 0xce
+    field public static final int EM_MICROELECTRONIC_MARIN = 90; // 0x5a
+    field public static final int EQUINOX_AG = 134; // 0x86
+    field public static final int ERICSSON_TECHNOLOGY = 0; // 0x0
+    field public static final int EVLUMA = 201; // 0xc9
+    field public static final int FREE2MOVE = 83; // 0x53
+    field public static final int FUNAI_ELECTRIC = 144; // 0x90
+    field public static final int GARMIN_INTERNATIONAL = 135; // 0x87
+    field public static final int GCT_SEMICONDUCTOR = 45; // 0x2d
+    field public static final int GELO = 200; // 0xc8
+    field public static final int GENEQ = 194; // 0xc2
+    field public static final int GENERAL_MOTORS = 104; // 0x68
+    field public static final int GENNUM = 59; // 0x3b
+    field public static final int GEOFORCE = 157; // 0x9d
+    field public static final int GIBSON_GUITARS = 98; // 0x62
+    field public static final int GN_NETCOM = 103; // 0x67
+    field public static final int GN_RESOUND = 137; // 0x89
+    field public static final int GOOGLE = 224; // 0xe0
+    field public static final int GREEN_THROTTLE_GAMES = 172; // 0xac
+    field public static final int GROUP_SENSE = 115; // 0x73
+    field public static final int HANLYNN_TECHNOLOGIES = 123; // 0x7b
+    field public static final int HARMAN_INTERNATIONAL = 87; // 0x57
+    field public static final int HEWLETT_PACKARD = 101; // 0x65
+    field public static final int HITACHI = 41; // 0x29
+    field public static final int HOSIDEN = 221; // 0xdd
+    field public static final int IBM = 3; // 0x3
+    field public static final int INFINEON_TECHNOLOGIES = 9; // 0x9
+    field public static final int INGENIEUR_SYSTEMGRUPPE_ZAHN = 171; // 0xab
+    field public static final int INTEGRATED_SILICON_SOLUTION = 65; // 0x41
+    field public static final int INTEGRATED_SYSTEM_SOLUTION = 57; // 0x39
+    field public static final int INTEL = 2; // 0x2
+    field public static final int INVENTEL = 30; // 0x1e
+    field public static final int IPEXTREME = 61; // 0x3d
+    field public static final int I_TECH_DYNAMIC_GLOBAL_DISTRIBUTION = 153; // 0x99
+    field public static final int JAWBONE = 138; // 0x8a
+    field public static final int JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS = 155; // 0x9b
+    field public static final int JOHNSON_CONTROLS = 185; // 0xb9
+    field public static final int J_AND_M = 82; // 0x52
+    field public static final int KAWANTECH = 212; // 0xd4
+    field public static final int KC_TECHNOLOGY = 22; // 0x16
+    field public static final int KENSINGTON_COMPUTER_PRODUCTS_GROUP = 160; // 0xa0
+    field public static final int LAIRD_TECHNOLOGIES = 119; // 0x77
+    field public static final int LESSWIRE = 121; // 0x79
+    field public static final int LG_ELECTRONICS = 196; // 0xc4
+    field public static final int LINAK = 164; // 0xa4
+    field public static final int LUCENT = 7; // 0x7
+    field public static final int LUDUS_HELSINKI = 132; // 0x84
+    field public static final int MACRONIX = 44; // 0x2c
+    field public static final int MAGNETI_MARELLI = 169; // 0xa9
+    field public static final int MANSELLA = 33; // 0x21
+    field public static final int MARVELL = 72; // 0x48
+    field public static final int MATSUSHITA_ELECTRIC = 58; // 0x3a
+    field public static final int MC10 = 202; // 0xca
+    field public static final int MEDIATEK = 70; // 0x46
+    field public static final int MESO_INTERNATIONAL = 182; // 0xb6
+    field public static final int META_WATCH = 163; // 0xa3
+    field public static final int MEWTEL_TECHNOLOGY = 47; // 0x2f
+    field public static final int MICOMMAND = 99; // 0x63
+    field public static final int MICROCHIP_TECHNOLOGY = 205; // 0xcd
+    field public static final int MICROSOFT = 6; // 0x6
+    field public static final int MINDTREE = 106; // 0x6a
+    field public static final int MISFIT_WEARABLES = 223; // 0xdf
+    field public static final int MITEL_SEMICONDUCTOR = 16; // 0x10
+    field public static final int MITSUBISHI_ELECTRIC = 20; // 0x14
+    field public static final int MOBILIAN_CORPORATION = 55; // 0x37
+    field public static final int MONSTER = 112; // 0x70
+    field public static final int MOTOROLA = 8; // 0x8
+    field public static final int MSTAR_SEMICONDUCTOR = 122; // 0x7a
+    field public static final int MUZIK = 222; // 0xde
+    field public static final int NEC = 34; // 0x22
+    field public static final int NEC_LIGHTING = 149; // 0x95
+    field public static final int NEWLOGIC = 23; // 0x17
+    field public static final int NIKE = 120; // 0x78
+    field public static final int NINE_SOLUTIONS = 102; // 0x66
+    field public static final int NOKIA_MOBILE_PHONES = 1; // 0x1
+    field public static final int NORDIC_SEMICONDUCTOR = 89; // 0x59
+    field public static final int NORWOOD_SYSTEMS = 46; // 0x2e
+    field public static final int ODM_TECHNOLOGY = 150; // 0x96
+    field public static final int OMEGAWAVE = 174; // 0xae
+    field public static final int ONSET_COMPUTER = 197; // 0xc5
+    field public static final int OPEN_INTERFACE = 39; // 0x27
+    field public static final int OTL_DYNAMICS = 165; // 0xa5
+    field public static final int PANDA_OCEAN = 166; // 0xa6
+    field public static final int PARROT = 67; // 0x43
+    field public static final int PARTHUS_TECHNOLOGIES = 14; // 0xe
+    field public static final int PASSIF_SEMICONDUCTOR = 176; // 0xb0
+    field public static final int PETER_SYSTEMTECHNIK = 173; // 0xad
+    field public static final int PHILIPS_SEMICONDUCTORS = 37; // 0x25
+    field public static final int PLANTRONICS = 85; // 0x55
+    field public static final int POLAR_ELECTRO = 107; // 0x6b
+    field public static final int POLAR_ELECTRO_EUROPE = 209; // 0xd1
+    field public static final int PROCTER_AND_GAMBLE = 220; // 0xdc
+    field public static final int QUALCOMM = 29; // 0x1d
+    field public static final int QUALCOMM_CONNECTED_EXPERIENCES = 216; // 0xd8
+    field public static final int QUALCOMM_INNOVATION_CENTER = 184; // 0xb8
+    field public static final int QUALCOMM_LABS = 140; // 0x8c
+    field public static final int QUALCOMM_TECHNOLOGIES = 215; // 0xd7
+    field public static final int QUINTIC = 142; // 0x8e
+    field public static final int QUUPPA = 199; // 0xc7
+    field public static final int RALINK_TECHNOLOGY = 91; // 0x5b
+    field public static final int RDA_MICROELECTRONICS = 97; // 0x61
+    field public static final int REALTEK_SEMICONDUCTOR = 93; // 0x5d
+    field public static final int RED_M = 50; // 0x32
+    field public static final int RENESAS_TECHNOLOGY = 54; // 0x36
+    field public static final int RESEARCH_IN_MOTION = 60; // 0x3c
+    field public static final int RF_MICRO_DEVICES = 40; // 0x28
+    field public static final int RIVIERAWAVES = 96; // 0x60
+    field public static final int ROHDE_AND_SCHWARZ = 25; // 0x19
+    field public static final int RTX_TELECOM = 21; // 0x15
+    field public static final int SAMSUNG_ELECTRONICS = 117; // 0x75
+    field public static final int SARIS_CYCLING_GROUP = 177; // 0xb1
+    field public static final int SEERS_TECHNOLOGY = 125; // 0x7d
+    field public static final int SEIKO_EPSON = 64; // 0x40
+    field public static final int SELFLY = 198; // 0xc6
+    field public static final int SEMILINK = 226; // 0xe2
+    field public static final int SENNHEISER_COMMUNICATIONS = 130; // 0x82
+    field public static final int SHANGHAI_SUPER_SMART_ELECTRONICS = 114; // 0x72
+    field public static final int SHENZHEN_EXCELSECU_DATA_TECHNOLOGY = 193; // 0xc1
+    field public static final int SIGNIA_TECHNOLOGIES = 27; // 0x1b
+    field public static final int SILICON_WAVE = 11; // 0xb
+    field public static final int SIRF_TECHNOLOGY = 80; // 0x50
+    field public static final int SOCKET_MOBILE = 68; // 0x44
+    field public static final int SONY_ERICSSON = 86; // 0x56
+    field public static final int SOUND_ID = 111; // 0x6f
+    field public static final int SPORTS_TRACKING_TECHNOLOGIES = 126; // 0x7e
+    field public static final int SR_MEDIZINELEKTRONIK = 161; // 0xa1
+    field public static final int STACCATO_COMMUNICATIONS = 77; // 0x4d
+    field public static final int STALMART_TECHNOLOGY = 191; // 0xbf
+    field public static final int STARKEY_LABORATORIES = 186; // 0xba
+    field public static final int STOLLMAN_E_PLUS_V = 143; // 0x8f
+    field public static final int STONESTREET_ONE = 94; // 0x5e
+    field public static final int ST_MICROELECTRONICS = 48; // 0x30
+    field public static final int SUMMIT_DATA_COMMUNICATIONS = 110; // 0x6e
+    field public static final int SUUNTO = 159; // 0x9f
+    field public static final int SWIRL_NETWORKS = 181; // 0xb5
+    field public static final int SYMBOL_TECHNOLOGIES = 42; // 0x2a
+    field public static final int SYNOPSYS = 49; // 0x31
+    field public static final int SYSTEMS_AND_CHIPS = 62; // 0x3e
+    field public static final int S_POWER_ELECTRONICS = 187; // 0xbb
+    field public static final int TAIXINGBANG_TECHNOLOGY = 211; // 0xd3
+    field public static final int TENOVIS = 43; // 0x2b
+    field public static final int TERAX = 56; // 0x38
+    field public static final int TEXAS_INSTRUMENTS = 13; // 0xd
+    field public static final int THINKOPTICS = 146; // 0x92
+    field public static final int THREECOM = 5; // 0x5
+    field public static final int THREE_DIJOY = 84; // 0x54
+    field public static final int THREE_DSP = 73; // 0x49
+    field public static final int TIMEKEEPING_SYSTEMS = 131; // 0x83
+    field public static final int TIMEX_GROUP_USA = 214; // 0xd6
+    field public static final int TOPCORN_POSITIONING_SYSTEMS = 139; // 0x8b
+    field public static final int TOSHIBA = 4; // 0x4
+    field public static final int TRANSILICA = 24; // 0x18
+    field public static final int TRELAB = 183; // 0xb7
+    field public static final int TTPCOM = 26; // 0x1a
+    field public static final int TXTR = 218; // 0xda
+    field public static final int TZERO_TECHNOLOGIES = 81; // 0x51
+    field public static final int UNIVERSAL_ELECTRONICS = 147; // 0x93
+    field public static final int VERTU = 162; // 0xa2
+    field public static final int VISTEON = 167; // 0xa7
+    field public static final int VIZIO = 88; // 0x58
+    field public static final int VOYETRA_TURTLE_BEACH = 217; // 0xd9
+    field public static final int WAVEPLUS_TECHNOLOGY = 35; // 0x23
+    field public static final int WICENTRIC = 95; // 0x5f
+    field public static final int WIDCOMM = 17; // 0x11
+    field public static final int WUXI_VIMICRO = 129; // 0x81
+    field public static final int ZEEVO = 18; // 0x12
+    field public static final int ZER01_TV = 152; // 0x98
+    field public static final int ZOMM = 116; // 0x74
+    field public static final int ZSCAN_SOFTWARE = 141; // 0x8d
+  }
+
+  public final class BluetoothClass implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDeviceClass();
+    method public int getMajorDeviceClass();
+    method public boolean hasService(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothClass> CREATOR;
+  }
+
+  public static class BluetoothClass.Device {
+    ctor public BluetoothClass.Device();
+    field public static final int AUDIO_VIDEO_CAMCORDER = 1076; // 0x434
+    field public static final int AUDIO_VIDEO_CAR_AUDIO = 1056; // 0x420
+    field public static final int AUDIO_VIDEO_HANDSFREE = 1032; // 0x408
+    field public static final int AUDIO_VIDEO_HEADPHONES = 1048; // 0x418
+    field public static final int AUDIO_VIDEO_HIFI_AUDIO = 1064; // 0x428
+    field public static final int AUDIO_VIDEO_LOUDSPEAKER = 1044; // 0x414
+    field public static final int AUDIO_VIDEO_MICROPHONE = 1040; // 0x410
+    field public static final int AUDIO_VIDEO_PORTABLE_AUDIO = 1052; // 0x41c
+    field public static final int AUDIO_VIDEO_SET_TOP_BOX = 1060; // 0x424
+    field public static final int AUDIO_VIDEO_UNCATEGORIZED = 1024; // 0x400
+    field public static final int AUDIO_VIDEO_VCR = 1068; // 0x42c
+    field public static final int AUDIO_VIDEO_VIDEO_CAMERA = 1072; // 0x430
+    field public static final int AUDIO_VIDEO_VIDEO_CONFERENCING = 1088; // 0x440
+    field public static final int AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER = 1084; // 0x43c
+    field public static final int AUDIO_VIDEO_VIDEO_GAMING_TOY = 1096; // 0x448
+    field public static final int AUDIO_VIDEO_VIDEO_MONITOR = 1080; // 0x438
+    field public static final int AUDIO_VIDEO_WEARABLE_HEADSET = 1028; // 0x404
+    field public static final int COMPUTER_DESKTOP = 260; // 0x104
+    field public static final int COMPUTER_HANDHELD_PC_PDA = 272; // 0x110
+    field public static final int COMPUTER_LAPTOP = 268; // 0x10c
+    field public static final int COMPUTER_PALM_SIZE_PC_PDA = 276; // 0x114
+    field public static final int COMPUTER_SERVER = 264; // 0x108
+    field public static final int COMPUTER_UNCATEGORIZED = 256; // 0x100
+    field public static final int COMPUTER_WEARABLE = 280; // 0x118
+    field public static final int HEALTH_BLOOD_PRESSURE = 2308; // 0x904
+    field public static final int HEALTH_DATA_DISPLAY = 2332; // 0x91c
+    field public static final int HEALTH_GLUCOSE = 2320; // 0x910
+    field public static final int HEALTH_PULSE_OXIMETER = 2324; // 0x914
+    field public static final int HEALTH_PULSE_RATE = 2328; // 0x918
+    field public static final int HEALTH_THERMOMETER = 2312; // 0x908
+    field public static final int HEALTH_UNCATEGORIZED = 2304; // 0x900
+    field public static final int HEALTH_WEIGHING = 2316; // 0x90c
+    field public static final int PHONE_CELLULAR = 516; // 0x204
+    field public static final int PHONE_CORDLESS = 520; // 0x208
+    field public static final int PHONE_ISDN = 532; // 0x214
+    field public static final int PHONE_MODEM_OR_GATEWAY = 528; // 0x210
+    field public static final int PHONE_SMART = 524; // 0x20c
+    field public static final int PHONE_UNCATEGORIZED = 512; // 0x200
+    field public static final int TOY_CONTROLLER = 2064; // 0x810
+    field public static final int TOY_DOLL_ACTION_FIGURE = 2060; // 0x80c
+    field public static final int TOY_GAME = 2068; // 0x814
+    field public static final int TOY_ROBOT = 2052; // 0x804
+    field public static final int TOY_UNCATEGORIZED = 2048; // 0x800
+    field public static final int TOY_VEHICLE = 2056; // 0x808
+    field public static final int WEARABLE_GLASSES = 1812; // 0x714
+    field public static final int WEARABLE_HELMET = 1808; // 0x710
+    field public static final int WEARABLE_JACKET = 1804; // 0x70c
+    field public static final int WEARABLE_PAGER = 1800; // 0x708
+    field public static final int WEARABLE_UNCATEGORIZED = 1792; // 0x700
+    field public static final int WEARABLE_WRIST_WATCH = 1796; // 0x704
+  }
+
+  public static class BluetoothClass.Device.Major {
+    ctor public BluetoothClass.Device.Major();
+    field public static final int AUDIO_VIDEO = 1024; // 0x400
+    field public static final int COMPUTER = 256; // 0x100
+    field public static final int HEALTH = 2304; // 0x900
+    field public static final int IMAGING = 1536; // 0x600
+    field public static final int MISC = 0; // 0x0
+    field public static final int NETWORKING = 768; // 0x300
+    field public static final int PERIPHERAL = 1280; // 0x500
+    field public static final int PHONE = 512; // 0x200
+    field public static final int TOY = 2048; // 0x800
+    field public static final int UNCATEGORIZED = 7936; // 0x1f00
+    field public static final int WEARABLE = 1792; // 0x700
+  }
+
+  public static final class BluetoothClass.Service {
+    ctor public BluetoothClass.Service();
+    field public static final int AUDIO = 2097152; // 0x200000
+    field public static final int CAPTURE = 524288; // 0x80000
+    field public static final int INFORMATION = 8388608; // 0x800000
+    field public static final int LIMITED_DISCOVERABILITY = 8192; // 0x2000
+    field public static final int NETWORKING = 131072; // 0x20000
+    field public static final int OBJECT_TRANSFER = 1048576; // 0x100000
+    field public static final int POSITIONING = 65536; // 0x10000
+    field public static final int RENDER = 262144; // 0x40000
+    field public static final int TELEPHONY = 4194304; // 0x400000
+  }
+
+  public final class BluetoothDevice implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean createBond();
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createInsecureL2capChannel(int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createL2capChannel(int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
+    method public int describeContents();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean fetchUuidsWithSdp();
+    method public String getAddress();
+    method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public String getAlias();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothClass getBluetoothClass();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getBondState();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public String getName();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getType();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.os.ParcelUuid[] getUuids();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int setAlias(@Nullable String);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setPairingConfirmation(boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean setPin(byte[]);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ACL_CONNECTED = "android.bluetooth.device.action.ACL_CONNECTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ACL_DISCONNECTED = "android.bluetooth.device.action.ACL_DISCONNECTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ACL_DISCONNECT_REQUESTED = "android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ALIAS_CHANGED = "android.bluetooth.device.action.ALIAS_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_BOND_STATE_CHANGED = "android.bluetooth.device.action.BOND_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CLASS_CHANGED = "android.bluetooth.device.action.CLASS_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_FOUND = "android.bluetooth.device.action.FOUND";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_NAME_CHANGED = "android.bluetooth.device.action.NAME_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_UUID = "android.bluetooth.device.action.UUID";
+    field public static final int ADDRESS_TYPE_PUBLIC = 0; // 0x0
+    field public static final int ADDRESS_TYPE_RANDOM = 1; // 0x1
+    field public static final int BOND_BONDED = 12; // 0xc
+    field public static final int BOND_BONDING = 11; // 0xb
+    field public static final int BOND_NONE = 10; // 0xa
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothDevice> CREATOR;
+    field public static final int DEVICE_TYPE_CLASSIC = 1; // 0x1
+    field public static final int DEVICE_TYPE_DUAL = 3; // 0x3
+    field public static final int DEVICE_TYPE_LE = 2; // 0x2
+    field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int ERROR = -2147483648; // 0x80000000
+    field public static final String EXTRA_BOND_STATE = "android.bluetooth.device.extra.BOND_STATE";
+    field public static final String EXTRA_CLASS = "android.bluetooth.device.extra.CLASS";
+    field public static final String EXTRA_DEVICE = "android.bluetooth.device.extra.DEVICE";
+    field public static final String EXTRA_NAME = "android.bluetooth.device.extra.NAME";
+    field public static final String EXTRA_PAIRING_KEY = "android.bluetooth.device.extra.PAIRING_KEY";
+    field public static final String EXTRA_PAIRING_VARIANT = "android.bluetooth.device.extra.PAIRING_VARIANT";
+    field public static final String EXTRA_PREVIOUS_BOND_STATE = "android.bluetooth.device.extra.PREVIOUS_BOND_STATE";
+    field public static final String EXTRA_RSSI = "android.bluetooth.device.extra.RSSI";
+    field public static final String EXTRA_UUID = "android.bluetooth.device.extra.UUID";
+    field public static final int PAIRING_VARIANT_PASSKEY_CONFIRMATION = 2; // 0x2
+    field public static final int PAIRING_VARIANT_PIN = 0; // 0x0
+    field public static final int PHY_LE_1M = 1; // 0x1
+    field public static final int PHY_LE_1M_MASK = 1; // 0x1
+    field public static final int PHY_LE_2M = 2; // 0x2
+    field public static final int PHY_LE_2M_MASK = 2; // 0x2
+    field public static final int PHY_LE_CODED = 3; // 0x3
+    field public static final int PHY_LE_CODED_MASK = 4; // 0x4
+    field public static final int PHY_OPTION_NO_PREFERRED = 0; // 0x0
+    field public static final int PHY_OPTION_S2 = 1; // 0x1
+    field public static final int PHY_OPTION_S8 = 2; // 0x2
+    field public static final int TRANSPORT_AUTO = 0; // 0x0
+    field public static final int TRANSPORT_BREDR = 1; // 0x1
+    field public static final int TRANSPORT_LE = 2; // 0x2
+  }
+
+  public final class BluetoothGatt implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void abortReliableWrite();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void abortReliableWrite(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean beginReliableWrite();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void close();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connect();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void disconnect();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean discoverServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean executeReliableWrite();
+    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method public android.bluetooth.BluetoothDevice getDevice();
+    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method public android.bluetooth.BluetoothGattService getService(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattService> getServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean readCharacteristic(android.bluetooth.BluetoothGattCharacteristic);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean readDescriptor(android.bluetooth.BluetoothGattDescriptor);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void readPhy();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean readRemoteRssi();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean requestConnectionPriority(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean requestMtu(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean setCharacteristicNotification(android.bluetooth.BluetoothGattCharacteristic, boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void setPreferredPhy(int, int, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean writeCharacteristic(android.bluetooth.BluetoothGattCharacteristic);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean writeDescriptor(android.bluetooth.BluetoothGattDescriptor);
+    field public static final int CONNECTION_PRIORITY_BALANCED = 0; // 0x0
+    field public static final int CONNECTION_PRIORITY_HIGH = 1; // 0x1
+    field public static final int CONNECTION_PRIORITY_LOW_POWER = 2; // 0x2
+    field public static final int GATT_CONNECTION_CONGESTED = 143; // 0x8f
+    field public static final int GATT_FAILURE = 257; // 0x101
+    field public static final int GATT_INSUFFICIENT_AUTHENTICATION = 5; // 0x5
+    field public static final int GATT_INSUFFICIENT_ENCRYPTION = 15; // 0xf
+    field public static final int GATT_INVALID_ATTRIBUTE_LENGTH = 13; // 0xd
+    field public static final int GATT_INVALID_OFFSET = 7; // 0x7
+    field public static final int GATT_READ_NOT_PERMITTED = 2; // 0x2
+    field public static final int GATT_REQUEST_NOT_SUPPORTED = 6; // 0x6
+    field public static final int GATT_SUCCESS = 0; // 0x0
+    field public static final int GATT_WRITE_NOT_PERMITTED = 3; // 0x3
+  }
+
+  public abstract class BluetoothGattCallback {
+    ctor public BluetoothGattCallback();
+    method public void onCharacteristicChanged(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic);
+    method public void onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int);
+    method public void onCharacteristicWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int);
+    method public void onConnectionStateChange(android.bluetooth.BluetoothGatt, int, int);
+    method public void onDescriptorRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattDescriptor, int);
+    method public void onDescriptorWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattDescriptor, int);
+    method public void onMtuChanged(android.bluetooth.BluetoothGatt, int, int);
+    method public void onPhyRead(android.bluetooth.BluetoothGatt, int, int, int);
+    method public void onPhyUpdate(android.bluetooth.BluetoothGatt, int, int, int);
+    method public void onReadRemoteRssi(android.bluetooth.BluetoothGatt, int, int);
+    method public void onReliableWriteCompleted(android.bluetooth.BluetoothGatt, int);
+    method public void onServiceChanged(@NonNull android.bluetooth.BluetoothGatt);
+    method public void onServicesDiscovered(android.bluetooth.BluetoothGatt, int);
+  }
+
+  public class BluetoothGattCharacteristic implements android.os.Parcelable {
+    ctor public BluetoothGattCharacteristic(java.util.UUID, int, int);
+    method public boolean addDescriptor(android.bluetooth.BluetoothGattDescriptor);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothGattDescriptor getDescriptor(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattDescriptor> getDescriptors();
+    method public Float getFloatValue(int, int);
+    method public int getInstanceId();
+    method public Integer getIntValue(int, int);
+    method public int getPermissions();
+    method public int getProperties();
+    method public android.bluetooth.BluetoothGattService getService();
+    method public String getStringValue(int);
+    method public java.util.UUID getUuid();
+    method public byte[] getValue();
+    method public int getWriteType();
+    method public boolean setValue(byte[]);
+    method public boolean setValue(int, int, int);
+    method public boolean setValue(int, int, int, int);
+    method public boolean setValue(String);
+    method public void setWriteType(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattCharacteristic> CREATOR;
+    field public static final int FORMAT_FLOAT = 52; // 0x34
+    field public static final int FORMAT_SFLOAT = 50; // 0x32
+    field public static final int FORMAT_SINT16 = 34; // 0x22
+    field public static final int FORMAT_SINT32 = 36; // 0x24
+    field public static final int FORMAT_SINT8 = 33; // 0x21
+    field public static final int FORMAT_UINT16 = 18; // 0x12
+    field public static final int FORMAT_UINT32 = 20; // 0x14
+    field public static final int FORMAT_UINT8 = 17; // 0x11
+    field public static final int PERMISSION_READ = 1; // 0x1
+    field public static final int PERMISSION_READ_ENCRYPTED = 2; // 0x2
+    field public static final int PERMISSION_READ_ENCRYPTED_MITM = 4; // 0x4
+    field public static final int PERMISSION_WRITE = 16; // 0x10
+    field public static final int PERMISSION_WRITE_ENCRYPTED = 32; // 0x20
+    field public static final int PERMISSION_WRITE_ENCRYPTED_MITM = 64; // 0x40
+    field public static final int PERMISSION_WRITE_SIGNED = 128; // 0x80
+    field public static final int PERMISSION_WRITE_SIGNED_MITM = 256; // 0x100
+    field public static final int PROPERTY_BROADCAST = 1; // 0x1
+    field public static final int PROPERTY_EXTENDED_PROPS = 128; // 0x80
+    field public static final int PROPERTY_INDICATE = 32; // 0x20
+    field public static final int PROPERTY_NOTIFY = 16; // 0x10
+    field public static final int PROPERTY_READ = 2; // 0x2
+    field public static final int PROPERTY_SIGNED_WRITE = 64; // 0x40
+    field public static final int PROPERTY_WRITE = 8; // 0x8
+    field public static final int PROPERTY_WRITE_NO_RESPONSE = 4; // 0x4
+    field public static final int WRITE_TYPE_DEFAULT = 2; // 0x2
+    field public static final int WRITE_TYPE_NO_RESPONSE = 1; // 0x1
+    field public static final int WRITE_TYPE_SIGNED = 4; // 0x4
+    field protected java.util.List<android.bluetooth.BluetoothGattDescriptor> mDescriptors;
+  }
+
+  public class BluetoothGattDescriptor implements android.os.Parcelable {
+    ctor public BluetoothGattDescriptor(java.util.UUID, int);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothGattCharacteristic getCharacteristic();
+    method public int getPermissions();
+    method public java.util.UUID getUuid();
+    method public byte[] getValue();
+    method public boolean setValue(byte[]);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattDescriptor> CREATOR;
+    field public static final byte[] DISABLE_NOTIFICATION_VALUE;
+    field public static final byte[] ENABLE_INDICATION_VALUE;
+    field public static final byte[] ENABLE_NOTIFICATION_VALUE;
+    field public static final int PERMISSION_READ = 1; // 0x1
+    field public static final int PERMISSION_READ_ENCRYPTED = 2; // 0x2
+    field public static final int PERMISSION_READ_ENCRYPTED_MITM = 4; // 0x4
+    field public static final int PERMISSION_WRITE = 16; // 0x10
+    field public static final int PERMISSION_WRITE_ENCRYPTED = 32; // 0x20
+    field public static final int PERMISSION_WRITE_ENCRYPTED_MITM = 64; // 0x40
+    field public static final int PERMISSION_WRITE_SIGNED = 128; // 0x80
+    field public static final int PERMISSION_WRITE_SIGNED_MITM = 256; // 0x100
+  }
+
+  public final class BluetoothGattServer implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean addService(android.bluetooth.BluetoothGattService);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void cancelConnection(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void clearServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void close();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connect(android.bluetooth.BluetoothDevice, boolean);
+    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method public android.bluetooth.BluetoothGattService getService(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattService> getServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean notifyCharacteristicChanged(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothGattCharacteristic, boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void readPhy(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean removeService(android.bluetooth.BluetoothGattService);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean sendResponse(android.bluetooth.BluetoothDevice, int, int, int, byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void setPreferredPhy(android.bluetooth.BluetoothDevice, int, int, int);
+  }
+
+  public abstract class BluetoothGattServerCallback {
+    ctor public BluetoothGattServerCallback();
+    method public void onCharacteristicReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattCharacteristic);
+    method public void onCharacteristicWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattCharacteristic, boolean, boolean, int, byte[]);
+    method public void onConnectionStateChange(android.bluetooth.BluetoothDevice, int, int);
+    method public void onDescriptorReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattDescriptor);
+    method public void onDescriptorWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattDescriptor, boolean, boolean, int, byte[]);
+    method public void onExecuteWrite(android.bluetooth.BluetoothDevice, int, boolean);
+    method public void onMtuChanged(android.bluetooth.BluetoothDevice, int);
+    method public void onNotificationSent(android.bluetooth.BluetoothDevice, int);
+    method public void onPhyRead(android.bluetooth.BluetoothDevice, int, int, int);
+    method public void onPhyUpdate(android.bluetooth.BluetoothDevice, int, int, int);
+    method public void onServiceAdded(int, android.bluetooth.BluetoothGattService);
+  }
+
+  public class BluetoothGattService implements android.os.Parcelable {
+    ctor public BluetoothGattService(java.util.UUID, int);
+    method public boolean addCharacteristic(android.bluetooth.BluetoothGattCharacteristic);
+    method public boolean addService(android.bluetooth.BluetoothGattService);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothGattCharacteristic getCharacteristic(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattCharacteristic> getCharacteristics();
+    method public java.util.List<android.bluetooth.BluetoothGattService> getIncludedServices();
+    method public int getInstanceId();
+    method public int getType();
+    method public java.util.UUID getUuid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattService> CREATOR;
+    field public static final int SERVICE_TYPE_PRIMARY = 0; // 0x0
+    field public static final int SERVICE_TYPE_SECONDARY = 1; // 0x1
+    field protected java.util.List<android.bluetooth.BluetoothGattCharacteristic> mCharacteristics;
+    field protected java.util.List<android.bluetooth.BluetoothGattService> mIncludedServices;
+  }
+
+  public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isAudioConnected(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isNoiseReductionSupported(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isVoiceRecognitionSupported(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean sendVendorSpecificResultCode(android.bluetooth.BluetoothDevice, String, String);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean startVoiceRecognition(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean stopVoiceRecognition(android.bluetooth.BluetoothDevice);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_AUDIO_STATE_CHANGED = "android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_VENDOR_SPECIFIC_HEADSET_EVENT = "android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT";
+    field public static final int AT_CMD_TYPE_ACTION = 4; // 0x4
+    field public static final int AT_CMD_TYPE_BASIC = 3; // 0x3
+    field public static final int AT_CMD_TYPE_READ = 0; // 0x0
+    field public static final int AT_CMD_TYPE_SET = 2; // 0x2
+    field public static final int AT_CMD_TYPE_TEST = 1; // 0x1
+    field public static final String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_ARGS";
+    field public static final String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD";
+    field public static final String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE";
+    field public static final int STATE_AUDIO_CONNECTED = 12; // 0xc
+    field public static final int STATE_AUDIO_CONNECTING = 11; // 0xb
+    field public static final int STATE_AUDIO_DISCONNECTED = 10; // 0xa
+    field public static final String VENDOR_RESULT_CODE_COMMAND_ANDROID = "+ANDROID";
+    field public static final String VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY = "android.bluetooth.headset.intent.category.companyid";
+  }
+
+  @Deprecated public final class BluetoothHealth implements android.bluetooth.BluetoothProfile {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connectChannelToSource(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disconnectChannel(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.os.ParcelFileDescriptor getMainChannelFd(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean registerSinkAppConfiguration(String, int, android.bluetooth.BluetoothHealthCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean unregisterAppConfiguration(android.bluetooth.BluetoothHealthAppConfiguration);
+    field @Deprecated public static final int APP_CONFIG_REGISTRATION_FAILURE = 1; // 0x1
+    field @Deprecated public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0; // 0x0
+    field @Deprecated public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3; // 0x3
+    field @Deprecated public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2; // 0x2
+    field @Deprecated public static final int CHANNEL_TYPE_RELIABLE = 10; // 0xa
+    field @Deprecated public static final int CHANNEL_TYPE_STREAMING = 11; // 0xb
+    field @Deprecated public static final int SINK_ROLE = 2; // 0x2
+    field @Deprecated public static final int SOURCE_ROLE = 1; // 0x1
+    field @Deprecated public static final int STATE_CHANNEL_CONNECTED = 2; // 0x2
+    field @Deprecated public static final int STATE_CHANNEL_CONNECTING = 1; // 0x1
+    field @Deprecated public static final int STATE_CHANNEL_DISCONNECTED = 0; // 0x0
+    field @Deprecated public static final int STATE_CHANNEL_DISCONNECTING = 3; // 0x3
+  }
+
+  @Deprecated public final class BluetoothHealthAppConfiguration implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public int getDataType();
+    method @Deprecated public String getName();
+    method @Deprecated public int getRole();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHealthAppConfiguration> CREATOR;
+  }
+
+  @Deprecated public abstract class BluetoothHealthCallback {
+    ctor @Deprecated public BluetoothHealthCallback();
+    method @Deprecated @BinderThread public void onHealthAppConfigurationStatusChange(android.bluetooth.BluetoothHealthAppConfiguration, int);
+    method @Deprecated @BinderThread public void onHealthChannelStateChange(android.bluetooth.BluetoothHealthAppConfiguration, android.bluetooth.BluetoothDevice, int, int, android.os.ParcelFileDescriptor, int);
+  }
+
+  public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile {
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(@NonNull int[]);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.hearingaid.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothHidDevice implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disconnect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean registerApp(android.bluetooth.BluetoothHidDeviceAppSdpSettings, android.bluetooth.BluetoothHidDeviceAppQosSettings, android.bluetooth.BluetoothHidDeviceAppQosSettings, java.util.concurrent.Executor, android.bluetooth.BluetoothHidDevice.Callback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean replyReport(android.bluetooth.BluetoothDevice, byte, byte, byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean reportError(android.bluetooth.BluetoothDevice, byte);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean sendReport(android.bluetooth.BluetoothDevice, int, byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean unregisterApp();
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.hiddevice.profile.action.CONNECTION_STATE_CHANGED";
+    field public static final byte ERROR_RSP_INVALID_PARAM = 4; // 0x4
+    field public static final byte ERROR_RSP_INVALID_RPT_ID = 2; // 0x2
+    field public static final byte ERROR_RSP_NOT_READY = 1; // 0x1
+    field public static final byte ERROR_RSP_SUCCESS = 0; // 0x0
+    field public static final byte ERROR_RSP_UNKNOWN = 14; // 0xe
+    field public static final byte ERROR_RSP_UNSUPPORTED_REQ = 3; // 0x3
+    field public static final byte PROTOCOL_BOOT_MODE = 0; // 0x0
+    field public static final byte PROTOCOL_REPORT_MODE = 1; // 0x1
+    field public static final byte REPORT_TYPE_FEATURE = 3; // 0x3
+    field public static final byte REPORT_TYPE_INPUT = 1; // 0x1
+    field public static final byte REPORT_TYPE_OUTPUT = 2; // 0x2
+    field public static final byte SUBCLASS1_COMBO = -64; // 0xffffffc0
+    field public static final byte SUBCLASS1_KEYBOARD = 64; // 0x40
+    field public static final byte SUBCLASS1_MOUSE = -128; // 0xffffff80
+    field public static final byte SUBCLASS1_NONE = 0; // 0x0
+    field public static final byte SUBCLASS2_CARD_READER = 6; // 0x6
+    field public static final byte SUBCLASS2_DIGITIZER_TABLET = 5; // 0x5
+    field public static final byte SUBCLASS2_GAMEPAD = 2; // 0x2
+    field public static final byte SUBCLASS2_JOYSTICK = 1; // 0x1
+    field public static final byte SUBCLASS2_REMOTE_CONTROL = 3; // 0x3
+    field public static final byte SUBCLASS2_SENSING_DEVICE = 4; // 0x4
+    field public static final byte SUBCLASS2_UNCATEGORIZED = 0; // 0x0
+  }
+
+  public abstract static class BluetoothHidDevice.Callback {
+    ctor public BluetoothHidDevice.Callback();
+    method public void onAppStatusChanged(android.bluetooth.BluetoothDevice, boolean);
+    method public void onConnectionStateChanged(android.bluetooth.BluetoothDevice, int);
+    method public void onGetReport(android.bluetooth.BluetoothDevice, byte, byte, int);
+    method public void onInterruptData(android.bluetooth.BluetoothDevice, byte, byte[]);
+    method public void onSetProtocol(android.bluetooth.BluetoothDevice, byte);
+    method public void onSetReport(android.bluetooth.BluetoothDevice, byte, byte, byte[]);
+    method public void onVirtualCableUnplug(android.bluetooth.BluetoothDevice);
+  }
+
+  public final class BluetoothHidDeviceAppQosSettings implements android.os.Parcelable {
+    ctor public BluetoothHidDeviceAppQosSettings(int, int, int, int, int, int);
+    method public int describeContents();
+    method public int getDelayVariation();
+    method public int getLatency();
+    method public int getPeakBandwidth();
+    method public int getServiceType();
+    method public int getTokenBucketSize();
+    method public int getTokenRate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppQosSettings> CREATOR;
+    field public static final int MAX = -1; // 0xffffffff
+    field public static final int SERVICE_BEST_EFFORT = 1; // 0x1
+    field public static final int SERVICE_GUARANTEED = 2; // 0x2
+    field public static final int SERVICE_NO_TRAFFIC = 0; // 0x0
+  }
+
+  public final class BluetoothHidDeviceAppSdpSettings implements android.os.Parcelable {
+    ctor public BluetoothHidDeviceAppSdpSettings(String, String, String, byte, byte[]);
+    method public int describeContents();
+    method public String getDescription();
+    method public byte[] getDescriptors();
+    method public String getName();
+    method public String getProvider();
+    method public byte getSubclass();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppSdpSettings> CREATOR;
+  }
+
+  public final class BluetoothLeAudio implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
+    method public void close();
+    method protected void finalize();
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(@NonNull int[]);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_LE_AUDIO_CONNECTION_STATE_CHANGED = "android.bluetooth.action.LE_AUDIO_CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothManager {
+    method public android.bluetooth.BluetoothAdapter getAdapter();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int, int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGattServer openGattServer(android.content.Context, android.bluetooth.BluetoothGattServerCallback);
+  }
+
+  public interface BluetoothProfile {
+    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    field public static final int A2DP = 2; // 0x2
+    field public static final String EXTRA_PREVIOUS_STATE = "android.bluetooth.profile.extra.PREVIOUS_STATE";
+    field public static final String EXTRA_STATE = "android.bluetooth.profile.extra.STATE";
+    field public static final int GATT = 7; // 0x7
+    field public static final int GATT_SERVER = 8; // 0x8
+    field public static final int HEADSET = 1; // 0x1
+    field @Deprecated public static final int HEALTH = 3; // 0x3
+    field public static final int HEARING_AID = 21; // 0x15
+    field public static final int HID_DEVICE = 19; // 0x13
+    field public static final int SAP = 10; // 0xa
+    field public static final int STATE_CONNECTED = 2; // 0x2
+    field public static final int STATE_CONNECTING = 1; // 0x1
+    field public static final int STATE_DISCONNECTED = 0; // 0x0
+    field public static final int STATE_DISCONNECTING = 3; // 0x3
+  }
+
+  public static interface BluetoothProfile.ServiceListener {
+    method public void onServiceConnected(int, android.bluetooth.BluetoothProfile);
+    method public void onServiceDisconnected(int);
+  }
+
+  public final class BluetoothServerSocket implements java.io.Closeable {
+    method public android.bluetooth.BluetoothSocket accept() throws java.io.IOException;
+    method public android.bluetooth.BluetoothSocket accept(int) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public int getPsm();
+  }
+
+  public final class BluetoothSocket implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void connect() throws java.io.IOException;
+    method public int getConnectionType();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public int getMaxReceivePacketSize();
+    method public int getMaxTransmitPacketSize();
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public android.bluetooth.BluetoothDevice getRemoteDevice();
+    method public boolean isConnected();
+    field public static final int TYPE_L2CAP = 3; // 0x3
+    field public static final int TYPE_RFCOMM = 1; // 0x1
+    field public static final int TYPE_SCO = 2; // 0x2
+  }
+
+  public final class BluetoothStatusCodes {
+    field public static final int ERROR_BLUETOOTH_NOT_ALLOWED = 2; // 0x2
+    field public static final int ERROR_BLUETOOTH_NOT_ENABLED = 1; // 0x1
+    field public static final int ERROR_DEVICE_NOT_BONDED = 3; // 0x3
+    field public static final int ERROR_MISSING_BLUETOOTH_CONNECT_PERMISSION = 6; // 0x6
+    field public static final int ERROR_UNKNOWN = 2147483647; // 0x7fffffff
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.bluetooth.le {
+
+  public abstract class AdvertiseCallback {
+    ctor public AdvertiseCallback();
+    method public void onStartFailure(int);
+    method public void onStartSuccess(android.bluetooth.le.AdvertiseSettings);
+    field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3
+    field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1
+    field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5
+    field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4
+    field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2
+  }
+
+  public final class AdvertiseData implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getIncludeDeviceName();
+    method public boolean getIncludeTxPowerLevel();
+    method public android.util.SparseArray<byte[]> getManufacturerSpecificData();
+    method public java.util.Map<android.os.ParcelUuid,byte[]> getServiceData();
+    method @NonNull public java.util.List<android.os.ParcelUuid> getServiceSolicitationUuids();
+    method public java.util.List<android.os.ParcelUuid> getServiceUuids();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertiseData> CREATOR;
+  }
+
+  public static final class AdvertiseData.Builder {
+    ctor public AdvertiseData.Builder();
+    method public android.bluetooth.le.AdvertiseData.Builder addManufacturerData(int, byte[]);
+    method public android.bluetooth.le.AdvertiseData.Builder addServiceData(android.os.ParcelUuid, byte[]);
+    method @NonNull public android.bluetooth.le.AdvertiseData.Builder addServiceSolicitationUuid(@NonNull android.os.ParcelUuid);
+    method public android.bluetooth.le.AdvertiseData.Builder addServiceUuid(android.os.ParcelUuid);
+    method public android.bluetooth.le.AdvertiseData build();
+    method public android.bluetooth.le.AdvertiseData.Builder setIncludeDeviceName(boolean);
+    method public android.bluetooth.le.AdvertiseData.Builder setIncludeTxPowerLevel(boolean);
+  }
+
+  public final class AdvertiseSettings implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getMode();
+    method public int getTimeout();
+    method public int getTxPowerLevel();
+    method public boolean isConnectable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ADVERTISE_MODE_BALANCED = 1; // 0x1
+    field public static final int ADVERTISE_MODE_LOW_LATENCY = 2; // 0x2
+    field public static final int ADVERTISE_MODE_LOW_POWER = 0; // 0x0
+    field public static final int ADVERTISE_TX_POWER_HIGH = 3; // 0x3
+    field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1
+    field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2
+    field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertiseSettings> CREATOR;
+  }
+
+  public static final class AdvertiseSettings.Builder {
+    ctor public AdvertiseSettings.Builder();
+    method public android.bluetooth.le.AdvertiseSettings build();
+    method public android.bluetooth.le.AdvertiseSettings.Builder setAdvertiseMode(int);
+    method public android.bluetooth.le.AdvertiseSettings.Builder setConnectable(boolean);
+    method public android.bluetooth.le.AdvertiseSettings.Builder setTimeout(int);
+    method public android.bluetooth.le.AdvertiseSettings.Builder setTxPowerLevel(int);
+  }
+
+  public final class AdvertisingSet {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void enableAdvertising(boolean, int, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setAdvertisingData(android.bluetooth.le.AdvertiseData);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setAdvertisingParameters(android.bluetooth.le.AdvertisingSetParameters);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setPeriodicAdvertisingData(android.bluetooth.le.AdvertiseData);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setPeriodicAdvertisingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setPeriodicAdvertisingParameters(android.bluetooth.le.PeriodicAdvertisingParameters);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setScanResponseData(android.bluetooth.le.AdvertiseData);
+  }
+
+  public abstract class AdvertisingSetCallback {
+    ctor public AdvertisingSetCallback();
+    method public void onAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
+    method public void onAdvertisingEnabled(android.bluetooth.le.AdvertisingSet, boolean, int);
+    method public void onAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int, int);
+    method public void onAdvertisingSetStarted(android.bluetooth.le.AdvertisingSet, int, int);
+    method public void onAdvertisingSetStopped(android.bluetooth.le.AdvertisingSet);
+    method public void onPeriodicAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
+    method public void onPeriodicAdvertisingEnabled(android.bluetooth.le.AdvertisingSet, boolean, int);
+    method public void onPeriodicAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
+    method public void onScanResponseDataSet(android.bluetooth.le.AdvertisingSet, int);
+    field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3
+    field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1
+    field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5
+    field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4
+    field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2
+    field public static final int ADVERTISE_SUCCESS = 0; // 0x0
+  }
+
+  public final class AdvertisingSetParameters implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getInterval();
+    method public int getPrimaryPhy();
+    method public int getSecondaryPhy();
+    method public int getTxPowerLevel();
+    method public boolean includeTxPower();
+    method public boolean isAnonymous();
+    method public boolean isConnectable();
+    method public boolean isLegacy();
+    method public boolean isScannable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertisingSetParameters> CREATOR;
+    field public static final int INTERVAL_HIGH = 1600; // 0x640
+    field public static final int INTERVAL_LOW = 160; // 0xa0
+    field public static final int INTERVAL_MAX = 16777215; // 0xffffff
+    field public static final int INTERVAL_MEDIUM = 400; // 0x190
+    field public static final int INTERVAL_MIN = 160; // 0xa0
+    field public static final int TX_POWER_HIGH = 1; // 0x1
+    field public static final int TX_POWER_LOW = -15; // 0xfffffff1
+    field public static final int TX_POWER_MAX = 1; // 0x1
+    field public static final int TX_POWER_MEDIUM = -7; // 0xfffffff9
+    field public static final int TX_POWER_MIN = -127; // 0xffffff81
+    field public static final int TX_POWER_ULTRA_LOW = -21; // 0xffffffeb
+  }
+
+  public static final class AdvertisingSetParameters.Builder {
+    ctor public AdvertisingSetParameters.Builder();
+    method public android.bluetooth.le.AdvertisingSetParameters build();
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setAnonymous(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setConnectable(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setIncludeTxPower(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setScannable(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int);
+  }
+
+  public final class BluetoothLeAdvertiser {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, int, int, android.bluetooth.le.AdvertisingSetCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, int, int, android.bluetooth.le.AdvertisingSetCallback, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void stopAdvertising(android.bluetooth.le.AdvertiseCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void stopAdvertisingSet(android.bluetooth.le.AdvertisingSetCallback);
+  }
+
+  public final class BluetoothLeScanner {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void flushPendingScanResults(android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void startScan(android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void startScan(java.util.List<android.bluetooth.le.ScanFilter>, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public int startScan(@Nullable java.util.List<android.bluetooth.le.ScanFilter>, @Nullable android.bluetooth.le.ScanSettings, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void stopScan(android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void stopScan(android.app.PendingIntent);
+    field public static final String EXTRA_CALLBACK_TYPE = "android.bluetooth.le.extra.CALLBACK_TYPE";
+    field public static final String EXTRA_ERROR_CODE = "android.bluetooth.le.extra.ERROR_CODE";
+    field public static final String EXTRA_LIST_SCAN_RESULT = "android.bluetooth.le.extra.LIST_SCAN_RESULT";
+  }
+
+  public final class PeriodicAdvertisingParameters implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getIncludeTxPower();
+    method public int getInterval();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.bluetooth.le.PeriodicAdvertisingParameters> CREATOR;
+  }
+
+  public static final class PeriodicAdvertisingParameters.Builder {
+    ctor public PeriodicAdvertisingParameters.Builder();
+    method public android.bluetooth.le.PeriodicAdvertisingParameters build();
+    method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setIncludeTxPower(boolean);
+    method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setInterval(int);
+  }
+
+  public abstract class ScanCallback {
+    ctor public ScanCallback();
+    method public void onBatchScanResults(java.util.List<android.bluetooth.le.ScanResult>);
+    method public void onScanFailed(int);
+    method public void onScanResult(int, android.bluetooth.le.ScanResult);
+    field public static final int SCAN_FAILED_ALREADY_STARTED = 1; // 0x1
+    field public static final int SCAN_FAILED_APPLICATION_REGISTRATION_FAILED = 2; // 0x2
+    field public static final int SCAN_FAILED_FEATURE_UNSUPPORTED = 4; // 0x4
+    field public static final int SCAN_FAILED_INTERNAL_ERROR = 3; // 0x3
+  }
+
+  public final class ScanFilter implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getDeviceAddress();
+    method @Nullable public String getDeviceName();
+    method @Nullable public byte[] getManufacturerData();
+    method @Nullable public byte[] getManufacturerDataMask();
+    method public int getManufacturerId();
+    method @Nullable public byte[] getServiceData();
+    method @Nullable public byte[] getServiceDataMask();
+    method @Nullable public android.os.ParcelUuid getServiceDataUuid();
+    method @Nullable public android.os.ParcelUuid getServiceSolicitationUuid();
+    method @Nullable public android.os.ParcelUuid getServiceSolicitationUuidMask();
+    method @Nullable public android.os.ParcelUuid getServiceUuid();
+    method @Nullable public android.os.ParcelUuid getServiceUuidMask();
+    method public boolean matches(android.bluetooth.le.ScanResult);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanFilter> CREATOR;
+  }
+
+  public static final class ScanFilter.Builder {
+    ctor public ScanFilter.Builder();
+    method public android.bluetooth.le.ScanFilter build();
+    method public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(String);
+    method public android.bluetooth.le.ScanFilter.Builder setDeviceName(String);
+    method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[]);
+    method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[], byte[]);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceData(android.os.ParcelUuid, byte[]);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceData(android.os.ParcelUuid, byte[], byte[]);
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setServiceSolicitationUuid(@Nullable android.os.ParcelUuid);
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setServiceSolicitationUuid(@Nullable android.os.ParcelUuid, @Nullable android.os.ParcelUuid);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceUuid(android.os.ParcelUuid);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceUuid(android.os.ParcelUuid, android.os.ParcelUuid);
+  }
+
+  public final class ScanRecord {
+    method public int getAdvertiseFlags();
+    method public byte[] getBytes();
+    method @Nullable public String getDeviceName();
+    method public android.util.SparseArray<byte[]> getManufacturerSpecificData();
+    method @Nullable public byte[] getManufacturerSpecificData(int);
+    method public java.util.Map<android.os.ParcelUuid,byte[]> getServiceData();
+    method @Nullable public byte[] getServiceData(android.os.ParcelUuid);
+    method @NonNull public java.util.List<android.os.ParcelUuid> getServiceSolicitationUuids();
+    method public java.util.List<android.os.ParcelUuid> getServiceUuids();
+    method public int getTxPowerLevel();
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    ctor @Deprecated public ScanResult(android.bluetooth.BluetoothDevice, android.bluetooth.le.ScanRecord, int, long);
+    ctor public ScanResult(android.bluetooth.BluetoothDevice, int, int, int, int, int, int, int, android.bluetooth.le.ScanRecord, long);
+    method public int describeContents();
+    method public int getAdvertisingSid();
+    method public int getDataStatus();
+    method public android.bluetooth.BluetoothDevice getDevice();
+    method public int getPeriodicAdvertisingInterval();
+    method public int getPrimaryPhy();
+    method public int getRssi();
+    method @Nullable public android.bluetooth.le.ScanRecord getScanRecord();
+    method public int getSecondaryPhy();
+    method public long getTimestampNanos();
+    method public int getTxPower();
+    method public boolean isConnectable();
+    method public boolean isLegacy();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanResult> CREATOR;
+    field public static final int DATA_COMPLETE = 0; // 0x0
+    field public static final int DATA_TRUNCATED = 2; // 0x2
+    field public static final int PERIODIC_INTERVAL_NOT_PRESENT = 0; // 0x0
+    field public static final int PHY_UNUSED = 0; // 0x0
+    field public static final int SID_NOT_PRESENT = 255; // 0xff
+    field public static final int TX_POWER_NOT_PRESENT = 127; // 0x7f
+  }
+
+  public final class ScanSettings implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCallbackType();
+    method public boolean getLegacy();
+    method public int getPhy();
+    method public long getReportDelayMillis();
+    method public int getScanMode();
+    method public int getScanResultType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALLBACK_TYPE_ALL_MATCHES = 1; // 0x1
+    field public static final int CALLBACK_TYPE_FIRST_MATCH = 2; // 0x2
+    field public static final int CALLBACK_TYPE_MATCH_LOST = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanSettings> CREATOR;
+    field public static final int MATCH_MODE_AGGRESSIVE = 1; // 0x1
+    field public static final int MATCH_MODE_STICKY = 2; // 0x2
+    field public static final int MATCH_NUM_FEW_ADVERTISEMENT = 2; // 0x2
+    field public static final int MATCH_NUM_MAX_ADVERTISEMENT = 3; // 0x3
+    field public static final int MATCH_NUM_ONE_ADVERTISEMENT = 1; // 0x1
+    field public static final int PHY_LE_ALL_SUPPORTED = 255; // 0xff
+    field public static final int SCAN_MODE_BALANCED = 1; // 0x1
+    field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2
+    field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0
+    field public static final int SCAN_MODE_OPPORTUNISTIC = -1; // 0xffffffff
+  }
+
+  public static final class ScanSettings.Builder {
+    ctor public ScanSettings.Builder();
+    method public android.bluetooth.le.ScanSettings build();
+    method public android.bluetooth.le.ScanSettings.Builder setCallbackType(int);
+    method public android.bluetooth.le.ScanSettings.Builder setLegacy(boolean);
+    method public android.bluetooth.le.ScanSettings.Builder setMatchMode(int);
+    method public android.bluetooth.le.ScanSettings.Builder setNumOfMatches(int);
+    method public android.bluetooth.le.ScanSettings.Builder setPhy(int);
+    method public android.bluetooth.le.ScanSettings.Builder setReportDelay(long);
+    method public android.bluetooth.le.ScanSettings.Builder setScanMode(int);
+  }
+
+}
+
+package android.companion {
+
+  public final class AssociationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.AssociationRequest> CREATOR;
+    field public static final String DEVICE_PROFILE_WATCH = "android.app.role.COMPANION_DEVICE_WATCH";
+  }
+
+  public static final class AssociationRequest.Builder {
+    ctor public AssociationRequest.Builder();
+    method @NonNull public android.companion.AssociationRequest.Builder addDeviceFilter(@Nullable android.companion.DeviceFilter<?>);
+    method @NonNull public android.companion.AssociationRequest build();
+    method @NonNull public android.companion.AssociationRequest.Builder setDeviceProfile(@NonNull String);
+    method @NonNull public android.companion.AssociationRequest.Builder setSingleDevice(boolean);
+  }
+
+  public final class BluetoothDeviceFilter implements android.companion.DeviceFilter<android.bluetooth.BluetoothDevice> {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.BluetoothDeviceFilter> CREATOR;
+  }
+
+  public static final class BluetoothDeviceFilter.Builder {
+    ctor public BluetoothDeviceFilter.Builder();
+    method @NonNull public android.companion.BluetoothDeviceFilter.Builder addServiceUuid(@Nullable android.os.ParcelUuid, @Nullable android.os.ParcelUuid);
+    method @NonNull public android.companion.BluetoothDeviceFilter build();
+    method @NonNull public android.companion.BluetoothDeviceFilter.Builder setAddress(@Nullable String);
+    method public android.companion.BluetoothDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
+  }
+
+  public final class BluetoothLeDeviceFilter implements android.companion.DeviceFilter<android.bluetooth.le.ScanResult> {
+    method public int describeContents();
+    method public static int getRenamePrefixLengthLimit();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.BluetoothLeDeviceFilter> CREATOR;
+  }
+
+  public static final class BluetoothLeDeviceFilter.Builder {
+    ctor public BluetoothLeDeviceFilter.Builder();
+    method @NonNull public android.companion.BluetoothLeDeviceFilter build();
+    method public android.companion.BluetoothLeDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setRawDataFilter(@NonNull byte[], @Nullable byte[]);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setRenameFromBytes(@NonNull String, @NonNull String, int, int, java.nio.ByteOrder);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setRenameFromName(@NonNull String, @NonNull String, int, int);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setScanFilter(@Nullable android.bluetooth.le.ScanFilter);
+  }
+
+  public final class CompanionDeviceManager {
+    method @RequiresPermission(value=android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH, conditional=true) public void associate(@NonNull android.companion.AssociationRequest, @NonNull android.companion.CompanionDeviceManager.Callback, @Nullable android.os.Handler);
+    method public void disassociate(@NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getAssociations();
+    method public boolean hasNotificationAccess(android.content.ComponentName);
+    method public void requestNotificationAccess(android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void startObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException;
+    method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void stopObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException;
+    field public static final String EXTRA_DEVICE = "android.companion.extra.DEVICE";
+  }
+
+  public abstract static class CompanionDeviceManager.Callback {
+    ctor public CompanionDeviceManager.Callback();
+    method public abstract void onDeviceFound(android.content.IntentSender);
+    method public abstract void onFailure(CharSequence);
+  }
+
+  public abstract class CompanionDeviceService extends android.app.Service {
+    ctor public CompanionDeviceService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @MainThread public abstract void onDeviceAppeared(@NonNull String);
+    method @MainThread public abstract void onDeviceDisappeared(@NonNull String);
+    field public static final String SERVICE_INTERFACE = "android.companion.CompanionDeviceService";
+  }
+
+  public interface DeviceFilter<D extends android.os.Parcelable> extends android.os.Parcelable {
+  }
+
+  public class DeviceNotAssociatedException extends java.lang.RuntimeException {
+  }
+
+  public final class WifiDeviceFilter implements android.companion.DeviceFilter<android.net.wifi.ScanResult> {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
+  }
+
+  public static final class WifiDeviceFilter.Builder {
+    ctor public WifiDeviceFilter.Builder();
+    method @NonNull public android.companion.WifiDeviceFilter build();
+    method @NonNull public android.companion.WifiDeviceFilter.Builder setBssid(@NonNull android.net.MacAddress);
+    method @NonNull public android.companion.WifiDeviceFilter.Builder setBssidMask(@NonNull android.net.MacAddress);
+    method @NonNull public android.companion.WifiDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
+  }
+
+}
+
+package android.content {
+
+  public abstract class AbstractThreadedSyncAdapter {
+    ctor public AbstractThreadedSyncAdapter(android.content.Context, boolean);
+    ctor public AbstractThreadedSyncAdapter(android.content.Context, boolean, boolean);
+    method public android.content.Context getContext();
+    method public final android.os.IBinder getSyncAdapterBinder();
+    method public abstract void onPerformSync(android.accounts.Account, android.os.Bundle, String, android.content.ContentProviderClient, android.content.SyncResult);
+    method public void onSecurityException(android.accounts.Account, android.os.Bundle, String, android.content.SyncResult);
+    method public void onSyncCanceled();
+    method public void onSyncCanceled(Thread);
+    method @MainThread public boolean onUnsyncableAccount();
+    field @Deprecated public static final int LOG_SYNC_DETAILS = 2743; // 0xab7
+  }
+
+  public class ActivityNotFoundException extends java.lang.RuntimeException {
+    ctor public ActivityNotFoundException();
+    ctor public ActivityNotFoundException(String);
+  }
+
+  public abstract class AsyncQueryHandler extends android.os.Handler {
+    ctor public AsyncQueryHandler(android.content.ContentResolver);
+    method public final void cancelOperation(int);
+    method protected android.os.Handler createHandler(android.os.Looper);
+    method protected void onDeleteComplete(int, Object, int);
+    method protected void onInsertComplete(int, Object, android.net.Uri);
+    method protected void onQueryComplete(int, Object, android.database.Cursor);
+    method protected void onUpdateComplete(int, Object, int);
+    method public final void startDelete(int, Object, android.net.Uri, String, String[]);
+    method public final void startInsert(int, Object, android.net.Uri, android.content.ContentValues);
+    method public void startQuery(int, Object, android.net.Uri, String[], String, String[], String);
+    method public final void startUpdate(int, Object, android.net.Uri, android.content.ContentValues, String, String[]);
+  }
+
+  protected static final class AsyncQueryHandler.WorkerArgs {
+    ctor protected AsyncQueryHandler.WorkerArgs();
+    field public Object cookie;
+    field public android.os.Handler handler;
+    field public String orderBy;
+    field public String[] projection;
+    field public Object result;
+    field public String selection;
+    field public String[] selectionArgs;
+    field public android.net.Uri uri;
+    field public android.content.ContentValues values;
+  }
+
+  protected class AsyncQueryHandler.WorkerHandler extends android.os.Handler {
+    ctor public AsyncQueryHandler.WorkerHandler(android.os.Looper);
+  }
+
+  @Deprecated public abstract class AsyncTaskLoader<D> extends android.content.Loader<D> {
+    ctor @Deprecated public AsyncTaskLoader(android.content.Context);
+    method @Deprecated public void cancelLoadInBackground();
+    method @Deprecated public boolean isLoadInBackgroundCanceled();
+    method @Deprecated public abstract D loadInBackground();
+    method @Deprecated public void onCanceled(D);
+    method @Deprecated protected D onLoadInBackground();
+    method @Deprecated public void setUpdateThrottle(long);
+  }
+
+  public final class AttributionSource implements android.os.Parcelable {
+    method public boolean checkCallingUid();
+    method public int describeContents();
+    method public void enforceCallingUid();
+    method @Nullable public String getAttributionTag();
+    method @Nullable public android.content.AttributionSource getNext();
+    method @Nullable public String getPackageName();
+    method public int getUid();
+    method public boolean isTrusted(@NonNull android.content.Context);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.AttributionSource> CREATOR;
+  }
+
+  public static final class AttributionSource.Builder {
+    ctor public AttributionSource.Builder(int);
+    method @NonNull public android.content.AttributionSource build();
+    method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String);
+    method @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource);
+    method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String);
+  }
+
+  public abstract class BroadcastReceiver {
+    ctor public BroadcastReceiver();
+    method public final void abortBroadcast();
+    method public final void clearAbortBroadcast();
+    method public final boolean getAbortBroadcast();
+    method public final boolean getDebugUnregister();
+    method public final int getResultCode();
+    method public final String getResultData();
+    method public final android.os.Bundle getResultExtras(boolean);
+    method public final android.content.BroadcastReceiver.PendingResult goAsync();
+    method public final boolean isInitialStickyBroadcast();
+    method public final boolean isOrderedBroadcast();
+    method public abstract void onReceive(android.content.Context, android.content.Intent);
+    method public android.os.IBinder peekService(android.content.Context, android.content.Intent);
+    method public final void setDebugUnregister(boolean);
+    method public final void setOrderedHint(boolean);
+    method public final void setResult(int, String, android.os.Bundle);
+    method public final void setResultCode(int);
+    method public final void setResultData(String);
+    method public final void setResultExtras(android.os.Bundle);
+  }
+
+  public static class BroadcastReceiver.PendingResult {
+    method public final void abortBroadcast();
+    method public final void clearAbortBroadcast();
+    method public final void finish();
+    method public final boolean getAbortBroadcast();
+    method public final int getResultCode();
+    method public final String getResultData();
+    method public final android.os.Bundle getResultExtras(boolean);
+    method public final void setResult(int, String, android.os.Bundle);
+    method public final void setResultCode(int);
+    method public final void setResultData(String);
+    method public final void setResultExtras(android.os.Bundle);
+  }
+
+  public class ClipData implements android.os.Parcelable {
+    ctor public ClipData(CharSequence, String[], android.content.ClipData.Item);
+    ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item);
+    ctor public ClipData(android.content.ClipData);
+    method public void addItem(android.content.ClipData.Item);
+    method public void addItem(android.content.ContentResolver, android.content.ClipData.Item);
+    method public int describeContents();
+    method public android.content.ClipDescription getDescription();
+    method public android.content.ClipData.Item getItemAt(int);
+    method public int getItemCount();
+    method public static android.content.ClipData newHtmlText(CharSequence, CharSequence, String);
+    method public static android.content.ClipData newIntent(CharSequence, android.content.Intent);
+    method public static android.content.ClipData newPlainText(CharSequence, CharSequence);
+    method public static android.content.ClipData newRawUri(CharSequence, android.net.Uri);
+    method public static android.content.ClipData newUri(android.content.ContentResolver, CharSequence, android.net.Uri);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ClipData> CREATOR;
+  }
+
+  public static class ClipData.Item {
+    ctor public ClipData.Item(CharSequence);
+    ctor public ClipData.Item(CharSequence, String);
+    ctor public ClipData.Item(android.content.Intent);
+    ctor public ClipData.Item(android.net.Uri);
+    ctor public ClipData.Item(CharSequence, android.content.Intent, android.net.Uri);
+    ctor public ClipData.Item(CharSequence, String, android.content.Intent, android.net.Uri);
+    method public String coerceToHtmlText(android.content.Context);
+    method public CharSequence coerceToStyledText(android.content.Context);
+    method public CharSequence coerceToText(android.content.Context);
+    method public String getHtmlText();
+    method public android.content.Intent getIntent();
+    method public CharSequence getText();
+    method @Nullable public android.view.textclassifier.TextLinks getTextLinks();
+    method public android.net.Uri getUri();
+  }
+
+  public class ClipDescription implements android.os.Parcelable {
+    ctor public ClipDescription(CharSequence, String[]);
+    ctor public ClipDescription(android.content.ClipDescription);
+    method public static boolean compareMimeTypes(String, String);
+    method public int describeContents();
+    method public String[] filterMimeTypes(String);
+    method public int getClassificationStatus();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(@NonNull String);
+    method public android.os.PersistableBundle getExtras();
+    method public CharSequence getLabel();
+    method public String getMimeType(int);
+    method public int getMimeTypeCount();
+    method public long getTimestamp();
+    method public boolean hasMimeType(String);
+    method public boolean isStyledText();
+    method public void setExtras(android.os.PersistableBundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CLASSIFICATION_COMPLETE = 3; // 0x3
+    field public static final int CLASSIFICATION_NOT_COMPLETE = 1; // 0x1
+    field public static final int CLASSIFICATION_NOT_PERFORMED = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ClipDescription> CREATOR;
+    field public static final String MIMETYPE_TEXT_HTML = "text/html";
+    field public static final String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent";
+    field public static final String MIMETYPE_TEXT_PLAIN = "text/plain";
+    field public static final String MIMETYPE_TEXT_URILIST = "text/uri-list";
+    field public static final String MIMETYPE_UNKNOWN = "application/octet-stream";
+  }
+
+  public class ClipboardManager extends android.text.ClipboardManager {
+    method public void addPrimaryClipChangedListener(android.content.ClipboardManager.OnPrimaryClipChangedListener);
+    method public void clearPrimaryClip();
+    method @Nullable public android.content.ClipData getPrimaryClip();
+    method @Nullable public android.content.ClipDescription getPrimaryClipDescription();
+    method @Deprecated public CharSequence getText();
+    method public boolean hasPrimaryClip();
+    method @Deprecated public boolean hasText();
+    method public void removePrimaryClipChangedListener(android.content.ClipboardManager.OnPrimaryClipChangedListener);
+    method public void setPrimaryClip(@NonNull android.content.ClipData);
+    method @Deprecated public void setText(CharSequence);
+  }
+
+  public static interface ClipboardManager.OnPrimaryClipChangedListener {
+    method public void onPrimaryClipChanged();
+  }
+
+  public interface ComponentCallbacks {
+    method public void onConfigurationChanged(@NonNull android.content.res.Configuration);
+    method public void onLowMemory();
+  }
+
+  public interface ComponentCallbacks2 extends android.content.ComponentCallbacks {
+    method public void onTrimMemory(int);
+    field public static final int TRIM_MEMORY_BACKGROUND = 40; // 0x28
+    field public static final int TRIM_MEMORY_COMPLETE = 80; // 0x50
+    field public static final int TRIM_MEMORY_MODERATE = 60; // 0x3c
+    field public static final int TRIM_MEMORY_RUNNING_CRITICAL = 15; // 0xf
+    field public static final int TRIM_MEMORY_RUNNING_LOW = 10; // 0xa
+    field public static final int TRIM_MEMORY_RUNNING_MODERATE = 5; // 0x5
+    field public static final int TRIM_MEMORY_UI_HIDDEN = 20; // 0x14
+  }
+
+  public final class ComponentName implements java.lang.Cloneable java.lang.Comparable<android.content.ComponentName> android.os.Parcelable {
+    ctor public ComponentName(@NonNull String, @NonNull String);
+    ctor public ComponentName(@NonNull android.content.Context, @NonNull String);
+    ctor public ComponentName(@NonNull android.content.Context, @NonNull Class<?>);
+    ctor public ComponentName(android.os.Parcel);
+    method public android.content.ComponentName clone();
+    method public int compareTo(android.content.ComponentName);
+    method @NonNull public static android.content.ComponentName createRelative(@NonNull String, @NonNull String);
+    method @NonNull public static android.content.ComponentName createRelative(@NonNull android.content.Context, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String flattenToShortString();
+    method @NonNull public String flattenToString();
+    method @NonNull public String getClassName();
+    method @NonNull public String getPackageName();
+    method public String getShortClassName();
+    method public static android.content.ComponentName readFromParcel(android.os.Parcel);
+    method public String toShortString();
+    method @Nullable public static android.content.ComponentName unflattenFromString(@NonNull String);
+    method public void writeToParcel(android.os.Parcel, int);
+    method public static void writeToParcel(android.content.ComponentName, android.os.Parcel);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ComponentName> CREATOR;
+  }
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    ctor public ContentProvider();
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull String, @NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException;
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException;
+    method public void attachInfo(android.content.Context, android.content.pm.ProviderInfo);
+    method public int bulkInsert(@NonNull android.net.Uri, @NonNull android.content.ContentValues[]);
+    method @Nullable public android.os.Bundle call(@NonNull String, @NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Nullable public android.os.Bundle call(@NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Nullable public android.net.Uri canonicalize(@NonNull android.net.Uri);
+    method @NonNull public final android.content.ContentProvider.CallingIdentity clearCallingIdentity();
+    method public abstract int delete(@NonNull android.net.Uri, @Nullable String, @Nullable String[]);
+    method public int delete(@NonNull android.net.Uri, @Nullable android.os.Bundle);
+    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Nullable public final android.content.AttributionSource getCallingAttributionSource();
+    method @Nullable public final String getCallingAttributionTag();
+    method @Nullable public final String getCallingPackage();
+    method @Nullable public final String getCallingPackageUnchecked();
+    method @Nullable public final android.content.Context getContext();
+    method @Nullable public final android.content.pm.PathPermission[] getPathPermissions();
+    method @Nullable public final String getReadPermission();
+    method @Nullable public String[] getStreamTypes(@NonNull android.net.Uri, @NonNull String);
+    method @Nullable public abstract String getType(@NonNull android.net.Uri);
+    method @Nullable public final String getWritePermission();
+    method @Nullable public abstract android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues);
+    method @Nullable public android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+    method protected boolean isTemporary();
+    method public void onCallingPackageChanged();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public abstract boolean onCreate();
+    method public void onLowMemory();
+    method public void onTrimMemory(int);
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @NonNull protected final android.os.ParcelFileDescriptor openFileHelper(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @NonNull public <T> android.os.ParcelFileDescriptor openPipeHelper(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable T, @NonNull android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
+    method @Nullable public android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method @Nullable public android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public abstract android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String);
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String, @Nullable android.os.CancellationSignal);
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method public boolean refresh(android.net.Uri, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method @NonNull public final android.content.Context requireContext();
+    method public final void restoreCallingIdentity(@NonNull android.content.ContentProvider.CallingIdentity);
+    method protected final void setPathPermissions(@Nullable android.content.pm.PathPermission[]);
+    method protected final void setReadPermission(@Nullable String);
+    method protected final void setWritePermission(@Nullable String);
+    method public void shutdown();
+    method @Nullable public android.net.Uri uncanonicalize(@NonNull android.net.Uri);
+    method public abstract int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable String, @Nullable String[]);
+    method public int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+  }
+
+  public final class ContentProvider.CallingIdentity {
+  }
+
+  public static interface ContentProvider.PipeDataWriter<T> {
+    method public void writeDataToPipe(@NonNull android.os.ParcelFileDescriptor, @NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable T);
+  }
+
+  public class ContentProviderClient implements java.lang.AutoCloseable {
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException;
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull String, @NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException;
+    method public int bulkInsert(@NonNull android.net.Uri, @NonNull android.content.ContentValues[]) throws android.os.RemoteException;
+    method @Nullable public android.os.Bundle call(@NonNull String, @Nullable String, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public android.os.Bundle call(@NonNull String, @NonNull String, @Nullable String, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public final android.net.Uri canonicalize(@NonNull android.net.Uri) throws android.os.RemoteException;
+    method public void close();
+    method public int delete(@NonNull android.net.Uri, @Nullable String, @Nullable String[]) throws android.os.RemoteException;
+    method public int delete(@NonNull android.net.Uri, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public android.content.ContentProvider getLocalContentProvider();
+    method @Nullable public String[] getStreamTypes(@NonNull android.net.Uri, @NonNull String) throws android.os.RemoteException;
+    method @Nullable public String getType(@NonNull android.net.Uri) throws android.os.RemoteException;
+    method @Nullable public android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues) throws android.os.RemoteException;
+    method @Nullable public android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String) throws android.os.RemoteException;
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String, @Nullable android.os.CancellationSignal) throws android.os.RemoteException;
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], android.os.Bundle, @Nullable android.os.CancellationSignal) throws android.os.RemoteException;
+    method public boolean refresh(android.net.Uri, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws android.os.RemoteException;
+    method @Deprecated public boolean release();
+    method @Nullable public final android.net.Uri uncanonicalize(@NonNull android.net.Uri) throws android.os.RemoteException;
+    method public int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable String, @Nullable String[]) throws android.os.RemoteException;
+    method public int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle) throws android.os.RemoteException;
+  }
+
+  public class ContentProviderOperation implements android.os.Parcelable {
+    method @NonNull public android.content.ContentProviderResult apply(@NonNull android.content.ContentProvider, @NonNull android.content.ContentProviderResult[], int) throws android.content.OperationApplicationException;
+    method public int describeContents();
+    method @NonNull public android.net.Uri getUri();
+    method public boolean isAssertQuery();
+    method public boolean isCall();
+    method public boolean isDelete();
+    method public boolean isExceptionAllowed();
+    method public boolean isInsert();
+    method public boolean isReadOperation();
+    method public boolean isUpdate();
+    method public boolean isWriteOperation();
+    method public boolean isYieldAllowed();
+    method @NonNull public static android.content.ContentProviderOperation.Builder newAssertQuery(@NonNull android.net.Uri);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newCall(@NonNull android.net.Uri, @Nullable String, @Nullable String);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newDelete(@NonNull android.net.Uri);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newInsert(@NonNull android.net.Uri);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newUpdate(@NonNull android.net.Uri);
+    method @Nullable public android.os.Bundle resolveExtrasBackReferences(@NonNull android.content.ContentProviderResult[], int);
+    method @Nullable public String[] resolveSelectionArgsBackReferences(@NonNull android.content.ContentProviderResult[], int);
+    method @Nullable public android.content.ContentValues resolveValueBackReferences(@NonNull android.content.ContentProviderResult[], int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentProviderOperation> CREATOR;
+  }
+
+  public static class ContentProviderOperation.Builder {
+    method @NonNull public android.content.ContentProviderOperation build();
+    method @NonNull public android.content.ContentProviderOperation.Builder withExceptionAllowed(boolean);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExpectedCount(int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtra(@NonNull String, @Nullable Object);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtraBackReference(@NonNull String, int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtraBackReference(@NonNull String, int, @NonNull String);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.content.ContentProviderOperation.Builder withSelection(@Nullable String, @Nullable String[]);
+    method @NonNull public android.content.ContentProviderOperation.Builder withSelectionBackReference(int, int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withSelectionBackReference(int, int, @NonNull String);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValue(@NonNull String, @Nullable Object);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValueBackReference(@NonNull String, int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValueBackReference(@NonNull String, int, @NonNull String);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValueBackReferences(@NonNull android.content.ContentValues);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValues(@NonNull android.content.ContentValues);
+    method @NonNull public android.content.ContentProviderOperation.Builder withYieldAllowed(boolean);
+  }
+
+  public class ContentProviderResult implements android.os.Parcelable {
+    ctor public ContentProviderResult(@NonNull android.net.Uri);
+    ctor public ContentProviderResult(int);
+    ctor public ContentProviderResult(@NonNull android.os.Bundle);
+    ctor public ContentProviderResult(@NonNull Throwable);
+    ctor public ContentProviderResult(android.os.Parcel);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentProviderResult> CREATOR;
+    field @Nullable public final Integer count;
+    field @Nullable public final Throwable exception;
+    field @Nullable public final android.os.Bundle extras;
+    field @Nullable public final android.net.Uri uri;
+  }
+
+  public class ContentQueryMap extends java.util.Observable {
+    ctor public ContentQueryMap(android.database.Cursor, String, boolean, android.os.Handler);
+    method public void close();
+    method public java.util.Map<java.lang.String,android.content.ContentValues> getRows();
+    method public android.content.ContentValues getValues(String);
+    method public void requery();
+    method public void setKeepUpdated(boolean);
+  }
+
+  public abstract class ContentResolver {
+    ctor public ContentResolver(@Nullable android.content.Context);
+    method @Nullable public final android.content.ContentProviderClient acquireContentProviderClient(@NonNull android.net.Uri);
+    method @Nullable public final android.content.ContentProviderClient acquireContentProviderClient(@NonNull String);
+    method @Nullable public final android.content.ContentProviderClient acquireUnstableContentProviderClient(@NonNull android.net.Uri);
+    method @Nullable public final android.content.ContentProviderClient acquireUnstableContentProviderClient(@NonNull String);
+    method public static void addPeriodicSync(android.accounts.Account, String, android.os.Bundle, long);
+    method public static Object addStatusChangeListener(int, android.content.SyncStatusObserver);
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull String, @NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException;
+    method public final int bulkInsert(@NonNull @RequiresPermission.Write android.net.Uri, @NonNull android.content.ContentValues[]);
+    method @Nullable public final android.os.Bundle call(@NonNull android.net.Uri, @NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Nullable public final android.os.Bundle call(@NonNull String, @NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated public void cancelSync(android.net.Uri);
+    method public static void cancelSync(android.accounts.Account, String);
+    method public static void cancelSync(android.content.SyncRequest);
+    method @Nullable public final android.net.Uri canonicalize(@NonNull android.net.Uri);
+    method public final int delete(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable String, @Nullable String[]);
+    method public final int delete(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.os.Bundle);
+    method @Deprecated public static android.content.SyncInfo getCurrentSync();
+    method public static java.util.List<android.content.SyncInfo> getCurrentSyncs();
+    method public static int getIsSyncable(android.accounts.Account, String);
+    method public static boolean getMasterSyncAutomatically();
+    method @NonNull public java.util.List<android.content.UriPermission> getOutgoingPersistedUriPermissions();
+    method public static java.util.List<android.content.PeriodicSync> getPeriodicSyncs(android.accounts.Account, String);
+    method @NonNull public java.util.List<android.content.UriPermission> getPersistedUriPermissions();
+    method @Nullable public String[] getStreamTypes(@NonNull android.net.Uri, @NonNull String);
+    method public static android.content.SyncAdapterType[] getSyncAdapterTypes();
+    method public static boolean getSyncAutomatically(android.accounts.Account, String);
+    method @Nullable public final String getType(@NonNull android.net.Uri);
+    method @NonNull public final android.content.ContentResolver.MimeTypeInfo getTypeInfo(@NonNull String);
+    method @Nullable public final android.net.Uri insert(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues);
+    method @Nullable public final android.net.Uri insert(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+    method public static boolean isSyncActive(android.accounts.Account, String);
+    method public static boolean isSyncPending(android.accounts.Account, String);
+    method @NonNull public android.graphics.Bitmap loadThumbnail(@NonNull android.net.Uri, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method public void notifyChange(@NonNull android.net.Uri, @Nullable android.database.ContentObserver);
+    method @Deprecated public void notifyChange(@NonNull android.net.Uri, @Nullable android.database.ContentObserver, boolean);
+    method public void notifyChange(@NonNull android.net.Uri, @Nullable android.database.ContentObserver, int);
+    method public void notifyChange(@NonNull java.util.Collection<android.net.Uri>, @Nullable android.database.ContentObserver, int);
+    method @Nullable public final android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.os.ParcelFileDescriptor openFileDescriptor(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public final android.os.ParcelFileDescriptor openFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final java.io.InputStream openInputStream(@NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public final java.io.OutputStream openOutputStream(@NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public final java.io.OutputStream openOutputStream(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.database.Cursor query(@NonNull @RequiresPermission.Read android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String);
+    method @Nullable public final android.database.Cursor query(@NonNull @RequiresPermission.Read android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String, @Nullable android.os.CancellationSignal);
+    method @Nullable public final android.database.Cursor query(@NonNull @RequiresPermission.Read android.net.Uri, @Nullable String[], @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method public final boolean refresh(@NonNull android.net.Uri, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method public final void registerContentObserver(@NonNull android.net.Uri, boolean, @NonNull android.database.ContentObserver);
+    method public void releasePersistableUriPermission(@NonNull android.net.Uri, int);
+    method public static void removePeriodicSync(android.accounts.Account, String, android.os.Bundle);
+    method public static void removeStatusChangeListener(Object);
+    method public static void requestSync(android.accounts.Account, String, android.os.Bundle);
+    method public static void requestSync(android.content.SyncRequest);
+    method public static void setIsSyncable(android.accounts.Account, String, int);
+    method public static void setMasterSyncAutomatically(boolean);
+    method public static void setSyncAutomatically(android.accounts.Account, String, boolean);
+    method @Deprecated public void startSync(android.net.Uri, android.os.Bundle);
+    method public void takePersistableUriPermission(@NonNull android.net.Uri, int);
+    method @Nullable public final android.net.Uri uncanonicalize(@NonNull android.net.Uri);
+    method public final void unregisterContentObserver(@NonNull android.database.ContentObserver);
+    method public final int update(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues, @Nullable String, @Nullable String[]);
+    method public final int update(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+    method public static void validateSyncExtrasBundle(android.os.Bundle);
+    method @NonNull public static android.content.ContentResolver wrap(@NonNull android.content.ContentProvider);
+    method @NonNull public static android.content.ContentResolver wrap(@NonNull android.content.ContentProviderClient);
+    field public static final String ANY_CURSOR_ITEM_TYPE = "vnd.android.cursor.item/*";
+    field public static final String CURSOR_DIR_BASE_TYPE = "vnd.android.cursor.dir";
+    field public static final String CURSOR_ITEM_BASE_TYPE = "vnd.android.cursor.item";
+    field public static final String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
+    field public static final String EXTRA_REFRESH_SUPPORTED = "android.content.extra.REFRESH_SUPPORTED";
+    field public static final String EXTRA_SIZE = "android.content.extra.SIZE";
+    field public static final String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
+    field public static final int NOTIFY_DELETE = 16; // 0x10
+    field public static final int NOTIFY_INSERT = 4; // 0x4
+    field public static final int NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS = 2; // 0x2
+    field public static final int NOTIFY_SYNC_TO_NETWORK = 1; // 0x1
+    field public static final int NOTIFY_UPDATE = 8; // 0x8
+    field public static final String QUERY_ARG_GROUP_COLUMNS = "android:query-arg-group-columns";
+    field public static final String QUERY_ARG_LIMIT = "android:query-arg-limit";
+    field public static final String QUERY_ARG_OFFSET = "android:query-arg-offset";
+    field public static final String QUERY_ARG_SORT_COLLATION = "android:query-arg-sort-collation";
+    field public static final String QUERY_ARG_SORT_COLUMNS = "android:query-arg-sort-columns";
+    field public static final String QUERY_ARG_SORT_DIRECTION = "android:query-arg-sort-direction";
+    field public static final String QUERY_ARG_SORT_LOCALE = "android:query-arg-sort-locale";
+    field public static final String QUERY_ARG_SQL_GROUP_BY = "android:query-arg-sql-group-by";
+    field public static final String QUERY_ARG_SQL_HAVING = "android:query-arg-sql-having";
+    field public static final String QUERY_ARG_SQL_LIMIT = "android:query-arg-sql-limit";
+    field public static final String QUERY_ARG_SQL_SELECTION = "android:query-arg-sql-selection";
+    field public static final String QUERY_ARG_SQL_SELECTION_ARGS = "android:query-arg-sql-selection-args";
+    field public static final String QUERY_ARG_SQL_SORT_ORDER = "android:query-arg-sql-sort-order";
+    field public static final int QUERY_SORT_DIRECTION_ASCENDING = 0; // 0x0
+    field public static final int QUERY_SORT_DIRECTION_DESCENDING = 1; // 0x1
+    field public static final String SCHEME_ANDROID_RESOURCE = "android.resource";
+    field public static final String SCHEME_CONTENT = "content";
+    field public static final String SCHEME_FILE = "file";
+    field @Deprecated public static final String SYNC_EXTRAS_ACCOUNT = "account";
+    field public static final String SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS = "discard_deletions";
+    field public static final String SYNC_EXTRAS_DO_NOT_RETRY = "do_not_retry";
+    field public static final String SYNC_EXTRAS_EXPEDITED = "expedited";
+    field @Deprecated public static final String SYNC_EXTRAS_FORCE = "force";
+    field public static final String SYNC_EXTRAS_IGNORE_BACKOFF = "ignore_backoff";
+    field public static final String SYNC_EXTRAS_IGNORE_SETTINGS = "ignore_settings";
+    field public static final String SYNC_EXTRAS_INITIALIZE = "initialize";
+    field public static final String SYNC_EXTRAS_MANUAL = "force";
+    field public static final String SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS = "deletions_override";
+    field public static final String SYNC_EXTRAS_REQUIRE_CHARGING = "require_charging";
+    field public static final String SYNC_EXTRAS_SCHEDULE_AS_EXPEDITED_JOB = "schedule_as_expedited_job";
+    field public static final String SYNC_EXTRAS_UPLOAD = "upload";
+    field public static final int SYNC_OBSERVER_TYPE_ACTIVE = 4; // 0x4
+    field public static final int SYNC_OBSERVER_TYPE_PENDING = 2; // 0x2
+    field public static final int SYNC_OBSERVER_TYPE_SETTINGS = 1; // 0x1
+  }
+
+  public static final class ContentResolver.MimeTypeInfo {
+    method @NonNull public CharSequence getContentDescription();
+    method @NonNull public android.graphics.drawable.Icon getIcon();
+    method @NonNull public CharSequence getLabel();
+  }
+
+  public class ContentUris {
+    ctor public ContentUris();
+    method @NonNull public static android.net.Uri.Builder appendId(@NonNull android.net.Uri.Builder, long);
+    method public static long parseId(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri removeId(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri withAppendedId(@NonNull android.net.Uri, long);
+  }
+
+  public final class ContentValues implements android.os.Parcelable {
+    ctor public ContentValues();
+    ctor public ContentValues(int);
+    ctor public ContentValues(android.content.ContentValues);
+    method public void clear();
+    method public boolean containsKey(String);
+    method public int describeContents();
+    method public Object get(String);
+    method public Boolean getAsBoolean(String);
+    method public Byte getAsByte(String);
+    method public byte[] getAsByteArray(String);
+    method public Double getAsDouble(String);
+    method public Float getAsFloat(String);
+    method public Integer getAsInteger(String);
+    method public Long getAsLong(String);
+    method public Short getAsShort(String);
+    method public String getAsString(String);
+    method public boolean isEmpty();
+    method public java.util.Set<java.lang.String> keySet();
+    method public void put(String, String);
+    method public void put(String, Byte);
+    method public void put(String, Short);
+    method public void put(String, Integer);
+    method public void put(String, Long);
+    method public void put(String, Float);
+    method public void put(String, Double);
+    method public void put(String, Boolean);
+    method public void put(String, byte[]);
+    method public void putAll(android.content.ContentValues);
+    method public void putNull(String);
+    method public void remove(String);
+    method public int size();
+    method public java.util.Set<java.util.Map.Entry<java.lang.String,java.lang.Object>> valueSet();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentValues> CREATOR;
+    field public static final String TAG = "ContentValues";
+  }
+
+  public abstract class Context {
+    ctor public Context();
+    method public boolean bindIsolatedService(@NonNull @RequiresPermission android.content.Intent, int, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.content.ServiceConnection);
+    method public abstract boolean bindService(@RequiresPermission android.content.Intent, @NonNull android.content.ServiceConnection, int);
+    method public boolean bindService(@NonNull @RequiresPermission android.content.Intent, int, @NonNull java.util.concurrent.Executor, @NonNull android.content.ServiceConnection);
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.INTERACT_ACROSS_PROFILES}) public boolean bindServiceAsUser(@NonNull @RequiresPermission android.content.Intent, @NonNull android.content.ServiceConnection, int, @NonNull android.os.UserHandle);
+    method @CheckResult(suggest="#enforceCallingOrSelfPermission(String,String)") public abstract int checkCallingOrSelfPermission(@NonNull String);
+    method @CheckResult(suggest="#enforceCallingOrSelfUriPermission(Uri,int,String)") public abstract int checkCallingOrSelfUriPermission(android.net.Uri, int);
+    method @NonNull public int[] checkCallingOrSelfUriPermissions(@NonNull java.util.List<android.net.Uri>, int);
+    method @CheckResult(suggest="#enforceCallingPermission(String,String)") public abstract int checkCallingPermission(@NonNull String);
+    method @CheckResult(suggest="#enforceCallingUriPermission(Uri,int,String)") public abstract int checkCallingUriPermission(android.net.Uri, int);
+    method @NonNull public int[] checkCallingUriPermissions(@NonNull java.util.List<android.net.Uri>, int);
+    method @CheckResult(suggest="#enforcePermission(String,int,int,String)") public abstract int checkPermission(@NonNull String, int, int);
+    method public abstract int checkSelfPermission(@NonNull String);
+    method @CheckResult(suggest="#enforceUriPermission(Uri,int,int,String)") public abstract int checkUriPermission(android.net.Uri, int, int, int);
+    method @CheckResult(suggest="#enforceUriPermission(Uri,String,String,int,int,int,String)") public abstract int checkUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int);
+    method @NonNull public int[] checkUriPermissions(@NonNull java.util.List<android.net.Uri>, int, int, int);
+    method @Deprecated public abstract void clearWallpaper() throws java.io.IOException;
+    method @NonNull public android.content.Context createAttributionContext(@Nullable String);
+    method public abstract android.content.Context createConfigurationContext(@NonNull android.content.res.Configuration);
+    method @NonNull public android.content.Context createContext(@NonNull android.content.ContextParams);
+    method public abstract android.content.Context createContextForSplit(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.Context createDeviceProtectedStorageContext();
+    method @DisplayContext public abstract android.content.Context createDisplayContext(@NonNull android.view.Display);
+    method public abstract android.content.Context createPackageContext(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @UiContext public android.content.Context createWindowContext(int, @Nullable android.os.Bundle);
+    method @NonNull @UiContext public android.content.Context createWindowContext(@NonNull android.view.Display, int, @Nullable android.os.Bundle);
+    method public abstract String[] databaseList();
+    method public abstract boolean deleteDatabase(String);
+    method public abstract boolean deleteFile(String);
+    method public abstract boolean deleteSharedPreferences(String);
+    method public abstract void enforceCallingOrSelfPermission(@NonNull String, @Nullable String);
+    method public abstract void enforceCallingOrSelfUriPermission(android.net.Uri, int, String);
+    method public abstract void enforceCallingPermission(@NonNull String, @Nullable String);
+    method public abstract void enforceCallingUriPermission(android.net.Uri, int, String);
+    method public abstract void enforcePermission(@NonNull String, int, int, @Nullable String);
+    method public abstract void enforceUriPermission(android.net.Uri, int, int, int, String);
+    method public abstract void enforceUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int, @Nullable String);
+    method public abstract String[] fileList();
+    method public abstract android.content.Context getApplicationContext();
+    method public abstract android.content.pm.ApplicationInfo getApplicationInfo();
+    method public abstract android.content.res.AssetManager getAssets();
+    method @NonNull public android.content.AttributionSource getAttributionSource();
+    method @Nullable public String getAttributionTag();
+    method public abstract java.io.File getCacheDir();
+    method public abstract ClassLoader getClassLoader();
+    method public abstract java.io.File getCodeCacheDir();
+    method @ColorInt public final int getColor(@ColorRes int);
+    method @NonNull public final android.content.res.ColorStateList getColorStateList(@ColorRes int);
+    method public abstract android.content.ContentResolver getContentResolver();
+    method public abstract java.io.File getDataDir();
+    method public abstract java.io.File getDatabasePath(String);
+    method public abstract java.io.File getDir(String, int);
+    method @Nullable public android.view.Display getDisplay();
+    method @Nullable public final android.graphics.drawable.Drawable getDrawable(@DrawableRes int);
+    method @Nullable public abstract java.io.File getExternalCacheDir();
+    method public abstract java.io.File[] getExternalCacheDirs();
+    method @Nullable public abstract java.io.File getExternalFilesDir(@Nullable String);
+    method public abstract java.io.File[] getExternalFilesDirs(String);
+    method @Deprecated public abstract java.io.File[] getExternalMediaDirs();
+    method public abstract java.io.File getFileStreamPath(String);
+    method public abstract java.io.File getFilesDir();
+    method public java.util.concurrent.Executor getMainExecutor();
+    method public abstract android.os.Looper getMainLooper();
+    method public abstract java.io.File getNoBackupFilesDir();
+    method public abstract java.io.File getObbDir();
+    method public abstract java.io.File[] getObbDirs();
+    method @NonNull public String getOpPackageName();
+    method public abstract String getPackageCodePath();
+    method public abstract android.content.pm.PackageManager getPackageManager();
+    method public abstract String getPackageName();
+    method public abstract String getPackageResourcePath();
+    method @Nullable public android.content.ContextParams getParams();
+    method public abstract android.content.res.Resources getResources();
+    method public abstract android.content.SharedPreferences getSharedPreferences(String, int);
+    method @NonNull public final String getString(@StringRes int);
+    method @NonNull public final String getString(@StringRes int, java.lang.Object...);
+    method public abstract Object getSystemService(@NonNull String);
+    method public final <T> T getSystemService(@NonNull Class<T>);
+    method @Nullable public abstract String getSystemServiceName(@NonNull Class<?>);
+    method @NonNull public final CharSequence getText(@StringRes int);
+    method public abstract android.content.res.Resources.Theme getTheme();
+    method @Deprecated public abstract android.graphics.drawable.Drawable getWallpaper();
+    method @Deprecated public abstract int getWallpaperDesiredMinimumHeight();
+    method @Deprecated public abstract int getWallpaperDesiredMinimumWidth();
+    method public abstract void grantUriPermission(String, android.net.Uri, int);
+    method public abstract boolean isDeviceProtectedStorage();
+    method public boolean isRestricted();
+    method public boolean isUiContext();
+    method public abstract boolean moveDatabaseFrom(android.content.Context, String);
+    method public abstract boolean moveSharedPreferencesFrom(android.content.Context, String);
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@NonNull @StyleableRes int[]);
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@StyleRes int, @NonNull @StyleableRes int[]) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@Nullable android.util.AttributeSet, @NonNull @StyleableRes int[]);
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@Nullable android.util.AttributeSet, @NonNull @StyleableRes int[], @AttrRes int, @StyleRes int);
+    method public abstract java.io.FileInputStream openFileInput(String) throws java.io.FileNotFoundException;
+    method public abstract java.io.FileOutputStream openFileOutput(String, int) throws java.io.FileNotFoundException;
+    method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, @Nullable android.database.DatabaseErrorHandler);
+    method @Deprecated public abstract android.graphics.drawable.Drawable peekWallpaper();
+    method public void registerComponentCallbacks(android.content.ComponentCallbacks);
+    method @Nullable public abstract android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter);
+    method @Nullable public abstract android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, int);
+    method @Nullable public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler);
+    method @Nullable public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public abstract void removeStickyBroadcast(@RequiresPermission android.content.Intent);
+    method @Deprecated @RequiresPermission(allOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.BROADCAST_STICKY}) public abstract void removeStickyBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle);
+    method public abstract void revokeUriPermission(android.net.Uri, int);
+    method public abstract void revokeUriPermission(String, android.net.Uri, int);
+    method public abstract void sendBroadcast(@RequiresPermission android.content.Intent);
+    method public abstract void sendBroadcast(@RequiresPermission android.content.Intent, @Nullable String);
+    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle);
+    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String);
+    method public void sendBroadcastWithMultiplePermissions(@NonNull android.content.Intent, @NonNull String[]);
+    method public abstract void sendOrderedBroadcast(@RequiresPermission android.content.Intent, @Nullable String);
+    method public abstract void sendOrderedBroadcast(@NonNull @RequiresPermission android.content.Intent, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendOrderedBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String, android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public abstract void sendStickyBroadcast(@RequiresPermission android.content.Intent);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public void sendStickyBroadcast(@NonNull @RequiresPermission android.content.Intent, @Nullable android.os.Bundle);
+    method @Deprecated @RequiresPermission(allOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.BROADCAST_STICKY}) public abstract void sendStickyBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public abstract void sendStickyOrderedBroadcast(@RequiresPermission android.content.Intent, android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated @RequiresPermission(allOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.BROADCAST_STICKY}) public abstract void sendStickyOrderedBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public abstract void setTheme(@StyleRes int);
+    method @Deprecated public abstract void setWallpaper(android.graphics.Bitmap) throws java.io.IOException;
+    method @Deprecated public abstract void setWallpaper(java.io.InputStream) throws java.io.IOException;
+    method public abstract void startActivities(@RequiresPermission android.content.Intent[]);
+    method public abstract void startActivities(@RequiresPermission android.content.Intent[], android.os.Bundle);
+    method public abstract void startActivity(@RequiresPermission android.content.Intent);
+    method public abstract void startActivity(@RequiresPermission android.content.Intent, @Nullable android.os.Bundle);
+    method @Nullable public abstract android.content.ComponentName startForegroundService(android.content.Intent);
+    method public abstract boolean startInstrumentation(@NonNull android.content.ComponentName, @Nullable String, @Nullable android.os.Bundle);
+    method public abstract void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public abstract void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Nullable public abstract android.content.ComponentName startService(android.content.Intent);
+    method public abstract boolean stopService(android.content.Intent);
+    method public abstract void unbindService(@NonNull android.content.ServiceConnection);
+    method public void unregisterComponentCallbacks(android.content.ComponentCallbacks);
+    method public abstract void unregisterReceiver(android.content.BroadcastReceiver);
+    method public void updateServiceGroup(@NonNull android.content.ServiceConnection, int, int);
+    field public static final String ACCESSIBILITY_SERVICE = "accessibility";
+    field public static final String ACCOUNT_SERVICE = "account";
+    field public static final String ACTIVITY_SERVICE = "activity";
+    field public static final String ALARM_SERVICE = "alarm";
+    field public static final String APPWIDGET_SERVICE = "appwidget";
+    field public static final String APP_OPS_SERVICE = "appops";
+    field public static final String APP_SEARCH_SERVICE = "app_search";
+    field public static final String AUDIO_SERVICE = "audio";
+    field public static final String BATTERY_SERVICE = "batterymanager";
+    field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
+    field public static final int BIND_ADJUST_WITH_ACTIVITY = 128; // 0x80
+    field public static final int BIND_ALLOW_OOM_MANAGEMENT = 16; // 0x10
+    field public static final int BIND_AUTO_CREATE = 1; // 0x1
+    field public static final int BIND_DEBUG_UNBIND = 2; // 0x2
+    field public static final int BIND_EXTERNAL_SERVICE = -2147483648; // 0x80000000
+    field public static final int BIND_IMPORTANT = 64; // 0x40
+    field public static final int BIND_INCLUDE_CAPABILITIES = 4096; // 0x1000
+    field public static final int BIND_NOT_FOREGROUND = 4; // 0x4
+    field public static final int BIND_NOT_PERCEPTIBLE = 256; // 0x100
+    field public static final int BIND_WAIVE_PRIORITY = 32; // 0x20
+    field public static final String BIOMETRIC_SERVICE = "biometric";
+    field public static final String BLOB_STORE_SERVICE = "blob_store";
+    field public static final String BLUETOOTH_SERVICE = "bluetooth";
+    field public static final String BUGREPORT_SERVICE = "bugreport";
+    field public static final String CAMERA_SERVICE = "camera";
+    field public static final String CAPTIONING_SERVICE = "captioning";
+    field public static final String CARRIER_CONFIG_SERVICE = "carrier_config";
+    field public static final String CLIPBOARD_SERVICE = "clipboard";
+    field public static final String COMPANION_DEVICE_SERVICE = "companiondevice";
+    field public static final String CONNECTIVITY_DIAGNOSTICS_SERVICE = "connectivity_diagnostics";
+    field public static final String CONNECTIVITY_SERVICE = "connectivity";
+    field public static final String CONSUMER_IR_SERVICE = "consumer_ir";
+    field public static final int CONTEXT_IGNORE_SECURITY = 2; // 0x2
+    field public static final int CONTEXT_INCLUDE_CODE = 1; // 0x1
+    field public static final int CONTEXT_RESTRICTED = 4; // 0x4
+    field public static final String CROSS_PROFILE_APPS_SERVICE = "crossprofileapps";
+    field public static final String DEVICE_POLICY_SERVICE = "device_policy";
+    field public static final String DISPLAY_HASH_SERVICE = "display_hash";
+    field public static final String DISPLAY_SERVICE = "display";
+    field public static final String DOMAIN_VERIFICATION_SERVICE = "domain_verification";
+    field public static final String DOWNLOAD_SERVICE = "download";
+    field public static final String DROPBOX_SERVICE = "dropbox";
+    field public static final String EUICC_SERVICE = "euicc";
+    field public static final String FILE_INTEGRITY_SERVICE = "file_integrity";
+    field public static final String FINGERPRINT_SERVICE = "fingerprint";
+    field public static final String GAME_SERVICE = "game";
+    field public static final String HARDWARE_PROPERTIES_SERVICE = "hardware_properties";
+    field public static final String INPUT_METHOD_SERVICE = "input_method";
+    field public static final String INPUT_SERVICE = "input";
+    field public static final String IPSEC_SERVICE = "ipsec";
+    field public static final String JOB_SCHEDULER_SERVICE = "jobscheduler";
+    field public static final String KEYGUARD_SERVICE = "keyguard";
+    field public static final String LAUNCHER_APPS_SERVICE = "launcherapps";
+    field @UiContext public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
+    field public static final String LOCATION_SERVICE = "location";
+    field public static final String MEDIA_COMMUNICATION_SERVICE = "media_communication";
+    field public static final String MEDIA_METRICS_SERVICE = "media_metrics";
+    field public static final String MEDIA_PROJECTION_SERVICE = "media_projection";
+    field public static final String MEDIA_ROUTER_SERVICE = "media_router";
+    field public static final String MEDIA_SESSION_SERVICE = "media_session";
+    field public static final String MIDI_SERVICE = "midi";
+    field public static final int MODE_APPEND = 32768; // 0x8000
+    field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8
+    field @Deprecated public static final int MODE_MULTI_PROCESS = 4; // 0x4
+    field public static final int MODE_NO_LOCALIZED_COLLATORS = 16; // 0x10
+    field public static final int MODE_PRIVATE = 0; // 0x0
+    field @Deprecated public static final int MODE_WORLD_READABLE = 1; // 0x1
+    field @Deprecated public static final int MODE_WORLD_WRITEABLE = 2; // 0x2
+    field public static final String NETWORK_STATS_SERVICE = "netstats";
+    field public static final String NFC_SERVICE = "nfc";
+    field public static final String NOTIFICATION_SERVICE = "notification";
+    field public static final String NSD_SERVICE = "servicediscovery";
+    field public static final String PEOPLE_SERVICE = "people";
+    field public static final String PERFORMANCE_HINT_SERVICE = "performance_hint";
+    field public static final String POWER_SERVICE = "power";
+    field public static final String PRINT_SERVICE = "print";
+    field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
+    field public static final String RESTRICTIONS_SERVICE = "restrictions";
+    field public static final String ROLE_SERVICE = "role";
+    field public static final String SEARCH_SERVICE = "search";
+    field public static final String SENSOR_SERVICE = "sensor";
+    field public static final String SHORTCUT_SERVICE = "shortcut";
+    field public static final String STORAGE_SERVICE = "storage";
+    field public static final String STORAGE_STATS_SERVICE = "storagestats";
+    field public static final String SYSTEM_HEALTH_SERVICE = "systemhealth";
+    field public static final String TELECOM_SERVICE = "telecom";
+    field public static final String TELEPHONY_IMS_SERVICE = "telephony_ims";
+    field public static final String TELEPHONY_SERVICE = "phone";
+    field public static final String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service";
+    field public static final String TEXT_CLASSIFICATION_SERVICE = "textclassification";
+    field public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
+    field public static final String TV_INPUT_SERVICE = "tv_input";
+    field public static final String UI_MODE_SERVICE = "uimode";
+    field public static final String USAGE_STATS_SERVICE = "usagestats";
+    field public static final String USB_SERVICE = "usb";
+    field public static final String USER_SERVICE = "user";
+    field public static final String VIBRATOR_MANAGER_SERVICE = "vibrator_manager";
+    field @Deprecated public static final String VIBRATOR_SERVICE = "vibrator";
+    field public static final String VPN_MANAGEMENT_SERVICE = "vpn_management";
+    field @UiContext public static final String WALLPAPER_SERVICE = "wallpaper";
+    field public static final String WIFI_AWARE_SERVICE = "wifiaware";
+    field public static final String WIFI_P2P_SERVICE = "wifip2p";
+    field public static final String WIFI_RTT_RANGING_SERVICE = "wifirtt";
+    field public static final String WIFI_SERVICE = "wifi";
+    field @UiContext public static final String WINDOW_SERVICE = "window";
+  }
+
+  public final class ContextParams {
+    method @Nullable public String getAttributionTag();
+    method @Nullable public android.content.AttributionSource getNextAttributionSource();
+  }
+
+  public static final class ContextParams.Builder {
+    ctor public ContextParams.Builder();
+    ctor public ContextParams.Builder(@NonNull android.content.ContextParams);
+    method @NonNull public android.content.ContextParams build();
+    method @NonNull public android.content.ContextParams.Builder setAttributionTag(@Nullable String);
+    method @NonNull public android.content.ContextParams.Builder setNextAttributionSource(@Nullable android.content.AttributionSource);
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    ctor public ContextWrapper(android.content.Context);
+    method protected void attachBaseContext(android.content.Context);
+    method public boolean bindService(android.content.Intent, android.content.ServiceConnection, int);
+    method public int checkCallingOrSelfPermission(String);
+    method public int checkCallingOrSelfUriPermission(android.net.Uri, int);
+    method public int checkCallingPermission(String);
+    method public int checkCallingUriPermission(android.net.Uri, int);
+    method public int checkPermission(String, int, int);
+    method public int checkSelfPermission(String);
+    method public int checkUriPermission(android.net.Uri, int, int, int);
+    method public int checkUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int);
+    method @Deprecated public void clearWallpaper() throws java.io.IOException;
+    method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+    method public android.content.Context createContextForSplit(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.Context createDeviceProtectedStorageContext();
+    method public android.content.Context createDisplayContext(android.view.Display);
+    method public android.content.Context createPackageContext(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public String[] databaseList();
+    method public boolean deleteDatabase(String);
+    method public boolean deleteFile(String);
+    method public boolean deleteSharedPreferences(String);
+    method public void enforceCallingOrSelfPermission(String, @Nullable String);
+    method public void enforceCallingOrSelfUriPermission(android.net.Uri, int, String);
+    method public void enforceCallingPermission(String, @Nullable String);
+    method public void enforceCallingUriPermission(android.net.Uri, int, String);
+    method public void enforcePermission(String, int, int, @Nullable String);
+    method public void enforceUriPermission(android.net.Uri, int, int, int, String);
+    method public void enforceUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int, @Nullable String);
+    method public String[] fileList();
+    method public android.content.Context getApplicationContext();
+    method public android.content.pm.ApplicationInfo getApplicationInfo();
+    method public android.content.res.AssetManager getAssets();
+    method public android.content.Context getBaseContext();
+    method public java.io.File getCacheDir();
+    method public ClassLoader getClassLoader();
+    method public java.io.File getCodeCacheDir();
+    method public android.content.ContentResolver getContentResolver();
+    method public java.io.File getDataDir();
+    method public java.io.File getDatabasePath(String);
+    method public java.io.File getDir(String, int);
+    method @Nullable public java.io.File getExternalCacheDir();
+    method public java.io.File[] getExternalCacheDirs();
+    method @Nullable public java.io.File getExternalFilesDir(@Nullable String);
+    method public java.io.File[] getExternalFilesDirs(String);
+    method public java.io.File[] getExternalMediaDirs();
+    method public java.io.File getFileStreamPath(String);
+    method public java.io.File getFilesDir();
+    method public android.os.Looper getMainLooper();
+    method public java.io.File getNoBackupFilesDir();
+    method public java.io.File getObbDir();
+    method public java.io.File[] getObbDirs();
+    method public String getPackageCodePath();
+    method public android.content.pm.PackageManager getPackageManager();
+    method public String getPackageName();
+    method public String getPackageResourcePath();
+    method public android.content.res.Resources getResources();
+    method public android.content.SharedPreferences getSharedPreferences(String, int);
+    method public Object getSystemService(String);
+    method public String getSystemServiceName(Class<?>);
+    method public android.content.res.Resources.Theme getTheme();
+    method @Deprecated public android.graphics.drawable.Drawable getWallpaper();
+    method @Deprecated public int getWallpaperDesiredMinimumHeight();
+    method @Deprecated public int getWallpaperDesiredMinimumWidth();
+    method public void grantUriPermission(String, android.net.Uri, int);
+    method public boolean isDeviceProtectedStorage();
+    method public boolean moveDatabaseFrom(android.content.Context, String);
+    method public boolean moveSharedPreferencesFrom(android.content.Context, String);
+    method public java.io.FileInputStream openFileInput(String) throws java.io.FileNotFoundException;
+    method public java.io.FileOutputStream openFileOutput(String, int) throws java.io.FileNotFoundException;
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, @Nullable android.database.DatabaseErrorHandler);
+    method @Deprecated public android.graphics.drawable.Drawable peekWallpaper();
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter);
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, int);
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler);
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler, int);
+    method @Deprecated public void removeStickyBroadcast(android.content.Intent);
+    method @Deprecated public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void revokeUriPermission(android.net.Uri, int);
+    method public void revokeUriPermission(String, android.net.Uri, int);
+    method public void sendBroadcast(android.content.Intent);
+    method public void sendBroadcast(android.content.Intent, @Nullable String);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, String);
+    method public void sendOrderedBroadcast(android.content.Intent, @Nullable String);
+    method public void sendOrderedBroadcast(android.content.Intent, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcast(@NonNull @RequiresPermission android.content.Intent, int, @Nullable String, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, @Nullable String, @Nullable android.os.Bundle, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated public void sendStickyBroadcast(android.content.Intent);
+    method @Deprecated public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method @Deprecated public void sendStickyOrderedBroadcast(android.content.Intent, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public void setTheme(int);
+    method @Deprecated public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException;
+    method @Deprecated public void setWallpaper(java.io.InputStream) throws java.io.IOException;
+    method public void startActivities(android.content.Intent[]);
+    method public void startActivities(android.content.Intent[], @Nullable android.os.Bundle);
+    method public void startActivity(android.content.Intent);
+    method public void startActivity(android.content.Intent, @Nullable android.os.Bundle);
+    method @Nullable public android.content.ComponentName startForegroundService(android.content.Intent);
+    method public boolean startInstrumentation(android.content.ComponentName, @Nullable String, @Nullable android.os.Bundle);
+    method public void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Nullable public android.content.ComponentName startService(android.content.Intent);
+    method public boolean stopService(android.content.Intent);
+    method public void unbindService(android.content.ServiceConnection);
+    method public void unregisterReceiver(android.content.BroadcastReceiver);
+  }
+
+  @Deprecated public class CursorLoader extends android.content.AsyncTaskLoader<android.database.Cursor> {
+    ctor @Deprecated public CursorLoader(android.content.Context);
+    ctor @Deprecated public CursorLoader(android.content.Context, android.net.Uri, String[], String, String[], String);
+    method @Deprecated public void deliverResult(android.database.Cursor);
+    method @Deprecated public String[] getProjection();
+    method @Deprecated public String getSelection();
+    method @Deprecated public String[] getSelectionArgs();
+    method @Deprecated public String getSortOrder();
+    method @Deprecated public android.net.Uri getUri();
+    method @Deprecated public android.database.Cursor loadInBackground();
+    method @Deprecated public void onCanceled(android.database.Cursor);
+    method @Deprecated public void setProjection(String[]);
+    method @Deprecated public void setSelection(String);
+    method @Deprecated public void setSelectionArgs(String[]);
+    method @Deprecated public void setSortOrder(String);
+    method @Deprecated public void setUri(android.net.Uri);
+  }
+
+  public interface DialogInterface {
+    method public void cancel();
+    method public void dismiss();
+    field @Deprecated public static final int BUTTON1 = -1; // 0xffffffff
+    field @Deprecated public static final int BUTTON2 = -2; // 0xfffffffe
+    field @Deprecated public static final int BUTTON3 = -3; // 0xfffffffd
+    field public static final int BUTTON_NEGATIVE = -2; // 0xfffffffe
+    field public static final int BUTTON_NEUTRAL = -3; // 0xfffffffd
+    field public static final int BUTTON_POSITIVE = -1; // 0xffffffff
+  }
+
+  public static interface DialogInterface.OnCancelListener {
+    method public void onCancel(android.content.DialogInterface);
+  }
+
+  public static interface DialogInterface.OnClickListener {
+    method public void onClick(android.content.DialogInterface, int);
+  }
+
+  public static interface DialogInterface.OnDismissListener {
+    method public void onDismiss(android.content.DialogInterface);
+  }
+
+  public static interface DialogInterface.OnKeyListener {
+    method public boolean onKey(android.content.DialogInterface, int, android.view.KeyEvent);
+  }
+
+  public static interface DialogInterface.OnMultiChoiceClickListener {
+    method public void onClick(android.content.DialogInterface, int, boolean);
+  }
+
+  public static interface DialogInterface.OnShowListener {
+    method public void onShow(android.content.DialogInterface);
+  }
+
+  public final class Entity {
+    ctor public Entity(android.content.ContentValues);
+    method public void addSubValue(android.net.Uri, android.content.ContentValues);
+    method public android.content.ContentValues getEntityValues();
+    method public java.util.ArrayList<android.content.Entity.NamedContentValues> getSubValues();
+  }
+
+  public static class Entity.NamedContentValues {
+    ctor public Entity.NamedContentValues(android.net.Uri, android.content.ContentValues);
+    field public final android.net.Uri uri;
+    field public final android.content.ContentValues values;
+  }
+
+  public interface EntityIterator extends java.util.Iterator<android.content.Entity> {
+    method public void close();
+    method public void reset();
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    ctor public Intent();
+    ctor public Intent(android.content.Intent);
+    ctor public Intent(String);
+    ctor public Intent(String, android.net.Uri);
+    ctor public Intent(android.content.Context, Class<?>);
+    ctor public Intent(String, android.net.Uri, android.content.Context, Class<?>);
+    method @NonNull public android.content.Intent addCategory(String);
+    method @NonNull public android.content.Intent addFlags(int);
+    method public Object clone();
+    method @NonNull public android.content.Intent cloneFilter();
+    method public static android.content.Intent createChooser(android.content.Intent, CharSequence);
+    method public static android.content.Intent createChooser(android.content.Intent, CharSequence, android.content.IntentSender);
+    method public int describeContents();
+    method public int fillIn(@NonNull android.content.Intent, int);
+    method public boolean filterEquals(android.content.Intent);
+    method public int filterHashCode();
+    method @Nullable public String getAction();
+    method @Nullable public boolean[] getBooleanArrayExtra(String);
+    method public boolean getBooleanExtra(String, boolean);
+    method @Nullable public android.os.Bundle getBundleExtra(String);
+    method @Nullable public byte[] getByteArrayExtra(String);
+    method public byte getByteExtra(String, byte);
+    method public java.util.Set<java.lang.String> getCategories();
+    method @Nullable public char[] getCharArrayExtra(String);
+    method public char getCharExtra(String, char);
+    method @Nullable public CharSequence[] getCharSequenceArrayExtra(String);
+    method @Nullable public java.util.ArrayList<java.lang.CharSequence> getCharSequenceArrayListExtra(String);
+    method @Nullable public CharSequence getCharSequenceExtra(String);
+    method @Nullable public android.content.ClipData getClipData();
+    method @Nullable public android.content.ComponentName getComponent();
+    method @Nullable public android.net.Uri getData();
+    method @Nullable public String getDataString();
+    method @Nullable public double[] getDoubleArrayExtra(String);
+    method public double getDoubleExtra(String, double);
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getFlags();
+    method @Nullable public float[] getFloatArrayExtra(String);
+    method public float getFloatExtra(String, float);
+    method @Nullable public String getIdentifier();
+    method @Nullable public int[] getIntArrayExtra(String);
+    method public int getIntExtra(String, int);
+    method @Nullable public java.util.ArrayList<java.lang.Integer> getIntegerArrayListExtra(String);
+    method @Deprecated public static android.content.Intent getIntent(String) throws java.net.URISyntaxException;
+    method public static android.content.Intent getIntentOld(String) throws java.net.URISyntaxException;
+    method @Nullable public long[] getLongArrayExtra(String);
+    method public long getLongExtra(String, long);
+    method @Nullable public String getPackage();
+    method @Nullable public android.os.Parcelable[] getParcelableArrayExtra(String);
+    method @Nullable public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayListExtra(String);
+    method @Nullable public <T extends android.os.Parcelable> T getParcelableExtra(String);
+    method @Nullable public String getScheme();
+    method @Nullable public android.content.Intent getSelector();
+    method @Nullable public java.io.Serializable getSerializableExtra(String);
+    method @Nullable public short[] getShortArrayExtra(String);
+    method public short getShortExtra(String, short);
+    method @Nullable public android.graphics.Rect getSourceBounds();
+    method @Nullable public String[] getStringArrayExtra(String);
+    method @Nullable public java.util.ArrayList<java.lang.String> getStringArrayListExtra(String);
+    method @Nullable public String getStringExtra(String);
+    method @Nullable public String getType();
+    method public boolean hasCategory(String);
+    method public boolean hasExtra(String);
+    method public boolean hasFileDescriptors();
+    method public static android.content.Intent makeMainActivity(android.content.ComponentName);
+    method public static android.content.Intent makeMainSelectorActivity(String, String);
+    method public static android.content.Intent makeRestartActivityTask(android.content.ComponentName);
+    method @Nullable public static String normalizeMimeType(@Nullable String);
+    method @NonNull public static android.content.Intent parseIntent(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static android.content.Intent parseUri(String, int) throws java.net.URISyntaxException;
+    method @NonNull public android.content.Intent putCharSequenceArrayListExtra(String, @Nullable java.util.ArrayList<java.lang.CharSequence>);
+    method @NonNull public android.content.Intent putExtra(String, boolean);
+    method @NonNull public android.content.Intent putExtra(String, byte);
+    method @NonNull public android.content.Intent putExtra(String, char);
+    method @NonNull public android.content.Intent putExtra(String, short);
+    method @NonNull public android.content.Intent putExtra(String, int);
+    method @NonNull public android.content.Intent putExtra(String, long);
+    method @NonNull public android.content.Intent putExtra(String, float);
+    method @NonNull public android.content.Intent putExtra(String, double);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable String);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable CharSequence);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable android.os.Parcelable);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable android.os.Parcelable[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable java.io.Serializable);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable boolean[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable byte[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable short[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable char[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable int[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable long[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable float[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable double[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable String[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable CharSequence[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable android.os.Bundle);
+    method @NonNull public android.content.Intent putExtras(@NonNull android.content.Intent);
+    method @NonNull public android.content.Intent putExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.content.Intent putIntegerArrayListExtra(String, @Nullable java.util.ArrayList<java.lang.Integer>);
+    method @NonNull public android.content.Intent putParcelableArrayListExtra(String, @Nullable java.util.ArrayList<? extends android.os.Parcelable>);
+    method @NonNull public android.content.Intent putStringArrayListExtra(String, @Nullable java.util.ArrayList<java.lang.String>);
+    method public void readFromParcel(android.os.Parcel);
+    method public void removeCategory(String);
+    method public void removeExtra(String);
+    method public void removeFlags(int);
+    method @NonNull public android.content.Intent replaceExtras(@NonNull android.content.Intent);
+    method @NonNull public android.content.Intent replaceExtras(@Nullable android.os.Bundle);
+    method public android.content.ComponentName resolveActivity(@NonNull android.content.pm.PackageManager);
+    method public android.content.pm.ActivityInfo resolveActivityInfo(@NonNull android.content.pm.PackageManager, int);
+    method @Nullable public String resolveType(@NonNull android.content.Context);
+    method @Nullable public String resolveType(@NonNull android.content.ContentResolver);
+    method @Nullable public String resolveTypeIfNeeded(@NonNull android.content.ContentResolver);
+    method @NonNull public android.content.Intent setAction(@Nullable String);
+    method @NonNull public android.content.Intent setClass(@NonNull android.content.Context, @NonNull Class<?>);
+    method @NonNull public android.content.Intent setClassName(@NonNull android.content.Context, @NonNull String);
+    method @NonNull public android.content.Intent setClassName(@NonNull String, @NonNull String);
+    method public void setClipData(@Nullable android.content.ClipData);
+    method @NonNull public android.content.Intent setComponent(@Nullable android.content.ComponentName);
+    method @NonNull public android.content.Intent setData(@Nullable android.net.Uri);
+    method @NonNull public android.content.Intent setDataAndNormalize(@NonNull android.net.Uri);
+    method @NonNull public android.content.Intent setDataAndType(@Nullable android.net.Uri, @Nullable String);
+    method @NonNull public android.content.Intent setDataAndTypeAndNormalize(@NonNull android.net.Uri, @Nullable String);
+    method public void setExtrasClassLoader(@Nullable ClassLoader);
+    method @NonNull public android.content.Intent setFlags(int);
+    method @NonNull public android.content.Intent setIdentifier(@Nullable String);
+    method @NonNull public android.content.Intent setPackage(@Nullable String);
+    method public void setSelector(@Nullable android.content.Intent);
+    method public void setSourceBounds(@Nullable android.graphics.Rect);
+    method @NonNull public android.content.Intent setType(@Nullable String);
+    method @NonNull public android.content.Intent setTypeAndNormalize(@Nullable String);
+    method @Deprecated public String toURI();
+    method public String toUri(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE";
+    field public static final String ACTION_ALL_APPS = "android.intent.action.ALL_APPS";
+    field public static final String ACTION_ANSWER = "android.intent.action.ANSWER";
+    field public static final String ACTION_APPLICATION_PREFERENCES = "android.intent.action.APPLICATION_PREFERENCES";
+    field public static final String ACTION_APPLICATION_RESTRICTIONS_CHANGED = "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED";
+    field public static final String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
+    field public static final String ACTION_ASSIST = "android.intent.action.ASSIST";
+    field public static final String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
+    field public static final String ACTION_AUTO_REVOKE_PERMISSIONS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+    field public static final String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
+    field public static final String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
+    field public static final String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
+    field public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
+    field public static final String ACTION_BUG_REPORT = "android.intent.action.BUG_REPORT";
+    field public static final String ACTION_CALL = "android.intent.action.CALL";
+    field public static final String ACTION_CALL_BUTTON = "android.intent.action.CALL_BUTTON";
+    field public static final String ACTION_CAMERA_BUTTON = "android.intent.action.CAMERA_BUTTON";
+    field public static final String ACTION_CARRIER_SETUP = "android.intent.action.CARRIER_SETUP";
+    field public static final String ACTION_CHOOSER = "android.intent.action.CHOOSER";
+    field @Deprecated @RequiresPermission("android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS") public static final String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";
+    field public static final String ACTION_CONFIGURATION_CHANGED = "android.intent.action.CONFIGURATION_CHANGED";
+    field public static final String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT";
+    field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
+    field public static final String ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT";
+    field public static final String ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED";
+    field public static final String ACTION_DEFAULT = "android.intent.action.VIEW";
+    field public static final String ACTION_DEFINE = "android.intent.action.DEFINE";
+    field public static final String ACTION_DELETE = "android.intent.action.DELETE";
+    field @Deprecated public static final String ACTION_DEVICE_STORAGE_LOW = "android.intent.action.DEVICE_STORAGE_LOW";
+    field @Deprecated public static final String ACTION_DEVICE_STORAGE_OK = "android.intent.action.DEVICE_STORAGE_OK";
+    field public static final String ACTION_DIAL = "android.intent.action.DIAL";
+    field public static final String ACTION_DOCK_EVENT = "android.intent.action.DOCK_EVENT";
+    field public static final String ACTION_DREAMING_STARTED = "android.intent.action.DREAMING_STARTED";
+    field public static final String ACTION_DREAMING_STOPPED = "android.intent.action.DREAMING_STOPPED";
+    field public static final String ACTION_EDIT = "android.intent.action.EDIT";
+    field public static final String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE";
+    field public static final String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE";
+    field public static final String ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST";
+    field public static final String ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT";
+    field public static final String ACTION_GET_RESTRICTION_ENTRIES = "android.intent.action.GET_RESTRICTION_ENTRIES";
+    field public static final String ACTION_GTALK_SERVICE_CONNECTED = "android.intent.action.GTALK_CONNECTED";
+    field public static final String ACTION_GTALK_SERVICE_DISCONNECTED = "android.intent.action.GTALK_DISCONNECTED";
+    field public static final String ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG";
+    field public static final String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED";
+    field public static final String ACTION_INSERT = "android.intent.action.INSERT";
+    field public static final String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
+    field public static final String ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE";
+    field @Deprecated public static final String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
+    field public static final String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
+    field public static final String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
+    field public static final String ACTION_MAIN = "android.intent.action.MAIN";
+    field public static final String ACTION_MANAGED_PROFILE_ADDED = "android.intent.action.MANAGED_PROFILE_ADDED";
+    field public static final String ACTION_MANAGED_PROFILE_AVAILABLE = "android.intent.action.MANAGED_PROFILE_AVAILABLE";
+    field public static final String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED";
+    field public static final String ACTION_MANAGED_PROFILE_UNAVAILABLE = "android.intent.action.MANAGED_PROFILE_UNAVAILABLE";
+    field public static final String ACTION_MANAGED_PROFILE_UNLOCKED = "android.intent.action.MANAGED_PROFILE_UNLOCKED";
+    field public static final String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE";
+    field public static final String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
+    field public static final String ACTION_MANAGE_UNUSED_APPS = "android.intent.action.MANAGE_UNUSED_APPS";
+    field public static final String ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
+    field public static final String ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON";
+    field public static final String ACTION_MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING";
+    field public static final String ACTION_MEDIA_EJECT = "android.intent.action.MEDIA_EJECT";
+    field public static final String ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED";
+    field public static final String ACTION_MEDIA_NOFS = "android.intent.action.MEDIA_NOFS";
+    field public static final String ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED";
+    field public static final String ACTION_MEDIA_SCANNER_FINISHED = "android.intent.action.MEDIA_SCANNER_FINISHED";
+    field @Deprecated public static final String ACTION_MEDIA_SCANNER_SCAN_FILE = "android.intent.action.MEDIA_SCANNER_SCAN_FILE";
+    field public static final String ACTION_MEDIA_SCANNER_STARTED = "android.intent.action.MEDIA_SCANNER_STARTED";
+    field public static final String ACTION_MEDIA_SHARED = "android.intent.action.MEDIA_SHARED";
+    field public static final String ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE";
+    field public static final String ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED";
+    field public static final String ACTION_MY_PACKAGE_REPLACED = "android.intent.action.MY_PACKAGE_REPLACED";
+    field public static final String ACTION_MY_PACKAGE_SUSPENDED = "android.intent.action.MY_PACKAGE_SUSPENDED";
+    field public static final String ACTION_MY_PACKAGE_UNSUSPENDED = "android.intent.action.MY_PACKAGE_UNSUSPENDED";
+    field @Deprecated public static final String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
+    field public static final String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
+    field public static final String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
+    field public static final String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED";
+    field public static final String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED";
+    field public static final String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
+    field public static final String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
+    field public static final String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED";
+    field public static final String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
+    field public static final String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED";
+    field @Deprecated public static final String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
+    field public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
+    field public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
+    field public static final String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
+    field public static final String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
+    field public static final String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED";
+    field public static final String ACTION_PASTE = "android.intent.action.PASTE";
+    field public static final String ACTION_PICK = "android.intent.action.PICK";
+    field public static final String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY";
+    field public static final String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED";
+    field public static final String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED";
+    field public static final String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY";
+    field public static final String ACTION_PROCESS_TEXT = "android.intent.action.PROCESS_TEXT";
+    field public static final String ACTION_PROFILE_ACCESSIBLE = "android.intent.action.PROFILE_ACCESSIBLE";
+    field public static final String ACTION_PROFILE_INACCESSIBLE = "android.intent.action.PROFILE_INACCESSIBLE";
+    field public static final String ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED";
+    field public static final String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK";
+    field public static final String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
+    field public static final String ACTION_REBOOT = "android.intent.action.REBOOT";
+    field public static final String ACTION_RUN = "android.intent.action.RUN";
+    field public static final String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
+    field public static final String ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON";
+    field public static final String ACTION_SEARCH = "android.intent.action.SEARCH";
+    field public static final String ACTION_SEARCH_LONG_PRESS = "android.intent.action.SEARCH_LONG_PRESS";
+    field public static final String ACTION_SEND = "android.intent.action.SEND";
+    field public static final String ACTION_SENDTO = "android.intent.action.SENDTO";
+    field public static final String ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE";
+    field public static final String ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER";
+    field public static final String ACTION_SHOW_APP_INFO = "android.intent.action.SHOW_APP_INFO";
+    field public static final String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN";
+    field public static final String ACTION_SYNC = "android.intent.action.SYNC";
+    field public static final String ACTION_SYSTEM_TUTORIAL = "android.intent.action.SYSTEM_TUTORIAL";
+    field public static final String ACTION_TIMEZONE_CHANGED = "android.intent.action.TIMEZONE_CHANGED";
+    field public static final String ACTION_TIME_CHANGED = "android.intent.action.TIME_SET";
+    field public static final String ACTION_TIME_TICK = "android.intent.action.TIME_TICK";
+    field public static final String ACTION_TRANSLATE = "android.intent.action.TRANSLATE";
+    field public static final String ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED";
+    field @Deprecated public static final String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED";
+    field @Deprecated public static final String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED";
+    field @Deprecated public static final String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE";
+    field public static final String ACTION_USER_BACKGROUND = "android.intent.action.USER_BACKGROUND";
+    field public static final String ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND";
+    field public static final String ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE";
+    field public static final String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT";
+    field public static final String ACTION_USER_UNLOCKED = "android.intent.action.USER_UNLOCKED";
+    field public static final String ACTION_VIEW = "android.intent.action.VIEW";
+    field public static final String ACTION_VIEW_LOCUS = "android.intent.action.VIEW_LOCUS";
+    field @RequiresPermission(android.Manifest.permission.START_VIEW_PERMISSION_USAGE) public static final String ACTION_VIEW_PERMISSION_USAGE = "android.intent.action.VIEW_PERMISSION_USAGE";
+    field @RequiresPermission(android.Manifest.permission.START_VIEW_PERMISSION_USAGE) public static final String ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD = "android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD";
+    field public static final String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND";
+    field @Deprecated public static final String ACTION_WALLPAPER_CHANGED = "android.intent.action.WALLPAPER_CHANGED";
+    field public static final String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH";
+    field public static final String CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET = "android.intent.category.ACCESSIBILITY_SHORTCUT_TARGET";
+    field public static final String CATEGORY_ALTERNATIVE = "android.intent.category.ALTERNATIVE";
+    field public static final String CATEGORY_APP_BROWSER = "android.intent.category.APP_BROWSER";
+    field public static final String CATEGORY_APP_CALCULATOR = "android.intent.category.APP_CALCULATOR";
+    field public static final String CATEGORY_APP_CALENDAR = "android.intent.category.APP_CALENDAR";
+    field public static final String CATEGORY_APP_CONTACTS = "android.intent.category.APP_CONTACTS";
+    field public static final String CATEGORY_APP_EMAIL = "android.intent.category.APP_EMAIL";
+    field public static final String CATEGORY_APP_FILES = "android.intent.category.APP_FILES";
+    field public static final String CATEGORY_APP_GALLERY = "android.intent.category.APP_GALLERY";
+    field public static final String CATEGORY_APP_MAPS = "android.intent.category.APP_MAPS";
+    field public static final String CATEGORY_APP_MARKET = "android.intent.category.APP_MARKET";
+    field public static final String CATEGORY_APP_MESSAGING = "android.intent.category.APP_MESSAGING";
+    field public static final String CATEGORY_APP_MUSIC = "android.intent.category.APP_MUSIC";
+    field public static final String CATEGORY_BROWSABLE = "android.intent.category.BROWSABLE";
+    field public static final String CATEGORY_CAR_DOCK = "android.intent.category.CAR_DOCK";
+    field public static final String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE";
+    field public static final String CATEGORY_DEFAULT = "android.intent.category.DEFAULT";
+    field public static final String CATEGORY_DESK_DOCK = "android.intent.category.DESK_DOCK";
+    field public static final String CATEGORY_DEVELOPMENT_PREFERENCE = "android.intent.category.DEVELOPMENT_PREFERENCE";
+    field public static final String CATEGORY_EMBED = "android.intent.category.EMBED";
+    field public static final String CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST = "android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST";
+    field public static final String CATEGORY_HE_DESK_DOCK = "android.intent.category.HE_DESK_DOCK";
+    field public static final String CATEGORY_HOME = "android.intent.category.HOME";
+    field public static final String CATEGORY_INFO = "android.intent.category.INFO";
+    field public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";
+    field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+    field public static final String CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK";
+    field public static final String CATEGORY_MONKEY = "android.intent.category.MONKEY";
+    field public static final String CATEGORY_OPENABLE = "android.intent.category.OPENABLE";
+    field public static final String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE";
+    field public static final String CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE";
+    field public static final String CATEGORY_SECONDARY_HOME = "android.intent.category.SECONDARY_HOME";
+    field public static final String CATEGORY_SELECTED_ALTERNATIVE = "android.intent.category.SELECTED_ALTERNATIVE";
+    field public static final String CATEGORY_TAB = "android.intent.category.TAB";
+    field public static final String CATEGORY_TEST = "android.intent.category.TEST";
+    field public static final String CATEGORY_TYPED_OPENABLE = "android.intent.category.TYPED_OPENABLE";
+    field public static final String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST";
+    field public static final String CATEGORY_VOICE = "android.intent.category.VOICE";
+    field public static final String CATEGORY_VR_HOME = "android.intent.category.VR_HOME";
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.Intent> CREATOR;
+    field public static final String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
+    field public static final String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE";
+    field @Deprecated public static final String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
+    field public static final String EXTRA_ALTERNATE_INTENTS = "android.intent.extra.ALTERNATE_INTENTS";
+    field public static final String EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT";
+    field public static final String EXTRA_ASSIST_INPUT_DEVICE_ID = "android.intent.extra.ASSIST_INPUT_DEVICE_ID";
+    field public static final String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD";
+    field public static final String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
+    field public static final String EXTRA_ASSIST_UID = "android.intent.extra.ASSIST_UID";
+    field public static final String EXTRA_ATTRIBUTION_TAGS = "android.intent.extra.ATTRIBUTION_TAGS";
+    field public static final String EXTRA_AUTO_LAUNCH_SINGLE_CHOICE = "android.intent.extra.AUTO_LAUNCH_SINGLE_CHOICE";
+    field public static final String EXTRA_BCC = "android.intent.extra.BCC";
+    field public static final String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
+    field public static final String EXTRA_CC = "android.intent.extra.CC";
+    field @Deprecated public static final String EXTRA_CHANGED_COMPONENT_NAME = "android.intent.extra.changed_component_name";
+    field public static final String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list";
+    field public static final String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
+    field public static final String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
+    field public static final String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER = "android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER";
+    field public static final String EXTRA_CHOOSER_TARGETS = "android.intent.extra.CHOOSER_TARGETS";
+    field public static final String EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT";
+    field public static final String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER";
+    field public static final String EXTRA_COMPONENT_NAME = "android.intent.extra.COMPONENT_NAME";
+    field public static final String EXTRA_CONTENT_ANNOTATIONS = "android.intent.extra.CONTENT_ANNOTATIONS";
+    field public static final String EXTRA_CONTENT_QUERY = "android.intent.extra.CONTENT_QUERY";
+    field public static final String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED";
+    field public static final String EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE";
+    field public static final int EXTRA_DOCK_STATE_CAR = 2; // 0x2
+    field public static final int EXTRA_DOCK_STATE_DESK = 1; // 0x1
+    field public static final int EXTRA_DOCK_STATE_HE_DESK = 4; // 0x4
+    field public static final int EXTRA_DOCK_STATE_LE_DESK = 3; // 0x3
+    field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0
+    field public static final String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP";
+    field public static final String EXTRA_DURATION_MILLIS = "android.intent.extra.DURATION_MILLIS";
+    field public static final String EXTRA_EMAIL = "android.intent.extra.EMAIL";
+    field public static final String EXTRA_END_TIME = "android.intent.extra.END_TIME";
+    field public static final String EXTRA_EXCLUDE_COMPONENTS = "android.intent.extra.EXCLUDE_COMPONENTS";
+    field public static final String EXTRA_FROM_STORAGE = "android.intent.extra.FROM_STORAGE";
+    field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+    field public static final String EXTRA_INDEX = "android.intent.extra.INDEX";
+    field public static final String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
+    field public static final String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME";
+    field public static final String EXTRA_INTENT = "android.intent.extra.INTENT";
+    field public static final String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT";
+    field public static final String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY";
+    field public static final String EXTRA_LOCUS_ID = "android.intent.extra.LOCUS_ID";
+    field public static final String EXTRA_MIME_TYPES = "android.intent.extra.MIME_TYPES";
+    field public static final String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE";
+    field public static final String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI";
+    field public static final String EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME";
+    field public static final String EXTRA_PERMISSION_GROUP_NAME = "android.intent.extra.PERMISSION_GROUP_NAME";
+    field public static final String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
+    field public static final String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
+    field public static final String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
+    field public static final String EXTRA_QUICK_VIEW_FEATURES = "android.intent.extra.QUICK_VIEW_FEATURES";
+    field public static final String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
+    field public static final String EXTRA_REFERRER = "android.intent.extra.REFERRER";
+    field public static final String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
+    field public static final String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";
+    field public static final String EXTRA_REPLACEMENT_EXTRAS = "android.intent.extra.REPLACEMENT_EXTRAS";
+    field public static final String EXTRA_REPLACING = "android.intent.extra.REPLACING";
+    field public static final String EXTRA_RESTRICTIONS_BUNDLE = "android.intent.extra.restrictions_bundle";
+    field public static final String EXTRA_RESTRICTIONS_INTENT = "android.intent.extra.restrictions_intent";
+    field public static final String EXTRA_RESTRICTIONS_LIST = "android.intent.extra.restrictions_list";
+    field public static final String EXTRA_RESULT_RECEIVER = "android.intent.extra.RESULT_RECEIVER";
+    field public static final String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT";
+    field @Deprecated public static final String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON";
+    field @Deprecated public static final String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE";
+    field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+    field @Deprecated public static final String EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT";
+    field @Deprecated public static final String EXTRA_SHORTCUT_NAME = "android.intent.extra.shortcut.NAME";
+    field public static final String EXTRA_SHUTDOWN_USERSPACE_ONLY = "android.intent.extra.SHUTDOWN_USERSPACE_ONLY";
+    field public static final String EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME";
+    field public static final String EXTRA_START_TIME = "android.intent.extra.START_TIME";
+    field public static final String EXTRA_STREAM = "android.intent.extra.STREAM";
+    field public static final String EXTRA_SUBJECT = "android.intent.extra.SUBJECT";
+    field public static final String EXTRA_SUSPENDED_PACKAGE_EXTRAS = "android.intent.extra.SUSPENDED_PACKAGE_EXTRAS";
+    field public static final String EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE";
+    field public static final String EXTRA_TEXT = "android.intent.extra.TEXT";
+    field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+    field public static final String EXTRA_TIMEZONE = "time-zone";
+    field public static final String EXTRA_TITLE = "android.intent.extra.TITLE";
+    field public static final String EXTRA_UID = "android.intent.extra.UID";
+    field public static final String EXTRA_USER = "android.intent.extra.USER";
+    field public static final String EXTRA_USER_INITIATED = "android.intent.extra.USER_INITIATED";
+    field public static final int FILL_IN_ACTION = 1; // 0x1
+    field public static final int FILL_IN_CATEGORIES = 4; // 0x4
+    field public static final int FILL_IN_CLIP_DATA = 128; // 0x80
+    field public static final int FILL_IN_COMPONENT = 8; // 0x8
+    field public static final int FILL_IN_DATA = 2; // 0x2
+    field public static final int FILL_IN_IDENTIFIER = 256; // 0x100
+    field public static final int FILL_IN_PACKAGE = 16; // 0x10
+    field public static final int FILL_IN_SELECTOR = 64; // 0x40
+    field public static final int FILL_IN_SOURCE_BOUNDS = 32; // 0x20
+    field public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 4194304; // 0x400000
+    field public static final int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000
+    field public static final int FLAG_ACTIVITY_CLEAR_TOP = 67108864; // 0x4000000
+    field @Deprecated public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 524288; // 0x80000
+    field public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 8388608; // 0x800000
+    field public static final int FLAG_ACTIVITY_FORWARD_RESULT = 33554432; // 0x2000000
+    field public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 1048576; // 0x100000
+    field public static final int FLAG_ACTIVITY_LAUNCH_ADJACENT = 4096; // 0x1000
+    field public static final int FLAG_ACTIVITY_MATCH_EXTERNAL = 2048; // 0x800
+    field public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 134217728; // 0x8000000
+    field public static final int FLAG_ACTIVITY_NEW_DOCUMENT = 524288; // 0x80000
+    field public static final int FLAG_ACTIVITY_NEW_TASK = 268435456; // 0x10000000
+    field public static final int FLAG_ACTIVITY_NO_ANIMATION = 65536; // 0x10000
+    field public static final int FLAG_ACTIVITY_NO_HISTORY = 1073741824; // 0x40000000
+    field public static final int FLAG_ACTIVITY_NO_USER_ACTION = 262144; // 0x40000
+    field public static final int FLAG_ACTIVITY_PREVIOUS_IS_TOP = 16777216; // 0x1000000
+    field public static final int FLAG_ACTIVITY_REORDER_TO_FRONT = 131072; // 0x20000
+    field public static final int FLAG_ACTIVITY_REQUIRE_DEFAULT = 512; // 0x200
+    field public static final int FLAG_ACTIVITY_REQUIRE_NON_BROWSER = 1024; // 0x400
+    field public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 2097152; // 0x200000
+    field public static final int FLAG_ACTIVITY_RETAIN_IN_RECENTS = 8192; // 0x2000
+    field public static final int FLAG_ACTIVITY_SINGLE_TOP = 536870912; // 0x20000000
+    field public static final int FLAG_ACTIVITY_TASK_ON_HOME = 16384; // 0x4000
+    field public static final int FLAG_DEBUG_LOG_RESOLUTION = 8; // 0x8
+    field public static final int FLAG_DIRECT_BOOT_AUTO = 256; // 0x100
+    field public static final int FLAG_EXCLUDE_STOPPED_PACKAGES = 16; // 0x10
+    field public static final int FLAG_FROM_BACKGROUND = 4; // 0x4
+    field public static final int FLAG_GRANT_PERSISTABLE_URI_PERMISSION = 64; // 0x40
+    field public static final int FLAG_GRANT_PREFIX_URI_PERMISSION = 128; // 0x80
+    field public static final int FLAG_GRANT_READ_URI_PERMISSION = 1; // 0x1
+    field public static final int FLAG_GRANT_WRITE_URI_PERMISSION = 2; // 0x2
+    field public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32; // 0x20
+    field public static final int FLAG_RECEIVER_FOREGROUND = 268435456; // 0x10000000
+    field public static final int FLAG_RECEIVER_NO_ABORT = 134217728; // 0x8000000
+    field public static final int FLAG_RECEIVER_REGISTERED_ONLY = 1073741824; // 0x40000000
+    field public static final int FLAG_RECEIVER_REPLACE_PENDING = 536870912; // 0x20000000
+    field public static final int FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS = 2097152; // 0x200000
+    field public static final String METADATA_DOCK_HOME = "android.dock_home";
+    field public static final int URI_ALLOW_UNSAFE = 4; // 0x4
+    field public static final int URI_ANDROID_APP_SCHEME = 2; // 0x2
+    field public static final int URI_INTENT_SCHEME = 1; // 0x1
+  }
+
+  public static final class Intent.FilterComparison {
+    ctor public Intent.FilterComparison(android.content.Intent);
+    method public android.content.Intent getIntent();
+  }
+
+  public static class Intent.ShortcutIconResource implements android.os.Parcelable {
+    ctor public Intent.ShortcutIconResource();
+    method public int describeContents();
+    method public static android.content.Intent.ShortcutIconResource fromContext(android.content.Context, @AnyRes int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.Intent.ShortcutIconResource> CREATOR;
+    field public String packageName;
+    field public String resourceName;
+  }
+
+  public class IntentFilter implements android.os.Parcelable {
+    ctor public IntentFilter();
+    ctor public IntentFilter(String);
+    ctor public IntentFilter(String, String) throws android.content.IntentFilter.MalformedMimeTypeException;
+    ctor public IntentFilter(android.content.IntentFilter);
+    method public final java.util.Iterator<java.lang.String> actionsIterator();
+    method public final void addAction(String);
+    method public final void addCategory(String);
+    method public final void addDataAuthority(String, String);
+    method public final void addDataPath(String, int);
+    method public final void addDataScheme(String);
+    method public final void addDataSchemeSpecificPart(String, int);
+    method public final void addDataType(String) throws android.content.IntentFilter.MalformedMimeTypeException;
+    method public final java.util.Iterator<android.content.IntentFilter.AuthorityEntry> authoritiesIterator();
+    method public final java.util.Iterator<java.lang.String> categoriesIterator();
+    method public final int countActions();
+    method public final int countCategories();
+    method public final int countDataAuthorities();
+    method public final int countDataPaths();
+    method public final int countDataSchemeSpecificParts();
+    method public final int countDataSchemes();
+    method public final int countDataTypes();
+    method public static android.content.IntentFilter create(String, String);
+    method public final int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public final String getAction(int);
+    method public final String getCategory(int);
+    method public final android.content.IntentFilter.AuthorityEntry getDataAuthority(int);
+    method public final android.os.PatternMatcher getDataPath(int);
+    method public final String getDataScheme(int);
+    method public final android.os.PatternMatcher getDataSchemeSpecificPart(int);
+    method public final String getDataType(int);
+    method public final int getPriority();
+    method public final boolean hasAction(String);
+    method public final boolean hasCategory(String);
+    method public final boolean hasDataAuthority(android.net.Uri);
+    method public final boolean hasDataPath(String);
+    method public final boolean hasDataScheme(String);
+    method public final boolean hasDataSchemeSpecificPart(String);
+    method public final boolean hasDataType(String);
+    method public final int match(android.content.ContentResolver, android.content.Intent, boolean, String);
+    method public final int match(String, String, String, android.net.Uri, java.util.Set<java.lang.String>, String);
+    method public final boolean matchAction(String);
+    method public final String matchCategories(java.util.Set<java.lang.String>);
+    method public final int matchData(String, String, android.net.Uri);
+    method public final int matchDataAuthority(android.net.Uri);
+    method public final java.util.Iterator<android.os.PatternMatcher> pathsIterator();
+    method public void readFromXml(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public final java.util.Iterator<android.os.PatternMatcher> schemeSpecificPartsIterator();
+    method public final java.util.Iterator<java.lang.String> schemesIterator();
+    method public final void setPriority(int);
+    method public final java.util.Iterator<java.lang.String> typesIterator();
+    method public final void writeToParcel(android.os.Parcel, int);
+    method public void writeToXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException;
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.IntentFilter> CREATOR;
+    field public static final int MATCH_ADJUSTMENT_MASK = 65535; // 0xffff
+    field public static final int MATCH_ADJUSTMENT_NORMAL = 32768; // 0x8000
+    field public static final int MATCH_CATEGORY_EMPTY = 1048576; // 0x100000
+    field public static final int MATCH_CATEGORY_HOST = 3145728; // 0x300000
+    field public static final int MATCH_CATEGORY_MASK = 268369920; // 0xfff0000
+    field public static final int MATCH_CATEGORY_PATH = 5242880; // 0x500000
+    field public static final int MATCH_CATEGORY_PORT = 4194304; // 0x400000
+    field public static final int MATCH_CATEGORY_SCHEME = 2097152; // 0x200000
+    field public static final int MATCH_CATEGORY_SCHEME_SPECIFIC_PART = 5767168; // 0x580000
+    field public static final int MATCH_CATEGORY_TYPE = 6291456; // 0x600000
+    field public static final int NO_MATCH_ACTION = -3; // 0xfffffffd
+    field public static final int NO_MATCH_CATEGORY = -4; // 0xfffffffc
+    field public static final int NO_MATCH_DATA = -2; // 0xfffffffe
+    field public static final int NO_MATCH_TYPE = -1; // 0xffffffff
+    field public static final int SYSTEM_HIGH_PRIORITY = 1000; // 0x3e8
+    field public static final int SYSTEM_LOW_PRIORITY = -1000; // 0xfffffc18
+  }
+
+  public static final class IntentFilter.AuthorityEntry {
+    ctor public IntentFilter.AuthorityEntry(String, String);
+    method public String getHost();
+    method public int getPort();
+    method public int match(android.net.Uri);
+  }
+
+  public static class IntentFilter.MalformedMimeTypeException extends android.util.AndroidException {
+    ctor public IntentFilter.MalformedMimeTypeException();
+    ctor public IntentFilter.MalformedMimeTypeException(String);
+  }
+
+  public class IntentSender implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getCreatorPackage();
+    method public int getCreatorUid();
+    method public android.os.UserHandle getCreatorUserHandle();
+    method @Deprecated public String getTargetPackage();
+    method public static android.content.IntentSender readIntentSenderOrNullFromParcel(android.os.Parcel);
+    method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler) throws android.content.IntentSender.SendIntentException;
+    method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, String) throws android.content.IntentSender.SendIntentException;
+    method public static void writeIntentSenderOrNullToParcel(android.content.IntentSender, android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.IntentSender> CREATOR;
+  }
+
+  public static interface IntentSender.OnFinished {
+    method public void onSendFinished(android.content.IntentSender, android.content.Intent, int, String, android.os.Bundle);
+  }
+
+  public static class IntentSender.SendIntentException extends android.util.AndroidException {
+    ctor public IntentSender.SendIntentException();
+    ctor public IntentSender.SendIntentException(String);
+    ctor public IntentSender.SendIntentException(Exception);
+  }
+
+  @Deprecated public class Loader<D> {
+    ctor @Deprecated public Loader(android.content.Context);
+    method @Deprecated public void abandon();
+    method @Deprecated public boolean cancelLoad();
+    method @Deprecated public void commitContentChanged();
+    method @Deprecated public String dataToString(D);
+    method @Deprecated public void deliverCancellation();
+    method @Deprecated public void deliverResult(D);
+    method @Deprecated public void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public void forceLoad();
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated public int getId();
+    method @Deprecated public boolean isAbandoned();
+    method @Deprecated public boolean isReset();
+    method @Deprecated public boolean isStarted();
+    method @Deprecated protected void onAbandon();
+    method @Deprecated protected boolean onCancelLoad();
+    method @Deprecated public void onContentChanged();
+    method @Deprecated protected void onForceLoad();
+    method @Deprecated protected void onReset();
+    method @Deprecated protected void onStartLoading();
+    method @Deprecated protected void onStopLoading();
+    method @Deprecated public void registerListener(int, android.content.Loader.OnLoadCompleteListener<D>);
+    method @Deprecated public void registerOnLoadCanceledListener(android.content.Loader.OnLoadCanceledListener<D>);
+    method @Deprecated public void reset();
+    method @Deprecated public void rollbackContentChanged();
+    method @Deprecated public final void startLoading();
+    method @Deprecated public void stopLoading();
+    method @Deprecated public boolean takeContentChanged();
+    method @Deprecated public void unregisterListener(android.content.Loader.OnLoadCompleteListener<D>);
+    method @Deprecated public void unregisterOnLoadCanceledListener(android.content.Loader.OnLoadCanceledListener<D>);
+  }
+
+  @Deprecated public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+    ctor @Deprecated public Loader.ForceLoadContentObserver();
+  }
+
+  @Deprecated public static interface Loader.OnLoadCanceledListener<D> {
+    method @Deprecated public void onLoadCanceled(android.content.Loader<D>);
+  }
+
+  @Deprecated public static interface Loader.OnLoadCompleteListener<D> {
+    method @Deprecated public void onLoadComplete(android.content.Loader<D>, D);
+  }
+
+  public final class LocusId implements android.os.Parcelable {
+    ctor public LocusId(@NonNull String);
+    method public int describeContents();
+    method @NonNull public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.LocusId> CREATOR;
+  }
+
+  public class MutableContextWrapper extends android.content.ContextWrapper {
+    ctor public MutableContextWrapper(android.content.Context);
+    method public void setBaseContext(android.content.Context);
+  }
+
+  public class OperationApplicationException extends java.lang.Exception {
+    ctor public OperationApplicationException();
+    ctor public OperationApplicationException(String);
+    ctor public OperationApplicationException(String, Throwable);
+    ctor public OperationApplicationException(Throwable);
+    ctor public OperationApplicationException(int);
+    ctor public OperationApplicationException(String, int);
+    method public int getNumSuccessfulYieldPoints();
+  }
+
+  public class PeriodicSync implements android.os.Parcelable {
+    ctor public PeriodicSync(android.accounts.Account, String, android.os.Bundle, long);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.PeriodicSync> CREATOR;
+    field public final android.accounts.Account account;
+    field public final String authority;
+    field public final android.os.Bundle extras;
+    field public final long period;
+  }
+
+  public class QuickViewConstants {
+    field public static final String FEATURE_DELETE = "android:delete";
+    field public static final String FEATURE_DOWNLOAD = "android:download";
+    field public static final String FEATURE_EDIT = "android:edit";
+    field public static final String FEATURE_PRINT = "android:print";
+    field public static final String FEATURE_SEND = "android:send";
+    field public static final String FEATURE_VIEW = "android:view";
+  }
+
+  public class ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException {
+    ctor public ReceiverCallNotAllowedException(String);
+  }
+
+  public class RestrictionEntry implements android.os.Parcelable {
+    ctor public RestrictionEntry(int, String);
+    ctor public RestrictionEntry(String, String);
+    ctor public RestrictionEntry(String, boolean);
+    ctor public RestrictionEntry(String, String[]);
+    ctor public RestrictionEntry(String, int);
+    ctor public RestrictionEntry(android.os.Parcel);
+    method public static android.content.RestrictionEntry createBundleArrayEntry(String, android.content.RestrictionEntry[]);
+    method public static android.content.RestrictionEntry createBundleEntry(String, android.content.RestrictionEntry[]);
+    method public int describeContents();
+    method public String[] getAllSelectedStrings();
+    method public String[] getChoiceEntries();
+    method public String[] getChoiceValues();
+    method public String getDescription();
+    method public int getIntValue();
+    method public String getKey();
+    method public android.content.RestrictionEntry[] getRestrictions();
+    method public boolean getSelectedState();
+    method public String getSelectedString();
+    method public String getTitle();
+    method public int getType();
+    method public void setAllSelectedStrings(String[]);
+    method public void setChoiceEntries(String[]);
+    method public void setChoiceEntries(android.content.Context, @ArrayRes int);
+    method public void setChoiceValues(String[]);
+    method public void setChoiceValues(android.content.Context, @ArrayRes int);
+    method public void setDescription(String);
+    method public void setIntValue(int);
+    method public void setRestrictions(android.content.RestrictionEntry[]);
+    method public void setSelectedState(boolean);
+    method public void setSelectedString(String);
+    method public void setTitle(String);
+    method public void setType(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.RestrictionEntry> CREATOR;
+    field public static final int TYPE_BOOLEAN = 1; // 0x1
+    field public static final int TYPE_BUNDLE = 7; // 0x7
+    field public static final int TYPE_BUNDLE_ARRAY = 8; // 0x8
+    field public static final int TYPE_CHOICE = 2; // 0x2
+    field public static final int TYPE_INTEGER = 5; // 0x5
+    field public static final int TYPE_MULTI_SELECT = 4; // 0x4
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_STRING = 6; // 0x6
+  }
+
+  public class RestrictionsManager {
+    method public static android.os.Bundle convertRestrictionsToBundle(java.util.List<android.content.RestrictionEntry>);
+    method public android.content.Intent createLocalApprovalIntent();
+    method public android.os.Bundle getApplicationRestrictions();
+    method public java.util.List<android.content.RestrictionEntry> getManifestRestrictions(String);
+    method public boolean hasRestrictionsProvider();
+    method public void notifyPermissionResponse(String, android.os.PersistableBundle);
+    method public void requestPermission(String, String, android.os.PersistableBundle);
+    field public static final String ACTION_PERMISSION_RESPONSE_RECEIVED = "android.content.action.PERMISSION_RESPONSE_RECEIVED";
+    field public static final String ACTION_REQUEST_LOCAL_APPROVAL = "android.content.action.REQUEST_LOCAL_APPROVAL";
+    field public static final String ACTION_REQUEST_PERMISSION = "android.content.action.REQUEST_PERMISSION";
+    field public static final String EXTRA_PACKAGE_NAME = "android.content.extra.PACKAGE_NAME";
+    field public static final String EXTRA_REQUEST_BUNDLE = "android.content.extra.REQUEST_BUNDLE";
+    field public static final String EXTRA_REQUEST_ID = "android.content.extra.REQUEST_ID";
+    field public static final String EXTRA_REQUEST_TYPE = "android.content.extra.REQUEST_TYPE";
+    field public static final String EXTRA_RESPONSE_BUNDLE = "android.content.extra.RESPONSE_BUNDLE";
+    field public static final String META_DATA_APP_RESTRICTIONS = "android.content.APP_RESTRICTIONS";
+    field public static final String REQUEST_KEY_APPROVE_LABEL = "android.request.approve_label";
+    field public static final String REQUEST_KEY_DATA = "android.request.data";
+    field public static final String REQUEST_KEY_DENY_LABEL = "android.request.deny_label";
+    field public static final String REQUEST_KEY_ICON = "android.request.icon";
+    field public static final String REQUEST_KEY_ID = "android.request.id";
+    field public static final String REQUEST_KEY_MESSAGE = "android.request.mesg";
+    field public static final String REQUEST_KEY_NEW_REQUEST = "android.request.new_request";
+    field public static final String REQUEST_KEY_TITLE = "android.request.title";
+    field public static final String REQUEST_TYPE_APPROVAL = "android.request.type.approval";
+    field public static final String RESPONSE_KEY_ERROR_CODE = "android.response.errorcode";
+    field public static final String RESPONSE_KEY_MESSAGE = "android.response.msg";
+    field public static final String RESPONSE_KEY_RESPONSE_TIMESTAMP = "android.response.timestamp";
+    field public static final String RESPONSE_KEY_RESULT = "android.response.result";
+    field public static final int RESULT_APPROVED = 1; // 0x1
+    field public static final int RESULT_DENIED = 2; // 0x2
+    field public static final int RESULT_ERROR = 5; // 0x5
+    field public static final int RESULT_ERROR_BAD_REQUEST = 1; // 0x1
+    field public static final int RESULT_ERROR_INTERNAL = 3; // 0x3
+    field public static final int RESULT_ERROR_NETWORK = 2; // 0x2
+    field public static final int RESULT_NO_RESPONSE = 3; // 0x3
+    field public static final int RESULT_UNKNOWN_REQUEST = 4; // 0x4
+  }
+
+  public class SearchRecentSuggestionsProvider extends android.content.ContentProvider {
+    ctor public SearchRecentSuggestionsProvider();
+    method public int delete(android.net.Uri, String, String[]);
+    method public String getType(android.net.Uri);
+    method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean onCreate();
+    method public android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method protected void setupSuggestions(String, int);
+    method public int update(android.net.Uri, android.content.ContentValues, String, String[]);
+    field public static final int DATABASE_MODE_2LINES = 2; // 0x2
+    field public static final int DATABASE_MODE_QUERIES = 1; // 0x1
+  }
+
+  public interface ServiceConnection {
+    method public default void onBindingDied(android.content.ComponentName);
+    method public default void onNullBinding(android.content.ComponentName);
+    method public void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+    method public void onServiceDisconnected(android.content.ComponentName);
+  }
+
+  public interface SharedPreferences {
+    method public boolean contains(String);
+    method public android.content.SharedPreferences.Editor edit();
+    method public java.util.Map<java.lang.String,?> getAll();
+    method public boolean getBoolean(String, boolean);
+    method public float getFloat(String, float);
+    method public int getInt(String, int);
+    method public long getLong(String, long);
+    method @Nullable public String getString(String, @Nullable String);
+    method @Nullable public java.util.Set<java.lang.String> getStringSet(String, @Nullable java.util.Set<java.lang.String>);
+    method public void registerOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener);
+    method public void unregisterOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener);
+  }
+
+  public static interface SharedPreferences.Editor {
+    method public void apply();
+    method public android.content.SharedPreferences.Editor clear();
+    method public boolean commit();
+    method public android.content.SharedPreferences.Editor putBoolean(String, boolean);
+    method public android.content.SharedPreferences.Editor putFloat(String, float);
+    method public android.content.SharedPreferences.Editor putInt(String, int);
+    method public android.content.SharedPreferences.Editor putLong(String, long);
+    method public android.content.SharedPreferences.Editor putString(String, @Nullable String);
+    method public android.content.SharedPreferences.Editor putStringSet(String, @Nullable java.util.Set<java.lang.String>);
+    method public android.content.SharedPreferences.Editor remove(String);
+  }
+
+  public static interface SharedPreferences.OnSharedPreferenceChangeListener {
+    method public void onSharedPreferenceChanged(android.content.SharedPreferences, String);
+  }
+
+  public class SyncAdapterType implements android.os.Parcelable {
+    ctor public SyncAdapterType(String, String, boolean, boolean);
+    ctor public SyncAdapterType(android.os.Parcel);
+    method public boolean allowParallelSyncs();
+    method public int describeContents();
+    method public String getSettingsActivity();
+    method public boolean isAlwaysSyncable();
+    method public boolean isUserVisible();
+    method public static android.content.SyncAdapterType newKey(String, String);
+    method public boolean supportsUploading();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncAdapterType> CREATOR;
+    field public final String accountType;
+    field public final String authority;
+    field public final boolean isKey;
+  }
+
+  public class SyncContext {
+    method public android.os.IBinder getSyncContextBinder();
+    method public void onFinished(android.content.SyncResult);
+  }
+
+  public class SyncInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public final android.accounts.Account account;
+    field public final String authority;
+    field public final long startTime;
+  }
+
+  public class SyncRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncRequest> CREATOR;
+  }
+
+  public static class SyncRequest.Builder {
+    ctor public SyncRequest.Builder();
+    method public android.content.SyncRequest build();
+    method public android.content.SyncRequest.Builder setDisallowMetered(boolean);
+    method public android.content.SyncRequest.Builder setExpedited(boolean);
+    method public android.content.SyncRequest.Builder setExtras(android.os.Bundle);
+    method public android.content.SyncRequest.Builder setIgnoreBackoff(boolean);
+    method public android.content.SyncRequest.Builder setIgnoreSettings(boolean);
+    method public android.content.SyncRequest.Builder setManual(boolean);
+    method public android.content.SyncRequest.Builder setNoRetry(boolean);
+    method public android.content.SyncRequest.Builder setRequiresCharging(boolean);
+    method @NonNull public android.content.SyncRequest.Builder setScheduleAsExpeditedJob(boolean);
+    method public android.content.SyncRequest.Builder setSyncAdapter(android.accounts.Account, String);
+    method public android.content.SyncRequest.Builder syncOnce();
+    method public android.content.SyncRequest.Builder syncPeriodic(long, long);
+  }
+
+  public final class SyncResult implements android.os.Parcelable {
+    ctor public SyncResult();
+    method public void clear();
+    method public int describeContents();
+    method public boolean hasError();
+    method public boolean hasHardError();
+    method public boolean hasSoftError();
+    method public boolean madeSomeProgress();
+    method public String toDebugString();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.content.SyncResult ALREADY_IN_PROGRESS;
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncResult> CREATOR;
+    field public boolean databaseError;
+    field public long delayUntil;
+    field public boolean fullSyncRequested;
+    field public boolean moreRecordsToGet;
+    field public boolean partialSyncUnavailable;
+    field public final android.content.SyncStats stats;
+    field public final boolean syncAlreadyInProgress;
+    field public boolean tooManyDeletions;
+    field public boolean tooManyRetries;
+  }
+
+  public class SyncStats implements android.os.Parcelable {
+    ctor public SyncStats();
+    ctor public SyncStats(android.os.Parcel);
+    method public void clear();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncStats> CREATOR;
+    field public long numAuthExceptions;
+    field public long numConflictDetectedExceptions;
+    field public long numDeletes;
+    field public long numEntries;
+    field public long numInserts;
+    field public long numIoExceptions;
+    field public long numParseExceptions;
+    field public long numSkippedEntries;
+    field public long numUpdates;
+  }
+
+  public interface SyncStatusObserver {
+    method public void onStatusChanged(int);
+  }
+
+  public class UriMatcher {
+    ctor public UriMatcher(int);
+    method public void addURI(String, String, int);
+    method public int match(android.net.Uri);
+    field public static final int NO_MATCH = -1; // 0xffffffff
+  }
+
+  public final class UriPermission implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getPersistedTime();
+    method public android.net.Uri getUri();
+    method public boolean isReadPermission();
+    method public boolean isWritePermission();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.UriPermission> CREATOR;
+    field public static final long INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L
+  }
+
+}
+
+package android.content.pm {
+
+  public class ActivityInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    ctor public ActivityInfo();
+    ctor public ActivityInfo(android.content.pm.ActivityInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public final int getThemeResource();
+    field public static final int COLOR_MODE_DEFAULT = 0; // 0x0
+    field public static final int COLOR_MODE_HDR = 2; // 0x2
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT = 1; // 0x1
+    field public static final int CONFIG_COLOR_MODE = 16384; // 0x4000
+    field public static final int CONFIG_DENSITY = 4096; // 0x1000
+    field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
+    field public static final int CONFIG_FONT_WEIGHT_ADJUSTMENT = 268435456; // 0x10000000
+    field public static final int CONFIG_KEYBOARD = 16; // 0x10
+    field public static final int CONFIG_KEYBOARD_HIDDEN = 32; // 0x20
+    field public static final int CONFIG_LAYOUT_DIRECTION = 8192; // 0x2000
+    field public static final int CONFIG_LOCALE = 4; // 0x4
+    field public static final int CONFIG_MCC = 1; // 0x1
+    field public static final int CONFIG_MNC = 2; // 0x2
+    field public static final int CONFIG_NAVIGATION = 64; // 0x40
+    field public static final int CONFIG_ORIENTATION = 128; // 0x80
+    field public static final int CONFIG_SCREEN_LAYOUT = 256; // 0x100
+    field public static final int CONFIG_SCREEN_SIZE = 1024; // 0x400
+    field public static final int CONFIG_SMALLEST_SCREEN_SIZE = 2048; // 0x800
+    field public static final int CONFIG_TOUCHSCREEN = 8; // 0x8
+    field public static final int CONFIG_UI_MODE = 512; // 0x200
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ActivityInfo> CREATOR;
+    field public static final int DOCUMENT_LAUNCH_ALWAYS = 2; // 0x2
+    field public static final int DOCUMENT_LAUNCH_INTO_EXISTING = 1; // 0x1
+    field public static final int DOCUMENT_LAUNCH_NEVER = 3; // 0x3
+    field public static final int DOCUMENT_LAUNCH_NONE = 0; // 0x0
+    field public static final int FLAG_ALLOW_TASK_REPARENTING = 64; // 0x40
+    field public static final int FLAG_ALWAYS_RETAIN_TASK_STATE = 8; // 0x8
+    field public static final int FLAG_AUTO_REMOVE_FROM_RECENTS = 8192; // 0x2000
+    field public static final int FLAG_CLEAR_TASK_ON_LAUNCH = 4; // 0x4
+    field public static final int FLAG_ENABLE_VR_MODE = 32768; // 0x8000
+    field public static final int FLAG_EXCLUDE_FROM_RECENTS = 32; // 0x20
+    field public static final int FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS = 256; // 0x100
+    field public static final int FLAG_FINISH_ON_TASK_LAUNCH = 2; // 0x2
+    field public static final int FLAG_HARDWARE_ACCELERATED = 512; // 0x200
+    field public static final int FLAG_IMMERSIVE = 2048; // 0x800
+    field public static final int FLAG_MULTIPROCESS = 1; // 0x1
+    field public static final int FLAG_NO_HISTORY = 128; // 0x80
+    field public static final int FLAG_PREFER_MINIMAL_POST_PROCESSING = 33554432; // 0x2000000
+    field public static final int FLAG_RELINQUISH_TASK_IDENTITY = 4096; // 0x1000
+    field public static final int FLAG_RESUME_WHILE_PAUSING = 16384; // 0x4000
+    field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
+    field public static final int FLAG_STATE_NOT_NEEDED = 16; // 0x10
+    field public static final int LAUNCH_MULTIPLE = 0; // 0x0
+    field public static final int LAUNCH_SINGLE_INSTANCE = 3; // 0x3
+    field public static final int LAUNCH_SINGLE_INSTANCE_PER_TASK = 4; // 0x4
+    field public static final int LAUNCH_SINGLE_TASK = 2; // 0x2
+    field public static final int LAUNCH_SINGLE_TOP = 1; // 0x1
+    field public static final int PERSIST_ACROSS_REBOOTS = 2; // 0x2
+    field public static final int PERSIST_NEVER = 1; // 0x1
+    field public static final int PERSIST_ROOT_ONLY = 0; // 0x0
+    field public static final int SCREEN_ORIENTATION_BEHIND = 3; // 0x3
+    field public static final int SCREEN_ORIENTATION_FULL_SENSOR = 10; // 0xa
+    field public static final int SCREEN_ORIENTATION_FULL_USER = 13; // 0xd
+    field public static final int SCREEN_ORIENTATION_LANDSCAPE = 0; // 0x0
+    field public static final int SCREEN_ORIENTATION_LOCKED = 14; // 0xe
+    field public static final int SCREEN_ORIENTATION_NOSENSOR = 5; // 0x5
+    field public static final int SCREEN_ORIENTATION_PORTRAIT = 1; // 0x1
+    field public static final int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8; // 0x8
+    field public static final int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9; // 0x9
+    field public static final int SCREEN_ORIENTATION_SENSOR = 4; // 0x4
+    field public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6; // 0x6
+    field public static final int SCREEN_ORIENTATION_SENSOR_PORTRAIT = 7; // 0x7
+    field public static final int SCREEN_ORIENTATION_UNSPECIFIED = -1; // 0xffffffff
+    field public static final int SCREEN_ORIENTATION_USER = 2; // 0x2
+    field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb
+    field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc
+    field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
+    field public int colorMode;
+    field public int configChanges;
+    field public int documentLaunchMode;
+    field public int flags;
+    field public int launchMode;
+    field public int maxRecents;
+    field public String parentActivityName;
+    field public String permission;
+    field public int persistableMode;
+    field public int screenOrientation;
+    field public int softInputMode;
+    field public String targetActivity;
+    field public String taskAffinity;
+    field public int theme;
+    field public int uiOptions;
+    field public android.content.pm.ActivityInfo.WindowLayout windowLayout;
+  }
+
+  public static final class ActivityInfo.WindowLayout {
+    ctor public ActivityInfo.WindowLayout(int, float, int, float, int, int, int);
+    field public final int gravity;
+    field public final int height;
+    field public final float heightFraction;
+    field public final int minHeight;
+    field public final int minWidth;
+    field public final int width;
+    field public final float widthFraction;
+  }
+
+  public final class ApkChecksum implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public java.security.cert.Certificate getInstallerCertificate() throws java.security.cert.CertificateException;
+    method @Nullable public String getInstallerPackageName();
+    method @Nullable public String getSplitName();
+    method public int getType();
+    method @NonNull public byte[] getValue();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ApkChecksum> CREATOR;
+  }
+
+  public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor public ApplicationInfo();
+    ctor public ApplicationInfo(android.content.pm.ApplicationInfo);
+    method public boolean areAttributionsUserVisible();
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public static CharSequence getCategoryTitle(android.content.Context, int);
+    method public int getGwpAsanMode();
+    method public int getMemtagMode();
+    method public int getNativeHeapZeroInitialized();
+    method public int getRequestRawExternalStorageAccess();
+    method public boolean isProfileable();
+    method public boolean isProfileableByShell();
+    method public boolean isResourceOverlay();
+    method public boolean isVirtualPreload();
+    method public CharSequence loadDescription(android.content.pm.PackageManager);
+    field public static final int CATEGORY_ACCESSIBILITY = 8; // 0x8
+    field public static final int CATEGORY_AUDIO = 1; // 0x1
+    field public static final int CATEGORY_GAME = 0; // 0x0
+    field public static final int CATEGORY_IMAGE = 3; // 0x3
+    field public static final int CATEGORY_MAPS = 6; // 0x6
+    field public static final int CATEGORY_NEWS = 5; // 0x5
+    field public static final int CATEGORY_PRODUCTIVITY = 7; // 0x7
+    field public static final int CATEGORY_SOCIAL = 4; // 0x4
+    field public static final int CATEGORY_UNDEFINED = -1; // 0xffffffff
+    field public static final int CATEGORY_VIDEO = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ApplicationInfo> CREATOR;
+    field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000
+    field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40
+    field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20
+    field public static final int FLAG_DEBUGGABLE = 2; // 0x2
+    field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000
+    field public static final int FLAG_EXTRACT_NATIVE_LIBS = 268435456; // 0x10000000
+    field public static final int FLAG_FACTORY_TEST = 16; // 0x10
+    field public static final int FLAG_FULL_BACKUP_ONLY = 67108864; // 0x4000000
+    field public static final int FLAG_HARDWARE_ACCELERATED = 536870912; // 0x20000000
+    field public static final int FLAG_HAS_CODE = 4; // 0x4
+    field public static final int FLAG_INSTALLED = 8388608; // 0x800000
+    field public static final int FLAG_IS_DATA_ONLY = 16777216; // 0x1000000
+    field @Deprecated public static final int FLAG_IS_GAME = 33554432; // 0x2000000
+    field public static final int FLAG_KILL_AFTER_RESTORE = 65536; // 0x10000
+    field public static final int FLAG_LARGE_HEAP = 1048576; // 0x100000
+    field public static final int FLAG_MULTIARCH = -2147483648; // 0x80000000
+    field public static final int FLAG_PERSISTENT = 8; // 0x8
+    field public static final int FLAG_RESIZEABLE_FOR_SCREENS = 4096; // 0x1000
+    field public static final int FLAG_RESTORE_ANY_VERSION = 131072; // 0x20000
+    field public static final int FLAG_STOPPED = 2097152; // 0x200000
+    field public static final int FLAG_SUPPORTS_LARGE_SCREENS = 2048; // 0x800
+    field public static final int FLAG_SUPPORTS_NORMAL_SCREENS = 1024; // 0x400
+    field public static final int FLAG_SUPPORTS_RTL = 4194304; // 0x400000
+    field @Deprecated public static final int FLAG_SUPPORTS_SCREEN_DENSITIES = 8192; // 0x2000
+    field public static final int FLAG_SUPPORTS_SMALL_SCREENS = 512; // 0x200
+    field public static final int FLAG_SUPPORTS_XLARGE_SCREENS = 524288; // 0x80000
+    field public static final int FLAG_SUSPENDED = 1073741824; // 0x40000000
+    field public static final int FLAG_SYSTEM = 1; // 0x1
+    field public static final int FLAG_TEST_ONLY = 256; // 0x100
+    field public static final int FLAG_UPDATED_SYSTEM_APP = 128; // 0x80
+    field public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 134217728; // 0x8000000
+    field public static final int FLAG_VM_SAFE_MODE = 16384; // 0x4000
+    field public static final int GWP_ASAN_ALWAYS = 1; // 0x1
+    field public static final int GWP_ASAN_DEFAULT = -1; // 0xffffffff
+    field public static final int GWP_ASAN_NEVER = 0; // 0x0
+    field public static final int MEMTAG_ASYNC = 1; // 0x1
+    field public static final int MEMTAG_DEFAULT = -1; // 0xffffffff
+    field public static final int MEMTAG_OFF = 0; // 0x0
+    field public static final int MEMTAG_SYNC = 2; // 0x2
+    field public static final int RAW_EXTERNAL_STORAGE_ACCESS_DEFAULT = 0; // 0x0
+    field public static final int RAW_EXTERNAL_STORAGE_ACCESS_NOT_REQUESTED = 2; // 0x2
+    field public static final int RAW_EXTERNAL_STORAGE_ACCESS_REQUESTED = 1; // 0x1
+    field public static final int ZEROINIT_DEFAULT = -1; // 0xffffffff
+    field public static final int ZEROINIT_DISABLED = 0; // 0x0
+    field public static final int ZEROINIT_ENABLED = 1; // 0x1
+    field public String appComponentFactory;
+    field public String backupAgentName;
+    field public int category;
+    field public String className;
+    field public int compatibleWidthLimitDp;
+    field public int compileSdkVersion;
+    field @Nullable public String compileSdkVersionCodename;
+    field public String dataDir;
+    field public int descriptionRes;
+    field public String deviceProtectedDataDir;
+    field public boolean enabled;
+    field public int flags;
+    field public int largestWidthLimitDp;
+    field public String manageSpaceActivityName;
+    field public int minSdkVersion;
+    field public String nativeLibraryDir;
+    field public String permission;
+    field public String processName;
+    field public String publicSourceDir;
+    field public int requiresSmallestWidthDp;
+    field public String[] sharedLibraryFiles;
+    field public String sourceDir;
+    field public String[] splitNames;
+    field public String[] splitPublicSourceDirs;
+    field public String[] splitSourceDirs;
+    field public java.util.UUID storageUuid;
+    field public int targetSdkVersion;
+    field public String taskAffinity;
+    field public int theme;
+    field public int uiOptions;
+    field public int uid;
+  }
+
+  public static class ApplicationInfo.DisplayNameComparator implements java.util.Comparator<android.content.pm.ApplicationInfo> {
+    ctor public ApplicationInfo.DisplayNameComparator(android.content.pm.PackageManager);
+    method public final int compare(android.content.pm.ApplicationInfo, android.content.pm.ApplicationInfo);
+  }
+
+  public final class Attribution implements android.os.Parcelable {
+    method public int describeContents();
+    method @IdRes public int getLabel();
+    method @NonNull public String getTag();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Attribution> CREATOR;
+  }
+
+  public final class ChangedPackages implements android.os.Parcelable {
+    ctor public ChangedPackages(int, @NonNull java.util.List<java.lang.String>);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getPackageNames();
+    method public int getSequenceNumber();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ChangedPackages> CREATOR;
+  }
+
+  public final class Checksum implements android.os.Parcelable {
+    ctor public Checksum(int, @NonNull byte[]);
+    method public int describeContents();
+    method public int getType();
+    method @NonNull public byte[] getValue();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Checksum> CREATOR;
+    field public static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256 = 32; // 0x20
+    field public static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512 = 64; // 0x40
+    field @Deprecated public static final int TYPE_WHOLE_MD5 = 2; // 0x2
+    field public static final int TYPE_WHOLE_MERKLE_ROOT_4K_SHA256 = 1; // 0x1
+    field @Deprecated public static final int TYPE_WHOLE_SHA1 = 4; // 0x4
+    field @Deprecated public static final int TYPE_WHOLE_SHA256 = 8; // 0x8
+    field @Deprecated public static final int TYPE_WHOLE_SHA512 = 16; // 0x10
+  }
+
+  public class ComponentInfo extends android.content.pm.PackageItemInfo {
+    ctor public ComponentInfo();
+    ctor public ComponentInfo(android.content.pm.ComponentInfo);
+    ctor protected ComponentInfo(android.os.Parcel);
+    method public final int getBannerResource();
+    method public final int getIconResource();
+    method public final int getLogoResource();
+    method public boolean isEnabled();
+    field public android.content.pm.ApplicationInfo applicationInfo;
+    field public String[] attributionTags;
+    field public int descriptionRes;
+    field public boolean directBootAware;
+    field public boolean enabled;
+    field public boolean exported;
+    field public String processName;
+    field public String splitName;
+  }
+
+  public class ConfigurationInfo implements android.os.Parcelable {
+    ctor public ConfigurationInfo();
+    ctor public ConfigurationInfo(android.content.pm.ConfigurationInfo);
+    method public int describeContents();
+    method public String getGlEsVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ConfigurationInfo> CREATOR;
+    field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0
+    field public static final int INPUT_FEATURE_FIVE_WAY_NAV = 2; // 0x2
+    field public static final int INPUT_FEATURE_HARD_KEYBOARD = 1; // 0x1
+    field public int reqGlEsVersion;
+    field public int reqInputFeatures;
+    field public int reqKeyboardType;
+    field public int reqNavigation;
+    field public int reqTouchScreen;
+  }
+
+  public class CrossProfileApps {
+    method public boolean canInteractAcrossProfiles();
+    method public boolean canRequestInteractAcrossProfiles();
+    method @NonNull public android.content.Intent createRequestInteractAcrossProfilesIntent();
+    method @NonNull public android.graphics.drawable.Drawable getProfileSwitchingIconDrawable(@NonNull android.os.UserHandle);
+    method @NonNull public CharSequence getProfileSwitchingLabel(@NonNull android.os.UserHandle);
+    method @NonNull public java.util.List<android.os.UserHandle> getTargetUserProfiles();
+    method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_PROFILES, "android.permission.INTERACT_ACROSS_USERS"}) public void startActivity(@NonNull android.content.Intent, @NonNull android.os.UserHandle, @Nullable android.app.Activity);
+    method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_PROFILES, "android.permission.INTERACT_ACROSS_USERS"}) public void startActivity(@NonNull android.content.Intent, @NonNull android.os.UserHandle, @Nullable android.app.Activity, @Nullable android.os.Bundle);
+    method public void startMainActivity(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    field public static final String ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED = "android.content.pm.action.CAN_INTERACT_ACROSS_PROFILES_CHANGED";
+  }
+
+  public final class FeatureGroupInfo implements android.os.Parcelable {
+    ctor public FeatureGroupInfo();
+    ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.FeatureGroupInfo> CREATOR;
+    field public android.content.pm.FeatureInfo[] features;
+  }
+
+  public class FeatureInfo implements android.os.Parcelable {
+    ctor public FeatureInfo();
+    ctor public FeatureInfo(android.content.pm.FeatureInfo);
+    method public int describeContents();
+    method public String getGlEsVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.FeatureInfo> CREATOR;
+    field public static final int FLAG_REQUIRED = 1; // 0x1
+    field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0
+    field public int flags;
+    field public String name;
+    field public int reqGlEsVersion;
+    field public int version;
+  }
+
+  public final class InstallSourceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getInitiatingPackageName();
+    method @Nullable public android.content.pm.SigningInfo getInitiatingPackageSigningInfo();
+    method @Nullable public String getInstallingPackageName();
+    method @Nullable public String getOriginatingPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstallSourceInfo> CREATOR;
+  }
+
+  public class InstrumentationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor public InstrumentationInfo();
+    ctor public InstrumentationInfo(android.content.pm.InstrumentationInfo);
+    method public int describeContents();
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstrumentationInfo> CREATOR;
+    field public String dataDir;
+    field public boolean functionalTest;
+    field public boolean handleProfiling;
+    field public String publicSourceDir;
+    field public String sourceDir;
+    field public String[] splitNames;
+    field public String[] splitPublicSourceDirs;
+    field public String[] splitSourceDirs;
+    field public String targetPackage;
+    field public String targetProcesses;
+  }
+
+  public class LabeledIntent extends android.content.Intent {
+    ctor public LabeledIntent(android.content.Intent, String, int, int);
+    ctor public LabeledIntent(android.content.Intent, String, CharSequence, int);
+    ctor public LabeledIntent(String, int, int);
+    ctor public LabeledIntent(String, CharSequence, int);
+    method public int getIconResource();
+    method public int getLabelResource();
+    method public CharSequence getNonLocalizedLabel();
+    method public String getSourcePackage();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LabeledIntent> CREATOR;
+  }
+
+  public class LauncherActivityInfo {
+    method @NonNull public android.content.pm.ActivityInfo getActivityInfo();
+    method public android.content.pm.ApplicationInfo getApplicationInfo();
+    method public android.graphics.drawable.Drawable getBadgedIcon(int);
+    method public android.content.ComponentName getComponentName();
+    method public long getFirstInstallTime();
+    method public android.graphics.drawable.Drawable getIcon(int);
+    method public CharSequence getLabel();
+    method @FloatRange(from=0.0, to=1.0) public float getLoadingProgress();
+    method public String getName();
+    method public android.os.UserHandle getUser();
+  }
+
+  public class LauncherApps {
+    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(String, android.os.UserHandle);
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getAllPackageInstallerSessions();
+    method public android.content.pm.ApplicationInfo getApplicationInfo(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
+    method public java.util.List<android.os.UserHandle> getProfiles();
+    method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
+    method @Nullable public android.content.IntentSender getShortcutConfigActivityIntent(@NonNull android.content.pm.LauncherActivityInfo);
+    method public java.util.List<android.content.pm.LauncherActivityInfo> getShortcutConfigActivityList(@Nullable String, @NonNull android.os.UserHandle);
+    method public android.graphics.drawable.Drawable getShortcutIconDrawable(@NonNull android.content.pm.ShortcutInfo, int);
+    method @Nullable public android.app.PendingIntent getShortcutIntent(@NonNull String, @NonNull String, @Nullable android.os.Bundle, @NonNull android.os.UserHandle);
+    method @Nullable public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(@NonNull android.content.pm.LauncherApps.ShortcutQuery, @NonNull android.os.UserHandle);
+    method @Nullable public android.os.Bundle getSuspendedPackageLauncherExtras(String, android.os.UserHandle);
+    method public boolean hasShortcutHostPermission();
+    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
+    method public boolean isPackageEnabled(String, android.os.UserHandle);
+    method public void pinShortcuts(@NonNull String, @NonNull java.util.List<java.lang.String>, @NonNull android.os.UserHandle);
+    method public void registerCallback(android.content.pm.LauncherApps.Callback);
+    method public void registerCallback(android.content.pm.LauncherApps.Callback, android.os.Handler);
+    method public void registerPackageInstallerSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.content.pm.PackageInstaller.SessionCallback);
+    method public android.content.pm.LauncherActivityInfo resolveActivity(android.content.Intent, android.os.UserHandle);
+    method public boolean shouldHideFromSuggestions(@NonNull String, @NonNull android.os.UserHandle);
+    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
+    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
+    method public void startPackageInstallerSessionDetailsActivity(@NonNull android.content.pm.PackageInstaller.SessionInfo, @Nullable android.graphics.Rect, @Nullable android.os.Bundle);
+    method public void startShortcut(@NonNull String, @NonNull String, @Nullable android.graphics.Rect, @Nullable android.os.Bundle, @NonNull android.os.UserHandle);
+    method public void startShortcut(@NonNull android.content.pm.ShortcutInfo, @Nullable android.graphics.Rect, @Nullable android.os.Bundle);
+    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
+    method public void unregisterPackageInstallerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback);
+    field public static final String ACTION_CONFIRM_PIN_APPWIDGET = "android.content.pm.action.CONFIRM_PIN_APPWIDGET";
+    field public static final String ACTION_CONFIRM_PIN_SHORTCUT = "android.content.pm.action.CONFIRM_PIN_SHORTCUT";
+    field public static final String EXTRA_PIN_ITEM_REQUEST = "android.content.pm.extra.PIN_ITEM_REQUEST";
+  }
+
+  public abstract static class LauncherApps.Callback {
+    ctor public LauncherApps.Callback();
+    method public abstract void onPackageAdded(String, android.os.UserHandle);
+    method public abstract void onPackageChanged(String, android.os.UserHandle);
+    method public void onPackageLoadingProgressChanged(@NonNull String, @NonNull android.os.UserHandle, float);
+    method public abstract void onPackageRemoved(String, android.os.UserHandle);
+    method public abstract void onPackagesAvailable(String[], android.os.UserHandle, boolean);
+    method public void onPackagesSuspended(String[], android.os.UserHandle);
+    method @Deprecated public void onPackagesSuspended(String[], android.os.UserHandle, @Nullable android.os.Bundle);
+    method public abstract void onPackagesUnavailable(String[], android.os.UserHandle, boolean);
+    method public void onPackagesUnsuspended(String[], android.os.UserHandle);
+    method public void onShortcutsChanged(@NonNull String, @NonNull java.util.List<android.content.pm.ShortcutInfo>, @NonNull android.os.UserHandle);
+  }
+
+  public static final class LauncherApps.PinItemRequest implements android.os.Parcelable {
+    method public boolean accept(@Nullable android.os.Bundle);
+    method public boolean accept();
+    method public int describeContents();
+    method @Nullable public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getRequestType();
+    method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo();
+    method public boolean isValid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LauncherApps.PinItemRequest> CREATOR;
+    field public static final int REQUEST_TYPE_APPWIDGET = 2; // 0x2
+    field public static final int REQUEST_TYPE_SHORTCUT = 1; // 0x1
+  }
+
+  public static class LauncherApps.ShortcutQuery {
+    ctor public LauncherApps.ShortcutQuery();
+    method public android.content.pm.LauncherApps.ShortcutQuery setActivity(@Nullable android.content.ComponentName);
+    method public android.content.pm.LauncherApps.ShortcutQuery setChangedSince(long);
+    method @NonNull public android.content.pm.LauncherApps.ShortcutQuery setLocusIds(@Nullable java.util.List<android.content.LocusId>);
+    method public android.content.pm.LauncherApps.ShortcutQuery setPackage(@Nullable String);
+    method public android.content.pm.LauncherApps.ShortcutQuery setQueryFlags(int);
+    method public android.content.pm.LauncherApps.ShortcutQuery setShortcutIds(@Nullable java.util.List<java.lang.String>);
+    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
+    field public static final int FLAG_MATCH_CACHED = 16; // 0x10
+    field public static final int FLAG_MATCH_DYNAMIC = 1; // 0x1
+    field public static final int FLAG_MATCH_MANIFEST = 8; // 0x8
+    field public static final int FLAG_MATCH_PINNED = 2; // 0x2
+    field public static final int FLAG_MATCH_PINNED_BY_ANY_LAUNCHER = 1024; // 0x400
+  }
+
+  public final class ModuleInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getName();
+    method @Nullable public String getPackageName();
+    method public boolean isHidden();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ModuleInfo> CREATOR;
+  }
+
+  public class PackageInfo implements android.os.Parcelable {
+    ctor public PackageInfo();
+    method public int describeContents();
+    method public long getLongVersionCode();
+    method public void setLongVersionCode(long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageInfo> CREATOR;
+    field public static final int INSTALL_LOCATION_AUTO = 0; // 0x0
+    field public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1; // 0x1
+    field public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2; // 0x2
+    field public static final int REQUESTED_PERMISSION_GRANTED = 2; // 0x2
+    field public static final int REQUESTED_PERMISSION_NEVER_FOR_LOCATION = 65536; // 0x10000
+    field public android.content.pm.ActivityInfo[] activities;
+    field public android.content.pm.ApplicationInfo applicationInfo;
+    field @Nullable public android.content.pm.Attribution[] attributions;
+    field public int baseRevisionCode;
+    field public android.content.pm.ConfigurationInfo[] configPreferences;
+    field public android.content.pm.FeatureGroupInfo[] featureGroups;
+    field public long firstInstallTime;
+    field public int[] gids;
+    field public int installLocation;
+    field public android.content.pm.InstrumentationInfo[] instrumentation;
+    field public boolean isApex;
+    field public long lastUpdateTime;
+    field public String packageName;
+    field public android.content.pm.PermissionInfo[] permissions;
+    field public android.content.pm.ProviderInfo[] providers;
+    field public android.content.pm.ActivityInfo[] receivers;
+    field public android.content.pm.FeatureInfo[] reqFeatures;
+    field public String[] requestedPermissions;
+    field public int[] requestedPermissionsFlags;
+    field public android.content.pm.ServiceInfo[] services;
+    field public String sharedUserId;
+    field public int sharedUserLabel;
+    field @Deprecated public android.content.pm.Signature[] signatures;
+    field public android.content.pm.SigningInfo signingInfo;
+    field public String[] splitNames;
+    field public int[] splitRevisionCodes;
+    field @Deprecated public int versionCode;
+    field public String versionName;
+  }
+
+  public class PackageInstaller {
+    method public void abandonSession(int);
+    method public int createSession(@NonNull android.content.pm.PackageInstaller.SessionParams) throws java.io.IOException;
+    method @Deprecated @Nullable public android.content.pm.PackageInstaller.SessionInfo getActiveStagedSession();
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getActiveStagedSessions();
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getAllSessions();
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getMySessions();
+    method @Nullable public android.content.pm.PackageInstaller.SessionInfo getSessionInfo(int);
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getStagedSessions();
+    method @RequiresPermission(allOf={android.Manifest.permission.INSTALL_PACKAGES, "com.android.permission.INSTALL_EXISTING_PACKAGES"}) public void installExistingPackage(@NonNull String, int, @Nullable android.content.IntentSender);
+    method @NonNull public android.content.pm.PackageInstaller.Session openSession(int) throws java.io.IOException;
+    method public void registerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback);
+    method public void registerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull String, @NonNull android.content.IntentSender);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull android.content.pm.VersionedPackage, @NonNull android.content.IntentSender);
+    method @RequiresPermission(android.Manifest.permission.DELETE_PACKAGES) public void uninstallExistingPackage(@NonNull String, @Nullable android.content.IntentSender);
+    method public void unregisterSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback);
+    method public void updateSessionAppIcon(int, @Nullable android.graphics.Bitmap);
+    method public void updateSessionAppLabel(int, @Nullable CharSequence);
+    field public static final String ACTION_SESSION_COMMITTED = "android.content.pm.action.SESSION_COMMITTED";
+    field public static final String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS";
+    field public static final String ACTION_SESSION_UPDATED = "android.content.pm.action.SESSION_UPDATED";
+    field public static final String EXTRA_OTHER_PACKAGE_NAME = "android.content.pm.extra.OTHER_PACKAGE_NAME";
+    field public static final String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME";
+    field public static final String EXTRA_SESSION = "android.content.pm.extra.SESSION";
+    field public static final String EXTRA_SESSION_ID = "android.content.pm.extra.SESSION_ID";
+    field public static final String EXTRA_STATUS = "android.content.pm.extra.STATUS";
+    field public static final String EXTRA_STATUS_MESSAGE = "android.content.pm.extra.STATUS_MESSAGE";
+    field public static final String EXTRA_STORAGE_PATH = "android.content.pm.extra.STORAGE_PATH";
+    field public static final int STATUS_FAILURE = 1; // 0x1
+    field public static final int STATUS_FAILURE_ABORTED = 3; // 0x3
+    field public static final int STATUS_FAILURE_BLOCKED = 2; // 0x2
+    field public static final int STATUS_FAILURE_CONFLICT = 5; // 0x5
+    field public static final int STATUS_FAILURE_INCOMPATIBLE = 7; // 0x7
+    field public static final int STATUS_FAILURE_INVALID = 4; // 0x4
+    field public static final int STATUS_FAILURE_STORAGE = 6; // 0x6
+    field public static final int STATUS_PENDING_USER_ACTION = -1; // 0xffffffff
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public static class PackageInstaller.Session implements java.io.Closeable {
+    method public void abandon();
+    method public void addChildSessionId(int);
+    method public void close();
+    method public void commit(@NonNull android.content.IntentSender);
+    method public void fsync(@NonNull java.io.OutputStream) throws java.io.IOException;
+    method @NonNull public int[] getChildSessionIds();
+    method @NonNull public String[] getNames() throws java.io.IOException;
+    method public int getParentSessionId();
+    method public boolean isMultiPackage();
+    method public boolean isStaged();
+    method @NonNull public java.io.InputStream openRead(@NonNull String) throws java.io.IOException;
+    method @NonNull public java.io.OutputStream openWrite(@NonNull String, long, long) throws java.io.IOException;
+    method public void removeChildSessionId(int);
+    method public void removeSplit(@NonNull String) throws java.io.IOException;
+    method @Deprecated public void setChecksums(@NonNull String, @NonNull java.util.List<android.content.pm.Checksum>, @Nullable byte[]) throws java.io.IOException;
+    method public void setStagingProgress(float);
+    method public void transfer(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+  }
+
+  public abstract static class PackageInstaller.SessionCallback {
+    ctor public PackageInstaller.SessionCallback();
+    method public abstract void onActiveChanged(int, boolean);
+    method public abstract void onBadgingChanged(int);
+    method public abstract void onCreated(int);
+    method public abstract void onFinished(int, boolean);
+    method public abstract void onProgressChanged(int, float);
+  }
+
+  public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
+    method @Nullable public android.content.Intent createDetailsIntent();
+    method public int describeContents();
+    method @Nullable public android.graphics.Bitmap getAppIcon();
+    method @Nullable public CharSequence getAppLabel();
+    method @Nullable public String getAppPackageName();
+    method @NonNull public int[] getChildSessionIds();
+    method public long getCreatedMillis();
+    method public int getInstallLocation();
+    method public int getInstallReason();
+    method @Nullable public String getInstallerAttributionTag();
+    method @Nullable public String getInstallerPackageName();
+    method public int getMode();
+    method public int getOriginatingUid();
+    method @Nullable public android.net.Uri getOriginatingUri();
+    method public int getParentSessionId();
+    method public float getProgress();
+    method @Nullable public android.net.Uri getReferrerUri();
+    method public int getRequireUserAction();
+    method public int getSessionId();
+    method public long getSize();
+    method public int getStagedSessionErrorCode();
+    method @NonNull public String getStagedSessionErrorMessage();
+    method public long getUpdatedMillis();
+    method @NonNull public android.os.UserHandle getUser();
+    method public boolean hasParentSessionId();
+    method public boolean isActive();
+    method public boolean isCommitted();
+    method public boolean isMultiPackage();
+    method public boolean isSealed();
+    method public boolean isStaged();
+    method public boolean isStagedSessionActive();
+    method public boolean isStagedSessionApplied();
+    method public boolean isStagedSessionFailed();
+    method public boolean isStagedSessionReady();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.content.pm.PackageInstaller.SessionInfo> CREATOR;
+    field public static final int INVALID_ID = -1; // 0xffffffff
+    field public static final int STAGED_SESSION_ACTIVATION_FAILED = 2; // 0x2
+    field public static final int STAGED_SESSION_CONFLICT = 4; // 0x4
+    field public static final int STAGED_SESSION_NO_ERROR = 0; // 0x0
+    field public static final int STAGED_SESSION_UNKNOWN = 3; // 0x3
+    field public static final int STAGED_SESSION_VERIFICATION_FAILED = 1; // 0x1
+  }
+
+  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
+    ctor public PackageInstaller.SessionParams(int);
+    method public int describeContents();
+    method public void setAppIcon(@Nullable android.graphics.Bitmap);
+    method public void setAppLabel(@Nullable CharSequence);
+    method public void setAppPackageName(@Nullable String);
+    method @Deprecated public void setAutoRevokePermissionsMode(boolean);
+    method public void setInstallLocation(int);
+    method public void setInstallReason(int);
+    method public void setInstallScenario(int);
+    method public void setMultiPackage();
+    method public void setOriginatingUid(int);
+    method public void setOriginatingUri(@Nullable android.net.Uri);
+    method public void setReferrerUri(@Nullable android.net.Uri);
+    method public void setRequireUserAction(int);
+    method public void setSize(long);
+    method public void setWhitelistedRestrictedPermissions(@Nullable java.util.Set<java.lang.String>);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.content.pm.PackageInstaller.SessionParams> CREATOR;
+    field public static final int MODE_FULL_INSTALL = 1; // 0x1
+    field public static final int MODE_INHERIT_EXISTING = 2; // 0x2
+    field @NonNull public static final java.util.Set<java.lang.String> RESTRICTED_PERMISSIONS_ALL;
+    field public static final int USER_ACTION_NOT_REQUIRED = 2; // 0x2
+    field public static final int USER_ACTION_REQUIRED = 1; // 0x1
+    field public static final int USER_ACTION_UNSPECIFIED = 0; // 0x0
+  }
+
+  public class PackageItemInfo {
+    ctor public PackageItemInfo();
+    ctor public PackageItemInfo(android.content.pm.PackageItemInfo);
+    ctor protected PackageItemInfo(android.os.Parcel);
+    method protected void dumpBack(android.util.Printer, String);
+    method protected void dumpFront(android.util.Printer, String);
+    method public android.graphics.drawable.Drawable loadBanner(android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method @NonNull public CharSequence loadLabel(@NonNull android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadLogo(android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadUnbadgedIcon(android.content.pm.PackageManager);
+    method public android.content.res.XmlResourceParser loadXmlMetaData(android.content.pm.PackageManager, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public int banner;
+    field public int icon;
+    field public int labelRes;
+    field public int logo;
+    field public android.os.Bundle metaData;
+    field public String name;
+    field public CharSequence nonLocalizedLabel;
+    field public String packageName;
+  }
+
+  public static class PackageItemInfo.DisplayNameComparator implements java.util.Comparator<android.content.pm.PackageItemInfo> {
+    ctor public PackageItemInfo.DisplayNameComparator(android.content.pm.PackageManager);
+    method public final int compare(android.content.pm.PackageItemInfo, android.content.pm.PackageItemInfo);
+  }
+
+  public abstract class PackageManager {
+    ctor @Deprecated public PackageManager();
+    method @Deprecated public abstract void addPackageToPreferred(@NonNull String);
+    method public abstract boolean addPermission(@NonNull android.content.pm.PermissionInfo);
+    method public abstract boolean addPermissionAsync(@NonNull android.content.pm.PermissionInfo);
+    method @Deprecated public abstract void addPreferredActivity(@NonNull android.content.IntentFilter, int, @Nullable android.content.ComponentName[], @NonNull android.content.ComponentName);
+    method @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public boolean addWhitelistedRestrictedPermission(@NonNull String, @NonNull String, int);
+    method public abstract boolean canRequestPackageInstalls();
+    method public abstract String[] canonicalToCurrentPackageNames(@NonNull String[]);
+    method @CheckResult public abstract int checkPermission(@NonNull String, @NonNull String);
+    method @CheckResult public abstract int checkSignatures(@NonNull String, @NonNull String);
+    method @CheckResult public abstract int checkSignatures(int, int);
+    method public abstract void clearInstantAppCookie();
+    method @Deprecated public abstract void clearPackagePreferredActivities(@NonNull String);
+    method public abstract String[] currentToCanonicalPackageNames(@NonNull String[]);
+    method public abstract void extendVerificationTimeout(int, int, long);
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityBanner(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityBanner(@NonNull android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.graphics.drawable.Drawable getActivityIcon(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.graphics.drawable.Drawable getActivityIcon(@NonNull android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ActivityInfo getActivityInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityLogo(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityLogo(@NonNull android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract java.util.List<android.content.pm.PermissionGroupInfo> getAllPermissionGroups(int);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationBanner(@NonNull android.content.pm.ApplicationInfo);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationBanner(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract int getApplicationEnabledSetting(@NonNull String);
+    method @NonNull public abstract android.graphics.drawable.Drawable getApplicationIcon(@NonNull android.content.pm.ApplicationInfo);
+    method @NonNull public abstract android.graphics.drawable.Drawable getApplicationIcon(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ApplicationInfo getApplicationInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract CharSequence getApplicationLabel(@NonNull android.content.pm.ApplicationInfo);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationLogo(@NonNull android.content.pm.ApplicationInfo);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationLogo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public CharSequence getBackgroundPermissionOptionLabel();
+    method @Nullable public abstract android.content.pm.ChangedPackages getChangedPackages(@IntRange(from=0) int);
+    method public abstract int getComponentEnabledSetting(@NonNull android.content.ComponentName);
+    method @NonNull public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
+    method @Nullable public abstract android.graphics.drawable.Drawable getDrawable(@NonNull String, @DrawableRes int, @Nullable android.content.pm.ApplicationInfo);
+    method public void getGroupOfPlatformPermission(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.String>);
+    method @NonNull public android.content.pm.InstallSourceInfo getInstallSourceInfo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
+    method @NonNull public java.util.List<android.content.pm.ModuleInfo> getInstalledModules(int);
+    method @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
+    method @Deprecated @Nullable public abstract String getInstallerPackageName(@NonNull String);
+    method @NonNull public abstract byte[] getInstantAppCookie();
+    method public abstract int getInstantAppCookieMaxBytes();
+    method @NonNull public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.content.Intent getLaunchIntentForPackage(@NonNull String);
+    method @Nullable public abstract android.content.Intent getLeanbackLaunchIntentForPackage(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getMimeGroup(@NonNull String);
+    method @NonNull public android.content.pm.ModuleInfo getModuleInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract String getNameForUid(int);
+    method @Nullable public android.content.pm.PackageInfo getPackageArchiveInfo(@NonNull String, int);
+    method public abstract int[] getPackageGids(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract int[] getPackageGids(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.pm.PackageInfo getPackageInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.pm.PackageInfo getPackageInfo(@NonNull android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.PackageInstaller getPackageInstaller();
+    method public abstract int getPackageUid(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract String[] getPackagesForUid(int);
+    method @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(@NonNull String[], int);
+    method @NonNull public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.pm.PermissionInfo getPermissionInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void getPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>);
+    method @Deprecated public abstract int getPreferredActivities(@NonNull java.util.List<android.content.IntentFilter>, @NonNull java.util.List<android.content.ComponentName>, @Nullable String);
+    method @Deprecated @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPreferredPackages(int);
+    method @NonNull public android.content.pm.PackageManager.Property getProperty(@NonNull String, @NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.content.pm.PackageManager.Property getProperty(@NonNull String, @NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ProviderInfo getProviderInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ActivityInfo getReceiverInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.res.Resources getResourcesForActivity(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.res.Resources getResourcesForApplication(@NonNull android.content.pm.ApplicationInfo) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.content.res.Resources getResourcesForApplication(@NonNull android.content.pm.ApplicationInfo, @Nullable android.content.res.Configuration) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.res.Resources getResourcesForApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ServiceInfo getServiceInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
+    method @Nullable public android.os.Bundle getSuspendedPackageAppExtras();
+    method public boolean getSyntheticAppDetailsActivityEnabled(@NonNull String);
+    method @NonNull public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
+    method @Nullable public abstract String[] getSystemSharedLibraryNames();
+    method @IntRange(from=0) public int getTargetSdkVersion(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract CharSequence getText(@NonNull String, @StringRes int, @Nullable android.content.pm.ApplicationInfo);
+    method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle, @Nullable android.graphics.Rect, int);
+    method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedIcon(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle);
+    method @NonNull public abstract CharSequence getUserBadgedLabel(@NonNull CharSequence, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions(@NonNull String, int);
+    method @Nullable public abstract android.content.res.XmlResourceParser getXml(@NonNull String, @XmlRes int, @Nullable android.content.pm.ApplicationInfo);
+    method public boolean hasSigningCertificate(@NonNull String, @NonNull byte[], int);
+    method public boolean hasSigningCertificate(int, @NonNull byte[], int);
+    method public abstract boolean hasSystemFeature(@NonNull String);
+    method public abstract boolean hasSystemFeature(@NonNull String, int);
+    method @RequiresPermission(value="android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS", conditional=true) public boolean isAutoRevokeWhitelisted(@NonNull String);
+    method public boolean isAutoRevokeWhitelisted();
+    method public boolean isDefaultApplicationIcon(@NonNull android.graphics.drawable.Drawable);
+    method public boolean isDeviceUpgrading();
+    method public abstract boolean isInstantApp();
+    method public abstract boolean isInstantApp(@NonNull String);
+    method public boolean isPackageSuspended(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean isPackageSuspended();
+    method @CheckResult public abstract boolean isPermissionRevokedByPolicy(@NonNull String, @NonNull String);
+    method public abstract boolean isSafeMode();
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryActivityProperty(@NonNull String);
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryApplicationProperty(@NonNull String);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ProviderInfo> queryContentProviders(@Nullable String, int, int);
+    method @NonNull public abstract java.util.List<android.content.pm.InstrumentationInfo> queryInstrumentation(@NonNull String, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentActivities(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentActivityOptions(@Nullable android.content.ComponentName, @Nullable android.content.Intent[], @NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentServices(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(@Nullable String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryProviderProperty(@NonNull String);
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryReceiverProperty(@NonNull String);
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryServiceProperty(@NonNull String);
+    method @Deprecated public abstract void removePackageFromPreferred(@NonNull String);
+    method public abstract void removePermission(@NonNull String);
+    method @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public boolean removeWhitelistedRestrictedPermission(@NonNull String, @NonNull String, int);
+    method public void requestChecksums(@NonNull String, boolean, int, @NonNull java.util.List<java.security.cert.Certificate>, @NonNull android.content.pm.PackageManager.OnChecksumsReadyListener) throws java.security.cert.CertificateEncodingException, android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.content.pm.ResolveInfo resolveActivity(@NonNull android.content.Intent, int);
+    method @Nullable public abstract android.content.pm.ProviderInfo resolveContentProvider(@NonNull String, int);
+    method @Nullable public abstract android.content.pm.ResolveInfo resolveService(@NonNull android.content.Intent, int);
+    method public abstract void setApplicationCategoryHint(@NonNull String, int);
+    method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public abstract void setApplicationEnabledSetting(@NonNull String, int, int);
+    method @RequiresPermission(value="android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS", conditional=true) public boolean setAutoRevokeWhitelisted(@NonNull String, boolean);
+    method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public abstract void setComponentEnabledSetting(@NonNull android.content.ComponentName, int, int);
+    method public abstract void setInstallerPackageName(@NonNull String, @Nullable String);
+    method public void setMimeGroup(@NonNull String, @NonNull java.util.Set<java.lang.String>);
+    method public abstract void updateInstantAppCookie(@Nullable byte[]);
+    method public abstract void verifyPendingInstall(int, int);
+    field public static final int CERT_INPUT_RAW_X509 = 0; // 0x0
+    field public static final int CERT_INPUT_SHA256 = 1; // 0x1
+    field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0
+    field public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; // 0x2
+    field public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4; // 0x4
+    field public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; // 0x3
+    field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
+    field public static final int DONT_KILL_APP = 1; // 0x1
+    field public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
+    field public static final String EXTRA_VERIFICATION_RESULT = "android.content.pm.extra.VERIFICATION_RESULT";
+    field public static final String FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS = "android.software.activities_on_secondary_displays";
+    field public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets";
+    field public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
+    field public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
+    field public static final String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
+    field public static final String FEATURE_AUTOFILL = "android.software.autofill";
+    field public static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
+    field public static final String FEATURE_BACKUP = "android.software.backup";
+    field public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
+    field public static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le";
+    field public static final String FEATURE_CAMERA = "android.hardware.camera";
+    field public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any";
+    field public static final String FEATURE_CAMERA_AR = "android.hardware.camera.ar";
+    field public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus";
+    field public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING = "android.hardware.camera.capability.manual_post_processing";
+    field public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR = "android.hardware.camera.capability.manual_sensor";
+    field public static final String FEATURE_CAMERA_CAPABILITY_RAW = "android.hardware.camera.capability.raw";
+    field public static final String FEATURE_CAMERA_CONCURRENT = "android.hardware.camera.concurrent";
+    field public static final String FEATURE_CAMERA_EXTERNAL = "android.hardware.camera.external";
+    field public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
+    field public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
+    field public static final String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
+    field public static final String FEATURE_CANT_SAVE_STATE = "android.software.cant_save_state";
+    field public static final String FEATURE_COMPANION_DEVICE_SETUP = "android.software.companion_device_setup";
+    field public static final String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
+    field public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
+    field public static final String FEATURE_CONTROLS = "android.software.controls";
+    field public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
+    field public static final String FEATURE_EMBEDDED = "android.hardware.type.embedded";
+    field public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
+    field public static final String FEATURE_FACE = "android.hardware.biometrics.face";
+    field public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch";
+    field public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct";
+    field public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand";
+    field public static final String FEATURE_FINGERPRINT = "android.hardware.fingerprint";
+    field public static final String FEATURE_FREEFORM_WINDOW_MANAGEMENT = "android.software.freeform_window_management";
+    field public static final String FEATURE_GAMEPAD = "android.hardware.gamepad";
+    field public static final String FEATURE_HARDWARE_KEYSTORE = "android.hardware.hardware_keystore";
+    field public static final String FEATURE_HIFI_SENSORS = "android.hardware.sensor.hifi_sensors";
+    field public static final String FEATURE_HOME_SCREEN = "android.software.home_screen";
+    field public static final String FEATURE_IDENTITY_CREDENTIAL_HARDWARE = "android.hardware.identity_credential";
+    field public static final String FEATURE_IDENTITY_CREDENTIAL_HARDWARE_DIRECT_ACCESS = "android.hardware.identity_credential_direct_access";
+    field public static final String FEATURE_INPUT_METHODS = "android.software.input_methods";
+    field public static final String FEATURE_IPSEC_TUNNELS = "android.software.ipsec_tunnels";
+    field public static final String FEATURE_IRIS = "android.hardware.biometrics.iris";
+    field public static final String FEATURE_KEYSTORE_APP_ATTEST_KEY = "android.hardware.keystore.app_attest_key";
+    field public static final String FEATURE_KEYSTORE_LIMITED_USE_KEY = "android.hardware.keystore.limited_use_key";
+    field public static final String FEATURE_KEYSTORE_SINGLE_USE_KEY = "android.hardware.keystore.single_use_key";
+    field public static final String FEATURE_LEANBACK = "android.software.leanback";
+    field public static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only";
+    field public static final String FEATURE_LIVE_TV = "android.software.live_tv";
+    field public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
+    field public static final String FEATURE_LOCATION = "android.hardware.location";
+    field public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
+    field public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
+    field public static final String FEATURE_MANAGED_USERS = "android.software.managed_users";
+    field public static final String FEATURE_MICROPHONE = "android.hardware.microphone";
+    field public static final String FEATURE_MIDI = "android.software.midi";
+    field public static final String FEATURE_NFC = "android.hardware.nfc";
+    field public static final String FEATURE_NFC_BEAM = "android.sofware.nfc.beam";
+    field public static final String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
+    field public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
+    field public static final String FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE = "android.hardware.nfc.ese";
+    field public static final String FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC = "android.hardware.nfc.uicc";
+    field public static final String FEATURE_OPENGLES_DEQP_LEVEL = "android.software.opengles.deqp.level";
+    field public static final String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
+    field public static final String FEATURE_PC = "android.hardware.type.pc";
+    field public static final String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
+    field public static final String FEATURE_PRINTING = "android.software.print";
+    field public static final String FEATURE_RAM_LOW = "android.hardware.ram.low";
+    field public static final String FEATURE_RAM_NORMAL = "android.hardware.ram.normal";
+    field public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
+    field public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
+    field public static final String FEATURE_SECURELY_REMOVES_USERS = "android.software.securely_removes_users";
+    field public static final String FEATURE_SECURE_LOCK_SCREEN = "android.software.secure_lock_screen";
+    field public static final String FEATURE_SECURITY_MODEL_COMPATIBLE = "android.hardware.security.model.compatible";
+    field public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer";
+    field public static final String FEATURE_SENSOR_AMBIENT_TEMPERATURE = "android.hardware.sensor.ambient_temperature";
+    field public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer";
+    field public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass";
+    field public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope";
+    field public static final String FEATURE_SENSOR_HEART_RATE = "android.hardware.sensor.heartrate";
+    field public static final String FEATURE_SENSOR_HEART_RATE_ECG = "android.hardware.sensor.heartrate.ecg";
+    field public static final String FEATURE_SENSOR_HINGE_ANGLE = "android.hardware.sensor.hinge_angle";
+    field public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light";
+    field public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity";
+    field public static final String FEATURE_SENSOR_RELATIVE_HUMIDITY = "android.hardware.sensor.relative_humidity";
+    field public static final String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter";
+    field public static final String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector";
+    field public static final String FEATURE_SE_OMAPI_ESE = "android.hardware.se.omapi.ese";
+    field public static final String FEATURE_SE_OMAPI_SD = "android.hardware.se.omapi.sd";
+    field public static final String FEATURE_SE_OMAPI_UICC = "android.hardware.se.omapi.uicc";
+    field public static final String FEATURE_SIP = "android.software.sip";
+    field public static final String FEATURE_SIP_VOIP = "android.software.sip.voip";
+    field public static final String FEATURE_STRONGBOX_KEYSTORE = "android.hardware.strongbox_keystore";
+    field public static final String FEATURE_TELEPHONY = "android.hardware.telephony";
+    field public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
+    field public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc";
+    field public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
+    field public static final String FEATURE_TELEPHONY_IMS = "android.hardware.telephony.ims";
+    field public static final String FEATURE_TELEPHONY_MBMS = "android.hardware.telephony.mbms";
+    field @Deprecated public static final String FEATURE_TELEVISION = "android.hardware.type.television";
+    field public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen";
+    field public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch";
+    field public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct";
+    field public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand";
+    field public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory";
+    field public static final String FEATURE_USB_HOST = "android.hardware.usb.host";
+    field public static final String FEATURE_VERIFIED_BOOT = "android.software.verified_boot";
+    field public static final String FEATURE_VR_HEADTRACKING = "android.hardware.vr.headtracking";
+    field @Deprecated public static final String FEATURE_VR_MODE = "android.software.vr.mode";
+    field public static final String FEATURE_VR_MODE_HIGH_PERFORMANCE = "android.hardware.vr.high_performance";
+    field public static final String FEATURE_VULKAN_DEQP_LEVEL = "android.software.vulkan.deqp.level";
+    field public static final String FEATURE_VULKAN_HARDWARE_COMPUTE = "android.hardware.vulkan.compute";
+    field public static final String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level";
+    field public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version";
+    field public static final String FEATURE_WATCH = "android.hardware.type.watch";
+    field public static final String FEATURE_WEBVIEW = "android.software.webview";
+    field public static final String FEATURE_WIFI = "android.hardware.wifi";
+    field public static final String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
+    field public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
+    field public static final String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
+    field public static final String FEATURE_WIFI_RTT = "android.hardware.wifi.rtt";
+    field public static final int FLAG_PERMISSION_WHITELIST_INSTALLER = 2; // 0x2
+    field public static final int FLAG_PERMISSION_WHITELIST_SYSTEM = 1; // 0x1
+    field public static final int FLAG_PERMISSION_WHITELIST_UPGRADE = 4; // 0x4
+    field public static final int GET_ACTIVITIES = 1; // 0x1
+    field public static final int GET_ATTRIBUTIONS = -2147483648; // 0x80000000
+    field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
+    field @Deprecated public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
+    field @Deprecated public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
+    field public static final int GET_GIDS = 256; // 0x100
+    field public static final int GET_INSTRUMENTATION = 16; // 0x10
+    field @Deprecated public static final int GET_INTENT_FILTERS = 32; // 0x20
+    field public static final int GET_META_DATA = 128; // 0x80
+    field public static final int GET_PERMISSIONS = 4096; // 0x1000
+    field public static final int GET_PROVIDERS = 8; // 0x8
+    field public static final int GET_RECEIVERS = 2; // 0x2
+    field public static final int GET_RESOLVED_FILTER = 64; // 0x40
+    field public static final int GET_SERVICES = 4; // 0x4
+    field public static final int GET_SHARED_LIBRARY_FILES = 1024; // 0x400
+    field @Deprecated public static final int GET_SIGNATURES = 64; // 0x40
+    field public static final int GET_SIGNING_CERTIFICATES = 134217728; // 0x8000000
+    field @Deprecated public static final int GET_UNINSTALLED_PACKAGES = 8192; // 0x2000
+    field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800
+    field public static final int INSTALL_REASON_DEVICE_RESTORE = 2; // 0x2
+    field public static final int INSTALL_REASON_DEVICE_SETUP = 3; // 0x3
+    field public static final int INSTALL_REASON_POLICY = 1; // 0x1
+    field public static final int INSTALL_REASON_UNKNOWN = 0; // 0x0
+    field public static final int INSTALL_REASON_USER = 4; // 0x4
+    field public static final int INSTALL_SCENARIO_BULK = 2; // 0x2
+    field public static final int INSTALL_SCENARIO_BULK_SECONDARY = 3; // 0x3
+    field public static final int INSTALL_SCENARIO_DEFAULT = 0; // 0x0
+    field public static final int INSTALL_SCENARIO_FAST = 1; // 0x1
+    field public static final int MATCH_ALL = 131072; // 0x20000
+    field public static final int MATCH_APEX = 1073741824; // 0x40000000
+    field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000
+    field public static final int MATCH_DIRECT_BOOT_AUTO = 268435456; // 0x10000000
+    field public static final int MATCH_DIRECT_BOOT_AWARE = 524288; // 0x80000
+    field public static final int MATCH_DIRECT_BOOT_UNAWARE = 262144; // 0x40000
+    field public static final int MATCH_DISABLED_COMPONENTS = 512; // 0x200
+    field public static final int MATCH_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
+    field public static final int MATCH_SYSTEM_ONLY = 1048576; // 0x100000
+    field public static final int MATCH_UNINSTALLED_PACKAGES = 8192; // 0x2000
+    field public static final long MAXIMUM_VERIFICATION_TIMEOUT = 3600000L; // 0x36ee80L
+    field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+    field public static final int PERMISSION_GRANTED = 0; // 0x0
+    field public static final String PROPERTY_MEDIA_CAPABILITIES = "android.media.PROPERTY_MEDIA_CAPABILITIES";
+    field public static final int SIGNATURE_FIRST_NOT_SIGNED = -1; // 0xffffffff
+    field public static final int SIGNATURE_MATCH = 0; // 0x0
+    field public static final int SIGNATURE_NEITHER_SIGNED = 1; // 0x1
+    field public static final int SIGNATURE_NO_MATCH = -3; // 0xfffffffd
+    field public static final int SIGNATURE_SECOND_NOT_SIGNED = -2; // 0xfffffffe
+    field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc
+    field public static final int SYNCHRONOUS = 2; // 0x2
+    field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_ALL;
+    field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_NONE;
+    field public static final int VERIFICATION_ALLOW = 1; // 0x1
+    field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
+    field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
+  }
+
+  public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
+    ctor public PackageManager.NameNotFoundException();
+    ctor public PackageManager.NameNotFoundException(String);
+  }
+
+  @java.lang.FunctionalInterface public static interface PackageManager.OnChecksumsReadyListener {
+    method public void onChecksumsReady(@NonNull java.util.List<android.content.pm.ApkChecksum>);
+  }
+
+  public static final class PackageManager.Property implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getBoolean();
+    method @Nullable public String getClassName();
+    method public float getFloat();
+    method public int getInteger();
+    method @NonNull public String getName();
+    method @NonNull public String getPackageName();
+    method public int getResourceId();
+    method @Nullable public String getString();
+    method public boolean isBoolean();
+    method public boolean isFloat();
+    method public boolean isInteger();
+    method public boolean isResourceId();
+    method public boolean isString();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageManager.Property> CREATOR;
+  }
+
+  @Deprecated public class PackageStats implements android.os.Parcelable {
+    ctor @Deprecated public PackageStats(String);
+    ctor @Deprecated public PackageStats(android.os.Parcel);
+    ctor @Deprecated public PackageStats(android.content.pm.PackageStats);
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageStats> CREATOR;
+    field @Deprecated public long cacheSize;
+    field @Deprecated public long codeSize;
+    field @Deprecated public long dataSize;
+    field @Deprecated public long externalCacheSize;
+    field @Deprecated public long externalCodeSize;
+    field @Deprecated public long externalDataSize;
+    field @Deprecated public long externalMediaSize;
+    field @Deprecated public long externalObbSize;
+    field @Deprecated public String packageName;
+  }
+
+  public class PathPermission extends android.os.PatternMatcher {
+    ctor public PathPermission(String, int, String, String);
+    ctor public PathPermission(android.os.Parcel);
+    method public String getReadPermission();
+    method public String getWritePermission();
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PathPermission> CREATOR;
+  }
+
+  public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor @Deprecated public PermissionGroupInfo();
+    ctor @Deprecated public PermissionGroupInfo(@NonNull android.content.pm.PermissionGroupInfo);
+    method public int describeContents();
+    method @Nullable public CharSequence loadDescription(@NonNull android.content.pm.PackageManager);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PermissionGroupInfo> CREATOR;
+    field public static final int FLAG_PERSONAL_INFO = 1; // 0x1
+    field @StringRes public int descriptionRes;
+    field public int flags;
+    field @Nullable public CharSequence nonLocalizedDescription;
+    field public int priority;
+  }
+
+  public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor @Deprecated public PermissionInfo();
+    ctor @Deprecated public PermissionInfo(@NonNull android.content.pm.PermissionInfo);
+    method public int describeContents();
+    method public int getProtection();
+    method public int getProtectionFlags();
+    method @Nullable public CharSequence loadDescription(@NonNull android.content.pm.PackageManager);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PermissionInfo> CREATOR;
+    field public static final int FLAG_COSTS_MONEY = 1; // 0x1
+    field public static final int FLAG_HARD_RESTRICTED = 4; // 0x4
+    field public static final int FLAG_IMMUTABLY_RESTRICTED = 16; // 0x10
+    field public static final int FLAG_INSTALLED = 1073741824; // 0x40000000
+    field public static final int FLAG_SOFT_RESTRICTED = 8; // 0x8
+    field public static final int PROTECTION_DANGEROUS = 1; // 0x1
+    field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
+    field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
+    field public static final int PROTECTION_FLAG_INSTALLER = 256; // 0x100
+    field public static final int PROTECTION_FLAG_INSTANT = 4096; // 0x1000
+    field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
+    field public static final int PROTECTION_FLAG_PREINSTALLED = 1024; // 0x400
+    field public static final int PROTECTION_FLAG_PRIVILEGED = 16; // 0x10
+    field public static final int PROTECTION_FLAG_RUNTIME_ONLY = 8192; // 0x2000
+    field public static final int PROTECTION_FLAG_SETUP = 2048; // 0x800
+    field @Deprecated public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10
+    field public static final int PROTECTION_FLAG_VERIFIER = 512; // 0x200
+    field public static final int PROTECTION_INTERNAL = 4; // 0x4
+    field @Deprecated public static final int PROTECTION_MASK_BASE = 15; // 0xf
+    field @Deprecated public static final int PROTECTION_MASK_FLAGS = 65520; // 0xfff0
+    field public static final int PROTECTION_NORMAL = 0; // 0x0
+    field public static final int PROTECTION_SIGNATURE = 2; // 0x2
+    field @Deprecated public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3
+    field @StringRes public int descriptionRes;
+    field public int flags;
+    field @Nullable public String group;
+    field @Nullable public CharSequence nonLocalizedDescription;
+    field @Deprecated public int protectionLevel;
+  }
+
+  public final class ProviderInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    ctor public ProviderInfo();
+    ctor public ProviderInfo(android.content.pm.ProviderInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ProviderInfo> CREATOR;
+    field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
+    field public String authority;
+    field public int flags;
+    field public boolean forceUriPermissions;
+    field public boolean grantUriPermissions;
+    field public int initOrder;
+    field @Deprecated public boolean isSyncable;
+    field public boolean multiprocess;
+    field public android.content.pm.PathPermission[] pathPermissions;
+    field public String readPermission;
+    field public android.os.PatternMatcher[] uriPermissionPatterns;
+    field public String writePermission;
+  }
+
+  public class ResolveInfo implements android.os.Parcelable {
+    ctor public ResolveInfo();
+    ctor public ResolveInfo(android.content.pm.ResolveInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public final int getIconResource();
+    method public boolean isCrossProfileIntentForwarderActivity();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ResolveInfo> CREATOR;
+    field public android.content.pm.ActivityInfo activityInfo;
+    field public android.content.IntentFilter filter;
+    field public int icon;
+    field public boolean isDefault;
+    field public boolean isInstantAppAvailable;
+    field public int labelRes;
+    field public int match;
+    field public CharSequence nonLocalizedLabel;
+    field public int preferredOrder;
+    field public int priority;
+    field public android.content.pm.ProviderInfo providerInfo;
+    field public String resolvePackageName;
+    field public android.content.pm.ServiceInfo serviceInfo;
+    field public int specificIndex;
+  }
+
+  public static class ResolveInfo.DisplayNameComparator implements java.util.Comparator<android.content.pm.ResolveInfo> {
+    ctor public ResolveInfo.DisplayNameComparator(android.content.pm.PackageManager);
+    method public final int compare(android.content.pm.ResolveInfo, android.content.pm.ResolveInfo);
+  }
+
+  public class ServiceInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    ctor public ServiceInfo();
+    ctor public ServiceInfo(android.content.pm.ServiceInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public int getForegroundServiceType();
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ServiceInfo> CREATOR;
+    field public static final int FLAG_EXTERNAL_SERVICE = 4; // 0x4
+    field public static final int FLAG_ISOLATED_PROCESS = 2; // 0x2
+    field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
+    field public static final int FLAG_STOP_WITH_TASK = 1; // 0x1
+    field public static final int FLAG_USE_APP_ZYGOTE = 8; // 0x8
+    field public static final int FOREGROUND_SERVICE_TYPE_CAMERA = 64; // 0x40
+    field public static final int FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE = 16; // 0x10
+    field public static final int FOREGROUND_SERVICE_TYPE_DATA_SYNC = 1; // 0x1
+    field public static final int FOREGROUND_SERVICE_TYPE_LOCATION = 8; // 0x8
+    field public static final int FOREGROUND_SERVICE_TYPE_MANIFEST = -1; // 0xffffffff
+    field public static final int FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK = 2; // 0x2
+    field public static final int FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION = 32; // 0x20
+    field public static final int FOREGROUND_SERVICE_TYPE_MICROPHONE = 128; // 0x80
+    field public static final int FOREGROUND_SERVICE_TYPE_NONE = 0; // 0x0
+    field public static final int FOREGROUND_SERVICE_TYPE_PHONE_CALL = 4; // 0x4
+    field public int flags;
+    field public String permission;
+  }
+
+  public final class SharedLibraryInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.pm.VersionedPackage getDeclaringPackage();
+    method @NonNull public java.util.List<android.content.pm.VersionedPackage> getDependentPackages();
+    method @IntRange(from=0xffffffff) public long getLongVersion();
+    method public String getName();
+    method public int getType();
+    method @Deprecated @IntRange(from=0xffffffff) public int getVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SharedLibraryInfo> CREATOR;
+    field public static final int TYPE_BUILTIN = 0; // 0x0
+    field public static final int TYPE_DYNAMIC = 1; // 0x1
+    field public static final int TYPE_STATIC = 2; // 0x2
+    field public static final int VERSION_UNDEFINED = -1; // 0xffffffff
+  }
+
+  public final class ShortcutInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.content.ComponentName getActivity();
+    method @Nullable public java.util.Set<java.lang.String> getCategories();
+    method @Nullable public CharSequence getDisabledMessage();
+    method public int getDisabledReason();
+    method @Nullable public android.os.PersistableBundle getExtras();
+    method @NonNull public String getId();
+    method @Nullable public android.content.Intent getIntent();
+    method @Nullable public android.content.Intent[] getIntents();
+    method public long getLastChangedTimestamp();
+    method @Nullable public android.content.LocusId getLocusId();
+    method @Nullable public CharSequence getLongLabel();
+    method @NonNull public String getPackage();
+    method public int getRank();
+    method @Nullable public CharSequence getShortLabel();
+    method public android.os.UserHandle getUserHandle();
+    method public boolean hasKeyFieldsOnly();
+    method public boolean isCached();
+    method public boolean isDeclaredInManifest();
+    method public boolean isDynamic();
+    method public boolean isEnabled();
+    method public boolean isImmutable();
+    method public boolean isPinned();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ShortcutInfo> CREATOR;
+    field public static final int DISABLED_REASON_APP_CHANGED = 2; // 0x2
+    field public static final int DISABLED_REASON_BACKUP_NOT_SUPPORTED = 101; // 0x65
+    field public static final int DISABLED_REASON_BY_APP = 1; // 0x1
+    field public static final int DISABLED_REASON_NOT_DISABLED = 0; // 0x0
+    field public static final int DISABLED_REASON_OTHER_RESTORE_ISSUE = 103; // 0x67
+    field public static final int DISABLED_REASON_SIGNATURE_MISMATCH = 102; // 0x66
+    field public static final int DISABLED_REASON_UNKNOWN = 3; // 0x3
+    field public static final int DISABLED_REASON_VERSION_LOWER = 100; // 0x64
+    field public static final String SHORTCUT_CATEGORY_CONVERSATION = "android.shortcut.conversation";
+  }
+
+  public static class ShortcutInfo.Builder {
+    ctor public ShortcutInfo.Builder(android.content.Context, String);
+    method @NonNull public android.content.pm.ShortcutInfo build();
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setActivity(@NonNull android.content.ComponentName);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setCategories(java.util.Set<java.lang.String>);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setDisabledMessage(@NonNull CharSequence);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setExtras(@NonNull android.os.PersistableBundle);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setIntent(@NonNull android.content.Intent);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setIntents(@NonNull android.content.Intent[]);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setLocusId(@NonNull android.content.LocusId);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setLongLabel(@NonNull CharSequence);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setLongLived(boolean);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setPerson(@NonNull android.app.Person);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setPersons(@NonNull android.app.Person[]);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setRank(int);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setShortLabel(@NonNull CharSequence);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setStartingTheme(int);
+  }
+
+  public class ShortcutManager {
+    method @WorkerThread public boolean addDynamicShortcuts(@NonNull java.util.List<android.content.pm.ShortcutInfo>);
+    method @WorkerThread public android.content.Intent createShortcutResultIntent(@NonNull android.content.pm.ShortcutInfo);
+    method public void disableShortcuts(@NonNull java.util.List<java.lang.String>);
+    method public void disableShortcuts(@NonNull java.util.List<java.lang.String>, CharSequence);
+    method public void enableShortcuts(@NonNull java.util.List<java.lang.String>);
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
+    method public int getIconMaxHeight();
+    method public int getIconMaxWidth();
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getManifestShortcuts();
+    method public int getMaxShortcutCountPerActivity();
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(int);
+    method public boolean isRateLimitingActive();
+    method public boolean isRequestPinShortcutSupported();
+    method public void pushDynamicShortcut(@NonNull android.content.pm.ShortcutInfo);
+    method public void removeAllDynamicShortcuts();
+    method public void removeDynamicShortcuts(@NonNull java.util.List<java.lang.String>);
+    method public void removeLongLivedShortcuts(@NonNull java.util.List<java.lang.String>);
+    method public void reportShortcutUsed(String);
+    method @WorkerThread public boolean requestPinShortcut(@NonNull android.content.pm.ShortcutInfo, @Nullable android.content.IntentSender);
+    method @WorkerThread public boolean setDynamicShortcuts(@NonNull java.util.List<android.content.pm.ShortcutInfo>);
+    method @WorkerThread public boolean updateShortcuts(@NonNull java.util.List<android.content.pm.ShortcutInfo>);
+    field public static final int FLAG_MATCH_CACHED = 8; // 0x8
+    field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
+    field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
+    field public static final int FLAG_MATCH_PINNED = 4; // 0x4
+  }
+
+  public class Signature implements android.os.Parcelable {
+    ctor public Signature(byte[]);
+    ctor public Signature(String);
+    method public int describeContents();
+    method public byte[] toByteArray();
+    method public char[] toChars();
+    method public char[] toChars(char[], int[]);
+    method public String toCharsString();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Signature> CREATOR;
+  }
+
+  public final class SigningInfo implements android.os.Parcelable {
+    ctor public SigningInfo();
+    ctor public SigningInfo(android.content.pm.SigningInfo);
+    method public int describeContents();
+    method public android.content.pm.Signature[] getApkContentsSigners();
+    method public android.content.pm.Signature[] getSigningCertificateHistory();
+    method public boolean hasMultipleSigners();
+    method public boolean hasPastSigningCertificates();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SigningInfo> CREATOR;
+  }
+
+  public final class VersionedPackage implements android.os.Parcelable {
+    ctor public VersionedPackage(@NonNull String, int);
+    ctor public VersionedPackage(@NonNull String, long);
+    method public int describeContents();
+    method public long getLongVersionCode();
+    method @NonNull public String getPackageName();
+    method @Deprecated public int getVersionCode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.VersionedPackage> CREATOR;
+  }
+
+}
+
+package android.content.pm.verify.domain {
+
+  public final class DomainVerificationManager {
+    method @Nullable public android.content.pm.verify.domain.DomainVerificationUserState getDomainVerificationUserState(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+  }
+
+  public final class DomainVerificationUserState implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.Integer> getHostToStateMap();
+    method @NonNull public String getPackageName();
+    method @NonNull public android.os.UserHandle getUser();
+    method @NonNull public boolean isLinkHandlingAllowed();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainVerificationUserState> CREATOR;
+    field public static final int DOMAIN_STATE_NONE = 0; // 0x0
+    field public static final int DOMAIN_STATE_SELECTED = 1; // 0x1
+    field public static final int DOMAIN_STATE_VERIFIED = 2; // 0x2
+  }
+
+}
+
+package android.content.res {
+
+  public class AssetFileDescriptor implements java.io.Closeable android.os.Parcelable {
+    ctor public AssetFileDescriptor(android.os.ParcelFileDescriptor, long, long);
+    ctor public AssetFileDescriptor(android.os.ParcelFileDescriptor, long, long, android.os.Bundle);
+    method public void close() throws java.io.IOException;
+    method public java.io.FileInputStream createInputStream() throws java.io.IOException;
+    method public java.io.FileOutputStream createOutputStream() throws java.io.IOException;
+    method public int describeContents();
+    method public long getDeclaredLength();
+    method public android.os.Bundle getExtras();
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public long getLength();
+    method public android.os.ParcelFileDescriptor getParcelFileDescriptor();
+    method public long getStartOffset();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.AssetFileDescriptor> CREATOR;
+    field public static final long UNKNOWN_LENGTH = -1L; // 0xffffffffffffffffL
+  }
+
+  public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
+    ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+  }
+
+  public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
+    ctor public AssetFileDescriptor.AutoCloseOutputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+  }
+
+  public final class AssetManager implements java.lang.AutoCloseable {
+    method public void close();
+    method public String[] getLocales();
+    method @Nullable public String[] list(@NonNull String) throws java.io.IOException;
+    method @NonNull public java.io.InputStream open(@NonNull String) throws java.io.IOException;
+    method @NonNull public java.io.InputStream open(@NonNull String, int) throws java.io.IOException;
+    method @NonNull public android.content.res.AssetFileDescriptor openFd(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.AssetFileDescriptor openNonAssetFd(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.AssetFileDescriptor openNonAssetFd(int, @NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.XmlResourceParser openXmlResourceParser(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.XmlResourceParser openXmlResourceParser(int, @NonNull String) throws java.io.IOException;
+    field public static final int ACCESS_BUFFER = 3; // 0x3
+    field public static final int ACCESS_RANDOM = 1; // 0x1
+    field public static final int ACCESS_STREAMING = 2; // 0x2
+    field public static final int ACCESS_UNKNOWN = 0; // 0x0
+  }
+
+  public final class AssetManager.AssetInputStream extends java.io.InputStream {
+    method public int read() throws java.io.IOException;
+  }
+
+  public class ColorStateList implements android.os.Parcelable {
+    ctor public ColorStateList(int[][], @ColorInt int[]);
+    method @Deprecated @NonNull public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.content.res.ColorStateList createFromXml(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int describeContents();
+    method public int getChangingConfigurations();
+    method public int getColorForState(@Nullable int[], int);
+    method @ColorInt public int getDefaultColor();
+    method public boolean isOpaque();
+    method public boolean isStateful();
+    method @NonNull public static android.content.res.ColorStateList valueOf(@ColorInt int);
+    method @NonNull public android.content.res.ColorStateList withAlpha(int);
+    method @NonNull public android.content.res.ColorStateList withLStar(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.ColorStateList> CREATOR;
+  }
+
+  public final class Configuration implements java.lang.Comparable<android.content.res.Configuration> android.os.Parcelable {
+    ctor public Configuration();
+    ctor public Configuration(android.content.res.Configuration);
+    method public int compareTo(android.content.res.Configuration);
+    method public int describeContents();
+    method public int diff(android.content.res.Configuration);
+    method public boolean equals(android.content.res.Configuration);
+    method public int getLayoutDirection();
+    method @NonNull public android.os.LocaleList getLocales();
+    method public boolean isLayoutSizeAtLeast(int);
+    method public boolean isNightModeActive();
+    method public boolean isScreenHdr();
+    method public boolean isScreenRound();
+    method public boolean isScreenWideColorGamut();
+    method public static boolean needNewResources(int, int);
+    method public void readFromParcel(android.os.Parcel);
+    method public void setLayoutDirection(java.util.Locale);
+    method public void setLocale(@Nullable java.util.Locale);
+    method public void setLocales(@Nullable android.os.LocaleList);
+    method public void setTo(android.content.res.Configuration);
+    method public void setToDefaults();
+    method public int updateFrom(@NonNull android.content.res.Configuration);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int COLOR_MODE_HDR_MASK = 12; // 0xc
+    field public static final int COLOR_MODE_HDR_NO = 4; // 0x4
+    field public static final int COLOR_MODE_HDR_SHIFT = 2; // 0x2
+    field public static final int COLOR_MODE_HDR_UNDEFINED = 0; // 0x0
+    field public static final int COLOR_MODE_HDR_YES = 8; // 0x8
+    field public static final int COLOR_MODE_UNDEFINED = 0; // 0x0
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_NO = 1; // 0x1
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_YES = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
+    field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
+    field public static final int FONT_WEIGHT_ADJUSTMENT_UNDEFINED = 2147483647; // 0x7fffffff
+    field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
+    field public static final int HARDKEYBOARDHIDDEN_UNDEFINED = 0; // 0x0
+    field public static final int HARDKEYBOARDHIDDEN_YES = 2; // 0x2
+    field public static final int KEYBOARDHIDDEN_NO = 1; // 0x1
+    field public static final int KEYBOARDHIDDEN_UNDEFINED = 0; // 0x0
+    field public static final int KEYBOARDHIDDEN_YES = 2; // 0x2
+    field public static final int KEYBOARD_12KEY = 3; // 0x3
+    field public static final int KEYBOARD_NOKEYS = 1; // 0x1
+    field public static final int KEYBOARD_QWERTY = 2; // 0x2
+    field public static final int KEYBOARD_UNDEFINED = 0; // 0x0
+    field public static final int MNC_ZERO = 65535; // 0xffff
+    field public static final int NAVIGATIONHIDDEN_NO = 1; // 0x1
+    field public static final int NAVIGATIONHIDDEN_UNDEFINED = 0; // 0x0
+    field public static final int NAVIGATIONHIDDEN_YES = 2; // 0x2
+    field public static final int NAVIGATION_DPAD = 2; // 0x2
+    field public static final int NAVIGATION_NONAV = 1; // 0x1
+    field public static final int NAVIGATION_TRACKBALL = 3; // 0x3
+    field public static final int NAVIGATION_UNDEFINED = 0; // 0x0
+    field public static final int NAVIGATION_WHEEL = 4; // 0x4
+    field public static final int ORIENTATION_LANDSCAPE = 2; // 0x2
+    field public static final int ORIENTATION_PORTRAIT = 1; // 0x1
+    field @Deprecated public static final int ORIENTATION_SQUARE = 3; // 0x3
+    field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_LAYOUTDIR_LTR = 64; // 0x40
+    field public static final int SCREENLAYOUT_LAYOUTDIR_MASK = 192; // 0xc0
+    field public static final int SCREENLAYOUT_LAYOUTDIR_RTL = 128; // 0x80
+    field public static final int SCREENLAYOUT_LAYOUTDIR_SHIFT = 6; // 0x6
+    field public static final int SCREENLAYOUT_LAYOUTDIR_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_LONG_MASK = 48; // 0x30
+    field public static final int SCREENLAYOUT_LONG_NO = 16; // 0x10
+    field public static final int SCREENLAYOUT_LONG_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_LONG_YES = 32; // 0x20
+    field public static final int SCREENLAYOUT_ROUND_MASK = 768; // 0x300
+    field public static final int SCREENLAYOUT_ROUND_NO = 256; // 0x100
+    field public static final int SCREENLAYOUT_ROUND_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_ROUND_YES = 512; // 0x200
+    field public static final int SCREENLAYOUT_SIZE_LARGE = 3; // 0x3
+    field public static final int SCREENLAYOUT_SIZE_MASK = 15; // 0xf
+    field public static final int SCREENLAYOUT_SIZE_NORMAL = 2; // 0x2
+    field public static final int SCREENLAYOUT_SIZE_SMALL = 1; // 0x1
+    field public static final int SCREENLAYOUT_SIZE_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_SIZE_XLARGE = 4; // 0x4
+    field public static final int SCREENLAYOUT_UNDEFINED = 0; // 0x0
+    field public static final int SCREEN_HEIGHT_DP_UNDEFINED = 0; // 0x0
+    field public static final int SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0
+    field public static final int SMALLEST_SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0
+    field public static final int TOUCHSCREEN_FINGER = 3; // 0x3
+    field public static final int TOUCHSCREEN_NOTOUCH = 1; // 0x1
+    field @Deprecated public static final int TOUCHSCREEN_STYLUS = 2; // 0x2
+    field public static final int TOUCHSCREEN_UNDEFINED = 0; // 0x0
+    field public static final int UI_MODE_NIGHT_MASK = 48; // 0x30
+    field public static final int UI_MODE_NIGHT_NO = 16; // 0x10
+    field public static final int UI_MODE_NIGHT_UNDEFINED = 0; // 0x0
+    field public static final int UI_MODE_NIGHT_YES = 32; // 0x20
+    field public static final int UI_MODE_TYPE_APPLIANCE = 5; // 0x5
+    field public static final int UI_MODE_TYPE_CAR = 3; // 0x3
+    field public static final int UI_MODE_TYPE_DESK = 2; // 0x2
+    field public static final int UI_MODE_TYPE_MASK = 15; // 0xf
+    field public static final int UI_MODE_TYPE_NORMAL = 1; // 0x1
+    field public static final int UI_MODE_TYPE_TELEVISION = 4; // 0x4
+    field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
+    field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
+    field public int colorMode;
+    field public int densityDpi;
+    field public float fontScale;
+    field public int fontWeightAdjustment;
+    field public int hardKeyboardHidden;
+    field public int keyboard;
+    field public int keyboardHidden;
+    field @Deprecated public java.util.Locale locale;
+    field public int mcc;
+    field public int mnc;
+    field public int navigation;
+    field public int navigationHidden;
+    field public int orientation;
+    field public int screenHeightDp;
+    field public int screenLayout;
+    field public int screenWidthDp;
+    field public int smallestScreenWidthDp;
+    field public int touchscreen;
+    field public int uiMode;
+  }
+
+  public class ObbInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.ObbInfo> CREATOR;
+    field public static final int OBB_OVERLAY = 1; // 0x1
+    field public String filename;
+    field public int flags;
+    field public String packageName;
+    field public int version;
+  }
+
+  public class ObbScanner {
+    method public static android.content.res.ObbInfo getObbInfo(String) throws java.io.IOException;
+  }
+
+  public class Resources {
+    ctor @Deprecated public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration);
+    method public void addLoaders(@NonNull android.content.res.loader.ResourcesLoader...);
+    method public final void finishPreloading();
+    method public final void flushLayoutCache();
+    method @NonNull public android.content.res.XmlResourceParser getAnimation(@AnimRes @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
+    method public final android.content.res.AssetManager getAssets();
+    method @AnyRes public static int getAttributeSetSourceResId(@Nullable android.util.AttributeSet);
+    method public boolean getBoolean(@BoolRes int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated @ColorInt public int getColor(@ColorRes int) throws android.content.res.Resources.NotFoundException;
+    method @ColorInt public int getColor(@ColorRes int, @Nullable android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated @NonNull public android.content.res.ColorStateList getColorStateList(@ColorRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.ColorStateList getColorStateList(@ColorRes int, @Nullable android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.Configuration getConfiguration();
+    method public float getDimension(@DimenRes int) throws android.content.res.Resources.NotFoundException;
+    method public int getDimensionPixelOffset(@DimenRes int) throws android.content.res.Resources.NotFoundException;
+    method public int getDimensionPixelSize(@DimenRes int) throws android.content.res.Resources.NotFoundException;
+    method public android.util.DisplayMetrics getDisplayMetrics();
+    method @Deprecated public android.graphics.drawable.Drawable getDrawable(@DrawableRes int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawable(@DrawableRes int, @Nullable android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@DrawableRes int, int) throws android.content.res.Resources.NotFoundException;
+    method @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@DrawableRes int, int, @Nullable android.content.res.Resources.Theme);
+    method public float getFloat(@DimenRes int);
+    method @NonNull public android.graphics.Typeface getFont(@FontRes int) throws android.content.res.Resources.NotFoundException;
+    method public float getFraction(@FractionRes int, int, int);
+    method public int getIdentifier(String, String, String);
+    method @NonNull public int[] getIntArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method public int getInteger(@IntegerRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.XmlResourceParser getLayout(@LayoutRes int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated public android.graphics.Movie getMovie(@RawRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getQuantityString(@PluralsRes int, int, java.lang.Object...) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getQuantityString(@PluralsRes int, int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public CharSequence getQuantityText(@PluralsRes int, int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourceEntryName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourceName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourcePackageName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourceTypeName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getString(@StringRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getString(@StringRes int, java.lang.Object...) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String[] getStringArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.content.res.Resources getSystem();
+    method @NonNull public CharSequence getText(@StringRes int) throws android.content.res.Resources.NotFoundException;
+    method public CharSequence getText(@StringRes int, CharSequence);
+    method @NonNull public CharSequence[] getTextArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method public void getValue(@AnyRes int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method public void getValue(String, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method public void getValueForDensity(@AnyRes int, int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.XmlResourceParser getXml(@XmlRes int) throws android.content.res.Resources.NotFoundException;
+    method public final android.content.res.Resources.Theme newTheme();
+    method public android.content.res.TypedArray obtainAttributes(android.util.AttributeSet, @StyleableRes int[]);
+    method @NonNull public android.content.res.TypedArray obtainTypedArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public java.io.InputStream openRawResource(@RawRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public java.io.InputStream openRawResource(@RawRes int, android.util.TypedValue) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.AssetFileDescriptor openRawResourceFd(@RawRes int) throws android.content.res.Resources.NotFoundException;
+    method public void parseBundleExtra(String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException;
+    method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void removeLoaders(@NonNull android.content.res.loader.ResourcesLoader...);
+    method @Deprecated public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
+    field @AnyRes public static final int ID_NULL = 0; // 0x0
+  }
+
+  public static class Resources.NotFoundException extends java.lang.RuntimeException {
+    ctor public Resources.NotFoundException();
+    ctor public Resources.NotFoundException(String);
+    ctor public Resources.NotFoundException(String, Exception);
+  }
+
+  public final class Resources.Theme {
+    method public void applyStyle(int, boolean);
+    method public void dump(int, String, String);
+    method @NonNull public int[] getAttributeResolutionStack(@AttrRes int, @StyleRes int, @StyleRes int);
+    method public int getChangingConfigurations();
+    method public android.graphics.drawable.Drawable getDrawable(@DrawableRes int) throws android.content.res.Resources.NotFoundException;
+    method @StyleRes public int getExplicitStyle(@Nullable android.util.AttributeSet);
+    method public android.content.res.Resources getResources();
+    method @NonNull public android.content.res.TypedArray obtainStyledAttributes(@NonNull @StyleableRes int[]);
+    method @NonNull public android.content.res.TypedArray obtainStyledAttributes(@StyleRes int, @NonNull @StyleableRes int[]) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.TypedArray obtainStyledAttributes(@Nullable android.util.AttributeSet, @NonNull @StyleableRes int[], @AttrRes int, @StyleRes int);
+    method public void rebase();
+    method public boolean resolveAttribute(int, android.util.TypedValue, boolean);
+    method public void setTo(android.content.res.Resources.Theme);
+  }
+
+  public class TypedArray implements java.lang.AutoCloseable {
+    method public void close();
+    method public boolean getBoolean(@StyleableRes int, boolean);
+    method public int getChangingConfigurations();
+    method @ColorInt public int getColor(@StyleableRes int, @ColorInt int);
+    method @Nullable public android.content.res.ColorStateList getColorStateList(@StyleableRes int);
+    method public float getDimension(@StyleableRes int, float);
+    method public int getDimensionPixelOffset(@StyleableRes int, int);
+    method public int getDimensionPixelSize(@StyleableRes int, int);
+    method @Nullable public android.graphics.drawable.Drawable getDrawable(@StyleableRes int);
+    method public float getFloat(@StyleableRes int, float);
+    method @Nullable public android.graphics.Typeface getFont(@StyleableRes int);
+    method public float getFraction(@StyleableRes int, int, int, float);
+    method public int getIndex(int);
+    method public int getIndexCount();
+    method public int getInt(@StyleableRes int, int);
+    method public int getInteger(@StyleableRes int, int);
+    method public int getLayoutDimension(@StyleableRes int, String);
+    method public int getLayoutDimension(@StyleableRes int, int);
+    method public String getNonResourceString(@StyleableRes int);
+    method public String getPositionDescription();
+    method @AnyRes public int getResourceId(@StyleableRes int, int);
+    method public android.content.res.Resources getResources();
+    method @AnyRes public int getSourceResourceId(@StyleableRes int, @AnyRes int);
+    method @Nullable public String getString(@StyleableRes int);
+    method public CharSequence getText(@StyleableRes int);
+    method public CharSequence[] getTextArray(@StyleableRes int);
+    method public int getType(@StyleableRes int);
+    method public boolean getValue(@StyleableRes int, android.util.TypedValue);
+    method public boolean hasValue(@StyleableRes int);
+    method public boolean hasValueOrEmpty(@StyleableRes int);
+    method public int length();
+    method public android.util.TypedValue peekValue(@StyleableRes int);
+    method public void recycle();
+  }
+
+  public interface XmlResourceParser extends org.xmlpull.v1.XmlPullParser android.util.AttributeSet java.lang.AutoCloseable {
+    method public void close();
+  }
+
+}
+
+package android.content.res.loader {
+
+  public interface AssetsProvider {
+    method @Nullable public default android.content.res.AssetFileDescriptor loadAssetFd(@NonNull String, int);
+  }
+
+  public class ResourcesLoader {
+    ctor public ResourcesLoader();
+    method public void addProvider(@NonNull android.content.res.loader.ResourcesProvider);
+    method public void clearProviders();
+    method @NonNull public java.util.List<android.content.res.loader.ResourcesProvider> getProviders();
+    method public void removeProvider(@NonNull android.content.res.loader.ResourcesProvider);
+    method public void setProviders(@NonNull java.util.List<android.content.res.loader.ResourcesProvider>);
+  }
+
+  public class ResourcesProvider implements java.lang.AutoCloseable java.io.Closeable {
+    method public void close();
+    method @NonNull public static android.content.res.loader.ResourcesProvider empty(@NonNull android.content.res.loader.AssetsProvider);
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromApk(@NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromApk(@NonNull android.os.ParcelFileDescriptor, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromDirectory(@NonNull String, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromSplit(@NonNull android.content.Context, @NonNull String) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromTable(@NonNull android.os.ParcelFileDescriptor, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
+  }
+
+}
+
+package android.database {
+
+  public abstract class AbstractCursor implements android.database.CrossProcessCursor {
+    ctor public AbstractCursor();
+    method protected void checkPosition();
+    method public void close();
+    method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
+    method public void deactivate();
+    method public void fillWindow(int, android.database.CursorWindow);
+    method protected void finalize();
+    method public byte[] getBlob(int);
+    method public int getColumnCount();
+    method public int getColumnIndex(String);
+    method public int getColumnIndexOrThrow(String);
+    method public String getColumnName(int);
+    method public android.os.Bundle getExtras();
+    method public android.net.Uri getNotificationUri();
+    method public final int getPosition();
+    method public int getType(int);
+    method @Deprecated protected Object getUpdatedField(int);
+    method public boolean getWantsAllOnMoveCalls();
+    method public android.database.CursorWindow getWindow();
+    method public final boolean isAfterLast();
+    method public final boolean isBeforeFirst();
+    method public boolean isClosed();
+    method @Deprecated protected boolean isFieldUpdated(int);
+    method public final boolean isFirst();
+    method public final boolean isLast();
+    method public final boolean move(int);
+    method public final boolean moveToFirst();
+    method public final boolean moveToLast();
+    method public final boolean moveToNext();
+    method public final boolean moveToPosition(int);
+    method public final boolean moveToPrevious();
+    method protected void onChange(boolean);
+    method public boolean onMove(int, int);
+    method public void registerContentObserver(android.database.ContentObserver);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public boolean requery();
+    method public android.os.Bundle respond(android.os.Bundle);
+    method public void setExtras(android.os.Bundle);
+    method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method public void unregisterContentObserver(android.database.ContentObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+    field @Deprecated protected boolean mClosed;
+    field @Deprecated protected android.content.ContentResolver mContentResolver;
+    field @Deprecated protected int mPos;
+  }
+
+  protected static class AbstractCursor.SelfContentObserver extends android.database.ContentObserver {
+    ctor public AbstractCursor.SelfContentObserver(android.database.AbstractCursor);
+  }
+
+  public abstract class AbstractWindowedCursor extends android.database.AbstractCursor {
+    ctor public AbstractWindowedCursor();
+    method public double getDouble(int);
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public short getShort(int);
+    method public String getString(int);
+    method public boolean hasWindow();
+    method @Deprecated public boolean isBlob(int);
+    method @Deprecated public boolean isFloat(int);
+    method @Deprecated public boolean isLong(int);
+    method public boolean isNull(int);
+    method @Deprecated public boolean isString(int);
+    method public void setWindow(android.database.CursorWindow);
+    field protected android.database.CursorWindow mWindow;
+  }
+
+  public final class CharArrayBuffer {
+    ctor public CharArrayBuffer(int);
+    ctor public CharArrayBuffer(char[]);
+    field public char[] data;
+    field public int sizeCopied;
+  }
+
+  public class ContentObservable extends android.database.Observable<android.database.ContentObserver> {
+    ctor public ContentObservable();
+    method @Deprecated public void dispatchChange(boolean);
+    method public void dispatchChange(boolean, android.net.Uri);
+    method @Deprecated public void notifyChange(boolean);
+    method public void registerObserver(android.database.ContentObserver);
+  }
+
+  public abstract class ContentObserver {
+    ctor public ContentObserver(android.os.Handler);
+    method public boolean deliverSelfNotifications();
+    method @Deprecated public final void dispatchChange(boolean);
+    method public final void dispatchChange(boolean, @Nullable android.net.Uri);
+    method public final void dispatchChange(boolean, @Nullable android.net.Uri, int);
+    method public final void dispatchChange(boolean, @NonNull java.util.Collection<android.net.Uri>, int);
+    method public void onChange(boolean);
+    method public void onChange(boolean, @Nullable android.net.Uri);
+    method public void onChange(boolean, @Nullable android.net.Uri, int);
+    method public void onChange(boolean, @NonNull java.util.Collection<android.net.Uri>, int);
+  }
+
+  public interface CrossProcessCursor extends android.database.Cursor {
+    method public void fillWindow(int, android.database.CursorWindow);
+    method public android.database.CursorWindow getWindow();
+    method public boolean onMove(int, int);
+  }
+
+  public class CrossProcessCursorWrapper extends android.database.CursorWrapper implements android.database.CrossProcessCursor {
+    ctor public CrossProcessCursorWrapper(android.database.Cursor);
+    method public void fillWindow(int, android.database.CursorWindow);
+    method public android.database.CursorWindow getWindow();
+    method public boolean onMove(int, int);
+  }
+
+  public interface Cursor extends java.io.Closeable {
+    method public void close();
+    method public void copyStringToBuffer(@IntRange(from=0) int, android.database.CharArrayBuffer);
+    method @Deprecated public void deactivate();
+    method public byte[] getBlob(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getColumnCount();
+    method @IntRange(from=0xffffffff) public int getColumnIndex(String);
+    method @IntRange(from=0) public int getColumnIndexOrThrow(String) throws java.lang.IllegalArgumentException;
+    method public String getColumnName(@IntRange(from=0) int);
+    method public String[] getColumnNames();
+    method @IntRange(from=0) public int getCount();
+    method public double getDouble(@IntRange(from=0) int);
+    method public android.os.Bundle getExtras();
+    method public float getFloat(@IntRange(from=0) int);
+    method public int getInt(@IntRange(from=0) int);
+    method public long getLong(@IntRange(from=0) int);
+    method public android.net.Uri getNotificationUri();
+    method @Nullable public default java.util.List<android.net.Uri> getNotificationUris();
+    method @IntRange(from=0xffffffff) public int getPosition();
+    method public short getShort(@IntRange(from=0) int);
+    method public String getString(@IntRange(from=0) int);
+    method public int getType(@IntRange(from=0) int);
+    method public boolean getWantsAllOnMoveCalls();
+    method public boolean isAfterLast();
+    method public boolean isBeforeFirst();
+    method public boolean isClosed();
+    method public boolean isFirst();
+    method public boolean isLast();
+    method public boolean isNull(@IntRange(from=0) int);
+    method public boolean move(int);
+    method public boolean moveToFirst();
+    method public boolean moveToLast();
+    method public boolean moveToNext();
+    method public boolean moveToPosition(@IntRange(from=0xffffffff) int);
+    method public boolean moveToPrevious();
+    method public void registerContentObserver(android.database.ContentObserver);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method @Deprecated public boolean requery();
+    method public android.os.Bundle respond(android.os.Bundle);
+    method public void setExtras(android.os.Bundle);
+    method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method public default void setNotificationUris(@NonNull android.content.ContentResolver, @NonNull java.util.List<android.net.Uri>);
+    method public void unregisterContentObserver(android.database.ContentObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+    field public static final int FIELD_TYPE_BLOB = 4; // 0x4
+    field public static final int FIELD_TYPE_FLOAT = 2; // 0x2
+    field public static final int FIELD_TYPE_INTEGER = 1; // 0x1
+    field public static final int FIELD_TYPE_NULL = 0; // 0x0
+    field public static final int FIELD_TYPE_STRING = 3; // 0x3
+  }
+
+  public class CursorIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
+    ctor public CursorIndexOutOfBoundsException(int, int);
+    ctor public CursorIndexOutOfBoundsException(String);
+  }
+
+  public final class CursorJoiner implements java.lang.Iterable<android.database.CursorJoiner.Result> java.util.Iterator<android.database.CursorJoiner.Result> {
+    ctor public CursorJoiner(android.database.Cursor, String[], android.database.Cursor, String[]);
+    method public boolean hasNext();
+    method public java.util.Iterator<android.database.CursorJoiner.Result> iterator();
+    method public android.database.CursorJoiner.Result next();
+  }
+
+  public enum CursorJoiner.Result {
+    enum_constant public static final android.database.CursorJoiner.Result BOTH;
+    enum_constant public static final android.database.CursorJoiner.Result LEFT;
+    enum_constant public static final android.database.CursorJoiner.Result RIGHT;
+  }
+
+  public class CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable {
+    ctor public CursorWindow(String);
+    ctor public CursorWindow(String, long);
+    ctor @Deprecated public CursorWindow(boolean);
+    method public boolean allocRow();
+    method public void clear();
+    method public void copyStringToBuffer(@IntRange(from=0) int, @IntRange(from=0) int, android.database.CharArrayBuffer);
+    method public int describeContents();
+    method public void freeLastRow();
+    method public byte[] getBlob(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public double getDouble(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public float getFloat(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int getInt(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public long getLong(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @IntRange(from=0) public int getNumRows();
+    method public short getShort(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @IntRange(from=0) public int getStartPosition();
+    method public String getString(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int getType(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isBlob(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isFloat(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isLong(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isNull(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isString(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public static android.database.CursorWindow newFromParcel(android.os.Parcel);
+    method protected void onAllReferencesReleased();
+    method public boolean putBlob(byte[], @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putDouble(double, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putLong(long, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putNull(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putString(String, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean setNumColumns(@IntRange(from=0) int);
+    method public void setStartPosition(@IntRange(from=0) int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.database.CursorWindow> CREATOR;
+  }
+
+  public class CursorWrapper implements android.database.Cursor {
+    ctor public CursorWrapper(android.database.Cursor);
+    method public void close();
+    method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
+    method @Deprecated public void deactivate();
+    method public byte[] getBlob(int);
+    method public int getColumnCount();
+    method public int getColumnIndex(String);
+    method public int getColumnIndexOrThrow(String) throws java.lang.IllegalArgumentException;
+    method public String getColumnName(int);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public double getDouble(int);
+    method public android.os.Bundle getExtras();
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public android.net.Uri getNotificationUri();
+    method public int getPosition();
+    method public short getShort(int);
+    method public String getString(int);
+    method public int getType(int);
+    method public boolean getWantsAllOnMoveCalls();
+    method public android.database.Cursor getWrappedCursor();
+    method public boolean isAfterLast();
+    method public boolean isBeforeFirst();
+    method public boolean isClosed();
+    method public boolean isFirst();
+    method public boolean isLast();
+    method public boolean isNull(int);
+    method public boolean move(int);
+    method public boolean moveToFirst();
+    method public boolean moveToLast();
+    method public boolean moveToNext();
+    method public boolean moveToPosition(int);
+    method public boolean moveToPrevious();
+    method public void registerContentObserver(android.database.ContentObserver);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method @Deprecated public boolean requery();
+    method public android.os.Bundle respond(android.os.Bundle);
+    method public void setExtras(android.os.Bundle);
+    method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method public void unregisterContentObserver(android.database.ContentObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public class DataSetObservable extends android.database.Observable<android.database.DataSetObserver> {
+    ctor public DataSetObservable();
+    method public void notifyChanged();
+    method public void notifyInvalidated();
+  }
+
+  public abstract class DataSetObserver {
+    ctor public DataSetObserver();
+    method public void onChanged();
+    method public void onInvalidated();
+  }
+
+  public interface DatabaseErrorHandler {
+    method public void onCorruption(android.database.sqlite.SQLiteDatabase);
+  }
+
+  public class DatabaseUtils {
+    ctor public DatabaseUtils();
+    method public static void appendEscapedSQLString(StringBuilder, String);
+    method public static String[] appendSelectionArgs(String[], String[]);
+    method public static final void appendValueToSql(StringBuilder, Object);
+    method public static void bindObjectToProgram(android.database.sqlite.SQLiteProgram, int, Object);
+    method public static android.os.ParcelFileDescriptor blobFileDescriptorForQuery(android.database.sqlite.SQLiteDatabase, String, String[]);
+    method public static android.os.ParcelFileDescriptor blobFileDescriptorForQuery(android.database.sqlite.SQLiteStatement, String[]);
+    method public static String concatenateWhere(String, String);
+    method public static void createDbFromSqlStatements(android.content.Context, String, int, String);
+    method public static void cursorDoubleToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorDoubleToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorDoubleToCursorValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorFloatToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorIntToContentValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorIntToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorIntToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorLongToContentValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorLongToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorLongToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorRowToContentValues(android.database.Cursor, android.content.ContentValues);
+    method public static void cursorShortToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorStringToContentValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorStringToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorStringToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorStringToInsertHelper(android.database.Cursor, String, android.database.DatabaseUtils.InsertHelper, int);
+    method public static void dumpCurrentRow(android.database.Cursor);
+    method public static void dumpCurrentRow(android.database.Cursor, java.io.PrintStream);
+    method public static void dumpCurrentRow(android.database.Cursor, StringBuilder);
+    method public static String dumpCurrentRowToString(android.database.Cursor);
+    method public static void dumpCursor(android.database.Cursor);
+    method public static void dumpCursor(android.database.Cursor, java.io.PrintStream);
+    method public static void dumpCursor(android.database.Cursor, StringBuilder);
+    method public static String dumpCursorToString(android.database.Cursor);
+    method public static String getCollationKey(String);
+    method public static String getHexCollationKey(String);
+    method public static int getSqlStatementType(String);
+    method public static long longForQuery(android.database.sqlite.SQLiteDatabase, String, String[]);
+    method public static long longForQuery(android.database.sqlite.SQLiteStatement, String[]);
+    method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, String);
+    method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, String, String);
+    method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, String, String, String[]);
+    method public static final void readExceptionFromParcel(android.os.Parcel);
+    method public static void readExceptionWithFileNotFoundExceptionFromParcel(android.os.Parcel) throws java.io.FileNotFoundException;
+    method public static void readExceptionWithOperationApplicationExceptionFromParcel(android.os.Parcel) throws android.content.OperationApplicationException;
+    method public static String sqlEscapeString(String);
+    method public static String stringForQuery(android.database.sqlite.SQLiteDatabase, String, String[]);
+    method public static String stringForQuery(android.database.sqlite.SQLiteStatement, String[]);
+    method public static final void writeExceptionToParcel(android.os.Parcel, Exception);
+    field public static final int STATEMENT_ABORT = 6; // 0x6
+    field public static final int STATEMENT_ATTACH = 3; // 0x3
+    field public static final int STATEMENT_BEGIN = 4; // 0x4
+    field public static final int STATEMENT_COMMIT = 5; // 0x5
+    field public static final int STATEMENT_DDL = 8; // 0x8
+    field public static final int STATEMENT_OTHER = 99; // 0x63
+    field public static final int STATEMENT_PRAGMA = 7; // 0x7
+    field public static final int STATEMENT_SELECT = 1; // 0x1
+    field public static final int STATEMENT_UNPREPARED = 9; // 0x9
+    field public static final int STATEMENT_UPDATE = 2; // 0x2
+  }
+
+  @Deprecated public static class DatabaseUtils.InsertHelper {
+    ctor @Deprecated public DatabaseUtils.InsertHelper(android.database.sqlite.SQLiteDatabase, String);
+    method @Deprecated public void bind(int, double);
+    method @Deprecated public void bind(int, float);
+    method @Deprecated public void bind(int, long);
+    method @Deprecated public void bind(int, int);
+    method @Deprecated public void bind(int, boolean);
+    method @Deprecated public void bind(int, byte[]);
+    method @Deprecated public void bind(int, String);
+    method @Deprecated public void bindNull(int);
+    method @Deprecated public void close();
+    method @Deprecated public long execute();
+    method @Deprecated public int getColumnIndex(String);
+    method @Deprecated public long insert(android.content.ContentValues);
+    method @Deprecated public void prepareForInsert();
+    method @Deprecated public void prepareForReplace();
+    method @Deprecated public long replace(android.content.ContentValues);
+  }
+
+  public final class DefaultDatabaseErrorHandler implements android.database.DatabaseErrorHandler {
+    ctor public DefaultDatabaseErrorHandler();
+    method public void onCorruption(android.database.sqlite.SQLiteDatabase);
+  }
+
+  public class MatrixCursor extends android.database.AbstractCursor {
+    ctor public MatrixCursor(String[], int);
+    ctor public MatrixCursor(String[]);
+    method public void addRow(Object[]);
+    method public void addRow(Iterable<?>);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public double getDouble(int);
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public short getShort(int);
+    method public String getString(int);
+    method public boolean isNull(int);
+    method public android.database.MatrixCursor.RowBuilder newRow();
+  }
+
+  public class MatrixCursor.RowBuilder {
+    method public android.database.MatrixCursor.RowBuilder add(Object);
+    method public android.database.MatrixCursor.RowBuilder add(String, Object);
+  }
+
+  public class MergeCursor extends android.database.AbstractCursor {
+    ctor public MergeCursor(android.database.Cursor[]);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public double getDouble(int);
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public short getShort(int);
+    method public String getString(int);
+    method public boolean isNull(int);
+  }
+
+  public abstract class Observable<T> {
+    ctor public Observable();
+    method public void registerObserver(T);
+    method public void unregisterAll();
+    method public void unregisterObserver(T);
+    field protected final java.util.ArrayList<T> mObservers;
+  }
+
+  public class SQLException extends java.lang.RuntimeException {
+    ctor public SQLException();
+    ctor public SQLException(String);
+    ctor public SQLException(String, Throwable);
+  }
+
+  public class StaleDataException extends java.lang.RuntimeException {
+    ctor public StaleDataException();
+    ctor public StaleDataException(String);
+  }
+
+}
+
+package android.database.sqlite {
+
+  public class SQLiteAbortException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteAbortException();
+    ctor public SQLiteAbortException(String);
+  }
+
+  public class SQLiteAccessPermException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteAccessPermException();
+    ctor public SQLiteAccessPermException(String);
+  }
+
+  public class SQLiteBindOrColumnIndexOutOfRangeException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteBindOrColumnIndexOutOfRangeException();
+    ctor public SQLiteBindOrColumnIndexOutOfRangeException(String);
+  }
+
+  public class SQLiteBlobTooBigException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteBlobTooBigException();
+    ctor public SQLiteBlobTooBigException(String);
+  }
+
+  public class SQLiteCantOpenDatabaseException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteCantOpenDatabaseException();
+    ctor public SQLiteCantOpenDatabaseException(String);
+  }
+
+  public abstract class SQLiteClosable implements java.io.Closeable {
+    ctor public SQLiteClosable();
+    method public void acquireReference();
+    method public void close();
+    method protected abstract void onAllReferencesReleased();
+    method @Deprecated protected void onAllReferencesReleasedFromContainer();
+    method public void releaseReference();
+    method @Deprecated public void releaseReferenceFromContainer();
+  }
+
+  public class SQLiteConstraintException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteConstraintException();
+    ctor public SQLiteConstraintException(String);
+  }
+
+  public class SQLiteCursor extends android.database.AbstractWindowedCursor {
+    ctor @Deprecated public SQLiteCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, String, android.database.sqlite.SQLiteQuery);
+    ctor public SQLiteCursor(android.database.sqlite.SQLiteCursorDriver, String, android.database.sqlite.SQLiteQuery);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public android.database.sqlite.SQLiteDatabase getDatabase();
+    method public void setFillWindowForwardOnly(boolean);
+    method public void setSelectionArguments(String[]);
+  }
+
+  public interface SQLiteCursorDriver {
+    method public void cursorClosed();
+    method public void cursorDeactivated();
+    method public void cursorRequeried(android.database.Cursor);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]);
+    method public void setBindArguments(String[]);
+  }
+
+  public final class SQLiteDatabase extends android.database.sqlite.SQLiteClosable {
+    method public void beginTransaction();
+    method public void beginTransactionNonExclusive();
+    method public void beginTransactionWithListener(android.database.sqlite.SQLiteTransactionListener);
+    method public void beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener);
+    method public android.database.sqlite.SQLiteStatement compileStatement(String) throws android.database.SQLException;
+    method @NonNull public static android.database.sqlite.SQLiteDatabase create(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method @NonNull public static android.database.sqlite.SQLiteDatabase createInMemory(@NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public int delete(String, String, String[]);
+    method public static boolean deleteDatabase(@NonNull java.io.File);
+    method public void disableWriteAheadLogging();
+    method public boolean enableWriteAheadLogging();
+    method public void endTransaction();
+    method public void execPerConnectionSQL(@NonNull String, @Nullable Object[]) throws android.database.SQLException;
+    method public void execSQL(String) throws android.database.SQLException;
+    method public void execSQL(String, Object[]) throws android.database.SQLException;
+    method public static String findEditTable(String);
+    method public java.util.List<android.util.Pair<java.lang.String,java.lang.String>> getAttachedDbs();
+    method public long getMaximumSize();
+    method public long getPageSize();
+    method public String getPath();
+    method @Deprecated public java.util.Map<java.lang.String,java.lang.String> getSyncedTables();
+    method public int getVersion();
+    method public boolean inTransaction();
+    method public long insert(String, String, android.content.ContentValues);
+    method public long insertOrThrow(String, String, android.content.ContentValues) throws android.database.SQLException;
+    method public long insertWithOnConflict(String, String, android.content.ContentValues, int);
+    method public boolean isDatabaseIntegrityOk();
+    method public boolean isDbLockedByCurrentThread();
+    method @Deprecated public boolean isDbLockedByOtherThreads();
+    method public boolean isOpen();
+    method public boolean isReadOnly();
+    method public boolean isWriteAheadLoggingEnabled();
+    method @Deprecated public void markTableSyncable(String, String);
+    method @Deprecated public void markTableSyncable(String, String, String);
+    method public boolean needUpgrade(int);
+    method protected void onAllReferencesReleased();
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int);
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(@NonNull java.io.File, @NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int, @Nullable android.database.DatabaseErrorHandler);
+    method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(@NonNull java.io.File, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, @Nullable android.database.DatabaseErrorHandler);
+    method public android.database.Cursor query(boolean, String, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor query(boolean, String, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
+    method public android.database.Cursor query(String, String[], String, String[], String, String, String);
+    method public android.database.Cursor query(String, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, String, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, String, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
+    method public android.database.Cursor rawQuery(String, String[]);
+    method public android.database.Cursor rawQuery(String, String[], android.os.CancellationSignal);
+    method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, String, String[], String);
+    method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, String, String[], String, android.os.CancellationSignal);
+    method public static int releaseMemory();
+    method public long replace(String, String, android.content.ContentValues);
+    method public long replaceOrThrow(String, String, android.content.ContentValues) throws android.database.SQLException;
+    method public void setCustomAggregateFunction(@NonNull String, @NonNull java.util.function.BinaryOperator<java.lang.String>) throws android.database.sqlite.SQLiteException;
+    method public void setCustomScalarFunction(@NonNull String, @NonNull java.util.function.UnaryOperator<java.lang.String>) throws android.database.sqlite.SQLiteException;
+    method public void setForeignKeyConstraintsEnabled(boolean);
+    method public void setLocale(java.util.Locale);
+    method @Deprecated public void setLockingEnabled(boolean);
+    method public void setMaxSqlCacheSize(int);
+    method public long setMaximumSize(long);
+    method public void setPageSize(long);
+    method public void setTransactionSuccessful();
+    method public void setVersion(int);
+    method public int update(String, android.content.ContentValues, String, String[]);
+    method public int updateWithOnConflict(String, android.content.ContentValues, String, String[], int);
+    method public void validateSql(@NonNull String, @Nullable android.os.CancellationSignal);
+    method @Deprecated public boolean yieldIfContended();
+    method public boolean yieldIfContendedSafely();
+    method public boolean yieldIfContendedSafely(long);
+    field public static final int CONFLICT_ABORT = 2; // 0x2
+    field public static final int CONFLICT_FAIL = 3; // 0x3
+    field public static final int CONFLICT_IGNORE = 4; // 0x4
+    field public static final int CONFLICT_NONE = 0; // 0x0
+    field public static final int CONFLICT_REPLACE = 5; // 0x5
+    field public static final int CONFLICT_ROLLBACK = 1; // 0x1
+    field public static final int CREATE_IF_NECESSARY = 268435456; // 0x10000000
+    field public static final int ENABLE_WRITE_AHEAD_LOGGING = 536870912; // 0x20000000
+    field public static final int MAX_SQL_CACHE_SIZE = 100; // 0x64
+    field public static final int NO_LOCALIZED_COLLATORS = 16; // 0x10
+    field public static final int OPEN_READONLY = 1; // 0x1
+    field public static final int OPEN_READWRITE = 0; // 0x0
+    field public static final int SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000; // 0xc350
+  }
+
+  public static interface SQLiteDatabase.CursorFactory {
+    method public android.database.Cursor newCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, String, android.database.sqlite.SQLiteQuery);
+  }
+
+  public static final class SQLiteDatabase.OpenParams {
+    method @Nullable public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+    method @Nullable public android.database.DatabaseErrorHandler getErrorHandler();
+    method public long getIdleConnectionTimeout();
+    method @Nullable public String getJournalMode();
+    method @IntRange(from=0xffffffff) public int getLookasideSlotCount();
+    method @IntRange(from=0xffffffff) public int getLookasideSlotSize();
+    method public int getOpenFlags();
+    method @Nullable public String getSynchronousMode();
+  }
+
+  public static final class SQLiteDatabase.OpenParams.Builder {
+    ctor public SQLiteDatabase.OpenParams.Builder();
+    ctor public SQLiteDatabase.OpenParams.Builder(android.database.sqlite.SQLiteDatabase.OpenParams);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder addOpenFlags(int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams build();
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(@Nullable android.database.DatabaseErrorHandler);
+    method @Deprecated @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(@IntRange(from=0) long);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setJournalMode(@NonNull String);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setSynchronousMode(@NonNull String);
+  }
+
+  public class SQLiteDatabaseCorruptException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDatabaseCorruptException();
+    ctor public SQLiteDatabaseCorruptException(String);
+  }
+
+  public class SQLiteDatabaseLockedException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDatabaseLockedException();
+    ctor public SQLiteDatabaseLockedException(String);
+  }
+
+  public class SQLiteDatatypeMismatchException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDatatypeMismatchException();
+    ctor public SQLiteDatatypeMismatchException(String);
+  }
+
+  public class SQLiteDiskIOException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDiskIOException();
+    ctor public SQLiteDiskIOException(String);
+  }
+
+  public class SQLiteDoneException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDoneException();
+    ctor public SQLiteDoneException(String);
+  }
+
+  public class SQLiteException extends android.database.SQLException {
+    ctor public SQLiteException();
+    ctor public SQLiteException(String);
+    ctor public SQLiteException(String, Throwable);
+  }
+
+  public class SQLiteFullException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteFullException();
+    ctor public SQLiteFullException(String);
+  }
+
+  public class SQLiteMisuseException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteMisuseException();
+    ctor public SQLiteMisuseException(String);
+  }
+
+  public abstract class SQLiteOpenHelper implements java.lang.AutoCloseable {
+    ctor public SQLiteOpenHelper(@Nullable android.content.Context, @Nullable String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int);
+    ctor public SQLiteOpenHelper(@Nullable android.content.Context, @Nullable String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int, @Nullable android.database.DatabaseErrorHandler);
+    ctor public SQLiteOpenHelper(@Nullable android.content.Context, @Nullable String, int, @NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public void close();
+    method public String getDatabaseName();
+    method public android.database.sqlite.SQLiteDatabase getReadableDatabase();
+    method public android.database.sqlite.SQLiteDatabase getWritableDatabase();
+    method public void onConfigure(android.database.sqlite.SQLiteDatabase);
+    method public abstract void onCreate(android.database.sqlite.SQLiteDatabase);
+    method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int);
+    method public void onOpen(android.database.sqlite.SQLiteDatabase);
+    method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int);
+    method @Deprecated public void setIdleConnectionTimeout(@IntRange(from=0) long);
+    method public void setLookasideConfig(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public void setOpenParams(@NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public void setWriteAheadLoggingEnabled(boolean);
+  }
+
+  public class SQLiteOutOfMemoryException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteOutOfMemoryException();
+    ctor public SQLiteOutOfMemoryException(String);
+  }
+
+  public abstract class SQLiteProgram extends android.database.sqlite.SQLiteClosable {
+    method public void bindAllArgsAsStrings(String[]);
+    method public void bindBlob(int, byte[]);
+    method public void bindDouble(int, double);
+    method public void bindLong(int, long);
+    method public void bindNull(int);
+    method public void bindString(int, String);
+    method public void clearBindings();
+    method @Deprecated public final int getUniqueId();
+    method protected void onAllReferencesReleased();
+  }
+
+  public final class SQLiteQuery extends android.database.sqlite.SQLiteProgram {
+  }
+
+  public class SQLiteQueryBuilder {
+    ctor public SQLiteQueryBuilder();
+    method public static void appendColumns(StringBuilder, String[]);
+    method public void appendWhere(@NonNull CharSequence);
+    method public void appendWhereEscapeString(@NonNull String);
+    method public void appendWhereStandalone(@NonNull CharSequence);
+    method public String buildQuery(String[], String, String, String, String, String);
+    method @Deprecated public String buildQuery(String[], String, String[], String, String, String, String);
+    method public static String buildQueryString(boolean, String, String[], String, String, String, String, String);
+    method public String buildUnionQuery(String[], String, String);
+    method public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String, String);
+    method @Deprecated public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String[], String, String);
+    method public int delete(@NonNull android.database.sqlite.SQLiteDatabase, @Nullable String, @Nullable String[]);
+    method @Nullable public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+    method @Nullable public java.util.Collection<java.util.regex.Pattern> getProjectionGreylist();
+    method @Nullable public java.util.Map<java.lang.String,java.lang.String> getProjectionMap();
+    method @Nullable public String getTables();
+    method public long insert(@NonNull android.database.sqlite.SQLiteDatabase, @NonNull android.content.ContentValues);
+    method public boolean isDistinct();
+    method public boolean isStrict();
+    method public boolean isStrictColumns();
+    method public boolean isStrictGrammar();
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
+    method public void setCursorFactory(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public void setDistinct(boolean);
+    method public void setProjectionGreylist(@Nullable java.util.Collection<java.util.regex.Pattern>);
+    method public void setProjectionMap(@Nullable java.util.Map<java.lang.String,java.lang.String>);
+    method public void setStrict(boolean);
+    method public void setStrictColumns(boolean);
+    method public void setStrictGrammar(boolean);
+    method public void setTables(@Nullable String);
+    method public int update(@NonNull android.database.sqlite.SQLiteDatabase, @NonNull android.content.ContentValues, @Nullable String, @Nullable String[]);
+  }
+
+  public class SQLiteReadOnlyDatabaseException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteReadOnlyDatabaseException();
+    ctor public SQLiteReadOnlyDatabaseException(String);
+  }
+
+  public final class SQLiteStatement extends android.database.sqlite.SQLiteProgram {
+    method public void execute();
+    method public long executeInsert();
+    method public int executeUpdateDelete();
+    method public android.os.ParcelFileDescriptor simpleQueryForBlobFileDescriptor();
+    method public long simpleQueryForLong();
+    method public String simpleQueryForString();
+  }
+
+  public class SQLiteTableLockedException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteTableLockedException();
+    ctor public SQLiteTableLockedException(String);
+  }
+
+  public interface SQLiteTransactionListener {
+    method public void onBegin();
+    method public void onCommit();
+    method public void onRollback();
+  }
+
+}
+
+package android.drm {
+
+  @Deprecated public class DrmConvertedStatus {
+    ctor @Deprecated public DrmConvertedStatus(int, byte[], int);
+    field @Deprecated public static final int STATUS_ERROR = 3; // 0x3
+    field @Deprecated public static final int STATUS_INPUTDATA_ERROR = 2; // 0x2
+    field @Deprecated public static final int STATUS_OK = 1; // 0x1
+    field @Deprecated public final byte[] convertedData;
+    field @Deprecated public final int offset;
+    field @Deprecated public final int statusCode;
+  }
+
+  @Deprecated public class DrmErrorEvent extends android.drm.DrmEvent {
+    ctor @Deprecated public DrmErrorEvent(int, int, String);
+    ctor @Deprecated public DrmErrorEvent(int, int, String, java.util.HashMap<java.lang.String,java.lang.Object>);
+    field @Deprecated public static final int TYPE_ACQUIRE_DRM_INFO_FAILED = 2008; // 0x7d8
+    field @Deprecated public static final int TYPE_NOT_SUPPORTED = 2003; // 0x7d3
+    field @Deprecated public static final int TYPE_NO_INTERNET_CONNECTION = 2005; // 0x7d5
+    field @Deprecated public static final int TYPE_OUT_OF_MEMORY = 2004; // 0x7d4
+    field @Deprecated public static final int TYPE_PROCESS_DRM_INFO_FAILED = 2006; // 0x7d6
+    field @Deprecated public static final int TYPE_REMOVE_ALL_RIGHTS_FAILED = 2007; // 0x7d7
+    field @Deprecated public static final int TYPE_RIGHTS_NOT_INSTALLED = 2001; // 0x7d1
+    field @Deprecated public static final int TYPE_RIGHTS_RENEWAL_NOT_ALLOWED = 2002; // 0x7d2
+  }
+
+  @Deprecated public class DrmEvent {
+    ctor @Deprecated protected DrmEvent(int, int, String, java.util.HashMap<java.lang.String,java.lang.Object>);
+    ctor @Deprecated protected DrmEvent(int, int, String);
+    method @Deprecated public Object getAttribute(String);
+    method @Deprecated public String getMessage();
+    method @Deprecated public int getType();
+    method @Deprecated public int getUniqueId();
+    field @Deprecated public static final String DRM_INFO_OBJECT = "drm_info_object";
+    field @Deprecated public static final String DRM_INFO_STATUS_OBJECT = "drm_info_status_object";
+    field @Deprecated public static final int TYPE_ALL_RIGHTS_REMOVED = 1001; // 0x3e9
+    field @Deprecated public static final int TYPE_DRM_INFO_PROCESSED = 1002; // 0x3ea
+  }
+
+  @Deprecated public class DrmInfo {
+    ctor @Deprecated public DrmInfo(int, byte[], String);
+    ctor @Deprecated public DrmInfo(int, String, String);
+    method @Deprecated public Object get(String);
+    method @Deprecated public byte[] getData();
+    method @Deprecated public int getInfoType();
+    method @Deprecated public String getMimeType();
+    method @Deprecated public java.util.Iterator<java.lang.Object> iterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> keyIterator();
+    method @Deprecated public void put(String, Object);
+  }
+
+  @Deprecated public class DrmInfoEvent extends android.drm.DrmEvent {
+    ctor @Deprecated public DrmInfoEvent(int, int, String);
+    ctor @Deprecated public DrmInfoEvent(int, int, String, java.util.HashMap<java.lang.String,java.lang.Object>);
+    field @Deprecated public static final int TYPE_ACCOUNT_ALREADY_REGISTERED = 5; // 0x5
+    field @Deprecated public static final int TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT = 1; // 0x1
+    field @Deprecated public static final int TYPE_REMOVE_RIGHTS = 2; // 0x2
+    field @Deprecated public static final int TYPE_RIGHTS_INSTALLED = 3; // 0x3
+    field @Deprecated public static final int TYPE_RIGHTS_REMOVED = 6; // 0x6
+    field @Deprecated public static final int TYPE_WAIT_FOR_RIGHTS = 4; // 0x4
+  }
+
+  @Deprecated public class DrmInfoRequest {
+    ctor @Deprecated public DrmInfoRequest(int, String);
+    method @Deprecated public Object get(String);
+    method @Deprecated public int getInfoType();
+    method @Deprecated public String getMimeType();
+    method @Deprecated public java.util.Iterator<java.lang.Object> iterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> keyIterator();
+    method @Deprecated public void put(String, Object);
+    field @Deprecated public static final String ACCOUNT_ID = "account_id";
+    field @Deprecated public static final String SUBSCRIPTION_ID = "subscription_id";
+    field @Deprecated public static final int TYPE_REGISTRATION_INFO = 1; // 0x1
+    field @Deprecated public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3; // 0x3
+    field @Deprecated public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4; // 0x4
+    field @Deprecated public static final int TYPE_UNREGISTRATION_INFO = 2; // 0x2
+  }
+
+  @Deprecated public class DrmInfoStatus {
+    ctor @Deprecated public DrmInfoStatus(int, int, android.drm.ProcessedData, String);
+    field @Deprecated public static final int STATUS_ERROR = 2; // 0x2
+    field @Deprecated public static final int STATUS_OK = 1; // 0x1
+    field @Deprecated public final android.drm.ProcessedData data;
+    field @Deprecated public final int infoType;
+    field @Deprecated public final String mimeType;
+    field @Deprecated public final int statusCode;
+  }
+
+  @Deprecated public class DrmManagerClient implements java.lang.AutoCloseable {
+    ctor @Deprecated public DrmManagerClient(android.content.Context);
+    method @Deprecated public android.drm.DrmInfo acquireDrmInfo(android.drm.DrmInfoRequest);
+    method @Deprecated public int acquireRights(android.drm.DrmInfoRequest);
+    method @Deprecated public boolean canHandle(String, String);
+    method @Deprecated public boolean canHandle(android.net.Uri, String);
+    method @Deprecated public int checkRightsStatus(String);
+    method @Deprecated public int checkRightsStatus(android.net.Uri);
+    method @Deprecated public int checkRightsStatus(String, int);
+    method @Deprecated public int checkRightsStatus(android.net.Uri, int);
+    method @Deprecated public void close();
+    method @Deprecated public android.drm.DrmConvertedStatus closeConvertSession(int);
+    method @Deprecated public android.drm.DrmConvertedStatus convertData(int, byte[]);
+    method @Deprecated public String[] getAvailableDrmEngines();
+    method @Deprecated @NonNull public java.util.Collection<android.drm.DrmSupportInfo> getAvailableDrmSupportInfo();
+    method @Deprecated public android.content.ContentValues getConstraints(String, int);
+    method @Deprecated public android.content.ContentValues getConstraints(android.net.Uri, int);
+    method @Deprecated public int getDrmObjectType(String, String);
+    method @Deprecated public int getDrmObjectType(android.net.Uri, String);
+    method @Deprecated public android.content.ContentValues getMetadata(String);
+    method @Deprecated public android.content.ContentValues getMetadata(android.net.Uri);
+    method @Deprecated public String getOriginalMimeType(String);
+    method @Deprecated public String getOriginalMimeType(android.net.Uri);
+    method @Deprecated public int openConvertSession(String);
+    method @Deprecated public int processDrmInfo(android.drm.DrmInfo);
+    method @Deprecated public void release();
+    method @Deprecated public int removeAllRights();
+    method @Deprecated public int removeRights(String);
+    method @Deprecated public int removeRights(android.net.Uri);
+    method @Deprecated public int saveRights(android.drm.DrmRights, String, String) throws java.io.IOException;
+    method @Deprecated public void setOnErrorListener(android.drm.DrmManagerClient.OnErrorListener);
+    method @Deprecated public void setOnEventListener(android.drm.DrmManagerClient.OnEventListener);
+    method @Deprecated public void setOnInfoListener(android.drm.DrmManagerClient.OnInfoListener);
+    field @Deprecated public static final int ERROR_NONE = 0; // 0x0
+    field @Deprecated public static final int ERROR_UNKNOWN = -2000; // 0xfffff830
+  }
+
+  @Deprecated public static interface DrmManagerClient.OnErrorListener {
+    method @Deprecated public void onError(android.drm.DrmManagerClient, android.drm.DrmErrorEvent);
+  }
+
+  @Deprecated public static interface DrmManagerClient.OnEventListener {
+    method @Deprecated public void onEvent(android.drm.DrmManagerClient, android.drm.DrmEvent);
+  }
+
+  @Deprecated public static interface DrmManagerClient.OnInfoListener {
+    method @Deprecated public void onInfo(android.drm.DrmManagerClient, android.drm.DrmInfoEvent);
+  }
+
+  @Deprecated public class DrmRights {
+    ctor @Deprecated public DrmRights(String, String);
+    ctor @Deprecated public DrmRights(String, String, String);
+    ctor @Deprecated public DrmRights(String, String, String, String);
+    ctor @Deprecated public DrmRights(java.io.File, String);
+    ctor @Deprecated public DrmRights(android.drm.ProcessedData, String);
+    method @Deprecated public String getAccountId();
+    method @Deprecated public byte[] getData();
+    method @Deprecated public String getMimeType();
+    method @Deprecated public String getSubscriptionId();
+  }
+
+  @Deprecated public class DrmStore {
+    ctor @Deprecated public DrmStore();
+  }
+
+  @Deprecated public static class DrmStore.Action {
+    ctor @Deprecated public DrmStore.Action();
+    field @Deprecated public static final int DEFAULT = 0; // 0x0
+    field @Deprecated public static final int DISPLAY = 7; // 0x7
+    field @Deprecated public static final int EXECUTE = 6; // 0x6
+    field @Deprecated public static final int OUTPUT = 4; // 0x4
+    field @Deprecated public static final int PLAY = 1; // 0x1
+    field @Deprecated public static final int PREVIEW = 5; // 0x5
+    field @Deprecated public static final int RINGTONE = 2; // 0x2
+    field @Deprecated public static final int TRANSFER = 3; // 0x3
+  }
+
+  @Deprecated public static interface DrmStore.ConstraintsColumns {
+    field @Deprecated public static final String EXTENDED_METADATA = "extended_metadata";
+    field @Deprecated public static final String LICENSE_AVAILABLE_TIME = "license_available_time";
+    field @Deprecated public static final String LICENSE_EXPIRY_TIME = "license_expiry_time";
+    field @Deprecated public static final String LICENSE_START_TIME = "license_start_time";
+    field @Deprecated public static final String MAX_REPEAT_COUNT = "max_repeat_count";
+    field @Deprecated public static final String REMAINING_REPEAT_COUNT = "remaining_repeat_count";
+  }
+
+  @Deprecated public static class DrmStore.DrmObjectType {
+    ctor @Deprecated public DrmStore.DrmObjectType();
+    field @Deprecated public static final int CONTENT = 1; // 0x1
+    field @Deprecated public static final int RIGHTS_OBJECT = 2; // 0x2
+    field @Deprecated public static final int TRIGGER_OBJECT = 3; // 0x3
+    field @Deprecated public static final int UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public static class DrmStore.Playback {
+    ctor @Deprecated public DrmStore.Playback();
+    field @Deprecated public static final int PAUSE = 2; // 0x2
+    field @Deprecated public static final int RESUME = 3; // 0x3
+    field @Deprecated public static final int START = 0; // 0x0
+    field @Deprecated public static final int STOP = 1; // 0x1
+  }
+
+  @Deprecated public static class DrmStore.RightsStatus {
+    ctor @Deprecated public DrmStore.RightsStatus();
+    field @Deprecated public static final int RIGHTS_EXPIRED = 2; // 0x2
+    field @Deprecated public static final int RIGHTS_INVALID = 1; // 0x1
+    field @Deprecated public static final int RIGHTS_NOT_ACQUIRED = 3; // 0x3
+    field @Deprecated public static final int RIGHTS_VALID = 0; // 0x0
+  }
+
+  @Deprecated public class DrmSupportInfo {
+    ctor @Deprecated public DrmSupportInfo();
+    method @Deprecated public void addFileSuffix(String);
+    method @Deprecated public void addMimeType(String);
+    method @Deprecated public String getDescriprition();
+    method @Deprecated public String getDescription();
+    method @Deprecated public java.util.Iterator<java.lang.String> getFileSuffixIterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> getMimeTypeIterator();
+    method @Deprecated public void setDescription(String);
+  }
+
+  @Deprecated public class DrmUtils {
+    ctor @Deprecated public DrmUtils();
+    method @Deprecated public static android.drm.DrmUtils.ExtendedMetadataParser getExtendedMetadataParser(byte[]);
+  }
+
+  @Deprecated public static class DrmUtils.ExtendedMetadataParser {
+    method @Deprecated public String get(String);
+    method @Deprecated public java.util.Iterator<java.lang.String> iterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> keyIterator();
+  }
+
+  @Deprecated public class ProcessedData {
+    method @Deprecated public String getAccountId();
+    method @Deprecated public byte[] getData();
+    method @Deprecated public String getSubscriptionId();
+  }
+
+}
+
+package android.gesture {
+
+  public class Gesture implements android.os.Parcelable {
+    ctor public Gesture();
+    method public void addStroke(android.gesture.GestureStroke);
+    method public Object clone();
+    method public int describeContents();
+    method public android.graphics.RectF getBoundingBox();
+    method public long getID();
+    method public float getLength();
+    method public java.util.ArrayList<android.gesture.GestureStroke> getStrokes();
+    method public int getStrokesCount();
+    method public android.graphics.Bitmap toBitmap(int, int, int, int, int);
+    method public android.graphics.Bitmap toBitmap(int, int, int, int);
+    method public android.graphics.Path toPath();
+    method public android.graphics.Path toPath(android.graphics.Path);
+    method public android.graphics.Path toPath(int, int, int, int);
+    method public android.graphics.Path toPath(android.graphics.Path, int, int, int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.gesture.Gesture> CREATOR;
+  }
+
+  public final class GestureLibraries {
+    method public static android.gesture.GestureLibrary fromFile(String);
+    method public static android.gesture.GestureLibrary fromFile(java.io.File);
+    method @NonNull public static android.gesture.GestureLibrary fromFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public static android.gesture.GestureLibrary fromPrivateFile(android.content.Context, String);
+    method public static android.gesture.GestureLibrary fromRawResource(android.content.Context, @RawRes int);
+  }
+
+  public abstract class GestureLibrary {
+    ctor protected GestureLibrary();
+    method public void addGesture(String, android.gesture.Gesture);
+    method public java.util.Set<java.lang.String> getGestureEntries();
+    method public java.util.ArrayList<android.gesture.Gesture> getGestures(String);
+    method public int getOrientationStyle();
+    method public int getSequenceType();
+    method public boolean isReadOnly();
+    method public abstract boolean load();
+    method public java.util.ArrayList<android.gesture.Prediction> recognize(android.gesture.Gesture);
+    method public void removeEntry(String);
+    method public void removeGesture(String, android.gesture.Gesture);
+    method public abstract boolean save();
+    method public void setOrientationStyle(int);
+    method public void setSequenceType(int);
+    field protected final android.gesture.GestureStore mStore;
+  }
+
+  public class GestureOverlayView extends android.widget.FrameLayout {
+    ctor public GestureOverlayView(android.content.Context);
+    ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet);
+    ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int);
+    ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addOnGestureListener(android.gesture.GestureOverlayView.OnGestureListener);
+    method public void addOnGesturePerformedListener(android.gesture.GestureOverlayView.OnGesturePerformedListener);
+    method public void addOnGesturingListener(android.gesture.GestureOverlayView.OnGesturingListener);
+    method public void cancelClearAnimation();
+    method public void cancelGesture();
+    method public void clear(boolean);
+    method public java.util.ArrayList<android.gesture.GesturePoint> getCurrentStroke();
+    method public long getFadeOffset();
+    method public android.gesture.Gesture getGesture();
+    method @ColorInt public int getGestureColor();
+    method public android.graphics.Path getGesturePath();
+    method public android.graphics.Path getGesturePath(android.graphics.Path);
+    method public float getGestureStrokeAngleThreshold();
+    method public float getGestureStrokeLengthThreshold();
+    method public float getGestureStrokeSquarenessTreshold();
+    method public int getGestureStrokeType();
+    method public float getGestureStrokeWidth();
+    method public int getOrientation();
+    method @ColorInt public int getUncertainGestureColor();
+    method public boolean isEventsInterceptionEnabled();
+    method public boolean isFadeEnabled();
+    method public boolean isGestureVisible();
+    method public boolean isGesturing();
+    method public void removeAllOnGestureListeners();
+    method public void removeAllOnGesturePerformedListeners();
+    method public void removeAllOnGesturingListeners();
+    method public void removeOnGestureListener(android.gesture.GestureOverlayView.OnGestureListener);
+    method public void removeOnGesturePerformedListener(android.gesture.GestureOverlayView.OnGesturePerformedListener);
+    method public void removeOnGesturingListener(android.gesture.GestureOverlayView.OnGesturingListener);
+    method public void setEventsInterceptionEnabled(boolean);
+    method public void setFadeEnabled(boolean);
+    method public void setFadeOffset(long);
+    method public void setGesture(android.gesture.Gesture);
+    method public void setGestureColor(@ColorInt int);
+    method public void setGestureStrokeAngleThreshold(float);
+    method public void setGestureStrokeLengthThreshold(float);
+    method public void setGestureStrokeSquarenessTreshold(float);
+    method public void setGestureStrokeType(int);
+    method public void setGestureStrokeWidth(float);
+    method public void setGestureVisible(boolean);
+    method public void setOrientation(int);
+    method public void setUncertainGestureColor(@ColorInt int);
+    field public static final int GESTURE_STROKE_TYPE_MULTIPLE = 1; // 0x1
+    field public static final int GESTURE_STROKE_TYPE_SINGLE = 0; // 0x0
+    field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
+    field public static final int ORIENTATION_VERTICAL = 1; // 0x1
+  }
+
+  public static interface GestureOverlayView.OnGestureListener {
+    method public void onGesture(android.gesture.GestureOverlayView, android.view.MotionEvent);
+    method public void onGestureCancelled(android.gesture.GestureOverlayView, android.view.MotionEvent);
+    method public void onGestureEnded(android.gesture.GestureOverlayView, android.view.MotionEvent);
+    method public void onGestureStarted(android.gesture.GestureOverlayView, android.view.MotionEvent);
+  }
+
+  public static interface GestureOverlayView.OnGesturePerformedListener {
+    method public void onGesturePerformed(android.gesture.GestureOverlayView, android.gesture.Gesture);
+  }
+
+  public static interface GestureOverlayView.OnGesturingListener {
+    method public void onGesturingEnded(android.gesture.GestureOverlayView);
+    method public void onGesturingStarted(android.gesture.GestureOverlayView);
+  }
+
+  public class GesturePoint {
+    ctor public GesturePoint(float, float, long);
+    method public Object clone();
+    field public final long timestamp;
+    field public final float x;
+    field public final float y;
+  }
+
+  public class GestureStore {
+    ctor public GestureStore();
+    method public void addGesture(String, android.gesture.Gesture);
+    method public java.util.Set<java.lang.String> getGestureEntries();
+    method public java.util.ArrayList<android.gesture.Gesture> getGestures(String);
+    method public int getOrientationStyle();
+    method public int getSequenceType();
+    method public boolean hasChanged();
+    method public void load(java.io.InputStream) throws java.io.IOException;
+    method public void load(java.io.InputStream, boolean) throws java.io.IOException;
+    method public java.util.ArrayList<android.gesture.Prediction> recognize(android.gesture.Gesture);
+    method public void removeEntry(String);
+    method public void removeGesture(String, android.gesture.Gesture);
+    method public void save(java.io.OutputStream) throws java.io.IOException;
+    method public void save(java.io.OutputStream, boolean) throws java.io.IOException;
+    method public void setOrientationStyle(int);
+    method public void setSequenceType(int);
+    field public static final int ORIENTATION_INVARIANT = 1; // 0x1
+    field public static final int ORIENTATION_SENSITIVE = 2; // 0x2
+    field public static final int SEQUENCE_INVARIANT = 1; // 0x1
+    field public static final int SEQUENCE_SENSITIVE = 2; // 0x2
+  }
+
+  public class GestureStroke {
+    ctor public GestureStroke(java.util.ArrayList<android.gesture.GesturePoint>);
+    method public void clearPath();
+    method public Object clone();
+    method public android.gesture.OrientedBoundingBox computeOrientedBoundingBox();
+    method public android.graphics.Path getPath();
+    method public android.graphics.Path toPath(float, float, int);
+    field public final android.graphics.RectF boundingBox;
+    field public final float length;
+    field public final float[] points;
+  }
+
+  public final class GestureUtils {
+    method public static android.gesture.OrientedBoundingBox computeOrientedBoundingBox(java.util.ArrayList<android.gesture.GesturePoint>);
+    method public static android.gesture.OrientedBoundingBox computeOrientedBoundingBox(float[]);
+    method public static float[] spatialSampling(android.gesture.Gesture, int);
+    method public static float[] spatialSampling(android.gesture.Gesture, int, boolean);
+    method public static float[] temporalSampling(android.gesture.GestureStroke, int);
+  }
+
+  public class OrientedBoundingBox {
+    field public final float centerX;
+    field public final float centerY;
+    field public final float height;
+    field public final float orientation;
+    field public final float squareness;
+    field public final float width;
+  }
+
+  public class Prediction {
+    field public final String name;
+    field public double score;
+  }
+
+}
+
+package android.graphics {
+
+  public final class Bitmap implements android.os.Parcelable {
+    method @NonNull public android.graphics.Bitmap asShared();
+    method @WorkerThread public boolean compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream);
+    method public android.graphics.Bitmap copy(android.graphics.Bitmap.Config, boolean);
+    method public void copyPixelsFromBuffer(java.nio.Buffer);
+    method public void copyPixelsToBuffer(java.nio.Buffer);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Bitmap);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Bitmap, int, int, int, int);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Bitmap, int, int, int, int, @Nullable android.graphics.Matrix, boolean);
+    method public static android.graphics.Bitmap createBitmap(int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(int, int, @NonNull android.graphics.Bitmap.Config, boolean);
+    method public static android.graphics.Bitmap createBitmap(int, int, @NonNull android.graphics.Bitmap.Config, boolean, @NonNull android.graphics.ColorSpace);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, int, int, @NonNull android.graphics.Bitmap.Config, boolean);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, int, int, @NonNull android.graphics.Bitmap.Config, boolean, @NonNull android.graphics.ColorSpace);
+    method public static android.graphics.Bitmap createBitmap(@ColorInt @NonNull int[], int, int, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.util.DisplayMetrics, @ColorInt @NonNull int[], int, int, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@ColorInt @NonNull int[], int, int, android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, @ColorInt @NonNull int[], int, int, @NonNull android.graphics.Bitmap.Config);
+    method @NonNull public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Picture);
+    method @NonNull public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Picture, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createScaledBitmap(@NonNull android.graphics.Bitmap, int, int, boolean);
+    method public int describeContents();
+    method public void eraseColor(@ColorInt int);
+    method public void eraseColor(@ColorLong long);
+    method @CheckResult public android.graphics.Bitmap extractAlpha();
+    method @CheckResult public android.graphics.Bitmap extractAlpha(android.graphics.Paint, int[]);
+    method public int getAllocationByteCount();
+    method public int getByteCount();
+    method @NonNull public android.graphics.Color getColor(int, int);
+    method @Nullable public android.graphics.ColorSpace getColorSpace();
+    method public android.graphics.Bitmap.Config getConfig();
+    method public int getDensity();
+    method public int getGenerationId();
+    method @NonNull public android.hardware.HardwareBuffer getHardwareBuffer();
+    method public int getHeight();
+    method public byte[] getNinePatchChunk();
+    method @ColorInt public int getPixel(int, int);
+    method public void getPixels(@ColorInt int[], int, int, int, int, int, int);
+    method public int getRowBytes();
+    method public int getScaledHeight(android.graphics.Canvas);
+    method public int getScaledHeight(android.util.DisplayMetrics);
+    method public int getScaledHeight(int);
+    method public int getScaledWidth(android.graphics.Canvas);
+    method public int getScaledWidth(android.util.DisplayMetrics);
+    method public int getScaledWidth(int);
+    method public int getWidth();
+    method public boolean hasAlpha();
+    method public boolean hasMipMap();
+    method public boolean isMutable();
+    method public boolean isPremultiplied();
+    method public boolean isRecycled();
+    method public void prepareToDraw();
+    method public void reconfigure(int, int, android.graphics.Bitmap.Config);
+    method public void recycle();
+    method public boolean sameAs(android.graphics.Bitmap);
+    method public void setColorSpace(@NonNull android.graphics.ColorSpace);
+    method public void setConfig(android.graphics.Bitmap.Config);
+    method public void setDensity(int);
+    method public void setHasAlpha(boolean);
+    method public void setHasMipMap(boolean);
+    method public void setHeight(int);
+    method public void setPixel(int, int, @ColorInt int);
+    method public void setPixels(@ColorInt int[], int, int, int, int, int, int);
+    method public void setPremultiplied(boolean);
+    method public void setWidth(int);
+    method @Nullable public static android.graphics.Bitmap wrapHardwareBuffer(@NonNull android.hardware.HardwareBuffer, @Nullable android.graphics.ColorSpace);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Bitmap> CREATOR;
+    field public static final int DENSITY_NONE = 0; // 0x0
+  }
+
+  public enum Bitmap.CompressFormat {
+    enum_constant public static final android.graphics.Bitmap.CompressFormat JPEG;
+    enum_constant public static final android.graphics.Bitmap.CompressFormat PNG;
+    enum_constant @Deprecated public static final android.graphics.Bitmap.CompressFormat WEBP;
+    enum_constant public static final android.graphics.Bitmap.CompressFormat WEBP_LOSSLESS;
+    enum_constant public static final android.graphics.Bitmap.CompressFormat WEBP_LOSSY;
+  }
+
+  public enum Bitmap.Config {
+    enum_constant public static final android.graphics.Bitmap.Config ALPHA_8;
+    enum_constant @Deprecated public static final android.graphics.Bitmap.Config ARGB_4444;
+    enum_constant public static final android.graphics.Bitmap.Config ARGB_8888;
+    enum_constant public static final android.graphics.Bitmap.Config HARDWARE;
+    enum_constant public static final android.graphics.Bitmap.Config RGBA_F16;
+    enum_constant public static final android.graphics.Bitmap.Config RGB_565;
+  }
+
+  public class BitmapFactory {
+    ctor public BitmapFactory();
+    method public static android.graphics.Bitmap decodeByteArray(byte[], int, int, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeByteArray(byte[], int, int);
+    method public static android.graphics.Bitmap decodeFile(String, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeFile(String);
+    method public static android.graphics.Bitmap decodeFileDescriptor(java.io.FileDescriptor, android.graphics.Rect, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeFileDescriptor(java.io.FileDescriptor);
+    method public static android.graphics.Bitmap decodeResource(android.content.res.Resources, int, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeResource(android.content.res.Resources, int);
+    method @Nullable public static android.graphics.Bitmap decodeResourceStream(@Nullable android.content.res.Resources, @Nullable android.util.TypedValue, @Nullable java.io.InputStream, @Nullable android.graphics.Rect, @Nullable android.graphics.BitmapFactory.Options);
+    method @Nullable public static android.graphics.Bitmap decodeStream(@Nullable java.io.InputStream, @Nullable android.graphics.Rect, @Nullable android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeStream(java.io.InputStream);
+  }
+
+  public static class BitmapFactory.Options {
+    ctor public BitmapFactory.Options();
+    method @Deprecated public void requestCancelDecode();
+    field public android.graphics.Bitmap inBitmap;
+    field public int inDensity;
+    field @Deprecated public boolean inDither;
+    field @Deprecated public boolean inInputShareable;
+    field public boolean inJustDecodeBounds;
+    field public boolean inMutable;
+    field @Deprecated public boolean inPreferQualityOverSpeed;
+    field public android.graphics.ColorSpace inPreferredColorSpace;
+    field public android.graphics.Bitmap.Config inPreferredConfig;
+    field public boolean inPremultiplied;
+    field @Deprecated public boolean inPurgeable;
+    field public int inSampleSize;
+    field public boolean inScaled;
+    field public int inScreenDensity;
+    field public int inTargetDensity;
+    field public byte[] inTempStorage;
+    field @Deprecated public boolean mCancel;
+    field public android.graphics.ColorSpace outColorSpace;
+    field public android.graphics.Bitmap.Config outConfig;
+    field public int outHeight;
+    field public String outMimeType;
+    field public int outWidth;
+  }
+
+  public final class BitmapRegionDecoder {
+    method public android.graphics.Bitmap decodeRegion(android.graphics.Rect, android.graphics.BitmapFactory.Options);
+    method public int getHeight();
+    method public int getWidth();
+    method public boolean isRecycled();
+    method @Deprecated @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull byte[], int, int, boolean) throws java.io.IOException;
+    method @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull byte[], int, int) throws java.io.IOException;
+    method @Deprecated @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull java.io.FileDescriptor, boolean) throws java.io.IOException;
+    method @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method @Deprecated @Nullable public static android.graphics.BitmapRegionDecoder newInstance(@NonNull java.io.InputStream, boolean) throws java.io.IOException;
+    method @Nullable public static android.graphics.BitmapRegionDecoder newInstance(@NonNull java.io.InputStream) throws java.io.IOException;
+    method @Deprecated @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull String, boolean) throws java.io.IOException;
+    method @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull String) throws java.io.IOException;
+    method public void recycle();
+  }
+
+  public class BitmapShader extends android.graphics.Shader {
+    ctor public BitmapShader(@NonNull android.graphics.Bitmap, @NonNull android.graphics.Shader.TileMode, @NonNull android.graphics.Shader.TileMode);
+  }
+
+  public enum BlendMode {
+    enum_constant public static final android.graphics.BlendMode CLEAR;
+    enum_constant public static final android.graphics.BlendMode COLOR;
+    enum_constant public static final android.graphics.BlendMode COLOR_BURN;
+    enum_constant public static final android.graphics.BlendMode COLOR_DODGE;
+    enum_constant public static final android.graphics.BlendMode DARKEN;
+    enum_constant public static final android.graphics.BlendMode DIFFERENCE;
+    enum_constant public static final android.graphics.BlendMode DST;
+    enum_constant public static final android.graphics.BlendMode DST_ATOP;
+    enum_constant public static final android.graphics.BlendMode DST_IN;
+    enum_constant public static final android.graphics.BlendMode DST_OUT;
+    enum_constant public static final android.graphics.BlendMode DST_OVER;
+    enum_constant public static final android.graphics.BlendMode EXCLUSION;
+    enum_constant public static final android.graphics.BlendMode HARD_LIGHT;
+    enum_constant public static final android.graphics.BlendMode HUE;
+    enum_constant public static final android.graphics.BlendMode LIGHTEN;
+    enum_constant public static final android.graphics.BlendMode LUMINOSITY;
+    enum_constant public static final android.graphics.BlendMode MODULATE;
+    enum_constant public static final android.graphics.BlendMode MULTIPLY;
+    enum_constant public static final android.graphics.BlendMode OVERLAY;
+    enum_constant public static final android.graphics.BlendMode PLUS;
+    enum_constant public static final android.graphics.BlendMode SATURATION;
+    enum_constant public static final android.graphics.BlendMode SCREEN;
+    enum_constant public static final android.graphics.BlendMode SOFT_LIGHT;
+    enum_constant public static final android.graphics.BlendMode SRC;
+    enum_constant public static final android.graphics.BlendMode SRC_ATOP;
+    enum_constant public static final android.graphics.BlendMode SRC_IN;
+    enum_constant public static final android.graphics.BlendMode SRC_OUT;
+    enum_constant public static final android.graphics.BlendMode SRC_OVER;
+    enum_constant public static final android.graphics.BlendMode XOR;
+  }
+
+  public final class BlendModeColorFilter extends android.graphics.ColorFilter {
+    ctor public BlendModeColorFilter(@ColorInt int, @NonNull android.graphics.BlendMode);
+    method @ColorInt public int getColor();
+    method public android.graphics.BlendMode getMode();
+  }
+
+  public class BlurMaskFilter extends android.graphics.MaskFilter {
+    ctor public BlurMaskFilter(float, android.graphics.BlurMaskFilter.Blur);
+  }
+
+  public enum BlurMaskFilter.Blur {
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur INNER;
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur NORMAL;
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur OUTER;
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID;
+  }
+
+  public class Camera {
+    ctor public Camera();
+    method public void applyToCanvas(android.graphics.Canvas);
+    method public float dotWithNormal(float, float, float);
+    method public float getLocationX();
+    method public float getLocationY();
+    method public float getLocationZ();
+    method public void getMatrix(android.graphics.Matrix);
+    method public void restore();
+    method public void rotate(float, float, float);
+    method public void rotateX(float);
+    method public void rotateY(float);
+    method public void rotateZ(float);
+    method public void save();
+    method public void setLocation(float, float, float);
+    method public void translate(float, float, float);
+  }
+
+  public class Canvas {
+    ctor public Canvas();
+    ctor public Canvas(@NonNull android.graphics.Bitmap);
+    method public boolean clipOutPath(@NonNull android.graphics.Path);
+    method public boolean clipOutRect(@NonNull android.graphics.RectF);
+    method public boolean clipOutRect(@NonNull android.graphics.Rect);
+    method public boolean clipOutRect(float, float, float, float);
+    method public boolean clipOutRect(int, int, int, int);
+    method @Deprecated public boolean clipPath(@NonNull android.graphics.Path, @NonNull android.graphics.Region.Op);
+    method public boolean clipPath(@NonNull android.graphics.Path);
+    method @Deprecated public boolean clipRect(@NonNull android.graphics.RectF, @NonNull android.graphics.Region.Op);
+    method @Deprecated public boolean clipRect(@NonNull android.graphics.Rect, @NonNull android.graphics.Region.Op);
+    method public boolean clipRect(@NonNull android.graphics.RectF);
+    method public boolean clipRect(@NonNull android.graphics.Rect);
+    method @Deprecated public boolean clipRect(float, float, float, float, @NonNull android.graphics.Region.Op);
+    method public boolean clipRect(float, float, float, float);
+    method public boolean clipRect(int, int, int, int);
+    method public void concat(@Nullable android.graphics.Matrix);
+    method public void disableZ();
+    method public void drawARGB(int, int, int, int);
+    method public void drawArc(@NonNull android.graphics.RectF, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawArc(float, float, float, float, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, float, float, @Nullable android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @NonNull android.graphics.RectF, @Nullable android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @NonNull android.graphics.Rect, @Nullable android.graphics.Paint);
+    method @Deprecated public void drawBitmap(@NonNull int[], int, int, float, float, int, int, boolean, @Nullable android.graphics.Paint);
+    method @Deprecated public void drawBitmap(@NonNull int[], int, int, int, int, int, int, boolean, @Nullable android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, @NonNull android.graphics.Matrix, @Nullable android.graphics.Paint);
+    method public void drawBitmapMesh(@NonNull android.graphics.Bitmap, int, int, @NonNull float[], int, @Nullable int[], int, @Nullable android.graphics.Paint);
+    method public void drawCircle(float, float, float, @NonNull android.graphics.Paint);
+    method public void drawColor(@ColorInt int);
+    method public void drawColor(@ColorLong long);
+    method public void drawColor(@ColorInt int, @NonNull android.graphics.PorterDuff.Mode);
+    method public void drawColor(@ColorInt int, @NonNull android.graphics.BlendMode);
+    method public void drawColor(@ColorLong long, @NonNull android.graphics.BlendMode);
+    method public void drawDoubleRoundRect(@NonNull android.graphics.RectF, float, float, @NonNull android.graphics.RectF, float, float, @NonNull android.graphics.Paint);
+    method public void drawDoubleRoundRect(@NonNull android.graphics.RectF, @NonNull float[], @NonNull android.graphics.RectF, @NonNull float[], @NonNull android.graphics.Paint);
+    method public void drawGlyphs(@NonNull int[], @IntRange(from=0) int, @NonNull float[], @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.fonts.Font, @NonNull android.graphics.Paint);
+    method public void drawLine(float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawLines(@NonNull @Size(multiple=4) float[], int, int, @NonNull android.graphics.Paint);
+    method public void drawLines(@NonNull @Size(multiple=4) float[], @NonNull android.graphics.Paint);
+    method public void drawOval(@NonNull android.graphics.RectF, @NonNull android.graphics.Paint);
+    method public void drawOval(float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawPaint(@NonNull android.graphics.Paint);
+    method public void drawPatch(@NonNull android.graphics.NinePatch, @NonNull android.graphics.Rect, @Nullable android.graphics.Paint);
+    method public void drawPatch(@NonNull android.graphics.NinePatch, @NonNull android.graphics.RectF, @Nullable android.graphics.Paint);
+    method public void drawPath(@NonNull android.graphics.Path, @NonNull android.graphics.Paint);
+    method public void drawPicture(@NonNull android.graphics.Picture);
+    method public void drawPicture(@NonNull android.graphics.Picture, @NonNull android.graphics.RectF);
+    method public void drawPicture(@NonNull android.graphics.Picture, @NonNull android.graphics.Rect);
+    method public void drawPoint(float, float, @NonNull android.graphics.Paint);
+    method public void drawPoints(@Size(multiple=2) float[], int, int, @NonNull android.graphics.Paint);
+    method public void drawPoints(@NonNull @Size(multiple=2) float[], @NonNull android.graphics.Paint);
+    method @Deprecated public void drawPosText(@NonNull char[], int, int, @NonNull @Size(multiple=2) float[], @NonNull android.graphics.Paint);
+    method @Deprecated public void drawPosText(@NonNull String, @NonNull @Size(multiple=2) float[], @NonNull android.graphics.Paint);
+    method public void drawRGB(int, int, int);
+    method public void drawRect(@NonNull android.graphics.RectF, @NonNull android.graphics.Paint);
+    method public void drawRect(@NonNull android.graphics.Rect, @NonNull android.graphics.Paint);
+    method public void drawRect(float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawRenderNode(@NonNull android.graphics.RenderNode);
+    method public void drawRoundRect(@NonNull android.graphics.RectF, float, float, @NonNull android.graphics.Paint);
+    method public void drawRoundRect(float, float, float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull char[], int, int, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull String, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull String, int, int, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull CharSequence, int, int, float, float, @NonNull android.graphics.Paint);
+    method public void drawTextOnPath(@NonNull char[], int, int, @NonNull android.graphics.Path, float, float, @NonNull android.graphics.Paint);
+    method public void drawTextOnPath(@NonNull String, @NonNull android.graphics.Path, float, float, @NonNull android.graphics.Paint);
+    method public void drawTextRun(@NonNull char[], int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawTextRun(@NonNull CharSequence, int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawTextRun(@NonNull android.graphics.text.MeasuredText, int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawVertices(@NonNull android.graphics.Canvas.VertexMode, int, @NonNull float[], int, @Nullable float[], int, @Nullable int[], int, @Nullable short[], int, int, @NonNull android.graphics.Paint);
+    method public void enableZ();
+    method public boolean getClipBounds(@Nullable android.graphics.Rect);
+    method @NonNull public final android.graphics.Rect getClipBounds();
+    method public int getDensity();
+    method @Nullable public android.graphics.DrawFilter getDrawFilter();
+    method public int getHeight();
+    method @Deprecated public void getMatrix(@NonNull android.graphics.Matrix);
+    method @Deprecated @NonNull public final android.graphics.Matrix getMatrix();
+    method public int getMaximumBitmapHeight();
+    method public int getMaximumBitmapWidth();
+    method public int getSaveCount();
+    method public int getWidth();
+    method public boolean isHardwareAccelerated();
+    method public boolean isOpaque();
+    method @Deprecated public boolean quickReject(@NonNull android.graphics.RectF, @NonNull android.graphics.Canvas.EdgeType);
+    method public boolean quickReject(@NonNull android.graphics.RectF);
+    method @Deprecated public boolean quickReject(@NonNull android.graphics.Path, @NonNull android.graphics.Canvas.EdgeType);
+    method public boolean quickReject(@NonNull android.graphics.Path);
+    method @Deprecated public boolean quickReject(float, float, float, float, @NonNull android.graphics.Canvas.EdgeType);
+    method public boolean quickReject(float, float, float, float);
+    method public void restore();
+    method public void restoreToCount(int);
+    method public void rotate(float);
+    method public final void rotate(float, float, float);
+    method public int save();
+    method @Deprecated public int saveLayer(@Nullable android.graphics.RectF, @Nullable android.graphics.Paint, int);
+    method public int saveLayer(@Nullable android.graphics.RectF, @Nullable android.graphics.Paint);
+    method @Deprecated public int saveLayer(float, float, float, float, @Nullable android.graphics.Paint, int);
+    method public int saveLayer(float, float, float, float, @Nullable android.graphics.Paint);
+    method @Deprecated public int saveLayerAlpha(@Nullable android.graphics.RectF, int, int);
+    method public int saveLayerAlpha(@Nullable android.graphics.RectF, int);
+    method @Deprecated public int saveLayerAlpha(float, float, float, float, int, int);
+    method public int saveLayerAlpha(float, float, float, float, int);
+    method public void scale(float, float);
+    method public final void scale(float, float, float, float);
+    method public void setBitmap(@Nullable android.graphics.Bitmap);
+    method public void setDensity(int);
+    method public void setDrawFilter(@Nullable android.graphics.DrawFilter);
+    method public void setMatrix(@Nullable android.graphics.Matrix);
+    method public void skew(float, float);
+    method public void translate(float, float);
+    field public static final int ALL_SAVE_FLAG = 31; // 0x1f
+  }
+
+  @Deprecated public enum Canvas.EdgeType {
+    enum_constant @Deprecated public static final android.graphics.Canvas.EdgeType AA;
+    enum_constant @Deprecated public static final android.graphics.Canvas.EdgeType BW;
+  }
+
+  public enum Canvas.VertexMode {
+    enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLES;
+    enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_FAN;
+    enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_STRIP;
+  }
+
+  @AnyThread public class Color {
+    ctor public Color();
+    method @ColorInt public static int HSVToColor(@Size(3) float[]);
+    method @ColorInt public static int HSVToColor(@IntRange(from=0, to=255) int, @Size(3) float[]);
+    method public static void RGBToHSV(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @Size(3) float[]);
+    method public float alpha();
+    method public static float alpha(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int alpha(int);
+    method @ColorInt public static int argb(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int);
+    method @ColorInt public static int argb(float, float, float, float);
+    method public float blue();
+    method public static float blue(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int blue(int);
+    method @NonNull public static android.graphics.ColorSpace colorSpace(@ColorLong long);
+    method public static void colorToHSV(@ColorInt int, @Size(3) float[]);
+    method @NonNull public android.graphics.Color convert(@NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(@ColorInt int, @NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(@ColorLong long, @NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(float, float, float, float, @NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(@ColorLong long, @NonNull android.graphics.ColorSpace.Connector);
+    method @ColorLong public static long convert(float, float, float, float, @NonNull android.graphics.ColorSpace.Connector);
+    method @NonNull public android.graphics.ColorSpace getColorSpace();
+    method public float getComponent(@IntRange(from=0, to=4) int);
+    method @IntRange(from=4, to=5) public int getComponentCount();
+    method @NonNull @Size(min=4, max=5) public float[] getComponents();
+    method @NonNull @Size(min=4) public float[] getComponents(@Nullable @Size(min=4) float[]);
+    method public android.graphics.ColorSpace.Model getModel();
+    method public float green();
+    method public static float green(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int green(int);
+    method public static boolean isInColorSpace(@ColorLong long, @NonNull android.graphics.ColorSpace);
+    method public boolean isSrgb();
+    method public static boolean isSrgb(@ColorLong long);
+    method public boolean isWideGamut();
+    method public static boolean isWideGamut(@ColorLong long);
+    method public float luminance();
+    method public static float luminance(@ColorLong long);
+    method public static float luminance(@ColorInt int);
+    method @ColorLong public long pack();
+    method @ColorLong public static long pack(@ColorInt int);
+    method @ColorLong public static long pack(float, float, float);
+    method @ColorLong public static long pack(float, float, float, float);
+    method @ColorLong public static long pack(float, float, float, float, @NonNull android.graphics.ColorSpace);
+    method @ColorInt public static int parseColor(@Size(min=1) String);
+    method public float red();
+    method public static float red(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int red(int);
+    method @ColorInt public static int rgb(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int);
+    method @ColorInt public static int rgb(float, float, float);
+    method @ColorInt public int toArgb();
+    method @ColorInt public static int toArgb(@ColorLong long);
+    method @NonNull public static android.graphics.Color valueOf(@ColorInt int);
+    method @NonNull public static android.graphics.Color valueOf(@ColorLong long);
+    method @NonNull public static android.graphics.Color valueOf(float, float, float);
+    method @NonNull public static android.graphics.Color valueOf(float, float, float, float);
+    method @NonNull public static android.graphics.Color valueOf(float, float, float, float, @NonNull android.graphics.ColorSpace);
+    method @NonNull public static android.graphics.Color valueOf(@NonNull @Size(min=4, max=5) float[], @NonNull android.graphics.ColorSpace);
+    field @ColorInt public static final int BLACK = -16777216; // 0xff000000
+    field @ColorInt public static final int BLUE = -16776961; // 0xff0000ff
+    field @ColorInt public static final int CYAN = -16711681; // 0xff00ffff
+    field @ColorInt public static final int DKGRAY = -12303292; // 0xff444444
+    field @ColorInt public static final int GRAY = -7829368; // 0xff888888
+    field @ColorInt public static final int GREEN = -16711936; // 0xff00ff00
+    field @ColorInt public static final int LTGRAY = -3355444; // 0xffcccccc
+    field @ColorInt public static final int MAGENTA = -65281; // 0xffff00ff
+    field @ColorInt public static final int RED = -65536; // 0xffff0000
+    field @ColorInt public static final int TRANSPARENT = 0; // 0x0
+    field @ColorInt public static final int WHITE = -1; // 0xffffffff
+    field @ColorInt public static final int YELLOW = -256; // 0xffffff00
+  }
+
+  public class ColorFilter {
+    ctor @Deprecated public ColorFilter();
+  }
+
+  public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
+    ctor public ColorMatrixColorFilter(@NonNull android.graphics.ColorMatrix);
+    ctor public ColorMatrixColorFilter(@NonNull float[]);
+    method public void getColorMatrix(android.graphics.ColorMatrix);
+  }
+
+  @AnyThread public abstract class ColorSpace {
+    method @NonNull public static android.graphics.ColorSpace adapt(@NonNull android.graphics.ColorSpace, @NonNull @Size(min=2, max=3) float[]);
+    method @NonNull public static android.graphics.ColorSpace adapt(@NonNull android.graphics.ColorSpace, @NonNull @Size(min=2, max=3) float[], @NonNull android.graphics.ColorSpace.Adaptation);
+    method @NonNull @Size(3) public static float[] cctToXyz(@IntRange(from=1) int);
+    method @NonNull @Size(9) public static float[] chromaticAdaptation(@NonNull android.graphics.ColorSpace.Adaptation, @NonNull @Size(min=2, max=3) float[], @NonNull @Size(min=2, max=3) float[]);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace.RenderIntent);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace.RenderIntent);
+    method @NonNull @Size(min=3) public float[] fromXyz(float, float, float);
+    method @NonNull @Size(min=3) public abstract float[] fromXyz(@NonNull @Size(min=3) float[]);
+    method @NonNull public static android.graphics.ColorSpace get(@NonNull android.graphics.ColorSpace.Named);
+    method @IntRange(from=1, to=4) public int getComponentCount();
+    method @IntRange(from=android.graphics.ColorSpace.MIN_ID, to=android.graphics.ColorSpace.MAX_ID) public int getId();
+    method public abstract float getMaxValue(@IntRange(from=0, to=3) int);
+    method public abstract float getMinValue(@IntRange(from=0, to=3) int);
+    method @NonNull public android.graphics.ColorSpace.Model getModel();
+    method @NonNull public String getName();
+    method public boolean isSrgb();
+    method public abstract boolean isWideGamut();
+    method @Nullable public static android.graphics.ColorSpace match(@NonNull @Size(9) float[], @NonNull android.graphics.ColorSpace.Rgb.TransferParameters);
+    method @NonNull @Size(3) public float[] toXyz(float, float, float);
+    method @NonNull @Size(min=3) public abstract float[] toXyz(@NonNull @Size(min=3) float[]);
+    field public static final float[] ILLUMINANT_A;
+    field public static final float[] ILLUMINANT_B;
+    field public static final float[] ILLUMINANT_C;
+    field public static final float[] ILLUMINANT_D50;
+    field public static final float[] ILLUMINANT_D55;
+    field public static final float[] ILLUMINANT_D60;
+    field public static final float[] ILLUMINANT_D65;
+    field public static final float[] ILLUMINANT_D75;
+    field public static final float[] ILLUMINANT_E;
+    field public static final int MAX_ID = 63; // 0x3f
+    field public static final int MIN_ID = -1; // 0xffffffff
+  }
+
+  public enum ColorSpace.Adaptation {
+    enum_constant public static final android.graphics.ColorSpace.Adaptation BRADFORD;
+    enum_constant public static final android.graphics.ColorSpace.Adaptation CIECAT02;
+    enum_constant public static final android.graphics.ColorSpace.Adaptation VON_KRIES;
+  }
+
+  @AnyThread public static class ColorSpace.Connector {
+    method @NonNull public android.graphics.ColorSpace getDestination();
+    method public android.graphics.ColorSpace.RenderIntent getRenderIntent();
+    method @NonNull public android.graphics.ColorSpace getSource();
+    method @NonNull @Size(3) public float[] transform(float, float, float);
+    method @NonNull @Size(min=3) public float[] transform(@NonNull @Size(min=3) float[]);
+  }
+
+  public enum ColorSpace.Model {
+    method @IntRange(from=1, to=4) public int getComponentCount();
+    enum_constant public static final android.graphics.ColorSpace.Model CMYK;
+    enum_constant public static final android.graphics.ColorSpace.Model LAB;
+    enum_constant public static final android.graphics.ColorSpace.Model RGB;
+    enum_constant public static final android.graphics.ColorSpace.Model XYZ;
+  }
+
+  public enum ColorSpace.Named {
+    enum_constant public static final android.graphics.ColorSpace.Named ACES;
+    enum_constant public static final android.graphics.ColorSpace.Named ACESCG;
+    enum_constant public static final android.graphics.ColorSpace.Named ADOBE_RGB;
+    enum_constant public static final android.graphics.ColorSpace.Named BT2020;
+    enum_constant public static final android.graphics.ColorSpace.Named BT709;
+    enum_constant public static final android.graphics.ColorSpace.Named CIE_LAB;
+    enum_constant public static final android.graphics.ColorSpace.Named CIE_XYZ;
+    enum_constant public static final android.graphics.ColorSpace.Named DCI_P3;
+    enum_constant public static final android.graphics.ColorSpace.Named DISPLAY_P3;
+    enum_constant public static final android.graphics.ColorSpace.Named EXTENDED_SRGB;
+    enum_constant public static final android.graphics.ColorSpace.Named LINEAR_EXTENDED_SRGB;
+    enum_constant public static final android.graphics.ColorSpace.Named LINEAR_SRGB;
+    enum_constant public static final android.graphics.ColorSpace.Named NTSC_1953;
+    enum_constant public static final android.graphics.ColorSpace.Named PRO_PHOTO_RGB;
+    enum_constant public static final android.graphics.ColorSpace.Named SMPTE_C;
+    enum_constant public static final android.graphics.ColorSpace.Named SRGB;
+  }
+
+  public enum ColorSpace.RenderIntent {
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent ABSOLUTE;
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent PERCEPTUAL;
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent RELATIVE;
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent SATURATION;
+  }
+
+  @AnyThread public static class ColorSpace.Rgb extends android.graphics.ColorSpace {
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(9) float[], @NonNull java.util.function.DoubleUnaryOperator, @NonNull java.util.function.DoubleUnaryOperator);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(min=6, max=9) float[], @NonNull @Size(min=2, max=3) float[], @NonNull java.util.function.DoubleUnaryOperator, @NonNull java.util.function.DoubleUnaryOperator, float, float);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(9) float[], @NonNull android.graphics.ColorSpace.Rgb.TransferParameters);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(min=6, max=9) float[], @NonNull @Size(min=2, max=3) float[], @NonNull android.graphics.ColorSpace.Rgb.TransferParameters);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(9) float[], double);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(min=6, max=9) float[], @NonNull @Size(min=2, max=3) float[], double);
+    method @NonNull @Size(3) public float[] fromLinear(float, float, float);
+    method @NonNull @Size(min=3) public float[] fromLinear(@NonNull @Size(min=3) float[]);
+    method @NonNull @Size(min=3) public float[] fromXyz(@NonNull @Size(min=3) float[]);
+    method @NonNull public java.util.function.DoubleUnaryOperator getEotf();
+    method @NonNull @Size(min=9) public float[] getInverseTransform(@NonNull @Size(min=9) float[]);
+    method @NonNull @Size(9) public float[] getInverseTransform();
+    method public float getMaxValue(int);
+    method public float getMinValue(int);
+    method @NonNull public java.util.function.DoubleUnaryOperator getOetf();
+    method @NonNull @Size(min=6) public float[] getPrimaries(@NonNull @Size(min=6) float[]);
+    method @NonNull @Size(6) public float[] getPrimaries();
+    method @Nullable public android.graphics.ColorSpace.Rgb.TransferParameters getTransferParameters();
+    method @NonNull @Size(min=9) public float[] getTransform(@NonNull @Size(min=9) float[]);
+    method @NonNull @Size(9) public float[] getTransform();
+    method @NonNull @Size(min=2) public float[] getWhitePoint(@NonNull @Size(min=2) float[]);
+    method @NonNull @Size(2) public float[] getWhitePoint();
+    method public boolean isWideGamut();
+    method @NonNull @Size(3) public float[] toLinear(float, float, float);
+    method @NonNull @Size(min=3) public float[] toLinear(@NonNull @Size(min=3) float[]);
+    method @NonNull @Size(min=3) public float[] toXyz(@NonNull @Size(min=3) float[]);
+  }
+
+  public static class ColorSpace.Rgb.TransferParameters {
+    ctor public ColorSpace.Rgb.TransferParameters(double, double, double, double, double);
+    ctor public ColorSpace.Rgb.TransferParameters(double, double, double, double, double, double, double);
+    field public final double a;
+    field public final double b;
+    field public final double c;
+    field public final double d;
+    field public final double e;
+    field public final double f;
+    field public final double g;
+  }
+
+  public class ComposePathEffect extends android.graphics.PathEffect {
+    ctor public ComposePathEffect(android.graphics.PathEffect, android.graphics.PathEffect);
+  }
+
+  public class ComposeShader extends android.graphics.Shader {
+    ctor @Deprecated public ComposeShader(@NonNull android.graphics.Shader, @NonNull android.graphics.Shader, @NonNull android.graphics.Xfermode);
+    ctor public ComposeShader(@NonNull android.graphics.Shader, @NonNull android.graphics.Shader, @NonNull android.graphics.PorterDuff.Mode);
+    ctor public ComposeShader(@NonNull android.graphics.Shader, @NonNull android.graphics.Shader, @NonNull android.graphics.BlendMode);
+  }
+
+  public class CornerPathEffect extends android.graphics.PathEffect {
+    ctor public CornerPathEffect(float);
+  }
+
+  public class DashPathEffect extends android.graphics.PathEffect {
+    ctor public DashPathEffect(float[], float);
+  }
+
+  public class DiscretePathEffect extends android.graphics.PathEffect {
+    ctor public DiscretePathEffect(float, float);
+  }
+
+  public class DrawFilter {
+    ctor public DrawFilter();
+  }
+
+  public class EmbossMaskFilter extends android.graphics.MaskFilter {
+    ctor @Deprecated public EmbossMaskFilter(float[], float, float, float);
+  }
+
+  public class HardwareRenderer {
+    ctor public HardwareRenderer();
+    method public void clearContent();
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest createRenderRequest();
+    method public void destroy();
+    method public boolean isOpaque();
+    method public void notifyFramePending();
+    method public void setContentRoot(@Nullable android.graphics.RenderNode);
+    method public void setLightSourceAlpha(@FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
+    method public void setLightSourceGeometry(float, float, float, float);
+    method public void setName(@NonNull String);
+    method public void setOpaque(boolean);
+    method public void setSurface(@Nullable android.view.Surface);
+    method public void start();
+    method public void stop();
+    field public static final int SYNC_CONTEXT_IS_STOPPED = 4; // 0x4
+    field public static final int SYNC_FRAME_DROPPED = 8; // 0x8
+    field public static final int SYNC_LOST_SURFACE_REWARD_IF_FOUND = 2; // 0x2
+    field public static final int SYNC_OK = 0; // 0x0
+    field public static final int SYNC_REDRAW_REQUESTED = 1; // 0x1
+  }
+
+  public final class HardwareRenderer.FrameRenderRequest {
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setFrameCommitCallback(@NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setVsyncTime(long);
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setWaitForPresent(boolean);
+    method public int syncAndDraw();
+  }
+
+  public final class ImageDecoder implements java.lang.AutoCloseable {
+    method public void close();
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull android.content.res.Resources, int);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull android.content.ContentResolver, @NonNull android.net.Uri);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull android.content.res.AssetManager, @NonNull String);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull byte[], int, int) throws java.lang.ArrayIndexOutOfBoundsException;
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull byte[]);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull java.nio.ByteBuffer);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull java.io.File);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull java.util.concurrent.Callable<android.content.res.AssetFileDescriptor>);
+    method @NonNull @WorkerThread public static android.graphics.Bitmap decodeBitmap(@NonNull android.graphics.ImageDecoder.Source, @NonNull android.graphics.ImageDecoder.OnHeaderDecodedListener) throws java.io.IOException;
+    method @NonNull @WorkerThread public static android.graphics.Bitmap decodeBitmap(@NonNull android.graphics.ImageDecoder.Source) throws java.io.IOException;
+    method @NonNull @WorkerThread public static android.graphics.drawable.Drawable decodeDrawable(@NonNull android.graphics.ImageDecoder.Source, @NonNull android.graphics.ImageDecoder.OnHeaderDecodedListener) throws java.io.IOException;
+    method @NonNull @WorkerThread public static android.graphics.drawable.Drawable decodeDrawable(@NonNull android.graphics.ImageDecoder.Source) throws java.io.IOException;
+    method public int getAllocator();
+    method @Nullable public android.graphics.Rect getCrop();
+    method public int getMemorySizePolicy();
+    method @Nullable public android.graphics.ImageDecoder.OnPartialImageListener getOnPartialImageListener();
+    method @Nullable public android.graphics.PostProcessor getPostProcessor();
+    method public boolean isDecodeAsAlphaMaskEnabled();
+    method public static boolean isMimeTypeSupported(@NonNull String);
+    method public boolean isMutableRequired();
+    method public boolean isUnpremultipliedRequired();
+    method public void setAllocator(int);
+    method public void setCrop(@Nullable android.graphics.Rect);
+    method public void setDecodeAsAlphaMaskEnabled(boolean);
+    method public void setMemorySizePolicy(int);
+    method public void setMutableRequired(boolean);
+    method public void setOnPartialImageListener(@Nullable android.graphics.ImageDecoder.OnPartialImageListener);
+    method public void setPostProcessor(@Nullable android.graphics.PostProcessor);
+    method public void setTargetColorSpace(android.graphics.ColorSpace);
+    method public void setTargetSampleSize(@IntRange(from=1) int);
+    method public void setTargetSize(@IntRange(from=1) @Px int, @IntRange(from=1) @Px int);
+    method public void setUnpremultipliedRequired(boolean);
+    field public static final int ALLOCATOR_DEFAULT = 0; // 0x0
+    field public static final int ALLOCATOR_HARDWARE = 3; // 0x3
+    field public static final int ALLOCATOR_SHARED_MEMORY = 2; // 0x2
+    field public static final int ALLOCATOR_SOFTWARE = 1; // 0x1
+    field public static final int MEMORY_POLICY_DEFAULT = 1; // 0x1
+    field public static final int MEMORY_POLICY_LOW_RAM = 0; // 0x0
+  }
+
+  public static final class ImageDecoder.DecodeException extends java.io.IOException {
+    method public int getError();
+    method @NonNull public android.graphics.ImageDecoder.Source getSource();
+    field public static final int SOURCE_EXCEPTION = 1; // 0x1
+    field public static final int SOURCE_INCOMPLETE = 2; // 0x2
+    field public static final int SOURCE_MALFORMED_DATA = 3; // 0x3
+  }
+
+  public static class ImageDecoder.ImageInfo {
+    method @Nullable public android.graphics.ColorSpace getColorSpace();
+    method @NonNull public String getMimeType();
+    method @NonNull public android.util.Size getSize();
+    method public boolean isAnimated();
+  }
+
+  public static interface ImageDecoder.OnHeaderDecodedListener {
+    method public void onHeaderDecoded(@NonNull android.graphics.ImageDecoder, @NonNull android.graphics.ImageDecoder.ImageInfo, @NonNull android.graphics.ImageDecoder.Source);
+  }
+
+  public static interface ImageDecoder.OnPartialImageListener {
+    method public boolean onPartialImage(@NonNull android.graphics.ImageDecoder.DecodeException);
+  }
+
+  public abstract static class ImageDecoder.Source {
+  }
+
+  public class ImageFormat {
+    ctor public ImageFormat();
+    method public static int getBitsPerPixel(int);
+    field public static final int DEPTH16 = 1144402265; // 0x44363159
+    field public static final int DEPTH_JPEG = 1768253795; // 0x69656963
+    field public static final int DEPTH_POINT_CLOUD = 257; // 0x101
+    field public static final int FLEX_RGBA_8888 = 42; // 0x2a
+    field public static final int FLEX_RGB_888 = 41; // 0x29
+    field public static final int HEIC = 1212500294; // 0x48454946
+    field public static final int JPEG = 256; // 0x100
+    field public static final int NV16 = 16; // 0x10
+    field public static final int NV21 = 17; // 0x11
+    field public static final int PRIVATE = 34; // 0x22
+    field public static final int RAW10 = 37; // 0x25
+    field public static final int RAW12 = 38; // 0x26
+    field public static final int RAW_PRIVATE = 36; // 0x24
+    field public static final int RAW_SENSOR = 32; // 0x20
+    field public static final int RGB_565 = 4; // 0x4
+    field public static final int UNKNOWN = 0; // 0x0
+    field public static final int Y8 = 538982489; // 0x20203859
+    field public static final int YCBCR_P010 = 54; // 0x36
+    field public static final int YUV_420_888 = 35; // 0x23
+    field public static final int YUV_422_888 = 39; // 0x27
+    field public static final int YUV_444_888 = 40; // 0x28
+    field public static final int YUY2 = 20; // 0x14
+    field public static final int YV12 = 842094169; // 0x32315659
+  }
+
+  public final class Insets implements android.os.Parcelable {
+    method @NonNull public static android.graphics.Insets add(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method public int describeContents();
+    method @NonNull public static android.graphics.Insets max(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method @NonNull public static android.graphics.Insets min(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method @NonNull public static android.graphics.Insets of(int, int, int, int);
+    method @NonNull public static android.graphics.Insets of(@Nullable android.graphics.Rect);
+    method @NonNull public static android.graphics.Insets subtract(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Insets> CREATOR;
+    field @NonNull public static final android.graphics.Insets NONE;
+    field public final int bottom;
+    field public final int left;
+    field public final int right;
+    field public final int top;
+  }
+
+  public class Interpolator {
+    ctor public Interpolator(int);
+    ctor public Interpolator(int, int);
+    method public final int getKeyFrameCount();
+    method public final int getValueCount();
+    method public void reset(int);
+    method public void reset(int, int);
+    method public void setKeyFrame(int, int, float[]);
+    method public void setKeyFrame(int, int, float[], float[]);
+    method public void setRepeatMirror(float, boolean);
+    method public android.graphics.Interpolator.Result timeToValues(float[]);
+    method public android.graphics.Interpolator.Result timeToValues(int, float[]);
+  }
+
+  public enum Interpolator.Result {
+    enum_constant public static final android.graphics.Interpolator.Result FREEZE_END;
+    enum_constant public static final android.graphics.Interpolator.Result FREEZE_START;
+    enum_constant public static final android.graphics.Interpolator.Result NORMAL;
+  }
+
+  public class LightingColorFilter extends android.graphics.ColorFilter {
+    ctor public LightingColorFilter(@ColorInt int, @ColorInt int);
+    method @ColorInt public int getColorAdd();
+    method @ColorInt public int getColorMultiply();
+  }
+
+  public class LinearGradient extends android.graphics.Shader {
+    ctor public LinearGradient(float, float, float, float, @ColorInt @NonNull int[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public LinearGradient(float, float, float, float, @ColorLong @NonNull long[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public LinearGradient(float, float, float, float, @ColorInt int, @ColorInt int, @NonNull android.graphics.Shader.TileMode);
+    ctor public LinearGradient(float, float, float, float, @ColorLong long, @ColorLong long, @NonNull android.graphics.Shader.TileMode);
+  }
+
+  public class MaskFilter {
+    ctor public MaskFilter();
+  }
+
+  public class Matrix {
+    ctor public Matrix();
+    ctor public Matrix(android.graphics.Matrix);
+    method public final void dump(@NonNull java.io.PrintWriter);
+    method public void getValues(float[]);
+    method public boolean invert(android.graphics.Matrix);
+    method public boolean isAffine();
+    method public boolean isIdentity();
+    method public void mapPoints(float[], int, float[], int, int);
+    method public void mapPoints(float[], float[]);
+    method public void mapPoints(float[]);
+    method public float mapRadius(float);
+    method public boolean mapRect(android.graphics.RectF, android.graphics.RectF);
+    method public boolean mapRect(android.graphics.RectF);
+    method public void mapVectors(float[], int, float[], int, int);
+    method public void mapVectors(float[], float[]);
+    method public void mapVectors(float[]);
+    method public boolean postConcat(android.graphics.Matrix);
+    method public boolean postRotate(float, float, float);
+    method public boolean postRotate(float);
+    method public boolean postScale(float, float, float, float);
+    method public boolean postScale(float, float);
+    method public boolean postSkew(float, float, float, float);
+    method public boolean postSkew(float, float);
+    method public boolean postTranslate(float, float);
+    method public boolean preConcat(android.graphics.Matrix);
+    method public boolean preRotate(float, float, float);
+    method public boolean preRotate(float);
+    method public boolean preScale(float, float, float, float);
+    method public boolean preScale(float, float);
+    method public boolean preSkew(float, float, float, float);
+    method public boolean preSkew(float, float);
+    method public boolean preTranslate(float, float);
+    method public boolean rectStaysRect();
+    method public void reset();
+    method public void set(android.graphics.Matrix);
+    method public boolean setConcat(android.graphics.Matrix, android.graphics.Matrix);
+    method public boolean setPolyToPoly(float[], int, float[], int, int);
+    method public boolean setRectToRect(android.graphics.RectF, android.graphics.RectF, android.graphics.Matrix.ScaleToFit);
+    method public void setRotate(float, float, float);
+    method public void setRotate(float);
+    method public void setScale(float, float, float, float);
+    method public void setScale(float, float);
+    method public void setSinCos(float, float, float, float);
+    method public void setSinCos(float, float);
+    method public void setSkew(float, float, float, float);
+    method public void setSkew(float, float);
+    method public void setTranslate(float, float);
+    method public void setValues(float[]);
+    method public String toShortString();
+    field @NonNull public static final android.graphics.Matrix IDENTITY_MATRIX;
+    field public static final int MPERSP_0 = 6; // 0x6
+    field public static final int MPERSP_1 = 7; // 0x7
+    field public static final int MPERSP_2 = 8; // 0x8
+    field public static final int MSCALE_X = 0; // 0x0
+    field public static final int MSCALE_Y = 4; // 0x4
+    field public static final int MSKEW_X = 1; // 0x1
+    field public static final int MSKEW_Y = 3; // 0x3
+    field public static final int MTRANS_X = 2; // 0x2
+    field public static final int MTRANS_Y = 5; // 0x5
+  }
+
+  public enum Matrix.ScaleToFit {
+    enum_constant public static final android.graphics.Matrix.ScaleToFit CENTER;
+    enum_constant public static final android.graphics.Matrix.ScaleToFit END;
+    enum_constant public static final android.graphics.Matrix.ScaleToFit FILL;
+    enum_constant public static final android.graphics.Matrix.ScaleToFit START;
+  }
+
+  @Deprecated public class Movie {
+    method @Deprecated public static android.graphics.Movie decodeByteArray(byte[], int, int);
+    method @Deprecated public static android.graphics.Movie decodeFile(String);
+    method @Deprecated public static android.graphics.Movie decodeStream(java.io.InputStream);
+    method @Deprecated public void draw(android.graphics.Canvas, float, float, android.graphics.Paint);
+    method @Deprecated public void draw(android.graphics.Canvas, float, float);
+    method @Deprecated public int duration();
+    method @Deprecated public int height();
+    method @Deprecated public boolean isOpaque();
+    method @Deprecated public boolean setTime(int);
+    method @Deprecated public int width();
+  }
+
+  public class NinePatch {
+    ctor public NinePatch(android.graphics.Bitmap, byte[]);
+    ctor public NinePatch(android.graphics.Bitmap, byte[], String);
+    method public void draw(android.graphics.Canvas, android.graphics.RectF);
+    method public void draw(android.graphics.Canvas, android.graphics.Rect);
+    method public void draw(android.graphics.Canvas, android.graphics.Rect, android.graphics.Paint);
+    method public android.graphics.Bitmap getBitmap();
+    method public int getDensity();
+    method public int getHeight();
+    method public String getName();
+    method public android.graphics.Paint getPaint();
+    method public final android.graphics.Region getTransparentRegion(android.graphics.Rect);
+    method public int getWidth();
+    method public final boolean hasAlpha();
+    method public static boolean isNinePatchChunk(byte[]);
+    method public void setPaint(android.graphics.Paint);
+  }
+
+  public final class Outline {
+    ctor public Outline();
+    ctor public Outline(@NonNull android.graphics.Outline);
+    method public boolean canClip();
+    method public float getAlpha();
+    method public float getRadius();
+    method public boolean getRect(@NonNull android.graphics.Rect);
+    method public boolean isEmpty();
+    method public void offset(int, int);
+    method public void set(@NonNull android.graphics.Outline);
+    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
+    method @Deprecated public void setConvexPath(@NonNull android.graphics.Path);
+    method public void setEmpty();
+    method public void setOval(int, int, int, int);
+    method public void setOval(@NonNull android.graphics.Rect);
+    method public void setPath(@NonNull android.graphics.Path);
+    method public void setRect(int, int, int, int);
+    method public void setRect(@NonNull android.graphics.Rect);
+    method public void setRoundRect(int, int, int, int, float);
+    method public void setRoundRect(@NonNull android.graphics.Rect, float);
+  }
+
+  public class Paint {
+    ctor public Paint();
+    ctor public Paint(int);
+    ctor public Paint(android.graphics.Paint);
+    method public float ascent();
+    method public int breakText(char[], int, int, float, float[]);
+    method public int breakText(CharSequence, int, int, boolean, float, float[]);
+    method public int breakText(String, boolean, float, float[]);
+    method public void clearShadowLayer();
+    method public float descent();
+    method public boolean equalsForTextMeasurement(@NonNull android.graphics.Paint);
+    method public int getAlpha();
+    method @Nullable public android.graphics.BlendMode getBlendMode();
+    method @ColorInt public int getColor();
+    method public android.graphics.ColorFilter getColorFilter();
+    method @ColorLong public long getColorLong();
+    method public int getEndHyphenEdit();
+    method public boolean getFillPath(android.graphics.Path, android.graphics.Path);
+    method public int getFlags();
+    method public String getFontFeatureSettings();
+    method public float getFontMetrics(android.graphics.Paint.FontMetrics);
+    method public android.graphics.Paint.FontMetrics getFontMetrics();
+    method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
+    method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
+    method public float getFontSpacing();
+    method public String getFontVariationSettings();
+    method public int getHinting();
+    method public float getLetterSpacing();
+    method public android.graphics.MaskFilter getMaskFilter();
+    method public int getOffsetForAdvance(char[], int, int, int, int, boolean, float);
+    method public int getOffsetForAdvance(CharSequence, int, int, int, int, boolean, float);
+    method public android.graphics.PathEffect getPathEffect();
+    method public float getRunAdvance(char[], int, int, int, int, boolean, int);
+    method public float getRunAdvance(CharSequence, int, int, int, int, boolean, int);
+    method public android.graphics.Shader getShader();
+    method @ColorInt public int getShadowLayerColor();
+    method @ColorLong public long getShadowLayerColorLong();
+    method public float getShadowLayerDx();
+    method public float getShadowLayerDy();
+    method public float getShadowLayerRadius();
+    method public int getStartHyphenEdit();
+    method @Px public float getStrikeThruPosition();
+    method @Px public float getStrikeThruThickness();
+    method public android.graphics.Paint.Cap getStrokeCap();
+    method public android.graphics.Paint.Join getStrokeJoin();
+    method public float getStrokeMiter();
+    method public float getStrokeWidth();
+    method public android.graphics.Paint.Style getStyle();
+    method public android.graphics.Paint.Align getTextAlign();
+    method public void getTextBounds(String, int, int, android.graphics.Rect);
+    method public void getTextBounds(@NonNull CharSequence, int, int, @NonNull android.graphics.Rect);
+    method public void getTextBounds(char[], int, int, android.graphics.Rect);
+    method @NonNull public java.util.Locale getTextLocale();
+    method @NonNull @Size(min=1) public android.os.LocaleList getTextLocales();
+    method public void getTextPath(char[], int, int, float, float, android.graphics.Path);
+    method public void getTextPath(String, int, int, float, float, android.graphics.Path);
+    method public float getTextRunAdvances(@NonNull char[], @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, boolean, @Nullable float[], @IntRange(from=0) int);
+    method public int getTextRunCursor(@NonNull char[], @IntRange(from=0) int, @IntRange(from=0) int, boolean, @IntRange(from=0) int, int);
+    method public int getTextRunCursor(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, boolean, @IntRange(from=0) int, int);
+    method public float getTextScaleX();
+    method public float getTextSize();
+    method public float getTextSkewX();
+    method public int getTextWidths(char[], int, int, float[]);
+    method public int getTextWidths(CharSequence, int, int, float[]);
+    method public int getTextWidths(String, int, int, float[]);
+    method public int getTextWidths(String, float[]);
+    method public android.graphics.Typeface getTypeface();
+    method @Px public float getUnderlinePosition();
+    method @Px public float getUnderlineThickness();
+    method @Px public float getWordSpacing();
+    method public android.graphics.Xfermode getXfermode();
+    method public boolean hasGlyph(String);
+    method public final boolean isAntiAlias();
+    method public final boolean isDither();
+    method public boolean isElegantTextHeight();
+    method public final boolean isFakeBoldText();
+    method public final boolean isFilterBitmap();
+    method public final boolean isLinearText();
+    method public final boolean isStrikeThruText();
+    method public final boolean isSubpixelText();
+    method public final boolean isUnderlineText();
+    method public float measureText(char[], int, int);
+    method public float measureText(String, int, int);
+    method public float measureText(String);
+    method public float measureText(CharSequence, int, int);
+    method public void reset();
+    method public void set(android.graphics.Paint);
+    method public void setARGB(int, int, int, int);
+    method public void setAlpha(int);
+    method public void setAntiAlias(boolean);
+    method public void setBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setColor(@ColorInt int);
+    method public void setColor(@ColorLong long);
+    method public android.graphics.ColorFilter setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setElegantTextHeight(boolean);
+    method public void setEndHyphenEdit(int);
+    method public void setFakeBoldText(boolean);
+    method public void setFilterBitmap(boolean);
+    method public void setFlags(int);
+    method public void setFontFeatureSettings(String);
+    method public boolean setFontVariationSettings(String);
+    method public void setHinting(int);
+    method public void setLetterSpacing(float);
+    method public void setLinearText(boolean);
+    method public android.graphics.MaskFilter setMaskFilter(android.graphics.MaskFilter);
+    method public android.graphics.PathEffect setPathEffect(android.graphics.PathEffect);
+    method public android.graphics.Shader setShader(android.graphics.Shader);
+    method public void setShadowLayer(float, float, float, @ColorInt int);
+    method public void setShadowLayer(float, float, float, @ColorLong long);
+    method public void setStartHyphenEdit(int);
+    method public void setStrikeThruText(boolean);
+    method public void setStrokeCap(android.graphics.Paint.Cap);
+    method public void setStrokeJoin(android.graphics.Paint.Join);
+    method public void setStrokeMiter(float);
+    method public void setStrokeWidth(float);
+    method public void setStyle(android.graphics.Paint.Style);
+    method public void setSubpixelText(boolean);
+    method public void setTextAlign(android.graphics.Paint.Align);
+    method public void setTextLocale(@NonNull java.util.Locale);
+    method public void setTextLocales(@NonNull @Size(min=1) android.os.LocaleList);
+    method public void setTextScaleX(float);
+    method public void setTextSize(float);
+    method public void setTextSkewX(float);
+    method public android.graphics.Typeface setTypeface(android.graphics.Typeface);
+    method public void setUnderlineText(boolean);
+    method public void setWordSpacing(@Px float);
+    method public android.graphics.Xfermode setXfermode(android.graphics.Xfermode);
+    field public static final int ANTI_ALIAS_FLAG = 1; // 0x1
+    field public static final int CURSOR_AFTER = 0; // 0x0
+    field public static final int CURSOR_AT = 4; // 0x4
+    field public static final int CURSOR_AT_OR_AFTER = 1; // 0x1
+    field public static final int CURSOR_AT_OR_BEFORE = 3; // 0x3
+    field public static final int CURSOR_BEFORE = 2; // 0x2
+    field public static final int DEV_KERN_TEXT_FLAG = 256; // 0x100
+    field public static final int DITHER_FLAG = 4; // 0x4
+    field public static final int EMBEDDED_BITMAP_TEXT_FLAG = 1024; // 0x400
+    field public static final int END_HYPHEN_EDIT_INSERT_ARMENIAN_HYPHEN = 3; // 0x3
+    field public static final int END_HYPHEN_EDIT_INSERT_HYPHEN = 2; // 0x2
+    field public static final int END_HYPHEN_EDIT_INSERT_MAQAF = 4; // 0x4
+    field public static final int END_HYPHEN_EDIT_INSERT_UCAS_HYPHEN = 5; // 0x5
+    field public static final int END_HYPHEN_EDIT_INSERT_ZWJ_AND_HYPHEN = 6; // 0x6
+    field public static final int END_HYPHEN_EDIT_NO_EDIT = 0; // 0x0
+    field public static final int END_HYPHEN_EDIT_REPLACE_WITH_HYPHEN = 1; // 0x1
+    field public static final int FAKE_BOLD_TEXT_FLAG = 32; // 0x20
+    field public static final int FILTER_BITMAP_FLAG = 2; // 0x2
+    field public static final int HINTING_OFF = 0; // 0x0
+    field public static final int HINTING_ON = 1; // 0x1
+    field public static final int LINEAR_TEXT_FLAG = 64; // 0x40
+    field public static final int START_HYPHEN_EDIT_INSERT_HYPHEN = 1; // 0x1
+    field public static final int START_HYPHEN_EDIT_INSERT_ZWJ = 2; // 0x2
+    field public static final int START_HYPHEN_EDIT_NO_EDIT = 0; // 0x0
+    field public static final int STRIKE_THRU_TEXT_FLAG = 16; // 0x10
+    field public static final int SUBPIXEL_TEXT_FLAG = 128; // 0x80
+    field public static final int UNDERLINE_TEXT_FLAG = 8; // 0x8
+  }
+
+  public enum Paint.Align {
+    enum_constant public static final android.graphics.Paint.Align CENTER;
+    enum_constant public static final android.graphics.Paint.Align LEFT;
+    enum_constant public static final android.graphics.Paint.Align RIGHT;
+  }
+
+  public enum Paint.Cap {
+    enum_constant public static final android.graphics.Paint.Cap BUTT;
+    enum_constant public static final android.graphics.Paint.Cap ROUND;
+    enum_constant public static final android.graphics.Paint.Cap SQUARE;
+  }
+
+  public static class Paint.FontMetrics {
+    ctor public Paint.FontMetrics();
+    field public float ascent;
+    field public float bottom;
+    field public float descent;
+    field public float leading;
+    field public float top;
+  }
+
+  public static class Paint.FontMetricsInt {
+    ctor public Paint.FontMetricsInt();
+    field public int ascent;
+    field public int bottom;
+    field public int descent;
+    field public int leading;
+    field public int top;
+  }
+
+  public enum Paint.Join {
+    enum_constant public static final android.graphics.Paint.Join BEVEL;
+    enum_constant public static final android.graphics.Paint.Join MITER;
+    enum_constant public static final android.graphics.Paint.Join ROUND;
+  }
+
+  public enum Paint.Style {
+    enum_constant public static final android.graphics.Paint.Style FILL;
+    enum_constant public static final android.graphics.Paint.Style FILL_AND_STROKE;
+    enum_constant public static final android.graphics.Paint.Style STROKE;
+  }
+
+  public class PaintFlagsDrawFilter extends android.graphics.DrawFilter {
+    ctor public PaintFlagsDrawFilter(int, int);
+  }
+
+  public final class ParcelableColorSpace implements android.os.Parcelable {
+    ctor public ParcelableColorSpace(@NonNull android.graphics.ColorSpace);
+    method public int describeContents();
+    method @NonNull public android.graphics.ColorSpace getColorSpace();
+    method public static boolean isParcelable(@NonNull android.graphics.ColorSpace);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.ParcelableColorSpace> CREATOR;
+  }
+
+  public class Path {
+    ctor public Path();
+    ctor public Path(@Nullable android.graphics.Path);
+    method public void addArc(@NonNull android.graphics.RectF, float, float);
+    method public void addArc(float, float, float, float, float, float);
+    method public void addCircle(float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addOval(@NonNull android.graphics.RectF, @NonNull android.graphics.Path.Direction);
+    method public void addOval(float, float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addPath(@NonNull android.graphics.Path, float, float);
+    method public void addPath(@NonNull android.graphics.Path);
+    method public void addPath(@NonNull android.graphics.Path, @NonNull android.graphics.Matrix);
+    method public void addRect(@NonNull android.graphics.RectF, @NonNull android.graphics.Path.Direction);
+    method public void addRect(float, float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(@NonNull android.graphics.RectF, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(float, float, float, float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(@NonNull android.graphics.RectF, @NonNull float[], @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(float, float, float, float, @NonNull float[], @NonNull android.graphics.Path.Direction);
+    method @NonNull @Size(min=6, multiple=3) public float[] approximate(@FloatRange(from=0) float);
+    method public void arcTo(@NonNull android.graphics.RectF, float, float, boolean);
+    method public void arcTo(@NonNull android.graphics.RectF, float, float);
+    method public void arcTo(float, float, float, float, float, float, boolean);
+    method public void close();
+    method public void computeBounds(@NonNull android.graphics.RectF, boolean);
+    method public void cubicTo(float, float, float, float, float, float);
+    method @NonNull public android.graphics.Path.FillType getFillType();
+    method public void incReserve(int);
+    method @Deprecated public boolean isConvex();
+    method public boolean isEmpty();
+    method public boolean isInverseFillType();
+    method public boolean isRect(@Nullable android.graphics.RectF);
+    method public void lineTo(float, float);
+    method public void moveTo(float, float);
+    method public void offset(float, float, @Nullable android.graphics.Path);
+    method public void offset(float, float);
+    method public boolean op(@NonNull android.graphics.Path, @NonNull android.graphics.Path.Op);
+    method public boolean op(@NonNull android.graphics.Path, @NonNull android.graphics.Path, @NonNull android.graphics.Path.Op);
+    method public void quadTo(float, float, float, float);
+    method public void rCubicTo(float, float, float, float, float, float);
+    method public void rLineTo(float, float);
+    method public void rMoveTo(float, float);
+    method public void rQuadTo(float, float, float, float);
+    method public void reset();
+    method public void rewind();
+    method public void set(@NonNull android.graphics.Path);
+    method public void setFillType(@NonNull android.graphics.Path.FillType);
+    method public void setLastPoint(float, float);
+    method public void toggleInverseFillType();
+    method public void transform(@NonNull android.graphics.Matrix, @Nullable android.graphics.Path);
+    method public void transform(@NonNull android.graphics.Matrix);
+  }
+
+  public enum Path.Direction {
+    enum_constant public static final android.graphics.Path.Direction CCW;
+    enum_constant public static final android.graphics.Path.Direction CW;
+  }
+
+  public enum Path.FillType {
+    enum_constant public static final android.graphics.Path.FillType EVEN_ODD;
+    enum_constant public static final android.graphics.Path.FillType INVERSE_EVEN_ODD;
+    enum_constant public static final android.graphics.Path.FillType INVERSE_WINDING;
+    enum_constant public static final android.graphics.Path.FillType WINDING;
+  }
+
+  public enum Path.Op {
+    enum_constant public static final android.graphics.Path.Op DIFFERENCE;
+    enum_constant public static final android.graphics.Path.Op INTERSECT;
+    enum_constant public static final android.graphics.Path.Op REVERSE_DIFFERENCE;
+    enum_constant public static final android.graphics.Path.Op UNION;
+    enum_constant public static final android.graphics.Path.Op XOR;
+  }
+
+  public class PathDashPathEffect extends android.graphics.PathEffect {
+    ctor public PathDashPathEffect(android.graphics.Path, float, float, android.graphics.PathDashPathEffect.Style);
+  }
+
+  public enum PathDashPathEffect.Style {
+    enum_constant public static final android.graphics.PathDashPathEffect.Style MORPH;
+    enum_constant public static final android.graphics.PathDashPathEffect.Style ROTATE;
+    enum_constant public static final android.graphics.PathDashPathEffect.Style TRANSLATE;
+  }
+
+  public class PathEffect {
+    ctor public PathEffect();
+  }
+
+  public class PathMeasure {
+    ctor public PathMeasure();
+    ctor public PathMeasure(android.graphics.Path, boolean);
+    method public float getLength();
+    method public boolean getMatrix(float, android.graphics.Matrix, int);
+    method public boolean getPosTan(float, float[], float[]);
+    method public boolean getSegment(float, float, android.graphics.Path, boolean);
+    method public boolean isClosed();
+    method public boolean nextContour();
+    method public void setPath(android.graphics.Path, boolean);
+    field public static final int POSITION_MATRIX_FLAG = 1; // 0x1
+    field public static final int TANGENT_MATRIX_FLAG = 2; // 0x2
+  }
+
+  public class Picture {
+    ctor public Picture();
+    ctor public Picture(android.graphics.Picture);
+    method @NonNull public android.graphics.Canvas beginRecording(int, int);
+    method public void draw(@NonNull android.graphics.Canvas);
+    method public void endRecording();
+    method public int getHeight();
+    method public int getWidth();
+    method public boolean requiresHardwareAcceleration();
+  }
+
+  public class PixelFormat {
+    ctor public PixelFormat();
+    method public static boolean formatHasAlpha(int);
+    method public static void getPixelFormatInfo(int, android.graphics.PixelFormat);
+    field @Deprecated public static final int A_8 = 8; // 0x8
+    field @Deprecated public static final int JPEG = 256; // 0x100
+    field @Deprecated public static final int LA_88 = 10; // 0xa
+    field @Deprecated public static final int L_8 = 9; // 0x9
+    field public static final int OPAQUE = -1; // 0xffffffff
+    field public static final int RGBA_1010102 = 43; // 0x2b
+    field @Deprecated public static final int RGBA_4444 = 7; // 0x7
+    field @Deprecated public static final int RGBA_5551 = 6; // 0x6
+    field public static final int RGBA_8888 = 1; // 0x1
+    field public static final int RGBA_F16 = 22; // 0x16
+    field public static final int RGBX_8888 = 2; // 0x2
+    field @Deprecated public static final int RGB_332 = 11; // 0xb
+    field public static final int RGB_565 = 4; // 0x4
+    field public static final int RGB_888 = 3; // 0x3
+    field public static final int TRANSLUCENT = -3; // 0xfffffffd
+    field public static final int TRANSPARENT = -2; // 0xfffffffe
+    field public static final int UNKNOWN = 0; // 0x0
+    field @Deprecated public static final int YCbCr_420_SP = 17; // 0x11
+    field @Deprecated public static final int YCbCr_422_I = 20; // 0x14
+    field @Deprecated public static final int YCbCr_422_SP = 16; // 0x10
+    field public int bitsPerPixel;
+    field public int bytesPerPixel;
+  }
+
+  public class Point implements android.os.Parcelable {
+    ctor public Point();
+    ctor public Point(int, int);
+    ctor public Point(@NonNull android.graphics.Point);
+    method public int describeContents();
+    method public final boolean equals(int, int);
+    method public final void negate();
+    method public final void offset(int, int);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void set(int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Point> CREATOR;
+    field public int x;
+    field public int y;
+  }
+
+  public class PointF implements android.os.Parcelable {
+    ctor public PointF();
+    ctor public PointF(float, float);
+    ctor public PointF(@NonNull android.graphics.Point);
+    ctor public PointF(@NonNull android.graphics.PointF);
+    method public int describeContents();
+    method public final boolean equals(float, float);
+    method public final float length();
+    method public static float length(float, float);
+    method public final void negate();
+    method public final void offset(float, float);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public final void set(float, float);
+    method public final void set(@NonNull android.graphics.PointF);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.PointF> CREATOR;
+    field public float x;
+    field public float y;
+  }
+
+  public class PorterDuff {
+    ctor public PorterDuff();
+  }
+
+  public enum PorterDuff.Mode {
+    enum_constant public static final android.graphics.PorterDuff.Mode ADD;
+    enum_constant public static final android.graphics.PorterDuff.Mode CLEAR;
+    enum_constant public static final android.graphics.PorterDuff.Mode DARKEN;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_ATOP;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_IN;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_OUT;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_OVER;
+    enum_constant public static final android.graphics.PorterDuff.Mode LIGHTEN;
+    enum_constant public static final android.graphics.PorterDuff.Mode MULTIPLY;
+    enum_constant public static final android.graphics.PorterDuff.Mode OVERLAY;
+    enum_constant public static final android.graphics.PorterDuff.Mode SCREEN;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_ATOP;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_IN;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_OUT;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_OVER;
+    enum_constant public static final android.graphics.PorterDuff.Mode XOR;
+  }
+
+  public class PorterDuffColorFilter extends android.graphics.ColorFilter {
+    ctor public PorterDuffColorFilter(@ColorInt int, @NonNull android.graphics.PorterDuff.Mode);
+  }
+
+  public class PorterDuffXfermode extends android.graphics.Xfermode {
+    ctor public PorterDuffXfermode(android.graphics.PorterDuff.Mode);
+  }
+
+  public interface PostProcessor {
+    method public int onPostProcess(@NonNull android.graphics.Canvas);
+  }
+
+  public class RadialGradient extends android.graphics.Shader {
+    ctor public RadialGradient(float, float, float, @ColorInt @NonNull int[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, float, @ColorLong @NonNull long[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, @FloatRange(from=0.0f) float, float, float, @FloatRange(from=0.0f, fromInclusive=false) float, @ColorLong @NonNull long[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, float, @ColorInt int, @ColorInt int, @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, float, @ColorLong long, @ColorLong long, @NonNull android.graphics.Shader.TileMode);
+  }
+
+  public final class RecordingCanvas extends android.graphics.Canvas {
+  }
+
+  public final class Rect implements android.os.Parcelable {
+    ctor public Rect();
+    ctor public Rect(int, int, int, int);
+    ctor public Rect(@Nullable android.graphics.Rect);
+    method public int centerX();
+    method public int centerY();
+    method public boolean contains(int, int);
+    method public boolean contains(int, int, int, int);
+    method public boolean contains(@NonNull android.graphics.Rect);
+    method public int describeContents();
+    method public float exactCenterX();
+    method public float exactCenterY();
+    method @NonNull public String flattenToString();
+    method public int height();
+    method public void inset(int, int);
+    method public void inset(@NonNull android.graphics.Insets);
+    method public void inset(int, int, int, int);
+    method @CheckResult public boolean intersect(int, int, int, int);
+    method @CheckResult public boolean intersect(@NonNull android.graphics.Rect);
+    method public boolean intersects(int, int, int, int);
+    method public static boolean intersects(@NonNull android.graphics.Rect, @NonNull android.graphics.Rect);
+    method public boolean isEmpty();
+    method public void offset(int, int);
+    method public void offsetTo(int, int);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void set(int, int, int, int);
+    method public void set(@NonNull android.graphics.Rect);
+    method public void setEmpty();
+    method @CheckResult public boolean setIntersect(@NonNull android.graphics.Rect, @NonNull android.graphics.Rect);
+    method public void sort();
+    method @NonNull public String toShortString();
+    method @Nullable public static android.graphics.Rect unflattenFromString(@Nullable String);
+    method public void union(int, int, int, int);
+    method public void union(@NonNull android.graphics.Rect);
+    method public void union(int, int);
+    method public int width();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Rect> CREATOR;
+    field public int bottom;
+    field public int left;
+    field public int right;
+    field public int top;
+  }
+
+  public class RectF implements android.os.Parcelable {
+    ctor public RectF();
+    ctor public RectF(float, float, float, float);
+    ctor public RectF(@Nullable android.graphics.RectF);
+    ctor public RectF(@Nullable android.graphics.Rect);
+    method public final float centerX();
+    method public final float centerY();
+    method public boolean contains(float, float);
+    method public boolean contains(float, float, float, float);
+    method public boolean contains(@NonNull android.graphics.RectF);
+    method public int describeContents();
+    method public final float height();
+    method public void inset(float, float);
+    method public boolean intersect(float, float, float, float);
+    method public boolean intersect(@NonNull android.graphics.RectF);
+    method public boolean intersects(float, float, float, float);
+    method public static boolean intersects(@NonNull android.graphics.RectF, @NonNull android.graphics.RectF);
+    method public final boolean isEmpty();
+    method public void offset(float, float);
+    method public void offsetTo(float, float);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void round(@NonNull android.graphics.Rect);
+    method public void roundOut(@NonNull android.graphics.Rect);
+    method public void set(float, float, float, float);
+    method public void set(@NonNull android.graphics.RectF);
+    method public void set(@NonNull android.graphics.Rect);
+    method public void setEmpty();
+    method public boolean setIntersect(@NonNull android.graphics.RectF, @NonNull android.graphics.RectF);
+    method public void sort();
+    method @NonNull public String toShortString();
+    method public void union(float, float, float, float);
+    method public void union(@NonNull android.graphics.RectF);
+    method public void union(float, float);
+    method public final float width();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.RectF> CREATOR;
+    field public float bottom;
+    field public float left;
+    field public float right;
+    field public float top;
+  }
+
+  public class Region implements android.os.Parcelable {
+    ctor public Region();
+    ctor public Region(@NonNull android.graphics.Region);
+    ctor public Region(@NonNull android.graphics.Rect);
+    ctor public Region(int, int, int, int);
+    method public boolean contains(int, int);
+    method public int describeContents();
+    method @NonNull public android.graphics.Path getBoundaryPath();
+    method public boolean getBoundaryPath(@NonNull android.graphics.Path);
+    method @NonNull public android.graphics.Rect getBounds();
+    method public boolean getBounds(@NonNull android.graphics.Rect);
+    method public boolean isComplex();
+    method public boolean isEmpty();
+    method public boolean isRect();
+    method public boolean op(@NonNull android.graphics.Rect, @NonNull android.graphics.Region.Op);
+    method public boolean op(int, int, int, int, @NonNull android.graphics.Region.Op);
+    method public boolean op(@NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method public boolean op(@NonNull android.graphics.Rect, @NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method public boolean op(@NonNull android.graphics.Region, @NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method public boolean quickContains(@NonNull android.graphics.Rect);
+    method public boolean quickContains(int, int, int, int);
+    method public boolean quickReject(@NonNull android.graphics.Rect);
+    method public boolean quickReject(int, int, int, int);
+    method public boolean quickReject(android.graphics.Region);
+    method public boolean set(@NonNull android.graphics.Region);
+    method public boolean set(@NonNull android.graphics.Rect);
+    method public boolean set(int, int, int, int);
+    method public void setEmpty();
+    method public boolean setPath(@NonNull android.graphics.Path, @NonNull android.graphics.Region);
+    method public void translate(int, int);
+    method public void translate(int, int, android.graphics.Region);
+    method public final boolean union(@NonNull android.graphics.Rect);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Region> CREATOR;
+  }
+
+  public enum Region.Op {
+    enum_constant public static final android.graphics.Region.Op DIFFERENCE;
+    enum_constant public static final android.graphics.Region.Op INTERSECT;
+    enum_constant public static final android.graphics.Region.Op REPLACE;
+    enum_constant public static final android.graphics.Region.Op REVERSE_DIFFERENCE;
+    enum_constant public static final android.graphics.Region.Op UNION;
+    enum_constant public static final android.graphics.Region.Op XOR;
+  }
+
+  public class RegionIterator {
+    ctor public RegionIterator(android.graphics.Region);
+    method public final boolean next(android.graphics.Rect);
+  }
+
+  public final class RenderEffect {
+    method @NonNull public static android.graphics.RenderEffect createBitmapEffect(@NonNull android.graphics.Bitmap);
+    method @NonNull public static android.graphics.RenderEffect createBitmapEffect(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @NonNull android.graphics.Rect);
+    method @NonNull public static android.graphics.RenderEffect createBlendModeEffect(@NonNull android.graphics.RenderEffect, @NonNull android.graphics.RenderEffect, @NonNull android.graphics.BlendMode);
+    method @NonNull public static android.graphics.RenderEffect createBlurEffect(float, float, @NonNull android.graphics.RenderEffect, @NonNull android.graphics.Shader.TileMode);
+    method @NonNull public static android.graphics.RenderEffect createBlurEffect(float, float, @NonNull android.graphics.Shader.TileMode);
+    method @NonNull public static android.graphics.RenderEffect createChainEffect(@NonNull android.graphics.RenderEffect, @NonNull android.graphics.RenderEffect);
+    method @NonNull public static android.graphics.RenderEffect createColorFilterEffect(@NonNull android.graphics.ColorFilter, @NonNull android.graphics.RenderEffect);
+    method @NonNull public static android.graphics.RenderEffect createColorFilterEffect(@NonNull android.graphics.ColorFilter);
+    method @NonNull public static android.graphics.RenderEffect createOffsetEffect(float, float);
+    method @NonNull public static android.graphics.RenderEffect createOffsetEffect(float, float, @NonNull android.graphics.RenderEffect);
+    method @NonNull public static android.graphics.RenderEffect createShaderEffect(@NonNull android.graphics.Shader);
+  }
+
+  public final class RenderNode {
+    ctor public RenderNode(@Nullable String);
+    method @NonNull public android.graphics.RecordingCanvas beginRecording(int, int);
+    method @NonNull public android.graphics.RecordingCanvas beginRecording();
+    method public long computeApproximateMemoryUsage();
+    method public void discardDisplayList();
+    method public void endRecording();
+    method public float getAlpha();
+    method @ColorInt public int getAmbientShadowColor();
+    method public int getBottom();
+    method @FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) public float getCameraDistance();
+    method public boolean getClipToBounds();
+    method public boolean getClipToOutline();
+    method public float getElevation();
+    method public int getHeight();
+    method public void getInverseMatrix(@NonNull android.graphics.Matrix);
+    method public int getLeft();
+    method public void getMatrix(@NonNull android.graphics.Matrix);
+    method public float getPivotX();
+    method public float getPivotY();
+    method public int getRight();
+    method public float getRotationX();
+    method public float getRotationY();
+    method public float getRotationZ();
+    method public float getScaleX();
+    method public float getScaleY();
+    method @ColorInt public int getSpotShadowColor();
+    method public int getTop();
+    method public float getTranslationX();
+    method public float getTranslationY();
+    method public float getTranslationZ();
+    method public long getUniqueId();
+    method public boolean getUseCompositingLayer();
+    method public int getWidth();
+    method public boolean hasDisplayList();
+    method public boolean hasIdentityMatrix();
+    method public boolean hasOverlappingRendering();
+    method public boolean hasShadow();
+    method public boolean isForceDarkAllowed();
+    method public boolean isPivotExplicitlySet();
+    method public boolean offsetLeftAndRight(int);
+    method public boolean offsetTopAndBottom(int);
+    method public boolean resetPivot();
+    method public boolean setAlpha(float);
+    method public boolean setAmbientShadowColor(@ColorInt int);
+    method public boolean setCameraDistance(@FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) float);
+    method public boolean setClipRect(@Nullable android.graphics.Rect);
+    method public boolean setClipToBounds(boolean);
+    method public boolean setClipToOutline(boolean);
+    method public boolean setElevation(float);
+    method public boolean setForceDarkAllowed(boolean);
+    method public boolean setHasOverlappingRendering(boolean);
+    method public boolean setOutline(@Nullable android.graphics.Outline);
+    method public boolean setPivotX(float);
+    method public boolean setPivotY(float);
+    method public boolean setPosition(int, int, int, int);
+    method public boolean setPosition(@NonNull android.graphics.Rect);
+    method public boolean setProjectBackwards(boolean);
+    method public boolean setProjectionReceiver(boolean);
+    method public boolean setRenderEffect(@Nullable android.graphics.RenderEffect);
+    method public boolean setRotationX(float);
+    method public boolean setRotationY(float);
+    method public boolean setRotationZ(float);
+    method public boolean setScaleX(float);
+    method public boolean setScaleY(float);
+    method public boolean setSpotShadowColor(@ColorInt int);
+    method public boolean setTranslationX(float);
+    method public boolean setTranslationY(float);
+    method public boolean setTranslationZ(float);
+    method public boolean setUseCompositingLayer(boolean, @Nullable android.graphics.Paint);
+  }
+
+  public class Shader {
+    ctor @Deprecated public Shader();
+    method public boolean getLocalMatrix(@NonNull android.graphics.Matrix);
+    method public void setLocalMatrix(@Nullable android.graphics.Matrix);
+  }
+
+  public enum Shader.TileMode {
+    enum_constant public static final android.graphics.Shader.TileMode CLAMP;
+    enum_constant public static final android.graphics.Shader.TileMode DECAL;
+    enum_constant public static final android.graphics.Shader.TileMode MIRROR;
+    enum_constant public static final android.graphics.Shader.TileMode REPEAT;
+  }
+
+  public class SumPathEffect extends android.graphics.PathEffect {
+    ctor public SumPathEffect(android.graphics.PathEffect, android.graphics.PathEffect);
+  }
+
+  public class SurfaceTexture {
+    ctor public SurfaceTexture(int);
+    ctor public SurfaceTexture(int, boolean);
+    ctor public SurfaceTexture(boolean);
+    method public void attachToGLContext(int);
+    method public void detachFromGLContext();
+    method public long getTimestamp();
+    method public void getTransformMatrix(float[]);
+    method public boolean isReleased();
+    method public void release();
+    method public void releaseTexImage();
+    method public void setDefaultBufferSize(int, int);
+    method public void setOnFrameAvailableListener(@Nullable android.graphics.SurfaceTexture.OnFrameAvailableListener);
+    method public void setOnFrameAvailableListener(@Nullable android.graphics.SurfaceTexture.OnFrameAvailableListener, @Nullable android.os.Handler);
+    method public void updateTexImage();
+  }
+
+  public static interface SurfaceTexture.OnFrameAvailableListener {
+    method public void onFrameAvailable(android.graphics.SurfaceTexture);
+  }
+
+  @Deprecated public static class SurfaceTexture.OutOfResourcesException extends java.lang.Exception {
+    ctor @Deprecated public SurfaceTexture.OutOfResourcesException();
+    ctor @Deprecated public SurfaceTexture.OutOfResourcesException(String);
+  }
+
+  public class SweepGradient extends android.graphics.Shader {
+    ctor public SweepGradient(float, float, @ColorInt @NonNull int[], @Nullable float[]);
+    ctor public SweepGradient(float, float, @ColorLong @NonNull long[], @Nullable float[]);
+    ctor public SweepGradient(float, float, @ColorInt int, @ColorInt int);
+    ctor public SweepGradient(float, float, @ColorLong long, @ColorLong long);
+  }
+
+  public class Typeface {
+    method public static android.graphics.Typeface create(String, int);
+    method public static android.graphics.Typeface create(android.graphics.Typeface, int);
+    method @NonNull public static android.graphics.Typeface create(@Nullable android.graphics.Typeface, @IntRange(from=1, to=1000) int, boolean);
+    method public static android.graphics.Typeface createFromAsset(android.content.res.AssetManager, String);
+    method public static android.graphics.Typeface createFromFile(@Nullable java.io.File);
+    method public static android.graphics.Typeface createFromFile(@Nullable String);
+    method public static android.graphics.Typeface defaultFromStyle(int);
+    method public int getStyle();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    method public final boolean isBold();
+    method public final boolean isItalic();
+    field public static final int BOLD = 1; // 0x1
+    field public static final int BOLD_ITALIC = 3; // 0x3
+    field public static final android.graphics.Typeface DEFAULT;
+    field public static final android.graphics.Typeface DEFAULT_BOLD;
+    field public static final int ITALIC = 2; // 0x2
+    field public static final android.graphics.Typeface MONOSPACE;
+    field public static final int NORMAL = 0; // 0x0
+    field public static final android.graphics.Typeface SANS_SERIF;
+    field public static final android.graphics.Typeface SERIF;
+  }
+
+  public static final class Typeface.Builder {
+    ctor public Typeface.Builder(@NonNull java.io.File);
+    ctor public Typeface.Builder(@NonNull java.io.FileDescriptor);
+    ctor public Typeface.Builder(@NonNull String);
+    ctor public Typeface.Builder(@NonNull android.content.res.AssetManager, @NonNull String);
+    method public android.graphics.Typeface build();
+    method public android.graphics.Typeface.Builder setFallback(@Nullable String);
+    method public android.graphics.Typeface.Builder setFontVariationSettings(@Nullable String);
+    method public android.graphics.Typeface.Builder setFontVariationSettings(@Nullable android.graphics.fonts.FontVariationAxis[]);
+    method public android.graphics.Typeface.Builder setItalic(boolean);
+    method public android.graphics.Typeface.Builder setTtcIndex(@IntRange(from=0) int);
+    method public android.graphics.Typeface.Builder setWeight(@IntRange(from=1, to=1000) int);
+  }
+
+  public static final class Typeface.CustomFallbackBuilder {
+    ctor public Typeface.CustomFallbackBuilder(@NonNull android.graphics.fonts.FontFamily);
+    method @NonNull public android.graphics.Typeface.CustomFallbackBuilder addCustomFallback(@NonNull android.graphics.fonts.FontFamily);
+    method @NonNull public android.graphics.Typeface build();
+    method @IntRange(from=64) public static int getMaxCustomFallbackCount();
+    method @NonNull public android.graphics.Typeface.CustomFallbackBuilder setStyle(@NonNull android.graphics.fonts.FontStyle);
+    method @NonNull public android.graphics.Typeface.CustomFallbackBuilder setSystemFallback(@NonNull String);
+  }
+
+  public class Xfermode {
+    ctor public Xfermode();
+  }
+
+  public class YuvImage {
+    ctor public YuvImage(byte[], int, int, int, int[]);
+    method public boolean compressToJpeg(android.graphics.Rect, int, java.io.OutputStream);
+    method public int getHeight();
+    method public int[] getStrides();
+    method public int getWidth();
+    method public byte[] getYuvData();
+    method public int getYuvFormat();
+  }
+
+}
+
+package android.graphics.drawable {
+
+  public class AdaptiveIconDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public AdaptiveIconDrawable(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+    method public void draw(android.graphics.Canvas);
+    method public android.graphics.drawable.Drawable getBackground();
+    method public static float getExtraInsetFraction();
+    method public android.graphics.drawable.Drawable getForeground();
+    method public android.graphics.Path getIconMask();
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setOpacity(int);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public interface Animatable {
+    method public boolean isRunning();
+    method public void start();
+    method public void stop();
+  }
+
+  public interface Animatable2 extends android.graphics.drawable.Animatable {
+    method public void clearAnimationCallbacks();
+    method public void registerAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    method public boolean unregisterAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+  }
+
+  public abstract static class Animatable2.AnimationCallback {
+    ctor public Animatable2.AnimationCallback();
+    method public void onAnimationEnd(android.graphics.drawable.Drawable);
+    method public void onAnimationStart(android.graphics.drawable.Drawable);
+  }
+
+  public class AnimatedImageDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
+    ctor public AnimatedImageDrawable();
+    method public void clearAnimationCallbacks();
+    method public void draw(@NonNull android.graphics.Canvas);
+    method public int getOpacity();
+    method public int getRepeatCount();
+    method public final boolean isAutoMirrored();
+    method public boolean isRunning();
+    method public void registerAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    method public void setAlpha(@IntRange(from=0, to=255) int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setRepeatCount(@IntRange(from=android.graphics.drawable.AnimatedImageDrawable.REPEAT_INFINITE) int);
+    method public void start();
+    method public void stop();
+    method public boolean unregisterAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    field public static final int REPEAT_INFINITE = -1; // 0xffffffff
+  }
+
+  public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable {
+    ctor public AnimatedStateListDrawable();
+    method public void addState(@NonNull int[], @NonNull android.graphics.drawable.Drawable, int);
+    method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, @NonNull T, boolean);
+  }
+
+  public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
+    ctor public AnimatedVectorDrawable();
+    method public void clearAnimationCallbacks();
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public boolean isRunning();
+    method public void registerAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    method public void reset();
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void start();
+    method public void stop();
+    method public boolean unregisterAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+  }
+
+  public class AnimationDrawable extends android.graphics.drawable.DrawableContainer implements android.graphics.drawable.Animatable java.lang.Runnable {
+    ctor public AnimationDrawable();
+    method public void addFrame(@NonNull android.graphics.drawable.Drawable, int);
+    method public int getDuration(int);
+    method public android.graphics.drawable.Drawable getFrame(int);
+    method public int getNumberOfFrames();
+    method public boolean isOneShot();
+    method public boolean isRunning();
+    method public void run();
+    method public void setOneShot(boolean);
+    method public void start();
+    method public void stop();
+  }
+
+  public class BitmapDrawable extends android.graphics.drawable.Drawable {
+    ctor @Deprecated public BitmapDrawable();
+    ctor @Deprecated public BitmapDrawable(android.content.res.Resources);
+    ctor @Deprecated public BitmapDrawable(android.graphics.Bitmap);
+    ctor public BitmapDrawable(android.content.res.Resources, android.graphics.Bitmap);
+    ctor @Deprecated public BitmapDrawable(String);
+    ctor public BitmapDrawable(android.content.res.Resources, String);
+    ctor @Deprecated public BitmapDrawable(java.io.InputStream);
+    ctor public BitmapDrawable(android.content.res.Resources, java.io.InputStream);
+    method public void draw(android.graphics.Canvas);
+    method public final android.graphics.Bitmap getBitmap();
+    method public final android.graphics.drawable.Drawable.ConstantState getConstantState();
+    method public int getGravity();
+    method public int getOpacity();
+    method public final android.graphics.Paint getPaint();
+    method public android.graphics.Shader.TileMode getTileModeX();
+    method public android.graphics.Shader.TileMode getTileModeY();
+    method public boolean hasAntiAlias();
+    method public boolean hasMipMap();
+    method public final boolean isAutoMirrored();
+    method public void setAlpha(int);
+    method public void setAntiAlias(boolean);
+    method public void setBitmap(@Nullable android.graphics.Bitmap);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setGravity(int);
+    method public void setMipMap(boolean);
+    method public void setTargetDensity(android.graphics.Canvas);
+    method public void setTargetDensity(android.util.DisplayMetrics);
+    method public void setTargetDensity(int);
+    method public void setTileModeX(android.graphics.Shader.TileMode);
+    method public void setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode);
+    method public final void setTileModeY(android.graphics.Shader.TileMode);
+  }
+
+  public class ClipDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public ClipDrawable(android.graphics.drawable.Drawable, int, int);
+    field public static final int HORIZONTAL = 1; // 0x1
+    field public static final int VERTICAL = 2; // 0x2
+  }
+
+  public class ColorDrawable extends android.graphics.drawable.Drawable {
+    ctor public ColorDrawable();
+    ctor public ColorDrawable(@ColorInt int);
+    method public void draw(android.graphics.Canvas);
+    method @ColorInt public int getColor();
+    method public int getOpacity();
+    method public void setAlpha(int);
+    method public void setColor(@ColorInt int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+  }
+
+  public class ColorStateListDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public ColorStateListDrawable();
+    ctor public ColorStateListDrawable(@NonNull android.content.res.ColorStateList);
+    method public void clearAlpha();
+    method public void draw(@NonNull android.graphics.Canvas);
+    method @NonNull public android.content.res.ColorStateList getColorStateList();
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(@IntRange(from=0, to=255) int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setColorStateList(@NonNull android.content.res.ColorStateList);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public abstract class Drawable {
+    ctor public Drawable();
+    method public void applyTheme(@NonNull android.content.res.Resources.Theme);
+    method public boolean canApplyTheme();
+    method public void clearColorFilter();
+    method public final void copyBounds(@NonNull android.graphics.Rect);
+    method @NonNull public final android.graphics.Rect copyBounds();
+    method @Nullable public static android.graphics.drawable.Drawable createFromPath(String);
+    method public static android.graphics.drawable.Drawable createFromResourceStream(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, String);
+    method @Deprecated @Nullable public static android.graphics.drawable.Drawable createFromResourceStream(@Nullable android.content.res.Resources, @Nullable android.util.TypedValue, @Nullable java.io.InputStream, @Nullable String, @Nullable android.graphics.BitmapFactory.Options);
+    method public static android.graphics.drawable.Drawable createFromStream(java.io.InputStream, String);
+    method @NonNull public static android.graphics.drawable.Drawable createFromXml(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.graphics.drawable.Drawable createFromXml(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.graphics.drawable.Drawable createFromXmlInner(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.graphics.drawable.Drawable createFromXmlInner(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public abstract void draw(@NonNull android.graphics.Canvas);
+    method @IntRange(from=0, to=255) public int getAlpha();
+    method @NonNull public final android.graphics.Rect getBounds();
+    method @Nullable public android.graphics.drawable.Drawable.Callback getCallback();
+    method public int getChangingConfigurations();
+    method @Nullable public android.graphics.ColorFilter getColorFilter();
+    method @Nullable public android.graphics.drawable.Drawable.ConstantState getConstantState();
+    method @NonNull public android.graphics.drawable.Drawable getCurrent();
+    method @NonNull public android.graphics.Rect getDirtyBounds();
+    method public void getHotspotBounds(@NonNull android.graphics.Rect);
+    method public int getIntrinsicHeight();
+    method public int getIntrinsicWidth();
+    method public int getLayoutDirection();
+    method @IntRange(from=0, to=10000) public final int getLevel();
+    method public int getMinimumHeight();
+    method public int getMinimumWidth();
+    method @Deprecated public abstract int getOpacity();
+    method @NonNull public android.graphics.Insets getOpticalInsets();
+    method public void getOutline(@NonNull android.graphics.Outline);
+    method public boolean getPadding(@NonNull android.graphics.Rect);
+    method @NonNull public int[] getState();
+    method @Nullable public android.graphics.Region getTransparentRegion();
+    method public boolean hasFocusStateSpecified();
+    method public void inflate(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void inflate(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void invalidateSelf();
+    method public boolean isAutoMirrored();
+    method public boolean isFilterBitmap();
+    method public boolean isProjected();
+    method public boolean isStateful();
+    method public final boolean isVisible();
+    method public void jumpToCurrentState();
+    method @NonNull public android.graphics.drawable.Drawable mutate();
+    method protected void onBoundsChange(android.graphics.Rect);
+    method public boolean onLayoutDirectionChanged(int);
+    method protected boolean onLevelChange(int);
+    method protected boolean onStateChange(int[]);
+    method public static int resolveOpacity(int, int);
+    method public void scheduleSelf(@NonNull Runnable, long);
+    method public abstract void setAlpha(@IntRange(from=0, to=255) int);
+    method public void setAutoMirrored(boolean);
+    method public void setBounds(int, int, int, int);
+    method public void setBounds(@NonNull android.graphics.Rect);
+    method public final void setCallback(@Nullable android.graphics.drawable.Drawable.Callback);
+    method public void setChangingConfigurations(int);
+    method public abstract void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method @Deprecated public void setColorFilter(@ColorInt int, @NonNull android.graphics.PorterDuff.Mode);
+    method @Deprecated public void setDither(boolean);
+    method public void setFilterBitmap(boolean);
+    method public void setHotspot(float, float);
+    method public void setHotspotBounds(int, int, int, int);
+    method public final boolean setLayoutDirection(int);
+    method public final boolean setLevel(@IntRange(from=0, to=10000) int);
+    method public boolean setState(@NonNull int[]);
+    method public void setTint(@ColorInt int);
+    method public void setTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setTintList(@Nullable android.content.res.ColorStateList);
+    method public void setTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public boolean setVisible(boolean, boolean);
+    method public void unscheduleSelf(@NonNull Runnable);
+  }
+
+  public static interface Drawable.Callback {
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public abstract static class Drawable.ConstantState {
+    ctor public Drawable.ConstantState();
+    method public boolean canApplyTheme();
+    method public abstract int getChangingConfigurations();
+    method @NonNull public abstract android.graphics.drawable.Drawable newDrawable();
+    method @NonNull public android.graphics.drawable.Drawable newDrawable(@Nullable android.content.res.Resources);
+    method @NonNull public android.graphics.drawable.Drawable newDrawable(@Nullable android.content.res.Resources, @Nullable android.content.res.Resources.Theme);
+  }
+
+  public class DrawableContainer extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public DrawableContainer();
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public boolean selectDrawable(int);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+    method public void setDither(boolean);
+    method public void setEnterFadeDuration(int);
+    method public void setExitFadeDuration(int);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public abstract static class DrawableContainer.DrawableContainerState extends android.graphics.drawable.Drawable.ConstantState {
+    method public final int addChild(android.graphics.drawable.Drawable);
+    method public boolean canConstantState();
+    method protected void computeConstantSize();
+    method public int getChangingConfigurations();
+    method public final android.graphics.drawable.Drawable getChild(int);
+    method public final int getChildCount();
+    method public final android.graphics.drawable.Drawable[] getChildren();
+    method public final int getConstantHeight();
+    method public final int getConstantMinimumHeight();
+    method public final int getConstantMinimumWidth();
+    method public final android.graphics.Rect getConstantPadding();
+    method public final int getConstantWidth();
+    method public final int getEnterFadeDuration();
+    method public final int getExitFadeDuration();
+    method public final int getOpacity();
+    method public void growArray(int, int);
+    method public final boolean isConstantSize();
+    method public final boolean isStateful();
+    method public final void setConstantSize(boolean);
+    method public final void setEnterFadeDuration(int);
+    method public final void setExitFadeDuration(int);
+    method public final void setVariablePadding(boolean);
+  }
+
+  public abstract class DrawableWrapper extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public DrawableWrapper(@Nullable android.graphics.drawable.Drawable);
+    method public void draw(@NonNull android.graphics.Canvas);
+    method @Nullable public android.graphics.drawable.Drawable getDrawable();
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public class GradientDrawable extends android.graphics.drawable.Drawable {
+    ctor public GradientDrawable();
+    ctor public GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation, @ColorInt int[]);
+    method public void draw(android.graphics.Canvas);
+    method @Nullable public android.content.res.ColorStateList getColor();
+    method @Nullable public int[] getColors();
+    method @Nullable public float[] getCornerRadii();
+    method public float getCornerRadius();
+    method public float getGradientCenterX();
+    method public float getGradientCenterY();
+    method public float getGradientRadius();
+    method public int getGradientType();
+    method @Px public int getInnerRadius();
+    method public float getInnerRadiusRatio();
+    method public int getOpacity();
+    method public android.graphics.drawable.GradientDrawable.Orientation getOrientation();
+    method public int getShape();
+    method @Px public int getThickness();
+    method public float getThicknessRatio();
+    method public boolean getUseLevel();
+    method public void setAlpha(int);
+    method public void setColor(@ColorInt int);
+    method public void setColor(@Nullable android.content.res.ColorStateList);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setColors(@ColorInt @Nullable int[]);
+    method public void setColors(@ColorInt @Nullable int[], @Nullable float[]);
+    method public void setCornerRadii(@Nullable float[]);
+    method public void setCornerRadius(float);
+    method public void setDither(boolean);
+    method public void setGradientCenter(float, float);
+    method public void setGradientRadius(float);
+    method public void setGradientType(int);
+    method public void setInnerRadius(@Px int);
+    method public void setInnerRadiusRatio(@FloatRange(from=0.0f, fromInclusive=false) float);
+    method public void setOrientation(android.graphics.drawable.GradientDrawable.Orientation);
+    method public void setPadding(@Px int, @Px int, @Px int, @Px int);
+    method public void setShape(int);
+    method public void setSize(int, int);
+    method public void setStroke(int, @ColorInt int);
+    method public void setStroke(int, android.content.res.ColorStateList);
+    method public void setStroke(int, @ColorInt int, float, float);
+    method public void setStroke(int, android.content.res.ColorStateList, float, float);
+    method public void setThickness(@Px int);
+    method public void setThicknessRatio(@FloatRange(from=0.0f, fromInclusive=false) float);
+    method public void setUseLevel(boolean);
+    field public static final int LINE = 2; // 0x2
+    field public static final int LINEAR_GRADIENT = 0; // 0x0
+    field public static final int OVAL = 1; // 0x1
+    field public static final int RADIAL_GRADIENT = 1; // 0x1
+    field public static final int RECTANGLE = 0; // 0x0
+    field public static final int RING = 3; // 0x3
+    field public static final int SWEEP_GRADIENT = 2; // 0x2
+  }
+
+  public enum GradientDrawable.Orientation {
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BL_TR;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BOTTOM_TOP;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BR_TL;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation LEFT_RIGHT;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation RIGHT_LEFT;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TL_BR;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TOP_BOTTOM;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL;
+  }
+
+  public final class Icon implements android.os.Parcelable {
+    method public static android.graphics.drawable.Icon createWithAdaptiveBitmap(android.graphics.Bitmap);
+    method @NonNull public static android.graphics.drawable.Icon createWithAdaptiveBitmapContentUri(@NonNull String);
+    method @NonNull public static android.graphics.drawable.Icon createWithAdaptiveBitmapContentUri(@NonNull android.net.Uri);
+    method public static android.graphics.drawable.Icon createWithBitmap(android.graphics.Bitmap);
+    method public static android.graphics.drawable.Icon createWithContentUri(String);
+    method public static android.graphics.drawable.Icon createWithContentUri(android.net.Uri);
+    method public static android.graphics.drawable.Icon createWithData(byte[], int, int);
+    method public static android.graphics.drawable.Icon createWithFilePath(String);
+    method public static android.graphics.drawable.Icon createWithResource(android.content.Context, @DrawableRes int);
+    method public static android.graphics.drawable.Icon createWithResource(String, @DrawableRes int);
+    method public int describeContents();
+    method @DrawableRes public int getResId();
+    method @NonNull public String getResPackage();
+    method public int getType();
+    method @NonNull public android.net.Uri getUri();
+    method public android.graphics.drawable.Drawable loadDrawable(android.content.Context);
+    method public void loadDrawableAsync(android.content.Context, android.os.Message);
+    method public void loadDrawableAsync(android.content.Context, android.graphics.drawable.Icon.OnDrawableLoadedListener, android.os.Handler);
+    method public android.graphics.drawable.Icon setTint(@ColorInt int);
+    method @NonNull public android.graphics.drawable.Icon setTintBlendMode(@NonNull android.graphics.BlendMode);
+    method public android.graphics.drawable.Icon setTintList(android.content.res.ColorStateList);
+    method @NonNull public android.graphics.drawable.Icon setTintMode(@NonNull android.graphics.PorterDuff.Mode);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.drawable.Icon> CREATOR;
+    field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
+    field public static final int TYPE_BITMAP = 1; // 0x1
+    field public static final int TYPE_DATA = 3; // 0x3
+    field public static final int TYPE_RESOURCE = 2; // 0x2
+    field public static final int TYPE_URI = 4; // 0x4
+    field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
+  }
+
+  public static interface Icon.OnDrawableLoadedListener {
+    method public void onDrawableLoaded(android.graphics.drawable.Drawable);
+  }
+
+  public class InsetDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, int);
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, float);
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, int, int, int, int);
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, float, float, float, float);
+  }
+
+  public class LayerDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public LayerDrawable(@NonNull android.graphics.drawable.Drawable[]);
+    method public int addLayer(android.graphics.drawable.Drawable);
+    method public void draw(android.graphics.Canvas);
+    method public android.graphics.drawable.Drawable findDrawableByLayerId(int);
+    method public int findIndexByLayerId(int);
+    method public int getBottomPadding();
+    method public android.graphics.drawable.Drawable getDrawable(int);
+    method public int getEndPadding();
+    method public int getId(int);
+    method public int getLayerGravity(int);
+    method public int getLayerHeight(int);
+    method public int getLayerInsetBottom(int);
+    method public int getLayerInsetEnd(int);
+    method public int getLayerInsetLeft(int);
+    method public int getLayerInsetRight(int);
+    method public int getLayerInsetStart(int);
+    method public int getLayerInsetTop(int);
+    method public int getLayerWidth(int);
+    method public int getLeftPadding();
+    method public int getNumberOfLayers();
+    method public int getOpacity();
+    method public int getPaddingMode();
+    method public int getRightPadding();
+    method public int getStartPadding();
+    method public int getTopPadding();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setDrawable(int, android.graphics.drawable.Drawable);
+    method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
+    method public void setId(int, int);
+    method public void setLayerGravity(int, int);
+    method public void setLayerHeight(int, int);
+    method public void setLayerInset(int, int, int, int, int);
+    method public void setLayerInsetBottom(int, int);
+    method public void setLayerInsetEnd(int, int);
+    method public void setLayerInsetLeft(int, int);
+    method public void setLayerInsetRelative(int, int, int, int, int);
+    method public void setLayerInsetRight(int, int);
+    method public void setLayerInsetStart(int, int);
+    method public void setLayerInsetTop(int, int);
+    method public void setLayerSize(int, int, int);
+    method public void setLayerWidth(int, int);
+    method public void setOpacity(int);
+    method public void setPadding(int, int, int, int);
+    method public void setPaddingMode(int);
+    method public void setPaddingRelative(int, int, int, int);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+    field public static final int INSET_UNDEFINED = -2147483648; // 0x80000000
+    field public static final int PADDING_MODE_NEST = 0; // 0x0
+    field public static final int PADDING_MODE_STACK = 1; // 0x1
+  }
+
+  public class LevelListDrawable extends android.graphics.drawable.DrawableContainer {
+    ctor public LevelListDrawable();
+    method public void addLevel(int, int, android.graphics.drawable.Drawable);
+  }
+
+  public class NinePatchDrawable extends android.graphics.drawable.Drawable {
+    ctor @Deprecated public NinePatchDrawable(android.graphics.Bitmap, byte[], android.graphics.Rect, String);
+    ctor public NinePatchDrawable(android.content.res.Resources, android.graphics.Bitmap, byte[], android.graphics.Rect, String);
+    ctor @Deprecated public NinePatchDrawable(@NonNull android.graphics.NinePatch);
+    ctor public NinePatchDrawable(@Nullable android.content.res.Resources, @NonNull android.graphics.NinePatch);
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method @NonNull public android.graphics.Paint getPaint();
+    method public void setAlpha(int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setTargetDensity(@NonNull android.graphics.Canvas);
+    method public void setTargetDensity(@NonNull android.util.DisplayMetrics);
+    method public void setTargetDensity(int);
+  }
+
+  public class PaintDrawable extends android.graphics.drawable.ShapeDrawable {
+    ctor public PaintDrawable();
+    ctor public PaintDrawable(int);
+    method public void setCornerRadii(float[]);
+    method public void setCornerRadius(float);
+  }
+
+  public class PictureDrawable extends android.graphics.drawable.Drawable {
+    ctor public PictureDrawable(android.graphics.Picture);
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public android.graphics.Picture getPicture();
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setPicture(android.graphics.Picture);
+  }
+
+  public class RippleDrawable extends android.graphics.drawable.LayerDrawable {
+    ctor public RippleDrawable(@NonNull android.content.res.ColorStateList, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method @NonNull public android.content.res.ColorStateList getEffectColor();
+    method public int getRadius();
+    method public void setColor(@NonNull android.content.res.ColorStateList);
+    method public void setEffectColor(@NonNull android.content.res.ColorStateList);
+    method public void setRadius(int);
+    field public static final int RADIUS_AUTO = -1; // 0xffffffff
+  }
+
+  public class RotateDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public RotateDrawable();
+    method public float getFromDegrees();
+    method public float getPivotX();
+    method public float getPivotY();
+    method public float getToDegrees();
+    method public boolean isPivotXRelative();
+    method public boolean isPivotYRelative();
+    method public void setFromDegrees(float);
+    method public void setPivotX(float);
+    method public void setPivotXRelative(boolean);
+    method public void setPivotY(float);
+    method public void setPivotYRelative(boolean);
+    method public void setToDegrees(float);
+  }
+
+  public class ScaleDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public ScaleDrawable(android.graphics.drawable.Drawable, int, float, float);
+  }
+
+  public class ShapeDrawable extends android.graphics.drawable.Drawable {
+    ctor public ShapeDrawable();
+    ctor public ShapeDrawable(android.graphics.drawable.shapes.Shape);
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public android.graphics.Paint getPaint();
+    method public android.graphics.drawable.ShapeDrawable.ShaderFactory getShaderFactory();
+    method public android.graphics.drawable.shapes.Shape getShape();
+    method protected boolean inflateTag(String, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet);
+    method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setIntrinsicHeight(int);
+    method public void setIntrinsicWidth(int);
+    method public void setPadding(int, int, int, int);
+    method public void setPadding(android.graphics.Rect);
+    method public void setShaderFactory(android.graphics.drawable.ShapeDrawable.ShaderFactory);
+    method public void setShape(android.graphics.drawable.shapes.Shape);
+  }
+
+  public abstract static class ShapeDrawable.ShaderFactory {
+    ctor public ShapeDrawable.ShaderFactory();
+    method public abstract android.graphics.Shader resize(int, int);
+  }
+
+  public class StateListDrawable extends android.graphics.drawable.DrawableContainer {
+    ctor public StateListDrawable();
+    method public void addState(int[], android.graphics.drawable.Drawable);
+    method public int findStateDrawableIndex(@NonNull int[]);
+    method public int getStateCount();
+    method @Nullable public android.graphics.drawable.Drawable getStateDrawable(int);
+    method @NonNull public int[] getStateSet(int);
+  }
+
+  public class TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public TransitionDrawable(android.graphics.drawable.Drawable[]);
+    method public boolean isCrossFadeEnabled();
+    method public void resetTransition();
+    method public void reverseTransition(int);
+    method public void setCrossFadeEnabled(boolean);
+    method public void startTransition(int);
+  }
+
+  public class VectorDrawable extends android.graphics.drawable.Drawable {
+    ctor public VectorDrawable();
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+  }
+
+}
+
+package android.graphics.drawable.shapes {
+
+  public class ArcShape extends android.graphics.drawable.shapes.RectShape {
+    ctor public ArcShape(float, float);
+    method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
+    method public final float getStartAngle();
+    method public final float getSweepAngle();
+  }
+
+  public class OvalShape extends android.graphics.drawable.shapes.RectShape {
+    ctor public OvalShape();
+    method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
+  }
+
+  public class PathShape extends android.graphics.drawable.shapes.Shape {
+    ctor public PathShape(@NonNull android.graphics.Path, float, float);
+    method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
+    method public void draw(android.graphics.Canvas, android.graphics.Paint);
+  }
+
+  public class RectShape extends android.graphics.drawable.shapes.Shape {
+    ctor public RectShape();
+    method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
+    method public void draw(android.graphics.Canvas, android.graphics.Paint);
+    method protected final android.graphics.RectF rect();
+  }
+
+  public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
+    ctor public RoundRectShape(@Nullable float[], @Nullable android.graphics.RectF, @Nullable float[]);
+    method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
+  }
+
+  public abstract class Shape implements java.lang.Cloneable {
+    ctor public Shape();
+    method public android.graphics.drawable.shapes.Shape clone() throws java.lang.CloneNotSupportedException;
+    method public abstract void draw(android.graphics.Canvas, android.graphics.Paint);
+    method public final float getHeight();
+    method public void getOutline(@NonNull android.graphics.Outline);
+    method public final float getWidth();
+    method public boolean hasAlpha();
+    method protected void onResize(float, float);
+    method public final void resize(float, float);
+  }
+
+}
+
+package android.graphics.fonts {
+
+  public final class Font {
+    method @Nullable public android.graphics.fonts.FontVariationAxis[] getAxes();
+    method @NonNull public java.nio.ByteBuffer getBuffer();
+    method @Nullable public java.io.File getFile();
+    method public float getGlyphBounds(@IntRange(from=0) int, @NonNull android.graphics.Paint, @Nullable android.graphics.RectF);
+    method @NonNull public android.os.LocaleList getLocaleList();
+    method public void getMetrics(@NonNull android.graphics.Paint, @Nullable android.graphics.Paint.FontMetrics);
+    method public int getSourceIdentifier();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+    method @IntRange(from=0) public int getTtcIndex();
+  }
+
+  public static final class Font.Builder {
+    ctor public Font.Builder(@NonNull java.nio.ByteBuffer);
+    ctor public Font.Builder(@NonNull java.io.File);
+    ctor public Font.Builder(@NonNull android.os.ParcelFileDescriptor);
+    ctor public Font.Builder(@NonNull android.os.ParcelFileDescriptor, @IntRange(from=0) long, @IntRange(from=0xffffffff) long);
+    ctor public Font.Builder(@NonNull android.content.res.AssetManager, @NonNull String);
+    ctor public Font.Builder(@NonNull android.content.res.Resources, int);
+    ctor public Font.Builder(@NonNull android.graphics.fonts.Font);
+    method @NonNull public android.graphics.fonts.Font build() throws java.io.IOException;
+    method @NonNull public android.graphics.fonts.Font.Builder setFontVariationSettings(@Nullable String);
+    method @NonNull public android.graphics.fonts.Font.Builder setFontVariationSettings(@Nullable android.graphics.fonts.FontVariationAxis[]);
+    method @NonNull public android.graphics.fonts.Font.Builder setSlant(int);
+    method @NonNull public android.graphics.fonts.Font.Builder setTtcIndex(@IntRange(from=0) int);
+    method @NonNull public android.graphics.fonts.Font.Builder setWeight(@IntRange(from=android.graphics.fonts.FontStyle.FONT_WEIGHT_MIN, to=android.graphics.fonts.FontStyle.FONT_WEIGHT_MAX) int);
+  }
+
+  public final class FontFamily {
+    method @NonNull public android.graphics.fonts.Font getFont(@IntRange(from=0) int);
+    method @IntRange(from=1) public int getSize();
+  }
+
+  public static final class FontFamily.Builder {
+    ctor public FontFamily.Builder(@NonNull android.graphics.fonts.Font);
+    method @NonNull public android.graphics.fonts.FontFamily.Builder addFont(@NonNull android.graphics.fonts.Font);
+    method @NonNull public android.graphics.fonts.FontFamily build();
+  }
+
+  public final class FontStyle {
+    ctor public FontStyle();
+    ctor public FontStyle(int, int);
+    method public int getSlant();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    field public static final int FONT_SLANT_ITALIC = 1; // 0x1
+    field public static final int FONT_SLANT_UPRIGHT = 0; // 0x0
+    field public static final int FONT_WEIGHT_BLACK = 900; // 0x384
+    field public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
+    field public static final int FONT_WEIGHT_EXTRA_BOLD = 800; // 0x320
+    field public static final int FONT_WEIGHT_EXTRA_LIGHT = 200; // 0xc8
+    field public static final int FONT_WEIGHT_LIGHT = 300; // 0x12c
+    field public static final int FONT_WEIGHT_MAX = 1000; // 0x3e8
+    field public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4
+    field public static final int FONT_WEIGHT_MIN = 1; // 0x1
+    field public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
+    field public static final int FONT_WEIGHT_SEMI_BOLD = 600; // 0x258
+    field public static final int FONT_WEIGHT_THIN = 100; // 0x64
+  }
+
+  public final class FontVariationAxis {
+    ctor public FontVariationAxis(@NonNull String, float);
+    method @Nullable public static android.graphics.fonts.FontVariationAxis[] fromFontVariationSettings(@Nullable String);
+    method public float getStyleValue();
+    method public String getTag();
+    method @NonNull public static String toFontVariationSettings(@Nullable android.graphics.fonts.FontVariationAxis[]);
+  }
+
+  public final class SystemFonts {
+    method @NonNull public static java.util.Set<android.graphics.fonts.Font> getAvailableFonts();
+  }
+
+}
+
+package android.graphics.pdf {
+
+  public class PdfDocument {
+    ctor public PdfDocument();
+    method public void close();
+    method public void finishPage(android.graphics.pdf.PdfDocument.Page);
+    method public java.util.List<android.graphics.pdf.PdfDocument.PageInfo> getPages();
+    method public android.graphics.pdf.PdfDocument.Page startPage(android.graphics.pdf.PdfDocument.PageInfo);
+    method public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  public static final class PdfDocument.Page {
+    method public android.graphics.Canvas getCanvas();
+    method public android.graphics.pdf.PdfDocument.PageInfo getInfo();
+  }
+
+  public static final class PdfDocument.PageInfo {
+    method public android.graphics.Rect getContentRect();
+    method public int getPageHeight();
+    method public int getPageNumber();
+    method public int getPageWidth();
+  }
+
+  public static final class PdfDocument.PageInfo.Builder {
+    ctor public PdfDocument.PageInfo.Builder(int, int, int);
+    method public android.graphics.pdf.PdfDocument.PageInfo create();
+    method public android.graphics.pdf.PdfDocument.PageInfo.Builder setContentRect(android.graphics.Rect);
+  }
+
+  public final class PdfRenderer implements java.lang.AutoCloseable {
+    ctor public PdfRenderer(@NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void close();
+    method public int getPageCount();
+    method public android.graphics.pdf.PdfRenderer.Page openPage(int);
+    method public boolean shouldScaleForPrinting();
+  }
+
+  public final class PdfRenderer.Page implements java.lang.AutoCloseable {
+    method public void close();
+    method public int getHeight();
+    method public int getIndex();
+    method public int getWidth();
+    method public void render(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @Nullable android.graphics.Matrix, int);
+    field public static final int RENDER_MODE_FOR_DISPLAY = 1; // 0x1
+    field public static final int RENDER_MODE_FOR_PRINT = 2; // 0x2
+  }
+
+}
+
+package android.graphics.text {
+
+  public class LineBreaker {
+    method @NonNull public android.graphics.text.LineBreaker.Result computeLineBreaks(@NonNull android.graphics.text.MeasuredText, @NonNull android.graphics.text.LineBreaker.ParagraphConstraints, @IntRange(from=0) int);
+    field public static final int BREAK_STRATEGY_BALANCED = 2; // 0x2
+    field public static final int BREAK_STRATEGY_HIGH_QUALITY = 1; // 0x1
+    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
+    field public static final int HYPHENATION_FREQUENCY_FULL = 2; // 0x2
+    field public static final int HYPHENATION_FREQUENCY_NONE = 0; // 0x0
+    field public static final int HYPHENATION_FREQUENCY_NORMAL = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_INTER_WORD = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_NONE = 0; // 0x0
+  }
+
+  public static final class LineBreaker.Builder {
+    ctor public LineBreaker.Builder();
+    method @NonNull public android.graphics.text.LineBreaker build();
+    method @NonNull public android.graphics.text.LineBreaker.Builder setBreakStrategy(int);
+    method @NonNull public android.graphics.text.LineBreaker.Builder setHyphenationFrequency(int);
+    method @NonNull public android.graphics.text.LineBreaker.Builder setIndents(@Nullable int[]);
+    method @NonNull public android.graphics.text.LineBreaker.Builder setJustificationMode(int);
+  }
+
+  public static class LineBreaker.ParagraphConstraints {
+    ctor public LineBreaker.ParagraphConstraints();
+    method @FloatRange(from=0) @Px public float getDefaultTabStop();
+    method @FloatRange(from=0.0f) @Px public float getFirstWidth();
+    method @IntRange(from=0) @Px public int getFirstWidthLineCount();
+    method @Nullable public float[] getTabStops();
+    method @FloatRange(from=0.0f) @Px public float getWidth();
+    method public void setIndent(@FloatRange(from=0.0f) @Px float, @IntRange(from=0) @Px int);
+    method public void setTabStops(@Nullable float[], @FloatRange(from=0) @Px float);
+    method public void setWidth(@FloatRange(from=0.0f) @Px float);
+  }
+
+  public static class LineBreaker.Result {
+    method public int getEndLineHyphenEdit(int);
+    method @Px public float getLineAscent(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getLineBreakOffset(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getLineCount();
+    method @Px public float getLineDescent(@IntRange(from=0) int);
+    method @Px public float getLineWidth(@IntRange(from=0) int);
+    method public int getStartLineHyphenEdit(int);
+    method public boolean hasLineTab(int);
+  }
+
+  public class MeasuredText {
+    method public void getBounds(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.Rect);
+    method @FloatRange(from=0.0f) @Px public float getCharWidthAt(@IntRange(from=0) int);
+    method @FloatRange(from=0.0) @Px public float getWidth(@IntRange(from=0) int, @IntRange(from=0) int);
+  }
+
+  public static final class MeasuredText.Builder {
+    ctor public MeasuredText.Builder(@NonNull char[]);
+    ctor public MeasuredText.Builder(@NonNull android.graphics.text.MeasuredText);
+    method @NonNull public android.graphics.text.MeasuredText.Builder appendReplacementRun(@NonNull android.graphics.Paint, @IntRange(from=0) int, @FloatRange(from=0) @Px float);
+    method @NonNull public android.graphics.text.MeasuredText.Builder appendStyleRun(@NonNull android.graphics.Paint, @IntRange(from=0) int, boolean);
+    method @NonNull public android.graphics.text.MeasuredText build();
+    method @NonNull public android.graphics.text.MeasuredText.Builder setComputeHyphenation(boolean);
+    method @NonNull public android.graphics.text.MeasuredText.Builder setComputeLayout(boolean);
+  }
+
+  public final class PositionedGlyphs {
+    method public float getAdvance();
+    method public float getAscent();
+    method public float getDescent();
+    method @NonNull public android.graphics.fonts.Font getFont(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getGlyphId(@IntRange(from=0) int);
+    method public float getGlyphX(@IntRange(from=0) int);
+    method public float getGlyphY(@IntRange(from=0) int);
+    method public float getOffsetX();
+    method public float getOffsetY();
+    method @IntRange(from=0) public int glyphCount();
+  }
+
+  public class TextRunShaper {
+    method @NonNull public static android.graphics.text.PositionedGlyphs shapeTextRun(@NonNull char[], int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method @NonNull public static android.graphics.text.PositionedGlyphs shapeTextRun(@NonNull CharSequence, int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+  }
+
+}
+
+package android.hardware {
+
+  public abstract class BatteryState {
+    ctor public BatteryState();
+    method @FloatRange(from=-1.0F, to=1.0f) public abstract float getCapacity();
+    method public abstract int getStatus();
+    method public abstract boolean isPresent();
+    field public static final int STATUS_CHARGING = 2; // 0x2
+    field public static final int STATUS_DISCHARGING = 3; // 0x3
+    field public static final int STATUS_FULL = 5; // 0x5
+    field public static final int STATUS_NOT_CHARGING = 4; // 0x4
+    field public static final int STATUS_UNKNOWN = 1; // 0x1
+  }
+
+  @Deprecated public class Camera {
+    method @Deprecated public final void addCallbackBuffer(byte[]);
+    method @Deprecated public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
+    method @Deprecated public final void cancelAutoFocus();
+    method @Deprecated public final boolean enableShutterSound(boolean);
+    method @Deprecated protected void finalize();
+    method @Deprecated public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
+    method @Deprecated public static int getNumberOfCameras();
+    method @Deprecated public android.hardware.Camera.Parameters getParameters();
+    method @Deprecated public final void lock();
+    method @Deprecated public static android.hardware.Camera open(int);
+    method @Deprecated public static android.hardware.Camera open();
+    method @Deprecated public final void reconnect() throws java.io.IOException;
+    method @Deprecated public final void release();
+    method @Deprecated public void setAutoFocusMoveCallback(android.hardware.Camera.AutoFocusMoveCallback);
+    method @Deprecated public final void setDisplayOrientation(int);
+    method @Deprecated public final void setErrorCallback(android.hardware.Camera.ErrorCallback);
+    method @Deprecated public final void setFaceDetectionListener(android.hardware.Camera.FaceDetectionListener);
+    method @Deprecated public final void setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback);
+    method @Deprecated public void setParameters(android.hardware.Camera.Parameters);
+    method @Deprecated public final void setPreviewCallback(android.hardware.Camera.PreviewCallback);
+    method @Deprecated public final void setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback);
+    method @Deprecated public final void setPreviewDisplay(android.view.SurfaceHolder) throws java.io.IOException;
+    method @Deprecated public final void setPreviewTexture(android.graphics.SurfaceTexture) throws java.io.IOException;
+    method @Deprecated public final void setZoomChangeListener(android.hardware.Camera.OnZoomChangeListener);
+    method @Deprecated public final void startFaceDetection();
+    method @Deprecated public final void startPreview();
+    method @Deprecated public final void startSmoothZoom(int);
+    method @Deprecated public final void stopFaceDetection();
+    method @Deprecated public final void stopPreview();
+    method @Deprecated public final void stopSmoothZoom();
+    method @Deprecated public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback);
+    method @Deprecated public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback);
+    method @Deprecated public final void unlock();
+    field @Deprecated public static final String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE";
+    field @Deprecated public static final String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO";
+    field @Deprecated public static final int CAMERA_ERROR_EVICTED = 2; // 0x2
+    field @Deprecated public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64
+    field @Deprecated public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  @Deprecated public static class Camera.Area {
+    ctor @Deprecated public Camera.Area(android.graphics.Rect, int);
+    field @Deprecated public android.graphics.Rect rect;
+    field @Deprecated public int weight;
+  }
+
+  @Deprecated public static interface Camera.AutoFocusCallback {
+    method @Deprecated public void onAutoFocus(boolean, android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.AutoFocusMoveCallback {
+    method @Deprecated public void onAutoFocusMoving(boolean, android.hardware.Camera);
+  }
+
+  @Deprecated public static class Camera.CameraInfo {
+    ctor @Deprecated public Camera.CameraInfo();
+    field @Deprecated public static final int CAMERA_FACING_BACK = 0; // 0x0
+    field @Deprecated public static final int CAMERA_FACING_FRONT = 1; // 0x1
+    field @Deprecated public boolean canDisableShutterSound;
+    field @Deprecated public int facing;
+    field @Deprecated public int orientation;
+  }
+
+  @Deprecated public static interface Camera.ErrorCallback {
+    method @Deprecated public void onError(int, android.hardware.Camera);
+  }
+
+  @Deprecated public static class Camera.Face {
+    ctor @Deprecated public Camera.Face();
+    field @Deprecated public int id;
+    field @Deprecated public android.graphics.Point leftEye;
+    field @Deprecated public android.graphics.Point mouth;
+    field @Deprecated public android.graphics.Rect rect;
+    field @Deprecated public android.graphics.Point rightEye;
+    field @Deprecated public int score;
+  }
+
+  @Deprecated public static interface Camera.FaceDetectionListener {
+    method @Deprecated public void onFaceDetection(android.hardware.Camera.Face[], android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.OnZoomChangeListener {
+    method @Deprecated public void onZoomChange(int, boolean, android.hardware.Camera);
+  }
+
+  @Deprecated public class Camera.Parameters {
+    method @Deprecated public String flatten();
+    method @Deprecated public String get(String);
+    method @Deprecated public String getAntibanding();
+    method @Deprecated public boolean getAutoExposureLock();
+    method @Deprecated public boolean getAutoWhiteBalanceLock();
+    method @Deprecated public String getColorEffect();
+    method @Deprecated public int getExposureCompensation();
+    method @Deprecated public float getExposureCompensationStep();
+    method @Deprecated public String getFlashMode();
+    method @Deprecated public float getFocalLength();
+    method @Deprecated public java.util.List<android.hardware.Camera.Area> getFocusAreas();
+    method @Deprecated public void getFocusDistances(float[]);
+    method @Deprecated public String getFocusMode();
+    method @Deprecated public float getHorizontalViewAngle();
+    method @Deprecated public int getInt(String);
+    method @Deprecated public int getJpegQuality();
+    method @Deprecated public int getJpegThumbnailQuality();
+    method @Deprecated public android.hardware.Camera.Size getJpegThumbnailSize();
+    method @Deprecated public int getMaxExposureCompensation();
+    method @Deprecated public int getMaxNumDetectedFaces();
+    method @Deprecated public int getMaxNumFocusAreas();
+    method @Deprecated public int getMaxNumMeteringAreas();
+    method @Deprecated public int getMaxZoom();
+    method @Deprecated public java.util.List<android.hardware.Camera.Area> getMeteringAreas();
+    method @Deprecated public int getMinExposureCompensation();
+    method @Deprecated public int getPictureFormat();
+    method @Deprecated public android.hardware.Camera.Size getPictureSize();
+    method @Deprecated public android.hardware.Camera.Size getPreferredPreviewSizeForVideo();
+    method @Deprecated public int getPreviewFormat();
+    method @Deprecated public void getPreviewFpsRange(int[]);
+    method @Deprecated public int getPreviewFrameRate();
+    method @Deprecated public android.hardware.Camera.Size getPreviewSize();
+    method @Deprecated public String getSceneMode();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedAntibanding();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedColorEffects();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedFlashModes();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedFocusModes();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedJpegThumbnailSizes();
+    method @Deprecated public java.util.List<java.lang.Integer> getSupportedPictureFormats();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedPictureSizes();
+    method @Deprecated public java.util.List<java.lang.Integer> getSupportedPreviewFormats();
+    method @Deprecated public java.util.List<int[]> getSupportedPreviewFpsRange();
+    method @Deprecated public java.util.List<java.lang.Integer> getSupportedPreviewFrameRates();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedPreviewSizes();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedSceneModes();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedVideoSizes();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedWhiteBalance();
+    method @Deprecated public float getVerticalViewAngle();
+    method @Deprecated public boolean getVideoStabilization();
+    method @Deprecated public String getWhiteBalance();
+    method @Deprecated public int getZoom();
+    method @Deprecated public java.util.List<java.lang.Integer> getZoomRatios();
+    method @Deprecated public boolean isAutoExposureLockSupported();
+    method @Deprecated public boolean isAutoWhiteBalanceLockSupported();
+    method @Deprecated public boolean isSmoothZoomSupported();
+    method @Deprecated public boolean isVideoSnapshotSupported();
+    method @Deprecated public boolean isVideoStabilizationSupported();
+    method @Deprecated public boolean isZoomSupported();
+    method @Deprecated public void remove(String);
+    method @Deprecated public void removeGpsData();
+    method @Deprecated public void set(String, String);
+    method @Deprecated public void set(String, int);
+    method @Deprecated public void setAntibanding(String);
+    method @Deprecated public void setAutoExposureLock(boolean);
+    method @Deprecated public void setAutoWhiteBalanceLock(boolean);
+    method @Deprecated public void setColorEffect(String);
+    method @Deprecated public void setExposureCompensation(int);
+    method @Deprecated public void setFlashMode(String);
+    method @Deprecated public void setFocusAreas(java.util.List<android.hardware.Camera.Area>);
+    method @Deprecated public void setFocusMode(String);
+    method @Deprecated public void setGpsAltitude(double);
+    method @Deprecated public void setGpsLatitude(double);
+    method @Deprecated public void setGpsLongitude(double);
+    method @Deprecated public void setGpsProcessingMethod(String);
+    method @Deprecated public void setGpsTimestamp(long);
+    method @Deprecated public void setJpegQuality(int);
+    method @Deprecated public void setJpegThumbnailQuality(int);
+    method @Deprecated public void setJpegThumbnailSize(int, int);
+    method @Deprecated public void setMeteringAreas(java.util.List<android.hardware.Camera.Area>);
+    method @Deprecated public void setPictureFormat(int);
+    method @Deprecated public void setPictureSize(int, int);
+    method @Deprecated public void setPreviewFormat(int);
+    method @Deprecated public void setPreviewFpsRange(int, int);
+    method @Deprecated public void setPreviewFrameRate(int);
+    method @Deprecated public void setPreviewSize(int, int);
+    method @Deprecated public void setRecordingHint(boolean);
+    method @Deprecated public void setRotation(int);
+    method @Deprecated public void setSceneMode(String);
+    method @Deprecated public void setVideoStabilization(boolean);
+    method @Deprecated public void setWhiteBalance(String);
+    method @Deprecated public void setZoom(int);
+    method @Deprecated public void unflatten(String);
+    field @Deprecated public static final String ANTIBANDING_50HZ = "50hz";
+    field @Deprecated public static final String ANTIBANDING_60HZ = "60hz";
+    field @Deprecated public static final String ANTIBANDING_AUTO = "auto";
+    field @Deprecated public static final String ANTIBANDING_OFF = "off";
+    field @Deprecated public static final String EFFECT_AQUA = "aqua";
+    field @Deprecated public static final String EFFECT_BLACKBOARD = "blackboard";
+    field @Deprecated public static final String EFFECT_MONO = "mono";
+    field @Deprecated public static final String EFFECT_NEGATIVE = "negative";
+    field @Deprecated public static final String EFFECT_NONE = "none";
+    field @Deprecated public static final String EFFECT_POSTERIZE = "posterize";
+    field @Deprecated public static final String EFFECT_SEPIA = "sepia";
+    field @Deprecated public static final String EFFECT_SOLARIZE = "solarize";
+    field @Deprecated public static final String EFFECT_WHITEBOARD = "whiteboard";
+    field @Deprecated public static final String FLASH_MODE_AUTO = "auto";
+    field @Deprecated public static final String FLASH_MODE_OFF = "off";
+    field @Deprecated public static final String FLASH_MODE_ON = "on";
+    field @Deprecated public static final String FLASH_MODE_RED_EYE = "red-eye";
+    field @Deprecated public static final String FLASH_MODE_TORCH = "torch";
+    field @Deprecated public static final int FOCUS_DISTANCE_FAR_INDEX = 2; // 0x2
+    field @Deprecated public static final int FOCUS_DISTANCE_NEAR_INDEX = 0; // 0x0
+    field @Deprecated public static final int FOCUS_DISTANCE_OPTIMAL_INDEX = 1; // 0x1
+    field @Deprecated public static final String FOCUS_MODE_AUTO = "auto";
+    field @Deprecated public static final String FOCUS_MODE_CONTINUOUS_PICTURE = "continuous-picture";
+    field @Deprecated public static final String FOCUS_MODE_CONTINUOUS_VIDEO = "continuous-video";
+    field @Deprecated public static final String FOCUS_MODE_EDOF = "edof";
+    field @Deprecated public static final String FOCUS_MODE_FIXED = "fixed";
+    field @Deprecated public static final String FOCUS_MODE_INFINITY = "infinity";
+    field @Deprecated public static final String FOCUS_MODE_MACRO = "macro";
+    field @Deprecated public static final int PREVIEW_FPS_MAX_INDEX = 1; // 0x1
+    field @Deprecated public static final int PREVIEW_FPS_MIN_INDEX = 0; // 0x0
+    field @Deprecated public static final String SCENE_MODE_ACTION = "action";
+    field @Deprecated public static final String SCENE_MODE_AUTO = "auto";
+    field @Deprecated public static final String SCENE_MODE_BARCODE = "barcode";
+    field @Deprecated public static final String SCENE_MODE_BEACH = "beach";
+    field @Deprecated public static final String SCENE_MODE_CANDLELIGHT = "candlelight";
+    field @Deprecated public static final String SCENE_MODE_FIREWORKS = "fireworks";
+    field @Deprecated public static final String SCENE_MODE_HDR = "hdr";
+    field @Deprecated public static final String SCENE_MODE_LANDSCAPE = "landscape";
+    field @Deprecated public static final String SCENE_MODE_NIGHT = "night";
+    field @Deprecated public static final String SCENE_MODE_NIGHT_PORTRAIT = "night-portrait";
+    field @Deprecated public static final String SCENE_MODE_PARTY = "party";
+    field @Deprecated public static final String SCENE_MODE_PORTRAIT = "portrait";
+    field @Deprecated public static final String SCENE_MODE_SNOW = "snow";
+    field @Deprecated public static final String SCENE_MODE_SPORTS = "sports";
+    field @Deprecated public static final String SCENE_MODE_STEADYPHOTO = "steadyphoto";
+    field @Deprecated public static final String SCENE_MODE_SUNSET = "sunset";
+    field @Deprecated public static final String SCENE_MODE_THEATRE = "theatre";
+    field @Deprecated public static final String WHITE_BALANCE_AUTO = "auto";
+    field @Deprecated public static final String WHITE_BALANCE_CLOUDY_DAYLIGHT = "cloudy-daylight";
+    field @Deprecated public static final String WHITE_BALANCE_DAYLIGHT = "daylight";
+    field @Deprecated public static final String WHITE_BALANCE_FLUORESCENT = "fluorescent";
+    field @Deprecated public static final String WHITE_BALANCE_INCANDESCENT = "incandescent";
+    field @Deprecated public static final String WHITE_BALANCE_SHADE = "shade";
+    field @Deprecated public static final String WHITE_BALANCE_TWILIGHT = "twilight";
+    field @Deprecated public static final String WHITE_BALANCE_WARM_FLUORESCENT = "warm-fluorescent";
+  }
+
+  @Deprecated public static interface Camera.PictureCallback {
+    method @Deprecated public void onPictureTaken(byte[], android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.PreviewCallback {
+    method @Deprecated public void onPreviewFrame(byte[], android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.ShutterCallback {
+    method @Deprecated public void onShutter();
+  }
+
+  @Deprecated public class Camera.Size {
+    ctor @Deprecated public Camera.Size(int, int);
+    field @Deprecated public int height;
+    field @Deprecated public int width;
+  }
+
+  public final class ConsumerIrManager {
+    method public android.hardware.ConsumerIrManager.CarrierFrequencyRange[] getCarrierFrequencies();
+    method public boolean hasIrEmitter();
+    method public void transmit(int, int[]);
+  }
+
+  public final class ConsumerIrManager.CarrierFrequencyRange {
+    ctor public ConsumerIrManager.CarrierFrequencyRange(int, int);
+    method public int getMaxFrequency();
+    method public int getMinFrequency();
+  }
+
+  public class GeomagneticField {
+    ctor public GeomagneticField(float, float, float, long);
+    method public float getDeclination();
+    method public float getFieldStrength();
+    method public float getHorizontalStrength();
+    method public float getInclination();
+    method public float getX();
+    method public float getY();
+    method public float getZ();
+  }
+
+  public final class HardwareBuffer implements java.lang.AutoCloseable android.os.Parcelable {
+    method public void close();
+    method @NonNull public static android.hardware.HardwareBuffer create(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int, long);
+    method public int describeContents();
+    method public int getFormat();
+    method public int getHeight();
+    method public int getLayers();
+    method public long getUsage();
+    method public int getWidth();
+    method public boolean isClosed();
+    method public static boolean isSupported(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int, long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BLOB = 33; // 0x21
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.HardwareBuffer> CREATOR;
+    field public static final int DS_24UI8 = 50; // 0x32
+    field public static final int DS_FP32UI8 = 52; // 0x34
+    field public static final int D_16 = 48; // 0x30
+    field public static final int D_24 = 49; // 0x31
+    field public static final int D_FP32 = 51; // 0x33
+    field public static final int RGBA_1010102 = 43; // 0x2b
+    field public static final int RGBA_8888 = 1; // 0x1
+    field public static final int RGBA_FP16 = 22; // 0x16
+    field public static final int RGBX_8888 = 2; // 0x2
+    field public static final int RGB_565 = 4; // 0x4
+    field public static final int RGB_888 = 3; // 0x3
+    field public static final int S_UI8 = 53; // 0x35
+    field public static final long USAGE_CPU_READ_OFTEN = 3L; // 0x3L
+    field public static final long USAGE_CPU_READ_RARELY = 2L; // 0x2L
+    field public static final long USAGE_CPU_WRITE_OFTEN = 48L; // 0x30L
+    field public static final long USAGE_CPU_WRITE_RARELY = 32L; // 0x20L
+    field public static final long USAGE_GPU_COLOR_OUTPUT = 512L; // 0x200L
+    field public static final long USAGE_GPU_CUBE_MAP = 33554432L; // 0x2000000L
+    field public static final long USAGE_GPU_DATA_BUFFER = 16777216L; // 0x1000000L
+    field public static final long USAGE_GPU_MIPMAP_COMPLETE = 67108864L; // 0x4000000L
+    field public static final long USAGE_GPU_SAMPLED_IMAGE = 256L; // 0x100L
+    field public static final long USAGE_PROTECTED_CONTENT = 16384L; // 0x4000L
+    field public static final long USAGE_SENSOR_DIRECT_DATA = 8388608L; // 0x800000L
+    field public static final long USAGE_VIDEO_ENCODE = 65536L; // 0x10000L
+    field public static final int YCBCR_420_888 = 35; // 0x23
+  }
+
+  public final class Sensor {
+    method public int getFifoMaxEventCount();
+    method public int getFifoReservedEventCount();
+    method public int getHighestDirectReportRateLevel();
+    method public int getId();
+    method public int getMaxDelay();
+    method public float getMaximumRange();
+    method public int getMinDelay();
+    method public String getName();
+    method public float getPower();
+    method public int getReportingMode();
+    method public float getResolution();
+    method public String getStringType();
+    method public int getType();
+    method public String getVendor();
+    method public int getVersion();
+    method public boolean isAdditionalInfoSupported();
+    method public boolean isDirectChannelTypeSupported(int);
+    method public boolean isDynamicSensor();
+    method public boolean isWakeUpSensor();
+    field public static final int REPORTING_MODE_CONTINUOUS = 0; // 0x0
+    field public static final int REPORTING_MODE_ONE_SHOT = 2; // 0x2
+    field public static final int REPORTING_MODE_ON_CHANGE = 1; // 0x1
+    field public static final int REPORTING_MODE_SPECIAL_TRIGGER = 3; // 0x3
+    field public static final String STRING_TYPE_ACCELEROMETER = "android.sensor.accelerometer";
+    field public static final String STRING_TYPE_ACCELEROMETER_UNCALIBRATED = "android.sensor.accelerometer_uncalibrated";
+    field public static final String STRING_TYPE_AMBIENT_TEMPERATURE = "android.sensor.ambient_temperature";
+    field public static final String STRING_TYPE_GAME_ROTATION_VECTOR = "android.sensor.game_rotation_vector";
+    field public static final String STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR = "android.sensor.geomagnetic_rotation_vector";
+    field public static final String STRING_TYPE_GRAVITY = "android.sensor.gravity";
+    field public static final String STRING_TYPE_GYROSCOPE = "android.sensor.gyroscope";
+    field public static final String STRING_TYPE_GYROSCOPE_UNCALIBRATED = "android.sensor.gyroscope_uncalibrated";
+    field public static final String STRING_TYPE_HEART_BEAT = "android.sensor.heart_beat";
+    field public static final String STRING_TYPE_HEART_RATE = "android.sensor.heart_rate";
+    field public static final String STRING_TYPE_HINGE_ANGLE = "android.sensor.hinge_angle";
+    field public static final String STRING_TYPE_LIGHT = "android.sensor.light";
+    field public static final String STRING_TYPE_LINEAR_ACCELERATION = "android.sensor.linear_acceleration";
+    field public static final String STRING_TYPE_LOW_LATENCY_OFFBODY_DETECT = "android.sensor.low_latency_offbody_detect";
+    field public static final String STRING_TYPE_MAGNETIC_FIELD = "android.sensor.magnetic_field";
+    field public static final String STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED = "android.sensor.magnetic_field_uncalibrated";
+    field public static final String STRING_TYPE_MOTION_DETECT = "android.sensor.motion_detect";
+    field @Deprecated public static final String STRING_TYPE_ORIENTATION = "android.sensor.orientation";
+    field public static final String STRING_TYPE_POSE_6DOF = "android.sensor.pose_6dof";
+    field public static final String STRING_TYPE_PRESSURE = "android.sensor.pressure";
+    field public static final String STRING_TYPE_PROXIMITY = "android.sensor.proximity";
+    field public static final String STRING_TYPE_RELATIVE_HUMIDITY = "android.sensor.relative_humidity";
+    field public static final String STRING_TYPE_ROTATION_VECTOR = "android.sensor.rotation_vector";
+    field public static final String STRING_TYPE_SIGNIFICANT_MOTION = "android.sensor.significant_motion";
+    field public static final String STRING_TYPE_STATIONARY_DETECT = "android.sensor.stationary_detect";
+    field public static final String STRING_TYPE_STEP_COUNTER = "android.sensor.step_counter";
+    field public static final String STRING_TYPE_STEP_DETECTOR = "android.sensor.step_detector";
+    field @Deprecated public static final String STRING_TYPE_TEMPERATURE = "android.sensor.temperature";
+    field public static final int TYPE_ACCELEROMETER = 1; // 0x1
+    field public static final int TYPE_ACCELEROMETER_UNCALIBRATED = 35; // 0x23
+    field public static final int TYPE_ALL = -1; // 0xffffffff
+    field public static final int TYPE_AMBIENT_TEMPERATURE = 13; // 0xd
+    field public static final int TYPE_DEVICE_PRIVATE_BASE = 65536; // 0x10000
+    field public static final int TYPE_GAME_ROTATION_VECTOR = 15; // 0xf
+    field public static final int TYPE_GEOMAGNETIC_ROTATION_VECTOR = 20; // 0x14
+    field public static final int TYPE_GRAVITY = 9; // 0x9
+    field public static final int TYPE_GYROSCOPE = 4; // 0x4
+    field public static final int TYPE_GYROSCOPE_UNCALIBRATED = 16; // 0x10
+    field public static final int TYPE_HEART_BEAT = 31; // 0x1f
+    field public static final int TYPE_HEART_RATE = 21; // 0x15
+    field public static final int TYPE_HINGE_ANGLE = 36; // 0x24
+    field public static final int TYPE_LIGHT = 5; // 0x5
+    field public static final int TYPE_LINEAR_ACCELERATION = 10; // 0xa
+    field public static final int TYPE_LOW_LATENCY_OFFBODY_DETECT = 34; // 0x22
+    field public static final int TYPE_MAGNETIC_FIELD = 2; // 0x2
+    field public static final int TYPE_MAGNETIC_FIELD_UNCALIBRATED = 14; // 0xe
+    field public static final int TYPE_MOTION_DETECT = 30; // 0x1e
+    field @Deprecated public static final int TYPE_ORIENTATION = 3; // 0x3
+    field public static final int TYPE_POSE_6DOF = 28; // 0x1c
+    field public static final int TYPE_PRESSURE = 6; // 0x6
+    field public static final int TYPE_PROXIMITY = 8; // 0x8
+    field public static final int TYPE_RELATIVE_HUMIDITY = 12; // 0xc
+    field public static final int TYPE_ROTATION_VECTOR = 11; // 0xb
+    field public static final int TYPE_SIGNIFICANT_MOTION = 17; // 0x11
+    field public static final int TYPE_STATIONARY_DETECT = 29; // 0x1d
+    field public static final int TYPE_STEP_COUNTER = 19; // 0x13
+    field public static final int TYPE_STEP_DETECTOR = 18; // 0x12
+    field @Deprecated public static final int TYPE_TEMPERATURE = 7; // 0x7
+  }
+
+  public class SensorAdditionalInfo {
+    field public static final int TYPE_FRAME_BEGIN = 0; // 0x0
+    field public static final int TYPE_FRAME_END = 1; // 0x1
+    field public static final int TYPE_INTERNAL_TEMPERATURE = 65537; // 0x10001
+    field public static final int TYPE_SAMPLING = 65540; // 0x10004
+    field public static final int TYPE_SENSOR_PLACEMENT = 65539; // 0x10003
+    field public static final int TYPE_UNTRACKED_DELAY = 65536; // 0x10000
+    field public static final int TYPE_VEC3_CALIBRATION = 65538; // 0x10002
+    field public final float[] floatValues;
+    field public final int[] intValues;
+    field public final android.hardware.Sensor sensor;
+    field public final int serial;
+    field public final int type;
+  }
+
+  public final class SensorDirectChannel implements java.nio.channels.Channel {
+    method public void close();
+    method public int configure(android.hardware.Sensor, int);
+    method public boolean isOpen();
+    field public static final int RATE_FAST = 2; // 0x2
+    field public static final int RATE_NORMAL = 1; // 0x1
+    field public static final int RATE_STOP = 0; // 0x0
+    field public static final int RATE_VERY_FAST = 3; // 0x3
+    field public static final int TYPE_HARDWARE_BUFFER = 2; // 0x2
+    field public static final int TYPE_MEMORY_FILE = 1; // 0x1
+  }
+
+  public class SensorEvent {
+    field public int accuracy;
+    field public android.hardware.Sensor sensor;
+    field public long timestamp;
+    field public final float[] values;
+  }
+
+  public abstract class SensorEventCallback implements android.hardware.SensorEventListener2 {
+    ctor public SensorEventCallback();
+    method public void onAccuracyChanged(android.hardware.Sensor, int);
+    method public void onFlushCompleted(android.hardware.Sensor);
+    method public void onSensorAdditionalInfo(android.hardware.SensorAdditionalInfo);
+    method public void onSensorChanged(android.hardware.SensorEvent);
+  }
+
+  public interface SensorEventListener {
+    method public void onAccuracyChanged(android.hardware.Sensor, int);
+    method public void onSensorChanged(android.hardware.SensorEvent);
+  }
+
+  public interface SensorEventListener2 extends android.hardware.SensorEventListener {
+    method public void onFlushCompleted(android.hardware.Sensor);
+  }
+
+  @Deprecated public interface SensorListener {
+    method @Deprecated public void onAccuracyChanged(int, int);
+    method @Deprecated public void onSensorChanged(int, float[]);
+  }
+
+  public abstract class SensorManager {
+    method public boolean cancelTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor);
+    method public android.hardware.SensorDirectChannel createDirectChannel(android.os.MemoryFile);
+    method public android.hardware.SensorDirectChannel createDirectChannel(android.hardware.HardwareBuffer);
+    method public boolean flush(android.hardware.SensorEventListener);
+    method public static float getAltitude(float, float);
+    method public static void getAngleChange(float[], float[], float[]);
+    method public android.hardware.Sensor getDefaultSensor(int);
+    method public android.hardware.Sensor getDefaultSensor(int, boolean);
+    method public java.util.List<android.hardware.Sensor> getDynamicSensorList(int);
+    method public static float getInclination(float[]);
+    method public static float[] getOrientation(float[], float[]);
+    method public static void getQuaternionFromVector(float[], float[]);
+    method public static boolean getRotationMatrix(float[], float[], float[], float[]);
+    method public static void getRotationMatrixFromVector(float[], float[]);
+    method public java.util.List<android.hardware.Sensor> getSensorList(int);
+    method @Deprecated public int getSensors();
+    method public boolean isDynamicSensorDiscoverySupported();
+    method public void registerDynamicSensorCallback(android.hardware.SensorManager.DynamicSensorCallback);
+    method public void registerDynamicSensorCallback(android.hardware.SensorManager.DynamicSensorCallback, android.os.Handler);
+    method @Deprecated public boolean registerListener(android.hardware.SensorListener, int);
+    method @Deprecated public boolean registerListener(android.hardware.SensorListener, int, int);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, android.os.Handler);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int, android.os.Handler);
+    method public static boolean remapCoordinateSystem(float[], int, int, float[]);
+    method public boolean requestTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor);
+    method public void unregisterDynamicSensorCallback(android.hardware.SensorManager.DynamicSensorCallback);
+    method @Deprecated public void unregisterListener(android.hardware.SensorListener);
+    method @Deprecated public void unregisterListener(android.hardware.SensorListener, int);
+    method public void unregisterListener(android.hardware.SensorEventListener, android.hardware.Sensor);
+    method public void unregisterListener(android.hardware.SensorEventListener);
+    field public static final int AXIS_MINUS_X = 129; // 0x81
+    field public static final int AXIS_MINUS_Y = 130; // 0x82
+    field public static final int AXIS_MINUS_Z = 131; // 0x83
+    field public static final int AXIS_X = 1; // 0x1
+    field public static final int AXIS_Y = 2; // 0x2
+    field public static final int AXIS_Z = 3; // 0x3
+    field @Deprecated public static final int DATA_X = 0; // 0x0
+    field @Deprecated public static final int DATA_Y = 1; // 0x1
+    field @Deprecated public static final int DATA_Z = 2; // 0x2
+    field public static final float GRAVITY_DEATH_STAR_I = 3.5303614E-7f;
+    field public static final float GRAVITY_EARTH = 9.80665f;
+    field public static final float GRAVITY_JUPITER = 23.12f;
+    field public static final float GRAVITY_MARS = 3.71f;
+    field public static final float GRAVITY_MERCURY = 3.7f;
+    field public static final float GRAVITY_MOON = 1.6f;
+    field public static final float GRAVITY_NEPTUNE = 11.0f;
+    field public static final float GRAVITY_PLUTO = 0.6f;
+    field public static final float GRAVITY_SATURN = 8.96f;
+    field public static final float GRAVITY_SUN = 275.0f;
+    field public static final float GRAVITY_THE_ISLAND = 4.815162f;
+    field public static final float GRAVITY_URANUS = 8.69f;
+    field public static final float GRAVITY_VENUS = 8.87f;
+    field public static final float LIGHT_CLOUDY = 100.0f;
+    field public static final float LIGHT_FULLMOON = 0.25f;
+    field public static final float LIGHT_NO_MOON = 0.001f;
+    field public static final float LIGHT_OVERCAST = 10000.0f;
+    field public static final float LIGHT_SHADE = 20000.0f;
+    field public static final float LIGHT_SUNLIGHT = 110000.0f;
+    field public static final float LIGHT_SUNLIGHT_MAX = 120000.0f;
+    field public static final float LIGHT_SUNRISE = 400.0f;
+    field public static final float MAGNETIC_FIELD_EARTH_MAX = 60.0f;
+    field public static final float MAGNETIC_FIELD_EARTH_MIN = 30.0f;
+    field public static final float PRESSURE_STANDARD_ATMOSPHERE = 1013.25f;
+    field @Deprecated public static final int RAW_DATA_INDEX = 3; // 0x3
+    field @Deprecated public static final int RAW_DATA_X = 3; // 0x3
+    field @Deprecated public static final int RAW_DATA_Y = 4; // 0x4
+    field @Deprecated public static final int RAW_DATA_Z = 5; // 0x5
+    field @Deprecated public static final int SENSOR_ACCELEROMETER = 2; // 0x2
+    field @Deprecated public static final int SENSOR_ALL = 127; // 0x7f
+    field public static final int SENSOR_DELAY_FASTEST = 0; // 0x0
+    field public static final int SENSOR_DELAY_GAME = 1; // 0x1
+    field public static final int SENSOR_DELAY_NORMAL = 3; // 0x3
+    field public static final int SENSOR_DELAY_UI = 2; // 0x2
+    field @Deprecated public static final int SENSOR_LIGHT = 16; // 0x10
+    field @Deprecated public static final int SENSOR_MAGNETIC_FIELD = 8; // 0x8
+    field @Deprecated public static final int SENSOR_MAX = 64; // 0x40
+    field @Deprecated public static final int SENSOR_MIN = 1; // 0x1
+    field @Deprecated public static final int SENSOR_ORIENTATION = 1; // 0x1
+    field @Deprecated public static final int SENSOR_ORIENTATION_RAW = 128; // 0x80
+    field @Deprecated public static final int SENSOR_PROXIMITY = 32; // 0x20
+    field public static final int SENSOR_STATUS_ACCURACY_HIGH = 3; // 0x3
+    field public static final int SENSOR_STATUS_ACCURACY_LOW = 1; // 0x1
+    field public static final int SENSOR_STATUS_ACCURACY_MEDIUM = 2; // 0x2
+    field public static final int SENSOR_STATUS_NO_CONTACT = -1; // 0xffffffff
+    field public static final int SENSOR_STATUS_UNRELIABLE = 0; // 0x0
+    field @Deprecated public static final int SENSOR_TEMPERATURE = 4; // 0x4
+    field @Deprecated public static final int SENSOR_TRICORDER = 64; // 0x40
+    field public static final float STANDARD_GRAVITY = 9.80665f;
+  }
+
+  public abstract static class SensorManager.DynamicSensorCallback {
+    ctor public SensorManager.DynamicSensorCallback();
+    method public void onDynamicSensorConnected(android.hardware.Sensor);
+    method public void onDynamicSensorDisconnected(android.hardware.Sensor);
+  }
+
+  public final class SensorPrivacyManager {
+    method public boolean supportsSensorToggle(int);
+  }
+
+  public static class SensorPrivacyManager.Sensors {
+    field public static final int CAMERA = 2; // 0x2
+    field public static final int MICROPHONE = 1; // 0x1
+  }
+
+  public final class TriggerEvent {
+    field public android.hardware.Sensor sensor;
+    field public long timestamp;
+    field public final float[] values;
+  }
+
+  public abstract class TriggerEventListener {
+    ctor public TriggerEventListener();
+    method public abstract void onTrigger(android.hardware.TriggerEvent);
+  }
+
+}
+
+package android.hardware.biometrics {
+
+  public class BiometricManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public int canAuthenticate();
+    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public int canAuthenticate(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public android.hardware.biometrics.BiometricManager.Strings getStrings(int);
+    field public static final int BIOMETRIC_ERROR_HW_UNAVAILABLE = 1; // 0x1
+    field public static final int BIOMETRIC_ERROR_NONE_ENROLLED = 11; // 0xb
+    field public static final int BIOMETRIC_ERROR_NO_HARDWARE = 12; // 0xc
+    field public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
+    field public static final int BIOMETRIC_SUCCESS = 0; // 0x0
+  }
+
+  public static interface BiometricManager.Authenticators {
+    field public static final int BIOMETRIC_STRONG = 15; // 0xf
+    field public static final int BIOMETRIC_WEAK = 255; // 0xff
+    field public static final int DEVICE_CREDENTIAL = 32768; // 0x8000
+  }
+
+  public static class BiometricManager.Strings {
+    method @Nullable @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence getButtonLabel();
+    method @Nullable @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence getPromptMessage();
+    method @Nullable @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence getSettingName();
+  }
+
+  public class BiometricPrompt {
+    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public void authenticate(@NonNull android.hardware.biometrics.BiometricPrompt.CryptoObject, @NonNull android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.biometrics.BiometricPrompt.AuthenticationCallback);
+    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public void authenticate(@NonNull android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.biometrics.BiometricPrompt.AuthenticationCallback);
+    method @Nullable public int getAllowedAuthenticators();
+    method @Nullable public CharSequence getDescription();
+    method @Nullable public CharSequence getNegativeButtonText();
+    method @Nullable public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method public boolean isConfirmationRequired();
+    field public static final int AUTHENTICATION_RESULT_TYPE_BIOMETRIC = 2; // 0x2
+    field public static final int AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL = 1; // 0x1
+    field public static final int BIOMETRIC_ACQUIRED_GOOD = 0; // 0x0
+    field public static final int BIOMETRIC_ACQUIRED_IMAGER_DIRTY = 3; // 0x3
+    field public static final int BIOMETRIC_ACQUIRED_INSUFFICIENT = 2; // 0x2
+    field public static final int BIOMETRIC_ACQUIRED_PARTIAL = 1; // 0x1
+    field public static final int BIOMETRIC_ACQUIRED_TOO_FAST = 5; // 0x5
+    field public static final int BIOMETRIC_ACQUIRED_TOO_SLOW = 4; // 0x4
+    field public static final int BIOMETRIC_ERROR_CANCELED = 5; // 0x5
+    field public static final int BIOMETRIC_ERROR_HW_NOT_PRESENT = 12; // 0xc
+    field public static final int BIOMETRIC_ERROR_HW_UNAVAILABLE = 1; // 0x1
+    field public static final int BIOMETRIC_ERROR_LOCKOUT = 7; // 0x7
+    field public static final int BIOMETRIC_ERROR_LOCKOUT_PERMANENT = 9; // 0x9
+    field public static final int BIOMETRIC_ERROR_NO_BIOMETRICS = 11; // 0xb
+    field public static final int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
+    field public static final int BIOMETRIC_ERROR_NO_SPACE = 4; // 0x4
+    field public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
+    field public static final int BIOMETRIC_ERROR_TIMEOUT = 3; // 0x3
+    field public static final int BIOMETRIC_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
+    field public static final int BIOMETRIC_ERROR_USER_CANCELED = 10; // 0xa
+    field public static final int BIOMETRIC_ERROR_VENDOR = 8; // 0x8
+  }
+
+  public abstract static class BiometricPrompt.AuthenticationCallback {
+    ctor public BiometricPrompt.AuthenticationCallback();
+    method public void onAuthenticationError(int, CharSequence);
+    method public void onAuthenticationFailed();
+    method public void onAuthenticationHelp(int, CharSequence);
+    method public void onAuthenticationSucceeded(android.hardware.biometrics.BiometricPrompt.AuthenticationResult);
+  }
+
+  public static class BiometricPrompt.AuthenticationResult {
+    method public int getAuthenticationType();
+    method public android.hardware.biometrics.BiometricPrompt.CryptoObject getCryptoObject();
+  }
+
+  public static class BiometricPrompt.Builder {
+    ctor public BiometricPrompt.Builder(android.content.Context);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt build();
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setAllowedAuthenticators(int);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setConfirmationRequired(boolean);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDescription(@NonNull CharSequence);
+    method @Deprecated @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDeviceCredentialAllowed(boolean);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setNegativeButton(@NonNull CharSequence, @NonNull java.util.concurrent.Executor, @NonNull android.content.DialogInterface.OnClickListener);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setSubtitle(@NonNull CharSequence);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setTitle(@NonNull CharSequence);
+  }
+
+  public static final class BiometricPrompt.CryptoObject {
+    ctor public BiometricPrompt.CryptoObject(@NonNull java.security.Signature);
+    ctor public BiometricPrompt.CryptoObject(@NonNull javax.crypto.Cipher);
+    ctor public BiometricPrompt.CryptoObject(@NonNull javax.crypto.Mac);
+    ctor public BiometricPrompt.CryptoObject(@NonNull android.security.identity.IdentityCredential);
+    method public javax.crypto.Cipher getCipher();
+    method @Nullable public android.security.identity.IdentityCredential getIdentityCredential();
+    method public javax.crypto.Mac getMac();
+    method public java.security.Signature getSignature();
+  }
+
+}
+
+package android.hardware.camera2 {
+
+  public class CameraAccessException extends android.util.AndroidException {
+    ctor public CameraAccessException(int);
+    ctor public CameraAccessException(int, String);
+    ctor public CameraAccessException(int, String, Throwable);
+    ctor public CameraAccessException(int, Throwable);
+    method public final int getReason();
+    field public static final int CAMERA_DISABLED = 1; // 0x1
+    field public static final int CAMERA_DISCONNECTED = 2; // 0x2
+    field public static final int CAMERA_ERROR = 3; // 0x3
+    field public static final int CAMERA_IN_USE = 4; // 0x4
+    field public static final int MAX_CAMERAS_IN_USE = 5; // 0x5
+  }
+
+  public abstract class CameraCaptureSession implements java.lang.AutoCloseable {
+    ctor public CameraCaptureSession();
+    method public abstract void abortCaptures() throws android.hardware.camera2.CameraAccessException;
+    method public abstract int capture(@NonNull android.hardware.camera2.CaptureRequest, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int captureBurst(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int captureBurstRequests(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public int captureSingleRequest(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public abstract void close();
+    method public abstract void finalizeOutputConfigurations(java.util.List<android.hardware.camera2.params.OutputConfiguration>) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public abstract android.hardware.camera2.CameraDevice getDevice();
+    method @Nullable public abstract android.view.Surface getInputSurface();
+    method public abstract boolean isReprocessable();
+    method public abstract void prepare(@NonNull android.view.Surface) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int setRepeatingBurst(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int setRepeatingBurstRequests(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int setRepeatingRequest(@NonNull android.hardware.camera2.CaptureRequest, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int setSingleRepeatingRequest(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public abstract void stopRepeating() throws android.hardware.camera2.CameraAccessException;
+    method public boolean supportsOfflineProcessing(@NonNull android.view.Surface);
+    method @Nullable public android.hardware.camera2.CameraOfflineSession switchToOffline(@NonNull java.util.Collection<android.view.Surface>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraOfflineSession.CameraOfflineSessionCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void updateOutputConfiguration(android.hardware.camera2.params.OutputConfiguration) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraCaptureSession.CaptureCallback {
+    ctor public CameraCaptureSession.CaptureCallback();
+    method public void onCaptureBufferLost(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.view.Surface, long);
+    method public void onCaptureCompleted(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.hardware.camera2.TotalCaptureResult);
+    method public void onCaptureFailed(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.hardware.camera2.CaptureFailure);
+    method public void onCaptureProgressed(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.hardware.camera2.CaptureResult);
+    method public void onCaptureSequenceAborted(@NonNull android.hardware.camera2.CameraCaptureSession, int);
+    method public void onCaptureSequenceCompleted(@NonNull android.hardware.camera2.CameraCaptureSession, int, long);
+    method public void onCaptureStarted(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, long, long);
+  }
+
+  public abstract static class CameraCaptureSession.StateCallback {
+    ctor public CameraCaptureSession.StateCallback();
+    method public void onActive(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onCaptureQueueEmpty(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onClosed(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public abstract void onConfigureFailed(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public abstract void onConfigured(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onReady(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onSurfacePrepared(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.view.Surface);
+  }
+
+  public final class CameraCharacteristics extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CameraCharacteristics.Key<?>> {
+    method @Nullable public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+    method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailablePhysicalCameraRequestKeys();
+    method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableSessionKeys();
+    method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
+    method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeysNeedingPermission();
+    method @NonNull public java.util.Set<java.lang.String> getPhysicalCameraIds();
+    method @Nullable public android.hardware.camera2.params.RecommendedStreamConfigurationMap getRecommendedStreamConfigurationMap(int);
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_COMPENSATION_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Rational> CONTROL_AE_COMPENSATION_STEP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AE_LOCK_AVAILABLE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AF_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_EFFECTS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.Capability[]> CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_SCENE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AWB_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AWB_LOCK_AVAILABLE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Float>> CONTROL_ZOOM_RATIO_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.DeviceStateSensorOrientationMap> INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.String> INFO_VERSION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_FACING;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_APERTURES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_HYPERFOCAL_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_POSE_REFERENCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_ROTATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_TRANSLATION;
+    field @Deprecated @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_RADIAL_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REPROCESS_MAX_CAPTURE_STALL;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> REQUEST_AVAILABLE_CAPABILITIES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_INPUT_STREAMS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_RAW;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_PARTIAL_RESULT_COUNT;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> REQUEST_PIPELINE_MAX_DEPTH;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SCALER_AVAILABLE_ROTATE_AND_CROP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SCALER_CROPPING_TYPE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SCALER_DEFAULT_SECURE_IMAGE_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_MAXIMUM_RESOLUTION_STREAM_COMBINATIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MultiResolutionStreamConfigurationMap> SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_BINNING_FACTOR;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> SENSOR_INFO_LENS_SHADING_APPLIED;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Long> SENSOR_INFO_MAX_FRAME_DURATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> SENSOR_INFO_SENSITIVITY_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_TIMESTAMP_SOURCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_WHITE_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_MAX_ANALOG_SENSITIVITY;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_ORIENTATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_REFERENCE_ILLUMINANT1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> SENSOR_REFERENCE_ILLUMINANT2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SHADING_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> STATISTICS_INFO_MAX_FACE_COUNT;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SYNC_MAX_LATENCY;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
+  }
+
+  public static final class CameraCharacteristics.Key<T> {
+    ctor public CameraCharacteristics.Key(@NonNull String, @NonNull Class<T>);
+    method @NonNull public String getName();
+  }
+
+  public abstract class CameraConstrainedHighSpeedCaptureSession extends android.hardware.camera2.CameraCaptureSession {
+    ctor public CameraConstrainedHighSpeedCaptureSession();
+    method @NonNull public abstract java.util.List<android.hardware.camera2.CaptureRequest> createHighSpeedRequestList(@NonNull android.hardware.camera2.CaptureRequest) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract class CameraDevice implements java.lang.AutoCloseable {
+    method public abstract void close();
+    method @NonNull public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int, java.util.Set<java.lang.String>) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createCaptureSession(@NonNull java.util.List<android.view.Surface>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public void createCaptureSession(android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createCaptureSessionByOutputConfigurations(java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createConstrainedHighSpeedCaptureSession(@NonNull java.util.List<android.view.Surface>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public void createExtensionSession(@NonNull android.hardware.camera2.params.ExtensionSessionConfiguration) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(@NonNull android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createReprocessableCaptureSession(@NonNull android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.view.Surface>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createReprocessableCaptureSessionByConfigurations(@NonNull android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int getCameraAudioRestriction() throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public abstract String getId();
+    method public boolean isSessionConfigurationSupported(@NonNull android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
+    method public void setCameraAudioRestriction(int) throws android.hardware.camera2.CameraAccessException;
+    field public static final int AUDIO_RESTRICTION_NONE = 0; // 0x0
+    field public static final int AUDIO_RESTRICTION_VIBRATION = 1; // 0x1
+    field public static final int AUDIO_RESTRICTION_VIBRATION_SOUND = 3; // 0x3
+    field public static final int TEMPLATE_MANUAL = 6; // 0x6
+    field public static final int TEMPLATE_PREVIEW = 1; // 0x1
+    field public static final int TEMPLATE_RECORD = 3; // 0x3
+    field public static final int TEMPLATE_STILL_CAPTURE = 2; // 0x2
+    field public static final int TEMPLATE_VIDEO_SNAPSHOT = 4; // 0x4
+    field public static final int TEMPLATE_ZERO_SHUTTER_LAG = 5; // 0x5
+  }
+
+  public abstract static class CameraDevice.StateCallback {
+    ctor public CameraDevice.StateCallback();
+    method public void onClosed(@NonNull android.hardware.camera2.CameraDevice);
+    method public abstract void onDisconnected(@NonNull android.hardware.camera2.CameraDevice);
+    method public abstract void onError(@NonNull android.hardware.camera2.CameraDevice, int);
+    method public abstract void onOpened(@NonNull android.hardware.camera2.CameraDevice);
+    field public static final int ERROR_CAMERA_DEVICE = 4; // 0x4
+    field public static final int ERROR_CAMERA_DISABLED = 3; // 0x3
+    field public static final int ERROR_CAMERA_IN_USE = 1; // 0x1
+    field public static final int ERROR_CAMERA_SERVICE = 5; // 0x5
+    field public static final int ERROR_MAX_CAMERAS_IN_USE = 2; // 0x2
+  }
+
+  public final class CameraExtensionCharacteristics {
+    method @Nullable public android.util.Range<java.lang.Long> getEstimatedCaptureLatencyRangeMillis(int, @NonNull android.util.Size, int);
+    method @NonNull public <T> java.util.List<android.util.Size> getExtensionSupportedSizes(int, @NonNull Class<T>);
+    method @NonNull public java.util.List<android.util.Size> getExtensionSupportedSizes(int, int);
+    method @NonNull public java.util.List<java.lang.Integer> getSupportedExtensions();
+    field public static final int EXTENSION_AUTOMATIC = 0; // 0x0
+    field public static final int EXTENSION_BEAUTY = 1; // 0x1
+    field public static final int EXTENSION_BOKEH = 2; // 0x2
+    field public static final int EXTENSION_HDR = 3; // 0x3
+    field public static final int EXTENSION_NIGHT = 4; // 0x4
+  }
+
+  public abstract class CameraExtensionSession implements java.lang.AutoCloseable {
+    method public int capture(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraExtensionSession.ExtensionCaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void close() throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public android.hardware.camera2.CameraDevice getDevice();
+    method public int setRepeatingRequest(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraExtensionSession.ExtensionCaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void stopRepeating() throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraExtensionSession.ExtensionCaptureCallback {
+    ctor public CameraExtensionSession.ExtensionCaptureCallback();
+    method public void onCaptureFailed(@NonNull android.hardware.camera2.CameraExtensionSession, @NonNull android.hardware.camera2.CaptureRequest);
+    method public void onCaptureProcessStarted(@NonNull android.hardware.camera2.CameraExtensionSession, @NonNull android.hardware.camera2.CaptureRequest);
+    method public void onCaptureSequenceAborted(@NonNull android.hardware.camera2.CameraExtensionSession, int);
+    method public void onCaptureSequenceCompleted(@NonNull android.hardware.camera2.CameraExtensionSession, int);
+    method public void onCaptureStarted(@NonNull android.hardware.camera2.CameraExtensionSession, @NonNull android.hardware.camera2.CaptureRequest, long);
+  }
+
+  public abstract static class CameraExtensionSession.StateCallback {
+    ctor public CameraExtensionSession.StateCallback();
+    method public void onClosed(@NonNull android.hardware.camera2.CameraExtensionSession);
+    method public abstract void onConfigureFailed(@NonNull android.hardware.camera2.CameraExtensionSession);
+    method public abstract void onConfigured(@NonNull android.hardware.camera2.CameraExtensionSession);
+  }
+
+  public final class CameraManager {
+    method @NonNull public android.hardware.camera2.CameraCharacteristics getCameraCharacteristics(@NonNull String) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public android.hardware.camera2.CameraExtensionCharacteristics getCameraExtensionCharacteristics(@NonNull String) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public String[] getCameraIdList() throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public java.util.Set<java.util.Set<java.lang.String>> getConcurrentCameraIds() throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(android.Manifest.permission.CAMERA) public boolean isConcurrentSessionConfigurationSupported(@NonNull java.util.Map<java.lang.String,android.hardware.camera2.params.SessionConfiguration>) throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(android.Manifest.permission.CAMERA) public void openCamera(@NonNull String, @NonNull android.hardware.camera2.CameraDevice.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(android.Manifest.permission.CAMERA) public void openCamera(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void registerAvailabilityCallback(@NonNull android.hardware.camera2.CameraManager.AvailabilityCallback, @Nullable android.os.Handler);
+    method public void registerAvailabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraManager.AvailabilityCallback);
+    method public void registerTorchCallback(@NonNull android.hardware.camera2.CameraManager.TorchCallback, @Nullable android.os.Handler);
+    method public void registerTorchCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraManager.TorchCallback);
+    method public void setTorchMode(@NonNull String, boolean) throws android.hardware.camera2.CameraAccessException;
+    method public void unregisterAvailabilityCallback(@NonNull android.hardware.camera2.CameraManager.AvailabilityCallback);
+    method public void unregisterTorchCallback(@NonNull android.hardware.camera2.CameraManager.TorchCallback);
+  }
+
+  public abstract static class CameraManager.AvailabilityCallback {
+    ctor public CameraManager.AvailabilityCallback();
+    method public void onCameraAccessPrioritiesChanged();
+    method public void onCameraAvailable(@NonNull String);
+    method public void onCameraUnavailable(@NonNull String);
+    method public void onPhysicalCameraAvailable(@NonNull String, @NonNull String);
+    method public void onPhysicalCameraUnavailable(@NonNull String, @NonNull String);
+  }
+
+  public abstract static class CameraManager.TorchCallback {
+    ctor public CameraManager.TorchCallback();
+    method public void onTorchModeChanged(@NonNull String, boolean);
+    method public void onTorchModeUnavailable(@NonNull String);
+  }
+
+  public abstract class CameraMetadata<TKey> {
+    method @NonNull public java.util.List<TKey> getKeys();
+    field public static final int COLOR_CORRECTION_ABERRATION_MODE_FAST = 1; // 0x1
+    field public static final int COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int COLOR_CORRECTION_ABERRATION_MODE_OFF = 0; // 0x0
+    field public static final int COLOR_CORRECTION_MODE_FAST = 1; // 0x1
+    field public static final int COLOR_CORRECTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int COLOR_CORRECTION_MODE_TRANSFORM_MATRIX = 0; // 0x0
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_50HZ = 1; // 0x1
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_60HZ = 2; // 0x2
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_AUTO = 3; // 0x3
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AE_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AE_MODE_ON = 1; // 0x1
+    field public static final int CONTROL_AE_MODE_ON_ALWAYS_FLASH = 3; // 0x3
+    field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH = 2; // 0x2
+    field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE = 4; // 0x4
+    field public static final int CONTROL_AE_MODE_ON_EXTERNAL_FLASH = 5; // 0x5
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL = 2; // 0x2
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_IDLE = 0; // 0x0
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_START = 1; // 0x1
+    field public static final int CONTROL_AE_STATE_CONVERGED = 2; // 0x2
+    field public static final int CONTROL_AE_STATE_FLASH_REQUIRED = 4; // 0x4
+    field public static final int CONTROL_AE_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AE_STATE_LOCKED = 3; // 0x3
+    field public static final int CONTROL_AE_STATE_PRECAPTURE = 5; // 0x5
+    field public static final int CONTROL_AE_STATE_SEARCHING = 1; // 0x1
+    field public static final int CONTROL_AF_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_AF_MODE_CONTINUOUS_PICTURE = 4; // 0x4
+    field public static final int CONTROL_AF_MODE_CONTINUOUS_VIDEO = 3; // 0x3
+    field public static final int CONTROL_AF_MODE_EDOF = 5; // 0x5
+    field public static final int CONTROL_AF_MODE_MACRO = 2; // 0x2
+    field public static final int CONTROL_AF_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AF_SCENE_CHANGE_DETECTED = 1; // 0x1
+    field public static final int CONTROL_AF_SCENE_CHANGE_NOT_DETECTED = 0; // 0x0
+    field public static final int CONTROL_AF_STATE_ACTIVE_SCAN = 3; // 0x3
+    field public static final int CONTROL_AF_STATE_FOCUSED_LOCKED = 4; // 0x4
+    field public static final int CONTROL_AF_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AF_STATE_NOT_FOCUSED_LOCKED = 5; // 0x5
+    field public static final int CONTROL_AF_STATE_PASSIVE_FOCUSED = 2; // 0x2
+    field public static final int CONTROL_AF_STATE_PASSIVE_SCAN = 1; // 0x1
+    field public static final int CONTROL_AF_STATE_PASSIVE_UNFOCUSED = 6; // 0x6
+    field public static final int CONTROL_AF_TRIGGER_CANCEL = 2; // 0x2
+    field public static final int CONTROL_AF_TRIGGER_IDLE = 0; // 0x0
+    field public static final int CONTROL_AF_TRIGGER_START = 1; // 0x1
+    field public static final int CONTROL_AWB_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_AWB_MODE_CLOUDY_DAYLIGHT = 6; // 0x6
+    field public static final int CONTROL_AWB_MODE_DAYLIGHT = 5; // 0x5
+    field public static final int CONTROL_AWB_MODE_FLUORESCENT = 3; // 0x3
+    field public static final int CONTROL_AWB_MODE_INCANDESCENT = 2; // 0x2
+    field public static final int CONTROL_AWB_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AWB_MODE_SHADE = 8; // 0x8
+    field public static final int CONTROL_AWB_MODE_TWILIGHT = 7; // 0x7
+    field public static final int CONTROL_AWB_MODE_WARM_FLUORESCENT = 4; // 0x4
+    field public static final int CONTROL_AWB_STATE_CONVERGED = 2; // 0x2
+    field public static final int CONTROL_AWB_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AWB_STATE_LOCKED = 3; // 0x3
+    field public static final int CONTROL_AWB_STATE_SEARCHING = 1; // 0x1
+    field public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0; // 0x0
+    field public static final int CONTROL_CAPTURE_INTENT_MANUAL = 6; // 0x6
+    field public static final int CONTROL_CAPTURE_INTENT_MOTION_TRACKING = 7; // 0x7
+    field public static final int CONTROL_CAPTURE_INTENT_PREVIEW = 1; // 0x1
+    field public static final int CONTROL_CAPTURE_INTENT_STILL_CAPTURE = 2; // 0x2
+    field public static final int CONTROL_CAPTURE_INTENT_VIDEO_RECORD = 3; // 0x3
+    field public static final int CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT = 4; // 0x4
+    field public static final int CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG = 5; // 0x5
+    field public static final int CONTROL_EFFECT_MODE_AQUA = 8; // 0x8
+    field public static final int CONTROL_EFFECT_MODE_BLACKBOARD = 7; // 0x7
+    field public static final int CONTROL_EFFECT_MODE_MONO = 1; // 0x1
+    field public static final int CONTROL_EFFECT_MODE_NEGATIVE = 2; // 0x2
+    field public static final int CONTROL_EFFECT_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_EFFECT_MODE_POSTERIZE = 5; // 0x5
+    field public static final int CONTROL_EFFECT_MODE_SEPIA = 4; // 0x4
+    field public static final int CONTROL_EFFECT_MODE_SOLARIZE = 3; // 0x3
+    field public static final int CONTROL_EFFECT_MODE_WHITEBOARD = 6; // 0x6
+    field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS = 2; // 0x2
+    field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE = 1; // 0x1
+    field public static final int CONTROL_EXTENDED_SCENE_MODE_DISABLED = 0; // 0x0
+    field public static final int CONTROL_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_MODE_OFF_KEEP_STATE = 3; // 0x3
+    field public static final int CONTROL_MODE_USE_EXTENDED_SCENE_MODE = 4; // 0x4
+    field public static final int CONTROL_MODE_USE_SCENE_MODE = 2; // 0x2
+    field public static final int CONTROL_SCENE_MODE_ACTION = 2; // 0x2
+    field public static final int CONTROL_SCENE_MODE_BARCODE = 16; // 0x10
+    field public static final int CONTROL_SCENE_MODE_BEACH = 8; // 0x8
+    field public static final int CONTROL_SCENE_MODE_CANDLELIGHT = 15; // 0xf
+    field public static final int CONTROL_SCENE_MODE_DISABLED = 0; // 0x0
+    field public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1; // 0x1
+    field public static final int CONTROL_SCENE_MODE_FIREWORKS = 12; // 0xc
+    field public static final int CONTROL_SCENE_MODE_HDR = 18; // 0x12
+    field @Deprecated public static final int CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO = 17; // 0x11
+    field public static final int CONTROL_SCENE_MODE_LANDSCAPE = 4; // 0x4
+    field public static final int CONTROL_SCENE_MODE_NIGHT = 5; // 0x5
+    field public static final int CONTROL_SCENE_MODE_NIGHT_PORTRAIT = 6; // 0x6
+    field public static final int CONTROL_SCENE_MODE_PARTY = 14; // 0xe
+    field public static final int CONTROL_SCENE_MODE_PORTRAIT = 3; // 0x3
+    field public static final int CONTROL_SCENE_MODE_SNOW = 9; // 0x9
+    field public static final int CONTROL_SCENE_MODE_SPORTS = 13; // 0xd
+    field public static final int CONTROL_SCENE_MODE_STEADYPHOTO = 11; // 0xb
+    field public static final int CONTROL_SCENE_MODE_SUNSET = 10; // 0xa
+    field public static final int CONTROL_SCENE_MODE_THEATRE = 7; // 0x7
+    field public static final int CONTROL_VIDEO_STABILIZATION_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_VIDEO_STABILIZATION_MODE_ON = 1; // 0x1
+    field public static final int DISTORTION_CORRECTION_MODE_FAST = 1; // 0x1
+    field public static final int DISTORTION_CORRECTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int DISTORTION_CORRECTION_MODE_OFF = 0; // 0x0
+    field public static final int EDGE_MODE_FAST = 1; // 0x1
+    field public static final int EDGE_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int EDGE_MODE_OFF = 0; // 0x0
+    field public static final int EDGE_MODE_ZERO_SHUTTER_LAG = 3; // 0x3
+    field public static final int FLASH_MODE_OFF = 0; // 0x0
+    field public static final int FLASH_MODE_SINGLE = 1; // 0x1
+    field public static final int FLASH_MODE_TORCH = 2; // 0x2
+    field public static final int FLASH_STATE_CHARGING = 1; // 0x1
+    field public static final int FLASH_STATE_FIRED = 3; // 0x3
+    field public static final int FLASH_STATE_PARTIAL = 4; // 0x4
+    field public static final int FLASH_STATE_READY = 2; // 0x2
+    field public static final int FLASH_STATE_UNAVAILABLE = 0; // 0x0
+    field public static final int HOT_PIXEL_MODE_FAST = 1; // 0x1
+    field public static final int HOT_PIXEL_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int HOT_PIXEL_MODE_OFF = 0; // 0x0
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_3 = 3; // 0x3
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL = 4; // 0x4
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_FULL = 1; // 0x1
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY = 2; // 0x2
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED = 0; // 0x0
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_EXTERNAL = 2; // 0x2
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1; // 0x1
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2; // 0x2
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0; // 0x0
+    field public static final int LENS_OPTICAL_STABILIZATION_MODE_OFF = 0; // 0x0
+    field public static final int LENS_OPTICAL_STABILIZATION_MODE_ON = 1; // 0x1
+    field public static final int LENS_POSE_REFERENCE_GYROSCOPE = 1; // 0x1
+    field public static final int LENS_POSE_REFERENCE_PRIMARY_CAMERA = 0; // 0x0
+    field public static final int LENS_POSE_REFERENCE_UNDEFINED = 2; // 0x2
+    field public static final int LENS_STATE_MOVING = 1; // 0x1
+    field public static final int LENS_STATE_STATIONARY = 0; // 0x0
+    field public static final int LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE = 0; // 0x0
+    field public static final int LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED = 1; // 0x1
+    field public static final int NOISE_REDUCTION_MODE_FAST = 1; // 0x1
+    field public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int NOISE_REDUCTION_MODE_MINIMAL = 3; // 0x3
+    field public static final int NOISE_REDUCTION_MODE_OFF = 0; // 0x0
+    field public static final int NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG = 4; // 0x4
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0; // 0x0
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE = 6; // 0x6
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO = 9; // 0x9
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT = 8; // 0x8
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA = 11; // 0xb
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING = 2; // 0x2
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR = 1; // 0x1
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME = 12; // 0xc
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING = 10; // 0xa
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING = 15; // 0xf
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING = 4; // 0x4
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_RAW = 3; // 0x3
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS = 5; // 0x5
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING = 17; // 0x11
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA = 13; // 0xd
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA = 14; // 0xe
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR = 16; // 0x10
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING = 7; // 0x7
+    field public static final int SCALER_CROPPING_TYPE_CENTER_ONLY = 0; // 0x0
+    field public static final int SCALER_CROPPING_TYPE_FREEFORM = 1; // 0x1
+    field public static final int SCALER_ROTATE_AND_CROP_180 = 2; // 0x2
+    field public static final int SCALER_ROTATE_AND_CROP_270 = 3; // 0x3
+    field public static final int SCALER_ROTATE_AND_CROP_90 = 1; // 0x1
+    field public static final int SCALER_ROTATE_AND_CROP_AUTO = 4; // 0x4
+    field public static final int SCALER_ROTATE_AND_CROP_NONE = 0; // 0x0
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3; // 0x3
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG = 2; // 0x2
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG = 1; // 0x1
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO = 5; // 0x5
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR = 6; // 0x6
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB = 4; // 0x4
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB = 0; // 0x0
+    field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME = 1; // 0x1
+    field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN = 0; // 0x0
+    field public static final int SENSOR_PIXEL_MODE_DEFAULT = 0; // 0x0
+    field public static final int SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION = 1; // 0x1
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER = 10; // 0xa
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT = 14; // 0xe
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D50 = 23; // 0x17
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D55 = 20; // 0x14
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D65 = 21; // 0x15
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D75 = 22; // 0x16
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT = 1; // 0x1
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT = 12; // 0xc
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT = 13; // 0xd
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER = 9; // 0x9
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLASH = 4; // 0x4
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT = 2; // 0x2
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN = 24; // 0x18
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_SHADE = 11; // 0xb
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A = 17; // 0x11
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B = 18; // 0x12
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C = 19; // 0x13
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN = 3; // 0x3
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT = 15; // 0xf
+    field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS = 2; // 0x2
+    field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY = 3; // 0x3
+    field public static final int SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 256; // 0x100
+    field public static final int SENSOR_TEST_PATTERN_MODE_OFF = 0; // 0x0
+    field public static final int SENSOR_TEST_PATTERN_MODE_PN9 = 4; // 0x4
+    field public static final int SENSOR_TEST_PATTERN_MODE_SOLID_COLOR = 1; // 0x1
+    field public static final int SHADING_MODE_FAST = 1; // 0x1
+    field public static final int SHADING_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int SHADING_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_FACE_DETECT_MODE_FULL = 2; // 0x2
+    field public static final int STATISTICS_FACE_DETECT_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_FACE_DETECT_MODE_SIMPLE = 1; // 0x1
+    field public static final int STATISTICS_LENS_SHADING_MAP_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_LENS_SHADING_MAP_MODE_ON = 1; // 0x1
+    field public static final int STATISTICS_OIS_DATA_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_OIS_DATA_MODE_ON = 1; // 0x1
+    field public static final int STATISTICS_SCENE_FLICKER_50HZ = 1; // 0x1
+    field public static final int STATISTICS_SCENE_FLICKER_60HZ = 2; // 0x2
+    field public static final int STATISTICS_SCENE_FLICKER_NONE = 0; // 0x0
+    field public static final int SYNC_MAX_LATENCY_PER_FRAME_CONTROL = 0; // 0x0
+    field public static final int SYNC_MAX_LATENCY_UNKNOWN = -1; // 0xffffffff
+    field public static final int TONEMAP_MODE_CONTRAST_CURVE = 0; // 0x0
+    field public static final int TONEMAP_MODE_FAST = 1; // 0x1
+    field public static final int TONEMAP_MODE_GAMMA_VALUE = 3; // 0x3
+    field public static final int TONEMAP_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int TONEMAP_MODE_PRESET_CURVE = 4; // 0x4
+    field public static final int TONEMAP_PRESET_CURVE_REC709 = 1; // 0x1
+    field public static final int TONEMAP_PRESET_CURVE_SRGB = 0; // 0x0
+  }
+
+  public abstract class CameraOfflineSession extends android.hardware.camera2.CameraCaptureSession {
+    ctor public CameraOfflineSession();
+  }
+
+  public abstract static class CameraOfflineSession.CameraOfflineSessionCallback {
+    ctor public CameraOfflineSession.CameraOfflineSessionCallback();
+    method public abstract void onClosed(@NonNull android.hardware.camera2.CameraOfflineSession);
+    method public abstract void onError(@NonNull android.hardware.camera2.CameraOfflineSession, int);
+    method public abstract void onIdle(@NonNull android.hardware.camera2.CameraOfflineSession);
+    method public abstract void onReady(@NonNull android.hardware.camera2.CameraOfflineSession);
+    method public abstract void onSwitchFailed(@NonNull android.hardware.camera2.CameraOfflineSession);
+    field public static final int STATUS_INTERNAL_ERROR = 0; // 0x0
+  }
+
+  public class CaptureFailure {
+    method public long getFrameNumber();
+    method @Nullable public String getPhysicalCameraId();
+    method public int getReason();
+    method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
+    method public int getSequenceId();
+    method public boolean wasImageCaptured();
+    field public static final int REASON_ERROR = 0; // 0x0
+    field public static final int REASON_FLUSHED = 1; // 0x1
+  }
+
+  public final class CaptureRequest extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CaptureRequest.Key<?>> implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
+    method @Nullable public Object getTag();
+    method public boolean isReprocess();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AWB_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EXTENDED_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> CONTROL_ZOOM_RATIO;
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EDGE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> HOT_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.location.Location> JPEG_GPS_LOCATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> JPEG_ORIENTATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_APERTURE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FILTER_DENSITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.graphics.Rect> SCALER_CROP_REGION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SCALER_ROTATE_AND_CROP;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SHADING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> TONEMAP_GAMMA;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+  }
+
+  public static final class CaptureRequest.Builder {
+    method public void addTarget(@NonNull android.view.Surface);
+    method @NonNull public android.hardware.camera2.CaptureRequest build();
+    method @Nullable public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method @Nullable public <T> T getPhysicalCameraKey(android.hardware.camera2.CaptureRequest.Key<T>, @NonNull String);
+    method public void removeTarget(@NonNull android.view.Surface);
+    method public <T> void set(@NonNull android.hardware.camera2.CaptureRequest.Key<T>, T);
+    method public <T> android.hardware.camera2.CaptureRequest.Builder setPhysicalCameraKey(@NonNull android.hardware.camera2.CaptureRequest.Key<T>, T, @NonNull String);
+    method public void setTag(@Nullable Object);
+  }
+
+  public static final class CaptureRequest.Key<T> {
+    ctor public CaptureRequest.Key(@NonNull String, @NonNull Class<T>);
+    method @NonNull public String getName();
+  }
+
+  public class CaptureResult extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CaptureResult.Key<?>> {
+    method @Nullable public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
+    method @NonNull public String getCameraId();
+    method public long getFrameNumber();
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
+    method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
+    method public int getSequenceId();
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_SCENE_CHANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EXTENDED_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> CONTROL_ZOOM_RATIO;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> HOT_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.location.Location> JPEG_GPS_LOCATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> JPEG_ORIENTATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_APERTURE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FILTER_DENSITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Float,java.lang.Float>> LENS_FOCUS_RANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_ROTATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_TRANSLATION;
+    field @Deprecated @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_RADIAL_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> REQUEST_PIPELINE_DEPTH;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Rect> SCALER_CROP_REGION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SCALER_ROTATE_AND_CROP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_DYNAMIC_WHITE_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> SENSOR_GREEN_SPLIT;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Rational[]> SENSOR_NEUTRAL_COLOR_POINT;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Double,java.lang.Double>[]> SENSOR_NOISE_PROFILE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> SENSOR_RAW_BINNING_FACTOR_USED;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_ROLLING_SHUTTER_SKEW;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_TIMESTAMP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SHADING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_SCENE_FLICKER;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> TONEMAP_GAMMA;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+  }
+
+  public static final class CaptureResult.Key<T> {
+    ctor public CaptureResult.Key(@NonNull String, @NonNull Class<T>);
+    method @NonNull public String getName();
+  }
+
+  public final class DngCreator implements java.lang.AutoCloseable {
+    ctor public DngCreator(@NonNull android.hardware.camera2.CameraCharacteristics, @NonNull android.hardware.camera2.CaptureResult);
+    method public void close();
+    method @NonNull public android.hardware.camera2.DngCreator setDescription(@NonNull String);
+    method @NonNull public android.hardware.camera2.DngCreator setLocation(@NonNull android.location.Location);
+    method @NonNull public android.hardware.camera2.DngCreator setOrientation(int);
+    method @NonNull public android.hardware.camera2.DngCreator setThumbnail(@NonNull android.graphics.Bitmap);
+    method @NonNull public android.hardware.camera2.DngCreator setThumbnail(@NonNull android.media.Image);
+    method public void writeByteBuffer(@NonNull java.io.OutputStream, @NonNull android.util.Size, @NonNull java.nio.ByteBuffer, @IntRange(from=0) long) throws java.io.IOException;
+    method public void writeImage(@NonNull java.io.OutputStream, @NonNull android.media.Image) throws java.io.IOException;
+    method public void writeInputStream(@NonNull java.io.OutputStream, @NonNull android.util.Size, @NonNull java.io.InputStream, @IntRange(from=0) long) throws java.io.IOException;
+    field public static final int MAX_THUMBNAIL_DIMENSION = 256; // 0x100
+  }
+
+  public class MultiResolutionImageReader implements java.lang.AutoCloseable {
+    ctor public MultiResolutionImageReader(@NonNull java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo>, int, @IntRange(from=1) int);
+    method public void close();
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public android.hardware.camera2.params.MultiResolutionStreamInfo getStreamInfoForImageReader(@NonNull android.media.ImageReader);
+    method @NonNull public android.view.Surface getSurface();
+    method public void setOnImageAvailableListener(@Nullable android.media.ImageReader.OnImageAvailableListener, @Nullable java.util.concurrent.Executor);
+  }
+
+  public final class TotalCaptureResult extends android.hardware.camera2.CaptureResult {
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureResult> getPartialResults();
+    method @Deprecated public java.util.Map<java.lang.String,android.hardware.camera2.CaptureResult> getPhysicalCameraResults();
+    method @NonNull public java.util.Map<java.lang.String,android.hardware.camera2.TotalCaptureResult> getPhysicalCameraTotalResults();
+  }
+
+}
+
+package android.hardware.camera2.params {
+
+  public final class BlackLevelPattern {
+    method public void copyTo(int[], int);
+    method public int getOffsetForIndex(int, int);
+    field public static final int COUNT = 4; // 0x4
+  }
+
+  public final class Capability {
+    method @NonNull public android.util.Size getMaxStreamingSize();
+    method public int getMode();
+    method @NonNull public android.util.Range<java.lang.Float> getZoomRatioRange();
+  }
+
+  public final class ColorSpaceTransform {
+    ctor public ColorSpaceTransform(android.util.Rational[]);
+    ctor public ColorSpaceTransform(int[]);
+    method public void copyElements(android.util.Rational[], int);
+    method public void copyElements(int[], int);
+    method public android.util.Rational getElement(int, int);
+  }
+
+  public final class DeviceStateSensorOrientationMap {
+    method public int getSensorOrientation(long);
+    field public static final long FOLDED = 4L; // 0x4L
+    field public static final long NORMAL = 0L; // 0x0L
+  }
+
+  public final class ExtensionSessionConfiguration {
+    ctor public ExtensionSessionConfiguration(int, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraExtensionSession.StateCallback);
+    method @NonNull public java.util.concurrent.Executor getExecutor();
+    method public int getExtension();
+    method @NonNull public java.util.List<android.hardware.camera2.params.OutputConfiguration> getOutputConfigurations();
+    method @NonNull public android.hardware.camera2.CameraExtensionSession.StateCallback getStateCallback();
+  }
+
+  public final class Face {
+    method public android.graphics.Rect getBounds();
+    method public int getId();
+    method public android.graphics.Point getLeftEyePosition();
+    method public android.graphics.Point getMouthPosition();
+    method public android.graphics.Point getRightEyePosition();
+    method public int getScore();
+    field public static final int ID_UNSUPPORTED = -1; // 0xffffffff
+    field public static final int SCORE_MAX = 100; // 0x64
+    field public static final int SCORE_MIN = 1; // 0x1
+  }
+
+  public final class InputConfiguration {
+    ctor public InputConfiguration(int, int, int);
+    ctor public InputConfiguration(@NonNull java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo>, int);
+    method public int getFormat();
+    method public int getHeight();
+    method public int getWidth();
+    method public boolean isMultiResolution();
+  }
+
+  public final class LensShadingMap {
+    method public void copyGainFactors(float[], int);
+    method public int getColumnCount();
+    method public float getGainFactor(int, int, int);
+    method public int getGainFactorCount();
+    method public android.hardware.camera2.params.RggbChannelVector getGainFactorVector(int, int);
+    method public int getRowCount();
+    field public static final float MINIMUM_GAIN_FACTOR = 1.0f;
+  }
+
+  public final class MandatoryStreamCombination {
+    method @NonNull public CharSequence getDescription();
+    method @NonNull public java.util.List<android.hardware.camera2.params.MandatoryStreamCombination.MandatoryStreamInformation> getStreamsInformation();
+    method public boolean isReprocessable();
+  }
+
+  public static final class MandatoryStreamCombination.MandatoryStreamInformation {
+    method @NonNull public java.util.List<android.util.Size> getAvailableSizes();
+    method public int getFormat();
+    method public boolean isInput();
+    method public boolean isMaximumSize();
+    method public boolean isUltraHighResolution();
+  }
+
+  public final class MeteringRectangle {
+    ctor public MeteringRectangle(int, int, int, int, int);
+    ctor public MeteringRectangle(android.graphics.Point, android.util.Size, int);
+    ctor public MeteringRectangle(android.graphics.Rect, int);
+    method public boolean equals(android.hardware.camera2.params.MeteringRectangle);
+    method public int getHeight();
+    method public int getMeteringWeight();
+    method public android.graphics.Rect getRect();
+    method public android.util.Size getSize();
+    method public android.graphics.Point getUpperLeftPoint();
+    method public int getWidth();
+    method public int getX();
+    method public int getY();
+    field public static final int METERING_WEIGHT_DONT_CARE = 0; // 0x0
+    field public static final int METERING_WEIGHT_MAX = 1000; // 0x3e8
+    field public static final int METERING_WEIGHT_MIN = 0; // 0x0
+  }
+
+  public final class MultiResolutionStreamConfigurationMap {
+    method @NonNull public int[] getInputFormats();
+    method @NonNull public java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo> getInputInfo(int);
+    method @NonNull public int[] getOutputFormats();
+    method @NonNull public java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo> getOutputInfo(int);
+  }
+
+  public class MultiResolutionStreamInfo {
+    ctor public MultiResolutionStreamInfo(@IntRange(from=1) int, @IntRange(from=1) int, @NonNull String);
+    method @IntRange(from=1) public int getHeight();
+    method @NonNull public String getPhysicalCameraId();
+    method @IntRange(from=1) public int getWidth();
+  }
+
+  public final class OisSample {
+    ctor public OisSample(long, float, float);
+    method public long getTimestamp();
+    method public float getXshift();
+    method public float getYshift();
+  }
+
+  public final class OutputConfiguration implements android.os.Parcelable {
+    ctor public OutputConfiguration(@NonNull android.view.Surface);
+    ctor public OutputConfiguration(int, @NonNull android.view.Surface);
+    ctor public OutputConfiguration(@NonNull android.util.Size, @NonNull Class<T>);
+    method public void addSensorPixelModeUsed(int);
+    method public void addSurface(@NonNull android.view.Surface);
+    method @NonNull public static java.util.Collection<android.hardware.camera2.params.OutputConfiguration> createInstancesForMultiResolutionOutput(@NonNull android.hardware.camera2.MultiResolutionImageReader);
+    method public int describeContents();
+    method public void enableSurfaceSharing();
+    method public int getMaxSharedSurfaceCount();
+    method @Nullable public android.view.Surface getSurface();
+    method public int getSurfaceGroupId();
+    method @NonNull public java.util.List<android.view.Surface> getSurfaces();
+    method public void removeSensorPixelModeUsed(int);
+    method public void removeSurface(@NonNull android.view.Surface);
+    method public void setPhysicalCameraId(@Nullable String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.params.OutputConfiguration> CREATOR;
+    field public static final int SURFACE_GROUP_ID_NONE = -1; // 0xffffffff
+  }
+
+  public final class RecommendedStreamConfigurationMap {
+    method @Nullable public java.util.Set<android.util.Size> getHighResolutionOutputSizes(int);
+    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getHighSpeedVideoFpsRanges();
+    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getHighSpeedVideoFpsRangesFor(@NonNull android.util.Size);
+    method @Nullable public java.util.Set<android.util.Size> getHighSpeedVideoSizes();
+    method @Nullable public java.util.Set<android.util.Size> getHighSpeedVideoSizesFor(@NonNull android.util.Range<java.lang.Integer>);
+    method @Nullable public java.util.Set<java.lang.Integer> getInputFormats();
+    method @Nullable public java.util.Set<android.util.Size> getInputSizes(int);
+    method @NonNull public java.util.Set<java.lang.Integer> getOutputFormats();
+    method @IntRange(from=0) public long getOutputMinFrameDuration(int, @NonNull android.util.Size);
+    method @IntRange(from=0) public <T> long getOutputMinFrameDuration(@NonNull Class<T>, @NonNull android.util.Size);
+    method @Nullable public java.util.Set<android.util.Size> getOutputSizes(int);
+    method @Nullable public <T> java.util.Set<android.util.Size> getOutputSizes(@NonNull Class<T>);
+    method @IntRange(from=0) public long getOutputStallDuration(int, @NonNull android.util.Size);
+    method @IntRange(from=0) public <T> long getOutputStallDuration(@NonNull Class<T>, @NonNull android.util.Size);
+    method public int getRecommendedUseCase();
+    method @Nullable public java.util.Set<java.lang.Integer> getValidOutputFormatsForInput(int);
+    method public boolean isOutputSupportedFor(int);
+    method public boolean isOutputSupportedFor(@NonNull android.view.Surface);
+    field public static final int USECASE_LOW_LATENCY_SNAPSHOT = 6; // 0x6
+    field public static final int USECASE_PREVIEW = 0; // 0x0
+    field public static final int USECASE_RAW = 5; // 0x5
+    field public static final int USECASE_RECORD = 1; // 0x1
+    field public static final int USECASE_SNAPSHOT = 3; // 0x3
+    field public static final int USECASE_VIDEO_SNAPSHOT = 2; // 0x2
+    field public static final int USECASE_ZSL = 4; // 0x4
+  }
+
+  public final class RggbChannelVector {
+    ctor public RggbChannelVector(float, float, float, float);
+    method public void copyTo(float[], int);
+    method public float getBlue();
+    method public float getComponent(int);
+    method public float getGreenEven();
+    method public float getGreenOdd();
+    method public float getRed();
+    field public static final int BLUE = 3; // 0x3
+    field public static final int COUNT = 4; // 0x4
+    field public static final int GREEN_EVEN = 1; // 0x1
+    field public static final int GREEN_ODD = 2; // 0x2
+    field public static final int RED = 0; // 0x0
+  }
+
+  public final class SessionConfiguration implements android.os.Parcelable {
+    ctor public SessionConfiguration(int, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback);
+    method public int describeContents();
+    method public java.util.concurrent.Executor getExecutor();
+    method public android.hardware.camera2.params.InputConfiguration getInputConfiguration();
+    method public java.util.List<android.hardware.camera2.params.OutputConfiguration> getOutputConfigurations();
+    method public android.hardware.camera2.CaptureRequest getSessionParameters();
+    method public int getSessionType();
+    method public android.hardware.camera2.CameraCaptureSession.StateCallback getStateCallback();
+    method public void setInputConfiguration(@NonNull android.hardware.camera2.params.InputConfiguration);
+    method public void setSessionParameters(android.hardware.camera2.CaptureRequest);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.params.SessionConfiguration> CREATOR;
+    field public static final int SESSION_HIGH_SPEED = 1; // 0x1
+    field public static final int SESSION_REGULAR = 0; // 0x0
+  }
+
+  public final class StreamConfigurationMap {
+    method public android.util.Size[] getHighResolutionOutputSizes(int);
+    method public android.util.Range<java.lang.Integer>[] getHighSpeedVideoFpsRanges();
+    method public android.util.Range<java.lang.Integer>[] getHighSpeedVideoFpsRangesFor(android.util.Size);
+    method public android.util.Size[] getHighSpeedVideoSizes();
+    method public android.util.Size[] getHighSpeedVideoSizesFor(android.util.Range<java.lang.Integer>);
+    method public int[] getInputFormats();
+    method public android.util.Size[] getInputSizes(int);
+    method public int[] getOutputFormats();
+    method public long getOutputMinFrameDuration(int, android.util.Size);
+    method public <T> long getOutputMinFrameDuration(Class<T>, android.util.Size);
+    method public <T> android.util.Size[] getOutputSizes(Class<T>);
+    method public android.util.Size[] getOutputSizes(int);
+    method public long getOutputStallDuration(int, android.util.Size);
+    method public <T> long getOutputStallDuration(Class<T>, android.util.Size);
+    method public int[] getValidOutputFormatsForInput(int);
+    method public boolean isOutputSupportedFor(int);
+    method public static <T> boolean isOutputSupportedFor(Class<T>);
+    method public boolean isOutputSupportedFor(android.view.Surface);
+  }
+
+  public final class TonemapCurve {
+    ctor public TonemapCurve(float[], float[], float[]);
+    method public void copyColorCurve(int, float[], int);
+    method public android.graphics.PointF getPoint(int, int);
+    method public int getPointCount(int);
+    field public static final int CHANNEL_BLUE = 2; // 0x2
+    field public static final int CHANNEL_GREEN = 1; // 0x1
+    field public static final int CHANNEL_RED = 0; // 0x0
+    field public static final float LEVEL_BLACK = 0.0f;
+    field public static final float LEVEL_WHITE = 1.0f;
+    field public static final int POINT_SIZE = 2; // 0x2
+  }
+
+}
+
+package android.hardware.display {
+
+  public final class DeviceProductInfo implements android.os.Parcelable {
+    ctor public DeviceProductInfo(@Nullable String, @NonNull String, @NonNull String, @IntRange(from=1990) int, int);
+    method public int describeContents();
+    method public int getConnectionToSinkType();
+    method @IntRange(from=0xffffffff, to=53) public int getManufactureWeek();
+    method @IntRange(from=0xffffffff) public int getManufactureYear();
+    method @NonNull public String getManufacturerPnpId();
+    method @IntRange(from=0xffffffff) public int getModelYear();
+    method @Nullable public String getName();
+    method @NonNull public String getProductId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONNECTION_TO_SINK_BUILT_IN = 1; // 0x1
+    field public static final int CONNECTION_TO_SINK_DIRECT = 2; // 0x2
+    field public static final int CONNECTION_TO_SINK_TRANSITIVE = 3; // 0x3
+    field public static final int CONNECTION_TO_SINK_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.DeviceProductInfo> CREATOR;
+  }
+
+  public final class DisplayManager {
+    method public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull String, int, int, int, @Nullable android.view.Surface, int);
+    method public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull String, int, int, int, @Nullable android.view.Surface, int, @Nullable android.hardware.display.VirtualDisplay.Callback, @Nullable android.os.Handler);
+    method public android.view.Display getDisplay(int);
+    method public android.view.Display[] getDisplays();
+    method public android.view.Display[] getDisplays(String);
+    method public int getMatchContentFrameRateUserPreference();
+    method public void registerDisplayListener(android.hardware.display.DisplayManager.DisplayListener, android.os.Handler);
+    method public void unregisterDisplayListener(android.hardware.display.DisplayManager.DisplayListener);
+    field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+    field public static final int MATCH_CONTENT_FRAMERATE_ALWAYS = 2; // 0x2
+    field public static final int MATCH_CONTENT_FRAMERATE_NEVER = 0; // 0x0
+    field public static final int MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY = 1; // 0x1
+    field public static final int MATCH_CONTENT_FRAMERATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR = 16; // 0x10
+    field public static final int VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY = 8; // 0x8
+    field public static final int VIRTUAL_DISPLAY_FLAG_PRESENTATION = 2; // 0x2
+    field public static final int VIRTUAL_DISPLAY_FLAG_PUBLIC = 1; // 0x1
+    field public static final int VIRTUAL_DISPLAY_FLAG_SECURE = 4; // 0x4
+  }
+
+  public static interface DisplayManager.DisplayListener {
+    method public void onDisplayAdded(int);
+    method public void onDisplayChanged(int);
+    method public void onDisplayRemoved(int);
+  }
+
+  public final class VirtualDisplay {
+    method public android.view.Display getDisplay();
+    method public android.view.Surface getSurface();
+    method public void release();
+    method public void resize(int, int, int);
+    method public void setSurface(android.view.Surface);
+  }
+
+  public abstract static class VirtualDisplay.Callback {
+    ctor public VirtualDisplay.Callback();
+    method public void onPaused();
+    method public void onResumed();
+    method public void onStopped();
+  }
+
+}
+
+package android.hardware.fingerprint {
+
+  @Deprecated public class FingerprintManager {
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.USE_BIOMETRIC, android.Manifest.permission.USE_FINGERPRINT}) public void authenticate(@Nullable android.hardware.fingerprint.FingerprintManager.CryptoObject, @Nullable android.os.CancellationSignal, int, @NonNull android.hardware.fingerprint.FingerprintManager.AuthenticationCallback, @Nullable android.os.Handler);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+    field public static final int FINGERPRINT_ACQUIRED_GOOD = 0; // 0x0
+    field public static final int FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 3; // 0x3
+    field public static final int FINGERPRINT_ACQUIRED_INSUFFICIENT = 2; // 0x2
+    field public static final int FINGERPRINT_ACQUIRED_PARTIAL = 1; // 0x1
+    field public static final int FINGERPRINT_ACQUIRED_TOO_FAST = 5; // 0x5
+    field public static final int FINGERPRINT_ACQUIRED_TOO_SLOW = 4; // 0x4
+    field public static final int FINGERPRINT_ERROR_CANCELED = 5; // 0x5
+    field public static final int FINGERPRINT_ERROR_HW_NOT_PRESENT = 12; // 0xc
+    field public static final int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1; // 0x1
+    field public static final int FINGERPRINT_ERROR_LOCKOUT = 7; // 0x7
+    field public static final int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 9; // 0x9
+    field public static final int FINGERPRINT_ERROR_NO_FINGERPRINTS = 11; // 0xb
+    field public static final int FINGERPRINT_ERROR_NO_SPACE = 4; // 0x4
+    field public static final int FINGERPRINT_ERROR_TIMEOUT = 3; // 0x3
+    field public static final int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
+    field public static final int FINGERPRINT_ERROR_USER_CANCELED = 10; // 0xa
+    field public static final int FINGERPRINT_ERROR_VENDOR = 8; // 0x8
+  }
+
+  @Deprecated public abstract static class FingerprintManager.AuthenticationCallback {
+    ctor @Deprecated public FingerprintManager.AuthenticationCallback();
+    method @Deprecated public void onAuthenticationError(int, CharSequence);
+    method @Deprecated public void onAuthenticationFailed();
+    method @Deprecated public void onAuthenticationHelp(int, CharSequence);
+    method @Deprecated public void onAuthenticationSucceeded(android.hardware.fingerprint.FingerprintManager.AuthenticationResult);
+  }
+
+  @Deprecated public static class FingerprintManager.AuthenticationResult {
+    method @Deprecated public android.hardware.fingerprint.FingerprintManager.CryptoObject getCryptoObject();
+  }
+
+  @Deprecated public static final class FingerprintManager.CryptoObject {
+    ctor @Deprecated public FingerprintManager.CryptoObject(@NonNull java.security.Signature);
+    ctor @Deprecated public FingerprintManager.CryptoObject(@NonNull javax.crypto.Cipher);
+    ctor @Deprecated public FingerprintManager.CryptoObject(@NonNull javax.crypto.Mac);
+    method @Deprecated public javax.crypto.Cipher getCipher();
+    method @Deprecated public javax.crypto.Mac getMac();
+    method @Deprecated public java.security.Signature getSignature();
+  }
+
+}
+
+package android.hardware.input {
+
+  public final class InputManager {
+    method public android.view.InputDevice getInputDevice(int);
+    method public int[] getInputDeviceIds();
+    method @FloatRange(from=0, to=1) public float getMaximumObscuringOpacityForTouch();
+    method public void registerInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener, android.os.Handler);
+    method public void unregisterInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener);
+    method @Nullable public android.view.VerifiedInputEvent verifyInputEvent(@NonNull android.view.InputEvent);
+    field public static final String ACTION_QUERY_KEYBOARD_LAYOUTS = "android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS";
+    field public static final String META_DATA_KEYBOARD_LAYOUTS = "android.hardware.input.metadata.KEYBOARD_LAYOUTS";
+  }
+
+  public static interface InputManager.InputDeviceListener {
+    method public void onInputDeviceAdded(int);
+    method public void onInputDeviceChanged(int);
+    method public void onInputDeviceRemoved(int);
+  }
+
+}
+
+package android.hardware.lights {
+
+  public final class Light implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getId();
+    method @NonNull public String getName();
+    method public int getOrdinal();
+    method public int getType();
+    method public boolean hasBrightnessControl();
+    method public boolean hasRgbControl();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.Light> CREATOR;
+    field public static final int LIGHT_CAPABILITY_BRIGHTNESS = 1; // 0x1
+    field public static final int LIGHT_CAPABILITY_RGB = 0; // 0x0
+    field public static final int LIGHT_TYPE_INPUT = 10001; // 0x2711
+    field public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
+    field public static final int LIGHT_TYPE_PLAYER_ID = 10002; // 0x2712
+  }
+
+  public final class LightState implements android.os.Parcelable {
+    method public int describeContents();
+    method @ColorInt public int getColor();
+    method public int getPlayerId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.LightState> CREATOR;
+  }
+
+  public static final class LightState.Builder {
+    ctor public LightState.Builder();
+    method @NonNull public android.hardware.lights.LightState build();
+    method @NonNull public android.hardware.lights.LightState.Builder setColor(@ColorInt int);
+    method @NonNull public android.hardware.lights.LightState.Builder setPlayerId(int);
+  }
+
+  public abstract class LightsManager {
+    method @NonNull public abstract android.hardware.lights.LightState getLightState(@NonNull android.hardware.lights.Light);
+    method @NonNull public abstract java.util.List<android.hardware.lights.Light> getLights();
+    method @NonNull public abstract android.hardware.lights.LightsManager.LightsSession openSession();
+  }
+
+  public abstract static class LightsManager.LightsSession implements java.lang.AutoCloseable {
+    method public abstract void close();
+    method public abstract void requestLights(@NonNull android.hardware.lights.LightsRequest);
+  }
+
+  public final class LightsRequest {
+    method @NonNull public java.util.List<android.hardware.lights.LightState> getLightStates();
+    method @NonNull public java.util.List<java.lang.Integer> getLights();
+    method @NonNull public java.util.Map<android.hardware.lights.Light,android.hardware.lights.LightState> getLightsAndStates();
+  }
+
+  public static final class LightsRequest.Builder {
+    ctor public LightsRequest.Builder();
+    method @NonNull public android.hardware.lights.LightsRequest.Builder addLight(@NonNull android.hardware.lights.Light, @NonNull android.hardware.lights.LightState);
+    method @NonNull public android.hardware.lights.LightsRequest build();
+    method @NonNull public android.hardware.lights.LightsRequest.Builder clearLight(@NonNull android.hardware.lights.Light);
+  }
+
+}
+
+package android.hardware.usb {
+
+  public class UsbAccessory implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getDescription();
+    method @NonNull public String getManufacturer();
+    method @NonNull public String getModel();
+    method @Nullable public String getSerial();
+    method @Nullable public String getUri();
+    method @Nullable public String getVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbAccessory> CREATOR;
+  }
+
+  public class UsbConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getId();
+    method @NonNull public android.hardware.usb.UsbInterface getInterface(int);
+    method public int getInterfaceCount();
+    method public int getMaxPower();
+    method @Nullable public String getName();
+    method public boolean isRemoteWakeup();
+    method public boolean isSelfPowered();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbConfiguration> CREATOR;
+  }
+
+  public final class UsbConstants {
+    ctor public UsbConstants();
+    field public static final int USB_CLASS_APP_SPEC = 254; // 0xfe
+    field public static final int USB_CLASS_AUDIO = 1; // 0x1
+    field public static final int USB_CLASS_CDC_DATA = 10; // 0xa
+    field public static final int USB_CLASS_COMM = 2; // 0x2
+    field public static final int USB_CLASS_CONTENT_SEC = 13; // 0xd
+    field public static final int USB_CLASS_CSCID = 11; // 0xb
+    field public static final int USB_CLASS_HID = 3; // 0x3
+    field public static final int USB_CLASS_HUB = 9; // 0x9
+    field public static final int USB_CLASS_MASS_STORAGE = 8; // 0x8
+    field public static final int USB_CLASS_MISC = 239; // 0xef
+    field public static final int USB_CLASS_PER_INTERFACE = 0; // 0x0
+    field public static final int USB_CLASS_PHYSICA = 5; // 0x5
+    field public static final int USB_CLASS_PRINTER = 7; // 0x7
+    field public static final int USB_CLASS_STILL_IMAGE = 6; // 0x6
+    field public static final int USB_CLASS_VENDOR_SPEC = 255; // 0xff
+    field public static final int USB_CLASS_VIDEO = 14; // 0xe
+    field public static final int USB_CLASS_WIRELESS_CONTROLLER = 224; // 0xe0
+    field public static final int USB_DIR_IN = 128; // 0x80
+    field public static final int USB_DIR_OUT = 0; // 0x0
+    field public static final int USB_ENDPOINT_DIR_MASK = 128; // 0x80
+    field public static final int USB_ENDPOINT_NUMBER_MASK = 15; // 0xf
+    field public static final int USB_ENDPOINT_XFERTYPE_MASK = 3; // 0x3
+    field public static final int USB_ENDPOINT_XFER_BULK = 2; // 0x2
+    field public static final int USB_ENDPOINT_XFER_CONTROL = 0; // 0x0
+    field public static final int USB_ENDPOINT_XFER_INT = 3; // 0x3
+    field public static final int USB_ENDPOINT_XFER_ISOC = 1; // 0x1
+    field public static final int USB_INTERFACE_SUBCLASS_BOOT = 1; // 0x1
+    field public static final int USB_SUBCLASS_VENDOR_SPEC = 255; // 0xff
+    field public static final int USB_TYPE_CLASS = 32; // 0x20
+    field public static final int USB_TYPE_MASK = 96; // 0x60
+    field public static final int USB_TYPE_RESERVED = 96; // 0x60
+    field public static final int USB_TYPE_STANDARD = 0; // 0x0
+    field public static final int USB_TYPE_VENDOR = 64; // 0x40
+  }
+
+  public class UsbDevice implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.hardware.usb.UsbConfiguration getConfiguration(int);
+    method public int getConfigurationCount();
+    method public int getDeviceClass();
+    method public int getDeviceId();
+    method public static int getDeviceId(String);
+    method @NonNull public String getDeviceName();
+    method public static String getDeviceName(int);
+    method public int getDeviceProtocol();
+    method public int getDeviceSubclass();
+    method @NonNull public android.hardware.usb.UsbInterface getInterface(int);
+    method public int getInterfaceCount();
+    method @Nullable public String getManufacturerName();
+    method public int getProductId();
+    method @Nullable public String getProductName();
+    method @Nullable public String getSerialNumber();
+    method public int getVendorId();
+    method @NonNull public String getVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbDevice> CREATOR;
+  }
+
+  public class UsbDeviceConnection {
+    method public int bulkTransfer(android.hardware.usb.UsbEndpoint, byte[], int, int);
+    method public int bulkTransfer(android.hardware.usb.UsbEndpoint, byte[], int, int, int);
+    method public boolean claimInterface(android.hardware.usb.UsbInterface, boolean);
+    method public void close();
+    method public int controlTransfer(int, int, int, int, byte[], int, int);
+    method public int controlTransfer(int, int, int, int, byte[], int, int, int);
+    method public int getFileDescriptor();
+    method public byte[] getRawDescriptors();
+    method public String getSerial();
+    method public boolean releaseInterface(android.hardware.usb.UsbInterface);
+    method public android.hardware.usb.UsbRequest requestWait();
+    method public android.hardware.usb.UsbRequest requestWait(long) throws java.util.concurrent.TimeoutException;
+    method public boolean setConfiguration(android.hardware.usb.UsbConfiguration);
+    method public boolean setInterface(android.hardware.usb.UsbInterface);
+  }
+
+  public class UsbEndpoint implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAddress();
+    method public int getAttributes();
+    method public int getDirection();
+    method public int getEndpointNumber();
+    method public int getInterval();
+    method public int getMaxPacketSize();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbEndpoint> CREATOR;
+  }
+
+  public class UsbInterface implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAlternateSetting();
+    method public android.hardware.usb.UsbEndpoint getEndpoint(int);
+    method public int getEndpointCount();
+    method public int getId();
+    method public int getInterfaceClass();
+    method public int getInterfaceProtocol();
+    method public int getInterfaceSubclass();
+    method @Nullable public String getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbInterface> CREATOR;
+  }
+
+  public class UsbManager {
+    method public android.hardware.usb.UsbAccessory[] getAccessoryList();
+    method public java.util.HashMap<java.lang.String,android.hardware.usb.UsbDevice> getDeviceList();
+    method public boolean hasPermission(android.hardware.usb.UsbDevice);
+    method public boolean hasPermission(android.hardware.usb.UsbAccessory);
+    method public android.os.ParcelFileDescriptor openAccessory(android.hardware.usb.UsbAccessory);
+    method public android.hardware.usb.UsbDeviceConnection openDevice(android.hardware.usb.UsbDevice);
+    method public void requestPermission(android.hardware.usb.UsbDevice, android.app.PendingIntent);
+    method public void requestPermission(android.hardware.usb.UsbAccessory, android.app.PendingIntent);
+    field public static final String ACTION_USB_ACCESSORY_ATTACHED = "android.hardware.usb.action.USB_ACCESSORY_ATTACHED";
+    field public static final String ACTION_USB_ACCESSORY_DETACHED = "android.hardware.usb.action.USB_ACCESSORY_DETACHED";
+    field public static final String ACTION_USB_DEVICE_ATTACHED = "android.hardware.usb.action.USB_DEVICE_ATTACHED";
+    field public static final String ACTION_USB_DEVICE_DETACHED = "android.hardware.usb.action.USB_DEVICE_DETACHED";
+    field public static final String EXTRA_ACCESSORY = "accessory";
+    field public static final String EXTRA_DEVICE = "device";
+    field public static final String EXTRA_PERMISSION_GRANTED = "permission";
+  }
+
+  public class UsbRequest {
+    ctor public UsbRequest();
+    method public boolean cancel();
+    method public void close();
+    method public Object getClientData();
+    method public android.hardware.usb.UsbEndpoint getEndpoint();
+    method public boolean initialize(android.hardware.usb.UsbDeviceConnection, android.hardware.usb.UsbEndpoint);
+    method @Deprecated public boolean queue(java.nio.ByteBuffer, int);
+    method public boolean queue(@Nullable java.nio.ByteBuffer);
+    method public void setClientData(Object);
+  }
+
+}
+
+package android.inputmethodservice {
+
+  public abstract class AbstractInputMethodService extends android.app.Service implements android.view.KeyEvent.Callback {
+    ctor public AbstractInputMethodService();
+    method public android.view.KeyEvent.DispatcherState getKeyDispatcherState();
+    method public final boolean isUiContext();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface();
+    method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+  }
+
+  public abstract class AbstractInputMethodService.AbstractInputMethodImpl implements android.view.inputmethod.InputMethod {
+    ctor public AbstractInputMethodService.AbstractInputMethodImpl();
+    method @MainThread public void createSession(android.view.inputmethod.InputMethod.SessionCallback);
+    method @MainThread public void revokeSession(android.view.inputmethod.InputMethodSession);
+    method @MainThread public void setSessionEnabled(android.view.inputmethod.InputMethodSession, boolean);
+  }
+
+  public abstract class AbstractInputMethodService.AbstractInputMethodSessionImpl implements android.view.inputmethod.InputMethodSession {
+    ctor public AbstractInputMethodService.AbstractInputMethodSessionImpl();
+    method public void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public boolean isEnabled();
+    method public boolean isRevoked();
+    method public void revokeSelf();
+    method public void setEnabled(boolean);
+  }
+
+  public class ExtractEditText extends android.widget.EditText {
+    ctor public ExtractEditText(android.content.Context);
+    ctor public ExtractEditText(android.content.Context, android.util.AttributeSet);
+    ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int);
+    ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int, int);
+    method public void finishInternalChanges();
+    method public boolean hasVerticalScrollBar();
+    method public void startInternalChanges();
+  }
+
+  @UiContext public class InputMethodService extends android.inputmethodservice.AbstractInputMethodService {
+    ctor public InputMethodService();
+    method @Deprecated public boolean enableHardwareAcceleration();
+    method public int getBackDisposition();
+    method public int getCandidatesHiddenVisibility();
+    method public android.view.inputmethod.InputBinding getCurrentInputBinding();
+    method public android.view.inputmethod.InputConnection getCurrentInputConnection();
+    method public android.view.inputmethod.EditorInfo getCurrentInputEditorInfo();
+    method public boolean getCurrentInputStarted();
+    method @Deprecated public int getInputMethodWindowRecommendedHeight();
+    method public android.view.LayoutInflater getLayoutInflater();
+    method public int getMaxWidth();
+    method public CharSequence getTextForImeAction(int);
+    method public android.app.Dialog getWindow();
+    method public void hideStatusIcon();
+    method public void hideWindow();
+    method public boolean isExtractViewShown();
+    method public boolean isFullscreenMode();
+    method public boolean isInputViewShown();
+    method public boolean isShowInputRequested();
+    method public void onAppPrivateCommand(String, android.os.Bundle);
+    method public void onBindInput();
+    method public void onComputeInsets(android.inputmethodservice.InputMethodService.Insets);
+    method public void onConfigureWindow(android.view.Window, boolean, boolean);
+    method public android.view.View onCreateCandidatesView();
+    method public android.view.View onCreateExtractTextView();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest onCreateInlineSuggestionsRequest(@NonNull android.os.Bundle);
+    method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface();
+    method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface();
+    method public android.view.View onCreateInputView();
+    method protected void onCurrentInputMethodSubtypeChanged(android.view.inputmethod.InputMethodSubtype);
+    method public void onDisplayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public boolean onEvaluateFullscreenMode();
+    method @CallSuper public boolean onEvaluateInputViewShown();
+    method public boolean onExtractTextContextMenuItem(int);
+    method public void onExtractedCursorMovement(int, int);
+    method public void onExtractedSelectionChanged(int, int);
+    method public void onExtractedTextClicked();
+    method public void onExtractingInputChanged(android.view.inputmethod.EditorInfo);
+    method public void onFinishCandidatesView(boolean);
+    method public void onFinishInput();
+    method public void onFinishInputView(boolean);
+    method public void onInitializeInterface();
+    method public boolean onInlineSuggestionsResponse(@NonNull android.view.inputmethod.InlineSuggestionsResponse);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public boolean onShowInputRequested(int, boolean);
+    method public void onStartCandidatesView(android.view.inputmethod.EditorInfo, boolean);
+    method public void onStartInput(android.view.inputmethod.EditorInfo, boolean);
+    method public void onStartInputView(android.view.inputmethod.EditorInfo, boolean);
+    method public void onUnbindInput();
+    method @Deprecated public void onUpdateCursor(android.graphics.Rect);
+    method public void onUpdateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo);
+    method public void onUpdateExtractedText(int, android.view.inputmethod.ExtractedText);
+    method public void onUpdateExtractingViews(android.view.inputmethod.EditorInfo);
+    method public void onUpdateExtractingVisibility(android.view.inputmethod.EditorInfo);
+    method public void onUpdateSelection(int, int, int, int, int, int);
+    method @Deprecated public void onViewClicked(boolean);
+    method public void onWindowHidden();
+    method public void onWindowShown();
+    method public void requestHideSelf(int);
+    method public final void requestShowSelf(int);
+    method public boolean sendDefaultEditorAction(boolean);
+    method public void sendDownUpKeyEvents(int);
+    method public void sendKeyChar(char);
+    method public void setBackDisposition(int);
+    method public void setCandidatesView(android.view.View);
+    method public void setCandidatesViewShown(boolean);
+    method public void setExtractView(android.view.View);
+    method public void setExtractViewShown(boolean);
+    method public void setInputView(android.view.View);
+    method public final boolean shouldOfferSwitchingToNextInputMethod();
+    method public void showStatusIcon(@DrawableRes int);
+    method public void showWindow(boolean);
+    method public void switchInputMethod(String);
+    method public final void switchInputMethod(String, android.view.inputmethod.InputMethodSubtype);
+    method public final boolean switchToNextInputMethod(boolean);
+    method public final boolean switchToPreviousInputMethod();
+    method public void updateFullscreenMode();
+    method public void updateInputViewShown();
+    field public static final int BACK_DISPOSITION_ADJUST_NOTHING = 3; // 0x3
+    field public static final int BACK_DISPOSITION_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2
+    field @Deprecated public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1
+  }
+
+  public class InputMethodService.InputMethodImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl {
+    ctor public InputMethodService.InputMethodImpl();
+    method @MainThread public void attachToken(android.os.IBinder);
+    method @MainThread public void bindInput(android.view.inputmethod.InputBinding);
+    method @MainThread public void changeInputMethodSubtype(android.view.inputmethod.InputMethodSubtype);
+    method @MainThread public void hideSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void restartInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void showSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void startInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void unbindInput();
+  }
+
+  public class InputMethodService.InputMethodSessionImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl {
+    ctor public InputMethodService.InputMethodSessionImpl();
+    method public void appPrivateCommand(String, android.os.Bundle);
+    method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public void finishInput();
+    method @Deprecated public void toggleSoftInput(int, int);
+    method public void updateCursor(android.graphics.Rect);
+    method public void updateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo);
+    method public void updateExtractedText(int, android.view.inputmethod.ExtractedText);
+    method public void updateSelection(int, int, int, int, int, int);
+    method public void viewClicked(boolean);
+  }
+
+  public static final class InputMethodService.Insets {
+    ctor public InputMethodService.Insets();
+    field public static final int TOUCHABLE_INSETS_CONTENT = 1; // 0x1
+    field public static final int TOUCHABLE_INSETS_FRAME = 0; // 0x0
+    field public static final int TOUCHABLE_INSETS_REGION = 3; // 0x3
+    field public static final int TOUCHABLE_INSETS_VISIBLE = 2; // 0x2
+    field public int contentTopInsets;
+    field public int touchableInsets;
+    field public final android.graphics.Region touchableRegion;
+    field public int visibleTopInsets;
+  }
+
+  @Deprecated public class Keyboard {
+    ctor @Deprecated public Keyboard(android.content.Context, int);
+    ctor @Deprecated public Keyboard(android.content.Context, @XmlRes int, int, int, int);
+    ctor @Deprecated public Keyboard(android.content.Context, @XmlRes int, int);
+    ctor @Deprecated public Keyboard(android.content.Context, int, CharSequence, int, int);
+    method @Deprecated protected android.inputmethodservice.Keyboard.Key createKeyFromXml(android.content.res.Resources, android.inputmethodservice.Keyboard.Row, int, int, android.content.res.XmlResourceParser);
+    method @Deprecated protected android.inputmethodservice.Keyboard.Row createRowFromXml(android.content.res.Resources, android.content.res.XmlResourceParser);
+    method @Deprecated public int getHeight();
+    method @Deprecated protected int getHorizontalGap();
+    method @Deprecated protected int getKeyHeight();
+    method @Deprecated protected int getKeyWidth();
+    method @Deprecated public java.util.List<android.inputmethodservice.Keyboard.Key> getKeys();
+    method @Deprecated public int getMinWidth();
+    method @Deprecated public java.util.List<android.inputmethodservice.Keyboard.Key> getModifierKeys();
+    method @Deprecated public int[] getNearestKeys(int, int);
+    method @Deprecated public int getShiftKeyIndex();
+    method @Deprecated protected int getVerticalGap();
+    method @Deprecated public boolean isShifted();
+    method @Deprecated protected void setHorizontalGap(int);
+    method @Deprecated protected void setKeyHeight(int);
+    method @Deprecated protected void setKeyWidth(int);
+    method @Deprecated public boolean setShifted(boolean);
+    method @Deprecated protected void setVerticalGap(int);
+    field @Deprecated public static final int EDGE_BOTTOM = 8; // 0x8
+    field @Deprecated public static final int EDGE_LEFT = 1; // 0x1
+    field @Deprecated public static final int EDGE_RIGHT = 2; // 0x2
+    field @Deprecated public static final int EDGE_TOP = 4; // 0x4
+    field @Deprecated public static final int KEYCODE_ALT = -6; // 0xfffffffa
+    field @Deprecated public static final int KEYCODE_CANCEL = -3; // 0xfffffffd
+    field @Deprecated public static final int KEYCODE_DELETE = -5; // 0xfffffffb
+    field @Deprecated public static final int KEYCODE_DONE = -4; // 0xfffffffc
+    field @Deprecated public static final int KEYCODE_MODE_CHANGE = -2; // 0xfffffffe
+    field @Deprecated public static final int KEYCODE_SHIFT = -1; // 0xffffffff
+  }
+
+  @Deprecated public static class Keyboard.Key {
+    ctor @Deprecated public Keyboard.Key(android.inputmethodservice.Keyboard.Row);
+    ctor @Deprecated public Keyboard.Key(android.content.res.Resources, android.inputmethodservice.Keyboard.Row, int, int, android.content.res.XmlResourceParser);
+    method @Deprecated public int[] getCurrentDrawableState();
+    method @Deprecated public boolean isInside(int, int);
+    method @Deprecated public void onPressed();
+    method @Deprecated public void onReleased(boolean);
+    method @Deprecated public int squaredDistanceFrom(int, int);
+    field @Deprecated public int[] codes;
+    field @Deprecated public int edgeFlags;
+    field @Deprecated public int gap;
+    field @Deprecated public int height;
+    field @Deprecated public android.graphics.drawable.Drawable icon;
+    field @Deprecated public android.graphics.drawable.Drawable iconPreview;
+    field @Deprecated public CharSequence label;
+    field @Deprecated public boolean modifier;
+    field @Deprecated public boolean on;
+    field @Deprecated public CharSequence popupCharacters;
+    field @Deprecated public int popupResId;
+    field @Deprecated public boolean pressed;
+    field @Deprecated public boolean repeatable;
+    field @Deprecated public boolean sticky;
+    field @Deprecated public CharSequence text;
+    field @Deprecated public int width;
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+  }
+
+  @Deprecated public static class Keyboard.Row {
+    ctor @Deprecated public Keyboard.Row(android.inputmethodservice.Keyboard);
+    ctor @Deprecated public Keyboard.Row(android.content.res.Resources, android.inputmethodservice.Keyboard, android.content.res.XmlResourceParser);
+    field @Deprecated public int defaultHeight;
+    field @Deprecated public int defaultHorizontalGap;
+    field @Deprecated public int defaultWidth;
+    field @Deprecated public int mode;
+    field @Deprecated public int rowEdgeFlags;
+    field @Deprecated public int verticalGap;
+  }
+
+  @Deprecated public class KeyboardView extends android.view.View implements android.view.View.OnClickListener {
+    ctor @Deprecated public KeyboardView(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public KeyboardView(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public KeyboardView(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void closing();
+    method @Deprecated public android.inputmethodservice.Keyboard getKeyboard();
+    method @Deprecated protected android.inputmethodservice.KeyboardView.OnKeyboardActionListener getOnKeyboardActionListener();
+    method @Deprecated public boolean handleBack();
+    method @Deprecated public void invalidateAllKeys();
+    method @Deprecated public void invalidateKey(int);
+    method @Deprecated public boolean isPreviewEnabled();
+    method @Deprecated public boolean isProximityCorrectionEnabled();
+    method @Deprecated public boolean isShifted();
+    method public void onClick(android.view.View);
+    method @Deprecated public void onDetachedFromWindow();
+    method @Deprecated public void onDraw(android.graphics.Canvas);
+    method @Deprecated protected boolean onLongPress(android.inputmethodservice.Keyboard.Key);
+    method @Deprecated public void onMeasure(int, int);
+    method @Deprecated public void onSizeChanged(int, int, int, int);
+    method @Deprecated public void setKeyboard(android.inputmethodservice.Keyboard);
+    method @Deprecated public void setOnKeyboardActionListener(android.inputmethodservice.KeyboardView.OnKeyboardActionListener);
+    method @Deprecated public void setPopupOffset(int, int);
+    method @Deprecated public void setPopupParent(android.view.View);
+    method @Deprecated public void setPreviewEnabled(boolean);
+    method @Deprecated public void setProximityCorrectionEnabled(boolean);
+    method @Deprecated public boolean setShifted(boolean);
+    method @Deprecated public void setVerticalCorrection(int);
+    method @Deprecated protected void swipeDown();
+    method @Deprecated protected void swipeLeft();
+    method @Deprecated protected void swipeRight();
+    method @Deprecated protected void swipeUp();
+  }
+
+  @Deprecated public static interface KeyboardView.OnKeyboardActionListener {
+    method @Deprecated public void onKey(int, int[]);
+    method @Deprecated public void onPress(int);
+    method @Deprecated public void onRelease(int);
+    method @Deprecated public void onText(CharSequence);
+    method @Deprecated public void swipeDown();
+    method @Deprecated public void swipeLeft();
+    method @Deprecated public void swipeRight();
+    method @Deprecated public void swipeUp();
+  }
+
+}
+
+package android.location {
+
+  public class Address implements android.os.Parcelable {
+    ctor public Address(java.util.Locale);
+    method public void clearLatitude();
+    method public void clearLongitude();
+    method public int describeContents();
+    method public String getAddressLine(int);
+    method public String getAdminArea();
+    method public String getCountryCode();
+    method public String getCountryName();
+    method public android.os.Bundle getExtras();
+    method public String getFeatureName();
+    method public double getLatitude();
+    method public java.util.Locale getLocale();
+    method public String getLocality();
+    method public double getLongitude();
+    method public int getMaxAddressLineIndex();
+    method public String getPhone();
+    method public String getPostalCode();
+    method public String getPremises();
+    method public String getSubAdminArea();
+    method public String getSubLocality();
+    method public String getSubThoroughfare();
+    method public String getThoroughfare();
+    method public String getUrl();
+    method public boolean hasLatitude();
+    method public boolean hasLongitude();
+    method public void setAddressLine(int, String);
+    method public void setAdminArea(String);
+    method public void setCountryCode(String);
+    method public void setCountryName(String);
+    method public void setExtras(android.os.Bundle);
+    method public void setFeatureName(String);
+    method public void setLatitude(double);
+    method public void setLocality(String);
+    method public void setLongitude(double);
+    method public void setPhone(String);
+    method public void setPostalCode(String);
+    method public void setPremises(String);
+    method public void setSubAdminArea(String);
+    method public void setSubLocality(String);
+    method public void setSubThoroughfare(String);
+    method public void setThoroughfare(String);
+    method public void setUrl(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.Address> CREATOR;
+  }
+
+  public class Criteria implements android.os.Parcelable {
+    ctor public Criteria();
+    ctor public Criteria(android.location.Criteria);
+    method public int describeContents();
+    method public int getAccuracy();
+    method public int getBearingAccuracy();
+    method public int getHorizontalAccuracy();
+    method public int getPowerRequirement();
+    method public int getSpeedAccuracy();
+    method public int getVerticalAccuracy();
+    method public boolean isAltitudeRequired();
+    method public boolean isBearingRequired();
+    method public boolean isCostAllowed();
+    method public boolean isSpeedRequired();
+    method public void setAccuracy(int);
+    method public void setAltitudeRequired(boolean);
+    method public void setBearingAccuracy(int);
+    method public void setBearingRequired(boolean);
+    method public void setCostAllowed(boolean);
+    method public void setHorizontalAccuracy(int);
+    method public void setPowerRequirement(int);
+    method public void setSpeedAccuracy(int);
+    method public void setSpeedRequired(boolean);
+    method public void setVerticalAccuracy(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACCURACY_COARSE = 2; // 0x2
+    field public static final int ACCURACY_FINE = 1; // 0x1
+    field public static final int ACCURACY_HIGH = 3; // 0x3
+    field public static final int ACCURACY_LOW = 1; // 0x1
+    field public static final int ACCURACY_MEDIUM = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.Criteria> CREATOR;
+    field public static final int NO_REQUIREMENT = 0; // 0x0
+    field public static final int POWER_HIGH = 3; // 0x3
+    field public static final int POWER_LOW = 1; // 0x1
+    field public static final int POWER_MEDIUM = 2; // 0x2
+  }
+
+  public final class Geocoder {
+    ctor public Geocoder(android.content.Context, java.util.Locale);
+    ctor public Geocoder(android.content.Context);
+    method public java.util.List<android.location.Address> getFromLocation(double, double, int) throws java.io.IOException;
+    method public java.util.List<android.location.Address> getFromLocationName(String, int) throws java.io.IOException;
+    method public java.util.List<android.location.Address> getFromLocationName(String, int, double, double, double, double) throws java.io.IOException;
+    method public static boolean isPresent();
+  }
+
+  public final class GnssAntennaInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0f) public double getCarrierFrequencyMHz();
+    method @NonNull public android.location.GnssAntennaInfo.PhaseCenterOffset getPhaseCenterOffset();
+    method @Nullable public android.location.GnssAntennaInfo.SphericalCorrections getPhaseCenterVariationCorrections();
+    method @Nullable public android.location.GnssAntennaInfo.SphericalCorrections getSignalGainCorrections();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo> CREATOR;
+  }
+
+  public static class GnssAntennaInfo.Builder {
+    ctor @Deprecated public GnssAntennaInfo.Builder();
+    ctor public GnssAntennaInfo.Builder(double, @NonNull android.location.GnssAntennaInfo.PhaseCenterOffset);
+    ctor public GnssAntennaInfo.Builder(@NonNull android.location.GnssAntennaInfo);
+    method @NonNull public android.location.GnssAntennaInfo build();
+    method @NonNull public android.location.GnssAntennaInfo.Builder setCarrierFrequencyMHz(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setPhaseCenterOffset(@NonNull android.location.GnssAntennaInfo.PhaseCenterOffset);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setPhaseCenterVariationCorrections(@Nullable android.location.GnssAntennaInfo.SphericalCorrections);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setSignalGainCorrections(@Nullable android.location.GnssAntennaInfo.SphericalCorrections);
+  }
+
+  public static interface GnssAntennaInfo.Listener {
+    method public void onGnssAntennaInfoReceived(@NonNull java.util.List<android.location.GnssAntennaInfo>);
+  }
+
+  public static final class GnssAntennaInfo.PhaseCenterOffset implements android.os.Parcelable {
+    ctor public GnssAntennaInfo.PhaseCenterOffset(double, double, double, double, double, double);
+    method public int describeContents();
+    method @FloatRange public double getXOffsetMm();
+    method @FloatRange public double getXOffsetUncertaintyMm();
+    method @FloatRange public double getYOffsetMm();
+    method @FloatRange public double getYOffsetUncertaintyMm();
+    method @FloatRange public double getZOffsetMm();
+    method @FloatRange public double getZOffsetUncertaintyMm();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo.PhaseCenterOffset> CREATOR;
+  }
+
+  public static final class GnssAntennaInfo.SphericalCorrections implements android.os.Parcelable {
+    ctor public GnssAntennaInfo.SphericalCorrections(@NonNull double[][], @NonNull double[][]);
+    method public int describeContents();
+    method @NonNull public double[][] getCorrectionUncertaintiesArray();
+    method @NonNull public double[][] getCorrectionsArray();
+    method @FloatRange(from=0.0f, to=180.0f) public double getDeltaPhi();
+    method @FloatRange(from=0.0f, to=360.0f) public double getDeltaTheta();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo.SphericalCorrections> CREATOR;
+  }
+
+  public final class GnssCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean hasAntennaInfo();
+    method @Deprecated public boolean hasGnssAntennaInfo();
+    method public boolean hasMeasurements();
+    method public boolean hasNavigationMessages();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssCapabilities> CREATOR;
+  }
+
+  public static final class GnssCapabilities.Builder {
+    ctor public GnssCapabilities.Builder();
+    ctor public GnssCapabilities.Builder(@NonNull android.location.GnssCapabilities);
+    method @NonNull public android.location.GnssCapabilities build();
+    method @NonNull public android.location.GnssCapabilities.Builder setHasAntennaInfo(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurements(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasNavigationMessages(boolean);
+  }
+
+  public final class GnssClock implements android.os.Parcelable {
+    method public int describeContents();
+    method public double getBiasNanos();
+    method @FloatRange(from=0.0f) public double getBiasUncertaintyNanos();
+    method public double getDriftNanosPerSecond();
+    method @FloatRange(from=0.0f) public double getDriftUncertaintyNanosPerSecond();
+    method public long getElapsedRealtimeNanos();
+    method @FloatRange(from=0.0f) public double getElapsedRealtimeUncertaintyNanos();
+    method public long getFullBiasNanos();
+    method public int getHardwareClockDiscontinuityCount();
+    method public int getLeapSecond();
+    method @FloatRange(from=0.0) public double getReferenceCarrierFrequencyHzForIsb();
+    method @NonNull public String getReferenceCodeTypeForIsb();
+    method public int getReferenceConstellationTypeForIsb();
+    method public long getTimeNanos();
+    method @FloatRange(from=0.0f) public double getTimeUncertaintyNanos();
+    method public boolean hasBiasNanos();
+    method public boolean hasBiasUncertaintyNanos();
+    method public boolean hasDriftNanosPerSecond();
+    method public boolean hasDriftUncertaintyNanosPerSecond();
+    method public boolean hasElapsedRealtimeNanos();
+    method public boolean hasElapsedRealtimeUncertaintyNanos();
+    method public boolean hasFullBiasNanos();
+    method public boolean hasLeapSecond();
+    method public boolean hasReferenceCarrierFrequencyHzForIsb();
+    method public boolean hasReferenceCodeTypeForIsb();
+    method public boolean hasReferenceConstellationTypeForIsb();
+    method public boolean hasTimeUncertaintyNanos();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssClock> CREATOR;
+  }
+
+  public final class GnssMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method public double getAccumulatedDeltaRangeMeters();
+    method public int getAccumulatedDeltaRangeState();
+    method public double getAccumulatedDeltaRangeUncertaintyMeters();
+    method public double getAutomaticGainControlLevelDb();
+    method @FloatRange(from=0, to=63) public double getBasebandCn0DbHz();
+    method @Deprecated public long getCarrierCycles();
+    method public float getCarrierFrequencyHz();
+    method @Deprecated public double getCarrierPhase();
+    method @Deprecated public double getCarrierPhaseUncertainty();
+    method @FloatRange(from=0, to=63) public double getCn0DbHz();
+    method @NonNull public String getCodeType();
+    method public int getConstellationType();
+    method public double getFullInterSignalBiasNanos();
+    method @FloatRange(from=0.0) public double getFullInterSignalBiasUncertaintyNanos();
+    method public int getMultipathIndicator();
+    method public double getPseudorangeRateMetersPerSecond();
+    method public double getPseudorangeRateUncertaintyMetersPerSecond();
+    method public long getReceivedSvTimeNanos();
+    method public long getReceivedSvTimeUncertaintyNanos();
+    method public double getSatelliteInterSignalBiasNanos();
+    method @FloatRange(from=0.0) public double getSatelliteInterSignalBiasUncertaintyNanos();
+    method public double getSnrInDb();
+    method public int getState();
+    method public int getSvid();
+    method public double getTimeOffsetNanos();
+    method public boolean hasAutomaticGainControlLevelDb();
+    method public boolean hasBasebandCn0DbHz();
+    method @Deprecated public boolean hasCarrierCycles();
+    method public boolean hasCarrierFrequencyHz();
+    method @Deprecated public boolean hasCarrierPhase();
+    method @Deprecated public boolean hasCarrierPhaseUncertainty();
+    method public boolean hasCodeType();
+    method public boolean hasFullInterSignalBiasNanos();
+    method public boolean hasFullInterSignalBiasUncertaintyNanos();
+    method public boolean hasSatelliteInterSignalBiasNanos();
+    method public boolean hasSatelliteInterSignalBiasUncertaintyNanos();
+    method public boolean hasSnrInDb();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ADR_STATE_CYCLE_SLIP = 4; // 0x4
+    field public static final int ADR_STATE_HALF_CYCLE_REPORTED = 16; // 0x10
+    field public static final int ADR_STATE_HALF_CYCLE_RESOLVED = 8; // 0x8
+    field public static final int ADR_STATE_RESET = 2; // 0x2
+    field public static final int ADR_STATE_UNKNOWN = 0; // 0x0
+    field public static final int ADR_STATE_VALID = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurement> CREATOR;
+    field public static final int MULTIPATH_INDICATOR_DETECTED = 1; // 0x1
+    field public static final int MULTIPATH_INDICATOR_NOT_DETECTED = 2; // 0x2
+    field public static final int MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0
+    field public static final int STATE_2ND_CODE_LOCK = 65536; // 0x10000
+    field public static final int STATE_BDS_D2_BIT_SYNC = 256; // 0x100
+    field public static final int STATE_BDS_D2_SUBFRAME_SYNC = 512; // 0x200
+    field public static final int STATE_BIT_SYNC = 2; // 0x2
+    field public static final int STATE_CODE_LOCK = 1; // 0x1
+    field public static final int STATE_GAL_E1BC_CODE_LOCK = 1024; // 0x400
+    field public static final int STATE_GAL_E1B_PAGE_SYNC = 4096; // 0x1000
+    field public static final int STATE_GAL_E1C_2ND_CODE_LOCK = 2048; // 0x800
+    field public static final int STATE_GLO_STRING_SYNC = 64; // 0x40
+    field public static final int STATE_GLO_TOD_DECODED = 128; // 0x80
+    field public static final int STATE_GLO_TOD_KNOWN = 32768; // 0x8000
+    field public static final int STATE_MSEC_AMBIGUOUS = 16; // 0x10
+    field public static final int STATE_SBAS_SYNC = 8192; // 0x2000
+    field public static final int STATE_SUBFRAME_SYNC = 4; // 0x4
+    field public static final int STATE_SYMBOL_SYNC = 32; // 0x20
+    field public static final int STATE_TOW_DECODED = 8; // 0x8
+    field public static final int STATE_TOW_KNOWN = 16384; // 0x4000
+    field public static final int STATE_UNKNOWN = 0; // 0x0
+  }
+
+  public final class GnssMeasurementRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isFullTracking();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurementRequest> CREATOR;
+  }
+
+  public static final class GnssMeasurementRequest.Builder {
+    ctor public GnssMeasurementRequest.Builder();
+    ctor public GnssMeasurementRequest.Builder(@NonNull android.location.GnssMeasurementRequest);
+    method @NonNull public android.location.GnssMeasurementRequest build();
+    method @NonNull public android.location.GnssMeasurementRequest.Builder setFullTracking(boolean);
+  }
+
+  public final class GnssMeasurementsEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.location.GnssClock getClock();
+    method @NonNull public java.util.Collection<android.location.GnssMeasurement> getMeasurements();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurementsEvent> CREATOR;
+  }
+
+  public abstract static class GnssMeasurementsEvent.Callback {
+    ctor public GnssMeasurementsEvent.Callback();
+    method public void onGnssMeasurementsReceived(android.location.GnssMeasurementsEvent);
+    method @Deprecated public void onStatusChanged(int);
+    field @Deprecated public static final int STATUS_LOCATION_DISABLED = 2; // 0x2
+    field @Deprecated public static final int STATUS_NOT_ALLOWED = 3; // 0x3
+    field @Deprecated public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
+    field @Deprecated public static final int STATUS_READY = 1; // 0x1
+  }
+
+  public final class GnssNavigationMessage implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public byte[] getData();
+    method @IntRange(from=0xffffffff, to=120) public int getMessageId();
+    method public int getStatus();
+    method @IntRange(from=1) public int getSubmessageId();
+    method @IntRange(from=1, to=200) public int getSvid();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssNavigationMessage> CREATOR;
+    field public static final int STATUS_PARITY_PASSED = 1; // 0x1
+    field public static final int STATUS_PARITY_REBUILT = 2; // 0x2
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_BDS_CNAV1 = 1283; // 0x503
+    field public static final int TYPE_BDS_CNAV2 = 1284; // 0x504
+    field public static final int TYPE_BDS_D1 = 1281; // 0x501
+    field public static final int TYPE_BDS_D2 = 1282; // 0x502
+    field public static final int TYPE_GAL_F = 1538; // 0x602
+    field public static final int TYPE_GAL_I = 1537; // 0x601
+    field public static final int TYPE_GLO_L1CA = 769; // 0x301
+    field public static final int TYPE_GPS_CNAV2 = 260; // 0x104
+    field public static final int TYPE_GPS_L1CA = 257; // 0x101
+    field public static final int TYPE_GPS_L2CNAV = 258; // 0x102
+    field public static final int TYPE_GPS_L5CNAV = 259; // 0x103
+    field public static final int TYPE_IRN_L5CA = 1793; // 0x701
+    field public static final int TYPE_QZS_L1CA = 1025; // 0x401
+    field public static final int TYPE_SBS = 513; // 0x201
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public abstract static class GnssNavigationMessage.Callback {
+    ctor public GnssNavigationMessage.Callback();
+    method public void onGnssNavigationMessageReceived(android.location.GnssNavigationMessage);
+    method @Deprecated public void onStatusChanged(int);
+    field @Deprecated public static final int STATUS_LOCATION_DISABLED = 2; // 0x2
+    field @Deprecated public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
+    field @Deprecated public static final int STATUS_READY = 1; // 0x1
+  }
+
+  public final class GnssStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0, to=360) public float getAzimuthDegrees(@IntRange(from=0) int);
+    method @FloatRange(from=0, to=63) public float getBasebandCn0DbHz(@IntRange(from=0) int);
+    method @FloatRange(from=0) public float getCarrierFrequencyHz(@IntRange(from=0) int);
+    method @FloatRange(from=0, to=63) public float getCn0DbHz(@IntRange(from=0) int);
+    method public int getConstellationType(@IntRange(from=0) int);
+    method @FloatRange(from=0xffffffa6, to=90) public float getElevationDegrees(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getSatelliteCount();
+    method @IntRange(from=1, to=200) public int getSvid(@IntRange(from=0) int);
+    method public boolean hasAlmanacData(@IntRange(from=0) int);
+    method public boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
+    method public boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
+    method public boolean hasEphemerisData(@IntRange(from=0) int);
+    method public boolean usedInFix(@IntRange(from=0) int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
+    field public static final int CONSTELLATION_GALILEO = 6; // 0x6
+    field public static final int CONSTELLATION_GLONASS = 3; // 0x3
+    field public static final int CONSTELLATION_GPS = 1; // 0x1
+    field public static final int CONSTELLATION_IRNSS = 7; // 0x7
+    field public static final int CONSTELLATION_QZSS = 4; // 0x4
+    field public static final int CONSTELLATION_SBAS = 2; // 0x2
+    field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssStatus> CREATOR;
+  }
+
+  public static final class GnssStatus.Builder {
+    ctor public GnssStatus.Builder();
+    method @NonNull public android.location.GnssStatus.Builder addSatellite(int, @IntRange(from=1, to=200) int, @FloatRange(from=0, to=63) float, @FloatRange(from=0xffffffa6, to=90) float, @FloatRange(from=0, to=360) float, boolean, boolean, boolean, boolean, @FloatRange(from=0) float, boolean, @FloatRange(from=0, to=63) float);
+    method @NonNull public android.location.GnssStatus build();
+    method @NonNull public android.location.GnssStatus.Builder clearSatellites();
+  }
+
+  public abstract static class GnssStatus.Callback {
+    ctor public GnssStatus.Callback();
+    method public void onFirstFix(int);
+    method public void onSatelliteStatusChanged(@NonNull android.location.GnssStatus);
+    method public void onStarted();
+    method public void onStopped();
+  }
+
+  @Deprecated public final class GpsSatellite {
+    method @Deprecated public float getAzimuth();
+    method @Deprecated public float getElevation();
+    method @Deprecated public int getPrn();
+    method @Deprecated public float getSnr();
+    method @Deprecated public boolean hasAlmanac();
+    method @Deprecated public boolean hasEphemeris();
+    method @Deprecated public boolean usedInFix();
+  }
+
+  @Deprecated public final class GpsStatus {
+    method @Deprecated @NonNull public static android.location.GpsStatus create(@NonNull android.location.GnssStatus, int);
+    method @Deprecated public int getMaxSatellites();
+    method @Deprecated public Iterable<android.location.GpsSatellite> getSatellites();
+    method @Deprecated public int getTimeToFirstFix();
+    field @Deprecated public static final int GPS_EVENT_FIRST_FIX = 3; // 0x3
+    field @Deprecated public static final int GPS_EVENT_SATELLITE_STATUS = 4; // 0x4
+    field @Deprecated public static final int GPS_EVENT_STARTED = 1; // 0x1
+    field @Deprecated public static final int GPS_EVENT_STOPPED = 2; // 0x2
+  }
+
+  @Deprecated public static interface GpsStatus.Listener {
+    method @Deprecated public void onGpsStatusChanged(int);
+  }
+
+  @Deprecated public static interface GpsStatus.NmeaListener {
+    method @Deprecated public void onNmeaReceived(long, String);
+  }
+
+  public class Location implements android.os.Parcelable {
+    ctor public Location(String);
+    ctor public Location(android.location.Location);
+    method public float bearingTo(android.location.Location);
+    method public static String convert(double, int);
+    method public static double convert(String);
+    method public int describeContents();
+    method public static void distanceBetween(double, double, double, double, float[]);
+    method public float distanceTo(android.location.Location);
+    method public void dump(android.util.Printer, String);
+    method public float getAccuracy();
+    method public double getAltitude();
+    method public float getBearing();
+    method public float getBearingAccuracyDegrees();
+    method public long getElapsedRealtimeNanos();
+    method public double getElapsedRealtimeUncertaintyNanos();
+    method public android.os.Bundle getExtras();
+    method public double getLatitude();
+    method public double getLongitude();
+    method public String getProvider();
+    method public float getSpeed();
+    method public float getSpeedAccuracyMetersPerSecond();
+    method public long getTime();
+    method public float getVerticalAccuracyMeters();
+    method public boolean hasAccuracy();
+    method public boolean hasAltitude();
+    method public boolean hasBearing();
+    method public boolean hasBearingAccuracy();
+    method public boolean hasElapsedRealtimeUncertaintyNanos();
+    method public boolean hasSpeed();
+    method public boolean hasSpeedAccuracy();
+    method public boolean hasVerticalAccuracy();
+    method @Deprecated public boolean isFromMockProvider();
+    method public boolean isMock();
+    method @Deprecated public void removeAccuracy();
+    method @Deprecated public void removeAltitude();
+    method @Deprecated public void removeBearing();
+    method @Deprecated public void removeSpeed();
+    method public void reset();
+    method public void set(android.location.Location);
+    method public void setAccuracy(float);
+    method public void setAltitude(double);
+    method public void setBearing(float);
+    method public void setBearingAccuracyDegrees(float);
+    method public void setElapsedRealtimeNanos(long);
+    method public void setElapsedRealtimeUncertaintyNanos(double);
+    method public void setExtras(@Nullable android.os.Bundle);
+    method public void setLatitude(double);
+    method public void setLongitude(double);
+    method public void setMock(boolean);
+    method public void setProvider(String);
+    method public void setSpeed(float);
+    method public void setSpeedAccuracyMetersPerSecond(float);
+    method public void setTime(long);
+    method public void setVerticalAccuracyMeters(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.Location> CREATOR;
+    field public static final int FORMAT_DEGREES = 0; // 0x0
+    field public static final int FORMAT_MINUTES = 1; // 0x1
+    field public static final int FORMAT_SECONDS = 2; // 0x2
+  }
+
+  public interface LocationListener {
+    method public default void onFlushComplete(int);
+    method public void onLocationChanged(@NonNull android.location.Location);
+    method public default void onLocationChanged(@NonNull java.util.List<android.location.Location>);
+    method public default void onProviderDisabled(@NonNull String);
+    method public default void onProviderEnabled(@NonNull String);
+    method @Deprecated public default void onStatusChanged(String, int, android.os.Bundle);
+  }
+
+  public class LocationManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addGpsStatusListener(android.location.GpsStatus.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.GpsStatus.NmeaListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.OnNmeaMessageListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.OnNmeaMessageListener, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.OnNmeaMessageListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void addProximityAlert(double, double, float, long, @NonNull android.app.PendingIntent);
+    method public void addTestProvider(@NonNull String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int);
+    method public void addTestProvider(@NonNull String, @NonNull android.location.provider.ProviderProperties);
+    method public void addTestProvider(@NonNull String, @NonNull android.location.provider.ProviderProperties, @NonNull java.util.Set<java.lang.String>);
+    method @Deprecated public void clearTestProviderEnabled(@NonNull String);
+    method @Deprecated public void clearTestProviderLocation(@NonNull String);
+    method @Deprecated public void clearTestProviderStatus(@NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getAllProviders();
+    method @Nullable public String getBestProvider(@NonNull android.location.Criteria, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull String, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull String, @NonNull android.location.LocationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
+    method @Nullable public java.util.List<android.location.GnssAntennaInfo> getGnssAntennaInfos();
+    method @NonNull public android.location.GnssCapabilities getGnssCapabilities();
+    method @Nullable public String getGnssHardwareModelName();
+    method public int getGnssYearOfHardware();
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.location.GpsStatus getGpsStatus(@Nullable android.location.GpsStatus);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.location.Location getLastKnownLocation(@NonNull String);
+    method @Deprecated @Nullable public android.location.LocationProvider getProvider(@NonNull String);
+    method @Nullable public android.location.provider.ProviderProperties getProviderProperties(@NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getProviders(boolean);
+    method @NonNull public java.util.List<java.lang.String> getProviders(@NonNull android.location.Criteria, boolean);
+    method public boolean hasProvider(@NonNull String);
+    method public boolean isLocationEnabled();
+    method public boolean isProviderEnabled(@NonNull String);
+    method public boolean registerAntennaInfoListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssAntennaInfo.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @Deprecated public boolean registerGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssNavigationMessageCallback(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssNavigationMessage.Callback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull android.location.GnssStatus.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull android.location.GnssStatus.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssStatus.Callback);
+    method @Deprecated public void removeGpsStatusListener(android.location.GpsStatus.Listener);
+    method @Deprecated public void removeNmeaListener(@NonNull android.location.GpsStatus.NmeaListener);
+    method public void removeNmeaListener(@NonNull android.location.OnNmeaMessageListener);
+    method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeProximityAlert(@NonNull android.app.PendingIntent);
+    method public void removeTestProvider(@NonNull String);
+    method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeUpdates(@NonNull android.location.LocationListener);
+    method public void removeUpdates(@NonNull android.app.PendingIntent);
+    method public void requestFlush(@NonNull String, @NonNull android.location.LocationListener, int);
+    method public void requestFlush(@NonNull String, @NonNull android.app.PendingIntent, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.location.LocationListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, @NonNull android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, @NonNull android.location.LocationRequest, @NonNull android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull String, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull android.location.Criteria, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull String, @NonNull android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull android.location.Criteria, @NonNull android.app.PendingIntent);
+    method public boolean sendExtraCommand(@NonNull String, @NonNull String, @Nullable android.os.Bundle);
+    method public void setTestProviderEnabled(@NonNull String, boolean);
+    method public void setTestProviderLocation(@NonNull String, @NonNull android.location.Location);
+    method @Deprecated public void setTestProviderStatus(@NonNull String, int, @Nullable android.os.Bundle, long);
+    method public void unregisterAntennaInfoListener(@NonNull android.location.GnssAntennaInfo.Listener);
+    method public void unregisterGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
+    method public void unregisterGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback);
+    method public void unregisterGnssStatusCallback(@NonNull android.location.GnssStatus.Callback);
+    field public static final String ACTION_GNSS_CAPABILITIES_CHANGED = "android.location.action.GNSS_CAPABILITIES_CHANGED";
+    field public static final String EXTRA_GNSS_CAPABILITIES = "android.location.extra.GNSS_CAPABILITIES";
+    field public static final String EXTRA_LOCATION_ENABLED = "android.location.extra.LOCATION_ENABLED";
+    field public static final String EXTRA_PROVIDER_ENABLED = "android.location.extra.PROVIDER_ENABLED";
+    field public static final String EXTRA_PROVIDER_NAME = "android.location.extra.PROVIDER_NAME";
+    field public static final String FUSED_PROVIDER = "fused";
+    field public static final String GPS_PROVIDER = "gps";
+    field public static final String KEY_FLUSH_COMPLETE = "flushComplete";
+    field public static final String KEY_LOCATIONS = "locations";
+    field public static final String KEY_LOCATION_CHANGED = "location";
+    field public static final String KEY_PROVIDER_ENABLED = "providerEnabled";
+    field public static final String KEY_PROXIMITY_ENTERING = "entering";
+    field @Deprecated public static final String KEY_STATUS_CHANGED = "status";
+    field public static final String MODE_CHANGED_ACTION = "android.location.MODE_CHANGED";
+    field public static final String NETWORK_PROVIDER = "network";
+    field public static final String PASSIVE_PROVIDER = "passive";
+    field public static final String PROVIDERS_CHANGED_ACTION = "android.location.PROVIDERS_CHANGED";
+  }
+
+  @Deprecated public class LocationProvider {
+    method @Deprecated public int getAccuracy();
+    method @Deprecated public String getName();
+    method @Deprecated public int getPowerRequirement();
+    method @Deprecated public boolean hasMonetaryCost();
+    method @Deprecated public boolean meetsCriteria(android.location.Criteria);
+    method @Deprecated public boolean requiresCell();
+    method @Deprecated public boolean requiresNetwork();
+    method @Deprecated public boolean requiresSatellite();
+    method @Deprecated public boolean supportsAltitude();
+    method @Deprecated public boolean supportsBearing();
+    method @Deprecated public boolean supportsSpeed();
+    field @Deprecated public static final int AVAILABLE = 2; // 0x2
+    field @Deprecated public static final int OUT_OF_SERVICE = 0; // 0x0
+    field @Deprecated public static final int TEMPORARILY_UNAVAILABLE = 1; // 0x1
+  }
+
+  public final class LocationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=1) public long getDurationMillis();
+    method @IntRange(from=0) public long getIntervalMillis();
+    method @IntRange(from=0) public long getMaxUpdateDelayMillis();
+    method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
+    method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
+    method @IntRange(from=0) public long getMinUpdateIntervalMillis();
+    method public int getQuality();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.LocationRequest> CREATOR;
+    field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
+    field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
+    field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
+    field public static final int QUALITY_LOW_POWER = 104; // 0x68
+  }
+
+  public static final class LocationRequest.Builder {
+    ctor public LocationRequest.Builder(long);
+    ctor public LocationRequest.Builder(@NonNull android.location.LocationRequest);
+    method @NonNull public android.location.LocationRequest build();
+    method @NonNull public android.location.LocationRequest.Builder clearMinUpdateIntervalMillis();
+    method @NonNull public android.location.LocationRequest.Builder setDurationMillis(@IntRange(from=1) long);
+    method @NonNull public android.location.LocationRequest.Builder setIntervalMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.LocationRequest.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.LocationRequest.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.location.LocationRequest.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
+    method @NonNull public android.location.LocationRequest.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.LocationRequest.Builder setQuality(int);
+  }
+
+  public interface OnNmeaMessageListener {
+    method public void onNmeaMessage(String, long);
+  }
+
+  public abstract class SettingInjectorService extends android.app.Service {
+    ctor public SettingInjectorService(String);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method protected abstract boolean onGetEnabled();
+    method protected abstract String onGetSummary();
+    method public final void onStart(android.content.Intent, int);
+    method public final int onStartCommand(android.content.Intent, int, int);
+    method public static final void refreshSettings(@NonNull android.content.Context);
+    field public static final String ACTION_INJECTED_SETTING_CHANGED = "android.location.InjectedSettingChanged";
+    field public static final String ACTION_SERVICE_INTENT = "android.location.SettingInjectorService";
+    field public static final String ATTRIBUTES_NAME = "injected-location-setting";
+    field public static final String META_DATA_NAME = "android.location.SettingInjectorService";
+  }
+
+}
+
+package android.location.provider {
+
+  public final class ProviderProperties implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAccuracy();
+    method public int getPowerUsage();
+    method public boolean hasAltitudeSupport();
+    method public boolean hasBearingSupport();
+    method public boolean hasCellRequirement();
+    method public boolean hasMonetaryCost();
+    method public boolean hasNetworkRequirement();
+    method public boolean hasSatelliteRequirement();
+    method public boolean hasSpeedSupport();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ACCURACY_COARSE = 2; // 0x2
+    field public static final int ACCURACY_FINE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.provider.ProviderProperties> CREATOR;
+    field public static final int POWER_USAGE_HIGH = 3; // 0x3
+    field public static final int POWER_USAGE_LOW = 1; // 0x1
+    field public static final int POWER_USAGE_MEDIUM = 2; // 0x2
+  }
+
+  public static final class ProviderProperties.Builder {
+    ctor public ProviderProperties.Builder();
+    ctor public ProviderProperties.Builder(@NonNull android.location.provider.ProviderProperties);
+    method @NonNull public android.location.provider.ProviderProperties build();
+    method @NonNull public android.location.provider.ProviderProperties.Builder setAccuracy(int);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasAltitudeSupport(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasBearingSupport(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasCellRequirement(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasMonetaryCost(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasNetworkRequirement(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasSatelliteRequirement(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasSpeedSupport(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setPowerUsage(int);
+  }
+
+}
+
+package android.media {
+
+  public class AsyncPlayer {
+    ctor public AsyncPlayer(String);
+    method @Deprecated public void play(android.content.Context, android.net.Uri, boolean, int);
+    method public void play(@NonNull android.content.Context, @NonNull android.net.Uri, boolean, @NonNull android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public void stop();
+  }
+
+  public final class AudioAttributes implements android.os.Parcelable {
+    method public boolean areHapticChannelsMuted();
+    method public int describeContents();
+    method public int getAllowedCapturePolicy();
+    method public int getContentType();
+    method public int getFlags();
+    method public int getSpatializationBehavior();
+    method public int getUsage();
+    method public int getVolumeControlStream();
+    method public boolean isContentSpatialized();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALLOW_CAPTURE_BY_ALL = 1; // 0x1
+    field public static final int ALLOW_CAPTURE_BY_NONE = 3; // 0x3
+    field public static final int ALLOW_CAPTURE_BY_SYSTEM = 2; // 0x2
+    field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+    field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+    field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+    field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+    field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioAttributes> CREATOR;
+    field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+    field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+    field @Deprecated public static final int FLAG_LOW_LATENCY = 256; // 0x100
+    field public static final int SPATIALIZATION_BEHAVIOR_AUTO = 0; // 0x0
+    field public static final int SPATIALIZATION_BEHAVIOR_NEVER = 1; // 0x1
+    field public static final int USAGE_ALARM = 4; // 0x4
+    field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+    field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+    field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+    field public static final int USAGE_ASSISTANT = 16; // 0x10
+    field public static final int USAGE_GAME = 14; // 0xe
+    field public static final int USAGE_MEDIA = 1; // 0x1
+    field public static final int USAGE_NOTIFICATION = 5; // 0x5
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+    field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+    field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+    field public static final int USAGE_UNKNOWN = 0; // 0x0
+    field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+    field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+  }
+
+  public static class AudioAttributes.Builder {
+    ctor public AudioAttributes.Builder();
+    ctor public AudioAttributes.Builder(android.media.AudioAttributes);
+    method public android.media.AudioAttributes build();
+    method @NonNull public android.media.AudioAttributes.Builder setAllowedCapturePolicy(int);
+    method public android.media.AudioAttributes.Builder setContentType(int);
+    method public android.media.AudioAttributes.Builder setFlags(int);
+    method @NonNull public android.media.AudioAttributes.Builder setHapticChannelsMuted(boolean);
+    method @NonNull public android.media.AudioAttributes.Builder setIsContentSpatialized(boolean);
+    method public android.media.AudioAttributes.Builder setLegacyStreamType(int);
+    method @NonNull public android.media.AudioAttributes.Builder setSpatializationBehavior(int);
+    method public android.media.AudioAttributes.Builder setUsage(int);
+  }
+
+  public class AudioDescriptor {
+    method @NonNull public byte[] getDescriptor();
+    method public int getEncapsulationType();
+    method public int getStandard();
+    field public static final int STANDARD_EDID = 1; // 0x1
+    field public static final int STANDARD_NONE = 0; // 0x0
+  }
+
+  public abstract class AudioDeviceCallback {
+    ctor public AudioDeviceCallback();
+    method public void onAudioDevicesAdded(android.media.AudioDeviceInfo[]);
+    method public void onAudioDevicesRemoved(android.media.AudioDeviceInfo[]);
+  }
+
+  public final class AudioDeviceInfo {
+    method @NonNull public String getAddress();
+    method @NonNull public java.util.List<android.media.AudioDescriptor> getAudioDescriptors();
+    method @NonNull public java.util.List<android.media.AudioProfile> getAudioProfiles();
+    method @NonNull public int[] getChannelCounts();
+    method @NonNull public int[] getChannelIndexMasks();
+    method @NonNull public int[] getChannelMasks();
+    method @NonNull public int[] getEncapsulationMetadataTypes();
+    method @NonNull public int[] getEncapsulationModes();
+    method @NonNull public int[] getEncodings();
+    method public int getId();
+    method public CharSequence getProductName();
+    method @NonNull public int[] getSampleRates();
+    method public int getType();
+    method public boolean isSink();
+    method public boolean isSource();
+    field public static final int TYPE_AUX_LINE = 19; // 0x13
+    field public static final int TYPE_BLE_HEADSET = 26; // 0x1a
+    field public static final int TYPE_BLE_SPEAKER = 27; // 0x1b
+    field public static final int TYPE_BLUETOOTH_A2DP = 8; // 0x8
+    field public static final int TYPE_BLUETOOTH_SCO = 7; // 0x7
+    field public static final int TYPE_BUILTIN_EARPIECE = 1; // 0x1
+    field public static final int TYPE_BUILTIN_MIC = 15; // 0xf
+    field public static final int TYPE_BUILTIN_SPEAKER = 2; // 0x2
+    field public static final int TYPE_BUILTIN_SPEAKER_SAFE = 24; // 0x18
+    field public static final int TYPE_BUS = 21; // 0x15
+    field public static final int TYPE_DOCK = 13; // 0xd
+    field public static final int TYPE_FM = 14; // 0xe
+    field public static final int TYPE_FM_TUNER = 16; // 0x10
+    field public static final int TYPE_HDMI = 9; // 0x9
+    field public static final int TYPE_HDMI_ARC = 10; // 0xa
+    field public static final int TYPE_HDMI_EARC = 29; // 0x1d
+    field public static final int TYPE_HEARING_AID = 23; // 0x17
+    field public static final int TYPE_IP = 20; // 0x14
+    field public static final int TYPE_LINE_ANALOG = 5; // 0x5
+    field public static final int TYPE_LINE_DIGITAL = 6; // 0x6
+    field public static final int TYPE_REMOTE_SUBMIX = 25; // 0x19
+    field public static final int TYPE_TELEPHONY = 18; // 0x12
+    field public static final int TYPE_TV_TUNER = 17; // 0x11
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_USB_ACCESSORY = 12; // 0xc
+    field public static final int TYPE_USB_DEVICE = 11; // 0xb
+    field public static final int TYPE_USB_HEADSET = 22; // 0x16
+    field public static final int TYPE_WIRED_HEADPHONES = 4; // 0x4
+    field public static final int TYPE_WIRED_HEADSET = 3; // 0x3
+  }
+
+  public final class AudioFocusRequest {
+    method public boolean acceptsDelayedFocusGain();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method public int getFocusGain();
+    method public boolean willPauseWhenDucked();
+  }
+
+  public static final class AudioFocusRequest.Builder {
+    ctor public AudioFocusRequest.Builder(int);
+    ctor public AudioFocusRequest.Builder(@NonNull android.media.AudioFocusRequest);
+    method public android.media.AudioFocusRequest build();
+    method @NonNull public android.media.AudioFocusRequest.Builder setAcceptsDelayedFocusGain(boolean);
+    method @NonNull public android.media.AudioFocusRequest.Builder setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method @NonNull public android.media.AudioFocusRequest.Builder setFocusGain(int);
+    method @NonNull public android.media.AudioFocusRequest.Builder setForceDucking(boolean);
+    method @NonNull public android.media.AudioFocusRequest.Builder setOnAudioFocusChangeListener(@NonNull android.media.AudioManager.OnAudioFocusChangeListener);
+    method @NonNull public android.media.AudioFocusRequest.Builder setOnAudioFocusChangeListener(@NonNull android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.os.Handler);
+    method @NonNull public android.media.AudioFocusRequest.Builder setWillPauseWhenDucked(boolean);
+  }
+
+  public final class AudioFormat implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getChannelCount();
+    method public int getChannelIndexMask();
+    method public int getChannelMask();
+    method public int getEncoding();
+    method @IntRange(from=1) public int getFrameSizeInBytes();
+    method public int getSampleRate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_DEFAULT = 1; // 0x1
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_INVALID = 0; // 0x0
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_MONO = 2; // 0x2
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_STEREO = 3; // 0x3
+    field public static final int CHANNEL_INVALID = 0; // 0x0
+    field public static final int CHANNEL_IN_BACK = 32; // 0x20
+    field public static final int CHANNEL_IN_BACK_PROCESSED = 512; // 0x200
+    field public static final int CHANNEL_IN_DEFAULT = 1; // 0x1
+    field public static final int CHANNEL_IN_FRONT = 16; // 0x10
+    field public static final int CHANNEL_IN_FRONT_PROCESSED = 256; // 0x100
+    field public static final int CHANNEL_IN_LEFT = 4; // 0x4
+    field public static final int CHANNEL_IN_LEFT_PROCESSED = 64; // 0x40
+    field public static final int CHANNEL_IN_MONO = 16; // 0x10
+    field public static final int CHANNEL_IN_PRESSURE = 1024; // 0x400
+    field public static final int CHANNEL_IN_RIGHT = 8; // 0x8
+    field public static final int CHANNEL_IN_RIGHT_PROCESSED = 128; // 0x80
+    field public static final int CHANNEL_IN_STEREO = 12; // 0xc
+    field public static final int CHANNEL_IN_VOICE_DNLINK = 32768; // 0x8000
+    field public static final int CHANNEL_IN_VOICE_UPLINK = 16384; // 0x4000
+    field public static final int CHANNEL_IN_X_AXIS = 2048; // 0x800
+    field public static final int CHANNEL_IN_Y_AXIS = 4096; // 0x1000
+    field public static final int CHANNEL_IN_Z_AXIS = 8192; // 0x2000
+    field public static final int CHANNEL_OUT_5POINT1 = 252; // 0xfc
+    field public static final int CHANNEL_OUT_5POINT1POINT2 = 3145980; // 0x3000fc
+    field public static final int CHANNEL_OUT_5POINT1POINT4 = 737532; // 0xb40fc
+    field @Deprecated public static final int CHANNEL_OUT_7POINT1 = 1020; // 0x3fc
+    field public static final int CHANNEL_OUT_7POINT1POINT2 = 3152124; // 0x3018fc
+    field public static final int CHANNEL_OUT_7POINT1POINT4 = 743676; // 0xb58fc
+    field public static final int CHANNEL_OUT_7POINT1_SURROUND = 6396; // 0x18fc
+    field public static final int CHANNEL_OUT_9POINT1POINT4 = 202070268; // 0xc0b58fc
+    field public static final int CHANNEL_OUT_9POINT1POINT6 = 205215996; // 0xc3b58fc
+    field public static final int CHANNEL_OUT_BACK_CENTER = 1024; // 0x400
+    field public static final int CHANNEL_OUT_BACK_LEFT = 64; // 0x40
+    field public static final int CHANNEL_OUT_BACK_RIGHT = 128; // 0x80
+    field public static final int CHANNEL_OUT_BOTTOM_FRONT_CENTER = 8388608; // 0x800000
+    field public static final int CHANNEL_OUT_BOTTOM_FRONT_LEFT = 4194304; // 0x400000
+    field public static final int CHANNEL_OUT_BOTTOM_FRONT_RIGHT = 16777216; // 0x1000000
+    field public static final int CHANNEL_OUT_DEFAULT = 1; // 0x1
+    field public static final int CHANNEL_OUT_FRONT_CENTER = 16; // 0x10
+    field public static final int CHANNEL_OUT_FRONT_LEFT = 4; // 0x4
+    field public static final int CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 256; // 0x100
+    field public static final int CHANNEL_OUT_FRONT_RIGHT = 8; // 0x8
+    field public static final int CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 512; // 0x200
+    field public static final int CHANNEL_OUT_FRONT_WIDE_LEFT = 67108864; // 0x4000000
+    field public static final int CHANNEL_OUT_FRONT_WIDE_RIGHT = 134217728; // 0x8000000
+    field public static final int CHANNEL_OUT_LOW_FREQUENCY = 32; // 0x20
+    field public static final int CHANNEL_OUT_LOW_FREQUENCY_2 = 33554432; // 0x2000000
+    field public static final int CHANNEL_OUT_MONO = 4; // 0x4
+    field public static final int CHANNEL_OUT_QUAD = 204; // 0xcc
+    field public static final int CHANNEL_OUT_SIDE_LEFT = 2048; // 0x800
+    field public static final int CHANNEL_OUT_SIDE_RIGHT = 4096; // 0x1000
+    field public static final int CHANNEL_OUT_STEREO = 12; // 0xc
+    field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c
+    field public static final int CHANNEL_OUT_TOP_BACK_CENTER = 262144; // 0x40000
+    field public static final int CHANNEL_OUT_TOP_BACK_LEFT = 131072; // 0x20000
+    field public static final int CHANNEL_OUT_TOP_BACK_RIGHT = 524288; // 0x80000
+    field public static final int CHANNEL_OUT_TOP_CENTER = 8192; // 0x2000
+    field public static final int CHANNEL_OUT_TOP_FRONT_CENTER = 32768; // 0x8000
+    field public static final int CHANNEL_OUT_TOP_FRONT_LEFT = 16384; // 0x4000
+    field public static final int CHANNEL_OUT_TOP_FRONT_RIGHT = 65536; // 0x10000
+    field public static final int CHANNEL_OUT_TOP_SIDE_LEFT = 1048576; // 0x100000
+    field public static final int CHANNEL_OUT_TOP_SIDE_RIGHT = 2097152; // 0x200000
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioFormat> CREATOR;
+    field public static final int ENCODING_AAC_ELD = 15; // 0xf
+    field public static final int ENCODING_AAC_HE_V1 = 11; // 0xb
+    field public static final int ENCODING_AAC_HE_V2 = 12; // 0xc
+    field public static final int ENCODING_AAC_LC = 10; // 0xa
+    field public static final int ENCODING_AAC_XHE = 16; // 0x10
+    field public static final int ENCODING_AC3 = 5; // 0x5
+    field public static final int ENCODING_AC4 = 17; // 0x11
+    field public static final int ENCODING_DEFAULT = 1; // 0x1
+    field public static final int ENCODING_DOLBY_MAT = 19; // 0x13
+    field public static final int ENCODING_DOLBY_TRUEHD = 14; // 0xe
+    field public static final int ENCODING_DRA = 28; // 0x1c
+    field public static final int ENCODING_DTS = 7; // 0x7
+    field public static final int ENCODING_DTS_HD = 8; // 0x8
+    field public static final int ENCODING_DTS_UHD = 27; // 0x1b
+    field public static final int ENCODING_E_AC3 = 6; // 0x6
+    field public static final int ENCODING_E_AC3_JOC = 18; // 0x12
+    field public static final int ENCODING_IEC61937 = 13; // 0xd
+    field public static final int ENCODING_INVALID = 0; // 0x0
+    field public static final int ENCODING_MP3 = 9; // 0x9
+    field public static final int ENCODING_MPEGH_BL_L3 = 23; // 0x17
+    field public static final int ENCODING_MPEGH_BL_L4 = 24; // 0x18
+    field public static final int ENCODING_MPEGH_LC_L3 = 25; // 0x19
+    field public static final int ENCODING_MPEGH_LC_L4 = 26; // 0x1a
+    field public static final int ENCODING_OPUS = 20; // 0x14
+    field public static final int ENCODING_PCM_16BIT = 2; // 0x2
+    field public static final int ENCODING_PCM_24BIT_PACKED = 21; // 0x15
+    field public static final int ENCODING_PCM_32BIT = 22; // 0x16
+    field public static final int ENCODING_PCM_8BIT = 3; // 0x3
+    field public static final int ENCODING_PCM_FLOAT = 4; // 0x4
+    field public static final int SAMPLE_RATE_UNSPECIFIED = 0; // 0x0
+  }
+
+  public static class AudioFormat.Builder {
+    ctor public AudioFormat.Builder();
+    ctor public AudioFormat.Builder(android.media.AudioFormat);
+    method public android.media.AudioFormat build();
+    method @NonNull public android.media.AudioFormat.Builder setChannelIndexMask(int);
+    method @NonNull public android.media.AudioFormat.Builder setChannelMask(int);
+    method public android.media.AudioFormat.Builder setEncoding(int) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioFormat.Builder setSampleRate(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public class AudioManager {
+    method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener);
+    method public int abandonAudioFocusRequest(@NonNull android.media.AudioFocusRequest);
+    method public void addOnCommunicationDeviceChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnCommunicationDeviceChangedListener);
+    method public void addOnModeChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnModeChangedListener);
+    method public void adjustStreamVolume(int, int, int);
+    method public void adjustSuggestedStreamVolume(int, int, int);
+    method public void adjustVolume(int, int);
+    method public void clearCommunicationDevice();
+    method public void dispatchMediaKeyEvent(android.view.KeyEvent);
+    method public int generateAudioSessionId();
+    method @NonNull public java.util.List<android.media.AudioPlaybackConfiguration> getActivePlaybackConfigurations();
+    method @NonNull public java.util.List<android.media.AudioRecordingConfiguration> getActiveRecordingConfigurations();
+    method public int getAllowedCapturePolicy();
+    method public int getAudioHwSyncForSession(int);
+    method @NonNull public java.util.List<android.media.AudioDeviceInfo> getAvailableCommunicationDevices();
+    method @Nullable public android.media.AudioDeviceInfo getCommunicationDevice();
+    method public android.media.AudioDeviceInfo[] getDevices(int);
+    method public int getEncodedSurroundMode();
+    method public java.util.List<android.media.MicrophoneInfo> getMicrophones() throws java.io.IOException;
+    method public int getMode();
+    method public String getParameters(String);
+    method public static int getPlaybackOffloadSupport(@NonNull android.media.AudioFormat, @NonNull android.media.AudioAttributes);
+    method public String getProperty(String);
+    method public int getRingerMode();
+    method @Deprecated public int getRouting(int);
+    method @NonNull public android.media.Spatializer getSpatializer();
+    method public int getStreamMaxVolume(int);
+    method public int getStreamMinVolume(int);
+    method public int getStreamVolume(int);
+    method public float getStreamVolumeDb(int, int, int);
+    method @Deprecated public int getVibrateSetting(int);
+    method @Deprecated public boolean isBluetoothA2dpOn();
+    method public boolean isBluetoothScoAvailableOffCall();
+    method public boolean isBluetoothScoOn();
+    method public boolean isCallScreeningModeSupported();
+    method public static boolean isHapticPlaybackSupported();
+    method public boolean isMicrophoneMute();
+    method public boolean isMusicActive();
+    method public static boolean isOffloadedPlaybackSupported(@NonNull android.media.AudioFormat, @NonNull android.media.AudioAttributes);
+    method public boolean isSpeakerphoneOn();
+    method public boolean isStreamMute(int);
+    method public boolean isSurroundFormatEnabled(int);
+    method public boolean isVolumeFixed();
+    method @Deprecated public boolean isWiredHeadsetOn();
+    method public void loadSoundEffects();
+    method public void playSoundEffect(int);
+    method public void playSoundEffect(int, float);
+    method public void registerAudioDeviceCallback(android.media.AudioDeviceCallback, @Nullable android.os.Handler);
+    method public void registerAudioPlaybackCallback(@NonNull android.media.AudioManager.AudioPlaybackCallback, @Nullable android.os.Handler);
+    method public void registerAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback, @Nullable android.os.Handler);
+    method @Deprecated public void registerMediaButtonEventReceiver(android.content.ComponentName);
+    method @Deprecated public void registerMediaButtonEventReceiver(android.app.PendingIntent);
+    method @Deprecated public void registerRemoteControlClient(android.media.RemoteControlClient);
+    method @Deprecated public boolean registerRemoteController(android.media.RemoteController);
+    method public void removeOnCommunicationDeviceChangedListener(@NonNull android.media.AudioManager.OnCommunicationDeviceChangedListener);
+    method public void removeOnModeChangedListener(@NonNull android.media.AudioManager.OnModeChangedListener);
+    method @Deprecated public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int);
+    method public int requestAudioFocus(@NonNull android.media.AudioFocusRequest);
+    method public void setAllowedCapturePolicy(int);
+    method @Deprecated public void setBluetoothA2dpOn(boolean);
+    method public void setBluetoothScoOn(boolean);
+    method public boolean setCommunicationDevice(@NonNull android.media.AudioDeviceInfo);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SETTINGS) public boolean setEncodedSurroundMode(int);
+    method public void setMicrophoneMute(boolean);
+    method public void setMode(int);
+    method public void setParameters(String);
+    method public void setRingerMode(int);
+    method @Deprecated public void setRouting(int, int, int);
+    method public void setSpeakerphoneOn(boolean);
+    method @Deprecated public void setStreamMute(int, boolean);
+    method @Deprecated public void setStreamSolo(int, boolean);
+    method public void setStreamVolume(int, int, int);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SETTINGS) public boolean setSurroundFormatEnabled(int, boolean);
+    method @Deprecated public void setVibrateSetting(int, int);
+    method @Deprecated public void setWiredHeadsetOn(boolean);
+    method @Deprecated public boolean shouldVibrate(int);
+    method public void startBluetoothSco();
+    method public void stopBluetoothSco();
+    method public void unloadSoundEffects();
+    method public void unregisterAudioDeviceCallback(android.media.AudioDeviceCallback);
+    method public void unregisterAudioPlaybackCallback(@NonNull android.media.AudioManager.AudioPlaybackCallback);
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+    method @Deprecated public void unregisterMediaButtonEventReceiver(android.content.ComponentName);
+    method @Deprecated public void unregisterMediaButtonEventReceiver(android.app.PendingIntent);
+    method @Deprecated public void unregisterRemoteControlClient(android.media.RemoteControlClient);
+    method @Deprecated public void unregisterRemoteController(android.media.RemoteController);
+    field public static final String ACTION_AUDIO_BECOMING_NOISY = "android.media.AUDIO_BECOMING_NOISY";
+    field public static final String ACTION_HDMI_AUDIO_PLUG = "android.media.action.HDMI_AUDIO_PLUG";
+    field public static final String ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG";
+    field public static final String ACTION_MICROPHONE_MUTE_CHANGED = "android.media.action.MICROPHONE_MUTE_CHANGED";
+    field @Deprecated public static final String ACTION_SCO_AUDIO_STATE_CHANGED = "android.media.SCO_AUDIO_STATE_CHANGED";
+    field public static final String ACTION_SCO_AUDIO_STATE_UPDATED = "android.media.ACTION_SCO_AUDIO_STATE_UPDATED";
+    field public static final String ACTION_SPEAKERPHONE_STATE_CHANGED = "android.media.action.SPEAKERPHONE_STATE_CHANGED";
+    field public static final int ADJUST_LOWER = -1; // 0xffffffff
+    field public static final int ADJUST_MUTE = -100; // 0xffffff9c
+    field public static final int ADJUST_RAISE = 1; // 0x1
+    field public static final int ADJUST_SAME = 0; // 0x0
+    field public static final int ADJUST_TOGGLE_MUTE = 101; // 0x65
+    field public static final int ADJUST_UNMUTE = 100; // 0x64
+    field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE = 4; // 0x4
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK = 3; // 0x3
+    field public static final int AUDIOFOCUS_LOSS = -1; // 0xffffffff
+    field public static final int AUDIOFOCUS_LOSS_TRANSIENT = -2; // 0xfffffffe
+    field public static final int AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK = -3; // 0xfffffffd
+    field public static final int AUDIOFOCUS_NONE = 0; // 0x0
+    field public static final int AUDIOFOCUS_REQUEST_DELAYED = 2; // 0x2
+    field public static final int AUDIOFOCUS_REQUEST_FAILED = 0; // 0x0
+    field public static final int AUDIOFOCUS_REQUEST_GRANTED = 1; // 0x1
+    field public static final int AUDIO_SESSION_ID_GENERATE = 0; // 0x0
+    field public static final int ENCODED_SURROUND_OUTPUT_ALWAYS = 2; // 0x2
+    field public static final int ENCODED_SURROUND_OUTPUT_AUTO = 0; // 0x0
+    field public static final int ENCODED_SURROUND_OUTPUT_MANUAL = 3; // 0x3
+    field public static final int ENCODED_SURROUND_OUTPUT_NEVER = 1; // 0x1
+    field public static final int ENCODED_SURROUND_OUTPUT_UNKNOWN = -1; // 0xffffffff
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa
+    field public static final String EXTRA_AUDIO_PLUG_STATE = "android.media.extra.AUDIO_PLUG_STATE";
+    field public static final String EXTRA_ENCODINGS = "android.media.extra.ENCODINGS";
+    field public static final String EXTRA_MAX_CHANNEL_COUNT = "android.media.extra.MAX_CHANNEL_COUNT";
+    field public static final String EXTRA_RINGER_MODE = "android.media.EXTRA_RINGER_MODE";
+    field public static final String EXTRA_SCO_AUDIO_PREVIOUS_STATE = "android.media.extra.SCO_AUDIO_PREVIOUS_STATE";
+    field public static final String EXTRA_SCO_AUDIO_STATE = "android.media.extra.SCO_AUDIO_STATE";
+    field @Deprecated public static final String EXTRA_VIBRATE_SETTING = "android.media.EXTRA_VIBRATE_SETTING";
+    field @Deprecated public static final String EXTRA_VIBRATE_TYPE = "android.media.EXTRA_VIBRATE_TYPE";
+    field public static final int FLAG_ALLOW_RINGER_MODES = 2; // 0x2
+    field public static final int FLAG_PLAY_SOUND = 4; // 0x4
+    field public static final int FLAG_REMOVE_SOUND_AND_VIBRATE = 8; // 0x8
+    field public static final int FLAG_SHOW_UI = 1; // 0x1
+    field public static final int FLAG_VIBRATE = 16; // 0x10
+    field public static final int FX_BACK = 10; // 0xa
+    field public static final int FX_FOCUS_NAVIGATION_DOWN = 2; // 0x2
+    field public static final int FX_FOCUS_NAVIGATION_LEFT = 3; // 0x3
+    field public static final int FX_FOCUS_NAVIGATION_RIGHT = 4; // 0x4
+    field public static final int FX_FOCUS_NAVIGATION_UP = 1; // 0x1
+    field public static final int FX_KEYPRESS_DELETE = 7; // 0x7
+    field public static final int FX_KEYPRESS_INVALID = 9; // 0x9
+    field public static final int FX_KEYPRESS_RETURN = 8; // 0x8
+    field public static final int FX_KEYPRESS_SPACEBAR = 6; // 0x6
+    field public static final int FX_KEYPRESS_STANDARD = 5; // 0x5
+    field public static final int FX_KEY_CLICK = 0; // 0x0
+    field public static final int GET_DEVICES_ALL = 3; // 0x3
+    field public static final int GET_DEVICES_INPUTS = 1; // 0x1
+    field public static final int GET_DEVICES_OUTPUTS = 2; // 0x2
+    field public static final int MODE_CALL_SCREENING = 4; // 0x4
+    field public static final int MODE_CURRENT = -1; // 0xffffffff
+    field public static final int MODE_INVALID = -2; // 0xfffffffe
+    field public static final int MODE_IN_CALL = 2; // 0x2
+    field public static final int MODE_IN_COMMUNICATION = 3; // 0x3
+    field public static final int MODE_NORMAL = 0; // 0x0
+    field public static final int MODE_RINGTONE = 1; // 0x1
+    field @Deprecated public static final int NUM_STREAMS = 5; // 0x5
+    field public static final int PLAYBACK_OFFLOAD_GAPLESS_SUPPORTED = 2; // 0x2
+    field public static final int PLAYBACK_OFFLOAD_NOT_SUPPORTED = 0; // 0x0
+    field public static final int PLAYBACK_OFFLOAD_SUPPORTED = 1; // 0x1
+    field public static final String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER";
+    field public static final String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE";
+    field public static final String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED";
+    field public static final String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND";
+    field public static final String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND";
+    field public static final String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED";
+    field public static final int RINGER_MODE_NORMAL = 2; // 0x2
+    field public static final int RINGER_MODE_SILENT = 0; // 0x0
+    field public static final int RINGER_MODE_VIBRATE = 1; // 0x1
+    field @Deprecated public static final int ROUTE_ALL = -1; // 0xffffffff
+    field @Deprecated public static final int ROUTE_BLUETOOTH = 4; // 0x4
+    field @Deprecated public static final int ROUTE_BLUETOOTH_A2DP = 16; // 0x10
+    field @Deprecated public static final int ROUTE_BLUETOOTH_SCO = 4; // 0x4
+    field @Deprecated public static final int ROUTE_EARPIECE = 1; // 0x1
+    field @Deprecated public static final int ROUTE_HEADSET = 8; // 0x8
+    field @Deprecated public static final int ROUTE_SPEAKER = 2; // 0x2
+    field public static final int SCO_AUDIO_STATE_CONNECTED = 1; // 0x1
+    field public static final int SCO_AUDIO_STATE_CONNECTING = 2; // 0x2
+    field public static final int SCO_AUDIO_STATE_DISCONNECTED = 0; // 0x0
+    field public static final int SCO_AUDIO_STATE_ERROR = -1; // 0xffffffff
+    field public static final int STREAM_ACCESSIBILITY = 10; // 0xa
+    field public static final int STREAM_ALARM = 4; // 0x4
+    field public static final int STREAM_DTMF = 8; // 0x8
+    field public static final int STREAM_MUSIC = 3; // 0x3
+    field public static final int STREAM_NOTIFICATION = 5; // 0x5
+    field public static final int STREAM_RING = 2; // 0x2
+    field public static final int STREAM_SYSTEM = 1; // 0x1
+    field public static final int STREAM_VOICE_CALL = 0; // 0x0
+    field public static final int USE_DEFAULT_STREAM_TYPE = -2147483648; // 0x80000000
+    field @Deprecated public static final String VIBRATE_SETTING_CHANGED_ACTION = "android.media.VIBRATE_SETTING_CHANGED";
+    field @Deprecated public static final int VIBRATE_SETTING_OFF = 0; // 0x0
+    field @Deprecated public static final int VIBRATE_SETTING_ON = 1; // 0x1
+    field @Deprecated public static final int VIBRATE_SETTING_ONLY_SILENT = 2; // 0x2
+    field @Deprecated public static final int VIBRATE_TYPE_NOTIFICATION = 1; // 0x1
+    field @Deprecated public static final int VIBRATE_TYPE_RINGER = 0; // 0x0
+  }
+
+  public abstract static class AudioManager.AudioPlaybackCallback {
+    ctor public AudioManager.AudioPlaybackCallback();
+    method public void onPlaybackConfigChanged(java.util.List<android.media.AudioPlaybackConfiguration>);
+  }
+
+  public abstract static class AudioManager.AudioRecordingCallback {
+    ctor public AudioManager.AudioRecordingCallback();
+    method public void onRecordingConfigChanged(java.util.List<android.media.AudioRecordingConfiguration>);
+  }
+
+  public static interface AudioManager.OnAudioFocusChangeListener {
+    method public void onAudioFocusChange(int);
+  }
+
+  public static interface AudioManager.OnCommunicationDeviceChangedListener {
+    method public void onCommunicationDeviceChanged(@Nullable android.media.AudioDeviceInfo);
+  }
+
+  public static interface AudioManager.OnModeChangedListener {
+    method public void onModeChanged(int);
+  }
+
+  public final class AudioMetadata {
+    method @NonNull public static android.media.AudioMetadataMap createMap();
+  }
+
+  public static class AudioMetadata.Format {
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Boolean> KEY_ATMOS_PRESENT;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_AUDIO_ENCODING;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_BIT_RATE;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_BIT_WIDTH;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_CHANNEL_MASK;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.String> KEY_MIME;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_PRESENTATION_CONTENT_CLASSIFIER;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_PRESENTATION_ID;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.String> KEY_PRESENTATION_LANGUAGE;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_PROGRAM_ID;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_SAMPLE_RATE;
+  }
+
+  public static interface AudioMetadata.Key<T> {
+    method @NonNull public String getName();
+    method @NonNull public Class<T> getValueClass();
+  }
+
+  public interface AudioMetadataMap extends android.media.AudioMetadataReadMap {
+    method @Nullable public <T> T remove(@NonNull android.media.AudioMetadata.Key<T>);
+    method @Nullable public <T> T set(@NonNull android.media.AudioMetadata.Key<T>, @NonNull T);
+  }
+
+  public interface AudioMetadataReadMap {
+    method public <T> boolean containsKey(@NonNull android.media.AudioMetadata.Key<T>);
+    method @NonNull public android.media.AudioMetadataMap dup();
+    method @Nullable public <T> T get(@NonNull android.media.AudioMetadata.Key<T>);
+    method @IntRange(from=0) public int size();
+  }
+
+  public final class AudioPlaybackCaptureConfiguration {
+    method @NonNull public int[] getExcludeUids();
+    method @NonNull public int[] getExcludeUsages();
+    method @NonNull public int[] getMatchingUids();
+    method @NonNull public int[] getMatchingUsages();
+    method @NonNull public android.media.projection.MediaProjection getMediaProjection();
+  }
+
+  public static final class AudioPlaybackCaptureConfiguration.Builder {
+    ctor public AudioPlaybackCaptureConfiguration.Builder(@NonNull android.media.projection.MediaProjection);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUid(int);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(int);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration build();
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(int);
+  }
+
+  public final class AudioPlaybackConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.AudioAttributes getAudioAttributes();
+    method @Nullable public android.media.AudioDeviceInfo getAudioDeviceInfo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioPlaybackConfiguration> CREATOR;
+  }
+
+  public final class AudioPresentation {
+    method public java.util.Map<java.util.Locale,java.lang.String> getLabels();
+    method public java.util.Locale getLocale();
+    method public int getMasteringIndication();
+    method public int getPresentationId();
+    method public int getProgramId();
+    method public boolean hasAudioDescription();
+    method public boolean hasDialogueEnhancement();
+    method public boolean hasSpokenSubtitles();
+    field public static final int CONTENT_COMMENTARY = 5; // 0x5
+    field public static final int CONTENT_DIALOG = 4; // 0x4
+    field public static final int CONTENT_EMERGENCY = 6; // 0x6
+    field public static final int CONTENT_HEARING_IMPAIRED = 3; // 0x3
+    field public static final int CONTENT_MAIN = 0; // 0x0
+    field public static final int CONTENT_MUSIC_AND_EFFECTS = 1; // 0x1
+    field public static final int CONTENT_UNKNOWN = -1; // 0xffffffff
+    field public static final int CONTENT_VISUALLY_IMPAIRED = 2; // 0x2
+    field public static final int CONTENT_VOICEOVER = 7; // 0x7
+    field public static final int MASTERED_FOR_3D = 3; // 0x3
+    field public static final int MASTERED_FOR_HEADPHONE = 4; // 0x4
+    field public static final int MASTERED_FOR_STEREO = 1; // 0x1
+    field public static final int MASTERED_FOR_SURROUND = 2; // 0x2
+    field public static final int MASTERING_NOT_INDICATED = 0; // 0x0
+  }
+
+  public static final class AudioPresentation.Builder {
+    ctor public AudioPresentation.Builder(int);
+    method @NonNull public android.media.AudioPresentation build();
+    method @NonNull public android.media.AudioPresentation.Builder setHasAudioDescription(boolean);
+    method @NonNull public android.media.AudioPresentation.Builder setHasDialogueEnhancement(boolean);
+    method @NonNull public android.media.AudioPresentation.Builder setHasSpokenSubtitles(boolean);
+    method @NonNull public android.media.AudioPresentation.Builder setLabels(@NonNull java.util.Map<android.icu.util.ULocale,java.lang.CharSequence>);
+    method @NonNull public android.media.AudioPresentation.Builder setLocale(@NonNull android.icu.util.ULocale);
+    method @NonNull public android.media.AudioPresentation.Builder setMasteringIndication(int);
+    method @NonNull public android.media.AudioPresentation.Builder setProgramId(int);
+  }
+
+  public class AudioProfile {
+    method @NonNull public int[] getChannelIndexMasks();
+    method @NonNull public int[] getChannelMasks();
+    method public int getEncapsulationType();
+    method public int getFormat();
+    method @NonNull public int[] getSampleRates();
+    field public static final int AUDIO_ENCAPSULATION_TYPE_IEC61937 = 1; // 0x1
+    field public static final int AUDIO_ENCAPSULATION_TYPE_NONE = 0; // 0x0
+  }
+
+  public class AudioRecord implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection {
+    ctor @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method @Deprecated public void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+    method protected void finalize();
+    method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException;
+    method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration();
+    method public int getAudioFormat();
+    method public int getAudioSessionId();
+    method public int getAudioSource();
+    method public int getBufferSizeInFrames();
+    method public int getChannelConfiguration();
+    method public int getChannelCount();
+    method @NonNull public android.media.AudioFormat getFormat();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public android.os.PersistableBundle getMetrics();
+    method public static int getMinBufferSize(int, int, int);
+    method public int getNotificationMarkerPosition();
+    method public int getPositionNotificationPeriod();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public int getRecordingState();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public int getSampleRate();
+    method public int getState();
+    method public int getTimestamp(@NonNull android.media.AudioTimestamp, int);
+    method public boolean isPrivacySensitive();
+    method public int read(@NonNull byte[], int, int);
+    method public int read(@NonNull byte[], int, int, int);
+    method public int read(@NonNull short[], int, int);
+    method public int read(@NonNull short[], int, int, int);
+    method public int read(@NonNull float[], int, int, int);
+    method public int read(@NonNull java.nio.ByteBuffer, int);
+    method public int read(@NonNull java.nio.ByteBuffer, int, int);
+    method public void registerAudioRecordingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioRecordingCallback);
+    method public void release();
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public int setNotificationMarkerPosition(int);
+    method public int setPositionNotificationPeriod(int);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredMicrophoneDirection(int);
+    method public boolean setPreferredMicrophoneFieldDimension(@FloatRange(from=-1.0, to=1.0) float);
+    method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener);
+    method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener, android.os.Handler);
+    method public void startRecording() throws java.lang.IllegalStateException;
+    method public void startRecording(android.media.MediaSyncEvent) throws java.lang.IllegalStateException;
+    method public void stop() throws java.lang.IllegalStateException;
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -2; // 0xfffffffe
+    field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa
+    field public static final int ERROR_INVALID_OPERATION = -3; // 0xfffffffd
+    field public static final int READ_BLOCKING = 0; // 0x0
+    field public static final int READ_NON_BLOCKING = 1; // 0x1
+    field public static final int RECORDSTATE_RECORDING = 3; // 0x3
+    field public static final int RECORDSTATE_STOPPED = 1; // 0x1
+    field public static final int STATE_INITIALIZED = 1; // 0x1
+    field public static final int STATE_UNINITIALIZED = 0; // 0x0
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static class AudioRecord.Builder {
+    ctor public AudioRecord.Builder();
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public android.media.AudioRecord build() throws java.lang.UnsupportedOperationException;
+    method public android.media.AudioRecord.Builder setAudioFormat(@NonNull android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioRecord.Builder setAudioPlaybackCaptureConfig(@NonNull android.media.AudioPlaybackCaptureConfiguration);
+    method public android.media.AudioRecord.Builder setAudioSource(int) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioRecord.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioRecord.Builder setContext(@NonNull android.content.Context);
+    method @NonNull public android.media.AudioRecord.Builder setPrivacySensitive(boolean);
+  }
+
+  public static final class AudioRecord.MetricsConstants {
+    field public static final String CHANNELS = "android.media.audiorecord.channels";
+    field public static final String ENCODING = "android.media.audiorecord.encoding";
+    field @Deprecated public static final String LATENCY = "android.media.audiorecord.latency";
+    field public static final String SAMPLERATE = "android.media.audiorecord.samplerate";
+    field public static final String SOURCE = "android.media.audiorecord.source";
+  }
+
+  public static interface AudioRecord.OnRecordPositionUpdateListener {
+    method public void onMarkerReached(android.media.AudioRecord);
+    method public void onPeriodicNotification(android.media.AudioRecord);
+  }
+
+  @Deprecated public static interface AudioRecord.OnRoutingChangedListener extends android.media.AudioRouting.OnRoutingChangedListener {
+    method @Deprecated public void onRoutingChanged(android.media.AudioRecord);
+    method @Deprecated public default void onRoutingChanged(android.media.AudioRouting);
+  }
+
+  public final class AudioRecordingConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.AudioDeviceInfo getAudioDevice();
+    method public int getAudioSource();
+    method public int getClientAudioSessionId();
+    method public int getClientAudioSource();
+    method @NonNull public java.util.List<android.media.audiofx.AudioEffect.Descriptor> getClientEffects();
+    method public android.media.AudioFormat getClientFormat();
+    method @NonNull public java.util.List<android.media.audiofx.AudioEffect.Descriptor> getEffects();
+    method public android.media.AudioFormat getFormat();
+    method public boolean isClientSilenced();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioRecordingConfiguration> CREATOR;
+  }
+
+  public interface AudioRecordingMonitor {
+    method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration();
+    method public void registerAudioRecordingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioRecordingCallback);
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+  }
+
+  public interface AudioRouting {
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+  }
+
+  public static interface AudioRouting.OnRoutingChangedListener {
+    method public void onRoutingChanged(android.media.AudioRouting);
+  }
+
+  public final class AudioTimestamp {
+    ctor public AudioTimestamp();
+    field public static final int TIMEBASE_BOOTTIME = 1; // 0x1
+    field public static final int TIMEBASE_MONOTONIC = 0; // 0x0
+    field public long framePosition;
+    field public long nanoTime;
+  }
+
+  public class AudioTrack implements android.media.AudioRouting android.media.VolumeAutomation {
+    ctor @Deprecated public AudioTrack(int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    ctor @Deprecated public AudioTrack(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    ctor public AudioTrack(android.media.AudioAttributes, android.media.AudioFormat, int, int, int) throws java.lang.IllegalArgumentException;
+    method public void addOnCodecFormatChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioTrack.OnCodecFormatChangedListener);
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method @Deprecated public void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
+    method public int attachAuxEffect(int);
+    method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration);
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method public float getAudioDescriptionMixLeveldB();
+    method public int getAudioFormat();
+    method public int getAudioSessionId();
+    method @IntRange(from=0) public int getBufferCapacityInFrames();
+    method @IntRange(from=0) public int getBufferSizeInFrames();
+    method public int getChannelConfiguration();
+    method public int getChannelCount();
+    method public int getDualMonoMode();
+    method @NonNull public android.media.AudioFormat getFormat();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public static float getMaxVolume();
+    method public android.os.PersistableBundle getMetrics();
+    method public static int getMinBufferSize(int, int, int);
+    method public static float getMinVolume();
+    method @Deprecated protected int getNativeFrameCount();
+    method public static int getNativeOutputSampleRate(int);
+    method public int getNotificationMarkerPosition();
+    method @IntRange(from=0) public int getOffloadDelay();
+    method @IntRange(from=0) public int getOffloadPadding();
+    method public int getPerformanceMode();
+    method public int getPlayState();
+    method public int getPlaybackHeadPosition();
+    method @NonNull public android.media.PlaybackParams getPlaybackParams();
+    method public int getPlaybackRate();
+    method public int getPositionNotificationPeriod();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public int getSampleRate();
+    method @IntRange(from=1) public int getStartThresholdInFrames();
+    method public int getState();
+    method public int getStreamType();
+    method public boolean getTimestamp(android.media.AudioTimestamp);
+    method public int getUnderrunCount();
+    method public static boolean isDirectPlaybackSupported(@NonNull android.media.AudioFormat, @NonNull android.media.AudioAttributes);
+    method public boolean isOffloadedPlayback();
+    method public void pause() throws java.lang.IllegalStateException;
+    method public void play() throws java.lang.IllegalStateException;
+    method public void registerStreamEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioTrack.StreamEventCallback);
+    method public void release();
+    method public int reloadStaticData();
+    method public void removeOnCodecFormatChangedListener(@NonNull android.media.AudioTrack.OnCodecFormatChangedListener);
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener);
+    method public boolean setAudioDescriptionMixLeveldB(@FloatRange(to=48.0f, toInclusive=true) float);
+    method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float);
+    method public int setBufferSizeInFrames(@IntRange(from=0) int);
+    method public boolean setDualMonoMode(int);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public int setLoopPoints(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int);
+    method public int setNotificationMarkerPosition(int);
+    method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public void setOffloadEndOfStream();
+    method public int setPlaybackHeadPosition(@IntRange(from=0) int);
+    method public void setPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener);
+    method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler);
+    method public int setPlaybackRate(int);
+    method public int setPositionNotificationPeriod(int);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public int setPresentation(@NonNull android.media.AudioPresentation);
+    method @IntRange(from=1) public int setStartThresholdInFrames(@IntRange(from=1) int);
+    method @Deprecated protected void setState(int);
+    method @Deprecated public int setStereoVolume(float, float);
+    method public int setVolume(float);
+    method public void stop() throws java.lang.IllegalStateException;
+    method public void unregisterStreamEventCallback(@NonNull android.media.AudioTrack.StreamEventCallback);
+    method public int write(@NonNull byte[], int, int);
+    method public int write(@NonNull byte[], int, int, int);
+    method public int write(@NonNull short[], int, int);
+    method public int write(@NonNull short[], int, int, int);
+    method public int write(@NonNull float[], int, int, int);
+    method public int write(@NonNull java.nio.ByteBuffer, int, int);
+    method public int write(@NonNull java.nio.ByteBuffer, int, int, long);
+    field public static final int DUAL_MONO_MODE_LL = 2; // 0x2
+    field public static final int DUAL_MONO_MODE_LR = 1; // 0x1
+    field public static final int DUAL_MONO_MODE_OFF = 0; // 0x0
+    field public static final int DUAL_MONO_MODE_RR = 3; // 0x3
+    field public static final int ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR = 2; // 0x2
+    field public static final int ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER = 1; // 0x1
+    field public static final int ENCAPSULATION_MODE_ELEMENTARY_STREAM = 1; // 0x1
+    field public static final int ENCAPSULATION_MODE_NONE = 0; // 0x0
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -2; // 0xfffffffe
+    field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa
+    field public static final int ERROR_INVALID_OPERATION = -3; // 0xfffffffd
+    field public static final int MODE_STATIC = 0; // 0x0
+    field public static final int MODE_STREAM = 1; // 0x1
+    field public static final int PERFORMANCE_MODE_LOW_LATENCY = 1; // 0x1
+    field public static final int PERFORMANCE_MODE_NONE = 0; // 0x0
+    field public static final int PERFORMANCE_MODE_POWER_SAVING = 2; // 0x2
+    field public static final int PLAYSTATE_PAUSED = 2; // 0x2
+    field public static final int PLAYSTATE_PLAYING = 3; // 0x3
+    field public static final int PLAYSTATE_STOPPED = 1; // 0x1
+    field public static final int STATE_INITIALIZED = 1; // 0x1
+    field public static final int STATE_NO_STATIC_DATA = 2; // 0x2
+    field public static final int STATE_UNINITIALIZED = 0; // 0x0
+    field public static final int SUCCESS = 0; // 0x0
+    field public static final int WRITE_BLOCKING = 0; // 0x0
+    field public static final int WRITE_NON_BLOCKING = 1; // 0x1
+  }
+
+  public static class AudioTrack.Builder {
+    ctor public AudioTrack.Builder();
+    method @NonNull public android.media.AudioTrack build() throws java.lang.UnsupportedOperationException;
+    method @NonNull public android.media.AudioTrack.Builder setAudioAttributes(@NonNull android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setAudioFormat(@NonNull android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setBufferSizeInBytes(@IntRange(from=0) int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setEncapsulationMode(int);
+    method @NonNull public android.media.AudioTrack.Builder setOffloadedPlayback(boolean);
+    method @NonNull public android.media.AudioTrack.Builder setPerformanceMode(int);
+    method @NonNull public android.media.AudioTrack.Builder setSessionId(@IntRange(from=1) int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setTransferMode(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public static final class AudioTrack.MetricsConstants {
+    field @Deprecated public static final String CHANNELMASK = "android.media.audiorecord.channelmask";
+    field public static final String CONTENTTYPE = "android.media.audiotrack.type";
+    field @Deprecated public static final String SAMPLERATE = "android.media.audiorecord.samplerate";
+    field public static final String STREAMTYPE = "android.media.audiotrack.streamtype";
+    field public static final String USAGE = "android.media.audiotrack.usage";
+  }
+
+  public static interface AudioTrack.OnCodecFormatChangedListener {
+    method public void onCodecFormatChanged(@NonNull android.media.AudioTrack, @Nullable android.media.AudioMetadataReadMap);
+  }
+
+  public static interface AudioTrack.OnPlaybackPositionUpdateListener {
+    method public void onMarkerReached(android.media.AudioTrack);
+    method public void onPeriodicNotification(android.media.AudioTrack);
+  }
+
+  @Deprecated public static interface AudioTrack.OnRoutingChangedListener extends android.media.AudioRouting.OnRoutingChangedListener {
+    method @Deprecated public void onRoutingChanged(android.media.AudioTrack);
+    method @Deprecated public default void onRoutingChanged(android.media.AudioRouting);
+  }
+
+  public abstract static class AudioTrack.StreamEventCallback {
+    ctor public AudioTrack.StreamEventCallback();
+    method public void onDataRequest(@NonNull android.media.AudioTrack, @IntRange(from=0) int);
+    method public void onPresentationEnded(@NonNull android.media.AudioTrack);
+    method public void onTearDown(@NonNull android.media.AudioTrack);
+  }
+
+  public class CamcorderProfile {
+    method @Deprecated public static android.media.CamcorderProfile get(int);
+    method @Deprecated public static android.media.CamcorderProfile get(int, int);
+    method @Nullable public static android.media.EncoderProfiles getAll(@NonNull String, int);
+    method public static boolean hasProfile(int);
+    method public static boolean hasProfile(int, int);
+    field public static final int QUALITY_1080P = 6; // 0x6
+    field public static final int QUALITY_2160P = 8; // 0x8
+    field public static final int QUALITY_2K = 12; // 0xc
+    field public static final int QUALITY_480P = 4; // 0x4
+    field public static final int QUALITY_4KDCI = 10; // 0xa
+    field public static final int QUALITY_720P = 5; // 0x5
+    field public static final int QUALITY_8KUHD = 13; // 0xd
+    field public static final int QUALITY_CIF = 3; // 0x3
+    field public static final int QUALITY_HIGH = 1; // 0x1
+    field public static final int QUALITY_HIGH_SPEED_1080P = 2004; // 0x7d4
+    field public static final int QUALITY_HIGH_SPEED_2160P = 2005; // 0x7d5
+    field public static final int QUALITY_HIGH_SPEED_480P = 2002; // 0x7d2
+    field public static final int QUALITY_HIGH_SPEED_4KDCI = 2008; // 0x7d8
+    field public static final int QUALITY_HIGH_SPEED_720P = 2003; // 0x7d3
+    field public static final int QUALITY_HIGH_SPEED_CIF = 2006; // 0x7d6
+    field public static final int QUALITY_HIGH_SPEED_HIGH = 2001; // 0x7d1
+    field public static final int QUALITY_HIGH_SPEED_LOW = 2000; // 0x7d0
+    field public static final int QUALITY_HIGH_SPEED_VGA = 2007; // 0x7d7
+    field public static final int QUALITY_LOW = 0; // 0x0
+    field public static final int QUALITY_QCIF = 2; // 0x2
+    field public static final int QUALITY_QHD = 11; // 0xb
+    field public static final int QUALITY_QVGA = 7; // 0x7
+    field public static final int QUALITY_TIME_LAPSE_1080P = 1006; // 0x3ee
+    field public static final int QUALITY_TIME_LAPSE_2160P = 1008; // 0x3f0
+    field public static final int QUALITY_TIME_LAPSE_2K = 1012; // 0x3f4
+    field public static final int QUALITY_TIME_LAPSE_480P = 1004; // 0x3ec
+    field public static final int QUALITY_TIME_LAPSE_4KDCI = 1010; // 0x3f2
+    field public static final int QUALITY_TIME_LAPSE_720P = 1005; // 0x3ed
+    field public static final int QUALITY_TIME_LAPSE_8KUHD = 1013; // 0x3f5
+    field public static final int QUALITY_TIME_LAPSE_CIF = 1003; // 0x3eb
+    field public static final int QUALITY_TIME_LAPSE_HIGH = 1001; // 0x3e9
+    field public static final int QUALITY_TIME_LAPSE_LOW = 1000; // 0x3e8
+    field public static final int QUALITY_TIME_LAPSE_QCIF = 1002; // 0x3ea
+    field public static final int QUALITY_TIME_LAPSE_QHD = 1011; // 0x3f3
+    field public static final int QUALITY_TIME_LAPSE_QVGA = 1007; // 0x3ef
+    field public static final int QUALITY_TIME_LAPSE_VGA = 1009; // 0x3f1
+    field public static final int QUALITY_VGA = 9; // 0x9
+    field public int audioBitRate;
+    field public int audioChannels;
+    field public int audioCodec;
+    field public int audioSampleRate;
+    field public int duration;
+    field public int fileFormat;
+    field public int quality;
+    field public int videoBitRate;
+    field public int videoCodec;
+    field public int videoFrameHeight;
+    field public int videoFrameRate;
+    field public int videoFrameWidth;
+  }
+
+  public class CameraProfile {
+    ctor public CameraProfile();
+    method public static int getJpegEncodingQualityParameter(int);
+    method public static int getJpegEncodingQualityParameter(int, int);
+    field public static final int QUALITY_HIGH = 2; // 0x2
+    field public static final int QUALITY_LOW = 0; // 0x0
+    field public static final int QUALITY_MEDIUM = 1; // 0x1
+  }
+
+  public final class DeniedByServerException extends android.media.MediaDrmException {
+    ctor public DeniedByServerException(String);
+  }
+
+  public abstract class DrmInitData {
+    method @Deprecated public abstract android.media.DrmInitData.SchemeInitData get(java.util.UUID);
+    method @NonNull public android.media.DrmInitData.SchemeInitData getSchemeInitDataAt(int);
+    method public int getSchemeInitDataCount();
+  }
+
+  public static final class DrmInitData.SchemeInitData {
+    ctor public DrmInitData.SchemeInitData(@NonNull java.util.UUID, @NonNull String, @NonNull byte[]);
+    field @NonNull public static final java.util.UUID UUID_NIL;
+    field public final byte[] data;
+    field public final String mimeType;
+    field @NonNull public final java.util.UUID uuid;
+  }
+
+  public final class EncoderProfiles {
+    method @NonNull public java.util.List<android.media.EncoderProfiles.AudioProfile> getAudioProfiles();
+    method public int getDefaultDurationSeconds();
+    method public int getRecommendedFileFormat();
+    method @NonNull public java.util.List<android.media.EncoderProfiles.VideoProfile> getVideoProfiles();
+  }
+
+  public static final class EncoderProfiles.AudioProfile {
+    method public int getBitrate();
+    method public int getChannels();
+    method public int getCodec();
+    method @NonNull public String getMediaType();
+    method public int getProfile();
+    method public int getSampleRate();
+  }
+
+  public static final class EncoderProfiles.VideoProfile {
+    method public int getBitrate();
+    method public int getCodec();
+    method public int getFrameRate();
+    method public int getHeight();
+    method @NonNull public String getMediaType();
+    method public int getProfile();
+    method public int getWidth();
+  }
+
+  public class ExifInterface {
+    ctor public ExifInterface(@NonNull java.io.File) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull String) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull java.io.InputStream) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull java.io.InputStream, int) throws java.io.IOException;
+    method public double getAltitude(double);
+    method @Nullable public String getAttribute(@NonNull String);
+    method @Nullable public byte[] getAttributeBytes(@NonNull String);
+    method public double getAttributeDouble(@NonNull String, double);
+    method public int getAttributeInt(@NonNull String, int);
+    method @Nullable public long[] getAttributeRange(@NonNull String);
+    method public long getDateTime();
+    method public long getDateTimeDigitized();
+    method public long getDateTimeOriginal();
+    method public long getGpsDateTime();
+    method public boolean getLatLong(float[]);
+    method public byte[] getThumbnail();
+    method public android.graphics.Bitmap getThumbnailBitmap();
+    method public byte[] getThumbnailBytes();
+    method @Nullable public long[] getThumbnailRange();
+    method public boolean hasAttribute(@NonNull String);
+    method public boolean hasThumbnail();
+    method public static boolean isSupportedMimeType(@NonNull String);
+    method public boolean isThumbnailCompressed();
+    method public void saveAttributes() throws java.io.IOException;
+    method public void setAttribute(@NonNull String, @Nullable String);
+    field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2
+    field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4
+    field public static final int ORIENTATION_NORMAL = 1; // 0x1
+    field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3
+    field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8
+    field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6
+    field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5
+    field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7
+    field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+    field public static final int STREAM_TYPE_EXIF_DATA_ONLY = 1; // 0x1
+    field public static final int STREAM_TYPE_FULL_IMAGE_DATA = 0; // 0x0
+    field @Deprecated public static final String TAG_APERTURE = "FNumber";
+    field public static final String TAG_APERTURE_VALUE = "ApertureValue";
+    field public static final String TAG_ARTIST = "Artist";
+    field public static final String TAG_BITS_PER_SAMPLE = "BitsPerSample";
+    field public static final String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
+    field public static final String TAG_CFA_PATTERN = "CFAPattern";
+    field public static final String TAG_COLOR_SPACE = "ColorSpace";
+    field public static final String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
+    field public static final String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
+    field public static final String TAG_COMPRESSION = "Compression";
+    field public static final String TAG_CONTRAST = "Contrast";
+    field public static final String TAG_COPYRIGHT = "Copyright";
+    field public static final String TAG_CUSTOM_RENDERED = "CustomRendered";
+    field public static final String TAG_DATETIME = "DateTime";
+    field public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
+    field public static final String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
+    field public static final String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
+    field public static final String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
+    field public static final String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
+    field public static final String TAG_DNG_VERSION = "DNGVersion";
+    field public static final String TAG_EXIF_VERSION = "ExifVersion";
+    field public static final String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
+    field public static final String TAG_EXPOSURE_INDEX = "ExposureIndex";
+    field public static final String TAG_EXPOSURE_MODE = "ExposureMode";
+    field public static final String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
+    field public static final String TAG_EXPOSURE_TIME = "ExposureTime";
+    field public static final String TAG_FILE_SOURCE = "FileSource";
+    field public static final String TAG_FLASH = "Flash";
+    field public static final String TAG_FLASHPIX_VERSION = "FlashpixVersion";
+    field public static final String TAG_FLASH_ENERGY = "FlashEnergy";
+    field public static final String TAG_FOCAL_LENGTH = "FocalLength";
+    field public static final String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
+    field public static final String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
+    field public static final String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
+    field public static final String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
+    field public static final String TAG_F_NUMBER = "FNumber";
+    field public static final String TAG_GAIN_CONTROL = "GainControl";
+    field public static final String TAG_GPS_ALTITUDE = "GPSAltitude";
+    field public static final String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
+    field public static final String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
+    field public static final String TAG_GPS_DATESTAMP = "GPSDateStamp";
+    field public static final String TAG_GPS_DEST_BEARING = "GPSDestBearing";
+    field public static final String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
+    field public static final String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
+    field public static final String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
+    field public static final String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
+    field public static final String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
+    field public static final String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
+    field public static final String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
+    field public static final String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
+    field public static final String TAG_GPS_DOP = "GPSDOP";
+    field public static final String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
+    field public static final String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
+    field public static final String TAG_GPS_LATITUDE = "GPSLatitude";
+    field public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
+    field public static final String TAG_GPS_LONGITUDE = "GPSLongitude";
+    field public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
+    field public static final String TAG_GPS_MAP_DATUM = "GPSMapDatum";
+    field public static final String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
+    field public static final String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
+    field public static final String TAG_GPS_SATELLITES = "GPSSatellites";
+    field public static final String TAG_GPS_SPEED = "GPSSpeed";
+    field public static final String TAG_GPS_SPEED_REF = "GPSSpeedRef";
+    field public static final String TAG_GPS_STATUS = "GPSStatus";
+    field public static final String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
+    field public static final String TAG_GPS_TRACK = "GPSTrack";
+    field public static final String TAG_GPS_TRACK_REF = "GPSTrackRef";
+    field public static final String TAG_GPS_VERSION_ID = "GPSVersionID";
+    field public static final String TAG_IMAGE_DESCRIPTION = "ImageDescription";
+    field public static final String TAG_IMAGE_LENGTH = "ImageLength";
+    field public static final String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
+    field public static final String TAG_IMAGE_WIDTH = "ImageWidth";
+    field public static final String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
+    field @Deprecated public static final String TAG_ISO = "ISOSpeedRatings";
+    field public static final String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
+    field public static final String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
+    field public static final String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
+    field public static final String TAG_LIGHT_SOURCE = "LightSource";
+    field public static final String TAG_MAKE = "Make";
+    field public static final String TAG_MAKER_NOTE = "MakerNote";
+    field public static final String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
+    field public static final String TAG_METERING_MODE = "MeteringMode";
+    field public static final String TAG_MODEL = "Model";
+    field public static final String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
+    field public static final String TAG_OECF = "OECF";
+    field public static final String TAG_OFFSET_TIME = "OffsetTime";
+    field public static final String TAG_OFFSET_TIME_DIGITIZED = "OffsetTimeDigitized";
+    field public static final String TAG_OFFSET_TIME_ORIGINAL = "OffsetTimeOriginal";
+    field public static final String TAG_ORF_ASPECT_FRAME = "AspectFrame";
+    field public static final String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
+    field public static final String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
+    field public static final String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
+    field public static final String TAG_ORIENTATION = "Orientation";
+    field public static final String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
+    field public static final String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
+    field public static final String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
+    field public static final String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
+    field public static final String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
+    field public static final String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
+    field public static final String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
+    field public static final String TAG_RESOLUTION_UNIT = "ResolutionUnit";
+    field public static final String TAG_ROWS_PER_STRIP = "RowsPerStrip";
+    field public static final String TAG_RW2_ISO = "ISO";
+    field public static final String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+    field public static final String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
+    field public static final String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
+    field public static final String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
+    field public static final String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
+    field public static final String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
+    field public static final String TAG_SATURATION = "Saturation";
+    field public static final String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
+    field public static final String TAG_SCENE_TYPE = "SceneType";
+    field public static final String TAG_SENSING_METHOD = "SensingMethod";
+    field public static final String TAG_SHARPNESS = "Sharpness";
+    field public static final String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
+    field public static final String TAG_SOFTWARE = "Software";
+    field public static final String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
+    field public static final String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
+    field public static final String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
+    field public static final String TAG_STRIP_OFFSETS = "StripOffsets";
+    field public static final String TAG_SUBFILE_TYPE = "SubfileType";
+    field public static final String TAG_SUBJECT_AREA = "SubjectArea";
+    field public static final String TAG_SUBJECT_DISTANCE = "SubjectDistance";
+    field public static final String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
+    field public static final String TAG_SUBJECT_LOCATION = "SubjectLocation";
+    field public static final String TAG_SUBSEC_TIME = "SubSecTime";
+    field @Deprecated public static final String TAG_SUBSEC_TIME_DIG = "SubSecTimeDigitized";
+    field public static final String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
+    field @Deprecated public static final String TAG_SUBSEC_TIME_ORIG = "SubSecTimeOriginal";
+    field public static final String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
+    field public static final String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
+    field public static final String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
+    field public static final String TAG_THUMBNAIL_ORIENTATION = "ThumbnailOrientation";
+    field public static final String TAG_TRANSFER_FUNCTION = "TransferFunction";
+    field public static final String TAG_USER_COMMENT = "UserComment";
+    field public static final String TAG_WHITE_BALANCE = "WhiteBalance";
+    field public static final String TAG_WHITE_POINT = "WhitePoint";
+    field public static final String TAG_XMP = "Xmp";
+    field public static final String TAG_X_RESOLUTION = "XResolution";
+    field public static final String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
+    field public static final String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
+    field public static final String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
+    field public static final String TAG_Y_RESOLUTION = "YResolution";
+    field public static final int WHITEBALANCE_AUTO = 0; // 0x0
+    field public static final int WHITEBALANCE_MANUAL = 1; // 0x1
+  }
+
+  public class FaceDetector {
+    ctor public FaceDetector(int, int, int);
+    method public int findFaces(android.graphics.Bitmap, android.media.FaceDetector.Face[]);
+  }
+
+  public class FaceDetector.Face {
+    method public float confidence();
+    method public float eyesDistance();
+    method public void getMidPoint(android.graphics.PointF);
+    method public float pose(int);
+    field public static final float CONFIDENCE_THRESHOLD = 0.4f;
+    field public static final int EULER_X = 0; // 0x0
+    field public static final int EULER_Y = 1; // 0x1
+    field public static final int EULER_Z = 2; // 0x2
+  }
+
+  public abstract class Image implements java.lang.AutoCloseable {
+    method public abstract void close();
+    method public android.graphics.Rect getCropRect();
+    method public abstract int getFormat();
+    method @Nullable public android.hardware.HardwareBuffer getHardwareBuffer();
+    method public abstract int getHeight();
+    method public abstract android.media.Image.Plane[] getPlanes();
+    method public abstract long getTimestamp();
+    method public abstract int getWidth();
+    method public void setCropRect(android.graphics.Rect);
+    method public void setTimestamp(long);
+  }
+
+  public abstract static class Image.Plane {
+    method public abstract java.nio.ByteBuffer getBuffer();
+    method public abstract int getPixelStride();
+    method public abstract int getRowStride();
+  }
+
+  public class ImageReader implements java.lang.AutoCloseable {
+    method public android.media.Image acquireLatestImage();
+    method public android.media.Image acquireNextImage();
+    method public void close();
+    method public void discardFreeBuffers();
+    method public int getHeight();
+    method public int getImageFormat();
+    method public int getMaxImages();
+    method public android.view.Surface getSurface();
+    method public int getWidth();
+    method @NonNull public static android.media.ImageReader newInstance(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int);
+    method @NonNull public static android.media.ImageReader newInstance(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int, long);
+    method public void setOnImageAvailableListener(android.media.ImageReader.OnImageAvailableListener, android.os.Handler);
+  }
+
+  public static interface ImageReader.OnImageAvailableListener {
+    method public void onImageAvailable(android.media.ImageReader);
+  }
+
+  public class ImageWriter implements java.lang.AutoCloseable {
+    method public void close();
+    method public android.media.Image dequeueInputImage();
+    method public int getFormat();
+    method public int getMaxImages();
+    method @NonNull public static android.media.ImageWriter newInstance(@NonNull android.view.Surface, @IntRange(from=1) int);
+    method @NonNull public static android.media.ImageWriter newInstance(@NonNull android.view.Surface, @IntRange(from=1) int, int);
+    method public void queueInputImage(android.media.Image);
+    method public void setOnImageReleasedListener(android.media.ImageWriter.OnImageReleasedListener, android.os.Handler);
+  }
+
+  public static interface ImageWriter.OnImageReleasedListener {
+    method public void onImageReleased(android.media.ImageWriter);
+  }
+
+  public class JetPlayer {
+    method public boolean clearQueue();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method public boolean closeJetFile();
+    method protected void finalize();
+    method public static android.media.JetPlayer getJetPlayer();
+    method public static int getMaxTracks();
+    method public boolean loadJetFile(String);
+    method public boolean loadJetFile(android.content.res.AssetFileDescriptor);
+    method public boolean pause();
+    method public boolean play();
+    method public boolean queueJetSegment(int, int, int, int, int, byte);
+    method public boolean queueJetSegmentMuteArray(int, int, int, int, boolean[], byte);
+    method public void release();
+    method public void setEventListener(android.media.JetPlayer.OnJetEventListener);
+    method public void setEventListener(android.media.JetPlayer.OnJetEventListener, android.os.Handler);
+    method public boolean setMuteArray(boolean[], boolean);
+    method public boolean setMuteFlag(int, boolean, boolean);
+    method public boolean setMuteFlags(int, boolean);
+    method public boolean triggerClip(int);
+  }
+
+  public static interface JetPlayer.OnJetEventListener {
+    method public void onJetEvent(android.media.JetPlayer, short, byte, byte, byte, byte);
+    method public void onJetNumQueuedSegmentUpdate(android.media.JetPlayer, int);
+    method public void onJetPauseUpdate(android.media.JetPlayer, int);
+    method public void onJetUserIdUpdate(android.media.JetPlayer, int, int);
+  }
+
+  public class MediaActionSound {
+    ctor public MediaActionSound();
+    method public void load(int);
+    method public void play(int);
+    method public void release();
+    field public static final int FOCUS_COMPLETE = 1; // 0x1
+    field public static final int SHUTTER_CLICK = 0; // 0x0
+    field public static final int START_VIDEO_RECORDING = 2; // 0x2
+    field public static final int STOP_VIDEO_RECORDING = 3; // 0x3
+  }
+
+  public final class MediaCas implements java.lang.AutoCloseable {
+    ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
+    ctor public MediaCas(@NonNull android.content.Context, int, @Nullable String, int) throws android.media.MediaCasException.UnsupportedCasException;
+    ctor public MediaCas(@NonNull android.content.Context, int, @Nullable String, int, @Nullable android.os.Handler, @Nullable android.media.MediaCas.EventListener) throws android.media.MediaCasException.UnsupportedCasException;
+    method public void close();
+    method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+    method protected void finalize();
+    method public static boolean isSystemIdSupported(int);
+    method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
+    method @Nullable public android.media.MediaCas.Session openSession(int, int) throws android.media.MediaCasException;
+    method public void processEmm(@NonNull byte[], int, int) throws android.media.MediaCasException;
+    method public void processEmm(@NonNull byte[]) throws android.media.MediaCasException;
+    method public void provision(@NonNull String) throws android.media.MediaCasException;
+    method public void refreshEntitlements(int, @Nullable byte[]) throws android.media.MediaCasException;
+    method public void sendEvent(int, int, @Nullable byte[]) throws android.media.MediaCasException;
+    method public void setEventListener(@Nullable android.media.MediaCas.EventListener, @Nullable android.os.Handler);
+    method public void setPrivateData(@NonNull byte[]) throws android.media.MediaCasException;
+    field public static final int PLUGIN_STATUS_PHYSICAL_MODULE_CHANGED = 0; // 0x0
+    field public static final int PLUGIN_STATUS_SESSION_NUMBER_CHANGED = 1; // 0x1
+    field public static final int SCRAMBLING_MODE_AES128 = 9; // 0x9
+    field public static final int SCRAMBLING_MODE_AES_ECB = 10; // 0xa
+    field public static final int SCRAMBLING_MODE_AES_SCTE52 = 11; // 0xb
+    field public static final int SCRAMBLING_MODE_DVB_CISSA_V1 = 6; // 0x6
+    field public static final int SCRAMBLING_MODE_DVB_CSA1 = 1; // 0x1
+    field public static final int SCRAMBLING_MODE_DVB_CSA2 = 2; // 0x2
+    field public static final int SCRAMBLING_MODE_DVB_CSA3_ENHANCE = 5; // 0x5
+    field public static final int SCRAMBLING_MODE_DVB_CSA3_MINIMAL = 4; // 0x4
+    field public static final int SCRAMBLING_MODE_DVB_CSA3_STANDARD = 3; // 0x3
+    field public static final int SCRAMBLING_MODE_DVB_IDSA = 7; // 0x7
+    field public static final int SCRAMBLING_MODE_MULTI2 = 8; // 0x8
+    field public static final int SCRAMBLING_MODE_RESERVED = 0; // 0x0
+    field public static final int SCRAMBLING_MODE_TDES_ECB = 12; // 0xc
+    field public static final int SCRAMBLING_MODE_TDES_SCTE52 = 13; // 0xd
+    field public static final int SESSION_USAGE_LIVE = 0; // 0x0
+    field public static final int SESSION_USAGE_PLAYBACK = 1; // 0x1
+    field public static final int SESSION_USAGE_RECORD = 2; // 0x2
+    field public static final int SESSION_USAGE_TIMESHIFT = 3; // 0x3
+  }
+
+  public static interface MediaCas.EventListener {
+    method public void onEvent(@NonNull android.media.MediaCas, int, int, @Nullable byte[]);
+    method public default void onPluginStatusUpdate(@NonNull android.media.MediaCas, int, int);
+    method public default void onResourceLost(@NonNull android.media.MediaCas);
+    method public default void onSessionEvent(@NonNull android.media.MediaCas, @NonNull android.media.MediaCas.Session, int, int, @Nullable byte[]);
+  }
+
+  public static class MediaCas.PluginDescriptor {
+    method @NonNull public String getName();
+    method public int getSystemId();
+  }
+
+  public final class MediaCas.Session implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public byte[] getSessionId();
+    method public void processEcm(@NonNull byte[], int, int) throws android.media.MediaCasException;
+    method public void processEcm(@NonNull byte[]) throws android.media.MediaCasException;
+    method public void sendSessionEvent(int, int, @Nullable byte[]) throws android.media.MediaCasException;
+    method public void setPrivateData(@NonNull byte[]) throws android.media.MediaCasException;
+  }
+
+  public class MediaCasException extends java.lang.Exception {
+  }
+
+  public static final class MediaCasException.DeniedByServerException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.InsufficientResourceException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.NotProvisionedException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.ResourceBusyException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.UnsupportedCasException extends android.media.MediaCasException {
+  }
+
+  public class MediaCasStateException extends java.lang.IllegalStateException {
+    method @NonNull public String getDiagnosticInfo();
+  }
+
+  public final class MediaCodec {
+    method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, @Nullable android.media.MediaCrypto, int);
+    method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, int, @Nullable android.media.MediaDescrambler);
+    method @NonNull public static android.media.MediaCodec createByCodecName(@NonNull String) throws java.io.IOException;
+    method @NonNull public static android.media.MediaCodec createDecoderByType(@NonNull String) throws java.io.IOException;
+    method @NonNull public static android.media.MediaCodec createEncoderByType(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.view.Surface createInputSurface();
+    method @NonNull public static android.view.Surface createPersistentInputSurface();
+    method public int dequeueInputBuffer(long);
+    method public int dequeueOutputBuffer(@NonNull android.media.MediaCodec.BufferInfo, long);
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public String getCanonicalName();
+    method @NonNull public android.media.MediaCodecInfo getCodecInfo();
+    method @Nullable public java.nio.ByteBuffer getInputBuffer(int);
+    method @Deprecated @NonNull public java.nio.ByteBuffer[] getInputBuffers();
+    method @NonNull public android.media.MediaFormat getInputFormat();
+    method @Nullable public android.media.Image getInputImage(int);
+    method public android.os.PersistableBundle getMetrics();
+    method @NonNull public String getName();
+    method @Nullable public java.nio.ByteBuffer getOutputBuffer(int);
+    method @Deprecated @NonNull public java.nio.ByteBuffer[] getOutputBuffers();
+    method @NonNull public android.media.MediaFormat getOutputFormat();
+    method @NonNull public android.media.MediaFormat getOutputFormat(int);
+    method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int);
+    method @Nullable public android.media.Image getOutputImage(int);
+    method @Nullable public android.media.MediaCodec.ParameterDescriptor getParameterDescriptor(@NonNull String);
+    method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int);
+    method @NonNull public java.util.List<java.lang.String> getSupportedVendorParameters();
+    method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer);
+    method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException;
+    method public void queueSecureInputBuffer(int, int, @NonNull android.media.MediaCodec.CryptoInfo, long, int) throws android.media.MediaCodec.CryptoException;
+    method public void release();
+    method public void releaseOutputBuffer(int, boolean);
+    method public void releaseOutputBuffer(int, long);
+    method public void reset();
+    method public void setAudioPresentation(@NonNull android.media.AudioPresentation);
+    method public void setCallback(@Nullable android.media.MediaCodec.Callback, @Nullable android.os.Handler);
+    method public void setCallback(@Nullable android.media.MediaCodec.Callback);
+    method public void setInputSurface(@NonNull android.view.Surface);
+    method public void setOnFirstTunnelFrameReadyListener(@Nullable android.os.Handler, @Nullable android.media.MediaCodec.OnFirstTunnelFrameReadyListener);
+    method public void setOnFrameRenderedListener(@Nullable android.media.MediaCodec.OnFrameRenderedListener, @Nullable android.os.Handler);
+    method public void setOutputSurface(@NonNull android.view.Surface);
+    method public void setParameters(@Nullable android.os.Bundle);
+    method public void setVideoScalingMode(int);
+    method public void signalEndOfInputStream();
+    method public void start();
+    method public void stop();
+    method public void subscribeToVendorParameters(@NonNull java.util.List<java.lang.String>);
+    method public void unsubscribeFromVendorParameters(@NonNull java.util.List<java.lang.String>);
+    field public static final int BUFFER_FLAG_CODEC_CONFIG = 2; // 0x2
+    field public static final int BUFFER_FLAG_END_OF_STREAM = 4; // 0x4
+    field public static final int BUFFER_FLAG_KEY_FRAME = 1; // 0x1
+    field public static final int BUFFER_FLAG_PARTIAL_FRAME = 8; // 0x8
+    field @Deprecated public static final int BUFFER_FLAG_SYNC_FRAME = 1; // 0x1
+    field public static final int CONFIGURE_FLAG_ENCODE = 1; // 0x1
+    field public static final int CONFIGURE_FLAG_USE_BLOCK_MODEL = 2; // 0x2
+    field public static final int CRYPTO_MODE_AES_CBC = 2; // 0x2
+    field public static final int CRYPTO_MODE_AES_CTR = 1; // 0x1
+    field public static final int CRYPTO_MODE_UNENCRYPTED = 0; // 0x0
+    field @Deprecated public static final int INFO_OUTPUT_BUFFERS_CHANGED = -3; // 0xfffffffd
+    field public static final int INFO_OUTPUT_FORMAT_CHANGED = -2; // 0xfffffffe
+    field public static final int INFO_TRY_AGAIN_LATER = -1; // 0xffffffff
+    field public static final String PARAMETER_KEY_HDR10_PLUS_INFO = "hdr10-plus-info";
+    field public static final String PARAMETER_KEY_LOW_LATENCY = "low-latency";
+    field public static final String PARAMETER_KEY_OFFSET_TIME = "time-offset-us";
+    field public static final String PARAMETER_KEY_REQUEST_SYNC_FRAME = "request-sync";
+    field public static final String PARAMETER_KEY_SUSPEND = "drop-input-frames";
+    field public static final String PARAMETER_KEY_SUSPEND_TIME = "drop-start-time-us";
+    field public static final String PARAMETER_KEY_TUNNEL_PEEK = "tunnel-peek";
+    field public static final String PARAMETER_KEY_VIDEO_BITRATE = "video-bitrate";
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2
+  }
+
+  public static final class MediaCodec.BufferInfo {
+    ctor public MediaCodec.BufferInfo();
+    method public void set(int, int, long, int);
+    field public int flags;
+    field public int offset;
+    field public long presentationTimeUs;
+    field public int size;
+  }
+
+  public abstract static class MediaCodec.Callback {
+    ctor public MediaCodec.Callback();
+    method public abstract void onError(@NonNull android.media.MediaCodec, @NonNull android.media.MediaCodec.CodecException);
+    method public abstract void onInputBufferAvailable(@NonNull android.media.MediaCodec, int);
+    method public abstract void onOutputBufferAvailable(@NonNull android.media.MediaCodec, int, @NonNull android.media.MediaCodec.BufferInfo);
+    method public abstract void onOutputFormatChanged(@NonNull android.media.MediaCodec, @NonNull android.media.MediaFormat);
+  }
+
+  public static final class MediaCodec.CodecException extends java.lang.IllegalStateException {
+    method @NonNull public String getDiagnosticInfo();
+    method public int getErrorCode();
+    method public boolean isRecoverable();
+    method public boolean isTransient();
+    field public static final int ERROR_INSUFFICIENT_RESOURCE = 1100; // 0x44c
+    field public static final int ERROR_RECLAIMED = 1101; // 0x44d
+  }
+
+  public static final class MediaCodec.CryptoException extends java.lang.RuntimeException {
+    ctor public MediaCodec.CryptoException(int, @Nullable String);
+    method public int getErrorCode();
+    field @Deprecated public static final int ERROR_FRAME_TOO_LARGE = 8; // 0x8
+    field @Deprecated public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4; // 0x4
+    field @Deprecated public static final int ERROR_INSUFFICIENT_SECURITY = 7; // 0x7
+    field @Deprecated public static final int ERROR_KEY_EXPIRED = 2; // 0x2
+    field @Deprecated public static final int ERROR_LOST_STATE = 9; // 0x9
+    field @Deprecated public static final int ERROR_NO_KEY = 1; // 0x1
+    field @Deprecated public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+    field @Deprecated public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
+    field @Deprecated public static final int ERROR_UNSUPPORTED_OPERATION = 6; // 0x6
+  }
+
+  public static final class MediaCodec.CryptoInfo {
+    ctor public MediaCodec.CryptoInfo();
+    method @NonNull public android.media.MediaCodec.CryptoInfo.Pattern getPattern();
+    method public void set(int, @NonNull int[], @NonNull int[], @NonNull byte[], @NonNull byte[], int);
+    method public void setPattern(android.media.MediaCodec.CryptoInfo.Pattern);
+    field public byte[] iv;
+    field public byte[] key;
+    field public int mode;
+    field public int[] numBytesOfClearData;
+    field public int[] numBytesOfEncryptedData;
+    field public int numSubSamples;
+  }
+
+  public static final class MediaCodec.CryptoInfo.Pattern {
+    ctor public MediaCodec.CryptoInfo.Pattern(int, int);
+    method public int getEncryptBlocks();
+    method public int getSkipBlocks();
+    method public void set(int, int);
+  }
+
+  public class MediaCodec.IncompatibleWithBlockModelException extends java.lang.RuntimeException {
+  }
+
+  public static final class MediaCodec.LinearBlock {
+    method protected void finalize();
+    method public static boolean isCodecCopyFreeCompatible(@NonNull String[]);
+    method public boolean isMappable();
+    method @NonNull public java.nio.ByteBuffer map();
+    method @Nullable public static android.media.MediaCodec.LinearBlock obtain(int, @NonNull String[]);
+    method public void recycle();
+  }
+
+  public static final class MediaCodec.MetricsConstants {
+    field public static final String CODEC = "android.media.mediacodec.codec";
+    field public static final String ENCODER = "android.media.mediacodec.encoder";
+    field public static final String HEIGHT = "android.media.mediacodec.height";
+    field public static final String MIME_TYPE = "android.media.mediacodec.mime";
+    field public static final String MODE = "android.media.mediacodec.mode";
+    field public static final String MODE_AUDIO = "audio";
+    field public static final String MODE_VIDEO = "video";
+    field public static final String ROTATION = "android.media.mediacodec.rotation";
+    field public static final String SECURE = "android.media.mediacodec.secure";
+    field public static final String WIDTH = "android.media.mediacodec.width";
+  }
+
+  public static interface MediaCodec.OnFirstTunnelFrameReadyListener {
+    method public void onFirstTunnelFrameReady(@NonNull android.media.MediaCodec);
+  }
+
+  public static interface MediaCodec.OnFrameRenderedListener {
+    method public void onFrameRendered(@NonNull android.media.MediaCodec, long, long);
+  }
+
+  public static final class MediaCodec.OutputFrame {
+    method @NonNull public java.util.Set<java.lang.String> getChangedKeys();
+    method public int getFlags();
+    method @NonNull public android.media.MediaFormat getFormat();
+    method @Nullable public android.hardware.HardwareBuffer getHardwareBuffer();
+    method @Nullable public android.media.MediaCodec.LinearBlock getLinearBlock();
+    method public long getPresentationTimeUs();
+  }
+
+  public static class MediaCodec.ParameterDescriptor {
+    method @NonNull public String getName();
+    method public int getType();
+  }
+
+  public final class MediaCodec.QueueRequest {
+    method public void queue();
+    method @NonNull public android.media.MediaCodec.QueueRequest setByteBufferParameter(@NonNull String, @NonNull java.nio.ByteBuffer);
+    method @NonNull public android.media.MediaCodec.QueueRequest setEncryptedLinearBlock(@NonNull android.media.MediaCodec.LinearBlock, int, int, @NonNull android.media.MediaCodec.CryptoInfo);
+    method @NonNull public android.media.MediaCodec.QueueRequest setFlags(int);
+    method @NonNull public android.media.MediaCodec.QueueRequest setFloatParameter(@NonNull String, float);
+    method @NonNull public android.media.MediaCodec.QueueRequest setHardwareBuffer(@NonNull android.hardware.HardwareBuffer);
+    method @NonNull public android.media.MediaCodec.QueueRequest setIntegerParameter(@NonNull String, int);
+    method @NonNull public android.media.MediaCodec.QueueRequest setLinearBlock(@NonNull android.media.MediaCodec.LinearBlock, int, int);
+    method @NonNull public android.media.MediaCodec.QueueRequest setLongParameter(@NonNull String, long);
+    method @NonNull public android.media.MediaCodec.QueueRequest setPresentationTimeUs(long);
+    method @NonNull public android.media.MediaCodec.QueueRequest setStringParameter(@NonNull String, @NonNull String);
+  }
+
+  public final class MediaCodecInfo {
+    method @NonNull public String getCanonicalName();
+    method public android.media.MediaCodecInfo.CodecCapabilities getCapabilitiesForType(String);
+    method @NonNull public String getName();
+    method public String[] getSupportedTypes();
+    method public boolean isAlias();
+    method public boolean isEncoder();
+    method public boolean isHardwareAccelerated();
+    method public boolean isSoftwareOnly();
+    method public boolean isVendor();
+  }
+
+  public static final class MediaCodecInfo.AudioCapabilities {
+    method public android.util.Range<java.lang.Integer> getBitrateRange();
+    method @NonNull public android.util.Range<java.lang.Integer>[] getInputChannelCountRanges();
+    method @IntRange(from=1, to=255) public int getMaxInputChannelCount();
+    method @IntRange(from=1, to=255) public int getMinInputChannelCount();
+    method public android.util.Range<java.lang.Integer>[] getSupportedSampleRateRanges();
+    method public int[] getSupportedSampleRates();
+    method public boolean isSampleRateSupported(int);
+  }
+
+  public static final class MediaCodecInfo.CodecCapabilities {
+    ctor public MediaCodecInfo.CodecCapabilities();
+    method public static android.media.MediaCodecInfo.CodecCapabilities createFromProfileLevel(String, int, int);
+    method public android.media.MediaCodecInfo.AudioCapabilities getAudioCapabilities();
+    method public android.media.MediaFormat getDefaultFormat();
+    method public android.media.MediaCodecInfo.EncoderCapabilities getEncoderCapabilities();
+    method public int getMaxSupportedInstances();
+    method public String getMimeType();
+    method public android.media.MediaCodecInfo.VideoCapabilities getVideoCapabilities();
+    method public boolean isFeatureRequired(String);
+    method public boolean isFeatureSupported(String);
+    method public boolean isFormatSupported(android.media.MediaFormat);
+    field @Deprecated public static final int COLOR_Format12bitRGB444 = 3; // 0x3
+    field @Deprecated public static final int COLOR_Format16bitARGB1555 = 5; // 0x5
+    field @Deprecated public static final int COLOR_Format16bitARGB4444 = 4; // 0x4
+    field @Deprecated public static final int COLOR_Format16bitBGR565 = 7; // 0x7
+    field public static final int COLOR_Format16bitRGB565 = 6; // 0x6
+    field @Deprecated public static final int COLOR_Format18BitBGR666 = 41; // 0x29
+    field @Deprecated public static final int COLOR_Format18bitARGB1665 = 9; // 0x9
+    field @Deprecated public static final int COLOR_Format18bitRGB666 = 8; // 0x8
+    field @Deprecated public static final int COLOR_Format19bitARGB1666 = 10; // 0xa
+    field @Deprecated public static final int COLOR_Format24BitABGR6666 = 43; // 0x2b
+    field @Deprecated public static final int COLOR_Format24BitARGB6666 = 42; // 0x2a
+    field @Deprecated public static final int COLOR_Format24bitARGB1887 = 13; // 0xd
+    field public static final int COLOR_Format24bitBGR888 = 12; // 0xc
+    field @Deprecated public static final int COLOR_Format24bitRGB888 = 11; // 0xb
+    field @Deprecated public static final int COLOR_Format25bitARGB1888 = 14; // 0xe
+    field public static final int COLOR_Format32bitABGR8888 = 2130747392; // 0x7f00a000
+    field @Deprecated public static final int COLOR_Format32bitARGB8888 = 16; // 0x10
+    field @Deprecated public static final int COLOR_Format32bitBGRA8888 = 15; // 0xf
+    field @Deprecated public static final int COLOR_Format8bitRGB332 = 2; // 0x2
+    field @Deprecated public static final int COLOR_FormatCbYCrY = 27; // 0x1b
+    field @Deprecated public static final int COLOR_FormatCrYCbY = 28; // 0x1c
+    field public static final int COLOR_FormatL16 = 36; // 0x24
+    field @Deprecated public static final int COLOR_FormatL2 = 33; // 0x21
+    field @Deprecated public static final int COLOR_FormatL24 = 37; // 0x25
+    field @Deprecated public static final int COLOR_FormatL32 = 38; // 0x26
+    field @Deprecated public static final int COLOR_FormatL4 = 34; // 0x22
+    field public static final int COLOR_FormatL8 = 35; // 0x23
+    field @Deprecated public static final int COLOR_FormatMonochrome = 1; // 0x1
+    field public static final int COLOR_FormatRGBAFlexible = 2134288520; // 0x7f36a888
+    field public static final int COLOR_FormatRGBFlexible = 2134292616; // 0x7f36b888
+    field public static final int COLOR_FormatRawBayer10bit = 31; // 0x1f
+    field public static final int COLOR_FormatRawBayer8bit = 30; // 0x1e
+    field public static final int COLOR_FormatRawBayer8bitcompressed = 32; // 0x20
+    field public static final int COLOR_FormatSurface = 2130708361; // 0x7f000789
+    field @Deprecated public static final int COLOR_FormatYCbYCr = 25; // 0x19
+    field @Deprecated public static final int COLOR_FormatYCrYCb = 26; // 0x1a
+    field @Deprecated public static final int COLOR_FormatYUV411PackedPlanar = 18; // 0x12
+    field @Deprecated public static final int COLOR_FormatYUV411Planar = 17; // 0x11
+    field public static final int COLOR_FormatYUV420Flexible = 2135033992; // 0x7f420888
+    field @Deprecated public static final int COLOR_FormatYUV420PackedPlanar = 20; // 0x14
+    field @Deprecated public static final int COLOR_FormatYUV420PackedSemiPlanar = 39; // 0x27
+    field @Deprecated public static final int COLOR_FormatYUV420Planar = 19; // 0x13
+    field @Deprecated public static final int COLOR_FormatYUV420SemiPlanar = 21; // 0x15
+    field public static final int COLOR_FormatYUV422Flexible = 2135042184; // 0x7f422888
+    field @Deprecated public static final int COLOR_FormatYUV422PackedPlanar = 23; // 0x17
+    field @Deprecated public static final int COLOR_FormatYUV422PackedSemiPlanar = 40; // 0x28
+    field @Deprecated public static final int COLOR_FormatYUV422Planar = 22; // 0x16
+    field @Deprecated public static final int COLOR_FormatYUV422SemiPlanar = 24; // 0x18
+    field public static final int COLOR_FormatYUV444Flexible = 2135181448; // 0x7f444888
+    field @Deprecated public static final int COLOR_FormatYUV444Interleaved = 29; // 0x1d
+    field @Deprecated public static final int COLOR_QCOM_FormatYUV420SemiPlanar = 2141391872; // 0x7fa30c00
+    field @Deprecated public static final int COLOR_TI_FormatYUV420PackedSemiPlanar = 2130706688; // 0x7f000100
+    field public static final String FEATURE_AdaptivePlayback = "adaptive-playback";
+    field public static final String FEATURE_DynamicTimestamp = "dynamic-timestamp";
+    field public static final String FEATURE_FrameParsing = "frame-parsing";
+    field public static final String FEATURE_IntraRefresh = "intra-refresh";
+    field public static final String FEATURE_LowLatency = "low-latency";
+    field public static final String FEATURE_MultipleFrames = "multiple-frames";
+    field public static final String FEATURE_PartialFrame = "partial-frame";
+    field public static final String FEATURE_QpBounds = "qp-bounds";
+    field public static final String FEATURE_SecurePlayback = "secure-playback";
+    field public static final String FEATURE_TunneledPlayback = "tunneled-playback";
+    field public int[] colorFormats;
+    field public android.media.MediaCodecInfo.CodecProfileLevel[] profileLevels;
+  }
+
+  public static final class MediaCodecInfo.CodecProfileLevel {
+    ctor public MediaCodecInfo.CodecProfileLevel();
+    field public static final int AACObjectELD = 39; // 0x27
+    field public static final int AACObjectERLC = 17; // 0x11
+    field public static final int AACObjectERScalable = 20; // 0x14
+    field public static final int AACObjectHE = 5; // 0x5
+    field public static final int AACObjectHE_PS = 29; // 0x1d
+    field public static final int AACObjectLC = 2; // 0x2
+    field public static final int AACObjectLD = 23; // 0x17
+    field public static final int AACObjectLTP = 4; // 0x4
+    field public static final int AACObjectMain = 1; // 0x1
+    field public static final int AACObjectSSR = 3; // 0x3
+    field public static final int AACObjectScalable = 6; // 0x6
+    field public static final int AACObjectXHE = 42; // 0x2a
+    field public static final int AV1Level2 = 1; // 0x1
+    field public static final int AV1Level21 = 2; // 0x2
+    field public static final int AV1Level22 = 4; // 0x4
+    field public static final int AV1Level23 = 8; // 0x8
+    field public static final int AV1Level3 = 16; // 0x10
+    field public static final int AV1Level31 = 32; // 0x20
+    field public static final int AV1Level32 = 64; // 0x40
+    field public static final int AV1Level33 = 128; // 0x80
+    field public static final int AV1Level4 = 256; // 0x100
+    field public static final int AV1Level41 = 512; // 0x200
+    field public static final int AV1Level42 = 1024; // 0x400
+    field public static final int AV1Level43 = 2048; // 0x800
+    field public static final int AV1Level5 = 4096; // 0x1000
+    field public static final int AV1Level51 = 8192; // 0x2000
+    field public static final int AV1Level52 = 16384; // 0x4000
+    field public static final int AV1Level53 = 32768; // 0x8000
+    field public static final int AV1Level6 = 65536; // 0x10000
+    field public static final int AV1Level61 = 131072; // 0x20000
+    field public static final int AV1Level62 = 262144; // 0x40000
+    field public static final int AV1Level63 = 524288; // 0x80000
+    field public static final int AV1Level7 = 1048576; // 0x100000
+    field public static final int AV1Level71 = 2097152; // 0x200000
+    field public static final int AV1Level72 = 4194304; // 0x400000
+    field public static final int AV1Level73 = 8388608; // 0x800000
+    field public static final int AV1ProfileMain10 = 2; // 0x2
+    field public static final int AV1ProfileMain10HDR10 = 4096; // 0x1000
+    field public static final int AV1ProfileMain10HDR10Plus = 8192; // 0x2000
+    field public static final int AV1ProfileMain8 = 1; // 0x1
+    field public static final int AVCLevel1 = 1; // 0x1
+    field public static final int AVCLevel11 = 4; // 0x4
+    field public static final int AVCLevel12 = 8; // 0x8
+    field public static final int AVCLevel13 = 16; // 0x10
+    field public static final int AVCLevel1b = 2; // 0x2
+    field public static final int AVCLevel2 = 32; // 0x20
+    field public static final int AVCLevel21 = 64; // 0x40
+    field public static final int AVCLevel22 = 128; // 0x80
+    field public static final int AVCLevel3 = 256; // 0x100
+    field public static final int AVCLevel31 = 512; // 0x200
+    field public static final int AVCLevel32 = 1024; // 0x400
+    field public static final int AVCLevel4 = 2048; // 0x800
+    field public static final int AVCLevel41 = 4096; // 0x1000
+    field public static final int AVCLevel42 = 8192; // 0x2000
+    field public static final int AVCLevel5 = 16384; // 0x4000
+    field public static final int AVCLevel51 = 32768; // 0x8000
+    field public static final int AVCLevel52 = 65536; // 0x10000
+    field public static final int AVCLevel6 = 131072; // 0x20000
+    field public static final int AVCLevel61 = 262144; // 0x40000
+    field public static final int AVCLevel62 = 524288; // 0x80000
+    field public static final int AVCProfileBaseline = 1; // 0x1
+    field public static final int AVCProfileConstrainedBaseline = 65536; // 0x10000
+    field public static final int AVCProfileConstrainedHigh = 524288; // 0x80000
+    field public static final int AVCProfileExtended = 4; // 0x4
+    field public static final int AVCProfileHigh = 8; // 0x8
+    field public static final int AVCProfileHigh10 = 16; // 0x10
+    field public static final int AVCProfileHigh422 = 32; // 0x20
+    field public static final int AVCProfileHigh444 = 64; // 0x40
+    field public static final int AVCProfileMain = 2; // 0x2
+    field public static final int DolbyVisionLevelFhd24 = 4; // 0x4
+    field public static final int DolbyVisionLevelFhd30 = 8; // 0x8
+    field public static final int DolbyVisionLevelFhd60 = 16; // 0x10
+    field public static final int DolbyVisionLevelHd24 = 1; // 0x1
+    field public static final int DolbyVisionLevelHd30 = 2; // 0x2
+    field public static final int DolbyVisionLevelUhd24 = 32; // 0x20
+    field public static final int DolbyVisionLevelUhd30 = 64; // 0x40
+    field public static final int DolbyVisionLevelUhd48 = 128; // 0x80
+    field public static final int DolbyVisionLevelUhd60 = 256; // 0x100
+    field public static final int DolbyVisionProfileDvav110 = 1024; // 0x400
+    field public static final int DolbyVisionProfileDvavPen = 2; // 0x2
+    field public static final int DolbyVisionProfileDvavPer = 1; // 0x1
+    field public static final int DolbyVisionProfileDvavSe = 512; // 0x200
+    field public static final int DolbyVisionProfileDvheDen = 8; // 0x8
+    field public static final int DolbyVisionProfileDvheDer = 4; // 0x4
+    field public static final int DolbyVisionProfileDvheDtb = 128; // 0x80
+    field public static final int DolbyVisionProfileDvheDth = 64; // 0x40
+    field public static final int DolbyVisionProfileDvheDtr = 16; // 0x10
+    field public static final int DolbyVisionProfileDvheSt = 256; // 0x100
+    field public static final int DolbyVisionProfileDvheStn = 32; // 0x20
+    field public static final int H263Level10 = 1; // 0x1
+    field public static final int H263Level20 = 2; // 0x2
+    field public static final int H263Level30 = 4; // 0x4
+    field public static final int H263Level40 = 8; // 0x8
+    field public static final int H263Level45 = 16; // 0x10
+    field public static final int H263Level50 = 32; // 0x20
+    field public static final int H263Level60 = 64; // 0x40
+    field public static final int H263Level70 = 128; // 0x80
+    field public static final int H263ProfileBackwardCompatible = 4; // 0x4
+    field public static final int H263ProfileBaseline = 1; // 0x1
+    field public static final int H263ProfileH320Coding = 2; // 0x2
+    field public static final int H263ProfileHighCompression = 32; // 0x20
+    field public static final int H263ProfileHighLatency = 256; // 0x100
+    field public static final int H263ProfileISWV2 = 8; // 0x8
+    field public static final int H263ProfileISWV3 = 16; // 0x10
+    field public static final int H263ProfileInterlace = 128; // 0x80
+    field public static final int H263ProfileInternet = 64; // 0x40
+    field public static final int HEVCHighTierLevel1 = 2; // 0x2
+    field public static final int HEVCHighTierLevel2 = 8; // 0x8
+    field public static final int HEVCHighTierLevel21 = 32; // 0x20
+    field public static final int HEVCHighTierLevel3 = 128; // 0x80
+    field public static final int HEVCHighTierLevel31 = 512; // 0x200
+    field public static final int HEVCHighTierLevel4 = 2048; // 0x800
+    field public static final int HEVCHighTierLevel41 = 8192; // 0x2000
+    field public static final int HEVCHighTierLevel5 = 32768; // 0x8000
+    field public static final int HEVCHighTierLevel51 = 131072; // 0x20000
+    field public static final int HEVCHighTierLevel52 = 524288; // 0x80000
+    field public static final int HEVCHighTierLevel6 = 2097152; // 0x200000
+    field public static final int HEVCHighTierLevel61 = 8388608; // 0x800000
+    field public static final int HEVCHighTierLevel62 = 33554432; // 0x2000000
+    field public static final int HEVCMainTierLevel1 = 1; // 0x1
+    field public static final int HEVCMainTierLevel2 = 4; // 0x4
+    field public static final int HEVCMainTierLevel21 = 16; // 0x10
+    field public static final int HEVCMainTierLevel3 = 64; // 0x40
+    field public static final int HEVCMainTierLevel31 = 256; // 0x100
+    field public static final int HEVCMainTierLevel4 = 1024; // 0x400
+    field public static final int HEVCMainTierLevel41 = 4096; // 0x1000
+    field public static final int HEVCMainTierLevel5 = 16384; // 0x4000
+    field public static final int HEVCMainTierLevel51 = 65536; // 0x10000
+    field public static final int HEVCMainTierLevel52 = 262144; // 0x40000
+    field public static final int HEVCMainTierLevel6 = 1048576; // 0x100000
+    field public static final int HEVCMainTierLevel61 = 4194304; // 0x400000
+    field public static final int HEVCMainTierLevel62 = 16777216; // 0x1000000
+    field public static final int HEVCProfileMain = 1; // 0x1
+    field public static final int HEVCProfileMain10 = 2; // 0x2
+    field public static final int HEVCProfileMain10HDR10 = 4096; // 0x1000
+    field public static final int HEVCProfileMain10HDR10Plus = 8192; // 0x2000
+    field public static final int HEVCProfileMainStill = 4; // 0x4
+    field public static final int MPEG2LevelH14 = 2; // 0x2
+    field public static final int MPEG2LevelHL = 3; // 0x3
+    field public static final int MPEG2LevelHP = 4; // 0x4
+    field public static final int MPEG2LevelLL = 0; // 0x0
+    field public static final int MPEG2LevelML = 1; // 0x1
+    field public static final int MPEG2Profile422 = 2; // 0x2
+    field public static final int MPEG2ProfileHigh = 5; // 0x5
+    field public static final int MPEG2ProfileMain = 1; // 0x1
+    field public static final int MPEG2ProfileSNR = 3; // 0x3
+    field public static final int MPEG2ProfileSimple = 0; // 0x0
+    field public static final int MPEG2ProfileSpatial = 4; // 0x4
+    field public static final int MPEG4Level0 = 1; // 0x1
+    field public static final int MPEG4Level0b = 2; // 0x2
+    field public static final int MPEG4Level1 = 4; // 0x4
+    field public static final int MPEG4Level2 = 8; // 0x8
+    field public static final int MPEG4Level3 = 16; // 0x10
+    field public static final int MPEG4Level3b = 24; // 0x18
+    field public static final int MPEG4Level4 = 32; // 0x20
+    field public static final int MPEG4Level4a = 64; // 0x40
+    field public static final int MPEG4Level5 = 128; // 0x80
+    field public static final int MPEG4Level6 = 256; // 0x100
+    field public static final int MPEG4ProfileAdvancedCoding = 4096; // 0x1000
+    field public static final int MPEG4ProfileAdvancedCore = 8192; // 0x2000
+    field public static final int MPEG4ProfileAdvancedRealTime = 1024; // 0x400
+    field public static final int MPEG4ProfileAdvancedScalable = 16384; // 0x4000
+    field public static final int MPEG4ProfileAdvancedSimple = 32768; // 0x8000
+    field public static final int MPEG4ProfileBasicAnimated = 256; // 0x100
+    field public static final int MPEG4ProfileCore = 4; // 0x4
+    field public static final int MPEG4ProfileCoreScalable = 2048; // 0x800
+    field public static final int MPEG4ProfileHybrid = 512; // 0x200
+    field public static final int MPEG4ProfileMain = 8; // 0x8
+    field public static final int MPEG4ProfileNbit = 16; // 0x10
+    field public static final int MPEG4ProfileScalableTexture = 32; // 0x20
+    field public static final int MPEG4ProfileSimple = 1; // 0x1
+    field public static final int MPEG4ProfileSimpleFBA = 128; // 0x80
+    field public static final int MPEG4ProfileSimpleFace = 64; // 0x40
+    field public static final int MPEG4ProfileSimpleScalable = 2; // 0x2
+    field public static final int VP8Level_Version0 = 1; // 0x1
+    field public static final int VP8Level_Version1 = 2; // 0x2
+    field public static final int VP8Level_Version2 = 4; // 0x4
+    field public static final int VP8Level_Version3 = 8; // 0x8
+    field public static final int VP8ProfileMain = 1; // 0x1
+    field public static final int VP9Level1 = 1; // 0x1
+    field public static final int VP9Level11 = 2; // 0x2
+    field public static final int VP9Level2 = 4; // 0x4
+    field public static final int VP9Level21 = 8; // 0x8
+    field public static final int VP9Level3 = 16; // 0x10
+    field public static final int VP9Level31 = 32; // 0x20
+    field public static final int VP9Level4 = 64; // 0x40
+    field public static final int VP9Level41 = 128; // 0x80
+    field public static final int VP9Level5 = 256; // 0x100
+    field public static final int VP9Level51 = 512; // 0x200
+    field public static final int VP9Level52 = 1024; // 0x400
+    field public static final int VP9Level6 = 2048; // 0x800
+    field public static final int VP9Level61 = 4096; // 0x1000
+    field public static final int VP9Level62 = 8192; // 0x2000
+    field public static final int VP9Profile0 = 1; // 0x1
+    field public static final int VP9Profile1 = 2; // 0x2
+    field public static final int VP9Profile2 = 4; // 0x4
+    field public static final int VP9Profile2HDR = 4096; // 0x1000
+    field public static final int VP9Profile2HDR10Plus = 16384; // 0x4000
+    field public static final int VP9Profile3 = 8; // 0x8
+    field public static final int VP9Profile3HDR = 8192; // 0x2000
+    field public static final int VP9Profile3HDR10Plus = 32768; // 0x8000
+    field public int level;
+    field public int profile;
+  }
+
+  public static final class MediaCodecInfo.EncoderCapabilities {
+    method public android.util.Range<java.lang.Integer> getComplexityRange();
+    method public android.util.Range<java.lang.Integer> getQualityRange();
+    method public boolean isBitrateModeSupported(int);
+    field public static final int BITRATE_MODE_CBR = 2; // 0x2
+    field public static final int BITRATE_MODE_CBR_FD = 3; // 0x3
+    field public static final int BITRATE_MODE_CQ = 0; // 0x0
+    field public static final int BITRATE_MODE_VBR = 1; // 0x1
+  }
+
+  public static final class MediaCodecInfo.VideoCapabilities {
+    method public boolean areSizeAndRateSupported(int, int, double);
+    method @Nullable public android.util.Range<java.lang.Double> getAchievableFrameRatesFor(int, int);
+    method public android.util.Range<java.lang.Integer> getBitrateRange();
+    method public int getHeightAlignment();
+    method public android.util.Range<java.lang.Integer> getSupportedFrameRates();
+    method public android.util.Range<java.lang.Double> getSupportedFrameRatesFor(int, int);
+    method public android.util.Range<java.lang.Integer> getSupportedHeights();
+    method public android.util.Range<java.lang.Integer> getSupportedHeightsFor(int);
+    method @Nullable public java.util.List<android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint> getSupportedPerformancePoints();
+    method public android.util.Range<java.lang.Integer> getSupportedWidths();
+    method public android.util.Range<java.lang.Integer> getSupportedWidthsFor(int);
+    method public int getWidthAlignment();
+    method public boolean isSizeSupported(int, int);
+  }
+
+  public static final class MediaCodecInfo.VideoCapabilities.PerformancePoint {
+    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(int, int, int);
+    method public boolean covers(@NonNull android.media.MediaFormat);
+    method public boolean covers(@NonNull android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint);
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_100;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_120;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_200;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_240;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_60;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_100;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_120;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_200;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_240;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_60;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_48;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_60;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_100;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_120;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_200;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_240;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_60;
+  }
+
+  public final class MediaCodecList {
+    ctor public MediaCodecList(int);
+    method public String findDecoderForFormat(android.media.MediaFormat);
+    method public String findEncoderForFormat(android.media.MediaFormat);
+    method @Deprecated public static int getCodecCount();
+    method @Deprecated public static android.media.MediaCodecInfo getCodecInfoAt(int);
+    method public android.media.MediaCodecInfo[] getCodecInfos();
+    field public static final int ALL_CODECS = 1; // 0x1
+    field public static final int REGULAR_CODECS = 0; // 0x0
+  }
+
+  public final class MediaCrypto {
+    ctor public MediaCrypto(@NonNull java.util.UUID, @NonNull byte[]) throws android.media.MediaCryptoException;
+    method protected void finalize();
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID);
+    method public void release();
+    method public boolean requiresSecureDecoderComponent(@NonNull String);
+    method public void setMediaDrmSession(@NonNull byte[]) throws android.media.MediaCryptoException;
+  }
+
+  public final class MediaCryptoException extends java.lang.Exception {
+    ctor public MediaCryptoException(@Nullable String);
+  }
+
+  public abstract class MediaDataSource implements java.io.Closeable {
+    ctor public MediaDataSource();
+    method public abstract long getSize() throws java.io.IOException;
+    method public abstract int readAt(long, byte[], int, int) throws java.io.IOException;
+  }
+
+  public final class MediaDescrambler implements java.lang.AutoCloseable {
+    ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
+    method public void close();
+    method public int descramble(@NonNull java.nio.ByteBuffer, @NonNull java.nio.ByteBuffer, @NonNull android.media.MediaCodec.CryptoInfo);
+    method protected void finalize();
+    method public boolean requiresSecureDecoderComponent(@NonNull String);
+    method public void setMediaCasSession(@NonNull android.media.MediaCas.Session);
+    field public static final byte SCRAMBLE_CONTROL_EVEN_KEY = 2; // 0x2
+    field public static final byte SCRAMBLE_CONTROL_ODD_KEY = 3; // 0x3
+    field public static final byte SCRAMBLE_CONTROL_RESERVED = 1; // 0x1
+    field public static final byte SCRAMBLE_CONTROL_UNSCRAMBLED = 0; // 0x0
+    field public static final byte SCRAMBLE_FLAG_PES_HEADER = 1; // 0x1
+  }
+
+  public class MediaDescription implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.Bitmap getIconBitmap();
+    method @Nullable public android.net.Uri getIconUri();
+    method @Nullable public String getMediaId();
+    method @Nullable public android.net.Uri getMediaUri();
+    method @Nullable public CharSequence getSubtitle();
+    method @Nullable public CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+    field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+    field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+    field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+    field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+    field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+    field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaDescription> CREATOR;
+    field public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+  }
+
+  public static class MediaDescription.Builder {
+    ctor public MediaDescription.Builder();
+    method public android.media.MediaDescription build();
+    method public android.media.MediaDescription.Builder setDescription(@Nullable CharSequence);
+    method public android.media.MediaDescription.Builder setExtras(@Nullable android.os.Bundle);
+    method public android.media.MediaDescription.Builder setIconBitmap(@Nullable android.graphics.Bitmap);
+    method public android.media.MediaDescription.Builder setIconUri(@Nullable android.net.Uri);
+    method public android.media.MediaDescription.Builder setMediaId(@Nullable String);
+    method public android.media.MediaDescription.Builder setMediaUri(@Nullable android.net.Uri);
+    method public android.media.MediaDescription.Builder setSubtitle(@Nullable CharSequence);
+    method public android.media.MediaDescription.Builder setTitle(@Nullable CharSequence);
+  }
+
+  public final class MediaDrm implements java.lang.AutoCloseable {
+    ctor public MediaDrm(@NonNull java.util.UUID) throws android.media.UnsupportedSchemeException;
+    method public void clearOnEventListener();
+    method public void clearOnExpirationUpdateListener();
+    method public void clearOnKeyStatusChangeListener();
+    method public void clearOnSessionLostStateListener();
+    method public void close();
+    method public void closeSession(@NonNull byte[]);
+    method @android.media.MediaDrm.HdcpLevel public int getConnectedHdcpLevel();
+    method public android.media.MediaDrm.CryptoSession getCryptoSession(@NonNull byte[], @NonNull String, @NonNull String);
+    method @NonNull public android.media.MediaDrm.KeyRequest getKeyRequest(@NonNull byte[], @Nullable byte[], @Nullable String, int, @Nullable java.util.HashMap<java.lang.String,java.lang.String>) throws android.media.NotProvisionedException;
+    method @NonNull public java.util.List<android.media.MediaDrm.LogMessage> getLogMessages();
+    method @android.media.MediaDrm.HdcpLevel public int getMaxHdcpLevel();
+    method public static int getMaxSecurityLevel();
+    method public int getMaxSessionCount();
+    method public android.os.PersistableBundle getMetrics();
+    method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds();
+    method public int getOfflineLicenseState(@NonNull byte[]);
+    method public int getOpenSessionCount();
+    method @Nullable public android.media.MediaDrm.PlaybackComponent getPlaybackComponent(@NonNull byte[]);
+    method @NonNull public byte[] getPropertyByteArray(String);
+    method @NonNull public String getPropertyString(@NonNull String);
+    method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest();
+    method @NonNull public byte[] getSecureStop(@NonNull byte[]);
+    method @NonNull public java.util.List<byte[]> getSecureStopIds();
+    method @NonNull public java.util.List<byte[]> getSecureStops();
+    method @android.media.MediaDrm.SecurityLevel public int getSecurityLevel(@NonNull byte[]);
+    method @NonNull public static java.util.List<java.util.UUID> getSupportedCryptoSchemes();
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID);
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID, @NonNull String);
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID, @NonNull String, @android.media.MediaDrm.SecurityLevel int);
+    method @NonNull public byte[] openSession() throws android.media.NotProvisionedException, android.media.ResourceBusyException;
+    method @NonNull public byte[] openSession(@android.media.MediaDrm.SecurityLevel int) throws android.media.NotProvisionedException, android.media.ResourceBusyException;
+    method @Nullable public byte[] provideKeyResponse(@NonNull byte[], @NonNull byte[]) throws android.media.DeniedByServerException, android.media.NotProvisionedException;
+    method public void provideProvisionResponse(@NonNull byte[]) throws android.media.DeniedByServerException;
+    method @NonNull public java.util.HashMap<java.lang.String,java.lang.String> queryKeyStatus(@NonNull byte[]);
+    method @Deprecated public void release();
+    method @Deprecated public void releaseAllSecureStops();
+    method public void releaseSecureStops(@NonNull byte[]);
+    method public void removeAllSecureStops();
+    method public void removeKeys(@NonNull byte[]);
+    method public void removeOfflineLicense(@NonNull byte[]);
+    method public void removeSecureStop(@NonNull byte[]);
+    method public boolean requiresSecureDecoder(@NonNull String);
+    method public boolean requiresSecureDecoder(@NonNull String, @android.media.MediaDrm.SecurityLevel int);
+    method public void restoreKeys(@NonNull byte[], @NonNull byte[]);
+    method public void setOnEventListener(@Nullable android.media.MediaDrm.OnEventListener);
+    method public void setOnEventListener(@Nullable android.media.MediaDrm.OnEventListener, @Nullable android.os.Handler);
+    method public void setOnEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaDrm.OnEventListener);
+    method public void setOnExpirationUpdateListener(@Nullable android.media.MediaDrm.OnExpirationUpdateListener, @Nullable android.os.Handler);
+    method public void setOnExpirationUpdateListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaDrm.OnExpirationUpdateListener);
+    method public void setOnKeyStatusChangeListener(@Nullable android.media.MediaDrm.OnKeyStatusChangeListener, @Nullable android.os.Handler);
+    method public void setOnKeyStatusChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaDrm.OnKeyStatusChangeListener);
+    method public void setOnSessionLostStateListener(@Nullable android.media.MediaDrm.OnSessionLostStateListener, @Nullable android.os.Handler);
+    method public void setOnSessionLostStateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaDrm.OnSessionLostStateListener);
+    method public void setPropertyByteArray(@NonNull String, @NonNull byte[]);
+    method public void setPropertyString(@NonNull String, @NonNull String);
+    field @Deprecated public static final int EVENT_KEY_EXPIRED = 3; // 0x3
+    field public static final int EVENT_KEY_REQUIRED = 2; // 0x2
+    field @Deprecated public static final int EVENT_PROVISION_REQUIRED = 1; // 0x1
+    field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5
+    field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4
+    field public static final int HDCP_LEVEL_UNKNOWN = 0; // 0x0
+    field public static final int HDCP_NONE = 1; // 0x1
+    field public static final int HDCP_NO_DIGITAL_OUTPUT = 2147483647; // 0x7fffffff
+    field public static final int HDCP_V1 = 2; // 0x2
+    field public static final int HDCP_V2 = 3; // 0x3
+    field public static final int HDCP_V2_1 = 4; // 0x4
+    field public static final int HDCP_V2_2 = 5; // 0x5
+    field public static final int HDCP_V2_3 = 6; // 0x6
+    field public static final int KEY_TYPE_OFFLINE = 2; // 0x2
+    field public static final int KEY_TYPE_RELEASE = 3; // 0x3
+    field public static final int KEY_TYPE_STREAMING = 1; // 0x1
+    field public static final int OFFLINE_LICENSE_STATE_RELEASED = 2; // 0x2
+    field public static final int OFFLINE_LICENSE_STATE_UNKNOWN = 0; // 0x0
+    field public static final int OFFLINE_LICENSE_STATE_USABLE = 1; // 0x1
+    field public static final String PROPERTY_ALGORITHMS = "algorithms";
+    field public static final String PROPERTY_DESCRIPTION = "description";
+    field public static final String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId";
+    field public static final String PROPERTY_VENDOR = "vendor";
+    field public static final String PROPERTY_VERSION = "version";
+    field public static final int SECURITY_LEVEL_HW_SECURE_ALL = 5; // 0x5
+    field public static final int SECURITY_LEVEL_HW_SECURE_CRYPTO = 3; // 0x3
+    field public static final int SECURITY_LEVEL_HW_SECURE_DECODE = 4; // 0x4
+    field public static final int SECURITY_LEVEL_SW_SECURE_CRYPTO = 1; // 0x1
+    field public static final int SECURITY_LEVEL_SW_SECURE_DECODE = 2; // 0x2
+    field public static final int SECURITY_LEVEL_UNKNOWN = 0; // 0x0
+  }
+
+  public final class MediaDrm.CryptoSession {
+    method @NonNull public byte[] decrypt(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+    method @NonNull public byte[] encrypt(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+    method @NonNull public byte[] sign(@NonNull byte[], @NonNull byte[]);
+    method public boolean verify(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+  }
+
+  public static final class MediaDrm.ErrorCodes {
+    field public static final int ERROR_CERTIFICATE_MALFORMED = 10; // 0xa
+    field public static final int ERROR_CERTIFICATE_MISSING = 11; // 0xb
+    field public static final int ERROR_CRYPTO_LIBRARY = 12; // 0xc
+    field public static final int ERROR_FRAME_TOO_LARGE = 8; // 0x8
+    field public static final int ERROR_GENERIC_OEM = 13; // 0xd
+    field public static final int ERROR_GENERIC_PLUGIN = 14; // 0xe
+    field public static final int ERROR_INIT_DATA = 15; // 0xf
+    field public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4; // 0x4
+    field public static final int ERROR_INSUFFICIENT_SECURITY = 7; // 0x7
+    field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
+    field public static final int ERROR_KEY_NOT_LOADED = 16; // 0x10
+    field public static final int ERROR_LICENSE_PARSE = 17; // 0x11
+    field public static final int ERROR_LICENSE_POLICY = 18; // 0x12
+    field public static final int ERROR_LICENSE_RELEASE = 19; // 0x13
+    field public static final int ERROR_LICENSE_REQUEST_REJECTED = 20; // 0x14
+    field public static final int ERROR_LICENSE_RESTORE = 21; // 0x15
+    field public static final int ERROR_LICENSE_STATE = 22; // 0x16
+    field public static final int ERROR_LOST_STATE = 9; // 0x9
+    field public static final int ERROR_MEDIA_FRAMEWORK = 23; // 0x17
+    field public static final int ERROR_NO_KEY = 1; // 0x1
+    field public static final int ERROR_PROVISIONING_CERTIFICATE = 24; // 0x18
+    field public static final int ERROR_PROVISIONING_CONFIG = 25; // 0x19
+    field public static final int ERROR_PROVISIONING_PARSE = 26; // 0x1a
+    field public static final int ERROR_PROVISIONING_REQUEST_REJECTED = 27; // 0x1b
+    field public static final int ERROR_PROVISIONING_RETRY = 28; // 0x1c
+    field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+    field public static final int ERROR_RESOURCE_CONTENTION = 29; // 0x1d
+    field public static final int ERROR_SECURE_STOP_RELEASE = 30; // 0x1e
+    field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
+    field public static final int ERROR_STORAGE_READ = 31; // 0x1f
+    field public static final int ERROR_STORAGE_WRITE = 32; // 0x20
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int ERROR_UNSUPPORTED_OPERATION = 6; // 0x6
+    field public static final int ERROR_ZERO_SUBSAMPLES = 33; // 0x21
+  }
+
+  @Deprecated @IntDef({android.media.MediaDrm.HDCP_LEVEL_UNKNOWN, android.media.MediaDrm.HDCP_NONE, android.media.MediaDrm.HDCP_V1, android.media.MediaDrm.HDCP_V2, android.media.MediaDrm.HDCP_V2_1, android.media.MediaDrm.HDCP_V2_2, android.media.MediaDrm.HDCP_V2_3, android.media.MediaDrm.HDCP_NO_DIGITAL_OUTPUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaDrm.HdcpLevel {
+  }
+
+  public static final class MediaDrm.KeyRequest {
+    method @NonNull public byte[] getData();
+    method @NonNull public String getDefaultUrl();
+    method public int getRequestType();
+    field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0
+    field public static final int REQUEST_TYPE_NONE = 3; // 0x3
+    field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2
+    field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1
+    field public static final int REQUEST_TYPE_UPDATE = 4; // 0x4
+  }
+
+  public static final class MediaDrm.KeyStatus {
+    method @NonNull public byte[] getKeyId();
+    method public int getStatusCode();
+    field public static final int STATUS_EXPIRED = 1; // 0x1
+    field public static final int STATUS_INTERNAL_ERROR = 4; // 0x4
+    field public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2
+    field public static final int STATUS_PENDING = 3; // 0x3
+    field public static final int STATUS_USABLE = 0; // 0x0
+    field public static final int STATUS_USABLE_IN_FUTURE = 5; // 0x5
+  }
+
+  public static final class MediaDrm.LogMessage {
+    method @NonNull public String getMessage();
+    method public int getPriority();
+    method public long getTimestampMillis();
+  }
+
+  public static final class MediaDrm.MediaDrmStateException extends java.lang.IllegalStateException {
+    method @NonNull public String getDiagnosticInfo();
+    method public int getErrorCode();
+    method public boolean isTransient();
+  }
+
+  public static final class MediaDrm.MetricsConstants {
+    field public static final String CLOSE_SESSION_ERROR_COUNT = "drm.mediadrm.close_session.error.count";
+    field public static final String CLOSE_SESSION_ERROR_LIST = "drm.mediadrm.close_session.error.list";
+    field public static final String CLOSE_SESSION_OK_COUNT = "drm.mediadrm.close_session.ok.count";
+    field public static final String EVENT_KEY_EXPIRED_COUNT = "drm.mediadrm.event.KEY_EXPIRED.count";
+    field public static final String EVENT_KEY_NEEDED_COUNT = "drm.mediadrm.event.KEY_NEEDED.count";
+    field public static final String EVENT_PROVISION_REQUIRED_COUNT = "drm.mediadrm.event.PROVISION_REQUIRED.count";
+    field public static final String EVENT_SESSION_RECLAIMED_COUNT = "drm.mediadrm.event.SESSION_RECLAIMED.count";
+    field public static final String EVENT_VENDOR_DEFINED_COUNT = "drm.mediadrm.event.VENDOR_DEFINED.count";
+    field public static final String GET_DEVICE_UNIQUE_ID_ERROR_COUNT = "drm.mediadrm.get_device_unique_id.error.count";
+    field public static final String GET_DEVICE_UNIQUE_ID_ERROR_LIST = "drm.mediadrm.get_device_unique_id.error.list";
+    field public static final String GET_DEVICE_UNIQUE_ID_OK_COUNT = "drm.mediadrm.get_device_unique_id.ok.count";
+    field public static final String GET_KEY_REQUEST_ERROR_COUNT = "drm.mediadrm.get_key_request.error.count";
+    field public static final String GET_KEY_REQUEST_ERROR_LIST = "drm.mediadrm.get_key_request.error.list";
+    field public static final String GET_KEY_REQUEST_OK_COUNT = "drm.mediadrm.get_key_request.ok.count";
+    field public static final String GET_KEY_REQUEST_OK_TIME_MICROS = "drm.mediadrm.get_key_request.ok.average_time_micros";
+    field public static final String GET_PROVISION_REQUEST_ERROR_COUNT = "drm.mediadrm.get_provision_request.error.count";
+    field public static final String GET_PROVISION_REQUEST_ERROR_LIST = "drm.mediadrm.get_provision_request.error.list";
+    field public static final String GET_PROVISION_REQUEST_OK_COUNT = "drm.mediadrm.get_provision_request.ok.count";
+    field public static final String KEY_STATUS_EXPIRED_COUNT = "drm.mediadrm.key_status.EXPIRED.count";
+    field public static final String KEY_STATUS_INTERNAL_ERROR_COUNT = "drm.mediadrm.key_status.INTERNAL_ERROR.count";
+    field public static final String KEY_STATUS_OUTPUT_NOT_ALLOWED_COUNT = "drm.mediadrm.key_status_change.OUTPUT_NOT_ALLOWED.count";
+    field public static final String KEY_STATUS_PENDING_COUNT = "drm.mediadrm.key_status_change.PENDING.count";
+    field public static final String KEY_STATUS_USABLE_COUNT = "drm.mediadrm.key_status_change.USABLE.count";
+    field public static final String OPEN_SESSION_ERROR_COUNT = "drm.mediadrm.open_session.error.count";
+    field public static final String OPEN_SESSION_ERROR_LIST = "drm.mediadrm.open_session.error.list";
+    field public static final String OPEN_SESSION_OK_COUNT = "drm.mediadrm.open_session.ok.count";
+    field public static final String PROVIDE_KEY_RESPONSE_ERROR_COUNT = "drm.mediadrm.provide_key_response.error.count";
+    field public static final String PROVIDE_KEY_RESPONSE_ERROR_LIST = "drm.mediadrm.provide_key_response.error.list";
+    field public static final String PROVIDE_KEY_RESPONSE_OK_COUNT = "drm.mediadrm.provide_key_response.ok.count";
+    field public static final String PROVIDE_KEY_RESPONSE_OK_TIME_MICROS = "drm.mediadrm.provide_key_response.ok.average_time_micros";
+    field public static final String PROVIDE_PROVISION_RESPONSE_ERROR_COUNT = "drm.mediadrm.provide_provision_response.error.count";
+    field public static final String PROVIDE_PROVISION_RESPONSE_ERROR_LIST = "drm.mediadrm.provide_provision_response.error.list";
+    field public static final String PROVIDE_PROVISION_RESPONSE_OK_COUNT = "drm.mediadrm.provide_provision_response.ok.count";
+    field public static final String SESSION_END_TIMES_MS = "drm.mediadrm.session_end_times_ms";
+    field public static final String SESSION_START_TIMES_MS = "drm.mediadrm.session_start_times_ms";
+  }
+
+  public static interface MediaDrm.OnEventListener {
+    method public void onEvent(@NonNull android.media.MediaDrm, @Nullable byte[], int, int, @Nullable byte[]);
+  }
+
+  public static interface MediaDrm.OnExpirationUpdateListener {
+    method public void onExpirationUpdate(@NonNull android.media.MediaDrm, @NonNull byte[], long);
+  }
+
+  public static interface MediaDrm.OnKeyStatusChangeListener {
+    method public void onKeyStatusChange(@NonNull android.media.MediaDrm, @NonNull byte[], @NonNull java.util.List<android.media.MediaDrm.KeyStatus>, boolean);
+  }
+
+  public static interface MediaDrm.OnSessionLostStateListener {
+    method public void onSessionLostState(@NonNull android.media.MediaDrm, @NonNull byte[]);
+  }
+
+  public final class MediaDrm.PlaybackComponent {
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+  }
+
+  public static final class MediaDrm.ProvisionRequest {
+    method @NonNull public byte[] getData();
+    method @NonNull public String getDefaultUrl();
+  }
+
+  @Deprecated @IntDef({android.media.MediaDrm.SECURITY_LEVEL_UNKNOWN, android.media.MediaDrm.SECURITY_LEVEL_SW_SECURE_CRYPTO, android.media.MediaDrm.SECURITY_LEVEL_SW_SECURE_DECODE, android.media.MediaDrm.SECURITY_LEVEL_HW_SECURE_CRYPTO, android.media.MediaDrm.SECURITY_LEVEL_HW_SECURE_DECODE, android.media.MediaDrm.SECURITY_LEVEL_HW_SECURE_ALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaDrm.SecurityLevel {
+  }
+
+  public static final class MediaDrm.SessionException extends java.lang.RuntimeException {
+    ctor public MediaDrm.SessionException(int, @Nullable String);
+    method @Deprecated public int getErrorCode();
+    method public boolean isTransient();
+    field @Deprecated public static final int ERROR_RESOURCE_CONTENTION = 1; // 0x1
+    field @Deprecated public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public class MediaDrmException extends java.lang.Exception {
+    ctor public MediaDrmException(String);
+  }
+
+  public class MediaDrmResetException extends java.lang.IllegalStateException {
+    ctor public MediaDrmResetException(String);
+  }
+
+  public final class MediaExtractor {
+    ctor public MediaExtractor();
+    method public boolean advance();
+    method protected void finalize();
+    method @NonNull public java.util.List<android.media.AudioPresentation> getAudioPresentations(int);
+    method public long getCachedDuration();
+    method public android.media.MediaExtractor.CasInfo getCasInfo(int);
+    method public android.media.DrmInitData getDrmInitData();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public android.os.PersistableBundle getMetrics();
+    method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo();
+    method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo);
+    method public int getSampleFlags();
+    method public long getSampleSize();
+    method public long getSampleTime();
+    method public int getSampleTrackIndex();
+    method public int getTrackCount();
+    method @NonNull public android.media.MediaFormat getTrackFormat(int);
+    method public boolean hasCacheReachedEndOfStream();
+    method public int readSampleData(@NonNull java.nio.ByteBuffer, int);
+    method public void release();
+    method public void seekTo(long, int);
+    method public void selectTrack(int);
+    method public void setDataSource(@NonNull android.media.MediaDataSource) throws java.io.IOException;
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws java.io.IOException;
+    method public void setDataSource(@NonNull String, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws java.io.IOException;
+    method public void setDataSource(@NonNull String) throws java.io.IOException;
+    method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    method public void setDataSource(@NonNull java.io.FileDescriptor, long, long) throws java.io.IOException;
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public void setMediaCas(@NonNull android.media.MediaCas);
+    method public void unselectTrack(int);
+    field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2
+    field public static final int SAMPLE_FLAG_PARTIAL_FRAME = 4; // 0x4
+    field public static final int SAMPLE_FLAG_SYNC = 1; // 0x1
+    field public static final int SEEK_TO_CLOSEST_SYNC = 2; // 0x2
+    field public static final int SEEK_TO_NEXT_SYNC = 1; // 0x1
+    field public static final int SEEK_TO_PREVIOUS_SYNC = 0; // 0x0
+  }
+
+  public static final class MediaExtractor.CasInfo {
+    method @Nullable public byte[] getPrivateData();
+    method public android.media.MediaCas.Session getSession();
+    method public int getSystemId();
+  }
+
+  public static final class MediaExtractor.MetricsConstants {
+    field public static final String FORMAT = "android.media.mediaextractor.fmt";
+    field public static final String MIME_TYPE = "android.media.mediaextractor.mime";
+    field public static final String TRACKS = "android.media.mediaextractor.ntrk";
+  }
+
+  public final class MediaFormat {
+    ctor public MediaFormat();
+    ctor public MediaFormat(@NonNull android.media.MediaFormat);
+    method public boolean containsFeature(@NonNull String);
+    method public boolean containsKey(@NonNull String);
+    method @NonNull public static android.media.MediaFormat createAudioFormat(@NonNull String, int, int);
+    method @NonNull public static android.media.MediaFormat createSubtitleFormat(@NonNull String, String);
+    method @NonNull public static android.media.MediaFormat createVideoFormat(@NonNull String, int, int);
+    method @Nullable public java.nio.ByteBuffer getByteBuffer(@NonNull String);
+    method @NonNull public java.nio.ByteBuffer getByteBuffer(@NonNull String, @NonNull java.nio.ByteBuffer);
+    method public boolean getFeatureEnabled(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getFeatures();
+    method public float getFloat(@NonNull String);
+    method public float getFloat(@NonNull String, float);
+    method public int getInteger(@NonNull String);
+    method public int getInteger(@NonNull String, int);
+    method @NonNull public java.util.Set<java.lang.String> getKeys();
+    method public long getLong(@NonNull String);
+    method public long getLong(@NonNull String, long);
+    method @Nullable public Number getNumber(@NonNull String);
+    method @NonNull public Number getNumber(@NonNull String, @NonNull Number);
+    method @Nullable public String getString(@NonNull String);
+    method @NonNull public String getString(@NonNull String, @NonNull String);
+    method public int getValueTypeForKey(@NonNull String);
+    method public void removeFeature(@NonNull String);
+    method public void removeKey(@NonNull String);
+    method public void setByteBuffer(@NonNull String, @Nullable java.nio.ByteBuffer);
+    method public void setFeatureEnabled(@NonNull String, boolean);
+    method public void setFloat(@NonNull String, float);
+    method public void setInteger(@NonNull String, int);
+    method public void setLong(@NonNull String, long);
+    method public void setString(@NonNull String, @Nullable String);
+    field public static final int COLOR_RANGE_FULL = 1; // 0x1
+    field public static final int COLOR_RANGE_LIMITED = 2; // 0x2
+    field public static final int COLOR_STANDARD_BT2020 = 6; // 0x6
+    field public static final int COLOR_STANDARD_BT601_NTSC = 4; // 0x4
+    field public static final int COLOR_STANDARD_BT601_PAL = 2; // 0x2
+    field public static final int COLOR_STANDARD_BT709 = 1; // 0x1
+    field public static final int COLOR_TRANSFER_HLG = 7; // 0x7
+    field public static final int COLOR_TRANSFER_LINEAR = 1; // 0x1
+    field public static final int COLOR_TRANSFER_SDR_VIDEO = 3; // 0x3
+    field public static final int COLOR_TRANSFER_ST2084 = 6; // 0x6
+    field public static final String KEY_AAC_DRC_ALBUM_MODE = "aac-drc-album-mode";
+    field public static final String KEY_AAC_DRC_ATTENUATION_FACTOR = "aac-drc-cut-level";
+    field public static final String KEY_AAC_DRC_BOOST_FACTOR = "aac-drc-boost-level";
+    field public static final String KEY_AAC_DRC_EFFECT_TYPE = "aac-drc-effect-type";
+    field public static final String KEY_AAC_DRC_HEAVY_COMPRESSION = "aac-drc-heavy-compression";
+    field public static final String KEY_AAC_DRC_OUTPUT_LOUDNESS = "aac-drc-output-loudness";
+    field public static final String KEY_AAC_DRC_TARGET_REFERENCE_LEVEL = "aac-target-ref-level";
+    field public static final String KEY_AAC_ENCODED_TARGET_LEVEL = "aac-encoded-target-level";
+    field public static final String KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT = "aac-max-output-channel_count";
+    field public static final String KEY_AAC_PROFILE = "aac-profile";
+    field public static final String KEY_AAC_SBR_MODE = "aac-sbr-mode";
+    field public static final String KEY_ALLOW_FRAME_DROP = "allow-frame-drop";
+    field public static final String KEY_AUDIO_SESSION_ID = "audio-session-id";
+    field public static final String KEY_BITRATE_MODE = "bitrate-mode";
+    field public static final String KEY_BIT_RATE = "bitrate";
+    field public static final String KEY_CAPTION_SERVICE_NUMBER = "caption-service-number";
+    field public static final String KEY_CAPTURE_RATE = "capture-rate";
+    field public static final String KEY_CHANNEL_COUNT = "channel-count";
+    field public static final String KEY_CHANNEL_MASK = "channel-mask";
+    field public static final String KEY_CODECS_STRING = "codecs-string";
+    field public static final String KEY_COLOR_FORMAT = "color-format";
+    field public static final String KEY_COLOR_RANGE = "color-range";
+    field public static final String KEY_COLOR_STANDARD = "color-standard";
+    field public static final String KEY_COLOR_TRANSFER = "color-transfer";
+    field public static final String KEY_COLOR_TRANSFER_REQUEST = "color-transfer-request";
+    field public static final String KEY_COMPLEXITY = "complexity";
+    field public static final String KEY_CREATE_INPUT_SURFACE_SUSPENDED = "create-input-buffers-suspended";
+    field public static final String KEY_DURATION = "durationUs";
+    field public static final String KEY_ENCODER_DELAY = "encoder-delay";
+    field public static final String KEY_ENCODER_PADDING = "encoder-padding";
+    field public static final String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level";
+    field public static final String KEY_FRAME_RATE = "frame-rate";
+    field public static final String KEY_GRID_COLUMNS = "grid-cols";
+    field public static final String KEY_GRID_ROWS = "grid-rows";
+    field public static final String KEY_HAPTIC_CHANNEL_COUNT = "haptic-channel-count";
+    field public static final String KEY_HARDWARE_AV_SYNC_ID = "hw-av-sync-id";
+    field public static final String KEY_HDR10_PLUS_INFO = "hdr10-plus-info";
+    field public static final String KEY_HDR_STATIC_INFO = "hdr-static-info";
+    field public static final String KEY_HEIGHT = "height";
+    field public static final String KEY_INTRA_REFRESH_PERIOD = "intra-refresh-period";
+    field public static final String KEY_IS_ADTS = "is-adts";
+    field public static final String KEY_IS_AUTOSELECT = "is-autoselect";
+    field public static final String KEY_IS_DEFAULT = "is-default";
+    field public static final String KEY_IS_FORCED_SUBTITLE = "is-forced-subtitle";
+    field public static final String KEY_I_FRAME_INTERVAL = "i-frame-interval";
+    field public static final String KEY_LANGUAGE = "language";
+    field public static final String KEY_LATENCY = "latency";
+    field public static final String KEY_LEVEL = "level";
+    field public static final String KEY_LOW_LATENCY = "low-latency";
+    field public static final String KEY_MAX_B_FRAMES = "max-bframes";
+    field public static final String KEY_MAX_FPS_TO_ENCODER = "max-fps-to-encoder";
+    field public static final String KEY_MAX_HEIGHT = "max-height";
+    field public static final String KEY_MAX_INPUT_SIZE = "max-input-size";
+    field public static final String KEY_MAX_OUTPUT_CHANNEL_COUNT = "max-output-channel-count";
+    field public static final String KEY_MAX_PTS_GAP_TO_ENCODER = "max-pts-gap-to-encoder";
+    field public static final String KEY_MAX_WIDTH = "max-width";
+    field public static final String KEY_MIME = "mime";
+    field public static final String KEY_MPEGH_COMPATIBLE_SETS = "mpegh-compatible-sets";
+    field public static final String KEY_MPEGH_PROFILE_LEVEL_INDICATION = "mpegh-profile-level-indication";
+    field public static final String KEY_MPEGH_REFERENCE_CHANNEL_LAYOUT = "mpegh-reference-channel-layout";
+    field public static final String KEY_OPERATING_RATE = "operating-rate";
+    field public static final String KEY_OUTPUT_REORDER_DEPTH = "output-reorder-depth";
+    field public static final String KEY_PCM_ENCODING = "pcm-encoding";
+    field public static final String KEY_PIXEL_ASPECT_RATIO_HEIGHT = "sar-height";
+    field public static final String KEY_PIXEL_ASPECT_RATIO_WIDTH = "sar-width";
+    field public static final String KEY_PREPEND_HEADER_TO_SYNC_FRAMES = "prepend-sps-pps-to-idr-frames";
+    field public static final String KEY_PRIORITY = "priority";
+    field public static final String KEY_PROFILE = "profile";
+    field public static final String KEY_PUSH_BLANK_BUFFERS_ON_STOP = "push-blank-buffers-on-shutdown";
+    field public static final String KEY_QUALITY = "quality";
+    field public static final String KEY_REPEAT_PREVIOUS_FRAME_AFTER = "repeat-previous-frame-after";
+    field public static final String KEY_ROTATION = "rotation-degrees";
+    field public static final String KEY_SAMPLE_RATE = "sample-rate";
+    field public static final String KEY_SLICE_HEIGHT = "slice-height";
+    field public static final String KEY_SLOW_MOTION_MARKERS = "slow-motion-markers";
+    field public static final String KEY_STRIDE = "stride";
+    field public static final String KEY_TEMPORAL_LAYERING = "ts-schema";
+    field public static final String KEY_TILE_HEIGHT = "tile-height";
+    field public static final String KEY_TILE_WIDTH = "tile-width";
+    field public static final String KEY_TRACK_ID = "track-id";
+    field public static final String KEY_VIDEO_QP_B_MAX = "video-qp-b-max";
+    field public static final String KEY_VIDEO_QP_B_MIN = "video-qp-b-min";
+    field public static final String KEY_VIDEO_QP_I_MAX = "video-qp-i-max";
+    field public static final String KEY_VIDEO_QP_I_MIN = "video-qp-i-min";
+    field public static final String KEY_VIDEO_QP_MAX = "video-qp-max";
+    field public static final String KEY_VIDEO_QP_MIN = "video-qp-min";
+    field public static final String KEY_VIDEO_QP_P_MAX = "video-qp-p-max";
+    field public static final String KEY_VIDEO_QP_P_MIN = "video-qp-p-min";
+    field public static final String KEY_WIDTH = "width";
+    field public static final String MIMETYPE_AUDIO_AAC = "audio/mp4a-latm";
+    field public static final String MIMETYPE_AUDIO_AC3 = "audio/ac3";
+    field public static final String MIMETYPE_AUDIO_AC4 = "audio/ac4";
+    field public static final String MIMETYPE_AUDIO_AMR_NB = "audio/3gpp";
+    field public static final String MIMETYPE_AUDIO_AMR_WB = "audio/amr-wb";
+    field public static final String MIMETYPE_AUDIO_EAC3 = "audio/eac3";
+    field public static final String MIMETYPE_AUDIO_EAC3_JOC = "audio/eac3-joc";
+    field public static final String MIMETYPE_AUDIO_FLAC = "audio/flac";
+    field public static final String MIMETYPE_AUDIO_G711_ALAW = "audio/g711-alaw";
+    field public static final String MIMETYPE_AUDIO_G711_MLAW = "audio/g711-mlaw";
+    field public static final String MIMETYPE_AUDIO_MPEG = "audio/mpeg";
+    field public static final String MIMETYPE_AUDIO_MPEGH_MHA1 = "audio/mha1";
+    field public static final String MIMETYPE_AUDIO_MPEGH_MHM1 = "audio/mhm1";
+    field public static final String MIMETYPE_AUDIO_MSGSM = "audio/gsm";
+    field public static final String MIMETYPE_AUDIO_OPUS = "audio/opus";
+    field public static final String MIMETYPE_AUDIO_QCELP = "audio/qcelp";
+    field public static final String MIMETYPE_AUDIO_RAW = "audio/raw";
+    field public static final String MIMETYPE_AUDIO_SCRAMBLED = "audio/scrambled";
+    field public static final String MIMETYPE_AUDIO_VORBIS = "audio/vorbis";
+    field public static final String MIMETYPE_IMAGE_ANDROID_HEIC = "image/vnd.android.heic";
+    field public static final String MIMETYPE_TEXT_CEA_608 = "text/cea-608";
+    field public static final String MIMETYPE_TEXT_CEA_708 = "text/cea-708";
+    field public static final String MIMETYPE_TEXT_SUBRIP = "application/x-subrip";
+    field public static final String MIMETYPE_TEXT_VTT = "text/vtt";
+    field public static final String MIMETYPE_VIDEO_AV1 = "video/av01";
+    field public static final String MIMETYPE_VIDEO_AVC = "video/avc";
+    field public static final String MIMETYPE_VIDEO_DOLBY_VISION = "video/dolby-vision";
+    field public static final String MIMETYPE_VIDEO_H263 = "video/3gpp";
+    field public static final String MIMETYPE_VIDEO_HEVC = "video/hevc";
+    field public static final String MIMETYPE_VIDEO_MPEG2 = "video/mpeg2";
+    field public static final String MIMETYPE_VIDEO_MPEG4 = "video/mp4v-es";
+    field public static final String MIMETYPE_VIDEO_RAW = "video/raw";
+    field public static final String MIMETYPE_VIDEO_SCRAMBLED = "video/scrambled";
+    field public static final String MIMETYPE_VIDEO_VP8 = "video/x-vnd.on2.vp8";
+    field public static final String MIMETYPE_VIDEO_VP9 = "video/x-vnd.on2.vp9";
+    field public static final int TYPE_BYTE_BUFFER = 5; // 0x5
+    field public static final int TYPE_FLOAT = 3; // 0x3
+    field public static final int TYPE_INTEGER = 1; // 0x1
+    field public static final int TYPE_LONG = 2; // 0x2
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_STRING = 4; // 0x4
+  }
+
+  public final class MediaMetadata implements android.os.Parcelable {
+    method public boolean containsKey(String);
+    method public int describeContents();
+    method public android.graphics.Bitmap getBitmap(String);
+    method @IntRange(from=1) public int getBitmapDimensionLimit();
+    method @NonNull public android.media.MediaDescription getDescription();
+    method public long getLong(String);
+    method public android.media.Rating getRating(String);
+    method public String getString(String);
+    method public CharSequence getText(String);
+    method public java.util.Set<java.lang.String> keySet();
+    method public int size();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaMetadata> CREATOR;
+    field public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+    field public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+    field public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+    field public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+    field public static final String METADATA_KEY_ART = "android.media.metadata.ART";
+    field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+    field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+    field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+    field public static final String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+    field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+    field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+    field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
+    field public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+    field public static final String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+    field public static final String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+    field public static final String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+    field public static final String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+    field public static final String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+    field public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+    field public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+    field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+    field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+    field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+    field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
+    field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+    field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+    field public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+    field public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+    field public static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+  }
+
+  public static final class MediaMetadata.Builder {
+    ctor public MediaMetadata.Builder();
+    ctor public MediaMetadata.Builder(android.media.MediaMetadata);
+    method public android.media.MediaMetadata build();
+    method public android.media.MediaMetadata.Builder putBitmap(String, android.graphics.Bitmap);
+    method public android.media.MediaMetadata.Builder putLong(String, long);
+    method public android.media.MediaMetadata.Builder putRating(String, android.media.Rating);
+    method public android.media.MediaMetadata.Builder putString(String, String);
+    method public android.media.MediaMetadata.Builder putText(String, CharSequence);
+    method @NonNull public android.media.MediaMetadata.Builder setBitmapDimensionLimit(@IntRange(from=1) int);
+  }
+
+  @Deprecated public abstract class MediaMetadataEditor {
+    method @Deprecated public void addEditableKey(int);
+    method @Deprecated public abstract void apply();
+    method @Deprecated public void clear();
+    method @Deprecated public android.graphics.Bitmap getBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method @Deprecated public int[] getEditableKeys();
+    method @Deprecated public long getLong(int, long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public Object getObject(int, Object) throws java.lang.IllegalArgumentException;
+    method @Deprecated public String getString(int, String) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putObject(int, Object) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putString(int, String) throws java.lang.IllegalArgumentException;
+    method @Deprecated public void removeEditableKeys();
+    field @Deprecated public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
+    field @Deprecated public static final int RATING_KEY_BY_OTHERS = 101; // 0x65
+    field @Deprecated public static final int RATING_KEY_BY_USER = 268435457; // 0x10000001
+  }
+
+  public class MediaMetadataRetriever implements java.lang.AutoCloseable {
+    ctor public MediaMetadataRetriever();
+    method public void close();
+    method @Nullable public String extractMetadata(int);
+    method @Nullable public byte[] getEmbeddedPicture();
+    method @Nullable public android.graphics.Bitmap getFrameAtIndex(int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getFrameAtIndex(int);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime(long, int);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime(long, int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime(long);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime();
+    method @NonNull public java.util.List<android.graphics.Bitmap> getFramesAtIndex(int, int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @NonNull public java.util.List<android.graphics.Bitmap> getFramesAtIndex(int, int);
+    method @Nullable public android.graphics.Bitmap getImageAtIndex(int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getImageAtIndex(int);
+    method @Nullable public android.graphics.Bitmap getPrimaryImage(@NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getPrimaryImage();
+    method @Nullable public android.graphics.Bitmap getScaledFrameAtTime(long, int, @IntRange(from=1) int, @IntRange(from=1) int);
+    method @Nullable public android.graphics.Bitmap getScaledFrameAtTime(long, int, @IntRange(from=1) int, @IntRange(from=1) int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method public void release();
+    method public void setDataSource(String) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(String, java.util.Map<java.lang.String,java.lang.String>) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(java.io.FileDescriptor, long, long) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(java.io.FileDescriptor) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(android.content.Context, android.net.Uri) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method public void setDataSource(android.media.MediaDataSource) throws java.lang.IllegalArgumentException;
+    field public static final int METADATA_KEY_ALBUM = 1; // 0x1
+    field public static final int METADATA_KEY_ALBUMARTIST = 13; // 0xd
+    field public static final int METADATA_KEY_ARTIST = 2; // 0x2
+    field public static final int METADATA_KEY_AUTHOR = 3; // 0x3
+    field public static final int METADATA_KEY_BITRATE = 20; // 0x14
+    field public static final int METADATA_KEY_BITS_PER_SAMPLE = 39; // 0x27
+    field public static final int METADATA_KEY_CAPTURE_FRAMERATE = 25; // 0x19
+    field public static final int METADATA_KEY_CD_TRACK_NUMBER = 0; // 0x0
+    field public static final int METADATA_KEY_COLOR_RANGE = 37; // 0x25
+    field public static final int METADATA_KEY_COLOR_STANDARD = 35; // 0x23
+    field public static final int METADATA_KEY_COLOR_TRANSFER = 36; // 0x24
+    field public static final int METADATA_KEY_COMPILATION = 15; // 0xf
+    field public static final int METADATA_KEY_COMPOSER = 4; // 0x4
+    field public static final int METADATA_KEY_DATE = 5; // 0x5
+    field public static final int METADATA_KEY_DISC_NUMBER = 14; // 0xe
+    field public static final int METADATA_KEY_DURATION = 9; // 0x9
+    field public static final int METADATA_KEY_EXIF_LENGTH = 34; // 0x22
+    field public static final int METADATA_KEY_EXIF_OFFSET = 33; // 0x21
+    field public static final int METADATA_KEY_GENRE = 6; // 0x6
+    field public static final int METADATA_KEY_HAS_AUDIO = 16; // 0x10
+    field public static final int METADATA_KEY_HAS_IMAGE = 26; // 0x1a
+    field public static final int METADATA_KEY_HAS_VIDEO = 17; // 0x11
+    field public static final int METADATA_KEY_IMAGE_COUNT = 27; // 0x1b
+    field public static final int METADATA_KEY_IMAGE_HEIGHT = 30; // 0x1e
+    field public static final int METADATA_KEY_IMAGE_PRIMARY = 28; // 0x1c
+    field public static final int METADATA_KEY_IMAGE_ROTATION = 31; // 0x1f
+    field public static final int METADATA_KEY_IMAGE_WIDTH = 29; // 0x1d
+    field public static final int METADATA_KEY_LOCATION = 23; // 0x17
+    field public static final int METADATA_KEY_MIMETYPE = 12; // 0xc
+    field public static final int METADATA_KEY_NUM_TRACKS = 10; // 0xa
+    field public static final int METADATA_KEY_SAMPLERATE = 38; // 0x26
+    field public static final int METADATA_KEY_TITLE = 7; // 0x7
+    field public static final int METADATA_KEY_VIDEO_FRAME_COUNT = 32; // 0x20
+    field public static final int METADATA_KEY_VIDEO_HEIGHT = 19; // 0x13
+    field public static final int METADATA_KEY_VIDEO_ROTATION = 24; // 0x18
+    field public static final int METADATA_KEY_VIDEO_WIDTH = 18; // 0x12
+    field public static final int METADATA_KEY_WRITER = 11; // 0xb
+    field public static final int METADATA_KEY_XMP_LENGTH = 42; // 0x2a
+    field public static final int METADATA_KEY_XMP_OFFSET = 41; // 0x29
+    field public static final int METADATA_KEY_YEAR = 8; // 0x8
+    field public static final int OPTION_CLOSEST = 3; // 0x3
+    field public static final int OPTION_CLOSEST_SYNC = 2; // 0x2
+    field public static final int OPTION_NEXT_SYNC = 1; // 0x1
+    field public static final int OPTION_PREVIOUS_SYNC = 0; // 0x0
+  }
+
+  public static final class MediaMetadataRetriever.BitmapParams {
+    ctor public MediaMetadataRetriever.BitmapParams();
+    method @NonNull public android.graphics.Bitmap.Config getActualConfig();
+    method @NonNull public android.graphics.Bitmap.Config getPreferredConfig();
+    method public void setPreferredConfig(@NonNull android.graphics.Bitmap.Config);
+  }
+
+  public final class MediaMuxer {
+    ctor public MediaMuxer(@NonNull String, int) throws java.io.IOException;
+    ctor public MediaMuxer(@NonNull java.io.FileDescriptor, int) throws java.io.IOException;
+    method public int addTrack(@NonNull android.media.MediaFormat);
+    method public void release();
+    method public void setLocation(float, float);
+    method public void setOrientationHint(int);
+    method public void start();
+    method public void stop();
+    method public void writeSampleData(int, @NonNull java.nio.ByteBuffer, @NonNull android.media.MediaCodec.BufferInfo);
+  }
+
+  public static final class MediaMuxer.OutputFormat {
+    field public static final int MUXER_OUTPUT_3GPP = 2; // 0x2
+    field public static final int MUXER_OUTPUT_HEIF = 3; // 0x3
+    field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0
+    field public static final int MUXER_OUTPUT_OGG = 4; // 0x4
+    field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1
+  }
+
+  public class MediaPlayer implements android.media.AudioRouting android.media.VolumeAutomation {
+    ctor public MediaPlayer();
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method public void addTimedTextSource(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void addTimedTextSource(android.content.Context, android.net.Uri, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void addTimedTextSource(java.io.FileDescriptor, String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void addTimedTextSource(java.io.FileDescriptor, long, long, String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void attachAuxEffect(int);
+    method public void clearOnMediaTimeDiscontinuityListener();
+    method public void clearOnSubtitleDataListener();
+    method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri);
+    method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri, android.view.SurfaceHolder);
+    method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri, android.view.SurfaceHolder, android.media.AudioAttributes, int);
+    method public static android.media.MediaPlayer create(android.content.Context, int);
+    method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
+    method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration);
+    method public void deselectTrack(int) throws java.lang.IllegalStateException;
+    method protected void finalize();
+    method public int getAudioSessionId();
+    method public int getCurrentPosition();
+    method public android.media.MediaPlayer.DrmInfo getDrmInfo();
+    method @NonNull public String getDrmPropertyString(@NonNull String) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public int getDuration();
+    method @NonNull public android.media.MediaDrm.KeyRequest getKeyRequest(@Nullable byte[], @Nullable byte[], @Nullable String, int, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public android.os.PersistableBundle getMetrics();
+    method @NonNull public android.media.PlaybackParams getPlaybackParams();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public int getSelectedTrack(int) throws java.lang.IllegalStateException;
+    method @NonNull public android.media.SyncParams getSyncParams();
+    method @Nullable public android.media.MediaTimestamp getTimestamp();
+    method public android.media.MediaPlayer.TrackInfo[] getTrackInfo() throws java.lang.IllegalStateException;
+    method public int getVideoHeight();
+    method public int getVideoWidth();
+    method public boolean isLooping();
+    method public boolean isPlaying();
+    method public void pause() throws java.lang.IllegalStateException;
+    method public void prepare() throws java.io.IOException, java.lang.IllegalStateException;
+    method public void prepareAsync() throws java.lang.IllegalStateException;
+    method public void prepareDrm(@NonNull java.util.UUID) throws android.media.MediaPlayer.ProvisioningNetworkErrorException, android.media.MediaPlayer.ProvisioningServerErrorException, android.media.ResourceBusyException, android.media.UnsupportedSchemeException;
+    method public byte[] provideKeyResponse(@Nullable byte[], @NonNull byte[]) throws android.media.DeniedByServerException, android.media.MediaPlayer.NoDrmSchemeException;
+    method public void release();
+    method public void releaseDrm() throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method public void reset();
+    method public void restoreKeys(@NonNull byte[]) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public void seekTo(long, int);
+    method public void seekTo(int) throws java.lang.IllegalStateException;
+    method public void selectTrack(int) throws java.lang.IllegalStateException;
+    method public void setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public void setAudioSessionId(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method @Deprecated public void setAudioStreamType(int);
+    method public void setAuxEffectSendLevel(float);
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable java.util.Map<java.lang.String,java.lang.String>, @Nullable java.util.List<java.net.HttpCookie>) throws java.io.IOException;
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
+    method public void setDataSource(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
+    method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(android.media.MediaDataSource) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDisplay(android.view.SurfaceHolder);
+    method public void setDrmPropertyString(@NonNull String, @NonNull String) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public void setLooping(boolean);
+    method public void setNextMediaPlayer(android.media.MediaPlayer);
+    method public void setOnBufferingUpdateListener(android.media.MediaPlayer.OnBufferingUpdateListener);
+    method public void setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener);
+    method public void setOnDrmConfigHelper(android.media.MediaPlayer.OnDrmConfigHelper);
+    method public void setOnDrmInfoListener(android.media.MediaPlayer.OnDrmInfoListener);
+    method public void setOnDrmInfoListener(android.media.MediaPlayer.OnDrmInfoListener, android.os.Handler);
+    method public void setOnDrmPreparedListener(android.media.MediaPlayer.OnDrmPreparedListener);
+    method public void setOnDrmPreparedListener(android.media.MediaPlayer.OnDrmPreparedListener, android.os.Handler);
+    method public void setOnErrorListener(android.media.MediaPlayer.OnErrorListener);
+    method public void setOnInfoListener(android.media.MediaPlayer.OnInfoListener);
+    method public void setOnMediaTimeDiscontinuityListener(@NonNull android.media.MediaPlayer.OnMediaTimeDiscontinuityListener, @NonNull android.os.Handler);
+    method public void setOnMediaTimeDiscontinuityListener(@NonNull android.media.MediaPlayer.OnMediaTimeDiscontinuityListener);
+    method public void setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener);
+    method public void setOnSeekCompleteListener(android.media.MediaPlayer.OnSeekCompleteListener);
+    method public void setOnSubtitleDataListener(@NonNull android.media.MediaPlayer.OnSubtitleDataListener, @NonNull android.os.Handler);
+    method public void setOnSubtitleDataListener(@NonNull android.media.MediaPlayer.OnSubtitleDataListener);
+    method public void setOnTimedMetaDataAvailableListener(android.media.MediaPlayer.OnTimedMetaDataAvailableListener);
+    method public void setOnTimedTextListener(android.media.MediaPlayer.OnTimedTextListener);
+    method public void setOnVideoSizeChangedListener(android.media.MediaPlayer.OnVideoSizeChangedListener);
+    method public void setPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public void setScreenOnWhilePlaying(boolean);
+    method public void setSurface(android.view.Surface);
+    method public void setSyncParams(@NonNull android.media.SyncParams);
+    method public void setVideoScalingMode(int);
+    method public void setVolume(float, float);
+    method public void setWakeMode(android.content.Context, int);
+    method public void start() throws java.lang.IllegalStateException;
+    method public void stop() throws java.lang.IllegalStateException;
+    field public static final int MEDIA_ERROR_IO = -1004; // 0xfffffc14
+    field public static final int MEDIA_ERROR_MALFORMED = -1007; // 0xfffffc11
+    field public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200; // 0xc8
+    field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64
+    field public static final int MEDIA_ERROR_TIMED_OUT = -110; // 0xffffff92
+    field public static final int MEDIA_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int MEDIA_ERROR_UNSUPPORTED = -1010; // 0xfffffc0e
+    field public static final int MEDIA_INFO_AUDIO_NOT_PLAYING = 804; // 0x324
+    field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320
+    field public static final int MEDIA_INFO_BUFFERING_END = 702; // 0x2be
+    field public static final int MEDIA_INFO_BUFFERING_START = 701; // 0x2bd
+    field public static final int MEDIA_INFO_METADATA_UPDATE = 802; // 0x322
+    field public static final int MEDIA_INFO_NOT_SEEKABLE = 801; // 0x321
+    field public static final int MEDIA_INFO_STARTED_AS_NEXT = 2; // 0x2
+    field public static final int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902; // 0x386
+    field public static final int MEDIA_INFO_UNKNOWN = 1; // 0x1
+    field public static final int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901; // 0x385
+    field public static final int MEDIA_INFO_VIDEO_NOT_PLAYING = 805; // 0x325
+    field public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3; // 0x3
+    field public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700; // 0x2bc
+    field @Deprecated public static final String MEDIA_MIMETYPE_TEXT_SUBRIP = "application/x-subrip";
+    field public static final int PREPARE_DRM_STATUS_PREPARATION_ERROR = 3; // 0x3
+    field public static final int PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR = 1; // 0x1
+    field public static final int PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR = 2; // 0x2
+    field public static final int PREPARE_DRM_STATUS_SUCCESS = 0; // 0x0
+    field public static final int SEEK_CLOSEST = 3; // 0x3
+    field public static final int SEEK_CLOSEST_SYNC = 2; // 0x2
+    field public static final int SEEK_NEXT_SYNC = 1; // 0x1
+    field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2
+  }
+
+  public static final class MediaPlayer.DrmInfo {
+    method public java.util.Map<java.util.UUID,byte[]> getPssh();
+    method public java.util.UUID[] getSupportedSchemes();
+  }
+
+  public static final class MediaPlayer.MetricsConstants {
+    field public static final String CODEC_AUDIO = "android.media.mediaplayer.audio.codec";
+    field public static final String CODEC_VIDEO = "android.media.mediaplayer.video.codec";
+    field public static final String DURATION = "android.media.mediaplayer.durationMs";
+    field public static final String ERRORS = "android.media.mediaplayer.err";
+    field public static final String ERROR_CODE = "android.media.mediaplayer.errcode";
+    field public static final String FRAMES = "android.media.mediaplayer.frames";
+    field public static final String FRAMES_DROPPED = "android.media.mediaplayer.dropped";
+    field public static final String HEIGHT = "android.media.mediaplayer.height";
+    field public static final String MIME_TYPE_AUDIO = "android.media.mediaplayer.audio.mime";
+    field public static final String MIME_TYPE_VIDEO = "android.media.mediaplayer.video.mime";
+    field public static final String PLAYING = "android.media.mediaplayer.playingMs";
+    field public static final String WIDTH = "android.media.mediaplayer.width";
+  }
+
+  public static final class MediaPlayer.NoDrmSchemeException extends android.media.MediaDrmException {
+    ctor public MediaPlayer.NoDrmSchemeException(String);
+  }
+
+  public static interface MediaPlayer.OnBufferingUpdateListener {
+    method public void onBufferingUpdate(android.media.MediaPlayer, int);
+  }
+
+  public static interface MediaPlayer.OnCompletionListener {
+    method public void onCompletion(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnDrmConfigHelper {
+    method public void onDrmConfig(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnDrmInfoListener {
+    method public void onDrmInfo(android.media.MediaPlayer, android.media.MediaPlayer.DrmInfo);
+  }
+
+  public static interface MediaPlayer.OnDrmPreparedListener {
+    method public void onDrmPrepared(android.media.MediaPlayer, int);
+  }
+
+  public static interface MediaPlayer.OnErrorListener {
+    method public boolean onError(android.media.MediaPlayer, int, int);
+  }
+
+  public static interface MediaPlayer.OnInfoListener {
+    method public boolean onInfo(android.media.MediaPlayer, int, int);
+  }
+
+  public static interface MediaPlayer.OnMediaTimeDiscontinuityListener {
+    method public void onMediaTimeDiscontinuity(@NonNull android.media.MediaPlayer, @NonNull android.media.MediaTimestamp);
+  }
+
+  public static interface MediaPlayer.OnPreparedListener {
+    method public void onPrepared(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnSeekCompleteListener {
+    method public void onSeekComplete(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnSubtitleDataListener {
+    method public void onSubtitleData(@NonNull android.media.MediaPlayer, @NonNull android.media.SubtitleData);
+  }
+
+  public static interface MediaPlayer.OnTimedMetaDataAvailableListener {
+    method public void onTimedMetaDataAvailable(android.media.MediaPlayer, android.media.TimedMetaData);
+  }
+
+  public static interface MediaPlayer.OnTimedTextListener {
+    method public void onTimedText(android.media.MediaPlayer, android.media.TimedText);
+  }
+
+  public static interface MediaPlayer.OnVideoSizeChangedListener {
+    method public void onVideoSizeChanged(android.media.MediaPlayer, int, int);
+  }
+
+  public static final class MediaPlayer.ProvisioningNetworkErrorException extends android.media.MediaDrmException {
+    ctor public MediaPlayer.ProvisioningNetworkErrorException(String);
+  }
+
+  public static final class MediaPlayer.ProvisioningServerErrorException extends android.media.MediaDrmException {
+    ctor public MediaPlayer.ProvisioningServerErrorException(String);
+  }
+
+  public static class MediaPlayer.TrackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.MediaFormat getFormat();
+    method public String getLanguage();
+    method public int getTrackType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int MEDIA_TRACK_TYPE_AUDIO = 2; // 0x2
+    field public static final int MEDIA_TRACK_TYPE_METADATA = 5; // 0x5
+    field public static final int MEDIA_TRACK_TYPE_SUBTITLE = 4; // 0x4
+    field public static final int MEDIA_TRACK_TYPE_TIMEDTEXT = 3; // 0x3
+    field public static final int MEDIA_TRACK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int MEDIA_TRACK_TYPE_VIDEO = 1; // 0x1
+  }
+
+  public class MediaRecorder implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection {
+    ctor @Deprecated public MediaRecorder();
+    ctor public MediaRecorder(@NonNull android.content.Context);
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method protected void finalize();
+    method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException;
+    method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration();
+    method public static final int getAudioSourceMax();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public int getMaxAmplitude() throws java.lang.IllegalStateException;
+    method public android.os.PersistableBundle getMetrics();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public android.view.Surface getSurface();
+    method public boolean isPrivacySensitive();
+    method public void pause() throws java.lang.IllegalStateException;
+    method public void prepare() throws java.io.IOException, java.lang.IllegalStateException;
+    method public void registerAudioRecordingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioRecordingCallback);
+    method public void release();
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method public void reset();
+    method public void resume() throws java.lang.IllegalStateException;
+    method public void setAudioChannels(int);
+    method public void setAudioEncoder(int) throws java.lang.IllegalStateException;
+    method public void setAudioEncodingBitRate(int);
+    method public void setAudioProfile(@NonNull android.media.EncoderProfiles.AudioProfile);
+    method public void setAudioSamplingRate(int);
+    method public void setAudioSource(int) throws java.lang.IllegalStateException;
+    method @Deprecated public void setCamera(android.hardware.Camera);
+    method public void setCaptureRate(double);
+    method public void setInputSurface(@NonNull android.view.Surface);
+    method public void setLocation(float, float);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public void setMaxDuration(int) throws java.lang.IllegalArgumentException;
+    method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException;
+    method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException;
+    method public void setNextOutputFile(java.io.File) throws java.io.IOException;
+    method public void setOnErrorListener(android.media.MediaRecorder.OnErrorListener);
+    method public void setOnInfoListener(android.media.MediaRecorder.OnInfoListener);
+    method public void setOrientationHint(int);
+    method public void setOutputFile(java.io.FileDescriptor) throws java.lang.IllegalStateException;
+    method public void setOutputFile(java.io.File);
+    method public void setOutputFile(String) throws java.lang.IllegalStateException;
+    method public void setOutputFormat(int) throws java.lang.IllegalStateException;
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredMicrophoneDirection(int);
+    method public boolean setPreferredMicrophoneFieldDimension(@FloatRange(from=-1.0, to=1.0) float);
+    method public void setPreviewDisplay(android.view.Surface);
+    method public void setPrivacySensitive(boolean);
+    method public void setProfile(android.media.CamcorderProfile);
+    method public void setVideoEncoder(int) throws java.lang.IllegalStateException;
+    method public void setVideoEncodingBitRate(int);
+    method public void setVideoEncodingProfileLevel(int, int);
+    method public void setVideoFrameRate(int) throws java.lang.IllegalStateException;
+    method public void setVideoProfile(@NonNull android.media.EncoderProfiles.VideoProfile);
+    method public void setVideoSize(int, int) throws java.lang.IllegalStateException;
+    method public void setVideoSource(int) throws java.lang.IllegalStateException;
+    method public void start() throws java.lang.IllegalStateException;
+    method public void stop() throws java.lang.IllegalStateException;
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+    field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64
+    field public static final int MEDIA_RECORDER_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int MEDIA_RECORDER_INFO_MAX_DURATION_REACHED = 800; // 0x320
+    field public static final int MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING = 802; // 0x322
+    field public static final int MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED = 801; // 0x321
+    field public static final int MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED = 803; // 0x323
+    field public static final int MEDIA_RECORDER_INFO_UNKNOWN = 1; // 0x1
+  }
+
+  public final class MediaRecorder.AudioEncoder {
+    field public static final int AAC = 3; // 0x3
+    field public static final int AAC_ELD = 5; // 0x5
+    field public static final int AMR_NB = 1; // 0x1
+    field public static final int AMR_WB = 2; // 0x2
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int HE_AAC = 4; // 0x4
+    field public static final int OPUS = 7; // 0x7
+    field public static final int VORBIS = 6; // 0x6
+  }
+
+  public final class MediaRecorder.AudioSource {
+    field public static final int CAMCORDER = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int MIC = 1; // 0x1
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int REMOTE_SUBMIX = 8; // 0x8
+    field public static final int UNPROCESSED = 9; // 0x9
+    field public static final int VOICE_CALL = 4; // 0x4
+    field public static final int VOICE_COMMUNICATION = 7; // 0x7
+    field public static final int VOICE_DOWNLINK = 3; // 0x3
+    field public static final int VOICE_PERFORMANCE = 10; // 0xa
+    field public static final int VOICE_RECOGNITION = 6; // 0x6
+    field public static final int VOICE_UPLINK = 2; // 0x2
+  }
+
+  public static final class MediaRecorder.MetricsConstants {
+    field public static final String AUDIO_BITRATE = "android.media.mediarecorder.audio-bitrate";
+    field public static final String AUDIO_CHANNELS = "android.media.mediarecorder.audio-channels";
+    field public static final String AUDIO_SAMPLERATE = "android.media.mediarecorder.audio-samplerate";
+    field public static final String AUDIO_TIMESCALE = "android.media.mediarecorder.audio-timescale";
+    field public static final String CAPTURE_FPS = "android.media.mediarecorder.capture-fps";
+    field public static final String CAPTURE_FPS_ENABLE = "android.media.mediarecorder.capture-fpsenable";
+    field public static final String FRAMERATE = "android.media.mediarecorder.frame-rate";
+    field public static final String HEIGHT = "android.media.mediarecorder.height";
+    field public static final String MOVIE_TIMESCALE = "android.media.mediarecorder.movie-timescale";
+    field public static final String ROTATION = "android.media.mediarecorder.rotation";
+    field public static final String VIDEO_BITRATE = "android.media.mediarecorder.video-bitrate";
+    field public static final String VIDEO_IFRAME_INTERVAL = "android.media.mediarecorder.video-iframe-interval";
+    field public static final String VIDEO_LEVEL = "android.media.mediarecorder.video-encoder-level";
+    field public static final String VIDEO_PROFILE = "android.media.mediarecorder.video-encoder-profile";
+    field public static final String VIDEO_TIMESCALE = "android.media.mediarecorder.video-timescale";
+    field public static final String WIDTH = "android.media.mediarecorder.width";
+  }
+
+  public static interface MediaRecorder.OnErrorListener {
+    method public void onError(android.media.MediaRecorder, int, int);
+  }
+
+  public static interface MediaRecorder.OnInfoListener {
+    method public void onInfo(android.media.MediaRecorder, int, int);
+  }
+
+  public final class MediaRecorder.OutputFormat {
+    field public static final int AAC_ADTS = 6; // 0x6
+    field public static final int AMR_NB = 3; // 0x3
+    field public static final int AMR_WB = 4; // 0x4
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int MPEG_2_TS = 8; // 0x8
+    field public static final int MPEG_4 = 2; // 0x2
+    field public static final int OGG = 11; // 0xb
+    field @Deprecated public static final int RAW_AMR = 3; // 0x3
+    field public static final int THREE_GPP = 1; // 0x1
+    field public static final int WEBM = 9; // 0x9
+  }
+
+  public final class MediaRecorder.VideoEncoder {
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int H263 = 1; // 0x1
+    field public static final int H264 = 2; // 0x2
+    field public static final int HEVC = 5; // 0x5
+    field public static final int MPEG_4_SP = 3; // 0x3
+    field public static final int VP8 = 4; // 0x4
+  }
+
+  public final class MediaRecorder.VideoSource {
+    field public static final int CAMERA = 1; // 0x1
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int SURFACE = 2; // 0x2
+  }
+
+  public final class MediaRoute2Info implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getClientPackageName();
+    method public int getConnectionState();
+    method @Nullable public CharSequence getDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public java.util.List<java.lang.String> getFeatures();
+    method @Nullable public android.net.Uri getIconUri();
+    method @NonNull public String getId();
+    method @NonNull public CharSequence getName();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public boolean isSystemRoute();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
+    field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
+    field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaRoute2Info> CREATOR;
+    field public static final String FEATURE_LIVE_AUDIO = "android.media.route.feature.LIVE_AUDIO";
+    field public static final String FEATURE_LIVE_VIDEO = "android.media.route.feature.LIVE_VIDEO";
+    field public static final String FEATURE_REMOTE_AUDIO_PLAYBACK = "android.media.route.feature.REMOTE_AUDIO_PLAYBACK";
+    field public static final String FEATURE_REMOTE_PLAYBACK = "android.media.route.feature.REMOTE_PLAYBACK";
+    field public static final String FEATURE_REMOTE_VIDEO_PLAYBACK = "android.media.route.feature.REMOTE_VIDEO_PLAYBACK";
+    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+  }
+
+  public static final class MediaRoute2Info.Builder {
+    ctor public MediaRoute2Info.Builder(@NonNull String, @NonNull CharSequence);
+    ctor public MediaRoute2Info.Builder(@NonNull android.media.MediaRoute2Info);
+    method @NonNull public android.media.MediaRoute2Info.Builder addFeature(@NonNull String);
+    method @NonNull public android.media.MediaRoute2Info.Builder addFeatures(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.media.MediaRoute2Info build();
+    method @NonNull public android.media.MediaRoute2Info.Builder clearFeatures();
+    method @NonNull public android.media.MediaRoute2Info.Builder setClientPackageName(@Nullable String);
+    method @NonNull public android.media.MediaRoute2Info.Builder setConnectionState(int);
+    method @NonNull public android.media.MediaRoute2Info.Builder setDescription(@Nullable CharSequence);
+    method @NonNull public android.media.MediaRoute2Info.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.media.MediaRoute2Info.Builder setIconUri(@Nullable android.net.Uri);
+    method @NonNull public android.media.MediaRoute2Info.Builder setVolume(int);
+    method @NonNull public android.media.MediaRoute2Info.Builder setVolumeHandling(int);
+    method @NonNull public android.media.MediaRoute2Info.Builder setVolumeMax(int);
+  }
+
+  public abstract class MediaRoute2ProviderService extends android.app.Service {
+    ctor public MediaRoute2ProviderService();
+    method @NonNull public final java.util.List<android.media.RoutingSessionInfo> getAllSessionInfo();
+    method @Nullable public final android.media.RoutingSessionInfo getSessionInfo(@NonNull String);
+    method public final void notifyRequestFailed(long, int);
+    method public final void notifyRoutes(@NonNull java.util.Collection<android.media.MediaRoute2Info>);
+    method public final void notifySessionCreated(long, @NonNull android.media.RoutingSessionInfo);
+    method public final void notifySessionReleased(@NonNull String);
+    method public final void notifySessionUpdated(@NonNull android.media.RoutingSessionInfo);
+    method @CallSuper @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCreateSession(long, @NonNull String, @NonNull String, @Nullable android.os.Bundle);
+    method public abstract void onDeselectRoute(long, @NonNull String, @NonNull String);
+    method public void onDiscoveryPreferenceChanged(@NonNull android.media.RouteDiscoveryPreference);
+    method public abstract void onReleaseSession(long, @NonNull String);
+    method public abstract void onSelectRoute(long, @NonNull String, @NonNull String);
+    method public abstract void onSetRouteVolume(long, @NonNull String, int);
+    method public abstract void onSetSessionVolume(long, @NonNull String, int);
+    method public abstract void onTransferToRoute(long, @NonNull String, @NonNull String);
+    field public static final int REASON_INVALID_COMMAND = 4; // 0x4
+    field public static final int REASON_NETWORK_ERROR = 2; // 0x2
+    field public static final int REASON_REJECTED = 1; // 0x1
+    field public static final int REASON_ROUTE_NOT_AVAILABLE = 3; // 0x3
+    field public static final int REASON_UNKNOWN_ERROR = 0; // 0x0
+    field public static final long REQUEST_ID_NONE = 0L; // 0x0L
+    field public static final String SERVICE_INTERFACE = "android.media.MediaRoute2ProviderService";
+  }
+
+  public class MediaRouter {
+    method public void addCallback(int, android.media.MediaRouter.Callback);
+    method public void addCallback(int, android.media.MediaRouter.Callback, int);
+    method public void addUserRoute(android.media.MediaRouter.UserRouteInfo);
+    method public void clearUserRoutes();
+    method public android.media.MediaRouter.RouteCategory createRouteCategory(CharSequence, boolean);
+    method public android.media.MediaRouter.RouteCategory createRouteCategory(int, boolean);
+    method public android.media.MediaRouter.UserRouteInfo createUserRoute(android.media.MediaRouter.RouteCategory);
+    method public android.media.MediaRouter.RouteCategory getCategoryAt(int);
+    method public int getCategoryCount();
+    method public android.media.MediaRouter.RouteInfo getDefaultRoute();
+    method public android.media.MediaRouter.RouteInfo getRouteAt(int);
+    method public int getRouteCount();
+    method public android.media.MediaRouter.RouteInfo getSelectedRoute(int);
+    method public void removeCallback(android.media.MediaRouter.Callback);
+    method public void removeUserRoute(android.media.MediaRouter.UserRouteInfo);
+    method public void selectRoute(int, @NonNull android.media.MediaRouter.RouteInfo);
+    field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1
+    field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2
+    field public static final int ROUTE_TYPE_LIVE_AUDIO = 1; // 0x1
+    field public static final int ROUTE_TYPE_LIVE_VIDEO = 2; // 0x2
+    field public static final int ROUTE_TYPE_USER = 8388608; // 0x800000
+  }
+
+  public abstract static class MediaRouter.Callback {
+    ctor public MediaRouter.Callback();
+    method public abstract void onRouteAdded(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteGrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup, int);
+    method public void onRoutePresentationDisplayChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteRemoved(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup);
+    method public abstract void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+  }
+
+  public static class MediaRouter.RouteCategory {
+    method public CharSequence getName();
+    method public CharSequence getName(android.content.Context);
+    method public java.util.List<android.media.MediaRouter.RouteInfo> getRoutes(java.util.List<android.media.MediaRouter.RouteInfo>);
+    method public int getSupportedTypes();
+    method public boolean isGroupable();
+  }
+
+  public static class MediaRouter.RouteGroup extends android.media.MediaRouter.RouteInfo {
+    method public void addRoute(android.media.MediaRouter.RouteInfo);
+    method public void addRoute(android.media.MediaRouter.RouteInfo, int);
+    method public android.media.MediaRouter.RouteInfo getRouteAt(int);
+    method public int getRouteCount();
+    method public void removeRoute(android.media.MediaRouter.RouteInfo);
+    method public void removeRoute(int);
+    method public void setIconDrawable(android.graphics.drawable.Drawable);
+    method public void setIconResource(@DrawableRes int);
+  }
+
+  public static class MediaRouter.RouteInfo {
+    method public android.media.MediaRouter.RouteCategory getCategory();
+    method public CharSequence getDescription();
+    method public int getDeviceType();
+    method public android.media.MediaRouter.RouteGroup getGroup();
+    method public android.graphics.drawable.Drawable getIconDrawable();
+    method public CharSequence getName();
+    method public CharSequence getName(android.content.Context);
+    method public int getPlaybackStream();
+    method public int getPlaybackType();
+    method public android.view.Display getPresentationDisplay();
+    method public CharSequence getStatus();
+    method public int getSupportedTypes();
+    method public Object getTag();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public boolean isConnecting();
+    method public boolean isEnabled();
+    method public void requestSetVolume(int);
+    method public void requestUpdateVolume(int);
+    method public void setTag(Object);
+    field public static final int DEVICE_TYPE_BLUETOOTH = 3; // 0x3
+    field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+    field public static final int DEVICE_TYPE_TV = 1; // 0x1
+    field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
+    field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
+    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+  }
+
+  public static class MediaRouter.SimpleCallback extends android.media.MediaRouter.Callback {
+    ctor public MediaRouter.SimpleCallback();
+    method public void onRouteAdded(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public void onRouteChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public void onRouteGrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup, int);
+    method public void onRouteRemoved(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup);
+    method public void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+  }
+
+  public static class MediaRouter.UserRouteInfo extends android.media.MediaRouter.RouteInfo {
+    method public android.media.RemoteControlClient getRemoteControlClient();
+    method public void setDescription(CharSequence);
+    method public void setIconDrawable(android.graphics.drawable.Drawable);
+    method public void setIconResource(@DrawableRes int);
+    method public void setName(CharSequence);
+    method public void setName(int);
+    method public void setPlaybackStream(int);
+    method public void setPlaybackType(int);
+    method public void setRemoteControlClient(android.media.RemoteControlClient);
+    method public void setStatus(CharSequence);
+    method public void setVolume(int);
+    method public void setVolumeCallback(android.media.MediaRouter.VolumeCallback);
+    method public void setVolumeHandling(int);
+    method public void setVolumeMax(int);
+  }
+
+  public abstract static class MediaRouter.VolumeCallback {
+    ctor public MediaRouter.VolumeCallback();
+    method public abstract void onVolumeSetRequest(android.media.MediaRouter.RouteInfo, int);
+    method public abstract void onVolumeUpdateRequest(android.media.MediaRouter.RouteInfo, int);
+  }
+
+  public final class MediaRouter2 {
+    method @Nullable public android.media.MediaRouter2.RoutingController getController(@NonNull String);
+    method @NonNull public java.util.List<android.media.MediaRouter2.RoutingController> getControllers();
+    method @NonNull public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context);
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getRoutes();
+    method @NonNull public android.media.MediaRouter2.RoutingController getSystemController();
+    method public void registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.ControllerCallback);
+    method public void registerRouteCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RouteCallback, @NonNull android.media.RouteDiscoveryPreference);
+    method public void registerTransferCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.TransferCallback);
+    method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener);
+    method public void stop();
+    method public void transferTo(@NonNull android.media.MediaRoute2Info);
+    method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.ControllerCallback);
+    method public void unregisterRouteCallback(@NonNull android.media.MediaRouter2.RouteCallback);
+    method public void unregisterTransferCallback(@NonNull android.media.MediaRouter2.TransferCallback);
+  }
+
+  public abstract static class MediaRouter2.ControllerCallback {
+    ctor public MediaRouter2.ControllerCallback();
+    method public void onControllerUpdated(@NonNull android.media.MediaRouter2.RoutingController);
+  }
+
+  public static interface MediaRouter2.OnGetControllerHintsListener {
+    method @Nullable public android.os.Bundle onGetControllerHints(@NonNull android.media.MediaRoute2Info);
+  }
+
+  public abstract static class MediaRouter2.RouteCallback {
+    ctor public MediaRouter2.RouteCallback();
+    method public void onRoutesAdded(@NonNull java.util.List<android.media.MediaRoute2Info>);
+    method public void onRoutesChanged(@NonNull java.util.List<android.media.MediaRoute2Info>);
+    method public void onRoutesRemoved(@NonNull java.util.List<android.media.MediaRoute2Info>);
+  }
+
+  public class MediaRouter2.RoutingController {
+    method public void deselectRoute(@NonNull android.media.MediaRoute2Info);
+    method @Nullable public android.os.Bundle getControlHints();
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getDeselectableRoutes();
+    method @NonNull public String getId();
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectableRoutes();
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectedRoutes();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public boolean isReleased();
+    method public void release();
+    method public void selectRoute(@NonNull android.media.MediaRoute2Info);
+    method public void setVolume(int);
+  }
+
+  public abstract static class MediaRouter2.TransferCallback {
+    ctor public MediaRouter2.TransferCallback();
+    method public void onStop(@NonNull android.media.MediaRouter2.RoutingController);
+    method public void onTransfer(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRouter2.RoutingController);
+    method public void onTransferFailure(@NonNull android.media.MediaRoute2Info);
+  }
+
+  public class MediaScannerConnection implements android.content.ServiceConnection {
+    ctor public MediaScannerConnection(android.content.Context, android.media.MediaScannerConnection.MediaScannerConnectionClient);
+    method public void connect();
+    method public void disconnect();
+    method public boolean isConnected();
+    method public void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+    method public void onServiceDisconnected(android.content.ComponentName);
+    method public void scanFile(String, String);
+    method public static void scanFile(android.content.Context, String[], String[], android.media.MediaScannerConnection.OnScanCompletedListener);
+  }
+
+  public static interface MediaScannerConnection.MediaScannerConnectionClient extends android.media.MediaScannerConnection.OnScanCompletedListener {
+    method public void onMediaScannerConnected();
+  }
+
+  public static interface MediaScannerConnection.OnScanCompletedListener {
+    method public void onScanCompleted(String, android.net.Uri);
+  }
+
+  public final class MediaSync {
+    ctor public MediaSync();
+    method @NonNull public android.view.Surface createInputSurface();
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public android.media.PlaybackParams getPlaybackParams();
+    method @NonNull public android.media.SyncParams getSyncParams();
+    method @Nullable public android.media.MediaTimestamp getTimestamp();
+    method public void queueAudio(@NonNull java.nio.ByteBuffer, int, long);
+    method public void release();
+    method public void setAudioTrack(@Nullable android.media.AudioTrack);
+    method public void setCallback(@Nullable android.media.MediaSync.Callback, @Nullable android.os.Handler);
+    method public void setOnErrorListener(@Nullable android.media.MediaSync.OnErrorListener, @Nullable android.os.Handler);
+    method public void setPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public void setSurface(@Nullable android.view.Surface);
+    method public void setSyncParams(@NonNull android.media.SyncParams);
+    field public static final int MEDIASYNC_ERROR_AUDIOTRACK_FAIL = 1; // 0x1
+    field public static final int MEDIASYNC_ERROR_SURFACE_FAIL = 2; // 0x2
+  }
+
+  public abstract static class MediaSync.Callback {
+    ctor public MediaSync.Callback();
+    method public abstract void onAudioBufferConsumed(@NonNull android.media.MediaSync, @NonNull java.nio.ByteBuffer, int);
+  }
+
+  public static interface MediaSync.OnErrorListener {
+    method public void onError(@NonNull android.media.MediaSync, int, int);
+  }
+
+  public class MediaSyncEvent implements android.os.Parcelable {
+    method public static android.media.MediaSyncEvent createEvent(int) throws java.lang.IllegalArgumentException;
+    method public int describeContents();
+    method public int getAudioSessionId();
+    method public int getType();
+    method public android.media.MediaSyncEvent setAudioSessionId(int) throws java.lang.IllegalArgumentException;
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaSyncEvent> CREATOR;
+    field public static final int SYNC_EVENT_NONE = 0; // 0x0
+    field public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1; // 0x1
+  }
+
+  public final class MediaTimestamp {
+    ctor public MediaTimestamp(long, long, @FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) float);
+    method public long getAnchorMediaTimeUs();
+    method public long getAnchorSystemNanoTime();
+    method @Deprecated public long getAnchorSytemNanoTime();
+    method @FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) public float getMediaClockRate();
+    field public static final android.media.MediaTimestamp TIMESTAMP_UNKNOWN;
+  }
+
+  public interface MicrophoneDirection {
+    method public boolean setPreferredMicrophoneDirection(int);
+    method public boolean setPreferredMicrophoneFieldDimension(@FloatRange(from=-1.0, to=1.0) float);
+    field public static final int MIC_DIRECTION_AWAY_FROM_USER = 2; // 0x2
+    field public static final int MIC_DIRECTION_EXTERNAL = 3; // 0x3
+    field public static final int MIC_DIRECTION_TOWARDS_USER = 1; // 0x1
+    field public static final int MIC_DIRECTION_UNSPECIFIED = 0; // 0x0
+  }
+
+  public final class MicrophoneInfo {
+    method @NonNull public String getAddress();
+    method public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getChannelMapping();
+    method public String getDescription();
+    method public int getDirectionality();
+    method public java.util.List<android.util.Pair<java.lang.Float,java.lang.Float>> getFrequencyResponse();
+    method public int getGroup();
+    method public int getId();
+    method public int getIndexInTheGroup();
+    method public int getLocation();
+    method public float getMaxSpl();
+    method public float getMinSpl();
+    method public android.media.MicrophoneInfo.Coordinate3F getOrientation();
+    method public android.media.MicrophoneInfo.Coordinate3F getPosition();
+    method public float getSensitivity();
+    method public int getType();
+    field public static final int CHANNEL_MAPPING_DIRECT = 1; // 0x1
+    field public static final int CHANNEL_MAPPING_PROCESSED = 2; // 0x2
+    field public static final int DIRECTIONALITY_BI_DIRECTIONAL = 2; // 0x2
+    field public static final int DIRECTIONALITY_CARDIOID = 3; // 0x3
+    field public static final int DIRECTIONALITY_HYPER_CARDIOID = 4; // 0x4
+    field public static final int DIRECTIONALITY_OMNI = 1; // 0x1
+    field public static final int DIRECTIONALITY_SUPER_CARDIOID = 5; // 0x5
+    field public static final int DIRECTIONALITY_UNKNOWN = 0; // 0x0
+    field public static final int GROUP_UNKNOWN = -1; // 0xffffffff
+    field public static final int INDEX_IN_THE_GROUP_UNKNOWN = -1; // 0xffffffff
+    field public static final int LOCATION_MAINBODY = 1; // 0x1
+    field public static final int LOCATION_MAINBODY_MOVABLE = 2; // 0x2
+    field public static final int LOCATION_PERIPHERAL = 3; // 0x3
+    field public static final int LOCATION_UNKNOWN = 0; // 0x0
+    field public static final android.media.MicrophoneInfo.Coordinate3F ORIENTATION_UNKNOWN;
+    field public static final android.media.MicrophoneInfo.Coordinate3F POSITION_UNKNOWN;
+    field public static final float SENSITIVITY_UNKNOWN = -3.4028235E38f;
+    field public static final float SPL_UNKNOWN = -3.4028235E38f;
+  }
+
+  public static final class MicrophoneInfo.Coordinate3F {
+    field public final float x;
+    field public final float y;
+    field public final float z;
+  }
+
+  public final class NotProvisionedException extends android.media.MediaDrmException {
+    ctor public NotProvisionedException(String);
+  }
+
+  public final class PlaybackParams implements android.os.Parcelable {
+    ctor public PlaybackParams();
+    method public android.media.PlaybackParams allowDefaults();
+    method public int describeContents();
+    method public int getAudioFallbackMode();
+    method public float getPitch();
+    method public float getSpeed();
+    method public android.media.PlaybackParams setAudioFallbackMode(int);
+    method public android.media.PlaybackParams setPitch(float);
+    method public android.media.PlaybackParams setSpeed(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_FALLBACK_MODE_DEFAULT = 0; // 0x0
+    field public static final int AUDIO_FALLBACK_MODE_FAIL = 2; // 0x2
+    field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.PlaybackParams> CREATOR;
+  }
+
+  public final class Rating implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getPercentRating();
+    method public int getRatingStyle();
+    method public float getStarRating();
+    method public boolean hasHeart();
+    method public boolean isRated();
+    method public boolean isThumbUp();
+    method public static android.media.Rating newHeartRating(boolean);
+    method public static android.media.Rating newPercentageRating(float);
+    method public static android.media.Rating newStarRating(int, float);
+    method public static android.media.Rating newThumbRating(boolean);
+    method public static android.media.Rating newUnratedRating(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Rating> CREATOR;
+    field public static final int RATING_3_STARS = 3; // 0x3
+    field public static final int RATING_4_STARS = 4; // 0x4
+    field public static final int RATING_5_STARS = 5; // 0x5
+    field public static final int RATING_HEART = 1; // 0x1
+    field public static final int RATING_NONE = 0; // 0x0
+    field public static final int RATING_PERCENTAGE = 6; // 0x6
+    field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+  }
+
+  @Deprecated public class RemoteControlClient {
+    ctor @Deprecated public RemoteControlClient(android.app.PendingIntent);
+    ctor @Deprecated public RemoteControlClient(android.app.PendingIntent, android.os.Looper);
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor editMetadata(boolean);
+    method @Deprecated public android.media.session.MediaSession getMediaSession();
+    method @Deprecated public void setMetadataUpdateListener(android.media.RemoteControlClient.OnMetadataUpdateListener);
+    method @Deprecated public void setOnGetPlaybackPositionListener(android.media.RemoteControlClient.OnGetPlaybackPositionListener);
+    method @Deprecated public void setPlaybackPositionUpdateListener(android.media.RemoteControlClient.OnPlaybackPositionUpdateListener);
+    method @Deprecated public void setPlaybackState(int);
+    method @Deprecated public void setPlaybackState(int, long, float);
+    method @Deprecated public void setTransportControlFlags(int);
+    field @Deprecated public static final int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40
+    field @Deprecated public static final int FLAG_KEY_MEDIA_NEXT = 128; // 0x80
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PLAY = 4; // 0x4
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8
+    field @Deprecated public static final int FLAG_KEY_MEDIA_POSITION_UPDATE = 256; // 0x100
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1
+    field @Deprecated public static final int FLAG_KEY_MEDIA_RATING = 512; // 0x200
+    field @Deprecated public static final int FLAG_KEY_MEDIA_REWIND = 2; // 0x2
+    field @Deprecated public static final int FLAG_KEY_MEDIA_STOP = 32; // 0x20
+    field @Deprecated public static final int PLAYSTATE_BUFFERING = 8; // 0x8
+    field @Deprecated public static final int PLAYSTATE_ERROR = 9; // 0x9
+    field @Deprecated public static final int PLAYSTATE_FAST_FORWARDING = 4; // 0x4
+    field @Deprecated public static final int PLAYSTATE_PAUSED = 2; // 0x2
+    field @Deprecated public static final int PLAYSTATE_PLAYING = 3; // 0x3
+    field @Deprecated public static final int PLAYSTATE_REWINDING = 5; // 0x5
+    field @Deprecated public static final int PLAYSTATE_SKIPPING_BACKWARDS = 7; // 0x7
+    field @Deprecated public static final int PLAYSTATE_SKIPPING_FORWARDS = 6; // 0x6
+    field @Deprecated public static final int PLAYSTATE_STOPPED = 1; // 0x1
+  }
+
+  @Deprecated public class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
+    method @Deprecated public void apply();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putObject(int, Object) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putString(int, String) throws java.lang.IllegalArgumentException;
+    field @Deprecated public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
+  }
+
+  @Deprecated public static interface RemoteControlClient.OnGetPlaybackPositionListener {
+    method @Deprecated public long onGetPlaybackPosition();
+  }
+
+  @Deprecated public static interface RemoteControlClient.OnMetadataUpdateListener {
+    method @Deprecated public void onMetadataUpdate(int, Object);
+  }
+
+  @Deprecated public static interface RemoteControlClient.OnPlaybackPositionUpdateListener {
+    method @Deprecated public void onPlaybackPositionUpdate(long);
+  }
+
+  @Deprecated public final class RemoteController {
+    ctor @Deprecated public RemoteController(android.content.Context, android.media.RemoteController.OnClientUpdateListener) throws java.lang.IllegalArgumentException;
+    ctor @Deprecated public RemoteController(android.content.Context, android.media.RemoteController.OnClientUpdateListener, android.os.Looper) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean clearArtworkConfiguration();
+    method @Deprecated public android.media.RemoteController.MetadataEditor editMetadata();
+    method @Deprecated public long getEstimatedMediaPosition();
+    method @Deprecated public boolean seekTo(long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean sendMediaKeyEvent(android.view.KeyEvent) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean setArtworkConfiguration(int, int) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean setSynchronizationMode(int) throws java.lang.IllegalArgumentException;
+    field @Deprecated public static final int POSITION_SYNCHRONIZATION_CHECK = 1; // 0x1
+    field @Deprecated public static final int POSITION_SYNCHRONIZATION_NONE = 0; // 0x0
+  }
+
+  @Deprecated public class RemoteController.MetadataEditor extends android.media.MediaMetadataEditor {
+    method @Deprecated public void apply();
+  }
+
+  @Deprecated public static interface RemoteController.OnClientUpdateListener {
+    method @Deprecated public void onClientChange(boolean);
+    method @Deprecated public void onClientMetadataUpdate(android.media.RemoteController.MetadataEditor);
+    method @Deprecated public void onClientPlaybackStateUpdate(int);
+    method @Deprecated public void onClientPlaybackStateUpdate(int, long, long, float);
+    method @Deprecated public void onClientTransportControlUpdate(int);
+  }
+
+  public final class ResourceBusyException extends android.media.MediaDrmException {
+    ctor public ResourceBusyException(String);
+  }
+
+  public class Ringtone {
+    method protected void finalize();
+    method public android.media.AudioAttributes getAudioAttributes();
+    method @Deprecated public int getStreamType();
+    method public String getTitle(android.content.Context);
+    method public float getVolume();
+    method public boolean isHapticGeneratorEnabled();
+    method public boolean isLooping();
+    method public boolean isPlaying();
+    method public void play();
+    method public void setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public boolean setHapticGeneratorEnabled(boolean);
+    method public void setLooping(boolean);
+    method @Deprecated public void setStreamType(int);
+    method public void setVolume(float);
+    method public void stop();
+  }
+
+  public class RingtoneManager {
+    ctor public RingtoneManager(android.app.Activity);
+    ctor public RingtoneManager(android.content.Context);
+    method public static android.net.Uri getActualDefaultRingtoneUri(android.content.Context, int);
+    method public android.database.Cursor getCursor();
+    method public static int getDefaultType(android.net.Uri);
+    method public static android.net.Uri getDefaultUri(int);
+    method @Deprecated public boolean getIncludeDrm();
+    method public android.media.Ringtone getRingtone(int);
+    method public static android.media.Ringtone getRingtone(android.content.Context, android.net.Uri);
+    method public int getRingtonePosition(android.net.Uri);
+    method public android.net.Uri getRingtoneUri(int);
+    method public boolean getStopPreviousRingtone();
+    method public static android.net.Uri getValidRingtoneUri(android.content.Context);
+    method public boolean hasHapticChannels(int);
+    method public static boolean hasHapticChannels(@NonNull android.net.Uri);
+    method public int inferStreamType();
+    method public static boolean isDefault(android.net.Uri);
+    method @Nullable public static android.content.res.AssetFileDescriptor openDefaultRingtoneUri(@NonNull android.content.Context, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static void setActualDefaultRingtoneUri(android.content.Context, int, android.net.Uri);
+    method @Deprecated public void setIncludeDrm(boolean);
+    method public void setStopPreviousRingtone(boolean);
+    method public void setType(int);
+    method public void stopPreviousRingtone();
+    field public static final String ACTION_RINGTONE_PICKER = "android.intent.action.RINGTONE_PICKER";
+    field public static final String EXTRA_RINGTONE_DEFAULT_URI = "android.intent.extra.ringtone.DEFAULT_URI";
+    field public static final String EXTRA_RINGTONE_EXISTING_URI = "android.intent.extra.ringtone.EXISTING_URI";
+    field @Deprecated public static final String EXTRA_RINGTONE_INCLUDE_DRM = "android.intent.extra.ringtone.INCLUDE_DRM";
+    field public static final String EXTRA_RINGTONE_PICKED_URI = "android.intent.extra.ringtone.PICKED_URI";
+    field public static final String EXTRA_RINGTONE_SHOW_DEFAULT = "android.intent.extra.ringtone.SHOW_DEFAULT";
+    field public static final String EXTRA_RINGTONE_SHOW_SILENT = "android.intent.extra.ringtone.SHOW_SILENT";
+    field public static final String EXTRA_RINGTONE_TITLE = "android.intent.extra.ringtone.TITLE";
+    field public static final String EXTRA_RINGTONE_TYPE = "android.intent.extra.ringtone.TYPE";
+    field public static final int ID_COLUMN_INDEX = 0; // 0x0
+    field public static final int TITLE_COLUMN_INDEX = 1; // 0x1
+    field public static final int TYPE_ALARM = 4; // 0x4
+    field public static final int TYPE_ALL = 7; // 0x7
+    field public static final int TYPE_NOTIFICATION = 2; // 0x2
+    field public static final int TYPE_RINGTONE = 1; // 0x1
+    field public static final int URI_COLUMN_INDEX = 2; // 0x2
+  }
+
+  public final class RouteDiscoveryPreference implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getPreferredFeatures();
+    method public boolean shouldPerformActiveScan();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.RouteDiscoveryPreference> CREATOR;
+  }
+
+  public static final class RouteDiscoveryPreference.Builder {
+    ctor public RouteDiscoveryPreference.Builder(@NonNull java.util.List<java.lang.String>, boolean);
+    ctor public RouteDiscoveryPreference.Builder(@NonNull android.media.RouteDiscoveryPreference);
+    method @NonNull public android.media.RouteDiscoveryPreference build();
+    method @NonNull public android.media.RouteDiscoveryPreference.Builder setPreferredFeatures(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public android.media.RouteDiscoveryPreference.Builder setShouldPerformActiveScan(boolean);
+  }
+
+  public final class RoutingSessionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getClientPackageName();
+    method @Nullable public android.os.Bundle getControlHints();
+    method @NonNull public java.util.List<java.lang.String> getDeselectableRoutes();
+    method @NonNull public String getId();
+    method @Nullable public CharSequence getName();
+    method @NonNull public java.util.List<java.lang.String> getSelectableRoutes();
+    method @NonNull public java.util.List<java.lang.String> getSelectedRoutes();
+    method @NonNull public java.util.List<java.lang.String> getTransferableRoutes();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.RoutingSessionInfo> CREATOR;
+  }
+
+  public static final class RoutingSessionInfo.Builder {
+    ctor public RoutingSessionInfo.Builder(@NonNull String, @NonNull String);
+    ctor public RoutingSessionInfo.Builder(@NonNull android.media.RoutingSessionInfo);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addDeselectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addSelectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addSelectedRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addTransferableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo build();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearDeselectableRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectableRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectedRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearTransferableRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeDeselectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectedRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeTransferableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setControlHints(@Nullable android.os.Bundle);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setName(@Nullable CharSequence);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolume(int);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeHandling(int);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeMax(int);
+  }
+
+  public class SoundPool {
+    ctor @Deprecated public SoundPool(int, int, int);
+    method public final void autoPause();
+    method public final void autoResume();
+    method protected void finalize();
+    method public int load(String, int);
+    method public int load(android.content.Context, int, int);
+    method public int load(android.content.res.AssetFileDescriptor, int);
+    method public int load(java.io.FileDescriptor, long, long, int);
+    method public final void pause(int);
+    method public final int play(int, float, float, int, int, float);
+    method public final void release();
+    method public final void resume(int);
+    method public final void setLoop(int, int);
+    method public void setOnLoadCompleteListener(android.media.SoundPool.OnLoadCompleteListener);
+    method public final void setPriority(int, int);
+    method public final void setRate(int, float);
+    method public final void setVolume(int, float, float);
+    method public final void stop(int);
+    method public final boolean unload(int);
+  }
+
+  public static class SoundPool.Builder {
+    ctor public SoundPool.Builder();
+    method public android.media.SoundPool build();
+    method public android.media.SoundPool.Builder setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public android.media.SoundPool.Builder setMaxStreams(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public static interface SoundPool.OnLoadCompleteListener {
+    method public void onLoadComplete(android.media.SoundPool, int, int);
+  }
+
+  public class Spatializer {
+    method public void addOnSpatializerStateChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnSpatializerStateChangedListener);
+    method public boolean canBeSpatialized(@NonNull android.media.AudioAttributes, @NonNull android.media.AudioFormat);
+    method public int getImmersiveAudioLevel();
+    method public boolean isAvailable();
+    method public boolean isEnabled();
+    method public void removeOnSpatializerStateChangedListener(@NonNull android.media.Spatializer.OnSpatializerStateChangedListener);
+    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL = 1; // 0x1
+    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_NONE = 0; // 0x0
+    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_OTHER = -1; // 0xffffffff
+  }
+
+  public static interface Spatializer.OnSpatializerStateChangedListener {
+    method public void onSpatializerAvailableChanged(@NonNull android.media.Spatializer, boolean);
+    method public void onSpatializerEnabledChanged(@NonNull android.media.Spatializer, boolean);
+  }
+
+  public final class SubtitleData {
+    ctor public SubtitleData(int, long, long, @NonNull byte[]);
+    method @NonNull public byte[] getData();
+    method public long getDurationUs();
+    method public long getStartTimeUs();
+    method public int getTrackIndex();
+  }
+
+  public final class SyncParams {
+    ctor public SyncParams();
+    method public android.media.SyncParams allowDefaults();
+    method public int getAudioAdjustMode();
+    method public float getFrameRate();
+    method public int getSyncSource();
+    method public float getTolerance();
+    method public android.media.SyncParams setAudioAdjustMode(int);
+    method public android.media.SyncParams setFrameRate(float);
+    method public android.media.SyncParams setSyncSource(int);
+    method public android.media.SyncParams setTolerance(float);
+    field public static final int AUDIO_ADJUST_MODE_DEFAULT = 0; // 0x0
+    field public static final int AUDIO_ADJUST_MODE_RESAMPLE = 2; // 0x2
+    field public static final int AUDIO_ADJUST_MODE_STRETCH = 1; // 0x1
+    field public static final int SYNC_SOURCE_AUDIO = 2; // 0x2
+    field public static final int SYNC_SOURCE_DEFAULT = 0; // 0x0
+    field public static final int SYNC_SOURCE_SYSTEM_CLOCK = 1; // 0x1
+    field public static final int SYNC_SOURCE_VSYNC = 3; // 0x3
+  }
+
+  public class ThumbnailUtils {
+    ctor public ThumbnailUtils();
+    method @Deprecated @Nullable public static android.graphics.Bitmap createAudioThumbnail(@NonNull String, int);
+    method @NonNull public static android.graphics.Bitmap createAudioThumbnail(@NonNull java.io.File, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method @Deprecated @Nullable public static android.graphics.Bitmap createImageThumbnail(@NonNull String, int);
+    method @NonNull public static android.graphics.Bitmap createImageThumbnail(@NonNull java.io.File, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method @Deprecated @Nullable public static android.graphics.Bitmap createVideoThumbnail(@NonNull String, int);
+    method @NonNull public static android.graphics.Bitmap createVideoThumbnail(@NonNull java.io.File, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method public static android.graphics.Bitmap extractThumbnail(android.graphics.Bitmap, int, int);
+    method public static android.graphics.Bitmap extractThumbnail(android.graphics.Bitmap, int, int, int);
+    field public static final int OPTIONS_RECYCLE_INPUT = 2; // 0x2
+  }
+
+  public final class TimedMetaData {
+    ctor public TimedMetaData(long, @NonNull byte[]);
+    method public byte[] getMetaData();
+    method public long getTimestamp();
+  }
+
+  public final class TimedText {
+    method public android.graphics.Rect getBounds();
+    method public String getText();
+  }
+
+  public class ToneGenerator {
+    ctor public ToneGenerator(int, int);
+    method protected void finalize();
+    method public final int getAudioSessionId();
+    method public void release();
+    method public boolean startTone(int);
+    method public boolean startTone(int, int);
+    method public void stopTone();
+    field public static final int MAX_VOLUME = 100; // 0x64
+    field public static final int MIN_VOLUME = 0; // 0x0
+    field public static final int TONE_CDMA_ABBR_ALERT = 97; // 0x61
+    field public static final int TONE_CDMA_ABBR_INTERCEPT = 37; // 0x25
+    field public static final int TONE_CDMA_ABBR_REORDER = 39; // 0x27
+    field public static final int TONE_CDMA_ALERT_AUTOREDIAL_LITE = 87; // 0x57
+    field public static final int TONE_CDMA_ALERT_CALL_GUARD = 93; // 0x5d
+    field public static final int TONE_CDMA_ALERT_INCALL_LITE = 91; // 0x5b
+    field public static final int TONE_CDMA_ALERT_NETWORK_LITE = 86; // 0x56
+    field public static final int TONE_CDMA_ANSWER = 42; // 0x2a
+    field public static final int TONE_CDMA_CALLDROP_LITE = 95; // 0x5f
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP = 46; // 0x2e
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL = 45; // 0x2d
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 = 48; // 0x30
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 = 50; // 0x32
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 = 51; // 0x33
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 = 52; // 0x34
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING = 49; // 0x31
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI = 47; // 0x2f
+    field public static final int TONE_CDMA_CONFIRM = 41; // 0x29
+    field public static final int TONE_CDMA_DIAL_TONE_LITE = 34; // 0x22
+    field public static final int TONE_CDMA_EMERGENCY_RINGBACK = 92; // 0x5c
+    field public static final int TONE_CDMA_HIGH_L = 53; // 0x35
+    field public static final int TONE_CDMA_HIGH_PBX_L = 71; // 0x47
+    field public static final int TONE_CDMA_HIGH_PBX_SLS = 80; // 0x50
+    field public static final int TONE_CDMA_HIGH_PBX_SS = 74; // 0x4a
+    field public static final int TONE_CDMA_HIGH_PBX_SSL = 77; // 0x4d
+    field public static final int TONE_CDMA_HIGH_PBX_S_X4 = 83; // 0x53
+    field public static final int TONE_CDMA_HIGH_SLS = 65; // 0x41
+    field public static final int TONE_CDMA_HIGH_SS = 56; // 0x38
+    field public static final int TONE_CDMA_HIGH_SSL = 59; // 0x3b
+    field public static final int TONE_CDMA_HIGH_SS_2 = 62; // 0x3e
+    field public static final int TONE_CDMA_HIGH_S_X4 = 68; // 0x44
+    field public static final int TONE_CDMA_INTERCEPT = 36; // 0x24
+    field public static final int TONE_CDMA_KEYPAD_VOLUME_KEY_LITE = 89; // 0x59
+    field public static final int TONE_CDMA_LOW_L = 55; // 0x37
+    field public static final int TONE_CDMA_LOW_PBX_L = 73; // 0x49
+    field public static final int TONE_CDMA_LOW_PBX_SLS = 82; // 0x52
+    field public static final int TONE_CDMA_LOW_PBX_SS = 76; // 0x4c
+    field public static final int TONE_CDMA_LOW_PBX_SSL = 79; // 0x4f
+    field public static final int TONE_CDMA_LOW_PBX_S_X4 = 85; // 0x55
+    field public static final int TONE_CDMA_LOW_SLS = 67; // 0x43
+    field public static final int TONE_CDMA_LOW_SS = 58; // 0x3a
+    field public static final int TONE_CDMA_LOW_SSL = 61; // 0x3d
+    field public static final int TONE_CDMA_LOW_SS_2 = 64; // 0x40
+    field public static final int TONE_CDMA_LOW_S_X4 = 70; // 0x46
+    field public static final int TONE_CDMA_MED_L = 54; // 0x36
+    field public static final int TONE_CDMA_MED_PBX_L = 72; // 0x48
+    field public static final int TONE_CDMA_MED_PBX_SLS = 81; // 0x51
+    field public static final int TONE_CDMA_MED_PBX_SS = 75; // 0x4b
+    field public static final int TONE_CDMA_MED_PBX_SSL = 78; // 0x4e
+    field public static final int TONE_CDMA_MED_PBX_S_X4 = 84; // 0x54
+    field public static final int TONE_CDMA_MED_SLS = 66; // 0x42
+    field public static final int TONE_CDMA_MED_SS = 57; // 0x39
+    field public static final int TONE_CDMA_MED_SSL = 60; // 0x3c
+    field public static final int TONE_CDMA_MED_SS_2 = 63; // 0x3f
+    field public static final int TONE_CDMA_MED_S_X4 = 69; // 0x45
+    field public static final int TONE_CDMA_NETWORK_BUSY = 40; // 0x28
+    field public static final int TONE_CDMA_NETWORK_BUSY_ONE_SHOT = 96; // 0x60
+    field public static final int TONE_CDMA_NETWORK_CALLWAITING = 43; // 0x2b
+    field public static final int TONE_CDMA_NETWORK_USA_RINGBACK = 35; // 0x23
+    field public static final int TONE_CDMA_ONE_MIN_BEEP = 88; // 0x58
+    field public static final int TONE_CDMA_PIP = 44; // 0x2c
+    field public static final int TONE_CDMA_PRESSHOLDKEY_LITE = 90; // 0x5a
+    field public static final int TONE_CDMA_REORDER = 38; // 0x26
+    field public static final int TONE_CDMA_SIGNAL_OFF = 98; // 0x62
+    field public static final int TONE_CDMA_SOFT_ERROR_LITE = 94; // 0x5e
+    field public static final int TONE_DTMF_0 = 0; // 0x0
+    field public static final int TONE_DTMF_1 = 1; // 0x1
+    field public static final int TONE_DTMF_2 = 2; // 0x2
+    field public static final int TONE_DTMF_3 = 3; // 0x3
+    field public static final int TONE_DTMF_4 = 4; // 0x4
+    field public static final int TONE_DTMF_5 = 5; // 0x5
+    field public static final int TONE_DTMF_6 = 6; // 0x6
+    field public static final int TONE_DTMF_7 = 7; // 0x7
+    field public static final int TONE_DTMF_8 = 8; // 0x8
+    field public static final int TONE_DTMF_9 = 9; // 0x9
+    field public static final int TONE_DTMF_A = 12; // 0xc
+    field public static final int TONE_DTMF_B = 13; // 0xd
+    field public static final int TONE_DTMF_C = 14; // 0xe
+    field public static final int TONE_DTMF_D = 15; // 0xf
+    field public static final int TONE_DTMF_P = 11; // 0xb
+    field public static final int TONE_DTMF_S = 10; // 0xa
+    field public static final int TONE_PROP_ACK = 25; // 0x19
+    field public static final int TONE_PROP_BEEP = 24; // 0x18
+    field public static final int TONE_PROP_BEEP2 = 28; // 0x1c
+    field public static final int TONE_PROP_NACK = 26; // 0x1a
+    field public static final int TONE_PROP_PROMPT = 27; // 0x1b
+    field public static final int TONE_SUP_BUSY = 17; // 0x11
+    field public static final int TONE_SUP_CALL_WAITING = 22; // 0x16
+    field public static final int TONE_SUP_CONFIRM = 32; // 0x20
+    field public static final int TONE_SUP_CONGESTION = 18; // 0x12
+    field public static final int TONE_SUP_CONGESTION_ABBREV = 31; // 0x1f
+    field public static final int TONE_SUP_DIAL = 16; // 0x10
+    field public static final int TONE_SUP_ERROR = 21; // 0x15
+    field public static final int TONE_SUP_INTERCEPT = 29; // 0x1d
+    field public static final int TONE_SUP_INTERCEPT_ABBREV = 30; // 0x1e
+    field public static final int TONE_SUP_PIP = 33; // 0x21
+    field public static final int TONE_SUP_RADIO_ACK = 19; // 0x13
+    field public static final int TONE_SUP_RADIO_NOTAVAIL = 20; // 0x14
+    field public static final int TONE_SUP_RINGTONE = 23; // 0x17
+  }
+
+  public final class UnsupportedSchemeException extends android.media.MediaDrmException {
+    ctor public UnsupportedSchemeException(String);
+  }
+
+  public interface VolumeAutomation {
+    method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration);
+  }
+
+  public abstract class VolumeProvider {
+    ctor public VolumeProvider(int, int, int);
+    ctor public VolumeProvider(int, int, int, @Nullable String);
+    method public final int getCurrentVolume();
+    method public final int getMaxVolume();
+    method public final int getVolumeControl();
+    method @Nullable public final String getVolumeControlId();
+    method public void onAdjustVolume(int);
+    method public void onSetVolumeTo(int);
+    method public final void setCurrentVolume(int);
+    field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+    field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+    field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+  }
+
+  public final class VolumeShaper implements java.lang.AutoCloseable {
+    method public void apply(@NonNull android.media.VolumeShaper.Operation);
+    method public void close();
+    method protected void finalize();
+    method public float getVolume();
+    method public void replace(@NonNull android.media.VolumeShaper.Configuration, @NonNull android.media.VolumeShaper.Operation, boolean);
+  }
+
+  public static final class VolumeShaper.Configuration implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getDuration();
+    method public int getInterpolatorType();
+    method public static int getMaximumCurvePoints();
+    method public float[] getTimes();
+    method public float[] getVolumes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.VolumeShaper.Configuration> CREATOR;
+    field public static final android.media.VolumeShaper.Configuration CUBIC_RAMP;
+    field public static final int INTERPOLATOR_TYPE_CUBIC = 2; // 0x2
+    field public static final int INTERPOLATOR_TYPE_CUBIC_MONOTONIC = 3; // 0x3
+    field public static final int INTERPOLATOR_TYPE_LINEAR = 1; // 0x1
+    field public static final int INTERPOLATOR_TYPE_STEP = 0; // 0x0
+    field public static final android.media.VolumeShaper.Configuration LINEAR_RAMP;
+    field public static final android.media.VolumeShaper.Configuration SCURVE_RAMP;
+    field public static final android.media.VolumeShaper.Configuration SINE_RAMP;
+  }
+
+  public static final class VolumeShaper.Configuration.Builder {
+    ctor public VolumeShaper.Configuration.Builder();
+    ctor public VolumeShaper.Configuration.Builder(@NonNull android.media.VolumeShaper.Configuration);
+    method @NonNull public android.media.VolumeShaper.Configuration build();
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder invertVolumes();
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder reflectTimes();
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder scaleToEndVolume(float);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder scaleToStartVolume(float);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setCurve(@NonNull float[], @NonNull float[]);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setDuration(long);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setInterpolatorType(int);
+  }
+
+  public static final class VolumeShaper.Operation implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.VolumeShaper.Operation> CREATOR;
+    field public static final android.media.VolumeShaper.Operation PLAY;
+    field public static final android.media.VolumeShaper.Operation REVERSE;
+  }
+
+}
+
+package android.media.audiofx {
+
+  public class AcousticEchoCanceler extends android.media.audiofx.AudioEffect {
+    method public static android.media.audiofx.AcousticEchoCanceler create(int);
+    method public static boolean isAvailable();
+  }
+
+  public class AudioEffect {
+    method protected void finalize();
+    method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
+    method public boolean getEnabled() throws java.lang.IllegalStateException;
+    method public int getId() throws java.lang.IllegalStateException;
+    method public boolean hasControl() throws java.lang.IllegalStateException;
+    method public static android.media.audiofx.AudioEffect.Descriptor[] queryEffects();
+    method public void release();
+    method public void setControlStatusListener(android.media.audiofx.AudioEffect.OnControlStatusChangeListener);
+    method public void setEnableStatusListener(android.media.audiofx.AudioEffect.OnEnableStatusChangeListener);
+    method public int setEnabled(boolean) throws java.lang.IllegalStateException;
+    field public static final String ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION = "android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION";
+    field public static final String ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL = "android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL";
+    field public static final String ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION = "android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION";
+    field public static final int ALREADY_EXISTS = -2; // 0xfffffffe
+    field public static final int CONTENT_TYPE_GAME = 2; // 0x2
+    field public static final int CONTENT_TYPE_MOVIE = 1; // 0x1
+    field public static final int CONTENT_TYPE_MUSIC = 0; // 0x0
+    field public static final int CONTENT_TYPE_VOICE = 3; // 0x3
+    field public static final String EFFECT_AUXILIARY = "Auxiliary";
+    field public static final String EFFECT_INSERT = "Insert";
+    field public static final String EFFECT_POST_PROCESSING = "Post Processing";
+    field public static final String EFFECT_PRE_PROCESSING = "Pre Processing";
+    field public static final java.util.UUID EFFECT_TYPE_AEC;
+    field public static final java.util.UUID EFFECT_TYPE_AGC;
+    field public static final java.util.UUID EFFECT_TYPE_BASS_BOOST;
+    field public static final java.util.UUID EFFECT_TYPE_DYNAMICS_PROCESSING;
+    field public static final java.util.UUID EFFECT_TYPE_ENV_REVERB;
+    field public static final java.util.UUID EFFECT_TYPE_EQUALIZER;
+    field @NonNull public static final java.util.UUID EFFECT_TYPE_HAPTIC_GENERATOR;
+    field public static final java.util.UUID EFFECT_TYPE_LOUDNESS_ENHANCER;
+    field public static final java.util.UUID EFFECT_TYPE_NS;
+    field public static final java.util.UUID EFFECT_TYPE_PRESET_REVERB;
+    field public static final java.util.UUID EFFECT_TYPE_VIRTUALIZER;
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -4; // 0xfffffffc
+    field public static final int ERROR_DEAD_OBJECT = -7; // 0xfffffff9
+    field public static final int ERROR_INVALID_OPERATION = -5; // 0xfffffffb
+    field public static final int ERROR_NO_INIT = -3; // 0xfffffffd
+    field public static final int ERROR_NO_MEMORY = -6; // 0xfffffffa
+    field public static final String EXTRA_AUDIO_SESSION = "android.media.extra.AUDIO_SESSION";
+    field public static final String EXTRA_CONTENT_TYPE = "android.media.extra.CONTENT_TYPE";
+    field public static final String EXTRA_PACKAGE_NAME = "android.media.extra.PACKAGE_NAME";
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static class AudioEffect.Descriptor {
+    ctor public AudioEffect.Descriptor();
+    ctor public AudioEffect.Descriptor(String, String, String, String, String);
+    field public String connectMode;
+    field public String implementor;
+    field public String name;
+    field public java.util.UUID type;
+    field public java.util.UUID uuid;
+  }
+
+  public static interface AudioEffect.OnControlStatusChangeListener {
+    method public void onControlStatusChange(android.media.audiofx.AudioEffect, boolean);
+  }
+
+  public static interface AudioEffect.OnEnableStatusChangeListener {
+    method public void onEnableStatusChange(android.media.audiofx.AudioEffect, boolean);
+  }
+
+  public class AutomaticGainControl extends android.media.audiofx.AudioEffect {
+    method public static android.media.audiofx.AutomaticGainControl create(int);
+    method public static boolean isAvailable();
+  }
+
+  public class BassBoost extends android.media.audiofx.AudioEffect {
+    ctor public BassBoost(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.BassBoost.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoundedStrength() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean getStrengthSupported();
+    method public void setParameterListener(android.media.audiofx.BassBoost.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.BassBoost.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setStrength(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_STRENGTH = 1; // 0x1
+    field public static final int PARAM_STRENGTH_SUPPORTED = 0; // 0x0
+  }
+
+  public static interface BassBoost.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.BassBoost, int, int, short);
+  }
+
+  public static class BassBoost.Settings {
+    ctor public BassBoost.Settings();
+    ctor public BassBoost.Settings(String);
+    field public short strength;
+  }
+
+  public final class DynamicsProcessing extends android.media.audiofx.AudioEffect {
+    ctor public DynamicsProcessing(int);
+    ctor public DynamicsProcessing(int, int, @Nullable android.media.audiofx.DynamicsProcessing.Config);
+    method public android.media.audiofx.DynamicsProcessing.Channel getChannelByChannelIndex(int);
+    method public int getChannelCount();
+    method public android.media.audiofx.DynamicsProcessing.Config getConfig();
+    method public float getInputGainByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiterByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBandByChannelIndex(int, int);
+    method public android.media.audiofx.DynamicsProcessing.Mbc getMbcByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBandByChannelIndex(int, int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPostEqByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBandByChannelIndex(int, int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPreEqByChannelIndex(int);
+    method public void setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setInputGainAllChannelsTo(float);
+    method public void setInputGainbyChannel(int, float);
+    method public void setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setMbcBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPostEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    field public static final int VARIANT_FAVOR_FREQUENCY_RESOLUTION = 0; // 0x0
+    field public static final int VARIANT_FAVOR_TIME_RESOLUTION = 1; // 0x1
+  }
+
+  public static class DynamicsProcessing.BandBase {
+    ctor public DynamicsProcessing.BandBase(boolean, float);
+    method public float getCutoffFrequency();
+    method public boolean isEnabled();
+    method public void setCutoffFrequency(float);
+    method public void setEnabled(boolean);
+  }
+
+  public static class DynamicsProcessing.BandStage extends android.media.audiofx.DynamicsProcessing.Stage {
+    ctor public DynamicsProcessing.BandStage(boolean, boolean, int);
+    method public int getBandCount();
+  }
+
+  public static final class DynamicsProcessing.Channel {
+    ctor public DynamicsProcessing.Channel(float, boolean, int, boolean, int, boolean, int, boolean);
+    ctor public DynamicsProcessing.Channel(android.media.audiofx.DynamicsProcessing.Channel);
+    method public float getInputGain();
+    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiter();
+    method public android.media.audiofx.DynamicsProcessing.Mbc getMbc();
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBand(int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPostEq();
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBand(int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPreEq();
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBand(int);
+    method public void setInputGain(float);
+    method public void setLimiter(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setMbc(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setMbcBand(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setPostEq(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPostEqBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEq(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
+  }
+
+  public static final class DynamicsProcessing.Config {
+    method public android.media.audiofx.DynamicsProcessing.Channel getChannelByChannelIndex(int);
+    method public float getInputGainByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiterByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBandByChannelIndex(int, int);
+    method public int getMbcBandCount();
+    method public android.media.audiofx.DynamicsProcessing.Mbc getMbcByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBandByChannelIndex(int, int);
+    method public int getPostEqBandCount();
+    method public android.media.audiofx.DynamicsProcessing.Eq getPostEqByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBandByChannelIndex(int, int);
+    method public int getPreEqBandCount();
+    method public android.media.audiofx.DynamicsProcessing.Eq getPreEqByChannelIndex(int);
+    method public float getPreferredFrameDuration();
+    method public int getVariant();
+    method public boolean isLimiterInUse();
+    method public boolean isMbcInUse();
+    method public boolean isPostEqInUse();
+    method public boolean isPreEqInUse();
+    method public void setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setInputGainAllChannelsTo(float);
+    method public void setInputGainByChannelIndex(int, float);
+    method public void setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setMbcBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPostEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+  }
+
+  public static final class DynamicsProcessing.Config.Builder {
+    ctor public DynamicsProcessing.Config.Builder(int, int, boolean, int, boolean, int, boolean, int, boolean);
+    method public android.media.audiofx.DynamicsProcessing.Config build();
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setInputGainAllChannelsTo(float);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setInputGainByChannelIndex(int, float);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreferredFrameDuration(float);
+  }
+
+  public static final class DynamicsProcessing.Eq extends android.media.audiofx.DynamicsProcessing.BandStage {
+    ctor public DynamicsProcessing.Eq(boolean, boolean, int);
+    ctor public DynamicsProcessing.Eq(android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getBand(int);
+    method public void setBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
+  }
+
+  public static final class DynamicsProcessing.EqBand extends android.media.audiofx.DynamicsProcessing.BandBase {
+    ctor public DynamicsProcessing.EqBand(boolean, float, float);
+    ctor public DynamicsProcessing.EqBand(android.media.audiofx.DynamicsProcessing.EqBand);
+    method public float getGain();
+    method public void setGain(float);
+  }
+
+  public static final class DynamicsProcessing.Limiter extends android.media.audiofx.DynamicsProcessing.Stage {
+    ctor public DynamicsProcessing.Limiter(boolean, boolean, int, float, float, float, float, float);
+    ctor public DynamicsProcessing.Limiter(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public float getAttackTime();
+    method public int getLinkGroup();
+    method public float getPostGain();
+    method public float getRatio();
+    method public float getReleaseTime();
+    method public float getThreshold();
+    method public void setAttackTime(float);
+    method public void setLinkGroup(int);
+    method public void setPostGain(float);
+    method public void setRatio(float);
+    method public void setReleaseTime(float);
+    method public void setThreshold(float);
+  }
+
+  public static final class DynamicsProcessing.Mbc extends android.media.audiofx.DynamicsProcessing.BandStage {
+    ctor public DynamicsProcessing.Mbc(boolean, boolean, int);
+    ctor public DynamicsProcessing.Mbc(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getBand(int);
+    method public void setBand(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+  }
+
+  public static final class DynamicsProcessing.MbcBand extends android.media.audiofx.DynamicsProcessing.BandBase {
+    ctor public DynamicsProcessing.MbcBand(boolean, float, float, float, float, float, float, float, float, float, float);
+    ctor public DynamicsProcessing.MbcBand(android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public float getAttackTime();
+    method public float getExpanderRatio();
+    method public float getKneeWidth();
+    method public float getNoiseGateThreshold();
+    method public float getPostGain();
+    method public float getPreGain();
+    method public float getRatio();
+    method public float getReleaseTime();
+    method public float getThreshold();
+    method public void setAttackTime(float);
+    method public void setExpanderRatio(float);
+    method public void setKneeWidth(float);
+    method public void setNoiseGateThreshold(float);
+    method public void setPostGain(float);
+    method public void setPreGain(float);
+    method public void setRatio(float);
+    method public void setReleaseTime(float);
+    method public void setThreshold(float);
+  }
+
+  public static class DynamicsProcessing.Stage {
+    ctor public DynamicsProcessing.Stage(boolean, boolean);
+    method public boolean isEnabled();
+    method public boolean isInUse();
+    method public void setEnabled(boolean);
+  }
+
+  public class EnvironmentalReverb extends android.media.audiofx.AudioEffect {
+    ctor public EnvironmentalReverb(int, int) throws java.lang.IllegalArgumentException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public short getDecayHFRatio() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getDecayTime() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getDensity() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getDiffusion() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.EnvironmentalReverb.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getReflectionsDelay() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getReflectionsLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getReverbDelay() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getReverbLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoomHFLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoomLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDecayHFRatio(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDecayTime(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDensity(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDiffusion(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.EnvironmentalReverb.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.EnvironmentalReverb.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReflectionsDelay(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReflectionsLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReverbDelay(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReverbLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setRoomHFLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setRoomLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_DECAY_HF_RATIO = 3; // 0x3
+    field public static final int PARAM_DECAY_TIME = 2; // 0x2
+    field public static final int PARAM_DENSITY = 9; // 0x9
+    field public static final int PARAM_DIFFUSION = 8; // 0x8
+    field public static final int PARAM_REFLECTIONS_DELAY = 5; // 0x5
+    field public static final int PARAM_REFLECTIONS_LEVEL = 4; // 0x4
+    field public static final int PARAM_REVERB_DELAY = 7; // 0x7
+    field public static final int PARAM_REVERB_LEVEL = 6; // 0x6
+    field public static final int PARAM_ROOM_HF_LEVEL = 1; // 0x1
+    field public static final int PARAM_ROOM_LEVEL = 0; // 0x0
+  }
+
+  public static interface EnvironmentalReverb.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.EnvironmentalReverb, int, int, int);
+  }
+
+  public static class EnvironmentalReverb.Settings {
+    ctor public EnvironmentalReverb.Settings();
+    ctor public EnvironmentalReverb.Settings(String);
+    field public short decayHFRatio;
+    field public int decayTime;
+    field public short density;
+    field public short diffusion;
+    field public int reflectionsDelay;
+    field public short reflectionsLevel;
+    field public int reverbDelay;
+    field public short reverbLevel;
+    field public short roomHFLevel;
+    field public short roomLevel;
+  }
+
+  public class Equalizer extends android.media.audiofx.AudioEffect {
+    ctor public Equalizer(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public short getBand(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int[] getBandFreqRange(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getBandLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short[] getBandLevelRange() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getCenterFreq(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getCurrentPreset() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getNumberOfBands() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getNumberOfPresets() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public String getPresetName(short);
+    method public android.media.audiofx.Equalizer.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setBandLevel(short, short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.Equalizer.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.Equalizer.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void usePreset(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_BAND_FREQ_RANGE = 4; // 0x4
+    field public static final int PARAM_BAND_LEVEL = 2; // 0x2
+    field public static final int PARAM_CENTER_FREQ = 3; // 0x3
+    field public static final int PARAM_CURRENT_PRESET = 6; // 0x6
+    field public static final int PARAM_GET_BAND = 5; // 0x5
+    field public static final int PARAM_GET_NUM_OF_PRESETS = 7; // 0x7
+    field public static final int PARAM_GET_PRESET_NAME = 8; // 0x8
+    field public static final int PARAM_LEVEL_RANGE = 1; // 0x1
+    field public static final int PARAM_NUM_BANDS = 0; // 0x0
+    field public static final int PARAM_STRING_SIZE_MAX = 32; // 0x20
+  }
+
+  public static interface Equalizer.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.Equalizer, int, int, int, int);
+  }
+
+  public static class Equalizer.Settings {
+    ctor public Equalizer.Settings();
+    ctor public Equalizer.Settings(String);
+    field public short[] bandLevels;
+    field public short curPreset;
+    field public short numBands;
+  }
+
+  public class HapticGenerator extends android.media.audiofx.AudioEffect implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public static android.media.audiofx.HapticGenerator create(int);
+    method public static boolean isAvailable();
+    method public int setEnabled(boolean);
+  }
+
+  public class LoudnessEnhancer extends android.media.audiofx.AudioEffect {
+    ctor public LoudnessEnhancer(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public float getTargetGain() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setTargetGain(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_TARGET_GAIN_MB = 0; // 0x0
+  }
+
+  public class NoiseSuppressor extends android.media.audiofx.AudioEffect {
+    method public static android.media.audiofx.NoiseSuppressor create(int);
+    method public static boolean isAvailable();
+  }
+
+  public class PresetReverb extends android.media.audiofx.AudioEffect {
+    ctor public PresetReverb(int, int) throws java.lang.IllegalArgumentException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public short getPreset() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.PresetReverb.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.PresetReverb.OnParameterChangeListener);
+    method public void setPreset(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setProperties(android.media.audiofx.PresetReverb.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_PRESET = 0; // 0x0
+    field public static final short PRESET_LARGEHALL = 5; // 0x5
+    field public static final short PRESET_LARGEROOM = 3; // 0x3
+    field public static final short PRESET_MEDIUMHALL = 4; // 0x4
+    field public static final short PRESET_MEDIUMROOM = 2; // 0x2
+    field public static final short PRESET_NONE = 0; // 0x0
+    field public static final short PRESET_PLATE = 6; // 0x6
+    field public static final short PRESET_SMALLROOM = 1; // 0x1
+  }
+
+  public static interface PresetReverb.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.PresetReverb, int, int, short);
+  }
+
+  public static class PresetReverb.Settings {
+    ctor public PresetReverb.Settings();
+    ctor public PresetReverb.Settings(String);
+    field public short preset;
+  }
+
+  public class Virtualizer extends android.media.audiofx.AudioEffect {
+    ctor public Virtualizer(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public boolean canVirtualize(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean forceVirtualizationMode(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.Virtualizer.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoundedStrength() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean getSpeakerAngles(int, int, int[]) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean getStrengthSupported();
+    method public int getVirtualizationMode() throws java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.Virtualizer.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.Virtualizer.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setStrength(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_STRENGTH = 1; // 0x1
+    field public static final int PARAM_STRENGTH_SUPPORTED = 0; // 0x0
+    field public static final int VIRTUALIZATION_MODE_AUTO = 1; // 0x1
+    field public static final int VIRTUALIZATION_MODE_BINAURAL = 2; // 0x2
+    field public static final int VIRTUALIZATION_MODE_OFF = 0; // 0x0
+    field public static final int VIRTUALIZATION_MODE_TRANSAURAL = 3; // 0x3
+  }
+
+  public static interface Virtualizer.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.Virtualizer, int, int, short);
+  }
+
+  public static class Virtualizer.Settings {
+    ctor public Virtualizer.Settings();
+    ctor public Virtualizer.Settings(String);
+    field public short strength;
+  }
+
+  public class Visualizer {
+    ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method protected void finalize();
+    method public int getCaptureSize() throws java.lang.IllegalStateException;
+    method public static int[] getCaptureSizeRange();
+    method public boolean getEnabled();
+    method public int getFft(byte[]) throws java.lang.IllegalStateException;
+    method public static int getMaxCaptureRate();
+    method public int getMeasurementMode() throws java.lang.IllegalStateException;
+    method public int getMeasurementPeakRms(android.media.audiofx.Visualizer.MeasurementPeakRms);
+    method public int getSamplingRate() throws java.lang.IllegalStateException;
+    method public int getScalingMode() throws java.lang.IllegalStateException;
+    method public int getWaveForm(byte[]) throws java.lang.IllegalStateException;
+    method public void release();
+    method public int setCaptureSize(int) throws java.lang.IllegalStateException;
+    method public int setDataCaptureListener(android.media.audiofx.Visualizer.OnDataCaptureListener, int, boolean, boolean);
+    method public int setEnabled(boolean) throws java.lang.IllegalStateException;
+    method public int setMeasurementMode(int) throws java.lang.IllegalStateException;
+    method public int setScalingMode(int) throws java.lang.IllegalStateException;
+    field public static final int ALREADY_EXISTS = -2; // 0xfffffffe
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -4; // 0xfffffffc
+    field public static final int ERROR_DEAD_OBJECT = -7; // 0xfffffff9
+    field public static final int ERROR_INVALID_OPERATION = -5; // 0xfffffffb
+    field public static final int ERROR_NO_INIT = -3; // 0xfffffffd
+    field public static final int ERROR_NO_MEMORY = -6; // 0xfffffffa
+    field public static final int MEASUREMENT_MODE_NONE = 0; // 0x0
+    field public static final int MEASUREMENT_MODE_PEAK_RMS = 1; // 0x1
+    field public static final int SCALING_MODE_AS_PLAYED = 1; // 0x1
+    field public static final int SCALING_MODE_NORMALIZED = 0; // 0x0
+    field public static final int STATE_ENABLED = 2; // 0x2
+    field public static final int STATE_INITIALIZED = 1; // 0x1
+    field public static final int STATE_UNINITIALIZED = 0; // 0x0
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static final class Visualizer.MeasurementPeakRms {
+    ctor public Visualizer.MeasurementPeakRms();
+    field public int mPeak;
+    field public int mRms;
+  }
+
+  public static interface Visualizer.OnDataCaptureListener {
+    method public void onFftDataCapture(android.media.audiofx.Visualizer, byte[], int);
+    method public void onWaveFormDataCapture(android.media.audiofx.Visualizer, byte[], int);
+  }
+
+}
+
+package android.media.browse {
+
+  public final class MediaBrowser {
+    ctor public MediaBrowser(android.content.Context, android.content.ComponentName, android.media.browse.MediaBrowser.ConnectionCallback, android.os.Bundle);
+    method public void connect();
+    method public void disconnect();
+    method @Nullable public android.os.Bundle getExtras();
+    method public void getItem(@NonNull String, @NonNull android.media.browse.MediaBrowser.ItemCallback);
+    method @NonNull public String getRoot();
+    method @NonNull public android.content.ComponentName getServiceComponent();
+    method @NonNull public android.media.session.MediaSession.Token getSessionToken();
+    method public boolean isConnected();
+    method public void subscribe(@NonNull String, @NonNull android.media.browse.MediaBrowser.SubscriptionCallback);
+    method public void subscribe(@NonNull String, @NonNull android.os.Bundle, @NonNull android.media.browse.MediaBrowser.SubscriptionCallback);
+    method public void unsubscribe(@NonNull String);
+    method public void unsubscribe(@NonNull String, @NonNull android.media.browse.MediaBrowser.SubscriptionCallback);
+    field public static final String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+    field public static final String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+  }
+
+  public static class MediaBrowser.ConnectionCallback {
+    ctor public MediaBrowser.ConnectionCallback();
+    method public void onConnected();
+    method public void onConnectionFailed();
+    method public void onConnectionSuspended();
+  }
+
+  public abstract static class MediaBrowser.ItemCallback {
+    ctor public MediaBrowser.ItemCallback();
+    method public void onError(@NonNull String);
+    method public void onItemLoaded(android.media.browse.MediaBrowser.MediaItem);
+  }
+
+  public static class MediaBrowser.MediaItem implements android.os.Parcelable {
+    ctor public MediaBrowser.MediaItem(@NonNull android.media.MediaDescription, int);
+    method public int describeContents();
+    method @NonNull public android.media.MediaDescription getDescription();
+    method public int getFlags();
+    method @Nullable public String getMediaId();
+    method public boolean isBrowsable();
+    method public boolean isPlayable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.browse.MediaBrowser.MediaItem> CREATOR;
+    field public static final int FLAG_BROWSABLE = 1; // 0x1
+    field public static final int FLAG_PLAYABLE = 2; // 0x2
+  }
+
+  public abstract static class MediaBrowser.SubscriptionCallback {
+    ctor public MediaBrowser.SubscriptionCallback();
+    method public void onChildrenLoaded(@NonNull String, @NonNull java.util.List<android.media.browse.MediaBrowser.MediaItem>);
+    method public void onChildrenLoaded(@NonNull String, @NonNull java.util.List<android.media.browse.MediaBrowser.MediaItem>, @NonNull android.os.Bundle);
+    method public void onError(@NonNull String);
+    method public void onError(@NonNull String, @NonNull android.os.Bundle);
+  }
+
+}
+
+package android.media.effect {
+
+  public abstract class Effect {
+    ctor public Effect();
+    method public abstract void apply(int, int, int, int);
+    method public abstract String getName();
+    method public abstract void release();
+    method public abstract void setParameter(String, Object);
+    method public void setUpdateListener(android.media.effect.EffectUpdateListener);
+  }
+
+  public class EffectContext {
+    method public static android.media.effect.EffectContext createWithCurrentGlContext();
+    method public android.media.effect.EffectFactory getFactory();
+    method public void release();
+  }
+
+  public class EffectFactory {
+    method public android.media.effect.Effect createEffect(String);
+    method public static boolean isEffectSupported(String);
+    field public static final String EFFECT_AUTOFIX = "android.media.effect.effects.AutoFixEffect";
+    field public static final String EFFECT_BACKDROPPER = "android.media.effect.effects.BackDropperEffect";
+    field public static final String EFFECT_BITMAPOVERLAY = "android.media.effect.effects.BitmapOverlayEffect";
+    field public static final String EFFECT_BLACKWHITE = "android.media.effect.effects.BlackWhiteEffect";
+    field public static final String EFFECT_BRIGHTNESS = "android.media.effect.effects.BrightnessEffect";
+    field public static final String EFFECT_CONTRAST = "android.media.effect.effects.ContrastEffect";
+    field public static final String EFFECT_CROP = "android.media.effect.effects.CropEffect";
+    field public static final String EFFECT_CROSSPROCESS = "android.media.effect.effects.CrossProcessEffect";
+    field public static final String EFFECT_DOCUMENTARY = "android.media.effect.effects.DocumentaryEffect";
+    field public static final String EFFECT_DUOTONE = "android.media.effect.effects.DuotoneEffect";
+    field public static final String EFFECT_FILLLIGHT = "android.media.effect.effects.FillLightEffect";
+    field public static final String EFFECT_FISHEYE = "android.media.effect.effects.FisheyeEffect";
+    field public static final String EFFECT_FLIP = "android.media.effect.effects.FlipEffect";
+    field public static final String EFFECT_GRAIN = "android.media.effect.effects.GrainEffect";
+    field public static final String EFFECT_GRAYSCALE = "android.media.effect.effects.GrayscaleEffect";
+    field public static final String EFFECT_LOMOISH = "android.media.effect.effects.LomoishEffect";
+    field public static final String EFFECT_NEGATIVE = "android.media.effect.effects.NegativeEffect";
+    field public static final String EFFECT_POSTERIZE = "android.media.effect.effects.PosterizeEffect";
+    field public static final String EFFECT_REDEYE = "android.media.effect.effects.RedEyeEffect";
+    field public static final String EFFECT_ROTATE = "android.media.effect.effects.RotateEffect";
+    field public static final String EFFECT_SATURATE = "android.media.effect.effects.SaturateEffect";
+    field public static final String EFFECT_SEPIA = "android.media.effect.effects.SepiaEffect";
+    field public static final String EFFECT_SHARPEN = "android.media.effect.effects.SharpenEffect";
+    field public static final String EFFECT_STRAIGHTEN = "android.media.effect.effects.StraightenEffect";
+    field public static final String EFFECT_TEMPERATURE = "android.media.effect.effects.ColorTemperatureEffect";
+    field public static final String EFFECT_TINT = "android.media.effect.effects.TintEffect";
+    field public static final String EFFECT_VIGNETTE = "android.media.effect.effects.VignetteEffect";
+  }
+
+  public interface EffectUpdateListener {
+    method public void onEffectUpdated(android.media.effect.Effect, Object);
+  }
+
+}
+
+package android.media.metrics {
+
+  public abstract class Event {
+    method @NonNull public android.os.Bundle getMetricsBundle();
+    method @IntRange(from=0xffffffff) public long getTimeSinceCreatedMillis();
+  }
+
+  public final class LogSessionId {
+    method @NonNull public String getStringId();
+    field @NonNull public static final android.media.metrics.LogSessionId LOG_SESSION_ID_NONE;
+  }
+
+  public final class MediaMetricsManager {
+    method @NonNull public android.media.metrics.PlaybackSession createPlaybackSession();
+    method @NonNull public android.media.metrics.RecordingSession createRecordingSession();
+    field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL
+  }
+
+  public final class NetworkEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getNetworkType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.NetworkEvent> CREATOR;
+    field public static final int NETWORK_TYPE_2G = 4; // 0x4
+    field public static final int NETWORK_TYPE_3G = 5; // 0x5
+    field public static final int NETWORK_TYPE_4G = 6; // 0x6
+    field public static final int NETWORK_TYPE_5G_NSA = 7; // 0x7
+    field public static final int NETWORK_TYPE_5G_SA = 8; // 0x8
+    field public static final int NETWORK_TYPE_ETHERNET = 3; // 0x3
+    field public static final int NETWORK_TYPE_OFFLINE = 9; // 0x9
+    field public static final int NETWORK_TYPE_OTHER = 1; // 0x1
+    field public static final int NETWORK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int NETWORK_TYPE_WIFI = 2; // 0x2
+  }
+
+  public static final class NetworkEvent.Builder {
+    ctor public NetworkEvent.Builder();
+    method @NonNull public android.media.metrics.NetworkEvent build();
+    method @NonNull public android.media.metrics.NetworkEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.NetworkEvent.Builder setNetworkType(int);
+    method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+  }
+
+  public final class PlaybackErrorEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getErrorCode();
+    method @IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) public int getSubErrorCode();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackErrorEvent> CREATOR;
+    field public static final int ERROR_AUDIO_TRACK_INIT_FAILED = 17; // 0x11
+    field public static final int ERROR_AUDIO_TRACK_OTHER = 19; // 0x13
+    field public static final int ERROR_AUDIO_TRACK_WRITE_FAILED = 18; // 0x12
+    field public static final int ERROR_DECODER_INIT_FAILED = 13; // 0xd
+    field public static final int ERROR_DECODING_FAILED = 14; // 0xe
+    field public static final int ERROR_DECODING_FORMAT_EXCEEDS_CAPABILITIES = 15; // 0xf
+    field public static final int ERROR_DECODING_FORMAT_UNSUPPORTED = 35; // 0x23
+    field public static final int ERROR_DECODING_OTHER = 16; // 0x10
+    field public static final int ERROR_DRM_CONTENT_ERROR = 28; // 0x1c
+    field public static final int ERROR_DRM_DEVICE_REVOKED = 29; // 0x1d
+    field public static final int ERROR_DRM_DISALLOWED_OPERATION = 26; // 0x1a
+    field public static final int ERROR_DRM_LICENSE_ACQUISITION_FAILED = 25; // 0x19
+    field public static final int ERROR_DRM_OTHER = 30; // 0x1e
+    field public static final int ERROR_DRM_PROVISIONING_FAILED = 24; // 0x18
+    field public static final int ERROR_DRM_SCHEME_UNSUPPORTED = 23; // 0x17
+    field public static final int ERROR_DRM_SYSTEM_ERROR = 27; // 0x1b
+    field public static final int ERROR_IO_BAD_HTTP_STATUS = 5; // 0x5
+    field public static final int ERROR_IO_CONNECTION_CLOSED = 8; // 0x8
+    field public static final int ERROR_IO_CONNECTION_TIMEOUT = 7; // 0x7
+    field public static final int ERROR_IO_DNS_FAILED = 6; // 0x6
+    field public static final int ERROR_IO_FILE_NOT_FOUND = 31; // 0x1f
+    field public static final int ERROR_IO_NETWORK_CONNECTION_FAILED = 4; // 0x4
+    field public static final int ERROR_IO_NETWORK_UNAVAILABLE = 3; // 0x3
+    field public static final int ERROR_IO_NO_PERMISSION = 32; // 0x20
+    field public static final int ERROR_IO_OTHER = 9; // 0x9
+    field public static final int ERROR_OTHER = 1; // 0x1
+    field public static final int ERROR_PARSING_CONTAINER_MALFORMED = 11; // 0xb
+    field public static final int ERROR_PARSING_CONTAINER_UNSUPPORTED = 34; // 0x22
+    field public static final int ERROR_PARSING_MANIFEST_MALFORMED = 10; // 0xa
+    field public static final int ERROR_PARSING_MANIFEST_UNSUPPORTED = 33; // 0x21
+    field public static final int ERROR_PARSING_OTHER = 12; // 0xc
+    field public static final int ERROR_PLAYER_BEHIND_LIVE_WINDOW = 21; // 0x15
+    field public static final int ERROR_PLAYER_OTHER = 22; // 0x16
+    field public static final int ERROR_PLAYER_REMOTE = 20; // 0x14
+    field public static final int ERROR_RUNTIME = 2; // 0x2
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class PlaybackErrorEvent.Builder {
+    ctor public PlaybackErrorEvent.Builder();
+    method @NonNull public android.media.metrics.PlaybackErrorEvent build();
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setErrorCode(int);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setException(@NonNull Exception);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setSubErrorCode(@IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+  }
+
+  public final class PlaybackMetrics implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getAudioUnderrunCount();
+    method public int getContentType();
+    method @NonNull public byte[] getDrmSessionId();
+    method public int getDrmType();
+    method @NonNull public long[] getExperimentIds();
+    method @IntRange(from=0xffffffff) public long getLocalBytesRead();
+    method @IntRange(from=0xffffffff) public long getMediaDurationMillis();
+    method @NonNull public android.os.Bundle getMetricsBundle();
+    method @IntRange(from=0xffffffff) public long getNetworkBytesRead();
+    method @IntRange(from=0xffffffff) public long getNetworkTransferDurationMillis();
+    method public int getPlaybackType();
+    method @Nullable public String getPlayerName();
+    method @Nullable public String getPlayerVersion();
+    method public int getStreamSource();
+    method public int getStreamType();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getVideoFramesDropped();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getVideoFramesPlayed();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONTENT_TYPE_AD = 2; // 0x2
+    field public static final int CONTENT_TYPE_MAIN = 1; // 0x1
+    field public static final int CONTENT_TYPE_OTHER = 3; // 0x3
+    field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackMetrics> CREATOR;
+    field public static final int DRM_TYPE_CLEARKEY = 6; // 0x6
+    field public static final int DRM_TYPE_NONE = 0; // 0x0
+    field public static final int DRM_TYPE_OTHER = 1; // 0x1
+    field public static final int DRM_TYPE_PLAY_READY = 2; // 0x2
+    field public static final int DRM_TYPE_WIDEVINE_L1 = 3; // 0x3
+    field public static final int DRM_TYPE_WIDEVINE_L3 = 4; // 0x4
+    field public static final int DRM_TYPE_WV_L3_FALLBACK = 5; // 0x5
+    field public static final int PLAYBACK_TYPE_LIVE = 2; // 0x2
+    field public static final int PLAYBACK_TYPE_OTHER = 3; // 0x3
+    field public static final int PLAYBACK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int PLAYBACK_TYPE_VOD = 1; // 0x1
+    field public static final int STREAM_SOURCE_DEVICE = 2; // 0x2
+    field public static final int STREAM_SOURCE_MIXED = 3; // 0x3
+    field public static final int STREAM_SOURCE_NETWORK = 1; // 0x1
+    field public static final int STREAM_SOURCE_UNKNOWN = 0; // 0x0
+    field public static final int STREAM_TYPE_DASH = 3; // 0x3
+    field public static final int STREAM_TYPE_HLS = 4; // 0x4
+    field public static final int STREAM_TYPE_OTHER = 1; // 0x1
+    field public static final int STREAM_TYPE_PROGRESSIVE = 2; // 0x2
+    field public static final int STREAM_TYPE_SS = 5; // 0x5
+    field public static final int STREAM_TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class PlaybackMetrics.Builder {
+    ctor public PlaybackMetrics.Builder();
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder addExperimentId(long);
+    method @NonNull public android.media.metrics.PlaybackMetrics build();
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setAudioUnderrunCount(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setContentType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setDrmSessionId(@NonNull byte[]);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setDrmType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setLocalBytesRead(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setMediaDurationMillis(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setNetworkBytesRead(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setNetworkTransferDurationMillis(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlaybackType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlayerName(@NonNull String);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlayerVersion(@NonNull String);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setStreamSource(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setStreamType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setVideoFramesDropped(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setVideoFramesPlayed(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+  }
+
+  public final class PlaybackSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public android.media.metrics.LogSessionId getSessionId();
+    method public void reportNetworkEvent(@NonNull android.media.metrics.NetworkEvent);
+    method public void reportPlaybackErrorEvent(@NonNull android.media.metrics.PlaybackErrorEvent);
+    method public void reportPlaybackMetrics(@NonNull android.media.metrics.PlaybackMetrics);
+    method public void reportPlaybackStateEvent(@NonNull android.media.metrics.PlaybackStateEvent);
+    method public void reportTrackChangeEvent(@NonNull android.media.metrics.TrackChangeEvent);
+  }
+
+  public final class PlaybackStateEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getState();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackStateEvent> CREATOR;
+    field public static final int STATE_ABANDONED = 15; // 0xf
+    field public static final int STATE_BUFFERING = 6; // 0x6
+    field public static final int STATE_ENDED = 11; // 0xb
+    field public static final int STATE_FAILED = 13; // 0xd
+    field public static final int STATE_INTERRUPTED_BY_AD = 14; // 0xe
+    field public static final int STATE_JOINING_BACKGROUND = 1; // 0x1
+    field public static final int STATE_JOINING_FOREGROUND = 2; // 0x2
+    field public static final int STATE_NOT_STARTED = 0; // 0x0
+    field public static final int STATE_PAUSED = 4; // 0x4
+    field public static final int STATE_PAUSED_BUFFERING = 7; // 0x7
+    field public static final int STATE_PLAYING = 3; // 0x3
+    field public static final int STATE_SEEKING = 5; // 0x5
+    field public static final int STATE_STOPPED = 12; // 0xc
+    field public static final int STATE_SUPPRESSED = 9; // 0x9
+    field public static final int STATE_SUPPRESSED_BUFFERING = 10; // 0xa
+  }
+
+  public static final class PlaybackStateEvent.Builder {
+    ctor public PlaybackStateEvent.Builder();
+    method @NonNull public android.media.metrics.PlaybackStateEvent build();
+    method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setState(int);
+    method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+  }
+
+  public final class RecordingSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public android.media.metrics.LogSessionId getSessionId();
+  }
+
+  public final class TrackChangeEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getAudioSampleRate();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getBitrate();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getChannelCount();
+    method @Nullable public String getCodecName();
+    method @Nullable public String getContainerMimeType();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getHeight();
+    method @Nullable public String getLanguage();
+    method @Nullable public String getLanguageRegion();
+    method @Nullable public String getSampleMimeType();
+    method public int getTrackChangeReason();
+    method public int getTrackState();
+    method public int getTrackType();
+    method @FloatRange(from=0xffffffff, to=java.lang.Float.MAX_VALUE) public float getVideoFrameRate();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getWidth();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.TrackChangeEvent> CREATOR;
+    field public static final int TRACK_CHANGE_REASON_ADAPTIVE = 4; // 0x4
+    field public static final int TRACK_CHANGE_REASON_INITIAL = 2; // 0x2
+    field public static final int TRACK_CHANGE_REASON_MANUAL = 3; // 0x3
+    field public static final int TRACK_CHANGE_REASON_OTHER = 1; // 0x1
+    field public static final int TRACK_CHANGE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int TRACK_STATE_OFF = 0; // 0x0
+    field public static final int TRACK_STATE_ON = 1; // 0x1
+    field public static final int TRACK_TYPE_AUDIO = 0; // 0x0
+    field public static final int TRACK_TYPE_TEXT = 2; // 0x2
+    field public static final int TRACK_TYPE_VIDEO = 1; // 0x1
+  }
+
+  public static final class TrackChangeEvent.Builder {
+    ctor public TrackChangeEvent.Builder(int);
+    method @NonNull public android.media.metrics.TrackChangeEvent build();
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setAudioSampleRate(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setBitrate(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setChannelCount(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setCodecName(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setContainerMimeType(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setHeight(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setLanguage(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setLanguageRegion(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setSampleMimeType(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTrackChangeReason(int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTrackState(int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setVideoFrameRate(@FloatRange(from=0xffffffff, to=java.lang.Float.MAX_VALUE) float);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setWidth(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+  }
+
+}
+
+package android.media.midi {
+
+  public final class MidiDevice implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public android.media.midi.MidiDevice.MidiConnection connectPorts(android.media.midi.MidiInputPort, int);
+    method public android.media.midi.MidiDeviceInfo getInfo();
+    method public android.media.midi.MidiInputPort openInputPort(int);
+    method public android.media.midi.MidiOutputPort openOutputPort(int);
+  }
+
+  public class MidiDevice.MidiConnection implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+  }
+
+  public final class MidiDeviceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getId();
+    method public int getInputPortCount();
+    method public int getOutputPortCount();
+    method public android.media.midi.MidiDeviceInfo.PortInfo[] getPorts();
+    method public android.os.Bundle getProperties();
+    method public int getType();
+    method public boolean isPrivate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceInfo> CREATOR;
+    field public static final String PROPERTY_BLUETOOTH_DEVICE = "bluetooth_device";
+    field public static final String PROPERTY_MANUFACTURER = "manufacturer";
+    field public static final String PROPERTY_NAME = "name";
+    field public static final String PROPERTY_PRODUCT = "product";
+    field public static final String PROPERTY_SERIAL_NUMBER = "serial_number";
+    field public static final String PROPERTY_USB_DEVICE = "usb_device";
+    field public static final String PROPERTY_VERSION = "version";
+    field public static final int TYPE_BLUETOOTH = 3; // 0x3
+    field public static final int TYPE_USB = 1; // 0x1
+    field public static final int TYPE_VIRTUAL = 2; // 0x2
+  }
+
+  public static final class MidiDeviceInfo.PortInfo {
+    method public String getName();
+    method public int getPortNumber();
+    method public int getType();
+    field public static final int TYPE_INPUT = 1; // 0x1
+    field public static final int TYPE_OUTPUT = 2; // 0x2
+  }
+
+  public abstract class MidiDeviceService extends android.app.Service {
+    ctor public MidiDeviceService();
+    method public final android.media.midi.MidiDeviceInfo getDeviceInfo();
+    method public final android.media.midi.MidiReceiver[] getOutputPortReceivers();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onClose();
+    method public void onDeviceStatusChanged(android.media.midi.MidiDeviceStatus);
+    method public abstract android.media.midi.MidiReceiver[] onGetInputPortReceivers();
+    field public static final String SERVICE_INTERFACE = "android.media.midi.MidiDeviceService";
+  }
+
+  public final class MidiDeviceStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.midi.MidiDeviceInfo getDeviceInfo();
+    method public int getOutputPortOpenCount(int);
+    method public boolean isInputPortOpen(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceStatus> CREATOR;
+  }
+
+  public final class MidiInputPort extends android.media.midi.MidiReceiver implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public int getPortNumber();
+    method public void onSend(byte[], int, int, long) throws java.io.IOException;
+  }
+
+  public final class MidiManager {
+    method public android.media.midi.MidiDeviceInfo[] getDevices();
+    method public void openBluetoothDevice(android.bluetooth.BluetoothDevice, android.media.midi.MidiManager.OnDeviceOpenedListener, android.os.Handler);
+    method public void openDevice(android.media.midi.MidiDeviceInfo, android.media.midi.MidiManager.OnDeviceOpenedListener, android.os.Handler);
+    method public void registerDeviceCallback(android.media.midi.MidiManager.DeviceCallback, android.os.Handler);
+    method public void unregisterDeviceCallback(android.media.midi.MidiManager.DeviceCallback);
+  }
+
+  public static class MidiManager.DeviceCallback {
+    ctor public MidiManager.DeviceCallback();
+    method public void onDeviceAdded(android.media.midi.MidiDeviceInfo);
+    method public void onDeviceRemoved(android.media.midi.MidiDeviceInfo);
+    method public void onDeviceStatusChanged(android.media.midi.MidiDeviceStatus);
+  }
+
+  public static interface MidiManager.OnDeviceOpenedListener {
+    method public void onDeviceOpened(android.media.midi.MidiDevice);
+  }
+
+  public final class MidiOutputPort extends android.media.midi.MidiSender implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public int getPortNumber();
+    method public void onConnect(android.media.midi.MidiReceiver);
+    method public void onDisconnect(android.media.midi.MidiReceiver);
+  }
+
+  public abstract class MidiReceiver {
+    ctor public MidiReceiver();
+    ctor public MidiReceiver(int);
+    method public void flush() throws java.io.IOException;
+    method public final int getMaxMessageSize();
+    method public void onFlush() throws java.io.IOException;
+    method public abstract void onSend(byte[], int, int, long) throws java.io.IOException;
+    method public void send(byte[], int, int) throws java.io.IOException;
+    method public void send(byte[], int, int, long) throws java.io.IOException;
+  }
+
+  public abstract class MidiSender {
+    ctor public MidiSender();
+    method public void connect(android.media.midi.MidiReceiver);
+    method public void disconnect(android.media.midi.MidiReceiver);
+    method public abstract void onConnect(android.media.midi.MidiReceiver);
+    method public abstract void onDisconnect(android.media.midi.MidiReceiver);
+  }
+
+}
+
+package android.media.projection {
+
+  public final class MediaProjection {
+    method public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull String, int, int, int, int, @Nullable android.view.Surface, @Nullable android.hardware.display.VirtualDisplay.Callback, @Nullable android.os.Handler);
+    method public void registerCallback(android.media.projection.MediaProjection.Callback, android.os.Handler);
+    method public void stop();
+    method public void unregisterCallback(android.media.projection.MediaProjection.Callback);
+  }
+
+  public abstract static class MediaProjection.Callback {
+    ctor public MediaProjection.Callback();
+    method public void onStop();
+  }
+
+  public final class MediaProjectionManager {
+    method public android.content.Intent createScreenCaptureIntent();
+    method public android.media.projection.MediaProjection getMediaProjection(int, @NonNull android.content.Intent);
+  }
+
+}
+
+package android.media.session {
+
+  public final class MediaController {
+    ctor public MediaController(@NonNull android.content.Context, @NonNull android.media.session.MediaSession.Token);
+    method public void adjustVolume(int, int);
+    method public boolean dispatchMediaButtonEvent(@NonNull android.view.KeyEvent);
+    method @Nullable public android.os.Bundle getExtras();
+    method public long getFlags();
+    method @Nullable public android.media.MediaMetadata getMetadata();
+    method public String getPackageName();
+    method @Nullable public android.media.session.MediaController.PlaybackInfo getPlaybackInfo();
+    method @Nullable public android.media.session.PlaybackState getPlaybackState();
+    method @Nullable public java.util.List<android.media.session.MediaSession.QueueItem> getQueue();
+    method @Nullable public CharSequence getQueueTitle();
+    method public int getRatingType();
+    method @Nullable public android.app.PendingIntent getSessionActivity();
+    method @NonNull public android.os.Bundle getSessionInfo();
+    method @NonNull public android.media.session.MediaSession.Token getSessionToken();
+    method @NonNull public String getTag();
+    method @NonNull public android.media.session.MediaController.TransportControls getTransportControls();
+    method public void registerCallback(@NonNull android.media.session.MediaController.Callback);
+    method public void registerCallback(@NonNull android.media.session.MediaController.Callback, @Nullable android.os.Handler);
+    method public void sendCommand(@NonNull String, @Nullable android.os.Bundle, @Nullable android.os.ResultReceiver);
+    method public void setVolumeTo(int, int);
+    method public void unregisterCallback(@NonNull android.media.session.MediaController.Callback);
+  }
+
+  public abstract static class MediaController.Callback {
+    ctor public MediaController.Callback();
+    method public void onAudioInfoChanged(android.media.session.MediaController.PlaybackInfo);
+    method public void onExtrasChanged(@Nullable android.os.Bundle);
+    method public void onMetadataChanged(@Nullable android.media.MediaMetadata);
+    method public void onPlaybackStateChanged(@Nullable android.media.session.PlaybackState);
+    method public void onQueueChanged(@Nullable java.util.List<android.media.session.MediaSession.QueueItem>);
+    method public void onQueueTitleChanged(@Nullable CharSequence);
+    method public void onSessionDestroyed();
+    method public void onSessionEvent(@NonNull String, @Nullable android.os.Bundle);
+  }
+
+  public static final class MediaController.PlaybackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.AudioAttributes getAudioAttributes();
+    method public int getCurrentVolume();
+    method public int getMaxVolume();
+    method public int getPlaybackType();
+    method public int getVolumeControl();
+    method @Nullable public String getVolumeControlId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaController.PlaybackInfo> CREATOR;
+    field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+    field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+  }
+
+  public final class MediaController.TransportControls {
+    method public void fastForward();
+    method public void pause();
+    method public void play();
+    method public void playFromMediaId(String, android.os.Bundle);
+    method public void playFromSearch(String, android.os.Bundle);
+    method public void playFromUri(android.net.Uri, android.os.Bundle);
+    method public void prepare();
+    method public void prepareFromMediaId(String, android.os.Bundle);
+    method public void prepareFromSearch(String, android.os.Bundle);
+    method public void prepareFromUri(android.net.Uri, android.os.Bundle);
+    method public void rewind();
+    method public void seekTo(long);
+    method public void sendCustomAction(@NonNull android.media.session.PlaybackState.CustomAction, @Nullable android.os.Bundle);
+    method public void sendCustomAction(@NonNull String, @Nullable android.os.Bundle);
+    method public void setPlaybackSpeed(float);
+    method public void setRating(android.media.Rating);
+    method public void skipToNext();
+    method public void skipToPrevious();
+    method public void skipToQueueItem(long);
+    method public void stop();
+  }
+
+  public final class MediaSession {
+    ctor public MediaSession(@NonNull android.content.Context, @NonNull String);
+    ctor public MediaSession(@NonNull android.content.Context, @NonNull String, @Nullable android.os.Bundle);
+    method @NonNull public android.media.session.MediaController getController();
+    method @NonNull public android.media.session.MediaSessionManager.RemoteUserInfo getCurrentControllerInfo();
+    method @NonNull public android.media.session.MediaSession.Token getSessionToken();
+    method public boolean isActive();
+    method public void release();
+    method public void sendSessionEvent(@NonNull String, @Nullable android.os.Bundle);
+    method public void setActive(boolean);
+    method public void setCallback(@Nullable android.media.session.MediaSession.Callback);
+    method public void setCallback(@Nullable android.media.session.MediaSession.Callback, @Nullable android.os.Handler);
+    method public void setExtras(@Nullable android.os.Bundle);
+    method public void setFlags(int);
+    method public void setMediaButtonBroadcastReceiver(@Nullable android.content.ComponentName);
+    method @Deprecated public void setMediaButtonReceiver(@Nullable android.app.PendingIntent);
+    method public void setMetadata(@Nullable android.media.MediaMetadata);
+    method public void setPlaybackState(@Nullable android.media.session.PlaybackState);
+    method public void setPlaybackToLocal(android.media.AudioAttributes);
+    method public void setPlaybackToRemote(@NonNull android.media.VolumeProvider);
+    method public void setQueue(@Nullable java.util.List<android.media.session.MediaSession.QueueItem>);
+    method public void setQueueTitle(@Nullable CharSequence);
+    method public void setRatingType(int);
+    method public void setSessionActivity(@Nullable android.app.PendingIntent);
+    field @Deprecated public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+    field @Deprecated public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+  }
+
+  public abstract static class MediaSession.Callback {
+    ctor public MediaSession.Callback();
+    method public void onCommand(@NonNull String, @Nullable android.os.Bundle, @Nullable android.os.ResultReceiver);
+    method public void onCustomAction(@NonNull String, @Nullable android.os.Bundle);
+    method public void onFastForward();
+    method public boolean onMediaButtonEvent(@NonNull android.content.Intent);
+    method public void onPause();
+    method public void onPlay();
+    method public void onPlayFromMediaId(String, android.os.Bundle);
+    method public void onPlayFromSearch(String, android.os.Bundle);
+    method public void onPlayFromUri(android.net.Uri, android.os.Bundle);
+    method public void onPrepare();
+    method public void onPrepareFromMediaId(String, android.os.Bundle);
+    method public void onPrepareFromSearch(String, android.os.Bundle);
+    method public void onPrepareFromUri(android.net.Uri, android.os.Bundle);
+    method public void onRewind();
+    method public void onSeekTo(long);
+    method public void onSetPlaybackSpeed(float);
+    method public void onSetRating(@NonNull android.media.Rating);
+    method public void onSkipToNext();
+    method public void onSkipToPrevious();
+    method public void onSkipToQueueItem(long);
+    method public void onStop();
+  }
+
+  public static final class MediaSession.QueueItem implements android.os.Parcelable {
+    ctor public MediaSession.QueueItem(android.media.MediaDescription, long);
+    method public int describeContents();
+    method public android.media.MediaDescription getDescription();
+    method public long getQueueId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaSession.QueueItem> CREATOR;
+    field public static final int UNKNOWN_ID = -1; // 0xffffffff
+  }
+
+  public static final class MediaSession.Token implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaSession.Token> CREATOR;
+  }
+
+  public final class MediaSessionManager {
+    method public void addOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, @Nullable android.content.ComponentName);
+    method public void addOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, @Nullable android.content.ComponentName, @Nullable android.os.Handler);
+    method public void addOnSession2TokensChangedListener(@NonNull android.media.session.MediaSessionManager.OnSession2TokensChangedListener);
+    method public void addOnSession2TokensChangedListener(@NonNull android.media.session.MediaSessionManager.OnSession2TokensChangedListener, @NonNull android.os.Handler);
+    method @NonNull public java.util.List<android.media.session.MediaController> getActiveSessions(@Nullable android.content.ComponentName);
+    method @NonNull public java.util.List<android.media.Session2Token> getSession2Tokens();
+    method public boolean isTrustedForMediaControl(@NonNull android.media.session.MediaSessionManager.RemoteUserInfo);
+    method @Deprecated public void notifySession2Created(@NonNull android.media.Session2Token);
+    method public void removeOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener);
+    method public void removeOnSession2TokensChangedListener(@NonNull android.media.session.MediaSessionManager.OnSession2TokensChangedListener);
+  }
+
+  public static interface MediaSessionManager.OnActiveSessionsChangedListener {
+    method public void onActiveSessionsChanged(@Nullable java.util.List<android.media.session.MediaController>);
+  }
+
+  public static interface MediaSessionManager.OnSession2TokensChangedListener {
+    method public void onSession2TokensChanged(@NonNull java.util.List<android.media.Session2Token>);
+  }
+
+  public static final class MediaSessionManager.RemoteUserInfo {
+    ctor public MediaSessionManager.RemoteUserInfo(@NonNull String, int, int);
+    method public String getPackageName();
+    method public int getPid();
+    method public int getUid();
+  }
+
+  public final class PlaybackState implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getActions();
+    method public long getActiveQueueItemId();
+    method public long getBufferedPosition();
+    method public java.util.List<android.media.session.PlaybackState.CustomAction> getCustomActions();
+    method public CharSequence getErrorMessage();
+    method @Nullable public android.os.Bundle getExtras();
+    method public long getLastPositionUpdateTime();
+    method public float getPlaybackSpeed();
+    method public long getPosition();
+    method public int getState();
+    method public boolean isActive();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+    field public static final long ACTION_PAUSE = 2L; // 0x2L
+    field public static final long ACTION_PLAY = 4L; // 0x4L
+    field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+    field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+    field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+    field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+    field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+    field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+    field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+    field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+    field public static final long ACTION_REWIND = 8L; // 0x8L
+    field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+    field public static final long ACTION_SET_PLAYBACK_SPEED = 4194304L; // 0x400000L
+    field public static final long ACTION_SET_RATING = 128L; // 0x80L
+    field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+    field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+    field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+    field public static final long ACTION_STOP = 1L; // 0x1L
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.PlaybackState> CREATOR;
+    field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+    field public static final int STATE_BUFFERING = 6; // 0x6
+    field public static final int STATE_CONNECTING = 8; // 0x8
+    field public static final int STATE_ERROR = 7; // 0x7
+    field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+    field public static final int STATE_NONE = 0; // 0x0
+    field public static final int STATE_PAUSED = 2; // 0x2
+    field public static final int STATE_PLAYING = 3; // 0x3
+    field public static final int STATE_REWINDING = 5; // 0x5
+    field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+    field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+    field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+    field public static final int STATE_STOPPED = 1; // 0x1
+  }
+
+  public static final class PlaybackState.Builder {
+    ctor public PlaybackState.Builder();
+    ctor public PlaybackState.Builder(android.media.session.PlaybackState);
+    method public android.media.session.PlaybackState.Builder addCustomAction(String, String, int);
+    method public android.media.session.PlaybackState.Builder addCustomAction(android.media.session.PlaybackState.CustomAction);
+    method public android.media.session.PlaybackState build();
+    method public android.media.session.PlaybackState.Builder setActions(long);
+    method public android.media.session.PlaybackState.Builder setActiveQueueItemId(long);
+    method public android.media.session.PlaybackState.Builder setBufferedPosition(long);
+    method public android.media.session.PlaybackState.Builder setErrorMessage(CharSequence);
+    method public android.media.session.PlaybackState.Builder setExtras(android.os.Bundle);
+    method public android.media.session.PlaybackState.Builder setState(int, long, float, long);
+    method public android.media.session.PlaybackState.Builder setState(int, long, float);
+  }
+
+  public static final class PlaybackState.CustomAction implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getAction();
+    method public android.os.Bundle getExtras();
+    method public int getIcon();
+    method public CharSequence getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.PlaybackState.CustomAction> CREATOR;
+  }
+
+  public static final class PlaybackState.CustomAction.Builder {
+    ctor public PlaybackState.CustomAction.Builder(String, CharSequence, @DrawableRes int);
+    method public android.media.session.PlaybackState.CustomAction build();
+    method public android.media.session.PlaybackState.CustomAction.Builder setExtras(android.os.Bundle);
+  }
+
+}
+
+package android.media.tv {
+
+  public final class TvContentRating {
+    method public boolean contains(@NonNull android.media.tv.TvContentRating);
+    method public static android.media.tv.TvContentRating createRating(String, String, String, java.lang.String...);
+    method public String flattenToString();
+    method public String getDomain();
+    method public String getMainRating();
+    method public String getRatingSystem();
+    method public java.util.List<java.lang.String> getSubRatings();
+    method public static android.media.tv.TvContentRating unflattenFromString(String);
+    field public static final android.media.tv.TvContentRating UNRATED;
+  }
+
+  public final class TvContract {
+    method public static android.net.Uri buildChannelLogoUri(long);
+    method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+    method public static android.net.Uri buildChannelUri(long);
+    method public static android.net.Uri buildChannelUriForPassthroughInput(String);
+    method public static android.net.Uri buildChannelsUriForInput(@Nullable String);
+    method public static String buildInputId(android.content.ComponentName);
+    method public static android.net.Uri buildPreviewProgramUri(long);
+    method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+    method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+    method public static android.net.Uri buildProgramUri(long);
+    method public static android.net.Uri buildProgramsUriForChannel(long);
+    method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+    method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+    method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+    method public static android.net.Uri buildRecordedProgramUri(long);
+    method public static android.net.Uri buildWatchNextProgramUri(long);
+    method public static boolean isChannelUri(@NonNull android.net.Uri);
+    method public static boolean isChannelUriForPassthroughInput(@NonNull android.net.Uri);
+    method public static boolean isChannelUriForTunerInput(@NonNull android.net.Uri);
+    method public static boolean isProgramUri(@NonNull android.net.Uri);
+    method public static boolean isRecordedProgramUri(@NonNull android.net.Uri);
+    method public static void requestChannelBrowsable(android.content.Context, long);
+    field public static final String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
+    field public static final String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
+    field public static final String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
+    field public static final String ACTION_REQUEST_CHANNEL_BROWSABLE = "android.media.tv.action.REQUEST_CHANNEL_BROWSABLE";
+    field public static final String ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED";
+    field public static final String AUTHORITY = "android.media.tv";
+    field public static final String EXTRA_CHANNEL_ID = "android.media.tv.extra.CHANNEL_ID";
+    field public static final String EXTRA_PREVIEW_PROGRAM_ID = "android.media.tv.extra.PREVIEW_PROGRAM_ID";
+    field public static final String EXTRA_WATCH_NEXT_PROGRAM_ID = "android.media.tv.extra.WATCH_NEXT_PROGRAM_ID";
+  }
+
+  public static interface TvContract.BaseTvColumns extends android.provider.BaseColumns {
+    field public static final String COLUMN_PACKAGE_NAME = "package_name";
+  }
+
+  public static final class TvContract.Channels implements android.media.tv.TvContract.BaseTvColumns {
+    method @Nullable public static String getVideoResolution(String);
+    field public static final String COLUMN_APP_LINK_COLOR = "app_link_color";
+    field public static final String COLUMN_APP_LINK_ICON_URI = "app_link_icon_uri";
+    field public static final String COLUMN_APP_LINK_INTENT_URI = "app_link_intent_uri";
+    field public static final String COLUMN_APP_LINK_POSTER_ART_URI = "app_link_poster_art_uri";
+    field public static final String COLUMN_APP_LINK_TEXT = "app_link_text";
+    field public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final String COLUMN_BROWSABLE = "browsable";
+    field public static final String COLUMN_CHANNEL_LIST_ID = "channel_list_id";
+    field public static final String COLUMN_DESCRIPTION = "description";
+    field public static final String COLUMN_DISPLAY_NAME = "display_name";
+    field public static final String COLUMN_DISPLAY_NUMBER = "display_number";
+    field public static final String COLUMN_GLOBAL_CONTENT_ID = "global_content_id";
+    field public static final String COLUMN_INPUT_ID = "input_id";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final String COLUMN_LOCKED = "locked";
+    field public static final String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
+    field public static final String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
+    field public static final String COLUMN_REMOTE_CONTROL_KEY_PRESET_NUMBER = "remote_control_key_preset_number";
+    field public static final String COLUMN_SCRAMBLED = "scrambled";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SERVICE_ID = "service_id";
+    field public static final String COLUMN_SERVICE_TYPE = "service_type";
+    field public static final String COLUMN_TRANSIENT = "transient";
+    field public static final String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_FORMAT = "video_format";
+    field public static final String COLUMN_VIDEO_RESOLUTION = "video_resolution";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
+    field public static final String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
+    field public static final String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
+    field public static final String TYPE_1SEG = "TYPE_1SEG";
+    field public static final String TYPE_ATSC3_T = "TYPE_ATSC3_T";
+    field public static final String TYPE_ATSC_C = "TYPE_ATSC_C";
+    field public static final String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
+    field public static final String TYPE_ATSC_T = "TYPE_ATSC_T";
+    field public static final String TYPE_CMMB = "TYPE_CMMB";
+    field public static final String TYPE_DTMB = "TYPE_DTMB";
+    field public static final String TYPE_DVB_C = "TYPE_DVB_C";
+    field public static final String TYPE_DVB_C2 = "TYPE_DVB_C2";
+    field public static final String TYPE_DVB_H = "TYPE_DVB_H";
+    field public static final String TYPE_DVB_S = "TYPE_DVB_S";
+    field public static final String TYPE_DVB_S2 = "TYPE_DVB_S2";
+    field public static final String TYPE_DVB_SH = "TYPE_DVB_SH";
+    field public static final String TYPE_DVB_T = "TYPE_DVB_T";
+    field public static final String TYPE_DVB_T2 = "TYPE_DVB_T2";
+    field public static final String TYPE_ISDB_C = "TYPE_ISDB_C";
+    field public static final String TYPE_ISDB_S = "TYPE_ISDB_S";
+    field public static final String TYPE_ISDB_S3 = "TYPE_ISDB_S3";
+    field public static final String TYPE_ISDB_T = "TYPE_ISDB_T";
+    field public static final String TYPE_ISDB_TB = "TYPE_ISDB_TB";
+    field public static final String TYPE_NTSC = "TYPE_NTSC";
+    field public static final String TYPE_OTHER = "TYPE_OTHER";
+    field public static final String TYPE_PAL = "TYPE_PAL";
+    field public static final String TYPE_PREVIEW = "TYPE_PREVIEW";
+    field public static final String TYPE_SECAM = "TYPE_SECAM";
+    field public static final String TYPE_S_DMB = "TYPE_S_DMB";
+    field public static final String TYPE_T_DMB = "TYPE_T_DMB";
+    field public static final String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
+    field public static final String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
+    field public static final String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
+    field public static final String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
+    field public static final String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P";
+    field public static final String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P";
+    field public static final String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I";
+    field public static final String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P";
+    field public static final String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I";
+    field public static final String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P";
+    field public static final String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P";
+    field public static final String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED";
+    field public static final String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD";
+    field public static final String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD";
+    field public static final String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD";
+    field public static final String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD";
+  }
+
+  public static final class TvContract.Channels.Logo {
+    field public static final String CONTENT_DIRECTORY = "logo";
+  }
+
+  public static final class TvContract.PreviewPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+    field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+    field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+    field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+    field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+    field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_AUTHOR = "author";
+    field public static final String COLUMN_AVAILABILITY = "availability";
+    field public static final String COLUMN_BROWSABLE = "browsable";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_CONTENT_ID = "content_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_DURATION_MILLIS = "duration_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_INTENT_URI = "intent_uri";
+    field public static final String COLUMN_INTERACTION_COUNT = "interaction_count";
+    field public static final String COLUMN_INTERACTION_TYPE = "interaction_type";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final String COLUMN_ITEM_COUNT = "item_count";
+    field public static final String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+    field public static final String COLUMN_LIVE = "live";
+    field public static final String COLUMN_LOGO_URI = "logo_uri";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_OFFER_PRICE = "offer_price";
+    field public static final String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+    field public static final String COLUMN_RELEASE_DATE = "release_date";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_STARTING_PRICE = "starting_price";
+    field public static final String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_TRANSIENT = "transient";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String COLUMN_WEIGHT = "weight";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/preview_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/preview_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+    field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+    field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+    field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+    field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+    field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+    field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+    field public static final int TYPE_ALBUM = 8; // 0x8
+    field public static final int TYPE_ARTIST = 9; // 0x9
+    field public static final int TYPE_CHANNEL = 6; // 0x6
+    field public static final int TYPE_CLIP = 4; // 0x4
+    field public static final int TYPE_EVENT = 5; // 0x5
+    field public static final int TYPE_MOVIE = 0; // 0x0
+    field public static final int TYPE_PLAYLIST = 10; // 0xa
+    field public static final int TYPE_STATION = 11; // 0xb
+    field public static final int TYPE_TRACK = 7; // 0x7
+    field public static final int TYPE_TV_EPISODE = 3; // 0x3
+    field public static final int TYPE_TV_SEASON = 2; // 0x2
+    field public static final int TYPE_TV_SERIES = 1; // 0x1
+  }
+
+  public static final class TvContract.Programs implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field @Deprecated public static final String COLUMN_EPISODE_NUMBER = "episode_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_EVENT_ID = "event_id";
+    field public static final String COLUMN_GLOBAL_CONTENT_ID = "global_content_id";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_RECORDING_PROHIBITED = "recording_prohibited";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field @Deprecated public static final String COLUMN_SEASON_NUMBER = "season_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+  }
+
+  public static final class TvContract.Programs.Genres {
+    method public static String[] decode(@NonNull String);
+    method public static String encode(@NonNull java.lang.String...);
+    method public static boolean isCanonical(String);
+    field public static final String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE";
+    field public static final String ARTS = "ARTS";
+    field public static final String COMEDY = "COMEDY";
+    field public static final String DRAMA = "DRAMA";
+    field public static final String EDUCATION = "EDUCATION";
+    field public static final String ENTERTAINMENT = "ENTERTAINMENT";
+    field public static final String FAMILY_KIDS = "FAMILY_KIDS";
+    field public static final String GAMING = "GAMING";
+    field public static final String LIFE_STYLE = "LIFE_STYLE";
+    field public static final String MOVIES = "MOVIES";
+    field public static final String MUSIC = "MUSIC";
+    field public static final String NEWS = "NEWS";
+    field public static final String PREMIER = "PREMIER";
+    field public static final String SHOPPING = "SHOPPING";
+    field public static final String SPORTS = "SPORTS";
+    field public static final String TECH_SCIENCE = "TECH_SCIENCE";
+    field public static final String TRAVEL = "TRAVEL";
+  }
+
+  public static final class TvContract.RecordedPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_INPUT_ID = "input_id";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_RECORDING_DATA_BYTES = "recording_data_bytes";
+    field public static final String COLUMN_RECORDING_DATA_URI = "recording_data_uri";
+    field public static final String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis";
+    field public static final String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/recorded_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/recorded_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+  }
+
+  public static final class TvContract.WatchNextPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+    field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+    field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+    field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+    field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+    field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_AUTHOR = "author";
+    field public static final String COLUMN_AVAILABILITY = "availability";
+    field public static final String COLUMN_BROWSABLE = "browsable";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CONTENT_ID = "content_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_DURATION_MILLIS = "duration_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_INTENT_URI = "intent_uri";
+    field public static final String COLUMN_INTERACTION_COUNT = "interaction_count";
+    field public static final String COLUMN_INTERACTION_TYPE = "interaction_type";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final String COLUMN_ITEM_COUNT = "item_count";
+    field public static final String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS = "last_engagement_time_utc_millis";
+    field public static final String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+    field public static final String COLUMN_LIVE = "live";
+    field public static final String COLUMN_LOGO_URI = "logo_uri";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_OFFER_PRICE = "offer_price";
+    field public static final String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+    field public static final String COLUMN_RELEASE_DATE = "release_date";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_STARTING_PRICE = "starting_price";
+    field public static final String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_TRANSIENT = "transient";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String COLUMN_WATCH_NEXT_TYPE = "watch_next_type";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watch_next_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/watch_next_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+    field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+    field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+    field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+    field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+    field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+    field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+    field public static final int TYPE_ALBUM = 8; // 0x8
+    field public static final int TYPE_ARTIST = 9; // 0x9
+    field public static final int TYPE_CHANNEL = 6; // 0x6
+    field public static final int TYPE_CLIP = 4; // 0x4
+    field public static final int TYPE_EVENT = 5; // 0x5
+    field public static final int TYPE_MOVIE = 0; // 0x0
+    field public static final int TYPE_PLAYLIST = 10; // 0xa
+    field public static final int TYPE_STATION = 11; // 0xb
+    field public static final int TYPE_TRACK = 7; // 0x7
+    field public static final int TYPE_TV_EPISODE = 3; // 0x3
+    field public static final int TYPE_TV_SEASON = 2; // 0x2
+    field public static final int TYPE_TV_SERIES = 1; // 0x1
+    field public static final int WATCH_NEXT_TYPE_CONTINUE = 0; // 0x0
+    field public static final int WATCH_NEXT_TYPE_NEW = 2; // 0x2
+    field public static final int WATCH_NEXT_TYPE_NEXT = 1; // 0x1
+    field public static final int WATCH_NEXT_TYPE_WATCHLIST = 3; // 0x3
+  }
+
+  public final class TvInputInfo implements android.os.Parcelable {
+    method public boolean canPauseRecording();
+    method public boolean canRecord();
+    method @Deprecated public android.content.Intent createSettingsIntent();
+    method public android.content.Intent createSetupIntent();
+    method public int describeContents();
+    method public android.os.Bundle getExtras();
+    method public String getId();
+    method public String getParentId();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public int getTunerCount();
+    method public int getType();
+    method public boolean isHidden(android.content.Context);
+    method public boolean isPassthroughInput();
+    method public CharSequence loadCustomLabel(android.content.Context);
+    method public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context);
+    method public CharSequence loadLabel(@NonNull android.content.Context);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> CREATOR;
+    field public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID";
+    field public static final int TYPE_COMPONENT = 1004; // 0x3ec
+    field public static final int TYPE_COMPOSITE = 1001; // 0x3e9
+    field public static final int TYPE_DISPLAY_PORT = 1008; // 0x3f0
+    field public static final int TYPE_DVI = 1006; // 0x3ee
+    field public static final int TYPE_HDMI = 1007; // 0x3ef
+    field public static final int TYPE_OTHER = 1000; // 0x3e8
+    field public static final int TYPE_SCART = 1003; // 0x3eb
+    field public static final int TYPE_SVIDEO = 1002; // 0x3ea
+    field public static final int TYPE_TUNER = 0; // 0x0
+    field public static final int TYPE_VGA = 1005; // 0x3ed
+  }
+
+  public static final class TvInputInfo.Builder {
+    ctor public TvInputInfo.Builder(android.content.Context, android.content.ComponentName);
+    method public android.media.tv.TvInputInfo build();
+    method @NonNull public android.media.tv.TvInputInfo.Builder setCanPauseRecording(boolean);
+    method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean);
+    method public android.media.tv.TvInputInfo.Builder setExtras(android.os.Bundle);
+    method public android.media.tv.TvInputInfo.Builder setTunerCount(int);
+  }
+
+  public final class TvInputManager {
+    method public java.util.List<android.media.tv.TvContentRating> getBlockedRatings();
+    method public int getInputState(@NonNull String);
+    method @Nullable public android.media.tv.TvInputInfo getTvInputInfo(@NonNull String);
+    method public java.util.List<android.media.tv.TvInputInfo> getTvInputList();
+    method public boolean isParentalControlsEnabled();
+    method public boolean isRatingBlocked(@NonNull android.media.tv.TvContentRating);
+    method public void registerCallback(@NonNull android.media.tv.TvInputManager.TvInputCallback, @NonNull android.os.Handler);
+    method public void unregisterCallback(@NonNull android.media.tv.TvInputManager.TvInputCallback);
+    method public void updateTvInputInfo(@NonNull android.media.tv.TvInputInfo);
+    field public static final String ACTION_BLOCKED_RATINGS_CHANGED = "android.media.tv.action.BLOCKED_RATINGS_CHANGED";
+    field public static final String ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED = "android.media.tv.action.PARENTAL_CONTROLS_ENABLED_CHANGED";
+    field public static final String ACTION_QUERY_CONTENT_RATING_SYSTEMS = "android.media.tv.action.QUERY_CONTENT_RATING_SYSTEMS";
+    field public static final String ACTION_SETUP_INPUTS = "android.media.tv.action.SETUP_INPUTS";
+    field public static final String ACTION_VIEW_RECORDING_SCHEDULES = "android.media.tv.action.VIEW_RECORDING_SCHEDULES";
+    field public static final int INPUT_STATE_CONNECTED = 0; // 0x0
+    field public static final int INPUT_STATE_CONNECTED_STANDBY = 1; // 0x1
+    field public static final int INPUT_STATE_DISCONNECTED = 2; // 0x2
+    field public static final String META_DATA_CONTENT_RATING_SYSTEMS = "android.media.tv.metadata.CONTENT_RATING_SYSTEMS";
+    field public static final int RECORDING_ERROR_INSUFFICIENT_SPACE = 1; // 0x1
+    field public static final int RECORDING_ERROR_RESOURCE_BUSY = 2; // 0x2
+    field public static final int RECORDING_ERROR_UNKNOWN = 0; // 0x0
+    field public static final long TIME_SHIFT_INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L
+    field public static final int TIME_SHIFT_STATUS_AVAILABLE = 3; // 0x3
+    field public static final int TIME_SHIFT_STATUS_UNAVAILABLE = 2; // 0x2
+    field public static final int TIME_SHIFT_STATUS_UNKNOWN = 0; // 0x0
+    field public static final int TIME_SHIFT_STATUS_UNSUPPORTED = 1; // 0x1
+    field public static final int VIDEO_UNAVAILABLE_REASON_AUDIO_ONLY = 4; // 0x4
+    field public static final int VIDEO_UNAVAILABLE_REASON_BUFFERING = 3; // 0x3
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_BLACKOUT = 16; // 0x10
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_CARD_INVALID = 15; // 0xf
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_CARD_MUTE = 14; // 0xe
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_INSUFFICIENT_OUTPUT_PROTECTION = 7; // 0x7
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_LICENSE_EXPIRED = 10; // 0xa
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_NEED_ACTIVATION = 11; // 0xb
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_NEED_PAIRING = 12; // 0xc
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_NO_CARD = 13; // 0xd
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_PVR_RECORDING_NOT_ALLOWED = 8; // 0x8
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_REBOOTING = 17; // 0x11
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN = 18; // 0x12
+    field public static final int VIDEO_UNAVAILABLE_REASON_INSUFFICIENT_RESOURCE = 6; // 0x6
+    field public static final int VIDEO_UNAVAILABLE_REASON_NOT_CONNECTED = 5; // 0x5
+    field public static final int VIDEO_UNAVAILABLE_REASON_TUNING = 1; // 0x1
+    field public static final int VIDEO_UNAVAILABLE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL = 2; // 0x2
+  }
+
+  public abstract static class TvInputManager.TvInputCallback {
+    ctor public TvInputManager.TvInputCallback();
+    method public void onInputAdded(String);
+    method public void onInputRemoved(String);
+    method public void onInputStateChanged(String, int);
+    method public void onInputUpdated(String);
+    method public void onTvInputInfoUpdated(android.media.tv.TvInputInfo);
+  }
+
+  public abstract class TvInputService extends android.app.Service {
+    ctor public TvInputService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public android.media.tv.TvInputService.RecordingSession onCreateRecordingSession(@NonNull String);
+    method @Nullable public android.media.tv.TvInputService.RecordingSession onCreateRecordingSession(@NonNull String, @NonNull String);
+    method @Nullable public abstract android.media.tv.TvInputService.Session onCreateSession(@NonNull String);
+    method @Nullable public android.media.tv.TvInputService.Session onCreateSession(@NonNull String, @NonNull String);
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_BACKGROUND = 100; // 0x64
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_LIVE = 400; // 0x190
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK = 300; // 0x12c
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_RECORD = 500; // 0x1f4
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_SCAN = 200; // 0xc8
+    field public static final String SERVICE_INTERFACE = "android.media.tv.TvInputService";
+    field public static final String SERVICE_META_DATA = "android.media.tv.input";
+  }
+
+  public abstract static class TvInputService.HardwareSession extends android.media.tv.TvInputService.Session {
+    ctor public TvInputService.HardwareSession(android.content.Context);
+    method public abstract String getHardwareInputId();
+    method public void onHardwareVideoAvailable();
+    method public void onHardwareVideoUnavailable(int);
+    method public final boolean onSetSurface(android.view.Surface);
+  }
+
+  public abstract static class TvInputService.RecordingSession {
+    ctor public TvInputService.RecordingSession(android.content.Context);
+    method public void notifyError(int);
+    method public void notifyRecordingStopped(android.net.Uri);
+    method public void notifyTuned(android.net.Uri);
+    method public void onAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public void onPauseRecording(@NonNull android.os.Bundle);
+    method public abstract void onRelease();
+    method public void onResumeRecording(@NonNull android.os.Bundle);
+    method public abstract void onStartRecording(@Nullable android.net.Uri);
+    method public void onStartRecording(@Nullable android.net.Uri, @NonNull android.os.Bundle);
+    method public abstract void onStopRecording();
+    method public abstract void onTune(android.net.Uri);
+    method public void onTune(android.net.Uri, android.os.Bundle);
+  }
+
+  public abstract static class TvInputService.Session implements android.view.KeyEvent.Callback {
+    ctor public TvInputService.Session(android.content.Context);
+    method public void layoutSurface(int, int, int, int);
+    method public void notifyChannelRetuned(android.net.Uri);
+    method public void notifyContentAllowed();
+    method public void notifyContentBlocked(@NonNull android.media.tv.TvContentRating);
+    method public void notifyTimeShiftStatusChanged(int);
+    method public void notifyTrackSelected(int, String);
+    method public void notifyTracksChanged(java.util.List<android.media.tv.TvTrackInfo>);
+    method public void notifyVideoAvailable();
+    method public void notifyVideoUnavailable(int);
+    method public void onAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public android.view.View onCreateOverlayView();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onOverlayViewSizeChanged(int, int);
+    method public abstract void onRelease();
+    method public boolean onSelectTrack(int, @Nullable String);
+    method public abstract void onSetCaptionEnabled(boolean);
+    method public abstract void onSetStreamVolume(@FloatRange(from=0.0, to=1.0) float);
+    method public abstract boolean onSetSurface(@Nullable android.view.Surface);
+    method public void onSurfaceChanged(int, int, int);
+    method public long onTimeShiftGetCurrentPosition();
+    method public long onTimeShiftGetStartPosition();
+    method public void onTimeShiftPause();
+    method public void onTimeShiftPlay(android.net.Uri);
+    method public void onTimeShiftResume();
+    method public void onTimeShiftSeekTo(long);
+    method public void onTimeShiftSetPlaybackParams(android.media.PlaybackParams);
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public abstract boolean onTune(android.net.Uri);
+    method public boolean onTune(android.net.Uri, android.os.Bundle);
+    method public void onUnblockContent(android.media.tv.TvContentRating);
+    method public void setOverlayViewEnabled(boolean);
+  }
+
+  public class TvRecordingClient {
+    ctor public TvRecordingClient(android.content.Context, String, @NonNull android.media.tv.TvRecordingClient.RecordingCallback, android.os.Handler);
+    method public void pauseRecording();
+    method public void pauseRecording(@NonNull android.os.Bundle);
+    method public void release();
+    method public void resumeRecording();
+    method public void resumeRecording(@NonNull android.os.Bundle);
+    method public void sendAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public void startRecording(@Nullable android.net.Uri);
+    method public void startRecording(@Nullable android.net.Uri, @NonNull android.os.Bundle);
+    method public void stopRecording();
+    method public void tune(String, android.net.Uri);
+    method public void tune(String, android.net.Uri, android.os.Bundle);
+  }
+
+  public abstract static class TvRecordingClient.RecordingCallback {
+    ctor public TvRecordingClient.RecordingCallback();
+    method public void onConnectionFailed(String);
+    method public void onDisconnected(String);
+    method public void onError(int);
+    method public void onRecordingStopped(android.net.Uri);
+    method public void onTuned(android.net.Uri);
+  }
+
+  public final class TvTrackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAudioChannelCount();
+    method public int getAudioSampleRate();
+    method public CharSequence getDescription();
+    method @Nullable public String getEncoding();
+    method public android.os.Bundle getExtra();
+    method public String getId();
+    method public String getLanguage();
+    method public int getType();
+    method public byte getVideoActiveFormatDescription();
+    method public float getVideoFrameRate();
+    method public int getVideoHeight();
+    method public float getVideoPixelAspectRatio();
+    method public int getVideoWidth();
+    method public boolean isAudioDescription();
+    method public boolean isEncrypted();
+    method public boolean isHardOfHearing();
+    method public boolean isSpokenSubtitle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvTrackInfo> CREATOR;
+    field public static final int TYPE_AUDIO = 0; // 0x0
+    field public static final int TYPE_SUBTITLE = 2; // 0x2
+    field public static final int TYPE_VIDEO = 1; // 0x1
+  }
+
+  public static final class TvTrackInfo.Builder {
+    ctor public TvTrackInfo.Builder(int, @NonNull String);
+    method @NonNull public android.media.tv.TvTrackInfo build();
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioChannelCount(int);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioDescription(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioSampleRate(int);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setDescription(@NonNull CharSequence);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setEncoding(@Nullable String);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setEncrypted(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setExtra(@NonNull android.os.Bundle);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setHardOfHearing(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setLanguage(@NonNull String);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setSpokenSubtitle(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoActiveFormatDescription(byte);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoFrameRate(float);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoHeight(int);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoPixelAspectRatio(float);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoWidth(int);
+  }
+
+  public class TvView extends android.view.ViewGroup {
+    ctor public TvView(android.content.Context);
+    ctor public TvView(android.content.Context, android.util.AttributeSet);
+    ctor public TvView(android.content.Context, android.util.AttributeSet, int);
+    method public boolean dispatchUnhandledInputEvent(android.view.InputEvent);
+    method public String getSelectedTrack(int);
+    method public java.util.List<android.media.tv.TvTrackInfo> getTracks(int);
+    method public boolean onUnhandledInputEvent(android.view.InputEvent);
+    method public void reset();
+    method public void selectTrack(int, String);
+    method public void sendAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public void setCallback(@Nullable android.media.tv.TvView.TvInputCallback);
+    method public void setCaptionEnabled(boolean);
+    method public void setOnUnhandledInputEventListener(android.media.tv.TvView.OnUnhandledInputEventListener);
+    method public void setStreamVolume(@FloatRange(from=0.0, to=1.0) float);
+    method public void setTimeShiftPositionCallback(@Nullable android.media.tv.TvView.TimeShiftPositionCallback);
+    method public void setZOrderMediaOverlay(boolean);
+    method public void setZOrderOnTop(boolean);
+    method public void timeShiftPause();
+    method public void timeShiftPlay(String, android.net.Uri);
+    method public void timeShiftResume();
+    method public void timeShiftSeekTo(long);
+    method public void timeShiftSetPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public void tune(@NonNull String, android.net.Uri);
+    method public void tune(String, android.net.Uri, android.os.Bundle);
+  }
+
+  public static interface TvView.OnUnhandledInputEventListener {
+    method public boolean onUnhandledInputEvent(android.view.InputEvent);
+  }
+
+  public abstract static class TvView.TimeShiftPositionCallback {
+    ctor public TvView.TimeShiftPositionCallback();
+    method public void onTimeShiftCurrentPositionChanged(String, long);
+    method public void onTimeShiftStartPositionChanged(String, long);
+  }
+
+  public abstract static class TvView.TvInputCallback {
+    ctor public TvView.TvInputCallback();
+    method public void onChannelRetuned(String, android.net.Uri);
+    method public void onConnectionFailed(String);
+    method public void onContentAllowed(String);
+    method public void onContentBlocked(String, android.media.tv.TvContentRating);
+    method public void onDisconnected(String);
+    method public void onTimeShiftStatusChanged(String, int);
+    method public void onTrackSelected(String, int, String);
+    method public void onTracksChanged(String, java.util.List<android.media.tv.TvTrackInfo>);
+    method public void onVideoAvailable(String);
+    method public void onVideoSizeChanged(String, int, int);
+    method public void onVideoUnavailable(String, int);
+  }
+
+}
+
+package android.mtp {
+
+  public final class MtpConstants {
+    ctor public MtpConstants();
+    method public static boolean isAbstractObject(int);
+    field public static final int ASSOCIATION_TYPE_GENERIC_FOLDER = 1; // 0x1
+    field public static final int FORMAT_3GP_CONTAINER = 47492; // 0xb984
+    field public static final int FORMAT_AAC = 47363; // 0xb903
+    field public static final int FORMAT_ABSTRACT_AUDIO_ALBUM = 47619; // 0xba03
+    field public static final int FORMAT_ABSTRACT_AUDIO_PLAYLIST = 47625; // 0xba09
+    field public static final int FORMAT_ABSTRACT_AV_PLAYLIST = 47621; // 0xba05
+    field public static final int FORMAT_ABSTRACT_DOCUMENT = 47745; // 0xba81
+    field public static final int FORMAT_ABSTRACT_IMAGE_ALBUM = 47618; // 0xba02
+    field public static final int FORMAT_ABSTRACT_MEDIACAST = 47627; // 0xba0b
+    field public static final int FORMAT_ABSTRACT_MULTIMEDIA_ALBUM = 47617; // 0xba01
+    field public static final int FORMAT_ABSTRACT_VIDEO_ALBUM = 47620; // 0xba04
+    field public static final int FORMAT_ABSTRACT_VIDEO_PLAYLIST = 47626; // 0xba0a
+    field public static final int FORMAT_AIFF = 12295; // 0x3007
+    field public static final int FORMAT_ASF = 12300; // 0x300c
+    field public static final int FORMAT_ASSOCIATION = 12289; // 0x3001
+    field public static final int FORMAT_ASX_PLAYLIST = 47635; // 0xba13
+    field public static final int FORMAT_AUDIBLE = 47364; // 0xb904
+    field public static final int FORMAT_AVI = 12298; // 0x300a
+    field public static final int FORMAT_BMP = 14340; // 0x3804
+    field public static final int FORMAT_DEFINED = 14336; // 0x3800
+    field public static final int FORMAT_DNG = 14353; // 0x3811
+    field public static final int FORMAT_DPOF = 12294; // 0x3006
+    field public static final int FORMAT_EXECUTABLE = 12291; // 0x3003
+    field public static final int FORMAT_EXIF_JPEG = 14337; // 0x3801
+    field public static final int FORMAT_FLAC = 47366; // 0xb906
+    field public static final int FORMAT_GIF = 14343; // 0x3807
+    field public static final int FORMAT_HTML = 12293; // 0x3005
+    field public static final int FORMAT_JFIF = 14344; // 0x3808
+    field public static final int FORMAT_JP2 = 14351; // 0x380f
+    field public static final int FORMAT_JPX = 14352; // 0x3810
+    field public static final int FORMAT_M3U_PLAYLIST = 47633; // 0xba11
+    field public static final int FORMAT_MP2 = 47491; // 0xb983
+    field public static final int FORMAT_MP3 = 12297; // 0x3009
+    field public static final int FORMAT_MP4_CONTAINER = 47490; // 0xb982
+    field public static final int FORMAT_MPEG = 12299; // 0x300b
+    field public static final int FORMAT_MPL_PLAYLIST = 47634; // 0xba12
+    field public static final int FORMAT_MS_EXCEL_SPREADSHEET = 47749; // 0xba85
+    field public static final int FORMAT_MS_POWERPOINT_PRESENTATION = 47750; // 0xba86
+    field public static final int FORMAT_MS_WORD_DOCUMENT = 47747; // 0xba83
+    field public static final int FORMAT_OGG = 47362; // 0xb902
+    field public static final int FORMAT_PICT = 14346; // 0x380a
+    field public static final int FORMAT_PLS_PLAYLIST = 47636; // 0xba14
+    field public static final int FORMAT_PNG = 14347; // 0x380b
+    field public static final int FORMAT_SCRIPT = 12290; // 0x3002
+    field public static final int FORMAT_TEXT = 12292; // 0x3004
+    field public static final int FORMAT_TIFF = 14349; // 0x380d
+    field public static final int FORMAT_TIFF_EP = 14338; // 0x3802
+    field public static final int FORMAT_UNDEFINED = 12288; // 0x3000
+    field public static final int FORMAT_UNDEFINED_AUDIO = 47360; // 0xb900
+    field public static final int FORMAT_UNDEFINED_COLLECTION = 47616; // 0xba00
+    field public static final int FORMAT_UNDEFINED_DOCUMENT = 47744; // 0xba80
+    field public static final int FORMAT_UNDEFINED_FIRMWARE = 47106; // 0xb802
+    field public static final int FORMAT_UNDEFINED_VIDEO = 47488; // 0xb980
+    field public static final int FORMAT_WAV = 12296; // 0x3008
+    field public static final int FORMAT_WINDOWS_IMAGE_FORMAT = 47233; // 0xb881
+    field public static final int FORMAT_WMA = 47361; // 0xb901
+    field public static final int FORMAT_WMV = 47489; // 0xb981
+    field public static final int FORMAT_WPL_PLAYLIST = 47632; // 0xba10
+    field public static final int FORMAT_XML_DOCUMENT = 47746; // 0xba82
+    field public static final int OPERATION_CLOSE_SESSION = 4099; // 0x1003
+    field public static final int OPERATION_COPY_OBJECT = 4122; // 0x101a
+    field public static final int OPERATION_DELETE_OBJECT = 4107; // 0x100b
+    field public static final int OPERATION_FORMAT_STORE = 4111; // 0x100f
+    field public static final int OPERATION_GET_DEVICE_INFO = 4097; // 0x1001
+    field public static final int OPERATION_GET_DEVICE_PROP_DESC = 4116; // 0x1014
+    field public static final int OPERATION_GET_DEVICE_PROP_VALUE = 4117; // 0x1015
+    field public static final int OPERATION_GET_NUM_OBJECTS = 4102; // 0x1006
+    field public static final int OPERATION_GET_OBJECT = 4105; // 0x1009
+    field public static final int OPERATION_GET_OBJECT_HANDLES = 4103; // 0x1007
+    field public static final int OPERATION_GET_OBJECT_INFO = 4104; // 0x1008
+    field public static final int OPERATION_GET_OBJECT_PROPS_SUPPORTED = 38913; // 0x9801
+    field public static final int OPERATION_GET_OBJECT_PROP_DESC = 38914; // 0x9802
+    field public static final int OPERATION_GET_OBJECT_PROP_VALUE = 38915; // 0x9803
+    field public static final int OPERATION_GET_OBJECT_REFERENCES = 38928; // 0x9810
+    field public static final int OPERATION_GET_PARTIAL_OBJECT = 4123; // 0x101b
+    field public static final int OPERATION_GET_PARTIAL_OBJECT_64 = 38337; // 0x95c1
+    field public static final int OPERATION_GET_STORAGE_INFO = 4101; // 0x1005
+    field public static final int OPERATION_GET_STORAGE_I_DS = 4100; // 0x1004
+    field public static final int OPERATION_GET_THUMB = 4106; // 0x100a
+    field public static final int OPERATION_INITIATE_CAPTURE = 4110; // 0x100e
+    field public static final int OPERATION_INITIATE_OPEN_CAPTURE = 4124; // 0x101c
+    field public static final int OPERATION_MOVE_OBJECT = 4121; // 0x1019
+    field public static final int OPERATION_OPEN_SESSION = 4098; // 0x1002
+    field public static final int OPERATION_POWER_DOWN = 4115; // 0x1013
+    field public static final int OPERATION_RESET_DEVICE = 4112; // 0x1010
+    field public static final int OPERATION_RESET_DEVICE_PROP_VALUE = 4119; // 0x1017
+    field public static final int OPERATION_SELF_TEST = 4113; // 0x1011
+    field public static final int OPERATION_SEND_OBJECT = 4109; // 0x100d
+    field public static final int OPERATION_SEND_OBJECT_INFO = 4108; // 0x100c
+    field public static final int OPERATION_SET_DEVICE_PROP_VALUE = 4118; // 0x1016
+    field public static final int OPERATION_SET_OBJECT_PROP_VALUE = 38916; // 0x9804
+    field public static final int OPERATION_SET_OBJECT_PROTECTION = 4114; // 0x1012
+    field public static final int OPERATION_SET_OBJECT_REFERENCES = 38929; // 0x9811
+    field public static final int OPERATION_SKIP = 38944; // 0x9820
+    field public static final int OPERATION_TERMINATE_OPEN_CAPTURE = 4120; // 0x1018
+    field public static final int PROTECTION_STATUS_NONE = 0; // 0x0
+    field public static final int PROTECTION_STATUS_NON_TRANSFERABLE_DATA = 32771; // 0x8003
+    field public static final int PROTECTION_STATUS_READ_ONLY = 32769; // 0x8001
+    field public static final int PROTECTION_STATUS_READ_ONLY_DATA = 32770; // 0x8002
+  }
+
+  public final class MtpDevice {
+    ctor public MtpDevice(@NonNull android.hardware.usb.UsbDevice);
+    method public void close();
+    method public boolean deleteObject(int);
+    method public int getDeviceId();
+    method @Nullable public android.mtp.MtpDeviceInfo getDeviceInfo();
+    method @NonNull public String getDeviceName();
+    method @Nullable public byte[] getObject(int, int);
+    method @Nullable public int[] getObjectHandles(int, int, int);
+    method @Nullable public android.mtp.MtpObjectInfo getObjectInfo(int);
+    method public long getParent(int);
+    method public long getPartialObject(int, long, long, @NonNull byte[]) throws java.io.IOException;
+    method public long getPartialObject64(int, long, long, @NonNull byte[]) throws java.io.IOException;
+    method public long getStorageId(int);
+    method @Nullable public int[] getStorageIds();
+    method @Nullable public android.mtp.MtpStorageInfo getStorageInfo(int);
+    method @Nullable public byte[] getThumbnail(int);
+    method public boolean importFile(int, @NonNull String);
+    method public boolean importFile(int, @NonNull android.os.ParcelFileDescriptor);
+    method public boolean open(@NonNull android.hardware.usb.UsbDeviceConnection);
+    method @NonNull public android.mtp.MtpEvent readEvent(@Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method public boolean sendObject(int, long, @NonNull android.os.ParcelFileDescriptor);
+    method @Nullable public android.mtp.MtpObjectInfo sendObjectInfo(@NonNull android.mtp.MtpObjectInfo);
+  }
+
+  public class MtpDeviceInfo {
+    method @NonNull public final int[] getEventsSupported();
+    method @NonNull public final String getManufacturer();
+    method @NonNull public final String getModel();
+    method @NonNull public final int[] getOperationsSupported();
+    method @NonNull public final String getSerialNumber();
+    method @NonNull public final String getVersion();
+    method public boolean isEventSupported(int);
+    method public boolean isOperationSupported(int);
+  }
+
+  public class MtpEvent {
+    method public int getDevicePropCode();
+    method public int getEventCode();
+    method public int getObjectFormatCode();
+    method public int getObjectHandle();
+    method public int getObjectPropCode();
+    method public int getParameter1();
+    method public int getParameter2();
+    method public int getParameter3();
+    method public int getStorageId();
+    method public int getTransactionId();
+    field public static final int EVENT_CANCEL_TRANSACTION = 16385; // 0x4001
+    field public static final int EVENT_CAPTURE_COMPLETE = 16397; // 0x400d
+    field public static final int EVENT_DEVICE_INFO_CHANGED = 16392; // 0x4008
+    field public static final int EVENT_DEVICE_PROP_CHANGED = 16390; // 0x4006
+    field public static final int EVENT_DEVICE_RESET = 16395; // 0x400b
+    field public static final int EVENT_OBJECT_ADDED = 16386; // 0x4002
+    field public static final int EVENT_OBJECT_INFO_CHANGED = 16391; // 0x4007
+    field public static final int EVENT_OBJECT_PROP_CHANGED = 51201; // 0xc801
+    field public static final int EVENT_OBJECT_PROP_DESC_CHANGED = 51202; // 0xc802
+    field public static final int EVENT_OBJECT_REFERENCES_CHANGED = 51203; // 0xc803
+    field public static final int EVENT_OBJECT_REMOVED = 16387; // 0x4003
+    field public static final int EVENT_REQUEST_OBJECT_TRANSFER = 16393; // 0x4009
+    field public static final int EVENT_STORAGE_INFO_CHANGED = 16396; // 0x400c
+    field public static final int EVENT_STORE_ADDED = 16388; // 0x4004
+    field public static final int EVENT_STORE_FULL = 16394; // 0x400a
+    field public static final int EVENT_STORE_REMOVED = 16389; // 0x4005
+    field public static final int EVENT_UNDEFINED = 16384; // 0x4000
+    field public static final int EVENT_UNREPORTED_STATUS = 16398; // 0x400e
+  }
+
+  public final class MtpObjectInfo {
+    method public int getAssociationDesc();
+    method public int getAssociationType();
+    method public int getCompressedSize();
+    method public long getCompressedSizeLong();
+    method public long getDateCreated();
+    method public long getDateModified();
+    method public int getFormat();
+    method public int getImagePixDepth();
+    method public long getImagePixDepthLong();
+    method public int getImagePixHeight();
+    method public long getImagePixHeightLong();
+    method public int getImagePixWidth();
+    method public long getImagePixWidthLong();
+    method @NonNull public String getKeywords();
+    method @NonNull public String getName();
+    method public int getObjectHandle();
+    method public int getParent();
+    method public int getProtectionStatus();
+    method public int getSequenceNumber();
+    method public long getSequenceNumberLong();
+    method public int getStorageId();
+    method public int getThumbCompressedSize();
+    method public long getThumbCompressedSizeLong();
+    method public int getThumbFormat();
+    method public int getThumbPixHeight();
+    method public long getThumbPixHeightLong();
+    method public int getThumbPixWidth();
+    method public long getThumbPixWidthLong();
+  }
+
+  public static class MtpObjectInfo.Builder {
+    ctor public MtpObjectInfo.Builder();
+    ctor public MtpObjectInfo.Builder(android.mtp.MtpObjectInfo);
+    method public android.mtp.MtpObjectInfo build();
+    method public android.mtp.MtpObjectInfo.Builder setAssociationDesc(int);
+    method public android.mtp.MtpObjectInfo.Builder setAssociationType(int);
+    method public android.mtp.MtpObjectInfo.Builder setCompressedSize(long);
+    method public android.mtp.MtpObjectInfo.Builder setDateCreated(long);
+    method public android.mtp.MtpObjectInfo.Builder setDateModified(long);
+    method public android.mtp.MtpObjectInfo.Builder setFormat(int);
+    method public android.mtp.MtpObjectInfo.Builder setImagePixDepth(long);
+    method public android.mtp.MtpObjectInfo.Builder setImagePixHeight(long);
+    method public android.mtp.MtpObjectInfo.Builder setImagePixWidth(long);
+    method public android.mtp.MtpObjectInfo.Builder setKeywords(@NonNull String);
+    method public android.mtp.MtpObjectInfo.Builder setName(@NonNull String);
+    method public android.mtp.MtpObjectInfo.Builder setObjectHandle(int);
+    method public android.mtp.MtpObjectInfo.Builder setParent(int);
+    method public android.mtp.MtpObjectInfo.Builder setProtectionStatus(int);
+    method public android.mtp.MtpObjectInfo.Builder setSequenceNumber(long);
+    method public android.mtp.MtpObjectInfo.Builder setStorageId(int);
+    method public android.mtp.MtpObjectInfo.Builder setThumbCompressedSize(long);
+    method public android.mtp.MtpObjectInfo.Builder setThumbFormat(int);
+    method public android.mtp.MtpObjectInfo.Builder setThumbPixHeight(long);
+    method public android.mtp.MtpObjectInfo.Builder setThumbPixWidth(long);
+  }
+
+  public final class MtpStorageInfo {
+    method @NonNull public String getDescription();
+    method public long getFreeSpace();
+    method public long getMaxCapacity();
+    method public int getStorageId();
+    method @NonNull public String getVolumeIdentifier();
+  }
+
+}
+
+package android.net {
+
+  public class Credentials {
+    ctor public Credentials(int, int, int);
+    method public int getGid();
+    method public int getPid();
+    method public int getUid();
+  }
+
+  public final class Ikev2VpnProfile extends android.net.PlatformVpnProfile {
+    method @NonNull public java.util.List<java.lang.String> getAllowedAlgorithms();
+    method public int getMaxMtu();
+    method @Nullable public String getPassword();
+    method @Nullable public byte[] getPresharedKey();
+    method @Nullable public android.net.ProxyInfo getProxyInfo();
+    method @Nullable public java.security.PrivateKey getRsaPrivateKey();
+    method @NonNull public String getServerAddr();
+    method @Nullable public java.security.cert.X509Certificate getServerRootCaCert();
+    method @Nullable public java.security.cert.X509Certificate getUserCert();
+    method @NonNull public String getUserIdentity();
+    method @Nullable public String getUsername();
+    method public boolean isBypassable();
+    method public boolean isMetered();
+  }
+
+  public static final class Ikev2VpnProfile.Builder {
+    ctor public Ikev2VpnProfile.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.net.Ikev2VpnProfile build();
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAllowedAlgorithms(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAuthDigitalSignature(@NonNull java.security.cert.X509Certificate, @NonNull java.security.PrivateKey, @Nullable java.security.cert.X509Certificate);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAuthPsk(@NonNull byte[]);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAuthUsernamePassword(@NonNull String, @NonNull String, @Nullable java.security.cert.X509Certificate);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setBypassable(boolean);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setMaxMtu(int);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setMetered(boolean);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setProxy(@Nullable android.net.ProxyInfo);
+  }
+
+  public final class IpSecAlgorithm implements android.os.Parcelable {
+    ctor public IpSecAlgorithm(@NonNull String, @NonNull byte[]);
+    ctor public IpSecAlgorithm(@NonNull String, @NonNull byte[], int);
+    method public int describeContents();
+    method @NonNull public byte[] getKey();
+    method @NonNull public String getName();
+    method @NonNull public static java.util.Set<java.lang.String> getSupportedAlgorithms();
+    method public int getTruncationLengthBits();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String AUTH_AES_CMAC = "cmac(aes)";
+    field public static final String AUTH_AES_XCBC = "xcbc(aes)";
+    field public static final String AUTH_CRYPT_AES_GCM = "rfc4106(gcm(aes))";
+    field public static final String AUTH_CRYPT_CHACHA20_POLY1305 = "rfc7539esp(chacha20,poly1305)";
+    field public static final String AUTH_HMAC_MD5 = "hmac(md5)";
+    field public static final String AUTH_HMAC_SHA1 = "hmac(sha1)";
+    field public static final String AUTH_HMAC_SHA256 = "hmac(sha256)";
+    field public static final String AUTH_HMAC_SHA384 = "hmac(sha384)";
+    field public static final String AUTH_HMAC_SHA512 = "hmac(sha512)";
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpSecAlgorithm> CREATOR;
+    field public static final String CRYPT_AES_CBC = "cbc(aes)";
+    field public static final String CRYPT_AES_CTR = "rfc3686(ctr(aes))";
+  }
+
+  public final class IpSecManager {
+    method @NonNull public android.net.IpSecManager.SecurityParameterIndex allocateSecurityParameterIndex(@NonNull java.net.InetAddress) throws android.net.IpSecManager.ResourceUnavailableException;
+    method @NonNull public android.net.IpSecManager.SecurityParameterIndex allocateSecurityParameterIndex(@NonNull java.net.InetAddress, int) throws android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
+    method public void applyTransportModeTransform(@NonNull java.net.Socket, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method public void applyTransportModeTransform(@NonNull java.net.DatagramSocket, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method public void applyTransportModeTransform(@NonNull java.io.FileDescriptor, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method @NonNull public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket(int) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
+    method @NonNull public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket() throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
+    method public void removeTransportModeTransforms(@NonNull java.net.Socket) throws java.io.IOException;
+    method public void removeTransportModeTransforms(@NonNull java.net.DatagramSocket) throws java.io.IOException;
+    method public void removeTransportModeTransforms(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    field public static final int DIRECTION_IN = 0; // 0x0
+    field public static final int DIRECTION_OUT = 1; // 0x1
+  }
+
+  public static final class IpSecManager.ResourceUnavailableException extends android.util.AndroidException {
+  }
+
+  public static final class IpSecManager.SecurityParameterIndex implements java.lang.AutoCloseable {
+    method public void close();
+    method public int getSpi();
+  }
+
+  public static final class IpSecManager.SpiUnavailableException extends android.util.AndroidException {
+    method public int getSpi();
+  }
+
+  public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
+    method public void close() throws java.io.IOException;
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public int getPort();
+  }
+
+  public final class IpSecTransform implements java.lang.AutoCloseable {
+    method public void close();
+  }
+
+  public static class IpSecTransform.Builder {
+    ctor public IpSecTransform.Builder(@NonNull android.content.Context);
+    method @NonNull public android.net.IpSecTransform buildTransportModeTransform(@NonNull java.net.InetAddress, @NonNull android.net.IpSecManager.SecurityParameterIndex) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
+    method @NonNull public android.net.IpSecTransform.Builder setAuthenticatedEncryption(@NonNull android.net.IpSecAlgorithm);
+    method @NonNull public android.net.IpSecTransform.Builder setAuthentication(@NonNull android.net.IpSecAlgorithm);
+    method @NonNull public android.net.IpSecTransform.Builder setEncryption(@NonNull android.net.IpSecAlgorithm);
+    method @NonNull public android.net.IpSecTransform.Builder setIpv4Encapsulation(@NonNull android.net.IpSecManager.UdpEncapsulationSocket, int);
+  }
+
+  public class LocalServerSocket implements java.io.Closeable {
+    ctor public LocalServerSocket(String) throws java.io.IOException;
+    ctor public LocalServerSocket(java.io.FileDescriptor) throws java.io.IOException;
+    method public android.net.LocalSocket accept() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public android.net.LocalSocketAddress getLocalSocketAddress();
+  }
+
+  public class LocalSocket implements java.io.Closeable {
+    ctor public LocalSocket();
+    ctor public LocalSocket(int);
+    method public void bind(android.net.LocalSocketAddress) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void connect(android.net.LocalSocketAddress) throws java.io.IOException;
+    method public void connect(android.net.LocalSocketAddress, int) throws java.io.IOException;
+    method public java.io.FileDescriptor[] getAncillaryFileDescriptors() throws java.io.IOException;
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public android.net.LocalSocketAddress getLocalSocketAddress();
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public android.net.Credentials getPeerCredentials() throws java.io.IOException;
+    method public int getReceiveBufferSize() throws java.io.IOException;
+    method public android.net.LocalSocketAddress getRemoteSocketAddress();
+    method public int getSendBufferSize() throws java.io.IOException;
+    method public int getSoTimeout() throws java.io.IOException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public boolean isConnected();
+    method public boolean isInputShutdown();
+    method public boolean isOutputShutdown();
+    method public void setFileDescriptorsForSend(java.io.FileDescriptor[]);
+    method public void setReceiveBufferSize(int) throws java.io.IOException;
+    method public void setSendBufferSize(int) throws java.io.IOException;
+    method public void setSoTimeout(int) throws java.io.IOException;
+    method public void shutdownInput() throws java.io.IOException;
+    method public void shutdownOutput() throws java.io.IOException;
+    field public static final int SOCKET_DGRAM = 1; // 0x1
+    field public static final int SOCKET_SEQPACKET = 3; // 0x3
+    field public static final int SOCKET_STREAM = 2; // 0x2
+  }
+
+  public class LocalSocketAddress {
+    ctor public LocalSocketAddress(String, android.net.LocalSocketAddress.Namespace);
+    ctor public LocalSocketAddress(String);
+    method public String getName();
+    method public android.net.LocalSocketAddress.Namespace getNamespace();
+  }
+
+  public enum LocalSocketAddress.Namespace {
+    enum_constant public static final android.net.LocalSocketAddress.Namespace ABSTRACT;
+    enum_constant public static final android.net.LocalSocketAddress.Namespace FILESYSTEM;
+    enum_constant public static final android.net.LocalSocketAddress.Namespace RESERVED;
+  }
+
+  public class MailTo {
+    method public String getBody();
+    method public String getCc();
+    method public java.util.Map<java.lang.String,java.lang.String> getHeaders();
+    method public String getSubject();
+    method public String getTo();
+    method public static boolean isMailTo(String);
+    method public static android.net.MailTo parse(String) throws android.net.ParseException;
+    field public static final String MAILTO_SCHEME = "mailto:";
+  }
+
+  public abstract class NetworkSpecifier {
+    ctor public NetworkSpecifier();
+  }
+
+  public abstract class PlatformVpnProfile {
+    method public final int getType();
+    method @NonNull public final String getTypeString();
+    field public static final int TYPE_IKEV2_IPSEC_PSK = 7; // 0x7
+    field public static final int TYPE_IKEV2_IPSEC_RSA = 8; // 0x8
+    field public static final int TYPE_IKEV2_IPSEC_USER_PASS = 6; // 0x6
+  }
+
+  public final class Proxy {
+    ctor public Proxy();
+    method @Deprecated public static String getDefaultHost();
+    method @Deprecated public static int getDefaultPort();
+    method @Deprecated public static String getHost(android.content.Context);
+    method @Deprecated public static int getPort(android.content.Context);
+    field public static final String PROXY_CHANGE_ACTION = "android.intent.action.PROXY_CHANGE";
+  }
+
+  @Deprecated public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory {
+    ctor @Deprecated public SSLCertificateSocketFactory(int);
+    method @Deprecated public java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(String, int, java.net.InetAddress, int) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(String, int) throws java.io.IOException;
+    method @Deprecated public static javax.net.SocketFactory getDefault(int);
+    method @Deprecated public static javax.net.ssl.SSLSocketFactory getDefault(int, android.net.SSLSessionCache);
+    method @Deprecated public String[] getDefaultCipherSuites();
+    method @Deprecated public static javax.net.ssl.SSLSocketFactory getInsecure(int, android.net.SSLSessionCache);
+    method @Deprecated public byte[] getNpnSelectedProtocol(java.net.Socket);
+    method @Deprecated public String[] getSupportedCipherSuites();
+    method @Deprecated public void setHostname(java.net.Socket, String);
+    method @Deprecated public void setKeyManagers(javax.net.ssl.KeyManager[]);
+    method @Deprecated public void setNpnProtocols(byte[][]);
+    method @Deprecated public void setTrustManagers(javax.net.ssl.TrustManager[]);
+    method @Deprecated public void setUseSessionTickets(java.net.Socket, boolean);
+  }
+
+  public final class SSLSessionCache {
+    ctor public SSLSessionCache(java.io.File) throws java.io.IOException;
+    ctor public SSLSessionCache(android.content.Context);
+  }
+
+  public final class TelephonyNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getSubscriptionId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TelephonyNetworkSpecifier> CREATOR;
+  }
+
+  public static final class TelephonyNetworkSpecifier.Builder {
+    ctor public TelephonyNetworkSpecifier.Builder();
+    method @NonNull public android.net.TelephonyNetworkSpecifier build();
+    method @NonNull public android.net.TelephonyNetworkSpecifier.Builder setSubscriptionId(int);
+  }
+
+  public class TrafficStats {
+    ctor public TrafficStats();
+    method public static void clearThreadStatsTag();
+    method public static void clearThreadStatsUid();
+    method public static int getAndSetThreadStatsTag(int);
+    method public static long getMobileRxBytes();
+    method public static long getMobileRxPackets();
+    method public static long getMobileTxBytes();
+    method public static long getMobileTxPackets();
+    method public static long getRxBytes(@NonNull String);
+    method public static long getRxPackets(@NonNull String);
+    method public static int getThreadStatsTag();
+    method public static int getThreadStatsUid();
+    method public static long getTotalRxBytes();
+    method public static long getTotalRxPackets();
+    method public static long getTotalTxBytes();
+    method public static long getTotalTxPackets();
+    method public static long getTxBytes(@NonNull String);
+    method public static long getTxPackets(@NonNull String);
+    method public static long getUidRxBytes(int);
+    method public static long getUidRxPackets(int);
+    method @Deprecated public static long getUidTcpRxBytes(int);
+    method @Deprecated public static long getUidTcpRxSegments(int);
+    method @Deprecated public static long getUidTcpTxBytes(int);
+    method @Deprecated public static long getUidTcpTxSegments(int);
+    method public static long getUidTxBytes(int);
+    method public static long getUidTxPackets(int);
+    method @Deprecated public static long getUidUdpRxBytes(int);
+    method @Deprecated public static long getUidUdpRxPackets(int);
+    method @Deprecated public static long getUidUdpTxBytes(int);
+    method @Deprecated public static long getUidUdpTxPackets(int);
+    method public static void incrementOperationCount(int);
+    method public static void incrementOperationCount(int, int);
+    method public static void setThreadStatsTag(int);
+    method public static void setThreadStatsUid(int);
+    method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static void tagFileDescriptor(java.io.FileDescriptor) throws java.io.IOException;
+    method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+    method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static void untagFileDescriptor(java.io.FileDescriptor) throws java.io.IOException;
+    method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
+    field public static final int UNSUPPORTED = -1; // 0xffffffff
+  }
+
+  public abstract class Uri implements java.lang.Comparable<android.net.Uri> android.os.Parcelable {
+    method public abstract android.net.Uri.Builder buildUpon();
+    method public int compareTo(android.net.Uri);
+    method public static String decode(String);
+    method public static String encode(String);
+    method public static String encode(String, String);
+    method public static android.net.Uri fromFile(java.io.File);
+    method public static android.net.Uri fromParts(String, String, String);
+    method @Nullable public abstract String getAuthority();
+    method public boolean getBooleanQueryParameter(String, boolean);
+    method @Nullable public abstract String getEncodedAuthority();
+    method @Nullable public abstract String getEncodedFragment();
+    method @Nullable public abstract String getEncodedPath();
+    method @Nullable public abstract String getEncodedQuery();
+    method public abstract String getEncodedSchemeSpecificPart();
+    method @Nullable public abstract String getEncodedUserInfo();
+    method @Nullable public abstract String getFragment();
+    method @Nullable public abstract String getHost();
+    method @Nullable public abstract String getLastPathSegment();
+    method @Nullable public abstract String getPath();
+    method public abstract java.util.List<java.lang.String> getPathSegments();
+    method public abstract int getPort();
+    method @Nullable public abstract String getQuery();
+    method @Nullable public String getQueryParameter(String);
+    method public java.util.Set<java.lang.String> getQueryParameterNames();
+    method public java.util.List<java.lang.String> getQueryParameters(String);
+    method @Nullable public abstract String getScheme();
+    method public abstract String getSchemeSpecificPart();
+    method @Nullable public abstract String getUserInfo();
+    method public boolean isAbsolute();
+    method public abstract boolean isHierarchical();
+    method public boolean isOpaque();
+    method public abstract boolean isRelative();
+    method public android.net.Uri normalizeScheme();
+    method public static android.net.Uri parse(String);
+    method public abstract String toString();
+    method public static android.net.Uri withAppendedPath(android.net.Uri, String);
+    method public static void writeToParcel(android.os.Parcel, android.net.Uri);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.Uri> CREATOR;
+    field public static final android.net.Uri EMPTY;
+  }
+
+  public static final class Uri.Builder {
+    ctor public Uri.Builder();
+    method public android.net.Uri.Builder appendEncodedPath(String);
+    method public android.net.Uri.Builder appendPath(String);
+    method public android.net.Uri.Builder appendQueryParameter(String, String);
+    method public android.net.Uri.Builder authority(String);
+    method public android.net.Uri build();
+    method public android.net.Uri.Builder clearQuery();
+    method public android.net.Uri.Builder encodedAuthority(String);
+    method public android.net.Uri.Builder encodedFragment(String);
+    method public android.net.Uri.Builder encodedOpaquePart(String);
+    method public android.net.Uri.Builder encodedPath(String);
+    method public android.net.Uri.Builder encodedQuery(String);
+    method public android.net.Uri.Builder fragment(String);
+    method public android.net.Uri.Builder opaquePart(String);
+    method public android.net.Uri.Builder path(String);
+    method public android.net.Uri.Builder query(String);
+    method public android.net.Uri.Builder scheme(String);
+  }
+
+  public class UrlQuerySanitizer {
+    ctor public UrlQuerySanitizer();
+    ctor public UrlQuerySanitizer(String);
+    method protected void addSanitizedEntry(String, String);
+    method protected void clear();
+    method protected int decodeHexDigit(char);
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButNulAndAngleBracketsLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButNulLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButWhitespaceLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllIllegal();
+    method public boolean getAllowUnregisteredParamaters();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAmpAndSpaceLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAmpLegal();
+    method public android.net.UrlQuerySanitizer.ValueSanitizer getEffectiveValueSanitizer(String);
+    method public java.util.List<android.net.UrlQuerySanitizer.ParameterValuePair> getParameterList();
+    method public java.util.Set<java.lang.String> getParameterSet();
+    method public boolean getPreferFirstRepeatedParameter();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getSpaceLegal();
+    method public android.net.UrlQuerySanitizer.ValueSanitizer getUnregisteredParameterValueSanitizer();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getUrlAndSpaceLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getUrlLegal();
+    method public String getValue(String);
+    method public android.net.UrlQuerySanitizer.ValueSanitizer getValueSanitizer(String);
+    method public boolean hasParameter(String);
+    method protected boolean isHexDigit(char);
+    method protected void parseEntry(String, String);
+    method public void parseQuery(String);
+    method public void parseUrl(String);
+    method public void registerParameter(String, android.net.UrlQuerySanitizer.ValueSanitizer);
+    method public void registerParameters(String[], android.net.UrlQuerySanitizer.ValueSanitizer);
+    method public void setAllowUnregisteredParamaters(boolean);
+    method public void setPreferFirstRepeatedParameter(boolean);
+    method public void setUnregisteredParameterValueSanitizer(android.net.UrlQuerySanitizer.ValueSanitizer);
+    method public String unescape(String);
+  }
+
+  public static class UrlQuerySanitizer.IllegalCharacterValueSanitizer implements android.net.UrlQuerySanitizer.ValueSanitizer {
+    ctor public UrlQuerySanitizer.IllegalCharacterValueSanitizer(int);
+    method public String sanitize(String);
+    field public static final int ALL_BUT_NUL_AND_ANGLE_BRACKETS_LEGAL = 1439; // 0x59f
+    field public static final int ALL_BUT_NUL_LEGAL = 1535; // 0x5ff
+    field public static final int ALL_BUT_WHITESPACE_LEGAL = 1532; // 0x5fc
+    field public static final int ALL_ILLEGAL = 0; // 0x0
+    field public static final int ALL_OK = 2047; // 0x7ff
+    field public static final int ALL_WHITESPACE_OK = 3; // 0x3
+    field public static final int AMP_AND_SPACE_LEGAL = 129; // 0x81
+    field public static final int AMP_LEGAL = 128; // 0x80
+    field public static final int AMP_OK = 128; // 0x80
+    field public static final int DQUOTE_OK = 8; // 0x8
+    field public static final int GT_OK = 64; // 0x40
+    field public static final int LT_OK = 32; // 0x20
+    field public static final int NON_7_BIT_ASCII_OK = 4; // 0x4
+    field public static final int NUL_OK = 512; // 0x200
+    field public static final int OTHER_WHITESPACE_OK = 2; // 0x2
+    field public static final int PCT_OK = 256; // 0x100
+    field public static final int SCRIPT_URL_OK = 1024; // 0x400
+    field public static final int SPACE_LEGAL = 1; // 0x1
+    field public static final int SPACE_OK = 1; // 0x1
+    field public static final int SQUOTE_OK = 16; // 0x10
+    field public static final int URL_AND_SPACE_LEGAL = 405; // 0x195
+    field public static final int URL_LEGAL = 404; // 0x194
+  }
+
+  public class UrlQuerySanitizer.ParameterValuePair {
+    ctor public UrlQuerySanitizer.ParameterValuePair(String, String);
+    field public String mParameter;
+    field public String mValue;
+  }
+
+  public static interface UrlQuerySanitizer.ValueSanitizer {
+    method public String sanitize(String);
+  }
+
+  public class VpnManager {
+    method public void deleteProvisionedVpnProfile();
+    method @Nullable public android.content.Intent provisionVpnProfile(@NonNull android.net.PlatformVpnProfile);
+    method public void startProvisionedVpnProfile();
+    method public void stopProvisionedVpnProfile();
+  }
+
+  public class VpnService extends android.app.Service {
+    ctor public VpnService();
+    method public final boolean isAlwaysOn();
+    method public final boolean isLockdownEnabled();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onRevoke();
+    method public static android.content.Intent prepare(android.content.Context);
+    method public boolean protect(int);
+    method public boolean protect(java.net.Socket);
+    method public boolean protect(java.net.DatagramSocket);
+    method public boolean setUnderlyingNetworks(android.net.Network[]);
+    field public static final String SERVICE_INTERFACE = "android.net.VpnService";
+    field public static final String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON";
+  }
+
+  public class VpnService.Builder {
+    ctor public VpnService.Builder();
+    method @NonNull public android.net.VpnService.Builder addAddress(@NonNull java.net.InetAddress, int);
+    method @NonNull public android.net.VpnService.Builder addAddress(@NonNull String, int);
+    method @NonNull public android.net.VpnService.Builder addAllowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.net.VpnService.Builder addDisallowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull String);
+    method @NonNull public android.net.VpnService.Builder addRoute(@NonNull java.net.InetAddress, int);
+    method @NonNull public android.net.VpnService.Builder addRoute(@NonNull String, int);
+    method @NonNull public android.net.VpnService.Builder addSearchDomain(@NonNull String);
+    method @NonNull public android.net.VpnService.Builder allowBypass();
+    method @NonNull public android.net.VpnService.Builder allowFamily(int);
+    method @Nullable public android.os.ParcelFileDescriptor establish();
+    method @NonNull public android.net.VpnService.Builder setBlocking(boolean);
+    method @NonNull public android.net.VpnService.Builder setConfigureIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.net.VpnService.Builder setHttpProxy(@NonNull android.net.ProxyInfo);
+    method @NonNull public android.net.VpnService.Builder setMetered(boolean);
+    method @NonNull public android.net.VpnService.Builder setMtu(int);
+    method @NonNull public android.net.VpnService.Builder setSession(@NonNull String);
+    method @NonNull public android.net.VpnService.Builder setUnderlyingNetworks(@Nullable android.net.Network[]);
+  }
+
+}
+
+package android.net.http {
+
+  public final class HttpResponseCache extends java.net.ResponseCache implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public void delete() throws java.io.IOException;
+    method public void flush();
+    method public java.net.CacheResponse get(java.net.URI, String, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public int getHitCount();
+    method public static android.net.http.HttpResponseCache getInstalled();
+    method public int getNetworkCount();
+    method public int getRequestCount();
+    method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException;
+    method public long maxSize();
+    method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
+    method public long size();
+  }
+
+  public class SslCertificate {
+    ctor @Deprecated public SslCertificate(String, String, String, String);
+    ctor @Deprecated public SslCertificate(String, String, java.util.Date, java.util.Date);
+    ctor public SslCertificate(java.security.cert.X509Certificate);
+    method public android.net.http.SslCertificate.DName getIssuedBy();
+    method public android.net.http.SslCertificate.DName getIssuedTo();
+    method @Deprecated public String getValidNotAfter();
+    method public java.util.Date getValidNotAfterDate();
+    method @Deprecated public String getValidNotBefore();
+    method public java.util.Date getValidNotBeforeDate();
+    method @Nullable public java.security.cert.X509Certificate getX509Certificate();
+    method public static android.net.http.SslCertificate restoreState(android.os.Bundle);
+    method public static android.os.Bundle saveState(android.net.http.SslCertificate);
+  }
+
+  public class SslCertificate.DName {
+    ctor public SslCertificate.DName(String);
+    method public String getCName();
+    method public String getDName();
+    method public String getOName();
+    method public String getUName();
+  }
+
+  public class SslError {
+    ctor @Deprecated public SslError(int, android.net.http.SslCertificate);
+    ctor @Deprecated public SslError(int, java.security.cert.X509Certificate);
+    ctor public SslError(int, android.net.http.SslCertificate, String);
+    ctor public SslError(int, java.security.cert.X509Certificate, String);
+    method public boolean addError(int);
+    method public android.net.http.SslCertificate getCertificate();
+    method public int getPrimaryError();
+    method public String getUrl();
+    method public boolean hasError(int);
+    field public static final int SSL_DATE_INVALID = 4; // 0x4
+    field public static final int SSL_EXPIRED = 1; // 0x1
+    field public static final int SSL_IDMISMATCH = 2; // 0x2
+    field public static final int SSL_INVALID = 5; // 0x5
+    field @Deprecated public static final int SSL_MAX_ERROR = 6; // 0x6
+    field public static final int SSL_NOTYETVALID = 0; // 0x0
+    field public static final int SSL_UNTRUSTED = 3; // 0x3
+  }
+
+  public class X509TrustManagerExtensions {
+    ctor public X509TrustManagerExtensions(javax.net.ssl.X509TrustManager) throws java.lang.IllegalArgumentException;
+    method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], String, String) throws java.security.cert.CertificateException;
+    method public boolean isSameTrustConfiguration(String, String);
+    method public boolean isUserAddedCertificate(java.security.cert.X509Certificate);
+  }
+
+}
+
+package android.net.nsd {
+
+  public final class NsdManager {
+    method public void discoverServices(String, int, android.net.nsd.NsdManager.DiscoveryListener);
+    method public void registerService(android.net.nsd.NsdServiceInfo, int, android.net.nsd.NsdManager.RegistrationListener);
+    method public void resolveService(android.net.nsd.NsdServiceInfo, android.net.nsd.NsdManager.ResolveListener);
+    method public void stopServiceDiscovery(android.net.nsd.NsdManager.DiscoveryListener);
+    method public void unregisterService(android.net.nsd.NsdManager.RegistrationListener);
+    field public static final String ACTION_NSD_STATE_CHANGED = "android.net.nsd.STATE_CHANGED";
+    field public static final String EXTRA_NSD_STATE = "nsd_state";
+    field public static final int FAILURE_ALREADY_ACTIVE = 3; // 0x3
+    field public static final int FAILURE_INTERNAL_ERROR = 0; // 0x0
+    field public static final int FAILURE_MAX_LIMIT = 4; // 0x4
+    field public static final int NSD_STATE_DISABLED = 1; // 0x1
+    field public static final int NSD_STATE_ENABLED = 2; // 0x2
+    field public static final int PROTOCOL_DNS_SD = 1; // 0x1
+  }
+
+  public static interface NsdManager.DiscoveryListener {
+    method public void onDiscoveryStarted(String);
+    method public void onDiscoveryStopped(String);
+    method public void onServiceFound(android.net.nsd.NsdServiceInfo);
+    method public void onServiceLost(android.net.nsd.NsdServiceInfo);
+    method public void onStartDiscoveryFailed(String, int);
+    method public void onStopDiscoveryFailed(String, int);
+  }
+
+  public static interface NsdManager.RegistrationListener {
+    method public void onRegistrationFailed(android.net.nsd.NsdServiceInfo, int);
+    method public void onServiceRegistered(android.net.nsd.NsdServiceInfo);
+    method public void onServiceUnregistered(android.net.nsd.NsdServiceInfo);
+    method public void onUnregistrationFailed(android.net.nsd.NsdServiceInfo, int);
+  }
+
+  public static interface NsdManager.ResolveListener {
+    method public void onResolveFailed(android.net.nsd.NsdServiceInfo, int);
+    method public void onServiceResolved(android.net.nsd.NsdServiceInfo);
+  }
+
+  public final class NsdServiceInfo implements android.os.Parcelable {
+    ctor public NsdServiceInfo();
+    method public int describeContents();
+    method public java.util.Map<java.lang.String,byte[]> getAttributes();
+    method public java.net.InetAddress getHost();
+    method public int getPort();
+    method public String getServiceName();
+    method public String getServiceType();
+    method public void removeAttribute(String);
+    method public void setAttribute(String, String);
+    method public void setHost(java.net.InetAddress);
+    method public void setPort(int);
+    method public void setServiceName(String);
+    method public void setServiceType(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.nsd.NsdServiceInfo> CREATOR;
+  }
+
+}
+
+package android.net.rtp {
+
+  @Deprecated public class AudioCodec {
+    method @Deprecated public static android.net.rtp.AudioCodec getCodec(int, String, String);
+    method @Deprecated public static android.net.rtp.AudioCodec[] getCodecs();
+    field @Deprecated public static final android.net.rtp.AudioCodec AMR;
+    field @Deprecated public static final android.net.rtp.AudioCodec GSM;
+    field @Deprecated public static final android.net.rtp.AudioCodec GSM_EFR;
+    field @Deprecated public static final android.net.rtp.AudioCodec PCMA;
+    field @Deprecated public static final android.net.rtp.AudioCodec PCMU;
+    field @Deprecated public final String fmtp;
+    field @Deprecated public final String rtpmap;
+    field @Deprecated public final int type;
+  }
+
+  @Deprecated public class AudioGroup {
+    ctor @Deprecated public AudioGroup();
+    ctor @Deprecated public AudioGroup(@NonNull android.content.Context);
+    method @Deprecated public void clear();
+    method @Deprecated public int getMode();
+    method @Deprecated public android.net.rtp.AudioStream[] getStreams();
+    method @Deprecated public void sendDtmf(int);
+    method @Deprecated public void setMode(int);
+    field @Deprecated public static final int MODE_ECHO_SUPPRESSION = 3; // 0x3
+    field @Deprecated public static final int MODE_MUTED = 1; // 0x1
+    field @Deprecated public static final int MODE_NORMAL = 2; // 0x2
+    field @Deprecated public static final int MODE_ON_HOLD = 0; // 0x0
+  }
+
+  @Deprecated public class AudioStream extends android.net.rtp.RtpStream {
+    ctor @Deprecated public AudioStream(java.net.InetAddress) throws java.net.SocketException;
+    method @Deprecated public android.net.rtp.AudioCodec getCodec();
+    method @Deprecated public int getDtmfType();
+    method @Deprecated public android.net.rtp.AudioGroup getGroup();
+    method @Deprecated public final boolean isBusy();
+    method @Deprecated public void join(android.net.rtp.AudioGroup);
+    method @Deprecated public void setCodec(android.net.rtp.AudioCodec);
+    method @Deprecated public void setDtmfType(int);
+  }
+
+  @Deprecated public class RtpStream {
+    method @Deprecated public void associate(java.net.InetAddress, int);
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public int getLocalPort();
+    method @Deprecated public int getMode();
+    method @Deprecated public java.net.InetAddress getRemoteAddress();
+    method @Deprecated public int getRemotePort();
+    method @Deprecated public boolean isBusy();
+    method @Deprecated public void release();
+    method @Deprecated public void setMode(int);
+    field @Deprecated public static final int MODE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int MODE_RECEIVE_ONLY = 2; // 0x2
+    field @Deprecated public static final int MODE_SEND_ONLY = 1; // 0x1
+  }
+
+}
+
+package android.net.sip {
+
+  @Deprecated public class SipAudioCall {
+    ctor @Deprecated public SipAudioCall(android.content.Context, android.net.sip.SipProfile);
+    method @Deprecated public void answerCall(int) throws android.net.sip.SipException;
+    method @Deprecated public void attachCall(android.net.sip.SipSession, String) throws android.net.sip.SipException;
+    method @Deprecated public void close();
+    method @Deprecated public void continueCall(int) throws android.net.sip.SipException;
+    method @Deprecated public void endCall() throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipProfile getLocalProfile();
+    method @Deprecated public android.net.sip.SipProfile getPeerProfile();
+    method @Deprecated public int getState();
+    method @Deprecated public void holdCall(int) throws android.net.sip.SipException;
+    method @Deprecated public boolean isInCall();
+    method @Deprecated public boolean isMuted();
+    method @Deprecated public boolean isOnHold();
+    method @Deprecated public void makeCall(android.net.sip.SipProfile, android.net.sip.SipSession, int) throws android.net.sip.SipException;
+    method @Deprecated public void sendDtmf(int);
+    method @Deprecated public void sendDtmf(int, android.os.Message);
+    method @Deprecated public void setListener(android.net.sip.SipAudioCall.Listener);
+    method @Deprecated public void setListener(android.net.sip.SipAudioCall.Listener, boolean);
+    method @Deprecated public void setSpeakerMode(boolean);
+    method @Deprecated public void startAudio();
+    method @Deprecated public void toggleMute();
+  }
+
+  @Deprecated public static class SipAudioCall.Listener {
+    ctor @Deprecated public SipAudioCall.Listener();
+    method @Deprecated public void onCallBusy(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCallEnded(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCallEstablished(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCallHeld(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCalling(android.net.sip.SipAudioCall);
+    method @Deprecated public void onChanged(android.net.sip.SipAudioCall);
+    method @Deprecated public void onError(android.net.sip.SipAudioCall, int, String);
+    method @Deprecated public void onReadyToCall(android.net.sip.SipAudioCall);
+    method @Deprecated public void onRinging(android.net.sip.SipAudioCall, android.net.sip.SipProfile);
+    method @Deprecated public void onRingingBack(android.net.sip.SipAudioCall);
+  }
+
+  @Deprecated public class SipErrorCode {
+    method @Deprecated public static String toString(int);
+    field @Deprecated public static final int CLIENT_ERROR = -4; // 0xfffffffc
+    field @Deprecated public static final int CROSS_DOMAIN_AUTHENTICATION = -11; // 0xfffffff5
+    field @Deprecated public static final int DATA_CONNECTION_LOST = -10; // 0xfffffff6
+    field @Deprecated public static final int INVALID_CREDENTIALS = -8; // 0xfffffff8
+    field @Deprecated public static final int INVALID_REMOTE_URI = -6; // 0xfffffffa
+    field @Deprecated public static final int IN_PROGRESS = -9; // 0xfffffff7
+    field @Deprecated public static final int NO_ERROR = 0; // 0x0
+    field @Deprecated public static final int PEER_NOT_REACHABLE = -7; // 0xfffffff9
+    field @Deprecated public static final int SERVER_ERROR = -2; // 0xfffffffe
+    field @Deprecated public static final int SERVER_UNREACHABLE = -12; // 0xfffffff4
+    field @Deprecated public static final int SOCKET_ERROR = -1; // 0xffffffff
+    field @Deprecated public static final int TIME_OUT = -5; // 0xfffffffb
+    field @Deprecated public static final int TRANSACTION_TERMINTED = -3; // 0xfffffffd
+  }
+
+  @Deprecated public class SipException extends java.lang.Exception {
+    ctor @Deprecated public SipException();
+    ctor @Deprecated public SipException(String);
+    ctor @Deprecated public SipException(String, Throwable);
+  }
+
+  @Deprecated public class SipManager {
+    method @Deprecated public void close(String) throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipSession createSipSession(android.net.sip.SipProfile, android.net.sip.SipSession.Listener) throws android.net.sip.SipException;
+    method @Deprecated public static String getCallId(android.content.Intent);
+    method @Deprecated public static String getOfferSessionDescription(android.content.Intent);
+    method @Deprecated public android.net.sip.SipSession getSessionFor(android.content.Intent) throws android.net.sip.SipException;
+    method @Deprecated public static boolean isApiSupported(android.content.Context);
+    method @Deprecated public static boolean isIncomingCallIntent(android.content.Intent);
+    method @Deprecated public boolean isOpened(String) throws android.net.sip.SipException;
+    method @Deprecated public boolean isRegistered(String) throws android.net.sip.SipException;
+    method @Deprecated public static boolean isSipWifiOnly(android.content.Context);
+    method @Deprecated public static boolean isVoipSupported(android.content.Context);
+    method @Deprecated public android.net.sip.SipAudioCall makeAudioCall(android.net.sip.SipProfile, android.net.sip.SipProfile, android.net.sip.SipAudioCall.Listener, int) throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipAudioCall makeAudioCall(String, String, android.net.sip.SipAudioCall.Listener, int) throws android.net.sip.SipException;
+    method @Deprecated public static android.net.sip.SipManager newInstance(android.content.Context);
+    method @Deprecated public void open(android.net.sip.SipProfile) throws android.net.sip.SipException;
+    method @Deprecated public void open(android.net.sip.SipProfile, android.app.PendingIntent, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    method @Deprecated public void register(android.net.sip.SipProfile, int, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    method @Deprecated public void setRegistrationListener(String, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipAudioCall takeAudioCall(android.content.Intent, android.net.sip.SipAudioCall.Listener) throws android.net.sip.SipException;
+    method @Deprecated public void unregister(android.net.sip.SipProfile, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    field @Deprecated public static final String EXTRA_CALL_ID = "android:sipCallID";
+    field @Deprecated public static final String EXTRA_OFFER_SD = "android:sipOfferSD";
+    field @Deprecated public static final int INCOMING_CALL_RESULT_CODE = 101; // 0x65
+  }
+
+  @Deprecated public class SipProfile implements java.lang.Cloneable android.os.Parcelable java.io.Serializable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public String getAuthUserName();
+    method @Deprecated public boolean getAutoRegistration();
+    method @Deprecated public String getDisplayName();
+    method @Deprecated public String getPassword();
+    method @Deprecated public int getPort();
+    method @Deprecated public String getProfileName();
+    method @Deprecated public String getProtocol();
+    method @Deprecated public String getProxyAddress();
+    method @Deprecated public boolean getSendKeepAlive();
+    method @Deprecated public String getSipDomain();
+    method @Deprecated public String getUriString();
+    method @Deprecated public String getUserName();
+    method @Deprecated public void setCallingUid(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final android.os.Parcelable.Creator<android.net.sip.SipProfile> CREATOR;
+  }
+
+  @Deprecated public static class SipProfile.Builder {
+    ctor @Deprecated public SipProfile.Builder(android.net.sip.SipProfile);
+    ctor @Deprecated public SipProfile.Builder(String) throws java.text.ParseException;
+    ctor @Deprecated public SipProfile.Builder(String, String) throws java.text.ParseException;
+    method @Deprecated public android.net.sip.SipProfile build();
+    method @Deprecated public android.net.sip.SipProfile.Builder setAuthUserName(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setAutoRegistration(boolean);
+    method @Deprecated public android.net.sip.SipProfile.Builder setDisplayName(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setOutboundProxy(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setPassword(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setPort(int) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.net.sip.SipProfile.Builder setProfileName(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setProtocol(String) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.net.sip.SipProfile.Builder setSendKeepAlive(boolean);
+  }
+
+  @Deprecated public interface SipRegistrationListener {
+    method @Deprecated public void onRegistering(String);
+    method @Deprecated public void onRegistrationDone(String, long);
+    method @Deprecated public void onRegistrationFailed(String, int, String);
+  }
+
+  @Deprecated public final class SipSession {
+    method @Deprecated public void answerCall(String, int);
+    method @Deprecated public void changeCall(String, int);
+    method @Deprecated public void endCall();
+    method @Deprecated public String getCallId();
+    method @Deprecated public String getLocalIp();
+    method @Deprecated public android.net.sip.SipProfile getLocalProfile();
+    method @Deprecated public android.net.sip.SipProfile getPeerProfile();
+    method @Deprecated public int getState();
+    method @Deprecated public boolean isInCall();
+    method @Deprecated public void makeCall(android.net.sip.SipProfile, String, int);
+    method @Deprecated public void register(int);
+    method @Deprecated public void setListener(android.net.sip.SipSession.Listener);
+    method @Deprecated public void unregister();
+  }
+
+  @Deprecated public static class SipSession.Listener {
+    ctor @Deprecated public SipSession.Listener();
+    method @Deprecated public void onCallBusy(android.net.sip.SipSession);
+    method @Deprecated public void onCallChangeFailed(android.net.sip.SipSession, int, String);
+    method @Deprecated public void onCallEnded(android.net.sip.SipSession);
+    method @Deprecated public void onCallEstablished(android.net.sip.SipSession, String);
+    method @Deprecated public void onCalling(android.net.sip.SipSession);
+    method @Deprecated public void onError(android.net.sip.SipSession, int, String);
+    method @Deprecated public void onRegistering(android.net.sip.SipSession);
+    method @Deprecated public void onRegistrationDone(android.net.sip.SipSession, int);
+    method @Deprecated public void onRegistrationFailed(android.net.sip.SipSession, int, String);
+    method @Deprecated public void onRegistrationTimeout(android.net.sip.SipSession);
+    method @Deprecated public void onRinging(android.net.sip.SipSession, android.net.sip.SipProfile, String);
+    method @Deprecated public void onRingingBack(android.net.sip.SipSession);
+  }
+
+  @Deprecated public static class SipSession.State {
+    method @Deprecated public static String toString(int);
+    field @Deprecated public static final int DEREGISTERING = 2; // 0x2
+    field @Deprecated public static final int INCOMING_CALL = 3; // 0x3
+    field @Deprecated public static final int INCOMING_CALL_ANSWERING = 4; // 0x4
+    field @Deprecated public static final int IN_CALL = 8; // 0x8
+    field @Deprecated public static final int NOT_DEFINED = 101; // 0x65
+    field @Deprecated public static final int OUTGOING_CALL = 5; // 0x5
+    field @Deprecated public static final int OUTGOING_CALL_CANCELING = 7; // 0x7
+    field @Deprecated public static final int OUTGOING_CALL_RING_BACK = 6; // 0x6
+    field @Deprecated public static final int PINGING = 9; // 0x9
+    field @Deprecated public static final int READY_TO_CALL = 0; // 0x0
+    field @Deprecated public static final int REGISTERING = 1; // 0x1
+  }
+
+}
+
+package android.net.vcn {
+
+  public final class VcnConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.net.vcn.VcnGatewayConnectionConfig> getGatewayConnectionConfigs();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.vcn.VcnConfig> CREATOR;
+  }
+
+  public static final class VcnConfig.Builder {
+    ctor public VcnConfig.Builder(@NonNull android.content.Context);
+    method @NonNull public android.net.vcn.VcnConfig.Builder addGatewayConnectionConfig(@NonNull android.net.vcn.VcnGatewayConnectionConfig);
+    method @NonNull public android.net.vcn.VcnConfig build();
+  }
+
+  public final class VcnGatewayConnectionConfig {
+    method @NonNull public int[] getExposedCapabilities();
+    method @NonNull public String getGatewayConnectionName();
+    method @IntRange(from=0x500) public int getMaxMtu();
+    method @NonNull public long[] getRetryIntervalsMillis();
+  }
+
+  public static final class VcnGatewayConnectionConfig.Builder {
+    ctor public VcnGatewayConnectionConfig.Builder(@NonNull String, @NonNull android.net.ipsec.ike.IkeTunnelConnectionParams);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder addExposedCapability(int);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig build();
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder removeExposedCapability(int);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder setMaxMtu(@IntRange(from=0x500) int);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder setRetryIntervalsMillis(@NonNull long[]);
+  }
+
+  public class VcnManager {
+    method @RequiresPermission("carrier privileges") public void clearVcnConfig(@NonNull android.os.ParcelUuid) throws java.io.IOException;
+    method @NonNull public java.util.List<android.os.ParcelUuid> getConfiguredSubscriptionGroups();
+    method public void registerVcnStatusCallback(@NonNull android.os.ParcelUuid, @NonNull java.util.concurrent.Executor, @NonNull android.net.vcn.VcnManager.VcnStatusCallback);
+    method @RequiresPermission("carrier privileges") public void setVcnConfig(@NonNull android.os.ParcelUuid, @NonNull android.net.vcn.VcnConfig) throws java.io.IOException;
+    method public void unregisterVcnStatusCallback(@NonNull android.net.vcn.VcnManager.VcnStatusCallback);
+    field public static final int VCN_ERROR_CODE_CONFIG_ERROR = 1; // 0x1
+    field public static final int VCN_ERROR_CODE_INTERNAL_ERROR = 0; // 0x0
+    field public static final int VCN_ERROR_CODE_NETWORK_ERROR = 2; // 0x2
+    field public static final int VCN_STATUS_CODE_ACTIVE = 2; // 0x2
+    field public static final int VCN_STATUS_CODE_INACTIVE = 1; // 0x1
+    field public static final int VCN_STATUS_CODE_NOT_CONFIGURED = 0; // 0x0
+    field public static final int VCN_STATUS_CODE_SAFE_MODE = 3; // 0x3
+  }
+
+  public abstract static class VcnManager.VcnStatusCallback {
+    ctor public VcnManager.VcnStatusCallback();
+    method public abstract void onGatewayConnectionError(@NonNull String, int, @Nullable Throwable);
+    method public abstract void onStatusChanged(int);
+  }
+
+}
+
+package android.nfc {
+
+  public class FormatException extends java.lang.Exception {
+    ctor public FormatException();
+    ctor public FormatException(String);
+    ctor public FormatException(String, Throwable);
+  }
+
+  public final class NdefMessage implements android.os.Parcelable {
+    ctor public NdefMessage(byte[]) throws android.nfc.FormatException;
+    ctor public NdefMessage(android.nfc.NdefRecord, android.nfc.NdefRecord...);
+    ctor public NdefMessage(android.nfc.NdefRecord[]);
+    method public int describeContents();
+    method public int getByteArrayLength();
+    method public android.nfc.NdefRecord[] getRecords();
+    method public byte[] toByteArray();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.nfc.NdefMessage> CREATOR;
+  }
+
+  public final class NdefRecord implements android.os.Parcelable {
+    ctor public NdefRecord(short, byte[], byte[], byte[]);
+    ctor @Deprecated public NdefRecord(byte[]) throws android.nfc.FormatException;
+    method public static android.nfc.NdefRecord createApplicationRecord(String);
+    method public static android.nfc.NdefRecord createExternal(String, String, byte[]);
+    method public static android.nfc.NdefRecord createMime(String, byte[]);
+    method public static android.nfc.NdefRecord createTextRecord(String, String);
+    method public static android.nfc.NdefRecord createUri(android.net.Uri);
+    method public static android.nfc.NdefRecord createUri(String);
+    method public int describeContents();
+    method public byte[] getId();
+    method public byte[] getPayload();
+    method public short getTnf();
+    method public byte[] getType();
+    method @Deprecated public byte[] toByteArray();
+    method public String toMimeType();
+    method public android.net.Uri toUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.nfc.NdefRecord> CREATOR;
+    field public static final byte[] RTD_ALTERNATIVE_CARRIER;
+    field public static final byte[] RTD_HANDOVER_CARRIER;
+    field public static final byte[] RTD_HANDOVER_REQUEST;
+    field public static final byte[] RTD_HANDOVER_SELECT;
+    field public static final byte[] RTD_SMART_POSTER;
+    field public static final byte[] RTD_TEXT;
+    field public static final byte[] RTD_URI;
+    field public static final short TNF_ABSOLUTE_URI = 3; // 0x3
+    field public static final short TNF_EMPTY = 0; // 0x0
+    field public static final short TNF_EXTERNAL_TYPE = 4; // 0x4
+    field public static final short TNF_MIME_MEDIA = 2; // 0x2
+    field public static final short TNF_UNCHANGED = 6; // 0x6
+    field public static final short TNF_UNKNOWN = 5; // 0x5
+    field public static final short TNF_WELL_KNOWN = 1; // 0x1
+  }
+
+  public final class NfcAdapter {
+    method public void disableForegroundDispatch(android.app.Activity);
+    method @Deprecated public void disableForegroundNdefPush(android.app.Activity);
+    method public void disableReaderMode(android.app.Activity);
+    method public void enableForegroundDispatch(android.app.Activity, android.app.PendingIntent, android.content.IntentFilter[], String[][]);
+    method @Deprecated public void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage);
+    method public void enableReaderMode(android.app.Activity, android.nfc.NfcAdapter.ReaderCallback, int, android.os.Bundle);
+    method public static android.nfc.NfcAdapter getDefaultAdapter(android.content.Context);
+    method public boolean ignore(android.nfc.Tag, int, android.nfc.NfcAdapter.OnTagRemovedListener, android.os.Handler);
+    method @Deprecated public boolean invokeBeam(android.app.Activity);
+    method public boolean isEnabled();
+    method @Deprecated public boolean isNdefPushEnabled();
+    method public boolean isSecureNfcEnabled();
+    method public boolean isSecureNfcSupported();
+    method @Deprecated public void setBeamPushUris(android.net.Uri[], android.app.Activity);
+    method @Deprecated public void setBeamPushUrisCallback(android.nfc.NfcAdapter.CreateBeamUrisCallback, android.app.Activity);
+    method @Deprecated public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...);
+    method @Deprecated public void setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...);
+    method @Deprecated public void setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...);
+    field public static final String ACTION_ADAPTER_STATE_CHANGED = "android.nfc.action.ADAPTER_STATE_CHANGED";
+    field public static final String ACTION_NDEF_DISCOVERED = "android.nfc.action.NDEF_DISCOVERED";
+    field @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public static final String ACTION_PREFERRED_PAYMENT_CHANGED = "android.nfc.action.PREFERRED_PAYMENT_CHANGED";
+    field public static final String ACTION_TAG_DISCOVERED = "android.nfc.action.TAG_DISCOVERED";
+    field public static final String ACTION_TECH_DISCOVERED = "android.nfc.action.TECH_DISCOVERED";
+    field @RequiresPermission(android.Manifest.permission.NFC_TRANSACTION_EVENT) public static final String ACTION_TRANSACTION_DETECTED = "android.nfc.action.TRANSACTION_DETECTED";
+    field public static final String EXTRA_ADAPTER_STATE = "android.nfc.extra.ADAPTER_STATE";
+    field public static final String EXTRA_AID = "android.nfc.extra.AID";
+    field public static final String EXTRA_DATA = "android.nfc.extra.DATA";
+    field public static final String EXTRA_ID = "android.nfc.extra.ID";
+    field public static final String EXTRA_NDEF_MESSAGES = "android.nfc.extra.NDEF_MESSAGES";
+    field public static final String EXTRA_PREFERRED_PAYMENT_CHANGED_REASON = "android.nfc.extra.PREFERRED_PAYMENT_CHANGED_REASON";
+    field public static final String EXTRA_READER_PRESENCE_CHECK_DELAY = "presence";
+    field public static final String EXTRA_SECURE_ELEMENT_NAME = "android.nfc.extra.SECURE_ELEMENT_NAME";
+    field public static final String EXTRA_TAG = "android.nfc.extra.TAG";
+    field public static final int FLAG_READER_NFC_A = 1; // 0x1
+    field public static final int FLAG_READER_NFC_B = 2; // 0x2
+    field public static final int FLAG_READER_NFC_BARCODE = 16; // 0x10
+    field public static final int FLAG_READER_NFC_F = 4; // 0x4
+    field public static final int FLAG_READER_NFC_V = 8; // 0x8
+    field public static final int FLAG_READER_NO_PLATFORM_SOUNDS = 256; // 0x100
+    field public static final int FLAG_READER_SKIP_NDEF_CHECK = 128; // 0x80
+    field public static final int PREFERRED_PAYMENT_CHANGED = 2; // 0x2
+    field public static final int PREFERRED_PAYMENT_LOADED = 1; // 0x1
+    field public static final int PREFERRED_PAYMENT_UPDATED = 3; // 0x3
+    field public static final int STATE_OFF = 1; // 0x1
+    field public static final int STATE_ON = 3; // 0x3
+    field public static final int STATE_TURNING_OFF = 4; // 0x4
+    field public static final int STATE_TURNING_ON = 2; // 0x2
+  }
+
+  @Deprecated public static interface NfcAdapter.CreateBeamUrisCallback {
+    method @Deprecated public android.net.Uri[] createBeamUris(android.nfc.NfcEvent);
+  }
+
+  @Deprecated public static interface NfcAdapter.CreateNdefMessageCallback {
+    method @Deprecated public android.nfc.NdefMessage createNdefMessage(android.nfc.NfcEvent);
+  }
+
+  @Deprecated public static interface NfcAdapter.OnNdefPushCompleteCallback {
+    method @Deprecated public void onNdefPushComplete(android.nfc.NfcEvent);
+  }
+
+  public static interface NfcAdapter.OnTagRemovedListener {
+    method public void onTagRemoved();
+  }
+
+  public static interface NfcAdapter.ReaderCallback {
+    method public void onTagDiscovered(android.nfc.Tag);
+  }
+
+  public final class NfcEvent {
+    field public final android.nfc.NfcAdapter nfcAdapter;
+    field public final int peerLlcpMajorVersion;
+    field public final int peerLlcpMinorVersion;
+  }
+
+  public final class NfcManager {
+    method public android.nfc.NfcAdapter getDefaultAdapter();
+  }
+
+  public final class Tag implements android.os.Parcelable {
+    method public int describeContents();
+    method public byte[] getId();
+    method public String[] getTechList();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.nfc.Tag> CREATOR;
+  }
+
+  public class TagLostException extends java.io.IOException {
+    ctor public TagLostException();
+    ctor public TagLostException(String);
+  }
+
+}
+
+package android.nfc.cardemulation {
+
+  public final class CardEmulation {
+    method public boolean categoryAllowsForegroundPreference(String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public java.util.List<java.lang.String> getAidsForPreferredPaymentService();
+    method public java.util.List<java.lang.String> getAidsForService(android.content.ComponentName, String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public CharSequence getDescriptionForPreferredPaymentService();
+    method public static android.nfc.cardemulation.CardEmulation getInstance(android.nfc.NfcAdapter);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public String getRouteDestinationForPreferredPaymentService();
+    method public int getSelectionModeForCategory(String);
+    method public boolean isDefaultServiceForAid(android.content.ComponentName, String);
+    method public boolean isDefaultServiceForCategory(android.content.ComponentName, String);
+    method public boolean registerAidsForService(android.content.ComponentName, String, java.util.List<java.lang.String>);
+    method public boolean removeAidsForService(android.content.ComponentName, String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NFC) public boolean setOffHostForService(@NonNull android.content.ComponentName, @NonNull String);
+    method public boolean setPreferredService(android.app.Activity, android.content.ComponentName);
+    method public boolean supportsAidPrefixRegistration();
+    method @NonNull @RequiresPermission(android.Manifest.permission.NFC) public boolean unsetOffHostForService(@NonNull android.content.ComponentName);
+    method public boolean unsetPreferredService(android.app.Activity);
+    field public static final String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT";
+    field public static final String CATEGORY_OTHER = "other";
+    field public static final String CATEGORY_PAYMENT = "payment";
+    field public static final String EXTRA_CATEGORY = "category";
+    field public static final String EXTRA_SERVICE_COMPONENT = "component";
+    field public static final int SELECTION_MODE_ALWAYS_ASK = 1; // 0x1
+    field public static final int SELECTION_MODE_ASK_IF_CONFLICT = 2; // 0x2
+    field public static final int SELECTION_MODE_PREFER_DEFAULT = 0; // 0x0
+  }
+
+  public abstract class HostApduService extends android.app.Service {
+    ctor public HostApduService();
+    method public final void notifyUnhandled();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onDeactivated(int);
+    method public abstract byte[] processCommandApdu(byte[], android.os.Bundle);
+    method public final void sendResponseApdu(byte[]);
+    field public static final int DEACTIVATION_DESELECTED = 1; // 0x1
+    field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0
+    field public static final String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_APDU_SERVICE";
+    field public static final String SERVICE_META_DATA = "android.nfc.cardemulation.host_apdu_service";
+  }
+
+  public abstract class HostNfcFService extends android.app.Service {
+    ctor public HostNfcFService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onDeactivated(int);
+    method public abstract byte[] processNfcFPacket(byte[], android.os.Bundle);
+    method public final void sendResponsePacket(byte[]);
+    field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0
+    field public static final String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_NFCF_SERVICE";
+    field public static final String SERVICE_META_DATA = "android.nfc.cardemulation.host_nfcf_service";
+  }
+
+  public final class NfcFCardEmulation {
+    method public boolean disableService(android.app.Activity) throws java.lang.RuntimeException;
+    method public boolean enableService(android.app.Activity, android.content.ComponentName) throws java.lang.RuntimeException;
+    method public static android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
+    method public String getNfcid2ForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public String getSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public boolean registerSystemCodeForService(android.content.ComponentName, String) throws java.lang.RuntimeException;
+    method public boolean setNfcid2ForService(android.content.ComponentName, String) throws java.lang.RuntimeException;
+    method public boolean unregisterSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
+  }
+
+  public abstract class OffHostApduService extends android.app.Service {
+    ctor public OffHostApduService();
+    field public static final String SERVICE_INTERFACE = "android.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE";
+    field public static final String SERVICE_META_DATA = "android.nfc.cardemulation.off_host_apdu_service";
+  }
+
+}
+
+package android.nfc.tech {
+
+  public final class IsoDep implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.IsoDep get(android.nfc.Tag);
+    method public byte[] getHiLayerResponse();
+    method public byte[] getHistoricalBytes();
+    method public int getMaxTransceiveLength();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public boolean isConnected();
+    method public boolean isExtendedLengthApduSupported();
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class MifareClassic implements android.nfc.tech.TagTechnology {
+    method public boolean authenticateSectorWithKeyA(int, byte[]) throws java.io.IOException;
+    method public boolean authenticateSectorWithKeyB(int, byte[]) throws java.io.IOException;
+    method public int blockToSector(int);
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public void decrement(int, int) throws java.io.IOException;
+    method public static android.nfc.tech.MifareClassic get(android.nfc.Tag);
+    method public int getBlockCount();
+    method public int getBlockCountInSector(int);
+    method public int getMaxTransceiveLength();
+    method public int getSectorCount();
+    method public int getSize();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public int getType();
+    method public void increment(int, int) throws java.io.IOException;
+    method public boolean isConnected();
+    method public byte[] readBlock(int) throws java.io.IOException;
+    method public void restore(int) throws java.io.IOException;
+    method public int sectorToBlock(int);
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+    method public void transfer(int) throws java.io.IOException;
+    method public void writeBlock(int, byte[]) throws java.io.IOException;
+    field public static final int BLOCK_SIZE = 16; // 0x10
+    field public static final byte[] KEY_DEFAULT;
+    field public static final byte[] KEY_MIFARE_APPLICATION_DIRECTORY;
+    field public static final byte[] KEY_NFC_FORUM;
+    field public static final int SIZE_1K = 1024; // 0x400
+    field public static final int SIZE_2K = 2048; // 0x800
+    field public static final int SIZE_4K = 4096; // 0x1000
+    field public static final int SIZE_MINI = 320; // 0x140
+    field public static final int TYPE_CLASSIC = 0; // 0x0
+    field public static final int TYPE_PLUS = 1; // 0x1
+    field public static final int TYPE_PRO = 2; // 0x2
+    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class MifareUltralight implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.MifareUltralight get(android.nfc.Tag);
+    method public int getMaxTransceiveLength();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public int getType();
+    method public boolean isConnected();
+    method public byte[] readPages(int) throws java.io.IOException;
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+    method public void writePage(int, byte[]) throws java.io.IOException;
+    field public static final int PAGE_SIZE = 4; // 0x4
+    field public static final int TYPE_ULTRALIGHT = 1; // 0x1
+    field public static final int TYPE_ULTRALIGHT_C = 2; // 0x2
+    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class Ndef implements android.nfc.tech.TagTechnology {
+    method public boolean canMakeReadOnly();
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.Ndef get(android.nfc.Tag);
+    method public android.nfc.NdefMessage getCachedNdefMessage();
+    method public int getMaxSize();
+    method public android.nfc.NdefMessage getNdefMessage() throws android.nfc.FormatException, java.io.IOException;
+    method public android.nfc.Tag getTag();
+    method public String getType();
+    method public boolean isConnected();
+    method public boolean isWritable();
+    method public boolean makeReadOnly() throws java.io.IOException;
+    method public void writeNdefMessage(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException;
+    field public static final String MIFARE_CLASSIC = "com.nxp.ndef.mifareclassic";
+    field public static final String NFC_FORUM_TYPE_1 = "org.nfcforum.ndef.type1";
+    field public static final String NFC_FORUM_TYPE_2 = "org.nfcforum.ndef.type2";
+    field public static final String NFC_FORUM_TYPE_3 = "org.nfcforum.ndef.type3";
+    field public static final String NFC_FORUM_TYPE_4 = "org.nfcforum.ndef.type4";
+  }
+
+  public final class NdefFormatable implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public void format(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException;
+    method public void formatReadOnly(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException;
+    method public static android.nfc.tech.NdefFormatable get(android.nfc.Tag);
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+  }
+
+  public final class NfcA implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcA get(android.nfc.Tag);
+    method public byte[] getAtqa();
+    method public int getMaxTransceiveLength();
+    method public short getSak();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public boolean isConnected();
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class NfcB implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcB get(android.nfc.Tag);
+    method public byte[] getApplicationData();
+    method public int getMaxTransceiveLength();
+    method public byte[] getProtocolInfo();
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class NfcBarcode implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcBarcode get(android.nfc.Tag);
+    method public byte[] getBarcode();
+    method public android.nfc.Tag getTag();
+    method public int getType();
+    method public boolean isConnected();
+    field public static final int TYPE_KOVIO = 1; // 0x1
+    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class NfcF implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcF get(android.nfc.Tag);
+    method public byte[] getManufacturer();
+    method public int getMaxTransceiveLength();
+    method public byte[] getSystemCode();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public boolean isConnected();
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class NfcV implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcV get(android.nfc.Tag);
+    method public byte getDsfId();
+    method public int getMaxTransceiveLength();
+    method public byte getResponseFlags();
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public interface TagTechnology extends java.io.Closeable {
+    method public void connect() throws java.io.IOException;
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+  }
+
+}
+
+package android.opengl {
+
+  public class EGL14 {
+    ctor public EGL14();
+    method public static boolean eglBindAPI(int);
+    method public static boolean eglBindTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int);
+    method public static boolean eglChooseConfig(android.opengl.EGLDisplay, int[], int, android.opengl.EGLConfig[], int, int, int[], int);
+    method public static boolean eglCopyBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface, int);
+    method public static android.opengl.EGLContext eglCreateContext(android.opengl.EGLDisplay, android.opengl.EGLConfig, android.opengl.EGLContext, int[], int);
+    method public static android.opengl.EGLSurface eglCreatePbufferFromClientBuffer(android.opengl.EGLDisplay, int, int, android.opengl.EGLConfig, int[], int);
+    method public static android.opengl.EGLSurface eglCreatePbufferSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int[], int);
+    method @Deprecated public static android.opengl.EGLSurface eglCreatePixmapSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int);
+    method public static android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, Object, int[], int);
+    method public static boolean eglDestroyContext(android.opengl.EGLDisplay, android.opengl.EGLContext);
+    method public static boolean eglDestroySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface);
+    method public static boolean eglGetConfigAttrib(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int);
+    method public static boolean eglGetConfigs(android.opengl.EGLDisplay, android.opengl.EGLConfig[], int, int, int[], int);
+    method public static android.opengl.EGLContext eglGetCurrentContext();
+    method public static android.opengl.EGLDisplay eglGetCurrentDisplay();
+    method public static android.opengl.EGLSurface eglGetCurrentSurface(int);
+    method public static android.opengl.EGLDisplay eglGetDisplay(int);
+    method public static int eglGetError();
+    method public static boolean eglInitialize(android.opengl.EGLDisplay, int[], int, int[], int);
+    method public static boolean eglMakeCurrent(android.opengl.EGLDisplay, android.opengl.EGLSurface, android.opengl.EGLSurface, android.opengl.EGLContext);
+    method public static int eglQueryAPI();
+    method public static boolean eglQueryContext(android.opengl.EGLDisplay, android.opengl.EGLContext, int, int[], int);
+    method public static String eglQueryString(android.opengl.EGLDisplay, int);
+    method public static boolean eglQuerySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int[], int);
+    method public static boolean eglReleaseTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int);
+    method public static boolean eglReleaseThread();
+    method public static boolean eglSurfaceAttrib(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int);
+    method public static boolean eglSwapBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface);
+    method public static boolean eglSwapInterval(android.opengl.EGLDisplay, int);
+    method public static boolean eglTerminate(android.opengl.EGLDisplay);
+    method public static boolean eglWaitClient();
+    method public static boolean eglWaitGL();
+    method public static boolean eglWaitNative(int);
+    field public static final int EGL_ALPHA_MASK_SIZE = 12350; // 0x303e
+    field public static final int EGL_ALPHA_SIZE = 12321; // 0x3021
+    field public static final int EGL_BACK_BUFFER = 12420; // 0x3084
+    field public static final int EGL_BAD_ACCESS = 12290; // 0x3002
+    field public static final int EGL_BAD_ALLOC = 12291; // 0x3003
+    field public static final int EGL_BAD_ATTRIBUTE = 12292; // 0x3004
+    field public static final int EGL_BAD_CONFIG = 12293; // 0x3005
+    field public static final int EGL_BAD_CONTEXT = 12294; // 0x3006
+    field public static final int EGL_BAD_CURRENT_SURFACE = 12295; // 0x3007
+    field public static final int EGL_BAD_DISPLAY = 12296; // 0x3008
+    field public static final int EGL_BAD_MATCH = 12297; // 0x3009
+    field public static final int EGL_BAD_NATIVE_PIXMAP = 12298; // 0x300a
+    field public static final int EGL_BAD_NATIVE_WINDOW = 12299; // 0x300b
+    field public static final int EGL_BAD_PARAMETER = 12300; // 0x300c
+    field public static final int EGL_BAD_SURFACE = 12301; // 0x300d
+    field public static final int EGL_BIND_TO_TEXTURE_RGB = 12345; // 0x3039
+    field public static final int EGL_BIND_TO_TEXTURE_RGBA = 12346; // 0x303a
+    field public static final int EGL_BLUE_SIZE = 12322; // 0x3022
+    field public static final int EGL_BUFFER_DESTROYED = 12437; // 0x3095
+    field public static final int EGL_BUFFER_PRESERVED = 12436; // 0x3094
+    field public static final int EGL_BUFFER_SIZE = 12320; // 0x3020
+    field public static final int EGL_CLIENT_APIS = 12429; // 0x308d
+    field public static final int EGL_COLOR_BUFFER_TYPE = 12351; // 0x303f
+    field public static final int EGL_CONFIG_CAVEAT = 12327; // 0x3027
+    field public static final int EGL_CONFIG_ID = 12328; // 0x3028
+    field public static final int EGL_CONFORMANT = 12354; // 0x3042
+    field public static final int EGL_CONTEXT_CLIENT_TYPE = 12439; // 0x3097
+    field public static final int EGL_CONTEXT_CLIENT_VERSION = 12440; // 0x3098
+    field public static final int EGL_CONTEXT_LOST = 12302; // 0x300e
+    field public static final int EGL_CORE_NATIVE_ENGINE = 12379; // 0x305b
+    field public static final int EGL_DEFAULT_DISPLAY = 0; // 0x0
+    field public static final int EGL_DEPTH_SIZE = 12325; // 0x3025
+    field public static final int EGL_DISPLAY_SCALING = 10000; // 0x2710
+    field public static final int EGL_DRAW = 12377; // 0x3059
+    field public static final int EGL_EXTENSIONS = 12373; // 0x3055
+    field public static final int EGL_FALSE = 0; // 0x0
+    field public static final int EGL_GREEN_SIZE = 12323; // 0x3023
+    field public static final int EGL_HEIGHT = 12374; // 0x3056
+    field public static final int EGL_HORIZONTAL_RESOLUTION = 12432; // 0x3090
+    field public static final int EGL_LARGEST_PBUFFER = 12376; // 0x3058
+    field public static final int EGL_LEVEL = 12329; // 0x3029
+    field public static final int EGL_LUMINANCE_BUFFER = 12431; // 0x308f
+    field public static final int EGL_LUMINANCE_SIZE = 12349; // 0x303d
+    field public static final int EGL_MATCH_NATIVE_PIXMAP = 12353; // 0x3041
+    field public static final int EGL_MAX_PBUFFER_HEIGHT = 12330; // 0x302a
+    field public static final int EGL_MAX_PBUFFER_PIXELS = 12331; // 0x302b
+    field public static final int EGL_MAX_PBUFFER_WIDTH = 12332; // 0x302c
+    field public static final int EGL_MAX_SWAP_INTERVAL = 12348; // 0x303c
+    field public static final int EGL_MIN_SWAP_INTERVAL = 12347; // 0x303b
+    field public static final int EGL_MIPMAP_LEVEL = 12419; // 0x3083
+    field public static final int EGL_MIPMAP_TEXTURE = 12418; // 0x3082
+    field public static final int EGL_MULTISAMPLE_RESOLVE = 12441; // 0x3099
+    field public static final int EGL_MULTISAMPLE_RESOLVE_BOX = 12443; // 0x309b
+    field public static final int EGL_MULTISAMPLE_RESOLVE_BOX_BIT = 512; // 0x200
+    field public static final int EGL_MULTISAMPLE_RESOLVE_DEFAULT = 12442; // 0x309a
+    field public static final int EGL_NATIVE_RENDERABLE = 12333; // 0x302d
+    field public static final int EGL_NATIVE_VISUAL_ID = 12334; // 0x302e
+    field public static final int EGL_NATIVE_VISUAL_TYPE = 12335; // 0x302f
+    field public static final int EGL_NONE = 12344; // 0x3038
+    field public static final int EGL_NON_CONFORMANT_CONFIG = 12369; // 0x3051
+    field public static final int EGL_NOT_INITIALIZED = 12289; // 0x3001
+    field public static android.opengl.EGLContext EGL_NO_CONTEXT;
+    field public static android.opengl.EGLDisplay EGL_NO_DISPLAY;
+    field public static android.opengl.EGLSurface EGL_NO_SURFACE;
+    field public static final int EGL_NO_TEXTURE = 12380; // 0x305c
+    field public static final int EGL_OPENGL_API = 12450; // 0x30a2
+    field public static final int EGL_OPENGL_BIT = 8; // 0x8
+    field public static final int EGL_OPENGL_ES2_BIT = 4; // 0x4
+    field public static final int EGL_OPENGL_ES_API = 12448; // 0x30a0
+    field public static final int EGL_OPENGL_ES_BIT = 1; // 0x1
+    field public static final int EGL_OPENVG_API = 12449; // 0x30a1
+    field public static final int EGL_OPENVG_BIT = 2; // 0x2
+    field public static final int EGL_OPENVG_IMAGE = 12438; // 0x3096
+    field public static final int EGL_PBUFFER_BIT = 1; // 0x1
+    field public static final int EGL_PIXEL_ASPECT_RATIO = 12434; // 0x3092
+    field public static final int EGL_PIXMAP_BIT = 2; // 0x2
+    field public static final int EGL_READ = 12378; // 0x305a
+    field public static final int EGL_RED_SIZE = 12324; // 0x3024
+    field public static final int EGL_RENDERABLE_TYPE = 12352; // 0x3040
+    field public static final int EGL_RENDER_BUFFER = 12422; // 0x3086
+    field public static final int EGL_RGB_BUFFER = 12430; // 0x308e
+    field public static final int EGL_SAMPLES = 12337; // 0x3031
+    field public static final int EGL_SAMPLE_BUFFERS = 12338; // 0x3032
+    field public static final int EGL_SINGLE_BUFFER = 12421; // 0x3085
+    field public static final int EGL_SLOW_CONFIG = 12368; // 0x3050
+    field public static final int EGL_STENCIL_SIZE = 12326; // 0x3026
+    field public static final int EGL_SUCCESS = 12288; // 0x3000
+    field public static final int EGL_SURFACE_TYPE = 12339; // 0x3033
+    field public static final int EGL_SWAP_BEHAVIOR = 12435; // 0x3093
+    field public static final int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 1024; // 0x400
+    field public static final int EGL_TEXTURE_2D = 12383; // 0x305f
+    field public static final int EGL_TEXTURE_FORMAT = 12416; // 0x3080
+    field public static final int EGL_TEXTURE_RGB = 12381; // 0x305d
+    field public static final int EGL_TEXTURE_RGBA = 12382; // 0x305e
+    field public static final int EGL_TEXTURE_TARGET = 12417; // 0x3081
+    field public static final int EGL_TRANSPARENT_BLUE_VALUE = 12341; // 0x3035
+    field public static final int EGL_TRANSPARENT_GREEN_VALUE = 12342; // 0x3036
+    field public static final int EGL_TRANSPARENT_RED_VALUE = 12343; // 0x3037
+    field public static final int EGL_TRANSPARENT_RGB = 12370; // 0x3052
+    field public static final int EGL_TRANSPARENT_TYPE = 12340; // 0x3034
+    field public static final int EGL_TRUE = 1; // 0x1
+    field public static final int EGL_VENDOR = 12371; // 0x3053
+    field public static final int EGL_VERSION = 12372; // 0x3054
+    field public static final int EGL_VERTICAL_RESOLUTION = 12433; // 0x3091
+    field public static final int EGL_VG_ALPHA_FORMAT = 12424; // 0x3088
+    field public static final int EGL_VG_ALPHA_FORMAT_NONPRE = 12427; // 0x308b
+    field public static final int EGL_VG_ALPHA_FORMAT_PRE = 12428; // 0x308c
+    field public static final int EGL_VG_ALPHA_FORMAT_PRE_BIT = 64; // 0x40
+    field public static final int EGL_VG_COLORSPACE = 12423; // 0x3087
+    field public static final int EGL_VG_COLORSPACE_LINEAR = 12426; // 0x308a
+    field public static final int EGL_VG_COLORSPACE_LINEAR_BIT = 32; // 0x20
+    field public static final int EGL_VG_COLORSPACE_sRGB = 12425; // 0x3089
+    field public static final int EGL_WIDTH = 12375; // 0x3057
+    field public static final int EGL_WINDOW_BIT = 4; // 0x4
+  }
+
+  public final class EGL15 {
+    method public static int eglClientWaitSync(android.opengl.EGLDisplay, android.opengl.EGLSync, int, long);
+    method public static android.opengl.EGLImage eglCreateImage(android.opengl.EGLDisplay, android.opengl.EGLContext, int, long, long[], int);
+    method public static android.opengl.EGLSurface eglCreatePlatformPixmapSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.nio.Buffer, long[], int);
+    method public static android.opengl.EGLSurface eglCreatePlatformWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.nio.Buffer, long[], int);
+    method public static android.opengl.EGLSync eglCreateSync(android.opengl.EGLDisplay, int, long[], int);
+    method public static boolean eglDestroyImage(android.opengl.EGLDisplay, android.opengl.EGLImage);
+    method public static boolean eglDestroySync(android.opengl.EGLDisplay, android.opengl.EGLSync);
+    method public static android.opengl.EGLDisplay eglGetPlatformDisplay(int, long, long[], int);
+    method public static boolean eglGetSyncAttrib(android.opengl.EGLDisplay, android.opengl.EGLSync, int, long[], int);
+    method public static boolean eglWaitSync(android.opengl.EGLDisplay, android.opengl.EGLSync, int);
+    field public static final int EGL_CL_EVENT_HANDLE = 12444; // 0x309c
+    field public static final int EGL_CONDITION_SATISFIED = 12534; // 0x30f6
+    field public static final int EGL_CONTEXT_MAJOR_VERSION = 12440; // 0x3098
+    field public static final int EGL_CONTEXT_MINOR_VERSION = 12539; // 0x30fb
+    field public static final int EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT = 2; // 0x2
+    field public static final int EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT = 1; // 0x1
+    field public static final int EGL_CONTEXT_OPENGL_DEBUG = 12720; // 0x31b0
+    field public static final int EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE = 12721; // 0x31b1
+    field public static final int EGL_CONTEXT_OPENGL_PROFILE_MASK = 12541; // 0x30fd
+    field public static final int EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY = 12733; // 0x31bd
+    field public static final int EGL_CONTEXT_OPENGL_ROBUST_ACCESS = 12722; // 0x31b2
+    field public static final long EGL_FOREVER = -1L; // 0xffffffffffffffffL
+    field public static final int EGL_GL_COLORSPACE = 12445; // 0x309d
+    field public static final int EGL_GL_COLORSPACE_LINEAR = 12426; // 0x308a
+    field public static final int EGL_GL_COLORSPACE_SRGB = 12425; // 0x3089
+    field public static final int EGL_GL_RENDERBUFFER = 12473; // 0x30b9
+    field public static final int EGL_GL_TEXTURE_2D = 12465; // 0x30b1
+    field public static final int EGL_GL_TEXTURE_3D = 12466; // 0x30b2
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 12468; // 0x30b4
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 12470; // 0x30b6
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 12472; // 0x30b8
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X = 12467; // 0x30b3
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 12469; // 0x30b5
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 12471; // 0x30b7
+    field public static final int EGL_GL_TEXTURE_LEVEL = 12476; // 0x30bc
+    field public static final int EGL_GL_TEXTURE_ZOFFSET = 12477; // 0x30bd
+    field public static final int EGL_IMAGE_PRESERVED = 12498; // 0x30d2
+    field public static final int EGL_LOSE_CONTEXT_ON_RESET = 12735; // 0x31bf
+    field public static final android.opengl.EGLContext EGL_NO_CONTEXT;
+    field public static final android.opengl.EGLDisplay EGL_NO_DISPLAY;
+    field public static final android.opengl.EGLImage EGL_NO_IMAGE;
+    field public static final int EGL_NO_RESET_NOTIFICATION = 12734; // 0x31be
+    field public static final android.opengl.EGLSurface EGL_NO_SURFACE;
+    field public static final android.opengl.EGLSync EGL_NO_SYNC;
+    field public static final int EGL_OPENGL_ES3_BIT = 64; // 0x40
+    field public static final int EGL_PLATFORM_ANDROID_KHR = 12609; // 0x3141
+    field public static final int EGL_SIGNALED = 12530; // 0x30f2
+    field public static final int EGL_SYNC_CL_EVENT = 12542; // 0x30fe
+    field public static final int EGL_SYNC_CL_EVENT_COMPLETE = 12543; // 0x30ff
+    field public static final int EGL_SYNC_CONDITION = 12536; // 0x30f8
+    field public static final int EGL_SYNC_FENCE = 12537; // 0x30f9
+    field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT = 1; // 0x1
+    field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE = 12528; // 0x30f0
+    field public static final int EGL_SYNC_STATUS = 12529; // 0x30f1
+    field public static final int EGL_SYNC_TYPE = 12535; // 0x30f7
+    field public static final int EGL_TIMEOUT_EXPIRED = 12533; // 0x30f5
+    field public static final int EGL_UNSIGNALED = 12531; // 0x30f3
+  }
+
+  public class EGLConfig extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLContext extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLDisplay extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLExt {
+    ctor public EGLExt();
+    method public static boolean eglPresentationTimeANDROID(android.opengl.EGLDisplay, android.opengl.EGLSurface, long);
+    field public static final int EGL_CONTEXT_FLAGS_KHR = 12540; // 0x30fc
+    field public static final int EGL_CONTEXT_MAJOR_VERSION_KHR = 12440; // 0x3098
+    field public static final int EGL_CONTEXT_MINOR_VERSION_KHR = 12539; // 0x30fb
+    field public static final int EGL_OPENGL_ES3_BIT_KHR = 64; // 0x40
+    field public static final int EGL_RECORDABLE_ANDROID = 12610; // 0x3142
+  }
+
+  public class EGLImage extends android.opengl.EGLObjectHandle {
+  }
+
+  public abstract class EGLObjectHandle {
+    ctor @Deprecated protected EGLObjectHandle(int);
+    ctor protected EGLObjectHandle(long);
+    method @Deprecated public int getHandle();
+    method public long getNativeHandle();
+  }
+
+  public class EGLSurface extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLSync extends android.opengl.EGLObjectHandle {
+  }
+
+  public class ETC1 {
+    ctor public ETC1();
+    method public static void decodeBlock(java.nio.Buffer, java.nio.Buffer);
+    method public static void decodeImage(java.nio.Buffer, java.nio.Buffer, int, int, int, int);
+    method public static void encodeBlock(java.nio.Buffer, int, java.nio.Buffer);
+    method public static void encodeImage(java.nio.Buffer, int, int, int, int, java.nio.Buffer);
+    method public static void formatHeader(java.nio.Buffer, int, int);
+    method public static int getEncodedDataSize(int, int);
+    method public static int getHeight(java.nio.Buffer);
+    method public static int getWidth(java.nio.Buffer);
+    method public static boolean isValid(java.nio.Buffer);
+    field public static final int DECODED_BLOCK_SIZE = 48; // 0x30
+    field public static final int ENCODED_BLOCK_SIZE = 8; // 0x8
+    field public static final int ETC1_RGB8_OES = 36196; // 0x8d64
+    field public static final int ETC_PKM_HEADER_SIZE = 16; // 0x10
+  }
+
+  public class ETC1Util {
+    ctor public ETC1Util();
+    method public static android.opengl.ETC1Util.ETC1Texture compressTexture(java.nio.Buffer, int, int, int, int);
+    method public static android.opengl.ETC1Util.ETC1Texture createTexture(java.io.InputStream) throws java.io.IOException;
+    method public static boolean isETC1Supported();
+    method public static void loadTexture(int, int, int, int, int, java.io.InputStream) throws java.io.IOException;
+    method public static void loadTexture(int, int, int, int, int, android.opengl.ETC1Util.ETC1Texture);
+    method public static void writeTexture(android.opengl.ETC1Util.ETC1Texture, java.io.OutputStream) throws java.io.IOException;
+  }
+
+  public static class ETC1Util.ETC1Texture {
+    ctor public ETC1Util.ETC1Texture(int, int, java.nio.ByteBuffer);
+    method public java.nio.ByteBuffer getData();
+    method public int getHeight();
+    method public int getWidth();
+  }
+
+  public class GLDebugHelper {
+    ctor public GLDebugHelper();
+    method public static javax.microedition.khronos.opengles.GL wrap(javax.microedition.khronos.opengles.GL, int, java.io.Writer);
+    method public static javax.microedition.khronos.egl.EGL wrap(javax.microedition.khronos.egl.EGL, int, java.io.Writer);
+    field public static final int CONFIG_CHECK_GL_ERROR = 1; // 0x1
+    field public static final int CONFIG_CHECK_THREAD = 2; // 0x2
+    field public static final int CONFIG_LOG_ARGUMENT_NAMES = 4; // 0x4
+    field public static final int ERROR_WRONG_THREAD = 28672; // 0x7000
+  }
+
+  public class GLES10 {
+    ctor public GLES10();
+    method public static void glActiveTexture(int);
+    method public static void glAlphaFunc(int, float);
+    method public static void glAlphaFuncx(int, int);
+    method public static void glBindTexture(int, int);
+    method public static void glBlendFunc(int, int);
+    method public static void glClear(int);
+    method public static void glClearColor(float, float, float, float);
+    method public static void glClearColorx(int, int, int, int);
+    method public static void glClearDepthf(float);
+    method public static void glClearDepthx(int);
+    method public static void glClearStencil(int);
+    method public static void glClientActiveTexture(int);
+    method public static void glColor4f(float, float, float, float);
+    method public static void glColor4x(int, int, int, int);
+    method public static void glColorMask(boolean, boolean, boolean, boolean);
+    method public static void glColorPointer(int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public static void glCopyTexSubImage2D(int, int, int, int, int, int, int, int);
+    method public static void glCullFace(int);
+    method public static void glDeleteTextures(int, int[], int);
+    method public static void glDeleteTextures(int, java.nio.IntBuffer);
+    method public static void glDepthFunc(int);
+    method public static void glDepthMask(boolean);
+    method public static void glDepthRangef(float, float);
+    method public static void glDepthRangex(int, int);
+    method public static void glDisable(int);
+    method public static void glDisableClientState(int);
+    method public static void glDrawArrays(int, int, int);
+    method public static void glDrawElements(int, int, int, java.nio.Buffer);
+    method public static void glEnable(int);
+    method public static void glEnableClientState(int);
+    method public static void glFinish();
+    method public static void glFlush();
+    method public static void glFogf(int, float);
+    method public static void glFogfv(int, float[], int);
+    method public static void glFogfv(int, java.nio.FloatBuffer);
+    method public static void glFogx(int, int);
+    method public static void glFogxv(int, int[], int);
+    method public static void glFogxv(int, java.nio.IntBuffer);
+    method public static void glFrontFace(int);
+    method public static void glFrustumf(float, float, float, float, float, float);
+    method public static void glFrustumx(int, int, int, int, int, int);
+    method public static void glGenTextures(int, int[], int);
+    method public static void glGenTextures(int, java.nio.IntBuffer);
+    method public static int glGetError();
+    method public static void glGetIntegerv(int, int[], int);
+    method public static void glGetIntegerv(int, java.nio.IntBuffer);
+    method public static String glGetString(int);
+    method public static void glHint(int, int);
+    method public static void glLightModelf(int, float);
+    method public static void glLightModelfv(int, float[], int);
+    method public static void glLightModelfv(int, java.nio.FloatBuffer);
+    method public static void glLightModelx(int, int);
+    method public static void glLightModelxv(int, int[], int);
+    method public static void glLightModelxv(int, java.nio.IntBuffer);
+    method public static void glLightf(int, int, float);
+    method public static void glLightfv(int, int, float[], int);
+    method public static void glLightfv(int, int, java.nio.FloatBuffer);
+    method public static void glLightx(int, int, int);
+    method public static void glLightxv(int, int, int[], int);
+    method public static void glLightxv(int, int, java.nio.IntBuffer);
+    method public static void glLineWidth(float);
+    method public static void glLineWidthx(int);
+    method public static void glLoadIdentity();
+    method public static void glLoadMatrixf(float[], int);
+    method public static void glLoadMatrixf(java.nio.FloatBuffer);
+    method public static void glLoadMatrixx(int[], int);
+    method public static void glLoadMatrixx(java.nio.IntBuffer);
+    method public static void glLogicOp(int);
+    method public static void glMaterialf(int, int, float);
+    method public static void glMaterialfv(int, int, float[], int);
+    method public static void glMaterialfv(int, int, java.nio.FloatBuffer);
+    method public static void glMaterialx(int, int, int);
+    method public static void glMaterialxv(int, int, int[], int);
+    method public static void glMaterialxv(int, int, java.nio.IntBuffer);
+    method public static void glMatrixMode(int);
+    method public static void glMultMatrixf(float[], int);
+    method public static void glMultMatrixf(java.nio.FloatBuffer);
+    method public static void glMultMatrixx(int[], int);
+    method public static void glMultMatrixx(java.nio.IntBuffer);
+    method public static void glMultiTexCoord4f(int, float, float, float, float);
+    method public static void glMultiTexCoord4x(int, int, int, int, int);
+    method public static void glNormal3f(float, float, float);
+    method public static void glNormal3x(int, int, int);
+    method public static void glNormalPointer(int, int, java.nio.Buffer);
+    method public static void glOrthof(float, float, float, float, float, float);
+    method public static void glOrthox(int, int, int, int, int, int);
+    method public static void glPixelStorei(int, int);
+    method public static void glPointSize(float);
+    method public static void glPointSizex(int);
+    method public static void glPolygonOffset(float, float);
+    method public static void glPolygonOffsetx(int, int);
+    method public static void glPopMatrix();
+    method public static void glPushMatrix();
+    method public static void glReadPixels(int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glRotatef(float, float, float, float);
+    method public static void glRotatex(int, int, int, int);
+    method public static void glSampleCoverage(float, boolean);
+    method public static void glSampleCoveragex(int, boolean);
+    method public static void glScalef(float, float, float);
+    method public static void glScalex(int, int, int);
+    method public static void glScissor(int, int, int, int);
+    method public static void glShadeModel(int);
+    method public static void glStencilFunc(int, int, int);
+    method public static void glStencilMask(int);
+    method public static void glStencilOp(int, int, int);
+    method public static void glTexCoordPointer(int, int, int, java.nio.Buffer);
+    method public static void glTexEnvf(int, int, float);
+    method public static void glTexEnvfv(int, int, float[], int);
+    method public static void glTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public static void glTexEnvx(int, int, int);
+    method public static void glTexEnvxv(int, int, int[], int);
+    method public static void glTexEnvxv(int, int, java.nio.IntBuffer);
+    method public static void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexParameterf(int, int, float);
+    method public static void glTexParameterx(int, int, int);
+    method public static void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTranslatef(float, float, float);
+    method public static void glTranslatex(int, int, int);
+    method public static void glVertexPointer(int, int, int, java.nio.Buffer);
+    method public static void glViewport(int, int, int, int);
+    field public static final int GL_ADD = 260; // 0x104
+    field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e
+    field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d
+    field public static final int GL_ALPHA = 6406; // 0x1906
+    field public static final int GL_ALPHA_BITS = 3413; // 0xd55
+    field public static final int GL_ALPHA_TEST = 3008; // 0xbc0
+    field public static final int GL_ALWAYS = 519; // 0x207
+    field public static final int GL_AMBIENT = 4608; // 0x1200
+    field public static final int GL_AMBIENT_AND_DIFFUSE = 5634; // 0x1602
+    field public static final int GL_AND = 5377; // 0x1501
+    field public static final int GL_AND_INVERTED = 5380; // 0x1504
+    field public static final int GL_AND_REVERSE = 5378; // 0x1502
+    field public static final int GL_BACK = 1029; // 0x405
+    field public static final int GL_BLEND = 3042; // 0xbe2
+    field public static final int GL_BLUE_BITS = 3412; // 0xd54
+    field public static final int GL_BYTE = 5120; // 0x1400
+    field public static final int GL_CCW = 2305; // 0x901
+    field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f
+    field public static final int GL_CLEAR = 5376; // 0x1500
+    field public static final int GL_COLOR_ARRAY = 32886; // 0x8076
+    field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000
+    field public static final int GL_COLOR_LOGIC_OP = 3058; // 0xbf2
+    field public static final int GL_COLOR_MATERIAL = 2903; // 0xb57
+    field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3
+    field public static final int GL_CONSTANT_ATTENUATION = 4615; // 0x1207
+    field public static final int GL_COPY = 5379; // 0x1503
+    field public static final int GL_COPY_INVERTED = 5388; // 0x150c
+    field public static final int GL_CULL_FACE = 2884; // 0xb44
+    field public static final int GL_CW = 2304; // 0x900
+    field public static final int GL_DECAL = 8449; // 0x2101
+    field public static final int GL_DECR = 7683; // 0x1e03
+    field public static final int GL_DEPTH_BITS = 3414; // 0xd56
+    field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100
+    field public static final int GL_DEPTH_TEST = 2929; // 0xb71
+    field public static final int GL_DIFFUSE = 4609; // 0x1201
+    field public static final int GL_DITHER = 3024; // 0xbd0
+    field public static final int GL_DONT_CARE = 4352; // 0x1100
+    field public static final int GL_DST_ALPHA = 772; // 0x304
+    field public static final int GL_DST_COLOR = 774; // 0x306
+    field public static final int GL_EMISSION = 5632; // 0x1600
+    field public static final int GL_EQUAL = 514; // 0x202
+    field public static final int GL_EQUIV = 5385; // 0x1509
+    field public static final int GL_EXP = 2048; // 0x800
+    field public static final int GL_EXP2 = 2049; // 0x801
+    field public static final int GL_EXTENSIONS = 7939; // 0x1f03
+    field public static final int GL_FALSE = 0; // 0x0
+    field public static final int GL_FASTEST = 4353; // 0x1101
+    field public static final int GL_FIXED = 5132; // 0x140c
+    field public static final int GL_FLAT = 7424; // 0x1d00
+    field public static final int GL_FLOAT = 5126; // 0x1406
+    field public static final int GL_FOG = 2912; // 0xb60
+    field public static final int GL_FOG_COLOR = 2918; // 0xb66
+    field public static final int GL_FOG_DENSITY = 2914; // 0xb62
+    field public static final int GL_FOG_END = 2916; // 0xb64
+    field public static final int GL_FOG_HINT = 3156; // 0xc54
+    field public static final int GL_FOG_MODE = 2917; // 0xb65
+    field public static final int GL_FOG_START = 2915; // 0xb63
+    field public static final int GL_FRONT = 1028; // 0x404
+    field public static final int GL_FRONT_AND_BACK = 1032; // 0x408
+    field public static final int GL_GEQUAL = 518; // 0x206
+    field public static final int GL_GREATER = 516; // 0x204
+    field public static final int GL_GREEN_BITS = 3411; // 0xd53
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739; // 0x8b9b
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738; // 0x8b9a
+    field public static final int GL_INCR = 7682; // 0x1e02
+    field public static final int GL_INVALID_ENUM = 1280; // 0x500
+    field public static final int GL_INVALID_OPERATION = 1282; // 0x502
+    field public static final int GL_INVALID_VALUE = 1281; // 0x501
+    field public static final int GL_INVERT = 5386; // 0x150a
+    field public static final int GL_KEEP = 7680; // 0x1e00
+    field public static final int GL_LEQUAL = 515; // 0x203
+    field public static final int GL_LESS = 513; // 0x201
+    field public static final int GL_LIGHT0 = 16384; // 0x4000
+    field public static final int GL_LIGHT1 = 16385; // 0x4001
+    field public static final int GL_LIGHT2 = 16386; // 0x4002
+    field public static final int GL_LIGHT3 = 16387; // 0x4003
+    field public static final int GL_LIGHT4 = 16388; // 0x4004
+    field public static final int GL_LIGHT5 = 16389; // 0x4005
+    field public static final int GL_LIGHT6 = 16390; // 0x4006
+    field public static final int GL_LIGHT7 = 16391; // 0x4007
+    field public static final int GL_LIGHTING = 2896; // 0xb50
+    field public static final int GL_LIGHT_MODEL_AMBIENT = 2899; // 0xb53
+    field public static final int GL_LIGHT_MODEL_TWO_SIDE = 2898; // 0xb52
+    field public static final int GL_LINEAR = 9729; // 0x2601
+    field public static final int GL_LINEAR_ATTENUATION = 4616; // 0x1208
+    field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703
+    field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701
+    field public static final int GL_LINES = 1; // 0x1
+    field public static final int GL_LINE_LOOP = 2; // 0x2
+    field public static final int GL_LINE_SMOOTH = 2848; // 0xb20
+    field public static final int GL_LINE_SMOOTH_HINT = 3154; // 0xc52
+    field public static final int GL_LINE_STRIP = 3; // 0x3
+    field public static final int GL_LUMINANCE = 6409; // 0x1909
+    field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a
+    field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9
+    field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8
+    field public static final int GL_MAX_LIGHTS = 3377; // 0xd31
+    field public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 3382; // 0xd36
+    field public static final int GL_MAX_PROJECTION_STACK_DEPTH = 3384; // 0xd38
+    field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33
+    field public static final int GL_MAX_TEXTURE_STACK_DEPTH = 3385; // 0xd39
+    field public static final int GL_MAX_TEXTURE_UNITS = 34018; // 0x84e2
+    field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a
+    field public static final int GL_MODELVIEW = 5888; // 0x1700
+    field public static final int GL_MODULATE = 8448; // 0x2100
+    field public static final int GL_MULTISAMPLE = 32925; // 0x809d
+    field public static final int GL_NAND = 5390; // 0x150e
+    field public static final int GL_NEAREST = 9728; // 0x2600
+    field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702
+    field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700
+    field public static final int GL_NEVER = 512; // 0x200
+    field public static final int GL_NICEST = 4354; // 0x1102
+    field public static final int GL_NOOP = 5381; // 0x1505
+    field public static final int GL_NOR = 5384; // 0x1508
+    field public static final int GL_NORMALIZE = 2977; // 0xba1
+    field public static final int GL_NORMAL_ARRAY = 32885; // 0x8075
+    field public static final int GL_NOTEQUAL = 517; // 0x205
+    field public static final int GL_NO_ERROR = 0; // 0x0
+    field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2
+    field public static final int GL_ONE = 1; // 0x1
+    field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305
+    field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307
+    field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303
+    field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301
+    field public static final int GL_OR = 5383; // 0x1507
+    field public static final int GL_OR_INVERTED = 5389; // 0x150d
+    field public static final int GL_OR_REVERSE = 5387; // 0x150b
+    field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505
+    field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05
+    field public static final int GL_PALETTE4_R5_G6_B5_OES = 35730; // 0x8b92
+    field public static final int GL_PALETTE4_RGB5_A1_OES = 35732; // 0x8b94
+    field public static final int GL_PALETTE4_RGB8_OES = 35728; // 0x8b90
+    field public static final int GL_PALETTE4_RGBA4_OES = 35731; // 0x8b93
+    field public static final int GL_PALETTE4_RGBA8_OES = 35729; // 0x8b91
+    field public static final int GL_PALETTE8_R5_G6_B5_OES = 35735; // 0x8b97
+    field public static final int GL_PALETTE8_RGB5_A1_OES = 35737; // 0x8b99
+    field public static final int GL_PALETTE8_RGB8_OES = 35733; // 0x8b95
+    field public static final int GL_PALETTE8_RGBA4_OES = 35736; // 0x8b98
+    field public static final int GL_PALETTE8_RGBA8_OES = 35734; // 0x8b96
+    field public static final int GL_PERSPECTIVE_CORRECTION_HINT = 3152; // 0xc50
+    field public static final int GL_POINTS = 0; // 0x0
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SMOOTH = 2832; // 0xb10
+    field public static final int GL_POINT_SMOOTH_HINT = 3153; // 0xc51
+    field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037
+    field public static final int GL_POLYGON_SMOOTH_HINT = 3155; // 0xc53
+    field public static final int GL_POSITION = 4611; // 0x1203
+    field public static final int GL_PROJECTION = 5889; // 0x1701
+    field public static final int GL_QUADRATIC_ATTENUATION = 4617; // 0x1209
+    field public static final int GL_RED_BITS = 3410; // 0xd52
+    field public static final int GL_RENDERER = 7937; // 0x1f01
+    field public static final int GL_REPEAT = 10497; // 0x2901
+    field public static final int GL_REPLACE = 7681; // 0x1e01
+    field public static final int GL_RESCALE_NORMAL = 32826; // 0x803a
+    field public static final int GL_RGB = 6407; // 0x1907
+    field public static final int GL_RGBA = 6408; // 0x1908
+    field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e
+    field public static final int GL_SAMPLE_ALPHA_TO_ONE = 32927; // 0x809f
+    field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0
+    field public static final int GL_SCISSOR_TEST = 3089; // 0xc11
+    field public static final int GL_SET = 5391; // 0x150f
+    field public static final int GL_SHININESS = 5633; // 0x1601
+    field public static final int GL_SHORT = 5122; // 0x1402
+    field public static final int GL_SMOOTH = 7425; // 0x1d01
+    field public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 2850; // 0xb22
+    field public static final int GL_SMOOTH_POINT_SIZE_RANGE = 2834; // 0xb12
+    field public static final int GL_SPECULAR = 4610; // 0x1202
+    field public static final int GL_SPOT_CUTOFF = 4614; // 0x1206
+    field public static final int GL_SPOT_DIRECTION = 4612; // 0x1204
+    field public static final int GL_SPOT_EXPONENT = 4613; // 0x1205
+    field public static final int GL_SRC_ALPHA = 770; // 0x302
+    field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308
+    field public static final int GL_SRC_COLOR = 768; // 0x300
+    field public static final int GL_STACK_OVERFLOW = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504
+    field public static final int GL_STENCIL_BITS = 3415; // 0xd57
+    field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400
+    field public static final int GL_STENCIL_TEST = 2960; // 0xb90
+    field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50
+    field public static final int GL_TEXTURE = 5890; // 0x1702
+    field public static final int GL_TEXTURE0 = 33984; // 0x84c0
+    field public static final int GL_TEXTURE1 = 33985; // 0x84c1
+    field public static final int GL_TEXTURE10 = 33994; // 0x84ca
+    field public static final int GL_TEXTURE11 = 33995; // 0x84cb
+    field public static final int GL_TEXTURE12 = 33996; // 0x84cc
+    field public static final int GL_TEXTURE13 = 33997; // 0x84cd
+    field public static final int GL_TEXTURE14 = 33998; // 0x84ce
+    field public static final int GL_TEXTURE15 = 33999; // 0x84cf
+    field public static final int GL_TEXTURE16 = 34000; // 0x84d0
+    field public static final int GL_TEXTURE17 = 34001; // 0x84d1
+    field public static final int GL_TEXTURE18 = 34002; // 0x84d2
+    field public static final int GL_TEXTURE19 = 34003; // 0x84d3
+    field public static final int GL_TEXTURE2 = 33986; // 0x84c2
+    field public static final int GL_TEXTURE20 = 34004; // 0x84d4
+    field public static final int GL_TEXTURE21 = 34005; // 0x84d5
+    field public static final int GL_TEXTURE22 = 34006; // 0x84d6
+    field public static final int GL_TEXTURE23 = 34007; // 0x84d7
+    field public static final int GL_TEXTURE24 = 34008; // 0x84d8
+    field public static final int GL_TEXTURE25 = 34009; // 0x84d9
+    field public static final int GL_TEXTURE26 = 34010; // 0x84da
+    field public static final int GL_TEXTURE27 = 34011; // 0x84db
+    field public static final int GL_TEXTURE28 = 34012; // 0x84dc
+    field public static final int GL_TEXTURE29 = 34013; // 0x84dd
+    field public static final int GL_TEXTURE3 = 33987; // 0x84c3
+    field public static final int GL_TEXTURE30 = 34014; // 0x84de
+    field public static final int GL_TEXTURE31 = 34015; // 0x84df
+    field public static final int GL_TEXTURE4 = 33988; // 0x84c4
+    field public static final int GL_TEXTURE5 = 33989; // 0x84c5
+    field public static final int GL_TEXTURE6 = 33990; // 0x84c6
+    field public static final int GL_TEXTURE7 = 33991; // 0x84c7
+    field public static final int GL_TEXTURE8 = 33992; // 0x84c8
+    field public static final int GL_TEXTURE9 = 33993; // 0x84c9
+    field public static final int GL_TEXTURE_2D = 3553; // 0xde1
+    field public static final int GL_TEXTURE_COORD_ARRAY = 32888; // 0x8078
+    field public static final int GL_TEXTURE_ENV = 8960; // 0x2300
+    field public static final int GL_TEXTURE_ENV_COLOR = 8705; // 0x2201
+    field public static final int GL_TEXTURE_ENV_MODE = 8704; // 0x2200
+    field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800
+    field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801
+    field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802
+    field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803
+    field public static final int GL_TRIANGLES = 4; // 0x4
+    field public static final int GL_TRIANGLE_FAN = 6; // 0x6
+    field public static final int GL_TRIANGLE_STRIP = 5; // 0x5
+    field public static final int GL_TRUE = 1; // 0x1
+    field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5
+    field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401
+    field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403
+    field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033
+    field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034
+    field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363
+    field public static final int GL_VENDOR = 7936; // 0x1f00
+    field public static final int GL_VERSION = 7938; // 0x1f02
+    field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074
+    field public static final int GL_XOR = 5382; // 0x1506
+    field public static final int GL_ZERO = 0; // 0x0
+  }
+
+  public class GLES10Ext {
+    ctor public GLES10Ext();
+    method public static int glQueryMatrixxOES(int[], int, int[], int);
+    method public static int glQueryMatrixxOES(java.nio.IntBuffer, java.nio.IntBuffer);
+  }
+
+  public class GLES11 extends android.opengl.GLES10 {
+    ctor public GLES11();
+    method public static void glBindBuffer(int, int);
+    method public static void glBufferData(int, int, java.nio.Buffer, int);
+    method public static void glBufferSubData(int, int, int, java.nio.Buffer);
+    method public static void glClipPlanef(int, float[], int);
+    method public static void glClipPlanef(int, java.nio.FloatBuffer);
+    method public static void glClipPlanex(int, int[], int);
+    method public static void glClipPlanex(int, java.nio.IntBuffer);
+    method public static void glColor4ub(byte, byte, byte, byte);
+    method public static void glColorPointer(int, int, int, int);
+    method public static void glDeleteBuffers(int, int[], int);
+    method public static void glDeleteBuffers(int, java.nio.IntBuffer);
+    method public static void glDrawElements(int, int, int, int);
+    method public static void glGenBuffers(int, int[], int);
+    method public static void glGenBuffers(int, java.nio.IntBuffer);
+    method public static void glGetBooleanv(int, boolean[], int);
+    method public static void glGetBooleanv(int, java.nio.IntBuffer);
+    method public static void glGetBufferParameteriv(int, int, int[], int);
+    method public static void glGetBufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glGetClipPlanef(int, float[], int);
+    method public static void glGetClipPlanef(int, java.nio.FloatBuffer);
+    method public static void glGetClipPlanex(int, int[], int);
+    method public static void glGetClipPlanex(int, java.nio.IntBuffer);
+    method public static void glGetFixedv(int, int[], int);
+    method public static void glGetFixedv(int, java.nio.IntBuffer);
+    method public static void glGetFloatv(int, float[], int);
+    method public static void glGetFloatv(int, java.nio.FloatBuffer);
+    method public static void glGetLightfv(int, int, float[], int);
+    method public static void glGetLightfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetLightxv(int, int, int[], int);
+    method public static void glGetLightxv(int, int, java.nio.IntBuffer);
+    method public static void glGetMaterialfv(int, int, float[], int);
+    method public static void glGetMaterialfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetMaterialxv(int, int, int[], int);
+    method public static void glGetMaterialxv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexEnvfv(int, int, float[], int);
+    method public static void glGetTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexEnviv(int, int, int[], int);
+    method public static void glGetTexEnviv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexEnvxv(int, int, int[], int);
+    method public static void glGetTexEnvxv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterfv(int, int, float[], int);
+    method public static void glGetTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexParameteriv(int, int, int[], int);
+    method public static void glGetTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterxv(int, int, int[], int);
+    method public static void glGetTexParameterxv(int, int, java.nio.IntBuffer);
+    method public static boolean glIsBuffer(int);
+    method public static boolean glIsEnabled(int);
+    method public static boolean glIsTexture(int);
+    method public static void glNormalPointer(int, int, int);
+    method public static void glPointParameterf(int, float);
+    method public static void glPointParameterfv(int, float[], int);
+    method public static void glPointParameterfv(int, java.nio.FloatBuffer);
+    method public static void glPointParameterx(int, int);
+    method public static void glPointParameterxv(int, int[], int);
+    method public static void glPointParameterxv(int, java.nio.IntBuffer);
+    method public static void glPointSizePointerOES(int, int, java.nio.Buffer);
+    method public static void glTexCoordPointer(int, int, int, int);
+    method public static void glTexEnvi(int, int, int);
+    method public static void glTexEnviv(int, int, int[], int);
+    method public static void glTexEnviv(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterfv(int, int, float[], int);
+    method public static void glTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glTexParameteri(int, int, int);
+    method public static void glTexParameteriv(int, int, int[], int);
+    method public static void glTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterxv(int, int, int[], int);
+    method public static void glTexParameterxv(int, int, java.nio.IntBuffer);
+    method public static void glVertexPointer(int, int, int, int);
+    field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0
+    field public static final int GL_ADD_SIGNED = 34164; // 0x8574
+    field public static final int GL_ALPHA_SCALE = 3356; // 0xd1c
+    field public static final int GL_ALPHA_TEST_FUNC = 3009; // 0xbc1
+    field public static final int GL_ALPHA_TEST_REF = 3010; // 0xbc2
+    field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892
+    field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894
+    field public static final int GL_BLEND_DST = 3040; // 0xbe0
+    field public static final int GL_BLEND_SRC = 3041; // 0xbe1
+    field public static final int GL_BUFFER_ACCESS = 35003; // 0x88bb
+    field public static final int GL_BUFFER_SIZE = 34660; // 0x8764
+    field public static final int GL_BUFFER_USAGE = 34661; // 0x8765
+    field public static final int GL_CLIENT_ACTIVE_TEXTURE = 34017; // 0x84e1
+    field public static final int GL_CLIP_PLANE0 = 12288; // 0x3000
+    field public static final int GL_CLIP_PLANE1 = 12289; // 0x3001
+    field public static final int GL_CLIP_PLANE2 = 12290; // 0x3002
+    field public static final int GL_CLIP_PLANE3 = 12291; // 0x3003
+    field public static final int GL_CLIP_PLANE4 = 12292; // 0x3004
+    field public static final int GL_CLIP_PLANE5 = 12293; // 0x3005
+    field public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 34968; // 0x8898
+    field public static final int GL_COLOR_ARRAY_POINTER = 32912; // 0x8090
+    field public static final int GL_COLOR_ARRAY_SIZE = 32897; // 0x8081
+    field public static final int GL_COLOR_ARRAY_STRIDE = 32899; // 0x8083
+    field public static final int GL_COLOR_ARRAY_TYPE = 32898; // 0x8082
+    field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22
+    field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23
+    field public static final int GL_COMBINE = 34160; // 0x8570
+    field public static final int GL_COMBINE_ALPHA = 34162; // 0x8572
+    field public static final int GL_COMBINE_RGB = 34161; // 0x8571
+    field public static final int GL_CONSTANT = 34166; // 0x8576
+    field public static final int GL_COORD_REPLACE_OES = 34914; // 0x8862
+    field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45
+    field public static final int GL_CURRENT_COLOR = 2816; // 0xb00
+    field public static final int GL_CURRENT_NORMAL = 2818; // 0xb02
+    field public static final int GL_CURRENT_TEXTURE_COORDS = 2819; // 0xb03
+    field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73
+    field public static final int GL_DEPTH_FUNC = 2932; // 0xb74
+    field public static final int GL_DEPTH_RANGE = 2928; // 0xb70
+    field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72
+    field public static final int GL_DOT3_RGB = 34478; // 0x86ae
+    field public static final int GL_DOT3_RGBA = 34479; // 0x86af
+    field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8
+    field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893
+    field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895
+    field public static final int GL_FRONT_FACE = 2886; // 0xb46
+    field public static final int GL_GENERATE_MIPMAP = 33169; // 0x8191
+    field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192
+    field public static final int GL_INTERPOLATE = 34165; // 0x8575
+    field public static final int GL_LINE_WIDTH = 2849; // 0xb21
+    field public static final int GL_LOGIC_OP_MODE = 3056; // 0xbf0
+    field public static final int GL_MATRIX_MODE = 2976; // 0xba0
+    field public static final int GL_MAX_CLIP_PLANES = 3378; // 0xd32
+    field public static final int GL_MODELVIEW_MATRIX = 2982; // 0xba6
+    field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d
+    field public static final int GL_MODELVIEW_STACK_DEPTH = 2979; // 0xba3
+    field public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 34967; // 0x8897
+    field public static final int GL_NORMAL_ARRAY_POINTER = 32911; // 0x808f
+    field public static final int GL_NORMAL_ARRAY_STRIDE = 32895; // 0x807f
+    field public static final int GL_NORMAL_ARRAY_TYPE = 32894; // 0x807e
+    field public static final int GL_OPERAND0_ALPHA = 34200; // 0x8598
+    field public static final int GL_OPERAND0_RGB = 34192; // 0x8590
+    field public static final int GL_OPERAND1_ALPHA = 34201; // 0x8599
+    field public static final int GL_OPERAND1_RGB = 34193; // 0x8591
+    field public static final int GL_OPERAND2_ALPHA = 34202; // 0x859a
+    field public static final int GL_OPERAND2_RGB = 34194; // 0x8592
+    field public static final int GL_POINT_DISTANCE_ATTENUATION = 33065; // 0x8129
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 35743; // 0x8b9f
+    field public static final int GL_POINT_SIZE_ARRAY_OES = 35740; // 0x8b9c
+    field public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 35212; // 0x898c
+    field public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 35211; // 0x898b
+    field public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 35210; // 0x898a
+    field public static final int GL_POINT_SIZE_MAX = 33063; // 0x8127
+    field public static final int GL_POINT_SIZE_MIN = 33062; // 0x8126
+    field public static final int GL_POINT_SPRITE_OES = 34913; // 0x8861
+    field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038
+    field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00
+    field public static final int GL_PREVIOUS = 34168; // 0x8578
+    field public static final int GL_PRIMARY_COLOR = 34167; // 0x8577
+    field public static final int GL_PROJECTION_MATRIX = 2983; // 0xba7
+    field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e
+    field public static final int GL_PROJECTION_STACK_DEPTH = 2980; // 0xba4
+    field public static final int GL_RGB_SCALE = 34163; // 0x8573
+    field public static final int GL_SAMPLES = 32937; // 0x80a9
+    field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8
+    field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab
+    field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa
+    field public static final int GL_SCISSOR_BOX = 3088; // 0xc10
+    field public static final int GL_SHADE_MODEL = 2900; // 0xb54
+    field public static final int GL_SRC0_ALPHA = 34184; // 0x8588
+    field public static final int GL_SRC0_RGB = 34176; // 0x8580
+    field public static final int GL_SRC1_ALPHA = 34185; // 0x8589
+    field public static final int GL_SRC1_RGB = 34177; // 0x8581
+    field public static final int GL_SRC2_ALPHA = 34186; // 0x858a
+    field public static final int GL_SRC2_RGB = 34178; // 0x8582
+    field public static final int GL_STATIC_DRAW = 35044; // 0x88e4
+    field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91
+    field public static final int GL_STENCIL_FAIL = 2964; // 0xb94
+    field public static final int GL_STENCIL_FUNC = 2962; // 0xb92
+    field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95
+    field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96
+    field public static final int GL_STENCIL_REF = 2967; // 0xb97
+    field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93
+    field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98
+    field public static final int GL_SUBTRACT = 34023; // 0x84e7
+    field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069
+    field public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970; // 0x889a
+    field public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 32914; // 0x8092
+    field public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 32904; // 0x8088
+    field public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 32906; // 0x808a
+    field public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 32905; // 0x8089
+    field public static final int GL_TEXTURE_MATRIX = 2984; // 0xba8
+    field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f
+    field public static final int GL_TEXTURE_STACK_DEPTH = 2981; // 0xba5
+    field public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 34966; // 0x8896
+    field public static final int GL_VERTEX_ARRAY_POINTER = 32910; // 0x808e
+    field public static final int GL_VERTEX_ARRAY_SIZE = 32890; // 0x807a
+    field public static final int GL_VERTEX_ARRAY_STRIDE = 32892; // 0x807c
+    field public static final int GL_VERTEX_ARRAY_TYPE = 32891; // 0x807b
+    field public static final int GL_VIEWPORT = 2978; // 0xba2
+    field public static final int GL_WRITE_ONLY = 35001; // 0x88b9
+  }
+
+  public class GLES11Ext {
+    ctor public GLES11Ext();
+    method public static void glAlphaFuncxOES(int, int);
+    method public static void glBindFramebufferOES(int, int);
+    method public static void glBindRenderbufferOES(int, int);
+    method public static void glBlendEquationOES(int);
+    method public static void glBlendEquationSeparateOES(int, int);
+    method public static void glBlendFuncSeparateOES(int, int, int, int);
+    method public static int glCheckFramebufferStatusOES(int);
+    method public static void glClearColorxOES(int, int, int, int);
+    method public static void glClearDepthfOES(float);
+    method public static void glClearDepthxOES(int);
+    method public static void glClipPlanefOES(int, float[], int);
+    method public static void glClipPlanefOES(int, java.nio.FloatBuffer);
+    method public static void glClipPlanexOES(int, int[], int);
+    method public static void glClipPlanexOES(int, java.nio.IntBuffer);
+    method public static void glColor4xOES(int, int, int, int);
+    method public static void glCurrentPaletteMatrixOES(int);
+    method public static void glDeleteFramebuffersOES(int, int[], int);
+    method public static void glDeleteFramebuffersOES(int, java.nio.IntBuffer);
+    method public static void glDeleteRenderbuffersOES(int, int[], int);
+    method public static void glDeleteRenderbuffersOES(int, java.nio.IntBuffer);
+    method public static void glDepthRangefOES(float, float);
+    method public static void glDepthRangexOES(int, int);
+    method public static void glDrawTexfOES(float, float, float, float, float);
+    method public static void glDrawTexfvOES(float[], int);
+    method public static void glDrawTexfvOES(java.nio.FloatBuffer);
+    method public static void glDrawTexiOES(int, int, int, int, int);
+    method public static void glDrawTexivOES(int[], int);
+    method public static void glDrawTexivOES(java.nio.IntBuffer);
+    method public static void glDrawTexsOES(short, short, short, short, short);
+    method public static void glDrawTexsvOES(short[], int);
+    method public static void glDrawTexsvOES(java.nio.ShortBuffer);
+    method public static void glDrawTexxOES(int, int, int, int, int);
+    method public static void glDrawTexxvOES(int[], int);
+    method public static void glDrawTexxvOES(java.nio.IntBuffer);
+    method public static void glEGLImageTargetRenderbufferStorageOES(int, java.nio.Buffer);
+    method public static void glEGLImageTargetTexture2DOES(int, java.nio.Buffer);
+    method public static void glFogxOES(int, int);
+    method public static void glFogxvOES(int, int[], int);
+    method public static void glFogxvOES(int, java.nio.IntBuffer);
+    method public static void glFramebufferRenderbufferOES(int, int, int, int);
+    method public static void glFramebufferTexture2DOES(int, int, int, int, int);
+    method public static void glFrustumfOES(float, float, float, float, float, float);
+    method public static void glFrustumxOES(int, int, int, int, int, int);
+    method public static void glGenFramebuffersOES(int, int[], int);
+    method public static void glGenFramebuffersOES(int, java.nio.IntBuffer);
+    method public static void glGenRenderbuffersOES(int, int[], int);
+    method public static void glGenRenderbuffersOES(int, java.nio.IntBuffer);
+    method public static void glGenerateMipmapOES(int);
+    method public static void glGetClipPlanefOES(int, float[], int);
+    method public static void glGetClipPlanefOES(int, java.nio.FloatBuffer);
+    method public static void glGetClipPlanexOES(int, int[], int);
+    method public static void glGetClipPlanexOES(int, java.nio.IntBuffer);
+    method public static void glGetFixedvOES(int, int[], int);
+    method public static void glGetFixedvOES(int, java.nio.IntBuffer);
+    method public static void glGetFramebufferAttachmentParameterivOES(int, int, int, int[], int);
+    method public static void glGetFramebufferAttachmentParameterivOES(int, int, int, java.nio.IntBuffer);
+    method public static void glGetLightxvOES(int, int, int[], int);
+    method public static void glGetLightxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetMaterialxvOES(int, int, int[], int);
+    method public static void glGetMaterialxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetRenderbufferParameterivOES(int, int, int[], int);
+    method public static void glGetRenderbufferParameterivOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexEnvxvOES(int, int, int[], int);
+    method public static void glGetTexEnvxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexGenfvOES(int, int, float[], int);
+    method public static void glGetTexGenfvOES(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexGenivOES(int, int, int[], int);
+    method public static void glGetTexGenivOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexGenxvOES(int, int, int[], int);
+    method public static void glGetTexGenxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterxvOES(int, int, int[], int);
+    method public static void glGetTexParameterxvOES(int, int, java.nio.IntBuffer);
+    method public static boolean glIsFramebufferOES(int);
+    method public static boolean glIsRenderbufferOES(int);
+    method public static void glLightModelxOES(int, int);
+    method public static void glLightModelxvOES(int, int[], int);
+    method public static void glLightModelxvOES(int, java.nio.IntBuffer);
+    method public static void glLightxOES(int, int, int);
+    method public static void glLightxvOES(int, int, int[], int);
+    method public static void glLightxvOES(int, int, java.nio.IntBuffer);
+    method public static void glLineWidthxOES(int);
+    method public static void glLoadMatrixxOES(int[], int);
+    method public static void glLoadMatrixxOES(java.nio.IntBuffer);
+    method public static void glLoadPaletteFromModelViewMatrixOES();
+    method public static void glMaterialxOES(int, int, int);
+    method public static void glMaterialxvOES(int, int, int[], int);
+    method public static void glMaterialxvOES(int, int, java.nio.IntBuffer);
+    method public static void glMatrixIndexPointerOES(int, int, int, java.nio.Buffer);
+    method public static void glMultMatrixxOES(int[], int);
+    method public static void glMultMatrixxOES(java.nio.IntBuffer);
+    method public static void glMultiTexCoord4xOES(int, int, int, int, int);
+    method public static void glNormal3xOES(int, int, int);
+    method public static void glOrthofOES(float, float, float, float, float, float);
+    method public static void glOrthoxOES(int, int, int, int, int, int);
+    method public static void glPointParameterxOES(int, int);
+    method public static void glPointParameterxvOES(int, int[], int);
+    method public static void glPointParameterxvOES(int, java.nio.IntBuffer);
+    method public static void glPointSizexOES(int);
+    method public static void glPolygonOffsetxOES(int, int);
+    method public static void glRenderbufferStorageOES(int, int, int, int);
+    method public static void glRotatexOES(int, int, int, int);
+    method public static void glSampleCoveragexOES(int, boolean);
+    method public static void glScalexOES(int, int, int);
+    method public static void glTexEnvxOES(int, int, int);
+    method public static void glTexEnvxvOES(int, int, int[], int);
+    method public static void glTexEnvxvOES(int, int, java.nio.IntBuffer);
+    method public static void glTexGenfOES(int, int, float);
+    method public static void glTexGenfvOES(int, int, float[], int);
+    method public static void glTexGenfvOES(int, int, java.nio.FloatBuffer);
+    method public static void glTexGeniOES(int, int, int);
+    method public static void glTexGenivOES(int, int, int[], int);
+    method public static void glTexGenivOES(int, int, java.nio.IntBuffer);
+    method public static void glTexGenxOES(int, int, int);
+    method public static void glTexGenxvOES(int, int, int[], int);
+    method public static void glTexGenxvOES(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterxOES(int, int, int);
+    method public static void glTexParameterxvOES(int, int, int[], int);
+    method public static void glTexParameterxvOES(int, int, java.nio.IntBuffer);
+    method public static void glTranslatexOES(int, int, int);
+    method public static void glWeightPointerOES(int, int, int, java.nio.Buffer);
+    field public static final int GL_3DC_XY_AMD = 34810; // 0x87fa
+    field public static final int GL_3DC_X_AMD = 34809; // 0x87f9
+    field public static final int GL_ATC_RGBA_EXPLICIT_ALPHA_AMD = 35987; // 0x8c93
+    field public static final int GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 34798; // 0x87ee
+    field public static final int GL_ATC_RGB_AMD = 35986; // 0x8c92
+    field public static final int GL_BGRA = 32993; // 0x80e1
+    field public static final int GL_BLEND_DST_ALPHA_OES = 32970; // 0x80ca
+    field public static final int GL_BLEND_DST_RGB_OES = 32968; // 0x80c8
+    field public static final int GL_BLEND_EQUATION_ALPHA_OES = 34877; // 0x883d
+    field public static final int GL_BLEND_EQUATION_OES = 32777; // 0x8009
+    field public static final int GL_BLEND_EQUATION_RGB_OES = 32777; // 0x8009
+    field public static final int GL_BLEND_SRC_ALPHA_OES = 32971; // 0x80cb
+    field public static final int GL_BLEND_SRC_RGB_OES = 32969; // 0x80c9
+    field public static final int GL_BUFFER_ACCESS_OES = 35003; // 0x88bb
+    field public static final int GL_BUFFER_MAPPED_OES = 35004; // 0x88bc
+    field public static final int GL_BUFFER_MAP_POINTER_OES = 35005; // 0x88bd
+    field public static final int GL_COLOR_ATTACHMENT0_OES = 36064; // 0x8ce0
+    field public static final int GL_CURRENT_PALETTE_MATRIX_OES = 34883; // 0x8843
+    field public static final int GL_DECR_WRAP_OES = 34056; // 0x8508
+    field public static final int GL_DEPTH24_STENCIL8_OES = 35056; // 0x88f0
+    field public static final int GL_DEPTH_ATTACHMENT_OES = 36096; // 0x8d00
+    field public static final int GL_DEPTH_COMPONENT16_OES = 33189; // 0x81a5
+    field public static final int GL_DEPTH_COMPONENT24_OES = 33190; // 0x81a6
+    field public static final int GL_DEPTH_COMPONENT32_OES = 33191; // 0x81a7
+    field public static final int GL_DEPTH_STENCIL_OES = 34041; // 0x84f9
+    field public static final int GL_ETC1_RGB8_OES = 36196; // 0x8d64
+    field public static final int GL_FIXED_OES = 5132; // 0x140c
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 36049; // 0x8cd1
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 36048; // 0x8cd0
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 36051; // 0x8cd3
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 36050; // 0x8cd2
+    field public static final int GL_FRAMEBUFFER_BINDING_OES = 36006; // 0x8ca6
+    field public static final int GL_FRAMEBUFFER_COMPLETE_OES = 36053; // 0x8cd5
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 36054; // 0x8cd6
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 36057; // 0x8cd9
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 36058; // 0x8cda
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 36055; // 0x8cd7
+    field public static final int GL_FRAMEBUFFER_OES = 36160; // 0x8d40
+    field public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 36061; // 0x8cdd
+    field public static final int GL_FUNC_ADD_OES = 32774; // 0x8006
+    field public static final int GL_FUNC_REVERSE_SUBTRACT_OES = 32779; // 0x800b
+    field public static final int GL_FUNC_SUBTRACT_OES = 32778; // 0x800a
+    field public static final int GL_INCR_WRAP_OES = 34055; // 0x8507
+    field public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 1286; // 0x506
+    field public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 35742; // 0x8b9e
+    field public static final int GL_MATRIX_INDEX_ARRAY_OES = 34884; // 0x8844
+    field public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 34889; // 0x8849
+    field public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 34886; // 0x8846
+    field public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 34888; // 0x8848
+    field public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 34887; // 0x8847
+    field public static final int GL_MATRIX_PALETTE_OES = 34880; // 0x8840
+    field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES = 34076; // 0x851c
+    field public static final int GL_MAX_PALETTE_MATRICES_OES = 34882; // 0x8842
+    field public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 34024; // 0x84e8
+    field public static final int GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047; // 0x84ff
+    field public static final int GL_MAX_VERTEX_UNITS_OES = 34468; // 0x86a4
+    field public static final int GL_MIRRORED_REPEAT_OES = 33648; // 0x8370
+    field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d
+    field public static final int GL_NONE_OES = 0; // 0x0
+    field public static final int GL_NORMAL_MAP_OES = 34065; // 0x8511
+    field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e
+    field public static final int GL_REFLECTION_MAP_OES = 34066; // 0x8512
+    field public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 36179; // 0x8d53
+    field public static final int GL_RENDERBUFFER_BINDING_OES = 36007; // 0x8ca7
+    field public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 36178; // 0x8d52
+    field public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 36180; // 0x8d54
+    field public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 36177; // 0x8d51
+    field public static final int GL_RENDERBUFFER_HEIGHT_OES = 36163; // 0x8d43
+    field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 36164; // 0x8d44
+    field public static final int GL_RENDERBUFFER_OES = 36161; // 0x8d41
+    field public static final int GL_RENDERBUFFER_RED_SIZE_OES = 36176; // 0x8d50
+    field public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 36181; // 0x8d55
+    field public static final int GL_RENDERBUFFER_WIDTH_OES = 36162; // 0x8d42
+    field public static final int GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES = 36200; // 0x8d68
+    field public static final int GL_RGB565_OES = 36194; // 0x8d62
+    field public static final int GL_RGB5_A1_OES = 32855; // 0x8057
+    field public static final int GL_RGB8_OES = 32849; // 0x8051
+    field public static final int GL_RGBA4_OES = 32854; // 0x8056
+    field public static final int GL_RGBA8_OES = 32856; // 0x8058
+    field public static final int GL_SAMPLER_EXTERNAL_OES = 36198; // 0x8d66
+    field public static final int GL_STENCIL_ATTACHMENT_OES = 36128; // 0x8d20
+    field public static final int GL_STENCIL_INDEX1_OES = 36166; // 0x8d46
+    field public static final int GL_STENCIL_INDEX4_OES = 36167; // 0x8d47
+    field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP_OES = 34068; // 0x8514
+    field public static final int GL_TEXTURE_BINDING_EXTERNAL_OES = 36199; // 0x8d67
+    field public static final int GL_TEXTURE_CROP_RECT_OES = 35741; // 0x8b9d
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES = 34070; // 0x8516
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES = 34072; // 0x8518
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES = 34074; // 0x851a
+    field public static final int GL_TEXTURE_CUBE_MAP_OES = 34067; // 0x8513
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES = 34069; // 0x8515
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES = 34071; // 0x8517
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES = 34073; // 0x8519
+    field public static final int GL_TEXTURE_EXTERNAL_OES = 36197; // 0x8d65
+    field public static final int GL_TEXTURE_GEN_MODE_OES = 9472; // 0x2500
+    field public static final int GL_TEXTURE_GEN_STR_OES = 36192; // 0x8d60
+    field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f
+    field public static final int GL_TEXTURE_MAX_ANISOTROPY_EXT = 34046; // 0x84fe
+    field public static final int GL_UNSIGNED_INT_24_8_OES = 34042; // 0x84fa
+    field public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 34974; // 0x889e
+    field public static final int GL_WEIGHT_ARRAY_OES = 34477; // 0x86ad
+    field public static final int GL_WEIGHT_ARRAY_POINTER_OES = 34476; // 0x86ac
+    field public static final int GL_WEIGHT_ARRAY_SIZE_OES = 34475; // 0x86ab
+    field public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 34474; // 0x86aa
+    field public static final int GL_WEIGHT_ARRAY_TYPE_OES = 34473; // 0x86a9
+    field public static final int GL_WRITE_ONLY_OES = 35001; // 0x88b9
+  }
+
+  public class GLES20 {
+    ctor public GLES20();
+    method public static void glActiveTexture(int);
+    method public static void glAttachShader(int, int);
+    method public static void glBindAttribLocation(int, int, String);
+    method public static void glBindBuffer(int, int);
+    method public static void glBindFramebuffer(int, int);
+    method public static void glBindRenderbuffer(int, int);
+    method public static void glBindTexture(int, int);
+    method public static void glBlendColor(float, float, float, float);
+    method public static void glBlendEquation(int);
+    method public static void glBlendEquationSeparate(int, int);
+    method public static void glBlendFunc(int, int);
+    method public static void glBlendFuncSeparate(int, int, int, int);
+    method public static void glBufferData(int, int, java.nio.Buffer, int);
+    method public static void glBufferSubData(int, int, int, java.nio.Buffer);
+    method public static int glCheckFramebufferStatus(int);
+    method public static void glClear(int);
+    method public static void glClearColor(float, float, float, float);
+    method public static void glClearDepthf(float);
+    method public static void glClearStencil(int);
+    method public static void glColorMask(boolean, boolean, boolean, boolean);
+    method public static void glCompileShader(int);
+    method public static void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public static void glCopyTexSubImage2D(int, int, int, int, int, int, int, int);
+    method public static int glCreateProgram();
+    method public static int glCreateShader(int);
+    method public static void glCullFace(int);
+    method public static void glDeleteBuffers(int, int[], int);
+    method public static void glDeleteBuffers(int, java.nio.IntBuffer);
+    method public static void glDeleteFramebuffers(int, int[], int);
+    method public static void glDeleteFramebuffers(int, java.nio.IntBuffer);
+    method public static void glDeleteProgram(int);
+    method public static void glDeleteRenderbuffers(int, int[], int);
+    method public static void glDeleteRenderbuffers(int, java.nio.IntBuffer);
+    method public static void glDeleteShader(int);
+    method public static void glDeleteTextures(int, int[], int);
+    method public static void glDeleteTextures(int, java.nio.IntBuffer);
+    method public static void glDepthFunc(int);
+    method public static void glDepthMask(boolean);
+    method public static void glDepthRangef(float, float);
+    method public static void glDetachShader(int, int);
+    method public static void glDisable(int);
+    method public static void glDisableVertexAttribArray(int);
+    method public static void glDrawArrays(int, int, int);
+    method public static void glDrawElements(int, int, int, int);
+    method public static void glDrawElements(int, int, int, java.nio.Buffer);
+    method public static void glEnable(int);
+    method public static void glEnableVertexAttribArray(int);
+    method public static void glFinish();
+    method public static void glFlush();
+    method public static void glFramebufferRenderbuffer(int, int, int, int);
+    method public static void glFramebufferTexture2D(int, int, int, int, int);
+    method public static void glFrontFace(int);
+    method public static void glGenBuffers(int, int[], int);
+    method public static void glGenBuffers(int, java.nio.IntBuffer);
+    method public static void glGenFramebuffers(int, int[], int);
+    method public static void glGenFramebuffers(int, java.nio.IntBuffer);
+    method public static void glGenRenderbuffers(int, int[], int);
+    method public static void glGenRenderbuffers(int, java.nio.IntBuffer);
+    method public static void glGenTextures(int, int[], int);
+    method public static void glGenTextures(int, java.nio.IntBuffer);
+    method public static void glGenerateMipmap(int);
+    method public static void glGetActiveAttrib(int, int, int, int[], int, int[], int, int[], int, byte[], int);
+    method public static String glGetActiveAttrib(int, int, int[], int, int[], int);
+    method public static String glGetActiveAttrib(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetActiveUniform(int, int, int, int[], int, int[], int, int[], int, byte[], int);
+    method public static String glGetActiveUniform(int, int, int[], int, int[], int);
+    method public static String glGetActiveUniform(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetAttachedShaders(int, int, int[], int, int[], int);
+    method public static void glGetAttachedShaders(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static int glGetAttribLocation(int, String);
+    method public static void glGetBooleanv(int, boolean[], int);
+    method public static void glGetBooleanv(int, java.nio.IntBuffer);
+    method public static void glGetBufferParameteriv(int, int, int[], int);
+    method public static void glGetBufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static int glGetError();
+    method public static void glGetFloatv(int, float[], int);
+    method public static void glGetFloatv(int, java.nio.FloatBuffer);
+    method public static void glGetFramebufferAttachmentParameteriv(int, int, int, int[], int);
+    method public static void glGetFramebufferAttachmentParameteriv(int, int, int, java.nio.IntBuffer);
+    method public static void glGetIntegerv(int, int[], int);
+    method public static void glGetIntegerv(int, java.nio.IntBuffer);
+    method public static String glGetProgramInfoLog(int);
+    method public static void glGetProgramiv(int, int, int[], int);
+    method public static void glGetProgramiv(int, int, java.nio.IntBuffer);
+    method public static void glGetRenderbufferParameteriv(int, int, int[], int);
+    method public static void glGetRenderbufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static String glGetShaderInfoLog(int);
+    method public static void glGetShaderPrecisionFormat(int, int, int[], int, int[], int);
+    method public static void glGetShaderPrecisionFormat(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetShaderSource(int, int, int[], int, byte[], int);
+    method public static String glGetShaderSource(int);
+    method public static void glGetShaderiv(int, int, int[], int);
+    method public static void glGetShaderiv(int, int, java.nio.IntBuffer);
+    method public static String glGetString(int);
+    method public static void glGetTexParameterfv(int, int, float[], int);
+    method public static void glGetTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexParameteriv(int, int, int[], int);
+    method public static void glGetTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static int glGetUniformLocation(int, String);
+    method public static void glGetUniformfv(int, int, float[], int);
+    method public static void glGetUniformfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetUniformiv(int, int, int[], int);
+    method public static void glGetUniformiv(int, int, java.nio.IntBuffer);
+    method public static void glGetVertexAttribfv(int, int, float[], int);
+    method public static void glGetVertexAttribfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetVertexAttribiv(int, int, int[], int);
+    method public static void glGetVertexAttribiv(int, int, java.nio.IntBuffer);
+    method public static void glHint(int, int);
+    method public static boolean glIsBuffer(int);
+    method public static boolean glIsEnabled(int);
+    method public static boolean glIsFramebuffer(int);
+    method public static boolean glIsProgram(int);
+    method public static boolean glIsRenderbuffer(int);
+    method public static boolean glIsShader(int);
+    method public static boolean glIsTexture(int);
+    method public static void glLineWidth(float);
+    method public static void glLinkProgram(int);
+    method public static void glPixelStorei(int, int);
+    method public static void glPolygonOffset(float, float);
+    method public static void glReadPixels(int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glReleaseShaderCompiler();
+    method public static void glRenderbufferStorage(int, int, int, int);
+    method public static void glSampleCoverage(float, boolean);
+    method public static void glScissor(int, int, int, int);
+    method public static void glShaderBinary(int, int[], int, int, java.nio.Buffer, int);
+    method public static void glShaderBinary(int, java.nio.IntBuffer, int, java.nio.Buffer, int);
+    method public static void glShaderSource(int, String);
+    method public static void glStencilFunc(int, int, int);
+    method public static void glStencilFuncSeparate(int, int, int, int);
+    method public static void glStencilMask(int);
+    method public static void glStencilMaskSeparate(int, int);
+    method public static void glStencilOp(int, int, int);
+    method public static void glStencilOpSeparate(int, int, int, int);
+    method public static void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexParameterf(int, int, float);
+    method public static void glTexParameterfv(int, int, float[], int);
+    method public static void glTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glTexParameteri(int, int, int);
+    method public static void glTexParameteriv(int, int, int[], int);
+    method public static void glTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glUniform1f(int, float);
+    method public static void glUniform1fv(int, int, float[], int);
+    method public static void glUniform1fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform1i(int, int);
+    method public static void glUniform1iv(int, int, int[], int);
+    method public static void glUniform1iv(int, int, java.nio.IntBuffer);
+    method public static void glUniform2f(int, float, float);
+    method public static void glUniform2fv(int, int, float[], int);
+    method public static void glUniform2fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform2i(int, int, int);
+    method public static void glUniform2iv(int, int, int[], int);
+    method public static void glUniform2iv(int, int, java.nio.IntBuffer);
+    method public static void glUniform3f(int, float, float, float);
+    method public static void glUniform3fv(int, int, float[], int);
+    method public static void glUniform3fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform3i(int, int, int, int);
+    method public static void glUniform3iv(int, int, int[], int);
+    method public static void glUniform3iv(int, int, java.nio.IntBuffer);
+    method public static void glUniform4f(int, float, float, float, float);
+    method public static void glUniform4fv(int, int, float[], int);
+    method public static void glUniform4fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform4i(int, int, int, int, int);
+    method public static void glUniform4iv(int, int, int[], int);
+    method public static void glUniform4iv(int, int, java.nio.IntBuffer);
+    method public static void glUniformMatrix2fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix2fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix3fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix3fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix4fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix4fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUseProgram(int);
+    method public static void glValidateProgram(int);
+    method public static void glVertexAttrib1f(int, float);
+    method public static void glVertexAttrib1fv(int, float[], int);
+    method public static void glVertexAttrib1fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttrib2f(int, float, float);
+    method public static void glVertexAttrib2fv(int, float[], int);
+    method public static void glVertexAttrib2fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttrib3f(int, float, float, float);
+    method public static void glVertexAttrib3fv(int, float[], int);
+    method public static void glVertexAttrib3fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttrib4f(int, float, float, float, float);
+    method public static void glVertexAttrib4fv(int, float[], int);
+    method public static void glVertexAttrib4fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttribPointer(int, int, int, boolean, int, int);
+    method public static void glVertexAttribPointer(int, int, int, boolean, int, java.nio.Buffer);
+    method public static void glViewport(int, int, int, int);
+    field public static final int GL_ACTIVE_ATTRIBUTES = 35721; // 0x8b89
+    field public static final int GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = 35722; // 0x8b8a
+    field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0
+    field public static final int GL_ACTIVE_UNIFORMS = 35718; // 0x8b86
+    field public static final int GL_ACTIVE_UNIFORM_MAX_LENGTH = 35719; // 0x8b87
+    field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e
+    field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d
+    field public static final int GL_ALPHA = 6406; // 0x1906
+    field public static final int GL_ALPHA_BITS = 3413; // 0xd55
+    field public static final int GL_ALWAYS = 519; // 0x207
+    field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892
+    field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894
+    field public static final int GL_ATTACHED_SHADERS = 35717; // 0x8b85
+    field public static final int GL_BACK = 1029; // 0x405
+    field public static final int GL_BLEND = 3042; // 0xbe2
+    field public static final int GL_BLEND_COLOR = 32773; // 0x8005
+    field public static final int GL_BLEND_DST_ALPHA = 32970; // 0x80ca
+    field public static final int GL_BLEND_DST_RGB = 32968; // 0x80c8
+    field public static final int GL_BLEND_EQUATION = 32777; // 0x8009
+    field public static final int GL_BLEND_EQUATION_ALPHA = 34877; // 0x883d
+    field public static final int GL_BLEND_EQUATION_RGB = 32777; // 0x8009
+    field public static final int GL_BLEND_SRC_ALPHA = 32971; // 0x80cb
+    field public static final int GL_BLEND_SRC_RGB = 32969; // 0x80c9
+    field public static final int GL_BLUE_BITS = 3412; // 0xd54
+    field public static final int GL_BOOL = 35670; // 0x8b56
+    field public static final int GL_BOOL_VEC2 = 35671; // 0x8b57
+    field public static final int GL_BOOL_VEC3 = 35672; // 0x8b58
+    field public static final int GL_BOOL_VEC4 = 35673; // 0x8b59
+    field public static final int GL_BUFFER_SIZE = 34660; // 0x8764
+    field public static final int GL_BUFFER_USAGE = 34661; // 0x8765
+    field public static final int GL_BYTE = 5120; // 0x1400
+    field public static final int GL_CCW = 2305; // 0x901
+    field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f
+    field public static final int GL_COLOR_ATTACHMENT0 = 36064; // 0x8ce0
+    field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000
+    field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22
+    field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23
+    field public static final int GL_COMPILE_STATUS = 35713; // 0x8b81
+    field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3
+    field public static final int GL_CONSTANT_ALPHA = 32771; // 0x8003
+    field public static final int GL_CONSTANT_COLOR = 32769; // 0x8001
+    field public static final int GL_CULL_FACE = 2884; // 0xb44
+    field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45
+    field public static final int GL_CURRENT_PROGRAM = 35725; // 0x8b8d
+    field public static final int GL_CURRENT_VERTEX_ATTRIB = 34342; // 0x8626
+    field public static final int GL_CW = 2304; // 0x900
+    field public static final int GL_DECR = 7683; // 0x1e03
+    field public static final int GL_DECR_WRAP = 34056; // 0x8508
+    field public static final int GL_DELETE_STATUS = 35712; // 0x8b80
+    field public static final int GL_DEPTH_ATTACHMENT = 36096; // 0x8d00
+    field public static final int GL_DEPTH_BITS = 3414; // 0xd56
+    field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100
+    field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73
+    field public static final int GL_DEPTH_COMPONENT = 6402; // 0x1902
+    field public static final int GL_DEPTH_COMPONENT16 = 33189; // 0x81a5
+    field public static final int GL_DEPTH_FUNC = 2932; // 0xb74
+    field public static final int GL_DEPTH_RANGE = 2928; // 0xb70
+    field public static final int GL_DEPTH_TEST = 2929; // 0xb71
+    field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72
+    field public static final int GL_DITHER = 3024; // 0xbd0
+    field public static final int GL_DONT_CARE = 4352; // 0x1100
+    field public static final int GL_DST_ALPHA = 772; // 0x304
+    field public static final int GL_DST_COLOR = 774; // 0x306
+    field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8
+    field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893
+    field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895
+    field public static final int GL_EQUAL = 514; // 0x202
+    field public static final int GL_EXTENSIONS = 7939; // 0x1f03
+    field public static final int GL_FALSE = 0; // 0x0
+    field public static final int GL_FASTEST = 4353; // 0x1101
+    field public static final int GL_FIXED = 5132; // 0x140c
+    field public static final int GL_FLOAT = 5126; // 0x1406
+    field public static final int GL_FLOAT_MAT2 = 35674; // 0x8b5a
+    field public static final int GL_FLOAT_MAT3 = 35675; // 0x8b5b
+    field public static final int GL_FLOAT_MAT4 = 35676; // 0x8b5c
+    field public static final int GL_FLOAT_VEC2 = 35664; // 0x8b50
+    field public static final int GL_FLOAT_VEC3 = 35665; // 0x8b51
+    field public static final int GL_FLOAT_VEC4 = 35666; // 0x8b52
+    field public static final int GL_FRAGMENT_SHADER = 35632; // 0x8b30
+    field public static final int GL_FRAMEBUFFER = 36160; // 0x8d40
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049; // 0x8cd1
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048; // 0x8cd0
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051; // 0x8cd3
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050; // 0x8cd2
+    field public static final int GL_FRAMEBUFFER_BINDING = 36006; // 0x8ca6
+    field public static final int GL_FRAMEBUFFER_COMPLETE = 36053; // 0x8cd5
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; // 0x8cd6
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057; // 0x8cd9
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; // 0x8cd7
+    field public static final int GL_FRAMEBUFFER_UNSUPPORTED = 36061; // 0x8cdd
+    field public static final int GL_FRONT = 1028; // 0x404
+    field public static final int GL_FRONT_AND_BACK = 1032; // 0x408
+    field public static final int GL_FRONT_FACE = 2886; // 0xb46
+    field public static final int GL_FUNC_ADD = 32774; // 0x8006
+    field public static final int GL_FUNC_REVERSE_SUBTRACT = 32779; // 0x800b
+    field public static final int GL_FUNC_SUBTRACT = 32778; // 0x800a
+    field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192
+    field public static final int GL_GEQUAL = 518; // 0x206
+    field public static final int GL_GREATER = 516; // 0x204
+    field public static final int GL_GREEN_BITS = 3411; // 0xd53
+    field public static final int GL_HIGH_FLOAT = 36338; // 0x8df2
+    field public static final int GL_HIGH_INT = 36341; // 0x8df5
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT = 35739; // 0x8b9b
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE = 35738; // 0x8b9a
+    field public static final int GL_INCR = 7682; // 0x1e02
+    field public static final int GL_INCR_WRAP = 34055; // 0x8507
+    field public static final int GL_INFO_LOG_LENGTH = 35716; // 0x8b84
+    field public static final int GL_INT = 5124; // 0x1404
+    field public static final int GL_INT_VEC2 = 35667; // 0x8b53
+    field public static final int GL_INT_VEC3 = 35668; // 0x8b54
+    field public static final int GL_INT_VEC4 = 35669; // 0x8b55
+    field public static final int GL_INVALID_ENUM = 1280; // 0x500
+    field public static final int GL_INVALID_FRAMEBUFFER_OPERATION = 1286; // 0x506
+    field public static final int GL_INVALID_OPERATION = 1282; // 0x502
+    field public static final int GL_INVALID_VALUE = 1281; // 0x501
+    field public static final int GL_INVERT = 5386; // 0x150a
+    field public static final int GL_KEEP = 7680; // 0x1e00
+    field public static final int GL_LEQUAL = 515; // 0x203
+    field public static final int GL_LESS = 513; // 0x201
+    field public static final int GL_LINEAR = 9729; // 0x2601
+    field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703
+    field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701
+    field public static final int GL_LINES = 1; // 0x1
+    field public static final int GL_LINE_LOOP = 2; // 0x2
+    field public static final int GL_LINE_STRIP = 3; // 0x3
+    field public static final int GL_LINE_WIDTH = 2849; // 0xb21
+    field public static final int GL_LINK_STATUS = 35714; // 0x8b82
+    field public static final int GL_LOW_FLOAT = 36336; // 0x8df0
+    field public static final int GL_LOW_INT = 36339; // 0x8df3
+    field public static final int GL_LUMINANCE = 6409; // 0x1909
+    field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a
+    field public static final int GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661; // 0x8b4d
+    field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076; // 0x851c
+    field public static final int GL_MAX_FRAGMENT_UNIFORM_VECTORS = 36349; // 0x8dfd
+    field public static final int GL_MAX_RENDERBUFFER_SIZE = 34024; // 0x84e8
+    field public static final int GL_MAX_TEXTURE_IMAGE_UNITS = 34930; // 0x8872
+    field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33
+    field public static final int GL_MAX_VARYING_VECTORS = 36348; // 0x8dfc
+    field public static final int GL_MAX_VERTEX_ATTRIBS = 34921; // 0x8869
+    field public static final int GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660; // 0x8b4c
+    field public static final int GL_MAX_VERTEX_UNIFORM_VECTORS = 36347; // 0x8dfb
+    field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a
+    field public static final int GL_MEDIUM_FLOAT = 36337; // 0x8df1
+    field public static final int GL_MEDIUM_INT = 36340; // 0x8df4
+    field public static final int GL_MIRRORED_REPEAT = 33648; // 0x8370
+    field public static final int GL_NEAREST = 9728; // 0x2600
+    field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702
+    field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700
+    field public static final int GL_NEVER = 512; // 0x200
+    field public static final int GL_NICEST = 4354; // 0x1102
+    field public static final int GL_NONE = 0; // 0x0
+    field public static final int GL_NOTEQUAL = 517; // 0x205
+    field public static final int GL_NO_ERROR = 0; // 0x0
+    field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2
+    field public static final int GL_NUM_SHADER_BINARY_FORMATS = 36345; // 0x8df9
+    field public static final int GL_ONE = 1; // 0x1
+    field public static final int GL_ONE_MINUS_CONSTANT_ALPHA = 32772; // 0x8004
+    field public static final int GL_ONE_MINUS_CONSTANT_COLOR = 32770; // 0x8002
+    field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305
+    field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307
+    field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303
+    field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301
+    field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505
+    field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05
+    field public static final int GL_POINTS = 0; // 0x0
+    field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038
+    field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037
+    field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00
+    field public static final int GL_RED_BITS = 3410; // 0xd52
+    field public static final int GL_RENDERBUFFER = 36161; // 0x8d41
+    field public static final int GL_RENDERBUFFER_ALPHA_SIZE = 36179; // 0x8d53
+    field public static final int GL_RENDERBUFFER_BINDING = 36007; // 0x8ca7
+    field public static final int GL_RENDERBUFFER_BLUE_SIZE = 36178; // 0x8d52
+    field public static final int GL_RENDERBUFFER_DEPTH_SIZE = 36180; // 0x8d54
+    field public static final int GL_RENDERBUFFER_GREEN_SIZE = 36177; // 0x8d51
+    field public static final int GL_RENDERBUFFER_HEIGHT = 36163; // 0x8d43
+    field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT = 36164; // 0x8d44
+    field public static final int GL_RENDERBUFFER_RED_SIZE = 36176; // 0x8d50
+    field public static final int GL_RENDERBUFFER_STENCIL_SIZE = 36181; // 0x8d55
+    field public static final int GL_RENDERBUFFER_WIDTH = 36162; // 0x8d42
+    field public static final int GL_RENDERER = 7937; // 0x1f01
+    field public static final int GL_REPEAT = 10497; // 0x2901
+    field public static final int GL_REPLACE = 7681; // 0x1e01
+    field public static final int GL_RGB = 6407; // 0x1907
+    field public static final int GL_RGB565 = 36194; // 0x8d62
+    field public static final int GL_RGB5_A1 = 32855; // 0x8057
+    field public static final int GL_RGBA = 6408; // 0x1908
+    field public static final int GL_RGBA4 = 32854; // 0x8056
+    field public static final int GL_SAMPLER_2D = 35678; // 0x8b5e
+    field public static final int GL_SAMPLER_CUBE = 35680; // 0x8b60
+    field public static final int GL_SAMPLES = 32937; // 0x80a9
+    field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e
+    field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8
+    field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0
+    field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab
+    field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa
+    field public static final int GL_SCISSOR_BOX = 3088; // 0xc10
+    field public static final int GL_SCISSOR_TEST = 3089; // 0xc11
+    field public static final int GL_SHADER_BINARY_FORMATS = 36344; // 0x8df8
+    field public static final int GL_SHADER_COMPILER = 36346; // 0x8dfa
+    field public static final int GL_SHADER_SOURCE_LENGTH = 35720; // 0x8b88
+    field public static final int GL_SHADER_TYPE = 35663; // 0x8b4f
+    field public static final int GL_SHADING_LANGUAGE_VERSION = 35724; // 0x8b8c
+    field public static final int GL_SHORT = 5122; // 0x1402
+    field public static final int GL_SRC_ALPHA = 770; // 0x302
+    field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308
+    field public static final int GL_SRC_COLOR = 768; // 0x300
+    field public static final int GL_STATIC_DRAW = 35044; // 0x88e4
+    field public static final int GL_STENCIL_ATTACHMENT = 36128; // 0x8d20
+    field public static final int GL_STENCIL_BACK_FAIL = 34817; // 0x8801
+    field public static final int GL_STENCIL_BACK_FUNC = 34816; // 0x8800
+    field public static final int GL_STENCIL_BACK_PASS_DEPTH_FAIL = 34818; // 0x8802
+    field public static final int GL_STENCIL_BACK_PASS_DEPTH_PASS = 34819; // 0x8803
+    field public static final int GL_STENCIL_BACK_REF = 36003; // 0x8ca3
+    field public static final int GL_STENCIL_BACK_VALUE_MASK = 36004; // 0x8ca4
+    field public static final int GL_STENCIL_BACK_WRITEMASK = 36005; // 0x8ca5
+    field public static final int GL_STENCIL_BITS = 3415; // 0xd57
+    field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400
+    field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91
+    field public static final int GL_STENCIL_FAIL = 2964; // 0xb94
+    field public static final int GL_STENCIL_FUNC = 2962; // 0xb92
+    field @Deprecated public static final int GL_STENCIL_INDEX = 6401; // 0x1901
+    field public static final int GL_STENCIL_INDEX8 = 36168; // 0x8d48
+    field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95
+    field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96
+    field public static final int GL_STENCIL_REF = 2967; // 0xb97
+    field public static final int GL_STENCIL_TEST = 2960; // 0xb90
+    field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93
+    field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98
+    field public static final int GL_STREAM_DRAW = 35040; // 0x88e0
+    field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50
+    field public static final int GL_TEXTURE = 5890; // 0x1702
+    field public static final int GL_TEXTURE0 = 33984; // 0x84c0
+    field public static final int GL_TEXTURE1 = 33985; // 0x84c1
+    field public static final int GL_TEXTURE10 = 33994; // 0x84ca
+    field public static final int GL_TEXTURE11 = 33995; // 0x84cb
+    field public static final int GL_TEXTURE12 = 33996; // 0x84cc
+    field public static final int GL_TEXTURE13 = 33997; // 0x84cd
+    field public static final int GL_TEXTURE14 = 33998; // 0x84ce
+    field public static final int GL_TEXTURE15 = 33999; // 0x84cf
+    field public static final int GL_TEXTURE16 = 34000; // 0x84d0
+    field public static final int GL_TEXTURE17 = 34001; // 0x84d1
+    field public static final int GL_TEXTURE18 = 34002; // 0x84d2
+    field public static final int GL_TEXTURE19 = 34003; // 0x84d3
+    field public static final int GL_TEXTURE2 = 33986; // 0x84c2
+    field public static final int GL_TEXTURE20 = 34004; // 0x84d4
+    field public static final int GL_TEXTURE21 = 34005; // 0x84d5
+    field public static final int GL_TEXTURE22 = 34006; // 0x84d6
+    field public static final int GL_TEXTURE23 = 34007; // 0x84d7
+    field public static final int GL_TEXTURE24 = 34008; // 0x84d8
+    field public static final int GL_TEXTURE25 = 34009; // 0x84d9
+    field public static final int GL_TEXTURE26 = 34010; // 0x84da
+    field public static final int GL_TEXTURE27 = 34011; // 0x84db
+    field public static final int GL_TEXTURE28 = 34012; // 0x84dc
+    field public static final int GL_TEXTURE29 = 34013; // 0x84dd
+    field public static final int GL_TEXTURE3 = 33987; // 0x84c3
+    field public static final int GL_TEXTURE30 = 34014; // 0x84de
+    field public static final int GL_TEXTURE31 = 34015; // 0x84df
+    field public static final int GL_TEXTURE4 = 33988; // 0x84c4
+    field public static final int GL_TEXTURE5 = 33989; // 0x84c5
+    field public static final int GL_TEXTURE6 = 33990; // 0x84c6
+    field public static final int GL_TEXTURE7 = 33991; // 0x84c7
+    field public static final int GL_TEXTURE8 = 33992; // 0x84c8
+    field public static final int GL_TEXTURE9 = 33993; // 0x84c9
+    field public static final int GL_TEXTURE_2D = 3553; // 0xde1
+    field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP = 34068; // 0x8514
+    field public static final int GL_TEXTURE_CUBE_MAP = 34067; // 0x8513
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070; // 0x8516
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072; // 0x8518
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074; // 0x851a
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069; // 0x8515
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071; // 0x8517
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073; // 0x8519
+    field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800
+    field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801
+    field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802
+    field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803
+    field public static final int GL_TRIANGLES = 4; // 0x4
+    field public static final int GL_TRIANGLE_FAN = 6; // 0x6
+    field public static final int GL_TRIANGLE_STRIP = 5; // 0x5
+    field public static final int GL_TRUE = 1; // 0x1
+    field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5
+    field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401
+    field public static final int GL_UNSIGNED_INT = 5125; // 0x1405
+    field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403
+    field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033
+    field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034
+    field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363
+    field public static final int GL_VALIDATE_STATUS = 35715; // 0x8b83
+    field public static final int GL_VENDOR = 7936; // 0x1f00
+    field public static final int GL_VERSION = 7938; // 0x1f02
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975; // 0x889f
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_ENABLED = 34338; // 0x8622
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922; // 0x886a
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_POINTER = 34373; // 0x8645
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_SIZE = 34339; // 0x8623
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_STRIDE = 34340; // 0x8624
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_TYPE = 34341; // 0x8625
+    field public static final int GL_VERTEX_SHADER = 35633; // 0x8b31
+    field public static final int GL_VIEWPORT = 2978; // 0xba2
+    field public static final int GL_ZERO = 0; // 0x0
+  }
+
+  public class GLES30 extends android.opengl.GLES20 {
+    ctor public GLES30();
+    method public static void glBeginQuery(int, int);
+    method public static void glBeginTransformFeedback(int);
+    method public static void glBindBufferBase(int, int, int);
+    method public static void glBindBufferRange(int, int, int, int, int);
+    method public static void glBindSampler(int, int);
+    method public static void glBindTransformFeedback(int, int);
+    method public static void glBindVertexArray(int);
+    method public static void glBlitFramebuffer(int, int, int, int, int, int, int, int, int, int);
+    method public static void glClearBufferfi(int, int, float, int);
+    method public static void glClearBufferfv(int, int, float[], int);
+    method public static void glClearBufferfv(int, int, java.nio.FloatBuffer);
+    method public static void glClearBufferiv(int, int, int[], int);
+    method public static void glClearBufferiv(int, int, java.nio.IntBuffer);
+    method public static void glClearBufferuiv(int, int, int[], int);
+    method public static void glClearBufferuiv(int, int, java.nio.IntBuffer);
+    method public static int glClientWaitSync(long, int, long);
+    method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, int);
+    method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glCopyBufferSubData(int, int, int, int, int);
+    method public static void glCopyTexSubImage3D(int, int, int, int, int, int, int, int, int);
+    method public static void glDeleteQueries(int, int[], int);
+    method public static void glDeleteQueries(int, java.nio.IntBuffer);
+    method public static void glDeleteSamplers(int, int[], int);
+    method public static void glDeleteSamplers(int, java.nio.IntBuffer);
+    method public static void glDeleteSync(long);
+    method public static void glDeleteTransformFeedbacks(int, int[], int);
+    method public static void glDeleteTransformFeedbacks(int, java.nio.IntBuffer);
+    method public static void glDeleteVertexArrays(int, int[], int);
+    method public static void glDeleteVertexArrays(int, java.nio.IntBuffer);
+    method public static void glDrawArraysInstanced(int, int, int, int);
+    method public static void glDrawBuffers(int, int[], int);
+    method public static void glDrawBuffers(int, java.nio.IntBuffer);
+    method public static void glDrawElementsInstanced(int, int, int, java.nio.Buffer, int);
+    method public static void glDrawElementsInstanced(int, int, int, int, int);
+    method public static void glDrawRangeElements(int, int, int, int, int, java.nio.Buffer);
+    method public static void glDrawRangeElements(int, int, int, int, int, int);
+    method public static void glEndQuery(int);
+    method public static void glEndTransformFeedback();
+    method public static long glFenceSync(int, int);
+    method public static void glFlushMappedBufferRange(int, int, int);
+    method public static void glFramebufferTextureLayer(int, int, int, int, int);
+    method public static void glGenQueries(int, int[], int);
+    method public static void glGenQueries(int, java.nio.IntBuffer);
+    method public static void glGenSamplers(int, int[], int);
+    method public static void glGenSamplers(int, java.nio.IntBuffer);
+    method public static void glGenTransformFeedbacks(int, int[], int);
+    method public static void glGenTransformFeedbacks(int, java.nio.IntBuffer);
+    method public static void glGenVertexArrays(int, int[], int);
+    method public static void glGenVertexArrays(int, java.nio.IntBuffer);
+    method public static void glGetActiveUniformBlockName(int, int, int, int[], int, byte[], int);
+    method public static void glGetActiveUniformBlockName(int, int, java.nio.Buffer, java.nio.Buffer);
+    method public static String glGetActiveUniformBlockName(int, int);
+    method public static void glGetActiveUniformBlockiv(int, int, int, int[], int);
+    method public static void glGetActiveUniformBlockiv(int, int, int, java.nio.IntBuffer);
+    method public static void glGetActiveUniformsiv(int, int, int[], int, int, int[], int);
+    method public static void glGetActiveUniformsiv(int, int, java.nio.IntBuffer, int, java.nio.IntBuffer);
+    method public static void glGetBufferParameteri64v(int, int, long[], int);
+    method public static void glGetBufferParameteri64v(int, int, java.nio.LongBuffer);
+    method public static java.nio.Buffer glGetBufferPointerv(int, int);
+    method public static int glGetFragDataLocation(int, String);
+    method public static void glGetInteger64i_v(int, int, long[], int);
+    method public static void glGetInteger64i_v(int, int, java.nio.LongBuffer);
+    method public static void glGetInteger64v(int, long[], int);
+    method public static void glGetInteger64v(int, java.nio.LongBuffer);
+    method public static void glGetIntegeri_v(int, int, int[], int);
+    method public static void glGetIntegeri_v(int, int, java.nio.IntBuffer);
+    method public static void glGetInternalformativ(int, int, int, int, int[], int);
+    method public static void glGetInternalformativ(int, int, int, int, java.nio.IntBuffer);
+    method public static void glGetProgramBinary(int, int, int[], int, int[], int, java.nio.Buffer);
+    method public static void glGetProgramBinary(int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.Buffer);
+    method public static void glGetQueryObjectuiv(int, int, int[], int);
+    method public static void glGetQueryObjectuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetQueryiv(int, int, int[], int);
+    method public static void glGetQueryiv(int, int, java.nio.IntBuffer);
+    method public static void glGetSamplerParameterfv(int, int, float[], int);
+    method public static void glGetSamplerParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetSamplerParameteriv(int, int, int[], int);
+    method public static void glGetSamplerParameteriv(int, int, java.nio.IntBuffer);
+    method public static String glGetStringi(int, int);
+    method public static void glGetSynciv(long, int, int, int[], int, int[], int);
+    method public static void glGetSynciv(long, int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetTransformFeedbackVarying(int, int, int, int[], int, int[], int, int[], int, byte[], int);
+    method @Deprecated public static void glGetTransformFeedbackVarying(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte);
+    method public static void glGetTransformFeedbackVarying(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.ByteBuffer);
+    method public static String glGetTransformFeedbackVarying(int, int, int[], int, int[], int);
+    method public static String glGetTransformFeedbackVarying(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static int glGetUniformBlockIndex(int, String);
+    method public static void glGetUniformIndices(int, String[], int[], int);
+    method public static void glGetUniformIndices(int, String[], java.nio.IntBuffer);
+    method public static void glGetUniformuiv(int, int, int[], int);
+    method public static void glGetUniformuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetVertexAttribIiv(int, int, int[], int);
+    method public static void glGetVertexAttribIiv(int, int, java.nio.IntBuffer);
+    method public static void glGetVertexAttribIuiv(int, int, int[], int);
+    method public static void glGetVertexAttribIuiv(int, int, java.nio.IntBuffer);
+    method public static void glInvalidateFramebuffer(int, int, int[], int);
+    method public static void glInvalidateFramebuffer(int, int, java.nio.IntBuffer);
+    method public static void glInvalidateSubFramebuffer(int, int, int[], int, int, int, int, int);
+    method public static void glInvalidateSubFramebuffer(int, int, java.nio.IntBuffer, int, int, int, int);
+    method public static boolean glIsQuery(int);
+    method public static boolean glIsSampler(int);
+    method public static boolean glIsSync(long);
+    method public static boolean glIsTransformFeedback(int);
+    method public static boolean glIsVertexArray(int);
+    method public static java.nio.Buffer glMapBufferRange(int, int, int, int);
+    method public static void glPauseTransformFeedback();
+    method public static void glProgramBinary(int, int, java.nio.Buffer, int);
+    method public static void glProgramParameteri(int, int, int);
+    method public static void glReadBuffer(int);
+    method public static void glReadPixels(int, int, int, int, int, int, int);
+    method public static void glRenderbufferStorageMultisample(int, int, int, int, int);
+    method public static void glResumeTransformFeedback();
+    method public static void glSamplerParameterf(int, int, float);
+    method public static void glSamplerParameterfv(int, int, float[], int);
+    method public static void glSamplerParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glSamplerParameteri(int, int, int);
+    method public static void glSamplerParameteriv(int, int, int[], int);
+    method public static void glSamplerParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, int);
+    method public static void glTexStorage2D(int, int, int, int, int);
+    method public static void glTexStorage3D(int, int, int, int, int, int);
+    method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glTransformFeedbackVaryings(int, String[], int);
+    method public static void glUniform1ui(int, int);
+    method public static void glUniform1uiv(int, int, int[], int);
+    method public static void glUniform1uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniform2ui(int, int, int);
+    method public static void glUniform2uiv(int, int, int[], int);
+    method public static void glUniform2uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniform3ui(int, int, int, int);
+    method public static void glUniform3uiv(int, int, int[], int);
+    method public static void glUniform3uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniform4ui(int, int, int, int, int);
+    method public static void glUniform4uiv(int, int, int[], int);
+    method public static void glUniform4uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniformBlockBinding(int, int, int);
+    method public static void glUniformMatrix2x3fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix2x3fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix2x4fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix2x4fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix3x2fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix3x2fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix3x4fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix3x4fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix4x2fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix4x2fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix4x3fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix4x3fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static boolean glUnmapBuffer(int);
+    method public static void glVertexAttribDivisor(int, int);
+    method public static void glVertexAttribI4i(int, int, int, int, int);
+    method public static void glVertexAttribI4iv(int, int[], int);
+    method public static void glVertexAttribI4iv(int, java.nio.IntBuffer);
+    method public static void glVertexAttribI4ui(int, int, int, int, int);
+    method public static void glVertexAttribI4uiv(int, int[], int);
+    method public static void glVertexAttribI4uiv(int, java.nio.IntBuffer);
+    method public static void glVertexAttribIPointer(int, int, int, int, java.nio.Buffer);
+    method public static void glVertexAttribIPointer(int, int, int, int, int);
+    method public static void glWaitSync(long, int, long);
+    field public static final int GL_ACTIVE_UNIFORM_BLOCKS = 35382; // 0x8a36
+    field public static final int GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 35381; // 0x8a35
+    field public static final int GL_ALREADY_SIGNALED = 37146; // 0x911a
+    field public static final int GL_ANY_SAMPLES_PASSED = 35887; // 0x8c2f
+    field public static final int GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 36202; // 0x8d6a
+    field public static final int GL_BLUE = 6405; // 0x1905
+    field public static final int GL_BUFFER_ACCESS_FLAGS = 37151; // 0x911f
+    field public static final int GL_BUFFER_MAPPED = 35004; // 0x88bc
+    field public static final int GL_BUFFER_MAP_LENGTH = 37152; // 0x9120
+    field public static final int GL_BUFFER_MAP_OFFSET = 37153; // 0x9121
+    field public static final int GL_BUFFER_MAP_POINTER = 35005; // 0x88bd
+    field public static final int GL_COLOR = 6144; // 0x1800
+    field public static final int GL_COLOR_ATTACHMENT1 = 36065; // 0x8ce1
+    field public static final int GL_COLOR_ATTACHMENT10 = 36074; // 0x8cea
+    field public static final int GL_COLOR_ATTACHMENT11 = 36075; // 0x8ceb
+    field public static final int GL_COLOR_ATTACHMENT12 = 36076; // 0x8cec
+    field public static final int GL_COLOR_ATTACHMENT13 = 36077; // 0x8ced
+    field public static final int GL_COLOR_ATTACHMENT14 = 36078; // 0x8cee
+    field public static final int GL_COLOR_ATTACHMENT15 = 36079; // 0x8cef
+    field public static final int GL_COLOR_ATTACHMENT2 = 36066; // 0x8ce2
+    field public static final int GL_COLOR_ATTACHMENT3 = 36067; // 0x8ce3
+    field public static final int GL_COLOR_ATTACHMENT4 = 36068; // 0x8ce4
+    field public static final int GL_COLOR_ATTACHMENT5 = 36069; // 0x8ce5
+    field public static final int GL_COLOR_ATTACHMENT6 = 36070; // 0x8ce6
+    field public static final int GL_COLOR_ATTACHMENT7 = 36071; // 0x8ce7
+    field public static final int GL_COLOR_ATTACHMENT8 = 36072; // 0x8ce8
+    field public static final int GL_COLOR_ATTACHMENT9 = 36073; // 0x8ce9
+    field public static final int GL_COMPARE_REF_TO_TEXTURE = 34894; // 0x884e
+    field public static final int GL_COMPRESSED_R11_EAC = 37488; // 0x9270
+    field public static final int GL_COMPRESSED_RG11_EAC = 37490; // 0x9272
+    field public static final int GL_COMPRESSED_RGB8_ETC2 = 37492; // 0x9274
+    field public static final int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37494; // 0x9276
+    field public static final int GL_COMPRESSED_RGBA8_ETC2_EAC = 37496; // 0x9278
+    field public static final int GL_COMPRESSED_SIGNED_R11_EAC = 37489; // 0x9271
+    field public static final int GL_COMPRESSED_SIGNED_RG11_EAC = 37491; // 0x9273
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 37497; // 0x9279
+    field public static final int GL_COMPRESSED_SRGB8_ETC2 = 37493; // 0x9275
+    field public static final int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37495; // 0x9277
+    field public static final int GL_CONDITION_SATISFIED = 37148; // 0x911c
+    field public static final int GL_COPY_READ_BUFFER = 36662; // 0x8f36
+    field public static final int GL_COPY_READ_BUFFER_BINDING = 36662; // 0x8f36
+    field public static final int GL_COPY_WRITE_BUFFER = 36663; // 0x8f37
+    field public static final int GL_COPY_WRITE_BUFFER_BINDING = 36663; // 0x8f37
+    field public static final int GL_CURRENT_QUERY = 34917; // 0x8865
+    field public static final int GL_DEPTH = 6145; // 0x1801
+    field public static final int GL_DEPTH24_STENCIL8 = 35056; // 0x88f0
+    field public static final int GL_DEPTH32F_STENCIL8 = 36013; // 0x8cad
+    field public static final int GL_DEPTH_COMPONENT24 = 33190; // 0x81a6
+    field public static final int GL_DEPTH_COMPONENT32F = 36012; // 0x8cac
+    field public static final int GL_DEPTH_STENCIL = 34041; // 0x84f9
+    field public static final int GL_DEPTH_STENCIL_ATTACHMENT = 33306; // 0x821a
+    field public static final int GL_DRAW_BUFFER0 = 34853; // 0x8825
+    field public static final int GL_DRAW_BUFFER1 = 34854; // 0x8826
+    field public static final int GL_DRAW_BUFFER10 = 34863; // 0x882f
+    field public static final int GL_DRAW_BUFFER11 = 34864; // 0x8830
+    field public static final int GL_DRAW_BUFFER12 = 34865; // 0x8831
+    field public static final int GL_DRAW_BUFFER13 = 34866; // 0x8832
+    field public static final int GL_DRAW_BUFFER14 = 34867; // 0x8833
+    field public static final int GL_DRAW_BUFFER15 = 34868; // 0x8834
+    field public static final int GL_DRAW_BUFFER2 = 34855; // 0x8827
+    field public static final int GL_DRAW_BUFFER3 = 34856; // 0x8828
+    field public static final int GL_DRAW_BUFFER4 = 34857; // 0x8829
+    field public static final int GL_DRAW_BUFFER5 = 34858; // 0x882a
+    field public static final int GL_DRAW_BUFFER6 = 34859; // 0x882b
+    field public static final int GL_DRAW_BUFFER7 = 34860; // 0x882c
+    field public static final int GL_DRAW_BUFFER8 = 34861; // 0x882d
+    field public static final int GL_DRAW_BUFFER9 = 34862; // 0x882e
+    field public static final int GL_DRAW_FRAMEBUFFER = 36009; // 0x8ca9
+    field public static final int GL_DRAW_FRAMEBUFFER_BINDING = 36006; // 0x8ca6
+    field public static final int GL_DYNAMIC_COPY = 35050; // 0x88ea
+    field public static final int GL_DYNAMIC_READ = 35049; // 0x88e9
+    field public static final int GL_FLOAT_32_UNSIGNED_INT_24_8_REV = 36269; // 0x8dad
+    field public static final int GL_FLOAT_MAT2x3 = 35685; // 0x8b65
+    field public static final int GL_FLOAT_MAT2x4 = 35686; // 0x8b66
+    field public static final int GL_FLOAT_MAT3x2 = 35687; // 0x8b67
+    field public static final int GL_FLOAT_MAT3x4 = 35688; // 0x8b68
+    field public static final int GL_FLOAT_MAT4x2 = 35689; // 0x8b69
+    field public static final int GL_FLOAT_MAT4x3 = 35690; // 0x8b6a
+    field public static final int GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 35723; // 0x8b8b
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 33301; // 0x8215
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 33300; // 0x8214
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 33296; // 0x8210
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 33297; // 0x8211
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 33302; // 0x8216
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 33299; // 0x8213
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = 33298; // 0x8212
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 33303; // 0x8217
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 36052; // 0x8cd4
+    field public static final int GL_FRAMEBUFFER_DEFAULT = 33304; // 0x8218
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 36182; // 0x8d56
+    field public static final int GL_FRAMEBUFFER_UNDEFINED = 33305; // 0x8219
+    field public static final int GL_GREEN = 6404; // 0x1904
+    field public static final int GL_HALF_FLOAT = 5131; // 0x140b
+    field public static final int GL_INTERLEAVED_ATTRIBS = 35980; // 0x8c8c
+    field public static final int GL_INT_2_10_10_10_REV = 36255; // 0x8d9f
+    field public static final int GL_INT_SAMPLER_2D = 36298; // 0x8dca
+    field public static final int GL_INT_SAMPLER_2D_ARRAY = 36303; // 0x8dcf
+    field public static final int GL_INT_SAMPLER_3D = 36299; // 0x8dcb
+    field public static final int GL_INT_SAMPLER_CUBE = 36300; // 0x8dcc
+    field public static final int GL_INVALID_INDEX = -1; // 0xffffffff
+    field public static final int GL_MAJOR_VERSION = 33307; // 0x821b
+    field public static final int GL_MAP_FLUSH_EXPLICIT_BIT = 16; // 0x10
+    field public static final int GL_MAP_INVALIDATE_BUFFER_BIT = 8; // 0x8
+    field public static final int GL_MAP_INVALIDATE_RANGE_BIT = 4; // 0x4
+    field public static final int GL_MAP_READ_BIT = 1; // 0x1
+    field public static final int GL_MAP_UNSYNCHRONIZED_BIT = 32; // 0x20
+    field public static final int GL_MAP_WRITE_BIT = 2; // 0x2
+    field public static final int GL_MAX = 32776; // 0x8008
+    field public static final int GL_MAX_3D_TEXTURE_SIZE = 32883; // 0x8073
+    field public static final int GL_MAX_ARRAY_TEXTURE_LAYERS = 35071; // 0x88ff
+    field public static final int GL_MAX_COLOR_ATTACHMENTS = 36063; // 0x8cdf
+    field public static final int GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 35379; // 0x8a33
+    field public static final int GL_MAX_COMBINED_UNIFORM_BLOCKS = 35374; // 0x8a2e
+    field public static final int GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 35377; // 0x8a31
+    field public static final int GL_MAX_DRAW_BUFFERS = 34852; // 0x8824
+    field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9
+    field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8
+    field public static final int GL_MAX_ELEMENT_INDEX = 36203; // 0x8d6b
+    field public static final int GL_MAX_FRAGMENT_INPUT_COMPONENTS = 37157; // 0x9125
+    field public static final int GL_MAX_FRAGMENT_UNIFORM_BLOCKS = 35373; // 0x8a2d
+    field public static final int GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 35657; // 0x8b49
+    field public static final int GL_MAX_PROGRAM_TEXEL_OFFSET = 35077; // 0x8905
+    field public static final int GL_MAX_SAMPLES = 36183; // 0x8d57
+    field public static final int GL_MAX_SERVER_WAIT_TIMEOUT = 37137; // 0x9111
+    field public static final int GL_MAX_TEXTURE_LOD_BIAS = 34045; // 0x84fd
+    field public static final int GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 35978; // 0x8c8a
+    field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 35979; // 0x8c8b
+    field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 35968; // 0x8c80
+    field public static final int GL_MAX_UNIFORM_BLOCK_SIZE = 35376; // 0x8a30
+    field public static final int GL_MAX_UNIFORM_BUFFER_BINDINGS = 35375; // 0x8a2f
+    field public static final int GL_MAX_VARYING_COMPONENTS = 35659; // 0x8b4b
+    field public static final int GL_MAX_VERTEX_OUTPUT_COMPONENTS = 37154; // 0x9122
+    field public static final int GL_MAX_VERTEX_UNIFORM_BLOCKS = 35371; // 0x8a2b
+    field public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 35658; // 0x8b4a
+    field public static final int GL_MIN = 32775; // 0x8007
+    field public static final int GL_MINOR_VERSION = 33308; // 0x821c
+    field public static final int GL_MIN_PROGRAM_TEXEL_OFFSET = 35076; // 0x8904
+    field public static final int GL_NUM_EXTENSIONS = 33309; // 0x821d
+    field public static final int GL_NUM_PROGRAM_BINARY_FORMATS = 34814; // 0x87fe
+    field public static final int GL_NUM_SAMPLE_COUNTS = 37760; // 0x9380
+    field public static final int GL_OBJECT_TYPE = 37138; // 0x9112
+    field public static final int GL_PACK_ROW_LENGTH = 3330; // 0xd02
+    field public static final int GL_PACK_SKIP_PIXELS = 3332; // 0xd04
+    field public static final int GL_PACK_SKIP_ROWS = 3331; // 0xd03
+    field public static final int GL_PIXEL_PACK_BUFFER = 35051; // 0x88eb
+    field public static final int GL_PIXEL_PACK_BUFFER_BINDING = 35053; // 0x88ed
+    field public static final int GL_PIXEL_UNPACK_BUFFER = 35052; // 0x88ec
+    field public static final int GL_PIXEL_UNPACK_BUFFER_BINDING = 35055; // 0x88ef
+    field public static final int GL_PRIMITIVE_RESTART_FIXED_INDEX = 36201; // 0x8d69
+    field public static final int GL_PROGRAM_BINARY_FORMATS = 34815; // 0x87ff
+    field public static final int GL_PROGRAM_BINARY_LENGTH = 34625; // 0x8741
+    field public static final int GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 33367; // 0x8257
+    field public static final int GL_QUERY_RESULT = 34918; // 0x8866
+    field public static final int GL_QUERY_RESULT_AVAILABLE = 34919; // 0x8867
+    field public static final int GL_R11F_G11F_B10F = 35898; // 0x8c3a
+    field public static final int GL_R16F = 33325; // 0x822d
+    field public static final int GL_R16I = 33331; // 0x8233
+    field public static final int GL_R16UI = 33332; // 0x8234
+    field public static final int GL_R32F = 33326; // 0x822e
+    field public static final int GL_R32I = 33333; // 0x8235
+    field public static final int GL_R32UI = 33334; // 0x8236
+    field public static final int GL_R8 = 33321; // 0x8229
+    field public static final int GL_R8I = 33329; // 0x8231
+    field public static final int GL_R8UI = 33330; // 0x8232
+    field public static final int GL_R8_SNORM = 36756; // 0x8f94
+    field public static final int GL_RASTERIZER_DISCARD = 35977; // 0x8c89
+    field public static final int GL_READ_BUFFER = 3074; // 0xc02
+    field public static final int GL_READ_FRAMEBUFFER = 36008; // 0x8ca8
+    field public static final int GL_READ_FRAMEBUFFER_BINDING = 36010; // 0x8caa
+    field public static final int GL_RED = 6403; // 0x1903
+    field public static final int GL_RED_INTEGER = 36244; // 0x8d94
+    field public static final int GL_RENDERBUFFER_SAMPLES = 36011; // 0x8cab
+    field public static final int GL_RG = 33319; // 0x8227
+    field public static final int GL_RG16F = 33327; // 0x822f
+    field public static final int GL_RG16I = 33337; // 0x8239
+    field public static final int GL_RG16UI = 33338; // 0x823a
+    field public static final int GL_RG32F = 33328; // 0x8230
+    field public static final int GL_RG32I = 33339; // 0x823b
+    field public static final int GL_RG32UI = 33340; // 0x823c
+    field public static final int GL_RG8 = 33323; // 0x822b
+    field public static final int GL_RG8I = 33335; // 0x8237
+    field public static final int GL_RG8UI = 33336; // 0x8238
+    field public static final int GL_RG8_SNORM = 36757; // 0x8f95
+    field public static final int GL_RGB10_A2 = 32857; // 0x8059
+    field public static final int GL_RGB10_A2UI = 36975; // 0x906f
+    field public static final int GL_RGB16F = 34843; // 0x881b
+    field public static final int GL_RGB16I = 36233; // 0x8d89
+    field public static final int GL_RGB16UI = 36215; // 0x8d77
+    field public static final int GL_RGB32F = 34837; // 0x8815
+    field public static final int GL_RGB32I = 36227; // 0x8d83
+    field public static final int GL_RGB32UI = 36209; // 0x8d71
+    field public static final int GL_RGB8 = 32849; // 0x8051
+    field public static final int GL_RGB8I = 36239; // 0x8d8f
+    field public static final int GL_RGB8UI = 36221; // 0x8d7d
+    field public static final int GL_RGB8_SNORM = 36758; // 0x8f96
+    field public static final int GL_RGB9_E5 = 35901; // 0x8c3d
+    field public static final int GL_RGBA16F = 34842; // 0x881a
+    field public static final int GL_RGBA16I = 36232; // 0x8d88
+    field public static final int GL_RGBA16UI = 36214; // 0x8d76
+    field public static final int GL_RGBA32F = 34836; // 0x8814
+    field public static final int GL_RGBA32I = 36226; // 0x8d82
+    field public static final int GL_RGBA32UI = 36208; // 0x8d70
+    field public static final int GL_RGBA8 = 32856; // 0x8058
+    field public static final int GL_RGBA8I = 36238; // 0x8d8e
+    field public static final int GL_RGBA8UI = 36220; // 0x8d7c
+    field public static final int GL_RGBA8_SNORM = 36759; // 0x8f97
+    field public static final int GL_RGBA_INTEGER = 36249; // 0x8d99
+    field public static final int GL_RGB_INTEGER = 36248; // 0x8d98
+    field public static final int GL_RG_INTEGER = 33320; // 0x8228
+    field public static final int GL_SAMPLER_2D_ARRAY = 36289; // 0x8dc1
+    field public static final int GL_SAMPLER_2D_ARRAY_SHADOW = 36292; // 0x8dc4
+    field public static final int GL_SAMPLER_2D_SHADOW = 35682; // 0x8b62
+    field public static final int GL_SAMPLER_3D = 35679; // 0x8b5f
+    field public static final int GL_SAMPLER_BINDING = 35097; // 0x8919
+    field public static final int GL_SAMPLER_CUBE_SHADOW = 36293; // 0x8dc5
+    field public static final int GL_SEPARATE_ATTRIBS = 35981; // 0x8c8d
+    field public static final int GL_SIGNALED = 37145; // 0x9119
+    field public static final int GL_SIGNED_NORMALIZED = 36764; // 0x8f9c
+    field public static final int GL_SRGB = 35904; // 0x8c40
+    field public static final int GL_SRGB8 = 35905; // 0x8c41
+    field public static final int GL_SRGB8_ALPHA8 = 35907; // 0x8c43
+    field public static final int GL_STATIC_COPY = 35046; // 0x88e6
+    field public static final int GL_STATIC_READ = 35045; // 0x88e5
+    field public static final int GL_STENCIL = 6146; // 0x1802
+    field public static final int GL_STREAM_COPY = 35042; // 0x88e2
+    field public static final int GL_STREAM_READ = 35041; // 0x88e1
+    field public static final int GL_SYNC_CONDITION = 37139; // 0x9113
+    field public static final int GL_SYNC_FENCE = 37142; // 0x9116
+    field public static final int GL_SYNC_FLAGS = 37141; // 0x9115
+    field public static final int GL_SYNC_FLUSH_COMMANDS_BIT = 1; // 0x1
+    field public static final int GL_SYNC_GPU_COMMANDS_COMPLETE = 37143; // 0x9117
+    field public static final int GL_SYNC_STATUS = 37140; // 0x9114
+    field public static final int GL_TEXTURE_2D_ARRAY = 35866; // 0x8c1a
+    field public static final int GL_TEXTURE_3D = 32879; // 0x806f
+    field public static final int GL_TEXTURE_BASE_LEVEL = 33084; // 0x813c
+    field public static final int GL_TEXTURE_BINDING_2D_ARRAY = 35869; // 0x8c1d
+    field public static final int GL_TEXTURE_BINDING_3D = 32874; // 0x806a
+    field public static final int GL_TEXTURE_COMPARE_FUNC = 34893; // 0x884d
+    field public static final int GL_TEXTURE_COMPARE_MODE = 34892; // 0x884c
+    field public static final int GL_TEXTURE_IMMUTABLE_FORMAT = 37167; // 0x912f
+    field public static final int GL_TEXTURE_IMMUTABLE_LEVELS = 33503; // 0x82df
+    field public static final int GL_TEXTURE_MAX_LEVEL = 33085; // 0x813d
+    field public static final int GL_TEXTURE_MAX_LOD = 33083; // 0x813b
+    field public static final int GL_TEXTURE_MIN_LOD = 33082; // 0x813a
+    field public static final int GL_TEXTURE_SWIZZLE_A = 36421; // 0x8e45
+    field public static final int GL_TEXTURE_SWIZZLE_B = 36420; // 0x8e44
+    field public static final int GL_TEXTURE_SWIZZLE_G = 36419; // 0x8e43
+    field public static final int GL_TEXTURE_SWIZZLE_R = 36418; // 0x8e42
+    field public static final int GL_TEXTURE_WRAP_R = 32882; // 0x8072
+    field public static final int GL_TIMEOUT_EXPIRED = 37147; // 0x911b
+    field public static final long GL_TIMEOUT_IGNORED = -1L; // 0xffffffffffffffffL
+    field public static final int GL_TRANSFORM_FEEDBACK = 36386; // 0x8e22
+    field public static final int GL_TRANSFORM_FEEDBACK_ACTIVE = 36388; // 0x8e24
+    field public static final int GL_TRANSFORM_FEEDBACK_BINDING = 36389; // 0x8e25
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER = 35982; // 0x8c8e
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = 35983; // 0x8c8f
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 35967; // 0x8c7f
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = 35973; // 0x8c85
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_START = 35972; // 0x8c84
+    field public static final int GL_TRANSFORM_FEEDBACK_PAUSED = 36387; // 0x8e23
+    field public static final int GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 35976; // 0x8c88
+    field public static final int GL_TRANSFORM_FEEDBACK_VARYINGS = 35971; // 0x8c83
+    field public static final int GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 35958; // 0x8c76
+    field public static final int GL_UNIFORM_ARRAY_STRIDE = 35388; // 0x8a3c
+    field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = 35394; // 0x8a42
+    field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 35395; // 0x8a43
+    field public static final int GL_UNIFORM_BLOCK_BINDING = 35391; // 0x8a3f
+    field public static final int GL_UNIFORM_BLOCK_DATA_SIZE = 35392; // 0x8a40
+    field public static final int GL_UNIFORM_BLOCK_INDEX = 35386; // 0x8a3a
+    field public static final int GL_UNIFORM_BLOCK_NAME_LENGTH = 35393; // 0x8a41
+    field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 35398; // 0x8a46
+    field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 35396; // 0x8a44
+    field public static final int GL_UNIFORM_BUFFER = 35345; // 0x8a11
+    field public static final int GL_UNIFORM_BUFFER_BINDING = 35368; // 0x8a28
+    field public static final int GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 35380; // 0x8a34
+    field public static final int GL_UNIFORM_BUFFER_SIZE = 35370; // 0x8a2a
+    field public static final int GL_UNIFORM_BUFFER_START = 35369; // 0x8a29
+    field public static final int GL_UNIFORM_IS_ROW_MAJOR = 35390; // 0x8a3e
+    field public static final int GL_UNIFORM_MATRIX_STRIDE = 35389; // 0x8a3d
+    field public static final int GL_UNIFORM_NAME_LENGTH = 35385; // 0x8a39
+    field public static final int GL_UNIFORM_OFFSET = 35387; // 0x8a3b
+    field public static final int GL_UNIFORM_SIZE = 35384; // 0x8a38
+    field public static final int GL_UNIFORM_TYPE = 35383; // 0x8a37
+    field public static final int GL_UNPACK_IMAGE_HEIGHT = 32878; // 0x806e
+    field public static final int GL_UNPACK_ROW_LENGTH = 3314; // 0xcf2
+    field public static final int GL_UNPACK_SKIP_IMAGES = 32877; // 0x806d
+    field public static final int GL_UNPACK_SKIP_PIXELS = 3316; // 0xcf4
+    field public static final int GL_UNPACK_SKIP_ROWS = 3315; // 0xcf3
+    field public static final int GL_UNSIGNALED = 37144; // 0x9118
+    field public static final int GL_UNSIGNED_INT_10F_11F_11F_REV = 35899; // 0x8c3b
+    field public static final int GL_UNSIGNED_INT_24_8 = 34042; // 0x84fa
+    field public static final int GL_UNSIGNED_INT_2_10_10_10_REV = 33640; // 0x8368
+    field public static final int GL_UNSIGNED_INT_5_9_9_9_REV = 35902; // 0x8c3e
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D = 36306; // 0x8dd2
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 36311; // 0x8dd7
+    field public static final int GL_UNSIGNED_INT_SAMPLER_3D = 36307; // 0x8dd3
+    field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE = 36308; // 0x8dd4
+    field public static final int GL_UNSIGNED_INT_VEC2 = 36294; // 0x8dc6
+    field public static final int GL_UNSIGNED_INT_VEC3 = 36295; // 0x8dc7
+    field public static final int GL_UNSIGNED_INT_VEC4 = 36296; // 0x8dc8
+    field public static final int GL_UNSIGNED_NORMALIZED = 35863; // 0x8c17
+    field public static final int GL_VERTEX_ARRAY_BINDING = 34229; // 0x85b5
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 35070; // 0x88fe
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_INTEGER = 35069; // 0x88fd
+    field public static final int GL_WAIT_FAILED = 37149; // 0x911d
+  }
+
+  public class GLES31 extends android.opengl.GLES30 {
+    method public static void glActiveShaderProgram(int, int);
+    method public static void glBindImageTexture(int, int, int, boolean, int, int, int);
+    method public static void glBindProgramPipeline(int);
+    method public static void glBindVertexBuffer(int, int, long, int);
+    method public static int glCreateShaderProgramv(int, String[]);
+    method public static void glDeleteProgramPipelines(int, int[], int);
+    method public static void glDeleteProgramPipelines(int, java.nio.IntBuffer);
+    method public static void glDispatchCompute(int, int, int);
+    method public static void glDispatchComputeIndirect(long);
+    method public static void glDrawArraysIndirect(int, long);
+    method public static void glDrawElementsIndirect(int, int, long);
+    method public static void glFramebufferParameteri(int, int, int);
+    method public static void glGenProgramPipelines(int, int[], int);
+    method public static void glGenProgramPipelines(int, java.nio.IntBuffer);
+    method public static void glGetBooleani_v(int, int, boolean[], int);
+    method public static void glGetBooleani_v(int, int, java.nio.IntBuffer);
+    method public static void glGetFramebufferParameteriv(int, int, int[], int);
+    method public static void glGetFramebufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glGetMultisamplefv(int, int, float[], int);
+    method public static void glGetMultisamplefv(int, int, java.nio.FloatBuffer);
+    method public static void glGetProgramInterfaceiv(int, int, int, int[], int);
+    method public static void glGetProgramInterfaceiv(int, int, int, java.nio.IntBuffer);
+    method public static String glGetProgramPipelineInfoLog(int);
+    method public static void glGetProgramPipelineiv(int, int, int[], int);
+    method public static void glGetProgramPipelineiv(int, int, java.nio.IntBuffer);
+    method public static int glGetProgramResourceIndex(int, int, String);
+    method public static int glGetProgramResourceLocation(int, int, String);
+    method public static String glGetProgramResourceName(int, int, int);
+    method public static void glGetProgramResourceiv(int, int, int, int, int[], int, int, int[], int, int[], int);
+    method public static void glGetProgramResourceiv(int, int, int, int, java.nio.IntBuffer, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetTexLevelParameterfv(int, int, int, float[], int);
+    method public static void glGetTexLevelParameterfv(int, int, int, java.nio.FloatBuffer);
+    method public static void glGetTexLevelParameteriv(int, int, int, int[], int);
+    method public static void glGetTexLevelParameteriv(int, int, int, java.nio.IntBuffer);
+    method public static boolean glIsProgramPipeline(int);
+    method public static void glMemoryBarrier(int);
+    method public static void glMemoryBarrierByRegion(int);
+    method public static void glProgramUniform1f(int, int, float);
+    method public static void glProgramUniform1fv(int, int, int, float[], int);
+    method public static void glProgramUniform1fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform1i(int, int, int);
+    method public static void glProgramUniform1iv(int, int, int, int[], int);
+    method public static void glProgramUniform1iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform1ui(int, int, int);
+    method public static void glProgramUniform1uiv(int, int, int, int[], int);
+    method public static void glProgramUniform1uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform2f(int, int, float, float);
+    method public static void glProgramUniform2fv(int, int, int, float[], int);
+    method public static void glProgramUniform2fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform2i(int, int, int, int);
+    method public static void glProgramUniform2iv(int, int, int, int[], int);
+    method public static void glProgramUniform2iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform2ui(int, int, int, int);
+    method public static void glProgramUniform2uiv(int, int, int, int[], int);
+    method public static void glProgramUniform2uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform3f(int, int, float, float, float);
+    method public static void glProgramUniform3fv(int, int, int, float[], int);
+    method public static void glProgramUniform3fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform3i(int, int, int, int, int);
+    method public static void glProgramUniform3iv(int, int, int, int[], int);
+    method public static void glProgramUniform3iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform3ui(int, int, int, int, int);
+    method public static void glProgramUniform3uiv(int, int, int, int[], int);
+    method public static void glProgramUniform3uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform4f(int, int, float, float, float, float);
+    method public static void glProgramUniform4fv(int, int, int, float[], int);
+    method public static void glProgramUniform4fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform4i(int, int, int, int, int, int);
+    method public static void glProgramUniform4iv(int, int, int, int[], int);
+    method public static void glProgramUniform4iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform4ui(int, int, int, int, int, int);
+    method public static void glProgramUniform4uiv(int, int, int, int[], int);
+    method public static void glProgramUniform4uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniformMatrix2fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix2fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix2x3fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix2x3fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix2x4fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix2x4fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix3fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix3fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix3x2fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix3x2fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix3x4fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix3x4fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix4fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix4fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix4x2fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix4x2fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix4x3fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix4x3fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glSampleMaski(int, int);
+    method public static void glTexStorage2DMultisample(int, int, int, int, int, boolean);
+    method public static void glUseProgramStages(int, int, int);
+    method public static void glValidateProgramPipeline(int);
+    method public static void glVertexAttribBinding(int, int);
+    method public static void glVertexAttribFormat(int, int, int, boolean, int);
+    method public static void glVertexAttribIFormat(int, int, int, int);
+    method public static void glVertexBindingDivisor(int, int);
+    field public static final int GL_ACTIVE_ATOMIC_COUNTER_BUFFERS = 37593; // 0x92d9
+    field public static final int GL_ACTIVE_PROGRAM = 33369; // 0x8259
+    field public static final int GL_ACTIVE_RESOURCES = 37621; // 0x92f5
+    field public static final int GL_ACTIVE_VARIABLES = 37637; // 0x9305
+    field public static final int GL_ALL_BARRIER_BITS = -1; // 0xffffffff
+    field public static final int GL_ALL_SHADER_BITS = -1; // 0xffffffff
+    field public static final int GL_ARRAY_SIZE = 37627; // 0x92fb
+    field public static final int GL_ARRAY_STRIDE = 37630; // 0x92fe
+    field public static final int GL_ATOMIC_COUNTER_BARRIER_BIT = 4096; // 0x1000
+    field public static final int GL_ATOMIC_COUNTER_BUFFER = 37568; // 0x92c0
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_BINDING = 37569; // 0x92c1
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_INDEX = 37633; // 0x9301
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_SIZE = 37571; // 0x92c3
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_START = 37570; // 0x92c2
+    field public static final int GL_BLOCK_INDEX = 37629; // 0x92fd
+    field public static final int GL_BUFFER_BINDING = 37634; // 0x9302
+    field public static final int GL_BUFFER_DATA_SIZE = 37635; // 0x9303
+    field public static final int GL_BUFFER_UPDATE_BARRIER_BIT = 512; // 0x200
+    field public static final int GL_BUFFER_VARIABLE = 37605; // 0x92e5
+    field public static final int GL_COMMAND_BARRIER_BIT = 64; // 0x40
+    field public static final int GL_COMPUTE_SHADER = 37305; // 0x91b9
+    field public static final int GL_COMPUTE_SHADER_BIT = 32; // 0x20
+    field public static final int GL_COMPUTE_WORK_GROUP_SIZE = 33383; // 0x8267
+    field public static final int GL_DEPTH_STENCIL_TEXTURE_MODE = 37098; // 0x90ea
+    field public static final int GL_DISPATCH_INDIRECT_BUFFER = 37102; // 0x90ee
+    field public static final int GL_DISPATCH_INDIRECT_BUFFER_BINDING = 37103; // 0x90ef
+    field public static final int GL_DRAW_INDIRECT_BUFFER = 36671; // 0x8f3f
+    field public static final int GL_DRAW_INDIRECT_BUFFER_BINDING = 36675; // 0x8f43
+    field public static final int GL_ELEMENT_ARRAY_BARRIER_BIT = 2; // 0x2
+    field public static final int GL_FRAGMENT_SHADER_BIT = 2; // 0x2
+    field public static final int GL_FRAMEBUFFER_BARRIER_BIT = 1024; // 0x400
+    field public static final int GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 37652; // 0x9314
+    field public static final int GL_FRAMEBUFFER_DEFAULT_HEIGHT = 37649; // 0x9311
+    field public static final int GL_FRAMEBUFFER_DEFAULT_SAMPLES = 37651; // 0x9313
+    field public static final int GL_FRAMEBUFFER_DEFAULT_WIDTH = 37648; // 0x9310
+    field public static final int GL_IMAGE_2D = 36941; // 0x904d
+    field public static final int GL_IMAGE_2D_ARRAY = 36947; // 0x9053
+    field public static final int GL_IMAGE_3D = 36942; // 0x904e
+    field public static final int GL_IMAGE_BINDING_ACCESS = 36670; // 0x8f3e
+    field public static final int GL_IMAGE_BINDING_FORMAT = 36974; // 0x906e
+    field public static final int GL_IMAGE_BINDING_LAYER = 36669; // 0x8f3d
+    field public static final int GL_IMAGE_BINDING_LAYERED = 36668; // 0x8f3c
+    field public static final int GL_IMAGE_BINDING_LEVEL = 36667; // 0x8f3b
+    field public static final int GL_IMAGE_BINDING_NAME = 36666; // 0x8f3a
+    field public static final int GL_IMAGE_CUBE = 36944; // 0x9050
+    field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 37065; // 0x90c9
+    field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 37064; // 0x90c8
+    field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_TYPE = 37063; // 0x90c7
+    field public static final int GL_INT_IMAGE_2D = 36952; // 0x9058
+    field public static final int GL_INT_IMAGE_2D_ARRAY = 36958; // 0x905e
+    field public static final int GL_INT_IMAGE_3D = 36953; // 0x9059
+    field public static final int GL_INT_IMAGE_CUBE = 36955; // 0x905b
+    field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE = 37129; // 0x9109
+    field public static final int GL_IS_ROW_MAJOR = 37632; // 0x9300
+    field public static final int GL_LOCATION = 37646; // 0x930e
+    field public static final int GL_MATRIX_STRIDE = 37631; // 0x92ff
+    field public static final int GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 37596; // 0x92dc
+    field public static final int GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE = 37592; // 0x92d8
+    field public static final int GL_MAX_COLOR_TEXTURE_SAMPLES = 37134; // 0x910e
+    field public static final int GL_MAX_COMBINED_ATOMIC_COUNTERS = 37591; // 0x92d7
+    field public static final int GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 37585; // 0x92d1
+    field public static final int GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 33382; // 0x8266
+    field public static final int GL_MAX_COMBINED_IMAGE_UNIFORMS = 37071; // 0x90cf
+    field public static final int GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 36665; // 0x8f39
+    field public static final int GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS = 37084; // 0x90dc
+    field public static final int GL_MAX_COMPUTE_ATOMIC_COUNTERS = 33381; // 0x8265
+    field public static final int GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 33380; // 0x8264
+    field public static final int GL_MAX_COMPUTE_IMAGE_UNIFORMS = 37309; // 0x91bd
+    field public static final int GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 37083; // 0x90db
+    field public static final int GL_MAX_COMPUTE_SHARED_MEMORY_SIZE = 33378; // 0x8262
+    field public static final int GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 37308; // 0x91bc
+    field public static final int GL_MAX_COMPUTE_UNIFORM_BLOCKS = 37307; // 0x91bb
+    field public static final int GL_MAX_COMPUTE_UNIFORM_COMPONENTS = 33379; // 0x8263
+    field public static final int GL_MAX_COMPUTE_WORK_GROUP_COUNT = 37310; // 0x91be
+    field public static final int GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 37099; // 0x90eb
+    field public static final int GL_MAX_COMPUTE_WORK_GROUP_SIZE = 37311; // 0x91bf
+    field public static final int GL_MAX_DEPTH_TEXTURE_SAMPLES = 37135; // 0x910f
+    field public static final int GL_MAX_FRAGMENT_ATOMIC_COUNTERS = 37590; // 0x92d6
+    field public static final int GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 37584; // 0x92d0
+    field public static final int GL_MAX_FRAGMENT_IMAGE_UNIFORMS = 37070; // 0x90ce
+    field public static final int GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 37082; // 0x90da
+    field public static final int GL_MAX_FRAMEBUFFER_HEIGHT = 37654; // 0x9316
+    field public static final int GL_MAX_FRAMEBUFFER_SAMPLES = 37656; // 0x9318
+    field public static final int GL_MAX_FRAMEBUFFER_WIDTH = 37653; // 0x9315
+    field public static final int GL_MAX_IMAGE_UNITS = 36664; // 0x8f38
+    field public static final int GL_MAX_INTEGER_SAMPLES = 37136; // 0x9110
+    field public static final int GL_MAX_NAME_LENGTH = 37622; // 0x92f6
+    field public static final int GL_MAX_NUM_ACTIVE_VARIABLES = 37623; // 0x92f7
+    field public static final int GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 36447; // 0x8e5f
+    field public static final int GL_MAX_SAMPLE_MASK_WORDS = 36441; // 0x8e59
+    field public static final int GL_MAX_SHADER_STORAGE_BLOCK_SIZE = 37086; // 0x90de
+    field public static final int GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS = 37085; // 0x90dd
+    field public static final int GL_MAX_UNIFORM_LOCATIONS = 33390; // 0x826e
+    field public static final int GL_MAX_VERTEX_ATOMIC_COUNTERS = 37586; // 0x92d2
+    field public static final int GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 37580; // 0x92cc
+    field public static final int GL_MAX_VERTEX_ATTRIB_BINDINGS = 33498; // 0x82da
+    field public static final int GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 33497; // 0x82d9
+    field public static final int GL_MAX_VERTEX_ATTRIB_STRIDE = 33509; // 0x82e5
+    field public static final int GL_MAX_VERTEX_IMAGE_UNIFORMS = 37066; // 0x90ca
+    field public static final int GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS = 37078; // 0x90d6
+    field public static final int GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 36446; // 0x8e5e
+    field public static final int GL_NAME_LENGTH = 37625; // 0x92f9
+    field public static final int GL_NUM_ACTIVE_VARIABLES = 37636; // 0x9304
+    field public static final int GL_OFFSET = 37628; // 0x92fc
+    field public static final int GL_PIXEL_BUFFER_BARRIER_BIT = 128; // 0x80
+    field public static final int GL_PROGRAM_INPUT = 37603; // 0x92e3
+    field public static final int GL_PROGRAM_OUTPUT = 37604; // 0x92e4
+    field public static final int GL_PROGRAM_PIPELINE_BINDING = 33370; // 0x825a
+    field public static final int GL_PROGRAM_SEPARABLE = 33368; // 0x8258
+    field public static final int GL_READ_ONLY = 35000; // 0x88b8
+    field public static final int GL_READ_WRITE = 35002; // 0x88ba
+    field public static final int GL_REFERENCED_BY_COMPUTE_SHADER = 37643; // 0x930b
+    field public static final int GL_REFERENCED_BY_FRAGMENT_SHADER = 37642; // 0x930a
+    field public static final int GL_REFERENCED_BY_VERTEX_SHADER = 37638; // 0x9306
+    field public static final int GL_SAMPLER_2D_MULTISAMPLE = 37128; // 0x9108
+    field public static final int GL_SAMPLE_MASK = 36433; // 0x8e51
+    field public static final int GL_SAMPLE_MASK_VALUE = 36434; // 0x8e52
+    field public static final int GL_SAMPLE_POSITION = 36432; // 0x8e50
+    field public static final int GL_SHADER_IMAGE_ACCESS_BARRIER_BIT = 32; // 0x20
+    field public static final int GL_SHADER_STORAGE_BARRIER_BIT = 8192; // 0x2000
+    field public static final int GL_SHADER_STORAGE_BLOCK = 37606; // 0x92e6
+    field public static final int GL_SHADER_STORAGE_BUFFER = 37074; // 0x90d2
+    field public static final int GL_SHADER_STORAGE_BUFFER_BINDING = 37075; // 0x90d3
+    field public static final int GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 37087; // 0x90df
+    field public static final int GL_SHADER_STORAGE_BUFFER_SIZE = 37077; // 0x90d5
+    field public static final int GL_SHADER_STORAGE_BUFFER_START = 37076; // 0x90d4
+    field public static final int GL_STENCIL_INDEX = 6401; // 0x1901
+    field public static final int GL_TEXTURE_2D_MULTISAMPLE = 37120; // 0x9100
+    field public static final int GL_TEXTURE_ALPHA_SIZE = 32863; // 0x805f
+    field public static final int GL_TEXTURE_ALPHA_TYPE = 35859; // 0x8c13
+    field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE = 37124; // 0x9104
+    field public static final int GL_TEXTURE_BLUE_SIZE = 32862; // 0x805e
+    field public static final int GL_TEXTURE_BLUE_TYPE = 35858; // 0x8c12
+    field public static final int GL_TEXTURE_COMPRESSED = 34465; // 0x86a1
+    field public static final int GL_TEXTURE_DEPTH = 32881; // 0x8071
+    field public static final int GL_TEXTURE_DEPTH_SIZE = 34890; // 0x884a
+    field public static final int GL_TEXTURE_DEPTH_TYPE = 35862; // 0x8c16
+    field public static final int GL_TEXTURE_FETCH_BARRIER_BIT = 8; // 0x8
+    field public static final int GL_TEXTURE_FIXED_SAMPLE_LOCATIONS = 37127; // 0x9107
+    field public static final int GL_TEXTURE_GREEN_SIZE = 32861; // 0x805d
+    field public static final int GL_TEXTURE_GREEN_TYPE = 35857; // 0x8c11
+    field public static final int GL_TEXTURE_HEIGHT = 4097; // 0x1001
+    field public static final int GL_TEXTURE_INTERNAL_FORMAT = 4099; // 0x1003
+    field public static final int GL_TEXTURE_RED_SIZE = 32860; // 0x805c
+    field public static final int GL_TEXTURE_RED_TYPE = 35856; // 0x8c10
+    field public static final int GL_TEXTURE_SAMPLES = 37126; // 0x9106
+    field public static final int GL_TEXTURE_SHARED_SIZE = 35903; // 0x8c3f
+    field public static final int GL_TEXTURE_STENCIL_SIZE = 35057; // 0x88f1
+    field public static final int GL_TEXTURE_UPDATE_BARRIER_BIT = 256; // 0x100
+    field public static final int GL_TEXTURE_WIDTH = 4096; // 0x1000
+    field public static final int GL_TOP_LEVEL_ARRAY_SIZE = 37644; // 0x930c
+    field public static final int GL_TOP_LEVEL_ARRAY_STRIDE = 37645; // 0x930d
+    field public static final int GL_TRANSFORM_FEEDBACK_BARRIER_BIT = 2048; // 0x800
+    field public static final int GL_TRANSFORM_FEEDBACK_VARYING = 37620; // 0x92f4
+    field public static final int GL_TYPE = 37626; // 0x92fa
+    field public static final int GL_UNIFORM = 37601; // 0x92e1
+    field public static final int GL_UNIFORM_BARRIER_BIT = 4; // 0x4
+    field public static final int GL_UNIFORM_BLOCK = 37602; // 0x92e2
+    field public static final int GL_UNSIGNED_INT_ATOMIC_COUNTER = 37595; // 0x92db
+    field public static final int GL_UNSIGNED_INT_IMAGE_2D = 36963; // 0x9063
+    field public static final int GL_UNSIGNED_INT_IMAGE_2D_ARRAY = 36969; // 0x9069
+    field public static final int GL_UNSIGNED_INT_IMAGE_3D = 36964; // 0x9064
+    field public static final int GL_UNSIGNED_INT_IMAGE_CUBE = 36966; // 0x9066
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 37130; // 0x910a
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 1; // 0x1
+    field public static final int GL_VERTEX_ATTRIB_BINDING = 33492; // 0x82d4
+    field public static final int GL_VERTEX_ATTRIB_RELATIVE_OFFSET = 33493; // 0x82d5
+    field public static final int GL_VERTEX_BINDING_BUFFER = 36687; // 0x8f4f
+    field public static final int GL_VERTEX_BINDING_DIVISOR = 33494; // 0x82d6
+    field public static final int GL_VERTEX_BINDING_OFFSET = 33495; // 0x82d7
+    field public static final int GL_VERTEX_BINDING_STRIDE = 33496; // 0x82d8
+    field public static final int GL_VERTEX_SHADER_BIT = 1; // 0x1
+    field public static final int GL_WRITE_ONLY = 35001; // 0x88b9
+  }
+
+  public class GLES31Ext {
+    method public static void glBlendBarrierKHR();
+    method public static void glBlendEquationSeparateiEXT(int, int, int);
+    method public static void glBlendEquationiEXT(int, int);
+    method public static void glBlendFuncSeparateiEXT(int, int, int, int, int);
+    method public static void glBlendFunciEXT(int, int, int);
+    method public static void glColorMaskiEXT(int, boolean, boolean, boolean, boolean);
+    method public static void glCopyImageSubDataEXT(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glDebugMessageCallbackKHR(android.opengl.GLES31Ext.DebugProcKHR);
+    method public static void glDebugMessageControlKHR(int, int, int, int, int[], int, boolean);
+    method public static void glDebugMessageControlKHR(int, int, int, int, java.nio.IntBuffer, boolean);
+    method public static void glDebugMessageInsertKHR(int, int, int, int, String);
+    method public static void glDisableiEXT(int, int);
+    method public static void glEnableiEXT(int, int);
+    method public static void glFramebufferTextureEXT(int, int, int, int);
+    method public static android.opengl.GLES31Ext.DebugProcKHR glGetDebugMessageCallbackKHR();
+    method public static int glGetDebugMessageLogKHR(int, int, int[], int, int[], int, int[], int, int[], int, int[], int, byte[], int);
+    method public static int glGetDebugMessageLogKHR(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.ByteBuffer);
+    method public static String[] glGetDebugMessageLogKHR(int, int[], int, int[], int, int[], int, int[], int);
+    method public static String[] glGetDebugMessageLogKHR(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static String glGetObjectLabelKHR(int, int);
+    method public static String glGetObjectPtrLabelKHR(long);
+    method public static void glGetSamplerParameterIivEXT(int, int, int[], int);
+    method public static void glGetSamplerParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glGetSamplerParameterIuivEXT(int, int, int[], int);
+    method public static void glGetSamplerParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIivEXT(int, int, int[], int);
+    method public static void glGetTexParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIuivEXT(int, int, int[], int);
+    method public static void glGetTexParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static boolean glIsEnablediEXT(int, int);
+    method public static void glMinSampleShadingOES(float);
+    method public static void glObjectLabelKHR(int, int, int, String);
+    method public static void glObjectPtrLabelKHR(long, String);
+    method public static void glPatchParameteriEXT(int, int);
+    method public static void glPopDebugGroupKHR();
+    method public static void glPrimitiveBoundingBoxEXT(float, float, float, float, float, float, float, float);
+    method public static void glPushDebugGroupKHR(int, int, int, String);
+    method public static void glSamplerParameterIivEXT(int, int, int[], int);
+    method public static void glSamplerParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glSamplerParameterIuivEXT(int, int, int[], int);
+    method public static void glSamplerParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static void glTexBufferEXT(int, int, int);
+    method public static void glTexBufferRangeEXT(int, int, int, int, int);
+    method public static void glTexParameterIivEXT(int, int, int[], int);
+    method public static void glTexParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterIuivEXT(int, int, int[], int);
+    method public static void glTexParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static void glTexStorage3DMultisampleOES(int, int, int, int, int, int, boolean);
+    field public static final int GL_BLEND_ADVANCED_COHERENT_KHR = 37509; // 0x9285
+    field public static final int GL_BUFFER_KHR = 33504; // 0x82e0
+    field public static final int GL_CLAMP_TO_BORDER_EXT = 33069; // 0x812d
+    field public static final int GL_COLORBURN_KHR = 37530; // 0x929a
+    field public static final int GL_COLORDODGE_KHR = 37529; // 0x9299
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x10_KHR = 37819; // 0x93bb
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x5_KHR = 37816; // 0x93b8
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x6_KHR = 37817; // 0x93b9
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x8_KHR = 37818; // 0x93ba
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x10_KHR = 37820; // 0x93bc
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x12_KHR = 37821; // 0x93bd
+    field public static final int GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 37808; // 0x93b0
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 37809; // 0x93b1
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 37810; // 0x93b2
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x5_KHR = 37811; // 0x93b3
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x6_KHR = 37812; // 0x93b4
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x5_KHR = 37813; // 0x93b5
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x6_KHR = 37814; // 0x93b6
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x8_KHR = 37815; // 0x93b7
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 37851; // 0x93db
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 37848; // 0x93d8
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 37849; // 0x93d9
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 37850; // 0x93da
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 37852; // 0x93dc
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 37853; // 0x93dd
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 37840; // 0x93d0
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 37841; // 0x93d1
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 37842; // 0x93d2
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 37843; // 0x93d3
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 37844; // 0x93d4
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 37845; // 0x93d5
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 37846; // 0x93d6
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 37847; // 0x93d7
+    field public static final int GL_CONTEXT_FLAG_DEBUG_BIT_KHR = 2; // 0x2
+    field public static final int GL_DARKEN_KHR = 37527; // 0x9297
+    field public static final int GL_DEBUG_CALLBACK_FUNCTION_KHR = 33348; // 0x8244
+    field public static final int GL_DEBUG_CALLBACK_USER_PARAM_KHR = 33349; // 0x8245
+    field public static final int GL_DEBUG_GROUP_STACK_DEPTH_KHR = 33389; // 0x826d
+    field public static final int GL_DEBUG_LOGGED_MESSAGES_KHR = 37189; // 0x9145
+    field public static final int GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR = 33347; // 0x8243
+    field public static final int GL_DEBUG_OUTPUT_KHR = 37600; // 0x92e0
+    field public static final int GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR = 33346; // 0x8242
+    field public static final int GL_DEBUG_SEVERITY_HIGH_KHR = 37190; // 0x9146
+    field public static final int GL_DEBUG_SEVERITY_LOW_KHR = 37192; // 0x9148
+    field public static final int GL_DEBUG_SEVERITY_MEDIUM_KHR = 37191; // 0x9147
+    field public static final int GL_DEBUG_SEVERITY_NOTIFICATION_KHR = 33387; // 0x826b
+    field public static final int GL_DEBUG_SOURCE_API_KHR = 33350; // 0x8246
+    field public static final int GL_DEBUG_SOURCE_APPLICATION_KHR = 33354; // 0x824a
+    field public static final int GL_DEBUG_SOURCE_OTHER_KHR = 33355; // 0x824b
+    field public static final int GL_DEBUG_SOURCE_SHADER_COMPILER_KHR = 33352; // 0x8248
+    field public static final int GL_DEBUG_SOURCE_THIRD_PARTY_KHR = 33353; // 0x8249
+    field public static final int GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR = 33351; // 0x8247
+    field public static final int GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR = 33357; // 0x824d
+    field public static final int GL_DEBUG_TYPE_ERROR_KHR = 33356; // 0x824c
+    field public static final int GL_DEBUG_TYPE_MARKER_KHR = 33384; // 0x8268
+    field public static final int GL_DEBUG_TYPE_OTHER_KHR = 33361; // 0x8251
+    field public static final int GL_DEBUG_TYPE_PERFORMANCE_KHR = 33360; // 0x8250
+    field public static final int GL_DEBUG_TYPE_POP_GROUP_KHR = 33386; // 0x826a
+    field public static final int GL_DEBUG_TYPE_PORTABILITY_KHR = 33359; // 0x824f
+    field public static final int GL_DEBUG_TYPE_PUSH_GROUP_KHR = 33385; // 0x8269
+    field public static final int GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR = 33358; // 0x824e
+    field public static final int GL_DECODE_EXT = 35401; // 0x8a49
+    field public static final int GL_DIFFERENCE_KHR = 37534; // 0x929e
+    field public static final int GL_EXCLUSION_KHR = 37536; // 0x92a0
+    field public static final int GL_FIRST_VERTEX_CONVENTION_EXT = 36429; // 0x8e4d
+    field public static final int GL_FRACTIONAL_EVEN_EXT = 36476; // 0x8e7c
+    field public static final int GL_FRACTIONAL_ODD_EXT = 36475; // 0x8e7b
+    field public static final int GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES = 36445; // 0x8e5d
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = 36263; // 0x8da7
+    field public static final int GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT = 37650; // 0x9312
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = 36264; // 0x8da8
+    field public static final int GL_GEOMETRY_LINKED_INPUT_TYPE_EXT = 35095; // 0x8917
+    field public static final int GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT = 35096; // 0x8918
+    field public static final int GL_GEOMETRY_LINKED_VERTICES_OUT_EXT = 35094; // 0x8916
+    field public static final int GL_GEOMETRY_SHADER_BIT_EXT = 4; // 0x4
+    field public static final int GL_GEOMETRY_SHADER_EXT = 36313; // 0x8dd9
+    field public static final int GL_GEOMETRY_SHADER_INVOCATIONS_EXT = 34943; // 0x887f
+    field public static final int GL_HARDLIGHT_KHR = 37531; // 0x929b
+    field public static final int GL_HSL_COLOR_KHR = 37551; // 0x92af
+    field public static final int GL_HSL_HUE_KHR = 37549; // 0x92ad
+    field public static final int GL_HSL_LUMINOSITY_KHR = 37552; // 0x92b0
+    field public static final int GL_HSL_SATURATION_KHR = 37550; // 0x92ae
+    field public static final int GL_IMAGE_BUFFER_EXT = 36945; // 0x9051
+    field public static final int GL_IMAGE_CUBE_MAP_ARRAY_EXT = 36948; // 0x9054
+    field public static final int GL_INT_IMAGE_BUFFER_EXT = 36956; // 0x905c
+    field public static final int GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 36959; // 0x905f
+    field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37132; // 0x910c
+    field public static final int GL_INT_SAMPLER_BUFFER_EXT = 36304; // 0x8dd0
+    field public static final int GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 36878; // 0x900e
+    field public static final int GL_ISOLINES_EXT = 36474; // 0x8e7a
+    field public static final int GL_IS_PER_PATCH_EXT = 37607; // 0x92e7
+    field public static final int GL_LAST_VERTEX_CONVENTION_EXT = 36430; // 0x8e4e
+    field public static final int GL_LAYER_PROVOKING_VERTEX_EXT = 33374; // 0x825e
+    field public static final int GL_LIGHTEN_KHR = 37528; // 0x9298
+    field public static final int GL_LINES_ADJACENCY_EXT = 10; // 0xa
+    field public static final int GL_LINE_STRIP_ADJACENCY_EXT = 11; // 0xb
+    field public static final int GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT = 35378; // 0x8a32
+    field public static final int GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 36382; // 0x8e1e
+    field public static final int GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 36383; // 0x8e1f
+    field public static final int GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR = 33388; // 0x826c
+    field public static final int GL_MAX_DEBUG_LOGGED_MESSAGES_KHR = 37188; // 0x9144
+    field public static final int GL_MAX_DEBUG_MESSAGE_LENGTH_KHR = 37187; // 0x9143
+    field public static final int GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES = 36444; // 0x8e5c
+    field public static final int GL_MAX_FRAMEBUFFER_LAYERS_EXT = 37655; // 0x9317
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT = 37589; // 0x92d5
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT = 37583; // 0x92cf
+    field public static final int GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT = 37069; // 0x90cd
+    field public static final int GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT = 37155; // 0x9123
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT = 37156; // 0x9124
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT = 36320; // 0x8de0
+    field public static final int GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT = 36442; // 0x8e5a
+    field public static final int GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT = 37079; // 0x90d7
+    field public static final int GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = 35881; // 0x8c29
+    field public static final int GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT = 36321; // 0x8de1
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT = 35372; // 0x8a2c
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT = 36319; // 0x8ddf
+    field public static final int GL_MAX_LABEL_LENGTH_KHR = 33512; // 0x82e8
+    field public static final int GL_MAX_PATCH_VERTICES_EXT = 36477; // 0x8e7d
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT = 37587; // 0x92d3
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT = 37581; // 0x92cd
+    field public static final int GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT = 37067; // 0x90cb
+    field public static final int GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT = 34924; // 0x886c
+    field public static final int GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT = 36483; // 0x8e83
+    field public static final int GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT = 37080; // 0x90d8
+    field public static final int GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT = 36481; // 0x8e81
+    field public static final int GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT = 36485; // 0x8e85
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT = 36489; // 0x8e89
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 36479; // 0x8e7f
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT = 37588; // 0x92d4
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT = 37582; // 0x92ce
+    field public static final int GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT = 37068; // 0x90cc
+    field public static final int GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT = 34925; // 0x886d
+    field public static final int GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT = 36486; // 0x8e86
+    field public static final int GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT = 37081; // 0x90d9
+    field public static final int GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT = 36482; // 0x8e82
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT = 36490; // 0x8e8a
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 36480; // 0x8e80
+    field public static final int GL_MAX_TESS_GEN_LEVEL_EXT = 36478; // 0x8e7e
+    field public static final int GL_MAX_TESS_PATCH_COMPONENTS_EXT = 36484; // 0x8e84
+    field public static final int GL_MAX_TEXTURE_BUFFER_SIZE_EXT = 35883; // 0x8c2b
+    field public static final int GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES = 36443; // 0x8e5b
+    field public static final int GL_MIN_SAMPLE_SHADING_VALUE_OES = 35895; // 0x8c37
+    field public static final int GL_MULTIPLY_KHR = 37524; // 0x9294
+    field public static final int GL_OVERLAY_KHR = 37526; // 0x9296
+    field public static final int GL_PATCHES_EXT = 14; // 0xe
+    field public static final int GL_PATCH_VERTICES_EXT = 36466; // 0x8e72
+    field public static final int GL_PRIMITIVES_GENERATED_EXT = 35975; // 0x8c87
+    field public static final int GL_PRIMITIVE_BOUNDING_BOX_EXT = 37566; // 0x92be
+    field public static final int GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 33313; // 0x8221
+    field public static final int GL_PROGRAM_KHR = 33506; // 0x82e2
+    field public static final int GL_QUADS_EXT = 7; // 0x7
+    field public static final int GL_QUERY_KHR = 33507; // 0x82e3
+    field public static final int GL_REFERENCED_BY_GEOMETRY_SHADER_EXT = 37641; // 0x9309
+    field public static final int GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT = 37639; // 0x9307
+    field public static final int GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT = 37640; // 0x9308
+    field public static final int GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37131; // 0x910b
+    field public static final int GL_SAMPLER_BUFFER_EXT = 36290; // 0x8dc2
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_EXT = 36876; // 0x900c
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT = 36877; // 0x900d
+    field public static final int GL_SAMPLER_KHR = 33510; // 0x82e6
+    field public static final int GL_SAMPLE_SHADING_OES = 35894; // 0x8c36
+    field public static final int GL_SCREEN_KHR = 37525; // 0x9295
+    field public static final int GL_SHADER_KHR = 33505; // 0x82e1
+    field public static final int GL_SKIP_DECODE_EXT = 35402; // 0x8a4a
+    field public static final int GL_SOFTLIGHT_KHR = 37532; // 0x929c
+    field public static final int GL_STACK_OVERFLOW_KHR = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW_KHR = 1284; // 0x504
+    field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48
+    field public static final int GL_STENCIL_INDEX_OES = 6401; // 0x1901
+    field public static final int GL_TESS_CONTROL_OUTPUT_VERTICES_EXT = 36469; // 0x8e75
+    field public static final int GL_TESS_CONTROL_SHADER_BIT_EXT = 8; // 0x8
+    field public static final int GL_TESS_CONTROL_SHADER_EXT = 36488; // 0x8e88
+    field public static final int GL_TESS_EVALUATION_SHADER_BIT_EXT = 16; // 0x10
+    field public static final int GL_TESS_EVALUATION_SHADER_EXT = 36487; // 0x8e87
+    field public static final int GL_TESS_GEN_MODE_EXT = 36470; // 0x8e76
+    field public static final int GL_TESS_GEN_POINT_MODE_EXT = 36473; // 0x8e79
+    field public static final int GL_TESS_GEN_SPACING_EXT = 36471; // 0x8e77
+    field public static final int GL_TESS_GEN_VERTEX_ORDER_EXT = 36472; // 0x8e78
+    field public static final int GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES = 37122; // 0x9102
+    field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES = 37125; // 0x9105
+    field public static final int GL_TEXTURE_BINDING_BUFFER_EXT = 35884; // 0x8c2c
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT = 36874; // 0x900a
+    field public static final int GL_TEXTURE_BORDER_COLOR_EXT = 4100; // 0x1004
+    field public static final int GL_TEXTURE_BUFFER_BINDING_EXT = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT = 35885; // 0x8c2d
+    field public static final int GL_TEXTURE_BUFFER_EXT = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT = 37279; // 0x919f
+    field public static final int GL_TEXTURE_BUFFER_OFFSET_EXT = 37277; // 0x919d
+    field public static final int GL_TEXTURE_BUFFER_SIZE_EXT = 37278; // 0x919e
+    field public static final int GL_TEXTURE_CUBE_MAP_ARRAY_EXT = 36873; // 0x9009
+    field public static final int GL_TEXTURE_SRGB_DECODE_EXT = 35400; // 0x8a48
+    field public static final int GL_TRIANGLES_ADJACENCY_EXT = 12; // 0xc
+    field public static final int GL_TRIANGLE_STRIP_ADJACENCY_EXT = 13; // 0xd
+    field public static final int GL_UNDEFINED_VERTEX_EXT = 33376; // 0x8260
+    field public static final int GL_UNSIGNED_INT_IMAGE_BUFFER_EXT = 36967; // 0x9067
+    field public static final int GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 36970; // 0x906a
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37133; // 0x910d
+    field public static final int GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT = 36312; // 0x8dd8
+    field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 36879; // 0x900f
+    field public static final int GL_VERTEX_ARRAY_KHR = 32884; // 0x8074
+  }
+
+  public static interface GLES31Ext.DebugProcKHR {
+    method public void onMessage(int, int, int, int, String);
+  }
+
+  public class GLES32 extends android.opengl.GLES31 {
+    method public static void glBlendBarrier();
+    method public static void glBlendEquationSeparatei(int, int, int);
+    method public static void glBlendEquationi(int, int);
+    method public static void glBlendFuncSeparatei(int, int, int, int, int);
+    method public static void glBlendFunci(int, int, int);
+    method public static void glColorMaski(int, boolean, boolean, boolean, boolean);
+    method public static void glCopyImageSubData(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glDebugMessageCallback(android.opengl.GLES32.DebugProc);
+    method public static void glDebugMessageControl(int, int, int, int, int[], int, boolean);
+    method public static void glDebugMessageControl(int, int, int, int, java.nio.IntBuffer, boolean);
+    method public static void glDebugMessageInsert(int, int, int, int, int, String);
+    method public static void glDisablei(int, int);
+    method public static void glDrawElementsBaseVertex(int, int, int, java.nio.Buffer, int);
+    method public static void glDrawElementsInstancedBaseVertex(int, int, int, java.nio.Buffer, int, int);
+    method public static void glDrawElementsInstancedBaseVertex(int, int, int, int, int, int);
+    method public static void glDrawRangeElementsBaseVertex(int, int, int, int, int, java.nio.Buffer, int);
+    method public static void glEnablei(int, int);
+    method public static void glFramebufferTexture(int, int, int, int);
+    method public static int glGetDebugMessageLog(int, int, int[], int, int[], int, int[], int, int[], int, int[], int, byte[], int);
+    method public static int glGetDebugMessageLog(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.ByteBuffer);
+    method public static String[] glGetDebugMessageLog(int, int[], int, int[], int, int[], int, int[], int);
+    method public static String[] glGetDebugMessageLog(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static int glGetGraphicsResetStatus();
+    method public static String glGetObjectLabel(int, int);
+    method public static String glGetObjectPtrLabel(long);
+    method public static long glGetPointerv(int);
+    method public static void glGetSamplerParameterIiv(int, int, int[], int);
+    method public static void glGetSamplerParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glGetSamplerParameterIuiv(int, int, int[], int);
+    method public static void glGetSamplerParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIiv(int, int, int[], int);
+    method public static void glGetTexParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIuiv(int, int, int[], int);
+    method public static void glGetTexParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetnUniformfv(int, int, int, float[], int);
+    method public static void glGetnUniformfv(int, int, int, java.nio.FloatBuffer);
+    method public static void glGetnUniformiv(int, int, int, int[], int);
+    method public static void glGetnUniformiv(int, int, int, java.nio.IntBuffer);
+    method public static void glGetnUniformuiv(int, int, int, int[], int);
+    method public static void glGetnUniformuiv(int, int, int, java.nio.IntBuffer);
+    method public static boolean glIsEnabledi(int, int);
+    method public static void glMinSampleShading(float);
+    method public static void glObjectLabel(int, int, int, String);
+    method public static void glObjectPtrLabel(long, String);
+    method public static void glPatchParameteri(int, int);
+    method public static void glPopDebugGroup();
+    method public static void glPrimitiveBoundingBox(float, float, float, float, float, float, float, float);
+    method public static void glPushDebugGroup(int, int, int, String);
+    method public static void glReadnPixels(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glSamplerParameterIiv(int, int, int[], int);
+    method public static void glSamplerParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glSamplerParameterIuiv(int, int, int[], int);
+    method public static void glSamplerParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glTexBuffer(int, int, int);
+    method public static void glTexBufferRange(int, int, int, int, int);
+    method public static void glTexParameterIiv(int, int, int[], int);
+    method public static void glTexParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterIuiv(int, int, int[], int);
+    method public static void glTexParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glTexStorage3DMultisample(int, int, int, int, int, int, boolean);
+    field public static final int GL_BUFFER = 33504; // 0x82e0
+    field public static final int GL_CLAMP_TO_BORDER = 33069; // 0x812d
+    field public static final int GL_COLORBURN = 37530; // 0x929a
+    field public static final int GL_COLORDODGE = 37529; // 0x9299
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x10 = 37819; // 0x93bb
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x5 = 37816; // 0x93b8
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x6 = 37817; // 0x93b9
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x8 = 37818; // 0x93ba
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x10 = 37820; // 0x93bc
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x12 = 37821; // 0x93bd
+    field public static final int GL_COMPRESSED_RGBA_ASTC_4x4 = 37808; // 0x93b0
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x4 = 37809; // 0x93b1
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x5 = 37810; // 0x93b2
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x5 = 37811; // 0x93b3
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x6 = 37812; // 0x93b4
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x5 = 37813; // 0x93b5
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x6 = 37814; // 0x93b6
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x8 = 37815; // 0x93b7
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 = 37851; // 0x93db
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 = 37848; // 0x93d8
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 = 37849; // 0x93d9
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 = 37850; // 0x93da
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 = 37852; // 0x93dc
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 = 37853; // 0x93dd
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 = 37840; // 0x93d0
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 = 37841; // 0x93d1
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 = 37842; // 0x93d2
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 = 37843; // 0x93d3
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 = 37844; // 0x93d4
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 = 37845; // 0x93d5
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 = 37846; // 0x93d6
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 = 37847; // 0x93d7
+    field public static final int GL_CONTEXT_FLAGS = 33310; // 0x821e
+    field public static final int GL_CONTEXT_FLAG_DEBUG_BIT = 2; // 0x2
+    field public static final int GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT = 4; // 0x4
+    field public static final int GL_CONTEXT_LOST = 1287; // 0x507
+    field public static final int GL_DARKEN = 37527; // 0x9297
+    field public static final int GL_DEBUG_CALLBACK_FUNCTION = 33348; // 0x8244
+    field public static final int GL_DEBUG_CALLBACK_USER_PARAM = 33349; // 0x8245
+    field public static final int GL_DEBUG_GROUP_STACK_DEPTH = 33389; // 0x826d
+    field public static final int GL_DEBUG_LOGGED_MESSAGES = 37189; // 0x9145
+    field public static final int GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 33347; // 0x8243
+    field public static final int GL_DEBUG_OUTPUT = 37600; // 0x92e0
+    field public static final int GL_DEBUG_OUTPUT_SYNCHRONOUS = 33346; // 0x8242
+    field public static final int GL_DEBUG_SEVERITY_HIGH = 37190; // 0x9146
+    field public static final int GL_DEBUG_SEVERITY_LOW = 37192; // 0x9148
+    field public static final int GL_DEBUG_SEVERITY_MEDIUM = 37191; // 0x9147
+    field public static final int GL_DEBUG_SEVERITY_NOTIFICATION = 33387; // 0x826b
+    field public static final int GL_DEBUG_SOURCE_API = 33350; // 0x8246
+    field public static final int GL_DEBUG_SOURCE_APPLICATION = 33354; // 0x824a
+    field public static final int GL_DEBUG_SOURCE_OTHER = 33355; // 0x824b
+    field public static final int GL_DEBUG_SOURCE_SHADER_COMPILER = 33352; // 0x8248
+    field public static final int GL_DEBUG_SOURCE_THIRD_PARTY = 33353; // 0x8249
+    field public static final int GL_DEBUG_SOURCE_WINDOW_SYSTEM = 33351; // 0x8247
+    field public static final int GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR = 33357; // 0x824d
+    field public static final int GL_DEBUG_TYPE_ERROR = 33356; // 0x824c
+    field public static final int GL_DEBUG_TYPE_MARKER = 33384; // 0x8268
+    field public static final int GL_DEBUG_TYPE_OTHER = 33361; // 0x8251
+    field public static final int GL_DEBUG_TYPE_PERFORMANCE = 33360; // 0x8250
+    field public static final int GL_DEBUG_TYPE_POP_GROUP = 33386; // 0x826a
+    field public static final int GL_DEBUG_TYPE_PORTABILITY = 33359; // 0x824f
+    field public static final int GL_DEBUG_TYPE_PUSH_GROUP = 33385; // 0x8269
+    field public static final int GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR = 33358; // 0x824e
+    field public static final int GL_DIFFERENCE = 37534; // 0x929e
+    field public static final int GL_EXCLUSION = 37536; // 0x92a0
+    field public static final int GL_FIRST_VERTEX_CONVENTION = 36429; // 0x8e4d
+    field public static final int GL_FRACTIONAL_EVEN = 36476; // 0x8e7c
+    field public static final int GL_FRACTIONAL_ODD = 36475; // 0x8e7b
+    field public static final int GL_FRAGMENT_INTERPOLATION_OFFSET_BITS = 36445; // 0x8e5d
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_LAYERED = 36263; // 0x8da7
+    field public static final int GL_FRAMEBUFFER_DEFAULT_LAYERS = 37650; // 0x9312
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 36264; // 0x8da8
+    field public static final int GL_GEOMETRY_INPUT_TYPE = 35095; // 0x8917
+    field public static final int GL_GEOMETRY_OUTPUT_TYPE = 35096; // 0x8918
+    field public static final int GL_GEOMETRY_SHADER = 36313; // 0x8dd9
+    field public static final int GL_GEOMETRY_SHADER_BIT = 4; // 0x4
+    field public static final int GL_GEOMETRY_SHADER_INVOCATIONS = 34943; // 0x887f
+    field public static final int GL_GEOMETRY_VERTICES_OUT = 35094; // 0x8916
+    field public static final int GL_GUILTY_CONTEXT_RESET = 33363; // 0x8253
+    field public static final int GL_HARDLIGHT = 37531; // 0x929b
+    field public static final int GL_HSL_COLOR = 37551; // 0x92af
+    field public static final int GL_HSL_HUE = 37549; // 0x92ad
+    field public static final int GL_HSL_LUMINOSITY = 37552; // 0x92b0
+    field public static final int GL_HSL_SATURATION = 37550; // 0x92ae
+    field public static final int GL_IMAGE_BUFFER = 36945; // 0x9051
+    field public static final int GL_IMAGE_CUBE_MAP_ARRAY = 36948; // 0x9054
+    field public static final int GL_INNOCENT_CONTEXT_RESET = 33364; // 0x8254
+    field public static final int GL_INT_IMAGE_BUFFER = 36956; // 0x905c
+    field public static final int GL_INT_IMAGE_CUBE_MAP_ARRAY = 36959; // 0x905f
+    field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 37132; // 0x910c
+    field public static final int GL_INT_SAMPLER_BUFFER = 36304; // 0x8dd0
+    field public static final int GL_INT_SAMPLER_CUBE_MAP_ARRAY = 36878; // 0x900e
+    field public static final int GL_ISOLINES = 36474; // 0x8e7a
+    field public static final int GL_IS_PER_PATCH = 37607; // 0x92e7
+    field public static final int GL_LAST_VERTEX_CONVENTION = 36430; // 0x8e4e
+    field public static final int GL_LAYER_PROVOKING_VERTEX = 33374; // 0x825e
+    field public static final int GL_LIGHTEN = 37528; // 0x9298
+    field public static final int GL_LINES_ADJACENCY = 10; // 0xa
+    field public static final int GL_LINE_STRIP_ADJACENCY = 11; // 0xb
+    field public static final int GL_LOSE_CONTEXT_ON_RESET = 33362; // 0x8252
+    field public static final int GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 35378; // 0x8a32
+    field public static final int GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 36382; // 0x8e1e
+    field public static final int GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 36383; // 0x8e1f
+    field public static final int GL_MAX_DEBUG_GROUP_STACK_DEPTH = 33388; // 0x826c
+    field public static final int GL_MAX_DEBUG_LOGGED_MESSAGES = 37188; // 0x9144
+    field public static final int GL_MAX_DEBUG_MESSAGE_LENGTH = 37187; // 0x9143
+    field public static final int GL_MAX_FRAGMENT_INTERPOLATION_OFFSET = 36444; // 0x8e5c
+    field public static final int GL_MAX_FRAMEBUFFER_LAYERS = 37655; // 0x9317
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTERS = 37589; // 0x92d5
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 37583; // 0x92cf
+    field public static final int GL_MAX_GEOMETRY_IMAGE_UNIFORMS = 37069; // 0x90cd
+    field public static final int GL_MAX_GEOMETRY_INPUT_COMPONENTS = 37155; // 0x9123
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_COMPONENTS = 37156; // 0x9124
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_VERTICES = 36320; // 0x8de0
+    field public static final int GL_MAX_GEOMETRY_SHADER_INVOCATIONS = 36442; // 0x8e5a
+    field public static final int GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 37079; // 0x90d7
+    field public static final int GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 35881; // 0x8c29
+    field public static final int GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 36321; // 0x8de1
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_BLOCKS = 35372; // 0x8a2c
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_COMPONENTS = 36319; // 0x8ddf
+    field public static final int GL_MAX_LABEL_LENGTH = 33512; // 0x82e8
+    field public static final int GL_MAX_PATCH_VERTICES = 36477; // 0x8e7d
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS = 37587; // 0x92d3
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 37581; // 0x92cd
+    field public static final int GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS = 37067; // 0x90cb
+    field public static final int GL_MAX_TESS_CONTROL_INPUT_COMPONENTS = 34924; // 0x886c
+    field public static final int GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 36483; // 0x8e83
+    field public static final int GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 37080; // 0x90d8
+    field public static final int GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 36481; // 0x8e81
+    field public static final int GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 36485; // 0x8e85
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS = 36489; // 0x8e89
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 36479; // 0x8e7f
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 37588; // 0x92d4
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 37582; // 0x92ce
+    field public static final int GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 37068; // 0x90cc
+    field public static final int GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS = 34925; // 0x886d
+    field public static final int GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 36486; // 0x8e86
+    field public static final int GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 37081; // 0x90d9
+    field public static final int GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 36482; // 0x8e82
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 36490; // 0x8e8a
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 36480; // 0x8e80
+    field public static final int GL_MAX_TESS_GEN_LEVEL = 36478; // 0x8e7e
+    field public static final int GL_MAX_TESS_PATCH_COMPONENTS = 36484; // 0x8e84
+    field public static final int GL_MAX_TEXTURE_BUFFER_SIZE = 35883; // 0x8c2b
+    field public static final int GL_MIN_FRAGMENT_INTERPOLATION_OFFSET = 36443; // 0x8e5b
+    field public static final int GL_MIN_SAMPLE_SHADING_VALUE = 35895; // 0x8c37
+    field public static final int GL_MULTIPLY = 37524; // 0x9294
+    field public static final int GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY = 37762; // 0x9382
+    field public static final int GL_MULTISAMPLE_LINE_WIDTH_RANGE = 37761; // 0x9381
+    field public static final int GL_NO_RESET_NOTIFICATION = 33377; // 0x8261
+    field public static final int GL_OVERLAY = 37526; // 0x9296
+    field public static final int GL_PATCHES = 14; // 0xe
+    field public static final int GL_PATCH_VERTICES = 36466; // 0x8e72
+    field public static final int GL_PRIMITIVES_GENERATED = 35975; // 0x8c87
+    field public static final int GL_PRIMITIVE_BOUNDING_BOX = 37566; // 0x92be
+    field public static final int GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 33313; // 0x8221
+    field public static final int GL_PROGRAM = 33506; // 0x82e2
+    field public static final int GL_PROGRAM_PIPELINE = 33508; // 0x82e4
+    field public static final int GL_QUADS = 7; // 0x7
+    field public static final int GL_QUERY = 33507; // 0x82e3
+    field public static final int GL_REFERENCED_BY_GEOMETRY_SHADER = 37641; // 0x9309
+    field public static final int GL_REFERENCED_BY_TESS_CONTROL_SHADER = 37639; // 0x9307
+    field public static final int GL_REFERENCED_BY_TESS_EVALUATION_SHADER = 37640; // 0x9308
+    field public static final int GL_RESET_NOTIFICATION_STRATEGY = 33366; // 0x8256
+    field public static final int GL_SAMPLER = 33510; // 0x82e6
+    field public static final int GL_SAMPLER_2D_MULTISAMPLE_ARRAY = 37131; // 0x910b
+    field public static final int GL_SAMPLER_BUFFER = 36290; // 0x8dc2
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY = 36876; // 0x900c
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW = 36877; // 0x900d
+    field public static final int GL_SAMPLE_SHADING = 35894; // 0x8c36
+    field public static final int GL_SCREEN = 37525; // 0x9295
+    field public static final int GL_SHADER = 33505; // 0x82e1
+    field public static final int GL_SOFTLIGHT = 37532; // 0x929c
+    field public static final int GL_STACK_OVERFLOW = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504
+    field public static final int GL_TESS_CONTROL_OUTPUT_VERTICES = 36469; // 0x8e75
+    field public static final int GL_TESS_CONTROL_SHADER = 36488; // 0x8e88
+    field public static final int GL_TESS_CONTROL_SHADER_BIT = 8; // 0x8
+    field public static final int GL_TESS_EVALUATION_SHADER = 36487; // 0x8e87
+    field public static final int GL_TESS_EVALUATION_SHADER_BIT = 16; // 0x10
+    field public static final int GL_TESS_GEN_MODE = 36470; // 0x8e76
+    field public static final int GL_TESS_GEN_POINT_MODE = 36473; // 0x8e79
+    field public static final int GL_TESS_GEN_SPACING = 36471; // 0x8e77
+    field public static final int GL_TESS_GEN_VERTEX_ORDER = 36472; // 0x8e78
+    field public static final int GL_TEXTURE_2D_MULTISAMPLE_ARRAY = 37122; // 0x9102
+    field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 37125; // 0x9105
+    field public static final int GL_TEXTURE_BINDING_BUFFER = 35884; // 0x8c2c
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP_ARRAY = 36874; // 0x900a
+    field public static final int GL_TEXTURE_BORDER_COLOR = 4100; // 0x1004
+    field public static final int GL_TEXTURE_BUFFER = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_BINDING = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_DATA_STORE_BINDING = 35885; // 0x8c2d
+    field public static final int GL_TEXTURE_BUFFER_OFFSET = 37277; // 0x919d
+    field public static final int GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT = 37279; // 0x919f
+    field public static final int GL_TEXTURE_BUFFER_SIZE = 37278; // 0x919e
+    field public static final int GL_TEXTURE_CUBE_MAP_ARRAY = 36873; // 0x9009
+    field public static final int GL_TRIANGLES_ADJACENCY = 12; // 0xc
+    field public static final int GL_TRIANGLE_STRIP_ADJACENCY = 13; // 0xd
+    field public static final int GL_UNDEFINED_VERTEX = 33376; // 0x8260
+    field public static final int GL_UNKNOWN_CONTEXT_RESET = 33365; // 0x8255
+    field public static final int GL_UNSIGNED_INT_IMAGE_BUFFER = 36967; // 0x9067
+    field public static final int GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 36970; // 0x906a
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 37133; // 0x910d
+    field public static final int GL_UNSIGNED_INT_SAMPLER_BUFFER = 36312; // 0x8dd8
+    field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 36879; // 0x900f
+    field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074
+  }
+
+  public static interface GLES32.DebugProc {
+    method public void onMessage(int, int, int, int, String);
+  }
+
+  public class GLException extends java.lang.RuntimeException {
+    ctor public GLException(int);
+    ctor public GLException(int, String);
+  }
+
+  public class GLSurfaceView extends android.view.SurfaceView implements android.view.SurfaceHolder.Callback2 {
+    ctor public GLSurfaceView(android.content.Context);
+    ctor public GLSurfaceView(android.content.Context, android.util.AttributeSet);
+    method public int getDebugFlags();
+    method public boolean getPreserveEGLContextOnPause();
+    method public int getRenderMode();
+    method public void onPause();
+    method public void onResume();
+    method public void queueEvent(Runnable);
+    method public void requestRender();
+    method public void setDebugFlags(int);
+    method public void setEGLConfigChooser(android.opengl.GLSurfaceView.EGLConfigChooser);
+    method public void setEGLConfigChooser(boolean);
+    method public void setEGLConfigChooser(int, int, int, int, int, int);
+    method public void setEGLContextClientVersion(int);
+    method public void setEGLContextFactory(android.opengl.GLSurfaceView.EGLContextFactory);
+    method public void setEGLWindowSurfaceFactory(android.opengl.GLSurfaceView.EGLWindowSurfaceFactory);
+    method public void setGLWrapper(android.opengl.GLSurfaceView.GLWrapper);
+    method public void setPreserveEGLContextOnPause(boolean);
+    method public void setRenderMode(int);
+    method public void setRenderer(android.opengl.GLSurfaceView.Renderer);
+    method public void surfaceChanged(android.view.SurfaceHolder, int, int, int);
+    method public void surfaceCreated(android.view.SurfaceHolder);
+    method public void surfaceDestroyed(android.view.SurfaceHolder);
+    method @Deprecated public void surfaceRedrawNeeded(android.view.SurfaceHolder);
+    field public static final int DEBUG_CHECK_GL_ERROR = 1; // 0x1
+    field public static final int DEBUG_LOG_GL_CALLS = 2; // 0x2
+    field public static final int RENDERMODE_CONTINUOUSLY = 1; // 0x1
+    field public static final int RENDERMODE_WHEN_DIRTY = 0; // 0x0
+  }
+
+  public static interface GLSurfaceView.EGLConfigChooser {
+    method public javax.microedition.khronos.egl.EGLConfig chooseConfig(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay);
+  }
+
+  public static interface GLSurfaceView.EGLContextFactory {
+    method public javax.microedition.khronos.egl.EGLContext createContext(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig);
+    method public void destroyContext(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext);
+  }
+
+  public static interface GLSurfaceView.EGLWindowSurfaceFactory {
+    method public javax.microedition.khronos.egl.EGLSurface createWindowSurface(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, Object);
+    method public void destroySurface(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface);
+  }
+
+  public static interface GLSurfaceView.GLWrapper {
+    method public javax.microedition.khronos.opengles.GL wrap(javax.microedition.khronos.opengles.GL);
+  }
+
+  public static interface GLSurfaceView.Renderer {
+    method public void onDrawFrame(javax.microedition.khronos.opengles.GL10);
+    method public void onSurfaceChanged(javax.microedition.khronos.opengles.GL10, int, int);
+    method public void onSurfaceCreated(javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.egl.EGLConfig);
+  }
+
+  public class GLU {
+    ctor public GLU();
+    method public static String gluErrorString(int);
+    method public static void gluLookAt(javax.microedition.khronos.opengles.GL10, float, float, float, float, float, float, float, float, float);
+    method public static void gluOrtho2D(javax.microedition.khronos.opengles.GL10, float, float, float, float);
+    method public static void gluPerspective(javax.microedition.khronos.opengles.GL10, float, float, float, float);
+    method public static int gluProject(float, float, float, float[], int, float[], int, int[], int, float[], int);
+    method public static int gluUnProject(float, float, float, float[], int, float[], int, int[], int, float[], int);
+  }
+
+  public final class GLUtils {
+    method public static String getEGLErrorString(int);
+    method public static int getInternalFormat(android.graphics.Bitmap);
+    method public static int getType(android.graphics.Bitmap);
+    method public static void texImage2D(int, int, int, android.graphics.Bitmap, int);
+    method public static void texImage2D(int, int, int, android.graphics.Bitmap, int, int);
+    method public static void texImage2D(int, int, android.graphics.Bitmap, int);
+    method public static void texSubImage2D(int, int, int, int, android.graphics.Bitmap);
+    method public static void texSubImage2D(int, int, int, int, android.graphics.Bitmap, int, int);
+  }
+
+  public class Matrix {
+    ctor @Deprecated public Matrix();
+    method public static void frustumM(float[], int, float, float, float, float, float, float);
+    method public static boolean invertM(float[], int, float[], int);
+    method public static float length(float, float, float);
+    method public static void multiplyMM(float[], int, float[], int, float[], int);
+    method public static void multiplyMV(float[], int, float[], int, float[], int);
+    method public static void orthoM(float[], int, float, float, float, float, float, float);
+    method public static void perspectiveM(float[], int, float, float, float, float);
+    method public static void rotateM(float[], int, float[], int, float, float, float, float);
+    method public static void rotateM(float[], int, float, float, float, float);
+    method public static void scaleM(float[], int, float[], int, float, float, float);
+    method public static void scaleM(float[], int, float, float, float);
+    method public static void setIdentityM(float[], int);
+    method public static void setLookAtM(float[], int, float, float, float, float, float, float, float, float, float);
+    method public static void setRotateEulerM(float[], int, float, float, float);
+    method public static void setRotateM(float[], int, float, float, float, float);
+    method public static void translateM(float[], int, float[], int, float, float, float);
+    method public static void translateM(float[], int, float, float, float);
+    method public static void transposeM(float[], int, float[], int);
+  }
+
+  public class Visibility {
+    ctor public Visibility();
+    method public static void computeBoundingSphere(float[], int, int, float[], int);
+    method public static int frustumCullSpheres(float[], int, float[], int, int, int[], int, int);
+    method public static int visibilityTest(float[], int, float[], int, char[], int, int);
+  }
+
+}
+
+package android.os {
+
+  @Deprecated public abstract class AsyncTask<Params, Progress, Result> {
+    ctor @Deprecated public AsyncTask();
+    method @Deprecated public final boolean cancel(boolean);
+    method @Deprecated @WorkerThread protected abstract Result doInBackground(Params...);
+    method @Deprecated @MainThread public final android.os.AsyncTask<Params,Progress,Result> execute(Params...);
+    method @Deprecated @MainThread public static void execute(Runnable);
+    method @Deprecated @MainThread public final android.os.AsyncTask<Params,Progress,Result> executeOnExecutor(java.util.concurrent.Executor, Params...);
+    method @Deprecated public final Result get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method @Deprecated public final Result get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method @Deprecated public final android.os.AsyncTask.Status getStatus();
+    method @Deprecated public final boolean isCancelled();
+    method @Deprecated @MainThread protected void onCancelled(Result);
+    method @Deprecated @MainThread protected void onCancelled();
+    method @Deprecated @MainThread protected void onPostExecute(Result);
+    method @Deprecated @MainThread protected void onPreExecute();
+    method @Deprecated @MainThread protected void onProgressUpdate(Progress...);
+    method @Deprecated @WorkerThread protected final void publishProgress(Progress...);
+    field @Deprecated public static final java.util.concurrent.Executor SERIAL_EXECUTOR;
+    field @Deprecated public static final java.util.concurrent.Executor THREAD_POOL_EXECUTOR;
+  }
+
+  @Deprecated public enum AsyncTask.Status {
+    enum_constant @Deprecated public static final android.os.AsyncTask.Status FINISHED;
+    enum_constant @Deprecated public static final android.os.AsyncTask.Status PENDING;
+    enum_constant @Deprecated public static final android.os.AsyncTask.Status RUNNING;
+  }
+
+  public class BadParcelableException extends android.util.AndroidRuntimeException {
+    ctor public BadParcelableException(String);
+    ctor public BadParcelableException(Exception);
+  }
+
+  public class BaseBundle {
+    method public void clear();
+    method public boolean containsKey(String);
+    method @Nullable public Object get(String);
+    method public boolean getBoolean(String);
+    method public boolean getBoolean(String, boolean);
+    method @Nullable public boolean[] getBooleanArray(@Nullable String);
+    method public double getDouble(String);
+    method public double getDouble(String, double);
+    method @Nullable public double[] getDoubleArray(@Nullable String);
+    method public int getInt(String);
+    method public int getInt(String, int);
+    method @Nullable public int[] getIntArray(@Nullable String);
+    method public long getLong(String);
+    method public long getLong(String, long);
+    method @Nullable public long[] getLongArray(@Nullable String);
+    method @Nullable public String getString(@Nullable String);
+    method public String getString(@Nullable String, String);
+    method @Nullable public String[] getStringArray(@Nullable String);
+    method public boolean isEmpty();
+    method public java.util.Set<java.lang.String> keySet();
+    method public void putAll(android.os.PersistableBundle);
+    method public void putBoolean(@Nullable String, boolean);
+    method public void putBooleanArray(@Nullable String, @Nullable boolean[]);
+    method public void putDouble(@Nullable String, double);
+    method public void putDoubleArray(@Nullable String, @Nullable double[]);
+    method public void putInt(@Nullable String, int);
+    method public void putIntArray(@Nullable String, @Nullable int[]);
+    method public void putLong(@Nullable String, long);
+    method public void putLongArray(@Nullable String, @Nullable long[]);
+    method public void putString(@Nullable String, @Nullable String);
+    method public void putStringArray(@Nullable String, @Nullable String[]);
+    method public void remove(String);
+    method public int size();
+  }
+
+  public class BatteryManager {
+    method public long computeChargeTimeRemaining();
+    method public int getIntProperty(int);
+    method public long getLongProperty(int);
+    method public boolean isCharging();
+    field public static final String ACTION_CHARGING = "android.os.action.CHARGING";
+    field public static final String ACTION_DISCHARGING = "android.os.action.DISCHARGING";
+    field public static final int BATTERY_HEALTH_COLD = 7; // 0x7
+    field public static final int BATTERY_HEALTH_DEAD = 4; // 0x4
+    field public static final int BATTERY_HEALTH_GOOD = 2; // 0x2
+    field public static final int BATTERY_HEALTH_OVERHEAT = 3; // 0x3
+    field public static final int BATTERY_HEALTH_OVER_VOLTAGE = 5; // 0x5
+    field public static final int BATTERY_HEALTH_UNKNOWN = 1; // 0x1
+    field public static final int BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6; // 0x6
+    field public static final int BATTERY_PLUGGED_AC = 1; // 0x1
+    field public static final int BATTERY_PLUGGED_USB = 2; // 0x2
+    field public static final int BATTERY_PLUGGED_WIRELESS = 4; // 0x4
+    field public static final int BATTERY_PROPERTY_CAPACITY = 4; // 0x4
+    field public static final int BATTERY_PROPERTY_CHARGE_COUNTER = 1; // 0x1
+    field public static final int BATTERY_PROPERTY_CURRENT_AVERAGE = 3; // 0x3
+    field public static final int BATTERY_PROPERTY_CURRENT_NOW = 2; // 0x2
+    field public static final int BATTERY_PROPERTY_ENERGY_COUNTER = 5; // 0x5
+    field public static final int BATTERY_PROPERTY_STATUS = 6; // 0x6
+    field public static final int BATTERY_STATUS_CHARGING = 2; // 0x2
+    field public static final int BATTERY_STATUS_DISCHARGING = 3; // 0x3
+    field public static final int BATTERY_STATUS_FULL = 5; // 0x5
+    field public static final int BATTERY_STATUS_NOT_CHARGING = 4; // 0x4
+    field public static final int BATTERY_STATUS_UNKNOWN = 1; // 0x1
+    field public static final String EXTRA_BATTERY_LOW = "battery_low";
+    field public static final String EXTRA_HEALTH = "health";
+    field public static final String EXTRA_ICON_SMALL = "icon-small";
+    field public static final String EXTRA_LEVEL = "level";
+    field public static final String EXTRA_PLUGGED = "plugged";
+    field public static final String EXTRA_PRESENT = "present";
+    field public static final String EXTRA_SCALE = "scale";
+    field public static final String EXTRA_STATUS = "status";
+    field public static final String EXTRA_TECHNOLOGY = "technology";
+    field public static final String EXTRA_TEMPERATURE = "temperature";
+    field public static final String EXTRA_VOLTAGE = "voltage";
+  }
+
+  public class Binder implements android.os.IBinder {
+    ctor public Binder();
+    ctor public Binder(@Nullable String);
+    method public void attachInterface(@Nullable android.os.IInterface, @Nullable String);
+    method public static final long clearCallingIdentity();
+    method public static final long clearCallingWorkSource();
+    method public void dump(@NonNull java.io.FileDescriptor, @Nullable String[]);
+    method protected void dump(@NonNull java.io.FileDescriptor, @NonNull java.io.PrintWriter, @Nullable String[]);
+    method public void dumpAsync(@NonNull java.io.FileDescriptor, @Nullable String[]);
+    method public static final void flushPendingCommands();
+    method public static final int getCallingPid();
+    method public static final int getCallingUid();
+    method public static final int getCallingUidOrThrow();
+    method @NonNull public static final android.os.UserHandle getCallingUserHandle();
+    method public static final int getCallingWorkSourceUid();
+    method @Nullable public String getInterfaceDescriptor();
+    method public boolean isBinderAlive();
+    method public static final void joinThreadPool();
+    method public void linkToDeath(@NonNull android.os.IBinder.DeathRecipient, int);
+    method protected boolean onTransact(int, @NonNull android.os.Parcel, @Nullable android.os.Parcel, int) throws android.os.RemoteException;
+    method public boolean pingBinder();
+    method @Nullable public android.os.IInterface queryLocalInterface(@NonNull String);
+    method public static final void restoreCallingIdentity(long);
+    method public static final void restoreCallingWorkSource(long);
+    method public static final long setCallingWorkSourceUid(int);
+    method public final boolean transact(int, @NonNull android.os.Parcel, @Nullable android.os.Parcel, int) throws android.os.RemoteException;
+    method public boolean unlinkToDeath(@NonNull android.os.IBinder.DeathRecipient, int);
+  }
+
+  public final class BugreportManager {
+    method @WorkerThread public void cancelBugreport();
+    method @WorkerThread public void startConnectivityBugreport(@NonNull android.os.ParcelFileDescriptor, @NonNull java.util.concurrent.Executor, @NonNull android.os.BugreportManager.BugreportCallback);
+  }
+
+  public abstract static class BugreportManager.BugreportCallback {
+    ctor public BugreportManager.BugreportCallback();
+    method public void onEarlyReportFinished();
+    method public void onError(int);
+    method public void onFinished();
+    method public void onProgress(@FloatRange(from=0.0f, to=100.0f) float);
+    field public static final int BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS = 5; // 0x5
+    field public static final int BUGREPORT_ERROR_INVALID_INPUT = 1; // 0x1
+    field public static final int BUGREPORT_ERROR_RUNTIME = 2; // 0x2
+    field public static final int BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT = 4; // 0x4
+    field public static final int BUGREPORT_ERROR_USER_DENIED_CONSENT = 3; // 0x3
+  }
+
+  public class Build {
+    ctor public Build();
+    method @NonNull public static java.util.List<android.os.Build.Partition> getFingerprintedPartitions();
+    method public static String getRadioVersion();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public static String getSerial();
+    field public static final String BOARD;
+    field public static final String BOOTLOADER;
+    field public static final String BRAND;
+    field @Deprecated public static final String CPU_ABI;
+    field @Deprecated public static final String CPU_ABI2;
+    field public static final String DEVICE;
+    field public static final String DISPLAY;
+    field public static final String FINGERPRINT;
+    field public static final String HARDWARE;
+    field public static final String HOST;
+    field public static final String ID;
+    field public static final String MANUFACTURER;
+    field public static final String MODEL;
+    field @NonNull public static final String ODM_SKU;
+    field public static final String PRODUCT;
+    field @Deprecated public static final String RADIO;
+    field @Deprecated public static final String SERIAL;
+    field @NonNull public static final String SKU;
+    field @NonNull public static final String SOC_MANUFACTURER;
+    field @NonNull public static final String SOC_MODEL;
+    field public static final String[] SUPPORTED_32_BIT_ABIS;
+    field public static final String[] SUPPORTED_64_BIT_ABIS;
+    field public static final String[] SUPPORTED_ABIS;
+    field public static final String TAGS;
+    field public static final long TIME;
+    field public static final String TYPE;
+    field public static final String UNKNOWN = "unknown";
+    field public static final String USER;
+  }
+
+  public static class Build.Partition {
+    method public long getBuildTimeMillis();
+    method @NonNull public String getFingerprint();
+    method @NonNull public String getName();
+    field public static final String PARTITION_NAME_SYSTEM = "system";
+  }
+
+  public static class Build.VERSION {
+    ctor public Build.VERSION();
+    field public static final String BASE_OS;
+    field public static final String CODENAME;
+    field public static final String INCREMENTAL;
+    field public static final int MEDIA_PERFORMANCE_CLASS;
+    field public static final int PREVIEW_SDK_INT;
+    field public static final String RELEASE;
+    field @NonNull public static final String RELEASE_OR_CODENAME;
+    field @Deprecated public static final String SDK;
+    field public static final int SDK_INT;
+    field public static final String SECURITY_PATCH;
+  }
+
+  public static class Build.VERSION_CODES {
+    ctor public Build.VERSION_CODES();
+    field public static final int BASE = 1; // 0x1
+    field public static final int BASE_1_1 = 2; // 0x2
+    field public static final int CUPCAKE = 3; // 0x3
+    field public static final int CUR_DEVELOPMENT = 10000; // 0x2710
+    field public static final int DONUT = 4; // 0x4
+    field public static final int ECLAIR = 5; // 0x5
+    field public static final int ECLAIR_0_1 = 6; // 0x6
+    field public static final int ECLAIR_MR1 = 7; // 0x7
+    field public static final int FROYO = 8; // 0x8
+    field public static final int GINGERBREAD = 9; // 0x9
+    field public static final int GINGERBREAD_MR1 = 10; // 0xa
+    field public static final int HONEYCOMB = 11; // 0xb
+    field public static final int HONEYCOMB_MR1 = 12; // 0xc
+    field public static final int HONEYCOMB_MR2 = 13; // 0xd
+    field public static final int ICE_CREAM_SANDWICH = 14; // 0xe
+    field public static final int ICE_CREAM_SANDWICH_MR1 = 15; // 0xf
+    field public static final int JELLY_BEAN = 16; // 0x10
+    field public static final int JELLY_BEAN_MR1 = 17; // 0x11
+    field public static final int JELLY_BEAN_MR2 = 18; // 0x12
+    field public static final int KITKAT = 19; // 0x13
+    field public static final int KITKAT_WATCH = 20; // 0x14
+    field public static final int LOLLIPOP = 21; // 0x15
+    field public static final int LOLLIPOP_MR1 = 22; // 0x16
+    field public static final int M = 23; // 0x17
+    field public static final int N = 24; // 0x18
+    field public static final int N_MR1 = 25; // 0x19
+    field public static final int O = 26; // 0x1a
+    field public static final int O_MR1 = 27; // 0x1b
+    field public static final int P = 28; // 0x1c
+    field public static final int Q = 29; // 0x1d
+    field public static final int R = 30; // 0x1e
+    field public static final int S = 31; // 0x1f
+    field public static final int S_V2 = 32; // 0x20
+  }
+
+  public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
+    ctor public Bundle();
+    ctor public Bundle(ClassLoader);
+    ctor public Bundle(int);
+    ctor public Bundle(android.os.Bundle);
+    ctor public Bundle(android.os.PersistableBundle);
+    method public Object clone();
+    method public android.os.Bundle deepCopy();
+    method public int describeContents();
+    method @Nullable public android.os.IBinder getBinder(@Nullable String);
+    method @Nullable public android.os.Bundle getBundle(@Nullable String);
+    method public byte getByte(String);
+    method public Byte getByte(String, byte);
+    method @Nullable public byte[] getByteArray(@Nullable String);
+    method public char getChar(String);
+    method public char getChar(String, char);
+    method @Nullable public char[] getCharArray(@Nullable String);
+    method @Nullable public CharSequence getCharSequence(@Nullable String);
+    method public CharSequence getCharSequence(@Nullable String, CharSequence);
+    method @Nullable public CharSequence[] getCharSequenceArray(@Nullable String);
+    method @Nullable public java.util.ArrayList<java.lang.CharSequence> getCharSequenceArrayList(@Nullable String);
+    method public ClassLoader getClassLoader();
+    method public float getFloat(String);
+    method public float getFloat(String, float);
+    method @Nullable public float[] getFloatArray(@Nullable String);
+    method @Nullable public java.util.ArrayList<java.lang.Integer> getIntegerArrayList(@Nullable String);
+    method @Nullable public <T extends android.os.Parcelable> T getParcelable(@Nullable String);
+    method @Nullable public android.os.Parcelable[] getParcelableArray(@Nullable String);
+    method @Nullable public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayList(@Nullable String);
+    method @Nullable public java.io.Serializable getSerializable(@Nullable String);
+    method public short getShort(String);
+    method public short getShort(String, short);
+    method @Nullable public short[] getShortArray(@Nullable String);
+    method @Nullable public android.util.Size getSize(@Nullable String);
+    method @Nullable public android.util.SizeF getSizeF(@Nullable String);
+    method @Nullable public <T extends android.os.Parcelable> android.util.SparseArray<T> getSparseParcelableArray(@Nullable String);
+    method @Nullable public java.util.ArrayList<java.lang.String> getStringArrayList(@Nullable String);
+    method public boolean hasFileDescriptors();
+    method public void putAll(android.os.Bundle);
+    method public void putBinder(@Nullable String, @Nullable android.os.IBinder);
+    method public void putBundle(@Nullable String, @Nullable android.os.Bundle);
+    method public void putByte(@Nullable String, byte);
+    method public void putByteArray(@Nullable String, @Nullable byte[]);
+    method public void putChar(@Nullable String, char);
+    method public void putCharArray(@Nullable String, @Nullable char[]);
+    method public void putCharSequence(@Nullable String, @Nullable CharSequence);
+    method public void putCharSequenceArray(@Nullable String, @Nullable CharSequence[]);
+    method public void putCharSequenceArrayList(@Nullable String, @Nullable java.util.ArrayList<java.lang.CharSequence>);
+    method public void putFloat(@Nullable String, float);
+    method public void putFloatArray(@Nullable String, @Nullable float[]);
+    method public void putIntegerArrayList(@Nullable String, @Nullable java.util.ArrayList<java.lang.Integer>);
+    method public void putParcelable(@Nullable String, @Nullable android.os.Parcelable);
+    method public void putParcelableArray(@Nullable String, @Nullable android.os.Parcelable[]);
+    method public void putParcelableArrayList(@Nullable String, @Nullable java.util.ArrayList<? extends android.os.Parcelable>);
+    method public void putSerializable(@Nullable String, @Nullable java.io.Serializable);
+    method public void putShort(@Nullable String, short);
+    method public void putShortArray(@Nullable String, @Nullable short[]);
+    method public void putSize(@Nullable String, @Nullable android.util.Size);
+    method public void putSizeF(@Nullable String, @Nullable android.util.SizeF);
+    method public void putSparseParcelableArray(@Nullable String, @Nullable android.util.SparseArray<? extends android.os.Parcelable>);
+    method public void putStringArrayList(@Nullable String, @Nullable java.util.ArrayList<java.lang.String>);
+    method public void readFromParcel(android.os.Parcel);
+    method public void setClassLoader(ClassLoader);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
+    field public static final android.os.Bundle EMPTY;
+  }
+
+  public final class CancellationSignal {
+    ctor public CancellationSignal();
+    method public void cancel();
+    method public boolean isCanceled();
+    method public void setOnCancelListener(android.os.CancellationSignal.OnCancelListener);
+    method public void throwIfCanceled();
+  }
+
+  public static interface CancellationSignal.OnCancelListener {
+    method public void onCancel();
+  }
+
+  public abstract class CombinedVibration implements android.os.Parcelable {
+    method @NonNull public static android.os.CombinedVibration createParallel(@NonNull android.os.VibrationEffect);
+    method public int describeContents();
+    method @NonNull public static android.os.CombinedVibration.ParallelCombination startParallel();
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration> CREATOR;
+  }
+
+  public static final class CombinedVibration.ParallelCombination {
+    method @NonNull public android.os.CombinedVibration.ParallelCombination addVibrator(int, @NonNull android.os.VibrationEffect);
+    method @NonNull public android.os.CombinedVibration combine();
+  }
+
+  public class ConditionVariable {
+    ctor public ConditionVariable();
+    ctor public ConditionVariable(boolean);
+    method public void block();
+    method public boolean block(long);
+    method public void close();
+    method public void open();
+  }
+
+  public abstract class CountDownTimer {
+    ctor public CountDownTimer(long, long);
+    method public final void cancel();
+    method public abstract void onFinish();
+    method public abstract void onTick(long);
+    method public final android.os.CountDownTimer start();
+  }
+
+  public final class CpuUsageInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getActive();
+    method public long getTotal();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CpuUsageInfo> CREATOR;
+  }
+
+  public class DeadObjectException extends android.os.RemoteException {
+    ctor public DeadObjectException();
+    ctor public DeadObjectException(String);
+  }
+
+  public class DeadSystemException extends android.os.DeadObjectException {
+    ctor public DeadSystemException();
+  }
+
+  public final class Debug {
+    method public static void attachJvmtiAgent(@NonNull String, @Nullable String, @Nullable ClassLoader) throws java.io.IOException;
+    method @Deprecated public static void changeDebugPort(int);
+    method public static void dumpHprofData(String) throws java.io.IOException;
+    method public static boolean dumpService(String, java.io.FileDescriptor, String[]);
+    method public static void enableEmulatorTraceOutput();
+    method public static int getBinderDeathObjectCount();
+    method public static int getBinderLocalObjectCount();
+    method public static int getBinderProxyObjectCount();
+    method public static int getBinderReceivedTransactions();
+    method public static int getBinderSentTransactions();
+    method @Deprecated public static int getGlobalAllocCount();
+    method @Deprecated public static int getGlobalAllocSize();
+    method @Deprecated public static int getGlobalClassInitCount();
+    method @Deprecated public static int getGlobalClassInitTime();
+    method @Deprecated public static int getGlobalExternalAllocCount();
+    method @Deprecated public static int getGlobalExternalAllocSize();
+    method @Deprecated public static int getGlobalExternalFreedCount();
+    method @Deprecated public static int getGlobalExternalFreedSize();
+    method @Deprecated public static int getGlobalFreedCount();
+    method @Deprecated public static int getGlobalFreedSize();
+    method @Deprecated public static int getGlobalGcInvocationCount();
+    method public static int getLoadedClassCount();
+    method public static void getMemoryInfo(android.os.Debug.MemoryInfo);
+    method public static long getNativeHeapAllocatedSize();
+    method public static long getNativeHeapFreeSize();
+    method public static long getNativeHeapSize();
+    method public static long getPss();
+    method public static String getRuntimeStat(String);
+    method public static java.util.Map<java.lang.String,java.lang.String> getRuntimeStats();
+    method @Deprecated public static int getThreadAllocCount();
+    method @Deprecated public static int getThreadAllocSize();
+    method @Deprecated public static int getThreadExternalAllocCount();
+    method @Deprecated public static int getThreadExternalAllocSize();
+    method @Deprecated public static int getThreadGcInvocationCount();
+    method public static boolean isDebuggerConnected();
+    method public static void printLoadedClasses(int);
+    method @Deprecated public static void resetAllCounts();
+    method @Deprecated public static void resetGlobalAllocCount();
+    method @Deprecated public static void resetGlobalAllocSize();
+    method @Deprecated public static void resetGlobalClassInitCount();
+    method @Deprecated public static void resetGlobalClassInitTime();
+    method @Deprecated public static void resetGlobalExternalAllocCount();
+    method @Deprecated public static void resetGlobalExternalAllocSize();
+    method @Deprecated public static void resetGlobalExternalFreedCount();
+    method @Deprecated public static void resetGlobalExternalFreedSize();
+    method @Deprecated public static void resetGlobalFreedCount();
+    method @Deprecated public static void resetGlobalFreedSize();
+    method @Deprecated public static void resetGlobalGcInvocationCount();
+    method @Deprecated public static void resetThreadAllocCount();
+    method @Deprecated public static void resetThreadAllocSize();
+    method @Deprecated public static void resetThreadExternalAllocCount();
+    method @Deprecated public static void resetThreadExternalAllocSize();
+    method @Deprecated public static void resetThreadGcInvocationCount();
+    method @Deprecated public static int setAllocationLimit(int);
+    method @Deprecated public static int setGlobalAllocationLimit(int);
+    method @Deprecated public static void startAllocCounting();
+    method public static void startMethodTracing();
+    method public static void startMethodTracing(String);
+    method public static void startMethodTracing(String, int);
+    method public static void startMethodTracing(String, int, int);
+    method public static void startMethodTracingSampling(String, int, int);
+    method public static void startNativeTracing();
+    method @Deprecated public static void stopAllocCounting();
+    method public static void stopMethodTracing();
+    method public static void stopNativeTracing();
+    method public static long threadCpuTimeNanos();
+    method public static void waitForDebugger();
+    method public static boolean waitingForDebugger();
+    field public static final int SHOW_CLASSLOADER = 2; // 0x2
+    field public static final int SHOW_FULL_DETAIL = 1; // 0x1
+    field public static final int SHOW_INITIALIZED = 4; // 0x4
+    field @Deprecated public static final int TRACE_COUNT_ALLOCS = 1; // 0x1
+  }
+
+  @Deprecated public static class Debug.InstructionCount {
+    ctor @Deprecated public Debug.InstructionCount();
+    method @Deprecated public boolean collect();
+    method @Deprecated public int globalMethodInvocations();
+    method @Deprecated public int globalTotal();
+    method @Deprecated public boolean resetAndStart();
+  }
+
+  public static class Debug.MemoryInfo implements android.os.Parcelable {
+    ctor public Debug.MemoryInfo();
+    method public int describeContents();
+    method public String getMemoryStat(String);
+    method public java.util.Map<java.lang.String,java.lang.String> getMemoryStats();
+    method public int getTotalPrivateClean();
+    method public int getTotalPrivateDirty();
+    method public int getTotalPss();
+    method public int getTotalSharedClean();
+    method public int getTotalSharedDirty();
+    method public int getTotalSwappablePss();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Debug.MemoryInfo> CREATOR;
+    field public int dalvikPrivateDirty;
+    field public int dalvikPss;
+    field public int dalvikSharedDirty;
+    field public int nativePrivateDirty;
+    field public int nativePss;
+    field public int nativeSharedDirty;
+    field public int otherPrivateDirty;
+    field public int otherPss;
+    field public int otherSharedDirty;
+  }
+
+  public class DropBoxManager {
+    ctor protected DropBoxManager();
+    method public void addData(@NonNull String, @Nullable byte[], int);
+    method public void addFile(@NonNull String, @NonNull java.io.File, int) throws java.io.IOException;
+    method public void addText(@NonNull String, @NonNull String);
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.READ_LOGS, android.Manifest.permission.PACKAGE_USAGE_STATS}) public android.os.DropBoxManager.Entry getNextEntry(String, long);
+    method public boolean isTagEnabled(String);
+    field public static final String ACTION_DROPBOX_ENTRY_ADDED = "android.intent.action.DROPBOX_ENTRY_ADDED";
+    field public static final String EXTRA_DROPPED_COUNT = "android.os.extra.DROPPED_COUNT";
+    field public static final String EXTRA_TAG = "tag";
+    field public static final String EXTRA_TIME = "time";
+    field public static final int IS_EMPTY = 1; // 0x1
+    field public static final int IS_GZIPPED = 4; // 0x4
+    field public static final int IS_TEXT = 2; // 0x2
+  }
+
+  public static class DropBoxManager.Entry implements java.io.Closeable android.os.Parcelable {
+    ctor public DropBoxManager.Entry(@NonNull String, long);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @NonNull String);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @Nullable byte[], int);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @Nullable android.os.ParcelFileDescriptor, int);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @NonNull java.io.File, int) throws java.io.IOException;
+    method public void close();
+    method public int describeContents();
+    method public int getFlags();
+    method @Nullable public java.io.InputStream getInputStream() throws java.io.IOException;
+    method @NonNull public String getTag();
+    method @Nullable public String getText(int);
+    method public long getTimeMillis();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.DropBoxManager.Entry> CREATOR;
+  }
+
+  public class Environment {
+    ctor public Environment();
+    method public static java.io.File getDataDirectory();
+    method public static java.io.File getDownloadCacheDirectory();
+    method public static java.io.File getExternalStorageDirectory();
+    method public static java.io.File getExternalStoragePublicDirectory(String);
+    method public static String getExternalStorageState();
+    method public static String getExternalStorageState(java.io.File);
+    method @NonNull public static java.io.File getRootDirectory();
+    method @NonNull public static java.io.File getStorageDirectory();
+    method @Deprecated public static String getStorageState(java.io.File);
+    method public static boolean isExternalStorageEmulated();
+    method public static boolean isExternalStorageEmulated(@NonNull java.io.File);
+    method public static boolean isExternalStorageLegacy();
+    method public static boolean isExternalStorageLegacy(@NonNull java.io.File);
+    method public static boolean isExternalStorageManager();
+    method public static boolean isExternalStorageManager(@NonNull java.io.File);
+    method public static boolean isExternalStorageRemovable();
+    method public static boolean isExternalStorageRemovable(@NonNull java.io.File);
+    field public static String DIRECTORY_ALARMS;
+    field public static String DIRECTORY_AUDIOBOOKS;
+    field public static String DIRECTORY_DCIM;
+    field public static String DIRECTORY_DOCUMENTS;
+    field public static String DIRECTORY_DOWNLOADS;
+    field public static String DIRECTORY_MOVIES;
+    field public static String DIRECTORY_MUSIC;
+    field public static String DIRECTORY_NOTIFICATIONS;
+    field public static String DIRECTORY_PICTURES;
+    field public static String DIRECTORY_PODCASTS;
+    field @NonNull public static String DIRECTORY_RECORDINGS;
+    field public static String DIRECTORY_RINGTONES;
+    field public static String DIRECTORY_SCREENSHOTS;
+    field public static final String MEDIA_BAD_REMOVAL = "bad_removal";
+    field public static final String MEDIA_CHECKING = "checking";
+    field public static final String MEDIA_EJECTING = "ejecting";
+    field public static final String MEDIA_MOUNTED = "mounted";
+    field public static final String MEDIA_MOUNTED_READ_ONLY = "mounted_ro";
+    field public static final String MEDIA_NOFS = "nofs";
+    field public static final String MEDIA_REMOVED = "removed";
+    field public static final String MEDIA_SHARED = "shared";
+    field public static final String MEDIA_UNKNOWN = "unknown";
+    field public static final String MEDIA_UNMOUNTABLE = "unmountable";
+    field public static final String MEDIA_UNMOUNTED = "unmounted";
+  }
+
+  public abstract class FileObserver {
+    ctor @Deprecated public FileObserver(String);
+    ctor public FileObserver(@NonNull java.io.File);
+    ctor public FileObserver(@NonNull java.util.List<java.io.File>);
+    ctor @Deprecated public FileObserver(String, int);
+    ctor public FileObserver(@NonNull java.io.File, int);
+    ctor public FileObserver(@NonNull java.util.List<java.io.File>, int);
+    method protected void finalize();
+    method public abstract void onEvent(int, @Nullable String);
+    method public void startWatching();
+    method public void stopWatching();
+    field public static final int ACCESS = 1; // 0x1
+    field public static final int ALL_EVENTS = 4095; // 0xfff
+    field public static final int ATTRIB = 4; // 0x4
+    field public static final int CLOSE_NOWRITE = 16; // 0x10
+    field public static final int CLOSE_WRITE = 8; // 0x8
+    field public static final int CREATE = 256; // 0x100
+    field public static final int DELETE = 512; // 0x200
+    field public static final int DELETE_SELF = 1024; // 0x400
+    field public static final int MODIFY = 2; // 0x2
+    field public static final int MOVED_FROM = 64; // 0x40
+    field public static final int MOVED_TO = 128; // 0x80
+    field public static final int MOVE_SELF = 2048; // 0x800
+    field public static final int OPEN = 32; // 0x20
+  }
+
+  public class FileUriExposedException extends java.lang.RuntimeException {
+    ctor public FileUriExposedException(String);
+  }
+
+  public final class FileUtils {
+    method @Deprecated public static void closeQuietly(@Nullable AutoCloseable);
+    method @Deprecated public static void closeQuietly(@Nullable java.io.FileDescriptor);
+    method public static long copy(@NonNull java.io.InputStream, @NonNull java.io.OutputStream) throws java.io.IOException;
+    method public static long copy(@NonNull java.io.InputStream, @NonNull java.io.OutputStream, @Nullable android.os.CancellationSignal, @Nullable java.util.concurrent.Executor, @Nullable android.os.FileUtils.ProgressListener) throws java.io.IOException;
+    method public static long copy(@NonNull java.io.FileDescriptor, @NonNull java.io.FileDescriptor) throws java.io.IOException;
+    method public static long copy(@NonNull java.io.FileDescriptor, @NonNull java.io.FileDescriptor, @Nullable android.os.CancellationSignal, @Nullable java.util.concurrent.Executor, @Nullable android.os.FileUtils.ProgressListener) throws java.io.IOException;
+  }
+
+  public static interface FileUtils.ProgressListener {
+    method public void onProgress(long);
+  }
+
+  public class Handler {
+    ctor @Deprecated public Handler();
+    ctor @Deprecated public Handler(@Nullable android.os.Handler.Callback);
+    ctor public Handler(@NonNull android.os.Looper);
+    ctor public Handler(@NonNull android.os.Looper, @Nullable android.os.Handler.Callback);
+    method @NonNull public static android.os.Handler createAsync(@NonNull android.os.Looper);
+    method @NonNull public static android.os.Handler createAsync(@NonNull android.os.Looper, @NonNull android.os.Handler.Callback);
+    method public void dispatchMessage(@NonNull android.os.Message);
+    method public final void dump(@NonNull android.util.Printer, @NonNull String);
+    method @NonNull public final android.os.Looper getLooper();
+    method @NonNull public String getMessageName(@NonNull android.os.Message);
+    method public void handleMessage(@NonNull android.os.Message);
+    method public final boolean hasCallbacks(@NonNull Runnable);
+    method public final boolean hasMessages(int);
+    method public final boolean hasMessages(int, @Nullable Object);
+    method @NonNull public final android.os.Message obtainMessage();
+    method @NonNull public final android.os.Message obtainMessage(int);
+    method @NonNull public final android.os.Message obtainMessage(int, @Nullable Object);
+    method @NonNull public final android.os.Message obtainMessage(int, int, int);
+    method @NonNull public final android.os.Message obtainMessage(int, int, int, @Nullable Object);
+    method public final boolean post(@NonNull Runnable);
+    method public final boolean postAtFrontOfQueue(@NonNull Runnable);
+    method public final boolean postAtTime(@NonNull Runnable, long);
+    method public final boolean postAtTime(@NonNull Runnable, @Nullable Object, long);
+    method public final boolean postDelayed(@NonNull Runnable, long);
+    method public final boolean postDelayed(@NonNull Runnable, @Nullable Object, long);
+    method public final void removeCallbacks(@NonNull Runnable);
+    method public final void removeCallbacks(@NonNull Runnable, @Nullable Object);
+    method public final void removeCallbacksAndMessages(@Nullable Object);
+    method public final void removeMessages(int);
+    method public final void removeMessages(int, @Nullable Object);
+    method public final boolean sendEmptyMessage(int);
+    method public final boolean sendEmptyMessageAtTime(int, long);
+    method public final boolean sendEmptyMessageDelayed(int, long);
+    method public final boolean sendMessage(@NonNull android.os.Message);
+    method public final boolean sendMessageAtFrontOfQueue(@NonNull android.os.Message);
+    method public boolean sendMessageAtTime(@NonNull android.os.Message, long);
+    method public final boolean sendMessageDelayed(@NonNull android.os.Message, long);
+  }
+
+  public static interface Handler.Callback {
+    method public boolean handleMessage(@NonNull android.os.Message);
+  }
+
+  public class HandlerThread extends java.lang.Thread {
+    ctor public HandlerThread(String);
+    ctor public HandlerThread(String, int);
+    method public android.os.Looper getLooper();
+    method public int getThreadId();
+    method protected void onLooperPrepared();
+    method public boolean quit();
+    method public boolean quitSafely();
+  }
+
+  public class HardwarePropertiesManager {
+    method @NonNull public android.os.CpuUsageInfo[] getCpuUsages();
+    method @NonNull public float[] getDeviceTemperatures(int, int);
+    method @NonNull public float[] getFanSpeeds();
+    field public static final int DEVICE_TEMPERATURE_BATTERY = 2; // 0x2
+    field public static final int DEVICE_TEMPERATURE_CPU = 0; // 0x0
+    field public static final int DEVICE_TEMPERATURE_GPU = 1; // 0x1
+    field public static final int DEVICE_TEMPERATURE_SKIN = 3; // 0x3
+    field public static final int TEMPERATURE_CURRENT = 0; // 0x0
+    field public static final int TEMPERATURE_SHUTDOWN = 2; // 0x2
+    field public static final int TEMPERATURE_THROTTLING = 1; // 0x1
+    field public static final int TEMPERATURE_THROTTLING_BELOW_VR_MIN = 3; // 0x3
+    field public static final float UNDEFINED_TEMPERATURE = -3.4028235E38f;
+  }
+
+  public interface IBinder {
+    method public void dump(@NonNull java.io.FileDescriptor, @Nullable String[]) throws android.os.RemoteException;
+    method public void dumpAsync(@NonNull java.io.FileDescriptor, @Nullable String[]) throws android.os.RemoteException;
+    method @Nullable public String getInterfaceDescriptor() throws android.os.RemoteException;
+    method public static int getSuggestedMaxIpcSizeBytes();
+    method public boolean isBinderAlive();
+    method public void linkToDeath(@NonNull android.os.IBinder.DeathRecipient, int) throws android.os.RemoteException;
+    method public boolean pingBinder();
+    method @Nullable public android.os.IInterface queryLocalInterface(@NonNull String);
+    method public boolean transact(int, @NonNull android.os.Parcel, @Nullable android.os.Parcel, int) throws android.os.RemoteException;
+    method public boolean unlinkToDeath(@NonNull android.os.IBinder.DeathRecipient, int);
+    field public static final int DUMP_TRANSACTION = 1598311760; // 0x5f444d50
+    field public static final int FIRST_CALL_TRANSACTION = 1; // 0x1
+    field public static final int FLAG_ONEWAY = 1; // 0x1
+    field public static final int INTERFACE_TRANSACTION = 1598968902; // 0x5f4e5446
+    field public static final int LAST_CALL_TRANSACTION = 16777215; // 0xffffff
+    field public static final int LIKE_TRANSACTION = 1598835019; // 0x5f4c494b
+    field public static final int PING_TRANSACTION = 1599098439; // 0x5f504e47
+    field public static final int TWEET_TRANSACTION = 1599362900; // 0x5f545754
+  }
+
+  public static interface IBinder.DeathRecipient {
+    method public void binderDied();
+  }
+
+  public interface IInterface {
+    method public android.os.IBinder asBinder();
+  }
+
+  public class LimitExceededException extends java.lang.IllegalStateException {
+    ctor public LimitExceededException();
+    ctor public LimitExceededException(@NonNull String);
+  }
+
+  public final class LocaleList implements android.os.Parcelable {
+    ctor public LocaleList(@NonNull java.util.Locale...);
+    method public int describeContents();
+    method @NonNull public static android.os.LocaleList forLanguageTags(@Nullable String);
+    method public java.util.Locale get(int);
+    method @NonNull @Size(min=1) public static android.os.LocaleList getAdjustedDefault();
+    method @NonNull @Size(min=1) public static android.os.LocaleList getDefault();
+    method @NonNull public static android.os.LocaleList getEmptyLocaleList();
+    method @Nullable public java.util.Locale getFirstMatch(String[]);
+    method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale);
+    method public boolean isEmpty();
+    method public static boolean isPseudoLocale(@Nullable android.icu.util.ULocale);
+    method public static void setDefault(@NonNull @Size(min=1) android.os.LocaleList);
+    method @IntRange(from=0) public int size();
+    method @NonNull public String toLanguageTags();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.LocaleList> CREATOR;
+  }
+
+  public final class Looper {
+    method public void dump(@NonNull android.util.Printer, @NonNull String);
+    method public static android.os.Looper getMainLooper();
+    method @NonNull public android.os.MessageQueue getQueue();
+    method @NonNull public Thread getThread();
+    method public boolean isCurrentThread();
+    method public static void loop();
+    method @Nullable public static android.os.Looper myLooper();
+    method @NonNull public static android.os.MessageQueue myQueue();
+    method public static void prepare();
+    method @Deprecated public static void prepareMainLooper();
+    method public void quit();
+    method public void quitSafely();
+    method public void setMessageLogging(@Nullable android.util.Printer);
+  }
+
+  public class MemoryFile {
+    ctor public MemoryFile(String, int) throws java.io.IOException;
+    method @Deprecated public boolean allowPurging(boolean) throws java.io.IOException;
+    method public void close();
+    method public java.io.InputStream getInputStream();
+    method public java.io.OutputStream getOutputStream();
+    method @Deprecated public boolean isPurgingAllowed();
+    method public int length();
+    method public int readBytes(byte[], int, int, int) throws java.io.IOException;
+    method public void writeBytes(byte[], int, int, int) throws java.io.IOException;
+  }
+
+  public final class Message implements android.os.Parcelable {
+    ctor public Message();
+    method public void copyFrom(android.os.Message);
+    method public int describeContents();
+    method public Runnable getCallback();
+    method public android.os.Bundle getData();
+    method public android.os.Handler getTarget();
+    method public long getWhen();
+    method public boolean isAsynchronous();
+    method public static android.os.Message obtain();
+    method public static android.os.Message obtain(android.os.Message);
+    method public static android.os.Message obtain(android.os.Handler);
+    method public static android.os.Message obtain(android.os.Handler, Runnable);
+    method public static android.os.Message obtain(android.os.Handler, int);
+    method public static android.os.Message obtain(android.os.Handler, int, Object);
+    method public static android.os.Message obtain(android.os.Handler, int, int, int);
+    method public static android.os.Message obtain(android.os.Handler, int, int, int, Object);
+    method public android.os.Bundle peekData();
+    method public void recycle();
+    method public void sendToTarget();
+    method public void setAsynchronous(boolean);
+    method public void setData(android.os.Bundle);
+    method public void setTarget(android.os.Handler);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Message> CREATOR;
+    field public int arg1;
+    field public int arg2;
+    field public Object obj;
+    field public android.os.Messenger replyTo;
+    field public int sendingUid;
+    field public int what;
+  }
+
+  public final class MessageQueue {
+    method public void addIdleHandler(@NonNull android.os.MessageQueue.IdleHandler);
+    method public void addOnFileDescriptorEventListener(@NonNull java.io.FileDescriptor, int, @NonNull android.os.MessageQueue.OnFileDescriptorEventListener);
+    method public boolean isIdle();
+    method public void removeIdleHandler(@NonNull android.os.MessageQueue.IdleHandler);
+    method public void removeOnFileDescriptorEventListener(@NonNull java.io.FileDescriptor);
+  }
+
+  public static interface MessageQueue.IdleHandler {
+    method public boolean queueIdle();
+  }
+
+  public static interface MessageQueue.OnFileDescriptorEventListener {
+    method public int onFileDescriptorEvents(@NonNull java.io.FileDescriptor, int);
+    field public static final int EVENT_ERROR = 4; // 0x4
+    field public static final int EVENT_INPUT = 1; // 0x1
+    field public static final int EVENT_OUTPUT = 2; // 0x2
+  }
+
+  public final class Messenger implements android.os.Parcelable {
+    ctor public Messenger(android.os.Handler);
+    ctor public Messenger(android.os.IBinder);
+    method public int describeContents();
+    method public android.os.IBinder getBinder();
+    method public static android.os.Messenger readMessengerOrNullFromParcel(android.os.Parcel);
+    method public void send(android.os.Message) throws android.os.RemoteException;
+    method public static void writeMessengerOrNullToParcel(android.os.Messenger, android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Messenger> CREATOR;
+  }
+
+  public class NetworkOnMainThreadException extends java.lang.RuntimeException {
+    ctor public NetworkOnMainThreadException();
+  }
+
+  public class OperationCanceledException extends java.lang.RuntimeException {
+    ctor public OperationCanceledException();
+    ctor public OperationCanceledException(String);
+  }
+
+  public interface OutcomeReceiver<R, E extends java.lang.Throwable> {
+    method public default void onError(@NonNull E);
+    method public void onResult(@NonNull R);
+  }
+
+  public final class Parcel {
+    method public void appendFrom(android.os.Parcel, int, int);
+    method @Nullable public android.os.IBinder[] createBinderArray();
+    method @Nullable public java.util.ArrayList<android.os.IBinder> createBinderArrayList();
+    method @Nullable public boolean[] createBooleanArray();
+    method @Nullable public byte[] createByteArray();
+    method @Nullable public char[] createCharArray();
+    method @Nullable public double[] createDoubleArray();
+    method @Nullable public float[] createFloatArray();
+    method @Nullable public int[] createIntArray();
+    method @Nullable public long[] createLongArray();
+    method @Nullable public String[] createStringArray();
+    method @Nullable public java.util.ArrayList<java.lang.String> createStringArrayList();
+    method @Nullable public <T> T[] createTypedArray(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T> java.util.ArrayList<T> createTypedArrayList(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T extends android.os.Parcelable> android.util.ArrayMap<java.lang.String,T> createTypedArrayMap(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T extends android.os.Parcelable> android.util.SparseArray<T> createTypedSparseArray(@NonNull android.os.Parcelable.Creator<T>);
+    method public int dataAvail();
+    method public int dataCapacity();
+    method public int dataPosition();
+    method public int dataSize();
+    method public void enforceInterface(@NonNull String);
+    method public boolean hasFileDescriptors();
+    method public byte[] marshall();
+    method @NonNull public static android.os.Parcel obtain();
+    method @Nullable public Object[] readArray(@Nullable ClassLoader);
+    method @Nullable public java.util.ArrayList readArrayList(@Nullable ClassLoader);
+    method public void readBinderArray(@NonNull android.os.IBinder[]);
+    method public void readBinderList(@NonNull java.util.List<android.os.IBinder>);
+    method public boolean readBoolean();
+    method public void readBooleanArray(@NonNull boolean[]);
+    method @Nullable public android.os.Bundle readBundle();
+    method @Nullable public android.os.Bundle readBundle(@Nullable ClassLoader);
+    method public byte readByte();
+    method public void readByteArray(@NonNull byte[]);
+    method public void readCharArray(@NonNull char[]);
+    method public double readDouble();
+    method public void readDoubleArray(@NonNull double[]);
+    method public void readException();
+    method public void readException(int, String);
+    method public android.os.ParcelFileDescriptor readFileDescriptor();
+    method public float readFloat();
+    method public void readFloatArray(@NonNull float[]);
+    method @Nullable public java.util.HashMap readHashMap(@Nullable ClassLoader);
+    method public int readInt();
+    method public void readIntArray(@NonNull int[]);
+    method public void readList(@NonNull java.util.List, @Nullable ClassLoader);
+    method public long readLong();
+    method public void readLongArray(@NonNull long[]);
+    method public void readMap(@NonNull java.util.Map, @Nullable ClassLoader);
+    method @Nullable public <T extends android.os.Parcelable> T readParcelable(@Nullable ClassLoader);
+    method @Nullable public android.os.Parcelable[] readParcelableArray(@Nullable ClassLoader);
+    method @Nullable public android.os.Parcelable.Creator<?> readParcelableCreator(@Nullable ClassLoader);
+    method @NonNull public <T extends android.os.Parcelable> java.util.List<T> readParcelableList(@NonNull java.util.List<T>, @Nullable ClassLoader);
+    method @Nullable public android.os.PersistableBundle readPersistableBundle();
+    method @Nullable public android.os.PersistableBundle readPersistableBundle(@Nullable ClassLoader);
+    method @Nullable public java.io.Serializable readSerializable();
+    method @NonNull public android.util.Size readSize();
+    method @NonNull public android.util.SizeF readSizeF();
+    method @Nullable public <T> android.util.SparseArray<T> readSparseArray(@Nullable ClassLoader);
+    method @Nullable public android.util.SparseBooleanArray readSparseBooleanArray();
+    method @Nullable public String readString();
+    method public void readStringArray(@NonNull String[]);
+    method public void readStringList(@NonNull java.util.List<java.lang.String>);
+    method public android.os.IBinder readStrongBinder();
+    method public <T> void readTypedArray(@NonNull T[], @NonNull android.os.Parcelable.Creator<T>);
+    method public <T> void readTypedList(@NonNull java.util.List<T>, @NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T> T readTypedObject(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public Object readValue(@Nullable ClassLoader);
+    method public void recycle();
+    method public void setDataCapacity(int);
+    method public void setDataPosition(int);
+    method public void setDataSize(int);
+    method public void unmarshall(@NonNull byte[], int, int);
+    method public void writeArray(@Nullable Object[]);
+    method public void writeBinderArray(@Nullable android.os.IBinder[]);
+    method public void writeBinderList(@Nullable java.util.List<android.os.IBinder>);
+    method public void writeBoolean(boolean);
+    method public void writeBooleanArray(@Nullable boolean[]);
+    method public void writeBundle(@Nullable android.os.Bundle);
+    method public void writeByte(byte);
+    method public void writeByteArray(@Nullable byte[]);
+    method public void writeByteArray(@Nullable byte[], int, int);
+    method public void writeCharArray(@Nullable char[]);
+    method public void writeDouble(double);
+    method public void writeDoubleArray(@Nullable double[]);
+    method public void writeException(@NonNull Exception);
+    method public void writeFileDescriptor(@NonNull java.io.FileDescriptor);
+    method public void writeFloat(float);
+    method public void writeFloatArray(@Nullable float[]);
+    method public void writeInt(int);
+    method public void writeIntArray(@Nullable int[]);
+    method public void writeInterfaceToken(@NonNull String);
+    method public void writeList(@Nullable java.util.List);
+    method public void writeLong(long);
+    method public void writeLongArray(@Nullable long[]);
+    method public void writeMap(@Nullable java.util.Map);
+    method public void writeNoException();
+    method public void writeParcelable(@Nullable android.os.Parcelable, int);
+    method public <T extends android.os.Parcelable> void writeParcelableArray(@Nullable T[], int);
+    method public void writeParcelableCreator(@NonNull android.os.Parcelable);
+    method public <T extends android.os.Parcelable> void writeParcelableList(@Nullable java.util.List<T>, int);
+    method public void writePersistableBundle(@Nullable android.os.PersistableBundle);
+    method public void writeSerializable(@Nullable java.io.Serializable);
+    method public void writeSize(@NonNull android.util.Size);
+    method public void writeSizeF(@NonNull android.util.SizeF);
+    method public <T> void writeSparseArray(@Nullable android.util.SparseArray<T>);
+    method public void writeSparseBooleanArray(@Nullable android.util.SparseBooleanArray);
+    method public void writeString(@Nullable String);
+    method public void writeStringArray(@Nullable String[]);
+    method public void writeStringList(@Nullable java.util.List<java.lang.String>);
+    method public void writeStrongBinder(android.os.IBinder);
+    method public void writeStrongInterface(android.os.IInterface);
+    method public <T extends android.os.Parcelable> void writeTypedArray(@Nullable T[], int);
+    method public <T extends android.os.Parcelable> void writeTypedArrayMap(@Nullable android.util.ArrayMap<java.lang.String,T>, int);
+    method public <T extends android.os.Parcelable> void writeTypedList(@Nullable java.util.List<T>);
+    method public <T extends android.os.Parcelable> void writeTypedObject(@Nullable T, int);
+    method public <T extends android.os.Parcelable> void writeTypedSparseArray(@Nullable android.util.SparseArray<T>, int);
+    method public void writeValue(@Nullable Object);
+    field public static final android.os.Parcelable.Creator<java.lang.String> STRING_CREATOR;
+  }
+
+  public class ParcelFileDescriptor implements java.io.Closeable android.os.Parcelable {
+    ctor public ParcelFileDescriptor(android.os.ParcelFileDescriptor);
+    method public static android.os.ParcelFileDescriptor adoptFd(int);
+    method public boolean canDetectErrors();
+    method public void checkError() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void closeWithError(String) throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createPipe() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createReliablePipe() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createReliableSocketPair() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createSocketPair() throws java.io.IOException;
+    method public int describeContents();
+    method public int detachFd();
+    method public static android.os.ParcelFileDescriptor dup(java.io.FileDescriptor) throws java.io.IOException;
+    method public android.os.ParcelFileDescriptor dup() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor fromDatagramSocket(java.net.DatagramSocket);
+    method public static android.os.ParcelFileDescriptor fromFd(int) throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor fromSocket(java.net.Socket);
+    method public int getFd();
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public long getStatSize();
+    method public static android.os.ParcelFileDescriptor open(java.io.File, int) throws java.io.FileNotFoundException;
+    method public static android.os.ParcelFileDescriptor open(java.io.File, int, android.os.Handler, android.os.ParcelFileDescriptor.OnCloseListener) throws java.io.IOException;
+    method public static int parseMode(String);
+    method @NonNull public static android.os.ParcelFileDescriptor wrap(@NonNull android.os.ParcelFileDescriptor, @NonNull android.os.Handler, @NonNull android.os.ParcelFileDescriptor.OnCloseListener) throws java.io.IOException;
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelFileDescriptor> CREATOR;
+    field public static final int MODE_APPEND = 33554432; // 0x2000000
+    field public static final int MODE_CREATE = 134217728; // 0x8000000
+    field public static final int MODE_READ_ONLY = 268435456; // 0x10000000
+    field public static final int MODE_READ_WRITE = 805306368; // 0x30000000
+    field public static final int MODE_TRUNCATE = 67108864; // 0x4000000
+    field @Deprecated public static final int MODE_WORLD_READABLE = 1; // 0x1
+    field @Deprecated public static final int MODE_WORLD_WRITEABLE = 2; // 0x2
+    field public static final int MODE_WRITE_ONLY = 536870912; // 0x20000000
+  }
+
+  public static class ParcelFileDescriptor.AutoCloseInputStream extends java.io.FileInputStream {
+    ctor public ParcelFileDescriptor.AutoCloseInputStream(android.os.ParcelFileDescriptor);
+  }
+
+  public static class ParcelFileDescriptor.AutoCloseOutputStream extends java.io.FileOutputStream {
+    ctor public ParcelFileDescriptor.AutoCloseOutputStream(android.os.ParcelFileDescriptor);
+  }
+
+  public static class ParcelFileDescriptor.FileDescriptorDetachedException extends java.io.IOException {
+    ctor public ParcelFileDescriptor.FileDescriptorDetachedException();
+  }
+
+  public static interface ParcelFileDescriptor.OnCloseListener {
+    method public void onClose(java.io.IOException);
+  }
+
+  public class ParcelFormatException extends java.lang.RuntimeException {
+    ctor public ParcelFormatException();
+    ctor public ParcelFormatException(String);
+  }
+
+  public final class ParcelUuid implements android.os.Parcelable {
+    ctor public ParcelUuid(java.util.UUID);
+    method public int describeContents();
+    method public static android.os.ParcelUuid fromString(String);
+    method public java.util.UUID getUuid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelUuid> CREATOR;
+  }
+
+  public interface Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONTENTS_FILE_DESCRIPTOR = 1; // 0x1
+    field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1
+  }
+
+  public static interface Parcelable.ClassLoaderCreator<T> extends android.os.Parcelable.Creator<T> {
+    method public T createFromParcel(android.os.Parcel, ClassLoader);
+  }
+
+  public static interface Parcelable.Creator<T> {
+    method public T createFromParcel(android.os.Parcel);
+    method public T[] newArray(int);
+  }
+
+  public class PatternMatcher implements android.os.Parcelable {
+    ctor public PatternMatcher(String, int);
+    ctor public PatternMatcher(android.os.Parcel);
+    method public int describeContents();
+    method public final String getPath();
+    method public final int getType();
+    method public boolean match(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.PatternMatcher> CREATOR;
+    field public static final int PATTERN_ADVANCED_GLOB = 3; // 0x3
+    field public static final int PATTERN_LITERAL = 0; // 0x0
+    field public static final int PATTERN_PREFIX = 1; // 0x1
+    field public static final int PATTERN_SIMPLE_GLOB = 2; // 0x2
+    field public static final int PATTERN_SUFFIX = 4; // 0x4
+  }
+
+  public final class PerformanceHintManager {
+    method @Nullable public android.os.PerformanceHintManager.Session createHintSession(@NonNull int[], long);
+    method public long getPreferredUpdateRateNanos();
+  }
+
+  public static class PerformanceHintManager.Session implements java.io.Closeable {
+    method public void close();
+    method public void reportActualWorkDuration(long);
+    method public void updateTargetWorkDuration(long);
+  }
+
+  public final class PersistableBundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
+    ctor public PersistableBundle();
+    ctor public PersistableBundle(int);
+    ctor public PersistableBundle(android.os.PersistableBundle);
+    method public Object clone();
+    method public android.os.PersistableBundle deepCopy();
+    method public int describeContents();
+    method @Nullable public android.os.PersistableBundle getPersistableBundle(@Nullable String);
+    method public void putPersistableBundle(@Nullable String, @Nullable android.os.PersistableBundle);
+    method @NonNull public static android.os.PersistableBundle readFromStream(@NonNull java.io.InputStream) throws java.io.IOException;
+    method public void writeToParcel(android.os.Parcel, int);
+    method public void writeToStream(@NonNull java.io.OutputStream) throws java.io.IOException;
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
+    field public static final android.os.PersistableBundle EMPTY;
+  }
+
+  public final class PowerManager {
+    method public void addThermalStatusListener(@NonNull android.os.PowerManager.OnThermalStatusChangedListener);
+    method public void addThermalStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.PowerManager.OnThermalStatusChangedListener);
+    method @Nullable public java.time.Duration getBatteryDischargePrediction();
+    method public int getCurrentThermalStatus();
+    method public int getLocationPowerSaveMode();
+    method public float getThermalHeadroom(@IntRange(from=0, to=60) int);
+    method public boolean isBatteryDischargePredictionPersonalized();
+    method public boolean isDeviceIdleMode();
+    method public boolean isIgnoringBatteryOptimizations(String);
+    method public boolean isInteractive();
+    method public boolean isPowerSaveMode();
+    method public boolean isRebootingUserspaceSupported();
+    method @Deprecated public boolean isScreenOn();
+    method public boolean isSustainedPerformanceModeSupported();
+    method public boolean isWakeLockLevelSupported(int);
+    method public android.os.PowerManager.WakeLock newWakeLock(int, String);
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public void reboot(@Nullable String);
+    method public void removeThermalStatusListener(@NonNull android.os.PowerManager.OnThermalStatusChangedListener);
+    field public static final int ACQUIRE_CAUSES_WAKEUP = 268435456; // 0x10000000
+    field public static final String ACTION_DEVICE_IDLE_MODE_CHANGED = "android.os.action.DEVICE_IDLE_MODE_CHANGED";
+    field public static final String ACTION_POWER_SAVE_MODE_CHANGED = "android.os.action.POWER_SAVE_MODE_CHANGED";
+    field @Deprecated public static final int FULL_WAKE_LOCK = 26; // 0x1a
+    field public static final int LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF = 2; // 0x2
+    field public static final int LOCATION_MODE_FOREGROUND_ONLY = 3; // 0x3
+    field public static final int LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF = 1; // 0x1
+    field public static final int LOCATION_MODE_NO_CHANGE = 0; // 0x0
+    field public static final int LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF = 4; // 0x4
+    field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000
+    field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1
+    field public static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32; // 0x20
+    field public static final int RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY = 1; // 0x1
+    field @Deprecated public static final int SCREEN_BRIGHT_WAKE_LOCK = 10; // 0xa
+    field @Deprecated public static final int SCREEN_DIM_WAKE_LOCK = 6; // 0x6
+    field public static final int THERMAL_STATUS_CRITICAL = 4; // 0x4
+    field public static final int THERMAL_STATUS_EMERGENCY = 5; // 0x5
+    field public static final int THERMAL_STATUS_LIGHT = 1; // 0x1
+    field public static final int THERMAL_STATUS_MODERATE = 2; // 0x2
+    field public static final int THERMAL_STATUS_NONE = 0; // 0x0
+    field public static final int THERMAL_STATUS_SEVERE = 3; // 0x3
+    field public static final int THERMAL_STATUS_SHUTDOWN = 6; // 0x6
+  }
+
+  public static interface PowerManager.OnThermalStatusChangedListener {
+    method public void onThermalStatusChanged(int);
+  }
+
+  public final class PowerManager.WakeLock {
+    method public void acquire();
+    method public void acquire(long);
+    method public boolean isHeld();
+    method public void release();
+    method public void release(int);
+    method public void setReferenceCounted(boolean);
+    method public void setWorkSource(android.os.WorkSource);
+  }
+
+  public class Process {
+    ctor public Process();
+    method public static final long getElapsedCpuTime();
+    method public static final int[] getExclusiveCores();
+    method public static final int getGidForName(String);
+    method public static final long getStartElapsedRealtime();
+    method public static final long getStartUptimeMillis();
+    method public static final int getThreadPriority(int) throws java.lang.IllegalArgumentException;
+    method public static final int getUidForName(String);
+    method public static final boolean is64Bit();
+    method public static boolean isApplicationUid(int);
+    method public static final boolean isIsolated();
+    method public static final void killProcess(int);
+    method public static final int myPid();
+    method public static final int myTid();
+    method public static final int myUid();
+    method public static android.os.UserHandle myUserHandle();
+    method public static final void sendSignal(int, int);
+    method public static final void setThreadPriority(int, int) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method public static final void setThreadPriority(int) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method @Deprecated public static final boolean supportsProcesses();
+    field public static final int BLUETOOTH_UID = 1002; // 0x3ea
+    field public static final int FIRST_APPLICATION_UID = 10000; // 0x2710
+    field public static final int INVALID_UID = -1; // 0xffffffff
+    field public static final int LAST_APPLICATION_UID = 19999; // 0x4e1f
+    field public static final int PHONE_UID = 1001; // 0x3e9
+    field public static final int ROOT_UID = 0; // 0x0
+    field public static final int SHELL_UID = 2000; // 0x7d0
+    field public static final int SIGNAL_KILL = 9; // 0x9
+    field public static final int SIGNAL_QUIT = 3; // 0x3
+    field public static final int SIGNAL_USR1 = 10; // 0xa
+    field public static final int SYSTEM_UID = 1000; // 0x3e8
+    field public static final int THREAD_PRIORITY_AUDIO = -16; // 0xfffffff0
+    field public static final int THREAD_PRIORITY_BACKGROUND = 10; // 0xa
+    field public static final int THREAD_PRIORITY_DEFAULT = 0; // 0x0
+    field public static final int THREAD_PRIORITY_DISPLAY = -4; // 0xfffffffc
+    field public static final int THREAD_PRIORITY_FOREGROUND = -2; // 0xfffffffe
+    field public static final int THREAD_PRIORITY_LESS_FAVORABLE = 1; // 0x1
+    field public static final int THREAD_PRIORITY_LOWEST = 19; // 0x13
+    field public static final int THREAD_PRIORITY_MORE_FAVORABLE = -1; // 0xffffffff
+    field public static final int THREAD_PRIORITY_URGENT_AUDIO = -19; // 0xffffffed
+    field public static final int THREAD_PRIORITY_URGENT_DISPLAY = -8; // 0xfffffff8
+    field public static final int THREAD_PRIORITY_VIDEO = -10; // 0xfffffff6
+    field public static final int WIFI_UID = 1010; // 0x3f2
+  }
+
+  public abstract class ProxyFileDescriptorCallback {
+    ctor public ProxyFileDescriptorCallback();
+    method public void onFsync() throws android.system.ErrnoException;
+    method public long onGetSize() throws android.system.ErrnoException;
+    method public int onRead(long, int, byte[]) throws android.system.ErrnoException;
+    method public abstract void onRelease();
+    method public int onWrite(long, int, byte[]) throws android.system.ErrnoException;
+  }
+
+  public class RecoverySystem {
+    method @RequiresPermission("android.permission.RECOVERY") public static void installPackage(android.content.Context, java.io.File) throws java.io.IOException;
+    method public static void rebootWipeCache(android.content.Context) throws java.io.IOException;
+    method public static void rebootWipeUserData(android.content.Context) throws java.io.IOException;
+    method public static void verifyPackage(java.io.File, android.os.RecoverySystem.ProgressListener, java.io.File) throws java.security.GeneralSecurityException, java.io.IOException;
+  }
+
+  public static interface RecoverySystem.ProgressListener {
+    method public void onProgress(int);
+  }
+
+  public class RemoteCallbackList<E extends android.os.IInterface> {
+    ctor public RemoteCallbackList();
+    method public int beginBroadcast();
+    method public void finishBroadcast();
+    method public Object getBroadcastCookie(int);
+    method public E getBroadcastItem(int);
+    method public Object getRegisteredCallbackCookie(int);
+    method public int getRegisteredCallbackCount();
+    method public E getRegisteredCallbackItem(int);
+    method public void kill();
+    method public void onCallbackDied(E);
+    method public void onCallbackDied(E, Object);
+    method public boolean register(E);
+    method public boolean register(E, Object);
+    method public boolean unregister(E);
+  }
+
+  public class RemoteException extends android.util.AndroidException {
+    ctor public RemoteException();
+    ctor public RemoteException(String);
+    method @NonNull public RuntimeException rethrowAsRuntimeException();
+    method @NonNull public RuntimeException rethrowFromSystemServer();
+  }
+
+  public class ResultReceiver implements android.os.Parcelable {
+    ctor public ResultReceiver(android.os.Handler);
+    method public int describeContents();
+    method protected void onReceiveResult(int, android.os.Bundle);
+    method public void send(int, android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ResultReceiver> CREATOR;
+  }
+
+  public final class SharedMemory implements java.io.Closeable android.os.Parcelable {
+    method public void close();
+    method @NonNull public static android.os.SharedMemory create(@Nullable String, int) throws android.system.ErrnoException;
+    method public int describeContents();
+    method public int getSize();
+    method @NonNull public java.nio.ByteBuffer map(int, int, int) throws android.system.ErrnoException;
+    method @NonNull public java.nio.ByteBuffer mapReadOnly() throws android.system.ErrnoException;
+    method @NonNull public java.nio.ByteBuffer mapReadWrite() throws android.system.ErrnoException;
+    method public boolean setProtect(int);
+    method public static void unmap(@NonNull java.nio.ByteBuffer);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.SharedMemory> CREATOR;
+  }
+
+  public class StatFs {
+    ctor public StatFs(String);
+    method @Deprecated public int getAvailableBlocks();
+    method public long getAvailableBlocksLong();
+    method public long getAvailableBytes();
+    method @Deprecated public int getBlockCount();
+    method public long getBlockCountLong();
+    method @Deprecated public int getBlockSize();
+    method public long getBlockSizeLong();
+    method @Deprecated public int getFreeBlocks();
+    method public long getFreeBlocksLong();
+    method public long getFreeBytes();
+    method public long getTotalBytes();
+    method public void restat(String);
+  }
+
+  public final class StrictMode {
+    method public static android.os.StrictMode.ThreadPolicy allowThreadDiskReads();
+    method public static android.os.StrictMode.ThreadPolicy allowThreadDiskWrites();
+    method public static void enableDefaults();
+    method public static android.os.StrictMode.ThreadPolicy getThreadPolicy();
+    method public static android.os.StrictMode.VmPolicy getVmPolicy();
+    method public static void noteSlowCall(String);
+    method public static void setThreadPolicy(android.os.StrictMode.ThreadPolicy);
+    method public static void setVmPolicy(android.os.StrictMode.VmPolicy);
+  }
+
+  public static interface StrictMode.OnThreadViolationListener {
+    method public void onThreadViolation(android.os.strictmode.Violation);
+  }
+
+  public static interface StrictMode.OnVmViolationListener {
+    method public void onVmViolation(android.os.strictmode.Violation);
+  }
+
+  public static final class StrictMode.ThreadPolicy {
+    field public static final android.os.StrictMode.ThreadPolicy LAX;
+  }
+
+  public static final class StrictMode.ThreadPolicy.Builder {
+    ctor public StrictMode.ThreadPolicy.Builder();
+    ctor public StrictMode.ThreadPolicy.Builder(android.os.StrictMode.ThreadPolicy);
+    method public android.os.StrictMode.ThreadPolicy build();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectAll();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectCustomSlowCalls();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskReads();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDropBox();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyFlashScreen();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnThreadViolationListener);
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyLog();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitAll();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitCustomSlowCalls();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskReads();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
+  }
+
+  public static final class StrictMode.VmPolicy {
+    field public static final android.os.StrictMode.VmPolicy LAX;
+  }
+
+  public static final class StrictMode.VmPolicy.Builder {
+    ctor public StrictMode.VmPolicy.Builder();
+    ctor public StrictMode.VmPolicy.Builder(android.os.StrictMode.VmPolicy);
+    method public android.os.StrictMode.VmPolicy build();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectActivityLeaks();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectAll();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCleartextNetwork();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectContentUriWithoutPermission();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCredentialProtectedWhileLocked();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectFileUriExposure();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectImplicitDirectBoot();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectIncorrectContextUse();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectNonSdkApiUsage();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectUnsafeIntentLaunch();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDropBox();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnVmViolationListener);
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyLog();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder permitNonSdkApiUsage();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder permitUnsafeIntentLaunch();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder setClassInstanceLimit(Class, int);
+  }
+
+  public final class SystemClock {
+    method @NonNull public static java.time.Clock currentGnssTimeClock();
+    method public static long currentThreadTimeMillis();
+    method public static long elapsedRealtime();
+    method public static long elapsedRealtimeNanos();
+    method public static boolean setCurrentTimeMillis(long);
+    method public static void sleep(long);
+    method public static long uptimeMillis();
+  }
+
+  public class TestLooperManager {
+    method public void execute(android.os.Message);
+    method public android.os.MessageQueue getMessageQueue();
+    method public boolean hasMessages(android.os.Handler, Object, int);
+    method public boolean hasMessages(android.os.Handler, Object, Runnable);
+    method public android.os.Message next();
+    method public void recycle(android.os.Message);
+    method public void release();
+  }
+
+  public abstract class TokenWatcher {
+    ctor public TokenWatcher(android.os.Handler, String);
+    method public void acquire(android.os.IBinder, String);
+    method public abstract void acquired();
+    method public void cleanup(android.os.IBinder, boolean);
+    method public void dump();
+    method public void dump(java.io.PrintWriter);
+    method public boolean isAcquired();
+    method public void release(android.os.IBinder);
+    method public abstract void released();
+  }
+
+  public final class Trace {
+    method public static void beginAsyncSection(@NonNull String, int);
+    method public static void beginSection(@NonNull String);
+    method public static void endAsyncSection(@NonNull String, int);
+    method public static void endSection();
+    method public static boolean isEnabled();
+    method public static void setCounter(@NonNull String, long);
+  }
+
+  public class TransactionTooLargeException extends android.os.RemoteException {
+    ctor public TransactionTooLargeException();
+    ctor public TransactionTooLargeException(String);
+  }
+
+  public final class UserHandle implements android.os.Parcelable {
+    ctor public UserHandle(android.os.Parcel);
+    method public int describeContents();
+    method public static android.os.UserHandle getUserHandleForUid(int);
+    method public static android.os.UserHandle readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    method public static void writeToParcel(android.os.UserHandle, android.os.Parcel);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.UserHandle> CREATOR;
+  }
+
+  public class UserManager {
+    method public static android.content.Intent createUserCreationIntent(@Nullable String, @Nullable String, @Nullable String, @Nullable android.os.PersistableBundle);
+    method @WorkerThread public android.os.Bundle getApplicationRestrictions(String);
+    method public long getSerialNumberForUser(android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.CREATE_USERS"}) public int getUserCount();
+    method public long getUserCreationTime(android.os.UserHandle);
+    method public android.os.UserHandle getUserForSerialNumber(long);
+    method @NonNull @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED, "android.permission.CREATE_USERS"}, conditional=true) public String getUserName();
+    method public java.util.List<android.os.UserHandle> getUserProfiles();
+    method public android.os.Bundle getUserRestrictions();
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public android.os.Bundle getUserRestrictions(android.os.UserHandle);
+    method public boolean hasUserRestriction(String);
+    method public boolean isDemoUser();
+    method public static boolean isHeadlessSystemUserMode();
+    method public boolean isManagedProfile();
+    method public boolean isQuietModeEnabled(android.os.UserHandle);
+    method public boolean isSystemUser();
+    method public boolean isUserAGoat();
+    method public boolean isUserForeground();
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserRunning(android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserRunningOrStopping(android.os.UserHandle);
+    method public boolean isUserUnlocked();
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserUnlocked(android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.MODIFY_QUIET_MODE"}, conditional=true) public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle);
+    method public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle, int);
+    method @Deprecated public boolean setRestrictionsChallenge(String);
+    method @Deprecated @RequiresPermission("android.permission.MANAGE_USERS") public void setUserRestriction(String, boolean);
+    method @Deprecated public void setUserRestrictions(android.os.Bundle);
+    method @Deprecated public void setUserRestrictions(android.os.Bundle, android.os.UserHandle);
+    method public static boolean supportsMultipleUsers();
+    field public static final String ALLOW_PARENT_PROFILE_APP_LINKING = "allow_parent_profile_app_linking";
+    field @Deprecated public static final String DISALLOW_ADD_MANAGED_PROFILE = "no_add_managed_profile";
+    field public static final String DISALLOW_ADD_USER = "no_add_user";
+    field public static final String DISALLOW_ADJUST_VOLUME = "no_adjust_volume";
+    field public static final String DISALLOW_AIRPLANE_MODE = "no_airplane_mode";
+    field public static final String DISALLOW_AMBIENT_DISPLAY = "no_ambient_display";
+    field public static final String DISALLOW_APPS_CONTROL = "no_control_apps";
+    field public static final String DISALLOW_AUTOFILL = "no_autofill";
+    field public static final String DISALLOW_BLUETOOTH = "no_bluetooth";
+    field public static final String DISALLOW_BLUETOOTH_SHARING = "no_bluetooth_sharing";
+    field public static final String DISALLOW_CAMERA_TOGGLE = "disallow_camera_toggle";
+    field public static final String DISALLOW_CONFIG_BLUETOOTH = "no_config_bluetooth";
+    field public static final String DISALLOW_CONFIG_BRIGHTNESS = "no_config_brightness";
+    field public static final String DISALLOW_CONFIG_CELL_BROADCASTS = "no_config_cell_broadcasts";
+    field public static final String DISALLOW_CONFIG_CREDENTIALS = "no_config_credentials";
+    field public static final String DISALLOW_CONFIG_DATE_TIME = "no_config_date_time";
+    field public static final String DISALLOW_CONFIG_LOCALE = "no_config_locale";
+    field public static final String DISALLOW_CONFIG_LOCATION = "no_config_location";
+    field public static final String DISALLOW_CONFIG_MOBILE_NETWORKS = "no_config_mobile_networks";
+    field public static final String DISALLOW_CONFIG_PRIVATE_DNS = "disallow_config_private_dns";
+    field public static final String DISALLOW_CONFIG_SCREEN_TIMEOUT = "no_config_screen_timeout";
+    field public static final String DISALLOW_CONFIG_TETHERING = "no_config_tethering";
+    field public static final String DISALLOW_CONFIG_VPN = "no_config_vpn";
+    field public static final String DISALLOW_CONFIG_WIFI = "no_config_wifi";
+    field public static final String DISALLOW_CONTENT_CAPTURE = "no_content_capture";
+    field public static final String DISALLOW_CONTENT_SUGGESTIONS = "no_content_suggestions";
+    field public static final String DISALLOW_CREATE_WINDOWS = "no_create_windows";
+    field public static final String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste";
+    field public static final String DISALLOW_DATA_ROAMING = "no_data_roaming";
+    field public static final String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features";
+    field public static final String DISALLOW_FACTORY_RESET = "no_factory_reset";
+    field public static final String DISALLOW_FUN = "no_fun";
+    field public static final String DISALLOW_INSTALL_APPS = "no_install_apps";
+    field public static final String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources";
+    field public static final String DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY = "no_install_unknown_sources_globally";
+    field public static final String DISALLOW_MICROPHONE_TOGGLE = "disallow_microphone_toggle";
+    field public static final String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts";
+    field public static final String DISALLOW_MOUNT_PHYSICAL_MEDIA = "no_physical_media";
+    field public static final String DISALLOW_NETWORK_RESET = "no_network_reset";
+    field public static final String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam";
+    field public static final String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls";
+    field public static final String DISALLOW_PRINTING = "no_printing";
+    field @Deprecated public static final String DISALLOW_REMOVE_MANAGED_PROFILE = "no_remove_managed_profile";
+    field public static final String DISALLOW_REMOVE_USER = "no_remove_user";
+    field public static final String DISALLOW_SAFE_BOOT = "no_safe_boot";
+    field public static final String DISALLOW_SET_USER_ICON = "no_set_user_icon";
+    field public static final String DISALLOW_SET_WALLPAPER = "no_set_wallpaper";
+    field public static final String DISALLOW_SHARE_INTO_MANAGED_PROFILE = "no_sharing_into_profile";
+    field public static final String DISALLOW_SHARE_LOCATION = "no_share_location";
+    field public static final String DISALLOW_SMS = "no_sms";
+    field public static final String DISALLOW_SYSTEM_ERROR_DIALOGS = "no_system_error_dialogs";
+    field public static final String DISALLOW_UNIFIED_PASSWORD = "no_unified_password";
+    field public static final String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps";
+    field public static final String DISALLOW_UNMUTE_MICROPHONE = "no_unmute_microphone";
+    field public static final String DISALLOW_USB_FILE_TRANSFER = "no_usb_file_transfer";
+    field public static final String DISALLOW_USER_SWITCH = "no_user_switch";
+    field public static final String ENSURE_VERIFY_APPS = "ensure_verify_apps";
+    field public static final String KEY_RESTRICTIONS_PENDING = "restrictions_pending";
+    field public static final int QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED = 1; // 0x1
+    field public static final int USER_CREATION_FAILED_NOT_PERMITTED = 1; // 0x1
+    field public static final int USER_CREATION_FAILED_NO_MORE_USERS = 2; // 0x2
+    field public static final int USER_OPERATION_ERROR_CURRENT_USER = 4; // 0x4
+    field public static final int USER_OPERATION_ERROR_LOW_STORAGE = 5; // 0x5
+    field public static final int USER_OPERATION_ERROR_MANAGED_PROFILE = 2; // 0x2
+    field public static final int USER_OPERATION_ERROR_MAX_RUNNING_USERS = 3; // 0x3
+    field public static final int USER_OPERATION_ERROR_MAX_USERS = 6; // 0x6
+    field public static final int USER_OPERATION_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int USER_OPERATION_SUCCESS = 0; // 0x0
+  }
+
+  public static class UserManager.UserOperationException extends java.lang.RuntimeException {
+    method public int getUserOperationResult();
+  }
+
+  public final class VibrationAttributes implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getFlags();
+    method public int getUsage();
+    method public int getUsageClass();
+    method public boolean isFlagSet(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationAttributes> CREATOR;
+    field public static final int FLAG_BYPASS_INTERRUPTION_POLICY = 1; // 0x1
+    field public static final int USAGE_ALARM = 17; // 0x11
+    field public static final int USAGE_CLASS_ALARM = 1; // 0x1
+    field public static final int USAGE_CLASS_FEEDBACK = 2; // 0x2
+    field public static final int USAGE_CLASS_MASK = 15; // 0xf
+    field public static final int USAGE_CLASS_UNKNOWN = 0; // 0x0
+    field public static final int USAGE_COMMUNICATION_REQUEST = 65; // 0x41
+    field public static final int USAGE_HARDWARE_FEEDBACK = 50; // 0x32
+    field public static final int USAGE_NOTIFICATION = 49; // 0x31
+    field public static final int USAGE_PHYSICAL_EMULATION = 34; // 0x22
+    field public static final int USAGE_RINGTONE = 33; // 0x21
+    field public static final int USAGE_TOUCH = 18; // 0x12
+    field public static final int USAGE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class VibrationAttributes.Builder {
+    ctor public VibrationAttributes.Builder();
+    ctor public VibrationAttributes.Builder(@Nullable android.os.VibrationAttributes);
+    method @NonNull public android.os.VibrationAttributes build();
+    method @NonNull public android.os.VibrationAttributes.Builder setFlags(int, int);
+    method @NonNull public android.os.VibrationAttributes.Builder setUsage(int);
+  }
+
+  public abstract class VibrationEffect implements android.os.Parcelable {
+    method public static android.os.VibrationEffect createOneShot(long, int);
+    method @NonNull public static android.os.VibrationEffect createPredefined(int);
+    method public static android.os.VibrationEffect createWaveform(long[], int);
+    method public static android.os.VibrationEffect createWaveform(long[], int[], int);
+    method public int describeContents();
+    method @NonNull public static android.os.VibrationEffect.Composition startComposition();
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect> CREATOR;
+    field public static final int DEFAULT_AMPLITUDE = -1; // 0xffffffff
+    field public static final int EFFECT_CLICK = 0; // 0x0
+    field public static final int EFFECT_DOUBLE_CLICK = 1; // 0x1
+    field public static final int EFFECT_HEAVY_CLICK = 5; // 0x5
+    field public static final int EFFECT_TICK = 2; // 0x2
+  }
+
+  public static final class VibrationEffect.Composition {
+    method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int);
+    method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int, @FloatRange(from=0.0f, to=1.0f) float);
+    method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int, @FloatRange(from=0.0f, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect compose();
+    field public static final int PRIMITIVE_CLICK = 1; // 0x1
+    field public static final int PRIMITIVE_LOW_TICK = 8; // 0x8
+    field public static final int PRIMITIVE_QUICK_FALL = 6; // 0x6
+    field public static final int PRIMITIVE_QUICK_RISE = 4; // 0x4
+    field public static final int PRIMITIVE_SLOW_RISE = 5; // 0x5
+    field public static final int PRIMITIVE_SPIN = 3; // 0x3
+    field public static final int PRIMITIVE_THUD = 2; // 0x2
+    field public static final int PRIMITIVE_TICK = 7; // 0x7
+  }
+
+  public abstract class Vibrator {
+    method public final int areAllEffectsSupported(@NonNull int...);
+    method public final boolean areAllPrimitivesSupported(@NonNull int...);
+    method @NonNull public int[] areEffectsSupported(@NonNull int...);
+    method @NonNull public boolean[] arePrimitivesSupported(@NonNull int...);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public abstract void cancel();
+    method public int getId();
+    method @NonNull public int[] getPrimitiveDurations(@NonNull int...);
+    method public abstract boolean hasAmplitudeControl();
+    method public abstract boolean hasVibrator();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long, android.media.AudioAttributes);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long[], int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long[], int, android.media.AudioAttributes);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(android.os.VibrationEffect);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(android.os.VibrationEffect, android.media.AudioAttributes);
+    field public static final int VIBRATION_EFFECT_SUPPORT_NO = 2; // 0x2
+    field public static final int VIBRATION_EFFECT_SUPPORT_UNKNOWN = 0; // 0x0
+    field public static final int VIBRATION_EFFECT_SUPPORT_YES = 1; // 0x1
+  }
+
+  public abstract class VibratorManager {
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public abstract void cancel();
+    method @NonNull public abstract android.os.Vibrator getDefaultVibrator();
+    method @NonNull public abstract android.os.Vibrator getVibrator(int);
+    method @NonNull public abstract int[] getVibratorIds();
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public final void vibrate(@NonNull android.os.CombinedVibration);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public final void vibrate(@NonNull android.os.CombinedVibration, @Nullable android.os.VibrationAttributes);
+  }
+
+  public class WorkSource implements android.os.Parcelable {
+    ctor public WorkSource();
+    ctor public WorkSource(android.os.WorkSource);
+    method public boolean add(android.os.WorkSource);
+    method public void clear();
+    method public int describeContents();
+    method public boolean diff(android.os.WorkSource);
+    method public boolean remove(android.os.WorkSource);
+    method public void set(android.os.WorkSource);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.WorkSource> CREATOR;
+  }
+
+}
+
+package android.os.health {
+
+  public class HealthStats {
+    method public String getDataType();
+    method public long getMeasurement(int);
+    method public int getMeasurementKeyAt(int);
+    method public int getMeasurementKeyCount();
+    method public java.util.Map<java.lang.String,java.lang.Long> getMeasurements(int);
+    method public int getMeasurementsKeyAt(int);
+    method public int getMeasurementsKeyCount();
+    method public java.util.Map<java.lang.String,android.os.health.HealthStats> getStats(int);
+    method public int getStatsKeyAt(int);
+    method public int getStatsKeyCount();
+    method public android.os.health.TimerStat getTimer(int);
+    method public int getTimerCount(int);
+    method public int getTimerKeyAt(int);
+    method public int getTimerKeyCount();
+    method public long getTimerTime(int);
+    method public java.util.Map<java.lang.String,android.os.health.TimerStat> getTimers(int);
+    method public int getTimersKeyAt(int);
+    method public int getTimersKeyCount();
+    method public boolean hasMeasurement(int);
+    method public boolean hasMeasurements(int);
+    method public boolean hasStats(int);
+    method public boolean hasTimer(int);
+    method public boolean hasTimers(int);
+  }
+
+  public final class PackageHealthStats {
+    field public static final int MEASUREMENTS_WAKEUP_ALARMS_COUNT = 40002; // 0x9c42
+    field public static final int STATS_SERVICES = 40001; // 0x9c41
+  }
+
+  public final class PidHealthStats {
+    field public static final int MEASUREMENT_WAKE_NESTING_COUNT = 20001; // 0x4e21
+    field public static final int MEASUREMENT_WAKE_START_MS = 20003; // 0x4e23
+    field public static final int MEASUREMENT_WAKE_SUM_MS = 20002; // 0x4e22
+  }
+
+  public final class ProcessHealthStats {
+    field public static final int MEASUREMENT_ANR_COUNT = 30005; // 0x7535
+    field public static final int MEASUREMENT_CRASHES_COUNT = 30004; // 0x7534
+    field public static final int MEASUREMENT_FOREGROUND_MS = 30006; // 0x7536
+    field public static final int MEASUREMENT_STARTS_COUNT = 30003; // 0x7533
+    field public static final int MEASUREMENT_SYSTEM_TIME_MS = 30002; // 0x7532
+    field public static final int MEASUREMENT_USER_TIME_MS = 30001; // 0x7531
+  }
+
+  public final class ServiceHealthStats {
+    field public static final int MEASUREMENT_LAUNCH_COUNT = 50002; // 0xc352
+    field public static final int MEASUREMENT_START_SERVICE_COUNT = 50001; // 0xc351
+  }
+
+  public class SystemHealthManager {
+    method public android.os.health.HealthStats takeMyUidSnapshot();
+    method public android.os.health.HealthStats takeUidSnapshot(int);
+    method public android.os.health.HealthStats[] takeUidSnapshots(int[]);
+  }
+
+  public final class TimerStat implements android.os.Parcelable {
+    ctor public TimerStat();
+    ctor public TimerStat(int, long);
+    ctor public TimerStat(android.os.Parcel);
+    method public int describeContents();
+    method public int getCount();
+    method public long getTime();
+    method public void setCount(int);
+    method public void setTime(long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.health.TimerStat> CREATOR;
+  }
+
+  public final class UidHealthStats {
+    field public static final int MEASUREMENT_BLUETOOTH_IDLE_MS = 10020; // 0x2724
+    field public static final int MEASUREMENT_BLUETOOTH_POWER_MAMS = 10023; // 0x2727
+    field public static final int MEASUREMENT_BLUETOOTH_RX_BYTES = 10052; // 0x2744
+    field public static final int MEASUREMENT_BLUETOOTH_RX_MS = 10021; // 0x2725
+    field public static final int MEASUREMENT_BLUETOOTH_RX_PACKETS = 10058; // 0x274a
+    field public static final int MEASUREMENT_BLUETOOTH_TX_BYTES = 10053; // 0x2745
+    field public static final int MEASUREMENT_BLUETOOTH_TX_MS = 10022; // 0x2726
+    field public static final int MEASUREMENT_BLUETOOTH_TX_PACKETS = 10059; // 0x274b
+    field public static final int MEASUREMENT_BUTTON_USER_ACTIVITY_COUNT = 10046; // 0x273e
+    field @Deprecated public static final int MEASUREMENT_CPU_POWER_MAMS = 10064; // 0x2750
+    field public static final int MEASUREMENT_MOBILE_IDLE_MS = 10024; // 0x2728
+    field public static final int MEASUREMENT_MOBILE_POWER_MAMS = 10027; // 0x272b
+    field public static final int MEASUREMENT_MOBILE_RX_BYTES = 10048; // 0x2740
+    field public static final int MEASUREMENT_MOBILE_RX_MS = 10025; // 0x2729
+    field public static final int MEASUREMENT_MOBILE_RX_PACKETS = 10054; // 0x2746
+    field public static final int MEASUREMENT_MOBILE_TX_BYTES = 10049; // 0x2741
+    field public static final int MEASUREMENT_MOBILE_TX_MS = 10026; // 0x272a
+    field public static final int MEASUREMENT_MOBILE_TX_PACKETS = 10055; // 0x2747
+    field public static final int MEASUREMENT_OTHER_USER_ACTIVITY_COUNT = 10045; // 0x273d
+    field public static final int MEASUREMENT_REALTIME_BATTERY_MS = 10001; // 0x2711
+    field public static final int MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS = 10003; // 0x2713
+    field public static final int MEASUREMENT_SYSTEM_CPU_TIME_MS = 10063; // 0x274f
+    field public static final int MEASUREMENT_TOUCH_USER_ACTIVITY_COUNT = 10047; // 0x273f
+    field public static final int MEASUREMENT_UPTIME_BATTERY_MS = 10002; // 0x2712
+    field public static final int MEASUREMENT_UPTIME_SCREEN_OFF_BATTERY_MS = 10004; // 0x2714
+    field public static final int MEASUREMENT_USER_CPU_TIME_MS = 10062; // 0x274e
+    field public static final int MEASUREMENT_WIFI_FULL_LOCK_MS = 10029; // 0x272d
+    field public static final int MEASUREMENT_WIFI_IDLE_MS = 10016; // 0x2720
+    field public static final int MEASUREMENT_WIFI_MULTICAST_MS = 10031; // 0x272f
+    field public static final int MEASUREMENT_WIFI_POWER_MAMS = 10019; // 0x2723
+    field public static final int MEASUREMENT_WIFI_RUNNING_MS = 10028; // 0x272c
+    field public static final int MEASUREMENT_WIFI_RX_BYTES = 10050; // 0x2742
+    field public static final int MEASUREMENT_WIFI_RX_MS = 10017; // 0x2721
+    field public static final int MEASUREMENT_WIFI_RX_PACKETS = 10056; // 0x2748
+    field public static final int MEASUREMENT_WIFI_TX_BYTES = 10051; // 0x2743
+    field public static final int MEASUREMENT_WIFI_TX_MS = 10018; // 0x2722
+    field public static final int MEASUREMENT_WIFI_TX_PACKETS = 10057; // 0x2749
+    field public static final int STATS_PACKAGES = 10015; // 0x271f
+    field public static final int STATS_PIDS = 10013; // 0x271d
+    field public static final int STATS_PROCESSES = 10014; // 0x271e
+    field public static final int TIMERS_JOBS = 10010; // 0x271a
+    field public static final int TIMERS_SENSORS = 10012; // 0x271c
+    field public static final int TIMERS_SYNCS = 10009; // 0x2719
+    field public static final int TIMERS_WAKELOCKS_DRAW = 10008; // 0x2718
+    field public static final int TIMERS_WAKELOCKS_FULL = 10005; // 0x2715
+    field public static final int TIMERS_WAKELOCKS_PARTIAL = 10006; // 0x2716
+    field public static final int TIMERS_WAKELOCKS_WINDOW = 10007; // 0x2717
+    field public static final int TIMER_AUDIO = 10032; // 0x2730
+    field public static final int TIMER_BLUETOOTH_SCAN = 10037; // 0x2735
+    field public static final int TIMER_CAMERA = 10035; // 0x2733
+    field public static final int TIMER_FLASHLIGHT = 10034; // 0x2732
+    field public static final int TIMER_FOREGROUND_ACTIVITY = 10036; // 0x2734
+    field public static final int TIMER_GPS_SENSOR = 10011; // 0x271b
+    field public static final int TIMER_MOBILE_RADIO_ACTIVE = 10061; // 0x274d
+    field public static final int TIMER_PROCESS_STATE_BACKGROUND_MS = 10042; // 0x273a
+    field public static final int TIMER_PROCESS_STATE_CACHED_MS = 10043; // 0x273b
+    field public static final int TIMER_PROCESS_STATE_FOREGROUND_MS = 10041; // 0x2739
+    field public static final int TIMER_PROCESS_STATE_FOREGROUND_SERVICE_MS = 10039; // 0x2737
+    field public static final int TIMER_PROCESS_STATE_TOP_MS = 10038; // 0x2736
+    field public static final int TIMER_PROCESS_STATE_TOP_SLEEPING_MS = 10040; // 0x2738
+    field public static final int TIMER_VIBRATOR = 10044; // 0x273c
+    field public static final int TIMER_VIDEO = 10033; // 0x2731
+    field public static final int TIMER_WIFI_SCAN = 10030; // 0x272e
+  }
+
+}
+
+package android.os.storage {
+
+  public abstract class OnObbStateChangeListener {
+    ctor public OnObbStateChangeListener();
+    method public void onObbStateChange(String, int);
+    field public static final int ERROR_ALREADY_MOUNTED = 24; // 0x18
+    field public static final int ERROR_COULD_NOT_MOUNT = 21; // 0x15
+    field public static final int ERROR_COULD_NOT_UNMOUNT = 22; // 0x16
+    field public static final int ERROR_INTERNAL = 20; // 0x14
+    field public static final int ERROR_NOT_MOUNTED = 23; // 0x17
+    field public static final int ERROR_PERMISSION_DENIED = 25; // 0x19
+    field public static final int MOUNTED = 1; // 0x1
+    field public static final int UNMOUNTED = 2; // 0x2
+  }
+
+  public class StorageManager {
+    method @WorkerThread public void allocateBytes(@NonNull java.util.UUID, long) throws java.io.IOException;
+    method @WorkerThread public void allocateBytes(java.io.FileDescriptor, long) throws java.io.IOException;
+    method @WorkerThread public long getAllocatableBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @WorkerThread public long getCacheQuotaBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @WorkerThread public long getCacheSizeBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE) public android.app.PendingIntent getManageSpaceActivityIntent(@NonNull String, int);
+    method public String getMountedObbPath(String);
+    method @NonNull public android.os.storage.StorageVolume getPrimaryStorageVolume();
+    method @NonNull public java.util.List<android.os.storage.StorageVolume> getRecentStorageVolumes();
+    method @Nullable public android.os.storage.StorageVolume getStorageVolume(@NonNull java.io.File);
+    method @NonNull public android.os.storage.StorageVolume getStorageVolume(@NonNull android.net.Uri);
+    method @NonNull public java.util.List<android.os.storage.StorageVolume> getStorageVolumes();
+    method @NonNull public java.util.UUID getUuidForPath(@NonNull java.io.File) throws java.io.IOException;
+    method public boolean isAllocationSupported(@NonNull java.io.FileDescriptor);
+    method public boolean isCacheBehaviorGroup(java.io.File) throws java.io.IOException;
+    method public boolean isCacheBehaviorTombstone(java.io.File) throws java.io.IOException;
+    method public boolean isCheckpointSupported();
+    method public boolean isEncrypted(java.io.File);
+    method public boolean isObbMounted(String);
+    method public boolean mountObb(String, String, android.os.storage.OnObbStateChangeListener);
+    method @NonNull public android.os.ParcelFileDescriptor openProxyFileDescriptor(int, android.os.ProxyFileDescriptorCallback, android.os.Handler) throws java.io.IOException;
+    method public void registerStorageVolumeCallback(@NonNull java.util.concurrent.Executor, @NonNull android.os.storage.StorageManager.StorageVolumeCallback);
+    method public void setCacheBehaviorGroup(java.io.File, boolean) throws java.io.IOException;
+    method public void setCacheBehaviorTombstone(java.io.File, boolean) throws java.io.IOException;
+    method public boolean unmountObb(String, boolean, android.os.storage.OnObbStateChangeListener);
+    method public void unregisterStorageVolumeCallback(@NonNull android.os.storage.StorageManager.StorageVolumeCallback);
+    field @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE) public static final String ACTION_CLEAR_APP_CACHE = "android.os.storage.action.CLEAR_APP_CACHE";
+    field public static final String ACTION_MANAGE_STORAGE = "android.os.storage.action.MANAGE_STORAGE";
+    field public static final String EXTRA_REQUESTED_BYTES = "android.os.storage.extra.REQUESTED_BYTES";
+    field public static final String EXTRA_UUID = "android.os.storage.extra.UUID";
+    field public static final java.util.UUID UUID_DEFAULT;
+  }
+
+  public static class StorageManager.StorageVolumeCallback {
+    ctor public StorageManager.StorageVolumeCallback();
+    method public void onStateChanged(@NonNull android.os.storage.StorageVolume);
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method @Deprecated @Nullable public android.content.Intent createAccessIntent(String);
+    method @NonNull public android.content.Intent createOpenDocumentTreeIntent();
+    method public int describeContents();
+    method public String getDescription(android.content.Context);
+    method @Nullable public java.io.File getDirectory();
+    method @Nullable public String getMediaStoreVolumeName();
+    method public String getState();
+    method @Nullable public java.util.UUID getStorageUuid();
+    method @Nullable public String getUuid();
+    method public boolean isEmulated();
+    method public boolean isPrimary();
+    method public boolean isRemovable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.storage.StorageVolume> CREATOR;
+    field public static final String EXTRA_STORAGE_VOLUME = "android.os.storage.extra.STORAGE_VOLUME";
+  }
+
+}
+
+package android.os.strictmode {
+
+  public final class CleartextNetworkViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ContentUriWithoutPermissionViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class CredentialProtectedWhileLockedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class CustomViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class DiskReadViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class DiskWriteViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class FileUriExposedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ImplicitDirectBootViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class IncorrectContextUseViolation extends android.os.strictmode.Violation {
+    ctor public IncorrectContextUseViolation(@NonNull String, @NonNull Throwable);
+  }
+
+  public class InstanceCountViolation extends android.os.strictmode.Violation {
+    method public long getNumberOfInstances();
+  }
+
+  public final class IntentReceiverLeakedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class LeakedClosableViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class NetworkViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class NonSdkApiUsedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ResourceMismatchViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ServiceConnectionLeakedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class SqliteObjectLeakedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class UnbufferedIoViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class UnsafeIntentLaunchViolation extends android.os.strictmode.Violation {
+    ctor public UnsafeIntentLaunchViolation(@NonNull android.content.Intent);
+    method @Nullable public android.content.Intent getIntent();
+  }
+
+  public final class UntaggedSocketViolation extends android.os.strictmode.Violation {
+  }
+
+  public abstract class Violation extends java.lang.Throwable {
+  }
+
+  public final class WebViewMethodCalledOnWrongThreadViolation extends android.os.strictmode.Violation {
+  }
+
+}
+
+package android.preference {
+
+  @Deprecated public class CheckBoxPreference extends android.preference.TwoStatePreference {
+    ctor @Deprecated public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public CheckBoxPreference(android.content.Context);
+  }
+
+  @Deprecated public abstract class DialogPreference extends android.preference.Preference implements android.content.DialogInterface.OnClickListener android.content.DialogInterface.OnDismissListener android.preference.PreferenceManager.OnActivityDestroyListener {
+    ctor @Deprecated public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public DialogPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public DialogPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public DialogPreference(android.content.Context);
+    method @Deprecated public android.app.Dialog getDialog();
+    method @Deprecated public android.graphics.drawable.Drawable getDialogIcon();
+    method @Deprecated public int getDialogLayoutResource();
+    method @Deprecated public CharSequence getDialogMessage();
+    method @Deprecated public CharSequence getDialogTitle();
+    method @Deprecated public CharSequence getNegativeButtonText();
+    method @Deprecated public CharSequence getPositiveButtonText();
+    method @Deprecated public void onActivityDestroy();
+    method @Deprecated @CallSuper protected void onBindDialogView(android.view.View);
+    method @Deprecated public void onClick(android.content.DialogInterface, int);
+    method @Deprecated protected android.view.View onCreateDialogView();
+    method @Deprecated protected void onDialogClosed(boolean);
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method @Deprecated protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder);
+    method @Deprecated public void setDialogIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public void setDialogIcon(@DrawableRes int);
+    method @Deprecated public void setDialogLayoutResource(int);
+    method @Deprecated public void setDialogMessage(CharSequence);
+    method @Deprecated public void setDialogMessage(int);
+    method @Deprecated public void setDialogTitle(CharSequence);
+    method @Deprecated public void setDialogTitle(int);
+    method @Deprecated public void setNegativeButtonText(CharSequence);
+    method @Deprecated public void setNegativeButtonText(@StringRes int);
+    method @Deprecated public void setPositiveButtonText(CharSequence);
+    method @Deprecated public void setPositiveButtonText(@StringRes int);
+    method @Deprecated protected void showDialog(android.os.Bundle);
+  }
+
+  @Deprecated public class EditTextPreference extends android.preference.DialogPreference {
+    ctor @Deprecated public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public EditTextPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public EditTextPreference(android.content.Context);
+    method @Deprecated public android.widget.EditText getEditText();
+    method @Deprecated public String getText();
+    method @Deprecated protected void onAddEditTextToDialogView(android.view.View, android.widget.EditText);
+    method @Deprecated public void setText(String);
+  }
+
+  @Deprecated public class ListPreference extends android.preference.DialogPreference {
+    ctor @Deprecated public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public ListPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public ListPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public ListPreference(android.content.Context);
+    method @Deprecated public int findIndexOfValue(String);
+    method @Deprecated public CharSequence[] getEntries();
+    method @Deprecated public CharSequence getEntry();
+    method @Deprecated public CharSequence[] getEntryValues();
+    method @Deprecated public String getValue();
+    method @Deprecated public void setEntries(CharSequence[]);
+    method @Deprecated public void setEntries(@ArrayRes int);
+    method @Deprecated public void setEntryValues(CharSequence[]);
+    method @Deprecated public void setEntryValues(@ArrayRes int);
+    method @Deprecated public void setValue(String);
+    method @Deprecated public void setValueIndex(int);
+  }
+
+  @Deprecated public class MultiSelectListPreference extends android.preference.DialogPreference {
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context);
+    method @Deprecated public int findIndexOfValue(String);
+    method @Deprecated public CharSequence[] getEntries();
+    method @Deprecated public CharSequence[] getEntryValues();
+    method @Deprecated public java.util.Set<java.lang.String> getValues();
+    method @Deprecated public void setEntries(CharSequence[]);
+    method @Deprecated public void setEntries(@ArrayRes int);
+    method @Deprecated public void setEntryValues(CharSequence[]);
+    method @Deprecated public void setEntryValues(@ArrayRes int);
+    method @Deprecated public void setValues(java.util.Set<java.lang.String>);
+  }
+
+  @Deprecated public class Preference implements java.lang.Comparable<android.preference.Preference> {
+    ctor @Deprecated public Preference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public Preference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public Preference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public Preference(android.content.Context);
+    method @Deprecated protected boolean callChangeListener(Object);
+    method @Deprecated public int compareTo(android.preference.Preference);
+    method @Deprecated protected android.preference.Preference findPreferenceInHierarchy(String);
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated public String getDependency();
+    method @Deprecated public android.content.SharedPreferences.Editor getEditor();
+    method @Deprecated public android.os.Bundle getExtras();
+    method @Deprecated public String getFragment();
+    method @Deprecated public android.graphics.drawable.Drawable getIcon();
+    method @Deprecated public android.content.Intent getIntent();
+    method @Deprecated public String getKey();
+    method @Deprecated @LayoutRes public int getLayoutResource();
+    method @Deprecated public android.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
+    method @Deprecated public android.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
+    method @Deprecated public int getOrder();
+    method @Deprecated @Nullable public android.preference.PreferenceGroup getParent();
+    method @Deprecated protected boolean getPersistedBoolean(boolean);
+    method @Deprecated protected float getPersistedFloat(float);
+    method @Deprecated protected int getPersistedInt(int);
+    method @Deprecated protected long getPersistedLong(long);
+    method @Deprecated protected String getPersistedString(String);
+    method @Deprecated public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>);
+    method @Deprecated @Nullable public android.preference.PreferenceDataStore getPreferenceDataStore();
+    method @Deprecated public android.preference.PreferenceManager getPreferenceManager();
+    method @Deprecated public android.content.SharedPreferences getSharedPreferences();
+    method @Deprecated public boolean getShouldDisableView();
+    method @Deprecated public CharSequence getSummary();
+    method @Deprecated public CharSequence getTitle();
+    method @Deprecated @StringRes public int getTitleRes();
+    method @Deprecated public android.view.View getView(android.view.View, android.view.ViewGroup);
+    method @Deprecated @LayoutRes public int getWidgetLayoutResource();
+    method @Deprecated public boolean hasKey();
+    method @Deprecated public boolean isEnabled();
+    method @Deprecated public boolean isIconSpaceReserved();
+    method @Deprecated public boolean isPersistent();
+    method @Deprecated public boolean isRecycleEnabled();
+    method @Deprecated public boolean isSelectable();
+    method @Deprecated public boolean isSingleLineTitle();
+    method @Deprecated protected void notifyChanged();
+    method @Deprecated public void notifyDependencyChange(boolean);
+    method @Deprecated protected void notifyHierarchyChanged();
+    method @Deprecated protected void onAttachedToActivity();
+    method @Deprecated protected void onAttachedToHierarchy(android.preference.PreferenceManager);
+    method @Deprecated @CallSuper protected void onBindView(android.view.View);
+    method @Deprecated protected void onClick();
+    method @Deprecated @CallSuper protected android.view.View onCreateView(android.view.ViewGroup);
+    method @Deprecated public void onDependencyChanged(android.preference.Preference, boolean);
+    method @Deprecated protected Object onGetDefaultValue(android.content.res.TypedArray, int);
+    method @Deprecated public void onParentChanged(android.preference.Preference, boolean);
+    method @Deprecated @CallSuper protected void onPrepareForRemoval();
+    method @Deprecated protected void onRestoreInstanceState(android.os.Parcelable);
+    method @Deprecated protected android.os.Parcelable onSaveInstanceState();
+    method @Deprecated protected void onSetInitialValue(boolean, Object);
+    method @Deprecated public android.os.Bundle peekExtras();
+    method @Deprecated protected boolean persistBoolean(boolean);
+    method @Deprecated protected boolean persistFloat(float);
+    method @Deprecated protected boolean persistInt(int);
+    method @Deprecated protected boolean persistLong(long);
+    method @Deprecated protected boolean persistString(String);
+    method @Deprecated public boolean persistStringSet(java.util.Set<java.lang.String>);
+    method @Deprecated public void restoreHierarchyState(android.os.Bundle);
+    method @Deprecated public void saveHierarchyState(android.os.Bundle);
+    method @Deprecated public void setDefaultValue(Object);
+    method @Deprecated public void setDependency(String);
+    method @Deprecated public void setEnabled(boolean);
+    method @Deprecated public void setFragment(String);
+    method @Deprecated public void setIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public void setIcon(@DrawableRes int);
+    method @Deprecated public void setIconSpaceReserved(boolean);
+    method @Deprecated public void setIntent(android.content.Intent);
+    method @Deprecated public void setKey(String);
+    method @Deprecated public void setLayoutResource(@LayoutRes int);
+    method @Deprecated public void setOnPreferenceChangeListener(android.preference.Preference.OnPreferenceChangeListener);
+    method @Deprecated public void setOnPreferenceClickListener(android.preference.Preference.OnPreferenceClickListener);
+    method @Deprecated public void setOrder(int);
+    method @Deprecated public void setPersistent(boolean);
+    method @Deprecated public void setPreferenceDataStore(android.preference.PreferenceDataStore);
+    method @Deprecated @CallSuper public void setRecycleEnabled(boolean);
+    method @Deprecated public void setSelectable(boolean);
+    method @Deprecated public void setShouldDisableView(boolean);
+    method @Deprecated public void setSingleLineTitle(boolean);
+    method @Deprecated public void setSummary(CharSequence);
+    method @Deprecated public void setSummary(@StringRes int);
+    method @Deprecated public void setTitle(CharSequence);
+    method @Deprecated public void setTitle(@StringRes int);
+    method @Deprecated public void setWidgetLayoutResource(@LayoutRes int);
+    method @Deprecated public boolean shouldCommit();
+    method @Deprecated public boolean shouldDisableDependents();
+    method @Deprecated protected boolean shouldPersist();
+    field @Deprecated public static final int DEFAULT_ORDER = 2147483647; // 0x7fffffff
+  }
+
+  @Deprecated public static class Preference.BaseSavedState extends android.view.AbsSavedState {
+    ctor @Deprecated public Preference.BaseSavedState(android.os.Parcel);
+    ctor @Deprecated public Preference.BaseSavedState(android.os.Parcelable);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.preference.Preference.BaseSavedState> CREATOR;
+  }
+
+  @Deprecated public static interface Preference.OnPreferenceChangeListener {
+    method @Deprecated public boolean onPreferenceChange(android.preference.Preference, Object);
+  }
+
+  @Deprecated public static interface Preference.OnPreferenceClickListener {
+    method @Deprecated public boolean onPreferenceClick(android.preference.Preference);
+  }
+
+  @Deprecated public abstract class PreferenceActivity extends android.app.ListActivity implements android.preference.PreferenceFragment.OnPreferenceStartFragmentCallback {
+    ctor @Deprecated public PreferenceActivity();
+    method @Deprecated public void addPreferencesFromIntent(android.content.Intent);
+    method @Deprecated public void addPreferencesFromResource(int);
+    method @Deprecated public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public void finishPreferencePanel(android.app.Fragment, int, android.content.Intent);
+    method @Deprecated public android.preference.PreferenceManager getPreferenceManager();
+    method @Deprecated public android.preference.PreferenceScreen getPreferenceScreen();
+    method @Deprecated public boolean hasHeaders();
+    method @Deprecated public void invalidateHeaders();
+    method @Deprecated public boolean isMultiPane();
+    method @Deprecated protected boolean isValidFragment(String);
+    method @Deprecated public void loadHeadersFromResource(@XmlRes int, java.util.List<android.preference.PreferenceActivity.Header>);
+    method @Deprecated public void onBuildHeaders(java.util.List<android.preference.PreferenceActivity.Header>);
+    method @Deprecated public android.content.Intent onBuildStartFragmentIntent(String, android.os.Bundle, @StringRes int, int);
+    method @Deprecated public android.preference.PreferenceActivity.Header onGetInitialHeader();
+    method @Deprecated public android.preference.PreferenceActivity.Header onGetNewHeader();
+    method @Deprecated public void onHeaderClick(android.preference.PreferenceActivity.Header, int);
+    method @Deprecated public boolean onIsHidingHeaders();
+    method @Deprecated public boolean onIsMultiPane();
+    method @Deprecated public boolean onPreferenceStartFragment(android.preference.PreferenceFragment, android.preference.Preference);
+    method @Deprecated public boolean onPreferenceTreeClick(android.preference.PreferenceScreen, android.preference.Preference);
+    method @Deprecated public void setListFooter(android.view.View);
+    method @Deprecated public void setParentTitle(CharSequence, CharSequence, android.view.View.OnClickListener);
+    method @Deprecated public void setPreferenceScreen(android.preference.PreferenceScreen);
+    method @Deprecated public void showBreadCrumbs(CharSequence, CharSequence);
+    method @Deprecated public void startPreferenceFragment(android.app.Fragment, boolean);
+    method @Deprecated public void startPreferencePanel(String, android.os.Bundle, @StringRes int, CharSequence, android.app.Fragment, int);
+    method @Deprecated public void startWithFragment(String, android.os.Bundle, android.app.Fragment, int);
+    method @Deprecated public void startWithFragment(String, android.os.Bundle, android.app.Fragment, int, @StringRes int, @StringRes int);
+    method @Deprecated public void switchToHeader(String, android.os.Bundle);
+    method @Deprecated public void switchToHeader(android.preference.PreferenceActivity.Header);
+    field @Deprecated public static final String EXTRA_NO_HEADERS = ":android:no_headers";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT = ":android:show_fragment";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT_ARGUMENTS = ":android:show_fragment_args";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT_SHORT_TITLE = ":android:show_fragment_short_title";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT_TITLE = ":android:show_fragment_title";
+    field @Deprecated public static final long HEADER_ID_UNDEFINED = -1L; // 0xffffffffffffffffL
+  }
+
+  @Deprecated public static final class PreferenceActivity.Header implements android.os.Parcelable {
+    ctor @Deprecated public PreferenceActivity.Header();
+    method @Deprecated public int describeContents();
+    method @Deprecated public CharSequence getBreadCrumbShortTitle(android.content.res.Resources);
+    method @Deprecated public CharSequence getBreadCrumbTitle(android.content.res.Resources);
+    method @Deprecated public CharSequence getSummary(android.content.res.Resources);
+    method @Deprecated public CharSequence getTitle(android.content.res.Resources);
+    method @Deprecated public void readFromParcel(android.os.Parcel);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.preference.PreferenceActivity.Header> CREATOR;
+    field @Deprecated public CharSequence breadCrumbShortTitle;
+    field @Deprecated @StringRes public int breadCrumbShortTitleRes;
+    field @Deprecated public CharSequence breadCrumbTitle;
+    field @Deprecated @StringRes public int breadCrumbTitleRes;
+    field @Deprecated public android.os.Bundle extras;
+    field @Deprecated public String fragment;
+    field @Deprecated public android.os.Bundle fragmentArguments;
+    field @Deprecated public int iconRes;
+    field @Deprecated public long id;
+    field @Deprecated public android.content.Intent intent;
+    field @Deprecated public CharSequence summary;
+    field @Deprecated @StringRes public int summaryRes;
+    field @Deprecated public CharSequence title;
+    field @Deprecated @StringRes public int titleRes;
+  }
+
+  @Deprecated public class PreferenceCategory extends android.preference.PreferenceGroup {
+    ctor @Deprecated public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public PreferenceCategory(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public PreferenceCategory(android.content.Context);
+  }
+
+  @Deprecated public interface PreferenceDataStore {
+    method @Deprecated public default boolean getBoolean(String, boolean);
+    method @Deprecated public default float getFloat(String, float);
+    method @Deprecated public default int getInt(String, int);
+    method @Deprecated public default long getLong(String, long);
+    method @Deprecated @Nullable public default String getString(String, @Nullable String);
+    method @Deprecated @Nullable public default java.util.Set<java.lang.String> getStringSet(String, @Nullable java.util.Set<java.lang.String>);
+    method @Deprecated public default void putBoolean(String, boolean);
+    method @Deprecated public default void putFloat(String, float);
+    method @Deprecated public default void putInt(String, int);
+    method @Deprecated public default void putLong(String, long);
+    method @Deprecated public default void putString(String, @Nullable String);
+    method @Deprecated public default void putStringSet(String, @Nullable java.util.Set<java.lang.String>);
+  }
+
+  @Deprecated public abstract class PreferenceFragment extends android.app.Fragment {
+    ctor @Deprecated public PreferenceFragment();
+    method @Deprecated public void addPreferencesFromIntent(android.content.Intent);
+    method @Deprecated public void addPreferencesFromResource(@XmlRes int);
+    method @Deprecated public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public android.preference.PreferenceManager getPreferenceManager();
+    method @Deprecated public android.preference.PreferenceScreen getPreferenceScreen();
+    method @Deprecated public boolean onPreferenceTreeClick(android.preference.PreferenceScreen, android.preference.Preference);
+    method @Deprecated public void setPreferenceScreen(android.preference.PreferenceScreen);
+  }
+
+  @Deprecated public static interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+    method @Deprecated public boolean onPreferenceStartFragment(android.preference.PreferenceFragment, android.preference.Preference);
+  }
+
+  @Deprecated public abstract class PreferenceGroup extends android.preference.Preference {
+    ctor @Deprecated public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public PreferenceGroup(android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void addItemFromInflater(android.preference.Preference);
+    method @Deprecated public boolean addPreference(android.preference.Preference);
+    method @Deprecated protected void dispatchRestoreInstanceState(android.os.Bundle);
+    method @Deprecated protected void dispatchSaveInstanceState(android.os.Bundle);
+    method @Deprecated public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public android.preference.Preference getPreference(int);
+    method @Deprecated public int getPreferenceCount();
+    method @Deprecated protected boolean isOnSameScreenAsChildren();
+    method @Deprecated public boolean isOrderingAsAdded();
+    method @Deprecated protected boolean onPrepareAddPreference(android.preference.Preference);
+    method @Deprecated public void removeAll();
+    method @Deprecated public boolean removePreference(android.preference.Preference);
+    method @Deprecated public void setOrderingAsAdded(boolean);
+  }
+
+  @Deprecated public class PreferenceManager {
+    method @Deprecated public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
+    method @Deprecated @Nullable public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+    method @Deprecated public static String getDefaultSharedPreferencesName(android.content.Context);
+    method @Deprecated @Nullable public android.preference.PreferenceDataStore getPreferenceDataStore();
+    method @Deprecated public android.content.SharedPreferences getSharedPreferences();
+    method @Deprecated public int getSharedPreferencesMode();
+    method @Deprecated public String getSharedPreferencesName();
+    method @Deprecated public boolean isStorageDefault();
+    method @Deprecated public boolean isStorageDeviceProtected();
+    method @Deprecated public static void setDefaultValues(android.content.Context, @XmlRes int, boolean);
+    method @Deprecated public static void setDefaultValues(android.content.Context, String, int, int, boolean);
+    method @Deprecated public void setPreferenceDataStore(android.preference.PreferenceDataStore);
+    method @Deprecated public void setSharedPreferencesMode(int);
+    method @Deprecated public void setSharedPreferencesName(String);
+    method @Deprecated public void setStorageDefault();
+    method @Deprecated public void setStorageDeviceProtected();
+    field @Deprecated public static final String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+    field @Deprecated public static final String METADATA_KEY_PREFERENCES = "android.preference";
+  }
+
+  @Deprecated public static interface PreferenceManager.OnActivityDestroyListener {
+    method @Deprecated public void onActivityDestroy();
+  }
+
+  @Deprecated public static interface PreferenceManager.OnActivityResultListener {
+    method @Deprecated public boolean onActivityResult(int, int, android.content.Intent);
+  }
+
+  @Deprecated public static interface PreferenceManager.OnActivityStopListener {
+    method @Deprecated public void onActivityStop();
+  }
+
+  @Deprecated public final class PreferenceScreen extends android.preference.PreferenceGroup implements android.widget.AdapterView.OnItemClickListener android.content.DialogInterface.OnDismissListener {
+    method @Deprecated public void bind(android.widget.ListView);
+    method @Deprecated public android.app.Dialog getDialog();
+    method @Deprecated public android.widget.ListAdapter getRootAdapter();
+    method @Deprecated protected android.widget.ListAdapter onCreateRootAdapter();
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method @Deprecated public void onItemClick(android.widget.AdapterView, android.view.View, int, long);
+  }
+
+  @Deprecated public class RingtonePreference extends android.preference.Preference implements android.preference.PreferenceManager.OnActivityResultListener {
+    ctor @Deprecated public RingtonePreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public RingtonePreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public RingtonePreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public RingtonePreference(android.content.Context);
+    method @Deprecated public int getRingtoneType();
+    method @Deprecated public boolean getShowDefault();
+    method @Deprecated public boolean getShowSilent();
+    method @Deprecated public boolean onActivityResult(int, int, android.content.Intent);
+    method @Deprecated protected void onPrepareRingtonePickerIntent(android.content.Intent);
+    method @Deprecated protected android.net.Uri onRestoreRingtone();
+    method @Deprecated protected void onSaveRingtone(android.net.Uri);
+    method @Deprecated public void setRingtoneType(int);
+    method @Deprecated public void setShowDefault(boolean);
+    method @Deprecated public void setShowSilent(boolean);
+  }
+
+  @Deprecated public class SwitchPreference extends android.preference.TwoStatePreference {
+    ctor @Deprecated public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public SwitchPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public SwitchPreference(android.content.Context);
+    method @Deprecated public CharSequence getSwitchTextOff();
+    method @Deprecated public CharSequence getSwitchTextOn();
+    method @Deprecated public void setSwitchTextOff(CharSequence);
+    method @Deprecated public void setSwitchTextOff(@StringRes int);
+    method @Deprecated public void setSwitchTextOn(CharSequence);
+    method @Deprecated public void setSwitchTextOn(@StringRes int);
+  }
+
+  @Deprecated public abstract class TwoStatePreference extends android.preference.Preference {
+    ctor @Deprecated public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TwoStatePreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TwoStatePreference(android.content.Context);
+    method @Deprecated public boolean getDisableDependentsState();
+    method @Deprecated public CharSequence getSummaryOff();
+    method @Deprecated public CharSequence getSummaryOn();
+    method @Deprecated public boolean isChecked();
+    method @Deprecated public void setChecked(boolean);
+    method @Deprecated public void setDisableDependentsState(boolean);
+    method @Deprecated public void setSummaryOff(CharSequence);
+    method @Deprecated public void setSummaryOff(@StringRes int);
+    method @Deprecated public void setSummaryOn(CharSequence);
+    method @Deprecated public void setSummaryOn(@StringRes int);
+  }
+
+}
+
+package android.print {
+
+  public final class PageRange implements android.os.Parcelable {
+    ctor public PageRange(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int describeContents();
+    method @IntRange(from=0) public int getEnd();
+    method @IntRange(from=0) public int getStart();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.print.PageRange ALL_PAGES;
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PageRange> CREATOR;
+  }
+
+  public final class PrintAttributes implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public int getColorMode();
+    method @IntRange(from=0) public int getDuplexMode();
+    method @Nullable public android.print.PrintAttributes.MediaSize getMediaSize();
+    method @Nullable public android.print.PrintAttributes.Margins getMinMargins();
+    method @Nullable public android.print.PrintAttributes.Resolution getResolution();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int COLOR_MODE_COLOR = 2; // 0x2
+    field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintAttributes> CREATOR;
+    field public static final int DUPLEX_MODE_LONG_EDGE = 2; // 0x2
+    field public static final int DUPLEX_MODE_NONE = 1; // 0x1
+    field public static final int DUPLEX_MODE_SHORT_EDGE = 4; // 0x4
+  }
+
+  public static final class PrintAttributes.Builder {
+    ctor public PrintAttributes.Builder();
+    method @NonNull public android.print.PrintAttributes build();
+    method @NonNull public android.print.PrintAttributes.Builder setColorMode(int);
+    method @NonNull public android.print.PrintAttributes.Builder setDuplexMode(int);
+    method @NonNull public android.print.PrintAttributes.Builder setMediaSize(@NonNull android.print.PrintAttributes.MediaSize);
+    method @NonNull public android.print.PrintAttributes.Builder setMinMargins(@NonNull android.print.PrintAttributes.Margins);
+    method @NonNull public android.print.PrintAttributes.Builder setResolution(@NonNull android.print.PrintAttributes.Resolution);
+  }
+
+  public static final class PrintAttributes.Margins {
+    ctor public PrintAttributes.Margins(int, int, int, int);
+    method public int getBottomMils();
+    method public int getLeftMils();
+    method public int getRightMils();
+    method public int getTopMils();
+    field public static final android.print.PrintAttributes.Margins NO_MARGINS;
+  }
+
+  public static final class PrintAttributes.MediaSize {
+    ctor public PrintAttributes.MediaSize(@NonNull String, @NonNull String, @IntRange(from=1) int, @IntRange(from=1) int);
+    method @NonNull public android.print.PrintAttributes.MediaSize asLandscape();
+    method @NonNull public android.print.PrintAttributes.MediaSize asPortrait();
+    method @IntRange(from=1) public int getHeightMils();
+    method @NonNull public String getId();
+    method @NonNull public String getLabel(@NonNull android.content.pm.PackageManager);
+    method @IntRange(from=1) public int getWidthMils();
+    method public boolean isPortrait();
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_C;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_D;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_E;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_F;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A0;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A1;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A10;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A2;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A3;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A4;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A5;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A6;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A7;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A8;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A9;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B0;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B1;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B10;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B2;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B3;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B4;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B5;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B6;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B7;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B8;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B9;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C0;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C1;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C10;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C2;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C3;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C4;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C5;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C6;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C7;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C8;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C9;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B0;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B1;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B10;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B2;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B3;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B4;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B5;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B6;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B7;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B8;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B9;
+    field public static final android.print.PrintAttributes.MediaSize JIS_EXEC;
+    field public static final android.print.PrintAttributes.MediaSize JPN_CHOU2;
+    field public static final android.print.PrintAttributes.MediaSize JPN_CHOU3;
+    field public static final android.print.PrintAttributes.MediaSize JPN_CHOU4;
+    field public static final android.print.PrintAttributes.MediaSize JPN_HAGAKI;
+    field public static final android.print.PrintAttributes.MediaSize JPN_KAHU;
+    field public static final android.print.PrintAttributes.MediaSize JPN_KAKU2;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize JPN_OE_PHOTO_L;
+    field public static final android.print.PrintAttributes.MediaSize JPN_OUFUKU;
+    field public static final android.print.PrintAttributes.MediaSize JPN_YOU4;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_A;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_B;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_C;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_D;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_E;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_E1;
+    field public static final android.print.PrintAttributes.MediaSize NA_FOOLSCAP;
+    field public static final android.print.PrintAttributes.MediaSize NA_GOVT_LETTER;
+    field public static final android.print.PrintAttributes.MediaSize NA_INDEX_3X5;
+    field public static final android.print.PrintAttributes.MediaSize NA_INDEX_4X6;
+    field public static final android.print.PrintAttributes.MediaSize NA_INDEX_5X8;
+    field public static final android.print.PrintAttributes.MediaSize NA_JUNIOR_LEGAL;
+    field public static final android.print.PrintAttributes.MediaSize NA_LEDGER;
+    field public static final android.print.PrintAttributes.MediaSize NA_LEGAL;
+    field public static final android.print.PrintAttributes.MediaSize NA_LETTER;
+    field public static final android.print.PrintAttributes.MediaSize NA_MONARCH;
+    field public static final android.print.PrintAttributes.MediaSize NA_QUARTO;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_SUPER_B;
+    field public static final android.print.PrintAttributes.MediaSize NA_TABLOID;
+    field public static final android.print.PrintAttributes.MediaSize OM_DAI_PA_KAI;
+    field public static final android.print.PrintAttributes.MediaSize OM_JUURO_KU_KAI;
+    field public static final android.print.PrintAttributes.MediaSize OM_PA_KAI;
+    field public static final android.print.PrintAttributes.MediaSize PRC_1;
+    field public static final android.print.PrintAttributes.MediaSize PRC_10;
+    field public static final android.print.PrintAttributes.MediaSize PRC_16K;
+    field public static final android.print.PrintAttributes.MediaSize PRC_2;
+    field public static final android.print.PrintAttributes.MediaSize PRC_3;
+    field public static final android.print.PrintAttributes.MediaSize PRC_4;
+    field public static final android.print.PrintAttributes.MediaSize PRC_5;
+    field public static final android.print.PrintAttributes.MediaSize PRC_6;
+    field public static final android.print.PrintAttributes.MediaSize PRC_7;
+    field public static final android.print.PrintAttributes.MediaSize PRC_8;
+    field public static final android.print.PrintAttributes.MediaSize PRC_9;
+    field public static final android.print.PrintAttributes.MediaSize ROC_16K;
+    field public static final android.print.PrintAttributes.MediaSize ROC_8K;
+    field public static final android.print.PrintAttributes.MediaSize UNKNOWN_LANDSCAPE;
+    field public static final android.print.PrintAttributes.MediaSize UNKNOWN_PORTRAIT;
+  }
+
+  public static final class PrintAttributes.Resolution {
+    ctor public PrintAttributes.Resolution(@NonNull String, @NonNull String, @IntRange(from=1) int, @IntRange(from=1) int);
+    method @IntRange(from=1) public int getHorizontalDpi();
+    method @NonNull public String getId();
+    method @NonNull public String getLabel();
+    method @IntRange(from=1) public int getVerticalDpi();
+  }
+
+  public abstract class PrintDocumentAdapter {
+    ctor public PrintDocumentAdapter();
+    method public void onFinish();
+    method public abstract void onLayout(android.print.PrintAttributes, android.print.PrintAttributes, android.os.CancellationSignal, android.print.PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle);
+    method public void onStart();
+    method public abstract void onWrite(android.print.PageRange[], android.os.ParcelFileDescriptor, android.os.CancellationSignal, android.print.PrintDocumentAdapter.WriteResultCallback);
+    field public static final String EXTRA_PRINT_PREVIEW = "EXTRA_PRINT_PREVIEW";
+  }
+
+  public abstract static class PrintDocumentAdapter.LayoutResultCallback {
+    method public void onLayoutCancelled();
+    method public void onLayoutFailed(CharSequence);
+    method public void onLayoutFinished(android.print.PrintDocumentInfo, boolean);
+  }
+
+  public abstract static class PrintDocumentAdapter.WriteResultCallback {
+    method public void onWriteCancelled();
+    method public void onWriteFailed(CharSequence);
+    method public void onWriteFinished(android.print.PageRange[]);
+  }
+
+  public final class PrintDocumentInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getContentType();
+    method @IntRange(from=0) public long getDataSize();
+    method @NonNull public String getName();
+    method @IntRange(from=0xffffffff) public int getPageCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONTENT_TYPE_DOCUMENT = 0; // 0x0
+    field public static final int CONTENT_TYPE_PHOTO = 1; // 0x1
+    field public static final int CONTENT_TYPE_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintDocumentInfo> CREATOR;
+    field public static final int PAGE_COUNT_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class PrintDocumentInfo.Builder {
+    ctor public PrintDocumentInfo.Builder(@NonNull String);
+    method @NonNull public android.print.PrintDocumentInfo build();
+    method @NonNull public android.print.PrintDocumentInfo.Builder setContentType(int);
+    method @NonNull public android.print.PrintDocumentInfo.Builder setPageCount(@IntRange(from=0xffffffff) int);
+  }
+
+  public final class PrintJob {
+    method public void cancel();
+    method @Nullable public android.print.PrintJobId getId();
+    method @NonNull public android.print.PrintJobInfo getInfo();
+    method public boolean isBlocked();
+    method public boolean isCancelled();
+    method public boolean isCompleted();
+    method public boolean isFailed();
+    method public boolean isQueued();
+    method public boolean isStarted();
+    method public void restart();
+  }
+
+  public final class PrintJobId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintJobId> CREATOR;
+  }
+
+  public final class PrintJobInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAdvancedIntOption(String);
+    method public String getAdvancedStringOption(String);
+    method @NonNull public android.print.PrintAttributes getAttributes();
+    method @IntRange(from=0) public int getCopies();
+    method public long getCreationTime();
+    method @Nullable public android.print.PrintJobId getId();
+    method @NonNull public String getLabel();
+    method @Nullable public android.print.PageRange[] getPages();
+    method @Nullable public android.print.PrinterId getPrinterId();
+    method public int getState();
+    method public boolean hasAdvancedOption(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintJobInfo> CREATOR;
+    field public static final int STATE_BLOCKED = 4; // 0x4
+    field public static final int STATE_CANCELED = 7; // 0x7
+    field public static final int STATE_COMPLETED = 5; // 0x5
+    field public static final int STATE_CREATED = 1; // 0x1
+    field public static final int STATE_FAILED = 6; // 0x6
+    field public static final int STATE_QUEUED = 2; // 0x2
+    field public static final int STATE_STARTED = 3; // 0x3
+  }
+
+  public static final class PrintJobInfo.Builder {
+    ctor public PrintJobInfo.Builder(@Nullable android.print.PrintJobInfo);
+    method @NonNull public android.print.PrintJobInfo build();
+    method public void putAdvancedOption(@NonNull String, @Nullable String);
+    method public void putAdvancedOption(@NonNull String, int);
+    method public void setAttributes(@NonNull android.print.PrintAttributes);
+    method public void setCopies(@IntRange(from=1) int);
+    method public void setPages(@NonNull android.print.PageRange[]);
+  }
+
+  public final class PrintManager {
+    method @NonNull public java.util.List<android.print.PrintJob> getPrintJobs();
+    method @NonNull public android.print.PrintJob print(@NonNull String, @NonNull android.print.PrintDocumentAdapter, @Nullable android.print.PrintAttributes);
+  }
+
+  public final class PrinterCapabilitiesInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getColorModes();
+    method @NonNull public android.print.PrintAttributes getDefaults();
+    method public int getDuplexModes();
+    method @NonNull public java.util.List<android.print.PrintAttributes.MediaSize> getMediaSizes();
+    method @NonNull public android.print.PrintAttributes.Margins getMinMargins();
+    method @NonNull public java.util.List<android.print.PrintAttributes.Resolution> getResolutions();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterCapabilitiesInfo> CREATOR;
+  }
+
+  public static final class PrinterCapabilitiesInfo.Builder {
+    ctor public PrinterCapabilitiesInfo.Builder(@NonNull android.print.PrinterId);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder addMediaSize(@NonNull android.print.PrintAttributes.MediaSize, boolean);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder addResolution(@NonNull android.print.PrintAttributes.Resolution, boolean);
+    method @NonNull public android.print.PrinterCapabilitiesInfo build();
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder setColorModes(int, int);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder setDuplexModes(int, int);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder setMinMargins(@NonNull android.print.PrintAttributes.Margins);
+  }
+
+  public final class PrinterId implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getLocalId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterId> CREATOR;
+  }
+
+  public final class PrinterInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.print.PrinterCapabilitiesInfo getCapabilities();
+    method @Nullable public String getDescription();
+    method @NonNull public android.print.PrinterId getId();
+    method @NonNull public String getName();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterInfo> CREATOR;
+    field public static final int STATUS_BUSY = 2; // 0x2
+    field public static final int STATUS_IDLE = 1; // 0x1
+    field public static final int STATUS_UNAVAILABLE = 3; // 0x3
+  }
+
+  public static final class PrinterInfo.Builder {
+    ctor public PrinterInfo.Builder(@NonNull android.print.PrinterId, @NonNull String, int);
+    ctor public PrinterInfo.Builder(@NonNull android.print.PrinterInfo);
+    method @NonNull public android.print.PrinterInfo build();
+    method @NonNull public android.print.PrinterInfo.Builder setCapabilities(@NonNull android.print.PrinterCapabilitiesInfo);
+    method @NonNull public android.print.PrinterInfo.Builder setDescription(@NonNull String);
+    method @NonNull public android.print.PrinterInfo.Builder setHasCustomPrinterIcon(boolean);
+    method @NonNull public android.print.PrinterInfo.Builder setIconResourceId(@DrawableRes int);
+    method @NonNull public android.print.PrinterInfo.Builder setInfoIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.print.PrinterInfo.Builder setName(@NonNull String);
+    method @NonNull public android.print.PrinterInfo.Builder setStatus(int);
+  }
+
+}
+
+package android.print.pdf {
+
+  public class PrintedPdfDocument extends android.graphics.pdf.PdfDocument {
+    ctor public PrintedPdfDocument(@NonNull android.content.Context, @NonNull android.print.PrintAttributes);
+    method @NonNull public android.graphics.Rect getPageContentRect();
+    method @IntRange(from=0) public int getPageHeight();
+    method @IntRange(from=0) public int getPageWidth();
+    method @NonNull public android.graphics.pdf.PdfDocument.Page startPage(@IntRange(from=0) int);
+  }
+
+}
+
+package android.printservice {
+
+  public final class CustomPrinterIconCallback {
+    method public boolean onCustomPrinterIconLoaded(@Nullable android.graphics.drawable.Icon);
+  }
+
+  public final class PrintDocument {
+    method @Nullable public android.os.ParcelFileDescriptor getData();
+    method @NonNull public android.print.PrintDocumentInfo getInfo();
+  }
+
+  public final class PrintJob {
+    method @MainThread public boolean block(@Nullable String);
+    method @MainThread public boolean cancel();
+    method @MainThread public boolean complete();
+    method @MainThread public boolean fail(@Nullable String);
+    method @MainThread public int getAdvancedIntOption(String);
+    method @MainThread public String getAdvancedStringOption(String);
+    method @MainThread @NonNull public android.printservice.PrintDocument getDocument();
+    method @MainThread public android.print.PrintJobId getId();
+    method @MainThread @NonNull public android.print.PrintJobInfo getInfo();
+    method @MainThread @Nullable public String getTag();
+    method @MainThread public boolean hasAdvancedOption(String);
+    method @MainThread public boolean isBlocked();
+    method @MainThread public boolean isCancelled();
+    method @MainThread public boolean isCompleted();
+    method @MainThread public boolean isFailed();
+    method @MainThread public boolean isQueued();
+    method @MainThread public boolean isStarted();
+    method @MainThread public void setProgress(@FloatRange(from=0.0, to=1.0) float);
+    method @MainThread public void setStatus(@Nullable CharSequence);
+    method @MainThread public void setStatus(@StringRes int);
+    method @MainThread public boolean setTag(@NonNull String);
+    method @MainThread public boolean start();
+  }
+
+  public abstract class PrintService extends android.app.Service {
+    ctor public PrintService();
+    method protected final void attachBaseContext(android.content.Context);
+    method @NonNull public final android.print.PrinterId generatePrinterId(String);
+    method public final java.util.List<android.printservice.PrintJob> getActivePrintJobs();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method protected void onConnected();
+    method @Nullable protected abstract android.printservice.PrinterDiscoverySession onCreatePrinterDiscoverySession();
+    method protected void onDisconnected();
+    method protected abstract void onPrintJobQueued(android.printservice.PrintJob);
+    method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob);
+    field public static final String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER";
+    field public static final String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO";
+    field public static final String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO";
+    field public static final String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO";
+    field public static final String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER";
+    field public static final String SERVICE_INTERFACE = "android.printservice.PrintService";
+    field public static final String SERVICE_META_DATA = "android.printservice";
+  }
+
+  public abstract class PrinterDiscoverySession {
+    ctor public PrinterDiscoverySession();
+    method public final void addPrinters(@NonNull java.util.List<android.print.PrinterInfo>);
+    method @NonNull public final java.util.List<android.print.PrinterInfo> getPrinters();
+    method @NonNull public final java.util.List<android.print.PrinterId> getTrackedPrinters();
+    method public final boolean isDestroyed();
+    method public final boolean isPrinterDiscoveryStarted();
+    method public abstract void onDestroy();
+    method public void onRequestCustomPrinterIcon(@NonNull android.print.PrinterId, @NonNull android.os.CancellationSignal, @NonNull android.printservice.CustomPrinterIconCallback);
+    method public abstract void onStartPrinterDiscovery(@NonNull java.util.List<android.print.PrinterId>);
+    method public abstract void onStartPrinterStateTracking(@NonNull android.print.PrinterId);
+    method public abstract void onStopPrinterDiscovery();
+    method public abstract void onStopPrinterStateTracking(@NonNull android.print.PrinterId);
+    method public abstract void onValidatePrinters(@NonNull java.util.List<android.print.PrinterId>);
+    method public final void removePrinters(@NonNull java.util.List<android.print.PrinterId>);
+  }
+
+}
+
+package android.provider {
+
+  public final class AlarmClock {
+    ctor public AlarmClock();
+    field public static final String ACTION_DISMISS_ALARM = "android.intent.action.DISMISS_ALARM";
+    field public static final String ACTION_DISMISS_TIMER = "android.intent.action.DISMISS_TIMER";
+    field public static final String ACTION_SET_ALARM = "android.intent.action.SET_ALARM";
+    field public static final String ACTION_SET_TIMER = "android.intent.action.SET_TIMER";
+    field public static final String ACTION_SHOW_ALARMS = "android.intent.action.SHOW_ALARMS";
+    field public static final String ACTION_SHOW_TIMERS = "android.intent.action.SHOW_TIMERS";
+    field public static final String ACTION_SNOOZE_ALARM = "android.intent.action.SNOOZE_ALARM";
+    field public static final String ALARM_SEARCH_MODE_ALL = "android.all";
+    field public static final String ALARM_SEARCH_MODE_LABEL = "android.label";
+    field public static final String ALARM_SEARCH_MODE_NEXT = "android.next";
+    field public static final String ALARM_SEARCH_MODE_TIME = "android.time";
+    field public static final String EXTRA_ALARM_SEARCH_MODE = "android.intent.extra.alarm.SEARCH_MODE";
+    field public static final String EXTRA_ALARM_SNOOZE_DURATION = "android.intent.extra.alarm.SNOOZE_DURATION";
+    field public static final String EXTRA_DAYS = "android.intent.extra.alarm.DAYS";
+    field public static final String EXTRA_HOUR = "android.intent.extra.alarm.HOUR";
+    field public static final String EXTRA_IS_PM = "android.intent.extra.alarm.IS_PM";
+    field public static final String EXTRA_LENGTH = "android.intent.extra.alarm.LENGTH";
+    field public static final String EXTRA_MESSAGE = "android.intent.extra.alarm.MESSAGE";
+    field public static final String EXTRA_MINUTES = "android.intent.extra.alarm.MINUTES";
+    field public static final String EXTRA_RINGTONE = "android.intent.extra.alarm.RINGTONE";
+    field public static final String EXTRA_SKIP_UI = "android.intent.extra.alarm.SKIP_UI";
+    field public static final String EXTRA_VIBRATE = "android.intent.extra.alarm.VIBRATE";
+    field public static final String VALUE_RINGTONE_SILENT = "silent";
+  }
+
+  public interface BaseColumns {
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  public class BlockedNumberContract {
+    method public static boolean canCurrentUserBlockNumbers(android.content.Context);
+    method @WorkerThread public static boolean isBlocked(android.content.Context, String);
+    method @WorkerThread public static int unblock(android.content.Context, String);
+    field public static final String AUTHORITY = "com.android.blockednumber";
+    field public static final android.net.Uri AUTHORITY_URI;
+  }
+
+  public static class BlockedNumberContract.BlockedNumbers {
+    field public static final String COLUMN_E164_NUMBER = "e164_number";
+    field public static final String COLUMN_ID = "_id";
+    field public static final String COLUMN_ORIGINAL_NUMBER = "original_number";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/blocked_number";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/blocked_number";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public class Browser {
+    ctor public Browser();
+    method public static final void sendString(android.content.Context, String);
+    field public static final String EXTRA_APPLICATION_ID = "com.android.browser.application_id";
+    field public static final String EXTRA_CREATE_NEW_TAB = "create_new_tab";
+    field public static final String EXTRA_HEADERS = "com.android.browser.headers";
+    field public static final String INITIAL_ZOOM_LEVEL = "browser.initialZoomLevel";
+  }
+
+  public final class CalendarContract {
+    method public static boolean startViewCalendarEventInManagedProfile(@NonNull android.content.Context, long, long, long, boolean, int);
+    field public static final String ACCOUNT_TYPE_LOCAL = "LOCAL";
+    field public static final String ACTION_EVENT_REMINDER = "android.intent.action.EVENT_REMINDER";
+    field public static final String ACTION_HANDLE_CUSTOM_EVENT = "android.provider.calendar.action.HANDLE_CUSTOM_EVENT";
+    field public static final String ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT = "android.provider.calendar.action.VIEW_MANAGED_PROFILE_CALENDAR_EVENT";
+    field public static final String AUTHORITY = "com.android.calendar";
+    field public static final String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String EXTRA_CUSTOM_APP_URI = "customAppUri";
+    field public static final String EXTRA_EVENT_ALL_DAY = "allDay";
+    field public static final String EXTRA_EVENT_BEGIN_TIME = "beginTime";
+    field public static final String EXTRA_EVENT_END_TIME = "endTime";
+    field public static final String EXTRA_EVENT_ID = "id";
+  }
+
+  public static final class CalendarContract.Attendees implements android.provider.BaseColumns android.provider.CalendarContract.AttendeesColumns android.provider.CalendarContract.EventsColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, long, String[]);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.AttendeesColumns {
+    field public static final String ATTENDEE_EMAIL = "attendeeEmail";
+    field public static final String ATTENDEE_IDENTITY = "attendeeIdentity";
+    field public static final String ATTENDEE_ID_NAMESPACE = "attendeeIdNamespace";
+    field public static final String ATTENDEE_NAME = "attendeeName";
+    field public static final String ATTENDEE_RELATIONSHIP = "attendeeRelationship";
+    field public static final String ATTENDEE_STATUS = "attendeeStatus";
+    field public static final int ATTENDEE_STATUS_ACCEPTED = 1; // 0x1
+    field public static final int ATTENDEE_STATUS_DECLINED = 2; // 0x2
+    field public static final int ATTENDEE_STATUS_INVITED = 3; // 0x3
+    field public static final int ATTENDEE_STATUS_NONE = 0; // 0x0
+    field public static final int ATTENDEE_STATUS_TENTATIVE = 4; // 0x4
+    field public static final String ATTENDEE_TYPE = "attendeeType";
+    field public static final String EVENT_ID = "event_id";
+    field public static final int RELATIONSHIP_ATTENDEE = 1; // 0x1
+    field public static final int RELATIONSHIP_NONE = 0; // 0x0
+    field public static final int RELATIONSHIP_ORGANIZER = 2; // 0x2
+    field public static final int RELATIONSHIP_PERFORMER = 3; // 0x3
+    field public static final int RELATIONSHIP_SPEAKER = 4; // 0x4
+    field public static final int TYPE_NONE = 0; // 0x0
+    field public static final int TYPE_OPTIONAL = 2; // 0x2
+    field public static final int TYPE_REQUIRED = 1; // 0x1
+    field public static final int TYPE_RESOURCE = 3; // 0x3
+  }
+
+  public static final class CalendarContract.CalendarAlerts implements android.provider.BaseColumns android.provider.CalendarContract.CalendarAlertsColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri CONTENT_URI_BY_INSTANCE;
+  }
+
+  protected static interface CalendarContract.CalendarAlertsColumns {
+    field public static final String ALARM_TIME = "alarmTime";
+    field public static final String BEGIN = "begin";
+    field public static final String CREATION_TIME = "creationTime";
+    field public static final String DEFAULT_SORT_ORDER = "begin ASC,title ASC";
+    field public static final String END = "end";
+    field public static final String EVENT_ID = "event_id";
+    field public static final String MINUTES = "minutes";
+    field public static final String NOTIFY_TIME = "notifyTime";
+    field public static final String RECEIVED_TIME = "receivedTime";
+    field public static final String STATE = "state";
+    field public static final int STATE_DISMISSED = 2; // 0x2
+    field public static final int STATE_FIRED = 1; // 0x1
+    field public static final int STATE_SCHEDULED = 0; // 0x0
+  }
+
+  public static final class CalendarContract.CalendarCache implements android.provider.CalendarContract.CalendarCacheColumns {
+    field public static final String KEY_TIMEZONE_INSTANCES = "timezoneInstances";
+    field public static final String KEY_TIMEZONE_INSTANCES_PREVIOUS = "timezoneInstancesPrevious";
+    field public static final String KEY_TIMEZONE_TYPE = "timezoneType";
+    field public static final String TIMEZONE_TYPE_AUTO = "auto";
+    field public static final String TIMEZONE_TYPE_HOME = "home";
+    field public static final android.net.Uri URI;
+  }
+
+  protected static interface CalendarContract.CalendarCacheColumns {
+    field public static final String KEY = "key";
+    field public static final String VALUE = "value";
+  }
+
+  protected static interface CalendarContract.CalendarColumns {
+    field public static final String ALLOWED_ATTENDEE_TYPES = "allowedAttendeeTypes";
+    field public static final String ALLOWED_AVAILABILITY = "allowedAvailability";
+    field public static final String ALLOWED_REMINDERS = "allowedReminders";
+    field public static final String CALENDAR_ACCESS_LEVEL = "calendar_access_level";
+    field public static final String CALENDAR_COLOR = "calendar_color";
+    field public static final String CALENDAR_COLOR_KEY = "calendar_color_index";
+    field public static final String CALENDAR_DISPLAY_NAME = "calendar_displayName";
+    field public static final String CALENDAR_TIME_ZONE = "calendar_timezone";
+    field public static final int CAL_ACCESS_CONTRIBUTOR = 500; // 0x1f4
+    field public static final int CAL_ACCESS_EDITOR = 600; // 0x258
+    field public static final int CAL_ACCESS_FREEBUSY = 100; // 0x64
+    field public static final int CAL_ACCESS_NONE = 0; // 0x0
+    field public static final int CAL_ACCESS_OVERRIDE = 400; // 0x190
+    field public static final int CAL_ACCESS_OWNER = 700; // 0x2bc
+    field public static final int CAL_ACCESS_READ = 200; // 0xc8
+    field public static final int CAL_ACCESS_RESPOND = 300; // 0x12c
+    field public static final int CAL_ACCESS_ROOT = 800; // 0x320
+    field public static final String CAN_MODIFY_TIME_ZONE = "canModifyTimeZone";
+    field public static final String CAN_ORGANIZER_RESPOND = "canOrganizerRespond";
+    field public static final String IS_PRIMARY = "isPrimary";
+    field public static final String MAX_REMINDERS = "maxReminders";
+    field public static final String OWNER_ACCOUNT = "ownerAccount";
+    field public static final String SYNC_EVENTS = "sync_events";
+    field public static final String VISIBLE = "visible";
+  }
+
+  public static final class CalendarContract.CalendarEntity implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.CalendarSyncColumns {
+    field public static final String CAL_SYNC1 = "cal_sync1";
+    field public static final String CAL_SYNC10 = "cal_sync10";
+    field public static final String CAL_SYNC2 = "cal_sync2";
+    field public static final String CAL_SYNC3 = "cal_sync3";
+    field public static final String CAL_SYNC4 = "cal_sync4";
+    field public static final String CAL_SYNC5 = "cal_sync5";
+    field public static final String CAL_SYNC6 = "cal_sync6";
+    field public static final String CAL_SYNC7 = "cal_sync7";
+    field public static final String CAL_SYNC8 = "cal_sync8";
+    field public static final String CAL_SYNC9 = "cal_sync9";
+  }
+
+  public static final class CalendarContract.Calendars implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+    field public static final String CALENDAR_LOCATION = "calendar_location";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "calendar_displayName";
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+    field public static final String NAME = "name";
+  }
+
+  public static final class CalendarContract.Colors implements android.provider.CalendarContract.ColorsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.ColorsColumns extends android.provider.SyncStateContract.Columns {
+    field public static final String COLOR = "color";
+    field public static final String COLOR_KEY = "color_index";
+    field public static final String COLOR_TYPE = "color_type";
+    field public static final int TYPE_CALENDAR = 0; // 0x0
+    field public static final int TYPE_EVENT = 1; // 0x1
+  }
+
+  public static final class CalendarContract.EventDays implements android.provider.CalendarContract.EventDaysColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, int, int, String[]);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.EventDaysColumns {
+    field public static final String ENDDAY = "endDay";
+    field public static final String STARTDAY = "startDay";
+  }
+
+  public static final class CalendarContract.Events implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+    field public static final android.net.Uri CONTENT_EXCEPTION_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.EventsColumns {
+    field public static final int ACCESS_CONFIDENTIAL = 1; // 0x1
+    field public static final int ACCESS_DEFAULT = 0; // 0x0
+    field public static final String ACCESS_LEVEL = "accessLevel";
+    field public static final int ACCESS_PRIVATE = 2; // 0x2
+    field public static final int ACCESS_PUBLIC = 3; // 0x3
+    field public static final String ALL_DAY = "allDay";
+    field public static final String AVAILABILITY = "availability";
+    field public static final int AVAILABILITY_BUSY = 0; // 0x0
+    field public static final int AVAILABILITY_FREE = 1; // 0x1
+    field public static final int AVAILABILITY_TENTATIVE = 2; // 0x2
+    field public static final String CALENDAR_ID = "calendar_id";
+    field public static final String CAN_INVITE_OTHERS = "canInviteOthers";
+    field public static final String CUSTOM_APP_PACKAGE = "customAppPackage";
+    field public static final String CUSTOM_APP_URI = "customAppUri";
+    field public static final String DESCRIPTION = "description";
+    field public static final String DISPLAY_COLOR = "displayColor";
+    field public static final String DTEND = "dtend";
+    field public static final String DTSTART = "dtstart";
+    field public static final String DURATION = "duration";
+    field public static final String EVENT_COLOR = "eventColor";
+    field public static final String EVENT_COLOR_KEY = "eventColor_index";
+    field public static final String EVENT_END_TIMEZONE = "eventEndTimezone";
+    field public static final String EVENT_LOCATION = "eventLocation";
+    field public static final String EVENT_TIMEZONE = "eventTimezone";
+    field public static final String EXDATE = "exdate";
+    field public static final String EXRULE = "exrule";
+    field public static final String GUESTS_CAN_INVITE_OTHERS = "guestsCanInviteOthers";
+    field public static final String GUESTS_CAN_MODIFY = "guestsCanModify";
+    field public static final String GUESTS_CAN_SEE_GUESTS = "guestsCanSeeGuests";
+    field public static final String HAS_ALARM = "hasAlarm";
+    field public static final String HAS_ATTENDEE_DATA = "hasAttendeeData";
+    field public static final String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties";
+    field public static final String IS_ORGANIZER = "isOrganizer";
+    field public static final String LAST_DATE = "lastDate";
+    field public static final String LAST_SYNCED = "lastSynced";
+    field public static final String ORGANIZER = "organizer";
+    field public static final String ORIGINAL_ALL_DAY = "originalAllDay";
+    field public static final String ORIGINAL_ID = "original_id";
+    field public static final String ORIGINAL_INSTANCE_TIME = "originalInstanceTime";
+    field public static final String ORIGINAL_SYNC_ID = "original_sync_id";
+    field public static final String RDATE = "rdate";
+    field public static final String RRULE = "rrule";
+    field public static final String SELF_ATTENDEE_STATUS = "selfAttendeeStatus";
+    field public static final String STATUS = "eventStatus";
+    field public static final int STATUS_CANCELED = 2; // 0x2
+    field public static final int STATUS_CONFIRMED = 1; // 0x1
+    field public static final int STATUS_TENTATIVE = 0; // 0x0
+    field public static final String SYNC_DATA1 = "sync_data1";
+    field public static final String SYNC_DATA10 = "sync_data10";
+    field public static final String SYNC_DATA2 = "sync_data2";
+    field public static final String SYNC_DATA3 = "sync_data3";
+    field public static final String SYNC_DATA4 = "sync_data4";
+    field public static final String SYNC_DATA5 = "sync_data5";
+    field public static final String SYNC_DATA6 = "sync_data6";
+    field public static final String SYNC_DATA7 = "sync_data7";
+    field public static final String SYNC_DATA8 = "sync_data8";
+    field public static final String SYNC_DATA9 = "sync_data9";
+    field public static final String TITLE = "title";
+    field public static final String UID_2445 = "uid2445";
+  }
+
+  public static final class CalendarContract.EventsEntity implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentResolver);
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentProviderClient);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static final class CalendarContract.ExtendedProperties implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.ExtendedPropertiesColumns {
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.ExtendedPropertiesColumns {
+    field public static final String EVENT_ID = "event_id";
+    field public static final String NAME = "name";
+    field public static final String VALUE = "value";
+  }
+
+  public static final class CalendarContract.Instances implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, String[], long, long);
+    method public static android.database.Cursor query(android.content.ContentResolver, String[], long, long, String);
+    field public static final String BEGIN = "begin";
+    field public static final android.net.Uri CONTENT_BY_DAY_URI;
+    field public static final android.net.Uri CONTENT_SEARCH_BY_DAY_URI;
+    field public static final android.net.Uri CONTENT_SEARCH_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String END = "end";
+    field public static final String END_DAY = "endDay";
+    field public static final String END_MINUTE = "endMinute";
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_BY_DAY_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_SEARCH_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+    field public static final String EVENT_ID = "event_id";
+    field public static final String START_DAY = "startDay";
+    field public static final String START_MINUTE = "startMinute";
+  }
+
+  public static final class CalendarContract.Reminders implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.RemindersColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, long, String[]);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.RemindersColumns {
+    field public static final String EVENT_ID = "event_id";
+    field public static final String METHOD = "method";
+    field public static final int METHOD_ALARM = 4; // 0x4
+    field public static final int METHOD_ALERT = 1; // 0x1
+    field public static final int METHOD_DEFAULT = 0; // 0x0
+    field public static final int METHOD_EMAIL = 2; // 0x2
+    field public static final int METHOD_SMS = 3; // 0x3
+    field public static final String MINUTES = "minutes";
+    field public static final int MINUTES_DEFAULT = -1; // 0xffffffff
+  }
+
+  protected static interface CalendarContract.SyncColumns extends android.provider.CalendarContract.CalendarSyncColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String CAN_PARTIALLY_UPDATE = "canPartiallyUpdate";
+    field public static final String DELETED = "deleted";
+    field public static final String DIRTY = "dirty";
+    field public static final String MUTATORS = "mutators";
+    field public static final String _SYNC_ID = "_sync_id";
+  }
+
+  public static final class CalendarContract.SyncState implements android.provider.SyncStateContract.Columns {
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public class CallLog {
+    ctor public CallLog();
+    field public static final String AUTHORITY = "call_log";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static class CallLog.Calls implements android.provider.BaseColumns {
+    ctor public CallLog.Calls();
+    method public static String getLastOutgoingCall(android.content.Context);
+    field public static final int ANSWERED_EXTERNALLY_TYPE = 7; // 0x7
+    field public static final long AUTO_MISSED_EMERGENCY_CALL = 1L; // 0x1L
+    field public static final long AUTO_MISSED_MAXIMUM_DIALING = 4L; // 0x4L
+    field public static final long AUTO_MISSED_MAXIMUM_RINGING = 2L; // 0x2L
+    field public static final int BLOCKED_TYPE = 6; // 0x6
+    field public static final String BLOCK_REASON = "block_reason";
+    field public static final int BLOCK_REASON_BLOCKED_NUMBER = 3; // 0x3
+    field public static final int BLOCK_REASON_CALL_SCREENING_SERVICE = 1; // 0x1
+    field public static final int BLOCK_REASON_DIRECT_TO_VOICEMAIL = 2; // 0x2
+    field public static final int BLOCK_REASON_NOT_BLOCKED = 0; // 0x0
+    field public static final int BLOCK_REASON_NOT_IN_CONTACTS = 7; // 0x7
+    field public static final int BLOCK_REASON_PAY_PHONE = 6; // 0x6
+    field public static final int BLOCK_REASON_RESTRICTED_NUMBER = 5; // 0x5
+    field public static final int BLOCK_REASON_UNKNOWN_NUMBER = 4; // 0x4
+    field public static final String CACHED_FORMATTED_NUMBER = "formatted_number";
+    field public static final String CACHED_LOOKUP_URI = "lookup_uri";
+    field public static final String CACHED_MATCHED_NUMBER = "matched_number";
+    field public static final String CACHED_NAME = "name";
+    field public static final String CACHED_NORMALIZED_NUMBER = "normalized_number";
+    field public static final String CACHED_NUMBER_LABEL = "numberlabel";
+    field public static final String CACHED_NUMBER_TYPE = "numbertype";
+    field public static final String CACHED_PHOTO_ID = "photo_id";
+    field public static final String CACHED_PHOTO_URI = "photo_uri";
+    field public static final String CALL_SCREENING_APP_NAME = "call_screening_app_name";
+    field public static final String CALL_SCREENING_COMPONENT_NAME = "call_screening_component_name";
+    field public static final String COMPOSER_PHOTO_URI = "composer_photo_uri";
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/calls";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/calls";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri CONTENT_URI_WITH_VOICEMAIL;
+    field public static final String COUNTRY_ISO = "countryiso";
+    field public static final String DATA_USAGE = "data_usage";
+    field public static final String DATE = "date";
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final String DURATION = "duration";
+    field public static final String EXTRA_CALL_TYPE_FILTER = "android.provider.extra.CALL_TYPE_FILTER";
+    field public static final String FEATURES = "features";
+    field public static final int FEATURES_ASSISTED_DIALING_USED = 16; // 0x10
+    field public static final int FEATURES_HD_CALL = 4; // 0x4
+    field public static final int FEATURES_PULLED_EXTERNALLY = 2; // 0x2
+    field public static final int FEATURES_RTT = 32; // 0x20
+    field public static final int FEATURES_VIDEO = 1; // 0x1
+    field public static final int FEATURES_VOLTE = 64; // 0x40
+    field public static final int FEATURES_WIFI = 8; // 0x8
+    field public static final String GEOCODED_LOCATION = "geocoded_location";
+    field public static final int INCOMING_TYPE = 1; // 0x1
+    field public static final String IS_READ = "is_read";
+    field public static final String LAST_MODIFIED = "last_modified";
+    field public static final String LIMIT_PARAM_KEY = "limit";
+    field public static final String LOCATION = "location";
+    field public static final String MISSED_REASON = "missed_reason";
+    field public static final long MISSED_REASON_NOT_MISSED = 0L; // 0x0L
+    field public static final int MISSED_TYPE = 3; // 0x3
+    field public static final String NEW = "new";
+    field public static final String NUMBER = "number";
+    field public static final String NUMBER_PRESENTATION = "presentation";
+    field public static final String OFFSET_PARAM_KEY = "offset";
+    field public static final int OUTGOING_TYPE = 2; // 0x2
+    field public static final String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name";
+    field public static final String PHONE_ACCOUNT_ID = "subscription_id";
+    field public static final String POST_DIAL_DIGITS = "post_dial_digits";
+    field public static final int PRESENTATION_ALLOWED = 1; // 0x1
+    field public static final int PRESENTATION_PAYPHONE = 4; // 0x4
+    field public static final int PRESENTATION_RESTRICTED = 2; // 0x2
+    field public static final int PRESENTATION_UNKNOWN = 3; // 0x3
+    field public static final String PRIORITY = "priority";
+    field public static final int PRIORITY_NORMAL = 0; // 0x0
+    field public static final int PRIORITY_URGENT = 1; // 0x1
+    field public static final int REJECTED_TYPE = 5; // 0x5
+    field public static final String SUBJECT = "subject";
+    field public static final String TRANSCRIPTION = "transcription";
+    field public static final String TYPE = "type";
+    field public static final long USER_MISSED_CALL_FILTERS_TIMEOUT = 4194304L; // 0x400000L
+    field public static final long USER_MISSED_CALL_SCREENING_SERVICE_SILENCED = 2097152L; // 0x200000L
+    field public static final long USER_MISSED_DND_MODE = 262144L; // 0x40000L
+    field public static final long USER_MISSED_LOW_RING_VOLUME = 524288L; // 0x80000L
+    field public static final long USER_MISSED_NO_ANSWER = 65536L; // 0x10000L
+    field public static final long USER_MISSED_NO_VIBRATE = 1048576L; // 0x100000L
+    field public static final long USER_MISSED_SHORT_RING = 131072L; // 0x20000L
+    field public static final String VIA_NUMBER = "via_number";
+    field public static final int VOICEMAIL_TYPE = 4; // 0x4
+    field public static final String VOICEMAIL_URI = "voicemail_uri";
+  }
+
+  public static class CallLog.Locations implements android.provider.BaseColumns {
+    field public static final String AUTHORITY = "call_composer_locations";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_composer_location";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_composer_location";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String LATITUDE = "latitude";
+    field public static final String LONGITUDE = "longitude";
+  }
+
+  @Deprecated public class Contacts {
+    field @Deprecated public static final String AUTHORITY = "contacts";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final int KIND_EMAIL = 1; // 0x1
+    field @Deprecated public static final int KIND_IM = 3; // 0x3
+    field @Deprecated public static final int KIND_ORGANIZATION = 4; // 0x4
+    field @Deprecated public static final int KIND_PHONE = 5; // 0x5
+    field @Deprecated public static final int KIND_POSTAL = 2; // 0x2
+  }
+
+  @Deprecated public static final class Contacts.ContactMethods implements android.provider.BaseColumns android.provider.Contacts.ContactMethodsColumns android.provider.Contacts.PeopleColumns {
+    method @Deprecated public void addPostalLocation(android.content.Context, long, double, double);
+    method @Deprecated public static Object decodeImProtocol(String);
+    method @Deprecated public static String encodeCustomImProtocol(String);
+    method @Deprecated public static String encodePredefinedImProtocol(int);
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, int, CharSequence);
+    field @Deprecated public static final String CONTENT_EMAIL_ITEM_TYPE = "vnd.android.cursor.item/email";
+    field @Deprecated public static final String CONTENT_EMAIL_TYPE = "vnd.android.cursor.dir/email";
+    field @Deprecated public static final android.net.Uri CONTENT_EMAIL_URI;
+    field @Deprecated public static final String CONTENT_IM_ITEM_TYPE = "vnd.android.cursor.item/jabber-im";
+    field @Deprecated public static final String CONTENT_POSTAL_ITEM_TYPE = "vnd.android.cursor.item/postal-address";
+    field @Deprecated public static final String CONTENT_POSTAL_TYPE = "vnd.android.cursor.dir/postal-address";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact-methods";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final String POSTAL_LOCATION_LATITUDE = "data";
+    field @Deprecated public static final String POSTAL_LOCATION_LONGITUDE = "aux_data";
+    field @Deprecated public static final int PROTOCOL_AIM = 0; // 0x0
+    field @Deprecated public static final int PROTOCOL_GOOGLE_TALK = 5; // 0x5
+    field @Deprecated public static final int PROTOCOL_ICQ = 6; // 0x6
+    field @Deprecated public static final int PROTOCOL_JABBER = 7; // 0x7
+    field @Deprecated public static final int PROTOCOL_MSN = 1; // 0x1
+    field @Deprecated public static final int PROTOCOL_QQ = 4; // 0x4
+    field @Deprecated public static final int PROTOCOL_SKYPE = 3; // 0x3
+    field @Deprecated public static final int PROTOCOL_YAHOO = 2; // 0x2
+  }
+
+  @Deprecated public static interface Contacts.ContactMethodsColumns {
+    field @Deprecated public static final String AUX_DATA = "aux_data";
+    field @Deprecated public static final String DATA = "data";
+    field @Deprecated public static final String ISPRIMARY = "isprimary";
+    field @Deprecated public static final String KIND = "kind";
+    field @Deprecated public static final String LABEL = "label";
+    field @Deprecated public static final String TYPE = "type";
+    field @Deprecated public static final int TYPE_CUSTOM = 0; // 0x0
+    field @Deprecated public static final int TYPE_HOME = 1; // 0x1
+    field @Deprecated public static final int TYPE_OTHER = 3; // 0x3
+    field @Deprecated public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  @Deprecated public static final class Contacts.Extensions implements android.provider.BaseColumns android.provider.Contacts.ExtensionsColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_extensions";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_extensions";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "person, name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+  }
+
+  @Deprecated public static interface Contacts.ExtensionsColumns {
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String VALUE = "value";
+  }
+
+  @Deprecated public static final class Contacts.GroupMembership implements android.provider.BaseColumns android.provider.Contacts.GroupsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "groupmembership";
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroupmembership";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroupmembership";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "group_id ASC";
+    field @Deprecated public static final String GROUP_ID = "group_id";
+    field @Deprecated public static final String GROUP_SYNC_ACCOUNT = "group_sync_account";
+    field @Deprecated public static final String GROUP_SYNC_ACCOUNT_TYPE = "group_sync_account_type";
+    field @Deprecated public static final String GROUP_SYNC_ID = "group_sync_id";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final android.net.Uri RAW_CONTENT_URI;
+  }
+
+  @Deprecated public static final class Contacts.Groups implements android.provider.BaseColumns android.provider.Contacts.GroupsColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroup";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroup";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final android.net.Uri DELETED_CONTENT_URI;
+    field @Deprecated public static final String GROUP_ANDROID_STARRED = "Starred in Android";
+    field @Deprecated public static final String GROUP_MY_CONTACTS = "Contacts";
+  }
+
+  @Deprecated public static interface Contacts.GroupsColumns {
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String NOTES = "notes";
+    field @Deprecated public static final String SHOULD_SYNC = "should_sync";
+    field @Deprecated public static final String SYSTEM_ID = "system_id";
+  }
+
+  @Deprecated public static final class Contacts.Intents {
+    ctor @Deprecated public Contacts.Intents();
+    field @Deprecated public static final String ATTACH_IMAGE = "com.android.contacts.action.ATTACH_IMAGE";
+    field @Deprecated public static final String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION";
+    field @Deprecated public static final String EXTRA_FORCE_CREATE = "com.android.contacts.action.FORCE_CREATE";
+    field @Deprecated public static final String SEARCH_SUGGESTION_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED";
+    field @Deprecated public static final String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED";
+    field @Deprecated public static final String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED";
+    field @Deprecated public static final String SHOW_OR_CREATE_CONTACT = "com.android.contacts.action.SHOW_OR_CREATE_CONTACT";
+  }
+
+  @Deprecated public static final class Contacts.Intents.Insert {
+    ctor @Deprecated public Contacts.Intents.Insert();
+    field @Deprecated public static final String ACTION = "android.intent.action.INSERT";
+    field @Deprecated public static final String COMPANY = "company";
+    field @Deprecated public static final String EMAIL = "email";
+    field @Deprecated public static final String EMAIL_ISPRIMARY = "email_isprimary";
+    field @Deprecated public static final String EMAIL_TYPE = "email_type";
+    field @Deprecated public static final String FULL_MODE = "full_mode";
+    field @Deprecated public static final String IM_HANDLE = "im_handle";
+    field @Deprecated public static final String IM_ISPRIMARY = "im_isprimary";
+    field @Deprecated public static final String IM_PROTOCOL = "im_protocol";
+    field @Deprecated public static final String JOB_TITLE = "job_title";
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String NOTES = "notes";
+    field @Deprecated public static final String PHONE = "phone";
+    field @Deprecated public static final String PHONETIC_NAME = "phonetic_name";
+    field @Deprecated public static final String PHONE_ISPRIMARY = "phone_isprimary";
+    field @Deprecated public static final String PHONE_TYPE = "phone_type";
+    field @Deprecated public static final String POSTAL = "postal";
+    field @Deprecated public static final String POSTAL_ISPRIMARY = "postal_isprimary";
+    field @Deprecated public static final String POSTAL_TYPE = "postal_type";
+    field @Deprecated public static final String SECONDARY_EMAIL = "secondary_email";
+    field @Deprecated public static final String SECONDARY_EMAIL_TYPE = "secondary_email_type";
+    field @Deprecated public static final String SECONDARY_PHONE = "secondary_phone";
+    field @Deprecated public static final String SECONDARY_PHONE_TYPE = "secondary_phone_type";
+    field @Deprecated public static final String TERTIARY_EMAIL = "tertiary_email";
+    field @Deprecated public static final String TERTIARY_EMAIL_TYPE = "tertiary_email_type";
+    field @Deprecated public static final String TERTIARY_PHONE = "tertiary_phone";
+    field @Deprecated public static final String TERTIARY_PHONE_TYPE = "tertiary_phone_type";
+  }
+
+  @Deprecated public static final class Contacts.Intents.UI {
+    ctor @Deprecated public Contacts.Intents.UI();
+    field @Deprecated public static final String FILTER_CONTACTS_ACTION = "com.android.contacts.action.FILTER_CONTACTS";
+    field @Deprecated public static final String FILTER_TEXT_EXTRA_KEY = "com.android.contacts.extra.FILTER_TEXT";
+    field @Deprecated public static final String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP";
+    field @Deprecated public static final String LIST_ALL_CONTACTS_ACTION = "com.android.contacts.action.LIST_ALL_CONTACTS";
+    field @Deprecated public static final String LIST_CONTACTS_WITH_PHONES_ACTION = "com.android.contacts.action.LIST_CONTACTS_WITH_PHONES";
+    field @Deprecated public static final String LIST_DEFAULT = "com.android.contacts.action.LIST_DEFAULT";
+    field @Deprecated public static final String LIST_FREQUENT_ACTION = "com.android.contacts.action.LIST_FREQUENT";
+    field @Deprecated public static final String LIST_GROUP_ACTION = "com.android.contacts.action.LIST_GROUP";
+    field @Deprecated public static final String LIST_STARRED_ACTION = "com.android.contacts.action.LIST_STARRED";
+    field @Deprecated public static final String LIST_STREQUENT_ACTION = "com.android.contacts.action.LIST_STREQUENT";
+    field @Deprecated public static final String TITLE_EXTRA_KEY = "com.android.contacts.extra.TITLE_EXTRA";
+  }
+
+  @Deprecated public static interface Contacts.OrganizationColumns {
+    field @Deprecated public static final String COMPANY = "company";
+    field @Deprecated public static final String ISPRIMARY = "isprimary";
+    field @Deprecated public static final String LABEL = "label";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final String TITLE = "title";
+    field @Deprecated public static final String TYPE = "type";
+    field @Deprecated public static final int TYPE_CUSTOM = 0; // 0x0
+    field @Deprecated public static final int TYPE_OTHER = 2; // 0x2
+    field @Deprecated public static final int TYPE_WORK = 1; // 0x1
+  }
+
+  @Deprecated public static final class Contacts.Organizations implements android.provider.BaseColumns android.provider.Contacts.OrganizationColumns {
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, CharSequence);
+    field @Deprecated public static final String CONTENT_DIRECTORY = "organizations";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "company, title, isprimary ASC";
+  }
+
+  @Deprecated public static final class Contacts.People implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns android.provider.Contacts.PresenceColumns {
+    method @Deprecated public static android.net.Uri addToGroup(android.content.ContentResolver, long, String);
+    method @Deprecated public static android.net.Uri addToGroup(android.content.ContentResolver, long, long);
+    method @Deprecated public static android.net.Uri addToMyContactsGroup(android.content.ContentResolver, long);
+    method @Deprecated public static android.net.Uri createPersonInMyContactsGroup(android.content.ContentResolver, android.content.ContentValues);
+    method @Deprecated public static android.graphics.Bitmap loadContactPhoto(android.content.Context, android.net.Uri, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static void markAsContacted(android.content.ContentResolver, long);
+    method @Deprecated public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri);
+    method @Deprecated public static android.database.Cursor queryGroups(android.content.ContentResolver, long);
+    method @Deprecated public static void setPhotoData(android.content.ContentResolver, android.net.Uri, byte[]);
+    field @Deprecated public static final android.net.Uri CONTENT_FILTER_URI;
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/person";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/person";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final android.net.Uri DELETED_CONTENT_URI;
+    field @Deprecated public static final String PRIMARY_EMAIL_ID = "primary_email";
+    field @Deprecated public static final String PRIMARY_ORGANIZATION_ID = "primary_organization";
+    field @Deprecated public static final String PRIMARY_PHONE_ID = "primary_phone";
+  }
+
+  @Deprecated public static final class Contacts.People.ContactMethods implements android.provider.BaseColumns android.provider.Contacts.ContactMethodsColumns android.provider.Contacts.PeopleColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "contact_methods";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "data ASC";
+  }
+
+  @Deprecated public static class Contacts.People.Extensions implements android.provider.BaseColumns android.provider.Contacts.ExtensionsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "extensions";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+  }
+
+  @Deprecated public static final class Contacts.People.Phones implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "phones";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "number ASC";
+  }
+
+  @Deprecated public static interface Contacts.PeopleColumns {
+    field @Deprecated public static final String CUSTOM_RINGTONE = "custom_ringtone";
+    field @Deprecated public static final String DISPLAY_NAME = "display_name";
+    field @Deprecated public static final String LAST_TIME_CONTACTED = "last_time_contacted";
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String NOTES = "notes";
+    field @Deprecated public static final String PHONETIC_NAME = "phonetic_name";
+    field @Deprecated public static final String PHOTO_VERSION = "photo_version";
+    field @Deprecated public static final String SEND_TO_VOICEMAIL = "send_to_voicemail";
+    field @Deprecated public static final String STARRED = "starred";
+    field @Deprecated public static final String TIMES_CONTACTED = "times_contacted";
+  }
+
+  @Deprecated public static final class Contacts.Phones implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns {
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, CharSequence, CharSequence[]);
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, CharSequence);
+    field @Deprecated public static final android.net.Uri CONTENT_FILTER_URL;
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+  }
+
+  @Deprecated public static interface Contacts.PhonesColumns {
+    field @Deprecated public static final String ISPRIMARY = "isprimary";
+    field @Deprecated public static final String LABEL = "label";
+    field @Deprecated public static final String NUMBER = "number";
+    field @Deprecated public static final String NUMBER_KEY = "number_key";
+    field @Deprecated public static final String TYPE = "type";
+    field @Deprecated public static final int TYPE_CUSTOM = 0; // 0x0
+    field @Deprecated public static final int TYPE_FAX_HOME = 5; // 0x5
+    field @Deprecated public static final int TYPE_FAX_WORK = 4; // 0x4
+    field @Deprecated public static final int TYPE_HOME = 1; // 0x1
+    field @Deprecated public static final int TYPE_MOBILE = 2; // 0x2
+    field @Deprecated public static final int TYPE_OTHER = 7; // 0x7
+    field @Deprecated public static final int TYPE_PAGER = 6; // 0x6
+    field @Deprecated public static final int TYPE_WORK = 3; // 0x3
+  }
+
+  @Deprecated public static final class Contacts.Photos implements android.provider.BaseColumns android.provider.Contacts.PhotosColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "photo";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "person ASC";
+  }
+
+  @Deprecated public static interface Contacts.PhotosColumns {
+    field @Deprecated public static final String DATA = "data";
+    field @Deprecated public static final String DOWNLOAD_REQUIRED = "download_required";
+    field @Deprecated public static final String EXISTS_ON_SERVER = "exists_on_server";
+    field @Deprecated public static final String LOCAL_VERSION = "local_version";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final String SYNC_ERROR = "sync_error";
+  }
+
+  @Deprecated public static interface Contacts.PresenceColumns {
+    field @Deprecated public static final int AVAILABLE = 5; // 0x5
+    field @Deprecated public static final int AWAY = 2; // 0x2
+    field @Deprecated public static final int DO_NOT_DISTURB = 4; // 0x4
+    field @Deprecated public static final int IDLE = 3; // 0x3
+    field @Deprecated public static final String IM_ACCOUNT = "im_account";
+    field @Deprecated public static final String IM_HANDLE = "im_handle";
+    field @Deprecated public static final String IM_PROTOCOL = "im_protocol";
+    field @Deprecated public static final int INVISIBLE = 1; // 0x1
+    field @Deprecated public static final int OFFLINE = 0; // 0x0
+    field @Deprecated public static final String PRESENCE_CUSTOM_STATUS = "status";
+    field @Deprecated public static final String PRESENCE_STATUS = "mode";
+    field @Deprecated public static final String PRIORITY = "priority";
+  }
+
+  @Deprecated public static final class Contacts.Settings implements android.provider.BaseColumns android.provider.Contacts.SettingsColumns {
+    method @Deprecated public static String getSetting(android.content.ContentResolver, String, String);
+    method @Deprecated public static void setSetting(android.content.ContentResolver, String, String, String);
+    field @Deprecated public static final String CONTENT_DIRECTORY = "settings";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "key ASC";
+    field @Deprecated public static final String SYNC_EVERYTHING = "syncEverything";
+  }
+
+  @Deprecated public static interface Contacts.SettingsColumns {
+    field @Deprecated public static final String KEY = "key";
+    field @Deprecated public static final String VALUE = "value";
+    field @Deprecated public static final String _SYNC_ACCOUNT = "_sync_account";
+    field @Deprecated public static final String _SYNC_ACCOUNT_TYPE = "_sync_account_type";
+  }
+
+  public final class ContactsContract {
+    ctor public ContactsContract();
+    method public static boolean isProfileId(long);
+    field public static final String AUTHORITY = "com.android.contacts";
+    field public static final android.net.Uri AUTHORITY_URI;
+    field public static final String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
+    field public static final String DEFERRED_SNIPPETING = "deferred_snippeting";
+    field public static final String DEFERRED_SNIPPETING_QUERY = "deferred_snippeting_query";
+    field public static final String DIRECTORY_PARAM_KEY = "directory";
+    field public static final String LIMIT_PARAM_KEY = "limit";
+    field public static final String PRIMARY_ACCOUNT_NAME = "name_for_primary_account";
+    field public static final String PRIMARY_ACCOUNT_TYPE = "type_for_primary_account";
+    field public static final String REMOVE_DUPLICATE_ENTRIES = "remove_duplicate_entries";
+    field public static final String STREQUENT_PHONE_ONLY = "strequent_phone_only";
+  }
+
+  public static final class ContactsContract.AggregationExceptions implements android.provider.BaseColumns {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/aggregation_exception";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/aggregation_exception";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String RAW_CONTACT_ID1 = "raw_contact_id1";
+    field public static final String RAW_CONTACT_ID2 = "raw_contact_id2";
+    field public static final String TYPE = "type";
+    field public static final int TYPE_AUTOMATIC = 0; // 0x0
+    field public static final int TYPE_KEEP_SEPARATE = 2; // 0x2
+    field public static final int TYPE_KEEP_TOGETHER = 1; // 0x1
+  }
+
+  protected static interface ContactsContract.BaseSyncColumns {
+    field public static final String SYNC1 = "sync1";
+    field public static final String SYNC2 = "sync2";
+    field public static final String SYNC3 = "sync3";
+    field public static final String SYNC4 = "sync4";
+  }
+
+  public static final class ContactsContract.CommonDataKinds {
+  }
+
+  public static interface ContactsContract.CommonDataKinds.BaseTypes {
+    field public static final int TYPE_CUSTOM = 0; // 0x0
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Callable implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    ctor public ContactsContract.CommonDataKinds.Callable();
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+  }
+
+  protected static interface ContactsContract.CommonDataKinds.CommonColumns extends android.provider.ContactsContract.CommonDataKinds.BaseTypes {
+    field public static final String DATA = "data1";
+    field public static final String LABEL = "data3";
+    field public static final String TYPE = "data2";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Contactables implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    ctor public ContactsContract.CommonDataKinds.Contactables();
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String VISIBLE_CONTACTS_ONLY = "visible_contacts_only";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Email implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String ADDRESS = "data1";
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/email_v2";
+    field public static final android.net.Uri CONTENT_LOOKUP_URI;
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DISPLAY_NAME = "data4";
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_LOOKUP_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_MOBILE = 4; // 0x4
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Event implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeResource(Integer);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_event";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String START_DATE = "data1";
+    field public static final int TYPE_ANNIVERSARY = 1; // 0x1
+    field public static final int TYPE_BIRTHDAY = 3; // 0x3
+    field public static final int TYPE_OTHER = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.GroupMembership implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/group_membership";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String GROUP_ROW_ID = "data1";
+    field public static final String GROUP_SOURCE_ID = "group_sourceid";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Identity implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/identity";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String IDENTITY = "data1";
+    field public static final String NAMESPACE = "data2";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Im implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getProtocolLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getProtocolLabelResource(int);
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/im";
+    field public static final String CUSTOM_PROTOCOL = "data6";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String PROTOCOL = "data5";
+    field @Deprecated public static final int PROTOCOL_AIM = 0; // 0x0
+    field public static final int PROTOCOL_CUSTOM = -1; // 0xffffffff
+    field @Deprecated public static final int PROTOCOL_GOOGLE_TALK = 5; // 0x5
+    field @Deprecated public static final int PROTOCOL_ICQ = 6; // 0x6
+    field @Deprecated public static final int PROTOCOL_JABBER = 7; // 0x7
+    field @Deprecated public static final int PROTOCOL_MSN = 1; // 0x1
+    field @Deprecated public static final int PROTOCOL_NETMEETING = 8; // 0x8
+    field @Deprecated public static final int PROTOCOL_QQ = 4; // 0x4
+    field @Deprecated public static final int PROTOCOL_SKYPE = 3; // 0x3
+    field @Deprecated public static final int PROTOCOL_YAHOO = 2; // 0x2
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Nickname implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/nickname";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NAME = "data1";
+    field public static final int TYPE_DEFAULT = 1; // 0x1
+    field public static final int TYPE_INITIALS = 5; // 0x5
+    field public static final int TYPE_MAIDEN_NAME = 3; // 0x3
+    field @Deprecated public static final int TYPE_MAINDEN_NAME = 3; // 0x3
+    field public static final int TYPE_OTHER_NAME = 2; // 0x2
+    field public static final int TYPE_SHORT_NAME = 4; // 0x4
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Note implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/note";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NOTE = "data1";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Organization implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String COMPANY = "data1";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/organization";
+    field public static final String DEPARTMENT = "data5";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String JOB_DESCRIPTION = "data6";
+    field public static final String OFFICE_LOCATION = "data9";
+    field public static final String PHONETIC_NAME = "data8";
+    field public static final String PHONETIC_NAME_STYLE = "data10";
+    field public static final String SYMBOL = "data7";
+    field public static final String TITLE = "data4";
+    field public static final int TYPE_OTHER = 2; // 0x2
+    field public static final int TYPE_WORK = 1; // 0x1
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Phone implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone_v2";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone_v2";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NORMALIZED_NUMBER = "data4";
+    field public static final String NUMBER = "data1";
+    field public static final String SEARCH_DISPLAY_NAME_KEY = "search_display_name";
+    field public static final String SEARCH_PHONE_NUMBER_KEY = "search_phone_number";
+    field public static final int TYPE_ASSISTANT = 19; // 0x13
+    field public static final int TYPE_CALLBACK = 8; // 0x8
+    field public static final int TYPE_CAR = 9; // 0x9
+    field public static final int TYPE_COMPANY_MAIN = 10; // 0xa
+    field public static final int TYPE_FAX_HOME = 5; // 0x5
+    field public static final int TYPE_FAX_WORK = 4; // 0x4
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_ISDN = 11; // 0xb
+    field public static final int TYPE_MAIN = 12; // 0xc
+    field public static final int TYPE_MMS = 20; // 0x14
+    field public static final int TYPE_MOBILE = 2; // 0x2
+    field public static final int TYPE_OTHER = 7; // 0x7
+    field public static final int TYPE_OTHER_FAX = 13; // 0xd
+    field public static final int TYPE_PAGER = 6; // 0x6
+    field public static final int TYPE_RADIO = 14; // 0xe
+    field public static final int TYPE_TELEX = 15; // 0xf
+    field public static final int TYPE_TTY_TDD = 16; // 0x10
+    field public static final int TYPE_WORK = 3; // 0x3
+    field public static final int TYPE_WORK_MOBILE = 17; // 0x11
+    field public static final int TYPE_WORK_PAGER = 18; // 0x12
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Photo implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/photo";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String PHOTO = "data15";
+    field public static final String PHOTO_FILE_ID = "data14";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Relation implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/relation";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NAME = "data1";
+    field public static final int TYPE_ASSISTANT = 1; // 0x1
+    field public static final int TYPE_BROTHER = 2; // 0x2
+    field public static final int TYPE_CHILD = 3; // 0x3
+    field public static final int TYPE_DOMESTIC_PARTNER = 4; // 0x4
+    field public static final int TYPE_FATHER = 5; // 0x5
+    field public static final int TYPE_FRIEND = 6; // 0x6
+    field public static final int TYPE_MANAGER = 7; // 0x7
+    field public static final int TYPE_MOTHER = 8; // 0x8
+    field public static final int TYPE_PARENT = 9; // 0x9
+    field public static final int TYPE_PARTNER = 10; // 0xa
+    field public static final int TYPE_REFERRED_BY = 11; // 0xb
+    field public static final int TYPE_RELATIVE = 12; // 0xc
+    field public static final int TYPE_SISTER = 13; // 0xd
+    field public static final int TYPE_SPOUSE = 14; // 0xe
+  }
+
+  public static final class ContactsContract.CommonDataKinds.SipAddress implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sip_address";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String SIP_ADDRESS = "data1";
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.StructuredName implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/name";
+    field public static final String DISPLAY_NAME = "data1";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String FAMILY_NAME = "data3";
+    field public static final String FULL_NAME_STYLE = "data10";
+    field public static final String GIVEN_NAME = "data2";
+    field public static final String MIDDLE_NAME = "data5";
+    field public static final String PHONETIC_FAMILY_NAME = "data9";
+    field public static final String PHONETIC_GIVEN_NAME = "data7";
+    field public static final String PHONETIC_MIDDLE_NAME = "data8";
+    field public static final String PHONETIC_NAME_STYLE = "data11";
+    field public static final String PREFIX = "data4";
+    field public static final String SUFFIX = "data6";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.StructuredPostal implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CITY = "data7";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/postal-address_v2";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/postal-address_v2";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String COUNTRY = "data10";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String FORMATTED_ADDRESS = "data1";
+    field public static final String NEIGHBORHOOD = "data6";
+    field public static final String POBOX = "data5";
+    field public static final String POSTCODE = "data9";
+    field public static final String REGION = "data8";
+    field public static final String STREET = "data4";
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Website implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/website";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final int TYPE_BLOG = 2; // 0x2
+    field public static final int TYPE_FTP = 6; // 0x6
+    field public static final int TYPE_HOME = 4; // 0x4
+    field public static final int TYPE_HOMEPAGE = 1; // 0x1
+    field public static final int TYPE_OTHER = 7; // 0x7
+    field public static final int TYPE_PROFILE = 3; // 0x3
+    field public static final int TYPE_WORK = 5; // 0x5
+    field public static final String URL = "data1";
+  }
+
+  protected static interface ContactsContract.ContactNameColumns {
+    field public static final String DISPLAY_NAME_ALTERNATIVE = "display_name_alt";
+    field public static final String DISPLAY_NAME_PRIMARY = "display_name";
+    field public static final String DISPLAY_NAME_SOURCE = "display_name_source";
+    field public static final String PHONETIC_NAME = "phonetic_name";
+    field public static final String PHONETIC_NAME_STYLE = "phonetic_name_style";
+    field public static final String SORT_KEY_ALTERNATIVE = "sort_key_alt";
+    field public static final String SORT_KEY_PRIMARY = "sort_key";
+  }
+
+  protected static interface ContactsContract.ContactOptionsColumns {
+    field public static final String CUSTOM_RINGTONE = "custom_ringtone";
+    field @Deprecated public static final String LAST_TIME_CONTACTED = "last_time_contacted";
+    field public static final String PINNED = "pinned";
+    field public static final String SEND_TO_VOICEMAIL = "send_to_voicemail";
+    field public static final String STARRED = "starred";
+    field @Deprecated public static final String TIMES_CONTACTED = "times_contacted";
+  }
+
+  protected static interface ContactsContract.ContactStatusColumns {
+    field public static final String CONTACT_CHAT_CAPABILITY = "contact_chat_capability";
+    field public static final String CONTACT_PRESENCE = "contact_presence";
+    field public static final String CONTACT_STATUS = "contact_status";
+    field public static final String CONTACT_STATUS_ICON = "contact_status_icon";
+    field public static final String CONTACT_STATUS_LABEL = "contact_status_label";
+    field public static final String CONTACT_STATUS_RES_PACKAGE = "contact_status_res_package";
+    field public static final String CONTACT_STATUS_TIMESTAMP = "contact_status_ts";
+  }
+
+  public static class ContactsContract.Contacts implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns {
+    method public static android.net.Uri getLookupUri(android.content.ContentResolver, android.net.Uri);
+    method public static android.net.Uri getLookupUri(long, String);
+    method public static boolean isEnterpriseContactId(long);
+    method public static android.net.Uri lookupContact(android.content.ContentResolver, android.net.Uri);
+    method @Deprecated public static void markAsContacted(android.content.ContentResolver, long);
+    method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri, boolean);
+    method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri);
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field @Deprecated public static final android.net.Uri CONTENT_FREQUENT_URI;
+    field public static final android.net.Uri CONTENT_GROUP_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact";
+    field public static final android.net.Uri CONTENT_LOOKUP_URI;
+    field public static final android.net.Uri CONTENT_MULTI_VCARD_URI;
+    field public static final android.net.Uri CONTENT_STREQUENT_FILTER_URI;
+    field public static final android.net.Uri CONTENT_STREQUENT_URI;
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String CONTENT_VCARD_TYPE = "text/x-vcard";
+    field public static final android.net.Uri CONTENT_VCARD_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String QUERY_PARAMETER_VCARD_NO_PHOTO = "no_photo";
+  }
+
+  public static final class ContactsContract.Contacts.AggregationSuggestions implements android.provider.BaseColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns {
+    field public static final String CONTENT_DIRECTORY = "suggestions";
+  }
+
+  public static final class ContactsContract.Contacts.AggregationSuggestions.Builder {
+    ctor public ContactsContract.Contacts.AggregationSuggestions.Builder();
+    method public android.provider.ContactsContract.Contacts.AggregationSuggestions.Builder addNameParameter(String);
+    method public android.net.Uri build();
+    method public android.provider.ContactsContract.Contacts.AggregationSuggestions.Builder setContactId(long);
+    method public android.provider.ContactsContract.Contacts.AggregationSuggestions.Builder setLimit(int);
+  }
+
+  public static final class ContactsContract.Contacts.Data implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns {
+    field public static final String CONTENT_DIRECTORY = "data";
+  }
+
+  public static final class ContactsContract.Contacts.Entity implements android.provider.BaseColumns android.provider.ContactsContract.BaseSyncColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.DataUsageStatColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.StatusColumns android.provider.ContactsContract.SyncColumns {
+    field public static final String CONTENT_DIRECTORY = "entities";
+    field public static final String DATA_ID = "data_id";
+    field public static final String RAW_CONTACT_ID = "raw_contact_id";
+  }
+
+  public static final class ContactsContract.Contacts.Photo implements android.provider.BaseColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_DIRECTORY = "photo";
+    field public static final String DISPLAY_PHOTO = "display_photo";
+    field public static final String PHOTO = "data15";
+    field public static final String PHOTO_FILE_ID = "data14";
+  }
+
+  protected static interface ContactsContract.ContactsColumns {
+    field public static final String CONTACT_LAST_UPDATED_TIMESTAMP = "contact_last_updated_timestamp";
+    field public static final String DISPLAY_NAME = "display_name";
+    field public static final String HAS_PHONE_NUMBER = "has_phone_number";
+    field public static final String IN_DEFAULT_DIRECTORY = "in_default_directory";
+    field public static final String IN_VISIBLE_GROUP = "in_visible_group";
+    field public static final String IS_USER_PROFILE = "is_user_profile";
+    field public static final String LOOKUP_KEY = "lookup";
+    field public static final String NAME_RAW_CONTACT_ID = "name_raw_contact_id";
+    field public static final String PHOTO_FILE_ID = "photo_file_id";
+    field public static final String PHOTO_ID = "photo_id";
+    field public static final String PHOTO_THUMBNAIL_URI = "photo_thumb_uri";
+    field public static final String PHOTO_URI = "photo_uri";
+  }
+
+  public static final class ContactsContract.Data implements android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static android.net.Uri getContactLookupUri(android.content.ContentResolver, android.net.Uri);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/data";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String VISIBLE_CONTACTS_ONLY = "visible_contacts_only";
+  }
+
+  protected static interface ContactsContract.DataColumns {
+    field @Deprecated public static final String CARRIER_PRESENCE = "carrier_presence";
+    field @Deprecated public static final int CARRIER_PRESENCE_VT_CAPABLE = 1; // 0x1
+    field public static final String DATA1 = "data1";
+    field public static final String DATA10 = "data10";
+    field public static final String DATA11 = "data11";
+    field public static final String DATA12 = "data12";
+    field public static final String DATA13 = "data13";
+    field public static final String DATA14 = "data14";
+    field public static final String DATA15 = "data15";
+    field public static final String DATA2 = "data2";
+    field public static final String DATA3 = "data3";
+    field public static final String DATA4 = "data4";
+    field public static final String DATA5 = "data5";
+    field public static final String DATA6 = "data6";
+    field public static final String DATA7 = "data7";
+    field public static final String DATA8 = "data8";
+    field public static final String DATA9 = "data9";
+    field public static final String DATA_VERSION = "data_version";
+    field public static final String IS_PRIMARY = "is_primary";
+    field public static final String IS_READ_ONLY = "is_read_only";
+    field public static final String IS_SUPER_PRIMARY = "is_super_primary";
+    field public static final String MIMETYPE = "mimetype";
+    field public static final String PREFERRED_PHONE_ACCOUNT_COMPONENT_NAME = "preferred_phone_account_component_name";
+    field public static final String PREFERRED_PHONE_ACCOUNT_ID = "preferred_phone_account_id";
+    field public static final String RAW_CONTACT_ID = "raw_contact_id";
+    field public static final String RES_PACKAGE = "res_package";
+    field public static final String SYNC1 = "data_sync1";
+    field public static final String SYNC2 = "data_sync2";
+    field public static final String SYNC3 = "data_sync3";
+    field public static final String SYNC4 = "data_sync4";
+  }
+
+  protected static interface ContactsContract.DataColumnsWithJoins extends android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.DataUsageStatColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.StatusColumns {
+  }
+
+  @Deprecated public static final class ContactsContract.DataUsageFeedback {
+    ctor @Deprecated public ContactsContract.DataUsageFeedback();
+    field @Deprecated public static final android.net.Uri DELETE_USAGE_URI;
+    field @Deprecated public static final android.net.Uri FEEDBACK_URI;
+    field @Deprecated public static final String USAGE_TYPE = "type";
+    field @Deprecated public static final String USAGE_TYPE_CALL = "call";
+    field @Deprecated public static final String USAGE_TYPE_LONG_TEXT = "long_text";
+    field @Deprecated public static final String USAGE_TYPE_SHORT_TEXT = "short_text";
+  }
+
+  protected static interface ContactsContract.DataUsageStatColumns {
+    field @Deprecated public static final String LAST_TIME_USED = "last_time_used";
+    field @Deprecated public static final String TIMES_USED = "times_used";
+  }
+
+  public static final class ContactsContract.DeletedContacts implements android.provider.ContactsContract.DeletedContactsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final long DAYS_KEPT_MILLISECONDS = 2592000000L; // 0x9a7ec800L
+  }
+
+  protected static interface ContactsContract.DeletedContactsColumns {
+    field public static final String CONTACT_DELETED_TIMESTAMP = "contact_deleted_timestamp";
+    field public static final String CONTACT_ID = "contact_id";
+  }
+
+  public static final class ContactsContract.Directory implements android.provider.BaseColumns {
+    method public static boolean isEnterpriseDirectoryId(long);
+    method public static boolean isRemoteDirectoryId(long);
+    method public static void notifyDirectoryChange(android.content.ContentResolver);
+    field public static final String ACCOUNT_NAME = "accountName";
+    field public static final String ACCOUNT_TYPE = "accountType";
+    field public static final String CALLER_PACKAGE_PARAM_KEY = "callerPackage";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final long DEFAULT = 0L; // 0x0L
+    field public static final String DIRECTORY_AUTHORITY = "authority";
+    field public static final String DISPLAY_NAME = "displayName";
+    field public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+    field public static final long ENTERPRISE_DEFAULT = 1000000000L; // 0x3b9aca00L
+    field public static final long ENTERPRISE_LOCAL_INVISIBLE = 1000000001L; // 0x3b9aca01L
+    field public static final String EXPORT_SUPPORT = "exportSupport";
+    field public static final int EXPORT_SUPPORT_ANY_ACCOUNT = 2; // 0x2
+    field public static final int EXPORT_SUPPORT_NONE = 0; // 0x0
+    field public static final int EXPORT_SUPPORT_SAME_ACCOUNT_ONLY = 1; // 0x1
+    field public static final long LOCAL_INVISIBLE = 1L; // 0x1L
+    field public static final String PACKAGE_NAME = "packageName";
+    field public static final String PHOTO_SUPPORT = "photoSupport";
+    field public static final int PHOTO_SUPPORT_FULL = 3; // 0x3
+    field public static final int PHOTO_SUPPORT_FULL_SIZE_ONLY = 2; // 0x2
+    field public static final int PHOTO_SUPPORT_NONE = 0; // 0x0
+    field public static final int PHOTO_SUPPORT_THUMBNAIL_ONLY = 1; // 0x1
+    field public static final String SHORTCUT_SUPPORT = "shortcutSupport";
+    field public static final int SHORTCUT_SUPPORT_DATA_ITEMS_ONLY = 1; // 0x1
+    field public static final int SHORTCUT_SUPPORT_FULL = 2; // 0x2
+    field public static final int SHORTCUT_SUPPORT_NONE = 0; // 0x0
+    field public static final String TYPE_RESOURCE_ID = "typeResourceId";
+  }
+
+  public static interface ContactsContract.DisplayNameSources {
+    field public static final int EMAIL = 10; // 0xa
+    field public static final int NICKNAME = 35; // 0x23
+    field public static final int ORGANIZATION = 30; // 0x1e
+    field public static final int PHONE = 20; // 0x14
+    field public static final int STRUCTURED_NAME = 40; // 0x28
+    field public static final int STRUCTURED_PHONETIC_NAME = 37; // 0x25
+    field public static final int UNDEFINED = 0; // 0x0
+  }
+
+  public static final class ContactsContract.DisplayPhoto {
+    field public static final android.net.Uri CONTENT_MAX_DIMENSIONS_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DISPLAY_MAX_DIM = "display_max_dim";
+    field public static final String THUMBNAIL_MAX_DIM = "thumbnail_max_dim";
+  }
+
+  public static interface ContactsContract.FullNameStyle {
+    field public static final int CHINESE = 3; // 0x3
+    field public static final int CJK = 2; // 0x2
+    field public static final int JAPANESE = 4; // 0x4
+    field public static final int KOREAN = 5; // 0x5
+    field public static final int UNDEFINED = 0; // 0x0
+    field public static final int WESTERN = 1; // 0x1
+  }
+
+  public static final class ContactsContract.Groups implements android.provider.BaseColumns android.provider.ContactsContract.GroupsColumns android.provider.ContactsContract.SyncColumns {
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/group";
+    field public static final android.net.Uri CONTENT_SUMMARY_URI;
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/group";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface ContactsContract.GroupsColumns {
+    field public static final String AUTO_ADD = "auto_add";
+    field public static final String DATA_SET = "data_set";
+    field public static final String DELETED = "deleted";
+    field public static final String FAVORITES = "favorites";
+    field public static final String GROUP_IS_READ_ONLY = "group_is_read_only";
+    field public static final String GROUP_VISIBLE = "group_visible";
+    field public static final String NOTES = "notes";
+    field public static final String RES_PACKAGE = "res_package";
+    field public static final String SHOULD_SYNC = "should_sync";
+    field public static final String SUMMARY_COUNT = "summ_count";
+    field public static final String SUMMARY_WITH_PHONES = "summ_phones";
+    field public static final String SYSTEM_ID = "system_id";
+    field public static final String TITLE = "title";
+    field public static final String TITLE_RES = "title_res";
+  }
+
+  public static final class ContactsContract.Intents {
+    ctor public ContactsContract.Intents();
+    field public static final String ACTION_VOICE_SEND_MESSAGE_TO_CONTACTS = "android.provider.action.VOICE_SEND_MESSAGE_TO_CONTACTS";
+    field public static final String ATTACH_IMAGE = "com.android.contacts.action.ATTACH_IMAGE";
+    field public static final String CONTACTS_DATABASE_CREATED = "android.provider.Contacts.DATABASE_CREATED";
+    field public static final String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION";
+    field public static final String EXTRA_FORCE_CREATE = "com.android.contacts.action.FORCE_CREATE";
+    field public static final String EXTRA_RECIPIENT_CONTACT_CHAT_ID = "android.provider.extra.RECIPIENT_CONTACT_CHAT_ID";
+    field public static final String EXTRA_RECIPIENT_CONTACT_NAME = "android.provider.extra.RECIPIENT_CONTACT_NAME";
+    field public static final String EXTRA_RECIPIENT_CONTACT_URI = "android.provider.extra.RECIPIENT_CONTACT_URI";
+    field public static final String INVITE_CONTACT = "com.android.contacts.action.INVITE_CONTACT";
+    field public static final String METADATA_ACCOUNT_TYPE = "android.provider.account_type";
+    field public static final String METADATA_MIMETYPE = "android.provider.mimetype";
+    field public static final String SEARCH_SUGGESTION_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED";
+    field public static final String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED";
+    field public static final String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED";
+    field public static final String SHOW_OR_CREATE_CONTACT = "com.android.contacts.action.SHOW_OR_CREATE_CONTACT";
+  }
+
+  public static final class ContactsContract.Intents.Insert {
+    ctor public ContactsContract.Intents.Insert();
+    field public static final String ACTION = "android.intent.action.INSERT";
+    field public static final String COMPANY = "company";
+    field public static final String DATA = "data";
+    field public static final String EMAIL = "email";
+    field public static final String EMAIL_ISPRIMARY = "email_isprimary";
+    field public static final String EMAIL_TYPE = "email_type";
+    field public static final String EXTRA_ACCOUNT = "android.provider.extra.ACCOUNT";
+    field public static final String EXTRA_DATA_SET = "android.provider.extra.DATA_SET";
+    field public static final String FULL_MODE = "full_mode";
+    field public static final String IM_HANDLE = "im_handle";
+    field public static final String IM_ISPRIMARY = "im_isprimary";
+    field public static final String IM_PROTOCOL = "im_protocol";
+    field public static final String JOB_TITLE = "job_title";
+    field public static final String NAME = "name";
+    field public static final String NOTES = "notes";
+    field public static final String PHONE = "phone";
+    field public static final String PHONETIC_NAME = "phonetic_name";
+    field public static final String PHONE_ISPRIMARY = "phone_isprimary";
+    field public static final String PHONE_TYPE = "phone_type";
+    field public static final String POSTAL = "postal";
+    field public static final String POSTAL_ISPRIMARY = "postal_isprimary";
+    field public static final String POSTAL_TYPE = "postal_type";
+    field public static final String SECONDARY_EMAIL = "secondary_email";
+    field public static final String SECONDARY_EMAIL_TYPE = "secondary_email_type";
+    field public static final String SECONDARY_PHONE = "secondary_phone";
+    field public static final String SECONDARY_PHONE_TYPE = "secondary_phone_type";
+    field public static final String TERTIARY_EMAIL = "tertiary_email";
+    field public static final String TERTIARY_EMAIL_TYPE = "tertiary_email_type";
+    field public static final String TERTIARY_PHONE = "tertiary_phone";
+    field public static final String TERTIARY_PHONE_TYPE = "tertiary_phone_type";
+  }
+
+  public static final class ContactsContract.PhoneLookup implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.PhoneLookupColumns {
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String QUERY_PARAMETER_SIP_ADDRESS = "sip";
+  }
+
+  protected static interface ContactsContract.PhoneLookupColumns {
+    field public static final String CONTACT_ID = "contact_id";
+    field public static final String DATA_ID = "data_id";
+    field public static final String LABEL = "label";
+    field public static final String NORMALIZED_NUMBER = "normalized_number";
+    field public static final String NUMBER = "number";
+    field public static final String TYPE = "type";
+  }
+
+  public static interface ContactsContract.PhoneticNameStyle {
+    field public static final int JAPANESE = 4; // 0x4
+    field public static final int KOREAN = 5; // 0x5
+    field public static final int PINYIN = 3; // 0x3
+    field public static final int UNDEFINED = 0; // 0x0
+  }
+
+  public static final class ContactsContract.PinnedPositions {
+    ctor public ContactsContract.PinnedPositions();
+    method public static void pin(android.content.ContentResolver, long, int);
+    method public static void undemote(android.content.ContentResolver, long);
+    field public static final int DEMOTED = -1; // 0xffffffff
+    field public static final int UNPINNED = 0; // 0x0
+  }
+
+  @Deprecated public static final class ContactsContract.Presence extends android.provider.ContactsContract.StatusUpdates {
+    ctor @Deprecated public ContactsContract.Presence();
+  }
+
+  protected static interface ContactsContract.PresenceColumns {
+    field public static final String CUSTOM_PROTOCOL = "custom_protocol";
+    field public static final String DATA_ID = "presence_data_id";
+    field public static final String IM_ACCOUNT = "im_account";
+    field public static final String IM_HANDLE = "im_handle";
+    field public static final String PROTOCOL = "protocol";
+  }
+
+  public static final class ContactsContract.Profile implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns {
+    field public static final android.net.Uri CONTENT_RAW_CONTACTS_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri CONTENT_VCARD_URI;
+    field public static final long MIN_ID = 9223372034707292160L; // 0x7fffffff80000000L
+  }
+
+  public static final class ContactsContract.ProfileSyncState implements android.provider.SyncStateContract.Columns {
+    method public static byte[] get(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.util.Pair<android.net.Uri,byte[]> getWithUri(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.content.ContentProviderOperation newSetOperation(android.accounts.Account, byte[]);
+    method public static void set(android.content.ContentProviderClient, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    field public static final String CONTENT_DIRECTORY = "syncstate";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static final class ContactsContract.ProviderStatus {
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/provider_status";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATABASE_CREATION_TIMESTAMP = "database_creation_timestamp";
+    field public static final String STATUS = "status";
+    field public static final int STATUS_BUSY = 1; // 0x1
+    field public static final int STATUS_EMPTY = 2; // 0x2
+    field public static final int STATUS_NORMAL = 0; // 0x0
+  }
+
+  public static final class ContactsContract.QuickContact {
+    ctor public ContactsContract.QuickContact();
+    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, int, String[]);
+    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, int, String[]);
+    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, String[], String);
+    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, String[], String);
+    field public static final String ACTION_QUICK_CONTACT = "android.provider.action.QUICK_CONTACT";
+    field public static final String EXTRA_EXCLUDE_MIMES = "android.provider.extra.EXCLUDE_MIMES";
+    field public static final String EXTRA_MODE = "android.provider.extra.MODE";
+    field public static final String EXTRA_PRIORITIZED_MIMETYPE = "android.provider.extra.PRIORITIZED_MIMETYPE";
+    field public static final int MODE_LARGE = 3; // 0x3
+    field public static final int MODE_MEDIUM = 2; // 0x2
+    field public static final int MODE_SMALL = 1; // 0x1
+  }
+
+  public static final class ContactsContract.RawContacts implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.SyncColumns {
+    method public static android.net.Uri getContactLookupUri(android.content.ContentResolver, android.net.Uri);
+    method @Nullable public static String getLocalAccountName(@NonNull android.content.Context);
+    method @Nullable public static String getLocalAccountType(@NonNull android.content.Context);
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor);
+    field public static final int AGGREGATION_MODE_DEFAULT = 0; // 0x0
+    field public static final int AGGREGATION_MODE_DISABLED = 3; // 0x3
+    field @Deprecated public static final int AGGREGATION_MODE_IMMEDIATE = 1; // 0x1
+    field public static final int AGGREGATION_MODE_SUSPENDED = 2; // 0x2
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/raw_contact";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static final class ContactsContract.RawContacts.Data implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns {
+    field public static final String CONTENT_DIRECTORY = "data";
+  }
+
+  public static final class ContactsContract.RawContacts.DisplayPhoto {
+    field public static final String CONTENT_DIRECTORY = "display_photo";
+  }
+
+  public static final class ContactsContract.RawContacts.Entity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns {
+    field public static final String CONTENT_DIRECTORY = "entity";
+    field public static final String DATA_ID = "data_id";
+  }
+
+  protected static interface ContactsContract.RawContactsColumns {
+    field public static final String ACCOUNT_TYPE_AND_DATA_SET = "account_type_and_data_set";
+    field public static final String AGGREGATION_MODE = "aggregation_mode";
+    field public static final String BACKUP_ID = "backup_id";
+    field public static final String CONTACT_ID = "contact_id";
+    field public static final String DATA_SET = "data_set";
+    field public static final String DELETED = "deleted";
+    field @Deprecated public static final String METADATA_DIRTY = "metadata_dirty";
+    field public static final String RAW_CONTACT_IS_READ_ONLY = "raw_contact_is_read_only";
+    field public static final String RAW_CONTACT_IS_USER_PROFILE = "raw_contact_is_user_profile";
+  }
+
+  public static final class ContactsContract.RawContactsEntity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.RawContactsColumns {
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact_entity";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_ID = "data_id";
+    field public static final android.net.Uri PROFILE_CONTENT_URI;
+  }
+
+  public static class ContactsContract.SearchSnippets {
+    ctor public ContactsContract.SearchSnippets();
+    field public static final String DEFERRED_SNIPPETING_KEY = "deferred_snippeting";
+    field public static final String SNIPPET = "snippet";
+  }
+
+  public static final class ContactsContract.Settings implements android.provider.ContactsContract.SettingsColumns {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/setting";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/setting";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface ContactsContract.SettingsColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String ANY_UNSYNCED = "any_unsynced";
+    field public static final String DATA_SET = "data_set";
+    field public static final String SHOULD_SYNC = "should_sync";
+    field public static final String UNGROUPED_COUNT = "summ_count";
+    field public static final String UNGROUPED_VISIBLE = "ungrouped_visible";
+    field public static final String UNGROUPED_WITH_PHONES = "summ_phones";
+  }
+
+  public static final class ContactsContract.SimAccount implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getAccountName();
+    method @NonNull public String getAccountType();
+    method public int getEfType();
+    method public int getSimSlotIndex();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ADN_EF_TYPE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.provider.ContactsContract.SimAccount> CREATOR;
+    field public static final int FDN_EF_TYPE = 2; // 0x2
+    field public static final int SDN_EF_TYPE = 3; // 0x3
+    field public static final int UNKNOWN_EF_TYPE = 0; // 0x0
+  }
+
+  public static final class ContactsContract.SimContacts {
+    method @NonNull public static java.util.List<android.provider.ContactsContract.SimAccount> getSimAccounts(@NonNull android.content.ContentResolver);
+    field public static final String ACTION_SIM_ACCOUNTS_CHANGED = "android.provider.action.SIM_ACCOUNTS_CHANGED";
+  }
+
+  protected static interface ContactsContract.StatusColumns {
+    field public static final int AVAILABLE = 5; // 0x5
+    field public static final int AWAY = 2; // 0x2
+    field public static final int CAPABILITY_HAS_CAMERA = 4; // 0x4
+    field public static final int CAPABILITY_HAS_VIDEO = 2; // 0x2
+    field public static final int CAPABILITY_HAS_VOICE = 1; // 0x1
+    field public static final String CHAT_CAPABILITY = "chat_capability";
+    field public static final int DO_NOT_DISTURB = 4; // 0x4
+    field public static final int IDLE = 3; // 0x3
+    field public static final int INVISIBLE = 1; // 0x1
+    field public static final int OFFLINE = 0; // 0x0
+    field public static final String PRESENCE = "mode";
+    field @Deprecated public static final String PRESENCE_CUSTOM_STATUS = "status";
+    field @Deprecated public static final String PRESENCE_STATUS = "mode";
+    field public static final String STATUS = "status";
+    field public static final String STATUS_ICON = "status_icon";
+    field public static final String STATUS_LABEL = "status_label";
+    field public static final String STATUS_RES_PACKAGE = "status_res_package";
+    field public static final String STATUS_TIMESTAMP = "status_ts";
+  }
+
+  public static class ContactsContract.StatusUpdates implements android.provider.ContactsContract.PresenceColumns android.provider.ContactsContract.StatusColumns {
+    method public static final int getPresenceIconResourceId(int);
+    method public static final int getPresencePrecedence(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/status-update";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/status-update";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri PROFILE_CONTENT_URI;
+  }
+
+  protected static interface ContactsContract.SyncColumns extends android.provider.ContactsContract.BaseSyncColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String DIRTY = "dirty";
+    field public static final String SOURCE_ID = "sourceid";
+    field public static final String VERSION = "version";
+  }
+
+  public static final class ContactsContract.SyncState implements android.provider.SyncStateContract.Columns {
+    method public static byte[] get(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.util.Pair<android.net.Uri,byte[]> getWithUri(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.content.ContentProviderOperation newSetOperation(android.accounts.Account, byte[]);
+    method public static void set(android.content.ContentProviderClient, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    field public static final String CONTENT_DIRECTORY = "syncstate";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public final class DocumentsContract {
+    method public static android.net.Uri buildChildDocumentsUri(String, String);
+    method public static android.net.Uri buildChildDocumentsUriUsingTree(android.net.Uri, String);
+    method public static android.net.Uri buildDocumentUri(String, String);
+    method public static android.net.Uri buildDocumentUriUsingTree(android.net.Uri, String);
+    method public static android.net.Uri buildRecentDocumentsUri(String, String);
+    method public static android.net.Uri buildRootUri(String, String);
+    method public static android.net.Uri buildRootsUri(String);
+    method public static android.net.Uri buildSearchDocumentsUri(String, String, String);
+    method public static android.net.Uri buildTreeDocumentUri(String, String);
+    method @Nullable public static android.net.Uri copyDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public static android.net.Uri createDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull String, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public static android.content.IntentSender createWebLinkIntent(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method public static boolean deleteDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static void ejectRoot(@NonNull android.content.ContentResolver, @NonNull android.net.Uri);
+    method @Nullable public static android.provider.DocumentsContract.Path findDocumentPath(@NonNull android.content.ContentResolver, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static String getDocumentId(android.net.Uri);
+    method @Nullable public static android.os.Bundle getDocumentMetadata(@NonNull android.content.ContentResolver, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public static android.graphics.Bitmap getDocumentThumbnail(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.graphics.Point, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public static String getRootId(android.net.Uri);
+    method public static String getSearchDocumentsQuery(android.net.Uri);
+    method public static String getTreeDocumentId(android.net.Uri);
+    method public static boolean isChildDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static boolean isDocumentUri(android.content.Context, @Nullable android.net.Uri);
+    method public static boolean isRootUri(@NonNull android.content.Context, @Nullable android.net.Uri);
+    method public static boolean isRootsUri(@NonNull android.content.Context, @Nullable android.net.Uri);
+    method public static boolean isTreeUri(android.net.Uri);
+    method @Nullable public static android.net.Uri moveDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static boolean removeDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public static android.net.Uri renameDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    field public static final String ACTION_DOCUMENT_SETTINGS = "android.provider.action.DOCUMENT_SETTINGS";
+    field public static final String EXTRA_ERROR = "error";
+    field public static final String EXTRA_EXCLUDE_SELF = "android.provider.extra.EXCLUDE_SELF";
+    field public static final String EXTRA_INFO = "info";
+    field public static final String EXTRA_INITIAL_URI = "android.provider.extra.INITIAL_URI";
+    field public static final String EXTRA_LOADING = "loading";
+    field public static final String EXTRA_ORIENTATION = "android.provider.extra.ORIENTATION";
+    field public static final String EXTRA_PROMPT = "android.provider.extra.PROMPT";
+    field public static final String METADATA_EXIF = "android:documentExif";
+    field public static final String METADATA_TREE_COUNT = "android:metadataTreeCount";
+    field public static final String METADATA_TREE_SIZE = "android:metadataTreeSize";
+    field public static final String METADATA_TYPES = "android:documentMetadataTypes";
+    field public static final String PROVIDER_INTERFACE = "android.content.action.DOCUMENTS_PROVIDER";
+    field public static final String QUERY_ARG_DISPLAY_NAME = "android:query-arg-display-name";
+    field public static final String QUERY_ARG_EXCLUDE_MEDIA = "android:query-arg-exclude-media";
+    field public static final String QUERY_ARG_FILE_SIZE_OVER = "android:query-arg-file-size-over";
+    field public static final String QUERY_ARG_LAST_MODIFIED_AFTER = "android:query-arg-last-modified-after";
+    field public static final String QUERY_ARG_MIME_TYPES = "android:query-arg-mime-types";
+  }
+
+  public static final class DocumentsContract.Document {
+    field public static final String COLUMN_DISPLAY_NAME = "_display_name";
+    field public static final String COLUMN_DOCUMENT_ID = "document_id";
+    field public static final String COLUMN_FLAGS = "flags";
+    field public static final String COLUMN_ICON = "icon";
+    field public static final String COLUMN_LAST_MODIFIED = "last_modified";
+    field public static final String COLUMN_MIME_TYPE = "mime_type";
+    field public static final String COLUMN_SIZE = "_size";
+    field public static final String COLUMN_SUMMARY = "summary";
+    field public static final int FLAG_DIR_BLOCKS_OPEN_DOCUMENT_TREE = 32768; // 0x8000
+    field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10
+    field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20
+    field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8
+    field public static final int FLAG_PARTIAL = 8192; // 0x2000
+    field public static final int FLAG_SUPPORTS_COPY = 128; // 0x80
+    field public static final int FLAG_SUPPORTS_DELETE = 4; // 0x4
+    field public static final int FLAG_SUPPORTS_METADATA = 16384; // 0x4000
+    field public static final int FLAG_SUPPORTS_MOVE = 256; // 0x100
+    field public static final int FLAG_SUPPORTS_REMOVE = 1024; // 0x400
+    field public static final int FLAG_SUPPORTS_RENAME = 64; // 0x40
+    field public static final int FLAG_SUPPORTS_SETTINGS = 2048; // 0x800
+    field public static final int FLAG_SUPPORTS_THUMBNAIL = 1; // 0x1
+    field public static final int FLAG_SUPPORTS_WRITE = 2; // 0x2
+    field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
+    field public static final int FLAG_WEB_LINKABLE = 4096; // 0x1000
+    field public static final String MIME_TYPE_DIR = "vnd.android.document/directory";
+  }
+
+  public static final class DocumentsContract.Path implements android.os.Parcelable {
+    ctor public DocumentsContract.Path(@Nullable String, java.util.List<java.lang.String>);
+    method public int describeContents();
+    method public java.util.List<java.lang.String> getPath();
+    method @Nullable public String getRootId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.provider.DocumentsContract.Path> CREATOR;
+  }
+
+  public static final class DocumentsContract.Root {
+    field public static final String COLUMN_AVAILABLE_BYTES = "available_bytes";
+    field public static final String COLUMN_CAPACITY_BYTES = "capacity_bytes";
+    field public static final String COLUMN_DOCUMENT_ID = "document_id";
+    field public static final String COLUMN_FLAGS = "flags";
+    field public static final String COLUMN_ICON = "icon";
+    field public static final String COLUMN_MIME_TYPES = "mime_types";
+    field public static final String COLUMN_QUERY_ARGS = "query_args";
+    field public static final String COLUMN_ROOT_ID = "root_id";
+    field public static final String COLUMN_SUMMARY = "summary";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final int FLAG_EMPTY = 64; // 0x40
+    field public static final int FLAG_LOCAL_ONLY = 2; // 0x2
+    field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1
+    field public static final int FLAG_SUPPORTS_EJECT = 32; // 0x20
+    field public static final int FLAG_SUPPORTS_IS_CHILD = 16; // 0x10
+    field public static final int FLAG_SUPPORTS_RECENTS = 4; // 0x4
+    field public static final int FLAG_SUPPORTS_SEARCH = 8; // 0x8
+    field public static final String MIME_TYPE_ITEM = "vnd.android.document/root";
+  }
+
+  public abstract class DocumentsProvider extends android.content.ContentProvider {
+    ctor public DocumentsProvider();
+    method public String copyDocument(String, String) throws java.io.FileNotFoundException;
+    method public String createDocument(String, String, String) throws java.io.FileNotFoundException;
+    method public android.content.IntentSender createWebLinkIntent(String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method public final int delete(android.net.Uri, String, String[]);
+    method public void deleteDocument(String) throws java.io.FileNotFoundException;
+    method public void ejectRoot(String);
+    method public android.provider.DocumentsContract.Path findDocumentPath(@Nullable String, String) throws java.io.FileNotFoundException;
+    method @Nullable public android.os.Bundle getDocumentMetadata(@NonNull String) throws java.io.FileNotFoundException;
+    method public String[] getDocumentStreamTypes(String, String);
+    method public String getDocumentType(String) throws java.io.FileNotFoundException;
+    method public final String getType(android.net.Uri);
+    method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean isChildDocument(String, String);
+    method public String moveDocument(String, String, String) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, String) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public abstract android.os.ParcelFileDescriptor openDocument(String, String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public android.content.res.AssetFileDescriptor openDocumentThumbnail(String, android.graphics.Point, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public final android.os.ParcelFileDescriptor openFile(android.net.Uri, String) throws java.io.FileNotFoundException;
+    method public final android.os.ParcelFileDescriptor openFile(android.net.Uri, String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, String, android.os.Bundle) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public android.content.res.AssetFileDescriptor openTypedDocument(String, String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public final android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method public final android.database.Cursor query(android.net.Uri, String[], android.os.Bundle, android.os.CancellationSignal);
+    method public abstract android.database.Cursor queryChildDocuments(String, String[], String) throws java.io.FileNotFoundException;
+    method public android.database.Cursor queryChildDocuments(String, @Nullable String[], @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method public abstract android.database.Cursor queryDocument(String, String[]) throws java.io.FileNotFoundException;
+    method public android.database.Cursor queryRecentDocuments(String, String[]) throws java.io.FileNotFoundException;
+    method @Nullable public android.database.Cursor queryRecentDocuments(@NonNull String, @Nullable String[], @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public abstract android.database.Cursor queryRoots(String[]) throws java.io.FileNotFoundException;
+    method public android.database.Cursor querySearchDocuments(String, String, String[]) throws java.io.FileNotFoundException;
+    method @Nullable public android.database.Cursor querySearchDocuments(@NonNull String, @Nullable String[], @NonNull android.os.Bundle) throws java.io.FileNotFoundException;
+    method public void removeDocument(String, String) throws java.io.FileNotFoundException;
+    method public String renameDocument(String, String) throws java.io.FileNotFoundException;
+    method public final void revokeDocumentPermission(String);
+    method public final int update(android.net.Uri, android.content.ContentValues, String, String[]);
+  }
+
+  @Deprecated public final class FontRequest {
+    ctor @Deprecated public FontRequest(@NonNull String, @NonNull String, @NonNull String);
+    ctor @Deprecated public FontRequest(@NonNull String, @NonNull String, @NonNull String, @NonNull java.util.List<java.util.List<byte[]>>);
+    method @Deprecated public java.util.List<java.util.List<byte[]>> getCertificates();
+    method @Deprecated public String getProviderAuthority();
+    method @Deprecated public String getProviderPackage();
+    method @Deprecated public String getQuery();
+  }
+
+  @Deprecated public class FontsContract {
+    method @Deprecated public static android.graphics.Typeface buildTypeface(@NonNull android.content.Context, @Nullable android.os.CancellationSignal, @NonNull android.provider.FontsContract.FontInfo[]);
+    method @Deprecated @NonNull public static android.provider.FontsContract.FontFamilyResult fetchFonts(@NonNull android.content.Context, @Nullable android.os.CancellationSignal, @NonNull android.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public static void requestFonts(@NonNull android.content.Context, @NonNull android.provider.FontRequest, @NonNull android.os.Handler, @Nullable android.os.CancellationSignal, @NonNull android.provider.FontsContract.FontRequestCallback);
+  }
+
+  @Deprecated public static final class FontsContract.Columns implements android.provider.BaseColumns {
+    field @Deprecated public static final String FILE_ID = "file_id";
+    field @Deprecated public static final String ITALIC = "font_italic";
+    field @Deprecated public static final String RESULT_CODE = "result_code";
+    field @Deprecated public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+    field @Deprecated public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+    field @Deprecated public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+    field @Deprecated public static final int RESULT_CODE_OK = 0; // 0x0
+    field @Deprecated public static final String TTC_INDEX = "font_ttc_index";
+    field @Deprecated public static final String VARIATION_SETTINGS = "font_variation_settings";
+    field @Deprecated public static final String WEIGHT = "font_weight";
+  }
+
+  @Deprecated public static class FontsContract.FontFamilyResult {
+    method @Deprecated @NonNull public android.provider.FontsContract.FontInfo[] getFonts();
+    method @Deprecated public int getStatusCode();
+    field @Deprecated public static final int STATUS_OK = 0; // 0x0
+    field @Deprecated public static final int STATUS_REJECTED = 3; // 0x3
+    field @Deprecated public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+    field @Deprecated public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+  }
+
+  @Deprecated public static class FontsContract.FontInfo {
+    method @Deprecated @Nullable public android.graphics.fonts.FontVariationAxis[] getAxes();
+    method @Deprecated public int getResultCode();
+    method @Deprecated @IntRange(from=0) public int getTtcIndex();
+    method @Deprecated @NonNull public android.net.Uri getUri();
+    method @Deprecated @IntRange(from=1, to=1000) public int getWeight();
+    method @Deprecated public boolean isItalic();
+  }
+
+  @Deprecated public static class FontsContract.FontRequestCallback {
+    ctor @Deprecated public FontsContract.FontRequestCallback();
+    method @Deprecated public void onTypefaceRequestFailed(int);
+    method @Deprecated public void onTypefaceRetrieved(android.graphics.Typeface);
+    field @Deprecated public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+    field @Deprecated public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+    field @Deprecated public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+    field @Deprecated public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+    field @Deprecated public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+    field @Deprecated public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+  }
+
+  @Deprecated public final class LiveFolders implements android.provider.BaseColumns {
+    field @Deprecated public static final String ACTION_CREATE_LIVE_FOLDER = "android.intent.action.CREATE_LIVE_FOLDER";
+    field @Deprecated public static final String DESCRIPTION = "description";
+    field @Deprecated public static final int DISPLAY_MODE_GRID = 1; // 0x1
+    field @Deprecated public static final int DISPLAY_MODE_LIST = 2; // 0x2
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_BASE_INTENT = "android.intent.extra.livefolder.BASE_INTENT";
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_DISPLAY_MODE = "android.intent.extra.livefolder.DISPLAY_MODE";
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_ICON = "android.intent.extra.livefolder.ICON";
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_NAME = "android.intent.extra.livefolder.NAME";
+    field @Deprecated public static final String ICON_BITMAP = "icon_bitmap";
+    field @Deprecated public static final String ICON_PACKAGE = "icon_package";
+    field @Deprecated public static final String ICON_RESOURCE = "icon_resource";
+    field @Deprecated public static final String INTENT = "intent";
+    field @Deprecated public static final String NAME = "name";
+  }
+
+  public interface OpenableColumns {
+    field public static final String DISPLAY_NAME = "_display_name";
+    field public static final String SIZE = "_size";
+  }
+
+  public class SearchRecentSuggestions {
+    ctor public SearchRecentSuggestions(android.content.Context, String, int);
+    method public void clearHistory();
+    method public void saveRecentQuery(String, String);
+    method protected void truncateHistory(android.content.ContentResolver, int);
+    field public static final String[] QUERIES_PROJECTION_1LINE;
+    field public static final String[] QUERIES_PROJECTION_2LINE;
+    field public static final int QUERIES_PROJECTION_DATE_INDEX = 1; // 0x1
+    field public static final int QUERIES_PROJECTION_DISPLAY1_INDEX = 3; // 0x3
+    field public static final int QUERIES_PROJECTION_DISPLAY2_INDEX = 4; // 0x4
+    field public static final int QUERIES_PROJECTION_QUERY_INDEX = 2; // 0x2
+  }
+
+  public final class Settings {
+    ctor public Settings();
+    method public static boolean canDrawOverlays(android.content.Context);
+    field public static final String ACTION_ACCESSIBILITY_SETTINGS = "android.settings.ACCESSIBILITY_SETTINGS";
+    field public static final String ACTION_ADD_ACCOUNT = "android.settings.ADD_ACCOUNT_SETTINGS";
+    field public static final String ACTION_AIRPLANE_MODE_SETTINGS = "android.settings.AIRPLANE_MODE_SETTINGS";
+    field public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS";
+    field public static final String ACTION_APPLICATION_DETAILS_SETTINGS = "android.settings.APPLICATION_DETAILS_SETTINGS";
+    field public static final String ACTION_APPLICATION_DEVELOPMENT_SETTINGS = "android.settings.APPLICATION_DEVELOPMENT_SETTINGS";
+    field public static final String ACTION_APPLICATION_SETTINGS = "android.settings.APPLICATION_SETTINGS";
+    field public static final String ACTION_APP_NOTIFICATION_BUBBLE_SETTINGS = "android.settings.APP_NOTIFICATION_BUBBLE_SETTINGS";
+    field public static final String ACTION_APP_NOTIFICATION_SETTINGS = "android.settings.APP_NOTIFICATION_SETTINGS";
+    field public static final String ACTION_APP_OPEN_BY_DEFAULT_SETTINGS = "android.settings.APP_OPEN_BY_DEFAULT_SETTINGS";
+    field public static final String ACTION_APP_SEARCH_SETTINGS = "android.settings.APP_SEARCH_SETTINGS";
+    field public static final String ACTION_APP_USAGE_SETTINGS = "android.settings.action.APP_USAGE_SETTINGS";
+    field public static final String ACTION_AUTO_ROTATE_SETTINGS = "android.settings.AUTO_ROTATE_SETTINGS";
+    field public static final String ACTION_BATTERY_SAVER_SETTINGS = "android.settings.BATTERY_SAVER_SETTINGS";
+    field public static final String ACTION_BIOMETRIC_ENROLL = "android.settings.BIOMETRIC_ENROLL";
+    field public static final String ACTION_BLUETOOTH_SETTINGS = "android.settings.BLUETOOTH_SETTINGS";
+    field public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
+    field public static final String ACTION_CAST_SETTINGS = "android.settings.CAST_SETTINGS";
+    field public static final String ACTION_CHANNEL_NOTIFICATION_SETTINGS = "android.settings.CHANNEL_NOTIFICATION_SETTINGS";
+    field public static final String ACTION_CONDITION_PROVIDER_SETTINGS = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
+    field public static final String ACTION_DATA_ROAMING_SETTINGS = "android.settings.DATA_ROAMING_SETTINGS";
+    field public static final String ACTION_DATA_USAGE_SETTINGS = "android.settings.DATA_USAGE_SETTINGS";
+    field public static final String ACTION_DATE_SETTINGS = "android.settings.DATE_SETTINGS";
+    field public static final String ACTION_DEVICE_INFO_SETTINGS = "android.settings.DEVICE_INFO_SETTINGS";
+    field public static final String ACTION_DISPLAY_SETTINGS = "android.settings.DISPLAY_SETTINGS";
+    field public static final String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS";
+    field @Deprecated public static final String ACTION_FINGERPRINT_ENROLL = "android.settings.FINGERPRINT_ENROLL";
+    field public static final String ACTION_HARD_KEYBOARD_SETTINGS = "android.settings.HARD_KEYBOARD_SETTINGS";
+    field public static final String ACTION_HOME_SETTINGS = "android.settings.HOME_SETTINGS";
+    field public static final String ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS = "android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS";
+    field public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS = "android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS";
+    field public static final String ACTION_INPUT_METHOD_SETTINGS = "android.settings.INPUT_METHOD_SETTINGS";
+    field public static final String ACTION_INPUT_METHOD_SUBTYPE_SETTINGS = "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS";
+    field public static final String ACTION_INTERNAL_STORAGE_SETTINGS = "android.settings.INTERNAL_STORAGE_SETTINGS";
+    field public static final String ACTION_LOCALE_SETTINGS = "android.settings.LOCALE_SETTINGS";
+    field public static final String ACTION_LOCATION_SOURCE_SETTINGS = "android.settings.LOCATION_SOURCE_SETTINGS";
+    field public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
+    field public static final String ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION = "android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION";
+    field public static final String ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS = "android.settings.MANAGE_ALL_SIM_PROFILES_SETTINGS";
+    field public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS";
+    field public static final String ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION = "android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION";
+    field public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS";
+    field public static final String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMISSION";
+    field public static final String ACTION_MANAGE_UNKNOWN_APP_SOURCES = "android.settings.MANAGE_UNKNOWN_APP_SOURCES";
+    field public static final String ACTION_MANAGE_WRITE_SETTINGS = "android.settings.action.MANAGE_WRITE_SETTINGS";
+    field public static final String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS";
+    field public static final String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS";
+    field public static final String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS";
+    field public static final String ACTION_NFC_PAYMENT_SETTINGS = "android.settings.NFC_PAYMENT_SETTINGS";
+    field public static final String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS";
+    field public static final String ACTION_NIGHT_DISPLAY_SETTINGS = "android.settings.NIGHT_DISPLAY_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_ASSISTANT_SETTINGS = "android.settings.NOTIFICATION_ASSISTANT_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_LISTENER_DETAIL_SETTINGS = "android.settings.NOTIFICATION_LISTENER_DETAIL_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS = "android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS";
+    field public static final String ACTION_PRINT_SETTINGS = "android.settings.ACTION_PRINT_SETTINGS";
+    field public static final String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS";
+    field public static final String ACTION_PROCESS_WIFI_EASY_CONNECT_URI = "android.settings.PROCESS_WIFI_EASY_CONNECT_URI";
+    field public static final String ACTION_QUICK_ACCESS_WALLET_SETTINGS = "android.settings.QUICK_ACCESS_WALLET_SETTINGS";
+    field public static final String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS";
+    field public static final String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
+    field public static final String ACTION_REQUEST_MANAGE_MEDIA = "android.settings.REQUEST_MANAGE_MEDIA";
+    field public static final String ACTION_REQUEST_SCHEDULE_EXACT_ALARM = "android.settings.REQUEST_SCHEDULE_EXACT_ALARM";
+    field public static final String ACTION_REQUEST_SET_AUTOFILL_SERVICE = "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
+    field public static final String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
+    field public static final String ACTION_SECURITY_SETTINGS = "android.settings.SECURITY_SETTINGS";
+    field public static final String ACTION_SETTINGS = "android.settings.SETTINGS";
+    field public static final String ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY = "android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY";
+    field public static final String ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
+    field public static final String ACTION_SHOW_WORK_POLICY_INFO = "android.settings.SHOW_WORK_POLICY_INFO";
+    field public static final String ACTION_SOUND_SETTINGS = "android.settings.SOUND_SETTINGS";
+    field @Deprecated public static final String ACTION_STORAGE_VOLUME_ACCESS_SETTINGS = "android.settings.STORAGE_VOLUME_ACCESS_SETTINGS";
+    field public static final String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS";
+    field public static final String ACTION_USAGE_ACCESS_SETTINGS = "android.settings.USAGE_ACCESS_SETTINGS";
+    field public static final String ACTION_USER_DICTIONARY_SETTINGS = "android.settings.USER_DICTIONARY_SETTINGS";
+    field public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE = "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
+    field public static final String ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE = "android.settings.VOICE_CONTROL_BATTERY_SAVER_MODE";
+    field public static final String ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE = "android.settings.VOICE_CONTROL_DO_NOT_DISTURB_MODE";
+    field public static final String ACTION_VOICE_INPUT_SETTINGS = "android.settings.VOICE_INPUT_SETTINGS";
+    field public static final String ACTION_VPN_SETTINGS = "android.settings.VPN_SETTINGS";
+    field public static final String ACTION_VR_LISTENER_SETTINGS = "android.settings.VR_LISTENER_SETTINGS";
+    field public static final String ACTION_WEBVIEW_SETTINGS = "android.settings.WEBVIEW_SETTINGS";
+    field public static final String ACTION_WIFI_ADD_NETWORKS = "android.settings.WIFI_ADD_NETWORKS";
+    field public static final String ACTION_WIFI_IP_SETTINGS = "android.settings.WIFI_IP_SETTINGS";
+    field public static final String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS";
+    field public static final String ACTION_WIRELESS_SETTINGS = "android.settings.WIRELESS_SETTINGS";
+    field public static final String ACTION_ZEN_MODE_PRIORITY_SETTINGS = "android.settings.ZEN_MODE_PRIORITY_SETTINGS";
+    field public static final int ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED = 1; // 0x1
+    field public static final int ADD_WIFI_RESULT_ALREADY_EXISTS = 2; // 0x2
+    field public static final int ADD_WIFI_RESULT_SUCCESS = 0; // 0x0
+    field public static final String AUTHORITY = "settings";
+    field public static final String EXTRA_ACCOUNT_TYPES = "account_types";
+    field public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
+    field public static final String EXTRA_APP_PACKAGE = "android.provider.extra.APP_PACKAGE";
+    field public static final String EXTRA_AUTHORITIES = "authorities";
+    field public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED = "android.settings.extra.battery_saver_mode_enabled";
+    field public static final String EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED = "android.provider.extra.BIOMETRIC_AUTHENTICATORS_ALLOWED";
+    field public static final String EXTRA_CHANNEL_FILTER_LIST = "android.provider.extra.CHANNEL_FILTER_LIST";
+    field public static final String EXTRA_CHANNEL_ID = "android.provider.extra.CHANNEL_ID";
+    field public static final String EXTRA_CONVERSATION_ID = "android.provider.extra.CONVERSATION_ID";
+    field public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED = "android.settings.extra.do_not_disturb_mode_enabled";
+    field public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES = "android.settings.extra.do_not_disturb_mode_minutes";
+    field public static final String EXTRA_EASY_CONNECT_ATTEMPTED_SSID = "android.provider.extra.EASY_CONNECT_ATTEMPTED_SSID";
+    field public static final String EXTRA_EASY_CONNECT_BAND_LIST = "android.provider.extra.EASY_CONNECT_BAND_LIST";
+    field public static final String EXTRA_EASY_CONNECT_CHANNEL_LIST = "android.provider.extra.EASY_CONNECT_CHANNEL_LIST";
+    field public static final String EXTRA_EASY_CONNECT_ERROR_CODE = "android.provider.extra.EASY_CONNECT_ERROR_CODE";
+    field public static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
+    field public static final String EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME = "android.provider.extra.NOTIFICATION_LISTENER_COMPONENT_NAME";
+    field public static final String EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY = "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY";
+    field public static final String EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI = "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI";
+    field public static final String EXTRA_SUB_ID = "android.provider.extra.SUB_ID";
+    field public static final String EXTRA_WIFI_NETWORK_LIST = "android.provider.extra.WIFI_NETWORK_LIST";
+    field public static final String EXTRA_WIFI_NETWORK_RESULT_LIST = "android.provider.extra.WIFI_NETWORK_RESULT_LIST";
+    field public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG = "android.intent.category.USAGE_ACCESS_CONFIG";
+    field public static final String METADATA_USAGE_ACCESS_REASON = "android.settings.metadata.USAGE_ACCESS_REASON";
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    ctor public Settings.Global();
+    method public static float getFloat(android.content.ContentResolver, String, float);
+    method public static float getFloat(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static int getInt(android.content.ContentResolver, String, int);
+    method public static int getInt(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static long getLong(android.content.ContentResolver, String, long);
+    method public static long getLong(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static String getString(android.content.ContentResolver, String);
+    method public static android.net.Uri getUriFor(String);
+    method public static boolean putFloat(android.content.ContentResolver, String, float);
+    method public static boolean putInt(android.content.ContentResolver, String, int);
+    method public static boolean putLong(android.content.ContentResolver, String, long);
+    method public static boolean putString(android.content.ContentResolver, String, String);
+    field public static final String ADB_ENABLED = "adb_enabled";
+    field public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
+    field public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
+    field public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+    field public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
+    field public static final String APPLY_RAMPING_RINGER = "apply_ramping_ringer";
+    field public static final String AUTO_TIME = "auto_time";
+    field public static final String AUTO_TIME_ZONE = "auto_time_zone";
+    field public static final String BLUETOOTH_ON = "bluetooth_on";
+    field public static final String BOOT_COUNT = "boot_count";
+    field public static final String CONTACT_METADATA_SYNC_ENABLED = "contact_metadata_sync_enabled";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_ROAMING = "data_roaming";
+    field public static final String DEBUG_APP = "debug_app";
+    field public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
+    field public static final String DEVICE_NAME = "device_name";
+    field public static final String DEVICE_PROVISIONED = "device_provisioned";
+    field public static final String HTTP_PROXY = "http_proxy";
+    field @Deprecated public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+    field public static final String MODE_RINGER = "mode_ringer";
+    field public static final String NETWORK_PREFERENCE = "network_preference";
+    field public static final String RADIO_BLUETOOTH = "bluetooth";
+    field public static final String RADIO_CELL = "cell";
+    field public static final String RADIO_NFC = "nfc";
+    field public static final String RADIO_WIFI = "wifi";
+    field @Deprecated public static final String SHOW_PROCESSES = "show_processes";
+    field public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
+    field public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+    field public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
+    field public static final String USE_GOOGLE_MAIL = "use_google_mail";
+    field public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+    field public static final String WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN = "wifi_device_owner_configs_lockdown";
+    field public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
+    field public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+    field @Deprecated public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+    field public static final String WIFI_ON = "wifi_on";
+    field @Deprecated public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
+    field public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+    field public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+  }
+
+  public static class Settings.NameValueTable implements android.provider.BaseColumns {
+    ctor public Settings.NameValueTable();
+    method public static android.net.Uri getUriFor(android.net.Uri, String);
+    method protected static boolean putString(android.content.ContentResolver, android.net.Uri, String, String);
+    field public static final String NAME = "name";
+    field public static final String VALUE = "value";
+  }
+
+  public static final class Settings.Panel {
+    field public static final String ACTION_INTERNET_CONNECTIVITY = "android.settings.panel.action.INTERNET_CONNECTIVITY";
+    field public static final String ACTION_NFC = "android.settings.panel.action.NFC";
+    field public static final String ACTION_VOLUME = "android.settings.panel.action.VOLUME";
+    field public static final String ACTION_WIFI = "android.settings.panel.action.WIFI";
+  }
+
+  public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
+    ctor public Settings.Secure();
+    method public static float getFloat(android.content.ContentResolver, String, float);
+    method public static float getFloat(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static int getInt(android.content.ContentResolver, String, int);
+    method public static int getInt(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static long getLong(android.content.ContentResolver, String, long);
+    method public static long getLong(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static String getString(android.content.ContentResolver, String);
+    method public static android.net.Uri getUriFor(String);
+    method @Deprecated public static boolean isLocationProviderEnabled(android.content.ContentResolver, String);
+    method public static boolean putFloat(android.content.ContentResolver, String, float);
+    method public static boolean putInt(android.content.ContentResolver, String, int);
+    method public static boolean putLong(android.content.ContentResolver, String, long);
+    method public static boolean putString(android.content.ContentResolver, String, String);
+    method @Deprecated public static void setLocationProviderEnabled(android.content.ContentResolver, String, boolean);
+    field public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED = "accessibility_display_inversion_enabled";
+    field public static final String ACCESSIBILITY_ENABLED = "accessibility_enabled";
+    field @Deprecated public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password";
+    field @Deprecated public static final String ADB_ENABLED = "adb_enabled";
+    field public static final String ALLOWED_GEOLOCATION_ORIGINS = "allowed_geolocation_origins";
+    field @Deprecated public static final String ALLOW_MOCK_LOCATION = "mock_location";
+    field public static final String ANDROID_ID = "android_id";
+    field @Deprecated public static final String BACKGROUND_DATA = "background_data";
+    field @Deprecated public static final String BLUETOOTH_ON = "bluetooth_on";
+    field public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DATA_ROAMING = "data_roaming";
+    field public static final String DEFAULT_INPUT_METHOD = "default_input_method";
+    field @Deprecated public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
+    field @Deprecated public static final String DEVICE_PROVISIONED = "device_provisioned";
+    field public static final String ENABLED_ACCESSIBILITY_SERVICES = "enabled_accessibility_services";
+    field public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
+    field @Deprecated public static final String HTTP_PROXY = "http_proxy";
+    field public static final String INPUT_METHOD_SELECTOR_VISIBILITY = "input_method_selector_visibility";
+    field @Deprecated public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+    field @Deprecated public static final String LOCATION_MODE = "location_mode";
+    field @Deprecated public static final int LOCATION_MODE_BATTERY_SAVING = 2; // 0x2
+    field @Deprecated public static final int LOCATION_MODE_HIGH_ACCURACY = 3; // 0x3
+    field public static final int LOCATION_MODE_OFF = 0; // 0x0
+    field @Deprecated public static final int LOCATION_MODE_SENSORS_ONLY = 1; // 0x1
+    field @Deprecated public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
+    field @Deprecated public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";
+    field @Deprecated public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
+    field @Deprecated public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
+    field @Deprecated public static final String LOGGING_ID = "logging_id";
+    field @Deprecated public static final String NETWORK_PREFERENCE = "network_preference";
+    field public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
+    field public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
+    field public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
+    field public static final String RTT_CALLING_MODE = "rtt_calling_mode";
+    field public static final String SECURE_FRP_MODE = "secure_frp_mode";
+    field public static final String SELECTED_INPUT_METHOD_SUBTYPE = "selected_input_method_subtype";
+    field public static final String SETTINGS_CLASSNAME = "settings_classname";
+    field public static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints";
+    field public static final String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled";
+    field @Deprecated public static final String TTS_DEFAULT_COUNTRY = "tts_default_country";
+    field @Deprecated public static final String TTS_DEFAULT_LANG = "tts_default_lang";
+    field public static final String TTS_DEFAULT_PITCH = "tts_default_pitch";
+    field public static final String TTS_DEFAULT_RATE = "tts_default_rate";
+    field public static final String TTS_DEFAULT_SYNTH = "tts_default_synth";
+    field @Deprecated public static final String TTS_DEFAULT_VARIANT = "tts_default_variant";
+    field public static final String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
+    field @Deprecated public static final String TTS_USE_DEFAULTS = "tts_use_defaults";
+    field @Deprecated public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
+    field @Deprecated public static final String USE_GOOGLE_MAIL = "use_google_mail";
+    field @Deprecated public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
+    field @Deprecated public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+    field @Deprecated public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+    field @Deprecated public static final String WIFI_ON = "wifi_on";
+    field @Deprecated public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
+    field @Deprecated public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
+    field @Deprecated public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
+  }
+
+  public static class Settings.SettingNotFoundException extends android.util.AndroidException {
+    ctor public Settings.SettingNotFoundException(String);
+  }
+
+  public static final class Settings.System extends android.provider.Settings.NameValueTable {
+    ctor public Settings.System();
+    method public static boolean canWrite(android.content.Context);
+    method public static void getConfiguration(android.content.ContentResolver, android.content.res.Configuration);
+    method public static float getFloat(android.content.ContentResolver, String, float);
+    method public static float getFloat(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static int getInt(android.content.ContentResolver, String, int);
+    method public static int getInt(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static long getLong(android.content.ContentResolver, String, long);
+    method public static long getLong(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method @Deprecated public static boolean getShowGTalkServiceStatus(android.content.ContentResolver);
+    method public static String getString(android.content.ContentResolver, String);
+    method public static android.net.Uri getUriFor(String);
+    method public static boolean putConfiguration(android.content.ContentResolver, android.content.res.Configuration);
+    method public static boolean putFloat(android.content.ContentResolver, String, float);
+    method public static boolean putInt(android.content.ContentResolver, String, int);
+    method public static boolean putLong(android.content.ContentResolver, String, long);
+    method public static boolean putString(android.content.ContentResolver, String, String);
+    method @Deprecated public static void setShowGTalkServiceStatus(android.content.ContentResolver, boolean);
+    field public static final String ACCELEROMETER_ROTATION = "accelerometer_rotation";
+    field @Deprecated public static final String ADB_ENABLED = "adb_enabled";
+    field @Deprecated public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
+    field @Deprecated public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
+    field public static final String ALARM_ALERT = "alarm_alert";
+    field @Deprecated public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+    field @Deprecated public static final String ANDROID_ID = "android_id";
+    field @Deprecated public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
+    field @Deprecated public static final String AUTO_TIME = "auto_time";
+    field @Deprecated public static final String AUTO_TIME_ZONE = "auto_time_zone";
+    field public static final String BLUETOOTH_DISCOVERABILITY = "bluetooth_discoverability";
+    field public static final String BLUETOOTH_DISCOVERABILITY_TIMEOUT = "bluetooth_discoverability_timeout";
+    field @Deprecated public static final String BLUETOOTH_ON = "bluetooth_on";
+    field public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DATA_ROAMING = "data_roaming";
+    field @Deprecated public static final String DATE_FORMAT = "date_format";
+    field @Deprecated public static final String DEBUG_APP = "debug_app";
+    field public static final android.net.Uri DEFAULT_ALARM_ALERT_URI;
+    field public static final android.net.Uri DEFAULT_NOTIFICATION_URI;
+    field public static final android.net.Uri DEFAULT_RINGTONE_URI;
+    field @Deprecated public static final String DEVICE_PROVISIONED = "device_provisioned";
+    field @Deprecated public static final String DIM_SCREEN = "dim_screen";
+    field public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type";
+    field public static final String DTMF_TONE_WHEN_DIALING = "dtmf_tone";
+    field public static final String END_BUTTON_BEHAVIOR = "end_button_behavior";
+    field public static final String FONT_SCALE = "font_scale";
+    field public static final String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled";
+    field @Deprecated public static final String HTTP_PROXY = "http_proxy";
+    field @Deprecated public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+    field @Deprecated public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
+    field @Deprecated public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";
+    field @Deprecated public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
+    field @Deprecated public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
+    field @Deprecated public static final String LOGGING_ID = "logging_id";
+    field @Deprecated public static final String MODE_RINGER = "mode_ringer";
+    field public static final String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected";
+    field public static final String MUTE_STREAMS_AFFECTED = "mute_streams_affected";
+    field @Deprecated public static final String NETWORK_PREFERENCE = "network_preference";
+    field @Deprecated public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted";
+    field public static final String NOTIFICATION_SOUND = "notification_sound";
+    field @Deprecated public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
+    field @Deprecated public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
+    field @Deprecated public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
+    field @Deprecated public static final String RADIO_BLUETOOTH = "bluetooth";
+    field @Deprecated public static final String RADIO_CELL = "cell";
+    field @Deprecated public static final String RADIO_NFC = "nfc";
+    field @Deprecated public static final String RADIO_WIFI = "wifi";
+    field public static final String RINGTONE = "ringtone";
+    field public static final String SCREEN_BRIGHTNESS = "screen_brightness";
+    field public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
+    field public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1; // 0x1
+    field public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0; // 0x0
+    field public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
+    field @Deprecated public static final String SETTINGS_CLASSNAME = "settings_classname";
+    field public static final String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run";
+    field public static final String SHOW_GTALK_SERVICE_STATUS = "SHOW_GTALK_SERVICE_STATUS";
+    field @Deprecated public static final String SHOW_PROCESSES = "show_processes";
+    field @Deprecated public static final String SHOW_WEB_SUGGESTIONS = "show_web_suggestions";
+    field public static final String SOUND_EFFECTS_ENABLED = "sound_effects_enabled";
+    field @Deprecated public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
+    field public static final String TEXT_AUTO_CAPS = "auto_caps";
+    field public static final String TEXT_AUTO_PUNCTUATE = "auto_punctuate";
+    field public static final String TEXT_AUTO_REPLACE = "auto_replace";
+    field public static final String TEXT_SHOW_PASSWORD = "show_password";
+    field public static final String TIME_12_24 = "time_12_24";
+    field @Deprecated public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+    field @Deprecated public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
+    field public static final String USER_ROTATION = "user_rotation";
+    field @Deprecated public static final String USE_GOOGLE_MAIL = "use_google_mail";
+    field public static final String VIBRATE_ON = "vibrate_on";
+    field public static final String VIBRATE_WHEN_RINGING = "vibrate_when_ringing";
+    field @Deprecated public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+    field @Deprecated public static final String WALLPAPER_ACTIVITY = "wallpaper_activity";
+    field @Deprecated public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
+    field @Deprecated public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+    field @Deprecated public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+    field @Deprecated public static final String WIFI_ON = "wifi_on";
+    field @Deprecated public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
+    field @Deprecated public static final String WIFI_STATIC_DNS1 = "wifi_static_dns1";
+    field @Deprecated public static final String WIFI_STATIC_DNS2 = "wifi_static_dns2";
+    field @Deprecated public static final String WIFI_STATIC_GATEWAY = "wifi_static_gateway";
+    field @Deprecated public static final String WIFI_STATIC_IP = "wifi_static_ip";
+    field @Deprecated public static final String WIFI_STATIC_NETMASK = "wifi_static_netmask";
+    field @Deprecated public static final String WIFI_USE_STATIC_IP = "wifi_use_static_ip";
+    field @Deprecated public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
+    field @Deprecated public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
+    field @Deprecated public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
+    field @Deprecated public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+  }
+
+  public class SettingsSlicesContract {
+    field public static final String AUTHORITY = "android.settings.slices";
+    field public static final android.net.Uri BASE_URI;
+    field public static final String KEY_AIRPLANE_MODE = "airplane_mode";
+    field public static final String KEY_BATTERY_SAVER = "battery_saver";
+    field public static final String KEY_BLUETOOTH = "bluetooth";
+    field public static final String KEY_LOCATION = "location";
+    field public static final String KEY_WIFI = "wifi";
+    field public static final String PATH_SETTING_ACTION = "action";
+    field public static final String PATH_SETTING_INTENT = "intent";
+  }
+
+  public final class SimPhonebookContract {
+    field public static final String AUTHORITY = "com.android.simphonebook";
+    field @NonNull public static final android.net.Uri AUTHORITY_URI;
+  }
+
+  public static final class SimPhonebookContract.ElementaryFiles {
+    method @NonNull public static android.net.Uri getItemUri(int, int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sim-elementary-file";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/sim-elementary-file";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final int EF_ADN = 1; // 0x1
+    field public static final int EF_FDN = 2; // 0x2
+    field public static final int EF_SDN = 3; // 0x3
+    field public static final String EF_TYPE = "ef_type";
+    field public static final int EF_UNKNOWN = 0; // 0x0
+    field public static final String MAX_RECORDS = "max_records";
+    field public static final String NAME_MAX_LENGTH = "name_max_length";
+    field public static final String PHONE_NUMBER_MAX_LENGTH = "phone_number_max_length";
+    field public static final String RECORD_COUNT = "record_count";
+    field public static final String SLOT_INDEX = "slot_index";
+    field public static final String SUBSCRIPTION_ID = "subscription_id";
+  }
+
+  public static final class SimPhonebookContract.SimRecords {
+    method @NonNull public static android.net.Uri getContentUri(int, int);
+    method @IntRange(from=0) @WorkerThread public static int getEncodedNameLength(@NonNull android.content.ContentResolver, @NonNull String);
+    method @NonNull public static android.net.Uri getItemUri(int, int, @IntRange(from=1) int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sim-contact_v2";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/sim-contact_v2";
+    field public static final String ELEMENTARY_FILE_TYPE = "elementary_file_type";
+    field public static final int ERROR_NAME_UNSUPPORTED = -1; // 0xffffffff
+    field public static final String NAME = "name";
+    field public static final String PHONE_NUMBER = "phone_number";
+    field public static final String RECORD_NUMBER = "record_number";
+    field public static final String SUBSCRIPTION_ID = "subscription_id";
+  }
+
+  public class SyncStateContract {
+    ctor public SyncStateContract();
+  }
+
+  public static interface SyncStateContract.Columns extends android.provider.BaseColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String DATA = "data";
+  }
+
+  public static class SyncStateContract.Constants implements android.provider.SyncStateContract.Columns {
+    ctor public SyncStateContract.Constants();
+    field public static final String CONTENT_DIRECTORY = "syncstate";
+  }
+
+  public static final class SyncStateContract.Helpers {
+    ctor public SyncStateContract.Helpers();
+    method public static byte[] get(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.util.Pair<android.net.Uri,byte[]> getWithUri(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.net.Uri insert(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    method public static android.content.ContentProviderOperation newSetOperation(android.net.Uri, android.accounts.Account, byte[]);
+    method public static android.content.ContentProviderOperation newUpdateOperation(android.net.Uri, byte[]);
+    method public static void set(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    method public static void update(android.content.ContentProviderClient, android.net.Uri, byte[]) throws android.os.RemoteException;
+  }
+
+  public final class Telephony {
+  }
+
+  public static interface Telephony.BaseMmsColumns extends android.provider.BaseColumns {
+    field public static final String CONTENT_CLASS = "ct_cls";
+    field public static final String CONTENT_LOCATION = "ct_l";
+    field public static final String CONTENT_TYPE = "ct_t";
+    field public static final String CREATOR = "creator";
+    field public static final String DATE = "date";
+    field public static final String DATE_SENT = "date_sent";
+    field public static final String DELIVERY_REPORT = "d_rpt";
+    field public static final String DELIVERY_TIME = "d_tm";
+    field public static final String EXPIRY = "exp";
+    field public static final String LOCKED = "locked";
+    field public static final String MESSAGE_BOX = "msg_box";
+    field public static final int MESSAGE_BOX_ALL = 0; // 0x0
+    field public static final int MESSAGE_BOX_DRAFTS = 3; // 0x3
+    field public static final int MESSAGE_BOX_FAILED = 5; // 0x5
+    field public static final int MESSAGE_BOX_INBOX = 1; // 0x1
+    field public static final int MESSAGE_BOX_OUTBOX = 4; // 0x4
+    field public static final int MESSAGE_BOX_SENT = 2; // 0x2
+    field public static final String MESSAGE_CLASS = "m_cls";
+    field public static final String MESSAGE_ID = "m_id";
+    field public static final String MESSAGE_SIZE = "m_size";
+    field public static final String MESSAGE_TYPE = "m_type";
+    field public static final String MMS_VERSION = "v";
+    field public static final String PRIORITY = "pri";
+    field public static final String READ = "read";
+    field public static final String READ_REPORT = "rr";
+    field public static final String READ_STATUS = "read_status";
+    field public static final String REPORT_ALLOWED = "rpt_a";
+    field public static final String RESPONSE_STATUS = "resp_st";
+    field public static final String RESPONSE_TEXT = "resp_txt";
+    field public static final String RETRIEVE_STATUS = "retr_st";
+    field public static final String RETRIEVE_TEXT = "retr_txt";
+    field public static final String RETRIEVE_TEXT_CHARSET = "retr_txt_cs";
+    field public static final String SEEN = "seen";
+    field public static final String STATUS = "st";
+    field public static final String SUBJECT = "sub";
+    field public static final String SUBJECT_CHARSET = "sub_cs";
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+    field public static final String TEXT_ONLY = "text_only";
+    field public static final String THREAD_ID = "thread_id";
+    field public static final String TRANSACTION_ID = "tr_id";
+  }
+
+  public static interface Telephony.CanonicalAddressesColumns extends android.provider.BaseColumns {
+    field public static final String ADDRESS = "address";
+  }
+
+  public static final class Telephony.CarrierId implements android.provider.BaseColumns {
+    method @NonNull public static android.net.Uri getSpecificCarrierIdUriForSubscriptionId(int);
+    method public static android.net.Uri getUriForSubscriptionId(int);
+    field public static final String CARRIER_ID = "carrier_id";
+    field public static final String CARRIER_NAME = "carrier_name";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String SPECIFIC_CARRIER_ID = "specific_carrier_id";
+    field public static final String SPECIFIC_CARRIER_ID_NAME = "specific_carrier_id_name";
+  }
+
+  public static final class Telephony.Carriers implements android.provider.BaseColumns {
+    field public static final String APN = "apn";
+    field public static final String AUTH_TYPE = "authtype";
+    field @Deprecated public static final String BEARER = "bearer";
+    field public static final String CARRIER_ENABLED = "carrier_enabled";
+    field public static final String CARRIER_ID = "carrier_id";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String CURRENT = "current";
+    field public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String MCC = "mcc";
+    field public static final String MMSC = "mmsc";
+    field public static final String MMSPORT = "mmsport";
+    field public static final String MMSPROXY = "mmsproxy";
+    field @Deprecated public static final String MNC = "mnc";
+    field @Deprecated public static final String MVNO_MATCH_DATA = "mvno_match_data";
+    field @Deprecated public static final String MVNO_TYPE = "mvno_type";
+    field public static final String NAME = "name";
+    field public static final String NETWORK_TYPE_BITMASK = "network_type_bitmask";
+    field @Deprecated public static final String NUMERIC = "numeric";
+    field public static final String PASSWORD = "password";
+    field public static final String PORT = "port";
+    field public static final String PROTOCOL = "protocol";
+    field public static final String PROXY = "proxy";
+    field public static final String ROAMING_PROTOCOL = "roaming_protocol";
+    field public static final String SERVER = "server";
+    field @NonNull public static final android.net.Uri SIM_APN_URI;
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+    field public static final String TYPE = "type";
+    field public static final String USER = "user";
+  }
+
+  public static final class Telephony.Mms implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final android.net.Uri REPORT_REQUEST_URI;
+    field public static final android.net.Uri REPORT_STATUS_URI;
+  }
+
+  public static final class Telephony.Mms.Addr implements android.provider.BaseColumns {
+    method @NonNull public static android.net.Uri getAddrUriForMessage(@NonNull String);
+    field public static final String ADDRESS = "address";
+    field public static final String CHARSET = "charset";
+    field public static final String CONTACT_ID = "contact_id";
+    field public static final String MSG_ID = "msg_id";
+    field public static final String TYPE = "type";
+  }
+
+  public static final class Telephony.Mms.Draft implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Mms.Inbox implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Mms.Intents {
+    field public static final String CONTENT_CHANGED_ACTION = "android.intent.action.CONTENT_CHANGED";
+    field public static final String DELETED_CONTENTS = "deleted_contents";
+  }
+
+  public static final class Telephony.Mms.Outbox implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Mms.Part implements android.provider.BaseColumns {
+    method @NonNull public static android.net.Uri getPartUriForMessage(@NonNull String);
+    field public static final String CHARSET = "chset";
+    field public static final String CONTENT_DISPOSITION = "cd";
+    field public static final String CONTENT_ID = "cid";
+    field public static final String CONTENT_LOCATION = "cl";
+    field public static final String CONTENT_TYPE = "ct";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String CT_START = "ctt_s";
+    field public static final String CT_TYPE = "ctt_t";
+    field public static final String FILENAME = "fn";
+    field public static final String MSG_ID = "mid";
+    field public static final String NAME = "name";
+    field public static final String SEQ = "seq";
+    field public static final String TEXT = "text";
+    field public static final String _DATA = "_data";
+  }
+
+  public static final class Telephony.Mms.Rate {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String SENT_TIME = "sent_time";
+  }
+
+  public static final class Telephony.Mms.Sent implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.MmsSms implements android.provider.BaseColumns {
+    field public static final android.net.Uri CONTENT_CONVERSATIONS_URI;
+    field public static final android.net.Uri CONTENT_DRAFT_URI;
+    field public static final android.net.Uri CONTENT_FILTER_BYPHONE_URI;
+    field public static final android.net.Uri CONTENT_LOCKED_URI;
+    field public static final android.net.Uri CONTENT_UNDELIVERED_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int ERR_TYPE_GENERIC = 1; // 0x1
+    field public static final int ERR_TYPE_GENERIC_PERMANENT = 10; // 0xa
+    field public static final int ERR_TYPE_MMS_PROTO_PERMANENT = 12; // 0xc
+    field public static final int ERR_TYPE_MMS_PROTO_TRANSIENT = 3; // 0x3
+    field public static final int ERR_TYPE_SMS_PROTO_PERMANENT = 11; // 0xb
+    field public static final int ERR_TYPE_SMS_PROTO_TRANSIENT = 2; // 0x2
+    field public static final int ERR_TYPE_TRANSPORT_FAILURE = 4; // 0x4
+    field public static final int MMS_PROTO = 1; // 0x1
+    field public static final int NO_ERROR = 0; // 0x0
+    field public static final android.net.Uri SEARCH_URI;
+    field public static final int SMS_PROTO = 0; // 0x0
+    field public static final String TYPE_DISCRIMINATOR_COLUMN = "transport_type";
+  }
+
+  public static final class Telephony.MmsSms.PendingMessages implements android.provider.BaseColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DUE_TIME = "due_time";
+    field public static final String ERROR_CODE = "err_code";
+    field public static final String ERROR_TYPE = "err_type";
+    field public static final String LAST_TRY = "last_try";
+    field public static final String MSG_ID = "msg_id";
+    field public static final String MSG_TYPE = "msg_type";
+    field public static final String PROTO_TYPE = "proto_type";
+    field public static final String RETRY_INDEX = "retry_index";
+    field public static final String SUBSCRIPTION_ID = "pending_sub_id";
+  }
+
+  public static final class Telephony.ServiceStateTable {
+    method public static android.net.Uri getUriForSubscriptionId(int);
+    method public static android.net.Uri getUriForSubscriptionIdAndField(int, String);
+    field public static final String AUTHORITY = "service-state";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_NETWORK_TYPE = "data_network_type";
+    field public static final String DATA_REG_STATE = "data_reg_state";
+    field public static final String DUPLEX_MODE = "duplex_mode";
+    field public static final String IS_MANUAL_NETWORK_SELECTION = "is_manual_network_selection";
+    field public static final String VOICE_OPERATOR_NUMERIC = "voice_operator_numeric";
+    field public static final String VOICE_REG_STATE = "voice_reg_state";
+  }
+
+  public static final class Telephony.Sms implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    method public static String getDefaultSmsPackage(android.content.Context);
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Conversations implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final String MESSAGE_COUNT = "msg_count";
+    field public static final String SNIPPET = "snippet";
+  }
+
+  public static final class Telephony.Sms.Draft implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Inbox implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Intents {
+    method public static android.telephony.SmsMessage[] getMessagesFromIntent(android.content.Intent);
+    field public static final String ACTION_CHANGE_DEFAULT = "android.provider.Telephony.ACTION_CHANGE_DEFAULT";
+    field public static final String ACTION_DEFAULT_SMS_PACKAGE_CHANGED = "android.provider.action.DEFAULT_SMS_PACKAGE_CHANGED";
+    field public static final String ACTION_EXTERNAL_PROVIDER_CHANGE = "android.provider.action.EXTERNAL_PROVIDER_CHANGE";
+    field public static final String DATA_SMS_RECEIVED_ACTION = "android.intent.action.DATA_SMS_RECEIVED";
+    field public static final String EXTRA_IS_DEFAULT_SMS_APP = "android.provider.extra.IS_DEFAULT_SMS_APP";
+    field public static final String EXTRA_PACKAGE_NAME = "package";
+    field public static final int RESULT_SMS_DATABASE_ERROR = 10; // 0xa
+    field public static final int RESULT_SMS_DISPATCH_FAILURE = 6; // 0x6
+    field public static final int RESULT_SMS_DUPLICATED = 5; // 0x5
+    field public static final int RESULT_SMS_GENERIC_ERROR = 2; // 0x2
+    field public static final int RESULT_SMS_HANDLED = 1; // 0x1
+    field public static final int RESULT_SMS_INVALID_URI = 11; // 0xb
+    field public static final int RESULT_SMS_NULL_MESSAGE = 8; // 0x8
+    field public static final int RESULT_SMS_NULL_PDU = 7; // 0x7
+    field public static final int RESULT_SMS_OUT_OF_MEMORY = 3; // 0x3
+    field public static final int RESULT_SMS_RECEIVED_WHILE_ENCRYPTED = 9; // 0x9
+    field public static final int RESULT_SMS_UNSUPPORTED = 4; // 0x4
+    field @Deprecated public static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
+    field public static final String SIM_FULL_ACTION = "android.provider.Telephony.SIM_FULL";
+    field public static final String SMS_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_CB_RECEIVED";
+    field public static final String SMS_DELIVER_ACTION = "android.provider.Telephony.SMS_DELIVER";
+    field public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
+    field public static final String SMS_REJECTED_ACTION = "android.provider.Telephony.SMS_REJECTED";
+    field public static final String SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION = "android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED";
+    field public static final String WAP_PUSH_DELIVER_ACTION = "android.provider.Telephony.WAP_PUSH_DELIVER";
+    field public static final String WAP_PUSH_RECEIVED_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED";
+  }
+
+  public static final class Telephony.Sms.Outbox implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Sent implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static interface Telephony.TextBasedSmsColumns {
+    field public static final String ADDRESS = "address";
+    field public static final String BODY = "body";
+    field public static final String CREATOR = "creator";
+    field public static final String DATE = "date";
+    field public static final String DATE_SENT = "date_sent";
+    field public static final String ERROR_CODE = "error_code";
+    field public static final String LOCKED = "locked";
+    field public static final int MESSAGE_TYPE_ALL = 0; // 0x0
+    field public static final int MESSAGE_TYPE_DRAFT = 3; // 0x3
+    field public static final int MESSAGE_TYPE_FAILED = 5; // 0x5
+    field public static final int MESSAGE_TYPE_INBOX = 1; // 0x1
+    field public static final int MESSAGE_TYPE_OUTBOX = 4; // 0x4
+    field public static final int MESSAGE_TYPE_QUEUED = 6; // 0x6
+    field public static final int MESSAGE_TYPE_SENT = 2; // 0x2
+    field public static final String PERSON = "person";
+    field public static final String PROTOCOL = "protocol";
+    field public static final String READ = "read";
+    field public static final String REPLY_PATH_PRESENT = "reply_path_present";
+    field public static final String SEEN = "seen";
+    field public static final String SERVICE_CENTER = "service_center";
+    field public static final String STATUS = "status";
+    field public static final int STATUS_COMPLETE = 0; // 0x0
+    field public static final int STATUS_FAILED = 64; // 0x40
+    field public static final int STATUS_NONE = -1; // 0xffffffff
+    field public static final int STATUS_PENDING = 32; // 0x20
+    field public static final String SUBJECT = "subject";
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+    field public static final String THREAD_ID = "thread_id";
+    field public static final String TYPE = "type";
+  }
+
+  public static final class Telephony.Threads implements android.provider.Telephony.ThreadsColumns {
+    method public static long getOrCreateThreadId(android.content.Context, String);
+    method public static long getOrCreateThreadId(android.content.Context, java.util.Set<java.lang.String>);
+    field public static final int BROADCAST_THREAD = 1; // 0x1
+    field public static final int COMMON_THREAD = 0; // 0x0
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri OBSOLETE_THREADS_URI;
+  }
+
+  public static interface Telephony.ThreadsColumns extends android.provider.BaseColumns {
+    field public static final String ARCHIVED = "archived";
+    field public static final String DATE = "date";
+    field public static final String ERROR = "error";
+    field public static final String HAS_ATTACHMENT = "has_attachment";
+    field public static final String MESSAGE_COUNT = "message_count";
+    field public static final String READ = "read";
+    field public static final String RECIPIENT_IDS = "recipient_ids";
+    field public static final String SNIPPET = "snippet";
+    field public static final String SNIPPET_CHARSET = "snippet_cs";
+    field public static final String TYPE = "type";
+  }
+
+  public class UserDictionary {
+    ctor public UserDictionary();
+    field public static final String AUTHORITY = "user_dictionary";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static class UserDictionary.Words implements android.provider.BaseColumns {
+    ctor public UserDictionary.Words();
+    method @Deprecated public static void addWord(android.content.Context, String, int, int);
+    method public static void addWord(android.content.Context, String, int, String, java.util.Locale);
+    field public static final String APP_ID = "appid";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.userword";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.userword";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "frequency DESC";
+    field public static final String FREQUENCY = "frequency";
+    field public static final String LOCALE = "locale";
+    field @Deprecated public static final int LOCALE_TYPE_ALL = 0; // 0x0
+    field @Deprecated public static final int LOCALE_TYPE_CURRENT = 1; // 0x1
+    field public static final String SHORTCUT = "shortcut";
+    field public static final String WORD = "word";
+    field public static final String _ID = "_id";
+  }
+
+  public class VoicemailContract {
+    field public static final String ACTION_FETCH_VOICEMAIL = "android.intent.action.FETCH_VOICEMAIL";
+    field public static final String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL";
+    field public static final String ACTION_SYNC_VOICEMAIL = "android.provider.action.SYNC_VOICEMAIL";
+    field public static final String AUTHORITY = "com.android.voicemail";
+    field public static final String EXTRA_PHONE_ACCOUNT_HANDLE = "android.provider.extra.PHONE_ACCOUNT_HANDLE";
+    field public static final String EXTRA_SELF_CHANGE = "com.android.voicemail.extra.SELF_CHANGE";
+    field public static final String PARAM_KEY_SOURCE_PACKAGE = "source_package";
+  }
+
+  public static final class VoicemailContract.Status implements android.provider.BaseColumns {
+    method public static android.net.Uri buildSourceUri(String);
+    field public static final String CONFIGURATION_STATE = "configuration_state";
+    field public static final int CONFIGURATION_STATE_CAN_BE_CONFIGURED = 2; // 0x2
+    field public static final int CONFIGURATION_STATE_CONFIGURING = 3; // 0x3
+    field public static final int CONFIGURATION_STATE_DISABLED = 5; // 0x5
+    field public static final int CONFIGURATION_STATE_FAILED = 4; // 0x4
+    field public static final int CONFIGURATION_STATE_NOT_CONFIGURED = 1; // 0x1
+    field public static final int CONFIGURATION_STATE_OK = 0; // 0x0
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_CHANNEL_STATE = "data_channel_state";
+    field public static final int DATA_CHANNEL_STATE_BAD_CONFIGURATION = 3; // 0x3
+    field public static final int DATA_CHANNEL_STATE_COMMUNICATION_ERROR = 4; // 0x4
+    field public static final int DATA_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1
+    field public static final int DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED = 2; // 0x2
+    field public static final int DATA_CHANNEL_STATE_OK = 0; // 0x0
+    field public static final int DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR = 6; // 0x6
+    field public static final int DATA_CHANNEL_STATE_SERVER_ERROR = 5; // 0x5
+    field public static final String DIR_TYPE = "vnd.android.cursor.dir/voicemail.source.status";
+    field public static final String ITEM_TYPE = "vnd.android.cursor.item/voicemail.source.status";
+    field public static final String NOTIFICATION_CHANNEL_STATE = "notification_channel_state";
+    field public static final int NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING = 2; // 0x2
+    field public static final int NOTIFICATION_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1
+    field public static final int NOTIFICATION_CHANNEL_STATE_OK = 0; // 0x0
+    field public static final String PHONE_ACCOUNT_COMPONENT_NAME = "phone_account_component_name";
+    field public static final String PHONE_ACCOUNT_ID = "phone_account_id";
+    field public static final String QUOTA_OCCUPIED = "quota_occupied";
+    field public static final String QUOTA_TOTAL = "quota_total";
+    field public static final int QUOTA_UNAVAILABLE = -1; // 0xffffffff
+    field public static final String SETTINGS_URI = "settings_uri";
+    field public static final String SOURCE_PACKAGE = "source_package";
+    field public static final String SOURCE_TYPE = "source_type";
+    field public static final String VOICEMAIL_ACCESS_URI = "voicemail_access_uri";
+  }
+
+  public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns {
+    method public static android.net.Uri buildSourceUri(String);
+    field public static final String ARCHIVED = "archived";
+    field public static final String BACKED_UP = "backed_up";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATE = "date";
+    field public static final String DELETED = "deleted";
+    field public static final String DIRTY = "dirty";
+    field public static final int DIRTY_RETAIN = -1; // 0xffffffff
+    field public static final String DIR_TYPE = "vnd.android.cursor.dir/voicemails";
+    field public static final String DURATION = "duration";
+    field public static final String HAS_CONTENT = "has_content";
+    field public static final String IS_OMTP_VOICEMAIL = "is_omtp_voicemail";
+    field public static final String IS_READ = "is_read";
+    field public static final String ITEM_TYPE = "vnd.android.cursor.item/voicemail";
+    field public static final String LAST_MODIFIED = "last_modified";
+    field public static final String MIME_TYPE = "mime_type";
+    field public static final String NEW = "new";
+    field public static final String NUMBER = "number";
+    field public static final String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name";
+    field public static final String PHONE_ACCOUNT_ID = "subscription_id";
+    field public static final String RESTORED = "restored";
+    field public static final String SOURCE_DATA = "source_data";
+    field public static final String SOURCE_PACKAGE = "source_package";
+    field public static final String TRANSCRIPTION = "transcription";
+  }
+
+}
+
+package android.renderscript {
+
+  @Deprecated public class Allocation extends android.renderscript.BaseObj {
+    method @Deprecated public void copy1DRangeFrom(int, int, Object);
+    method @Deprecated public void copy1DRangeFrom(int, int, int[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, short[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, byte[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, float[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, android.renderscript.Allocation, int);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, Object);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, int[]);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, short[]);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, byte[]);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, float[]);
+    method @Deprecated public void copy1DRangeTo(int, int, Object);
+    method @Deprecated public void copy1DRangeTo(int, int, int[]);
+    method @Deprecated public void copy1DRangeTo(int, int, short[]);
+    method @Deprecated public void copy1DRangeTo(int, int, byte[]);
+    method @Deprecated public void copy1DRangeTo(int, int, float[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, Object);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, int[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, short[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, byte[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, float[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, Object);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, byte[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, short[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, int[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, float[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, android.renderscript.Allocation, int, int);
+    method @Deprecated public void copy2DRangeFrom(int, int, android.graphics.Bitmap);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, Object);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, byte[]);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, short[]);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, int[]);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, float[]);
+    method @Deprecated public void copy3DRangeFrom(int, int, int, int, int, int, Object);
+    method @Deprecated public void copy3DRangeFrom(int, int, int, int, int, int, android.renderscript.Allocation, int, int, int);
+    method @Deprecated public void copy3DRangeTo(int, int, int, int, int, int, Object);
+    method @Deprecated public void copyFrom(android.renderscript.BaseObj[]);
+    method @Deprecated public void copyFrom(Object);
+    method @Deprecated public void copyFrom(int[]);
+    method @Deprecated public void copyFrom(short[]);
+    method @Deprecated public void copyFrom(byte[]);
+    method @Deprecated public void copyFrom(float[]);
+    method @Deprecated public void copyFrom(android.graphics.Bitmap);
+    method @Deprecated public void copyFrom(android.renderscript.Allocation);
+    method @Deprecated public void copyFromUnchecked(Object);
+    method @Deprecated public void copyFromUnchecked(int[]);
+    method @Deprecated public void copyFromUnchecked(short[]);
+    method @Deprecated public void copyFromUnchecked(byte[]);
+    method @Deprecated public void copyFromUnchecked(float[]);
+    method @Deprecated public void copyTo(android.graphics.Bitmap);
+    method @Deprecated public void copyTo(Object);
+    method @Deprecated public void copyTo(byte[]);
+    method @Deprecated public void copyTo(short[]);
+    method @Deprecated public void copyTo(int[]);
+    method @Deprecated public void copyTo(float[]);
+    method @Deprecated public static android.renderscript.Allocation[] createAllocations(android.renderscript.RenderScript, android.renderscript.Type, int, int);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmapResource(android.renderscript.RenderScript, android.content.res.Resources, int, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmapResource(android.renderscript.RenderScript, android.content.res.Resources, int);
+    method @Deprecated public static android.renderscript.Allocation createFromString(android.renderscript.RenderScript, String, int);
+    method @Deprecated public static android.renderscript.Allocation createSized(android.renderscript.RenderScript, android.renderscript.Element, int, int);
+    method @Deprecated public static android.renderscript.Allocation createSized(android.renderscript.RenderScript, android.renderscript.Element, int);
+    method @Deprecated public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type, int);
+    method @Deprecated public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type);
+    method @Deprecated public void generateMipmaps();
+    method @Deprecated public java.nio.ByteBuffer getByteBuffer();
+    method @Deprecated public int getBytesSize();
+    method @Deprecated public android.renderscript.Element getElement();
+    method @Deprecated public long getStride();
+    method @Deprecated public android.view.Surface getSurface();
+    method @Deprecated public long getTimeStamp();
+    method @Deprecated public android.renderscript.Type getType();
+    method @Deprecated public int getUsage();
+    method @Deprecated public void ioReceive();
+    method @Deprecated public void ioSend();
+    method @Deprecated public void resize(int);
+    method @Deprecated public void setAutoPadding(boolean);
+    method @Deprecated public void setFromFieldPacker(int, android.renderscript.FieldPacker);
+    method @Deprecated public void setFromFieldPacker(int, int, android.renderscript.FieldPacker);
+    method @Deprecated public void setFromFieldPacker(int, int, int, int, android.renderscript.FieldPacker);
+    method @Deprecated public void setOnBufferAvailableListener(android.renderscript.Allocation.OnBufferAvailableListener);
+    method @Deprecated public void setSurface(android.view.Surface);
+    method @Deprecated public void syncAll(int);
+    field @Deprecated public static final int USAGE_GRAPHICS_CONSTANTS = 8; // 0x8
+    field @Deprecated public static final int USAGE_GRAPHICS_RENDER_TARGET = 16; // 0x10
+    field @Deprecated public static final int USAGE_GRAPHICS_TEXTURE = 2; // 0x2
+    field @Deprecated public static final int USAGE_GRAPHICS_VERTEX = 4; // 0x4
+    field @Deprecated public static final int USAGE_IO_INPUT = 32; // 0x20
+    field @Deprecated public static final int USAGE_IO_OUTPUT = 64; // 0x40
+    field @Deprecated public static final int USAGE_SCRIPT = 1; // 0x1
+    field @Deprecated public static final int USAGE_SHARED = 128; // 0x80
+  }
+
+  @Deprecated public enum Allocation.MipmapControl {
+    enum_constant @Deprecated public static final android.renderscript.Allocation.MipmapControl MIPMAP_FULL;
+    enum_constant @Deprecated public static final android.renderscript.Allocation.MipmapControl MIPMAP_NONE;
+    enum_constant @Deprecated public static final android.renderscript.Allocation.MipmapControl MIPMAP_ON_SYNC_TO_TEXTURE;
+  }
+
+  @Deprecated public static interface Allocation.OnBufferAvailableListener {
+    method @Deprecated public void onBufferAvailable(android.renderscript.Allocation);
+  }
+
+  @Deprecated public class AllocationAdapter extends android.renderscript.Allocation {
+    method @Deprecated public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
+    method @Deprecated public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
+    method @Deprecated public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+    method @Deprecated public void resize(int);
+    method @Deprecated public void setFace(android.renderscript.Type.CubemapFace);
+    method @Deprecated public void setLOD(int);
+    method @Deprecated public void setX(int);
+    method @Deprecated public void setY(int);
+    method @Deprecated public void setZ(int);
+  }
+
+  @Deprecated public class BaseObj {
+    method @Deprecated public void destroy();
+    method @Deprecated public String getName();
+    method @Deprecated public void setName(String);
+  }
+
+  @Deprecated public class Byte2 {
+    ctor @Deprecated public Byte2();
+    ctor @Deprecated public Byte2(byte, byte);
+    field @Deprecated public byte x;
+    field @Deprecated public byte y;
+  }
+
+  @Deprecated public class Byte3 {
+    ctor @Deprecated public Byte3();
+    ctor @Deprecated public Byte3(byte, byte, byte);
+    field @Deprecated public byte x;
+    field @Deprecated public byte y;
+    field @Deprecated public byte z;
+  }
+
+  @Deprecated public class Byte4 {
+    ctor @Deprecated public Byte4();
+    ctor @Deprecated public Byte4(byte, byte, byte, byte);
+    field @Deprecated public byte w;
+    field @Deprecated public byte x;
+    field @Deprecated public byte y;
+    field @Deprecated public byte z;
+  }
+
+  @Deprecated public class Double2 {
+    ctor @Deprecated public Double2();
+    ctor @Deprecated public Double2(double, double);
+    field @Deprecated public double x;
+    field @Deprecated public double y;
+  }
+
+  @Deprecated public class Double3 {
+    ctor @Deprecated public Double3();
+    ctor @Deprecated public Double3(double, double, double);
+    field @Deprecated public double x;
+    field @Deprecated public double y;
+    field @Deprecated public double z;
+  }
+
+  @Deprecated public class Double4 {
+    ctor @Deprecated public Double4();
+    ctor @Deprecated public Double4(double, double, double, double);
+    field @Deprecated public double w;
+    field @Deprecated public double x;
+    field @Deprecated public double y;
+    field @Deprecated public double z;
+  }
+
+  @Deprecated public class Element extends android.renderscript.BaseObj {
+    method @Deprecated public static android.renderscript.Element ALLOCATION(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element A_8(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element BOOLEAN(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element ELEMENT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element FONT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX4X4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX_2X2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX_3X3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX_4X4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MESH(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_FRAGMENT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_RASTER(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_STORE(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_VERTEX(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGBA_4444(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGBA_5551(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGBA_8888(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGB_565(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGB_888(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element SAMPLER(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element SCRIPT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element TYPE(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element YUV(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element createPixel(android.renderscript.RenderScript, android.renderscript.Element.DataType, android.renderscript.Element.DataKind);
+    method @Deprecated public static android.renderscript.Element createVector(android.renderscript.RenderScript, android.renderscript.Element.DataType, int);
+    method @Deprecated public int getBytesSize();
+    method @Deprecated public android.renderscript.Element.DataKind getDataKind();
+    method @Deprecated public android.renderscript.Element.DataType getDataType();
+    method @Deprecated public android.renderscript.Element getSubElement(int);
+    method @Deprecated public int getSubElementArraySize(int);
+    method @Deprecated public int getSubElementCount();
+    method @Deprecated public String getSubElementName(int);
+    method @Deprecated public int getSubElementOffsetBytes(int);
+    method @Deprecated public int getVectorSize();
+    method @Deprecated public boolean isCompatible(android.renderscript.Element);
+    method @Deprecated public boolean isComplex();
+  }
+
+  @Deprecated public static class Element.Builder {
+    ctor @Deprecated public Element.Builder(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.Element.Builder add(android.renderscript.Element, String, int);
+    method @Deprecated public android.renderscript.Element.Builder add(android.renderscript.Element, String);
+    method @Deprecated public android.renderscript.Element create();
+  }
+
+  @Deprecated public enum Element.DataKind {
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_A;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_DEPTH;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_L;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_LA;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_RGB;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_RGBA;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_YUV;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind USER;
+  }
+
+  @Deprecated public enum Element.DataType {
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType BOOLEAN;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType FLOAT_16;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType FLOAT_32;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType FLOAT_64;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType MATRIX_2X2;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType MATRIX_3X3;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType MATRIX_4X4;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType NONE;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_ALLOCATION;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_ELEMENT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_FONT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_MESH;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_FRAGMENT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_RASTER;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_STORE;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_VERTEX;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_SAMPLER;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_SCRIPT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_TYPE;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_16;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_32;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_64;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_8;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_16;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_32;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_4_4_4_4;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_5_5_5_1;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_5_6_5;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_64;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_8;
+  }
+
+  @Deprecated public class FieldPacker {
+    ctor @Deprecated public FieldPacker(int);
+    ctor @Deprecated public FieldPacker(byte[]);
+    method @Deprecated public void addBoolean(boolean);
+    method @Deprecated public void addF32(float);
+    method @Deprecated public void addF32(android.renderscript.Float2);
+    method @Deprecated public void addF32(android.renderscript.Float3);
+    method @Deprecated public void addF32(android.renderscript.Float4);
+    method @Deprecated public void addF64(double);
+    method @Deprecated public void addF64(android.renderscript.Double2);
+    method @Deprecated public void addF64(android.renderscript.Double3);
+    method @Deprecated public void addF64(android.renderscript.Double4);
+    method @Deprecated public void addI16(short);
+    method @Deprecated public void addI16(android.renderscript.Short2);
+    method @Deprecated public void addI16(android.renderscript.Short3);
+    method @Deprecated public void addI16(android.renderscript.Short4);
+    method @Deprecated public void addI32(int);
+    method @Deprecated public void addI32(android.renderscript.Int2);
+    method @Deprecated public void addI32(android.renderscript.Int3);
+    method @Deprecated public void addI32(android.renderscript.Int4);
+    method @Deprecated public void addI64(long);
+    method @Deprecated public void addI64(android.renderscript.Long2);
+    method @Deprecated public void addI64(android.renderscript.Long3);
+    method @Deprecated public void addI64(android.renderscript.Long4);
+    method @Deprecated public void addI8(byte);
+    method @Deprecated public void addI8(android.renderscript.Byte2);
+    method @Deprecated public void addI8(android.renderscript.Byte3);
+    method @Deprecated public void addI8(android.renderscript.Byte4);
+    method @Deprecated public void addMatrix(android.renderscript.Matrix4f);
+    method @Deprecated public void addMatrix(android.renderscript.Matrix3f);
+    method @Deprecated public void addMatrix(android.renderscript.Matrix2f);
+    method @Deprecated public void addObj(android.renderscript.BaseObj);
+    method @Deprecated public void addU16(int);
+    method @Deprecated public void addU16(android.renderscript.Int2);
+    method @Deprecated public void addU16(android.renderscript.Int3);
+    method @Deprecated public void addU16(android.renderscript.Int4);
+    method @Deprecated public void addU32(long);
+    method @Deprecated public void addU32(android.renderscript.Long2);
+    method @Deprecated public void addU32(android.renderscript.Long3);
+    method @Deprecated public void addU32(android.renderscript.Long4);
+    method @Deprecated public void addU64(long);
+    method @Deprecated public void addU64(android.renderscript.Long2);
+    method @Deprecated public void addU64(android.renderscript.Long3);
+    method @Deprecated public void addU64(android.renderscript.Long4);
+    method @Deprecated public void addU8(short);
+    method @Deprecated public void addU8(android.renderscript.Short2);
+    method @Deprecated public void addU8(android.renderscript.Short3);
+    method @Deprecated public void addU8(android.renderscript.Short4);
+    method @Deprecated public void align(int);
+    method @Deprecated public final byte[] getData();
+    method @Deprecated public void reset();
+    method @Deprecated public void reset(int);
+    method @Deprecated public void skip(int);
+    method @Deprecated public boolean subBoolean();
+    method @Deprecated public android.renderscript.Byte2 subByte2();
+    method @Deprecated public android.renderscript.Byte3 subByte3();
+    method @Deprecated public android.renderscript.Byte4 subByte4();
+    method @Deprecated public android.renderscript.Double2 subDouble2();
+    method @Deprecated public android.renderscript.Double3 subDouble3();
+    method @Deprecated public android.renderscript.Double4 subDouble4();
+    method @Deprecated public float subF32();
+    method @Deprecated public double subF64();
+    method @Deprecated public android.renderscript.Float2 subFloat2();
+    method @Deprecated public android.renderscript.Float3 subFloat3();
+    method @Deprecated public android.renderscript.Float4 subFloat4();
+    method @Deprecated public short subI16();
+    method @Deprecated public int subI32();
+    method @Deprecated public long subI64();
+    method @Deprecated public byte subI8();
+    method @Deprecated public android.renderscript.Int2 subInt2();
+    method @Deprecated public android.renderscript.Int3 subInt3();
+    method @Deprecated public android.renderscript.Int4 subInt4();
+    method @Deprecated public android.renderscript.Long2 subLong2();
+    method @Deprecated public android.renderscript.Long3 subLong3();
+    method @Deprecated public android.renderscript.Long4 subLong4();
+    method @Deprecated public android.renderscript.Matrix2f subMatrix2f();
+    method @Deprecated public android.renderscript.Matrix3f subMatrix3f();
+    method @Deprecated public android.renderscript.Matrix4f subMatrix4f();
+    method @Deprecated public android.renderscript.Short2 subShort2();
+    method @Deprecated public android.renderscript.Short3 subShort3();
+    method @Deprecated public android.renderscript.Short4 subShort4();
+    method @Deprecated public void subalign(int);
+  }
+
+  @Deprecated public class Float2 {
+    ctor @Deprecated public Float2();
+    ctor @Deprecated public Float2(float, float);
+    field @Deprecated public float x;
+    field @Deprecated public float y;
+  }
+
+  @Deprecated public class Float3 {
+    ctor @Deprecated public Float3();
+    ctor @Deprecated public Float3(float, float, float);
+    field @Deprecated public float x;
+    field @Deprecated public float y;
+    field @Deprecated public float z;
+  }
+
+  @Deprecated public class Float4 {
+    ctor @Deprecated public Float4();
+    ctor @Deprecated public Float4(float, float, float, float);
+    field @Deprecated public float w;
+    field @Deprecated public float x;
+    field @Deprecated public float y;
+    field @Deprecated public float z;
+  }
+
+  @Deprecated public class Int2 {
+    ctor @Deprecated public Int2();
+    ctor @Deprecated public Int2(int, int);
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+  }
+
+  @Deprecated public class Int3 {
+    ctor @Deprecated public Int3();
+    ctor @Deprecated public Int3(int, int, int);
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+    field @Deprecated public int z;
+  }
+
+  @Deprecated public class Int4 {
+    ctor @Deprecated public Int4();
+    ctor @Deprecated public Int4(int, int, int, int);
+    field @Deprecated public int w;
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+    field @Deprecated public int z;
+  }
+
+  @Deprecated public class Long2 {
+    ctor @Deprecated public Long2();
+    ctor @Deprecated public Long2(long, long);
+    field @Deprecated public long x;
+    field @Deprecated public long y;
+  }
+
+  @Deprecated public class Long3 {
+    ctor @Deprecated public Long3();
+    ctor @Deprecated public Long3(long, long, long);
+    field @Deprecated public long x;
+    field @Deprecated public long y;
+    field @Deprecated public long z;
+  }
+
+  @Deprecated public class Long4 {
+    ctor @Deprecated public Long4();
+    ctor @Deprecated public Long4(long, long, long, long);
+    field @Deprecated public long w;
+    field @Deprecated public long x;
+    field @Deprecated public long y;
+    field @Deprecated public long z;
+  }
+
+  @Deprecated public class Matrix2f {
+    ctor @Deprecated public Matrix2f();
+    ctor @Deprecated public Matrix2f(float[]);
+    method @Deprecated public float get(int, int);
+    method @Deprecated public float[] getArray();
+    method @Deprecated public void load(android.renderscript.Matrix2f);
+    method @Deprecated public void loadIdentity();
+    method @Deprecated public void loadMultiply(android.renderscript.Matrix2f, android.renderscript.Matrix2f);
+    method @Deprecated public void loadRotate(float);
+    method @Deprecated public void loadScale(float, float);
+    method @Deprecated public void multiply(android.renderscript.Matrix2f);
+    method @Deprecated public void rotate(float);
+    method @Deprecated public void scale(float, float);
+    method @Deprecated public void set(int, int, float);
+    method @Deprecated public void transpose();
+  }
+
+  @Deprecated public class Matrix3f {
+    ctor @Deprecated public Matrix3f();
+    ctor @Deprecated public Matrix3f(float[]);
+    method @Deprecated public float get(int, int);
+    method @Deprecated public float[] getArray();
+    method @Deprecated public void load(android.renderscript.Matrix3f);
+    method @Deprecated public void loadIdentity();
+    method @Deprecated public void loadMultiply(android.renderscript.Matrix3f, android.renderscript.Matrix3f);
+    method @Deprecated public void loadRotate(float, float, float, float);
+    method @Deprecated public void loadRotate(float);
+    method @Deprecated public void loadScale(float, float);
+    method @Deprecated public void loadScale(float, float, float);
+    method @Deprecated public void loadTranslate(float, float);
+    method @Deprecated public void multiply(android.renderscript.Matrix3f);
+    method @Deprecated public void rotate(float, float, float, float);
+    method @Deprecated public void rotate(float);
+    method @Deprecated public void scale(float, float);
+    method @Deprecated public void scale(float, float, float);
+    method @Deprecated public void set(int, int, float);
+    method @Deprecated public void translate(float, float);
+    method @Deprecated public void transpose();
+  }
+
+  @Deprecated public class Matrix4f {
+    ctor @Deprecated public Matrix4f();
+    ctor @Deprecated public Matrix4f(float[]);
+    method @Deprecated public float get(int, int);
+    method @Deprecated public float[] getArray();
+    method @Deprecated public boolean inverse();
+    method @Deprecated public boolean inverseTranspose();
+    method @Deprecated public void load(android.renderscript.Matrix4f);
+    method @Deprecated public void loadFrustum(float, float, float, float, float, float);
+    method @Deprecated public void loadIdentity();
+    method @Deprecated public void loadMultiply(android.renderscript.Matrix4f, android.renderscript.Matrix4f);
+    method @Deprecated public void loadOrtho(float, float, float, float, float, float);
+    method @Deprecated public void loadOrthoWindow(int, int);
+    method @Deprecated public void loadPerspective(float, float, float, float);
+    method @Deprecated public void loadProjectionNormalized(int, int);
+    method @Deprecated public void loadRotate(float, float, float, float);
+    method @Deprecated public void loadScale(float, float, float);
+    method @Deprecated public void loadTranslate(float, float, float);
+    method @Deprecated public void multiply(android.renderscript.Matrix4f);
+    method @Deprecated public void rotate(float, float, float, float);
+    method @Deprecated public void scale(float, float, float);
+    method @Deprecated public void set(int, int, float);
+    method @Deprecated public void translate(float, float, float);
+    method @Deprecated public void transpose();
+  }
+
+  @Deprecated public class RSDriverException extends android.renderscript.RSRuntimeException {
+    ctor @Deprecated public RSDriverException(String);
+  }
+
+  @Deprecated public class RSIllegalArgumentException extends android.renderscript.RSRuntimeException {
+    ctor @Deprecated public RSIllegalArgumentException(String);
+  }
+
+  @Deprecated public class RSInvalidStateException extends android.renderscript.RSRuntimeException {
+    ctor @Deprecated public RSInvalidStateException(String);
+  }
+
+  @Deprecated public class RSRuntimeException extends java.lang.RuntimeException {
+    ctor @Deprecated public RSRuntimeException(String);
+  }
+
+  @Deprecated public class RenderScript {
+    method @Deprecated public void contextDump();
+    method @Deprecated public static android.renderscript.RenderScript create(android.content.Context);
+    method @Deprecated public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType);
+    method @Deprecated public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType, int);
+    method @Deprecated public static android.renderscript.RenderScript createMultiContext(android.content.Context, android.renderscript.RenderScript.ContextType, int, int);
+    method @Deprecated public void destroy();
+    method @Deprecated public void finish();
+    method @Deprecated public final android.content.Context getApplicationContext();
+    method @Deprecated public android.renderscript.RenderScript.RSErrorHandler getErrorHandler();
+    method @Deprecated public android.renderscript.RenderScript.RSMessageHandler getMessageHandler();
+    method @Deprecated public static long getMinorVersion();
+    method @Deprecated public static void releaseAllContexts();
+    method @Deprecated public void sendMessage(int, int[]);
+    method @Deprecated public void setErrorHandler(android.renderscript.RenderScript.RSErrorHandler);
+    method @Deprecated public void setMessageHandler(android.renderscript.RenderScript.RSMessageHandler);
+    method @Deprecated public void setPriority(android.renderscript.RenderScript.Priority);
+    field @Deprecated public static final int CREATE_FLAG_LOW_LATENCY = 2; // 0x2
+    field @Deprecated public static final int CREATE_FLAG_LOW_POWER = 4; // 0x4
+    field @Deprecated public static final int CREATE_FLAG_NONE = 0; // 0x0
+  }
+
+  @Deprecated public enum RenderScript.ContextType {
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.ContextType DEBUG;
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.ContextType NORMAL;
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.ContextType PROFILE;
+  }
+
+  @Deprecated public enum RenderScript.Priority {
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.Priority LOW;
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.Priority NORMAL;
+  }
+
+  @Deprecated public static class RenderScript.RSErrorHandler implements java.lang.Runnable {
+    ctor @Deprecated public RenderScript.RSErrorHandler();
+    method @Deprecated public void run();
+    field @Deprecated protected String mErrorMessage;
+    field @Deprecated protected int mErrorNum;
+  }
+
+  @Deprecated public static class RenderScript.RSMessageHandler implements java.lang.Runnable {
+    ctor @Deprecated public RenderScript.RSMessageHandler();
+    method @Deprecated public void run();
+    field @Deprecated protected int[] mData;
+    field @Deprecated protected int mID;
+    field @Deprecated protected int mLength;
+  }
+
+  @Deprecated public class Sampler extends android.renderscript.BaseObj {
+    method @Deprecated public static android.renderscript.Sampler CLAMP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler CLAMP_LINEAR_MIP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler CLAMP_NEAREST(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler MIRRORED_REPEAT_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler MIRRORED_REPEAT_NEAREST(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler WRAP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler WRAP_LINEAR_MIP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler WRAP_NEAREST(android.renderscript.RenderScript);
+    method @Deprecated public float getAnisotropy();
+    method @Deprecated public android.renderscript.Sampler.Value getMagnification();
+    method @Deprecated public android.renderscript.Sampler.Value getMinification();
+    method @Deprecated public android.renderscript.Sampler.Value getWrapS();
+    method @Deprecated public android.renderscript.Sampler.Value getWrapT();
+  }
+
+  @Deprecated public static class Sampler.Builder {
+    ctor @Deprecated public Sampler.Builder(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.Sampler create();
+    method @Deprecated public void setAnisotropy(float);
+    method @Deprecated public void setMagnification(android.renderscript.Sampler.Value);
+    method @Deprecated public void setMinification(android.renderscript.Sampler.Value);
+    method @Deprecated public void setWrapS(android.renderscript.Sampler.Value);
+    method @Deprecated public void setWrapT(android.renderscript.Sampler.Value);
+  }
+
+  @Deprecated public enum Sampler.Value {
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value CLAMP;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value LINEAR;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value LINEAR_MIP_LINEAR;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value LINEAR_MIP_NEAREST;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value MIRRORED_REPEAT;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value NEAREST;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value WRAP;
+  }
+
+  @Deprecated public class Script extends android.renderscript.BaseObj {
+    method @Deprecated public void bindAllocation(android.renderscript.Allocation, int);
+    method @Deprecated protected android.renderscript.Script.FieldID createFieldID(int, android.renderscript.Element);
+    method @Deprecated protected android.renderscript.Script.InvokeID createInvokeID(int);
+    method @Deprecated protected android.renderscript.Script.KernelID createKernelID(int, int, android.renderscript.Element, android.renderscript.Element);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker, android.renderscript.Script.LaunchOptions);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation[], android.renderscript.Allocation, android.renderscript.FieldPacker);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation[], android.renderscript.Allocation, android.renderscript.FieldPacker, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public boolean getVarB(int);
+    method @Deprecated public double getVarD(int);
+    method @Deprecated public float getVarF(int);
+    method @Deprecated public int getVarI(int);
+    method @Deprecated public long getVarJ(int);
+    method @Deprecated public void getVarV(int, android.renderscript.FieldPacker);
+    method @Deprecated protected void invoke(int);
+    method @Deprecated protected void invoke(int, android.renderscript.FieldPacker);
+    method @Deprecated protected void reduce(int, android.renderscript.Allocation[], android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void setTimeZone(String);
+    method @Deprecated public void setVar(int, float);
+    method @Deprecated public void setVar(int, double);
+    method @Deprecated public void setVar(int, int);
+    method @Deprecated public void setVar(int, long);
+    method @Deprecated public void setVar(int, boolean);
+    method @Deprecated public void setVar(int, android.renderscript.BaseObj);
+    method @Deprecated public void setVar(int, android.renderscript.FieldPacker);
+    method @Deprecated public void setVar(int, android.renderscript.FieldPacker, android.renderscript.Element, int[]);
+  }
+
+  @Deprecated public static class Script.Builder {
+  }
+
+  @Deprecated public static class Script.FieldBase {
+    ctor @Deprecated protected Script.FieldBase();
+    method @Deprecated public android.renderscript.Allocation getAllocation();
+    method @Deprecated public android.renderscript.Element getElement();
+    method @Deprecated public android.renderscript.Type getType();
+    method @Deprecated protected void init(android.renderscript.RenderScript, int);
+    method @Deprecated protected void init(android.renderscript.RenderScript, int, int);
+    method @Deprecated public void updateAllocation();
+    field @Deprecated protected android.renderscript.Allocation mAllocation;
+    field @Deprecated protected android.renderscript.Element mElement;
+  }
+
+  @Deprecated public static final class Script.FieldID extends android.renderscript.BaseObj {
+  }
+
+  @Deprecated public static final class Script.InvokeID extends android.renderscript.BaseObj {
+  }
+
+  @Deprecated public static final class Script.KernelID extends android.renderscript.BaseObj {
+  }
+
+  @Deprecated public static final class Script.LaunchOptions {
+    ctor @Deprecated public Script.LaunchOptions();
+    method @Deprecated public int getXEnd();
+    method @Deprecated public int getXStart();
+    method @Deprecated public int getYEnd();
+    method @Deprecated public int getYStart();
+    method @Deprecated public int getZEnd();
+    method @Deprecated public int getZStart();
+    method @Deprecated public android.renderscript.Script.LaunchOptions setX(int, int);
+    method @Deprecated public android.renderscript.Script.LaunchOptions setY(int, int);
+    method @Deprecated public android.renderscript.Script.LaunchOptions setZ(int, int);
+  }
+
+  @Deprecated public class ScriptC extends android.renderscript.Script {
+    ctor @Deprecated protected ScriptC(int, android.renderscript.RenderScript);
+    ctor @Deprecated protected ScriptC(long, android.renderscript.RenderScript);
+    ctor @Deprecated protected ScriptC(android.renderscript.RenderScript, android.content.res.Resources, int);
+    ctor @Deprecated protected ScriptC(android.renderscript.RenderScript, String, byte[], byte[]);
+  }
+
+  @Deprecated public final class ScriptGroup extends android.renderscript.BaseObj {
+    method @Deprecated public Object[] execute(java.lang.Object...);
+    method @Deprecated public void execute();
+    method @Deprecated public void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+    method @Deprecated public void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+  }
+
+  @Deprecated public static final class ScriptGroup.Binding {
+    ctor @Deprecated public ScriptGroup.Binding(android.renderscript.Script.FieldID, Object);
+  }
+
+  @Deprecated public static final class ScriptGroup.Builder {
+    ctor @Deprecated public ScriptGroup.Builder(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.FieldID);
+    method @Deprecated public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.KernelID);
+    method @Deprecated public android.renderscript.ScriptGroup.Builder addKernel(android.renderscript.Script.KernelID);
+    method @Deprecated public android.renderscript.ScriptGroup create();
+  }
+
+  @Deprecated public static final class ScriptGroup.Builder2 {
+    ctor @Deprecated public ScriptGroup.Builder2(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.ScriptGroup.Input addInput();
+    method @Deprecated public android.renderscript.ScriptGroup.Closure addInvoke(android.renderscript.Script.InvokeID, java.lang.Object...);
+    method @Deprecated public android.renderscript.ScriptGroup.Closure addKernel(android.renderscript.Script.KernelID, android.renderscript.Type, java.lang.Object...);
+    method @Deprecated public android.renderscript.ScriptGroup create(String, android.renderscript.ScriptGroup.Future...);
+  }
+
+  @Deprecated public static final class ScriptGroup.Closure extends android.renderscript.BaseObj {
+    method @Deprecated public android.renderscript.ScriptGroup.Future getGlobal(android.renderscript.Script.FieldID);
+    method @Deprecated public android.renderscript.ScriptGroup.Future getReturn();
+  }
+
+  @Deprecated public static final class ScriptGroup.Future {
+  }
+
+  @Deprecated public static final class ScriptGroup.Input {
+  }
+
+  @Deprecated public abstract class ScriptIntrinsic extends android.renderscript.Script {
+  }
+
+  @Deprecated public final class ScriptIntrinsic3DLUT extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsic3DLUT create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setLUT(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicBLAS extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public void BNNM(android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation, int, int);
+    method @Deprecated public void CGBMV(int, int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CGEMM(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CGEMV(int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CGERC(android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CGERU(android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHBMV(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CHEMM(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CHEMV(int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CHER(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHER2(int, android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHER2K(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void CHERK(int, int, float, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void CHPMV(int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CHPR(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHPR2(int, android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CSYMM(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CSYR2K(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CSYRK(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CTBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTRMM(int, int, int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void CTRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTRSM(int, int, int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void CTRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DGBMV(int, int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DGEMM(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DGEMV(int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DGER(double, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSBMV(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DSPMV(int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DSPR(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSPR2(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSYMM(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DSYMV(int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DSYR(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSYR2(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSYR2K(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DSYRK(int, int, double, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DTBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTRMM(int, int, int, int, double, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void DTRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTRSM(int, int, int, int, double, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void DTRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void SGBMV(int, int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SGEMM(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void SGEMV(int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SGER(float, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSBMV(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SSPMV(int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SSPR(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSPR2(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSYMM(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void SSYMV(int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SSYR(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSYR2(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSYR2K(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void SSYRK(int, int, float, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void STBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STRMM(int, int, int, int, float, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void STRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STRSM(int, int, int, int, float, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void STRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZGBMV(int, int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZGEMM(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZGEMV(int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZGERC(android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZGERU(android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHBMV(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZHEMM(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZHEMV(int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZHER(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHER2(int, android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHER2K(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void ZHERK(int, int, double, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void ZHPMV(int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZHPR(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHPR2(int, android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZSYMM(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZSYR2K(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZSYRK(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZTBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTRMM(int, int, int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void ZTRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTRSM(int, int, int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void ZTRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public static android.renderscript.ScriptIntrinsicBLAS create(android.renderscript.RenderScript);
+    field @Deprecated public static final int CONJ_TRANSPOSE = 113; // 0x71
+    field @Deprecated public static final int LEFT = 141; // 0x8d
+    field @Deprecated public static final int LOWER = 122; // 0x7a
+    field @Deprecated public static final int NON_UNIT = 131; // 0x83
+    field @Deprecated public static final int NO_TRANSPOSE = 111; // 0x6f
+    field @Deprecated public static final int RIGHT = 142; // 0x8e
+    field @Deprecated public static final int TRANSPOSE = 112; // 0x70
+    field @Deprecated public static final int UNIT = 132; // 0x84
+    field @Deprecated public static final int UPPER = 121; // 0x79
+  }
+
+  @Deprecated public class ScriptIntrinsicBlend extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicBlend create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDAdd();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDClear();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDst();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstAtop();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstIn();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstOut();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstOver();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDMultiply();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrc();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcAtop();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcIn();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcOut();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcOver();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSubtract();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDXor();
+  }
+
+  @Deprecated public final class ScriptIntrinsicBlur extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicBlur create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+    method @Deprecated public void setRadius(float);
+  }
+
+  @Deprecated public final class ScriptIntrinsicColorMatrix extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setAdd(android.renderscript.Float4);
+    method @Deprecated public void setAdd(float, float, float, float);
+    method @Deprecated public void setColorMatrix(android.renderscript.Matrix4f);
+    method @Deprecated public void setColorMatrix(android.renderscript.Matrix3f);
+    method @Deprecated public void setGreyscale();
+    method @Deprecated public void setRGBtoYUV();
+    method @Deprecated public void setYUVtoRGB();
+  }
+
+  @Deprecated public final class ScriptIntrinsicConvolve3x3 extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicConvolve3x3 create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setCoefficients(float[]);
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicConvolve5x5 extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicConvolve5x5 create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setCoefficients(float[]);
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicHistogram extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicHistogram create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEach_Dot(android.renderscript.Allocation);
+    method @Deprecated public void forEach_Dot(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID_Separate();
+    method @Deprecated public void setDotCoefficients(float, float, float, float);
+    method @Deprecated public void setOutput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicLUT extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicLUT create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setAlpha(int, int);
+    method @Deprecated public void setBlue(int, int);
+    method @Deprecated public void setGreen(int, int);
+    method @Deprecated public void setRed(int, int);
+  }
+
+  @Deprecated public final class ScriptIntrinsicResize extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicResize create(android.renderscript.RenderScript);
+    method @Deprecated public void forEach_bicubic(android.renderscript.Allocation);
+    method @Deprecated public void forEach_bicubic(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID_bicubic();
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicYuvToRGB extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicYuvToRGB create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public class Short2 {
+    ctor @Deprecated public Short2();
+    ctor @Deprecated public Short2(short, short);
+    field @Deprecated public short x;
+    field @Deprecated public short y;
+  }
+
+  @Deprecated public class Short3 {
+    ctor @Deprecated public Short3();
+    ctor @Deprecated public Short3(short, short, short);
+    field @Deprecated public short x;
+    field @Deprecated public short y;
+    field @Deprecated public short z;
+  }
+
+  @Deprecated public class Short4 {
+    ctor @Deprecated public Short4();
+    ctor @Deprecated public Short4(short, short, short, short);
+    field @Deprecated public short w;
+    field @Deprecated public short x;
+    field @Deprecated public short y;
+    field @Deprecated public short z;
+  }
+
+  @Deprecated public class Type extends android.renderscript.BaseObj {
+    method @Deprecated public static android.renderscript.Type createX(android.renderscript.RenderScript, android.renderscript.Element, int);
+    method @Deprecated public static android.renderscript.Type createXY(android.renderscript.RenderScript, android.renderscript.Element, int, int);
+    method @Deprecated public static android.renderscript.Type createXYZ(android.renderscript.RenderScript, android.renderscript.Element, int, int, int);
+    method @Deprecated public int getCount();
+    method @Deprecated public android.renderscript.Element getElement();
+    method @Deprecated public int getX();
+    method @Deprecated public int getY();
+    method @Deprecated public int getYuv();
+    method @Deprecated public int getZ();
+    method @Deprecated public boolean hasFaces();
+    method @Deprecated public boolean hasMipmaps();
+  }
+
+  @Deprecated public static class Type.Builder {
+    ctor @Deprecated public Type.Builder(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public android.renderscript.Type create();
+    method @Deprecated public android.renderscript.Type.Builder setFaces(boolean);
+    method @Deprecated public android.renderscript.Type.Builder setMipmaps(boolean);
+    method @Deprecated public android.renderscript.Type.Builder setX(int);
+    method @Deprecated public android.renderscript.Type.Builder setY(int);
+    method @Deprecated public android.renderscript.Type.Builder setYuvFormat(int);
+    method @Deprecated public android.renderscript.Type.Builder setZ(int);
+  }
+
+  @Deprecated public enum Type.CubemapFace {
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace NEGATIVE_X;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace NEGATIVE_Y;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace NEGATIVE_Z;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITIVE_X;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITIVE_Y;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITIVE_Z;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITVE_X;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITVE_Y;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITVE_Z;
+  }
+
+}
+
+package android.sax {
+
+  public class Element {
+    method public android.sax.Element getChild(String);
+    method public android.sax.Element getChild(String, String);
+    method public android.sax.Element requireChild(String);
+    method public android.sax.Element requireChild(String, String);
+    method public void setElementListener(android.sax.ElementListener);
+    method public void setEndElementListener(android.sax.EndElementListener);
+    method public void setEndTextElementListener(android.sax.EndTextElementListener);
+    method public void setStartElementListener(android.sax.StartElementListener);
+    method public void setTextElementListener(android.sax.TextElementListener);
+  }
+
+  public interface ElementListener extends android.sax.StartElementListener android.sax.EndElementListener {
+  }
+
+  public interface EndElementListener {
+    method public void end();
+  }
+
+  public interface EndTextElementListener {
+    method public void end(String);
+  }
+
+  public class RootElement extends android.sax.Element {
+    ctor public RootElement(String, String);
+    ctor public RootElement(String);
+    method public org.xml.sax.ContentHandler getContentHandler();
+  }
+
+  public interface StartElementListener {
+    method public void start(org.xml.sax.Attributes);
+  }
+
+  public interface TextElementListener extends android.sax.StartElementListener android.sax.EndTextElementListener {
+  }
+
+}
+
+package android.se.omapi {
+
+  public final class Channel implements java.nio.channels.Channel {
+    method public void close();
+    method @Nullable public byte[] getSelectResponse();
+    method @NonNull public android.se.omapi.Session getSession();
+    method public boolean isBasicChannel();
+    method public boolean isOpen();
+    method public boolean selectNext() throws java.io.IOException;
+    method @NonNull public byte[] transmit(@NonNull byte[]) throws java.io.IOException;
+  }
+
+  public final class Reader {
+    method public void closeSessions();
+    method @NonNull public String getName();
+    method @NonNull public android.se.omapi.SEService getSEService();
+    method public boolean isSecureElementPresent();
+    method @NonNull public android.se.omapi.Session openSession() throws java.io.IOException;
+  }
+
+  public final class SEService {
+    ctor public SEService(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.se.omapi.SEService.OnConnectedListener);
+    method @NonNull public android.se.omapi.Reader[] getReaders();
+    method @NonNull public android.se.omapi.Reader getUiccReader(int);
+    method @NonNull public String getVersion();
+    method public boolean isConnected();
+    method public void shutdown();
+    field public static final String ACTION_SECURE_ELEMENT_STATE_CHANGED = "android.se.omapi.action.SECURE_ELEMENT_STATE_CHANGED";
+    field public static final String EXTRA_READER_NAME = "android.se.omapi.extra.READER_NAME";
+    field public static final String EXTRA_READER_STATE = "android.se.omapi.extra.READER_STATE";
+  }
+
+  public static interface SEService.OnConnectedListener {
+    method public void onConnected();
+  }
+
+  public final class Session {
+    method public void close();
+    method public void closeChannels();
+    method @Nullable public byte[] getATR();
+    method @NonNull public android.se.omapi.Reader getReader();
+    method public boolean isClosed();
+    method @Nullable public android.se.omapi.Channel openBasicChannel(@Nullable byte[], @Nullable byte) throws java.io.IOException;
+    method @Nullable public android.se.omapi.Channel openBasicChannel(@Nullable byte[]) throws java.io.IOException;
+    method @Nullable public android.se.omapi.Channel openLogicalChannel(@Nullable byte[], @Nullable byte) throws java.io.IOException;
+    method @Nullable public android.se.omapi.Channel openLogicalChannel(@Nullable byte[]) throws java.io.IOException;
+  }
+
+}
+
+package android.security {
+
+  public final class AppUriAuthenticationPolicy implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.util.Map<android.net.Uri,java.lang.String>> getAppAndUriMappings();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.AppUriAuthenticationPolicy> CREATOR;
+  }
+
+  public static final class AppUriAuthenticationPolicy.Builder {
+    ctor public AppUriAuthenticationPolicy.Builder();
+    method @NonNull public android.security.AppUriAuthenticationPolicy.Builder addAppAndUriMapping(@NonNull String, @NonNull android.net.Uri, @NonNull String);
+    method @NonNull public android.security.AppUriAuthenticationPolicy build();
+  }
+
+  public final class AttestedKeyPair {
+    ctor public AttestedKeyPair(@Nullable java.security.KeyPair, @NonNull java.util.List<java.security.cert.Certificate>);
+    method @NonNull public java.util.List<java.security.cert.Certificate> getAttestationRecord();
+    method @Nullable public java.security.KeyPair getKeyPair();
+  }
+
+  public class ConfirmationAlreadyPresentingException extends java.lang.Exception {
+    ctor public ConfirmationAlreadyPresentingException();
+    ctor public ConfirmationAlreadyPresentingException(String);
+  }
+
+  public abstract class ConfirmationCallback {
+    ctor public ConfirmationCallback();
+    method public void onCanceled();
+    method public void onConfirmed(@NonNull byte[]);
+    method public void onDismissed();
+    method public void onError(Throwable);
+  }
+
+  public class ConfirmationNotAvailableException extends java.lang.Exception {
+    ctor public ConfirmationNotAvailableException();
+    ctor public ConfirmationNotAvailableException(String);
+  }
+
+  public class ConfirmationPrompt {
+    method public void cancelPrompt();
+    method public static boolean isSupported(android.content.Context);
+    method public void presentPrompt(@NonNull java.util.concurrent.Executor, @NonNull android.security.ConfirmationCallback) throws android.security.ConfirmationAlreadyPresentingException, android.security.ConfirmationNotAvailableException;
+  }
+
+  public static final class ConfirmationPrompt.Builder {
+    ctor public ConfirmationPrompt.Builder(android.content.Context);
+    method public android.security.ConfirmationPrompt build();
+    method public android.security.ConfirmationPrompt.Builder setExtraData(byte[]);
+    method public android.security.ConfirmationPrompt.Builder setPromptText(CharSequence);
+  }
+
+  public final class FileIntegrityManager {
+    method public boolean isApkVeritySupported();
+    method @RequiresPermission(anyOf={android.Manifest.permission.INSTALL_PACKAGES, android.Manifest.permission.REQUEST_INSTALL_PACKAGES}) public boolean isAppSourceCertificateTrusted(@NonNull java.security.cert.X509Certificate) throws java.security.cert.CertificateEncodingException;
+  }
+
+  public final class KeyChain {
+    ctor public KeyChain();
+    method public static void choosePrivateKeyAlias(@NonNull android.app.Activity, @NonNull android.security.KeyChainAliasCallback, @Nullable String[], @Nullable java.security.Principal[], @Nullable String, int, @Nullable String);
+    method public static void choosePrivateKeyAlias(@NonNull android.app.Activity, @NonNull android.security.KeyChainAliasCallback, @Nullable String[], @Nullable java.security.Principal[], @Nullable android.net.Uri, @Nullable String);
+    method @NonNull public static android.content.Intent createInstallIntent();
+    method @NonNull public static android.content.Intent createManageCredentialsIntent(@NonNull android.security.AppUriAuthenticationPolicy);
+    method @Nullable @WorkerThread public static java.security.cert.X509Certificate[] getCertificateChain(@NonNull android.content.Context, @NonNull String) throws java.lang.InterruptedException, android.security.KeyChainException;
+    method @NonNull @WorkerThread public static android.security.AppUriAuthenticationPolicy getCredentialManagementAppPolicy(@NonNull android.content.Context) throws java.lang.SecurityException;
+    method @Nullable @WorkerThread public static java.security.PrivateKey getPrivateKey(@NonNull android.content.Context, @NonNull String) throws java.lang.InterruptedException, android.security.KeyChainException;
+    method @Deprecated public static boolean isBoundKeyAlgorithm(@NonNull String);
+    method @WorkerThread public static boolean isCredentialManagementApp(@NonNull android.content.Context);
+    method public static boolean isKeyAlgorithmSupported(@NonNull String);
+    method @RequiresPermission(value="android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP", conditional=true) @WorkerThread public static boolean removeCredentialManagementApp(@NonNull android.content.Context);
+    field public static final String ACTION_KEYCHAIN_CHANGED = "android.security.action.KEYCHAIN_CHANGED";
+    field public static final String ACTION_KEY_ACCESS_CHANGED = "android.security.action.KEY_ACCESS_CHANGED";
+    field @Deprecated public static final String ACTION_STORAGE_CHANGED = "android.security.STORAGE_CHANGED";
+    field public static final String ACTION_TRUST_STORE_CHANGED = "android.security.action.TRUST_STORE_CHANGED";
+    field public static final String EXTRA_CERTIFICATE = "CERT";
+    field public static final String EXTRA_KEY_ACCESSIBLE = "android.security.extra.KEY_ACCESSIBLE";
+    field public static final String EXTRA_KEY_ALIAS = "android.security.extra.KEY_ALIAS";
+    field public static final String EXTRA_NAME = "name";
+    field public static final String EXTRA_PKCS12 = "PKCS12";
+    field public static final String KEY_ALIAS_SELECTION_DENIED = "android:alias-selection-denied";
+  }
+
+  public interface KeyChainAliasCallback {
+    method public void alias(@Nullable String);
+  }
+
+  public class KeyChainException extends java.lang.Exception {
+    ctor public KeyChainException();
+    ctor public KeyChainException(String);
+    ctor public KeyChainException(String, Throwable);
+    ctor public KeyChainException(Throwable);
+  }
+
+  @Deprecated public final class KeyPairGeneratorSpec implements java.security.spec.AlgorithmParameterSpec {
+    method @Deprecated @NonNull public java.security.spec.AlgorithmParameterSpec getAlgorithmParameterSpec();
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated @NonNull public java.util.Date getEndDate();
+    method @Deprecated public int getKeySize();
+    method @Deprecated @Nullable public String getKeyType();
+    method @Deprecated public String getKeystoreAlias();
+    method @Deprecated @NonNull public java.math.BigInteger getSerialNumber();
+    method @Deprecated @NonNull public java.util.Date getStartDate();
+    method @Deprecated @NonNull public javax.security.auth.x500.X500Principal getSubjectDN();
+    method @Deprecated public boolean isEncryptionRequired();
+  }
+
+  @Deprecated public static final class KeyPairGeneratorSpec.Builder {
+    ctor @Deprecated public KeyPairGeneratorSpec.Builder(@NonNull android.content.Context);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec build();
+    method @Deprecated public android.security.KeyPairGeneratorSpec.Builder setAlgorithmParameterSpec(@NonNull java.security.spec.AlgorithmParameterSpec);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setAlias(@NonNull String);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setEncryptionRequired();
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setEndDate(@NonNull java.util.Date);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setKeySize(int);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setKeyType(@NonNull String) throws java.security.NoSuchAlgorithmException;
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setSerialNumber(@NonNull java.math.BigInteger);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setStartDate(@NonNull java.util.Date);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setSubject(@NonNull javax.security.auth.x500.X500Principal);
+  }
+
+  @Deprecated public final class KeyStoreParameter implements java.security.KeyStore.ProtectionParameter {
+    method @Deprecated public boolean isEncryptionRequired();
+  }
+
+  @Deprecated public static final class KeyStoreParameter.Builder {
+    ctor @Deprecated public KeyStoreParameter.Builder(@NonNull android.content.Context);
+    method @Deprecated @NonNull public android.security.KeyStoreParameter build();
+    method @Deprecated @NonNull public android.security.KeyStoreParameter.Builder setEncryptionRequired(boolean);
+  }
+
+  public class NetworkSecurityPolicy {
+    method public static android.security.NetworkSecurityPolicy getInstance();
+    method public boolean isCleartextTrafficPermitted();
+    method public boolean isCleartextTrafficPermitted(String);
+  }
+
+}
+
+package android.security.identity {
+
+  public class AccessControlProfile {
+  }
+
+  public static final class AccessControlProfile.Builder {
+    ctor public AccessControlProfile.Builder(@NonNull android.security.identity.AccessControlProfileId);
+    method @NonNull public android.security.identity.AccessControlProfile build();
+    method @NonNull public android.security.identity.AccessControlProfile.Builder setReaderCertificate(@NonNull java.security.cert.X509Certificate);
+    method @NonNull public android.security.identity.AccessControlProfile.Builder setUserAuthenticationRequired(boolean);
+    method @NonNull public android.security.identity.AccessControlProfile.Builder setUserAuthenticationTimeout(long);
+  }
+
+  public class AccessControlProfileId {
+    ctor public AccessControlProfileId(int);
+    method public int getId();
+  }
+
+  public class AlreadyPersonalizedException extends android.security.identity.IdentityCredentialException {
+    ctor public AlreadyPersonalizedException(@NonNull String);
+    ctor public AlreadyPersonalizedException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class CipherSuiteNotSupportedException extends android.security.identity.IdentityCredentialException {
+    ctor public CipherSuiteNotSupportedException(@NonNull String);
+    ctor public CipherSuiteNotSupportedException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class DocTypeNotSupportedException extends android.security.identity.IdentityCredentialException {
+    ctor public DocTypeNotSupportedException(@NonNull String);
+    ctor public DocTypeNotSupportedException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class EphemeralPublicKeyNotFoundException extends android.security.identity.IdentityCredentialException {
+    ctor public EphemeralPublicKeyNotFoundException(@NonNull String);
+    ctor public EphemeralPublicKeyNotFoundException(@NonNull String, @NonNull Throwable);
+  }
+
+  public abstract class IdentityCredential {
+    method @NonNull public abstract java.security.KeyPair createEphemeralKeyPair();
+    method @NonNull public abstract byte[] decryptMessageFromReader(@NonNull byte[]) throws android.security.identity.MessageDecryptionException;
+    method @NonNull public byte[] delete(@NonNull byte[]);
+    method @NonNull public abstract byte[] encryptMessageToReader(@NonNull byte[]);
+    method @NonNull public abstract java.util.Collection<java.security.cert.X509Certificate> getAuthKeysNeedingCertification();
+    method @NonNull public abstract int[] getAuthenticationDataUsageCount();
+    method @NonNull public abstract java.util.Collection<java.security.cert.X509Certificate> getCredentialKeyCertificateChain();
+    method @NonNull public abstract android.security.identity.ResultData getEntries(@Nullable byte[], @NonNull java.util.Map<java.lang.String,java.util.Collection<java.lang.String>>, @Nullable byte[], @Nullable byte[]) throws android.security.identity.EphemeralPublicKeyNotFoundException, android.security.identity.InvalidReaderSignatureException, android.security.identity.InvalidRequestMessageException, android.security.identity.NoAuthenticationKeyAvailableException, android.security.identity.SessionTranscriptMismatchException;
+    method @NonNull public byte[] proveOwnership(@NonNull byte[]);
+    method public abstract void setAllowUsingExhaustedKeys(boolean);
+    method public void setAllowUsingExpiredKeys(boolean);
+    method public abstract void setAvailableAuthenticationKeys(int, int);
+    method public abstract void setReaderEphemeralPublicKey(@NonNull java.security.PublicKey) throws java.security.InvalidKeyException;
+    method @Deprecated public abstract void storeStaticAuthenticationData(@NonNull java.security.cert.X509Certificate, @NonNull byte[]) throws android.security.identity.UnknownAuthenticationKeyException;
+    method public void storeStaticAuthenticationData(@NonNull java.security.cert.X509Certificate, @NonNull java.time.Instant, @NonNull byte[]) throws android.security.identity.UnknownAuthenticationKeyException;
+    method @NonNull public byte[] update(@NonNull android.security.identity.PersonalizationData);
+  }
+
+  public class IdentityCredentialException extends java.lang.Exception {
+    ctor public IdentityCredentialException(@NonNull String);
+    ctor public IdentityCredentialException(@NonNull String, @NonNull Throwable);
+  }
+
+  public abstract class IdentityCredentialStore {
+    method @NonNull public abstract android.security.identity.WritableIdentityCredential createCredential(@NonNull String, @NonNull String) throws android.security.identity.AlreadyPersonalizedException, android.security.identity.DocTypeNotSupportedException;
+    method @Deprecated @Nullable public abstract byte[] deleteCredentialByName(@NonNull String);
+    method @Nullable public abstract android.security.identity.IdentityCredential getCredentialByName(@NonNull String, int) throws android.security.identity.CipherSuiteNotSupportedException;
+    method @Nullable public static android.security.identity.IdentityCredentialStore getDirectAccessInstance(@NonNull android.content.Context);
+    method @Nullable public static android.security.identity.IdentityCredentialStore getInstance(@NonNull android.content.Context);
+    method @NonNull public abstract String[] getSupportedDocTypes();
+    field public static final int CIPHERSUITE_ECDHE_HKDF_ECDSA_WITH_AES_256_GCM_SHA256 = 1; // 0x1
+  }
+
+  public class InvalidReaderSignatureException extends android.security.identity.IdentityCredentialException {
+    ctor public InvalidReaderSignatureException(@NonNull String);
+    ctor public InvalidReaderSignatureException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class InvalidRequestMessageException extends android.security.identity.IdentityCredentialException {
+    ctor public InvalidRequestMessageException(@NonNull String);
+    ctor public InvalidRequestMessageException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class MessageDecryptionException extends android.security.identity.IdentityCredentialException {
+    ctor public MessageDecryptionException(@NonNull String);
+    ctor public MessageDecryptionException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class NoAuthenticationKeyAvailableException extends android.security.identity.IdentityCredentialException {
+    ctor public NoAuthenticationKeyAvailableException(@NonNull String);
+    ctor public NoAuthenticationKeyAvailableException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class PersonalizationData {
+  }
+
+  public static final class PersonalizationData.Builder {
+    ctor public PersonalizationData.Builder();
+    method @NonNull public android.security.identity.PersonalizationData.Builder addAccessControlProfile(@NonNull android.security.identity.AccessControlProfile);
+    method @NonNull public android.security.identity.PersonalizationData build();
+    method @NonNull public android.security.identity.PersonalizationData.Builder putEntry(@NonNull String, @NonNull String, @NonNull java.util.Collection<android.security.identity.AccessControlProfileId>, @NonNull byte[]);
+  }
+
+  public abstract class ResultData {
+    method @NonNull public abstract byte[] getAuthenticatedData();
+    method @Nullable public abstract byte[] getEntry(@NonNull String, @NonNull String);
+    method @Nullable public abstract java.util.Collection<java.lang.String> getEntryNames(@NonNull String);
+    method @Nullable public abstract byte[] getMessageAuthenticationCode();
+    method @NonNull public abstract java.util.Collection<java.lang.String> getNamespaces();
+    method @Nullable public abstract java.util.Collection<java.lang.String> getRetrievedEntryNames(@NonNull String);
+    method @NonNull public abstract byte[] getStaticAuthenticationData();
+    method public abstract int getStatus(@NonNull String, @NonNull String);
+    field public static final int STATUS_NOT_IN_REQUEST_MESSAGE = 3; // 0x3
+    field public static final int STATUS_NOT_REQUESTED = 2; // 0x2
+    field public static final int STATUS_NO_ACCESS_CONTROL_PROFILES = 6; // 0x6
+    field public static final int STATUS_NO_SUCH_ENTRY = 1; // 0x1
+    field public static final int STATUS_OK = 0; // 0x0
+    field public static final int STATUS_READER_AUTHENTICATION_FAILED = 5; // 0x5
+    field public static final int STATUS_USER_AUTHENTICATION_FAILED = 4; // 0x4
+  }
+
+  public class SessionTranscriptMismatchException extends android.security.identity.IdentityCredentialException {
+    ctor public SessionTranscriptMismatchException(@NonNull String);
+    ctor public SessionTranscriptMismatchException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class UnknownAuthenticationKeyException extends android.security.identity.IdentityCredentialException {
+    ctor public UnknownAuthenticationKeyException(@NonNull String);
+    ctor public UnknownAuthenticationKeyException(@NonNull String, @NonNull Throwable);
+  }
+
+  public abstract class WritableIdentityCredential {
+    method @NonNull public abstract java.util.Collection<java.security.cert.X509Certificate> getCredentialKeyCertificateChain(@NonNull byte[]);
+    method @NonNull public abstract byte[] personalize(@NonNull android.security.identity.PersonalizationData);
+  }
+
+}
+
+package android.security.keystore {
+
+  public class BackendBusyException extends java.security.ProviderException {
+    ctor public BackendBusyException(long);
+    ctor public BackendBusyException(long, @NonNull String);
+    ctor public BackendBusyException(long, @NonNull String, @NonNull Throwable);
+    method public long getBackOffHintMillis();
+  }
+
+  public class KeyExpiredException extends java.security.InvalidKeyException {
+    ctor public KeyExpiredException();
+    ctor public KeyExpiredException(String);
+    ctor public KeyExpiredException(String, Throwable);
+  }
+
+  public final class KeyGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    method @Nullable public java.security.spec.AlgorithmParameterSpec getAlgorithmParameterSpec();
+    method @Nullable public String getAttestKeyAlias();
+    method public byte[] getAttestationChallenge();
+    method @NonNull public String[] getBlockModes();
+    method @NonNull public java.util.Date getCertificateNotAfter();
+    method @NonNull public java.util.Date getCertificateNotBefore();
+    method @NonNull public java.math.BigInteger getCertificateSerialNumber();
+    method @NonNull public javax.security.auth.x500.X500Principal getCertificateSubject();
+    method @NonNull public String[] getDigests();
+    method @NonNull public String[] getEncryptionPaddings();
+    method public int getKeySize();
+    method @Nullable public java.util.Date getKeyValidityForConsumptionEnd();
+    method @Nullable public java.util.Date getKeyValidityForOriginationEnd();
+    method @Nullable public java.util.Date getKeyValidityStart();
+    method @NonNull public String getKeystoreAlias();
+    method public int getMaxUsageCount();
+    method public int getPurposes();
+    method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
+    method public int getUserAuthenticationValidityDurationSeconds();
+    method public boolean isDevicePropertiesAttestationIncluded();
+    method @NonNull public boolean isDigestsSpecified();
+    method public boolean isInvalidatedByBiometricEnrollment();
+    method public boolean isRandomizedEncryptionRequired();
+    method public boolean isStrongBoxBacked();
+    method public boolean isUnlockedDeviceRequired();
+    method public boolean isUserAuthenticationRequired();
+    method public boolean isUserAuthenticationValidWhileOnBody();
+    method public boolean isUserConfirmationRequired();
+    method public boolean isUserPresenceRequired();
+  }
+
+  public static final class KeyGenParameterSpec.Builder {
+    ctor public KeyGenParameterSpec.Builder(@NonNull String, int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec build();
+    method public android.security.keystore.KeyGenParameterSpec.Builder setAlgorithmParameterSpec(@NonNull java.security.spec.AlgorithmParameterSpec);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setAttestKeyAlias(@Nullable String);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setAttestationChallenge(byte[]);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setBlockModes(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateNotAfter(@NonNull java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateNotBefore(@NonNull java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateSerialNumber(@NonNull java.math.BigInteger);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateSubject(@NonNull javax.security.auth.x500.X500Principal);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setDevicePropertiesAttestationIncluded(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setDigests(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setEncryptionPaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setInvalidatedByBiometricEnrollment(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setIsStrongBoxBacked(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeySize(int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityForConsumptionEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityForOriginationEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityStart(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setMaxUsageCount(int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setRandomizedEncryptionRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setSignaturePaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUnlockedDeviceRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationParameters(@IntRange(from=0) int, int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidWhileOnBody(boolean);
+    method @Deprecated @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserConfirmationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserPresenceRequired(boolean);
+  }
+
+  public class KeyInfo implements java.security.spec.KeySpec {
+    method @NonNull public String[] getBlockModes();
+    method @NonNull public String[] getDigests();
+    method @NonNull public String[] getEncryptionPaddings();
+    method public int getKeySize();
+    method @Nullable public java.util.Date getKeyValidityForConsumptionEnd();
+    method @Nullable public java.util.Date getKeyValidityForOriginationEnd();
+    method @Nullable public java.util.Date getKeyValidityStart();
+    method public String getKeystoreAlias();
+    method public int getOrigin();
+    method public int getPurposes();
+    method public int getRemainingUsageCount();
+    method public int getSecurityLevel();
+    method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
+    method public int getUserAuthenticationValidityDurationSeconds();
+    method @Deprecated public boolean isInsideSecureHardware();
+    method public boolean isInvalidatedByBiometricEnrollment();
+    method public boolean isTrustedUserPresenceRequired();
+    method public boolean isUserAuthenticationRequired();
+    method public boolean isUserAuthenticationRequirementEnforcedBySecureHardware();
+    method public boolean isUserAuthenticationValidWhileOnBody();
+    method public boolean isUserConfirmationRequired();
+  }
+
+  public class KeyNotYetValidException extends java.security.InvalidKeyException {
+    ctor public KeyNotYetValidException();
+    ctor public KeyNotYetValidException(String);
+    ctor public KeyNotYetValidException(String, Throwable);
+  }
+
+  public class KeyPermanentlyInvalidatedException extends java.security.InvalidKeyException {
+    ctor public KeyPermanentlyInvalidatedException();
+    ctor public KeyPermanentlyInvalidatedException(String);
+    ctor public KeyPermanentlyInvalidatedException(String, Throwable);
+  }
+
+  public abstract class KeyProperties {
+    field public static final int AUTH_BIOMETRIC_STRONG = 2; // 0x2
+    field public static final int AUTH_DEVICE_CREDENTIAL = 1; // 0x1
+    field public static final String BLOCK_MODE_CBC = "CBC";
+    field public static final String BLOCK_MODE_CTR = "CTR";
+    field public static final String BLOCK_MODE_ECB = "ECB";
+    field public static final String BLOCK_MODE_GCM = "GCM";
+    field public static final String DIGEST_MD5 = "MD5";
+    field public static final String DIGEST_NONE = "NONE";
+    field public static final String DIGEST_SHA1 = "SHA-1";
+    field public static final String DIGEST_SHA224 = "SHA-224";
+    field public static final String DIGEST_SHA256 = "SHA-256";
+    field public static final String DIGEST_SHA384 = "SHA-384";
+    field public static final String DIGEST_SHA512 = "SHA-512";
+    field public static final String ENCRYPTION_PADDING_NONE = "NoPadding";
+    field public static final String ENCRYPTION_PADDING_PKCS7 = "PKCS7Padding";
+    field public static final String ENCRYPTION_PADDING_RSA_OAEP = "OAEPPadding";
+    field public static final String ENCRYPTION_PADDING_RSA_PKCS1 = "PKCS1Padding";
+    field @Deprecated public static final String KEY_ALGORITHM_3DES = "DESede";
+    field public static final String KEY_ALGORITHM_AES = "AES";
+    field public static final String KEY_ALGORITHM_EC = "EC";
+    field public static final String KEY_ALGORITHM_HMAC_SHA1 = "HmacSHA1";
+    field public static final String KEY_ALGORITHM_HMAC_SHA224 = "HmacSHA224";
+    field public static final String KEY_ALGORITHM_HMAC_SHA256 = "HmacSHA256";
+    field public static final String KEY_ALGORITHM_HMAC_SHA384 = "HmacSHA384";
+    field public static final String KEY_ALGORITHM_HMAC_SHA512 = "HmacSHA512";
+    field public static final String KEY_ALGORITHM_RSA = "RSA";
+    field public static final int ORIGIN_GENERATED = 1; // 0x1
+    field public static final int ORIGIN_IMPORTED = 2; // 0x2
+    field public static final int ORIGIN_SECURELY_IMPORTED = 8; // 0x8
+    field public static final int ORIGIN_UNKNOWN = 4; // 0x4
+    field public static final int PURPOSE_AGREE_KEY = 64; // 0x40
+    field public static final int PURPOSE_ATTEST_KEY = 128; // 0x80
+    field public static final int PURPOSE_DECRYPT = 2; // 0x2
+    field public static final int PURPOSE_ENCRYPT = 1; // 0x1
+    field public static final int PURPOSE_SIGN = 4; // 0x4
+    field public static final int PURPOSE_VERIFY = 8; // 0x8
+    field public static final int PURPOSE_WRAP_KEY = 32; // 0x20
+    field public static final int SECURITY_LEVEL_SOFTWARE = 0; // 0x0
+    field public static final int SECURITY_LEVEL_STRONGBOX = 2; // 0x2
+    field public static final int SECURITY_LEVEL_TRUSTED_ENVIRONMENT = 1; // 0x1
+    field public static final int SECURITY_LEVEL_UNKNOWN = -2; // 0xfffffffe
+    field public static final int SECURITY_LEVEL_UNKNOWN_SECURE = -1; // 0xffffffff
+    field public static final String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1";
+    field public static final String SIGNATURE_PADDING_RSA_PSS = "PSS";
+    field public static final int UNRESTRICTED_USAGE_COUNT = -1; // 0xffffffff
+  }
+
+  public final class KeyProtection implements java.security.KeyStore.ProtectionParameter {
+    method @NonNull public String[] getBlockModes();
+    method @NonNull public String[] getDigests();
+    method @NonNull public String[] getEncryptionPaddings();
+    method @Nullable public java.util.Date getKeyValidityForConsumptionEnd();
+    method @Nullable public java.util.Date getKeyValidityForOriginationEnd();
+    method @Nullable public java.util.Date getKeyValidityStart();
+    method public int getMaxUsageCount();
+    method public int getPurposes();
+    method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
+    method public int getUserAuthenticationValidityDurationSeconds();
+    method public boolean isDigestsSpecified();
+    method public boolean isInvalidatedByBiometricEnrollment();
+    method public boolean isRandomizedEncryptionRequired();
+    method public boolean isUnlockedDeviceRequired();
+    method public boolean isUserAuthenticationRequired();
+    method public boolean isUserAuthenticationValidWhileOnBody();
+    method public boolean isUserConfirmationRequired();
+    method public boolean isUserPresenceRequired();
+  }
+
+  public static final class KeyProtection.Builder {
+    ctor public KeyProtection.Builder(int);
+    method @NonNull public android.security.keystore.KeyProtection build();
+    method @NonNull public android.security.keystore.KeyProtection.Builder setBlockModes(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setDigests(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setEncryptionPaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setInvalidatedByBiometricEnrollment(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setIsStrongBoxBacked(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityForConsumptionEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityForOriginationEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityStart(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setMaxUsageCount(int);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setRandomizedEncryptionRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setSignaturePaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUnlockedDeviceRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationParameters(@IntRange(from=0) int, int);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidWhileOnBody(boolean);
+    method @Deprecated @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserConfirmationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserPresenceRequired(boolean);
+  }
+
+  public class SecureKeyImportUnavailableException extends java.security.ProviderException {
+    ctor public SecureKeyImportUnavailableException();
+    ctor public SecureKeyImportUnavailableException(String);
+    ctor public SecureKeyImportUnavailableException(String, Throwable);
+    ctor public SecureKeyImportUnavailableException(Throwable);
+  }
+
+  public class StrongBoxUnavailableException extends java.security.ProviderException {
+    ctor public StrongBoxUnavailableException();
+    ctor public StrongBoxUnavailableException(String);
+    ctor public StrongBoxUnavailableException(String, Throwable);
+    ctor public StrongBoxUnavailableException(Throwable);
+  }
+
+  public class UserNotAuthenticatedException extends java.security.InvalidKeyException {
+    ctor public UserNotAuthenticatedException();
+    ctor public UserNotAuthenticatedException(String);
+    ctor public UserNotAuthenticatedException(String, Throwable);
+  }
+
+  public class UserPresenceUnavailableException extends java.security.InvalidKeyException {
+    ctor public UserPresenceUnavailableException();
+    ctor public UserPresenceUnavailableException(String);
+    ctor public UserPresenceUnavailableException(String, Throwable);
+  }
+
+  public class WrappedKeyEntry implements java.security.KeyStore.Entry {
+    ctor public WrappedKeyEntry(byte[], String, String, java.security.spec.AlgorithmParameterSpec);
+    method public java.security.spec.AlgorithmParameterSpec getAlgorithmParameterSpec();
+    method public String getTransformation();
+    method public byte[] getWrappedKeyBytes();
+    method public String getWrappingKeyAlias();
+  }
+
+}
+
+package android.service.autofill {
+
+  public abstract class AutofillService extends android.app.Service {
+    ctor public AutofillService();
+    method @Nullable public final android.service.autofill.FillEventHistory getFillEventHistory();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public void onConnected();
+    method public void onDisconnected();
+    method public abstract void onFillRequest(@NonNull android.service.autofill.FillRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.FillCallback);
+    method public abstract void onSaveRequest(@NonNull android.service.autofill.SaveRequest, @NonNull android.service.autofill.SaveCallback);
+    method public void onSavedDatasetsInfoRequest(@NonNull android.service.autofill.SavedDatasetsInfoCallback);
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.AutofillService";
+    field public static final String SERVICE_META_DATA = "android.autofill";
+  }
+
+  public final class BatchUpdates implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.BatchUpdates> CREATOR;
+  }
+
+  public static class BatchUpdates.Builder {
+    ctor public BatchUpdates.Builder();
+    method public android.service.autofill.BatchUpdates build();
+    method public android.service.autofill.BatchUpdates.Builder transformChild(int, @NonNull android.service.autofill.Transformation);
+    method public android.service.autofill.BatchUpdates.Builder updateTemplate(@NonNull android.widget.RemoteViews);
+  }
+
+  public final class CharSequenceTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CharSequenceTransformation> CREATOR;
+  }
+
+  public static class CharSequenceTransformation.Builder {
+    ctor public CharSequenceTransformation.Builder(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @NonNull String);
+    method public android.service.autofill.CharSequenceTransformation.Builder addField(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @NonNull String);
+    method public android.service.autofill.CharSequenceTransformation build();
+  }
+
+  public final class CustomDescription implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CustomDescription> CREATOR;
+  }
+
+  public static class CustomDescription.Builder {
+    ctor public CustomDescription.Builder(@NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.CustomDescription.Builder addChild(int, @NonNull android.service.autofill.Transformation);
+    method @NonNull public android.service.autofill.CustomDescription.Builder addOnClickAction(int, @NonNull android.service.autofill.OnClickAction);
+    method @NonNull public android.service.autofill.CustomDescription.Builder batchUpdate(@NonNull android.service.autofill.Validator, @NonNull android.service.autofill.BatchUpdates);
+    method @NonNull public android.service.autofill.CustomDescription build();
+  }
+
+  public final class Dataset implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.Dataset> CREATOR;
+  }
+
+  public static final class Dataset.Builder {
+    ctor public Dataset.Builder(@NonNull android.widget.RemoteViews);
+    ctor public Dataset.Builder();
+    method @NonNull public android.service.autofill.Dataset build();
+    method @NonNull public android.service.autofill.Dataset.Builder setAuthentication(@Nullable android.content.IntentSender);
+    method @NonNull public android.service.autofill.Dataset.Builder setId(@Nullable String);
+    method @NonNull public android.service.autofill.Dataset.Builder setInlinePresentation(@NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setInlinePresentation(@NonNull android.service.autofill.InlinePresentation, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation, @NonNull android.service.autofill.InlinePresentation);
+  }
+
+  public final class DateTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    ctor public DateTransformation(@NonNull android.view.autofill.AutofillId, @NonNull android.icu.text.DateFormat);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.DateTransformation> CREATOR;
+  }
+
+  public final class DateValueSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    ctor public DateValueSanitizer(@NonNull android.icu.text.DateFormat);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.DateValueSanitizer> CREATOR;
+  }
+
+  public final class FieldClassification {
+    method @NonNull public java.util.List<android.service.autofill.FieldClassification.Match> getMatches();
+  }
+
+  public static final class FieldClassification.Match {
+    method @NonNull public String getCategoryId();
+    method public float getScore();
+  }
+
+  public final class FillCallback {
+    method public void onFailure(@Nullable CharSequence);
+    method public void onSuccess(@Nullable android.service.autofill.FillResponse);
+  }
+
+  public final class FillContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.autofill.AutofillId getFocusedId();
+    method public int getRequestId();
+    method @NonNull public android.app.assist.AssistStructure getStructure();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillContext> CREATOR;
+  }
+
+  public final class FillEventHistory implements android.os.Parcelable {
+    method public int describeContents();
+    method @Deprecated @Nullable public android.os.Bundle getClientState();
+    method @Nullable public java.util.List<android.service.autofill.FillEventHistory.Event> getEvents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillEventHistory> CREATOR;
+  }
+
+  public static final class FillEventHistory.Event {
+    method @NonNull public java.util.Map<android.view.autofill.AutofillId,java.lang.String> getChangedFields();
+    method @Nullable public android.os.Bundle getClientState();
+    method @Nullable public String getDatasetId();
+    method @NonNull public java.util.Map<android.view.autofill.AutofillId,android.service.autofill.FieldClassification> getFieldsClassification();
+    method @NonNull public java.util.Set<java.lang.String> getIgnoredDatasetIds();
+    method @NonNull public java.util.Map<android.view.autofill.AutofillId,java.util.Set<java.lang.String>> getManuallyEnteredField();
+    method public int getNoSaveUiReason();
+    method @NonNull public java.util.Set<java.lang.String> getSelectedDatasetIds();
+    method public int getType();
+    field public static final int NO_SAVE_UI_REASON_DATASET_MATCH = 6; // 0x6
+    field public static final int NO_SAVE_UI_REASON_FIELD_VALIDATION_FAILED = 5; // 0x5
+    field public static final int NO_SAVE_UI_REASON_HAS_EMPTY_REQUIRED = 3; // 0x3
+    field public static final int NO_SAVE_UI_REASON_NONE = 0; // 0x0
+    field public static final int NO_SAVE_UI_REASON_NO_SAVE_INFO = 1; // 0x1
+    field public static final int NO_SAVE_UI_REASON_NO_VALUE_CHANGED = 4; // 0x4
+    field public static final int NO_SAVE_UI_REASON_WITH_DELAY_SAVE_FLAG = 2; // 0x2
+    field public static final int TYPE_AUTHENTICATION_SELECTED = 2; // 0x2
+    field public static final int TYPE_CONTEXT_COMMITTED = 4; // 0x4
+    field public static final int TYPE_DATASETS_SHOWN = 5; // 0x5
+    field public static final int TYPE_DATASET_AUTHENTICATION_SELECTED = 1; // 0x1
+    field public static final int TYPE_DATASET_SELECTED = 0; // 0x0
+    field public static final int TYPE_SAVE_SHOWN = 3; // 0x3
+  }
+
+  public final class FillRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getClientState();
+    method @NonNull public java.util.List<android.service.autofill.FillContext> getFillContexts();
+    method public int getFlags();
+    method public int getId();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest getInlineSuggestionsRequest();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillRequest> CREATOR;
+    field public static final int FLAG_COMPATIBILITY_MODE_REQUEST = 2; // 0x2
+    field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
+  }
+
+  public final class FillResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillResponse> CREATOR;
+    field public static final int FLAG_DISABLE_ACTIVITY_ONLY = 2; // 0x2
+    field public static final int FLAG_TRACK_CONTEXT_COMMITED = 1; // 0x1
+  }
+
+  public static final class FillResponse.Builder {
+    ctor public FillResponse.Builder();
+    method @NonNull public android.service.autofill.FillResponse.Builder addDataset(@Nullable android.service.autofill.Dataset);
+    method @NonNull public android.service.autofill.FillResponse build();
+    method @NonNull public android.service.autofill.FillResponse.Builder disableAutofill(long);
+    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews, @Nullable android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews, @Nullable android.service.autofill.InlinePresentation, @Nullable android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.FillResponse.Builder setClientState(@Nullable android.os.Bundle);
+    method @NonNull public android.service.autofill.FillResponse.Builder setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...);
+    method @NonNull public android.service.autofill.FillResponse.Builder setFlags(int);
+    method @NonNull public android.service.autofill.FillResponse.Builder setFooter(@NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.FillResponse.Builder setHeader(@NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.FillResponse.Builder setIgnoredIds(android.view.autofill.AutofillId...);
+    method @NonNull public android.service.autofill.FillResponse.Builder setPresentationCancelIds(@Nullable int[]);
+    method @NonNull public android.service.autofill.FillResponse.Builder setSaveInfo(@NonNull android.service.autofill.SaveInfo);
+    method @NonNull public android.service.autofill.FillResponse.Builder setUserData(@NonNull android.service.autofill.UserData);
+  }
+
+  public final class ImageTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.ImageTransformation> CREATOR;
+  }
+
+  public static class ImageTransformation.Builder {
+    ctor @Deprecated public ImageTransformation.Builder(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @DrawableRes int);
+    ctor public ImageTransformation.Builder(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @DrawableRes int, @NonNull CharSequence);
+    method @Deprecated public android.service.autofill.ImageTransformation.Builder addOption(@NonNull java.util.regex.Pattern, @DrawableRes int);
+    method public android.service.autofill.ImageTransformation.Builder addOption(@NonNull java.util.regex.Pattern, @DrawableRes int, @NonNull CharSequence);
+    method public android.service.autofill.ImageTransformation build();
+  }
+
+  public final class InlinePresentation implements android.os.Parcelable {
+    ctor public InlinePresentation(@NonNull android.app.slice.Slice, @NonNull android.widget.inline.InlinePresentationSpec, boolean);
+    method @NonNull public static android.service.autofill.InlinePresentation createTooltipPresentation(@NonNull android.app.slice.Slice, @NonNull android.widget.inline.InlinePresentationSpec);
+    method public int describeContents();
+    method @NonNull public android.widget.inline.InlinePresentationSpec getInlinePresentationSpec();
+    method @NonNull public android.app.slice.Slice getSlice();
+    method public boolean isPinned();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.InlinePresentation> CREATOR;
+  }
+
+  public final class LuhnChecksumValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public LuhnChecksumValidator(@NonNull android.view.autofill.AutofillId...);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.LuhnChecksumValidator> CREATOR;
+  }
+
+  public interface OnClickAction {
+  }
+
+  public final class RegexValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public RegexValidator(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.RegexValidator> CREATOR;
+  }
+
+  public interface Sanitizer {
+  }
+
+  public final class SaveCallback {
+    method public void onFailure(CharSequence);
+    method public void onSuccess();
+    method public void onSuccess(@NonNull android.content.IntentSender);
+  }
+
+  public final class SaveInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.SaveInfo> CREATOR;
+    field public static final int FLAG_DELAY_SAVE = 4; // 0x4
+    field public static final int FLAG_DONT_SAVE_ON_FINISH = 2; // 0x2
+    field public static final int FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE = 1; // 0x1
+    field public static final int NEGATIVE_BUTTON_STYLE_CANCEL = 0; // 0x0
+    field public static final int NEGATIVE_BUTTON_STYLE_NEVER = 2; // 0x2
+    field public static final int NEGATIVE_BUTTON_STYLE_REJECT = 1; // 0x1
+    field public static final int POSITIVE_BUTTON_STYLE_CONTINUE = 1; // 0x1
+    field public static final int POSITIVE_BUTTON_STYLE_SAVE = 0; // 0x0
+    field public static final int SAVE_DATA_TYPE_ADDRESS = 2; // 0x2
+    field public static final int SAVE_DATA_TYPE_CREDIT_CARD = 4; // 0x4
+    field public static final int SAVE_DATA_TYPE_DEBIT_CARD = 32; // 0x20
+    field public static final int SAVE_DATA_TYPE_EMAIL_ADDRESS = 16; // 0x10
+    field public static final int SAVE_DATA_TYPE_GENERIC = 0; // 0x0
+    field public static final int SAVE_DATA_TYPE_GENERIC_CARD = 128; // 0x80
+    field public static final int SAVE_DATA_TYPE_PASSWORD = 1; // 0x1
+    field public static final int SAVE_DATA_TYPE_PAYMENT_CARD = 64; // 0x40
+    field public static final int SAVE_DATA_TYPE_USERNAME = 8; // 0x8
+  }
+
+  public static final class SaveInfo.Builder {
+    ctor public SaveInfo.Builder(int, @NonNull android.view.autofill.AutofillId[]);
+    ctor public SaveInfo.Builder(int);
+    method @NonNull public android.service.autofill.SaveInfo.Builder addSanitizer(@NonNull android.service.autofill.Sanitizer, @NonNull android.view.autofill.AutofillId...);
+    method public android.service.autofill.SaveInfo build();
+    method @NonNull public android.service.autofill.SaveInfo.Builder setCustomDescription(@NonNull android.service.autofill.CustomDescription);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setDescription(@Nullable CharSequence);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setFlags(int);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setNegativeAction(int, @Nullable android.content.IntentSender);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setOptionalIds(@NonNull android.view.autofill.AutofillId[]);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setPositiveAction(int);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setTriggerId(@NonNull android.view.autofill.AutofillId);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setValidator(@NonNull android.service.autofill.Validator);
+  }
+
+  public final class SaveRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getClientState();
+    method @Nullable public java.util.List<java.lang.String> getDatasetIds();
+    method @NonNull public java.util.List<android.service.autofill.FillContext> getFillContexts();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.SaveRequest> CREATOR;
+  }
+
+  public final class SavedDatasetsInfo {
+    ctor public SavedDatasetsInfo(@NonNull String, @IntRange(from=0) int);
+    method @IntRange(from=0) public int getCount();
+    method @NonNull public String getType();
+    field public static final String TYPE_OTHER = "other";
+    field public static final String TYPE_PASSWORDS = "passwords";
+  }
+
+  public interface SavedDatasetsInfoCallback {
+    method public void onError(int);
+    method public void onSuccess(@NonNull java.util.Set<android.service.autofill.SavedDatasetsInfo>);
+    field public static final int ERROR_NEEDS_USER_ACTION = 2; // 0x2
+    field public static final int ERROR_OTHER = 0; // 0x0
+    field public static final int ERROR_UNSUPPORTED = 1; // 0x1
+  }
+
+  public final class TextValueSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    ctor public TextValueSanitizer(@NonNull java.util.regex.Pattern, @NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.TextValueSanitizer> CREATOR;
+  }
+
+  public interface Transformation {
+  }
+
+  public final class UserData implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getFieldClassificationAlgorithm();
+    method @Nullable public String getFieldClassificationAlgorithmForCategory(@NonNull String);
+    method public String getId();
+    method public static int getMaxCategoryCount();
+    method public static int getMaxFieldClassificationIdsSize();
+    method public static int getMaxUserDataSize();
+    method public static int getMaxValueLength();
+    method public static int getMinValueLength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.UserData> CREATOR;
+  }
+
+  public static final class UserData.Builder {
+    ctor public UserData.Builder(@NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.service.autofill.UserData.Builder add(@NonNull String, @NonNull String);
+    method @NonNull public android.service.autofill.UserData build();
+    method @NonNull public android.service.autofill.UserData.Builder setFieldClassificationAlgorithm(@Nullable String, @Nullable android.os.Bundle);
+    method @NonNull public android.service.autofill.UserData.Builder setFieldClassificationAlgorithmForCategory(@NonNull String, @Nullable String, @Nullable android.os.Bundle);
+  }
+
+  public interface Validator {
+  }
+
+  public final class Validators {
+    method @NonNull public static android.service.autofill.Validator and(@NonNull android.service.autofill.Validator...);
+    method @NonNull public static android.service.autofill.Validator not(@NonNull android.service.autofill.Validator);
+    method @NonNull public static android.service.autofill.Validator or(@NonNull android.service.autofill.Validator...);
+  }
+
+  public final class VisibilitySetterAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.VisibilitySetterAction> CREATOR;
+  }
+
+  public static final class VisibilitySetterAction.Builder {
+    ctor public VisibilitySetterAction.Builder(@IdRes int, int);
+    method @NonNull public android.service.autofill.VisibilitySetterAction build();
+    method @NonNull public android.service.autofill.VisibilitySetterAction.Builder setVisibility(@IdRes int, int);
+  }
+
+}
+
+package android.service.carrier {
+
+  public class CarrierIdentifier implements android.os.Parcelable {
+    ctor public CarrierIdentifier(String, String, @Nullable String, @Nullable String, @Nullable String, @Nullable String);
+    ctor public CarrierIdentifier(@NonNull String, @NonNull String, @Nullable String, @Nullable String, @Nullable String, @Nullable String, int, int);
+    ctor public CarrierIdentifier(byte[], @Nullable String, @Nullable String);
+    method public int describeContents();
+    method public int getCarrierId();
+    method @Nullable public String getGid1();
+    method @Nullable public String getGid2();
+    method @Nullable public String getImsi();
+    method public String getMcc();
+    method public String getMnc();
+    method public int getSpecificCarrierId();
+    method @Nullable public String getSpn();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.carrier.CarrierIdentifier> CREATOR;
+  }
+
+  public class CarrierMessagingClientService extends android.app.Service {
+    ctor public CarrierMessagingClientService();
+    method @NonNull public final android.os.IBinder onBind(@Nullable android.content.Intent);
+  }
+
+  public abstract class CarrierMessagingService extends android.app.Service {
+    ctor public CarrierMessagingService();
+    method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onDownloadMms(@NonNull android.net.Uri, int, @NonNull android.net.Uri, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Integer>);
+    method @Deprecated public void onFilterSms(@NonNull android.service.carrier.MessagePdu, @NonNull String, int, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Boolean>);
+    method public void onReceiveTextSms(@NonNull android.service.carrier.MessagePdu, @NonNull String, int, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Integer>);
+    method @Deprecated public void onSendDataSms(@NonNull byte[], int, @NonNull String, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendDataSms(@NonNull byte[], int, @NonNull String, int, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendMms(@NonNull android.net.Uri, int, @Nullable android.net.Uri, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMmsResult>);
+    method @Deprecated public void onSendMultipartTextSms(@NonNull java.util.List<java.lang.String>, int, @NonNull String, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method public void onSendMultipartTextSms(@NonNull java.util.List<java.lang.String>, int, @NonNull String, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method @Deprecated public void onSendTextSms(@NonNull String, int, @NonNull String, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendTextSms(@NonNull String, int, @NonNull String, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    field public static final int DOWNLOAD_STATUS_ERROR = 2; // 0x2
+    field public static final int DOWNLOAD_STATUS_OK = 0; // 0x0
+    field public static final int DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
+    field public static final int RECEIVE_OPTIONS_DEFAULT = 0; // 0x0
+    field public static final int RECEIVE_OPTIONS_DROP = 1; // 0x1
+    field public static final int RECEIVE_OPTIONS_SKIP_NOTIFY_WHEN_CREDENTIAL_PROTECTED_STORAGE_UNAVAILABLE = 2; // 0x2
+    field public static final int SEND_FLAG_REQUEST_DELIVERY_STATUS = 1; // 0x1
+    field public static final int SEND_STATUS_ERROR = 2; // 0x2
+    field public static final int SEND_STATUS_OK = 0; // 0x0
+    field public static final int SEND_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.carrier.CarrierMessagingService";
+  }
+
+  public static interface CarrierMessagingService.ResultCallback<T> {
+    method public void onReceiveResult(@NonNull T) throws android.os.RemoteException;
+  }
+
+  public static final class CarrierMessagingService.SendMmsResult {
+    ctor public CarrierMessagingService.SendMmsResult(int, @Nullable byte[]);
+    method @Nullable public byte[] getSendConfPdu();
+    method public int getSendStatus();
+  }
+
+  public static final class CarrierMessagingService.SendMultipartSmsResult {
+    ctor public CarrierMessagingService.SendMultipartSmsResult(int, @Nullable int[]);
+    method @Nullable public int[] getMessageRefs();
+    method public int getSendStatus();
+  }
+
+  public static final class CarrierMessagingService.SendSmsResult {
+    ctor public CarrierMessagingService.SendSmsResult(int, int);
+    method public int getMessageRef();
+    method public int getSendStatus();
+  }
+
+  public abstract class CarrierService extends android.app.Service {
+    ctor public CarrierService();
+    method public final void notifyCarrierNetworkChange(boolean);
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.os.PersistableBundle onLoadConfig(android.service.carrier.CarrierIdentifier);
+    field public static final String CARRIER_SERVICE_INTERFACE = "android.service.carrier.CarrierService";
+  }
+
+  public final class MessagePdu implements android.os.Parcelable {
+    ctor public MessagePdu(@NonNull java.util.List<byte[]>);
+    method public int describeContents();
+    method @NonNull public java.util.List<byte[]> getPdus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.carrier.MessagePdu> CREATOR;
+  }
+
+}
+
+package android.service.chooser {
+
+  @Deprecated public final class ChooserTarget implements android.os.Parcelable {
+    ctor @Deprecated public ChooserTarget(CharSequence, android.graphics.drawable.Icon, float, android.content.ComponentName, @Nullable android.os.Bundle);
+    method @Deprecated public int describeContents();
+    method @Deprecated public android.content.ComponentName getComponentName();
+    method @Deprecated public android.graphics.drawable.Icon getIcon();
+    method @Deprecated public android.os.Bundle getIntentExtras();
+    method @Deprecated public float getScore();
+    method @Deprecated public CharSequence getTitle();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.service.chooser.ChooserTarget> CREATOR;
+  }
+
+  @Deprecated public abstract class ChooserTargetService extends android.app.Service {
+    ctor @Deprecated public ChooserTargetService();
+    method @Deprecated public android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public abstract java.util.List<android.service.chooser.ChooserTarget> onGetChooserTargets(android.content.ComponentName, android.content.IntentFilter);
+    field @Deprecated public static final String BIND_PERMISSION = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
+    field @Deprecated public static final String META_DATA_NAME = "android.service.chooser.chooser_target_service";
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.service.chooser.ChooserTargetService";
+  }
+
+}
+
+package android.service.controls {
+
+  public final class Control implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.app.PendingIntent getAppIntent();
+    method @NonNull public String getControlId();
+    method @NonNull public android.service.controls.templates.ControlTemplate getControlTemplate();
+    method @Nullable public android.content.res.ColorStateList getCustomColor();
+    method @Nullable public android.graphics.drawable.Icon getCustomIcon();
+    method public int getDeviceType();
+    method public int getStatus();
+    method @NonNull public CharSequence getStatusText();
+    method @Nullable public CharSequence getStructure();
+    method @NonNull public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method @Nullable public CharSequence getZone();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.controls.Control> CREATOR;
+    field public static final int STATUS_DISABLED = 4; // 0x4
+    field public static final int STATUS_ERROR = 3; // 0x3
+    field public static final int STATUS_NOT_FOUND = 2; // 0x2
+    field public static final int STATUS_OK = 1; // 0x1
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class Control.StatefulBuilder {
+    ctor public Control.StatefulBuilder(@NonNull String, @NonNull android.app.PendingIntent);
+    ctor public Control.StatefulBuilder(@NonNull android.service.controls.Control);
+    method @NonNull public android.service.controls.Control build();
+    method @NonNull public android.service.controls.Control.StatefulBuilder setAppIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setControlId(@NonNull String);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setControlTemplate(@NonNull android.service.controls.templates.ControlTemplate);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setCustomColor(@Nullable android.content.res.ColorStateList);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setCustomIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setDeviceType(int);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setStatus(int);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setStatusText(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setStructure(@Nullable CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setSubtitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setTitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setZone(@Nullable CharSequence);
+  }
+
+  public static final class Control.StatelessBuilder {
+    ctor public Control.StatelessBuilder(@NonNull String, @NonNull android.app.PendingIntent);
+    ctor public Control.StatelessBuilder(@NonNull android.service.controls.Control);
+    method @NonNull public android.service.controls.Control build();
+    method @NonNull public android.service.controls.Control.StatelessBuilder setAppIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setControlId(@NonNull String);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setCustomColor(@Nullable android.content.res.ColorStateList);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setCustomIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setDeviceType(int);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setStructure(@Nullable CharSequence);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setSubtitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setTitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setZone(@Nullable CharSequence);
+  }
+
+  public abstract class ControlsProviderService extends android.app.Service {
+    ctor public ControlsProviderService();
+    method @NonNull public abstract java.util.concurrent.Flow.Publisher<android.service.controls.Control> createPublisherFor(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public abstract java.util.concurrent.Flow.Publisher<android.service.controls.Control> createPublisherForAllAvailable();
+    method @Nullable public java.util.concurrent.Flow.Publisher<android.service.controls.Control> createPublisherForSuggested();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public final boolean onUnbind(@NonNull android.content.Intent);
+    method public abstract void performControlAction(@NonNull String, @NonNull android.service.controls.actions.ControlAction, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method public static void requestAddControl(@NonNull android.content.Context, @NonNull android.content.ComponentName, @NonNull android.service.controls.Control);
+    field public static final String SERVICE_CONTROLS = "android.service.controls.ControlsProviderService";
+    field @NonNull public static final String TAG = "ControlsProviderService";
+  }
+
+  public class DeviceTypes {
+    method public static boolean validDeviceType(int);
+    field public static final int TYPE_AC_HEATER = 1; // 0x1
+    field public static final int TYPE_AC_UNIT = 2; // 0x2
+    field public static final int TYPE_AIR_FRESHENER = 3; // 0x3
+    field public static final int TYPE_AIR_PURIFIER = 4; // 0x4
+    field public static final int TYPE_AWNING = 33; // 0x21
+    field public static final int TYPE_BLINDS = 34; // 0x22
+    field public static final int TYPE_CAMERA = 50; // 0x32
+    field public static final int TYPE_CLOSET = 35; // 0x23
+    field public static final int TYPE_COFFEE_MAKER = 5; // 0x5
+    field public static final int TYPE_CURTAIN = 36; // 0x24
+    field public static final int TYPE_DEHUMIDIFIER = 6; // 0x6
+    field public static final int TYPE_DISHWASHER = 24; // 0x18
+    field public static final int TYPE_DISPLAY = 7; // 0x7
+    field public static final int TYPE_DOOR = 37; // 0x25
+    field public static final int TYPE_DOORBELL = 51; // 0x33
+    field public static final int TYPE_DRAWER = 38; // 0x26
+    field public static final int TYPE_DRYER = 25; // 0x19
+    field public static final int TYPE_FAN = 8; // 0x8
+    field public static final int TYPE_GARAGE = 39; // 0x27
+    field public static final int TYPE_GATE = 40; // 0x28
+    field public static final int TYPE_GENERIC_ARM_DISARM = -5; // 0xfffffffb
+    field public static final int TYPE_GENERIC_LOCK_UNLOCK = -4; // 0xfffffffc
+    field public static final int TYPE_GENERIC_ON_OFF = -1; // 0xffffffff
+    field public static final int TYPE_GENERIC_OPEN_CLOSE = -3; // 0xfffffffd
+    field public static final int TYPE_GENERIC_START_STOP = -2; // 0xfffffffe
+    field public static final int TYPE_GENERIC_TEMP_SETTING = -6; // 0xfffffffa
+    field public static final int TYPE_GENERIC_VIEWSTREAM = -7; // 0xfffffff9
+    field public static final int TYPE_HEATER = 47; // 0x2f
+    field public static final int TYPE_HOOD = 10; // 0xa
+    field public static final int TYPE_HUMIDIFIER = 11; // 0xb
+    field public static final int TYPE_KETTLE = 12; // 0xc
+    field public static final int TYPE_LIGHT = 13; // 0xd
+    field public static final int TYPE_LOCK = 45; // 0x2d
+    field public static final int TYPE_MICROWAVE = 14; // 0xe
+    field public static final int TYPE_MOP = 26; // 0x1a
+    field public static final int TYPE_MOWER = 27; // 0x1b
+    field public static final int TYPE_MULTICOOKER = 28; // 0x1c
+    field public static final int TYPE_OUTLET = 15; // 0xf
+    field public static final int TYPE_PERGOLA = 41; // 0x29
+    field public static final int TYPE_RADIATOR = 16; // 0x10
+    field public static final int TYPE_REFRIGERATOR = 48; // 0x30
+    field public static final int TYPE_REMOTE_CONTROL = 17; // 0x11
+    field public static final int TYPE_ROUTINE = 52; // 0x34
+    field public static final int TYPE_SECURITY_SYSTEM = 46; // 0x2e
+    field public static final int TYPE_SET_TOP = 18; // 0x12
+    field public static final int TYPE_SHOWER = 29; // 0x1d
+    field public static final int TYPE_SHUTTER = 42; // 0x2a
+    field public static final int TYPE_SPRINKLER = 30; // 0x1e
+    field public static final int TYPE_STANDMIXER = 19; // 0x13
+    field public static final int TYPE_STYLER = 20; // 0x14
+    field public static final int TYPE_SWITCH = 21; // 0x15
+    field public static final int TYPE_THERMOSTAT = 49; // 0x31
+    field public static final int TYPE_TV = 22; // 0x16
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_VACUUM = 32; // 0x20
+    field public static final int TYPE_VALVE = 44; // 0x2c
+    field public static final int TYPE_WASHER = 31; // 0x1f
+    field public static final int TYPE_WATER_HEATER = 23; // 0x17
+    field public static final int TYPE_WINDOW = 43; // 0x2b
+  }
+
+}
+
+package android.service.controls.actions {
+
+  public final class BooleanAction extends android.service.controls.actions.ControlAction {
+    ctor public BooleanAction(@NonNull String, boolean);
+    ctor public BooleanAction(@NonNull String, boolean, @Nullable String);
+    method public int getActionType();
+    method public boolean getNewState();
+  }
+
+  public final class CommandAction extends android.service.controls.actions.ControlAction {
+    ctor public CommandAction(@NonNull String, @Nullable String);
+    ctor public CommandAction(@NonNull String);
+    method public int getActionType();
+  }
+
+  public abstract class ControlAction {
+    method public abstract int getActionType();
+    method @Nullable public String getChallengeValue();
+    method @NonNull public static android.service.controls.actions.ControlAction getErrorAction();
+    method @NonNull public String getTemplateId();
+    method public static final boolean isValidResponse(int);
+    field public static final int RESPONSE_CHALLENGE_ACK = 3; // 0x3
+    field public static final int RESPONSE_CHALLENGE_PASSPHRASE = 5; // 0x5
+    field public static final int RESPONSE_CHALLENGE_PIN = 4; // 0x4
+    field public static final int RESPONSE_FAIL = 2; // 0x2
+    field public static final int RESPONSE_OK = 1; // 0x1
+    field public static final int RESPONSE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_BOOLEAN = 1; // 0x1
+    field public static final int TYPE_COMMAND = 5; // 0x5
+    field public static final int TYPE_ERROR = -1; // 0xffffffff
+    field public static final int TYPE_FLOAT = 2; // 0x2
+    field public static final int TYPE_MODE = 4; // 0x4
+  }
+
+  public final class FloatAction extends android.service.controls.actions.ControlAction {
+    ctor public FloatAction(@NonNull String, float);
+    ctor public FloatAction(@NonNull String, float, @Nullable String);
+    method public int getActionType();
+    method public float getNewValue();
+  }
+
+  public final class ModeAction extends android.service.controls.actions.ControlAction {
+    ctor public ModeAction(@NonNull String, int, @Nullable String);
+    ctor public ModeAction(@NonNull String, int);
+    method public int getActionType();
+    method public int getNewMode();
+  }
+
+}
+
+package android.service.controls.templates {
+
+  public final class ControlButton implements android.os.Parcelable {
+    ctor public ControlButton(boolean, @NonNull CharSequence);
+    method public int describeContents();
+    method @NonNull public CharSequence getActionDescription();
+    method public boolean isChecked();
+    method @NonNull public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.controls.templates.ControlButton> CREATOR;
+  }
+
+  public abstract class ControlTemplate {
+    method @NonNull public static android.service.controls.templates.ControlTemplate getErrorTemplate();
+    method @NonNull public static android.service.controls.templates.ControlTemplate getNoTemplateObject();
+    method @NonNull public String getTemplateId();
+    method public abstract int getTemplateType();
+    field public static final int TYPE_ERROR = -1; // 0xffffffff
+    field public static final int TYPE_NO_TEMPLATE = 0; // 0x0
+    field public static final int TYPE_RANGE = 2; // 0x2
+    field public static final int TYPE_STATELESS = 8; // 0x8
+    field public static final int TYPE_TEMPERATURE = 7; // 0x7
+    field public static final int TYPE_THUMBNAIL = 3; // 0x3
+    field public static final int TYPE_TOGGLE = 1; // 0x1
+    field public static final int TYPE_TOGGLE_RANGE = 6; // 0x6
+  }
+
+  public final class RangeTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public RangeTemplate(@NonNull String, float, float, float, float, @Nullable CharSequence);
+    method public float getCurrentValue();
+    method @NonNull public CharSequence getFormatString();
+    method public float getMaxValue();
+    method public float getMinValue();
+    method public float getStepValue();
+    method public int getTemplateType();
+  }
+
+  public final class StatelessTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public StatelessTemplate(@NonNull String);
+    method public int getTemplateType();
+  }
+
+  public final class TemperatureControlTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public TemperatureControlTemplate(@NonNull String, @NonNull android.service.controls.templates.ControlTemplate, int, int, int);
+    method public int getCurrentActiveMode();
+    method public int getCurrentMode();
+    method public int getModes();
+    method @NonNull public android.service.controls.templates.ControlTemplate getTemplate();
+    method public int getTemplateType();
+    field public static final int FLAG_MODE_COOL = 8; // 0x8
+    field public static final int FLAG_MODE_ECO = 32; // 0x20
+    field public static final int FLAG_MODE_HEAT = 4; // 0x4
+    field public static final int FLAG_MODE_HEAT_COOL = 16; // 0x10
+    field public static final int FLAG_MODE_OFF = 2; // 0x2
+    field public static final int MODE_COOL = 3; // 0x3
+    field public static final int MODE_ECO = 5; // 0x5
+    field public static final int MODE_HEAT = 2; // 0x2
+    field public static final int MODE_HEAT_COOL = 4; // 0x4
+    field public static final int MODE_OFF = 1; // 0x1
+    field public static final int MODE_UNKNOWN = 0; // 0x0
+  }
+
+  public final class ThumbnailTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public ThumbnailTemplate(@NonNull String, boolean, @NonNull android.graphics.drawable.Icon, @NonNull CharSequence);
+    method @NonNull public CharSequence getContentDescription();
+    method public int getTemplateType();
+    method @NonNull public android.graphics.drawable.Icon getThumbnail();
+    method public boolean isActive();
+  }
+
+  public final class ToggleRangeTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public ToggleRangeTemplate(@NonNull String, @NonNull android.service.controls.templates.ControlButton, @NonNull android.service.controls.templates.RangeTemplate);
+    ctor public ToggleRangeTemplate(@NonNull String, boolean, @NonNull CharSequence, @NonNull android.service.controls.templates.RangeTemplate);
+    method @NonNull public CharSequence getActionDescription();
+    method @NonNull public android.service.controls.templates.RangeTemplate getRange();
+    method public int getTemplateType();
+    method public boolean isChecked();
+  }
+
+  public final class ToggleTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public ToggleTemplate(@NonNull String, @NonNull android.service.controls.templates.ControlButton);
+    method @NonNull public CharSequence getContentDescription();
+    method public int getTemplateType();
+    method public boolean isChecked();
+  }
+
+}
+
+package android.service.dreams {
+
+  public class DreamService extends android.app.Service implements android.view.Window.Callback {
+    ctor public DreamService();
+    method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method public final void finish();
+    method public android.view.Window getWindow();
+    method public android.view.WindowManager getWindowManager();
+    method public boolean isFullscreen();
+    method public boolean isInteractive();
+    method public boolean isScreenBright();
+    method public void onActionModeFinished(android.view.ActionMode);
+    method public void onActionModeStarted(android.view.ActionMode);
+    method public void onAttachedToWindow();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public void onContentChanged();
+    method public boolean onCreatePanelMenu(int, android.view.Menu);
+    method public android.view.View onCreatePanelView(int);
+    method public void onDetachedFromWindow();
+    method public void onDreamingStarted();
+    method public void onDreamingStopped();
+    method public boolean onMenuItemSelected(int, android.view.MenuItem);
+    method public boolean onMenuOpened(int, android.view.Menu);
+    method public void onPanelClosed(int, android.view.Menu);
+    method public boolean onPreparePanel(int, android.view.View, android.view.Menu);
+    method public boolean onSearchRequested(android.view.SearchEvent);
+    method public boolean onSearchRequested();
+    method public void onWakeUp();
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public void setContentView(@LayoutRes int);
+    method public void setContentView(android.view.View);
+    method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void setFullscreen(boolean);
+    method public void setInteractive(boolean);
+    method public void setScreenBright(boolean);
+    method public final void wakeUp();
+    field public static final String DREAM_META_DATA = "android.service.dream";
+    field public static final String SERVICE_INTERFACE = "android.service.dreams.DreamService";
+  }
+
+}
+
+package android.service.media {
+
+  public abstract class CameraPrewarmService extends android.app.Service {
+    ctor public CameraPrewarmService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onCooldown(boolean);
+    method public abstract void onPrewarm();
+  }
+
+  public abstract class MediaBrowserService extends android.app.Service {
+    ctor public MediaBrowserService();
+    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public final android.os.Bundle getBrowserRootHints();
+    method public final android.media.session.MediaSessionManager.RemoteUserInfo getCurrentBrowserInfo();
+    method @Nullable public android.media.session.MediaSession.Token getSessionToken();
+    method public void notifyChildrenChanged(@NonNull String);
+    method public void notifyChildrenChanged(@NonNull String, @NonNull android.os.Bundle);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public abstract android.service.media.MediaBrowserService.BrowserRoot onGetRoot(@NonNull String, int, @Nullable android.os.Bundle);
+    method public abstract void onLoadChildren(@NonNull String, @NonNull android.service.media.MediaBrowserService.Result<java.util.List<android.media.browse.MediaBrowser.MediaItem>>);
+    method public void onLoadChildren(@NonNull String, @NonNull android.service.media.MediaBrowserService.Result<java.util.List<android.media.browse.MediaBrowser.MediaItem>>, @NonNull android.os.Bundle);
+    method public void onLoadItem(String, android.service.media.MediaBrowserService.Result<android.media.browse.MediaBrowser.MediaItem>);
+    method public void setSessionToken(android.media.session.MediaSession.Token);
+    field public static final String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+  }
+
+  public static final class MediaBrowserService.BrowserRoot {
+    ctor public MediaBrowserService.BrowserRoot(@NonNull String, @Nullable android.os.Bundle);
+    method public android.os.Bundle getExtras();
+    method public String getRootId();
+    field public static final String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+    field public static final String EXTRA_RECENT = "android.service.media.extra.RECENT";
+    field public static final String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+  }
+
+  public class MediaBrowserService.Result<T> {
+    method public void detach();
+    method public void sendResult(T);
+  }
+
+}
+
+package android.service.notification {
+
+  public final class Condition implements android.os.Parcelable {
+    ctor public Condition(android.net.Uri, String, int);
+    ctor public Condition(android.net.Uri, String, String, String, int, int, int);
+    ctor public Condition(android.os.Parcel);
+    method public android.service.notification.Condition copy();
+    method public int describeContents();
+    method public static boolean isValidId(android.net.Uri, String);
+    method public static android.net.Uri.Builder newId(android.content.Context);
+    method public static String relevanceToString(int);
+    method public static String stateToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.Condition> CREATOR;
+    field public static final int FLAG_RELEVANT_ALWAYS = 2; // 0x2
+    field public static final int FLAG_RELEVANT_NOW = 1; // 0x1
+    field public static final String SCHEME = "condition";
+    field public static final int STATE_ERROR = 3; // 0x3
+    field public static final int STATE_FALSE = 0; // 0x0
+    field public static final int STATE_TRUE = 1; // 0x1
+    field public static final int STATE_UNKNOWN = 2; // 0x2
+    field public final int flags;
+    field public final int icon;
+    field public final android.net.Uri id;
+    field public final String line1;
+    field public final String line2;
+    field public final int state;
+    field public final String summary;
+  }
+
+  @Deprecated public abstract class ConditionProviderService extends android.app.Service {
+    ctor @Deprecated public ConditionProviderService();
+    method @Deprecated public final void notifyCondition(android.service.notification.Condition);
+    method @Deprecated public final void notifyConditions(android.service.notification.Condition...);
+    method @Deprecated public android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public abstract void onConnected();
+    method @Deprecated public void onRequestConditions(int);
+    method @Deprecated public abstract void onSubscribe(android.net.Uri);
+    method @Deprecated public abstract void onUnsubscribe(android.net.Uri);
+    method @Deprecated public static final void requestRebind(android.content.ComponentName);
+    method @Deprecated public final void requestUnbind();
+    field @Deprecated public static final String EXTRA_RULE_ID = "android.service.notification.extra.RULE_ID";
+    field @Deprecated public static final String META_DATA_CONFIGURATION_ACTIVITY = "android.service.zen.automatic.configurationActivity";
+    field @Deprecated public static final String META_DATA_RULE_INSTANCE_LIMIT = "android.service.zen.automatic.ruleInstanceLimit";
+    field @Deprecated public static final String META_DATA_RULE_TYPE = "android.service.zen.automatic.ruleType";
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.service.notification.ConditionProviderService";
+  }
+
+  public abstract class NotificationListenerService extends android.app.Service {
+    ctor public NotificationListenerService();
+    method public final void cancelAllNotifications();
+    method @Deprecated public final void cancelNotification(String, String, int);
+    method public final void cancelNotification(String);
+    method public final void cancelNotifications(String[]);
+    method public final void clearRequestedListenerHints();
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications();
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(String[]);
+    method public final int getCurrentInterruptionFilter();
+    method public final int getCurrentListenerHints();
+    method public android.service.notification.NotificationListenerService.RankingMap getCurrentRanking();
+    method public final java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups(@NonNull String, @NonNull android.os.UserHandle);
+    method public final java.util.List<android.app.NotificationChannel> getNotificationChannels(@NonNull String, @NonNull android.os.UserHandle);
+    method public final android.service.notification.StatusBarNotification[] getSnoozedNotifications();
+    method public final void migrateNotificationFilter(int, @Nullable java.util.List<java.lang.String>);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onInterruptionFilterChanged(int);
+    method public void onListenerConnected();
+    method public void onListenerDisconnected();
+    method public void onListenerHintsChanged(int);
+    method public void onNotificationChannelGroupModified(String, android.os.UserHandle, android.app.NotificationChannelGroup, int);
+    method public void onNotificationChannelModified(String, android.os.UserHandle, android.app.NotificationChannel, int);
+    method public void onNotificationPosted(android.service.notification.StatusBarNotification);
+    method public void onNotificationPosted(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationRankingUpdate(android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationRemoved(android.service.notification.StatusBarNotification);
+    method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap, int);
+    method public void onSilentStatusBarIconsVisibilityChanged(boolean);
+    method public final void requestInterruptionFilter(int);
+    method public final void requestListenerHints(int);
+    method public static void requestRebind(android.content.ComponentName);
+    method public final void requestUnbind();
+    method public final void setNotificationsShown(String[]);
+    method public final void snoozeNotification(String, long);
+    method public final void updateNotificationChannel(@NonNull String, @NonNull android.os.UserHandle, @NonNull android.app.NotificationChannel);
+    field public static final int FLAG_FILTER_TYPE_ALERTING = 2; // 0x2
+    field public static final int FLAG_FILTER_TYPE_CONVERSATIONS = 1; // 0x1
+    field public static final int FLAG_FILTER_TYPE_ONGOING = 8; // 0x8
+    field public static final int FLAG_FILTER_TYPE_SILENT = 4; // 0x4
+    field public static final int HINT_HOST_DISABLE_CALL_EFFECTS = 4; // 0x4
+    field public static final int HINT_HOST_DISABLE_EFFECTS = 1; // 0x1
+    field public static final int HINT_HOST_DISABLE_NOTIFICATION_EFFECTS = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
+    field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
+    field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
+    field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
+    field public static final String META_DATA_DEFAULT_FILTER_TYPES = "android.service.notification.default_filter_types";
+    field public static final String META_DATA_DISABLED_FILTER_TYPES = "android.service.notification.disabled_filter_types";
+    field public static final int NOTIFICATION_CHANNEL_OR_GROUP_ADDED = 1; // 0x1
+    field public static final int NOTIFICATION_CHANNEL_OR_GROUP_DELETED = 3; // 0x3
+    field public static final int NOTIFICATION_CHANNEL_OR_GROUP_UPDATED = 2; // 0x2
+    field public static final int REASON_APP_CANCEL = 8; // 0x8
+    field public static final int REASON_APP_CANCEL_ALL = 9; // 0x9
+    field public static final int REASON_CANCEL = 2; // 0x2
+    field public static final int REASON_CANCEL_ALL = 3; // 0x3
+    field public static final int REASON_CHANNEL_BANNED = 17; // 0x11
+    field public static final int REASON_CHANNEL_REMOVED = 20; // 0x14
+    field public static final int REASON_CLEAR_DATA = 21; // 0x15
+    field public static final int REASON_CLICK = 1; // 0x1
+    field public static final int REASON_ERROR = 4; // 0x4
+    field public static final int REASON_GROUP_OPTIMIZATION = 13; // 0xd
+    field public static final int REASON_GROUP_SUMMARY_CANCELED = 12; // 0xc
+    field public static final int REASON_LISTENER_CANCEL = 10; // 0xa
+    field public static final int REASON_LISTENER_CANCEL_ALL = 11; // 0xb
+    field public static final int REASON_PACKAGE_BANNED = 7; // 0x7
+    field public static final int REASON_PACKAGE_CHANGED = 5; // 0x5
+    field public static final int REASON_PACKAGE_SUSPENDED = 14; // 0xe
+    field public static final int REASON_PROFILE_TURNED_OFF = 15; // 0xf
+    field public static final int REASON_SNOOZED = 18; // 0x12
+    field public static final int REASON_TIMEOUT = 19; // 0x13
+    field public static final int REASON_UNAUTOBUNDLED = 16; // 0x10
+    field public static final int REASON_USER_STOPPED = 6; // 0x6
+    field public static final String SERVICE_INTERFACE = "android.service.notification.NotificationListenerService";
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_OFF = 1; // 0x1
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_ON = 2; // 0x2
+  }
+
+  public static class NotificationListenerService.Ranking {
+    ctor public NotificationListenerService.Ranking();
+    method public boolean canBubble();
+    method public boolean canShowBadge();
+    method public android.app.NotificationChannel getChannel();
+    method @Nullable public android.content.pm.ShortcutInfo getConversationShortcutInfo();
+    method public int getImportance();
+    method public CharSequence getImportanceExplanation();
+    method public String getKey();
+    method public long getLastAudiblyAlertedMillis();
+    method public int getLockscreenVisibilityOverride();
+    method public String getOverrideGroupKey();
+    method public int getRank();
+    method @NonNull public java.util.List<android.app.Notification.Action> getSmartActions();
+    method @NonNull public java.util.List<java.lang.CharSequence> getSmartReplies();
+    method public int getSuppressedVisualEffects();
+    method public int getUserSentiment();
+    method public boolean isAmbient();
+    method public boolean isConversation();
+    method public boolean isSuspended();
+    method public boolean matchesInterruptionFilter();
+    field public static final int USER_SENTIMENT_NEGATIVE = -1; // 0xffffffff
+    field public static final int USER_SENTIMENT_NEUTRAL = 0; // 0x0
+    field public static final int USER_SENTIMENT_POSITIVE = 1; // 0x1
+    field public static final int VISIBILITY_NO_OVERRIDE = -1000; // 0xfffffc18
+  }
+
+  public static class NotificationListenerService.RankingMap implements android.os.Parcelable {
+    method public int describeContents();
+    method public String[] getOrderedKeys();
+    method public boolean getRanking(String, android.service.notification.NotificationListenerService.Ranking);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.NotificationListenerService.RankingMap> CREATOR;
+  }
+
+  public class StatusBarNotification implements android.os.Parcelable {
+    ctor @Deprecated public StatusBarNotification(String, String, int, String, int, int, int, android.app.Notification, android.os.UserHandle, long);
+    ctor public StatusBarNotification(android.os.Parcel);
+    method public android.service.notification.StatusBarNotification clone();
+    method public int describeContents();
+    method public String getGroupKey();
+    method public int getId();
+    method public String getKey();
+    method public android.app.Notification getNotification();
+    method @NonNull public String getOpPkg();
+    method public String getOverrideGroupKey();
+    method public String getPackageName();
+    method public long getPostTime();
+    method public String getTag();
+    method public int getUid();
+    method public android.os.UserHandle getUser();
+    method @Deprecated public int getUserId();
+    method public boolean isAppGroup();
+    method public boolean isClearable();
+    method public boolean isGroup();
+    method public boolean isOngoing();
+    method public void setOverrideGroupKey(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.StatusBarNotification> CREATOR;
+  }
+
+  public final class ZenPolicy implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getPriorityCallSenders();
+    method public int getPriorityCategoryAlarms();
+    method public int getPriorityCategoryCalls();
+    method public int getPriorityCategoryConversations();
+    method public int getPriorityCategoryEvents();
+    method public int getPriorityCategoryMedia();
+    method public int getPriorityCategoryMessages();
+    method public int getPriorityCategoryReminders();
+    method public int getPriorityCategoryRepeatCallers();
+    method public int getPriorityCategorySystem();
+    method public int getPriorityConversationSenders();
+    method public int getPriorityMessageSenders();
+    method public int getVisualEffectAmbient();
+    method public int getVisualEffectBadge();
+    method public int getVisualEffectFullScreenIntent();
+    method public int getVisualEffectLights();
+    method public int getVisualEffectNotificationList();
+    method public int getVisualEffectPeek();
+    method public int getVisualEffectStatusBar();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONVERSATION_SENDERS_ANYONE = 1; // 0x1
+    field public static final int CONVERSATION_SENDERS_IMPORTANT = 2; // 0x2
+    field public static final int CONVERSATION_SENDERS_NONE = 3; // 0x3
+    field public static final int CONVERSATION_SENDERS_UNSET = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.ZenPolicy> CREATOR;
+    field public static final int PEOPLE_TYPE_ANYONE = 1; // 0x1
+    field public static final int PEOPLE_TYPE_CONTACTS = 2; // 0x2
+    field public static final int PEOPLE_TYPE_NONE = 4; // 0x4
+    field public static final int PEOPLE_TYPE_STARRED = 3; // 0x3
+    field public static final int PEOPLE_TYPE_UNSET = 0; // 0x0
+    field public static final int STATE_ALLOW = 1; // 0x1
+    field public static final int STATE_DISALLOW = 2; // 0x2
+    field public static final int STATE_UNSET = 0; // 0x0
+  }
+
+  public static final class ZenPolicy.Builder {
+    ctor public ZenPolicy.Builder();
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowAlarms(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowAllSounds();
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowCalls(int);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowConversations(int);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowEvents(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowMedia(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowMessages(int);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowReminders(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowRepeatCallers(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowSystem(boolean);
+    method @NonNull public android.service.notification.ZenPolicy build();
+    method @NonNull public android.service.notification.ZenPolicy.Builder disallowAllSounds();
+    method @NonNull public android.service.notification.ZenPolicy.Builder hideAllVisualEffects();
+    method @NonNull public android.service.notification.ZenPolicy.Builder showAllVisualEffects();
+    method @NonNull public android.service.notification.ZenPolicy.Builder showBadges(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showFullScreenIntent(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showInAmbientDisplay(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showInNotificationList(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showLights(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showPeeking(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showStatusBarIcons(boolean);
+  }
+
+}
+
+package android.service.quickaccesswallet {
+
+  public interface GetWalletCardsCallback {
+    method public void onFailure(@NonNull android.service.quickaccesswallet.GetWalletCardsError);
+    method public void onSuccess(@NonNull android.service.quickaccesswallet.GetWalletCardsResponse);
+  }
+
+  public final class GetWalletCardsError implements android.os.Parcelable {
+    ctor public GetWalletCardsError(@Nullable android.graphics.drawable.Icon, @Nullable CharSequence);
+    method public int describeContents();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @Nullable public CharSequence getMessage();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.GetWalletCardsError> CREATOR;
+  }
+
+  public final class GetWalletCardsRequest implements android.os.Parcelable {
+    ctor public GetWalletCardsRequest(int, int, int, int);
+    method public int describeContents();
+    method public int getCardHeightPx();
+    method public int getCardWidthPx();
+    method public int getIconSizePx();
+    method public int getMaxCards();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.GetWalletCardsRequest> CREATOR;
+  }
+
+  public final class GetWalletCardsResponse implements android.os.Parcelable {
+    ctor public GetWalletCardsResponse(@NonNull java.util.List<android.service.quickaccesswallet.WalletCard>, int);
+    method public int describeContents();
+    method public int getSelectedIndex();
+    method @NonNull public java.util.List<android.service.quickaccesswallet.WalletCard> getWalletCards();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.GetWalletCardsResponse> CREATOR;
+  }
+
+  public abstract class QuickAccessWalletService extends android.app.Service {
+    ctor public QuickAccessWalletService();
+    method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onWalletCardSelected(@NonNull android.service.quickaccesswallet.SelectWalletCardRequest);
+    method public abstract void onWalletCardsRequested(@NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.GetWalletCardsCallback);
+    method public abstract void onWalletDismissed();
+    method public final void sendWalletServiceEvent(@NonNull android.service.quickaccesswallet.WalletServiceEvent);
+    field public static final String ACTION_VIEW_WALLET = "android.service.quickaccesswallet.action.VIEW_WALLET";
+    field public static final String ACTION_VIEW_WALLET_SETTINGS = "android.service.quickaccesswallet.action.VIEW_WALLET_SETTINGS";
+    field public static final String SERVICE_INTERFACE = "android.service.quickaccesswallet.QuickAccessWalletService";
+    field public static final String SERVICE_META_DATA = "android.quickaccesswallet";
+  }
+
+  public final class SelectWalletCardRequest implements android.os.Parcelable {
+    ctor public SelectWalletCardRequest(@NonNull String);
+    method public int describeContents();
+    method @NonNull public String getCardId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.SelectWalletCardRequest> CREATOR;
+  }
+
+  public final class WalletCard implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.graphics.drawable.Icon getCardIcon();
+    method @NonNull public String getCardId();
+    method @NonNull public android.graphics.drawable.Icon getCardImage();
+    method @Nullable public CharSequence getCardLabel();
+    method @NonNull public CharSequence getContentDescription();
+    method @NonNull public android.app.PendingIntent getPendingIntent();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.WalletCard> CREATOR;
+  }
+
+  public static final class WalletCard.Builder {
+    ctor public WalletCard.Builder(@NonNull String, @NonNull android.graphics.drawable.Icon, @NonNull CharSequence, @NonNull android.app.PendingIntent);
+    method @NonNull public android.service.quickaccesswallet.WalletCard build();
+    method @NonNull public android.service.quickaccesswallet.WalletCard.Builder setCardIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.service.quickaccesswallet.WalletCard.Builder setCardLabel(@Nullable CharSequence);
+  }
+
+  public final class WalletServiceEvent implements android.os.Parcelable {
+    ctor public WalletServiceEvent(int);
+    method public int describeContents();
+    method public int getEventType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.WalletServiceEvent> CREATOR;
+    field public static final int TYPE_NFC_PAYMENT_STARTED = 1; // 0x1
+  }
+
+}
+
+package android.service.quicksettings {
+
+  public final class Tile implements android.os.Parcelable {
+    method public int describeContents();
+    method public CharSequence getContentDescription();
+    method public android.graphics.drawable.Icon getIcon();
+    method public CharSequence getLabel();
+    method public int getState();
+    method @Nullable public CharSequence getStateDescription();
+    method @Nullable public CharSequence getSubtitle();
+    method public void setContentDescription(CharSequence);
+    method public void setIcon(android.graphics.drawable.Icon);
+    method public void setLabel(CharSequence);
+    method public void setState(int);
+    method public void setStateDescription(@Nullable CharSequence);
+    method public void setSubtitle(@Nullable CharSequence);
+    method public void updateTile();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quicksettings.Tile> CREATOR;
+    field public static final int STATE_ACTIVE = 2; // 0x2
+    field public static final int STATE_INACTIVE = 1; // 0x1
+    field public static final int STATE_UNAVAILABLE = 0; // 0x0
+  }
+
+  public class TileService extends android.app.Service {
+    ctor public TileService();
+    method public final android.service.quicksettings.Tile getQsTile();
+    method public final boolean isLocked();
+    method public final boolean isSecure();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onClick();
+    method public void onStartListening();
+    method public void onStopListening();
+    method public void onTileAdded();
+    method public void onTileRemoved();
+    method public static final void requestListeningState(android.content.Context, android.content.ComponentName);
+    method public final void showDialog(android.app.Dialog);
+    method public final void startActivityAndCollapse(android.content.Intent);
+    method public final void unlockAndRun(Runnable);
+    field public static final String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE";
+    field public static final String ACTION_QS_TILE_PREFERENCES = "android.service.quicksettings.action.QS_TILE_PREFERENCES";
+    field public static final String META_DATA_ACTIVE_TILE = "android.service.quicksettings.ACTIVE_TILE";
+    field public static final String META_DATA_TOGGLEABLE_TILE = "android.service.quicksettings.TOGGLEABLE_TILE";
+  }
+
+}
+
+package android.service.restrictions {
+
+  public abstract class RestrictionsReceiver extends android.content.BroadcastReceiver {
+    ctor public RestrictionsReceiver();
+    method public void onReceive(android.content.Context, android.content.Intent);
+    method public abstract void onRequestPermission(android.content.Context, String, String, String, android.os.PersistableBundle);
+  }
+
+}
+
+package android.service.textservice {
+
+  public abstract class SpellCheckerService extends android.app.Service {
+    ctor public SpellCheckerService();
+    method public abstract android.service.textservice.SpellCheckerService.Session createSession();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    field public static final String SERVICE_INTERFACE = "android.service.textservice.SpellCheckerService";
+  }
+
+  public abstract static class SpellCheckerService.Session {
+    ctor public SpellCheckerService.Session();
+    method public android.os.Bundle getBundle();
+    method public String getLocale();
+    method public int getSupportedAttributes();
+    method public void onCancel();
+    method public void onClose();
+    method public abstract void onCreate();
+    method public android.view.textservice.SentenceSuggestionsInfo[] onGetSentenceSuggestionsMultiple(android.view.textservice.TextInfo[], int);
+    method public abstract android.view.textservice.SuggestionsInfo onGetSuggestions(android.view.textservice.TextInfo, int);
+    method public android.view.textservice.SuggestionsInfo[] onGetSuggestionsMultiple(android.view.textservice.TextInfo[], int, boolean);
+  }
+
+}
+
+package android.service.voice {
+
+  public final class VisibleActivityInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.service.voice.VoiceInteractionSession.ActivityId getActivityId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.voice.VisibleActivityInfo> CREATOR;
+  }
+
+  public class VoiceInteractionService extends android.app.Service {
+    ctor public VoiceInteractionService();
+    method public int getDisabledShowContext();
+    method public static boolean isActiveService(android.content.Context, android.content.ComponentName);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @NonNull public java.util.Set<java.lang.String> onGetSupportedVoiceActions(@NonNull java.util.Set<java.lang.String>);
+    method public void onLaunchVoiceAssistFromKeyguard();
+    method public void onReady();
+    method public void onShutdown();
+    method public void setDisabledShowContext(int);
+    method public final void setUiHints(@NonNull android.os.Bundle);
+    method public void showSession(android.os.Bundle, int);
+    field public static final String SERVICE_INTERFACE = "android.service.voice.VoiceInteractionService";
+    field public static final String SERVICE_META_DATA = "android.voice_interaction";
+  }
+
+  public class VoiceInteractionSession implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback {
+    ctor public VoiceInteractionSession(android.content.Context);
+    ctor public VoiceInteractionSession(android.content.Context, android.os.Handler);
+    method public void closeSystemDialogs();
+    method public void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public void finish();
+    method public android.content.Context getContext();
+    method public int getDisabledShowContext();
+    method public android.view.LayoutInflater getLayoutInflater();
+    method public int getUserDisabledShowContext();
+    method public android.app.Dialog getWindow();
+    method public void hide();
+    method public void onAssistStructureFailure(Throwable);
+    method public void onBackPressed();
+    method public void onCancelRequest(android.service.voice.VoiceInteractionSession.Request);
+    method public void onCloseSystemDialogs();
+    method public void onComputeInsets(android.service.voice.VoiceInteractionSession.Insets);
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onCreate();
+    method public android.view.View onCreateContentView();
+    method public void onDestroy();
+    method public void onDirectActionsInvalidated(@NonNull android.service.voice.VoiceInteractionSession.ActivityId);
+    method public boolean[] onGetSupportedCommands(String[]);
+    method @Deprecated public void onHandleAssist(@Nullable android.os.Bundle, @Nullable android.app.assist.AssistStructure, @Nullable android.app.assist.AssistContent);
+    method public void onHandleAssist(@NonNull android.service.voice.VoiceInteractionSession.AssistState);
+    method @Deprecated public void onHandleAssistSecondary(@Nullable android.os.Bundle, @Nullable android.app.assist.AssistStructure, @Nullable android.app.assist.AssistContent, int, int);
+    method public void onHandleScreenshot(@Nullable android.graphics.Bitmap);
+    method public void onHide();
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onLockscreenShown();
+    method public void onLowMemory();
+    method public void onPrepareShow(android.os.Bundle, int);
+    method public void onRequestAbortVoice(android.service.voice.VoiceInteractionSession.AbortVoiceRequest);
+    method public void onRequestCommand(android.service.voice.VoiceInteractionSession.CommandRequest);
+    method public void onRequestCompleteVoice(android.service.voice.VoiceInteractionSession.CompleteVoiceRequest);
+    method public void onRequestConfirmation(android.service.voice.VoiceInteractionSession.ConfirmationRequest);
+    method public void onRequestPickOption(android.service.voice.VoiceInteractionSession.PickOptionRequest);
+    method public void onShow(android.os.Bundle, int);
+    method public void onTaskFinished(android.content.Intent, int);
+    method public void onTaskStarted(android.content.Intent, int);
+    method public void onTrimMemory(int);
+    method public final void performDirectAction(@NonNull android.app.DirectAction, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.os.Bundle>);
+    method public final void registerVisibleActivityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.service.voice.VoiceInteractionSession.VisibleActivityCallback);
+    method public final void requestDirectActions(@NonNull android.service.voice.VoiceInteractionSession.ActivityId, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<android.app.DirectAction>>);
+    method public void setContentView(android.view.View);
+    method public void setDisabledShowContext(int);
+    method public void setKeepAwake(boolean);
+    method public void setTheme(int);
+    method public void setUiEnabled(boolean);
+    method public void show(android.os.Bundle, int);
+    method public void startAssistantActivity(android.content.Intent);
+    method public void startVoiceActivity(android.content.Intent);
+    method public final void unregisterVisibleActivityCallback(@NonNull android.service.voice.VoiceInteractionSession.VisibleActivityCallback);
+    field public static final int SHOW_SOURCE_ACTIVITY = 16; // 0x10
+    field public static final int SHOW_SOURCE_APPLICATION = 8; // 0x8
+    field public static final int SHOW_SOURCE_ASSIST_GESTURE = 4; // 0x4
+    field public static final int SHOW_SOURCE_AUTOMOTIVE_SYSTEM_UI = 128; // 0x80
+    field public static final int SHOW_SOURCE_NOTIFICATION = 64; // 0x40
+    field public static final int SHOW_SOURCE_PUSH_TO_TALK = 32; // 0x20
+    field public static final int SHOW_WITH_ASSIST = 1; // 0x1
+    field public static final int SHOW_WITH_SCREENSHOT = 2; // 0x2
+  }
+
+  public static final class VoiceInteractionSession.AbortVoiceRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method @Deprecated @Nullable public CharSequence getMessage();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendAbortResult(android.os.Bundle);
+  }
+
+  public static class VoiceInteractionSession.ActivityId {
+  }
+
+  public static final class VoiceInteractionSession.AssistState {
+    method @NonNull public android.service.voice.VoiceInteractionSession.ActivityId getActivityId();
+    method @Nullable public android.app.assist.AssistContent getAssistContent();
+    method @Nullable public android.os.Bundle getAssistData();
+    method @Nullable public android.app.assist.AssistStructure getAssistStructure();
+    method @IntRange(from=0) public int getCount();
+    method @IntRange(from=0xffffffff) public int getIndex();
+    method public boolean isFocused();
+  }
+
+  public static final class VoiceInteractionSession.CommandRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method public String getCommand();
+    method public void sendIntermediateResult(android.os.Bundle);
+    method public void sendResult(android.os.Bundle);
+  }
+
+  public static final class VoiceInteractionSession.CompleteVoiceRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method @Deprecated @Nullable public CharSequence getMessage();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendCompleteResult(android.os.Bundle);
+  }
+
+  public static final class VoiceInteractionSession.ConfirmationRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method @Deprecated @Nullable public CharSequence getPrompt();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendConfirmationResult(boolean, android.os.Bundle);
+  }
+
+  public static final class VoiceInteractionSession.Insets {
+    ctor public VoiceInteractionSession.Insets();
+    field public static final int TOUCHABLE_INSETS_CONTENT = 1; // 0x1
+    field public static final int TOUCHABLE_INSETS_FRAME = 0; // 0x0
+    field public static final int TOUCHABLE_INSETS_REGION = 3; // 0x3
+    field public final android.graphics.Rect contentInsets;
+    field public int touchableInsets;
+    field public final android.graphics.Region touchableRegion;
+  }
+
+  public static final class VoiceInteractionSession.PickOptionRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method public android.app.VoiceInteractor.PickOptionRequest.Option[] getOptions();
+    method @Deprecated @Nullable public CharSequence getPrompt();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendIntermediatePickOptionResult(android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
+    method public void sendPickOptionResult(android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
+  }
+
+  public static class VoiceInteractionSession.Request {
+    method public void cancel();
+    method public String getCallingPackage();
+    method public int getCallingUid();
+    method public android.os.Bundle getExtras();
+    method public boolean isActive();
+  }
+
+  public static interface VoiceInteractionSession.VisibleActivityCallback {
+    method public default void onInvisible(@NonNull android.service.voice.VoiceInteractionSession.ActivityId);
+    method public default void onVisible(@NonNull android.service.voice.VisibleActivityInfo);
+  }
+
+  public abstract class VoiceInteractionSessionService extends android.app.Service {
+    ctor public VoiceInteractionSessionService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.service.voice.VoiceInteractionSession onNewSession(android.os.Bundle);
+  }
+
+}
+
+package android.service.vr {
+
+  public abstract class VrListenerService extends android.app.Service {
+    ctor public VrListenerService();
+    method public static final boolean isVrModePackageEnabled(@NonNull android.content.Context, @NonNull android.content.ComponentName);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onCurrentVrActivityChanged(android.content.ComponentName);
+    field public static final String SERVICE_INTERFACE = "android.service.vr.VrListenerService";
+  }
+
+}
+
+package android.service.wallpaper {
+
+  public abstract class WallpaperService extends android.app.Service {
+    ctor public WallpaperService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.service.wallpaper.WallpaperService.Engine onCreateEngine();
+    field public static final String SERVICE_INTERFACE = "android.service.wallpaper.WallpaperService";
+    field public static final String SERVICE_META_DATA = "android.service.wallpaper";
+  }
+
+  public class WallpaperService.Engine {
+    ctor public WallpaperService.Engine();
+    method protected void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public int getDesiredMinimumHeight();
+    method public int getDesiredMinimumWidth();
+    method @Nullable public android.content.Context getDisplayContext();
+    method public android.view.SurfaceHolder getSurfaceHolder();
+    method public boolean isPreview();
+    method public boolean isVisible();
+    method public void notifyColorsChanged();
+    method public void onApplyWindowInsets(android.view.WindowInsets);
+    method public android.os.Bundle onCommand(String, int, int, int, android.os.Bundle, boolean);
+    method @Nullable public android.app.WallpaperColors onComputeColors();
+    method public void onCreate(android.view.SurfaceHolder);
+    method public void onDesiredSizeChanged(int, int);
+    method public void onDestroy();
+    method public void onOffsetsChanged(float, float, float, float, int, int);
+    method public void onSurfaceChanged(android.view.SurfaceHolder, int, int, int);
+    method public void onSurfaceCreated(android.view.SurfaceHolder);
+    method public void onSurfaceDestroyed(android.view.SurfaceHolder);
+    method public void onSurfaceRedrawNeeded(android.view.SurfaceHolder);
+    method public void onTouchEvent(android.view.MotionEvent);
+    method public void onVisibilityChanged(boolean);
+    method public void onZoomChanged(@FloatRange(from=0.0f, to=1.0f) float);
+    method public void setOffsetNotificationsEnabled(boolean);
+    method public void setTouchEventsEnabled(boolean);
+  }
+
+}
+
+package android.speech {
+
+  public interface RecognitionListener {
+    method public void onBeginningOfSpeech();
+    method public void onBufferReceived(byte[]);
+    method public void onEndOfSpeech();
+    method public void onError(int);
+    method public void onEvent(int, android.os.Bundle);
+    method public void onPartialResults(android.os.Bundle);
+    method public void onReadyForSpeech(android.os.Bundle);
+    method public void onResults(android.os.Bundle);
+    method public void onRmsChanged(float);
+  }
+
+  public abstract class RecognitionService extends android.app.Service {
+    ctor public RecognitionService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method protected abstract void onCancel(android.speech.RecognitionService.Callback);
+    method protected abstract void onStartListening(android.content.Intent, android.speech.RecognitionService.Callback);
+    method protected abstract void onStopListening(android.speech.RecognitionService.Callback);
+    field public static final String SERVICE_INTERFACE = "android.speech.RecognitionService";
+    field public static final String SERVICE_META_DATA = "android.speech";
+  }
+
+  public class RecognitionService.Callback {
+    method public void beginningOfSpeech() throws android.os.RemoteException;
+    method public void bufferReceived(byte[]) throws android.os.RemoteException;
+    method public void endOfSpeech() throws android.os.RemoteException;
+    method public void error(int) throws android.os.RemoteException;
+    method @NonNull public android.content.AttributionSource getCallingAttributionSource();
+    method public int getCallingUid();
+    method public void partialResults(android.os.Bundle) throws android.os.RemoteException;
+    method public void readyForSpeech(android.os.Bundle) throws android.os.RemoteException;
+    method public void results(android.os.Bundle) throws android.os.RemoteException;
+    method public void rmsChanged(float) throws android.os.RemoteException;
+  }
+
+  public class RecognizerIntent {
+    method public static final android.content.Intent getVoiceDetailsIntent(android.content.Context);
+    field public static final String ACTION_GET_LANGUAGE_DETAILS = "android.speech.action.GET_LANGUAGE_DETAILS";
+    field public static final String ACTION_RECOGNIZE_SPEECH = "android.speech.action.RECOGNIZE_SPEECH";
+    field public static final String ACTION_VOICE_SEARCH_HANDS_FREE = "android.speech.action.VOICE_SEARCH_HANDS_FREE";
+    field public static final String ACTION_WEB_SEARCH = "android.speech.action.WEB_SEARCH";
+    field public static final String DETAILS_META_DATA = "android.speech.DETAILS";
+    field public static final String EXTRA_AUDIO_INJECT_SOURCE = "android.speech.extra.AUDIO_INJECT_SOURCE";
+    field public static final String EXTRA_CALLING_PACKAGE = "calling_package";
+    field public static final String EXTRA_CONFIDENCE_SCORES = "android.speech.extra.CONFIDENCE_SCORES";
+    field public static final String EXTRA_LANGUAGE = "android.speech.extra.LANGUAGE";
+    field public static final String EXTRA_LANGUAGE_MODEL = "android.speech.extra.LANGUAGE_MODEL";
+    field public static final String EXTRA_LANGUAGE_PREFERENCE = "android.speech.extra.LANGUAGE_PREFERENCE";
+    field public static final String EXTRA_MAX_RESULTS = "android.speech.extra.MAX_RESULTS";
+    field public static final String EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE = "android.speech.extra.ONLY_RETURN_LANGUAGE_PREFERENCE";
+    field public static final String EXTRA_ORIGIN = "android.speech.extra.ORIGIN";
+    field public static final String EXTRA_PARTIAL_RESULTS = "android.speech.extra.PARTIAL_RESULTS";
+    field public static final String EXTRA_PREFER_OFFLINE = "android.speech.extra.PREFER_OFFLINE";
+    field public static final String EXTRA_PROMPT = "android.speech.extra.PROMPT";
+    field public static final String EXTRA_RESULTS = "android.speech.extra.RESULTS";
+    field public static final String EXTRA_RESULTS_PENDINGINTENT = "android.speech.extra.RESULTS_PENDINGINTENT";
+    field public static final String EXTRA_RESULTS_PENDINGINTENT_BUNDLE = "android.speech.extra.RESULTS_PENDINGINTENT_BUNDLE";
+    field public static final String EXTRA_SECURE = "android.speech.extras.EXTRA_SECURE";
+    field public static final String EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS";
+    field public static final String EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_MINIMUM_LENGTH_MILLIS";
+    field public static final String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS";
+    field public static final String EXTRA_SUPPORTED_LANGUAGES = "android.speech.extra.SUPPORTED_LANGUAGES";
+    field public static final String EXTRA_WEB_SEARCH_ONLY = "android.speech.extra.WEB_SEARCH_ONLY";
+    field public static final String LANGUAGE_MODEL_FREE_FORM = "free_form";
+    field public static final String LANGUAGE_MODEL_WEB_SEARCH = "web_search";
+    field public static final int RESULT_AUDIO_ERROR = 5; // 0x5
+    field public static final int RESULT_CLIENT_ERROR = 2; // 0x2
+    field public static final int RESULT_NETWORK_ERROR = 4; // 0x4
+    field public static final int RESULT_NO_MATCH = 1; // 0x1
+    field public static final int RESULT_SERVER_ERROR = 3; // 0x3
+  }
+
+  public class RecognizerResultsIntent {
+    field public static final String ACTION_VOICE_SEARCH_RESULTS = "android.speech.action.VOICE_SEARCH_RESULTS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_HTML = "android.speech.extras.VOICE_SEARCH_RESULT_HTML";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS = "android.speech.extras.VOICE_SEARCH_RESULT_HTML_BASE_URLS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS = "android.speech.extras.EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_STRINGS = "android.speech.extras.VOICE_SEARCH_RESULT_STRINGS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_URLS = "android.speech.extras.VOICE_SEARCH_RESULT_URLS";
+    field public static final String URI_SCHEME_INLINE = "inline";
+  }
+
+  public class SpeechRecognizer {
+    method @MainThread public void cancel();
+    method @MainThread @NonNull public static android.speech.SpeechRecognizer createOnDeviceSpeechRecognizer(@NonNull android.content.Context);
+    method @MainThread public static android.speech.SpeechRecognizer createSpeechRecognizer(android.content.Context);
+    method @MainThread public static android.speech.SpeechRecognizer createSpeechRecognizer(android.content.Context, android.content.ComponentName);
+    method public void destroy();
+    method public static boolean isOnDeviceRecognitionAvailable(@NonNull android.content.Context);
+    method public static boolean isRecognitionAvailable(@NonNull android.content.Context);
+    method @MainThread public void setRecognitionListener(android.speech.RecognitionListener);
+    method @MainThread public void startListening(android.content.Intent);
+    method @MainThread public void stopListening();
+    field public static final String CONFIDENCE_SCORES = "confidence_scores";
+    field public static final int ERROR_AUDIO = 3; // 0x3
+    field public static final int ERROR_CLIENT = 5; // 0x5
+    field public static final int ERROR_INSUFFICIENT_PERMISSIONS = 9; // 0x9
+    field public static final int ERROR_LANGUAGE_NOT_SUPPORTED = 12; // 0xc
+    field public static final int ERROR_LANGUAGE_UNAVAILABLE = 13; // 0xd
+    field public static final int ERROR_NETWORK = 2; // 0x2
+    field public static final int ERROR_NETWORK_TIMEOUT = 1; // 0x1
+    field public static final int ERROR_NO_MATCH = 7; // 0x7
+    field public static final int ERROR_RECOGNIZER_BUSY = 8; // 0x8
+    field public static final int ERROR_SERVER = 4; // 0x4
+    field public static final int ERROR_SERVER_DISCONNECTED = 11; // 0xb
+    field public static final int ERROR_SPEECH_TIMEOUT = 6; // 0x6
+    field public static final int ERROR_TOO_MANY_REQUESTS = 10; // 0xa
+    field public static final String RESULTS_RECOGNITION = "results_recognition";
+  }
+
+}
+
+package android.speech.tts {
+
+  public interface SynthesisCallback {
+    method public int audioAvailable(byte[], int, int);
+    method public int done();
+    method public void error();
+    method public void error(int);
+    method public int getMaxBufferSize();
+    method public boolean hasFinished();
+    method public boolean hasStarted();
+    method public default void rangeStart(int, int, int);
+    method public int start(int, int, @IntRange(from=1, to=2) int);
+  }
+
+  public final class SynthesisRequest {
+    ctor public SynthesisRequest(String, android.os.Bundle);
+    ctor public SynthesisRequest(CharSequence, android.os.Bundle);
+    method public int getCallerUid();
+    method public CharSequence getCharSequenceText();
+    method public String getCountry();
+    method public String getLanguage();
+    method public android.os.Bundle getParams();
+    method public int getPitch();
+    method public int getSpeechRate();
+    method @Deprecated public String getText();
+    method public String getVariant();
+    method public String getVoiceName();
+  }
+
+  public class TextToSpeech {
+    ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener);
+    ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, String);
+    method public int addEarcon(String, String, @RawRes int);
+    method @Deprecated public int addEarcon(String, String);
+    method public int addEarcon(String, java.io.File);
+    method public int addEarcon(@NonNull String, @NonNull android.net.Uri);
+    method public int addSpeech(String, String, @RawRes int);
+    method public int addSpeech(CharSequence, String, @RawRes int);
+    method public int addSpeech(String, String);
+    method public int addSpeech(CharSequence, java.io.File);
+    method public int addSpeech(@NonNull CharSequence, @NonNull android.net.Uri);
+    method @Deprecated public boolean areDefaultsEnforced();
+    method public java.util.Set<java.util.Locale> getAvailableLanguages();
+    method public String getDefaultEngine();
+    method @Deprecated public java.util.Locale getDefaultLanguage();
+    method public android.speech.tts.Voice getDefaultVoice();
+    method public java.util.List<android.speech.tts.TextToSpeech.EngineInfo> getEngines();
+    method @Deprecated public java.util.Set<java.lang.String> getFeatures(java.util.Locale);
+    method @Deprecated public java.util.Locale getLanguage();
+    method public static int getMaxSpeechInputLength();
+    method public android.speech.tts.Voice getVoice();
+    method public java.util.Set<android.speech.tts.Voice> getVoices();
+    method public int isLanguageAvailable(java.util.Locale);
+    method public boolean isSpeaking();
+    method public int playEarcon(String, int, android.os.Bundle, String);
+    method @Deprecated public int playEarcon(String, int, java.util.HashMap<java.lang.String,java.lang.String>);
+    method @Deprecated public int playSilence(long, int, java.util.HashMap<java.lang.String,java.lang.String>);
+    method public int playSilentUtterance(long, int, String);
+    method public int setAudioAttributes(android.media.AudioAttributes);
+    method @Deprecated public int setEngineByPackageName(String);
+    method public int setLanguage(java.util.Locale);
+    method @Deprecated public int setOnUtteranceCompletedListener(android.speech.tts.TextToSpeech.OnUtteranceCompletedListener);
+    method public int setOnUtteranceProgressListener(android.speech.tts.UtteranceProgressListener);
+    method public int setPitch(float);
+    method public int setSpeechRate(float);
+    method public int setVoice(android.speech.tts.Voice);
+    method public void shutdown();
+    method public int speak(CharSequence, int, android.os.Bundle, String);
+    method @Deprecated public int speak(String, int, java.util.HashMap<java.lang.String,java.lang.String>);
+    method public int stop();
+    method public int synthesizeToFile(@NonNull CharSequence, @NonNull android.os.Bundle, @NonNull android.os.ParcelFileDescriptor, @NonNull String);
+    method public int synthesizeToFile(CharSequence, android.os.Bundle, java.io.File, String);
+    method @Deprecated public int synthesizeToFile(String, java.util.HashMap<java.lang.String,java.lang.String>, String);
+    field public static final String ACTION_TTS_QUEUE_PROCESSING_COMPLETED = "android.speech.tts.TTS_QUEUE_PROCESSING_COMPLETED";
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_INVALID_REQUEST = -8; // 0xfffffff8
+    field public static final int ERROR_NETWORK = -6; // 0xfffffffa
+    field public static final int ERROR_NETWORK_TIMEOUT = -7; // 0xfffffff9
+    field public static final int ERROR_NOT_INSTALLED_YET = -9; // 0xfffffff7
+    field public static final int ERROR_OUTPUT = -5; // 0xfffffffb
+    field public static final int ERROR_SERVICE = -4; // 0xfffffffc
+    field public static final int ERROR_SYNTHESIS = -3; // 0xfffffffd
+    field public static final int LANG_AVAILABLE = 0; // 0x0
+    field public static final int LANG_COUNTRY_AVAILABLE = 1; // 0x1
+    field public static final int LANG_COUNTRY_VAR_AVAILABLE = 2; // 0x2
+    field public static final int LANG_MISSING_DATA = -1; // 0xffffffff
+    field public static final int LANG_NOT_SUPPORTED = -2; // 0xfffffffe
+    field public static final int QUEUE_ADD = 1; // 0x1
+    field public static final int QUEUE_FLUSH = 0; // 0x0
+    field public static final int STOPPED = -2; // 0xfffffffe
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public class TextToSpeech.Engine {
+    ctor public TextToSpeech.Engine();
+    field public static final String ACTION_CHECK_TTS_DATA = "android.speech.tts.engine.CHECK_TTS_DATA";
+    field public static final String ACTION_GET_SAMPLE_TEXT = "android.speech.tts.engine.GET_SAMPLE_TEXT";
+    field public static final String ACTION_INSTALL_TTS_DATA = "android.speech.tts.engine.INSTALL_TTS_DATA";
+    field public static final String ACTION_TTS_DATA_INSTALLED = "android.speech.tts.engine.TTS_DATA_INSTALLED";
+    field @Deprecated public static final int CHECK_VOICE_DATA_BAD_DATA = -1; // 0xffffffff
+    field public static final int CHECK_VOICE_DATA_FAIL = 0; // 0x0
+    field @Deprecated public static final int CHECK_VOICE_DATA_MISSING_DATA = -2; // 0xfffffffe
+    field @Deprecated public static final int CHECK_VOICE_DATA_MISSING_VOLUME = -3; // 0xfffffffd
+    field public static final int CHECK_VOICE_DATA_PASS = 1; // 0x1
+    field public static final int DEFAULT_STREAM = 3; // 0x3
+    field public static final String EXTRA_AVAILABLE_VOICES = "availableVoices";
+    field @Deprecated public static final String EXTRA_CHECK_VOICE_DATA_FOR = "checkVoiceDataFor";
+    field public static final String EXTRA_SAMPLE_TEXT = "sampleText";
+    field @Deprecated public static final String EXTRA_TTS_DATA_INSTALLED = "dataInstalled";
+    field public static final String EXTRA_UNAVAILABLE_VOICES = "unavailableVoices";
+    field @Deprecated public static final String EXTRA_VOICE_DATA_FILES = "dataFiles";
+    field @Deprecated public static final String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo";
+    field @Deprecated public static final String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot";
+    field public static final String INTENT_ACTION_TTS_SERVICE = "android.intent.action.TTS_SERVICE";
+    field @Deprecated public static final String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts";
+    field public static final String KEY_FEATURE_NETWORK_RETRIES_COUNT = "networkRetriesCount";
+    field @Deprecated public static final String KEY_FEATURE_NETWORK_SYNTHESIS = "networkTts";
+    field public static final String KEY_FEATURE_NETWORK_TIMEOUT_MS = "networkTimeoutMs";
+    field public static final String KEY_FEATURE_NOT_INSTALLED = "notInstalled";
+    field public static final String KEY_PARAM_PAN = "pan";
+    field public static final String KEY_PARAM_SESSION_ID = "sessionId";
+    field public static final String KEY_PARAM_STREAM = "streamType";
+    field public static final String KEY_PARAM_UTTERANCE_ID = "utteranceId";
+    field public static final String KEY_PARAM_VOLUME = "volume";
+    field public static final String SERVICE_META_DATA = "android.speech.tts";
+  }
+
+  public static class TextToSpeech.EngineInfo {
+    ctor public TextToSpeech.EngineInfo();
+    field public int icon;
+    field public String label;
+    field public String name;
+  }
+
+  public static interface TextToSpeech.OnInitListener {
+    method public void onInit(int);
+  }
+
+  @Deprecated public static interface TextToSpeech.OnUtteranceCompletedListener {
+    method @Deprecated public void onUtteranceCompleted(String);
+  }
+
+  public abstract class TextToSpeechService extends android.app.Service {
+    ctor public TextToSpeechService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public String onGetDefaultVoiceNameFor(String, String, String);
+    method protected java.util.Set<java.lang.String> onGetFeaturesForLanguage(String, String, String);
+    method protected abstract String[] onGetLanguage();
+    method public java.util.List<android.speech.tts.Voice> onGetVoices();
+    method protected abstract int onIsLanguageAvailable(String, String, String);
+    method public int onIsValidVoiceName(String);
+    method protected abstract int onLoadLanguage(String, String, String);
+    method public int onLoadVoice(String);
+    method protected abstract void onStop();
+    method protected abstract void onSynthesizeText(android.speech.tts.SynthesisRequest, android.speech.tts.SynthesisCallback);
+  }
+
+  public abstract class UtteranceProgressListener {
+    ctor public UtteranceProgressListener();
+    method public void onAudioAvailable(String, byte[]);
+    method public void onBeginSynthesis(String, int, int, int);
+    method public abstract void onDone(String);
+    method @Deprecated public abstract void onError(String);
+    method public void onError(String, int);
+    method public void onRangeStart(String, int, int, int);
+    method public abstract void onStart(String);
+    method public void onStop(String, boolean);
+  }
+
+  public class Voice implements android.os.Parcelable {
+    ctor public Voice(String, java.util.Locale, int, int, boolean, java.util.Set<java.lang.String>);
+    method public int describeContents();
+    method public java.util.Set<java.lang.String> getFeatures();
+    method public int getLatency();
+    method public java.util.Locale getLocale();
+    method public String getName();
+    method public int getQuality();
+    method public boolean isNetworkConnectionRequired();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.speech.tts.Voice> CREATOR;
+    field public static final int LATENCY_HIGH = 400; // 0x190
+    field public static final int LATENCY_LOW = 200; // 0xc8
+    field public static final int LATENCY_NORMAL = 300; // 0x12c
+    field public static final int LATENCY_VERY_HIGH = 500; // 0x1f4
+    field public static final int LATENCY_VERY_LOW = 100; // 0x64
+    field public static final int QUALITY_HIGH = 400; // 0x190
+    field public static final int QUALITY_LOW = 200; // 0xc8
+    field public static final int QUALITY_NORMAL = 300; // 0x12c
+    field public static final int QUALITY_VERY_HIGH = 500; // 0x1f4
+    field public static final int QUALITY_VERY_LOW = 100; // 0x64
+  }
+
+}
+
+package android.telecom {
+
+  public final class Call {
+    method public void addConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void answer(int);
+    method public void conference(android.telecom.Call);
+    method public void deflect(android.net.Uri);
+    method public void disconnect();
+    method public java.util.List<java.lang.String> getCannedTextResponses();
+    method public java.util.List<android.telecom.Call> getChildren();
+    method public java.util.List<android.telecom.Call> getConferenceableCalls();
+    method public android.telecom.Call.Details getDetails();
+    method @Nullable public android.telecom.Call getGenericConferenceActiveChildCall();
+    method public android.telecom.Call getParent();
+    method public String getRemainingPostDialSequence();
+    method @Nullable public android.telecom.Call.RttCall getRttCall();
+    method @Deprecated public int getState();
+    method public android.telecom.InCallService.VideoCall getVideoCall();
+    method public void handoverTo(android.telecom.PhoneAccountHandle, int, android.os.Bundle);
+    method public void hold();
+    method public boolean isRttActive();
+    method public void mergeConference();
+    method public void phoneAccountSelected(android.telecom.PhoneAccountHandle, boolean);
+    method public void playDtmfTone(char);
+    method public void postDialContinue(boolean);
+    method public void pullExternalCall();
+    method public void putExtras(android.os.Bundle);
+    method public void registerCallback(android.telecom.Call.Callback);
+    method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
+    method public void reject(boolean, String);
+    method public void reject(int);
+    method public void removeExtras(java.util.List<java.lang.String>);
+    method public void removeExtras(java.lang.String...);
+    method public void respondToRttRequest(int, boolean);
+    method public void sendCallEvent(String, android.os.Bundle);
+    method public void sendRttRequest();
+    method public void splitFromConference();
+    method public void stopDtmfTone();
+    method public void stopRtt();
+    method public void swapConference();
+    method public void unhold();
+    method public void unregisterCallback(android.telecom.Call.Callback);
+    field @Deprecated public static final String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts";
+    field public static final String EVENT_CLEAR_DIAGNOSTIC_MESSAGE = "android.telecom.event.CLEAR_DIAGNOSTIC_MESSAGE";
+    field public static final String EVENT_DISPLAY_DIAGNOSTIC_MESSAGE = "android.telecom.event.DISPLAY_DIAGNOSTIC_MESSAGE";
+    field public static final String EXTRA_DIAGNOSTIC_MESSAGE = "android.telecom.extra.DIAGNOSTIC_MESSAGE";
+    field public static final String EXTRA_DIAGNOSTIC_MESSAGE_ID = "android.telecom.extra.DIAGNOSTIC_MESSAGE_ID";
+    field public static final String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
+    field public static final String EXTRA_SILENT_RINGING_REQUESTED = "android.telecom.extra.SILENT_RINGING_REQUESTED";
+    field public static final String EXTRA_SUGGESTED_PHONE_ACCOUNTS = "android.telecom.extra.SUGGESTED_PHONE_ACCOUNTS";
+    field public static final int REJECT_REASON_DECLINED = 1; // 0x1
+    field public static final int REJECT_REASON_UNWANTED = 2; // 0x2
+    field public static final int STATE_ACTIVE = 4; // 0x4
+    field public static final int STATE_AUDIO_PROCESSING = 12; // 0xc
+    field public static final int STATE_CONNECTING = 9; // 0x9
+    field public static final int STATE_DIALING = 1; // 0x1
+    field public static final int STATE_DISCONNECTED = 7; // 0x7
+    field public static final int STATE_DISCONNECTING = 10; // 0xa
+    field public static final int STATE_HOLDING = 3; // 0x3
+    field public static final int STATE_NEW = 0; // 0x0
+    field public static final int STATE_PULLING_CALL = 11; // 0xb
+    field public static final int STATE_RINGING = 2; // 0x2
+    field public static final int STATE_SELECT_PHONE_ACCOUNT = 8; // 0x8
+    field public static final int STATE_SIMULATED_RINGING = 13; // 0xd
+  }
+
+  public abstract static class Call.Callback {
+    ctor public Call.Callback();
+    method public void onCallDestroyed(android.telecom.Call);
+    method public void onCannedTextResponsesLoaded(android.telecom.Call, java.util.List<java.lang.String>);
+    method public void onChildrenChanged(android.telecom.Call, java.util.List<android.telecom.Call>);
+    method public void onConferenceableCallsChanged(android.telecom.Call, java.util.List<android.telecom.Call>);
+    method public void onConnectionEvent(android.telecom.Call, String, android.os.Bundle);
+    method public void onDetailsChanged(android.telecom.Call, android.telecom.Call.Details);
+    method public void onHandoverComplete(android.telecom.Call);
+    method public void onHandoverFailed(android.telecom.Call, int);
+    method public void onParentChanged(android.telecom.Call, android.telecom.Call);
+    method public void onPostDialWait(android.telecom.Call, String);
+    method public void onRttInitiationFailure(android.telecom.Call, int);
+    method public void onRttModeChanged(android.telecom.Call, int);
+    method public void onRttRequest(android.telecom.Call, int);
+    method public void onRttStatusChanged(android.telecom.Call, boolean, android.telecom.Call.RttCall);
+    method public void onStateChanged(android.telecom.Call, int);
+    method public void onVideoCallChanged(android.telecom.Call, android.telecom.InCallService.VideoCall);
+    field public static final int HANDOVER_FAILURE_DEST_APP_REJECTED = 1; // 0x1
+    field public static final int HANDOVER_FAILURE_NOT_SUPPORTED = 2; // 0x2
+    field public static final int HANDOVER_FAILURE_ONGOING_EMERGENCY_CALL = 4; // 0x4
+    field public static final int HANDOVER_FAILURE_UNKNOWN = 5; // 0x5
+    field public static final int HANDOVER_FAILURE_USER_REJECTED = 3; // 0x3
+  }
+
+  public static class Call.Details {
+    method public static boolean can(int, int);
+    method public boolean can(int);
+    method public static String capabilitiesToString(int);
+    method public android.telecom.PhoneAccountHandle getAccountHandle();
+    method public int getCallCapabilities();
+    method public int getCallDirection();
+    method public int getCallProperties();
+    method public String getCallerDisplayName();
+    method public int getCallerDisplayNamePresentation();
+    method public int getCallerNumberVerificationStatus();
+    method public final long getConnectTimeMillis();
+    method @Nullable public String getContactDisplayName();
+    method public long getCreationTimeMillis();
+    method public android.telecom.DisconnectCause getDisconnectCause();
+    method public android.os.Bundle getExtras();
+    method public android.telecom.GatewayInfo getGatewayInfo();
+    method public android.net.Uri getHandle();
+    method public int getHandlePresentation();
+    method public android.os.Bundle getIntentExtras();
+    method public final int getState();
+    method public android.telecom.StatusHints getStatusHints();
+    method public int getVideoState();
+    method public static boolean hasProperty(int, int);
+    method public boolean hasProperty(int);
+    method public static String propertiesToString(int);
+    field public static final int CAPABILITY_ADD_PARTICIPANT = 33554432; // 0x2000000
+    field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 4194304; // 0x400000
+    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_PULL_CALL = 8388608; // 0x800000
+    field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
+    field public static final int CAPABILITY_HOLD = 1; // 0x1
+    field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
+    field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4
+    field public static final int CAPABILITY_MUTE = 64; // 0x40
+    field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
+    field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL = 3072; // 0xc00
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_RX = 1024; // 0x400
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
+    field public static final int CAPABILITY_SUPPORT_DEFLECT = 16777216; // 0x1000000
+    field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
+    field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
+    field public static final int DIRECTION_INCOMING = 0; // 0x0
+    field public static final int DIRECTION_OUTGOING = 1; // 0x1
+    field public static final int DIRECTION_UNKNOWN = -1; // 0xffffffff
+    field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
+    field public static final int PROPERTY_CONFERENCE = 1; // 0x1
+    field public static final int PROPERTY_CROSS_SIM = 16384; // 0x4000
+    field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4
+    field public static final int PROPERTY_ENTERPRISE_CALL = 32; // 0x20
+    field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
+    field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 128; // 0x80
+    field public static final int PROPERTY_HIGH_DEF_AUDIO = 16; // 0x10
+    field public static final int PROPERTY_IS_ADHOC_CONFERENCE = 8192; // 0x2000
+    field public static final int PROPERTY_IS_EXTERNAL_CALL = 64; // 0x40
+    field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 2048; // 0x800
+    field public static final int PROPERTY_RTT = 1024; // 0x400
+    field public static final int PROPERTY_SELF_MANAGED = 256; // 0x100
+    field public static final int PROPERTY_VOIP_AUDIO_MODE = 4096; // 0x1000
+    field public static final int PROPERTY_WIFI = 8; // 0x8
+  }
+
+  public static final class Call.RttCall {
+    method public int getRttAudioMode();
+    method public String read();
+    method public String readImmediately() throws java.io.IOException;
+    method public void setRttMode(int);
+    method public void write(String) throws java.io.IOException;
+    field public static final int RTT_MODE_FULL = 1; // 0x1
+    field public static final int RTT_MODE_HCO = 2; // 0x2
+    field public static final int RTT_MODE_VCO = 3; // 0x3
+  }
+
+  public final class CallAudioState implements android.os.Parcelable {
+    ctor public CallAudioState(boolean, int, int);
+    method public static String audioRouteToString(int);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothDevice getActiveBluetoothDevice();
+    method public int getRoute();
+    method public java.util.Collection<android.bluetooth.BluetoothDevice> getSupportedBluetoothDevices();
+    method public int getSupportedRouteMask();
+    method public boolean isMuted();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.CallAudioState> CREATOR;
+    field public static final int ROUTE_BLUETOOTH = 2; // 0x2
+    field public static final int ROUTE_EARPIECE = 1; // 0x1
+    field public static final int ROUTE_SPEAKER = 8; // 0x8
+    field public static final int ROUTE_WIRED_HEADSET = 4; // 0x4
+    field public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5
+  }
+
+  public abstract class CallRedirectionService extends android.app.Service {
+    ctor public CallRedirectionService();
+    method public final void cancelCall();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onPlaceCall(@NonNull android.net.Uri, @NonNull android.telecom.PhoneAccountHandle, boolean);
+    method public final boolean onUnbind(@NonNull android.content.Intent);
+    method public final void placeCallUnmodified();
+    method public final void redirectCall(@NonNull android.net.Uri, @NonNull android.telecom.PhoneAccountHandle, boolean);
+    field public static final String SERVICE_INTERFACE = "android.telecom.CallRedirectionService";
+  }
+
+  public abstract class CallScreeningService extends android.app.Service {
+    ctor public CallScreeningService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onScreenCall(@NonNull android.telecom.Call.Details);
+    method public final void respondToCall(@NonNull android.telecom.Call.Details, @NonNull android.telecom.CallScreeningService.CallResponse);
+    field public static final String SERVICE_INTERFACE = "android.telecom.CallScreeningService";
+  }
+
+  public static class CallScreeningService.CallResponse {
+    method public int getCallComposerAttachmentsToShow();
+    method public boolean getDisallowCall();
+    method public boolean getRejectCall();
+    method public boolean getSilenceCall();
+    method public boolean getSkipCallLog();
+    method public boolean getSkipNotification();
+    field public static final int CALL_COMPOSER_ATTACHMENT_LOCATION = 2; // 0x2
+    field public static final int CALL_COMPOSER_ATTACHMENT_PICTURE = 1; // 0x1
+    field public static final int CALL_COMPOSER_ATTACHMENT_PRIORITY = 8; // 0x8
+    field public static final int CALL_COMPOSER_ATTACHMENT_SUBJECT = 4; // 0x4
+  }
+
+  public static class CallScreeningService.CallResponse.Builder {
+    ctor public CallScreeningService.CallResponse.Builder();
+    method public android.telecom.CallScreeningService.CallResponse build();
+    method @NonNull public android.telecom.CallScreeningService.CallResponse.Builder setCallComposerAttachmentsToShow(int);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setDisallowCall(boolean);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setRejectCall(boolean);
+    method @NonNull public android.telecom.CallScreeningService.CallResponse.Builder setSilenceCall(boolean);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setSkipCallLog(boolean);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setSkipNotification(boolean);
+  }
+
+  public abstract class Conference extends android.telecom.Conferenceable {
+    ctor public Conference(android.telecom.PhoneAccountHandle);
+    method public final boolean addConnection(android.telecom.Connection);
+    method @NonNull public static android.telecom.Conference createFailedConference(@NonNull android.telecom.DisconnectCause, @NonNull android.telecom.PhoneAccountHandle);
+    method public final void destroy();
+    method public final android.telecom.CallAudioState getCallAudioState();
+    method public final java.util.List<android.telecom.Connection> getConferenceableConnections();
+    method public final int getConnectionCapabilities();
+    method public final int getConnectionProperties();
+    method public final long getConnectionStartElapsedRealtimeMillis();
+    method @IntRange(from=0) public final long getConnectionTime();
+    method public final java.util.List<android.telecom.Connection> getConnections();
+    method public final android.telecom.DisconnectCause getDisconnectCause();
+    method public final android.os.Bundle getExtras();
+    method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method public final int getState();
+    method public final android.telecom.StatusHints getStatusHints();
+    method public android.telecom.Connection.VideoProvider getVideoProvider();
+    method public int getVideoState();
+    method public final boolean isRingbackRequested();
+    method public void onAddConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void onAnswer(int);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
+    method public void onConnectionAdded(android.telecom.Connection);
+    method public void onDisconnect();
+    method public void onExtrasChanged(android.os.Bundle);
+    method public void onHold();
+    method public void onMerge(android.telecom.Connection);
+    method public void onMerge();
+    method public void onPlayDtmfTone(char);
+    method public void onReject();
+    method public void onSeparate(android.telecom.Connection);
+    method public void onStopDtmfTone();
+    method public void onSwap();
+    method public void onUnhold();
+    method public final void putExtras(@NonNull android.os.Bundle);
+    method public final void removeConnection(android.telecom.Connection);
+    method public final void removeExtras(java.util.List<java.lang.String>);
+    method public final void removeExtras(java.lang.String...);
+    method public void sendConferenceEvent(@NonNull String, @Nullable android.os.Bundle);
+    method public final void setActive();
+    method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
+    method public final void setConnectionCapabilities(int);
+    method public final void setConnectionProperties(int);
+    method @Deprecated public final void setConnectionStartElapsedRealTime(long);
+    method public final void setConnectionStartElapsedRealtimeMillis(long);
+    method public final void setConnectionTime(@IntRange(from=0) long);
+    method public final void setDialing();
+    method public final void setDisconnected(android.telecom.DisconnectCause);
+    method public final void setExtras(@Nullable android.os.Bundle);
+    method public final void setOnHold();
+    method public final void setRingbackRequested(boolean);
+    method public final void setRinging();
+    method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(android.telecom.Connection, int);
+    field public static final long CONNECT_TIME_NOT_SPECIFIED = 0L; // 0x0L
+  }
+
+  public abstract class Conferenceable {
+  }
+
+  public abstract class Connection extends android.telecom.Conferenceable {
+    ctor public Connection();
+    method public static String capabilitiesToString(int);
+    method public static android.telecom.Connection createCanceledConnection();
+    method public static android.telecom.Connection createFailedConnection(android.telecom.DisconnectCause);
+    method public final void destroy();
+    method public final android.net.Uri getAddress();
+    method public final int getAddressPresentation();
+    method public final boolean getAudioModeIsVoip();
+    method public final android.telecom.CallAudioState getCallAudioState();
+    method public final String getCallerDisplayName();
+    method public final int getCallerDisplayNamePresentation();
+    method public final int getCallerNumberVerificationStatus();
+    method public final android.telecom.Conference getConference();
+    method public final java.util.List<android.telecom.Conferenceable> getConferenceables();
+    method public final int getConnectionCapabilities();
+    method public final int getConnectionProperties();
+    method public final android.telecom.DisconnectCause getDisconnectCause();
+    method public final android.os.Bundle getExtras();
+    method public final int getState();
+    method public final android.telecom.StatusHints getStatusHints();
+    method public final android.telecom.Connection.VideoProvider getVideoProvider();
+    method public final int getVideoState();
+    method public void handleRttUpgradeResponse(@Nullable android.telecom.Connection.RttTextStream);
+    method public final boolean isRingbackRequested();
+    method public final void notifyConferenceMergeFailed();
+    method public void onAbort();
+    method public void onAddConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void onAnswer(int);
+    method public void onAnswer();
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
+    method public void onCallEvent(String, android.os.Bundle);
+    method public void onDeflect(android.net.Uri);
+    method public void onDisconnect();
+    method public void onExtrasChanged(android.os.Bundle);
+    method public void onHandoverComplete();
+    method public void onHold();
+    method public void onPlayDtmfTone(char);
+    method public void onPostDialContinue(boolean);
+    method public void onPullExternalCall();
+    method public void onReject();
+    method public void onReject(int);
+    method public void onReject(String);
+    method public void onSeparate();
+    method public void onShowIncomingCallUi();
+    method public void onSilence();
+    method public void onStartRtt(@NonNull android.telecom.Connection.RttTextStream);
+    method public void onStateChanged(int);
+    method public void onStopDtmfTone();
+    method public void onStopRtt();
+    method public void onTrackedByNonUiService(boolean);
+    method public void onUnhold();
+    method public void onUsingAlternativeUi(boolean);
+    method public static String propertiesToString(int);
+    method public final void putExtras(@NonNull android.os.Bundle);
+    method public final void removeExtras(java.util.List<java.lang.String>);
+    method public final void removeExtras(java.lang.String...);
+    method public void requestBluetoothAudio(@NonNull android.bluetooth.BluetoothDevice);
+    method public void sendConnectionEvent(String, android.os.Bundle);
+    method public final void sendRemoteRttRequest();
+    method public final void sendRttInitiationFailure(int);
+    method public final void sendRttInitiationSuccess();
+    method public final void sendRttSessionRemotelyTerminated();
+    method public final void setActive();
+    method public final void setAddress(android.net.Uri, int);
+    method public final void setAudioModeIsVoip(boolean);
+    method public final void setAudioRoute(int);
+    method public final void setCallerDisplayName(String, int);
+    method public final void setCallerNumberVerificationStatus(int);
+    method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
+    method public final void setConferenceables(java.util.List<android.telecom.Conferenceable>);
+    method public final void setConnectionCapabilities(int);
+    method public final void setConnectionProperties(int);
+    method public final void setDialing();
+    method public final void setDisconnected(android.telecom.DisconnectCause);
+    method public final void setExtras(@Nullable android.os.Bundle);
+    method public final void setInitialized();
+    method public final void setInitializing();
+    method public final void setNextPostDialChar(char);
+    method public final void setOnHold();
+    method public final void setPostDialWait(String);
+    method public final void setPulling();
+    method public final void setRingbackRequested(boolean);
+    method public final void setRinging();
+    method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(int);
+    method public static String stateToString(int);
+    field public static final int AUDIO_CODEC_AMR = 1; // 0x1
+    field public static final int AUDIO_CODEC_AMR_WB = 2; // 0x2
+    field public static final int AUDIO_CODEC_EVRC = 4; // 0x4
+    field public static final int AUDIO_CODEC_EVRC_B = 5; // 0x5
+    field public static final int AUDIO_CODEC_EVRC_NW = 7; // 0x7
+    field public static final int AUDIO_CODEC_EVRC_WB = 6; // 0x6
+    field public static final int AUDIO_CODEC_EVS_FB = 20; // 0x14
+    field public static final int AUDIO_CODEC_EVS_NB = 17; // 0x11
+    field public static final int AUDIO_CODEC_EVS_SWB = 19; // 0x13
+    field public static final int AUDIO_CODEC_EVS_WB = 18; // 0x12
+    field public static final int AUDIO_CODEC_G711A = 13; // 0xd
+    field public static final int AUDIO_CODEC_G711AB = 15; // 0xf
+    field public static final int AUDIO_CODEC_G711U = 11; // 0xb
+    field public static final int AUDIO_CODEC_G722 = 14; // 0xe
+    field public static final int AUDIO_CODEC_G723 = 12; // 0xc
+    field public static final int AUDIO_CODEC_G729 = 16; // 0x10
+    field public static final int AUDIO_CODEC_GSM_EFR = 8; // 0x8
+    field public static final int AUDIO_CODEC_GSM_FR = 9; // 0x9
+    field public static final int AUDIO_CODEC_GSM_HR = 10; // 0xa
+    field public static final int AUDIO_CODEC_NONE = 0; // 0x0
+    field public static final int AUDIO_CODEC_QCELP13K = 3; // 0x3
+    field public static final int CAPABILITY_ADD_PARTICIPANT = 67108864; // 0x4000000
+    field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 8388608; // 0x800000
+    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_PULL_CALL = 16777216; // 0x1000000
+    field public static final int CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION = 4194304; // 0x400000
+    field @Deprecated public static final int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 524288; // 0x80000
+    field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
+    field public static final int CAPABILITY_HOLD = 1; // 0x1
+    field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
+    field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4
+    field public static final int CAPABILITY_MUTE = 64; // 0x40
+    field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
+    field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL = 3072; // 0xc00
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_RX = 1024; // 0x400
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
+    field public static final int CAPABILITY_SUPPORT_DEFLECT = 33554432; // 0x2000000
+    field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
+    field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
+    field public static final String EVENT_CALL_HOLD_FAILED = "android.telecom.event.CALL_HOLD_FAILED";
+    field public static final String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";
+    field public static final String EVENT_CALL_PULL_FAILED = "android.telecom.event.CALL_PULL_FAILED";
+    field public static final String EVENT_CALL_REMOTELY_HELD = "android.telecom.event.CALL_REMOTELY_HELD";
+    field public static final String EVENT_CALL_REMOTELY_UNHELD = "android.telecom.event.CALL_REMOTELY_UNHELD";
+    field public static final String EVENT_CALL_SWITCH_FAILED = "android.telecom.event.CALL_SWITCH_FAILED";
+    field public static final String EVENT_MERGE_COMPLETE = "android.telecom.event.MERGE_COMPLETE";
+    field public static final String EVENT_MERGE_START = "android.telecom.event.MERGE_START";
+    field public static final String EVENT_ON_HOLD_TONE_END = "android.telecom.event.ON_HOLD_TONE_END";
+    field public static final String EVENT_ON_HOLD_TONE_START = "android.telecom.event.ON_HOLD_TONE_START";
+    field public static final String EVENT_RTT_AUDIO_INDICATION_CHANGED = "android.telecom.event.RTT_AUDIO_INDICATION_CHANGED";
+    field public static final String EXTRA_ANSWERING_DROPS_FG_CALL = "android.telecom.extra.ANSWERING_DROPS_FG_CALL";
+    field public static final String EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME = "android.telecom.extra.ANSWERING_DROPS_FG_CALL_APP_NAME";
+    field public static final String EXTRA_AUDIO_CODEC = "android.telecom.extra.AUDIO_CODEC";
+    field public static final String EXTRA_AUDIO_CODEC_BANDWIDTH_KHZ = "android.telecom.extra.AUDIO_CODEC_BANDWIDTH_KHZ";
+    field public static final String EXTRA_AUDIO_CODEC_BITRATE_KBPS = "android.telecom.extra.AUDIO_CODEC_BITRATE_KBPS";
+    field public static final String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
+    field public static final String EXTRA_CHILD_ADDRESS = "android.telecom.extra.CHILD_ADDRESS";
+    field public static final String EXTRA_IS_RTT_AUDIO_PRESENT = "android.telecom.extra.IS_RTT_AUDIO_PRESENT";
+    field public static final String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
+    field public static final String EXTRA_SIP_INVITE = "android.telecom.extra.SIP_INVITE";
+    field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
+    field public static final int PROPERTY_CROSS_SIM = 8192; // 0x2000
+    field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 32; // 0x20
+    field public static final int PROPERTY_HIGH_DEF_AUDIO = 4; // 0x4
+    field public static final int PROPERTY_IS_ADHOC_CONFERENCE = 4096; // 0x1000
+    field public static final int PROPERTY_IS_EXTERNAL_CALL = 16; // 0x10
+    field public static final int PROPERTY_IS_RTT = 256; // 0x100
+    field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 1024; // 0x400
+    field public static final int PROPERTY_SELF_MANAGED = 128; // 0x80
+    field public static final int PROPERTY_WIFI = 8; // 0x8
+    field public static final int STATE_ACTIVE = 4; // 0x4
+    field public static final int STATE_DIALING = 3; // 0x3
+    field public static final int STATE_DISCONNECTED = 6; // 0x6
+    field public static final int STATE_HOLDING = 5; // 0x5
+    field public static final int STATE_INITIALIZING = 0; // 0x0
+    field public static final int STATE_NEW = 1; // 0x1
+    field public static final int STATE_PULLING_CALL = 7; // 0x7
+    field public static final int STATE_RINGING = 2; // 0x2
+    field public static final int VERIFICATION_STATUS_FAILED = 2; // 0x2
+    field public static final int VERIFICATION_STATUS_NOT_VERIFIED = 0; // 0x0
+    field public static final int VERIFICATION_STATUS_PASSED = 1; // 0x1
+  }
+
+  public static final class Connection.RttModifyStatus {
+    field public static final int SESSION_MODIFY_REQUEST_FAIL = 2; // 0x2
+    field public static final int SESSION_MODIFY_REQUEST_INVALID = 3; // 0x3
+    field public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE = 5; // 0x5
+    field public static final int SESSION_MODIFY_REQUEST_SUCCESS = 1; // 0x1
+    field public static final int SESSION_MODIFY_REQUEST_TIMED_OUT = 4; // 0x4
+  }
+
+  public static final class Connection.RttTextStream {
+    method public String read() throws java.io.IOException;
+    method public String readImmediately() throws java.io.IOException;
+    method public void write(String) throws java.io.IOException;
+  }
+
+  public abstract static class Connection.VideoProvider {
+    ctor public Connection.VideoProvider();
+    method public void changeCameraCapabilities(android.telecom.VideoProfile.CameraCapabilities);
+    method public void changePeerDimensions(int, int);
+    method public void changeVideoQuality(int);
+    method public void handleCallSessionEvent(int);
+    method public abstract void onRequestCameraCapabilities();
+    method public abstract void onRequestConnectionDataUsage();
+    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
+    method public abstract void onSetCamera(String);
+    method public abstract void onSetDeviceOrientation(int);
+    method public abstract void onSetDisplaySurface(android.view.Surface);
+    method public abstract void onSetPauseImage(android.net.Uri);
+    method public abstract void onSetPreviewSurface(android.view.Surface);
+    method public abstract void onSetZoom(float);
+    method public void receiveSessionModifyRequest(android.telecom.VideoProfile);
+    method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public void setCallDataUsage(long);
+    field public static final int SESSION_EVENT_CAMERA_FAILURE = 5; // 0x5
+    field public static final int SESSION_EVENT_CAMERA_PERMISSION_ERROR = 7; // 0x7
+    field public static final int SESSION_EVENT_CAMERA_READY = 6; // 0x6
+    field public static final int SESSION_EVENT_RX_PAUSE = 1; // 0x1
+    field public static final int SESSION_EVENT_RX_RESUME = 2; // 0x2
+    field public static final int SESSION_EVENT_TX_START = 3; // 0x3
+    field public static final int SESSION_EVENT_TX_STOP = 4; // 0x4
+    field public static final int SESSION_MODIFY_REQUEST_FAIL = 2; // 0x2
+    field public static final int SESSION_MODIFY_REQUEST_INVALID = 3; // 0x3
+    field public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE = 5; // 0x5
+    field public static final int SESSION_MODIFY_REQUEST_SUCCESS = 1; // 0x1
+    field public static final int SESSION_MODIFY_REQUEST_TIMED_OUT = 4; // 0x4
+  }
+
+  public final class ConnectionRequest implements android.os.Parcelable {
+    ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle);
+    ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle, int);
+    method public int describeContents();
+    method public android.telecom.PhoneAccountHandle getAccountHandle();
+    method public android.net.Uri getAddress();
+    method public android.os.Bundle getExtras();
+    method @Nullable public java.util.List<android.net.Uri> getParticipants();
+    method public android.telecom.Connection.RttTextStream getRttTextStream();
+    method public int getVideoState();
+    method public boolean isAdhocConferenceCall();
+    method public boolean isRequestingRtt();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ConnectionRequest> CREATOR;
+  }
+
+  public abstract class ConnectionService extends android.app.Service {
+    ctor public ConnectionService();
+    method public final void addConference(android.telecom.Conference);
+    method public final void addExistingConnection(android.telecom.PhoneAccountHandle, android.telecom.Connection);
+    method public final void conferenceRemoteConnections(android.telecom.RemoteConnection, android.telecom.RemoteConnection);
+    method public final void connectionServiceFocusReleased();
+    method @Nullable public final android.telecom.RemoteConference createRemoteIncomingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
+    method @Nullable public final android.telecom.RemoteConnection createRemoteIncomingConnection(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method @Nullable public final android.telecom.RemoteConference createRemoteOutgoingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
+    method @Nullable public final android.telecom.RemoteConnection createRemoteOutgoingConnection(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public final java.util.Collection<android.telecom.Conference> getAllConferences();
+    method public final java.util.Collection<android.telecom.Connection> getAllConnections();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public void onConference(android.telecom.Connection, android.telecom.Connection);
+    method public void onConnectionServiceFocusGained();
+    method public void onConnectionServiceFocusLost();
+    method @Nullable public android.telecom.Conference onCreateIncomingConference(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public void onCreateIncomingConferenceFailed(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public void onCreateIncomingConnectionFailed(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateIncomingHandoverConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method @Nullable public android.telecom.Conference onCreateOutgoingConference(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public void onCreateOutgoingConferenceFailed(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public void onCreateOutgoingConnectionFailed(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateOutgoingHandoverConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public void onHandoverFailed(android.telecom.ConnectionRequest, int);
+    method public void onRemoteConferenceAdded(android.telecom.RemoteConference);
+    method public void onRemoteExistingConnectionAdded(android.telecom.RemoteConnection);
+    field public static final String SERVICE_INTERFACE = "android.telecom.ConnectionService";
+  }
+
+  public final class DisconnectCause implements android.os.Parcelable {
+    ctor public DisconnectCause(int);
+    ctor public DisconnectCause(int, String);
+    ctor public DisconnectCause(int, CharSequence, CharSequence, String);
+    ctor public DisconnectCause(int, CharSequence, CharSequence, String, int);
+    method public int describeContents();
+    method public int getCode();
+    method public CharSequence getDescription();
+    method public CharSequence getLabel();
+    method public String getReason();
+    method public int getTone();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ANSWERED_ELSEWHERE = 11; // 0xb
+    field public static final int BUSY = 7; // 0x7
+    field public static final int CALL_PULLED = 12; // 0xc
+    field public static final int CANCELED = 4; // 0x4
+    field public static final int CONNECTION_MANAGER_NOT_SUPPORTED = 10; // 0xa
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.DisconnectCause> CREATOR;
+    field public static final int ERROR = 1; // 0x1
+    field public static final int LOCAL = 2; // 0x2
+    field public static final int MISSED = 5; // 0x5
+    field public static final int OTHER = 9; // 0x9
+    field public static final String REASON_EMERGENCY_CALL_PLACED = "REASON_EMERGENCY_CALL_PLACED";
+    field public static final String REASON_EMULATING_SINGLE_CALL = "EMULATING_SINGLE_CALL";
+    field public static final String REASON_IMS_ACCESS_BLOCKED = "REASON_IMS_ACCESS_BLOCKED";
+    field public static final String REASON_WIFI_ON_BUT_WFC_OFF = "REASON_WIFI_ON_BUT_WFC_OFF";
+    field public static final int REJECTED = 6; // 0x6
+    field public static final int REMOTE = 3; // 0x3
+    field public static final int RESTRICTED = 8; // 0x8
+    field public static final int UNKNOWN = 0; // 0x0
+  }
+
+  public class GatewayInfo implements android.os.Parcelable {
+    ctor public GatewayInfo(String, android.net.Uri, android.net.Uri);
+    method public int describeContents();
+    method public android.net.Uri getGatewayAddress();
+    method public String getGatewayProviderPackageName();
+    method public android.net.Uri getOriginalAddress();
+    method public boolean isEmpty();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.GatewayInfo> CREATOR;
+  }
+
+  public abstract class InCallService extends android.app.Service {
+    ctor public InCallService();
+    method public final boolean canAddCall();
+    method public final android.telecom.CallAudioState getCallAudioState();
+    method public final java.util.List<android.telecom.Call> getCalls();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onBringToForeground(boolean);
+    method public void onCallAdded(android.telecom.Call);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
+    method public void onCallRemoved(android.telecom.Call);
+    method public void onCanAddCallChanged(boolean);
+    method public void onConnectionEvent(android.telecom.Call, String, android.os.Bundle);
+    method public void onSilenceRinger();
+    method public final void requestBluetoothAudio(@NonNull android.bluetooth.BluetoothDevice);
+    method public final void setAudioRoute(int);
+    method public final void setMuted(boolean);
+    field public static final String SERVICE_INTERFACE = "android.telecom.InCallService";
+  }
+
+  public abstract static class InCallService.VideoCall {
+    ctor public InCallService.VideoCall();
+    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
+    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback, android.os.Handler);
+    method public abstract void requestCallDataUsage();
+    method public abstract void requestCameraCapabilities();
+    method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
+    method public abstract void sendSessionModifyResponse(android.telecom.VideoProfile);
+    method public abstract void setCamera(String);
+    method public abstract void setDeviceOrientation(int);
+    method public abstract void setDisplaySurface(android.view.Surface);
+    method public abstract void setPauseImage(android.net.Uri);
+    method public abstract void setPreviewSurface(android.view.Surface);
+    method public abstract void setZoom(float);
+    method public abstract void unregisterCallback(android.telecom.InCallService.VideoCall.Callback);
+  }
+
+  public abstract static class InCallService.VideoCall.Callback {
+    ctor public InCallService.VideoCall.Callback();
+    method public abstract void onCallDataUsageChanged(long);
+    method public abstract void onCallSessionEvent(int);
+    method public abstract void onCameraCapabilitiesChanged(android.telecom.VideoProfile.CameraCapabilities);
+    method public abstract void onPeerDimensionsChanged(int, int);
+    method public abstract void onSessionModifyRequestReceived(android.telecom.VideoProfile);
+    method public abstract void onSessionModifyResponseReceived(int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public abstract void onVideoQualityChanged(int);
+  }
+
+  public final class PhoneAccount implements android.os.Parcelable {
+    method public static android.telecom.PhoneAccount.Builder builder(android.telecom.PhoneAccountHandle, CharSequence);
+    method public int describeContents();
+    method public android.telecom.PhoneAccountHandle getAccountHandle();
+    method public android.net.Uri getAddress();
+    method public int getCapabilities();
+    method public android.os.Bundle getExtras();
+    method public int getHighlightColor();
+    method public android.graphics.drawable.Icon getIcon();
+    method public CharSequence getLabel();
+    method public CharSequence getShortDescription();
+    method public android.net.Uri getSubscriptionAddress();
+    method public java.util.List<java.lang.String> getSupportedUriSchemes();
+    method public boolean hasCapabilities(int);
+    method public boolean isEnabled();
+    method public boolean supportsUriScheme(String);
+    method public android.telecom.PhoneAccount.Builder toBuilder();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CAPABILITY_ADHOC_CONFERENCE_CALLING = 16384; // 0x4000
+    field public static final int CAPABILITY_CALL_COMPOSER = 32768; // 0x8000
+    field public static final int CAPABILITY_CALL_PROVIDER = 2; // 0x2
+    field public static final int CAPABILITY_CALL_SUBJECT = 64; // 0x40
+    field public static final int CAPABILITY_CONNECTION_MANAGER = 1; // 0x1
+    field public static final int CAPABILITY_PLACE_EMERGENCY_CALLS = 16; // 0x10
+    field public static final int CAPABILITY_RTT = 4096; // 0x1000
+    field public static final int CAPABILITY_SELF_MANAGED = 2048; // 0x800
+    field public static final int CAPABILITY_SIM_SUBSCRIPTION = 4; // 0x4
+    field public static final int CAPABILITY_SUPPORTS_VIDEO_CALLING = 1024; // 0x400
+    field public static final int CAPABILITY_VIDEO_CALLING = 8; // 0x8
+    field public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE = 256; // 0x100
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccount> CREATOR;
+    field public static final String EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE = "android.telecom.extra.ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE";
+    field public static final String EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE = "android.telecom.extra.ALWAYS_USE_VOIP_AUDIO_MODE";
+    field public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING = "android.telecom.extra.CALL_SUBJECT_CHARACTER_ENCODING";
+    field public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH = "android.telecom.extra.CALL_SUBJECT_MAX_LENGTH";
+    field public static final String EXTRA_LOG_SELF_MANAGED_CALLS = "android.telecom.extra.LOG_SELF_MANAGED_CALLS";
+    field public static final String EXTRA_SUPPORTS_HANDOVER_FROM = "android.telecom.extra.SUPPORTS_HANDOVER_FROM";
+    field public static final String EXTRA_SUPPORTS_HANDOVER_TO = "android.telecom.extra.SUPPORTS_HANDOVER_TO";
+    field public static final int NO_HIGHLIGHT_COLOR = 0; // 0x0
+    field public static final int NO_RESOURCE_ID = -1; // 0xffffffff
+    field public static final String SCHEME_SIP = "sip";
+    field public static final String SCHEME_TEL = "tel";
+    field public static final String SCHEME_VOICEMAIL = "voicemail";
+  }
+
+  public static class PhoneAccount.Builder {
+    ctor public PhoneAccount.Builder(android.telecom.PhoneAccountHandle, CharSequence);
+    ctor public PhoneAccount.Builder(android.telecom.PhoneAccount);
+    method public android.telecom.PhoneAccount.Builder addSupportedUriScheme(String);
+    method public android.telecom.PhoneAccount build();
+    method public android.telecom.PhoneAccount.Builder setAddress(android.net.Uri);
+    method public android.telecom.PhoneAccount.Builder setCapabilities(int);
+    method public android.telecom.PhoneAccount.Builder setExtras(android.os.Bundle);
+    method public android.telecom.PhoneAccount.Builder setHighlightColor(int);
+    method public android.telecom.PhoneAccount.Builder setIcon(android.graphics.drawable.Icon);
+    method public android.telecom.PhoneAccount.Builder setShortDescription(CharSequence);
+    method public android.telecom.PhoneAccount.Builder setSubscriptionAddress(android.net.Uri);
+    method public android.telecom.PhoneAccount.Builder setSupportedUriSchemes(java.util.List<java.lang.String>);
+  }
+
+  public final class PhoneAccountHandle implements android.os.Parcelable {
+    ctor public PhoneAccountHandle(@NonNull android.content.ComponentName, @NonNull String);
+    ctor public PhoneAccountHandle(@NonNull android.content.ComponentName, @NonNull String, @NonNull android.os.UserHandle);
+    method public int describeContents();
+    method public android.content.ComponentName getComponentName();
+    method public String getId();
+    method public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccountHandle> CREATOR;
+  }
+
+  public final class PhoneAccountSuggestion implements android.os.Parcelable {
+    ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean);
+    method public int describeContents();
+    method @NonNull public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method public int getReason();
+    method public boolean shouldAutoSelect();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccountSuggestion> CREATOR;
+    field public static final int REASON_FREQUENT = 2; // 0x2
+    field public static final int REASON_INTRA_CARRIER = 1; // 0x1
+    field public static final int REASON_NONE = 0; // 0x0
+    field public static final int REASON_OTHER = 4; // 0x4
+    field public static final int REASON_USER_SET = 3; // 0x3
+  }
+
+  public final class RemoteConference {
+    method public void disconnect();
+    method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections();
+    method public int getConnectionCapabilities();
+    method public int getConnectionProperties();
+    method public java.util.List<android.telecom.RemoteConnection> getConnections();
+    method public android.telecom.DisconnectCause getDisconnectCause();
+    method public android.os.Bundle getExtras();
+    method public int getState();
+    method public void hold();
+    method public void merge();
+    method public void playDtmfTone(char);
+    method public void registerCallback(android.telecom.RemoteConference.Callback);
+    method public void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
+    method public void separate(android.telecom.RemoteConnection);
+    method public void setCallAudioState(android.telecom.CallAudioState);
+    method public void stopDtmfTone();
+    method public void swap();
+    method public void unhold();
+    method public void unregisterCallback(android.telecom.RemoteConference.Callback);
+  }
+
+  public abstract static class RemoteConference.Callback {
+    ctor public RemoteConference.Callback();
+    method public void onConferenceableConnectionsChanged(android.telecom.RemoteConference, java.util.List<android.telecom.RemoteConnection>);
+    method public void onConnectionAdded(android.telecom.RemoteConference, android.telecom.RemoteConnection);
+    method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConference, int);
+    method public void onConnectionPropertiesChanged(android.telecom.RemoteConference, int);
+    method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection);
+    method public void onDestroyed(android.telecom.RemoteConference);
+    method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause);
+    method public void onExtrasChanged(android.telecom.RemoteConference, @Nullable android.os.Bundle);
+    method public void onStateChanged(android.telecom.RemoteConference, int, int);
+  }
+
+  public final class RemoteConnection {
+    method public void abort();
+    method public void addConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void answer();
+    method public void disconnect();
+    method public android.net.Uri getAddress();
+    method public int getAddressPresentation();
+    method public CharSequence getCallerDisplayName();
+    method public int getCallerDisplayNamePresentation();
+    method public android.telecom.RemoteConference getConference();
+    method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections();
+    method public int getConnectionCapabilities();
+    method public int getConnectionProperties();
+    method public android.telecom.DisconnectCause getDisconnectCause();
+    method public android.os.Bundle getExtras();
+    method public int getState();
+    method public android.telecom.StatusHints getStatusHints();
+    method public android.telecom.RemoteConnection.VideoProvider getVideoProvider();
+    method public int getVideoState();
+    method public void hold();
+    method public boolean isRingbackRequested();
+    method public boolean isVoipAudioMode();
+    method public void playDtmfTone(char);
+    method public void postDialContinue(boolean);
+    method public void pullExternalCall();
+    method public void registerCallback(android.telecom.RemoteConnection.Callback);
+    method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
+    method public void reject();
+    method public void setCallAudioState(android.telecom.CallAudioState);
+    method public void stopDtmfTone();
+    method public void unhold();
+    method public void unregisterCallback(android.telecom.RemoteConnection.Callback);
+  }
+
+  public abstract static class RemoteConnection.Callback {
+    ctor public RemoteConnection.Callback();
+    method public void onAddressChanged(android.telecom.RemoteConnection, android.net.Uri, int);
+    method public void onCallerDisplayNameChanged(android.telecom.RemoteConnection, String, int);
+    method public void onConferenceChanged(android.telecom.RemoteConnection, android.telecom.RemoteConference);
+    method public void onConferenceableConnectionsChanged(android.telecom.RemoteConnection, java.util.List<android.telecom.RemoteConnection>);
+    method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int);
+    method public void onConnectionEvent(android.telecom.RemoteConnection, String, android.os.Bundle);
+    method public void onConnectionPropertiesChanged(android.telecom.RemoteConnection, int);
+    method public void onDestroyed(android.telecom.RemoteConnection);
+    method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause);
+    method public void onExtrasChanged(android.telecom.RemoteConnection, @Nullable android.os.Bundle);
+    method public void onPostDialChar(android.telecom.RemoteConnection, char);
+    method public void onPostDialWait(android.telecom.RemoteConnection, String);
+    method public void onRingbackRequested(android.telecom.RemoteConnection, boolean);
+    method public void onStateChanged(android.telecom.RemoteConnection, int);
+    method public void onStatusHintsChanged(android.telecom.RemoteConnection, android.telecom.StatusHints);
+    method public void onVideoProviderChanged(android.telecom.RemoteConnection, android.telecom.RemoteConnection.VideoProvider);
+    method public void onVideoStateChanged(android.telecom.RemoteConnection, int);
+    method public void onVoipAudioChanged(android.telecom.RemoteConnection, boolean);
+  }
+
+  public static class RemoteConnection.VideoProvider {
+    method public void registerCallback(android.telecom.RemoteConnection.VideoProvider.Callback);
+    method public void requestCallDataUsage();
+    method public void requestCameraCapabilities();
+    method public void sendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public void sendSessionModifyResponse(android.telecom.VideoProfile);
+    method public void setCamera(String);
+    method public void setDeviceOrientation(int);
+    method public void setDisplaySurface(android.view.Surface);
+    method public void setPauseImage(android.net.Uri);
+    method public void setPreviewSurface(android.view.Surface);
+    method public void setZoom(float);
+    method public void unregisterCallback(android.telecom.RemoteConnection.VideoProvider.Callback);
+  }
+
+  public abstract static class RemoteConnection.VideoProvider.Callback {
+    ctor public RemoteConnection.VideoProvider.Callback();
+    method public void onCallDataUsageChanged(android.telecom.RemoteConnection.VideoProvider, long);
+    method public void onCallSessionEvent(android.telecom.RemoteConnection.VideoProvider, int);
+    method public void onCameraCapabilitiesChanged(android.telecom.RemoteConnection.VideoProvider, android.telecom.VideoProfile.CameraCapabilities);
+    method public void onPeerDimensionsChanged(android.telecom.RemoteConnection.VideoProvider, int, int);
+    method public void onSessionModifyRequestReceived(android.telecom.RemoteConnection.VideoProvider, android.telecom.VideoProfile);
+    method public void onSessionModifyResponseReceived(android.telecom.RemoteConnection.VideoProvider, int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public void onVideoQualityChanged(android.telecom.RemoteConnection.VideoProvider, int);
+  }
+
+  public final class StatusHints implements android.os.Parcelable {
+    ctor public StatusHints(CharSequence, android.graphics.drawable.Icon, android.os.Bundle);
+    method public int describeContents();
+    method public android.os.Bundle getExtras();
+    method public android.graphics.drawable.Icon getIcon();
+    method public CharSequence getLabel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.StatusHints> CREATOR;
+  }
+
+  public class TelecomManager {
+    method public void acceptHandover(android.net.Uri, int, android.telecom.PhoneAccountHandle);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ANSWER_PHONE_CALLS, android.Manifest.permission.MODIFY_PHONE_STATE}) public void acceptRingingCall();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ANSWER_PHONE_CALLS, android.Manifest.permission.MODIFY_PHONE_STATE}) public void acceptRingingCall(int);
+    method public void addNewIncomingCall(android.telecom.PhoneAccountHandle, android.os.Bundle);
+    method public void addNewIncomingConference(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void cancelMissedCallsNotification();
+    method public android.content.Intent createManageBlockedNumbersIntent();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ANSWER_PHONE_CALLS) public boolean endCall();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.net.Uri getAdnUriForPhoneAccount(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts();
+    method public String getDefaultDialerPackage();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telecom.PhoneAccountHandle getDefaultOutgoingPhoneAccount(String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS}, conditional=true) public String getLine1Number(android.telecom.PhoneAccountHandle);
+    method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getSelfManagedPhoneAccounts();
+    method public android.telecom.PhoneAccountHandle getSimCallManager();
+    method @Nullable public android.telecom.PhoneAccountHandle getSimCallManagerForSubscription(int);
+    method @Nullable public String getSystemDialerPackage();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telecom.PhoneAccountHandle getUserSelectedOutgoingPhoneAccount();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String, android.telecom.PhoneAccountHandle);
+    method public boolean hasManageOngoingCallsPermission();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isInCall();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isInManagedCall();
+    method public boolean isIncomingCallPermitted(android.telecom.PhoneAccountHandle);
+    method public boolean isOutgoingCallPermitted(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PHONE_STATE}) public boolean isTtySupported();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isVoiceMailNumber(android.telecom.PhoneAccountHandle, String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.CALL_PHONE, android.Manifest.permission.MANAGE_OWN_CALLS}) public void placeCall(android.net.Uri, android.os.Bundle);
+    method public void registerPhoneAccount(android.telecom.PhoneAccount);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void showInCallScreen(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void silenceRinger();
+    method @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void startConference(@NonNull java.util.List<android.net.Uri>, @NonNull android.os.Bundle);
+    method public void unregisterPhoneAccount(android.telecom.PhoneAccountHandle);
+    field public static final String ACTION_CHANGE_DEFAULT_DIALER = "android.telecom.action.CHANGE_DEFAULT_DIALER";
+    field public static final String ACTION_CHANGE_PHONE_ACCOUNTS = "android.telecom.action.CHANGE_PHONE_ACCOUNTS";
+    field public static final String ACTION_CONFIGURE_PHONE_ACCOUNT = "android.telecom.action.CONFIGURE_PHONE_ACCOUNT";
+    field public static final String ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED = "android.telecom.action.DEFAULT_CALL_SCREENING_APP_CHANGED";
+    field public static final String ACTION_DEFAULT_DIALER_CHANGED = "android.telecom.action.DEFAULT_DIALER_CHANGED";
+    field @Deprecated public static final String ACTION_INCOMING_CALL = "android.telecom.action.INCOMING_CALL";
+    field public static final String ACTION_PHONE_ACCOUNT_REGISTERED = "android.telecom.action.PHONE_ACCOUNT_REGISTERED";
+    field public static final String ACTION_PHONE_ACCOUNT_UNREGISTERED = "android.telecom.action.PHONE_ACCOUNT_UNREGISTERED";
+    field public static final String ACTION_POST_CALL = "android.telecom.action.POST_CALL";
+    field public static final String ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS = "android.telecom.action.SHOW_CALL_ACCESSIBILITY_SETTINGS";
+    field public static final String ACTION_SHOW_CALL_SETTINGS = "android.telecom.action.SHOW_CALL_SETTINGS";
+    field public static final String ACTION_SHOW_MISSED_CALLS_NOTIFICATION = "android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION";
+    field public static final String ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS = "android.telecom.action.SHOW_RESPOND_VIA_SMS_SETTINGS";
+    field public static final char DTMF_CHARACTER_PAUSE = 44; // 0x002c ','
+    field public static final char DTMF_CHARACTER_WAIT = 59; // 0x003b ';'
+    field public static final int DURATION_LONG = 3; // 0x3
+    field public static final int DURATION_MEDIUM = 2; // 0x2
+    field public static final int DURATION_SHORT = 1; // 0x1
+    field public static final int DURATION_VERY_SHORT = 0; // 0x0
+    field public static final String EXTRA_CALL_BACK_NUMBER = "android.telecom.extra.CALL_BACK_NUMBER";
+    field public static final String EXTRA_CALL_DISCONNECT_CAUSE = "android.telecom.extra.CALL_DISCONNECT_CAUSE";
+    field public static final String EXTRA_CALL_DISCONNECT_MESSAGE = "android.telecom.extra.CALL_DISCONNECT_MESSAGE";
+    field public static final String EXTRA_CALL_DURATION = "android.telecom.extra.CALL_DURATION";
+    field public static final String EXTRA_CALL_NETWORK_TYPE = "android.telecom.extra.CALL_NETWORK_TYPE";
+    field public static final String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
+    field public static final String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME";
+    field public static final String EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME = "android.telecom.extra.DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME";
+    field public static final String EXTRA_DISCONNECT_CAUSE = "android.telecom.extra.DISCONNECT_CAUSE";
+    field public static final String EXTRA_HANDLE = "android.telecom.extra.HANDLE";
+    field public static final String EXTRA_HAS_PICTURE = "android.telecom.extra.HAS_PICTURE";
+    field public static final String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS";
+    field public static final String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS";
+    field public static final String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE";
+    field public static final String EXTRA_IS_DEFAULT_CALL_SCREENING_APP = "android.telecom.extra.IS_DEFAULT_CALL_SCREENING_APP";
+    field public static final String EXTRA_LOCATION = "android.telecom.extra.LOCATION";
+    field public static final String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT";
+    field public static final String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
+    field public static final String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS";
+    field public static final String EXTRA_OUTGOING_PICTURE = "android.telecom.extra.OUTGOING_PICTURE";
+    field public static final String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telecom.extra.PHONE_ACCOUNT_HANDLE";
+    field public static final String EXTRA_PICTURE_URI = "android.telecom.extra.PICTURE_URI";
+    field public static final String EXTRA_PRIORITY = "android.telecom.extra.PRIORITY";
+    field public static final String EXTRA_START_CALL_WITH_RTT = "android.telecom.extra.START_CALL_WITH_RTT";
+    field public static final String EXTRA_START_CALL_WITH_SPEAKERPHONE = "android.telecom.extra.START_CALL_WITH_SPEAKERPHONE";
+    field public static final String EXTRA_START_CALL_WITH_VIDEO_STATE = "android.telecom.extra.START_CALL_WITH_VIDEO_STATE";
+    field public static final String EXTRA_USE_ASSISTED_DIALING = "android.telecom.extra.USE_ASSISTED_DIALING";
+    field public static final String GATEWAY_ORIGINAL_ADDRESS = "android.telecom.extra.GATEWAY_ORIGINAL_ADDRESS";
+    field public static final String GATEWAY_PROVIDER_PACKAGE = "android.telecom.extra.GATEWAY_PROVIDER_PACKAGE";
+    field public static final String METADATA_INCLUDE_EXTERNAL_CALLS = "android.telecom.INCLUDE_EXTERNAL_CALLS";
+    field public static final String METADATA_INCLUDE_SELF_MANAGED_CALLS = "android.telecom.INCLUDE_SELF_MANAGED_CALLS";
+    field public static final String METADATA_IN_CALL_SERVICE_CAR_MODE_UI = "android.telecom.IN_CALL_SERVICE_CAR_MODE_UI";
+    field public static final String METADATA_IN_CALL_SERVICE_RINGING = "android.telecom.IN_CALL_SERVICE_RINGING";
+    field public static final String METADATA_IN_CALL_SERVICE_UI = "android.telecom.IN_CALL_SERVICE_UI";
+    field public static final int PRESENTATION_ALLOWED = 1; // 0x1
+    field public static final int PRESENTATION_PAYPHONE = 4; // 0x4
+    field public static final int PRESENTATION_RESTRICTED = 2; // 0x2
+    field public static final int PRESENTATION_UNKNOWN = 3; // 0x3
+    field public static final int PRIORITY_NORMAL = 0; // 0x0
+    field public static final int PRIORITY_URGENT = 1; // 0x1
+  }
+
+  public class VideoProfile implements android.os.Parcelable {
+    ctor public VideoProfile(int);
+    ctor public VideoProfile(int, int);
+    method public int describeContents();
+    method public int getQuality();
+    method public int getVideoState();
+    method public static boolean isAudioOnly(int);
+    method public static boolean isBidirectional(int);
+    method public static boolean isPaused(int);
+    method public static boolean isReceptionEnabled(int);
+    method public static boolean isTransmissionEnabled(int);
+    method public static boolean isVideo(int);
+    method public static String videoStateToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.VideoProfile> CREATOR;
+    field public static final int QUALITY_DEFAULT = 4; // 0x4
+    field public static final int QUALITY_HIGH = 1; // 0x1
+    field public static final int QUALITY_LOW = 3; // 0x3
+    field public static final int QUALITY_MEDIUM = 2; // 0x2
+    field public static final int STATE_AUDIO_ONLY = 0; // 0x0
+    field public static final int STATE_BIDIRECTIONAL = 3; // 0x3
+    field public static final int STATE_PAUSED = 4; // 0x4
+    field public static final int STATE_RX_ENABLED = 2; // 0x2
+    field public static final int STATE_TX_ENABLED = 1; // 0x1
+  }
+
+  public static final class VideoProfile.CameraCapabilities implements android.os.Parcelable {
+    ctor public VideoProfile.CameraCapabilities(@IntRange(from=0) int, @IntRange(from=0) int);
+    ctor public VideoProfile.CameraCapabilities(@IntRange(from=0) int, @IntRange(from=0) int, boolean, @FloatRange(from=1.0f) float);
+    method public int describeContents();
+    method public int getHeight();
+    method public float getMaxZoom();
+    method public int getWidth();
+    method public boolean isZoomSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.VideoProfile.CameraCapabilities> CREATOR;
+  }
+
+}
+
+package android.telephony {
+
+  public final class AccessNetworkConstants {
+    field public static final int TRANSPORT_TYPE_WLAN = 2; // 0x2
+    field public static final int TRANSPORT_TYPE_WWAN = 1; // 0x1
+  }
+
+  public static final class AccessNetworkConstants.AccessNetworkType {
+    field public static final int CDMA2000 = 4; // 0x4
+    field public static final int EUTRAN = 3; // 0x3
+    field public static final int GERAN = 1; // 0x1
+    field public static final int IWLAN = 5; // 0x5
+    field public static final int NGRAN = 6; // 0x6
+    field public static final int UNKNOWN = 0; // 0x0
+    field public static final int UTRAN = 2; // 0x2
+  }
+
+  public static final class AccessNetworkConstants.EutranBand {
+    field public static final int BAND_1 = 1; // 0x1
+    field public static final int BAND_10 = 10; // 0xa
+    field public static final int BAND_11 = 11; // 0xb
+    field public static final int BAND_12 = 12; // 0xc
+    field public static final int BAND_13 = 13; // 0xd
+    field public static final int BAND_14 = 14; // 0xe
+    field public static final int BAND_17 = 17; // 0x11
+    field public static final int BAND_18 = 18; // 0x12
+    field public static final int BAND_19 = 19; // 0x13
+    field public static final int BAND_2 = 2; // 0x2
+    field public static final int BAND_20 = 20; // 0x14
+    field public static final int BAND_21 = 21; // 0x15
+    field public static final int BAND_22 = 22; // 0x16
+    field public static final int BAND_23 = 23; // 0x17
+    field public static final int BAND_24 = 24; // 0x18
+    field public static final int BAND_25 = 25; // 0x19
+    field public static final int BAND_26 = 26; // 0x1a
+    field public static final int BAND_27 = 27; // 0x1b
+    field public static final int BAND_28 = 28; // 0x1c
+    field public static final int BAND_3 = 3; // 0x3
+    field public static final int BAND_30 = 30; // 0x1e
+    field public static final int BAND_31 = 31; // 0x1f
+    field public static final int BAND_33 = 33; // 0x21
+    field public static final int BAND_34 = 34; // 0x22
+    field public static final int BAND_35 = 35; // 0x23
+    field public static final int BAND_36 = 36; // 0x24
+    field public static final int BAND_37 = 37; // 0x25
+    field public static final int BAND_38 = 38; // 0x26
+    field public static final int BAND_39 = 39; // 0x27
+    field public static final int BAND_4 = 4; // 0x4
+    field public static final int BAND_40 = 40; // 0x28
+    field public static final int BAND_41 = 41; // 0x29
+    field public static final int BAND_42 = 42; // 0x2a
+    field public static final int BAND_43 = 43; // 0x2b
+    field public static final int BAND_44 = 44; // 0x2c
+    field public static final int BAND_45 = 45; // 0x2d
+    field public static final int BAND_46 = 46; // 0x2e
+    field public static final int BAND_47 = 47; // 0x2f
+    field public static final int BAND_48 = 48; // 0x30
+    field public static final int BAND_49 = 49; // 0x31
+    field public static final int BAND_5 = 5; // 0x5
+    field public static final int BAND_50 = 50; // 0x32
+    field public static final int BAND_51 = 51; // 0x33
+    field public static final int BAND_52 = 52; // 0x34
+    field public static final int BAND_53 = 53; // 0x35
+    field public static final int BAND_6 = 6; // 0x6
+    field public static final int BAND_65 = 65; // 0x41
+    field public static final int BAND_66 = 66; // 0x42
+    field public static final int BAND_68 = 68; // 0x44
+    field public static final int BAND_7 = 7; // 0x7
+    field public static final int BAND_70 = 70; // 0x46
+    field public static final int BAND_71 = 71; // 0x47
+    field public static final int BAND_72 = 72; // 0x48
+    field public static final int BAND_73 = 73; // 0x49
+    field public static final int BAND_74 = 74; // 0x4a
+    field public static final int BAND_8 = 8; // 0x8
+    field public static final int BAND_85 = 85; // 0x55
+    field public static final int BAND_87 = 87; // 0x57
+    field public static final int BAND_88 = 88; // 0x58
+    field public static final int BAND_9 = 9; // 0x9
+  }
+
+  public static final class AccessNetworkConstants.GeranBand {
+    field public static final int BAND_450 = 3; // 0x3
+    field public static final int BAND_480 = 4; // 0x4
+    field public static final int BAND_710 = 5; // 0x5
+    field public static final int BAND_750 = 6; // 0x6
+    field public static final int BAND_850 = 8; // 0x8
+    field public static final int BAND_DCS1800 = 12; // 0xc
+    field public static final int BAND_E900 = 10; // 0xa
+    field public static final int BAND_ER900 = 14; // 0xe
+    field public static final int BAND_P900 = 9; // 0x9
+    field public static final int BAND_PCS1900 = 13; // 0xd
+    field public static final int BAND_R900 = 11; // 0xb
+    field public static final int BAND_T380 = 1; // 0x1
+    field public static final int BAND_T410 = 2; // 0x2
+    field public static final int BAND_T810 = 7; // 0x7
+  }
+
+  public static final class AccessNetworkConstants.NgranBands {
+    field public static final int BAND_1 = 1; // 0x1
+    field public static final int BAND_12 = 12; // 0xc
+    field public static final int BAND_14 = 14; // 0xe
+    field public static final int BAND_18 = 18; // 0x12
+    field public static final int BAND_2 = 2; // 0x2
+    field public static final int BAND_20 = 20; // 0x14
+    field public static final int BAND_25 = 25; // 0x19
+    field public static final int BAND_257 = 257; // 0x101
+    field public static final int BAND_258 = 258; // 0x102
+    field public static final int BAND_26 = 26; // 0x1a
+    field public static final int BAND_260 = 260; // 0x104
+    field public static final int BAND_261 = 261; // 0x105
+    field public static final int BAND_28 = 28; // 0x1c
+    field public static final int BAND_29 = 29; // 0x1d
+    field public static final int BAND_3 = 3; // 0x3
+    field public static final int BAND_30 = 30; // 0x1e
+    field public static final int BAND_34 = 34; // 0x22
+    field public static final int BAND_38 = 38; // 0x26
+    field public static final int BAND_39 = 39; // 0x27
+    field public static final int BAND_40 = 40; // 0x28
+    field public static final int BAND_41 = 41; // 0x29
+    field public static final int BAND_46 = 46; // 0x2e
+    field public static final int BAND_48 = 48; // 0x30
+    field public static final int BAND_5 = 5; // 0x5
+    field public static final int BAND_50 = 50; // 0x32
+    field public static final int BAND_51 = 51; // 0x33
+    field public static final int BAND_53 = 53; // 0x35
+    field public static final int BAND_65 = 65; // 0x41
+    field public static final int BAND_66 = 66; // 0x42
+    field public static final int BAND_7 = 7; // 0x7
+    field public static final int BAND_70 = 70; // 0x46
+    field public static final int BAND_71 = 71; // 0x47
+    field public static final int BAND_74 = 74; // 0x4a
+    field public static final int BAND_75 = 75; // 0x4b
+    field public static final int BAND_76 = 76; // 0x4c
+    field public static final int BAND_77 = 77; // 0x4d
+    field public static final int BAND_78 = 78; // 0x4e
+    field public static final int BAND_79 = 79; // 0x4f
+    field public static final int BAND_8 = 8; // 0x8
+    field public static final int BAND_80 = 80; // 0x50
+    field public static final int BAND_81 = 81; // 0x51
+    field public static final int BAND_82 = 82; // 0x52
+    field public static final int BAND_83 = 83; // 0x53
+    field public static final int BAND_84 = 84; // 0x54
+    field public static final int BAND_86 = 86; // 0x56
+    field public static final int BAND_89 = 89; // 0x59
+    field public static final int BAND_90 = 90; // 0x5a
+    field public static final int BAND_91 = 91; // 0x5b
+    field public static final int BAND_92 = 92; // 0x5c
+    field public static final int BAND_93 = 93; // 0x5d
+    field public static final int BAND_94 = 94; // 0x5e
+    field public static final int BAND_95 = 95; // 0x5f
+    field public static final int BAND_96 = 96; // 0x60
+  }
+
+  public static final class AccessNetworkConstants.UtranBand {
+    field public static final int BAND_1 = 1; // 0x1
+    field public static final int BAND_10 = 10; // 0xa
+    field public static final int BAND_11 = 11; // 0xb
+    field public static final int BAND_12 = 12; // 0xc
+    field public static final int BAND_13 = 13; // 0xd
+    field public static final int BAND_14 = 14; // 0xe
+    field public static final int BAND_19 = 19; // 0x13
+    field public static final int BAND_2 = 2; // 0x2
+    field public static final int BAND_20 = 20; // 0x14
+    field public static final int BAND_21 = 21; // 0x15
+    field public static final int BAND_22 = 22; // 0x16
+    field public static final int BAND_25 = 25; // 0x19
+    field public static final int BAND_26 = 26; // 0x1a
+    field public static final int BAND_3 = 3; // 0x3
+    field public static final int BAND_4 = 4; // 0x4
+    field public static final int BAND_5 = 5; // 0x5
+    field public static final int BAND_6 = 6; // 0x6
+    field public static final int BAND_7 = 7; // 0x7
+    field public static final int BAND_8 = 8; // 0x8
+    field public static final int BAND_9 = 9; // 0x9
+    field public static final int BAND_A = 101; // 0x65
+    field public static final int BAND_B = 102; // 0x66
+    field public static final int BAND_C = 103; // 0x67
+    field public static final int BAND_D = 104; // 0x68
+    field public static final int BAND_E = 105; // 0x69
+    field public static final int BAND_F = 106; // 0x6a
+  }
+
+  public final class AvailableNetworkInfo implements android.os.Parcelable {
+    ctor public AvailableNetworkInfo(int, int, @NonNull java.util.List<java.lang.String>, @NonNull java.util.List<java.lang.Integer>);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.Integer> getBands();
+    method @NonNull public java.util.List<java.lang.String> getMccMncs();
+    method public int getPriority();
+    method public int getSubId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.AvailableNetworkInfo> CREATOR;
+    field public static final int PRIORITY_HIGH = 1; // 0x1
+    field public static final int PRIORITY_LOW = 3; // 0x3
+    field public static final int PRIORITY_MED = 2; // 0x2
+  }
+
+  public final class BarringInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.telephony.BarringInfo.BarringServiceInfo getBarringServiceInfo(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BARRING_SERVICE_TYPE_CS_FALLBACK = 5; // 0x5
+    field public static final int BARRING_SERVICE_TYPE_CS_SERVICE = 0; // 0x0
+    field public static final int BARRING_SERVICE_TYPE_CS_VOICE = 2; // 0x2
+    field public static final int BARRING_SERVICE_TYPE_EMERGENCY = 8; // 0x8
+    field public static final int BARRING_SERVICE_TYPE_MMTEL_VIDEO = 7; // 0x7
+    field public static final int BARRING_SERVICE_TYPE_MMTEL_VOICE = 6; // 0x6
+    field public static final int BARRING_SERVICE_TYPE_MO_DATA = 4; // 0x4
+    field public static final int BARRING_SERVICE_TYPE_MO_SIGNALLING = 3; // 0x3
+    field public static final int BARRING_SERVICE_TYPE_PS_SERVICE = 1; // 0x1
+    field public static final int BARRING_SERVICE_TYPE_SMS = 9; // 0x9
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.BarringInfo> CREATOR;
+  }
+
+  public static final class BarringInfo.BarringServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getBarringType();
+    method public int getConditionalBarringFactor();
+    method public int getConditionalBarringTimeSeconds();
+    method public boolean isBarred();
+    method public boolean isConditionallyBarred();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BARRING_TYPE_CONDITIONAL = 1; // 0x1
+    field public static final int BARRING_TYPE_NONE = 0; // 0x0
+    field public static final int BARRING_TYPE_UNCONDITIONAL = 2; // 0x2
+    field public static final int BARRING_TYPE_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.BarringInfo.BarringServiceInfo> CREATOR;
+  }
+
+  public class CarrierConfigManager {
+    method @Nullable public android.os.PersistableBundle getConfig();
+    method @Nullable public android.os.PersistableBundle getConfigByComponentForSubId(@NonNull String, int);
+    method @Nullable public android.os.PersistableBundle getConfigForSubId(int);
+    method public static boolean isConfigForIdentifiedCarrier(android.os.PersistableBundle);
+    method public void notifyConfigChangedForSubId(int);
+    field public static final String ACTION_CARRIER_CONFIG_CHANGED = "android.telephony.action.CARRIER_CONFIG_CHANGED";
+    field public static final int CARRIER_NR_AVAILABILITY_NSA = 1; // 0x1
+    field public static final int CARRIER_NR_AVAILABILITY_SA = 2; // 0x2
+    field public static final int CROSS_SIM_SPN_FORMAT_CARRIER_NAME_ONLY = 0; // 0x0
+    field public static final int CROSS_SIM_SPN_FORMAT_CARRIER_NAME_WITH_BRANDING = 1; // 0x1
+    field public static final int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe
+    field public static final int DATA_CYCLE_USE_PLATFORM_DEFAULT = -1; // 0xffffffff
+    field public static final String ENABLE_EAP_METHOD_PREFIX_BOOL = "enable_eap_method_prefix_bool";
+    field public static final String EXTRA_REBROADCAST_ON_UNLOCK = "android.telephony.extra.REBROADCAST_ON_UNLOCK";
+    field public static final String EXTRA_SLOT_INDEX = "android.telephony.extra.SLOT_INDEX";
+    field public static final String EXTRA_SUBSCRIPTION_INDEX = "android.telephony.extra.SUBSCRIPTION_INDEX";
+    field public static final String IMSI_KEY_AVAILABILITY_INT = "imsi_key_availability_int";
+    field public static final String KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY = "5g_nr_ssrsrp_thresholds_int_array";
+    field public static final String KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY = "5g_nr_ssrsrq_thresholds_int_array";
+    field public static final String KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY = "5g_nr_sssinr_thresholds_int_array";
+    field public static final String KEY_ADDITIONAL_CALL_SETTING_BOOL = "additional_call_setting_bool";
+    field public static final String KEY_ALLOW_ADDING_APNS_BOOL = "allow_adding_apns_bool";
+    field public static final String KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL = "allow_add_call_during_video_call";
+    field public static final String KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
+    field public static final String KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL = "allow_emergency_video_calls_bool";
+    field public static final String KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL = "allow_hold_call_during_emergency_bool";
+    field public static final String KEY_ALLOW_HOLD_VIDEO_CALL_BOOL = "allow_hold_video_call_bool";
+    field public static final String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
+    field public static final String KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL = "allow_merge_wifi_calls_when_vowifi_off_bool";
+    field public static final String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
+    field public static final String KEY_ALLOW_VIDEO_CALLING_FALLBACK_BOOL = "allow_video_calling_fallback_bool";
+    field public static final String KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL = "always_show_data_rat_icon_bool";
+    field @Deprecated public static final String KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL = "always_show_emergency_alert_onoff_bool";
+    field public static final String KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN = "always_show_primary_signal_bar_in_opportunistic_network_boolean";
+    field public static final String KEY_APN_EXPAND_BOOL = "apn_expand_bool";
+    field public static final String KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY = "apn_settings_default_apn_types_string_array";
+    field public static final String KEY_AUTO_RETRY_ENABLED_BOOL = "auto_retry_enabled_bool";
+    field public static final String KEY_CALL_BARRING_DEFAULT_SERVICE_CLASS_INT = "call_barring_default_service_class_int";
+    field public static final String KEY_CALL_BARRING_SUPPORTS_DEACTIVATE_ALL_BOOL = "call_barring_supports_deactivate_all_bool";
+    field public static final String KEY_CALL_BARRING_SUPPORTS_PASSWORD_CHANGE_BOOL = "call_barring_supports_password_change_bool";
+    field public static final String KEY_CALL_BARRING_VISIBILITY_BOOL = "call_barring_visibility_bool";
+    field public static final String KEY_CALL_COMPOSER_PICTURE_SERVER_URL_STRING = "call_composer_picture_server_url_string";
+    field public static final String KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY = "call_forwarding_blocks_while_roaming_string_array";
+    field public static final String KEY_CALL_REDIRECTION_SERVICE_COMPONENT_NAME_STRING = "call_redirection_service_component_name_string";
+    field public static final String KEY_CARRIER_ALLOW_DEFLECT_IMS_CALL_BOOL = "carrier_allow_deflect_ims_call_bool";
+    field public static final String KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL = "carrier_allow_turnoff_ims_bool";
+    field public static final String KEY_CARRIER_APP_REQUIRED_DURING_SIM_SETUP_BOOL = "carrier_app_required_during_setup_bool";
+    field public static final String KEY_CARRIER_CALL_SCREENING_APP_STRING = "call_screening_app";
+    field public static final String KEY_CARRIER_CERTIFICATE_STRING_ARRAY = "carrier_certificate_string_array";
+    field public static final String KEY_CARRIER_CONFIG_APPLIED_BOOL = "carrier_config_applied_bool";
+    field public static final String KEY_CARRIER_CONFIG_VERSION_STRING = "carrier_config_version_string";
+    field public static final String KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL = "carrier_cross_sim_ims_available_bool";
+    field public static final String KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS = "carrier_data_call_permanent_failure_strings";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY = "carrier_default_actions_on_dcfailure_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DEFAULT_NETWORK_AVAILABLE = "carrier_default_actions_on_default_network_available_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY = "carrier_default_actions_on_redirection_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_RESET = "carrier_default_actions_on_reset_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_REDIRECTION_URL_STRING_ARRAY = "carrier_default_redirection_url_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL = "carrier_default_wfc_ims_enabled_bool";
+    field public static final String KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT = "carrier_default_wfc_ims_mode_int";
+    field public static final String KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT = "carrier_default_wfc_ims_roaming_mode_int";
+    field @Deprecated public static final String KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL = "carrier_force_disable_etws_cmas_test_bool";
+    field public static final String KEY_CARRIER_IMS_GBA_REQUIRED_BOOL = "carrier_ims_gba_required_bool";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL = "carrier_instant_lettering_available_bool";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING = "carrier_instant_lettering_encoding_string";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING = "carrier_instant_lettering_escaped_chars_string";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING = "carrier_instant_lettering_invalid_chars_string";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT = "carrier_instant_lettering_length_limit_int";
+    field public static final String KEY_CARRIER_NAME_OVERRIDE_BOOL = "carrier_name_override_bool";
+    field public static final String KEY_CARRIER_NAME_STRING = "carrier_name_string";
+    field public static final String KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY = "carrier_nr_availabilities_int_array";
+    field public static final String KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL = "carrier_provisions_wifi_merged_networks_bool";
+    field public static final String KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL = "carrier_rcs_provisioning_required_bool";
+    field public static final String KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING = "carrier_settings_activity_component_name_string";
+    field public static final String KEY_CARRIER_SETTINGS_ENABLE_BOOL = "carrier_settings_enable_bool";
+    field public static final String KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL = "carrier_supports_ss_over_ut_bool";
+    field public static final String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool";
+    field public static final String KEY_CARRIER_USSD_METHOD_INT = "carrier_ussd_method_int";
+    field public static final String KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL = "carrier_ut_provisioning_required_bool";
+    field public static final String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
+    field public static final String KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL = "carrier_volte_override_wfc_provisioning_bool";
+    field public static final String KEY_CARRIER_VOLTE_PROVISIONED_BOOL = "carrier_volte_provisioned_bool";
+    field public static final String KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL = "carrier_volte_provisioning_required_bool";
+    field public static final String KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL = "carrier_volte_tty_supported_bool";
+    field public static final String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
+    field @Deprecated public static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = "carrier_vvm_package_name_string";
+    field public static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY = "carrier_vvm_package_name_string_array";
+    field public static final String KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL = "carrier_wfc_ims_available_bool";
+    field public static final String KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL = "carrier_wfc_supports_wifi_only_bool";
+    field public static final String KEY_CDMA_3WAYCALL_FLASH_DELAY_INT = "cdma_3waycall_flash_delay_int";
+    field public static final String KEY_CDMA_DTMF_TONE_DELAY_INT = "cdma_dtmf_tone_delay_int";
+    field public static final String KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY = "cdma_nonroaming_networks_string_array";
+    field public static final String KEY_CDMA_ROAMING_MODE_INT = "cdma_roaming_mode_int";
+    field public static final String KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY = "cdma_roaming_networks_string_array";
+    field public static final String KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL = "check_pricing_with_carrier_data_roaming_bool";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_BOOL = "ci_action_on_sys_update_bool";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING = "ci_action_on_sys_update_extra_string";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING = "ci_action_on_sys_update_extra_val_string";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING = "ci_action_on_sys_update_intent_string";
+    field public static final String KEY_CONFIG_IMS_MMTEL_PACKAGE_OVERRIDE_STRING = "config_ims_mmtel_package_override_string";
+    field @Deprecated public static final String KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING = "config_ims_package_override_string";
+    field public static final String KEY_CONFIG_IMS_RCS_PACKAGE_OVERRIDE_STRING = "config_ims_rcs_package_override_string";
+    field public static final String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string";
+    field public static final String KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL = "config_telephony_use_own_number_for_voicemail_bool";
+    field public static final String KEY_CONFIG_WIFI_DISABLE_IN_ECBM = "config_wifi_disable_in_ecbm";
+    field public static final String KEY_CROSS_SIM_SPN_FORMAT_INT = "cross_sim_spn_format_int";
+    field public static final String KEY_CSP_ENABLED_BOOL = "csp_enabled_bool";
+    field public static final String KEY_DATA_LIMIT_NOTIFICATION_BOOL = "data_limit_notification_bool";
+    field public static final String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long";
+    field public static final String KEY_DATA_RAPID_NOTIFICATION_BOOL = "data_rapid_notification_bool";
+    field public static final String KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG = "data_switch_validation_timeout_long";
+    field public static final String KEY_DATA_WARNING_NOTIFICATION_BOOL = "data_warning_notification_bool";
+    field public static final String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long";
+    field public static final String KEY_DEFAULT_SIM_CALL_MANAGER_STRING = "default_sim_call_manager_string";
+    field public static final String KEY_DEFAULT_VM_NUMBER_ROAMING_AND_IMS_UNREGISTERED_STRING = "default_vm_number_roaming_and_ims_unregistered_string";
+    field public static final String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string";
+    field public static final String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array";
+    field public static final String KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
+    field public static final String KEY_DISABLE_CHARGE_INDICATION_BOOL = "disable_charge_indication_bool";
+    field public static final String KEY_DISABLE_SUPPLEMENTARY_SERVICES_IN_AIRPLANE_MODE_BOOL = "disable_supplementary_services_in_airplane_mode_bool";
+    field public static final String KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY = "disconnect_cause_play_busytone_int_array";
+    field public static final String KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL = "display_call_strength_indicator_bool";
+    field public static final String KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL = "display_hd_audio_property_bool";
+    field public static final String KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL = "drop_video_call_when_answering_audio_call_bool";
+    field public static final String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
+    field public static final String KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT = "duration_blocking_disabled_after_emergency_int";
+    field public static final String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
+    field public static final String KEY_EDITABLE_VOICEMAIL_NUMBER_BOOL = "editable_voicemail_number_bool";
+    field public static final String KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL = "editable_voicemail_number_setting_bool";
+    field public static final String KEY_EDITABLE_WFC_MODE_BOOL = "editable_wfc_mode_bool";
+    field public static final String KEY_EDITABLE_WFC_ROAMING_MODE_BOOL = "editable_wfc_roaming_mode_bool";
+    field public static final String KEY_EMERGENCY_NOTIFICATION_DELAY_INT = "emergency_notification_delay_int";
+    field public static final String KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY = "emergency_number_prefix_string_array";
+    field public static final String KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL = "enable_dialer_key_vibration_bool";
+    field public static final String KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL = "enhanced_4g_lte_on_by_default_bool";
+    field public static final String KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT = "enhanced_4g_lte_title_variant_int";
+    field public static final String KEY_FORCE_HOME_NETWORK_BOOL = "force_home_network_bool";
+    field public static final String KEY_GSM_DTMF_TONE_DELAY_INT = "gsm_dtmf_tone_delay_int";
+    field public static final String KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY = "gsm_nonroaming_networks_string_array";
+    field public static final String KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY = "gsm_roaming_networks_string_array";
+    field public static final String KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL = "has_in_call_noise_suppression_bool";
+    field public static final String KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL = "hide_carrier_network_settings_bool";
+    field public static final String KEY_HIDE_ENABLE_2G = "hide_enable_2g_bool";
+    field public static final String KEY_HIDE_ENHANCED_4G_LTE_BOOL = "hide_enhanced_4g_lte_bool";
+    field public static final String KEY_HIDE_IMS_APN_BOOL = "hide_ims_apn_bool";
+    field public static final String KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL = "hide_lte_plus_data_icon_bool";
+    field public static final String KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL = "hide_preferred_network_type_bool";
+    field public static final String KEY_HIDE_PRESET_APN_DETAILS_BOOL = "hide_preset_apn_details_bool";
+    field public static final String KEY_HIDE_SIM_LOCK_SETTINGS_BOOL = "hide_sim_lock_settings_bool";
+    field public static final String KEY_HIDE_TTY_HCO_VCO_WITH_RTT_BOOL = "hide_tty_hco_vco_with_rtt";
+    field public static final String KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS = "ignore_data_enabled_changed_for_video_calls";
+    field public static final String KEY_IGNORE_RTT_MODE_SETTING_BOOL = "ignore_rtt_mode_setting_bool";
+    field public static final String KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL = "ignore_sim_network_locked_events_bool";
+    field public static final String KEY_IMS_CONFERENCE_SIZE_LIMIT_INT = "ims_conference_size_limit_int";
+    field public static final String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
+    field public static final String KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL = "is_ims_conference_size_enforced_bool";
+    field public static final String KEY_LTE_ENABLED_BOOL = "lte_enabled_bool";
+    field public static final String KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY = "lte_rsrq_thresholds_int_array";
+    field public static final String KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY = "lte_rssnr_thresholds_int_array";
+    field public static final String KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL = "mdn_is_additional_voicemail_number_bool";
+    field public static final String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled";
+    field public static final String KEY_MMS_ALIAS_MAX_CHARS_INT = "aliasMaxChars";
+    field public static final String KEY_MMS_ALIAS_MIN_CHARS_INT = "aliasMinChars";
+    field public static final String KEY_MMS_ALLOW_ATTACH_AUDIO_BOOL = "allowAttachAudio";
+    field public static final String KEY_MMS_APPEND_TRANSACTION_ID_BOOL = "enabledTransID";
+    field public static final String KEY_MMS_CLOSE_CONNECTION_BOOL = "mmsCloseConnection";
+    field public static final String KEY_MMS_EMAIL_GATEWAY_NUMBER_STRING = "emailGatewayNumber";
+    field public static final String KEY_MMS_GROUP_MMS_ENABLED_BOOL = "enableGroupMms";
+    field public static final String KEY_MMS_HTTP_PARAMS_STRING = "httpParams";
+    field public static final String KEY_MMS_HTTP_SOCKET_TIMEOUT_INT = "httpSocketTimeout";
+    field public static final String KEY_MMS_MAX_IMAGE_HEIGHT_INT = "maxImageHeight";
+    field public static final String KEY_MMS_MAX_IMAGE_WIDTH_INT = "maxImageWidth";
+    field public static final String KEY_MMS_MAX_MESSAGE_SIZE_INT = "maxMessageSize";
+    field public static final String KEY_MMS_MESSAGE_TEXT_MAX_SIZE_INT = "maxMessageTextSize";
+    field public static final String KEY_MMS_MMS_DELIVERY_REPORT_ENABLED_BOOL = "enableMMSDeliveryReports";
+    field public static final String KEY_MMS_MMS_ENABLED_BOOL = "enabledMMS";
+    field public static final String KEY_MMS_MMS_READ_REPORT_ENABLED_BOOL = "enableMMSReadReports";
+    field public static final String KEY_MMS_MULTIPART_SMS_ENABLED_BOOL = "enableMultipartSMS";
+    field public static final String KEY_MMS_NAI_SUFFIX_STRING = "naiSuffix";
+    field public static final String KEY_MMS_NOTIFY_WAP_MMSC_ENABLED_BOOL = "enabledNotifyWapMMSC";
+    field public static final String KEY_MMS_RECIPIENT_LIMIT_INT = "recipientLimit";
+    field public static final String KEY_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_BOOL = "sendMultipartSmsAsSeparateMessages";
+    field public static final String KEY_MMS_SHOW_CELL_BROADCAST_APP_LINKS_BOOL = "config_cellBroadcastAppLinks";
+    field public static final String KEY_MMS_SMS_DELIVERY_REPORT_ENABLED_BOOL = "enableSMSDeliveryReports";
+    field public static final String KEY_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_INT = "smsToMmsTextLengthThreshold";
+    field public static final String KEY_MMS_SMS_TO_MMS_TEXT_THRESHOLD_INT = "smsToMmsTextThreshold";
+    field public static final String KEY_MMS_SUBJECT_MAX_LENGTH_INT = "maxSubjectLength";
+    field public static final String KEY_MMS_SUPPORT_HTTP_CHARSET_HEADER_BOOL = "supportHttpCharsetHeader";
+    field public static final String KEY_MMS_SUPPORT_MMS_CONTENT_DISPOSITION_BOOL = "supportMmsContentDisposition";
+    field public static final String KEY_MMS_UA_PROF_TAG_NAME_STRING = "uaProfTagName";
+    field public static final String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl";
+    field public static final String KEY_MMS_USER_AGENT_STRING = "userAgent";
+    field public static final String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int";
+    field public static final String KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL = "only_auto_select_in_home_network";
+    field public static final String KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY = "only_single_dc_allowed_int_array";
+    field public static final String KEY_OPERATOR_SELECTION_EXPAND_BOOL = "operator_selection_expand_bool";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_BACKOFF_TIME_LONG = "opportunistic_network_backoff_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG = "opportunistic_network_data_switch_exit_hysteresis_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG = "opportunistic_network_data_switch_hysteresis_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG = "opportunistic_network_entry_or_exit_hysteresis_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_BANDWIDTH_INT = "opportunistic_network_entry_threshold_bandwidth_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSRP_INT = "opportunistic_network_entry_threshold_rsrp_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSSNR_INT = "opportunistic_network_entry_threshold_rssnr_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSRP_INT = "opportunistic_network_exit_threshold_rsrp_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSSNR_INT = "opportunistic_network_exit_threshold_rssnr_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_MAX_BACKOFF_TIME_LONG = "opportunistic_network_max_backoff_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_PING_PONG_TIME_LONG = "opportunistic_network_ping_pong_time_long";
+    field public static final String KEY_PING_TEST_BEFORE_DATA_SWITCH_BOOL = "ping_test_before_data_switch_bool";
+    field public static final String KEY_PREFER_2G_BOOL = "prefer_2g_bool";
+    field public static final String KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL = "prevent_clir_activation_and_deactivation_code_bool";
+    field public static final String KEY_RADIO_RESTART_FAILURE_CAUSES_INT_ARRAY = "radio_restart_failure_causes_int_array";
+    field public static final String KEY_RCS_CONFIG_SERVER_URL_STRING = "rcs_config_server_url_string";
+    field public static final String KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY = "read_only_apn_fields_string_array";
+    field public static final String KEY_READ_ONLY_APN_TYPES_STRING_ARRAY = "read_only_apn_types_string_array";
+    field public static final String KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL = "require_entitlement_checks_bool";
+    field @Deprecated public static final String KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL = "restart_radio_on_pdp_fail_regular_deactivation_bool";
+    field public static final String KEY_RTT_AUTO_UPGRADE_BOOL = "rtt_auto_upgrade_bool";
+    field public static final String KEY_RTT_DOWNGRADE_SUPPORTED_BOOL = "rtt_downgrade_supported_bool";
+    field public static final String KEY_RTT_SUPPORTED_BOOL = "rtt_supported_bool";
+    field public static final String KEY_RTT_SUPPORTED_FOR_VT_BOOL = "rtt_supported_for_vt_bool";
+    field public static final String KEY_RTT_SUPPORTED_WHILE_ROAMING_BOOL = "rtt_supported_while_roaming_bool";
+    field public static final String KEY_RTT_UPGRADE_SUPPORTED_BOOL = "rtt_upgrade_supported_bool";
+    field public static final String KEY_RTT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_VT_CALL_BOOL = "rtt_upgrade_supported_for_downgraded_vt_call";
+    field public static final String KEY_SHOW_4G_FOR_3G_DATA_ICON_BOOL = "show_4g_for_3g_data_icon_bool";
+    field public static final String KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL = "show_4g_for_lte_data_icon_bool";
+    field public static final String KEY_SHOW_APN_SETTING_CDMA_BOOL = "show_apn_setting_cdma_bool";
+    field public static final String KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL = "show_blocking_pay_phone_option_bool";
+    field public static final String KEY_SHOW_CALL_BLOCKING_DISABLED_NOTIFICATION_ALWAYS_BOOL = "show_call_blocking_disabled_notification_always_bool";
+    field public static final String KEY_SHOW_CDMA_CHOICES_BOOL = "show_cdma_choices_bool";
+    field public static final String KEY_SHOW_FORWARDED_NUMBER_BOOL = "show_forwarded_number_bool";
+    field public static final String KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL = "show_iccid_in_sim_status_bool";
+    field public static final String KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL = "show_ims_registration_status_bool";
+    field public static final String KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL = "show_onscreen_dial_button_bool";
+    field public static final String KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL = "show_signal_strength_in_sim_status_bool";
+    field public static final String KEY_SHOW_VIDEO_CALL_CHARGES_ALERT_DIALOG_BOOL = "show_video_call_charges_alert_dialog_bool";
+    field public static final String KEY_SHOW_WFC_LOCATION_PRIVACY_POLICY_BOOL = "show_wfc_location_privacy_policy_bool";
+    field public static final String KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL = "simplified_network_settings_bool";
+    field public static final String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
+    field public static final String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool";
+    field public static final String KEY_SUPPORTS_CALL_COMPOSER_BOOL = "supports_call_composer_bool";
+    field public static final String KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_DTMF_BOOL = "supports_device_to_device_communication_using_dtmf_bool";
+    field public static final String KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_RTP_BOOL = "supports_device_to_device_communication_using_rtp_bool";
+    field public static final String KEY_SUPPORTS_SDP_NEGOTIATION_OF_D2D_RTP_HEADER_EXTENSIONS_BOOL = "supports_sdp_negotiation_of_d2d_rtp_header_extensions_bool";
+    field public static final String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL = "support_3gpp_call_forwarding_while_roaming_bool";
+    field public static final String KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL = "support_add_conference_participants_bool";
+    field public static final String KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL = "support_adhoc_conference_calls_bool";
+    field public static final String KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL = "support_clir_network_default_bool";
+    field public static final String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
+    field public static final String KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL = "support_emergency_sms_over_ims_bool";
+    field public static final String KEY_SUPPORT_ENHANCED_CALL_BLOCKING_BOOL = "support_enhanced_call_blocking_bool";
+    field public static final String KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL = "support_ims_conference_event_package_bool";
+    field public static final String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool";
+    field public static final String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool";
+    field public static final String KEY_SUPPORT_TDSCDMA_BOOL = "support_tdscdma_bool";
+    field public static final String KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY = "support_tdscdma_roaming_networks_string_array";
+    field public static final String KEY_SWITCH_DATA_TO_PRIMARY_IF_PRIMARY_IS_OOS_BOOL = "switch_data_to_primary_if_primary_is_oos_bool";
+    field public static final String KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL = "treat_downgraded_video_calls_as_video_calls_bool";
+    field public static final String KEY_TTY_SUPPORTED_BOOL = "tty_supported_bool";
+    field public static final String KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY = "unloggable_numbers_string_array";
+    field public static final String KEY_USE_ACS_FOR_RCS_BOOL = "use_acs_for_rcs_bool";
+    field public static final String KEY_USE_HFA_FOR_PROVISIONING_BOOL = "use_hfa_for_provisioning_bool";
+    field public static final String KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL = "use_ip_for_calling_indicator_bool";
+    field public static final String KEY_USE_OTASP_FOR_PROVISIONING_BOOL = "use_otasp_for_provisioning_bool";
+    field @Deprecated public static final String KEY_USE_RCS_PRESENCE_BOOL = "use_rcs_presence_bool";
+    field public static final String KEY_USE_RCS_SIP_OPTIONS_BOOL = "use_rcs_sip_options_bool";
+    field public static final String KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL = "use_wfc_home_network_mode_in_roaming_network_bool";
+    field public static final String KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL = "voicemail_notification_persistent_bool";
+    field public static final String KEY_VOICE_PRIVACY_DISABLE_UI_BOOL = "voice_privacy_disable_ui_bool";
+    field public static final String KEY_VOLTE_REPLACEMENT_RAT_INT = "volte_replacement_rat_int";
+    field public static final String KEY_VT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_RTT_CALL_BOOL = "vt_upgrade_supported_for_downgraded_rtt_call";
+    field public static final String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL = "vvm_cellular_data_required_bool";
+    field public static final String KEY_VVM_CLIENT_PREFIX_STRING = "vvm_client_prefix_string";
+    field public static final String KEY_VVM_DESTINATION_NUMBER_STRING = "vvm_destination_number_string";
+    field public static final String KEY_VVM_DISABLED_CAPABILITIES_STRING_ARRAY = "vvm_disabled_capabilities_string_array";
+    field public static final String KEY_VVM_LEGACY_MODE_ENABLED_BOOL = "vvm_legacy_mode_enabled_bool";
+    field public static final String KEY_VVM_PORT_NUMBER_INT = "vvm_port_number_int";
+    field public static final String KEY_VVM_PREFETCH_BOOL = "vvm_prefetch_bool";
+    field public static final String KEY_VVM_SSL_ENABLED_BOOL = "vvm_ssl_enabled_bool";
+    field public static final String KEY_VVM_TYPE_STRING = "vvm_type_string";
+    field public static final String KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING = "wfc_emergency_address_carrier_app_string";
+    field public static final String KEY_WORLD_MODE_ENABLED_BOOL = "world_mode_enabled_bool";
+    field public static final String KEY_WORLD_PHONE_BOOL = "world_phone_bool";
+    field public static final int SERVICE_CLASS_NONE = 0; // 0x0
+    field public static final int SERVICE_CLASS_VOICE = 1; // 0x1
+    field public static final int USSD_OVER_CS_ONLY = 2; // 0x2
+    field public static final int USSD_OVER_CS_PREFERRED = 0; // 0x0
+    field public static final int USSD_OVER_IMS_ONLY = 3; // 0x3
+    field public static final int USSD_OVER_IMS_PREFERRED = 1; // 0x1
+  }
+
+  public static final class CarrierConfigManager.Apn {
+    field @Deprecated public static final String KEY_PREFIX = "apn.";
+    field public static final String KEY_SETTINGS_DEFAULT_PROTOCOL_STRING = "apn.settings_default_protocol_string";
+    field public static final String KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING = "apn.settings_default_roaming_protocol_string";
+    field public static final String PROTOCOL_IPV4 = "IP";
+    field public static final String PROTOCOL_IPV4V6 = "IPV4V6";
+    field public static final String PROTOCOL_IPV6 = "IPV6";
+  }
+
+  public static final class CarrierConfigManager.Gps {
+    field public static final String KEY_PERSIST_LPP_MODE_BOOL = "gps.persist_lpp_mode_bool";
+    field public static final String KEY_PREFIX = "gps.";
+  }
+
+  public static final class CarrierConfigManager.Ims {
+    field public static final String KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL = "ims.enable_presence_capability_exchange_bool";
+    field public static final String KEY_ENABLE_PRESENCE_GROUP_SUBSCRIBE_BOOL = "ims.enable_presence_group_subscribe_bool";
+    field public static final String KEY_ENABLE_PRESENCE_PUBLISH_BOOL = "ims.enable_presence_publish_bool";
+    field public static final String KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL = "ims.ims_single_registration_required_bool";
+    field public static final String KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT = "ims.non_rcs_capabilities_cache_expiration_sec_int";
+    field public static final String KEY_PREFIX = "ims.";
+    field public static final String KEY_RCS_BULK_CAPABILITY_EXCHANGE_BOOL = "ims.rcs_bulk_capability_exchange_bool";
+    field public static final String KEY_RCS_FEATURE_TAG_ALLOWED_STRING_ARRAY = "ims.rcs_feature_tag_allowed_string_array";
+    field public static final String KEY_WIFI_OFF_DEFERRING_TIME_MILLIS_INT = "ims.wifi_off_deferring_time_millis_int";
+  }
+
+  public static final class CarrierConfigManager.ImsServiceEntitlement {
+    field public static final String KEY_ENTITLEMENT_SERVER_URL_STRING = "imsserviceentitlement.entitlement_server_url_string";
+    field public static final String KEY_FCM_SENDER_ID_STRING = "imsserviceentitlement.fcm_sender_id_string";
+    field public static final String KEY_IMS_PROVISIONING_BOOL = "imsserviceentitlement.ims_provisioning_bool";
+    field public static final String KEY_PREFIX = "imsserviceentitlement.";
+    field public static final String KEY_SHOW_VOWIFI_WEBVIEW_BOOL = "imsserviceentitlement.show_vowifi_webview_bool";
+  }
+
+  public static final class CarrierConfigManager.Iwlan {
+    field public static final int AUTHENTICATION_METHOD_CERT = 1; // 0x1
+    field public static final int AUTHENTICATION_METHOD_EAP_ONLY = 0; // 0x0
+    field public static final int EPDG_ADDRESS_CELLULAR_LOC = 3; // 0x3
+    field public static final int EPDG_ADDRESS_PCO = 2; // 0x2
+    field public static final int EPDG_ADDRESS_PLMN = 1; // 0x1
+    field public static final int EPDG_ADDRESS_STATIC = 0; // 0x0
+    field public static final int ID_TYPE_FQDN = 2; // 0x2
+    field public static final int ID_TYPE_KEY_ID = 11; // 0xb
+    field public static final int ID_TYPE_RFC822_ADDR = 3; // 0x3
+    field public static final String KEY_ADD_KE_TO_CHILD_SESSION_REKEY_BOOL = "iwlan.add_ke_to_child_session_rekey_bool";
+    field public static final String KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT = "iwlan.child_sa_rekey_hard_timer_sec_int";
+    field public static final String KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT = "iwlan.child_sa_rekey_soft_timer_sec_int";
+    field public static final String KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY = "iwlan.child_session_aes_cbc_key_size_int_array";
+    field public static final String KEY_CHILD_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY = "iwlan.child_session_aes_ctr_key_size_int_array";
+    field public static final String KEY_DIFFIE_HELLMAN_GROUPS_INT_ARRAY = "iwlan.diffie_hellman_groups_int_array";
+    field public static final String KEY_DPD_TIMER_SEC_INT = "iwlan.dpd_timer_sec_int";
+    field public static final String KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY = "iwlan.epdg_address_priority_int_array";
+    field public static final String KEY_EPDG_AUTHENTICATION_METHOD_INT = "iwlan.epdg_authentication_method_int";
+    field public static final String KEY_EPDG_PCO_ID_IPV4_INT = "iwlan.epdg_pco_id_ipv4_int";
+    field public static final String KEY_EPDG_PCO_ID_IPV6_INT = "iwlan.epdg_pco_id_ipv6_int";
+    field public static final String KEY_EPDG_STATIC_ADDRESS_ROAMING_STRING = "iwlan.epdg_static_address_roaming_string";
+    field public static final String KEY_EPDG_STATIC_ADDRESS_STRING = "iwlan.epdg_static_address_string";
+    field public static final String KEY_IKE_LOCAL_ID_TYPE_INT = "iwlan.ike_local_id_type_int";
+    field public static final String KEY_IKE_REKEY_HARD_TIMER_SEC_INT = "iwlan.ike_rekey_hard_timer_in_sec";
+    field public static final String KEY_IKE_REKEY_SOFT_TIMER_SEC_INT = "iwlan.ike_rekey_soft_timer_sec_int";
+    field public static final String KEY_IKE_REMOTE_ID_TYPE_INT = "iwlan.ike_remote_id_type_int";
+    field public static final String KEY_IKE_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY = "iwlan.ike_session_encryption_aes_cbc_key_size_int_array";
+    field public static final String KEY_IKE_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY = "iwlan.ike_session_encryption_aes_ctr_key_size_int_array";
+    field public static final String KEY_MAX_RETRIES_INT = "iwlan.max_retries_int";
+    field public static final String KEY_MCC_MNCS_STRING_ARRAY = "iwlan.mcc_mncs_string_array";
+    field public static final String KEY_NATT_KEEP_ALIVE_TIMER_SEC_INT = "iwlan.natt_keep_alive_timer_sec_int";
+    field public static final String KEY_PREFIX = "iwlan.";
+    field public static final String KEY_RETRANSMIT_TIMER_MSEC_INT_ARRAY = "iwlan.retransmit_timer_sec_int_array";
+    field public static final String KEY_SUPPORTED_CHILD_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY = "iwlan.supported_child_session_encryption_algorithms_int_array";
+    field public static final String KEY_SUPPORTED_IKE_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY = "iwlan.supported_ike_session_encryption_algorithms_int_array";
+    field public static final String KEY_SUPPORTED_INTEGRITY_ALGORITHMS_INT_ARRAY = "iwlan.supported_integrity_algorithms_int_array";
+    field public static final String KEY_SUPPORTED_PRF_ALGORITHMS_INT_ARRAY = "iwlan.supported_prf_algorithms_int_array";
+  }
+
+  public abstract class CellIdentity implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getOperatorAlphaLong();
+    method @Nullable public CharSequence getOperatorAlphaShort();
+    method @CallSuper public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentity> CREATOR;
+  }
+
+  public final class CellIdentityCdma extends android.telephony.CellIdentity {
+    method public int getBasestationId();
+    method public int getLatitude();
+    method public int getLongitude();
+    method public int getNetworkId();
+    method public int getSystemId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityCdma> CREATOR;
+  }
+
+  public final class CellIdentityGsm extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method public int getArfcn();
+    method public int getBsic();
+    method public int getCid();
+    method public int getLac();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method @Deprecated public int getPsc();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityGsm> CREATOR;
+  }
+
+  public final class CellIdentityLte extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method @NonNull public int[] getBands();
+    method public int getBandwidth();
+    method public int getCi();
+    method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
+    method public int getEarfcn();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method public int getPci();
+    method public int getTac();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityLte> CREATOR;
+  }
+
+  public final class CellIdentityNr extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method @NonNull public int[] getBands();
+    method @Nullable public String getMccString();
+    method @Nullable public String getMncString();
+    method public long getNci();
+    method @IntRange(from=0, to=3279165) public int getNrarfcn();
+    method @IntRange(from=0, to=1007) public int getPci();
+    method @IntRange(from=0, to=16777215) public int getTac();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityNr> CREATOR;
+  }
+
+  public final class CellIdentityTdscdma extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method public int getCid();
+    method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
+    method public int getCpid();
+    method public int getLac();
+    method @Nullable public String getMccString();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method public int getUarfcn();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityTdscdma> CREATOR;
+  }
+
+  public final class CellIdentityWcdma extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method public int getCid();
+    method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
+    method public int getLac();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method public int getPsc();
+    method public int getUarfcn();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityWcdma> CREATOR;
+  }
+
+  public abstract class CellInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCellConnectionStatus();
+    method @NonNull public abstract android.telephony.CellIdentity getCellIdentity();
+    method @NonNull public abstract android.telephony.CellSignalStrength getCellSignalStrength();
+    method @Deprecated public long getTimeStamp();
+    method public long getTimestampMillis();
+    method public boolean isRegistered();
+    field public static final int CONNECTION_NONE = 0; // 0x0
+    field public static final int CONNECTION_PRIMARY_SERVING = 1; // 0x1
+    field public static final int CONNECTION_SECONDARY_SERVING = 2; // 0x2
+    field public static final int CONNECTION_UNKNOWN = 2147483647; // 0x7fffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfo> CREATOR;
+    field public static final int UNAVAILABLE = 2147483647; // 0x7fffffff
+    field public static final long UNAVAILABLE_LONG = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+  public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityCdma getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthCdma getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoCdma> CREATOR;
+  }
+
+  public final class CellInfoGsm extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityGsm getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthGsm getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoGsm> CREATOR;
+  }
+
+  public final class CellInfoLte extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityLte getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthLte getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoLte> CREATOR;
+  }
+
+  public final class CellInfoNr extends android.telephony.CellInfo {
+    method @NonNull public android.telephony.CellIdentity getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrength getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoNr> CREATOR;
+  }
+
+  public final class CellInfoTdscdma extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityTdscdma getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthTdscdma getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoTdscdma> CREATOR;
+  }
+
+  public final class CellInfoWcdma extends android.telephony.CellInfo implements android.os.Parcelable {
+    method public android.telephony.CellIdentityWcdma getCellIdentity();
+    method public android.telephony.CellSignalStrengthWcdma getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoWcdma> CREATOR;
+  }
+
+  @Deprecated public abstract class CellLocation {
+    ctor @Deprecated public CellLocation();
+    method @Deprecated public static android.telephony.CellLocation getEmpty();
+    method @Deprecated public static void requestLocationUpdate();
+  }
+
+  public abstract class CellSignalStrength {
+    method public abstract boolean equals(Object);
+    method public abstract int getAsuLevel();
+    method public abstract int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public abstract int getLevel();
+    method public abstract int hashCode();
+    field public static final int SIGNAL_STRENGTH_GOOD = 3; // 0x3
+    field public static final int SIGNAL_STRENGTH_GREAT = 4; // 0x4
+    field public static final int SIGNAL_STRENGTH_MODERATE = 2; // 0x2
+    field public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0; // 0x0
+    field public static final int SIGNAL_STRENGTH_POOR = 1; // 0x1
+  }
+
+  public final class CellSignalStrengthCdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getCdmaDbm();
+    method public int getCdmaEcio();
+    method public int getCdmaLevel();
+    method public int getDbm();
+    method public int getEvdoDbm();
+    method public int getEvdoEcio();
+    method public int getEvdoLevel();
+    method public int getEvdoSnr();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthCdma> CREATOR;
+  }
+
+  public final class CellSignalStrengthGsm extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getBitErrorRate();
+    method public int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public int getRssi();
+    method public int getTimingAdvance();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthGsm> CREATOR;
+  }
+
+  public final class CellSignalStrengthLte extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method @IntRange(from=0, to=15) public int getCqi();
+    method @IntRange(from=1, to=6) public int getCqiTableIndex();
+    method public int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public int getRsrp();
+    method public int getRsrq();
+    method public int getRssi();
+    method public int getRssnr();
+    method public int getTimingAdvance();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthLte> CREATOR;
+  }
+
+  public final class CellSignalStrengthNr extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method @IntRange(from=0, to=15) @NonNull public java.util.List<java.lang.Integer> getCsiCqiReport();
+    method @IntRange(from=1, to=3) public int getCsiCqiTableIndex();
+    method public int getCsiRsrp();
+    method public int getCsiRsrq();
+    method public int getCsiSinr();
+    method public int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public int getSsRsrp();
+    method public int getSsRsrq();
+    method public int getSsSinr();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthNr> CREATOR;
+  }
+
+  public final class CellSignalStrengthTdscdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getDbm();
+    method @IntRange(from=0, to=4) public int getLevel();
+    method public int getRscp();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthTdscdma> CREATOR;
+  }
+
+  public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getDbm();
+    method public int getEcNo();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthWcdma> CREATOR;
+  }
+
+  public final class ClosedSubscriberGroupInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0, to=134217727) public int getCsgIdentity();
+    method public boolean getCsgIndicator();
+    method @NonNull public String getHomeNodebName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ClosedSubscriberGroupInfo> CREATOR;
+  }
+
+  public final class DataFailCause {
+    field public static final int ACCESS_ATTEMPT_ALREADY_IN_PROGRESS = 2219; // 0x8ab
+    field public static final int ACCESS_BLOCK = 2087; // 0x827
+    field public static final int ACCESS_BLOCK_ALL = 2088; // 0x828
+    field public static final int ACCESS_CLASS_DSAC_REJECTION = 2108; // 0x83c
+    field public static final int ACCESS_CONTROL_LIST_CHECK_FAILURE = 2128; // 0x850
+    field public static final int ACTIVATION_REJECTED_BCM_VIOLATION = 48; // 0x30
+    field public static final int ACTIVATION_REJECT_GGSN = 30; // 0x1e
+    field public static final int ACTIVATION_REJECT_UNSPECIFIED = 31; // 0x1f
+    field public static final int ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED = 65; // 0x41
+    field public static final int ALL_MATCHING_RULES_FAILED = 2254; // 0x8ce
+    field public static final int APN_DISABLED = 2045; // 0x7fd
+    field public static final int APN_DISALLOWED_ON_ROAMING = 2059; // 0x80b
+    field public static final int APN_MISMATCH = 2054; // 0x806
+    field public static final int APN_PARAMETERS_CHANGED = 2060; // 0x80c
+    field public static final int APN_PENDING_HANDOVER = 2041; // 0x7f9
+    field public static final int APN_TYPE_CONFLICT = 112; // 0x70
+    field public static final int AUTH_FAILURE_ON_EMERGENCY_CALL = 122; // 0x7a
+    field public static final int BEARER_HANDLING_NOT_SUPPORTED = 60; // 0x3c
+    field public static final int CALL_DISALLOWED_IN_ROAMING = 2068; // 0x814
+    field public static final int CALL_PREEMPT_BY_EMERGENCY_APN = 127; // 0x7f
+    field public static final int CANNOT_ENCODE_OTA_MESSAGE = 2159; // 0x86f
+    field public static final int CDMA_ALERT_STOP = 2077; // 0x81d
+    field public static final int CDMA_INCOMING_CALL = 2076; // 0x81c
+    field public static final int CDMA_INTERCEPT = 2073; // 0x819
+    field public static final int CDMA_LOCK = 2072; // 0x818
+    field public static final int CDMA_RELEASE_DUE_TO_SO_REJECTION = 2075; // 0x81b
+    field public static final int CDMA_REORDER = 2074; // 0x81a
+    field public static final int CDMA_RETRY_ORDER = 2086; // 0x826
+    field public static final int CHANNEL_ACQUISITION_FAILURE = 2078; // 0x81e
+    field public static final int CLOSE_IN_PROGRESS = 2030; // 0x7ee
+    field public static final int COLLISION_WITH_NETWORK_INITIATED_REQUEST = 56; // 0x38
+    field public static final int COMPANION_IFACE_IN_USE = 118; // 0x76
+    field public static final int CONCURRENT_SERVICES_INCOMPATIBLE = 2083; // 0x823
+    field public static final int CONCURRENT_SERVICES_NOT_ALLOWED = 2091; // 0x82b
+    field public static final int CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION = 2080; // 0x820
+    field public static final int CONDITIONAL_IE_ERROR = 100; // 0x64
+    field public static final int CONGESTION = 2106; // 0x83a
+    field public static final int CONNECTION_RELEASED = 2113; // 0x841
+    field public static final int CS_DOMAIN_NOT_AVAILABLE = 2181; // 0x885
+    field public static final int CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED = 2188; // 0x88c
+    field public static final int DATA_PLAN_EXPIRED = 2198; // 0x896
+    field public static final int DATA_ROAMING_SETTINGS_DISABLED = 2064; // 0x810
+    field public static final int DATA_SETTINGS_DISABLED = 2063; // 0x80f
+    field public static final int DBM_OR_SMS_IN_PROGRESS = 2211; // 0x8a3
+    field public static final int DDS_SWITCHED = 2065; // 0x811
+    field public static final int DDS_SWITCH_IN_PROGRESS = 2067; // 0x813
+    field public static final int DRB_RELEASED_BY_RRC = 2112; // 0x840
+    field public static final int DS_EXPLICIT_DEACTIVATION = 2125; // 0x84d
+    field public static final int DUAL_SWITCH = 2227; // 0x8b3
+    field public static final int DUN_CALL_DISALLOWED = 2056; // 0x808
+    field public static final int DUPLICATE_BEARER_ID = 2118; // 0x846
+    field public static final int EHRPD_TO_HRPD_FALLBACK = 2049; // 0x801
+    field public static final int EMBMS_NOT_ENABLED = 2193; // 0x891
+    field public static final int EMBMS_REGULAR_DEACTIVATION = 2195; // 0x893
+    field public static final int EMERGENCY_IFACE_ONLY = 116; // 0x74
+    field public static final int EMERGENCY_MODE = 2221; // 0x8ad
+    field public static final int EMM_ACCESS_BARRED = 115; // 0x73
+    field public static final int EMM_ACCESS_BARRED_INFINITE_RETRY = 121; // 0x79
+    field public static final int EMM_ATTACH_FAILED = 2115; // 0x843
+    field public static final int EMM_ATTACH_STARTED = 2116; // 0x844
+    field public static final int EMM_DETACHED = 2114; // 0x842
+    field public static final int EMM_T3417_EXPIRED = 2130; // 0x852
+    field public static final int EMM_T3417_EXT_EXPIRED = 2131; // 0x853
+    field public static final int EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED = 2178; // 0x882
+    field public static final int EPS_SERVICES_NOT_ALLOWED_IN_PLMN = 2179; // 0x883
+    field public static final int ERROR_UNSPECIFIED = 65535; // 0xffff
+    field public static final int ESM_BAD_OTA_MESSAGE = 2122; // 0x84a
+    field public static final int ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK = 2120; // 0x848
+    field public static final int ESM_COLLISION_SCENARIOS = 2119; // 0x847
+    field public static final int ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT = 2124; // 0x84c
+    field public static final int ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL = 2123; // 0x84b
+    field public static final int ESM_FAILURE = 2182; // 0x886
+    field public static final int ESM_INFO_NOT_RECEIVED = 53; // 0x35
+    field public static final int ESM_LOCAL_CAUSE_NONE = 2126; // 0x84e
+    field public static final int ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER = 2121; // 0x849
+    field public static final int ESM_PROCEDURE_TIME_OUT = 2155; // 0x86b
+    field public static final int ESM_UNKNOWN_EPS_BEARER_CONTEXT = 2111; // 0x83f
+    field public static final int EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE = 2201; // 0x899
+    field public static final int EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY = 2200; // 0x898
+    field public static final int EVDO_HDR_CHANGED = 2202; // 0x89a
+    field public static final int EVDO_HDR_CONNECTION_SETUP_TIMEOUT = 2206; // 0x89e
+    field public static final int EVDO_HDR_EXITED = 2203; // 0x89b
+    field public static final int EVDO_HDR_NO_SESSION = 2204; // 0x89c
+    field public static final int EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL = 2205; // 0x89d
+    field public static final int FADE = 2217; // 0x8a9
+    field public static final int FAILED_TO_ACQUIRE_COLOCATED_HDR = 2207; // 0x89f
+    field public static final int FEATURE_NOT_SUPP = 40; // 0x28
+    field public static final int FILTER_SEMANTIC_ERROR = 44; // 0x2c
+    field public static final int FILTER_SYTAX_ERROR = 45; // 0x2d
+    field public static final int FORBIDDEN_APN_NAME = 2066; // 0x812
+    field public static final int GPRS_REGISTRATION_FAIL = -2; // 0xfffffffe
+    field public static final int GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED = 2097; // 0x831
+    field public static final int GPRS_SERVICES_NOT_ALLOWED = 2098; // 0x832
+    field public static final int GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN = 2103; // 0x837
+    field public static final int HANDOFF_PREFERENCE_CHANGED = 2251; // 0x8cb
+    field public static final int HDR_ACCESS_FAILURE = 2213; // 0x8a5
+    field public static final int HDR_FADE = 2212; // 0x8a4
+    field public static final int HDR_NO_LOCK_GRANTED = 2210; // 0x8a2
+    field public static final int IFACE_AND_POL_FAMILY_MISMATCH = 120; // 0x78
+    field public static final int IFACE_MISMATCH = 117; // 0x75
+    field public static final int ILLEGAL_ME = 2096; // 0x830
+    field public static final int ILLEGAL_MS = 2095; // 0x82f
+    field public static final int IMEI_NOT_ACCEPTED = 2177; // 0x881
+    field public static final int IMPLICITLY_DETACHED = 2100; // 0x834
+    field public static final int IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER = 2176; // 0x880
+    field public static final int INCOMING_CALL_REJECTED = 2092; // 0x82c
+    field public static final int INSUFFICIENT_RESOURCES = 26; // 0x1a
+    field public static final int INTERFACE_IN_USE = 2058; // 0x80a
+    field public static final int INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN = 114; // 0x72
+    field public static final int INTERNAL_EPC_NONEPC_TRANSITION = 2057; // 0x809
+    field public static final int INVALID_CONNECTION_ID = 2156; // 0x86c
+    field public static final int INVALID_DNS_ADDR = 123; // 0x7b
+    field public static final int INVALID_EMM_STATE = 2190; // 0x88e
+    field public static final int INVALID_MANDATORY_INFO = 96; // 0x60
+    field public static final int INVALID_MODE = 2223; // 0x8af
+    field public static final int INVALID_PCSCF_ADDR = 113; // 0x71
+    field public static final int INVALID_PCSCF_OR_DNS_ADDRESS = 124; // 0x7c
+    field public static final int INVALID_PRIMARY_NSAPI = 2158; // 0x86e
+    field public static final int INVALID_SIM_STATE = 2224; // 0x8b0
+    field public static final int INVALID_TRANSACTION_ID = 81; // 0x51
+    field public static final int IPV6_ADDRESS_TRANSFER_FAILED = 2047; // 0x7ff
+    field public static final int IPV6_PREFIX_UNAVAILABLE = 2250; // 0x8ca
+    field public static final int IP_ADDRESS_MISMATCH = 119; // 0x77
+    field public static final int IP_VERSION_MISMATCH = 2055; // 0x807
+    field public static final int IRAT_HANDOVER_FAILED = 2194; // 0x892
+    field public static final int IS707B_MAX_ACCESS_PROBES = 2089; // 0x829
+    field public static final int IWLAN_AUTHORIZATION_REJECTED = 9003; // 0x232b
+    field public static final int IWLAN_DNS_RESOLUTION_NAME_FAILURE = 16388; // 0x4004
+    field public static final int IWLAN_DNS_RESOLUTION_TIMEOUT = 16389; // 0x4005
+    field public static final int IWLAN_IKEV2_AUTH_FAILURE = 16385; // 0x4001
+    field public static final int IWLAN_IKEV2_CERT_INVALID = 16387; // 0x4003
+    field public static final int IWLAN_IKEV2_CONFIG_FAILURE = 16384; // 0x4000
+    field public static final int IWLAN_IKEV2_MSG_TIMEOUT = 16386; // 0x4002
+    field public static final int IWLAN_ILLEGAL_ME = 9006; // 0x232e
+    field public static final int IWLAN_IMEI_NOT_ACCEPTED = 11005; // 0x2afd
+    field public static final int IWLAN_MAX_CONNECTION_REACHED = 8193; // 0x2001
+    field public static final int IWLAN_NETWORK_FAILURE = 10500; // 0x2904
+    field public static final int IWLAN_NON_3GPP_ACCESS_TO_EPC_NOT_ALLOWED = 9000; // 0x2328
+    field public static final int IWLAN_NO_APN_SUBSCRIPTION = 9002; // 0x232a
+    field public static final int IWLAN_PDN_CONNECTION_REJECTION = 8192; // 0x2000
+    field public static final int IWLAN_PLMN_NOT_ALLOWED = 11011; // 0x2b03
+    field public static final int IWLAN_RAT_TYPE_NOT_ALLOWED = 11001; // 0x2af9
+    field public static final int IWLAN_SEMANTIC_ERRORS_IN_PACKET_FILTERS = 8244; // 0x2034
+    field public static final int IWLAN_SEMANTIC_ERROR_IN_THE_TFT_OPERATION = 8241; // 0x2031
+    field public static final int IWLAN_SYNTACTICAL_ERRORS_IN_PACKET_FILTERS = 8245; // 0x2035
+    field public static final int IWLAN_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION = 8242; // 0x2032
+    field public static final int IWLAN_UNAUTHENTICATED_EMERGENCY_NOT_SUPPORTED = 11055; // 0x2b2f
+    field public static final int IWLAN_USER_UNKNOWN = 9001; // 0x2329
+    field public static final int LIMITED_TO_IPV4 = 2234; // 0x8ba
+    field public static final int LIMITED_TO_IPV6 = 2235; // 0x8bb
+    field public static final int LLC_SNDCP = 25; // 0x19
+    field public static final int LOCAL_END = 2215; // 0x8a7
+    field public static final int LOCATION_AREA_NOT_ALLOWED = 2102; // 0x836
+    field public static final int LOST_CONNECTION = 65540; // 0x10004
+    field public static final int LOWER_LAYER_REGISTRATION_FAILURE = 2197; // 0x895
+    field public static final int LOW_POWER_MODE_OR_POWERING_DOWN = 2044; // 0x7fc
+    field public static final int LTE_NAS_SERVICE_REQUEST_FAILED = 2117; // 0x845
+    field public static final int LTE_THROTTLING_NOT_REQUIRED = 2127; // 0x84f
+    field public static final int MAC_FAILURE = 2183; // 0x887
+    field public static final int MATCH_ALL_RULE_NOT_ALLOWED = 2253; // 0x8cd
+    field public static final int MAXIMIUM_NSAPIS_EXCEEDED = 2157; // 0x86d
+    field public static final int MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED = 2166; // 0x876
+    field public static final int MAX_ACCESS_PROBE = 2079; // 0x81f
+    field public static final int MAX_IPV4_CONNECTIONS = 2052; // 0x804
+    field public static final int MAX_IPV6_CONNECTIONS = 2053; // 0x805
+    field public static final int MAX_PPP_INACTIVITY_TIMER_EXPIRED = 2046; // 0x7fe
+    field public static final int MESSAGE_INCORRECT_SEMANTIC = 95; // 0x5f
+    field public static final int MESSAGE_TYPE_UNSUPPORTED = 97; // 0x61
+    field public static final int MIP_CONFIG_FAILURE = 2050; // 0x802
+    field public static final int MIP_FA_ADMIN_PROHIBITED = 2001; // 0x7d1
+    field public static final int MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED = 2012; // 0x7dc
+    field public static final int MIP_FA_ENCAPSULATION_UNAVAILABLE = 2008; // 0x7d8
+    field public static final int MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE = 2004; // 0x7d4
+    field public static final int MIP_FA_INSUFFICIENT_RESOURCES = 2002; // 0x7d2
+    field public static final int MIP_FA_MALFORMED_REPLY = 2007; // 0x7d7
+    field public static final int MIP_FA_MALFORMED_REQUEST = 2006; // 0x7d6
+    field public static final int MIP_FA_MISSING_CHALLENGE = 2017; // 0x7e1
+    field public static final int MIP_FA_MISSING_HOME_ADDRESS = 2015; // 0x7df
+    field public static final int MIP_FA_MISSING_HOME_AGENT = 2014; // 0x7de
+    field public static final int MIP_FA_MISSING_NAI = 2013; // 0x7dd
+    field public static final int MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE = 2003; // 0x7d3
+    field public static final int MIP_FA_REASON_UNSPECIFIED = 2000; // 0x7d0
+    field public static final int MIP_FA_REQUESTED_LIFETIME_TOO_LONG = 2005; // 0x7d5
+    field public static final int MIP_FA_REVERSE_TUNNEL_IS_MANDATORY = 2011; // 0x7db
+    field public static final int MIP_FA_REVERSE_TUNNEL_UNAVAILABLE = 2010; // 0x7da
+    field public static final int MIP_FA_STALE_CHALLENGE = 2018; // 0x7e2
+    field public static final int MIP_FA_UNKNOWN_CHALLENGE = 2016; // 0x7e0
+    field public static final int MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE = 2009; // 0x7d9
+    field public static final int MIP_HA_ADMIN_PROHIBITED = 2020; // 0x7e4
+    field public static final int MIP_HA_ENCAPSULATION_UNAVAILABLE = 2029; // 0x7ed
+    field public static final int MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE = 2023; // 0x7e7
+    field public static final int MIP_HA_INSUFFICIENT_RESOURCES = 2021; // 0x7e5
+    field public static final int MIP_HA_MALFORMED_REQUEST = 2025; // 0x7e9
+    field public static final int MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE = 2022; // 0x7e6
+    field public static final int MIP_HA_REASON_UNSPECIFIED = 2019; // 0x7e3
+    field public static final int MIP_HA_REGISTRATION_ID_MISMATCH = 2024; // 0x7e8
+    field public static final int MIP_HA_REVERSE_TUNNEL_IS_MANDATORY = 2028; // 0x7ec
+    field public static final int MIP_HA_REVERSE_TUNNEL_UNAVAILABLE = 2027; // 0x7eb
+    field public static final int MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS = 2026; // 0x7ea
+    field public static final int MISSING_UNKNOWN_APN = 27; // 0x1b
+    field public static final int MODEM_APP_PREEMPTED = 2032; // 0x7f0
+    field public static final int MODEM_RESTART = 2037; // 0x7f5
+    field public static final int MSC_TEMPORARILY_NOT_REACHABLE = 2180; // 0x884
+    field public static final int MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE = 101; // 0x65
+    field public static final int MSG_TYPE_NONCOMPATIBLE_STATE = 98; // 0x62
+    field public static final int MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK = 2099; // 0x833
+    field public static final int MULTIPLE_PDP_CALL_NOT_ALLOWED = 2192; // 0x890
+    field public static final int MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED = 55; // 0x37
+    field public static final int NAS_LAYER_FAILURE = 2191; // 0x88f
+    field public static final int NAS_REQUEST_REJECTED_BY_NETWORK = 2167; // 0x877
+    field public static final int NAS_SIGNALLING = 14; // 0xe
+    field public static final int NETWORK_FAILURE = 38; // 0x26
+    field public static final int NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH = 2154; // 0x86a
+    field public static final int NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH = 2153; // 0x869
+    field public static final int NETWORK_INITIATED_TERMINATION = 2031; // 0x7ef
+    field public static final int NONE = 0; // 0x0
+    field public static final int NON_IP_NOT_SUPPORTED = 2069; // 0x815
+    field public static final int NORMAL_RELEASE = 2218; // 0x8aa
+    field public static final int NO_CDMA_SERVICE = 2084; // 0x824
+    field public static final int NO_COLLOCATED_HDR = 2225; // 0x8b1
+    field public static final int NO_EPS_BEARER_CONTEXT_ACTIVATED = 2189; // 0x88d
+    field public static final int NO_GPRS_CONTEXT = 2094; // 0x82e
+    field public static final int NO_HYBRID_HDR_SERVICE = 2209; // 0x8a1
+    field public static final int NO_PDP_CONTEXT_ACTIVATED = 2107; // 0x83b
+    field public static final int NO_RESPONSE_FROM_BASE_STATION = 2081; // 0x821
+    field public static final int NO_SERVICE = 2216; // 0x8a8
+    field public static final int NO_SERVICE_ON_GATEWAY = 2093; // 0x82d
+    field public static final int NSAPI_IN_USE = 35; // 0x23
+    field public static final int NULL_APN_DISALLOWED = 2061; // 0x80d
+    field public static final int OEM_DCFAILCAUSE_1 = 4097; // 0x1001
+    field public static final int OEM_DCFAILCAUSE_10 = 4106; // 0x100a
+    field public static final int OEM_DCFAILCAUSE_11 = 4107; // 0x100b
+    field public static final int OEM_DCFAILCAUSE_12 = 4108; // 0x100c
+    field public static final int OEM_DCFAILCAUSE_13 = 4109; // 0x100d
+    field public static final int OEM_DCFAILCAUSE_14 = 4110; // 0x100e
+    field public static final int OEM_DCFAILCAUSE_15 = 4111; // 0x100f
+    field public static final int OEM_DCFAILCAUSE_2 = 4098; // 0x1002
+    field public static final int OEM_DCFAILCAUSE_3 = 4099; // 0x1003
+    field public static final int OEM_DCFAILCAUSE_4 = 4100; // 0x1004
+    field public static final int OEM_DCFAILCAUSE_5 = 4101; // 0x1005
+    field public static final int OEM_DCFAILCAUSE_6 = 4102; // 0x1006
+    field public static final int OEM_DCFAILCAUSE_7 = 4103; // 0x1007
+    field public static final int OEM_DCFAILCAUSE_8 = 4104; // 0x1008
+    field public static final int OEM_DCFAILCAUSE_9 = 4105; // 0x1009
+    field public static final int ONLY_IPV4V6_ALLOWED = 57; // 0x39
+    field public static final int ONLY_IPV4_ALLOWED = 50; // 0x32
+    field public static final int ONLY_IPV6_ALLOWED = 51; // 0x33
+    field public static final int ONLY_NON_IP_ALLOWED = 58; // 0x3a
+    field public static final int ONLY_SINGLE_BEARER_ALLOWED = 52; // 0x34
+    field public static final int OPERATOR_BARRED = 8; // 0x8
+    field public static final int OTASP_COMMIT_IN_PROGRESS = 2208; // 0x8a0
+    field public static final int PDN_CONN_DOES_NOT_EXIST = 54; // 0x36
+    field public static final int PDN_INACTIVITY_TIMER_EXPIRED = 2051; // 0x803
+    field public static final int PDN_IPV4_CALL_DISALLOWED = 2033; // 0x7f1
+    field public static final int PDN_IPV4_CALL_THROTTLED = 2034; // 0x7f2
+    field public static final int PDN_IPV6_CALL_DISALLOWED = 2035; // 0x7f3
+    field public static final int PDN_IPV6_CALL_THROTTLED = 2036; // 0x7f4
+    field public static final int PDN_NON_IP_CALL_DISALLOWED = 2071; // 0x817
+    field public static final int PDN_NON_IP_CALL_THROTTLED = 2070; // 0x816
+    field public static final int PDP_ACTIVATE_MAX_RETRY_FAILED = 2109; // 0x83d
+    field public static final int PDP_DUPLICATE = 2104; // 0x838
+    field public static final int PDP_ESTABLISH_TIMEOUT_EXPIRED = 2161; // 0x871
+    field public static final int PDP_INACTIVE_TIMEOUT_EXPIRED = 2163; // 0x873
+    field public static final int PDP_LOWERLAYER_ERROR = 2164; // 0x874
+    field public static final int PDP_MODIFY_COLLISION = 2165; // 0x875
+    field public static final int PDP_MODIFY_TIMEOUT_EXPIRED = 2162; // 0x872
+    field public static final int PDP_PPP_NOT_SUPPORTED = 2038; // 0x7f6
+    field public static final int PDP_WITHOUT_ACTIVE_TFT = 46; // 0x2e
+    field public static final int PHONE_IN_USE = 2222; // 0x8ae
+    field public static final int PHYSICAL_LINK_CLOSE_IN_PROGRESS = 2040; // 0x7f8
+    field public static final int PLMN_NOT_ALLOWED = 2101; // 0x835
+    field public static final int PPP_AUTH_FAILURE = 2229; // 0x8b5
+    field public static final int PPP_CHAP_FAILURE = 2232; // 0x8b8
+    field public static final int PPP_CLOSE_IN_PROGRESS = 2233; // 0x8b9
+    field public static final int PPP_OPTION_MISMATCH = 2230; // 0x8b6
+    field public static final int PPP_PAP_FAILURE = 2231; // 0x8b7
+    field public static final int PPP_TIMEOUT = 2228; // 0x8b4
+    field public static final int PREF_RADIO_TECH_CHANGED = -4; // 0xfffffffc
+    field public static final int PROFILE_BEARER_INCOMPATIBLE = 2042; // 0x7fa
+    field public static final int PROTOCOL_ERRORS = 111; // 0x6f
+    field public static final int QOS_NOT_ACCEPTED = 37; // 0x25
+    field public static final int RADIO_ACCESS_BEARER_FAILURE = 2110; // 0x83e
+    field public static final int RADIO_ACCESS_BEARER_SETUP_FAILURE = 2160; // 0x870
+    field public static final int RADIO_NOT_AVAILABLE = 65537; // 0x10001
+    field public static final int RADIO_POWER_OFF = -5; // 0xfffffffb
+    field public static final int REDIRECTION_OR_HANDOFF_IN_PROGRESS = 2220; // 0x8ac
+    field public static final int REGISTRATION_FAIL = -1; // 0xffffffff
+    field public static final int REGULAR_DEACTIVATION = 36; // 0x24
+    field public static final int REJECTED_BY_BASE_STATION = 2082; // 0x822
+    field public static final int RRC_CONNECTION_ABORTED_AFTER_HANDOVER = 2173; // 0x87d
+    field public static final int RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE = 2174; // 0x87e
+    field public static final int RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE = 2171; // 0x87b
+    field public static final int RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE = 2175; // 0x87f
+    field public static final int RRC_CONNECTION_ABORT_REQUEST = 2151; // 0x867
+    field public static final int RRC_CONNECTION_ACCESS_BARRED = 2139; // 0x85b
+    field public static final int RRC_CONNECTION_ACCESS_STRATUM_FAILURE = 2137; // 0x859
+    field public static final int RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS = 2138; // 0x85a
+    field public static final int RRC_CONNECTION_CELL_NOT_CAMPED = 2144; // 0x860
+    field public static final int RRC_CONNECTION_CELL_RESELECTION = 2140; // 0x85c
+    field public static final int RRC_CONNECTION_CONFIG_FAILURE = 2141; // 0x85d
+    field public static final int RRC_CONNECTION_INVALID_REQUEST = 2168; // 0x878
+    field public static final int RRC_CONNECTION_LINK_FAILURE = 2143; // 0x85f
+    field public static final int RRC_CONNECTION_NORMAL_RELEASE = 2147; // 0x863
+    field public static final int RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER = 2150; // 0x866
+    field public static final int RRC_CONNECTION_RADIO_LINK_FAILURE = 2148; // 0x864
+    field public static final int RRC_CONNECTION_REESTABLISHMENT_FAILURE = 2149; // 0x865
+    field public static final int RRC_CONNECTION_REJECT_BY_NETWORK = 2146; // 0x862
+    field public static final int RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE = 2172; // 0x87c
+    field public static final int RRC_CONNECTION_RF_UNAVAILABLE = 2170; // 0x87a
+    field public static final int RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR = 2152; // 0x868
+    field public static final int RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE = 2145; // 0x861
+    field public static final int RRC_CONNECTION_TIMER_EXPIRED = 2142; // 0x85e
+    field public static final int RRC_CONNECTION_TRACKING_AREA_ID_CHANGED = 2169; // 0x879
+    field public static final int RRC_UPLINK_CONNECTION_RELEASE = 2134; // 0x856
+    field public static final int RRC_UPLINK_DATA_TRANSMISSION_FAILURE = 2132; // 0x854
+    field public static final int RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER = 2133; // 0x855
+    field public static final int RRC_UPLINK_ERROR_REQUEST_FROM_NAS = 2136; // 0x858
+    field public static final int RRC_UPLINK_RADIO_LINK_FAILURE = 2135; // 0x857
+    field public static final int RUIM_NOT_PRESENT = 2085; // 0x825
+    field public static final int SECURITY_MODE_REJECTED = 2186; // 0x88a
+    field public static final int SERVICE_NOT_ALLOWED_ON_PLMN = 2129; // 0x851
+    field public static final int SERVICE_OPTION_NOT_SUBSCRIBED = 33; // 0x21
+    field public static final int SERVICE_OPTION_NOT_SUPPORTED = 32; // 0x20
+    field public static final int SERVICE_OPTION_OUT_OF_ORDER = 34; // 0x22
+    field public static final int SIGNAL_LOST = -3; // 0xfffffffd
+    field public static final int SIM_CARD_CHANGED = 2043; // 0x7fb
+    field public static final int SLICE_REJECTED = 2252; // 0x8cc
+    field public static final int SYNCHRONIZATION_FAILURE = 2184; // 0x888
+    field public static final int TEST_LOOPBACK_REGULAR_DEACTIVATION = 2196; // 0x894
+    field public static final int TETHERED_CALL_ACTIVE = -6; // 0xfffffffa
+    field public static final int TFT_SEMANTIC_ERROR = 41; // 0x29
+    field public static final int TFT_SYTAX_ERROR = 42; // 0x2a
+    field public static final int THERMAL_EMERGENCY = 2090; // 0x82a
+    field public static final int THERMAL_MITIGATION = 2062; // 0x80e
+    field public static final int TRAT_SWAP_FAILED = 2048; // 0x800
+    field public static final int UE_INITIATED_DETACH_OR_DISCONNECT = 128; // 0x80
+    field public static final int UE_IS_ENTERING_POWERSAVE_MODE = 2226; // 0x8b2
+    field public static final int UE_RAT_CHANGE = 2105; // 0x839
+    field public static final int UE_SECURITY_CAPABILITIES_MISMATCH = 2185; // 0x889
+    field public static final int UMTS_HANDOVER_TO_IWLAN = 2199; // 0x897
+    field public static final int UMTS_REACTIVATION_REQ = 39; // 0x27
+    field public static final int UNACCEPTABLE_NETWORK_PARAMETER = 65538; // 0x10002
+    field public static final int UNACCEPTABLE_NON_EPS_AUTHENTICATION = 2187; // 0x88b
+    field public static final int UNKNOWN = 65536; // 0x10000
+    field public static final int UNKNOWN_INFO_ELEMENT = 99; // 0x63
+    field public static final int UNKNOWN_PDP_ADDRESS_TYPE = 28; // 0x1c
+    field public static final int UNKNOWN_PDP_CONTEXT = 43; // 0x2b
+    field public static final int UNPREFERRED_RAT = 2039; // 0x7f7
+    field public static final int UNSUPPORTED_1X_PREV = 2214; // 0x8a6
+    field public static final int UNSUPPORTED_APN_IN_CURRENT_PLMN = 66; // 0x42
+    field public static final int UNSUPPORTED_QCI_VALUE = 59; // 0x3b
+    field public static final int USER_AUTHENTICATION = 29; // 0x1d
+    field public static final int VSNCP_ADMINISTRATIVELY_PROHIBITED = 2245; // 0x8c5
+    field public static final int VSNCP_APN_UNAUTHORIZED = 2238; // 0x8be
+    field public static final int VSNCP_GEN_ERROR = 2237; // 0x8bd
+    field public static final int VSNCP_INSUFFICIENT_PARAMETERS = 2243; // 0x8c3
+    field public static final int VSNCP_NO_PDN_GATEWAY_ADDRESS = 2240; // 0x8c0
+    field public static final int VSNCP_PDN_EXISTS_FOR_THIS_APN = 2248; // 0x8c8
+    field public static final int VSNCP_PDN_GATEWAY_REJECT = 2242; // 0x8c2
+    field public static final int VSNCP_PDN_GATEWAY_UNREACHABLE = 2241; // 0x8c1
+    field public static final int VSNCP_PDN_ID_IN_USE = 2246; // 0x8c6
+    field public static final int VSNCP_PDN_LIMIT_EXCEEDED = 2239; // 0x8bf
+    field public static final int VSNCP_RECONNECT_NOT_ALLOWED = 2249; // 0x8c9
+    field public static final int VSNCP_RESOURCE_UNAVAILABLE = 2244; // 0x8c4
+    field public static final int VSNCP_SUBSCRIBER_LIMITATION = 2247; // 0x8c7
+    field public static final int VSNCP_TIMEOUT = 2236; // 0x8bc
+  }
+
+  public final class DisconnectCause {
+    field public static final int ALREADY_DIALING = 72; // 0x48
+    field public static final int ANSWERED_ELSEWHERE = 52; // 0x34
+    field public static final int BUSY = 4; // 0x4
+    field public static final int CALLING_DISABLED = 74; // 0x4a
+    field public static final int CALL_BARRED = 20; // 0x14
+    field public static final int CALL_PULLED = 51; // 0x33
+    field public static final int CANT_CALL_WHILE_RINGING = 73; // 0x49
+    field public static final int CDMA_ACCESS_BLOCKED = 35; // 0x23
+    field public static final int CDMA_ACCESS_FAILURE = 32; // 0x20
+    field public static final int CDMA_ALREADY_ACTIVATED = 49; // 0x31
+    field public static final int CDMA_DROP = 27; // 0x1b
+    field public static final int CDMA_INTERCEPT = 28; // 0x1c
+    field public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 26; // 0x1a
+    field public static final int CDMA_NOT_EMERGENCY = 34; // 0x22
+    field public static final int CDMA_PREEMPTED = 33; // 0x21
+    field public static final int CDMA_REORDER = 29; // 0x1d
+    field public static final int CDMA_RETRY_ORDER = 31; // 0x1f
+    field public static final int CDMA_SO_REJECT = 30; // 0x1e
+    field public static final int CONGESTION = 5; // 0x5
+    field public static final int CS_RESTRICTED = 22; // 0x16
+    field public static final int CS_RESTRICTED_EMERGENCY = 24; // 0x18
+    field public static final int CS_RESTRICTED_NORMAL = 23; // 0x17
+    field public static final int DATA_DISABLED = 54; // 0x36
+    field public static final int DATA_LIMIT_REACHED = 55; // 0x37
+    field public static final int DIALED_CALL_FORWARDING_WHILE_ROAMING = 57; // 0x39
+    field public static final int DIALED_MMI = 39; // 0x27
+    field public static final int DIAL_LOW_BATTERY = 62; // 0x3e
+    field public static final int DIAL_MODIFIED_TO_DIAL = 48; // 0x30
+    field public static final int DIAL_MODIFIED_TO_DIAL_VIDEO = 66; // 0x42
+    field public static final int DIAL_MODIFIED_TO_SS = 47; // 0x2f
+    field public static final int DIAL_MODIFIED_TO_USSD = 46; // 0x2e
+    field public static final int DIAL_VIDEO_MODIFIED_TO_DIAL = 69; // 0x45
+    field public static final int DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 70; // 0x46
+    field public static final int DIAL_VIDEO_MODIFIED_TO_SS = 67; // 0x43
+    field public static final int DIAL_VIDEO_MODIFIED_TO_USSD = 68; // 0x44
+    field public static final int EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE = 78; // 0x4e
+    field public static final int EMERGENCY_PERM_FAILURE = 64; // 0x40
+    field public static final int EMERGENCY_TEMP_FAILURE = 63; // 0x3f
+    field public static final int ERROR_UNSPECIFIED = 36; // 0x24
+    field public static final int FDN_BLOCKED = 21; // 0x15
+    field public static final int ICC_ERROR = 19; // 0x13
+    field public static final int IMEI_NOT_ACCEPTED = 58; // 0x3a
+    field public static final int IMS_ACCESS_BLOCKED = 60; // 0x3c
+    field public static final int IMS_MERGED_SUCCESSFULLY = 45; // 0x2d
+    field public static final int IMS_SIP_ALTERNATE_EMERGENCY_CALL = 71; // 0x47
+    field public static final int INCOMING_AUTO_REJECTED = 81; // 0x51
+    field public static final int INCOMING_MISSED = 1; // 0x1
+    field public static final int INCOMING_REJECTED = 16; // 0x10
+    field public static final int INVALID_CREDENTIALS = 10; // 0xa
+    field public static final int INVALID_NUMBER = 7; // 0x7
+    field public static final int LIMIT_EXCEEDED = 15; // 0xf
+    field public static final int LOCAL = 3; // 0x3
+    field public static final int LOST_SIGNAL = 14; // 0xe
+    field public static final int LOW_BATTERY = 61; // 0x3d
+    field public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53; // 0x35
+    field public static final int MEDIA_TIMEOUT = 77; // 0x4d
+    field public static final int MMI = 6; // 0x6
+    field public static final int NORMAL = 2; // 0x2
+    field public static final int NORMAL_UNSPECIFIED = 65; // 0x41
+    field public static final int NOT_DISCONNECTED = 0; // 0x0
+    field public static final int NOT_VALID = -1; // 0xffffffff
+    field public static final int NO_PHONE_NUMBER_SUPPLIED = 38; // 0x26
+    field public static final int NUMBER_UNREACHABLE = 8; // 0x8
+    field public static final int OTASP_PROVISIONING_IN_PROCESS = 76; // 0x4c
+    field public static final int OUTGOING_CANCELED = 44; // 0x2c
+    field public static final int OUTGOING_EMERGENCY_CALL_PLACED = 80; // 0x50
+    field public static final int OUTGOING_FAILURE = 43; // 0x2b
+    field public static final int OUT_OF_NETWORK = 11; // 0xb
+    field public static final int OUT_OF_SERVICE = 18; // 0x12
+    field public static final int POWER_OFF = 17; // 0x11
+    field public static final int SERVER_ERROR = 12; // 0xc
+    field public static final int SERVER_UNREACHABLE = 9; // 0x9
+    field public static final int TIMED_OUT = 13; // 0xd
+    field public static final int TOO_MANY_ONGOING_CALLS = 75; // 0x4b
+    field public static final int UNOBTAINABLE_NUMBER = 25; // 0x19
+    field public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50; // 0x32
+    field public static final int VOICEMAIL_NUMBER_MISSING = 40; // 0x28
+    field public static final int WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION = 79; // 0x4f
+    field public static final int WIFI_LOST = 59; // 0x3b
+  }
+
+  public class IccOpenLogicalChannelResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getChannel();
+    method public byte[] getSelectResponse();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.IccOpenLogicalChannelResponse> CREATOR;
+    field public static final int INVALID_CHANNEL = -1; // 0xffffffff
+    field public static final int STATUS_MISSING_RESOURCE = 2; // 0x2
+    field public static final int STATUS_NO_ERROR = 1; // 0x1
+    field public static final int STATUS_NO_SUCH_ELEMENT = 3; // 0x3
+    field public static final int STATUS_UNKNOWN_ERROR = 4; // 0x4
+  }
+
+  public class MbmsDownloadSession implements java.lang.AutoCloseable {
+    method public void addProgressListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.DownloadProgressListener);
+    method public void addServiceAnnouncement(@NonNull byte[]);
+    method public void addStatusListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.DownloadStatusListener);
+    method public void cancelDownload(@NonNull android.telephony.mbms.DownloadRequest);
+    method public void close();
+    method public static android.telephony.MbmsDownloadSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsDownloadSessionCallback);
+    method @Nullable public static android.telephony.MbmsDownloadSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, int, @NonNull android.telephony.mbms.MbmsDownloadSessionCallback);
+    method public void download(@NonNull android.telephony.mbms.DownloadRequest);
+    method public static int getMaximumServiceAnnouncementSize();
+    method @Nullable public java.io.File getTempFileRootDirectory();
+    method @NonNull public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads();
+    method public void removeProgressListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull android.telephony.mbms.DownloadProgressListener);
+    method public void removeStatusListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull android.telephony.mbms.DownloadStatusListener);
+    method public void requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo);
+    method public void requestUpdateFileServices(@NonNull java.util.List<java.lang.String>);
+    method public void resetDownloadKnowledge(android.telephony.mbms.DownloadRequest);
+    method public void setTempFileRootDirectory(@NonNull java.io.File);
+    field public static final String DEFAULT_TOP_LEVEL_TEMP_DIRECTORY = "androidMbmsTempFileRoot";
+    field public static final String EXTRA_MBMS_COMPLETED_FILE_URI = "android.telephony.extra.MBMS_COMPLETED_FILE_URI";
+    field public static final String EXTRA_MBMS_DOWNLOAD_REQUEST = "android.telephony.extra.MBMS_DOWNLOAD_REQUEST";
+    field public static final String EXTRA_MBMS_DOWNLOAD_RESULT = "android.telephony.extra.MBMS_DOWNLOAD_RESULT";
+    field public static final String EXTRA_MBMS_FILE_INFO = "android.telephony.extra.MBMS_FILE_INFO";
+    field public static final int RESULT_CANCELLED = 2; // 0x2
+    field public static final int RESULT_DOWNLOAD_FAILURE = 6; // 0x6
+    field public static final int RESULT_EXPIRED = 3; // 0x3
+    field public static final int RESULT_FILE_ROOT_UNREACHABLE = 8; // 0x8
+    field public static final int RESULT_IO_ERROR = 4; // 0x4
+    field public static final int RESULT_OUT_OF_STORAGE = 7; // 0x7
+    field public static final int RESULT_SERVICE_ID_NOT_DEFINED = 5; // 0x5
+    field public static final int RESULT_SUCCESSFUL = 1; // 0x1
+    field public static final int STATUS_ACTIVELY_DOWNLOADING = 1; // 0x1
+    field public static final int STATUS_PENDING_DOWNLOAD = 2; // 0x2
+    field public static final int STATUS_PENDING_DOWNLOAD_WINDOW = 4; // 0x4
+    field public static final int STATUS_PENDING_REPAIR = 3; // 0x3
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public class MbmsGroupCallSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Nullable public static android.telephony.MbmsGroupCallSession create(@NonNull android.content.Context, int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsGroupCallSessionCallback);
+    method @Nullable public static android.telephony.MbmsGroupCallSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsGroupCallSessionCallback);
+    method @Nullable public android.telephony.mbms.GroupCall startGroupCall(long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.GroupCallCallback);
+  }
+
+  public class MbmsStreamingSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Nullable public static android.telephony.MbmsStreamingSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, int, @NonNull android.telephony.mbms.MbmsStreamingSessionCallback);
+    method public static android.telephony.MbmsStreamingSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsStreamingSessionCallback);
+    method public void requestUpdateStreamingServices(java.util.List<java.lang.String>);
+    method @Nullable public android.telephony.mbms.StreamingService startStreaming(android.telephony.mbms.StreamingServiceInfo, @NonNull java.util.concurrent.Executor, android.telephony.mbms.StreamingServiceCallback);
+  }
+
+  @Deprecated public class NeighboringCellInfo implements android.os.Parcelable {
+    ctor @Deprecated public NeighboringCellInfo();
+    ctor @Deprecated public NeighboringCellInfo(int, int);
+    ctor @Deprecated public NeighboringCellInfo(int, String, int);
+    ctor @Deprecated public NeighboringCellInfo(android.os.Parcel);
+    method @Deprecated public int describeContents();
+    method @Deprecated public int getCid();
+    method @Deprecated public int getLac();
+    method @Deprecated public int getNetworkType();
+    method @Deprecated public int getPsc();
+    method @Deprecated public int getRssi();
+    method @Deprecated public void setCid(int);
+    method @Deprecated public void setRssi(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.telephony.NeighboringCellInfo> CREATOR;
+    field @Deprecated public static final int UNKNOWN_CID = -1; // 0xffffffff
+    field @Deprecated public static final int UNKNOWN_RSSI = 99; // 0x63
+  }
+
+  public final class NetworkRegistrationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAccessNetworkTechnology();
+    method @NonNull public java.util.List<java.lang.Integer> getAvailableServices();
+    method @Nullable public android.telephony.CellIdentity getCellIdentity();
+    method public int getDomain();
+    method @Nullable public String getRegisteredPlmn();
+    method public int getTransportType();
+    method public boolean isRegistered();
+    method public boolean isRoaming();
+    method public boolean isSearching();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NetworkRegistrationInfo> CREATOR;
+    field public static final int DOMAIN_CS = 1; // 0x1
+    field public static final int DOMAIN_CS_PS = 3; // 0x3
+    field public static final int DOMAIN_PS = 2; // 0x2
+    field public static final int DOMAIN_UNKNOWN = 0; // 0x0
+    field public static final int NR_STATE_CONNECTED = 3; // 0x3
+    field public static final int NR_STATE_NONE = 0; // 0x0
+    field public static final int NR_STATE_NOT_RESTRICTED = 2; // 0x2
+    field public static final int NR_STATE_RESTRICTED = 1; // 0x1
+    field public static final int SERVICE_TYPE_DATA = 2; // 0x2
+    field public static final int SERVICE_TYPE_EMERGENCY = 5; // 0x5
+    field public static final int SERVICE_TYPE_SMS = 3; // 0x3
+    field public static final int SERVICE_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int SERVICE_TYPE_VIDEO = 4; // 0x4
+    field public static final int SERVICE_TYPE_VOICE = 1; // 0x1
+  }
+
+  public class NetworkScan {
+    method public void stopScan();
+    field public static final int ERROR_INTERRUPTED = 10002; // 0x2712
+    field public static final int ERROR_INVALID_SCAN = 2; // 0x2
+    field public static final int ERROR_INVALID_SCANID = 10001; // 0x2711
+    field public static final int ERROR_MODEM_ERROR = 1; // 0x1
+    field public static final int ERROR_MODEM_UNAVAILABLE = 3; // 0x3
+    field public static final int ERROR_RADIO_INTERFACE_ERROR = 10000; // 0x2710
+    field public static final int ERROR_UNSUPPORTED = 4; // 0x4
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public final class NetworkScanRequest implements android.os.Parcelable {
+    ctor public NetworkScanRequest(int, android.telephony.RadioAccessSpecifier[], int, int, boolean, int, java.util.ArrayList<java.lang.String>);
+    method public int describeContents();
+    method public boolean getIncrementalResults();
+    method public int getIncrementalResultsPeriodicity();
+    method public int getMaxSearchTime();
+    method public java.util.ArrayList<java.lang.String> getPlmns();
+    method public int getScanType();
+    method public int getSearchPeriodicity();
+    method public android.telephony.RadioAccessSpecifier[] getSpecifiers();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NetworkScanRequest> CREATOR;
+    field public static final int SCAN_TYPE_ONE_SHOT = 0; // 0x0
+    field public static final int SCAN_TYPE_PERIODIC = 1; // 0x1
+  }
+
+  public class PhoneNumberFormattingTextWatcher implements android.text.TextWatcher {
+    ctor public PhoneNumberFormattingTextWatcher();
+    ctor public PhoneNumberFormattingTextWatcher(String);
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+  public class PhoneNumberUtils {
+    ctor public PhoneNumberUtils();
+    method public static void addTtsSpan(android.text.Spannable, int, int);
+    method public static boolean areSamePhoneNumber(@NonNull String, @NonNull String, @NonNull String);
+    method @Deprecated public static String calledPartyBCDFragmentToString(byte[], int, int);
+    method public static String calledPartyBCDFragmentToString(byte[], int, int, int);
+    method @Deprecated public static String calledPartyBCDToString(byte[], int, int);
+    method public static String calledPartyBCDToString(byte[], int, int, int);
+    method @Deprecated public static boolean compare(String, String);
+    method @Deprecated public static boolean compare(android.content.Context, String, String);
+    method public static String convertKeypadLettersToDigits(String);
+    method public static android.text.style.TtsSpan createTtsSpan(String);
+    method public static CharSequence createTtsSpannable(CharSequence);
+    method public static String extractNetworkPortion(String);
+    method public static String extractPostDialPortion(String);
+    method @Deprecated public static void formatJapaneseNumber(android.text.Editable);
+    method @Deprecated public static void formatNanpNumber(android.text.Editable);
+    method @Deprecated public static String formatNumber(String);
+    method @Deprecated public static void formatNumber(android.text.Editable, int);
+    method public static String formatNumber(String, String);
+    method public static String formatNumber(String, String, String);
+    method public static String formatNumberToE164(String, String);
+    method public static String formatNumberToRFC3966(String, String);
+    method @Deprecated public static int getFormatTypeForLocale(java.util.Locale);
+    method public static String getNumberFromIntent(android.content.Intent, android.content.Context);
+    method public static String getStrippedReversed(String);
+    method public static final boolean is12Key(char);
+    method public static final boolean isDialable(char);
+    method @Deprecated public static boolean isEmergencyNumber(String);
+    method public static boolean isGlobalPhoneNumber(String);
+    method public static boolean isISODigit(char);
+    method @Deprecated public static boolean isLocalEmergencyNumber(android.content.Context, String);
+    method public static final boolean isNonSeparator(char);
+    method public static final boolean isReallyDialable(char);
+    method public static final boolean isStartsPostDial(char);
+    method public static boolean isVoiceMailNumber(String);
+    method public static boolean isWellFormedSmsAddress(String);
+    method public static byte[] networkPortionToCalledPartyBCD(String);
+    method public static byte[] networkPortionToCalledPartyBCDWithLength(String);
+    method public static String normalizeNumber(String);
+    method @Deprecated public static byte[] numberToCalledPartyBCD(String);
+    method public static byte[] numberToCalledPartyBCD(String, int);
+    method public static String replaceUnicodeDigits(String);
+    method public static String stringFromStringAndTOA(String, int);
+    method public static String stripSeparators(String);
+    method public static String toCallerIDMinMatch(String);
+    method public static int toaFromString(String);
+    field public static final int BCD_EXTENDED_TYPE_CALLED_PARTY = 2; // 0x2
+    field public static final int BCD_EXTENDED_TYPE_EF_ADN = 1; // 0x1
+    field public static final int FORMAT_JAPAN = 2; // 0x2
+    field public static final int FORMAT_NANP = 1; // 0x1
+    field public static final int FORMAT_UNKNOWN = 0; // 0x0
+    field public static final char PAUSE = 44; // 0x002c ','
+    field public static final int TOA_International = 145; // 0x91
+    field public static final int TOA_Unknown = 129; // 0x81
+    field public static final char WAIT = 59; // 0x003b ';'
+    field public static final char WILD = 78; // 0x004e 'N'
+  }
+
+  @Deprecated public class PhoneStateListener {
+    ctor @Deprecated public PhoneStateListener();
+    ctor @Deprecated public PhoneStateListener(@NonNull java.util.concurrent.Executor);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onActiveDataSubscriptionIdChanged(int);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onBarringInfoChanged(@NonNull android.telephony.BarringInfo);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallDisconnectCauseChanged(int, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onCallForwardingIndicatorChanged(boolean);
+    method @Deprecated @RequiresPermission(value=android.Manifest.permission.READ_PHONE_STATE, conditional=true) public void onCallStateChanged(int, String);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onCellInfoChanged(java.util.List<android.telephony.CellInfo>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void onCellLocationChanged(android.telephony.CellLocation);
+    method @Deprecated public void onDataActivity(int);
+    method @Deprecated public void onDataConnectionStateChanged(int);
+    method @Deprecated public void onDataConnectionStateChanged(int, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onEmergencyNumberListChanged(@NonNull java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onMessageWaitingIndicatorChanged(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onRegistrationFailed(@NonNull android.telephony.CellIdentity, @NonNull String, int, int, int);
+    method @Deprecated public void onServiceStateChanged(android.telephony.ServiceState);
+    method @Deprecated public void onSignalStrengthChanged(int);
+    method @Deprecated public void onSignalStrengthsChanged(android.telephony.SignalStrength);
+    method @Deprecated public void onUserMobileDataStateChanged(boolean);
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE = 4194304; // 0x400000
+    field @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int LISTEN_BARRING_INFO = -2147483648; // 0x80000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_CALL_DISCONNECT_CAUSES = 33554432; // 0x2000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_CALL_FORWARDING_INDICATOR = 8; // 0x8
+    field @Deprecated public static final int LISTEN_CALL_STATE = 32; // 0x20
+    field @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int LISTEN_CELL_INFO = 1024; // 0x400
+    field @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static final int LISTEN_CELL_LOCATION = 16; // 0x10
+    field @Deprecated public static final int LISTEN_DATA_ACTIVITY = 128; // 0x80
+    field @Deprecated public static final int LISTEN_DATA_CONNECTION_STATE = 64; // 0x40
+    field @Deprecated public static final int LISTEN_DISPLAY_INFO_CHANGED = 1048576; // 0x100000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_EMERGENCY_NUMBER_LIST = 16777216; // 0x1000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_IMS_CALL_DISCONNECT_CAUSES = 134217728; // 0x8000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_MESSAGE_WAITING_INDICATOR = 4; // 0x4
+    field @Deprecated public static final int LISTEN_NONE = 0; // 0x0
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE = 4096; // 0x1000
+    field @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int LISTEN_REGISTRATION_FAILURE = 1073741824; // 0x40000000
+    field @Deprecated public static final int LISTEN_SERVICE_STATE = 1; // 0x1
+    field @Deprecated public static final int LISTEN_SIGNAL_STRENGTH = 2; // 0x2
+    field @Deprecated public static final int LISTEN_SIGNAL_STRENGTHS = 256; // 0x100
+    field @Deprecated public static final int LISTEN_USER_MOBILE_DATA_STATE = 524288; // 0x80000
+  }
+
+  public final class PhysicalChannelConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=1, to=261) public int getBand();
+    method @IntRange(from=1) public int getCellBandwidthDownlinkKhz();
+    method @IntRange(from=1) public int getCellBandwidthUplinkKhz();
+    method public int getConnectionStatus();
+    method @IntRange(from=0) public int getDownlinkChannelNumber();
+    method @IntRange(from=0) public int getDownlinkFrequencyKhz();
+    method public int getNetworkType();
+    method @IntRange(from=0, to=1007) public int getPhysicalCellId();
+    method @IntRange(from=0) public int getUplinkChannelNumber();
+    method @IntRange(from=0) public int getUplinkFrequencyKhz();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BAND_UNKNOWN = 0; // 0x0
+    field public static final int CELL_BANDWIDTH_UNKNOWN = 0; // 0x0
+    field public static final int CHANNEL_NUMBER_UNKNOWN = 2147483647; // 0x7fffffff
+    field public static final int CONNECTION_PRIMARY_SERVING = 1; // 0x1
+    field public static final int CONNECTION_SECONDARY_SERVING = 2; // 0x2
+    field public static final int CONNECTION_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhysicalChannelConfig> CREATOR;
+    field public static final int FREQUENCY_UNKNOWN = -1; // 0xffffffff
+    field public static final int PHYSICAL_CELL_ID_MAXIMUM_VALUE = 1007; // 0x3ef
+    field public static final int PHYSICAL_CELL_ID_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class PreciseDataConnectionState implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.telephony.data.ApnSetting getApnSetting();
+    method public int getId();
+    method public int getLastCauseCode();
+    method @Nullable public android.net.LinkProperties getLinkProperties();
+    method public int getNetworkType();
+    method public int getState();
+    method public int getTransportType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PreciseDataConnectionState> CREATOR;
+  }
+
+  public final class RadioAccessSpecifier implements android.os.Parcelable {
+    ctor public RadioAccessSpecifier(int, int[], int[]);
+    method public int describeContents();
+    method public int[] getBands();
+    method public int[] getChannels();
+    method public int getRadioAccessNetwork();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.RadioAccessSpecifier> CREATOR;
+  }
+
+  public class ServiceState implements android.os.Parcelable {
+    ctor public ServiceState();
+    ctor public ServiceState(android.telephony.ServiceState);
+    ctor @Deprecated public ServiceState(android.os.Parcel);
+    method protected void copyFrom(android.telephony.ServiceState);
+    method public int describeContents();
+    method public int getCdmaNetworkId();
+    method public int getCdmaSystemId();
+    method public int[] getCellBandwidths();
+    method public int getChannelNumber();
+    method public int getDuplexMode();
+    method public boolean getIsManualSelection();
+    method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoList();
+    method public String getOperatorAlphaLong();
+    method public String getOperatorAlphaShort();
+    method public String getOperatorNumeric();
+    method public boolean getRoaming();
+    method public int getState();
+    method public boolean isSearching();
+    method public void setIsManualSelection(boolean);
+    method public void setOperatorName(String, String, String);
+    method public void setRoaming(boolean);
+    method public void setState(int);
+    method public void setStateOff();
+    method public void setStateOutOfService();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ServiceState> CREATOR;
+    field public static final int DUPLEX_MODE_FDD = 1; // 0x1
+    field public static final int DUPLEX_MODE_TDD = 2; // 0x2
+    field public static final int DUPLEX_MODE_UNKNOWN = 0; // 0x0
+    field public static final int STATE_EMERGENCY_ONLY = 2; // 0x2
+    field public static final int STATE_IN_SERVICE = 0; // 0x0
+    field public static final int STATE_OUT_OF_SERVICE = 1; // 0x1
+    field public static final int STATE_POWER_OFF = 3; // 0x3
+    field public static final int UNKNOWN_ID = -1; // 0xffffffff
+  }
+
+  public class SignalStrength implements android.os.Parcelable {
+    ctor public SignalStrength(@NonNull android.telephony.SignalStrength);
+    method public int describeContents();
+    method @Deprecated public int getCdmaDbm();
+    method @Deprecated public int getCdmaEcio();
+    method @NonNull public java.util.List<android.telephony.CellSignalStrength> getCellSignalStrengths();
+    method @NonNull public <T extends android.telephony.CellSignalStrength> java.util.List<T> getCellSignalStrengths(@NonNull Class<T>);
+    method @Deprecated public int getEvdoDbm();
+    method @Deprecated public int getEvdoEcio();
+    method @Deprecated public int getEvdoSnr();
+    method @Deprecated public int getGsmBitErrorRate();
+    method @Deprecated public int getGsmSignalStrength();
+    method public int getLevel();
+    method public long getTimestampMillis();
+    method @Deprecated public boolean isGsm();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SignalStrength> CREATOR;
+    field public static final int INVALID = 2147483647; // 0x7fffffff
+  }
+
+  public final class SignalStrengthUpdateRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Collection<android.telephony.SignalThresholdInfo> getSignalThresholdInfos();
+    method public boolean isReportingRequestedWhileIdle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SignalStrengthUpdateRequest> CREATOR;
+  }
+
+  public static final class SignalStrengthUpdateRequest.Builder {
+    ctor public SignalStrengthUpdateRequest.Builder();
+    method @NonNull public android.telephony.SignalStrengthUpdateRequest build();
+    method @NonNull public android.telephony.SignalStrengthUpdateRequest.Builder setReportingRequestedWhileIdle(boolean);
+    method @NonNull public android.telephony.SignalStrengthUpdateRequest.Builder setSignalThresholdInfos(@NonNull java.util.Collection<android.telephony.SignalThresholdInfo>);
+  }
+
+  public final class SignalThresholdInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public static int getMaximumNumberOfThresholdsAllowed();
+    method public static int getMinimumNumberOfThresholdsAllowed();
+    method public int getRadioAccessNetworkType();
+    method public int getSignalMeasurementType();
+    method @NonNull public int[] getThresholds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SignalThresholdInfo> CREATOR;
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSCP = 2; // 0x2
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSRP = 3; // 0x3
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSRQ = 4; // 0x4
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSSI = 1; // 0x1
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSSNR = 5; // 0x5
+    field public static final int SIGNAL_MEASUREMENT_TYPE_SSRSRP = 6; // 0x6
+    field public static final int SIGNAL_MEASUREMENT_TYPE_SSRSRQ = 7; // 0x7
+    field public static final int SIGNAL_MEASUREMENT_TYPE_SSSINR = 8; // 0x8
+    field public static final int SIGNAL_MEASUREMENT_TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class SignalThresholdInfo.Builder {
+    ctor public SignalThresholdInfo.Builder();
+    method @NonNull public android.telephony.SignalThresholdInfo build();
+    method @NonNull public android.telephony.SignalThresholdInfo.Builder setRadioAccessNetworkType(int);
+    method @NonNull public android.telephony.SignalThresholdInfo.Builder setSignalMeasurementType(int);
+    method @NonNull public android.telephony.SignalThresholdInfo.Builder setThresholds(@NonNull int[]);
+  }
+
+  public final class SmsManager {
+    method public String createAppSpecificSmsToken(android.app.PendingIntent);
+    method @Nullable public String createAppSpecificSmsTokenWithPackageInfo(@Nullable String, @NonNull android.app.PendingIntent);
+    method @NonNull public android.telephony.SmsManager createForSubscriptionId(int);
+    method public java.util.ArrayList<java.lang.String> divideMessage(String);
+    method public void downloadMultimediaMessage(android.content.Context, String, android.net.Uri, android.os.Bundle, android.app.PendingIntent);
+    method public void downloadMultimediaMessage(@NonNull android.content.Context, @NonNull String, @NonNull android.net.Uri, @Nullable android.os.Bundle, @Nullable android.app.PendingIntent, long);
+    method @NonNull public android.os.Bundle getCarrierConfigValues();
+    method @Deprecated public static android.telephony.SmsManager getDefault();
+    method public static int getDefaultSmsSubscriptionId();
+    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public int getSmsCapacityOnIcc();
+    method @Deprecated public static android.telephony.SmsManager getSmsManagerForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.SMS_FINANCIAL_TRANSACTIONS) public void getSmsMessagesForFinancialApp(android.os.Bundle, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.SmsManager.FinancialSmsCallback);
+    method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSmscAddress();
+    method public int getSubscriptionId();
+    method public void injectSmsPdu(byte[], String, android.app.PendingIntent);
+    method public void sendDataMessage(String, String, short, byte[], android.app.PendingIntent, android.app.PendingIntent);
+    method public void sendMultimediaMessage(android.content.Context, android.net.Uri, String, android.os.Bundle, android.app.PendingIntent);
+    method public void sendMultimediaMessage(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable String, @Nullable android.os.Bundle, @Nullable android.app.PendingIntent, long);
+    method public void sendMultipartTextMessage(String, String, java.util.ArrayList<java.lang.String>, java.util.ArrayList<android.app.PendingIntent>, java.util.ArrayList<android.app.PendingIntent>);
+    method public void sendMultipartTextMessage(@NonNull String, @Nullable String, @NonNull java.util.List<java.lang.String>, @Nullable java.util.List<android.app.PendingIntent>, @Nullable java.util.List<android.app.PendingIntent>, long);
+    method public void sendMultipartTextMessage(@NonNull String, @Nullable String, @NonNull java.util.List<java.lang.String>, @Nullable java.util.List<android.app.PendingIntent>, @Nullable java.util.List<android.app.PendingIntent>, @NonNull String, @Nullable String);
+    method public void sendTextMessage(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
+    method public void sendTextMessage(@NonNull String, @Nullable String, @NonNull String, @Nullable android.app.PendingIntent, @Nullable android.app.PendingIntent, long);
+    method @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.SEND_SMS}) public void sendTextMessageWithoutPersisting(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSmscAddress(@NonNull String);
+    field public static final String EXTRA_MMS_DATA = "android.telephony.extra.MMS_DATA";
+    field public static final String EXTRA_MMS_HTTP_STATUS = "android.telephony.extra.MMS_HTTP_STATUS";
+    field public static final String MMS_CONFIG_ALIAS_ENABLED = "aliasEnabled";
+    field public static final String MMS_CONFIG_ALIAS_MAX_CHARS = "aliasMaxChars";
+    field public static final String MMS_CONFIG_ALIAS_MIN_CHARS = "aliasMinChars";
+    field public static final String MMS_CONFIG_ALLOW_ATTACH_AUDIO = "allowAttachAudio";
+    field public static final String MMS_CONFIG_APPEND_TRANSACTION_ID = "enabledTransID";
+    field public static final String MMS_CONFIG_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber";
+    field public static final String MMS_CONFIG_GROUP_MMS_ENABLED = "enableGroupMms";
+    field public static final String MMS_CONFIG_HTTP_PARAMS = "httpParams";
+    field public static final String MMS_CONFIG_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout";
+    field public static final String MMS_CONFIG_MAX_IMAGE_HEIGHT = "maxImageHeight";
+    field public static final String MMS_CONFIG_MAX_IMAGE_WIDTH = "maxImageWidth";
+    field public static final String MMS_CONFIG_MAX_MESSAGE_SIZE = "maxMessageSize";
+    field public static final String MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize";
+    field public static final String MMS_CONFIG_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports";
+    field public static final String MMS_CONFIG_MMS_ENABLED = "enabledMMS";
+    field public static final String MMS_CONFIG_MMS_READ_REPORT_ENABLED = "enableMMSReadReports";
+    field public static final String MMS_CONFIG_MULTIPART_SMS_ENABLED = "enableMultipartSMS";
+    field public static final String MMS_CONFIG_NAI_SUFFIX = "naiSuffix";
+    field public static final String MMS_CONFIG_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC";
+    field public static final String MMS_CONFIG_RECIPIENT_LIMIT = "recipientLimit";
+    field public static final String MMS_CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages";
+    field public static final String MMS_CONFIG_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks";
+    field public static final String MMS_CONFIG_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports";
+    field public static final String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold";
+    field public static final String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
+    field public static final String MMS_CONFIG_SUBJECT_MAX_LENGTH = "maxSubjectLength";
+    field public static final String MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
+    field public static final String MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition";
+    field public static final String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName";
+    field public static final String MMS_CONFIG_UA_PROF_URL = "uaProfUrl";
+    field public static final String MMS_CONFIG_USER_AGENT = "userAgent";
+    field public static final int MMS_ERROR_CONFIGURATION_ERROR = 7; // 0x7
+    field public static final int MMS_ERROR_HTTP_FAILURE = 4; // 0x4
+    field public static final int MMS_ERROR_INVALID_APN = 2; // 0x2
+    field public static final int MMS_ERROR_IO_ERROR = 5; // 0x5
+    field public static final int MMS_ERROR_NO_DATA_NETWORK = 8; // 0x8
+    field public static final int MMS_ERROR_RETRY = 6; // 0x6
+    field public static final int MMS_ERROR_UNABLE_CONNECT_MMS = 3; // 0x3
+    field public static final int MMS_ERROR_UNSPECIFIED = 1; // 0x1
+    field public static final int RESULT_BLUETOOTH_DISCONNECTED = 27; // 0x1b
+    field public static final int RESULT_CANCELLED = 23; // 0x17
+    field public static final int RESULT_ENCODING_ERROR = 18; // 0x12
+    field public static final int RESULT_ERROR_FDN_CHECK_FAILURE = 6; // 0x6
+    field public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1
+    field public static final int RESULT_ERROR_LIMIT_EXCEEDED = 5; // 0x5
+    field public static final int RESULT_ERROR_NONE = 0; // 0x0
+    field public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4
+    field public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3
+    field public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2
+    field public static final int RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED = 8; // 0x8
+    field public static final int RESULT_ERROR_SHORT_CODE_NOT_ALLOWED = 7; // 0x7
+    field public static final int RESULT_INTERNAL_ERROR = 21; // 0x15
+    field public static final int RESULT_INVALID_ARGUMENTS = 11; // 0xb
+    field public static final int RESULT_INVALID_BLUETOOTH_ADDRESS = 26; // 0x1a
+    field public static final int RESULT_INVALID_SMSC_ADDRESS = 19; // 0x13
+    field public static final int RESULT_INVALID_SMS_FORMAT = 14; // 0xe
+    field public static final int RESULT_INVALID_STATE = 12; // 0xc
+    field public static final int RESULT_MODEM_ERROR = 16; // 0x10
+    field public static final int RESULT_NETWORK_ERROR = 17; // 0x11
+    field public static final int RESULT_NETWORK_REJECT = 10; // 0xa
+    field public static final int RESULT_NO_BLUETOOTH_SERVICE = 25; // 0x19
+    field public static final int RESULT_NO_DEFAULT_SMS_APP = 32; // 0x20
+    field public static final int RESULT_NO_MEMORY = 13; // 0xd
+    field public static final int RESULT_NO_RESOURCES = 22; // 0x16
+    field public static final int RESULT_OPERATION_NOT_ALLOWED = 20; // 0x14
+    field public static final int RESULT_RADIO_NOT_AVAILABLE = 9; // 0x9
+    field public static final int RESULT_RECEIVE_DISPATCH_FAILURE = 500; // 0x1f4
+    field public static final int RESULT_RECEIVE_INJECTED_NULL_PDU = 501; // 0x1f5
+    field public static final int RESULT_RECEIVE_NULL_MESSAGE_FROM_RIL = 503; // 0x1f7
+    field public static final int RESULT_RECEIVE_RUNTIME_EXCEPTION = 502; // 0x1f6
+    field public static final int RESULT_RECEIVE_SQL_EXCEPTION = 505; // 0x1f9
+    field public static final int RESULT_RECEIVE_URI_EXCEPTION = 506; // 0x1fa
+    field public static final int RESULT_RECEIVE_WHILE_ENCRYPTED = 504; // 0x1f8
+    field public static final int RESULT_REMOTE_EXCEPTION = 31; // 0x1f
+    field public static final int RESULT_REQUEST_NOT_SUPPORTED = 24; // 0x18
+    field public static final int RESULT_RIL_ACCESS_BARRED = 122; // 0x7a
+    field public static final int RESULT_RIL_BLOCKED_DUE_TO_CALL = 123; // 0x7b
+    field public static final int RESULT_RIL_CANCELLED = 119; // 0x77
+    field public static final int RESULT_RIL_ENCODING_ERR = 109; // 0x6d
+    field public static final int RESULT_RIL_INTERNAL_ERR = 113; // 0x71
+    field public static final int RESULT_RIL_INVALID_ARGUMENTS = 104; // 0x68
+    field public static final int RESULT_RIL_INVALID_MODEM_STATE = 115; // 0x73
+    field public static final int RESULT_RIL_INVALID_SMSC_ADDRESS = 110; // 0x6e
+    field public static final int RESULT_RIL_INVALID_SMS_FORMAT = 107; // 0x6b
+    field public static final int RESULT_RIL_INVALID_STATE = 103; // 0x67
+    field public static final int RESULT_RIL_MODEM_ERR = 111; // 0x6f
+    field public static final int RESULT_RIL_NETWORK_ERR = 112; // 0x70
+    field public static final int RESULT_RIL_NETWORK_NOT_READY = 116; // 0x74
+    field public static final int RESULT_RIL_NETWORK_REJECT = 102; // 0x66
+    field public static final int RESULT_RIL_NO_MEMORY = 105; // 0x69
+    field public static final int RESULT_RIL_NO_RESOURCES = 118; // 0x76
+    field public static final int RESULT_RIL_OPERATION_NOT_ALLOWED = 117; // 0x75
+    field public static final int RESULT_RIL_RADIO_NOT_AVAILABLE = 100; // 0x64
+    field public static final int RESULT_RIL_REQUEST_NOT_SUPPORTED = 114; // 0x72
+    field public static final int RESULT_RIL_REQUEST_RATE_LIMITED = 106; // 0x6a
+    field public static final int RESULT_RIL_SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED = 121; // 0x79
+    field public static final int RESULT_RIL_SIM_ABSENT = 120; // 0x78
+    field public static final int RESULT_RIL_SMS_SEND_FAIL_RETRY = 101; // 0x65
+    field public static final int RESULT_RIL_SYSTEM_ERR = 108; // 0x6c
+    field public static final int RESULT_SMS_BLOCKED_DURING_EMERGENCY = 29; // 0x1d
+    field public static final int RESULT_SMS_SEND_RETRY_FAILED = 30; // 0x1e
+    field public static final int RESULT_SYSTEM_ERROR = 15; // 0xf
+    field public static final int RESULT_UNEXPECTED_EVENT_STOP_SENDING = 28; // 0x1c
+    field public static final int STATUS_ON_ICC_FREE = 0; // 0x0
+    field public static final int STATUS_ON_ICC_READ = 1; // 0x1
+    field public static final int STATUS_ON_ICC_SENT = 5; // 0x5
+    field public static final int STATUS_ON_ICC_UNREAD = 3; // 0x3
+    field public static final int STATUS_ON_ICC_UNSENT = 7; // 0x7
+  }
+
+  public abstract static class SmsManager.FinancialSmsCallback {
+    ctor public SmsManager.FinancialSmsCallback();
+    method public abstract void onFinancialSmsMessages(android.database.CursorWindow);
+  }
+
+  public class SmsMessage {
+    method public static int[] calculateLength(CharSequence, boolean);
+    method public static int[] calculateLength(String, boolean);
+    method @Deprecated public static android.telephony.SmsMessage createFromPdu(byte[]);
+    method public static android.telephony.SmsMessage createFromPdu(byte[], String);
+    method public String getDisplayMessageBody();
+    method public String getDisplayOriginatingAddress();
+    method public String getEmailBody();
+    method public String getEmailFrom();
+    method public int getIndexOnIcc();
+    method @Deprecated public int getIndexOnSim();
+    method public String getMessageBody();
+    method public android.telephony.SmsMessage.MessageClass getMessageClass();
+    method @Nullable public String getOriginatingAddress();
+    method public byte[] getPdu();
+    method public int getProtocolIdentifier();
+    method public String getPseudoSubject();
+    method public String getServiceCenterAddress();
+    method public int getStatus();
+    method public int getStatusOnIcc();
+    method @Deprecated public int getStatusOnSim();
+    method public static android.telephony.SmsMessage.SubmitPdu getSubmitPdu(String, String, String, boolean);
+    method public static android.telephony.SmsMessage.SubmitPdu getSubmitPdu(String, String, short, byte[], boolean);
+    method public static int getTPLayerLengthForPDU(String);
+    method public long getTimestampMillis();
+    method public byte[] getUserData();
+    method public boolean isCphsMwiMessage();
+    method public boolean isEmail();
+    method public boolean isMWIClearMessage();
+    method public boolean isMWISetMessage();
+    method public boolean isMwiDontStore();
+    method public boolean isReplace();
+    method public boolean isReplyPathPresent();
+    method public boolean isStatusReportMessage();
+    field public static final int ENCODING_16BIT = 3; // 0x3
+    field public static final int ENCODING_7BIT = 1; // 0x1
+    field public static final int ENCODING_8BIT = 2; // 0x2
+    field public static final int ENCODING_UNKNOWN = 0; // 0x0
+    field public static final String FORMAT_3GPP = "3gpp";
+    field public static final String FORMAT_3GPP2 = "3gpp2";
+    field public static final int MAX_USER_DATA_BYTES = 140; // 0x8c
+    field public static final int MAX_USER_DATA_BYTES_WITH_HEADER = 134; // 0x86
+    field public static final int MAX_USER_DATA_SEPTETS = 160; // 0xa0
+    field public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153; // 0x99
+  }
+
+  public enum SmsMessage.MessageClass {
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_0;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_1;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_2;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_3;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass UNKNOWN;
+  }
+
+  public static class SmsMessage.SubmitPdu {
+    field public byte[] encodedMessage;
+    field public byte[] encodedScAddress;
+  }
+
+  public class SubscriptionInfo implements android.os.Parcelable {
+    method public android.graphics.Bitmap createIconBitmap(android.content.Context);
+    method public int describeContents();
+    method public int getCardId();
+    method public int getCarrierId();
+    method public CharSequence getCarrierName();
+    method public String getCountryIso();
+    method public int getDataRoaming();
+    method public CharSequence getDisplayName();
+    method @Nullable public android.os.ParcelUuid getGroupUuid();
+    method public String getIccId();
+    method public int getIconTint();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method public String getNumber();
+    method public int getSimSlotIndex();
+    method public int getSubscriptionId();
+    method public int getSubscriptionType();
+    method public boolean isEmbedded();
+    method public boolean isOpportunistic();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SubscriptionInfo> CREATOR;
+  }
+
+  public class SubscriptionManager {
+    method public void addOnOpportunisticSubscriptionsChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener);
+    method @Deprecated public void addOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
+    method public void addOnSubscriptionsChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void addSubscriptionsIntoGroup(@NonNull java.util.List<java.lang.Integer>, @NonNull android.os.ParcelUuid);
+    method public boolean canManageSubscription(android.telephony.SubscriptionInfo);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.os.ParcelUuid createSubscriptionGroup(@NonNull java.util.List<java.lang.Integer>);
+    method @Deprecated public static android.telephony.SubscriptionManager from(android.content.Context);
+    method public java.util.List<android.telephony.SubscriptionInfo> getAccessibleSubscriptionInfoList();
+    method public static int getActiveDataSubscriptionId();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telephony.SubscriptionInfo getActiveSubscriptionInfo(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getActiveSubscriptionInfoCount();
+    method public int getActiveSubscriptionInfoCountMax();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telephony.SubscriptionInfo getActiveSubscriptionInfoForSimSlotIndex(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telephony.SubscriptionInfo> getActiveSubscriptionInfoList();
+    method @NonNull public java.util.List<android.telephony.SubscriptionInfo> getCompleteActiveSubscriptionInfoList();
+    method public static int getDefaultDataSubscriptionId();
+    method public static int getDefaultSmsSubscriptionId();
+    method public static int getDefaultSubscriptionId();
+    method public static int getDefaultVoiceSubscriptionId();
+    method @NonNull public java.util.List<android.net.Uri> getDeviceToDeviceStatusSharingContacts(int);
+    method public int getDeviceToDeviceStatusSharingPreference(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telephony.SubscriptionInfo> getOpportunisticSubscriptions();
+    method public static int getSlotIndex(int);
+    method @Nullable public int[] getSubscriptionIds(int);
+    method @NonNull public java.util.List<android.telephony.SubscriptionPlan> getSubscriptionPlans(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telephony.SubscriptionInfo> getSubscriptionsInGroup(@NonNull android.os.ParcelUuid);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isActiveSubscriptionId(int);
+    method public boolean isNetworkRoaming(int);
+    method public static boolean isUsableSubscriptionId(int);
+    method public static boolean isValidSubscriptionId(int);
+    method public void removeOnOpportunisticSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener);
+    method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void removeSubscriptionsFromGroup(@NonNull java.util.List<java.lang.Integer>, @NonNull android.os.ParcelUuid);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDeviceToDeviceStatusSharingContacts(int, @NonNull java.util.List<android.net.Uri>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDeviceToDeviceStatusSharingPreference(int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setOpportunistic(boolean, int);
+    method public void setSubscriptionOverrideCongested(int, boolean, long);
+    method public void setSubscriptionOverrideCongested(int, boolean, @NonNull int[], long);
+    method public void setSubscriptionOverrideUnmetered(int, boolean, long);
+    method public void setSubscriptionOverrideUnmetered(int, boolean, @NonNull int[], long);
+    method public void setSubscriptionPlans(int, @NonNull java.util.List<android.telephony.SubscriptionPlan>);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, @NonNull android.app.PendingIntent);
+    field public static final String ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_DEFAULT_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_MANAGE_SUBSCRIPTION_PLANS = "android.telephony.action.MANAGE_SUBSCRIPTION_PLANS";
+    field public static final String ACTION_REFRESH_SUBSCRIPTION_PLANS = "android.telephony.action.REFRESH_SUBSCRIPTION_PLANS";
+    field public static final int D2D_SHARING_ALL = 3; // 0x3
+    field public static final int D2D_SHARING_ALL_CONTACTS = 1; // 0x1
+    field public static final int D2D_SHARING_DISABLED = 0; // 0x0
+    field public static final int D2D_SHARING_SELECTED_CONTACTS = 2; // 0x2
+    field public static final String D2D_STATUS_SHARING = "d2d_sharing_status";
+    field public static final String D2D_STATUS_SHARING_SELECTED_CONTACTS = "d2d_sharing_contacts";
+    field public static final int DATA_ROAMING_DISABLE = 0; // 0x0
+    field public static final int DATA_ROAMING_ENABLE = 1; // 0x1
+    field public static final int DEFAULT_SUBSCRIPTION_ID = 2147483647; // 0x7fffffff
+    field public static final String EXTRA_SLOT_INDEX = "android.telephony.extra.SLOT_INDEX";
+    field public static final String EXTRA_SUBSCRIPTION_INDEX = "android.telephony.extra.SUBSCRIPTION_INDEX";
+    field public static final int INVALID_SIM_SLOT_INDEX = -1; // 0xffffffff
+    field public static final int INVALID_SUBSCRIPTION_ID = -1; // 0xffffffff
+    field public static final int SUBSCRIPTION_TYPE_LOCAL_SIM = 0; // 0x0
+    field public static final int SUBSCRIPTION_TYPE_REMOTE_SIM = 1; // 0x1
+  }
+
+  public static class SubscriptionManager.OnOpportunisticSubscriptionsChangedListener {
+    ctor public SubscriptionManager.OnOpportunisticSubscriptionsChangedListener();
+    method public void onOpportunisticSubscriptionsChanged();
+  }
+
+  public static class SubscriptionManager.OnSubscriptionsChangedListener {
+    ctor public SubscriptionManager.OnSubscriptionsChangedListener();
+    method public void onSubscriptionsChanged();
+  }
+
+  public final class SubscriptionPlan implements android.os.Parcelable {
+    method public java.util.Iterator<android.util.Range<java.time.ZonedDateTime>> cycleIterator();
+    method public int describeContents();
+    method public int getDataLimitBehavior();
+    method public long getDataLimitBytes();
+    method public long getDataUsageBytes();
+    method public long getDataUsageTime();
+    method @NonNull public int[] getNetworkTypes();
+    method @Nullable public CharSequence getSummary();
+    method @Nullable public CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long BYTES_UNKNOWN = -1L; // 0xffffffffffffffffL
+    field public static final long BYTES_UNLIMITED = 9223372036854775807L; // 0x7fffffffffffffffL
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SubscriptionPlan> CREATOR;
+    field public static final int LIMIT_BEHAVIOR_BILLED = 1; // 0x1
+    field public static final int LIMIT_BEHAVIOR_DISABLED = 0; // 0x0
+    field public static final int LIMIT_BEHAVIOR_THROTTLED = 2; // 0x2
+    field public static final int LIMIT_BEHAVIOR_UNKNOWN = -1; // 0xffffffff
+    field public static final long TIME_UNKNOWN = -1L; // 0xffffffffffffffffL
+  }
+
+  public static class SubscriptionPlan.Builder {
+    method public android.telephony.SubscriptionPlan build();
+    method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime);
+    method public static android.telephony.SubscriptionPlan.Builder createRecurring(java.time.ZonedDateTime, java.time.Period);
+    method @NonNull public android.telephony.SubscriptionPlan.Builder resetNetworkTypes();
+    method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int);
+    method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long);
+    method @NonNull public android.telephony.SubscriptionPlan.Builder setNetworkTypes(@NonNull int[]);
+    method public android.telephony.SubscriptionPlan.Builder setSummary(@Nullable CharSequence);
+    method public android.telephony.SubscriptionPlan.Builder setTitle(@Nullable CharSequence);
+  }
+
+  public class TelephonyCallback {
+    ctor public TelephonyCallback();
+  }
+
+  public static interface TelephonyCallback.ActiveDataSubscriptionIdListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onActiveDataSubscriptionIdChanged(int);
+  }
+
+  public static interface TelephonyCallback.BarringInfoListener {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onBarringInfoChanged(@NonNull android.telephony.BarringInfo);
+  }
+
+  public static interface TelephonyCallback.CallDisconnectCauseListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallDisconnectCauseChanged(int, int);
+  }
+
+  public static interface TelephonyCallback.CallForwardingIndicatorListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onCallForwardingIndicatorChanged(boolean);
+  }
+
+  public static interface TelephonyCallback.CallStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onCallStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.CarrierNetworkListener {
+    method public void onCarrierNetworkChange(boolean);
+  }
+
+  public static interface TelephonyCallback.CellInfoListener {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onCellInfoChanged(@NonNull java.util.List<android.telephony.CellInfo>);
+  }
+
+  public static interface TelephonyCallback.CellLocationListener {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void onCellLocationChanged(@NonNull android.telephony.CellLocation);
+  }
+
+  public static interface TelephonyCallback.DataActivationStateListener {
+    method public void onDataActivationStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.DataActivityListener {
+    method public void onDataActivity(int);
+  }
+
+  public static interface TelephonyCallback.DataConnectionStateListener {
+    method public void onDataConnectionStateChanged(int, int);
+  }
+
+  public static interface TelephonyCallback.DisplayInfoListener {
+    method public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo);
+  }
+
+  public static interface TelephonyCallback.EmergencyNumberListListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onEmergencyNumberListChanged(@NonNull java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>>);
+  }
+
+  public static interface TelephonyCallback.ImsCallDisconnectCauseListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
+  }
+
+  public static interface TelephonyCallback.MessageWaitingIndicatorListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onMessageWaitingIndicatorChanged(boolean);
+  }
+
+  public static interface TelephonyCallback.PhysicalChannelConfigListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPhysicalChannelConfigChanged(@NonNull java.util.List<android.telephony.PhysicalChannelConfig>);
+  }
+
+  public static interface TelephonyCallback.PreciseDataConnectionStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);
+  }
+
+  public static interface TelephonyCallback.RegistrationFailedListener {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onRegistrationFailed(@NonNull android.telephony.CellIdentity, @NonNull String, int, int, int);
+  }
+
+  public static interface TelephonyCallback.ServiceStateListener {
+    method public void onServiceStateChanged(@NonNull android.telephony.ServiceState);
+  }
+
+  public static interface TelephonyCallback.SignalStrengthsListener {
+    method public void onSignalStrengthsChanged(@NonNull android.telephony.SignalStrength);
+  }
+
+  public static interface TelephonyCallback.UserMobileDataStateListener {
+    method public void onUserMobileDataStateChanged(boolean);
+  }
+
+  public final class TelephonyDisplayInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getNetworkType();
+    method public int getOverrideNetworkType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.TelephonyDisplayInfo> CREATOR;
+    field public static final int OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO = 2; // 0x2
+    field public static final int OVERRIDE_NETWORK_TYPE_LTE_CA = 1; // 0x1
+    field public static final int OVERRIDE_NETWORK_TYPE_NONE = 0; // 0x0
+    field public static final int OVERRIDE_NETWORK_TYPE_NR_ADVANCED = 5; // 0x5
+    field public static final int OVERRIDE_NETWORK_TYPE_NR_NSA = 3; // 0x3
+    field @Deprecated public static final int OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE = 4; // 0x4
+  }
+
+  public class TelephonyManager {
+    method public boolean canChangeDtmfToneLength();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void clearSignalStrengthUpdateRequest(@NonNull android.telephony.SignalStrengthUpdateRequest);
+    method @Nullable public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle);
+    method public android.telephony.TelephonyManager createForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean doesSwitchMultiSimConfigTriggerReboot();
+    method public int getActiveModemCount();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public java.util.List<android.telephony.CellInfo> getAllCellInfo();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getCallComposerStatus();
+    method @Deprecated @RequiresPermission(value=android.Manifest.permission.READ_PHONE_STATE, conditional=true) public int getCallState();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getCallStateForSubscription();
+    method public int getCardIdForDefaultEuicc();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @WorkerThread public android.os.PersistableBundle getCarrierConfig();
+    method public int getCarrierIdFromSimMccMnc();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.telephony.CellLocation getCellLocation();
+    method public int getDataActivity();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getDataNetworkType();
+    method public int getDataState();
+    method @Deprecated @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDeviceId();
+    method @Deprecated @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDeviceId(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<java.lang.String> getEquivalentHomePlmns();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String[] getForbiddenPlmns();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getGroupIdLevel1();
+    method public String getIccAuthentication(int, int, String);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getImei();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getImei(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS}) public String getLine1Number();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public String getManualNetworkSelectionPlmn();
+    method @Nullable public String getManufacturerCode();
+    method @Nullable public String getManufacturerCode(int);
+    method public static long getMaximumCallComposerPictureSize();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getMeid();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getMeid(int);
+    method public String getMmsUAProfUrl();
+    method public String getMmsUserAgent();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getNai();
+    method public String getNetworkCountryIso();
+    method @NonNull public String getNetworkCountryIso(int);
+    method public String getNetworkOperator();
+    method public String getNetworkOperatorName();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public int getNetworkSelectionMode();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getNetworkSlicingConfiguration(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.telephony.data.NetworkSlicingConfig,android.telephony.TelephonyManager.NetworkSlicingException>);
+    method public String getNetworkSpecifier();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getNetworkType();
+    method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method @Deprecated public int getPhoneCount();
+    method public int getPhoneType();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PHONE_STATE}) public int getPreferredOpportunisticDataSubscription();
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_COARSE_LOCATION}) public android.telephony.ServiceState getServiceState();
+    method @Nullable public android.telephony.SignalStrength getSignalStrength();
+    method public int getSimCarrierId();
+    method @Nullable public CharSequence getSimCarrierIdName();
+    method public String getSimCountryIso();
+    method public String getSimOperator();
+    method public String getSimOperatorName();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSimSerialNumber();
+    method public int getSimSpecificCarrierId();
+    method @Nullable public CharSequence getSimSpecificCarrierIdName();
+    method public int getSimState();
+    method public int getSimState(int);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSubscriberId();
+    method public int getSubscriptionId();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getSubscriptionId(@NonNull android.telecom.PhoneAccountHandle);
+    method public int getSupportedModemCount();
+    method @Nullable public String getTypeAllocationCode();
+    method @Nullable public String getTypeAllocationCode(int);
+    method @NonNull @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public java.util.List<android.telephony.UiccCardInfo> getUiccCardsInfo();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVisualVoicemailPackageName();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailAlphaTag();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getVoiceNetworkType();
+    method @Nullable public android.net.Uri getVoicemailRingtoneUri(android.telecom.PhoneAccountHandle);
+    method public boolean hasCarrierPrivileges();
+    method public boolean hasIccCard();
+    method @Deprecated public boolean iccCloseLogicalChannel(int);
+    method @Deprecated public byte[] iccExchangeSimIO(int, int, int, int, int, String);
+    method @Deprecated public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(String);
+    method @Deprecated public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(String, int);
+    method @Deprecated public String iccTransmitApduBasicChannel(int, int, int, int, int, String);
+    method @Deprecated public String iccTransmitApduLogicalChannel(int, int, int, int, int, int, String);
+    method public boolean isConcurrentVoiceAndDataSupported();
+    method public boolean isDataCapable();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public boolean isDataConnectionAllowed();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataEnabled();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataEnabledForReason(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataRoamingEnabled();
+    method public boolean isEmergencyNumber(@NonNull String);
+    method public boolean isHearingAidCompatibilitySupported();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public boolean isManualNetworkSelectionAllowed();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isModemEnabledForSlot(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int isMultiSimSupported();
+    method public boolean isNetworkRoaming();
+    method public boolean isRadioInterfaceCapabilitySupported(@NonNull String);
+    method public boolean isRttSupported();
+    method public boolean isSmsCapable();
+    method @Deprecated public boolean isTtyModeSupported();
+    method public boolean isVoiceCapable();
+    method public boolean isVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle);
+    method public boolean isWorldPhone();
+    method @Deprecated public void listen(android.telephony.PhoneStateListener, int);
+    method public void registerTelephonyCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestCellInfoUpdate(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CellInfoCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, java.util.concurrent.Executor, android.telephony.TelephonyScanManager.NetworkScanCallback);
+    method public void sendDialerSpecialCode(String);
+    method @Deprecated public String sendEnvelopeWithStatus(String);
+    method @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void sendUssdRequest(String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler);
+    method public void sendVisualVoicemailSms(String, int, String, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCallComposerStatus(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabledForReason(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setForbiddenPlmns(@NonNull java.util.List<java.lang.String>);
+    method public boolean setLine1NumberForDisplay(String, String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setNetworkSelectionModeAutomatic();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setNetworkSelectionModeManual(String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setNetworkSelectionModeManual(@NonNull String, boolean, int);
+    method public boolean setOperatorBrandOverride(String);
+    method public boolean setPreferredNetworkTypeToGlobal();
+    method public void setPreferredOpportunisticDataSubscription(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSignalStrengthUpdateRequest(@NonNull android.telephony.SignalStrengthUpdateRequest);
+    method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings);
+    method public boolean setVoiceMailNumber(String, String);
+    method @Deprecated public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri);
+    method @Deprecated public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void switchMultiSimConfig(int);
+    method public void unregisterTelephonyCallback(@NonNull android.telephony.TelephonyCallback);
+    method public void updateAvailableNetworks(@NonNull java.util.List<android.telephony.AvailableNetworkInfo>, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method public void uploadCallComposerPicture(@NonNull java.nio.file.Path, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.os.ParcelUuid,android.telephony.TelephonyManager.CallComposerException>);
+    method public void uploadCallComposerPicture(@NonNull java.io.InputStream, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.os.ParcelUuid,android.telephony.TelephonyManager.CallComposerException>);
+    field public static final String ACTION_CARRIER_MESSAGING_CLIENT_SERVICE = "android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE";
+    field public static final String ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE = "android.telephony.action.CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE";
+    field public static final String ACTION_CARRIER_SIGNAL_PCO_VALUE = "android.telephony.action.CARRIER_SIGNAL_PCO_VALUE";
+    field public static final String ACTION_CARRIER_SIGNAL_REDIRECTED = "android.telephony.action.CARRIER_SIGNAL_REDIRECTED";
+    field public static final String ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED = "android.telephony.action.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED";
+    field public static final String ACTION_CARRIER_SIGNAL_RESET = "android.telephony.action.CARRIER_SIGNAL_RESET";
+    field public static final String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL";
+    field public static final String ACTION_MULTI_SIM_CONFIG_CHANGED = "android.telephony.action.MULTI_SIM_CONFIG_CHANGED";
+    field public static final String ACTION_NETWORK_COUNTRY_CHANGED = "android.telephony.action.NETWORK_COUNTRY_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE";
+    field public static final String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE";
+    field public static final String ACTION_SECRET_CODE = "android.telephony.action.SECRET_CODE";
+    field public static final String ACTION_SHOW_VOICEMAIL_NOTIFICATION = "android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION";
+    field public static final String ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_CARRIER_IDENTITY_CHANGED";
+    field public static final String ACTION_SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED";
+    field public static final int APPTYPE_CSIM = 4; // 0x4
+    field public static final int APPTYPE_ISIM = 5; // 0x5
+    field public static final int APPTYPE_RUIM = 3; // 0x3
+    field public static final int APPTYPE_SIM = 1; // 0x1
+    field public static final int APPTYPE_UNKNOWN = 0; // 0x0
+    field public static final int APPTYPE_USIM = 2; // 0x2
+    field public static final int AUTHTYPE_EAP_AKA = 129; // 0x81
+    field public static final int AUTHTYPE_EAP_SIM = 128; // 0x80
+    field public static final int CALL_COMPOSER_STATUS_OFF = 0; // 0x0
+    field public static final int CALL_COMPOSER_STATUS_ON = 1; // 0x1
+    field public static final int CALL_STATE_IDLE = 0; // 0x0
+    field public static final int CALL_STATE_OFFHOOK = 2; // 0x2
+    field public static final int CALL_STATE_RINGING = 1; // 0x1
+    field public static final String CAPABILITY_SLICING_CONFIG_SUPPORTED = "CAPABILITY_SLICING_CONFIG_SUPPORTED";
+    field public static final int CDMA_ROAMING_MODE_AFFILIATED = 1; // 0x1
+    field public static final int CDMA_ROAMING_MODE_ANY = 2; // 0x2
+    field public static final int CDMA_ROAMING_MODE_HOME = 0; // 0x0
+    field public static final int CDMA_ROAMING_MODE_RADIO_DEFAULT = -1; // 0xffffffff
+    field public static final int DATA_ACTIVITY_DORMANT = 4; // 0x4
+    field public static final int DATA_ACTIVITY_IN = 1; // 0x1
+    field public static final int DATA_ACTIVITY_INOUT = 3; // 0x3
+    field public static final int DATA_ACTIVITY_NONE = 0; // 0x0
+    field public static final int DATA_ACTIVITY_OUT = 2; // 0x2
+    field public static final int DATA_CONNECTED = 2; // 0x2
+    field public static final int DATA_CONNECTING = 1; // 0x1
+    field public static final int DATA_DISCONNECTED = 0; // 0x0
+    field public static final int DATA_DISCONNECTING = 4; // 0x4
+    field public static final int DATA_ENABLED_REASON_CARRIER = 2; // 0x2
+    field public static final int DATA_ENABLED_REASON_POLICY = 1; // 0x1
+    field public static final int DATA_ENABLED_REASON_THERMAL = 3; // 0x3
+    field public static final int DATA_ENABLED_REASON_USER = 0; // 0x0
+    field public static final int DATA_SUSPENDED = 3; // 0x3
+    field public static final int DATA_UNKNOWN = -1; // 0xffffffff
+    field public static final int ERI_FLASH = 2; // 0x2
+    field public static final int ERI_OFF = 1; // 0x1
+    field public static final int ERI_ON = 0; // 0x0
+    field public static final String EXTRA_ACTIVE_SIM_SUPPORTED_COUNT = "android.telephony.extra.ACTIVE_SIM_SUPPORTED_COUNT";
+    field public static final String EXTRA_APN_PROTOCOL = "android.telephony.extra.APN_PROTOCOL";
+    field public static final String EXTRA_APN_TYPE = "android.telephony.extra.APN_TYPE";
+    field public static final String EXTRA_CALL_VOICEMAIL_INTENT = "android.telephony.extra.CALL_VOICEMAIL_INTENT";
+    field public static final String EXTRA_CARRIER_ID = "android.telephony.extra.CARRIER_ID";
+    field public static final String EXTRA_CARRIER_NAME = "android.telephony.extra.CARRIER_NAME";
+    field public static final String EXTRA_DATA_FAIL_CAUSE = "android.telephony.extra.DATA_FAIL_CAUSE";
+    field public static final String EXTRA_DEFAULT_NETWORK_AVAILABLE = "android.telephony.extra.DEFAULT_NETWORK_AVAILABLE";
+    field public static final String EXTRA_HIDE_PUBLIC_SETTINGS = "android.telephony.extra.HIDE_PUBLIC_SETTINGS";
+    field @Deprecated public static final String EXTRA_INCOMING_NUMBER = "incoming_number";
+    field public static final String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH";
+    field public static final String EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT = "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT";
+    field public static final String EXTRA_NETWORK_COUNTRY = "android.telephony.extra.NETWORK_COUNTRY";
+    field public static final String EXTRA_NOTIFICATION_COUNT = "android.telephony.extra.NOTIFICATION_COUNT";
+    field public static final String EXTRA_PCO_ID = "android.telephony.extra.PCO_ID";
+    field public static final String EXTRA_PCO_VALUE = "android.telephony.extra.PCO_VALUE";
+    field public static final String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telephony.extra.PHONE_ACCOUNT_HANDLE";
+    field public static final String EXTRA_REDIRECTION_URL = "android.telephony.extra.REDIRECTION_URL";
+    field public static final String EXTRA_SPECIFIC_CARRIER_ID = "android.telephony.extra.SPECIFIC_CARRIER_ID";
+    field public static final String EXTRA_SPECIFIC_CARRIER_NAME = "android.telephony.extra.SPECIFIC_CARRIER_NAME";
+    field public static final String EXTRA_STATE = "state";
+    field public static final String EXTRA_STATE_IDLE;
+    field public static final String EXTRA_STATE_OFFHOOK;
+    field public static final String EXTRA_STATE_RINGING;
+    field public static final String EXTRA_SUBSCRIPTION_ID = "android.telephony.extra.SUBSCRIPTION_ID";
+    field public static final String EXTRA_VOICEMAIL_NUMBER = "android.telephony.extra.VOICEMAIL_NUMBER";
+    field public static final String METADATA_HIDE_VOICEMAIL_SETTINGS_MENU = "android.telephony.HIDE_VOICEMAIL_SETTINGS_MENU";
+    field public static final int MULTISIM_ALLOWED = 0; // 0x0
+    field public static final int MULTISIM_NOT_SUPPORTED_BY_CARRIER = 2; // 0x2
+    field public static final int MULTISIM_NOT_SUPPORTED_BY_HARDWARE = 1; // 0x1
+    field public static final int NETWORK_SELECTION_MODE_AUTO = 1; // 0x1
+    field public static final int NETWORK_SELECTION_MODE_MANUAL = 2; // 0x2
+    field public static final int NETWORK_SELECTION_MODE_UNKNOWN = 0; // 0x0
+    field public static final int NETWORK_TYPE_1xRTT = 7; // 0x7
+    field public static final int NETWORK_TYPE_CDMA = 4; // 0x4
+    field public static final int NETWORK_TYPE_EDGE = 2; // 0x2
+    field public static final int NETWORK_TYPE_EHRPD = 14; // 0xe
+    field public static final int NETWORK_TYPE_EVDO_0 = 5; // 0x5
+    field public static final int NETWORK_TYPE_EVDO_A = 6; // 0x6
+    field public static final int NETWORK_TYPE_EVDO_B = 12; // 0xc
+    field public static final int NETWORK_TYPE_GPRS = 1; // 0x1
+    field public static final int NETWORK_TYPE_GSM = 16; // 0x10
+    field public static final int NETWORK_TYPE_HSDPA = 8; // 0x8
+    field public static final int NETWORK_TYPE_HSPA = 10; // 0xa
+    field public static final int NETWORK_TYPE_HSPAP = 15; // 0xf
+    field public static final int NETWORK_TYPE_HSUPA = 9; // 0x9
+    field public static final int NETWORK_TYPE_IDEN = 11; // 0xb
+    field public static final int NETWORK_TYPE_IWLAN = 18; // 0x12
+    field public static final int NETWORK_TYPE_LTE = 13; // 0xd
+    field public static final int NETWORK_TYPE_NR = 20; // 0x14
+    field public static final int NETWORK_TYPE_TD_SCDMA = 17; // 0x11
+    field public static final int NETWORK_TYPE_UMTS = 3; // 0x3
+    field public static final int NETWORK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int PHONE_TYPE_CDMA = 2; // 0x2
+    field public static final int PHONE_TYPE_GSM = 1; // 0x1
+    field public static final int PHONE_TYPE_NONE = 0; // 0x0
+    field public static final int PHONE_TYPE_SIP = 3; // 0x3
+    field public static final int SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION = 2; // 0x2
+    field public static final int SET_OPPORTUNISTIC_SUB_NO_OPPORTUNISTIC_SUB_AVAILABLE = 3; // 0x3
+    field public static final int SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION = 4; // 0x4
+    field public static final int SET_OPPORTUNISTIC_SUB_SUCCESS = 0; // 0x0
+    field public static final int SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED = 1; // 0x1
+    field public static final int SIM_STATE_ABSENT = 1; // 0x1
+    field public static final int SIM_STATE_CARD_IO_ERROR = 8; // 0x8
+    field public static final int SIM_STATE_CARD_RESTRICTED = 9; // 0x9
+    field public static final int SIM_STATE_NETWORK_LOCKED = 4; // 0x4
+    field public static final int SIM_STATE_NOT_READY = 6; // 0x6
+    field public static final int SIM_STATE_PERM_DISABLED = 7; // 0x7
+    field public static final int SIM_STATE_PIN_REQUIRED = 2; // 0x2
+    field public static final int SIM_STATE_PUK_REQUIRED = 3; // 0x3
+    field public static final int SIM_STATE_READY = 5; // 0x5
+    field public static final int SIM_STATE_UNKNOWN = 0; // 0x0
+    field public static final int UNINITIALIZED_CARD_ID = -2; // 0xfffffffe
+    field public static final int UNKNOWN_CARRIER_ID = -1; // 0xffffffff
+    field public static final int UNSUPPORTED_CARD_ID = -1; // 0xffffffff
+    field public static final int UPDATE_AVAILABLE_NETWORKS_ABORTED = 2; // 0x2
+    field public static final int UPDATE_AVAILABLE_NETWORKS_DISABLE_MODEM_FAIL = 5; // 0x5
+    field public static final int UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL = 6; // 0x6
+    field public static final int UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS = 3; // 0x3
+    field public static final int UPDATE_AVAILABLE_NETWORKS_MULTIPLE_NETWORKS_NOT_SUPPORTED = 7; // 0x7
+    field public static final int UPDATE_AVAILABLE_NETWORKS_NO_CARRIER_PRIVILEGE = 4; // 0x4
+    field public static final int UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE = 8; // 0x8
+    field public static final int UPDATE_AVAILABLE_NETWORKS_REMOTE_SERVICE_EXCEPTION = 9; // 0x9
+    field public static final int UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED = 10; // 0xa
+    field public static final int UPDATE_AVAILABLE_NETWORKS_SUCCESS = 0; // 0x0
+    field public static final int UPDATE_AVAILABLE_NETWORKS_UNKNOWN_FAILURE = 1; // 0x1
+    field public static final int USSD_ERROR_SERVICE_UNAVAIL = -2; // 0xfffffffe
+    field public static final int USSD_RETURN_FAILURE = -1; // 0xffffffff
+    field public static final String VVM_TYPE_CVVM = "vvm_type_cvvm";
+    field public static final String VVM_TYPE_OMTP = "vvm_type_omtp";
+  }
+
+  public static class TelephonyManager.CallComposerException extends java.lang.Exception {
+    ctor public TelephonyManager.CallComposerException(int, @Nullable java.io.IOException);
+    method public int getErrorCode();
+    method @Nullable public java.io.IOException getIOException();
+    field public static final int ERROR_AUTHENTICATION_FAILED = 3; // 0x3
+    field public static final int ERROR_FILE_TOO_LARGE = 2; // 0x2
+    field public static final int ERROR_INPUT_CLOSED = 4; // 0x4
+    field public static final int ERROR_IO_EXCEPTION = 5; // 0x5
+    field public static final int ERROR_NETWORK_UNAVAILABLE = 6; // 0x6
+    field public static final int ERROR_REMOTE_END_CLOSED = 1; // 0x1
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public abstract static class TelephonyManager.CellInfoCallback {
+    ctor public TelephonyManager.CellInfoCallback();
+    method public abstract void onCellInfo(@NonNull java.util.List<android.telephony.CellInfo>);
+    method public void onError(int, @Nullable Throwable);
+    field public static final int ERROR_MODEM_ERROR = 2; // 0x2
+    field public static final int ERROR_TIMEOUT = 1; // 0x1
+  }
+
+  public class TelephonyManager.ModemErrorException extends android.telephony.TelephonyManager.NetworkSlicingException {
+  }
+
+  public static class TelephonyManager.NetworkSlicingException extends java.lang.Exception {
+  }
+
+  public class TelephonyManager.TimeoutException extends android.telephony.TelephonyManager.NetworkSlicingException {
+  }
+
+  public abstract static class TelephonyManager.UssdResponseCallback {
+    ctor public TelephonyManager.UssdResponseCallback();
+    method public void onReceiveUssdResponse(android.telephony.TelephonyManager, String, CharSequence);
+    method public void onReceiveUssdResponseFailed(android.telephony.TelephonyManager, String, int);
+  }
+
+  public final class TelephonyScanManager {
+    ctor public TelephonyScanManager();
+  }
+
+  public abstract static class TelephonyScanManager.NetworkScanCallback {
+    ctor public TelephonyScanManager.NetworkScanCallback();
+    method public void onComplete();
+    method public void onError(int);
+    method public void onResults(java.util.List<android.telephony.CellInfo>);
+  }
+
+  public final class UiccCardInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCardId();
+    method @Nullable public String getEid();
+    method @Nullable public String getIccId();
+    method public int getSlotIndex();
+    method public boolean isEuicc();
+    method public boolean isRemovable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccCardInfo> CREATOR;
+  }
+
+  public abstract class VisualVoicemailService extends android.app.Service {
+    ctor public VisualVoicemailService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @MainThread public abstract void onCellServiceConnected(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle);
+    method @MainThread public abstract void onSimRemoved(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle);
+    method @MainThread public abstract void onSmsReceived(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telephony.VisualVoicemailSms);
+    method @MainThread public abstract void onStopped(android.telephony.VisualVoicemailService.VisualVoicemailTask);
+    field public static final String SERVICE_INTERFACE = "android.telephony.VisualVoicemailService";
+  }
+
+  public static class VisualVoicemailService.VisualVoicemailTask {
+    method public final void finish();
+  }
+
+  public final class VisualVoicemailSms implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.os.Bundle getFields();
+    method public String getMessageBody();
+    method public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method public String getPrefix();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VisualVoicemailSms> CREATOR;
+  }
+
+  public final class VisualVoicemailSmsFilterSettings implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VisualVoicemailSmsFilterSettings> CREATOR;
+    field public static final int DESTINATION_PORT_ANY = -1; // 0xffffffff
+    field public static final int DESTINATION_PORT_DATA_SMS = -2; // 0xfffffffe
+    field public final String clientPrefix;
+    field public final int destinationPort;
+    field public final java.util.List<java.lang.String> originatingNumbers;
+  }
+
+  public static class VisualVoicemailSmsFilterSettings.Builder {
+    ctor public VisualVoicemailSmsFilterSettings.Builder();
+    method public android.telephony.VisualVoicemailSmsFilterSettings build();
+    method public android.telephony.VisualVoicemailSmsFilterSettings.Builder setClientPrefix(String);
+    method public android.telephony.VisualVoicemailSmsFilterSettings.Builder setDestinationPort(int);
+    method public android.telephony.VisualVoicemailSmsFilterSettings.Builder setOriginatingNumbers(java.util.List<java.lang.String>);
+  }
+
+}
+
+package android.telephony.cdma {
+
+  @Deprecated public class CdmaCellLocation extends android.telephony.CellLocation {
+    ctor @Deprecated public CdmaCellLocation();
+    ctor @Deprecated public CdmaCellLocation(android.os.Bundle);
+    method @Deprecated public static double convertQuartSecToDecDegrees(int);
+    method @Deprecated public void fillInNotifierBundle(android.os.Bundle);
+    method @Deprecated public int getBaseStationId();
+    method @Deprecated public int getBaseStationLatitude();
+    method @Deprecated public int getBaseStationLongitude();
+    method @Deprecated public int getNetworkId();
+    method @Deprecated public int getSystemId();
+    method @Deprecated public void setCellLocationData(int, int, int);
+    method @Deprecated public void setCellLocationData(int, int, int, int, int);
+    method @Deprecated public void setStateInvalid();
+  }
+
+}
+
+package android.telephony.data {
+
+  public class ApnSetting implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getApnName();
+    method public int getApnTypeBitmask();
+    method public int getAuthType();
+    method public int getCarrierId();
+    method public String getEntryName();
+    method public int getId();
+    method @Deprecated public java.net.InetAddress getMmsProxyAddress();
+    method public String getMmsProxyAddressAsString();
+    method public int getMmsProxyPort();
+    method public android.net.Uri getMmsc();
+    method public int getMvnoType();
+    method public int getNetworkTypeBitmask();
+    method public String getOperatorNumeric();
+    method public String getPassword();
+    method public int getProtocol();
+    method @Deprecated public java.net.InetAddress getProxyAddress();
+    method public String getProxyAddressAsString();
+    method public int getProxyPort();
+    method public int getRoamingProtocol();
+    method public String getUser();
+    method public boolean isEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int AUTH_TYPE_CHAP = 2; // 0x2
+    field public static final int AUTH_TYPE_NONE = 0; // 0x0
+    field public static final int AUTH_TYPE_PAP = 1; // 0x1
+    field public static final int AUTH_TYPE_PAP_OR_CHAP = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.ApnSetting> CREATOR;
+    field public static final int MVNO_TYPE_GID = 2; // 0x2
+    field public static final int MVNO_TYPE_ICCID = 3; // 0x3
+    field public static final int MVNO_TYPE_IMSI = 1; // 0x1
+    field public static final int MVNO_TYPE_SPN = 0; // 0x0
+    field public static final int PROTOCOL_IP = 0; // 0x0
+    field public static final int PROTOCOL_IPV4V6 = 2; // 0x2
+    field public static final int PROTOCOL_IPV6 = 1; // 0x1
+    field public static final int PROTOCOL_NON_IP = 4; // 0x4
+    field public static final int PROTOCOL_PPP = 3; // 0x3
+    field public static final int PROTOCOL_UNSTRUCTURED = 5; // 0x5
+    field public static final int TYPE_BIP = 8192; // 0x2000
+    field public static final int TYPE_CBS = 128; // 0x80
+    field public static final int TYPE_DEFAULT = 17; // 0x11
+    field public static final int TYPE_DUN = 8; // 0x8
+    field public static final int TYPE_EMERGENCY = 512; // 0x200
+    field public static final int TYPE_FOTA = 32; // 0x20
+    field public static final int TYPE_HIPRI = 16; // 0x10
+    field public static final int TYPE_IA = 256; // 0x100
+    field public static final int TYPE_IMS = 64; // 0x40
+    field public static final int TYPE_MCX = 1024; // 0x400
+    field public static final int TYPE_MMS = 2; // 0x2
+    field public static final int TYPE_SUPL = 4; // 0x4
+    field public static final int TYPE_VSIM = 4096; // 0x1000
+    field public static final int TYPE_XCAP = 2048; // 0x800
+  }
+
+  public static class ApnSetting.Builder {
+    ctor public ApnSetting.Builder();
+    method public android.telephony.data.ApnSetting build();
+    method @NonNull public android.telephony.data.ApnSetting.Builder setApnName(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setApnTypeBitmask(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setAuthType(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setCarrierEnabled(boolean);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setCarrierId(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setEntryName(@Nullable String);
+    method @Deprecated public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(java.net.InetAddress);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMmsProxyPort(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMmsc(@Nullable android.net.Uri);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMvnoType(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setNetworkTypeBitmask(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setOperatorNumeric(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setPassword(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setProtocol(int);
+    method @Deprecated public android.telephony.data.ApnSetting.Builder setProxyAddress(java.net.InetAddress);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setProxyAddress(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setProxyPort(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setRoamingProtocol(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setUser(@Nullable String);
+  }
+
+  public final class NetworkSliceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0xffffffff, to=0xfffffe) public int getMappedHplmnSliceDifferentiator();
+    method public int getMappedHplmnSliceServiceType();
+    method @IntRange(from=0xffffffff, to=0xfffffe) public int getSliceDifferentiator();
+    method public int getSliceServiceType();
+    method public int getStatus();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.NetworkSliceInfo> CREATOR;
+    field public static final int SLICE_DIFFERENTIATOR_NO_SLICE = -1; // 0xffffffff
+    field public static final int SLICE_SERVICE_TYPE_EMBB = 1; // 0x1
+    field public static final int SLICE_SERVICE_TYPE_MIOT = 3; // 0x3
+    field public static final int SLICE_SERVICE_TYPE_NONE = 0; // 0x0
+    field public static final int SLICE_SERVICE_TYPE_URLLC = 2; // 0x2
+    field public static final int SLICE_STATUS_ALLOWED = 2; // 0x2
+    field public static final int SLICE_STATUS_CONFIGURED = 1; // 0x1
+    field public static final int SLICE_STATUS_DEFAULT_CONFIGURED = 5; // 0x5
+    field public static final int SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN = 3; // 0x3
+    field public static final int SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_REGISTERED_AREA = 4; // 0x4
+    field public static final int SLICE_STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class NetworkSliceInfo.Builder {
+    ctor public NetworkSliceInfo.Builder();
+    method @NonNull public android.telephony.data.NetworkSliceInfo build();
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setMappedHplmnSliceDifferentiator(@IntRange(from=0xffffffff, to=0xfffffe) int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setMappedHplmnSliceServiceType(int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setSliceDifferentiator(@IntRange(from=0xffffffff, to=0xfffffe) int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setSliceServiceType(int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setStatus(int);
+  }
+
+  public final class NetworkSlicingConfig implements android.os.Parcelable {
+    ctor public NetworkSlicingConfig();
+    method public int describeContents();
+    method @NonNull public java.util.List<android.telephony.data.NetworkSliceInfo> getSliceInfo();
+    method @NonNull public java.util.List<android.telephony.data.UrspRule> getUrspRules();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.NetworkSlicingConfig> CREATOR;
+  }
+
+  public final class RouteSelectionDescriptor implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getDataNetworkName();
+    method @IntRange(from=0x0, to=0xff) public int getPrecedence();
+    method public int getSessionType();
+    method @NonNull public java.util.List<android.telephony.data.NetworkSliceInfo> getSliceInfo();
+    method public int getSscMode();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.RouteSelectionDescriptor> CREATOR;
+    field public static final int ROUTE_SSC_MODE_1 = 1; // 0x1
+    field public static final int ROUTE_SSC_MODE_2 = 2; // 0x2
+    field public static final int ROUTE_SSC_MODE_3 = 3; // 0x3
+    field public static final int SESSION_TYPE_IPV4 = 0; // 0x0
+    field public static final int SESSION_TYPE_IPV4V6 = 2; // 0x2
+    field public static final int SESSION_TYPE_IPV6 = 1; // 0x1
+  }
+
+  public final class TrafficDescriptor implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getDataNetworkName();
+    method @Nullable public byte[] getOsAppId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.TrafficDescriptor> CREATOR;
+  }
+
+  public static final class TrafficDescriptor.Builder {
+    ctor public TrafficDescriptor.Builder();
+    method @NonNull public android.telephony.data.TrafficDescriptor build();
+    method @NonNull public android.telephony.data.TrafficDescriptor.Builder setDataNetworkName(@NonNull String);
+    method @NonNull public android.telephony.data.TrafficDescriptor.Builder setOsAppId(@NonNull byte[]);
+  }
+
+  public final class UrspRule implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0x0, to=0xff) public int getPrecedence();
+    method @NonNull public java.util.List<android.telephony.data.RouteSelectionDescriptor> getRouteSelectionDescriptor();
+    method @NonNull public java.util.List<android.telephony.data.TrafficDescriptor> getTrafficDescriptors();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.UrspRule> CREATOR;
+  }
+
+}
+
+package android.telephony.emergency {
+
+  public final class EmergencyNumber implements java.lang.Comparable<android.telephony.emergency.EmergencyNumber> android.os.Parcelable {
+    method public int compareTo(@NonNull android.telephony.emergency.EmergencyNumber);
+    method public int describeContents();
+    method @NonNull public String getCountryIso();
+    method public int getEmergencyCallRouting();
+    method @NonNull public java.util.List<java.lang.Integer> getEmergencyNumberSources();
+    method @NonNull public java.util.List<java.lang.Integer> getEmergencyServiceCategories();
+    method @NonNull public java.util.List<java.lang.String> getEmergencyUrns();
+    method @NonNull public String getMnc();
+    method @NonNull public String getNumber();
+    method public boolean isFromSources(int);
+    method public boolean isInEmergencyServiceCategories(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.emergency.EmergencyNumber> CREATOR;
+    field public static final int EMERGENCY_CALL_ROUTING_EMERGENCY = 1; // 0x1
+    field public static final int EMERGENCY_CALL_ROUTING_NORMAL = 2; // 0x2
+    field public static final int EMERGENCY_CALL_ROUTING_UNKNOWN = 0; // 0x0
+    field public static final int EMERGENCY_NUMBER_SOURCE_DATABASE = 16; // 0x10
+    field public static final int EMERGENCY_NUMBER_SOURCE_DEFAULT = 8; // 0x8
+    field public static final int EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG = 4; // 0x4
+    field public static final int EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING = 1; // 0x1
+    field public static final int EMERGENCY_NUMBER_SOURCE_SIM = 2; // 0x2
+    field public static final int EMERGENCY_SERVICE_CATEGORY_AIEC = 64; // 0x40
+    field public static final int EMERGENCY_SERVICE_CATEGORY_AMBULANCE = 2; // 0x2
+    field public static final int EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE = 4; // 0x4
+    field public static final int EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD = 8; // 0x8
+    field public static final int EMERGENCY_SERVICE_CATEGORY_MIEC = 32; // 0x20
+    field public static final int EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE = 16; // 0x10
+    field public static final int EMERGENCY_SERVICE_CATEGORY_POLICE = 1; // 0x1
+    field public static final int EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED = 0; // 0x0
+  }
+
+}
+
+package android.telephony.euicc {
+
+  public final class DownloadableSubscription implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.telephony.euicc.DownloadableSubscription forActivationCode(String);
+    method @Nullable public String getConfirmationCode();
+    method @Nullable public String getEncodedActivationCode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.DownloadableSubscription> CREATOR;
+  }
+
+  public static final class DownloadableSubscription.Builder {
+    ctor public DownloadableSubscription.Builder(@NonNull android.telephony.euicc.DownloadableSubscription);
+    ctor public DownloadableSubscription.Builder(@NonNull String);
+    method @NonNull public android.telephony.euicc.DownloadableSubscription build();
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setConfirmationCode(@NonNull String);
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setEncodedActivationCode(@NonNull String);
+  }
+
+  public final class EuiccInfo implements android.os.Parcelable {
+    ctor public EuiccInfo(@Nullable String);
+    method public int describeContents();
+    method @Nullable public String getOsVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccInfo> CREATOR;
+  }
+
+  public class EuiccManager {
+    method @NonNull public android.telephony.euicc.EuiccManager createForCardId(int);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void deleteSubscription(int, android.app.PendingIntent);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void downloadSubscription(android.telephony.euicc.DownloadableSubscription, boolean, android.app.PendingIntent);
+    method @Nullable public String getEid();
+    method @Nullable public android.telephony.euicc.EuiccInfo getEuiccInfo();
+    method public boolean isEnabled();
+    method public void startResolutionActivity(android.app.Activity, int, android.content.Intent, android.app.PendingIntent) throws android.content.IntentSender.SendIntentException;
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, android.app.PendingIntent);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void updateSubscriptionNickname(int, @Nullable String, @NonNull android.app.PendingIntent);
+    field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";
+    field public static final String ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE = "android.telephony.euicc.action.NOTIFY_CARRIER_SETUP_INCOMPLETE";
+    field public static final String ACTION_START_EUICC_ACTIVATION = "android.telephony.euicc.action.START_EUICC_ACTIVATION";
+    field public static final int EMBEDDED_SUBSCRIPTION_RESULT_ERROR = 2; // 0x2
+    field public static final int EMBEDDED_SUBSCRIPTION_RESULT_OK = 0; // 0x0
+    field public static final int EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR = 1; // 0x1
+    field public static final int ERROR_ADDRESS_MISSING = 10011; // 0x271b
+    field public static final int ERROR_CARRIER_LOCKED = 10000; // 0x2710
+    field public static final int ERROR_CERTIFICATE_ERROR = 10012; // 0x271c
+    field public static final int ERROR_CONNECTION_ERROR = 10014; // 0x271e
+    field public static final int ERROR_DISALLOWED_BY_PPR = 10010; // 0x271a
+    field public static final int ERROR_EUICC_INSUFFICIENT_MEMORY = 10004; // 0x2714
+    field public static final int ERROR_EUICC_MISSING = 10006; // 0x2716
+    field public static final int ERROR_INCOMPATIBLE_CARRIER = 10003; // 0x2713
+    field public static final int ERROR_INSTALL_PROFILE = 10009; // 0x2719
+    field public static final int ERROR_INVALID_ACTIVATION_CODE = 10001; // 0x2711
+    field public static final int ERROR_INVALID_CONFIRMATION_CODE = 10002; // 0x2712
+    field public static final int ERROR_INVALID_RESPONSE = 10015; // 0x271f
+    field public static final int ERROR_NO_PROFILES_AVAILABLE = 10013; // 0x271d
+    field public static final int ERROR_OPERATION_BUSY = 10016; // 0x2720
+    field public static final int ERROR_SIM_MISSING = 10008; // 0x2718
+    field public static final int ERROR_TIME_OUT = 10005; // 0x2715
+    field public static final int ERROR_UNSUPPORTED_VERSION = 10007; // 0x2717
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DETAILED_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_ERROR_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_ERROR_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_OPERATION_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE";
+    field public static final String EXTRA_USE_QR_SCANNER = "android.telephony.euicc.extra.USE_QR_SCANNER";
+    field public static final String META_DATA_CARRIER_ICON = "android.telephony.euicc.carriericon";
+    field public static final int OPERATION_APDU = 8; // 0x8
+    field public static final int OPERATION_DOWNLOAD = 5; // 0x5
+    field public static final int OPERATION_EUICC_CARD = 3; // 0x3
+    field public static final int OPERATION_EUICC_GSMA = 7; // 0x7
+    field public static final int OPERATION_HTTP = 11; // 0xb
+    field public static final int OPERATION_METADATA = 6; // 0x6
+    field public static final int OPERATION_SIM_SLOT = 2; // 0x2
+    field public static final int OPERATION_SMDX = 9; // 0x9
+    field public static final int OPERATION_SMDX_SUBJECT_REASON_CODE = 10; // 0xa
+    field public static final int OPERATION_SWITCH = 4; // 0x4
+    field public static final int OPERATION_SYSTEM = 1; // 0x1
+  }
+
+}
+
+package android.telephony.gsm {
+
+  @Deprecated public class GsmCellLocation extends android.telephony.CellLocation {
+    ctor @Deprecated public GsmCellLocation();
+    ctor @Deprecated public GsmCellLocation(android.os.Bundle);
+    method @Deprecated public void fillInNotifierBundle(android.os.Bundle);
+    method @Deprecated public int getCid();
+    method @Deprecated public int getLac();
+    method @Deprecated public int getPsc();
+    method @Deprecated public void setLacAndCid(int, int);
+    method @Deprecated public void setStateInvalid();
+  }
+
+  @Deprecated public final class SmsManager {
+    method @Deprecated public java.util.ArrayList<java.lang.String> divideMessage(String);
+    method @Deprecated public static android.telephony.gsm.SmsManager getDefault();
+    method @Deprecated public void sendDataMessage(String, String, short, byte[], android.app.PendingIntent, android.app.PendingIntent);
+    method @Deprecated public void sendMultipartTextMessage(String, String, java.util.ArrayList<java.lang.String>, java.util.ArrayList<android.app.PendingIntent>, java.util.ArrayList<android.app.PendingIntent>);
+    method @Deprecated public void sendTextMessage(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
+    field @Deprecated public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1
+    field @Deprecated public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4
+    field @Deprecated public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3
+    field @Deprecated public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2
+    field @Deprecated public static final int STATUS_ON_SIM_FREE = 0; // 0x0
+    field @Deprecated public static final int STATUS_ON_SIM_READ = 1; // 0x1
+    field @Deprecated public static final int STATUS_ON_SIM_SENT = 5; // 0x5
+    field @Deprecated public static final int STATUS_ON_SIM_UNREAD = 3; // 0x3
+    field @Deprecated public static final int STATUS_ON_SIM_UNSENT = 7; // 0x7
+  }
+
+  @Deprecated public class SmsMessage {
+    ctor @Deprecated public SmsMessage();
+    method @Deprecated public static int[] calculateLength(CharSequence, boolean);
+    method @Deprecated public static int[] calculateLength(String, boolean);
+    method @Deprecated public static android.telephony.gsm.SmsMessage createFromPdu(byte[]);
+    method @Deprecated public String getDisplayMessageBody();
+    method @Deprecated public String getDisplayOriginatingAddress();
+    method @Deprecated public String getEmailBody();
+    method @Deprecated public String getEmailFrom();
+    method @Deprecated public int getIndexOnSim();
+    method @Deprecated public String getMessageBody();
+    method @Deprecated public android.telephony.gsm.SmsMessage.MessageClass getMessageClass();
+    method @Deprecated public String getOriginatingAddress();
+    method @Deprecated public byte[] getPdu();
+    method @Deprecated public int getProtocolIdentifier();
+    method @Deprecated public String getPseudoSubject();
+    method @Deprecated public String getServiceCenterAddress();
+    method @Deprecated public int getStatus();
+    method @Deprecated public int getStatusOnSim();
+    method @Deprecated public static android.telephony.gsm.SmsMessage.SubmitPdu getSubmitPdu(String, String, String, boolean);
+    method @Deprecated public static android.telephony.gsm.SmsMessage.SubmitPdu getSubmitPdu(String, String, short, byte[], boolean);
+    method @Deprecated public static int getTPLayerLengthForPDU(String);
+    method @Deprecated public long getTimestampMillis();
+    method @Deprecated public byte[] getUserData();
+    method @Deprecated public boolean isCphsMwiMessage();
+    method @Deprecated public boolean isEmail();
+    method @Deprecated public boolean isMWIClearMessage();
+    method @Deprecated public boolean isMWISetMessage();
+    method @Deprecated public boolean isMwiDontStore();
+    method @Deprecated public boolean isReplace();
+    method @Deprecated public boolean isReplyPathPresent();
+    method @Deprecated public boolean isStatusReportMessage();
+    field @Deprecated public static final int ENCODING_16BIT = 3; // 0x3
+    field @Deprecated public static final int ENCODING_7BIT = 1; // 0x1
+    field @Deprecated public static final int ENCODING_8BIT = 2; // 0x2
+    field @Deprecated public static final int ENCODING_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final int MAX_USER_DATA_BYTES = 140; // 0x8c
+    field @Deprecated public static final int MAX_USER_DATA_SEPTETS = 160; // 0xa0
+    field @Deprecated public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153; // 0x99
+  }
+
+  @Deprecated public enum SmsMessage.MessageClass {
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_0;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_1;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_2;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_3;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass UNKNOWN;
+  }
+
+  @Deprecated public static class SmsMessage.SubmitPdu {
+    ctor @Deprecated public SmsMessage.SubmitPdu();
+    field @Deprecated public byte[] encodedMessage;
+    field @Deprecated public byte[] encodedScAddress;
+  }
+
+}
+
+package android.telephony.ims {
+
+  public final class ImsException extends java.lang.Exception {
+    method public int getCode();
+    field public static final int CODE_ERROR_INVALID_SUBSCRIPTION = 3; // 0x3
+    field public static final int CODE_ERROR_SERVICE_UNAVAILABLE = 1; // 0x1
+    field public static final int CODE_ERROR_UNSPECIFIED = 0; // 0x0
+    field public static final int CODE_ERROR_UNSUPPORTED_OPERATION = 2; // 0x2
+  }
+
+  public class ImsManager {
+    method @NonNull public android.telephony.ims.ImsMmTelManager getImsMmTelManager(int);
+    method @NonNull public android.telephony.ims.ImsRcsManager getImsRcsManager(int);
+    field public static final String ACTION_WFC_IMS_REGISTRATION_ERROR = "android.telephony.ims.action.WFC_IMS_REGISTRATION_ERROR";
+    field public static final String EXTRA_WFC_REGISTRATION_FAILURE_MESSAGE = "android.telephony.ims.extra.WFC_REGISTRATION_FAILURE_MESSAGE";
+    field public static final String EXTRA_WFC_REGISTRATION_FAILURE_TITLE = "android.telephony.ims.extra.WFC_REGISTRATION_FAILURE_TITLE";
+  }
+
+  public class ImsMmTelManager implements android.telephony.ims.RegistrationManager {
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public int getVoWiFiModeSetting();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isAdvancedCallingSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isCrossSimCallingEnabled() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isTtyOverVolteEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isVoWiFiRoamingSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isVoWiFiSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isVtSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void registerMmTelCapabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void unregisterMmTelCapabilityCallback(@NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback);
+    field public static final int WIFI_MODE_CELLULAR_PREFERRED = 1; // 0x1
+    field public static final int WIFI_MODE_WIFI_ONLY = 0; // 0x0
+    field public static final int WIFI_MODE_WIFI_PREFERRED = 2; // 0x2
+  }
+
+  public static class ImsMmTelManager.CapabilityCallback {
+    ctor public ImsMmTelManager.CapabilityCallback();
+    method public void onCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.MmTelFeature.MmTelCapabilities);
+  }
+
+  public class ImsRcsManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @NonNull public android.telephony.ims.RcsUceAdapter getUceAdapter();
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
+    field public static final String ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN = "android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN";
+  }
+
+  public final class ImsReasonInfo implements android.os.Parcelable {
+    ctor public ImsReasonInfo(int, int, @Nullable String);
+    method public int describeContents();
+    method public int getCode();
+    method public int getExtraCode();
+    method @Nullable public String getExtraMessage();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CODE_ACCESS_CLASS_BLOCKED = 1512; // 0x5e8
+    field public static final int CODE_ANSWERED_ELSEWHERE = 1014; // 0x3f6
+    field public static final int CODE_BLACKLISTED_CALL_ID = 506; // 0x1fa
+    field public static final int CODE_CALL_BARRED = 240; // 0xf0
+    field public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100; // 0x44c
+    field public static final int CODE_CALL_END_CAUSE_CALL_PULL = 1016; // 0x3f8
+    field public static final int CODE_CALL_PULL_OUT_OF_SYNC = 1015; // 0x3f7
+    field public static final int CODE_DATA_DISABLED = 1406; // 0x57e
+    field public static final int CODE_DATA_LIMIT_REACHED = 1405; // 0x57d
+    field public static final int CODE_DIAL_MODIFIED_TO_DIAL = 246; // 0xf6
+    field public static final int CODE_DIAL_MODIFIED_TO_DIAL_VIDEO = 247; // 0xf7
+    field public static final int CODE_DIAL_MODIFIED_TO_SS = 245; // 0xf5
+    field public static final int CODE_DIAL_MODIFIED_TO_USSD = 244; // 0xf4
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL = 248; // 0xf8
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 249; // 0xf9
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_SS = 250; // 0xfa
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_USSD = 251; // 0xfb
+    field public static final int CODE_ECBM_NOT_SUPPORTED = 901; // 0x385
+    field public static final int CODE_EMERGENCY_PERM_FAILURE = 364; // 0x16c
+    field public static final int CODE_EMERGENCY_TEMP_FAILURE = 363; // 0x16b
+    field public static final int CODE_EPDG_TUNNEL_ESTABLISH_FAILURE = 1400; // 0x578
+    field public static final int CODE_EPDG_TUNNEL_LOST_CONNECTION = 1402; // 0x57a
+    field public static final int CODE_EPDG_TUNNEL_REKEY_FAILURE = 1401; // 0x579
+    field public static final int CODE_FDN_BLOCKED = 241; // 0xf1
+    field public static final int CODE_IKEV2_AUTH_FAILURE = 1408; // 0x580
+    field public static final int CODE_IMEI_NOT_ACCEPTED = 243; // 0xf3
+    field public static final int CODE_IWLAN_DPD_FAILURE = 1300; // 0x514
+    field public static final int CODE_LOCAL_CALL_BUSY = 142; // 0x8e
+    field public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146; // 0x92
+    field public static final int CODE_LOCAL_CALL_DECLINE = 143; // 0x8f
+    field public static final int CODE_LOCAL_CALL_EXCEEDED = 141; // 0x8d
+    field public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145; // 0x91
+    field public static final int CODE_LOCAL_CALL_TERMINATED = 148; // 0x94
+    field public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144; // 0x90
+    field public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147; // 0x93
+    field public static final int CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE = 108; // 0x6c
+    field public static final int CODE_LOCAL_HO_NOT_FEASIBLE = 149; // 0x95
+    field public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101; // 0x65
+    field public static final int CODE_LOCAL_ILLEGAL_STATE = 102; // 0x66
+    field public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106; // 0x6a
+    field public static final int CODE_LOCAL_INTERNAL_ERROR = 103; // 0x67
+    field public static final int CODE_LOCAL_LOW_BATTERY = 112; // 0x70
+    field public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124; // 0x7c
+    field public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122; // 0x7a
+    field public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121; // 0x79
+    field public static final int CODE_LOCAL_NETWORK_ROAMING = 123; // 0x7b
+    field public static final int CODE_LOCAL_NOT_REGISTERED = 132; // 0x84
+    field public static final int CODE_LOCAL_NO_PENDING_CALL = 107; // 0x6b
+    field public static final int CODE_LOCAL_POWER_OFF = 111; // 0x6f
+    field public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131; // 0x83
+    field public static final int CODE_LOW_BATTERY = 505; // 0x1f9
+    field public static final int CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED = 1403; // 0x57b
+    field public static final int CODE_MEDIA_INIT_FAILED = 401; // 0x191
+    field public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403; // 0x193
+    field public static final int CODE_MEDIA_NO_DATA = 402; // 0x192
+    field public static final int CODE_MEDIA_UNSPECIFIED = 404; // 0x194
+    field public static final int CODE_MULTIENDPOINT_NOT_SUPPORTED = 902; // 0x386
+    field public static final int CODE_NETWORK_CONGESTION = 1624; // 0x658
+    field public static final int CODE_NETWORK_DETACH = 1513; // 0x5e9
+    field public static final int CODE_NETWORK_REJECT = 1504; // 0x5e0
+    field public static final int CODE_NETWORK_RESP_TIMEOUT = 1503; // 0x5df
+    field public static final int CODE_NO_CSFB_IN_CS_ROAM = 1516; // 0x5ec
+    field public static final int CODE_NO_VALID_SIM = 1501; // 0x5dd
+    field public static final int CODE_OEM_CAUSE_1 = 61441; // 0xf001
+    field public static final int CODE_OEM_CAUSE_10 = 61450; // 0xf00a
+    field public static final int CODE_OEM_CAUSE_11 = 61451; // 0xf00b
+    field public static final int CODE_OEM_CAUSE_12 = 61452; // 0xf00c
+    field public static final int CODE_OEM_CAUSE_13 = 61453; // 0xf00d
+    field public static final int CODE_OEM_CAUSE_14 = 61454; // 0xf00e
+    field public static final int CODE_OEM_CAUSE_15 = 61455; // 0xf00f
+    field public static final int CODE_OEM_CAUSE_2 = 61442; // 0xf002
+    field public static final int CODE_OEM_CAUSE_3 = 61443; // 0xf003
+    field public static final int CODE_OEM_CAUSE_4 = 61444; // 0xf004
+    field public static final int CODE_OEM_CAUSE_5 = 61445; // 0xf005
+    field public static final int CODE_OEM_CAUSE_6 = 61446; // 0xf006
+    field public static final int CODE_OEM_CAUSE_7 = 61447; // 0xf007
+    field public static final int CODE_OEM_CAUSE_8 = 61448; // 0xf008
+    field public static final int CODE_OEM_CAUSE_9 = 61449; // 0xf009
+    field public static final int CODE_RADIO_ACCESS_FAILURE = 1505; // 0x5e1
+    field public static final int CODE_RADIO_INTERNAL_ERROR = 1502; // 0x5de
+    field public static final int CODE_RADIO_LINK_FAILURE = 1506; // 0x5e2
+    field public static final int CODE_RADIO_LINK_LOST = 1507; // 0x5e3
+    field public static final int CODE_RADIO_OFF = 1500; // 0x5dc
+    field public static final int CODE_RADIO_RELEASE_ABNORMAL = 1511; // 0x5e7
+    field public static final int CODE_RADIO_RELEASE_NORMAL = 1510; // 0x5e6
+    field public static final int CODE_RADIO_SETUP_FAILURE = 1509; // 0x5e5
+    field public static final int CODE_RADIO_UPLINK_FAILURE = 1508; // 0x5e4
+    field public static final int CODE_REGISTRATION_ERROR = 1000; // 0x3e8
+    field public static final int CODE_REJECTED_ELSEWHERE = 1017; // 0x3f9
+    field public static final int CODE_REJECT_1X_COLLISION = 1603; // 0x643
+    field public static final int CODE_REJECT_CALL_ON_OTHER_SUB = 1602; // 0x642
+    field public static final int CODE_REJECT_CALL_TYPE_NOT_ALLOWED = 1605; // 0x645
+    field public static final int CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED = 1617; // 0x651
+    field public static final int CODE_REJECT_INTERNAL_ERROR = 1612; // 0x64c
+    field public static final int CODE_REJECT_MAX_CALL_LIMIT_REACHED = 1608; // 0x648
+    field public static final int CODE_REJECT_ONGOING_CALL_SETUP = 1607; // 0x647
+    field public static final int CODE_REJECT_ONGOING_CALL_TRANSFER = 1611; // 0x64b
+    field public static final int CODE_REJECT_ONGOING_CALL_UPGRADE = 1616; // 0x650
+    field public static final int CODE_REJECT_ONGOING_CALL_WAITING_DISABLED = 1601; // 0x641
+    field public static final int CODE_REJECT_ONGOING_CONFERENCE_CALL = 1618; // 0x652
+    field public static final int CODE_REJECT_ONGOING_CS_CALL = 1621; // 0x655
+    field public static final int CODE_REJECT_ONGOING_E911_CALL = 1606; // 0x646
+    field public static final int CODE_REJECT_ONGOING_ENCRYPTED_CALL = 1620; // 0x654
+    field public static final int CODE_REJECT_ONGOING_HANDOVER = 1614; // 0x64e
+    field public static final int CODE_REJECT_QOS_FAILURE = 1613; // 0x64d
+    field public static final int CODE_REJECT_SERVICE_NOT_REGISTERED = 1604; // 0x644
+    field public static final int CODE_REJECT_UNKNOWN = 1600; // 0x640
+    field public static final int CODE_REJECT_UNSUPPORTED_SDP_HEADERS = 1610; // 0x64a
+    field public static final int CODE_REJECT_UNSUPPORTED_SIP_HEADERS = 1609; // 0x649
+    field public static final int CODE_REJECT_VT_AVPF_NOT_ALLOWED = 1619; // 0x653
+    field public static final int CODE_REJECT_VT_TTY_NOT_ALLOWED = 1615; // 0x64f
+    field public static final int CODE_REMOTE_CALL_DECLINE = 1404; // 0x57c
+    field public static final int CODE_SESSION_MODIFICATION_FAILED = 1517; // 0x5ed
+    field public static final int CODE_SIP_ALTERNATE_EMERGENCY_CALL = 1514; // 0x5ea
+    field public static final int CODE_SIP_AMBIGUOUS = 376; // 0x178
+    field public static final int CODE_SIP_BAD_ADDRESS = 337; // 0x151
+    field public static final int CODE_SIP_BAD_REQUEST = 331; // 0x14b
+    field public static final int CODE_SIP_BUSY = 338; // 0x152
+    field public static final int CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST = 372; // 0x174
+    field public static final int CODE_SIP_CLIENT_ERROR = 342; // 0x156
+    field public static final int CODE_SIP_EXTENSION_REQUIRED = 370; // 0x172
+    field public static final int CODE_SIP_FORBIDDEN = 332; // 0x14c
+    field public static final int CODE_SIP_GLOBAL_ERROR = 362; // 0x16a
+    field public static final int CODE_SIP_INTERVAL_TOO_BRIEF = 371; // 0x173
+    field public static final int CODE_SIP_LOOP_DETECTED = 373; // 0x175
+    field public static final int CODE_SIP_METHOD_NOT_ALLOWED = 366; // 0x16e
+    field public static final int CODE_SIP_NOT_ACCEPTABLE = 340; // 0x154
+    field public static final int CODE_SIP_NOT_FOUND = 333; // 0x14d
+    field public static final int CODE_SIP_NOT_REACHABLE = 341; // 0x155
+    field public static final int CODE_SIP_NOT_SUPPORTED = 334; // 0x14e
+    field public static final int CODE_SIP_PROXY_AUTHENTICATION_REQUIRED = 367; // 0x16f
+    field public static final int CODE_SIP_REDIRECTED = 321; // 0x141
+    field public static final int CODE_SIP_REQUEST_CANCELLED = 339; // 0x153
+    field public static final int CODE_SIP_REQUEST_ENTITY_TOO_LARGE = 368; // 0x170
+    field public static final int CODE_SIP_REQUEST_PENDING = 377; // 0x179
+    field public static final int CODE_SIP_REQUEST_TIMEOUT = 335; // 0x14f
+    field public static final int CODE_SIP_REQUEST_URI_TOO_LARGE = 369; // 0x171
+    field public static final int CODE_SIP_SERVER_ERROR = 354; // 0x162
+    field public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351; // 0x15f
+    field public static final int CODE_SIP_SERVER_TIMEOUT = 353; // 0x161
+    field public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352; // 0x160
+    field public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336; // 0x150
+    field public static final int CODE_SIP_TOO_MANY_HOPS = 374; // 0x176
+    field public static final int CODE_SIP_TRANSACTION_DOES_NOT_EXIST = 343; // 0x157
+    field public static final int CODE_SIP_UNDECIPHERABLE = 378; // 0x17a
+    field public static final int CODE_SIP_USER_MARKED_UNWANTED = 365; // 0x16d
+    field public static final int CODE_SIP_USER_REJECTED = 361; // 0x169
+    field public static final int CODE_SUPP_SVC_CANCELLED = 1202; // 0x4b2
+    field public static final int CODE_SUPP_SVC_FAILED = 1201; // 0x4b1
+    field public static final int CODE_SUPP_SVC_REINVITE_COLLISION = 1203; // 0x4b3
+    field public static final int CODE_TIMEOUT_1XX_WAITING = 201; // 0xc9
+    field public static final int CODE_TIMEOUT_NO_ANSWER = 202; // 0xca
+    field public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203; // 0xcb
+    field public static final int CODE_UNSPECIFIED = 0; // 0x0
+    field public static final int CODE_USER_CANCELLED_SESSION_MODIFICATION = 512; // 0x200
+    field public static final int CODE_USER_DECLINE = 504; // 0x1f8
+    field public static final int CODE_USER_IGNORE = 503; // 0x1f7
+    field public static final int CODE_USER_NOANSWER = 502; // 0x1f6
+    field public static final int CODE_USER_REJECTED_SESSION_MODIFICATION = 511; // 0x1ff
+    field public static final int CODE_USER_TERMINATED = 501; // 0x1f5
+    field public static final int CODE_USER_TERMINATED_BY_REMOTE = 510; // 0x1fe
+    field public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821; // 0x335
+    field public static final int CODE_UT_NETWORK_ERROR = 804; // 0x324
+    field public static final int CODE_UT_NOT_SUPPORTED = 801; // 0x321
+    field public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803; // 0x323
+    field public static final int CODE_UT_SERVICE_UNAVAILABLE = 802; // 0x322
+    field public static final int CODE_UT_SS_MODIFIED_TO_DIAL = 822; // 0x336
+    field public static final int CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO = 825; // 0x339
+    field public static final int CODE_UT_SS_MODIFIED_TO_SS = 824; // 0x338
+    field public static final int CODE_UT_SS_MODIFIED_TO_USSD = 823; // 0x337
+    field public static final int CODE_WIFI_LOST = 1407; // 0x57f
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsReasonInfo> CREATOR;
+    field public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3; // 0x3
+    field public static final int EXTRA_CODE_CALL_RETRY_EMERGENCY = 4; // 0x4
+    field public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1; // 0x1
+    field public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2; // 0x2
+  }
+
+  public final class ImsRegistrationAttributes implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAttributeFlags();
+    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
+    method public int getTransportType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ATTR_EPDG_OVER_CELL_INTERNET = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsRegistrationAttributes> CREATOR;
+  }
+
+  public class RcsUceAdapter {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isUceSettingEnabled() throws android.telephony.ims.ImsException;
+  }
+
+  public interface RegistrationManager {
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
+    field public static final int REGISTRATION_STATE_NOT_REGISTERED = 0; // 0x0
+    field public static final int REGISTRATION_STATE_REGISTERED = 2; // 0x2
+    field public static final int REGISTRATION_STATE_REGISTERING = 1; // 0x1
+  }
+
+  public static class RegistrationManager.RegistrationCallback {
+    ctor public RegistrationManager.RegistrationCallback();
+    method @Deprecated public void onRegistered(int);
+    method public void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method @Deprecated public void onRegistering(int);
+    method public void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method public void onTechnologyChangeFailed(int, @NonNull android.telephony.ims.ImsReasonInfo);
+    method public void onUnregistered(@NonNull android.telephony.ims.ImsReasonInfo);
+  }
+
+}
+
+package android.telephony.ims.feature {
+
+  public class MmTelFeature {
+  }
+
+  public static class MmTelFeature.MmTelCapabilities {
+    method public final boolean isCapable(int);
+    field public static final int CAPABILITY_TYPE_CALL_COMPOSER = 16; // 0x10
+    field public static final int CAPABILITY_TYPE_SMS = 8; // 0x8
+    field public static final int CAPABILITY_TYPE_UT = 4; // 0x4
+    field public static final int CAPABILITY_TYPE_VIDEO = 2; // 0x2
+    field public static final int CAPABILITY_TYPE_VOICE = 1; // 0x1
+  }
+
+}
+
+package android.telephony.mbms {
+
+  public class DownloadProgressListener {
+    ctor public DownloadProgressListener();
+    method public void onProgressUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int, int, int, int);
+  }
+
+  public final class DownloadRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.net.Uri getDestinationUri();
+    method public String getFileServiceId();
+    method public static int getMaxAppIntentSize();
+    method public static int getMaxDestinationUriSize();
+    method public android.net.Uri getSourceUri();
+    method public int getSubscriptionId();
+    method public byte[] toByteArray();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.DownloadRequest> CREATOR;
+  }
+
+  public static class DownloadRequest.Builder {
+    ctor public DownloadRequest.Builder(@NonNull android.net.Uri, @NonNull android.net.Uri);
+    method public android.telephony.mbms.DownloadRequest build();
+    method public static android.telephony.mbms.DownloadRequest.Builder fromDownloadRequest(android.telephony.mbms.DownloadRequest);
+    method public static android.telephony.mbms.DownloadRequest.Builder fromSerializedRequest(byte[]);
+    method public android.telephony.mbms.DownloadRequest.Builder setAppIntent(android.content.Intent);
+    method public android.telephony.mbms.DownloadRequest.Builder setServiceInfo(android.telephony.mbms.FileServiceInfo);
+    method public android.telephony.mbms.DownloadRequest.Builder setSubscriptionId(int);
+  }
+
+  public class DownloadStatusListener {
+    ctor public DownloadStatusListener();
+    method public void onStatusUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int);
+  }
+
+  public final class FileInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getMimeType();
+    method public android.net.Uri getUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.FileInfo> CREATOR;
+  }
+
+  public final class FileServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.List<android.telephony.mbms.FileInfo> getFiles();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.FileServiceInfo> CREATOR;
+  }
+
+  public class GroupCall implements java.lang.AutoCloseable {
+    method public void close();
+    method public long getTmgi();
+    method public void updateGroupCall(@NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);
+    field public static final int REASON_BY_USER_REQUEST = 1; // 0x1
+    field public static final int REASON_FREQUENCY_CONFLICT = 3; // 0x3
+    field public static final int REASON_LEFT_MBMS_BROADCAST_AREA = 6; // 0x6
+    field public static final int REASON_NONE = 0; // 0x0
+    field public static final int REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE = 5; // 0x5
+    field public static final int REASON_OUT_OF_MEMORY = 4; // 0x4
+    field public static final int STATE_STALLED = 3; // 0x3
+    field public static final int STATE_STARTED = 2; // 0x2
+    field public static final int STATE_STOPPED = 1; // 0x1
+  }
+
+  public interface GroupCallCallback {
+    method public default void onBroadcastSignalStrengthUpdated(@IntRange(from=0xffffffff, to=4) int);
+    method public default void onError(int, @Nullable String);
+    method public default void onGroupCallStateChanged(int, int);
+    field public static final int SIGNAL_STRENGTH_UNAVAILABLE = -1; // 0xffffffff
+  }
+
+  public class MbmsDownloadReceiver extends android.content.BroadcastReceiver {
+    ctor public MbmsDownloadReceiver();
+    method public void onReceive(android.content.Context, android.content.Intent);
+  }
+
+  public class MbmsDownloadSessionCallback {
+    ctor public MbmsDownloadSessionCallback();
+    method public void onError(int, String);
+    method public void onFileServicesUpdated(java.util.List<android.telephony.mbms.FileServiceInfo>);
+    method public void onMiddlewareReady();
+  }
+
+  public class MbmsErrors {
+    field public static final int ERROR_MIDDLEWARE_LOST = 3; // 0x3
+    field public static final int ERROR_MIDDLEWARE_NOT_BOUND = 2; // 0x2
+    field public static final int ERROR_NO_UNIQUE_MIDDLEWARE = 1; // 0x1
+    field public static final int SUCCESS = 0; // 0x0
+    field public static final int UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static class MbmsErrors.DownloadErrors {
+    field public static final int ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT = 401; // 0x191
+    field public static final int ERROR_MALFORMED_SERVICE_ANNOUNCEMENT = 404; // 0x194
+    field public static final int ERROR_UNKNOWN_DOWNLOAD_REQUEST = 402; // 0x192
+    field public static final int ERROR_UNKNOWN_FILE_INFO = 403; // 0x193
+  }
+
+  public static class MbmsErrors.GeneralErrors {
+    field public static final int ERROR_CARRIER_CHANGE_NOT_ALLOWED = 207; // 0xcf
+    field public static final int ERROR_IN_E911 = 204; // 0xcc
+    field public static final int ERROR_MIDDLEWARE_NOT_YET_READY = 201; // 0xc9
+    field public static final int ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE = 203; // 0xcb
+    field public static final int ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE = 205; // 0xcd
+    field public static final int ERROR_OUT_OF_MEMORY = 202; // 0xca
+    field public static final int ERROR_UNABLE_TO_READ_SIM = 206; // 0xce
+  }
+
+  public static class MbmsErrors.GroupCallErrors {
+    field public static final int ERROR_DUPLICATE_START_GROUP_CALL = 502; // 0x1f6
+    field public static final int ERROR_UNABLE_TO_START_SERVICE = 501; // 0x1f5
+  }
+
+  public static class MbmsErrors.InitializationErrors {
+    field public static final int ERROR_APP_PERMISSIONS_NOT_GRANTED = 102; // 0x66
+    field public static final int ERROR_DUPLICATE_INITIALIZE = 101; // 0x65
+    field public static final int ERROR_UNABLE_TO_INITIALIZE = 103; // 0x67
+  }
+
+  public static class MbmsErrors.StreamingErrors {
+    field public static final int ERROR_CONCURRENT_SERVICE_LIMIT_REACHED = 301; // 0x12d
+    field public static final int ERROR_DUPLICATE_START_STREAM = 303; // 0x12f
+    field public static final int ERROR_UNABLE_TO_START_SERVICE = 302; // 0x12e
+  }
+
+  public interface MbmsGroupCallSessionCallback {
+    method public default void onAvailableSaisUpdated(@NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.util.List<java.lang.Integer>>);
+    method public default void onError(int, @Nullable String);
+    method public default void onMiddlewareReady();
+    method public default void onServiceInterfaceAvailable(@NonNull String, int);
+  }
+
+  public class MbmsStreamingSessionCallback {
+    ctor public MbmsStreamingSessionCallback();
+    method public void onError(int, @Nullable String);
+    method public void onMiddlewareReady();
+    method public void onStreamingServicesUpdated(java.util.List<android.telephony.mbms.StreamingServiceInfo>);
+  }
+
+  public class ServiceInfo {
+    method public java.util.List<java.util.Locale> getLocales();
+    method @NonNull public CharSequence getNameForLocale(@NonNull java.util.Locale);
+    method @NonNull public java.util.Set<java.util.Locale> getNamedContentLocales();
+    method public String getServiceClassName();
+    method public String getServiceId();
+    method public java.util.Date getSessionEndTime();
+    method public java.util.Date getSessionStartTime();
+  }
+
+  public class StreamingService implements java.lang.AutoCloseable {
+    method public void close();
+    method public android.telephony.mbms.StreamingServiceInfo getInfo();
+    method @Nullable public android.net.Uri getPlaybackUri();
+    field public static final int BROADCAST_METHOD = 1; // 0x1
+    field public static final int REASON_BY_USER_REQUEST = 1; // 0x1
+    field public static final int REASON_END_OF_SESSION = 2; // 0x2
+    field public static final int REASON_FREQUENCY_CONFLICT = 3; // 0x3
+    field public static final int REASON_LEFT_MBMS_BROADCAST_AREA = 6; // 0x6
+    field public static final int REASON_NONE = 0; // 0x0
+    field public static final int REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE = 5; // 0x5
+    field public static final int REASON_OUT_OF_MEMORY = 4; // 0x4
+    field public static final int STATE_STALLED = 3; // 0x3
+    field public static final int STATE_STARTED = 2; // 0x2
+    field public static final int STATE_STOPPED = 1; // 0x1
+    field public static final int UNICAST_METHOD = 2; // 0x2
+  }
+
+  public class StreamingServiceCallback {
+    ctor public StreamingServiceCallback();
+    method public void onBroadcastSignalStrengthUpdated(int);
+    method public void onError(int, @Nullable String);
+    method public void onMediaDescriptionUpdated();
+    method public void onStreamMethodUpdated(int);
+    method public void onStreamStateUpdated(int, int);
+    field public static final int SIGNAL_STRENGTH_UNAVAILABLE = -1; // 0xffffffff
+  }
+
+  public final class StreamingServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.StreamingServiceInfo> CREATOR;
+  }
+
+}
+
+package android.text {
+
+  @Deprecated public class AlteredCharSequence implements java.lang.CharSequence android.text.GetChars {
+    method @Deprecated public char charAt(int);
+    method @Deprecated public void getChars(int, int, char[], int);
+    method @Deprecated public int length();
+    method @Deprecated public static android.text.AlteredCharSequence make(CharSequence, char[], int, int);
+    method @Deprecated public CharSequence subSequence(int, int);
+  }
+
+  @Deprecated public class AndroidCharacter {
+    ctor @Deprecated public AndroidCharacter();
+    method @Deprecated public static void getDirectionalities(char[], byte[], int);
+    method @Deprecated public static int getEastAsianWidth(char);
+    method @Deprecated public static void getEastAsianWidths(char[], int, int, byte[]);
+    method @Deprecated public static char getMirror(char);
+    method @Deprecated public static boolean mirror(char[], int, int);
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_AMBIGUOUS = 1; // 0x1
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_FULL_WIDTH = 3; // 0x3
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_HALF_WIDTH = 2; // 0x2
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_NARROW = 4; // 0x4
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_NEUTRAL = 0; // 0x0
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_WIDE = 5; // 0x5
+  }
+
+  public class Annotation implements android.text.ParcelableSpan {
+    ctor public Annotation(String, String);
+    ctor public Annotation(android.os.Parcel);
+    method public int describeContents();
+    method public String getKey();
+    method public int getSpanTypeId();
+    method public String getValue();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class AutoText {
+    method public static String get(CharSequence, int, int, android.view.View);
+    method public static int getSize(android.view.View);
+  }
+
+  public final class BidiFormatter {
+    method public static android.text.BidiFormatter getInstance();
+    method public static android.text.BidiFormatter getInstance(boolean);
+    method public static android.text.BidiFormatter getInstance(java.util.Locale);
+    method public boolean getStereoReset();
+    method public boolean isRtl(String);
+    method public boolean isRtl(CharSequence);
+    method public boolean isRtlContext();
+    method @Nullable public String unicodeWrap(@Nullable String, android.text.TextDirectionHeuristic, boolean);
+    method @Nullable public CharSequence unicodeWrap(@Nullable CharSequence, android.text.TextDirectionHeuristic, boolean);
+    method public String unicodeWrap(String, android.text.TextDirectionHeuristic);
+    method public CharSequence unicodeWrap(CharSequence, android.text.TextDirectionHeuristic);
+    method public String unicodeWrap(String, boolean);
+    method public CharSequence unicodeWrap(CharSequence, boolean);
+    method public String unicodeWrap(String);
+    method public CharSequence unicodeWrap(CharSequence);
+  }
+
+  public static final class BidiFormatter.Builder {
+    ctor public BidiFormatter.Builder();
+    ctor public BidiFormatter.Builder(boolean);
+    ctor public BidiFormatter.Builder(java.util.Locale);
+    method public android.text.BidiFormatter build();
+    method public android.text.BidiFormatter.Builder setTextDirectionHeuristic(android.text.TextDirectionHeuristic);
+    method public android.text.BidiFormatter.Builder stereoReset(boolean);
+  }
+
+  public class BoringLayout extends android.text.Layout implements android.text.TextUtils.EllipsizeCallback {
+    ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean);
+    ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int);
+    method public void ellipsized(int, int);
+    method public int getBottomPadding();
+    method public int getEllipsisCount(int);
+    method public int getEllipsisStart(int);
+    method public boolean getLineContainsTab(int);
+    method public int getLineCount();
+    method public int getLineDescent(int);
+    method public final android.text.Layout.Directions getLineDirections(int);
+    method public int getLineStart(int);
+    method public int getLineTop(int);
+    method public int getParagraphDirection(int);
+    method public int getTopPadding();
+    method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint);
+    method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint, android.text.BoringLayout.Metrics);
+    method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean);
+    method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int);
+    method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean);
+    method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int);
+  }
+
+  public static class BoringLayout.Metrics extends android.graphics.Paint.FontMetricsInt {
+    ctor public BoringLayout.Metrics();
+    field public int width;
+  }
+
+  @Deprecated public abstract class ClipboardManager {
+    ctor @Deprecated public ClipboardManager();
+    method @Deprecated public abstract CharSequence getText();
+    method @Deprecated public abstract boolean hasText();
+    method @Deprecated public abstract void setText(CharSequence);
+  }
+
+  public class DynamicLayout extends android.text.Layout {
+    ctor @Deprecated public DynamicLayout(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @FloatRange(from=0.0) float, float, boolean);
+    ctor @Deprecated public DynamicLayout(@NonNull CharSequence, @NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @FloatRange(from=0.0) float, float, boolean);
+    ctor @Deprecated public DynamicLayout(@NonNull CharSequence, @NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @FloatRange(from=0.0) float, float, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int);
+    method public int getBottomPadding();
+    method public int getEllipsisCount(int);
+    method public int getEllipsisStart(int);
+    method public boolean getLineContainsTab(int);
+    method public int getLineCount();
+    method public int getLineDescent(int);
+    method public final android.text.Layout.Directions getLineDirections(int);
+    method public int getLineStart(int);
+    method public int getLineTop(int);
+    method public int getParagraphDirection(int);
+    method public int getTopPadding();
+  }
+
+  public static final class DynamicLayout.Builder {
+    method @NonNull public android.text.DynamicLayout build();
+    method @NonNull public static android.text.DynamicLayout.Builder obtain(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int);
+    method @NonNull public android.text.DynamicLayout.Builder setAlignment(@NonNull android.text.Layout.Alignment);
+    method @NonNull public android.text.DynamicLayout.Builder setBreakStrategy(int);
+    method @NonNull public android.text.DynamicLayout.Builder setDisplayText(@NonNull CharSequence);
+    method public android.text.DynamicLayout.Builder setEllipsize(@Nullable android.text.TextUtils.TruncateAt);
+    method @NonNull public android.text.DynamicLayout.Builder setEllipsizedWidth(@IntRange(from=0) int);
+    method @NonNull public android.text.DynamicLayout.Builder setHyphenationFrequency(int);
+    method @NonNull public android.text.DynamicLayout.Builder setIncludePad(boolean);
+    method @NonNull public android.text.DynamicLayout.Builder setJustificationMode(int);
+    method @NonNull public android.text.DynamicLayout.Builder setLineSpacing(float, @FloatRange(from=0.0) float);
+    method @NonNull public android.text.DynamicLayout.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
+    method @NonNull public android.text.DynamicLayout.Builder setUseLineSpacingFromFallbacks(boolean);
+  }
+
+  public interface Editable extends java.lang.CharSequence java.lang.Appendable android.text.GetChars android.text.Spannable {
+    method public android.text.Editable append(CharSequence);
+    method public android.text.Editable append(CharSequence, int, int);
+    method public android.text.Editable append(char);
+    method public void clear();
+    method public void clearSpans();
+    method public android.text.Editable delete(int, int);
+    method public android.text.InputFilter[] getFilters();
+    method public android.text.Editable insert(int, CharSequence, int, int);
+    method public android.text.Editable insert(int, CharSequence);
+    method public android.text.Editable replace(int, int, CharSequence, int, int);
+    method public android.text.Editable replace(int, int, CharSequence);
+    method public void setFilters(android.text.InputFilter[]);
+  }
+
+  public static class Editable.Factory {
+    ctor public Editable.Factory();
+    method public static android.text.Editable.Factory getInstance();
+    method public android.text.Editable newEditable(CharSequence);
+  }
+
+  public interface GetChars extends java.lang.CharSequence {
+    method public void getChars(int, int, char[], int);
+  }
+
+  public class Html {
+    method public static String escapeHtml(CharSequence);
+    method @Deprecated public static android.text.Spanned fromHtml(String);
+    method public static android.text.Spanned fromHtml(String, int);
+    method @Deprecated public static android.text.Spanned fromHtml(String, android.text.Html.ImageGetter, android.text.Html.TagHandler);
+    method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter, android.text.Html.TagHandler);
+    method @Deprecated public static String toHtml(android.text.Spanned);
+    method public static String toHtml(android.text.Spanned, int);
+    field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+    field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+    field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+    field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+    field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+  }
+
+  public static interface Html.ImageGetter {
+    method public android.graphics.drawable.Drawable getDrawable(String);
+  }
+
+  public static interface Html.TagHandler {
+    method public void handleTag(boolean, String, android.text.Editable, org.xml.sax.XMLReader);
+  }
+
+  public interface InputFilter {
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+  }
+
+  public static class InputFilter.AllCaps implements android.text.InputFilter {
+    ctor public InputFilter.AllCaps();
+    ctor public InputFilter.AllCaps(@NonNull java.util.Locale);
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+  }
+
+  public static class InputFilter.LengthFilter implements android.text.InputFilter {
+    ctor public InputFilter.LengthFilter(int);
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+    method public int getMax();
+  }
+
+  public interface InputType {
+    field public static final int TYPE_CLASS_DATETIME = 4; // 0x4
+    field public static final int TYPE_CLASS_NUMBER = 2; // 0x2
+    field public static final int TYPE_CLASS_PHONE = 3; // 0x3
+    field public static final int TYPE_CLASS_TEXT = 1; // 0x1
+    field public static final int TYPE_DATETIME_VARIATION_DATE = 16; // 0x10
+    field public static final int TYPE_DATETIME_VARIATION_NORMAL = 0; // 0x0
+    field public static final int TYPE_DATETIME_VARIATION_TIME = 32; // 0x20
+    field public static final int TYPE_MASK_CLASS = 15; // 0xf
+    field public static final int TYPE_MASK_FLAGS = 16773120; // 0xfff000
+    field public static final int TYPE_MASK_VARIATION = 4080; // 0xff0
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_NUMBER_FLAG_DECIMAL = 8192; // 0x2000
+    field public static final int TYPE_NUMBER_FLAG_SIGNED = 4096; // 0x1000
+    field public static final int TYPE_NUMBER_VARIATION_NORMAL = 0; // 0x0
+    field public static final int TYPE_NUMBER_VARIATION_PASSWORD = 16; // 0x10
+    field public static final int TYPE_TEXT_FLAG_AUTO_COMPLETE = 65536; // 0x10000
+    field public static final int TYPE_TEXT_FLAG_AUTO_CORRECT = 32768; // 0x8000
+    field public static final int TYPE_TEXT_FLAG_CAP_CHARACTERS = 4096; // 0x1000
+    field public static final int TYPE_TEXT_FLAG_CAP_SENTENCES = 16384; // 0x4000
+    field public static final int TYPE_TEXT_FLAG_CAP_WORDS = 8192; // 0x2000
+    field public static final int TYPE_TEXT_FLAG_IME_MULTI_LINE = 262144; // 0x40000
+    field public static final int TYPE_TEXT_FLAG_MULTI_LINE = 131072; // 0x20000
+    field public static final int TYPE_TEXT_FLAG_NO_SUGGESTIONS = 524288; // 0x80000
+    field public static final int TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 32; // 0x20
+    field public static final int TYPE_TEXT_VARIATION_EMAIL_SUBJECT = 48; // 0x30
+    field public static final int TYPE_TEXT_VARIATION_FILTER = 176; // 0xb0
+    field public static final int TYPE_TEXT_VARIATION_LONG_MESSAGE = 80; // 0x50
+    field public static final int TYPE_TEXT_VARIATION_NORMAL = 0; // 0x0
+    field public static final int TYPE_TEXT_VARIATION_PASSWORD = 128; // 0x80
+    field public static final int TYPE_TEXT_VARIATION_PERSON_NAME = 96; // 0x60
+    field public static final int TYPE_TEXT_VARIATION_PHONETIC = 192; // 0xc0
+    field public static final int TYPE_TEXT_VARIATION_POSTAL_ADDRESS = 112; // 0x70
+    field public static final int TYPE_TEXT_VARIATION_SHORT_MESSAGE = 64; // 0x40
+    field public static final int TYPE_TEXT_VARIATION_URI = 16; // 0x10
+    field public static final int TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 144; // 0x90
+    field public static final int TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 160; // 0xa0
+    field public static final int TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS = 208; // 0xd0
+    field public static final int TYPE_TEXT_VARIATION_WEB_PASSWORD = 224; // 0xe0
+  }
+
+  public abstract class Layout {
+    ctor protected Layout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float);
+    method public void draw(android.graphics.Canvas);
+    method public void draw(android.graphics.Canvas, android.graphics.Path, android.graphics.Paint, int);
+    method public final android.text.Layout.Alignment getAlignment();
+    method public abstract int getBottomPadding();
+    method public void getCursorPath(int, android.graphics.Path, CharSequence);
+    method public static float getDesiredWidth(CharSequence, android.text.TextPaint);
+    method public static float getDesiredWidth(CharSequence, int, int, android.text.TextPaint);
+    method public abstract int getEllipsisCount(int);
+    method public abstract int getEllipsisStart(int);
+    method public int getEllipsizedWidth();
+    method public int getHeight();
+    method public final int getLineAscent(int);
+    method public final int getLineBaseline(int);
+    method public final int getLineBottom(int);
+    method public int getLineBounds(int, android.graphics.Rect);
+    method public abstract boolean getLineContainsTab(int);
+    method public abstract int getLineCount();
+    method public abstract int getLineDescent(int);
+    method public abstract android.text.Layout.Directions getLineDirections(int);
+    method public final int getLineEnd(int);
+    method public int getLineForOffset(int);
+    method public int getLineForVertical(int);
+    method public float getLineLeft(int);
+    method public float getLineMax(int);
+    method public float getLineRight(int);
+    method public abstract int getLineStart(int);
+    method public abstract int getLineTop(int);
+    method public int getLineVisibleEnd(int);
+    method public float getLineWidth(int);
+    method public int getOffsetForHorizontal(int, float);
+    method public int getOffsetToLeftOf(int);
+    method public int getOffsetToRightOf(int);
+    method public final android.text.TextPaint getPaint();
+    method public final android.text.Layout.Alignment getParagraphAlignment(int);
+    method public abstract int getParagraphDirection(int);
+    method public final int getParagraphLeft(int);
+    method public final int getParagraphRight(int);
+    method public float getPrimaryHorizontal(int);
+    method public float getSecondaryHorizontal(int);
+    method public void getSelectionPath(int, int, android.graphics.Path);
+    method public final float getSpacingAdd();
+    method public final float getSpacingMultiplier();
+    method public final CharSequence getText();
+    method public abstract int getTopPadding();
+    method public final int getWidth();
+    method public final void increaseWidthTo(int);
+    method public boolean isRtlCharAt(int);
+    method protected final boolean isSpanned();
+    field public static final int BREAK_STRATEGY_BALANCED = 2; // 0x2
+    field public static final int BREAK_STRATEGY_HIGH_QUALITY = 1; // 0x1
+    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
+    field public static final float DEFAULT_LINESPACING_ADDITION = 0.0f;
+    field public static final float DEFAULT_LINESPACING_MULTIPLIER = 1.0f;
+    field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1
+    field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff
+    field public static final int HYPHENATION_FREQUENCY_FULL = 2; // 0x2
+    field public static final int HYPHENATION_FREQUENCY_NONE = 0; // 0x0
+    field public static final int HYPHENATION_FREQUENCY_NORMAL = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_INTER_WORD = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_NONE = 0; // 0x0
+  }
+
+  public enum Layout.Alignment {
+    enum_constant public static final android.text.Layout.Alignment ALIGN_CENTER;
+    enum_constant public static final android.text.Layout.Alignment ALIGN_NORMAL;
+    enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE;
+  }
+
+  public static class Layout.Directions {
+  }
+
+  @Deprecated public abstract class LoginFilter implements android.text.InputFilter {
+    method @Deprecated public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+    method @Deprecated public abstract boolean isAllowed(char);
+    method @Deprecated public void onInvalidCharacter(char);
+    method @Deprecated public void onStart();
+    method @Deprecated public void onStop();
+  }
+
+  @Deprecated public static class LoginFilter.PasswordFilterGMail extends android.text.LoginFilter {
+    ctor @Deprecated public LoginFilter.PasswordFilterGMail();
+    ctor @Deprecated public LoginFilter.PasswordFilterGMail(boolean);
+    method @Deprecated public boolean isAllowed(char);
+  }
+
+  @Deprecated public static class LoginFilter.UsernameFilterGMail extends android.text.LoginFilter {
+    ctor @Deprecated public LoginFilter.UsernameFilterGMail();
+    ctor @Deprecated public LoginFilter.UsernameFilterGMail(boolean);
+    method @Deprecated public boolean isAllowed(char);
+  }
+
+  @Deprecated public static class LoginFilter.UsernameFilterGeneric extends android.text.LoginFilter {
+    ctor @Deprecated public LoginFilter.UsernameFilterGeneric();
+    ctor @Deprecated public LoginFilter.UsernameFilterGeneric(boolean);
+    method @Deprecated public boolean isAllowed(char);
+  }
+
+  public interface NoCopySpan {
+  }
+
+  public static class NoCopySpan.Concrete implements android.text.NoCopySpan {
+    ctor public NoCopySpan.Concrete();
+  }
+
+  public interface ParcelableSpan extends android.os.Parcelable {
+    method public int getSpanTypeId();
+  }
+
+  public class PrecomputedText implements android.text.Spannable {
+    method public char charAt(int);
+    method public static android.text.PrecomputedText create(@NonNull CharSequence, @NonNull android.text.PrecomputedText.Params);
+    method public void getBounds(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.Rect);
+    method @IntRange(from=0) public int getParagraphCount();
+    method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+    method @NonNull public android.text.PrecomputedText.Params getParams();
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method @FloatRange(from=0) public float getWidth(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public void removeSpan(Object);
+    method public void setSpan(Object, int, int, int);
+    method public CharSequence subSequence(int, int);
+  }
+
+  public static final class PrecomputedText.Params {
+    method public int getBreakStrategy();
+    method public int getHyphenationFrequency();
+    method @NonNull public android.text.TextDirectionHeuristic getTextDirection();
+    method @NonNull public android.text.TextPaint getTextPaint();
+  }
+
+  public static class PrecomputedText.Params.Builder {
+    ctor public PrecomputedText.Params.Builder(@NonNull android.text.TextPaint);
+    ctor public PrecomputedText.Params.Builder(@NonNull android.text.PrecomputedText.Params);
+    method @NonNull public android.text.PrecomputedText.Params build();
+    method public android.text.PrecomputedText.Params.Builder setBreakStrategy(int);
+    method public android.text.PrecomputedText.Params.Builder setHyphenationFrequency(int);
+    method public android.text.PrecomputedText.Params.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
+  }
+
+  public class Selection {
+    method public static boolean extendDown(android.text.Spannable, android.text.Layout);
+    method public static boolean extendLeft(android.text.Spannable, android.text.Layout);
+    method public static boolean extendRight(android.text.Spannable, android.text.Layout);
+    method public static final void extendSelection(android.text.Spannable, int);
+    method public static boolean extendToLeftEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean extendToRightEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean extendUp(android.text.Spannable, android.text.Layout);
+    method public static final int getSelectionEnd(CharSequence);
+    method public static final int getSelectionStart(CharSequence);
+    method public static boolean moveDown(android.text.Spannable, android.text.Layout);
+    method public static boolean moveLeft(android.text.Spannable, android.text.Layout);
+    method public static boolean moveRight(android.text.Spannable, android.text.Layout);
+    method public static boolean moveToLeftEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean moveToRightEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean moveUp(android.text.Spannable, android.text.Layout);
+    method public static final void removeSelection(android.text.Spannable);
+    method public static final void selectAll(android.text.Spannable);
+    method public static void setSelection(android.text.Spannable, int, int);
+    method public static final void setSelection(android.text.Spannable, int);
+    field public static final Object SELECTION_END;
+    field public static final Object SELECTION_START;
+  }
+
+  public interface SpanWatcher extends android.text.NoCopySpan {
+    method public void onSpanAdded(android.text.Spannable, Object, int, int);
+    method public void onSpanChanged(android.text.Spannable, Object, int, int, int, int);
+    method public void onSpanRemoved(android.text.Spannable, Object, int, int);
+  }
+
+  public interface Spannable extends android.text.Spanned {
+    method public void removeSpan(Object);
+    method public void setSpan(Object, int, int, int);
+  }
+
+  public static class Spannable.Factory {
+    ctor public Spannable.Factory();
+    method public static android.text.Spannable.Factory getInstance();
+    method public android.text.Spannable newSpannable(CharSequence);
+  }
+
+  public class SpannableString implements java.lang.CharSequence android.text.GetChars android.text.Spannable {
+    ctor public SpannableString(CharSequence);
+    method public final char charAt(int);
+    method public final void getChars(int, int, char[], int);
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method public final int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public void removeSpan(Object);
+    method public void setSpan(Object, int, int, int);
+    method public final CharSequence subSequence(int, int);
+    method public final String toString();
+    method public static android.text.SpannableString valueOf(CharSequence);
+  }
+
+  public class SpannableStringBuilder implements java.lang.Appendable java.lang.CharSequence android.text.Editable android.text.GetChars android.text.Spannable {
+    ctor public SpannableStringBuilder();
+    ctor public SpannableStringBuilder(CharSequence);
+    ctor public SpannableStringBuilder(CharSequence, int, int);
+    method public android.text.SpannableStringBuilder append(CharSequence);
+    method public android.text.SpannableStringBuilder append(CharSequence, Object, int);
+    method public android.text.SpannableStringBuilder append(CharSequence, int, int);
+    method public android.text.SpannableStringBuilder append(char);
+    method public char charAt(int);
+    method public void clear();
+    method public void clearSpans();
+    method public android.text.SpannableStringBuilder delete(int, int);
+    method public void getChars(int, int, char[], int);
+    method public android.text.InputFilter[] getFilters();
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, @Nullable Class<T>);
+    method @Deprecated public int getTextRunCursor(int, int, int, int, int, android.graphics.Paint);
+    method public int getTextWatcherDepth();
+    method public android.text.SpannableStringBuilder insert(int, CharSequence, int, int);
+    method public android.text.SpannableStringBuilder insert(int, CharSequence);
+    method public int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public void removeSpan(Object);
+    method public android.text.SpannableStringBuilder replace(int, int, CharSequence);
+    method public android.text.SpannableStringBuilder replace(int, int, CharSequence, int, int);
+    method public void setFilters(android.text.InputFilter[]);
+    method public void setSpan(Object, int, int, int);
+    method public CharSequence subSequence(int, int);
+    method public static android.text.SpannableStringBuilder valueOf(CharSequence);
+  }
+
+  public interface Spanned extends java.lang.CharSequence {
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method public int nextSpanTransition(int, int, Class);
+    field public static final int SPAN_COMPOSING = 256; // 0x100
+    field public static final int SPAN_EXCLUSIVE_EXCLUSIVE = 33; // 0x21
+    field public static final int SPAN_EXCLUSIVE_INCLUSIVE = 34; // 0x22
+    field public static final int SPAN_INCLUSIVE_EXCLUSIVE = 17; // 0x11
+    field public static final int SPAN_INCLUSIVE_INCLUSIVE = 18; // 0x12
+    field public static final int SPAN_INTERMEDIATE = 512; // 0x200
+    field public static final int SPAN_MARK_MARK = 17; // 0x11
+    field public static final int SPAN_MARK_POINT = 18; // 0x12
+    field public static final int SPAN_PARAGRAPH = 51; // 0x33
+    field public static final int SPAN_POINT_MARK = 33; // 0x21
+    field public static final int SPAN_POINT_MARK_MASK = 51; // 0x33
+    field public static final int SPAN_POINT_POINT = 34; // 0x22
+    field public static final int SPAN_PRIORITY = 16711680; // 0xff0000
+    field public static final int SPAN_PRIORITY_SHIFT = 16; // 0x10
+    field public static final int SPAN_USER = -16777216; // 0xff000000
+    field public static final int SPAN_USER_SHIFT = 24; // 0x18
+  }
+
+  public final class SpannedString implements java.lang.CharSequence android.text.GetChars android.text.Spanned {
+    ctor public SpannedString(CharSequence);
+    method public final char charAt(int);
+    method public final void getChars(int, int, char[], int);
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method public final int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public CharSequence subSequence(int, int);
+    method public static android.text.SpannedString valueOf(CharSequence);
+  }
+
+  public class StaticLayout extends android.text.Layout {
+    ctor @Deprecated public StaticLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean);
+    ctor @Deprecated public StaticLayout(CharSequence, int, int, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean);
+    ctor @Deprecated public StaticLayout(CharSequence, int, int, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean, android.text.TextUtils.TruncateAt, int);
+    method public int getBottomPadding();
+    method public int getEllipsisCount(int);
+    method public int getEllipsisStart(int);
+    method public boolean getLineContainsTab(int);
+    method public int getLineCount();
+    method public int getLineDescent(int);
+    method public final android.text.Layout.Directions getLineDirections(int);
+    method public int getLineStart(int);
+    method public int getLineTop(int);
+    method public int getParagraphDirection(int);
+    method public int getTopPadding();
+  }
+
+  public static final class StaticLayout.Builder {
+    method @NonNull public android.text.StaticLayout build();
+    method @NonNull public static android.text.StaticLayout.Builder obtain(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.text.TextPaint, @IntRange(from=0) int);
+    method @NonNull public android.text.StaticLayout.Builder setAlignment(@NonNull android.text.Layout.Alignment);
+    method @NonNull public android.text.StaticLayout.Builder setBreakStrategy(int);
+    method @NonNull public android.text.StaticLayout.Builder setEllipsize(@Nullable android.text.TextUtils.TruncateAt);
+    method @NonNull public android.text.StaticLayout.Builder setEllipsizedWidth(@IntRange(from=0) int);
+    method @NonNull public android.text.StaticLayout.Builder setHyphenationFrequency(int);
+    method @NonNull public android.text.StaticLayout.Builder setIncludePad(boolean);
+    method @NonNull public android.text.StaticLayout.Builder setIndents(@Nullable int[], @Nullable int[]);
+    method @NonNull public android.text.StaticLayout.Builder setJustificationMode(int);
+    method @NonNull public android.text.StaticLayout.Builder setLineSpacing(float, @FloatRange(from=0.0) float);
+    method @NonNull public android.text.StaticLayout.Builder setMaxLines(@IntRange(from=0) int);
+    method public android.text.StaticLayout.Builder setText(CharSequence);
+    method @NonNull public android.text.StaticLayout.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
+    method @NonNull public android.text.StaticLayout.Builder setUseLineSpacingFromFallbacks(boolean);
+  }
+
+  public interface TextDirectionHeuristic {
+    method public boolean isRtl(char[], int, int);
+    method public boolean isRtl(CharSequence, int, int);
+  }
+
+  public class TextDirectionHeuristics {
+    ctor public TextDirectionHeuristics();
+    field public static final android.text.TextDirectionHeuristic ANYRTL_LTR;
+    field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_LTR;
+    field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_RTL;
+    field public static final android.text.TextDirectionHeuristic LOCALE;
+    field public static final android.text.TextDirectionHeuristic LTR;
+    field public static final android.text.TextDirectionHeuristic RTL;
+  }
+
+  public class TextPaint extends android.graphics.Paint {
+    ctor public TextPaint();
+    ctor public TextPaint(int);
+    ctor public TextPaint(android.graphics.Paint);
+    method public void set(android.text.TextPaint);
+    field public int baselineShift;
+    field @ColorInt public int bgColor;
+    field public float density;
+    field public int[] drawableState;
+    field @ColorInt public int linkColor;
+    field @ColorInt public int underlineColor;
+    field @Px public float underlineThickness;
+  }
+
+  public class TextShaper {
+    method public static void shapeText(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.text.TextDirectionHeuristic, @NonNull android.text.TextPaint, @NonNull android.text.TextShaper.GlyphsConsumer);
+  }
+
+  public static interface TextShaper.GlyphsConsumer {
+    method public void accept(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.text.PositionedGlyphs, @NonNull android.text.TextPaint);
+  }
+
+  public class TextUtils {
+    method @Deprecated public static CharSequence commaEllipsize(CharSequence, android.text.TextPaint, float, String, String);
+    method public static CharSequence concat(java.lang.CharSequence...);
+    method public static void copySpansFrom(android.text.Spanned, int, int, Class, android.text.Spannable, int);
+    method public static void dumpSpans(CharSequence, android.util.Printer, String);
+    method public static CharSequence ellipsize(CharSequence, android.text.TextPaint, float, android.text.TextUtils.TruncateAt);
+    method public static CharSequence ellipsize(CharSequence, android.text.TextPaint, float, android.text.TextUtils.TruncateAt, boolean, @Nullable android.text.TextUtils.EllipsizeCallback);
+    method public static boolean equals(CharSequence, CharSequence);
+    method public static CharSequence expandTemplate(CharSequence, java.lang.CharSequence...);
+    method public static int getCapsMode(CharSequence, int, int);
+    method public static void getChars(CharSequence, int, int, char[], int);
+    method public static int getLayoutDirectionFromLocale(java.util.Locale);
+    method public static int getOffsetAfter(CharSequence, int);
+    method public static int getOffsetBefore(CharSequence, int);
+    method @Deprecated public static CharSequence getReverse(CharSequence, int, int);
+    method public static int getTrimmedLength(CharSequence);
+    method public static String htmlEncode(String);
+    method public static int indexOf(CharSequence, char);
+    method public static int indexOf(CharSequence, char, int);
+    method public static int indexOf(CharSequence, char, int, int);
+    method public static int indexOf(CharSequence, CharSequence);
+    method public static int indexOf(CharSequence, CharSequence, int);
+    method public static int indexOf(CharSequence, CharSequence, int, int);
+    method public static boolean isDigitsOnly(CharSequence);
+    method public static boolean isEmpty(@Nullable CharSequence);
+    method public static boolean isGraphic(CharSequence);
+    method @Deprecated public static boolean isGraphic(char);
+    method public static String join(@NonNull CharSequence, @NonNull Object[]);
+    method public static String join(@NonNull CharSequence, @NonNull Iterable);
+    method public static int lastIndexOf(CharSequence, char);
+    method public static int lastIndexOf(CharSequence, char, int);
+    method public static int lastIndexOf(CharSequence, char, int, int);
+    method public static CharSequence listEllipsize(@Nullable android.content.Context, @Nullable java.util.List<java.lang.CharSequence>, @NonNull String, @NonNull android.text.TextPaint, @FloatRange(from=0.0, fromInclusive=false) float, @PluralsRes int);
+    method @NonNull public static CharSequence makeSafeForPresentation(@NonNull String, @IntRange(from=0) int, @FloatRange(from=0) float, int);
+    method public static boolean regionMatches(CharSequence, int, CharSequence, int, int);
+    method public static CharSequence replace(CharSequence, String[], CharSequence[]);
+    method public static String[] split(String, String);
+    method public static String[] split(String, java.util.regex.Pattern);
+    method public static CharSequence stringOrSpannedString(CharSequence);
+    method public static String substring(CharSequence, int, int);
+    method public static void writeToParcel(@Nullable CharSequence, @NonNull android.os.Parcel, int);
+    field public static final int CAP_MODE_CHARACTERS = 4096; // 0x1000
+    field public static final int CAP_MODE_SENTENCES = 16384; // 0x4000
+    field public static final int CAP_MODE_WORDS = 8192; // 0x2000
+    field public static final android.os.Parcelable.Creator<java.lang.CharSequence> CHAR_SEQUENCE_CREATOR;
+    field public static final int SAFE_STRING_FLAG_FIRST_LINE = 4; // 0x4
+    field public static final int SAFE_STRING_FLAG_SINGLE_LINE = 2; // 0x2
+    field public static final int SAFE_STRING_FLAG_TRIM = 1; // 0x1
+  }
+
+  public static interface TextUtils.EllipsizeCallback {
+    method public void ellipsized(int, int);
+  }
+
+  public static class TextUtils.SimpleStringSplitter implements java.util.Iterator<java.lang.String> android.text.TextUtils.StringSplitter {
+    ctor public TextUtils.SimpleStringSplitter(char);
+    method public boolean hasNext();
+    method public java.util.Iterator<java.lang.String> iterator();
+    method public String next();
+    method public void setString(String);
+  }
+
+  public static interface TextUtils.StringSplitter extends java.lang.Iterable<java.lang.String> {
+    method public void setString(String);
+  }
+
+  public enum TextUtils.TruncateAt {
+    enum_constant public static final android.text.TextUtils.TruncateAt END;
+    enum_constant public static final android.text.TextUtils.TruncateAt MARQUEE;
+    enum_constant public static final android.text.TextUtils.TruncateAt MIDDLE;
+    enum_constant public static final android.text.TextUtils.TruncateAt START;
+  }
+
+  public interface TextWatcher extends android.text.NoCopySpan {
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+}
+
+package android.text.format {
+
+  public class DateFormat {
+    ctor public DateFormat();
+    method public static CharSequence format(CharSequence, long);
+    method public static CharSequence format(CharSequence, java.util.Date);
+    method public static CharSequence format(CharSequence, java.util.Calendar);
+    method public static String getBestDateTimePattern(java.util.Locale, String);
+    method public static java.text.DateFormat getDateFormat(android.content.Context);
+    method public static char[] getDateFormatOrder(android.content.Context);
+    method public static java.text.DateFormat getLongDateFormat(android.content.Context);
+    method public static java.text.DateFormat getMediumDateFormat(android.content.Context);
+    method public static java.text.DateFormat getTimeFormat(android.content.Context);
+    method public static boolean is24HourFormat(android.content.Context);
+  }
+
+  public class DateUtils {
+    ctor public DateUtils();
+    method public static String formatDateRange(android.content.Context, long, long, int);
+    method public static java.util.Formatter formatDateRange(android.content.Context, java.util.Formatter, long, long, int);
+    method public static java.util.Formatter formatDateRange(android.content.Context, java.util.Formatter, long, long, int, String);
+    method public static String formatDateTime(android.content.Context, long, int);
+    method public static String formatElapsedTime(long);
+    method public static String formatElapsedTime(StringBuilder, long);
+    method public static final CharSequence formatSameDayTime(long, long, int, int);
+    method @Deprecated public static String getAMPMString(int);
+    method @Deprecated public static String getDayOfWeekString(int, int);
+    method @Deprecated public static String getMonthString(int, int);
+    method public static CharSequence getRelativeDateTimeString(android.content.Context, long, long, long, int);
+    method public static CharSequence getRelativeTimeSpanString(long);
+    method public static CharSequence getRelativeTimeSpanString(long, long, long);
+    method public static CharSequence getRelativeTimeSpanString(long, long, long, int);
+    method public static CharSequence getRelativeTimeSpanString(android.content.Context, long, boolean);
+    method public static CharSequence getRelativeTimeSpanString(android.content.Context, long);
+    method public static boolean isToday(long);
+    field @Deprecated public static final String ABBREV_MONTH_FORMAT = "%b";
+    field public static final String ABBREV_WEEKDAY_FORMAT = "%a";
+    field public static final long DAY_IN_MILLIS = 86400000L; // 0x5265c00L
+    field @Deprecated public static final int FORMAT_12HOUR = 64; // 0x40
+    field @Deprecated public static final int FORMAT_24HOUR = 128; // 0x80
+    field public static final int FORMAT_ABBREV_ALL = 524288; // 0x80000
+    field public static final int FORMAT_ABBREV_MONTH = 65536; // 0x10000
+    field public static final int FORMAT_ABBREV_RELATIVE = 262144; // 0x40000
+    field public static final int FORMAT_ABBREV_TIME = 16384; // 0x4000
+    field public static final int FORMAT_ABBREV_WEEKDAY = 32768; // 0x8000
+    field @Deprecated public static final int FORMAT_CAP_AMPM = 256; // 0x100
+    field @Deprecated public static final int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000
+    field @Deprecated public static final int FORMAT_CAP_NOON = 1024; // 0x400
+    field @Deprecated public static final int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400
+    field public static final int FORMAT_NO_MIDNIGHT = 2048; // 0x800
+    field public static final int FORMAT_NO_MONTH_DAY = 32; // 0x20
+    field public static final int FORMAT_NO_NOON = 512; // 0x200
+    field @Deprecated public static final int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00
+    field public static final int FORMAT_NO_YEAR = 8; // 0x8
+    field public static final int FORMAT_NUMERIC_DATE = 131072; // 0x20000
+    field public static final int FORMAT_SHOW_DATE = 16; // 0x10
+    field public static final int FORMAT_SHOW_TIME = 1; // 0x1
+    field public static final int FORMAT_SHOW_WEEKDAY = 2; // 0x2
+    field public static final int FORMAT_SHOW_YEAR = 4; // 0x4
+    field @Deprecated public static final int FORMAT_UTC = 8192; // 0x2000
+    field public static final long HOUR_IN_MILLIS = 3600000L; // 0x36ee80L
+    field @Deprecated public static final String HOUR_MINUTE_24 = "%H:%M";
+    field @Deprecated public static final int LENGTH_LONG = 10; // 0xa
+    field @Deprecated public static final int LENGTH_MEDIUM = 20; // 0x14
+    field @Deprecated public static final int LENGTH_SHORT = 30; // 0x1e
+    field @Deprecated public static final int LENGTH_SHORTER = 40; // 0x28
+    field @Deprecated public static final int LENGTH_SHORTEST = 50; // 0x32
+    field public static final long MINUTE_IN_MILLIS = 60000L; // 0xea60L
+    field public static final String MONTH_DAY_FORMAT = "%-d";
+    field public static final String MONTH_FORMAT = "%B";
+    field public static final String NUMERIC_MONTH_FORMAT = "%m";
+    field public static final long SECOND_IN_MILLIS = 1000L; // 0x3e8L
+    field public static final String WEEKDAY_FORMAT = "%A";
+    field public static final long WEEK_IN_MILLIS = 604800000L; // 0x240c8400L
+    field public static final String YEAR_FORMAT = "%Y";
+    field public static final String YEAR_FORMAT_TWO_DIGITS = "%g";
+    field @Deprecated public static final long YEAR_IN_MILLIS = 31449600000L; // 0x7528ad000L
+    field @Deprecated public static final int[] sameMonthTable;
+    field @Deprecated public static final int[] sameYearTable;
+  }
+
+  public final class Formatter {
+    ctor public Formatter();
+    method public static String formatFileSize(@Nullable android.content.Context, long);
+    method @Deprecated public static String formatIpAddress(int);
+    method public static String formatShortFileSize(@Nullable android.content.Context, long);
+  }
+
+  @Deprecated public class Time {
+    ctor @Deprecated public Time(String);
+    ctor @Deprecated public Time();
+    ctor @Deprecated public Time(android.text.format.Time);
+    method @Deprecated public boolean after(android.text.format.Time);
+    method @Deprecated public boolean before(android.text.format.Time);
+    method @Deprecated public void clear(String);
+    method @Deprecated public static int compare(android.text.format.Time, android.text.format.Time);
+    method @Deprecated public String format(String);
+    method @Deprecated public String format2445();
+    method @Deprecated public String format3339(boolean);
+    method @Deprecated public int getActualMaximum(int);
+    method @Deprecated public static String getCurrentTimezone();
+    method @Deprecated public static int getJulianDay(long, long);
+    method @Deprecated public static int getJulianMondayFromWeeksSinceEpoch(int);
+    method @Deprecated public int getWeekNumber();
+    method @Deprecated public static int getWeeksSinceEpochFromJulianDay(int, int);
+    method @Deprecated public static boolean isEpoch(android.text.format.Time);
+    method @Deprecated public long normalize(boolean);
+    method @Deprecated public boolean parse(String);
+    method @Deprecated public boolean parse3339(String);
+    method @Deprecated public void set(long);
+    method @Deprecated public void set(android.text.format.Time);
+    method @Deprecated public void set(int, int, int, int, int, int);
+    method @Deprecated public void set(int, int, int);
+    method @Deprecated public long setJulianDay(int);
+    method @Deprecated public void setToNow();
+    method @Deprecated public void switchTimezone(String);
+    method @Deprecated public long toMillis(boolean);
+    field @Deprecated public static final int EPOCH_JULIAN_DAY = 2440588; // 0x253d8c
+    field @Deprecated public static final int FRIDAY = 5; // 0x5
+    field @Deprecated public static final int HOUR = 3; // 0x3
+    field @Deprecated public static final int MINUTE = 2; // 0x2
+    field @Deprecated public static final int MONDAY = 1; // 0x1
+    field @Deprecated public static final int MONDAY_BEFORE_JULIAN_EPOCH = 2440585; // 0x253d89
+    field @Deprecated public static final int MONTH = 5; // 0x5
+    field @Deprecated public static final int MONTH_DAY = 4; // 0x4
+    field @Deprecated public static final int SATURDAY = 6; // 0x6
+    field @Deprecated public static final int SECOND = 1; // 0x1
+    field @Deprecated public static final int SUNDAY = 0; // 0x0
+    field @Deprecated public static final int THURSDAY = 4; // 0x4
+    field @Deprecated public static final String TIMEZONE_UTC = "UTC";
+    field @Deprecated public static final int TUESDAY = 2; // 0x2
+    field @Deprecated public static final int WEDNESDAY = 3; // 0x3
+    field @Deprecated public static final int WEEK_DAY = 7; // 0x7
+    field @Deprecated public static final int WEEK_NUM = 9; // 0x9
+    field @Deprecated public static final int YEAR = 6; // 0x6
+    field @Deprecated public static final int YEAR_DAY = 8; // 0x8
+    field @Deprecated public boolean allDay;
+    field @Deprecated public long gmtoff;
+    field @Deprecated public int hour;
+    field @Deprecated public int isDst;
+    field @Deprecated public int minute;
+    field @Deprecated public int month;
+    field @Deprecated public int monthDay;
+    field @Deprecated public int second;
+    field @Deprecated public String timezone;
+    field @Deprecated public int weekDay;
+    field @Deprecated public int year;
+    field @Deprecated public int yearDay;
+  }
+
+}
+
+package android.text.method {
+
+  public class ArrowKeyMovementMethod extends android.text.method.BaseMovementMethod implements android.text.method.MovementMethod {
+    ctor public ArrowKeyMovementMethod();
+    method public static android.text.method.MovementMethod getInstance();
+  }
+
+  public abstract class BaseKeyListener extends android.text.method.MetaKeyKeyListener implements android.text.method.KeyListener {
+    ctor public BaseKeyListener();
+    method public boolean backspace(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean forwardDelete(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.view.View, android.text.Editable, android.view.KeyEvent);
+  }
+
+  public class BaseMovementMethod implements android.text.method.MovementMethod {
+    ctor public BaseMovementMethod();
+    method protected boolean bottom(android.widget.TextView, android.text.Spannable);
+    method public boolean canSelectArbitrarily();
+    method protected boolean down(android.widget.TextView, android.text.Spannable);
+    method protected boolean end(android.widget.TextView, android.text.Spannable);
+    method protected int getMovementMetaState(android.text.Spannable, android.view.KeyEvent);
+    method protected boolean handleMovementKey(android.widget.TextView, android.text.Spannable, int, int, android.view.KeyEvent);
+    method protected boolean home(android.widget.TextView, android.text.Spannable);
+    method public void initialize(android.widget.TextView, android.text.Spannable);
+    method protected boolean left(android.widget.TextView, android.text.Spannable);
+    method protected boolean lineEnd(android.widget.TextView, android.text.Spannable);
+    method protected boolean lineStart(android.widget.TextView, android.text.Spannable);
+    method public boolean onGenericMotionEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onKeyDown(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.widget.TextView, android.text.Spannable, android.view.KeyEvent);
+    method public boolean onKeyUp(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public void onTakeFocus(android.widget.TextView, android.text.Spannable, int);
+    method public boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method protected boolean pageDown(android.widget.TextView, android.text.Spannable);
+    method protected boolean pageUp(android.widget.TextView, android.text.Spannable);
+    method protected boolean right(android.widget.TextView, android.text.Spannable);
+    method protected boolean top(android.widget.TextView, android.text.Spannable);
+    method protected boolean up(android.widget.TextView, android.text.Spannable);
+  }
+
+  public class CharacterPickerDialog extends android.app.Dialog implements android.widget.AdapterView.OnItemClickListener android.view.View.OnClickListener {
+    ctor public CharacterPickerDialog(android.content.Context, android.view.View, android.text.Editable, String, boolean);
+    method public void onClick(android.view.View);
+    method public void onItemClick(android.widget.AdapterView, android.view.View, int, long);
+  }
+
+  public class DateKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public DateKeyListener();
+    ctor public DateKeyListener(@Nullable java.util.Locale);
+    method @NonNull protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.DateKeyListener getInstance();
+    method @NonNull public static android.text.method.DateKeyListener getInstance(@Nullable java.util.Locale);
+    field @Deprecated public static final char[] CHARACTERS;
+  }
+
+  public class DateTimeKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public DateTimeKeyListener();
+    ctor public DateTimeKeyListener(@Nullable java.util.Locale);
+    method @NonNull protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.DateTimeKeyListener getInstance();
+    method @NonNull public static android.text.method.DateTimeKeyListener getInstance(@Nullable java.util.Locale);
+    field @Deprecated public static final char[] CHARACTERS;
+  }
+
+  public class DialerKeyListener extends android.text.method.NumberKeyListener {
+    ctor public DialerKeyListener();
+    method protected char[] getAcceptedChars();
+    method public int getInputType();
+    method public static android.text.method.DialerKeyListener getInstance();
+    field public static final char[] CHARACTERS;
+  }
+
+  public class DigitsKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public DigitsKeyListener();
+    ctor @Deprecated public DigitsKeyListener(boolean, boolean);
+    ctor public DigitsKeyListener(@Nullable java.util.Locale);
+    ctor public DigitsKeyListener(@Nullable java.util.Locale, boolean, boolean);
+    method protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.DigitsKeyListener getInstance();
+    method @Deprecated @NonNull public static android.text.method.DigitsKeyListener getInstance(boolean, boolean);
+    method @NonNull public static android.text.method.DigitsKeyListener getInstance(@Nullable java.util.Locale);
+    method @NonNull public static android.text.method.DigitsKeyListener getInstance(@Nullable java.util.Locale, boolean, boolean);
+    method @NonNull public static android.text.method.DigitsKeyListener getInstance(@NonNull String);
+  }
+
+  public class HideReturnsTransformationMethod extends android.text.method.ReplacementTransformationMethod {
+    ctor public HideReturnsTransformationMethod();
+    method public static android.text.method.HideReturnsTransformationMethod getInstance();
+    method protected char[] getOriginal();
+    method protected char[] getReplacement();
+  }
+
+  public interface KeyListener {
+    method public void clearMetaKeyState(android.view.View, android.text.Editable, int);
+    method public int getInputType();
+    method public boolean onKeyDown(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.view.View, android.text.Editable, android.view.KeyEvent);
+    method public boolean onKeyUp(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+  }
+
+  public class LinkMovementMethod extends android.text.method.ScrollingMovementMethod {
+    ctor public LinkMovementMethod();
+    method public static android.text.method.MovementMethod getInstance();
+  }
+
+  public abstract class MetaKeyKeyListener {
+    ctor public MetaKeyKeyListener();
+    method public static void adjustMetaAfterKeypress(android.text.Spannable);
+    method public static long adjustMetaAfterKeypress(long);
+    method public void clearMetaKeyState(android.view.View, android.text.Editable, int);
+    method public static void clearMetaKeyState(android.text.Editable, int);
+    method public long clearMetaKeyState(long, int);
+    method public static final int getMetaState(CharSequence);
+    method public static final int getMetaState(CharSequence, android.view.KeyEvent);
+    method public static final int getMetaState(CharSequence, int);
+    method public static final int getMetaState(CharSequence, int, android.view.KeyEvent);
+    method public static final int getMetaState(long);
+    method public static final int getMetaState(long, int);
+    method public static long handleKeyDown(long, int, android.view.KeyEvent);
+    method public static long handleKeyUp(long, int, android.view.KeyEvent);
+    method public static boolean isMetaTracker(CharSequence, Object);
+    method public static boolean isSelectingMetaTracker(CharSequence, Object);
+    method public boolean onKeyDown(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean onKeyUp(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method protected static void resetLockedMeta(android.text.Spannable);
+    method public static long resetLockedMeta(long);
+    method public static void resetMetaState(android.text.Spannable);
+    field public static final int META_ALT_LOCKED = 512; // 0x200
+    field public static final int META_ALT_ON = 2; // 0x2
+    field public static final int META_CAP_LOCKED = 256; // 0x100
+    field public static final int META_SHIFT_ON = 1; // 0x1
+    field public static final int META_SYM_LOCKED = 1024; // 0x400
+    field public static final int META_SYM_ON = 4; // 0x4
+  }
+
+  public interface MovementMethod {
+    method public boolean canSelectArbitrarily();
+    method public void initialize(android.widget.TextView, android.text.Spannable);
+    method public boolean onGenericMotionEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onKeyDown(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.widget.TextView, android.text.Spannable, android.view.KeyEvent);
+    method public boolean onKeyUp(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public void onTakeFocus(android.widget.TextView, android.text.Spannable, int);
+    method public boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+  }
+
+  public class MultiTapKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher {
+    ctor public MultiTapKeyListener(android.text.method.TextKeyListener.Capitalize, boolean);
+    method public int getInputType();
+    method public static android.text.method.MultiTapKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize);
+    method public void onSpanAdded(android.text.Spannable, Object, int, int);
+    method public void onSpanChanged(android.text.Spannable, Object, int, int, int, int);
+    method public void onSpanRemoved(android.text.Spannable, Object, int, int);
+  }
+
+  public abstract class NumberKeyListener extends android.text.method.BaseKeyListener implements android.text.InputFilter {
+    ctor public NumberKeyListener();
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+    method @NonNull protected abstract char[] getAcceptedChars();
+    method protected int lookup(android.view.KeyEvent, android.text.Spannable);
+    method protected static boolean ok(char[], char);
+  }
+
+  public class PasswordTransformationMethod implements android.text.TextWatcher android.text.method.TransformationMethod {
+    ctor public PasswordTransformationMethod();
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public static android.text.method.PasswordTransformationMethod getInstance();
+    method public CharSequence getTransformation(CharSequence, android.view.View);
+    method public void onFocusChanged(android.view.View, CharSequence, boolean, int, android.graphics.Rect);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+  public class QwertyKeyListener extends android.text.method.BaseKeyListener {
+    ctor public QwertyKeyListener(android.text.method.TextKeyListener.Capitalize, boolean);
+    method public int getInputType();
+    method public static android.text.method.QwertyKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize);
+    method public static android.text.method.QwertyKeyListener getInstanceForFullKeyboard();
+    method public static void markAsReplaced(android.text.Spannable, int, int, String);
+  }
+
+  public abstract class ReplacementTransformationMethod implements android.text.method.TransformationMethod {
+    ctor public ReplacementTransformationMethod();
+    method protected abstract char[] getOriginal();
+    method protected abstract char[] getReplacement();
+    method public CharSequence getTransformation(CharSequence, android.view.View);
+    method public void onFocusChanged(android.view.View, CharSequence, boolean, int, android.graphics.Rect);
+  }
+
+  public class ScrollingMovementMethod extends android.text.method.BaseMovementMethod implements android.text.method.MovementMethod {
+    ctor public ScrollingMovementMethod();
+    method public static android.text.method.MovementMethod getInstance();
+  }
+
+  public class SingleLineTransformationMethod extends android.text.method.ReplacementTransformationMethod {
+    ctor public SingleLineTransformationMethod();
+    method public static android.text.method.SingleLineTransformationMethod getInstance();
+    method protected char[] getOriginal();
+    method protected char[] getReplacement();
+  }
+
+  public class TextKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher {
+    ctor public TextKeyListener(android.text.method.TextKeyListener.Capitalize, boolean);
+    method public static void clear(android.text.Editable);
+    method public int getInputType();
+    method public static android.text.method.TextKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize);
+    method public static android.text.method.TextKeyListener getInstance();
+    method public void onSpanAdded(android.text.Spannable, Object, int, int);
+    method public void onSpanChanged(android.text.Spannable, Object, int, int, int, int);
+    method public void onSpanRemoved(android.text.Spannable, Object, int, int);
+    method public void release();
+    method public static boolean shouldCap(android.text.method.TextKeyListener.Capitalize, CharSequence, int);
+  }
+
+  public enum TextKeyListener.Capitalize {
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize CHARACTERS;
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize NONE;
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize SENTENCES;
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize WORDS;
+  }
+
+  public class TimeKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public TimeKeyListener();
+    ctor public TimeKeyListener(@Nullable java.util.Locale);
+    method @NonNull protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.TimeKeyListener getInstance();
+    method @NonNull public static android.text.method.TimeKeyListener getInstance(@Nullable java.util.Locale);
+    field @Deprecated public static final char[] CHARACTERS;
+  }
+
+  public class Touch {
+    method public static int getInitialScrollX(android.widget.TextView, android.text.Spannable);
+    method public static int getInitialScrollY(android.widget.TextView, android.text.Spannable);
+    method public static boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public static void scrollTo(android.widget.TextView, android.text.Layout, int, int);
+  }
+
+  public interface TransformationMethod {
+    method public CharSequence getTransformation(CharSequence, android.view.View);
+    method public void onFocusChanged(android.view.View, CharSequence, boolean, int, android.graphics.Rect);
+  }
+
+}
+
+package android.text.style {
+
+  public class AbsoluteSizeSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public AbsoluteSizeSpan(int);
+    ctor public AbsoluteSizeSpan(int, boolean);
+    ctor public AbsoluteSizeSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public boolean getDip();
+    method public int getSize();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface AlignmentSpan extends android.text.style.ParagraphStyle {
+    method public android.text.Layout.Alignment getAlignment();
+  }
+
+  public static class AlignmentSpan.Standard implements android.text.style.AlignmentSpan android.text.ParcelableSpan {
+    ctor public AlignmentSpan.Standard(@NonNull android.text.Layout.Alignment);
+    ctor public AlignmentSpan.Standard(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public android.text.Layout.Alignment getAlignment();
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class BackgroundColorSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public BackgroundColorSpan(@ColorInt int);
+    ctor public BackgroundColorSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method @ColorInt public int getBackgroundColor();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class BulletSpan implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan {
+    ctor public BulletSpan();
+    ctor public BulletSpan(int);
+    ctor public BulletSpan(int, @ColorInt int);
+    ctor public BulletSpan(int, @ColorInt int, @IntRange(from=0) int);
+    ctor public BulletSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public void drawLeadingMargin(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, int, int, int, int, int, @NonNull CharSequence, int, int, boolean, @Nullable android.text.Layout);
+    method public int getBulletRadius();
+    method public int getColor();
+    method public int getGapWidth();
+    method public int getLeadingMargin(boolean);
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int STANDARD_GAP_WIDTH = 2; // 0x2
+  }
+
+  public abstract class CharacterStyle {
+    ctor public CharacterStyle();
+    method public android.text.style.CharacterStyle getUnderlying();
+    method public abstract void updateDrawState(android.text.TextPaint);
+    method public static android.text.style.CharacterStyle wrap(android.text.style.CharacterStyle);
+  }
+
+  public abstract class ClickableSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance {
+    ctor public ClickableSpan();
+    method public abstract void onClick(@NonNull android.view.View);
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+  }
+
+  public class DrawableMarginSpan implements android.text.style.LeadingMarginSpan android.text.style.LineHeightSpan {
+    ctor public DrawableMarginSpan(@NonNull android.graphics.drawable.Drawable);
+    ctor public DrawableMarginSpan(@NonNull android.graphics.drawable.Drawable, int);
+    method public void chooseHeight(@NonNull CharSequence, int, int, int, int, @NonNull android.graphics.Paint.FontMetricsInt);
+    method public void drawLeadingMargin(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, int, int, int, int, int, @NonNull CharSequence, int, int, boolean, @NonNull android.text.Layout);
+    method public int getLeadingMargin(boolean);
+  }
+
+  public abstract class DynamicDrawableSpan extends android.text.style.ReplacementSpan {
+    ctor public DynamicDrawableSpan();
+    ctor protected DynamicDrawableSpan(int);
+    method public void draw(@NonNull android.graphics.Canvas, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, float, int, int, int, @NonNull android.graphics.Paint);
+    method public abstract android.graphics.drawable.Drawable getDrawable();
+    method public int getSize(@NonNull android.graphics.Paint, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.graphics.Paint.FontMetricsInt);
+    method public int getVerticalAlignment();
+    field public static final int ALIGN_BASELINE = 1; // 0x1
+    field public static final int ALIGN_BOTTOM = 0; // 0x0
+    field public static final int ALIGN_CENTER = 2; // 0x2
+    field protected final int mVerticalAlignment;
+  }
+
+  public class EasyEditSpan implements android.text.ParcelableSpan {
+    ctor public EasyEditSpan();
+    ctor public EasyEditSpan(android.app.PendingIntent);
+    ctor public EasyEditSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final String EXTRA_TEXT_CHANGED_TYPE = "android.text.style.EXTRA_TEXT_CHANGED_TYPE";
+    field public static final int TEXT_DELETED = 1; // 0x1
+    field public static final int TEXT_MODIFIED = 2; // 0x2
+  }
+
+  public class ForegroundColorSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public ForegroundColorSpan(@ColorInt int);
+    ctor public ForegroundColorSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method @ColorInt public int getForegroundColor();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class IconMarginSpan implements android.text.style.LeadingMarginSpan android.text.style.LineHeightSpan {
+    ctor public IconMarginSpan(@NonNull android.graphics.Bitmap);
+    ctor public IconMarginSpan(@NonNull android.graphics.Bitmap, @IntRange(from=0) int);
+    method public void chooseHeight(CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt);
+    method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, CharSequence, int, int, boolean, android.text.Layout);
+    method public int getLeadingMargin(boolean);
+  }
+
+  public class ImageSpan extends android.text.style.DynamicDrawableSpan {
+    ctor @Deprecated public ImageSpan(@NonNull android.graphics.Bitmap);
+    ctor @Deprecated public ImageSpan(@NonNull android.graphics.Bitmap, int);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.graphics.Bitmap);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.graphics.Bitmap, int);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable, int);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable, @NonNull String);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable, @NonNull String, int);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.net.Uri);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.net.Uri, int);
+    ctor public ImageSpan(@NonNull android.content.Context, @DrawableRes int);
+    ctor public ImageSpan(@NonNull android.content.Context, @DrawableRes int, int);
+    method public android.graphics.drawable.Drawable getDrawable();
+    method @Nullable public String getSource();
+  }
+
+  public interface LeadingMarginSpan extends android.text.style.ParagraphStyle {
+    method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, CharSequence, int, int, boolean, android.text.Layout);
+    method public int getLeadingMargin(boolean);
+  }
+
+  public static interface LeadingMarginSpan.LeadingMarginSpan2 extends android.text.style.LeadingMarginSpan android.text.style.WrapTogetherSpan {
+    method public int getLeadingMarginLineCount();
+  }
+
+  public static class LeadingMarginSpan.Standard implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan {
+    ctor public LeadingMarginSpan.Standard(int, int);
+    ctor public LeadingMarginSpan.Standard(int);
+    ctor public LeadingMarginSpan.Standard(android.os.Parcel);
+    method public int describeContents();
+    method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, CharSequence, int, int, boolean, android.text.Layout);
+    method public int getLeadingMargin(boolean);
+    method public int getSpanTypeId();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public interface LineBackgroundSpan extends android.text.style.ParagraphStyle {
+    method public void drawBackground(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, @Px int, @Px int, @Px int, @Px int, @Px int, @NonNull CharSequence, int, int, int);
+  }
+
+  public static class LineBackgroundSpan.Standard implements android.text.style.LineBackgroundSpan android.text.ParcelableSpan {
+    ctor public LineBackgroundSpan.Standard(@ColorInt int);
+    ctor public LineBackgroundSpan.Standard(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public void drawBackground(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, @Px int, @Px int, @Px int, @Px int, @Px int, @NonNull CharSequence, int, int, int);
+    method @ColorInt public final int getColor();
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface LineHeightSpan extends android.text.style.ParagraphStyle android.text.style.WrapTogetherSpan {
+    method public void chooseHeight(CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt);
+  }
+
+  public static class LineHeightSpan.Standard implements android.text.style.LineHeightSpan android.text.ParcelableSpan {
+    ctor public LineHeightSpan.Standard(@IntRange(from=1) @Px int);
+    ctor public LineHeightSpan.Standard(@NonNull android.os.Parcel);
+    method public void chooseHeight(@NonNull CharSequence, int, int, int, int, @NonNull android.graphics.Paint.FontMetricsInt);
+    method public int describeContents();
+    method @Px public int getHeight();
+    method public int getSpanTypeId();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public static interface LineHeightSpan.WithDensity extends android.text.style.LineHeightSpan {
+    method public void chooseHeight(CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt, android.text.TextPaint);
+  }
+
+  public class LocaleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public LocaleSpan(@Nullable java.util.Locale);
+    ctor public LocaleSpan(@NonNull android.os.LocaleList);
+    ctor public LocaleSpan(android.os.Parcel);
+    method public int describeContents();
+    method @Nullable public java.util.Locale getLocale();
+    method @NonNull public android.os.LocaleList getLocales();
+    method public int getSpanTypeId();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class MaskFilterSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance {
+    ctor public MaskFilterSpan(android.graphics.MaskFilter);
+    method public android.graphics.MaskFilter getMaskFilter();
+    method public void updateDrawState(android.text.TextPaint);
+  }
+
+  public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
+    ctor public MetricAffectingSpan();
+    method public android.text.style.MetricAffectingSpan getUnderlying();
+    method public abstract void updateMeasureState(@NonNull android.text.TextPaint);
+  }
+
+  public interface ParagraphStyle {
+  }
+
+  public class QuoteSpan implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan {
+    ctor public QuoteSpan();
+    ctor public QuoteSpan(@ColorInt int);
+    ctor public QuoteSpan(@ColorInt int, @IntRange(from=0) int, @IntRange(from=0) int);
+    ctor public QuoteSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public void drawLeadingMargin(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, int, int, int, int, int, @NonNull CharSequence, int, int, boolean, @NonNull android.text.Layout);
+    method @ColorInt public int getColor();
+    method public int getGapWidth();
+    method public int getLeadingMargin(boolean);
+    method public int getSpanTypeId();
+    method public int getStripeWidth();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @ColorInt public static final int STANDARD_COLOR = -16776961; // 0xff0000ff
+    field public static final int STANDARD_GAP_WIDTH_PX = 2; // 0x2
+    field public static final int STANDARD_STRIPE_WIDTH_PX = 2; // 0x2
+  }
+
+  public class RelativeSizeSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public RelativeSizeSpan(@FloatRange(from=0) float);
+    ctor public RelativeSizeSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public float getSizeChange();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public abstract class ReplacementSpan extends android.text.style.MetricAffectingSpan {
+    ctor public ReplacementSpan();
+    method public abstract void draw(@NonNull android.graphics.Canvas, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, float, int, int, int, @NonNull android.graphics.Paint);
+    method @Nullable public CharSequence getContentDescription();
+    method public abstract int getSize(@NonNull android.graphics.Paint, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.graphics.Paint.FontMetricsInt);
+    method public void setContentDescription(@Nullable CharSequence);
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+  }
+
+  public class ScaleXSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public ScaleXSpan(@FloatRange(from=0) float);
+    ctor public ScaleXSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public float getScaleX();
+    method public int getSpanTypeId();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class StrikethroughSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public StrikethroughSpan();
+    ctor public StrikethroughSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class StyleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public StyleSpan(int);
+    ctor public StyleSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public int getStyle();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class SubscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public SubscriptSpan();
+    ctor public SubscriptSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class SuggestionSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan {
+    ctor public SuggestionSpan(android.content.Context, String[], int);
+    ctor public SuggestionSpan(java.util.Locale, String[], int);
+    ctor public SuggestionSpan(android.content.Context, java.util.Locale, String[], int, Class<?>);
+    ctor public SuggestionSpan(android.os.Parcel);
+    method public int describeContents();
+    method public int getFlags();
+    method @Deprecated @NonNull public String getLocale();
+    method @Nullable public java.util.Locale getLocaleObject();
+    method public int getSpanTypeId();
+    method public String[] getSuggestions();
+    method @ColorInt public int getUnderlineColor();
+    method public void setFlags(int);
+    method public void updateDrawState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.style.SuggestionSpan> CREATOR;
+    field public static final int FLAG_AUTO_CORRECTION = 4; // 0x4
+    field public static final int FLAG_EASY_CORRECT = 1; // 0x1
+    field public static final int FLAG_GRAMMAR_ERROR = 8; // 0x8
+    field public static final int FLAG_MISSPELLED = 2; // 0x2
+    field public static final int SUGGESTIONS_MAX_SIZE = 5; // 0x5
+    field @Deprecated public static final String SUGGESTION_SPAN_PICKED_AFTER = "after";
+    field @Deprecated public static final String SUGGESTION_SPAN_PICKED_BEFORE = "before";
+    field @Deprecated public static final String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode";
+  }
+
+  public class SuperscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public SuperscriptSpan();
+    ctor public SuperscriptSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface TabStopSpan extends android.text.style.ParagraphStyle {
+    method public int getTabStop();
+  }
+
+  public static class TabStopSpan.Standard implements android.text.style.TabStopSpan {
+    ctor public TabStopSpan.Standard(@IntRange(from=0) int);
+    method public int getTabStop();
+  }
+
+  public class TextAppearanceSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public TextAppearanceSpan(android.content.Context, int);
+    ctor public TextAppearanceSpan(android.content.Context, int, int);
+    ctor public TextAppearanceSpan(String, int, int, android.content.res.ColorStateList, android.content.res.ColorStateList);
+    ctor public TextAppearanceSpan(android.os.Parcel);
+    method public int describeContents();
+    method public String getFamily();
+    method @Nullable public String getFontFeatureSettings();
+    method @Nullable public String getFontVariationSettings();
+    method public android.content.res.ColorStateList getLinkTextColor();
+    method public int getShadowColor();
+    method public float getShadowDx();
+    method public float getShadowDy();
+    method public float getShadowRadius();
+    method public int getSpanTypeId();
+    method public android.content.res.ColorStateList getTextColor();
+    method public int getTextFontWeight();
+    method @Nullable public android.os.LocaleList getTextLocales();
+    method public int getTextSize();
+    method public int getTextStyle();
+    method @Nullable public android.graphics.Typeface getTypeface();
+    method public boolean isElegantTextHeight();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class TtsSpan implements android.text.ParcelableSpan {
+    ctor public TtsSpan(String, android.os.PersistableBundle);
+    ctor public TtsSpan(android.os.Parcel);
+    method public int describeContents();
+    method public android.os.PersistableBundle getArgs();
+    method public int getSpanTypeId();
+    method public String getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String ANIMACY_ANIMATE = "android.animate";
+    field public static final String ANIMACY_INANIMATE = "android.inanimate";
+    field public static final String ARG_ANIMACY = "android.arg.animacy";
+    field public static final String ARG_CASE = "android.arg.case";
+    field public static final String ARG_COUNTRY_CODE = "android.arg.country_code";
+    field public static final String ARG_CURRENCY = "android.arg.money";
+    field public static final String ARG_DAY = "android.arg.day";
+    field public static final String ARG_DENOMINATOR = "android.arg.denominator";
+    field public static final String ARG_DIGITS = "android.arg.digits";
+    field public static final String ARG_DOMAIN = "android.arg.domain";
+    field public static final String ARG_EXTENSION = "android.arg.extension";
+    field public static final String ARG_FRACTIONAL_PART = "android.arg.fractional_part";
+    field public static final String ARG_FRAGMENT_ID = "android.arg.fragment_id";
+    field public static final String ARG_GENDER = "android.arg.gender";
+    field public static final String ARG_HOURS = "android.arg.hours";
+    field public static final String ARG_INTEGER_PART = "android.arg.integer_part";
+    field public static final String ARG_MINUTES = "android.arg.minutes";
+    field public static final String ARG_MONTH = "android.arg.month";
+    field public static final String ARG_MULTIPLICITY = "android.arg.multiplicity";
+    field public static final String ARG_NUMBER = "android.arg.number";
+    field public static final String ARG_NUMBER_PARTS = "android.arg.number_parts";
+    field public static final String ARG_NUMERATOR = "android.arg.numerator";
+    field public static final String ARG_PASSWORD = "android.arg.password";
+    field public static final String ARG_PATH = "android.arg.path";
+    field public static final String ARG_PORT = "android.arg.port";
+    field public static final String ARG_PROTOCOL = "android.arg.protocol";
+    field public static final String ARG_QUANTITY = "android.arg.quantity";
+    field public static final String ARG_QUERY_STRING = "android.arg.query_string";
+    field public static final String ARG_TEXT = "android.arg.text";
+    field public static final String ARG_UNIT = "android.arg.unit";
+    field public static final String ARG_USERNAME = "android.arg.username";
+    field public static final String ARG_VERBATIM = "android.arg.verbatim";
+    field public static final String ARG_WEEKDAY = "android.arg.weekday";
+    field public static final String ARG_YEAR = "android.arg.year";
+    field public static final String CASE_ABLATIVE = "android.ablative";
+    field public static final String CASE_ACCUSATIVE = "android.accusative";
+    field public static final String CASE_DATIVE = "android.dative";
+    field public static final String CASE_GENITIVE = "android.genitive";
+    field public static final String CASE_INSTRUMENTAL = "android.instrumental";
+    field public static final String CASE_LOCATIVE = "android.locative";
+    field public static final String CASE_NOMINATIVE = "android.nominative";
+    field public static final String CASE_VOCATIVE = "android.vocative";
+    field public static final String GENDER_FEMALE = "android.female";
+    field public static final String GENDER_MALE = "android.male";
+    field public static final String GENDER_NEUTRAL = "android.neutral";
+    field public static final int MONTH_APRIL = 3; // 0x3
+    field public static final int MONTH_AUGUST = 7; // 0x7
+    field public static final int MONTH_DECEMBER = 11; // 0xb
+    field public static final int MONTH_FEBRUARY = 1; // 0x1
+    field public static final int MONTH_JANUARY = 0; // 0x0
+    field public static final int MONTH_JULY = 6; // 0x6
+    field public static final int MONTH_JUNE = 5; // 0x5
+    field public static final int MONTH_MARCH = 2; // 0x2
+    field public static final int MONTH_MAY = 4; // 0x4
+    field public static final int MONTH_NOVEMBER = 10; // 0xa
+    field public static final int MONTH_OCTOBER = 9; // 0x9
+    field public static final int MONTH_SEPTEMBER = 8; // 0x8
+    field public static final String MULTIPLICITY_DUAL = "android.dual";
+    field public static final String MULTIPLICITY_PLURAL = "android.plural";
+    field public static final String MULTIPLICITY_SINGLE = "android.single";
+    field public static final String TYPE_CARDINAL = "android.type.cardinal";
+    field public static final String TYPE_DATE = "android.type.date";
+    field public static final String TYPE_DECIMAL = "android.type.decimal";
+    field public static final String TYPE_DIGITS = "android.type.digits";
+    field public static final String TYPE_ELECTRONIC = "android.type.electronic";
+    field public static final String TYPE_FRACTION = "android.type.fraction";
+    field public static final String TYPE_MEASURE = "android.type.measure";
+    field public static final String TYPE_MONEY = "android.type.money";
+    field public static final String TYPE_ORDINAL = "android.type.ordinal";
+    field public static final String TYPE_TELEPHONE = "android.type.telephone";
+    field public static final String TYPE_TEXT = "android.type.text";
+    field public static final String TYPE_TIME = "android.type.time";
+    field public static final String TYPE_VERBATIM = "android.type.verbatim";
+    field public static final int WEEKDAY_FRIDAY = 6; // 0x6
+    field public static final int WEEKDAY_MONDAY = 2; // 0x2
+    field public static final int WEEKDAY_SATURDAY = 7; // 0x7
+    field public static final int WEEKDAY_SUNDAY = 1; // 0x1
+    field public static final int WEEKDAY_THURSDAY = 5; // 0x5
+    field public static final int WEEKDAY_TUESDAY = 3; // 0x3
+    field public static final int WEEKDAY_WEDNESDAY = 4; // 0x4
+  }
+
+  public static class TtsSpan.Builder<C extends android.text.style.TtsSpan.Builder<?>> {
+    ctor public TtsSpan.Builder(String);
+    method public android.text.style.TtsSpan build();
+    method public C setIntArgument(String, int);
+    method public C setLongArgument(String, long);
+    method public C setStringArgument(String, String);
+  }
+
+  public static class TtsSpan.CardinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.CardinalBuilder> {
+    ctor public TtsSpan.CardinalBuilder();
+    ctor public TtsSpan.CardinalBuilder(long);
+    ctor public TtsSpan.CardinalBuilder(String);
+    method public android.text.style.TtsSpan.CardinalBuilder setNumber(long);
+    method public android.text.style.TtsSpan.CardinalBuilder setNumber(String);
+  }
+
+  public static class TtsSpan.DateBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.DateBuilder> {
+    ctor public TtsSpan.DateBuilder();
+    ctor public TtsSpan.DateBuilder(Integer, Integer, Integer, Integer);
+    method public android.text.style.TtsSpan.DateBuilder setDay(int);
+    method public android.text.style.TtsSpan.DateBuilder setMonth(int);
+    method public android.text.style.TtsSpan.DateBuilder setWeekday(int);
+    method public android.text.style.TtsSpan.DateBuilder setYear(int);
+  }
+
+  public static class TtsSpan.DecimalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.DecimalBuilder> {
+    ctor public TtsSpan.DecimalBuilder();
+    ctor public TtsSpan.DecimalBuilder(double, int, int);
+    ctor public TtsSpan.DecimalBuilder(String, String);
+    method public android.text.style.TtsSpan.DecimalBuilder setArgumentsFromDouble(double, int, int);
+    method public android.text.style.TtsSpan.DecimalBuilder setFractionalPart(String);
+    method public android.text.style.TtsSpan.DecimalBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.DecimalBuilder setIntegerPart(String);
+  }
+
+  public static class TtsSpan.DigitsBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.DigitsBuilder> {
+    ctor public TtsSpan.DigitsBuilder();
+    ctor public TtsSpan.DigitsBuilder(String);
+    method public android.text.style.TtsSpan.DigitsBuilder setDigits(String);
+  }
+
+  public static class TtsSpan.ElectronicBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.ElectronicBuilder> {
+    ctor public TtsSpan.ElectronicBuilder();
+    method public android.text.style.TtsSpan.ElectronicBuilder setDomain(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setEmailArguments(String, String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setFragmentId(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setPassword(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setPath(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setPort(int);
+    method public android.text.style.TtsSpan.ElectronicBuilder setProtocol(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setQueryString(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setUsername(String);
+  }
+
+  public static class TtsSpan.FractionBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.FractionBuilder> {
+    ctor public TtsSpan.FractionBuilder();
+    ctor public TtsSpan.FractionBuilder(long, long, long);
+    method public android.text.style.TtsSpan.FractionBuilder setDenominator(long);
+    method public android.text.style.TtsSpan.FractionBuilder setDenominator(String);
+    method public android.text.style.TtsSpan.FractionBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.FractionBuilder setIntegerPart(String);
+    method public android.text.style.TtsSpan.FractionBuilder setNumerator(long);
+    method public android.text.style.TtsSpan.FractionBuilder setNumerator(String);
+  }
+
+  public static class TtsSpan.MeasureBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.MeasureBuilder> {
+    ctor public TtsSpan.MeasureBuilder();
+    method public android.text.style.TtsSpan.MeasureBuilder setDenominator(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setDenominator(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setFractionalPart(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setIntegerPart(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumber(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumber(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumerator(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumerator(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setUnit(String);
+  }
+
+  public static class TtsSpan.MoneyBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.MoneyBuilder> {
+    ctor public TtsSpan.MoneyBuilder();
+    method public android.text.style.TtsSpan.MoneyBuilder setCurrency(String);
+    method public android.text.style.TtsSpan.MoneyBuilder setFractionalPart(String);
+    method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(String);
+    method public android.text.style.TtsSpan.MoneyBuilder setQuantity(String);
+  }
+
+  public static class TtsSpan.OrdinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.OrdinalBuilder> {
+    ctor public TtsSpan.OrdinalBuilder();
+    ctor public TtsSpan.OrdinalBuilder(long);
+    ctor public TtsSpan.OrdinalBuilder(String);
+    method public android.text.style.TtsSpan.OrdinalBuilder setNumber(long);
+    method public android.text.style.TtsSpan.OrdinalBuilder setNumber(String);
+  }
+
+  public static class TtsSpan.SemioticClassBuilder<C extends android.text.style.TtsSpan.SemioticClassBuilder<?>> extends android.text.style.TtsSpan.Builder<C> {
+    ctor public TtsSpan.SemioticClassBuilder(String);
+    method public C setAnimacy(String);
+    method public C setCase(String);
+    method public C setGender(String);
+    method public C setMultiplicity(String);
+  }
+
+  public static class TtsSpan.TelephoneBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.TelephoneBuilder> {
+    ctor public TtsSpan.TelephoneBuilder();
+    ctor public TtsSpan.TelephoneBuilder(String);
+    method public android.text.style.TtsSpan.TelephoneBuilder setCountryCode(String);
+    method public android.text.style.TtsSpan.TelephoneBuilder setExtension(String);
+    method public android.text.style.TtsSpan.TelephoneBuilder setNumberParts(String);
+  }
+
+  public static class TtsSpan.TextBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.TextBuilder> {
+    ctor public TtsSpan.TextBuilder();
+    ctor public TtsSpan.TextBuilder(String);
+    method public android.text.style.TtsSpan.TextBuilder setText(String);
+  }
+
+  public static class TtsSpan.TimeBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.TimeBuilder> {
+    ctor public TtsSpan.TimeBuilder();
+    ctor public TtsSpan.TimeBuilder(int, int);
+    method public android.text.style.TtsSpan.TimeBuilder setHours(int);
+    method public android.text.style.TtsSpan.TimeBuilder setMinutes(int);
+  }
+
+  public static class TtsSpan.VerbatimBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.VerbatimBuilder> {
+    ctor public TtsSpan.VerbatimBuilder();
+    ctor public TtsSpan.VerbatimBuilder(String);
+    method public android.text.style.TtsSpan.VerbatimBuilder setVerbatim(String);
+  }
+
+  public class TypefaceSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public TypefaceSpan(@Nullable String);
+    ctor public TypefaceSpan(@NonNull android.graphics.Typeface);
+    ctor public TypefaceSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method @Nullable public String getFamily();
+    method public int getSpanTypeId();
+    method @Nullable public android.graphics.Typeface getTypeface();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class URLSpan extends android.text.style.ClickableSpan implements android.text.ParcelableSpan {
+    ctor public URLSpan(String);
+    ctor public URLSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public String getURL();
+    method public void onClick(android.view.View);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class UnderlineSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public UnderlineSpan();
+    ctor public UnderlineSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface UpdateAppearance {
+  }
+
+  public interface UpdateLayout extends android.text.style.UpdateAppearance {
+  }
+
+  public interface WrapTogetherSpan extends android.text.style.ParagraphStyle {
+  }
+
+}
+
+package android.text.util {
+
+  public class Linkify {
+    ctor public Linkify();
+    method public static final boolean addLinks(@NonNull android.text.Spannable, int);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, int, @Nullable java.util.function.Function<java.lang.String,android.text.style.URLSpan>);
+    method public static final boolean addLinks(@NonNull android.widget.TextView, int);
+    method public static final void addLinks(@NonNull android.widget.TextView, @NonNull java.util.regex.Pattern, @Nullable String);
+    method public static final void addLinks(@NonNull android.widget.TextView, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final void addLinks(@NonNull android.widget.TextView, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable String[], @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable String[], @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable String[], @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter, @Nullable java.util.function.Function<java.lang.String,android.text.style.URLSpan>);
+    field public static final int ALL = 15; // 0xf
+    field public static final int EMAIL_ADDRESSES = 2; // 0x2
+    field @Deprecated public static final int MAP_ADDRESSES = 8; // 0x8
+    field public static final int PHONE_NUMBERS = 4; // 0x4
+    field public static final int WEB_URLS = 1; // 0x1
+    field public static final android.text.util.Linkify.MatchFilter sPhoneNumberMatchFilter;
+    field public static final android.text.util.Linkify.TransformFilter sPhoneNumberTransformFilter;
+    field public static final android.text.util.Linkify.MatchFilter sUrlMatchFilter;
+  }
+
+  public static interface Linkify.MatchFilter {
+    method public boolean acceptMatch(CharSequence, int, int);
+  }
+
+  public static interface Linkify.TransformFilter {
+    method public String transformUrl(java.util.regex.Matcher, String);
+  }
+
+  public class Rfc822Token {
+    ctor public Rfc822Token(@Nullable String, @Nullable String, @Nullable String);
+    method @Nullable public String getAddress();
+    method @Nullable public String getComment();
+    method @Nullable public String getName();
+    method public static String quoteComment(String);
+    method public static String quoteName(String);
+    method public static String quoteNameIfNecessary(String);
+    method public void setAddress(@Nullable String);
+    method public void setComment(@Nullable String);
+    method public void setName(@Nullable String);
+  }
+
+  public class Rfc822Tokenizer implements android.widget.MultiAutoCompleteTextView.Tokenizer {
+    ctor public Rfc822Tokenizer();
+    method public int findTokenEnd(CharSequence, int);
+    method public int findTokenStart(CharSequence, int);
+    method public CharSequence terminateToken(CharSequence);
+    method public static void tokenize(CharSequence, java.util.Collection<android.text.util.Rfc822Token>);
+    method public static android.text.util.Rfc822Token[] tokenize(CharSequence);
+  }
+
+}
+
+package android.transition {
+
+  public class ArcMotion extends android.transition.PathMotion {
+    ctor public ArcMotion();
+    ctor public ArcMotion(android.content.Context, android.util.AttributeSet);
+    method public float getMaximumAngle();
+    method public float getMinimumHorizontalAngle();
+    method public float getMinimumVerticalAngle();
+    method public android.graphics.Path getPath(float, float, float, float);
+    method public void setMaximumAngle(float);
+    method public void setMinimumHorizontalAngle(float);
+    method public void setMinimumVerticalAngle(float);
+  }
+
+  public class AutoTransition extends android.transition.TransitionSet {
+    ctor public AutoTransition();
+    ctor public AutoTransition(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class ChangeBounds extends android.transition.Transition {
+    ctor public ChangeBounds();
+    ctor public ChangeBounds(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public boolean getResizeClip();
+    method @Deprecated public void setReparent(boolean);
+    method public void setResizeClip(boolean);
+  }
+
+  public class ChangeClipBounds extends android.transition.Transition {
+    ctor public ChangeClipBounds();
+    ctor public ChangeClipBounds(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class ChangeImageTransform extends android.transition.Transition {
+    ctor public ChangeImageTransform();
+    ctor public ChangeImageTransform(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class ChangeScroll extends android.transition.Transition {
+    ctor public ChangeScroll();
+    ctor public ChangeScroll(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class ChangeTransform extends android.transition.Transition {
+    ctor public ChangeTransform();
+    ctor public ChangeTransform(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public boolean getReparent();
+    method public boolean getReparentWithOverlay();
+    method public void setReparent(boolean);
+    method public void setReparentWithOverlay(boolean);
+  }
+
+  public class CircularPropagation extends android.transition.VisibilityPropagation {
+    ctor public CircularPropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+  }
+
+  public class Explode extends android.transition.Visibility {
+    ctor public Explode();
+    ctor public Explode(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class Fade extends android.transition.Visibility {
+    ctor public Fade();
+    ctor public Fade(int);
+    ctor public Fade(android.content.Context, android.util.AttributeSet);
+    field public static final int IN = 1; // 0x1
+    field public static final int OUT = 2; // 0x2
+  }
+
+  public abstract class PathMotion {
+    ctor public PathMotion();
+    ctor public PathMotion(android.content.Context, android.util.AttributeSet);
+    method public abstract android.graphics.Path getPath(float, float, float, float);
+  }
+
+  public class PatternPathMotion extends android.transition.PathMotion {
+    ctor public PatternPathMotion();
+    ctor public PatternPathMotion(android.content.Context, android.util.AttributeSet);
+    ctor public PatternPathMotion(android.graphics.Path);
+    method public android.graphics.Path getPath(float, float, float, float);
+    method public android.graphics.Path getPatternPath();
+    method public void setPatternPath(android.graphics.Path);
+  }
+
+  public final class Scene {
+    ctor public Scene(android.view.ViewGroup);
+    ctor public Scene(android.view.ViewGroup, android.view.View);
+    ctor @Deprecated public Scene(android.view.ViewGroup, android.view.ViewGroup);
+    method public void enter();
+    method public void exit();
+    method @Nullable public static android.transition.Scene getCurrentScene(@NonNull android.view.ViewGroup);
+    method public static android.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
+    method public android.view.ViewGroup getSceneRoot();
+    method public void setEnterAction(Runnable);
+    method public void setExitAction(Runnable);
+  }
+
+  public class SidePropagation extends android.transition.VisibilityPropagation {
+    ctor public SidePropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+    method public void setSide(int);
+  }
+
+  public class Slide extends android.transition.Visibility {
+    ctor public Slide();
+    ctor public Slide(int);
+    ctor public Slide(android.content.Context, android.util.AttributeSet);
+    method public int getSlideEdge();
+    method public void setSlideEdge(int);
+  }
+
+  public abstract class Transition implements java.lang.Cloneable {
+    ctor public Transition();
+    ctor public Transition(android.content.Context, android.util.AttributeSet);
+    method public android.transition.Transition addListener(android.transition.Transition.TransitionListener);
+    method public android.transition.Transition addTarget(int);
+    method public android.transition.Transition addTarget(String);
+    method public android.transition.Transition addTarget(Class);
+    method public android.transition.Transition addTarget(android.view.View);
+    method public boolean canRemoveViews();
+    method public abstract void captureEndValues(android.transition.TransitionValues);
+    method public abstract void captureStartValues(android.transition.TransitionValues);
+    method public android.transition.Transition clone();
+    method public android.animation.Animator createAnimator(android.view.ViewGroup, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public android.transition.Transition excludeChildren(int, boolean);
+    method public android.transition.Transition excludeChildren(android.view.View, boolean);
+    method public android.transition.Transition excludeChildren(Class, boolean);
+    method public android.transition.Transition excludeTarget(int, boolean);
+    method public android.transition.Transition excludeTarget(String, boolean);
+    method public android.transition.Transition excludeTarget(android.view.View, boolean);
+    method public android.transition.Transition excludeTarget(Class, boolean);
+    method public long getDuration();
+    method public android.graphics.Rect getEpicenter();
+    method public android.transition.Transition.EpicenterCallback getEpicenterCallback();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public String getName();
+    method public android.transition.PathMotion getPathMotion();
+    method public android.transition.TransitionPropagation getPropagation();
+    method public long getStartDelay();
+    method public java.util.List<java.lang.Integer> getTargetIds();
+    method public java.util.List<java.lang.String> getTargetNames();
+    method public java.util.List<java.lang.Class> getTargetTypes();
+    method public java.util.List<android.view.View> getTargets();
+    method public String[] getTransitionProperties();
+    method public android.transition.TransitionValues getTransitionValues(android.view.View, boolean);
+    method public boolean isTransitionRequired(@Nullable android.transition.TransitionValues, @Nullable android.transition.TransitionValues);
+    method public android.transition.Transition removeListener(android.transition.Transition.TransitionListener);
+    method public android.transition.Transition removeTarget(int);
+    method public android.transition.Transition removeTarget(String);
+    method public android.transition.Transition removeTarget(android.view.View);
+    method public android.transition.Transition removeTarget(Class);
+    method public android.transition.Transition setDuration(long);
+    method public void setEpicenterCallback(android.transition.Transition.EpicenterCallback);
+    method public android.transition.Transition setInterpolator(android.animation.TimeInterpolator);
+    method public void setMatchOrder(int...);
+    method public void setPathMotion(android.transition.PathMotion);
+    method public void setPropagation(android.transition.TransitionPropagation);
+    method public android.transition.Transition setStartDelay(long);
+    field public static final int MATCH_ID = 3; // 0x3
+    field public static final int MATCH_INSTANCE = 1; // 0x1
+    field public static final int MATCH_ITEM_ID = 4; // 0x4
+    field public static final int MATCH_NAME = 2; // 0x2
+  }
+
+  public abstract static class Transition.EpicenterCallback {
+    ctor public Transition.EpicenterCallback();
+    method public abstract android.graphics.Rect onGetEpicenter(android.transition.Transition);
+  }
+
+  public static interface Transition.TransitionListener {
+    method public void onTransitionCancel(android.transition.Transition);
+    method public void onTransitionEnd(android.transition.Transition);
+    method public void onTransitionPause(android.transition.Transition);
+    method public void onTransitionResume(android.transition.Transition);
+    method public void onTransitionStart(android.transition.Transition);
+  }
+
+  public class TransitionInflater {
+    method public static android.transition.TransitionInflater from(android.content.Context);
+    method public android.transition.Transition inflateTransition(@TransitionRes int);
+    method public android.transition.TransitionManager inflateTransitionManager(@TransitionRes int, android.view.ViewGroup);
+  }
+
+  public abstract class TransitionListenerAdapter implements android.transition.Transition.TransitionListener {
+    ctor public TransitionListenerAdapter();
+    method public void onTransitionCancel(android.transition.Transition);
+    method public void onTransitionEnd(android.transition.Transition);
+    method public void onTransitionPause(android.transition.Transition);
+    method public void onTransitionResume(android.transition.Transition);
+    method public void onTransitionStart(android.transition.Transition);
+  }
+
+  public class TransitionManager {
+    ctor public TransitionManager();
+    method public static void beginDelayedTransition(android.view.ViewGroup);
+    method public static void beginDelayedTransition(android.view.ViewGroup, android.transition.Transition);
+    method public static void endTransitions(android.view.ViewGroup);
+    method public static void go(android.transition.Scene);
+    method public static void go(android.transition.Scene, android.transition.Transition);
+    method public void setTransition(android.transition.Scene, android.transition.Transition);
+    method public void setTransition(android.transition.Scene, android.transition.Scene, android.transition.Transition);
+    method public void transitionTo(android.transition.Scene);
+  }
+
+  public abstract class TransitionPropagation {
+    ctor public TransitionPropagation();
+    method public abstract void captureValues(android.transition.TransitionValues);
+    method public abstract String[] getPropagationProperties();
+    method public abstract long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+  }
+
+  public class TransitionSet extends android.transition.Transition {
+    ctor public TransitionSet();
+    ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+    method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet addTarget(android.view.View);
+    method public android.transition.TransitionSet addTarget(int);
+    method public android.transition.TransitionSet addTarget(String);
+    method public android.transition.TransitionSet addTarget(Class);
+    method public android.transition.TransitionSet addTransition(android.transition.Transition);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public android.transition.TransitionSet clone();
+    method public int getOrdering();
+    method public android.transition.Transition getTransitionAt(int);
+    method public int getTransitionCount();
+    method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet removeTarget(int);
+    method public android.transition.TransitionSet removeTarget(android.view.View);
+    method public android.transition.TransitionSet removeTarget(Class);
+    method public android.transition.TransitionSet removeTarget(String);
+    method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+    method public android.transition.TransitionSet setDuration(long);
+    method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
+    method public android.transition.TransitionSet setOrdering(int);
+    method public android.transition.TransitionSet setStartDelay(long);
+    field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
+    field public static final int ORDERING_TOGETHER = 0; // 0x0
+  }
+
+  public class TransitionValues {
+    ctor @Deprecated public TransitionValues();
+    ctor public TransitionValues(@NonNull android.view.View);
+    field @NonNull public final java.util.Map<java.lang.String,java.lang.Object> values;
+    field @NonNull public android.view.View view;
+  }
+
+  public abstract class Visibility extends android.transition.Transition {
+    ctor public Visibility();
+    ctor public Visibility(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public int getMode();
+    method public boolean isVisible(android.transition.TransitionValues);
+    method public android.animation.Animator onAppear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int);
+    method public android.animation.Animator onAppear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public android.animation.Animator onDisappear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int);
+    method public android.animation.Animator onDisappear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setMode(int);
+    field public static final int MODE_IN = 1; // 0x1
+    field public static final int MODE_OUT = 2; // 0x2
+  }
+
+  public abstract class VisibilityPropagation extends android.transition.TransitionPropagation {
+    ctor public VisibilityPropagation();
+    method public void captureValues(android.transition.TransitionValues);
+    method public String[] getPropagationProperties();
+    method public int getViewVisibility(android.transition.TransitionValues);
+    method public int getViewX(android.transition.TransitionValues);
+    method public int getViewY(android.transition.TransitionValues);
+  }
+
+}
+
+package android.util {
+
+  public class AndroidException extends java.lang.Exception {
+    ctor public AndroidException();
+    ctor public AndroidException(String);
+    ctor public AndroidException(String, Throwable);
+    ctor public AndroidException(Exception);
+  }
+
+  public class AndroidRuntimeException extends java.lang.RuntimeException {
+    ctor public AndroidRuntimeException();
+    ctor public AndroidRuntimeException(String);
+    ctor public AndroidRuntimeException(String, Throwable);
+    ctor public AndroidRuntimeException(Exception);
+  }
+
+  public final class ArrayMap<K, V> implements java.util.Map<K,V> {
+    ctor public ArrayMap();
+    ctor public ArrayMap(int);
+    ctor public ArrayMap(android.util.ArrayMap<K,V>);
+    method public void clear();
+    method public boolean containsAll(java.util.Collection<?>);
+    method public boolean containsKey(Object);
+    method public boolean containsValue(Object);
+    method public void ensureCapacity(int);
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public V get(Object);
+    method public int indexOfKey(Object);
+    method public int indexOfValue(Object);
+    method public boolean isEmpty();
+    method public K keyAt(int);
+    method public java.util.Set<K> keySet();
+    method public V put(K, V);
+    method public void putAll(android.util.ArrayMap<? extends K,? extends V>);
+    method public void putAll(java.util.Map<? extends K,? extends V>);
+    method public V remove(Object);
+    method public boolean removeAll(java.util.Collection<?>);
+    method public V removeAt(int);
+    method public boolean retainAll(java.util.Collection<?>);
+    method public V setValueAt(int, V);
+    method public int size();
+    method public V valueAt(int);
+    method public java.util.Collection<V> values();
+  }
+
+  public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
+    ctor public ArraySet();
+    ctor public ArraySet(int);
+    ctor public ArraySet(android.util.ArraySet<E>);
+    ctor public ArraySet(java.util.Collection<? extends E>);
+    ctor public ArraySet(@Nullable E[]);
+    method public boolean add(E);
+    method public void addAll(android.util.ArraySet<? extends E>);
+    method public boolean addAll(java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(Object);
+    method public boolean containsAll(java.util.Collection<?>);
+    method public void ensureCapacity(int);
+    method public int indexOf(Object);
+    method public boolean isEmpty();
+    method public java.util.Iterator<E> iterator();
+    method public boolean remove(Object);
+    method public boolean removeAll(android.util.ArraySet<? extends E>);
+    method public boolean removeAll(java.util.Collection<?>);
+    method public E removeAt(int);
+    method public boolean retainAll(java.util.Collection<?>);
+    method public int size();
+    method public Object[] toArray();
+    method public <T> T[] toArray(T[]);
+    method public E valueAt(int);
+  }
+
+  public class AtomicFile {
+    ctor public AtomicFile(java.io.File);
+    method public void delete();
+    method public void failWrite(java.io.FileOutputStream);
+    method public void finishWrite(java.io.FileOutputStream);
+    method public java.io.File getBaseFile();
+    method public long getLastModifiedTime();
+    method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+    method public byte[] readFully() throws java.io.IOException;
+    method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+  }
+
+  public interface AttributeSet {
+    method public boolean getAttributeBooleanValue(String, String, boolean);
+    method public boolean getAttributeBooleanValue(int, boolean);
+    method public int getAttributeCount();
+    method public float getAttributeFloatValue(String, String, float);
+    method public float getAttributeFloatValue(int, float);
+    method public int getAttributeIntValue(String, String, int);
+    method public int getAttributeIntValue(int, int);
+    method public int getAttributeListValue(String, String, String[], int);
+    method public int getAttributeListValue(int, String[], int);
+    method public String getAttributeName(int);
+    method public int getAttributeNameResource(int);
+    method public default String getAttributeNamespace(int);
+    method public int getAttributeResourceValue(String, String, int);
+    method public int getAttributeResourceValue(int, int);
+    method public int getAttributeUnsignedIntValue(String, String, int);
+    method public int getAttributeUnsignedIntValue(int, int);
+    method public String getAttributeValue(int);
+    method public String getAttributeValue(String, String);
+    method public String getClassAttribute();
+    method public String getIdAttribute();
+    method public int getIdAttributeResourceValue(int);
+    method public String getPositionDescription();
+    method public int getStyleAttribute();
+  }
+
+  public class Base64 {
+    method public static byte[] decode(String, int);
+    method public static byte[] decode(byte[], int);
+    method public static byte[] decode(byte[], int, int, int);
+    method public static byte[] encode(byte[], int);
+    method public static byte[] encode(byte[], int, int, int);
+    method public static String encodeToString(byte[], int);
+    method public static String encodeToString(byte[], int, int, int);
+    field public static final int CRLF = 4; // 0x4
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int NO_CLOSE = 16; // 0x10
+    field public static final int NO_PADDING = 1; // 0x1
+    field public static final int NO_WRAP = 2; // 0x2
+    field public static final int URL_SAFE = 8; // 0x8
+  }
+
+  public class Base64DataException extends java.io.IOException {
+    ctor public Base64DataException(String);
+  }
+
+  public class Base64InputStream extends java.io.FilterInputStream {
+    ctor public Base64InputStream(java.io.InputStream, int);
+    method public int available();
+    method public void reset();
+  }
+
+  public class Base64OutputStream extends java.io.FilterOutputStream {
+    ctor public Base64OutputStream(java.io.OutputStream, int);
+  }
+
+  public final class CloseGuard {
+    ctor public CloseGuard();
+    method public void close();
+    method public void open(@NonNull String);
+    method public void warnIfOpen();
+  }
+
+  @Deprecated public final class Config {
+    field @Deprecated public static final boolean DEBUG = false;
+    field @Deprecated public static final boolean LOGD = true;
+    field @Deprecated public static final boolean LOGV = false;
+    field @Deprecated public static final boolean PROFILE = false;
+    field @Deprecated public static final boolean RELEASE = true;
+  }
+
+  public class DebugUtils {
+    method public static boolean isObjectSelected(Object);
+  }
+
+  public class DisplayMetrics {
+    ctor public DisplayMetrics();
+    method public boolean equals(android.util.DisplayMetrics);
+    method public void setTo(android.util.DisplayMetrics);
+    method public void setToDefaults();
+    field public static final int DENSITY_140 = 140; // 0x8c
+    field public static final int DENSITY_180 = 180; // 0xb4
+    field public static final int DENSITY_200 = 200; // 0xc8
+    field public static final int DENSITY_220 = 220; // 0xdc
+    field public static final int DENSITY_260 = 260; // 0x104
+    field public static final int DENSITY_280 = 280; // 0x118
+    field public static final int DENSITY_300 = 300; // 0x12c
+    field public static final int DENSITY_340 = 340; // 0x154
+    field public static final int DENSITY_360 = 360; // 0x168
+    field public static final int DENSITY_400 = 400; // 0x190
+    field public static final int DENSITY_420 = 420; // 0x1a4
+    field public static final int DENSITY_440 = 440; // 0x1b8
+    field public static final int DENSITY_450 = 450; // 0x1c2
+    field public static final int DENSITY_560 = 560; // 0x230
+    field public static final int DENSITY_600 = 600; // 0x258
+    field public static final int DENSITY_DEFAULT = 160; // 0xa0
+    field public static final int DENSITY_DEVICE_STABLE;
+    field public static final int DENSITY_HIGH = 240; // 0xf0
+    field public static final int DENSITY_LOW = 120; // 0x78
+    field public static final int DENSITY_MEDIUM = 160; // 0xa0
+    field public static final int DENSITY_TV = 213; // 0xd5
+    field public static final int DENSITY_XHIGH = 320; // 0x140
+    field public static final int DENSITY_XXHIGH = 480; // 0x1e0
+    field public static final int DENSITY_XXXHIGH = 640; // 0x280
+    field public float density;
+    field public int densityDpi;
+    field public int heightPixels;
+    field public float scaledDensity;
+    field public int widthPixels;
+    field public float xdpi;
+    field public float ydpi;
+  }
+
+  public class EventLog {
+    method public static int getTagCode(String);
+    method public static String getTagName(int);
+    method public static void readEvents(int[], java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException;
+    method public static int writeEvent(int, int);
+    method public static int writeEvent(int, long);
+    method public static int writeEvent(int, float);
+    method public static int writeEvent(int, String);
+    method public static int writeEvent(int, java.lang.Object...);
+  }
+
+  public static final class EventLog.Event {
+    method public Object getData();
+    method public int getProcessId();
+    method public int getTag();
+    method public int getThreadId();
+    method public long getTimeNanos();
+  }
+
+  @Deprecated public class EventLogTags {
+    ctor @Deprecated public EventLogTags() throws java.io.IOException;
+    ctor @Deprecated public EventLogTags(java.io.BufferedReader) throws java.io.IOException;
+    method @Deprecated public android.util.EventLogTags.Description get(String);
+    method @Deprecated public android.util.EventLogTags.Description get(int);
+  }
+
+  @Deprecated public static class EventLogTags.Description {
+    field @Deprecated public final String mName;
+    field @Deprecated public final int mTag;
+  }
+
+  @Deprecated public class FloatMath {
+  }
+
+  public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
+    ctor public FloatProperty(String);
+    method public final void set(T, Float);
+    method public abstract void setValue(T, float);
+  }
+
+  public final class Half extends java.lang.Number implements java.lang.Comparable<android.util.Half> {
+    ctor public Half(@HalfFloat short);
+    ctor public Half(float);
+    ctor public Half(double);
+    ctor public Half(@NonNull String) throws java.lang.NumberFormatException;
+    method @HalfFloat public static short abs(@HalfFloat short);
+    method @HalfFloat public static short ceil(@HalfFloat short);
+    method public static int compare(@HalfFloat short, @HalfFloat short);
+    method public int compareTo(@NonNull android.util.Half);
+    method @HalfFloat public static short copySign(@HalfFloat short, @HalfFloat short);
+    method public double doubleValue();
+    method public static boolean equals(@HalfFloat short, @HalfFloat short);
+    method public float floatValue();
+    method @HalfFloat public static short floor(@HalfFloat short);
+    method public static int getExponent(@HalfFloat short);
+    method public static int getSign(@HalfFloat short);
+    method public static int getSignificand(@HalfFloat short);
+    method public static boolean greater(@HalfFloat short, @HalfFloat short);
+    method public static boolean greaterEquals(@HalfFloat short, @HalfFloat short);
+    method public static int halfToIntBits(@HalfFloat short);
+    method public static int halfToRawIntBits(@HalfFloat short);
+    method @HalfFloat public static short halfToShortBits(@HalfFloat short);
+    method @HalfFloat public short halfValue();
+    method public static int hashCode(@HalfFloat short);
+    method @HalfFloat public static short intBitsToHalf(int);
+    method public int intValue();
+    method public static boolean isInfinite(@HalfFloat short);
+    method public boolean isNaN();
+    method public static boolean isNaN(@HalfFloat short);
+    method public static boolean isNormalized(@HalfFloat short);
+    method public static boolean less(@HalfFloat short, @HalfFloat short);
+    method public static boolean lessEquals(@HalfFloat short, @HalfFloat short);
+    method public long longValue();
+    method @HalfFloat public static short max(@HalfFloat short, @HalfFloat short);
+    method @HalfFloat public static short min(@HalfFloat short, @HalfFloat short);
+    method @HalfFloat public static short parseHalf(@NonNull String) throws java.lang.NumberFormatException;
+    method @HalfFloat public static short round(@HalfFloat short);
+    method public static float toFloat(@HalfFloat short);
+    method @HalfFloat public static short toHalf(float);
+    method @NonNull public static String toHexString(@HalfFloat short);
+    method @NonNull public static String toString(@HalfFloat short);
+    method @HalfFloat public static short trunc(@HalfFloat short);
+    method @NonNull public static android.util.Half valueOf(@HalfFloat short);
+    method @NonNull public static android.util.Half valueOf(float);
+    method @NonNull public static android.util.Half valueOf(@NonNull String);
+    field @HalfFloat public static final short EPSILON = 5120; // 0x1400
+    field @HalfFloat public static final short LOWEST_VALUE = -1025; // 0xfffffbff
+    field public static final int MAX_EXPONENT = 15; // 0xf
+    field @HalfFloat public static final short MAX_VALUE = 31743; // 0x7bff
+    field public static final int MIN_EXPONENT = -14; // 0xfffffff2
+    field @HalfFloat public static final short MIN_NORMAL = 1024; // 0x400
+    field @HalfFloat public static final short MIN_VALUE = 1; // 0x1
+    field @HalfFloat public static final short NEGATIVE_INFINITY = -1024; // 0xfffffc00
+    field @HalfFloat public static final short NEGATIVE_ZERO = -32768; // 0xffff8000
+    field @HalfFloat public static final short NaN = 32256; // 0x7e00
+    field @HalfFloat public static final short POSITIVE_INFINITY = 31744; // 0x7c00
+    field @HalfFloat public static final short POSITIVE_ZERO = 0; // 0x0
+    field public static final int SIZE = 16; // 0x10
+  }
+
+  public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
+    ctor public IntProperty(String);
+    method public final void set(T, Integer);
+    method public abstract void setValue(T, int);
+  }
+
+  public final class JsonReader implements java.io.Closeable {
+    ctor public JsonReader(java.io.Reader);
+    method public void beginArray() throws java.io.IOException;
+    method public void beginObject() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void endArray() throws java.io.IOException;
+    method public void endObject() throws java.io.IOException;
+    method public boolean hasNext() throws java.io.IOException;
+    method public boolean isLenient();
+    method public boolean nextBoolean() throws java.io.IOException;
+    method public double nextDouble() throws java.io.IOException;
+    method public int nextInt() throws java.io.IOException;
+    method public long nextLong() throws java.io.IOException;
+    method public String nextName() throws java.io.IOException;
+    method public void nextNull() throws java.io.IOException;
+    method public String nextString() throws java.io.IOException;
+    method public android.util.JsonToken peek() throws java.io.IOException;
+    method public void setLenient(boolean);
+    method public void skipValue() throws java.io.IOException;
+  }
+
+  public enum JsonToken {
+    enum_constant public static final android.util.JsonToken BEGIN_ARRAY;
+    enum_constant public static final android.util.JsonToken BEGIN_OBJECT;
+    enum_constant public static final android.util.JsonToken BOOLEAN;
+    enum_constant public static final android.util.JsonToken END_ARRAY;
+    enum_constant public static final android.util.JsonToken END_DOCUMENT;
+    enum_constant public static final android.util.JsonToken END_OBJECT;
+    enum_constant public static final android.util.JsonToken NAME;
+    enum_constant public static final android.util.JsonToken NULL;
+    enum_constant public static final android.util.JsonToken NUMBER;
+    enum_constant public static final android.util.JsonToken STRING;
+  }
+
+  public final class JsonWriter implements java.io.Closeable {
+    ctor public JsonWriter(java.io.Writer);
+    method public android.util.JsonWriter beginArray() throws java.io.IOException;
+    method public android.util.JsonWriter beginObject() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public android.util.JsonWriter endArray() throws java.io.IOException;
+    method public android.util.JsonWriter endObject() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public boolean isLenient();
+    method public android.util.JsonWriter name(String) throws java.io.IOException;
+    method public android.util.JsonWriter nullValue() throws java.io.IOException;
+    method public void setIndent(String);
+    method public void setLenient(boolean);
+    method public android.util.JsonWriter value(String) throws java.io.IOException;
+    method public android.util.JsonWriter value(boolean) throws java.io.IOException;
+    method public android.util.JsonWriter value(double) throws java.io.IOException;
+    method public android.util.JsonWriter value(long) throws java.io.IOException;
+    method public android.util.JsonWriter value(Number) throws java.io.IOException;
+  }
+
+  public final class LayoutDirection {
+    field public static final int INHERIT = 2; // 0x2
+    field public static final int LOCALE = 3; // 0x3
+    field public static final int LTR = 0; // 0x0
+    field public static final int RTL = 1; // 0x1
+  }
+
+  public final class Log {
+    method public static int d(@Nullable String, @NonNull String);
+    method public static int d(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static int e(@Nullable String, @NonNull String);
+    method public static int e(@Nullable String, @Nullable String, @Nullable Throwable);
+    method @NonNull public static String getStackTraceString(@Nullable Throwable);
+    method public static int i(@Nullable String, @NonNull String);
+    method public static int i(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static boolean isLoggable(@Nullable @Size(max=23, apis="..23") String, int);
+    method public static int println(int, @Nullable String, @NonNull String);
+    method public static int v(@Nullable String, @NonNull String);
+    method public static int v(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static int w(@Nullable String, @NonNull String);
+    method public static int w(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static int w(@Nullable String, @Nullable Throwable);
+    method public static int wtf(@Nullable String, @Nullable String);
+    method public static int wtf(@Nullable String, @NonNull Throwable);
+    method public static int wtf(@Nullable String, @Nullable String, @Nullable Throwable);
+    field public static final int ASSERT = 7; // 0x7
+    field public static final int DEBUG = 3; // 0x3
+    field public static final int ERROR = 6; // 0x6
+    field public static final int INFO = 4; // 0x4
+    field public static final int VERBOSE = 2; // 0x2
+    field public static final int WARN = 5; // 0x5
+  }
+
+  public class LogPrinter implements android.util.Printer {
+    ctor public LogPrinter(int, String);
+    method public void println(String);
+  }
+
+  public class LongSparseArray<E> implements java.lang.Cloneable {
+    ctor public LongSparseArray();
+    ctor public LongSparseArray(int);
+    method public void append(long, E);
+    method public void clear();
+    method public android.util.LongSparseArray<E> clone();
+    method public void delete(long);
+    method public E get(long);
+    method public E get(long, E);
+    method public int indexOfKey(long);
+    method public int indexOfValue(E);
+    method public long keyAt(int);
+    method public void put(long, E);
+    method public void remove(long);
+    method public void removeAt(int);
+    method public void setValueAt(int, E);
+    method public int size();
+    method public E valueAt(int);
+  }
+
+  public class LruCache<K, V> {
+    ctor public LruCache(int);
+    method protected V create(K);
+    method public final int createCount();
+    method protected void entryRemoved(boolean, K, V, V);
+    method public final void evictAll();
+    method public final int evictionCount();
+    method public final V get(K);
+    method public final int hitCount();
+    method public final int maxSize();
+    method public final int missCount();
+    method public final V put(K, V);
+    method public final int putCount();
+    method public final V remove(K);
+    method public void resize(int);
+    method public final int size();
+    method protected int sizeOf(K, V);
+    method public final java.util.Map<K,V> snapshot();
+    method public final String toString();
+    method public void trimToSize(int);
+  }
+
+  public final class MalformedJsonException extends java.io.IOException {
+    ctor public MalformedJsonException(String);
+  }
+
+  public class MonthDisplayHelper {
+    ctor public MonthDisplayHelper(int, int, int);
+    ctor public MonthDisplayHelper(int, int);
+    method public int getColumnOf(int);
+    method public int getDayAt(int, int);
+    method public int[] getDigitsForRow(int);
+    method public int getFirstDayOfMonth();
+    method public int getMonth();
+    method public int getNumberOfDaysInMonth();
+    method public int getOffset();
+    method public int getRowOf(int);
+    method public int getWeekStartDay();
+    method public int getYear();
+    method public boolean isWithinCurrentMonth(int, int);
+    method public void nextMonth();
+    method public void previousMonth();
+  }
+
+  @Deprecated public final class MutableBoolean {
+    ctor @Deprecated public MutableBoolean(boolean);
+    field @Deprecated public boolean value;
+  }
+
+  @Deprecated public final class MutableByte {
+    ctor @Deprecated public MutableByte(byte);
+    field @Deprecated public byte value;
+  }
+
+  @Deprecated public final class MutableChar {
+    ctor @Deprecated public MutableChar(char);
+    field @Deprecated public char value;
+  }
+
+  @Deprecated public final class MutableDouble {
+    ctor @Deprecated public MutableDouble(double);
+    field @Deprecated public double value;
+  }
+
+  @Deprecated public final class MutableFloat {
+    ctor @Deprecated public MutableFloat(float);
+    field @Deprecated public float value;
+  }
+
+  @Deprecated public final class MutableInt {
+    ctor @Deprecated public MutableInt(int);
+    field @Deprecated public int value;
+  }
+
+  @Deprecated public final class MutableLong {
+    ctor @Deprecated public MutableLong(long);
+    field @Deprecated public long value;
+  }
+
+  @Deprecated public final class MutableShort {
+    ctor @Deprecated public MutableShort(short);
+    field @Deprecated public short value;
+  }
+
+  public class NoSuchPropertyException extends java.lang.RuntimeException {
+    ctor public NoSuchPropertyException(String);
+  }
+
+  public class Pair<F, S> {
+    ctor public Pair(F, S);
+    method public static <A, B> android.util.Pair<A,B> create(A, B);
+    field public final F first;
+    field public final S second;
+  }
+
+  public class Patterns {
+    method public static final String concatGroups(java.util.regex.Matcher);
+    method public static final String digitsAndPlusOnly(java.util.regex.Matcher);
+    field public static final java.util.regex.Pattern DOMAIN_NAME;
+    field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+    field @Deprecated public static final String GOOD_IRI_CHAR = "a-zA-Z0-9\u00a0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef";
+    field @Deprecated public static final java.util.regex.Pattern IP_ADDRESS;
+    field public static final java.util.regex.Pattern PHONE;
+    field @Deprecated public static final java.util.regex.Pattern TOP_LEVEL_DOMAIN;
+    field @Deprecated public static final String TOP_LEVEL_DOMAIN_STR = "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(biz|b[abdefghijmnorstvwyz])|(cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(edu|e[cegrstu])|f[ijkmor]|(gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(info|int|i[delmnoqrst])|(jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(name|net|n[acefgilopruz])|(org|om)|(pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw])";
+    field @Deprecated public static final String TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL = "(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw]))";
+    field public static final java.util.regex.Pattern WEB_URL;
+  }
+
+  public class PrintStreamPrinter implements android.util.Printer {
+    ctor public PrintStreamPrinter(java.io.PrintStream);
+    method public void println(String);
+  }
+
+  public class PrintWriterPrinter implements android.util.Printer {
+    ctor public PrintWriterPrinter(java.io.PrintWriter);
+    method public void println(String);
+  }
+
+  public interface Printer {
+    method public void println(String);
+  }
+
+  public abstract class Property<T, V> {
+    ctor public Property(Class<V>, String);
+    method public abstract V get(T);
+    method public String getName();
+    method public Class<V> getType();
+    method public boolean isReadOnly();
+    method public static <T, V> android.util.Property<T,V> of(Class<T>, Class<V>, String);
+    method public void set(T, V);
+  }
+
+  public final class Range<T extends java.lang.Comparable<? super T>> {
+    ctor public Range(T, T);
+    method public T clamp(T);
+    method public boolean contains(T);
+    method public boolean contains(android.util.Range<T>);
+    method public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> create(T, T);
+    method public android.util.Range<T> extend(android.util.Range<T>);
+    method public android.util.Range<T> extend(T, T);
+    method public android.util.Range<T> extend(T);
+    method public T getLower();
+    method public T getUpper();
+    method public android.util.Range<T> intersect(android.util.Range<T>);
+    method public android.util.Range<T> intersect(T, T);
+  }
+
+  public final class Rational extends java.lang.Number implements java.lang.Comparable<android.util.Rational> {
+    ctor public Rational(int, int);
+    method public int compareTo(android.util.Rational);
+    method public double doubleValue();
+    method public float floatValue();
+    method public int getDenominator();
+    method public int getNumerator();
+    method public int intValue();
+    method public boolean isFinite();
+    method public boolean isInfinite();
+    method public boolean isNaN();
+    method public boolean isZero();
+    method public long longValue();
+    method public static android.util.Rational parseRational(String) throws java.lang.NumberFormatException;
+    field public static final android.util.Rational NEGATIVE_INFINITY;
+    field public static final android.util.Rational NaN;
+    field public static final android.util.Rational POSITIVE_INFINITY;
+    field public static final android.util.Rational ZERO;
+  }
+
+  public final class Size {
+    ctor public Size(int, int);
+    method public int getHeight();
+    method public int getWidth();
+    method public static android.util.Size parseSize(String) throws java.lang.NumberFormatException;
+  }
+
+  public final class SizeF implements android.os.Parcelable {
+    ctor public SizeF(float, float);
+    method public int describeContents();
+    method public float getHeight();
+    method public float getWidth();
+    method public static android.util.SizeF parseSizeF(String) throws java.lang.NumberFormatException;
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.util.SizeF> CREATOR;
+  }
+
+  public class SparseArray<E> implements java.lang.Cloneable {
+    ctor public SparseArray();
+    ctor public SparseArray(int);
+    method public void append(int, E);
+    method public void clear();
+    method public android.util.SparseArray<E> clone();
+    method public boolean contains(int);
+    method public boolean contentEquals(@Nullable android.util.SparseArray<?>);
+    method public int contentHashCode();
+    method public void delete(int);
+    method public E get(int);
+    method public E get(int, E);
+    method public int indexOfKey(int);
+    method public int indexOfValue(E);
+    method public int keyAt(int);
+    method public void put(int, E);
+    method public void remove(int);
+    method public void removeAt(int);
+    method public void removeAtRange(int, int);
+    method public void set(int, E);
+    method public void setValueAt(int, E);
+    method public int size();
+    method public E valueAt(int);
+  }
+
+  public class SparseBooleanArray implements java.lang.Cloneable {
+    ctor public SparseBooleanArray();
+    ctor public SparseBooleanArray(int);
+    method public void append(int, boolean);
+    method public void clear();
+    method public android.util.SparseBooleanArray clone();
+    method public void delete(int);
+    method public boolean get(int);
+    method public boolean get(int, boolean);
+    method public int indexOfKey(int);
+    method public int indexOfValue(boolean);
+    method public int keyAt(int);
+    method public void put(int, boolean);
+    method public void removeAt(int);
+    method public void setValueAt(int, boolean);
+    method public int size();
+    method public boolean valueAt(int);
+  }
+
+  public class SparseIntArray implements java.lang.Cloneable {
+    ctor public SparseIntArray();
+    ctor public SparseIntArray(int);
+    method public void append(int, int);
+    method public void clear();
+    method public android.util.SparseIntArray clone();
+    method public void delete(int);
+    method public int get(int);
+    method public int get(int, int);
+    method public int indexOfKey(int);
+    method public int indexOfValue(int);
+    method public int keyAt(int);
+    method public void put(int, int);
+    method public void removeAt(int);
+    method public void setValueAt(int, int);
+    method public int size();
+    method public int valueAt(int);
+  }
+
+  public class SparseLongArray implements java.lang.Cloneable {
+    ctor public SparseLongArray();
+    ctor public SparseLongArray(int);
+    method public void append(int, long);
+    method public void clear();
+    method public android.util.SparseLongArray clone();
+    method public void delete(int);
+    method public long get(int);
+    method public long get(int, long);
+    method public int indexOfKey(int);
+    method public int indexOfValue(long);
+    method public int keyAt(int);
+    method public void put(int, long);
+    method public void removeAt(int);
+    method public int size();
+    method public long valueAt(int);
+  }
+
+  public class StateSet {
+    method public static String dump(int[]);
+    method public static boolean isWildCard(int[]);
+    method public static boolean stateSetMatches(int[], int[]);
+    method public static boolean stateSetMatches(int[], int);
+    method public static int[] trimStateSet(int[], int);
+    field public static final int[] NOTHING;
+    field public static final int[] WILD_CARD;
+  }
+
+  public class StringBuilderPrinter implements android.util.Printer {
+    ctor public StringBuilderPrinter(StringBuilder);
+    method public void println(String);
+  }
+
+  public class TimeFormatException extends java.lang.RuntimeException {
+  }
+
+  public class TimeUtils {
+    method public static java.util.TimeZone getTimeZone(int, boolean, long, String);
+    method public static String getTimeZoneDatabaseVersion();
+    method @Nullable public static java.util.List<java.lang.String> getTimeZoneIdsForCountryCode(@NonNull String);
+    method public static boolean isTimeBetween(@NonNull java.time.LocalTime, @NonNull java.time.LocalTime, @NonNull java.time.LocalTime);
+  }
+
+  @Deprecated public class TimingLogger {
+    ctor @Deprecated public TimingLogger(String, String);
+    method @Deprecated public void addSplit(String);
+    method @Deprecated public void dumpToLog();
+    method @Deprecated public void reset(String, String);
+    method @Deprecated public void reset();
+  }
+
+  public class TypedValue {
+    ctor public TypedValue();
+    method public static float applyDimension(int, float, android.util.DisplayMetrics);
+    method public final CharSequence coerceToString();
+    method public static final String coerceToString(int, int);
+    method public static float complexToDimension(int, android.util.DisplayMetrics);
+    method public static int complexToDimensionPixelOffset(int, android.util.DisplayMetrics);
+    method public static int complexToDimensionPixelSize(int, android.util.DisplayMetrics);
+    method public static float complexToFloat(int);
+    method public static float complexToFraction(int, float, float);
+    method public int getComplexUnit();
+    method public float getDimension(android.util.DisplayMetrics);
+    method public final float getFloat();
+    method public float getFraction(float, float);
+    method public boolean isColorType();
+    method public void setTo(android.util.TypedValue);
+    field public static final int COMPLEX_MANTISSA_MASK = 16777215; // 0xffffff
+    field public static final int COMPLEX_MANTISSA_SHIFT = 8; // 0x8
+    field public static final int COMPLEX_RADIX_0p23 = 3; // 0x3
+    field public static final int COMPLEX_RADIX_16p7 = 1; // 0x1
+    field public static final int COMPLEX_RADIX_23p0 = 0; // 0x0
+    field public static final int COMPLEX_RADIX_8p15 = 2; // 0x2
+    field public static final int COMPLEX_RADIX_MASK = 3; // 0x3
+    field public static final int COMPLEX_RADIX_SHIFT = 4; // 0x4
+    field public static final int COMPLEX_UNIT_DIP = 1; // 0x1
+    field public static final int COMPLEX_UNIT_FRACTION = 0; // 0x0
+    field public static final int COMPLEX_UNIT_FRACTION_PARENT = 1; // 0x1
+    field public static final int COMPLEX_UNIT_IN = 4; // 0x4
+    field public static final int COMPLEX_UNIT_MASK = 15; // 0xf
+    field public static final int COMPLEX_UNIT_MM = 5; // 0x5
+    field public static final int COMPLEX_UNIT_PT = 3; // 0x3
+    field public static final int COMPLEX_UNIT_PX = 0; // 0x0
+    field public static final int COMPLEX_UNIT_SHIFT = 0; // 0x0
+    field public static final int COMPLEX_UNIT_SP = 2; // 0x2
+    field public static final int DATA_NULL_EMPTY = 1; // 0x1
+    field public static final int DATA_NULL_UNDEFINED = 0; // 0x0
+    field public static final int DENSITY_DEFAULT = 0; // 0x0
+    field public static final int DENSITY_NONE = 65535; // 0xffff
+    field public static final int TYPE_ATTRIBUTE = 2; // 0x2
+    field public static final int TYPE_DIMENSION = 5; // 0x5
+    field public static final int TYPE_FIRST_COLOR_INT = 28; // 0x1c
+    field public static final int TYPE_FIRST_INT = 16; // 0x10
+    field public static final int TYPE_FLOAT = 4; // 0x4
+    field public static final int TYPE_FRACTION = 6; // 0x6
+    field public static final int TYPE_INT_BOOLEAN = 18; // 0x12
+    field public static final int TYPE_INT_COLOR_ARGB4 = 30; // 0x1e
+    field public static final int TYPE_INT_COLOR_ARGB8 = 28; // 0x1c
+    field public static final int TYPE_INT_COLOR_RGB4 = 31; // 0x1f
+    field public static final int TYPE_INT_COLOR_RGB8 = 29; // 0x1d
+    field public static final int TYPE_INT_DEC = 16; // 0x10
+    field public static final int TYPE_INT_HEX = 17; // 0x11
+    field public static final int TYPE_LAST_COLOR_INT = 31; // 0x1f
+    field public static final int TYPE_LAST_INT = 31; // 0x1f
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_REFERENCE = 1; // 0x1
+    field public static final int TYPE_STRING = 3; // 0x3
+    field public int assetCookie;
+    field public int changingConfigurations;
+    field public int data;
+    field public int density;
+    field @AnyRes public int resourceId;
+    field public int sourceResourceId;
+    field public CharSequence string;
+    field public int type;
+  }
+
+  public class Xml {
+    method public static android.util.AttributeSet asAttributeSet(org.xmlpull.v1.XmlPullParser);
+    method public static android.util.Xml.Encoding findEncodingByName(String) throws java.io.UnsupportedEncodingException;
+    method public static org.xmlpull.v1.XmlPullParser newPullParser();
+    method public static org.xmlpull.v1.XmlSerializer newSerializer();
+    method public static void parse(String, org.xml.sax.ContentHandler) throws org.xml.sax.SAXException;
+    method public static void parse(java.io.Reader, org.xml.sax.ContentHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public static void parse(java.io.InputStream, android.util.Xml.Encoding, org.xml.sax.ContentHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    field public static String FEATURE_RELAXED;
+  }
+
+  public enum Xml.Encoding {
+    enum_constant public static final android.util.Xml.Encoding ISO_8859_1;
+    enum_constant public static final android.util.Xml.Encoding US_ASCII;
+    enum_constant public static final android.util.Xml.Encoding UTF_16;
+    enum_constant public static final android.util.Xml.Encoding UTF_8;
+  }
+
+}
+
+package android.util.proto {
+
+  public final class ProtoOutputStream {
+    ctor public ProtoOutputStream();
+    ctor public ProtoOutputStream(int);
+    ctor public ProtoOutputStream(@NonNull java.io.OutputStream);
+    method public static int checkFieldId(long, long);
+    method public void dump(@NonNull String);
+    method public void end(long);
+    method public void flush();
+    method @NonNull public byte[] getBytes();
+    method @Nullable public static String getFieldCountString(long);
+    method @NonNull public static String getFieldIdString(long);
+    method @Nullable public static String getFieldTypeString(long);
+    method public int getRawSize();
+    method @Nullable public static String getWireTypeString(int);
+    method public static long makeFieldId(int, long);
+    method public static long makeToken(int, boolean, int, int, int);
+    method public long start(long);
+    method @NonNull public static String token2String(long);
+    method public void write(long, double);
+    method public void write(long, float);
+    method public void write(long, int);
+    method public void write(long, long);
+    method public void write(long, boolean);
+    method public void write(long, @Nullable String);
+    method public void write(long, @Nullable byte[]);
+    method public void writeTag(int, int);
+    field public static final long FIELD_COUNT_MASK = 16492674416640L; // 0xf0000000000L
+    field public static final long FIELD_COUNT_PACKED = 5497558138880L; // 0x50000000000L
+    field public static final long FIELD_COUNT_REPEATED = 2199023255552L; // 0x20000000000L
+    field public static final int FIELD_COUNT_SHIFT = 40; // 0x28
+    field public static final long FIELD_COUNT_SINGLE = 1099511627776L; // 0x10000000000L
+    field public static final long FIELD_COUNT_UNKNOWN = 0L; // 0x0L
+    field public static final int FIELD_ID_SHIFT = 3; // 0x3
+    field public static final long FIELD_TYPE_BOOL = 34359738368L; // 0x800000000L
+    field public static final long FIELD_TYPE_BYTES = 51539607552L; // 0xc00000000L
+    field public static final long FIELD_TYPE_DOUBLE = 4294967296L; // 0x100000000L
+    field public static final long FIELD_TYPE_ENUM = 60129542144L; // 0xe00000000L
+    field public static final long FIELD_TYPE_FIXED32 = 30064771072L; // 0x700000000L
+    field public static final long FIELD_TYPE_FIXED64 = 25769803776L; // 0x600000000L
+    field public static final long FIELD_TYPE_FLOAT = 8589934592L; // 0x200000000L
+    field public static final long FIELD_TYPE_INT32 = 21474836480L; // 0x500000000L
+    field public static final long FIELD_TYPE_INT64 = 12884901888L; // 0x300000000L
+    field public static final long FIELD_TYPE_MASK = 1095216660480L; // 0xff00000000L
+    field public static final long FIELD_TYPE_MESSAGE = 47244640256L; // 0xb00000000L
+    field public static final long FIELD_TYPE_SFIXED32 = 64424509440L; // 0xf00000000L
+    field public static final long FIELD_TYPE_SFIXED64 = 68719476736L; // 0x1000000000L
+    field public static final int FIELD_TYPE_SHIFT = 32; // 0x20
+    field public static final long FIELD_TYPE_SINT32 = 73014444032L; // 0x1100000000L
+    field public static final long FIELD_TYPE_SINT64 = 77309411328L; // 0x1200000000L
+    field public static final long FIELD_TYPE_STRING = 38654705664L; // 0x900000000L
+    field public static final long FIELD_TYPE_UINT32 = 55834574848L; // 0xd00000000L
+    field public static final long FIELD_TYPE_UINT64 = 17179869184L; // 0x400000000L
+    field public static final int WIRE_TYPE_END_GROUP = 4; // 0x4
+    field public static final int WIRE_TYPE_FIXED32 = 5; // 0x5
+    field public static final int WIRE_TYPE_FIXED64 = 1; // 0x1
+    field public static final int WIRE_TYPE_LENGTH_DELIMITED = 2; // 0x2
+    field public static final int WIRE_TYPE_MASK = 7; // 0x7
+    field public static final int WIRE_TYPE_START_GROUP = 3; // 0x3
+    field public static final int WIRE_TYPE_VARINT = 0; // 0x0
+  }
+
+}
+
+package android.view {
+
+  public abstract class AbsSavedState implements android.os.Parcelable {
+    ctor protected AbsSavedState(android.os.Parcelable);
+    ctor protected AbsSavedState(android.os.Parcel);
+    ctor protected AbsSavedState(android.os.Parcel, ClassLoader);
+    method public int describeContents();
+    method public final android.os.Parcelable getSuperState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.AbsSavedState> CREATOR;
+    field public static final android.view.AbsSavedState EMPTY_STATE;
+  }
+
+  public abstract class ActionMode {
+    ctor public ActionMode();
+    method public abstract void finish();
+    method public abstract android.view.View getCustomView();
+    method public abstract android.view.Menu getMenu();
+    method public abstract android.view.MenuInflater getMenuInflater();
+    method public abstract CharSequence getSubtitle();
+    method public Object getTag();
+    method public abstract CharSequence getTitle();
+    method public boolean getTitleOptionalHint();
+    method public int getType();
+    method public void hide(long);
+    method public abstract void invalidate();
+    method public void invalidateContentRect();
+    method public boolean isTitleOptional();
+    method public void onWindowFocusChanged(boolean);
+    method public abstract void setCustomView(android.view.View);
+    method public abstract void setSubtitle(CharSequence);
+    method public abstract void setSubtitle(@StringRes int);
+    method public void setTag(Object);
+    method public abstract void setTitle(CharSequence);
+    method public abstract void setTitle(@StringRes int);
+    method public void setTitleOptionalHint(boolean);
+    method public void setType(int);
+    field public static final int DEFAULT_HIDE_DURATION = -1; // 0xffffffff
+    field public static final int TYPE_FLOATING = 1; // 0x1
+    field public static final int TYPE_PRIMARY = 0; // 0x0
+  }
+
+  public static interface ActionMode.Callback {
+    method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem);
+    method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onDestroyActionMode(android.view.ActionMode);
+    method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
+  }
+
+  public abstract static class ActionMode.Callback2 implements android.view.ActionMode.Callback {
+    ctor public ActionMode.Callback2();
+    method public void onGetContentRect(android.view.ActionMode, android.view.View, android.graphics.Rect);
+  }
+
+  public abstract class ActionProvider {
+    ctor public ActionProvider(android.content.Context);
+    method public boolean hasSubMenu();
+    method public boolean isVisible();
+    method @Deprecated public abstract android.view.View onCreateActionView();
+    method public android.view.View onCreateActionView(android.view.MenuItem);
+    method public boolean onPerformDefaultAction();
+    method public void onPrepareSubMenu(android.view.SubMenu);
+    method public boolean overridesItemVisibility();
+    method public void refreshVisibility();
+    method public void setVisibilityListener(android.view.ActionProvider.VisibilityListener);
+  }
+
+  public static interface ActionProvider.VisibilityListener {
+    method public void onActionProviderVisibilityChanged(boolean);
+  }
+
+  @UiThread public interface AttachedSurfaceControl {
+    method public default void addOnBufferTransformHintChangedListener(@NonNull android.view.AttachedSurfaceControl.OnBufferTransformHintChangedListener);
+    method public boolean applyTransactionOnDraw(@NonNull android.view.SurfaceControl.Transaction);
+    method @Nullable public android.view.SurfaceControl.Transaction buildReparentTransaction(@NonNull android.view.SurfaceControl);
+    method public default int getBufferTransformHint();
+    method public default void removeOnBufferTransformHintChangedListener(@NonNull android.view.AttachedSurfaceControl.OnBufferTransformHintChangedListener);
+  }
+
+  @UiThread public static interface AttachedSurfaceControl.OnBufferTransformHintChangedListener {
+    method public void onBufferTransformHintChanged(int);
+  }
+
+  public final class Choreographer {
+    method public static android.view.Choreographer getInstance();
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback);
+    method public void postFrameCallbackDelayed(android.view.Choreographer.FrameCallback, long);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback);
+  }
+
+  public static interface Choreographer.FrameCallback {
+    method public void doFrame(long);
+  }
+
+  public interface CollapsibleActionView {
+    method public void onActionViewCollapsed();
+    method public void onActionViewExpanded();
+  }
+
+  public final class ContentInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.ClipData getClip();
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getFlags();
+    method @Nullable public android.net.Uri getLinkUri();
+    method public int getSource();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.ContentInfo> CREATOR;
+    field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
+    field public static final int SOURCE_APP = 0; // 0x0
+    field public static final int SOURCE_AUTOFILL = 4; // 0x4
+    field public static final int SOURCE_CLIPBOARD = 1; // 0x1
+    field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
+    field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
+    field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
+  }
+
+  public static final class ContentInfo.Builder {
+    ctor public ContentInfo.Builder(@NonNull android.view.ContentInfo);
+    ctor public ContentInfo.Builder(@NonNull android.content.ClipData, int);
+    method @NonNull public android.view.ContentInfo build();
+    method @NonNull public android.view.ContentInfo.Builder setClip(@NonNull android.content.ClipData);
+    method @NonNull public android.view.ContentInfo.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.ContentInfo.Builder setFlags(int);
+    method @NonNull public android.view.ContentInfo.Builder setLinkUri(@Nullable android.net.Uri);
+    method @NonNull public android.view.ContentInfo.Builder setSource(int);
+  }
+
+  public interface ContextMenu extends android.view.Menu {
+    method public void clearHeader();
+    method public android.view.ContextMenu setHeaderIcon(@DrawableRes int);
+    method public android.view.ContextMenu setHeaderIcon(android.graphics.drawable.Drawable);
+    method public android.view.ContextMenu setHeaderTitle(@StringRes int);
+    method public android.view.ContextMenu setHeaderTitle(CharSequence);
+    method public android.view.ContextMenu setHeaderView(android.view.View);
+  }
+
+  public static interface ContextMenu.ContextMenuInfo {
+  }
+
+  public class ContextThemeWrapper extends android.content.ContextWrapper {
+    ctor public ContextThemeWrapper();
+    ctor public ContextThemeWrapper(android.content.Context, @StyleRes int);
+    ctor public ContextThemeWrapper(android.content.Context, android.content.res.Resources.Theme);
+    method public void applyOverrideConfiguration(android.content.res.Configuration);
+    method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean);
+    method public void setTheme(@Nullable android.content.res.Resources.Theme);
+  }
+
+  public final class Display {
+    method public long getAppVsyncOffsetNanos();
+    method public void getCurrentSizeRange(android.graphics.Point, android.graphics.Point);
+    method @Nullable public android.view.DisplayCutout getCutout();
+    method @Nullable public android.hardware.display.DeviceProductInfo getDeviceProductInfo();
+    method public int getDisplayId();
+    method public int getFlags();
+    method public android.view.Display.HdrCapabilities getHdrCapabilities();
+    method @Deprecated public int getHeight();
+    method @Deprecated public void getMetrics(android.util.DisplayMetrics);
+    method public android.view.Display.Mode getMode();
+    method public String getName();
+    method @Deprecated public int getOrientation();
+    method @Deprecated public int getPixelFormat();
+    method @Nullable public android.graphics.ColorSpace getPreferredWideGamutColorSpace();
+    method public long getPresentationDeadlineNanos();
+    method @Deprecated public void getRealMetrics(android.util.DisplayMetrics);
+    method @Deprecated public void getRealSize(android.graphics.Point);
+    method @Deprecated public void getRectSize(android.graphics.Rect);
+    method public float getRefreshRate();
+    method public int getRotation();
+    method @Nullable public android.view.RoundedCorner getRoundedCorner(int);
+    method @Deprecated public void getSize(android.graphics.Point);
+    method public int getState();
+    method public android.view.Display.Mode[] getSupportedModes();
+    method @Deprecated public float[] getSupportedRefreshRates();
+    method @Deprecated public int getWidth();
+    method public boolean isHdr();
+    method public boolean isMinimalPostProcessingSupported();
+    method public boolean isValid();
+    method public boolean isWideColorGamut();
+    field public static final int DEFAULT_DISPLAY = 0; // 0x0
+    field public static final int FLAG_PRESENTATION = 8; // 0x8
+    field public static final int FLAG_PRIVATE = 4; // 0x4
+    field public static final int FLAG_ROUND = 16; // 0x10
+    field public static final int FLAG_SECURE = 2; // 0x2
+    field public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1; // 0x1
+    field public static final int INVALID_DISPLAY = -1; // 0xffffffff
+    field public static final int STATE_DOZE = 3; // 0x3
+    field public static final int STATE_DOZE_SUSPEND = 4; // 0x4
+    field public static final int STATE_OFF = 1; // 0x1
+    field public static final int STATE_ON = 2; // 0x2
+    field public static final int STATE_ON_SUSPEND = 6; // 0x6
+    field public static final int STATE_UNKNOWN = 0; // 0x0
+    field public static final int STATE_VR = 5; // 0x5
+  }
+
+  public static final class Display.HdrCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getDesiredMaxAverageLuminance();
+    method public float getDesiredMaxLuminance();
+    method public float getDesiredMinLuminance();
+    method public int[] getSupportedHdrTypes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.Display.HdrCapabilities> CREATOR;
+    field public static final int HDR_TYPE_DOLBY_VISION = 1; // 0x1
+    field public static final int HDR_TYPE_HDR10 = 2; // 0x2
+    field public static final int HDR_TYPE_HDR10_PLUS = 4; // 0x4
+    field public static final int HDR_TYPE_HLG = 3; // 0x3
+    field public static final float INVALID_LUMINANCE = -1.0f;
+  }
+
+  public static final class Display.Mode implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public float[] getAlternativeRefreshRates();
+    method public int getModeId();
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public float getRefreshRate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
+  }
+
+  public final class DisplayCutout {
+    ctor public DisplayCutout(@NonNull android.graphics.Insets, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect);
+    ctor public DisplayCutout(@NonNull android.graphics.Insets, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @NonNull android.graphics.Insets);
+    ctor @Deprecated public DisplayCutout(@Nullable android.graphics.Rect, @Nullable java.util.List<android.graphics.Rect>);
+    method @NonNull public android.graphics.Rect getBoundingRectBottom();
+    method @NonNull public android.graphics.Rect getBoundingRectLeft();
+    method @NonNull public android.graphics.Rect getBoundingRectRight();
+    method @NonNull public android.graphics.Rect getBoundingRectTop();
+    method @NonNull public java.util.List<android.graphics.Rect> getBoundingRects();
+    method @Nullable public android.graphics.Path getCutoutPath();
+    method public int getSafeInsetBottom();
+    method public int getSafeInsetLeft();
+    method public int getSafeInsetRight();
+    method public int getSafeInsetTop();
+    method @NonNull public android.graphics.Insets getWaterfallInsets();
+  }
+
+  public final class DragAndDropPermissions implements android.os.Parcelable {
+    method public int describeContents();
+    method public void release();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
+  }
+
+  public class DragEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAction();
+    method public android.content.ClipData getClipData();
+    method public android.content.ClipDescription getClipDescription();
+    method public Object getLocalState();
+    method public boolean getResult();
+    method public float getX();
+    method public float getY();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_DRAG_ENDED = 4; // 0x4
+    field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
+    field public static final int ACTION_DRAG_EXITED = 6; // 0x6
+    field public static final int ACTION_DRAG_LOCATION = 2; // 0x2
+    field public static final int ACTION_DRAG_STARTED = 1; // 0x1
+    field public static final int ACTION_DROP = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.DragEvent> CREATOR;
+  }
+
+  public class FocusFinder {
+    method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
+    method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
+    method public android.view.View findNextFocusFromRect(android.view.ViewGroup, android.graphics.Rect, int);
+    method public android.view.View findNextKeyboardNavigationCluster(@NonNull android.view.View, @Nullable android.view.View, int);
+    method public static android.view.FocusFinder getInstance();
+  }
+
+  public final class FrameMetrics {
+    ctor public FrameMetrics(android.view.FrameMetrics);
+    method public long getMetric(int);
+    field public static final int ANIMATION_DURATION = 2; // 0x2
+    field public static final int COMMAND_ISSUE_DURATION = 6; // 0x6
+    field public static final int DEADLINE = 13; // 0xd
+    field public static final int DRAW_DURATION = 4; // 0x4
+    field public static final int FIRST_DRAW_FRAME = 9; // 0x9
+    field public static final int GPU_DURATION = 12; // 0xc
+    field public static final int INPUT_HANDLING_DURATION = 1; // 0x1
+    field public static final int INTENDED_VSYNC_TIMESTAMP = 10; // 0xa
+    field public static final int LAYOUT_MEASURE_DURATION = 3; // 0x3
+    field public static final int SWAP_BUFFERS_DURATION = 7; // 0x7
+    field public static final int SYNC_DURATION = 5; // 0x5
+    field public static final int TOTAL_DURATION = 8; // 0x8
+    field public static final int UNKNOWN_DELAY_DURATION = 0; // 0x0
+    field public static final int VSYNC_TIMESTAMP = 11; // 0xb
+  }
+
+  public abstract class FrameStats {
+    ctor public FrameStats();
+    method public final long getEndTimeNano();
+    method public final int getFrameCount();
+    method public final long getFramePresentedTimeNano(int);
+    method public final long getRefreshPeriodNano();
+    method public final long getStartTimeNano();
+    field public static final long UNDEFINED_TIME_NANO = -1L; // 0xffffffffffffffffL
+  }
+
+  public class GestureDetector {
+    ctor @Deprecated public GestureDetector(android.view.GestureDetector.OnGestureListener, android.os.Handler);
+    ctor @Deprecated public GestureDetector(android.view.GestureDetector.OnGestureListener);
+    ctor public GestureDetector(@UiContext android.content.Context, android.view.GestureDetector.OnGestureListener);
+    ctor public GestureDetector(@UiContext android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler);
+    ctor public GestureDetector(@UiContext android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler, boolean);
+    method public boolean isLongpressEnabled();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public void setContextClickListener(android.view.GestureDetector.OnContextClickListener);
+    method public void setIsLongpressEnabled(boolean);
+    method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener);
+  }
+
+  public static interface GestureDetector.OnContextClickListener {
+    method public boolean onContextClick(android.view.MotionEvent);
+  }
+
+  public static interface GestureDetector.OnDoubleTapListener {
+    method public boolean onDoubleTap(android.view.MotionEvent);
+    method public boolean onDoubleTapEvent(android.view.MotionEvent);
+    method public boolean onSingleTapConfirmed(android.view.MotionEvent);
+  }
+
+  public static interface GestureDetector.OnGestureListener {
+    method public boolean onDown(android.view.MotionEvent);
+    method public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onLongPress(android.view.MotionEvent);
+    method public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onShowPress(android.view.MotionEvent);
+    method public boolean onSingleTapUp(android.view.MotionEvent);
+  }
+
+  public static class GestureDetector.SimpleOnGestureListener implements android.view.GestureDetector.OnContextClickListener android.view.GestureDetector.OnDoubleTapListener android.view.GestureDetector.OnGestureListener {
+    ctor public GestureDetector.SimpleOnGestureListener();
+    method public boolean onContextClick(android.view.MotionEvent);
+    method public boolean onDoubleTap(android.view.MotionEvent);
+    method public boolean onDoubleTapEvent(android.view.MotionEvent);
+    method public boolean onDown(android.view.MotionEvent);
+    method public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onLongPress(android.view.MotionEvent);
+    method public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onShowPress(android.view.MotionEvent);
+    method public boolean onSingleTapConfirmed(android.view.MotionEvent);
+    method public boolean onSingleTapUp(android.view.MotionEvent);
+  }
+
+  public class Gravity {
+    ctor public Gravity();
+    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect);
+    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect);
+    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect);
+    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+    method public static int getAbsoluteGravity(int, int);
+    method public static boolean isHorizontal(int);
+    method public static boolean isVertical(int);
+    field public static final int AXIS_CLIP = 8; // 0x8
+    field public static final int AXIS_PULL_AFTER = 4; // 0x4
+    field public static final int AXIS_PULL_BEFORE = 2; // 0x2
+    field public static final int AXIS_SPECIFIED = 1; // 0x1
+    field public static final int AXIS_X_SHIFT = 0; // 0x0
+    field public static final int AXIS_Y_SHIFT = 4; // 0x4
+    field public static final int BOTTOM = 80; // 0x50
+    field public static final int CENTER = 17; // 0x11
+    field public static final int CENTER_HORIZONTAL = 1; // 0x1
+    field public static final int CENTER_VERTICAL = 16; // 0x10
+    field public static final int CLIP_HORIZONTAL = 8; // 0x8
+    field public static final int CLIP_VERTICAL = 128; // 0x80
+    field public static final int DISPLAY_CLIP_HORIZONTAL = 16777216; // 0x1000000
+    field public static final int DISPLAY_CLIP_VERTICAL = 268435456; // 0x10000000
+    field public static final int END = 8388613; // 0x800005
+    field public static final int FILL = 119; // 0x77
+    field public static final int FILL_HORIZONTAL = 7; // 0x7
+    field public static final int FILL_VERTICAL = 112; // 0x70
+    field public static final int HORIZONTAL_GRAVITY_MASK = 7; // 0x7
+    field public static final int LEFT = 3; // 0x3
+    field public static final int NO_GRAVITY = 0; // 0x0
+    field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+    field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+    field public static final int RIGHT = 5; // 0x5
+    field public static final int START = 8388611; // 0x800003
+    field public static final int TOP = 48; // 0x30
+    field public static final int VERTICAL_GRAVITY_MASK = 112; // 0x70
+  }
+
+  public class HapticFeedbackConstants {
+    field public static final int CLOCK_TICK = 4; // 0x4
+    field public static final int CONFIRM = 16; // 0x10
+    field public static final int CONTEXT_CLICK = 6; // 0x6
+    field public static final int FLAG_IGNORE_GLOBAL_SETTING = 2; // 0x2
+    field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
+    field public static final int GESTURE_END = 13; // 0xd
+    field public static final int GESTURE_START = 12; // 0xc
+    field public static final int KEYBOARD_PRESS = 3; // 0x3
+    field public static final int KEYBOARD_RELEASE = 7; // 0x7
+    field public static final int KEYBOARD_TAP = 3; // 0x3
+    field public static final int LONG_PRESS = 0; // 0x0
+    field public static final int REJECT = 17; // 0x11
+    field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
+    field public static final int VIRTUAL_KEY = 1; // 0x1
+    field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
+  }
+
+  public class InflateException extends java.lang.RuntimeException {
+    ctor public InflateException();
+    ctor public InflateException(String, Throwable);
+    ctor public InflateException(String);
+    ctor public InflateException(Throwable);
+  }
+
+  public final class InputDevice implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.hardware.BatteryState getBatteryState();
+    method public int getControllerNumber();
+    method public String getDescriptor();
+    method public static android.view.InputDevice getDevice(int);
+    method public static int[] getDeviceIds();
+    method public int getId();
+    method public android.view.KeyCharacterMap getKeyCharacterMap();
+    method public int getKeyboardType();
+    method @NonNull public android.hardware.lights.LightsManager getLightsManager();
+    method public android.view.InputDevice.MotionRange getMotionRange(int);
+    method public android.view.InputDevice.MotionRange getMotionRange(int, int);
+    method public java.util.List<android.view.InputDevice.MotionRange> getMotionRanges();
+    method public String getName();
+    method public int getProductId();
+    method @NonNull public android.hardware.SensorManager getSensorManager();
+    method public int getSources();
+    method public int getVendorId();
+    method @Deprecated public android.os.Vibrator getVibrator();
+    method @NonNull public android.os.VibratorManager getVibratorManager();
+    method public boolean[] hasKeys(int...);
+    method public boolean hasMicrophone();
+    method public boolean isEnabled();
+    method public boolean isExternal();
+    method public boolean isVirtual();
+    method public boolean supportsSource(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.InputDevice> CREATOR;
+    field public static final int KEYBOARD_TYPE_ALPHABETIC = 2; // 0x2
+    field public static final int KEYBOARD_TYPE_NONE = 0; // 0x0
+    field public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; // 0x1
+    field @Deprecated public static final int MOTION_RANGE_ORIENTATION = 8; // 0x8
+    field @Deprecated public static final int MOTION_RANGE_PRESSURE = 2; // 0x2
+    field @Deprecated public static final int MOTION_RANGE_SIZE = 3; // 0x3
+    field @Deprecated public static final int MOTION_RANGE_TOOL_MAJOR = 6; // 0x6
+    field @Deprecated public static final int MOTION_RANGE_TOOL_MINOR = 7; // 0x7
+    field @Deprecated public static final int MOTION_RANGE_TOUCH_MAJOR = 4; // 0x4
+    field @Deprecated public static final int MOTION_RANGE_TOUCH_MINOR = 5; // 0x5
+    field @Deprecated public static final int MOTION_RANGE_X = 0; // 0x0
+    field @Deprecated public static final int MOTION_RANGE_Y = 1; // 0x1
+    field public static final int SOURCE_ANY = -256; // 0xffffff00
+    field public static final int SOURCE_BLUETOOTH_STYLUS = 49154; // 0xc002
+    field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+    field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+    field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+    field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+    field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+    field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+    field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+    field public static final int SOURCE_DPAD = 513; // 0x201
+    field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+    field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+    field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+    field public static final int SOURCE_KEYBOARD = 257; // 0x101
+    field public static final int SOURCE_MOUSE = 8194; // 0x2002
+    field public static final int SOURCE_MOUSE_RELATIVE = 131076; // 0x20004
+    field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+    field public static final int SOURCE_SENSOR = 67108864; // 0x4000000
+    field public static final int SOURCE_STYLUS = 16386; // 0x4002
+    field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+    field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+    field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+    field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+    field public static final int SOURCE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class InputDevice.MotionRange {
+    method public int getAxis();
+    method public float getFlat();
+    method public float getFuzz();
+    method public float getMax();
+    method public float getMin();
+    method public float getRange();
+    method public float getResolution();
+    method public int getSource();
+    method public boolean isFromSource(int);
+  }
+
+  public abstract class InputEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public final android.view.InputDevice getDevice();
+    method public abstract int getDeviceId();
+    method public abstract long getEventTime();
+    method public abstract int getSource();
+    method public boolean isFromSource(int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.InputEvent> CREATOR;
+  }
+
+  public final class InputQueue {
+  }
+
+  public static interface InputQueue.Callback {
+    method public void onInputQueueCreated(android.view.InputQueue);
+    method public void onInputQueueDestroyed(android.view.InputQueue);
+  }
+
+  public class KeyCharacterMap implements android.os.Parcelable {
+    method public int describeContents();
+    method public static boolean deviceHasKey(int);
+    method public static boolean[] deviceHasKeys(int[]);
+    method public int get(int, int);
+    method public static int getDeadChar(int, int);
+    method public char getDisplayLabel(int);
+    method public android.view.KeyEvent[] getEvents(char[]);
+    method @Deprecated public boolean getKeyData(int, android.view.KeyCharacterMap.KeyData);
+    method public int getKeyboardType();
+    method public char getMatch(int, char[]);
+    method public char getMatch(int, char[], int);
+    method public int getModifierBehavior();
+    method public char getNumber(int);
+    method public boolean isPrintingKey(int);
+    method public static android.view.KeyCharacterMap load(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALPHA = 3; // 0x3
+    field @Deprecated public static final int BUILT_IN_KEYBOARD = 0; // 0x0
+    field public static final int COMBINING_ACCENT = -2147483648; // 0x80000000
+    field public static final int COMBINING_ACCENT_MASK = 2147483647; // 0x7fffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyCharacterMap> CREATOR;
+    field public static final int FULL = 4; // 0x4
+    field public static final char HEX_INPUT = 61184; // 0xef00 '\uef00'
+    field public static final int MODIFIER_BEHAVIOR_CHORDED = 0; // 0x0
+    field public static final int MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED = 1; // 0x1
+    field public static final int NUMERIC = 1; // 0x1
+    field public static final char PICKER_DIALOG_INPUT = 61185; // 0xef01 '\uef01'
+    field public static final int PREDICTIVE = 2; // 0x2
+    field public static final int SPECIAL_FUNCTION = 5; // 0x5
+    field public static final int VIRTUAL_KEYBOARD = -1; // 0xffffffff
+  }
+
+  @Deprecated public static class KeyCharacterMap.KeyData {
+    ctor @Deprecated public KeyCharacterMap.KeyData();
+    field @Deprecated public static final int META_LENGTH = 4; // 0x4
+    field @Deprecated public char displayLabel;
+    field @Deprecated public char[] meta;
+    field @Deprecated public char number;
+  }
+
+  public static class KeyCharacterMap.UnavailableException extends android.util.AndroidRuntimeException {
+    ctor public KeyCharacterMap.UnavailableException(String);
+  }
+
+  public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable {
+    ctor public KeyEvent(int, int);
+    ctor public KeyEvent(long, long, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int, int, int, int, int);
+    ctor public KeyEvent(long, String, int, int);
+    ctor public KeyEvent(android.view.KeyEvent);
+    ctor @Deprecated public KeyEvent(android.view.KeyEvent, long, int);
+    method public static android.view.KeyEvent changeAction(android.view.KeyEvent, int);
+    method public static android.view.KeyEvent changeFlags(android.view.KeyEvent, int);
+    method public static android.view.KeyEvent changeTimeRepeat(android.view.KeyEvent, long, int);
+    method public static android.view.KeyEvent changeTimeRepeat(android.view.KeyEvent, long, int, int);
+    method @Deprecated public final boolean dispatch(android.view.KeyEvent.Callback);
+    method public final boolean dispatch(android.view.KeyEvent.Callback, android.view.KeyEvent.DispatcherState, Object);
+    method public final int getAction();
+    method @Deprecated public final String getCharacters();
+    method public static int getDeadChar(int, int);
+    method public final int getDeviceId();
+    method public char getDisplayLabel();
+    method public final long getDownTime();
+    method public final long getEventTime();
+    method public final int getFlags();
+    method public final android.view.KeyCharacterMap getKeyCharacterMap();
+    method public final int getKeyCode();
+    method @Deprecated public boolean getKeyData(android.view.KeyCharacterMap.KeyData);
+    method public char getMatch(char[]);
+    method public char getMatch(char[], int);
+    method public static int getMaxKeyCode();
+    method public final int getMetaState();
+    method public static int getModifierMetaStateMask();
+    method public final int getModifiers();
+    method public char getNumber();
+    method public final int getRepeatCount();
+    method public final int getScanCode();
+    method public final int getSource();
+    method public int getUnicodeChar();
+    method public int getUnicodeChar(int);
+    method public final boolean hasModifiers(int);
+    method public final boolean hasNoModifiers();
+    method public final boolean isAltPressed();
+    method public final boolean isCanceled();
+    method public final boolean isCapsLockOn();
+    method public final boolean isCtrlPressed();
+    method public final boolean isFunctionPressed();
+    method public static final boolean isGamepadButton(int);
+    method public final boolean isLongPress();
+    method public static final boolean isMediaSessionKey(int);
+    method public final boolean isMetaPressed();
+    method public static boolean isModifierKey(int);
+    method public final boolean isNumLockOn();
+    method public boolean isPrintingKey();
+    method public final boolean isScrollLockOn();
+    method public final boolean isShiftPressed();
+    method public final boolean isSymPressed();
+    method public final boolean isSystem();
+    method public final boolean isTracking();
+    method public static int keyCodeFromString(@NonNull String);
+    method public static String keyCodeToString(int);
+    method public static boolean metaStateHasModifiers(int, int);
+    method public static boolean metaStateHasNoModifiers(int);
+    method public static int normalizeMetaState(int);
+    method public final void setSource(int);
+    method public final void startTracking();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_DOWN = 0; // 0x0
+    field @Deprecated public static final int ACTION_MULTIPLE = 2; // 0x2
+    field public static final int ACTION_UP = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyEvent> CREATOR;
+    field public static final int FLAG_CANCELED = 32; // 0x20
+    field public static final int FLAG_CANCELED_LONG_PRESS = 256; // 0x100
+    field public static final int FLAG_EDITOR_ACTION = 16; // 0x10
+    field public static final int FLAG_FALLBACK = 1024; // 0x400
+    field public static final int FLAG_FROM_SYSTEM = 8; // 0x8
+    field public static final int FLAG_KEEP_TOUCH_MODE = 4; // 0x4
+    field public static final int FLAG_LONG_PRESS = 128; // 0x80
+    field public static final int FLAG_SOFT_KEYBOARD = 2; // 0x2
+    field public static final int FLAG_TRACKING = 512; // 0x200
+    field public static final int FLAG_VIRTUAL_HARD_KEY = 64; // 0x40
+    field @Deprecated public static final int FLAG_WOKE_HERE = 1; // 0x1
+    field public static final int KEYCODE_0 = 7; // 0x7
+    field public static final int KEYCODE_1 = 8; // 0x8
+    field public static final int KEYCODE_11 = 227; // 0xe3
+    field public static final int KEYCODE_12 = 228; // 0xe4
+    field public static final int KEYCODE_2 = 9; // 0x9
+    field public static final int KEYCODE_3 = 10; // 0xa
+    field public static final int KEYCODE_3D_MODE = 206; // 0xce
+    field public static final int KEYCODE_4 = 11; // 0xb
+    field public static final int KEYCODE_5 = 12; // 0xc
+    field public static final int KEYCODE_6 = 13; // 0xd
+    field public static final int KEYCODE_7 = 14; // 0xe
+    field public static final int KEYCODE_8 = 15; // 0xf
+    field public static final int KEYCODE_9 = 16; // 0x10
+    field public static final int KEYCODE_A = 29; // 0x1d
+    field public static final int KEYCODE_ALL_APPS = 284; // 0x11c
+    field public static final int KEYCODE_ALT_LEFT = 57; // 0x39
+    field public static final int KEYCODE_ALT_RIGHT = 58; // 0x3a
+    field public static final int KEYCODE_APOSTROPHE = 75; // 0x4b
+    field public static final int KEYCODE_APP_SWITCH = 187; // 0xbb
+    field public static final int KEYCODE_ASSIST = 219; // 0xdb
+    field public static final int KEYCODE_AT = 77; // 0x4d
+    field public static final int KEYCODE_AVR_INPUT = 182; // 0xb6
+    field public static final int KEYCODE_AVR_POWER = 181; // 0xb5
+    field public static final int KEYCODE_B = 30; // 0x1e
+    field public static final int KEYCODE_BACK = 4; // 0x4
+    field public static final int KEYCODE_BACKSLASH = 73; // 0x49
+    field public static final int KEYCODE_BOOKMARK = 174; // 0xae
+    field public static final int KEYCODE_BREAK = 121; // 0x79
+    field public static final int KEYCODE_BRIGHTNESS_DOWN = 220; // 0xdc
+    field public static final int KEYCODE_BRIGHTNESS_UP = 221; // 0xdd
+    field public static final int KEYCODE_BUTTON_1 = 188; // 0xbc
+    field public static final int KEYCODE_BUTTON_10 = 197; // 0xc5
+    field public static final int KEYCODE_BUTTON_11 = 198; // 0xc6
+    field public static final int KEYCODE_BUTTON_12 = 199; // 0xc7
+    field public static final int KEYCODE_BUTTON_13 = 200; // 0xc8
+    field public static final int KEYCODE_BUTTON_14 = 201; // 0xc9
+    field public static final int KEYCODE_BUTTON_15 = 202; // 0xca
+    field public static final int KEYCODE_BUTTON_16 = 203; // 0xcb
+    field public static final int KEYCODE_BUTTON_2 = 189; // 0xbd
+    field public static final int KEYCODE_BUTTON_3 = 190; // 0xbe
+    field public static final int KEYCODE_BUTTON_4 = 191; // 0xbf
+    field public static final int KEYCODE_BUTTON_5 = 192; // 0xc0
+    field public static final int KEYCODE_BUTTON_6 = 193; // 0xc1
+    field public static final int KEYCODE_BUTTON_7 = 194; // 0xc2
+    field public static final int KEYCODE_BUTTON_8 = 195; // 0xc3
+    field public static final int KEYCODE_BUTTON_9 = 196; // 0xc4
+    field public static final int KEYCODE_BUTTON_A = 96; // 0x60
+    field public static final int KEYCODE_BUTTON_B = 97; // 0x61
+    field public static final int KEYCODE_BUTTON_C = 98; // 0x62
+    field public static final int KEYCODE_BUTTON_L1 = 102; // 0x66
+    field public static final int KEYCODE_BUTTON_L2 = 104; // 0x68
+    field public static final int KEYCODE_BUTTON_MODE = 110; // 0x6e
+    field public static final int KEYCODE_BUTTON_R1 = 103; // 0x67
+    field public static final int KEYCODE_BUTTON_R2 = 105; // 0x69
+    field public static final int KEYCODE_BUTTON_SELECT = 109; // 0x6d
+    field public static final int KEYCODE_BUTTON_START = 108; // 0x6c
+    field public static final int KEYCODE_BUTTON_THUMBL = 106; // 0x6a
+    field public static final int KEYCODE_BUTTON_THUMBR = 107; // 0x6b
+    field public static final int KEYCODE_BUTTON_X = 99; // 0x63
+    field public static final int KEYCODE_BUTTON_Y = 100; // 0x64
+    field public static final int KEYCODE_BUTTON_Z = 101; // 0x65
+    field public static final int KEYCODE_C = 31; // 0x1f
+    field public static final int KEYCODE_CALCULATOR = 210; // 0xd2
+    field public static final int KEYCODE_CALENDAR = 208; // 0xd0
+    field public static final int KEYCODE_CALL = 5; // 0x5
+    field public static final int KEYCODE_CAMERA = 27; // 0x1b
+    field public static final int KEYCODE_CAPS_LOCK = 115; // 0x73
+    field public static final int KEYCODE_CAPTIONS = 175; // 0xaf
+    field public static final int KEYCODE_CHANNEL_DOWN = 167; // 0xa7
+    field public static final int KEYCODE_CHANNEL_UP = 166; // 0xa6
+    field public static final int KEYCODE_CLEAR = 28; // 0x1c
+    field public static final int KEYCODE_COMMA = 55; // 0x37
+    field public static final int KEYCODE_CONTACTS = 207; // 0xcf
+    field public static final int KEYCODE_COPY = 278; // 0x116
+    field public static final int KEYCODE_CTRL_LEFT = 113; // 0x71
+    field public static final int KEYCODE_CTRL_RIGHT = 114; // 0x72
+    field public static final int KEYCODE_CUT = 277; // 0x115
+    field public static final int KEYCODE_D = 32; // 0x20
+    field public static final int KEYCODE_DEL = 67; // 0x43
+    field public static final int KEYCODE_DPAD_CENTER = 23; // 0x17
+    field public static final int KEYCODE_DPAD_DOWN = 20; // 0x14
+    field public static final int KEYCODE_DPAD_DOWN_LEFT = 269; // 0x10d
+    field public static final int KEYCODE_DPAD_DOWN_RIGHT = 271; // 0x10f
+    field public static final int KEYCODE_DPAD_LEFT = 21; // 0x15
+    field public static final int KEYCODE_DPAD_RIGHT = 22; // 0x16
+    field public static final int KEYCODE_DPAD_UP = 19; // 0x13
+    field public static final int KEYCODE_DPAD_UP_LEFT = 268; // 0x10c
+    field public static final int KEYCODE_DPAD_UP_RIGHT = 270; // 0x10e
+    field public static final int KEYCODE_DVR = 173; // 0xad
+    field public static final int KEYCODE_E = 33; // 0x21
+    field public static final int KEYCODE_EISU = 212; // 0xd4
+    field public static final int KEYCODE_ENDCALL = 6; // 0x6
+    field public static final int KEYCODE_ENTER = 66; // 0x42
+    field public static final int KEYCODE_ENVELOPE = 65; // 0x41
+    field public static final int KEYCODE_EQUALS = 70; // 0x46
+    field public static final int KEYCODE_ESCAPE = 111; // 0x6f
+    field public static final int KEYCODE_EXPLORER = 64; // 0x40
+    field public static final int KEYCODE_F = 34; // 0x22
+    field public static final int KEYCODE_F1 = 131; // 0x83
+    field public static final int KEYCODE_F10 = 140; // 0x8c
+    field public static final int KEYCODE_F11 = 141; // 0x8d
+    field public static final int KEYCODE_F12 = 142; // 0x8e
+    field public static final int KEYCODE_F2 = 132; // 0x84
+    field public static final int KEYCODE_F3 = 133; // 0x85
+    field public static final int KEYCODE_F4 = 134; // 0x86
+    field public static final int KEYCODE_F5 = 135; // 0x87
+    field public static final int KEYCODE_F6 = 136; // 0x88
+    field public static final int KEYCODE_F7 = 137; // 0x89
+    field public static final int KEYCODE_F8 = 138; // 0x8a
+    field public static final int KEYCODE_F9 = 139; // 0x8b
+    field public static final int KEYCODE_FOCUS = 80; // 0x50
+    field public static final int KEYCODE_FORWARD = 125; // 0x7d
+    field public static final int KEYCODE_FORWARD_DEL = 112; // 0x70
+    field public static final int KEYCODE_FUNCTION = 119; // 0x77
+    field public static final int KEYCODE_G = 35; // 0x23
+    field public static final int KEYCODE_GRAVE = 68; // 0x44
+    field public static final int KEYCODE_GUIDE = 172; // 0xac
+    field public static final int KEYCODE_H = 36; // 0x24
+    field public static final int KEYCODE_HEADSETHOOK = 79; // 0x4f
+    field public static final int KEYCODE_HELP = 259; // 0x103
+    field public static final int KEYCODE_HENKAN = 214; // 0xd6
+    field public static final int KEYCODE_HOME = 3; // 0x3
+    field public static final int KEYCODE_I = 37; // 0x25
+    field public static final int KEYCODE_INFO = 165; // 0xa5
+    field public static final int KEYCODE_INSERT = 124; // 0x7c
+    field public static final int KEYCODE_J = 38; // 0x26
+    field public static final int KEYCODE_K = 39; // 0x27
+    field public static final int KEYCODE_KANA = 218; // 0xda
+    field public static final int KEYCODE_KATAKANA_HIRAGANA = 215; // 0xd7
+    field public static final int KEYCODE_L = 40; // 0x28
+    field public static final int KEYCODE_LANGUAGE_SWITCH = 204; // 0xcc
+    field public static final int KEYCODE_LAST_CHANNEL = 229; // 0xe5
+    field public static final int KEYCODE_LEFT_BRACKET = 71; // 0x47
+    field public static final int KEYCODE_M = 41; // 0x29
+    field public static final int KEYCODE_MANNER_MODE = 205; // 0xcd
+    field public static final int KEYCODE_MEDIA_AUDIO_TRACK = 222; // 0xde
+    field public static final int KEYCODE_MEDIA_CLOSE = 128; // 0x80
+    field public static final int KEYCODE_MEDIA_EJECT = 129; // 0x81
+    field public static final int KEYCODE_MEDIA_FAST_FORWARD = 90; // 0x5a
+    field public static final int KEYCODE_MEDIA_NEXT = 87; // 0x57
+    field public static final int KEYCODE_MEDIA_PAUSE = 127; // 0x7f
+    field public static final int KEYCODE_MEDIA_PLAY = 126; // 0x7e
+    field public static final int KEYCODE_MEDIA_PLAY_PAUSE = 85; // 0x55
+    field public static final int KEYCODE_MEDIA_PREVIOUS = 88; // 0x58
+    field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82
+    field public static final int KEYCODE_MEDIA_REWIND = 89; // 0x59
+    field public static final int KEYCODE_MEDIA_SKIP_BACKWARD = 273; // 0x111
+    field public static final int KEYCODE_MEDIA_SKIP_FORWARD = 272; // 0x110
+    field public static final int KEYCODE_MEDIA_STEP_BACKWARD = 275; // 0x113
+    field public static final int KEYCODE_MEDIA_STEP_FORWARD = 274; // 0x112
+    field public static final int KEYCODE_MEDIA_STOP = 86; // 0x56
+    field public static final int KEYCODE_MEDIA_TOP_MENU = 226; // 0xe2
+    field public static final int KEYCODE_MENU = 82; // 0x52
+    field public static final int KEYCODE_META_LEFT = 117; // 0x75
+    field public static final int KEYCODE_META_RIGHT = 118; // 0x76
+    field public static final int KEYCODE_MINUS = 69; // 0x45
+    field public static final int KEYCODE_MOVE_END = 123; // 0x7b
+    field public static final int KEYCODE_MOVE_HOME = 122; // 0x7a
+    field public static final int KEYCODE_MUHENKAN = 213; // 0xd5
+    field public static final int KEYCODE_MUSIC = 209; // 0xd1
+    field public static final int KEYCODE_MUTE = 91; // 0x5b
+    field public static final int KEYCODE_N = 42; // 0x2a
+    field public static final int KEYCODE_NAVIGATE_IN = 262; // 0x106
+    field public static final int KEYCODE_NAVIGATE_NEXT = 261; // 0x105
+    field public static final int KEYCODE_NAVIGATE_OUT = 263; // 0x107
+    field public static final int KEYCODE_NAVIGATE_PREVIOUS = 260; // 0x104
+    field public static final int KEYCODE_NOTIFICATION = 83; // 0x53
+    field public static final int KEYCODE_NUM = 78; // 0x4e
+    field public static final int KEYCODE_NUMPAD_0 = 144; // 0x90
+    field public static final int KEYCODE_NUMPAD_1 = 145; // 0x91
+    field public static final int KEYCODE_NUMPAD_2 = 146; // 0x92
+    field public static final int KEYCODE_NUMPAD_3 = 147; // 0x93
+    field public static final int KEYCODE_NUMPAD_4 = 148; // 0x94
+    field public static final int KEYCODE_NUMPAD_5 = 149; // 0x95
+    field public static final int KEYCODE_NUMPAD_6 = 150; // 0x96
+    field public static final int KEYCODE_NUMPAD_7 = 151; // 0x97
+    field public static final int KEYCODE_NUMPAD_8 = 152; // 0x98
+    field public static final int KEYCODE_NUMPAD_9 = 153; // 0x99
+    field public static final int KEYCODE_NUMPAD_ADD = 157; // 0x9d
+    field public static final int KEYCODE_NUMPAD_COMMA = 159; // 0x9f
+    field public static final int KEYCODE_NUMPAD_DIVIDE = 154; // 0x9a
+    field public static final int KEYCODE_NUMPAD_DOT = 158; // 0x9e
+    field public static final int KEYCODE_NUMPAD_ENTER = 160; // 0xa0
+    field public static final int KEYCODE_NUMPAD_EQUALS = 161; // 0xa1
+    field public static final int KEYCODE_NUMPAD_LEFT_PAREN = 162; // 0xa2
+    field public static final int KEYCODE_NUMPAD_MULTIPLY = 155; // 0x9b
+    field public static final int KEYCODE_NUMPAD_RIGHT_PAREN = 163; // 0xa3
+    field public static final int KEYCODE_NUMPAD_SUBTRACT = 156; // 0x9c
+    field public static final int KEYCODE_NUM_LOCK = 143; // 0x8f
+    field public static final int KEYCODE_O = 43; // 0x2b
+    field public static final int KEYCODE_P = 44; // 0x2c
+    field public static final int KEYCODE_PAGE_DOWN = 93; // 0x5d
+    field public static final int KEYCODE_PAGE_UP = 92; // 0x5c
+    field public static final int KEYCODE_PAIRING = 225; // 0xe1
+    field public static final int KEYCODE_PASTE = 279; // 0x117
+    field public static final int KEYCODE_PERIOD = 56; // 0x38
+    field public static final int KEYCODE_PICTSYMBOLS = 94; // 0x5e
+    field public static final int KEYCODE_PLUS = 81; // 0x51
+    field public static final int KEYCODE_POUND = 18; // 0x12
+    field public static final int KEYCODE_POWER = 26; // 0x1a
+    field public static final int KEYCODE_PROFILE_SWITCH = 288; // 0x120
+    field public static final int KEYCODE_PROG_BLUE = 186; // 0xba
+    field public static final int KEYCODE_PROG_GREEN = 184; // 0xb8
+    field public static final int KEYCODE_PROG_RED = 183; // 0xb7
+    field public static final int KEYCODE_PROG_YELLOW = 185; // 0xb9
+    field public static final int KEYCODE_Q = 45; // 0x2d
+    field public static final int KEYCODE_R = 46; // 0x2e
+    field public static final int KEYCODE_REFRESH = 285; // 0x11d
+    field public static final int KEYCODE_RIGHT_BRACKET = 72; // 0x48
+    field public static final int KEYCODE_RO = 217; // 0xd9
+    field public static final int KEYCODE_S = 47; // 0x2f
+    field public static final int KEYCODE_SCROLL_LOCK = 116; // 0x74
+    field public static final int KEYCODE_SEARCH = 84; // 0x54
+    field public static final int KEYCODE_SEMICOLON = 74; // 0x4a
+    field public static final int KEYCODE_SETTINGS = 176; // 0xb0
+    field public static final int KEYCODE_SHIFT_LEFT = 59; // 0x3b
+    field public static final int KEYCODE_SHIFT_RIGHT = 60; // 0x3c
+    field public static final int KEYCODE_SLASH = 76; // 0x4c
+    field public static final int KEYCODE_SLEEP = 223; // 0xdf
+    field public static final int KEYCODE_SOFT_LEFT = 1; // 0x1
+    field public static final int KEYCODE_SOFT_RIGHT = 2; // 0x2
+    field public static final int KEYCODE_SOFT_SLEEP = 276; // 0x114
+    field public static final int KEYCODE_SPACE = 62; // 0x3e
+    field public static final int KEYCODE_STAR = 17; // 0x11
+    field public static final int KEYCODE_STB_INPUT = 180; // 0xb4
+    field public static final int KEYCODE_STB_POWER = 179; // 0xb3
+    field public static final int KEYCODE_STEM_1 = 265; // 0x109
+    field public static final int KEYCODE_STEM_2 = 266; // 0x10a
+    field public static final int KEYCODE_STEM_3 = 267; // 0x10b
+    field public static final int KEYCODE_STEM_PRIMARY = 264; // 0x108
+    field public static final int KEYCODE_SWITCH_CHARSET = 95; // 0x5f
+    field public static final int KEYCODE_SYM = 63; // 0x3f
+    field public static final int KEYCODE_SYSRQ = 120; // 0x78
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_DOWN = 281; // 0x119
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_LEFT = 282; // 0x11a
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283; // 0x11b
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_UP = 280; // 0x118
+    field public static final int KEYCODE_T = 48; // 0x30
+    field public static final int KEYCODE_TAB = 61; // 0x3d
+    field public static final int KEYCODE_THUMBS_DOWN = 287; // 0x11f
+    field public static final int KEYCODE_THUMBS_UP = 286; // 0x11e
+    field public static final int KEYCODE_TV = 170; // 0xaa
+    field public static final int KEYCODE_TV_ANTENNA_CABLE = 242; // 0xf2
+    field public static final int KEYCODE_TV_AUDIO_DESCRIPTION = 252; // 0xfc
+    field public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254; // 0xfe
+    field public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253; // 0xfd
+    field public static final int KEYCODE_TV_CONTENTS_MENU = 256; // 0x100
+    field public static final int KEYCODE_TV_DATA_SERVICE = 230; // 0xe6
+    field public static final int KEYCODE_TV_INPUT = 178; // 0xb2
+    field public static final int KEYCODE_TV_INPUT_COMPONENT_1 = 249; // 0xf9
+    field public static final int KEYCODE_TV_INPUT_COMPONENT_2 = 250; // 0xfa
+    field public static final int KEYCODE_TV_INPUT_COMPOSITE_1 = 247; // 0xf7
+    field public static final int KEYCODE_TV_INPUT_COMPOSITE_2 = 248; // 0xf8
+    field public static final int KEYCODE_TV_INPUT_HDMI_1 = 243; // 0xf3
+    field public static final int KEYCODE_TV_INPUT_HDMI_2 = 244; // 0xf4
+    field public static final int KEYCODE_TV_INPUT_HDMI_3 = 245; // 0xf5
+    field public static final int KEYCODE_TV_INPUT_HDMI_4 = 246; // 0xf6
+    field public static final int KEYCODE_TV_INPUT_VGA_1 = 251; // 0xfb
+    field public static final int KEYCODE_TV_MEDIA_CONTEXT_MENU = 257; // 0x101
+    field public static final int KEYCODE_TV_NETWORK = 241; // 0xf1
+    field public static final int KEYCODE_TV_NUMBER_ENTRY = 234; // 0xea
+    field public static final int KEYCODE_TV_POWER = 177; // 0xb1
+    field public static final int KEYCODE_TV_RADIO_SERVICE = 232; // 0xe8
+    field public static final int KEYCODE_TV_SATELLITE = 237; // 0xed
+    field public static final int KEYCODE_TV_SATELLITE_BS = 238; // 0xee
+    field public static final int KEYCODE_TV_SATELLITE_CS = 239; // 0xef
+    field public static final int KEYCODE_TV_SATELLITE_SERVICE = 240; // 0xf0
+    field public static final int KEYCODE_TV_TELETEXT = 233; // 0xe9
+    field public static final int KEYCODE_TV_TERRESTRIAL_ANALOG = 235; // 0xeb
+    field public static final int KEYCODE_TV_TERRESTRIAL_DIGITAL = 236; // 0xec
+    field public static final int KEYCODE_TV_TIMER_PROGRAMMING = 258; // 0x102
+    field public static final int KEYCODE_TV_ZOOM_MODE = 255; // 0xff
+    field public static final int KEYCODE_U = 49; // 0x31
+    field public static final int KEYCODE_UNKNOWN = 0; // 0x0
+    field public static final int KEYCODE_V = 50; // 0x32
+    field public static final int KEYCODE_VOICE_ASSIST = 231; // 0xe7
+    field public static final int KEYCODE_VOLUME_DOWN = 25; // 0x19
+    field public static final int KEYCODE_VOLUME_MUTE = 164; // 0xa4
+    field public static final int KEYCODE_VOLUME_UP = 24; // 0x18
+    field public static final int KEYCODE_W = 51; // 0x33
+    field public static final int KEYCODE_WAKEUP = 224; // 0xe0
+    field public static final int KEYCODE_WINDOW = 171; // 0xab
+    field public static final int KEYCODE_X = 52; // 0x34
+    field public static final int KEYCODE_Y = 53; // 0x35
+    field public static final int KEYCODE_YEN = 216; // 0xd8
+    field public static final int KEYCODE_Z = 54; // 0x36
+    field public static final int KEYCODE_ZENKAKU_HANKAKU = 211; // 0xd3
+    field public static final int KEYCODE_ZOOM_IN = 168; // 0xa8
+    field public static final int KEYCODE_ZOOM_OUT = 169; // 0xa9
+    field @Deprecated public static final int MAX_KEYCODE = 84; // 0x54
+    field public static final int META_ALT_LEFT_ON = 16; // 0x10
+    field public static final int META_ALT_MASK = 50; // 0x32
+    field public static final int META_ALT_ON = 2; // 0x2
+    field public static final int META_ALT_RIGHT_ON = 32; // 0x20
+    field public static final int META_CAPS_LOCK_ON = 1048576; // 0x100000
+    field public static final int META_CTRL_LEFT_ON = 8192; // 0x2000
+    field public static final int META_CTRL_MASK = 28672; // 0x7000
+    field public static final int META_CTRL_ON = 4096; // 0x1000
+    field public static final int META_CTRL_RIGHT_ON = 16384; // 0x4000
+    field public static final int META_FUNCTION_ON = 8; // 0x8
+    field public static final int META_META_LEFT_ON = 131072; // 0x20000
+    field public static final int META_META_MASK = 458752; // 0x70000
+    field public static final int META_META_ON = 65536; // 0x10000
+    field public static final int META_META_RIGHT_ON = 262144; // 0x40000
+    field public static final int META_NUM_LOCK_ON = 2097152; // 0x200000
+    field public static final int META_SCROLL_LOCK_ON = 4194304; // 0x400000
+    field public static final int META_SHIFT_LEFT_ON = 64; // 0x40
+    field public static final int META_SHIFT_MASK = 193; // 0xc1
+    field public static final int META_SHIFT_ON = 1; // 0x1
+    field public static final int META_SHIFT_RIGHT_ON = 128; // 0x80
+    field public static final int META_SYM_ON = 4; // 0x4
+  }
+
+  public static interface KeyEvent.Callback {
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+  }
+
+  public static class KeyEvent.DispatcherState {
+    ctor public KeyEvent.DispatcherState();
+    method public void handleUpEvent(android.view.KeyEvent);
+    method public boolean isTracking(android.view.KeyEvent);
+    method public void performedLongPress(android.view.KeyEvent);
+    method public void reset();
+    method public void reset(Object);
+    method public void startTracking(android.view.KeyEvent, Object);
+  }
+
+  public final class KeyboardShortcutGroup implements android.os.Parcelable {
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence, @NonNull java.util.List<android.view.KeyboardShortcutInfo>);
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence);
+    method public void addItem(android.view.KeyboardShortcutInfo);
+    method public int describeContents();
+    method public java.util.List<android.view.KeyboardShortcutInfo> getItems();
+    method public CharSequence getLabel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyboardShortcutGroup> CREATOR;
+  }
+
+  public final class KeyboardShortcutInfo implements android.os.Parcelable {
+    ctor public KeyboardShortcutInfo(CharSequence, int, int);
+    ctor public KeyboardShortcutInfo(CharSequence, char, int);
+    method public int describeContents();
+    method public char getBaseCharacter();
+    method public int getKeycode();
+    method @Nullable public CharSequence getLabel();
+    method public int getModifiers();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyboardShortcutInfo> CREATOR;
+  }
+
+  public abstract class LayoutInflater {
+    ctor protected LayoutInflater(android.content.Context);
+    ctor protected LayoutInflater(android.view.LayoutInflater, android.content.Context);
+    method public abstract android.view.LayoutInflater cloneInContext(android.content.Context);
+    method public final android.view.View createView(String, String, android.util.AttributeSet) throws java.lang.ClassNotFoundException, android.view.InflateException;
+    method @Nullable public final android.view.View createView(@NonNull android.content.Context, @NonNull String, @Nullable String, @Nullable android.util.AttributeSet) throws java.lang.ClassNotFoundException, android.view.InflateException;
+    method public static android.view.LayoutInflater from(@UiContext android.content.Context);
+    method public android.content.Context getContext();
+    method public final android.view.LayoutInflater.Factory getFactory();
+    method public final android.view.LayoutInflater.Factory2 getFactory2();
+    method public android.view.LayoutInflater.Filter getFilter();
+    method public android.view.View inflate(@LayoutRes int, @Nullable android.view.ViewGroup);
+    method public android.view.View inflate(org.xmlpull.v1.XmlPullParser, @Nullable android.view.ViewGroup);
+    method public android.view.View inflate(@LayoutRes int, @Nullable android.view.ViewGroup, boolean);
+    method public android.view.View inflate(org.xmlpull.v1.XmlPullParser, @Nullable android.view.ViewGroup, boolean);
+    method protected android.view.View onCreateView(String, android.util.AttributeSet) throws java.lang.ClassNotFoundException;
+    method protected android.view.View onCreateView(android.view.View, String, android.util.AttributeSet) throws java.lang.ClassNotFoundException;
+    method @Nullable public android.view.View onCreateView(@NonNull android.content.Context, @Nullable android.view.View, @NonNull String, @Nullable android.util.AttributeSet) throws java.lang.ClassNotFoundException;
+    method public void setFactory(android.view.LayoutInflater.Factory);
+    method public void setFactory2(android.view.LayoutInflater.Factory2);
+    method public void setFilter(android.view.LayoutInflater.Filter);
+  }
+
+  public static interface LayoutInflater.Factory {
+    method @Nullable public android.view.View onCreateView(@NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+  }
+
+  public static interface LayoutInflater.Factory2 extends android.view.LayoutInflater.Factory {
+    method @Nullable public android.view.View onCreateView(@Nullable android.view.View, @NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+  }
+
+  public static interface LayoutInflater.Filter {
+    method public boolean onLoadClass(Class);
+  }
+
+  public interface Menu {
+    method public android.view.MenuItem add(CharSequence);
+    method public android.view.MenuItem add(@StringRes int);
+    method public android.view.MenuItem add(int, int, int, CharSequence);
+    method public android.view.MenuItem add(int, int, int, @StringRes int);
+    method public int addIntentOptions(int, int, int, android.content.ComponentName, android.content.Intent[], android.content.Intent, int, android.view.MenuItem[]);
+    method public android.view.SubMenu addSubMenu(CharSequence);
+    method public android.view.SubMenu addSubMenu(@StringRes int);
+    method public android.view.SubMenu addSubMenu(int, int, int, CharSequence);
+    method public android.view.SubMenu addSubMenu(int, int, int, @StringRes int);
+    method public void clear();
+    method public void close();
+    method public android.view.MenuItem findItem(int);
+    method public android.view.MenuItem getItem(int);
+    method public boolean hasVisibleItems();
+    method public boolean isShortcutKey(int, android.view.KeyEvent);
+    method public boolean performIdentifierAction(int, int);
+    method public boolean performShortcut(int, android.view.KeyEvent, int);
+    method public void removeGroup(int);
+    method public void removeItem(int);
+    method public void setGroupCheckable(int, boolean, boolean);
+    method public default void setGroupDividerEnabled(boolean);
+    method public void setGroupEnabled(int, boolean);
+    method public void setGroupVisible(int, boolean);
+    method public void setQwertyMode(boolean);
+    method public int size();
+    field public static final int CATEGORY_ALTERNATIVE = 262144; // 0x40000
+    field public static final int CATEGORY_CONTAINER = 65536; // 0x10000
+    field public static final int CATEGORY_SECONDARY = 196608; // 0x30000
+    field public static final int CATEGORY_SYSTEM = 131072; // 0x20000
+    field public static final int FIRST = 1; // 0x1
+    field public static final int FLAG_ALWAYS_PERFORM_CLOSE = 2; // 0x2
+    field public static final int FLAG_APPEND_TO_GROUP = 1; // 0x1
+    field public static final int FLAG_PERFORM_NO_CLOSE = 1; // 0x1
+    field public static final int NONE = 0; // 0x0
+    field public static final int SUPPORTED_MODIFIERS_MASK = 69647; // 0x1100f
+  }
+
+  public class MenuInflater {
+    ctor public MenuInflater(android.content.Context);
+    method public void inflate(@MenuRes int, android.view.Menu);
+  }
+
+  public interface MenuItem {
+    method public boolean collapseActionView();
+    method public boolean expandActionView();
+    method public android.view.ActionProvider getActionProvider();
+    method public android.view.View getActionView();
+    method public default int getAlphabeticModifiers();
+    method public char getAlphabeticShortcut();
+    method public default CharSequence getContentDescription();
+    method public int getGroupId();
+    method public android.graphics.drawable.Drawable getIcon();
+    method @Nullable public default android.graphics.BlendMode getIconTintBlendMode();
+    method @Nullable public default android.content.res.ColorStateList getIconTintList();
+    method @Nullable public default android.graphics.PorterDuff.Mode getIconTintMode();
+    method public android.content.Intent getIntent();
+    method public int getItemId();
+    method public android.view.ContextMenu.ContextMenuInfo getMenuInfo();
+    method public default int getNumericModifiers();
+    method public char getNumericShortcut();
+    method public int getOrder();
+    method public android.view.SubMenu getSubMenu();
+    method public CharSequence getTitle();
+    method public CharSequence getTitleCondensed();
+    method public default CharSequence getTooltipText();
+    method public boolean hasSubMenu();
+    method public boolean isActionViewExpanded();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isEnabled();
+    method public boolean isVisible();
+    method public android.view.MenuItem setActionProvider(android.view.ActionProvider);
+    method public android.view.MenuItem setActionView(android.view.View);
+    method public android.view.MenuItem setActionView(@LayoutRes int);
+    method public android.view.MenuItem setAlphabeticShortcut(char);
+    method public default android.view.MenuItem setAlphabeticShortcut(char, int);
+    method public android.view.MenuItem setCheckable(boolean);
+    method public android.view.MenuItem setChecked(boolean);
+    method public default android.view.MenuItem setContentDescription(CharSequence);
+    method public android.view.MenuItem setEnabled(boolean);
+    method public android.view.MenuItem setIcon(android.graphics.drawable.Drawable);
+    method public android.view.MenuItem setIcon(@DrawableRes int);
+    method @NonNull public default android.view.MenuItem setIconTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public default android.view.MenuItem setIconTintList(@Nullable android.content.res.ColorStateList);
+    method @NonNull public default android.view.MenuItem setIconTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public android.view.MenuItem setIntent(android.content.Intent);
+    method public android.view.MenuItem setNumericShortcut(char);
+    method public default android.view.MenuItem setNumericShortcut(char, int);
+    method public android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener);
+    method public android.view.MenuItem setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener);
+    method public android.view.MenuItem setShortcut(char, char);
+    method public default android.view.MenuItem setShortcut(char, char, int, int);
+    method public void setShowAsAction(int);
+    method public android.view.MenuItem setShowAsActionFlags(int);
+    method public android.view.MenuItem setTitle(CharSequence);
+    method public android.view.MenuItem setTitle(@StringRes int);
+    method public android.view.MenuItem setTitleCondensed(CharSequence);
+    method public default android.view.MenuItem setTooltipText(CharSequence);
+    method public android.view.MenuItem setVisible(boolean);
+    field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+    field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+    field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+    field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+    field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+  }
+
+  public static interface MenuItem.OnActionExpandListener {
+    method public boolean onMenuItemActionCollapse(android.view.MenuItem);
+    method public boolean onMenuItemActionExpand(android.view.MenuItem);
+  }
+
+  public static interface MenuItem.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public final class MotionEvent extends android.view.InputEvent implements android.os.Parcelable {
+    method public static String actionToString(int);
+    method public void addBatch(long, float, float, float, float, int);
+    method public void addBatch(long, android.view.MotionEvent.PointerCoords[], int);
+    method public static int axisFromString(String);
+    method public static String axisToString(int);
+    method public int findPointerIndex(int);
+    method public int getAction();
+    method public int getActionButton();
+    method public int getActionIndex();
+    method public int getActionMasked();
+    method public float getAxisValue(int);
+    method public float getAxisValue(int, int);
+    method public int getButtonState();
+    method public int getClassification();
+    method public int getDeviceId();
+    method public long getDownTime();
+    method public int getEdgeFlags();
+    method public long getEventTime();
+    method public int getFlags();
+    method public float getHistoricalAxisValue(int, int);
+    method public float getHistoricalAxisValue(int, int, int);
+    method public long getHistoricalEventTime(int);
+    method public float getHistoricalOrientation(int);
+    method public float getHistoricalOrientation(int, int);
+    method public void getHistoricalPointerCoords(int, int, android.view.MotionEvent.PointerCoords);
+    method public float getHistoricalPressure(int);
+    method public float getHistoricalPressure(int, int);
+    method public float getHistoricalSize(int);
+    method public float getHistoricalSize(int, int);
+    method public float getHistoricalToolMajor(int);
+    method public float getHistoricalToolMajor(int, int);
+    method public float getHistoricalToolMinor(int);
+    method public float getHistoricalToolMinor(int, int);
+    method public float getHistoricalTouchMajor(int);
+    method public float getHistoricalTouchMajor(int, int);
+    method public float getHistoricalTouchMinor(int);
+    method public float getHistoricalTouchMinor(int, int);
+    method public float getHistoricalX(int);
+    method public float getHistoricalX(int, int);
+    method public float getHistoricalY(int);
+    method public float getHistoricalY(int, int);
+    method public int getHistorySize();
+    method public int getMetaState();
+    method public float getOrientation();
+    method public float getOrientation(int);
+    method public void getPointerCoords(int, android.view.MotionEvent.PointerCoords);
+    method public int getPointerCount();
+    method public int getPointerId(int);
+    method public void getPointerProperties(int, android.view.MotionEvent.PointerProperties);
+    method public float getPressure();
+    method public float getPressure(int);
+    method public float getRawX();
+    method public float getRawX(int);
+    method public float getRawY();
+    method public float getRawY(int);
+    method public float getSize();
+    method public float getSize(int);
+    method public int getSource();
+    method public float getToolMajor();
+    method public float getToolMajor(int);
+    method public float getToolMinor();
+    method public float getToolMinor(int);
+    method public int getToolType(int);
+    method public float getTouchMajor();
+    method public float getTouchMajor(int);
+    method public float getTouchMinor();
+    method public float getTouchMinor(int);
+    method public float getX();
+    method public float getX(int);
+    method public float getXPrecision();
+    method public float getY();
+    method public float getY(int);
+    method public float getYPrecision();
+    method public boolean isButtonPressed(int);
+    method public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int);
+    method @Deprecated public static android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int);
+    method public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int);
+    method @Deprecated public static android.view.MotionEvent obtain(long, long, int, int, float, float, float, float, int, float, float, int, int);
+    method public static android.view.MotionEvent obtain(long, long, int, float, float, int);
+    method public static android.view.MotionEvent obtain(android.view.MotionEvent);
+    method public static android.view.MotionEvent obtainNoHistory(android.view.MotionEvent);
+    method public void offsetLocation(float, float);
+    method public void recycle();
+    method public void setAction(int);
+    method public void setEdgeFlags(int);
+    method public void setLocation(float, float);
+    method public void setSource(int);
+    method public void transform(android.graphics.Matrix);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_BUTTON_PRESS = 11; // 0xb
+    field public static final int ACTION_BUTTON_RELEASE = 12; // 0xc
+    field public static final int ACTION_CANCEL = 3; // 0x3
+    field public static final int ACTION_DOWN = 0; // 0x0
+    field public static final int ACTION_HOVER_ENTER = 9; // 0x9
+    field public static final int ACTION_HOVER_EXIT = 10; // 0xa
+    field public static final int ACTION_HOVER_MOVE = 7; // 0x7
+    field public static final int ACTION_MASK = 255; // 0xff
+    field public static final int ACTION_MOVE = 2; // 0x2
+    field public static final int ACTION_OUTSIDE = 4; // 0x4
+    field @Deprecated public static final int ACTION_POINTER_1_DOWN = 5; // 0x5
+    field @Deprecated public static final int ACTION_POINTER_1_UP = 6; // 0x6
+    field @Deprecated public static final int ACTION_POINTER_2_DOWN = 261; // 0x105
+    field @Deprecated public static final int ACTION_POINTER_2_UP = 262; // 0x106
+    field @Deprecated public static final int ACTION_POINTER_3_DOWN = 517; // 0x205
+    field @Deprecated public static final int ACTION_POINTER_3_UP = 518; // 0x206
+    field public static final int ACTION_POINTER_DOWN = 5; // 0x5
+    field @Deprecated public static final int ACTION_POINTER_ID_MASK = 65280; // 0xff00
+    field @Deprecated public static final int ACTION_POINTER_ID_SHIFT = 8; // 0x8
+    field public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+    field public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+    field public static final int ACTION_POINTER_UP = 6; // 0x6
+    field public static final int ACTION_SCROLL = 8; // 0x8
+    field public static final int ACTION_UP = 1; // 0x1
+    field public static final int AXIS_BRAKE = 23; // 0x17
+    field public static final int AXIS_DISTANCE = 24; // 0x18
+    field public static final int AXIS_GAS = 22; // 0x16
+    field public static final int AXIS_GENERIC_1 = 32; // 0x20
+    field public static final int AXIS_GENERIC_10 = 41; // 0x29
+    field public static final int AXIS_GENERIC_11 = 42; // 0x2a
+    field public static final int AXIS_GENERIC_12 = 43; // 0x2b
+    field public static final int AXIS_GENERIC_13 = 44; // 0x2c
+    field public static final int AXIS_GENERIC_14 = 45; // 0x2d
+    field public static final int AXIS_GENERIC_15 = 46; // 0x2e
+    field public static final int AXIS_GENERIC_16 = 47; // 0x2f
+    field public static final int AXIS_GENERIC_2 = 33; // 0x21
+    field public static final int AXIS_GENERIC_3 = 34; // 0x22
+    field public static final int AXIS_GENERIC_4 = 35; // 0x23
+    field public static final int AXIS_GENERIC_5 = 36; // 0x24
+    field public static final int AXIS_GENERIC_6 = 37; // 0x25
+    field public static final int AXIS_GENERIC_7 = 38; // 0x26
+    field public static final int AXIS_GENERIC_8 = 39; // 0x27
+    field public static final int AXIS_GENERIC_9 = 40; // 0x28
+    field public static final int AXIS_HAT_X = 15; // 0xf
+    field public static final int AXIS_HAT_Y = 16; // 0x10
+    field public static final int AXIS_HSCROLL = 10; // 0xa
+    field public static final int AXIS_LTRIGGER = 17; // 0x11
+    field public static final int AXIS_ORIENTATION = 8; // 0x8
+    field public static final int AXIS_PRESSURE = 2; // 0x2
+    field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+    field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+    field public static final int AXIS_RTRIGGER = 18; // 0x12
+    field public static final int AXIS_RUDDER = 20; // 0x14
+    field public static final int AXIS_RX = 12; // 0xc
+    field public static final int AXIS_RY = 13; // 0xd
+    field public static final int AXIS_RZ = 14; // 0xe
+    field public static final int AXIS_SCROLL = 26; // 0x1a
+    field public static final int AXIS_SIZE = 3; // 0x3
+    field public static final int AXIS_THROTTLE = 19; // 0x13
+    field public static final int AXIS_TILT = 25; // 0x19
+    field public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+    field public static final int AXIS_TOOL_MINOR = 7; // 0x7
+    field public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+    field public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+    field public static final int AXIS_VSCROLL = 9; // 0x9
+    field public static final int AXIS_WHEEL = 21; // 0x15
+    field public static final int AXIS_X = 0; // 0x0
+    field public static final int AXIS_Y = 1; // 0x1
+    field public static final int AXIS_Z = 11; // 0xb
+    field public static final int BUTTON_BACK = 8; // 0x8
+    field public static final int BUTTON_FORWARD = 16; // 0x10
+    field public static final int BUTTON_PRIMARY = 1; // 0x1
+    field public static final int BUTTON_SECONDARY = 2; // 0x2
+    field public static final int BUTTON_STYLUS_PRIMARY = 32; // 0x20
+    field public static final int BUTTON_STYLUS_SECONDARY = 64; // 0x40
+    field public static final int BUTTON_TERTIARY = 4; // 0x4
+    field public static final int CLASSIFICATION_AMBIGUOUS_GESTURE = 1; // 0x1
+    field public static final int CLASSIFICATION_DEEP_PRESS = 2; // 0x2
+    field public static final int CLASSIFICATION_NONE = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.MotionEvent> CREATOR;
+    field public static final int EDGE_BOTTOM = 2; // 0x2
+    field public static final int EDGE_LEFT = 4; // 0x4
+    field public static final int EDGE_RIGHT = 8; // 0x8
+    field public static final int EDGE_TOP = 1; // 0x1
+    field public static final int FLAG_WINDOW_IS_OBSCURED = 1; // 0x1
+    field public static final int FLAG_WINDOW_IS_PARTIALLY_OBSCURED = 2; // 0x2
+    field public static final int INVALID_POINTER_ID = -1; // 0xffffffff
+    field public static final int TOOL_TYPE_ERASER = 4; // 0x4
+    field public static final int TOOL_TYPE_FINGER = 1; // 0x1
+    field public static final int TOOL_TYPE_MOUSE = 3; // 0x3
+    field public static final int TOOL_TYPE_STYLUS = 2; // 0x2
+    field public static final int TOOL_TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class MotionEvent.PointerCoords {
+    ctor public MotionEvent.PointerCoords();
+    ctor public MotionEvent.PointerCoords(android.view.MotionEvent.PointerCoords);
+    method public void clear();
+    method public void copyFrom(android.view.MotionEvent.PointerCoords);
+    method public float getAxisValue(int);
+    method public void setAxisValue(int, float);
+    field public float orientation;
+    field public float pressure;
+    field public float size;
+    field public float toolMajor;
+    field public float toolMinor;
+    field public float touchMajor;
+    field public float touchMinor;
+    field public float x;
+    field public float y;
+  }
+
+  public static final class MotionEvent.PointerProperties {
+    ctor public MotionEvent.PointerProperties();
+    ctor public MotionEvent.PointerProperties(android.view.MotionEvent.PointerProperties);
+    method public void clear();
+    method public void copyFrom(android.view.MotionEvent.PointerProperties);
+    field public int id;
+    field public int toolType;
+  }
+
+  public interface OnReceiveContentListener {
+    method @Nullable public android.view.ContentInfo onReceiveContent(@NonNull android.view.View, @NonNull android.view.ContentInfo);
+  }
+
+  public abstract class OrientationEventListener {
+    ctor public OrientationEventListener(android.content.Context);
+    ctor public OrientationEventListener(android.content.Context, int);
+    method public boolean canDetectOrientation();
+    method public void disable();
+    method public void enable();
+    method public abstract void onOrientationChanged(int);
+    field public static final int ORIENTATION_UNKNOWN = -1; // 0xffffffff
+  }
+
+  @Deprecated public abstract class OrientationListener implements android.hardware.SensorListener {
+    ctor @Deprecated public OrientationListener(android.content.Context);
+    ctor @Deprecated public OrientationListener(android.content.Context, int);
+    method @Deprecated public void disable();
+    method @Deprecated public void enable();
+    method @Deprecated public void onAccuracyChanged(int, int);
+    method @Deprecated public abstract void onOrientationChanged(int);
+    method @Deprecated public void onSensorChanged(int, float[]);
+    field @Deprecated public static final int ORIENTATION_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class PixelCopy {
+    method public static void request(@NonNull android.view.SurfaceView, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.SurfaceView, @Nullable android.graphics.Rect, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Surface, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Surface, @Nullable android.graphics.Rect, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Window, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Window, @Nullable android.graphics.Rect, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    field public static final int ERROR_DESTINATION_INVALID = 5; // 0x5
+    field public static final int ERROR_SOURCE_INVALID = 4; // 0x4
+    field public static final int ERROR_SOURCE_NO_DATA = 3; // 0x3
+    field public static final int ERROR_TIMEOUT = 2; // 0x2
+    field public static final int ERROR_UNKNOWN = 1; // 0x1
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static interface PixelCopy.OnPixelCopyFinishedListener {
+    method public void onPixelCopyFinished(int);
+  }
+
+  public final class PointerIcon implements android.os.Parcelable {
+    method public static android.view.PointerIcon create(@NonNull android.graphics.Bitmap, float, float);
+    method public int describeContents();
+    method public static android.view.PointerIcon getSystemIcon(@NonNull android.content.Context, int);
+    method public static android.view.PointerIcon load(@NonNull android.content.res.Resources, @XmlRes int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.PointerIcon> CREATOR;
+    field public static final int TYPE_ALIAS = 1010; // 0x3f2
+    field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+    field public static final int TYPE_ARROW = 1000; // 0x3e8
+    field public static final int TYPE_CELL = 1006; // 0x3ee
+    field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+    field public static final int TYPE_COPY = 1011; // 0x3f3
+    field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+    field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+    field public static final int TYPE_GRAB = 1020; // 0x3fc
+    field public static final int TYPE_GRABBING = 1021; // 0x3fd
+    field public static final int TYPE_HAND = 1002; // 0x3ea
+    field public static final int TYPE_HELP = 1003; // 0x3eb
+    field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+    field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_TEXT = 1008; // 0x3f0
+    field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+    field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+    field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+    field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+    field public static final int TYPE_WAIT = 1004; // 0x3ec
+    field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+    field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+  }
+
+  public final class RoundedCorner implements android.os.Parcelable {
+    ctor public RoundedCorner(int, int, int, int);
+    method public int describeContents();
+    method @NonNull public android.graphics.Point getCenter();
+    method public int getPosition();
+    method public int getRadius();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.RoundedCorner> CREATOR;
+    field public static final int POSITION_BOTTOM_LEFT = 3; // 0x3
+    field public static final int POSITION_BOTTOM_RIGHT = 2; // 0x2
+    field public static final int POSITION_TOP_LEFT = 0; // 0x0
+    field public static final int POSITION_TOP_RIGHT = 1; // 0x1
+  }
+
+  public class ScaleGestureDetector {
+    ctor public ScaleGestureDetector(android.content.Context, android.view.ScaleGestureDetector.OnScaleGestureListener);
+    ctor public ScaleGestureDetector(android.content.Context, android.view.ScaleGestureDetector.OnScaleGestureListener, android.os.Handler);
+    method public float getCurrentSpan();
+    method public float getCurrentSpanX();
+    method public float getCurrentSpanY();
+    method public long getEventTime();
+    method public float getFocusX();
+    method public float getFocusY();
+    method public float getPreviousSpan();
+    method public float getPreviousSpanX();
+    method public float getPreviousSpanY();
+    method public float getScaleFactor();
+    method public long getTimeDelta();
+    method public boolean isInProgress();
+    method public boolean isQuickScaleEnabled();
+    method public boolean isStylusScaleEnabled();
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public void setQuickScaleEnabled(boolean);
+    method public void setStylusScaleEnabled(boolean);
+  }
+
+  public static interface ScaleGestureDetector.OnScaleGestureListener {
+    method public boolean onScale(android.view.ScaleGestureDetector);
+    method public boolean onScaleBegin(android.view.ScaleGestureDetector);
+    method public void onScaleEnd(android.view.ScaleGestureDetector);
+  }
+
+  public static class ScaleGestureDetector.SimpleOnScaleGestureListener implements android.view.ScaleGestureDetector.OnScaleGestureListener {
+    ctor public ScaleGestureDetector.SimpleOnScaleGestureListener();
+    method public boolean onScale(android.view.ScaleGestureDetector);
+    method public boolean onScaleBegin(android.view.ScaleGestureDetector);
+    method public void onScaleEnd(android.view.ScaleGestureDetector);
+  }
+
+  @UiThread public interface ScrollCaptureCallback {
+    method public void onScrollCaptureEnd(@NonNull Runnable);
+    method public void onScrollCaptureImageRequest(@NonNull android.view.ScrollCaptureSession, @NonNull android.os.CancellationSignal, @NonNull android.graphics.Rect, @NonNull java.util.function.Consumer<android.graphics.Rect>);
+    method public void onScrollCaptureSearch(@NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<android.graphics.Rect>);
+    method public void onScrollCaptureStart(@NonNull android.view.ScrollCaptureSession, @NonNull android.os.CancellationSignal, @NonNull Runnable);
+  }
+
+  public class ScrollCaptureSession {
+    ctor public ScrollCaptureSession(@NonNull android.view.Surface, @NonNull android.graphics.Rect, @NonNull android.graphics.Point);
+    method @NonNull public android.graphics.Point getPositionInWindow();
+    method @NonNull public android.graphics.Rect getScrollBounds();
+    method @NonNull public android.view.Surface getSurface();
+  }
+
+  public final class ScrollCaptureTarget {
+    ctor public ScrollCaptureTarget(@NonNull android.view.View, @NonNull android.graphics.Rect, @NonNull android.graphics.Point, @NonNull android.view.ScrollCaptureCallback);
+    method @NonNull public android.view.ScrollCaptureCallback getCallback();
+    method @NonNull public android.view.View getContainingView();
+    method public int getHint();
+    method @NonNull public android.graphics.Rect getLocalVisibleRect();
+    method @NonNull public android.graphics.Point getPositionInWindow();
+    method @Nullable public android.graphics.Rect getScrollBounds();
+    method public void setScrollBounds(@Nullable android.graphics.Rect);
+    method @UiThread public void updatePositionInWindow();
+  }
+
+  public class SearchEvent {
+    ctor public SearchEvent(android.view.InputDevice);
+    method public android.view.InputDevice getInputDevice();
+  }
+
+  public class SoundEffectConstants {
+    method public static int getConstantForFocusDirection(int, boolean);
+    method public static int getContantForFocusDirection(int);
+    field public static final int CLICK = 0; // 0x0
+    field public static final int NAVIGATION_DOWN = 4; // 0x4
+    field public static final int NAVIGATION_LEFT = 1; // 0x1
+    field public static final int NAVIGATION_REPEAT_DOWN = 8; // 0x8
+    field public static final int NAVIGATION_REPEAT_LEFT = 5; // 0x5
+    field public static final int NAVIGATION_REPEAT_RIGHT = 7; // 0x7
+    field public static final int NAVIGATION_REPEAT_UP = 6; // 0x6
+    field public static final int NAVIGATION_RIGHT = 3; // 0x3
+    field public static final int NAVIGATION_UP = 2; // 0x2
+  }
+
+  public interface SubMenu extends android.view.Menu {
+    method public void clearHeader();
+    method public android.view.MenuItem getItem();
+    method public android.view.SubMenu setHeaderIcon(@DrawableRes int);
+    method public android.view.SubMenu setHeaderIcon(android.graphics.drawable.Drawable);
+    method public android.view.SubMenu setHeaderTitle(@StringRes int);
+    method public android.view.SubMenu setHeaderTitle(CharSequence);
+    method public android.view.SubMenu setHeaderView(android.view.View);
+    method public android.view.SubMenu setIcon(@DrawableRes int);
+    method public android.view.SubMenu setIcon(android.graphics.drawable.Drawable);
+  }
+
+  public class Surface implements android.os.Parcelable {
+    ctor public Surface(@NonNull android.view.SurfaceControl);
+    ctor public Surface(android.graphics.SurfaceTexture);
+    method public int describeContents();
+    method public boolean isValid();
+    method public android.graphics.Canvas lockCanvas(android.graphics.Rect) throws java.lang.IllegalArgumentException, android.view.Surface.OutOfResourcesException;
+    method public android.graphics.Canvas lockHardwareCanvas();
+    method public void readFromParcel(android.os.Parcel);
+    method public void release();
+    method public void setFrameRate(@FloatRange(from=0.0) float, int, int);
+    method public void setFrameRate(@FloatRange(from=0.0) float, int);
+    method @Deprecated public void unlockCanvas(android.graphics.Canvas);
+    method public void unlockCanvasAndPost(android.graphics.Canvas);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CHANGE_FRAME_RATE_ALWAYS = 1; // 0x1
+    field public static final int CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.Surface> CREATOR;
+    field public static final int FRAME_RATE_COMPATIBILITY_DEFAULT = 0; // 0x0
+    field public static final int FRAME_RATE_COMPATIBILITY_FIXED_SOURCE = 1; // 0x1
+    field public static final int ROTATION_0 = 0; // 0x0
+    field public static final int ROTATION_180 = 2; // 0x2
+    field public static final int ROTATION_270 = 3; // 0x3
+    field public static final int ROTATION_90 = 1; // 0x1
+  }
+
+  public static class Surface.OutOfResourcesException extends java.lang.RuntimeException {
+    ctor public Surface.OutOfResourcesException();
+    ctor public Surface.OutOfResourcesException(String);
+  }
+
+  public final class SurfaceControl implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isValid();
+    method public void readFromParcel(android.os.Parcel);
+    method public void release();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BUFFER_TRANSFORM_IDENTITY = 0; // 0x0
+    field public static final int BUFFER_TRANSFORM_MIRROR_HORIZONTAL = 1; // 0x1
+    field public static final int BUFFER_TRANSFORM_MIRROR_VERTICAL = 2; // 0x2
+    field public static final int BUFFER_TRANSFORM_ROTATE_180 = 3; // 0x3
+    field public static final int BUFFER_TRANSFORM_ROTATE_270 = 7; // 0x7
+    field public static final int BUFFER_TRANSFORM_ROTATE_90 = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControl> CREATOR;
+  }
+
+  public static class SurfaceControl.Builder {
+    ctor public SurfaceControl.Builder();
+    method @NonNull public android.view.SurfaceControl build();
+    method @NonNull public android.view.SurfaceControl.Builder setBufferSize(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.SurfaceControl.Builder setFormat(int);
+    method @NonNull public android.view.SurfaceControl.Builder setName(@NonNull String);
+    method @NonNull public android.view.SurfaceControl.Builder setOpaque(boolean);
+    method @NonNull public android.view.SurfaceControl.Builder setParent(@Nullable android.view.SurfaceControl);
+  }
+
+  public static class SurfaceControl.Transaction implements java.io.Closeable android.os.Parcelable {
+    ctor public SurfaceControl.Transaction();
+    method public void apply();
+    method public void close();
+    method public int describeContents();
+    method @NonNull public android.view.SurfaceControl.Transaction merge(@NonNull android.view.SurfaceControl.Transaction);
+    method @NonNull public android.view.SurfaceControl.Transaction reparent(@NonNull android.view.SurfaceControl, @Nullable android.view.SurfaceControl);
+    method @NonNull public android.view.SurfaceControl.Transaction setAlpha(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.SurfaceControl.Transaction setBufferSize(@NonNull android.view.SurfaceControl, @IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float, int);
+    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float, int, int);
+    method @NonNull public android.view.SurfaceControl.Transaction setGeometry(@NonNull android.view.SurfaceControl, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, int);
+    method @NonNull public android.view.SurfaceControl.Transaction setLayer(@NonNull android.view.SurfaceControl, @IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.view.SurfaceControl.Transaction setVisibility(@NonNull android.view.SurfaceControl, boolean);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControl.Transaction> CREATOR;
+  }
+
+  public class SurfaceControlViewHost {
+    ctor public SurfaceControlViewHost(@NonNull android.content.Context, @NonNull android.view.Display, @Nullable android.os.IBinder);
+    method @Nullable public android.view.SurfaceControlViewHost.SurfacePackage getSurfacePackage();
+    method @Nullable public android.view.View getView();
+    method public void relayout(int, int);
+    method public void release();
+    method public void setView(@NonNull android.view.View, int, int);
+  }
+
+  public static final class SurfaceControlViewHost.SurfacePackage implements android.os.Parcelable {
+    ctor public SurfaceControlViewHost.SurfacePackage(@NonNull android.view.SurfaceControlViewHost.SurfacePackage);
+    method public int describeContents();
+    method public void release();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControlViewHost.SurfacePackage> CREATOR;
+  }
+
+  public interface SurfaceHolder {
+    method public void addCallback(android.view.SurfaceHolder.Callback);
+    method public android.view.Surface getSurface();
+    method public android.graphics.Rect getSurfaceFrame();
+    method public boolean isCreating();
+    method public android.graphics.Canvas lockCanvas();
+    method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
+    method public default android.graphics.Canvas lockHardwareCanvas();
+    method public void removeCallback(android.view.SurfaceHolder.Callback);
+    method public void setFixedSize(int, int);
+    method public void setFormat(int);
+    method public void setKeepScreenOn(boolean);
+    method public void setSizeFromLayout();
+    method @Deprecated public void setType(int);
+    method public void unlockCanvasAndPost(android.graphics.Canvas);
+    field @Deprecated public static final int SURFACE_TYPE_GPU = 2; // 0x2
+    field @Deprecated public static final int SURFACE_TYPE_HARDWARE = 1; // 0x1
+    field @Deprecated public static final int SURFACE_TYPE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int SURFACE_TYPE_PUSH_BUFFERS = 3; // 0x3
+  }
+
+  public static class SurfaceHolder.BadSurfaceTypeException extends java.lang.RuntimeException {
+    ctor public SurfaceHolder.BadSurfaceTypeException();
+    ctor public SurfaceHolder.BadSurfaceTypeException(String);
+  }
+
+  public static interface SurfaceHolder.Callback {
+    method public void surfaceChanged(@NonNull android.view.SurfaceHolder, int, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public void surfaceCreated(@NonNull android.view.SurfaceHolder);
+    method public void surfaceDestroyed(@NonNull android.view.SurfaceHolder);
+  }
+
+  public static interface SurfaceHolder.Callback2 extends android.view.SurfaceHolder.Callback {
+    method public void surfaceRedrawNeeded(@NonNull android.view.SurfaceHolder);
+    method public default void surfaceRedrawNeededAsync(@NonNull android.view.SurfaceHolder, @NonNull Runnable);
+  }
+
+  public class SurfaceView extends android.view.View {
+    ctor public SurfaceView(android.content.Context);
+    ctor public SurfaceView(android.content.Context, android.util.AttributeSet);
+    ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.view.SurfaceHolder getHolder();
+    method @Nullable public android.os.IBinder getHostToken();
+    method public android.view.SurfaceControl getSurfaceControl();
+    method public void setChildSurfacePackage(@NonNull android.view.SurfaceControlViewHost.SurfacePackage);
+    method public void setSecure(boolean);
+    method public void setZOrderMediaOverlay(boolean);
+    method public void setZOrderOnTop(boolean);
+  }
+
+  public class TextureView extends android.view.View {
+    ctor public TextureView(@NonNull android.content.Context);
+    ctor public TextureView(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public TextureView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public TextureView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public final void draw(android.graphics.Canvas);
+    method @Nullable public android.graphics.Bitmap getBitmap();
+    method @Nullable public android.graphics.Bitmap getBitmap(int, int);
+    method @NonNull public android.graphics.Bitmap getBitmap(@NonNull android.graphics.Bitmap);
+    method @Nullable public android.graphics.SurfaceTexture getSurfaceTexture();
+    method @Nullable public android.view.TextureView.SurfaceTextureListener getSurfaceTextureListener();
+    method @NonNull public android.graphics.Matrix getTransform(@Nullable android.graphics.Matrix);
+    method public boolean isAvailable();
+    method @Nullable public android.graphics.Canvas lockCanvas();
+    method @Nullable public android.graphics.Canvas lockCanvas(@Nullable android.graphics.Rect);
+    method protected final void onDraw(android.graphics.Canvas);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setOpaque(boolean);
+    method public void setSurfaceTexture(@NonNull android.graphics.SurfaceTexture);
+    method public void setSurfaceTextureListener(@Nullable android.view.TextureView.SurfaceTextureListener);
+    method public void setTransform(@Nullable android.graphics.Matrix);
+    method public void unlockCanvasAndPost(@NonNull android.graphics.Canvas);
+  }
+
+  public static interface TextureView.SurfaceTextureListener {
+    method public void onSurfaceTextureAvailable(@NonNull android.graphics.SurfaceTexture, int, int);
+    method public boolean onSurfaceTextureDestroyed(@NonNull android.graphics.SurfaceTexture);
+    method public void onSurfaceTextureSizeChanged(@NonNull android.graphics.SurfaceTexture, int, int);
+    method public void onSurfaceTextureUpdated(@NonNull android.graphics.SurfaceTexture);
+  }
+
+  public class TouchDelegate {
+    ctor public TouchDelegate(android.graphics.Rect, android.view.View);
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo getTouchDelegateInfo();
+    method public boolean onTouchEvent(@NonNull android.view.MotionEvent);
+    method public boolean onTouchExplorationHoverEvent(@NonNull android.view.MotionEvent);
+    field public static final int ABOVE = 1; // 0x1
+    field public static final int BELOW = 2; // 0x2
+    field public static final int TO_LEFT = 4; // 0x4
+    field public static final int TO_RIGHT = 8; // 0x8
+  }
+
+  public final class VelocityTracker {
+    method public void addMovement(android.view.MotionEvent);
+    method public void clear();
+    method public void computeCurrentVelocity(int);
+    method public void computeCurrentVelocity(int, float);
+    method public float getXVelocity();
+    method public float getXVelocity(int);
+    method public float getYVelocity();
+    method public float getYVelocity(int);
+    method public static android.view.VelocityTracker obtain();
+    method public void recycle();
+  }
+
+  public abstract class VerifiedInputEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDeviceId();
+    method public int getDisplayId();
+    method public long getEventTimeNanos();
+    method public int getSource();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedInputEvent> CREATOR;
+  }
+
+  public final class VerifiedKeyEvent extends android.view.VerifiedInputEvent implements android.os.Parcelable {
+    method public int getAction();
+    method public long getDownTimeNanos();
+    method @Nullable public Boolean getFlag(int);
+    method public int getKeyCode();
+    method public int getMetaState();
+    method public int getRepeatCount();
+    method public int getScanCode();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedKeyEvent> CREATOR;
+  }
+
+  public final class VerifiedMotionEvent extends android.view.VerifiedInputEvent implements android.os.Parcelable {
+    method public int getActionMasked();
+    method public int getButtonState();
+    method public long getDownTimeNanos();
+    method @Nullable public Boolean getFlag(int);
+    method public int getMetaState();
+    method public float getRawX();
+    method public float getRawY();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedMotionEvent> CREATOR;
+  }
+
+  @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
+    ctor public View(android.content.Context);
+    ctor public View(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public View(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public View(android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public void addChildrenForAccessibility(java.util.ArrayList<android.view.View>);
+    method public void addExtraDataToAccessibilityNodeInfo(@NonNull android.view.accessibility.AccessibilityNodeInfo, @NonNull String, @Nullable android.os.Bundle);
+    method public void addFocusables(java.util.ArrayList<android.view.View>, int);
+    method public void addFocusables(java.util.ArrayList<android.view.View>, int, int);
+    method public void addKeyboardNavigationClusters(@NonNull java.util.Collection<android.view.View>, int);
+    method public void addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener);
+    method public void addOnLayoutChangeListener(android.view.View.OnLayoutChangeListener);
+    method public void addOnUnhandledKeyEventListener(android.view.View.OnUnhandledKeyEventListener);
+    method public void addTouchables(java.util.ArrayList<android.view.View>);
+    method public android.view.ViewPropertyAnimator animate();
+    method public void announceForAccessibility(CharSequence);
+    method public void autofill(android.view.autofill.AutofillValue);
+    method public void autofill(@NonNull android.util.SparseArray<android.view.autofill.AutofillValue>);
+    method protected boolean awakenScrollBars();
+    method protected boolean awakenScrollBars(int);
+    method protected boolean awakenScrollBars(int, boolean);
+    method public void bringToFront();
+    method @Deprecated public void buildDrawingCache();
+    method @Deprecated public void buildDrawingCache(boolean);
+    method public void buildLayer();
+    method public boolean callOnClick();
+    method public boolean canResolveLayoutDirection();
+    method public boolean canResolveTextAlignment();
+    method public boolean canResolveTextDirection();
+    method public boolean canScrollHorizontally(int);
+    method public boolean canScrollVertically(int);
+    method public final void cancelDragAndDrop();
+    method public void cancelLongPress();
+    method public final void cancelPendingInputEvents();
+    method public boolean checkInputConnectionProxy(android.view.View);
+    method public void clearAnimation();
+    method public void clearFocus();
+    method public void clearViewTranslationCallback();
+    method public static int combineMeasuredStates(int, int);
+    method protected int computeHorizontalScrollExtent();
+    method protected int computeHorizontalScrollOffset();
+    method protected int computeHorizontalScrollRange();
+    method public void computeScroll();
+    method public android.view.WindowInsets computeSystemWindowInsets(android.view.WindowInsets, android.graphics.Rect);
+    method protected int computeVerticalScrollExtent();
+    method protected int computeVerticalScrollOffset();
+    method protected int computeVerticalScrollRange();
+    method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
+    method public void createContextMenu(android.view.ContextMenu);
+    method @Deprecated public void destroyDrawingCache();
+    method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets);
+    method public boolean dispatchCapturedPointerEvent(android.view.MotionEvent);
+    method public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method public void dispatchCreateViewTranslationRequest(@NonNull java.util.Map<android.view.autofill.AutofillId,long[]>, @NonNull int[], @NonNull android.view.translation.TranslationCapability, @NonNull java.util.List<android.view.translation.ViewTranslationRequest>);
+    method public void dispatchDisplayHint(int);
+    method public boolean dispatchDragEvent(android.view.DragEvent);
+    method protected void dispatchDraw(android.graphics.Canvas);
+    method public void dispatchDrawableHotspotChanged(float, float);
+    method @CallSuper public void dispatchFinishTemporaryDetach();
+    method protected boolean dispatchGenericFocusedEvent(android.view.MotionEvent);
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method protected boolean dispatchGenericPointerEvent(android.view.MotionEvent);
+    method protected boolean dispatchHoverEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyEventPreIme(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchNestedFling(float, float, boolean);
+    method public boolean dispatchNestedPreFling(float, float);
+    method public boolean dispatchNestedPrePerformAccessibilityAction(int, android.os.Bundle);
+    method public boolean dispatchNestedPreScroll(int, int, @Nullable @Size(2) int[], @Nullable @Size(2) int[]);
+    method public boolean dispatchNestedScroll(int, int, int, int, @Nullable @Size(2) int[]);
+    method public void dispatchPointerCaptureChanged(boolean);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void dispatchProvideAutofillStructure(@NonNull android.view.ViewStructure, int);
+    method public void dispatchProvideStructure(android.view.ViewStructure);
+    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
+    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
+    method public void dispatchScrollCaptureSearch(@NonNull android.graphics.Rect, @NonNull android.graphics.Point, @NonNull java.util.function.Consumer<android.view.ScrollCaptureTarget>);
+    method protected void dispatchSetActivated(boolean);
+    method protected void dispatchSetPressed(boolean);
+    method protected void dispatchSetSelected(boolean);
+    method @CallSuper public void dispatchStartTemporaryDetach();
+    method @Deprecated public void dispatchSystemUiVisibilityChanged(int);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public boolean dispatchUnhandledMove(android.view.View, int);
+    method protected void dispatchVisibilityChanged(@NonNull android.view.View, int);
+    method public void dispatchWindowFocusChanged(boolean);
+    method public void dispatchWindowInsetsAnimationEnd(@NonNull android.view.WindowInsetsAnimation);
+    method public void dispatchWindowInsetsAnimationPrepare(@NonNull android.view.WindowInsetsAnimation);
+    method @NonNull public android.view.WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull android.view.WindowInsets, @NonNull java.util.List<android.view.WindowInsetsAnimation>);
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds dispatchWindowInsetsAnimationStart(@NonNull android.view.WindowInsetsAnimation, @NonNull android.view.WindowInsetsAnimation.Bounds);
+    method @Deprecated public void dispatchWindowSystemUiVisiblityChanged(int);
+    method public void dispatchWindowVisibilityChanged(int);
+    method @CallSuper public void draw(android.graphics.Canvas);
+    method @CallSuper public void drawableHotspotChanged(float, float);
+    method @CallSuper protected void drawableStateChanged();
+    method public android.view.View findFocus();
+    method public final <T extends android.view.View> T findViewById(@IdRes int);
+    method public final <T extends android.view.View> T findViewWithTag(Object);
+    method public void findViewsWithText(java.util.ArrayList<android.view.View>, CharSequence, int);
+    method @Deprecated protected boolean fitSystemWindows(android.graphics.Rect);
+    method public android.view.View focusSearch(int);
+    method public void forceHasOverlappingRendering(boolean);
+    method public void forceLayout();
+    method public boolean gatherTransparentRegion(@Nullable android.graphics.Region);
+    method public void generateDisplayHash(@NonNull String, @Nullable android.graphics.Rect, @NonNull java.util.concurrent.Executor, @NonNull android.view.displayhash.DisplayHashResultCallback);
+    method public static int generateViewId();
+    method public CharSequence getAccessibilityClassName();
+    method public android.view.View.AccessibilityDelegate getAccessibilityDelegate();
+    method public int getAccessibilityLiveRegion();
+    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider();
+    method @Nullable public CharSequence getAccessibilityPaneTitle();
+    method @IdRes public int getAccessibilityTraversalAfter();
+    method @IdRes public int getAccessibilityTraversalBefore();
+    method public float getAlpha();
+    method public android.view.animation.Animation getAnimation();
+    method @Nullable public android.graphics.Matrix getAnimationMatrix();
+    method public android.os.IBinder getApplicationWindowToken();
+    method @NonNull public int[] getAttributeResolutionStack(@AttrRes int);
+    method @NonNull public java.util.Map<java.lang.Integer,java.lang.Integer> getAttributeSourceResourceMap();
+    method @Nullable public String[] getAutofillHints();
+    method public final android.view.autofill.AutofillId getAutofillId();
+    method public int getAutofillType();
+    method @Nullable public android.view.autofill.AutofillValue getAutofillValue();
+    method public android.graphics.drawable.Drawable getBackground();
+    method @Nullable public android.graphics.BlendMode getBackgroundTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getBackgroundTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getBackgroundTintMode();
+    method public int getBaseline();
+    method public final int getBottom();
+    method protected float getBottomFadingEdgeStrength();
+    method protected int getBottomPaddingOffset();
+    method public float getCameraDistance();
+    method public android.graphics.Rect getClipBounds();
+    method public boolean getClipBounds(android.graphics.Rect);
+    method public final boolean getClipToOutline();
+    method @Nullable public final android.view.contentcapture.ContentCaptureSession getContentCaptureSession();
+    method public CharSequence getContentDescription();
+    method @UiContext public final android.content.Context getContext();
+    method protected android.view.ContextMenu.ContextMenuInfo getContextMenuInfo();
+    method public final boolean getDefaultFocusHighlightEnabled();
+    method public static int getDefaultSize(int, int);
+    method public android.view.Display getDisplay();
+    method public final int[] getDrawableState();
+    method @Deprecated public android.graphics.Bitmap getDrawingCache();
+    method @Deprecated public android.graphics.Bitmap getDrawingCache(boolean);
+    method @Deprecated @ColorInt public int getDrawingCacheBackgroundColor();
+    method @Deprecated public int getDrawingCacheQuality();
+    method public void getDrawingRect(android.graphics.Rect);
+    method public long getDrawingTime();
+    method public float getElevation();
+    method @StyleRes public int getExplicitStyle();
+    method public boolean getFilterTouchesWhenObscured();
+    method public boolean getFitsSystemWindows();
+    method public int getFocusable();
+    method public java.util.ArrayList<android.view.View> getFocusables(int);
+    method public void getFocusedRect(android.graphics.Rect);
+    method public android.graphics.drawable.Drawable getForeground();
+    method public int getForegroundGravity();
+    method @Nullable public android.graphics.BlendMode getForegroundTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getForegroundTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getForegroundTintMode();
+    method public boolean getGlobalVisibleRect(android.graphics.Rect, android.graphics.Point);
+    method public final boolean getGlobalVisibleRect(android.graphics.Rect);
+    method public android.os.Handler getHandler();
+    method public final boolean getHasOverlappingRendering();
+    method public final int getHeight();
+    method public void getHitRect(android.graphics.Rect);
+    method public int getHorizontalFadingEdgeLength();
+    method protected int getHorizontalScrollbarHeight();
+    method @Nullable public android.graphics.drawable.Drawable getHorizontalScrollbarThumbDrawable();
+    method @Nullable public android.graphics.drawable.Drawable getHorizontalScrollbarTrackDrawable();
+    method @IdRes public int getId();
+    method public int getImportantForAccessibility();
+    method public int getImportantForAutofill();
+    method public int getImportantForContentCapture();
+    method public boolean getKeepScreenOn();
+    method public android.view.KeyEvent.DispatcherState getKeyDispatcherState();
+    method @IdRes public int getLabelFor();
+    method public int getLayerType();
+    method public int getLayoutDirection();
+    method public android.view.ViewGroup.LayoutParams getLayoutParams();
+    method public final int getLeft();
+    method protected float getLeftFadingEdgeStrength();
+    method protected int getLeftPaddingOffset();
+    method public final boolean getLocalVisibleRect(android.graphics.Rect);
+    method public void getLocationInSurface(@NonNull @Size(2) int[]);
+    method public void getLocationInWindow(@Size(2) int[]);
+    method public void getLocationOnScreen(@Size(2) int[]);
+    method public android.graphics.Matrix getMatrix();
+    method public final int getMeasuredHeight();
+    method public final int getMeasuredHeightAndState();
+    method public final int getMeasuredState();
+    method public final int getMeasuredWidth();
+    method public final int getMeasuredWidthAndState();
+    method public int getMinimumHeight();
+    method public int getMinimumWidth();
+    method @IdRes public int getNextClusterForwardId();
+    method @IdRes public int getNextFocusDownId();
+    method @IdRes public int getNextFocusForwardId();
+    method @IdRes public int getNextFocusLeftId();
+    method @IdRes public int getNextFocusRightId();
+    method @IdRes public int getNextFocusUpId();
+    method public android.view.View.OnFocusChangeListener getOnFocusChangeListener();
+    method @ColorInt public int getOutlineAmbientShadowColor();
+    method public android.view.ViewOutlineProvider getOutlineProvider();
+    method @ColorInt public int getOutlineSpotShadowColor();
+    method public int getOverScrollMode();
+    method public android.view.ViewOverlay getOverlay();
+    method public int getPaddingBottom();
+    method public int getPaddingEnd();
+    method public int getPaddingLeft();
+    method public int getPaddingRight();
+    method public int getPaddingStart();
+    method public int getPaddingTop();
+    method public final android.view.ViewParent getParent();
+    method public android.view.ViewParent getParentForAccessibility();
+    method public float getPivotX();
+    method public float getPivotY();
+    method public android.view.PointerIcon getPointerIcon();
+    method @Nullable public String[] getReceiveContentMimeTypes();
+    method public android.content.res.Resources getResources();
+    method public final boolean getRevealOnFocusHint();
+    method public final int getRight();
+    method protected float getRightFadingEdgeStrength();
+    method protected int getRightPaddingOffset();
+    method @Nullable public android.view.AttachedSurfaceControl getRootSurfaceControl();
+    method public android.view.View getRootView();
+    method public android.view.WindowInsets getRootWindowInsets();
+    method public float getRotation();
+    method public float getRotationX();
+    method public float getRotationY();
+    method public float getScaleX();
+    method public float getScaleY();
+    method public int getScrollBarDefaultDelayBeforeFade();
+    method public int getScrollBarFadeDuration();
+    method public int getScrollBarSize();
+    method public int getScrollBarStyle();
+    method public int getScrollCaptureHint();
+    method public int getScrollIndicators();
+    method public final int getScrollX();
+    method public final int getScrollY();
+    method @ColorInt public int getSolidColor();
+    method @LayoutRes public int getSourceLayoutResId();
+    method @Nullable public final CharSequence getStateDescription();
+    method public android.animation.StateListAnimator getStateListAnimator();
+    method protected int getSuggestedMinimumHeight();
+    method protected int getSuggestedMinimumWidth();
+    method @NonNull public java.util.List<android.graphics.Rect> getSystemGestureExclusionRects();
+    method @Deprecated public int getSystemUiVisibility();
+    method public Object getTag();
+    method public Object getTag(int);
+    method public int getTextAlignment();
+    method public int getTextDirection();
+    method @Nullable public CharSequence getTooltipText();
+    method public final int getTop();
+    method protected float getTopFadingEdgeStrength();
+    method protected int getTopPaddingOffset();
+    method public android.view.TouchDelegate getTouchDelegate();
+    method public java.util.ArrayList<android.view.View> getTouchables();
+    method public float getTransitionAlpha();
+    method public String getTransitionName();
+    method public float getTranslationX();
+    method public float getTranslationY();
+    method public float getTranslationZ();
+    method public long getUniqueDrawingId();
+    method public int getVerticalFadingEdgeLength();
+    method public int getVerticalScrollbarPosition();
+    method @Nullable public android.graphics.drawable.Drawable getVerticalScrollbarThumbDrawable();
+    method @Nullable public android.graphics.drawable.Drawable getVerticalScrollbarTrackDrawable();
+    method public int getVerticalScrollbarWidth();
+    method @Nullable public android.view.translation.ViewTranslationResponse getViewTranslationResponse();
+    method public android.view.ViewTreeObserver getViewTreeObserver();
+    method public int getVisibility();
+    method public final int getWidth();
+    method protected int getWindowAttachCount();
+    method public android.view.WindowId getWindowId();
+    method @Nullable public android.view.WindowInsetsController getWindowInsetsController();
+    method @Deprecated public int getWindowSystemUiVisibility();
+    method public android.os.IBinder getWindowToken();
+    method public int getWindowVisibility();
+    method public void getWindowVisibleDisplayFrame(android.graphics.Rect);
+    method public float getX();
+    method public float getY();
+    method public float getZ();
+    method public boolean hasExplicitFocusable();
+    method public boolean hasFocus();
+    method public boolean hasFocusable();
+    method public boolean hasNestedScrollingParent();
+    method public boolean hasOnClickListeners();
+    method public boolean hasOnLongClickListeners();
+    method public boolean hasOverlappingRendering();
+    method public boolean hasPointerCapture();
+    method public boolean hasTransientState();
+    method public boolean hasWindowFocus();
+    method public static android.view.View inflate(android.content.Context, @LayoutRes int, android.view.ViewGroup);
+    method @Deprecated public void invalidate(android.graphics.Rect);
+    method @Deprecated public void invalidate(int, int, int, int);
+    method public void invalidate();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void invalidateOutline();
+    method public boolean isAccessibilityFocused();
+    method public boolean isAccessibilityHeading();
+    method public boolean isActivated();
+    method public boolean isAttachedToWindow();
+    method public boolean isClickable();
+    method public boolean isContextClickable();
+    method public boolean isDirty();
+    method @Deprecated public boolean isDrawingCacheEnabled();
+    method public boolean isDuplicateParentStateEnabled();
+    method public boolean isEnabled();
+    method public final boolean isFocusable();
+    method public final boolean isFocusableInTouchMode();
+    method public boolean isFocused();
+    method public final boolean isFocusedByDefault();
+    method public boolean isForceDarkAllowed();
+    method public boolean isHapticFeedbackEnabled();
+    method public boolean isHardwareAccelerated();
+    method public boolean isHorizontalFadingEdgeEnabled();
+    method public boolean isHorizontalScrollBarEnabled();
+    method public boolean isHovered();
+    method public boolean isImportantForAccessibility();
+    method public final boolean isImportantForAutofill();
+    method public final boolean isImportantForContentCapture();
+    method public boolean isInEditMode();
+    method public boolean isInLayout();
+    method public boolean isInTouchMode();
+    method public final boolean isKeyboardNavigationCluster();
+    method public boolean isLaidOut();
+    method public boolean isLayoutDirectionResolved();
+    method public boolean isLayoutRequested();
+    method public boolean isLongClickable();
+    method public boolean isNestedScrollingEnabled();
+    method public boolean isOpaque();
+    method protected boolean isPaddingOffsetRequired();
+    method public boolean isPaddingRelative();
+    method public boolean isPivotSet();
+    method public boolean isPressed();
+    method public boolean isSaveEnabled();
+    method public boolean isSaveFromParentEnabled();
+    method public boolean isScreenReaderFocusable();
+    method public boolean isScrollContainer();
+    method public boolean isScrollbarFadingEnabled();
+    method public boolean isSelected();
+    method public final boolean isShowingLayoutBounds();
+    method public boolean isShown();
+    method public boolean isSoundEffectsEnabled();
+    method public final boolean isTemporarilyDetached();
+    method public boolean isTextAlignmentResolved();
+    method public boolean isTextDirectionResolved();
+    method public boolean isVerticalFadingEdgeEnabled();
+    method public boolean isVerticalScrollBarEnabled();
+    method public boolean isVisibleToUserForAutofill(int);
+    method @CallSuper public void jumpDrawablesToCurrentState();
+    method public android.view.View keyboardNavigationClusterSearch(android.view.View, int);
+    method public void layout(int, int, int, int);
+    method public final void measure(int, int);
+    method protected static int[] mergeDrawableStates(int[], int[]);
+    method public void offsetLeftAndRight(int);
+    method public void offsetTopAndBottom(int);
+    method @CallSuper protected void onAnimationEnd();
+    method @CallSuper protected void onAnimationStart();
+    method public android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets);
+    method @CallSuper protected void onAttachedToWindow();
+    method public void onCancelPendingInputEvents();
+    method public boolean onCapturedPointerEvent(android.view.MotionEvent);
+    method public boolean onCheckIsTextEditor();
+    method protected void onConfigurationChanged(android.content.res.Configuration);
+    method protected void onCreateContextMenu(android.view.ContextMenu);
+    method protected int[] onCreateDrawableState(int);
+    method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo);
+    method public void onCreateViewTranslationRequest(@NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
+    method public void onCreateVirtualViewTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
+    method @CallSuper protected void onDetachedFromWindow();
+    method protected void onDisplayHint(int);
+    method public boolean onDragEvent(android.view.DragEvent);
+    method protected void onDraw(android.graphics.Canvas);
+    method public void onDrawForeground(android.graphics.Canvas);
+    method protected final void onDrawScrollBars(android.graphics.Canvas);
+    method public boolean onFilterTouchEventForSecurity(android.view.MotionEvent);
+    method @CallSuper protected void onFinishInflate();
+    method public void onFinishTemporaryDetach();
+    method @CallSuper protected void onFocusChanged(boolean, int, @Nullable android.graphics.Rect);
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public void onHoverChanged(boolean);
+    method public boolean onHoverEvent(android.view.MotionEvent);
+    method @CallSuper public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method @CallSuper public void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyPreIme(int, android.view.KeyEvent);
+    method public boolean onKeyShortcut(int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method protected void onLayout(boolean, int, int, int, int);
+    method protected void onMeasure(int, int);
+    method protected void onOverScrolled(int, int, boolean, boolean);
+    method @CallSuper public void onPointerCaptureChange(boolean);
+    method @CallSuper public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void onProvideAutofillStructure(android.view.ViewStructure, int);
+    method public void onProvideAutofillVirtualStructure(android.view.ViewStructure, int);
+    method public void onProvideContentCaptureStructure(@NonNull android.view.ViewStructure, int);
+    method public void onProvideStructure(android.view.ViewStructure);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
+    method @Nullable public android.view.ContentInfo onReceiveContent(@NonNull android.view.ContentInfo);
+    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
+    method @CallSuper protected void onRestoreInstanceState(android.os.Parcelable);
+    method public void onRtlPropertiesChanged(int);
+    method @CallSuper @Nullable protected android.os.Parcelable onSaveInstanceState();
+    method public void onScreenStateChanged(int);
+    method public void onScrollCaptureSearch(@NonNull android.graphics.Rect, @NonNull android.graphics.Point, @NonNull java.util.function.Consumer<android.view.ScrollCaptureTarget>);
+    method protected void onScrollChanged(int, int, int, int);
+    method protected boolean onSetAlpha(int);
+    method protected void onSizeChanged(int, int, int, int);
+    method public void onStartTemporaryDetach();
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public void onViewTranslationResponse(@NonNull android.view.translation.ViewTranslationResponse);
+    method public void onVirtualViewTranslationResponses(@NonNull android.util.LongSparseArray<android.view.translation.ViewTranslationResponse>);
+    method @CallSuper public void onVisibilityAggregated(boolean);
+    method protected void onVisibilityChanged(@NonNull android.view.View, int);
+    method public void onWindowFocusChanged(boolean);
+    method @Deprecated public void onWindowSystemUiVisibilityChanged(int);
+    method protected void onWindowVisibilityChanged(int);
+    method protected boolean overScrollBy(int, int, int, int, int, int, int, int, boolean);
+    method public boolean performAccessibilityAction(int, android.os.Bundle);
+    method public boolean performClick();
+    method public boolean performContextClick(float, float);
+    method public boolean performContextClick();
+    method public boolean performHapticFeedback(int);
+    method public boolean performHapticFeedback(int, int);
+    method public boolean performLongClick();
+    method public boolean performLongClick(float, float);
+    method @Nullable public android.view.ContentInfo performReceiveContent(@NonNull android.view.ContentInfo);
+    method public void playSoundEffect(int);
+    method public boolean post(Runnable);
+    method public boolean postDelayed(Runnable, long);
+    method public void postInvalidate();
+    method public void postInvalidate(int, int, int, int);
+    method public void postInvalidateDelayed(long);
+    method public void postInvalidateDelayed(long, int, int, int, int);
+    method public void postInvalidateOnAnimation();
+    method public void postInvalidateOnAnimation(int, int, int, int);
+    method public void postOnAnimation(Runnable);
+    method public void postOnAnimationDelayed(Runnable, long);
+    method public void refreshDrawableState();
+    method public void releasePointerCapture();
+    method public boolean removeCallbacks(Runnable);
+    method public void removeOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener);
+    method public void removeOnLayoutChangeListener(android.view.View.OnLayoutChangeListener);
+    method public void removeOnUnhandledKeyEventListener(android.view.View.OnUnhandledKeyEventListener);
+    method public void requestApplyInsets();
+    method @Deprecated public void requestFitSystemWindows();
+    method public final boolean requestFocus();
+    method public final boolean requestFocus(int);
+    method public boolean requestFocus(int, android.graphics.Rect);
+    method public final boolean requestFocusFromTouch();
+    method @CallSuper public void requestLayout();
+    method public void requestPointerCapture();
+    method public boolean requestRectangleOnScreen(android.graphics.Rect);
+    method public boolean requestRectangleOnScreen(android.graphics.Rect, boolean);
+    method public final void requestUnbufferedDispatch(android.view.MotionEvent);
+    method public final void requestUnbufferedDispatch(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public void resetPivot();
+    method public static int resolveSize(int, int);
+    method public static int resolveSizeAndState(int, int, int);
+    method public boolean restoreDefaultFocus();
+    method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable>);
+    method public final void saveAttributeDataForStyleable(@NonNull android.content.Context, @NonNull int[], @Nullable android.util.AttributeSet, @NonNull android.content.res.TypedArray, int, int);
+    method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable>);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void scrollBy(int, int);
+    method public void scrollTo(int, int);
+    method public void sendAccessibilityEvent(int);
+    method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent);
+    method public void setAccessibilityDelegate(@Nullable android.view.View.AccessibilityDelegate);
+    method public void setAccessibilityHeading(boolean);
+    method public void setAccessibilityLiveRegion(int);
+    method public void setAccessibilityPaneTitle(@Nullable CharSequence);
+    method public void setAccessibilityTraversalAfter(@IdRes int);
+    method public void setAccessibilityTraversalBefore(@IdRes int);
+    method public void setActivated(boolean);
+    method public void setAllowClickWhenDisabled(boolean);
+    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
+    method public void setAnimation(android.view.animation.Animation);
+    method public void setAnimationMatrix(@Nullable android.graphics.Matrix);
+    method public void setAutofillHints(@Nullable java.lang.String...);
+    method public void setAutofillId(@Nullable android.view.autofill.AutofillId);
+    method public void setBackground(android.graphics.drawable.Drawable);
+    method public void setBackgroundColor(@ColorInt int);
+    method @Deprecated public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setBackgroundResource(@DrawableRes int);
+    method public void setBackgroundTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setBackgroundTintList(@Nullable android.content.res.ColorStateList);
+    method public void setBackgroundTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public final void setBottom(int);
+    method public void setCameraDistance(float);
+    method public void setClickable(boolean);
+    method public void setClipBounds(android.graphics.Rect);
+    method public void setClipToOutline(boolean);
+    method public void setContentCaptureSession(@Nullable android.view.contentcapture.ContentCaptureSession);
+    method public void setContentDescription(CharSequence);
+    method public void setContextClickable(boolean);
+    method public void setDefaultFocusHighlightEnabled(boolean);
+    method @Deprecated public void setDrawingCacheBackgroundColor(@ColorInt int);
+    method @Deprecated public void setDrawingCacheEnabled(boolean);
+    method @Deprecated public void setDrawingCacheQuality(int);
+    method public void setDuplicateParentStateEnabled(boolean);
+    method public void setElevation(float);
+    method public void setEnabled(boolean);
+    method public void setFadingEdgeLength(int);
+    method public void setFilterTouchesWhenObscured(boolean);
+    method public void setFitsSystemWindows(boolean);
+    method public void setFocusable(boolean);
+    method public void setFocusable(int);
+    method public void setFocusableInTouchMode(boolean);
+    method public void setFocusedByDefault(boolean);
+    method public void setForceDarkAllowed(boolean);
+    method public void setForeground(android.graphics.drawable.Drawable);
+    method public void setForegroundGravity(int);
+    method public void setForegroundTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setForegroundTintList(@Nullable android.content.res.ColorStateList);
+    method public void setForegroundTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setHapticFeedbackEnabled(boolean);
+    method public void setHasTransientState(boolean);
+    method public void setHorizontalFadingEdgeEnabled(boolean);
+    method public void setHorizontalScrollBarEnabled(boolean);
+    method public void setHorizontalScrollbarThumbDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setHorizontalScrollbarTrackDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setHovered(boolean);
+    method public void setId(@IdRes int);
+    method public void setImportantForAccessibility(int);
+    method public void setImportantForAutofill(int);
+    method public void setImportantForContentCapture(int);
+    method public void setKeepScreenOn(boolean);
+    method public void setKeyboardNavigationCluster(boolean);
+    method public void setLabelFor(@IdRes int);
+    method public void setLayerPaint(@Nullable android.graphics.Paint);
+    method public void setLayerType(int, @Nullable android.graphics.Paint);
+    method public void setLayoutDirection(int);
+    method public void setLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public final void setLeft(int);
+    method public final void setLeftTopRightBottom(int, int, int, int);
+    method public void setLongClickable(boolean);
+    method protected final void setMeasuredDimension(int, int);
+    method public void setMinimumHeight(int);
+    method public void setMinimumWidth(int);
+    method public void setNestedScrollingEnabled(boolean);
+    method public void setNextClusterForwardId(@IdRes int);
+    method public void setNextFocusDownId(@IdRes int);
+    method public void setNextFocusForwardId(@IdRes int);
+    method public void setNextFocusLeftId(@IdRes int);
+    method public void setNextFocusRightId(@IdRes int);
+    method public void setNextFocusUpId(@IdRes int);
+    method public void setOnApplyWindowInsetsListener(android.view.View.OnApplyWindowInsetsListener);
+    method public void setOnCapturedPointerListener(android.view.View.OnCapturedPointerListener);
+    method public void setOnClickListener(@Nullable android.view.View.OnClickListener);
+    method public void setOnContextClickListener(@Nullable android.view.View.OnContextClickListener);
+    method public void setOnCreateContextMenuListener(android.view.View.OnCreateContextMenuListener);
+    method public void setOnDragListener(android.view.View.OnDragListener);
+    method public void setOnFocusChangeListener(android.view.View.OnFocusChangeListener);
+    method public void setOnGenericMotionListener(android.view.View.OnGenericMotionListener);
+    method public void setOnHoverListener(android.view.View.OnHoverListener);
+    method public void setOnKeyListener(android.view.View.OnKeyListener);
+    method public void setOnLongClickListener(@Nullable android.view.View.OnLongClickListener);
+    method public void setOnReceiveContentListener(@Nullable String[], @Nullable android.view.OnReceiveContentListener);
+    method public void setOnScrollChangeListener(android.view.View.OnScrollChangeListener);
+    method @Deprecated public void setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener);
+    method public void setOnTouchListener(android.view.View.OnTouchListener);
+    method public void setOutlineAmbientShadowColor(@ColorInt int);
+    method public void setOutlineProvider(android.view.ViewOutlineProvider);
+    method public void setOutlineSpotShadowColor(@ColorInt int);
+    method public void setOverScrollMode(int);
+    method public void setPadding(int, int, int, int);
+    method public void setPaddingRelative(int, int, int, int);
+    method public void setPivotX(float);
+    method public void setPivotY(float);
+    method public void setPointerIcon(android.view.PointerIcon);
+    method public void setPressed(boolean);
+    method public void setRenderEffect(@Nullable android.graphics.RenderEffect);
+    method public final void setRevealOnFocusHint(boolean);
+    method public final void setRight(int);
+    method public void setRotation(float);
+    method public void setRotationX(float);
+    method public void setRotationY(float);
+    method public void setSaveEnabled(boolean);
+    method public void setSaveFromParentEnabled(boolean);
+    method public void setScaleX(float);
+    method public void setScaleY(float);
+    method public void setScreenReaderFocusable(boolean);
+    method public void setScrollBarDefaultDelayBeforeFade(int);
+    method public void setScrollBarFadeDuration(int);
+    method public void setScrollBarSize(int);
+    method public void setScrollBarStyle(int);
+    method public final void setScrollCaptureCallback(@Nullable android.view.ScrollCaptureCallback);
+    method public void setScrollCaptureHint(int);
+    method public void setScrollContainer(boolean);
+    method public void setScrollIndicators(int);
+    method public void setScrollIndicators(int, int);
+    method public void setScrollX(int);
+    method public void setScrollY(int);
+    method public void setScrollbarFadingEnabled(boolean);
+    method public void setSelected(boolean);
+    method public void setSoundEffectsEnabled(boolean);
+    method public void setStateDescription(@Nullable CharSequence);
+    method public void setStateListAnimator(android.animation.StateListAnimator);
+    method public void setSystemGestureExclusionRects(@NonNull java.util.List<android.graphics.Rect>);
+    method @Deprecated public void setSystemUiVisibility(int);
+    method public void setTag(Object);
+    method public void setTag(int, Object);
+    method public void setTextAlignment(int);
+    method public void setTextDirection(int);
+    method public void setTooltipText(@Nullable CharSequence);
+    method public final void setTop(int);
+    method public void setTouchDelegate(android.view.TouchDelegate);
+    method public void setTransitionAlpha(float);
+    method public final void setTransitionName(String);
+    method public void setTransitionVisibility(int);
+    method public void setTranslationX(float);
+    method public void setTranslationY(float);
+    method public void setTranslationZ(float);
+    method public void setVerticalFadingEdgeEnabled(boolean);
+    method public void setVerticalScrollBarEnabled(boolean);
+    method public void setVerticalScrollbarPosition(int);
+    method public void setVerticalScrollbarThumbDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setVerticalScrollbarTrackDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setViewTranslationCallback(@NonNull android.view.translation.ViewTranslationCallback);
+    method public void setVisibility(int);
+    method @Deprecated public void setWillNotCacheDrawing(boolean);
+    method public void setWillNotDraw(boolean);
+    method public void setWindowInsetsAnimationCallback(@Nullable android.view.WindowInsetsAnimation.Callback);
+    method public void setX(float);
+    method public void setY(float);
+    method public void setZ(float);
+    method public boolean showContextMenu();
+    method public boolean showContextMenu(float, float);
+    method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
+    method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int);
+    method public void startAnimation(android.view.animation.Animation);
+    method @Deprecated public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, Object, int);
+    method public final boolean startDragAndDrop(android.content.ClipData, android.view.View.DragShadowBuilder, Object, int);
+    method public boolean startNestedScroll(int);
+    method public void stopNestedScroll();
+    method public void transformMatrixToGlobal(@NonNull android.graphics.Matrix);
+    method public void transformMatrixToLocal(@NonNull android.graphics.Matrix);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+    method public void unscheduleDrawable(android.graphics.drawable.Drawable);
+    method public final void updateDragShadow(android.view.View.DragShadowBuilder);
+    method @CallSuper protected boolean verifyDrawable(@NonNull android.graphics.drawable.Drawable);
+    method @Deprecated public boolean willNotCacheDrawing();
+    method public boolean willNotDraw();
+    field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+    field public static final android.util.Property<android.view.View,java.lang.Float> ALPHA;
+    field public static final int AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 1; // 0x1
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE = "creditCardExpirationDate";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY = "creditCardExpirationDay";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH = "creditCardExpirationMonth";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR = "creditCardExpirationYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_NUMBER = "creditCardNumber";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE = "creditCardSecurityCode";
+    field public static final String AUTOFILL_HINT_EMAIL_ADDRESS = "emailAddress";
+    field public static final String AUTOFILL_HINT_NAME = "name";
+    field public static final String AUTOFILL_HINT_PASSWORD = "password";
+    field public static final String AUTOFILL_HINT_PHONE = "phone";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS = "postalAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
+    field public static final String AUTOFILL_HINT_USERNAME = "username";
+    field public static final int AUTOFILL_TYPE_DATE = 4; // 0x4
+    field public static final int AUTOFILL_TYPE_LIST = 3; // 0x3
+    field public static final int AUTOFILL_TYPE_NONE = 0; // 0x0
+    field public static final int AUTOFILL_TYPE_TEXT = 1; // 0x1
+    field public static final int AUTOFILL_TYPE_TOGGLE = 2; // 0x2
+    field public static final int DRAG_FLAG_ACCESSIBILITY_ACTION = 1024; // 0x400
+    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
+    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
+    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
+    field public static final int DRAG_FLAG_GLOBAL_URI_READ = 1; // 0x1
+    field public static final int DRAG_FLAG_GLOBAL_URI_WRITE = 2; // 0x2
+    field public static final int DRAG_FLAG_OPAQUE = 512; // 0x200
+    field @Deprecated public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0
+    field @Deprecated public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000
+    field @Deprecated public static final int DRAWING_CACHE_QUALITY_LOW = 524288; // 0x80000
+    field protected static final int[] EMPTY_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_SELECTED_STATE_SET;
+    field protected static final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_STATE_SET;
+    field protected static final int[] ENABLED_WINDOW_FOCUSED_STATE_SET;
+    field public static final int FIND_VIEWS_WITH_CONTENT_DESCRIPTION = 2; // 0x2
+    field public static final int FIND_VIEWS_WITH_TEXT = 1; // 0x1
+    field public static final int FOCUSABLE = 1; // 0x1
+    field public static final int FOCUSABLES_ALL = 0; // 0x0
+    field public static final int FOCUSABLES_TOUCH_MODE = 1; // 0x1
+    field public static final int FOCUSABLE_AUTO = 16; // 0x10
+    field protected static final int[] FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] FOCUSED_STATE_SET;
+    field protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field public static final int FOCUS_BACKWARD = 1; // 0x1
+    field public static final int FOCUS_DOWN = 130; // 0x82
+    field public static final int FOCUS_FORWARD = 2; // 0x2
+    field public static final int FOCUS_LEFT = 17; // 0x11
+    field public static final int FOCUS_RIGHT = 66; // 0x42
+    field public static final int FOCUS_UP = 33; // 0x21
+    field public static final int GONE = 8; // 0x8
+    field public static final int HAPTIC_FEEDBACK_ENABLED = 268435456; // 0x10000000
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+    field public static final int IMPORTANT_FOR_AUTOFILL_AUTO = 0; // 0x0
+    field public static final int IMPORTANT_FOR_AUTOFILL_NO = 2; // 0x2
+    field public static final int IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS = 8; // 0x8
+    field public static final int IMPORTANT_FOR_AUTOFILL_YES = 1; // 0x1
+    field public static final int IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS = 4; // 0x4
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_AUTO = 0; // 0x0
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_NO = 2; // 0x2
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_NO_EXCLUDE_DESCENDANTS = 8; // 0x8
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_YES = 1; // 0x1
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_YES_EXCLUDE_DESCENDANTS = 4; // 0x4
+    field public static final int INVISIBLE = 4; // 0x4
+    field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000
+    field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+    field public static final int LAYER_TYPE_NONE = 0; // 0x0
+    field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+    field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+    field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+    field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+    field public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+    field public static final int NOT_FOCUSABLE = 0; // 0x0
+    field public static final int NO_ID = -1; // 0xffffffff
+    field public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+    field public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+    field public static final int OVER_SCROLL_NEVER = 2; // 0x2
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_STATE_SET;
+    field protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET;
+    field public static final android.util.Property<android.view.View,java.lang.Float> ROTATION;
+    field public static final android.util.Property<android.view.View,java.lang.Float> ROTATION_X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> ROTATION_Y;
+    field public static final android.util.Property<android.view.View,java.lang.Float> SCALE_X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> SCALE_Y;
+    field public static final int SCREEN_STATE_OFF = 0; // 0x0
+    field public static final int SCREEN_STATE_ON = 1; // 0x1
+    field public static final int SCROLLBARS_INSIDE_INSET = 16777216; // 0x1000000
+    field public static final int SCROLLBARS_INSIDE_OVERLAY = 0; // 0x0
+    field public static final int SCROLLBARS_OUTSIDE_INSET = 50331648; // 0x3000000
+    field public static final int SCROLLBARS_OUTSIDE_OVERLAY = 33554432; // 0x2000000
+    field public static final int SCROLLBAR_POSITION_DEFAULT = 0; // 0x0
+    field public static final int SCROLLBAR_POSITION_LEFT = 1; // 0x1
+    field public static final int SCROLLBAR_POSITION_RIGHT = 2; // 0x2
+    field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+    field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+    field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+    field public static final int SCROLL_CAPTURE_HINT_AUTO = 0; // 0x0
+    field public static final int SCROLL_CAPTURE_HINT_EXCLUDE = 1; // 0x1
+    field public static final int SCROLL_CAPTURE_HINT_EXCLUDE_DESCENDANTS = 4; // 0x4
+    field public static final int SCROLL_CAPTURE_HINT_INCLUDE = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+    field protected static final int[] SELECTED_STATE_SET;
+    field protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field public static final int SOUND_EFFECTS_ENABLED = 134217728; // 0x8000000
+    field @Deprecated public static final int STATUS_BAR_HIDDEN = 1; // 0x1
+    field @Deprecated public static final int STATUS_BAR_VISIBLE = 0; // 0x0
+    field @Deprecated public static final int SYSTEM_UI_FLAG_FULLSCREEN = 4; // 0x4
+    field @Deprecated public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 2; // 0x2
+    field @Deprecated public static final int SYSTEM_UI_FLAG_IMMERSIVE = 2048; // 0x800
+    field @Deprecated public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 4096; // 0x1000
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 1024; // 0x400
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 512; // 0x200
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LAYOUT_STABLE = 256; // 0x100
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR = 16; // 0x10
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LIGHT_STATUS_BAR = 8192; // 0x2000
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 1; // 0x1
+    field @Deprecated public static final int SYSTEM_UI_FLAG_VISIBLE = 0; // 0x0
+    field @Deprecated public static final int SYSTEM_UI_LAYOUT_FLAGS = 1536; // 0x600
+    field public static final int TEXT_ALIGNMENT_CENTER = 4; // 0x4
+    field public static final int TEXT_ALIGNMENT_GRAVITY = 1; // 0x1
+    field public static final int TEXT_ALIGNMENT_INHERIT = 0; // 0x0
+    field public static final int TEXT_ALIGNMENT_TEXT_END = 3; // 0x3
+    field public static final int TEXT_ALIGNMENT_TEXT_START = 2; // 0x2
+    field public static final int TEXT_ALIGNMENT_VIEW_END = 6; // 0x6
+    field public static final int TEXT_ALIGNMENT_VIEW_START = 5; // 0x5
+    field public static final int TEXT_DIRECTION_ANY_RTL = 2; // 0x2
+    field public static final int TEXT_DIRECTION_FIRST_STRONG = 1; // 0x1
+    field public static final int TEXT_DIRECTION_FIRST_STRONG_LTR = 6; // 0x6
+    field public static final int TEXT_DIRECTION_FIRST_STRONG_RTL = 7; // 0x7
+    field public static final int TEXT_DIRECTION_INHERIT = 0; // 0x0
+    field public static final int TEXT_DIRECTION_LOCALE = 5; // 0x5
+    field public static final int TEXT_DIRECTION_LTR = 3; // 0x3
+    field public static final int TEXT_DIRECTION_RTL = 4; // 0x4
+    field public static final android.util.Property<android.view.View,java.lang.Float> TRANSLATION_X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> TRANSLATION_Y;
+    field public static final android.util.Property<android.view.View,java.lang.Float> TRANSLATION_Z;
+    field protected static final String VIEW_LOG_TAG = "View";
+    field public static final int VISIBLE = 0; // 0x0
+    field protected static final int[] WINDOW_FOCUSED_STATE_SET;
+    field public static final android.util.Property<android.view.View,java.lang.Float> X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> Y;
+    field public static final android.util.Property<android.view.View,java.lang.Float> Z;
+  }
+
+  public static class View.AccessibilityDelegate {
+    ctor public View.AccessibilityDelegate();
+    method public void addExtraDataToAccessibilityNodeInfo(@NonNull android.view.View, @NonNull android.view.accessibility.AccessibilityNodeInfo, @NonNull String, @Nullable android.os.Bundle);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(android.view.View);
+    method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityNodeInfo(android.view.View, android.view.accessibility.AccessibilityNodeInfo);
+    method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public void sendAccessibilityEvent(android.view.View, int);
+    method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+  }
+
+  public static class View.BaseSavedState extends android.view.AbsSavedState {
+    ctor public View.BaseSavedState(android.os.Parcel);
+    ctor public View.BaseSavedState(android.os.Parcel, ClassLoader);
+    ctor public View.BaseSavedState(android.os.Parcelable);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.View.BaseSavedState> CREATOR;
+  }
+
+  public static class View.DragShadowBuilder {
+    ctor public View.DragShadowBuilder(android.view.View);
+    ctor public View.DragShadowBuilder();
+    method public final android.view.View getView();
+    method public void onDrawShadow(android.graphics.Canvas);
+    method public void onProvideShadowMetrics(android.graphics.Point, android.graphics.Point);
+  }
+
+  public static class View.MeasureSpec {
+    ctor public View.MeasureSpec();
+    method public static int getMode(int);
+    method public static int getSize(int);
+    method public static int makeMeasureSpec(@IntRange(from=0, to=0x40000000 - 1) int, int);
+    method public static String toString(int);
+    field public static final int AT_MOST = -2147483648; // 0x80000000
+    field public static final int EXACTLY = 1073741824; // 0x40000000
+    field public static final int UNSPECIFIED = 0; // 0x0
+  }
+
+  public static interface View.OnApplyWindowInsetsListener {
+    method public android.view.WindowInsets onApplyWindowInsets(android.view.View, android.view.WindowInsets);
+  }
+
+  public static interface View.OnAttachStateChangeListener {
+    method public void onViewAttachedToWindow(android.view.View);
+    method public void onViewDetachedFromWindow(android.view.View);
+  }
+
+  public static interface View.OnCapturedPointerListener {
+    method public boolean onCapturedPointer(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnClickListener {
+    method public void onClick(android.view.View);
+  }
+
+  public static interface View.OnContextClickListener {
+    method public boolean onContextClick(android.view.View);
+  }
+
+  public static interface View.OnCreateContextMenuListener {
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+  }
+
+  public static interface View.OnDragListener {
+    method public boolean onDrag(android.view.View, android.view.DragEvent);
+  }
+
+  public static interface View.OnFocusChangeListener {
+    method public void onFocusChange(android.view.View, boolean);
+  }
+
+  public static interface View.OnGenericMotionListener {
+    method public boolean onGenericMotion(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnHoverListener {
+    method public boolean onHover(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnKeyListener {
+    method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+  }
+
+  public static interface View.OnLayoutChangeListener {
+    method public void onLayoutChange(android.view.View, int, int, int, int, int, int, int, int);
+  }
+
+  public static interface View.OnLongClickListener {
+    method public boolean onLongClick(android.view.View);
+  }
+
+  public static interface View.OnScrollChangeListener {
+    method public void onScrollChange(android.view.View, int, int, int, int);
+  }
+
+  @Deprecated public static interface View.OnSystemUiVisibilityChangeListener {
+    method @Deprecated public void onSystemUiVisibilityChange(int);
+  }
+
+  public static interface View.OnTouchListener {
+    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnUnhandledKeyEventListener {
+    method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
+  }
+
+  public final class ViewAnimationUtils {
+    method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
+  }
+
+  public class ViewConfiguration {
+    ctor @Deprecated public ViewConfiguration();
+    method public static android.view.ViewConfiguration get(@UiContext android.content.Context);
+    method @Deprecated @FloatRange(from=1.0) public static float getAmbiguousGestureMultiplier();
+    method public static long getDefaultActionModeHideDuration();
+    method public static int getDoubleTapTimeout();
+    method @Deprecated public static int getEdgeSlop();
+    method @Deprecated public static int getFadingEdgeLength();
+    method @Deprecated public static long getGlobalActionKeyTimeout();
+    method public static int getJumpTapTimeout();
+    method public static int getKeyRepeatDelay();
+    method public static int getKeyRepeatTimeout();
+    method public static int getLongPressTimeout();
+    method @Deprecated public static int getMaximumDrawingCacheSize();
+    method @Deprecated public static int getMaximumFlingVelocity();
+    method @Deprecated public static int getMinimumFlingVelocity();
+    method public static int getMultiPressTimeout();
+    method public static int getPressedStateDuration();
+    method @FloatRange(from=1.0) public float getScaledAmbiguousGestureMultiplier();
+    method public int getScaledDoubleTapSlop();
+    method public int getScaledEdgeSlop();
+    method public int getScaledFadingEdgeLength();
+    method public float getScaledHorizontalScrollFactor();
+    method public int getScaledHoverSlop();
+    method public int getScaledMaximumDrawingCacheSize();
+    method public int getScaledMaximumFlingVelocity();
+    method public int getScaledMinimumFlingVelocity();
+    method public int getScaledMinimumScalingSpan();
+    method public int getScaledOverflingDistance();
+    method public int getScaledOverscrollDistance();
+    method public int getScaledPagingTouchSlop();
+    method public int getScaledScrollBarSize();
+    method public int getScaledTouchSlop();
+    method public float getScaledVerticalScrollFactor();
+    method public int getScaledWindowTouchSlop();
+    method public static int getScrollBarFadeDuration();
+    method @Deprecated public static int getScrollBarSize();
+    method public static int getScrollDefaultDelay();
+    method public static float getScrollFriction();
+    method public static int getTapTimeout();
+    method @Deprecated public static int getTouchSlop();
+    method @Deprecated public static int getWindowTouchSlop();
+    method public static long getZoomControlsTimeout();
+    method public boolean hasPermanentMenuKey();
+    method public boolean shouldShowMenuShortcutsWhenKeyboardPresent();
+  }
+
+  public class ViewDebug {
+    ctor public ViewDebug();
+    method public static void dumpCapturedView(String, Object);
+    method @Deprecated public static void startHierarchyTracing(String, android.view.View);
+    method @Deprecated public static void startRecyclerTracing(String, android.view.View);
+    method @Deprecated public static void stopHierarchyTracing();
+    method @Deprecated public static void stopRecyclerTracing();
+    method @Deprecated public static void trace(android.view.View, android.view.ViewDebug.RecyclerTraceType, int...);
+    method @Deprecated public static void trace(android.view.View, android.view.ViewDebug.HierarchyTraceType);
+    field @Deprecated public static final boolean TRACE_HIERARCHY = false;
+    field @Deprecated public static final boolean TRACE_RECYCLER = false;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public static @interface ViewDebug.CapturedViewProperty {
+    method public abstract boolean retrieveReturn() default false;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public static @interface ViewDebug.ExportedProperty {
+    method public abstract String category() default "";
+    method public abstract boolean deepExport() default false;
+    method public abstract android.view.ViewDebug.FlagToString[] flagMapping() default {};
+    method public abstract boolean formatToHexString() default false;
+    method public abstract boolean hasAdjacentMapping() default false;
+    method public abstract android.view.ViewDebug.IntToString[] indexMapping() default {};
+    method public abstract android.view.ViewDebug.IntToString[] mapping() default {};
+    method public abstract String prefix() default "";
+    method public abstract boolean resolveId() default false;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface ViewDebug.FlagToString {
+    method public abstract int equals();
+    method public abstract int mask();
+    method public abstract String name();
+    method public abstract boolean outputIf() default true;
+  }
+
+  @Deprecated public enum ViewDebug.HierarchyTraceType {
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType BUILD_CACHE;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType DRAW;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD_IN_PARENT;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType ON_LAYOUT;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType ON_MEASURE;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType REQUEST_LAYOUT;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface ViewDebug.IntToString {
+    method public abstract int from();
+    method public abstract String to();
+  }
+
+  @Deprecated public enum ViewDebug.RecyclerTraceType {
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType BIND_VIEW;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType MOVE_TO_SCRAP_HEAP;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType NEW_VIEW;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP;
+  }
+
+  @UiThread public abstract class ViewGroup extends android.view.View implements android.view.ViewManager android.view.ViewParent {
+    ctor public ViewGroup(android.content.Context);
+    ctor public ViewGroup(android.content.Context, android.util.AttributeSet);
+    ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int);
+    ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean addStatesFromChildren();
+    method public void addView(android.view.View);
+    method public void addView(android.view.View, int);
+    method public void addView(android.view.View, int, int);
+    method public void addView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void addView(android.view.View, int, android.view.ViewGroup.LayoutParams);
+    method protected boolean addViewInLayout(android.view.View, int, android.view.ViewGroup.LayoutParams);
+    method protected boolean addViewInLayout(android.view.View, int, android.view.ViewGroup.LayoutParams, boolean);
+    method protected void attachLayoutAnimationParameters(android.view.View, android.view.ViewGroup.LayoutParams, int, int);
+    method protected void attachViewToParent(android.view.View, int, android.view.ViewGroup.LayoutParams);
+    method public void bringChildToFront(android.view.View);
+    method protected boolean canAnimate();
+    method protected boolean checkLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void childDrawableStateChanged(android.view.View);
+    method public void childHasTransientStateChanged(android.view.View, boolean);
+    method protected void cleanupLayoutState(android.view.View);
+    method public void clearChildFocus(android.view.View);
+    method public void clearDisappearingChildren();
+    method protected void debug(int);
+    method protected void detachAllViewsFromParent();
+    method protected void detachViewFromParent(android.view.View);
+    method protected void detachViewFromParent(int);
+    method protected void detachViewsFromParent(int, int);
+    method protected void dispatchFreezeSelfOnly(android.util.SparseArray<android.os.Parcelable>);
+    method public void dispatchSetActivated(boolean);
+    method public void dispatchSetSelected(boolean);
+    method protected void dispatchThawSelfOnly(android.util.SparseArray<android.os.Parcelable>);
+    method protected boolean drawChild(android.graphics.Canvas, android.view.View, long);
+    method public void endViewTransition(android.view.View);
+    method public android.view.View focusSearch(android.view.View, int);
+    method public void focusableViewAvailable(android.view.View);
+    method protected android.view.ViewGroup.LayoutParams generateDefaultLayoutParams();
+    method public android.view.ViewGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.view.ViewGroup.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public android.view.View getChildAt(int);
+    method public int getChildCount();
+    method protected int getChildDrawingOrder(int, int);
+    method public final int getChildDrawingOrder(int);
+    method public static int getChildMeasureSpec(int, int, int);
+    method protected boolean getChildStaticTransformation(android.view.View, android.view.animation.Transformation);
+    method public boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point);
+    method public boolean getClipChildren();
+    method public boolean getClipToPadding();
+    method public int getDescendantFocusability();
+    method public android.view.View getFocusedChild();
+    method public android.view.animation.LayoutAnimationController getLayoutAnimation();
+    method public android.view.animation.Animation.AnimationListener getLayoutAnimationListener();
+    method public int getLayoutMode();
+    method public android.animation.LayoutTransition getLayoutTransition();
+    method public int getNestedScrollAxes();
+    method public android.view.ViewGroupOverlay getOverlay();
+    method @Deprecated public int getPersistentDrawingCache();
+    method public boolean getTouchscreenBlocksFocus();
+    method public int indexOfChild(android.view.View);
+    method @Deprecated public final void invalidateChild(android.view.View, android.graphics.Rect);
+    method @Deprecated public android.view.ViewParent invalidateChildInParent(int[], android.graphics.Rect);
+    method @Deprecated public boolean isAlwaysDrawnWithCacheEnabled();
+    method @Deprecated public boolean isAnimationCacheEnabled();
+    method protected boolean isChildrenDrawingOrderEnabled();
+    method @Deprecated protected boolean isChildrenDrawnWithCacheEnabled();
+    method public boolean isLayoutSuppressed();
+    method public boolean isMotionEventSplittingEnabled();
+    method public boolean isTransitionGroup();
+    method public final void layout(int, int, int, int);
+    method protected void measureChild(android.view.View, int, int);
+    method protected void measureChildWithMargins(android.view.View, int, int, int, int);
+    method protected void measureChildren(int, int);
+    method public void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int);
+    method public final void offsetDescendantRectToMyCoords(android.view.View, android.graphics.Rect);
+    method public final void offsetRectIntoDescendantCoords(android.view.View, android.graphics.Rect);
+    method public boolean onInterceptHoverEvent(android.view.MotionEvent);
+    method public boolean onInterceptTouchEvent(android.view.MotionEvent);
+    method protected abstract void onLayout(boolean, int, int, int, int);
+    method public boolean onNestedFling(android.view.View, float, float, boolean);
+    method public boolean onNestedPreFling(android.view.View, float, float);
+    method public boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public void onNestedScroll(android.view.View, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method protected boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+    method public boolean onRequestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public void onStopNestedScroll(android.view.View);
+    method public void onViewAdded(android.view.View);
+    method public void onViewRemoved(android.view.View);
+    method public void recomputeViewAttributes(android.view.View);
+    method public void removeAllViews();
+    method public void removeAllViewsInLayout();
+    method protected void removeDetachedView(android.view.View, boolean);
+    method public void removeView(android.view.View);
+    method public void removeViewAt(int);
+    method public void removeViewInLayout(android.view.View);
+    method public void removeViews(int, int);
+    method public void removeViewsInLayout(int, int);
+    method public void requestChildFocus(android.view.View, android.view.View);
+    method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
+    method public void requestDisallowInterceptTouchEvent(boolean);
+    method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public void requestTransparentRegion(android.view.View);
+    method public void scheduleLayoutAnimation();
+    method public void setAddStatesFromChildren(boolean);
+    method @Deprecated public void setAlwaysDrawnWithCacheEnabled(boolean);
+    method @Deprecated public void setAnimationCacheEnabled(boolean);
+    method @Deprecated protected void setChildrenDrawingCacheEnabled(boolean);
+    method protected void setChildrenDrawingOrderEnabled(boolean);
+    method @Deprecated protected void setChildrenDrawnWithCacheEnabled(boolean);
+    method public void setClipChildren(boolean);
+    method public void setClipToPadding(boolean);
+    method public void setDescendantFocusability(int);
+    method public void setLayoutAnimation(android.view.animation.LayoutAnimationController);
+    method public void setLayoutAnimationListener(android.view.animation.Animation.AnimationListener);
+    method public void setLayoutMode(int);
+    method public void setLayoutTransition(android.animation.LayoutTransition);
+    method public void setMotionEventSplittingEnabled(boolean);
+    method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener);
+    method @Deprecated public void setPersistentDrawingCache(int);
+    method protected void setStaticTransformationsEnabled(boolean);
+    method public void setTouchscreenBlocksFocus(boolean);
+    method public void setTransitionGroup(boolean);
+    method public boolean shouldDelayChildPressedState();
+    method public boolean showContextMenuForChild(android.view.View);
+    method public boolean showContextMenuForChild(android.view.View, float, float);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback, int);
+    method public void startLayoutAnimation();
+    method public void startViewTransition(android.view.View);
+    method public void suppressLayout(boolean);
+    method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams);
+    field protected static final int CLIP_TO_PADDING_MASK = 34; // 0x22
+    field public static final int FOCUS_AFTER_DESCENDANTS = 262144; // 0x40000
+    field public static final int FOCUS_BEFORE_DESCENDANTS = 131072; // 0x20000
+    field public static final int FOCUS_BLOCK_DESCENDANTS = 393216; // 0x60000
+    field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+    field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+    field @Deprecated public static final int PERSISTENT_ALL_CACHES = 3; // 0x3
+    field @Deprecated public static final int PERSISTENT_ANIMATION_CACHE = 1; // 0x1
+    field @Deprecated public static final int PERSISTENT_NO_CACHE = 0; // 0x0
+    field @Deprecated public static final int PERSISTENT_SCROLLING_CACHE = 2; // 0x2
+  }
+
+  public static class ViewGroup.LayoutParams {
+    ctor public ViewGroup.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ViewGroup.LayoutParams(int, int);
+    ctor public ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void resolveLayoutDirection(int);
+    method protected void setBaseAttributes(android.content.res.TypedArray, int, int);
+    field @Deprecated public static final int FILL_PARENT = -1; // 0xffffffff
+    field public static final int MATCH_PARENT = -1; // 0xffffffff
+    field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+    field public int height;
+    field public android.view.animation.LayoutAnimationController.AnimationParameters layoutAnimationParameters;
+    field public int width;
+  }
+
+  public static class ViewGroup.MarginLayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor public ViewGroup.MarginLayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ViewGroup.MarginLayoutParams(int, int);
+    ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getLayoutDirection();
+    method public int getMarginEnd();
+    method public int getMarginStart();
+    method public boolean isMarginRelative();
+    method public void setLayoutDirection(int);
+    method public void setMarginEnd(int);
+    method public void setMarginStart(int);
+    method public void setMargins(int, int, int, int);
+    field public int bottomMargin;
+    field public int leftMargin;
+    field public int rightMargin;
+    field public int topMargin;
+  }
+
+  public static interface ViewGroup.OnHierarchyChangeListener {
+    method public void onChildViewAdded(android.view.View, android.view.View);
+    method public void onChildViewRemoved(android.view.View, android.view.View);
+  }
+
+  public class ViewGroupOverlay extends android.view.ViewOverlay {
+    method public void add(@NonNull android.view.View);
+    method public void remove(@NonNull android.view.View);
+  }
+
+  public interface ViewManager {
+    method public void addView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void removeView(android.view.View);
+    method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams);
+  }
+
+  public abstract class ViewOutlineProvider {
+    ctor public ViewOutlineProvider();
+    method public abstract void getOutline(android.view.View, android.graphics.Outline);
+    field public static final android.view.ViewOutlineProvider BACKGROUND;
+    field public static final android.view.ViewOutlineProvider BOUNDS;
+    field public static final android.view.ViewOutlineProvider PADDED_BOUNDS;
+  }
+
+  public class ViewOverlay {
+    method public void add(@NonNull android.graphics.drawable.Drawable);
+    method public void clear();
+    method public void remove(@NonNull android.graphics.drawable.Drawable);
+  }
+
+  public interface ViewParent {
+    method public void bringChildToFront(android.view.View);
+    method public boolean canResolveLayoutDirection();
+    method public boolean canResolveTextAlignment();
+    method public boolean canResolveTextDirection();
+    method public void childDrawableStateChanged(android.view.View);
+    method public void childHasTransientStateChanged(android.view.View, boolean);
+    method public void clearChildFocus(android.view.View);
+    method public void createContextMenu(android.view.ContextMenu);
+    method public android.view.View focusSearch(android.view.View, int);
+    method public void focusableViewAvailable(android.view.View);
+    method public boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point);
+    method public int getLayoutDirection();
+    method public android.view.ViewParent getParent();
+    method public android.view.ViewParent getParentForAccessibility();
+    method public int getTextAlignment();
+    method public int getTextDirection();
+    method @Deprecated public void invalidateChild(android.view.View, android.graphics.Rect);
+    method @Deprecated public android.view.ViewParent invalidateChildInParent(int[], android.graphics.Rect);
+    method public boolean isLayoutDirectionResolved();
+    method public boolean isLayoutRequested();
+    method public boolean isTextAlignmentResolved();
+    method public boolean isTextDirectionResolved();
+    method public android.view.View keyboardNavigationClusterSearch(android.view.View, int);
+    method public void notifySubtreeAccessibilityStateChanged(android.view.View, @NonNull android.view.View, int);
+    method public default void onDescendantInvalidated(@NonNull android.view.View, @NonNull android.view.View);
+    method public boolean onNestedFling(android.view.View, float, float, boolean);
+    method public boolean onNestedPreFling(android.view.View, float, float);
+    method public boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public void onNestedScroll(android.view.View, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public void onStopNestedScroll(android.view.View);
+    method public void recomputeViewAttributes(android.view.View);
+    method public void requestChildFocus(android.view.View, android.view.View);
+    method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
+    method public void requestDisallowInterceptTouchEvent(boolean);
+    method public void requestFitSystemWindows();
+    method public void requestLayout();
+    method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public void requestTransparentRegion(android.view.View);
+    method public boolean showContextMenuForChild(android.view.View);
+    method public boolean showContextMenuForChild(android.view.View, float, float);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback, int);
+  }
+
+  public class ViewPropertyAnimator {
+    method public android.view.ViewPropertyAnimator alpha(@FloatRange(from=0.0f, to=1.0f) float);
+    method public android.view.ViewPropertyAnimator alphaBy(float);
+    method public void cancel();
+    method public long getDuration();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public long getStartDelay();
+    method public android.view.ViewPropertyAnimator rotation(float);
+    method public android.view.ViewPropertyAnimator rotationBy(float);
+    method public android.view.ViewPropertyAnimator rotationX(float);
+    method public android.view.ViewPropertyAnimator rotationXBy(float);
+    method public android.view.ViewPropertyAnimator rotationY(float);
+    method public android.view.ViewPropertyAnimator rotationYBy(float);
+    method public android.view.ViewPropertyAnimator scaleX(float);
+    method public android.view.ViewPropertyAnimator scaleXBy(float);
+    method public android.view.ViewPropertyAnimator scaleY(float);
+    method public android.view.ViewPropertyAnimator scaleYBy(float);
+    method public android.view.ViewPropertyAnimator setDuration(long);
+    method public android.view.ViewPropertyAnimator setInterpolator(android.animation.TimeInterpolator);
+    method public android.view.ViewPropertyAnimator setListener(android.animation.Animator.AnimatorListener);
+    method public android.view.ViewPropertyAnimator setStartDelay(long);
+    method public android.view.ViewPropertyAnimator setUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
+    method public void start();
+    method public android.view.ViewPropertyAnimator translationX(float);
+    method public android.view.ViewPropertyAnimator translationXBy(float);
+    method public android.view.ViewPropertyAnimator translationY(float);
+    method public android.view.ViewPropertyAnimator translationYBy(float);
+    method public android.view.ViewPropertyAnimator translationZ(float);
+    method public android.view.ViewPropertyAnimator translationZBy(float);
+    method public android.view.ViewPropertyAnimator withEndAction(Runnable);
+    method public android.view.ViewPropertyAnimator withLayer();
+    method public android.view.ViewPropertyAnimator withStartAction(Runnable);
+    method public android.view.ViewPropertyAnimator x(float);
+    method public android.view.ViewPropertyAnimator xBy(float);
+    method public android.view.ViewPropertyAnimator y(float);
+    method public android.view.ViewPropertyAnimator yBy(float);
+    method public android.view.ViewPropertyAnimator z(float);
+    method public android.view.ViewPropertyAnimator zBy(float);
+  }
+
+  public abstract class ViewStructure {
+    ctor public ViewStructure();
+    method public abstract int addChildCount(int);
+    method public abstract void asyncCommit();
+    method public abstract android.view.ViewStructure asyncNewChild(int);
+    method @Nullable public abstract android.view.autofill.AutofillId getAutofillId();
+    method public abstract int getChildCount();
+    method public abstract android.os.Bundle getExtras();
+    method public abstract CharSequence getHint();
+    method public abstract CharSequence getText();
+    method public abstract int getTextSelectionEnd();
+    method public abstract int getTextSelectionStart();
+    method public abstract boolean hasExtras();
+    method public abstract android.view.ViewStructure newChild(int);
+    method public abstract android.view.ViewStructure.HtmlInfo.Builder newHtmlInfoBuilder(@NonNull String);
+    method public abstract void setAccessibilityFocused(boolean);
+    method public abstract void setActivated(boolean);
+    method public abstract void setAlpha(float);
+    method public abstract void setAutofillHints(@Nullable String[]);
+    method public abstract void setAutofillId(@NonNull android.view.autofill.AutofillId);
+    method public abstract void setAutofillId(@NonNull android.view.autofill.AutofillId, int);
+    method public abstract void setAutofillOptions(CharSequence[]);
+    method public abstract void setAutofillType(int);
+    method public abstract void setAutofillValue(android.view.autofill.AutofillValue);
+    method public abstract void setCheckable(boolean);
+    method public abstract void setChecked(boolean);
+    method public abstract void setChildCount(int);
+    method public abstract void setClassName(String);
+    method public abstract void setClickable(boolean);
+    method public abstract void setContentDescription(CharSequence);
+    method public abstract void setContextClickable(boolean);
+    method public abstract void setDataIsSensitive(boolean);
+    method public abstract void setDimens(int, int, int, int, int, int);
+    method public abstract void setElevation(float);
+    method public abstract void setEnabled(boolean);
+    method public abstract void setFocusable(boolean);
+    method public abstract void setFocused(boolean);
+    method public abstract void setHint(CharSequence);
+    method public void setHintIdEntry(@NonNull String);
+    method public abstract void setHtmlInfo(@NonNull android.view.ViewStructure.HtmlInfo);
+    method public abstract void setId(int, String, String, String);
+    method public void setImportantForAutofill(int);
+    method public abstract void setInputType(int);
+    method public abstract void setLocaleList(android.os.LocaleList);
+    method public abstract void setLongClickable(boolean);
+    method public void setMaxTextEms(int);
+    method public void setMaxTextLength(int);
+    method public void setMinTextEms(int);
+    method public abstract void setOpaque(boolean);
+    method public void setReceiveContentMimeTypes(@Nullable String[]);
+    method public abstract void setSelected(boolean);
+    method public abstract void setText(CharSequence);
+    method public abstract void setText(CharSequence, int, int);
+    method public void setTextIdEntry(@NonNull String);
+    method public abstract void setTextLines(int[], int[]);
+    method public abstract void setTextStyle(float, int, int, int);
+    method public abstract void setTransformation(android.graphics.Matrix);
+    method public abstract void setVisibility(int);
+    method public abstract void setWebDomain(@Nullable String);
+  }
+
+  public abstract static class ViewStructure.HtmlInfo {
+    ctor public ViewStructure.HtmlInfo();
+    method @Nullable public abstract java.util.List<android.util.Pair<java.lang.String,java.lang.String>> getAttributes();
+    method @NonNull public abstract String getTag();
+  }
+
+  public abstract static class ViewStructure.HtmlInfo.Builder {
+    ctor public ViewStructure.HtmlInfo.Builder();
+    method public abstract android.view.ViewStructure.HtmlInfo.Builder addAttribute(@NonNull String, @NonNull String);
+    method public abstract android.view.ViewStructure.HtmlInfo build();
+  }
+
+  @android.widget.RemoteViews.RemoteView public final class ViewStub extends android.view.View {
+    ctor public ViewStub(android.content.Context);
+    ctor public ViewStub(android.content.Context, @LayoutRes int);
+    ctor public ViewStub(android.content.Context, android.util.AttributeSet);
+    ctor public ViewStub(android.content.Context, android.util.AttributeSet, int);
+    ctor public ViewStub(android.content.Context, android.util.AttributeSet, int, int);
+    method @IdRes public int getInflatedId();
+    method public android.view.LayoutInflater getLayoutInflater();
+    method @LayoutRes public int getLayoutResource();
+    method public android.view.View inflate();
+    method public void setInflatedId(@IdRes int);
+    method public void setLayoutInflater(android.view.LayoutInflater);
+    method public void setLayoutResource(@LayoutRes int);
+    method public void setOnInflateListener(android.view.ViewStub.OnInflateListener);
+  }
+
+  public static interface ViewStub.OnInflateListener {
+    method public void onInflate(android.view.ViewStub, android.view.View);
+  }
+
+  public final class ViewTreeObserver {
+    method public void addOnDrawListener(android.view.ViewTreeObserver.OnDrawListener);
+    method public void addOnGlobalFocusChangeListener(android.view.ViewTreeObserver.OnGlobalFocusChangeListener);
+    method public void addOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
+    method public void addOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
+    method public void addOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+    method public void addOnSystemGestureExclusionRectsChangedListener(@NonNull java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
+    method public void addOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
+    method public void addOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
+    method public void addOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
+    method public void dispatchOnDraw();
+    method public void dispatchOnGlobalLayout();
+    method public boolean dispatchOnPreDraw();
+    method public boolean isAlive();
+    method public void registerFrameCommitCallback(@NonNull Runnable);
+    method @Deprecated public void removeGlobalOnLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
+    method public void removeOnDrawListener(android.view.ViewTreeObserver.OnDrawListener);
+    method public void removeOnGlobalFocusChangeListener(android.view.ViewTreeObserver.OnGlobalFocusChangeListener);
+    method public void removeOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
+    method public void removeOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
+    method public void removeOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+    method public void removeOnSystemGestureExclusionRectsChangedListener(@NonNull java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
+    method public void removeOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
+    method public void removeOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
+    method public void removeOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
+    method public boolean unregisterFrameCommitCallback(@NonNull Runnable);
+  }
+
+  public static interface ViewTreeObserver.OnDrawListener {
+    method public void onDraw();
+  }
+
+  public static interface ViewTreeObserver.OnGlobalFocusChangeListener {
+    method public void onGlobalFocusChanged(android.view.View, android.view.View);
+  }
+
+  public static interface ViewTreeObserver.OnGlobalLayoutListener {
+    method public void onGlobalLayout();
+  }
+
+  public static interface ViewTreeObserver.OnPreDrawListener {
+    method public boolean onPreDraw();
+  }
+
+  public static interface ViewTreeObserver.OnScrollChangedListener {
+    method public void onScrollChanged();
+  }
+
+  public static interface ViewTreeObserver.OnTouchModeChangeListener {
+    method public void onTouchModeChanged(boolean);
+  }
+
+  public static interface ViewTreeObserver.OnWindowAttachListener {
+    method public void onWindowAttached();
+    method public void onWindowDetached();
+  }
+
+  public static interface ViewTreeObserver.OnWindowFocusChangeListener {
+    method public void onWindowFocusChanged(boolean);
+  }
+
+  public abstract class Window {
+    ctor public Window(@UiContext android.content.Context);
+    method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void addFlags(int);
+    method public final void addOnFrameMetricsAvailableListener(@NonNull android.view.Window.OnFrameMetricsAvailableListener, android.os.Handler);
+    method public void clearFlags(int);
+    method public abstract void closeAllPanels();
+    method public abstract void closePanel(int);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method public boolean getAllowEnterTransitionOverlap();
+    method public boolean getAllowReturnTransitionOverlap();
+    method public final android.view.WindowManager.LayoutParams getAttributes();
+    method public final android.view.Window.Callback getCallback();
+    method public int getColorMode();
+    method public final android.view.Window getContainer();
+    method public android.transition.Scene getContentScene();
+    method @UiContext public final android.content.Context getContext();
+    method @Nullable public abstract android.view.View getCurrentFocus();
+    method @NonNull public abstract android.view.View getDecorView();
+    method public static int getDefaultFeatures(android.content.Context);
+    method public android.transition.Transition getEnterTransition();
+    method public android.transition.Transition getExitTransition();
+    method protected final int getFeatures();
+    method protected final int getForcedWindowFlags();
+    method @Nullable public android.view.WindowInsetsController getInsetsController();
+    method @NonNull public abstract android.view.LayoutInflater getLayoutInflater();
+    method protected final int getLocalFeatures();
+    method public android.media.session.MediaController getMediaController();
+    method @ColorInt public abstract int getNavigationBarColor();
+    method @ColorInt public int getNavigationBarDividerColor();
+    method public android.transition.Transition getReenterTransition();
+    method public android.transition.Transition getReturnTransition();
+    method @Nullable public android.view.AttachedSurfaceControl getRootSurfaceControl();
+    method public android.transition.Transition getSharedElementEnterTransition();
+    method public android.transition.Transition getSharedElementExitTransition();
+    method public android.transition.Transition getSharedElementReenterTransition();
+    method public android.transition.Transition getSharedElementReturnTransition();
+    method public boolean getSharedElementsUseOverlay();
+    method @ColorInt public abstract int getStatusBarColor();
+    method @NonNull public java.util.List<android.graphics.Rect> getSystemGestureExclusionRects();
+    method public long getTransitionBackgroundFadeDuration();
+    method public android.transition.TransitionManager getTransitionManager();
+    method public abstract int getVolumeControlStream();
+    method public android.view.WindowManager getWindowManager();
+    method public final android.content.res.TypedArray getWindowStyle();
+    method public final boolean hasChildren();
+    method public boolean hasFeature(int);
+    method protected final boolean hasSoftInputMode();
+    method public void injectInputEvent(android.view.InputEvent);
+    method public abstract void invalidatePanelMenu(int);
+    method public final boolean isActive();
+    method public abstract boolean isFloating();
+    method public boolean isNavigationBarContrastEnforced();
+    method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+    method public boolean isStatusBarContrastEnforced();
+    method public boolean isWideColorGamut();
+    method public final void makeActive();
+    method protected abstract void onActive();
+    method public abstract void onConfigurationChanged(android.content.res.Configuration);
+    method public abstract void openPanel(int, android.view.KeyEvent);
+    method public abstract android.view.View peekDecorView();
+    method public abstract boolean performContextMenuIdentifierAction(int, int);
+    method public abstract boolean performPanelIdentifierAction(int, int, int);
+    method public abstract boolean performPanelShortcut(int, int, android.view.KeyEvent, int);
+    method public void registerScrollCaptureCallback(@NonNull android.view.ScrollCaptureCallback);
+    method public final void removeOnFrameMetricsAvailableListener(android.view.Window.OnFrameMetricsAvailableListener);
+    method public boolean requestFeature(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public abstract void restoreHierarchyState(android.os.Bundle);
+    method public abstract android.os.Bundle saveHierarchyState();
+    method public void setAllowEnterTransitionOverlap(boolean);
+    method public void setAllowReturnTransitionOverlap(boolean);
+    method public void setAttributes(android.view.WindowManager.LayoutParams);
+    method public void setBackgroundBlurRadius(int);
+    method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setBackgroundDrawableResource(@DrawableRes int);
+    method public void setCallback(android.view.Window.Callback);
+    method public abstract void setChildDrawable(int, android.graphics.drawable.Drawable);
+    method public abstract void setChildInt(int, int);
+    method public void setClipToOutline(boolean);
+    method public void setColorMode(int);
+    method public void setContainer(android.view.Window);
+    method public abstract void setContentView(@LayoutRes int);
+    method public abstract void setContentView(android.view.View);
+    method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public abstract void setDecorCaptionShade(int);
+    method public void setDecorFitsSystemWindows(boolean);
+    method protected void setDefaultWindowFormat(int);
+    method public void setDimAmount(float);
+    method public void setElevation(float);
+    method public void setEnterTransition(android.transition.Transition);
+    method public void setExitTransition(android.transition.Transition);
+    method public abstract void setFeatureDrawable(int, android.graphics.drawable.Drawable);
+    method public abstract void setFeatureDrawableAlpha(int, int);
+    method public abstract void setFeatureDrawableResource(int, @DrawableRes int);
+    method public abstract void setFeatureDrawableUri(int, android.net.Uri);
+    method public abstract void setFeatureInt(int, int);
+    method public void setFlags(int, int);
+    method public void setFormat(int);
+    method public void setGravity(int);
+    method @RequiresPermission(android.Manifest.permission.HIDE_OVERLAY_WINDOWS) public final void setHideOverlayWindows(boolean);
+    method public void setIcon(@DrawableRes int);
+    method public void setLayout(int, int);
+    method public void setLocalFocus(boolean, boolean);
+    method public void setLogo(@DrawableRes int);
+    method public void setMediaController(android.media.session.MediaController);
+    method public abstract void setNavigationBarColor(@ColorInt int);
+    method public void setNavigationBarContrastEnforced(boolean);
+    method public void setNavigationBarDividerColor(@ColorInt int);
+    method public void setPreferMinimalPostProcessing(boolean);
+    method public void setReenterTransition(android.transition.Transition);
+    method public abstract void setResizingCaptionDrawable(android.graphics.drawable.Drawable);
+    method public final void setRestrictedCaptionAreaListener(android.view.Window.OnRestrictedCaptionAreaChangedListener);
+    method public void setReturnTransition(android.transition.Transition);
+    method public void setSharedElementEnterTransition(android.transition.Transition);
+    method public void setSharedElementExitTransition(android.transition.Transition);
+    method public void setSharedElementReenterTransition(android.transition.Transition);
+    method public void setSharedElementReturnTransition(android.transition.Transition);
+    method public void setSharedElementsUseOverlay(boolean);
+    method public void setSoftInputMode(int);
+    method public abstract void setStatusBarColor(@ColorInt int);
+    method public void setStatusBarContrastEnforced(boolean);
+    method public void setSustainedPerformanceMode(boolean);
+    method public void setSystemGestureExclusionRects(@NonNull java.util.List<android.graphics.Rect>);
+    method public abstract void setTitle(CharSequence);
+    method @Deprecated public abstract void setTitleColor(@ColorInt int);
+    method public void setTransitionBackgroundFadeDuration(long);
+    method public void setTransitionManager(android.transition.TransitionManager);
+    method public void setType(int);
+    method public void setUiOptions(int);
+    method public void setUiOptions(int, int);
+    method public abstract void setVolumeControlStream(int);
+    method public void setWindowAnimations(@StyleRes int);
+    method public void setWindowManager(android.view.WindowManager, android.os.IBinder, String);
+    method public void setWindowManager(android.view.WindowManager, android.os.IBinder, String, boolean);
+    method public abstract boolean superDispatchGenericMotionEvent(android.view.MotionEvent);
+    method public abstract boolean superDispatchKeyEvent(android.view.KeyEvent);
+    method public abstract boolean superDispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public abstract boolean superDispatchTouchEvent(android.view.MotionEvent);
+    method public abstract boolean superDispatchTrackballEvent(android.view.MotionEvent);
+    method public abstract void takeInputQueue(android.view.InputQueue.Callback);
+    method public abstract void takeKeyEvents(boolean);
+    method public abstract void takeSurface(android.view.SurfaceHolder.Callback2);
+    method public abstract void togglePanel(int, android.view.KeyEvent);
+    method public void unregisterScrollCaptureCallback(@NonNull android.view.ScrollCaptureCallback);
+    field public static final int DECOR_CAPTION_SHADE_AUTO = 0; // 0x0
+    field public static final int DECOR_CAPTION_SHADE_DARK = 2; // 0x2
+    field public static final int DECOR_CAPTION_SHADE_LIGHT = 1; // 0x1
+    field @Deprecated protected static final int DEFAULT_FEATURES = 65; // 0x41
+    field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+    field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+    field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+    field public static final int FEATURE_ACTIVITY_TRANSITIONS = 13; // 0xd
+    field public static final int FEATURE_CONTENT_TRANSITIONS = 12; // 0xc
+    field public static final int FEATURE_CONTEXT_MENU = 6; // 0x6
+    field public static final int FEATURE_CUSTOM_TITLE = 7; // 0x7
+    field @Deprecated public static final int FEATURE_INDETERMINATE_PROGRESS = 5; // 0x5
+    field public static final int FEATURE_LEFT_ICON = 3; // 0x3
+    field public static final int FEATURE_NO_TITLE = 1; // 0x1
+    field public static final int FEATURE_OPTIONS_PANEL = 0; // 0x0
+    field @Deprecated public static final int FEATURE_PROGRESS = 2; // 0x2
+    field public static final int FEATURE_RIGHT_ICON = 4; // 0x4
+    field @Deprecated public static final int FEATURE_SWIPE_TO_DISMISS = 11; // 0xb
+    field public static final int ID_ANDROID_CONTENT = 16908290; // 0x1020002
+    field public static final String NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME = "android:navigation:background";
+    field @Deprecated public static final int PROGRESS_END = 10000; // 0x2710
+    field @Deprecated public static final int PROGRESS_INDETERMINATE_OFF = -4; // 0xfffffffc
+    field @Deprecated public static final int PROGRESS_INDETERMINATE_ON = -3; // 0xfffffffd
+    field @Deprecated public static final int PROGRESS_SECONDARY_END = 30000; // 0x7530
+    field @Deprecated public static final int PROGRESS_SECONDARY_START = 20000; // 0x4e20
+    field @Deprecated public static final int PROGRESS_START = 0; // 0x0
+    field @Deprecated public static final int PROGRESS_VISIBILITY_OFF = -2; // 0xfffffffe
+    field @Deprecated public static final int PROGRESS_VISIBILITY_ON = -1; // 0xffffffff
+    field public static final String STATUS_BAR_BACKGROUND_TRANSITION_NAME = "android:status:background";
+  }
+
+  public static interface Window.Callback {
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public void onActionModeFinished(android.view.ActionMode);
+    method public void onActionModeStarted(android.view.ActionMode);
+    method public void onAttachedToWindow();
+    method public void onContentChanged();
+    method public boolean onCreatePanelMenu(int, @NonNull android.view.Menu);
+    method @Nullable public android.view.View onCreatePanelView(int);
+    method public void onDetachedFromWindow();
+    method public boolean onMenuItemSelected(int, @NonNull android.view.MenuItem);
+    method public boolean onMenuOpened(int, @NonNull android.view.Menu);
+    method public void onPanelClosed(int, @NonNull android.view.Menu);
+    method public default void onPointerCaptureChanged(boolean);
+    method public boolean onPreparePanel(int, @Nullable android.view.View, @NonNull android.view.Menu);
+    method public default void onProvideKeyboardShortcuts(java.util.List<android.view.KeyboardShortcutGroup>, @Nullable android.view.Menu, int);
+    method public boolean onSearchRequested();
+    method public boolean onSearchRequested(android.view.SearchEvent);
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+  }
+
+  public static interface Window.OnFrameMetricsAvailableListener {
+    method public void onFrameMetricsAvailable(android.view.Window, android.view.FrameMetrics, int);
+  }
+
+  public static interface Window.OnRestrictedCaptionAreaChangedListener {
+    method public void onRestrictedCaptionAreaChanged(android.graphics.Rect);
+  }
+
+  public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowAnimationFrameStats> CREATOR;
+  }
+
+  public final class WindowContentFrameStats extends android.view.FrameStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getFramePostedTimeNano(int);
+    method public long getFrameReadyTimeNano(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowContentFrameStats> CREATOR;
+  }
+
+  public class WindowId implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isFocused();
+    method public void registerFocusObserver(android.view.WindowId.FocusObserver);
+    method public void unregisterFocusObserver(android.view.WindowId.FocusObserver);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowId> CREATOR;
+  }
+
+  public abstract static class WindowId.FocusObserver {
+    ctor public WindowId.FocusObserver();
+    method public abstract void onFocusGained(android.view.WindowId);
+    method public abstract void onFocusLost(android.view.WindowId);
+  }
+
+  public final class WindowInsets {
+    ctor public WindowInsets(android.view.WindowInsets);
+    method @Deprecated @NonNull public android.view.WindowInsets consumeDisplayCutout();
+    method @Deprecated @NonNull public android.view.WindowInsets consumeStableInsets();
+    method @Deprecated @NonNull public android.view.WindowInsets consumeSystemWindowInsets();
+    method @Nullable public android.view.DisplayCutout getDisplayCutout();
+    method @NonNull public android.graphics.Insets getInsets(int);
+    method @NonNull public android.graphics.Insets getInsetsIgnoringVisibility(int);
+    method @Deprecated @NonNull public android.graphics.Insets getMandatorySystemGestureInsets();
+    method @Nullable public android.graphics.Rect getPrivacyIndicatorBounds();
+    method @Nullable public android.view.RoundedCorner getRoundedCorner(int);
+    method @Deprecated public int getStableInsetBottom();
+    method @Deprecated public int getStableInsetLeft();
+    method @Deprecated public int getStableInsetRight();
+    method @Deprecated public int getStableInsetTop();
+    method @Deprecated @NonNull public android.graphics.Insets getStableInsets();
+    method @Deprecated @NonNull public android.graphics.Insets getSystemGestureInsets();
+    method @Deprecated public int getSystemWindowInsetBottom();
+    method @Deprecated public int getSystemWindowInsetLeft();
+    method @Deprecated public int getSystemWindowInsetRight();
+    method @Deprecated public int getSystemWindowInsetTop();
+    method @Deprecated @NonNull public android.graphics.Insets getSystemWindowInsets();
+    method @Deprecated @NonNull public android.graphics.Insets getTappableElementInsets();
+    method public boolean hasInsets();
+    method @Deprecated public boolean hasStableInsets();
+    method @Deprecated public boolean hasSystemWindowInsets();
+    method @NonNull public android.view.WindowInsets inset(@NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean isConsumed();
+    method public boolean isRound();
+    method public boolean isVisible(int);
+    method @Deprecated @NonNull public android.view.WindowInsets replaceSystemWindowInsets(int, int, int, int);
+    method @Deprecated @NonNull public android.view.WindowInsets replaceSystemWindowInsets(android.graphics.Rect);
+    field @NonNull public static final android.view.WindowInsets CONSUMED;
+  }
+
+  public static final class WindowInsets.Builder {
+    ctor public WindowInsets.Builder();
+    ctor public WindowInsets.Builder(@NonNull android.view.WindowInsets);
+    method @NonNull public android.view.WindowInsets build();
+    method @NonNull public android.view.WindowInsets.Builder setDisplayCutout(@Nullable android.view.DisplayCutout);
+    method @NonNull public android.view.WindowInsets.Builder setInsets(int, @NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets.Builder setInsetsIgnoringVisibility(int, @NonNull android.graphics.Insets) throws java.lang.IllegalArgumentException;
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setMandatorySystemGestureInsets(@NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets.Builder setPrivacyIndicatorBounds(@Nullable android.graphics.Rect);
+    method @NonNull public android.view.WindowInsets.Builder setRoundedCorner(int, @Nullable android.view.RoundedCorner);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setStableInsets(@NonNull android.graphics.Insets);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setSystemGestureInsets(@NonNull android.graphics.Insets);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setSystemWindowInsets(@NonNull android.graphics.Insets);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setTappableElementInsets(@NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets.Builder setVisible(int, boolean);
+  }
+
+  public static final class WindowInsets.Side {
+    method public static int all();
+    field public static final int BOTTOM = 8; // 0x8
+    field public static final int LEFT = 1; // 0x1
+    field public static final int RIGHT = 4; // 0x4
+    field public static final int TOP = 2; // 0x2
+  }
+
+  public static final class WindowInsets.Type {
+    method public static int captionBar();
+    method public static int displayCutout();
+    method public static int ime();
+    method public static int mandatorySystemGestures();
+    method public static int navigationBars();
+    method public static int statusBars();
+    method public static int systemBars();
+    method public static int systemGestures();
+    method public static int tappableElement();
+  }
+
+  public final class WindowInsetsAnimation {
+    ctor public WindowInsetsAnimation(int, @Nullable android.view.animation.Interpolator, long);
+    method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
+    method public long getDurationMillis();
+    method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
+    method public float getInterpolatedFraction();
+    method @Nullable public android.view.animation.Interpolator getInterpolator();
+    method public int getTypeMask();
+    method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
+    method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
+  }
+
+  public static final class WindowInsetsAnimation.Bounds {
+    ctor public WindowInsetsAnimation.Bounds(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method @NonNull public android.graphics.Insets getLowerBound();
+    method @NonNull public android.graphics.Insets getUpperBound();
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds inset(@NonNull android.graphics.Insets);
+  }
+
+  public abstract static class WindowInsetsAnimation.Callback {
+    ctor public WindowInsetsAnimation.Callback(int);
+    method public final int getDispatchMode();
+    method public void onEnd(@NonNull android.view.WindowInsetsAnimation);
+    method public void onPrepare(@NonNull android.view.WindowInsetsAnimation);
+    method @NonNull public abstract android.view.WindowInsets onProgress(@NonNull android.view.WindowInsets, @NonNull java.util.List<android.view.WindowInsetsAnimation>);
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds onStart(@NonNull android.view.WindowInsetsAnimation, @NonNull android.view.WindowInsetsAnimation.Bounds);
+    field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
+    field public static final int DISPATCH_MODE_STOP = 0; // 0x0
+  }
+
+  public interface WindowInsetsAnimationControlListener {
+    method public void onCancelled(@Nullable android.view.WindowInsetsAnimationController);
+    method public void onFinished(@NonNull android.view.WindowInsetsAnimationController);
+    method public void onReady(@NonNull android.view.WindowInsetsAnimationController, int);
+  }
+
+  public interface WindowInsetsAnimationController {
+    method public void finish(boolean);
+    method public float getCurrentAlpha();
+    method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
+    method @NonNull public android.graphics.Insets getCurrentInsets();
+    method @NonNull public android.graphics.Insets getHiddenStateInsets();
+    method @NonNull public android.graphics.Insets getShownStateInsets();
+    method public int getTypes();
+    method public boolean isCancelled();
+    method public boolean isFinished();
+    method public default boolean isReady();
+    method public void setInsetsAndAlpha(@Nullable android.graphics.Insets, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
+  }
+
+  public interface WindowInsetsController {
+    method public void addOnControllableInsetsChangedListener(@NonNull android.view.WindowInsetsController.OnControllableInsetsChangedListener);
+    method public void controlWindowInsetsAnimation(int, long, @Nullable android.view.animation.Interpolator, @Nullable android.os.CancellationSignal, @NonNull android.view.WindowInsetsAnimationControlListener);
+    method public int getSystemBarsAppearance();
+    method public int getSystemBarsBehavior();
+    method public void hide(int);
+    method public void removeOnControllableInsetsChangedListener(@NonNull android.view.WindowInsetsController.OnControllableInsetsChangedListener);
+    method public void setSystemBarsAppearance(int, int);
+    method public void setSystemBarsBehavior(int);
+    method public void show(int);
+    field public static final int APPEARANCE_LIGHT_NAVIGATION_BARS = 16; // 0x10
+    field public static final int APPEARANCE_LIGHT_STATUS_BARS = 8; // 0x8
+    field public static final int BEHAVIOR_DEFAULT = 1; // 0x1
+    field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
+    field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
+    field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
+  }
+
+  public static interface WindowInsetsController.OnControllableInsetsChangedListener {
+    method public void onControllableInsetsChanged(@NonNull android.view.WindowInsetsController, int);
+  }
+
+  public interface WindowManager extends android.view.ViewManager {
+    method public default void addCrossWindowBlurEnabledListener(@NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method public default void addCrossWindowBlurEnabledListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @NonNull public default android.view.WindowMetrics getCurrentWindowMetrics();
+    method @Deprecated public android.view.Display getDefaultDisplay();
+    method @NonNull public default android.view.WindowMetrics getMaximumWindowMetrics();
+    method public default boolean isCrossWindowBlurEnabled();
+    method public default void removeCrossWindowBlurEnabledListener(@NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method public void removeViewImmediate(android.view.View);
+  }
+
+  public static class WindowManager.BadTokenException extends java.lang.RuntimeException {
+    ctor public WindowManager.BadTokenException();
+    ctor public WindowManager.BadTokenException(String);
+  }
+
+  public static class WindowManager.InvalidDisplayException extends java.lang.RuntimeException {
+    ctor public WindowManager.InvalidDisplayException();
+    ctor public WindowManager.InvalidDisplayException(String);
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    ctor public WindowManager.LayoutParams();
+    ctor public WindowManager.LayoutParams(int);
+    ctor public WindowManager.LayoutParams(int, int);
+    ctor public WindowManager.LayoutParams(int, int, int);
+    ctor public WindowManager.LayoutParams(int, int, int, int, int);
+    ctor public WindowManager.LayoutParams(int, int, int, int, int, int, int);
+    ctor public WindowManager.LayoutParams(android.os.Parcel);
+    method public final int copyFrom(android.view.WindowManager.LayoutParams);
+    method public String debug(String);
+    method public int describeContents();
+    method public int getBlurBehindRadius();
+    method public int getColorMode();
+    method public int getFitInsetsSides();
+    method public int getFitInsetsTypes();
+    method public final CharSequence getTitle();
+    method public boolean isFitInsetsIgnoringVisibility();
+    method public static boolean mayUseInputMethod(int);
+    method public void setBlurBehindRadius(@IntRange(from=0) int);
+    method public void setColorMode(int);
+    method public void setFitInsetsIgnoringVisibility(boolean);
+    method public void setFitInsetsSides(int);
+    method public void setFitInsetsTypes(int);
+    method public final void setTitle(CharSequence);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALPHA_CHANGED = 128; // 0x80
+    field public static final int ANIMATION_CHANGED = 16; // 0x10
+    field public static final float BRIGHTNESS_OVERRIDE_FULL = 1.0f;
+    field public static final float BRIGHTNESS_OVERRIDE_NONE = -1.0f;
+    field public static final float BRIGHTNESS_OVERRIDE_OFF = 0.0f;
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowManager.LayoutParams> CREATOR;
+    field public static final int DIM_AMOUNT_CHANGED = 32; // 0x20
+    field public static final int FIRST_APPLICATION_WINDOW = 1; // 0x1
+    field public static final int FIRST_SUB_WINDOW = 1000; // 0x3e8
+    field public static final int FIRST_SYSTEM_WINDOW = 2000; // 0x7d0
+    field public static final int FLAGS_CHANGED = 4; // 0x4
+    field public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 1; // 0x1
+    field public static final int FLAG_ALT_FOCUSABLE_IM = 131072; // 0x20000
+    field public static final int FLAG_BLUR_BEHIND = 4; // 0x4
+    field public static final int FLAG_DIM_BEHIND = 2; // 0x2
+    field @Deprecated public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
+    field @Deprecated public static final int FLAG_DITHER = 4096; // 0x1000
+    field public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = -2147483648; // 0x80000000
+    field @Deprecated public static final int FLAG_FORCE_NOT_FULLSCREEN = 2048; // 0x800
+    field @Deprecated public static final int FLAG_FULLSCREEN = 1024; // 0x400
+    field public static final int FLAG_HARDWARE_ACCELERATED = 16777216; // 0x1000000
+    field public static final int FLAG_IGNORE_CHEEK_PRESSES = 32768; // 0x8000
+    field public static final int FLAG_KEEP_SCREEN_ON = 128; // 0x80
+    field @Deprecated public static final int FLAG_LAYOUT_ATTACHED_IN_DECOR = 1073741824; // 0x40000000
+    field @Deprecated public static final int FLAG_LAYOUT_INSET_DECOR = 65536; // 0x10000
+    field @Deprecated public static final int FLAG_LAYOUT_IN_OVERSCAN = 33554432; // 0x2000000
+    field public static final int FLAG_LAYOUT_IN_SCREEN = 256; // 0x100
+    field public static final int FLAG_LAYOUT_NO_LIMITS = 512; // 0x200
+    field public static final int FLAG_LOCAL_FOCUS_MODE = 268435456; // 0x10000000
+    field public static final int FLAG_NOT_FOCUSABLE = 8; // 0x8
+    field public static final int FLAG_NOT_TOUCHABLE = 16; // 0x10
+    field public static final int FLAG_NOT_TOUCH_MODAL = 32; // 0x20
+    field public static final int FLAG_SCALED = 16384; // 0x4000
+    field public static final int FLAG_SECURE = 8192; // 0x2000
+    field public static final int FLAG_SHOW_WALLPAPER = 1048576; // 0x100000
+    field @Deprecated public static final int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
+    field public static final int FLAG_SPLIT_TOUCH = 8388608; // 0x800000
+    field @Deprecated public static final int FLAG_TOUCHABLE_WHEN_WAKING = 64; // 0x40
+    field @Deprecated public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728; // 0x8000000
+    field @Deprecated public static final int FLAG_TRANSLUCENT_STATUS = 67108864; // 0x4000000
+    field @Deprecated public static final int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
+    field public static final int FLAG_WATCH_OUTSIDE_TOUCH = 262144; // 0x40000
+    field public static final int FORMAT_CHANGED = 8; // 0x8
+    field public static final int LAST_APPLICATION_WINDOW = 99; // 0x63
+    field public static final int LAST_SUB_WINDOW = 1999; // 0x7cf
+    field public static final int LAST_SYSTEM_WINDOW = 2999; // 0xbb7
+    field public static final int LAYOUT_CHANGED = 1; // 0x1
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS = 3; // 0x3
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0; // 0x0
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2; // 0x2
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 1; // 0x1
+    field public static final int MEMORY_TYPE_CHANGED = 256; // 0x100
+    field @Deprecated public static final int MEMORY_TYPE_GPU = 2; // 0x2
+    field @Deprecated public static final int MEMORY_TYPE_HARDWARE = 1; // 0x1
+    field @Deprecated public static final int MEMORY_TYPE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int MEMORY_TYPE_PUSH_BUFFERS = 3; // 0x3
+    field public static final int ROTATION_ANIMATION_CHANGED = 4096; // 0x1000
+    field public static final int ROTATION_ANIMATION_CROSSFADE = 1; // 0x1
+    field public static final int ROTATION_ANIMATION_JUMPCUT = 2; // 0x2
+    field public static final int ROTATION_ANIMATION_ROTATE = 0; // 0x0
+    field public static final int ROTATION_ANIMATION_SEAMLESS = 3; // 0x3
+    field public static final int SCREEN_BRIGHTNESS_CHANGED = 2048; // 0x800
+    field public static final int SCREEN_ORIENTATION_CHANGED = 1024; // 0x400
+    field public static final int SOFT_INPUT_ADJUST_NOTHING = 48; // 0x30
+    field public static final int SOFT_INPUT_ADJUST_PAN = 32; // 0x20
+    field @Deprecated public static final int SOFT_INPUT_ADJUST_RESIZE = 16; // 0x10
+    field public static final int SOFT_INPUT_ADJUST_UNSPECIFIED = 0; // 0x0
+    field public static final int SOFT_INPUT_IS_FORWARD_NAVIGATION = 256; // 0x100
+    field public static final int SOFT_INPUT_MASK_ADJUST = 240; // 0xf0
+    field public static final int SOFT_INPUT_MASK_STATE = 15; // 0xf
+    field public static final int SOFT_INPUT_MODE_CHANGED = 512; // 0x200
+    field public static final int SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3; // 0x3
+    field public static final int SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5; // 0x5
+    field public static final int SOFT_INPUT_STATE_HIDDEN = 2; // 0x2
+    field public static final int SOFT_INPUT_STATE_UNCHANGED = 1; // 0x1
+    field public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0; // 0x0
+    field public static final int SOFT_INPUT_STATE_VISIBLE = 4; // 0x4
+    field public static final int TITLE_CHANGED = 64; // 0x40
+    field public static final int TYPE_ACCESSIBILITY_OVERLAY = 2032; // 0x7f0
+    field public static final int TYPE_APPLICATION = 2; // 0x2
+    field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb
+    field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9
+    field public static final int TYPE_APPLICATION_OVERLAY = 2038; // 0x7f6
+    field public static final int TYPE_APPLICATION_PANEL = 1000; // 0x3e8
+    field public static final int TYPE_APPLICATION_STARTING = 3; // 0x3
+    field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
+    field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
+    field public static final int TYPE_CHANGED = 2; // 0x2
+    field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
+    field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
+    field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
+    field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
+    field @Deprecated public static final int TYPE_PHONE = 2002; // 0x7d2
+    field @Deprecated public static final int TYPE_PRIORITY_PHONE = 2007; // 0x7d7
+    field public static final int TYPE_PRIVATE_PRESENTATION = 2030; // 0x7ee
+    field public static final int TYPE_SEARCH_BAR = 2001; // 0x7d1
+    field public static final int TYPE_STATUS_BAR = 2000; // 0x7d0
+    field @Deprecated public static final int TYPE_SYSTEM_ALERT = 2003; // 0x7d3
+    field public static final int TYPE_SYSTEM_DIALOG = 2008; // 0x7d8
+    field @Deprecated public static final int TYPE_SYSTEM_ERROR = 2010; // 0x7da
+    field @Deprecated public static final int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6
+    field @Deprecated public static final int TYPE_TOAST = 2005; // 0x7d5
+    field public static final int TYPE_WALLPAPER = 2013; // 0x7dd
+    field public float alpha;
+    field public float buttonBrightness;
+    field public float dimAmount;
+    field public int flags;
+    field public int format;
+    field public int gravity;
+    field public float horizontalMargin;
+    field public float horizontalWeight;
+    field public int layoutInDisplayCutoutMode;
+    field @Deprecated public int memoryType;
+    field public String packageName;
+    field public boolean preferMinimalPostProcessing;
+    field public int preferredDisplayModeId;
+    field @Deprecated public float preferredRefreshRate;
+    field public int rotationAnimation;
+    field public float screenBrightness;
+    field public int screenOrientation;
+    field public int softInputMode;
+    field @Deprecated public int systemUiVisibility;
+    field public android.os.IBinder token;
+    field public int type;
+    field public float verticalMargin;
+    field public float verticalWeight;
+    field public int windowAnimations;
+    field public int x;
+    field public int y;
+  }
+
+  public final class WindowMetrics {
+    ctor public WindowMetrics(@NonNull android.graphics.Rect, @NonNull android.view.WindowInsets);
+    method @NonNull public android.graphics.Rect getBounds();
+    method @NonNull public android.view.WindowInsets getWindowInsets();
+  }
+
+}
+
+package android.view.accessibility {
+
+  public final class AccessibilityEvent extends android.view.accessibility.AccessibilityRecord implements android.os.Parcelable {
+    ctor public AccessibilityEvent();
+    ctor public AccessibilityEvent(int);
+    ctor public AccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent);
+    method public void appendRecord(android.view.accessibility.AccessibilityRecord);
+    method public int describeContents();
+    method public static String eventTypeToString(int);
+    method public int getAction();
+    method public int getContentChangeTypes();
+    method public long getEventTime();
+    method public int getEventType();
+    method public int getMovementGranularity();
+    method public CharSequence getPackageName();
+    method public android.view.accessibility.AccessibilityRecord getRecord(int);
+    method public int getRecordCount();
+    method public int getWindowChanges();
+    method public void initFromParcel(android.os.Parcel);
+    method public static android.view.accessibility.AccessibilityEvent obtain(int);
+    method public static android.view.accessibility.AccessibilityEvent obtain(android.view.accessibility.AccessibilityEvent);
+    method public static android.view.accessibility.AccessibilityEvent obtain();
+    method public void setAction(int);
+    method public void setContentChangeTypes(int);
+    method public void setEventTime(long);
+    method public void setEventType(int);
+    method public void setMovementGranularity(int);
+    method public void setPackageName(CharSequence);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
+    field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+    field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+    field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+    field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
+    field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+    field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+    field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityEvent> CREATOR;
+    field public static final int INVALID_POSITION = -1; // 0xffffffff
+    field @Deprecated public static final int MAX_TEXT_LENGTH = 500; // 0x1f4
+    field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+    field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+    field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+    field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+    field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+    field public static final int TYPE_NOTIFICATION_STATE_CHANGED = 64; // 0x40
+    field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+    field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+    field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+    field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+    field public static final int TYPE_VIEW_CLICKED = 1; // 0x1
+    field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+    field public static final int TYPE_VIEW_FOCUSED = 8; // 0x8
+    field public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+    field public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+    field public static final int TYPE_VIEW_LONG_CLICKED = 2; // 0x2
+    field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+    field public static final int TYPE_VIEW_SELECTED = 4; // 0x4
+    field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10
+    field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+    field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+    field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+    field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+    field public static final int TYPE_WINDOW_STATE_CHANGED = 32; // 0x20
+    field public static final int WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED = 128; // 0x80
+    field public static final int WINDOWS_CHANGE_ACTIVE = 32; // 0x20
+    field public static final int WINDOWS_CHANGE_ADDED = 1; // 0x1
+    field public static final int WINDOWS_CHANGE_BOUNDS = 8; // 0x8
+    field public static final int WINDOWS_CHANGE_CHILDREN = 512; // 0x200
+    field public static final int WINDOWS_CHANGE_FOCUSED = 64; // 0x40
+    field public static final int WINDOWS_CHANGE_LAYER = 16; // 0x10
+    field public static final int WINDOWS_CHANGE_PARENT = 256; // 0x100
+    field public static final int WINDOWS_CHANGE_PIP = 1024; // 0x400
+    field public static final int WINDOWS_CHANGE_REMOVED = 2; // 0x2
+    field public static final int WINDOWS_CHANGE_TITLE = 4; // 0x4
+  }
+
+  public interface AccessibilityEventSource {
+    method public void sendAccessibilityEvent(int);
+    method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent);
+  }
+
+  public final class AccessibilityManager {
+    method public void addAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
+    method public boolean addAccessibilityStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+    method public void addAccessibilityStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, @Nullable android.os.Handler);
+    method public boolean addTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
+    method public void addTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener, @Nullable android.os.Handler);
+    method @ColorInt public int getAccessibilityFocusColor();
+    method public int getAccessibilityFocusStrokeWidth();
+    method @Deprecated public java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
+    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
+    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
+    method public int getRecommendedTimeoutMillis(int, int);
+    method public void interrupt();
+    method public static boolean isAccessibilityButtonSupported();
+    method public boolean isEnabled();
+    method public boolean isTouchExplorationEnabled();
+    method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
+    method public boolean removeAccessibilityStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+    method public boolean removeTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
+    method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    field public static final int FLAG_CONTENT_CONTROLS = 4; // 0x4
+    field public static final int FLAG_CONTENT_ICONS = 1; // 0x1
+    field public static final int FLAG_CONTENT_TEXT = 2; // 0x2
+  }
+
+  public static interface AccessibilityManager.AccessibilityStateChangeListener {
+    method public void onAccessibilityStateChanged(boolean);
+  }
+
+  public static interface AccessibilityManager.TouchExplorationStateChangeListener {
+    method public void onTouchExplorationStateChanged(boolean);
+  }
+
+  public class AccessibilityNodeInfo implements android.os.Parcelable {
+    ctor public AccessibilityNodeInfo();
+    ctor public AccessibilityNodeInfo(@NonNull android.view.View);
+    ctor public AccessibilityNodeInfo(@NonNull android.view.View, int);
+    ctor public AccessibilityNodeInfo(@NonNull android.view.accessibility.AccessibilityNodeInfo);
+    method public void addAction(android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction);
+    method @Deprecated public void addAction(int);
+    method public void addChild(android.view.View);
+    method public void addChild(android.view.View, int);
+    method public boolean canOpenPopup();
+    method public int describeContents();
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(String);
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId(@NonNull String);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method public android.view.accessibility.AccessibilityNodeInfo focusSearch(int);
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction> getActionList();
+    method @Deprecated public int getActions();
+    method public java.util.List<java.lang.String> getAvailableExtraData();
+    method @Deprecated public void getBoundsInParent(android.graphics.Rect);
+    method public void getBoundsInScreen(android.graphics.Rect);
+    method public android.view.accessibility.AccessibilityNodeInfo getChild(int);
+    method public int getChildCount();
+    method public CharSequence getClassName();
+    method public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo getCollectionInfo();
+    method public android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo getCollectionItemInfo();
+    method public CharSequence getContentDescription();
+    method public int getDrawingOrder();
+    method public CharSequence getError();
+    method @Nullable public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo getExtraRenderingInfo();
+    method public android.os.Bundle getExtras();
+    method public CharSequence getHintText();
+    method public int getInputType();
+    method public android.view.accessibility.AccessibilityNodeInfo getLabelFor();
+    method public android.view.accessibility.AccessibilityNodeInfo getLabeledBy();
+    method public int getLiveRegion();
+    method public int getMaxTextLength();
+    method public int getMovementGranularities();
+    method public CharSequence getPackageName();
+    method @Nullable public CharSequence getPaneTitle();
+    method public android.view.accessibility.AccessibilityNodeInfo getParent();
+    method public android.view.accessibility.AccessibilityNodeInfo.RangeInfo getRangeInfo();
+    method @Nullable public CharSequence getStateDescription();
+    method public CharSequence getText();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method @Nullable public CharSequence getTooltipText();
+    method @Nullable public android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo getTouchDelegateInfo();
+    method public android.view.accessibility.AccessibilityNodeInfo getTraversalAfter();
+    method public android.view.accessibility.AccessibilityNodeInfo getTraversalBefore();
+    method public String getViewIdResourceName();
+    method public android.view.accessibility.AccessibilityWindowInfo getWindow();
+    method public int getWindowId();
+    method public boolean isAccessibilityFocused();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isClickable();
+    method public boolean isContentInvalid();
+    method public boolean isContextClickable();
+    method public boolean isDismissable();
+    method public boolean isEditable();
+    method public boolean isEnabled();
+    method public boolean isFocusable();
+    method public boolean isFocused();
+    method public boolean isHeading();
+    method public boolean isImportantForAccessibility();
+    method public boolean isLongClickable();
+    method public boolean isMultiLine();
+    method public boolean isPassword();
+    method public boolean isScreenReaderFocusable();
+    method public boolean isScrollable();
+    method public boolean isSelected();
+    method public boolean isShowingHintText();
+    method public boolean isTextEntryKey();
+    method public boolean isVisibleToUser();
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View);
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View, int);
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain();
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean performAction(int);
+    method public boolean performAction(int, android.os.Bundle);
+    method public void recycle();
+    method public boolean refresh();
+    method public boolean refreshWithExtraData(String, android.os.Bundle);
+    method @Deprecated public void removeAction(int);
+    method public boolean removeAction(android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction);
+    method public boolean removeChild(android.view.View);
+    method public boolean removeChild(android.view.View, int);
+    method public void setAccessibilityFocused(boolean);
+    method public void setAvailableExtraData(java.util.List<java.lang.String>);
+    method @Deprecated public void setBoundsInParent(android.graphics.Rect);
+    method public void setBoundsInScreen(android.graphics.Rect);
+    method public void setCanOpenPopup(boolean);
+    method public void setCheckable(boolean);
+    method public void setChecked(boolean);
+    method public void setClassName(CharSequence);
+    method public void setClickable(boolean);
+    method public void setCollectionInfo(android.view.accessibility.AccessibilityNodeInfo.CollectionInfo);
+    method public void setCollectionItemInfo(android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo);
+    method public void setContentDescription(CharSequence);
+    method public void setContentInvalid(boolean);
+    method public void setContextClickable(boolean);
+    method public void setDismissable(boolean);
+    method public void setDrawingOrder(int);
+    method public void setEditable(boolean);
+    method public void setEnabled(boolean);
+    method public void setError(CharSequence);
+    method public void setFocusable(boolean);
+    method public void setFocused(boolean);
+    method public void setHeading(boolean);
+    method public void setHintText(CharSequence);
+    method public void setImportantForAccessibility(boolean);
+    method public void setInputType(int);
+    method public void setLabelFor(android.view.View);
+    method public void setLabelFor(android.view.View, int);
+    method public void setLabeledBy(android.view.View);
+    method public void setLabeledBy(android.view.View, int);
+    method public void setLiveRegion(int);
+    method public void setLongClickable(boolean);
+    method public void setMaxTextLength(int);
+    method public void setMovementGranularities(int);
+    method public void setMultiLine(boolean);
+    method public void setPackageName(CharSequence);
+    method public void setPaneTitle(@Nullable CharSequence);
+    method public void setParent(android.view.View);
+    method public void setParent(android.view.View, int);
+    method public void setPassword(boolean);
+    method public void setRangeInfo(android.view.accessibility.AccessibilityNodeInfo.RangeInfo);
+    method public void setScreenReaderFocusable(boolean);
+    method public void setScrollable(boolean);
+    method public void setSelected(boolean);
+    method public void setShowingHintText(boolean);
+    method public void setSource(android.view.View);
+    method public void setSource(android.view.View, int);
+    method public void setStateDescription(@Nullable CharSequence);
+    method public void setText(CharSequence);
+    method public void setTextEntryKey(boolean);
+    method public void setTextSelection(int, int);
+    method public void setTooltipText(@Nullable CharSequence);
+    method public void setTouchDelegateInfo(@NonNull android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo);
+    method public void setTraversalAfter(android.view.View);
+    method public void setTraversalAfter(android.view.View, int);
+    method public void setTraversalBefore(android.view.View);
+    method public void setTraversalBefore(android.view.View, int);
+    method public void setViewIdResourceName(String);
+    method public void setVisibleToUser(boolean);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+    field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+    field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+    field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+    field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+    field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
+    field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+    field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+    field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+    field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+    field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+    field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+    field public static final int ACTION_CLICK = 16; // 0x10
+    field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+    field public static final int ACTION_COPY = 16384; // 0x4000
+    field public static final int ACTION_CUT = 65536; // 0x10000
+    field public static final int ACTION_DISMISS = 1048576; // 0x100000
+    field public static final int ACTION_EXPAND = 262144; // 0x40000
+    field public static final int ACTION_FOCUS = 1; // 0x1
+    field public static final int ACTION_LONG_CLICK = 32; // 0x20
+    field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+    field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+    field public static final int ACTION_PASTE = 32768; // 0x8000
+    field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+    field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+    field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+    field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+    field public static final int ACTION_SELECT = 4; // 0x4
+    field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+    field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo> CREATOR;
+    field public static final String EXTRA_DATA_RENDERING_INFO_KEY = "android.view.accessibility.extra.DATA_RENDERING_INFO_KEY";
+    field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH";
+    field public static final int EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH = 20000; // 0x4e20
+    field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX";
+    field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY";
+    field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+    field public static final int FOCUS_INPUT = 1; // 0x1
+    field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+    field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+    field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+    field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+    field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+  }
+
+  public static final class AccessibilityNodeInfo.AccessibilityAction implements android.os.Parcelable {
+    ctor public AccessibilityNodeInfo.AccessibilityAction(int, @Nullable CharSequence);
+    method public int describeContents();
+    method public int getId();
+    method public CharSequence getLabel();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_ACCESSIBILITY_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_SELECTION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLICK;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_COLLAPSE;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CONTEXT_CLICK;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_COPY;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CUT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DISMISS;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_CANCEL;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_DROP;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_START;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_EXPAND;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_HIDE_TOOLTIP;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_IME_ENTER;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_LONG_CLICK;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_MOVE_WINDOW;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_HTML_ELEMENT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_DOWN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_LEFT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_RIGHT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_UP;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PASTE;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PRESS_AND_HOLD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_BACKWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_DOWN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_FORWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_LEFT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_RIGHT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_TO_POSITION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_UP;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SELECT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_PROGRESS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_SELECTION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_TEXT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_ON_SCREEN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_TOOLTIP;
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction> CREATOR;
+  }
+
+  public static final class AccessibilityNodeInfo.CollectionInfo {
+    ctor public AccessibilityNodeInfo.CollectionInfo(int, int, boolean);
+    ctor public AccessibilityNodeInfo.CollectionInfo(int, int, boolean, int);
+    method public int getColumnCount();
+    method public int getRowCount();
+    method public int getSelectionMode();
+    method public boolean isHierarchical();
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean);
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean, int);
+    field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+    field public static final int SELECTION_MODE_NONE = 0; // 0x0
+    field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+  }
+
+  public static final class AccessibilityNodeInfo.CollectionItemInfo {
+    ctor public AccessibilityNodeInfo.CollectionItemInfo(int, int, int, int, boolean);
+    ctor public AccessibilityNodeInfo.CollectionItemInfo(int, int, int, int, boolean, boolean);
+    method public int getColumnIndex();
+    method public int getColumnSpan();
+    method public int getRowIndex();
+    method public int getRowSpan();
+    method @Deprecated public boolean isHeading();
+    method public boolean isSelected();
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean);
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean, boolean);
+  }
+
+  public static final class AccessibilityNodeInfo.ExtraRenderingInfo {
+    method @Nullable public android.util.Size getLayoutSize();
+    method public float getTextSizeInPx();
+    method public int getTextSizeUnit();
+  }
+
+  public static final class AccessibilityNodeInfo.RangeInfo {
+    ctor public AccessibilityNodeInfo.RangeInfo(int, float, float, float);
+    method public float getCurrent();
+    method public float getMax();
+    method public float getMin();
+    method public int getType();
+    method public static android.view.accessibility.AccessibilityNodeInfo.RangeInfo obtain(int, float, float, float);
+    field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+    field public static final int RANGE_TYPE_INT = 0; // 0x0
+    field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+  }
+
+  public static final class AccessibilityNodeInfo.TouchDelegateInfo implements android.os.Parcelable {
+    ctor public AccessibilityNodeInfo.TouchDelegateInfo(@NonNull java.util.Map<android.graphics.Region,android.view.View>);
+    method public int describeContents();
+    method @NonNull public android.graphics.Region getRegionAt(int);
+    method public int getRegionCount();
+    method @Nullable public android.view.accessibility.AccessibilityNodeInfo getTargetForRegion(@NonNull android.graphics.Region);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo> CREATOR;
+  }
+
+  public abstract class AccessibilityNodeProvider {
+    ctor public AccessibilityNodeProvider();
+    method public void addExtraDataToAccessibilityNodeInfo(int, android.view.accessibility.AccessibilityNodeInfo, String, android.os.Bundle);
+    method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int);
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(String, int);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method public boolean performAction(int, int, android.os.Bundle);
+    field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+  }
+
+  public class AccessibilityRecord {
+    ctor public AccessibilityRecord();
+    ctor public AccessibilityRecord(@NonNull android.view.accessibility.AccessibilityRecord);
+    method public int getAddedCount();
+    method public CharSequence getBeforeText();
+    method public CharSequence getClassName();
+    method public CharSequence getContentDescription();
+    method public int getCurrentItemIndex();
+    method public int getFromIndex();
+    method public int getItemCount();
+    method public int getMaxScrollX();
+    method public int getMaxScrollY();
+    method public android.os.Parcelable getParcelableData();
+    method public int getRemovedCount();
+    method public int getScrollDeltaX();
+    method public int getScrollDeltaY();
+    method public int getScrollX();
+    method public int getScrollY();
+    method public android.view.accessibility.AccessibilityNodeInfo getSource();
+    method public java.util.List<java.lang.CharSequence> getText();
+    method public int getToIndex();
+    method public int getWindowId();
+    method public boolean isChecked();
+    method public boolean isEnabled();
+    method public boolean isFullScreen();
+    method public boolean isPassword();
+    method public boolean isScrollable();
+    method public static android.view.accessibility.AccessibilityRecord obtain(android.view.accessibility.AccessibilityRecord);
+    method public static android.view.accessibility.AccessibilityRecord obtain();
+    method public void recycle();
+    method public void setAddedCount(int);
+    method public void setBeforeText(CharSequence);
+    method public void setChecked(boolean);
+    method public void setClassName(CharSequence);
+    method public void setContentDescription(CharSequence);
+    method public void setCurrentItemIndex(int);
+    method public void setEnabled(boolean);
+    method public void setFromIndex(int);
+    method public void setFullScreen(boolean);
+    method public void setItemCount(int);
+    method public void setMaxScrollX(int);
+    method public void setMaxScrollY(int);
+    method public void setParcelableData(android.os.Parcelable);
+    method public void setPassword(boolean);
+    method public void setRemovedCount(int);
+    method public void setScrollDeltaX(int);
+    method public void setScrollDeltaY(int);
+    method public void setScrollX(int);
+    method public void setScrollY(int);
+    method public void setScrollable(boolean);
+    method public void setSource(android.view.View);
+    method public void setSource(@Nullable android.view.View, int);
+    method public void setToIndex(int);
+  }
+
+  public abstract class AccessibilityRequestPreparer {
+    ctor public AccessibilityRequestPreparer(android.view.View, int);
+    method @Nullable public android.view.View getView();
+    method public abstract void onPrepareExtraData(int, String, android.os.Bundle, android.os.Message);
+    field public static final int REQUEST_TYPE_EXTRA_DATA = 1; // 0x1
+  }
+
+  public final class AccessibilityWindowInfo implements android.os.Parcelable {
+    ctor public AccessibilityWindowInfo();
+    ctor public AccessibilityWindowInfo(@NonNull android.view.accessibility.AccessibilityWindowInfo);
+    method public int describeContents();
+    method public android.view.accessibility.AccessibilityNodeInfo getAnchor();
+    method public void getBoundsInScreen(android.graphics.Rect);
+    method public android.view.accessibility.AccessibilityWindowInfo getChild(int);
+    method public int getChildCount();
+    method public int getDisplayId();
+    method public int getId();
+    method public int getLayer();
+    method public android.view.accessibility.AccessibilityWindowInfo getParent();
+    method public void getRegionInScreen(@NonNull android.graphics.Region);
+    method public android.view.accessibility.AccessibilityNodeInfo getRoot();
+    method @Nullable public CharSequence getTitle();
+    method public int getType();
+    method public boolean isAccessibilityFocused();
+    method public boolean isActive();
+    method public boolean isFocused();
+    method public boolean isInPictureInPictureMode();
+    method public static android.view.accessibility.AccessibilityWindowInfo obtain();
+    method public static android.view.accessibility.AccessibilityWindowInfo obtain(android.view.accessibility.AccessibilityWindowInfo);
+    method public void recycle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityWindowInfo> CREATOR;
+    field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+    field public static final int TYPE_APPLICATION = 1; // 0x1
+    field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+    field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+    field public static final int TYPE_SYSTEM = 3; // 0x3
+  }
+
+  public class CaptioningManager {
+    method public void addCaptioningChangeListener(@NonNull android.view.accessibility.CaptioningManager.CaptioningChangeListener);
+    method public final float getFontScale();
+    method @Nullable public final java.util.Locale getLocale();
+    method @NonNull public android.view.accessibility.CaptioningManager.CaptionStyle getUserStyle();
+    method public final boolean isEnabled();
+    method public void removeCaptioningChangeListener(@NonNull android.view.accessibility.CaptioningManager.CaptioningChangeListener);
+  }
+
+  public static final class CaptioningManager.CaptionStyle {
+    method @Nullable public android.graphics.Typeface getTypeface();
+    method public boolean hasBackgroundColor();
+    method public boolean hasEdgeColor();
+    method public boolean hasEdgeType();
+    method public boolean hasForegroundColor();
+    method public boolean hasWindowColor();
+    field public static final int EDGE_TYPE_DEPRESSED = 4; // 0x4
+    field public static final int EDGE_TYPE_DROP_SHADOW = 2; // 0x2
+    field public static final int EDGE_TYPE_NONE = 0; // 0x0
+    field public static final int EDGE_TYPE_OUTLINE = 1; // 0x1
+    field public static final int EDGE_TYPE_RAISED = 3; // 0x3
+    field public static final int EDGE_TYPE_UNSPECIFIED = -1; // 0xffffffff
+    field public final int backgroundColor;
+    field public final int edgeColor;
+    field public final int edgeType;
+    field public final int foregroundColor;
+    field public final int windowColor;
+  }
+
+  public abstract static class CaptioningManager.CaptioningChangeListener {
+    ctor public CaptioningManager.CaptioningChangeListener();
+    method public void onEnabledChanged(boolean);
+    method public void onFontScaleChanged(float);
+    method public void onLocaleChanged(@Nullable java.util.Locale);
+    method public void onUserStyleChanged(@NonNull android.view.accessibility.CaptioningManager.CaptionStyle);
+  }
+
+}
+
+package android.view.animation {
+
+  public class AccelerateDecelerateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AccelerateDecelerateInterpolator();
+    ctor public AccelerateDecelerateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class AccelerateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AccelerateInterpolator();
+    ctor public AccelerateInterpolator(float);
+    ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class AlphaAnimation extends android.view.animation.Animation {
+    ctor public AlphaAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public AlphaAnimation(float, float);
+  }
+
+  public abstract class Animation implements java.lang.Cloneable {
+    ctor public Animation();
+    ctor public Animation(android.content.Context, android.util.AttributeSet);
+    method protected void applyTransformation(float, android.view.animation.Transformation);
+    method public void cancel();
+    method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
+    method public long computeDurationHint();
+    method protected void ensureInterpolator();
+    method @Deprecated @ColorInt public int getBackgroundColor();
+    method @Deprecated public boolean getDetachWallpaper();
+    method public long getDuration();
+    method public boolean getFillAfter();
+    method public boolean getFillBefore();
+    method public android.view.animation.Interpolator getInterpolator();
+    method public int getRepeatCount();
+    method public int getRepeatMode();
+    method protected float getScaleFactor();
+    method public long getStartOffset();
+    method public long getStartTime();
+    method public boolean getTransformation(long, android.view.animation.Transformation);
+    method public boolean getTransformation(long, android.view.animation.Transformation, float);
+    method public int getZAdjustment();
+    method public boolean hasEnded();
+    method public boolean hasStarted();
+    method public void initialize(int, int, int, int);
+    method public boolean isFillEnabled();
+    method public boolean isInitialized();
+    method public void reset();
+    method protected float resolveSize(int, float, int, int);
+    method public void restrictDuration(long);
+    method public void scaleCurrentDuration(float);
+    method public void setAnimationListener(android.view.animation.Animation.AnimationListener);
+    method @Deprecated public void setBackgroundColor(@ColorInt int);
+    method @Deprecated public void setDetachWallpaper(boolean);
+    method public void setDuration(long);
+    method public void setFillAfter(boolean);
+    method public void setFillBefore(boolean);
+    method public void setFillEnabled(boolean);
+    method public void setInterpolator(android.content.Context, @AnimRes @InterpolatorRes int);
+    method public void setInterpolator(android.view.animation.Interpolator);
+    method public void setRepeatCount(int);
+    method public void setRepeatMode(int);
+    method public void setStartOffset(long);
+    method public void setStartTime(long);
+    method public void setZAdjustment(int);
+    method public void start();
+    method public void startNow();
+    method public boolean willChangeBounds();
+    method public boolean willChangeTransformationMatrix();
+    field public static final int ABSOLUTE = 0; // 0x0
+    field public static final int INFINITE = -1; // 0xffffffff
+    field public static final int RELATIVE_TO_PARENT = 2; // 0x2
+    field public static final int RELATIVE_TO_SELF = 1; // 0x1
+    field public static final int RESTART = 1; // 0x1
+    field public static final int REVERSE = 2; // 0x2
+    field public static final int START_ON_FIRST_FRAME = -1; // 0xffffffff
+    field public static final int ZORDER_BOTTOM = -1; // 0xffffffff
+    field public static final int ZORDER_NORMAL = 0; // 0x0
+    field public static final int ZORDER_TOP = 1; // 0x1
+  }
+
+  public static interface Animation.AnimationListener {
+    method public void onAnimationEnd(android.view.animation.Animation);
+    method public void onAnimationRepeat(android.view.animation.Animation);
+    method public void onAnimationStart(android.view.animation.Animation);
+  }
+
+  protected static class Animation.Description {
+    ctor protected Animation.Description();
+    field public int type;
+    field public float value;
+  }
+
+  public class AnimationSet extends android.view.animation.Animation {
+    ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
+    ctor public AnimationSet(boolean);
+    method public void addAnimation(android.view.animation.Animation);
+    method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
+    method public java.util.List<android.view.animation.Animation> getAnimations();
+  }
+
+  public class AnimationUtils {
+    ctor public AnimationUtils();
+    method public static long currentAnimationTimeMillis();
+    method public static android.view.animation.Animation loadAnimation(android.content.Context, @AnimRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.view.animation.Interpolator loadInterpolator(android.content.Context, @AnimRes @InterpolatorRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.view.animation.LayoutAnimationController loadLayoutAnimation(android.content.Context, @AnimRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.view.animation.Animation makeInAnimation(android.content.Context, boolean);
+    method public static android.view.animation.Animation makeInChildBottomAnimation(android.content.Context);
+    method public static android.view.animation.Animation makeOutAnimation(android.content.Context, boolean);
+  }
+
+  public class AnticipateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AnticipateInterpolator();
+    ctor public AnticipateInterpolator(float);
+    ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class AnticipateOvershootInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AnticipateOvershootInterpolator();
+    ctor public AnticipateOvershootInterpolator(float);
+    ctor public AnticipateOvershootInterpolator(float, float);
+    ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public abstract class BaseInterpolator implements android.view.animation.Interpolator {
+    ctor public BaseInterpolator();
+  }
+
+  public class BounceInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public BounceInterpolator();
+    ctor public BounceInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class CycleInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public CycleInterpolator(float);
+    ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class DecelerateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public DecelerateInterpolator();
+    ctor public DecelerateInterpolator(float);
+    ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class GridLayoutAnimationController extends android.view.animation.LayoutAnimationController {
+    ctor public GridLayoutAnimationController(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayoutAnimationController(android.view.animation.Animation);
+    ctor public GridLayoutAnimationController(android.view.animation.Animation, float, float);
+    method public float getColumnDelay();
+    method public int getDirection();
+    method public int getDirectionPriority();
+    method public float getRowDelay();
+    method public void setColumnDelay(float);
+    method public void setDirection(int);
+    method public void setDirectionPriority(int);
+    method public void setRowDelay(float);
+    field public static final int DIRECTION_BOTTOM_TO_TOP = 2; // 0x2
+    field public static final int DIRECTION_HORIZONTAL_MASK = 1; // 0x1
+    field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final int DIRECTION_TOP_TO_BOTTOM = 0; // 0x0
+    field public static final int DIRECTION_VERTICAL_MASK = 2; // 0x2
+    field public static final int PRIORITY_COLUMN = 1; // 0x1
+    field public static final int PRIORITY_NONE = 0; // 0x0
+    field public static final int PRIORITY_ROW = 2; // 0x2
+  }
+
+  public static class GridLayoutAnimationController.AnimationParameters extends android.view.animation.LayoutAnimationController.AnimationParameters {
+    ctor public GridLayoutAnimationController.AnimationParameters();
+    field public int column;
+    field public int columnsCount;
+    field public int row;
+    field public int rowsCount;
+  }
+
+  public interface Interpolator extends android.animation.TimeInterpolator {
+  }
+
+  public class LayoutAnimationController {
+    ctor public LayoutAnimationController(android.content.Context, android.util.AttributeSet);
+    ctor public LayoutAnimationController(android.view.animation.Animation);
+    ctor public LayoutAnimationController(android.view.animation.Animation, float);
+    method public android.view.animation.Animation getAnimation();
+    method public final android.view.animation.Animation getAnimationForView(android.view.View);
+    method public float getDelay();
+    method protected long getDelayForView(android.view.View);
+    method public android.view.animation.Interpolator getInterpolator();
+    method public int getOrder();
+    method protected int getTransformedIndex(android.view.animation.LayoutAnimationController.AnimationParameters);
+    method public boolean isDone();
+    method public void setAnimation(android.content.Context, @AnimRes int);
+    method public void setAnimation(android.view.animation.Animation);
+    method public void setDelay(float);
+    method public void setInterpolator(android.content.Context, @InterpolatorRes int);
+    method public void setInterpolator(android.view.animation.Interpolator);
+    method public void setOrder(int);
+    method public void start();
+    method public boolean willOverlap();
+    field public static final int ORDER_NORMAL = 0; // 0x0
+    field public static final int ORDER_RANDOM = 2; // 0x2
+    field public static final int ORDER_REVERSE = 1; // 0x1
+    field protected android.view.animation.Animation mAnimation;
+    field protected android.view.animation.Interpolator mInterpolator;
+    field protected java.util.Random mRandomizer;
+  }
+
+  public static class LayoutAnimationController.AnimationParameters {
+    ctor public LayoutAnimationController.AnimationParameters();
+    field public int count;
+    field public int index;
+  }
+
+  public class LinearInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public LinearInterpolator();
+    ctor public LinearInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class OvershootInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public OvershootInterpolator();
+    ctor public OvershootInterpolator(float);
+    ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class PathInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public PathInterpolator(android.graphics.Path);
+    ctor public PathInterpolator(float, float);
+    ctor public PathInterpolator(float, float, float, float);
+    ctor public PathInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class RotateAnimation extends android.view.animation.Animation {
+    ctor public RotateAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public RotateAnimation(float, float);
+    ctor public RotateAnimation(float, float, float, float);
+    ctor public RotateAnimation(float, float, int, float, int, float);
+  }
+
+  public class ScaleAnimation extends android.view.animation.Animation {
+    ctor public ScaleAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public ScaleAnimation(float, float, float, float);
+    ctor public ScaleAnimation(float, float, float, float, float, float);
+    ctor public ScaleAnimation(float, float, float, float, int, float, int, float);
+  }
+
+  public class Transformation {
+    ctor public Transformation();
+    method public void clear();
+    method public void compose(android.view.animation.Transformation);
+    method public float getAlpha();
+    method public android.graphics.Matrix getMatrix();
+    method public int getTransformationType();
+    method public void set(android.view.animation.Transformation);
+    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
+    method public void setTransformationType(int);
+    method public String toShortString();
+    field public static final int TYPE_ALPHA = 1; // 0x1
+    field public static final int TYPE_BOTH = 3; // 0x3
+    field public static final int TYPE_IDENTITY = 0; // 0x0
+    field public static final int TYPE_MATRIX = 2; // 0x2
+    field protected float mAlpha;
+    field protected android.graphics.Matrix mMatrix;
+    field protected int mTransformationType;
+  }
+
+  public class TranslateAnimation extends android.view.animation.Animation {
+    ctor public TranslateAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public TranslateAnimation(float, float, float, float);
+    ctor public TranslateAnimation(int, float, int, float, int, float, int, float);
+  }
+
+}
+
+package android.view.autofill {
+
+  public final class AutofillId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.autofill.AutofillId> CREATOR;
+  }
+
+  public final class AutofillManager {
+    method public void cancel();
+    method public void commit();
+    method public void disableAutofillServices();
+    method @Nullable public android.content.ComponentName getAutofillServiceComponentName();
+    method @NonNull public java.util.List<java.lang.String> getAvailableFieldClassificationAlgorithms();
+    method @Nullable public String getDefaultFieldClassificationAlgorithm();
+    method @Nullable public android.view.autofill.AutofillId getNextAutofillId();
+    method @Nullable public android.service.autofill.UserData getUserData();
+    method @Nullable public String getUserDataId();
+    method public boolean hasEnabledAutofillServices();
+    method public boolean isAutofillSupported();
+    method public boolean isEnabled();
+    method public boolean isFieldClassificationEnabled();
+    method public void notifyValueChanged(android.view.View);
+    method public void notifyValueChanged(android.view.View, int, android.view.autofill.AutofillValue);
+    method public void notifyViewClicked(@NonNull android.view.View);
+    method public void notifyViewClicked(@NonNull android.view.View, int);
+    method public void notifyViewEntered(@NonNull android.view.View);
+    method public void notifyViewEntered(@NonNull android.view.View, int, @NonNull android.graphics.Rect);
+    method public void notifyViewExited(@NonNull android.view.View);
+    method public void notifyViewExited(@NonNull android.view.View, int);
+    method public void notifyViewVisibilityChanged(@NonNull android.view.View, boolean);
+    method public void notifyViewVisibilityChanged(@NonNull android.view.View, int, boolean);
+    method public void registerCallback(@Nullable android.view.autofill.AutofillManager.AutofillCallback);
+    method public void requestAutofill(@NonNull android.view.View);
+    method public void requestAutofill(@NonNull android.view.View, int, @NonNull android.graphics.Rect);
+    method public void setUserData(@Nullable android.service.autofill.UserData);
+    method public void unregisterCallback(@Nullable android.view.autofill.AutofillManager.AutofillCallback);
+    field public static final String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
+    field public static final String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
+    field public static final String EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET = "android.view.autofill.extra.AUTHENTICATION_RESULT_EPHEMERAL_DATASET";
+    field public static final String EXTRA_CLIENT_STATE = "android.view.autofill.extra.CLIENT_STATE";
+    field public static final String EXTRA_INLINE_SUGGESTIONS_REQUEST = "android.view.autofill.extra.INLINE_SUGGESTIONS_REQUEST";
+  }
+
+  public abstract static class AutofillManager.AutofillCallback {
+    ctor public AutofillManager.AutofillCallback();
+    method public void onAutofillEvent(@NonNull android.view.View, int);
+    method public void onAutofillEvent(@NonNull android.view.View, int, int);
+    field public static final int EVENT_INPUT_HIDDEN = 2; // 0x2
+    field public static final int EVENT_INPUT_SHOWN = 1; // 0x1
+    field public static final int EVENT_INPUT_UNAVAILABLE = 3; // 0x3
+  }
+
+  public final class AutofillValue implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.view.autofill.AutofillValue forDate(long);
+    method public static android.view.autofill.AutofillValue forList(int);
+    method public static android.view.autofill.AutofillValue forText(@Nullable CharSequence);
+    method public static android.view.autofill.AutofillValue forToggle(boolean);
+    method public long getDateValue();
+    method public int getListValue();
+    method @NonNull public CharSequence getTextValue();
+    method public boolean getToggleValue();
+    method public boolean isDate();
+    method public boolean isList();
+    method public boolean isText();
+    method public boolean isToggle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.autofill.AutofillValue> CREATOR;
+  }
+
+}
+
+package android.view.contentcapture {
+
+  public final class ContentCaptureCondition implements android.os.Parcelable {
+    ctor public ContentCaptureCondition(@NonNull android.content.LocusId, int);
+    method public int describeContents();
+    method public int getFlags();
+    method @NonNull public android.content.LocusId getLocusId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureCondition> CREATOR;
+    field public static final int FLAG_IS_REGEX = 2; // 0x2
+  }
+
+  public final class ContentCaptureContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull String);
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.content.LocusId getLocusId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureContext> CREATOR;
+  }
+
+  public static final class ContentCaptureContext.Builder {
+    ctor public ContentCaptureContext.Builder(@NonNull android.content.LocusId);
+    method @NonNull public android.view.contentcapture.ContentCaptureContext build();
+    method @NonNull public android.view.contentcapture.ContentCaptureContext.Builder setExtras(@NonNull android.os.Bundle);
+  }
+
+  public final class ContentCaptureManager {
+    method @Nullable public java.util.Set<android.view.contentcapture.ContentCaptureCondition> getContentCaptureConditions();
+    method @Nullable public android.content.ComponentName getServiceComponentName();
+    method public boolean isContentCaptureEnabled();
+    method public void removeData(@NonNull android.view.contentcapture.DataRemovalRequest);
+    method public void setContentCaptureEnabled(boolean);
+    method public void shareData(@NonNull android.view.contentcapture.DataShareRequest, @NonNull java.util.concurrent.Executor, @NonNull android.view.contentcapture.DataShareWriteAdapter);
+    field public static final int DATA_SHARE_ERROR_CONCURRENT_REQUEST = 2; // 0x2
+    field public static final int DATA_SHARE_ERROR_TIMEOUT_INTERRUPTED = 3; // 0x3
+    field public static final int DATA_SHARE_ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  public abstract class ContentCaptureSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public final android.view.contentcapture.ContentCaptureSession createContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext);
+    method public final void destroy();
+    method @Nullable public final android.view.contentcapture.ContentCaptureContext getContentCaptureContext();
+    method @NonNull public final android.view.contentcapture.ContentCaptureSessionId getContentCaptureSessionId();
+    method @NonNull public android.view.autofill.AutofillId newAutofillId(@NonNull android.view.autofill.AutofillId, long);
+    method @NonNull public final android.view.ViewStructure newViewStructure(@NonNull android.view.View);
+    method @NonNull public final android.view.ViewStructure newVirtualViewStructure(@NonNull android.view.autofill.AutofillId, long);
+    method public final void notifySessionPaused();
+    method public final void notifySessionResumed();
+    method public final void notifyViewAppeared(@NonNull android.view.ViewStructure);
+    method public final void notifyViewDisappeared(@NonNull android.view.autofill.AutofillId);
+    method public final void notifyViewInsetsChanged(@NonNull android.graphics.Insets);
+    method public final void notifyViewTextChanged(@NonNull android.view.autofill.AutofillId, @Nullable CharSequence);
+    method public final void notifyViewsDisappeared(@NonNull android.view.autofill.AutofillId, @NonNull long[]);
+    method public final void setContentCaptureContext(@Nullable android.view.contentcapture.ContentCaptureContext);
+  }
+
+  public final class ContentCaptureSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureSessionId> CREATOR;
+  }
+
+  public final class DataRemovalRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.view.contentcapture.DataRemovalRequest.LocusIdRequest> getLocusIdRequests();
+    method @NonNull public String getPackageName();
+    method public boolean isForEverything();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.DataRemovalRequest> CREATOR;
+    field public static final int FLAG_IS_PREFIX = 1; // 0x1
+  }
+
+  public static final class DataRemovalRequest.Builder {
+    ctor public DataRemovalRequest.Builder();
+    method @NonNull public android.view.contentcapture.DataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, int);
+    method @NonNull public android.view.contentcapture.DataRemovalRequest build();
+    method @NonNull public android.view.contentcapture.DataRemovalRequest.Builder forEverything();
+  }
+
+  public final class DataRemovalRequest.LocusIdRequest {
+    method @NonNull public int getFlags();
+    method @NonNull public android.content.LocusId getLocusId();
+  }
+
+  public final class DataShareRequest implements android.os.Parcelable {
+    ctor public DataShareRequest(@Nullable android.content.LocusId, @NonNull String);
+    method public int describeContents();
+    method @Nullable public android.content.LocusId getLocusId();
+    method @NonNull public String getMimeType();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.DataShareRequest> CREATOR;
+  }
+
+  public interface DataShareWriteAdapter {
+    method public default void onError(int);
+    method public void onRejected();
+    method public void onWrite(@NonNull android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package android.view.displayhash {
+
+  public final class DisplayHash implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.displayhash.DisplayHash> CREATOR;
+  }
+
+  public final class DisplayHashManager {
+    method @NonNull public java.util.Set<java.lang.String> getSupportedHashAlgorithms();
+    method @Nullable public android.view.displayhash.VerifiedDisplayHash verifyDisplayHash(@NonNull android.view.displayhash.DisplayHash);
+  }
+
+  public interface DisplayHashResultCallback {
+    method public void onDisplayHashError(int);
+    method public void onDisplayHashResult(@NonNull android.view.displayhash.DisplayHash);
+    field public static final int DISPLAY_HASH_ERROR_INVALID_BOUNDS = -2; // 0xfffffffe
+    field public static final int DISPLAY_HASH_ERROR_INVALID_HASH_ALGORITHM = -5; // 0xfffffffb
+    field public static final int DISPLAY_HASH_ERROR_MISSING_WINDOW = -3; // 0xfffffffd
+    field public static final int DISPLAY_HASH_ERROR_NOT_VISIBLE_ON_SCREEN = -4; // 0xfffffffc
+    field public static final int DISPLAY_HASH_ERROR_TOO_MANY_REQUESTS = -6; // 0xfffffffa
+    field public static final int DISPLAY_HASH_ERROR_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class VerifiedDisplayHash implements android.os.Parcelable {
+    ctor public VerifiedDisplayHash(long, @NonNull android.graphics.Rect, @NonNull String, @NonNull byte[]);
+    method public int describeContents();
+    method @NonNull public android.graphics.Rect getBoundsInWindow();
+    method @NonNull public String getHashAlgorithm();
+    method @NonNull public byte[] getImageHash();
+    method public long getTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.displayhash.VerifiedDisplayHash> CREATOR;
+  }
+
+}
+
+package android.view.inputmethod {
+
+  public class BaseInputConnection implements android.view.inputmethod.InputConnection {
+    ctor public BaseInputConnection(android.view.View, boolean);
+    method public boolean beginBatchEdit();
+    method public boolean clearMetaKeyStates(int);
+    method @CallSuper public void closeConnection();
+    method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(android.view.inputmethod.InputContentInfo, int, android.os.Bundle);
+    method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public boolean commitText(CharSequence, int);
+    method public boolean deleteSurroundingText(int, int);
+    method public boolean deleteSurroundingTextInCodePoints(int, int);
+    method public boolean endBatchEdit();
+    method public boolean finishComposingText();
+    method public static int getComposingSpanEnd(android.text.Spannable);
+    method public static int getComposingSpanStart(android.text.Spannable);
+    method public int getCursorCapsMode(int);
+    method public android.text.Editable getEditable();
+    method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int);
+    method public android.os.Handler getHandler();
+    method public CharSequence getSelectedText(int);
+    method @Nullable public CharSequence getTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextBeforeCursor(@IntRange(from=0) int, int);
+    method public boolean performContextMenuAction(int);
+    method public boolean performEditorAction(int);
+    method public boolean performPrivateCommand(String, android.os.Bundle);
+    method public static final void removeComposingSpans(android.text.Spannable);
+    method public boolean reportFullscreenMode(boolean);
+    method public boolean requestCursorUpdates(int);
+    method public boolean sendKeyEvent(android.view.KeyEvent);
+    method public boolean setComposingRegion(int, int);
+    method public static void setComposingSpans(android.text.Spannable);
+    method public boolean setComposingText(CharSequence, int);
+    method public boolean setSelection(int, int);
+  }
+
+  public final class CompletionInfo implements android.os.Parcelable {
+    ctor public CompletionInfo(long, int, CharSequence);
+    ctor public CompletionInfo(long, int, CharSequence, CharSequence);
+    method public int describeContents();
+    method public long getId();
+    method public CharSequence getLabel();
+    method public int getPosition();
+    method public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CompletionInfo> CREATOR;
+  }
+
+  public final class CorrectionInfo implements android.os.Parcelable {
+    ctor public CorrectionInfo(int, CharSequence, CharSequence);
+    method public int describeContents();
+    method public CharSequence getNewText();
+    method public int getOffset();
+    method public CharSequence getOldText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CorrectionInfo> CREATOR;
+  }
+
+  public final class CursorAnchorInfo implements android.os.Parcelable {
+    ctor public CursorAnchorInfo(android.os.Parcel);
+    method public int describeContents();
+    method public android.graphics.RectF getCharacterBounds(int);
+    method public int getCharacterBoundsFlags(int);
+    method public CharSequence getComposingText();
+    method public int getComposingTextStart();
+    method public float getInsertionMarkerBaseline();
+    method public float getInsertionMarkerBottom();
+    method public int getInsertionMarkerFlags();
+    method public float getInsertionMarkerHorizontal();
+    method public float getInsertionMarkerTop();
+    method public android.graphics.Matrix getMatrix();
+    method public int getSelectionEnd();
+    method public int getSelectionStart();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CursorAnchorInfo> CREATOR;
+    field public static final int FLAG_HAS_INVISIBLE_REGION = 2; // 0x2
+    field public static final int FLAG_HAS_VISIBLE_REGION = 1; // 0x1
+    field public static final int FLAG_IS_RTL = 4; // 0x4
+  }
+
+  public static final class CursorAnchorInfo.Builder {
+    ctor public CursorAnchorInfo.Builder();
+    method public android.view.inputmethod.CursorAnchorInfo.Builder addCharacterBounds(int, float, float, float, float, int);
+    method public android.view.inputmethod.CursorAnchorInfo build();
+    method public void reset();
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setComposingText(int, CharSequence);
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setInsertionMarkerLocation(float, float, float, float, int);
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setMatrix(android.graphics.Matrix);
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setSelectionRange(int, int);
+  }
+
+  public class EditorInfo implements android.text.InputType android.os.Parcelable {
+    ctor public EditorInfo();
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method @Nullable public CharSequence getInitialSelectedText(int);
+    method @Nullable public android.view.inputmethod.SurroundingText getInitialSurroundingText(@IntRange(from=0) int, @IntRange(from=0) int, int);
+    method @Nullable public CharSequence getInitialTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getInitialTextBeforeCursor(@IntRange(from=0) int, int);
+    method public final void makeCompatible(int);
+    method public void setInitialSurroundingSubText(@NonNull CharSequence, int);
+    method public void setInitialSurroundingText(@NonNull CharSequence);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.EditorInfo> CREATOR;
+    field public static final int IME_ACTION_DONE = 6; // 0x6
+    field public static final int IME_ACTION_GO = 2; // 0x2
+    field public static final int IME_ACTION_NEXT = 5; // 0x5
+    field public static final int IME_ACTION_NONE = 1; // 0x1
+    field public static final int IME_ACTION_PREVIOUS = 7; // 0x7
+    field public static final int IME_ACTION_SEARCH = 3; // 0x3
+    field public static final int IME_ACTION_SEND = 4; // 0x4
+    field public static final int IME_ACTION_UNSPECIFIED = 0; // 0x0
+    field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+    field public static final int IME_FLAG_NAVIGATE_NEXT = 134217728; // 0x8000000
+    field public static final int IME_FLAG_NAVIGATE_PREVIOUS = 67108864; // 0x4000000
+    field public static final int IME_FLAG_NO_ACCESSORY_ACTION = 536870912; // 0x20000000
+    field public static final int IME_FLAG_NO_ENTER_ACTION = 1073741824; // 0x40000000
+    field public static final int IME_FLAG_NO_EXTRACT_UI = 268435456; // 0x10000000
+    field public static final int IME_FLAG_NO_FULLSCREEN = 33554432; // 0x2000000
+    field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+    field public static final int IME_MASK_ACTION = 255; // 0xff
+    field public static final int IME_NULL = 0; // 0x0
+    field public int actionId;
+    field public CharSequence actionLabel;
+    field @Nullable public String[] contentMimeTypes;
+    field public android.os.Bundle extras;
+    field public int fieldId;
+    field public String fieldName;
+    field @Nullable public android.os.LocaleList hintLocales;
+    field public CharSequence hintText;
+    field public int imeOptions;
+    field public int initialCapsMode;
+    field public int initialSelEnd;
+    field public int initialSelStart;
+    field public int inputType;
+    field public CharSequence label;
+    field public String packageName;
+    field public String privateImeOptions;
+  }
+
+  public class ExtractedText implements android.os.Parcelable {
+    ctor public ExtractedText();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedText> CREATOR;
+    field public static final int FLAG_SELECTING = 2; // 0x2
+    field public static final int FLAG_SINGLE_LINE = 1; // 0x1
+    field public int flags;
+    field public CharSequence hint;
+    field public int partialEndOffset;
+    field public int partialStartOffset;
+    field public int selectionEnd;
+    field public int selectionStart;
+    field public int startOffset;
+    field public CharSequence text;
+  }
+
+  public class ExtractedTextRequest implements android.os.Parcelable {
+    ctor public ExtractedTextRequest();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedTextRequest> CREATOR;
+    field public int flags;
+    field public int hintMaxChars;
+    field public int hintMaxLines;
+    field public int token;
+  }
+
+  public final class InlineSuggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.inputmethod.InlineSuggestionInfo getInfo();
+    method public void inflate(@NonNull android.content.Context, @NonNull android.util.Size, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.widget.inline.InlineContentView>);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestion> CREATOR;
+  }
+
+  public final class InlineSuggestionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String[] getAutofillHints();
+    method @NonNull public android.widget.inline.InlinePresentationSpec getInlinePresentationSpec();
+    method @NonNull public String getSource();
+    method @NonNull public String getType();
+    method public boolean isPinned();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestionInfo> CREATOR;
+    field public static final String SOURCE_AUTOFILL = "android:autofill";
+    field public static final String SOURCE_PLATFORM = "android:platform";
+    field public static final String TYPE_ACTION = "android:autofill:action";
+    field public static final String TYPE_SUGGESTION = "android:autofill:suggestion";
+  }
+
+  public final class InlineSuggestionsRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getHostPackageName();
+    method @NonNull public java.util.List<android.widget.inline.InlinePresentationSpec> getInlinePresentationSpecs();
+    method @Nullable public android.widget.inline.InlinePresentationSpec getInlineTooltipPresentationSpec();
+    method public int getMaxSuggestionCount();
+    method @NonNull public android.os.LocaleList getSupportedLocales();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestionsRequest> CREATOR;
+    field public static final int SUGGESTION_COUNT_UNLIMITED = 2147483647; // 0x7fffffff
+  }
+
+  public static final class InlineSuggestionsRequest.Builder {
+    ctor public InlineSuggestionsRequest.Builder(@NonNull java.util.List<android.widget.inline.InlinePresentationSpec>);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder addInlinePresentationSpecs(@NonNull android.widget.inline.InlinePresentationSpec);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest build();
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(@NonNull java.util.List<android.widget.inline.InlinePresentationSpec>);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setInlineTooltipPresentationSpec(@NonNull android.widget.inline.InlinePresentationSpec);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setMaxSuggestionCount(int);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setSupportedLocales(@NonNull android.os.LocaleList);
+  }
+
+  public final class InlineSuggestionsResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.view.inputmethod.InlineSuggestion> getInlineSuggestions();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestionsResponse> CREATOR;
+  }
+
+  public final class InputBinding implements android.os.Parcelable {
+    ctor public InputBinding(android.view.inputmethod.InputConnection, android.os.IBinder, int, int);
+    ctor public InputBinding(android.view.inputmethod.InputConnection, android.view.inputmethod.InputBinding);
+    method public int describeContents();
+    method public android.view.inputmethod.InputConnection getConnection();
+    method public android.os.IBinder getConnectionToken();
+    method public int getPid();
+    method public int getUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputBinding> CREATOR;
+  }
+
+  public interface InputConnection {
+    method public boolean beginBatchEdit();
+    method public boolean clearMetaKeyStates(int);
+    method public void closeConnection();
+    method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(@NonNull android.view.inputmethod.InputContentInfo, int, @Nullable android.os.Bundle);
+    method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public boolean commitText(CharSequence, int);
+    method public boolean deleteSurroundingText(int, int);
+    method public boolean deleteSurroundingTextInCodePoints(int, int);
+    method public boolean endBatchEdit();
+    method public boolean finishComposingText();
+    method public int getCursorCapsMode(int);
+    method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int);
+    method public android.os.Handler getHandler();
+    method public CharSequence getSelectedText(int);
+    method @Nullable public default android.view.inputmethod.SurroundingText getSurroundingText(@IntRange(from=0) int, @IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextBeforeCursor(@IntRange(from=0) int, int);
+    method public boolean performContextMenuAction(int);
+    method public boolean performEditorAction(int);
+    method public boolean performPrivateCommand(String, android.os.Bundle);
+    method public default boolean performSpellCheck();
+    method public boolean reportFullscreenMode(boolean);
+    method public boolean requestCursorUpdates(int);
+    method public boolean sendKeyEvent(android.view.KeyEvent);
+    method public boolean setComposingRegion(int, int);
+    method public boolean setComposingText(CharSequence, int);
+    method public default boolean setImeConsumesInput(boolean);
+    method public boolean setSelection(int, int);
+    field public static final int CURSOR_UPDATE_IMMEDIATE = 1; // 0x1
+    field public static final int CURSOR_UPDATE_MONITOR = 2; // 0x2
+    field public static final int GET_EXTRACTED_TEXT_MONITOR = 1; // 0x1
+    field public static final int GET_TEXT_WITH_STYLES = 1; // 0x1
+    field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+  }
+
+  public class InputConnectionWrapper implements android.view.inputmethod.InputConnection {
+    ctor public InputConnectionWrapper(android.view.inputmethod.InputConnection, boolean);
+    method public boolean beginBatchEdit();
+    method public boolean clearMetaKeyStates(int);
+    method public void closeConnection();
+    method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(android.view.inputmethod.InputContentInfo, int, android.os.Bundle);
+    method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public boolean commitText(CharSequence, int);
+    method public boolean deleteSurroundingText(int, int);
+    method public boolean deleteSurroundingTextInCodePoints(int, int);
+    method public boolean endBatchEdit();
+    method public boolean finishComposingText();
+    method public int getCursorCapsMode(int);
+    method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int);
+    method public android.os.Handler getHandler();
+    method public CharSequence getSelectedText(int);
+    method @Nullable public CharSequence getTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextBeforeCursor(@IntRange(from=0) int, int);
+    method public boolean performContextMenuAction(int);
+    method public boolean performEditorAction(int);
+    method public boolean performPrivateCommand(String, android.os.Bundle);
+    method public boolean reportFullscreenMode(boolean);
+    method public boolean requestCursorUpdates(int);
+    method public boolean sendKeyEvent(android.view.KeyEvent);
+    method public boolean setComposingRegion(int, int);
+    method public boolean setComposingText(CharSequence, int);
+    method public boolean setSelection(int, int);
+    method public void setTarget(android.view.inputmethod.InputConnection);
+  }
+
+  public final class InputContentInfo implements android.os.Parcelable {
+    ctor public InputContentInfo(@NonNull android.net.Uri, @NonNull android.content.ClipDescription);
+    ctor public InputContentInfo(@NonNull android.net.Uri, @NonNull android.content.ClipDescription, @Nullable android.net.Uri);
+    method public int describeContents();
+    method @NonNull public android.net.Uri getContentUri();
+    method @NonNull public android.content.ClipDescription getDescription();
+    method @Nullable public android.net.Uri getLinkUri();
+    method public void releasePermission();
+    method public void requestPermission();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputContentInfo> CREATOR;
+  }
+
+  public interface InputMethod {
+    method @MainThread public void attachToken(android.os.IBinder);
+    method @MainThread public void bindInput(android.view.inputmethod.InputBinding);
+    method @MainThread public void changeInputMethodSubtype(android.view.inputmethod.InputMethodSubtype);
+    method @MainThread public void createSession(android.view.inputmethod.InputMethod.SessionCallback);
+    method @MainThread public void hideSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void restartInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void revokeSession(android.view.inputmethod.InputMethodSession);
+    method @MainThread public void setSessionEnabled(android.view.inputmethod.InputMethodSession, boolean);
+    method @MainThread public void showSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void startInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void unbindInput();
+    field public static final String SERVICE_INTERFACE = "android.view.InputMethod";
+    field public static final String SERVICE_META_DATA = "android.view.im";
+    field public static final int SHOW_EXPLICIT = 1; // 0x1
+    field public static final int SHOW_FORCED = 2; // 0x2
+  }
+
+  public static interface InputMethod.SessionCallback {
+    method public void sessionCreated(android.view.inputmethod.InputMethodSession);
+  }
+
+  public final class InputMethodInfo implements android.os.Parcelable {
+    ctor public InputMethodInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    ctor public InputMethodInfo(String, String, CharSequence, String);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public android.content.ComponentName getComponent();
+    method public int getConfigChanges();
+    method public String getId();
+    method public int getIsDefaultResourceId();
+    method public String getPackageName();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public String getServiceName();
+    method public String getSettingsActivity();
+    method public android.view.inputmethod.InputMethodSubtype getSubtypeAt(int);
+    method public int getSubtypeCount();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public boolean shouldShowInInputMethodPicker();
+    method public boolean suppressesSpellChecker();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputMethodInfo> CREATOR;
+  }
+
+  public final class InputMethodManager {
+    method public void dispatchKeyEventFromInputMethod(@Nullable android.view.View, @NonNull android.view.KeyEvent);
+    method public void displayCompletions(android.view.View, android.view.inputmethod.CompletionInfo[]);
+    method public android.view.inputmethod.InputMethodSubtype getCurrentInputMethodSubtype();
+    method public java.util.List<android.view.inputmethod.InputMethodInfo> getEnabledInputMethodList();
+    method public java.util.List<android.view.inputmethod.InputMethodSubtype> getEnabledInputMethodSubtypeList(android.view.inputmethod.InputMethodInfo, boolean);
+    method public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodList();
+    method public android.view.inputmethod.InputMethodSubtype getLastInputMethodSubtype();
+    method public java.util.Map<android.view.inputmethod.InputMethodInfo,java.util.List<android.view.inputmethod.InputMethodSubtype>> getShortcutInputMethodsAndSubtypes();
+    method @Deprecated public void hideSoftInputFromInputMethod(android.os.IBinder, int);
+    method public boolean hideSoftInputFromWindow(android.os.IBinder, int);
+    method public boolean hideSoftInputFromWindow(android.os.IBinder, int, android.os.ResultReceiver);
+    method @Deprecated public void hideStatusIcon(android.os.IBinder);
+    method public boolean isAcceptingText();
+    method public boolean isActive(android.view.View);
+    method public boolean isActive();
+    method public boolean isFullscreenMode();
+    method public boolean isInputMethodSuppressingSpellChecker();
+    method @Deprecated public boolean isWatchingCursor(android.view.View);
+    method public void restartInput(android.view.View);
+    method public void sendAppPrivateCommand(android.view.View, String, android.os.Bundle);
+    method @Deprecated public void setAdditionalInputMethodSubtypes(String, android.view.inputmethod.InputMethodSubtype[]);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean setCurrentInputMethodSubtype(android.view.inputmethod.InputMethodSubtype);
+    method @Deprecated public void setInputMethod(android.os.IBinder, String);
+    method @Deprecated public void setInputMethodAndSubtype(@NonNull android.os.IBinder, String, android.view.inputmethod.InputMethodSubtype);
+    method @Deprecated public boolean shouldOfferSwitchingToNextInputMethod(android.os.IBinder);
+    method public void showInputMethodAndSubtypeEnabler(String);
+    method public void showInputMethodPicker();
+    method public boolean showSoftInput(android.view.View, int);
+    method public boolean showSoftInput(android.view.View, int, android.os.ResultReceiver);
+    method @Deprecated public void showSoftInputFromInputMethod(android.os.IBinder, int);
+    method @Deprecated public void showStatusIcon(android.os.IBinder, String, @DrawableRes int);
+    method @Deprecated public boolean switchToLastInputMethod(android.os.IBinder);
+    method @Deprecated public boolean switchToNextInputMethod(android.os.IBinder, boolean);
+    method @Deprecated public void toggleSoftInput(int, int);
+    method @Deprecated public void toggleSoftInputFromWindow(android.os.IBinder, int, int);
+    method @Deprecated public void updateCursor(android.view.View, int, int, int, int);
+    method public void updateCursorAnchorInfo(android.view.View, android.view.inputmethod.CursorAnchorInfo);
+    method public void updateExtractedText(android.view.View, int, android.view.inputmethod.ExtractedText);
+    method public void updateSelection(android.view.View, int, int, int, int);
+    method @Deprecated public void viewClicked(android.view.View);
+    field public static final int HIDE_IMPLICIT_ONLY = 1; // 0x1
+    field public static final int HIDE_NOT_ALWAYS = 2; // 0x2
+    field public static final int RESULT_HIDDEN = 3; // 0x3
+    field public static final int RESULT_SHOWN = 2; // 0x2
+    field public static final int RESULT_UNCHANGED_HIDDEN = 1; // 0x1
+    field public static final int RESULT_UNCHANGED_SHOWN = 0; // 0x0
+    field public static final int SHOW_FORCED = 2; // 0x2
+    field public static final int SHOW_IMPLICIT = 1; // 0x1
+  }
+
+  public interface InputMethodSession {
+    method public void appPrivateCommand(String, android.os.Bundle);
+    method public void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public void finishInput();
+    method @Deprecated public void toggleSoftInput(int, int);
+    method public void updateCursor(android.graphics.Rect);
+    method public void updateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo);
+    method public void updateExtractedText(int, android.view.inputmethod.ExtractedText);
+    method public void updateSelection(int, int, int, int, int, int);
+    method public void viewClicked(boolean);
+  }
+
+  public static interface InputMethodSession.EventCallback {
+    method public void finishedEvent(int, boolean);
+  }
+
+  public final class InputMethodSubtype implements android.os.Parcelable {
+    ctor @Deprecated public InputMethodSubtype(int, int, String, String, String, boolean, boolean);
+    ctor @Deprecated public InputMethodSubtype(int, int, String, String, String, boolean, boolean, int);
+    method public boolean containsExtraValueKey(String);
+    method public int describeContents();
+    method @NonNull public CharSequence getDisplayName(android.content.Context, String, android.content.pm.ApplicationInfo);
+    method public String getExtraValue();
+    method public String getExtraValueOf(String);
+    method public int getIconResId();
+    method @NonNull public String getLanguageTag();
+    method @Deprecated @NonNull public String getLocale();
+    method public String getMode();
+    method public int getNameResId();
+    method public boolean isAsciiCapable();
+    method public boolean isAuxiliary();
+    method public boolean overridesImplicitlyEnabledSubtype();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputMethodSubtype> CREATOR;
+  }
+
+  public static class InputMethodSubtype.InputMethodSubtypeBuilder {
+    ctor public InputMethodSubtype.InputMethodSubtypeBuilder();
+    method public android.view.inputmethod.InputMethodSubtype build();
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setIsAsciiCapable(boolean);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setIsAuxiliary(boolean);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setLanguageTag(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setOverridesImplicitlyEnabledSubtype(boolean);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeExtraValue(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeIconResId(int);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeId(int);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeLocale(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeMode(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeNameResId(int);
+  }
+
+  public final class SurroundingText implements android.os.Parcelable {
+    ctor public SurroundingText(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int);
+    method public int describeContents();
+    method @IntRange(from=0xffffffff) public int getOffset();
+    method @IntRange(from=0) public int getSelectionEnd();
+    method @IntRange(from=0) public int getSelectionStart();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.SurroundingText> CREATOR;
+  }
+
+}
+
+package android.view.inspector {
+
+  public interface InspectionCompanion<T> {
+    method public void mapProperties(@NonNull android.view.inspector.PropertyMapper);
+    method public void readProperties(@NonNull T, @NonNull android.view.inspector.PropertyReader);
+  }
+
+  public static class InspectionCompanion.UninitializedPropertyMapException extends java.lang.RuntimeException {
+    ctor public InspectionCompanion.UninitializedPropertyMapException();
+  }
+
+  public interface InspectionCompanionProvider {
+    method @Nullable public <T> android.view.inspector.InspectionCompanion<T> provide(@NonNull Class<T>);
+  }
+
+  public final class IntFlagMapping {
+    ctor public IntFlagMapping();
+    method public void add(int, int, @NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> get(int);
+  }
+
+  public interface PropertyMapper {
+    method public int mapBoolean(@NonNull String, @AttrRes int);
+    method public int mapByte(@NonNull String, @AttrRes int);
+    method public int mapChar(@NonNull String, @AttrRes int);
+    method public int mapColor(@NonNull String, @AttrRes int);
+    method public int mapDouble(@NonNull String, @AttrRes int);
+    method public int mapFloat(@NonNull String, @AttrRes int);
+    method public int mapGravity(@NonNull String, @AttrRes int);
+    method public int mapInt(@NonNull String, @AttrRes int);
+    method public int mapIntEnum(@NonNull String, @AttrRes int, @NonNull java.util.function.IntFunction<java.lang.String>);
+    method public int mapIntFlag(@NonNull String, @AttrRes int, @NonNull java.util.function.IntFunction<java.util.Set<java.lang.String>>);
+    method public int mapLong(@NonNull String, @AttrRes int);
+    method public int mapObject(@NonNull String, @AttrRes int);
+    method public int mapResourceId(@NonNull String, @AttrRes int);
+    method public int mapShort(@NonNull String, @AttrRes int);
+  }
+
+  public static class PropertyMapper.PropertyConflictException extends java.lang.RuntimeException {
+    ctor public PropertyMapper.PropertyConflictException(@NonNull String, @NonNull String, @NonNull String);
+  }
+
+  public interface PropertyReader {
+    method public void readBoolean(int, boolean);
+    method public void readByte(int, byte);
+    method public void readChar(int, char);
+    method public void readColor(int, @ColorInt int);
+    method public void readColor(int, @ColorLong long);
+    method public void readColor(int, @Nullable android.graphics.Color);
+    method public void readDouble(int, double);
+    method public void readFloat(int, float);
+    method public void readGravity(int, int);
+    method public void readInt(int, int);
+    method public void readIntEnum(int, int);
+    method public void readIntFlag(int, int);
+    method public void readLong(int, long);
+    method public void readObject(int, @Nullable Object);
+    method public void readResourceId(int, @AnyRes int);
+    method public void readShort(int, short);
+  }
+
+  public static class PropertyReader.PropertyTypeMismatchException extends java.lang.RuntimeException {
+    ctor public PropertyReader.PropertyTypeMismatchException(int, @NonNull String, @NonNull String, @Nullable String);
+    ctor public PropertyReader.PropertyTypeMismatchException(int, @NonNull String, @NonNull String);
+  }
+
+  public class StaticInspectionCompanionProvider implements android.view.inspector.InspectionCompanionProvider {
+    ctor public StaticInspectionCompanionProvider();
+    method @Nullable public <T> android.view.inspector.InspectionCompanion<T> provide(@NonNull Class<T>);
+  }
+
+  public final class WindowInspector {
+    method @NonNull public static java.util.List<android.view.View> getGlobalWindowViews();
+  }
+
+}
+
+package android.view.textclassifier {
+
+  public final class ConversationAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.RemoteAction getAction();
+    method @FloatRange(from=0, to=1) public float getConfidenceScore();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public CharSequence getTextReply();
+    method @NonNull public String getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationAction> CREATOR;
+    field public static final String TYPE_CALL_PHONE = "call_phone";
+    field public static final String TYPE_CREATE_REMINDER = "create_reminder";
+    field public static final String TYPE_OPEN_URL = "open_url";
+    field public static final String TYPE_SEND_EMAIL = "send_email";
+    field public static final String TYPE_SEND_SMS = "send_sms";
+    field public static final String TYPE_SHARE_LOCATION = "share_location";
+    field public static final String TYPE_TEXT_REPLY = "text_reply";
+    field public static final String TYPE_TRACK_FLIGHT = "track_flight";
+    field public static final String TYPE_VIEW_CALENDAR = "view_calendar";
+    field public static final String TYPE_VIEW_MAP = "view_map";
+  }
+
+  public static final class ConversationAction.Builder {
+    ctor public ConversationAction.Builder(@NonNull String);
+    method @NonNull public android.view.textclassifier.ConversationAction build();
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setAction(@Nullable android.app.RemoteAction);
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setConfidenceScore(@FloatRange(from=0, to=1) float);
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setTextReply(@Nullable CharSequence);
+  }
+
+  public final class ConversationActions implements android.os.Parcelable {
+    ctor public ConversationActions(@NonNull java.util.List<android.view.textclassifier.ConversationAction>, @Nullable String);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.view.textclassifier.ConversationAction> getConversationActions();
+    method @Nullable public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions> CREATOR;
+  }
+
+  public static final class ConversationActions.Message implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.app.Person getAuthor();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.time.ZonedDateTime getReferenceTime();
+    method @Nullable public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions.Message> CREATOR;
+    field @NonNull public static final android.app.Person PERSON_USER_OTHERS;
+    field @NonNull public static final android.app.Person PERSON_USER_SELF;
+  }
+
+  public static final class ConversationActions.Message.Builder {
+    ctor public ConversationActions.Message.Builder(@NonNull android.app.Person);
+    method @NonNull public android.view.textclassifier.ConversationActions.Message build();
+    method @NonNull public android.view.textclassifier.ConversationActions.Message.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.ConversationActions.Message.Builder setReferenceTime(@Nullable java.time.ZonedDateTime);
+    method @NonNull public android.view.textclassifier.ConversationActions.Message.Builder setText(@Nullable CharSequence);
+  }
+
+  public static final class ConversationActions.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @NonNull public java.util.List<android.view.textclassifier.ConversationActions.Message> getConversation();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public java.util.List<java.lang.String> getHints();
+    method @IntRange(from=0xffffffff) public int getMaxSuggestions();
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig getTypeConfig();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions.Request> CREATOR;
+    field public static final String HINT_FOR_IN_APP = "in_app";
+    field public static final String HINT_FOR_NOTIFICATION = "notification";
+  }
+
+  public static final class ConversationActions.Request.Builder {
+    ctor public ConversationActions.Request.Builder(@NonNull java.util.List<android.view.textclassifier.ConversationActions.Message>);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request build();
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setHints(@Nullable java.util.List<java.lang.String>);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setMaxSuggestions(@IntRange(from=0xffffffff) int);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setTypeConfig(@Nullable android.view.textclassifier.TextClassifier.EntityConfig);
+  }
+
+  public final class SelectionEvent implements android.os.Parcelable {
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionActionEvent(int, int, int);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionActionEvent(int, int, int, @NonNull android.view.textclassifier.TextClassification);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionModifiedEvent(int, int);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionModifiedEvent(int, int, @NonNull android.view.textclassifier.TextClassification);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionModifiedEvent(int, int, @NonNull android.view.textclassifier.TextSelection);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionStartedEvent(int, int);
+    method public int describeContents();
+    method public long getDurationSincePreviousEvent();
+    method public long getDurationSinceSessionStart();
+    method public int getEnd();
+    method @NonNull public String getEntityType();
+    method public int getEventIndex();
+    method public long getEventTime();
+    method public int getEventType();
+    method public int getInvocationMethod();
+    method @NonNull public String getPackageName();
+    method @Nullable public String getResultId();
+    method @Nullable public android.view.textclassifier.TextClassificationSessionId getSessionId();
+    method public int getSmartEnd();
+    method public int getSmartStart();
+    method public int getStart();
+    method @NonNull public String getWidgetType();
+    method @Nullable public String getWidgetVersion();
+    method public static boolean isTerminal(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_ABANDON = 107; // 0x6b
+    field public static final int ACTION_COPY = 101; // 0x65
+    field public static final int ACTION_CUT = 103; // 0x67
+    field public static final int ACTION_DRAG = 106; // 0x6a
+    field public static final int ACTION_OTHER = 108; // 0x6c
+    field public static final int ACTION_OVERTYPE = 100; // 0x64
+    field public static final int ACTION_PASTE = 102; // 0x66
+    field public static final int ACTION_RESET = 201; // 0xc9
+    field public static final int ACTION_SELECT_ALL = 200; // 0xc8
+    field public static final int ACTION_SHARE = 104; // 0x68
+    field public static final int ACTION_SMART_SHARE = 105; // 0x69
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.SelectionEvent> CREATOR;
+    field public static final int EVENT_AUTO_SELECTION = 5; // 0x5
+    field public static final int EVENT_SELECTION_MODIFIED = 2; // 0x2
+    field public static final int EVENT_SELECTION_STARTED = 1; // 0x1
+    field public static final int EVENT_SMART_SELECTION_MULTI = 4; // 0x4
+    field public static final int EVENT_SMART_SELECTION_SINGLE = 3; // 0x3
+    field public static final int INVOCATION_LINK = 2; // 0x2
+    field public static final int INVOCATION_MANUAL = 1; // 0x1
+    field public static final int INVOCATION_UNKNOWN = 0; // 0x0
+  }
+
+  public final class TextClassification implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.List<android.app.RemoteAction> getActions();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String);
+    method @NonNull public String getEntity(int);
+    method @IntRange(from=0) public int getEntityCount();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getIcon();
+    method @Nullable public String getId();
+    method @Deprecated @Nullable public android.content.Intent getIntent();
+    method @Deprecated @Nullable public CharSequence getLabel();
+    method @Deprecated @Nullable public android.view.View.OnClickListener getOnClickListener();
+    method @Nullable public String getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassification> CREATOR;
+  }
+
+  public static final class TextClassification.Builder {
+    ctor public TextClassification.Builder();
+    method @NonNull public android.view.textclassifier.TextClassification.Builder addAction(@NonNull android.app.RemoteAction);
+    method @NonNull public android.view.textclassifier.TextClassification build();
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setEntityType(@NonNull String, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setExtras(@Nullable android.os.Bundle);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setIcon(@Nullable android.graphics.drawable.Drawable);
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setId(@Nullable String);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setIntent(@Nullable android.content.Intent);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setLabel(@Nullable String);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setOnClickListener(@Nullable android.view.View.OnClickListener);
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setText(@Nullable String);
+  }
+
+  public static final class TextClassification.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @Nullable public android.os.LocaleList getDefaultLocales();
+    method @IntRange(from=0) public int getEndIndex();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.time.ZonedDateTime getReferenceTime();
+    method @IntRange(from=0) public int getStartIndex();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassification.Request> CREATOR;
+  }
+
+  public static final class TextClassification.Request.Builder {
+    ctor public TextClassification.Request.Builder(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.textclassifier.TextClassification.Request build();
+    method @NonNull public android.view.textclassifier.TextClassification.Request.Builder setDefaultLocales(@Nullable android.os.LocaleList);
+    method @NonNull public android.view.textclassifier.TextClassification.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextClassification.Request.Builder setReferenceTime(@Nullable java.time.ZonedDateTime);
+  }
+
+  public final class TextClassificationContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getPackageName();
+    method @NonNull public String getWidgetType();
+    method @Nullable public String getWidgetVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassificationContext> CREATOR;
+  }
+
+  public static final class TextClassificationContext.Builder {
+    ctor public TextClassificationContext.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.view.textclassifier.TextClassificationContext build();
+    method public android.view.textclassifier.TextClassificationContext.Builder setWidgetVersion(@Nullable String);
+  }
+
+  public final class TextClassificationManager {
+    method @NonNull public android.view.textclassifier.TextClassifier createTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext);
+    method @NonNull public android.view.textclassifier.TextClassifier getTextClassifier();
+    method public void setTextClassificationSessionFactory(@Nullable android.view.textclassifier.TextClassificationSessionFactory);
+    method public void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+  }
+
+  public interface TextClassificationSessionFactory {
+    method @NonNull public android.view.textclassifier.TextClassifier createTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext);
+  }
+
+  public final class TextClassificationSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getValue();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassificationSessionId> CREATOR;
+  }
+
+  public interface TextClassifier {
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextClassification classifyText(@NonNull android.view.textclassifier.TextClassification.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextClassification classifyText(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.os.LocaleList);
+    method public default void destroy();
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextLanguage detectLanguage(@NonNull android.view.textclassifier.TextLanguage.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextLinks generateLinks(@NonNull android.view.textclassifier.TextLinks.Request);
+    method @WorkerThread public default int getMaxGenerateLinksTextLength();
+    method public default boolean isDestroyed();
+    method public default void onSelectionEvent(@NonNull android.view.textclassifier.SelectionEvent);
+    method public default void onTextClassifierEvent(@NonNull android.view.textclassifier.TextClassifierEvent);
+    method @NonNull @WorkerThread public default android.view.textclassifier.ConversationActions suggestConversationActions(@NonNull android.view.textclassifier.ConversationActions.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextSelection suggestSelection(@NonNull android.view.textclassifier.TextSelection.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextSelection suggestSelection(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.os.LocaleList);
+    field public static final String EXTRA_FROM_TEXT_CLASSIFIER = "android.view.textclassifier.extra.FROM_TEXT_CLASSIFIER";
+    field public static final String HINT_TEXT_IS_EDITABLE = "android.text_is_editable";
+    field public static final String HINT_TEXT_IS_NOT_EDITABLE = "android.text_is_not_editable";
+    field public static final android.view.textclassifier.TextClassifier NO_OP;
+    field public static final String TYPE_ADDRESS = "address";
+    field public static final String TYPE_DATE = "date";
+    field public static final String TYPE_DATE_TIME = "datetime";
+    field public static final String TYPE_EMAIL = "email";
+    field public static final String TYPE_FLIGHT_NUMBER = "flight";
+    field public static final String TYPE_OTHER = "other";
+    field public static final String TYPE_PHONE = "phone";
+    field public static final String TYPE_UNKNOWN = "";
+    field public static final String TYPE_URL = "url";
+    field public static final String WIDGET_TYPE_CLIPBOARD = "clipboard";
+    field public static final String WIDGET_TYPE_CUSTOM_EDITTEXT = "customedit";
+    field public static final String WIDGET_TYPE_CUSTOM_TEXTVIEW = "customview";
+    field public static final String WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW = "nosel-customview";
+    field public static final String WIDGET_TYPE_EDITTEXT = "edittext";
+    field public static final String WIDGET_TYPE_EDIT_WEBVIEW = "edit-webview";
+    field public static final String WIDGET_TYPE_NOTIFICATION = "notification";
+    field public static final String WIDGET_TYPE_TEXTVIEW = "textview";
+    field public static final String WIDGET_TYPE_UNKNOWN = "unknown";
+    field public static final String WIDGET_TYPE_UNSELECTABLE_TEXTVIEW = "nosel-textview";
+    field public static final String WIDGET_TYPE_WEBVIEW = "webview";
+  }
+
+  public static final class TextClassifier.EntityConfig implements android.os.Parcelable {
+    method @Deprecated public static android.view.textclassifier.TextClassifier.EntityConfig create(@Nullable java.util.Collection<java.lang.String>, @Nullable java.util.Collection<java.lang.String>, @Nullable java.util.Collection<java.lang.String>);
+    method @Deprecated public static android.view.textclassifier.TextClassifier.EntityConfig createWithExplicitEntityList(@Nullable java.util.Collection<java.lang.String>);
+    method @Deprecated public static android.view.textclassifier.TextClassifier.EntityConfig createWithHints(@Nullable java.util.Collection<java.lang.String>);
+    method public int describeContents();
+    method public java.util.Collection<java.lang.String> getHints();
+    method public java.util.Collection<java.lang.String> resolveEntityListModifications(@NonNull java.util.Collection<java.lang.String>);
+    method public boolean shouldIncludeTypesFromTextClassifier();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifier.EntityConfig> CREATOR;
+  }
+
+  public static final class TextClassifier.EntityConfig.Builder {
+    ctor public TextClassifier.EntityConfig.Builder();
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig build();
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder includeTypesFromTextClassifier(boolean);
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder setExcludedTypes(@Nullable java.util.Collection<java.lang.String>);
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder setHints(@Nullable java.util.Collection<java.lang.String>);
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder setIncludedTypes(@Nullable java.util.Collection<java.lang.String>);
+  }
+
+  public abstract class TextClassifierEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public int[] getActionIndices();
+    method @NonNull public String[] getEntityTypes();
+    method public int getEventCategory();
+    method @Nullable public android.view.textclassifier.TextClassificationContext getEventContext();
+    method public int getEventIndex();
+    method public int getEventType();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public android.icu.util.ULocale getLocale();
+    method @Nullable public String getModelName();
+    method @Nullable public String getResultId();
+    method @NonNull public float[] getScores();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CATEGORY_CONVERSATION_ACTIONS = 3; // 0x3
+    field public static final int CATEGORY_LANGUAGE_DETECTION = 4; // 0x4
+    field public static final int CATEGORY_LINKIFY = 2; // 0x2
+    field public static final int CATEGORY_SELECTION = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent> CREATOR;
+    field public static final int TYPE_ACTIONS_GENERATED = 20; // 0x14
+    field public static final int TYPE_ACTIONS_SHOWN = 6; // 0x6
+    field public static final int TYPE_AUTO_SELECTION = 5; // 0x5
+    field public static final int TYPE_COPY_ACTION = 9; // 0x9
+    field public static final int TYPE_CUT_ACTION = 11; // 0xb
+    field public static final int TYPE_LINKS_GENERATED = 21; // 0x15
+    field public static final int TYPE_LINK_CLICKED = 7; // 0x7
+    field public static final int TYPE_MANUAL_REPLY = 19; // 0x13
+    field public static final int TYPE_OTHER_ACTION = 16; // 0x10
+    field public static final int TYPE_OVERTYPE = 8; // 0x8
+    field public static final int TYPE_PASTE_ACTION = 10; // 0xa
+    field public static final int TYPE_SELECTION_DESTROYED = 15; // 0xf
+    field public static final int TYPE_SELECTION_DRAG = 14; // 0xe
+    field public static final int TYPE_SELECTION_MODIFIED = 2; // 0x2
+    field public static final int TYPE_SELECTION_RESET = 18; // 0x12
+    field public static final int TYPE_SELECTION_STARTED = 1; // 0x1
+    field public static final int TYPE_SELECT_ALL = 17; // 0x11
+    field public static final int TYPE_SHARE_ACTION = 12; // 0xc
+    field public static final int TYPE_SMART_ACTION = 13; // 0xd
+    field public static final int TYPE_SMART_SELECTION_MULTI = 4; // 0x4
+    field public static final int TYPE_SMART_SELECTION_SINGLE = 3; // 0x3
+  }
+
+  public abstract static class TextClassifierEvent.Builder<T extends android.view.textclassifier.TextClassifierEvent.Builder<T>> {
+    method @NonNull public T setActionIndices(@NonNull int...);
+    method @NonNull public T setEntityTypes(@NonNull java.lang.String...);
+    method @NonNull public T setEventContext(@Nullable android.view.textclassifier.TextClassificationContext);
+    method @NonNull public T setEventIndex(int);
+    method @NonNull public T setExtras(@NonNull android.os.Bundle);
+    method @NonNull public T setLocale(@Nullable android.icu.util.ULocale);
+    method @NonNull public T setModelName(@Nullable String);
+    method @NonNull public T setResultId(@Nullable String);
+    method @NonNull public T setScores(@NonNull float...);
+  }
+
+  public static final class TextClassifierEvent.ConversationActionsEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.ConversationActionsEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent.Builder> {
+    ctor public TextClassifierEvent.ConversationActionsEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent build();
+  }
+
+  public static final class TextClassifierEvent.LanguageDetectionEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.LanguageDetectionEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent.Builder> {
+    ctor public TextClassifierEvent.LanguageDetectionEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent build();
+  }
+
+  public static final class TextClassifierEvent.TextLinkifyEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.TextLinkifyEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent.Builder> {
+    ctor public TextClassifierEvent.TextLinkifyEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent build();
+  }
+
+  public static final class TextClassifierEvent.TextSelectionEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    method public int getRelativeSuggestedWordEndIndex();
+    method public int getRelativeSuggestedWordStartIndex();
+    method public int getRelativeWordEndIndex();
+    method public int getRelativeWordStartIndex();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.TextSelectionEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.TextSelectionEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder> {
+    ctor public TextClassifierEvent.TextSelectionEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent build();
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeSuggestedWordEndIndex(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeSuggestedWordStartIndex(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeWordEndIndex(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeWordStartIndex(int);
+  }
+
+  public final class TextLanguage implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(@NonNull android.icu.util.ULocale);
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public String getId();
+    method @NonNull public android.icu.util.ULocale getLocale(int);
+    method @IntRange(from=0) public int getLocaleHypothesisCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLanguage> CREATOR;
+  }
+
+  public static final class TextLanguage.Builder {
+    ctor public TextLanguage.Builder();
+    method @NonNull public android.view.textclassifier.TextLanguage build();
+    method @NonNull public android.view.textclassifier.TextLanguage.Builder putLocale(@NonNull android.icu.util.ULocale, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.textclassifier.TextLanguage.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextLanguage.Builder setId(@Nullable String);
+  }
+
+  public static final class TextLanguage.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLanguage.Request> CREATOR;
+  }
+
+  public static final class TextLanguage.Request.Builder {
+    ctor public TextLanguage.Request.Builder(@NonNull CharSequence);
+    method @NonNull public android.view.textclassifier.TextLanguage.Request build();
+    method @NonNull public android.view.textclassifier.TextLanguage.Request.Builder setExtras(@NonNull android.os.Bundle);
+  }
+
+  public final class TextLinks implements android.os.Parcelable {
+    method public int apply(@NonNull android.text.Spannable, int, @Nullable java.util.function.Function<android.view.textclassifier.TextLinks.TextLink,android.view.textclassifier.TextLinks.TextLinkSpan>);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public java.util.Collection<android.view.textclassifier.TextLinks.TextLink> getLinks();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0
+    field public static final int APPLY_STRATEGY_REPLACE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks> CREATOR;
+    field public static final int STATUS_DIFFERENT_TEXT = 3; // 0x3
+    field public static final int STATUS_LINKS_APPLIED = 0; // 0x0
+    field public static final int STATUS_NO_LINKS_APPLIED = 2; // 0x2
+    field public static final int STATUS_NO_LINKS_FOUND = 1; // 0x1
+    field public static final int STATUS_UNSUPPORTED_CHARACTER = 4; // 0x4
+  }
+
+  public static final class TextLinks.Builder {
+    ctor public TextLinks.Builder(@NonNull String);
+    method @NonNull public android.view.textclassifier.TextLinks.Builder addLink(int, int, @NonNull java.util.Map<java.lang.String,java.lang.Float>);
+    method @NonNull public android.view.textclassifier.TextLinks.Builder addLink(int, int, @NonNull java.util.Map<java.lang.String,java.lang.Float>, @NonNull android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextLinks build();
+    method @NonNull public android.view.textclassifier.TextLinks.Builder clearTextLinks();
+    method @NonNull public android.view.textclassifier.TextLinks.Builder setExtras(@Nullable android.os.Bundle);
+  }
+
+  public static final class TextLinks.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @Nullable public android.os.LocaleList getDefaultLocales();
+    method @Nullable public android.view.textclassifier.TextClassifier.EntityConfig getEntityConfig();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.time.ZonedDateTime getReferenceTime();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.Request> CREATOR;
+  }
+
+  public static final class TextLinks.Request.Builder {
+    ctor public TextLinks.Request.Builder(@NonNull CharSequence);
+    method @NonNull public android.view.textclassifier.TextLinks.Request build();
+    method @NonNull public android.view.textclassifier.TextLinks.Request.Builder setDefaultLocales(@Nullable android.os.LocaleList);
+    method @NonNull public android.view.textclassifier.TextLinks.Request.Builder setEntityConfig(@Nullable android.view.textclassifier.TextClassifier.EntityConfig);
+    method public android.view.textclassifier.TextLinks.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextLinks.Request.Builder setReferenceTime(@Nullable java.time.ZonedDateTime);
+  }
+
+  public static final class TextLinks.TextLink implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String);
+    method public int getEnd();
+    method @NonNull public String getEntity(int);
+    method public int getEntityCount();
+    method @NonNull public android.os.Bundle getExtras();
+    method public int getStart();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.TextLink> CREATOR;
+  }
+
+  public static class TextLinks.TextLinkSpan extends android.text.style.ClickableSpan {
+    ctor public TextLinks.TextLinkSpan(@NonNull android.view.textclassifier.TextLinks.TextLink);
+    method public final android.view.textclassifier.TextLinks.TextLink getTextLink();
+    method public void onClick(android.view.View);
+  }
+
+  public final class TextSelection implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String);
+    method @NonNull public String getEntity(int);
+    method @IntRange(from=0) public int getEntityCount();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public String getId();
+    method public int getSelectionEndIndex();
+    method public int getSelectionStartIndex();
+    method @Nullable public android.view.textclassifier.TextClassification getTextClassification();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection> CREATOR;
+  }
+
+  public static final class TextSelection.Builder {
+    ctor public TextSelection.Builder(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.textclassifier.TextSelection build();
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setEntityType(@NonNull String, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setId(@Nullable String);
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setTextClassification(@Nullable android.view.textclassifier.TextClassification);
+  }
+
+  public static final class TextSelection.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @Nullable public android.os.LocaleList getDefaultLocales();
+    method @IntRange(from=0) public int getEndIndex();
+    method @NonNull public android.os.Bundle getExtras();
+    method @IntRange(from=0) public int getStartIndex();
+    method @NonNull public CharSequence getText();
+    method public boolean shouldIncludeTextClassification();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection.Request> CREATOR;
+  }
+
+  public static final class TextSelection.Request.Builder {
+    ctor public TextSelection.Request.Builder(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.textclassifier.TextSelection.Request build();
+    method @NonNull public android.view.textclassifier.TextSelection.Request.Builder setDefaultLocales(@Nullable android.os.LocaleList);
+    method @NonNull public android.view.textclassifier.TextSelection.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextSelection.Request.Builder setIncludeTextClassification(boolean);
+  }
+
+}
+
+package android.view.textservice {
+
+  public final class SentenceSuggestionsInfo implements android.os.Parcelable {
+    ctor public SentenceSuggestionsInfo(android.view.textservice.SuggestionsInfo[], int[], int[]);
+    ctor public SentenceSuggestionsInfo(android.os.Parcel);
+    method public int describeContents();
+    method public int getLengthAt(int);
+    method public int getOffsetAt(int);
+    method public int getSuggestionsCount();
+    method public android.view.textservice.SuggestionsInfo getSuggestionsInfoAt(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SentenceSuggestionsInfo> CREATOR;
+  }
+
+  public final class SpellCheckerInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.content.ComponentName getComponent();
+    method public String getId();
+    method public String getPackageName();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public String getSettingsActivity();
+    method public android.view.textservice.SpellCheckerSubtype getSubtypeAt(int);
+    method public int getSubtypeCount();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SpellCheckerInfo> CREATOR;
+  }
+
+  public class SpellCheckerSession {
+    method public void cancel();
+    method public void close();
+    method public void getSentenceSuggestions(android.view.textservice.TextInfo[], int);
+    method public android.view.textservice.SpellCheckerInfo getSpellChecker();
+    method @Deprecated public void getSuggestions(android.view.textservice.TextInfo, int);
+    method @Deprecated public void getSuggestions(android.view.textservice.TextInfo[], int, boolean);
+    method public boolean isSessionDisconnected();
+    field public static final String SERVICE_META_DATA = "android.view.textservice.scs";
+  }
+
+  public static interface SpellCheckerSession.SpellCheckerSessionListener {
+    method public void onGetSentenceSuggestions(android.view.textservice.SentenceSuggestionsInfo[]);
+    method public void onGetSuggestions(android.view.textservice.SuggestionsInfo[]);
+  }
+
+  public static class SpellCheckerSession.SpellCheckerSessionParams {
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.util.Locale getLocale();
+    method public int getSupportedAttributes();
+    method public boolean shouldReferToSpellCheckerLanguageSettings();
+  }
+
+  public static final class SpellCheckerSession.SpellCheckerSessionParams.Builder {
+    ctor public SpellCheckerSession.SpellCheckerSessionParams.Builder();
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams build();
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setLocale(@Nullable java.util.Locale);
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setShouldReferToSpellCheckerLanguageSettings(boolean);
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setSupportedAttributes(int);
+  }
+
+  public final class SpellCheckerSubtype implements android.os.Parcelable {
+    ctor @Deprecated public SpellCheckerSubtype(int, String, String);
+    method public boolean containsExtraValueKey(String);
+    method public int describeContents();
+    method public CharSequence getDisplayName(android.content.Context, String, android.content.pm.ApplicationInfo);
+    method public String getExtraValue();
+    method public String getExtraValueOf(String);
+    method @NonNull public String getLanguageTag();
+    method @Deprecated @NonNull public String getLocale();
+    method public int getNameResId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SpellCheckerSubtype> CREATOR;
+  }
+
+  public final class SuggestionsInfo implements android.os.Parcelable {
+    ctor public SuggestionsInfo(int, String[]);
+    ctor public SuggestionsInfo(int, String[], int, int);
+    ctor public SuggestionsInfo(android.os.Parcel);
+    method public int describeContents();
+    method public int getCookie();
+    method public int getSequence();
+    method public String getSuggestionAt(int);
+    method public int getSuggestionsAttributes();
+    method public int getSuggestionsCount();
+    method public void setCookieAndSequence(int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SuggestionsInfo> CREATOR;
+    field public static final int RESULT_ATTR_DONT_SHOW_UI_FOR_SUGGESTIONS = 16; // 0x10
+    field public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 4; // 0x4
+    field public static final int RESULT_ATTR_IN_THE_DICTIONARY = 1; // 0x1
+    field public static final int RESULT_ATTR_LOOKS_LIKE_GRAMMAR_ERROR = 8; // 0x8
+    field public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 2; // 0x2
+  }
+
+  public final class TextInfo implements android.os.Parcelable {
+    ctor public TextInfo(String);
+    ctor public TextInfo(String, int, int);
+    ctor public TextInfo(CharSequence, int, int, int, int);
+    ctor public TextInfo(android.os.Parcel);
+    method public int describeContents();
+    method public CharSequence getCharSequence();
+    method public int getCookie();
+    method public int getSequence();
+    method public String getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.TextInfo> CREATOR;
+  }
+
+  public final class TextServicesManager {
+    method @Nullable public android.view.textservice.SpellCheckerInfo getCurrentSpellCheckerInfo();
+    method @NonNull public java.util.List<android.view.textservice.SpellCheckerInfo> getEnabledSpellCheckerInfos();
+    method public boolean isSpellCheckerEnabled();
+    method @Nullable public android.view.textservice.SpellCheckerSession newSpellCheckerSession(@Nullable android.os.Bundle, @Nullable java.util.Locale, @NonNull android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener, boolean);
+    method @Nullable public android.view.textservice.SpellCheckerSession newSpellCheckerSession(@NonNull android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams, @NonNull java.util.concurrent.Executor, @NonNull android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener);
+  }
+
+}
+
+package android.view.translation {
+
+  public final class TranslationCapability implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.translation.TranslationSpec getSourceSpec();
+    method public int getState();
+    method public int getSupportedTranslationFlags();
+    method @NonNull public android.view.translation.TranslationSpec getTargetSpec();
+    method public boolean isUiTranslationEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationCapability> CREATOR;
+    field public static final int STATE_AVAILABLE_TO_DOWNLOAD = 1; // 0x1
+    field public static final int STATE_DOWNLOADING = 2; // 0x2
+    field public static final int STATE_NOT_AVAILABLE = 4; // 0x4
+    field public static final int STATE_ON_DEVICE = 3; // 0x3
+  }
+
+  public final class TranslationContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.translation.TranslationSpec getSourceSpec();
+    method @NonNull public android.view.translation.TranslationSpec getTargetSpec();
+    method public int getTranslationFlags();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationContext> CREATOR;
+    field public static final int FLAG_DEFINITIONS = 4; // 0x4
+    field public static final int FLAG_LOW_LATENCY = 1; // 0x1
+    field public static final int FLAG_TRANSLITERATION = 2; // 0x2
+  }
+
+  public static final class TranslationContext.Builder {
+    ctor public TranslationContext.Builder(@NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec);
+    method @NonNull public android.view.translation.TranslationContext build();
+    method @NonNull public android.view.translation.TranslationContext.Builder setTranslationFlags(int);
+  }
+
+  public final class TranslationManager {
+    method public void addOnDeviceTranslationCapabilityUpdateListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationCapability>);
+    method public void createOnDeviceTranslator(@NonNull android.view.translation.TranslationContext, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.Translator>);
+    method @NonNull @WorkerThread public java.util.Set<android.view.translation.TranslationCapability> getOnDeviceTranslationCapabilities(int, int);
+    method @Nullable public android.app.PendingIntent getOnDeviceTranslationSettingsActivityIntent();
+    method public void removeOnDeviceTranslationCapabilityUpdateListener(@NonNull java.util.function.Consumer<android.view.translation.TranslationCapability>);
+  }
+
+  public final class TranslationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getFlags();
+    method @NonNull public java.util.List<android.view.translation.TranslationRequestValue> getTranslationRequestValues();
+    method @NonNull public java.util.List<android.view.translation.ViewTranslationRequest> getViewTranslationRequests();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationRequest> CREATOR;
+    field public static final int FLAG_DICTIONARY_RESULT = 2; // 0x2
+    field public static final int FLAG_PARTIAL_RESPONSES = 8; // 0x8
+    field public static final int FLAG_TRANSLATION_RESULT = 1; // 0x1
+    field public static final int FLAG_TRANSLITERATION_RESULT = 4; // 0x4
+  }
+
+  public static final class TranslationRequest.Builder {
+    ctor public TranslationRequest.Builder();
+    method @NonNull public android.view.translation.TranslationRequest build();
+    method @NonNull public android.view.translation.TranslationRequest.Builder setFlags(int);
+    method @NonNull public android.view.translation.TranslationRequest.Builder setTranslationRequestValues(@NonNull java.util.List<android.view.translation.TranslationRequestValue>);
+    method @NonNull public android.view.translation.TranslationRequest.Builder setViewTranslationRequests(@NonNull java.util.List<android.view.translation.ViewTranslationRequest>);
+  }
+
+  public final class TranslationRequestValue implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.view.translation.TranslationRequestValue forText(@NonNull CharSequence);
+    method @Nullable public CharSequence getText();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationRequestValue> CREATOR;
+  }
+
+  public final class TranslationResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.util.SparseArray<android.view.translation.TranslationResponseValue> getTranslationResponseValues();
+    method public int getTranslationStatus();
+    method @NonNull public android.util.SparseArray<android.view.translation.ViewTranslationResponse> getViewTranslationResponses();
+    method public boolean isFinalResponse();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationResponse> CREATOR;
+    field public static final int TRANSLATION_STATUS_CONTEXT_UNSUPPORTED = 2; // 0x2
+    field public static final int TRANSLATION_STATUS_SUCCESS = 0; // 0x0
+    field public static final int TRANSLATION_STATUS_UNKNOWN_ERROR = 1; // 0x1
+  }
+
+  public static final class TranslationResponse.Builder {
+    ctor public TranslationResponse.Builder(int);
+    method @NonNull public android.view.translation.TranslationResponse build();
+    method @NonNull public android.view.translation.TranslationResponse.Builder setFinalResponse(boolean);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setTranslationResponseValue(int, @NonNull android.view.translation.TranslationResponseValue);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setTranslationResponseValues(@NonNull android.util.SparseArray<android.view.translation.TranslationResponseValue>);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setViewTranslationResponse(int, @NonNull android.view.translation.ViewTranslationResponse);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setViewTranslationResponses(@NonNull android.util.SparseArray<android.view.translation.ViewTranslationResponse>);
+  }
+
+  public final class TranslationResponseValue implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.view.translation.TranslationResponseValue forError();
+    method @NonNull public android.os.Bundle getExtras();
+    method public int getStatusCode();
+    method @Nullable public CharSequence getText();
+    method @Nullable public CharSequence getTransliteration();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationResponseValue> CREATOR;
+    field public static final String EXTRA_DEFINITIONS = "android.view.translation.extra.DEFINITIONS";
+    field public static final int STATUS_ERROR = 1; // 0x1
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public static final class TranslationResponseValue.Builder {
+    ctor public TranslationResponseValue.Builder(int);
+    method @NonNull public android.view.translation.TranslationResponseValue build();
+    method @NonNull public android.view.translation.TranslationResponseValue.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.translation.TranslationResponseValue.Builder setText(@NonNull CharSequence);
+    method @NonNull public android.view.translation.TranslationResponseValue.Builder setTransliteration(@NonNull CharSequence);
+  }
+
+  public final class TranslationSpec implements android.os.Parcelable {
+    ctor public TranslationSpec(@NonNull android.icu.util.ULocale, int);
+    method public int describeContents();
+    method public int getDataFormat();
+    method @NonNull public android.icu.util.ULocale getLocale();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationSpec> CREATOR;
+    field public static final int DATA_FORMAT_TEXT = 1; // 0x1
+  }
+
+  public class Translator {
+    method public void destroy();
+    method public boolean isDestroyed();
+    method @Nullable public void translate(@NonNull android.view.translation.TranslationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
+  }
+
+  public final class UiTranslationManager {
+    method public void registerUiTranslationStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.view.translation.UiTranslationStateCallback);
+    method public void unregisterUiTranslationStateCallback(@NonNull android.view.translation.UiTranslationStateCallback);
+  }
+
+  public interface UiTranslationStateCallback {
+    method public void onFinished();
+    method public void onPaused();
+    method public default void onResumed(@NonNull android.icu.util.ULocale, @NonNull android.icu.util.ULocale);
+    method public default void onStarted(@NonNull android.icu.util.ULocale, @NonNull android.icu.util.ULocale);
+  }
+
+  @UiThread public interface ViewTranslationCallback {
+    method public boolean onClearTranslation(@NonNull android.view.View);
+    method public boolean onHideTranslation(@NonNull android.view.View);
+    method public boolean onShowTranslation(@NonNull android.view.View);
+  }
+
+  public final class ViewTranslationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.autofill.AutofillId getAutofillId();
+    method @NonNull public java.util.Set<java.lang.String> getKeys();
+    method @NonNull public android.view.translation.TranslationRequestValue getValue(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.ViewTranslationRequest> CREATOR;
+    field public static final String ID_TEXT = "android:text";
+  }
+
+  public static final class ViewTranslationRequest.Builder {
+    ctor public ViewTranslationRequest.Builder(@NonNull android.view.autofill.AutofillId);
+    ctor public ViewTranslationRequest.Builder(@NonNull android.view.autofill.AutofillId, long);
+    method @NonNull public android.view.translation.ViewTranslationRequest build();
+    method @NonNull public android.view.translation.ViewTranslationRequest.Builder setValue(@NonNull String, @NonNull android.view.translation.TranslationRequestValue);
+  }
+
+  public final class ViewTranslationResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.autofill.AutofillId getAutofillId();
+    method @NonNull public java.util.Set<java.lang.String> getKeys();
+    method @NonNull public android.view.translation.TranslationResponseValue getValue(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.ViewTranslationResponse> CREATOR;
+  }
+
+  public static final class ViewTranslationResponse.Builder {
+    ctor public ViewTranslationResponse.Builder(@NonNull android.view.autofill.AutofillId);
+    method @NonNull public android.view.translation.ViewTranslationResponse build();
+    method public android.view.translation.ViewTranslationResponse.Builder setValue(String, android.view.translation.TranslationResponseValue);
+  }
+
+}
+
+package android.webkit {
+
+  public abstract class ClientCertRequest {
+    ctor public ClientCertRequest();
+    method public abstract void cancel();
+    method public abstract String getHost();
+    method @Nullable public abstract String[] getKeyTypes();
+    method public abstract int getPort();
+    method @Nullable public abstract java.security.Principal[] getPrincipals();
+    method public abstract void ignore();
+    method public abstract void proceed(java.security.PrivateKey, java.security.cert.X509Certificate[]);
+  }
+
+  public class ConsoleMessage {
+    ctor public ConsoleMessage(String, String, int, android.webkit.ConsoleMessage.MessageLevel);
+    method public int lineNumber();
+    method public String message();
+    method public android.webkit.ConsoleMessage.MessageLevel messageLevel();
+    method public String sourceId();
+  }
+
+  public enum ConsoleMessage.MessageLevel {
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel DEBUG;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel ERROR;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel LOG;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel TIP;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING;
+  }
+
+  public abstract class CookieManager {
+    ctor @Deprecated public CookieManager();
+    method public abstract boolean acceptCookie();
+    method public abstract boolean acceptThirdPartyCookies(android.webkit.WebView);
+    method public static boolean allowFileSchemeCookies();
+    method public abstract void flush();
+    method public abstract String getCookie(String);
+    method public static android.webkit.CookieManager getInstance();
+    method public abstract boolean hasCookies();
+    method @Deprecated public abstract void removeAllCookie();
+    method public abstract void removeAllCookies(@Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method @Deprecated public abstract void removeExpiredCookie();
+    method @Deprecated public abstract void removeSessionCookie();
+    method public abstract void removeSessionCookies(@Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method public abstract void setAcceptCookie(boolean);
+    method @Deprecated public static void setAcceptFileSchemeCookies(boolean);
+    method public abstract void setAcceptThirdPartyCookies(android.webkit.WebView, boolean);
+    method public abstract void setCookie(String, String);
+    method public abstract void setCookie(String, String, @Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+  }
+
+  @Deprecated public final class CookieSyncManager implements java.lang.Runnable {
+    method @Deprecated public static android.webkit.CookieSyncManager createInstance(android.content.Context);
+    method @Deprecated public static android.webkit.CookieSyncManager getInstance();
+    method @Deprecated public void resetSync();
+    method @Deprecated public void run();
+    method @Deprecated public void startSync();
+    method @Deprecated public void stopSync();
+    method @Deprecated public void sync();
+    method @Deprecated protected void syncFromRamToFlash();
+  }
+
+  public class DateSorter {
+    ctor public DateSorter(android.content.Context);
+    method public long getBoundary(int);
+    method public int getIndex(long);
+    method public String getLabel(int);
+    field public static final int DAY_COUNT = 5; // 0x5
+  }
+
+  public interface DownloadListener {
+    method public void onDownloadStart(String, String, String, String, long);
+  }
+
+  public class GeolocationPermissions {
+    method public void allow(String);
+    method public void clear(String);
+    method public void clearAll();
+    method public void getAllowed(String, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public static android.webkit.GeolocationPermissions getInstance();
+    method public void getOrigins(android.webkit.ValueCallback<java.util.Set<java.lang.String>>);
+  }
+
+  public static interface GeolocationPermissions.Callback {
+    method public void invoke(String, boolean, boolean);
+  }
+
+  public class HttpAuthHandler extends android.os.Handler {
+    method public void cancel();
+    method public void proceed(String, String);
+    method public boolean useHttpAuthUsernamePassword();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface JavascriptInterface {
+  }
+
+  public class JsPromptResult extends android.webkit.JsResult {
+    method public void confirm(String);
+  }
+
+  public class JsResult {
+    method public final void cancel();
+    method public final void confirm();
+  }
+
+  public class MimeTypeMap {
+    method @Nullable public String getExtensionFromMimeType(String);
+    method public static String getFileExtensionFromUrl(String);
+    method @Nullable public String getMimeTypeFromExtension(String);
+    method public static android.webkit.MimeTypeMap getSingleton();
+    method public boolean hasExtension(String);
+    method public boolean hasMimeType(String);
+  }
+
+  public abstract class PermissionRequest {
+    ctor public PermissionRequest();
+    method public abstract void deny();
+    method public abstract android.net.Uri getOrigin();
+    method public abstract String[] getResources();
+    method public abstract void grant(String[]);
+    field public static final String RESOURCE_AUDIO_CAPTURE = "android.webkit.resource.AUDIO_CAPTURE";
+    field public static final String RESOURCE_MIDI_SYSEX = "android.webkit.resource.MIDI_SYSEX";
+    field public static final String RESOURCE_PROTECTED_MEDIA_ID = "android.webkit.resource.PROTECTED_MEDIA_ID";
+    field public static final String RESOURCE_VIDEO_CAPTURE = "android.webkit.resource.VIDEO_CAPTURE";
+  }
+
+  public interface PluginStub {
+    method public android.view.View getEmbeddedView(int, android.content.Context);
+    method public android.view.View getFullScreenView(int, android.content.Context);
+  }
+
+  public abstract class RenderProcessGoneDetail {
+    ctor @Deprecated public RenderProcessGoneDetail();
+    method public abstract boolean didCrash();
+    method public abstract int rendererPriorityAtExit();
+  }
+
+  public abstract class SafeBrowsingResponse {
+    ctor @Deprecated public SafeBrowsingResponse();
+    method public abstract void backToSafety(boolean);
+    method public abstract void proceed(boolean);
+    method public abstract void showInterstitial(boolean);
+  }
+
+  public class ServiceWorkerClient {
+    ctor public ServiceWorkerClient();
+    method @Nullable public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
+  }
+
+  public abstract class ServiceWorkerController {
+    ctor @Deprecated public ServiceWorkerController();
+    method @NonNull public static android.webkit.ServiceWorkerController getInstance();
+    method @NonNull public abstract android.webkit.ServiceWorkerWebSettings getServiceWorkerWebSettings();
+    method public abstract void setServiceWorkerClient(@Nullable android.webkit.ServiceWorkerClient);
+  }
+
+  public abstract class ServiceWorkerWebSettings {
+    ctor public ServiceWorkerWebSettings();
+    method public abstract boolean getAllowContentAccess();
+    method public abstract boolean getAllowFileAccess();
+    method public abstract boolean getBlockNetworkLoads();
+    method public abstract int getCacheMode();
+    method public abstract void setAllowContentAccess(boolean);
+    method public abstract void setAllowFileAccess(boolean);
+    method public abstract void setBlockNetworkLoads(boolean);
+    method public abstract void setCacheMode(int);
+  }
+
+  public class SslErrorHandler extends android.os.Handler {
+    method public void cancel();
+    method public void proceed();
+  }
+
+  public class TracingConfig {
+    method @NonNull public java.util.List<java.lang.String> getCustomIncludedCategories();
+    method public int getPredefinedCategories();
+    method public int getTracingMode();
+    field public static final int CATEGORIES_ALL = 1; // 0x1
+    field public static final int CATEGORIES_ANDROID_WEBVIEW = 2; // 0x2
+    field public static final int CATEGORIES_FRAME_VIEWER = 64; // 0x40
+    field public static final int CATEGORIES_INPUT_LATENCY = 8; // 0x8
+    field public static final int CATEGORIES_JAVASCRIPT_AND_RENDERING = 32; // 0x20
+    field public static final int CATEGORIES_NONE = 0; // 0x0
+    field public static final int CATEGORIES_RENDERING = 16; // 0x10
+    field public static final int CATEGORIES_WEB_DEVELOPER = 4; // 0x4
+    field public static final int RECORD_CONTINUOUSLY = 1; // 0x1
+    field public static final int RECORD_UNTIL_FULL = 0; // 0x0
+  }
+
+  public static class TracingConfig.Builder {
+    ctor public TracingConfig.Builder();
+    method public android.webkit.TracingConfig.Builder addCategories(int...);
+    method public android.webkit.TracingConfig.Builder addCategories(java.lang.String...);
+    method public android.webkit.TracingConfig.Builder addCategories(java.util.Collection<java.lang.String>);
+    method public android.webkit.TracingConfig build();
+    method public android.webkit.TracingConfig.Builder setTracingMode(int);
+  }
+
+  public abstract class TracingController {
+    ctor @Deprecated public TracingController();
+    method @NonNull public static android.webkit.TracingController getInstance();
+    method public abstract boolean isTracing();
+    method public abstract void start(@NonNull android.webkit.TracingConfig);
+    method public abstract boolean stop(@Nullable java.io.OutputStream, @NonNull java.util.concurrent.Executor);
+  }
+
+  public final class URLUtil {
+    ctor public URLUtil();
+    method public static String composeSearchUrl(String, String, String);
+    method public static byte[] decode(byte[]) throws java.lang.IllegalArgumentException;
+    method public static String guessFileName(String, @Nullable String, @Nullable String);
+    method public static String guessUrl(String);
+    method public static boolean isAboutUrl(String);
+    method public static boolean isAssetUrl(String);
+    method public static boolean isContentUrl(String);
+    method @Deprecated public static boolean isCookielessProxyUrl(String);
+    method public static boolean isDataUrl(String);
+    method public static boolean isFileUrl(String);
+    method public static boolean isHttpUrl(String);
+    method public static boolean isHttpsUrl(String);
+    method public static boolean isJavaScriptUrl(String);
+    method public static boolean isNetworkUrl(String);
+    method public static boolean isValidUrl(String);
+    method public static String stripAnchor(String);
+  }
+
+  public interface ValueCallback<T> {
+    method public void onReceiveValue(T);
+  }
+
+  public abstract class WebBackForwardList implements java.lang.Cloneable java.io.Serializable {
+    ctor public WebBackForwardList();
+    method protected abstract android.webkit.WebBackForwardList clone();
+    method public abstract int getCurrentIndex();
+    method @Nullable public abstract android.webkit.WebHistoryItem getCurrentItem();
+    method public abstract android.webkit.WebHistoryItem getItemAtIndex(int);
+    method public abstract int getSize();
+  }
+
+  public class WebChromeClient {
+    ctor public WebChromeClient();
+    method @Nullable public android.graphics.Bitmap getDefaultVideoPoster();
+    method @Nullable public android.view.View getVideoLoadingProgressView();
+    method public void getVisitedHistory(android.webkit.ValueCallback<java.lang.String[]>);
+    method public void onCloseWindow(android.webkit.WebView);
+    method @Deprecated public void onConsoleMessage(String, int, String);
+    method public boolean onConsoleMessage(android.webkit.ConsoleMessage);
+    method public boolean onCreateWindow(android.webkit.WebView, boolean, boolean, android.os.Message);
+    method @Deprecated public void onExceededDatabaseQuota(String, String, long, long, long, android.webkit.WebStorage.QuotaUpdater);
+    method public void onGeolocationPermissionsHidePrompt();
+    method public void onGeolocationPermissionsShowPrompt(String, android.webkit.GeolocationPermissions.Callback);
+    method public void onHideCustomView();
+    method public boolean onJsAlert(android.webkit.WebView, String, String, android.webkit.JsResult);
+    method public boolean onJsBeforeUnload(android.webkit.WebView, String, String, android.webkit.JsResult);
+    method public boolean onJsConfirm(android.webkit.WebView, String, String, android.webkit.JsResult);
+    method public boolean onJsPrompt(android.webkit.WebView, String, String, String, android.webkit.JsPromptResult);
+    method @Deprecated public boolean onJsTimeout();
+    method public void onPermissionRequest(android.webkit.PermissionRequest);
+    method public void onPermissionRequestCanceled(android.webkit.PermissionRequest);
+    method public void onProgressChanged(android.webkit.WebView, int);
+    method @Deprecated public void onReachedMaxAppCacheSize(long, long, android.webkit.WebStorage.QuotaUpdater);
+    method public void onReceivedIcon(android.webkit.WebView, android.graphics.Bitmap);
+    method public void onReceivedTitle(android.webkit.WebView, String);
+    method public void onReceivedTouchIconUrl(android.webkit.WebView, String, boolean);
+    method public void onRequestFocus(android.webkit.WebView);
+    method public void onShowCustomView(android.view.View, android.webkit.WebChromeClient.CustomViewCallback);
+    method @Deprecated public void onShowCustomView(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback);
+    method public boolean onShowFileChooser(android.webkit.WebView, android.webkit.ValueCallback<android.net.Uri[]>, android.webkit.WebChromeClient.FileChooserParams);
+  }
+
+  public static interface WebChromeClient.CustomViewCallback {
+    method public void onCustomViewHidden();
+  }
+
+  public abstract static class WebChromeClient.FileChooserParams {
+    ctor public WebChromeClient.FileChooserParams();
+    method public abstract android.content.Intent createIntent();
+    method public abstract String[] getAcceptTypes();
+    method @Nullable public abstract String getFilenameHint();
+    method public abstract int getMode();
+    method @Nullable public abstract CharSequence getTitle();
+    method public abstract boolean isCaptureEnabled();
+    method @Nullable public static android.net.Uri[] parseResult(int, android.content.Intent);
+    field public static final int MODE_OPEN = 0; // 0x0
+    field public static final int MODE_OPEN_MULTIPLE = 1; // 0x1
+    field public static final int MODE_SAVE = 3; // 0x3
+  }
+
+  public abstract class WebHistoryItem implements java.lang.Cloneable {
+    ctor public WebHistoryItem();
+    method protected abstract android.webkit.WebHistoryItem clone();
+    method @Nullable public abstract android.graphics.Bitmap getFavicon();
+    method public abstract String getOriginalUrl();
+    method public abstract String getTitle();
+    method public abstract String getUrl();
+  }
+
+  @Deprecated public abstract class WebIconDatabase {
+    ctor @Deprecated public WebIconDatabase();
+    method @Deprecated public abstract void close();
+    method @Deprecated public static android.webkit.WebIconDatabase getInstance();
+    method @Deprecated public abstract void open(String);
+    method @Deprecated public abstract void releaseIconForPageUrl(String);
+    method @Deprecated public abstract void removeAllIcons();
+    method @Deprecated public abstract void requestIconForPageUrl(String, android.webkit.WebIconDatabase.IconListener);
+    method @Deprecated public abstract void retainIconForPageUrl(String);
+  }
+
+  @Deprecated public static interface WebIconDatabase.IconListener {
+    method @Deprecated public void onReceivedIcon(String, android.graphics.Bitmap);
+  }
+
+  public class WebMessage {
+    ctor public WebMessage(String);
+    ctor public WebMessage(String, android.webkit.WebMessagePort[]);
+    method public String getData();
+    method @Nullable public android.webkit.WebMessagePort[] getPorts();
+  }
+
+  public abstract class WebMessagePort {
+    method public abstract void close();
+    method public abstract void postMessage(android.webkit.WebMessage);
+    method public abstract void setWebMessageCallback(android.webkit.WebMessagePort.WebMessageCallback);
+    method public abstract void setWebMessageCallback(android.webkit.WebMessagePort.WebMessageCallback, android.os.Handler);
+  }
+
+  public abstract static class WebMessagePort.WebMessageCallback {
+    ctor public WebMessagePort.WebMessageCallback();
+    method public void onMessage(android.webkit.WebMessagePort, android.webkit.WebMessage);
+  }
+
+  public abstract class WebResourceError {
+    method public abstract CharSequence getDescription();
+    method public abstract int getErrorCode();
+  }
+
+  public interface WebResourceRequest {
+    method public String getMethod();
+    method public java.util.Map<java.lang.String,java.lang.String> getRequestHeaders();
+    method public android.net.Uri getUrl();
+    method public boolean hasGesture();
+    method public boolean isForMainFrame();
+    method public boolean isRedirect();
+  }
+
+  public class WebResourceResponse {
+    ctor public WebResourceResponse(String, String, java.io.InputStream);
+    ctor public WebResourceResponse(String, String, int, @NonNull String, java.util.Map<java.lang.String,java.lang.String>, java.io.InputStream);
+    method public java.io.InputStream getData();
+    method public String getEncoding();
+    method public String getMimeType();
+    method public String getReasonPhrase();
+    method public java.util.Map<java.lang.String,java.lang.String> getResponseHeaders();
+    method public int getStatusCode();
+    method public void setData(java.io.InputStream);
+    method public void setEncoding(String);
+    method public void setMimeType(String);
+    method public void setResponseHeaders(java.util.Map<java.lang.String,java.lang.String>);
+    method public void setStatusCodeAndReasonPhrase(int, @NonNull String);
+  }
+
+  public abstract class WebSettings {
+    ctor public WebSettings();
+    method @Deprecated public abstract boolean enableSmoothTransition();
+    method public abstract boolean getAllowContentAccess();
+    method public abstract boolean getAllowFileAccess();
+    method public abstract boolean getAllowFileAccessFromFileURLs();
+    method public abstract boolean getAllowUniversalAccessFromFileURLs();
+    method public abstract boolean getBlockNetworkImage();
+    method public abstract boolean getBlockNetworkLoads();
+    method public abstract boolean getBuiltInZoomControls();
+    method public abstract int getCacheMode();
+    method public abstract String getCursiveFontFamily();
+    method public abstract boolean getDatabaseEnabled();
+    method @Deprecated public abstract String getDatabasePath();
+    method public abstract int getDefaultFixedFontSize();
+    method public abstract int getDefaultFontSize();
+    method public abstract String getDefaultTextEncodingName();
+    method public static String getDefaultUserAgent(android.content.Context);
+    method @Deprecated public abstract android.webkit.WebSettings.ZoomDensity getDefaultZoom();
+    method public abstract int getDisabledActionModeMenuItems();
+    method public abstract boolean getDisplayZoomControls();
+    method public abstract boolean getDomStorageEnabled();
+    method public abstract String getFantasyFontFamily();
+    method public abstract String getFixedFontFamily();
+    method public int getForceDark();
+    method public abstract boolean getJavaScriptCanOpenWindowsAutomatically();
+    method public abstract boolean getJavaScriptEnabled();
+    method public abstract android.webkit.WebSettings.LayoutAlgorithm getLayoutAlgorithm();
+    method @Deprecated public abstract boolean getLightTouchEnabled();
+    method public abstract boolean getLoadWithOverviewMode();
+    method public abstract boolean getLoadsImagesAutomatically();
+    method public abstract boolean getMediaPlaybackRequiresUserGesture();
+    method public abstract int getMinimumFontSize();
+    method public abstract int getMinimumLogicalFontSize();
+    method public abstract int getMixedContentMode();
+    method public abstract boolean getOffscreenPreRaster();
+    method @Deprecated public abstract android.webkit.WebSettings.PluginState getPluginState();
+    method public abstract boolean getSafeBrowsingEnabled();
+    method public abstract String getSansSerifFontFamily();
+    method @Deprecated public abstract boolean getSaveFormData();
+    method @Deprecated public abstract boolean getSavePassword();
+    method public abstract String getSerifFontFamily();
+    method public abstract String getStandardFontFamily();
+    method @Deprecated public android.webkit.WebSettings.TextSize getTextSize();
+    method public abstract int getTextZoom();
+    method public abstract boolean getUseWideViewPort();
+    method public abstract String getUserAgentString();
+    method public abstract void setAllowContentAccess(boolean);
+    method public abstract void setAllowFileAccess(boolean);
+    method @Deprecated public abstract void setAllowFileAccessFromFileURLs(boolean);
+    method @Deprecated public abstract void setAllowUniversalAccessFromFileURLs(boolean);
+    method @Deprecated public abstract void setAppCacheEnabled(boolean);
+    method @Deprecated public abstract void setAppCacheMaxSize(long);
+    method @Deprecated public abstract void setAppCachePath(String);
+    method public abstract void setBlockNetworkImage(boolean);
+    method public abstract void setBlockNetworkLoads(boolean);
+    method public abstract void setBuiltInZoomControls(boolean);
+    method public abstract void setCacheMode(int);
+    method public abstract void setCursiveFontFamily(String);
+    method public abstract void setDatabaseEnabled(boolean);
+    method @Deprecated public abstract void setDatabasePath(String);
+    method public abstract void setDefaultFixedFontSize(int);
+    method public abstract void setDefaultFontSize(int);
+    method public abstract void setDefaultTextEncodingName(String);
+    method @Deprecated public abstract void setDefaultZoom(android.webkit.WebSettings.ZoomDensity);
+    method public abstract void setDisabledActionModeMenuItems(int);
+    method public abstract void setDisplayZoomControls(boolean);
+    method public abstract void setDomStorageEnabled(boolean);
+    method @Deprecated public abstract void setEnableSmoothTransition(boolean);
+    method public abstract void setFantasyFontFamily(String);
+    method public abstract void setFixedFontFamily(String);
+    method public void setForceDark(int);
+    method @Deprecated public abstract void setGeolocationDatabasePath(String);
+    method public abstract void setGeolocationEnabled(boolean);
+    method public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean);
+    method public abstract void setJavaScriptEnabled(boolean);
+    method public abstract void setLayoutAlgorithm(android.webkit.WebSettings.LayoutAlgorithm);
+    method @Deprecated public abstract void setLightTouchEnabled(boolean);
+    method public abstract void setLoadWithOverviewMode(boolean);
+    method public abstract void setLoadsImagesAutomatically(boolean);
+    method public abstract void setMediaPlaybackRequiresUserGesture(boolean);
+    method public abstract void setMinimumFontSize(int);
+    method public abstract void setMinimumLogicalFontSize(int);
+    method public abstract void setMixedContentMode(int);
+    method public abstract void setNeedInitialFocus(boolean);
+    method public abstract void setOffscreenPreRaster(boolean);
+    method @Deprecated public abstract void setPluginState(android.webkit.WebSettings.PluginState);
+    method @Deprecated public abstract void setRenderPriority(android.webkit.WebSettings.RenderPriority);
+    method public abstract void setSafeBrowsingEnabled(boolean);
+    method public abstract void setSansSerifFontFamily(String);
+    method @Deprecated public abstract void setSaveFormData(boolean);
+    method @Deprecated public abstract void setSavePassword(boolean);
+    method public abstract void setSerifFontFamily(String);
+    method public abstract void setStandardFontFamily(String);
+    method public abstract void setSupportMultipleWindows(boolean);
+    method public abstract void setSupportZoom(boolean);
+    method @Deprecated public void setTextSize(android.webkit.WebSettings.TextSize);
+    method public abstract void setTextZoom(int);
+    method public abstract void setUseWideViewPort(boolean);
+    method public abstract void setUserAgentString(@Nullable String);
+    method public abstract boolean supportMultipleWindows();
+    method public abstract boolean supportZoom();
+    field public static final int FORCE_DARK_AUTO = 1; // 0x1
+    field public static final int FORCE_DARK_OFF = 0; // 0x0
+    field public static final int FORCE_DARK_ON = 2; // 0x2
+    field public static final int LOAD_CACHE_ELSE_NETWORK = 1; // 0x1
+    field public static final int LOAD_CACHE_ONLY = 3; // 0x3
+    field public static final int LOAD_DEFAULT = -1; // 0xffffffff
+    field @Deprecated public static final int LOAD_NORMAL = 0; // 0x0
+    field public static final int LOAD_NO_CACHE = 2; // 0x2
+    field public static final int MENU_ITEM_NONE = 0; // 0x0
+    field public static final int MENU_ITEM_PROCESS_TEXT = 4; // 0x4
+    field public static final int MENU_ITEM_SHARE = 1; // 0x1
+    field public static final int MENU_ITEM_WEB_SEARCH = 2; // 0x2
+    field public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0; // 0x0
+    field public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; // 0x2
+    field public static final int MIXED_CONTENT_NEVER_ALLOW = 1; // 0x1
+  }
+
+  public enum WebSettings.LayoutAlgorithm {
+    enum_constant @Deprecated public static final android.webkit.WebSettings.LayoutAlgorithm NARROW_COLUMNS;
+    enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NORMAL;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.LayoutAlgorithm SINGLE_COLUMN;
+    enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm TEXT_AUTOSIZING;
+  }
+
+  public enum WebSettings.PluginState {
+    enum_constant public static final android.webkit.WebSettings.PluginState OFF;
+    enum_constant public static final android.webkit.WebSettings.PluginState ON;
+    enum_constant public static final android.webkit.WebSettings.PluginState ON_DEMAND;
+  }
+
+  public enum WebSettings.RenderPriority {
+    enum_constant public static final android.webkit.WebSettings.RenderPriority HIGH;
+    enum_constant public static final android.webkit.WebSettings.RenderPriority LOW;
+    enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL;
+  }
+
+  @Deprecated public enum WebSettings.TextSize {
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize LARGER;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize LARGEST;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize NORMAL;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize SMALLER;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize SMALLEST;
+  }
+
+  public enum WebSettings.ZoomDensity {
+    enum_constant public static final android.webkit.WebSettings.ZoomDensity CLOSE;
+    enum_constant public static final android.webkit.WebSettings.ZoomDensity FAR;
+    enum_constant public static final android.webkit.WebSettings.ZoomDensity MEDIUM;
+  }
+
+  public class WebStorage {
+    method public void deleteAllData();
+    method public void deleteOrigin(String);
+    method public static android.webkit.WebStorage getInstance();
+    method public void getOrigins(android.webkit.ValueCallback<java.util.Map>);
+    method public void getQuotaForOrigin(String, android.webkit.ValueCallback<java.lang.Long>);
+    method public void getUsageForOrigin(String, android.webkit.ValueCallback<java.lang.Long>);
+    method @Deprecated public void setQuotaForOrigin(String, long);
+  }
+
+  public static class WebStorage.Origin {
+    method public String getOrigin();
+    method public long getQuota();
+    method public long getUsage();
+  }
+
+  @Deprecated public static interface WebStorage.QuotaUpdater {
+    method @Deprecated public void updateQuota(long);
+  }
+
+  public class WebView extends android.widget.AbsoluteLayout implements android.view.ViewGroup.OnHierarchyChangeListener android.view.ViewTreeObserver.OnGlobalFocusChangeListener {
+    ctor public WebView(@NonNull android.content.Context);
+    ctor public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    ctor @Deprecated public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int, boolean);
+    method public void addJavascriptInterface(@NonNull Object, @NonNull String);
+    method public boolean canGoBack();
+    method public boolean canGoBackOrForward(int);
+    method public boolean canGoForward();
+    method @Deprecated public boolean canZoomIn();
+    method @Deprecated public boolean canZoomOut();
+    method @Deprecated public android.graphics.Picture capturePicture();
+    method public void clearCache(boolean);
+    method public static void clearClientCertPreferences(@Nullable Runnable);
+    method public void clearFormData();
+    method public void clearHistory();
+    method public void clearMatches();
+    method public void clearSslPreferences();
+    method @Deprecated public void clearView();
+    method @NonNull public android.webkit.WebBackForwardList copyBackForwardList();
+    method @Deprecated public android.print.PrintDocumentAdapter createPrintDocumentAdapter();
+    method @NonNull public android.print.PrintDocumentAdapter createPrintDocumentAdapter(@NonNull String);
+    method @NonNull public android.webkit.WebMessagePort[] createWebMessageChannel();
+    method public void destroy();
+    method public static void disableWebView();
+    method public void documentHasImages(@NonNull android.os.Message);
+    method public static void enableSlowWholeDocumentDraw();
+    method public void evaluateJavascript(@NonNull String, @Nullable android.webkit.ValueCallback<java.lang.String>);
+    method @Deprecated @Nullable public static String findAddress(String);
+    method @Deprecated public int findAll(String);
+    method public void findAllAsync(@NonNull String);
+    method public void findNext(boolean);
+    method public void flingScroll(int, int);
+    method @Deprecated public void freeMemory();
+    method @Nullable public android.net.http.SslCertificate getCertificate();
+    method public int getContentHeight();
+    method @Nullable public static android.content.pm.PackageInfo getCurrentWebViewPackage();
+    method @Nullable public android.graphics.Bitmap getFavicon();
+    method @NonNull public android.webkit.WebView.HitTestResult getHitTestResult();
+    method @Deprecated @Nullable public String[] getHttpAuthUsernamePassword(String, String);
+    method @Nullable public String getOriginalUrl();
+    method public int getProgress();
+    method public boolean getRendererPriorityWaivedWhenNotVisible();
+    method public int getRendererRequestedPriority();
+    method @NonNull public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
+    method @Deprecated public float getScale();
+    method @NonNull public android.webkit.WebSettings getSettings();
+    method @NonNull public android.view.textclassifier.TextClassifier getTextClassifier();
+    method @Nullable public String getTitle();
+    method @Nullable public String getUrl();
+    method @Nullable public android.webkit.WebChromeClient getWebChromeClient();
+    method @NonNull public static ClassLoader getWebViewClassLoader();
+    method @NonNull public android.webkit.WebViewClient getWebViewClient();
+    method @NonNull public android.os.Looper getWebViewLooper();
+    method @Nullable public android.webkit.WebViewRenderProcess getWebViewRenderProcess();
+    method @Nullable public android.webkit.WebViewRenderProcessClient getWebViewRenderProcessClient();
+    method public void goBack();
+    method public void goBackOrForward(int);
+    method public void goForward();
+    method public void invokeZoomPicker();
+    method public boolean isPrivateBrowsingEnabled();
+    method public void loadData(@NonNull String, @Nullable String, @Nullable String);
+    method public void loadDataWithBaseURL(@Nullable String, @NonNull String, @Nullable String, @Nullable String, @Nullable String);
+    method public void loadUrl(@NonNull String, @NonNull java.util.Map<java.lang.String,java.lang.String>);
+    method public void loadUrl(@NonNull String);
+    method @Deprecated public void onChildViewAdded(android.view.View, android.view.View);
+    method @Deprecated public void onChildViewRemoved(android.view.View, android.view.View);
+    method @Deprecated public void onGlobalFocusChanged(android.view.View, android.view.View);
+    method public void onPause();
+    method public void onResume();
+    method @Deprecated public boolean overlayHorizontalScrollbar();
+    method @Deprecated public boolean overlayVerticalScrollbar();
+    method public boolean pageDown(boolean);
+    method public boolean pageUp(boolean);
+    method public void pauseTimers();
+    method public void postUrl(@NonNull String, @NonNull byte[]);
+    method public void postVisualStateCallback(long, @NonNull android.webkit.WebView.VisualStateCallback);
+    method public void postWebMessage(@NonNull android.webkit.WebMessage, @NonNull android.net.Uri);
+    method public void reload();
+    method public void removeJavascriptInterface(@NonNull String);
+    method public void requestFocusNodeHref(@Nullable android.os.Message);
+    method public void requestImageRef(@NonNull android.os.Message);
+    method @Nullable public android.webkit.WebBackForwardList restoreState(@NonNull android.os.Bundle);
+    method public void resumeTimers();
+    method @Deprecated public void savePassword(String, String, String);
+    method @Nullable public android.webkit.WebBackForwardList saveState(@NonNull android.os.Bundle);
+    method public void saveWebArchive(@NonNull String);
+    method public void saveWebArchive(@NonNull String, boolean, @Nullable android.webkit.ValueCallback<java.lang.String>);
+    method @Deprecated public void setCertificate(android.net.http.SslCertificate);
+    method public static void setDataDirectorySuffix(@NonNull String);
+    method public void setDownloadListener(@Nullable android.webkit.DownloadListener);
+    method public void setFindListener(@Nullable android.webkit.WebView.FindListener);
+    method @Deprecated public void setHorizontalScrollbarOverlay(boolean);
+    method @Deprecated public void setHttpAuthUsernamePassword(String, String, String, String);
+    method public void setInitialScale(int);
+    method @Deprecated public void setMapTrackballToArrowKeys(boolean);
+    method public void setNetworkAvailable(boolean);
+    method @Deprecated public void setPictureListener(android.webkit.WebView.PictureListener);
+    method public void setRendererPriorityPolicy(int, boolean);
+    method public static void setSafeBrowsingWhitelist(@NonNull java.util.List<java.lang.String>, @Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+    method @Deprecated public void setVerticalScrollbarOverlay(boolean);
+    method public void setWebChromeClient(@Nullable android.webkit.WebChromeClient);
+    method public static void setWebContentsDebuggingEnabled(boolean);
+    method public void setWebViewClient(@NonNull android.webkit.WebViewClient);
+    method public void setWebViewRenderProcessClient(@NonNull java.util.concurrent.Executor, @NonNull android.webkit.WebViewRenderProcessClient);
+    method public void setWebViewRenderProcessClient(@Nullable android.webkit.WebViewRenderProcessClient);
+    method @Deprecated public boolean shouldDelayChildPressedState();
+    method @Deprecated public boolean showFindDialog(@Nullable String, boolean);
+    method public static void startSafeBrowsing(@NonNull android.content.Context, @Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void stopLoading();
+    method public void zoomBy(float);
+    method public boolean zoomIn();
+    method public boolean zoomOut();
+    field public static final int RENDERER_PRIORITY_BOUND = 1; // 0x1
+    field public static final int RENDERER_PRIORITY_IMPORTANT = 2; // 0x2
+    field public static final int RENDERER_PRIORITY_WAIVED = 0; // 0x0
+    field public static final String SCHEME_GEO = "geo:0,0?q=";
+    field public static final String SCHEME_MAILTO = "mailto:";
+    field public static final String SCHEME_TEL = "tel:";
+  }
+
+  public static interface WebView.FindListener {
+    method public void onFindResultReceived(int, int, boolean);
+  }
+
+  public static class WebView.HitTestResult {
+    method @Nullable public String getExtra();
+    method public int getType();
+    field @Deprecated public static final int ANCHOR_TYPE = 1; // 0x1
+    field public static final int EDIT_TEXT_TYPE = 9; // 0x9
+    field public static final int EMAIL_TYPE = 4; // 0x4
+    field public static final int GEO_TYPE = 3; // 0x3
+    field @Deprecated public static final int IMAGE_ANCHOR_TYPE = 6; // 0x6
+    field public static final int IMAGE_TYPE = 5; // 0x5
+    field public static final int PHONE_TYPE = 2; // 0x2
+    field public static final int SRC_ANCHOR_TYPE = 7; // 0x7
+    field public static final int SRC_IMAGE_ANCHOR_TYPE = 8; // 0x8
+    field public static final int UNKNOWN_TYPE = 0; // 0x0
+  }
+
+  @Deprecated public static interface WebView.PictureListener {
+    method @Deprecated public void onNewPicture(android.webkit.WebView, @Nullable android.graphics.Picture);
+  }
+
+  public abstract static class WebView.VisualStateCallback {
+    ctor public WebView.VisualStateCallback();
+    method public abstract void onComplete(long);
+  }
+
+  public class WebView.WebViewTransport {
+    ctor public WebView.WebViewTransport();
+    method @Nullable public android.webkit.WebView getWebView();
+    method public void setWebView(@Nullable android.webkit.WebView);
+  }
+
+  public class WebViewClient {
+    ctor public WebViewClient();
+    method public void doUpdateVisitedHistory(android.webkit.WebView, String, boolean);
+    method public void onFormResubmission(android.webkit.WebView, android.os.Message, android.os.Message);
+    method public void onLoadResource(android.webkit.WebView, String);
+    method public void onPageCommitVisible(android.webkit.WebView, String);
+    method public void onPageFinished(android.webkit.WebView, String);
+    method public void onPageStarted(android.webkit.WebView, String, android.graphics.Bitmap);
+    method public void onReceivedClientCertRequest(android.webkit.WebView, android.webkit.ClientCertRequest);
+    method @Deprecated public void onReceivedError(android.webkit.WebView, int, String, String);
+    method public void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError);
+    method public void onReceivedHttpAuthRequest(android.webkit.WebView, android.webkit.HttpAuthHandler, String, String);
+    method public void onReceivedHttpError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceResponse);
+    method public void onReceivedLoginRequest(android.webkit.WebView, String, @Nullable String, String);
+    method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
+    method public boolean onRenderProcessGone(android.webkit.WebView, android.webkit.RenderProcessGoneDetail);
+    method public void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, android.webkit.SafeBrowsingResponse);
+    method public void onScaleChanged(android.webkit.WebView, float, float);
+    method @Deprecated public void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
+    method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method @Deprecated @Nullable public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, String);
+    method @Nullable public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
+    method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method @Deprecated public boolean shouldOverrideUrlLoading(android.webkit.WebView, String);
+    method public boolean shouldOverrideUrlLoading(android.webkit.WebView, android.webkit.WebResourceRequest);
+    field public static final int ERROR_AUTHENTICATION = -4; // 0xfffffffc
+    field public static final int ERROR_BAD_URL = -12; // 0xfffffff4
+    field public static final int ERROR_CONNECT = -6; // 0xfffffffa
+    field public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; // 0xfffffff5
+    field public static final int ERROR_FILE = -13; // 0xfffffff3
+    field public static final int ERROR_FILE_NOT_FOUND = -14; // 0xfffffff2
+    field public static final int ERROR_HOST_LOOKUP = -2; // 0xfffffffe
+    field public static final int ERROR_IO = -7; // 0xfffffff9
+    field public static final int ERROR_PROXY_AUTHENTICATION = -5; // 0xfffffffb
+    field public static final int ERROR_REDIRECT_LOOP = -9; // 0xfffffff7
+    field public static final int ERROR_TIMEOUT = -8; // 0xfffffff8
+    field public static final int ERROR_TOO_MANY_REQUESTS = -15; // 0xfffffff1
+    field public static final int ERROR_UNKNOWN = -1; // 0xffffffff
+    field public static final int ERROR_UNSAFE_RESOURCE = -16; // 0xfffffff0
+    field public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; // 0xfffffffd
+    field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6
+    field public static final int SAFE_BROWSING_THREAT_BILLING = 4; // 0x4
+    field public static final int SAFE_BROWSING_THREAT_MALWARE = 1; // 0x1
+    field public static final int SAFE_BROWSING_THREAT_PHISHING = 2; // 0x2
+    field public static final int SAFE_BROWSING_THREAT_UNKNOWN = 0; // 0x0
+    field public static final int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 3; // 0x3
+  }
+
+  public abstract class WebViewDatabase {
+    ctor @Deprecated public WebViewDatabase();
+    method @Deprecated public abstract void clearFormData();
+    method public abstract void clearHttpAuthUsernamePassword();
+    method @Deprecated public abstract void clearUsernamePassword();
+    method @Nullable public abstract String[] getHttpAuthUsernamePassword(String, String);
+    method public static android.webkit.WebViewDatabase getInstance(android.content.Context);
+    method @Deprecated public abstract boolean hasFormData();
+    method public abstract boolean hasHttpAuthUsernamePassword();
+    method @Deprecated public abstract boolean hasUsernamePassword();
+    method public abstract void setHttpAuthUsernamePassword(String, String, String, String);
+  }
+
+  @Deprecated public class WebViewFragment extends android.app.Fragment {
+    ctor @Deprecated public WebViewFragment();
+    method @Deprecated public android.webkit.WebView getWebView();
+  }
+
+  public abstract class WebViewRenderProcess {
+    ctor public WebViewRenderProcess();
+    method public abstract boolean terminate();
+  }
+
+  public abstract class WebViewRenderProcessClient {
+    ctor public WebViewRenderProcessClient();
+    method public abstract void onRenderProcessResponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderProcess);
+    method public abstract void onRenderProcessUnresponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderProcess);
+  }
+
+}
+
+package android.widget {
+
+  public abstract class AbsListView extends android.widget.AdapterView<android.widget.ListAdapter> implements android.widget.Filter.FilterListener android.text.TextWatcher android.view.ViewTreeObserver.OnGlobalLayoutListener android.view.ViewTreeObserver.OnTouchModeChangeListener {
+    ctor public AbsListView(android.content.Context);
+    ctor public AbsListView(android.content.Context, android.util.AttributeSet);
+    ctor public AbsListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsListView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public boolean canScrollList(int);
+    method public void clearChoices();
+    method public void clearTextFilter();
+    method public void deferNotifyDataSetChanged();
+    method public void fling(int);
+    method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method @ColorInt public int getBottomEdgeEffectColor();
+    method @ColorInt public int getCacheColorHint();
+    method public int getCheckedItemCount();
+    method public long[] getCheckedItemIds();
+    method public int getCheckedItemPosition();
+    method public android.util.SparseBooleanArray getCheckedItemPositions();
+    method public int getChoiceMode();
+    method public int getListPaddingBottom();
+    method public int getListPaddingLeft();
+    method public int getListPaddingRight();
+    method public int getListPaddingTop();
+    method public android.view.View getSelectedView();
+    method public android.graphics.drawable.Drawable getSelector();
+    method public CharSequence getTextFilter();
+    method @ColorInt public int getTopEdgeEffectColor();
+    method public int getTranscriptMode();
+    method protected void handleDataChanged();
+    method public boolean hasTextFilter();
+    method public void invalidateViews();
+    method public boolean isDrawSelectorOnTop();
+    method public boolean isFastScrollAlwaysVisible();
+    method public boolean isFastScrollEnabled();
+    method protected boolean isInFilterMode();
+    method public boolean isItemChecked(int);
+    method public boolean isScrollingCacheEnabled();
+    method public boolean isSmoothScrollbarEnabled();
+    method public boolean isStackFromBottom();
+    method public boolean isTextFilterEnabled();
+    method protected void layoutChildren();
+    method public void onFilterComplete(int);
+    method public void onGlobalLayout();
+    method public void onInitializeAccessibilityNodeInfoForItem(android.view.View, int, android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean onRemoteAdapterConnected();
+    method public void onRemoteAdapterDisconnected();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void onTextChanged(CharSequence, int, int, int);
+    method public void onTouchModeChanged(boolean);
+    method public int pointToPosition(int, int);
+    method public long pointToRowId(int, int);
+    method public void reclaimViews(java.util.List<android.view.View>);
+    method public void scrollListBy(int);
+    method public void setAdapter(android.widget.ListAdapter);
+    method public void setBottomEdgeEffectColor(@ColorInt int);
+    method public void setCacheColorHint(@ColorInt int);
+    method public void setChoiceMode(int);
+    method public void setDrawSelectorOnTop(boolean);
+    method public void setEdgeEffectColor(@ColorInt int);
+    method public void setFastScrollAlwaysVisible(boolean);
+    method public void setFastScrollEnabled(boolean);
+    method public void setFastScrollStyle(int);
+    method public void setFilterText(String);
+    method public void setFriction(float);
+    method public void setItemChecked(int, boolean);
+    method public void setMultiChoiceModeListener(android.widget.AbsListView.MultiChoiceModeListener);
+    method public void setOnScrollListener(android.widget.AbsListView.OnScrollListener);
+    method public void setRecyclerListener(android.widget.AbsListView.RecyclerListener);
+    method public void setRemoteViewsAdapter(android.content.Intent);
+    method public void setScrollIndicators(android.view.View, android.view.View);
+    method public void setScrollingCacheEnabled(boolean);
+    method public void setSelectionFromTop(int, int);
+    method public void setSelector(@DrawableRes int);
+    method public void setSelector(android.graphics.drawable.Drawable);
+    method public void setSmoothScrollbarEnabled(boolean);
+    method public void setStackFromBottom(boolean);
+    method public void setTextFilterEnabled(boolean);
+    method public void setTopEdgeEffectColor(@ColorInt int);
+    method public void setTranscriptMode(int);
+    method public void setVelocityScale(float);
+    method public void smoothScrollBy(int, int);
+    method public void smoothScrollToPosition(int);
+    method public void smoothScrollToPosition(int, int);
+    method public void smoothScrollToPositionFromTop(int, int, int);
+    method public void smoothScrollToPositionFromTop(int, int);
+    method public boolean verifyDrawable(@NonNull android.graphics.drawable.Drawable);
+    field public static final int CHOICE_MODE_MULTIPLE = 2; // 0x2
+    field public static final int CHOICE_MODE_MULTIPLE_MODAL = 3; // 0x3
+    field public static final int CHOICE_MODE_NONE = 0; // 0x0
+    field public static final int CHOICE_MODE_SINGLE = 1; // 0x1
+    field public static final int TRANSCRIPT_MODE_ALWAYS_SCROLL = 2; // 0x2
+    field public static final int TRANSCRIPT_MODE_DISABLED = 0; // 0x0
+    field public static final int TRANSCRIPT_MODE_NORMAL = 1; // 0x1
+  }
+
+  public static class AbsListView.LayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor public AbsListView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public AbsListView.LayoutParams(int, int);
+    ctor public AbsListView.LayoutParams(int, int, int);
+    ctor public AbsListView.LayoutParams(android.view.ViewGroup.LayoutParams);
+  }
+
+  public static interface AbsListView.MultiChoiceModeListener extends android.view.ActionMode.Callback {
+    method public void onItemCheckedStateChanged(android.view.ActionMode, int, long, boolean);
+  }
+
+  public static interface AbsListView.OnScrollListener {
+    method public void onScroll(android.widget.AbsListView, int, int, int);
+    method public void onScrollStateChanged(android.widget.AbsListView, int);
+    field public static final int SCROLL_STATE_FLING = 2; // 0x2
+    field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+    field public static final int SCROLL_STATE_TOUCH_SCROLL = 1; // 0x1
+  }
+
+  public static interface AbsListView.RecyclerListener {
+    method public void onMovedToScrapHeap(android.view.View);
+  }
+
+  public static interface AbsListView.SelectionBoundsAdjuster {
+    method public void adjustListItemSelectionBounds(android.graphics.Rect);
+  }
+
+  public abstract class AbsSeekBar extends android.widget.ProgressBar {
+    ctor public AbsSeekBar(android.content.Context);
+    ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet);
+    ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getKeyProgressIncrement();
+    method public boolean getSplitTrack();
+    method public android.graphics.drawable.Drawable getThumb();
+    method public int getThumbOffset();
+    method @Nullable public android.graphics.BlendMode getThumbTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getThumbTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getThumbTintMode();
+    method public android.graphics.drawable.Drawable getTickMark();
+    method @Nullable public android.graphics.BlendMode getTickMarkTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getTickMarkTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getTickMarkTintMode();
+    method public void setKeyProgressIncrement(int);
+    method public void setSplitTrack(boolean);
+    method public void setThumb(android.graphics.drawable.Drawable);
+    method public void setThumbOffset(int);
+    method public void setThumbTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setThumbTintList(@Nullable android.content.res.ColorStateList);
+    method public void setThumbTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setTickMark(android.graphics.drawable.Drawable);
+    method public void setTickMarkTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setTickMarkTintList(@Nullable android.content.res.ColorStateList);
+    method public void setTickMarkTintMode(@Nullable android.graphics.PorterDuff.Mode);
+  }
+
+  public abstract class AbsSpinner extends android.widget.AdapterView<android.widget.SpinnerAdapter> {
+    ctor public AbsSpinner(android.content.Context);
+    ctor public AbsSpinner(android.content.Context, android.util.AttributeSet);
+    ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.SpinnerAdapter getAdapter();
+    method public android.view.View getSelectedView();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public int pointToPosition(int, int);
+    method public void setAdapter(android.widget.SpinnerAdapter);
+    method public void setSelection(int, boolean);
+    method public void setSelection(int);
+  }
+
+  @Deprecated @android.widget.RemoteViews.RemoteView public class AbsoluteLayout extends android.view.ViewGroup {
+    ctor @Deprecated public AbsoluteLayout(android.content.Context);
+    ctor @Deprecated public AbsoluteLayout(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  @Deprecated public static class AbsoluteLayout.LayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor @Deprecated public AbsoluteLayout.LayoutParams(int, int, int, int);
+    ctor @Deprecated public AbsoluteLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public AbsoluteLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    method @Deprecated public String debug(String);
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+  }
+
+  public class ActionMenuView extends android.widget.LinearLayout {
+    ctor public ActionMenuView(android.content.Context);
+    ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+    method public void dismissPopupMenus();
+    method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public android.view.Menu getMenu();
+    method @Nullable public android.graphics.drawable.Drawable getOverflowIcon();
+    method public int getPopupTheme();
+    method public boolean hideOverflowMenu();
+    method public boolean isOverflowMenuShowing();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onDetachedFromWindow();
+    method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener);
+    method public void setOverflowIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setPopupTheme(@StyleRes int);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class ActionMenuView.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(android.widget.ActionMenuView.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(int, int);
+  }
+
+  public static interface ActionMenuView.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public interface Adapter {
+    method @Nullable public default CharSequence[] getAutofillOptions();
+    method public int getCount();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public int getItemViewType(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public boolean isEmpty();
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+    field public static final int IGNORE_ITEM_VIEW_TYPE = -1; // 0xffffffff
+    field public static final int NO_SELECTION = -2147483648; // 0x80000000
+  }
+
+  public abstract class AdapterView<T extends android.widget.Adapter> extends android.view.ViewGroup {
+    ctor public AdapterView(android.content.Context);
+    ctor public AdapterView(android.content.Context, android.util.AttributeSet);
+    ctor public AdapterView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterView(android.content.Context, android.util.AttributeSet, int, int);
+    method public abstract T getAdapter();
+    method public int getCount();
+    method public android.view.View getEmptyView();
+    method public int getFirstVisiblePosition();
+    method public Object getItemAtPosition(int);
+    method public long getItemIdAtPosition(int);
+    method public int getLastVisiblePosition();
+    method @Nullable public final android.widget.AdapterView.OnItemClickListener getOnItemClickListener();
+    method public final android.widget.AdapterView.OnItemLongClickListener getOnItemLongClickListener();
+    method @Nullable public final android.widget.AdapterView.OnItemSelectedListener getOnItemSelectedListener();
+    method public int getPositionForView(android.view.View);
+    method public Object getSelectedItem();
+    method public long getSelectedItemId();
+    method public int getSelectedItemPosition();
+    method public abstract android.view.View getSelectedView();
+    method public boolean performItemClick(android.view.View, int, long);
+    method public abstract void setAdapter(T);
+    method public void setEmptyView(android.view.View);
+    method public void setOnItemClickListener(@Nullable android.widget.AdapterView.OnItemClickListener);
+    method public void setOnItemLongClickListener(android.widget.AdapterView.OnItemLongClickListener);
+    method public void setOnItemSelectedListener(@Nullable android.widget.AdapterView.OnItemSelectedListener);
+    method public abstract void setSelection(int);
+    field public static final int INVALID_POSITION = -1; // 0xffffffff
+    field public static final long INVALID_ROW_ID = -9223372036854775808L; // 0x8000000000000000L
+    field public static final int ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2; // 0xfffffffe
+    field public static final int ITEM_VIEW_TYPE_IGNORE = -1; // 0xffffffff
+  }
+
+  public static class AdapterView.AdapterContextMenuInfo implements android.view.ContextMenu.ContextMenuInfo {
+    ctor public AdapterView.AdapterContextMenuInfo(android.view.View, int, long);
+    field public long id;
+    field public int position;
+    field public android.view.View targetView;
+  }
+
+  public static interface AdapterView.OnItemClickListener {
+    method public void onItemClick(android.widget.AdapterView<?>, android.view.View, int, long);
+  }
+
+  public static interface AdapterView.OnItemLongClickListener {
+    method public boolean onItemLongClick(android.widget.AdapterView<?>, android.view.View, int, long);
+  }
+
+  public static interface AdapterView.OnItemSelectedListener {
+    method public void onItemSelected(android.widget.AdapterView<?>, android.view.View, int, long);
+    method public void onNothingSelected(android.widget.AdapterView<?>);
+  }
+
+  public abstract class AdapterViewAnimator extends android.widget.AdapterView<android.widget.Adapter> implements android.widget.Advanceable {
+    ctor public AdapterViewAnimator(android.content.Context);
+    ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet);
+    ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int, int);
+    method public void advance();
+    method public void deferNotifyDataSetChanged();
+    method public void fyiWillBeAdvancedByHostKThx();
+    method public android.widget.Adapter getAdapter();
+    method public android.view.View getCurrentView();
+    method public int getDisplayedChild();
+    method public android.animation.ObjectAnimator getInAnimation();
+    method public android.animation.ObjectAnimator getOutAnimation();
+    method public android.view.View getSelectedView();
+    method public boolean onRemoteAdapterConnected();
+    method public void onRemoteAdapterDisconnected();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void setAdapter(android.widget.Adapter);
+    method public void setAnimateFirstView(boolean);
+    method public void setDisplayedChild(int);
+    method public void setInAnimation(android.animation.ObjectAnimator);
+    method public void setInAnimation(android.content.Context, int);
+    method public void setOutAnimation(android.animation.ObjectAnimator);
+    method public void setOutAnimation(android.content.Context, int);
+    method public void setRemoteViewsAdapter(android.content.Intent);
+    method public void setSelection(int);
+    method public void showNext();
+    method public void showPrevious();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class AdapterViewFlipper extends android.widget.AdapterViewAnimator {
+    ctor public AdapterViewFlipper(android.content.Context);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getFlipInterval();
+    method public boolean isAutoStart();
+    method public boolean isFlipping();
+    method public void setAutoStart(boolean);
+    method public void setFlipInterval(int);
+    method public void startFlipping();
+    method public void stopFlipping();
+  }
+
+  public interface Advanceable {
+    method public void advance();
+    method public void fyiWillBeAdvancedByHostKThx();
+  }
+
+  public class AlphabetIndexer extends android.database.DataSetObserver implements android.widget.SectionIndexer {
+    ctor public AlphabetIndexer(android.database.Cursor, int, CharSequence);
+    method protected int compare(String, String);
+    method public int getPositionForSection(int);
+    method public int getSectionForPosition(int);
+    method public Object[] getSections();
+    method public void setCursor(android.database.Cursor);
+    field protected CharSequence mAlphabet;
+    field protected int mColumnIndex;
+    field protected android.database.Cursor mDataCursor;
+  }
+
+  @Deprecated @android.widget.RemoteViews.RemoteView public class AnalogClock extends android.view.View {
+    ctor @Deprecated public AnalogClock(android.content.Context);
+    ctor @Deprecated public AnalogClock(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public AnalogClock(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public AnalogClock(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated @Nullable public android.graphics.BlendMode getDialTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getDialTintList();
+    method @Deprecated @Nullable public android.graphics.BlendMode getHourHandTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getHourHandTintList();
+    method @Deprecated @Nullable public android.graphics.BlendMode getMinuteHandTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getMinuteHandTintList();
+    method @Deprecated @Nullable public android.graphics.BlendMode getSecondHandTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getSecondHandTintList();
+    method @Deprecated @Nullable public String getTimeZone();
+    method @Deprecated public void setDial(@NonNull android.graphics.drawable.Icon);
+    method @Deprecated public void setDialTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setDialTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setHourHand(@NonNull android.graphics.drawable.Icon);
+    method @Deprecated public void setHourHandTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setHourHandTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setMinuteHand(@NonNull android.graphics.drawable.Icon);
+    method @Deprecated public void setMinuteHandTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setMinuteHandTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setSecondHand(@Nullable android.graphics.drawable.Icon);
+    method @Deprecated public void setSecondHandTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setSecondHandTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setTimeZone(@Nullable String);
+  }
+
+  public class ArrayAdapter<T> extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @IdRes int);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @NonNull T[]);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @IdRes int, @NonNull T[]);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @NonNull java.util.List<T>);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @IdRes int, @NonNull java.util.List<T>);
+    method public void add(@Nullable T);
+    method public void addAll(@NonNull java.util.Collection<? extends T>);
+    method public void addAll(T...);
+    method public void clear();
+    method @NonNull public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(@NonNull android.content.Context, @ArrayRes int, @LayoutRes int);
+    method @NonNull public android.content.Context getContext();
+    method public int getCount();
+    method @Nullable public android.content.res.Resources.Theme getDropDownViewTheme();
+    method @NonNull public android.widget.Filter getFilter();
+    method @Nullable public T getItem(int);
+    method public long getItemId(int);
+    method public int getPosition(@Nullable T);
+    method @NonNull public android.view.View getView(int, @Nullable android.view.View, @NonNull android.view.ViewGroup);
+    method public void insert(@Nullable T, int);
+    method public void remove(@Nullable T);
+    method public void setDropDownViewResource(@LayoutRes int);
+    method public void setDropDownViewTheme(@Nullable android.content.res.Resources.Theme);
+    method public void setNotifyOnChange(boolean);
+    method public void sort(@NonNull java.util.Comparator<? super T>);
+  }
+
+  public class AutoCompleteTextView extends android.widget.EditText implements android.widget.Filter.FilterListener {
+    ctor public AutoCompleteTextView(android.content.Context);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources.Theme);
+    method public void clearListSelection();
+    method protected CharSequence convertSelectionToString(Object);
+    method public void dismissDropDown();
+    method public boolean enoughToFilter();
+    method public android.widget.ListAdapter getAdapter();
+    method public CharSequence getCompletionHint();
+    method public int getDropDownAnchor();
+    method public android.graphics.drawable.Drawable getDropDownBackground();
+    method public int getDropDownHeight();
+    method public int getDropDownHorizontalOffset();
+    method public int getDropDownVerticalOffset();
+    method public int getDropDownWidth();
+    method protected android.widget.Filter getFilter();
+    method public int getInputMethodMode();
+    method @Deprecated public android.widget.AdapterView.OnItemClickListener getItemClickListener();
+    method @Deprecated public android.widget.AdapterView.OnItemSelectedListener getItemSelectedListener();
+    method public int getListSelection();
+    method public android.widget.AdapterView.OnItemClickListener getOnItemClickListener();
+    method public android.widget.AdapterView.OnItemSelectedListener getOnItemSelectedListener();
+    method public int getThreshold();
+    method public android.widget.AutoCompleteTextView.Validator getValidator();
+    method public boolean isPerformingCompletion();
+    method public boolean isPopupShowing();
+    method public void onFilterComplete(int);
+    method public void performCompletion();
+    method protected void performFiltering(CharSequence, int);
+    method public void performValidation();
+    method public final void refreshAutoCompleteResults();
+    method protected void replaceText(CharSequence);
+    method public <T extends android.widget.ListAdapter & android.widget.Filterable> void setAdapter(T);
+    method public void setCompletionHint(CharSequence);
+    method public void setDropDownAnchor(int);
+    method public void setDropDownBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setDropDownBackgroundResource(@DrawableRes int);
+    method public void setDropDownHeight(int);
+    method public void setDropDownHorizontalOffset(int);
+    method public void setDropDownVerticalOffset(int);
+    method public void setDropDownWidth(int);
+    method public void setInputMethodMode(int);
+    method public void setListSelection(int);
+    method public void setOnDismissListener(android.widget.AutoCompleteTextView.OnDismissListener);
+    method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener);
+    method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+    method public void setText(CharSequence, boolean);
+    method public void setThreshold(int);
+    method public void setValidator(android.widget.AutoCompleteTextView.Validator);
+    method public void showDropDown();
+  }
+
+  public static interface AutoCompleteTextView.OnDismissListener {
+    method public void onDismiss();
+  }
+
+  public static interface AutoCompleteTextView.Validator {
+    method public CharSequence fixText(CharSequence);
+    method public boolean isValid(CharSequence);
+  }
+
+  public abstract class BaseAdapter implements android.widget.ListAdapter android.widget.SpinnerAdapter {
+    ctor public BaseAdapter();
+    method public boolean areAllItemsEnabled();
+    method public android.view.View getDropDownView(int, android.view.View, android.view.ViewGroup);
+    method public int getItemViewType(int);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public boolean isEmpty();
+    method public boolean isEnabled(int);
+    method public void notifyDataSetChanged();
+    method public void notifyDataSetInvalidated();
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void setAutofillOptions(@Nullable java.lang.CharSequence...);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public abstract class BaseExpandableListAdapter implements android.widget.ExpandableListAdapter android.widget.HeterogeneousExpandableList {
+    ctor public BaseExpandableListAdapter();
+    method public boolean areAllItemsEnabled();
+    method public int getChildType(int, int);
+    method public int getChildTypeCount();
+    method public long getCombinedChildId(long, long);
+    method public long getCombinedGroupId(long);
+    method public int getGroupType(int);
+    method public int getGroupTypeCount();
+    method public boolean isEmpty();
+    method public void notifyDataSetChanged();
+    method public void notifyDataSetInvalidated();
+    method public void onGroupCollapsed(int);
+    method public void onGroupExpanded(int);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class Button extends android.widget.TextView {
+    ctor public Button(android.content.Context);
+    ctor public Button(android.content.Context, android.util.AttributeSet);
+    ctor public Button(android.content.Context, android.util.AttributeSet, int);
+    ctor public Button(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public class CalendarView extends android.widget.FrameLayout {
+    ctor public CalendarView(@NonNull android.content.Context);
+    ctor public CalendarView(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public CalendarView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int);
+    ctor public CalendarView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int, @StyleRes int);
+    method public long getDate();
+    method @StyleRes public int getDateTextAppearance();
+    method public int getFirstDayOfWeek();
+    method @Deprecated @ColorInt public int getFocusedMonthDateColor();
+    method public long getMaxDate();
+    method public long getMinDate();
+    method @Deprecated public android.graphics.drawable.Drawable getSelectedDateVerticalBar();
+    method @Deprecated @ColorInt public int getSelectedWeekBackgroundColor();
+    method @Deprecated public boolean getShowWeekNumber();
+    method @Deprecated public int getShownWeekCount();
+    method @Deprecated @ColorInt public int getUnfocusedMonthDateColor();
+    method @StyleRes public int getWeekDayTextAppearance();
+    method @Deprecated @ColorInt public int getWeekNumberColor();
+    method @Deprecated @ColorInt public int getWeekSeparatorLineColor();
+    method public void setDate(long);
+    method public void setDate(long, boolean, boolean);
+    method public void setDateTextAppearance(@StyleRes int);
+    method public void setFirstDayOfWeek(int);
+    method @Deprecated public void setFocusedMonthDateColor(@ColorInt int);
+    method public void setMaxDate(long);
+    method public void setMinDate(long);
+    method public void setOnDateChangeListener(android.widget.CalendarView.OnDateChangeListener);
+    method @Deprecated public void setSelectedDateVerticalBar(@DrawableRes int);
+    method @Deprecated public void setSelectedDateVerticalBar(android.graphics.drawable.Drawable);
+    method @Deprecated public void setSelectedWeekBackgroundColor(@ColorInt int);
+    method @Deprecated public void setShowWeekNumber(boolean);
+    method @Deprecated public void setShownWeekCount(int);
+    method @Deprecated public void setUnfocusedMonthDateColor(@ColorInt int);
+    method public void setWeekDayTextAppearance(@StyleRes int);
+    method @Deprecated public void setWeekNumberColor(@ColorInt int);
+    method @Deprecated public void setWeekSeparatorLineColor(@ColorInt int);
+  }
+
+  public static interface CalendarView.OnDateChangeListener {
+    method public void onSelectedDayChange(@NonNull android.widget.CalendarView, int, int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class CheckBox extends android.widget.CompoundButton {
+    ctor public CheckBox(android.content.Context);
+    ctor public CheckBox(android.content.Context, android.util.AttributeSet);
+    ctor public CheckBox(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckBox(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public interface Checkable {
+    method public boolean isChecked();
+    method public void setChecked(boolean);
+    method public void toggle();
+  }
+
+  public class CheckedTextView extends android.widget.TextView implements android.widget.Checkable {
+    ctor public CheckedTextView(android.content.Context);
+    ctor public CheckedTextView(android.content.Context, android.util.AttributeSet);
+    ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.graphics.drawable.Drawable getCheckMarkDrawable();
+    method @Nullable public android.graphics.BlendMode getCheckMarkTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getCheckMarkTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getCheckMarkTintMode();
+    method public boolean isChecked();
+    method public void setCheckMarkDrawable(@DrawableRes int);
+    method public void setCheckMarkDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setCheckMarkTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setCheckMarkTintList(@Nullable android.content.res.ColorStateList);
+    method public void setCheckMarkTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setChecked(boolean);
+    method public void toggle();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class Chronometer extends android.widget.TextView {
+    ctor public Chronometer(android.content.Context);
+    ctor public Chronometer(android.content.Context, android.util.AttributeSet);
+    ctor public Chronometer(android.content.Context, android.util.AttributeSet, int);
+    ctor public Chronometer(android.content.Context, android.util.AttributeSet, int, int);
+    method public long getBase();
+    method public String getFormat();
+    method public android.widget.Chronometer.OnChronometerTickListener getOnChronometerTickListener();
+    method public boolean isCountDown();
+    method public boolean isTheFinalCountDown();
+    method public void setBase(long);
+    method public void setCountDown(boolean);
+    method public void setFormat(String);
+    method public void setOnChronometerTickListener(android.widget.Chronometer.OnChronometerTickListener);
+    method public void start();
+    method public void stop();
+  }
+
+  public static interface Chronometer.OnChronometerTickListener {
+    method public void onChronometerTick(android.widget.Chronometer);
+  }
+
+  public abstract class CompoundButton extends android.widget.Button implements android.widget.Checkable {
+    ctor public CompoundButton(android.content.Context);
+    ctor public CompoundButton(android.content.Context, android.util.AttributeSet);
+    ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int, int);
+    method @Nullable public android.graphics.drawable.Drawable getButtonDrawable();
+    method @Nullable public android.graphics.BlendMode getButtonTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getButtonTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getButtonTintMode();
+    method public boolean isChecked();
+    method public void setButtonDrawable(@DrawableRes int);
+    method public void setButtonDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setButtonIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setButtonTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setButtonTintList(@Nullable android.content.res.ColorStateList);
+    method public void setButtonTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setChecked(boolean);
+    method public void setOnCheckedChangeListener(@Nullable android.widget.CompoundButton.OnCheckedChangeListener);
+    method public void toggle();
+  }
+
+  public static interface CompoundButton.OnCheckedChangeListener {
+    method public void onCheckedChanged(android.widget.CompoundButton, boolean);
+  }
+
+  public abstract class CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+    ctor @Deprecated public CursorAdapter(android.content.Context, android.database.Cursor);
+    ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean);
+    ctor public CursorAdapter(android.content.Context, android.database.Cursor, int);
+    method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor);
+    method public void changeCursor(android.database.Cursor);
+    method public CharSequence convertToString(android.database.Cursor);
+    method public int getCount();
+    method public android.database.Cursor getCursor();
+    method public android.content.res.Resources.Theme getDropDownViewTheme();
+    method public android.widget.Filter getFilter();
+    method public android.widget.FilterQueryProvider getFilterQueryProvider();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method @Deprecated protected void init(android.content.Context, android.database.Cursor, boolean);
+    method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method protected void onContentChanged();
+    method @WorkerThread public android.database.Cursor runQueryOnBackgroundThread(CharSequence);
+    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+    method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+    method public android.database.Cursor swapCursor(android.database.Cursor);
+    field @Deprecated public static final int FLAG_AUTO_REQUERY = 1; // 0x1
+    field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2
+  }
+
+  public abstract class CursorTreeAdapter extends android.widget.BaseExpandableListAdapter implements android.widget.Filterable {
+    ctor public CursorTreeAdapter(android.database.Cursor, android.content.Context);
+    ctor public CursorTreeAdapter(android.database.Cursor, android.content.Context, boolean);
+    method protected abstract void bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method protected abstract void bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method public void changeCursor(android.database.Cursor);
+    method public String convertToString(android.database.Cursor);
+    method public android.database.Cursor getChild(int, int);
+    method public long getChildId(int, int);
+    method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup);
+    method public int getChildrenCount(int);
+    method protected abstract android.database.Cursor getChildrenCursor(android.database.Cursor);
+    method public android.database.Cursor getCursor();
+    method public android.widget.Filter getFilter();
+    method public android.widget.FilterQueryProvider getFilterQueryProvider();
+    method public android.database.Cursor getGroup(int);
+    method public int getGroupCount();
+    method public long getGroupId(int);
+    method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup);
+    method public boolean hasStableIds();
+    method public boolean isChildSelectable(int, int);
+    method protected abstract android.view.View newChildView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+    method protected abstract android.view.View newGroupView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+    method public void notifyDataSetChanged(boolean);
+    method public android.database.Cursor runQueryOnBackgroundThread(CharSequence);
+    method public void setChildrenCursor(int, android.database.Cursor);
+    method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+    method public void setGroupCursor(android.database.Cursor);
+  }
+
+  public class DatePicker extends android.widget.FrameLayout {
+    ctor public DatePicker(android.content.Context);
+    ctor public DatePicker(android.content.Context, android.util.AttributeSet);
+    ctor public DatePicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public DatePicker(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public android.widget.CalendarView getCalendarView();
+    method @Deprecated public boolean getCalendarViewShown();
+    method public int getDayOfMonth();
+    method public int getFirstDayOfWeek();
+    method public long getMaxDate();
+    method public long getMinDate();
+    method public int getMonth();
+    method @Deprecated public boolean getSpinnersShown();
+    method public int getYear();
+    method public void init(int, int, int, android.widget.DatePicker.OnDateChangedListener);
+    method @Deprecated public void setCalendarViewShown(boolean);
+    method public void setFirstDayOfWeek(int);
+    method public void setMaxDate(long);
+    method public void setMinDate(long);
+    method public void setOnDateChangedListener(android.widget.DatePicker.OnDateChangedListener);
+    method @Deprecated public void setSpinnersShown(boolean);
+    method public void updateDate(int, int, int);
+  }
+
+  public static interface DatePicker.OnDateChangedListener {
+    method public void onDateChanged(android.widget.DatePicker, int, int, int);
+  }
+
+  @Deprecated public class DialerFilter extends android.widget.RelativeLayout {
+    ctor @Deprecated public DialerFilter(android.content.Context);
+    ctor @Deprecated public DialerFilter(android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void append(String);
+    method @Deprecated public void clearText();
+    method @Deprecated public CharSequence getDigits();
+    method @Deprecated public CharSequence getFilterText();
+    method @Deprecated public CharSequence getLetters();
+    method @Deprecated public int getMode();
+    method @Deprecated public boolean isQwertyKeyboard();
+    method @Deprecated protected void onModeChange(int, int);
+    method @Deprecated public void removeFilterWatcher(android.text.TextWatcher);
+    method @Deprecated public void setDigitsWatcher(android.text.TextWatcher);
+    method @Deprecated public void setFilterWatcher(android.text.TextWatcher);
+    method @Deprecated public void setLettersWatcher(android.text.TextWatcher);
+    method @Deprecated public void setMode(int);
+    field @Deprecated public static final int DIGITS_AND_LETTERS = 1; // 0x1
+    field @Deprecated public static final int DIGITS_AND_LETTERS_NO_DIGITS = 2; // 0x2
+    field @Deprecated public static final int DIGITS_AND_LETTERS_NO_LETTERS = 3; // 0x3
+    field @Deprecated public static final int DIGITS_ONLY = 4; // 0x4
+    field @Deprecated public static final int LETTERS_ONLY = 5; // 0x5
+  }
+
+  @Deprecated public class DigitalClock extends android.widget.TextView {
+    ctor @Deprecated public DigitalClock(android.content.Context);
+    ctor @Deprecated public DigitalClock(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class EdgeEffect {
+    ctor public EdgeEffect(android.content.Context);
+    ctor public EdgeEffect(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    method public boolean draw(android.graphics.Canvas);
+    method public void finish();
+    method @Nullable public android.graphics.BlendMode getBlendMode();
+    method @ColorInt public int getColor();
+    method public float getDistance();
+    method public int getMaxHeight();
+    method public boolean isFinished();
+    method public void onAbsorb(int);
+    method public void onPull(float);
+    method public void onPull(float, float);
+    method public float onPullDistance(float, float);
+    method public void onRelease();
+    method public void setBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setColor(@ColorInt int);
+    method public void setSize(int, int);
+    field public static final android.graphics.BlendMode DEFAULT_BLEND_MODE;
+  }
+
+  public class EditText extends android.widget.TextView {
+    ctor public EditText(android.content.Context);
+    ctor public EditText(android.content.Context, android.util.AttributeSet);
+    ctor public EditText(android.content.Context, android.util.AttributeSet, int);
+    ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
+    method public void extendSelection(int);
+    method public android.text.Editable getText();
+    method public void selectAll();
+    method public void setSelection(int, int);
+    method public void setSelection(int);
+  }
+
+  public interface ExpandableListAdapter {
+    method public boolean areAllItemsEnabled();
+    method public Object getChild(int, int);
+    method public long getChildId(int, int);
+    method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup);
+    method public int getChildrenCount(int);
+    method public long getCombinedChildId(long, long);
+    method public long getCombinedGroupId(long);
+    method public Object getGroup(int);
+    method public int getGroupCount();
+    method public long getGroupId(int);
+    method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup);
+    method public boolean hasStableIds();
+    method public boolean isChildSelectable(int, int);
+    method public boolean isEmpty();
+    method public void onGroupCollapsed(int);
+    method public void onGroupExpanded(int);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public class ExpandableListView extends android.widget.ListView {
+    ctor public ExpandableListView(android.content.Context);
+    ctor public ExpandableListView(android.content.Context, android.util.AttributeSet);
+    ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean collapseGroup(int);
+    method public boolean expandGroup(int);
+    method public boolean expandGroup(int, boolean);
+    method public android.widget.ExpandableListAdapter getExpandableListAdapter();
+    method public long getExpandableListPosition(int);
+    method public int getFlatListPosition(long);
+    method public static int getPackedPositionChild(long);
+    method public static long getPackedPositionForChild(int, int);
+    method public static long getPackedPositionForGroup(int);
+    method public static int getPackedPositionGroup(long);
+    method public static int getPackedPositionType(long);
+    method public long getSelectedId();
+    method public long getSelectedPosition();
+    method public boolean isGroupExpanded(int);
+    method public void setAdapter(android.widget.ExpandableListAdapter);
+    method public void setChildDivider(android.graphics.drawable.Drawable);
+    method public void setChildIndicator(android.graphics.drawable.Drawable);
+    method public void setChildIndicatorBounds(int, int);
+    method public void setChildIndicatorBoundsRelative(int, int);
+    method public void setGroupIndicator(android.graphics.drawable.Drawable);
+    method public void setIndicatorBounds(int, int);
+    method public void setIndicatorBoundsRelative(int, int);
+    method public void setOnChildClickListener(android.widget.ExpandableListView.OnChildClickListener);
+    method public void setOnGroupClickListener(android.widget.ExpandableListView.OnGroupClickListener);
+    method public void setOnGroupCollapseListener(android.widget.ExpandableListView.OnGroupCollapseListener);
+    method public void setOnGroupExpandListener(android.widget.ExpandableListView.OnGroupExpandListener);
+    method public boolean setSelectedChild(int, int, boolean);
+    method public void setSelectedGroup(int);
+    field public static final int CHILD_INDICATOR_INHERIT = -1; // 0xffffffff
+    field public static final int PACKED_POSITION_TYPE_CHILD = 1; // 0x1
+    field public static final int PACKED_POSITION_TYPE_GROUP = 0; // 0x0
+    field public static final int PACKED_POSITION_TYPE_NULL = 2; // 0x2
+    field public static final long PACKED_POSITION_VALUE_NULL = 4294967295L; // 0xffffffffL
+  }
+
+  public static class ExpandableListView.ExpandableListContextMenuInfo implements android.view.ContextMenu.ContextMenuInfo {
+    ctor public ExpandableListView.ExpandableListContextMenuInfo(android.view.View, long, long);
+    field public long id;
+    field public long packedPosition;
+    field public android.view.View targetView;
+  }
+
+  public static interface ExpandableListView.OnChildClickListener {
+    method public boolean onChildClick(android.widget.ExpandableListView, android.view.View, int, int, long);
+  }
+
+  public static interface ExpandableListView.OnGroupClickListener {
+    method public boolean onGroupClick(android.widget.ExpandableListView, android.view.View, int, long);
+  }
+
+  public static interface ExpandableListView.OnGroupCollapseListener {
+    method public void onGroupCollapse(int);
+  }
+
+  public static interface ExpandableListView.OnGroupExpandListener {
+    method public void onGroupExpand(int);
+  }
+
+  public abstract class Filter {
+    ctor public Filter();
+    method public CharSequence convertResultToString(Object);
+    method public final void filter(CharSequence);
+    method public final void filter(CharSequence, android.widget.Filter.FilterListener);
+    method protected abstract android.widget.Filter.FilterResults performFiltering(CharSequence);
+    method protected abstract void publishResults(CharSequence, android.widget.Filter.FilterResults);
+  }
+
+  public static interface Filter.FilterListener {
+    method public void onFilterComplete(int);
+  }
+
+  protected static class Filter.FilterResults {
+    ctor public Filter.FilterResults();
+    field public int count;
+    field public Object values;
+  }
+
+  public interface FilterQueryProvider {
+    method public android.database.Cursor runQuery(CharSequence);
+  }
+
+  public interface Filterable {
+    method public android.widget.Filter getFilter();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class FrameLayout extends android.view.ViewGroup {
+    ctor public FrameLayout(@NonNull android.content.Context);
+    ctor public FrameLayout(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public FrameLayout(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int);
+    ctor public FrameLayout(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int, @StyleRes int);
+    method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method @Deprecated public boolean getConsiderGoneChildrenWhenMeasuring();
+    method public boolean getMeasureAllChildren();
+    method public void setMeasureAllChildren(boolean);
+  }
+
+  public static class FrameLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public FrameLayout.LayoutParams(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public FrameLayout.LayoutParams(int, int);
+    ctor public FrameLayout.LayoutParams(int, int, int);
+    ctor public FrameLayout.LayoutParams(@NonNull android.view.ViewGroup.LayoutParams);
+    ctor public FrameLayout.LayoutParams(@NonNull android.view.ViewGroup.MarginLayoutParams);
+    ctor public FrameLayout.LayoutParams(@NonNull android.widget.FrameLayout.LayoutParams);
+    field public static final int UNSPECIFIED_GRAVITY = -1; // 0xffffffff
+    field public int gravity;
+  }
+
+  @Deprecated public class Gallery extends android.widget.AbsSpinner implements android.view.GestureDetector.OnGestureListener {
+    ctor @Deprecated public Gallery(android.content.Context);
+    ctor @Deprecated public Gallery(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public Gallery(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public Gallery(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public boolean onDown(android.view.MotionEvent);
+    method @Deprecated public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method @Deprecated public void onLongPress(@NonNull android.view.MotionEvent);
+    method @Deprecated public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method @Deprecated public void onShowPress(android.view.MotionEvent);
+    method @Deprecated public boolean onSingleTapUp(android.view.MotionEvent);
+    method @Deprecated public void setAnimationDuration(int);
+    method @Deprecated public void setCallbackDuringFling(boolean);
+    method @Deprecated public void setGravity(int);
+    method @Deprecated public void setSpacing(int);
+    method @Deprecated public void setUnselectedAlpha(float);
+  }
+
+  @Deprecated public static class Gallery.LayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor @Deprecated public Gallery.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public Gallery.LayoutParams(int, int);
+    ctor @Deprecated public Gallery.LayoutParams(android.view.ViewGroup.LayoutParams);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class GridLayout extends android.view.ViewGroup {
+    ctor public GridLayout(android.content.Context);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getAlignmentMode();
+    method public int getColumnCount();
+    method public int getOrientation();
+    method public int getRowCount();
+    method public boolean getUseDefaultMargins();
+    method public boolean isColumnOrderPreserved();
+    method public boolean isRowOrderPreserved();
+    method public void setAlignmentMode(int);
+    method public void setColumnCount(int);
+    method public void setColumnOrderPreserved(boolean);
+    method public void setOrientation(int);
+    method public void setRowCount(int);
+    method public void setRowOrderPreserved(boolean);
+    method public void setUseDefaultMargins(boolean);
+    method public static android.widget.GridLayout.Spec spec(int, int, android.widget.GridLayout.Alignment, float);
+    method public static android.widget.GridLayout.Spec spec(int, android.widget.GridLayout.Alignment, float);
+    method public static android.widget.GridLayout.Spec spec(int, int, float);
+    method public static android.widget.GridLayout.Spec spec(int, float);
+    method public static android.widget.GridLayout.Spec spec(int, int, android.widget.GridLayout.Alignment);
+    method public static android.widget.GridLayout.Spec spec(int, android.widget.GridLayout.Alignment);
+    method public static android.widget.GridLayout.Spec spec(int, int);
+    method public static android.widget.GridLayout.Spec spec(int);
+    field public static final int ALIGN_BOUNDS = 0; // 0x0
+    field public static final int ALIGN_MARGINS = 1; // 0x1
+    field public static final android.widget.GridLayout.Alignment BASELINE;
+    field public static final android.widget.GridLayout.Alignment BOTTOM;
+    field public static final android.widget.GridLayout.Alignment CENTER;
+    field public static final android.widget.GridLayout.Alignment END;
+    field public static final android.widget.GridLayout.Alignment FILL;
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final android.widget.GridLayout.Alignment LEFT;
+    field public static final android.widget.GridLayout.Alignment RIGHT;
+    field public static final android.widget.GridLayout.Alignment START;
+    field public static final android.widget.GridLayout.Alignment TOP;
+    field public static final int UNDEFINED = -2147483648; // 0x80000000
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public abstract static class GridLayout.Alignment {
+  }
+
+  public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public GridLayout.LayoutParams(android.widget.GridLayout.Spec, android.widget.GridLayout.Spec);
+    ctor public GridLayout.LayoutParams();
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public GridLayout.LayoutParams(android.widget.GridLayout.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    method public void setGravity(int);
+    field public android.widget.GridLayout.Spec columnSpec;
+    field public android.widget.GridLayout.Spec rowSpec;
+  }
+
+  public static class GridLayout.Spec {
+  }
+
+  @android.widget.RemoteViews.RemoteView public class GridView extends android.widget.AbsListView {
+    ctor public GridView(android.content.Context);
+    ctor public GridView(android.content.Context, android.util.AttributeSet);
+    ctor public GridView(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.ListAdapter getAdapter();
+    method public int getColumnWidth();
+    method public int getGravity();
+    method public int getHorizontalSpacing();
+    method public int getNumColumns();
+    method public int getRequestedColumnWidth();
+    method public int getRequestedHorizontalSpacing();
+    method public int getStretchMode();
+    method public int getVerticalSpacing();
+    method public void setColumnWidth(int);
+    method public void setGravity(int);
+    method public void setHorizontalSpacing(int);
+    method public void setNumColumns(int);
+    method public void setSelection(int);
+    method public void setStretchMode(int);
+    method public void setVerticalSpacing(int);
+    method public void smoothScrollByOffset(int);
+    field public static final int AUTO_FIT = -1; // 0xffffffff
+    field public static final int NO_STRETCH = 0; // 0x0
+    field public static final int STRETCH_COLUMN_WIDTH = 2; // 0x2
+    field public static final int STRETCH_SPACING = 1; // 0x1
+    field public static final int STRETCH_SPACING_UNIFORM = 3; // 0x3
+  }
+
+  public class HeaderViewListAdapter implements android.widget.Filterable android.widget.WrapperListAdapter {
+    ctor public HeaderViewListAdapter(java.util.ArrayList<android.widget.ListView.FixedViewInfo>, java.util.ArrayList<android.widget.ListView.FixedViewInfo>, android.widget.ListAdapter);
+    method public boolean areAllItemsEnabled();
+    method public int getCount();
+    method public android.widget.Filter getFilter();
+    method public int getFootersCount();
+    method public int getHeadersCount();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public int getItemViewType(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method public int getViewTypeCount();
+    method public android.widget.ListAdapter getWrappedAdapter();
+    method public boolean hasStableIds();
+    method public boolean isEmpty();
+    method public boolean isEnabled(int);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public boolean removeFooter(android.view.View);
+    method public boolean removeHeader(android.view.View);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public interface HeterogeneousExpandableList {
+    method public int getChildType(int, int);
+    method public int getChildTypeCount();
+    method public int getGroupType(int);
+    method public int getGroupTypeCount();
+  }
+
+  public class HorizontalScrollView extends android.widget.FrameLayout {
+    ctor public HorizontalScrollView(android.content.Context);
+    ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet);
+    ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int);
+    ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean arrowScroll(int);
+    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+    method public boolean executeKeyEvent(android.view.KeyEvent);
+    method public void fling(int);
+    method public boolean fullScroll(int);
+    method @ColorInt public int getLeftEdgeEffectColor();
+    method public int getMaxScrollAmount();
+    method @ColorInt public int getRightEdgeEffectColor();
+    method public boolean isFillViewport();
+    method public boolean isSmoothScrollingEnabled();
+    method public boolean pageScroll(int);
+    method public void setEdgeEffectColor(@ColorInt int);
+    method public void setFillViewport(boolean);
+    method public void setLeftEdgeEffectColor(@ColorInt int);
+    method public void setRightEdgeEffectColor(@ColorInt int);
+    method public void setSmoothScrollingEnabled(boolean);
+    method public final void smoothScrollBy(int, int);
+    method public final void smoothScrollTo(int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ImageButton extends android.widget.ImageView {
+    ctor public ImageButton(android.content.Context);
+    ctor public ImageButton(android.content.Context, android.util.AttributeSet);
+    ctor public ImageButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public ImageButton(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public class ImageSwitcher extends android.widget.ViewSwitcher {
+    ctor public ImageSwitcher(android.content.Context);
+    ctor public ImageSwitcher(android.content.Context, android.util.AttributeSet);
+    method public void setImageDrawable(android.graphics.drawable.Drawable);
+    method public void setImageResource(@DrawableRes int);
+    method public void setImageURI(android.net.Uri);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ImageView extends android.view.View {
+    ctor public ImageView(android.content.Context);
+    ctor public ImageView(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public ImageView(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public ImageView(android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public void animateTransform(@Nullable android.graphics.Matrix);
+    method public final void clearColorFilter();
+    method public boolean getAdjustViewBounds();
+    method public boolean getBaselineAlignBottom();
+    method public android.graphics.ColorFilter getColorFilter();
+    method public boolean getCropToPadding();
+    method public android.graphics.drawable.Drawable getDrawable();
+    method public int getImageAlpha();
+    method public android.graphics.Matrix getImageMatrix();
+    method @Nullable public android.graphics.BlendMode getImageTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getImageTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getImageTintMode();
+    method public int getMaxHeight();
+    method public int getMaxWidth();
+    method public android.widget.ImageView.ScaleType getScaleType();
+    method public int[] onCreateDrawableState(int);
+    method public void setAdjustViewBounds(boolean);
+    method @Deprecated public void setAlpha(int);
+    method public void setBaseline(int);
+    method public void setBaselineAlignBottom(boolean);
+    method public final void setColorFilter(int, android.graphics.PorterDuff.Mode);
+    method public final void setColorFilter(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setCropToPadding(boolean);
+    method protected boolean setFrame(int, int, int, int);
+    method public void setImageAlpha(int);
+    method public void setImageBitmap(android.graphics.Bitmap);
+    method public void setImageDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setImageIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setImageLevel(int);
+    method public void setImageMatrix(android.graphics.Matrix);
+    method public void setImageResource(@DrawableRes int);
+    method public void setImageState(int[], boolean);
+    method public void setImageTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setImageTintList(@Nullable android.content.res.ColorStateList);
+    method public void setImageTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setImageURI(@Nullable android.net.Uri);
+    method public void setMaxHeight(int);
+    method public void setMaxWidth(int);
+    method public void setScaleType(android.widget.ImageView.ScaleType);
+  }
+
+  public enum ImageView.ScaleType {
+    enum_constant public static final android.widget.ImageView.ScaleType CENTER;
+    enum_constant public static final android.widget.ImageView.ScaleType CENTER_CROP;
+    enum_constant public static final android.widget.ImageView.ScaleType CENTER_INSIDE;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_CENTER;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_END;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_START;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_XY;
+    enum_constant public static final android.widget.ImageView.ScaleType MATRIX;
+  }
+
+  @android.widget.RemoteViews.RemoteView public class LinearLayout extends android.view.ViewGroup {
+    ctor public LinearLayout(android.content.Context);
+    ctor public LinearLayout(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public LinearLayout(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getBaselineAlignedChildIndex();
+    method public android.graphics.drawable.Drawable getDividerDrawable();
+    method public int getDividerPadding();
+    method public int getGravity();
+    method public int getOrientation();
+    method public int getShowDividers();
+    method public float getWeightSum();
+    method public boolean isBaselineAligned();
+    method public boolean isMeasureWithLargestChildEnabled();
+    method public void setBaselineAligned(boolean);
+    method public void setBaselineAlignedChildIndex(int);
+    method public void setDividerDrawable(android.graphics.drawable.Drawable);
+    method public void setDividerPadding(int);
+    method public void setGravity(int);
+    method public void setHorizontalGravity(int);
+    method public void setMeasureWithLargestChildEnabled(boolean);
+    method public void setOrientation(int);
+    method public void setShowDividers(int);
+    method public void setVerticalGravity(int);
+    method public void setWeightSum(float);
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+    field public static final int SHOW_DIVIDER_END = 4; // 0x4
+    field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+    field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public static class LinearLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public LinearLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public LinearLayout.LayoutParams(int, int);
+    ctor public LinearLayout.LayoutParams(int, int, float);
+    ctor public LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public LinearLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
+    method public String debug(String);
+    field public int gravity;
+    field public float weight;
+  }
+
+  public interface ListAdapter extends android.widget.Adapter {
+    method public boolean areAllItemsEnabled();
+    method public boolean isEnabled(int);
+  }
+
+  public class ListPopupWindow {
+    ctor public ListPopupWindow(@NonNull android.content.Context);
+    ctor public ListPopupWindow(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public ListPopupWindow(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int);
+    ctor public ListPopupWindow(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int, @StyleRes int);
+    method public void clearListSelection();
+    method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View);
+    method public void dismiss();
+    method @Nullable public android.view.View getAnchorView();
+    method @StyleRes public int getAnimationStyle();
+    method @Nullable public android.graphics.drawable.Drawable getBackground();
+    method @Nullable public android.graphics.Rect getEpicenterBounds();
+    method public int getHeight();
+    method public int getHorizontalOffset();
+    method public int getInputMethodMode();
+    method @Nullable public android.widget.ListView getListView();
+    method public int getPromptPosition();
+    method @Nullable public Object getSelectedItem();
+    method public long getSelectedItemId();
+    method public int getSelectedItemPosition();
+    method @Nullable public android.view.View getSelectedView();
+    method public int getSoftInputMode();
+    method public int getVerticalOffset();
+    method public int getWidth();
+    method public boolean isInputMethodNotNeeded();
+    method public boolean isModal();
+    method public boolean isShowing();
+    method public boolean onKeyDown(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyPreIme(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyUp(int, @NonNull android.view.KeyEvent);
+    method public boolean performItemClick(int);
+    method public void postShow();
+    method public void setAdapter(@Nullable android.widget.ListAdapter);
+    method public void setAnchorView(@Nullable android.view.View);
+    method public void setAnimationStyle(@StyleRes int);
+    method public void setBackgroundDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setContentWidth(int);
+    method public void setDropDownGravity(int);
+    method public void setEpicenterBounds(@Nullable android.graphics.Rect);
+    method public void setHeight(int);
+    method public void setHorizontalOffset(int);
+    method public void setInputMethodMode(int);
+    method public void setListSelector(android.graphics.drawable.Drawable);
+    method public void setModal(boolean);
+    method public void setOnDismissListener(@Nullable android.widget.PopupWindow.OnDismissListener);
+    method public void setOnItemClickListener(@Nullable android.widget.AdapterView.OnItemClickListener);
+    method public void setOnItemSelectedListener(@Nullable android.widget.AdapterView.OnItemSelectedListener);
+    method public void setPromptPosition(int);
+    method public void setPromptView(@Nullable android.view.View);
+    method public void setSelection(int);
+    method public void setSoftInputMode(int);
+    method public void setVerticalOffset(int);
+    method public void setWidth(int);
+    method public void setWindowLayoutType(int);
+    method public void show();
+    field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+    field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+    field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+    field public static final int MATCH_PARENT = -1; // 0xffffffff
+    field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+    field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+    field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ListView extends android.widget.AbsListView {
+    ctor public ListView(android.content.Context);
+    ctor public ListView(android.content.Context, android.util.AttributeSet);
+    ctor public ListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ListView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addFooterView(android.view.View, Object, boolean);
+    method public void addFooterView(android.view.View);
+    method public void addHeaderView(android.view.View, Object, boolean);
+    method public void addHeaderView(android.view.View);
+    method public boolean areFooterDividersEnabled();
+    method public boolean areHeaderDividersEnabled();
+    method public android.widget.ListAdapter getAdapter();
+    method @Deprecated public long[] getCheckItemIds();
+    method @Nullable public android.graphics.drawable.Drawable getDivider();
+    method public int getDividerHeight();
+    method public int getFooterViewsCount();
+    method public int getHeaderViewsCount();
+    method public boolean getItemsCanFocus();
+    method public int getMaxScrollAmount();
+    method public android.graphics.drawable.Drawable getOverscrollFooter();
+    method public android.graphics.drawable.Drawable getOverscrollHeader();
+    method public boolean removeFooterView(android.view.View);
+    method public boolean removeHeaderView(android.view.View);
+    method public void setDivider(@Nullable android.graphics.drawable.Drawable);
+    method public void setDividerHeight(int);
+    method public void setFooterDividersEnabled(boolean);
+    method public void setHeaderDividersEnabled(boolean);
+    method public void setItemsCanFocus(boolean);
+    method public void setOverscrollFooter(android.graphics.drawable.Drawable);
+    method public void setOverscrollHeader(android.graphics.drawable.Drawable);
+    method public void setSelection(int);
+    method public void setSelectionAfterHeaderView();
+    method public void smoothScrollByOffset(int);
+  }
+
+  public class ListView.FixedViewInfo {
+    ctor public ListView.FixedViewInfo();
+    field public Object data;
+    field public boolean isSelectable;
+    field public android.view.View view;
+  }
+
+  @UiThread public final class Magnifier {
+    ctor @Deprecated public Magnifier(@NonNull android.view.View);
+    method public void dismiss();
+    method @Px public float getCornerRadius();
+    method @Px public int getDefaultHorizontalSourceToMagnifierOffset();
+    method @Px public int getDefaultVerticalSourceToMagnifierOffset();
+    method @Px public float getElevation();
+    method @Px public int getHeight();
+    method @Nullable public android.graphics.drawable.Drawable getOverlay();
+    method @Nullable public android.graphics.Point getPosition();
+    method @Px public int getSourceHeight();
+    method @Nullable public android.graphics.Point getSourcePosition();
+    method @Px public int getSourceWidth();
+    method @Px public int getWidth();
+    method public float getZoom();
+    method public boolean isClippingEnabled();
+    method public void setZoom(@FloatRange(from=0.0f) float);
+    method public void show(@FloatRange(from=0) float, @FloatRange(from=0) float);
+    method public void show(@FloatRange(from=0) float, @FloatRange(from=0) float, float, float);
+    method public void update();
+    field public static final int SOURCE_BOUND_MAX_IN_SURFACE = 0; // 0x0
+    field public static final int SOURCE_BOUND_MAX_VISIBLE = 1; // 0x1
+  }
+
+  public static final class Magnifier.Builder {
+    ctor public Magnifier.Builder(@NonNull android.view.View);
+    method @NonNull public android.widget.Magnifier build();
+    method @NonNull public android.widget.Magnifier.Builder setClippingEnabled(boolean);
+    method @NonNull public android.widget.Magnifier.Builder setCornerRadius(@FloatRange(from=0) @Px float);
+    method @NonNull public android.widget.Magnifier.Builder setDefaultSourceToMagnifierOffset(@Px int, @Px int);
+    method @NonNull public android.widget.Magnifier.Builder setElevation(@FloatRange(from=0) @Px float);
+    method @NonNull public android.widget.Magnifier.Builder setInitialZoom(@FloatRange(from=0.0f) float);
+    method @NonNull public android.widget.Magnifier.Builder setOverlay(@Nullable android.graphics.drawable.Drawable);
+    method @NonNull public android.widget.Magnifier.Builder setSize(@IntRange(from=0) @Px int, @IntRange(from=0) @Px int);
+    method @NonNull public android.widget.Magnifier.Builder setSourceBounds(int, int, int, int);
+  }
+
+  public class MediaController extends android.widget.FrameLayout {
+    ctor public MediaController(android.content.Context, android.util.AttributeSet);
+    ctor public MediaController(android.content.Context, boolean);
+    ctor public MediaController(android.content.Context);
+    method public void hide();
+    method public boolean isShowing();
+    method public void onFinishInflate();
+    method public void setAnchorView(android.view.View);
+    method public void setMediaPlayer(android.widget.MediaController.MediaPlayerControl);
+    method public void setPrevNextListeners(android.view.View.OnClickListener, android.view.View.OnClickListener);
+    method public void show();
+    method public void show(int);
+  }
+
+  public static interface MediaController.MediaPlayerControl {
+    method public boolean canPause();
+    method public boolean canSeekBackward();
+    method public boolean canSeekForward();
+    method public int getAudioSessionId();
+    method public int getBufferPercentage();
+    method public int getCurrentPosition();
+    method public int getDuration();
+    method public boolean isPlaying();
+    method public void pause();
+    method public void seekTo(int);
+    method public void start();
+  }
+
+  public class MultiAutoCompleteTextView extends android.widget.AutoCompleteTextView {
+    ctor public MultiAutoCompleteTextView(android.content.Context);
+    ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int);
+    method protected void performFiltering(CharSequence, int, int, int);
+    method public void setTokenizer(android.widget.MultiAutoCompleteTextView.Tokenizer);
+  }
+
+  public static class MultiAutoCompleteTextView.CommaTokenizer implements android.widget.MultiAutoCompleteTextView.Tokenizer {
+    ctor public MultiAutoCompleteTextView.CommaTokenizer();
+    method public int findTokenEnd(CharSequence, int);
+    method public int findTokenStart(CharSequence, int);
+    method public CharSequence terminateToken(CharSequence);
+  }
+
+  public static interface MultiAutoCompleteTextView.Tokenizer {
+    method public int findTokenEnd(CharSequence, int);
+    method public int findTokenStart(CharSequence, int);
+    method public CharSequence terminateToken(CharSequence);
+  }
+
+  public class NumberPicker extends android.widget.LinearLayout {
+    ctor public NumberPicker(android.content.Context);
+    ctor public NumberPicker(android.content.Context, android.util.AttributeSet);
+    ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int, int);
+    method public String[] getDisplayedValues();
+    method public int getMaxValue();
+    method public int getMinValue();
+    method @Px public int getSelectionDividerHeight();
+    method @ColorInt public int getTextColor();
+    method @FloatRange(from=0.0, fromInclusive=false) public float getTextSize();
+    method public int getValue();
+    method public boolean getWrapSelectorWheel();
+    method public void setDisplayedValues(String[]);
+    method public void setFormatter(android.widget.NumberPicker.Formatter);
+    method public void setMaxValue(int);
+    method public void setMinValue(int);
+    method public void setOnLongPressUpdateInterval(long);
+    method public void setOnScrollListener(android.widget.NumberPicker.OnScrollListener);
+    method public void setOnValueChangedListener(android.widget.NumberPicker.OnValueChangeListener);
+    method public void setSelectionDividerHeight(@IntRange(from=0) @Px int);
+    method public void setTextColor(@ColorInt int);
+    method public void setTextSize(@FloatRange(from=0.0, fromInclusive=false) float);
+    method public void setValue(int);
+    method public void setWrapSelectorWheel(boolean);
+  }
+
+  public static interface NumberPicker.Formatter {
+    method public String format(int);
+  }
+
+  public static interface NumberPicker.OnScrollListener {
+    method public void onScrollStateChange(android.widget.NumberPicker, int);
+    field public static final int SCROLL_STATE_FLING = 2; // 0x2
+    field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+    field public static final int SCROLL_STATE_TOUCH_SCROLL = 1; // 0x1
+  }
+
+  public static interface NumberPicker.OnValueChangeListener {
+    method public void onValueChange(android.widget.NumberPicker, int, int);
+  }
+
+  public class OverScroller {
+    ctor public OverScroller(android.content.Context);
+    ctor public OverScroller(android.content.Context, android.view.animation.Interpolator);
+    ctor @Deprecated public OverScroller(android.content.Context, android.view.animation.Interpolator, float, float);
+    ctor @Deprecated public OverScroller(android.content.Context, android.view.animation.Interpolator, float, float, boolean);
+    method public void abortAnimation();
+    method public boolean computeScrollOffset();
+    method public void fling(int, int, int, int, int, int, int, int);
+    method public void fling(int, int, int, int, int, int, int, int, int, int);
+    method public final void forceFinished(boolean);
+    method public float getCurrVelocity();
+    method public final int getCurrX();
+    method public final int getCurrY();
+    method public final int getFinalX();
+    method public final int getFinalY();
+    method public final int getStartX();
+    method public final int getStartY();
+    method public final boolean isFinished();
+    method public boolean isOverScrolled();
+    method public void notifyHorizontalEdgeReached(int, int, int);
+    method public void notifyVerticalEdgeReached(int, int, int);
+    method public final void setFriction(float);
+    method public boolean springBack(int, int, int, int, int, int);
+    method public void startScroll(int, int, int, int);
+    method public void startScroll(int, int, int, int, int);
+  }
+
+  public class PopupMenu {
+    ctor public PopupMenu(android.content.Context, android.view.View);
+    ctor public PopupMenu(android.content.Context, android.view.View, int);
+    ctor public PopupMenu(android.content.Context, android.view.View, int, int, int);
+    method public void dismiss();
+    method public android.view.View.OnTouchListener getDragToOpenListener();
+    method public int getGravity();
+    method public android.view.Menu getMenu();
+    method public android.view.MenuInflater getMenuInflater();
+    method public void inflate(@MenuRes int);
+    method public void setForceShowIcon(boolean);
+    method public void setGravity(int);
+    method public void setOnDismissListener(android.widget.PopupMenu.OnDismissListener);
+    method public void setOnMenuItemClickListener(android.widget.PopupMenu.OnMenuItemClickListener);
+    method public void show();
+  }
+
+  public static interface PopupMenu.OnDismissListener {
+    method public void onDismiss(android.widget.PopupMenu);
+  }
+
+  public static interface PopupMenu.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public class PopupWindow {
+    ctor public PopupWindow(android.content.Context);
+    ctor public PopupWindow(android.content.Context, android.util.AttributeSet);
+    ctor public PopupWindow(android.content.Context, android.util.AttributeSet, int);
+    ctor public PopupWindow(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public PopupWindow();
+    ctor public PopupWindow(android.view.View);
+    ctor public PopupWindow(int, int);
+    ctor public PopupWindow(android.view.View, int, int);
+    ctor public PopupWindow(android.view.View, int, int, boolean);
+    method public void dismiss();
+    method public int getAnimationStyle();
+    method public android.graphics.drawable.Drawable getBackground();
+    method public android.view.View getContentView();
+    method public float getElevation();
+    method @Nullable public android.transition.Transition getEnterTransition();
+    method @Nullable public android.graphics.Rect getEpicenterBounds();
+    method @Nullable public android.transition.Transition getExitTransition();
+    method public int getHeight();
+    method public int getInputMethodMode();
+    method public int getMaxAvailableHeight(@NonNull android.view.View);
+    method public int getMaxAvailableHeight(@NonNull android.view.View, int);
+    method public int getMaxAvailableHeight(@NonNull android.view.View, int, boolean);
+    method public boolean getOverlapAnchor();
+    method public int getSoftInputMode();
+    method public int getWidth();
+    method public int getWindowLayoutType();
+    method public boolean isAboveAnchor();
+    method public boolean isAttachedInDecor();
+    method public boolean isClippedToScreen();
+    method public boolean isClippingEnabled();
+    method public boolean isFocusable();
+    method public boolean isLaidOutInScreen();
+    method public boolean isOutsideTouchable();
+    method public boolean isShowing();
+    method public boolean isSplitTouchEnabled();
+    method public boolean isTouchModal();
+    method public boolean isTouchable();
+    method public void setAnimationStyle(int);
+    method public void setAttachedInDecor(boolean);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setClippingEnabled(boolean);
+    method public void setContentView(android.view.View);
+    method public void setElevation(float);
+    method public void setEnterTransition(@Nullable android.transition.Transition);
+    method public void setEpicenterBounds(@Nullable android.graphics.Rect);
+    method public void setExitTransition(@Nullable android.transition.Transition);
+    method public void setFocusable(boolean);
+    method public void setHeight(int);
+    method public void setIgnoreCheekPress();
+    method public void setInputMethodMode(int);
+    method public void setIsClippedToScreen(boolean);
+    method public void setIsLaidOutInScreen(boolean);
+    method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
+    method public void setOutsideTouchable(boolean);
+    method public void setOverlapAnchor(boolean);
+    method public void setSoftInputMode(int);
+    method public void setSplitTouchEnabled(boolean);
+    method public void setTouchInterceptor(android.view.View.OnTouchListener);
+    method public void setTouchModal(boolean);
+    method public void setTouchable(boolean);
+    method public void setWidth(int);
+    method @Deprecated public void setWindowLayoutMode(int, int);
+    method public void setWindowLayoutType(int);
+    method public void showAsDropDown(android.view.View);
+    method public void showAsDropDown(android.view.View, int, int);
+    method public void showAsDropDown(android.view.View, int, int, int);
+    method public void showAtLocation(android.view.View, int, int, int);
+    method public void update();
+    method public void update(int, int);
+    method public void update(int, int, int, int);
+    method public void update(int, int, int, int, boolean);
+    method public void update(android.view.View, int, int);
+    method public void update(android.view.View, int, int, int, int);
+    field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+    field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+    field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+  }
+
+  public static interface PopupWindow.OnDismissListener {
+    method public void onDismiss();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ProgressBar extends android.view.View {
+    ctor public ProgressBar(android.content.Context);
+    ctor public ProgressBar(android.content.Context, android.util.AttributeSet);
+    ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int, int);
+    method @Nullable public android.graphics.drawable.Drawable getCurrentDrawable();
+    method public android.graphics.drawable.Drawable getIndeterminateDrawable();
+    method @Nullable public android.graphics.BlendMode getIndeterminateTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getIndeterminateTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getIndeterminateTintMode();
+    method public android.view.animation.Interpolator getInterpolator();
+    method public int getMax();
+    method @Px public int getMaxHeight();
+    method @Px public int getMaxWidth();
+    method public int getMin();
+    method @Px public int getMinHeight();
+    method @Px public int getMinWidth();
+    method public int getProgress();
+    method @Nullable public android.graphics.BlendMode getProgressBackgroundTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getProgressBackgroundTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getProgressBackgroundTintMode();
+    method public android.graphics.drawable.Drawable getProgressDrawable();
+    method @Nullable public android.graphics.BlendMode getProgressTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getProgressTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getProgressTintMode();
+    method public int getSecondaryProgress();
+    method @Nullable public android.graphics.BlendMode getSecondaryProgressTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getSecondaryProgressTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getSecondaryProgressTintMode();
+    method public final void incrementProgressBy(int);
+    method public final void incrementSecondaryProgressBy(int);
+    method public boolean isAnimating();
+    method public boolean isIndeterminate();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void setIndeterminate(boolean);
+    method public void setIndeterminateDrawable(android.graphics.drawable.Drawable);
+    method public void setIndeterminateDrawableTiled(android.graphics.drawable.Drawable);
+    method public void setIndeterminateTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setIndeterminateTintList(@Nullable android.content.res.ColorStateList);
+    method public void setIndeterminateTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setInterpolator(android.content.Context, @InterpolatorRes int);
+    method public void setInterpolator(android.view.animation.Interpolator);
+    method public void setMax(int);
+    method public void setMaxHeight(@Px int);
+    method public void setMaxWidth(@Px int);
+    method public void setMin(int);
+    method public void setMinHeight(@Px int);
+    method public void setMinWidth(@Px int);
+    method public void setProgress(int);
+    method public void setProgress(int, boolean);
+    method public void setProgressBackgroundTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setProgressBackgroundTintList(@Nullable android.content.res.ColorStateList);
+    method public void setProgressBackgroundTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setProgressDrawable(android.graphics.drawable.Drawable);
+    method public void setProgressDrawableTiled(android.graphics.drawable.Drawable);
+    method public void setProgressTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setProgressTintList(@Nullable android.content.res.ColorStateList);
+    method public void setProgressTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setSecondaryProgress(int);
+    method public void setSecondaryProgressTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setSecondaryProgressTintList(@Nullable android.content.res.ColorStateList);
+    method public void setSecondaryProgressTintMode(@Nullable android.graphics.PorterDuff.Mode);
+  }
+
+  public class QuickContactBadge extends android.widget.ImageView implements android.view.View.OnClickListener {
+    ctor public QuickContactBadge(android.content.Context);
+    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet);
+    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int);
+    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int, int);
+    method public void assignContactFromEmail(String, boolean);
+    method public void assignContactFromEmail(String, boolean, android.os.Bundle);
+    method public void assignContactFromPhone(String, boolean);
+    method public void assignContactFromPhone(String, boolean, android.os.Bundle);
+    method public void assignContactUri(android.net.Uri);
+    method public void onClick(android.view.View);
+    method public void setExcludeMimes(String[]);
+    method public void setImageToDefault();
+    method public void setMode(int);
+    method public void setOverlay(android.graphics.drawable.Drawable);
+    method public void setPrioritizedMimeType(String);
+    field protected String[] mExcludeMimes;
+  }
+
+  @android.widget.RemoteViews.RemoteView public class RadioButton extends android.widget.CompoundButton {
+    ctor public RadioButton(android.content.Context);
+    ctor public RadioButton(android.content.Context, android.util.AttributeSet);
+    ctor public RadioButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public RadioButton(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class RadioGroup extends android.widget.LinearLayout {
+    ctor public RadioGroup(android.content.Context);
+    ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
+    method public void check(@IdRes int);
+    method public void clearCheck();
+    method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method @IdRes public int getCheckedRadioButtonId();
+    method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
+  }
+
+  public static class RadioGroup.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public RadioGroup.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public RadioGroup.LayoutParams(int, int);
+    ctor public RadioGroup.LayoutParams(int, int, float);
+    ctor public RadioGroup.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public RadioGroup.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+  }
+
+  public static interface RadioGroup.OnCheckedChangeListener {
+    method public void onCheckedChanged(android.widget.RadioGroup, @IdRes int);
+  }
+
+  public class RatingBar extends android.widget.AbsSeekBar {
+    ctor public RatingBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public RatingBar(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public RatingBar(android.content.Context, android.util.AttributeSet);
+    ctor public RatingBar(android.content.Context);
+    method public int getNumStars();
+    method public android.widget.RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener();
+    method public float getRating();
+    method public float getStepSize();
+    method public boolean isIndicator();
+    method public void setIsIndicator(boolean);
+    method public void setNumStars(int);
+    method public void setOnRatingBarChangeListener(android.widget.RatingBar.OnRatingBarChangeListener);
+    method public void setRating(float);
+    method public void setStepSize(float);
+  }
+
+  public static interface RatingBar.OnRatingBarChangeListener {
+    method public void onRatingChanged(android.widget.RatingBar, float, boolean);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class RelativeLayout extends android.view.ViewGroup {
+    ctor public RelativeLayout(android.content.Context);
+    ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
+    ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method public int getGravity();
+    method public int getIgnoreGravity();
+    method public void setGravity(int);
+    method public void setHorizontalGravity(int);
+    method public void setIgnoreGravity(int);
+    method public void setVerticalGravity(int);
+    field public static final int ABOVE = 2; // 0x2
+    field public static final int ALIGN_BASELINE = 4; // 0x4
+    field public static final int ALIGN_BOTTOM = 8; // 0x8
+    field public static final int ALIGN_END = 19; // 0x13
+    field public static final int ALIGN_LEFT = 5; // 0x5
+    field public static final int ALIGN_PARENT_BOTTOM = 12; // 0xc
+    field public static final int ALIGN_PARENT_END = 21; // 0x15
+    field public static final int ALIGN_PARENT_LEFT = 9; // 0x9
+    field public static final int ALIGN_PARENT_RIGHT = 11; // 0xb
+    field public static final int ALIGN_PARENT_START = 20; // 0x14
+    field public static final int ALIGN_PARENT_TOP = 10; // 0xa
+    field public static final int ALIGN_RIGHT = 7; // 0x7
+    field public static final int ALIGN_START = 18; // 0x12
+    field public static final int ALIGN_TOP = 6; // 0x6
+    field public static final int BELOW = 3; // 0x3
+    field public static final int CENTER_HORIZONTAL = 14; // 0xe
+    field public static final int CENTER_IN_PARENT = 13; // 0xd
+    field public static final int CENTER_VERTICAL = 15; // 0xf
+    field public static final int END_OF = 17; // 0x11
+    field public static final int LEFT_OF = 0; // 0x0
+    field public static final int RIGHT_OF = 1; // 0x1
+    field public static final int START_OF = 16; // 0x10
+    field public static final int TRUE = -1; // 0xffffffff
+  }
+
+  public static class RelativeLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public RelativeLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public RelativeLayout.LayoutParams(int, int);
+    ctor public RelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public RelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams);
+    method public void addRule(int);
+    method public void addRule(int, int);
+    method public String debug(String);
+    method public int getRule(int);
+    method public int[] getRules();
+    method public void removeRule(int);
+    field public boolean alignWithParent;
+  }
+
+  public class RemoteViews implements android.view.LayoutInflater.Filter android.os.Parcelable {
+    ctor public RemoteViews(String, int);
+    ctor public RemoteViews(@NonNull String, @LayoutRes int, @IdRes int);
+    ctor public RemoteViews(android.widget.RemoteViews, android.widget.RemoteViews);
+    ctor public RemoteViews(@NonNull java.util.Map<android.util.SizeF,android.widget.RemoteViews>);
+    ctor public RemoteViews(android.widget.RemoteViews);
+    ctor public RemoteViews(android.os.Parcel);
+    method public void addStableView(@IdRes int, @NonNull android.widget.RemoteViews, int);
+    method public void addView(@IdRes int, android.widget.RemoteViews);
+    method public android.view.View apply(android.content.Context, android.view.ViewGroup);
+    method @Deprecated public android.widget.RemoteViews clone();
+    method public int describeContents();
+    method public int getLayoutId();
+    method public String getPackage();
+    method @IdRes public int getViewId();
+    method @Deprecated public boolean onLoadClass(Class);
+    method public void reapply(android.content.Context, android.view.View);
+    method public void removeAllViews(@IdRes int);
+    method public void setAccessibilityTraversalAfter(@IdRes int, @IdRes int);
+    method public void setAccessibilityTraversalBefore(@IdRes int, @IdRes int);
+    method public void setBitmap(@IdRes int, String, android.graphics.Bitmap);
+    method public void setBlendMode(@IdRes int, @NonNull String, @Nullable android.graphics.BlendMode);
+    method public void setBoolean(@IdRes int, String, boolean);
+    method public void setBundle(@IdRes int, String, android.os.Bundle);
+    method public void setByte(@IdRes int, String, byte);
+    method public void setChar(@IdRes int, String, char);
+    method public void setCharSequence(@IdRes int, String, CharSequence);
+    method public void setCharSequence(@IdRes int, @NonNull String, @StringRes int);
+    method public void setCharSequenceAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setChronometer(@IdRes int, long, String, boolean);
+    method public void setChronometerCountDown(@IdRes int, boolean);
+    method public void setColor(@IdRes int, @NonNull String, @ColorRes int);
+    method public void setColorAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setColorInt(@IdRes int, @NonNull String, @ColorInt int, @ColorInt int);
+    method public void setColorStateList(@IdRes int, @NonNull String, @Nullable android.content.res.ColorStateList);
+    method public void setColorStateList(@IdRes int, @NonNull String, @Nullable android.content.res.ColorStateList, @Nullable android.content.res.ColorStateList);
+    method public void setColorStateList(@IdRes int, @NonNull String, @ColorRes int);
+    method public void setColorStateListAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setCompoundButtonChecked(@IdRes int, boolean);
+    method public void setContentDescription(@IdRes int, CharSequence);
+    method public void setDisplayedChild(@IdRes int, int);
+    method public void setDouble(@IdRes int, String, double);
+    method public void setEmptyView(@IdRes int, @IdRes int);
+    method public void setFloat(@IdRes int, String, float);
+    method public void setFloatDimen(@IdRes int, @NonNull String, @DimenRes int);
+    method public void setFloatDimen(@IdRes int, @NonNull String, float, int);
+    method public void setFloatDimenAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setIcon(@IdRes int, String, android.graphics.drawable.Icon);
+    method public void setIcon(@IdRes int, @NonNull String, @Nullable android.graphics.drawable.Icon, @Nullable android.graphics.drawable.Icon);
+    method public void setImageViewBitmap(@IdRes int, android.graphics.Bitmap);
+    method public void setImageViewIcon(@IdRes int, android.graphics.drawable.Icon);
+    method public void setImageViewResource(@IdRes int, @DrawableRes int);
+    method public void setImageViewUri(@IdRes int, android.net.Uri);
+    method public void setInt(@IdRes int, String, int);
+    method public void setIntDimen(@IdRes int, @NonNull String, @DimenRes int);
+    method public void setIntDimen(@IdRes int, @NonNull String, float, int);
+    method public void setIntDimenAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setIntent(@IdRes int, String, android.content.Intent);
+    method public void setLabelFor(@IdRes int, @IdRes int);
+    method public void setLightBackgroundLayoutId(@LayoutRes int);
+    method public void setLong(@IdRes int, String, long);
+    method public void setOnCheckedChangeResponse(@IdRes int, @NonNull android.widget.RemoteViews.RemoteResponse);
+    method public void setOnClickFillInIntent(@IdRes int, android.content.Intent);
+    method public void setOnClickPendingIntent(@IdRes int, android.app.PendingIntent);
+    method public void setOnClickResponse(@IdRes int, @NonNull android.widget.RemoteViews.RemoteResponse);
+    method public void setPendingIntentTemplate(@IdRes int, android.app.PendingIntent);
+    method public void setProgressBar(@IdRes int, int, int, boolean);
+    method public void setRadioGroupChecked(@IdRes int, @IdRes int);
+    method public void setRelativeScrollPosition(@IdRes int, int);
+    method @Deprecated public void setRemoteAdapter(int, @IdRes int, android.content.Intent);
+    method public void setRemoteAdapter(@IdRes int, android.content.Intent);
+    method public void setRemoteAdapter(@IdRes int, @NonNull android.widget.RemoteViews.RemoteCollectionItems);
+    method public void setScrollPosition(@IdRes int, int);
+    method public void setShort(@IdRes int, String, short);
+    method public void setString(@IdRes int, String, String);
+    method public void setTextColor(@IdRes int, @ColorInt int);
+    method public void setTextViewCompoundDrawables(@IdRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setTextViewCompoundDrawablesRelative(@IdRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setTextViewText(@IdRes int, CharSequence);
+    method public void setTextViewTextSize(@IdRes int, int, float);
+    method public void setUri(@IdRes int, String, android.net.Uri);
+    method public void setViewLayoutHeight(@IdRes int, float, int);
+    method public void setViewLayoutHeightAttr(@IdRes int, @AttrRes int);
+    method public void setViewLayoutHeightDimen(@IdRes int, @DimenRes int);
+    method public void setViewLayoutMargin(@IdRes int, int, float, int);
+    method public void setViewLayoutMarginAttr(@IdRes int, int, @AttrRes int);
+    method public void setViewLayoutMarginDimen(@IdRes int, int, @DimenRes int);
+    method public void setViewLayoutWidth(@IdRes int, float, int);
+    method public void setViewLayoutWidthAttr(@IdRes int, @AttrRes int);
+    method public void setViewLayoutWidthDimen(@IdRes int, @DimenRes int);
+    method public void setViewOutlinePreferredRadius(@IdRes int, float, int);
+    method public void setViewOutlinePreferredRadiusAttr(@IdRes int, @AttrRes int);
+    method public void setViewOutlinePreferredRadiusDimen(@IdRes int, @DimenRes int);
+    method public void setViewPadding(@IdRes int, @Px int, @Px int, @Px int, @Px int);
+    method public void setViewVisibility(@IdRes int, int);
+    method public void showNext(@IdRes int);
+    method public void showPrevious(@IdRes int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.RemoteViews> CREATOR;
+    field public static final String EXTRA_CHECKED = "android.widget.extra.CHECKED";
+    field public static final String EXTRA_SHARED_ELEMENT_BOUNDS = "android.widget.extra.SHARED_ELEMENT_BOUNDS";
+    field public static final int MARGIN_BOTTOM = 3; // 0x3
+    field public static final int MARGIN_END = 5; // 0x5
+    field public static final int MARGIN_LEFT = 0; // 0x0
+    field public static final int MARGIN_RIGHT = 2; // 0x2
+    field public static final int MARGIN_START = 4; // 0x4
+    field public static final int MARGIN_TOP = 1; // 0x1
+  }
+
+  public static class RemoteViews.ActionException extends java.lang.RuntimeException {
+    ctor public RemoteViews.ActionException(Exception);
+    ctor public RemoteViews.ActionException(String);
+  }
+
+  public static final class RemoteViews.RemoteCollectionItems implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getItemCount();
+    method public long getItemId(int);
+    method @NonNull public android.widget.RemoteViews getItemView(int);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.RemoteViews.RemoteCollectionItems> CREATOR;
+  }
+
+  public static final class RemoteViews.RemoteCollectionItems.Builder {
+    ctor public RemoteViews.RemoteCollectionItems.Builder();
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems.Builder addItem(long, @NonNull android.widget.RemoteViews);
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems build();
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems.Builder setHasStableIds(boolean);
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems.Builder setViewTypeCount(int);
+  }
+
+  public static class RemoteViews.RemoteResponse {
+    ctor public RemoteViews.RemoteResponse();
+    method @NonNull public android.widget.RemoteViews.RemoteResponse addSharedElement(@IdRes int, @NonNull String);
+    method @NonNull public static android.widget.RemoteViews.RemoteResponse fromFillInIntent(@NonNull android.content.Intent);
+    method @NonNull public static android.widget.RemoteViews.RemoteResponse fromPendingIntent(@NonNull android.app.PendingIntent);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface RemoteViews.RemoteView {
+  }
+
+  public static final class RemoteViews.RemoteViewOutlineProvider extends android.view.ViewOutlineProvider {
+    ctor public RemoteViews.RemoteViewOutlineProvider(float);
+    method public void getOutline(@NonNull android.view.View, @NonNull android.graphics.Outline);
+    method public float getRadius();
+  }
+
+  public abstract class RemoteViewsService extends android.app.Service {
+    ctor public RemoteViewsService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.widget.RemoteViewsService.RemoteViewsFactory onGetViewFactory(android.content.Intent);
+  }
+
+  public static interface RemoteViewsService.RemoteViewsFactory {
+    method public int getCount();
+    method public long getItemId(int);
+    method public android.widget.RemoteViews getLoadingView();
+    method public android.widget.RemoteViews getViewAt(int);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public void onCreate();
+    method public void onDataSetChanged();
+    method public void onDestroy();
+  }
+
+  public abstract class ResourceCursorAdapter extends android.widget.CursorAdapter {
+    ctor @Deprecated public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor);
+    ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean);
+    ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int);
+    method public android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method public void setDropDownViewResource(int);
+    method public void setViewResource(int);
+  }
+
+  public abstract class ResourceCursorTreeAdapter extends android.widget.CursorTreeAdapter {
+    ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, int, int);
+    ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, int);
+    ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int);
+    method public android.view.View newChildView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+    method public android.view.View newGroupView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+  }
+
+  public class ScrollView extends android.widget.FrameLayout {
+    ctor public ScrollView(android.content.Context);
+    ctor public ScrollView(android.content.Context, android.util.AttributeSet);
+    ctor public ScrollView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ScrollView(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean arrowScroll(int);
+    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+    method public boolean executeKeyEvent(android.view.KeyEvent);
+    method public void fling(int);
+    method public boolean fullScroll(int);
+    method @ColorInt public int getBottomEdgeEffectColor();
+    method public int getMaxScrollAmount();
+    method @ColorInt public int getTopEdgeEffectColor();
+    method public boolean isFillViewport();
+    method public boolean isSmoothScrollingEnabled();
+    method public boolean pageScroll(int);
+    method public void scrollToDescendant(@NonNull android.view.View);
+    method public void setBottomEdgeEffectColor(@ColorInt int);
+    method public void setEdgeEffectColor(@ColorInt int);
+    method public void setFillViewport(boolean);
+    method public void setSmoothScrollingEnabled(boolean);
+    method public void setTopEdgeEffectColor(@ColorInt int);
+    method public final void smoothScrollBy(int, int);
+    method public final void smoothScrollTo(int, int);
+  }
+
+  public class Scroller {
+    ctor public Scroller(android.content.Context);
+    ctor public Scroller(android.content.Context, android.view.animation.Interpolator);
+    ctor public Scroller(android.content.Context, android.view.animation.Interpolator, boolean);
+    method public void abortAnimation();
+    method public boolean computeScrollOffset();
+    method public void extendDuration(int);
+    method public void fling(int, int, int, int, int, int, int, int);
+    method public final void forceFinished(boolean);
+    method public float getCurrVelocity();
+    method public final int getCurrX();
+    method public final int getCurrY();
+    method public final int getDuration();
+    method public final int getFinalX();
+    method public final int getFinalY();
+    method public final int getStartX();
+    method public final int getStartY();
+    method public final boolean isFinished();
+    method public void setFinalX(int);
+    method public void setFinalY(int);
+    method public final void setFriction(float);
+    method public void startScroll(int, int, int, int);
+    method public void startScroll(int, int, int, int, int);
+    method public int timePassed();
+  }
+
+  public class SearchView extends android.widget.LinearLayout implements android.view.CollapsibleActionView {
+    ctor public SearchView(android.content.Context);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getImeOptions();
+    method public int getInputType();
+    method public int getMaxWidth();
+    method public CharSequence getQuery();
+    method @Nullable public CharSequence getQueryHint();
+    method public android.widget.CursorAdapter getSuggestionsAdapter();
+    method @Deprecated public boolean isIconfiedByDefault();
+    method public boolean isIconified();
+    method public boolean isIconifiedByDefault();
+    method public boolean isQueryRefinementEnabled();
+    method public boolean isSubmitButtonEnabled();
+    method public void onActionViewCollapsed();
+    method public void onActionViewExpanded();
+    method public void setIconified(boolean);
+    method public void setIconifiedByDefault(boolean);
+    method public void setImeOptions(int);
+    method public void setInputType(int);
+    method public void setMaxWidth(int);
+    method public void setOnCloseListener(android.widget.SearchView.OnCloseListener);
+    method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
+    method public void setOnQueryTextListener(android.widget.SearchView.OnQueryTextListener);
+    method public void setOnSearchClickListener(android.view.View.OnClickListener);
+    method public void setOnSuggestionListener(android.widget.SearchView.OnSuggestionListener);
+    method public void setQuery(CharSequence, boolean);
+    method public void setQueryHint(@Nullable CharSequence);
+    method public void setQueryRefinementEnabled(boolean);
+    method public void setSearchableInfo(android.app.SearchableInfo);
+    method public void setSubmitButtonEnabled(boolean);
+    method public void setSuggestionsAdapter(android.widget.CursorAdapter);
+  }
+
+  public static interface SearchView.OnCloseListener {
+    method public boolean onClose();
+  }
+
+  public static interface SearchView.OnQueryTextListener {
+    method public boolean onQueryTextChange(String);
+    method public boolean onQueryTextSubmit(String);
+  }
+
+  public static interface SearchView.OnSuggestionListener {
+    method public boolean onSuggestionClick(int);
+    method public boolean onSuggestionSelect(int);
+  }
+
+  public interface SectionIndexer {
+    method public int getPositionForSection(int);
+    method public int getSectionForPosition(int);
+    method public Object[] getSections();
+  }
+
+  public class SeekBar extends android.widget.AbsSeekBar {
+    ctor public SeekBar(android.content.Context);
+    ctor public SeekBar(android.content.Context, android.util.AttributeSet);
+    ctor public SeekBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public SeekBar(android.content.Context, android.util.AttributeSet, int, int);
+    method public void setOnSeekBarChangeListener(android.widget.SeekBar.OnSeekBarChangeListener);
+  }
+
+  public static interface SeekBar.OnSeekBarChangeListener {
+    method public void onProgressChanged(android.widget.SeekBar, int, boolean);
+    method public void onStartTrackingTouch(android.widget.SeekBar);
+    method public void onStopTrackingTouch(android.widget.SeekBar);
+  }
+
+  public class ShareActionProvider extends android.view.ActionProvider {
+    ctor public ShareActionProvider(android.content.Context);
+    method public android.view.View onCreateActionView();
+    method public void setOnShareTargetSelectedListener(android.widget.ShareActionProvider.OnShareTargetSelectedListener);
+    method public void setShareHistoryFileName(String);
+    method public void setShareIntent(android.content.Intent);
+    field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+  }
+
+  public static interface ShareActionProvider.OnShareTargetSelectedListener {
+    method public boolean onShareTargetSelected(android.widget.ShareActionProvider, android.content.Intent);
+  }
+
+  public class SimpleAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+    ctor public SimpleAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, @LayoutRes int, String[], @IdRes int[]);
+    method public int getCount();
+    method public android.content.res.Resources.Theme getDropDownViewTheme();
+    method public android.widget.Filter getFilter();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method public android.widget.SimpleAdapter.ViewBinder getViewBinder();
+    method public void setDropDownViewResource(int);
+    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+    method public void setViewBinder(android.widget.SimpleAdapter.ViewBinder);
+    method public void setViewImage(android.widget.ImageView, int);
+    method public void setViewImage(android.widget.ImageView, String);
+    method public void setViewText(android.widget.TextView, String);
+  }
+
+  public static interface SimpleAdapter.ViewBinder {
+    method public boolean setViewValue(android.view.View, Object, String);
+  }
+
+  public class SimpleCursorAdapter extends android.widget.ResourceCursorAdapter {
+    ctor @Deprecated public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[]);
+    ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[], int);
+    method public void bindView(android.view.View, android.content.Context, android.database.Cursor);
+    method public void changeCursorAndColumns(android.database.Cursor, String[], int[]);
+    method public android.widget.SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter();
+    method public int getStringConversionColumn();
+    method public android.widget.SimpleCursorAdapter.ViewBinder getViewBinder();
+    method public void setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter);
+    method public void setStringConversionColumn(int);
+    method public void setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder);
+    method public void setViewImage(android.widget.ImageView, String);
+    method public void setViewText(android.widget.TextView, String);
+  }
+
+  public static interface SimpleCursorAdapter.CursorToStringConverter {
+    method public CharSequence convertToString(android.database.Cursor);
+  }
+
+  public static interface SimpleCursorAdapter.ViewBinder {
+    method public boolean setViewValue(android.view.View, android.database.Cursor, int);
+  }
+
+  public abstract class SimpleCursorTreeAdapter extends android.widget.ResourceCursorTreeAdapter {
+    ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, String[], int[], int, int, String[], int[]);
+    ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, String[], int[], int, String[], int[]);
+    ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, String[], int[], int, String[], int[]);
+    method protected void bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method protected void bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method public android.widget.SimpleCursorTreeAdapter.ViewBinder getViewBinder();
+    method public void setViewBinder(android.widget.SimpleCursorTreeAdapter.ViewBinder);
+    method protected void setViewImage(android.widget.ImageView, String);
+    method public void setViewText(android.widget.TextView, String);
+  }
+
+  public static interface SimpleCursorTreeAdapter.ViewBinder {
+    method public boolean setViewValue(android.view.View, android.database.Cursor, int);
+  }
+
+  public class SimpleExpandableListAdapter extends android.widget.BaseExpandableListAdapter {
+    ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, int, String[], int[], java.util.List<? extends java.util.List<? extends java.util.Map<java.lang.String,?>>>, int, String[], int[]);
+    ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, int, int, String[], int[], java.util.List<? extends java.util.List<? extends java.util.Map<java.lang.String,?>>>, int, String[], int[]);
+    ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, int, int, String[], int[], java.util.List<? extends java.util.List<? extends java.util.Map<java.lang.String,?>>>, int, int, String[], int[]);
+    method public Object getChild(int, int);
+    method public long getChildId(int, int);
+    method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup);
+    method public int getChildrenCount(int);
+    method public Object getGroup(int);
+    method public int getGroupCount();
+    method public long getGroupId(int);
+    method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup);
+    method public boolean hasStableIds();
+    method public boolean isChildSelectable(int, int);
+    method public android.view.View newChildView(boolean, android.view.ViewGroup);
+    method public android.view.View newGroupView(boolean, android.view.ViewGroup);
+  }
+
+  @Deprecated public class SlidingDrawer extends android.view.ViewGroup {
+    ctor @Deprecated public SlidingDrawer(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public SlidingDrawer(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public SlidingDrawer(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void animateClose();
+    method @Deprecated public void animateOpen();
+    method @Deprecated public void animateToggle();
+    method @Deprecated public void close();
+    method @Deprecated public android.view.View getContent();
+    method @Deprecated public android.view.View getHandle();
+    method @Deprecated public boolean isMoving();
+    method @Deprecated public boolean isOpened();
+    method @Deprecated public void lock();
+    method @Deprecated public void open();
+    method @Deprecated public void setOnDrawerCloseListener(android.widget.SlidingDrawer.OnDrawerCloseListener);
+    method @Deprecated public void setOnDrawerOpenListener(android.widget.SlidingDrawer.OnDrawerOpenListener);
+    method @Deprecated public void setOnDrawerScrollListener(android.widget.SlidingDrawer.OnDrawerScrollListener);
+    method @Deprecated public void toggle();
+    method @Deprecated public void unlock();
+    field @Deprecated public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
+    field @Deprecated public static final int ORIENTATION_VERTICAL = 1; // 0x1
+  }
+
+  @Deprecated public static interface SlidingDrawer.OnDrawerCloseListener {
+    method @Deprecated public void onDrawerClosed();
+  }
+
+  @Deprecated public static interface SlidingDrawer.OnDrawerOpenListener {
+    method @Deprecated public void onDrawerOpened();
+  }
+
+  @Deprecated public static interface SlidingDrawer.OnDrawerScrollListener {
+    method @Deprecated public void onScrollEnded();
+    method @Deprecated public void onScrollStarted();
+  }
+
+  public final class Space extends android.view.View {
+    ctor public Space(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public Space(android.content.Context, android.util.AttributeSet, int);
+    ctor public Space(android.content.Context, android.util.AttributeSet);
+    ctor public Space(android.content.Context);
+  }
+
+  public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener {
+    ctor public Spinner(android.content.Context);
+    ctor public Spinner(android.content.Context, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int, int, android.content.res.Resources.Theme);
+    method public int getDropDownHorizontalOffset();
+    method public int getDropDownVerticalOffset();
+    method public int getDropDownWidth();
+    method public int getGravity();
+    method public android.graphics.drawable.Drawable getPopupBackground();
+    method public android.content.Context getPopupContext();
+    method public CharSequence getPrompt();
+    method public void onClick(android.content.DialogInterface, int);
+    method public void setDropDownHorizontalOffset(int);
+    method public void setDropDownVerticalOffset(int);
+    method public void setDropDownWidth(int);
+    method public void setGravity(int);
+    method public void setPopupBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setPopupBackgroundResource(@DrawableRes int);
+    method public void setPrompt(CharSequence);
+    method public void setPromptId(int);
+    field public static final int MODE_DIALOG = 0; // 0x0
+    field public static final int MODE_DROPDOWN = 1; // 0x1
+  }
+
+  public interface SpinnerAdapter extends android.widget.Adapter {
+    method public android.view.View getDropDownView(int, android.view.View, android.view.ViewGroup);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class StackView extends android.widget.AdapterViewAnimator {
+    ctor public StackView(android.content.Context);
+    ctor public StackView(android.content.Context, android.util.AttributeSet);
+    ctor public StackView(android.content.Context, android.util.AttributeSet, int);
+    ctor public StackView(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class Switch extends android.widget.CompoundButton {
+    ctor public Switch(android.content.Context);
+    ctor public Switch(android.content.Context, android.util.AttributeSet);
+    ctor public Switch(android.content.Context, android.util.AttributeSet, int);
+    ctor public Switch(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean getShowText();
+    method public boolean getSplitTrack();
+    method public int getSwitchMinWidth();
+    method public int getSwitchPadding();
+    method public CharSequence getTextOff();
+    method public CharSequence getTextOn();
+    method public android.graphics.drawable.Drawable getThumbDrawable();
+    method public int getThumbTextPadding();
+    method @Nullable public android.graphics.BlendMode getThumbTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getThumbTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getThumbTintMode();
+    method public android.graphics.drawable.Drawable getTrackDrawable();
+    method @Nullable public android.graphics.BlendMode getTrackTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getTrackTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getTrackTintMode();
+    method public void onMeasure(int, int);
+    method public void setShowText(boolean);
+    method public void setSplitTrack(boolean);
+    method public void setSwitchMinWidth(int);
+    method public void setSwitchPadding(int);
+    method public void setSwitchTextAppearance(android.content.Context, @StyleRes int);
+    method public void setSwitchTypeface(android.graphics.Typeface, int);
+    method public void setSwitchTypeface(android.graphics.Typeface);
+    method public void setTextOff(CharSequence);
+    method public void setTextOn(CharSequence);
+    method public void setThumbDrawable(android.graphics.drawable.Drawable);
+    method public void setThumbIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setThumbResource(@DrawableRes int);
+    method public void setThumbTextPadding(int);
+    method public void setThumbTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setThumbTintList(@Nullable android.content.res.ColorStateList);
+    method public void setThumbTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setTrackDrawable(android.graphics.drawable.Drawable);
+    method public void setTrackIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setTrackResource(@DrawableRes int);
+    method public void setTrackTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setTrackTintList(@Nullable android.content.res.ColorStateList);
+    method public void setTrackTintMode(@Nullable android.graphics.PorterDuff.Mode);
+  }
+
+  @Deprecated public class TabHost extends android.widget.FrameLayout implements android.view.ViewTreeObserver.OnTouchModeChangeListener {
+    ctor @Deprecated public TabHost(android.content.Context);
+    ctor @Deprecated public TabHost(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TabHost(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TabHost(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void addTab(android.widget.TabHost.TabSpec);
+    method @Deprecated public void clearAllTabs();
+    method @Deprecated @Nullable public int getCurrentTab();
+    method @Deprecated @Nullable public String getCurrentTabTag();
+    method @Deprecated @Nullable public android.view.View getCurrentTabView();
+    method @Deprecated public android.view.View getCurrentView();
+    method @Deprecated public android.widget.FrameLayout getTabContentView();
+    method @Deprecated public android.widget.TabWidget getTabWidget();
+    method @Deprecated @NonNull public android.widget.TabHost.TabSpec newTabSpec(@NonNull String);
+    method @Deprecated public void onTouchModeChanged(boolean);
+    method @Deprecated public void setCurrentTab(int);
+    method @Deprecated public void setCurrentTabByTag(String);
+    method @Deprecated public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener);
+    method @Deprecated public void setup();
+    method @Deprecated public void setup(android.app.LocalActivityManager);
+  }
+
+  @Deprecated public static interface TabHost.OnTabChangeListener {
+    method @Deprecated public void onTabChanged(String);
+  }
+
+  @Deprecated public static interface TabHost.TabContentFactory {
+    method @Deprecated public android.view.View createTabContent(String);
+  }
+
+  @Deprecated public class TabHost.TabSpec {
+    method @Deprecated @NonNull public String getTag();
+    method @Deprecated public android.widget.TabHost.TabSpec setContent(int);
+    method @Deprecated public android.widget.TabHost.TabSpec setContent(android.widget.TabHost.TabContentFactory);
+    method @Deprecated public android.widget.TabHost.TabSpec setContent(android.content.Intent);
+    method @Deprecated public android.widget.TabHost.TabSpec setIndicator(CharSequence);
+    method @Deprecated public android.widget.TabHost.TabSpec setIndicator(CharSequence, android.graphics.drawable.Drawable);
+    method @Deprecated public android.widget.TabHost.TabSpec setIndicator(android.view.View);
+  }
+
+  @Deprecated public class TabWidget extends android.widget.LinearLayout implements android.view.View.OnFocusChangeListener {
+    ctor @Deprecated public TabWidget(android.content.Context);
+    ctor @Deprecated public TabWidget(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TabWidget(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TabWidget(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void dispatchDraw(android.graphics.Canvas);
+    method @Deprecated public void focusCurrentTab(int);
+    method @Deprecated public android.view.View getChildTabViewAt(int);
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getLeftStripDrawable();
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getRightStripDrawable();
+    method @Deprecated public int getTabCount();
+    method @Deprecated public boolean isStripEnabled();
+    method @Deprecated public void onFocusChange(android.view.View, boolean);
+    method @Deprecated public void setCurrentTab(int);
+    method @Deprecated public void setDividerDrawable(@DrawableRes int);
+    method @Deprecated public void setLeftStripDrawable(@Nullable android.graphics.drawable.Drawable);
+    method @Deprecated public void setLeftStripDrawable(@DrawableRes int);
+    method @Deprecated public void setRightStripDrawable(@Nullable android.graphics.drawable.Drawable);
+    method @Deprecated public void setRightStripDrawable(@DrawableRes int);
+    method @Deprecated public void setStripEnabled(boolean);
+  }
+
+  public class TableLayout extends android.widget.LinearLayout {
+    ctor public TableLayout(android.content.Context);
+    ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method public boolean isColumnCollapsed(int);
+    method public boolean isColumnShrinkable(int);
+    method public boolean isColumnStretchable(int);
+    method public boolean isShrinkAllColumns();
+    method public boolean isStretchAllColumns();
+    method public void setColumnCollapsed(int, boolean);
+    method public void setColumnShrinkable(int, boolean);
+    method public void setColumnStretchable(int, boolean);
+    method public void setShrinkAllColumns(boolean);
+    method public void setStretchAllColumns(boolean);
+  }
+
+  public static class TableLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public TableLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public TableLayout.LayoutParams(int, int);
+    ctor public TableLayout.LayoutParams(int, int, float);
+    ctor public TableLayout.LayoutParams();
+    ctor public TableLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public TableLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+  }
+
+  public class TableRow extends android.widget.LinearLayout {
+    ctor public TableRow(android.content.Context);
+    ctor public TableRow(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method public android.view.View getVirtualChildAt(int);
+    method public int getVirtualChildCount();
+  }
+
+  public static class TableRow.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public TableRow.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public TableRow.LayoutParams(int, int);
+    ctor public TableRow.LayoutParams(int, int, float);
+    ctor public TableRow.LayoutParams();
+    ctor public TableRow.LayoutParams(int);
+    ctor public TableRow.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public TableRow.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    field public int column;
+    field public int span;
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextClock extends android.widget.TextView {
+    ctor public TextClock(android.content.Context);
+    ctor public TextClock(android.content.Context, android.util.AttributeSet);
+    ctor public TextClock(android.content.Context, android.util.AttributeSet, int);
+    ctor public TextClock(android.content.Context, android.util.AttributeSet, int, int);
+    method public CharSequence getFormat12Hour();
+    method public CharSequence getFormat24Hour();
+    method public String getTimeZone();
+    method public boolean is24HourModeEnabled();
+    method public void refreshTime();
+    method public void setFormat12Hour(CharSequence);
+    method public void setFormat24Hour(CharSequence);
+    method public void setTimeZone(String);
+    field @Deprecated public static final CharSequence DEFAULT_FORMAT_12_HOUR;
+    field @Deprecated public static final CharSequence DEFAULT_FORMAT_24_HOUR;
+  }
+
+  public class TextSwitcher extends android.widget.ViewSwitcher {
+    ctor public TextSwitcher(android.content.Context);
+    ctor public TextSwitcher(android.content.Context, android.util.AttributeSet);
+    method public void setCurrentText(CharSequence);
+    method public void setText(CharSequence);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
+    ctor public TextView(android.content.Context);
+    ctor public TextView(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public TextView(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public TextView(android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public void addTextChangedListener(android.text.TextWatcher);
+    method public final void append(CharSequence);
+    method public void append(CharSequence, int, int);
+    method public void beginBatchEdit();
+    method public boolean bringPointIntoView(int);
+    method public void clearComposingText();
+    method public void debug(int);
+    method public boolean didTouchFocusSelect();
+    method public void endBatchEdit();
+    method public boolean extractText(android.view.inputmethod.ExtractedTextRequest, android.view.inputmethod.ExtractedText);
+    method public final int getAutoLinkMask();
+    method public int getAutoSizeMaxTextSize();
+    method public int getAutoSizeMinTextSize();
+    method public int getAutoSizeStepGranularity();
+    method public int[] getAutoSizeTextAvailableSizes();
+    method public int getAutoSizeTextType();
+    method public int getBreakStrategy();
+    method public int getCompoundDrawablePadding();
+    method @Nullable public android.graphics.BlendMode getCompoundDrawableTintBlendMode();
+    method public android.content.res.ColorStateList getCompoundDrawableTintList();
+    method public android.graphics.PorterDuff.Mode getCompoundDrawableTintMode();
+    method @NonNull public android.graphics.drawable.Drawable[] getCompoundDrawables();
+    method @NonNull public android.graphics.drawable.Drawable[] getCompoundDrawablesRelative();
+    method public int getCompoundPaddingBottom();
+    method public int getCompoundPaddingEnd();
+    method public int getCompoundPaddingLeft();
+    method public int getCompoundPaddingRight();
+    method public int getCompoundPaddingStart();
+    method public int getCompoundPaddingTop();
+    method @ColorInt public final int getCurrentHintTextColor();
+    method @ColorInt public final int getCurrentTextColor();
+    method public android.view.ActionMode.Callback getCustomInsertionActionModeCallback();
+    method public android.view.ActionMode.Callback getCustomSelectionActionModeCallback();
+    method protected boolean getDefaultEditable();
+    method protected android.text.method.MovementMethod getDefaultMovementMethod();
+    method public android.text.Editable getEditableText();
+    method public android.text.TextUtils.TruncateAt getEllipsize();
+    method public CharSequence getError();
+    method public int getExtendedPaddingBottom();
+    method public int getExtendedPaddingTop();
+    method public android.text.InputFilter[] getFilters();
+    method public int getFirstBaselineToTopHeight();
+    method @Nullable public String getFontFeatureSettings();
+    method @Nullable public String getFontVariationSettings();
+    method public boolean getFreezesText();
+    method public int getGravity();
+    method @ColorInt public int getHighlightColor();
+    method public CharSequence getHint();
+    method public final android.content.res.ColorStateList getHintTextColors();
+    method public int getHyphenationFrequency();
+    method public int getImeActionId();
+    method public CharSequence getImeActionLabel();
+    method @Nullable public android.os.LocaleList getImeHintLocales();
+    method public int getImeOptions();
+    method public boolean getIncludeFontPadding();
+    method public android.os.Bundle getInputExtras(boolean);
+    method public int getInputType();
+    method public int getJustificationMode();
+    method public final android.text.method.KeyListener getKeyListener();
+    method public int getLastBaselineToBottomHeight();
+    method public final android.text.Layout getLayout();
+    method public float getLetterSpacing();
+    method public int getLineBounds(int, android.graphics.Rect);
+    method public int getLineCount();
+    method public int getLineHeight();
+    method public float getLineSpacingExtra();
+    method public float getLineSpacingMultiplier();
+    method public final android.content.res.ColorStateList getLinkTextColors();
+    method public final boolean getLinksClickable();
+    method public int getMarqueeRepeatLimit();
+    method public int getMaxEms();
+    method public int getMaxHeight();
+    method public int getMaxLines();
+    method public int getMaxWidth();
+    method public int getMinEms();
+    method public int getMinHeight();
+    method public int getMinLines();
+    method public int getMinWidth();
+    method public final android.text.method.MovementMethod getMovementMethod();
+    method public int getOffsetForPosition(float, float);
+    method public android.text.TextPaint getPaint();
+    method public int getPaintFlags();
+    method public String getPrivateImeOptions();
+    method public int getSelectionEnd();
+    method public int getSelectionStart();
+    method @ColorInt public int getShadowColor();
+    method public float getShadowDx();
+    method public float getShadowDy();
+    method public float getShadowRadius();
+    method public final boolean getShowSoftInputOnFocus();
+    method public CharSequence getText();
+    method @NonNull public android.view.textclassifier.TextClassifier getTextClassifier();
+    method public final android.content.res.ColorStateList getTextColors();
+    method @Nullable public android.graphics.drawable.Drawable getTextCursorDrawable();
+    method @NonNull public android.text.TextDirectionHeuristic getTextDirectionHeuristic();
+    method @NonNull public java.util.Locale getTextLocale();
+    method @NonNull @Size(min=1) public android.os.LocaleList getTextLocales();
+    method @NonNull public android.text.PrecomputedText.Params getTextMetricsParams();
+    method public float getTextScaleX();
+    method @Nullable public android.graphics.drawable.Drawable getTextSelectHandle();
+    method @Nullable public android.graphics.drawable.Drawable getTextSelectHandleLeft();
+    method @Nullable public android.graphics.drawable.Drawable getTextSelectHandleRight();
+    method public float getTextSize();
+    method public int getTextSizeUnit();
+    method public int getTotalPaddingBottom();
+    method public int getTotalPaddingEnd();
+    method public int getTotalPaddingLeft();
+    method public int getTotalPaddingRight();
+    method public int getTotalPaddingStart();
+    method public int getTotalPaddingTop();
+    method public final android.text.method.TransformationMethod getTransformationMethod();
+    method public android.graphics.Typeface getTypeface();
+    method public android.text.style.URLSpan[] getUrls();
+    method public boolean hasSelection();
+    method public boolean isAllCaps();
+    method public boolean isCursorVisible();
+    method public boolean isElegantTextHeight();
+    method public boolean isFallbackLineSpacing();
+    method public final boolean isHorizontallyScrollable();
+    method public boolean isInputMethodTarget();
+    method public boolean isSingleLine();
+    method public boolean isSuggestionsEnabled();
+    method public boolean isTextSelectable();
+    method public int length();
+    method public boolean moveCursorToVisibleOffset();
+    method public void onBeginBatchEdit();
+    method public void onCommitCompletion(android.view.inputmethod.CompletionInfo);
+    method public void onCommitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public void onEditorAction(int);
+    method public void onEndBatchEdit();
+    method public boolean onPreDraw();
+    method public boolean onPrivateIMECommand(String, android.os.Bundle);
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method @CallSuper protected void onSelectionChanged(int, int);
+    method protected void onTextChanged(CharSequence, int, int, int);
+    method public boolean onTextContextMenuItem(int);
+    method public void removeTextChangedListener(android.text.TextWatcher);
+    method public void setAllCaps(boolean);
+    method public final void setAutoLinkMask(int);
+    method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int);
+    method public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[], int);
+    method public void setAutoSizeTextTypeWithDefaults(int);
+    method public void setBreakStrategy(int);
+    method public void setCompoundDrawablePadding(int);
+    method public void setCompoundDrawableTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setCompoundDrawableTintList(@Nullable android.content.res.ColorStateList);
+    method public void setCompoundDrawableTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setCompoundDrawables(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCompoundDrawablesRelative(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCompoundDrawablesRelativeWithIntrinsicBounds(@DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setCompoundDrawablesRelativeWithIntrinsicBounds(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCompoundDrawablesWithIntrinsicBounds(@DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setCompoundDrawablesWithIntrinsicBounds(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCursorVisible(boolean);
+    method public void setCustomInsertionActionModeCallback(android.view.ActionMode.Callback);
+    method public void setCustomSelectionActionModeCallback(android.view.ActionMode.Callback);
+    method public final void setEditableFactory(android.text.Editable.Factory);
+    method public void setElegantTextHeight(boolean);
+    method public void setEllipsize(android.text.TextUtils.TruncateAt);
+    method public void setEms(int);
+    method public void setError(CharSequence);
+    method public void setError(CharSequence, android.graphics.drawable.Drawable);
+    method public void setExtractedText(android.view.inputmethod.ExtractedText);
+    method public void setFallbackLineSpacing(boolean);
+    method public void setFilters(android.text.InputFilter[]);
+    method public void setFirstBaselineToTopHeight(@IntRange(from=0) @Px int);
+    method public void setFontFeatureSettings(@Nullable String);
+    method public boolean setFontVariationSettings(@Nullable String);
+    method protected boolean setFrame(int, int, int, int);
+    method public void setFreezesText(boolean);
+    method public void setGravity(int);
+    method public void setHeight(int);
+    method public void setHighlightColor(@ColorInt int);
+    method public final void setHint(CharSequence);
+    method public final void setHint(@StringRes int);
+    method public final void setHintTextColor(@ColorInt int);
+    method public final void setHintTextColor(android.content.res.ColorStateList);
+    method public void setHorizontallyScrolling(boolean);
+    method public void setHyphenationFrequency(int);
+    method public void setImeActionLabel(CharSequence, int);
+    method public void setImeHintLocales(@Nullable android.os.LocaleList);
+    method public void setImeOptions(int);
+    method public void setIncludeFontPadding(boolean);
+    method public void setInputExtras(@XmlRes int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void setInputType(int);
+    method public void setJustificationMode(int);
+    method public void setKeyListener(android.text.method.KeyListener);
+    method public void setLastBaselineToBottomHeight(@IntRange(from=0) @Px int);
+    method public void setLetterSpacing(float);
+    method public void setLineHeight(@IntRange(from=0) @Px int);
+    method public void setLineSpacing(float, float);
+    method public void setLines(int);
+    method public final void setLinkTextColor(@ColorInt int);
+    method public final void setLinkTextColor(android.content.res.ColorStateList);
+    method public final void setLinksClickable(boolean);
+    method public void setMarqueeRepeatLimit(int);
+    method public void setMaxEms(int);
+    method public void setMaxHeight(int);
+    method public void setMaxLines(int);
+    method public void setMaxWidth(int);
+    method public void setMinEms(int);
+    method public void setMinHeight(int);
+    method public void setMinLines(int);
+    method public void setMinWidth(int);
+    method public final void setMovementMethod(android.text.method.MovementMethod);
+    method public void setOnEditorActionListener(android.widget.TextView.OnEditorActionListener);
+    method public void setPaintFlags(int);
+    method public void setPrivateImeOptions(String);
+    method public void setRawInputType(int);
+    method public void setScroller(android.widget.Scroller);
+    method public void setSelectAllOnFocus(boolean);
+    method public void setShadowLayer(float, float, float, int);
+    method public final void setShowSoftInputOnFocus(boolean);
+    method public void setSingleLine();
+    method public void setSingleLine(boolean);
+    method public final void setSpannableFactory(android.text.Spannable.Factory);
+    method public final void setText(CharSequence);
+    method public void setText(CharSequence, android.widget.TextView.BufferType);
+    method public final void setText(char[], int, int);
+    method public final void setText(@StringRes int);
+    method public final void setText(@StringRes int, android.widget.TextView.BufferType);
+    method public void setTextAppearance(@StyleRes int);
+    method @Deprecated public void setTextAppearance(android.content.Context, @StyleRes int);
+    method public void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+    method public void setTextColor(@ColorInt int);
+    method public void setTextColor(android.content.res.ColorStateList);
+    method public void setTextCursorDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setTextCursorDrawable(@DrawableRes int);
+    method public void setTextIsSelectable(boolean);
+    method public final void setTextKeepState(CharSequence);
+    method public final void setTextKeepState(CharSequence, android.widget.TextView.BufferType);
+    method public void setTextLocale(@NonNull java.util.Locale);
+    method public void setTextLocales(@NonNull @Size(min=1) android.os.LocaleList);
+    method public void setTextMetricsParams(@NonNull android.text.PrecomputedText.Params);
+    method public void setTextScaleX(float);
+    method public void setTextSelectHandle(@NonNull android.graphics.drawable.Drawable);
+    method public void setTextSelectHandle(@DrawableRes int);
+    method public void setTextSelectHandleLeft(@NonNull android.graphics.drawable.Drawable);
+    method public void setTextSelectHandleLeft(@DrawableRes int);
+    method public void setTextSelectHandleRight(@NonNull android.graphics.drawable.Drawable);
+    method public void setTextSelectHandleRight(@DrawableRes int);
+    method public void setTextSize(float);
+    method public void setTextSize(int, float);
+    method public final void setTransformationMethod(android.text.method.TransformationMethod);
+    method public void setTypeface(@Nullable android.graphics.Typeface, int);
+    method public void setTypeface(@Nullable android.graphics.Typeface);
+    method public void setWidth(int);
+    field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+    field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+  }
+
+  public enum TextView.BufferType {
+    enum_constant public static final android.widget.TextView.BufferType EDITABLE;
+    enum_constant public static final android.widget.TextView.BufferType NORMAL;
+    enum_constant public static final android.widget.TextView.BufferType SPANNABLE;
+  }
+
+  public static interface TextView.OnEditorActionListener {
+    method public boolean onEditorAction(android.widget.TextView, int, android.view.KeyEvent);
+  }
+
+  public static class TextView.SavedState extends android.view.View.BaseSavedState {
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.TextView.SavedState> CREATOR;
+  }
+
+  public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
+    method @Nullable public android.content.res.Resources.Theme getDropDownViewTheme();
+    method public void setDropDownViewTheme(@Nullable android.content.res.Resources.Theme);
+  }
+
+  public class TimePicker extends android.widget.FrameLayout {
+    ctor public TimePicker(android.content.Context);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated @NonNull public Integer getCurrentHour();
+    method @Deprecated @NonNull public Integer getCurrentMinute();
+    method public int getHour();
+    method public int getMinute();
+    method public boolean is24HourView();
+    method @Deprecated public void setCurrentHour(@NonNull Integer);
+    method @Deprecated public void setCurrentMinute(@NonNull Integer);
+    method public void setHour(@IntRange(from=0, to=23) int);
+    method public void setIs24HourView(@NonNull Boolean);
+    method public void setMinute(@IntRange(from=0, to=59) int);
+    method public void setOnTimeChangedListener(android.widget.TimePicker.OnTimeChangedListener);
+    method public boolean validateInput();
+  }
+
+  public static interface TimePicker.OnTimeChangedListener {
+    method public void onTimeChanged(android.widget.TimePicker, int, int);
+  }
+
+  public class Toast {
+    ctor public Toast(android.content.Context);
+    method public void addCallback(@NonNull android.widget.Toast.Callback);
+    method public void cancel();
+    method public int getDuration();
+    method public int getGravity();
+    method public float getHorizontalMargin();
+    method public float getVerticalMargin();
+    method @Deprecated @Nullable public android.view.View getView();
+    method public int getXOffset();
+    method public int getYOffset();
+    method public static android.widget.Toast makeText(android.content.Context, CharSequence, int);
+    method public static android.widget.Toast makeText(android.content.Context, @StringRes int, int) throws android.content.res.Resources.NotFoundException;
+    method public void removeCallback(@NonNull android.widget.Toast.Callback);
+    method public void setDuration(int);
+    method public void setGravity(int, int, int);
+    method public void setMargin(float, float);
+    method public void setText(@StringRes int);
+    method public void setText(CharSequence);
+    method @Deprecated public void setView(android.view.View);
+    method public void show();
+    field public static final int LENGTH_LONG = 1; // 0x1
+    field public static final int LENGTH_SHORT = 0; // 0x0
+  }
+
+  public abstract static class Toast.Callback {
+    ctor public Toast.Callback();
+    method public void onToastHidden();
+    method public void onToastShown();
+  }
+
+  public class ToggleButton extends android.widget.CompoundButton {
+    ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public ToggleButton(android.content.Context, android.util.AttributeSet);
+    ctor public ToggleButton(android.content.Context);
+    method @FloatRange(from=0.0, to=1.0) public float getDisabledAlpha();
+    method public CharSequence getTextOff();
+    method public CharSequence getTextOn();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setTextOff(CharSequence);
+    method public void setTextOn(CharSequence);
+  }
+
+  public class Toolbar extends android.view.ViewGroup {
+    ctor public Toolbar(android.content.Context);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
+    method public void collapseActionView();
+    method public void dismissPopupMenus();
+    method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method @Nullable public CharSequence getCollapseContentDescription();
+    method @Nullable public android.graphics.drawable.Drawable getCollapseIcon();
+    method public int getContentInsetEnd();
+    method public int getContentInsetEndWithActions();
+    method public int getContentInsetLeft();
+    method public int getContentInsetRight();
+    method public int getContentInsetStart();
+    method public int getContentInsetStartWithNavigation();
+    method public int getCurrentContentInsetEnd();
+    method public int getCurrentContentInsetLeft();
+    method public int getCurrentContentInsetRight();
+    method public int getCurrentContentInsetStart();
+    method public android.graphics.drawable.Drawable getLogo();
+    method public CharSequence getLogoDescription();
+    method public android.view.Menu getMenu();
+    method @Nullable public CharSequence getNavigationContentDescription();
+    method @Nullable public android.graphics.drawable.Drawable getNavigationIcon();
+    method @Nullable public android.graphics.drawable.Drawable getOverflowIcon();
+    method public int getPopupTheme();
+    method public CharSequence getSubtitle();
+    method public CharSequence getTitle();
+    method public int getTitleMarginBottom();
+    method public int getTitleMarginEnd();
+    method public int getTitleMarginStart();
+    method public int getTitleMarginTop();
+    method public boolean hasExpandedActionView();
+    method public boolean hideOverflowMenu();
+    method public void inflateMenu(@MenuRes int);
+    method public boolean isOverflowMenuShowing();
+    method public void setCollapseContentDescription(@StringRes int);
+    method public void setCollapseContentDescription(@Nullable CharSequence);
+    method public void setCollapseIcon(@DrawableRes int);
+    method public void setCollapseIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setContentInsetEndWithActions(int);
+    method public void setContentInsetStartWithNavigation(int);
+    method public void setContentInsetsAbsolute(int, int);
+    method public void setContentInsetsRelative(int, int);
+    method public void setLogo(@DrawableRes int);
+    method public void setLogo(android.graphics.drawable.Drawable);
+    method public void setLogoDescription(@StringRes int);
+    method public void setLogoDescription(CharSequence);
+    method public void setNavigationContentDescription(@StringRes int);
+    method public void setNavigationContentDescription(@Nullable CharSequence);
+    method public void setNavigationIcon(@DrawableRes int);
+    method public void setNavigationIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+    method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener);
+    method public void setOverflowIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setPopupTheme(@StyleRes int);
+    method public void setSubtitle(@StringRes int);
+    method public void setSubtitle(CharSequence);
+    method public void setSubtitleTextAppearance(android.content.Context, @StyleRes int);
+    method public void setSubtitleTextColor(@ColorInt int);
+    method public void setTitle(@StringRes int);
+    method public void setTitle(CharSequence);
+    method public void setTitleMargin(int, int, int, int);
+    method public void setTitleMarginBottom(int);
+    method public void setTitleMarginEnd(int);
+    method public void setTitleMarginStart(int);
+    method public void setTitleMarginTop(int);
+    method public void setTitleTextAppearance(android.content.Context, @StyleRes int);
+    method public void setTitleTextColor(@ColorInt int);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class Toolbar.LayoutParams extends android.app.ActionBar.LayoutParams {
+    ctor public Toolbar.LayoutParams(@NonNull android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar.LayoutParams(int, int);
+    ctor public Toolbar.LayoutParams(int, int, int);
+    ctor public Toolbar.LayoutParams(int);
+    ctor public Toolbar.LayoutParams(android.widget.Toolbar.LayoutParams);
+    ctor public Toolbar.LayoutParams(android.app.ActionBar.LayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+  }
+
+  public static interface Toolbar.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  @Deprecated public class TwoLineListItem extends android.widget.RelativeLayout {
+    ctor @Deprecated public TwoLineListItem(android.content.Context);
+    ctor @Deprecated public TwoLineListItem(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TwoLineListItem(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TwoLineListItem(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public android.widget.TextView getText1();
+    method @Deprecated public android.widget.TextView getText2();
+  }
+
+  public class VideoView extends android.view.SurfaceView implements android.widget.MediaController.MediaPlayerControl {
+    ctor public VideoView(android.content.Context);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet, int);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addSubtitleSource(java.io.InputStream, android.media.MediaFormat);
+    method public boolean canPause();
+    method public boolean canSeekBackward();
+    method public boolean canSeekForward();
+    method public int getAudioSessionId();
+    method public int getBufferPercentage();
+    method public int getCurrentPosition();
+    method public int getDuration();
+    method public boolean isPlaying();
+    method public void pause();
+    method public int resolveAdjustedSize(int, int);
+    method public void resume();
+    method public void seekTo(int);
+    method public void setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method public void setAudioFocusRequest(int);
+    method public void setMediaController(android.widget.MediaController);
+    method public void setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener);
+    method public void setOnErrorListener(android.media.MediaPlayer.OnErrorListener);
+    method public void setOnInfoListener(android.media.MediaPlayer.OnInfoListener);
+    method public void setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener);
+    method public void setVideoPath(String);
+    method public void setVideoURI(android.net.Uri);
+    method public void setVideoURI(android.net.Uri, java.util.Map<java.lang.String,java.lang.String>);
+    method public void start();
+    method public void stopPlayback();
+    method public void suspend();
+  }
+
+  public class ViewAnimator extends android.widget.FrameLayout {
+    ctor public ViewAnimator(android.content.Context);
+    ctor public ViewAnimator(android.content.Context, android.util.AttributeSet);
+    method public boolean getAnimateFirstView();
+    method public android.view.View getCurrentView();
+    method public int getDisplayedChild();
+    method public android.view.animation.Animation getInAnimation();
+    method public android.view.animation.Animation getOutAnimation();
+    method public void setAnimateFirstView(boolean);
+    method public void setDisplayedChild(int);
+    method public void setInAnimation(android.view.animation.Animation);
+    method public void setInAnimation(android.content.Context, @AnimRes int);
+    method public void setOutAnimation(android.view.animation.Animation);
+    method public void setOutAnimation(android.content.Context, @AnimRes int);
+    method public void showNext();
+    method public void showPrevious();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ViewFlipper extends android.widget.ViewAnimator {
+    ctor public ViewFlipper(android.content.Context);
+    ctor public ViewFlipper(android.content.Context, android.util.AttributeSet);
+    method @IntRange(from=0) public int getFlipInterval();
+    method public boolean isAutoStart();
+    method public boolean isFlipping();
+    method public void setAutoStart(boolean);
+    method public void setFlipInterval(@IntRange(from=0) int);
+    method public void startFlipping();
+    method public void stopFlipping();
+  }
+
+  public class ViewSwitcher extends android.widget.ViewAnimator {
+    ctor public ViewSwitcher(android.content.Context);
+    ctor public ViewSwitcher(android.content.Context, android.util.AttributeSet);
+    method public android.view.View getNextView();
+    method public void reset();
+    method public void setFactory(android.widget.ViewSwitcher.ViewFactory);
+  }
+
+  public static interface ViewSwitcher.ViewFactory {
+    method public android.view.View makeView();
+  }
+
+  public interface WrapperListAdapter extends android.widget.ListAdapter {
+    method public android.widget.ListAdapter getWrappedAdapter();
+  }
+
+  @Deprecated public class ZoomButton extends android.widget.ImageButton implements android.view.View.OnLongClickListener {
+    ctor @Deprecated public ZoomButton(android.content.Context);
+    ctor @Deprecated public ZoomButton(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public ZoomButton(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public ZoomButton(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public boolean onLongClick(android.view.View);
+    method @Deprecated public void setZoomSpeed(long);
+  }
+
+  @Deprecated public class ZoomButtonsController implements android.view.View.OnTouchListener {
+    ctor @Deprecated public ZoomButtonsController(android.view.View);
+    method @Deprecated public android.view.ViewGroup getContainer();
+    method @Deprecated public android.view.View getZoomControls();
+    method @Deprecated public boolean isAutoDismissed();
+    method @Deprecated public boolean isVisible();
+    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+    method @Deprecated public void setAutoDismissed(boolean);
+    method @Deprecated public void setFocusable(boolean);
+    method @Deprecated public void setOnZoomListener(android.widget.ZoomButtonsController.OnZoomListener);
+    method @Deprecated public void setVisible(boolean);
+    method @Deprecated public void setZoomInEnabled(boolean);
+    method @Deprecated public void setZoomOutEnabled(boolean);
+    method @Deprecated public void setZoomSpeed(long);
+  }
+
+  @Deprecated public static interface ZoomButtonsController.OnZoomListener {
+    method @Deprecated public void onVisibilityChanged(boolean);
+    method @Deprecated public void onZoom(boolean);
+  }
+
+  @Deprecated public class ZoomControls extends android.widget.LinearLayout {
+    ctor @Deprecated public ZoomControls(android.content.Context);
+    ctor @Deprecated public ZoomControls(android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void hide();
+    method @Deprecated public void setIsZoomInEnabled(boolean);
+    method @Deprecated public void setIsZoomOutEnabled(boolean);
+    method @Deprecated public void setOnZoomInClickListener(android.view.View.OnClickListener);
+    method @Deprecated public void setOnZoomOutClickListener(android.view.View.OnClickListener);
+    method @Deprecated public void setZoomSpeed(long);
+    method @Deprecated public void show();
+  }
+
+}
+
+package android.widget.inline {
+
+  public class InlineContentView extends android.view.ViewGroup {
+    method @Nullable public android.view.SurfaceControl getSurfaceControl();
+    method public boolean isZOrderedOnTop();
+    method public void onLayout(boolean, int, int, int, int);
+    method public void setSurfaceControlCallback(@Nullable android.widget.inline.InlineContentView.SurfaceControlCallback);
+    method public boolean setZOrderedOnTop(boolean);
+  }
+
+  public static interface InlineContentView.SurfaceControlCallback {
+    method public void onCreated(@NonNull android.view.SurfaceControl);
+    method public void onDestroyed(@NonNull android.view.SurfaceControl);
+  }
+
+  public final class InlinePresentationSpec implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.util.Size getMaxSize();
+    method @NonNull public android.util.Size getMinSize();
+    method @NonNull public android.os.Bundle getStyle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.inline.InlinePresentationSpec> CREATOR;
+  }
+
+  public static final class InlinePresentationSpec.Builder {
+    ctor public InlinePresentationSpec.Builder(@NonNull android.util.Size, @NonNull android.util.Size);
+    method @NonNull public android.widget.inline.InlinePresentationSpec build();
+    method @NonNull public android.widget.inline.InlinePresentationSpec.Builder setStyle(@NonNull android.os.Bundle);
+  }
+
+}
+
+package android.window {
+
+  public interface SplashScreen {
+    method public void clearOnExitAnimationListener();
+    method public void setOnExitAnimationListener(@NonNull android.window.SplashScreen.OnExitAnimationListener);
+    method public void setSplashScreenTheme(@StyleRes int);
+  }
+
+  public static interface SplashScreen.OnExitAnimationListener {
+    method @UiThread public void onSplashScreenExit(@NonNull android.window.SplashScreenView);
+  }
+
+  public final class SplashScreenView extends android.widget.FrameLayout {
+    method @Nullable public java.time.Duration getIconAnimationDuration();
+    method @Nullable public java.time.Instant getIconAnimationStart();
+    method @Nullable public android.view.View getIconView();
+    method @UiThread public void remove();
+  }
+
+}
+
+package javax.microedition.khronos.egl {
+
+  public interface EGL {
+  }
+
+  public interface EGL10 extends javax.microedition.khronos.egl.EGL {
+    method public boolean eglChooseConfig(javax.microedition.khronos.egl.EGLDisplay, int[], javax.microedition.khronos.egl.EGLConfig[], int, int[]);
+    method public boolean eglCopyBuffers(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, Object);
+    method public javax.microedition.khronos.egl.EGLContext eglCreateContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, javax.microedition.khronos.egl.EGLContext, int[]);
+    method public javax.microedition.khronos.egl.EGLSurface eglCreatePbufferSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, int[]);
+    method @Deprecated public javax.microedition.khronos.egl.EGLSurface eglCreatePixmapSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, Object, int[]);
+    method public javax.microedition.khronos.egl.EGLSurface eglCreateWindowSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, Object, int[]);
+    method public boolean eglDestroyContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext);
+    method public boolean eglDestroySurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface);
+    method public boolean eglGetConfigAttrib(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, int, int[]);
+    method public boolean eglGetConfigs(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig[], int, int[]);
+    method public javax.microedition.khronos.egl.EGLContext eglGetCurrentContext();
+    method public javax.microedition.khronos.egl.EGLDisplay eglGetCurrentDisplay();
+    method public javax.microedition.khronos.egl.EGLSurface eglGetCurrentSurface(int);
+    method public javax.microedition.khronos.egl.EGLDisplay eglGetDisplay(Object);
+    method public int eglGetError();
+    method public boolean eglInitialize(javax.microedition.khronos.egl.EGLDisplay, int[]);
+    method public boolean eglMakeCurrent(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, javax.microedition.khronos.egl.EGLSurface, javax.microedition.khronos.egl.EGLContext);
+    method public boolean eglQueryContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext, int, int[]);
+    method public String eglQueryString(javax.microedition.khronos.egl.EGLDisplay, int);
+    method public boolean eglQuerySurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, int, int[]);
+    method public boolean eglSwapBuffers(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface);
+    method public boolean eglTerminate(javax.microedition.khronos.egl.EGLDisplay);
+    method public boolean eglWaitGL();
+    method public boolean eglWaitNative(int, Object);
+    field public static final int EGL_ALPHA_FORMAT = 12424; // 0x3088
+    field public static final int EGL_ALPHA_MASK_SIZE = 12350; // 0x303e
+    field public static final int EGL_ALPHA_SIZE = 12321; // 0x3021
+    field public static final int EGL_BAD_ACCESS = 12290; // 0x3002
+    field public static final int EGL_BAD_ALLOC = 12291; // 0x3003
+    field public static final int EGL_BAD_ATTRIBUTE = 12292; // 0x3004
+    field public static final int EGL_BAD_CONFIG = 12293; // 0x3005
+    field public static final int EGL_BAD_CONTEXT = 12294; // 0x3006
+    field public static final int EGL_BAD_CURRENT_SURFACE = 12295; // 0x3007
+    field public static final int EGL_BAD_DISPLAY = 12296; // 0x3008
+    field public static final int EGL_BAD_MATCH = 12297; // 0x3009
+    field public static final int EGL_BAD_NATIVE_PIXMAP = 12298; // 0x300a
+    field public static final int EGL_BAD_NATIVE_WINDOW = 12299; // 0x300b
+    field public static final int EGL_BAD_PARAMETER = 12300; // 0x300c
+    field public static final int EGL_BAD_SURFACE = 12301; // 0x300d
+    field public static final int EGL_BLUE_SIZE = 12322; // 0x3022
+    field public static final int EGL_BUFFER_SIZE = 12320; // 0x3020
+    field public static final int EGL_COLORSPACE = 12423; // 0x3087
+    field public static final int EGL_COLOR_BUFFER_TYPE = 12351; // 0x303f
+    field public static final int EGL_CONFIG_CAVEAT = 12327; // 0x3027
+    field public static final int EGL_CONFIG_ID = 12328; // 0x3028
+    field public static final int EGL_CORE_NATIVE_ENGINE = 12379; // 0x305b
+    field public static final Object EGL_DEFAULT_DISPLAY;
+    field public static final int EGL_DEPTH_SIZE = 12325; // 0x3025
+    field public static final int EGL_DONT_CARE = -1; // 0xffffffff
+    field public static final int EGL_DRAW = 12377; // 0x3059
+    field public static final int EGL_EXTENSIONS = 12373; // 0x3055
+    field public static final int EGL_GREEN_SIZE = 12323; // 0x3023
+    field public static final int EGL_HEIGHT = 12374; // 0x3056
+    field public static final int EGL_HORIZONTAL_RESOLUTION = 12432; // 0x3090
+    field public static final int EGL_LARGEST_PBUFFER = 12376; // 0x3058
+    field public static final int EGL_LEVEL = 12329; // 0x3029
+    field public static final int EGL_LUMINANCE_BUFFER = 12431; // 0x308f
+    field public static final int EGL_LUMINANCE_SIZE = 12349; // 0x303d
+    field public static final int EGL_MAX_PBUFFER_HEIGHT = 12330; // 0x302a
+    field public static final int EGL_MAX_PBUFFER_PIXELS = 12331; // 0x302b
+    field public static final int EGL_MAX_PBUFFER_WIDTH = 12332; // 0x302c
+    field public static final int EGL_NATIVE_RENDERABLE = 12333; // 0x302d
+    field public static final int EGL_NATIVE_VISUAL_ID = 12334; // 0x302e
+    field public static final int EGL_NATIVE_VISUAL_TYPE = 12335; // 0x302f
+    field public static final int EGL_NONE = 12344; // 0x3038
+    field public static final int EGL_NON_CONFORMANT_CONFIG = 12369; // 0x3051
+    field public static final int EGL_NOT_INITIALIZED = 12289; // 0x3001
+    field public static final javax.microedition.khronos.egl.EGLContext EGL_NO_CONTEXT;
+    field public static final javax.microedition.khronos.egl.EGLDisplay EGL_NO_DISPLAY;
+    field public static final javax.microedition.khronos.egl.EGLSurface EGL_NO_SURFACE;
+    field public static final int EGL_PBUFFER_BIT = 1; // 0x1
+    field public static final int EGL_PIXEL_ASPECT_RATIO = 12434; // 0x3092
+    field public static final int EGL_PIXMAP_BIT = 2; // 0x2
+    field public static final int EGL_READ = 12378; // 0x305a
+    field public static final int EGL_RED_SIZE = 12324; // 0x3024
+    field public static final int EGL_RENDERABLE_TYPE = 12352; // 0x3040
+    field public static final int EGL_RENDER_BUFFER = 12422; // 0x3086
+    field public static final int EGL_RGB_BUFFER = 12430; // 0x308e
+    field public static final int EGL_SAMPLES = 12337; // 0x3031
+    field public static final int EGL_SAMPLE_BUFFERS = 12338; // 0x3032
+    field public static final int EGL_SINGLE_BUFFER = 12421; // 0x3085
+    field public static final int EGL_SLOW_CONFIG = 12368; // 0x3050
+    field public static final int EGL_STENCIL_SIZE = 12326; // 0x3026
+    field public static final int EGL_SUCCESS = 12288; // 0x3000
+    field public static final int EGL_SURFACE_TYPE = 12339; // 0x3033
+    field public static final int EGL_TRANSPARENT_BLUE_VALUE = 12341; // 0x3035
+    field public static final int EGL_TRANSPARENT_GREEN_VALUE = 12342; // 0x3036
+    field public static final int EGL_TRANSPARENT_RED_VALUE = 12343; // 0x3037
+    field public static final int EGL_TRANSPARENT_RGB = 12370; // 0x3052
+    field public static final int EGL_TRANSPARENT_TYPE = 12340; // 0x3034
+    field public static final int EGL_VENDOR = 12371; // 0x3053
+    field public static final int EGL_VERSION = 12372; // 0x3054
+    field public static final int EGL_VERTICAL_RESOLUTION = 12433; // 0x3091
+    field public static final int EGL_WIDTH = 12375; // 0x3057
+    field public static final int EGL_WINDOW_BIT = 4; // 0x4
+  }
+
+  public interface EGL11 extends javax.microedition.khronos.egl.EGL10 {
+    field public static final int EGL_CONTEXT_LOST = 12302; // 0x300e
+  }
+
+  public abstract class EGLConfig {
+    ctor public EGLConfig();
+  }
+
+  public abstract class EGLContext {
+    ctor public EGLContext();
+    method public static javax.microedition.khronos.egl.EGL getEGL();
+    method public abstract javax.microedition.khronos.opengles.GL getGL();
+  }
+
+  public abstract class EGLDisplay {
+    ctor public EGLDisplay();
+  }
+
+  public abstract class EGLSurface {
+    ctor public EGLSurface();
+  }
+
+}
+
+package javax.microedition.khronos.opengles {
+
+  public interface GL {
+  }
+
+  public interface GL10 extends javax.microedition.khronos.opengles.GL {
+    method public void glActiveTexture(int);
+    method public void glAlphaFunc(int, float);
+    method public void glAlphaFuncx(int, int);
+    method public void glBindTexture(int, int);
+    method public void glBlendFunc(int, int);
+    method public void glClear(int);
+    method public void glClearColor(float, float, float, float);
+    method public void glClearColorx(int, int, int, int);
+    method public void glClearDepthf(float);
+    method public void glClearDepthx(int);
+    method public void glClearStencil(int);
+    method public void glClientActiveTexture(int);
+    method public void glColor4f(float, float, float, float);
+    method public void glColor4x(int, int, int, int);
+    method public void glColorMask(boolean, boolean, boolean, boolean);
+    method public void glColorPointer(int, int, int, java.nio.Buffer);
+    method public void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public void glCopyTexSubImage2D(int, int, int, int, int, int, int, int);
+    method public void glCullFace(int);
+    method public void glDeleteTextures(int, int[], int);
+    method public void glDeleteTextures(int, java.nio.IntBuffer);
+    method public void glDepthFunc(int);
+    method public void glDepthMask(boolean);
+    method public void glDepthRangef(float, float);
+    method public void glDepthRangex(int, int);
+    method public void glDisable(int);
+    method public void glDisableClientState(int);
+    method public void glDrawArrays(int, int, int);
+    method public void glDrawElements(int, int, int, java.nio.Buffer);
+    method public void glEnable(int);
+    method public void glEnableClientState(int);
+    method public void glFinish();
+    method public void glFlush();
+    method public void glFogf(int, float);
+    method public void glFogfv(int, float[], int);
+    method public void glFogfv(int, java.nio.FloatBuffer);
+    method public void glFogx(int, int);
+    method public void glFogxv(int, int[], int);
+    method public void glFogxv(int, java.nio.IntBuffer);
+    method public void glFrontFace(int);
+    method public void glFrustumf(float, float, float, float, float, float);
+    method public void glFrustumx(int, int, int, int, int, int);
+    method public void glGenTextures(int, int[], int);
+    method public void glGenTextures(int, java.nio.IntBuffer);
+    method public int glGetError();
+    method public void glGetIntegerv(int, int[], int);
+    method public void glGetIntegerv(int, java.nio.IntBuffer);
+    method public String glGetString(int);
+    method public void glHint(int, int);
+    method public void glLightModelf(int, float);
+    method public void glLightModelfv(int, float[], int);
+    method public void glLightModelfv(int, java.nio.FloatBuffer);
+    method public void glLightModelx(int, int);
+    method public void glLightModelxv(int, int[], int);
+    method public void glLightModelxv(int, java.nio.IntBuffer);
+    method public void glLightf(int, int, float);
+    method public void glLightfv(int, int, float[], int);
+    method public void glLightfv(int, int, java.nio.FloatBuffer);
+    method public void glLightx(int, int, int);
+    method public void glLightxv(int, int, int[], int);
+    method public void glLightxv(int, int, java.nio.IntBuffer);
+    method public void glLineWidth(float);
+    method public void glLineWidthx(int);
+    method public void glLoadIdentity();
+    method public void glLoadMatrixf(float[], int);
+    method public void glLoadMatrixf(java.nio.FloatBuffer);
+    method public void glLoadMatrixx(int[], int);
+    method public void glLoadMatrixx(java.nio.IntBuffer);
+    method public void glLogicOp(int);
+    method public void glMaterialf(int, int, float);
+    method public void glMaterialfv(int, int, float[], int);
+    method public void glMaterialfv(int, int, java.nio.FloatBuffer);
+    method public void glMaterialx(int, int, int);
+    method public void glMaterialxv(int, int, int[], int);
+    method public void glMaterialxv(int, int, java.nio.IntBuffer);
+    method public void glMatrixMode(int);
+    method public void glMultMatrixf(float[], int);
+    method public void glMultMatrixf(java.nio.FloatBuffer);
+    method public void glMultMatrixx(int[], int);
+    method public void glMultMatrixx(java.nio.IntBuffer);
+    method public void glMultiTexCoord4f(int, float, float, float, float);
+    method public void glMultiTexCoord4x(int, int, int, int, int);
+    method public void glNormal3f(float, float, float);
+    method public void glNormal3x(int, int, int);
+    method public void glNormalPointer(int, int, java.nio.Buffer);
+    method public void glOrthof(float, float, float, float, float, float);
+    method public void glOrthox(int, int, int, int, int, int);
+    method public void glPixelStorei(int, int);
+    method public void glPointSize(float);
+    method public void glPointSizex(int);
+    method public void glPolygonOffset(float, float);
+    method public void glPolygonOffsetx(int, int);
+    method public void glPopMatrix();
+    method public void glPushMatrix();
+    method public void glReadPixels(int, int, int, int, int, int, java.nio.Buffer);
+    method public void glRotatef(float, float, float, float);
+    method public void glRotatex(int, int, int, int);
+    method public void glSampleCoverage(float, boolean);
+    method public void glSampleCoveragex(int, boolean);
+    method public void glScalef(float, float, float);
+    method public void glScalex(int, int, int);
+    method public void glScissor(int, int, int, int);
+    method public void glShadeModel(int);
+    method public void glStencilFunc(int, int, int);
+    method public void glStencilMask(int);
+    method public void glStencilOp(int, int, int);
+    method public void glTexCoordPointer(int, int, int, java.nio.Buffer);
+    method public void glTexEnvf(int, int, float);
+    method public void glTexEnvfv(int, int, float[], int);
+    method public void glTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public void glTexEnvx(int, int, int);
+    method public void glTexEnvxv(int, int, int[], int);
+    method public void glTexEnvxv(int, int, java.nio.IntBuffer);
+    method public void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glTexParameterf(int, int, float);
+    method public void glTexParameterx(int, int, int);
+    method public void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glTranslatef(float, float, float);
+    method public void glTranslatex(int, int, int);
+    method public void glVertexPointer(int, int, int, java.nio.Buffer);
+    method public void glViewport(int, int, int, int);
+    field public static final int GL_ADD = 260; // 0x104
+    field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e
+    field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d
+    field public static final int GL_ALPHA = 6406; // 0x1906
+    field public static final int GL_ALPHA_BITS = 3413; // 0xd55
+    field public static final int GL_ALPHA_TEST = 3008; // 0xbc0
+    field public static final int GL_ALWAYS = 519; // 0x207
+    field public static final int GL_AMBIENT = 4608; // 0x1200
+    field public static final int GL_AMBIENT_AND_DIFFUSE = 5634; // 0x1602
+    field public static final int GL_AND = 5377; // 0x1501
+    field public static final int GL_AND_INVERTED = 5380; // 0x1504
+    field public static final int GL_AND_REVERSE = 5378; // 0x1502
+    field public static final int GL_BACK = 1029; // 0x405
+    field public static final int GL_BLEND = 3042; // 0xbe2
+    field public static final int GL_BLUE_BITS = 3412; // 0xd54
+    field public static final int GL_BYTE = 5120; // 0x1400
+    field public static final int GL_CCW = 2305; // 0x901
+    field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f
+    field public static final int GL_CLEAR = 5376; // 0x1500
+    field public static final int GL_COLOR_ARRAY = 32886; // 0x8076
+    field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000
+    field public static final int GL_COLOR_LOGIC_OP = 3058; // 0xbf2
+    field public static final int GL_COLOR_MATERIAL = 2903; // 0xb57
+    field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3
+    field public static final int GL_CONSTANT_ATTENUATION = 4615; // 0x1207
+    field public static final int GL_COPY = 5379; // 0x1503
+    field public static final int GL_COPY_INVERTED = 5388; // 0x150c
+    field public static final int GL_CULL_FACE = 2884; // 0xb44
+    field public static final int GL_CW = 2304; // 0x900
+    field public static final int GL_DECAL = 8449; // 0x2101
+    field public static final int GL_DECR = 7683; // 0x1e03
+    field public static final int GL_DEPTH_BITS = 3414; // 0xd56
+    field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100
+    field public static final int GL_DEPTH_TEST = 2929; // 0xb71
+    field public static final int GL_DIFFUSE = 4609; // 0x1201
+    field public static final int GL_DITHER = 3024; // 0xbd0
+    field public static final int GL_DONT_CARE = 4352; // 0x1100
+    field public static final int GL_DST_ALPHA = 772; // 0x304
+    field public static final int GL_DST_COLOR = 774; // 0x306
+    field public static final int GL_EMISSION = 5632; // 0x1600
+    field public static final int GL_EQUAL = 514; // 0x202
+    field public static final int GL_EQUIV = 5385; // 0x1509
+    field public static final int GL_EXP = 2048; // 0x800
+    field public static final int GL_EXP2 = 2049; // 0x801
+    field public static final int GL_EXTENSIONS = 7939; // 0x1f03
+    field public static final int GL_FALSE = 0; // 0x0
+    field public static final int GL_FASTEST = 4353; // 0x1101
+    field public static final int GL_FIXED = 5132; // 0x140c
+    field public static final int GL_FLAT = 7424; // 0x1d00
+    field public static final int GL_FLOAT = 5126; // 0x1406
+    field public static final int GL_FOG = 2912; // 0xb60
+    field public static final int GL_FOG_COLOR = 2918; // 0xb66
+    field public static final int GL_FOG_DENSITY = 2914; // 0xb62
+    field public static final int GL_FOG_END = 2916; // 0xb64
+    field public static final int GL_FOG_HINT = 3156; // 0xc54
+    field public static final int GL_FOG_MODE = 2917; // 0xb65
+    field public static final int GL_FOG_START = 2915; // 0xb63
+    field public static final int GL_FRONT = 1028; // 0x404
+    field public static final int GL_FRONT_AND_BACK = 1032; // 0x408
+    field public static final int GL_GEQUAL = 518; // 0x206
+    field public static final int GL_GREATER = 516; // 0x204
+    field public static final int GL_GREEN_BITS = 3411; // 0xd53
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739; // 0x8b9b
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738; // 0x8b9a
+    field public static final int GL_INCR = 7682; // 0x1e02
+    field public static final int GL_INVALID_ENUM = 1280; // 0x500
+    field public static final int GL_INVALID_OPERATION = 1282; // 0x502
+    field public static final int GL_INVALID_VALUE = 1281; // 0x501
+    field public static final int GL_INVERT = 5386; // 0x150a
+    field public static final int GL_KEEP = 7680; // 0x1e00
+    field public static final int GL_LEQUAL = 515; // 0x203
+    field public static final int GL_LESS = 513; // 0x201
+    field public static final int GL_LIGHT0 = 16384; // 0x4000
+    field public static final int GL_LIGHT1 = 16385; // 0x4001
+    field public static final int GL_LIGHT2 = 16386; // 0x4002
+    field public static final int GL_LIGHT3 = 16387; // 0x4003
+    field public static final int GL_LIGHT4 = 16388; // 0x4004
+    field public static final int GL_LIGHT5 = 16389; // 0x4005
+    field public static final int GL_LIGHT6 = 16390; // 0x4006
+    field public static final int GL_LIGHT7 = 16391; // 0x4007
+    field public static final int GL_LIGHTING = 2896; // 0xb50
+    field public static final int GL_LIGHT_MODEL_AMBIENT = 2899; // 0xb53
+    field public static final int GL_LIGHT_MODEL_TWO_SIDE = 2898; // 0xb52
+    field public static final int GL_LINEAR = 9729; // 0x2601
+    field public static final int GL_LINEAR_ATTENUATION = 4616; // 0x1208
+    field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703
+    field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701
+    field public static final int GL_LINES = 1; // 0x1
+    field public static final int GL_LINE_LOOP = 2; // 0x2
+    field public static final int GL_LINE_SMOOTH = 2848; // 0xb20
+    field public static final int GL_LINE_SMOOTH_HINT = 3154; // 0xc52
+    field public static final int GL_LINE_STRIP = 3; // 0x3
+    field public static final int GL_LUMINANCE = 6409; // 0x1909
+    field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a
+    field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9
+    field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8
+    field public static final int GL_MAX_LIGHTS = 3377; // 0xd31
+    field public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 3382; // 0xd36
+    field public static final int GL_MAX_PROJECTION_STACK_DEPTH = 3384; // 0xd38
+    field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33
+    field public static final int GL_MAX_TEXTURE_STACK_DEPTH = 3385; // 0xd39
+    field public static final int GL_MAX_TEXTURE_UNITS = 34018; // 0x84e2
+    field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a
+    field public static final int GL_MODELVIEW = 5888; // 0x1700
+    field public static final int GL_MODULATE = 8448; // 0x2100
+    field public static final int GL_MULTISAMPLE = 32925; // 0x809d
+    field public static final int GL_NAND = 5390; // 0x150e
+    field public static final int GL_NEAREST = 9728; // 0x2600
+    field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702
+    field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700
+    field public static final int GL_NEVER = 512; // 0x200
+    field public static final int GL_NICEST = 4354; // 0x1102
+    field public static final int GL_NOOP = 5381; // 0x1505
+    field public static final int GL_NOR = 5384; // 0x1508
+    field public static final int GL_NORMALIZE = 2977; // 0xba1
+    field public static final int GL_NORMAL_ARRAY = 32885; // 0x8075
+    field public static final int GL_NOTEQUAL = 517; // 0x205
+    field public static final int GL_NO_ERROR = 0; // 0x0
+    field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2
+    field public static final int GL_ONE = 1; // 0x1
+    field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305
+    field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307
+    field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303
+    field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301
+    field public static final int GL_OR = 5383; // 0x1507
+    field public static final int GL_OR_INVERTED = 5389; // 0x150d
+    field public static final int GL_OR_REVERSE = 5387; // 0x150b
+    field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505
+    field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05
+    field public static final int GL_PALETTE4_R5_G6_B5_OES = 35730; // 0x8b92
+    field public static final int GL_PALETTE4_RGB5_A1_OES = 35732; // 0x8b94
+    field public static final int GL_PALETTE4_RGB8_OES = 35728; // 0x8b90
+    field public static final int GL_PALETTE4_RGBA4_OES = 35731; // 0x8b93
+    field public static final int GL_PALETTE4_RGBA8_OES = 35729; // 0x8b91
+    field public static final int GL_PALETTE8_R5_G6_B5_OES = 35735; // 0x8b97
+    field public static final int GL_PALETTE8_RGB5_A1_OES = 35737; // 0x8b99
+    field public static final int GL_PALETTE8_RGB8_OES = 35733; // 0x8b95
+    field public static final int GL_PALETTE8_RGBA4_OES = 35736; // 0x8b98
+    field public static final int GL_PALETTE8_RGBA8_OES = 35734; // 0x8b96
+    field public static final int GL_PERSPECTIVE_CORRECTION_HINT = 3152; // 0xc50
+    field public static final int GL_POINTS = 0; // 0x0
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SMOOTH = 2832; // 0xb10
+    field public static final int GL_POINT_SMOOTH_HINT = 3153; // 0xc51
+    field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037
+    field public static final int GL_POLYGON_SMOOTH_HINT = 3155; // 0xc53
+    field public static final int GL_POSITION = 4611; // 0x1203
+    field public static final int GL_PROJECTION = 5889; // 0x1701
+    field public static final int GL_QUADRATIC_ATTENUATION = 4617; // 0x1209
+    field public static final int GL_RED_BITS = 3410; // 0xd52
+    field public static final int GL_RENDERER = 7937; // 0x1f01
+    field public static final int GL_REPEAT = 10497; // 0x2901
+    field public static final int GL_REPLACE = 7681; // 0x1e01
+    field public static final int GL_RESCALE_NORMAL = 32826; // 0x803a
+    field public static final int GL_RGB = 6407; // 0x1907
+    field public static final int GL_RGBA = 6408; // 0x1908
+    field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e
+    field public static final int GL_SAMPLE_ALPHA_TO_ONE = 32927; // 0x809f
+    field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0
+    field public static final int GL_SCISSOR_TEST = 3089; // 0xc11
+    field public static final int GL_SET = 5391; // 0x150f
+    field public static final int GL_SHININESS = 5633; // 0x1601
+    field public static final int GL_SHORT = 5122; // 0x1402
+    field public static final int GL_SMOOTH = 7425; // 0x1d01
+    field public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 2850; // 0xb22
+    field public static final int GL_SMOOTH_POINT_SIZE_RANGE = 2834; // 0xb12
+    field public static final int GL_SPECULAR = 4610; // 0x1202
+    field public static final int GL_SPOT_CUTOFF = 4614; // 0x1206
+    field public static final int GL_SPOT_DIRECTION = 4612; // 0x1204
+    field public static final int GL_SPOT_EXPONENT = 4613; // 0x1205
+    field public static final int GL_SRC_ALPHA = 770; // 0x302
+    field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308
+    field public static final int GL_SRC_COLOR = 768; // 0x300
+    field public static final int GL_STACK_OVERFLOW = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504
+    field public static final int GL_STENCIL_BITS = 3415; // 0xd57
+    field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400
+    field public static final int GL_STENCIL_TEST = 2960; // 0xb90
+    field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50
+    field public static final int GL_TEXTURE = 5890; // 0x1702
+    field public static final int GL_TEXTURE0 = 33984; // 0x84c0
+    field public static final int GL_TEXTURE1 = 33985; // 0x84c1
+    field public static final int GL_TEXTURE10 = 33994; // 0x84ca
+    field public static final int GL_TEXTURE11 = 33995; // 0x84cb
+    field public static final int GL_TEXTURE12 = 33996; // 0x84cc
+    field public static final int GL_TEXTURE13 = 33997; // 0x84cd
+    field public static final int GL_TEXTURE14 = 33998; // 0x84ce
+    field public static final int GL_TEXTURE15 = 33999; // 0x84cf
+    field public static final int GL_TEXTURE16 = 34000; // 0x84d0
+    field public static final int GL_TEXTURE17 = 34001; // 0x84d1
+    field public static final int GL_TEXTURE18 = 34002; // 0x84d2
+    field public static final int GL_TEXTURE19 = 34003; // 0x84d3
+    field public static final int GL_TEXTURE2 = 33986; // 0x84c2
+    field public static final int GL_TEXTURE20 = 34004; // 0x84d4
+    field public static final int GL_TEXTURE21 = 34005; // 0x84d5
+    field public static final int GL_TEXTURE22 = 34006; // 0x84d6
+    field public static final int GL_TEXTURE23 = 34007; // 0x84d7
+    field public static final int GL_TEXTURE24 = 34008; // 0x84d8
+    field public static final int GL_TEXTURE25 = 34009; // 0x84d9
+    field public static final int GL_TEXTURE26 = 34010; // 0x84da
+    field public static final int GL_TEXTURE27 = 34011; // 0x84db
+    field public static final int GL_TEXTURE28 = 34012; // 0x84dc
+    field public static final int GL_TEXTURE29 = 34013; // 0x84dd
+    field public static final int GL_TEXTURE3 = 33987; // 0x84c3
+    field public static final int GL_TEXTURE30 = 34014; // 0x84de
+    field public static final int GL_TEXTURE31 = 34015; // 0x84df
+    field public static final int GL_TEXTURE4 = 33988; // 0x84c4
+    field public static final int GL_TEXTURE5 = 33989; // 0x84c5
+    field public static final int GL_TEXTURE6 = 33990; // 0x84c6
+    field public static final int GL_TEXTURE7 = 33991; // 0x84c7
+    field public static final int GL_TEXTURE8 = 33992; // 0x84c8
+    field public static final int GL_TEXTURE9 = 33993; // 0x84c9
+    field public static final int GL_TEXTURE_2D = 3553; // 0xde1
+    field public static final int GL_TEXTURE_COORD_ARRAY = 32888; // 0x8078
+    field public static final int GL_TEXTURE_ENV = 8960; // 0x2300
+    field public static final int GL_TEXTURE_ENV_COLOR = 8705; // 0x2201
+    field public static final int GL_TEXTURE_ENV_MODE = 8704; // 0x2200
+    field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800
+    field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801
+    field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802
+    field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803
+    field public static final int GL_TRIANGLES = 4; // 0x4
+    field public static final int GL_TRIANGLE_FAN = 6; // 0x6
+    field public static final int GL_TRIANGLE_STRIP = 5; // 0x5
+    field public static final int GL_TRUE = 1; // 0x1
+    field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5
+    field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401
+    field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403
+    field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033
+    field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034
+    field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363
+    field public static final int GL_VENDOR = 7936; // 0x1f00
+    field public static final int GL_VERSION = 7938; // 0x1f02
+    field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074
+    field public static final int GL_XOR = 5382; // 0x1506
+    field public static final int GL_ZERO = 0; // 0x0
+  }
+
+  public interface GL10Ext extends javax.microedition.khronos.opengles.GL {
+    method public int glQueryMatrixxOES(int[], int, int[], int);
+    method public int glQueryMatrixxOES(java.nio.IntBuffer, java.nio.IntBuffer);
+  }
+
+  public interface GL11 extends javax.microedition.khronos.opengles.GL10 {
+    method public void glBindBuffer(int, int);
+    method public void glBufferData(int, int, java.nio.Buffer, int);
+    method public void glBufferSubData(int, int, int, java.nio.Buffer);
+    method public void glClipPlanef(int, float[], int);
+    method public void glClipPlanef(int, java.nio.FloatBuffer);
+    method public void glClipPlanex(int, int[], int);
+    method public void glClipPlanex(int, java.nio.IntBuffer);
+    method public void glColor4ub(byte, byte, byte, byte);
+    method public void glColorPointer(int, int, int, int);
+    method public void glDeleteBuffers(int, int[], int);
+    method public void glDeleteBuffers(int, java.nio.IntBuffer);
+    method public void glDrawElements(int, int, int, int);
+    method public void glGenBuffers(int, int[], int);
+    method public void glGenBuffers(int, java.nio.IntBuffer);
+    method public void glGetBooleanv(int, boolean[], int);
+    method public void glGetBooleanv(int, java.nio.IntBuffer);
+    method public void glGetBufferParameteriv(int, int, int[], int);
+    method public void glGetBufferParameteriv(int, int, java.nio.IntBuffer);
+    method public void glGetClipPlanef(int, float[], int);
+    method public void glGetClipPlanef(int, java.nio.FloatBuffer);
+    method public void glGetClipPlanex(int, int[], int);
+    method public void glGetClipPlanex(int, java.nio.IntBuffer);
+    method public void glGetFixedv(int, int[], int);
+    method public void glGetFixedv(int, java.nio.IntBuffer);
+    method public void glGetFloatv(int, float[], int);
+    method public void glGetFloatv(int, java.nio.FloatBuffer);
+    method public void glGetLightfv(int, int, float[], int);
+    method public void glGetLightfv(int, int, java.nio.FloatBuffer);
+    method public void glGetLightxv(int, int, int[], int);
+    method public void glGetLightxv(int, int, java.nio.IntBuffer);
+    method public void glGetMaterialfv(int, int, float[], int);
+    method public void glGetMaterialfv(int, int, java.nio.FloatBuffer);
+    method public void glGetMaterialxv(int, int, int[], int);
+    method public void glGetMaterialxv(int, int, java.nio.IntBuffer);
+    method public void glGetPointerv(int, java.nio.Buffer[]);
+    method public void glGetTexEnviv(int, int, int[], int);
+    method public void glGetTexEnviv(int, int, java.nio.IntBuffer);
+    method public void glGetTexEnvxv(int, int, int[], int);
+    method public void glGetTexEnvxv(int, int, java.nio.IntBuffer);
+    method public void glGetTexParameterfv(int, int, float[], int);
+    method public void glGetTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public void glGetTexParameteriv(int, int, int[], int);
+    method public void glGetTexParameteriv(int, int, java.nio.IntBuffer);
+    method public void glGetTexParameterxv(int, int, int[], int);
+    method public void glGetTexParameterxv(int, int, java.nio.IntBuffer);
+    method public boolean glIsBuffer(int);
+    method public boolean glIsEnabled(int);
+    method public boolean glIsTexture(int);
+    method public void glNormalPointer(int, int, int);
+    method public void glPointParameterf(int, float);
+    method public void glPointParameterfv(int, float[], int);
+    method public void glPointParameterfv(int, java.nio.FloatBuffer);
+    method public void glPointParameterx(int, int);
+    method public void glPointParameterxv(int, int[], int);
+    method public void glPointParameterxv(int, java.nio.IntBuffer);
+    method public void glPointSizePointerOES(int, int, java.nio.Buffer);
+    method public void glTexCoordPointer(int, int, int, int);
+    method public void glTexEnvi(int, int, int);
+    method public void glTexEnviv(int, int, int[], int);
+    method public void glTexEnviv(int, int, java.nio.IntBuffer);
+    method public void glTexParameterfv(int, int, float[], int);
+    method public void glTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public void glTexParameteri(int, int, int);
+    method public void glTexParameteriv(int, int, int[], int);
+    method public void glTexParameteriv(int, int, java.nio.IntBuffer);
+    method public void glTexParameterxv(int, int, int[], int);
+    method public void glTexParameterxv(int, int, java.nio.IntBuffer);
+    method public void glVertexPointer(int, int, int, int);
+    field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0
+    field public static final int GL_ADD_SIGNED = 34164; // 0x8574
+    field public static final int GL_ALPHA_SCALE = 3356; // 0xd1c
+    field public static final int GL_ALPHA_TEST_FUNC = 3009; // 0xbc1
+    field public static final int GL_ALPHA_TEST_REF = 3010; // 0xbc2
+    field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892
+    field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894
+    field public static final int GL_BLEND_DST = 3040; // 0xbe0
+    field public static final int GL_BLEND_SRC = 3041; // 0xbe1
+    field public static final int GL_BUFFER_ACCESS = 35003; // 0x88bb
+    field public static final int GL_BUFFER_SIZE = 34660; // 0x8764
+    field public static final int GL_BUFFER_USAGE = 34661; // 0x8765
+    field public static final int GL_CLIENT_ACTIVE_TEXTURE = 34017; // 0x84e1
+    field public static final int GL_CLIP_PLANE0 = 12288; // 0x3000
+    field public static final int GL_CLIP_PLANE1 = 12289; // 0x3001
+    field public static final int GL_CLIP_PLANE2 = 12290; // 0x3002
+    field public static final int GL_CLIP_PLANE3 = 12291; // 0x3003
+    field public static final int GL_CLIP_PLANE4 = 12292; // 0x3004
+    field public static final int GL_CLIP_PLANE5 = 12293; // 0x3005
+    field public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 34968; // 0x8898
+    field public static final int GL_COLOR_ARRAY_POINTER = 32912; // 0x8090
+    field public static final int GL_COLOR_ARRAY_SIZE = 32897; // 0x8081
+    field public static final int GL_COLOR_ARRAY_STRIDE = 32899; // 0x8083
+    field public static final int GL_COLOR_ARRAY_TYPE = 32898; // 0x8082
+    field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22
+    field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23
+    field public static final int GL_COMBINE = 34160; // 0x8570
+    field public static final int GL_COMBINE_ALPHA = 34162; // 0x8572
+    field public static final int GL_COMBINE_RGB = 34161; // 0x8571
+    field public static final int GL_CONSTANT = 34166; // 0x8576
+    field public static final int GL_COORD_REPLACE_OES = 34914; // 0x8862
+    field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45
+    field public static final int GL_CURRENT_COLOR = 2816; // 0xb00
+    field public static final int GL_CURRENT_NORMAL = 2818; // 0xb02
+    field public static final int GL_CURRENT_TEXTURE_COORDS = 2819; // 0xb03
+    field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73
+    field public static final int GL_DEPTH_FUNC = 2932; // 0xb74
+    field public static final int GL_DEPTH_RANGE = 2928; // 0xb70
+    field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72
+    field public static final int GL_DOT3_RGB = 34478; // 0x86ae
+    field public static final int GL_DOT3_RGBA = 34479; // 0x86af
+    field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8
+    field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893
+    field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895
+    field public static final int GL_FRONT_FACE = 2886; // 0xb46
+    field public static final int GL_GENERATE_MIPMAP = 33169; // 0x8191
+    field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192
+    field public static final int GL_INTERPOLATE = 34165; // 0x8575
+    field public static final int GL_LINE_WIDTH = 2849; // 0xb21
+    field public static final int GL_LOGIC_OP_MODE = 3056; // 0xbf0
+    field public static final int GL_MATRIX_MODE = 2976; // 0xba0
+    field public static final int GL_MAX_CLIP_PLANES = 3378; // 0xd32
+    field public static final int GL_MODELVIEW_MATRIX = 2982; // 0xba6
+    field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d
+    field public static final int GL_MODELVIEW_STACK_DEPTH = 2979; // 0xba3
+    field public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 34967; // 0x8897
+    field public static final int GL_NORMAL_ARRAY_POINTER = 32911; // 0x808f
+    field public static final int GL_NORMAL_ARRAY_STRIDE = 32895; // 0x807f
+    field public static final int GL_NORMAL_ARRAY_TYPE = 32894; // 0x807e
+    field public static final int GL_OPERAND0_ALPHA = 34200; // 0x8598
+    field public static final int GL_OPERAND0_RGB = 34192; // 0x8590
+    field public static final int GL_OPERAND1_ALPHA = 34201; // 0x8599
+    field public static final int GL_OPERAND1_RGB = 34193; // 0x8591
+    field public static final int GL_OPERAND2_ALPHA = 34202; // 0x859a
+    field public static final int GL_OPERAND2_RGB = 34194; // 0x8592
+    field public static final int GL_POINT_DISTANCE_ATTENUATION = 33065; // 0x8129
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 35743; // 0x8b9f
+    field public static final int GL_POINT_SIZE_ARRAY_OES = 35740; // 0x8b9c
+    field public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 35212; // 0x898c
+    field public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 35211; // 0x898b
+    field public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 35210; // 0x898a
+    field public static final int GL_POINT_SIZE_MAX = 33063; // 0x8127
+    field public static final int GL_POINT_SIZE_MIN = 33062; // 0x8126
+    field public static final int GL_POINT_SPRITE_OES = 34913; // 0x8861
+    field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038
+    field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00
+    field public static final int GL_PREVIOUS = 34168; // 0x8578
+    field public static final int GL_PRIMARY_COLOR = 34167; // 0x8577
+    field public static final int GL_PROJECTION_MATRIX = 2983; // 0xba7
+    field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e
+    field public static final int GL_PROJECTION_STACK_DEPTH = 2980; // 0xba4
+    field public static final int GL_RGB_SCALE = 34163; // 0x8573
+    field public static final int GL_SAMPLES = 32937; // 0x80a9
+    field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8
+    field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab
+    field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa
+    field public static final int GL_SCISSOR_BOX = 3088; // 0xc10
+    field public static final int GL_SHADE_MODEL = 2900; // 0xb54
+    field public static final int GL_SRC0_ALPHA = 34184; // 0x8588
+    field public static final int GL_SRC0_RGB = 34176; // 0x8580
+    field public static final int GL_SRC1_ALPHA = 34185; // 0x8589
+    field public static final int GL_SRC1_RGB = 34177; // 0x8581
+    field public static final int GL_SRC2_ALPHA = 34186; // 0x858a
+    field public static final int GL_SRC2_RGB = 34178; // 0x8582
+    field public static final int GL_STATIC_DRAW = 35044; // 0x88e4
+    field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91
+    field public static final int GL_STENCIL_FAIL = 2964; // 0xb94
+    field public static final int GL_STENCIL_FUNC = 2962; // 0xb92
+    field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95
+    field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96
+    field public static final int GL_STENCIL_REF = 2967; // 0xb97
+    field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93
+    field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98
+    field public static final int GL_SUBTRACT = 34023; // 0x84e7
+    field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069
+    field public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970; // 0x889a
+    field public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 32914; // 0x8092
+    field public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 32904; // 0x8088
+    field public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 32906; // 0x808a
+    field public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 32905; // 0x8089
+    field public static final int GL_TEXTURE_MATRIX = 2984; // 0xba8
+    field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f
+    field public static final int GL_TEXTURE_STACK_DEPTH = 2981; // 0xba5
+    field public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 34966; // 0x8896
+    field public static final int GL_VERTEX_ARRAY_POINTER = 32910; // 0x808e
+    field public static final int GL_VERTEX_ARRAY_SIZE = 32890; // 0x807a
+    field public static final int GL_VERTEX_ARRAY_STRIDE = 32892; // 0x807c
+    field public static final int GL_VERTEX_ARRAY_TYPE = 32891; // 0x807b
+    field public static final int GL_VIEWPORT = 2978; // 0xba2
+    field public static final int GL_WRITE_ONLY = 35001; // 0x88b9
+  }
+
+  public interface GL11Ext extends javax.microedition.khronos.opengles.GL {
+    method public void glCurrentPaletteMatrixOES(int);
+    method public void glDrawTexfOES(float, float, float, float, float);
+    method public void glDrawTexfvOES(float[], int);
+    method public void glDrawTexfvOES(java.nio.FloatBuffer);
+    method public void glDrawTexiOES(int, int, int, int, int);
+    method public void glDrawTexivOES(int[], int);
+    method public void glDrawTexivOES(java.nio.IntBuffer);
+    method public void glDrawTexsOES(short, short, short, short, short);
+    method public void glDrawTexsvOES(short[], int);
+    method public void glDrawTexsvOES(java.nio.ShortBuffer);
+    method public void glDrawTexxOES(int, int, int, int, int);
+    method public void glDrawTexxvOES(int[], int);
+    method public void glDrawTexxvOES(java.nio.IntBuffer);
+    method public void glEnable(int);
+    method public void glEnableClientState(int);
+    method public void glLoadPaletteFromModelViewMatrixOES();
+    method public void glMatrixIndexPointerOES(int, int, int, java.nio.Buffer);
+    method public void glMatrixIndexPointerOES(int, int, int, int);
+    method public void glTexParameterfv(int, int, float[], int);
+    method public void glWeightPointerOES(int, int, int, java.nio.Buffer);
+    method public void glWeightPointerOES(int, int, int, int);
+    field public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 35742; // 0x8b9e
+    field public static final int GL_MATRIX_INDEX_ARRAY_OES = 34884; // 0x8844
+    field public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 34889; // 0x8849
+    field public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 34886; // 0x8846
+    field public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 34888; // 0x8848
+    field public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 34887; // 0x8847
+    field public static final int GL_MATRIX_PALETTE_OES = 34880; // 0x8840
+    field public static final int GL_MAX_PALETTE_MATRICES_OES = 34882; // 0x8842
+    field public static final int GL_MAX_VERTEX_UNITS_OES = 34468; // 0x86a4
+    field public static final int GL_TEXTURE_CROP_RECT_OES = 35741; // 0x8b9d
+    field public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 34974; // 0x889e
+    field public static final int GL_WEIGHT_ARRAY_OES = 34477; // 0x86ad
+    field public static final int GL_WEIGHT_ARRAY_POINTER_OES = 34476; // 0x86ac
+    field public static final int GL_WEIGHT_ARRAY_SIZE_OES = 34475; // 0x86ab
+    field public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 34474; // 0x86aa
+    field public static final int GL_WEIGHT_ARRAY_TYPE_OES = 34473; // 0x86a9
+  }
+
+  public interface GL11ExtensionPack extends javax.microedition.khronos.opengles.GL {
+    method public void glBindFramebufferOES(int, int);
+    method public void glBindRenderbufferOES(int, int);
+    method public void glBindTexture(int, int);
+    method public void glBlendEquation(int);
+    method public void glBlendEquationSeparate(int, int);
+    method public void glBlendFuncSeparate(int, int, int, int);
+    method public int glCheckFramebufferStatusOES(int);
+    method public void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public void glDeleteFramebuffersOES(int, int[], int);
+    method public void glDeleteFramebuffersOES(int, java.nio.IntBuffer);
+    method public void glDeleteRenderbuffersOES(int, int[], int);
+    method public void glDeleteRenderbuffersOES(int, java.nio.IntBuffer);
+    method public void glEnable(int);
+    method public void glFramebufferRenderbufferOES(int, int, int, int);
+    method public void glFramebufferTexture2DOES(int, int, int, int, int);
+    method public void glGenFramebuffersOES(int, int[], int);
+    method public void glGenFramebuffersOES(int, java.nio.IntBuffer);
+    method public void glGenRenderbuffersOES(int, int[], int);
+    method public void glGenRenderbuffersOES(int, java.nio.IntBuffer);
+    method public void glGenerateMipmapOES(int);
+    method public void glGetFramebufferAttachmentParameterivOES(int, int, int, int[], int);
+    method public void glGetFramebufferAttachmentParameterivOES(int, int, int, java.nio.IntBuffer);
+    method public void glGetIntegerv(int, int[], int);
+    method public void glGetIntegerv(int, java.nio.IntBuffer);
+    method public void glGetRenderbufferParameterivOES(int, int, int[], int);
+    method public void glGetRenderbufferParameterivOES(int, int, java.nio.IntBuffer);
+    method public void glGetTexGenfv(int, int, float[], int);
+    method public void glGetTexGenfv(int, int, java.nio.FloatBuffer);
+    method public void glGetTexGeniv(int, int, int[], int);
+    method public void glGetTexGeniv(int, int, java.nio.IntBuffer);
+    method public void glGetTexGenxv(int, int, int[], int);
+    method public void glGetTexGenxv(int, int, java.nio.IntBuffer);
+    method public boolean glIsFramebufferOES(int);
+    method public boolean glIsRenderbufferOES(int);
+    method public void glRenderbufferStorageOES(int, int, int, int);
+    method public void glStencilOp(int, int, int);
+    method public void glTexEnvf(int, int, float);
+    method public void glTexEnvfv(int, int, float[], int);
+    method public void glTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public void glTexEnvx(int, int, int);
+    method public void glTexEnvxv(int, int, int[], int);
+    method public void glTexEnvxv(int, int, java.nio.IntBuffer);
+    method public void glTexGenf(int, int, float);
+    method public void glTexGenfv(int, int, float[], int);
+    method public void glTexGenfv(int, int, java.nio.FloatBuffer);
+    method public void glTexGeni(int, int, int);
+    method public void glTexGeniv(int, int, int[], int);
+    method public void glTexGeniv(int, int, java.nio.IntBuffer);
+    method public void glTexGenx(int, int, int);
+    method public void glTexGenxv(int, int, int[], int);
+    method public void glTexGenxv(int, int, java.nio.IntBuffer);
+    method public void glTexParameterf(int, int, float);
+    field public static final int GL_BLEND_DST_ALPHA = 32970; // 0x80ca
+    field public static final int GL_BLEND_DST_RGB = 32968; // 0x80c8
+    field public static final int GL_BLEND_EQUATION = 32777; // 0x8009
+    field public static final int GL_BLEND_EQUATION_ALPHA = 34877; // 0x883d
+    field public static final int GL_BLEND_EQUATION_RGB = 32777; // 0x8009
+    field public static final int GL_BLEND_SRC_ALPHA = 32971; // 0x80cb
+    field public static final int GL_BLEND_SRC_RGB = 32969; // 0x80c9
+    field public static final int GL_COLOR_ATTACHMENT0_OES = 36064; // 0x8ce0
+    field public static final int GL_COLOR_ATTACHMENT10_OES = 36074; // 0x8cea
+    field public static final int GL_COLOR_ATTACHMENT11_OES = 36075; // 0x8ceb
+    field public static final int GL_COLOR_ATTACHMENT12_OES = 36076; // 0x8cec
+    field public static final int GL_COLOR_ATTACHMENT13_OES = 36077; // 0x8ced
+    field public static final int GL_COLOR_ATTACHMENT14_OES = 36078; // 0x8cee
+    field public static final int GL_COLOR_ATTACHMENT15_OES = 36079; // 0x8cef
+    field public static final int GL_COLOR_ATTACHMENT1_OES = 36065; // 0x8ce1
+    field public static final int GL_COLOR_ATTACHMENT2_OES = 36066; // 0x8ce2
+    field public static final int GL_COLOR_ATTACHMENT3_OES = 36067; // 0x8ce3
+    field public static final int GL_COLOR_ATTACHMENT4_OES = 36068; // 0x8ce4
+    field public static final int GL_COLOR_ATTACHMENT5_OES = 36069; // 0x8ce5
+    field public static final int GL_COLOR_ATTACHMENT6_OES = 36070; // 0x8ce6
+    field public static final int GL_COLOR_ATTACHMENT7_OES = 36071; // 0x8ce7
+    field public static final int GL_COLOR_ATTACHMENT8_OES = 36072; // 0x8ce8
+    field public static final int GL_COLOR_ATTACHMENT9_OES = 36073; // 0x8ce9
+    field public static final int GL_DECR_WRAP = 34056; // 0x8508
+    field public static final int GL_DEPTH_ATTACHMENT_OES = 36096; // 0x8d00
+    field public static final int GL_DEPTH_COMPONENT = 6402; // 0x1902
+    field public static final int GL_DEPTH_COMPONENT16 = 33189; // 0x81a5
+    field public static final int GL_DEPTH_COMPONENT24 = 33190; // 0x81a6
+    field public static final int GL_DEPTH_COMPONENT32 = 33191; // 0x81a7
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 36049; // 0x8cd1
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 36048; // 0x8cd0
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 36051; // 0x8cd3
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 36050; // 0x8cd2
+    field public static final int GL_FRAMEBUFFER_BINDING_OES = 36006; // 0x8ca6
+    field public static final int GL_FRAMEBUFFER_COMPLETE_OES = 36053; // 0x8cd5
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 36054; // 0x8cd6
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 36057; // 0x8cd9
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES = 36059; // 0x8cdb
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 36058; // 0x8cda
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 36055; // 0x8cd7
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES = 36060; // 0x8cdc
+    field public static final int GL_FRAMEBUFFER_OES = 36160; // 0x8d40
+    field public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 36061; // 0x8cdd
+    field public static final int GL_FUNC_ADD = 32774; // 0x8006
+    field public static final int GL_FUNC_REVERSE_SUBTRACT = 32779; // 0x800b
+    field public static final int GL_FUNC_SUBTRACT = 32778; // 0x800a
+    field public static final int GL_INCR_WRAP = 34055; // 0x8507
+    field public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 1286; // 0x506
+    field public static final int GL_MAX_COLOR_ATTACHMENTS_OES = 36063; // 0x8cdf
+    field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076; // 0x851c
+    field public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 34024; // 0x84e8
+    field public static final int GL_MIRRORED_REPEAT = 33648; // 0x8370
+    field public static final int GL_NORMAL_MAP = 34065; // 0x8511
+    field public static final int GL_REFLECTION_MAP = 34066; // 0x8512
+    field public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 36179; // 0x8d53
+    field public static final int GL_RENDERBUFFER_BINDING_OES = 36007; // 0x8ca7
+    field public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 36178; // 0x8d52
+    field public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 36180; // 0x8d54
+    field public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 36177; // 0x8d51
+    field public static final int GL_RENDERBUFFER_HEIGHT_OES = 36163; // 0x8d43
+    field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 36164; // 0x8d44
+    field public static final int GL_RENDERBUFFER_OES = 36161; // 0x8d41
+    field public static final int GL_RENDERBUFFER_RED_SIZE_OES = 36176; // 0x8d50
+    field public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 36181; // 0x8d55
+    field public static final int GL_RENDERBUFFER_WIDTH_OES = 36162; // 0x8d42
+    field public static final int GL_RGB565_OES = 36194; // 0x8d62
+    field public static final int GL_RGB5_A1 = 32855; // 0x8057
+    field public static final int GL_RGB8 = 32849; // 0x8051
+    field public static final int GL_RGBA4 = 32854; // 0x8056
+    field public static final int GL_RGBA8 = 32856; // 0x8058
+    field public static final int GL_STENCIL_ATTACHMENT_OES = 36128; // 0x8d20
+    field public static final int GL_STENCIL_INDEX = 6401; // 0x1901
+    field public static final int GL_STENCIL_INDEX1_OES = 36166; // 0x8d46
+    field public static final int GL_STENCIL_INDEX4_OES = 36167; // 0x8d47
+    field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48
+    field public static final int GL_STR = -1; // 0xffffffff
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP = 34068; // 0x8514
+    field public static final int GL_TEXTURE_CUBE_MAP = 34067; // 0x8513
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070; // 0x8516
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072; // 0x8518
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074; // 0x851a
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069; // 0x8515
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071; // 0x8517
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073; // 0x8519
+    field public static final int GL_TEXTURE_GEN_MODE = 9472; // 0x2500
+    field public static final int GL_TEXTURE_GEN_STR = 36192; // 0x8d60
+  }
+
+}
+
+package org.apache.http.conn {
+
+  @Deprecated public class ConnectTimeoutException extends java.io.InterruptedIOException {
+    ctor @Deprecated public ConnectTimeoutException();
+    ctor @Deprecated public ConnectTimeoutException(String);
+  }
+
+}
+
+package org.apache.http.conn.scheme {
+
+  @Deprecated public interface HostNameResolver {
+    method @Deprecated public java.net.InetAddress resolve(String) throws java.io.IOException;
+  }
+
+  @Deprecated public interface LayeredSocketFactory extends org.apache.http.conn.scheme.SocketFactory {
+    method @Deprecated public java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException, java.net.UnknownHostException;
+  }
+
+  @Deprecated public interface SocketFactory {
+    method @Deprecated public java.net.Socket connectSocket(java.net.Socket, String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws org.apache.http.conn.ConnectTimeoutException, java.io.IOException, java.net.UnknownHostException;
+    method @Deprecated public java.net.Socket createSocket() throws java.io.IOException;
+    method @Deprecated public boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException;
+  }
+
+}
+
+package org.apache.http.conn.ssl {
+
+  @Deprecated public abstract class AbstractVerifier implements org.apache.http.conn.ssl.X509HostnameVerifier {
+    ctor @Deprecated public AbstractVerifier();
+    method @Deprecated public static boolean acceptableCountryWildcard(String);
+    method @Deprecated public static int countDots(String);
+    method @Deprecated public static String[] getCNs(java.security.cert.X509Certificate);
+    method @Deprecated public static String[] getDNSSubjectAlts(java.security.cert.X509Certificate);
+    method @Deprecated public final void verify(String, javax.net.ssl.SSLSocket) throws java.io.IOException;
+    method @Deprecated public final boolean verify(String, javax.net.ssl.SSLSession);
+    method @Deprecated public final void verify(String, java.security.cert.X509Certificate) throws javax.net.ssl.SSLException;
+    method @Deprecated public final void verify(String, String[], String[], boolean) throws javax.net.ssl.SSLException;
+  }
+
+  @Deprecated public class AllowAllHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier {
+    ctor @Deprecated public AllowAllHostnameVerifier();
+    method @Deprecated public final String toString();
+    method @Deprecated public final void verify(String, String[], String[]);
+  }
+
+  @Deprecated public class BrowserCompatHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier {
+    ctor @Deprecated public BrowserCompatHostnameVerifier();
+    method @Deprecated public final String toString();
+    method @Deprecated public final void verify(String, String[], String[]) throws javax.net.ssl.SSLException;
+  }
+
+  @Deprecated public class SSLSocketFactory implements org.apache.http.conn.scheme.LayeredSocketFactory {
+    ctor @Deprecated public SSLSocketFactory(String, java.security.KeyStore, String, java.security.KeyStore, java.security.SecureRandom, org.apache.http.conn.scheme.HostNameResolver) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    ctor @Deprecated public SSLSocketFactory(java.security.KeyStore, String, java.security.KeyStore) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    ctor @Deprecated public SSLSocketFactory(java.security.KeyStore, String) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    ctor @Deprecated public SSLSocketFactory(java.security.KeyStore) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method @Deprecated public java.net.Socket connectSocket(java.net.Socket, String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket() throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException, java.net.UnknownHostException;
+    method @Deprecated public org.apache.http.conn.ssl.X509HostnameVerifier getHostnameVerifier();
+    method @Deprecated public static org.apache.http.conn.ssl.SSLSocketFactory getSocketFactory();
+    method @Deprecated public boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException;
+    method @Deprecated public void setHostnameVerifier(org.apache.http.conn.ssl.X509HostnameVerifier);
+    field @Deprecated public static final org.apache.http.conn.ssl.X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER;
+    field @Deprecated public static final org.apache.http.conn.ssl.X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
+    field @Deprecated public static final String SSL = "SSL";
+    field @Deprecated public static final String SSLV2 = "SSLv2";
+    field @Deprecated public static final org.apache.http.conn.ssl.X509HostnameVerifier STRICT_HOSTNAME_VERIFIER;
+    field @Deprecated public static final String TLS = "TLS";
+  }
+
+  @Deprecated public class StrictHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier {
+    ctor @Deprecated public StrictHostnameVerifier();
+    method @Deprecated public final String toString();
+    method @Deprecated public final void verify(String, String[], String[]) throws javax.net.ssl.SSLException;
+  }
+
+  @Deprecated public interface X509HostnameVerifier extends javax.net.ssl.HostnameVerifier {
+    method @Deprecated public void verify(String, javax.net.ssl.SSLSocket) throws java.io.IOException;
+    method @Deprecated public void verify(String, java.security.cert.X509Certificate) throws javax.net.ssl.SSLException;
+    method @Deprecated public void verify(String, String[], String[]) throws javax.net.ssl.SSLException;
+  }
+
+}
+
+package org.apache.http.params {
+
+  @Deprecated public interface CoreConnectionPNames {
+    field @Deprecated public static final String CONNECTION_TIMEOUT = "http.connection.timeout";
+    field @Deprecated public static final String MAX_HEADER_COUNT = "http.connection.max-header-count";
+    field @Deprecated public static final String MAX_LINE_LENGTH = "http.connection.max-line-length";
+    field @Deprecated public static final String SOCKET_BUFFER_SIZE = "http.socket.buffer-size";
+    field @Deprecated public static final String SO_LINGER = "http.socket.linger";
+    field @Deprecated public static final String SO_TIMEOUT = "http.socket.timeout";
+    field @Deprecated public static final String STALE_CONNECTION_CHECK = "http.connection.stalecheck";
+    field @Deprecated public static final String TCP_NODELAY = "http.tcp.nodelay";
+  }
+
+  @Deprecated public final class HttpConnectionParams implements org.apache.http.params.CoreConnectionPNames {
+    method @Deprecated public static int getConnectionTimeout(org.apache.http.params.HttpParams);
+    method @Deprecated public static int getLinger(org.apache.http.params.HttpParams);
+    method @Deprecated public static int getSoTimeout(org.apache.http.params.HttpParams);
+    method @Deprecated public static int getSocketBufferSize(org.apache.http.params.HttpParams);
+    method @Deprecated public static boolean getTcpNoDelay(org.apache.http.params.HttpParams);
+    method @Deprecated public static boolean isStaleCheckingEnabled(org.apache.http.params.HttpParams);
+    method @Deprecated public static void setConnectionTimeout(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setLinger(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setSoTimeout(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setSocketBufferSize(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setStaleCheckingEnabled(org.apache.http.params.HttpParams, boolean);
+    method @Deprecated public static void setTcpNoDelay(org.apache.http.params.HttpParams, boolean);
+  }
+
+  @Deprecated public interface HttpParams {
+    method @Deprecated public org.apache.http.params.HttpParams copy();
+    method @Deprecated public boolean getBooleanParameter(String, boolean);
+    method @Deprecated public double getDoubleParameter(String, double);
+    method @Deprecated public int getIntParameter(String, int);
+    method @Deprecated public long getLongParameter(String, long);
+    method @Deprecated public Object getParameter(String);
+    method @Deprecated public boolean isParameterFalse(String);
+    method @Deprecated public boolean isParameterTrue(String);
+    method @Deprecated public boolean removeParameter(String);
+    method @Deprecated public org.apache.http.params.HttpParams setBooleanParameter(String, boolean);
+    method @Deprecated public org.apache.http.params.HttpParams setDoubleParameter(String, double);
+    method @Deprecated public org.apache.http.params.HttpParams setIntParameter(String, int);
+    method @Deprecated public org.apache.http.params.HttpParams setLongParameter(String, long);
+    method @Deprecated public org.apache.http.params.HttpParams setParameter(String, Object);
+  }
+
+}
+
diff --git a/32/public/api/android.net.ipsec.ike-removed.txt b/32/public/api/android.net.ipsec.ike-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/android.net.ipsec.ike-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/android.net.ipsec.ike.txt b/32/public/api/android.net.ipsec.ike.txt
new file mode 100644
index 0000000..fb5b1f9
--- /dev/null
+++ b/32/public/api/android.net.ipsec.ike.txt
@@ -0,0 +1,420 @@
+// Signature format: 2.0
+package android.net.eap {
+
+  public final class EapSessionConfig {
+    method @Nullable public android.net.eap.EapSessionConfig.EapAkaConfig getEapAkaConfig();
+    method @Nullable public android.net.eap.EapSessionConfig.EapAkaPrimeConfig getEapAkaPrimeConfig();
+    method @NonNull public byte[] getEapIdentity();
+    method @Nullable public android.net.eap.EapSessionConfig.EapMsChapV2Config getEapMsChapV2Config();
+    method @Nullable public android.net.eap.EapSessionConfig.EapSimConfig getEapSimConfig();
+    method @Nullable public android.net.eap.EapSessionConfig.EapTtlsConfig getEapTtlsConfig();
+  }
+
+  public static final class EapSessionConfig.Builder {
+    ctor public EapSessionConfig.Builder();
+    method @NonNull public android.net.eap.EapSessionConfig build();
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapAkaConfig(int, int);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapAkaPrimeConfig(int, int, @NonNull String, boolean);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapIdentity(@NonNull byte[]);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapMsChapV2Config(@NonNull String, @NonNull String);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapSimConfig(int, int);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapTtlsConfig(@Nullable java.security.cert.X509Certificate, @NonNull android.net.eap.EapSessionConfig);
+  }
+
+  public static class EapSessionConfig.EapAkaConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method public int getAppType();
+    method public int getSubId();
+  }
+
+  public static class EapSessionConfig.EapAkaPrimeConfig extends android.net.eap.EapSessionConfig.EapAkaConfig {
+    method public boolean allowsMismatchedNetworkNames();
+    method @NonNull public String getNetworkName();
+  }
+
+  public abstract static class EapSessionConfig.EapMethodConfig {
+    method public int getMethodType();
+    field public static final int EAP_TYPE_AKA = 23; // 0x17
+    field public static final int EAP_TYPE_AKA_PRIME = 50; // 0x32
+    field public static final int EAP_TYPE_MSCHAP_V2 = 26; // 0x1a
+    field public static final int EAP_TYPE_SIM = 18; // 0x12
+    field public static final int EAP_TYPE_TTLS = 21; // 0x15
+  }
+
+  public static class EapSessionConfig.EapMsChapV2Config extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method @NonNull public String getPassword();
+    method @NonNull public String getUsername();
+  }
+
+  public static class EapSessionConfig.EapSimConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method public int getAppType();
+    method public int getSubId();
+  }
+
+  public static class EapSessionConfig.EapTtlsConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method @NonNull public android.net.eap.EapSessionConfig getInnerEapSessionConfig();
+    method @Nullable public java.security.cert.X509Certificate getServerCaCert();
+  }
+
+}
+
+package android.net.ipsec.ike {
+
+  public final class ChildSaProposal extends android.net.ipsec.ike.SaProposal {
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedEncryptionAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedIntegrityAlgorithms();
+  }
+
+  public static final class ChildSaProposal.Builder {
+    ctor public ChildSaProposal.Builder();
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addDhGroup(int);
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addEncryptionAlgorithm(int, int);
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addIntegrityAlgorithm(int);
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal build();
+  }
+
+  public interface ChildSessionCallback {
+    method public void onClosed();
+    method public default void onClosedWithException(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public void onIpSecTransformCreated(@NonNull android.net.IpSecTransform, int);
+    method public void onIpSecTransformDeleted(@NonNull android.net.IpSecTransform, int);
+    method public void onOpened(@NonNull android.net.ipsec.ike.ChildSessionConfiguration);
+  }
+
+  public final class ChildSessionConfiguration {
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getInboundTrafficSelectors();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getOutboundTrafficSelectors();
+  }
+
+  public static final class ChildSessionConfiguration.Builder {
+    ctor public ChildSessionConfiguration.Builder(@NonNull java.util.List<android.net.ipsec.ike.IkeTrafficSelector>, @NonNull java.util.List<android.net.ipsec.ike.IkeTrafficSelector>);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration build();
+  }
+
+  public abstract class ChildSessionParams {
+    method @NonNull public java.util.List<android.net.ipsec.ike.ChildSaProposal> getChildSaProposals();
+    method @IntRange(from=0x12c, to=0x3840) public int getHardLifetimeSeconds();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getInboundTrafficSelectors();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getOutboundTrafficSelectors();
+    method @IntRange(from=0x78, to=0x3840) public int getSoftLifetimeSeconds();
+  }
+
+  public final class IkeDerAsn1DnIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeDerAsn1DnIdentification(@NonNull javax.security.auth.x500.X500Principal);
+    field @NonNull public final javax.security.auth.x500.X500Principal derAsn1Dn;
+  }
+
+  public class IkeFqdnIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeFqdnIdentification(@NonNull String);
+    field @NonNull public final String fqdn;
+  }
+
+  public abstract class IkeIdentification {
+  }
+
+  public final class IkeIpv4AddrIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeIpv4AddrIdentification(@NonNull java.net.Inet4Address);
+    field @NonNull public final java.net.Inet4Address ipv4Address;
+  }
+
+  public class IkeIpv6AddrIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeIpv6AddrIdentification(@NonNull java.net.Inet6Address);
+    field @NonNull public final java.net.Inet6Address ipv6Address;
+  }
+
+  public final class IkeKeyIdIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeKeyIdIdentification(@NonNull byte[]);
+    field @NonNull public final byte[] keyId;
+  }
+
+  public final class IkeRfc822AddrIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeRfc822AddrIdentification(@NonNull String);
+    field @NonNull public final String rfc822Name;
+  }
+
+  public final class IkeSaProposal extends android.net.ipsec.ike.SaProposal {
+    method @NonNull public java.util.List<java.lang.Integer> getPseudorandomFunctions();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedEncryptionAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedIntegrityAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedPseudorandomFunctions();
+  }
+
+  public static final class IkeSaProposal.Builder {
+    ctor public IkeSaProposal.Builder();
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addDhGroup(int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addEncryptionAlgorithm(int, int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addIntegrityAlgorithm(int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addPseudorandomFunction(int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal build();
+  }
+
+  public final class IkeSession implements java.lang.AutoCloseable {
+    ctor public IkeSession(@NonNull android.content.Context, @NonNull android.net.ipsec.ike.IkeSessionParams, @NonNull android.net.ipsec.ike.ChildSessionParams, @NonNull java.util.concurrent.Executor, @NonNull android.net.ipsec.ike.IkeSessionCallback, @NonNull android.net.ipsec.ike.ChildSessionCallback);
+    method public void close();
+    method public void closeChildSession(@NonNull android.net.ipsec.ike.ChildSessionCallback);
+    method public void finalize();
+    method public void kill();
+    method public void openChildSession(@NonNull android.net.ipsec.ike.ChildSessionParams, @NonNull android.net.ipsec.ike.ChildSessionCallback);
+  }
+
+  public interface IkeSessionCallback {
+    method public void onClosed();
+    method public default void onClosedWithException(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public default void onError(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public void onOpened(@NonNull android.net.ipsec.ike.IkeSessionConfiguration);
+  }
+
+  public final class IkeSessionConfiguration {
+    method @NonNull public android.net.ipsec.ike.IkeSessionConnectionInfo getIkeSessionConnectionInfo();
+    method @NonNull public String getRemoteApplicationVersion();
+    method @NonNull public java.util.List<byte[]> getRemoteVendorIds();
+    method public boolean isIkeExtensionEnabled(int);
+    field public static final int EXTENSION_TYPE_FRAGMENTATION = 1; // 0x1
+    field public static final int EXTENSION_TYPE_MOBIKE = 2; // 0x2
+  }
+
+  public static final class IkeSessionConfiguration.Builder {
+    ctor public IkeSessionConfiguration.Builder(@NonNull android.net.ipsec.ike.IkeSessionConnectionInfo);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder addIkeExtension(int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder addRemoteVendorId(@NonNull byte[]);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration build();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearIkeExtensions();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearRemoteApplicationVersion();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearRemoteVendorIds();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder setRemoteApplicationVersion(@NonNull String);
+  }
+
+  public final class IkeSessionConnectionInfo {
+    ctor public IkeSessionConnectionInfo(@NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull android.net.Network);
+    method @NonNull public java.net.InetAddress getLocalAddress();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public java.net.InetAddress getRemoteAddress();
+  }
+
+  public final class IkeSessionParams {
+    method @IntRange(from=0x14, to=0x708) public int getDpdDelaySeconds();
+    method @IntRange(from=0x12c, to=0x15180) public int getHardLifetimeSeconds();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeSaProposal> getIkeSaProposals();
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig getLocalAuthConfig();
+    method @NonNull public android.net.ipsec.ike.IkeIdentification getLocalIdentification();
+    method @IntRange(from=0xa, to=0xe10) public int getNattKeepAliveDelaySeconds();
+    method @Nullable public android.net.Network getNetwork();
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig getRemoteAuthConfig();
+    method @NonNull public android.net.ipsec.ike.IkeIdentification getRemoteIdentification();
+    method @NonNull public int[] getRetransmissionTimeoutsMillis();
+    method @NonNull public String getServerHostname();
+    method @IntRange(from=0x78, to=0x15180) public int getSoftLifetimeSeconds();
+    method public boolean hasIkeOption(int);
+    field public static final int IKE_OPTION_ACCEPT_ANY_REMOTE_ID = 0; // 0x0
+    field public static final int IKE_OPTION_EAP_ONLY_AUTH = 1; // 0x1
+    field public static final int IKE_OPTION_FORCE_PORT_4500 = 3; // 0x3
+    field public static final int IKE_OPTION_MOBIKE = 2; // 0x2
+  }
+
+  public static final class IkeSessionParams.Builder {
+    ctor public IkeSessionParams.Builder();
+    ctor public IkeSessionParams.Builder(@NonNull android.net.ipsec.ike.IkeSessionParams);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addIkeOption(int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addIkeSaProposal(@NonNull android.net.ipsec.ike.IkeSaProposal);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams build();
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder removeIkeOption(int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthDigitalSignature(@Nullable java.security.cert.X509Certificate, @NonNull java.security.cert.X509Certificate, @NonNull java.security.PrivateKey);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthDigitalSignature(@Nullable java.security.cert.X509Certificate, @NonNull java.security.cert.X509Certificate, @NonNull java.util.List<java.security.cert.X509Certificate>, @NonNull java.security.PrivateKey);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthEap(@Nullable java.security.cert.X509Certificate, @NonNull android.net.eap.EapSessionConfig);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthPsk(@NonNull byte[]);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setDpdDelaySeconds(@IntRange(from=0x14, to=0x708) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setLifetimeSeconds(@IntRange(from=0x12c, to=0x15180) int, @IntRange(from=0x78, to=0x15180) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setLocalIdentification(@NonNull android.net.ipsec.ike.IkeIdentification);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setNattKeepAliveDelaySeconds(@IntRange(from=0xa, to=0xe10) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setNetwork(@Nullable android.net.Network);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setRemoteIdentification(@NonNull android.net.ipsec.ike.IkeIdentification);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setRetransmissionTimeoutsMillis(@NonNull int[]);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setServerHostname(@NonNull String);
+  }
+
+  public abstract static class IkeSessionParams.IkeAuthConfig {
+  }
+
+  public static class IkeSessionParams.IkeAuthDigitalSignLocalConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @NonNull public java.security.cert.X509Certificate getClientEndCertificate();
+    method @NonNull public java.util.List<java.security.cert.X509Certificate> getIntermediateCertificates();
+    method @NonNull public java.security.PrivateKey getPrivateKey();
+  }
+
+  public static class IkeSessionParams.IkeAuthDigitalSignRemoteConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @Nullable public java.security.cert.X509Certificate getRemoteCaCert();
+  }
+
+  public static class IkeSessionParams.IkeAuthEapConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @NonNull public android.net.eap.EapSessionConfig getEapConfig();
+  }
+
+  public static class IkeSessionParams.IkeAuthPskConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @NonNull public byte[] getPsk();
+  }
+
+  public final class IkeTrafficSelector {
+    ctor public IkeTrafficSelector(int, int, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress);
+    field public final int endPort;
+    field @NonNull public final java.net.InetAddress endingAddress;
+    field public final int startPort;
+    field @NonNull public final java.net.InetAddress startingAddress;
+  }
+
+  public final class IkeTunnelConnectionParams {
+    ctor public IkeTunnelConnectionParams(@NonNull android.net.ipsec.ike.IkeSessionParams, @NonNull android.net.ipsec.ike.TunnelModeChildSessionParams);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams getIkeSessionParams();
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams getTunnelModeChildSessionParams();
+  }
+
+  public abstract class SaProposal {
+    method @NonNull public java.util.List<java.lang.Integer> getDhGroups();
+    method @NonNull public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getEncryptionAlgorithms();
+    method @NonNull public java.util.List<java.lang.Integer> getIntegrityAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedDhGroups();
+    field public static final int DH_GROUP_1024_BIT_MODP = 2; // 0x2
+    field public static final int DH_GROUP_1536_BIT_MODP = 5; // 0x5
+    field public static final int DH_GROUP_2048_BIT_MODP = 14; // 0xe
+    field public static final int DH_GROUP_3072_BIT_MODP = 15; // 0xf
+    field public static final int DH_GROUP_4096_BIT_MODP = 16; // 0x10
+    field public static final int DH_GROUP_CURVE_25519 = 31; // 0x1f
+    field public static final int DH_GROUP_NONE = 0; // 0x0
+    field public static final int ENCRYPTION_ALGORITHM_3DES = 3; // 0x3
+    field public static final int ENCRYPTION_ALGORITHM_AES_CBC = 12; // 0xc
+    field public static final int ENCRYPTION_ALGORITHM_AES_CTR = 13; // 0xd
+    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_12 = 19; // 0x13
+    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_16 = 20; // 0x14
+    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_8 = 18; // 0x12
+    field public static final int ENCRYPTION_ALGORITHM_CHACHA20_POLY1305 = 28; // 0x1c
+    field public static final int INTEGRITY_ALGORITHM_AES_CMAC_96 = 8; // 0x8
+    field public static final int INTEGRITY_ALGORITHM_AES_XCBC_96 = 5; // 0x5
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA1_96 = 2; // 0x2
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_256_128 = 12; // 0xc
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_384_192 = 13; // 0xd
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_512_256 = 14; // 0xe
+    field public static final int INTEGRITY_ALGORITHM_NONE = 0; // 0x0
+    field public static final int KEY_LEN_AES_128 = 128; // 0x80
+    field public static final int KEY_LEN_AES_192 = 192; // 0xc0
+    field public static final int KEY_LEN_AES_256 = 256; // 0x100
+    field public static final int KEY_LEN_UNUSED = 0; // 0x0
+    field public static final int PSEUDORANDOM_FUNCTION_AES128_CMAC = 8; // 0x8
+    field public static final int PSEUDORANDOM_FUNCTION_AES128_XCBC = 4; // 0x4
+    field public static final int PSEUDORANDOM_FUNCTION_HMAC_SHA1 = 2; // 0x2
+    field public static final int PSEUDORANDOM_FUNCTION_SHA2_256 = 5; // 0x5
+    field public static final int PSEUDORANDOM_FUNCTION_SHA2_384 = 6; // 0x6
+    field public static final int PSEUDORANDOM_FUNCTION_SHA2_512 = 7; // 0x7
+  }
+
+  public final class TransportModeChildSessionParams extends android.net.ipsec.ike.ChildSessionParams {
+  }
+
+  public static final class TransportModeChildSessionParams.Builder {
+    ctor public TransportModeChildSessionParams.Builder();
+    ctor public TransportModeChildSessionParams.Builder(@NonNull android.net.ipsec.ike.TransportModeChildSessionParams);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addChildSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addInboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addOutboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams build();
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder setLifetimeSeconds(@IntRange(from=0x12c, to=0x3840) int, @IntRange(from=0x78, to=0x3840) int);
+  }
+
+  public final class TunnelModeChildSessionParams extends android.net.ipsec.ike.ChildSessionParams {
+    method @NonNull public java.util.List<android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest> getConfigurationRequests();
+  }
+
+  public static final class TunnelModeChildSessionParams.Builder {
+    ctor public TunnelModeChildSessionParams.Builder();
+    ctor public TunnelModeChildSessionParams.Builder(@NonNull android.net.ipsec.ike.TunnelModeChildSessionParams);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addChildSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalAddressRequest(int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalAddressRequest(@NonNull java.net.Inet4Address);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalAddressRequest(@NonNull java.net.Inet6Address, int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalDhcpServerRequest(int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalDnsServerRequest(int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addOutboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams build();
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder setLifetimeSeconds(@IntRange(from=0x12c, to=0x3840) int, @IntRange(from=0x78, to=0x3840) int);
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4Address extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+    method @Nullable public java.net.Inet4Address getAddress();
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4DhcpServer extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4DnsServer extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4Netmask extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv6Address extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+    method @Nullable public java.net.Inet6Address getAddress();
+    method public int getPrefixLength();
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv6DnsServer extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+}
+
+package android.net.ipsec.ike.exceptions {
+
+  public abstract class IkeException extends java.lang.Exception {
+  }
+
+  public final class IkeInternalException extends android.net.ipsec.ike.exceptions.IkeNonProtocolException {
+    ctor public IkeInternalException(@NonNull Throwable);
+    ctor public IkeInternalException(@NonNull String, @NonNull Throwable);
+  }
+
+  public final class IkeNetworkLostException extends android.net.ipsec.ike.exceptions.IkeNonProtocolException {
+    ctor public IkeNetworkLostException(@NonNull android.net.Network);
+    method @NonNull public android.net.Network getNetwork();
+  }
+
+  public abstract class IkeNonProtocolException extends android.net.ipsec.ike.exceptions.IkeException {
+  }
+
+  public abstract class IkeProtocolException extends android.net.ipsec.ike.exceptions.IkeException {
+    method public int getErrorType();
+    field public static final int ERROR_TYPE_AUTHENTICATION_FAILED = 24; // 0x18
+    field public static final int ERROR_TYPE_CHILD_SA_NOT_FOUND = 44; // 0x2c
+    field public static final int ERROR_TYPE_FAILED_CP_REQUIRED = 37; // 0x25
+    field public static final int ERROR_TYPE_INTERNAL_ADDRESS_FAILURE = 36; // 0x24
+    field public static final int ERROR_TYPE_INVALID_IKE_SPI = 4; // 0x4
+    field public static final int ERROR_TYPE_INVALID_KE_PAYLOAD = 17; // 0x11
+    field public static final int ERROR_TYPE_INVALID_MAJOR_VERSION = 5; // 0x5
+    field public static final int ERROR_TYPE_INVALID_MESSAGE_ID = 9; // 0x9
+    field public static final int ERROR_TYPE_INVALID_SELECTORS = 39; // 0x27
+    field public static final int ERROR_TYPE_INVALID_SYNTAX = 7; // 0x7
+    field public static final int ERROR_TYPE_NO_ADDITIONAL_SAS = 35; // 0x23
+    field public static final int ERROR_TYPE_NO_PROPOSAL_CHOSEN = 14; // 0xe
+    field public static final int ERROR_TYPE_SINGLE_PAIR_REQUIRED = 34; // 0x22
+    field public static final int ERROR_TYPE_TEMPORARY_FAILURE = 43; // 0x2b
+    field public static final int ERROR_TYPE_TS_UNACCEPTABLE = 38; // 0x26
+    field public static final int ERROR_TYPE_UNSUPPORTED_CRITICAL_PAYLOAD = 1; // 0x1
+  }
+
+  public final class InvalidKeException extends android.net.ipsec.ike.exceptions.IkeProtocolException {
+    ctor public InvalidKeException(int);
+    method public int getDhGroup();
+  }
+
+  public final class InvalidMajorVersionException extends android.net.ipsec.ike.exceptions.IkeProtocolException {
+    ctor public InvalidMajorVersionException(byte);
+    method public byte getMajorVersion();
+  }
+
+  public final class InvalidSelectorsException extends android.net.ipsec.ike.exceptions.IkeProtocolException {
+    ctor public InvalidSelectorsException(int, @NonNull byte[]);
+    method @NonNull public byte[] getIpSecPacketInfo();
+    method public int getIpSecSpi();
+  }
+
+}
+
diff --git a/32/public/api/android.test.base-removed.txt b/32/public/api/android.test.base-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/android.test.base-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/android.test.base.txt b/32/public/api/android.test.base.txt
new file mode 100644
index 0000000..823e24d
--- /dev/null
+++ b/32/public/api/android.test.base.txt
@@ -0,0 +1,235 @@
+// Signature format: 2.0
+package android.test {
+
+  @Deprecated public class AndroidTestCase extends junit.framework.TestCase {
+    ctor @Deprecated public AndroidTestCase();
+    method @Deprecated public void assertActivityRequiresPermission(String, String, String);
+    method @Deprecated public void assertReadingContentUriRequiresPermission(android.net.Uri, String);
+    method @Deprecated public void assertWritingContentUriRequiresPermission(android.net.Uri, String);
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated public android.content.Context getTestContext();
+    method @Deprecated protected void scrubClass(Class<?>) throws java.lang.IllegalAccessException;
+    method @Deprecated public void setContext(android.content.Context);
+    method @Deprecated public void setTestContext(android.content.Context);
+    method @Deprecated @android.test.suitebuilder.annotation.Suppress public void testAndroidTestCaseSetupProperly();
+    field @Deprecated protected android.content.Context mContext;
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface FlakyTest {
+    method @Deprecated public abstract int tolerance() default 1;
+  }
+
+  @Deprecated public class InstrumentationTestCase extends junit.framework.TestCase {
+    ctor @Deprecated public InstrumentationTestCase();
+    method @Deprecated public android.app.Instrumentation getInstrumentation();
+    method @Deprecated public void injectInsrumentation(android.app.Instrumentation);
+    method @Deprecated public void injectInstrumentation(android.app.Instrumentation);
+    method @Deprecated public final <T extends android.app.Activity> T launchActivity(String, Class<T>, android.os.Bundle);
+    method @Deprecated public final <T extends android.app.Activity> T launchActivityWithIntent(String, Class<T>, android.content.Intent);
+    method @Deprecated public void runTestOnUiThread(Runnable) throws java.lang.Throwable;
+    method @Deprecated public void sendKeys(String);
+    method @Deprecated public void sendKeys(int...);
+    method @Deprecated public void sendRepeatedKeys(int...);
+  }
+
+  @Deprecated public class InstrumentationTestSuite extends junit.framework.TestSuite {
+    ctor @Deprecated public InstrumentationTestSuite(android.app.Instrumentation);
+    ctor @Deprecated public InstrumentationTestSuite(String, android.app.Instrumentation);
+    ctor @Deprecated public InstrumentationTestSuite(Class, android.app.Instrumentation);
+    method @Deprecated public void addTestSuite(Class);
+  }
+
+  @Deprecated public interface PerformanceTestCase {
+    method @Deprecated public boolean isPerformanceOnly();
+    method @Deprecated public int startPerformance(android.test.PerformanceTestCase.Intermediates);
+  }
+
+  @Deprecated public static interface PerformanceTestCase.Intermediates {
+    method @Deprecated public void addIntermediate(String);
+    method @Deprecated public void addIntermediate(String, long);
+    method @Deprecated public void finishTiming(boolean);
+    method @Deprecated public void setInternalIterations(int);
+    method @Deprecated public void startTiming(boolean);
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface RepetitiveTest {
+    method @Deprecated public abstract int numIterations() default 1;
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface UiThreadTest {
+  }
+
+}
+
+package android.test.suitebuilder.annotation {
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) public @interface LargeTest {
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) public @interface MediumTest {
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) public @interface SmallTest {
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) public @interface Smoke {
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE}) public @interface Suppress {
+  }
+
+}
+
+package com.android.internal.util {
+
+  @Deprecated public interface Predicate<T> {
+    method @Deprecated public boolean apply(T);
+  }
+
+}
+
+package junit.framework {
+
+  public class Assert {
+    ctor protected Assert();
+    method public static void assertEquals(String, Object, Object);
+    method public static void assertEquals(Object, Object);
+    method public static void assertEquals(String, String, String);
+    method public static void assertEquals(String, String);
+    method public static void assertEquals(String, double, double, double);
+    method public static void assertEquals(double, double, double);
+    method public static void assertEquals(String, float, float, float);
+    method public static void assertEquals(float, float, float);
+    method public static void assertEquals(String, long, long);
+    method public static void assertEquals(long, long);
+    method public static void assertEquals(String, boolean, boolean);
+    method public static void assertEquals(boolean, boolean);
+    method public static void assertEquals(String, byte, byte);
+    method public static void assertEquals(byte, byte);
+    method public static void assertEquals(String, char, char);
+    method public static void assertEquals(char, char);
+    method public static void assertEquals(String, short, short);
+    method public static void assertEquals(short, short);
+    method public static void assertEquals(String, int, int);
+    method public static void assertEquals(int, int);
+    method public static void assertFalse(String, boolean);
+    method public static void assertFalse(boolean);
+    method public static void assertNotNull(Object);
+    method public static void assertNotNull(String, Object);
+    method public static void assertNotSame(String, Object, Object);
+    method public static void assertNotSame(Object, Object);
+    method public static void assertNull(Object);
+    method public static void assertNull(String, Object);
+    method public static void assertSame(String, Object, Object);
+    method public static void assertSame(Object, Object);
+    method public static void assertTrue(String, boolean);
+    method public static void assertTrue(boolean);
+    method public static void fail(String);
+    method public static void fail();
+    method public static void failNotEquals(String, Object, Object);
+    method public static void failNotSame(String, Object, Object);
+    method public static void failSame(String);
+    method public static String format(String, Object, Object);
+  }
+
+  public class AssertionFailedError extends java.lang.AssertionError {
+    ctor public AssertionFailedError();
+    ctor public AssertionFailedError(String);
+  }
+
+  public class ComparisonFailure extends junit.framework.AssertionFailedError {
+    ctor public ComparisonFailure(String, String, String);
+    method public String getActual();
+    method public String getExpected();
+  }
+
+  public interface Protectable {
+    method public void protect() throws java.lang.Throwable;
+  }
+
+  public interface Test {
+    method public int countTestCases();
+    method public void run(junit.framework.TestResult);
+  }
+
+  public abstract class TestCase extends junit.framework.Assert implements junit.framework.Test {
+    ctor public TestCase();
+    ctor public TestCase(String);
+    method public int countTestCases();
+    method protected junit.framework.TestResult createResult();
+    method public String getName();
+    method public junit.framework.TestResult run();
+    method public void run(junit.framework.TestResult);
+    method public void runBare() throws java.lang.Throwable;
+    method protected void runTest() throws java.lang.Throwable;
+    method public void setName(String);
+    method protected void setUp() throws java.lang.Exception;
+    method protected void tearDown() throws java.lang.Exception;
+  }
+
+  public class TestFailure {
+    ctor public TestFailure(junit.framework.Test, Throwable);
+    method public String exceptionMessage();
+    method public junit.framework.Test failedTest();
+    method public boolean isFailure();
+    method public Throwable thrownException();
+    method public String trace();
+    field protected junit.framework.Test fFailedTest;
+    field protected Throwable fThrownException;
+  }
+
+  public interface TestListener {
+    method public void addError(junit.framework.Test, Throwable);
+    method public void addFailure(junit.framework.Test, junit.framework.AssertionFailedError);
+    method public void endTest(junit.framework.Test);
+    method public void startTest(junit.framework.Test);
+  }
+
+  public class TestResult {
+    ctor public TestResult();
+    method public void addError(junit.framework.Test, Throwable);
+    method public void addFailure(junit.framework.Test, junit.framework.AssertionFailedError);
+    method public void addListener(junit.framework.TestListener);
+    method public void endTest(junit.framework.Test);
+    method public int errorCount();
+    method public java.util.Enumeration<junit.framework.TestFailure> errors();
+    method public int failureCount();
+    method public java.util.Enumeration<junit.framework.TestFailure> failures();
+    method public void removeListener(junit.framework.TestListener);
+    method protected void run(junit.framework.TestCase);
+    method public int runCount();
+    method public void runProtected(junit.framework.Test, junit.framework.Protectable);
+    method public boolean shouldStop();
+    method public void startTest(junit.framework.Test);
+    method public void stop();
+    method public boolean wasSuccessful();
+    field protected java.util.Vector<junit.framework.TestFailure> fErrors;
+    field protected java.util.Vector<junit.framework.TestFailure> fFailures;
+    field protected java.util.Vector<junit.framework.TestListener> fListeners;
+    field protected int fRunTests;
+  }
+
+  public class TestSuite implements junit.framework.Test {
+    ctor public TestSuite();
+    ctor public TestSuite(Class<?>);
+    ctor public TestSuite(Class<? extends junit.framework.TestCase>, String);
+    ctor public TestSuite(String);
+    ctor public TestSuite(Class<?>...);
+    ctor public TestSuite(Class<? extends junit.framework.TestCase>[], String);
+    method public void addTest(junit.framework.Test);
+    method public void addTestSuite(Class<? extends junit.framework.TestCase>);
+    method public int countTestCases();
+    method public static junit.framework.Test createTest(Class<?>, String);
+    method public String getName();
+    method public static java.lang.reflect.Constructor<?> getTestConstructor(Class<?>) throws java.lang.NoSuchMethodException;
+    method public void run(junit.framework.TestResult);
+    method public void runTest(junit.framework.Test, junit.framework.TestResult);
+    method public void setName(String);
+    method public junit.framework.Test testAt(int);
+    method public int testCount();
+    method public java.util.Enumeration<junit.framework.Test> tests();
+    method public static junit.framework.Test warning(String);
+  }
+
+}
+
diff --git a/32/public/api/android.test.mock-removed.txt b/32/public/api/android.test.mock-removed.txt
new file mode 100644
index 0000000..1496c35
--- /dev/null
+++ b/32/public/api/android.test.mock-removed.txt
@@ -0,0 +1,16 @@
+// Signature format: 2.0
+package android.test.mock {
+
+  public class MockContext extends android.content.Context {
+    method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+    method public java.io.File getSharedPreferencesPath(String);
+  }
+
+  @Deprecated public class MockPackageManager extends android.content.pm.PackageManager {
+    method @Deprecated public String getDefaultBrowserPackageName(int);
+    method @Deprecated public boolean setDefaultBrowserPackageName(String, int);
+    method public boolean setInstantAppCookie(@NonNull byte[]);
+  }
+
+}
+
diff --git a/32/public/api/android.test.mock.txt b/32/public/api/android.test.mock.txt
new file mode 100644
index 0000000..d1a68d4
--- /dev/null
+++ b/32/public/api/android.test.mock.txt
@@ -0,0 +1,306 @@
+// Signature format: 2.0
+package android.test.mock {
+
+  @Deprecated public class MockAccountManager {
+    method @Deprecated public static android.accounts.AccountManager newMockAccountManager(android.content.Context);
+  }
+
+  @Deprecated public class MockApplication extends android.app.Application {
+    ctor @Deprecated public MockApplication();
+  }
+
+  public class MockContentProvider extends android.content.ContentProvider {
+    ctor protected MockContentProvider();
+    ctor public MockContentProvider(android.content.Context);
+    ctor public MockContentProvider(android.content.Context, String, String, android.content.pm.PathPermission[]);
+    method public android.content.ContentProviderResult[] applyBatch(java.util.ArrayList<android.content.ContentProviderOperation>);
+    method @Deprecated public static void attachInfoForTesting(android.content.ContentProvider, android.content.Context, android.content.pm.ProviderInfo);
+    method public int delete(android.net.Uri, String, String[]);
+    method public String getType(android.net.Uri);
+    method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean onCreate();
+    method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, String, android.os.Bundle);
+    method public android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method public int update(android.net.Uri, android.content.ContentValues, String, String[]);
+  }
+
+  public class MockContentResolver extends android.content.ContentResolver {
+    ctor public MockContentResolver();
+    ctor public MockContentResolver(android.content.Context);
+    method public void addProvider(String, android.content.ContentProvider);
+  }
+
+  public class MockContext extends android.content.Context {
+    ctor public MockContext();
+    method public boolean bindService(android.content.Intent, android.content.ServiceConnection, int);
+    method public int checkCallingOrSelfPermission(String);
+    method public int checkCallingOrSelfUriPermission(android.net.Uri, int);
+    method public int checkCallingPermission(String);
+    method public int checkCallingUriPermission(android.net.Uri, int);
+    method public int checkPermission(String, int, int);
+    method public int checkSelfPermission(String);
+    method public int checkUriPermission(android.net.Uri, int, int, int);
+    method public int checkUriPermission(android.net.Uri, String, String, int, int, int);
+    method public void clearWallpaper();
+    method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+    method public android.content.Context createContextForSplit(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.Context createDeviceProtectedStorageContext();
+    method public android.content.Context createDisplayContext(android.view.Display);
+    method public android.content.Context createPackageContext(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public String[] databaseList();
+    method public boolean deleteDatabase(String);
+    method public boolean deleteFile(String);
+    method public boolean deleteSharedPreferences(String);
+    method public void enforceCallingOrSelfPermission(String, String);
+    method public void enforceCallingOrSelfUriPermission(android.net.Uri, int, String);
+    method public void enforceCallingPermission(String, String);
+    method public void enforceCallingUriPermission(android.net.Uri, int, String);
+    method public void enforcePermission(String, int, int, String);
+    method public void enforceUriPermission(android.net.Uri, int, int, int, String);
+    method public void enforceUriPermission(android.net.Uri, String, String, int, int, int, String);
+    method public String[] fileList();
+    method public android.content.Context getApplicationContext();
+    method public android.content.pm.ApplicationInfo getApplicationInfo();
+    method public android.content.res.AssetManager getAssets();
+    method public java.io.File getCacheDir();
+    method public ClassLoader getClassLoader();
+    method public java.io.File getCodeCacheDir();
+    method public android.content.ContentResolver getContentResolver();
+    method public java.io.File getDataDir();
+    method public java.io.File getDatabasePath(String);
+    method public java.io.File getDir(String, int);
+    method public java.io.File getExternalCacheDir();
+    method public java.io.File[] getExternalCacheDirs();
+    method public java.io.File getExternalFilesDir(String);
+    method public java.io.File[] getExternalFilesDirs(String);
+    method public java.io.File[] getExternalMediaDirs();
+    method public java.io.File getFileStreamPath(String);
+    method public java.io.File getFilesDir();
+    method public android.os.Looper getMainLooper();
+    method public java.io.File getNoBackupFilesDir();
+    method public java.io.File getObbDir();
+    method public java.io.File[] getObbDirs();
+    method public String getPackageCodePath();
+    method public android.content.pm.PackageManager getPackageManager();
+    method public String getPackageName();
+    method public String getPackageResourcePath();
+    method public android.content.res.Resources getResources();
+    method public android.content.SharedPreferences getSharedPreferences(String, int);
+    method public Object getSystemService(String);
+    method public String getSystemServiceName(Class<?>);
+    method public android.content.res.Resources.Theme getTheme();
+    method public android.graphics.drawable.Drawable getWallpaper();
+    method public int getWallpaperDesiredMinimumHeight();
+    method public int getWallpaperDesiredMinimumWidth();
+    method public void grantUriPermission(String, android.net.Uri, int);
+    method public boolean isDeviceProtectedStorage();
+    method public boolean moveDatabaseFrom(android.content.Context, String);
+    method public boolean moveSharedPreferencesFrom(android.content.Context, String);
+    method public java.io.FileInputStream openFileInput(String) throws java.io.FileNotFoundException;
+    method public java.io.FileOutputStream openFileOutput(String, int) throws java.io.FileNotFoundException;
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, android.database.DatabaseErrorHandler);
+    method public android.graphics.drawable.Drawable peekWallpaper();
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter);
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, int);
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, String, android.os.Handler);
+    method public android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, String, android.os.Handler, int);
+    method public void removeStickyBroadcast(android.content.Intent);
+    method public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void revokeUriPermission(android.net.Uri, int);
+    method public void revokeUriPermission(String, android.net.Uri, int);
+    method public void sendBroadcast(android.content.Intent);
+    method public void sendBroadcast(android.content.Intent, String);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, String);
+    method public void sendOrderedBroadcast(android.content.Intent, String);
+    method public void sendOrderedBroadcast(android.content.Intent, String, android.content.BroadcastReceiver, android.os.Handler, int, String, android.os.Bundle);
+    method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, String, android.content.BroadcastReceiver, android.os.Handler, int, String, android.os.Bundle);
+    method public void sendStickyBroadcast(android.content.Intent);
+    method public void sendStickyBroadcast(android.content.Intent, android.os.Bundle);
+    method public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void sendStickyOrderedBroadcast(android.content.Intent, android.content.BroadcastReceiver, android.os.Handler, int, String, android.os.Bundle);
+    method public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, android.os.Handler, int, String, android.os.Bundle);
+    method public void setTheme(int);
+    method public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException;
+    method public void setWallpaper(java.io.InputStream) throws java.io.IOException;
+    method public void startActivities(android.content.Intent[]);
+    method public void startActivities(android.content.Intent[], android.os.Bundle);
+    method public void startActivity(android.content.Intent);
+    method public void startActivity(android.content.Intent, android.os.Bundle);
+    method public android.content.ComponentName startForegroundService(android.content.Intent);
+    method public boolean startInstrumentation(android.content.ComponentName, String, android.os.Bundle);
+    method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public void startIntentSender(android.content.IntentSender, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public android.content.ComponentName startService(android.content.Intent);
+    method public boolean stopService(android.content.Intent);
+    method public void unbindService(android.content.ServiceConnection);
+    method public void unregisterReceiver(android.content.BroadcastReceiver);
+  }
+
+  @Deprecated public class MockCursor implements android.database.Cursor {
+    ctor @Deprecated public MockCursor();
+    method @Deprecated public void close();
+    method @Deprecated public void copyStringToBuffer(int, android.database.CharArrayBuffer);
+    method @Deprecated public void deactivate();
+    method @Deprecated public byte[] getBlob(int);
+    method @Deprecated public int getColumnCount();
+    method @Deprecated public int getColumnIndex(String);
+    method @Deprecated public int getColumnIndexOrThrow(String);
+    method @Deprecated public String getColumnName(int);
+    method @Deprecated public String[] getColumnNames();
+    method @Deprecated public int getCount();
+    method @Deprecated public double getDouble(int);
+    method @Deprecated public android.os.Bundle getExtras();
+    method @Deprecated public float getFloat(int);
+    method @Deprecated public int getInt(int);
+    method @Deprecated public long getLong(int);
+    method @Deprecated public android.net.Uri getNotificationUri();
+    method @Deprecated public int getPosition();
+    method @Deprecated public short getShort(int);
+    method @Deprecated public String getString(int);
+    method @Deprecated public int getType(int);
+    method @Deprecated public boolean getWantsAllOnMoveCalls();
+    method @Deprecated public boolean isAfterLast();
+    method @Deprecated public boolean isBeforeFirst();
+    method @Deprecated public boolean isClosed();
+    method @Deprecated public boolean isFirst();
+    method @Deprecated public boolean isLast();
+    method @Deprecated public boolean isNull(int);
+    method @Deprecated public boolean move(int);
+    method @Deprecated public boolean moveToFirst();
+    method @Deprecated public boolean moveToLast();
+    method @Deprecated public boolean moveToNext();
+    method @Deprecated public boolean moveToPosition(int);
+    method @Deprecated public boolean moveToPrevious();
+    method @Deprecated public void registerContentObserver(android.database.ContentObserver);
+    method @Deprecated public void registerDataSetObserver(android.database.DataSetObserver);
+    method @Deprecated public boolean requery();
+    method @Deprecated public android.os.Bundle respond(android.os.Bundle);
+    method @Deprecated public void setExtras(android.os.Bundle);
+    method @Deprecated public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method @Deprecated public void unregisterContentObserver(android.database.ContentObserver);
+    method @Deprecated public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  @Deprecated public class MockDialogInterface implements android.content.DialogInterface {
+    ctor @Deprecated public MockDialogInterface();
+    method @Deprecated public void cancel();
+    method @Deprecated public void dismiss();
+  }
+
+  @Deprecated public class MockPackageManager extends android.content.pm.PackageManager {
+    ctor @Deprecated public MockPackageManager();
+    method @Deprecated public void addPackageToPreferred(String);
+    method @Deprecated public boolean addPermission(android.content.pm.PermissionInfo);
+    method @Deprecated public boolean addPermissionAsync(android.content.pm.PermissionInfo);
+    method @Deprecated public void addPreferredActivity(android.content.IntentFilter, int, android.content.ComponentName[], android.content.ComponentName);
+    method @Deprecated public boolean canRequestPackageInstalls();
+    method @Deprecated public String[] canonicalToCurrentPackageNames(String[]);
+    method @Deprecated public int checkPermission(String, String);
+    method @Deprecated public int checkSignatures(String, String);
+    method @Deprecated public int checkSignatures(int, int);
+    method public void clearInstantAppCookie();
+    method @Deprecated public void clearPackagePreferredActivities(String);
+    method @Deprecated public String[] currentToCanonicalPackageNames(String[]);
+    method @Deprecated public void extendVerificationTimeout(int, int, long);
+    method @Deprecated public android.graphics.drawable.Drawable getActivityBanner(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.graphics.drawable.Drawable getActivityBanner(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.graphics.drawable.Drawable getActivityIcon(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.graphics.drawable.Drawable getActivityIcon(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.pm.ActivityInfo getActivityInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.graphics.drawable.Drawable getActivityLogo(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.graphics.drawable.Drawable getActivityLogo(android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public java.util.List<android.content.IntentFilter> getAllIntentFilters(String);
+    method @Deprecated public java.util.List<android.content.pm.PermissionGroupInfo> getAllPermissionGroups(int);
+    method @Deprecated public android.graphics.drawable.Drawable getApplicationBanner(android.content.pm.ApplicationInfo);
+    method @Deprecated public android.graphics.drawable.Drawable getApplicationBanner(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public int getApplicationEnabledSetting(String);
+    method @Deprecated public android.graphics.drawable.Drawable getApplicationIcon(android.content.pm.ApplicationInfo);
+    method @Deprecated public android.graphics.drawable.Drawable getApplicationIcon(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.pm.ApplicationInfo getApplicationInfo(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public CharSequence getApplicationLabel(android.content.pm.ApplicationInfo);
+    method @Deprecated public android.graphics.drawable.Drawable getApplicationLogo(android.content.pm.ApplicationInfo);
+    method @Deprecated public android.graphics.drawable.Drawable getApplicationLogo(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.ChangedPackages getChangedPackages(int);
+    method @Deprecated public int getComponentEnabledSetting(android.content.ComponentName);
+    method @Deprecated public android.graphics.drawable.Drawable getDefaultActivityIcon();
+    method @Deprecated public android.graphics.drawable.Drawable getDrawable(String, int, android.content.pm.ApplicationInfo);
+    method @Deprecated public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
+    method @Deprecated public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
+    method @Deprecated public String getInstallerPackageName(String);
+    method public byte[] getInstantAppCookie();
+    method public int getInstantAppCookieMaxBytes();
+    method @Deprecated public android.content.pm.InstrumentationInfo getInstrumentationInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.Intent getLaunchIntentForPackage(String);
+    method @Deprecated public android.content.Intent getLeanbackLaunchIntentForPackage(String);
+    method @Deprecated public String getNameForUid(int);
+    method @Deprecated public int[] getPackageGids(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public int[] getPackageGids(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.pm.PackageInfo getPackageInfo(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.pm.PackageInfo getPackageInfo(android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.PackageInstaller getPackageInstaller();
+    method @Deprecated public int getPackageUid(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public String[] getPackagesForUid(int);
+    method @Deprecated public java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(String[], int);
+    method @Deprecated public android.content.pm.PermissionGroupInfo getPermissionGroupInfo(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.pm.PermissionInfo getPermissionInfo(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public int getPreferredActivities(java.util.List<android.content.IntentFilter>, java.util.List<android.content.ComponentName>, String);
+    method @Deprecated public java.util.List<android.content.pm.PackageInfo> getPreferredPackages(int);
+    method @Deprecated public android.content.pm.ProviderInfo getProviderInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.pm.ActivityInfo getReceiverInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.res.Resources getResourcesForActivity(android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.res.Resources getResourcesForApplication(android.content.pm.ApplicationInfo);
+    method @Deprecated public android.content.res.Resources getResourcesForApplication(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.content.pm.ServiceInfo getServiceInfo(android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated @NonNull public java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
+    method @Deprecated public android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
+    method @Deprecated public String[] getSystemSharedLibraryNames();
+    method @Deprecated public CharSequence getText(String, int, android.content.pm.ApplicationInfo);
+    method @Deprecated public android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(android.graphics.drawable.Drawable, android.os.UserHandle, android.graphics.Rect, int);
+    method @Deprecated public android.graphics.drawable.Drawable getUserBadgedIcon(android.graphics.drawable.Drawable, android.os.UserHandle);
+    method @Deprecated public CharSequence getUserBadgedLabel(CharSequence, android.os.UserHandle);
+    method @Deprecated public android.content.res.XmlResourceParser getXml(String, int, android.content.pm.ApplicationInfo);
+    method @Deprecated public boolean hasSystemFeature(String);
+    method @Deprecated public boolean hasSystemFeature(String, int);
+    method public boolean isInstantApp();
+    method public boolean isInstantApp(String);
+    method @Deprecated public boolean isPermissionRevokedByPolicy(String, String);
+    method @Deprecated public boolean isSafeMode();
+    method @Deprecated public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
+    method @Deprecated public java.util.List<android.content.pm.ProviderInfo> queryContentProviders(String, int, int);
+    method @Deprecated public java.util.List<android.content.pm.InstrumentationInfo> queryInstrumentation(String, int);
+    method @Deprecated public java.util.List<android.content.pm.ResolveInfo> queryIntentActivities(android.content.Intent, int);
+    method @Deprecated public java.util.List<android.content.pm.ResolveInfo> queryIntentActivityOptions(android.content.ComponentName, android.content.Intent[], android.content.Intent, int);
+    method @Deprecated public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(android.content.Intent, int);
+    method @Deprecated public java.util.List<android.content.pm.ResolveInfo> queryIntentServices(android.content.Intent, int);
+    method @Deprecated public java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public void removePackageFromPreferred(String);
+    method @Deprecated public void removePermission(String);
+    method @Deprecated public android.content.pm.ResolveInfo resolveActivity(android.content.Intent, int);
+    method @Deprecated public android.content.pm.ProviderInfo resolveContentProvider(String, int);
+    method @Deprecated public android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
+    method @Deprecated public android.content.pm.ResolveInfo resolveServiceAsUser(android.content.Intent, int, int);
+    method public void setApplicationCategoryHint(String, int);
+    method @Deprecated public void setApplicationEnabledSetting(String, int, int);
+    method @Deprecated public void setComponentEnabledSetting(android.content.ComponentName, int, int);
+    method @Deprecated public void setInstallerPackageName(String, String);
+    method public void updateInstantAppCookie(@NonNull byte[]);
+    method @Deprecated public void verifyPendingInstall(int, int);
+  }
+
+  @Deprecated public class MockResources extends android.content.res.Resources {
+    ctor @Deprecated public MockResources();
+    method @Deprecated public int getColor(int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated public android.content.res.ColorStateList getColorStateList(int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated public android.graphics.Movie getMovie(int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
+  }
+
+  @Deprecated public class MockService {
+    method @Deprecated public static <T extends android.app.Service> void attachForTesting(android.app.Service, android.content.Context, String, android.app.Application);
+  }
+
+}
+
diff --git a/32/public/api/android.test.runner-removed.txt b/32/public/api/android.test.runner-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/android.test.runner-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/android.test.runner.txt b/32/public/api/android.test.runner.txt
new file mode 100644
index 0000000..5407b68
--- /dev/null
+++ b/32/public/api/android.test.runner.txt
@@ -0,0 +1,348 @@
+// Signature format: 2.0
+package android.test {
+
+  @Deprecated public abstract class ActivityInstrumentationTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
+    ctor @Deprecated public ActivityInstrumentationTestCase(String, Class<T>);
+    ctor @Deprecated public ActivityInstrumentationTestCase(String, Class<T>, boolean);
+    method @Deprecated public T getActivity();
+    method @Deprecated public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  @Deprecated public abstract class ActivityInstrumentationTestCase2<T extends android.app.Activity> extends android.test.ActivityTestCase {
+    ctor @Deprecated public ActivityInstrumentationTestCase2(String, Class<T>);
+    ctor @Deprecated public ActivityInstrumentationTestCase2(Class<T>);
+    method @Deprecated public T getActivity();
+    method @Deprecated public void setActivityInitialTouchMode(boolean);
+    method @Deprecated public void setActivityIntent(android.content.Intent);
+  }
+
+  @Deprecated public abstract class ActivityTestCase extends android.test.InstrumentationTestCase {
+    ctor @Deprecated public ActivityTestCase();
+    method @Deprecated protected android.app.Activity getActivity();
+    method @Deprecated protected void scrubClass(Class<?>) throws java.lang.IllegalAccessException;
+    method @Deprecated protected void setActivity(android.app.Activity);
+  }
+
+  @Deprecated public abstract class ActivityUnitTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
+    ctor @Deprecated public ActivityUnitTestCase(Class<T>);
+    method @Deprecated public T getActivity();
+    method @Deprecated public int getFinishedActivityRequest();
+    method @Deprecated public int getRequestedOrientation();
+    method @Deprecated public android.content.Intent getStartedActivityIntent();
+    method @Deprecated public int getStartedActivityRequest();
+    method @Deprecated public boolean isFinishCalled();
+    method @Deprecated public void setActivityContext(android.content.Context);
+    method @Deprecated public void setApplication(android.app.Application);
+    method @Deprecated protected T startActivity(android.content.Intent, android.os.Bundle, Object);
+  }
+
+  @Deprecated public class AndroidTestRunner extends junit.runner.BaseTestRunner {
+    ctor @Deprecated public AndroidTestRunner();
+    method @Deprecated public void addTestListener(junit.framework.TestListener);
+    method @Deprecated public void clearTestListeners();
+    method @Deprecated protected junit.framework.TestResult createTestResult();
+    method @Deprecated public java.util.List<junit.framework.TestCase> getTestCases();
+    method @Deprecated public String getTestClassName();
+    method @Deprecated public junit.framework.TestResult getTestResult();
+    method @Deprecated protected Class loadSuiteClass(String) throws java.lang.ClassNotFoundException;
+    method @Deprecated protected void runFailed(String);
+    method @Deprecated public void runTest();
+    method @Deprecated public void runTest(junit.framework.TestResult);
+    method @Deprecated public void setContext(android.content.Context);
+    method @Deprecated public void setInstrumentaiton(android.app.Instrumentation);
+    method @Deprecated public void setInstrumentation(android.app.Instrumentation);
+    method @Deprecated public void setTest(junit.framework.Test);
+    method @Deprecated public void setTestClassName(String, String);
+    method @Deprecated public void testEnded(String);
+    method @Deprecated public void testFailed(int, junit.framework.Test, Throwable);
+    method @Deprecated public void testStarted(String);
+  }
+
+  @Deprecated public abstract class ApplicationTestCase<T extends android.app.Application> extends android.test.AndroidTestCase {
+    ctor @Deprecated public ApplicationTestCase(Class<T>);
+    method @Deprecated protected final void createApplication();
+    method @Deprecated public T getApplication();
+    method @Deprecated public android.content.Context getSystemContext();
+    method @Deprecated protected final void terminateApplication();
+    method @Deprecated public final void testApplicationTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  @Deprecated public class AssertionFailedError extends java.lang.Error {
+    ctor @Deprecated public AssertionFailedError();
+    ctor @Deprecated public AssertionFailedError(String);
+  }
+
+  @Deprecated public class ComparisonFailure extends android.test.AssertionFailedError {
+    ctor @Deprecated public ComparisonFailure(String, String, String);
+  }
+
+  @Deprecated public class InstrumentationTestRunner extends android.app.Instrumentation implements android.test.TestSuiteProvider {
+    ctor @Deprecated public InstrumentationTestRunner();
+    method @Deprecated protected void addTestListener(junit.framework.TestListener);
+    method @Deprecated public junit.framework.TestSuite getAllTests();
+    method @Deprecated protected android.test.AndroidTestRunner getAndroidTestRunner();
+    method @Deprecated public android.os.Bundle getArguments();
+    method @Deprecated public ClassLoader getLoader();
+    method @Deprecated public junit.framework.TestSuite getTestSuite();
+    field @Deprecated public static final String REPORT_KEY_NAME_CLASS = "class";
+    field @Deprecated public static final String REPORT_KEY_NAME_TEST = "test";
+    field @Deprecated public static final String REPORT_KEY_NUM_CURRENT = "current";
+    field @Deprecated public static final String REPORT_KEY_NUM_TOTAL = "numtests";
+    field @Deprecated public static final String REPORT_KEY_STACK = "stack";
+    field @Deprecated public static final String REPORT_VALUE_ID = "InstrumentationTestRunner";
+    field @Deprecated public static final int REPORT_VALUE_RESULT_ERROR = -1; // 0xffffffff
+    field @Deprecated public static final int REPORT_VALUE_RESULT_FAILURE = -2; // 0xfffffffe
+    field @Deprecated public static final int REPORT_VALUE_RESULT_OK = 0; // 0x0
+    field @Deprecated public static final int REPORT_VALUE_RESULT_START = 1; // 0x1
+  }
+
+  @Deprecated public class IsolatedContext extends android.content.ContextWrapper {
+    ctor @Deprecated public IsolatedContext(android.content.ContentResolver, android.content.Context);
+    method @Deprecated public java.util.List<android.content.Intent> getAndClearBroadcastIntents();
+  }
+
+  @Deprecated public class LaunchPerformanceBase extends android.app.Instrumentation {
+    ctor @Deprecated public LaunchPerformanceBase();
+    method @Deprecated protected void LaunchApp();
+    field @Deprecated protected android.content.Intent mIntent;
+    field @Deprecated protected android.os.Bundle mResults;
+  }
+
+  public class LoaderTestCase extends android.test.AndroidTestCase {
+    ctor public LoaderTestCase();
+    method public <T> T getLoaderResultSynchronously(android.content.Loader<T>);
+  }
+
+  @Deprecated public final class MoreAsserts {
+    method @Deprecated public static void assertAssignableFrom(Class<?>, Object);
+    method @Deprecated public static void assertAssignableFrom(Class<?>, Class<?>);
+    method @Deprecated public static java.util.regex.MatchResult assertContainsRegex(String, String, String);
+    method @Deprecated public static java.util.regex.MatchResult assertContainsRegex(String, String);
+    method @Deprecated public static void assertContentsInAnyOrder(String, Iterable<?>, java.lang.Object...);
+    method @Deprecated public static void assertContentsInAnyOrder(Iterable<?>, java.lang.Object...);
+    method @Deprecated public static void assertContentsInOrder(String, Iterable<?>, java.lang.Object...);
+    method @Deprecated public static void assertContentsInOrder(Iterable<?>, java.lang.Object...);
+    method @Deprecated public static void assertEmpty(String, Iterable<?>);
+    method @Deprecated public static void assertEmpty(Iterable<?>);
+    method @Deprecated public static void assertEmpty(String, java.util.Map<?,?>);
+    method @Deprecated public static void assertEmpty(java.util.Map<?,?>);
+    method @Deprecated public static void assertEquals(String, byte[], byte[]);
+    method @Deprecated public static void assertEquals(byte[], byte[]);
+    method @Deprecated public static void assertEquals(String, int[], int[]);
+    method @Deprecated public static void assertEquals(int[], int[]);
+    method @Deprecated public static void assertEquals(String, double[], double[]);
+    method @Deprecated public static void assertEquals(double[], double[]);
+    method @Deprecated public static void assertEquals(String, Object[], Object[]);
+    method @Deprecated public static void assertEquals(Object[], Object[]);
+    method @Deprecated public static void assertEquals(String, java.util.Set<?>, java.util.Set<?>);
+    method @Deprecated public static void assertEquals(java.util.Set<?>, java.util.Set<?>);
+    method @Deprecated public static java.util.regex.MatchResult assertMatchesRegex(String, String, String);
+    method @Deprecated public static java.util.regex.MatchResult assertMatchesRegex(String, String);
+    method @Deprecated public static void assertNotContainsRegex(String, String, String);
+    method @Deprecated public static void assertNotContainsRegex(String, String);
+    method @Deprecated public static void assertNotEmpty(String, Iterable<?>);
+    method @Deprecated public static void assertNotEmpty(Iterable<?>);
+    method @Deprecated public static void assertNotEmpty(String, java.util.Map<?,?>);
+    method @Deprecated public static void assertNotEmpty(java.util.Map<?,?>);
+    method @Deprecated public static void assertNotEqual(String, Object, Object);
+    method @Deprecated public static void assertNotEqual(Object, Object);
+    method @Deprecated public static void assertNotMatchesRegex(String, String, String);
+    method @Deprecated public static void assertNotMatchesRegex(String, String);
+    method @Deprecated public static void checkEqualsAndHashCodeMethods(String, Object, Object, boolean);
+    method @Deprecated public static void checkEqualsAndHashCodeMethods(Object, Object, boolean);
+  }
+
+  @Deprecated public abstract class ProviderTestCase<T extends android.content.ContentProvider> extends android.test.InstrumentationTestCase {
+    ctor @Deprecated public ProviderTestCase(Class<T>, String);
+    method @Deprecated public android.test.mock.MockContentResolver getMockContentResolver();
+    method @Deprecated public android.test.IsolatedContext getMockContext();
+    method @Deprecated public T getProvider();
+    method @Deprecated public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, Class<T>, String, String, int, String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public abstract class ProviderTestCase2<T extends android.content.ContentProvider> extends android.test.AndroidTestCase {
+    ctor public ProviderTestCase2(Class<T>, String);
+    method public android.test.mock.MockContentResolver getMockContentResolver();
+    method public android.test.IsolatedContext getMockContext();
+    method public T getProvider();
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, String, Class<T>, String, String, int, String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  @Deprecated public class RenamingDelegatingContext extends android.content.ContextWrapper {
+    ctor @Deprecated public RenamingDelegatingContext(android.content.Context, String);
+    ctor @Deprecated public RenamingDelegatingContext(android.content.Context, android.content.Context, String);
+    method @Deprecated public String getDatabasePrefix();
+    method @Deprecated public void makeExistingFilesAndDbsAccessible();
+    method @Deprecated public static <T extends android.content.ContentProvider> T providerWithRenamedContext(Class<T>, android.content.Context, String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @Deprecated public static <T extends android.content.ContentProvider> T providerWithRenamedContext(Class<T>, android.content.Context, String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  @Deprecated public abstract class ServiceTestCase<T extends android.app.Service> extends android.test.AndroidTestCase {
+    ctor @Deprecated public ServiceTestCase(Class<T>);
+    method @Deprecated protected android.os.IBinder bindService(android.content.Intent);
+    method @Deprecated public android.app.Application getApplication();
+    method @Deprecated public T getService();
+    method @Deprecated public android.content.Context getSystemContext();
+    method @Deprecated public void setApplication(android.app.Application);
+    method @Deprecated protected void setupService();
+    method @Deprecated protected void shutdownService();
+    method @Deprecated protected void startService(android.content.Intent);
+    method @Deprecated public void testServiceTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  @Deprecated public abstract class SingleLaunchActivityTestCase<T extends android.app.Activity> extends android.test.InstrumentationTestCase {
+    ctor @Deprecated public SingleLaunchActivityTestCase(String, Class<T>);
+    method @Deprecated public T getActivity();
+    method @Deprecated public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
+  }
+
+  @Deprecated public class SyncBaseInstrumentation extends android.test.InstrumentationTestCase {
+    ctor @Deprecated public SyncBaseInstrumentation();
+    method @Deprecated protected void cancelSyncsandDisableAutoSync();
+    method @Deprecated protected void syncProvider(android.net.Uri, String, String) throws java.lang.Exception;
+  }
+
+  @Deprecated public interface TestSuiteProvider {
+    method @Deprecated public junit.framework.TestSuite getTestSuite();
+  }
+
+  @Deprecated public class TouchUtils {
+    ctor @Deprecated public TouchUtils();
+    method @Deprecated public static void clickView(android.test.InstrumentationTestCase, android.view.View);
+    method @Deprecated public static void drag(android.test.ActivityInstrumentationTestCase, float, float, float, float, int);
+    method @Deprecated public static void drag(android.test.InstrumentationTestCase, float, float, float, float, int);
+    method @Deprecated public static void dragQuarterScreenDown(android.test.ActivityInstrumentationTestCase);
+    method @Deprecated public static void dragQuarterScreenDown(android.test.InstrumentationTestCase, android.app.Activity);
+    method @Deprecated public static void dragQuarterScreenUp(android.test.ActivityInstrumentationTestCase);
+    method @Deprecated public static void dragQuarterScreenUp(android.test.InstrumentationTestCase, android.app.Activity);
+    method @Deprecated public static int dragViewBy(android.test.ActivityInstrumentationTestCase, android.view.View, int, int, int);
+    method @Deprecated public static int dragViewBy(android.test.InstrumentationTestCase, android.view.View, int, int, int);
+    method @Deprecated public static int dragViewTo(android.test.ActivityInstrumentationTestCase, android.view.View, int, int, int);
+    method @Deprecated public static int dragViewTo(android.test.InstrumentationTestCase, android.view.View, int, int, int);
+    method @Deprecated public static void dragViewToBottom(android.test.ActivityInstrumentationTestCase, android.view.View);
+    method @Deprecated public static void dragViewToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.View);
+    method @Deprecated public static void dragViewToBottom(android.test.ActivityInstrumentationTestCase, android.view.View, int);
+    method @Deprecated public static void dragViewToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.View, int);
+    method @Deprecated public static void dragViewToTop(android.test.ActivityInstrumentationTestCase, android.view.View);
+    method @Deprecated public static void dragViewToTop(android.test.ActivityInstrumentationTestCase, android.view.View, int);
+    method @Deprecated public static void dragViewToTop(android.test.InstrumentationTestCase, android.view.View);
+    method @Deprecated public static void dragViewToTop(android.test.InstrumentationTestCase, android.view.View, int);
+    method @Deprecated public static int dragViewToX(android.test.ActivityInstrumentationTestCase, android.view.View, int, int);
+    method @Deprecated public static int dragViewToX(android.test.InstrumentationTestCase, android.view.View, int, int);
+    method @Deprecated public static int dragViewToY(android.test.ActivityInstrumentationTestCase, android.view.View, int, int);
+    method @Deprecated public static int dragViewToY(android.test.InstrumentationTestCase, android.view.View, int, int);
+    method @Deprecated public static void longClickView(android.test.ActivityInstrumentationTestCase, android.view.View);
+    method @Deprecated public static void longClickView(android.test.InstrumentationTestCase, android.view.View);
+    method @Deprecated public static void scrollToBottom(android.test.ActivityInstrumentationTestCase, android.view.ViewGroup);
+    method @Deprecated public static void scrollToBottom(android.test.InstrumentationTestCase, android.app.Activity, android.view.ViewGroup);
+    method @Deprecated public static void scrollToTop(android.test.ActivityInstrumentationTestCase, android.view.ViewGroup);
+    method @Deprecated public static void scrollToTop(android.test.InstrumentationTestCase, android.app.Activity, android.view.ViewGroup);
+    method @Deprecated public static void tapView(android.test.InstrumentationTestCase, android.view.View);
+    method @Deprecated public static void touchAndCancelView(android.test.InstrumentationTestCase, android.view.View);
+  }
+
+  @Deprecated public class ViewAsserts {
+    method @Deprecated public static void assertBaselineAligned(android.view.View, android.view.View);
+    method @Deprecated public static void assertBottomAligned(android.view.View, android.view.View);
+    method @Deprecated public static void assertBottomAligned(android.view.View, android.view.View, int);
+    method @Deprecated public static void assertGroupContains(android.view.ViewGroup, android.view.View);
+    method @Deprecated public static void assertGroupIntegrity(android.view.ViewGroup);
+    method @Deprecated public static void assertGroupNotContains(android.view.ViewGroup, android.view.View);
+    method @Deprecated public static void assertHasScreenCoordinates(android.view.View, android.view.View, int, int);
+    method @Deprecated public static void assertHorizontalCenterAligned(android.view.View, android.view.View);
+    method @Deprecated public static void assertLeftAligned(android.view.View, android.view.View);
+    method @Deprecated public static void assertLeftAligned(android.view.View, android.view.View, int);
+    method @Deprecated public static void assertOffScreenAbove(android.view.View, android.view.View);
+    method @Deprecated public static void assertOffScreenBelow(android.view.View, android.view.View);
+    method @Deprecated public static void assertOnScreen(android.view.View, android.view.View);
+    method @Deprecated public static void assertRightAligned(android.view.View, android.view.View);
+    method @Deprecated public static void assertRightAligned(android.view.View, android.view.View, int);
+    method @Deprecated public static void assertTopAligned(android.view.View, android.view.View);
+    method @Deprecated public static void assertTopAligned(android.view.View, android.view.View, int);
+    method @Deprecated public static void assertVerticalCenterAligned(android.view.View, android.view.View);
+  }
+
+}
+
+package android.test.suitebuilder {
+
+  @Deprecated public class TestMethod {
+    ctor @Deprecated public TestMethod(java.lang.reflect.Method, Class<? extends junit.framework.TestCase>);
+    ctor @Deprecated public TestMethod(String, Class<? extends junit.framework.TestCase>);
+    ctor @Deprecated public TestMethod(junit.framework.TestCase);
+    method @Deprecated public junit.framework.TestCase createTest() throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException;
+    method @Deprecated public <T extends java.lang.annotation.Annotation> T getAnnotation(Class<T>);
+    method @Deprecated public Class<? extends junit.framework.TestCase> getEnclosingClass();
+    method @Deprecated public String getEnclosingClassname();
+    method @Deprecated public String getName();
+  }
+
+  @Deprecated public class TestSuiteBuilder {
+    ctor @Deprecated public TestSuiteBuilder(Class);
+    ctor @Deprecated public TestSuiteBuilder(String, ClassLoader);
+    method @Deprecated public final junit.framework.TestSuite build();
+    method @Deprecated public android.test.suitebuilder.TestSuiteBuilder excludePackages(java.lang.String...);
+    method @Deprecated protected String getSuiteName();
+    method @Deprecated public final android.test.suitebuilder.TestSuiteBuilder includeAllPackagesUnderHere();
+    method @Deprecated public android.test.suitebuilder.TestSuiteBuilder includePackages(java.lang.String...);
+    method @Deprecated public android.test.suitebuilder.TestSuiteBuilder named(String);
+  }
+
+  @Deprecated public static class TestSuiteBuilder.FailedToCreateTests extends junit.framework.TestCase {
+    ctor @Deprecated public TestSuiteBuilder.FailedToCreateTests(Exception);
+    method @Deprecated public void testSuiteConstructionFailed();
+  }
+
+  @Deprecated public class UnitTestSuiteBuilder extends android.test.suitebuilder.TestSuiteBuilder {
+    ctor @Deprecated public UnitTestSuiteBuilder(Class);
+    ctor @Deprecated public UnitTestSuiteBuilder(String, ClassLoader);
+  }
+
+}
+
+package junit.runner {
+
+  public abstract class BaseTestRunner implements junit.framework.TestListener {
+    ctor public BaseTestRunner();
+    method public void addError(junit.framework.Test, Throwable);
+    method public void addFailure(junit.framework.Test, junit.framework.AssertionFailedError);
+    method protected void clearStatus();
+    method public String elapsedTimeAsString(long);
+    method public void endTest(junit.framework.Test);
+    method public String extractClassName(String);
+    method public static String getFilteredTrace(Throwable);
+    method public static String getFilteredTrace(String);
+    method @Deprecated public junit.runner.TestSuiteLoader getLoader();
+    method public static String getPreference(String);
+    method public static int getPreference(String, int);
+    method protected static java.util.Properties getPreferences();
+    method public junit.framework.Test getTest(String);
+    method @Deprecated public static boolean inVAJava();
+    method protected Class<?> loadSuiteClass(String) throws java.lang.ClassNotFoundException;
+    method protected String processArguments(String[]);
+    method protected abstract void runFailed(String);
+    method public static void savePreferences() throws java.io.IOException;
+    method public void setLoading(boolean);
+    method public void setPreference(String, String);
+    method protected static void setPreferences(java.util.Properties);
+    method protected static boolean showStackRaw();
+    method public void startTest(junit.framework.Test);
+    method public abstract void testEnded(String);
+    method public abstract void testFailed(int, junit.framework.Test, Throwable);
+    method public abstract void testStarted(String);
+    method public static String truncate(String);
+    method protected boolean useReloadingTestSuiteLoader();
+    field public static final String SUITE_METHODNAME = "suite";
+  }
+
+  public interface TestSuiteLoader {
+    method public Class load(String) throws java.lang.ClassNotFoundException;
+    method public Class reload(Class) throws java.lang.ClassNotFoundException;
+  }
+
+  public class Version {
+    method public static String id();
+  }
+
+}
+
diff --git a/32/public/api/android.txt b/32/public/api/android.txt
new file mode 100644
index 0000000..9c48c06
--- /dev/null
+++ b/32/public/api/android.txt
@@ -0,0 +1,86656 @@
+// Signature format: 2.0
+package android {
+
+  public final class Manifest {
+    ctor public Manifest();
+  }
+
+  public static final class Manifest.permission {
+    ctor public Manifest.permission();
+    field public static final String ACCEPT_HANDOVER = "android.permission.ACCEPT_HANDOVER";
+    field public static final String ACCESS_BACKGROUND_LOCATION = "android.permission.ACCESS_BACKGROUND_LOCATION";
+    field public static final String ACCESS_BLOBS_ACROSS_USERS = "android.permission.ACCESS_BLOBS_ACROSS_USERS";
+    field public static final String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
+    field public static final String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION";
+    field public static final String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
+    field public static final String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS";
+    field public static final String ACCESS_MEDIA_LOCATION = "android.permission.ACCESS_MEDIA_LOCATION";
+    field public static final String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE";
+    field public static final String ACCESS_NOTIFICATION_POLICY = "android.permission.ACCESS_NOTIFICATION_POLICY";
+    field public static final String ACCESS_WIFI_STATE = "android.permission.ACCESS_WIFI_STATE";
+    field public static final String ACCOUNT_MANAGER = "android.permission.ACCOUNT_MANAGER";
+    field public static final String ACTIVITY_RECOGNITION = "android.permission.ACTIVITY_RECOGNITION";
+    field public static final String ADD_VOICEMAIL = "com.android.voicemail.permission.ADD_VOICEMAIL";
+    field public static final String ANSWER_PHONE_CALLS = "android.permission.ANSWER_PHONE_CALLS";
+    field public static final String BATTERY_STATS = "android.permission.BATTERY_STATS";
+    field public static final String BIND_ACCESSIBILITY_SERVICE = "android.permission.BIND_ACCESSIBILITY_SERVICE";
+    field public static final String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
+    field public static final String BIND_AUTOFILL_SERVICE = "android.permission.BIND_AUTOFILL_SERVICE";
+    field public static final String BIND_CALL_REDIRECTION_SERVICE = "android.permission.BIND_CALL_REDIRECTION_SERVICE";
+    field public static final String BIND_CARRIER_MESSAGING_CLIENT_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE";
+    field @Deprecated public static final String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE";
+    field public static final String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES";
+    field @Deprecated public static final String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
+    field public static final String BIND_COMPANION_DEVICE_SERVICE = "android.permission.BIND_COMPANION_DEVICE_SERVICE";
+    field public static final String BIND_CONDITION_PROVIDER_SERVICE = "android.permission.BIND_CONDITION_PROVIDER_SERVICE";
+    field public static final String BIND_CONTROLS = "android.permission.BIND_CONTROLS";
+    field public static final String BIND_DEVICE_ADMIN = "android.permission.BIND_DEVICE_ADMIN";
+    field public static final String BIND_DREAM_SERVICE = "android.permission.BIND_DREAM_SERVICE";
+    field public static final String BIND_INCALL_SERVICE = "android.permission.BIND_INCALL_SERVICE";
+    field public static final String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
+    field public static final String BIND_MIDI_DEVICE_SERVICE = "android.permission.BIND_MIDI_DEVICE_SERVICE";
+    field public static final String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
+    field public static final String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
+    field public static final String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
+    field public static final String BIND_QUICK_ACCESS_WALLET_SERVICE = "android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE";
+    field public static final String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE";
+    field public static final String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
+    field public static final String BIND_SCREENING_SERVICE = "android.permission.BIND_SCREENING_SERVICE";
+    field public static final String BIND_TELECOM_CONNECTION_SERVICE = "android.permission.BIND_TELECOM_CONNECTION_SERVICE";
+    field public static final String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
+    field public static final String BIND_TV_INPUT = "android.permission.BIND_TV_INPUT";
+    field public static final String BIND_VISUAL_VOICEMAIL_SERVICE = "android.permission.BIND_VISUAL_VOICEMAIL_SERVICE";
+    field public static final String BIND_VOICE_INTERACTION = "android.permission.BIND_VOICE_INTERACTION";
+    field public static final String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE";
+    field public static final String BIND_VR_LISTENER_SERVICE = "android.permission.BIND_VR_LISTENER_SERVICE";
+    field public static final String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER";
+    field public static final String BLUETOOTH = "android.permission.BLUETOOTH";
+    field public static final String BLUETOOTH_ADMIN = "android.permission.BLUETOOTH_ADMIN";
+    field public static final String BLUETOOTH_ADVERTISE = "android.permission.BLUETOOTH_ADVERTISE";
+    field public static final String BLUETOOTH_CONNECT = "android.permission.BLUETOOTH_CONNECT";
+    field public static final String BLUETOOTH_PRIVILEGED = "android.permission.BLUETOOTH_PRIVILEGED";
+    field public static final String BLUETOOTH_SCAN = "android.permission.BLUETOOTH_SCAN";
+    field public static final String BODY_SENSORS = "android.permission.BODY_SENSORS";
+    field public static final String BROADCAST_PACKAGE_REMOVED = "android.permission.BROADCAST_PACKAGE_REMOVED";
+    field public static final String BROADCAST_SMS = "android.permission.BROADCAST_SMS";
+    field public static final String BROADCAST_STICKY = "android.permission.BROADCAST_STICKY";
+    field public static final String BROADCAST_WAP_PUSH = "android.permission.BROADCAST_WAP_PUSH";
+    field public static final String CALL_COMPANION_APP = "android.permission.CALL_COMPANION_APP";
+    field public static final String CALL_PHONE = "android.permission.CALL_PHONE";
+    field public static final String CALL_PRIVILEGED = "android.permission.CALL_PRIVILEGED";
+    field public static final String CAMERA = "android.permission.CAMERA";
+    field public static final String CAPTURE_AUDIO_OUTPUT = "android.permission.CAPTURE_AUDIO_OUTPUT";
+    field public static final String CHANGE_COMPONENT_ENABLED_STATE = "android.permission.CHANGE_COMPONENT_ENABLED_STATE";
+    field public static final String CHANGE_CONFIGURATION = "android.permission.CHANGE_CONFIGURATION";
+    field public static final String CHANGE_NETWORK_STATE = "android.permission.CHANGE_NETWORK_STATE";
+    field public static final String CHANGE_WIFI_MULTICAST_STATE = "android.permission.CHANGE_WIFI_MULTICAST_STATE";
+    field public static final String CHANGE_WIFI_STATE = "android.permission.CHANGE_WIFI_STATE";
+    field public static final String CLEAR_APP_CACHE = "android.permission.CLEAR_APP_CACHE";
+    field public static final String CONTROL_LOCATION_UPDATES = "android.permission.CONTROL_LOCATION_UPDATES";
+    field public static final String DELETE_CACHE_FILES = "android.permission.DELETE_CACHE_FILES";
+    field public static final String DELETE_PACKAGES = "android.permission.DELETE_PACKAGES";
+    field public static final String DIAGNOSTIC = "android.permission.DIAGNOSTIC";
+    field public static final String DISABLE_KEYGUARD = "android.permission.DISABLE_KEYGUARD";
+    field public static final String DUMP = "android.permission.DUMP";
+    field public static final String EXPAND_STATUS_BAR = "android.permission.EXPAND_STATUS_BAR";
+    field public static final String FACTORY_TEST = "android.permission.FACTORY_TEST";
+    field public static final String FOREGROUND_SERVICE = "android.permission.FOREGROUND_SERVICE";
+    field public static final String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS";
+    field public static final String GET_ACCOUNTS_PRIVILEGED = "android.permission.GET_ACCOUNTS_PRIVILEGED";
+    field public static final String GET_PACKAGE_SIZE = "android.permission.GET_PACKAGE_SIZE";
+    field @Deprecated public static final String GET_TASKS = "android.permission.GET_TASKS";
+    field public static final String GLOBAL_SEARCH = "android.permission.GLOBAL_SEARCH";
+    field public static final String HIDE_OVERLAY_WINDOWS = "android.permission.HIDE_OVERLAY_WINDOWS";
+    field public static final String HIGH_SAMPLING_RATE_SENSORS = "android.permission.HIGH_SAMPLING_RATE_SENSORS";
+    field public static final String INSTALL_LOCATION_PROVIDER = "android.permission.INSTALL_LOCATION_PROVIDER";
+    field public static final String INSTALL_PACKAGES = "android.permission.INSTALL_PACKAGES";
+    field public static final String INSTALL_SHORTCUT = "com.android.launcher.permission.INSTALL_SHORTCUT";
+    field public static final String INSTANT_APP_FOREGROUND_SERVICE = "android.permission.INSTANT_APP_FOREGROUND_SERVICE";
+    field public static final String INTERACT_ACROSS_PROFILES = "android.permission.INTERACT_ACROSS_PROFILES";
+    field public static final String INTERNET = "android.permission.INTERNET";
+    field public static final String KILL_BACKGROUND_PROCESSES = "android.permission.KILL_BACKGROUND_PROCESSES";
+    field public static final String LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK = "android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK";
+    field public static final String LOADER_USAGE_STATS = "android.permission.LOADER_USAGE_STATS";
+    field public static final String LOCATION_HARDWARE = "android.permission.LOCATION_HARDWARE";
+    field public static final String MANAGE_DOCUMENTS = "android.permission.MANAGE_DOCUMENTS";
+    field public static final String MANAGE_EXTERNAL_STORAGE = "android.permission.MANAGE_EXTERNAL_STORAGE";
+    field public static final String MANAGE_MEDIA = "android.permission.MANAGE_MEDIA";
+    field public static final String MANAGE_ONGOING_CALLS = "android.permission.MANAGE_ONGOING_CALLS";
+    field public static final String MANAGE_OWN_CALLS = "android.permission.MANAGE_OWN_CALLS";
+    field public static final String MASTER_CLEAR = "android.permission.MASTER_CLEAR";
+    field public static final String MEDIA_CONTENT_CONTROL = "android.permission.MEDIA_CONTENT_CONTROL";
+    field public static final String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS";
+    field public static final String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE";
+    field public static final String MOUNT_FORMAT_FILESYSTEMS = "android.permission.MOUNT_FORMAT_FILESYSTEMS";
+    field public static final String MOUNT_UNMOUNT_FILESYSTEMS = "android.permission.MOUNT_UNMOUNT_FILESYSTEMS";
+    field public static final String NFC = "android.permission.NFC";
+    field public static final String NFC_PREFERRED_PAYMENT_INFO = "android.permission.NFC_PREFERRED_PAYMENT_INFO";
+    field public static final String NFC_TRANSACTION_EVENT = "android.permission.NFC_TRANSACTION_EVENT";
+    field public static final String PACKAGE_USAGE_STATS = "android.permission.PACKAGE_USAGE_STATS";
+    field @Deprecated public static final String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY";
+    field @Deprecated public static final String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS";
+    field public static final String QUERY_ALL_PACKAGES = "android.permission.QUERY_ALL_PACKAGES";
+    field public static final String READ_CALENDAR = "android.permission.READ_CALENDAR";
+    field public static final String READ_CALL_LOG = "android.permission.READ_CALL_LOG";
+    field public static final String READ_CONTACTS = "android.permission.READ_CONTACTS";
+    field public static final String READ_EXTERNAL_STORAGE = "android.permission.READ_EXTERNAL_STORAGE";
+    field @Deprecated public static final String READ_INPUT_STATE = "android.permission.READ_INPUT_STATE";
+    field public static final String READ_LOGS = "android.permission.READ_LOGS";
+    field public static final String READ_PHONE_NUMBERS = "android.permission.READ_PHONE_NUMBERS";
+    field public static final String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
+    field public static final String READ_PRECISE_PHONE_STATE = "android.permission.READ_PRECISE_PHONE_STATE";
+    field public static final String READ_SMS = "android.permission.READ_SMS";
+    field public static final String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS";
+    field public static final String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS";
+    field public static final String READ_VOICEMAIL = "com.android.voicemail.permission.READ_VOICEMAIL";
+    field public static final String REBOOT = "android.permission.REBOOT";
+    field public static final String RECEIVE_BOOT_COMPLETED = "android.permission.RECEIVE_BOOT_COMPLETED";
+    field public static final String RECEIVE_MMS = "android.permission.RECEIVE_MMS";
+    field public static final String RECEIVE_SMS = "android.permission.RECEIVE_SMS";
+    field public static final String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH";
+    field public static final String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
+    field public static final String REORDER_TASKS = "android.permission.REORDER_TASKS";
+    field public static final String REQUEST_COMPANION_PROFILE_WATCH = "android.permission.REQUEST_COMPANION_PROFILE_WATCH";
+    field public static final String REQUEST_COMPANION_RUN_IN_BACKGROUND = "android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND";
+    field public static final String REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND = "android.permission.REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND";
+    field public static final String REQUEST_COMPANION_USE_DATA_IN_BACKGROUND = "android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND";
+    field public static final String REQUEST_DELETE_PACKAGES = "android.permission.REQUEST_DELETE_PACKAGES";
+    field public static final String REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
+    field public static final String REQUEST_INSTALL_PACKAGES = "android.permission.REQUEST_INSTALL_PACKAGES";
+    field public static final String REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE = "android.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE";
+    field public static final String REQUEST_PASSWORD_COMPLEXITY = "android.permission.REQUEST_PASSWORD_COMPLEXITY";
+    field @Deprecated public static final String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
+    field public static final String SCHEDULE_EXACT_ALARM = "android.permission.SCHEDULE_EXACT_ALARM";
+    field public static final String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
+    field public static final String SEND_SMS = "android.permission.SEND_SMS";
+    field public static final String SET_ALARM = "com.android.alarm.permission.SET_ALARM";
+    field public static final String SET_ALWAYS_FINISH = "android.permission.SET_ALWAYS_FINISH";
+    field public static final String SET_ANIMATION_SCALE = "android.permission.SET_ANIMATION_SCALE";
+    field public static final String SET_DEBUG_APP = "android.permission.SET_DEBUG_APP";
+    field @Deprecated public static final String SET_PREFERRED_APPLICATIONS = "android.permission.SET_PREFERRED_APPLICATIONS";
+    field public static final String SET_PROCESS_LIMIT = "android.permission.SET_PROCESS_LIMIT";
+    field public static final String SET_TIME = "android.permission.SET_TIME";
+    field public static final String SET_TIME_ZONE = "android.permission.SET_TIME_ZONE";
+    field public static final String SET_WALLPAPER = "android.permission.SET_WALLPAPER";
+    field public static final String SET_WALLPAPER_HINTS = "android.permission.SET_WALLPAPER_HINTS";
+    field public static final String SIGNAL_PERSISTENT_PROCESSES = "android.permission.SIGNAL_PERSISTENT_PROCESSES";
+    field @Deprecated public static final String SMS_FINANCIAL_TRANSACTIONS = "android.permission.SMS_FINANCIAL_TRANSACTIONS";
+    field public static final String START_FOREGROUND_SERVICES_FROM_BACKGROUND = "android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND";
+    field public static final String START_VIEW_PERMISSION_USAGE = "android.permission.START_VIEW_PERMISSION_USAGE";
+    field public static final String STATUS_BAR = "android.permission.STATUS_BAR";
+    field public static final String SYSTEM_ALERT_WINDOW = "android.permission.SYSTEM_ALERT_WINDOW";
+    field public static final String TRANSMIT_IR = "android.permission.TRANSMIT_IR";
+    field public static final String UNINSTALL_SHORTCUT = "com.android.launcher.permission.UNINSTALL_SHORTCUT";
+    field public static final String UPDATE_DEVICE_STATS = "android.permission.UPDATE_DEVICE_STATS";
+    field public static final String UPDATE_PACKAGES_WITHOUT_USER_ACTION = "android.permission.UPDATE_PACKAGES_WITHOUT_USER_ACTION";
+    field public static final String USE_BIOMETRIC = "android.permission.USE_BIOMETRIC";
+    field @Deprecated public static final String USE_FINGERPRINT = "android.permission.USE_FINGERPRINT";
+    field public static final String USE_FULL_SCREEN_INTENT = "android.permission.USE_FULL_SCREEN_INTENT";
+    field public static final String USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER = "android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER";
+    field public static final String USE_SIP = "android.permission.USE_SIP";
+    field public static final String UWB_RANGING = "android.permission.UWB_RANGING";
+    field public static final String VIBRATE = "android.permission.VIBRATE";
+    field public static final String WAKE_LOCK = "android.permission.WAKE_LOCK";
+    field public static final String WRITE_APN_SETTINGS = "android.permission.WRITE_APN_SETTINGS";
+    field public static final String WRITE_CALENDAR = "android.permission.WRITE_CALENDAR";
+    field public static final String WRITE_CALL_LOG = "android.permission.WRITE_CALL_LOG";
+    field public static final String WRITE_CONTACTS = "android.permission.WRITE_CONTACTS";
+    field public static final String WRITE_EXTERNAL_STORAGE = "android.permission.WRITE_EXTERNAL_STORAGE";
+    field public static final String WRITE_GSERVICES = "android.permission.WRITE_GSERVICES";
+    field public static final String WRITE_SECURE_SETTINGS = "android.permission.WRITE_SECURE_SETTINGS";
+    field public static final String WRITE_SETTINGS = "android.permission.WRITE_SETTINGS";
+    field public static final String WRITE_SYNC_SETTINGS = "android.permission.WRITE_SYNC_SETTINGS";
+    field public static final String WRITE_VOICEMAIL = "com.android.voicemail.permission.WRITE_VOICEMAIL";
+  }
+
+  public static final class Manifest.permission_group {
+    ctor public Manifest.permission_group();
+    field public static final String ACTIVITY_RECOGNITION = "android.permission-group.ACTIVITY_RECOGNITION";
+    field public static final String CALENDAR = "android.permission-group.CALENDAR";
+    field public static final String CALL_LOG = "android.permission-group.CALL_LOG";
+    field public static final String CAMERA = "android.permission-group.CAMERA";
+    field public static final String CONTACTS = "android.permission-group.CONTACTS";
+    field public static final String LOCATION = "android.permission-group.LOCATION";
+    field public static final String MICROPHONE = "android.permission-group.MICROPHONE";
+    field public static final String NEARBY_DEVICES = "android.permission-group.NEARBY_DEVICES";
+    field public static final String PHONE = "android.permission-group.PHONE";
+    field public static final String SENSORS = "android.permission-group.SENSORS";
+    field public static final String SMS = "android.permission-group.SMS";
+    field public static final String STORAGE = "android.permission-group.STORAGE";
+  }
+
+  public final class R {
+    ctor public R();
+  }
+
+  public static final class R.anim {
+    ctor public R.anim();
+    field public static final int accelerate_decelerate_interpolator = 17432580; // 0x10a0004
+    field public static final int accelerate_interpolator = 17432581; // 0x10a0005
+    field public static final int anticipate_interpolator = 17432583; // 0x10a0007
+    field public static final int anticipate_overshoot_interpolator = 17432585; // 0x10a0009
+    field public static final int bounce_interpolator = 17432586; // 0x10a000a
+    field public static final int cycle_interpolator = 17432588; // 0x10a000c
+    field public static final int decelerate_interpolator = 17432582; // 0x10a0006
+    field public static final int fade_in = 17432576; // 0x10a0000
+    field public static final int fade_out = 17432577; // 0x10a0001
+    field public static final int linear_interpolator = 17432587; // 0x10a000b
+    field public static final int overshoot_interpolator = 17432584; // 0x10a0008
+    field public static final int slide_in_left = 17432578; // 0x10a0002
+    field public static final int slide_out_right = 17432579; // 0x10a0003
+  }
+
+  public static final class R.animator {
+    ctor public R.animator();
+    field public static final int fade_in = 17498112; // 0x10b0000
+    field public static final int fade_out = 17498113; // 0x10b0001
+  }
+
+  public static final class R.array {
+    ctor public R.array();
+    field public static final int emailAddressTypes = 17235968; // 0x1070000
+    field public static final int imProtocols = 17235969; // 0x1070001
+    field public static final int organizationTypes = 17235970; // 0x1070002
+    field public static final int phoneTypes = 17235971; // 0x1070003
+    field public static final int postalAddressTypes = 17235972; // 0x1070004
+  }
+
+  public static final class R.attr {
+    ctor public R.attr();
+    field public static final int absListViewStyle = 16842858; // 0x101006a
+    field public static final int accessibilityEventTypes = 16843648; // 0x1010380
+    field public static final int accessibilityFeedbackType = 16843650; // 0x1010382
+    field public static final int accessibilityFlags = 16843652; // 0x1010384
+    field public static final int accessibilityHeading = 16844160; // 0x1010580
+    field public static final int accessibilityLiveRegion = 16843758; // 0x10103ee
+    field public static final int accessibilityPaneTitle = 16844156; // 0x101057c
+    field public static final int accessibilityTraversalAfter = 16843986; // 0x10104d2
+    field public static final int accessibilityTraversalBefore = 16843985; // 0x10104d1
+    field public static final int accountPreferences = 16843423; // 0x101029f
+    field public static final int accountType = 16843407; // 0x101028f
+    field public static final int action = 16842797; // 0x101002d
+    field public static final int actionBarDivider = 16843675; // 0x101039b
+    field public static final int actionBarItemBackground = 16843676; // 0x101039c
+    field public static final int actionBarPopupTheme = 16843917; // 0x101048d
+    field public static final int actionBarSize = 16843499; // 0x10102eb
+    field public static final int actionBarSplitStyle = 16843656; // 0x1010388
+    field public static final int actionBarStyle = 16843470; // 0x10102ce
+    field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
+    field public static final int actionBarTabStyle = 16843507; // 0x10102f3
+    field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
+    field public static final int actionBarTheme = 16843825; // 0x1010431
+    field public static final int actionBarWidgetTheme = 16843671; // 0x1010397
+    field public static final int actionButtonStyle = 16843480; // 0x10102d8
+    field public static final int actionDropDownStyle = 16843479; // 0x10102d7
+    field public static final int actionLayout = 16843515; // 0x10102fb
+    field public static final int actionMenuTextAppearance = 16843616; // 0x1010360
+    field public static final int actionMenuTextColor = 16843617; // 0x1010361
+    field public static final int actionModeBackground = 16843483; // 0x10102db
+    field public static final int actionModeCloseButtonStyle = 16843511; // 0x10102f7
+    field public static final int actionModeCloseDrawable = 16843484; // 0x10102dc
+    field public static final int actionModeCopyDrawable = 16843538; // 0x1010312
+    field public static final int actionModeCutDrawable = 16843537; // 0x1010311
+    field public static final int actionModeFindDrawable = 16843898; // 0x101047a
+    field public static final int actionModePasteDrawable = 16843539; // 0x1010313
+    field public static final int actionModeSelectAllDrawable = 16843646; // 0x101037e
+    field public static final int actionModeShareDrawable = 16843897; // 0x1010479
+    field public static final int actionModeSplitBackground = 16843677; // 0x101039d
+    field public static final int actionModeStyle = 16843668; // 0x1010394
+    field public static final int actionModeWebSearchDrawable = 16843899; // 0x101047b
+    field public static final int actionOverflowButtonStyle = 16843510; // 0x10102f6
+    field public static final int actionOverflowMenuStyle = 16843844; // 0x1010444
+    field public static final int actionProviderClass = 16843657; // 0x1010389
+    field public static final int actionViewClass = 16843516; // 0x10102fc
+    field public static final int activatedBackgroundIndicator = 16843517; // 0x10102fd
+    field public static final int activityCloseEnterAnimation = 16842938; // 0x10100ba
+    field public static final int activityCloseExitAnimation = 16842939; // 0x10100bb
+    field public static final int activityOpenEnterAnimation = 16842936; // 0x10100b8
+    field public static final int activityOpenExitAnimation = 16842937; // 0x10100b9
+    field public static final int addPrintersActivity = 16843750; // 0x10103e6
+    field public static final int addStatesFromChildren = 16842992; // 0x10100f0
+    field public static final int adjustViewBounds = 16843038; // 0x101011e
+    field public static final int advancedPrintOptionsActivity = 16843761; // 0x10103f1
+    field public static final int alertDialogIcon = 16843605; // 0x1010355
+    field public static final int alertDialogStyle = 16842845; // 0x101005d
+    field public static final int alertDialogTheme = 16843529; // 0x1010309
+    field public static final int alignmentMode = 16843642; // 0x101037a
+    field public static final int allContactsName = 16843468; // 0x10102cc
+    field public static final int allowAudioPlaybackCapture = 16844289; // 0x1010601
+    field public static final int allowBackup = 16843392; // 0x1010280
+    field public static final int allowClearUserData = 16842757; // 0x1010005
+    field public static final int allowClickWhenDisabled = 16844312; // 0x1010618
+    field public static final int allowEmbedded = 16843765; // 0x10103f5
+    field public static final int allowNativeHeapPointerTagging = 16844306; // 0x1010612
+    field public static final int allowParallelSyncs = 16843570; // 0x1010332
+    field public static final int allowSingleTap = 16843353; // 0x1010259
+    field public static final int allowTaskReparenting = 16843268; // 0x1010204
+    field public static final int allowUndo = 16843999; // 0x10104df
+    field public static final int alpha = 16843551; // 0x101031f
+    field public static final int alphabeticModifiers = 16844110; // 0x101054e
+    field public static final int alphabeticShortcut = 16843235; // 0x10101e3
+    field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
+    field public static final int alwaysRetainTaskState = 16843267; // 0x1010203
+    field @Deprecated public static final int amPmBackgroundColor = 16843941; // 0x10104a5
+    field @Deprecated public static final int amPmTextColor = 16843940; // 0x10104a4
+    field public static final int ambientShadowAlpha = 16843966; // 0x10104be
+    field public static final int angle = 16843168; // 0x10101a0
+    field public static final int animateFirstView = 16843477; // 0x10102d5
+    field public static final int animateLayoutChanges = 16843506; // 0x10102f2
+    field public static final int animateOnClick = 16843356; // 0x101025c
+    field public static final int animatedImageDrawable = 16844298; // 0x101060a
+    field public static final int animation = 16843213; // 0x10101cd
+    field public static final int animationCache = 16842989; // 0x10100ed
+    field public static final int animationDuration = 16843026; // 0x1010112
+    field public static final int animationOrder = 16843214; // 0x10101ce
+    field @Deprecated public static final int animationResolution = 16843546; // 0x101031a
+    field public static final int antialias = 16843034; // 0x101011a
+    field @Deprecated public static final int anyDensity = 16843372; // 0x101026c
+    field public static final int apduServiceBanner = 16843757; // 0x10103ed
+    field public static final int apiKey = 16843281; // 0x1010211
+    field public static final int appCategory = 16844101; // 0x1010545
+    field public static final int appComponentFactory = 16844154; // 0x101057a
+    field public static final int attributionTags = 16844354; // 0x1010642
+    field public static final int attributionsAreUserVisible = 16844363; // 0x101064b
+    field public static final int author = 16843444; // 0x10102b4
+    field public static final int authorities = 16842776; // 0x1010018
+    field public static final int autoAdvanceViewId = 16843535; // 0x101030f
+    field public static final int autoCompleteTextViewStyle = 16842859; // 0x101006b
+    field public static final int autoLink = 16842928; // 0x10100b0
+    field public static final int autoMirrored = 16843754; // 0x10103ea
+    field public static final int autoRemoveFromRecents = 16843847; // 0x1010447
+    field public static final int autoRevokePermissions = 16844307; // 0x1010613
+    field public static final int autoSizeMaxTextSize = 16844102; // 0x1010546
+    field public static final int autoSizeMinTextSize = 16844088; // 0x1010538
+    field public static final int autoSizePresetSizes = 16844087; // 0x1010537
+    field public static final int autoSizeStepGranularity = 16844086; // 0x1010536
+    field public static final int autoSizeTextType = 16844085; // 0x1010535
+    field public static final int autoStart = 16843445; // 0x10102b5
+    field @Deprecated public static final int autoText = 16843114; // 0x101016a
+    field public static final int autoUrlDetect = 16843404; // 0x101028c
+    field public static final int autoVerify = 16844014; // 0x10104ee
+    field public static final int autofillHints = 16844118; // 0x1010556
+    field public static final int autofilledHighlight = 16844136; // 0x1010568
+    field public static final int background = 16842964; // 0x10100d4
+    field public static final int backgroundDimAmount = 16842802; // 0x1010032
+    field public static final int backgroundDimEnabled = 16843295; // 0x101021f
+    field public static final int backgroundSplit = 16843659; // 0x101038b
+    field public static final int backgroundStacked = 16843658; // 0x101038a
+    field public static final int backgroundTint = 16843883; // 0x101046b
+    field public static final int backgroundTintMode = 16843884; // 0x101046c
+    field public static final int backupAgent = 16843391; // 0x101027f
+    field public static final int backupInForeground = 16844058; // 0x101051a
+    field public static final int banner = 16843762; // 0x10103f2
+    field public static final int baseline = 16843548; // 0x101031c
+    field public static final int baselineAlignBottom = 16843042; // 0x1010122
+    field public static final int baselineAligned = 16843046; // 0x1010126
+    field public static final int baselineAlignedChildIndex = 16843047; // 0x1010127
+    field public static final int bitmap = 16844054; // 0x1010516
+    field public static final int borderlessButtonStyle = 16843563; // 0x101032b
+    field public static final int bottom = 16843184; // 0x10101b0
+    field public static final int bottomBright = 16842957; // 0x10100cd
+    field public static final int bottomDark = 16842953; // 0x10100c9
+    field public static final int bottomLeftRadius = 16843179; // 0x10101ab
+    field public static final int bottomMedium = 16842958; // 0x10100ce
+    field public static final int bottomOffset = 16843351; // 0x1010257
+    field public static final int bottomRightRadius = 16843180; // 0x10101ac
+    field public static final int breadCrumbShortTitle = 16843524; // 0x1010304
+    field public static final int breadCrumbTitle = 16843523; // 0x1010303
+    field public static final int breakStrategy = 16843997; // 0x10104dd
+    field public static final int bufferType = 16843086; // 0x101014e
+    field public static final int button = 16843015; // 0x1010107
+    field public static final int buttonBarButtonStyle = 16843567; // 0x101032f
+    field public static final int buttonBarNegativeButtonStyle = 16843915; // 0x101048b
+    field public static final int buttonBarNeutralButtonStyle = 16843914; // 0x101048a
+    field public static final int buttonBarPositiveButtonStyle = 16843913; // 0x1010489
+    field public static final int buttonBarStyle = 16843566; // 0x101032e
+    field public static final int buttonCornerRadius = 16844149; // 0x1010575
+    field public static final int buttonGravity = 16844030; // 0x10104fe
+    field public static final int buttonStyle = 16842824; // 0x1010048
+    field public static final int buttonStyleInset = 16842826; // 0x101004a
+    field public static final int buttonStyleSmall = 16842825; // 0x1010049
+    field public static final int buttonStyleToggle = 16842827; // 0x101004b
+    field public static final int buttonTint = 16843887; // 0x101046f
+    field public static final int buttonTintMode = 16843888; // 0x1010470
+    field public static final int cacheColorHint = 16843009; // 0x1010101
+    field public static final int calendarTextColor = 16843931; // 0x101049b
+    field public static final int calendarViewShown = 16843596; // 0x101034c
+    field public static final int calendarViewStyle = 16843613; // 0x101035d
+    field public static final int canControlMagnification = 16844039; // 0x1010507
+    field public static final int canPauseRecording = 16844314; // 0x101061a
+    field public static final int canPerformGestures = 16844045; // 0x101050d
+    field public static final int canRecord = 16844060; // 0x101051c
+    field @Deprecated public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
+    field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9
+    field public static final int canRequestFingerprintGestures = 16844109; // 0x101054d
+    field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7
+    field public static final int canRetrieveWindowContent = 16843653; // 0x1010385
+    field public static final int canTakeScreenshot = 16844303; // 0x101060f
+    field public static final int candidatesTextStyleSpans = 16843312; // 0x1010230
+    field public static final int cantSaveState = 16844142; // 0x101056e
+    field @Deprecated public static final int capitalize = 16843113; // 0x1010169
+    field public static final int category = 16843752; // 0x10103e8
+    field public static final int centerBright = 16842956; // 0x10100cc
+    field public static final int centerColor = 16843275; // 0x101020b
+    field public static final int centerDark = 16842952; // 0x10100c8
+    field public static final int centerMedium = 16842959; // 0x10100cf
+    field public static final int centerX = 16843170; // 0x10101a2
+    field public static final int centerY = 16843171; // 0x10101a3
+    field public static final int certDigest = 16844104; // 0x1010548
+    field public static final int checkBoxPreferenceStyle = 16842895; // 0x101008f
+    field public static final int checkMark = 16843016; // 0x1010108
+    field public static final int checkMarkTint = 16843943; // 0x10104a7
+    field public static final int checkMarkTintMode = 16843944; // 0x10104a8
+    field public static final int checkable = 16843237; // 0x10101e5
+    field public static final int checkableBehavior = 16843232; // 0x10101e0
+    field public static final int checkboxStyle = 16842860; // 0x101006c
+    field public static final int checked = 16843014; // 0x1010106
+    field public static final int checkedButton = 16843080; // 0x1010148
+    field public static final int checkedTextViewStyle = 16843720; // 0x10103c8
+    field public static final int childDivider = 16843025; // 0x1010111
+    field public static final int childIndicator = 16843020; // 0x101010c
+    field public static final int childIndicatorEnd = 16843732; // 0x10103d4
+    field public static final int childIndicatorLeft = 16843023; // 0x101010f
+    field public static final int childIndicatorRight = 16843024; // 0x1010110
+    field public static final int childIndicatorStart = 16843731; // 0x10103d3
+    field public static final int choiceMode = 16843051; // 0x101012b
+    field public static final int classLoader = 16844139; // 0x101056b
+    field public static final int clearTaskOnLaunch = 16842773; // 0x1010015
+    field public static final int clickable = 16842981; // 0x10100e5
+    field public static final int clipChildren = 16842986; // 0x10100ea
+    field public static final int clipOrientation = 16843274; // 0x101020a
+    field public static final int clipToOutline = 16844328; // 0x1010628
+    field public static final int clipToPadding = 16842987; // 0x10100eb
+    field public static final int closeIcon = 16843905; // 0x1010481
+    field @Deprecated public static final int codes = 16843330; // 0x1010242
+    field public static final int collapseColumns = 16843083; // 0x101014b
+    field public static final int collapseContentDescription = 16843984; // 0x10104d0
+    field public static final int collapseIcon = 16844031; // 0x10104ff
+    field public static final int color = 16843173; // 0x10101a5
+    field public static final int colorAccent = 16843829; // 0x1010435
+    field public static final int colorActivatedHighlight = 16843664; // 0x1010390
+    field public static final int colorBackground = 16842801; // 0x1010031
+    field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
+    field public static final int colorBackgroundFloating = 16844002; // 0x10104e2
+    field public static final int colorButtonNormal = 16843819; // 0x101042b
+    field public static final int colorControlActivated = 16843818; // 0x101042a
+    field public static final int colorControlHighlight = 16843820; // 0x101042c
+    field public static final int colorControlNormal = 16843817; // 0x1010429
+    field public static final int colorEdgeEffect = 16843982; // 0x10104ce
+    field public static final int colorError = 16844099; // 0x1010543
+    field public static final int colorFocusedHighlight = 16843663; // 0x101038f
+    field public static final int colorForeground = 16842800; // 0x1010030
+    field public static final int colorForegroundInverse = 16843270; // 0x1010206
+    field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
+    field public static final int colorMode = 16844106; // 0x101054a
+    field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
+    field public static final int colorPressedHighlight = 16843661; // 0x101038d
+    field public static final int colorPrimary = 16843827; // 0x1010433
+    field public static final int colorPrimaryDark = 16843828; // 0x1010434
+    field public static final int colorSecondary = 16844080; // 0x1010530
+    field public static final int columnCount = 16843639; // 0x1010377
+    field public static final int columnDelay = 16843215; // 0x10101cf
+    field public static final int columnOrderPreserved = 16843640; // 0x1010378
+    field public static final int columnWidth = 16843031; // 0x1010117
+    field public static final int commitIcon = 16843909; // 0x1010485
+    field public static final int compatibleWidthLimitDp = 16843621; // 0x1010365
+    field public static final int completionHint = 16843122; // 0x1010172
+    field public static final int completionHintView = 16843123; // 0x1010173
+    field public static final int completionThreshold = 16843124; // 0x1010174
+    field public static final int configChanges = 16842783; // 0x101001f
+    field public static final int configure = 16843357; // 0x101025d
+    field public static final int constantSize = 16843158; // 0x1010196
+    field public static final int content = 16843355; // 0x101025b
+    field public static final int contentAgeHint = 16843961; // 0x10104b9
+    field public static final int contentAuthority = 16843408; // 0x1010290
+    field public static final int contentDescription = 16843379; // 0x1010273
+    field public static final int contentInsetEnd = 16843860; // 0x1010454
+    field public static final int contentInsetEndWithActions = 16844067; // 0x1010523
+    field public static final int contentInsetLeft = 16843861; // 0x1010455
+    field public static final int contentInsetRight = 16843862; // 0x1010456
+    field public static final int contentInsetStart = 16843859; // 0x1010453
+    field public static final int contentInsetStartWithNavigation = 16844066; // 0x1010522
+    field public static final int contextClickable = 16844007; // 0x10104e7
+    field public static final int contextDescription = 16844078; // 0x101052e
+    field public static final int contextPopupMenuStyle = 16844033; // 0x1010501
+    field public static final int contextUri = 16844077; // 0x101052d
+    field public static final int controlX1 = 16843772; // 0x10103fc
+    field public static final int controlX2 = 16843774; // 0x10103fe
+    field public static final int controlY1 = 16843773; // 0x10103fd
+    field public static final int controlY2 = 16843775; // 0x10103ff
+    field public static final int countDown = 16844059; // 0x101051b
+    field public static final int country = 16843962; // 0x10104ba
+    field public static final int cropToPadding = 16843043; // 0x1010123
+    field public static final int crossProfile = 16844302; // 0x101060e
+    field public static final int cursorVisible = 16843090; // 0x1010152
+    field public static final int customNavigationLayout = 16843474; // 0x10102d2
+    field public static final int customTokens = 16843579; // 0x101033b
+    field public static final int cycles = 16843220; // 0x10101d4
+    field public static final int dashGap = 16843175; // 0x10101a7
+    field public static final int dashWidth = 16843174; // 0x10101a6
+    field public static final int data = 16842798; // 0x101002e
+    field public static final int dataExtractionRules = 16844350; // 0x101063e
+    field public static final int datePickerDialogTheme = 16843948; // 0x10104ac
+    field public static final int datePickerMode = 16843955; // 0x10104b3
+    field public static final int datePickerStyle = 16843612; // 0x101035c
+    field public static final int dateTextAppearance = 16843593; // 0x1010349
+    field @Deprecated public static final int dayOfWeekBackground = 16843924; // 0x1010494
+    field @Deprecated public static final int dayOfWeekTextAppearance = 16843925; // 0x1010495
+    field public static final int debuggable = 16842767; // 0x101000f
+    field public static final int defaultFocusHighlightEnabled = 16844130; // 0x1010562
+    field public static final int defaultHeight = 16844021; // 0x10104f5
+    field public static final int defaultToDeviceProtectedStorage = 16844036; // 0x1010504
+    field public static final int defaultValue = 16843245; // 0x10101ed
+    field public static final int defaultWidth = 16844020; // 0x10104f4
+    field public static final int delay = 16843212; // 0x10101cc
+    field public static final int dependency = 16843244; // 0x10101ec
+    field public static final int descendantFocusability = 16842993; // 0x10100f1
+    field public static final int description = 16842784; // 0x1010020
+    field public static final int detachWallpaper = 16843430; // 0x10102a6
+    field public static final int detailColumn = 16843427; // 0x10102a3
+    field public static final int detailSocialSummary = 16843428; // 0x10102a4
+    field public static final int detailsElementBackground = 16843598; // 0x101034e
+    field public static final int dial = 16843010; // 0x1010102
+    field public static final int dialTint = 16844342; // 0x1010636
+    field public static final int dialTintMode = 16844343; // 0x1010637
+    field public static final int dialogCornerRadius = 16844145; // 0x1010571
+    field public static final int dialogIcon = 16843252; // 0x10101f4
+    field public static final int dialogLayout = 16843255; // 0x10101f7
+    field public static final int dialogMessage = 16843251; // 0x10101f3
+    field public static final int dialogPreferenceStyle = 16842897; // 0x1010091
+    field public static final int dialogPreferredPadding = 16843987; // 0x10104d3
+    field public static final int dialogTheme = 16843528; // 0x1010308
+    field public static final int dialogTitle = 16843250; // 0x10101f2
+    field public static final int digits = 16843110; // 0x1010166
+    field public static final int directBootAware = 16844037; // 0x1010505
+    field public static final int direction = 16843217; // 0x10101d1
+    field @Deprecated public static final int directionDescriptions = 16843681; // 0x10103a1
+    field public static final int directionPriority = 16843218; // 0x10101d2
+    field public static final int disableDependentsState = 16843249; // 0x10101f1
+    field public static final int disabledAlpha = 16842803; // 0x1010033
+    field public static final int displayOptions = 16843472; // 0x10102d0
+    field public static final int dither = 16843036; // 0x101011c
+    field public static final int divider = 16843049; // 0x1010129
+    field public static final int dividerHeight = 16843050; // 0x101012a
+    field public static final int dividerHorizontal = 16843564; // 0x101032c
+    field public static final int dividerPadding = 16843562; // 0x101032a
+    field public static final int dividerVertical = 16843530; // 0x101030a
+    field public static final int documentLaunchMode = 16843845; // 0x1010445
+    field public static final int drawSelectorOnTop = 16843004; // 0x10100fc
+    field public static final int drawable = 16843161; // 0x1010199
+    field public static final int drawableBottom = 16843118; // 0x101016e
+    field public static final int drawableEnd = 16843667; // 0x1010393
+    field public static final int drawableLeft = 16843119; // 0x101016f
+    field public static final int drawablePadding = 16843121; // 0x1010171
+    field public static final int drawableRight = 16843120; // 0x1010170
+    field public static final int drawableStart = 16843666; // 0x1010392
+    field public static final int drawableTint = 16843990; // 0x10104d6
+    field public static final int drawableTintMode = 16843991; // 0x10104d7
+    field public static final int drawableTop = 16843117; // 0x101016d
+    field public static final int drawingCacheQuality = 16842984; // 0x10100e8
+    field public static final int dropDownAnchor = 16843363; // 0x1010263
+    field public static final int dropDownHeight = 16843395; // 0x1010283
+    field public static final int dropDownHintAppearance = 16842888; // 0x1010088
+    field public static final int dropDownHorizontalOffset = 16843436; // 0x10102ac
+    field public static final int dropDownItemStyle = 16842886; // 0x1010086
+    field public static final int dropDownListViewStyle = 16842861; // 0x101006d
+    field public static final int dropDownSelector = 16843125; // 0x1010175
+    field public static final int dropDownSpinnerStyle = 16843478; // 0x10102d6
+    field public static final int dropDownVerticalOffset = 16843437; // 0x10102ad
+    field public static final int dropDownWidth = 16843362; // 0x1010262
+    field public static final int duplicateParentState = 16842985; // 0x10100e9
+    field public static final int duration = 16843160; // 0x1010198
+    field public static final int editTextBackground = 16843602; // 0x1010352
+    field public static final int editTextColor = 16843601; // 0x1010351
+    field public static final int editTextPreferenceStyle = 16842898; // 0x1010092
+    field public static final int editTextStyle = 16842862; // 0x101006e
+    field @Deprecated public static final int editable = 16843115; // 0x101016b
+    field public static final int editorExtras = 16843300; // 0x1010224
+    field public static final int effectColor = 16844361; // 0x1010649
+    field public static final int elegantTextHeight = 16843869; // 0x101045d
+    field public static final int elevation = 16843840; // 0x1010440
+    field public static final int ellipsize = 16842923; // 0x10100ab
+    field public static final int ems = 16843096; // 0x1010158
+    field public static final int enableVrMode = 16844069; // 0x1010525
+    field public static final int enabled = 16842766; // 0x101000e
+    field public static final int end = 16843996; // 0x10104dc
+    field public static final int endColor = 16843166; // 0x101019e
+    field public static final int endX = 16844050; // 0x1010512
+    field public static final int endY = 16844051; // 0x1010513
+    field @Deprecated public static final int endYear = 16843133; // 0x101017d
+    field public static final int enforceNavigationBarContrast = 16844293; // 0x1010605
+    field public static final int enforceStatusBarContrast = 16844292; // 0x1010604
+    field public static final int enterFadeDuration = 16843532; // 0x101030c
+    field public static final int entries = 16842930; // 0x10100b2
+    field public static final int entryValues = 16843256; // 0x10101f8
+    field public static final int eventsInterceptionEnabled = 16843389; // 0x101027d
+    field public static final int excludeClass = 16843842; // 0x1010442
+    field public static final int excludeFromRecents = 16842775; // 0x1010017
+    field public static final int excludeId = 16843841; // 0x1010441
+    field public static final int excludeName = 16843854; // 0x101044e
+    field public static final int exitFadeDuration = 16843533; // 0x101030d
+    field public static final int expandableListPreferredChildIndicatorLeft = 16842834; // 0x1010052
+    field public static final int expandableListPreferredChildIndicatorRight = 16842835; // 0x1010053
+    field public static final int expandableListPreferredChildPaddingLeft = 16842831; // 0x101004f
+    field public static final int expandableListPreferredItemIndicatorLeft = 16842832; // 0x1010050
+    field public static final int expandableListPreferredItemIndicatorRight = 16842833; // 0x1010051
+    field public static final int expandableListPreferredItemPaddingLeft = 16842830; // 0x101004e
+    field public static final int expandableListViewStyle = 16842863; // 0x101006f
+    field public static final int expandableListViewWhiteStyle = 16843446; // 0x10102b6
+    field public static final int exported = 16842768; // 0x1010010
+    field public static final int externalService = 16844046; // 0x101050e
+    field public static final int extraTension = 16843371; // 0x101026b
+    field public static final int extractNativeLibs = 16844010; // 0x10104ea
+    field public static final int factor = 16843219; // 0x10101d3
+    field public static final int fadeDuration = 16843384; // 0x1010278
+    field public static final int fadeEnabled = 16843390; // 0x101027e
+    field public static final int fadeOffset = 16843383; // 0x1010277
+    field public static final int fadeScrollbars = 16843434; // 0x10102aa
+    field public static final int fadingEdge = 16842975; // 0x10100df
+    field public static final int fadingEdgeLength = 16842976; // 0x10100e0
+    field public static final int fadingMode = 16843745; // 0x10103e1
+    field public static final int fallbackLineSpacing = 16844155; // 0x101057b
+    field public static final int fastScrollAlwaysVisible = 16843573; // 0x1010335
+    field public static final int fastScrollEnabled = 16843302; // 0x1010226
+    field public static final int fastScrollOverlayPosition = 16843578; // 0x101033a
+    field public static final int fastScrollPreviewBackgroundLeft = 16843575; // 0x1010337
+    field public static final int fastScrollPreviewBackgroundRight = 16843576; // 0x1010338
+    field public static final int fastScrollStyle = 16843767; // 0x10103f7
+    field public static final int fastScrollTextColor = 16843609; // 0x1010359
+    field public static final int fastScrollThumbDrawable = 16843574; // 0x1010336
+    field public static final int fastScrollTrackDrawable = 16843577; // 0x1010339
+    field public static final int fillAfter = 16843197; // 0x10101bd
+    field public static final int fillAlpha = 16843980; // 0x10104cc
+    field public static final int fillBefore = 16843196; // 0x10101bc
+    field public static final int fillColor = 16843780; // 0x1010404
+    field public static final int fillEnabled = 16843343; // 0x101024f
+    field public static final int fillType = 16844062; // 0x101051e
+    field public static final int fillViewport = 16843130; // 0x101017a
+    field public static final int filter = 16843035; // 0x101011b
+    field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4
+    field public static final int fingerprintAuthDrawable = 16844008; // 0x10104e8
+    field public static final int finishOnCloseSystemDialogs = 16843431; // 0x10102a7
+    field public static final int finishOnTaskLaunch = 16842772; // 0x1010014
+    field public static final int firstBaselineToTopHeight = 16844157; // 0x101057d
+    field public static final int firstDayOfWeek = 16843581; // 0x101033d
+    field public static final int fitsSystemWindows = 16842973; // 0x10100dd
+    field public static final int flipInterval = 16843129; // 0x1010179
+    field public static final int focusable = 16842970; // 0x10100da
+    field public static final int focusableInTouchMode = 16842971; // 0x10100db
+    field public static final int focusedByDefault = 16844100; // 0x1010544
+    field @Deprecated public static final int focusedMonthDateColor = 16843587; // 0x1010343
+    field public static final int font = 16844082; // 0x1010532
+    field public static final int fontFamily = 16843692; // 0x10103ac
+    field public static final int fontFeatureSettings = 16843959; // 0x10104b7
+    field @Deprecated public static final int fontProviderAuthority = 16844112; // 0x1010550
+    field @Deprecated public static final int fontProviderCerts = 16844125; // 0x101055d
+    field @Deprecated public static final int fontProviderPackage = 16844119; // 0x1010557
+    field @Deprecated public static final int fontProviderQuery = 16844113; // 0x1010551
+    field public static final int fontProviderSystemFontFamily = 16844322; // 0x1010622
+    field public static final int fontStyle = 16844095; // 0x101053f
+    field public static final int fontVariationSettings = 16844144; // 0x1010570
+    field public static final int fontWeight = 16844083; // 0x1010533
+    field public static final int footerDividersEnabled = 16843311; // 0x101022f
+    field public static final int forceDarkAllowed = 16844172; // 0x101058c
+    field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521
+    field public static final int forceQueryable = 16844296; // 0x1010608
+    field public static final int forceUriPermissions = 16844191; // 0x101059f
+    field public static final int foreground = 16843017; // 0x1010109
+    field public static final int foregroundGravity = 16843264; // 0x1010200
+    field public static final int foregroundServiceType = 16844185; // 0x1010599
+    field public static final int foregroundTint = 16843885; // 0x101046d
+    field public static final int foregroundTintMode = 16843886; // 0x101046e
+    field public static final int format = 16843013; // 0x1010105
+    field public static final int format12Hour = 16843722; // 0x10103ca
+    field public static final int format24Hour = 16843723; // 0x10103cb
+    field public static final int fraction = 16843992; // 0x10104d8
+    field public static final int fragment = 16843491; // 0x10102e3
+    field public static final int fragmentAllowEnterTransitionOverlap = 16843976; // 0x10104c8
+    field public static final int fragmentAllowReturnTransitionOverlap = 16843977; // 0x10104c9
+    field public static final int fragmentCloseEnterAnimation = 16843495; // 0x10102e7
+    field public static final int fragmentCloseExitAnimation = 16843496; // 0x10102e8
+    field public static final int fragmentEnterTransition = 16843971; // 0x10104c3
+    field public static final int fragmentExitTransition = 16843970; // 0x10104c2
+    field public static final int fragmentFadeEnterAnimation = 16843497; // 0x10102e9
+    field public static final int fragmentFadeExitAnimation = 16843498; // 0x10102ea
+    field public static final int fragmentOpenEnterAnimation = 16843493; // 0x10102e5
+    field public static final int fragmentOpenExitAnimation = 16843494; // 0x10102e6
+    field public static final int fragmentReenterTransition = 16843975; // 0x10104c7
+    field public static final int fragmentReturnTransition = 16843973; // 0x10104c5
+    field public static final int fragmentSharedElementEnterTransition = 16843972; // 0x10104c4
+    field public static final int fragmentSharedElementReturnTransition = 16843974; // 0x10104c6
+    field public static final int freezesText = 16843116; // 0x101016c
+    field public static final int fromAlpha = 16843210; // 0x10101ca
+    field public static final int fromDegrees = 16843187; // 0x10101b3
+    field public static final int fromId = 16843850; // 0x101044a
+    field public static final int fromScene = 16843741; // 0x10103dd
+    field public static final int fromXDelta = 16843206; // 0x10101c6
+    field public static final int fromXScale = 16843202; // 0x10101c2
+    field public static final int fromYDelta = 16843208; // 0x10101c8
+    field public static final int fromYScale = 16843204; // 0x10101c4
+    field public static final int fullBackupContent = 16844011; // 0x10104eb
+    field public static final int fullBackupOnly = 16843891; // 0x1010473
+    field public static final int fullBright = 16842954; // 0x10100ca
+    field public static final int fullDark = 16842950; // 0x10100c6
+    field public static final int functionalTest = 16842787; // 0x1010023
+    field public static final int galleryItemBackground = 16842828; // 0x101004c
+    field public static final int galleryStyle = 16842864; // 0x1010070
+    field public static final int gestureColor = 16843381; // 0x1010275
+    field public static final int gestureStrokeAngleThreshold = 16843388; // 0x101027c
+    field public static final int gestureStrokeLengthThreshold = 16843386; // 0x101027a
+    field public static final int gestureStrokeSquarenessThreshold = 16843387; // 0x101027b
+    field public static final int gestureStrokeType = 16843385; // 0x1010279
+    field public static final int gestureStrokeWidth = 16843380; // 0x1010274
+    field public static final int glEsVersion = 16843393; // 0x1010281
+    field public static final int goIcon = 16843906; // 0x1010482
+    field public static final int gradientRadius = 16843172; // 0x10101a4
+    field public static final int grantUriPermissions = 16842779; // 0x101001b
+    field public static final int gravity = 16842927; // 0x10100af
+    field public static final int gridViewStyle = 16842865; // 0x1010071
+    field public static final int groupIndicator = 16843019; // 0x101010b
+    field public static final int gwpAsanMode = 16844310; // 0x1010616
+    field public static final int hand_hour = 16843011; // 0x1010103
+    field public static final int hand_hourTint = 16844344; // 0x1010638
+    field public static final int hand_hourTintMode = 16844345; // 0x1010639
+    field public static final int hand_minute = 16843012; // 0x1010104
+    field public static final int hand_minuteTint = 16844346; // 0x101063a
+    field public static final int hand_minuteTintMode = 16844347; // 0x101063b
+    field public static final int hand_second = 16844323; // 0x1010623
+    field public static final int hand_secondTint = 16844348; // 0x101063c
+    field public static final int hand_secondTintMode = 16844349; // 0x101063d
+    field public static final int handle = 16843354; // 0x101025a
+    field public static final int handleProfiling = 16842786; // 0x1010022
+    field public static final int hapticFeedbackEnabled = 16843358; // 0x101025e
+    field public static final int hardwareAccelerated = 16843475; // 0x10102d3
+    field public static final int hasCode = 16842764; // 0x101000c
+    field public static final int hasFragileUserData = 16844186; // 0x101059a
+    field @Deprecated public static final int headerAmPmTextAppearance = 16843936; // 0x10104a0
+    field public static final int headerBackground = 16843055; // 0x101012f
+    field @Deprecated public static final int headerDayOfMonthTextAppearance = 16843927; // 0x1010497
+    field public static final int headerDividersEnabled = 16843310; // 0x101022e
+    field @Deprecated public static final int headerMonthTextAppearance = 16843926; // 0x1010496
+    field @Deprecated public static final int headerTimeTextAppearance = 16843935; // 0x101049f
+    field @Deprecated public static final int headerYearTextAppearance = 16843928; // 0x1010498
+    field public static final int height = 16843093; // 0x1010155
+    field public static final int hideOnContentScroll = 16843843; // 0x1010443
+    field public static final int hint = 16843088; // 0x1010150
+    field public static final int homeAsUpIndicator = 16843531; // 0x101030b
+    field public static final int homeLayout = 16843549; // 0x101031d
+    field public static final int horizontalDivider = 16843053; // 0x101012d
+    field @Deprecated public static final int horizontalGap = 16843327; // 0x101023f
+    field public static final int horizontalScrollViewStyle = 16843603; // 0x1010353
+    field public static final int horizontalSpacing = 16843028; // 0x1010114
+    field public static final int host = 16842792; // 0x1010028
+    field public static final int hotSpotX = 16844055; // 0x1010517
+    field public static final int hotSpotY = 16844056; // 0x1010518
+    field public static final int htmlDescription = 16844299; // 0x101060b
+    field public static final int hyphenationFrequency = 16843998; // 0x10104de
+    field public static final int icon = 16842754; // 0x1010002
+    field @Deprecated public static final int iconPreview = 16843337; // 0x1010249
+    field public static final int iconSpaceReserved = 16844129; // 0x1010561
+    field public static final int iconTint = 16844126; // 0x101055e
+    field public static final int iconTintMode = 16844127; // 0x101055f
+    field public static final int iconifiedByDefault = 16843514; // 0x10102fa
+    field public static final int id = 16842960; // 0x10100d0
+    field public static final int identifier = 16844294; // 0x1010606
+    field public static final int ignoreGravity = 16843263; // 0x10101ff
+    field public static final int imageButtonStyle = 16842866; // 0x1010072
+    field public static final int imageWellStyle = 16842867; // 0x1010073
+    field public static final int imeActionId = 16843366; // 0x1010266
+    field public static final int imeActionLabel = 16843365; // 0x1010265
+    field public static final int imeExtractEnterAnimation = 16843368; // 0x1010268
+    field public static final int imeExtractExitAnimation = 16843369; // 0x1010269
+    field public static final int imeFullscreenBackground = 16843308; // 0x101022c
+    field public static final int imeOptions = 16843364; // 0x1010264
+    field public static final int imeSubtypeExtraValue = 16843502; // 0x10102ee
+    field public static final int imeSubtypeLocale = 16843500; // 0x10102ec
+    field public static final int imeSubtypeMode = 16843501; // 0x10102ed
+    field public static final int immersive = 16843456; // 0x10102c0
+    field public static final int importantForAccessibility = 16843690; // 0x10103aa
+    field public static final int importantForAutofill = 16844120; // 0x1010558
+    field public static final int importantForContentCapture = 16844295; // 0x1010607
+    field public static final int inAnimation = 16843127; // 0x1010177
+    field public static final int includeFontPadding = 16843103; // 0x101015f
+    field public static final int includeInGlobalSearch = 16843374; // 0x101026e
+    field public static final int indeterminate = 16843065; // 0x1010139
+    field public static final int indeterminateBehavior = 16843070; // 0x101013e
+    field public static final int indeterminateDrawable = 16843067; // 0x101013b
+    field public static final int indeterminateDuration = 16843069; // 0x101013d
+    field public static final int indeterminateOnly = 16843066; // 0x101013a
+    field public static final int indeterminateProgressStyle = 16843544; // 0x1010318
+    field public static final int indeterminateTint = 16843881; // 0x1010469
+    field public static final int indeterminateTintMode = 16843882; // 0x101046a
+    field public static final int indicatorEnd = 16843730; // 0x10103d2
+    field public static final int indicatorLeft = 16843021; // 0x101010d
+    field public static final int indicatorRight = 16843022; // 0x101010e
+    field public static final int indicatorStart = 16843729; // 0x10103d1
+    field public static final int inflatedId = 16842995; // 0x10100f3
+    field public static final int inheritShowWhenLocked = 16844188; // 0x101059c
+    field public static final int initOrder = 16842778; // 0x101001a
+    field public static final int initialKeyguardLayout = 16843714; // 0x10103c2
+    field public static final int initialLayout = 16843345; // 0x1010251
+    field public static final int innerRadius = 16843359; // 0x101025f
+    field public static final int innerRadiusRatio = 16843163; // 0x101019b
+    field @Deprecated public static final int inputMethod = 16843112; // 0x1010168
+    field public static final int inputType = 16843296; // 0x1010220
+    field public static final int inset = 16843957; // 0x10104b5
+    field public static final int insetBottom = 16843194; // 0x10101ba
+    field public static final int insetLeft = 16843191; // 0x10101b7
+    field public static final int insetRight = 16843192; // 0x10101b8
+    field public static final int insetTop = 16843193; // 0x10101b9
+    field public static final int installLocation = 16843447; // 0x10102b7
+    field public static final int interactiveUiTimeout = 16844181; // 0x1010595
+    field public static final int interpolator = 16843073; // 0x1010141
+    field public static final int isAccessibilityTool = 16844353; // 0x1010641
+    field public static final int isAlwaysSyncable = 16843571; // 0x1010333
+    field public static final int isAsciiCapable = 16843753; // 0x10103e9
+    field public static final int isAuxiliary = 16843647; // 0x101037f
+    field public static final int isDefault = 16843297; // 0x1010221
+    field public static final int isFeatureSplit = 16844123; // 0x101055b
+    field public static final int isGame = 16843764; // 0x10103f4
+    field public static final int isIndicator = 16843079; // 0x1010147
+    field public static final int isLightTheme = 16844176; // 0x1010590
+    field @Deprecated public static final int isModifier = 16843334; // 0x1010246
+    field @Deprecated public static final int isRepeatable = 16843336; // 0x1010248
+    field public static final int isScrollContainer = 16843342; // 0x101024e
+    field public static final int isSplitRequired = 16844177; // 0x1010591
+    field public static final int isStatic = 16844122; // 0x101055a
+    field @Deprecated public static final int isSticky = 16843335; // 0x1010247
+    field public static final int isolatedProcess = 16843689; // 0x10103a9
+    field public static final int isolatedSplits = 16844107; // 0x101054b
+    field public static final int itemBackground = 16843056; // 0x1010130
+    field public static final int itemIconDisabledAlpha = 16843057; // 0x1010131
+    field public static final int itemPadding = 16843565; // 0x101032d
+    field public static final int itemTextAppearance = 16843052; // 0x101012c
+    field public static final int justificationMode = 16844135; // 0x1010567
+    field public static final int keepScreenOn = 16843286; // 0x1010216
+    field public static final int key = 16843240; // 0x10101e8
+    field @Deprecated public static final int keyBackground = 16843315; // 0x1010233
+    field @Deprecated public static final int keyEdgeFlags = 16843333; // 0x1010245
+    field @Deprecated public static final int keyHeight = 16843326; // 0x101023e
+    field @Deprecated public static final int keyIcon = 16843340; // 0x101024c
+    field @Deprecated public static final int keyLabel = 16843339; // 0x101024b
+    field @Deprecated public static final int keyOutputText = 16843338; // 0x101024a
+    field @Deprecated public static final int keyPreviewHeight = 16843321; // 0x1010239
+    field @Deprecated public static final int keyPreviewLayout = 16843319; // 0x1010237
+    field @Deprecated public static final int keyPreviewOffset = 16843320; // 0x1010238
+    field public static final int keySet = 16843739; // 0x10103db
+    field @Deprecated public static final int keyTextColor = 16843318; // 0x1010236
+    field @Deprecated public static final int keyTextSize = 16843316; // 0x1010234
+    field @Deprecated public static final int keyWidth = 16843325; // 0x101023d
+    field public static final int keyboardLayout = 16843691; // 0x10103ab
+    field @Deprecated public static final int keyboardMode = 16843341; // 0x101024d
+    field public static final int keyboardNavigationCluster = 16844096; // 0x1010540
+    field public static final int keycode = 16842949; // 0x10100c5
+    field public static final int killAfterRestore = 16843420; // 0x101029c
+    field public static final int knownCerts = 16844330; // 0x101062a
+    field public static final int lStar = 16844359; // 0x1010647
+    field public static final int label = 16842753; // 0x1010001
+    field public static final int labelFor = 16843718; // 0x10103c6
+    field @Deprecated public static final int labelTextSize = 16843317; // 0x1010235
+    field public static final int languageTag = 16844040; // 0x1010508
+    field public static final int largeHeap = 16843610; // 0x101035a
+    field public static final int largeScreens = 16843398; // 0x1010286
+    field public static final int largestWidthLimitDp = 16843622; // 0x1010366
+    field public static final int lastBaselineToBottomHeight = 16844158; // 0x101057e
+    field public static final int launchMode = 16842781; // 0x101001d
+    field public static final int launchTaskBehindSourceAnimation = 16843922; // 0x1010492
+    field public static final int launchTaskBehindTargetAnimation = 16843921; // 0x1010491
+    field public static final int layerType = 16843604; // 0x1010354
+    field public static final int layout = 16842994; // 0x10100f2
+    field public static final int layoutAnimation = 16842988; // 0x10100ec
+    field public static final int layoutDirection = 16843698; // 0x10103b2
+    field public static final int layoutMode = 16843738; // 0x10103da
+    field public static final int layout_above = 16843140; // 0x1010184
+    field public static final int layout_alignBaseline = 16843142; // 0x1010186
+    field public static final int layout_alignBottom = 16843146; // 0x101018a
+    field public static final int layout_alignEnd = 16843706; // 0x10103ba
+    field public static final int layout_alignLeft = 16843143; // 0x1010187
+    field public static final int layout_alignParentBottom = 16843150; // 0x101018e
+    field public static final int layout_alignParentEnd = 16843708; // 0x10103bc
+    field public static final int layout_alignParentLeft = 16843147; // 0x101018b
+    field public static final int layout_alignParentRight = 16843149; // 0x101018d
+    field public static final int layout_alignParentStart = 16843707; // 0x10103bb
+    field public static final int layout_alignParentTop = 16843148; // 0x101018c
+    field public static final int layout_alignRight = 16843145; // 0x1010189
+    field public static final int layout_alignStart = 16843705; // 0x10103b9
+    field public static final int layout_alignTop = 16843144; // 0x1010188
+    field public static final int layout_alignWithParentIfMissing = 16843154; // 0x1010192
+    field public static final int layout_below = 16843141; // 0x1010185
+    field public static final int layout_centerHorizontal = 16843152; // 0x1010190
+    field public static final int layout_centerInParent = 16843151; // 0x101018f
+    field public static final int layout_centerVertical = 16843153; // 0x1010191
+    field public static final int layout_column = 16843084; // 0x101014c
+    field public static final int layout_columnSpan = 16843645; // 0x101037d
+    field public static final int layout_columnWeight = 16843865; // 0x1010459
+    field public static final int layout_gravity = 16842931; // 0x10100b3
+    field public static final int layout_height = 16842997; // 0x10100f5
+    field public static final int layout_margin = 16842998; // 0x10100f6
+    field public static final int layout_marginBottom = 16843002; // 0x10100fa
+    field public static final int layout_marginEnd = 16843702; // 0x10103b6
+    field public static final int layout_marginHorizontal = 16844091; // 0x101053b
+    field public static final int layout_marginLeft = 16842999; // 0x10100f7
+    field public static final int layout_marginRight = 16843001; // 0x10100f9
+    field public static final int layout_marginStart = 16843701; // 0x10103b5
+    field public static final int layout_marginTop = 16843000; // 0x10100f8
+    field public static final int layout_marginVertical = 16844092; // 0x101053c
+    field public static final int layout_row = 16843643; // 0x101037b
+    field public static final int layout_rowSpan = 16843644; // 0x101037c
+    field public static final int layout_rowWeight = 16843864; // 0x1010458
+    field public static final int layout_scale = 16843155; // 0x1010193
+    field public static final int layout_span = 16843085; // 0x101014d
+    field public static final int layout_toEndOf = 16843704; // 0x10103b8
+    field public static final int layout_toLeftOf = 16843138; // 0x1010182
+    field public static final int layout_toRightOf = 16843139; // 0x1010183
+    field public static final int layout_toStartOf = 16843703; // 0x10103b7
+    field public static final int layout_weight = 16843137; // 0x1010181
+    field public static final int layout_width = 16842996; // 0x10100f4
+    field public static final int layout_x = 16843135; // 0x101017f
+    field public static final int layout_y = 16843136; // 0x1010180
+    field public static final int left = 16843181; // 0x10101ad
+    field public static final int letterSpacing = 16843958; // 0x10104b6
+    field public static final int level = 16844032; // 0x1010500
+    field public static final int lineHeight = 16844159; // 0x101057f
+    field public static final int lineSpacingExtra = 16843287; // 0x1010217
+    field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
+    field public static final int lines = 16843092; // 0x1010154
+    field public static final int linksClickable = 16842929; // 0x10100b1
+    field public static final int listChoiceBackgroundIndicator = 16843504; // 0x10102f0
+    field public static final int listChoiceIndicatorMultiple = 16843290; // 0x101021a
+    field public static final int listChoiceIndicatorSingle = 16843289; // 0x1010219
+    field public static final int listDivider = 16843284; // 0x1010214
+    field public static final int listDividerAlertDialog = 16843525; // 0x1010305
+    field public static final int listMenuViewStyle = 16844018; // 0x10104f2
+    field public static final int listPopupWindowStyle = 16843519; // 0x10102ff
+    field public static final int listPreferredItemHeight = 16842829; // 0x101004d
+    field public static final int listPreferredItemHeightLarge = 16843654; // 0x1010386
+    field public static final int listPreferredItemHeightSmall = 16843655; // 0x1010387
+    field public static final int listPreferredItemPaddingEnd = 16843710; // 0x10103be
+    field public static final int listPreferredItemPaddingLeft = 16843683; // 0x10103a3
+    field public static final int listPreferredItemPaddingRight = 16843684; // 0x10103a4
+    field public static final int listPreferredItemPaddingStart = 16843709; // 0x10103bd
+    field public static final int listSelector = 16843003; // 0x10100fb
+    field public static final int listSeparatorTextViewStyle = 16843272; // 0x1010208
+    field public static final int listViewStyle = 16842868; // 0x1010074
+    field public static final int listViewWhiteStyle = 16842869; // 0x1010075
+    field public static final int lockTaskMode = 16844013; // 0x10104ed
+    field public static final int logo = 16843454; // 0x10102be
+    field public static final int logoDescription = 16844009; // 0x10104e9
+    field public static final int longClickable = 16842982; // 0x10100e6
+    field public static final int loopViews = 16843527; // 0x1010307
+    field public static final int manageSpaceActivity = 16842756; // 0x1010004
+    field public static final int mapViewStyle = 16842890; // 0x101008a
+    field public static final int marqueeRepeatLimit = 16843293; // 0x101021d
+    field public static final int matchOrder = 16843855; // 0x101044f
+    field public static final int max = 16843062; // 0x1010136
+    field public static final int maxAspectRatio = 16844128; // 0x1010560
+    field public static final int maxButtonHeight = 16844029; // 0x10104fd
+    field public static final int maxDate = 16843584; // 0x1010340
+    field public static final int maxEms = 16843095; // 0x1010157
+    field public static final int maxHeight = 16843040; // 0x1010120
+    field public static final int maxItemsPerRow = 16843060; // 0x1010134
+    field public static final int maxLength = 16843104; // 0x1010160
+    field public static final int maxLevel = 16843186; // 0x10101b2
+    field public static final int maxLines = 16843091; // 0x1010153
+    field public static final int maxLongVersionCode = 16844163; // 0x1010583
+    field public static final int maxRecents = 16843846; // 0x1010446
+    field public static final int maxResizeHeight = 16844339; // 0x1010633
+    field public static final int maxResizeWidth = 16844338; // 0x1010632
+    field public static final int maxRows = 16843059; // 0x1010133
+    field public static final int maxSdkVersion = 16843377; // 0x1010271
+    field public static final int maxWidth = 16843039; // 0x101011f
+    field public static final int maximumAngle = 16843903; // 0x101047f
+    field public static final int measureAllChildren = 16843018; // 0x101010a
+    field public static final int measureWithLargestChild = 16843476; // 0x10102d4
+    field public static final int mediaRouteButtonStyle = 16843693; // 0x10103ad
+    field public static final int mediaRouteTypes = 16843694; // 0x10103ae
+    field public static final int memtagMode = 16844324; // 0x1010624
+    field public static final int menuCategory = 16843230; // 0x10101de
+    field public static final int mimeGroup = 16844309; // 0x1010615
+    field public static final int mimeType = 16842790; // 0x1010026
+    field public static final int min = 16844089; // 0x1010539
+    field public static final int minAspectRatio = 16844187; // 0x101059b
+    field public static final int minDate = 16843583; // 0x101033f
+    field public static final int minEms = 16843098; // 0x101015a
+    field public static final int minHeight = 16843072; // 0x1010140
+    field public static final int minLevel = 16843185; // 0x10101b1
+    field public static final int minLines = 16843094; // 0x1010156
+    field public static final int minResizeHeight = 16843670; // 0x1010396
+    field public static final int minResizeWidth = 16843669; // 0x1010395
+    field public static final int minSdkVersion = 16843276; // 0x101020c
+    field public static final int minWidth = 16843071; // 0x101013f
+    field public static final int minimumHorizontalAngle = 16843901; // 0x101047d
+    field public static final int minimumVerticalAngle = 16843902; // 0x101047e
+    field public static final int mipMap = 16843725; // 0x10103cd
+    field public static final int mirrorForRtl = 16843726; // 0x10103ce
+    field public static final int mode = 16843134; // 0x101017e
+    field public static final int moreIcon = 16843061; // 0x1010135
+    field public static final int multiArch = 16843918; // 0x101048e
+    field public static final int multiprocess = 16842771; // 0x1010013
+    field public static final int name = 16842755; // 0x1010003
+    field public static final int nativeHeapZeroInitialized = 16844325; // 0x1010625
+    field public static final int navigationBarColor = 16843858; // 0x1010452
+    field public static final int navigationBarDividerColor = 16844141; // 0x101056d
+    field public static final int navigationContentDescription = 16843969; // 0x10104c1
+    field public static final int navigationIcon = 16843968; // 0x10104c0
+    field public static final int navigationMode = 16843471; // 0x10102cf
+    field public static final int negativeButtonText = 16843254; // 0x10101f6
+    field public static final int nestedScrollingEnabled = 16843830; // 0x1010436
+    field public static final int networkSecurityConfig = 16844071; // 0x1010527
+    field public static final int nextClusterForward = 16844098; // 0x1010542
+    field public static final int nextFocusDown = 16842980; // 0x10100e4
+    field public static final int nextFocusForward = 16843580; // 0x101033c
+    field public static final int nextFocusLeft = 16842977; // 0x10100e1
+    field public static final int nextFocusRight = 16842978; // 0x10100e2
+    field public static final int nextFocusUp = 16842979; // 0x10100e3
+    field public static final int noHistory = 16843309; // 0x101022d
+    field public static final int nonInteractiveUiTimeout = 16844175; // 0x101058f
+    field public static final int normalScreens = 16843397; // 0x1010285
+    field public static final int notificationTimeout = 16843651; // 0x1010383
+    field public static final int numColumns = 16843032; // 0x1010118
+    field public static final int numStars = 16843076; // 0x1010144
+    field public static final int numberPickerStyle = 16844068; // 0x1010524
+    field public static final int numbersBackgroundColor = 16843938; // 0x10104a2
+    field public static final int numbersInnerTextColor = 16844001; // 0x10104e1
+    field public static final int numbersSelectorColor = 16843939; // 0x10104a3
+    field public static final int numbersTextColor = 16843937; // 0x10104a1
+    field @Deprecated public static final int numeric = 16843109; // 0x1010165
+    field public static final int numericModifiers = 16844111; // 0x101054f
+    field public static final int numericShortcut = 16843236; // 0x10101e4
+    field public static final int offset = 16844052; // 0x1010514
+    field @Deprecated public static final int onClick = 16843375; // 0x101026f
+    field public static final int oneshot = 16843159; // 0x1010197
+    field public static final int opacity = 16843550; // 0x101031e
+    field public static final int opticalInsetBottom = 16844171; // 0x101058b
+    field public static final int opticalInsetLeft = 16844168; // 0x1010588
+    field public static final int opticalInsetRight = 16844170; // 0x101058a
+    field public static final int opticalInsetTop = 16844169; // 0x1010589
+    field public static final int order = 16843242; // 0x10101ea
+    field public static final int orderInCategory = 16843231; // 0x10101df
+    field public static final int ordering = 16843490; // 0x10102e2
+    field public static final int orderingFromXml = 16843239; // 0x10101e7
+    field public static final int orientation = 16842948; // 0x10100c4
+    field public static final int outAnimation = 16843128; // 0x1010178
+    field public static final int outlineAmbientShadowColor = 16844162; // 0x1010582
+    field public static final int outlineProvider = 16843960; // 0x10104b8
+    field public static final int outlineSpotShadowColor = 16844161; // 0x1010581
+    field public static final int overScrollFooter = 16843459; // 0x10102c3
+    field public static final int overScrollHeader = 16843458; // 0x10102c2
+    field public static final int overScrollMode = 16843457; // 0x10102c1
+    field public static final int overlapAnchor = 16843874; // 0x1010462
+    field public static final int overridesImplicitlyEnabledSubtype = 16843682; // 0x10103a2
+    field public static final int packageNames = 16843649; // 0x1010381
+    field public static final int packageType = 16844167; // 0x1010587
+    field public static final int padding = 16842965; // 0x10100d5
+    field public static final int paddingBottom = 16842969; // 0x10100d9
+    field public static final int paddingEnd = 16843700; // 0x10103b4
+    field public static final int paddingHorizontal = 16844093; // 0x101053d
+    field public static final int paddingLeft = 16842966; // 0x10100d6
+    field public static final int paddingMode = 16843863; // 0x1010457
+    field public static final int paddingRight = 16842968; // 0x10100d8
+    field public static final int paddingStart = 16843699; // 0x10103b3
+    field public static final int paddingTop = 16842967; // 0x10100d7
+    field public static final int paddingVertical = 16844094; // 0x101053e
+    field public static final int panelBackground = 16842846; // 0x101005e
+    field public static final int panelColorBackground = 16842849; // 0x1010061
+    field public static final int panelColorForeground = 16842848; // 0x1010060
+    field public static final int panelFullBackground = 16842847; // 0x101005f
+    field public static final int panelTextAppearance = 16842850; // 0x1010062
+    field public static final int parentActivityName = 16843687; // 0x10103a7
+    field @Deprecated public static final int password = 16843100; // 0x101015c
+    field public static final int passwordsActivity = 16844351; // 0x101063f
+    field public static final int path = 16842794; // 0x101002a
+    field public static final int pathAdvancedPattern = 16844320; // 0x1010620
+    field public static final int pathData = 16843781; // 0x1010405
+    field public static final int pathPattern = 16842796; // 0x101002c
+    field public static final int pathPrefix = 16842795; // 0x101002b
+    field public static final int pathSuffix = 16844318; // 0x101061e
+    field public static final int patternPathData = 16843978; // 0x10104ca
+    field public static final int permission = 16842758; // 0x1010006
+    field public static final int permissionFlags = 16843719; // 0x10103c7
+    field public static final int permissionGroup = 16842762; // 0x101000a
+    field public static final int permissionGroupFlags = 16843717; // 0x10103c5
+    field public static final int persistableMode = 16843821; // 0x101042d
+    field public static final int persistent = 16842765; // 0x101000d
+    field public static final int persistentDrawingCache = 16842990; // 0x10100ee
+    field public static final int persistentWhenFeatureAvailable = 16844131; // 0x1010563
+    field @Deprecated public static final int phoneNumber = 16843111; // 0x1010167
+    field public static final int pivotX = 16843189; // 0x10101b5
+    field public static final int pivotY = 16843190; // 0x10101b6
+    field public static final int pointerIcon = 16844041; // 0x1010509
+    field public static final int popupAnimationStyle = 16843465; // 0x10102c9
+    field public static final int popupBackground = 16843126; // 0x1010176
+    field @Deprecated public static final int popupCharacters = 16843332; // 0x1010244
+    field public static final int popupElevation = 16843916; // 0x101048c
+    field public static final int popupEnterTransition = 16844063; // 0x101051f
+    field public static final int popupExitTransition = 16844064; // 0x1010520
+    field @Deprecated public static final int popupKeyboard = 16843331; // 0x1010243
+    field @Deprecated public static final int popupLayout = 16843323; // 0x101023b
+    field public static final int popupMenuStyle = 16843520; // 0x1010300
+    field public static final int popupTheme = 16843945; // 0x10104a9
+    field public static final int popupWindowStyle = 16842870; // 0x1010076
+    field public static final int port = 16842793; // 0x1010029
+    field public static final int positiveButtonText = 16843253; // 0x10101f5
+    field public static final int preferMinimalPostProcessing = 16844300; // 0x101060c
+    field public static final int preferenceCategoryStyle = 16842892; // 0x101008c
+    field public static final int preferenceFragmentStyle = 16844038; // 0x1010506
+    field public static final int preferenceInformationStyle = 16842893; // 0x101008d
+    field public static final int preferenceLayoutChild = 16842900; // 0x1010094
+    field public static final int preferenceScreenStyle = 16842891; // 0x101008b
+    field public static final int preferenceStyle = 16842894; // 0x101008e
+    field public static final int presentationTheme = 16843712; // 0x10103c0
+    field public static final int preserveLegacyExternalStorage = 16844308; // 0x1010614
+    field public static final int previewImage = 16843482; // 0x10102da
+    field public static final int previewLayout = 16844327; // 0x1010627
+    field public static final int primaryContentAlpha = 16844114; // 0x1010552
+    field public static final int priority = 16842780; // 0x101001c
+    field public static final int privateImeOptions = 16843299; // 0x1010223
+    field public static final int process = 16842769; // 0x1010011
+    field public static final int progress = 16843063; // 0x1010137
+    field public static final int progressBackgroundTint = 16843877; // 0x1010465
+    field public static final int progressBackgroundTintMode = 16843878; // 0x1010466
+    field public static final int progressBarPadding = 16843545; // 0x1010319
+    field public static final int progressBarStyle = 16842871; // 0x1010077
+    field public static final int progressBarStyleHorizontal = 16842872; // 0x1010078
+    field public static final int progressBarStyleInverse = 16843399; // 0x1010287
+    field public static final int progressBarStyleLarge = 16842874; // 0x101007a
+    field public static final int progressBarStyleLargeInverse = 16843401; // 0x1010289
+    field public static final int progressBarStyleSmall = 16842873; // 0x1010079
+    field public static final int progressBarStyleSmallInverse = 16843400; // 0x1010288
+    field public static final int progressBarStyleSmallTitle = 16843279; // 0x101020f
+    field public static final int progressDrawable = 16843068; // 0x101013c
+    field public static final int progressTint = 16843875; // 0x1010463
+    field public static final int progressTintMode = 16843876; // 0x1010464
+    field public static final int prompt = 16843131; // 0x101017b
+    field public static final int propertyName = 16843489; // 0x10102e1
+    field public static final int propertyXName = 16843892; // 0x1010474
+    field public static final int propertyYName = 16843893; // 0x1010475
+    field public static final int protectionLevel = 16842761; // 0x1010009
+    field public static final int publicKey = 16843686; // 0x10103a6
+    field public static final int queryActionMsg = 16843227; // 0x10101db
+    field public static final int queryAfterZeroResults = 16843394; // 0x1010282
+    field public static final int queryBackground = 16843911; // 0x1010487
+    field public static final int queryHint = 16843608; // 0x1010358
+    field public static final int quickContactBadgeStyleSmallWindowLarge = 16843443; // 0x10102b3
+    field public static final int quickContactBadgeStyleSmallWindowMedium = 16843442; // 0x10102b2
+    field public static final int quickContactBadgeStyleSmallWindowSmall = 16843441; // 0x10102b1
+    field public static final int quickContactBadgeStyleWindowLarge = 16843440; // 0x10102b0
+    field public static final int quickContactBadgeStyleWindowMedium = 16843439; // 0x10102af
+    field public static final int quickContactBadgeStyleWindowSmall = 16843438; // 0x10102ae
+    field public static final int radioButtonStyle = 16842878; // 0x101007e
+    field public static final int radius = 16843176; // 0x10101a8
+    field public static final int rating = 16843077; // 0x1010145
+    field public static final int ratingBarStyle = 16842876; // 0x101007c
+    field public static final int ratingBarStyleIndicator = 16843280; // 0x1010210
+    field public static final int ratingBarStyleSmall = 16842877; // 0x101007d
+    field public static final int readPermission = 16842759; // 0x1010007
+    field public static final int recognitionService = 16843932; // 0x101049c
+    field public static final int recreateOnConfigChanges = 16844103; // 0x1010547
+    field public static final int recycleEnabled = 16844121; // 0x1010559
+    field public static final int relinquishTaskIdentity = 16843894; // 0x1010476
+    field public static final int reparent = 16843964; // 0x10104bc
+    field public static final int reparentWithOverlay = 16843965; // 0x10104bd
+    field public static final int repeatCount = 16843199; // 0x10101bf
+    field public static final int repeatMode = 16843200; // 0x10101c0
+    field public static final int reqFiveWayNav = 16843314; // 0x1010232
+    field public static final int reqHardKeyboard = 16843305; // 0x1010229
+    field public static final int reqKeyboardType = 16843304; // 0x1010228
+    field public static final int reqNavigation = 16843306; // 0x101022a
+    field public static final int reqTouchScreen = 16843303; // 0x1010227
+    field public static final int requestLegacyExternalStorage = 16844291; // 0x1010603
+    field public static final int requestRawExternalStorageAccess = 16844357; // 0x1010645
+    field public static final int requireDeviceScreenOn = 16844317; // 0x101061d
+    field public static final int requireDeviceUnlock = 16843756; // 0x10103ec
+    field public static final int required = 16843406; // 0x101028e
+    field public static final int requiredAccountType = 16843734; // 0x10103d6
+    field public static final int requiredFeature = 16844116; // 0x1010554
+    field public static final int requiredForAllUsers = 16843728; // 0x10103d0
+    field public static final int requiredNotFeature = 16844117; // 0x1010555
+    field public static final int requiresFadingEdge = 16843685; // 0x10103a5
+    field public static final int requiresSmallestWidthDp = 16843620; // 0x1010364
+    field public static final int resizeClip = 16843983; // 0x10104cf
+    field public static final int resizeMode = 16843619; // 0x1010363
+    field public static final int resizeable = 16843405; // 0x101028d
+    field public static final int resizeableActivity = 16844022; // 0x10104f6
+    field public static final int resource = 16842789; // 0x1010025
+    field public static final int resourcesMap = 16844297; // 0x1010609
+    field public static final int restoreAnyVersion = 16843450; // 0x10102ba
+    field @Deprecated public static final int restoreNeedsApplication = 16843421; // 0x101029d
+    field public static final int restrictedAccountType = 16843733; // 0x10103d5
+    field public static final int restrictionType = 16843923; // 0x1010493
+    field public static final int resumeWhilePausing = 16843954; // 0x10104b2
+    field public static final int reversible = 16843851; // 0x101044b
+    field public static final int revisionCode = 16843989; // 0x10104d5
+    field public static final int right = 16843183; // 0x10101af
+    field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
+    field public static final int ringtoneType = 16843257; // 0x10101f9
+    field public static final int rollbackDataPolicy = 16844311; // 0x1010617
+    field public static final int rotation = 16843558; // 0x1010326
+    field public static final int rotationAnimation = 16844090; // 0x101053a
+    field public static final int rotationX = 16843559; // 0x1010327
+    field public static final int rotationY = 16843560; // 0x1010328
+    field public static final int roundIcon = 16844076; // 0x101052c
+    field public static final int rowCount = 16843637; // 0x1010375
+    field public static final int rowDelay = 16843216; // 0x10101d0
+    field @Deprecated public static final int rowEdgeFlags = 16843329; // 0x1010241
+    field public static final int rowHeight = 16843058; // 0x1010132
+    field public static final int rowOrderPreserved = 16843638; // 0x1010376
+    field public static final int saveEnabled = 16842983; // 0x10100e7
+    field public static final int scaleGravity = 16843262; // 0x10101fe
+    field public static final int scaleHeight = 16843261; // 0x10101fd
+    field public static final int scaleType = 16843037; // 0x101011d
+    field public static final int scaleWidth = 16843260; // 0x10101fc
+    field public static final int scaleX = 16843556; // 0x1010324
+    field public static final int scaleY = 16843557; // 0x1010325
+    field public static final int scheme = 16842791; // 0x1010027
+    field public static final int screenDensity = 16843467; // 0x10102cb
+    field public static final int screenOrientation = 16842782; // 0x101001e
+    field public static final int screenReaderFocusable = 16844148; // 0x1010574
+    field public static final int screenSize = 16843466; // 0x10102ca
+    field public static final int scrollHorizontally = 16843099; // 0x101015b
+    field public static final int scrollIndicators = 16844006; // 0x10104e6
+    field public static final int scrollViewStyle = 16842880; // 0x1010080
+    field public static final int scrollX = 16842962; // 0x10100d2
+    field public static final int scrollY = 16842963; // 0x10100d3
+    field public static final int scrollbarAlwaysDrawHorizontalTrack = 16842856; // 0x1010068
+    field public static final int scrollbarAlwaysDrawVerticalTrack = 16842857; // 0x1010069
+    field public static final int scrollbarDefaultDelayBeforeFade = 16843433; // 0x10102a9
+    field public static final int scrollbarFadeDuration = 16843432; // 0x10102a8
+    field public static final int scrollbarSize = 16842851; // 0x1010063
+    field public static final int scrollbarStyle = 16842879; // 0x101007f
+    field public static final int scrollbarThumbHorizontal = 16842852; // 0x1010064
+    field public static final int scrollbarThumbVertical = 16842853; // 0x1010065
+    field public static final int scrollbarTrackHorizontal = 16842854; // 0x1010066
+    field public static final int scrollbarTrackVertical = 16842855; // 0x1010067
+    field public static final int scrollbars = 16842974; // 0x10100de
+    field public static final int scrollingCache = 16843006; // 0x10100fe
+    field @Deprecated public static final int searchButtonText = 16843269; // 0x1010205
+    field public static final int searchHintIcon = 16843988; // 0x10104d4
+    field public static final int searchIcon = 16843907; // 0x1010483
+    field public static final int searchMode = 16843221; // 0x10101d5
+    field public static final int searchSettingsDescription = 16843402; // 0x101028a
+    field public static final int searchSuggestAuthority = 16843222; // 0x10101d6
+    field public static final int searchSuggestIntentAction = 16843225; // 0x10101d9
+    field public static final int searchSuggestIntentData = 16843226; // 0x10101da
+    field public static final int searchSuggestPath = 16843223; // 0x10101d7
+    field public static final int searchSuggestSelection = 16843224; // 0x10101d8
+    field public static final int searchSuggestThreshold = 16843373; // 0x101026d
+    field public static final int searchViewStyle = 16843904; // 0x1010480
+    field public static final int secondaryContentAlpha = 16844115; // 0x1010553
+    field public static final int secondaryProgress = 16843064; // 0x1010138
+    field public static final int secondaryProgressTint = 16843879; // 0x1010467
+    field public static final int secondaryProgressTintMode = 16843880; // 0x1010468
+    field public static final int secureElementName = 16844290; // 0x1010602
+    field public static final int seekBarStyle = 16842875; // 0x101007b
+    field public static final int segmentedButtonStyle = 16843568; // 0x1010330
+    field public static final int selectAllOnFocus = 16843102; // 0x101015e
+    field public static final int selectable = 16843238; // 0x10101e6
+    field public static final int selectableAsDefault = 16844352; // 0x1010640
+    field public static final int selectableItemBackground = 16843534; // 0x101030e
+    field public static final int selectableItemBackgroundBorderless = 16843868; // 0x101045c
+    field @Deprecated public static final int selectedDateVerticalBar = 16843591; // 0x1010347
+    field @Deprecated public static final int selectedWeekBackgroundColor = 16843586; // 0x1010342
+    field public static final int selectionDividerHeight = 16844184; // 0x1010598
+    field public static final int sessionService = 16843837; // 0x101043d
+    field public static final int settingsActivity = 16843301; // 0x1010225
+    field public static final int settingsSliceUri = 16844179; // 0x1010593
+    field public static final int setupActivity = 16843766; // 0x10103f6
+    field public static final int shadowColor = 16843105; // 0x1010161
+    field public static final int shadowDx = 16843106; // 0x1010162
+    field public static final int shadowDy = 16843107; // 0x1010163
+    field public static final int shadowRadius = 16843108; // 0x1010164
+    field public static final int shape = 16843162; // 0x101019a
+    field public static final int shareInterpolator = 16843195; // 0x10101bb
+    field @Deprecated public static final int sharedUserId = 16842763; // 0x101000b
+    field @Deprecated public static final int sharedUserLabel = 16843361; // 0x1010261
+    field public static final int shell = 16844180; // 0x1010594
+    field public static final int shortcutDisabledMessage = 16844075; // 0x101052b
+    field public static final int shortcutId = 16844072; // 0x1010528
+    field public static final int shortcutLongLabel = 16844074; // 0x101052a
+    field public static final int shortcutShortLabel = 16844073; // 0x1010529
+    field public static final int shouldDisableView = 16843246; // 0x10101ee
+    field public static final int shouldUseDefaultUnfoldTransition = 16844364; // 0x101064c
+    field public static final int showAsAction = 16843481; // 0x10102d9
+    field public static final int showDefault = 16843258; // 0x10101fa
+    field public static final int showDividers = 16843561; // 0x1010329
+    field public static final int showForAllUsers = 16844015; // 0x10104ef
+    field public static final int showInInputMethodPicker = 16844360; // 0x1010648
+    field public static final int showMetadataInPreview = 16844079; // 0x101052f
+    field @Deprecated public static final int showOnLockScreen = 16843721; // 0x10103c9
+    field public static final int showSilent = 16843259; // 0x10101fb
+    field public static final int showText = 16843949; // 0x10104ad
+    field @Deprecated public static final int showWeekNumber = 16843582; // 0x101033e
+    field public static final int showWhenLocked = 16844137; // 0x1010569
+    field @Deprecated public static final int shownWeekCount = 16843585; // 0x1010341
+    field public static final int shrinkColumns = 16843082; // 0x101014a
+    field @Deprecated public static final int singleLine = 16843101; // 0x101015d
+    field public static final int singleLineTitle = 16844124; // 0x101055c
+    field public static final int singleUser = 16843711; // 0x10103bf
+    field public static final int slideEdge = 16843824; // 0x1010430
+    field public static final int smallIcon = 16843422; // 0x101029e
+    field public static final int smallScreens = 16843396; // 0x1010284
+    field public static final int smoothScrollbar = 16843313; // 0x1010231
+    field public static final int soundEffectsEnabled = 16843285; // 0x1010215
+    field public static final int spacing = 16843027; // 0x1010113
+    field public static final int spinnerDropDownItemStyle = 16842887; // 0x1010087
+    field public static final int spinnerItemStyle = 16842889; // 0x1010089
+    field public static final int spinnerMode = 16843505; // 0x10102f1
+    field public static final int spinnerStyle = 16842881; // 0x1010081
+    field public static final int spinnersShown = 16843595; // 0x101034b
+    field public static final int splashScreenTheme = 16844337; // 0x1010631
+    field public static final int splitMotionEvents = 16843503; // 0x10102ef
+    field public static final int splitName = 16844105; // 0x1010549
+    field public static final int splitTrack = 16843852; // 0x101044c
+    field public static final int spotShadowAlpha = 16843967; // 0x10104bf
+    field public static final int src = 16843033; // 0x1010119
+    field public static final int ssp = 16843747; // 0x10103e3
+    field public static final int sspAdvancedPattern = 16844321; // 0x1010621
+    field public static final int sspPattern = 16843749; // 0x10103e5
+    field public static final int sspPrefix = 16843748; // 0x10103e4
+    field public static final int sspSuffix = 16844319; // 0x101061f
+    field public static final int stackFromBottom = 16843005; // 0x10100fd
+    field public static final int stackViewStyle = 16843838; // 0x101043e
+    field public static final int starStyle = 16842882; // 0x1010082
+    field public static final int start = 16843995; // 0x10104db
+    field public static final int startColor = 16843165; // 0x101019d
+    field public static final int startDelay = 16843746; // 0x10103e2
+    field public static final int startOffset = 16843198; // 0x10101be
+    field public static final int startX = 16844048; // 0x1010510
+    field public static final int startY = 16844049; // 0x1010511
+    field @Deprecated public static final int startYear = 16843132; // 0x101017c
+    field public static final int stateListAnimator = 16843848; // 0x1010448
+    field public static final int stateNotNeeded = 16842774; // 0x1010016
+    field public static final int state_above_anchor = 16842922; // 0x10100aa
+    field public static final int state_accelerated = 16843547; // 0x101031b
+    field public static final int state_activated = 16843518; // 0x10102fe
+    field public static final int state_active = 16842914; // 0x10100a2
+    field public static final int state_checkable = 16842911; // 0x101009f
+    field public static final int state_checked = 16842912; // 0x10100a0
+    field public static final int state_drag_can_accept = 16843624; // 0x1010368
+    field public static final int state_drag_hovered = 16843625; // 0x1010369
+    field public static final int state_empty = 16842921; // 0x10100a9
+    field public static final int state_enabled = 16842910; // 0x101009e
+    field public static final int state_expanded = 16842920; // 0x10100a8
+    field public static final int state_first = 16842916; // 0x10100a4
+    field public static final int state_focused = 16842908; // 0x101009c
+    field public static final int state_hovered = 16843623; // 0x1010367
+    field public static final int state_last = 16842918; // 0x10100a6
+    field @Deprecated public static final int state_long_pressable = 16843324; // 0x101023c
+    field public static final int state_middle = 16842917; // 0x10100a5
+    field public static final int state_multiline = 16843597; // 0x101034d
+    field public static final int state_pressed = 16842919; // 0x10100a7
+    field public static final int state_selected = 16842913; // 0x10100a1
+    field public static final int state_single = 16842915; // 0x10100a3
+    field public static final int state_window_focused = 16842909; // 0x101009d
+    field public static final int staticWallpaperPreview = 16843569; // 0x1010331
+    field public static final int statusBarColor = 16843857; // 0x1010451
+    field public static final int stepSize = 16843078; // 0x1010146
+    field public static final int stopWithTask = 16843626; // 0x101036a
+    field public static final int streamType = 16843273; // 0x1010209
+    field public static final int stretchColumns = 16843081; // 0x1010149
+    field public static final int stretchMode = 16843030; // 0x1010116
+    field public static final int strokeAlpha = 16843979; // 0x10104cb
+    field public static final int strokeColor = 16843782; // 0x1010406
+    field public static final int strokeLineCap = 16843787; // 0x101040b
+    field public static final int strokeLineJoin = 16843788; // 0x101040c
+    field public static final int strokeMiterLimit = 16843789; // 0x101040d
+    field public static final int strokeWidth = 16843783; // 0x1010407
+    field public static final int subMenuArrow = 16844019; // 0x10104f3
+    field public static final int submitBackground = 16843912; // 0x1010488
+    field public static final int subtitle = 16843473; // 0x10102d1
+    field public static final int subtitleTextAppearance = 16843823; // 0x101042f
+    field public static final int subtitleTextColor = 16844004; // 0x10104e4
+    field public static final int subtitleTextStyle = 16843513; // 0x10102f9
+    field public static final int subtypeExtraValue = 16843674; // 0x101039a
+    field public static final int subtypeId = 16843713; // 0x10103c1
+    field public static final int subtypeLocale = 16843673; // 0x1010399
+    field public static final int suggestActionMsg = 16843228; // 0x10101dc
+    field public static final int suggestActionMsgColumn = 16843229; // 0x10101dd
+    field public static final int suggestionRowLayout = 16843910; // 0x1010486
+    field public static final int summary = 16843241; // 0x10101e9
+    field public static final int summaryColumn = 16843426; // 0x10102a2
+    field public static final int summaryOff = 16843248; // 0x10101f0
+    field public static final int summaryOn = 16843247; // 0x10101ef
+    field public static final int supportsAssist = 16844016; // 0x10104f0
+    field public static final int supportsInlineSuggestions = 16844301; // 0x101060d
+    field public static final int supportsLaunchVoiceAssistFromKeyguard = 16844017; // 0x10104f1
+    field public static final int supportsLocalInteraction = 16844047; // 0x101050f
+    field public static final int supportsMultipleDisplays = 16844182; // 0x1010596
+    field public static final int supportsPictureInPicture = 16844023; // 0x10104f7
+    field public static final int supportsRtl = 16843695; // 0x10103af
+    field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
+    field public static final int supportsUploading = 16843419; // 0x101029b
+    field public static final int suppressesSpellChecker = 16844355; // 0x1010643
+    field public static final int switchMinWidth = 16843632; // 0x1010370
+    field public static final int switchPadding = 16843633; // 0x1010371
+    field public static final int switchPreferenceStyle = 16843629; // 0x101036d
+    field public static final int switchStyle = 16843839; // 0x101043f
+    field public static final int switchTextAppearance = 16843630; // 0x101036e
+    field public static final int switchTextOff = 16843628; // 0x101036c
+    field public static final int switchTextOn = 16843627; // 0x101036b
+    field public static final int syncable = 16842777; // 0x1010019
+    field public static final int tabStripEnabled = 16843453; // 0x10102bd
+    field public static final int tabStripLeft = 16843451; // 0x10102bb
+    field public static final int tabStripRight = 16843452; // 0x10102bc
+    field public static final int tabWidgetStyle = 16842883; // 0x1010083
+    field public static final int tag = 16842961; // 0x10100d1
+    field public static final int targetActivity = 16843266; // 0x1010202
+    field public static final int targetCellHeight = 16844341; // 0x1010635
+    field public static final int targetCellWidth = 16844340; // 0x1010634
+    field public static final int targetClass = 16842799; // 0x101002f
+    field @Deprecated public static final int targetDescriptions = 16843680; // 0x10103a0
+    field public static final int targetId = 16843740; // 0x10103dc
+    field public static final int targetName = 16843853; // 0x101044d
+    field public static final int targetPackage = 16842785; // 0x1010021
+    field public static final int targetProcesses = 16844097; // 0x1010541
+    field @Deprecated public static final int targetSandboxVersion = 16844108; // 0x101054c
+    field public static final int targetSdkVersion = 16843376; // 0x1010270
+    field public static final int taskAffinity = 16842770; // 0x1010012
+    field public static final int taskCloseEnterAnimation = 16842942; // 0x10100be
+    field public static final int taskCloseExitAnimation = 16842943; // 0x10100bf
+    field public static final int taskOpenEnterAnimation = 16842940; // 0x10100bc
+    field public static final int taskOpenExitAnimation = 16842941; // 0x10100bd
+    field public static final int taskToBackEnterAnimation = 16842946; // 0x10100c2
+    field public static final int taskToBackExitAnimation = 16842947; // 0x10100c3
+    field public static final int taskToFrontEnterAnimation = 16842944; // 0x10100c0
+    field public static final int taskToFrontExitAnimation = 16842945; // 0x10100c1
+    field public static final int tension = 16843370; // 0x101026a
+    field public static final int testOnly = 16843378; // 0x1010272
+    field public static final int text = 16843087; // 0x101014f
+    field public static final int textAlignment = 16843697; // 0x10103b1
+    field public static final int textAllCaps = 16843660; // 0x101038c
+    field public static final int textAppearance = 16842804; // 0x1010034
+    field public static final int textAppearanceButton = 16843271; // 0x1010207
+    field public static final int textAppearanceInverse = 16842805; // 0x1010035
+    field public static final int textAppearanceLarge = 16842816; // 0x1010040
+    field public static final int textAppearanceLargeInverse = 16842819; // 0x1010043
+    field public static final int textAppearanceLargePopupMenu = 16843521; // 0x1010301
+    field public static final int textAppearanceListItem = 16843678; // 0x101039e
+    field public static final int textAppearanceListItemSecondary = 16843826; // 0x1010432
+    field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f
+    field public static final int textAppearanceMedium = 16842817; // 0x1010041
+    field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044
+    field public static final int textAppearancePopupMenuHeader = 16844034; // 0x1010502
+    field public static final int textAppearanceSearchResultSubtitle = 16843424; // 0x10102a0
+    field public static final int textAppearanceSearchResultTitle = 16843425; // 0x10102a1
+    field public static final int textAppearanceSmall = 16842818; // 0x1010042
+    field public static final int textAppearanceSmallInverse = 16842821; // 0x1010045
+    field public static final int textAppearanceSmallPopupMenu = 16843522; // 0x1010302
+    field public static final int textCheckMark = 16842822; // 0x1010046
+    field public static final int textCheckMarkInverse = 16842823; // 0x1010047
+    field public static final int textColor = 16842904; // 0x1010098
+    field public static final int textColorAlertDialogListItem = 16843526; // 0x1010306
+    field public static final int textColorHighlight = 16842905; // 0x1010099
+    field public static final int textColorHighlightInverse = 16843599; // 0x101034f
+    field public static final int textColorHint = 16842906; // 0x101009a
+    field public static final int textColorHintInverse = 16842815; // 0x101003f
+    field public static final int textColorLink = 16842907; // 0x101009b
+    field public static final int textColorLinkInverse = 16843600; // 0x1010350
+    field public static final int textColorPrimary = 16842806; // 0x1010036
+    field public static final int textColorPrimaryDisableOnly = 16842807; // 0x1010037
+    field public static final int textColorPrimaryInverse = 16842809; // 0x1010039
+    field public static final int textColorPrimaryInverseDisableOnly = 16843403; // 0x101028b
+    field public static final int textColorPrimaryInverseNoDisable = 16842813; // 0x101003d
+    field public static final int textColorPrimaryNoDisable = 16842811; // 0x101003b
+    field public static final int textColorSecondary = 16842808; // 0x1010038
+    field public static final int textColorSecondaryInverse = 16842810; // 0x101003a
+    field public static final int textColorSecondaryInverseNoDisable = 16842814; // 0x101003e
+    field public static final int textColorSecondaryNoDisable = 16842812; // 0x101003c
+    field public static final int textColorTertiary = 16843282; // 0x1010212
+    field public static final int textColorTertiaryInverse = 16843283; // 0x1010213
+    field public static final int textCursorDrawable = 16843618; // 0x1010362
+    field public static final int textDirection = 16843696; // 0x10103b0
+    field public static final int textEditNoPasteWindowLayout = 16843541; // 0x1010315
+    field public static final int textEditPasteWindowLayout = 16843540; // 0x1010314
+    field public static final int textEditSideNoPasteWindowLayout = 16843615; // 0x101035f
+    field public static final int textEditSidePasteWindowLayout = 16843614; // 0x101035e
+    field public static final int textEditSuggestionItemLayout = 16843636; // 0x1010374
+    field public static final int textFilterEnabled = 16843007; // 0x10100ff
+    field public static final int textFontWeight = 16844165; // 0x1010585
+    field public static final int textIsSelectable = 16843542; // 0x1010316
+    field public static final int textLocale = 16844178; // 0x1010592
+    field public static final int textOff = 16843045; // 0x1010125
+    field public static final int textOn = 16843044; // 0x1010124
+    field public static final int textScaleX = 16843089; // 0x1010151
+    field public static final int textSelectHandle = 16843463; // 0x10102c7
+    field public static final int textSelectHandleLeft = 16843461; // 0x10102c5
+    field public static final int textSelectHandleRight = 16843462; // 0x10102c6
+    field public static final int textSelectHandleWindowStyle = 16843464; // 0x10102c8
+    field public static final int textSize = 16842901; // 0x1010095
+    field public static final int textStyle = 16842903; // 0x1010097
+    field public static final int textSuggestionsWindowStyle = 16843635; // 0x1010373
+    field public static final int textViewStyle = 16842884; // 0x1010084
+    field public static final int theme = 16842752; // 0x1010000
+    field public static final int thickness = 16843360; // 0x1010260
+    field public static final int thicknessRatio = 16843164; // 0x101019c
+    field public static final int thumb = 16843074; // 0x1010142
+    field public static final int thumbOffset = 16843075; // 0x1010143
+    field public static final int thumbPosition = 16844005; // 0x10104e5
+    field public static final int thumbTextPadding = 16843634; // 0x1010372
+    field public static final int thumbTint = 16843889; // 0x1010471
+    field public static final int thumbTintMode = 16843890; // 0x1010472
+    field public static final int thumbnail = 16843429; // 0x10102a5
+    field public static final int tickMark = 16844042; // 0x101050a
+    field public static final int tickMarkTint = 16844043; // 0x101050b
+    field public static final int tickMarkTintMode = 16844044; // 0x101050c
+    field public static final int tileMode = 16843265; // 0x1010201
+    field public static final int tileModeX = 16843895; // 0x1010477
+    field public static final int tileModeY = 16843896; // 0x1010478
+    field public static final int timePickerDialogTheme = 16843934; // 0x101049e
+    field public static final int timePickerMode = 16843956; // 0x10104b4
+    field public static final int timePickerStyle = 16843933; // 0x101049d
+    field public static final int timeZone = 16843724; // 0x10103cc
+    field public static final int tint = 16843041; // 0x1010121
+    field public static final int tintMode = 16843771; // 0x10103fb
+    field public static final int title = 16843233; // 0x10101e1
+    field public static final int titleCondensed = 16843234; // 0x10101e2
+    field public static final int titleMargin = 16844024; // 0x10104f8
+    field public static final int titleMarginBottom = 16844028; // 0x10104fc
+    field public static final int titleMarginEnd = 16844026; // 0x10104fa
+    field public static final int titleMarginStart = 16844025; // 0x10104f9
+    field public static final int titleMarginTop = 16844027; // 0x10104fb
+    field public static final int titleTextAppearance = 16843822; // 0x101042e
+    field public static final int titleTextColor = 16844003; // 0x10104e3
+    field public static final int titleTextStyle = 16843512; // 0x10102f8
+    field public static final int toAlpha = 16843211; // 0x10101cb
+    field public static final int toDegrees = 16843188; // 0x10101b4
+    field public static final int toId = 16843849; // 0x1010449
+    field public static final int toScene = 16843742; // 0x10103de
+    field public static final int toXDelta = 16843207; // 0x10101c7
+    field public static final int toXScale = 16843203; // 0x10101c3
+    field public static final int toYDelta = 16843209; // 0x10101c9
+    field public static final int toYScale = 16843205; // 0x10101c5
+    field public static final int toolbarStyle = 16843946; // 0x10104aa
+    field public static final int tooltipText = 16844084; // 0x1010534
+    field public static final int top = 16843182; // 0x10101ae
+    field public static final int topBright = 16842955; // 0x10100cb
+    field public static final int topDark = 16842951; // 0x10100c7
+    field public static final int topLeftRadius = 16843177; // 0x10101a9
+    field public static final int topOffset = 16843352; // 0x1010258
+    field public static final int topRightRadius = 16843178; // 0x10101aa
+    field public static final int touchscreenBlocksFocus = 16843919; // 0x101048f
+    field public static final int track = 16843631; // 0x101036f
+    field public static final int trackTint = 16843993; // 0x10104d9
+    field public static final int trackTintMode = 16843994; // 0x10104da
+    field public static final int transcriptMode = 16843008; // 0x1010100
+    field public static final int transformPivotX = 16843552; // 0x1010320
+    field public static final int transformPivotY = 16843553; // 0x1010321
+    field public static final int transition = 16843743; // 0x10103df
+    field public static final int transitionGroup = 16843777; // 0x1010401
+    field public static final int transitionName = 16843776; // 0x1010400
+    field public static final int transitionOrdering = 16843744; // 0x10103e0
+    field public static final int transitionVisibilityMode = 16843900; // 0x101047c
+    field public static final int translateX = 16843866; // 0x101045a
+    field public static final int translateY = 16843867; // 0x101045b
+    field public static final int translationX = 16843554; // 0x1010322
+    field public static final int translationY = 16843555; // 0x1010323
+    field public static final int translationZ = 16843770; // 0x10103fa
+    field public static final int trimPathEnd = 16843785; // 0x1010409
+    field public static final int trimPathOffset = 16843786; // 0x101040a
+    field public static final int trimPathStart = 16843784; // 0x1010408
+    field public static final int ttcIndex = 16844143; // 0x101056f
+    field public static final int tunerCount = 16844061; // 0x101051d
+    field public static final int turnScreenOn = 16844138; // 0x101056a
+    field public static final int type = 16843169; // 0x10101a1
+    field public static final int typeface = 16842902; // 0x1010096
+    field public static final int uiOptions = 16843672; // 0x1010398
+    field public static final int uncertainGestureColor = 16843382; // 0x1010276
+    field @Deprecated public static final int unfocusedMonthDateColor = 16843588; // 0x1010344
+    field public static final int unselectedAlpha = 16843278; // 0x101020e
+    field public static final int updatePeriodMillis = 16843344; // 0x1010250
+    field public static final int use32bitAbi = 16844053; // 0x1010515
+    field public static final int useAppZygote = 16844183; // 0x1010597
+    field public static final int useDefaultMargins = 16843641; // 0x1010379
+    field public static final int useEmbeddedDex = 16844190; // 0x101059e
+    field public static final int useIntrinsicSizeAsMinimum = 16843536; // 0x1010310
+    field public static final int useLevel = 16843167; // 0x101019f
+    field public static final int userVisible = 16843409; // 0x1010291
+    field public static final int usesCleartextTraffic = 16844012; // 0x10104ec
+    field public static final int usesPermissionFlags = 16844356; // 0x1010644
+    field public static final int value = 16842788; // 0x1010024
+    field public static final int valueFrom = 16843486; // 0x10102de
+    field public static final int valueTo = 16843487; // 0x10102df
+    field public static final int valueType = 16843488; // 0x10102e0
+    field public static final int variablePadding = 16843157; // 0x1010195
+    field public static final int vendor = 16843751; // 0x10103e7
+    field public static final int version = 16844057; // 0x1010519
+    field public static final int versionCode = 16843291; // 0x101021b
+    field public static final int versionCodeMajor = 16844150; // 0x1010576
+    field public static final int versionMajor = 16844151; // 0x1010577
+    field public static final int versionName = 16843292; // 0x101021c
+    field @Deprecated public static final int verticalCorrection = 16843322; // 0x101023a
+    field public static final int verticalDivider = 16843054; // 0x101012e
+    field @Deprecated public static final int verticalGap = 16843328; // 0x1010240
+    field public static final int verticalScrollbarPosition = 16843572; // 0x1010334
+    field public static final int verticalSpacing = 16843029; // 0x1010115
+    field public static final int viewportHeight = 16843779; // 0x1010403
+    field public static final int viewportWidth = 16843778; // 0x1010402
+    field public static final int visibility = 16842972; // 0x10100dc
+    field public static final int visible = 16843156; // 0x1010194
+    field public static final int visibleToInstantApps = 16844081; // 0x1010531
+    field public static final int vmSafeMode = 16843448; // 0x10102b8
+    field public static final int voiceIcon = 16843908; // 0x1010484
+    field public static final int voiceLanguage = 16843349; // 0x1010255
+    field public static final int voiceLanguageModel = 16843347; // 0x1010253
+    field public static final int voiceMaxResults = 16843350; // 0x1010256
+    field public static final int voicePromptText = 16843348; // 0x1010254
+    field public static final int voiceSearchMode = 16843346; // 0x1010252
+    field public static final int wallpaperCloseEnterAnimation = 16843413; // 0x1010295
+    field public static final int wallpaperCloseExitAnimation = 16843414; // 0x1010296
+    field public static final int wallpaperIntraCloseEnterAnimation = 16843417; // 0x1010299
+    field public static final int wallpaperIntraCloseExitAnimation = 16843418; // 0x101029a
+    field public static final int wallpaperIntraOpenEnterAnimation = 16843415; // 0x1010297
+    field public static final int wallpaperIntraOpenExitAnimation = 16843416; // 0x1010298
+    field public static final int wallpaperOpenEnterAnimation = 16843411; // 0x1010293
+    field public static final int wallpaperOpenExitAnimation = 16843412; // 0x1010294
+    field public static final int webTextViewStyle = 16843449; // 0x10102b9
+    field public static final int webViewStyle = 16842885; // 0x1010085
+    field public static final int weekDayTextAppearance = 16843592; // 0x1010348
+    field @Deprecated public static final int weekNumberColor = 16843589; // 0x1010345
+    field @Deprecated public static final int weekSeparatorLineColor = 16843590; // 0x1010346
+    field public static final int weightSum = 16843048; // 0x1010128
+    field public static final int widgetCategory = 16843716; // 0x10103c4
+    field public static final int widgetFeatures = 16844153; // 0x1010579
+    field public static final int widgetLayout = 16843243; // 0x10101eb
+    field public static final int width = 16843097; // 0x1010159
+    field public static final int windowActionBar = 16843469; // 0x10102cd
+    field public static final int windowActionBarOverlay = 16843492; // 0x10102e4
+    field public static final int windowActionModeOverlay = 16843485; // 0x10102dd
+    field public static final int windowActivityTransitions = 16843981; // 0x10104cd
+    field public static final int windowAllowEnterTransitionOverlap = 16843836; // 0x101043c
+    field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b
+    field public static final int windowAnimationStyle = 16842926; // 0x10100ae
+    field public static final int windowBackground = 16842836; // 0x1010054
+    field public static final int windowBackgroundBlurRadius = 16844331; // 0x101062b
+    field public static final int windowBackgroundFallback = 16844035; // 0x1010503
+    field public static final int windowBlurBehindEnabled = 16844316; // 0x101061c
+    field public static final int windowBlurBehindRadius = 16844315; // 0x101061b
+    field public static final int windowClipToOutline = 16843947; // 0x10104ab
+    field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b
+    field public static final int windowContentOverlay = 16842841; // 0x1010059
+    field public static final int windowContentTransitionManager = 16843769; // 0x10103f9
+    field public static final int windowContentTransitions = 16843768; // 0x10103f8
+    field public static final int windowDisablePreview = 16843298; // 0x1010222
+    field public static final int windowDrawsSystemBarBackgrounds = 16843856; // 0x1010450
+    field public static final int windowElevation = 16843920; // 0x1010490
+    field public static final int windowEnableSplitTouch = 16843543; // 0x1010317
+    field public static final int windowEnterAnimation = 16842932; // 0x10100b4
+    field public static final int windowEnterTransition = 16843831; // 0x1010437
+    field public static final int windowExitAnimation = 16842933; // 0x10100b5
+    field public static final int windowExitTransition = 16843832; // 0x1010438
+    field public static final int windowFrame = 16842837; // 0x1010055
+    field public static final int windowFullscreen = 16843277; // 0x101020d
+    field public static final int windowHideAnimation = 16842935; // 0x10100b7
+    field public static final int windowIsFloating = 16842839; // 0x1010057
+    field public static final int windowIsTranslucent = 16842840; // 0x1010058
+    field public static final int windowLayoutAffinity = 16844313; // 0x1010619
+    field public static final int windowLayoutInDisplayCutoutMode = 16844166; // 0x1010586
+    field public static final int windowLightNavigationBar = 16844140; // 0x101056c
+    field public static final int windowLightStatusBar = 16844000; // 0x10104e0
+    field public static final int windowMinWidthMajor = 16843606; // 0x1010356
+    field public static final int windowMinWidthMinor = 16843607; // 0x1010357
+    field public static final int windowNoDisplay = 16843294; // 0x101021e
+    field public static final int windowNoTitle = 16842838; // 0x1010056
+    field @Deprecated public static final int windowOverscan = 16843727; // 0x10103cf
+    field public static final int windowReenterTransition = 16843951; // 0x10104af
+    field public static final int windowReturnTransition = 16843950; // 0x10104ae
+    field public static final int windowSharedElementEnterTransition = 16843833; // 0x1010439
+    field public static final int windowSharedElementExitTransition = 16843834; // 0x101043a
+    field public static final int windowSharedElementReenterTransition = 16843953; // 0x10104b1
+    field public static final int windowSharedElementReturnTransition = 16843952; // 0x10104b0
+    field public static final int windowSharedElementsUseOverlay = 16843963; // 0x10104bb
+    field public static final int windowShowAnimation = 16842934; // 0x10100b6
+    field public static final int windowShowWallpaper = 16843410; // 0x1010292
+    field public static final int windowSoftInputMode = 16843307; // 0x101022b
+    field public static final int windowSplashScreenAnimatedIcon = 16844333; // 0x101062d
+    field public static final int windowSplashScreenAnimationDuration = 16844334; // 0x101062e
+    field public static final int windowSplashScreenBackground = 16844332; // 0x101062c
+    field public static final int windowSplashScreenBrandingImage = 16844335; // 0x101062f
+    field public static final int windowSplashScreenIconBackgroundColor = 16844336; // 0x1010630
+    field @Deprecated public static final int windowSplashscreenContent = 16844132; // 0x1010564
+    field @Deprecated public static final int windowSwipeToDismiss = 16843763; // 0x10103f3
+    field public static final int windowTitleBackgroundStyle = 16842844; // 0x101005c
+    field public static final int windowTitleSize = 16842842; // 0x101005a
+    field public static final int windowTitleStyle = 16842843; // 0x101005b
+    field public static final int windowTransitionBackgroundFadeDuration = 16843873; // 0x1010461
+    field public static final int windowTranslucentNavigation = 16843760; // 0x10103f0
+    field public static final int windowTranslucentStatus = 16843759; // 0x10103ef
+    field public static final int writePermission = 16842760; // 0x1010008
+    field public static final int x = 16842924; // 0x10100ac
+    field public static final int xlargeScreens = 16843455; // 0x10102bf
+    field public static final int y = 16842925; // 0x10100ad
+    field @Deprecated public static final int yearListItemTextAppearance = 16843929; // 0x1010499
+    field @Deprecated public static final int yearListSelectorColor = 16843930; // 0x101049a
+    field public static final int yesNoPreferenceStyle = 16842896; // 0x1010090
+    field public static final int zAdjustment = 16843201; // 0x10101c1
+    field public static final int zygotePreloadName = 16844189; // 0x101059d
+  }
+
+  public static final class R.bool {
+    ctor public R.bool();
+  }
+
+  public static final class R.color {
+    ctor public R.color();
+    field public static final int background_dark = 17170446; // 0x106000e
+    field public static final int background_light = 17170447; // 0x106000f
+    field public static final int black = 17170444; // 0x106000c
+    field public static final int darker_gray = 17170432; // 0x1060000
+    field public static final int holo_blue_bright = 17170459; // 0x106001b
+    field public static final int holo_blue_dark = 17170451; // 0x1060013
+    field public static final int holo_blue_light = 17170450; // 0x1060012
+    field public static final int holo_green_dark = 17170453; // 0x1060015
+    field public static final int holo_green_light = 17170452; // 0x1060014
+    field public static final int holo_orange_dark = 17170457; // 0x1060019
+    field public static final int holo_orange_light = 17170456; // 0x1060018
+    field public static final int holo_purple = 17170458; // 0x106001a
+    field public static final int holo_red_dark = 17170455; // 0x1060017
+    field public static final int holo_red_light = 17170454; // 0x1060016
+    field @Deprecated public static final int primary_text_dark = 17170433; // 0x1060001
+    field @Deprecated public static final int primary_text_dark_nodisable = 17170434; // 0x1060002
+    field @Deprecated public static final int primary_text_light = 17170435; // 0x1060003
+    field @Deprecated public static final int primary_text_light_nodisable = 17170436; // 0x1060004
+    field @Deprecated public static final int secondary_text_dark = 17170437; // 0x1060005
+    field @Deprecated public static final int secondary_text_dark_nodisable = 17170438; // 0x1060006
+    field @Deprecated public static final int secondary_text_light = 17170439; // 0x1060007
+    field @Deprecated public static final int secondary_text_light_nodisable = 17170440; // 0x1060008
+    field public static final int system_accent1_0 = 17170487; // 0x1060037
+    field public static final int system_accent1_10 = 17170488; // 0x1060038
+    field public static final int system_accent1_100 = 17170490; // 0x106003a
+    field public static final int system_accent1_1000 = 17170499; // 0x1060043
+    field public static final int system_accent1_200 = 17170491; // 0x106003b
+    field public static final int system_accent1_300 = 17170492; // 0x106003c
+    field public static final int system_accent1_400 = 17170493; // 0x106003d
+    field public static final int system_accent1_50 = 17170489; // 0x1060039
+    field public static final int system_accent1_500 = 17170494; // 0x106003e
+    field public static final int system_accent1_600 = 17170495; // 0x106003f
+    field public static final int system_accent1_700 = 17170496; // 0x1060040
+    field public static final int system_accent1_800 = 17170497; // 0x1060041
+    field public static final int system_accent1_900 = 17170498; // 0x1060042
+    field public static final int system_accent2_0 = 17170500; // 0x1060044
+    field public static final int system_accent2_10 = 17170501; // 0x1060045
+    field public static final int system_accent2_100 = 17170503; // 0x1060047
+    field public static final int system_accent2_1000 = 17170512; // 0x1060050
+    field public static final int system_accent2_200 = 17170504; // 0x1060048
+    field public static final int system_accent2_300 = 17170505; // 0x1060049
+    field public static final int system_accent2_400 = 17170506; // 0x106004a
+    field public static final int system_accent2_50 = 17170502; // 0x1060046
+    field public static final int system_accent2_500 = 17170507; // 0x106004b
+    field public static final int system_accent2_600 = 17170508; // 0x106004c
+    field public static final int system_accent2_700 = 17170509; // 0x106004d
+    field public static final int system_accent2_800 = 17170510; // 0x106004e
+    field public static final int system_accent2_900 = 17170511; // 0x106004f
+    field public static final int system_accent3_0 = 17170513; // 0x1060051
+    field public static final int system_accent3_10 = 17170514; // 0x1060052
+    field public static final int system_accent3_100 = 17170516; // 0x1060054
+    field public static final int system_accent3_1000 = 17170525; // 0x106005d
+    field public static final int system_accent3_200 = 17170517; // 0x1060055
+    field public static final int system_accent3_300 = 17170518; // 0x1060056
+    field public static final int system_accent3_400 = 17170519; // 0x1060057
+    field public static final int system_accent3_50 = 17170515; // 0x1060053
+    field public static final int system_accent3_500 = 17170520; // 0x1060058
+    field public static final int system_accent3_600 = 17170521; // 0x1060059
+    field public static final int system_accent3_700 = 17170522; // 0x106005a
+    field public static final int system_accent3_800 = 17170523; // 0x106005b
+    field public static final int system_accent3_900 = 17170524; // 0x106005c
+    field public static final int system_neutral1_0 = 17170461; // 0x106001d
+    field public static final int system_neutral1_10 = 17170462; // 0x106001e
+    field public static final int system_neutral1_100 = 17170464; // 0x1060020
+    field public static final int system_neutral1_1000 = 17170473; // 0x1060029
+    field public static final int system_neutral1_200 = 17170465; // 0x1060021
+    field public static final int system_neutral1_300 = 17170466; // 0x1060022
+    field public static final int system_neutral1_400 = 17170467; // 0x1060023
+    field public static final int system_neutral1_50 = 17170463; // 0x106001f
+    field public static final int system_neutral1_500 = 17170468; // 0x1060024
+    field public static final int system_neutral1_600 = 17170469; // 0x1060025
+    field public static final int system_neutral1_700 = 17170470; // 0x1060026
+    field public static final int system_neutral1_800 = 17170471; // 0x1060027
+    field public static final int system_neutral1_900 = 17170472; // 0x1060028
+    field public static final int system_neutral2_0 = 17170474; // 0x106002a
+    field public static final int system_neutral2_10 = 17170475; // 0x106002b
+    field public static final int system_neutral2_100 = 17170477; // 0x106002d
+    field public static final int system_neutral2_1000 = 17170486; // 0x1060036
+    field public static final int system_neutral2_200 = 17170478; // 0x106002e
+    field public static final int system_neutral2_300 = 17170479; // 0x106002f
+    field public static final int system_neutral2_400 = 17170480; // 0x1060030
+    field public static final int system_neutral2_50 = 17170476; // 0x106002c
+    field public static final int system_neutral2_500 = 17170481; // 0x1060031
+    field public static final int system_neutral2_600 = 17170482; // 0x1060032
+    field public static final int system_neutral2_700 = 17170483; // 0x1060033
+    field public static final int system_neutral2_800 = 17170484; // 0x1060034
+    field public static final int system_neutral2_900 = 17170485; // 0x1060035
+    field public static final int tab_indicator_text = 17170441; // 0x1060009
+    field @Deprecated public static final int tertiary_text_dark = 17170448; // 0x1060010
+    field @Deprecated public static final int tertiary_text_light = 17170449; // 0x1060011
+    field public static final int transparent = 17170445; // 0x106000d
+    field public static final int white = 17170443; // 0x106000b
+    field public static final int widget_edittext_dark = 17170442; // 0x106000a
+  }
+
+  public static final class R.dimen {
+    ctor public R.dimen();
+    field public static final int app_icon_size = 17104896; // 0x1050000
+    field public static final int dialog_min_width_major = 17104899; // 0x1050003
+    field public static final int dialog_min_width_minor = 17104900; // 0x1050004
+    field public static final int notification_large_icon_height = 17104902; // 0x1050006
+    field public static final int notification_large_icon_width = 17104901; // 0x1050005
+    field public static final int system_app_widget_background_radius = 17104904; // 0x1050008
+    field public static final int system_app_widget_inner_radius = 17104905; // 0x1050009
+    field public static final int thumbnail_height = 17104897; // 0x1050001
+    field public static final int thumbnail_width = 17104898; // 0x1050002
+  }
+
+  public static final class R.drawable {
+    ctor public R.drawable();
+    field public static final int alert_dark_frame = 17301504; // 0x1080000
+    field public static final int alert_light_frame = 17301505; // 0x1080001
+    field public static final int arrow_down_float = 17301506; // 0x1080002
+    field public static final int arrow_up_float = 17301507; // 0x1080003
+    field public static final int bottom_bar = 17301658; // 0x108009a
+    field public static final int btn_default = 17301508; // 0x1080004
+    field public static final int btn_default_small = 17301509; // 0x1080005
+    field public static final int btn_dialog = 17301527; // 0x1080017
+    field public static final int btn_dropdown = 17301510; // 0x1080006
+    field public static final int btn_minus = 17301511; // 0x1080007
+    field public static final int btn_plus = 17301512; // 0x1080008
+    field public static final int btn_radio = 17301513; // 0x1080009
+    field public static final int btn_star = 17301514; // 0x108000a
+    field public static final int btn_star_big_off = 17301515; // 0x108000b
+    field public static final int btn_star_big_on = 17301516; // 0x108000c
+    field public static final int button_onoff_indicator_off = 17301518; // 0x108000e
+    field public static final int button_onoff_indicator_on = 17301517; // 0x108000d
+    field public static final int checkbox_off_background = 17301519; // 0x108000f
+    field public static final int checkbox_on_background = 17301520; // 0x1080010
+    field public static final int dark_header = 17301669; // 0x10800a5
+    field public static final int dialog_frame = 17301521; // 0x1080011
+    field public static final int dialog_holo_dark_frame = 17301682; // 0x10800b2
+    field public static final int dialog_holo_light_frame = 17301683; // 0x10800b3
+    field public static final int divider_horizontal_bright = 17301522; // 0x1080012
+    field public static final int divider_horizontal_dark = 17301524; // 0x1080014
+    field public static final int divider_horizontal_dim_dark = 17301525; // 0x1080015
+    field public static final int divider_horizontal_textfield = 17301523; // 0x1080013
+    field public static final int edit_text = 17301526; // 0x1080016
+    field public static final int editbox_background = 17301528; // 0x1080018
+    field public static final int editbox_background_normal = 17301529; // 0x1080019
+    field public static final int editbox_dropdown_dark_frame = 17301530; // 0x108001a
+    field public static final int editbox_dropdown_light_frame = 17301531; // 0x108001b
+    field public static final int gallery_thumb = 17301532; // 0x108001c
+    field public static final int ic_btn_speak_now = 17301668; // 0x10800a4
+    field public static final int ic_delete = 17301533; // 0x108001d
+    field public static final int ic_dialog_alert = 17301543; // 0x1080027
+    field public static final int ic_dialog_dialer = 17301544; // 0x1080028
+    field public static final int ic_dialog_email = 17301545; // 0x1080029
+    field public static final int ic_dialog_info = 17301659; // 0x108009b
+    field public static final int ic_dialog_map = 17301546; // 0x108002a
+    field public static final int ic_input_add = 17301547; // 0x108002b
+    field public static final int ic_input_delete = 17301548; // 0x108002c
+    field public static final int ic_input_get = 17301549; // 0x108002d
+    field public static final int ic_lock_idle_alarm = 17301550; // 0x108002e
+    field public static final int ic_lock_idle_charging = 17301534; // 0x108001e
+    field public static final int ic_lock_idle_lock = 17301535; // 0x108001f
+    field public static final int ic_lock_idle_low_battery = 17301536; // 0x1080020
+    field public static final int ic_lock_lock = 17301551; // 0x108002f
+    field public static final int ic_lock_power_off = 17301552; // 0x1080030
+    field public static final int ic_lock_silent_mode = 17301553; // 0x1080031
+    field public static final int ic_lock_silent_mode_off = 17301554; // 0x1080032
+    field public static final int ic_media_ff = 17301537; // 0x1080021
+    field public static final int ic_media_next = 17301538; // 0x1080022
+    field public static final int ic_media_pause = 17301539; // 0x1080023
+    field public static final int ic_media_play = 17301540; // 0x1080024
+    field public static final int ic_media_previous = 17301541; // 0x1080025
+    field public static final int ic_media_rew = 17301542; // 0x1080026
+    field public static final int ic_menu_add = 17301555; // 0x1080033
+    field public static final int ic_menu_agenda = 17301556; // 0x1080034
+    field public static final int ic_menu_always_landscape_portrait = 17301557; // 0x1080035
+    field public static final int ic_menu_call = 17301558; // 0x1080036
+    field public static final int ic_menu_camera = 17301559; // 0x1080037
+    field public static final int ic_menu_close_clear_cancel = 17301560; // 0x1080038
+    field public static final int ic_menu_compass = 17301561; // 0x1080039
+    field public static final int ic_menu_crop = 17301562; // 0x108003a
+    field public static final int ic_menu_day = 17301563; // 0x108003b
+    field public static final int ic_menu_delete = 17301564; // 0x108003c
+    field public static final int ic_menu_directions = 17301565; // 0x108003d
+    field public static final int ic_menu_edit = 17301566; // 0x108003e
+    field public static final int ic_menu_gallery = 17301567; // 0x108003f
+    field public static final int ic_menu_help = 17301568; // 0x1080040
+    field public static final int ic_menu_info_details = 17301569; // 0x1080041
+    field public static final int ic_menu_manage = 17301570; // 0x1080042
+    field public static final int ic_menu_mapmode = 17301571; // 0x1080043
+    field public static final int ic_menu_month = 17301572; // 0x1080044
+    field public static final int ic_menu_more = 17301573; // 0x1080045
+    field public static final int ic_menu_my_calendar = 17301574; // 0x1080046
+    field public static final int ic_menu_mylocation = 17301575; // 0x1080047
+    field public static final int ic_menu_myplaces = 17301576; // 0x1080048
+    field public static final int ic_menu_preferences = 17301577; // 0x1080049
+    field public static final int ic_menu_recent_history = 17301578; // 0x108004a
+    field public static final int ic_menu_report_image = 17301579; // 0x108004b
+    field public static final int ic_menu_revert = 17301580; // 0x108004c
+    field public static final int ic_menu_rotate = 17301581; // 0x108004d
+    field public static final int ic_menu_save = 17301582; // 0x108004e
+    field public static final int ic_menu_search = 17301583; // 0x108004f
+    field public static final int ic_menu_send = 17301584; // 0x1080050
+    field public static final int ic_menu_set_as = 17301585; // 0x1080051
+    field public static final int ic_menu_share = 17301586; // 0x1080052
+    field public static final int ic_menu_slideshow = 17301587; // 0x1080053
+    field public static final int ic_menu_sort_alphabetically = 17301660; // 0x108009c
+    field public static final int ic_menu_sort_by_size = 17301661; // 0x108009d
+    field public static final int ic_menu_today = 17301588; // 0x1080054
+    field public static final int ic_menu_upload = 17301589; // 0x1080055
+    field public static final int ic_menu_upload_you_tube = 17301590; // 0x1080056
+    field public static final int ic_menu_view = 17301591; // 0x1080057
+    field public static final int ic_menu_week = 17301592; // 0x1080058
+    field public static final int ic_menu_zoom = 17301593; // 0x1080059
+    field public static final int ic_notification_clear_all = 17301594; // 0x108005a
+    field public static final int ic_notification_overlay = 17301595; // 0x108005b
+    field public static final int ic_partial_secure = 17301596; // 0x108005c
+    field public static final int ic_popup_disk_full = 17301597; // 0x108005d
+    field public static final int ic_popup_reminder = 17301598; // 0x108005e
+    field public static final int ic_popup_sync = 17301599; // 0x108005f
+    field public static final int ic_search_category_default = 17301600; // 0x1080060
+    field public static final int ic_secure = 17301601; // 0x1080061
+    field public static final int list_selector_background = 17301602; // 0x1080062
+    field public static final int menu_frame = 17301603; // 0x1080063
+    field public static final int menu_full_frame = 17301604; // 0x1080064
+    field public static final int menuitem_background = 17301605; // 0x1080065
+    field public static final int picture_frame = 17301606; // 0x1080066
+    field public static final int presence_audio_away = 17301679; // 0x10800af
+    field public static final int presence_audio_busy = 17301680; // 0x10800b0
+    field public static final int presence_audio_online = 17301681; // 0x10800b1
+    field public static final int presence_away = 17301607; // 0x1080067
+    field public static final int presence_busy = 17301608; // 0x1080068
+    field public static final int presence_invisible = 17301609; // 0x1080069
+    field public static final int presence_offline = 17301610; // 0x108006a
+    field public static final int presence_online = 17301611; // 0x108006b
+    field public static final int presence_video_away = 17301676; // 0x10800ac
+    field public static final int presence_video_busy = 17301677; // 0x10800ad
+    field public static final int presence_video_online = 17301678; // 0x10800ae
+    field public static final int progress_horizontal = 17301612; // 0x108006c
+    field public static final int progress_indeterminate_horizontal = 17301613; // 0x108006d
+    field public static final int radiobutton_off_background = 17301614; // 0x108006e
+    field public static final int radiobutton_on_background = 17301615; // 0x108006f
+    field public static final int screen_background_dark = 17301656; // 0x1080098
+    field public static final int screen_background_dark_transparent = 17301673; // 0x10800a9
+    field public static final int screen_background_light = 17301657; // 0x1080099
+    field public static final int screen_background_light_transparent = 17301674; // 0x10800aa
+    field public static final int spinner_background = 17301616; // 0x1080070
+    field public static final int spinner_dropdown_background = 17301617; // 0x1080071
+    field public static final int star_big_off = 17301619; // 0x1080073
+    field public static final int star_big_on = 17301618; // 0x1080072
+    field public static final int star_off = 17301621; // 0x1080075
+    field public static final int star_on = 17301620; // 0x1080074
+    field public static final int stat_notify_call_mute = 17301622; // 0x1080076
+    field public static final int stat_notify_chat = 17301623; // 0x1080077
+    field public static final int stat_notify_error = 17301624; // 0x1080078
+    field public static final int stat_notify_missed_call = 17301631; // 0x108007f
+    field public static final int stat_notify_more = 17301625; // 0x1080079
+    field public static final int stat_notify_sdcard = 17301626; // 0x108007a
+    field public static final int stat_notify_sdcard_prepare = 17301675; // 0x10800ab
+    field public static final int stat_notify_sdcard_usb = 17301627; // 0x108007b
+    field public static final int stat_notify_sync = 17301628; // 0x108007c
+    field public static final int stat_notify_sync_noanim = 17301629; // 0x108007d
+    field public static final int stat_notify_voicemail = 17301630; // 0x108007e
+    field public static final int stat_sys_data_bluetooth = 17301632; // 0x1080080
+    field public static final int stat_sys_download = 17301633; // 0x1080081
+    field public static final int stat_sys_download_done = 17301634; // 0x1080082
+    field public static final int stat_sys_headset = 17301635; // 0x1080083
+    field @Deprecated public static final int stat_sys_phone_call = 17301636; // 0x1080084
+    field @Deprecated public static final int stat_sys_phone_call_forward = 17301637; // 0x1080085
+    field @Deprecated public static final int stat_sys_phone_call_on_hold = 17301638; // 0x1080086
+    field public static final int stat_sys_speakerphone = 17301639; // 0x1080087
+    field public static final int stat_sys_upload = 17301640; // 0x1080088
+    field public static final int stat_sys_upload_done = 17301641; // 0x1080089
+    field @Deprecated public static final int stat_sys_vp_phone_call = 17301671; // 0x10800a7
+    field @Deprecated public static final int stat_sys_vp_phone_call_on_hold = 17301672; // 0x10800a8
+    field public static final int stat_sys_warning = 17301642; // 0x108008a
+    field public static final int status_bar_item_app_background = 17301643; // 0x108008b
+    field public static final int status_bar_item_background = 17301644; // 0x108008c
+    field public static final int sym_action_call = 17301645; // 0x108008d
+    field public static final int sym_action_chat = 17301646; // 0x108008e
+    field public static final int sym_action_email = 17301647; // 0x108008f
+    field public static final int sym_call_incoming = 17301648; // 0x1080090
+    field public static final int sym_call_missed = 17301649; // 0x1080091
+    field public static final int sym_call_outgoing = 17301650; // 0x1080092
+    field public static final int sym_contact_card = 17301652; // 0x1080094
+    field public static final int sym_def_app_icon = 17301651; // 0x1080093
+    field public static final int title_bar = 17301653; // 0x1080095
+    field public static final int title_bar_tall = 17301670; // 0x10800a6
+    field public static final int toast_frame = 17301654; // 0x1080096
+    field public static final int zoom_plate = 17301655; // 0x1080097
+  }
+
+  public static final class R.fraction {
+    ctor public R.fraction();
+  }
+
+  public static final class R.id {
+    ctor public R.id();
+    field public static final int accessibilityActionContextClick = 16908348; // 0x102003c
+    field public static final int accessibilityActionDragCancel = 16908375; // 0x1020057
+    field public static final int accessibilityActionDragDrop = 16908374; // 0x1020056
+    field public static final int accessibilityActionDragStart = 16908373; // 0x1020055
+    field public static final int accessibilityActionHideTooltip = 16908357; // 0x1020045
+    field public static final int accessibilityActionImeEnter = 16908372; // 0x1020054
+    field public static final int accessibilityActionMoveWindow = 16908354; // 0x1020042
+    field public static final int accessibilityActionPageDown = 16908359; // 0x1020047
+    field public static final int accessibilityActionPageLeft = 16908360; // 0x1020048
+    field public static final int accessibilityActionPageRight = 16908361; // 0x1020049
+    field public static final int accessibilityActionPageUp = 16908358; // 0x1020046
+    field public static final int accessibilityActionPressAndHold = 16908362; // 0x102004a
+    field public static final int accessibilityActionScrollDown = 16908346; // 0x102003a
+    field public static final int accessibilityActionScrollLeft = 16908345; // 0x1020039
+    field public static final int accessibilityActionScrollRight = 16908347; // 0x102003b
+    field public static final int accessibilityActionScrollToPosition = 16908343; // 0x1020037
+    field public static final int accessibilityActionScrollUp = 16908344; // 0x1020038
+    field public static final int accessibilityActionSetProgress = 16908349; // 0x102003d
+    field public static final int accessibilityActionShowOnScreen = 16908342; // 0x1020036
+    field public static final int accessibilityActionShowTooltip = 16908356; // 0x1020044
+    field public static final int accessibilitySystemActionBack = 16908363; // 0x102004b
+    field public static final int accessibilitySystemActionHome = 16908364; // 0x102004c
+    field public static final int accessibilitySystemActionLockScreen = 16908370; // 0x1020052
+    field public static final int accessibilitySystemActionNotifications = 16908366; // 0x102004e
+    field public static final int accessibilitySystemActionPowerDialog = 16908368; // 0x1020050
+    field public static final int accessibilitySystemActionQuickSettings = 16908367; // 0x102004f
+    field public static final int accessibilitySystemActionRecents = 16908365; // 0x102004d
+    field public static final int accessibilitySystemActionTakeScreenshot = 16908371; // 0x1020053
+    field public static final int accessibilitySystemActionToggleSplitScreen = 16908369; // 0x1020051
+    field public static final int addToDictionary = 16908330; // 0x102002a
+    field public static final int autofill = 16908355; // 0x1020043
+    field public static final int background = 16908288; // 0x1020000
+    field public static final int button1 = 16908313; // 0x1020019
+    field public static final int button2 = 16908314; // 0x102001a
+    field public static final int button3 = 16908315; // 0x102001b
+    field public static final int candidatesArea = 16908317; // 0x102001d
+    field public static final int checkbox = 16908289; // 0x1020001
+    field public static final int closeButton = 16908327; // 0x1020027
+    field public static final int content = 16908290; // 0x1020002
+    field public static final int copy = 16908321; // 0x1020021
+    field public static final int copyUrl = 16908323; // 0x1020023
+    field public static final int custom = 16908331; // 0x102002b
+    field public static final int cut = 16908320; // 0x1020020
+    field public static final int edit = 16908291; // 0x1020003
+    field public static final int empty = 16908292; // 0x1020004
+    field public static final int extractArea = 16908316; // 0x102001c
+    field public static final int hint = 16908293; // 0x1020005
+    field public static final int home = 16908332; // 0x102002c
+    field public static final int icon = 16908294; // 0x1020006
+    field public static final int icon1 = 16908295; // 0x1020007
+    field public static final int icon2 = 16908296; // 0x1020008
+    field public static final int icon_frame = 16908350; // 0x102003e
+    field public static final int input = 16908297; // 0x1020009
+    field public static final int inputArea = 16908318; // 0x102001e
+    field public static final int inputExtractEditText = 16908325; // 0x1020025
+    field @Deprecated public static final int keyboardView = 16908326; // 0x1020026
+    field public static final int list = 16908298; // 0x102000a
+    field public static final int list_container = 16908351; // 0x102003f
+    field public static final int mask = 16908334; // 0x102002e
+    field public static final int message = 16908299; // 0x102000b
+    field public static final int navigationBarBackground = 16908336; // 0x1020030
+    field public static final int paste = 16908322; // 0x1020022
+    field public static final int pasteAsPlainText = 16908337; // 0x1020031
+    field public static final int primary = 16908300; // 0x102000c
+    field public static final int progress = 16908301; // 0x102000d
+    field public static final int redo = 16908339; // 0x1020033
+    field public static final int replaceText = 16908340; // 0x1020034
+    field public static final int secondaryProgress = 16908303; // 0x102000f
+    field public static final int selectAll = 16908319; // 0x102001f
+    field public static final int selectTextMode = 16908333; // 0x102002d
+    field public static final int selectedIcon = 16908302; // 0x102000e
+    field public static final int shareText = 16908341; // 0x1020035
+    field public static final int startSelectingText = 16908328; // 0x1020028
+    field public static final int statusBarBackground = 16908335; // 0x102002f
+    field public static final int stopSelectingText = 16908329; // 0x1020029
+    field public static final int summary = 16908304; // 0x1020010
+    field public static final int switchInputMethod = 16908324; // 0x1020024
+    field public static final int switch_widget = 16908352; // 0x1020040
+    field public static final int tabcontent = 16908305; // 0x1020011
+    field public static final int tabhost = 16908306; // 0x1020012
+    field public static final int tabs = 16908307; // 0x1020013
+    field public static final int text1 = 16908308; // 0x1020014
+    field public static final int text2 = 16908309; // 0x1020015
+    field public static final int textAssist = 16908353; // 0x1020041
+    field public static final int title = 16908310; // 0x1020016
+    field public static final int toggle = 16908311; // 0x1020017
+    field public static final int undo = 16908338; // 0x1020032
+    field public static final int widget_frame = 16908312; // 0x1020018
+  }
+
+  public static final class R.integer {
+    ctor public R.integer();
+    field public static final int config_longAnimTime = 17694722; // 0x10e0002
+    field public static final int config_mediumAnimTime = 17694721; // 0x10e0001
+    field public static final int config_shortAnimTime = 17694720; // 0x10e0000
+    field public static final int status_bar_notification_info_maxnum = 17694723; // 0x10e0003
+  }
+
+  public static final class R.interpolator {
+    ctor public R.interpolator();
+    field public static final int accelerate_cubic = 17563650; // 0x10c0002
+    field public static final int accelerate_decelerate = 17563654; // 0x10c0006
+    field public static final int accelerate_quad = 17563648; // 0x10c0000
+    field public static final int accelerate_quint = 17563652; // 0x10c0004
+    field public static final int anticipate = 17563655; // 0x10c0007
+    field public static final int anticipate_overshoot = 17563657; // 0x10c0009
+    field public static final int bounce = 17563658; // 0x10c000a
+    field public static final int cycle = 17563660; // 0x10c000c
+    field public static final int decelerate_cubic = 17563651; // 0x10c0003
+    field public static final int decelerate_quad = 17563649; // 0x10c0001
+    field public static final int decelerate_quint = 17563653; // 0x10c0005
+    field public static final int fast_out_extra_slow_in = 17563674; // 0x10c001a
+    field public static final int fast_out_linear_in = 17563663; // 0x10c000f
+    field public static final int fast_out_slow_in = 17563661; // 0x10c000d
+    field public static final int linear = 17563659; // 0x10c000b
+    field public static final int linear_out_slow_in = 17563662; // 0x10c000e
+    field public static final int overshoot = 17563656; // 0x10c0008
+  }
+
+  public static final class R.layout {
+    ctor public R.layout();
+    field public static final int activity_list_item = 17367040; // 0x1090000
+    field public static final int browser_link_context_header = 17367054; // 0x109000e
+    field public static final int expandable_list_content = 17367041; // 0x1090001
+    field public static final int list_content = 17367060; // 0x1090014
+    field public static final int preference_category = 17367042; // 0x1090002
+    field public static final int select_dialog_item = 17367057; // 0x1090011
+    field public static final int select_dialog_multichoice = 17367059; // 0x1090013
+    field public static final int select_dialog_singlechoice = 17367058; // 0x1090012
+    field public static final int simple_dropdown_item_1line = 17367050; // 0x109000a
+    field public static final int simple_expandable_list_item_1 = 17367046; // 0x1090006
+    field public static final int simple_expandable_list_item_2 = 17367047; // 0x1090007
+    field public static final int simple_gallery_item = 17367051; // 0x109000b
+    field public static final int simple_list_item_1 = 17367043; // 0x1090003
+    field public static final int simple_list_item_2 = 17367044; // 0x1090004
+    field public static final int simple_list_item_activated_1 = 17367062; // 0x1090016
+    field public static final int simple_list_item_activated_2 = 17367063; // 0x1090017
+    field public static final int simple_list_item_checked = 17367045; // 0x1090005
+    field public static final int simple_list_item_multiple_choice = 17367056; // 0x1090010
+    field public static final int simple_list_item_single_choice = 17367055; // 0x109000f
+    field public static final int simple_selectable_list_item = 17367061; // 0x1090015
+    field public static final int simple_spinner_dropdown_item = 17367049; // 0x1090009
+    field public static final int simple_spinner_item = 17367048; // 0x1090008
+    field public static final int test_list_item = 17367052; // 0x109000c
+    field public static final int two_line_list_item = 17367053; // 0x109000d
+  }
+
+  public static final class R.menu {
+    ctor public R.menu();
+  }
+
+  public static final class R.mipmap {
+    ctor public R.mipmap();
+    field public static final int sym_def_app_icon = 17629184; // 0x10d0000
+  }
+
+  public static final class R.plurals {
+    ctor public R.plurals();
+  }
+
+  public static final class R.raw {
+    ctor public R.raw();
+  }
+
+  public static final class R.string {
+    ctor public R.string();
+    field public static final int VideoView_error_button = 17039376; // 0x1040010
+    field public static final int VideoView_error_text_invalid_progressive_playback = 17039381; // 0x1040015
+    field public static final int VideoView_error_text_unknown = 17039377; // 0x1040011
+    field public static final int VideoView_error_title = 17039378; // 0x1040012
+    field public static final int autofill = 17039386; // 0x104001a
+    field public static final int cancel = 17039360; // 0x1040000
+    field public static final int copy = 17039361; // 0x1040001
+    field public static final int copyUrl = 17039362; // 0x1040002
+    field public static final int cut = 17039363; // 0x1040003
+    field public static final int defaultMsisdnAlphaTag = 17039365; // 0x1040005
+    field public static final int defaultVoiceMailAlphaTag = 17039364; // 0x1040004
+    field public static final int dialog_alert_title = 17039380; // 0x1040014
+    field public static final int emptyPhoneNumber = 17039366; // 0x1040006
+    field public static final int fingerprint_icon_content_description = 17039384; // 0x1040018
+    field public static final int httpErrorBadUrl = 17039367; // 0x1040007
+    field public static final int httpErrorUnsupportedScheme = 17039368; // 0x1040008
+    field @Deprecated public static final int no = 17039369; // 0x1040009
+    field public static final int ok = 17039370; // 0x104000a
+    field public static final int paste = 17039371; // 0x104000b
+    field public static final int paste_as_plain_text = 17039385; // 0x1040019
+    field public static final int search_go = 17039372; // 0x104000c
+    field public static final int selectAll = 17039373; // 0x104000d
+    field public static final int selectTextMode = 17039382; // 0x1040016
+    field public static final int status_bar_notification_info_overflow = 17039383; // 0x1040017
+    field public static final int unknownName = 17039374; // 0x104000e
+    field public static final int untitled = 17039375; // 0x104000f
+    field @Deprecated public static final int yes = 17039379; // 0x1040013
+  }
+
+  public static final class R.style {
+    ctor public R.style();
+    field public static final int Animation = 16973824; // 0x1030000
+    field public static final int Animation_Activity = 16973825; // 0x1030001
+    field public static final int Animation_Dialog = 16973826; // 0x1030002
+    field public static final int Animation_InputMethod = 16973910; // 0x1030056
+    field public static final int Animation_Toast = 16973828; // 0x1030004
+    field public static final int Animation_Translucent = 16973827; // 0x1030003
+    field public static final int DeviceDefault_ButtonBar = 16974287; // 0x10301cf
+    field public static final int DeviceDefault_ButtonBar_AlertDialog = 16974288; // 0x10301d0
+    field public static final int DeviceDefault_Light_ButtonBar = 16974290; // 0x10301d2
+    field public static final int DeviceDefault_Light_ButtonBar_AlertDialog = 16974291; // 0x10301d3
+    field public static final int DeviceDefault_Light_SegmentedButton = 16974292; // 0x10301d4
+    field public static final int DeviceDefault_SegmentedButton = 16974289; // 0x10301d1
+    field public static final int Holo_ButtonBar = 16974053; // 0x10300e5
+    field public static final int Holo_ButtonBar_AlertDialog = 16974055; // 0x10300e7
+    field public static final int Holo_Light_ButtonBar = 16974054; // 0x10300e6
+    field public static final int Holo_Light_ButtonBar_AlertDialog = 16974056; // 0x10300e8
+    field public static final int Holo_Light_SegmentedButton = 16974058; // 0x10300ea
+    field public static final int Holo_SegmentedButton = 16974057; // 0x10300e9
+    field public static final int MediaButton = 16973879; // 0x1030037
+    field public static final int MediaButton_Ffwd = 16973883; // 0x103003b
+    field public static final int MediaButton_Next = 16973881; // 0x1030039
+    field public static final int MediaButton_Pause = 16973885; // 0x103003d
+    field public static final int MediaButton_Play = 16973882; // 0x103003a
+    field public static final int MediaButton_Previous = 16973880; // 0x1030038
+    field public static final int MediaButton_Rew = 16973884; // 0x103003c
+    field public static final int TextAppearance = 16973886; // 0x103003e
+    field public static final int TextAppearance_DeviceDefault = 16974253; // 0x10301ad
+    field public static final int TextAppearance_DeviceDefault_DialogWindowTitle = 16974264; // 0x10301b8
+    field public static final int TextAppearance_DeviceDefault_Inverse = 16974254; // 0x10301ae
+    field public static final int TextAppearance_DeviceDefault_Large = 16974255; // 0x10301af
+    field public static final int TextAppearance_DeviceDefault_Large_Inverse = 16974256; // 0x10301b0
+    field public static final int TextAppearance_DeviceDefault_Medium = 16974257; // 0x10301b1
+    field public static final int TextAppearance_DeviceDefault_Medium_Inverse = 16974258; // 0x10301b2
+    field public static final int TextAppearance_DeviceDefault_SearchResult_Subtitle = 16974262; // 0x10301b6
+    field public static final int TextAppearance_DeviceDefault_SearchResult_Title = 16974261; // 0x10301b5
+    field public static final int TextAppearance_DeviceDefault_Small = 16974259; // 0x10301b3
+    field public static final int TextAppearance_DeviceDefault_Small_Inverse = 16974260; // 0x10301b4
+    field public static final int TextAppearance_DeviceDefault_Widget = 16974265; // 0x10301b9
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Menu = 16974286; // 0x10301ce
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle = 16974279; // 0x10301c7
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse = 16974283; // 0x10301cb
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title = 16974278; // 0x10301c6
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse = 16974282; // 0x10301ca
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle = 16974281; // 0x10301c9
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse = 16974285; // 0x10301cd
+    field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title = 16974280; // 0x10301c8
+    field @Deprecated public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse = 16974284; // 0x10301cc
+    field public static final int TextAppearance_DeviceDefault_Widget_Button = 16974266; // 0x10301ba
+    field public static final int TextAppearance_DeviceDefault_Widget_DropDownHint = 16974271; // 0x10301bf
+    field public static final int TextAppearance_DeviceDefault_Widget_DropDownItem = 16974272; // 0x10301c0
+    field public static final int TextAppearance_DeviceDefault_Widget_EditText = 16974274; // 0x10301c2
+    field public static final int TextAppearance_DeviceDefault_Widget_IconMenu_Item = 16974267; // 0x10301bb
+    field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu = 16974275; // 0x10301c3
+    field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Large = 16974276; // 0x10301c4
+    field public static final int TextAppearance_DeviceDefault_Widget_PopupMenu_Small = 16974277; // 0x10301c5
+    field public static final int TextAppearance_DeviceDefault_Widget_TabWidget = 16974268; // 0x10301bc
+    field public static final int TextAppearance_DeviceDefault_Widget_TextView = 16974269; // 0x10301bd
+    field public static final int TextAppearance_DeviceDefault_Widget_TextView_PopupMenu = 16974270; // 0x10301be
+    field public static final int TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem = 16974273; // 0x10301c1
+    field public static final int TextAppearance_DeviceDefault_WindowTitle = 16974263; // 0x10301b7
+    field public static final int TextAppearance_DialogWindowTitle = 16973889; // 0x1030041
+    field public static final int TextAppearance_Holo = 16974075; // 0x10300fb
+    field public static final int TextAppearance_Holo_DialogWindowTitle = 16974103; // 0x1030117
+    field public static final int TextAppearance_Holo_Inverse = 16974076; // 0x10300fc
+    field public static final int TextAppearance_Holo_Large = 16974077; // 0x10300fd
+    field public static final int TextAppearance_Holo_Large_Inverse = 16974078; // 0x10300fe
+    field public static final int TextAppearance_Holo_Medium = 16974079; // 0x10300ff
+    field public static final int TextAppearance_Holo_Medium_Inverse = 16974080; // 0x1030100
+    field public static final int TextAppearance_Holo_SearchResult_Subtitle = 16974084; // 0x1030104
+    field public static final int TextAppearance_Holo_SearchResult_Title = 16974083; // 0x1030103
+    field public static final int TextAppearance_Holo_Small = 16974081; // 0x1030101
+    field public static final int TextAppearance_Holo_Small_Inverse = 16974082; // 0x1030102
+    field public static final int TextAppearance_Holo_Widget = 16974085; // 0x1030105
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Menu = 16974112; // 0x1030120
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle = 16974099; // 0x1030113
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse = 16974109; // 0x103011d
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Title = 16974098; // 0x1030112
+    field public static final int TextAppearance_Holo_Widget_ActionBar_Title_Inverse = 16974108; // 0x103011c
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle = 16974101; // 0x1030115
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse = 16974111; // 0x103011f
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Title = 16974100; // 0x1030114
+    field public static final int TextAppearance_Holo_Widget_ActionMode_Title_Inverse = 16974110; // 0x103011e
+    field public static final int TextAppearance_Holo_Widget_Button = 16974086; // 0x1030106
+    field public static final int TextAppearance_Holo_Widget_DropDownHint = 16974091; // 0x103010b
+    field public static final int TextAppearance_Holo_Widget_DropDownItem = 16974092; // 0x103010c
+    field public static final int TextAppearance_Holo_Widget_EditText = 16974094; // 0x103010e
+    field public static final int TextAppearance_Holo_Widget_IconMenu_Item = 16974087; // 0x1030107
+    field public static final int TextAppearance_Holo_Widget_PopupMenu = 16974095; // 0x103010f
+    field public static final int TextAppearance_Holo_Widget_PopupMenu_Large = 16974096; // 0x1030110
+    field public static final int TextAppearance_Holo_Widget_PopupMenu_Small = 16974097; // 0x1030111
+    field public static final int TextAppearance_Holo_Widget_TabWidget = 16974088; // 0x1030108
+    field public static final int TextAppearance_Holo_Widget_TextView = 16974089; // 0x1030109
+    field public static final int TextAppearance_Holo_Widget_TextView_PopupMenu = 16974090; // 0x103010a
+    field public static final int TextAppearance_Holo_Widget_TextView_SpinnerItem = 16974093; // 0x103010d
+    field public static final int TextAppearance_Holo_WindowTitle = 16974102; // 0x1030116
+    field public static final int TextAppearance_Inverse = 16973887; // 0x103003f
+    field public static final int TextAppearance_Large = 16973890; // 0x1030042
+    field public static final int TextAppearance_Large_Inverse = 16973891; // 0x1030043
+    field public static final int TextAppearance_Material = 16974317; // 0x10301ed
+    field public static final int TextAppearance_Material_Body1 = 16974320; // 0x10301f0
+    field public static final int TextAppearance_Material_Body2 = 16974319; // 0x10301ef
+    field public static final int TextAppearance_Material_Button = 16974318; // 0x10301ee
+    field public static final int TextAppearance_Material_Caption = 16974321; // 0x10301f1
+    field public static final int TextAppearance_Material_DialogWindowTitle = 16974322; // 0x10301f2
+    field public static final int TextAppearance_Material_Display1 = 16974326; // 0x10301f6
+    field public static final int TextAppearance_Material_Display2 = 16974325; // 0x10301f5
+    field public static final int TextAppearance_Material_Display3 = 16974324; // 0x10301f4
+    field public static final int TextAppearance_Material_Display4 = 16974323; // 0x10301f3
+    field public static final int TextAppearance_Material_Headline = 16974327; // 0x10301f7
+    field public static final int TextAppearance_Material_Inverse = 16974328; // 0x10301f8
+    field public static final int TextAppearance_Material_Large = 16974329; // 0x10301f9
+    field public static final int TextAppearance_Material_Large_Inverse = 16974330; // 0x10301fa
+    field public static final int TextAppearance_Material_Medium = 16974331; // 0x10301fb
+    field public static final int TextAppearance_Material_Medium_Inverse = 16974332; // 0x10301fc
+    field public static final int TextAppearance_Material_Menu = 16974333; // 0x10301fd
+    field public static final int TextAppearance_Material_Notification = 16974334; // 0x10301fe
+    field public static final int TextAppearance_Material_Notification_Emphasis = 16974335; // 0x10301ff
+    field public static final int TextAppearance_Material_Notification_Info = 16974336; // 0x1030200
+    field public static final int TextAppearance_Material_Notification_Line2 = 16974337; // 0x1030201
+    field public static final int TextAppearance_Material_Notification_Time = 16974338; // 0x1030202
+    field public static final int TextAppearance_Material_Notification_Title = 16974339; // 0x1030203
+    field public static final int TextAppearance_Material_SearchResult_Subtitle = 16974340; // 0x1030204
+    field public static final int TextAppearance_Material_SearchResult_Title = 16974341; // 0x1030205
+    field public static final int TextAppearance_Material_Small = 16974342; // 0x1030206
+    field public static final int TextAppearance_Material_Small_Inverse = 16974343; // 0x1030207
+    field public static final int TextAppearance_Material_Subhead = 16974344; // 0x1030208
+    field public static final int TextAppearance_Material_Title = 16974345; // 0x1030209
+    field public static final int TextAppearance_Material_Widget = 16974347; // 0x103020b
+    field public static final int TextAppearance_Material_Widget_ActionBar_Menu = 16974348; // 0x103020c
+    field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle = 16974349; // 0x103020d
+    field public static final int TextAppearance_Material_Widget_ActionBar_Subtitle_Inverse = 16974350; // 0x103020e
+    field public static final int TextAppearance_Material_Widget_ActionBar_Title = 16974351; // 0x103020f
+    field public static final int TextAppearance_Material_Widget_ActionBar_Title_Inverse = 16974352; // 0x1030210
+    field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle = 16974353; // 0x1030211
+    field public static final int TextAppearance_Material_Widget_ActionMode_Subtitle_Inverse = 16974354; // 0x1030212
+    field public static final int TextAppearance_Material_Widget_ActionMode_Title = 16974355; // 0x1030213
+    field public static final int TextAppearance_Material_Widget_ActionMode_Title_Inverse = 16974356; // 0x1030214
+    field public static final int TextAppearance_Material_Widget_Button = 16974357; // 0x1030215
+    field public static final int TextAppearance_Material_Widget_Button_Borderless_Colored = 16974559; // 0x10302df
+    field public static final int TextAppearance_Material_Widget_Button_Colored = 16974558; // 0x10302de
+    field public static final int TextAppearance_Material_Widget_Button_Inverse = 16974548; // 0x10302d4
+    field public static final int TextAppearance_Material_Widget_DropDownHint = 16974358; // 0x1030216
+    field public static final int TextAppearance_Material_Widget_DropDownItem = 16974359; // 0x1030217
+    field public static final int TextAppearance_Material_Widget_EditText = 16974360; // 0x1030218
+    field public static final int TextAppearance_Material_Widget_IconMenu_Item = 16974361; // 0x1030219
+    field public static final int TextAppearance_Material_Widget_PopupMenu = 16974362; // 0x103021a
+    field public static final int TextAppearance_Material_Widget_PopupMenu_Large = 16974363; // 0x103021b
+    field public static final int TextAppearance_Material_Widget_PopupMenu_Small = 16974364; // 0x103021c
+    field public static final int TextAppearance_Material_Widget_TabWidget = 16974365; // 0x103021d
+    field public static final int TextAppearance_Material_Widget_TextView = 16974366; // 0x103021e
+    field public static final int TextAppearance_Material_Widget_TextView_PopupMenu = 16974367; // 0x103021f
+    field public static final int TextAppearance_Material_Widget_TextView_SpinnerItem = 16974368; // 0x1030220
+    field public static final int TextAppearance_Material_Widget_Toolbar_Subtitle = 16974369; // 0x1030221
+    field public static final int TextAppearance_Material_Widget_Toolbar_Title = 16974370; // 0x1030222
+    field public static final int TextAppearance_Material_WindowTitle = 16974346; // 0x103020a
+    field public static final int TextAppearance_Medium = 16973892; // 0x1030044
+    field public static final int TextAppearance_Medium_Inverse = 16973893; // 0x1030045
+    field public static final int TextAppearance_Small = 16973894; // 0x1030046
+    field public static final int TextAppearance_Small_Inverse = 16973895; // 0x1030047
+    field public static final int TextAppearance_StatusBar_EventContent = 16973927; // 0x1030067
+    field public static final int TextAppearance_StatusBar_EventContent_Title = 16973928; // 0x1030068
+    field public static final int TextAppearance_StatusBar_Icon = 16973926; // 0x1030066
+    field public static final int TextAppearance_StatusBar_Title = 16973925; // 0x1030065
+    field public static final int TextAppearance_SuggestionHighlight = 16974104; // 0x1030118
+    field public static final int TextAppearance_Theme = 16973888; // 0x1030040
+    field public static final int TextAppearance_Theme_Dialog = 16973896; // 0x1030048
+    field public static final int TextAppearance_Widget = 16973897; // 0x1030049
+    field public static final int TextAppearance_Widget_Button = 16973898; // 0x103004a
+    field public static final int TextAppearance_Widget_DropDownHint = 16973904; // 0x1030050
+    field public static final int TextAppearance_Widget_DropDownItem = 16973905; // 0x1030051
+    field public static final int TextAppearance_Widget_EditText = 16973900; // 0x103004c
+    field public static final int TextAppearance_Widget_IconMenu_Item = 16973899; // 0x103004b
+    field public static final int TextAppearance_Widget_PopupMenu_Large = 16973952; // 0x1030080
+    field public static final int TextAppearance_Widget_PopupMenu_Small = 16973953; // 0x1030081
+    field public static final int TextAppearance_Widget_TabWidget = 16973901; // 0x103004d
+    field public static final int TextAppearance_Widget_TextView = 16973902; // 0x103004e
+    field public static final int TextAppearance_Widget_TextView_PopupMenu = 16973903; // 0x103004f
+    field public static final int TextAppearance_Widget_TextView_SpinnerItem = 16973906; // 0x1030052
+    field public static final int TextAppearance_WindowTitle = 16973907; // 0x1030053
+    field public static final int Theme = 16973829; // 0x1030005
+    field public static final int ThemeOverlay = 16974407; // 0x1030247
+    field public static final int ThemeOverlay_DeviceDefault_Accent_DayNight = 16974564; // 0x10302e4
+    field public static final int ThemeOverlay_Material = 16974408; // 0x1030248
+    field public static final int ThemeOverlay_Material_ActionBar = 16974409; // 0x1030249
+    field public static final int ThemeOverlay_Material_Dark = 16974411; // 0x103024b
+    field public static final int ThemeOverlay_Material_Dark_ActionBar = 16974412; // 0x103024c
+    field public static final int ThemeOverlay_Material_Dialog = 16974550; // 0x10302d6
+    field public static final int ThemeOverlay_Material_Dialog_Alert = 16974551; // 0x10302d7
+    field public static final int ThemeOverlay_Material_Light = 16974410; // 0x103024a
+    field public static final int Theme_Black = 16973832; // 0x1030008
+    field public static final int Theme_Black_NoTitleBar = 16973833; // 0x1030009
+    field public static final int Theme_Black_NoTitleBar_Fullscreen = 16973834; // 0x103000a
+    field public static final int Theme_DeviceDefault = 16974120; // 0x1030128
+    field public static final int Theme_DeviceDefault_DayNight = 16974563; // 0x10302e3
+    field public static final int Theme_DeviceDefault_Dialog = 16974126; // 0x103012e
+    field public static final int Theme_DeviceDefault_DialogWhenLarge = 16974134; // 0x1030136
+    field public static final int Theme_DeviceDefault_DialogWhenLarge_NoActionBar = 16974135; // 0x1030137
+    field public static final int Theme_DeviceDefault_Dialog_Alert = 16974545; // 0x10302d1
+    field public static final int Theme_DeviceDefault_Dialog_MinWidth = 16974127; // 0x103012f
+    field public static final int Theme_DeviceDefault_Dialog_NoActionBar = 16974128; // 0x1030130
+    field public static final int Theme_DeviceDefault_Dialog_NoActionBar_MinWidth = 16974129; // 0x1030131
+    field public static final int Theme_DeviceDefault_InputMethod = 16974142; // 0x103013e
+    field public static final int Theme_DeviceDefault_Light = 16974123; // 0x103012b
+    field public static final int Theme_DeviceDefault_Light_DarkActionBar = 16974143; // 0x103013f
+    field public static final int Theme_DeviceDefault_Light_Dialog = 16974130; // 0x1030132
+    field public static final int Theme_DeviceDefault_Light_DialogWhenLarge = 16974136; // 0x1030138
+    field public static final int Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar = 16974137; // 0x1030139
+    field public static final int Theme_DeviceDefault_Light_Dialog_Alert = 16974546; // 0x10302d2
+    field public static final int Theme_DeviceDefault_Light_Dialog_MinWidth = 16974131; // 0x1030133
+    field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar = 16974132; // 0x1030134
+    field public static final int Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth = 16974133; // 0x1030135
+    field public static final int Theme_DeviceDefault_Light_NoActionBar = 16974124; // 0x103012c
+    field public static final int Theme_DeviceDefault_Light_NoActionBar_Fullscreen = 16974125; // 0x103012d
+    field public static final int Theme_DeviceDefault_Light_NoActionBar_Overscan = 16974304; // 0x10301e0
+    field public static final int Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor = 16974308; // 0x10301e4
+    field public static final int Theme_DeviceDefault_Light_Panel = 16974139; // 0x103013b
+    field public static final int Theme_DeviceDefault_NoActionBar = 16974121; // 0x1030129
+    field public static final int Theme_DeviceDefault_NoActionBar_Fullscreen = 16974122; // 0x103012a
+    field public static final int Theme_DeviceDefault_NoActionBar_Overscan = 16974303; // 0x10301df
+    field public static final int Theme_DeviceDefault_NoActionBar_TranslucentDecor = 16974307; // 0x10301e3
+    field public static final int Theme_DeviceDefault_Panel = 16974138; // 0x103013a
+    field public static final int Theme_DeviceDefault_Settings = 16974371; // 0x1030223
+    field public static final int Theme_DeviceDefault_Wallpaper = 16974140; // 0x103013c
+    field public static final int Theme_DeviceDefault_Wallpaper_NoTitleBar = 16974141; // 0x103013d
+    field public static final int Theme_Dialog = 16973835; // 0x103000b
+    field @Deprecated public static final int Theme_Holo = 16973931; // 0x103006b
+    field @Deprecated public static final int Theme_Holo_Dialog = 16973935; // 0x103006f
+    field @Deprecated public static final int Theme_Holo_DialogWhenLarge = 16973943; // 0x1030077
+    field @Deprecated public static final int Theme_Holo_DialogWhenLarge_NoActionBar = 16973944; // 0x1030078
+    field @Deprecated public static final int Theme_Holo_Dialog_MinWidth = 16973936; // 0x1030070
+    field @Deprecated public static final int Theme_Holo_Dialog_NoActionBar = 16973937; // 0x1030071
+    field @Deprecated public static final int Theme_Holo_Dialog_NoActionBar_MinWidth = 16973938; // 0x1030072
+    field @Deprecated public static final int Theme_Holo_InputMethod = 16973951; // 0x103007f
+    field @Deprecated public static final int Theme_Holo_Light = 16973934; // 0x103006e
+    field @Deprecated public static final int Theme_Holo_Light_DarkActionBar = 16974105; // 0x1030119
+    field @Deprecated public static final int Theme_Holo_Light_Dialog = 16973939; // 0x1030073
+    field @Deprecated public static final int Theme_Holo_Light_DialogWhenLarge = 16973945; // 0x1030079
+    field @Deprecated public static final int Theme_Holo_Light_DialogWhenLarge_NoActionBar = 16973946; // 0x103007a
+    field @Deprecated public static final int Theme_Holo_Light_Dialog_MinWidth = 16973940; // 0x1030074
+    field @Deprecated public static final int Theme_Holo_Light_Dialog_NoActionBar = 16973941; // 0x1030075
+    field @Deprecated public static final int Theme_Holo_Light_Dialog_NoActionBar_MinWidth = 16973942; // 0x1030076
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar = 16974064; // 0x10300f0
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar_Fullscreen = 16974065; // 0x10300f1
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar_Overscan = 16974302; // 0x10301de
+    field @Deprecated public static final int Theme_Holo_Light_NoActionBar_TranslucentDecor = 16974306; // 0x10301e2
+    field @Deprecated public static final int Theme_Holo_Light_Panel = 16973948; // 0x103007c
+    field @Deprecated public static final int Theme_Holo_NoActionBar = 16973932; // 0x103006c
+    field @Deprecated public static final int Theme_Holo_NoActionBar_Fullscreen = 16973933; // 0x103006d
+    field @Deprecated public static final int Theme_Holo_NoActionBar_Overscan = 16974301; // 0x10301dd
+    field @Deprecated public static final int Theme_Holo_NoActionBar_TranslucentDecor = 16974305; // 0x10301e1
+    field @Deprecated public static final int Theme_Holo_Panel = 16973947; // 0x103007b
+    field @Deprecated public static final int Theme_Holo_Wallpaper = 16973949; // 0x103007d
+    field @Deprecated public static final int Theme_Holo_Wallpaper_NoTitleBar = 16973950; // 0x103007e
+    field public static final int Theme_InputMethod = 16973908; // 0x1030054
+    field public static final int Theme_Light = 16973836; // 0x103000c
+    field public static final int Theme_Light_NoTitleBar = 16973837; // 0x103000d
+    field public static final int Theme_Light_NoTitleBar_Fullscreen = 16973838; // 0x103000e
+    field public static final int Theme_Light_Panel = 16973914; // 0x103005a
+    field public static final int Theme_Light_WallpaperSettings = 16973922; // 0x1030062
+    field public static final int Theme_Material = 16974372; // 0x1030224
+    field public static final int Theme_Material_Dialog = 16974373; // 0x1030225
+    field public static final int Theme_Material_DialogWhenLarge = 16974379; // 0x103022b
+    field public static final int Theme_Material_DialogWhenLarge_NoActionBar = 16974380; // 0x103022c
+    field public static final int Theme_Material_Dialog_Alert = 16974374; // 0x1030226
+    field public static final int Theme_Material_Dialog_MinWidth = 16974375; // 0x1030227
+    field public static final int Theme_Material_Dialog_NoActionBar = 16974376; // 0x1030228
+    field public static final int Theme_Material_Dialog_NoActionBar_MinWidth = 16974377; // 0x1030229
+    field public static final int Theme_Material_Dialog_Presentation = 16974378; // 0x103022a
+    field public static final int Theme_Material_InputMethod = 16974381; // 0x103022d
+    field public static final int Theme_Material_Light = 16974391; // 0x1030237
+    field public static final int Theme_Material_Light_DarkActionBar = 16974392; // 0x1030238
+    field public static final int Theme_Material_Light_Dialog = 16974393; // 0x1030239
+    field public static final int Theme_Material_Light_DialogWhenLarge = 16974399; // 0x103023f
+    field public static final int Theme_Material_Light_DialogWhenLarge_DarkActionBar = 16974552; // 0x10302d8
+    field public static final int Theme_Material_Light_DialogWhenLarge_NoActionBar = 16974400; // 0x1030240
+    field public static final int Theme_Material_Light_Dialog_Alert = 16974394; // 0x103023a
+    field public static final int Theme_Material_Light_Dialog_MinWidth = 16974395; // 0x103023b
+    field public static final int Theme_Material_Light_Dialog_NoActionBar = 16974396; // 0x103023c
+    field public static final int Theme_Material_Light_Dialog_NoActionBar_MinWidth = 16974397; // 0x103023d
+    field public static final int Theme_Material_Light_Dialog_Presentation = 16974398; // 0x103023e
+    field public static final int Theme_Material_Light_LightStatusBar = 16974549; // 0x10302d5
+    field public static final int Theme_Material_Light_NoActionBar = 16974401; // 0x1030241
+    field public static final int Theme_Material_Light_NoActionBar_Fullscreen = 16974402; // 0x1030242
+    field @Deprecated public static final int Theme_Material_Light_NoActionBar_Overscan = 16974403; // 0x1030243
+    field public static final int Theme_Material_Light_NoActionBar_TranslucentDecor = 16974404; // 0x1030244
+    field public static final int Theme_Material_Light_Panel = 16974405; // 0x1030245
+    field public static final int Theme_Material_Light_Voice = 16974406; // 0x1030246
+    field public static final int Theme_Material_NoActionBar = 16974382; // 0x103022e
+    field public static final int Theme_Material_NoActionBar_Fullscreen = 16974383; // 0x103022f
+    field @Deprecated public static final int Theme_Material_NoActionBar_Overscan = 16974384; // 0x1030230
+    field public static final int Theme_Material_NoActionBar_TranslucentDecor = 16974385; // 0x1030231
+    field public static final int Theme_Material_Panel = 16974386; // 0x1030232
+    field public static final int Theme_Material_Settings = 16974387; // 0x1030233
+    field public static final int Theme_Material_Voice = 16974388; // 0x1030234
+    field public static final int Theme_Material_Wallpaper = 16974389; // 0x1030235
+    field public static final int Theme_Material_Wallpaper_NoTitleBar = 16974390; // 0x1030236
+    field public static final int Theme_NoDisplay = 16973909; // 0x1030055
+    field public static final int Theme_NoTitleBar = 16973830; // 0x1030006
+    field public static final int Theme_NoTitleBar_Fullscreen = 16973831; // 0x1030007
+    field public static final int Theme_NoTitleBar_OverlayActionModes = 16973930; // 0x103006a
+    field public static final int Theme_Panel = 16973913; // 0x1030059
+    field public static final int Theme_Translucent = 16973839; // 0x103000f
+    field public static final int Theme_Translucent_NoTitleBar = 16973840; // 0x1030010
+    field public static final int Theme_Translucent_NoTitleBar_Fullscreen = 16973841; // 0x1030011
+    field public static final int Theme_Wallpaper = 16973918; // 0x103005e
+    field public static final int Theme_WallpaperSettings = 16973921; // 0x1030061
+    field public static final int Theme_Wallpaper_NoTitleBar = 16973919; // 0x103005f
+    field public static final int Theme_Wallpaper_NoTitleBar_Fullscreen = 16973920; // 0x1030060
+    field public static final int Theme_WithActionBar = 16973929; // 0x1030069
+    field public static final int Widget = 16973842; // 0x1030012
+    field public static final int Widget_AbsListView = 16973843; // 0x1030013
+    field public static final int Widget_ActionBar = 16973954; // 0x1030082
+    field public static final int Widget_ActionBar_TabBar = 16974068; // 0x10300f4
+    field public static final int Widget_ActionBar_TabText = 16974067; // 0x10300f3
+    field public static final int Widget_ActionBar_TabView = 16974066; // 0x10300f2
+    field public static final int Widget_ActionButton = 16973956; // 0x1030084
+    field public static final int Widget_ActionButton_CloseMode = 16973960; // 0x1030088
+    field public static final int Widget_ActionButton_Overflow = 16973959; // 0x1030087
+    field public static final int Widget_AutoCompleteTextView = 16973863; // 0x1030027
+    field public static final int Widget_Button = 16973844; // 0x1030014
+    field public static final int Widget_Button_Inset = 16973845; // 0x1030015
+    field public static final int Widget_Button_Small = 16973846; // 0x1030016
+    field public static final int Widget_Button_Toggle = 16973847; // 0x1030017
+    field public static final int Widget_CalendarView = 16974059; // 0x10300eb
+    field public static final int Widget_CompoundButton = 16973848; // 0x1030018
+    field public static final int Widget_CompoundButton_CheckBox = 16973849; // 0x1030019
+    field public static final int Widget_CompoundButton_RadioButton = 16973850; // 0x103001a
+    field public static final int Widget_CompoundButton_Star = 16973851; // 0x103001b
+    field public static final int Widget_DatePicker = 16974062; // 0x10300ee
+    field public static final int Widget_DeviceDefault = 16974144; // 0x1030140
+    field public static final int Widget_DeviceDefault_ActionBar = 16974187; // 0x103016b
+    field public static final int Widget_DeviceDefault_ActionBar_Solid = 16974195; // 0x1030173
+    field public static final int Widget_DeviceDefault_ActionBar_TabBar = 16974194; // 0x1030172
+    field public static final int Widget_DeviceDefault_ActionBar_TabText = 16974193; // 0x1030171
+    field public static final int Widget_DeviceDefault_ActionBar_TabView = 16974192; // 0x1030170
+    field public static final int Widget_DeviceDefault_ActionButton = 16974182; // 0x1030166
+    field public static final int Widget_DeviceDefault_ActionButton_CloseMode = 16974186; // 0x103016a
+    field public static final int Widget_DeviceDefault_ActionButton_Overflow = 16974183; // 0x1030167
+    field public static final int Widget_DeviceDefault_ActionButton_TextButton = 16974184; // 0x1030168
+    field public static final int Widget_DeviceDefault_ActionMode = 16974185; // 0x1030169
+    field public static final int Widget_DeviceDefault_AutoCompleteTextView = 16974151; // 0x1030147
+    field public static final int Widget_DeviceDefault_Button = 16974145; // 0x1030141
+    field public static final int Widget_DeviceDefault_Button_Borderless = 16974188; // 0x103016c
+    field public static final int Widget_DeviceDefault_Button_Borderless_Colored = 16974561; // 0x10302e1
+    field public static final int Widget_DeviceDefault_Button_Borderless_Small = 16974149; // 0x1030145
+    field public static final int Widget_DeviceDefault_Button_Colored = 16974560; // 0x10302e0
+    field public static final int Widget_DeviceDefault_Button_Inset = 16974147; // 0x1030143
+    field public static final int Widget_DeviceDefault_Button_Small = 16974146; // 0x1030142
+    field public static final int Widget_DeviceDefault_Button_Toggle = 16974148; // 0x1030144
+    field public static final int Widget_DeviceDefault_CalendarView = 16974190; // 0x103016e
+    field public static final int Widget_DeviceDefault_CheckedTextView = 16974299; // 0x10301db
+    field public static final int Widget_DeviceDefault_CompoundButton_CheckBox = 16974152; // 0x1030148
+    field public static final int Widget_DeviceDefault_CompoundButton_RadioButton = 16974169; // 0x1030159
+    field public static final int Widget_DeviceDefault_CompoundButton_Star = 16974173; // 0x103015d
+    field public static final int Widget_DeviceDefault_DatePicker = 16974191; // 0x103016f
+    field public static final int Widget_DeviceDefault_DropDownItem = 16974177; // 0x1030161
+    field public static final int Widget_DeviceDefault_DropDownItem_Spinner = 16974178; // 0x1030162
+    field public static final int Widget_DeviceDefault_EditText = 16974154; // 0x103014a
+    field public static final int Widget_DeviceDefault_ExpandableListView = 16974155; // 0x103014b
+    field public static final int Widget_DeviceDefault_FastScroll = 16974313; // 0x10301e9
+    field public static final int Widget_DeviceDefault_GridView = 16974156; // 0x103014c
+    field public static final int Widget_DeviceDefault_HorizontalScrollView = 16974171; // 0x103015b
+    field public static final int Widget_DeviceDefault_ImageButton = 16974157; // 0x103014d
+    field public static final int Widget_DeviceDefault_Light = 16974196; // 0x1030174
+    field public static final int Widget_DeviceDefault_Light_ActionBar = 16974243; // 0x10301a3
+    field public static final int Widget_DeviceDefault_Light_ActionBar_Solid = 16974247; // 0x10301a7
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_Solid_Inverse = 16974248; // 0x10301a8
+    field public static final int Widget_DeviceDefault_Light_ActionBar_TabBar = 16974246; // 0x10301a6
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse = 16974249; // 0x10301a9
+    field public static final int Widget_DeviceDefault_Light_ActionBar_TabText = 16974245; // 0x10301a5
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_TabText_Inverse = 16974251; // 0x10301ab
+    field public static final int Widget_DeviceDefault_Light_ActionBar_TabView = 16974244; // 0x10301a4
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionBar_TabView_Inverse = 16974250; // 0x10301aa
+    field public static final int Widget_DeviceDefault_Light_ActionButton = 16974239; // 0x103019f
+    field public static final int Widget_DeviceDefault_Light_ActionButton_CloseMode = 16974242; // 0x10301a2
+    field public static final int Widget_DeviceDefault_Light_ActionButton_Overflow = 16974240; // 0x10301a0
+    field public static final int Widget_DeviceDefault_Light_ActionMode = 16974241; // 0x10301a1
+    field @Deprecated public static final int Widget_DeviceDefault_Light_ActionMode_Inverse = 16974252; // 0x10301ac
+    field public static final int Widget_DeviceDefault_Light_AutoCompleteTextView = 16974203; // 0x103017b
+    field public static final int Widget_DeviceDefault_Light_Button = 16974197; // 0x1030175
+    field public static final int Widget_DeviceDefault_Light_Button_Borderless_Small = 16974201; // 0x1030179
+    field public static final int Widget_DeviceDefault_Light_Button_Inset = 16974199; // 0x1030177
+    field public static final int Widget_DeviceDefault_Light_Button_Small = 16974198; // 0x1030176
+    field public static final int Widget_DeviceDefault_Light_Button_Toggle = 16974200; // 0x1030178
+    field public static final int Widget_DeviceDefault_Light_CalendarView = 16974238; // 0x103019e
+    field public static final int Widget_DeviceDefault_Light_CheckedTextView = 16974300; // 0x10301dc
+    field public static final int Widget_DeviceDefault_Light_CompoundButton_CheckBox = 16974204; // 0x103017c
+    field public static final int Widget_DeviceDefault_Light_CompoundButton_RadioButton = 16974224; // 0x1030190
+    field public static final int Widget_DeviceDefault_Light_CompoundButton_Star = 16974228; // 0x1030194
+    field public static final int Widget_DeviceDefault_Light_DropDownItem = 16974232; // 0x1030198
+    field public static final int Widget_DeviceDefault_Light_DropDownItem_Spinner = 16974233; // 0x1030199
+    field public static final int Widget_DeviceDefault_Light_EditText = 16974206; // 0x103017e
+    field public static final int Widget_DeviceDefault_Light_ExpandableListView = 16974207; // 0x103017f
+    field public static final int Widget_DeviceDefault_Light_FastScroll = 16974315; // 0x10301eb
+    field public static final int Widget_DeviceDefault_Light_GridView = 16974208; // 0x1030180
+    field public static final int Widget_DeviceDefault_Light_HorizontalScrollView = 16974226; // 0x1030192
+    field public static final int Widget_DeviceDefault_Light_ImageButton = 16974209; // 0x1030181
+    field public static final int Widget_DeviceDefault_Light_ListPopupWindow = 16974235; // 0x103019b
+    field public static final int Widget_DeviceDefault_Light_ListView = 16974210; // 0x1030182
+    field public static final int Widget_DeviceDefault_Light_ListView_DropDown = 16974205; // 0x103017d
+    field public static final int Widget_DeviceDefault_Light_MediaRouteButton = 16974296; // 0x10301d8
+    field public static final int Widget_DeviceDefault_Light_PopupMenu = 16974236; // 0x103019c
+    field public static final int Widget_DeviceDefault_Light_PopupWindow = 16974211; // 0x1030183
+    field public static final int Widget_DeviceDefault_Light_ProgressBar = 16974212; // 0x1030184
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Horizontal = 16974213; // 0x1030185
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Inverse = 16974217; // 0x1030189
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Large = 16974216; // 0x1030188
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Large_Inverse = 16974219; // 0x103018b
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Small = 16974214; // 0x1030186
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Inverse = 16974218; // 0x103018a
+    field public static final int Widget_DeviceDefault_Light_ProgressBar_Small_Title = 16974215; // 0x1030187
+    field public static final int Widget_DeviceDefault_Light_RatingBar = 16974221; // 0x103018d
+    field public static final int Widget_DeviceDefault_Light_RatingBar_Indicator = 16974222; // 0x103018e
+    field public static final int Widget_DeviceDefault_Light_RatingBar_Small = 16974223; // 0x103018f
+    field public static final int Widget_DeviceDefault_Light_ScrollView = 16974225; // 0x1030191
+    field public static final int Widget_DeviceDefault_Light_SeekBar = 16974220; // 0x103018c
+    field public static final int Widget_DeviceDefault_Light_Spinner = 16974227; // 0x1030193
+    field public static final int Widget_DeviceDefault_Light_StackView = 16974316; // 0x10301ec
+    field public static final int Widget_DeviceDefault_Light_Tab = 16974237; // 0x103019d
+    field public static final int Widget_DeviceDefault_Light_TabWidget = 16974229; // 0x1030195
+    field public static final int Widget_DeviceDefault_Light_TextView = 16974202; // 0x103017a
+    field public static final int Widget_DeviceDefault_Light_TextView_SpinnerItem = 16974234; // 0x103019a
+    field public static final int Widget_DeviceDefault_Light_WebTextView = 16974230; // 0x1030196
+    field public static final int Widget_DeviceDefault_Light_WebView = 16974231; // 0x1030197
+    field public static final int Widget_DeviceDefault_ListPopupWindow = 16974180; // 0x1030164
+    field public static final int Widget_DeviceDefault_ListView = 16974158; // 0x103014e
+    field public static final int Widget_DeviceDefault_ListView_DropDown = 16974153; // 0x1030149
+    field public static final int Widget_DeviceDefault_MediaRouteButton = 16974295; // 0x10301d7
+    field public static final int Widget_DeviceDefault_PopupMenu = 16974181; // 0x1030165
+    field public static final int Widget_DeviceDefault_PopupWindow = 16974159; // 0x103014f
+    field public static final int Widget_DeviceDefault_ProgressBar = 16974160; // 0x1030150
+    field public static final int Widget_DeviceDefault_ProgressBar_Horizontal = 16974161; // 0x1030151
+    field public static final int Widget_DeviceDefault_ProgressBar_Large = 16974164; // 0x1030154
+    field public static final int Widget_DeviceDefault_ProgressBar_Small = 16974162; // 0x1030152
+    field public static final int Widget_DeviceDefault_ProgressBar_Small_Title = 16974163; // 0x1030153
+    field public static final int Widget_DeviceDefault_RatingBar = 16974166; // 0x1030156
+    field public static final int Widget_DeviceDefault_RatingBar_Indicator = 16974167; // 0x1030157
+    field public static final int Widget_DeviceDefault_RatingBar_Small = 16974168; // 0x1030158
+    field public static final int Widget_DeviceDefault_ScrollView = 16974170; // 0x103015a
+    field public static final int Widget_DeviceDefault_SeekBar = 16974165; // 0x1030155
+    field public static final int Widget_DeviceDefault_Spinner = 16974172; // 0x103015c
+    field public static final int Widget_DeviceDefault_StackView = 16974314; // 0x10301ea
+    field public static final int Widget_DeviceDefault_Tab = 16974189; // 0x103016d
+    field public static final int Widget_DeviceDefault_TabWidget = 16974174; // 0x103015e
+    field public static final int Widget_DeviceDefault_TextView = 16974150; // 0x1030146
+    field public static final int Widget_DeviceDefault_TextView_SpinnerItem = 16974179; // 0x1030163
+    field public static final int Widget_DeviceDefault_WebTextView = 16974175; // 0x103015f
+    field public static final int Widget_DeviceDefault_WebView = 16974176; // 0x1030160
+    field public static final int Widget_DropDownItem = 16973867; // 0x103002b
+    field public static final int Widget_DropDownItem_Spinner = 16973868; // 0x103002c
+    field public static final int Widget_EditText = 16973859; // 0x1030023
+    field public static final int Widget_ExpandableListView = 16973860; // 0x1030024
+    field public static final int Widget_FastScroll = 16974309; // 0x10301e5
+    field public static final int Widget_FragmentBreadCrumbs = 16973961; // 0x1030089
+    field public static final int Widget_Gallery = 16973877; // 0x1030035
+    field public static final int Widget_GridView = 16973874; // 0x1030032
+    field public static final int Widget_Holo = 16973962; // 0x103008a
+    field public static final int Widget_Holo_ActionBar = 16974004; // 0x10300b4
+    field public static final int Widget_Holo_ActionBar_Solid = 16974113; // 0x1030121
+    field public static final int Widget_Holo_ActionBar_TabBar = 16974071; // 0x10300f7
+    field public static final int Widget_Holo_ActionBar_TabText = 16974070; // 0x10300f6
+    field public static final int Widget_Holo_ActionBar_TabView = 16974069; // 0x10300f5
+    field public static final int Widget_Holo_ActionButton = 16973999; // 0x10300af
+    field public static final int Widget_Holo_ActionButton_CloseMode = 16974003; // 0x10300b3
+    field public static final int Widget_Holo_ActionButton_Overflow = 16974000; // 0x10300b0
+    field public static final int Widget_Holo_ActionButton_TextButton = 16974001; // 0x10300b1
+    field public static final int Widget_Holo_ActionMode = 16974002; // 0x10300b2
+    field public static final int Widget_Holo_AutoCompleteTextView = 16973968; // 0x1030090
+    field public static final int Widget_Holo_Button = 16973963; // 0x103008b
+    field public static final int Widget_Holo_Button_Borderless = 16974050; // 0x10300e2
+    field public static final int Widget_Holo_Button_Borderless_Small = 16974106; // 0x103011a
+    field public static final int Widget_Holo_Button_Inset = 16973965; // 0x103008d
+    field public static final int Widget_Holo_Button_Small = 16973964; // 0x103008c
+    field public static final int Widget_Holo_Button_Toggle = 16973966; // 0x103008e
+    field public static final int Widget_Holo_CalendarView = 16974060; // 0x10300ec
+    field public static final int Widget_Holo_CheckedTextView = 16974297; // 0x10301d9
+    field public static final int Widget_Holo_CompoundButton_CheckBox = 16973969; // 0x1030091
+    field public static final int Widget_Holo_CompoundButton_RadioButton = 16973986; // 0x10300a2
+    field public static final int Widget_Holo_CompoundButton_Star = 16973990; // 0x10300a6
+    field public static final int Widget_Holo_DatePicker = 16974063; // 0x10300ef
+    field public static final int Widget_Holo_DropDownItem = 16973994; // 0x10300aa
+    field public static final int Widget_Holo_DropDownItem_Spinner = 16973995; // 0x10300ab
+    field public static final int Widget_Holo_EditText = 16973971; // 0x1030093
+    field public static final int Widget_Holo_ExpandableListView = 16973972; // 0x1030094
+    field public static final int Widget_Holo_GridView = 16973973; // 0x1030095
+    field public static final int Widget_Holo_HorizontalScrollView = 16973988; // 0x10300a4
+    field public static final int Widget_Holo_ImageButton = 16973974; // 0x1030096
+    field public static final int Widget_Holo_Light = 16974005; // 0x10300b5
+    field public static final int Widget_Holo_Light_ActionBar = 16974049; // 0x10300e1
+    field public static final int Widget_Holo_Light_ActionBar_Solid = 16974114; // 0x1030122
+    field public static final int Widget_Holo_Light_ActionBar_Solid_Inverse = 16974115; // 0x1030123
+    field public static final int Widget_Holo_Light_ActionBar_TabBar = 16974074; // 0x10300fa
+    field public static final int Widget_Holo_Light_ActionBar_TabBar_Inverse = 16974116; // 0x1030124
+    field public static final int Widget_Holo_Light_ActionBar_TabText = 16974073; // 0x10300f9
+    field public static final int Widget_Holo_Light_ActionBar_TabText_Inverse = 16974118; // 0x1030126
+    field public static final int Widget_Holo_Light_ActionBar_TabView = 16974072; // 0x10300f8
+    field public static final int Widget_Holo_Light_ActionBar_TabView_Inverse = 16974117; // 0x1030125
+    field public static final int Widget_Holo_Light_ActionButton = 16974045; // 0x10300dd
+    field public static final int Widget_Holo_Light_ActionButton_CloseMode = 16974048; // 0x10300e0
+    field public static final int Widget_Holo_Light_ActionButton_Overflow = 16974046; // 0x10300de
+    field public static final int Widget_Holo_Light_ActionMode = 16974047; // 0x10300df
+    field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974119; // 0x1030127
+    field public static final int Widget_Holo_Light_AutoCompleteTextView = 16974011; // 0x10300bb
+    field public static final int Widget_Holo_Light_Button = 16974006; // 0x10300b6
+    field public static final int Widget_Holo_Light_Button_Borderless_Small = 16974107; // 0x103011b
+    field public static final int Widget_Holo_Light_Button_Inset = 16974008; // 0x10300b8
+    field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7
+    field public static final int Widget_Holo_Light_Button_Toggle = 16974009; // 0x10300b9
+    field public static final int Widget_Holo_Light_CalendarView = 16974061; // 0x10300ed
+    field public static final int Widget_Holo_Light_CheckedTextView = 16974298; // 0x10301da
+    field public static final int Widget_Holo_Light_CompoundButton_CheckBox = 16974012; // 0x10300bc
+    field public static final int Widget_Holo_Light_CompoundButton_RadioButton = 16974032; // 0x10300d0
+    field public static final int Widget_Holo_Light_CompoundButton_Star = 16974036; // 0x10300d4
+    field public static final int Widget_Holo_Light_DropDownItem = 16974040; // 0x10300d8
+    field public static final int Widget_Holo_Light_DropDownItem_Spinner = 16974041; // 0x10300d9
+    field public static final int Widget_Holo_Light_EditText = 16974014; // 0x10300be
+    field public static final int Widget_Holo_Light_ExpandableListView = 16974015; // 0x10300bf
+    field public static final int Widget_Holo_Light_GridView = 16974016; // 0x10300c0
+    field public static final int Widget_Holo_Light_HorizontalScrollView = 16974034; // 0x10300d2
+    field public static final int Widget_Holo_Light_ImageButton = 16974017; // 0x10300c1
+    field public static final int Widget_Holo_Light_ListPopupWindow = 16974043; // 0x10300db
+    field public static final int Widget_Holo_Light_ListView = 16974018; // 0x10300c2
+    field public static final int Widget_Holo_Light_ListView_DropDown = 16974013; // 0x10300bd
+    field public static final int Widget_Holo_Light_MediaRouteButton = 16974294; // 0x10301d6
+    field public static final int Widget_Holo_Light_PopupMenu = 16974044; // 0x10300dc
+    field public static final int Widget_Holo_Light_PopupWindow = 16974019; // 0x10300c3
+    field public static final int Widget_Holo_Light_ProgressBar = 16974020; // 0x10300c4
+    field public static final int Widget_Holo_Light_ProgressBar_Horizontal = 16974021; // 0x10300c5
+    field public static final int Widget_Holo_Light_ProgressBar_Inverse = 16974025; // 0x10300c9
+    field public static final int Widget_Holo_Light_ProgressBar_Large = 16974024; // 0x10300c8
+    field public static final int Widget_Holo_Light_ProgressBar_Large_Inverse = 16974027; // 0x10300cb
+    field public static final int Widget_Holo_Light_ProgressBar_Small = 16974022; // 0x10300c6
+    field public static final int Widget_Holo_Light_ProgressBar_Small_Inverse = 16974026; // 0x10300ca
+    field public static final int Widget_Holo_Light_ProgressBar_Small_Title = 16974023; // 0x10300c7
+    field public static final int Widget_Holo_Light_RatingBar = 16974029; // 0x10300cd
+    field public static final int Widget_Holo_Light_RatingBar_Indicator = 16974030; // 0x10300ce
+    field public static final int Widget_Holo_Light_RatingBar_Small = 16974031; // 0x10300cf
+    field public static final int Widget_Holo_Light_ScrollView = 16974033; // 0x10300d1
+    field public static final int Widget_Holo_Light_SeekBar = 16974028; // 0x10300cc
+    field public static final int Widget_Holo_Light_Spinner = 16974035; // 0x10300d3
+    field public static final int Widget_Holo_Light_Tab = 16974052; // 0x10300e4
+    field public static final int Widget_Holo_Light_TabWidget = 16974037; // 0x10300d5
+    field public static final int Widget_Holo_Light_TextView = 16974010; // 0x10300ba
+    field public static final int Widget_Holo_Light_TextView_SpinnerItem = 16974042; // 0x10300da
+    field public static final int Widget_Holo_Light_WebTextView = 16974038; // 0x10300d6
+    field public static final int Widget_Holo_Light_WebView = 16974039; // 0x10300d7
+    field public static final int Widget_Holo_ListPopupWindow = 16973997; // 0x10300ad
+    field public static final int Widget_Holo_ListView = 16973975; // 0x1030097
+    field public static final int Widget_Holo_ListView_DropDown = 16973970; // 0x1030092
+    field public static final int Widget_Holo_MediaRouteButton = 16974293; // 0x10301d5
+    field public static final int Widget_Holo_PopupMenu = 16973998; // 0x10300ae
+    field public static final int Widget_Holo_PopupWindow = 16973976; // 0x1030098
+    field public static final int Widget_Holo_ProgressBar = 16973977; // 0x1030099
+    field public static final int Widget_Holo_ProgressBar_Horizontal = 16973978; // 0x103009a
+    field public static final int Widget_Holo_ProgressBar_Large = 16973981; // 0x103009d
+    field public static final int Widget_Holo_ProgressBar_Small = 16973979; // 0x103009b
+    field public static final int Widget_Holo_ProgressBar_Small_Title = 16973980; // 0x103009c
+    field public static final int Widget_Holo_RatingBar = 16973983; // 0x103009f
+    field public static final int Widget_Holo_RatingBar_Indicator = 16973984; // 0x10300a0
+    field public static final int Widget_Holo_RatingBar_Small = 16973985; // 0x10300a1
+    field public static final int Widget_Holo_ScrollView = 16973987; // 0x10300a3
+    field public static final int Widget_Holo_SeekBar = 16973982; // 0x103009e
+    field public static final int Widget_Holo_Spinner = 16973989; // 0x10300a5
+    field public static final int Widget_Holo_Tab = 16974051; // 0x10300e3
+    field public static final int Widget_Holo_TabWidget = 16973991; // 0x10300a7
+    field public static final int Widget_Holo_TextView = 16973967; // 0x103008f
+    field public static final int Widget_Holo_TextView_SpinnerItem = 16973996; // 0x10300ac
+    field public static final int Widget_Holo_WebTextView = 16973992; // 0x10300a8
+    field public static final int Widget_Holo_WebView = 16973993; // 0x10300a9
+    field public static final int Widget_ImageButton = 16973862; // 0x1030026
+    field public static final int Widget_ImageWell = 16973861; // 0x1030025
+    field @Deprecated public static final int Widget_KeyboardView = 16973911; // 0x1030057
+    field public static final int Widget_ListPopupWindow = 16973957; // 0x1030085
+    field public static final int Widget_ListView = 16973870; // 0x103002e
+    field public static final int Widget_ListView_DropDown = 16973872; // 0x1030030
+    field public static final int Widget_ListView_Menu = 16973873; // 0x1030031
+    field public static final int Widget_ListView_White = 16973871; // 0x103002f
+    field public static final int Widget_Material = 16974413; // 0x103024d
+    field public static final int Widget_Material_ActionBar = 16974414; // 0x103024e
+    field public static final int Widget_Material_ActionBar_Solid = 16974415; // 0x103024f
+    field public static final int Widget_Material_ActionBar_TabBar = 16974416; // 0x1030250
+    field public static final int Widget_Material_ActionBar_TabText = 16974417; // 0x1030251
+    field public static final int Widget_Material_ActionBar_TabView = 16974418; // 0x1030252
+    field public static final int Widget_Material_ActionButton = 16974419; // 0x1030253
+    field public static final int Widget_Material_ActionButton_CloseMode = 16974420; // 0x1030254
+    field public static final int Widget_Material_ActionButton_Overflow = 16974421; // 0x1030255
+    field public static final int Widget_Material_ActionMode = 16974422; // 0x1030256
+    field public static final int Widget_Material_AutoCompleteTextView = 16974423; // 0x1030257
+    field public static final int Widget_Material_Button = 16974424; // 0x1030258
+    field public static final int Widget_Material_ButtonBar = 16974431; // 0x103025f
+    field public static final int Widget_Material_ButtonBar_AlertDialog = 16974432; // 0x1030260
+    field public static final int Widget_Material_Button_Borderless = 16974425; // 0x1030259
+    field public static final int Widget_Material_Button_Borderless_Colored = 16974426; // 0x103025a
+    field public static final int Widget_Material_Button_Borderless_Small = 16974427; // 0x103025b
+    field public static final int Widget_Material_Button_Colored = 16974547; // 0x10302d3
+    field public static final int Widget_Material_Button_Inset = 16974428; // 0x103025c
+    field public static final int Widget_Material_Button_Small = 16974429; // 0x103025d
+    field public static final int Widget_Material_Button_Toggle = 16974430; // 0x103025e
+    field public static final int Widget_Material_CalendarView = 16974433; // 0x1030261
+    field public static final int Widget_Material_CheckedTextView = 16974434; // 0x1030262
+    field public static final int Widget_Material_CompoundButton_CheckBox = 16974435; // 0x1030263
+    field public static final int Widget_Material_CompoundButton_RadioButton = 16974436; // 0x1030264
+    field public static final int Widget_Material_CompoundButton_Star = 16974437; // 0x1030265
+    field public static final int Widget_Material_CompoundButton_Switch = 16974554; // 0x10302da
+    field public static final int Widget_Material_DatePicker = 16974438; // 0x1030266
+    field public static final int Widget_Material_DropDownItem = 16974439; // 0x1030267
+    field public static final int Widget_Material_DropDownItem_Spinner = 16974440; // 0x1030268
+    field public static final int Widget_Material_EditText = 16974441; // 0x1030269
+    field public static final int Widget_Material_ExpandableListView = 16974442; // 0x103026a
+    field public static final int Widget_Material_FastScroll = 16974443; // 0x103026b
+    field public static final int Widget_Material_GridView = 16974444; // 0x103026c
+    field public static final int Widget_Material_HorizontalScrollView = 16974445; // 0x103026d
+    field public static final int Widget_Material_ImageButton = 16974446; // 0x103026e
+    field public static final int Widget_Material_Light = 16974478; // 0x103028e
+    field public static final int Widget_Material_Light_ActionBar = 16974479; // 0x103028f
+    field public static final int Widget_Material_Light_ActionBar_Solid = 16974480; // 0x1030290
+    field public static final int Widget_Material_Light_ActionBar_TabBar = 16974481; // 0x1030291
+    field public static final int Widget_Material_Light_ActionBar_TabText = 16974482; // 0x1030292
+    field public static final int Widget_Material_Light_ActionBar_TabView = 16974483; // 0x1030293
+    field public static final int Widget_Material_Light_ActionButton = 16974484; // 0x1030294
+    field public static final int Widget_Material_Light_ActionButton_CloseMode = 16974485; // 0x1030295
+    field public static final int Widget_Material_Light_ActionButton_Overflow = 16974486; // 0x1030296
+    field public static final int Widget_Material_Light_ActionMode = 16974487; // 0x1030297
+    field public static final int Widget_Material_Light_AutoCompleteTextView = 16974488; // 0x1030298
+    field public static final int Widget_Material_Light_Button = 16974489; // 0x1030299
+    field public static final int Widget_Material_Light_ButtonBar = 16974496; // 0x10302a0
+    field public static final int Widget_Material_Light_ButtonBar_AlertDialog = 16974497; // 0x10302a1
+    field public static final int Widget_Material_Light_Button_Borderless = 16974490; // 0x103029a
+    field public static final int Widget_Material_Light_Button_Borderless_Colored = 16974491; // 0x103029b
+    field public static final int Widget_Material_Light_Button_Borderless_Small = 16974492; // 0x103029c
+    field public static final int Widget_Material_Light_Button_Inset = 16974493; // 0x103029d
+    field public static final int Widget_Material_Light_Button_Small = 16974494; // 0x103029e
+    field public static final int Widget_Material_Light_Button_Toggle = 16974495; // 0x103029f
+    field public static final int Widget_Material_Light_CalendarView = 16974498; // 0x10302a2
+    field public static final int Widget_Material_Light_CheckedTextView = 16974499; // 0x10302a3
+    field public static final int Widget_Material_Light_CompoundButton_CheckBox = 16974500; // 0x10302a4
+    field public static final int Widget_Material_Light_CompoundButton_RadioButton = 16974501; // 0x10302a5
+    field public static final int Widget_Material_Light_CompoundButton_Star = 16974502; // 0x10302a6
+    field public static final int Widget_Material_Light_CompoundButton_Switch = 16974555; // 0x10302db
+    field public static final int Widget_Material_Light_DatePicker = 16974503; // 0x10302a7
+    field public static final int Widget_Material_Light_DropDownItem = 16974504; // 0x10302a8
+    field public static final int Widget_Material_Light_DropDownItem_Spinner = 16974505; // 0x10302a9
+    field public static final int Widget_Material_Light_EditText = 16974506; // 0x10302aa
+    field public static final int Widget_Material_Light_ExpandableListView = 16974507; // 0x10302ab
+    field public static final int Widget_Material_Light_FastScroll = 16974508; // 0x10302ac
+    field public static final int Widget_Material_Light_GridView = 16974509; // 0x10302ad
+    field public static final int Widget_Material_Light_HorizontalScrollView = 16974510; // 0x10302ae
+    field public static final int Widget_Material_Light_ImageButton = 16974511; // 0x10302af
+    field public static final int Widget_Material_Light_ListPopupWindow = 16974512; // 0x10302b0
+    field public static final int Widget_Material_Light_ListView = 16974513; // 0x10302b1
+    field public static final int Widget_Material_Light_ListView_DropDown = 16974514; // 0x10302b2
+    field public static final int Widget_Material_Light_MediaRouteButton = 16974515; // 0x10302b3
+    field public static final int Widget_Material_Light_NumberPicker = 16974557; // 0x10302dd
+    field public static final int Widget_Material_Light_PopupMenu = 16974516; // 0x10302b4
+    field public static final int Widget_Material_Light_PopupMenu_Overflow = 16974517; // 0x10302b5
+    field public static final int Widget_Material_Light_PopupWindow = 16974518; // 0x10302b6
+    field public static final int Widget_Material_Light_ProgressBar = 16974519; // 0x10302b7
+    field public static final int Widget_Material_Light_ProgressBar_Horizontal = 16974520; // 0x10302b8
+    field public static final int Widget_Material_Light_ProgressBar_Inverse = 16974521; // 0x10302b9
+    field public static final int Widget_Material_Light_ProgressBar_Large = 16974522; // 0x10302ba
+    field public static final int Widget_Material_Light_ProgressBar_Large_Inverse = 16974523; // 0x10302bb
+    field public static final int Widget_Material_Light_ProgressBar_Small = 16974524; // 0x10302bc
+    field public static final int Widget_Material_Light_ProgressBar_Small_Inverse = 16974525; // 0x10302bd
+    field public static final int Widget_Material_Light_ProgressBar_Small_Title = 16974526; // 0x10302be
+    field public static final int Widget_Material_Light_RatingBar = 16974527; // 0x10302bf
+    field public static final int Widget_Material_Light_RatingBar_Indicator = 16974528; // 0x10302c0
+    field public static final int Widget_Material_Light_RatingBar_Small = 16974529; // 0x10302c1
+    field public static final int Widget_Material_Light_ScrollView = 16974530; // 0x10302c2
+    field public static final int Widget_Material_Light_SearchView = 16974531; // 0x10302c3
+    field public static final int Widget_Material_Light_SeekBar = 16974532; // 0x10302c4
+    field public static final int Widget_Material_Light_SegmentedButton = 16974533; // 0x10302c5
+    field public static final int Widget_Material_Light_Spinner = 16974535; // 0x10302c7
+    field public static final int Widget_Material_Light_Spinner_Underlined = 16974536; // 0x10302c8
+    field public static final int Widget_Material_Light_StackView = 16974534; // 0x10302c6
+    field public static final int Widget_Material_Light_Tab = 16974537; // 0x10302c9
+    field public static final int Widget_Material_Light_TabWidget = 16974538; // 0x10302ca
+    field public static final int Widget_Material_Light_TextView = 16974539; // 0x10302cb
+    field public static final int Widget_Material_Light_TextView_SpinnerItem = 16974540; // 0x10302cc
+    field public static final int Widget_Material_Light_TimePicker = 16974541; // 0x10302cd
+    field public static final int Widget_Material_Light_WebTextView = 16974542; // 0x10302ce
+    field public static final int Widget_Material_Light_WebView = 16974543; // 0x10302cf
+    field public static final int Widget_Material_ListPopupWindow = 16974447; // 0x103026f
+    field public static final int Widget_Material_ListView = 16974448; // 0x1030270
+    field public static final int Widget_Material_ListView_DropDown = 16974449; // 0x1030271
+    field public static final int Widget_Material_MediaRouteButton = 16974450; // 0x1030272
+    field public static final int Widget_Material_NumberPicker = 16974556; // 0x10302dc
+    field public static final int Widget_Material_PopupMenu = 16974451; // 0x1030273
+    field public static final int Widget_Material_PopupMenu_Overflow = 16974452; // 0x1030274
+    field public static final int Widget_Material_PopupWindow = 16974453; // 0x1030275
+    field public static final int Widget_Material_ProgressBar = 16974454; // 0x1030276
+    field public static final int Widget_Material_ProgressBar_Horizontal = 16974455; // 0x1030277
+    field public static final int Widget_Material_ProgressBar_Large = 16974456; // 0x1030278
+    field public static final int Widget_Material_ProgressBar_Small = 16974457; // 0x1030279
+    field public static final int Widget_Material_ProgressBar_Small_Title = 16974458; // 0x103027a
+    field public static final int Widget_Material_RatingBar = 16974459; // 0x103027b
+    field public static final int Widget_Material_RatingBar_Indicator = 16974460; // 0x103027c
+    field public static final int Widget_Material_RatingBar_Small = 16974461; // 0x103027d
+    field public static final int Widget_Material_ScrollView = 16974462; // 0x103027e
+    field public static final int Widget_Material_SearchView = 16974463; // 0x103027f
+    field public static final int Widget_Material_SeekBar = 16974464; // 0x1030280
+    field public static final int Widget_Material_SeekBar_Discrete = 16974553; // 0x10302d9
+    field public static final int Widget_Material_SegmentedButton = 16974465; // 0x1030281
+    field public static final int Widget_Material_Spinner = 16974467; // 0x1030283
+    field public static final int Widget_Material_Spinner_Underlined = 16974468; // 0x1030284
+    field public static final int Widget_Material_StackView = 16974466; // 0x1030282
+    field public static final int Widget_Material_Tab = 16974469; // 0x1030285
+    field public static final int Widget_Material_TabWidget = 16974470; // 0x1030286
+    field public static final int Widget_Material_TextView = 16974471; // 0x1030287
+    field public static final int Widget_Material_TextView_SpinnerItem = 16974472; // 0x1030288
+    field public static final int Widget_Material_TimePicker = 16974473; // 0x1030289
+    field public static final int Widget_Material_Toolbar = 16974474; // 0x103028a
+    field public static final int Widget_Material_Toolbar_Button_Navigation = 16974475; // 0x103028b
+    field public static final int Widget_Material_WebTextView = 16974476; // 0x103028c
+    field public static final int Widget_Material_WebView = 16974477; // 0x103028d
+    field public static final int Widget_PopupMenu = 16973958; // 0x1030086
+    field public static final int Widget_PopupWindow = 16973878; // 0x1030036
+    field public static final int Widget_ProgressBar = 16973852; // 0x103001c
+    field public static final int Widget_ProgressBar_Horizontal = 16973855; // 0x103001f
+    field public static final int Widget_ProgressBar_Inverse = 16973915; // 0x103005b
+    field public static final int Widget_ProgressBar_Large = 16973853; // 0x103001d
+    field public static final int Widget_ProgressBar_Large_Inverse = 16973916; // 0x103005c
+    field public static final int Widget_ProgressBar_Small = 16973854; // 0x103001e
+    field public static final int Widget_ProgressBar_Small_Inverse = 16973917; // 0x103005d
+    field public static final int Widget_RatingBar = 16973857; // 0x1030021
+    field public static final int Widget_ScrollView = 16973869; // 0x103002d
+    field public static final int Widget_SeekBar = 16973856; // 0x1030020
+    field public static final int Widget_Spinner = 16973864; // 0x1030028
+    field public static final int Widget_Spinner_DropDown = 16973955; // 0x1030083
+    field public static final int Widget_StackView = 16974310; // 0x10301e6
+    field public static final int Widget_TabWidget = 16973876; // 0x1030034
+    field public static final int Widget_TextView = 16973858; // 0x1030022
+    field public static final int Widget_TextView_PopupMenu = 16973865; // 0x1030029
+    field public static final int Widget_TextView_SpinnerItem = 16973866; // 0x103002a
+    field public static final int Widget_Toolbar = 16974311; // 0x10301e7
+    field public static final int Widget_Toolbar_Button_Navigation = 16974312; // 0x10301e8
+    field public static final int Widget_WebView = 16973875; // 0x1030033
+  }
+
+  public static final class R.transition {
+    ctor public R.transition();
+    field public static final int explode = 17760259; // 0x10f0003
+    field public static final int fade = 17760258; // 0x10f0002
+    field public static final int move = 17760257; // 0x10f0001
+    field public static final int no_transition = 17760256; // 0x10f0000
+    field public static final int slide_bottom = 17760260; // 0x10f0004
+    field public static final int slide_left = 17760263; // 0x10f0007
+    field public static final int slide_right = 17760262; // 0x10f0006
+    field public static final int slide_top = 17760261; // 0x10f0005
+  }
+
+  public static final class R.xml {
+    ctor public R.xml();
+  }
+
+}
+
+package android.accessibilityservice {
+
+  public final class AccessibilityButtonController {
+    method public boolean isAccessibilityButtonAvailable();
+    method public void registerAccessibilityButtonCallback(@NonNull android.accessibilityservice.AccessibilityButtonController.AccessibilityButtonCallback);
+    method public void registerAccessibilityButtonCallback(@NonNull android.accessibilityservice.AccessibilityButtonController.AccessibilityButtonCallback, @NonNull android.os.Handler);
+    method public void unregisterAccessibilityButtonCallback(@NonNull android.accessibilityservice.AccessibilityButtonController.AccessibilityButtonCallback);
+  }
+
+  public abstract static class AccessibilityButtonController.AccessibilityButtonCallback {
+    ctor public AccessibilityButtonController.AccessibilityButtonCallback();
+    method public void onAvailabilityChanged(android.accessibilityservice.AccessibilityButtonController, boolean);
+    method public void onClicked(android.accessibilityservice.AccessibilityButtonController);
+  }
+
+  public final class AccessibilityGestureEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static String gestureIdToString(int);
+    method public int getDisplayId();
+    method public int getGestureId();
+    method @NonNull public java.util.List<android.view.MotionEvent> getMotionEvents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.AccessibilityGestureEvent> CREATOR;
+  }
+
+  public abstract class AccessibilityService extends android.app.Service {
+    ctor public AccessibilityService();
+    method public final void disableSelf();
+    method public final boolean dispatchGesture(@NonNull android.accessibilityservice.GestureDescription, @Nullable android.accessibilityservice.AccessibilityService.GestureResultCallback, @Nullable android.os.Handler);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method @NonNull public final android.accessibilityservice.AccessibilityButtonController getAccessibilityButtonController();
+    method @NonNull public final android.accessibilityservice.AccessibilityButtonController getAccessibilityButtonController(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public final android.accessibilityservice.FingerprintGestureController getFingerprintGestureController();
+    method @NonNull public final android.accessibilityservice.AccessibilityService.MagnificationController getMagnificationController();
+    method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
+    method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
+    method @NonNull public final android.accessibilityservice.AccessibilityService.SoftKeyboardController getSoftKeyboardController();
+    method @NonNull public final java.util.List<android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction> getSystemActions();
+    method public java.util.List<android.view.accessibility.AccessibilityWindowInfo> getWindows();
+    method @NonNull public final android.util.SparseArray<java.util.List<android.view.accessibility.AccessibilityWindowInfo>> getWindowsOnAllDisplays();
+    method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated protected boolean onGesture(int);
+    method public boolean onGesture(@NonNull android.accessibilityservice.AccessibilityGestureEvent);
+    method public abstract void onInterrupt();
+    method protected boolean onKeyEvent(android.view.KeyEvent);
+    method protected void onServiceConnected();
+    method public void onSystemActionsChanged();
+    method public final boolean performGlobalAction(int);
+    method public void setAccessibilityFocusAppearance(int, @ColorInt int);
+    method public void setGestureDetectionPassthroughRegion(int, @NonNull android.graphics.Region);
+    method public final void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo);
+    method public void setTouchExplorationPassthroughRegion(int, @NonNull android.graphics.Region);
+    method public void takeScreenshot(int, @NonNull java.util.concurrent.Executor, @NonNull android.accessibilityservice.AccessibilityService.TakeScreenshotCallback);
+    field public static final int ERROR_TAKE_SCREENSHOT_INTERNAL_ERROR = 1; // 0x1
+    field public static final int ERROR_TAKE_SCREENSHOT_INTERVAL_TIME_SHORT = 3; // 0x3
+    field public static final int ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY = 4; // 0x4
+    field public static final int ERROR_TAKE_SCREENSHOT_NO_ACCESSIBILITY_ACCESS = 2; // 0x2
+    field public static final int GESTURE_2_FINGER_DOUBLE_TAP = 20; // 0x14
+    field public static final int GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD = 40; // 0x28
+    field public static final int GESTURE_2_FINGER_SINGLE_TAP = 19; // 0x13
+    field public static final int GESTURE_2_FINGER_SWIPE_DOWN = 26; // 0x1a
+    field public static final int GESTURE_2_FINGER_SWIPE_LEFT = 27; // 0x1b
+    field public static final int GESTURE_2_FINGER_SWIPE_RIGHT = 28; // 0x1c
+    field public static final int GESTURE_2_FINGER_SWIPE_UP = 25; // 0x19
+    field public static final int GESTURE_2_FINGER_TRIPLE_TAP = 21; // 0x15
+    field public static final int GESTURE_2_FINGER_TRIPLE_TAP_AND_HOLD = 43; // 0x2b
+    field public static final int GESTURE_3_FINGER_DOUBLE_TAP = 23; // 0x17
+    field public static final int GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD = 41; // 0x29
+    field public static final int GESTURE_3_FINGER_SINGLE_TAP = 22; // 0x16
+    field public static final int GESTURE_3_FINGER_SINGLE_TAP_AND_HOLD = 44; // 0x2c
+    field public static final int GESTURE_3_FINGER_SWIPE_DOWN = 30; // 0x1e
+    field public static final int GESTURE_3_FINGER_SWIPE_LEFT = 31; // 0x1f
+    field public static final int GESTURE_3_FINGER_SWIPE_RIGHT = 32; // 0x20
+    field public static final int GESTURE_3_FINGER_SWIPE_UP = 29; // 0x1d
+    field public static final int GESTURE_3_FINGER_TRIPLE_TAP = 24; // 0x18
+    field public static final int GESTURE_3_FINGER_TRIPLE_TAP_AND_HOLD = 45; // 0x2d
+    field public static final int GESTURE_4_FINGER_DOUBLE_TAP = 38; // 0x26
+    field public static final int GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD = 42; // 0x2a
+    field public static final int GESTURE_4_FINGER_SINGLE_TAP = 37; // 0x25
+    field public static final int GESTURE_4_FINGER_SWIPE_DOWN = 34; // 0x22
+    field public static final int GESTURE_4_FINGER_SWIPE_LEFT = 35; // 0x23
+    field public static final int GESTURE_4_FINGER_SWIPE_RIGHT = 36; // 0x24
+    field public static final int GESTURE_4_FINGER_SWIPE_UP = 33; // 0x21
+    field public static final int GESTURE_4_FINGER_TRIPLE_TAP = 39; // 0x27
+    field public static final int GESTURE_DOUBLE_TAP = 17; // 0x11
+    field public static final int GESTURE_DOUBLE_TAP_AND_HOLD = 18; // 0x12
+    field public static final int GESTURE_SWIPE_DOWN = 2; // 0x2
+    field public static final int GESTURE_SWIPE_DOWN_AND_LEFT = 15; // 0xf
+    field public static final int GESTURE_SWIPE_DOWN_AND_RIGHT = 16; // 0x10
+    field public static final int GESTURE_SWIPE_DOWN_AND_UP = 8; // 0x8
+    field public static final int GESTURE_SWIPE_LEFT = 3; // 0x3
+    field public static final int GESTURE_SWIPE_LEFT_AND_DOWN = 10; // 0xa
+    field public static final int GESTURE_SWIPE_LEFT_AND_RIGHT = 5; // 0x5
+    field public static final int GESTURE_SWIPE_LEFT_AND_UP = 9; // 0x9
+    field public static final int GESTURE_SWIPE_RIGHT = 4; // 0x4
+    field public static final int GESTURE_SWIPE_RIGHT_AND_DOWN = 12; // 0xc
+    field public static final int GESTURE_SWIPE_RIGHT_AND_LEFT = 6; // 0x6
+    field public static final int GESTURE_SWIPE_RIGHT_AND_UP = 11; // 0xb
+    field public static final int GESTURE_SWIPE_UP = 1; // 0x1
+    field public static final int GESTURE_SWIPE_UP_AND_DOWN = 7; // 0x7
+    field public static final int GESTURE_SWIPE_UP_AND_LEFT = 13; // 0xd
+    field public static final int GESTURE_SWIPE_UP_AND_RIGHT = 14; // 0xe
+    field public static final int GESTURE_UNKNOWN = 0; // 0x0
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_ALL_APPS = 14; // 0xe
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON = 11; // 0xb
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_BUTTON_CHOOSER = 12; // 0xc
+    field public static final int GLOBAL_ACTION_ACCESSIBILITY_SHORTCUT = 13; // 0xd
+    field public static final int GLOBAL_ACTION_BACK = 1; // 0x1
+    field public static final int GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE = 15; // 0xf
+    field public static final int GLOBAL_ACTION_HOME = 2; // 0x2
+    field public static final int GLOBAL_ACTION_KEYCODE_HEADSETHOOK = 10; // 0xa
+    field public static final int GLOBAL_ACTION_LOCK_SCREEN = 8; // 0x8
+    field public static final int GLOBAL_ACTION_NOTIFICATIONS = 4; // 0x4
+    field public static final int GLOBAL_ACTION_POWER_DIALOG = 6; // 0x6
+    field public static final int GLOBAL_ACTION_QUICK_SETTINGS = 5; // 0x5
+    field public static final int GLOBAL_ACTION_RECENTS = 3; // 0x3
+    field public static final int GLOBAL_ACTION_TAKE_SCREENSHOT = 9; // 0x9
+    field public static final int GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN = 7; // 0x7
+    field public static final String SERVICE_INTERFACE = "android.accessibilityservice.AccessibilityService";
+    field public static final String SERVICE_META_DATA = "android.accessibilityservice";
+    field public static final int SHOW_MODE_AUTO = 0; // 0x0
+    field public static final int SHOW_MODE_HIDDEN = 1; // 0x1
+    field public static final int SHOW_MODE_IGNORE_HARD_KEYBOARD = 2; // 0x2
+  }
+
+  public abstract static class AccessibilityService.GestureResultCallback {
+    ctor public AccessibilityService.GestureResultCallback();
+    method public void onCancelled(android.accessibilityservice.GestureDescription);
+    method public void onCompleted(android.accessibilityservice.GestureDescription);
+  }
+
+  public static final class AccessibilityService.MagnificationController {
+    method public void addListener(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener);
+    method public void addListener(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener, @Nullable android.os.Handler);
+    method public float getCenterX();
+    method public float getCenterY();
+    method @NonNull public android.graphics.Region getMagnificationRegion();
+    method public float getScale();
+    method public boolean removeListener(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController.OnMagnificationChangedListener);
+    method public boolean reset(boolean);
+    method public boolean setCenter(float, float, boolean);
+    method public boolean setScale(float, boolean);
+  }
+
+  public static interface AccessibilityService.MagnificationController.OnMagnificationChangedListener {
+    method public void onMagnificationChanged(@NonNull android.accessibilityservice.AccessibilityService.MagnificationController, @NonNull android.graphics.Region, float, float, float);
+  }
+
+  public static final class AccessibilityService.ScreenshotResult {
+    method @NonNull public android.graphics.ColorSpace getColorSpace();
+    method @NonNull public android.hardware.HardwareBuffer getHardwareBuffer();
+    method public long getTimestamp();
+  }
+
+  public static final class AccessibilityService.SoftKeyboardController {
+    method public void addOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener);
+    method public void addOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener, @Nullable android.os.Handler);
+    method public int getShowMode();
+    method public boolean removeOnShowModeChangedListener(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController.OnShowModeChangedListener);
+    method public boolean setShowMode(int);
+    method public boolean switchToInputMethod(@NonNull String);
+  }
+
+  public static interface AccessibilityService.SoftKeyboardController.OnShowModeChangedListener {
+    method public void onShowModeChanged(@NonNull android.accessibilityservice.AccessibilityService.SoftKeyboardController, int);
+  }
+
+  public static interface AccessibilityService.TakeScreenshotCallback {
+    method public void onFailure(int);
+    method public void onSuccess(@NonNull android.accessibilityservice.AccessibilityService.ScreenshotResult);
+  }
+
+  public class AccessibilityServiceInfo implements android.os.Parcelable {
+    ctor public AccessibilityServiceInfo();
+    method public static String capabilityToString(int);
+    method public int describeContents();
+    method public static String feedbackTypeToString(int);
+    method public static String flagToString(int);
+    method @Deprecated public boolean getCanRetrieveWindowContent();
+    method public int getCapabilities();
+    method @Deprecated public String getDescription();
+    method public String getId();
+    method public int getInteractiveUiTimeoutMillis();
+    method public int getNonInteractiveUiTimeoutMillis();
+    method public android.content.pm.ResolveInfo getResolveInfo();
+    method public String getSettingsActivityName();
+    method public boolean isAccessibilityTool();
+    method public String loadDescription(android.content.pm.PackageManager);
+    method public CharSequence loadSummary(android.content.pm.PackageManager);
+    method public void setInteractiveUiTimeoutMillis(@IntRange(from=0) int);
+    method public void setNonInteractiveUiTimeoutMillis(@IntRange(from=0) int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CAPABILITY_CAN_CONTROL_MAGNIFICATION = 16; // 0x10
+    field public static final int CAPABILITY_CAN_PERFORM_GESTURES = 32; // 0x20
+    field @Deprecated public static final int CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 4; // 0x4
+    field public static final int CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS = 8; // 0x8
+    field public static final int CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES = 64; // 0x40
+    field public static final int CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION = 2; // 0x2
+    field public static final int CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT = 1; // 0x1
+    field public static final int CAPABILITY_CAN_TAKE_SCREENSHOT = 128; // 0x80
+    field @NonNull public static final android.os.Parcelable.Creator<android.accessibilityservice.AccessibilityServiceInfo> CREATOR;
+    field public static final int DEFAULT = 1; // 0x1
+    field public static final int FEEDBACK_ALL_MASK = -1; // 0xffffffff
+    field public static final int FEEDBACK_AUDIBLE = 4; // 0x4
+    field public static final int FEEDBACK_BRAILLE = 32; // 0x20
+    field public static final int FEEDBACK_GENERIC = 16; // 0x10
+    field public static final int FEEDBACK_HAPTIC = 2; // 0x2
+    field public static final int FEEDBACK_SPOKEN = 1; // 0x1
+    field public static final int FEEDBACK_VISUAL = 8; // 0x8
+    field public static final int FLAG_ENABLE_ACCESSIBILITY_VOLUME = 128; // 0x80
+    field public static final int FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 2; // 0x2
+    field public static final int FLAG_REPORT_VIEW_IDS = 16; // 0x10
+    field public static final int FLAG_REQUEST_2_FINGER_PASSTHROUGH = 8192; // 0x2000
+    field public static final int FLAG_REQUEST_ACCESSIBILITY_BUTTON = 256; // 0x100
+    field @Deprecated public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
+    field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
+    field public static final int FLAG_REQUEST_FINGERPRINT_GESTURES = 512; // 0x200
+    field public static final int FLAG_REQUEST_MULTI_FINGER_GESTURES = 4096; // 0x1000
+    field public static final int FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK = 1024; // 0x400
+    field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+    field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
+    field public static final int FLAG_SEND_MOTION_EVENTS = 16384; // 0x4000
+    field public static final int FLAG_SERVICE_HANDLES_DOUBLE_TAP = 2048; // 0x800
+    field public int eventTypes;
+    field public int feedbackType;
+    field public int flags;
+    field public long notificationTimeout;
+    field public String[] packageNames;
+  }
+
+  public final class FingerprintGestureController {
+    method public boolean isGestureDetectionAvailable();
+    method public void registerFingerprintGestureCallback(@NonNull android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback, @Nullable android.os.Handler);
+    method public void unregisterFingerprintGestureCallback(android.accessibilityservice.FingerprintGestureController.FingerprintGestureCallback);
+    field public static final int FINGERPRINT_GESTURE_SWIPE_DOWN = 8; // 0x8
+    field public static final int FINGERPRINT_GESTURE_SWIPE_LEFT = 2; // 0x2
+    field public static final int FINGERPRINT_GESTURE_SWIPE_RIGHT = 1; // 0x1
+    field public static final int FINGERPRINT_GESTURE_SWIPE_UP = 4; // 0x4
+  }
+
+  public abstract static class FingerprintGestureController.FingerprintGestureCallback {
+    ctor public FingerprintGestureController.FingerprintGestureCallback();
+    method public void onGestureDetected(int);
+    method public void onGestureDetectionAvailabilityChanged(boolean);
+  }
+
+  public final class GestureDescription {
+    method public int getDisplayId();
+    method public static long getMaxGestureDuration();
+    method public static int getMaxStrokeCount();
+    method public android.accessibilityservice.GestureDescription.StrokeDescription getStroke(@IntRange(from=0) int);
+    method public int getStrokeCount();
+  }
+
+  public static class GestureDescription.Builder {
+    ctor public GestureDescription.Builder();
+    method public android.accessibilityservice.GestureDescription.Builder addStroke(@NonNull android.accessibilityservice.GestureDescription.StrokeDescription);
+    method public android.accessibilityservice.GestureDescription build();
+    method @NonNull public android.accessibilityservice.GestureDescription.Builder setDisplayId(int);
+  }
+
+  public static class GestureDescription.StrokeDescription {
+    ctor public GestureDescription.StrokeDescription(@NonNull android.graphics.Path, @IntRange(from=0) long, @IntRange(from=0) long);
+    ctor public GestureDescription.StrokeDescription(@NonNull android.graphics.Path, @IntRange(from=0) long, @IntRange(from=0) long, boolean);
+    method public android.accessibilityservice.GestureDescription.StrokeDescription continueStroke(android.graphics.Path, long, long, boolean);
+    method public long getDuration();
+    method public android.graphics.Path getPath();
+    method public long getStartTime();
+    method public boolean willContinue();
+  }
+
+}
+
+package android.accounts {
+
+  public abstract class AbstractAccountAuthenticator {
+    ctor public AbstractAccountAuthenticator(android.content.Context);
+    method public abstract android.os.Bundle addAccount(android.accounts.AccountAuthenticatorResponse, String, String, String[], android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle addAccountFromCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle confirmCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle editProperties(android.accounts.AccountAuthenticatorResponse, String);
+    method public android.os.Bundle finishSession(android.accounts.AccountAuthenticatorResponse, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle getAccountCredentialsForCloning(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle getAccountRemovalAllowed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle getAuthToken(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract String getAuthTokenLabel(String);
+    method public final android.os.IBinder getIBinder();
+    method public abstract android.os.Bundle hasFeatures(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String[]) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle isCredentialsUpdateSuggested(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle startAddAccountSession(android.accounts.AccountAuthenticatorResponse, String, String, String[], android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public android.os.Bundle startUpdateCredentialsSession(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    method public abstract android.os.Bundle updateCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, String, android.os.Bundle) throws android.accounts.NetworkErrorException;
+    field public static final String KEY_CUSTOM_TOKEN_EXPIRY = "android.accounts.expiry";
+  }
+
+  public class Account implements android.os.Parcelable {
+    ctor public Account(String, String);
+    ctor public Account(android.os.Parcel);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accounts.Account> CREATOR;
+    field public final String name;
+    field public final String type;
+  }
+
+  @Deprecated public class AccountAuthenticatorActivity extends android.app.Activity {
+    ctor @Deprecated public AccountAuthenticatorActivity();
+    method @Deprecated public final void setAccountAuthenticatorResult(android.os.Bundle);
+  }
+
+  public class AccountAuthenticatorResponse implements android.os.Parcelable {
+    ctor public AccountAuthenticatorResponse(android.os.Parcel);
+    method public int describeContents();
+    method public void onError(int, String);
+    method public void onRequestContinued();
+    method public void onResult(android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accounts.AccountAuthenticatorResponse> CREATOR;
+  }
+
+  public class AccountManager {
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> addAccount(String, String, String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public boolean addAccountExplicitly(android.accounts.Account, String, android.os.Bundle);
+    method public boolean addAccountExplicitly(android.accounts.Account, String, android.os.Bundle, java.util.Map<java.lang.String,java.lang.Integer>);
+    method @RequiresPermission(value="android.permission.GET_ACCOUNTS", apis="..22") public void addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean);
+    method public void addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, String[]);
+    method @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public String blockingGetAuthToken(android.accounts.Account, String, boolean) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public void clearPassword(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> confirmCredentials(android.accounts.Account, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> editProperties(String, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> finishSession(android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public static android.accounts.AccountManager get(android.content.Context);
+    method public int getAccountVisibility(android.accounts.Account, String);
+    method @NonNull @RequiresPermission(value="android.permission.GET_ACCOUNTS", apis="..22") public android.accounts.Account[] getAccounts();
+    method public java.util.Map<android.accounts.Account,java.lang.Integer> getAccountsAndVisibilityForPackage(String, String);
+    method @NonNull @RequiresPermission(value="android.permission.GET_ACCOUNTS", apis="..22") public android.accounts.Account[] getAccountsByType(String);
+    method public android.accounts.AccountManagerFuture<android.accounts.Account[]> getAccountsByTypeAndFeatures(String, String[], android.accounts.AccountManagerCallback<android.accounts.Account[]>, android.os.Handler);
+    method @NonNull public android.accounts.Account[] getAccountsByTypeForPackage(String, String);
+    method @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @Deprecated @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, String, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.USE_CREDENTIALS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthToken(android.accounts.Account, String, android.os.Bundle, boolean, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> getAuthTokenByFeatures(String, String, String[], android.app.Activity, android.os.Bundle, android.os.Bundle, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AuthenticatorDescription[] getAuthenticatorTypes();
+    method public java.util.Map<java.lang.String,java.lang.Integer> getPackagesAndVisibilityForAccount(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public String getPassword(android.accounts.Account);
+    method public String getPreviousName(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public String getUserData(android.accounts.Account, String);
+    method public android.accounts.AccountManagerFuture<java.lang.Boolean> hasFeatures(android.accounts.Account, String[], android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_ACCOUNTS", "android.permission.USE_CREDENTIALS"}, apis="..22") public void invalidateAuthToken(String, String);
+    method public android.accounts.AccountManagerFuture<java.lang.Boolean> isCredentialsUpdateSuggested(android.accounts.Account, String, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
+    method @Deprecated public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.ArrayList<android.accounts.Account>, String[], boolean, String, String, String[], android.os.Bundle);
+    method public static android.content.Intent newChooseAccountIntent(android.accounts.Account, java.util.List<android.accounts.Account>, String[], String, String, String[], android.os.Bundle);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public boolean notifyAccountAuthenticated(android.accounts.Account);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public String peekAuthToken(android.accounts.Account, String);
+    method @Deprecated @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<java.lang.Boolean> removeAccount(android.accounts.Account, android.accounts.AccountManagerCallback<java.lang.Boolean>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> removeAccount(android.accounts.Account, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public boolean removeAccountExplicitly(android.accounts.Account);
+    method public void removeOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.accounts.Account> renameAccount(android.accounts.Account, @Size(min=1) String, android.accounts.AccountManagerCallback<android.accounts.Account>, android.os.Handler);
+    method public boolean setAccountVisibility(android.accounts.Account, String, int);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public void setAuthToken(android.accounts.Account, String, String);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public void setPassword(android.accounts.Account, String);
+    method @RequiresPermission(value="android.permission.AUTHENTICATE_ACCOUNTS", apis="..22") public void setUserData(android.accounts.Account, String, String);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(String, String, String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    method @RequiresPermission(value="android.permission.MANAGE_ACCOUNTS", apis="..22") public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+    field public static final String ACTION_ACCOUNT_REMOVED = "android.accounts.action.ACCOUNT_REMOVED";
+    field public static final String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator";
+    field public static final String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
+    field public static final String AUTHENTICATOR_META_DATA_NAME = "android.accounts.AccountAuthenticator";
+    field public static final int ERROR_CODE_BAD_ARGUMENTS = 7; // 0x7
+    field public static final int ERROR_CODE_BAD_AUTHENTICATION = 9; // 0x9
+    field public static final int ERROR_CODE_BAD_REQUEST = 8; // 0x8
+    field public static final int ERROR_CODE_CANCELED = 4; // 0x4
+    field public static final int ERROR_CODE_INVALID_RESPONSE = 5; // 0x5
+    field public static final int ERROR_CODE_NETWORK_ERROR = 3; // 0x3
+    field public static final int ERROR_CODE_REMOTE_EXCEPTION = 1; // 0x1
+    field public static final int ERROR_CODE_UNSUPPORTED_OPERATION = 6; // 0x6
+    field public static final String KEY_ACCOUNTS = "accounts";
+    field public static final String KEY_ACCOUNT_AUTHENTICATOR_RESPONSE = "accountAuthenticatorResponse";
+    field public static final String KEY_ACCOUNT_MANAGER_RESPONSE = "accountManagerResponse";
+    field public static final String KEY_ACCOUNT_NAME = "authAccount";
+    field public static final String KEY_ACCOUNT_SESSION_BUNDLE = "accountSessionBundle";
+    field public static final String KEY_ACCOUNT_STATUS_TOKEN = "accountStatusToken";
+    field public static final String KEY_ACCOUNT_TYPE = "accountType";
+    field public static final String KEY_ANDROID_PACKAGE_NAME = "androidPackageName";
+    field public static final String KEY_AUTHENTICATOR_TYPES = "authenticator_types";
+    field public static final String KEY_AUTHTOKEN = "authtoken";
+    field public static final String KEY_AUTH_FAILED_MESSAGE = "authFailedMessage";
+    field public static final String KEY_AUTH_TOKEN_LABEL = "authTokenLabelKey";
+    field public static final String KEY_BOOLEAN_RESULT = "booleanResult";
+    field public static final String KEY_CALLER_PID = "callerPid";
+    field public static final String KEY_CALLER_UID = "callerUid";
+    field public static final String KEY_ERROR_CODE = "errorCode";
+    field public static final String KEY_ERROR_MESSAGE = "errorMessage";
+    field public static final String KEY_INTENT = "intent";
+    field public static final String KEY_LAST_AUTHENTICATED_TIME = "lastAuthenticatedTime";
+    field public static final String KEY_PASSWORD = "password";
+    field public static final String KEY_USERDATA = "userdata";
+    field @Deprecated public static final String LOGIN_ACCOUNTS_CHANGED_ACTION = "android.accounts.LOGIN_ACCOUNTS_CHANGED";
+    field public static final String PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE = "android:accounts:key_legacy_not_visible";
+    field public static final String PACKAGE_NAME_KEY_LEGACY_VISIBLE = "android:accounts:key_legacy_visible";
+    field public static final int VISIBILITY_NOT_VISIBLE = 3; // 0x3
+    field public static final int VISIBILITY_UNDEFINED = 0; // 0x0
+    field public static final int VISIBILITY_USER_MANAGED_NOT_VISIBLE = 4; // 0x4
+    field public static final int VISIBILITY_USER_MANAGED_VISIBLE = 2; // 0x2
+    field public static final int VISIBILITY_VISIBLE = 1; // 0x1
+  }
+
+  public interface AccountManagerCallback<V> {
+    method public void run(android.accounts.AccountManagerFuture<V>);
+  }
+
+  public interface AccountManagerFuture<V> {
+    method public boolean cancel(boolean);
+    method public V getResult() throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
+    method public V getResult(long, java.util.concurrent.TimeUnit) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+  }
+
+  public class AccountsException extends java.lang.Exception {
+    ctor public AccountsException();
+    ctor public AccountsException(String);
+    ctor public AccountsException(String, Throwable);
+    ctor public AccountsException(Throwable);
+  }
+
+  public class AuthenticatorDescription implements android.os.Parcelable {
+    ctor public AuthenticatorDescription(String, String, int, int, int, int, boolean);
+    ctor public AuthenticatorDescription(String, String, int, int, int, int);
+    method public int describeContents();
+    method public static android.accounts.AuthenticatorDescription newKey(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.accounts.AuthenticatorDescription> CREATOR;
+    field public final int accountPreferencesId;
+    field public final boolean customTokens;
+    field public final int iconId;
+    field public final int labelId;
+    field public final String packageName;
+    field public final int smallIconId;
+    field public final String type;
+  }
+
+  public class AuthenticatorException extends android.accounts.AccountsException {
+    ctor public AuthenticatorException();
+    ctor public AuthenticatorException(String);
+    ctor public AuthenticatorException(String, Throwable);
+    ctor public AuthenticatorException(Throwable);
+  }
+
+  public class NetworkErrorException extends android.accounts.AccountsException {
+    ctor public NetworkErrorException();
+    ctor public NetworkErrorException(String);
+    ctor public NetworkErrorException(String, Throwable);
+    ctor public NetworkErrorException(Throwable);
+  }
+
+  public interface OnAccountsUpdateListener {
+    method public void onAccountsUpdated(android.accounts.Account[]);
+  }
+
+  public class OperationCanceledException extends android.accounts.AccountsException {
+    ctor public OperationCanceledException();
+    ctor public OperationCanceledException(String);
+    ctor public OperationCanceledException(String, Throwable);
+    ctor public OperationCanceledException(Throwable);
+  }
+
+}
+
+package android.animation {
+
+  public abstract class Animator implements java.lang.Cloneable {
+    ctor public Animator();
+    method public void addListener(android.animation.Animator.AnimatorListener);
+    method public void addPauseListener(android.animation.Animator.AnimatorPauseListener);
+    method public void cancel();
+    method public android.animation.Animator clone();
+    method public void end();
+    method public abstract long getDuration();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public java.util.ArrayList<android.animation.Animator.AnimatorListener> getListeners();
+    method public abstract long getStartDelay();
+    method public long getTotalDuration();
+    method public boolean isPaused();
+    method public abstract boolean isRunning();
+    method public boolean isStarted();
+    method public void pause();
+    method public void removeAllListeners();
+    method public void removeListener(android.animation.Animator.AnimatorListener);
+    method public void removePauseListener(android.animation.Animator.AnimatorPauseListener);
+    method public void resume();
+    method public abstract android.animation.Animator setDuration(long);
+    method public abstract void setInterpolator(android.animation.TimeInterpolator);
+    method public abstract void setStartDelay(long);
+    method public void setTarget(@Nullable Object);
+    method public void setupEndValues();
+    method public void setupStartValues();
+    method public void start();
+    field public static final long DURATION_INFINITE = -1L; // 0xffffffffffffffffL
+  }
+
+  public static interface Animator.AnimatorListener {
+    method public void onAnimationCancel(android.animation.Animator);
+    method public default void onAnimationEnd(android.animation.Animator, boolean);
+    method public void onAnimationEnd(android.animation.Animator);
+    method public void onAnimationRepeat(android.animation.Animator);
+    method public default void onAnimationStart(android.animation.Animator, boolean);
+    method public void onAnimationStart(android.animation.Animator);
+  }
+
+  public static interface Animator.AnimatorPauseListener {
+    method public void onAnimationPause(android.animation.Animator);
+    method public void onAnimationResume(android.animation.Animator);
+  }
+
+  public class AnimatorInflater {
+    ctor public AnimatorInflater();
+    method public static android.animation.Animator loadAnimator(android.content.Context, @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.animation.StateListAnimator loadStateListAnimator(android.content.Context, int) throws android.content.res.Resources.NotFoundException;
+  }
+
+  public abstract class AnimatorListenerAdapter implements android.animation.Animator.AnimatorListener android.animation.Animator.AnimatorPauseListener {
+    ctor public AnimatorListenerAdapter();
+    method public void onAnimationCancel(android.animation.Animator);
+    method public void onAnimationEnd(android.animation.Animator);
+    method public void onAnimationPause(android.animation.Animator);
+    method public void onAnimationRepeat(android.animation.Animator);
+    method public void onAnimationResume(android.animation.Animator);
+    method public void onAnimationStart(android.animation.Animator);
+  }
+
+  public final class AnimatorSet extends android.animation.Animator {
+    ctor public AnimatorSet();
+    method public android.animation.AnimatorSet clone();
+    method public java.util.ArrayList<android.animation.Animator> getChildAnimations();
+    method public long getCurrentPlayTime();
+    method public long getDuration();
+    method public long getStartDelay();
+    method public boolean isRunning();
+    method public android.animation.AnimatorSet.Builder play(android.animation.Animator);
+    method public void playSequentially(android.animation.Animator...);
+    method public void playSequentially(java.util.List<android.animation.Animator>);
+    method public void playTogether(android.animation.Animator...);
+    method public void playTogether(java.util.Collection<android.animation.Animator>);
+    method public void reverse();
+    method public void setCurrentPlayTime(long);
+    method public android.animation.AnimatorSet setDuration(long);
+    method public void setInterpolator(android.animation.TimeInterpolator);
+    method public void setStartDelay(long);
+  }
+
+  public class AnimatorSet.Builder {
+    method public android.animation.AnimatorSet.Builder after(android.animation.Animator);
+    method public android.animation.AnimatorSet.Builder after(long);
+    method public android.animation.AnimatorSet.Builder before(android.animation.Animator);
+    method public android.animation.AnimatorSet.Builder with(android.animation.Animator);
+  }
+
+  public class ArgbEvaluator implements android.animation.TypeEvaluator {
+    ctor public ArgbEvaluator();
+    method public Object evaluate(float, Object, Object);
+  }
+
+  public abstract class BidirectionalTypeConverter<T, V> extends android.animation.TypeConverter<T,V> {
+    ctor public BidirectionalTypeConverter(Class<T>, Class<V>);
+    method public abstract T convertBack(V);
+    method public android.animation.BidirectionalTypeConverter<V,T> invert();
+  }
+
+  public class FloatArrayEvaluator implements android.animation.TypeEvaluator<float[]> {
+    ctor public FloatArrayEvaluator();
+    ctor public FloatArrayEvaluator(float[]);
+    method public float[] evaluate(float, float[], float[]);
+  }
+
+  public class FloatEvaluator implements android.animation.TypeEvaluator<java.lang.Number> {
+    ctor public FloatEvaluator();
+    method public Float evaluate(float, Number, Number);
+  }
+
+  public class IntArrayEvaluator implements android.animation.TypeEvaluator<int[]> {
+    ctor public IntArrayEvaluator();
+    ctor public IntArrayEvaluator(int[]);
+    method public int[] evaluate(float, int[], int[]);
+  }
+
+  public class IntEvaluator implements android.animation.TypeEvaluator<java.lang.Integer> {
+    ctor public IntEvaluator();
+    method public Integer evaluate(float, Integer, Integer);
+  }
+
+  public abstract class Keyframe implements java.lang.Cloneable {
+    ctor public Keyframe();
+    method public abstract android.animation.Keyframe clone();
+    method public float getFraction();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public Class getType();
+    method public abstract Object getValue();
+    method public boolean hasValue();
+    method public static android.animation.Keyframe ofFloat(float, float);
+    method public static android.animation.Keyframe ofFloat(float);
+    method public static android.animation.Keyframe ofInt(float, int);
+    method public static android.animation.Keyframe ofInt(float);
+    method public static android.animation.Keyframe ofObject(float, Object);
+    method public static android.animation.Keyframe ofObject(float);
+    method public void setFraction(float);
+    method public void setInterpolator(android.animation.TimeInterpolator);
+    method public abstract void setValue(Object);
+  }
+
+  public class LayoutTransition {
+    ctor public LayoutTransition();
+    method public void addChild(android.view.ViewGroup, android.view.View);
+    method public void addTransitionListener(android.animation.LayoutTransition.TransitionListener);
+    method public void disableTransitionType(int);
+    method public void enableTransitionType(int);
+    method public android.animation.Animator getAnimator(int);
+    method public long getDuration(int);
+    method public android.animation.TimeInterpolator getInterpolator(int);
+    method public long getStagger(int);
+    method public long getStartDelay(int);
+    method public java.util.List<android.animation.LayoutTransition.TransitionListener> getTransitionListeners();
+    method @Deprecated public void hideChild(android.view.ViewGroup, android.view.View);
+    method public void hideChild(android.view.ViewGroup, android.view.View, int);
+    method public boolean isChangingLayout();
+    method public boolean isRunning();
+    method public boolean isTransitionTypeEnabled(int);
+    method public void removeChild(android.view.ViewGroup, android.view.View);
+    method public void removeTransitionListener(android.animation.LayoutTransition.TransitionListener);
+    method public void setAnimateParentHierarchy(boolean);
+    method public void setAnimator(int, android.animation.Animator);
+    method public void setDuration(long);
+    method public void setDuration(int, long);
+    method public void setInterpolator(int, android.animation.TimeInterpolator);
+    method public void setStagger(int, long);
+    method public void setStartDelay(int, long);
+    method @Deprecated public void showChild(android.view.ViewGroup, android.view.View);
+    method public void showChild(android.view.ViewGroup, android.view.View, int);
+    field public static final int APPEARING = 2; // 0x2
+    field public static final int CHANGE_APPEARING = 0; // 0x0
+    field public static final int CHANGE_DISAPPEARING = 1; // 0x1
+    field public static final int CHANGING = 4; // 0x4
+    field public static final int DISAPPEARING = 3; // 0x3
+  }
+
+  public static interface LayoutTransition.TransitionListener {
+    method public void endTransition(android.animation.LayoutTransition, android.view.ViewGroup, android.view.View, int);
+    method public void startTransition(android.animation.LayoutTransition, android.view.ViewGroup, android.view.View, int);
+  }
+
+  public final class ObjectAnimator extends android.animation.ValueAnimator {
+    ctor public ObjectAnimator();
+    method public android.animation.ObjectAnimator clone();
+    method @Nullable public String getPropertyName();
+    method @Nullable public Object getTarget();
+    method public static android.animation.ObjectAnimator ofArgb(Object, String, int...);
+    method public static <T> android.animation.ObjectAnimator ofArgb(T, android.util.Property<T,java.lang.Integer>, int...);
+    method public static android.animation.ObjectAnimator ofFloat(Object, String, float...);
+    method public static android.animation.ObjectAnimator ofFloat(Object, String, String, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T,java.lang.Float>, float...);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T,java.lang.Float>, android.util.Property<T,java.lang.Float>, android.graphics.Path);
+    method public static android.animation.ObjectAnimator ofInt(Object, String, int...);
+    method public static android.animation.ObjectAnimator ofInt(Object, String, String, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T,java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T,java.lang.Integer>, android.util.Property<T,java.lang.Integer>, android.graphics.Path);
+    method public static android.animation.ObjectAnimator ofMultiFloat(Object, String, float[][]);
+    method public static android.animation.ObjectAnimator ofMultiFloat(Object, String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <T> android.animation.ObjectAnimator ofMultiFloat(Object, String, android.animation.TypeConverter<T,float[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static android.animation.ObjectAnimator ofMultiInt(Object, String, int[][]);
+    method public static android.animation.ObjectAnimator ofMultiInt(Object, String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <T> android.animation.ObjectAnimator ofMultiInt(Object, String, android.animation.TypeConverter<T,int[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static android.animation.ObjectAnimator ofObject(Object, String, android.animation.TypeEvaluator, java.lang.Object...);
+    method @NonNull public static android.animation.ObjectAnimator ofObject(Object, String, @Nullable android.animation.TypeConverter<android.graphics.PointF,?>, android.graphics.Path);
+    method @NonNull @java.lang.SafeVarargs public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T,V>, android.animation.TypeEvaluator<V>, V...);
+    method @NonNull @java.lang.SafeVarargs public static <T, V, P> android.animation.ObjectAnimator ofObject(T, android.util.Property<T,P>, android.animation.TypeConverter<V,P>, android.animation.TypeEvaluator<V>, V...);
+    method @NonNull public static <T, V> android.animation.ObjectAnimator ofObject(T, @NonNull android.util.Property<T,V>, @Nullable android.animation.TypeConverter<android.graphics.PointF,V>, android.graphics.Path);
+    method @NonNull public static android.animation.ObjectAnimator ofPropertyValuesHolder(Object, android.animation.PropertyValuesHolder...);
+    method public void setAutoCancel(boolean);
+    method @NonNull public android.animation.ObjectAnimator setDuration(long);
+    method public void setProperty(@NonNull android.util.Property);
+    method public void setPropertyName(@NonNull String);
+  }
+
+  public class PointFEvaluator implements android.animation.TypeEvaluator<android.graphics.PointF> {
+    ctor public PointFEvaluator();
+    ctor public PointFEvaluator(android.graphics.PointF);
+    method public android.graphics.PointF evaluate(float, android.graphics.PointF, android.graphics.PointF);
+  }
+
+  public class PropertyValuesHolder implements java.lang.Cloneable {
+    method public android.animation.PropertyValuesHolder clone();
+    method public String getPropertyName();
+    method public static android.animation.PropertyValuesHolder ofFloat(String, float...);
+    method public static android.animation.PropertyValuesHolder ofFloat(android.util.Property<?,java.lang.Float>, float...);
+    method public static android.animation.PropertyValuesHolder ofInt(String, int...);
+    method public static android.animation.PropertyValuesHolder ofInt(android.util.Property<?,java.lang.Integer>, int...);
+    method public static android.animation.PropertyValuesHolder ofKeyframe(String, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(String, float[][]);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <V> android.animation.PropertyValuesHolder ofMultiFloat(String, android.animation.TypeConverter<V,float[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiFloat(String, android.animation.TypeConverter<T,float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(String, int[][]);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(String, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <V> android.animation.PropertyValuesHolder ofMultiInt(String, android.animation.TypeConverter<V,int[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiInt(String, android.animation.TypeConverter<T,int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofObject(String, android.animation.TypeEvaluator, java.lang.Object...);
+    method public static android.animation.PropertyValuesHolder ofObject(String, android.animation.TypeConverter<android.graphics.PointF,?>, android.graphics.Path);
+    method @java.lang.SafeVarargs public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
+    method @java.lang.SafeVarargs public static <T, V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?,V>, android.animation.TypeConverter<T,V>, android.animation.TypeEvaluator<T>, T...);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?,V>, android.animation.TypeConverter<android.graphics.PointF,V>, android.graphics.Path);
+    method public void setConverter(android.animation.TypeConverter);
+    method public void setEvaluator(android.animation.TypeEvaluator);
+    method public void setFloatValues(float...);
+    method public void setIntValues(int...);
+    method public void setKeyframes(android.animation.Keyframe...);
+    method public void setObjectValues(java.lang.Object...);
+    method public void setProperty(android.util.Property);
+    method public void setPropertyName(String);
+  }
+
+  public class RectEvaluator implements android.animation.TypeEvaluator<android.graphics.Rect> {
+    ctor public RectEvaluator();
+    ctor public RectEvaluator(android.graphics.Rect);
+    method public android.graphics.Rect evaluate(float, android.graphics.Rect, android.graphics.Rect);
+  }
+
+  public class StateListAnimator implements java.lang.Cloneable {
+    ctor public StateListAnimator();
+    method public void addState(int[], android.animation.Animator);
+    method public android.animation.StateListAnimator clone();
+    method public void jumpToCurrentState();
+  }
+
+  public class TimeAnimator extends android.animation.ValueAnimator {
+    ctor public TimeAnimator();
+    method public void setTimeListener(android.animation.TimeAnimator.TimeListener);
+  }
+
+  public static interface TimeAnimator.TimeListener {
+    method public void onTimeUpdate(android.animation.TimeAnimator, long, long);
+  }
+
+  public interface TimeInterpolator {
+    method public float getInterpolation(float);
+  }
+
+  public abstract class TypeConverter<T, V> {
+    ctor public TypeConverter(Class<T>, Class<V>);
+    method public abstract V convert(T);
+  }
+
+  public interface TypeEvaluator<T> {
+    method public T evaluate(float, T, T);
+  }
+
+  public class ValueAnimator extends android.animation.Animator {
+    ctor public ValueAnimator();
+    method public void addUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
+    method public static boolean areAnimatorsEnabled();
+    method public android.animation.ValueAnimator clone();
+    method public float getAnimatedFraction();
+    method public Object getAnimatedValue();
+    method public Object getAnimatedValue(String);
+    method public long getCurrentPlayTime();
+    method public long getDuration();
+    method public static long getFrameDelay();
+    method public int getRepeatCount();
+    method public int getRepeatMode();
+    method public long getStartDelay();
+    method public android.animation.PropertyValuesHolder[] getValues();
+    method public boolean isRunning();
+    method public static android.animation.ValueAnimator ofArgb(int...);
+    method public static android.animation.ValueAnimator ofFloat(float...);
+    method public static android.animation.ValueAnimator ofInt(int...);
+    method public static android.animation.ValueAnimator ofObject(android.animation.TypeEvaluator, java.lang.Object...);
+    method public static android.animation.ValueAnimator ofPropertyValuesHolder(android.animation.PropertyValuesHolder...);
+    method public void removeAllUpdateListeners();
+    method public void removeUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
+    method public void reverse();
+    method public void setCurrentFraction(float);
+    method public void setCurrentPlayTime(long);
+    method public android.animation.ValueAnimator setDuration(long);
+    method public void setEvaluator(android.animation.TypeEvaluator);
+    method public void setFloatValues(float...);
+    method public static void setFrameDelay(long);
+    method public void setIntValues(int...);
+    method public void setInterpolator(android.animation.TimeInterpolator);
+    method public void setObjectValues(java.lang.Object...);
+    method public void setRepeatCount(int);
+    method public void setRepeatMode(int);
+    method public void setStartDelay(long);
+    method public void setValues(android.animation.PropertyValuesHolder...);
+    field public static final int INFINITE = -1; // 0xffffffff
+    field public static final int RESTART = 1; // 0x1
+    field public static final int REVERSE = 2; // 0x2
+  }
+
+  public static interface ValueAnimator.AnimatorUpdateListener {
+    method public void onAnimationUpdate(android.animation.ValueAnimator);
+  }
+
+}
+
+package android.annotation {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface SuppressLint {
+    method public abstract String[] value();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD}) public @interface TargetApi {
+    method public abstract int value();
+  }
+
+}
+
+package android.app {
+
+  public abstract class ActionBar {
+    ctor public ActionBar();
+    method public abstract void addOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab, boolean);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab, int);
+    method @Deprecated public abstract void addTab(android.app.ActionBar.Tab, int, boolean);
+    method public abstract android.view.View getCustomView();
+    method public abstract int getDisplayOptions();
+    method public float getElevation();
+    method public abstract int getHeight();
+    method public int getHideOffset();
+    method @Deprecated public abstract int getNavigationItemCount();
+    method @Deprecated public abstract int getNavigationMode();
+    method @Deprecated public abstract int getSelectedNavigationIndex();
+    method @Deprecated public abstract android.app.ActionBar.Tab getSelectedTab();
+    method public abstract CharSequence getSubtitle();
+    method @Deprecated public abstract android.app.ActionBar.Tab getTabAt(int);
+    method @Deprecated public abstract int getTabCount();
+    method public android.content.Context getThemedContext();
+    method public abstract CharSequence getTitle();
+    method public abstract void hide();
+    method public boolean isHideOnContentScrollEnabled();
+    method public abstract boolean isShowing();
+    method @Deprecated public abstract android.app.ActionBar.Tab newTab();
+    method @Deprecated public abstract void removeAllTabs();
+    method public abstract void removeOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener);
+    method @Deprecated public abstract void removeTab(android.app.ActionBar.Tab);
+    method @Deprecated public abstract void removeTabAt(int);
+    method @Deprecated public abstract void selectTab(android.app.ActionBar.Tab);
+    method public abstract void setBackgroundDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public abstract void setCustomView(android.view.View);
+    method public abstract void setCustomView(android.view.View, android.app.ActionBar.LayoutParams);
+    method public abstract void setCustomView(@LayoutRes int);
+    method public abstract void setDisplayHomeAsUpEnabled(boolean);
+    method public abstract void setDisplayOptions(int);
+    method public abstract void setDisplayOptions(int, int);
+    method public abstract void setDisplayShowCustomEnabled(boolean);
+    method public abstract void setDisplayShowHomeEnabled(boolean);
+    method public abstract void setDisplayShowTitleEnabled(boolean);
+    method public abstract void setDisplayUseLogoEnabled(boolean);
+    method public void setElevation(float);
+    method public void setHideOffset(int);
+    method public void setHideOnContentScrollEnabled(boolean);
+    method public void setHomeActionContentDescription(CharSequence);
+    method public void setHomeActionContentDescription(@StringRes int);
+    method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
+    method public void setHomeAsUpIndicator(@DrawableRes int);
+    method public void setHomeButtonEnabled(boolean);
+    method public abstract void setIcon(@DrawableRes int);
+    method public abstract void setIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.app.ActionBar.OnNavigationListener);
+    method public abstract void setLogo(@DrawableRes int);
+    method public abstract void setLogo(android.graphics.drawable.Drawable);
+    method @Deprecated public abstract void setNavigationMode(int);
+    method @Deprecated public abstract void setSelectedNavigationItem(int);
+    method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public abstract void setSubtitle(CharSequence);
+    method public abstract void setSubtitle(@StringRes int);
+    method public abstract void setTitle(CharSequence);
+    method public abstract void setTitle(@StringRes int);
+    method public abstract void show();
+    field public static final int DISPLAY_HOME_AS_UP = 4; // 0x4
+    field public static final int DISPLAY_SHOW_CUSTOM = 16; // 0x10
+    field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
+    field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
+    field public static final int DISPLAY_USE_LOGO = 1; // 0x1
+    field @Deprecated public static final int NAVIGATION_MODE_LIST = 1; // 0x1
+    field @Deprecated public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
+    field @Deprecated public static final int NAVIGATION_MODE_TABS = 2; // 0x2
+  }
+
+  public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public ActionBar.LayoutParams(@NonNull android.content.Context, android.util.AttributeSet);
+    ctor public ActionBar.LayoutParams(int, int);
+    ctor public ActionBar.LayoutParams(int, int, int);
+    ctor public ActionBar.LayoutParams(int);
+    ctor public ActionBar.LayoutParams(android.app.ActionBar.LayoutParams);
+    ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+    field public int gravity;
+  }
+
+  public static interface ActionBar.OnMenuVisibilityListener {
+    method public void onMenuVisibilityChanged(boolean);
+  }
+
+  @Deprecated public static interface ActionBar.OnNavigationListener {
+    method @Deprecated public boolean onNavigationItemSelected(int, long);
+  }
+
+  @Deprecated public abstract static class ActionBar.Tab {
+    ctor @Deprecated public ActionBar.Tab();
+    method @Deprecated public abstract CharSequence getContentDescription();
+    method @Deprecated public abstract android.view.View getCustomView();
+    method @Deprecated public abstract android.graphics.drawable.Drawable getIcon();
+    method @Deprecated public abstract int getPosition();
+    method @Deprecated public abstract Object getTag();
+    method @Deprecated public abstract CharSequence getText();
+    method @Deprecated public abstract void select();
+    method @Deprecated public abstract android.app.ActionBar.Tab setContentDescription(@StringRes int);
+    method @Deprecated public abstract android.app.ActionBar.Tab setContentDescription(CharSequence);
+    method @Deprecated public abstract android.app.ActionBar.Tab setCustomView(android.view.View);
+    method @Deprecated public abstract android.app.ActionBar.Tab setCustomView(@LayoutRes int);
+    method @Deprecated public abstract android.app.ActionBar.Tab setIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public abstract android.app.ActionBar.Tab setIcon(@DrawableRes int);
+    method @Deprecated public abstract android.app.ActionBar.Tab setTabListener(android.app.ActionBar.TabListener);
+    method @Deprecated public abstract android.app.ActionBar.Tab setTag(Object);
+    method @Deprecated public abstract android.app.ActionBar.Tab setText(CharSequence);
+    method @Deprecated public abstract android.app.ActionBar.Tab setText(@StringRes int);
+    field @Deprecated public static final int INVALID_POSITION = -1; // 0xffffffff
+  }
+
+  @Deprecated public static interface ActionBar.TabListener {
+    method @Deprecated public void onTabReselected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
+    method @Deprecated public void onTabSelected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
+    method @Deprecated public void onTabUnselected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
+  }
+
+  @UiContext public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    ctor public Activity();
+    method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void closeContextMenu();
+    method public void closeOptionsMenu();
+    method public android.app.PendingIntent createPendingResult(int, @NonNull android.content.Intent, int);
+    method @Deprecated public final void dismissDialog(int);
+    method public final void dismissKeyboardShortcutsHelper();
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public void dump(@NonNull String, @Nullable java.io.FileDescriptor, @NonNull java.io.PrintWriter, @Nullable String[]);
+    method @Deprecated public void enterPictureInPictureMode();
+    method public boolean enterPictureInPictureMode(@NonNull android.app.PictureInPictureParams);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method public void finish();
+    method public void finishActivity(int);
+    method @Deprecated public void finishActivityFromChild(@NonNull android.app.Activity, int);
+    method public void finishAffinity();
+    method public void finishAfterTransition();
+    method public void finishAndRemoveTask();
+    method @Deprecated public void finishFromChild(android.app.Activity);
+    method @Nullable public android.app.ActionBar getActionBar();
+    method public final android.app.Application getApplication();
+    method @Nullable public android.content.ComponentName getCallingActivity();
+    method @Nullable public String getCallingPackage();
+    method public int getChangingConfigurations();
+    method public android.content.ComponentName getComponentName();
+    method public android.transition.Scene getContentScene();
+    method public android.transition.TransitionManager getContentTransitionManager();
+    method @Nullable public android.view.View getCurrentFocus();
+    method @Deprecated public android.app.FragmentManager getFragmentManager();
+    method public android.content.Intent getIntent();
+    method @Nullable public Object getLastNonConfigurationInstance();
+    method @NonNull public android.view.LayoutInflater getLayoutInflater();
+    method @Deprecated public android.app.LoaderManager getLoaderManager();
+    method @NonNull public String getLocalClassName();
+    method public int getMaxNumPictureInPictureActions();
+    method public final android.media.session.MediaController getMediaController();
+    method @NonNull public android.view.MenuInflater getMenuInflater();
+    method public final android.app.Activity getParent();
+    method @Nullable public android.content.Intent getParentActivityIntent();
+    method public android.content.SharedPreferences getPreferences(int);
+    method @Nullable public android.net.Uri getReferrer();
+    method public int getRequestedOrientation();
+    method public final android.view.SearchEvent getSearchEvent();
+    method @NonNull public final android.window.SplashScreen getSplashScreen();
+    method public int getTaskId();
+    method public final CharSequence getTitle();
+    method public final int getTitleColor();
+    method public android.app.VoiceInteractor getVoiceInteractor();
+    method public final int getVolumeControlStream();
+    method public android.view.Window getWindow();
+    method public android.view.WindowManager getWindowManager();
+    method public boolean hasWindowFocus();
+    method public void invalidateOptionsMenu();
+    method public boolean isActivityTransitionRunning();
+    method public boolean isChangingConfigurations();
+    method public final boolean isChild();
+    method public boolean isDestroyed();
+    method public boolean isFinishing();
+    method public boolean isImmersive();
+    method public boolean isInMultiWindowMode();
+    method public boolean isInPictureInPictureMode();
+    method public boolean isLaunchedFromBubble();
+    method public boolean isLocalVoiceInteractionSupported();
+    method public boolean isTaskRoot();
+    method public boolean isVoiceInteraction();
+    method public boolean isVoiceInteractionRoot();
+    method @Deprecated public final android.database.Cursor managedQuery(android.net.Uri, String[], String, String[], String);
+    method public boolean moveTaskToBack(boolean);
+    method public boolean navigateUpTo(android.content.Intent);
+    method @Deprecated public boolean navigateUpToFromChild(android.app.Activity, android.content.Intent);
+    method @CallSuper public void onActionModeFinished(android.view.ActionMode);
+    method @CallSuper public void onActionModeStarted(android.view.ActionMode);
+    method public void onActivityReenter(int, android.content.Intent);
+    method protected void onActivityResult(int, int, android.content.Intent);
+    method @Deprecated public void onAttachFragment(android.app.Fragment);
+    method public void onAttachedToWindow();
+    method public void onBackPressed();
+    method protected void onChildTitleChanged(android.app.Activity, CharSequence);
+    method public void onConfigurationChanged(@NonNull android.content.res.Configuration);
+    method public void onContentChanged();
+    method public boolean onContextItemSelected(@NonNull android.view.MenuItem);
+    method public void onContextMenuClosed(@NonNull android.view.Menu);
+    method @CallSuper @MainThread protected void onCreate(@Nullable android.os.Bundle);
+    method public void onCreate(@Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+    method @Nullable public CharSequence onCreateDescription();
+    method @Deprecated protected android.app.Dialog onCreateDialog(int);
+    method @Deprecated @Nullable protected android.app.Dialog onCreateDialog(int, android.os.Bundle);
+    method public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder);
+    method public boolean onCreateOptionsMenu(android.view.Menu);
+    method public boolean onCreatePanelMenu(int, @NonNull android.view.Menu);
+    method @Nullable public android.view.View onCreatePanelView(int);
+    method @Deprecated public boolean onCreateThumbnail(android.graphics.Bitmap, android.graphics.Canvas);
+    method @Nullable public android.view.View onCreateView(@NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+    method @Nullable public android.view.View onCreateView(@Nullable android.view.View, @NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+    method @CallSuper protected void onDestroy();
+    method public void onDetachedFromWindow();
+    method public void onEnterAnimationComplete();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public void onGetDirectActions(@NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<java.util.List<android.app.DirectAction>>);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyShortcut(int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onLocalVoiceInteractionStarted();
+    method public void onLocalVoiceInteractionStopped();
+    method public void onLowMemory();
+    method public boolean onMenuItemSelected(int, @NonNull android.view.MenuItem);
+    method public boolean onMenuOpened(int, @NonNull android.view.Menu);
+    method public void onMultiWindowModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onMultiWindowModeChanged(boolean);
+    method public boolean onNavigateUp();
+    method @Deprecated public boolean onNavigateUpFromChild(android.app.Activity);
+    method protected void onNewIntent(android.content.Intent);
+    method public boolean onOptionsItemSelected(@NonNull android.view.MenuItem);
+    method public void onOptionsMenuClosed(android.view.Menu);
+    method public void onPanelClosed(int, @NonNull android.view.Menu);
+    method @CallSuper protected void onPause();
+    method public void onPerformDirectAction(@NonNull String, @NonNull android.os.Bundle, @NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<android.os.Bundle>);
+    method public void onPictureInPictureModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onPictureInPictureModeChanged(boolean);
+    method public boolean onPictureInPictureRequested();
+    method public void onPictureInPictureUiStateChanged(@NonNull android.app.PictureInPictureUiState);
+    method @CallSuper protected void onPostCreate(@Nullable android.os.Bundle);
+    method public void onPostCreate(@Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method @CallSuper protected void onPostResume();
+    method @Deprecated protected void onPrepareDialog(int, android.app.Dialog);
+    method @Deprecated protected void onPrepareDialog(int, android.app.Dialog, android.os.Bundle);
+    method public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder);
+    method public boolean onPrepareOptionsMenu(android.view.Menu);
+    method public boolean onPreparePanel(int, @Nullable android.view.View, @NonNull android.view.Menu);
+    method public void onProvideAssistContent(android.app.assist.AssistContent);
+    method public void onProvideAssistData(android.os.Bundle);
+    method public android.net.Uri onProvideReferrer();
+    method public void onRequestPermissionsResult(int, @NonNull String[], @NonNull int[]);
+    method @CallSuper protected void onRestart();
+    method protected void onRestoreInstanceState(@NonNull android.os.Bundle);
+    method public void onRestoreInstanceState(@Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method @CallSuper protected void onResume();
+    method public Object onRetainNonConfigurationInstance();
+    method protected void onSaveInstanceState(@NonNull android.os.Bundle);
+    method public void onSaveInstanceState(@NonNull android.os.Bundle, @NonNull android.os.PersistableBundle);
+    method public boolean onSearchRequested(@Nullable android.view.SearchEvent);
+    method public boolean onSearchRequested();
+    method @CallSuper protected void onStart();
+    method @Deprecated public void onStateNotSaved();
+    method @CallSuper protected void onStop();
+    method protected void onTitleChanged(CharSequence, int);
+    method public void onTopResumedActivityChanged(boolean);
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public void onTrimMemory(int);
+    method public void onUserInteraction();
+    method protected void onUserLeaveHint();
+    method @Deprecated @CallSuper public void onVisibleBehindCanceled();
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+    method public void openContextMenu(android.view.View);
+    method public void openOptionsMenu();
+    method public void overridePendingTransition(int, int);
+    method public void postponeEnterTransition();
+    method public void recreate();
+    method public void registerActivityLifecycleCallbacks(@NonNull android.app.Application.ActivityLifecycleCallbacks);
+    method public void registerForContextMenu(android.view.View);
+    method public boolean releaseInstance();
+    method @Deprecated public final void removeDialog(int);
+    method public void reportFullyDrawn();
+    method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
+    method public final void requestPermissions(@NonNull String[], int);
+    method public final void requestShowKeyboardShortcuts();
+    method @Deprecated public boolean requestVisibleBehind(boolean);
+    method public final boolean requestWindowFeature(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public final void runOnUiThread(Runnable);
+    method public void setActionBar(@Nullable android.widget.Toolbar);
+    method public void setContentTransitionManager(android.transition.TransitionManager);
+    method public void setContentView(@LayoutRes int);
+    method public void setContentView(android.view.View);
+    method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public final void setDefaultKeyMode(int);
+    method public void setEnterSharedElementCallback(android.app.SharedElementCallback);
+    method public void setExitSharedElementCallback(android.app.SharedElementCallback);
+    method public final void setFeatureDrawable(int, android.graphics.drawable.Drawable);
+    method public final void setFeatureDrawableAlpha(int, int);
+    method public final void setFeatureDrawableResource(int, @DrawableRes int);
+    method public final void setFeatureDrawableUri(int, android.net.Uri);
+    method public void setFinishOnTouchOutside(boolean);
+    method public void setImmersive(boolean);
+    method public void setInheritShowWhenLocked(boolean);
+    method public void setIntent(android.content.Intent);
+    method public void setLocusContext(@Nullable android.content.LocusId, @Nullable android.os.Bundle);
+    method public final void setMediaController(android.media.session.MediaController);
+    method public void setPictureInPictureParams(@NonNull android.app.PictureInPictureParams);
+    method @Deprecated public final void setProgress(int);
+    method @Deprecated public final void setProgressBarIndeterminate(boolean);
+    method @Deprecated public final void setProgressBarIndeterminateVisibility(boolean);
+    method @Deprecated public final void setProgressBarVisibility(boolean);
+    method public void setRequestedOrientation(int);
+    method public final void setResult(int);
+    method public final void setResult(int, android.content.Intent);
+    method @Deprecated public final void setSecondaryProgress(int);
+    method public void setShowWhenLocked(boolean);
+    method public void setTaskDescription(android.app.ActivityManager.TaskDescription);
+    method public void setTitle(CharSequence);
+    method public void setTitle(int);
+    method @Deprecated public void setTitleColor(int);
+    method public boolean setTranslucent(boolean);
+    method public void setTurnScreenOn(boolean);
+    method public void setVisible(boolean);
+    method public final void setVolumeControlStream(int);
+    method public void setVrModeEnabled(boolean, @NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean shouldShowRequestPermissionRationale(@NonNull String);
+    method public boolean shouldUpRecreateTask(android.content.Intent);
+    method public boolean showAssist(android.os.Bundle);
+    method @Deprecated public final void showDialog(int);
+    method @Deprecated public final boolean showDialog(int, android.os.Bundle);
+    method public void showLockTaskEscapeMessage();
+    method @Nullable public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
+    method @Nullable public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int);
+    method public void startActivityForResult(@RequiresPermission android.content.Intent, int);
+    method public void startActivityForResult(@RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method @Deprecated public void startActivityFromChild(@NonNull android.app.Activity, @RequiresPermission android.content.Intent, int);
+    method @Deprecated public void startActivityFromChild(@NonNull android.app.Activity, @RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method @Deprecated public void startActivityFromFragment(@NonNull android.app.Fragment, @RequiresPermission android.content.Intent, int);
+    method @Deprecated public void startActivityFromFragment(@NonNull android.app.Fragment, @RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method public boolean startActivityIfNeeded(@NonNull @RequiresPermission android.content.Intent, int);
+    method public boolean startActivityIfNeeded(@NonNull @RequiresPermission android.content.Intent, int, @Nullable android.os.Bundle);
+    method public void startIntentSenderForResult(android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public void startIntentSenderForResult(android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startIntentSenderFromChild(android.app.Activity, android.content.IntentSender, int, android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method public void startLocalVoiceInteraction(android.os.Bundle);
+    method public void startLockTask();
+    method @Deprecated public void startManagingCursor(android.database.Cursor);
+    method public boolean startNextMatchingActivity(@NonNull @RequiresPermission android.content.Intent);
+    method public boolean startNextMatchingActivity(@NonNull @RequiresPermission android.content.Intent, @Nullable android.os.Bundle);
+    method public void startPostponedEnterTransition();
+    method public void startSearch(@Nullable String, boolean, @Nullable android.os.Bundle, boolean);
+    method public void stopLocalVoiceInteraction();
+    method public void stopLockTask();
+    method @Deprecated public void stopManagingCursor(android.database.Cursor);
+    method public void takeKeyEvents(boolean);
+    method public void triggerSearch(String, @Nullable android.os.Bundle);
+    method public void unregisterActivityLifecycleCallbacks(@NonNull android.app.Application.ActivityLifecycleCallbacks);
+    method public void unregisterForContextMenu(android.view.View);
+    field public static final int DEFAULT_KEYS_DIALER = 1; // 0x1
+    field public static final int DEFAULT_KEYS_DISABLE = 0; // 0x0
+    field public static final int DEFAULT_KEYS_SEARCH_GLOBAL = 4; // 0x4
+    field public static final int DEFAULT_KEYS_SEARCH_LOCAL = 3; // 0x3
+    field public static final int DEFAULT_KEYS_SHORTCUT = 2; // 0x2
+    field protected static final int[] FOCUSED_STATE_SET;
+    field public static final int RESULT_CANCELED = 0; // 0x0
+    field public static final int RESULT_FIRST_USER = 1; // 0x1
+    field public static final int RESULT_OK = -1; // 0xffffffff
+  }
+
+  @Deprecated public class ActivityGroup extends android.app.Activity {
+    ctor @Deprecated public ActivityGroup();
+    ctor @Deprecated public ActivityGroup(boolean);
+    method @Deprecated public android.app.Activity getCurrentActivity();
+    method @Deprecated public final android.app.LocalActivityManager getLocalActivityManager();
+  }
+
+  public class ActivityManager {
+    method public int addAppTask(@NonNull android.app.Activity, @NonNull android.content.Intent, @Nullable android.app.ActivityManager.TaskDescription, @NonNull android.graphics.Bitmap);
+    method public void appNotResponding(@NonNull String);
+    method public boolean clearApplicationUserData();
+    method public void clearWatchHeapLimit();
+    method @RequiresPermission(android.Manifest.permission.DUMP) public void dumpPackageState(java.io.FileDescriptor, String);
+    method public android.util.Size getAppTaskThumbnailSize();
+    method public java.util.List<android.app.ActivityManager.AppTask> getAppTasks();
+    method public android.content.pm.ConfigurationInfo getDeviceConfigurationInfo();
+    method @NonNull public java.util.List<android.app.ApplicationExitInfo> getHistoricalProcessExitReasons(@Nullable String, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public int getLargeMemoryClass();
+    method public int getLauncherLargeIconDensity();
+    method public int getLauncherLargeIconSize();
+    method public int getLockTaskModeState();
+    method public int getMemoryClass();
+    method public void getMemoryInfo(android.app.ActivityManager.MemoryInfo);
+    method public static void getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo);
+    method public android.os.Debug.MemoryInfo[] getProcessMemoryInfo(int[]);
+    method public java.util.List<android.app.ActivityManager.ProcessErrorStateInfo> getProcessesInErrorState();
+    method @Deprecated public java.util.List<android.app.ActivityManager.RecentTaskInfo> getRecentTasks(int, int) throws java.lang.SecurityException;
+    method public java.util.List<android.app.ActivityManager.RunningAppProcessInfo> getRunningAppProcesses();
+    method public android.app.PendingIntent getRunningServiceControlPanel(android.content.ComponentName) throws java.lang.SecurityException;
+    method @Deprecated public java.util.List<android.app.ActivityManager.RunningServiceInfo> getRunningServices(int) throws java.lang.SecurityException;
+    method @Deprecated public java.util.List<android.app.ActivityManager.RunningTaskInfo> getRunningTasks(int) throws java.lang.SecurityException;
+    method public boolean isActivityStartAllowedOnDisplay(@NonNull android.content.Context, int, @NonNull android.content.Intent);
+    method public boolean isBackgroundRestricted();
+    method @Deprecated public boolean isInLockTaskMode();
+    method public static boolean isLowMemoryKillReportSupported();
+    method public boolean isLowRamDevice();
+    method @Deprecated public static boolean isRunningInTestHarness();
+    method public static boolean isRunningInUserTestHarness();
+    method public static boolean isUserAMonkey();
+    method @RequiresPermission(android.Manifest.permission.KILL_BACKGROUND_PROCESSES) public void killBackgroundProcesses(String);
+    method @RequiresPermission(android.Manifest.permission.REORDER_TASKS) public void moveTaskToFront(int, int);
+    method @RequiresPermission(android.Manifest.permission.REORDER_TASKS) public void moveTaskToFront(int, int, android.os.Bundle);
+    method @Deprecated public void restartPackage(String);
+    method public void setProcessStateSummary(@Nullable byte[]);
+    method public static void setVrThread(int);
+    method public void setWatchHeapLimit(long);
+    field public static final String ACTION_REPORT_HEAP_LIMIT = "android.app.action.REPORT_HEAP_LIMIT";
+    field public static final int LOCK_TASK_MODE_LOCKED = 1; // 0x1
+    field public static final int LOCK_TASK_MODE_NONE = 0; // 0x0
+    field public static final int LOCK_TASK_MODE_PINNED = 2; // 0x2
+    field public static final String META_HOME_ALTERNATE = "android.app.home.alternate";
+    field public static final int MOVE_TASK_NO_USER_ACTION = 2; // 0x2
+    field public static final int MOVE_TASK_WITH_HOME = 1; // 0x1
+    field public static final int RECENT_IGNORE_UNAVAILABLE = 2; // 0x2
+    field public static final int RECENT_WITH_EXCLUDED = 1; // 0x1
+  }
+
+  public static class ActivityManager.AppTask {
+    method public void finishAndRemoveTask();
+    method public android.app.ActivityManager.RecentTaskInfo getTaskInfo();
+    method public void moveToFront();
+    method public void setExcludeFromRecents(boolean);
+    method public void startActivity(android.content.Context, android.content.Intent, android.os.Bundle);
+  }
+
+  public static class ActivityManager.MemoryInfo implements android.os.Parcelable {
+    ctor public ActivityManager.MemoryInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.MemoryInfo> CREATOR;
+    field public long availMem;
+    field public boolean lowMemory;
+    field public long threshold;
+    field public long totalMem;
+  }
+
+  public static class ActivityManager.ProcessErrorStateInfo implements android.os.Parcelable {
+    ctor public ActivityManager.ProcessErrorStateInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CRASHED = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.ProcessErrorStateInfo> CREATOR;
+    field public static final int NOT_RESPONDING = 2; // 0x2
+    field public static final int NO_ERROR = 0; // 0x0
+    field public int condition;
+    field public byte[] crashData;
+    field public String longMsg;
+    field public int pid;
+    field public String processName;
+    field public String shortMsg;
+    field public String stackTrace;
+    field public String tag;
+    field public int uid;
+  }
+
+  public static class ActivityManager.RecentTaskInfo extends android.app.TaskInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RecentTaskInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RecentTaskInfo> CREATOR;
+    field @Deprecated public int affiliatedTaskId;
+    field @Deprecated public CharSequence description;
+    field @Deprecated public int id;
+    field @Deprecated public int persistentId;
+  }
+
+  public static class ActivityManager.RunningAppProcessInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RunningAppProcessInfo();
+    ctor public ActivityManager.RunningAppProcessInfo(String, int, String[]);
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningAppProcessInfo> CREATOR;
+    field @Deprecated public static final int IMPORTANCE_BACKGROUND = 400; // 0x190
+    field public static final int IMPORTANCE_CACHED = 400; // 0x190
+    field public static final int IMPORTANCE_CANT_SAVE_STATE = 350; // 0x15e
+    field @Deprecated public static final int IMPORTANCE_EMPTY = 500; // 0x1f4
+    field public static final int IMPORTANCE_FOREGROUND = 100; // 0x64
+    field public static final int IMPORTANCE_FOREGROUND_SERVICE = 125; // 0x7d
+    field public static final int IMPORTANCE_GONE = 1000; // 0x3e8
+    field public static final int IMPORTANCE_PERCEPTIBLE = 230; // 0xe6
+    field public static final int IMPORTANCE_PERCEPTIBLE_PRE_26 = 130; // 0x82
+    field public static final int IMPORTANCE_SERVICE = 300; // 0x12c
+    field public static final int IMPORTANCE_TOP_SLEEPING = 325; // 0x145
+    field @Deprecated public static final int IMPORTANCE_TOP_SLEEPING_PRE_28 = 150; // 0x96
+    field public static final int IMPORTANCE_VISIBLE = 200; // 0xc8
+    field public static final int REASON_PROVIDER_IN_USE = 1; // 0x1
+    field public static final int REASON_SERVICE_IN_USE = 2; // 0x2
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+    field public int importance;
+    field public int importanceReasonCode;
+    field public android.content.ComponentName importanceReasonComponent;
+    field public int importanceReasonPid;
+    field public int lastTrimLevel;
+    field public int lru;
+    field public int pid;
+    field public String[] pkgList;
+    field public String processName;
+    field public int uid;
+  }
+
+  public static class ActivityManager.RunningServiceInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RunningServiceInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningServiceInfo> CREATOR;
+    field public static final int FLAG_FOREGROUND = 2; // 0x2
+    field public static final int FLAG_PERSISTENT_PROCESS = 8; // 0x8
+    field public static final int FLAG_STARTED = 1; // 0x1
+    field public static final int FLAG_SYSTEM_PROCESS = 4; // 0x4
+    field public long activeSince;
+    field public int clientCount;
+    field public int clientLabel;
+    field public String clientPackage;
+    field public int crashCount;
+    field public int flags;
+    field public boolean foreground;
+    field public long lastActivityTime;
+    field public int pid;
+    field public String process;
+    field public long restarting;
+    field public android.content.ComponentName service;
+    field public boolean started;
+    field public int uid;
+  }
+
+  public static class ActivityManager.RunningTaskInfo extends android.app.TaskInfo implements android.os.Parcelable {
+    ctor public ActivityManager.RunningTaskInfo();
+    method public int describeContents();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.RunningTaskInfo> CREATOR;
+    field @Deprecated public CharSequence description;
+    field @Deprecated public int id;
+    field @Deprecated public int numRunning;
+    field @Deprecated public android.graphics.Bitmap thumbnail;
+  }
+
+  public static class ActivityManager.TaskDescription implements android.os.Parcelable {
+    ctor public ActivityManager.TaskDescription(String, @DrawableRes int, int);
+    ctor public ActivityManager.TaskDescription(String, @DrawableRes int);
+    ctor public ActivityManager.TaskDescription(String);
+    ctor public ActivityManager.TaskDescription();
+    ctor @Deprecated public ActivityManager.TaskDescription(String, android.graphics.Bitmap, int);
+    ctor @Deprecated public ActivityManager.TaskDescription(String, android.graphics.Bitmap);
+    ctor public ActivityManager.TaskDescription(android.app.ActivityManager.TaskDescription);
+    method public int describeContents();
+    method @Deprecated public android.graphics.Bitmap getIcon();
+    method public String getLabel();
+    method public int getPrimaryColor();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ActivityManager.TaskDescription> CREATOR;
+  }
+
+  public class ActivityOptions {
+    method @Nullable public android.graphics.Rect getLaunchBounds();
+    method public int getLaunchDisplayId();
+    method public boolean getLockTaskMode();
+    method public static android.app.ActivityOptions makeBasic();
+    method public static android.app.ActivityOptions makeClipRevealAnimation(android.view.View, int, int, int, int);
+    method public static android.app.ActivityOptions makeCustomAnimation(android.content.Context, int, int);
+    method public static android.app.ActivityOptions makeScaleUpAnimation(android.view.View, int, int, int, int);
+    method public static android.app.ActivityOptions makeSceneTransitionAnimation(android.app.Activity, android.view.View, String);
+    method @java.lang.SafeVarargs public static android.app.ActivityOptions makeSceneTransitionAnimation(android.app.Activity, android.util.Pair<android.view.View,java.lang.String>...);
+    method public static android.app.ActivityOptions makeTaskLaunchBehind();
+    method public static android.app.ActivityOptions makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
+    method public void requestUsageTimeReport(android.app.PendingIntent);
+    method public android.app.ActivityOptions setAppVerificationBundle(android.os.Bundle);
+    method public android.app.ActivityOptions setLaunchBounds(@Nullable android.graphics.Rect);
+    method public android.app.ActivityOptions setLaunchDisplayId(int);
+    method public android.app.ActivityOptions setLockTaskEnabled(boolean);
+    method public android.os.Bundle toBundle();
+    method public void update(android.app.ActivityOptions);
+    field public static final String EXTRA_USAGE_TIME_REPORT = "android.activity.usage_time";
+    field public static final String EXTRA_USAGE_TIME_REPORT_PACKAGES = "android.usage_time_packages";
+  }
+
+  public class AlarmManager {
+    method public boolean canScheduleExactAlarms();
+    method public void cancel(android.app.PendingIntent);
+    method public void cancel(android.app.AlarmManager.OnAlarmListener);
+    method public android.app.AlarmManager.AlarmClockInfo getNextAlarmClock();
+    method public void set(int, long, android.app.PendingIntent);
+    method public void set(int, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.SCHEDULE_EXACT_ALARM) public void setAlarmClock(android.app.AlarmManager.AlarmClockInfo, android.app.PendingIntent);
+    method public void setAndAllowWhileIdle(int, long, android.app.PendingIntent);
+    method @RequiresPermission(value=android.Manifest.permission.SCHEDULE_EXACT_ALARM, conditional=true) public void setExact(int, long, android.app.PendingIntent);
+    method @RequiresPermission(value=android.Manifest.permission.SCHEDULE_EXACT_ALARM, conditional=true) public void setExact(int, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler);
+    method @RequiresPermission(value=android.Manifest.permission.SCHEDULE_EXACT_ALARM, conditional=true) public void setExactAndAllowWhileIdle(int, long, android.app.PendingIntent);
+    method public void setInexactRepeating(int, long, long, android.app.PendingIntent);
+    method public void setRepeating(int, long, long, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.SET_TIME) public void setTime(long);
+    method @RequiresPermission(android.Manifest.permission.SET_TIME_ZONE) public void setTimeZone(String);
+    method public void setWindow(int, long, long, android.app.PendingIntent);
+    method public void setWindow(int, long, long, String, android.app.AlarmManager.OnAlarmListener, android.os.Handler);
+    field public static final String ACTION_NEXT_ALARM_CLOCK_CHANGED = "android.app.action.NEXT_ALARM_CLOCK_CHANGED";
+    field public static final String ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED = "android.app.action.SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED";
+    field public static final int ELAPSED_REALTIME = 3; // 0x3
+    field public static final int ELAPSED_REALTIME_WAKEUP = 2; // 0x2
+    field public static final long INTERVAL_DAY = 86400000L; // 0x5265c00L
+    field public static final long INTERVAL_FIFTEEN_MINUTES = 900000L; // 0xdbba0L
+    field public static final long INTERVAL_HALF_DAY = 43200000L; // 0x2932e00L
+    field public static final long INTERVAL_HALF_HOUR = 1800000L; // 0x1b7740L
+    field public static final long INTERVAL_HOUR = 3600000L; // 0x36ee80L
+    field public static final int RTC = 1; // 0x1
+    field public static final int RTC_WAKEUP = 0; // 0x0
+  }
+
+  public static final class AlarmManager.AlarmClockInfo implements android.os.Parcelable {
+    ctor public AlarmManager.AlarmClockInfo(long, android.app.PendingIntent);
+    method public int describeContents();
+    method public android.app.PendingIntent getShowIntent();
+    method public long getTriggerTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AlarmManager.AlarmClockInfo> CREATOR;
+  }
+
+  public static interface AlarmManager.OnAlarmListener {
+    method public void onAlarm();
+  }
+
+  public class AlertDialog extends android.app.Dialog implements android.content.DialogInterface {
+    ctor protected AlertDialog(android.content.Context);
+    ctor protected AlertDialog(android.content.Context, boolean, android.content.DialogInterface.OnCancelListener);
+    ctor protected AlertDialog(android.content.Context, @StyleRes int);
+    method public android.widget.Button getButton(int);
+    method public android.widget.ListView getListView();
+    method public void setButton(int, CharSequence, android.os.Message);
+    method public void setButton(int, CharSequence, android.content.DialogInterface.OnClickListener);
+    method @Deprecated public void setButton(CharSequence, android.os.Message);
+    method @Deprecated public void setButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method @Deprecated public void setButton2(CharSequence, android.os.Message);
+    method @Deprecated public void setButton2(CharSequence, android.content.DialogInterface.OnClickListener);
+    method @Deprecated public void setButton3(CharSequence, android.os.Message);
+    method @Deprecated public void setButton3(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public void setCustomTitle(android.view.View);
+    method public void setIcon(@DrawableRes int);
+    method public void setIcon(android.graphics.drawable.Drawable);
+    method public void setIconAttribute(@AttrRes int);
+    method public void setInverseBackgroundForced(boolean);
+    method public void setMessage(CharSequence);
+    method public void setView(android.view.View);
+    method public void setView(android.view.View, int, int, int, int);
+    field @Deprecated public static final int THEME_DEVICE_DEFAULT_DARK = 4; // 0x4
+    field @Deprecated public static final int THEME_DEVICE_DEFAULT_LIGHT = 5; // 0x5
+    field @Deprecated public static final int THEME_HOLO_DARK = 2; // 0x2
+    field @Deprecated public static final int THEME_HOLO_LIGHT = 3; // 0x3
+    field @Deprecated public static final int THEME_TRADITIONAL = 1; // 0x1
+  }
+
+  public static class AlertDialog.Builder {
+    ctor public AlertDialog.Builder(android.content.Context);
+    ctor public AlertDialog.Builder(android.content.Context, int);
+    method public android.app.AlertDialog create();
+    method public android.content.Context getContext();
+    method public android.app.AlertDialog.Builder setAdapter(android.widget.ListAdapter, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setCancelable(boolean);
+    method public android.app.AlertDialog.Builder setCursor(android.database.Cursor, android.content.DialogInterface.OnClickListener, String);
+    method public android.app.AlertDialog.Builder setCustomTitle(android.view.View);
+    method public android.app.AlertDialog.Builder setIcon(@DrawableRes int);
+    method public android.app.AlertDialog.Builder setIcon(android.graphics.drawable.Drawable);
+    method public android.app.AlertDialog.Builder setIconAttribute(@AttrRes int);
+    method @Deprecated public android.app.AlertDialog.Builder setInverseBackgroundForced(boolean);
+    method public android.app.AlertDialog.Builder setItems(@ArrayRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setItems(CharSequence[], android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setMessage(@StringRes int);
+    method public android.app.AlertDialog.Builder setMessage(CharSequence);
+    method public android.app.AlertDialog.Builder setMultiChoiceItems(@ArrayRes int, boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.app.AlertDialog.Builder setMultiChoiceItems(CharSequence[], boolean[], android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.app.AlertDialog.Builder setMultiChoiceItems(android.database.Cursor, String, String, android.content.DialogInterface.OnMultiChoiceClickListener);
+    method public android.app.AlertDialog.Builder setNegativeButton(@StringRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setNegativeButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setNeutralButton(@StringRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setNeutralButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setOnCancelListener(android.content.DialogInterface.OnCancelListener);
+    method public android.app.AlertDialog.Builder setOnDismissListener(android.content.DialogInterface.OnDismissListener);
+    method public android.app.AlertDialog.Builder setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+    method public android.app.AlertDialog.Builder setOnKeyListener(android.content.DialogInterface.OnKeyListener);
+    method public android.app.AlertDialog.Builder setPositiveButton(@StringRes int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setPositiveButton(CharSequence, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(@ArrayRes int, int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(android.database.Cursor, int, String, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(CharSequence[], int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
+    method public android.app.AlertDialog.Builder setTitle(@StringRes int);
+    method public android.app.AlertDialog.Builder setTitle(CharSequence);
+    method public android.app.AlertDialog.Builder setView(int);
+    method public android.app.AlertDialog.Builder setView(android.view.View);
+    method public android.app.AlertDialog show();
+  }
+
+  @Deprecated public class AliasActivity extends android.app.Activity {
+    ctor @Deprecated public AliasActivity();
+  }
+
+  public class AppComponentFactory {
+    ctor public AppComponentFactory();
+    method @NonNull public android.app.Activity instantiateActivity(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public android.app.Application instantiateApplication(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public ClassLoader instantiateClassLoader(@NonNull ClassLoader, @NonNull android.content.pm.ApplicationInfo);
+    method @NonNull public android.content.ContentProvider instantiateProvider(@NonNull ClassLoader, @NonNull String) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public android.content.BroadcastReceiver instantiateReceiver(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public android.app.Service instantiateService(@NonNull ClassLoader, @NonNull String, @Nullable android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public class AppOpsManager {
+    method @Deprecated public int checkOp(@NonNull String, int, @NonNull String);
+    method @Deprecated public int checkOpNoThrow(@NonNull String, int, @NonNull String);
+    method @Deprecated public void checkPackage(int, @NonNull String);
+    method @Deprecated public void finishOp(@NonNull String, int, @NonNull String);
+    method public void finishOp(@NonNull String, int, @NonNull String, @Nullable String);
+    method public void finishProxyOp(@NonNull String, int, @NonNull String, @Nullable String);
+    method public boolean isOpActive(@NonNull String, int, @NonNull String);
+    method @Deprecated public int noteOp(@NonNull String, int, @NonNull String);
+    method public int noteOp(@NonNull String, int, @Nullable String, @Nullable String, @Nullable String);
+    method @Deprecated public int noteOpNoThrow(@NonNull String, int, @NonNull String);
+    method public int noteOpNoThrow(@NonNull String, int, @NonNull String, @Nullable String, @Nullable String);
+    method @Deprecated public int noteProxyOp(@NonNull String, @NonNull String);
+    method public int noteProxyOp(@NonNull String, @Nullable String, int, @Nullable String, @Nullable String);
+    method @Deprecated public int noteProxyOpNoThrow(@NonNull String, @NonNull String);
+    method @Deprecated public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int);
+    method public int noteProxyOpNoThrow(@NonNull String, @Nullable String, int, @Nullable String, @Nullable String);
+    method @Nullable public static String permissionToOp(@NonNull String);
+    method public void setOnOpNotedCallback(@Nullable java.util.concurrent.Executor, @Nullable android.app.AppOpsManager.OnOpNotedCallback);
+    method @Deprecated public int startOp(@NonNull String, int, @NonNull String);
+    method public int startOp(@NonNull String, int, @Nullable String, @Nullable String, @Nullable String);
+    method @Deprecated public int startOpNoThrow(@NonNull String, int, @NonNull String);
+    method public int startOpNoThrow(@NonNull String, int, @NonNull String, @NonNull String, @Nullable String);
+    method public int startProxyOp(@NonNull String, int, @NonNull String, @Nullable String, @Nullable String);
+    method public int startProxyOpNoThrow(@NonNull String, int, @NonNull String, @Nullable String, @Nullable String);
+    method public void startWatchingActive(@NonNull String[], @NonNull java.util.concurrent.Executor, @NonNull android.app.AppOpsManager.OnOpActiveChangedListener);
+    method public void startWatchingMode(@NonNull String, @Nullable String, @NonNull android.app.AppOpsManager.OnOpChangedListener);
+    method public void startWatchingMode(@NonNull String, @Nullable String, int, @NonNull android.app.AppOpsManager.OnOpChangedListener);
+    method public void stopWatchingActive(@NonNull android.app.AppOpsManager.OnOpActiveChangedListener);
+    method public void stopWatchingMode(@NonNull android.app.AppOpsManager.OnOpChangedListener);
+    method public int unsafeCheckOp(@NonNull String, int, @NonNull String);
+    method public int unsafeCheckOpNoThrow(@NonNull String, int, @NonNull String);
+    method public int unsafeCheckOpRaw(@NonNull String, int, @NonNull String);
+    method public int unsafeCheckOpRawNoThrow(@NonNull String, int, @NonNull String);
+    field public static final int MODE_ALLOWED = 0; // 0x0
+    field public static final int MODE_DEFAULT = 3; // 0x3
+    field public static final int MODE_ERRORED = 2; // 0x2
+    field public static final int MODE_FOREGROUND = 4; // 0x4
+    field public static final int MODE_IGNORED = 1; // 0x1
+    field public static final String OPSTR_ADD_VOICEMAIL = "android:add_voicemail";
+    field public static final String OPSTR_ANSWER_PHONE_CALLS = "android:answer_phone_calls";
+    field public static final String OPSTR_BODY_SENSORS = "android:body_sensors";
+    field public static final String OPSTR_CALL_PHONE = "android:call_phone";
+    field public static final String OPSTR_CAMERA = "android:camera";
+    field public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
+    field public static final String OPSTR_FINE_LOCATION = "android:fine_location";
+    field public static final String OPSTR_GET_USAGE_STATS = "android:get_usage_stats";
+    field public static final String OPSTR_MOCK_LOCATION = "android:mock_location";
+    field public static final String OPSTR_MONITOR_HIGH_POWER_LOCATION = "android:monitor_location_high_power";
+    field public static final String OPSTR_MONITOR_LOCATION = "android:monitor_location";
+    field public static final String OPSTR_PICTURE_IN_PICTURE = "android:picture_in_picture";
+    field public static final String OPSTR_PROCESS_OUTGOING_CALLS = "android:process_outgoing_calls";
+    field public static final String OPSTR_READ_CALENDAR = "android:read_calendar";
+    field public static final String OPSTR_READ_CALL_LOG = "android:read_call_log";
+    field public static final String OPSTR_READ_CELL_BROADCASTS = "android:read_cell_broadcasts";
+    field public static final String OPSTR_READ_CONTACTS = "android:read_contacts";
+    field public static final String OPSTR_READ_EXTERNAL_STORAGE = "android:read_external_storage";
+    field public static final String OPSTR_READ_PHONE_NUMBERS = "android:read_phone_numbers";
+    field public static final String OPSTR_READ_PHONE_STATE = "android:read_phone_state";
+    field public static final String OPSTR_READ_SMS = "android:read_sms";
+    field public static final String OPSTR_RECEIVE_MMS = "android:receive_mms";
+    field public static final String OPSTR_RECEIVE_SMS = "android:receive_sms";
+    field public static final String OPSTR_RECEIVE_WAP_PUSH = "android:receive_wap_push";
+    field public static final String OPSTR_RECORD_AUDIO = "android:record_audio";
+    field public static final String OPSTR_SEND_SMS = "android:send_sms";
+    field public static final String OPSTR_SYSTEM_ALERT_WINDOW = "android:system_alert_window";
+    field public static final String OPSTR_USE_FINGERPRINT = "android:use_fingerprint";
+    field public static final String OPSTR_USE_SIP = "android:use_sip";
+    field public static final String OPSTR_WRITE_CALENDAR = "android:write_calendar";
+    field public static final String OPSTR_WRITE_CALL_LOG = "android:write_call_log";
+    field public static final String OPSTR_WRITE_CONTACTS = "android:write_contacts";
+    field public static final String OPSTR_WRITE_EXTERNAL_STORAGE = "android:write_external_storage";
+    field public static final String OPSTR_WRITE_SETTINGS = "android:write_settings";
+    field public static final int WATCH_FOREGROUND_CHANGES = 1; // 0x1
+  }
+
+  public static interface AppOpsManager.OnOpActiveChangedListener {
+    method public void onOpActiveChanged(@NonNull String, int, @NonNull String, boolean);
+  }
+
+  public static interface AppOpsManager.OnOpChangedListener {
+    method public void onOpChanged(String, String);
+  }
+
+  public abstract static class AppOpsManager.OnOpNotedCallback {
+    ctor public AppOpsManager.OnOpNotedCallback();
+    method public abstract void onAsyncNoted(@NonNull android.app.AsyncNotedAppOp);
+    method public abstract void onNoted(@NonNull android.app.SyncNotedAppOp);
+    method public abstract void onSelfNoted(@NonNull android.app.SyncNotedAppOp);
+  }
+
+  public class Application extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
+    ctor public Application();
+    method public static String getProcessName();
+    method @CallSuper public void onConfigurationChanged(@NonNull android.content.res.Configuration);
+    method @CallSuper public void onCreate();
+    method @CallSuper public void onLowMemory();
+    method @CallSuper public void onTerminate();
+    method @CallSuper public void onTrimMemory(int);
+    method public void registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+    method public void registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener);
+    method public void unregisterActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks);
+    method public void unregisterOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener);
+  }
+
+  public static interface Application.ActivityLifecycleCallbacks {
+    method public void onActivityCreated(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public void onActivityDestroyed(@NonNull android.app.Activity);
+    method public void onActivityPaused(@NonNull android.app.Activity);
+    method public default void onActivityPostCreated(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public default void onActivityPostDestroyed(@NonNull android.app.Activity);
+    method public default void onActivityPostPaused(@NonNull android.app.Activity);
+    method public default void onActivityPostResumed(@NonNull android.app.Activity);
+    method public default void onActivityPostSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public default void onActivityPostStarted(@NonNull android.app.Activity);
+    method public default void onActivityPostStopped(@NonNull android.app.Activity);
+    method public default void onActivityPreCreated(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public default void onActivityPreDestroyed(@NonNull android.app.Activity);
+    method public default void onActivityPrePaused(@NonNull android.app.Activity);
+    method public default void onActivityPreResumed(@NonNull android.app.Activity);
+    method public default void onActivityPreSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public default void onActivityPreStarted(@NonNull android.app.Activity);
+    method public default void onActivityPreStopped(@NonNull android.app.Activity);
+    method public void onActivityResumed(@NonNull android.app.Activity);
+    method public void onActivitySaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public void onActivityStarted(@NonNull android.app.Activity);
+    method public void onActivityStopped(@NonNull android.app.Activity);
+  }
+
+  public static interface Application.OnProvideAssistDataListener {
+    method public void onProvideAssistData(android.app.Activity, android.os.Bundle);
+  }
+
+  public class ApplicationErrorReport implements android.os.Parcelable {
+    ctor public ApplicationErrorReport();
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public static android.content.ComponentName getErrorReportReceiver(android.content.Context, String, int);
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ApplicationErrorReport> CREATOR;
+    field public static final int TYPE_ANR = 2; // 0x2
+    field public static final int TYPE_BATTERY = 3; // 0x3
+    field public static final int TYPE_CRASH = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+    field public static final int TYPE_RUNNING_SERVICE = 5; // 0x5
+    field public android.app.ApplicationErrorReport.AnrInfo anrInfo;
+    field public android.app.ApplicationErrorReport.BatteryInfo batteryInfo;
+    field public android.app.ApplicationErrorReport.CrashInfo crashInfo;
+    field public String installerPackageName;
+    field public String packageName;
+    field public String processName;
+    field public android.app.ApplicationErrorReport.RunningServiceInfo runningServiceInfo;
+    field public boolean systemApp;
+    field public long time;
+    field public int type;
+  }
+
+  public static class ApplicationErrorReport.AnrInfo {
+    ctor public ApplicationErrorReport.AnrInfo();
+    ctor public ApplicationErrorReport.AnrInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String activity;
+    field public String cause;
+    field public String info;
+  }
+
+  public static class ApplicationErrorReport.BatteryInfo {
+    ctor public ApplicationErrorReport.BatteryInfo();
+    ctor public ApplicationErrorReport.BatteryInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String checkinDetails;
+    field public long durationMicros;
+    field public String usageDetails;
+    field public int usagePercent;
+  }
+
+  public static class ApplicationErrorReport.CrashInfo {
+    ctor public ApplicationErrorReport.CrashInfo();
+    ctor public ApplicationErrorReport.CrashInfo(Throwable);
+    ctor public ApplicationErrorReport.CrashInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String exceptionClassName;
+    field public String exceptionMessage;
+    field public String stackTrace;
+    field public String throwClassName;
+    field public String throwFileName;
+    field public int throwLineNumber;
+    field public String throwMethodName;
+  }
+
+  public static class ApplicationErrorReport.RunningServiceInfo {
+    ctor public ApplicationErrorReport.RunningServiceInfo();
+    ctor public ApplicationErrorReport.RunningServiceInfo(android.os.Parcel);
+    method public void dump(android.util.Printer, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public long durationMillis;
+    field public String serviceDetails;
+  }
+
+  public final class ApplicationExitInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDefiningUid();
+    method @Nullable public String getDescription();
+    method public int getImportance();
+    method public int getPackageUid();
+    method public int getPid();
+    method @NonNull public String getProcessName();
+    method @Nullable public byte[] getProcessStateSummary();
+    method public long getPss();
+    method public int getRealUid();
+    method public int getReason();
+    method public long getRss();
+    method public int getStatus();
+    method public long getTimestamp();
+    method @Nullable public java.io.InputStream getTraceInputStream() throws java.io.IOException;
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ApplicationExitInfo> CREATOR;
+    field public static final int REASON_ANR = 6; // 0x6
+    field public static final int REASON_CRASH = 4; // 0x4
+    field public static final int REASON_CRASH_NATIVE = 5; // 0x5
+    field public static final int REASON_DEPENDENCY_DIED = 12; // 0xc
+    field public static final int REASON_EXCESSIVE_RESOURCE_USAGE = 9; // 0x9
+    field public static final int REASON_EXIT_SELF = 1; // 0x1
+    field public static final int REASON_INITIALIZATION_FAILURE = 7; // 0x7
+    field public static final int REASON_LOW_MEMORY = 3; // 0x3
+    field public static final int REASON_OTHER = 13; // 0xd
+    field public static final int REASON_PERMISSION_CHANGE = 8; // 0x8
+    field public static final int REASON_SIGNALED = 2; // 0x2
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+    field public static final int REASON_USER_REQUESTED = 10; // 0xa
+    field public static final int REASON_USER_STOPPED = 11; // 0xb
+  }
+
+  public final class AsyncNotedAppOp implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @NonNull public String getMessage();
+    method @IntRange(from=0) public int getNotingUid();
+    method @NonNull public String getOp();
+    method public long getTime();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AsyncNotedAppOp> CREATOR;
+  }
+
+  public final class AuthenticationRequiredException extends java.lang.SecurityException implements android.os.Parcelable {
+    ctor public AuthenticationRequiredException(Throwable, android.app.PendingIntent);
+    method public int describeContents();
+    method public android.app.PendingIntent getUserAction();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AuthenticationRequiredException> CREATOR;
+  }
+
+  public final class AutomaticZenRule implements android.os.Parcelable {
+    ctor @Deprecated public AutomaticZenRule(String, android.content.ComponentName, android.net.Uri, int, boolean);
+    ctor public AutomaticZenRule(@NonNull String, @Nullable android.content.ComponentName, @Nullable android.content.ComponentName, @NonNull android.net.Uri, @Nullable android.service.notification.ZenPolicy, int, boolean);
+    ctor public AutomaticZenRule(android.os.Parcel);
+    method public int describeContents();
+    method public android.net.Uri getConditionId();
+    method @Nullable public android.content.ComponentName getConfigurationActivity();
+    method public long getCreationTime();
+    method public int getInterruptionFilter();
+    method public String getName();
+    method public android.content.ComponentName getOwner();
+    method public android.service.notification.ZenPolicy getZenPolicy();
+    method public boolean isEnabled();
+    method public void setConditionId(android.net.Uri);
+    method public void setConfigurationActivity(@Nullable android.content.ComponentName);
+    method public void setEnabled(boolean);
+    method public void setInterruptionFilter(int);
+    method public void setName(String);
+    method public void setZenPolicy(android.service.notification.ZenPolicy);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AutomaticZenRule> CREATOR;
+  }
+
+  public final class BackgroundServiceStartNotAllowedException extends android.app.ServiceStartNotAllowedException implements android.os.Parcelable {
+    ctor public BackgroundServiceStartNotAllowedException(@NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.BackgroundServiceStartNotAllowedException> CREATOR;
+  }
+
+  public class DatePickerDialog extends android.app.AlertDialog implements android.widget.DatePicker.OnDateChangedListener android.content.DialogInterface.OnClickListener {
+    ctor public DatePickerDialog(@NonNull android.content.Context);
+    ctor public DatePickerDialog(@NonNull android.content.Context, @StyleRes int);
+    ctor public DatePickerDialog(@NonNull android.content.Context, @Nullable android.app.DatePickerDialog.OnDateSetListener, int, int, int);
+    ctor public DatePickerDialog(@NonNull android.content.Context, @StyleRes int, @Nullable android.app.DatePickerDialog.OnDateSetListener, int, int, int);
+    method @NonNull public android.widget.DatePicker getDatePicker();
+    method public void onClick(@NonNull android.content.DialogInterface, int);
+    method public void onDateChanged(@NonNull android.widget.DatePicker, int, int, int);
+    method public void setOnDateSetListener(@Nullable android.app.DatePickerDialog.OnDateSetListener);
+    method public void updateDate(int, int, int);
+  }
+
+  public static interface DatePickerDialog.OnDateSetListener {
+    method public void onDateSet(android.widget.DatePicker, int, int, int);
+  }
+
+  public class Dialog implements android.content.DialogInterface android.view.KeyEvent.Callback android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    ctor public Dialog(@NonNull @UiContext android.content.Context);
+    ctor public Dialog(@NonNull @UiContext android.content.Context, @StyleRes int);
+    ctor protected Dialog(@NonNull @UiContext android.content.Context, boolean, @Nullable android.content.DialogInterface.OnCancelListener);
+    method public void addContentView(@NonNull android.view.View, @Nullable android.view.ViewGroup.LayoutParams);
+    method public void cancel();
+    method public void closeOptionsMenu();
+    method public void create();
+    method public void dismiss();
+    method public boolean dispatchGenericMotionEvent(@NonNull android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(@NonNull android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(@NonNull android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(@NonNull android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(@NonNull android.view.MotionEvent);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method @Nullable public android.app.ActionBar getActionBar();
+    method @NonNull @UiContext public final android.content.Context getContext();
+    method @Nullable public android.view.View getCurrentFocus();
+    method @NonNull public android.view.LayoutInflater getLayoutInflater();
+    method @Nullable public final android.app.Activity getOwnerActivity();
+    method @Nullable public final android.view.SearchEvent getSearchEvent();
+    method public final int getVolumeControlStream();
+    method @Nullable public android.view.Window getWindow();
+    method public void hide();
+    method public void invalidateOptionsMenu();
+    method public boolean isShowing();
+    method @CallSuper public void onActionModeFinished(android.view.ActionMode);
+    method @CallSuper public void onActionModeStarted(android.view.ActionMode);
+    method public void onAttachedToWindow();
+    method public void onBackPressed();
+    method public void onContentChanged();
+    method public boolean onContextItemSelected(@NonNull android.view.MenuItem);
+    method public void onContextMenuClosed(@NonNull android.view.Menu);
+    method protected void onCreate(android.os.Bundle);
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+    method public boolean onCreateOptionsMenu(@NonNull android.view.Menu);
+    method public boolean onCreatePanelMenu(int, @NonNull android.view.Menu);
+    method public android.view.View onCreatePanelView(int);
+    method public void onDetachedFromWindow();
+    method public boolean onGenericMotionEvent(@NonNull android.view.MotionEvent);
+    method public boolean onKeyDown(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyShortcut(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyUp(int, @NonNull android.view.KeyEvent);
+    method public boolean onMenuItemSelected(int, @NonNull android.view.MenuItem);
+    method public boolean onMenuOpened(int, @NonNull android.view.Menu);
+    method public boolean onOptionsItemSelected(@NonNull android.view.MenuItem);
+    method public void onOptionsMenuClosed(@NonNull android.view.Menu);
+    method public void onPanelClosed(int, @NonNull android.view.Menu);
+    method public boolean onPrepareOptionsMenu(@NonNull android.view.Menu);
+    method public boolean onPreparePanel(int, @Nullable android.view.View, @NonNull android.view.Menu);
+    method public void onRestoreInstanceState(@NonNull android.os.Bundle);
+    method @NonNull public android.os.Bundle onSaveInstanceState();
+    method public boolean onSearchRequested(@NonNull android.view.SearchEvent);
+    method public boolean onSearchRequested();
+    method protected void onStart();
+    method protected void onStop();
+    method public boolean onTouchEvent(@NonNull android.view.MotionEvent);
+    method public boolean onTrackballEvent(@NonNull android.view.MotionEvent);
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+    method public void openContextMenu(@NonNull android.view.View);
+    method public void openOptionsMenu();
+    method public void registerForContextMenu(@NonNull android.view.View);
+    method public final boolean requestWindowFeature(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public void setCancelMessage(@Nullable android.os.Message);
+    method public void setCancelable(boolean);
+    method public void setCanceledOnTouchOutside(boolean);
+    method public void setContentView(@LayoutRes int);
+    method public void setContentView(@NonNull android.view.View);
+    method public void setContentView(@NonNull android.view.View, @Nullable android.view.ViewGroup.LayoutParams);
+    method public void setDismissMessage(@Nullable android.os.Message);
+    method public final void setFeatureDrawable(int, @Nullable android.graphics.drawable.Drawable);
+    method public final void setFeatureDrawableAlpha(int, int);
+    method public final void setFeatureDrawableResource(int, @DrawableRes int);
+    method public final void setFeatureDrawableUri(int, @Nullable android.net.Uri);
+    method public void setOnCancelListener(@Nullable android.content.DialogInterface.OnCancelListener);
+    method public void setOnDismissListener(@Nullable android.content.DialogInterface.OnDismissListener);
+    method public void setOnKeyListener(@Nullable android.content.DialogInterface.OnKeyListener);
+    method public void setOnShowListener(@Nullable android.content.DialogInterface.OnShowListener);
+    method public final void setOwnerActivity(@NonNull android.app.Activity);
+    method public void setTitle(@Nullable CharSequence);
+    method public void setTitle(@StringRes int);
+    method public final void setVolumeControlStream(int);
+    method public void show();
+    method public void takeKeyEvents(boolean);
+    method public void unregisterForContextMenu(@NonNull android.view.View);
+  }
+
+  @Deprecated public class DialogFragment extends android.app.Fragment implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    ctor @Deprecated public DialogFragment();
+    method @Deprecated public void dismiss();
+    method @Deprecated public void dismissAllowingStateLoss();
+    method @Deprecated public android.app.Dialog getDialog();
+    method @Deprecated public boolean getShowsDialog();
+    method @Deprecated public int getTheme();
+    method @Deprecated public boolean isCancelable();
+    method @Deprecated public void onCancel(android.content.DialogInterface);
+    method @Deprecated public android.app.Dialog onCreateDialog(android.os.Bundle);
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+    method @Deprecated public void setCancelable(boolean);
+    method @Deprecated public void setShowsDialog(boolean);
+    method @Deprecated public void setStyle(int, int);
+    method @Deprecated public void show(android.app.FragmentManager, String);
+    method @Deprecated public int show(android.app.FragmentTransaction, String);
+    field @Deprecated public static final int STYLE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int STYLE_NO_FRAME = 2; // 0x2
+    field @Deprecated public static final int STYLE_NO_INPUT = 3; // 0x3
+    field @Deprecated public static final int STYLE_NO_TITLE = 1; // 0x1
+  }
+
+  public final class DirectAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method @Nullable public android.content.LocusId getLocusId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.DirectAction> CREATOR;
+  }
+
+  public static final class DirectAction.Builder {
+    ctor public DirectAction.Builder(@NonNull String);
+    method @NonNull public android.app.DirectAction build();
+    method @NonNull public android.app.DirectAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.DirectAction.Builder setLocusId(@Nullable android.content.LocusId);
+  }
+
+  public class DownloadManager {
+    method @Deprecated public long addCompletedDownload(String, String, boolean, String, String, long, boolean);
+    method @Deprecated public long addCompletedDownload(String, String, boolean, String, String, long, boolean, android.net.Uri, android.net.Uri);
+    method public long enqueue(android.app.DownloadManager.Request);
+    method public static Long getMaxBytesOverMobile(android.content.Context);
+    method public String getMimeTypeForDownloadedFile(long);
+    method public static Long getRecommendedMaxBytesOverMobile(android.content.Context);
+    method public android.net.Uri getUriForDownloadedFile(long);
+    method public android.os.ParcelFileDescriptor openDownloadedFile(long) throws java.io.FileNotFoundException;
+    method public android.database.Cursor query(android.app.DownloadManager.Query);
+    method public int remove(long...);
+    field public static final String ACTION_DOWNLOAD_COMPLETE = "android.intent.action.DOWNLOAD_COMPLETE";
+    field public static final String ACTION_NOTIFICATION_CLICKED = "android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED";
+    field public static final String ACTION_VIEW_DOWNLOADS = "android.intent.action.VIEW_DOWNLOADS";
+    field public static final String COLUMN_BYTES_DOWNLOADED_SO_FAR = "bytes_so_far";
+    field public static final String COLUMN_DESCRIPTION = "description";
+    field public static final String COLUMN_ID = "_id";
+    field public static final String COLUMN_LAST_MODIFIED_TIMESTAMP = "last_modified_timestamp";
+    field @Deprecated public static final String COLUMN_LOCAL_FILENAME = "local_filename";
+    field public static final String COLUMN_LOCAL_URI = "local_uri";
+    field public static final String COLUMN_MEDIAPROVIDER_URI = "mediaprovider_uri";
+    field public static final String COLUMN_MEDIA_TYPE = "media_type";
+    field public static final String COLUMN_REASON = "reason";
+    field public static final String COLUMN_STATUS = "status";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_TOTAL_SIZE_BYTES = "total_size";
+    field public static final String COLUMN_URI = "uri";
+    field public static final int ERROR_CANNOT_RESUME = 1008; // 0x3f0
+    field public static final int ERROR_DEVICE_NOT_FOUND = 1007; // 0x3ef
+    field public static final int ERROR_FILE_ALREADY_EXISTS = 1009; // 0x3f1
+    field public static final int ERROR_FILE_ERROR = 1001; // 0x3e9
+    field public static final int ERROR_HTTP_DATA_ERROR = 1004; // 0x3ec
+    field public static final int ERROR_INSUFFICIENT_SPACE = 1006; // 0x3ee
+    field public static final int ERROR_TOO_MANY_REDIRECTS = 1005; // 0x3ed
+    field public static final int ERROR_UNHANDLED_HTTP_CODE = 1002; // 0x3ea
+    field public static final int ERROR_UNKNOWN = 1000; // 0x3e8
+    field public static final String EXTRA_DOWNLOAD_ID = "extra_download_id";
+    field public static final String EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS = "extra_click_download_ids";
+    field public static final String INTENT_EXTRAS_SORT_BY_SIZE = "android.app.DownloadManager.extra_sortBySize";
+    field public static final int PAUSED_QUEUED_FOR_WIFI = 3; // 0x3
+    field public static final int PAUSED_UNKNOWN = 4; // 0x4
+    field public static final int PAUSED_WAITING_FOR_NETWORK = 2; // 0x2
+    field public static final int PAUSED_WAITING_TO_RETRY = 1; // 0x1
+    field public static final int STATUS_FAILED = 16; // 0x10
+    field public static final int STATUS_PAUSED = 4; // 0x4
+    field public static final int STATUS_PENDING = 1; // 0x1
+    field public static final int STATUS_RUNNING = 2; // 0x2
+    field public static final int STATUS_SUCCESSFUL = 8; // 0x8
+  }
+
+  public static class DownloadManager.Query {
+    ctor public DownloadManager.Query();
+    method public android.app.DownloadManager.Query setFilterById(long...);
+    method public android.app.DownloadManager.Query setFilterByStatus(int);
+  }
+
+  public static class DownloadManager.Request {
+    ctor public DownloadManager.Request(android.net.Uri);
+    method public android.app.DownloadManager.Request addRequestHeader(String, String);
+    method @Deprecated public void allowScanningByMediaScanner();
+    method public android.app.DownloadManager.Request setAllowedNetworkTypes(int);
+    method public android.app.DownloadManager.Request setAllowedOverMetered(boolean);
+    method public android.app.DownloadManager.Request setAllowedOverRoaming(boolean);
+    method public android.app.DownloadManager.Request setDescription(CharSequence);
+    method public android.app.DownloadManager.Request setDestinationInExternalFilesDir(android.content.Context, String, String);
+    method public android.app.DownloadManager.Request setDestinationInExternalPublicDir(String, String);
+    method public android.app.DownloadManager.Request setDestinationUri(android.net.Uri);
+    method public android.app.DownloadManager.Request setMimeType(String);
+    method public android.app.DownloadManager.Request setNotificationVisibility(int);
+    method public android.app.DownloadManager.Request setRequiresCharging(boolean);
+    method public android.app.DownloadManager.Request setRequiresDeviceIdle(boolean);
+    method @Deprecated public android.app.DownloadManager.Request setShowRunningNotification(boolean);
+    method public android.app.DownloadManager.Request setTitle(CharSequence);
+    method @Deprecated public android.app.DownloadManager.Request setVisibleInDownloadsUi(boolean);
+    field public static final int NETWORK_MOBILE = 1; // 0x1
+    field public static final int NETWORK_WIFI = 2; // 0x2
+    field public static final int VISIBILITY_HIDDEN = 2; // 0x2
+    field public static final int VISIBILITY_VISIBLE = 0; // 0x0
+    field public static final int VISIBILITY_VISIBLE_NOTIFY_COMPLETED = 1; // 0x1
+    field public static final int VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION = 3; // 0x3
+  }
+
+  @Deprecated public class ExpandableListActivity extends android.app.Activity implements android.widget.ExpandableListView.OnChildClickListener android.widget.ExpandableListView.OnGroupCollapseListener android.widget.ExpandableListView.OnGroupExpandListener android.view.View.OnCreateContextMenuListener {
+    ctor @Deprecated public ExpandableListActivity();
+    method @Deprecated public android.widget.ExpandableListAdapter getExpandableListAdapter();
+    method @Deprecated public android.widget.ExpandableListView getExpandableListView();
+    method @Deprecated public long getSelectedId();
+    method @Deprecated public long getSelectedPosition();
+    method @Deprecated public boolean onChildClick(android.widget.ExpandableListView, android.view.View, int, int, long);
+    method @Deprecated public void onGroupCollapse(int);
+    method @Deprecated public void onGroupExpand(int);
+    method @Deprecated public void setListAdapter(android.widget.ExpandableListAdapter);
+    method @Deprecated public boolean setSelectedChild(int, int, boolean);
+    method @Deprecated public void setSelectedGroup(int);
+  }
+
+  public final class ForegroundServiceStartNotAllowedException extends android.app.ServiceStartNotAllowedException implements android.os.Parcelable {
+    ctor public ForegroundServiceStartNotAllowedException(@NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.ForegroundServiceStartNotAllowedException> CREATOR;
+  }
+
+  @Deprecated public class Fragment implements android.content.ComponentCallbacks2 android.view.View.OnCreateContextMenuListener {
+    ctor @Deprecated public Fragment();
+    method @Deprecated public void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public final boolean equals(@Nullable Object);
+    method @Deprecated public final android.app.Activity getActivity();
+    method @Deprecated public boolean getAllowEnterTransitionOverlap();
+    method @Deprecated public boolean getAllowReturnTransitionOverlap();
+    method @Deprecated public final android.os.Bundle getArguments();
+    method @Deprecated public final android.app.FragmentManager getChildFragmentManager();
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated public android.transition.Transition getEnterTransition();
+    method @Deprecated public android.transition.Transition getExitTransition();
+    method @Deprecated public final android.app.FragmentManager getFragmentManager();
+    method @Deprecated @Nullable public final Object getHost();
+    method @Deprecated public final int getId();
+    method @Deprecated public final android.view.LayoutInflater getLayoutInflater();
+    method @Deprecated public android.app.LoaderManager getLoaderManager();
+    method @Deprecated public final android.app.Fragment getParentFragment();
+    method @Deprecated public android.transition.Transition getReenterTransition();
+    method @Deprecated public final android.content.res.Resources getResources();
+    method @Deprecated public final boolean getRetainInstance();
+    method @Deprecated public android.transition.Transition getReturnTransition();
+    method @Deprecated public android.transition.Transition getSharedElementEnterTransition();
+    method @Deprecated public android.transition.Transition getSharedElementReturnTransition();
+    method @Deprecated public final String getString(@StringRes int);
+    method @Deprecated public final String getString(@StringRes int, java.lang.Object...);
+    method @Deprecated public final String getTag();
+    method @Deprecated public final android.app.Fragment getTargetFragment();
+    method @Deprecated public final int getTargetRequestCode();
+    method @Deprecated public final CharSequence getText(@StringRes int);
+    method @Deprecated public boolean getUserVisibleHint();
+    method @Deprecated @Nullable public android.view.View getView();
+    method @Deprecated public final int hashCode();
+    method @Deprecated public static android.app.Fragment instantiate(android.content.Context, String);
+    method @Deprecated public static android.app.Fragment instantiate(android.content.Context, String, @Nullable android.os.Bundle);
+    method @Deprecated public final boolean isAdded();
+    method @Deprecated public final boolean isDetached();
+    method @Deprecated public final boolean isHidden();
+    method @Deprecated public final boolean isInLayout();
+    method @Deprecated public final boolean isRemoving();
+    method @Deprecated public final boolean isResumed();
+    method @Deprecated public final boolean isStateSaved();
+    method @Deprecated public final boolean isVisible();
+    method @Deprecated @CallSuper public void onActivityCreated(@Nullable android.os.Bundle);
+    method @Deprecated public void onActivityResult(int, int, android.content.Intent);
+    method @Deprecated @CallSuper public void onAttach(android.content.Context);
+    method @Deprecated @CallSuper public void onAttach(android.app.Activity);
+    method @Deprecated public void onAttachFragment(android.app.Fragment);
+    method @Deprecated @CallSuper public void onConfigurationChanged(android.content.res.Configuration);
+    method @Deprecated public boolean onContextItemSelected(android.view.MenuItem);
+    method @Deprecated @CallSuper public void onCreate(@Nullable android.os.Bundle);
+    method @Deprecated public android.animation.Animator onCreateAnimator(int, boolean, int);
+    method @Deprecated public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+    method @Deprecated public void onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method @Deprecated @Nullable public android.view.View onCreateView(android.view.LayoutInflater, @Nullable android.view.ViewGroup, android.os.Bundle);
+    method @Deprecated @CallSuper public void onDestroy();
+    method @Deprecated public void onDestroyOptionsMenu();
+    method @Deprecated @CallSuper public void onDestroyView();
+    method @Deprecated @CallSuper public void onDetach();
+    method @Deprecated public android.view.LayoutInflater onGetLayoutInflater(android.os.Bundle);
+    method @Deprecated public void onHiddenChanged(boolean);
+    method @Deprecated @CallSuper public void onInflate(android.util.AttributeSet, android.os.Bundle);
+    method @Deprecated @CallSuper public void onInflate(android.content.Context, android.util.AttributeSet, android.os.Bundle);
+    method @Deprecated @CallSuper public void onInflate(android.app.Activity, android.util.AttributeSet, android.os.Bundle);
+    method @Deprecated @CallSuper public void onLowMemory();
+    method @Deprecated public void onMultiWindowModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onMultiWindowModeChanged(boolean);
+    method @Deprecated public boolean onOptionsItemSelected(android.view.MenuItem);
+    method @Deprecated public void onOptionsMenuClosed(android.view.Menu);
+    method @Deprecated @CallSuper public void onPause();
+    method @Deprecated public void onPictureInPictureModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public void onPictureInPictureModeChanged(boolean);
+    method @Deprecated public void onPrepareOptionsMenu(android.view.Menu);
+    method @Deprecated public void onRequestPermissionsResult(int, @NonNull String[], @NonNull int[]);
+    method @Deprecated @CallSuper public void onResume();
+    method @Deprecated public void onSaveInstanceState(android.os.Bundle);
+    method @Deprecated @CallSuper public void onStart();
+    method @Deprecated @CallSuper public void onStop();
+    method @Deprecated @CallSuper public void onTrimMemory(int);
+    method @Deprecated public void onViewCreated(android.view.View, @Nullable android.os.Bundle);
+    method @Deprecated @CallSuper public void onViewStateRestored(android.os.Bundle);
+    method @Deprecated public void postponeEnterTransition();
+    method @Deprecated public void registerForContextMenu(android.view.View);
+    method @Deprecated public final void requestPermissions(@NonNull String[], int);
+    method @Deprecated public void setAllowEnterTransitionOverlap(boolean);
+    method @Deprecated public void setAllowReturnTransitionOverlap(boolean);
+    method @Deprecated public void setArguments(android.os.Bundle);
+    method @Deprecated public void setEnterSharedElementCallback(android.app.SharedElementCallback);
+    method @Deprecated public void setEnterTransition(android.transition.Transition);
+    method @Deprecated public void setExitSharedElementCallback(android.app.SharedElementCallback);
+    method @Deprecated public void setExitTransition(android.transition.Transition);
+    method @Deprecated public void setHasOptionsMenu(boolean);
+    method @Deprecated public void setInitialSavedState(android.app.Fragment.SavedState);
+    method @Deprecated public void setMenuVisibility(boolean);
+    method @Deprecated public void setReenterTransition(android.transition.Transition);
+    method @Deprecated public void setRetainInstance(boolean);
+    method @Deprecated public void setReturnTransition(android.transition.Transition);
+    method @Deprecated public void setSharedElementEnterTransition(android.transition.Transition);
+    method @Deprecated public void setSharedElementReturnTransition(android.transition.Transition);
+    method @Deprecated public void setTargetFragment(android.app.Fragment, int);
+    method @Deprecated public void setUserVisibleHint(boolean);
+    method @Deprecated public boolean shouldShowRequestPermissionRationale(@NonNull String);
+    method @Deprecated public void startActivity(android.content.Intent);
+    method @Deprecated public void startActivity(android.content.Intent, android.os.Bundle);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int);
+    method @Deprecated public void startActivityForResult(android.content.Intent, int, android.os.Bundle);
+    method @Deprecated public void startIntentSenderForResult(android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public void startPostponedEnterTransition();
+    method @Deprecated public void unregisterForContextMenu(android.view.View);
+  }
+
+  @Deprecated public static class Fragment.InstantiationException extends android.util.AndroidRuntimeException {
+    ctor @Deprecated public Fragment.InstantiationException(String, Exception);
+  }
+
+  @Deprecated public static class Fragment.SavedState implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final android.os.Parcelable.ClassLoaderCreator<android.app.Fragment.SavedState> CREATOR;
+  }
+
+  @Deprecated public class FragmentBreadCrumbs extends android.view.ViewGroup implements android.app.FragmentManager.OnBackStackChangedListener {
+    ctor @Deprecated public FragmentBreadCrumbs(android.content.Context);
+    ctor @Deprecated public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet, int);
+    method @Deprecated public void onBackStackChanged();
+    method @Deprecated public void setActivity(android.app.Activity);
+    method @Deprecated public void setMaxVisible(int);
+    method @Deprecated public void setOnBreadCrumbClickListener(android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener);
+    method @Deprecated public void setParentTitle(CharSequence, CharSequence, android.view.View.OnClickListener);
+    method @Deprecated public void setTitle(CharSequence, CharSequence);
+  }
+
+  @Deprecated public static interface FragmentBreadCrumbs.OnBreadCrumbClickListener {
+    method @Deprecated public boolean onBreadCrumbClick(android.app.FragmentManager.BackStackEntry, int);
+  }
+
+  @Deprecated public abstract class FragmentContainer {
+    ctor @Deprecated public FragmentContainer();
+    method @Deprecated @Nullable public abstract <T extends android.view.View> T onFindViewById(@IdRes int);
+    method @Deprecated public abstract boolean onHasView();
+  }
+
+  @Deprecated public class FragmentController {
+    method @Deprecated public void attachHost(android.app.Fragment);
+    method @Deprecated public static final android.app.FragmentController createController(android.app.FragmentHostCallback<?>);
+    method @Deprecated public void dispatchActivityCreated();
+    method @Deprecated public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method @Deprecated public boolean dispatchContextItemSelected(android.view.MenuItem);
+    method @Deprecated public void dispatchCreate();
+    method @Deprecated public boolean dispatchCreateOptionsMenu(android.view.Menu, android.view.MenuInflater);
+    method @Deprecated public void dispatchDestroy();
+    method @Deprecated public void dispatchDestroyView();
+    method @Deprecated public void dispatchLowMemory();
+    method @Deprecated public void dispatchMultiWindowModeChanged(boolean);
+    method @Deprecated public void dispatchMultiWindowModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public boolean dispatchOptionsItemSelected(android.view.MenuItem);
+    method @Deprecated public void dispatchOptionsMenuClosed(android.view.Menu);
+    method @Deprecated public void dispatchPause();
+    method @Deprecated public void dispatchPictureInPictureModeChanged(boolean);
+    method @Deprecated public void dispatchPictureInPictureModeChanged(boolean, android.content.res.Configuration);
+    method @Deprecated public boolean dispatchPrepareOptionsMenu(android.view.Menu);
+    method @Deprecated public void dispatchResume();
+    method @Deprecated public void dispatchStart();
+    method @Deprecated public void dispatchStop();
+    method @Deprecated public void dispatchTrimMemory(int);
+    method @Deprecated public void doLoaderDestroy();
+    method @Deprecated public void doLoaderStart();
+    method @Deprecated public void doLoaderStop(boolean);
+    method @Deprecated public void dumpLoaders(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public boolean execPendingActions();
+    method @Deprecated @Nullable public android.app.Fragment findFragmentByWho(String);
+    method @Deprecated public android.app.FragmentManager getFragmentManager();
+    method @Deprecated public android.app.LoaderManager getLoaderManager();
+    method @Deprecated public void noteStateNotSaved();
+    method @Deprecated public android.view.View onCreateView(android.view.View, String, android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void reportLoaderStart();
+    method @Deprecated public void restoreAllState(android.os.Parcelable, java.util.List<android.app.Fragment>);
+    method @Deprecated public void restoreAllState(android.os.Parcelable, android.app.FragmentManagerNonConfig);
+    method @Deprecated public void restoreLoaderNonConfig(android.util.ArrayMap<java.lang.String,android.app.LoaderManager>);
+    method @Deprecated public android.util.ArrayMap<java.lang.String,android.app.LoaderManager> retainLoaderNonConfig();
+    method @Deprecated public android.app.FragmentManagerNonConfig retainNestedNonConfig();
+    method @Deprecated public java.util.List<android.app.Fragment> retainNonConfig();
+    method @Deprecated public android.os.Parcelable saveAllState();
+  }
+
+  @Deprecated public abstract class FragmentHostCallback<E> extends android.app.FragmentContainer {
+    ctor @Deprecated public FragmentHostCallback(android.content.Context, android.os.Handler, int);
+    method @Deprecated public void onAttachFragment(android.app.Fragment);
+    method @Deprecated public void onDump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated @Nullable public <T extends android.view.View> T onFindViewById(int);
+    method @Deprecated @Nullable public abstract E onGetHost();
+    method @Deprecated public android.view.LayoutInflater onGetLayoutInflater();
+    method @Deprecated public int onGetWindowAnimations();
+    method @Deprecated public boolean onHasView();
+    method @Deprecated public boolean onHasWindowAnimations();
+    method @Deprecated public void onInvalidateOptionsMenu();
+    method @Deprecated public void onRequestPermissionsFromFragment(@NonNull android.app.Fragment, @NonNull String[], int);
+    method @Deprecated public boolean onShouldSaveFragmentState(android.app.Fragment);
+    method @Deprecated public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
+    method @Deprecated public void onStartIntentSenderFromFragment(android.app.Fragment, android.content.IntentSender, int, @Nullable android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Deprecated public boolean onUseFragmentManagerInflaterFactory();
+  }
+
+  @Deprecated public abstract class FragmentManager {
+    ctor @Deprecated public FragmentManager();
+    method @Deprecated public abstract void addOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener);
+    method @Deprecated public abstract android.app.FragmentTransaction beginTransaction();
+    method @Deprecated public abstract void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public static void enableDebugLogging(boolean);
+    method @Deprecated public abstract boolean executePendingTransactions();
+    method @Deprecated public abstract android.app.Fragment findFragmentById(int);
+    method @Deprecated public abstract android.app.Fragment findFragmentByTag(String);
+    method @Deprecated public abstract android.app.FragmentManager.BackStackEntry getBackStackEntryAt(int);
+    method @Deprecated public abstract int getBackStackEntryCount();
+    method @Deprecated public abstract android.app.Fragment getFragment(android.os.Bundle, String);
+    method @Deprecated public abstract java.util.List<android.app.Fragment> getFragments();
+    method @Deprecated public abstract android.app.Fragment getPrimaryNavigationFragment();
+    method @Deprecated public void invalidateOptionsMenu();
+    method @Deprecated public abstract boolean isDestroyed();
+    method @Deprecated public abstract boolean isStateSaved();
+    method @Deprecated public abstract void popBackStack();
+    method @Deprecated public abstract void popBackStack(String, int);
+    method @Deprecated public abstract void popBackStack(int, int);
+    method @Deprecated public abstract boolean popBackStackImmediate();
+    method @Deprecated public abstract boolean popBackStackImmediate(String, int);
+    method @Deprecated public abstract boolean popBackStackImmediate(int, int);
+    method @Deprecated public abstract void putFragment(android.os.Bundle, String, android.app.Fragment);
+    method @Deprecated public abstract void registerFragmentLifecycleCallbacks(android.app.FragmentManager.FragmentLifecycleCallbacks, boolean);
+    method @Deprecated public abstract void removeOnBackStackChangedListener(android.app.FragmentManager.OnBackStackChangedListener);
+    method @Deprecated public abstract android.app.Fragment.SavedState saveFragmentInstanceState(android.app.Fragment);
+    method @Deprecated public abstract void unregisterFragmentLifecycleCallbacks(android.app.FragmentManager.FragmentLifecycleCallbacks);
+    field @Deprecated public static final int POP_BACK_STACK_INCLUSIVE = 1; // 0x1
+  }
+
+  @Deprecated public static interface FragmentManager.BackStackEntry {
+    method @Deprecated public CharSequence getBreadCrumbShortTitle();
+    method @Deprecated public int getBreadCrumbShortTitleRes();
+    method @Deprecated public CharSequence getBreadCrumbTitle();
+    method @Deprecated public int getBreadCrumbTitleRes();
+    method @Deprecated public int getId();
+    method @Deprecated public String getName();
+  }
+
+  @Deprecated public abstract static class FragmentManager.FragmentLifecycleCallbacks {
+    ctor @Deprecated public FragmentManager.FragmentLifecycleCallbacks();
+    method @Deprecated public void onFragmentActivityCreated(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentAttached(android.app.FragmentManager, android.app.Fragment, android.content.Context);
+    method @Deprecated public void onFragmentCreated(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentDestroyed(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentDetached(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentPaused(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentPreAttached(android.app.FragmentManager, android.app.Fragment, android.content.Context);
+    method @Deprecated public void onFragmentPreCreated(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentResumed(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentSaveInstanceState(android.app.FragmentManager, android.app.Fragment, android.os.Bundle);
+    method @Deprecated public void onFragmentStarted(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentStopped(android.app.FragmentManager, android.app.Fragment);
+    method @Deprecated public void onFragmentViewCreated(android.app.FragmentManager, android.app.Fragment, android.view.View, android.os.Bundle);
+    method @Deprecated public void onFragmentViewDestroyed(android.app.FragmentManager, android.app.Fragment);
+  }
+
+  @Deprecated public static interface FragmentManager.OnBackStackChangedListener {
+    method @Deprecated public void onBackStackChanged();
+  }
+
+  @Deprecated public class FragmentManagerNonConfig {
+  }
+
+  @Deprecated public abstract class FragmentTransaction {
+    ctor @Deprecated public FragmentTransaction();
+    method @Deprecated public abstract android.app.FragmentTransaction add(android.app.Fragment, String);
+    method @Deprecated public abstract android.app.FragmentTransaction add(@IdRes int, android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction add(@IdRes int, android.app.Fragment, String);
+    method @Deprecated public abstract android.app.FragmentTransaction addSharedElement(android.view.View, String);
+    method @Deprecated public abstract android.app.FragmentTransaction addToBackStack(@Nullable String);
+    method @Deprecated public abstract android.app.FragmentTransaction attach(android.app.Fragment);
+    method @Deprecated public abstract int commit();
+    method @Deprecated public abstract int commitAllowingStateLoss();
+    method @Deprecated public abstract void commitNow();
+    method @Deprecated public abstract void commitNowAllowingStateLoss();
+    method @Deprecated public abstract android.app.FragmentTransaction detach(android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction disallowAddToBackStack();
+    method @Deprecated public abstract android.app.FragmentTransaction hide(android.app.Fragment);
+    method @Deprecated public abstract boolean isAddToBackStackAllowed();
+    method @Deprecated public abstract boolean isEmpty();
+    method @Deprecated public abstract android.app.FragmentTransaction remove(android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction replace(@IdRes int, android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction replace(@IdRes int, android.app.Fragment, String);
+    method @Deprecated public abstract android.app.FragmentTransaction runOnCommit(Runnable);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbShortTitle(@StringRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbShortTitle(CharSequence);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbTitle(@StringRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setBreadCrumbTitle(CharSequence);
+    method @Deprecated public abstract android.app.FragmentTransaction setCustomAnimations(@AnimatorRes int, @AnimatorRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setCustomAnimations(@AnimatorRes int, @AnimatorRes int, @AnimatorRes int, @AnimatorRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction setPrimaryNavigationFragment(android.app.Fragment);
+    method @Deprecated public abstract android.app.FragmentTransaction setReorderingAllowed(boolean);
+    method @Deprecated public abstract android.app.FragmentTransaction setTransition(int);
+    method @Deprecated public abstract android.app.FragmentTransaction setTransitionStyle(@StyleRes int);
+    method @Deprecated public abstract android.app.FragmentTransaction show(android.app.Fragment);
+    field @Deprecated public static final int TRANSIT_ENTER_MASK = 4096; // 0x1000
+    field @Deprecated public static final int TRANSIT_EXIT_MASK = 8192; // 0x2000
+    field @Deprecated public static final int TRANSIT_FRAGMENT_CLOSE = 8194; // 0x2002
+    field @Deprecated public static final int TRANSIT_FRAGMENT_FADE = 4099; // 0x1003
+    field @Deprecated public static final int TRANSIT_FRAGMENT_OPEN = 4097; // 0x1001
+    field @Deprecated public static final int TRANSIT_NONE = 0; // 0x0
+    field @Deprecated public static final int TRANSIT_UNSET = -1; // 0xffffffff
+  }
+
+  public final class GameManager {
+    method public int getGameMode();
+    field public static final int GAME_MODE_BATTERY = 3; // 0x3
+    field public static final int GAME_MODE_PERFORMANCE = 2; // 0x2
+    field public static final int GAME_MODE_STANDARD = 1; // 0x1
+    field public static final int GAME_MODE_UNSUPPORTED = 0; // 0x0
+  }
+
+  public class Instrumentation {
+    ctor public Instrumentation();
+    method public android.os.TestLooperManager acquireLooperManager(android.os.Looper);
+    method public void addMonitor(android.app.Instrumentation.ActivityMonitor);
+    method public android.app.Instrumentation.ActivityMonitor addMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean);
+    method public android.app.Instrumentation.ActivityMonitor addMonitor(String, android.app.Instrumentation.ActivityResult, boolean);
+    method public void addResults(android.os.Bundle);
+    method public void callActivityOnCreate(android.app.Activity, android.os.Bundle);
+    method public void callActivityOnCreate(android.app.Activity, android.os.Bundle, android.os.PersistableBundle);
+    method public void callActivityOnDestroy(android.app.Activity);
+    method public void callActivityOnNewIntent(android.app.Activity, android.content.Intent);
+    method public void callActivityOnPause(android.app.Activity);
+    method public void callActivityOnPictureInPictureRequested(@NonNull android.app.Activity);
+    method public void callActivityOnPostCreate(@NonNull android.app.Activity, @Nullable android.os.Bundle);
+    method public void callActivityOnPostCreate(@NonNull android.app.Activity, @Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method public void callActivityOnRestart(android.app.Activity);
+    method public void callActivityOnRestoreInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public void callActivityOnRestoreInstanceState(@NonNull android.app.Activity, @Nullable android.os.Bundle, @Nullable android.os.PersistableBundle);
+    method public void callActivityOnResume(android.app.Activity);
+    method public void callActivityOnSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle);
+    method public void callActivityOnSaveInstanceState(@NonNull android.app.Activity, @NonNull android.os.Bundle, @NonNull android.os.PersistableBundle);
+    method public void callActivityOnStart(android.app.Activity);
+    method public void callActivityOnStop(android.app.Activity);
+    method public void callActivityOnUserLeaving(android.app.Activity);
+    method public void callApplicationOnCreate(android.app.Application);
+    method public boolean checkMonitorHit(android.app.Instrumentation.ActivityMonitor, int);
+    method public void endPerformanceSnapshot();
+    method public void finish(int, android.os.Bundle);
+    method public android.os.Bundle getAllocCounts();
+    method public android.os.Bundle getBinderCounts();
+    method public android.content.ComponentName getComponentName();
+    method public android.content.Context getContext();
+    method public String getProcessName();
+    method public android.content.Context getTargetContext();
+    method public android.app.UiAutomation getUiAutomation();
+    method public android.app.UiAutomation getUiAutomation(int);
+    method public boolean invokeContextMenuAction(android.app.Activity, int, int);
+    method public boolean invokeMenuActionSync(android.app.Activity, int, int);
+    method public boolean isProfiling();
+    method public android.app.Activity newActivity(Class<?>, android.content.Context, android.os.IBinder, android.app.Application, android.content.Intent, android.content.pm.ActivityInfo, CharSequence, android.app.Activity, String, Object) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Activity newActivity(ClassLoader, String, android.content.Intent) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public android.app.Application newApplication(ClassLoader, String, android.content.Context) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static android.app.Application newApplication(Class<?>, android.content.Context) throws java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public void onCreate(android.os.Bundle);
+    method public void onDestroy();
+    method public boolean onException(Object, Throwable);
+    method public void onStart();
+    method public void removeMonitor(android.app.Instrumentation.ActivityMonitor);
+    method public void runOnMainSync(Runnable);
+    method public void sendCharacterSync(int);
+    method public void sendKeyDownUpSync(int);
+    method public void sendKeySync(android.view.KeyEvent);
+    method public void sendPointerSync(android.view.MotionEvent);
+    method public void sendStatus(int, android.os.Bundle);
+    method public void sendStringSync(String);
+    method public void sendTrackballEventSync(android.view.MotionEvent);
+    method public void setAutomaticPerformanceSnapshots();
+    method public void setInTouchMode(boolean);
+    method public void start();
+    method public android.app.Activity startActivitySync(android.content.Intent);
+    method @NonNull public android.app.Activity startActivitySync(@NonNull android.content.Intent, @Nullable android.os.Bundle);
+    method @Deprecated public void startAllocCounting();
+    method public void startPerformanceSnapshot();
+    method public void startProfiling();
+    method @Deprecated public void stopAllocCounting();
+    method public void stopProfiling();
+    method public void waitForIdle(Runnable);
+    method public void waitForIdleSync();
+    method public android.app.Activity waitForMonitor(android.app.Instrumentation.ActivityMonitor);
+    method public android.app.Activity waitForMonitorWithTimeout(android.app.Instrumentation.ActivityMonitor, long);
+    field public static final String REPORT_KEY_IDENTIFIER = "id";
+    field public static final String REPORT_KEY_STREAMRESULT = "stream";
+  }
+
+  public static class Instrumentation.ActivityMonitor {
+    ctor public Instrumentation.ActivityMonitor(android.content.IntentFilter, android.app.Instrumentation.ActivityResult, boolean);
+    ctor public Instrumentation.ActivityMonitor(String, android.app.Instrumentation.ActivityResult, boolean);
+    ctor public Instrumentation.ActivityMonitor();
+    method public final android.content.IntentFilter getFilter();
+    method public final int getHits();
+    method public final android.app.Activity getLastActivity();
+    method public final android.app.Instrumentation.ActivityResult getResult();
+    method public final boolean isBlocking();
+    method public android.app.Instrumentation.ActivityResult onStartActivity(android.content.Intent);
+    method public final android.app.Activity waitForActivity();
+    method public final android.app.Activity waitForActivityWithTimeout(long);
+  }
+
+  public static final class Instrumentation.ActivityResult {
+    ctor public Instrumentation.ActivityResult(int, android.content.Intent);
+    method public int getResultCode();
+    method public android.content.Intent getResultData();
+  }
+
+  @Deprecated public abstract class IntentService extends android.app.Service {
+    ctor @Deprecated public IntentService(String);
+    method @Deprecated @Nullable public android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated @WorkerThread protected abstract void onHandleIntent(@Nullable android.content.Intent);
+    method @Deprecated public void onStart(@Nullable android.content.Intent, int);
+    method @Deprecated public void setIntentRedelivery(boolean);
+  }
+
+  public class KeyguardManager {
+    method @Deprecated public android.content.Intent createConfirmDeviceCredentialIntent(CharSequence, CharSequence);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void exitKeyguardSecurely(android.app.KeyguardManager.OnKeyguardExitResult);
+    method @Deprecated public boolean inKeyguardRestrictedInputMode();
+    method public boolean isDeviceLocked();
+    method public boolean isDeviceSecure();
+    method public boolean isKeyguardLocked();
+    method public boolean isKeyguardSecure();
+    method @Deprecated public android.app.KeyguardManager.KeyguardLock newKeyguardLock(String);
+    method public void requestDismissKeyguard(@NonNull android.app.Activity, @Nullable android.app.KeyguardManager.KeyguardDismissCallback);
+  }
+
+  public abstract static class KeyguardManager.KeyguardDismissCallback {
+    ctor public KeyguardManager.KeyguardDismissCallback();
+    method public void onDismissCancelled();
+    method public void onDismissError();
+    method public void onDismissSucceeded();
+  }
+
+  @Deprecated public class KeyguardManager.KeyguardLock {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void disableKeyguard();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DISABLE_KEYGUARD) public void reenableKeyguard();
+  }
+
+  @Deprecated public static interface KeyguardManager.OnKeyguardExitResult {
+    method @Deprecated public void onKeyguardExitResult(boolean);
+  }
+
+  @Deprecated public abstract class LauncherActivity extends android.app.ListActivity {
+    ctor @Deprecated public LauncherActivity();
+    method @Deprecated protected android.content.Intent getTargetIntent();
+    method @Deprecated protected android.content.Intent intentForPosition(int);
+    method @Deprecated protected android.app.LauncherActivity.ListItem itemForPosition(int);
+    method @Deprecated public java.util.List<android.app.LauncherActivity.ListItem> makeListItems();
+    method @Deprecated protected java.util.List<android.content.pm.ResolveInfo> onQueryPackageManager(android.content.Intent);
+    method @Deprecated protected void onSetContentView();
+  }
+
+  @Deprecated public class LauncherActivity.IconResizer {
+    ctor @Deprecated public LauncherActivity.IconResizer();
+    method @Deprecated public android.graphics.drawable.Drawable createIconThumbnail(android.graphics.drawable.Drawable);
+  }
+
+  @Deprecated public static class LauncherActivity.ListItem {
+    ctor @Deprecated public LauncherActivity.ListItem();
+    field @Deprecated public String className;
+    field @Deprecated public android.os.Bundle extras;
+    field @Deprecated public android.graphics.drawable.Drawable icon;
+    field @Deprecated public CharSequence label;
+    field @Deprecated public String packageName;
+    field @Deprecated public android.content.pm.ResolveInfo resolveInfo;
+  }
+
+  @Deprecated public class ListActivity extends android.app.Activity {
+    ctor @Deprecated public ListActivity();
+    method @Deprecated public android.widget.ListAdapter getListAdapter();
+    method @Deprecated public android.widget.ListView getListView();
+    method @Deprecated public long getSelectedItemId();
+    method @Deprecated public int getSelectedItemPosition();
+    method @Deprecated protected void onListItemClick(android.widget.ListView, android.view.View, int, long);
+    method @Deprecated public void setListAdapter(android.widget.ListAdapter);
+    method @Deprecated public void setSelection(int);
+  }
+
+  @Deprecated public class ListFragment extends android.app.Fragment {
+    ctor @Deprecated public ListFragment();
+    method @Deprecated public android.widget.ListAdapter getListAdapter();
+    method @Deprecated public android.widget.ListView getListView();
+    method @Deprecated public long getSelectedItemId();
+    method @Deprecated public int getSelectedItemPosition();
+    method @Deprecated public void onListItemClick(android.widget.ListView, android.view.View, int, long);
+    method @Deprecated public void setEmptyText(CharSequence);
+    method @Deprecated public void setListAdapter(android.widget.ListAdapter);
+    method @Deprecated public void setListShown(boolean);
+    method @Deprecated public void setListShownNoAnimation(boolean);
+    method @Deprecated public void setSelection(int);
+  }
+
+  @Deprecated public abstract class LoaderManager {
+    ctor @Deprecated public LoaderManager();
+    method @Deprecated public abstract void destroyLoader(int);
+    method @Deprecated public abstract void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public static void enableDebugLogging(boolean);
+    method @Deprecated public abstract <D> android.content.Loader<D> getLoader(int);
+    method @Deprecated public abstract <D> android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method @Deprecated public abstract <D> android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+  }
+
+  @Deprecated public static interface LoaderManager.LoaderCallbacks<D> {
+    method @Deprecated public android.content.Loader<D> onCreateLoader(int, android.os.Bundle);
+    method @Deprecated public void onLoadFinished(android.content.Loader<D>, D);
+    method @Deprecated public void onLoaderReset(android.content.Loader<D>);
+  }
+
+  @Deprecated public class LocalActivityManager {
+    ctor @Deprecated public LocalActivityManager(android.app.Activity, boolean);
+    method @Deprecated public android.view.Window destroyActivity(String, boolean);
+    method @Deprecated public void dispatchCreate(android.os.Bundle);
+    method @Deprecated public void dispatchDestroy(boolean);
+    method @Deprecated public void dispatchPause(boolean);
+    method @Deprecated public void dispatchResume();
+    method @Deprecated public void dispatchStop();
+    method @Deprecated public android.app.Activity getActivity(String);
+    method @Deprecated public android.app.Activity getCurrentActivity();
+    method @Deprecated public String getCurrentId();
+    method @Deprecated public void removeAllActivities();
+    method @Deprecated public android.os.Bundle saveInstanceState();
+    method @Deprecated public android.view.Window startActivity(String, android.content.Intent);
+  }
+
+  public class MediaRouteActionProvider extends android.view.ActionProvider {
+    ctor public MediaRouteActionProvider(android.content.Context);
+    method public android.view.View onCreateActionView();
+    method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
+    method public void setRouteTypes(int);
+  }
+
+  public class MediaRouteButton extends android.view.View {
+    ctor public MediaRouteButton(android.content.Context);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getRouteTypes();
+    method public void onAttachedToWindow();
+    method public void onDetachedFromWindow();
+    method public void setExtendedSettingsClickListener(android.view.View.OnClickListener);
+    method public void setRouteTypes(int);
+    method public void showDialog();
+  }
+
+  public class NativeActivity extends android.app.Activity implements android.view.InputQueue.Callback android.view.SurfaceHolder.Callback2 android.view.ViewTreeObserver.OnGlobalLayoutListener {
+    ctor public NativeActivity();
+    method public void onGlobalLayout();
+    method public void onInputQueueCreated(android.view.InputQueue);
+    method public void onInputQueueDestroyed(android.view.InputQueue);
+    method public void surfaceChanged(android.view.SurfaceHolder, int, int, int);
+    method public void surfaceCreated(android.view.SurfaceHolder);
+    method public void surfaceDestroyed(android.view.SurfaceHolder);
+    method public void surfaceRedrawNeeded(android.view.SurfaceHolder);
+    field public static final String META_DATA_FUNC_NAME = "android.app.func_name";
+    field public static final String META_DATA_LIB_NAME = "android.app.lib_name";
+  }
+
+  public class Notification implements android.os.Parcelable {
+    ctor public Notification();
+    ctor @Deprecated public Notification(int, CharSequence, long);
+    ctor public Notification(android.os.Parcel);
+    method public android.app.Notification clone();
+    method public int describeContents();
+    method @Nullable public android.util.Pair<android.app.RemoteInput,android.app.Notification.Action> findRemoteInputActionPair(boolean);
+    method public boolean getAllowSystemGeneratedContextualActions();
+    method public int getBadgeIconType();
+    method @Nullable public android.app.Notification.BubbleMetadata getBubbleMetadata();
+    method public String getChannelId();
+    method @NonNull public java.util.List<android.app.Notification.Action> getContextualActions();
+    method public String getGroup();
+    method public int getGroupAlertBehavior();
+    method public android.graphics.drawable.Icon getLargeIcon();
+    method @Nullable public android.content.LocusId getLocusId();
+    method public CharSequence getSettingsText();
+    method public String getShortcutId();
+    method public android.graphics.drawable.Icon getSmallIcon();
+    method public String getSortKey();
+    method public long getTimeoutAfter();
+    method public boolean hasImage();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.media.AudioAttributes AUDIO_ATTRIBUTES_DEFAULT;
+    field public static final int BADGE_ICON_LARGE = 2; // 0x2
+    field public static final int BADGE_ICON_NONE = 0; // 0x0
+    field public static final int BADGE_ICON_SMALL = 1; // 0x1
+    field public static final String CATEGORY_ALARM = "alarm";
+    field public static final String CATEGORY_CALL = "call";
+    field public static final String CATEGORY_EMAIL = "email";
+    field public static final String CATEGORY_ERROR = "err";
+    field public static final String CATEGORY_EVENT = "event";
+    field public static final String CATEGORY_LOCATION_SHARING = "location_sharing";
+    field public static final String CATEGORY_MESSAGE = "msg";
+    field public static final String CATEGORY_MISSED_CALL = "missed_call";
+    field public static final String CATEGORY_NAVIGATION = "navigation";
+    field public static final String CATEGORY_PROGRESS = "progress";
+    field public static final String CATEGORY_PROMO = "promo";
+    field public static final String CATEGORY_RECOMMENDATION = "recommendation";
+    field public static final String CATEGORY_REMINDER = "reminder";
+    field public static final String CATEGORY_SERVICE = "service";
+    field public static final String CATEGORY_SOCIAL = "social";
+    field public static final String CATEGORY_STATUS = "status";
+    field public static final String CATEGORY_STOPWATCH = "stopwatch";
+    field public static final String CATEGORY_SYSTEM = "sys";
+    field public static final String CATEGORY_TRANSPORT = "transport";
+    field public static final String CATEGORY_WORKOUT = "workout";
+    field @ColorInt public static final int COLOR_DEFAULT = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification> CREATOR;
+    field public static final int DEFAULT_ALL = -1; // 0xffffffff
+    field public static final int DEFAULT_LIGHTS = 4; // 0x4
+    field public static final int DEFAULT_SOUND = 1; // 0x1
+    field public static final int DEFAULT_VIBRATE = 2; // 0x2
+    field public static final String EXTRA_ANSWER_COLOR = "android.answerColor";
+    field public static final String EXTRA_ANSWER_INTENT = "android.answerIntent";
+    field public static final String EXTRA_AUDIO_CONTENTS_URI = "android.audioContents";
+    field public static final String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
+    field public static final String EXTRA_BIG_TEXT = "android.bigText";
+    field public static final String EXTRA_CALL_IS_VIDEO = "android.callIsVideo";
+    field public static final String EXTRA_CALL_PERSON = "android.callPerson";
+    field public static final String EXTRA_CHANNEL_GROUP_ID = "android.intent.extra.CHANNEL_GROUP_ID";
+    field public static final String EXTRA_CHANNEL_ID = "android.intent.extra.CHANNEL_ID";
+    field public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
+    field public static final String EXTRA_COLORIZED = "android.colorized";
+    field public static final String EXTRA_COMPACT_ACTIONS = "android.compactActions";
+    field public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
+    field public static final String EXTRA_DECLINE_COLOR = "android.declineColor";
+    field public static final String EXTRA_DECLINE_INTENT = "android.declineIntent";
+    field public static final String EXTRA_HANG_UP_INTENT = "android.hangUpIntent";
+    field public static final String EXTRA_HISTORIC_MESSAGES = "android.messages.historic";
+    field public static final String EXTRA_INFO_TEXT = "android.infoText";
+    field public static final String EXTRA_IS_GROUP_CONVERSATION = "android.isGroupConversation";
+    field @Deprecated public static final String EXTRA_LARGE_ICON = "android.largeIcon";
+    field public static final String EXTRA_LARGE_ICON_BIG = "android.largeIcon.big";
+    field public static final String EXTRA_MEDIA_SESSION = "android.mediaSession";
+    field public static final String EXTRA_MESSAGES = "android.messages";
+    field public static final String EXTRA_MESSAGING_PERSON = "android.messagingUser";
+    field public static final String EXTRA_NOTIFICATION_ID = "android.intent.extra.NOTIFICATION_ID";
+    field public static final String EXTRA_NOTIFICATION_TAG = "android.intent.extra.NOTIFICATION_TAG";
+    field @Deprecated public static final String EXTRA_PEOPLE = "android.people";
+    field public static final String EXTRA_PEOPLE_LIST = "android.people.list";
+    field public static final String EXTRA_PICTURE = "android.picture";
+    field public static final String EXTRA_PICTURE_CONTENT_DESCRIPTION = "android.pictureContentDescription";
+    field public static final String EXTRA_PICTURE_ICON = "android.pictureIcon";
+    field public static final String EXTRA_PROGRESS = "android.progress";
+    field public static final String EXTRA_PROGRESS_INDETERMINATE = "android.progressIndeterminate";
+    field public static final String EXTRA_PROGRESS_MAX = "android.progressMax";
+    field public static final String EXTRA_REMOTE_INPUT_DRAFT = "android.remoteInputDraft";
+    field public static final String EXTRA_REMOTE_INPUT_HISTORY = "android.remoteInputHistory";
+    field @Deprecated public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
+    field public static final String EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED = "android.showBigPictureWhenCollapsed";
+    field public static final String EXTRA_SHOW_CHRONOMETER = "android.showChronometer";
+    field public static final String EXTRA_SHOW_WHEN = "android.showWhen";
+    field @Deprecated public static final String EXTRA_SMALL_ICON = "android.icon";
+    field public static final String EXTRA_SUB_TEXT = "android.subText";
+    field public static final String EXTRA_SUMMARY_TEXT = "android.summaryText";
+    field public static final String EXTRA_TEMPLATE = "android.template";
+    field public static final String EXTRA_TEXT = "android.text";
+    field public static final String EXTRA_TEXT_LINES = "android.textLines";
+    field public static final String EXTRA_TITLE = "android.title";
+    field public static final String EXTRA_TITLE_BIG = "android.title.big";
+    field public static final String EXTRA_VERIFICATION_ICON = "android.verificationIcon";
+    field public static final String EXTRA_VERIFICATION_TEXT = "android.verificationText";
+    field public static final int FLAG_AUTO_CANCEL = 16; // 0x10
+    field public static final int FLAG_BUBBLE = 4096; // 0x1000
+    field public static final int FLAG_FOREGROUND_SERVICE = 64; // 0x40
+    field public static final int FLAG_GROUP_SUMMARY = 512; // 0x200
+    field @Deprecated public static final int FLAG_HIGH_PRIORITY = 128; // 0x80
+    field public static final int FLAG_INSISTENT = 4; // 0x4
+    field public static final int FLAG_LOCAL_ONLY = 256; // 0x100
+    field public static final int FLAG_NO_CLEAR = 32; // 0x20
+    field public static final int FLAG_ONGOING_EVENT = 2; // 0x2
+    field public static final int FLAG_ONLY_ALERT_ONCE = 8; // 0x8
+    field @Deprecated public static final int FLAG_SHOW_LIGHTS = 1; // 0x1
+    field public static final int FOREGROUND_SERVICE_DEFAULT = 0; // 0x0
+    field public static final int FOREGROUND_SERVICE_DEFERRED = 2; // 0x2
+    field public static final int FOREGROUND_SERVICE_IMMEDIATE = 1; // 0x1
+    field public static final int GROUP_ALERT_ALL = 0; // 0x0
+    field public static final int GROUP_ALERT_CHILDREN = 2; // 0x2
+    field public static final int GROUP_ALERT_SUMMARY = 1; // 0x1
+    field public static final String INTENT_CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
+    field @Deprecated public static final int PRIORITY_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int PRIORITY_HIGH = 1; // 0x1
+    field @Deprecated public static final int PRIORITY_LOW = -1; // 0xffffffff
+    field @Deprecated public static final int PRIORITY_MAX = 2; // 0x2
+    field @Deprecated public static final int PRIORITY_MIN = -2; // 0xfffffffe
+    field @Deprecated public static final int STREAM_DEFAULT = -1; // 0xffffffff
+    field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+    field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+    field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
+    field public android.app.Notification.Action[] actions;
+    field @Deprecated public android.media.AudioAttributes audioAttributes;
+    field @Deprecated public int audioStreamType;
+    field @Deprecated public android.widget.RemoteViews bigContentView;
+    field public String category;
+    field @ColorInt public int color;
+    field public android.app.PendingIntent contentIntent;
+    field @Deprecated public android.widget.RemoteViews contentView;
+    field @Deprecated public int defaults;
+    field public android.app.PendingIntent deleteIntent;
+    field public android.os.Bundle extras;
+    field public int flags;
+    field public android.app.PendingIntent fullScreenIntent;
+    field @Deprecated public android.widget.RemoteViews headsUpContentView;
+    field @Deprecated @DrawableRes public int icon;
+    field public int iconLevel;
+    field @Deprecated public android.graphics.Bitmap largeIcon;
+    field @Deprecated @ColorInt public int ledARGB;
+    field @Deprecated public int ledOffMS;
+    field @Deprecated public int ledOnMS;
+    field public int number;
+    field @Deprecated public int priority;
+    field public android.app.Notification publicVersion;
+    field @Deprecated public android.net.Uri sound;
+    field public CharSequence tickerText;
+    field @Deprecated public android.widget.RemoteViews tickerView;
+    field @Deprecated public long[] vibrate;
+    field public int visibility;
+    field public long when;
+  }
+
+  public static class Notification.Action implements android.os.Parcelable {
+    ctor @Deprecated public Notification.Action(int, CharSequence, android.app.PendingIntent);
+    method public android.app.Notification.Action clone();
+    method public int describeContents();
+    method public boolean getAllowGeneratedReplies();
+    method public android.app.RemoteInput[] getDataOnlyRemoteInputs();
+    method public android.os.Bundle getExtras();
+    method public android.graphics.drawable.Icon getIcon();
+    method public android.app.RemoteInput[] getRemoteInputs();
+    method public int getSemanticAction();
+    method public boolean isAuthenticationRequired();
+    method public boolean isContextual();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.Action> CREATOR;
+    field public static final int SEMANTIC_ACTION_ARCHIVE = 5; // 0x5
+    field public static final int SEMANTIC_ACTION_CALL = 10; // 0xa
+    field public static final int SEMANTIC_ACTION_DELETE = 4; // 0x4
+    field public static final int SEMANTIC_ACTION_MARK_AS_READ = 2; // 0x2
+    field public static final int SEMANTIC_ACTION_MARK_AS_UNREAD = 3; // 0x3
+    field public static final int SEMANTIC_ACTION_MUTE = 6; // 0x6
+    field public static final int SEMANTIC_ACTION_NONE = 0; // 0x0
+    field public static final int SEMANTIC_ACTION_REPLY = 1; // 0x1
+    field public static final int SEMANTIC_ACTION_THUMBS_DOWN = 9; // 0x9
+    field public static final int SEMANTIC_ACTION_THUMBS_UP = 8; // 0x8
+    field public static final int SEMANTIC_ACTION_UNMUTE = 7; // 0x7
+    field public android.app.PendingIntent actionIntent;
+    field @Deprecated public int icon;
+    field public CharSequence title;
+  }
+
+  public static final class Notification.Action.Builder {
+    ctor @Deprecated public Notification.Action.Builder(int, CharSequence, android.app.PendingIntent);
+    ctor public Notification.Action.Builder(android.graphics.drawable.Icon, CharSequence, android.app.PendingIntent);
+    ctor public Notification.Action.Builder(android.app.Notification.Action);
+    method @NonNull public android.app.Notification.Action.Builder addExtras(android.os.Bundle);
+    method @NonNull public android.app.Notification.Action.Builder addRemoteInput(android.app.RemoteInput);
+    method @NonNull public android.app.Notification.Action build();
+    method @NonNull public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Extender);
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public android.app.Notification.Action.Builder setAllowGeneratedReplies(boolean);
+    method @NonNull public android.app.Notification.Action.Builder setAuthenticationRequired(boolean);
+    method @NonNull public android.app.Notification.Action.Builder setContextual(boolean);
+    method @NonNull public android.app.Notification.Action.Builder setSemanticAction(int);
+  }
+
+  public static interface Notification.Action.Extender {
+    method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder);
+  }
+
+  public static final class Notification.Action.WearableExtender implements android.app.Notification.Action.Extender {
+    ctor public Notification.Action.WearableExtender();
+    ctor public Notification.Action.WearableExtender(android.app.Notification.Action);
+    method public android.app.Notification.Action.WearableExtender clone();
+    method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder);
+    method @Deprecated public CharSequence getCancelLabel();
+    method @Deprecated public CharSequence getConfirmLabel();
+    method public boolean getHintDisplayActionInline();
+    method public boolean getHintLaunchesActivity();
+    method @Deprecated public CharSequence getInProgressLabel();
+    method public boolean isAvailableOffline();
+    method public android.app.Notification.Action.WearableExtender setAvailableOffline(boolean);
+    method @Deprecated public android.app.Notification.Action.WearableExtender setCancelLabel(CharSequence);
+    method @Deprecated public android.app.Notification.Action.WearableExtender setConfirmLabel(CharSequence);
+    method public android.app.Notification.Action.WearableExtender setHintDisplayActionInline(boolean);
+    method public android.app.Notification.Action.WearableExtender setHintLaunchesActivity(boolean);
+    method @Deprecated public android.app.Notification.Action.WearableExtender setInProgressLabel(CharSequence);
+  }
+
+  public static class Notification.BigPictureStyle extends android.app.Notification.Style {
+    ctor public Notification.BigPictureStyle();
+    ctor @Deprecated public Notification.BigPictureStyle(android.app.Notification.Builder);
+    method @NonNull public android.app.Notification.BigPictureStyle bigLargeIcon(@Nullable android.graphics.Bitmap);
+    method @NonNull public android.app.Notification.BigPictureStyle bigLargeIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BigPictureStyle bigPicture(@Nullable android.graphics.Bitmap);
+    method @NonNull public android.app.Notification.BigPictureStyle bigPicture(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BigPictureStyle setBigContentTitle(@Nullable CharSequence);
+    method @NonNull public android.app.Notification.BigPictureStyle setContentDescription(@Nullable CharSequence);
+    method @NonNull public android.app.Notification.BigPictureStyle setSummaryText(@Nullable CharSequence);
+    method @NonNull public android.app.Notification.BigPictureStyle showBigPictureWhenCollapsed(boolean);
+  }
+
+  public static class Notification.BigTextStyle extends android.app.Notification.Style {
+    ctor public Notification.BigTextStyle();
+    ctor @Deprecated public Notification.BigTextStyle(android.app.Notification.Builder);
+    method public android.app.Notification.BigTextStyle bigText(CharSequence);
+    method public android.app.Notification.BigTextStyle setBigContentTitle(CharSequence);
+    method public android.app.Notification.BigTextStyle setSummaryText(CharSequence);
+  }
+
+  public static final class Notification.BubbleMetadata implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getAutoExpandBubble();
+    method @Nullable public android.app.PendingIntent getDeleteIntent();
+    method @Dimension(unit=android.annotation.Dimension.DP) public int getDesiredHeight();
+    method @DimenRes public int getDesiredHeightResId();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @Nullable public android.app.PendingIntent getIntent();
+    method @Nullable public String getShortcutId();
+    method public boolean isBubbleSuppressable();
+    method public boolean isBubbleSuppressed();
+    method public boolean isNotificationSuppressed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Notification.BubbleMetadata> CREATOR;
+  }
+
+  public static final class Notification.BubbleMetadata.Builder {
+    ctor @Deprecated public Notification.BubbleMetadata.Builder();
+    ctor public Notification.BubbleMetadata.Builder(@NonNull String);
+    ctor public Notification.BubbleMetadata.Builder(@NonNull android.app.PendingIntent, @NonNull android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BubbleMetadata build();
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setAutoExpandBubble(boolean);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setDeleteIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setDesiredHeight(@Dimension(unit=android.annotation.Dimension.DP) int);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setDesiredHeightResId(@DimenRes int);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setIcon(@NonNull android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressNotification(boolean);
+    method @NonNull public android.app.Notification.BubbleMetadata.Builder setSuppressableBubble(boolean);
+  }
+
+  public static class Notification.Builder {
+    ctor public Notification.Builder(android.content.Context, String);
+    ctor @Deprecated public Notification.Builder(android.content.Context);
+    method @Deprecated public android.app.Notification.Builder addAction(int, CharSequence, android.app.PendingIntent);
+    method @NonNull public android.app.Notification.Builder addAction(android.app.Notification.Action);
+    method @NonNull public android.app.Notification.Builder addExtras(android.os.Bundle);
+    method @Deprecated public android.app.Notification.Builder addPerson(String);
+    method @NonNull public android.app.Notification.Builder addPerson(android.app.Person);
+    method @NonNull public android.app.Notification build();
+    method public android.widget.RemoteViews createBigContentView();
+    method public android.widget.RemoteViews createContentView();
+    method public android.widget.RemoteViews createHeadsUpContentView();
+    method @NonNull public android.app.Notification.Builder extend(android.app.Notification.Extender);
+    method public android.os.Bundle getExtras();
+    method @Deprecated public android.app.Notification getNotification();
+    method public android.app.Notification.Style getStyle();
+    method @NonNull public static android.app.Notification.Builder recoverBuilder(android.content.Context, android.app.Notification);
+    method @NonNull public android.app.Notification.Builder setActions(android.app.Notification.Action...);
+    method @NonNull public android.app.Notification.Builder setAllowSystemGeneratedContextualActions(boolean);
+    method @NonNull public android.app.Notification.Builder setAutoCancel(boolean);
+    method @NonNull public android.app.Notification.Builder setBadgeIconType(int);
+    method @NonNull public android.app.Notification.Builder setBubbleMetadata(@Nullable android.app.Notification.BubbleMetadata);
+    method @NonNull public android.app.Notification.Builder setCategory(String);
+    method @NonNull public android.app.Notification.Builder setChannelId(String);
+    method @NonNull public android.app.Notification.Builder setChronometerCountDown(boolean);
+    method @NonNull public android.app.Notification.Builder setColor(@ColorInt int);
+    method @NonNull public android.app.Notification.Builder setColorized(boolean);
+    method @Deprecated public android.app.Notification.Builder setContent(android.widget.RemoteViews);
+    method @Deprecated public android.app.Notification.Builder setContentInfo(CharSequence);
+    method @NonNull public android.app.Notification.Builder setContentIntent(android.app.PendingIntent);
+    method @NonNull public android.app.Notification.Builder setContentText(CharSequence);
+    method @NonNull public android.app.Notification.Builder setContentTitle(CharSequence);
+    method @NonNull public android.app.Notification.Builder setCustomBigContentView(android.widget.RemoteViews);
+    method @NonNull public android.app.Notification.Builder setCustomContentView(android.widget.RemoteViews);
+    method @NonNull public android.app.Notification.Builder setCustomHeadsUpContentView(android.widget.RemoteViews);
+    method @Deprecated public android.app.Notification.Builder setDefaults(int);
+    method @NonNull public android.app.Notification.Builder setDeleteIntent(android.app.PendingIntent);
+    method @NonNull public android.app.Notification.Builder setExtras(android.os.Bundle);
+    method @NonNull public android.app.Notification.Builder setFlag(int, boolean);
+    method @NonNull public android.app.Notification.Builder setForegroundServiceBehavior(int);
+    method @NonNull public android.app.Notification.Builder setFullScreenIntent(android.app.PendingIntent, boolean);
+    method @NonNull public android.app.Notification.Builder setGroup(String);
+    method @NonNull public android.app.Notification.Builder setGroupAlertBehavior(int);
+    method @NonNull public android.app.Notification.Builder setGroupSummary(boolean);
+    method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.Bitmap);
+    method @NonNull public android.app.Notification.Builder setLargeIcon(android.graphics.drawable.Icon);
+    method @Deprecated public android.app.Notification.Builder setLights(@ColorInt int, int, int);
+    method @NonNull public android.app.Notification.Builder setLocalOnly(boolean);
+    method @NonNull public android.app.Notification.Builder setLocusId(@Nullable android.content.LocusId);
+    method @NonNull public android.app.Notification.Builder setNumber(int);
+    method @NonNull public android.app.Notification.Builder setOngoing(boolean);
+    method @NonNull public android.app.Notification.Builder setOnlyAlertOnce(boolean);
+    method @Deprecated public android.app.Notification.Builder setPriority(int);
+    method @NonNull public android.app.Notification.Builder setProgress(int, int, boolean);
+    method @NonNull public android.app.Notification.Builder setPublicVersion(android.app.Notification);
+    method @NonNull public android.app.Notification.Builder setRemoteInputHistory(CharSequence[]);
+    method @NonNull public android.app.Notification.Builder setSettingsText(CharSequence);
+    method @NonNull public android.app.Notification.Builder setShortcutId(String);
+    method @NonNull public android.app.Notification.Builder setShowWhen(boolean);
+    method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int);
+    method @NonNull public android.app.Notification.Builder setSmallIcon(@DrawableRes int, int);
+    method @NonNull public android.app.Notification.Builder setSmallIcon(android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.Builder setSortKey(String);
+    method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri);
+    method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, int);
+    method @Deprecated public android.app.Notification.Builder setSound(android.net.Uri, android.media.AudioAttributes);
+    method @NonNull public android.app.Notification.Builder setStyle(android.app.Notification.Style);
+    method @NonNull public android.app.Notification.Builder setSubText(CharSequence);
+    method @NonNull public android.app.Notification.Builder setTicker(CharSequence);
+    method @Deprecated public android.app.Notification.Builder setTicker(CharSequence, android.widget.RemoteViews);
+    method @NonNull public android.app.Notification.Builder setTimeoutAfter(long);
+    method @NonNull public android.app.Notification.Builder setUsesChronometer(boolean);
+    method @Deprecated public android.app.Notification.Builder setVibrate(long[]);
+    method @NonNull public android.app.Notification.Builder setVisibility(int);
+    method @NonNull public android.app.Notification.Builder setWhen(long);
+  }
+
+  public static class Notification.CallStyle extends android.app.Notification.Style {
+    method @NonNull public static android.app.Notification.CallStyle forIncomingCall(@NonNull android.app.Person, @NonNull android.app.PendingIntent, @NonNull android.app.PendingIntent);
+    method @NonNull public static android.app.Notification.CallStyle forOngoingCall(@NonNull android.app.Person, @NonNull android.app.PendingIntent);
+    method @NonNull public static android.app.Notification.CallStyle forScreeningCall(@NonNull android.app.Person, @NonNull android.app.PendingIntent, @NonNull android.app.PendingIntent);
+    method @NonNull public android.app.Notification.CallStyle setAnswerButtonColorHint(@ColorInt int);
+    method @NonNull public android.app.Notification.CallStyle setDeclineButtonColorHint(@ColorInt int);
+    method @NonNull public android.app.Notification.CallStyle setIsVideo(boolean);
+    method @NonNull public android.app.Notification.CallStyle setVerificationIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Notification.CallStyle setVerificationText(@Nullable CharSequence);
+  }
+
+  public static final class Notification.CarExtender implements android.app.Notification.Extender {
+    ctor public Notification.CarExtender();
+    ctor public Notification.CarExtender(android.app.Notification);
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+    method @ColorInt public int getColor();
+    method public android.graphics.Bitmap getLargeIcon();
+    method public android.app.Notification.CarExtender.UnreadConversation getUnreadConversation();
+    method public android.app.Notification.CarExtender setColor(@ColorInt int);
+    method public android.app.Notification.CarExtender setLargeIcon(android.graphics.Bitmap);
+    method public android.app.Notification.CarExtender setUnreadConversation(android.app.Notification.CarExtender.UnreadConversation);
+  }
+
+  public static class Notification.CarExtender.Builder {
+    ctor public Notification.CarExtender.Builder(String);
+    method public android.app.Notification.CarExtender.Builder addMessage(String);
+    method public android.app.Notification.CarExtender.UnreadConversation build();
+    method public android.app.Notification.CarExtender.Builder setLatestTimestamp(long);
+    method public android.app.Notification.CarExtender.Builder setReadPendingIntent(android.app.PendingIntent);
+    method public android.app.Notification.CarExtender.Builder setReplyAction(android.app.PendingIntent, android.app.RemoteInput);
+  }
+
+  public static class Notification.CarExtender.UnreadConversation {
+    method public long getLatestTimestamp();
+    method public String[] getMessages();
+    method public String getParticipant();
+    method public String[] getParticipants();
+    method public android.app.PendingIntent getReadPendingIntent();
+    method public android.app.RemoteInput getRemoteInput();
+    method public android.app.PendingIntent getReplyPendingIntent();
+  }
+
+  public static class Notification.DecoratedCustomViewStyle extends android.app.Notification.Style {
+    ctor public Notification.DecoratedCustomViewStyle();
+  }
+
+  public static class Notification.DecoratedMediaCustomViewStyle extends android.app.Notification.MediaStyle {
+    ctor public Notification.DecoratedMediaCustomViewStyle();
+  }
+
+  public static interface Notification.Extender {
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+  }
+
+  public static class Notification.InboxStyle extends android.app.Notification.Style {
+    ctor public Notification.InboxStyle();
+    ctor @Deprecated public Notification.InboxStyle(android.app.Notification.Builder);
+    method public android.app.Notification.InboxStyle addLine(CharSequence);
+    method public android.app.Notification.InboxStyle setBigContentTitle(CharSequence);
+    method public android.app.Notification.InboxStyle setSummaryText(CharSequence);
+  }
+
+  public static class Notification.MediaStyle extends android.app.Notification.Style {
+    ctor public Notification.MediaStyle();
+    ctor @Deprecated public Notification.MediaStyle(android.app.Notification.Builder);
+    method public android.app.Notification.MediaStyle setMediaSession(android.media.session.MediaSession.Token);
+    method public android.app.Notification.MediaStyle setShowActionsInCompactView(int...);
+  }
+
+  public static class Notification.MessagingStyle extends android.app.Notification.Style {
+    ctor @Deprecated public Notification.MessagingStyle(@NonNull CharSequence);
+    ctor public Notification.MessagingStyle(@NonNull android.app.Person);
+    method public android.app.Notification.MessagingStyle addHistoricMessage(android.app.Notification.MessagingStyle.Message);
+    method @Deprecated public android.app.Notification.MessagingStyle addMessage(CharSequence, long, CharSequence);
+    method public android.app.Notification.MessagingStyle addMessage(@NonNull CharSequence, long, @Nullable android.app.Person);
+    method public android.app.Notification.MessagingStyle addMessage(android.app.Notification.MessagingStyle.Message);
+    method @Nullable public CharSequence getConversationTitle();
+    method public java.util.List<android.app.Notification.MessagingStyle.Message> getHistoricMessages();
+    method public java.util.List<android.app.Notification.MessagingStyle.Message> getMessages();
+    method @NonNull public android.app.Person getUser();
+    method @Deprecated public CharSequence getUserDisplayName();
+    method public boolean isGroupConversation();
+    method public android.app.Notification.MessagingStyle setConversationTitle(@Nullable CharSequence);
+    method public android.app.Notification.MessagingStyle setGroupConversation(boolean);
+    field public static final int MAXIMUM_RETAINED_MESSAGES = 25; // 0x19
+  }
+
+  public static final class Notification.MessagingStyle.Message {
+    ctor @Deprecated public Notification.MessagingStyle.Message(CharSequence, long, CharSequence);
+    ctor public Notification.MessagingStyle.Message(@NonNull CharSequence, long, @Nullable android.app.Person);
+    method public String getDataMimeType();
+    method public android.net.Uri getDataUri();
+    method public android.os.Bundle getExtras();
+    method @NonNull public static java.util.List<android.app.Notification.MessagingStyle.Message> getMessagesFromBundleArray(@Nullable android.os.Parcelable[]);
+    method @Deprecated public CharSequence getSender();
+    method @Nullable public android.app.Person getSenderPerson();
+    method public CharSequence getText();
+    method public long getTimestamp();
+    method public android.app.Notification.MessagingStyle.Message setData(String, android.net.Uri);
+  }
+
+  public abstract static class Notification.Style {
+    ctor public Notification.Style();
+    method public android.app.Notification build();
+    method protected void checkBuilder();
+    method protected android.widget.RemoteViews getStandardView(int);
+    method protected void internalSetBigContentTitle(CharSequence);
+    method protected void internalSetSummaryText(CharSequence);
+    method public void setBuilder(android.app.Notification.Builder);
+    field protected android.app.Notification.Builder mBuilder;
+  }
+
+  public static final class Notification.WearableExtender implements android.app.Notification.Extender {
+    ctor public Notification.WearableExtender();
+    ctor public Notification.WearableExtender(android.app.Notification);
+    method public android.app.Notification.WearableExtender addAction(android.app.Notification.Action);
+    method public android.app.Notification.WearableExtender addActions(java.util.List<android.app.Notification.Action>);
+    method @Deprecated public android.app.Notification.WearableExtender addPage(android.app.Notification);
+    method @Deprecated public android.app.Notification.WearableExtender addPages(java.util.List<android.app.Notification>);
+    method public android.app.Notification.WearableExtender clearActions();
+    method @Deprecated public android.app.Notification.WearableExtender clearPages();
+    method public android.app.Notification.WearableExtender clone();
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+    method public java.util.List<android.app.Notification.Action> getActions();
+    method @Deprecated public android.graphics.Bitmap getBackground();
+    method public String getBridgeTag();
+    method public int getContentAction();
+    method @Deprecated public int getContentIcon();
+    method @Deprecated public int getContentIconGravity();
+    method public boolean getContentIntentAvailableOffline();
+    method @Deprecated public int getCustomContentHeight();
+    method @Deprecated public int getCustomSizePreset();
+    method public String getDismissalId();
+    method @Deprecated public android.app.PendingIntent getDisplayIntent();
+    method @Deprecated public int getGravity();
+    method @Deprecated public boolean getHintAmbientBigPicture();
+    method @Deprecated public boolean getHintAvoidBackgroundClipping();
+    method public boolean getHintContentIntentLaunchesActivity();
+    method @Deprecated public boolean getHintHideIcon();
+    method @Deprecated public int getHintScreenTimeout();
+    method @Deprecated public boolean getHintShowBackgroundOnly();
+    method @Deprecated public java.util.List<android.app.Notification> getPages();
+    method public boolean getStartScrollBottom();
+    method @Deprecated public android.app.Notification.WearableExtender setBackground(android.graphics.Bitmap);
+    method public android.app.Notification.WearableExtender setBridgeTag(String);
+    method public android.app.Notification.WearableExtender setContentAction(int);
+    method @Deprecated public android.app.Notification.WearableExtender setContentIcon(int);
+    method @Deprecated public android.app.Notification.WearableExtender setContentIconGravity(int);
+    method public android.app.Notification.WearableExtender setContentIntentAvailableOffline(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setCustomContentHeight(int);
+    method @Deprecated public android.app.Notification.WearableExtender setCustomSizePreset(int);
+    method public android.app.Notification.WearableExtender setDismissalId(String);
+    method @Deprecated public android.app.Notification.WearableExtender setDisplayIntent(android.app.PendingIntent);
+    method @Deprecated public android.app.Notification.WearableExtender setGravity(int);
+    method @Deprecated public android.app.Notification.WearableExtender setHintAmbientBigPicture(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setHintAvoidBackgroundClipping(boolean);
+    method public android.app.Notification.WearableExtender setHintContentIntentLaunchesActivity(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setHintHideIcon(boolean);
+    method @Deprecated public android.app.Notification.WearableExtender setHintScreenTimeout(int);
+    method @Deprecated public android.app.Notification.WearableExtender setHintShowBackgroundOnly(boolean);
+    method public android.app.Notification.WearableExtender setStartScrollBottom(boolean);
+    field @Deprecated public static final int SCREEN_TIMEOUT_LONG = -1; // 0xffffffff
+    field @Deprecated public static final int SCREEN_TIMEOUT_SHORT = 0; // 0x0
+    field @Deprecated public static final int SIZE_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int SIZE_FULL_SCREEN = 5; // 0x5
+    field @Deprecated public static final int SIZE_LARGE = 4; // 0x4
+    field @Deprecated public static final int SIZE_MEDIUM = 3; // 0x3
+    field @Deprecated public static final int SIZE_SMALL = 2; // 0x2
+    field @Deprecated public static final int SIZE_XSMALL = 1; // 0x1
+    field public static final int UNSET_ACTION_INDEX = -1; // 0xffffffff
+  }
+
+  public final class NotificationChannel implements android.os.Parcelable {
+    ctor public NotificationChannel(String, CharSequence, int);
+    method public boolean canBubble();
+    method public boolean canBypassDnd();
+    method public boolean canShowBadge();
+    method public int describeContents();
+    method public void enableLights(boolean);
+    method public void enableVibration(boolean);
+    method public android.media.AudioAttributes getAudioAttributes();
+    method @Nullable public String getConversationId();
+    method public String getDescription();
+    method public String getGroup();
+    method public String getId();
+    method public int getImportance();
+    method public int getLightColor();
+    method public int getLockscreenVisibility();
+    method public CharSequence getName();
+    method @Nullable public String getParentChannelId();
+    method public android.net.Uri getSound();
+    method public long[] getVibrationPattern();
+    method public boolean hasUserSetImportance();
+    method public boolean hasUserSetSound();
+    method public boolean isConversation();
+    method public boolean isDemoted();
+    method public boolean isImportantConversation();
+    method public void setAllowBubbles(boolean);
+    method public void setBypassDnd(boolean);
+    method public void setConversationId(@NonNull String, @NonNull String);
+    method public void setDescription(String);
+    method public void setGroup(String);
+    method public void setImportance(int);
+    method public void setLightColor(int);
+    method public void setLockscreenVisibility(int);
+    method public void setName(CharSequence);
+    method public void setShowBadge(boolean);
+    method public void setSound(android.net.Uri, android.media.AudioAttributes);
+    method public void setVibrationPattern(long[]);
+    method public boolean shouldShowLights();
+    method public boolean shouldVibrate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationChannel> CREATOR;
+    field public static final String DEFAULT_CHANNEL_ID = "miscellaneous";
+    field public static final String EDIT_CONVERSATION = "conversation";
+    field public static final String EDIT_IMPORTANCE = "importance";
+    field public static final String EDIT_LAUNCHER = "launcher";
+    field public static final String EDIT_LOCKED_DEVICE = "locked";
+    field public static final String EDIT_SOUND = "sound";
+    field public static final String EDIT_VIBRATION = "vibration";
+    field public static final String EDIT_ZEN = "zen";
+  }
+
+  public final class NotificationChannelGroup implements android.os.Parcelable {
+    ctor public NotificationChannelGroup(String, CharSequence);
+    method public android.app.NotificationChannelGroup clone();
+    method public int describeContents();
+    method public java.util.List<android.app.NotificationChannel> getChannels();
+    method public String getDescription();
+    method public String getId();
+    method public CharSequence getName();
+    method public boolean isBlocked();
+    method public void setDescription(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationChannelGroup> CREATOR;
+  }
+
+  public class NotificationManager {
+    method public String addAutomaticZenRule(android.app.AutomaticZenRule);
+    method @Deprecated public boolean areBubblesAllowed();
+    method public boolean areBubblesEnabled();
+    method public boolean areNotificationsEnabled();
+    method public boolean areNotificationsPaused();
+    method public boolean canNotifyAsPackage(@NonNull String);
+    method public void cancel(int);
+    method public void cancel(@Nullable String, int);
+    method public void cancelAll();
+    method public void cancelAsPackage(@NonNull String, @Nullable String, int);
+    method public void createNotificationChannel(@NonNull android.app.NotificationChannel);
+    method public void createNotificationChannelGroup(@NonNull android.app.NotificationChannelGroup);
+    method public void createNotificationChannelGroups(@NonNull java.util.List<android.app.NotificationChannelGroup>);
+    method public void createNotificationChannels(@NonNull java.util.List<android.app.NotificationChannel>);
+    method public void deleteNotificationChannel(String);
+    method public void deleteNotificationChannelGroup(String);
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications();
+    method public android.app.AutomaticZenRule getAutomaticZenRule(String);
+    method public java.util.Map<java.lang.String,android.app.AutomaticZenRule> getAutomaticZenRules();
+    method public int getBubblePreference();
+    method @NonNull public android.app.NotificationManager.Policy getConsolidatedNotificationPolicy();
+    method public final int getCurrentInterruptionFilter();
+    method public int getImportance();
+    method public android.app.NotificationChannel getNotificationChannel(String);
+    method @Nullable public android.app.NotificationChannel getNotificationChannel(@NonNull String, @NonNull String);
+    method public android.app.NotificationChannelGroup getNotificationChannelGroup(String);
+    method public java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups();
+    method public java.util.List<android.app.NotificationChannel> getNotificationChannels();
+    method @Nullable public String getNotificationDelegate();
+    method public android.app.NotificationManager.Policy getNotificationPolicy();
+    method public boolean isNotificationListenerAccessGranted(android.content.ComponentName);
+    method public boolean isNotificationPolicyAccessGranted();
+    method public void notify(int, android.app.Notification);
+    method public void notify(String, int, android.app.Notification);
+    method public void notifyAsPackage(@NonNull String, @Nullable String, int, @NonNull android.app.Notification);
+    method public boolean removeAutomaticZenRule(String);
+    method public void setAutomaticZenRuleState(@NonNull String, @NonNull android.service.notification.Condition);
+    method public final void setInterruptionFilter(int);
+    method public void setNotificationDelegate(@Nullable String);
+    method public void setNotificationPolicy(@NonNull android.app.NotificationManager.Policy);
+    method public boolean shouldHideSilentStatusBarIcons();
+    method public boolean updateAutomaticZenRule(String, android.app.AutomaticZenRule);
+    field public static final String ACTION_APP_BLOCK_STATE_CHANGED = "android.app.action.APP_BLOCK_STATE_CHANGED";
+    field public static final String ACTION_AUTOMATIC_ZEN_RULE = "android.app.action.AUTOMATIC_ZEN_RULE";
+    field public static final String ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED = "android.app.action.AUTOMATIC_ZEN_RULE_STATUS_CHANGED";
+    field public static final String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED";
+    field public static final String ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED = "android.app.action.NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED";
+    field public static final String ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED = "android.app.action.NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED";
+    field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED = "android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED";
+    field public static final String ACTION_NOTIFICATION_POLICY_CHANGED = "android.app.action.NOTIFICATION_POLICY_CHANGED";
+    field public static final int AUTOMATIC_RULE_STATUS_DISABLED = 2; // 0x2
+    field public static final int AUTOMATIC_RULE_STATUS_ENABLED = 1; // 0x1
+    field public static final int AUTOMATIC_RULE_STATUS_REMOVED = 3; // 0x3
+    field public static final int AUTOMATIC_RULE_STATUS_UNKNOWN = -1; // 0xffffffff
+    field public static final int BUBBLE_PREFERENCE_ALL = 1; // 0x1
+    field public static final int BUBBLE_PREFERENCE_NONE = 0; // 0x0
+    field public static final int BUBBLE_PREFERENCE_SELECTED = 2; // 0x2
+    field public static final String EXTRA_AUTOMATIC_RULE_ID = "android.app.extra.AUTOMATIC_RULE_ID";
+    field public static final String EXTRA_AUTOMATIC_ZEN_RULE_ID = "android.app.extra.AUTOMATIC_ZEN_RULE_ID";
+    field public static final String EXTRA_AUTOMATIC_ZEN_RULE_STATUS = "android.app.extra.AUTOMATIC_ZEN_RULE_STATUS";
+    field public static final String EXTRA_BLOCKED_STATE = "android.app.extra.BLOCKED_STATE";
+    field public static final String EXTRA_NOTIFICATION_CHANNEL_GROUP_ID = "android.app.extra.NOTIFICATION_CHANNEL_GROUP_ID";
+    field public static final String EXTRA_NOTIFICATION_CHANNEL_ID = "android.app.extra.NOTIFICATION_CHANNEL_ID";
+    field public static final int IMPORTANCE_DEFAULT = 3; // 0x3
+    field public static final int IMPORTANCE_HIGH = 4; // 0x4
+    field public static final int IMPORTANCE_LOW = 2; // 0x2
+    field public static final int IMPORTANCE_MAX = 5; // 0x5
+    field public static final int IMPORTANCE_MIN = 1; // 0x1
+    field public static final int IMPORTANCE_NONE = 0; // 0x0
+    field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
+    field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
+    field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
+    field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
+    field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
+    field public static final String META_DATA_AUTOMATIC_RULE_TYPE = "android.service.zen.automatic.ruleType";
+    field public static final String META_DATA_RULE_INSTANCE_LIMIT = "android.service.zen.automatic.ruleInstanceLimit";
+  }
+
+  public static class NotificationManager.Policy implements android.os.Parcelable {
+    ctor public NotificationManager.Policy(int, int, int);
+    ctor public NotificationManager.Policy(int, int, int, int);
+    ctor public NotificationManager.Policy(int, int, int, int, int);
+    method public int describeContents();
+    method public static String priorityCategoriesToString(int);
+    method public static String prioritySendersToString(int);
+    method public static String suppressedEffectsToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONVERSATION_SENDERS_ANYONE = 1; // 0x1
+    field public static final int CONVERSATION_SENDERS_IMPORTANT = 2; // 0x2
+    field public static final int CONVERSATION_SENDERS_NONE = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.NotificationManager.Policy> CREATOR;
+    field public static final int PRIORITY_CATEGORY_ALARMS = 32; // 0x20
+    field public static final int PRIORITY_CATEGORY_CALLS = 8; // 0x8
+    field public static final int PRIORITY_CATEGORY_CONVERSATIONS = 256; // 0x100
+    field public static final int PRIORITY_CATEGORY_EVENTS = 2; // 0x2
+    field public static final int PRIORITY_CATEGORY_MEDIA = 64; // 0x40
+    field public static final int PRIORITY_CATEGORY_MESSAGES = 4; // 0x4
+    field public static final int PRIORITY_CATEGORY_REMINDERS = 1; // 0x1
+    field public static final int PRIORITY_CATEGORY_REPEAT_CALLERS = 16; // 0x10
+    field public static final int PRIORITY_CATEGORY_SYSTEM = 128; // 0x80
+    field public static final int PRIORITY_SENDERS_ANY = 0; // 0x0
+    field public static final int PRIORITY_SENDERS_CONTACTS = 1; // 0x1
+    field public static final int PRIORITY_SENDERS_STARRED = 2; // 0x2
+    field public static final int SUPPRESSED_EFFECT_AMBIENT = 128; // 0x80
+    field public static final int SUPPRESSED_EFFECT_BADGE = 64; // 0x40
+    field public static final int SUPPRESSED_EFFECT_FULL_SCREEN_INTENT = 4; // 0x4
+    field public static final int SUPPRESSED_EFFECT_LIGHTS = 8; // 0x8
+    field public static final int SUPPRESSED_EFFECT_NOTIFICATION_LIST = 256; // 0x100
+    field public static final int SUPPRESSED_EFFECT_PEEK = 16; // 0x10
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_OFF = 1; // 0x1
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_ON = 2; // 0x2
+    field public static final int SUPPRESSED_EFFECT_STATUS_BAR = 32; // 0x20
+    field public final int priorityCallSenders;
+    field public final int priorityCategories;
+    field public final int priorityConversationSenders;
+    field public final int priorityMessageSenders;
+    field public final int suppressedVisualEffects;
+  }
+
+  public final class PendingIntent implements android.os.Parcelable {
+    method public void cancel();
+    method public int describeContents();
+    method public static android.app.PendingIntent getActivities(android.content.Context, int, @NonNull android.content.Intent[], int);
+    method public static android.app.PendingIntent getActivities(android.content.Context, int, @NonNull android.content.Intent[], int, @Nullable android.os.Bundle);
+    method public static android.app.PendingIntent getActivity(android.content.Context, int, android.content.Intent, int);
+    method public static android.app.PendingIntent getActivity(android.content.Context, int, @NonNull android.content.Intent, int, @Nullable android.os.Bundle);
+    method public static android.app.PendingIntent getBroadcast(android.content.Context, int, @NonNull android.content.Intent, int);
+    method @Nullable public String getCreatorPackage();
+    method public int getCreatorUid();
+    method @NonNull public android.os.UserHandle getCreatorUserHandle();
+    method public static android.app.PendingIntent getForegroundService(android.content.Context, int, @NonNull android.content.Intent, int);
+    method @NonNull public android.content.IntentSender getIntentSender();
+    method public static android.app.PendingIntent getService(android.content.Context, int, @NonNull android.content.Intent, int);
+    method @Deprecated @Nullable public String getTargetPackage();
+    method public boolean isActivity();
+    method public boolean isBroadcast();
+    method public boolean isForegroundService();
+    method public boolean isImmutable();
+    method public boolean isService();
+    method @Nullable public static android.app.PendingIntent readPendingIntentOrNullFromParcel(@NonNull android.os.Parcel);
+    method public void send() throws android.app.PendingIntent.CanceledException;
+    method public void send(int) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent) throws android.app.PendingIntent.CanceledException;
+    method public void send(int, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler, @Nullable String) throws android.app.PendingIntent.CanceledException;
+    method public void send(android.content.Context, int, @Nullable android.content.Intent, @Nullable android.app.PendingIntent.OnFinished, @Nullable android.os.Handler, @Nullable String, @Nullable android.os.Bundle) throws android.app.PendingIntent.CanceledException;
+    method public static void writePendingIntentOrNullToParcel(@Nullable android.app.PendingIntent, @NonNull android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.PendingIntent> CREATOR;
+    field public static final int FLAG_CANCEL_CURRENT = 268435456; // 0x10000000
+    field public static final int FLAG_IMMUTABLE = 67108864; // 0x4000000
+    field public static final int FLAG_MUTABLE = 33554432; // 0x2000000
+    field public static final int FLAG_NO_CREATE = 536870912; // 0x20000000
+    field public static final int FLAG_ONE_SHOT = 1073741824; // 0x40000000
+    field public static final int FLAG_UPDATE_CURRENT = 134217728; // 0x8000000
+  }
+
+  public static class PendingIntent.CanceledException extends android.util.AndroidException {
+    ctor public PendingIntent.CanceledException();
+    ctor public PendingIntent.CanceledException(String);
+    ctor public PendingIntent.CanceledException(Exception);
+  }
+
+  public static interface PendingIntent.OnFinished {
+    method public void onSendFinished(android.app.PendingIntent, android.content.Intent, int, String, android.os.Bundle);
+  }
+
+  public final class Person implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @Nullable public String getKey();
+    method @Nullable public CharSequence getName();
+    method @Nullable public String getUri();
+    method public boolean isBot();
+    method public boolean isImportant();
+    method public android.app.Person.Builder toBuilder();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Person> CREATOR;
+  }
+
+  public static class Person.Builder {
+    ctor public Person.Builder();
+    method @NonNull public android.app.Person build();
+    method @NonNull public android.app.Person.Builder setBot(boolean);
+    method @NonNull public android.app.Person.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.Person.Builder setImportant(boolean);
+    method @NonNull public android.app.Person.Builder setKey(@Nullable String);
+    method @NonNull public android.app.Person.Builder setName(@Nullable CharSequence);
+    method @NonNull public android.app.Person.Builder setUri(@Nullable String);
+  }
+
+  public final class PictureInPictureParams implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.PictureInPictureParams> CREATOR;
+  }
+
+  public static class PictureInPictureParams.Builder {
+    ctor public PictureInPictureParams.Builder();
+    method public android.app.PictureInPictureParams build();
+    method public android.app.PictureInPictureParams.Builder setActions(java.util.List<android.app.RemoteAction>);
+    method public android.app.PictureInPictureParams.Builder setAspectRatio(android.util.Rational);
+    method @NonNull public android.app.PictureInPictureParams.Builder setAutoEnterEnabled(boolean);
+    method @NonNull public android.app.PictureInPictureParams.Builder setSeamlessResizeEnabled(boolean);
+    method public android.app.PictureInPictureParams.Builder setSourceRectHint(android.graphics.Rect);
+  }
+
+  public final class PictureInPictureUiState implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isStashed();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.PictureInPictureUiState> CREATOR;
+  }
+
+  public class Presentation extends android.app.Dialog {
+    ctor public Presentation(android.content.Context, android.view.Display);
+    ctor public Presentation(android.content.Context, android.view.Display, int);
+    method public android.view.Display getDisplay();
+    method public android.content.res.Resources getResources();
+    method public void onDisplayChanged();
+    method public void onDisplayRemoved();
+  }
+
+  @Deprecated public class ProgressDialog extends android.app.AlertDialog {
+    ctor @Deprecated public ProgressDialog(android.content.Context);
+    ctor @Deprecated public ProgressDialog(android.content.Context, int);
+    method @Deprecated public int getMax();
+    method @Deprecated public int getProgress();
+    method @Deprecated public int getSecondaryProgress();
+    method @Deprecated public void incrementProgressBy(int);
+    method @Deprecated public void incrementSecondaryProgressBy(int);
+    method @Deprecated public boolean isIndeterminate();
+    method @Deprecated public void onStart();
+    method @Deprecated public void setIndeterminate(boolean);
+    method @Deprecated public void setIndeterminateDrawable(android.graphics.drawable.Drawable);
+    method @Deprecated public void setMax(int);
+    method @Deprecated public void setProgress(int);
+    method @Deprecated public void setProgressDrawable(android.graphics.drawable.Drawable);
+    method @Deprecated public void setProgressNumberFormat(String);
+    method @Deprecated public void setProgressPercentFormat(java.text.NumberFormat);
+    method @Deprecated public void setProgressStyle(int);
+    method @Deprecated public void setSecondaryProgress(int);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence, boolean);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence, boolean, boolean);
+    method @Deprecated public static android.app.ProgressDialog show(android.content.Context, CharSequence, CharSequence, boolean, boolean, android.content.DialogInterface.OnCancelListener);
+    field @Deprecated public static final int STYLE_HORIZONTAL = 1; // 0x1
+    field @Deprecated public static final int STYLE_SPINNER = 0; // 0x0
+  }
+
+  public final class RecoverableSecurityException extends java.lang.SecurityException implements android.os.Parcelable {
+    ctor public RecoverableSecurityException(@NonNull Throwable, @NonNull CharSequence, @NonNull android.app.RemoteAction);
+    method public int describeContents();
+    method @NonNull public android.app.RemoteAction getUserAction();
+    method @NonNull public CharSequence getUserMessage();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RecoverableSecurityException> CREATOR;
+  }
+
+  public final class RemoteAction implements android.os.Parcelable {
+    ctor public RemoteAction(@NonNull android.graphics.drawable.Icon, @NonNull CharSequence, @NonNull CharSequence, @NonNull android.app.PendingIntent);
+    method public android.app.RemoteAction clone();
+    method public int describeContents();
+    method public void dump(String, java.io.PrintWriter);
+    method @NonNull public android.app.PendingIntent getActionIntent();
+    method @NonNull public CharSequence getContentDescription();
+    method @NonNull public android.graphics.drawable.Icon getIcon();
+    method @NonNull public CharSequence getTitle();
+    method public boolean isEnabled();
+    method public void setEnabled(boolean);
+    method public void setShouldShowIcon(boolean);
+    method public boolean shouldShowIcon();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RemoteAction> CREATOR;
+  }
+
+  public final class RemoteInput implements android.os.Parcelable {
+    method public static void addDataResultToIntent(android.app.RemoteInput, android.content.Intent, java.util.Map<java.lang.String,android.net.Uri>);
+    method public static void addResultsToIntent(android.app.RemoteInput[], android.content.Intent, android.os.Bundle);
+    method public int describeContents();
+    method public boolean getAllowFreeFormInput();
+    method public java.util.Set<java.lang.String> getAllowedDataTypes();
+    method public CharSequence[] getChoices();
+    method public static java.util.Map<java.lang.String,android.net.Uri> getDataResultsFromIntent(android.content.Intent, String);
+    method public int getEditChoicesBeforeSending();
+    method public android.os.Bundle getExtras();
+    method public CharSequence getLabel();
+    method public String getResultKey();
+    method public static android.os.Bundle getResultsFromIntent(android.content.Intent);
+    method public static int getResultsSource(android.content.Intent);
+    method public boolean isDataOnly();
+    method public static void setResultsSource(android.content.Intent, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RemoteInput> CREATOR;
+    field public static final int EDIT_CHOICES_BEFORE_SENDING_AUTO = 0; // 0x0
+    field public static final int EDIT_CHOICES_BEFORE_SENDING_DISABLED = 1; // 0x1
+    field public static final int EDIT_CHOICES_BEFORE_SENDING_ENABLED = 2; // 0x2
+    field public static final String EXTRA_RESULTS_DATA = "android.remoteinput.resultsData";
+    field public static final String RESULTS_CLIP_LABEL = "android.remoteinput.results";
+    field public static final int SOURCE_CHOICE = 1; // 0x1
+    field public static final int SOURCE_FREE_FORM_INPUT = 0; // 0x0
+  }
+
+  public static final class RemoteInput.Builder {
+    ctor public RemoteInput.Builder(@NonNull String);
+    method @NonNull public android.app.RemoteInput.Builder addExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.RemoteInput build();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public android.app.RemoteInput.Builder setAllowDataType(@NonNull String, boolean);
+    method @NonNull public android.app.RemoteInput.Builder setAllowFreeFormInput(boolean);
+    method @NonNull public android.app.RemoteInput.Builder setChoices(@Nullable CharSequence[]);
+    method @NonNull public android.app.RemoteInput.Builder setEditChoicesBeforeSending(int);
+    method @NonNull public android.app.RemoteInput.Builder setLabel(@Nullable CharSequence);
+  }
+
+  public class SearchManager implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    method public android.content.ComponentName getGlobalSearchActivity();
+    method public android.app.SearchableInfo getSearchableInfo(android.content.ComponentName);
+    method public java.util.List<android.app.SearchableInfo> getSearchablesInGlobalSearch();
+    method @Deprecated public void onCancel(android.content.DialogInterface);
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method public void setOnCancelListener(android.app.SearchManager.OnCancelListener);
+    method public void setOnDismissListener(android.app.SearchManager.OnDismissListener);
+    method public void startSearch(String, boolean, android.content.ComponentName, android.os.Bundle, boolean);
+    method public void stopSearch();
+    method public void triggerSearch(String, android.content.ComponentName, android.os.Bundle);
+    field public static final String ACTION_KEY = "action_key";
+    field public static final String ACTION_MSG = "action_msg";
+    field public static final String APP_DATA = "app_data";
+    field public static final String CURSOR_EXTRA_KEY_IN_PROGRESS = "in_progress";
+    field public static final String EXTRA_DATA_KEY = "intent_extra_data_key";
+    field public static final String EXTRA_NEW_SEARCH = "new_search";
+    field public static final String EXTRA_SELECT_QUERY = "select_query";
+    field public static final String EXTRA_WEB_SEARCH_PENDINGINTENT = "web_search_pendingintent";
+    field public static final int FLAG_QUERY_REFINEMENT = 1; // 0x1
+    field public static final String INTENT_ACTION_GLOBAL_SEARCH = "android.search.action.GLOBAL_SEARCH";
+    field public static final String INTENT_ACTION_SEARCHABLES_CHANGED = "android.search.action.SEARCHABLES_CHANGED";
+    field public static final String INTENT_ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
+    field public static final String INTENT_ACTION_SEARCH_SETTINGS_CHANGED = "android.search.action.SETTINGS_CHANGED";
+    field public static final String INTENT_ACTION_WEB_SEARCH_SETTINGS = "android.search.action.WEB_SEARCH_SETTINGS";
+    field public static final String INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED = "android.search.action.GLOBAL_SEARCH_ACTIVITY_CHANGED";
+    field public static final char MENU_KEY = 115; // 0x0073 's'
+    field public static final int MENU_KEYCODE = 47; // 0x2f
+    field public static final String QUERY = "query";
+    field public static final String SHORTCUT_MIME_TYPE = "vnd.android.cursor.item/vnd.android.search.suggest";
+    field public static final String SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG = "suggest_audio_channel_config";
+    field public static final String SUGGEST_COLUMN_CONTENT_TYPE = "suggest_content_type";
+    field public static final String SUGGEST_COLUMN_DURATION = "suggest_duration";
+    field public static final String SUGGEST_COLUMN_FLAGS = "suggest_flags";
+    field public static final String SUGGEST_COLUMN_FORMAT = "suggest_format";
+    field public static final String SUGGEST_COLUMN_ICON_1 = "suggest_icon_1";
+    field public static final String SUGGEST_COLUMN_ICON_2 = "suggest_icon_2";
+    field public static final String SUGGEST_COLUMN_INTENT_ACTION = "suggest_intent_action";
+    field public static final String SUGGEST_COLUMN_INTENT_DATA = "suggest_intent_data";
+    field public static final String SUGGEST_COLUMN_INTENT_DATA_ID = "suggest_intent_data_id";
+    field public static final String SUGGEST_COLUMN_INTENT_EXTRA_DATA = "suggest_intent_extra_data";
+    field public static final String SUGGEST_COLUMN_IS_LIVE = "suggest_is_live";
+    field public static final String SUGGEST_COLUMN_LAST_ACCESS_HINT = "suggest_last_access_hint";
+    field public static final String SUGGEST_COLUMN_PRODUCTION_YEAR = "suggest_production_year";
+    field public static final String SUGGEST_COLUMN_PURCHASE_PRICE = "suggest_purchase_price";
+    field public static final String SUGGEST_COLUMN_QUERY = "suggest_intent_query";
+    field public static final String SUGGEST_COLUMN_RATING_SCORE = "suggest_rating_score";
+    field public static final String SUGGEST_COLUMN_RATING_STYLE = "suggest_rating_style";
+    field public static final String SUGGEST_COLUMN_RENTAL_PRICE = "suggest_rental_price";
+    field public static final String SUGGEST_COLUMN_RESULT_CARD_IMAGE = "suggest_result_card_image";
+    field public static final String SUGGEST_COLUMN_SHORTCUT_ID = "suggest_shortcut_id";
+    field public static final String SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING = "suggest_spinner_while_refreshing";
+    field public static final String SUGGEST_COLUMN_TEXT_1 = "suggest_text_1";
+    field public static final String SUGGEST_COLUMN_TEXT_2 = "suggest_text_2";
+    field public static final String SUGGEST_COLUMN_TEXT_2_URL = "suggest_text_2_url";
+    field public static final String SUGGEST_COLUMN_VIDEO_HEIGHT = "suggest_video_height";
+    field public static final String SUGGEST_COLUMN_VIDEO_WIDTH = "suggest_video_width";
+    field public static final String SUGGEST_MIME_TYPE = "vnd.android.cursor.dir/vnd.android.search.suggest";
+    field public static final String SUGGEST_NEVER_MAKE_SHORTCUT = "_-1";
+    field public static final String SUGGEST_PARAMETER_LIMIT = "limit";
+    field public static final String SUGGEST_URI_PATH_QUERY = "search_suggest_query";
+    field public static final String SUGGEST_URI_PATH_SHORTCUT = "search_suggest_shortcut";
+    field public static final String USER_QUERY = "user_query";
+  }
+
+  public static interface SearchManager.OnCancelListener {
+    method public void onCancel();
+  }
+
+  public static interface SearchManager.OnDismissListener {
+    method public void onDismiss();
+  }
+
+  public final class SearchableInfo implements android.os.Parcelable {
+    method public boolean autoUrlDetect();
+    method public int describeContents();
+    method public int getHintId();
+    method public int getImeOptions();
+    method public int getInputType();
+    method public android.content.ComponentName getSearchActivity();
+    method public int getSettingsDescriptionId();
+    method public String getSuggestAuthority();
+    method public String getSuggestIntentAction();
+    method public String getSuggestIntentData();
+    method public String getSuggestPackage();
+    method public String getSuggestPath();
+    method public String getSuggestSelection();
+    method public int getSuggestThreshold();
+    method @StringRes public int getVoiceLanguageId();
+    method @StringRes public int getVoiceLanguageModeId();
+    method public int getVoiceMaxResults();
+    method @StringRes public int getVoicePromptTextId();
+    method public boolean getVoiceSearchEnabled();
+    method public boolean getVoiceSearchLaunchRecognizer();
+    method public boolean getVoiceSearchLaunchWebSearch();
+    method public boolean queryAfterZeroResults();
+    method public boolean shouldIncludeInGlobalSearch();
+    method public boolean shouldRewriteQueryFromData();
+    method public boolean shouldRewriteQueryFromText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.SearchableInfo> CREATOR;
+  }
+
+  public abstract class Service extends android.content.ContextWrapper implements android.content.ComponentCallbacks2 {
+    ctor public Service();
+    method protected void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public final android.app.Application getApplication();
+    method public final int getForegroundServiceType();
+    method @Nullable public abstract android.os.IBinder onBind(android.content.Intent);
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onCreate();
+    method public void onDestroy();
+    method public void onLowMemory();
+    method public void onRebind(android.content.Intent);
+    method @Deprecated public void onStart(android.content.Intent, int);
+    method public int onStartCommand(android.content.Intent, int, int);
+    method public void onTaskRemoved(android.content.Intent);
+    method public void onTrimMemory(int);
+    method public boolean onUnbind(android.content.Intent);
+    method public final void startForeground(int, android.app.Notification);
+    method public final void startForeground(int, @NonNull android.app.Notification, int);
+    method public final void stopForeground(boolean);
+    method public final void stopForeground(int);
+    method public final void stopSelf();
+    method public final void stopSelf(int);
+    method public final boolean stopSelfResult(int);
+    field public static final int START_CONTINUATION_MASK = 15; // 0xf
+    field public static final int START_FLAG_REDELIVERY = 1; // 0x1
+    field public static final int START_FLAG_RETRY = 2; // 0x2
+    field public static final int START_NOT_STICKY = 2; // 0x2
+    field public static final int START_REDELIVER_INTENT = 3; // 0x3
+    field public static final int START_STICKY = 1; // 0x1
+    field public static final int START_STICKY_COMPATIBILITY = 0; // 0x0
+    field public static final int STOP_FOREGROUND_DETACH = 2; // 0x2
+    field public static final int STOP_FOREGROUND_REMOVE = 1; // 0x1
+  }
+
+  public abstract class ServiceStartNotAllowedException extends java.lang.IllegalStateException {
+  }
+
+  public abstract class SharedElementCallback {
+    ctor public SharedElementCallback();
+    method public android.os.Parcelable onCaptureSharedElementSnapshot(android.view.View, android.graphics.Matrix, android.graphics.RectF);
+    method public android.view.View onCreateSnapshotView(android.content.Context, android.os.Parcelable);
+    method public void onMapSharedElements(java.util.List<java.lang.String>, java.util.Map<java.lang.String,android.view.View>);
+    method public void onRejectSharedElements(java.util.List<android.view.View>);
+    method public void onSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+    method public void onSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+    method public void onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.app.SharedElementCallback.OnSharedElementsReadyListener);
+  }
+
+  public static interface SharedElementCallback.OnSharedElementsReadyListener {
+    method public void onSharedElementsReady();
+  }
+
+  public class StatusBarManager {
+  }
+
+  public final class SyncNotedAppOp implements android.os.Parcelable {
+    ctor public SyncNotedAppOp(@IntRange(from=0L) int, @Nullable String);
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @NonNull public String getOp();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.SyncNotedAppOp> CREATOR;
+  }
+
+  @Deprecated public class TabActivity extends android.app.ActivityGroup {
+    ctor @Deprecated public TabActivity();
+    method @Deprecated public android.widget.TabHost getTabHost();
+    method @Deprecated public android.widget.TabWidget getTabWidget();
+    method @Deprecated public void setDefaultTab(String);
+    method @Deprecated public void setDefaultTab(int);
+  }
+
+  public class TaskInfo {
+    method public boolean isVisible();
+    field @Nullable public android.content.ComponentName baseActivity;
+    field @NonNull public android.content.Intent baseIntent;
+    field public boolean isRunning;
+    field public int numActivities;
+    field @Nullable public android.content.ComponentName origActivity;
+    field @Nullable public android.app.ActivityManager.TaskDescription taskDescription;
+    field public int taskId;
+    field @Nullable public android.content.ComponentName topActivity;
+  }
+
+  public class TaskStackBuilder {
+    method public android.app.TaskStackBuilder addNextIntent(android.content.Intent);
+    method public android.app.TaskStackBuilder addNextIntentWithParentStack(android.content.Intent);
+    method public android.app.TaskStackBuilder addParentStack(android.app.Activity);
+    method public android.app.TaskStackBuilder addParentStack(Class<?>);
+    method public android.app.TaskStackBuilder addParentStack(android.content.ComponentName);
+    method public static android.app.TaskStackBuilder create(android.content.Context);
+    method public android.content.Intent editIntentAt(int);
+    method public int getIntentCount();
+    method @NonNull public android.content.Intent[] getIntents();
+    method public android.app.PendingIntent getPendingIntent(int, int);
+    method public android.app.PendingIntent getPendingIntent(int, int, android.os.Bundle);
+    method public void startActivities();
+    method public void startActivities(android.os.Bundle);
+  }
+
+  public class TimePickerDialog extends android.app.AlertDialog implements android.content.DialogInterface.OnClickListener android.widget.TimePicker.OnTimeChangedListener {
+    ctor public TimePickerDialog(android.content.Context, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean);
+    ctor public TimePickerDialog(android.content.Context, int, android.app.TimePickerDialog.OnTimeSetListener, int, int, boolean);
+    method public void onClick(android.content.DialogInterface, int);
+    method public void onTimeChanged(android.widget.TimePicker, int, int);
+    method public void updateTime(int, int);
+  }
+
+  public static interface TimePickerDialog.OnTimeSetListener {
+    method public void onTimeSet(android.widget.TimePicker, int, int);
+  }
+
+  public final class UiAutomation {
+    method public void adoptShellPermissionIdentity();
+    method public void adoptShellPermissionIdentity(@Nullable java.lang.String...);
+    method public void clearWindowAnimationFrameStats();
+    method public boolean clearWindowContentFrameStats(int);
+    method public void dropShellPermissionIdentity();
+    method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;
+    method public android.os.ParcelFileDescriptor executeShellCommand(String);
+    method @NonNull public android.os.ParcelFileDescriptor[] executeShellCommandRw(@NonNull String);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
+    method public android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
+    method public android.view.WindowAnimationFrameStats getWindowAnimationFrameStats();
+    method public android.view.WindowContentFrameStats getWindowContentFrameStats(int);
+    method public java.util.List<android.view.accessibility.AccessibilityWindowInfo> getWindows();
+    method @NonNull public android.util.SparseArray<java.util.List<android.view.accessibility.AccessibilityWindowInfo>> getWindowsOnAllDisplays();
+    method public void grantRuntimePermission(String, String);
+    method public void grantRuntimePermissionAsUser(String, String, android.os.UserHandle);
+    method public boolean injectInputEvent(android.view.InputEvent, boolean);
+    method public boolean performGlobalAction(int);
+    method public void revokeRuntimePermission(String, String);
+    method public void revokeRuntimePermissionAsUser(String, String, android.os.UserHandle);
+    method public void setOnAccessibilityEventListener(android.app.UiAutomation.OnAccessibilityEventListener);
+    method public boolean setRotation(int);
+    method public void setRunAsMonkey(boolean);
+    method public void setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo);
+    method public android.graphics.Bitmap takeScreenshot();
+    method public void waitForIdle(long, long) throws java.util.concurrent.TimeoutException;
+    field public static final int FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES = 1; // 0x1
+    field public static final int FLAG_DONT_USE_ACCESSIBILITY = 2; // 0x2
+    field public static final int ROTATION_FREEZE_0 = 0; // 0x0
+    field public static final int ROTATION_FREEZE_180 = 2; // 0x2
+    field public static final int ROTATION_FREEZE_270 = 3; // 0x3
+    field public static final int ROTATION_FREEZE_90 = 1; // 0x1
+    field public static final int ROTATION_FREEZE_CURRENT = -1; // 0xffffffff
+    field public static final int ROTATION_UNFREEZE = -2; // 0xfffffffe
+  }
+
+  public static interface UiAutomation.AccessibilityEventFilter {
+    method public boolean accept(android.view.accessibility.AccessibilityEvent);
+  }
+
+  public static interface UiAutomation.OnAccessibilityEventListener {
+    method public void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+  }
+
+  public class UiModeManager {
+    method public void disableCarMode(int);
+    method public void enableCarMode(int);
+    method public int getCurrentModeType();
+    method @NonNull public java.time.LocalTime getCustomNightModeEnd();
+    method @NonNull public java.time.LocalTime getCustomNightModeStart();
+    method public int getNightMode();
+    method public void setApplicationNightMode(int);
+    method public void setCustomNightModeEnd(@NonNull java.time.LocalTime);
+    method public void setCustomNightModeStart(@NonNull java.time.LocalTime);
+    method public void setNightMode(int);
+    field public static String ACTION_ENTER_CAR_MODE;
+    field public static String ACTION_ENTER_DESK_MODE;
+    field public static String ACTION_EXIT_CAR_MODE;
+    field public static String ACTION_EXIT_DESK_MODE;
+    field public static final int DISABLE_CAR_MODE_GO_HOME = 1; // 0x1
+    field public static final int ENABLE_CAR_MODE_ALLOW_SLEEP = 2; // 0x2
+    field public static final int ENABLE_CAR_MODE_GO_CAR_HOME = 1; // 0x1
+    field public static final int MODE_NIGHT_AUTO = 0; // 0x0
+    field public static final int MODE_NIGHT_CUSTOM = 3; // 0x3
+    field public static final int MODE_NIGHT_NO = 1; // 0x1
+    field public static final int MODE_NIGHT_YES = 2; // 0x2
+  }
+
+  public final class VoiceInteractor {
+    method public android.app.VoiceInteractor.Request getActiveRequest(String);
+    method public android.app.VoiceInteractor.Request[] getActiveRequests();
+    method public boolean isDestroyed();
+    method public void notifyDirectActionsChanged();
+    method public boolean registerOnDestroyedCallback(@NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method public boolean submitRequest(android.app.VoiceInteractor.Request);
+    method public boolean submitRequest(android.app.VoiceInteractor.Request, String);
+    method public boolean[] supportsCommands(String[]);
+    method public boolean unregisterOnDestroyedCallback(@NonNull Runnable);
+  }
+
+  public static class VoiceInteractor.AbortVoiceRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.AbortVoiceRequest(@Nullable android.app.VoiceInteractor.Prompt, @Nullable android.os.Bundle);
+    method public void onAbortResult(android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.CommandRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.CommandRequest(String, android.os.Bundle);
+    method public void onCommandResult(boolean, android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.CompleteVoiceRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.CompleteVoiceRequest(@Nullable android.app.VoiceInteractor.Prompt, @Nullable android.os.Bundle);
+    method public void onCompleteResult(android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.ConfirmationRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.ConfirmationRequest(@Nullable android.app.VoiceInteractor.Prompt, @Nullable android.os.Bundle);
+    method public void onConfirmationResult(boolean, android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.PickOptionRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.PickOptionRequest(@Nullable android.app.VoiceInteractor.Prompt, android.app.VoiceInteractor.PickOptionRequest.Option[], @Nullable android.os.Bundle);
+    method public void onPickOptionResult(boolean, android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
+  }
+
+  public static final class VoiceInteractor.PickOptionRequest.Option implements android.os.Parcelable {
+    ctor public VoiceInteractor.PickOptionRequest.Option(CharSequence, int);
+    method public android.app.VoiceInteractor.PickOptionRequest.Option addSynonym(CharSequence);
+    method public int countSynonyms();
+    method public int describeContents();
+    method public android.os.Bundle getExtras();
+    method public int getIndex();
+    method public CharSequence getLabel();
+    method public CharSequence getSynonymAt(int);
+    method public void setExtras(android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.VoiceInteractor.PickOptionRequest.Option> CREATOR;
+  }
+
+  public static class VoiceInteractor.Prompt implements android.os.Parcelable {
+    ctor public VoiceInteractor.Prompt(@NonNull CharSequence[], @NonNull CharSequence);
+    ctor public VoiceInteractor.Prompt(@NonNull CharSequence);
+    method public int countVoicePrompts();
+    method public int describeContents();
+    method @NonNull public CharSequence getVisualPrompt();
+    method @NonNull public CharSequence getVoicePromptAt(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.VoiceInteractor.Prompt> CREATOR;
+  }
+
+  public abstract static class VoiceInteractor.Request {
+    method public void cancel();
+    method public android.app.Activity getActivity();
+    method public android.content.Context getContext();
+    method public String getName();
+    method public void onAttached(android.app.Activity);
+    method public void onCancel();
+    method public void onDetached();
+  }
+
+  public final class WallpaperColors implements android.os.Parcelable {
+    ctor public WallpaperColors(android.os.Parcel);
+    ctor public WallpaperColors(@NonNull android.graphics.Color, @Nullable android.graphics.Color, @Nullable android.graphics.Color);
+    ctor public WallpaperColors(@NonNull android.graphics.Color, @Nullable android.graphics.Color, @Nullable android.graphics.Color, int);
+    method public int describeContents();
+    method public static android.app.WallpaperColors fromBitmap(@NonNull android.graphics.Bitmap);
+    method public static android.app.WallpaperColors fromDrawable(android.graphics.drawable.Drawable);
+    method public int getColorHints();
+    method @NonNull public android.graphics.Color getPrimaryColor();
+    method @Nullable public android.graphics.Color getSecondaryColor();
+    method @Nullable public android.graphics.Color getTertiaryColor();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperColors> CREATOR;
+    field public static final int HINT_SUPPORTS_DARK_TEXT = 1; // 0x1
+    field public static final int HINT_SUPPORTS_DARK_THEME = 2; // 0x2
+  }
+
+  public final class WallpaperInfo implements android.os.Parcelable {
+    ctor public WallpaperInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public android.content.ComponentName getComponent();
+    method public String getPackageName();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public String getServiceName();
+    method public String getSettingsActivity();
+    method @Nullable public android.net.Uri getSettingsSliceUri();
+    method public boolean getShowMetadataInPreview();
+    method public CharSequence loadAuthor(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public CharSequence loadContextDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public android.net.Uri loadContextUri(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadThumbnail(android.content.pm.PackageManager);
+    method public boolean shouldUseDefaultUnfoldTransition();
+    method public boolean supportsMultipleDisplays();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.WallpaperInfo> CREATOR;
+  }
+
+  public class WallpaperManager {
+    method public void addOnColorsChangedListener(@NonNull android.app.WallpaperManager.OnColorsChangedListener, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clear() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clear(int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void clearWallpaper();
+    method public void clearWallpaperOffsets(android.os.IBinder);
+    method public void forgetLoadedWallpaper();
+    method public android.graphics.drawable.Drawable getBuiltInDrawable();
+    method public android.graphics.drawable.Drawable getBuiltInDrawable(int);
+    method public android.graphics.drawable.Drawable getBuiltInDrawable(int, int, boolean, float, float);
+    method public android.graphics.drawable.Drawable getBuiltInDrawable(int, int, boolean, float, float, int);
+    method public android.content.Intent getCropAndSetWallpaperIntent(android.net.Uri);
+    method public int getDesiredMinimumHeight();
+    method public int getDesiredMinimumWidth();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.graphics.drawable.Drawable getDrawable();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.graphics.drawable.Drawable getFastDrawable();
+    method public static android.app.WallpaperManager getInstance(android.content.Context);
+    method @Nullable public android.app.WallpaperColors getWallpaperColors(int);
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.os.ParcelFileDescriptor getWallpaperFile(int);
+    method public int getWallpaperId(int);
+    method public android.app.WallpaperInfo getWallpaperInfo();
+    method public boolean hasResourceWallpaper(@RawRes int);
+    method public boolean isSetWallpaperAllowed();
+    method public boolean isWallpaperSupported();
+    method public android.graphics.drawable.Drawable peekDrawable();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public android.graphics.drawable.Drawable peekFastDrawable();
+    method public void removeOnColorsChangedListener(@NonNull android.app.WallpaperManager.OnColorsChangedListener);
+    method public void sendWallpaperCommand(android.os.IBinder, String, int, int, int, android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void setBitmap(android.graphics.Bitmap) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setBitmap(android.graphics.Bitmap, android.graphics.Rect, boolean, int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_HINTS) public void setDisplayPadding(android.graphics.Rect);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void setResource(@RawRes int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setResource(@RawRes int, int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public void setStream(java.io.InputStream) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStream(java.io.InputStream, android.graphics.Rect, boolean) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER) public int setStream(java.io.InputStream, android.graphics.Rect, boolean, int) throws java.io.IOException;
+    method public void setWallpaperOffsetSteps(float, float);
+    method public void setWallpaperOffsets(android.os.IBinder, float, float);
+    method public void suggestDesiredDimensions(int, int);
+    field public static final String ACTION_CHANGE_LIVE_WALLPAPER = "android.service.wallpaper.CHANGE_LIVE_WALLPAPER";
+    field public static final String ACTION_CROP_AND_SET_WALLPAPER = "android.service.wallpaper.CROP_AND_SET_WALLPAPER";
+    field public static final String ACTION_LIVE_WALLPAPER_CHOOSER = "android.service.wallpaper.LIVE_WALLPAPER_CHOOSER";
+    field public static final String COMMAND_DROP = "android.home.drop";
+    field public static final String COMMAND_SECONDARY_TAP = "android.wallpaper.secondaryTap";
+    field public static final String COMMAND_TAP = "android.wallpaper.tap";
+    field public static final String EXTRA_LIVE_WALLPAPER_COMPONENT = "android.service.wallpaper.extra.LIVE_WALLPAPER_COMPONENT";
+    field public static final int FLAG_LOCK = 2; // 0x2
+    field public static final int FLAG_SYSTEM = 1; // 0x1
+    field public static final String WALLPAPER_PREVIEW_META_DATA = "android.wallpaper.preview";
+  }
+
+  public static interface WallpaperManager.OnColorsChangedListener {
+    method public void onColorsChanged(android.app.WallpaperColors, int);
+  }
+
+  public interface ZygotePreload {
+    method public void doPreload(@NonNull android.content.pm.ApplicationInfo);
+  }
+
+}
+
+package android.app.admin {
+
+  public final class ConnectEvent extends android.app.admin.NetworkEvent implements android.os.Parcelable {
+    method public java.net.InetAddress getInetAddress();
+    method public int getPort();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.ConnectEvent> CREATOR;
+  }
+
+  public class DelegatedAdminReceiver extends android.content.BroadcastReceiver {
+    ctor public DelegatedAdminReceiver();
+    method @Nullable public String onChoosePrivateKeyAlias(@NonNull android.content.Context, @NonNull android.content.Intent, int, @Nullable android.net.Uri, @Nullable String);
+    method public void onNetworkLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent, long, @IntRange(from=1) int);
+    method public final void onReceive(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onSecurityLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent);
+  }
+
+  public final class DeviceAdminInfo implements android.os.Parcelable {
+    ctor public DeviceAdminInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public android.content.pm.ActivityInfo getActivityInfo();
+    method @NonNull public android.content.ComponentName getComponent();
+    method public String getPackageName();
+    method public String getReceiverName();
+    method public String getTagForPolicy(int);
+    method public boolean isVisible();
+    method public CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public boolean supportsTransferOwnership();
+    method public boolean usesPolicy(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.DeviceAdminInfo> CREATOR;
+    field public static final int USES_ENCRYPTED_STORAGE = 7; // 0x7
+    field public static final int USES_POLICY_DISABLE_CAMERA = 8; // 0x8
+    field public static final int USES_POLICY_DISABLE_KEYGUARD_FEATURES = 9; // 0x9
+    field public static final int USES_POLICY_EXPIRE_PASSWORD = 6; // 0x6
+    field public static final int USES_POLICY_FORCE_LOCK = 3; // 0x3
+    field public static final int USES_POLICY_LIMIT_PASSWORD = 0; // 0x0
+    field public static final int USES_POLICY_RESET_PASSWORD = 2; // 0x2
+    field public static final int USES_POLICY_WATCH_LOGIN = 1; // 0x1
+    field public static final int USES_POLICY_WIPE_DATA = 4; // 0x4
+  }
+
+  public class DeviceAdminReceiver extends android.content.BroadcastReceiver {
+    ctor public DeviceAdminReceiver();
+    method @NonNull public android.app.admin.DevicePolicyManager getManager(@NonNull android.content.Context);
+    method @NonNull public android.content.ComponentName getWho(@NonNull android.content.Context);
+    method public void onBugreportFailed(@NonNull android.content.Context, @NonNull android.content.Intent, int);
+    method public void onBugreportShared(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull String);
+    method public void onBugreportSharingDeclined(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method @Nullable public String onChoosePrivateKeyAlias(@NonNull android.content.Context, @NonNull android.content.Intent, int, @Nullable android.net.Uri, @Nullable String);
+    method public void onComplianceAcknowledgementRequired(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method @Nullable public CharSequence onDisableRequested(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onDisabled(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onEnabled(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onLockTaskModeEntering(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull String);
+    method public void onLockTaskModeExiting(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onNetworkLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent, long, @IntRange(from=1) int);
+    method public void onOperationSafetyStateChanged(@NonNull android.content.Context, int, boolean);
+    method @Deprecated public void onPasswordChanged(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordChanged(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method @Deprecated public void onPasswordExpiring(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordExpiring(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method @Deprecated public void onPasswordFailed(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordFailed(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method @Deprecated public void onPasswordSucceeded(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onPasswordSucceeded(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onProfileProvisioningComplete(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method @Deprecated public void onReadyForUserInitialization(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onReceive(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onSecurityLogsAvailable(@NonNull android.content.Context, @NonNull android.content.Intent);
+    method public void onSystemUpdatePending(@NonNull android.content.Context, @NonNull android.content.Intent, long);
+    method public void onTransferAffiliatedProfileOwnershipComplete(@NonNull android.content.Context, @NonNull android.os.UserHandle);
+    method public void onTransferOwnershipComplete(@NonNull android.content.Context, @Nullable android.os.PersistableBundle);
+    method public void onUserAdded(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserRemoved(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserStarted(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserStopped(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    method public void onUserSwitched(@NonNull android.content.Context, @NonNull android.content.Intent, @NonNull android.os.UserHandle);
+    field public static final String ACTION_CHOOSE_PRIVATE_KEY_ALIAS = "android.app.action.CHOOSE_PRIVATE_KEY_ALIAS";
+    field public static final String ACTION_DEVICE_ADMIN_DISABLED = "android.app.action.DEVICE_ADMIN_DISABLED";
+    field public static final String ACTION_DEVICE_ADMIN_DISABLE_REQUESTED = "android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED";
+    field public static final String ACTION_DEVICE_ADMIN_ENABLED = "android.app.action.DEVICE_ADMIN_ENABLED";
+    field public static final String ACTION_LOCK_TASK_ENTERING = "android.app.action.LOCK_TASK_ENTERING";
+    field public static final String ACTION_LOCK_TASK_EXITING = "android.app.action.LOCK_TASK_EXITING";
+    field public static final String ACTION_NETWORK_LOGS_AVAILABLE = "android.app.action.NETWORK_LOGS_AVAILABLE";
+    field public static final String ACTION_PASSWORD_CHANGED = "android.app.action.ACTION_PASSWORD_CHANGED";
+    field public static final String ACTION_PASSWORD_EXPIRING = "android.app.action.ACTION_PASSWORD_EXPIRING";
+    field public static final String ACTION_PASSWORD_FAILED = "android.app.action.ACTION_PASSWORD_FAILED";
+    field public static final String ACTION_PASSWORD_SUCCEEDED = "android.app.action.ACTION_PASSWORD_SUCCEEDED";
+    field public static final String ACTION_PROFILE_PROVISIONING_COMPLETE = "android.app.action.PROFILE_PROVISIONING_COMPLETE";
+    field public static final String ACTION_SECURITY_LOGS_AVAILABLE = "android.app.action.SECURITY_LOGS_AVAILABLE";
+    field public static final int BUGREPORT_FAILURE_FAILED_COMPLETING = 0; // 0x0
+    field public static final int BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE = 1; // 0x1
+    field public static final String DEVICE_ADMIN_META_DATA = "android.app.device_admin";
+    field public static final String EXTRA_DISABLE_WARNING = "android.app.extra.DISABLE_WARNING";
+    field public static final String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE";
+    field public static final String EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE = "android.app.extra.TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE";
+  }
+
+  public class DeviceAdminService extends android.app.Service {
+    ctor public DeviceAdminService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+  }
+
+  public class DevicePolicyManager {
+    method public void acknowledgeDeviceCompliant();
+    method public void addCrossProfileIntentFilter(@NonNull android.content.ComponentName, android.content.IntentFilter, int);
+    method public boolean addCrossProfileWidgetProvider(@NonNull android.content.ComponentName, String);
+    method public int addOverrideApn(@NonNull android.content.ComponentName, @NonNull android.telephony.data.ApnSetting);
+    method public void addPersistentPreferredActivity(@NonNull android.content.ComponentName, android.content.IntentFilter, @NonNull android.content.ComponentName);
+    method public void addUserRestriction(@NonNull android.content.ComponentName, String);
+    method public boolean bindDeviceAdminServiceAsUser(@NonNull android.content.ComponentName, android.content.Intent, @NonNull android.content.ServiceConnection, int, @NonNull android.os.UserHandle);
+    method public boolean canAdminGrantSensorsPermissions();
+    method public boolean canUsbDataSignalingBeDisabled();
+    method public void clearApplicationUserData(@NonNull android.content.ComponentName, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.app.admin.DevicePolicyManager.OnClearApplicationUserDataListener);
+    method public void clearCrossProfileIntentFilters(@NonNull android.content.ComponentName);
+    method @Deprecated public void clearDeviceOwnerApp(String);
+    method public void clearPackagePersistentPreferredActivities(@NonNull android.content.ComponentName, String);
+    method @Deprecated public void clearProfileOwner(@NonNull android.content.ComponentName);
+    method public boolean clearResetPasswordToken(android.content.ComponentName);
+    method public void clearUserRestriction(@NonNull android.content.ComponentName, String);
+    method public android.content.Intent createAdminSupportIntent(@NonNull String);
+    method @Nullable public android.os.UserHandle createAndManageUser(@NonNull android.content.ComponentName, @NonNull String, @NonNull android.content.ComponentName, @Nullable android.os.PersistableBundle, int);
+    method public void enableSystemApp(@NonNull android.content.ComponentName, String);
+    method public int enableSystemApp(@NonNull android.content.ComponentName, android.content.Intent);
+    method public android.security.AttestedKeyPair generateKeyPair(@Nullable android.content.ComponentName, @NonNull String, @NonNull android.security.keystore.KeyGenParameterSpec, int);
+    method @Nullable public String[] getAccountTypesWithManagementDisabled();
+    method @Nullable public java.util.List<android.content.ComponentName> getActiveAdmins();
+    method @NonNull public java.util.Set<java.lang.String> getAffiliationIds(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.Set<java.lang.String> getAlwaysOnVpnLockdownWhitelist(@NonNull android.content.ComponentName);
+    method @Nullable public String getAlwaysOnVpnPackage(@NonNull android.content.ComponentName);
+    method @NonNull @WorkerThread public android.os.Bundle getApplicationRestrictions(@Nullable android.content.ComponentName, String);
+    method @Deprecated @Nullable public String getApplicationRestrictionsManagingPackage(@NonNull android.content.ComponentName);
+    method public boolean getAutoTimeEnabled(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean getAutoTimeRequired();
+    method public boolean getAutoTimeZoneEnabled(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<android.os.UserHandle> getBindDeviceAdminTargetUsers(@NonNull android.content.ComponentName);
+    method public boolean getBluetoothContactSharingDisabled(@NonNull android.content.ComponentName);
+    method public boolean getCameraDisabled(@Nullable android.content.ComponentName);
+    method @Deprecated @Nullable public String getCertInstallerPackage(@NonNull android.content.ComponentName) throws java.lang.SecurityException;
+    method @Nullable public java.util.Set<java.lang.String> getCrossProfileCalendarPackages(@NonNull android.content.ComponentName);
+    method public boolean getCrossProfileCallerIdDisabled(@NonNull android.content.ComponentName);
+    method public boolean getCrossProfileContactsSearchDisabled(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.Set<java.lang.String> getCrossProfilePackages(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<java.lang.String> getCrossProfileWidgetProviders(@NonNull android.content.ComponentName);
+    method public int getCurrentFailedPasswordAttempts();
+    method @Nullable public java.util.List<java.lang.String> getDelegatePackages(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getDelegatedScopes(@Nullable android.content.ComponentName, @NonNull String);
+    method public CharSequence getDeviceOwnerLockScreenInfo();
+    method public CharSequence getEndUserSessionMessage(@NonNull android.content.ComponentName);
+    method @NonNull public String getEnrollmentSpecificId();
+    method @Nullable public android.app.admin.FactoryResetProtectionPolicy getFactoryResetProtectionPolicy(@Nullable android.content.ComponentName);
+    method @Nullable public String getGlobalPrivateDnsHost(@NonNull android.content.ComponentName);
+    method public int getGlobalPrivateDnsMode(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<byte[]> getInstalledCaCerts(@Nullable android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getKeepUninstalledPackages(@Nullable android.content.ComponentName);
+    method @NonNull public java.util.Map<java.lang.Integer,java.util.Set<java.lang.String>> getKeyPairGrants(@NonNull String);
+    method public int getKeyguardDisabledFeatures(@Nullable android.content.ComponentName);
+    method public int getLockTaskFeatures(@NonNull android.content.ComponentName);
+    method @NonNull public String[] getLockTaskPackages(@NonNull android.content.ComponentName);
+    method @Nullable public CharSequence getLongSupportMessage(@NonNull android.content.ComponentName);
+    method public long getManagedProfileMaximumTimeOff(@NonNull android.content.ComponentName);
+    method public int getMaximumFailedPasswordsForWipe(@Nullable android.content.ComponentName);
+    method public long getMaximumTimeToLock(@Nullable android.content.ComponentName);
+    method @NonNull public java.util.List<java.lang.String> getMeteredDataDisabledPackages(@NonNull android.content.ComponentName);
+    method public int getNearbyAppStreamingPolicy();
+    method public int getNearbyNotificationStreamingPolicy();
+    method @Deprecated @ColorInt public int getOrganizationColor(@NonNull android.content.ComponentName);
+    method @Nullable public CharSequence getOrganizationName(@NonNull android.content.ComponentName);
+    method public java.util.List<android.telephony.data.ApnSetting> getOverrideApns(@NonNull android.content.ComponentName);
+    method @NonNull public android.app.admin.DevicePolicyManager getParentProfileInstance(@NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.REQUEST_PASSWORD_COMPLEXITY) public int getPasswordComplexity();
+    method public long getPasswordExpiration(@Nullable android.content.ComponentName);
+    method public long getPasswordExpirationTimeout(@Nullable android.content.ComponentName);
+    method public int getPasswordHistoryLength(@Nullable android.content.ComponentName);
+    method public int getPasswordMaximumLength(int);
+    method @Deprecated public int getPasswordMinimumLength(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumLetters(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumLowerCase(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumNonLetter(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumNumeric(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumSymbols(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordMinimumUpperCase(@Nullable android.content.ComponentName);
+    method @Deprecated public int getPasswordQuality(@Nullable android.content.ComponentName);
+    method @Nullable public android.app.admin.SystemUpdateInfo getPendingSystemUpdate(@NonNull android.content.ComponentName);
+    method public int getPermissionGrantState(@Nullable android.content.ComponentName, @NonNull String, @NonNull String);
+    method public int getPermissionPolicy(android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getPermittedAccessibilityServices(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getPermittedCrossProfileNotificationListeners(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.List<java.lang.String> getPermittedInputMethods(@NonNull android.content.ComponentName);
+    method public int getPersonalAppsSuspendedReasons(@NonNull android.content.ComponentName);
+    method public int getRequiredPasswordComplexity();
+    method public long getRequiredStrongAuthTimeout(@Nullable android.content.ComponentName);
+    method public boolean getScreenCaptureDisabled(@Nullable android.content.ComponentName);
+    method public java.util.List<android.os.UserHandle> getSecondaryUsers(@NonNull android.content.ComponentName);
+    method public CharSequence getShortSupportMessage(@NonNull android.content.ComponentName);
+    method public CharSequence getStartUserSessionMessage(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean getStorageEncryption(@Nullable android.content.ComponentName);
+    method public int getStorageEncryptionStatus();
+    method @Nullable public android.app.admin.SystemUpdatePolicy getSystemUpdatePolicy();
+    method @Nullable public android.os.PersistableBundle getTransferOwnershipBundle();
+    method @Nullable public java.util.List<android.os.PersistableBundle> getTrustAgentConfiguration(@Nullable android.content.ComponentName, @NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<java.lang.String> getUserControlDisabledPackages(@NonNull android.content.ComponentName);
+    method @NonNull public android.os.Bundle getUserRestrictions(@NonNull android.content.ComponentName);
+    method @Nullable public String getWifiMacAddress(@NonNull android.content.ComponentName);
+    method public boolean grantKeyPairToApp(@Nullable android.content.ComponentName, @NonNull String, @NonNull String);
+    method public boolean grantKeyPairToWifiAuth(@NonNull String);
+    method public boolean hasCaCertInstalled(@Nullable android.content.ComponentName, byte[]);
+    method public boolean hasGrantedPolicy(@NonNull android.content.ComponentName, int);
+    method public boolean hasKeyPair(@NonNull String);
+    method public boolean hasLockdownAdminConfiguredNetworks(@NonNull android.content.ComponentName);
+    method public boolean installCaCert(@Nullable android.content.ComponentName, byte[]);
+    method public boolean installExistingPackage(@NonNull android.content.ComponentName, String);
+    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate, @NonNull String);
+    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate[], @NonNull String, boolean);
+    method public boolean installKeyPair(@Nullable android.content.ComponentName, @NonNull java.security.PrivateKey, @NonNull java.security.cert.Certificate[], @NonNull String, int);
+    method public void installSystemUpdate(@NonNull android.content.ComponentName, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.app.admin.DevicePolicyManager.InstallSystemUpdateCallback);
+    method public boolean isActivePasswordSufficient();
+    method public boolean isActivePasswordSufficientForDeviceRequirement();
+    method public boolean isAdminActive(@NonNull android.content.ComponentName);
+    method public boolean isAffiliatedUser();
+    method public boolean isAlwaysOnVpnLockdownEnabled(@NonNull android.content.ComponentName);
+    method public boolean isApplicationHidden(@NonNull android.content.ComponentName, String);
+    method public boolean isBackupServiceEnabled(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean isCallerApplicationRestrictionsManagingPackage();
+    method public boolean isCommonCriteriaModeEnabled(@Nullable android.content.ComponentName);
+    method public boolean isComplianceAcknowledgementRequired();
+    method public boolean isDeviceIdAttestationSupported();
+    method public boolean isDeviceOwnerApp(String);
+    method public boolean isEphemeralUser(@NonNull android.content.ComponentName);
+    method public boolean isKeyPairGrantedToWifiAuth(@NonNull String);
+    method public boolean isLockTaskPermitted(String);
+    method public boolean isLogoutEnabled();
+    method public boolean isManagedProfile(@NonNull android.content.ComponentName);
+    method public boolean isMasterVolumeMuted(@NonNull android.content.ComponentName);
+    method public boolean isNetworkLoggingEnabled(@Nullable android.content.ComponentName);
+    method public boolean isOrganizationOwnedDeviceWithManagedProfile();
+    method public boolean isOverrideApnEnabled(@NonNull android.content.ComponentName);
+    method public boolean isPackageSuspended(@NonNull android.content.ComponentName, String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean isPreferentialNetworkServiceEnabled();
+    method public boolean isProfileOwnerApp(String);
+    method public boolean isProvisioningAllowed(@NonNull String);
+    method public boolean isResetPasswordTokenActive(android.content.ComponentName);
+    method public boolean isSafeOperation(int);
+    method public boolean isSecurityLoggingEnabled(@Nullable android.content.ComponentName);
+    method public boolean isUninstallBlocked(@Nullable android.content.ComponentName, String);
+    method public boolean isUniqueDeviceAttestationSupported();
+    method public boolean isUsbDataSignalingEnabled();
+    method public boolean isUsingUnifiedPassword(@NonNull android.content.ComponentName);
+    method @NonNull public java.util.List<android.os.UserHandle> listForegroundAffiliatedUsers();
+    method public void lockNow();
+    method public void lockNow(int);
+    method public int logoutUser(@NonNull android.content.ComponentName);
+    method public void reboot(@NonNull android.content.ComponentName);
+    method public void removeActiveAdmin(@NonNull android.content.ComponentName);
+    method public boolean removeCrossProfileWidgetProvider(@NonNull android.content.ComponentName, String);
+    method public boolean removeKeyPair(@Nullable android.content.ComponentName, @NonNull String);
+    method public boolean removeOverrideApn(@NonNull android.content.ComponentName, int);
+    method public boolean removeUser(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public boolean requestBugreport(@NonNull android.content.ComponentName);
+    method @Deprecated public boolean resetPassword(String, int);
+    method public boolean resetPasswordWithToken(@NonNull android.content.ComponentName, String, byte[], int);
+    method @Nullable public java.util.List<android.app.admin.NetworkEvent> retrieveNetworkLogs(@Nullable android.content.ComponentName, long);
+    method @Nullable public java.util.List<android.app.admin.SecurityLog.SecurityEvent> retrievePreRebootSecurityLogs(@NonNull android.content.ComponentName);
+    method @Nullable public java.util.List<android.app.admin.SecurityLog.SecurityEvent> retrieveSecurityLogs(@NonNull android.content.ComponentName);
+    method public boolean revokeKeyPairFromApp(@Nullable android.content.ComponentName, @NonNull String, @NonNull String);
+    method public boolean revokeKeyPairFromWifiAuth(@NonNull String);
+    method public void setAccountManagementDisabled(@NonNull android.content.ComponentName, String, boolean);
+    method public void setAffiliationIds(@NonNull android.content.ComponentName, @NonNull java.util.Set<java.lang.String>);
+    method public void setAlwaysOnVpnPackage(@NonNull android.content.ComponentName, @Nullable String, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void setAlwaysOnVpnPackage(@NonNull android.content.ComponentName, @Nullable String, boolean, @Nullable java.util.Set<java.lang.String>) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean setApplicationHidden(@NonNull android.content.ComponentName, String, boolean);
+    method @WorkerThread public void setApplicationRestrictions(@Nullable android.content.ComponentName, String, android.os.Bundle);
+    method @Deprecated public void setApplicationRestrictionsManagingPackage(@NonNull android.content.ComponentName, @Nullable String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void setAutoTimeEnabled(@NonNull android.content.ComponentName, boolean);
+    method @Deprecated public void setAutoTimeRequired(@NonNull android.content.ComponentName, boolean);
+    method public void setAutoTimeZoneEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setBackupServiceEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setBluetoothContactSharingDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setCameraDisabled(@NonNull android.content.ComponentName, boolean);
+    method @Deprecated public void setCertInstallerPackage(@NonNull android.content.ComponentName, @Nullable String) throws java.lang.SecurityException;
+    method public void setCommonCriteriaModeEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setConfiguredNetworksLockdownState(@NonNull android.content.ComponentName, boolean);
+    method public void setCrossProfileCalendarPackages(@NonNull android.content.ComponentName, @Nullable java.util.Set<java.lang.String>);
+    method public void setCrossProfileCallerIdDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setCrossProfileContactsSearchDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setCrossProfilePackages(@NonNull android.content.ComponentName, @NonNull java.util.Set<java.lang.String>);
+    method public void setDefaultSmsApplication(@NonNull android.content.ComponentName, @NonNull String);
+    method public void setDelegatedScopes(@NonNull android.content.ComponentName, @NonNull String, @NonNull java.util.List<java.lang.String>);
+    method public void setDeviceOwnerLockScreenInfo(@NonNull android.content.ComponentName, CharSequence);
+    method public void setEndUserSessionMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setFactoryResetProtectionPolicy(@NonNull android.content.ComponentName, @Nullable android.app.admin.FactoryResetProtectionPolicy);
+    method public int setGlobalPrivateDnsModeOpportunistic(@NonNull android.content.ComponentName);
+    method @WorkerThread public int setGlobalPrivateDnsModeSpecifiedHost(@NonNull android.content.ComponentName, @NonNull String);
+    method public void setGlobalSetting(@NonNull android.content.ComponentName, String, String);
+    method public void setKeepUninstalledPackages(@Nullable android.content.ComponentName, @NonNull java.util.List<java.lang.String>);
+    method public boolean setKeyPairCertificate(@Nullable android.content.ComponentName, @NonNull String, @NonNull java.util.List<java.security.cert.Certificate>, boolean);
+    method public boolean setKeyguardDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setKeyguardDisabledFeatures(@NonNull android.content.ComponentName, int);
+    method public void setLocationEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setLockTaskFeatures(@NonNull android.content.ComponentName, int);
+    method public void setLockTaskPackages(@NonNull android.content.ComponentName, @NonNull String[]) throws java.lang.SecurityException;
+    method public void setLogoutEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setLongSupportMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setManagedProfileMaximumTimeOff(@NonNull android.content.ComponentName, long);
+    method public void setMasterVolumeMuted(@NonNull android.content.ComponentName, boolean);
+    method public void setMaximumFailedPasswordsForWipe(@NonNull android.content.ComponentName, int);
+    method public void setMaximumTimeToLock(@NonNull android.content.ComponentName, long);
+    method @NonNull public java.util.List<java.lang.String> setMeteredDataDisabledPackages(@NonNull android.content.ComponentName, @NonNull java.util.List<java.lang.String>);
+    method public void setNearbyAppStreamingPolicy(int);
+    method public void setNearbyNotificationStreamingPolicy(int);
+    method public void setNetworkLoggingEnabled(@Nullable android.content.ComponentName, boolean);
+    method @Deprecated public void setOrganizationColor(@NonNull android.content.ComponentName, int);
+    method public void setOrganizationId(@NonNull String);
+    method public void setOrganizationName(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setOverrideApnsEnabled(@NonNull android.content.ComponentName, boolean);
+    method @NonNull public String[] setPackagesSuspended(@NonNull android.content.ComponentName, @NonNull String[], boolean);
+    method public void setPasswordExpirationTimeout(@NonNull android.content.ComponentName, long);
+    method public void setPasswordHistoryLength(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumLength(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumLetters(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumLowerCase(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumNonLetter(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumNumeric(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumSymbols(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordMinimumUpperCase(@NonNull android.content.ComponentName, int);
+    method @Deprecated public void setPasswordQuality(@NonNull android.content.ComponentName, int);
+    method public boolean setPermissionGrantState(@NonNull android.content.ComponentName, @NonNull String, @NonNull String, int);
+    method public void setPermissionPolicy(@NonNull android.content.ComponentName, int);
+    method public boolean setPermittedAccessibilityServices(@NonNull android.content.ComponentName, java.util.List<java.lang.String>);
+    method public boolean setPermittedCrossProfileNotificationListeners(@NonNull android.content.ComponentName, @Nullable java.util.List<java.lang.String>);
+    method public boolean setPermittedInputMethods(@NonNull android.content.ComponentName, java.util.List<java.lang.String>);
+    method public void setPersonalAppsSuspended(@NonNull android.content.ComponentName, boolean);
+    method public void setPreferentialNetworkServiceEnabled(boolean);
+    method public void setProfileEnabled(@NonNull android.content.ComponentName);
+    method public void setProfileName(@NonNull android.content.ComponentName, String);
+    method public void setRecommendedGlobalProxy(@NonNull android.content.ComponentName, @Nullable android.net.ProxyInfo);
+    method public void setRequiredPasswordComplexity(int);
+    method public void setRequiredStrongAuthTimeout(@NonNull android.content.ComponentName, long);
+    method public boolean setResetPasswordToken(android.content.ComponentName, byte[]);
+    method public void setRestrictionsProvider(@NonNull android.content.ComponentName, @Nullable android.content.ComponentName);
+    method public void setScreenCaptureDisabled(@NonNull android.content.ComponentName, boolean);
+    method public void setSecureSetting(@NonNull android.content.ComponentName, String, String);
+    method public void setSecurityLoggingEnabled(@NonNull android.content.ComponentName, boolean);
+    method public void setShortSupportMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public void setStartUserSessionMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
+    method public boolean setStatusBarDisabled(@NonNull android.content.ComponentName, boolean);
+    method @Deprecated public int setStorageEncryption(@NonNull android.content.ComponentName, boolean);
+    method public void setSystemSetting(@NonNull android.content.ComponentName, @NonNull String, String);
+    method public void setSystemUpdatePolicy(@NonNull android.content.ComponentName, android.app.admin.SystemUpdatePolicy);
+    method public boolean setTime(@NonNull android.content.ComponentName, long);
+    method public boolean setTimeZone(@NonNull android.content.ComponentName, String);
+    method public void setTrustAgentConfiguration(@NonNull android.content.ComponentName, @NonNull android.content.ComponentName, android.os.PersistableBundle);
+    method public void setUninstallBlocked(@Nullable android.content.ComponentName, String, boolean);
+    method public void setUsbDataSignalingEnabled(boolean);
+    method public void setUserControlDisabledPackages(@NonNull android.content.ComponentName, @NonNull java.util.List<java.lang.String>);
+    method public void setUserIcon(@NonNull android.content.ComponentName, android.graphics.Bitmap);
+    method public int startUserInBackground(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public int stopUser(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method public boolean switchUser(@NonNull android.content.ComponentName, @Nullable android.os.UserHandle);
+    method public void transferOwnership(@NonNull android.content.ComponentName, @NonNull android.content.ComponentName, @Nullable android.os.PersistableBundle);
+    method public void uninstallAllUserCaCerts(@Nullable android.content.ComponentName);
+    method public void uninstallCaCert(@Nullable android.content.ComponentName, byte[]);
+    method public boolean updateOverrideApn(@NonNull android.content.ComponentName, int, @NonNull android.telephony.data.ApnSetting);
+    method public void wipeData(int);
+    method public void wipeData(int, @NonNull CharSequence);
+    field public static final String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN";
+    field public static final String ACTION_ADMIN_POLICY_COMPLIANCE = "android.app.action.ADMIN_POLICY_COMPLIANCE";
+    field public static final String ACTION_APPLICATION_DELEGATION_SCOPES_CHANGED = "android.app.action.APPLICATION_DELEGATION_SCOPES_CHANGED";
+    field public static final String ACTION_CHECK_POLICY_COMPLIANCE = "android.app.action.CHECK_POLICY_COMPLIANCE";
+    field public static final String ACTION_DEVICE_ADMIN_SERVICE = "android.app.action.DEVICE_ADMIN_SERVICE";
+    field public static final String ACTION_DEVICE_OWNER_CHANGED = "android.app.action.DEVICE_OWNER_CHANGED";
+    field public static final String ACTION_GET_PROVISIONING_MODE = "android.app.action.GET_PROVISIONING_MODE";
+    field public static final String ACTION_MANAGED_PROFILE_PROVISIONED = "android.app.action.MANAGED_PROFILE_PROVISIONED";
+    field public static final String ACTION_PROFILE_OWNER_CHANGED = "android.app.action.PROFILE_OWNER_CHANGED";
+    field public static final String ACTION_PROVISIONING_SUCCESSFUL = "android.app.action.PROVISIONING_SUCCESSFUL";
+    field @Deprecated public static final String ACTION_PROVISION_MANAGED_DEVICE = "android.app.action.PROVISION_MANAGED_DEVICE";
+    field public static final String ACTION_PROVISION_MANAGED_PROFILE = "android.app.action.PROVISION_MANAGED_PROFILE";
+    field public static final String ACTION_SET_NEW_PARENT_PROFILE_PASSWORD = "android.app.action.SET_NEW_PARENT_PROFILE_PASSWORD";
+    field public static final String ACTION_SET_NEW_PASSWORD = "android.app.action.SET_NEW_PASSWORD";
+    field public static final String ACTION_START_ENCRYPTION = "android.app.action.START_ENCRYPTION";
+    field public static final String ACTION_SYSTEM_UPDATE_POLICY_CHANGED = "android.app.action.SYSTEM_UPDATE_POLICY_CHANGED";
+    field public static final String DELEGATION_APP_RESTRICTIONS = "delegation-app-restrictions";
+    field public static final String DELEGATION_BLOCK_UNINSTALL = "delegation-block-uninstall";
+    field public static final String DELEGATION_CERT_INSTALL = "delegation-cert-install";
+    field public static final String DELEGATION_CERT_SELECTION = "delegation-cert-selection";
+    field public static final String DELEGATION_ENABLE_SYSTEM_APP = "delegation-enable-system-app";
+    field public static final String DELEGATION_INSTALL_EXISTING_PACKAGE = "delegation-install-existing-package";
+    field public static final String DELEGATION_KEEP_UNINSTALLED_PACKAGES = "delegation-keep-uninstalled-packages";
+    field public static final String DELEGATION_NETWORK_LOGGING = "delegation-network-logging";
+    field public static final String DELEGATION_PACKAGE_ACCESS = "delegation-package-access";
+    field public static final String DELEGATION_PERMISSION_GRANT = "delegation-permission-grant";
+    field public static final String DELEGATION_SECURITY_LOGGING = "delegation-security-logging";
+    field public static final int ENCRYPTION_STATUS_ACTIVATING = 2; // 0x2
+    field public static final int ENCRYPTION_STATUS_ACTIVE = 3; // 0x3
+    field public static final int ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY = 4; // 0x4
+    field public static final int ENCRYPTION_STATUS_ACTIVE_PER_USER = 5; // 0x5
+    field public static final int ENCRYPTION_STATUS_INACTIVE = 1; // 0x1
+    field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0
+    field public static final String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION";
+    field public static final String EXTRA_DELEGATION_SCOPES = "android.app.extra.DELEGATION_SCOPES";
+    field public static final String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN";
+    field public static final String EXTRA_DEVICE_PASSWORD_REQUIREMENT_ONLY = "android.app.extra.DEVICE_PASSWORD_REQUIREMENT_ONLY";
+    field @RequiresPermission(android.Manifest.permission.REQUEST_PASSWORD_COMPLEXITY) public static final String EXTRA_PASSWORD_COMPLEXITY = "android.app.extra.PASSWORD_COMPLEXITY";
+    field public static final String EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE = "android.app.extra.PROVISIONING_ACCOUNT_TO_MIGRATE";
+    field public static final String EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE = "android.app.extra.PROVISIONING_ADMIN_EXTRAS_BUNDLE";
+    field public static final String EXTRA_PROVISIONING_ALLOWED_PROVISIONING_MODES = "android.app.extra.PROVISIONING_ALLOWED_PROVISIONING_MODES";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE = "android.app.extra.PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION";
+    field @Deprecated public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME";
+    field public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM = "android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM";
+    field public static final String EXTRA_PROVISIONING_DISCLAIMERS = "android.app.extra.PROVISIONING_DISCLAIMERS";
+    field public static final String EXTRA_PROVISIONING_DISCLAIMER_CONTENT = "android.app.extra.PROVISIONING_DISCLAIMER_CONTENT";
+    field public static final String EXTRA_PROVISIONING_DISCLAIMER_HEADER = "android.app.extra.PROVISIONING_DISCLAIMER_HEADER";
+    field @Deprecated public static final String EXTRA_PROVISIONING_EMAIL_ADDRESS = "android.app.extra.PROVISIONING_EMAIL_ADDRESS";
+    field public static final String EXTRA_PROVISIONING_IMEI = "android.app.extra.PROVISIONING_IMEI";
+    field public static final String EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION = "android.app.extra.PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION";
+    field public static final String EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED = "android.app.extra.PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED";
+    field public static final String EXTRA_PROVISIONING_LOCALE = "android.app.extra.PROVISIONING_LOCALE";
+    field public static final String EXTRA_PROVISIONING_LOCAL_TIME = "android.app.extra.PROVISIONING_LOCAL_TIME";
+    field public static final String EXTRA_PROVISIONING_LOGO_URI = "android.app.extra.PROVISIONING_LOGO_URI";
+    field @Deprecated public static final String EXTRA_PROVISIONING_MAIN_COLOR = "android.app.extra.PROVISIONING_MAIN_COLOR";
+    field public static final String EXTRA_PROVISIONING_MODE = "android.app.extra.PROVISIONING_MODE";
+    field public static final String EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT = "android.app.extra.PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT";
+    field public static final String EXTRA_PROVISIONING_SERIAL_NUMBER = "android.app.extra.PROVISIONING_SERIAL_NUMBER";
+    field public static final String EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS = "android.app.extra.PROVISIONING_SKIP_EDUCATION_SCREENS";
+    field public static final String EXTRA_PROVISIONING_SKIP_ENCRYPTION = "android.app.extra.PROVISIONING_SKIP_ENCRYPTION";
+    field @Deprecated public static final String EXTRA_PROVISIONING_SKIP_USER_CONSENT = "android.app.extra.PROVISIONING_SKIP_USER_CONSENT";
+    field public static final String EXTRA_PROVISIONING_TIME_ZONE = "android.app.extra.PROVISIONING_TIME_ZONE";
+    field public static final String EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY = "android.app.extra.PROVISIONING_WIFI_ANONYMOUS_IDENTITY";
+    field public static final String EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE = "android.app.extra.PROVISIONING_WIFI_CA_CERTIFICATE";
+    field public static final String EXTRA_PROVISIONING_WIFI_DOMAIN = "android.app.extra.PROVISIONING_WIFI_DOMAIN";
+    field public static final String EXTRA_PROVISIONING_WIFI_EAP_METHOD = "android.app.extra.PROVISIONING_WIFI_EAP_METHOD";
+    field public static final String EXTRA_PROVISIONING_WIFI_HIDDEN = "android.app.extra.PROVISIONING_WIFI_HIDDEN";
+    field public static final String EXTRA_PROVISIONING_WIFI_IDENTITY = "android.app.extra.PROVISIONING_WIFI_IDENTITY";
+    field public static final String EXTRA_PROVISIONING_WIFI_PAC_URL = "android.app.extra.PROVISIONING_WIFI_PAC_URL";
+    field public static final String EXTRA_PROVISIONING_WIFI_PASSWORD = "android.app.extra.PROVISIONING_WIFI_PASSWORD";
+    field public static final String EXTRA_PROVISIONING_WIFI_PHASE2_AUTH = "android.app.extra.PROVISIONING_WIFI_PHASE2_AUTH";
+    field public static final String EXTRA_PROVISIONING_WIFI_PROXY_BYPASS = "android.app.extra.PROVISIONING_WIFI_PROXY_BYPASS";
+    field public static final String EXTRA_PROVISIONING_WIFI_PROXY_HOST = "android.app.extra.PROVISIONING_WIFI_PROXY_HOST";
+    field public static final String EXTRA_PROVISIONING_WIFI_PROXY_PORT = "android.app.extra.PROVISIONING_WIFI_PROXY_PORT";
+    field public static final String EXTRA_PROVISIONING_WIFI_SECURITY_TYPE = "android.app.extra.PROVISIONING_WIFI_SECURITY_TYPE";
+    field public static final String EXTRA_PROVISIONING_WIFI_SSID = "android.app.extra.PROVISIONING_WIFI_SSID";
+    field public static final String EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE = "android.app.extra.PROVISIONING_WIFI_USER_CERTIFICATE";
+    field public static final int FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY = 1; // 0x1
+    field public static final int FLAG_MANAGED_CAN_ACCESS_PARENT = 2; // 0x2
+    field public static final int FLAG_PARENT_CAN_ACCESS_MANAGED = 1; // 0x1
+    field public static final int ID_TYPE_BASE_INFO = 1; // 0x1
+    field public static final int ID_TYPE_IMEI = 4; // 0x4
+    field public static final int ID_TYPE_INDIVIDUAL_ATTESTATION = 16; // 0x10
+    field public static final int ID_TYPE_MEID = 8; // 0x8
+    field public static final int ID_TYPE_SERIAL = 2; // 0x2
+    field public static final int INSTALLKEY_REQUEST_CREDENTIALS_ACCESS = 1; // 0x1
+    field public static final int INSTALLKEY_SET_USER_SELECTABLE = 2; // 0x2
+    field public static final int KEYGUARD_DISABLE_BIOMETRICS = 416; // 0x1a0
+    field public static final int KEYGUARD_DISABLE_FACE = 128; // 0x80
+    field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
+    field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
+    field public static final int KEYGUARD_DISABLE_FINGERPRINT = 32; // 0x20
+    field public static final int KEYGUARD_DISABLE_IRIS = 256; // 0x100
+    field public static final int KEYGUARD_DISABLE_REMOTE_INPUT = 64; // 0x40
+    field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
+    field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4
+    field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10
+    field public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 8; // 0x8
+    field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1
+    field public static final int LEAVE_ALL_SYSTEM_APPS_ENABLED = 16; // 0x10
+    field public static final int LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK = 64; // 0x40
+    field public static final int LOCK_TASK_FEATURE_GLOBAL_ACTIONS = 16; // 0x10
+    field public static final int LOCK_TASK_FEATURE_HOME = 4; // 0x4
+    field public static final int LOCK_TASK_FEATURE_KEYGUARD = 32; // 0x20
+    field public static final int LOCK_TASK_FEATURE_NONE = 0; // 0x0
+    field public static final int LOCK_TASK_FEATURE_NOTIFICATIONS = 2; // 0x2
+    field public static final int LOCK_TASK_FEATURE_OVERVIEW = 8; // 0x8
+    field public static final int LOCK_TASK_FEATURE_SYSTEM_INFO = 1; // 0x1
+    field public static final int MAKE_USER_EPHEMERAL = 2; // 0x2
+    field public static final String MIME_TYPE_PROVISIONING_NFC = "application/com.android.managedprovisioning";
+    field public static final int NEARBY_STREAMING_DISABLED = 1; // 0x1
+    field public static final int NEARBY_STREAMING_ENABLED = 2; // 0x2
+    field public static final int NEARBY_STREAMING_NOT_CONTROLLED_BY_POLICY = 0; // 0x0
+    field public static final int NEARBY_STREAMING_SAME_MANAGED_ACCOUNT_ONLY = 3; // 0x3
+    field public static final int OPERATION_SAFETY_REASON_DRIVING_DISTRACTION = 1; // 0x1
+    field public static final int PASSWORD_COMPLEXITY_HIGH = 327680; // 0x50000
+    field public static final int PASSWORD_COMPLEXITY_LOW = 65536; // 0x10000
+    field public static final int PASSWORD_COMPLEXITY_MEDIUM = 196608; // 0x30000
+    field public static final int PASSWORD_COMPLEXITY_NONE = 0; // 0x0
+    field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000
+    field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000
+    field public static final int PASSWORD_QUALITY_BIOMETRIC_WEAK = 32768; // 0x8000
+    field public static final int PASSWORD_QUALITY_COMPLEX = 393216; // 0x60000
+    field public static final int PASSWORD_QUALITY_NUMERIC = 131072; // 0x20000
+    field public static final int PASSWORD_QUALITY_NUMERIC_COMPLEX = 196608; // 0x30000
+    field public static final int PASSWORD_QUALITY_SOMETHING = 65536; // 0x10000
+    field public static final int PASSWORD_QUALITY_UNSPECIFIED = 0; // 0x0
+    field public static final int PERMISSION_GRANT_STATE_DEFAULT = 0; // 0x0
+    field public static final int PERMISSION_GRANT_STATE_DENIED = 2; // 0x2
+    field public static final int PERMISSION_GRANT_STATE_GRANTED = 1; // 0x1
+    field public static final int PERMISSION_POLICY_AUTO_DENY = 2; // 0x2
+    field public static final int PERMISSION_POLICY_AUTO_GRANT = 1; // 0x1
+    field public static final int PERMISSION_POLICY_PROMPT = 0; // 0x0
+    field public static final int PERSONAL_APPS_NOT_SUSPENDED = 0; // 0x0
+    field public static final int PERSONAL_APPS_SUSPENDED_EXPLICITLY = 1; // 0x1
+    field public static final int PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT = 2; // 0x2
+    field public static final String POLICY_DISABLE_CAMERA = "policy_disable_camera";
+    field public static final String POLICY_DISABLE_SCREEN_CAPTURE = "policy_disable_screen_capture";
+    field public static final int PRIVATE_DNS_MODE_OFF = 1; // 0x1
+    field public static final int PRIVATE_DNS_MODE_OPPORTUNISTIC = 2; // 0x2
+    field public static final int PRIVATE_DNS_MODE_PROVIDER_HOSTNAME = 3; // 0x3
+    field public static final int PRIVATE_DNS_MODE_UNKNOWN = 0; // 0x0
+    field public static final int PRIVATE_DNS_SET_ERROR_FAILURE_SETTING = 2; // 0x2
+    field public static final int PRIVATE_DNS_SET_ERROR_HOST_NOT_SERVING = 1; // 0x1
+    field public static final int PRIVATE_DNS_SET_NO_ERROR = 0; // 0x0
+    field public static final int PROVISIONING_MODE_FULLY_MANAGED_DEVICE = 1; // 0x1
+    field public static final int PROVISIONING_MODE_MANAGED_PROFILE = 2; // 0x2
+    field public static final int PROVISIONING_MODE_MANAGED_PROFILE_ON_PERSONAL_DEVICE = 3; // 0x3
+    field public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 2; // 0x2
+    field public static final int RESET_PASSWORD_REQUIRE_ENTRY = 1; // 0x1
+    field public static final int SKIP_SETUP_WIZARD = 1; // 0x1
+    field public static final int WIPE_EUICC = 4; // 0x4
+    field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1
+    field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2
+    field public static final int WIPE_SILENTLY = 8; // 0x8
+  }
+
+  public abstract static class DevicePolicyManager.InstallSystemUpdateCallback {
+    ctor public DevicePolicyManager.InstallSystemUpdateCallback();
+    method public void onInstallUpdateError(int, @NonNull String);
+    field public static final int UPDATE_ERROR_BATTERY_LOW = 5; // 0x5
+    field public static final int UPDATE_ERROR_FILE_NOT_FOUND = 4; // 0x4
+    field public static final int UPDATE_ERROR_INCORRECT_OS_VERSION = 2; // 0x2
+    field public static final int UPDATE_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int UPDATE_ERROR_UPDATE_FILE_INVALID = 3; // 0x3
+  }
+
+  public static interface DevicePolicyManager.OnClearApplicationUserDataListener {
+    method public void onApplicationUserDataCleared(String, boolean);
+  }
+
+  public final class DnsEvent extends android.app.admin.NetworkEvent implements android.os.Parcelable {
+    method public String getHostname();
+    method public java.util.List<java.net.InetAddress> getInetAddresses();
+    method public int getTotalResolvedAddressCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.DnsEvent> CREATOR;
+  }
+
+  public final class FactoryResetProtectionPolicy implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getFactoryResetProtectionAccounts();
+    method public boolean isFactoryResetProtectionEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.FactoryResetProtectionPolicy> CREATOR;
+  }
+
+  public static class FactoryResetProtectionPolicy.Builder {
+    ctor public FactoryResetProtectionPolicy.Builder();
+    method @NonNull public android.app.admin.FactoryResetProtectionPolicy build();
+    method @NonNull public android.app.admin.FactoryResetProtectionPolicy.Builder setFactoryResetProtectionAccounts(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public android.app.admin.FactoryResetProtectionPolicy.Builder setFactoryResetProtectionEnabled(boolean);
+  }
+
+  public class FreezePeriod {
+    ctor public FreezePeriod(java.time.MonthDay, java.time.MonthDay);
+    method public java.time.MonthDay getEnd();
+    method public java.time.MonthDay getStart();
+  }
+
+  public abstract class NetworkEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getId();
+    method public String getPackageName();
+    method public long getTimestamp();
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.NetworkEvent> CREATOR;
+  }
+
+  public class SecurityLog {
+    ctor public SecurityLog();
+    field public static final int LEVEL_ERROR = 3; // 0x3
+    field public static final int LEVEL_INFO = 1; // 0x1
+    field public static final int LEVEL_WARNING = 2; // 0x2
+    field public static final int TAG_ADB_SHELL_CMD = 210002; // 0x33452
+    field public static final int TAG_ADB_SHELL_INTERACTIVE = 210001; // 0x33451
+    field public static final int TAG_APP_PROCESS_START = 210005; // 0x33455
+    field public static final int TAG_CAMERA_POLICY_SET = 210034; // 0x33472
+    field public static final int TAG_CERT_AUTHORITY_INSTALLED = 210029; // 0x3346d
+    field public static final int TAG_CERT_AUTHORITY_REMOVED = 210030; // 0x3346e
+    field public static final int TAG_CERT_VALIDATION_FAILURE = 210033; // 0x33471
+    field public static final int TAG_CRYPTO_SELF_TEST_COMPLETED = 210031; // 0x3346f
+    field public static final int TAG_KEYGUARD_DISABLED_FEATURES_SET = 210021; // 0x33465
+    field public static final int TAG_KEYGUARD_DISMISSED = 210006; // 0x33456
+    field public static final int TAG_KEYGUARD_DISMISS_AUTH_ATTEMPT = 210007; // 0x33457
+    field public static final int TAG_KEYGUARD_SECURED = 210008; // 0x33458
+    field public static final int TAG_KEY_DESTRUCTION = 210026; // 0x3346a
+    field public static final int TAG_KEY_GENERATED = 210024; // 0x33468
+    field public static final int TAG_KEY_IMPORT = 210025; // 0x33469
+    field public static final int TAG_KEY_INTEGRITY_VIOLATION = 210032; // 0x33470
+    field public static final int TAG_LOGGING_STARTED = 210011; // 0x3345b
+    field public static final int TAG_LOGGING_STOPPED = 210012; // 0x3345c
+    field public static final int TAG_LOG_BUFFER_SIZE_CRITICAL = 210015; // 0x3345f
+    field public static final int TAG_MAX_PASSWORD_ATTEMPTS_SET = 210020; // 0x33464
+    field public static final int TAG_MAX_SCREEN_LOCK_TIMEOUT_SET = 210019; // 0x33463
+    field public static final int TAG_MEDIA_MOUNT = 210013; // 0x3345d
+    field public static final int TAG_MEDIA_UNMOUNT = 210014; // 0x3345e
+    field public static final int TAG_OS_SHUTDOWN = 210010; // 0x3345a
+    field public static final int TAG_OS_STARTUP = 210009; // 0x33459
+    field public static final int TAG_PASSWORD_COMPLEXITY_REQUIRED = 210035; // 0x33473
+    field public static final int TAG_PASSWORD_COMPLEXITY_SET = 210017; // 0x33461
+    field public static final int TAG_PASSWORD_EXPIRATION_SET = 210016; // 0x33460
+    field public static final int TAG_PASSWORD_HISTORY_LENGTH_SET = 210018; // 0x33462
+    field public static final int TAG_REMOTE_LOCK = 210022; // 0x33466
+    field public static final int TAG_SYNC_RECV_FILE = 210003; // 0x33453
+    field public static final int TAG_SYNC_SEND_FILE = 210004; // 0x33454
+    field public static final int TAG_USER_RESTRICTION_ADDED = 210027; // 0x3346b
+    field public static final int TAG_USER_RESTRICTION_REMOVED = 210028; // 0x3346c
+    field public static final int TAG_WIPE_FAILURE = 210023; // 0x33467
+  }
+
+  public static final class SecurityLog.SecurityEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public Object getData();
+    method public long getId();
+    method public int getLogLevel();
+    method public int getTag();
+    method public long getTimeNanos();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SecurityLog.SecurityEvent> CREATOR;
+  }
+
+  public final class SystemUpdateInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getReceivedTime();
+    method public int getSecurityPatchState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdateInfo> CREATOR;
+    field public static final int SECURITY_PATCH_STATE_FALSE = 1; // 0x1
+    field public static final int SECURITY_PATCH_STATE_TRUE = 2; // 0x2
+    field public static final int SECURITY_PATCH_STATE_UNKNOWN = 0; // 0x0
+  }
+
+  public final class SystemUpdatePolicy implements android.os.Parcelable {
+    method public static android.app.admin.SystemUpdatePolicy createAutomaticInstallPolicy();
+    method public static android.app.admin.SystemUpdatePolicy createPostponeInstallPolicy();
+    method public static android.app.admin.SystemUpdatePolicy createWindowedInstallPolicy(int, int);
+    method public int describeContents();
+    method public java.util.List<android.app.admin.FreezePeriod> getFreezePeriods();
+    method public int getInstallWindowEnd();
+    method public int getInstallWindowStart();
+    method public int getPolicyType();
+    method public android.app.admin.SystemUpdatePolicy setFreezePeriods(java.util.List<android.app.admin.FreezePeriod>);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy> CREATOR;
+    field public static final int TYPE_INSTALL_AUTOMATIC = 1; // 0x1
+    field public static final int TYPE_INSTALL_WINDOWED = 2; // 0x2
+    field public static final int TYPE_POSTPONE = 3; // 0x3
+  }
+
+  public static final class SystemUpdatePolicy.ValidationFailedException extends java.lang.IllegalArgumentException implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getErrorCode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.SystemUpdatePolicy.ValidationFailedException> CREATOR;
+    field public static final int ERROR_COMBINED_FREEZE_PERIOD_TOO_CLOSE = 6; // 0x6
+    field public static final int ERROR_COMBINED_FREEZE_PERIOD_TOO_LONG = 5; // 0x5
+    field public static final int ERROR_DUPLICATE_OR_OVERLAP = 2; // 0x2
+    field public static final int ERROR_NEW_FREEZE_PERIOD_TOO_CLOSE = 4; // 0x4
+    field public static final int ERROR_NEW_FREEZE_PERIOD_TOO_LONG = 3; // 0x3
+    field public static final int ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  public final class UnsafeStateException extends java.lang.IllegalStateException implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.Integer> getReasons();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.UnsafeStateException> CREATOR;
+  }
+
+}
+
+package android.app.appsearch {
+
+  public final class AppSearchBatchResult<KeyType, ValueType> {
+    method @NonNull public java.util.Map<KeyType,android.app.appsearch.AppSearchResult<ValueType>> getAll();
+    method @NonNull public java.util.Map<KeyType,android.app.appsearch.AppSearchResult<ValueType>> getFailures();
+    method @NonNull public java.util.Map<KeyType,ValueType> getSuccesses();
+    method public boolean isSuccess();
+  }
+
+  public static final class AppSearchBatchResult.Builder<KeyType, ValueType> {
+    ctor public AppSearchBatchResult.Builder();
+    method @NonNull public android.app.appsearch.AppSearchBatchResult<KeyType,ValueType> build();
+    method @NonNull public android.app.appsearch.AppSearchBatchResult.Builder<KeyType,ValueType> setFailure(@NonNull KeyType, int, @Nullable String);
+    method @NonNull public android.app.appsearch.AppSearchBatchResult.Builder<KeyType,ValueType> setResult(@NonNull KeyType, @NonNull android.app.appsearch.AppSearchResult<ValueType>);
+    method @NonNull public android.app.appsearch.AppSearchBatchResult.Builder<KeyType,ValueType> setSuccess(@NonNull KeyType, @Nullable ValueType);
+  }
+
+  public class AppSearchManager {
+    method public void createGlobalSearchSession(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.GlobalSearchSession>>);
+    method public void createSearchSession(@NonNull android.app.appsearch.AppSearchManager.SearchContext, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.AppSearchSession>>);
+  }
+
+  public static final class AppSearchManager.SearchContext {
+    method @NonNull public String getDatabaseName();
+  }
+
+  public static final class AppSearchManager.SearchContext.Builder {
+    ctor public AppSearchManager.SearchContext.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchManager.SearchContext build();
+  }
+
+  public final class AppSearchResult<ValueType> {
+    method @Nullable public String getErrorMessage();
+    method public int getResultCode();
+    method @Nullable public ValueType getResultValue();
+    method public boolean isSuccess();
+    method @NonNull public static <ValueType> android.app.appsearch.AppSearchResult<ValueType> newFailedResult(int, @Nullable String);
+    method @NonNull public static <ValueType> android.app.appsearch.AppSearchResult<ValueType> newSuccessfulResult(@Nullable ValueType);
+    field public static final int RESULT_INTERNAL_ERROR = 2; // 0x2
+    field public static final int RESULT_INVALID_ARGUMENT = 3; // 0x3
+    field public static final int RESULT_INVALID_SCHEMA = 7; // 0x7
+    field public static final int RESULT_IO_ERROR = 4; // 0x4
+    field public static final int RESULT_NOT_FOUND = 6; // 0x6
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_OUT_OF_SPACE = 5; // 0x5
+    field public static final int RESULT_SECURITY_ERROR = 8; // 0x8
+    field public static final int RESULT_UNKNOWN_ERROR = 1; // 0x1
+  }
+
+  public final class AppSearchSchema {
+    method @NonNull public java.util.List<android.app.appsearch.AppSearchSchema.PropertyConfig> getProperties();
+    method @NonNull public String getSchemaType();
+  }
+
+  public static final class AppSearchSchema.BooleanPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.BooleanPropertyConfig.Builder {
+    ctor public AppSearchSchema.BooleanPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.BooleanPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.BooleanPropertyConfig.Builder setCardinality(int);
+  }
+
+  public static final class AppSearchSchema.Builder {
+    ctor public AppSearchSchema.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.Builder addProperty(@NonNull android.app.appsearch.AppSearchSchema.PropertyConfig);
+    method @NonNull public android.app.appsearch.AppSearchSchema build();
+  }
+
+  public static final class AppSearchSchema.BytesPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.BytesPropertyConfig.Builder {
+    ctor public AppSearchSchema.BytesPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.BytesPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.BytesPropertyConfig.Builder setCardinality(int);
+  }
+
+  public static final class AppSearchSchema.DocumentPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+    method @NonNull public String getSchemaType();
+    method public boolean shouldIndexNestedProperties();
+  }
+
+  public static final class AppSearchSchema.DocumentPropertyConfig.Builder {
+    ctor public AppSearchSchema.DocumentPropertyConfig.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.DocumentPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.DocumentPropertyConfig.Builder setCardinality(int);
+    method @NonNull public android.app.appsearch.AppSearchSchema.DocumentPropertyConfig.Builder setShouldIndexNestedProperties(boolean);
+  }
+
+  public static final class AppSearchSchema.DoublePropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.DoublePropertyConfig.Builder {
+    ctor public AppSearchSchema.DoublePropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.DoublePropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.DoublePropertyConfig.Builder setCardinality(int);
+  }
+
+  public static final class AppSearchSchema.LongPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.LongPropertyConfig.Builder {
+    ctor public AppSearchSchema.LongPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.LongPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.LongPropertyConfig.Builder setCardinality(int);
+  }
+
+  public abstract static class AppSearchSchema.PropertyConfig {
+    method public int getCardinality();
+    method @NonNull public String getName();
+    field public static final int CARDINALITY_OPTIONAL = 2; // 0x2
+    field public static final int CARDINALITY_REPEATED = 1; // 0x1
+    field public static final int CARDINALITY_REQUIRED = 3; // 0x3
+  }
+
+  public static final class AppSearchSchema.StringPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+    method public int getIndexingType();
+    method public int getTokenizerType();
+    field public static final int INDEXING_TYPE_EXACT_TERMS = 1; // 0x1
+    field public static final int INDEXING_TYPE_NONE = 0; // 0x0
+    field public static final int INDEXING_TYPE_PREFIXES = 2; // 0x2
+    field public static final int TOKENIZER_TYPE_NONE = 0; // 0x0
+    field public static final int TOKENIZER_TYPE_PLAIN = 1; // 0x1
+  }
+
+  public static final class AppSearchSchema.StringPropertyConfig.Builder {
+    ctor public AppSearchSchema.StringPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig.Builder setCardinality(int);
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig.Builder setIndexingType(int);
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig.Builder setTokenizerType(int);
+  }
+
+  public final class AppSearchSession implements java.io.Closeable {
+    method public void close();
+    method public void getByDocumentId(@NonNull android.app.appsearch.GetByDocumentIdRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback<java.lang.String,android.app.appsearch.GenericDocument>);
+    method public void getNamespaces(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.util.Set<java.lang.String>>>);
+    method public void getSchema(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.GetSchemaResponse>>);
+    method public void getStorageInfo(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.StorageInfo>>);
+    method public void put(@NonNull android.app.appsearch.PutDocumentsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback<java.lang.String,java.lang.Void>);
+    method public void remove(@NonNull android.app.appsearch.RemoveByDocumentIdRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback<java.lang.String,java.lang.Void>);
+    method public void remove(@NonNull String, @NonNull android.app.appsearch.SearchSpec, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.lang.Void>>);
+    method public void reportUsage(@NonNull android.app.appsearch.ReportUsageRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.lang.Void>>);
+    method @NonNull public android.app.appsearch.SearchResults search(@NonNull String, @NonNull android.app.appsearch.SearchSpec);
+    method public void setSchema(@NonNull android.app.appsearch.SetSchemaRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.SetSchemaResponse>>);
+  }
+
+  public interface BatchResultCallback<KeyType, ValueType> {
+    method public void onResult(@NonNull android.app.appsearch.AppSearchBatchResult<KeyType,ValueType>);
+    method public default void onSystemError(@Nullable Throwable);
+  }
+
+  public class GenericDocument {
+    ctor protected GenericDocument(@NonNull android.app.appsearch.GenericDocument);
+    method public long getCreationTimestampMillis();
+    method @NonNull public String getId();
+    method public static int getMaxIndexedProperties();
+    method @NonNull public String getNamespace();
+    method @Nullable public Object getProperty(@NonNull String);
+    method public boolean getPropertyBoolean(@NonNull String);
+    method @Nullable public boolean[] getPropertyBooleanArray(@NonNull String);
+    method @Nullable public byte[] getPropertyBytes(@NonNull String);
+    method @Nullable public byte[][] getPropertyBytesArray(@NonNull String);
+    method @Nullable public android.app.appsearch.GenericDocument getPropertyDocument(@NonNull String);
+    method @Nullable public android.app.appsearch.GenericDocument[] getPropertyDocumentArray(@NonNull String);
+    method public double getPropertyDouble(@NonNull String);
+    method @Nullable public double[] getPropertyDoubleArray(@NonNull String);
+    method public long getPropertyLong(@NonNull String);
+    method @Nullable public long[] getPropertyLongArray(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getPropertyNames();
+    method @Nullable public String getPropertyString(@NonNull String);
+    method @Nullable public String[] getPropertyStringArray(@NonNull String);
+    method @NonNull public String getSchemaType();
+    method public int getScore();
+    method public long getTtlMillis();
+  }
+
+  public static class GenericDocument.Builder<BuilderType extends android.app.appsearch.GenericDocument.Builder> {
+    ctor public GenericDocument.Builder(@NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.GenericDocument build();
+    method @NonNull public BuilderType setCreationTimestampMillis(long);
+    method @NonNull public BuilderType setPropertyBoolean(@NonNull String, @NonNull boolean...);
+    method @NonNull public BuilderType setPropertyBytes(@NonNull String, @NonNull byte[]...);
+    method @NonNull public BuilderType setPropertyDocument(@NonNull String, @NonNull android.app.appsearch.GenericDocument...);
+    method @NonNull public BuilderType setPropertyDouble(@NonNull String, @NonNull double...);
+    method @NonNull public BuilderType setPropertyLong(@NonNull String, @NonNull long...);
+    method @NonNull public BuilderType setPropertyString(@NonNull String, @NonNull java.lang.String...);
+    method @NonNull public BuilderType setScore(@IntRange(from=0, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public BuilderType setTtlMillis(long);
+  }
+
+  public final class GetByDocumentIdRequest {
+    method @NonNull public java.util.Set<java.lang.String> getIds();
+    method @NonNull public String getNamespace();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getProjections();
+    field public static final String PROJECTION_SCHEMA_TYPE_WILDCARD = "*";
+  }
+
+  public static final class GetByDocumentIdRequest.Builder {
+    ctor public GetByDocumentIdRequest.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest.Builder addIds(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest.Builder addIds(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest.Builder addProjection(@NonNull String, @NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest build();
+  }
+
+  public final class GetSchemaResponse {
+    method @NonNull public java.util.Set<android.app.appsearch.AppSearchSchema> getSchemas();
+    method @IntRange(from=0) public int getVersion();
+  }
+
+  public static final class GetSchemaResponse.Builder {
+    ctor public GetSchemaResponse.Builder();
+    method @NonNull public android.app.appsearch.GetSchemaResponse.Builder addSchema(@NonNull android.app.appsearch.AppSearchSchema);
+    method @NonNull public android.app.appsearch.GetSchemaResponse build();
+    method @NonNull public android.app.appsearch.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
+  }
+
+  public class GlobalSearchSession implements java.io.Closeable {
+    method public void close();
+    method public void reportSystemUsage(@NonNull android.app.appsearch.ReportSystemUsageRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.lang.Void>>);
+    method @NonNull public android.app.appsearch.SearchResults search(@NonNull String, @NonNull android.app.appsearch.SearchSpec);
+  }
+
+  public abstract class Migrator {
+    ctor public Migrator();
+    method @NonNull @WorkerThread public abstract android.app.appsearch.GenericDocument onDowngrade(int, int, @NonNull android.app.appsearch.GenericDocument);
+    method @NonNull @WorkerThread public abstract android.app.appsearch.GenericDocument onUpgrade(int, int, @NonNull android.app.appsearch.GenericDocument);
+    method public abstract boolean shouldMigrate(int, int);
+  }
+
+  public class PackageIdentifier {
+    ctor public PackageIdentifier(@NonNull String, @NonNull byte[]);
+    method @NonNull public String getPackageName();
+    method @NonNull public byte[] getSha256Certificate();
+  }
+
+  public final class PutDocumentsRequest {
+    method @NonNull public java.util.List<android.app.appsearch.GenericDocument> getGenericDocuments();
+  }
+
+  public static final class PutDocumentsRequest.Builder {
+    ctor public PutDocumentsRequest.Builder();
+    method @NonNull public android.app.appsearch.PutDocumentsRequest.Builder addGenericDocuments(@NonNull android.app.appsearch.GenericDocument...);
+    method @NonNull public android.app.appsearch.PutDocumentsRequest.Builder addGenericDocuments(@NonNull java.util.Collection<? extends android.app.appsearch.GenericDocument>);
+    method @NonNull public android.app.appsearch.PutDocumentsRequest build();
+  }
+
+  public final class RemoveByDocumentIdRequest {
+    method @NonNull public java.util.Set<java.lang.String> getIds();
+    method @NonNull public String getNamespace();
+  }
+
+  public static final class RemoveByDocumentIdRequest.Builder {
+    ctor public RemoveByDocumentIdRequest.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.RemoveByDocumentIdRequest.Builder addIds(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.RemoveByDocumentIdRequest.Builder addIds(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.RemoveByDocumentIdRequest build();
+  }
+
+  public final class ReportSystemUsageRequest {
+    method @NonNull public String getDatabaseName();
+    method @NonNull public String getDocumentId();
+    method @NonNull public String getNamespace();
+    method @NonNull public String getPackageName();
+    method public long getUsageTimestampMillis();
+  }
+
+  public static final class ReportSystemUsageRequest.Builder {
+    ctor public ReportSystemUsageRequest.Builder(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.ReportSystemUsageRequest build();
+    method @NonNull public android.app.appsearch.ReportSystemUsageRequest.Builder setUsageTimestampMillis(long);
+  }
+
+  public final class ReportUsageRequest {
+    method @NonNull public String getDocumentId();
+    method @NonNull public String getNamespace();
+    method public long getUsageTimestampMillis();
+  }
+
+  public static final class ReportUsageRequest.Builder {
+    ctor public ReportUsageRequest.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.ReportUsageRequest build();
+    method @NonNull public android.app.appsearch.ReportUsageRequest.Builder setUsageTimestampMillis(long);
+  }
+
+  public final class SearchResult {
+    method @NonNull public String getDatabaseName();
+    method @NonNull public android.app.appsearch.GenericDocument getGenericDocument();
+    method @NonNull public java.util.List<android.app.appsearch.SearchResult.MatchInfo> getMatchInfos();
+    method @NonNull public String getPackageName();
+    method public double getRankingSignal();
+  }
+
+  public static final class SearchResult.Builder {
+    ctor public SearchResult.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.SearchResult.Builder addMatchInfo(@NonNull android.app.appsearch.SearchResult.MatchInfo);
+    method @NonNull public android.app.appsearch.SearchResult build();
+    method @NonNull public android.app.appsearch.SearchResult.Builder setGenericDocument(@NonNull android.app.appsearch.GenericDocument);
+    method @NonNull public android.app.appsearch.SearchResult.Builder setRankingSignal(double);
+  }
+
+  public static final class SearchResult.MatchInfo {
+    method @NonNull public CharSequence getExactMatch();
+    method @NonNull public android.app.appsearch.SearchResult.MatchRange getExactMatchRange();
+    method @NonNull public String getFullText();
+    method @NonNull public String getPropertyPath();
+    method @NonNull public CharSequence getSnippet();
+    method @NonNull public android.app.appsearch.SearchResult.MatchRange getSnippetRange();
+  }
+
+  public static final class SearchResult.MatchInfo.Builder {
+    ctor public SearchResult.MatchInfo.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.SearchResult.MatchInfo build();
+    method @NonNull public android.app.appsearch.SearchResult.MatchInfo.Builder setExactMatchRange(@NonNull android.app.appsearch.SearchResult.MatchRange);
+    method @NonNull public android.app.appsearch.SearchResult.MatchInfo.Builder setSnippetRange(@NonNull android.app.appsearch.SearchResult.MatchRange);
+  }
+
+  public static final class SearchResult.MatchRange {
+    ctor public SearchResult.MatchRange(int, int);
+    method public int getEnd();
+    method public int getStart();
+  }
+
+  public class SearchResults implements java.io.Closeable {
+    method public void close();
+    method public void getNextPage(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.util.List<android.app.appsearch.SearchResult>>>);
+  }
+
+  public final class SearchSpec {
+    method @NonNull public java.util.List<java.lang.String> getFilterNamespaces();
+    method @NonNull public java.util.List<java.lang.String> getFilterPackageNames();
+    method @NonNull public java.util.List<java.lang.String> getFilterSchemas();
+    method public int getMaxSnippetSize();
+    method public int getOrder();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getProjections();
+    method public int getRankingStrategy();
+    method public int getResultCountPerPage();
+    method public int getResultGroupingLimit();
+    method public int getResultGroupingTypeFlags();
+    method public int getSnippetCount();
+    method public int getSnippetCountPerProperty();
+    method public int getTermMatch();
+    field public static final int GROUPING_TYPE_PER_NAMESPACE = 2; // 0x2
+    field public static final int GROUPING_TYPE_PER_PACKAGE = 1; // 0x1
+    field public static final int ORDER_ASCENDING = 1; // 0x1
+    field public static final int ORDER_DESCENDING = 0; // 0x0
+    field public static final String PROJECTION_SCHEMA_TYPE_WILDCARD = "*";
+    field public static final int RANKING_STRATEGY_CREATION_TIMESTAMP = 2; // 0x2
+    field public static final int RANKING_STRATEGY_DOCUMENT_SCORE = 1; // 0x1
+    field public static final int RANKING_STRATEGY_NONE = 0; // 0x0
+    field public static final int RANKING_STRATEGY_RELEVANCE_SCORE = 3; // 0x3
+    field public static final int RANKING_STRATEGY_SYSTEM_USAGE_COUNT = 6; // 0x6
+    field public static final int RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP = 7; // 0x7
+    field public static final int RANKING_STRATEGY_USAGE_COUNT = 4; // 0x4
+    field public static final int RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP = 5; // 0x5
+    field public static final int TERM_MATCH_EXACT_ONLY = 1; // 0x1
+    field public static final int TERM_MATCH_PREFIX = 2; // 0x2
+  }
+
+  public static final class SearchSpec.Builder {
+    ctor public SearchSpec.Builder();
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterNamespaces(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterNamespaces(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterPackageNames(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterPackageNames(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterSchemas(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterSchemas(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addProjection(@NonNull String, @NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec build();
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setMaxSnippetSize(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setOrder(int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setRankingStrategy(int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setResultCountPerPage(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setResultGrouping(int, int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setSnippetCount(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setSnippetCountPerProperty(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setTermMatch(int);
+  }
+
+  public final class SetSchemaRequest {
+    method @NonNull public java.util.Map<java.lang.String,android.app.appsearch.Migrator> getMigrators();
+    method @NonNull public java.util.Set<android.app.appsearch.AppSearchSchema> getSchemas();
+    method @NonNull public java.util.Set<java.lang.String> getSchemasNotDisplayedBySystem();
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<android.app.appsearch.PackageIdentifier>> getSchemasVisibleToPackages();
+    method @IntRange(from=1) public int getVersion();
+    method public boolean isForceOverride();
+  }
+
+  public static final class SetSchemaRequest.Builder {
+    ctor public SetSchemaRequest.Builder();
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder addSchemas(@NonNull android.app.appsearch.AppSearchSchema...);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder addSchemas(@NonNull java.util.Collection<android.app.appsearch.AppSearchSchema>);
+    method @NonNull public android.app.appsearch.SetSchemaRequest build();
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setForceOverride(boolean);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setMigrator(@NonNull String, @NonNull android.app.appsearch.Migrator);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setMigrators(@NonNull java.util.Map<java.lang.String,android.app.appsearch.Migrator>);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setSchemaTypeDisplayedBySystem(@NonNull String, boolean);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setSchemaTypeVisibilityForPackage(@NonNull String, boolean, @NonNull android.app.appsearch.PackageIdentifier);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setVersion(@IntRange(from=1) int);
+  }
+
+  public class SetSchemaResponse {
+    method @NonNull public java.util.Set<java.lang.String> getDeletedTypes();
+    method @NonNull public java.util.Set<java.lang.String> getIncompatibleTypes();
+    method @NonNull public java.util.Set<java.lang.String> getMigratedTypes();
+    method @NonNull public java.util.List<android.app.appsearch.SetSchemaResponse.MigrationFailure> getMigrationFailures();
+  }
+
+  public static final class SetSchemaResponse.Builder {
+    ctor public SetSchemaResponse.Builder();
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addDeletedType(@NonNull String);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addDeletedTypes(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addIncompatibleType(@NonNull String);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addIncompatibleTypes(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigratedType(@NonNull String);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigratedTypes(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigrationFailure(@NonNull android.app.appsearch.SetSchemaResponse.MigrationFailure);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigrationFailures(@NonNull java.util.Collection<android.app.appsearch.SetSchemaResponse.MigrationFailure>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse build();
+  }
+
+  public static class SetSchemaResponse.MigrationFailure {
+    ctor public SetSchemaResponse.MigrationFailure(@NonNull String, @NonNull String, @NonNull String, @NonNull android.app.appsearch.AppSearchResult<?>);
+    method @NonNull public android.app.appsearch.AppSearchResult<java.lang.Void> getAppSearchResult();
+    method @NonNull public String getDocumentId();
+    method @NonNull public String getNamespace();
+    method @NonNull public String getSchemaType();
+  }
+
+  public class StorageInfo {
+    method public int getAliveDocumentsCount();
+    method public int getAliveNamespacesCount();
+    method public long getSizeBytes();
+  }
+
+  public static final class StorageInfo.Builder {
+    ctor public StorageInfo.Builder();
+    method @NonNull public android.app.appsearch.StorageInfo build();
+    method @NonNull public android.app.appsearch.StorageInfo.Builder setAliveDocumentsCount(int);
+    method @NonNull public android.app.appsearch.StorageInfo.Builder setAliveNamespacesCount(int);
+    method @NonNull public android.app.appsearch.StorageInfo.Builder setSizeBytes(long);
+  }
+
+}
+
+package android.app.appsearch.exceptions {
+
+  public class AppSearchException extends java.lang.Exception {
+    ctor public AppSearchException(int);
+    ctor public AppSearchException(int, @Nullable String);
+    ctor public AppSearchException(int, @Nullable String, @Nullable Throwable);
+    method public int getResultCode();
+    method @NonNull public <T> android.app.appsearch.AppSearchResult<T> toAppSearchResult();
+  }
+
+}
+
+package android.app.assist {
+
+  public class AssistContent implements android.os.Parcelable {
+    ctor public AssistContent();
+    method public int describeContents();
+    method public android.content.ClipData getClipData();
+    method public android.os.Bundle getExtras();
+    method public android.content.Intent getIntent();
+    method public String getStructuredData();
+    method public android.net.Uri getWebUri();
+    method public boolean isAppProvidedIntent();
+    method public boolean isAppProvidedWebUri();
+    method public void setClipData(android.content.ClipData);
+    method public void setIntent(android.content.Intent);
+    method public void setStructuredData(String);
+    method public void setWebUri(android.net.Uri);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.assist.AssistContent> CREATOR;
+  }
+
+  public class AssistStructure implements android.os.Parcelable {
+    ctor public AssistStructure();
+    method public int describeContents();
+    method public long getAcquisitionEndTime();
+    method public long getAcquisitionStartTime();
+    method public android.content.ComponentName getActivityComponent();
+    method public android.app.assist.AssistStructure.WindowNode getWindowNodeAt(int);
+    method public int getWindowNodeCount();
+    method public boolean isHomeActivity();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.assist.AssistStructure> CREATOR;
+  }
+
+  public static class AssistStructure.ViewNode {
+    method public float getAlpha();
+    method @Nullable public String[] getAutofillHints();
+    method @Nullable public android.view.autofill.AutofillId getAutofillId();
+    method @Nullable public CharSequence[] getAutofillOptions();
+    method public int getAutofillType();
+    method @Nullable public android.view.autofill.AutofillValue getAutofillValue();
+    method public android.app.assist.AssistStructure.ViewNode getChildAt(int);
+    method public int getChildCount();
+    method @Nullable public String getClassName();
+    method @Nullable public CharSequence getContentDescription();
+    method public float getElevation();
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getHeight();
+    method @Nullable public String getHint();
+    method @Nullable public String getHintIdEntry();
+    method @Nullable public android.view.ViewStructure.HtmlInfo getHtmlInfo();
+    method public int getId();
+    method @Nullable public String getIdEntry();
+    method @Nullable public String getIdPackage();
+    method @Nullable public String getIdType();
+    method public int getImportantForAutofill();
+    method public int getInputType();
+    method public int getLeft();
+    method @Nullable public android.os.LocaleList getLocaleList();
+    method public int getMaxTextEms();
+    method public int getMaxTextLength();
+    method public int getMinTextEms();
+    method @Nullable public String[] getReceiveContentMimeTypes();
+    method public int getScrollX();
+    method public int getScrollY();
+    method @Nullable public CharSequence getText();
+    method public int getTextBackgroundColor();
+    method public int getTextColor();
+    method @Nullable public String getTextIdEntry();
+    method @Nullable public int[] getTextLineBaselines();
+    method @Nullable public int[] getTextLineCharOffsets();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method public float getTextSize();
+    method public int getTextStyle();
+    method public int getTop();
+    method public android.graphics.Matrix getTransformation();
+    method public int getVisibility();
+    method @Nullable public String getWebDomain();
+    method @Nullable public String getWebScheme();
+    method public int getWidth();
+    method public boolean isAccessibilityFocused();
+    method public boolean isActivated();
+    method public boolean isAssistBlocked();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isClickable();
+    method public boolean isContextClickable();
+    method public boolean isEnabled();
+    method public boolean isFocusable();
+    method public boolean isFocused();
+    method public boolean isLongClickable();
+    method public boolean isOpaque();
+    method public boolean isSelected();
+    field public static final int TEXT_COLOR_UNDEFINED = 1; // 0x1
+    field public static final int TEXT_STYLE_BOLD = 1; // 0x1
+    field public static final int TEXT_STYLE_ITALIC = 2; // 0x2
+    field public static final int TEXT_STYLE_STRIKE_THRU = 8; // 0x8
+    field public static final int TEXT_STYLE_UNDERLINE = 4; // 0x4
+  }
+
+  public static class AssistStructure.WindowNode {
+    method public int getDisplayId();
+    method public int getHeight();
+    method public int getLeft();
+    method public android.app.assist.AssistStructure.ViewNode getRootViewNode();
+    method public CharSequence getTitle();
+    method public int getTop();
+    method public int getWidth();
+  }
+
+}
+
+package android.app.backup {
+
+  public abstract class BackupAgent extends android.content.ContextWrapper {
+    ctor public BackupAgent();
+    method public final void fullBackupFile(java.io.File, android.app.backup.FullBackupDataOutput);
+    method public abstract void onBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onCreate();
+    method public void onDestroy();
+    method public void onFullBackup(android.app.backup.FullBackupDataOutput) throws java.io.IOException;
+    method public void onQuotaExceeded(long, long);
+    method public abstract void onRestore(android.app.backup.BackupDataInput, int, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onRestore(android.app.backup.BackupDataInput, long, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onRestoreFile(android.os.ParcelFileDescriptor, long, java.io.File, int, long, long) throws java.io.IOException;
+    method public void onRestoreFinished();
+    field public static final int FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED = 1; // 0x1
+    field public static final int FLAG_DEVICE_TO_DEVICE_TRANSFER = 2; // 0x2
+    field public static final int TYPE_DIRECTORY = 2; // 0x2
+    field public static final int TYPE_FILE = 1; // 0x1
+  }
+
+  public class BackupAgentHelper extends android.app.backup.BackupAgent {
+    ctor public BackupAgentHelper();
+    method public void addHelper(String, android.app.backup.BackupHelper);
+    method public void onBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void onRestore(android.app.backup.BackupDataInput, int, android.os.ParcelFileDescriptor) throws java.io.IOException;
+  }
+
+  public class BackupDataInput {
+    method public int getDataSize();
+    method public String getKey();
+    method public int readEntityData(byte[], int, int) throws java.io.IOException;
+    method public boolean readNextHeader() throws java.io.IOException;
+    method public void skipEntityData() throws java.io.IOException;
+  }
+
+  public class BackupDataInputStream extends java.io.InputStream {
+    method public String getKey();
+    method public int read() throws java.io.IOException;
+    method public int size();
+  }
+
+  public class BackupDataOutput {
+    method public long getQuota();
+    method public int getTransportFlags();
+    method public int writeEntityData(byte[], int) throws java.io.IOException;
+    method public int writeEntityHeader(String, int) throws java.io.IOException;
+  }
+
+  public interface BackupHelper {
+    method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor);
+    method public void restoreEntity(android.app.backup.BackupDataInputStream);
+    method public void writeNewStateDescription(android.os.ParcelFileDescriptor);
+  }
+
+  public class BackupManager {
+    ctor public BackupManager(android.content.Context);
+    method public void dataChanged();
+    method public static void dataChanged(String);
+    method @Nullable public android.os.UserHandle getUserForAncestralSerialNumber(long);
+    method @Deprecated public int requestRestore(android.app.backup.RestoreObserver);
+  }
+
+  public class FileBackupHelper implements android.app.backup.BackupHelper {
+    ctor public FileBackupHelper(android.content.Context, java.lang.String...);
+    method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor);
+    method public void restoreEntity(android.app.backup.BackupDataInputStream);
+    method public void writeNewStateDescription(android.os.ParcelFileDescriptor);
+  }
+
+  public class FullBackupDataOutput {
+    method public long getQuota();
+    method public int getTransportFlags();
+  }
+
+  public abstract class RestoreObserver {
+    ctor public RestoreObserver();
+    method public void onUpdate(int, String);
+    method public void restoreFinished(int);
+    method public void restoreStarting(int);
+  }
+
+  public class SharedPreferencesBackupHelper implements android.app.backup.BackupHelper {
+    ctor public SharedPreferencesBackupHelper(android.content.Context, java.lang.String...);
+    method public void performBackup(android.os.ParcelFileDescriptor, android.app.backup.BackupDataOutput, android.os.ParcelFileDescriptor);
+    method public void restoreEntity(android.app.backup.BackupDataInputStream);
+    method public void writeNewStateDescription(android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package android.app.blob {
+
+  public final class BlobHandle implements android.os.Parcelable {
+    method @NonNull public static android.app.blob.BlobHandle createWithSha256(@NonNull byte[], @NonNull CharSequence, long, @NonNull String);
+    method public int describeContents();
+    method public long getExpiryTimeMillis();
+    method @NonNull public CharSequence getLabel();
+    method @NonNull public byte[] getSha256Digest();
+    method @NonNull public String getTag();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.blob.BlobHandle> CREATOR;
+  }
+
+  public class BlobStoreManager {
+    method public void abandonSession(@IntRange(from=1) long) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int, long) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence, long) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @IdRes int) throws java.io.IOException;
+    method public void acquireLease(@NonNull android.app.blob.BlobHandle, @NonNull CharSequence) throws java.io.IOException;
+    method @IntRange(from=1) public long createSession(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+    method @NonNull public java.util.List<android.app.blob.BlobHandle> getLeasedBlobs() throws java.io.IOException;
+    method @IntRange(from=0) public long getRemainingLeaseQuotaBytes();
+    method @NonNull public android.os.ParcelFileDescriptor openBlob(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+    method @NonNull public android.app.blob.BlobStoreManager.Session openSession(@IntRange(from=1) long) throws java.io.IOException;
+    method public void releaseLease(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+  }
+
+  public static class BlobStoreManager.Session implements java.io.Closeable {
+    method public void abandon() throws java.io.IOException;
+    method public void allowPackageAccess(@NonNull String, @NonNull byte[]) throws java.io.IOException;
+    method public void allowPublicAccess() throws java.io.IOException;
+    method public void allowSameSignatureAccess() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void commit(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>) throws java.io.IOException;
+    method public long getSize() throws java.io.IOException;
+    method public boolean isPackageAccessAllowed(@NonNull String, @NonNull byte[]) throws java.io.IOException;
+    method public boolean isPublicAccessAllowed() throws java.io.IOException;
+    method public boolean isSameSignatureAccessAllowed() throws java.io.IOException;
+    method @NonNull public android.os.ParcelFileDescriptor openRead() throws java.io.IOException;
+    method @NonNull public android.os.ParcelFileDescriptor openWrite(long, long) throws java.io.IOException;
+  }
+
+}
+
+package android.app.job {
+
+  public class JobInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getBackoffPolicy();
+    method @Nullable public android.content.ClipData getClipData();
+    method public int getClipGrantFlags();
+    method public long getEstimatedNetworkDownloadBytes();
+    method public long getEstimatedNetworkUploadBytes();
+    method @NonNull public android.os.PersistableBundle getExtras();
+    method public long getFlexMillis();
+    method public int getId();
+    method public long getInitialBackoffMillis();
+    method public long getIntervalMillis();
+    method public long getMaxExecutionDelayMillis();
+    method public static final long getMinFlexMillis();
+    method public long getMinLatencyMillis();
+    method public static final long getMinPeriodMillis();
+    method @Deprecated public int getNetworkType();
+    method @Nullable public android.net.NetworkRequest getRequiredNetwork();
+    method @NonNull public android.content.ComponentName getService();
+    method @NonNull public android.os.Bundle getTransientExtras();
+    method public long getTriggerContentMaxDelay();
+    method public long getTriggerContentUpdateDelay();
+    method @Nullable public android.app.job.JobInfo.TriggerContentUri[] getTriggerContentUris();
+    method public boolean isExpedited();
+    method public boolean isImportantWhileForeground();
+    method public boolean isPeriodic();
+    method public boolean isPersisted();
+    method public boolean isPrefetch();
+    method public boolean isRequireBatteryNotLow();
+    method public boolean isRequireCharging();
+    method public boolean isRequireDeviceIdle();
+    method public boolean isRequireStorageNotLow();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BACKOFF_POLICY_EXPONENTIAL = 1; // 0x1
+    field public static final int BACKOFF_POLICY_LINEAR = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobInfo> CREATOR;
+    field public static final long DEFAULT_INITIAL_BACKOFF_MILLIS = 30000L; // 0x7530L
+    field public static final long MAX_BACKOFF_DELAY_MILLIS = 18000000L; // 0x112a880L
+    field public static final int NETWORK_BYTES_UNKNOWN = -1; // 0xffffffff
+    field public static final int NETWORK_TYPE_ANY = 1; // 0x1
+    field public static final int NETWORK_TYPE_CELLULAR = 4; // 0x4
+    field @Deprecated public static final int NETWORK_TYPE_METERED = 4; // 0x4
+    field public static final int NETWORK_TYPE_NONE = 0; // 0x0
+    field public static final int NETWORK_TYPE_NOT_ROAMING = 3; // 0x3
+    field public static final int NETWORK_TYPE_UNMETERED = 2; // 0x2
+  }
+
+  public static final class JobInfo.Builder {
+    ctor public JobInfo.Builder(int, @NonNull android.content.ComponentName);
+    method public android.app.job.JobInfo.Builder addTriggerContentUri(@NonNull android.app.job.JobInfo.TriggerContentUri);
+    method public android.app.job.JobInfo build();
+    method public android.app.job.JobInfo.Builder setBackoffCriteria(long, int);
+    method public android.app.job.JobInfo.Builder setClipData(@Nullable android.content.ClipData, int);
+    method public android.app.job.JobInfo.Builder setEstimatedNetworkBytes(long, long);
+    method @NonNull public android.app.job.JobInfo.Builder setExpedited(boolean);
+    method public android.app.job.JobInfo.Builder setExtras(@NonNull android.os.PersistableBundle);
+    method @Deprecated public android.app.job.JobInfo.Builder setImportantWhileForeground(boolean);
+    method public android.app.job.JobInfo.Builder setMinimumLatency(long);
+    method public android.app.job.JobInfo.Builder setOverrideDeadline(long);
+    method public android.app.job.JobInfo.Builder setPeriodic(long);
+    method public android.app.job.JobInfo.Builder setPeriodic(long, long);
+    method @RequiresPermission(android.Manifest.permission.RECEIVE_BOOT_COMPLETED) public android.app.job.JobInfo.Builder setPersisted(boolean);
+    method public android.app.job.JobInfo.Builder setPrefetch(boolean);
+    method public android.app.job.JobInfo.Builder setRequiredNetwork(@Nullable android.net.NetworkRequest);
+    method public android.app.job.JobInfo.Builder setRequiredNetworkType(int);
+    method public android.app.job.JobInfo.Builder setRequiresBatteryNotLow(boolean);
+    method public android.app.job.JobInfo.Builder setRequiresCharging(boolean);
+    method public android.app.job.JobInfo.Builder setRequiresDeviceIdle(boolean);
+    method public android.app.job.JobInfo.Builder setRequiresStorageNotLow(boolean);
+    method public android.app.job.JobInfo.Builder setTransientExtras(@NonNull android.os.Bundle);
+    method public android.app.job.JobInfo.Builder setTriggerContentMaxDelay(long);
+    method public android.app.job.JobInfo.Builder setTriggerContentUpdateDelay(long);
+  }
+
+  public static final class JobInfo.TriggerContentUri implements android.os.Parcelable {
+    ctor public JobInfo.TriggerContentUri(@NonNull android.net.Uri, int);
+    method public int describeContents();
+    method public int getFlags();
+    method public android.net.Uri getUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobInfo.TriggerContentUri> CREATOR;
+    field public static final int FLAG_NOTIFY_FOR_DESCENDANTS = 1; // 0x1
+  }
+
+  public class JobParameters implements android.os.Parcelable {
+    method public void completeWork(@NonNull android.app.job.JobWorkItem);
+    method @Nullable public android.app.job.JobWorkItem dequeueWork();
+    method public int describeContents();
+    method @Nullable public android.content.ClipData getClipData();
+    method public int getClipGrantFlags();
+    method @NonNull public android.os.PersistableBundle getExtras();
+    method public int getJobId();
+    method @Nullable public android.net.Network getNetwork();
+    method public int getStopReason();
+    method @NonNull public android.os.Bundle getTransientExtras();
+    method @Nullable public String[] getTriggeredContentAuthorities();
+    method @Nullable public android.net.Uri[] getTriggeredContentUris();
+    method public boolean isExpeditedJob();
+    method public boolean isOverrideDeadlineExpired();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobParameters> CREATOR;
+    field public static final int STOP_REASON_APP_STANDBY = 12; // 0xc
+    field public static final int STOP_REASON_BACKGROUND_RESTRICTION = 11; // 0xb
+    field public static final int STOP_REASON_CANCELLED_BY_APP = 1; // 0x1
+    field public static final int STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW = 5; // 0x5
+    field public static final int STOP_REASON_CONSTRAINT_CHARGING = 6; // 0x6
+    field public static final int STOP_REASON_CONSTRAINT_CONNECTIVITY = 7; // 0x7
+    field public static final int STOP_REASON_CONSTRAINT_DEVICE_IDLE = 8; // 0x8
+    field public static final int STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW = 9; // 0x9
+    field public static final int STOP_REASON_DEVICE_STATE = 4; // 0x4
+    field public static final int STOP_REASON_PREEMPT = 2; // 0x2
+    field public static final int STOP_REASON_QUOTA = 10; // 0xa
+    field public static final int STOP_REASON_SYSTEM_PROCESSING = 14; // 0xe
+    field public static final int STOP_REASON_TIMEOUT = 3; // 0x3
+    field public static final int STOP_REASON_UNDEFINED = 0; // 0x0
+    field public static final int STOP_REASON_USER = 13; // 0xd
+  }
+
+  public abstract class JobScheduler {
+    ctor public JobScheduler();
+    method public abstract void cancel(int);
+    method public abstract void cancelAll();
+    method public abstract int enqueue(@NonNull android.app.job.JobInfo, @NonNull android.app.job.JobWorkItem);
+    method @NonNull public abstract java.util.List<android.app.job.JobInfo> getAllPendingJobs();
+    method @Nullable public abstract android.app.job.JobInfo getPendingJob(int);
+    method public abstract int schedule(@NonNull android.app.job.JobInfo);
+    field public static final int RESULT_FAILURE = 0; // 0x0
+    field public static final int RESULT_SUCCESS = 1; // 0x1
+  }
+
+  public abstract class JobService extends android.app.Service {
+    ctor public JobService();
+    method public final void jobFinished(android.app.job.JobParameters, boolean);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract boolean onStartJob(android.app.job.JobParameters);
+    method public abstract boolean onStopJob(android.app.job.JobParameters);
+    field public static final String PERMISSION_BIND = "android.permission.BIND_JOB_SERVICE";
+  }
+
+  public abstract class JobServiceEngine {
+    ctor public JobServiceEngine(android.app.Service);
+    method public final android.os.IBinder getBinder();
+    method public void jobFinished(android.app.job.JobParameters, boolean);
+    method public abstract boolean onStartJob(android.app.job.JobParameters);
+    method public abstract boolean onStopJob(android.app.job.JobParameters);
+  }
+
+  public final class JobWorkItem implements android.os.Parcelable {
+    ctor public JobWorkItem(android.content.Intent);
+    ctor public JobWorkItem(android.content.Intent, long, long);
+    method public int describeContents();
+    method public int getDeliveryCount();
+    method public long getEstimatedNetworkDownloadBytes();
+    method public long getEstimatedNetworkUploadBytes();
+    method public android.content.Intent getIntent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.job.JobWorkItem> CREATOR;
+  }
+
+}
+
+package android.app.people {
+
+  public final class ConversationStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getActivity();
+    method public int getAvailability();
+    method @Nullable public CharSequence getDescription();
+    method public long getEndTimeMillis();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @NonNull public String getId();
+    method public long getStartTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ACTIVITY_ANNIVERSARY = 2; // 0x2
+    field public static final int ACTIVITY_AUDIO = 4; // 0x4
+    field public static final int ACTIVITY_BIRTHDAY = 1; // 0x1
+    field public static final int ACTIVITY_GAME = 6; // 0x6
+    field public static final int ACTIVITY_LOCATION = 7; // 0x7
+    field public static final int ACTIVITY_NEW_STORY = 3; // 0x3
+    field public static final int ACTIVITY_OTHER = 0; // 0x0
+    field public static final int ACTIVITY_UPCOMING_BIRTHDAY = 8; // 0x8
+    field public static final int ACTIVITY_VIDEO = 5; // 0x5
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_BUSY = 1; // 0x1
+    field public static final int AVAILABILITY_OFFLINE = 2; // 0x2
+    field public static final int AVAILABILITY_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.people.ConversationStatus> CREATOR;
+  }
+
+  public static final class ConversationStatus.Builder {
+    ctor public ConversationStatus.Builder(@NonNull String, @NonNull int);
+    method @NonNull public android.app.people.ConversationStatus build();
+    method @NonNull public android.app.people.ConversationStatus.Builder setAvailability(int);
+    method @NonNull public android.app.people.ConversationStatus.Builder setDescription(@Nullable CharSequence);
+    method @NonNull public android.app.people.ConversationStatus.Builder setEndTimeMillis(long);
+    method @NonNull public android.app.people.ConversationStatus.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.people.ConversationStatus.Builder setStartTimeMillis(long);
+  }
+
+  public final class PeopleManager {
+    method public void addOrUpdateStatus(@NonNull String, @NonNull android.app.people.ConversationStatus);
+    method public void clearStatus(@NonNull String, @NonNull String);
+    method public void clearStatuses(@NonNull String);
+    method @NonNull public java.util.List<android.app.people.ConversationStatus> getStatuses(@NonNull String);
+  }
+
+}
+
+package android.app.role {
+
+  public final class RoleManager {
+    method @NonNull public android.content.Intent createRequestRoleIntent(@NonNull String);
+    method public boolean isRoleAvailable(@NonNull String);
+    method public boolean isRoleHeld(@NonNull String);
+    field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";
+    field public static final String ROLE_BROWSER = "android.app.role.BROWSER";
+    field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION";
+    field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING";
+    field public static final String ROLE_DIALER = "android.app.role.DIALER";
+    field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY";
+    field public static final String ROLE_HOME = "android.app.role.HOME";
+    field public static final String ROLE_SMS = "android.app.role.SMS";
+  }
+
+}
+
+package android.app.slice {
+
+  public final class Slice implements android.os.Parcelable {
+    ctor protected Slice(android.os.Parcel);
+    method public int describeContents();
+    method public java.util.List<java.lang.String> getHints();
+    method public java.util.List<android.app.slice.SliceItem> getItems();
+    method @Nullable public android.app.slice.SliceSpec getSpec();
+    method public android.net.Uri getUri();
+    method public boolean isCallerNeeded();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.Slice> CREATOR;
+    field public static final String EXTRA_RANGE_VALUE = "android.app.slice.extra.RANGE_VALUE";
+    field public static final String EXTRA_TOGGLE_STATE = "android.app.slice.extra.TOGGLE_STATE";
+    field public static final String HINT_ACTIONS = "actions";
+    field public static final String HINT_ERROR = "error";
+    field public static final String HINT_HORIZONTAL = "horizontal";
+    field public static final String HINT_KEYWORDS = "keywords";
+    field public static final String HINT_LARGE = "large";
+    field public static final String HINT_LAST_UPDATED = "last_updated";
+    field public static final String HINT_LIST = "list";
+    field public static final String HINT_LIST_ITEM = "list_item";
+    field public static final String HINT_NO_TINT = "no_tint";
+    field public static final String HINT_PARTIAL = "partial";
+    field public static final String HINT_PERMISSION_REQUEST = "permission_request";
+    field public static final String HINT_SEE_MORE = "see_more";
+    field public static final String HINT_SELECTED = "selected";
+    field public static final String HINT_SHORTCUT = "shortcut";
+    field public static final String HINT_SUMMARY = "summary";
+    field public static final String HINT_TITLE = "title";
+    field public static final String HINT_TTL = "ttl";
+    field public static final String SUBTYPE_COLOR = "color";
+    field public static final String SUBTYPE_CONTENT_DESCRIPTION = "content_description";
+    field public static final String SUBTYPE_LAYOUT_DIRECTION = "layout_direction";
+    field public static final String SUBTYPE_MAX = "max";
+    field public static final String SUBTYPE_MESSAGE = "message";
+    field public static final String SUBTYPE_MILLIS = "millis";
+    field public static final String SUBTYPE_PRIORITY = "priority";
+    field public static final String SUBTYPE_RANGE = "range";
+    field public static final String SUBTYPE_SOURCE = "source";
+    field public static final String SUBTYPE_TOGGLE = "toggle";
+    field public static final String SUBTYPE_VALUE = "value";
+  }
+
+  public static class Slice.Builder {
+    ctor public Slice.Builder(@NonNull android.net.Uri, android.app.slice.SliceSpec);
+    ctor public Slice.Builder(@NonNull android.app.slice.Slice.Builder);
+    method public android.app.slice.Slice.Builder addAction(@NonNull android.app.PendingIntent, @NonNull android.app.slice.Slice, @Nullable String);
+    method public android.app.slice.Slice.Builder addBundle(android.os.Bundle, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addHints(java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addIcon(android.graphics.drawable.Icon, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addInt(int, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addLong(long, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addRemoteInput(android.app.RemoteInput, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice.Builder addSubSlice(@NonNull android.app.slice.Slice, @Nullable String);
+    method public android.app.slice.Slice.Builder addText(CharSequence, @Nullable String, java.util.List<java.lang.String>);
+    method public android.app.slice.Slice build();
+    method public android.app.slice.Slice.Builder setCallerNeeded(boolean);
+  }
+
+  public final class SliceItem implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.app.PendingIntent getAction();
+    method public android.os.Bundle getBundle();
+    method public String getFormat();
+    method @NonNull public java.util.List<java.lang.String> getHints();
+    method public android.graphics.drawable.Icon getIcon();
+    method public int getInt();
+    method public long getLong();
+    method public android.app.RemoteInput getRemoteInput();
+    method public android.app.slice.Slice getSlice();
+    method public String getSubType();
+    method public CharSequence getText();
+    method public boolean hasHint(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.SliceItem> CREATOR;
+    field public static final String FORMAT_ACTION = "action";
+    field public static final String FORMAT_BUNDLE = "bundle";
+    field public static final String FORMAT_IMAGE = "image";
+    field public static final String FORMAT_INT = "int";
+    field public static final String FORMAT_LONG = "long";
+    field public static final String FORMAT_REMOTE_INPUT = "input";
+    field public static final String FORMAT_SLICE = "slice";
+    field public static final String FORMAT_TEXT = "text";
+  }
+
+  public class SliceManager {
+    method @Nullable public android.app.slice.Slice bindSlice(@NonNull android.net.Uri, @NonNull java.util.Set<android.app.slice.SliceSpec>);
+    method @Nullable public android.app.slice.Slice bindSlice(@NonNull android.content.Intent, @NonNull java.util.Set<android.app.slice.SliceSpec>);
+    method public int checkSlicePermission(@NonNull android.net.Uri, int, int);
+    method @NonNull public java.util.List<android.net.Uri> getPinnedSlices();
+    method @NonNull public java.util.Set<android.app.slice.SliceSpec> getPinnedSpecs(android.net.Uri);
+    method @NonNull @WorkerThread public java.util.Collection<android.net.Uri> getSliceDescendants(@NonNull android.net.Uri);
+    method public void grantSlicePermission(@NonNull String, @NonNull android.net.Uri);
+    method @Nullable public android.net.Uri mapIntentToUri(@NonNull android.content.Intent);
+    method public void pinSlice(@NonNull android.net.Uri, @NonNull java.util.Set<android.app.slice.SliceSpec>);
+    method public void revokeSlicePermission(@NonNull String, @NonNull android.net.Uri);
+    method public void unpinSlice(@NonNull android.net.Uri);
+    field public static final String CATEGORY_SLICE = "android.app.slice.category.SLICE";
+    field public static final String SLICE_METADATA_KEY = "android.metadata.SLICE_URI";
+  }
+
+  public class SliceMetrics {
+    ctor public SliceMetrics(@NonNull android.content.Context, @NonNull android.net.Uri);
+    method public void logHidden();
+    method public void logTouch(int, @NonNull android.net.Uri);
+    method public void logVisible();
+  }
+
+  public abstract class SliceProvider extends android.content.ContentProvider {
+    ctor public SliceProvider(@NonNull java.lang.String...);
+    ctor public SliceProvider();
+    method public final int delete(android.net.Uri, String, String[]);
+    method public final String getType(android.net.Uri);
+    method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public android.app.slice.Slice onBindSlice(android.net.Uri, java.util.Set<android.app.slice.SliceSpec>);
+    method @NonNull public android.app.PendingIntent onCreatePermissionRequest(android.net.Uri);
+    method @NonNull public java.util.Collection<android.net.Uri> onGetSliceDescendants(@NonNull android.net.Uri);
+    method @NonNull public android.net.Uri onMapIntentToUri(android.content.Intent);
+    method public void onSlicePinned(android.net.Uri);
+    method public void onSliceUnpinned(android.net.Uri);
+    method public final android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method public final android.database.Cursor query(android.net.Uri, String[], String, String[], String, android.os.CancellationSignal);
+    method public final android.database.Cursor query(android.net.Uri, String[], android.os.Bundle, android.os.CancellationSignal);
+    method public final int update(android.net.Uri, android.content.ContentValues, String, String[]);
+    field public static final String SLICE_TYPE = "vnd.android.slice";
+  }
+
+  public final class SliceSpec implements android.os.Parcelable {
+    ctor public SliceSpec(@NonNull String, int);
+    method public boolean canRender(@NonNull android.app.slice.SliceSpec);
+    method public int describeContents();
+    method public int getRevision();
+    method public String getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.slice.SliceSpec> CREATOR;
+  }
+
+}
+
+package android.app.usage {
+
+  public final class ConfigurationStats implements android.os.Parcelable {
+    ctor public ConfigurationStats(android.app.usage.ConfigurationStats);
+    method public int describeContents();
+    method public int getActivationCount();
+    method public android.content.res.Configuration getConfiguration();
+    method public long getFirstTimeStamp();
+    method public long getLastTimeActive();
+    method public long getLastTimeStamp();
+    method public long getTotalTimeActive();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.ConfigurationStats> CREATOR;
+  }
+
+  public final class EventStats implements android.os.Parcelable {
+    ctor public EventStats(android.app.usage.EventStats);
+    method public void add(android.app.usage.EventStats);
+    method public int describeContents();
+    method public int getCount();
+    method public int getEventType();
+    method public long getFirstTimeStamp();
+    method public long getLastEventTime();
+    method public long getLastTimeStamp();
+    method public long getTotalTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.EventStats> CREATOR;
+  }
+
+  public final class ExternalStorageStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAppBytes();
+    method public long getAudioBytes();
+    method public long getImageBytes();
+    method public long getTotalBytes();
+    method public long getVideoBytes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.ExternalStorageStats> CREATOR;
+  }
+
+  public final class NetworkStats implements java.lang.AutoCloseable {
+    method public void close();
+    method public boolean getNextBucket(android.app.usage.NetworkStats.Bucket);
+    method public boolean hasNextBucket();
+  }
+
+  public static class NetworkStats.Bucket {
+    ctor public NetworkStats.Bucket();
+    method public int getDefaultNetworkStatus();
+    method public long getEndTimeStamp();
+    method public int getMetered();
+    method public int getRoaming();
+    method public long getRxBytes();
+    method public long getRxPackets();
+    method public long getStartTimeStamp();
+    method public int getState();
+    method public int getTag();
+    method public long getTxBytes();
+    method public long getTxPackets();
+    method public int getUid();
+    field public static final int DEFAULT_NETWORK_ALL = -1; // 0xffffffff
+    field public static final int DEFAULT_NETWORK_NO = 1; // 0x1
+    field public static final int DEFAULT_NETWORK_YES = 2; // 0x2
+    field public static final int METERED_ALL = -1; // 0xffffffff
+    field public static final int METERED_NO = 1; // 0x1
+    field public static final int METERED_YES = 2; // 0x2
+    field public static final int ROAMING_ALL = -1; // 0xffffffff
+    field public static final int ROAMING_NO = 1; // 0x1
+    field public static final int ROAMING_YES = 2; // 0x2
+    field public static final int STATE_ALL = -1; // 0xffffffff
+    field public static final int STATE_DEFAULT = 1; // 0x1
+    field public static final int STATE_FOREGROUND = 2; // 0x2
+    field public static final int TAG_NONE = 0; // 0x0
+    field public static final int UID_ALL = -1; // 0xffffffff
+    field public static final int UID_REMOVED = -4; // 0xfffffffc
+    field public static final int UID_TETHERING = -5; // 0xfffffffb
+  }
+
+  public class NetworkStatsManager {
+    method @WorkerThread public android.app.usage.NetworkStats queryDetails(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUid(int, String, long, long, int) throws java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTag(int, String, long, long, int, int) throws java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats queryDetailsForUidTagState(int, String, long, long, int, int, int) throws java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats querySummary(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForDevice(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method @WorkerThread public android.app.usage.NetworkStats.Bucket querySummaryForUser(int, String, long, long) throws android.os.RemoteException, java.lang.SecurityException;
+    method public void registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback);
+    method public void registerUsageCallback(int, String, long, android.app.usage.NetworkStatsManager.UsageCallback, @Nullable android.os.Handler);
+    method public void unregisterUsageCallback(android.app.usage.NetworkStatsManager.UsageCallback);
+  }
+
+  public abstract static class NetworkStatsManager.UsageCallback {
+    ctor public NetworkStatsManager.UsageCallback();
+    method public abstract void onThresholdReached(int, String);
+  }
+
+  public final class StorageStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAppBytes();
+    method public long getCacheBytes();
+    method public long getDataBytes();
+    method public long getExternalCacheBytes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR;
+  }
+
+  public class StorageStatsManager {
+    method @WorkerThread public long getFreeBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @WorkerThread public long getTotalBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @NonNull @WorkerThread public android.app.usage.ExternalStorageStats queryExternalStatsForUser(@NonNull java.util.UUID, @NonNull android.os.UserHandle) throws java.io.IOException;
+    method @NonNull @WorkerThread public android.app.usage.StorageStats queryStatsForPackage(@NonNull java.util.UUID, @NonNull String, @NonNull android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @WorkerThread public android.app.usage.StorageStats queryStatsForUid(@NonNull java.util.UUID, int) throws java.io.IOException;
+    method @NonNull @WorkerThread public android.app.usage.StorageStats queryStatsForUser(@NonNull java.util.UUID, @NonNull android.os.UserHandle) throws java.io.IOException;
+  }
+
+  public final class UsageEvents implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getNextEvent(android.app.usage.UsageEvents.Event);
+    method public boolean hasNextEvent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.UsageEvents> CREATOR;
+  }
+
+  public static final class UsageEvents.Event {
+    ctor public UsageEvents.Event();
+    method public int getAppStandbyBucket();
+    method public String getClassName();
+    method public android.content.res.Configuration getConfiguration();
+    method public int getEventType();
+    method public String getPackageName();
+    method public String getShortcutId();
+    method public long getTimeStamp();
+    field public static final int ACTIVITY_PAUSED = 2; // 0x2
+    field public static final int ACTIVITY_RESUMED = 1; // 0x1
+    field public static final int ACTIVITY_STOPPED = 23; // 0x17
+    field public static final int CONFIGURATION_CHANGE = 5; // 0x5
+    field public static final int DEVICE_SHUTDOWN = 26; // 0x1a
+    field public static final int DEVICE_STARTUP = 27; // 0x1b
+    field public static final int FOREGROUND_SERVICE_START = 19; // 0x13
+    field public static final int FOREGROUND_SERVICE_STOP = 20; // 0x14
+    field public static final int KEYGUARD_HIDDEN = 18; // 0x12
+    field public static final int KEYGUARD_SHOWN = 17; // 0x11
+    field @Deprecated public static final int MOVE_TO_BACKGROUND = 2; // 0x2
+    field @Deprecated public static final int MOVE_TO_FOREGROUND = 1; // 0x1
+    field public static final int NONE = 0; // 0x0
+    field public static final int SCREEN_INTERACTIVE = 15; // 0xf
+    field public static final int SCREEN_NON_INTERACTIVE = 16; // 0x10
+    field public static final int SHORTCUT_INVOCATION = 8; // 0x8
+    field public static final int STANDBY_BUCKET_CHANGED = 11; // 0xb
+    field public static final int USER_INTERACTION = 7; // 0x7
+  }
+
+  public final class UsageStats implements android.os.Parcelable {
+    ctor public UsageStats(android.app.usage.UsageStats);
+    method public void add(android.app.usage.UsageStats);
+    method public int describeContents();
+    method public long getFirstTimeStamp();
+    method public long getLastTimeForegroundServiceUsed();
+    method public long getLastTimeStamp();
+    method public long getLastTimeUsed();
+    method public long getLastTimeVisible();
+    method public String getPackageName();
+    method public long getTotalTimeForegroundServiceUsed();
+    method public long getTotalTimeInForeground();
+    method public long getTotalTimeVisible();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.UsageStats> CREATOR;
+  }
+
+  public final class UsageStatsManager {
+    method public int getAppStandbyBucket();
+    method public boolean isAppInactive(String);
+    method public java.util.Map<java.lang.String,android.app.usage.UsageStats> queryAndAggregateUsageStats(long, long);
+    method public java.util.List<android.app.usage.ConfigurationStats> queryConfigurations(int, long, long);
+    method public java.util.List<android.app.usage.EventStats> queryEventStats(int, long, long);
+    method public android.app.usage.UsageEvents queryEvents(long, long);
+    method public android.app.usage.UsageEvents queryEventsForSelf(long, long);
+    method public java.util.List<android.app.usage.UsageStats> queryUsageStats(int, long, long);
+    field public static final int INTERVAL_BEST = 4; // 0x4
+    field public static final int INTERVAL_DAILY = 0; // 0x0
+    field public static final int INTERVAL_MONTHLY = 2; // 0x2
+    field public static final int INTERVAL_WEEKLY = 1; // 0x1
+    field public static final int INTERVAL_YEARLY = 3; // 0x3
+    field public static final int STANDBY_BUCKET_ACTIVE = 10; // 0xa
+    field public static final int STANDBY_BUCKET_FREQUENT = 30; // 0x1e
+    field public static final int STANDBY_BUCKET_RARE = 40; // 0x28
+    field public static final int STANDBY_BUCKET_RESTRICTED = 45; // 0x2d
+    field public static final int STANDBY_BUCKET_WORKING_SET = 20; // 0x14
+  }
+
+}
+
+package android.appwidget {
+
+  public class AppWidgetHost {
+    ctor public AppWidgetHost(android.content.Context, int);
+    method public int allocateAppWidgetId();
+    method protected void clearViews();
+    method public final android.appwidget.AppWidgetHostView createView(android.content.Context, int, android.appwidget.AppWidgetProviderInfo);
+    method public static void deleteAllHosts();
+    method public void deleteAppWidgetId(int);
+    method public void deleteHost();
+    method public int[] getAppWidgetIds();
+    method public void onAppWidgetRemoved(int);
+    method protected android.appwidget.AppWidgetHostView onCreateView(android.content.Context, int, android.appwidget.AppWidgetProviderInfo);
+    method protected void onProviderChanged(int, android.appwidget.AppWidgetProviderInfo);
+    method protected void onProvidersChanged();
+    method public final void startAppWidgetConfigureActivityForResult(@NonNull android.app.Activity, int, int, int, @Nullable android.os.Bundle);
+    method public void startListening();
+    method public void stopListening();
+  }
+
+  public class AppWidgetHostView extends android.widget.FrameLayout {
+    ctor public AppWidgetHostView(android.content.Context);
+    ctor public AppWidgetHostView(android.content.Context, int, int);
+    method public int getAppWidgetId();
+    method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo();
+    method public static android.graphics.Rect getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect);
+    method protected android.view.View getDefaultView();
+    method protected android.view.View getErrorView();
+    method protected void prepareView(android.view.View);
+    method public void resetColorResources();
+    method public void setAppWidget(int, android.appwidget.AppWidgetProviderInfo);
+    method public void setColorResources(@NonNull android.util.SparseIntArray);
+    method public void setExecutor(java.util.concurrent.Executor);
+    method public void setOnLightBackground(boolean);
+    method public void updateAppWidget(android.widget.RemoteViews);
+    method public void updateAppWidgetOptions(android.os.Bundle);
+    method @Deprecated public void updateAppWidgetSize(android.os.Bundle, int, int, int, int);
+    method public void updateAppWidgetSize(@NonNull android.os.Bundle, @NonNull java.util.List<android.util.SizeF>);
+  }
+
+  public class AppWidgetManager {
+    method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName);
+    method public boolean bindAppWidgetIdIfAllowed(int, android.content.ComponentName, android.os.Bundle);
+    method public boolean bindAppWidgetIdIfAllowed(int, android.os.UserHandle, android.content.ComponentName, android.os.Bundle);
+    method public int[] getAppWidgetIds(android.content.ComponentName);
+    method public android.appwidget.AppWidgetProviderInfo getAppWidgetInfo(int);
+    method public android.os.Bundle getAppWidgetOptions(int);
+    method public java.util.List<android.appwidget.AppWidgetProviderInfo> getInstalledProviders();
+    method @NonNull public java.util.List<android.appwidget.AppWidgetProviderInfo> getInstalledProvidersForPackage(@NonNull String, @Nullable android.os.UserHandle);
+    method @NonNull public java.util.List<android.appwidget.AppWidgetProviderInfo> getInstalledProvidersForProfile(@Nullable android.os.UserHandle);
+    method public static android.appwidget.AppWidgetManager getInstance(android.content.Context);
+    method public boolean isRequestPinAppWidgetSupported();
+    method public void notifyAppWidgetViewDataChanged(int[], int);
+    method public void notifyAppWidgetViewDataChanged(int, int);
+    method public void partiallyUpdateAppWidget(int[], android.widget.RemoteViews);
+    method public void partiallyUpdateAppWidget(int, android.widget.RemoteViews);
+    method public boolean requestPinAppWidget(@NonNull android.content.ComponentName, @Nullable android.os.Bundle, @Nullable android.app.PendingIntent);
+    method public void updateAppWidget(int[], android.widget.RemoteViews);
+    method public void updateAppWidget(int, android.widget.RemoteViews);
+    method public void updateAppWidget(android.content.ComponentName, android.widget.RemoteViews);
+    method public void updateAppWidgetOptions(int, android.os.Bundle);
+    method public void updateAppWidgetProviderInfo(android.content.ComponentName, @Nullable String);
+    field public static final String ACTION_APPWIDGET_BIND = "android.appwidget.action.APPWIDGET_BIND";
+    field public static final String ACTION_APPWIDGET_CONFIGURE = "android.appwidget.action.APPWIDGET_CONFIGURE";
+    field public static final String ACTION_APPWIDGET_DELETED = "android.appwidget.action.APPWIDGET_DELETED";
+    field public static final String ACTION_APPWIDGET_DISABLED = "android.appwidget.action.APPWIDGET_DISABLED";
+    field public static final String ACTION_APPWIDGET_ENABLED = "android.appwidget.action.APPWIDGET_ENABLED";
+    field public static final String ACTION_APPWIDGET_HOST_RESTORED = "android.appwidget.action.APPWIDGET_HOST_RESTORED";
+    field public static final String ACTION_APPWIDGET_OPTIONS_CHANGED = "android.appwidget.action.APPWIDGET_UPDATE_OPTIONS";
+    field public static final String ACTION_APPWIDGET_PICK = "android.appwidget.action.APPWIDGET_PICK";
+    field public static final String ACTION_APPWIDGET_RESTORED = "android.appwidget.action.APPWIDGET_RESTORED";
+    field public static final String ACTION_APPWIDGET_UPDATE = "android.appwidget.action.APPWIDGET_UPDATE";
+    field public static final String EXTRA_APPWIDGET_ID = "appWidgetId";
+    field public static final String EXTRA_APPWIDGET_IDS = "appWidgetIds";
+    field public static final String EXTRA_APPWIDGET_OLD_IDS = "appWidgetOldIds";
+    field public static final String EXTRA_APPWIDGET_OPTIONS = "appWidgetOptions";
+    field public static final String EXTRA_APPWIDGET_PREVIEW = "appWidgetPreview";
+    field public static final String EXTRA_APPWIDGET_PROVIDER = "appWidgetProvider";
+    field public static final String EXTRA_APPWIDGET_PROVIDER_PROFILE = "appWidgetProviderProfile";
+    field public static final String EXTRA_CUSTOM_EXTRAS = "customExtras";
+    field public static final String EXTRA_CUSTOM_INFO = "customInfo";
+    field public static final String EXTRA_HOST_ID = "hostId";
+    field public static final int INVALID_APPWIDGET_ID = 0; // 0x0
+    field public static final String META_DATA_APPWIDGET_PROVIDER = "android.appwidget.provider";
+    field public static final String OPTION_APPWIDGET_HOST_CATEGORY = "appWidgetCategory";
+    field public static final String OPTION_APPWIDGET_MAX_HEIGHT = "appWidgetMaxHeight";
+    field public static final String OPTION_APPWIDGET_MAX_WIDTH = "appWidgetMaxWidth";
+    field public static final String OPTION_APPWIDGET_MIN_HEIGHT = "appWidgetMinHeight";
+    field public static final String OPTION_APPWIDGET_MIN_WIDTH = "appWidgetMinWidth";
+    field public static final String OPTION_APPWIDGET_RESTORE_COMPLETED = "appWidgetRestoreCompleted";
+    field public static final String OPTION_APPWIDGET_SIZES = "appWidgetSizes";
+  }
+
+  public class AppWidgetProvider extends android.content.BroadcastReceiver {
+    ctor public AppWidgetProvider();
+    method public void onAppWidgetOptionsChanged(android.content.Context, android.appwidget.AppWidgetManager, int, android.os.Bundle);
+    method public void onDeleted(android.content.Context, int[]);
+    method public void onDisabled(android.content.Context);
+    method public void onEnabled(android.content.Context);
+    method public void onReceive(android.content.Context, android.content.Intent);
+    method public void onRestored(android.content.Context, int[], int[]);
+    method public void onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]);
+  }
+
+  public class AppWidgetProviderInfo implements android.os.Parcelable {
+    ctor public AppWidgetProviderInfo();
+    ctor public AppWidgetProviderInfo(android.os.Parcel);
+    method public android.appwidget.AppWidgetProviderInfo clone();
+    method public int describeContents();
+    method @NonNull public android.content.pm.ActivityInfo getActivityInfo();
+    method public final android.os.UserHandle getProfile();
+    method @Nullable public final CharSequence loadDescription(@NonNull android.content.Context);
+    method public final android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context, int);
+    method public final String loadLabel(android.content.pm.PackageManager);
+    method public final android.graphics.drawable.Drawable loadPreviewImage(@NonNull android.content.Context, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.appwidget.AppWidgetProviderInfo> CREATOR;
+    field public static final int RESIZE_BOTH = 3; // 0x3
+    field public static final int RESIZE_HORIZONTAL = 1; // 0x1
+    field public static final int RESIZE_NONE = 0; // 0x0
+    field public static final int RESIZE_VERTICAL = 2; // 0x2
+    field public static final int WIDGET_CATEGORY_HOME_SCREEN = 1; // 0x1
+    field public static final int WIDGET_CATEGORY_KEYGUARD = 2; // 0x2
+    field public static final int WIDGET_CATEGORY_SEARCHBOX = 4; // 0x4
+    field public static final int WIDGET_FEATURE_CONFIGURATION_OPTIONAL = 4; // 0x4
+    field public static final int WIDGET_FEATURE_HIDE_FROM_PICKER = 2; // 0x2
+    field public static final int WIDGET_FEATURE_RECONFIGURABLE = 1; // 0x1
+    field public int autoAdvanceViewId;
+    field public android.content.ComponentName configure;
+    field @IdRes public int descriptionRes;
+    field public int icon;
+    field public int initialKeyguardLayout;
+    field public int initialLayout;
+    field @Deprecated public String label;
+    field public int maxResizeHeight;
+    field public int maxResizeWidth;
+    field public int minHeight;
+    field public int minResizeHeight;
+    field public int minResizeWidth;
+    field public int minWidth;
+    field public int previewImage;
+    field @IdRes public int previewLayout;
+    field public android.content.ComponentName provider;
+    field public int resizeMode;
+    field public int targetCellHeight;
+    field public int targetCellWidth;
+    field public int updatePeriodMillis;
+    field public int widgetCategory;
+    field public int widgetFeatures;
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile {
+    method public void finalize();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isA2dpPlaying(android.bluetooth.BluetoothDevice);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_PLAYING_STATE_CHANGED = "android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED";
+    field public static final int STATE_NOT_PLAYING = 11; // 0xb
+    field public static final int STATE_PLAYING = 10; // 0xa
+  }
+
+  public final class BluetoothAdapter {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean cancelDiscovery();
+    method public static boolean checkBluetoothAddress(String);
+    method public void closeProfileProxy(int, android.bluetooth.BluetoothProfile);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disable();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean enable();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, "android.permission.LOCAL_MAC_ADDRESS"}) public String getAddress();
+    method public android.bluetooth.le.BluetoothLeAdvertiser getBluetoothLeAdvertiser();
+    method public android.bluetooth.le.BluetoothLeScanner getBluetoothLeScanner();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.Set<android.bluetooth.BluetoothDevice> getBondedDevices();
+    method @Deprecated public static android.bluetooth.BluetoothAdapter getDefaultAdapter();
+    method public int getLeMaximumAdvertisingDataLength();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public String getName();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getProfileConnectionState(int);
+    method public boolean getProfileProxy(android.content.Context, android.bluetooth.BluetoothProfile.ServiceListener, int);
+    method public android.bluetooth.BluetoothDevice getRemoteDevice(String);
+    method public android.bluetooth.BluetoothDevice getRemoteDevice(byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public int getScanMode();
+    method public int getState();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean isDiscovering();
+    method public boolean isEnabled();
+    method public boolean isLe2MPhySupported();
+    method public boolean isLeCodedPhySupported();
+    method public boolean isLeExtendedAdvertisingSupported();
+    method public boolean isLePeriodicAdvertisingSupported();
+    method public boolean isMultipleAdvertisementSupported();
+    method public boolean isOffloadedFilteringSupported();
+    method public boolean isOffloadedScanBatchingSupported();
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingInsecureL2capChannel() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingInsecureRfcommWithServiceRecord(String, java.util.UUID) throws java.io.IOException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingL2capChannel() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothServerSocket listenUsingRfcommWithServiceRecord(String, java.util.UUID) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean setName(String);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean startDiscovery();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean startLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public boolean startLeScan(java.util.UUID[], android.bluetooth.BluetoothAdapter.LeScanCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void stopLeScan(android.bluetooth.BluetoothAdapter.LeScanCallback);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_LOCAL_NAME_CHANGED = "android.bluetooth.adapter.action.LOCAL_NAME_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public static final String ACTION_REQUEST_DISCOVERABLE = "android.bluetooth.adapter.action.REQUEST_DISCOVERABLE";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_REQUEST_ENABLE = "android.bluetooth.adapter.action.REQUEST_ENABLE";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_SCAN_MODE_CHANGED = "android.bluetooth.adapter.action.SCAN_MODE_CHANGED";
+    field public static final String ACTION_STATE_CHANGED = "android.bluetooth.adapter.action.STATE_CHANGED";
+    field public static final int ERROR = -2147483648; // 0x80000000
+    field public static final String EXTRA_CONNECTION_STATE = "android.bluetooth.adapter.extra.CONNECTION_STATE";
+    field public static final String EXTRA_DISCOVERABLE_DURATION = "android.bluetooth.adapter.extra.DISCOVERABLE_DURATION";
+    field public static final String EXTRA_LOCAL_NAME = "android.bluetooth.adapter.extra.LOCAL_NAME";
+    field public static final String EXTRA_PREVIOUS_CONNECTION_STATE = "android.bluetooth.adapter.extra.PREVIOUS_CONNECTION_STATE";
+    field public static final String EXTRA_PREVIOUS_SCAN_MODE = "android.bluetooth.adapter.extra.PREVIOUS_SCAN_MODE";
+    field public static final String EXTRA_PREVIOUS_STATE = "android.bluetooth.adapter.extra.PREVIOUS_STATE";
+    field public static final String EXTRA_SCAN_MODE = "android.bluetooth.adapter.extra.SCAN_MODE";
+    field public static final String EXTRA_STATE = "android.bluetooth.adapter.extra.STATE";
+    field public static final int SCAN_MODE_CONNECTABLE = 21; // 0x15
+    field public static final int SCAN_MODE_CONNECTABLE_DISCOVERABLE = 23; // 0x17
+    field public static final int SCAN_MODE_NONE = 20; // 0x14
+    field public static final int STATE_CONNECTED = 2; // 0x2
+    field public static final int STATE_CONNECTING = 1; // 0x1
+    field public static final int STATE_DISCONNECTED = 0; // 0x0
+    field public static final int STATE_DISCONNECTING = 3; // 0x3
+    field public static final int STATE_OFF = 10; // 0xa
+    field public static final int STATE_ON = 12; // 0xc
+    field public static final int STATE_TURNING_OFF = 13; // 0xd
+    field public static final int STATE_TURNING_ON = 11; // 0xb
+  }
+
+  public static interface BluetoothAdapter.LeScanCallback {
+    method public void onLeScan(android.bluetooth.BluetoothDevice, int, byte[]);
+  }
+
+  public class BluetoothAssignedNumbers {
+    field public static final int AAMP_OF_AMERICA = 190; // 0xbe
+    field public static final int ACCEL_SEMICONDUCTOR = 74; // 0x4a
+    field public static final int ACE_SENSOR = 188; // 0xbc
+    field public static final int ADIDAS = 195; // 0xc3
+    field public static final int ADVANCED_PANMOBIL_SYSTEMS = 145; // 0x91
+    field public static final int AIROHA_TECHNOLOGY = 148; // 0x94
+    field public static final int ALCATEL = 36; // 0x24
+    field public static final int ALPWISE = 154; // 0x9a
+    field public static final int AMICCOM_ELECTRONICS = 192; // 0xc0
+    field public static final int APLIX = 189; // 0xbd
+    field public static final int APPLE = 76; // 0x4c
+    field public static final int APT_LICENSING = 79; // 0x4f
+    field public static final int ARCHOS = 207; // 0xcf
+    field public static final int ARP_DEVICES = 168; // 0xa8
+    field public static final int ATHEROS_COMMUNICATIONS = 69; // 0x45
+    field public static final int ATMEL = 19; // 0x13
+    field public static final int AUSTCO_COMMUNICATION_SYSTEMS = 213; // 0xd5
+    field public static final int AUTONET_MOBILE = 127; // 0x7f
+    field public static final int AVAGO = 78; // 0x4e
+    field public static final int AVM_BERLIN = 31; // 0x1f
+    field public static final int A_AND_D_ENGINEERING = 105; // 0x69
+    field public static final int A_AND_R_CAMBRIDGE = 124; // 0x7c
+    field public static final int BANDSPEED = 32; // 0x20
+    field public static final int BAND_XI_INTERNATIONAL = 100; // 0x64
+    field public static final int BDE_TECHNOLOGY = 180; // 0xb4
+    field public static final int BEATS_ELECTRONICS = 204; // 0xcc
+    field public static final int BEAUTIFUL_ENTERPRISE = 108; // 0x6c
+    field public static final int BEKEY = 178; // 0xb2
+    field public static final int BELKIN_INTERNATIONAL = 92; // 0x5c
+    field public static final int BINAURIC = 203; // 0xcb
+    field public static final int BIOSENTRONICS = 219; // 0xdb
+    field public static final int BLUEGIGA = 71; // 0x47
+    field public static final int BLUERADIOS = 133; // 0x85
+    field public static final int BLUETOOTH_SIG = 63; // 0x3f
+    field public static final int BLUETREK_TECHNOLOGIES = 151; // 0x97
+    field public static final int BOSE = 158; // 0x9e
+    field public static final int BRIARTEK = 109; // 0x6d
+    field public static final int BROADCOM = 15; // 0xf
+    field public static final int CAEN_RFID = 170; // 0xaa
+    field public static final int CAMBRIDGE_SILICON_RADIO = 10; // 0xa
+    field public static final int CATC = 52; // 0x34
+    field public static final int CINETIX = 175; // 0xaf
+    field public static final int CLARINOX_TECHNOLOGIES = 179; // 0xb3
+    field public static final int COLORFY = 156; // 0x9c
+    field public static final int COMMIL = 51; // 0x33
+    field public static final int CONEXANT_SYSTEMS = 28; // 0x1c
+    field public static final int CONNECTBLUE = 113; // 0x71
+    field public static final int CONTINENTAL_AUTOMOTIVE = 75; // 0x4b
+    field public static final int CONWISE_TECHNOLOGY = 66; // 0x42
+    field public static final int CREATIVE_TECHNOLOGY = 118; // 0x76
+    field public static final int C_TECHNOLOGIES = 38; // 0x26
+    field public static final int DANLERS = 225; // 0xe1
+    field public static final int DELORME_PUBLISHING_COMPANY = 128; // 0x80
+    field public static final int DEXCOM = 208; // 0xd0
+    field public static final int DIALOG_SEMICONDUCTOR = 210; // 0xd2
+    field public static final int DIGIANSWER = 12; // 0xc
+    field public static final int ECLIPSE = 53; // 0x35
+    field public static final int ECOTEST = 136; // 0x88
+    field public static final int ELGATO_SYSTEMS = 206; // 0xce
+    field public static final int EM_MICROELECTRONIC_MARIN = 90; // 0x5a
+    field public static final int EQUINOX_AG = 134; // 0x86
+    field public static final int ERICSSON_TECHNOLOGY = 0; // 0x0
+    field public static final int EVLUMA = 201; // 0xc9
+    field public static final int FREE2MOVE = 83; // 0x53
+    field public static final int FUNAI_ELECTRIC = 144; // 0x90
+    field public static final int GARMIN_INTERNATIONAL = 135; // 0x87
+    field public static final int GCT_SEMICONDUCTOR = 45; // 0x2d
+    field public static final int GELO = 200; // 0xc8
+    field public static final int GENEQ = 194; // 0xc2
+    field public static final int GENERAL_MOTORS = 104; // 0x68
+    field public static final int GENNUM = 59; // 0x3b
+    field public static final int GEOFORCE = 157; // 0x9d
+    field public static final int GIBSON_GUITARS = 98; // 0x62
+    field public static final int GN_NETCOM = 103; // 0x67
+    field public static final int GN_RESOUND = 137; // 0x89
+    field public static final int GOOGLE = 224; // 0xe0
+    field public static final int GREEN_THROTTLE_GAMES = 172; // 0xac
+    field public static final int GROUP_SENSE = 115; // 0x73
+    field public static final int HANLYNN_TECHNOLOGIES = 123; // 0x7b
+    field public static final int HARMAN_INTERNATIONAL = 87; // 0x57
+    field public static final int HEWLETT_PACKARD = 101; // 0x65
+    field public static final int HITACHI = 41; // 0x29
+    field public static final int HOSIDEN = 221; // 0xdd
+    field public static final int IBM = 3; // 0x3
+    field public static final int INFINEON_TECHNOLOGIES = 9; // 0x9
+    field public static final int INGENIEUR_SYSTEMGRUPPE_ZAHN = 171; // 0xab
+    field public static final int INTEGRATED_SILICON_SOLUTION = 65; // 0x41
+    field public static final int INTEGRATED_SYSTEM_SOLUTION = 57; // 0x39
+    field public static final int INTEL = 2; // 0x2
+    field public static final int INVENTEL = 30; // 0x1e
+    field public static final int IPEXTREME = 61; // 0x3d
+    field public static final int I_TECH_DYNAMIC_GLOBAL_DISTRIBUTION = 153; // 0x99
+    field public static final int JAWBONE = 138; // 0x8a
+    field public static final int JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS = 155; // 0x9b
+    field public static final int JOHNSON_CONTROLS = 185; // 0xb9
+    field public static final int J_AND_M = 82; // 0x52
+    field public static final int KAWANTECH = 212; // 0xd4
+    field public static final int KC_TECHNOLOGY = 22; // 0x16
+    field public static final int KENSINGTON_COMPUTER_PRODUCTS_GROUP = 160; // 0xa0
+    field public static final int LAIRD_TECHNOLOGIES = 119; // 0x77
+    field public static final int LESSWIRE = 121; // 0x79
+    field public static final int LG_ELECTRONICS = 196; // 0xc4
+    field public static final int LINAK = 164; // 0xa4
+    field public static final int LUCENT = 7; // 0x7
+    field public static final int LUDUS_HELSINKI = 132; // 0x84
+    field public static final int MACRONIX = 44; // 0x2c
+    field public static final int MAGNETI_MARELLI = 169; // 0xa9
+    field public static final int MANSELLA = 33; // 0x21
+    field public static final int MARVELL = 72; // 0x48
+    field public static final int MATSUSHITA_ELECTRIC = 58; // 0x3a
+    field public static final int MC10 = 202; // 0xca
+    field public static final int MEDIATEK = 70; // 0x46
+    field public static final int MESO_INTERNATIONAL = 182; // 0xb6
+    field public static final int META_WATCH = 163; // 0xa3
+    field public static final int MEWTEL_TECHNOLOGY = 47; // 0x2f
+    field public static final int MICOMMAND = 99; // 0x63
+    field public static final int MICROCHIP_TECHNOLOGY = 205; // 0xcd
+    field public static final int MICROSOFT = 6; // 0x6
+    field public static final int MINDTREE = 106; // 0x6a
+    field public static final int MISFIT_WEARABLES = 223; // 0xdf
+    field public static final int MITEL_SEMICONDUCTOR = 16; // 0x10
+    field public static final int MITSUBISHI_ELECTRIC = 20; // 0x14
+    field public static final int MOBILIAN_CORPORATION = 55; // 0x37
+    field public static final int MONSTER = 112; // 0x70
+    field public static final int MOTOROLA = 8; // 0x8
+    field public static final int MSTAR_SEMICONDUCTOR = 122; // 0x7a
+    field public static final int MUZIK = 222; // 0xde
+    field public static final int NEC = 34; // 0x22
+    field public static final int NEC_LIGHTING = 149; // 0x95
+    field public static final int NEWLOGIC = 23; // 0x17
+    field public static final int NIKE = 120; // 0x78
+    field public static final int NINE_SOLUTIONS = 102; // 0x66
+    field public static final int NOKIA_MOBILE_PHONES = 1; // 0x1
+    field public static final int NORDIC_SEMICONDUCTOR = 89; // 0x59
+    field public static final int NORWOOD_SYSTEMS = 46; // 0x2e
+    field public static final int ODM_TECHNOLOGY = 150; // 0x96
+    field public static final int OMEGAWAVE = 174; // 0xae
+    field public static final int ONSET_COMPUTER = 197; // 0xc5
+    field public static final int OPEN_INTERFACE = 39; // 0x27
+    field public static final int OTL_DYNAMICS = 165; // 0xa5
+    field public static final int PANDA_OCEAN = 166; // 0xa6
+    field public static final int PARROT = 67; // 0x43
+    field public static final int PARTHUS_TECHNOLOGIES = 14; // 0xe
+    field public static final int PASSIF_SEMICONDUCTOR = 176; // 0xb0
+    field public static final int PETER_SYSTEMTECHNIK = 173; // 0xad
+    field public static final int PHILIPS_SEMICONDUCTORS = 37; // 0x25
+    field public static final int PLANTRONICS = 85; // 0x55
+    field public static final int POLAR_ELECTRO = 107; // 0x6b
+    field public static final int POLAR_ELECTRO_EUROPE = 209; // 0xd1
+    field public static final int PROCTER_AND_GAMBLE = 220; // 0xdc
+    field public static final int QUALCOMM = 29; // 0x1d
+    field public static final int QUALCOMM_CONNECTED_EXPERIENCES = 216; // 0xd8
+    field public static final int QUALCOMM_INNOVATION_CENTER = 184; // 0xb8
+    field public static final int QUALCOMM_LABS = 140; // 0x8c
+    field public static final int QUALCOMM_TECHNOLOGIES = 215; // 0xd7
+    field public static final int QUINTIC = 142; // 0x8e
+    field public static final int QUUPPA = 199; // 0xc7
+    field public static final int RALINK_TECHNOLOGY = 91; // 0x5b
+    field public static final int RDA_MICROELECTRONICS = 97; // 0x61
+    field public static final int REALTEK_SEMICONDUCTOR = 93; // 0x5d
+    field public static final int RED_M = 50; // 0x32
+    field public static final int RENESAS_TECHNOLOGY = 54; // 0x36
+    field public static final int RESEARCH_IN_MOTION = 60; // 0x3c
+    field public static final int RF_MICRO_DEVICES = 40; // 0x28
+    field public static final int RIVIERAWAVES = 96; // 0x60
+    field public static final int ROHDE_AND_SCHWARZ = 25; // 0x19
+    field public static final int RTX_TELECOM = 21; // 0x15
+    field public static final int SAMSUNG_ELECTRONICS = 117; // 0x75
+    field public static final int SARIS_CYCLING_GROUP = 177; // 0xb1
+    field public static final int SEERS_TECHNOLOGY = 125; // 0x7d
+    field public static final int SEIKO_EPSON = 64; // 0x40
+    field public static final int SELFLY = 198; // 0xc6
+    field public static final int SEMILINK = 226; // 0xe2
+    field public static final int SENNHEISER_COMMUNICATIONS = 130; // 0x82
+    field public static final int SHANGHAI_SUPER_SMART_ELECTRONICS = 114; // 0x72
+    field public static final int SHENZHEN_EXCELSECU_DATA_TECHNOLOGY = 193; // 0xc1
+    field public static final int SIGNIA_TECHNOLOGIES = 27; // 0x1b
+    field public static final int SILICON_WAVE = 11; // 0xb
+    field public static final int SIRF_TECHNOLOGY = 80; // 0x50
+    field public static final int SOCKET_MOBILE = 68; // 0x44
+    field public static final int SONY_ERICSSON = 86; // 0x56
+    field public static final int SOUND_ID = 111; // 0x6f
+    field public static final int SPORTS_TRACKING_TECHNOLOGIES = 126; // 0x7e
+    field public static final int SR_MEDIZINELEKTRONIK = 161; // 0xa1
+    field public static final int STACCATO_COMMUNICATIONS = 77; // 0x4d
+    field public static final int STALMART_TECHNOLOGY = 191; // 0xbf
+    field public static final int STARKEY_LABORATORIES = 186; // 0xba
+    field public static final int STOLLMAN_E_PLUS_V = 143; // 0x8f
+    field public static final int STONESTREET_ONE = 94; // 0x5e
+    field public static final int ST_MICROELECTRONICS = 48; // 0x30
+    field public static final int SUMMIT_DATA_COMMUNICATIONS = 110; // 0x6e
+    field public static final int SUUNTO = 159; // 0x9f
+    field public static final int SWIRL_NETWORKS = 181; // 0xb5
+    field public static final int SYMBOL_TECHNOLOGIES = 42; // 0x2a
+    field public static final int SYNOPSYS = 49; // 0x31
+    field public static final int SYSTEMS_AND_CHIPS = 62; // 0x3e
+    field public static final int S_POWER_ELECTRONICS = 187; // 0xbb
+    field public static final int TAIXINGBANG_TECHNOLOGY = 211; // 0xd3
+    field public static final int TENOVIS = 43; // 0x2b
+    field public static final int TERAX = 56; // 0x38
+    field public static final int TEXAS_INSTRUMENTS = 13; // 0xd
+    field public static final int THINKOPTICS = 146; // 0x92
+    field public static final int THREECOM = 5; // 0x5
+    field public static final int THREE_DIJOY = 84; // 0x54
+    field public static final int THREE_DSP = 73; // 0x49
+    field public static final int TIMEKEEPING_SYSTEMS = 131; // 0x83
+    field public static final int TIMEX_GROUP_USA = 214; // 0xd6
+    field public static final int TOPCORN_POSITIONING_SYSTEMS = 139; // 0x8b
+    field public static final int TOSHIBA = 4; // 0x4
+    field public static final int TRANSILICA = 24; // 0x18
+    field public static final int TRELAB = 183; // 0xb7
+    field public static final int TTPCOM = 26; // 0x1a
+    field public static final int TXTR = 218; // 0xda
+    field public static final int TZERO_TECHNOLOGIES = 81; // 0x51
+    field public static final int UNIVERSAL_ELECTRONICS = 147; // 0x93
+    field public static final int VERTU = 162; // 0xa2
+    field public static final int VISTEON = 167; // 0xa7
+    field public static final int VIZIO = 88; // 0x58
+    field public static final int VOYETRA_TURTLE_BEACH = 217; // 0xd9
+    field public static final int WAVEPLUS_TECHNOLOGY = 35; // 0x23
+    field public static final int WICENTRIC = 95; // 0x5f
+    field public static final int WIDCOMM = 17; // 0x11
+    field public static final int WUXI_VIMICRO = 129; // 0x81
+    field public static final int ZEEVO = 18; // 0x12
+    field public static final int ZER01_TV = 152; // 0x98
+    field public static final int ZOMM = 116; // 0x74
+    field public static final int ZSCAN_SOFTWARE = 141; // 0x8d
+  }
+
+  public final class BluetoothClass implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDeviceClass();
+    method public int getMajorDeviceClass();
+    method public boolean hasService(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothClass> CREATOR;
+  }
+
+  public static class BluetoothClass.Device {
+    ctor public BluetoothClass.Device();
+    field public static final int AUDIO_VIDEO_CAMCORDER = 1076; // 0x434
+    field public static final int AUDIO_VIDEO_CAR_AUDIO = 1056; // 0x420
+    field public static final int AUDIO_VIDEO_HANDSFREE = 1032; // 0x408
+    field public static final int AUDIO_VIDEO_HEADPHONES = 1048; // 0x418
+    field public static final int AUDIO_VIDEO_HIFI_AUDIO = 1064; // 0x428
+    field public static final int AUDIO_VIDEO_LOUDSPEAKER = 1044; // 0x414
+    field public static final int AUDIO_VIDEO_MICROPHONE = 1040; // 0x410
+    field public static final int AUDIO_VIDEO_PORTABLE_AUDIO = 1052; // 0x41c
+    field public static final int AUDIO_VIDEO_SET_TOP_BOX = 1060; // 0x424
+    field public static final int AUDIO_VIDEO_UNCATEGORIZED = 1024; // 0x400
+    field public static final int AUDIO_VIDEO_VCR = 1068; // 0x42c
+    field public static final int AUDIO_VIDEO_VIDEO_CAMERA = 1072; // 0x430
+    field public static final int AUDIO_VIDEO_VIDEO_CONFERENCING = 1088; // 0x440
+    field public static final int AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER = 1084; // 0x43c
+    field public static final int AUDIO_VIDEO_VIDEO_GAMING_TOY = 1096; // 0x448
+    field public static final int AUDIO_VIDEO_VIDEO_MONITOR = 1080; // 0x438
+    field public static final int AUDIO_VIDEO_WEARABLE_HEADSET = 1028; // 0x404
+    field public static final int COMPUTER_DESKTOP = 260; // 0x104
+    field public static final int COMPUTER_HANDHELD_PC_PDA = 272; // 0x110
+    field public static final int COMPUTER_LAPTOP = 268; // 0x10c
+    field public static final int COMPUTER_PALM_SIZE_PC_PDA = 276; // 0x114
+    field public static final int COMPUTER_SERVER = 264; // 0x108
+    field public static final int COMPUTER_UNCATEGORIZED = 256; // 0x100
+    field public static final int COMPUTER_WEARABLE = 280; // 0x118
+    field public static final int HEALTH_BLOOD_PRESSURE = 2308; // 0x904
+    field public static final int HEALTH_DATA_DISPLAY = 2332; // 0x91c
+    field public static final int HEALTH_GLUCOSE = 2320; // 0x910
+    field public static final int HEALTH_PULSE_OXIMETER = 2324; // 0x914
+    field public static final int HEALTH_PULSE_RATE = 2328; // 0x918
+    field public static final int HEALTH_THERMOMETER = 2312; // 0x908
+    field public static final int HEALTH_UNCATEGORIZED = 2304; // 0x900
+    field public static final int HEALTH_WEIGHING = 2316; // 0x90c
+    field public static final int PHONE_CELLULAR = 516; // 0x204
+    field public static final int PHONE_CORDLESS = 520; // 0x208
+    field public static final int PHONE_ISDN = 532; // 0x214
+    field public static final int PHONE_MODEM_OR_GATEWAY = 528; // 0x210
+    field public static final int PHONE_SMART = 524; // 0x20c
+    field public static final int PHONE_UNCATEGORIZED = 512; // 0x200
+    field public static final int TOY_CONTROLLER = 2064; // 0x810
+    field public static final int TOY_DOLL_ACTION_FIGURE = 2060; // 0x80c
+    field public static final int TOY_GAME = 2068; // 0x814
+    field public static final int TOY_ROBOT = 2052; // 0x804
+    field public static final int TOY_UNCATEGORIZED = 2048; // 0x800
+    field public static final int TOY_VEHICLE = 2056; // 0x808
+    field public static final int WEARABLE_GLASSES = 1812; // 0x714
+    field public static final int WEARABLE_HELMET = 1808; // 0x710
+    field public static final int WEARABLE_JACKET = 1804; // 0x70c
+    field public static final int WEARABLE_PAGER = 1800; // 0x708
+    field public static final int WEARABLE_UNCATEGORIZED = 1792; // 0x700
+    field public static final int WEARABLE_WRIST_WATCH = 1796; // 0x704
+  }
+
+  public static class BluetoothClass.Device.Major {
+    ctor public BluetoothClass.Device.Major();
+    field public static final int AUDIO_VIDEO = 1024; // 0x400
+    field public static final int COMPUTER = 256; // 0x100
+    field public static final int HEALTH = 2304; // 0x900
+    field public static final int IMAGING = 1536; // 0x600
+    field public static final int MISC = 0; // 0x0
+    field public static final int NETWORKING = 768; // 0x300
+    field public static final int PERIPHERAL = 1280; // 0x500
+    field public static final int PHONE = 512; // 0x200
+    field public static final int TOY = 2048; // 0x800
+    field public static final int UNCATEGORIZED = 7936; // 0x1f00
+    field public static final int WEARABLE = 1792; // 0x700
+  }
+
+  public static final class BluetoothClass.Service {
+    ctor public BluetoothClass.Service();
+    field public static final int AUDIO = 2097152; // 0x200000
+    field public static final int CAPTURE = 524288; // 0x80000
+    field public static final int INFORMATION = 8388608; // 0x800000
+    field public static final int LIMITED_DISCOVERABILITY = 8192; // 0x2000
+    field public static final int NETWORKING = 131072; // 0x20000
+    field public static final int OBJECT_TRANSFER = 1048576; // 0x100000
+    field public static final int POSITIONING = 65536; // 0x10000
+    field public static final int RENDER = 262144; // 0x40000
+    field public static final int TELEPHONY = 4194304; // 0x400000
+  }
+
+  public final class BluetoothDevice implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGatt connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback, int, int, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean createBond();
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createInsecureL2capChannel(int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createInsecureRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createL2capChannel(int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothSocket createRfcommSocketToServiceRecord(java.util.UUID) throws java.io.IOException;
+    method public int describeContents();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean fetchUuidsWithSdp();
+    method public String getAddress();
+    method @Nullable @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public String getAlias();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothClass getBluetoothClass();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getBondState();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public String getName();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getType();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.os.ParcelUuid[] getUuids();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int setAlias(@Nullable String);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setPairingConfirmation(boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean setPin(byte[]);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ACL_CONNECTED = "android.bluetooth.device.action.ACL_CONNECTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ACL_DISCONNECTED = "android.bluetooth.device.action.ACL_DISCONNECTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ACL_DISCONNECT_REQUESTED = "android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_ALIAS_CHANGED = "android.bluetooth.device.action.ALIAS_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_BOND_STATE_CHANGED = "android.bluetooth.device.action.BOND_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CLASS_CHANGED = "android.bluetooth.device.action.CLASS_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public static final String ACTION_FOUND = "android.bluetooth.device.action.FOUND";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_NAME_CHANGED = "android.bluetooth.device.action.NAME_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_PAIRING_REQUEST = "android.bluetooth.device.action.PAIRING_REQUEST";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_UUID = "android.bluetooth.device.action.UUID";
+    field public static final int ADDRESS_TYPE_PUBLIC = 0; // 0x0
+    field public static final int ADDRESS_TYPE_RANDOM = 1; // 0x1
+    field public static final int BOND_BONDED = 12; // 0xc
+    field public static final int BOND_BONDING = 11; // 0xb
+    field public static final int BOND_NONE = 10; // 0xa
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothDevice> CREATOR;
+    field public static final int DEVICE_TYPE_CLASSIC = 1; // 0x1
+    field public static final int DEVICE_TYPE_DUAL = 3; // 0x3
+    field public static final int DEVICE_TYPE_LE = 2; // 0x2
+    field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int ERROR = -2147483648; // 0x80000000
+    field public static final String EXTRA_BOND_STATE = "android.bluetooth.device.extra.BOND_STATE";
+    field public static final String EXTRA_CLASS = "android.bluetooth.device.extra.CLASS";
+    field public static final String EXTRA_DEVICE = "android.bluetooth.device.extra.DEVICE";
+    field public static final String EXTRA_NAME = "android.bluetooth.device.extra.NAME";
+    field public static final String EXTRA_PAIRING_KEY = "android.bluetooth.device.extra.PAIRING_KEY";
+    field public static final String EXTRA_PAIRING_VARIANT = "android.bluetooth.device.extra.PAIRING_VARIANT";
+    field public static final String EXTRA_PREVIOUS_BOND_STATE = "android.bluetooth.device.extra.PREVIOUS_BOND_STATE";
+    field public static final String EXTRA_RSSI = "android.bluetooth.device.extra.RSSI";
+    field public static final String EXTRA_UUID = "android.bluetooth.device.extra.UUID";
+    field public static final int PAIRING_VARIANT_PASSKEY_CONFIRMATION = 2; // 0x2
+    field public static final int PAIRING_VARIANT_PIN = 0; // 0x0
+    field public static final int PHY_LE_1M = 1; // 0x1
+    field public static final int PHY_LE_1M_MASK = 1; // 0x1
+    field public static final int PHY_LE_2M = 2; // 0x2
+    field public static final int PHY_LE_2M_MASK = 2; // 0x2
+    field public static final int PHY_LE_CODED = 3; // 0x3
+    field public static final int PHY_LE_CODED_MASK = 4; // 0x4
+    field public static final int PHY_OPTION_NO_PREFERRED = 0; // 0x0
+    field public static final int PHY_OPTION_S2 = 1; // 0x1
+    field public static final int PHY_OPTION_S8 = 2; // 0x2
+    field public static final int TRANSPORT_AUTO = 0; // 0x0
+    field public static final int TRANSPORT_BREDR = 1; // 0x1
+    field public static final int TRANSPORT_LE = 2; // 0x2
+  }
+
+  public final class BluetoothGatt implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void abortReliableWrite();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void abortReliableWrite(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean beginReliableWrite();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void close();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connect();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void disconnect();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean discoverServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean executeReliableWrite();
+    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method public android.bluetooth.BluetoothDevice getDevice();
+    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method public android.bluetooth.BluetoothGattService getService(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattService> getServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean readCharacteristic(android.bluetooth.BluetoothGattCharacteristic);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean readDescriptor(android.bluetooth.BluetoothGattDescriptor);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void readPhy();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean readRemoteRssi();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean requestConnectionPriority(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean requestMtu(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean setCharacteristicNotification(android.bluetooth.BluetoothGattCharacteristic, boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void setPreferredPhy(int, int, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean writeCharacteristic(android.bluetooth.BluetoothGattCharacteristic);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean writeDescriptor(android.bluetooth.BluetoothGattDescriptor);
+    field public static final int CONNECTION_PRIORITY_BALANCED = 0; // 0x0
+    field public static final int CONNECTION_PRIORITY_HIGH = 1; // 0x1
+    field public static final int CONNECTION_PRIORITY_LOW_POWER = 2; // 0x2
+    field public static final int GATT_CONNECTION_CONGESTED = 143; // 0x8f
+    field public static final int GATT_FAILURE = 257; // 0x101
+    field public static final int GATT_INSUFFICIENT_AUTHENTICATION = 5; // 0x5
+    field public static final int GATT_INSUFFICIENT_ENCRYPTION = 15; // 0xf
+    field public static final int GATT_INVALID_ATTRIBUTE_LENGTH = 13; // 0xd
+    field public static final int GATT_INVALID_OFFSET = 7; // 0x7
+    field public static final int GATT_READ_NOT_PERMITTED = 2; // 0x2
+    field public static final int GATT_REQUEST_NOT_SUPPORTED = 6; // 0x6
+    field public static final int GATT_SUCCESS = 0; // 0x0
+    field public static final int GATT_WRITE_NOT_PERMITTED = 3; // 0x3
+  }
+
+  public abstract class BluetoothGattCallback {
+    ctor public BluetoothGattCallback();
+    method public void onCharacteristicChanged(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic);
+    method public void onCharacteristicRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int);
+    method public void onCharacteristicWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattCharacteristic, int);
+    method public void onConnectionStateChange(android.bluetooth.BluetoothGatt, int, int);
+    method public void onDescriptorRead(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattDescriptor, int);
+    method public void onDescriptorWrite(android.bluetooth.BluetoothGatt, android.bluetooth.BluetoothGattDescriptor, int);
+    method public void onMtuChanged(android.bluetooth.BluetoothGatt, int, int);
+    method public void onPhyRead(android.bluetooth.BluetoothGatt, int, int, int);
+    method public void onPhyUpdate(android.bluetooth.BluetoothGatt, int, int, int);
+    method public void onReadRemoteRssi(android.bluetooth.BluetoothGatt, int, int);
+    method public void onReliableWriteCompleted(android.bluetooth.BluetoothGatt, int);
+    method public void onServiceChanged(@NonNull android.bluetooth.BluetoothGatt);
+    method public void onServicesDiscovered(android.bluetooth.BluetoothGatt, int);
+  }
+
+  public class BluetoothGattCharacteristic implements android.os.Parcelable {
+    ctor public BluetoothGattCharacteristic(java.util.UUID, int, int);
+    method public boolean addDescriptor(android.bluetooth.BluetoothGattDescriptor);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothGattDescriptor getDescriptor(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattDescriptor> getDescriptors();
+    method public Float getFloatValue(int, int);
+    method public int getInstanceId();
+    method public Integer getIntValue(int, int);
+    method public int getPermissions();
+    method public int getProperties();
+    method public android.bluetooth.BluetoothGattService getService();
+    method public String getStringValue(int);
+    method public java.util.UUID getUuid();
+    method public byte[] getValue();
+    method public int getWriteType();
+    method public boolean setValue(byte[]);
+    method public boolean setValue(int, int, int);
+    method public boolean setValue(int, int, int, int);
+    method public boolean setValue(String);
+    method public void setWriteType(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattCharacteristic> CREATOR;
+    field public static final int FORMAT_FLOAT = 52; // 0x34
+    field public static final int FORMAT_SFLOAT = 50; // 0x32
+    field public static final int FORMAT_SINT16 = 34; // 0x22
+    field public static final int FORMAT_SINT32 = 36; // 0x24
+    field public static final int FORMAT_SINT8 = 33; // 0x21
+    field public static final int FORMAT_UINT16 = 18; // 0x12
+    field public static final int FORMAT_UINT32 = 20; // 0x14
+    field public static final int FORMAT_UINT8 = 17; // 0x11
+    field public static final int PERMISSION_READ = 1; // 0x1
+    field public static final int PERMISSION_READ_ENCRYPTED = 2; // 0x2
+    field public static final int PERMISSION_READ_ENCRYPTED_MITM = 4; // 0x4
+    field public static final int PERMISSION_WRITE = 16; // 0x10
+    field public static final int PERMISSION_WRITE_ENCRYPTED = 32; // 0x20
+    field public static final int PERMISSION_WRITE_ENCRYPTED_MITM = 64; // 0x40
+    field public static final int PERMISSION_WRITE_SIGNED = 128; // 0x80
+    field public static final int PERMISSION_WRITE_SIGNED_MITM = 256; // 0x100
+    field public static final int PROPERTY_BROADCAST = 1; // 0x1
+    field public static final int PROPERTY_EXTENDED_PROPS = 128; // 0x80
+    field public static final int PROPERTY_INDICATE = 32; // 0x20
+    field public static final int PROPERTY_NOTIFY = 16; // 0x10
+    field public static final int PROPERTY_READ = 2; // 0x2
+    field public static final int PROPERTY_SIGNED_WRITE = 64; // 0x40
+    field public static final int PROPERTY_WRITE = 8; // 0x8
+    field public static final int PROPERTY_WRITE_NO_RESPONSE = 4; // 0x4
+    field public static final int WRITE_TYPE_DEFAULT = 2; // 0x2
+    field public static final int WRITE_TYPE_NO_RESPONSE = 1; // 0x1
+    field public static final int WRITE_TYPE_SIGNED = 4; // 0x4
+    field protected java.util.List<android.bluetooth.BluetoothGattDescriptor> mDescriptors;
+  }
+
+  public class BluetoothGattDescriptor implements android.os.Parcelable {
+    ctor public BluetoothGattDescriptor(java.util.UUID, int);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothGattCharacteristic getCharacteristic();
+    method public int getPermissions();
+    method public java.util.UUID getUuid();
+    method public byte[] getValue();
+    method public boolean setValue(byte[]);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattDescriptor> CREATOR;
+    field public static final byte[] DISABLE_NOTIFICATION_VALUE;
+    field public static final byte[] ENABLE_INDICATION_VALUE;
+    field public static final byte[] ENABLE_NOTIFICATION_VALUE;
+    field public static final int PERMISSION_READ = 1; // 0x1
+    field public static final int PERMISSION_READ_ENCRYPTED = 2; // 0x2
+    field public static final int PERMISSION_READ_ENCRYPTED_MITM = 4; // 0x4
+    field public static final int PERMISSION_WRITE = 16; // 0x10
+    field public static final int PERMISSION_WRITE_ENCRYPTED = 32; // 0x20
+    field public static final int PERMISSION_WRITE_ENCRYPTED_MITM = 64; // 0x40
+    field public static final int PERMISSION_WRITE_SIGNED = 128; // 0x80
+    field public static final int PERMISSION_WRITE_SIGNED_MITM = 256; // 0x100
+  }
+
+  public final class BluetoothGattServer implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean addService(android.bluetooth.BluetoothGattService);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void cancelConnection(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void clearServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void close();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connect(android.bluetooth.BluetoothDevice, boolean);
+    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method public android.bluetooth.BluetoothGattService getService(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattService> getServices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean notifyCharacteristicChanged(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothGattCharacteristic, boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void readPhy(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean removeService(android.bluetooth.BluetoothGattService);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean sendResponse(android.bluetooth.BluetoothDevice, int, int, int, byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void setPreferredPhy(android.bluetooth.BluetoothDevice, int, int, int);
+  }
+
+  public abstract class BluetoothGattServerCallback {
+    ctor public BluetoothGattServerCallback();
+    method public void onCharacteristicReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattCharacteristic);
+    method public void onCharacteristicWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattCharacteristic, boolean, boolean, int, byte[]);
+    method public void onConnectionStateChange(android.bluetooth.BluetoothDevice, int, int);
+    method public void onDescriptorReadRequest(android.bluetooth.BluetoothDevice, int, int, android.bluetooth.BluetoothGattDescriptor);
+    method public void onDescriptorWriteRequest(android.bluetooth.BluetoothDevice, int, android.bluetooth.BluetoothGattDescriptor, boolean, boolean, int, byte[]);
+    method public void onExecuteWrite(android.bluetooth.BluetoothDevice, int, boolean);
+    method public void onMtuChanged(android.bluetooth.BluetoothDevice, int);
+    method public void onNotificationSent(android.bluetooth.BluetoothDevice, int);
+    method public void onPhyRead(android.bluetooth.BluetoothDevice, int, int, int);
+    method public void onPhyUpdate(android.bluetooth.BluetoothDevice, int, int, int);
+    method public void onServiceAdded(int, android.bluetooth.BluetoothGattService);
+  }
+
+  public class BluetoothGattService implements android.os.Parcelable {
+    ctor public BluetoothGattService(java.util.UUID, int);
+    method public boolean addCharacteristic(android.bluetooth.BluetoothGattCharacteristic);
+    method public boolean addService(android.bluetooth.BluetoothGattService);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothGattCharacteristic getCharacteristic(java.util.UUID);
+    method public java.util.List<android.bluetooth.BluetoothGattCharacteristic> getCharacteristics();
+    method public java.util.List<android.bluetooth.BluetoothGattService> getIncludedServices();
+    method public int getInstanceId();
+    method public int getType();
+    method public java.util.UUID getUuid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothGattService> CREATOR;
+    field public static final int SERVICE_TYPE_PRIMARY = 0; // 0x0
+    field public static final int SERVICE_TYPE_SECONDARY = 1; // 0x1
+    field protected java.util.List<android.bluetooth.BluetoothGattCharacteristic> mCharacteristics;
+    field protected java.util.List<android.bluetooth.BluetoothGattService> mIncludedServices;
+  }
+
+  public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isAudioConnected(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isNoiseReductionSupported(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isVoiceRecognitionSupported(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean sendVendorSpecificResultCode(android.bluetooth.BluetoothDevice, String, String);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean startVoiceRecognition(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean stopVoiceRecognition(android.bluetooth.BluetoothDevice);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_AUDIO_STATE_CHANGED = "android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_VENDOR_SPECIFIC_HEADSET_EVENT = "android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT";
+    field public static final int AT_CMD_TYPE_ACTION = 4; // 0x4
+    field public static final int AT_CMD_TYPE_BASIC = 3; // 0x3
+    field public static final int AT_CMD_TYPE_READ = 0; // 0x0
+    field public static final int AT_CMD_TYPE_SET = 2; // 0x2
+    field public static final int AT_CMD_TYPE_TEST = 1; // 0x1
+    field public static final String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_ARGS";
+    field public static final String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD";
+    field public static final String EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE = "android.bluetooth.headset.extra.VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE";
+    field public static final int STATE_AUDIO_CONNECTED = 12; // 0xc
+    field public static final int STATE_AUDIO_CONNECTING = 11; // 0xb
+    field public static final int STATE_AUDIO_DISCONNECTED = 10; // 0xa
+    field public static final String VENDOR_RESULT_CODE_COMMAND_ANDROID = "+ANDROID";
+    field public static final String VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY = "android.bluetooth.headset.intent.category.companyid";
+  }
+
+  @Deprecated public final class BluetoothHealth implements android.bluetooth.BluetoothProfile {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connectChannelToSource(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disconnectChannel(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.os.ParcelFileDescriptor getMainChannelFd(android.bluetooth.BluetoothDevice, android.bluetooth.BluetoothHealthAppConfiguration);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean registerSinkAppConfiguration(String, int, android.bluetooth.BluetoothHealthCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean unregisterAppConfiguration(android.bluetooth.BluetoothHealthAppConfiguration);
+    field @Deprecated public static final int APP_CONFIG_REGISTRATION_FAILURE = 1; // 0x1
+    field @Deprecated public static final int APP_CONFIG_REGISTRATION_SUCCESS = 0; // 0x0
+    field @Deprecated public static final int APP_CONFIG_UNREGISTRATION_FAILURE = 3; // 0x3
+    field @Deprecated public static final int APP_CONFIG_UNREGISTRATION_SUCCESS = 2; // 0x2
+    field @Deprecated public static final int CHANNEL_TYPE_RELIABLE = 10; // 0xa
+    field @Deprecated public static final int CHANNEL_TYPE_STREAMING = 11; // 0xb
+    field @Deprecated public static final int SINK_ROLE = 2; // 0x2
+    field @Deprecated public static final int SOURCE_ROLE = 1; // 0x1
+    field @Deprecated public static final int STATE_CHANNEL_CONNECTED = 2; // 0x2
+    field @Deprecated public static final int STATE_CHANNEL_CONNECTING = 1; // 0x1
+    field @Deprecated public static final int STATE_CHANNEL_DISCONNECTED = 0; // 0x0
+    field @Deprecated public static final int STATE_CHANNEL_DISCONNECTING = 3; // 0x3
+  }
+
+  @Deprecated public final class BluetoothHealthAppConfiguration implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public int getDataType();
+    method @Deprecated public String getName();
+    method @Deprecated public int getRole();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHealthAppConfiguration> CREATOR;
+  }
+
+  @Deprecated public abstract class BluetoothHealthCallback {
+    ctor @Deprecated public BluetoothHealthCallback();
+    method @Deprecated @BinderThread public void onHealthAppConfigurationStatusChange(android.bluetooth.BluetoothHealthAppConfiguration, int);
+    method @Deprecated @BinderThread public void onHealthChannelStateChange(android.bluetooth.BluetoothHealthAppConfiguration, android.bluetooth.BluetoothDevice, int, int, android.os.ParcelFileDescriptor, int);
+  }
+
+  public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile {
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(@NonNull int[]);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.hearingaid.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothHidDevice implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean connect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disconnect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean registerApp(android.bluetooth.BluetoothHidDeviceAppSdpSettings, android.bluetooth.BluetoothHidDeviceAppQosSettings, android.bluetooth.BluetoothHidDeviceAppQosSettings, java.util.concurrent.Executor, android.bluetooth.BluetoothHidDevice.Callback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean replyReport(android.bluetooth.BluetoothDevice, byte, byte, byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean reportError(android.bluetooth.BluetoothDevice, byte);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean sendReport(android.bluetooth.BluetoothDevice, int, byte[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean unregisterApp();
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.hiddevice.profile.action.CONNECTION_STATE_CHANGED";
+    field public static final byte ERROR_RSP_INVALID_PARAM = 4; // 0x4
+    field public static final byte ERROR_RSP_INVALID_RPT_ID = 2; // 0x2
+    field public static final byte ERROR_RSP_NOT_READY = 1; // 0x1
+    field public static final byte ERROR_RSP_SUCCESS = 0; // 0x0
+    field public static final byte ERROR_RSP_UNKNOWN = 14; // 0xe
+    field public static final byte ERROR_RSP_UNSUPPORTED_REQ = 3; // 0x3
+    field public static final byte PROTOCOL_BOOT_MODE = 0; // 0x0
+    field public static final byte PROTOCOL_REPORT_MODE = 1; // 0x1
+    field public static final byte REPORT_TYPE_FEATURE = 3; // 0x3
+    field public static final byte REPORT_TYPE_INPUT = 1; // 0x1
+    field public static final byte REPORT_TYPE_OUTPUT = 2; // 0x2
+    field public static final byte SUBCLASS1_COMBO = -64; // 0xffffffc0
+    field public static final byte SUBCLASS1_KEYBOARD = 64; // 0x40
+    field public static final byte SUBCLASS1_MOUSE = -128; // 0xffffff80
+    field public static final byte SUBCLASS1_NONE = 0; // 0x0
+    field public static final byte SUBCLASS2_CARD_READER = 6; // 0x6
+    field public static final byte SUBCLASS2_DIGITIZER_TABLET = 5; // 0x5
+    field public static final byte SUBCLASS2_GAMEPAD = 2; // 0x2
+    field public static final byte SUBCLASS2_JOYSTICK = 1; // 0x1
+    field public static final byte SUBCLASS2_REMOTE_CONTROL = 3; // 0x3
+    field public static final byte SUBCLASS2_SENSING_DEVICE = 4; // 0x4
+    field public static final byte SUBCLASS2_UNCATEGORIZED = 0; // 0x0
+  }
+
+  public abstract static class BluetoothHidDevice.Callback {
+    ctor public BluetoothHidDevice.Callback();
+    method public void onAppStatusChanged(android.bluetooth.BluetoothDevice, boolean);
+    method public void onConnectionStateChanged(android.bluetooth.BluetoothDevice, int);
+    method public void onGetReport(android.bluetooth.BluetoothDevice, byte, byte, int);
+    method public void onInterruptData(android.bluetooth.BluetoothDevice, byte, byte[]);
+    method public void onSetProtocol(android.bluetooth.BluetoothDevice, byte);
+    method public void onSetReport(android.bluetooth.BluetoothDevice, byte, byte, byte[]);
+    method public void onVirtualCableUnplug(android.bluetooth.BluetoothDevice);
+  }
+
+  public final class BluetoothHidDeviceAppQosSettings implements android.os.Parcelable {
+    ctor public BluetoothHidDeviceAppQosSettings(int, int, int, int, int, int);
+    method public int describeContents();
+    method public int getDelayVariation();
+    method public int getLatency();
+    method public int getPeakBandwidth();
+    method public int getServiceType();
+    method public int getTokenBucketSize();
+    method public int getTokenRate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppQosSettings> CREATOR;
+    field public static final int MAX = -1; // 0xffffffff
+    field public static final int SERVICE_BEST_EFFORT = 1; // 0x1
+    field public static final int SERVICE_GUARANTEED = 2; // 0x2
+    field public static final int SERVICE_NO_TRAFFIC = 0; // 0x0
+  }
+
+  public final class BluetoothHidDeviceAppSdpSettings implements android.os.Parcelable {
+    ctor public BluetoothHidDeviceAppSdpSettings(String, String, String, byte, byte[]);
+    method public int describeContents();
+    method public String getDescription();
+    method public byte[] getDescriptors();
+    method public String getName();
+    method public String getProvider();
+    method public byte getSubclass();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BluetoothHidDeviceAppSdpSettings> CREATOR;
+  }
+
+  public final class BluetoothLeAudio implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
+    method public void close();
+    method protected void finalize();
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(@NonNull int[]);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_LE_AUDIO_CONNECTION_STATE_CHANGED = "android.bluetooth.action.LE_AUDIO_CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothManager {
+    method public android.bluetooth.BluetoothAdapter getAdapter();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(android.bluetooth.BluetoothDevice, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int, int[]);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public android.bluetooth.BluetoothGattServer openGattServer(android.content.Context, android.bluetooth.BluetoothGattServerCallback);
+  }
+
+  public interface BluetoothProfile {
+    method public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method public int getConnectionState(android.bluetooth.BluetoothDevice);
+    method public java.util.List<android.bluetooth.BluetoothDevice> getDevicesMatchingConnectionStates(int[]);
+    field public static final int A2DP = 2; // 0x2
+    field public static final String EXTRA_PREVIOUS_STATE = "android.bluetooth.profile.extra.PREVIOUS_STATE";
+    field public static final String EXTRA_STATE = "android.bluetooth.profile.extra.STATE";
+    field public static final int GATT = 7; // 0x7
+    field public static final int GATT_SERVER = 8; // 0x8
+    field public static final int HEADSET = 1; // 0x1
+    field @Deprecated public static final int HEALTH = 3; // 0x3
+    field public static final int HEARING_AID = 21; // 0x15
+    field public static final int HID_DEVICE = 19; // 0x13
+    field public static final int SAP = 10; // 0xa
+    field public static final int STATE_CONNECTED = 2; // 0x2
+    field public static final int STATE_CONNECTING = 1; // 0x1
+    field public static final int STATE_DISCONNECTED = 0; // 0x0
+    field public static final int STATE_DISCONNECTING = 3; // 0x3
+  }
+
+  public static interface BluetoothProfile.ServiceListener {
+    method public void onServiceConnected(int, android.bluetooth.BluetoothProfile);
+    method public void onServiceDisconnected(int);
+  }
+
+  public final class BluetoothServerSocket implements java.io.Closeable {
+    method public android.bluetooth.BluetoothSocket accept() throws java.io.IOException;
+    method public android.bluetooth.BluetoothSocket accept(int) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public int getPsm();
+  }
+
+  public final class BluetoothSocket implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public void connect() throws java.io.IOException;
+    method public int getConnectionType();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public int getMaxReceivePacketSize();
+    method public int getMaxTransmitPacketSize();
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public android.bluetooth.BluetoothDevice getRemoteDevice();
+    method public boolean isConnected();
+    field public static final int TYPE_L2CAP = 3; // 0x3
+    field public static final int TYPE_RFCOMM = 1; // 0x1
+    field public static final int TYPE_SCO = 2; // 0x2
+  }
+
+  public final class BluetoothStatusCodes {
+    field public static final int ERROR_BLUETOOTH_NOT_ALLOWED = 2; // 0x2
+    field public static final int ERROR_BLUETOOTH_NOT_ENABLED = 1; // 0x1
+    field public static final int ERROR_DEVICE_NOT_BONDED = 3; // 0x3
+    field public static final int ERROR_MISSING_BLUETOOTH_CONNECT_PERMISSION = 6; // 0x6
+    field public static final int ERROR_UNKNOWN = 2147483647; // 0x7fffffff
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.bluetooth.le {
+
+  public abstract class AdvertiseCallback {
+    ctor public AdvertiseCallback();
+    method public void onStartFailure(int);
+    method public void onStartSuccess(android.bluetooth.le.AdvertiseSettings);
+    field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3
+    field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1
+    field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5
+    field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4
+    field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2
+  }
+
+  public final class AdvertiseData implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getIncludeDeviceName();
+    method public boolean getIncludeTxPowerLevel();
+    method public android.util.SparseArray<byte[]> getManufacturerSpecificData();
+    method public java.util.Map<android.os.ParcelUuid,byte[]> getServiceData();
+    method @NonNull public java.util.List<android.os.ParcelUuid> getServiceSolicitationUuids();
+    method public java.util.List<android.os.ParcelUuid> getServiceUuids();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertiseData> CREATOR;
+  }
+
+  public static final class AdvertiseData.Builder {
+    ctor public AdvertiseData.Builder();
+    method public android.bluetooth.le.AdvertiseData.Builder addManufacturerData(int, byte[]);
+    method public android.bluetooth.le.AdvertiseData.Builder addServiceData(android.os.ParcelUuid, byte[]);
+    method @NonNull public android.bluetooth.le.AdvertiseData.Builder addServiceSolicitationUuid(@NonNull android.os.ParcelUuid);
+    method public android.bluetooth.le.AdvertiseData.Builder addServiceUuid(android.os.ParcelUuid);
+    method public android.bluetooth.le.AdvertiseData build();
+    method public android.bluetooth.le.AdvertiseData.Builder setIncludeDeviceName(boolean);
+    method public android.bluetooth.le.AdvertiseData.Builder setIncludeTxPowerLevel(boolean);
+  }
+
+  public final class AdvertiseSettings implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getMode();
+    method public int getTimeout();
+    method public int getTxPowerLevel();
+    method public boolean isConnectable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ADVERTISE_MODE_BALANCED = 1; // 0x1
+    field public static final int ADVERTISE_MODE_LOW_LATENCY = 2; // 0x2
+    field public static final int ADVERTISE_MODE_LOW_POWER = 0; // 0x0
+    field public static final int ADVERTISE_TX_POWER_HIGH = 3; // 0x3
+    field public static final int ADVERTISE_TX_POWER_LOW = 1; // 0x1
+    field public static final int ADVERTISE_TX_POWER_MEDIUM = 2; // 0x2
+    field public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertiseSettings> CREATOR;
+  }
+
+  public static final class AdvertiseSettings.Builder {
+    ctor public AdvertiseSettings.Builder();
+    method public android.bluetooth.le.AdvertiseSettings build();
+    method public android.bluetooth.le.AdvertiseSettings.Builder setAdvertiseMode(int);
+    method public android.bluetooth.le.AdvertiseSettings.Builder setConnectable(boolean);
+    method public android.bluetooth.le.AdvertiseSettings.Builder setTimeout(int);
+    method public android.bluetooth.le.AdvertiseSettings.Builder setTxPowerLevel(int);
+  }
+
+  public final class AdvertisingSet {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void enableAdvertising(boolean, int, int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setAdvertisingData(android.bluetooth.le.AdvertiseData);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setAdvertisingParameters(android.bluetooth.le.AdvertisingSetParameters);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setPeriodicAdvertisingData(android.bluetooth.le.AdvertiseData);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setPeriodicAdvertisingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setPeriodicAdvertisingParameters(android.bluetooth.le.PeriodicAdvertisingParameters);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void setScanResponseData(android.bluetooth.le.AdvertiseData);
+  }
+
+  public abstract class AdvertisingSetCallback {
+    ctor public AdvertisingSetCallback();
+    method public void onAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
+    method public void onAdvertisingEnabled(android.bluetooth.le.AdvertisingSet, boolean, int);
+    method public void onAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int, int);
+    method public void onAdvertisingSetStarted(android.bluetooth.le.AdvertisingSet, int, int);
+    method public void onAdvertisingSetStopped(android.bluetooth.le.AdvertisingSet);
+    method public void onPeriodicAdvertisingDataSet(android.bluetooth.le.AdvertisingSet, int);
+    method public void onPeriodicAdvertisingEnabled(android.bluetooth.le.AdvertisingSet, boolean, int);
+    method public void onPeriodicAdvertisingParametersUpdated(android.bluetooth.le.AdvertisingSet, int);
+    method public void onScanResponseDataSet(android.bluetooth.le.AdvertisingSet, int);
+    field public static final int ADVERTISE_FAILED_ALREADY_STARTED = 3; // 0x3
+    field public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; // 0x1
+    field public static final int ADVERTISE_FAILED_FEATURE_UNSUPPORTED = 5; // 0x5
+    field public static final int ADVERTISE_FAILED_INTERNAL_ERROR = 4; // 0x4
+    field public static final int ADVERTISE_FAILED_TOO_MANY_ADVERTISERS = 2; // 0x2
+    field public static final int ADVERTISE_SUCCESS = 0; // 0x0
+  }
+
+  public final class AdvertisingSetParameters implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getInterval();
+    method public int getPrimaryPhy();
+    method public int getSecondaryPhy();
+    method public int getTxPowerLevel();
+    method public boolean includeTxPower();
+    method public boolean isAnonymous();
+    method public boolean isConnectable();
+    method public boolean isLegacy();
+    method public boolean isScannable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.AdvertisingSetParameters> CREATOR;
+    field public static final int INTERVAL_HIGH = 1600; // 0x640
+    field public static final int INTERVAL_LOW = 160; // 0xa0
+    field public static final int INTERVAL_MAX = 16777215; // 0xffffff
+    field public static final int INTERVAL_MEDIUM = 400; // 0x190
+    field public static final int INTERVAL_MIN = 160; // 0xa0
+    field public static final int TX_POWER_HIGH = 1; // 0x1
+    field public static final int TX_POWER_LOW = -15; // 0xfffffff1
+    field public static final int TX_POWER_MAX = 1; // 0x1
+    field public static final int TX_POWER_MEDIUM = -7; // 0xfffffff9
+    field public static final int TX_POWER_MIN = -127; // 0xffffff81
+    field public static final int TX_POWER_ULTRA_LOW = -21; // 0xffffffeb
+  }
+
+  public static final class AdvertisingSetParameters.Builder {
+    ctor public AdvertisingSetParameters.Builder();
+    method public android.bluetooth.le.AdvertisingSetParameters build();
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setAnonymous(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setConnectable(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setIncludeTxPower(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setInterval(int);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setLegacyMode(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setPrimaryPhy(int);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setScannable(boolean);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setSecondaryPhy(int);
+    method public android.bluetooth.le.AdvertisingSetParameters.Builder setTxPowerLevel(int);
+  }
+
+  public final class BluetoothLeAdvertiser {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertising(android.bluetooth.le.AdvertiseSettings, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertisingSetCallback, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, int, int, android.bluetooth.le.AdvertisingSetCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void startAdvertisingSet(android.bluetooth.le.AdvertisingSetParameters, android.bluetooth.le.AdvertiseData, android.bluetooth.le.AdvertiseData, android.bluetooth.le.PeriodicAdvertisingParameters, android.bluetooth.le.AdvertiseData, int, int, android.bluetooth.le.AdvertisingSetCallback, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void stopAdvertising(android.bluetooth.le.AdvertiseCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE) public void stopAdvertisingSet(android.bluetooth.le.AdvertisingSetCallback);
+  }
+
+  public final class BluetoothLeScanner {
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void flushPendingScanResults(android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void startScan(android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void startScan(java.util.List<android.bluetooth.le.ScanFilter>, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public int startScan(@Nullable java.util.List<android.bluetooth.le.ScanFilter>, @Nullable android.bluetooth.le.ScanSettings, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void stopScan(android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void stopScan(android.app.PendingIntent);
+    field public static final String EXTRA_CALLBACK_TYPE = "android.bluetooth.le.extra.CALLBACK_TYPE";
+    field public static final String EXTRA_ERROR_CODE = "android.bluetooth.le.extra.ERROR_CODE";
+    field public static final String EXTRA_LIST_SCAN_RESULT = "android.bluetooth.le.extra.LIST_SCAN_RESULT";
+  }
+
+  public final class PeriodicAdvertisingParameters implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getIncludeTxPower();
+    method public int getInterval();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.bluetooth.le.PeriodicAdvertisingParameters> CREATOR;
+  }
+
+  public static final class PeriodicAdvertisingParameters.Builder {
+    ctor public PeriodicAdvertisingParameters.Builder();
+    method public android.bluetooth.le.PeriodicAdvertisingParameters build();
+    method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setIncludeTxPower(boolean);
+    method public android.bluetooth.le.PeriodicAdvertisingParameters.Builder setInterval(int);
+  }
+
+  public abstract class ScanCallback {
+    ctor public ScanCallback();
+    method public void onBatchScanResults(java.util.List<android.bluetooth.le.ScanResult>);
+    method public void onScanFailed(int);
+    method public void onScanResult(int, android.bluetooth.le.ScanResult);
+    field public static final int SCAN_FAILED_ALREADY_STARTED = 1; // 0x1
+    field public static final int SCAN_FAILED_APPLICATION_REGISTRATION_FAILED = 2; // 0x2
+    field public static final int SCAN_FAILED_FEATURE_UNSUPPORTED = 4; // 0x4
+    field public static final int SCAN_FAILED_INTERNAL_ERROR = 3; // 0x3
+  }
+
+  public final class ScanFilter implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getDeviceAddress();
+    method @Nullable public String getDeviceName();
+    method @Nullable public byte[] getManufacturerData();
+    method @Nullable public byte[] getManufacturerDataMask();
+    method public int getManufacturerId();
+    method @Nullable public byte[] getServiceData();
+    method @Nullable public byte[] getServiceDataMask();
+    method @Nullable public android.os.ParcelUuid getServiceDataUuid();
+    method @Nullable public android.os.ParcelUuid getServiceSolicitationUuid();
+    method @Nullable public android.os.ParcelUuid getServiceSolicitationUuidMask();
+    method @Nullable public android.os.ParcelUuid getServiceUuid();
+    method @Nullable public android.os.ParcelUuid getServiceUuidMask();
+    method public boolean matches(android.bluetooth.le.ScanResult);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanFilter> CREATOR;
+  }
+
+  public static final class ScanFilter.Builder {
+    ctor public ScanFilter.Builder();
+    method public android.bluetooth.le.ScanFilter build();
+    method public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(String);
+    method public android.bluetooth.le.ScanFilter.Builder setDeviceName(String);
+    method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[]);
+    method public android.bluetooth.le.ScanFilter.Builder setManufacturerData(int, byte[], byte[]);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceData(android.os.ParcelUuid, byte[]);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceData(android.os.ParcelUuid, byte[], byte[]);
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setServiceSolicitationUuid(@Nullable android.os.ParcelUuid);
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setServiceSolicitationUuid(@Nullable android.os.ParcelUuid, @Nullable android.os.ParcelUuid);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceUuid(android.os.ParcelUuid);
+    method public android.bluetooth.le.ScanFilter.Builder setServiceUuid(android.os.ParcelUuid, android.os.ParcelUuid);
+  }
+
+  public final class ScanRecord {
+    method public int getAdvertiseFlags();
+    method public byte[] getBytes();
+    method @Nullable public String getDeviceName();
+    method public android.util.SparseArray<byte[]> getManufacturerSpecificData();
+    method @Nullable public byte[] getManufacturerSpecificData(int);
+    method public java.util.Map<android.os.ParcelUuid,byte[]> getServiceData();
+    method @Nullable public byte[] getServiceData(android.os.ParcelUuid);
+    method @NonNull public java.util.List<android.os.ParcelUuid> getServiceSolicitationUuids();
+    method public java.util.List<android.os.ParcelUuid> getServiceUuids();
+    method public int getTxPowerLevel();
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    ctor @Deprecated public ScanResult(android.bluetooth.BluetoothDevice, android.bluetooth.le.ScanRecord, int, long);
+    ctor public ScanResult(android.bluetooth.BluetoothDevice, int, int, int, int, int, int, int, android.bluetooth.le.ScanRecord, long);
+    method public int describeContents();
+    method public int getAdvertisingSid();
+    method public int getDataStatus();
+    method public android.bluetooth.BluetoothDevice getDevice();
+    method public int getPeriodicAdvertisingInterval();
+    method public int getPrimaryPhy();
+    method public int getRssi();
+    method @Nullable public android.bluetooth.le.ScanRecord getScanRecord();
+    method public int getSecondaryPhy();
+    method public long getTimestampNanos();
+    method public int getTxPower();
+    method public boolean isConnectable();
+    method public boolean isLegacy();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanResult> CREATOR;
+    field public static final int DATA_COMPLETE = 0; // 0x0
+    field public static final int DATA_TRUNCATED = 2; // 0x2
+    field public static final int PERIODIC_INTERVAL_NOT_PRESENT = 0; // 0x0
+    field public static final int PHY_UNUSED = 0; // 0x0
+    field public static final int SID_NOT_PRESENT = 255; // 0xff
+    field public static final int TX_POWER_NOT_PRESENT = 127; // 0x7f
+  }
+
+  public final class ScanSettings implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCallbackType();
+    method public boolean getLegacy();
+    method public int getPhy();
+    method public long getReportDelayMillis();
+    method public int getScanMode();
+    method public int getScanResultType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALLBACK_TYPE_ALL_MATCHES = 1; // 0x1
+    field public static final int CALLBACK_TYPE_FIRST_MATCH = 2; // 0x2
+    field public static final int CALLBACK_TYPE_MATCH_LOST = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ScanSettings> CREATOR;
+    field public static final int MATCH_MODE_AGGRESSIVE = 1; // 0x1
+    field public static final int MATCH_MODE_STICKY = 2; // 0x2
+    field public static final int MATCH_NUM_FEW_ADVERTISEMENT = 2; // 0x2
+    field public static final int MATCH_NUM_MAX_ADVERTISEMENT = 3; // 0x3
+    field public static final int MATCH_NUM_ONE_ADVERTISEMENT = 1; // 0x1
+    field public static final int PHY_LE_ALL_SUPPORTED = 255; // 0xff
+    field public static final int SCAN_MODE_BALANCED = 1; // 0x1
+    field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2
+    field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0
+    field public static final int SCAN_MODE_OPPORTUNISTIC = -1; // 0xffffffff
+  }
+
+  public static final class ScanSettings.Builder {
+    ctor public ScanSettings.Builder();
+    method public android.bluetooth.le.ScanSettings build();
+    method public android.bluetooth.le.ScanSettings.Builder setCallbackType(int);
+    method public android.bluetooth.le.ScanSettings.Builder setLegacy(boolean);
+    method public android.bluetooth.le.ScanSettings.Builder setMatchMode(int);
+    method public android.bluetooth.le.ScanSettings.Builder setNumOfMatches(int);
+    method public android.bluetooth.le.ScanSettings.Builder setPhy(int);
+    method public android.bluetooth.le.ScanSettings.Builder setReportDelay(long);
+    method public android.bluetooth.le.ScanSettings.Builder setScanMode(int);
+  }
+
+}
+
+package android.companion {
+
+  public final class AssociationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.AssociationRequest> CREATOR;
+    field public static final String DEVICE_PROFILE_WATCH = "android.app.role.COMPANION_DEVICE_WATCH";
+  }
+
+  public static final class AssociationRequest.Builder {
+    ctor public AssociationRequest.Builder();
+    method @NonNull public android.companion.AssociationRequest.Builder addDeviceFilter(@Nullable android.companion.DeviceFilter<?>);
+    method @NonNull public android.companion.AssociationRequest build();
+    method @NonNull public android.companion.AssociationRequest.Builder setDeviceProfile(@NonNull String);
+    method @NonNull public android.companion.AssociationRequest.Builder setSingleDevice(boolean);
+  }
+
+  public final class BluetoothDeviceFilter implements android.companion.DeviceFilter<android.bluetooth.BluetoothDevice> {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.BluetoothDeviceFilter> CREATOR;
+  }
+
+  public static final class BluetoothDeviceFilter.Builder {
+    ctor public BluetoothDeviceFilter.Builder();
+    method @NonNull public android.companion.BluetoothDeviceFilter.Builder addServiceUuid(@Nullable android.os.ParcelUuid, @Nullable android.os.ParcelUuid);
+    method @NonNull public android.companion.BluetoothDeviceFilter build();
+    method @NonNull public android.companion.BluetoothDeviceFilter.Builder setAddress(@Nullable String);
+    method public android.companion.BluetoothDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
+  }
+
+  public final class BluetoothLeDeviceFilter implements android.companion.DeviceFilter<android.bluetooth.le.ScanResult> {
+    method public int describeContents();
+    method public static int getRenamePrefixLengthLimit();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.BluetoothLeDeviceFilter> CREATOR;
+  }
+
+  public static final class BluetoothLeDeviceFilter.Builder {
+    ctor public BluetoothLeDeviceFilter.Builder();
+    method @NonNull public android.companion.BluetoothLeDeviceFilter build();
+    method public android.companion.BluetoothLeDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setRawDataFilter(@NonNull byte[], @Nullable byte[]);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setRenameFromBytes(@NonNull String, @NonNull String, int, int, java.nio.ByteOrder);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setRenameFromName(@NonNull String, @NonNull String, int, int);
+    method @NonNull public android.companion.BluetoothLeDeviceFilter.Builder setScanFilter(@Nullable android.bluetooth.le.ScanFilter);
+  }
+
+  public final class CompanionDeviceManager {
+    method @RequiresPermission(value=android.Manifest.permission.REQUEST_COMPANION_PROFILE_WATCH, conditional=true) public void associate(@NonNull android.companion.AssociationRequest, @NonNull android.companion.CompanionDeviceManager.Callback, @Nullable android.os.Handler);
+    method public void disassociate(@NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getAssociations();
+    method public boolean hasNotificationAccess(android.content.ComponentName);
+    method public void requestNotificationAccess(android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void startObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException;
+    method @RequiresPermission(android.Manifest.permission.REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE) public void stopObservingDevicePresence(@NonNull String) throws android.companion.DeviceNotAssociatedException;
+    field public static final String EXTRA_DEVICE = "android.companion.extra.DEVICE";
+  }
+
+  public abstract static class CompanionDeviceManager.Callback {
+    ctor public CompanionDeviceManager.Callback();
+    method public abstract void onDeviceFound(android.content.IntentSender);
+    method public abstract void onFailure(CharSequence);
+  }
+
+  public abstract class CompanionDeviceService extends android.app.Service {
+    ctor public CompanionDeviceService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @MainThread public abstract void onDeviceAppeared(@NonNull String);
+    method @MainThread public abstract void onDeviceDisappeared(@NonNull String);
+    field public static final String SERVICE_INTERFACE = "android.companion.CompanionDeviceService";
+  }
+
+  public interface DeviceFilter<D extends android.os.Parcelable> extends android.os.Parcelable {
+  }
+
+  public class DeviceNotAssociatedException extends java.lang.RuntimeException {
+  }
+
+  public final class WifiDeviceFilter implements android.companion.DeviceFilter<android.net.wifi.ScanResult> {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.companion.WifiDeviceFilter> CREATOR;
+  }
+
+  public static final class WifiDeviceFilter.Builder {
+    ctor public WifiDeviceFilter.Builder();
+    method @NonNull public android.companion.WifiDeviceFilter build();
+    method @NonNull public android.companion.WifiDeviceFilter.Builder setBssid(@NonNull android.net.MacAddress);
+    method @NonNull public android.companion.WifiDeviceFilter.Builder setBssidMask(@NonNull android.net.MacAddress);
+    method @NonNull public android.companion.WifiDeviceFilter.Builder setNamePattern(@Nullable java.util.regex.Pattern);
+  }
+
+}
+
+package android.content {
+
+  public abstract class AbstractThreadedSyncAdapter {
+    ctor public AbstractThreadedSyncAdapter(android.content.Context, boolean);
+    ctor public AbstractThreadedSyncAdapter(android.content.Context, boolean, boolean);
+    method public android.content.Context getContext();
+    method public final android.os.IBinder getSyncAdapterBinder();
+    method public abstract void onPerformSync(android.accounts.Account, android.os.Bundle, String, android.content.ContentProviderClient, android.content.SyncResult);
+    method public void onSecurityException(android.accounts.Account, android.os.Bundle, String, android.content.SyncResult);
+    method public void onSyncCanceled();
+    method public void onSyncCanceled(Thread);
+    method @MainThread public boolean onUnsyncableAccount();
+    field @Deprecated public static final int LOG_SYNC_DETAILS = 2743; // 0xab7
+  }
+
+  public class ActivityNotFoundException extends java.lang.RuntimeException {
+    ctor public ActivityNotFoundException();
+    ctor public ActivityNotFoundException(String);
+  }
+
+  public abstract class AsyncQueryHandler extends android.os.Handler {
+    ctor public AsyncQueryHandler(android.content.ContentResolver);
+    method public final void cancelOperation(int);
+    method protected android.os.Handler createHandler(android.os.Looper);
+    method protected void onDeleteComplete(int, Object, int);
+    method protected void onInsertComplete(int, Object, android.net.Uri);
+    method protected void onQueryComplete(int, Object, android.database.Cursor);
+    method protected void onUpdateComplete(int, Object, int);
+    method public final void startDelete(int, Object, android.net.Uri, String, String[]);
+    method public final void startInsert(int, Object, android.net.Uri, android.content.ContentValues);
+    method public void startQuery(int, Object, android.net.Uri, String[], String, String[], String);
+    method public final void startUpdate(int, Object, android.net.Uri, android.content.ContentValues, String, String[]);
+  }
+
+  protected static final class AsyncQueryHandler.WorkerArgs {
+    ctor protected AsyncQueryHandler.WorkerArgs();
+    field public Object cookie;
+    field public android.os.Handler handler;
+    field public String orderBy;
+    field public String[] projection;
+    field public Object result;
+    field public String selection;
+    field public String[] selectionArgs;
+    field public android.net.Uri uri;
+    field public android.content.ContentValues values;
+  }
+
+  protected class AsyncQueryHandler.WorkerHandler extends android.os.Handler {
+    ctor public AsyncQueryHandler.WorkerHandler(android.os.Looper);
+  }
+
+  @Deprecated public abstract class AsyncTaskLoader<D> extends android.content.Loader<D> {
+    ctor @Deprecated public AsyncTaskLoader(android.content.Context);
+    method @Deprecated public void cancelLoadInBackground();
+    method @Deprecated public boolean isLoadInBackgroundCanceled();
+    method @Deprecated public abstract D loadInBackground();
+    method @Deprecated public void onCanceled(D);
+    method @Deprecated protected D onLoadInBackground();
+    method @Deprecated public void setUpdateThrottle(long);
+  }
+
+  public final class AttributionSource implements android.os.Parcelable {
+    method public boolean checkCallingUid();
+    method public int describeContents();
+    method public void enforceCallingUid();
+    method @Nullable public String getAttributionTag();
+    method @Nullable public android.content.AttributionSource getNext();
+    method @Nullable public String getPackageName();
+    method public int getUid();
+    method public boolean isTrusted(@NonNull android.content.Context);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.AttributionSource> CREATOR;
+  }
+
+  public static final class AttributionSource.Builder {
+    ctor public AttributionSource.Builder(int);
+    method @NonNull public android.content.AttributionSource build();
+    method @NonNull public android.content.AttributionSource.Builder setAttributionTag(@Nullable String);
+    method @NonNull public android.content.AttributionSource.Builder setNext(@Nullable android.content.AttributionSource);
+    method @NonNull public android.content.AttributionSource.Builder setPackageName(@Nullable String);
+  }
+
+  public abstract class BroadcastReceiver {
+    ctor public BroadcastReceiver();
+    method public final void abortBroadcast();
+    method public final void clearAbortBroadcast();
+    method public final boolean getAbortBroadcast();
+    method public final boolean getDebugUnregister();
+    method public final int getResultCode();
+    method public final String getResultData();
+    method public final android.os.Bundle getResultExtras(boolean);
+    method public final android.content.BroadcastReceiver.PendingResult goAsync();
+    method public final boolean isInitialStickyBroadcast();
+    method public final boolean isOrderedBroadcast();
+    method public abstract void onReceive(android.content.Context, android.content.Intent);
+    method public android.os.IBinder peekService(android.content.Context, android.content.Intent);
+    method public final void setDebugUnregister(boolean);
+    method public final void setOrderedHint(boolean);
+    method public final void setResult(int, String, android.os.Bundle);
+    method public final void setResultCode(int);
+    method public final void setResultData(String);
+    method public final void setResultExtras(android.os.Bundle);
+  }
+
+  public static class BroadcastReceiver.PendingResult {
+    method public final void abortBroadcast();
+    method public final void clearAbortBroadcast();
+    method public final void finish();
+    method public final boolean getAbortBroadcast();
+    method public final int getResultCode();
+    method public final String getResultData();
+    method public final android.os.Bundle getResultExtras(boolean);
+    method public final void setResult(int, String, android.os.Bundle);
+    method public final void setResultCode(int);
+    method public final void setResultData(String);
+    method public final void setResultExtras(android.os.Bundle);
+  }
+
+  public class ClipData implements android.os.Parcelable {
+    ctor public ClipData(CharSequence, String[], android.content.ClipData.Item);
+    ctor public ClipData(android.content.ClipDescription, android.content.ClipData.Item);
+    ctor public ClipData(android.content.ClipData);
+    method public void addItem(android.content.ClipData.Item);
+    method public void addItem(android.content.ContentResolver, android.content.ClipData.Item);
+    method public int describeContents();
+    method public android.content.ClipDescription getDescription();
+    method public android.content.ClipData.Item getItemAt(int);
+    method public int getItemCount();
+    method public static android.content.ClipData newHtmlText(CharSequence, CharSequence, String);
+    method public static android.content.ClipData newIntent(CharSequence, android.content.Intent);
+    method public static android.content.ClipData newPlainText(CharSequence, CharSequence);
+    method public static android.content.ClipData newRawUri(CharSequence, android.net.Uri);
+    method public static android.content.ClipData newUri(android.content.ContentResolver, CharSequence, android.net.Uri);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ClipData> CREATOR;
+  }
+
+  public static class ClipData.Item {
+    ctor public ClipData.Item(CharSequence);
+    ctor public ClipData.Item(CharSequence, String);
+    ctor public ClipData.Item(android.content.Intent);
+    ctor public ClipData.Item(android.net.Uri);
+    ctor public ClipData.Item(CharSequence, android.content.Intent, android.net.Uri);
+    ctor public ClipData.Item(CharSequence, String, android.content.Intent, android.net.Uri);
+    method public String coerceToHtmlText(android.content.Context);
+    method public CharSequence coerceToStyledText(android.content.Context);
+    method public CharSequence coerceToText(android.content.Context);
+    method public String getHtmlText();
+    method public android.content.Intent getIntent();
+    method public CharSequence getText();
+    method @Nullable public android.view.textclassifier.TextLinks getTextLinks();
+    method public android.net.Uri getUri();
+  }
+
+  public class ClipDescription implements android.os.Parcelable {
+    ctor public ClipDescription(CharSequence, String[]);
+    ctor public ClipDescription(android.content.ClipDescription);
+    method public static boolean compareMimeTypes(String, String);
+    method public int describeContents();
+    method public String[] filterMimeTypes(String);
+    method public int getClassificationStatus();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(@NonNull String);
+    method public android.os.PersistableBundle getExtras();
+    method public CharSequence getLabel();
+    method public String getMimeType(int);
+    method public int getMimeTypeCount();
+    method public long getTimestamp();
+    method public boolean hasMimeType(String);
+    method public boolean isStyledText();
+    method public void setExtras(android.os.PersistableBundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CLASSIFICATION_COMPLETE = 3; // 0x3
+    field public static final int CLASSIFICATION_NOT_COMPLETE = 1; // 0x1
+    field public static final int CLASSIFICATION_NOT_PERFORMED = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ClipDescription> CREATOR;
+    field public static final String MIMETYPE_TEXT_HTML = "text/html";
+    field public static final String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent";
+    field public static final String MIMETYPE_TEXT_PLAIN = "text/plain";
+    field public static final String MIMETYPE_TEXT_URILIST = "text/uri-list";
+    field public static final String MIMETYPE_UNKNOWN = "application/octet-stream";
+  }
+
+  public class ClipboardManager extends android.text.ClipboardManager {
+    method public void addPrimaryClipChangedListener(android.content.ClipboardManager.OnPrimaryClipChangedListener);
+    method public void clearPrimaryClip();
+    method @Nullable public android.content.ClipData getPrimaryClip();
+    method @Nullable public android.content.ClipDescription getPrimaryClipDescription();
+    method @Deprecated public CharSequence getText();
+    method public boolean hasPrimaryClip();
+    method @Deprecated public boolean hasText();
+    method public void removePrimaryClipChangedListener(android.content.ClipboardManager.OnPrimaryClipChangedListener);
+    method public void setPrimaryClip(@NonNull android.content.ClipData);
+    method @Deprecated public void setText(CharSequence);
+  }
+
+  public static interface ClipboardManager.OnPrimaryClipChangedListener {
+    method public void onPrimaryClipChanged();
+  }
+
+  public interface ComponentCallbacks {
+    method public void onConfigurationChanged(@NonNull android.content.res.Configuration);
+    method public void onLowMemory();
+  }
+
+  public interface ComponentCallbacks2 extends android.content.ComponentCallbacks {
+    method public void onTrimMemory(int);
+    field public static final int TRIM_MEMORY_BACKGROUND = 40; // 0x28
+    field public static final int TRIM_MEMORY_COMPLETE = 80; // 0x50
+    field public static final int TRIM_MEMORY_MODERATE = 60; // 0x3c
+    field public static final int TRIM_MEMORY_RUNNING_CRITICAL = 15; // 0xf
+    field public static final int TRIM_MEMORY_RUNNING_LOW = 10; // 0xa
+    field public static final int TRIM_MEMORY_RUNNING_MODERATE = 5; // 0x5
+    field public static final int TRIM_MEMORY_UI_HIDDEN = 20; // 0x14
+  }
+
+  public final class ComponentName implements java.lang.Cloneable java.lang.Comparable<android.content.ComponentName> android.os.Parcelable {
+    ctor public ComponentName(@NonNull String, @NonNull String);
+    ctor public ComponentName(@NonNull android.content.Context, @NonNull String);
+    ctor public ComponentName(@NonNull android.content.Context, @NonNull Class<?>);
+    ctor public ComponentName(android.os.Parcel);
+    method public android.content.ComponentName clone();
+    method public int compareTo(android.content.ComponentName);
+    method @NonNull public static android.content.ComponentName createRelative(@NonNull String, @NonNull String);
+    method @NonNull public static android.content.ComponentName createRelative(@NonNull android.content.Context, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String flattenToShortString();
+    method @NonNull public String flattenToString();
+    method @NonNull public String getClassName();
+    method @NonNull public String getPackageName();
+    method public String getShortClassName();
+    method public static android.content.ComponentName readFromParcel(android.os.Parcel);
+    method public String toShortString();
+    method @Nullable public static android.content.ComponentName unflattenFromString(@NonNull String);
+    method public void writeToParcel(android.os.Parcel, int);
+    method public static void writeToParcel(android.content.ComponentName, android.os.Parcel);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ComponentName> CREATOR;
+  }
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    ctor public ContentProvider();
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull String, @NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException;
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException;
+    method public void attachInfo(android.content.Context, android.content.pm.ProviderInfo);
+    method public int bulkInsert(@NonNull android.net.Uri, @NonNull android.content.ContentValues[]);
+    method @Nullable public android.os.Bundle call(@NonNull String, @NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Nullable public android.os.Bundle call(@NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Nullable public android.net.Uri canonicalize(@NonNull android.net.Uri);
+    method @NonNull public final android.content.ContentProvider.CallingIdentity clearCallingIdentity();
+    method public abstract int delete(@NonNull android.net.Uri, @Nullable String, @Nullable String[]);
+    method public int delete(@NonNull android.net.Uri, @Nullable android.os.Bundle);
+    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Nullable public final android.content.AttributionSource getCallingAttributionSource();
+    method @Nullable public final String getCallingAttributionTag();
+    method @Nullable public final String getCallingPackage();
+    method @Nullable public final String getCallingPackageUnchecked();
+    method @Nullable public final android.content.Context getContext();
+    method @Nullable public final android.content.pm.PathPermission[] getPathPermissions();
+    method @Nullable public final String getReadPermission();
+    method @Nullable public String[] getStreamTypes(@NonNull android.net.Uri, @NonNull String);
+    method @Nullable public abstract String getType(@NonNull android.net.Uri);
+    method @Nullable public final String getWritePermission();
+    method @Nullable public abstract android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues);
+    method @Nullable public android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+    method protected boolean isTemporary();
+    method public void onCallingPackageChanged();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public abstract boolean onCreate();
+    method public void onLowMemory();
+    method public void onTrimMemory(int);
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @NonNull protected final android.os.ParcelFileDescriptor openFileHelper(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @NonNull public <T> android.os.ParcelFileDescriptor openPipeHelper(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable T, @NonNull android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
+    method @Nullable public android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method @Nullable public android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public abstract android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String);
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String, @Nullable android.os.CancellationSignal);
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method public boolean refresh(android.net.Uri, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method @NonNull public final android.content.Context requireContext();
+    method public final void restoreCallingIdentity(@NonNull android.content.ContentProvider.CallingIdentity);
+    method protected final void setPathPermissions(@Nullable android.content.pm.PathPermission[]);
+    method protected final void setReadPermission(@Nullable String);
+    method protected final void setWritePermission(@Nullable String);
+    method public void shutdown();
+    method @Nullable public android.net.Uri uncanonicalize(@NonNull android.net.Uri);
+    method public abstract int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable String, @Nullable String[]);
+    method public int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+  }
+
+  public final class ContentProvider.CallingIdentity {
+  }
+
+  public static interface ContentProvider.PipeDataWriter<T> {
+    method public void writeDataToPipe(@NonNull android.os.ParcelFileDescriptor, @NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable T);
+  }
+
+  public class ContentProviderClient implements java.lang.AutoCloseable {
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException;
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull String, @NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException;
+    method public int bulkInsert(@NonNull android.net.Uri, @NonNull android.content.ContentValues[]) throws android.os.RemoteException;
+    method @Nullable public android.os.Bundle call(@NonNull String, @Nullable String, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public android.os.Bundle call(@NonNull String, @NonNull String, @Nullable String, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public final android.net.Uri canonicalize(@NonNull android.net.Uri) throws android.os.RemoteException;
+    method public void close();
+    method public int delete(@NonNull android.net.Uri, @Nullable String, @Nullable String[]) throws android.os.RemoteException;
+    method public int delete(@NonNull android.net.Uri, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public android.content.ContentProvider getLocalContentProvider();
+    method @Nullable public String[] getStreamTypes(@NonNull android.net.Uri, @NonNull String) throws android.os.RemoteException;
+    method @Nullable public String getType(@NonNull android.net.Uri) throws android.os.RemoteException;
+    method @Nullable public android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues) throws android.os.RemoteException;
+    method @Nullable public android.net.Uri insert(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle) throws android.os.RemoteException;
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException, android.os.RemoteException;
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String) throws android.os.RemoteException;
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String, @Nullable android.os.CancellationSignal) throws android.os.RemoteException;
+    method @Nullable public android.database.Cursor query(@NonNull android.net.Uri, @Nullable String[], android.os.Bundle, @Nullable android.os.CancellationSignal) throws android.os.RemoteException;
+    method public boolean refresh(android.net.Uri, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws android.os.RemoteException;
+    method @Deprecated public boolean release();
+    method @Nullable public final android.net.Uri uncanonicalize(@NonNull android.net.Uri) throws android.os.RemoteException;
+    method public int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable String, @Nullable String[]) throws android.os.RemoteException;
+    method public int update(@NonNull android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle) throws android.os.RemoteException;
+  }
+
+  public class ContentProviderOperation implements android.os.Parcelable {
+    method @NonNull public android.content.ContentProviderResult apply(@NonNull android.content.ContentProvider, @NonNull android.content.ContentProviderResult[], int) throws android.content.OperationApplicationException;
+    method public int describeContents();
+    method @NonNull public android.net.Uri getUri();
+    method public boolean isAssertQuery();
+    method public boolean isCall();
+    method public boolean isDelete();
+    method public boolean isExceptionAllowed();
+    method public boolean isInsert();
+    method public boolean isReadOperation();
+    method public boolean isUpdate();
+    method public boolean isWriteOperation();
+    method public boolean isYieldAllowed();
+    method @NonNull public static android.content.ContentProviderOperation.Builder newAssertQuery(@NonNull android.net.Uri);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newCall(@NonNull android.net.Uri, @Nullable String, @Nullable String);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newDelete(@NonNull android.net.Uri);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newInsert(@NonNull android.net.Uri);
+    method @NonNull public static android.content.ContentProviderOperation.Builder newUpdate(@NonNull android.net.Uri);
+    method @Nullable public android.os.Bundle resolveExtrasBackReferences(@NonNull android.content.ContentProviderResult[], int);
+    method @Nullable public String[] resolveSelectionArgsBackReferences(@NonNull android.content.ContentProviderResult[], int);
+    method @Nullable public android.content.ContentValues resolveValueBackReferences(@NonNull android.content.ContentProviderResult[], int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentProviderOperation> CREATOR;
+  }
+
+  public static class ContentProviderOperation.Builder {
+    method @NonNull public android.content.ContentProviderOperation build();
+    method @NonNull public android.content.ContentProviderOperation.Builder withExceptionAllowed(boolean);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExpectedCount(int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtra(@NonNull String, @Nullable Object);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtraBackReference(@NonNull String, int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtraBackReference(@NonNull String, int, @NonNull String);
+    method @NonNull public android.content.ContentProviderOperation.Builder withExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.content.ContentProviderOperation.Builder withSelection(@Nullable String, @Nullable String[]);
+    method @NonNull public android.content.ContentProviderOperation.Builder withSelectionBackReference(int, int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withSelectionBackReference(int, int, @NonNull String);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValue(@NonNull String, @Nullable Object);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValueBackReference(@NonNull String, int);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValueBackReference(@NonNull String, int, @NonNull String);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValueBackReferences(@NonNull android.content.ContentValues);
+    method @NonNull public android.content.ContentProviderOperation.Builder withValues(@NonNull android.content.ContentValues);
+    method @NonNull public android.content.ContentProviderOperation.Builder withYieldAllowed(boolean);
+  }
+
+  public class ContentProviderResult implements android.os.Parcelable {
+    ctor public ContentProviderResult(@NonNull android.net.Uri);
+    ctor public ContentProviderResult(int);
+    ctor public ContentProviderResult(@NonNull android.os.Bundle);
+    ctor public ContentProviderResult(@NonNull Throwable);
+    ctor public ContentProviderResult(android.os.Parcel);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentProviderResult> CREATOR;
+    field @Nullable public final Integer count;
+    field @Nullable public final Throwable exception;
+    field @Nullable public final android.os.Bundle extras;
+    field @Nullable public final android.net.Uri uri;
+  }
+
+  public class ContentQueryMap extends java.util.Observable {
+    ctor public ContentQueryMap(android.database.Cursor, String, boolean, android.os.Handler);
+    method public void close();
+    method public java.util.Map<java.lang.String,android.content.ContentValues> getRows();
+    method public android.content.ContentValues getValues(String);
+    method public void requery();
+    method public void setKeepUpdated(boolean);
+  }
+
+  public abstract class ContentResolver {
+    ctor public ContentResolver(@Nullable android.content.Context);
+    method @Nullable public final android.content.ContentProviderClient acquireContentProviderClient(@NonNull android.net.Uri);
+    method @Nullable public final android.content.ContentProviderClient acquireContentProviderClient(@NonNull String);
+    method @Nullable public final android.content.ContentProviderClient acquireUnstableContentProviderClient(@NonNull android.net.Uri);
+    method @Nullable public final android.content.ContentProviderClient acquireUnstableContentProviderClient(@NonNull String);
+    method public static void addPeriodicSync(android.accounts.Account, String, android.os.Bundle, long);
+    method public static Object addStatusChangeListener(int, android.content.SyncStatusObserver);
+    method @NonNull public android.content.ContentProviderResult[] applyBatch(@NonNull String, @NonNull java.util.ArrayList<android.content.ContentProviderOperation>) throws android.content.OperationApplicationException, android.os.RemoteException;
+    method public final int bulkInsert(@NonNull @RequiresPermission.Write android.net.Uri, @NonNull android.content.ContentValues[]);
+    method @Nullable public final android.os.Bundle call(@NonNull android.net.Uri, @NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Nullable public final android.os.Bundle call(@NonNull String, @NonNull String, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated public void cancelSync(android.net.Uri);
+    method public static void cancelSync(android.accounts.Account, String);
+    method public static void cancelSync(android.content.SyncRequest);
+    method @Nullable public final android.net.Uri canonicalize(@NonNull android.net.Uri);
+    method public final int delete(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable String, @Nullable String[]);
+    method public final int delete(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.os.Bundle);
+    method @Deprecated public static android.content.SyncInfo getCurrentSync();
+    method public static java.util.List<android.content.SyncInfo> getCurrentSyncs();
+    method public static int getIsSyncable(android.accounts.Account, String);
+    method public static boolean getMasterSyncAutomatically();
+    method @NonNull public java.util.List<android.content.UriPermission> getOutgoingPersistedUriPermissions();
+    method public static java.util.List<android.content.PeriodicSync> getPeriodicSyncs(android.accounts.Account, String);
+    method @NonNull public java.util.List<android.content.UriPermission> getPersistedUriPermissions();
+    method @Nullable public String[] getStreamTypes(@NonNull android.net.Uri, @NonNull String);
+    method public static android.content.SyncAdapterType[] getSyncAdapterTypes();
+    method public static boolean getSyncAutomatically(android.accounts.Account, String);
+    method @Nullable public final String getType(@NonNull android.net.Uri);
+    method @NonNull public final android.content.ContentResolver.MimeTypeInfo getTypeInfo(@NonNull String);
+    method @Nullable public final android.net.Uri insert(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues);
+    method @Nullable public final android.net.Uri insert(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+    method public static boolean isSyncActive(android.accounts.Account, String);
+    method public static boolean isSyncPending(android.accounts.Account, String);
+    method @NonNull public android.graphics.Bitmap loadThumbnail(@NonNull android.net.Uri, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method public void notifyChange(@NonNull android.net.Uri, @Nullable android.database.ContentObserver);
+    method @Deprecated public void notifyChange(@NonNull android.net.Uri, @Nullable android.database.ContentObserver, boolean);
+    method public void notifyChange(@NonNull android.net.Uri, @Nullable android.database.ContentObserver, int);
+    method public void notifyChange(@NonNull java.util.Collection<android.net.Uri>, @Nullable android.database.ContentObserver, int);
+    method @Nullable public final android.content.res.AssetFileDescriptor openAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.os.ParcelFileDescriptor openFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.os.ParcelFileDescriptor openFileDescriptor(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public final android.os.ParcelFileDescriptor openFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final java.io.InputStream openInputStream(@NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public final java.io.OutputStream openOutputStream(@NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public final java.io.OutputStream openOutputStream(@NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFile(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method @Nullable public final android.content.res.AssetFileDescriptor openTypedAssetFileDescriptor(@NonNull android.net.Uri, @NonNull String, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method @Nullable public final android.database.Cursor query(@NonNull @RequiresPermission.Read android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String);
+    method @Nullable public final android.database.Cursor query(@NonNull @RequiresPermission.Read android.net.Uri, @Nullable String[], @Nullable String, @Nullable String[], @Nullable String, @Nullable android.os.CancellationSignal);
+    method @Nullable public final android.database.Cursor query(@NonNull @RequiresPermission.Read android.net.Uri, @Nullable String[], @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method public final boolean refresh(@NonNull android.net.Uri, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal);
+    method public final void registerContentObserver(@NonNull android.net.Uri, boolean, @NonNull android.database.ContentObserver);
+    method public void releasePersistableUriPermission(@NonNull android.net.Uri, int);
+    method public static void removePeriodicSync(android.accounts.Account, String, android.os.Bundle);
+    method public static void removeStatusChangeListener(Object);
+    method public static void requestSync(android.accounts.Account, String, android.os.Bundle);
+    method public static void requestSync(android.content.SyncRequest);
+    method public static void setIsSyncable(android.accounts.Account, String, int);
+    method public static void setMasterSyncAutomatically(boolean);
+    method public static void setSyncAutomatically(android.accounts.Account, String, boolean);
+    method @Deprecated public void startSync(android.net.Uri, android.os.Bundle);
+    method public void takePersistableUriPermission(@NonNull android.net.Uri, int);
+    method @Nullable public final android.net.Uri uncanonicalize(@NonNull android.net.Uri);
+    method public final void unregisterContentObserver(@NonNull android.database.ContentObserver);
+    method public final int update(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues, @Nullable String, @Nullable String[]);
+    method public final int update(@NonNull @RequiresPermission.Write android.net.Uri, @Nullable android.content.ContentValues, @Nullable android.os.Bundle);
+    method public static void validateSyncExtrasBundle(android.os.Bundle);
+    method @NonNull public static android.content.ContentResolver wrap(@NonNull android.content.ContentProvider);
+    method @NonNull public static android.content.ContentResolver wrap(@NonNull android.content.ContentProviderClient);
+    field public static final String ANY_CURSOR_ITEM_TYPE = "vnd.android.cursor.item/*";
+    field public static final String CURSOR_DIR_BASE_TYPE = "vnd.android.cursor.dir";
+    field public static final String CURSOR_ITEM_BASE_TYPE = "vnd.android.cursor.item";
+    field public static final String EXTRA_HONORED_ARGS = "android.content.extra.HONORED_ARGS";
+    field public static final String EXTRA_REFRESH_SUPPORTED = "android.content.extra.REFRESH_SUPPORTED";
+    field public static final String EXTRA_SIZE = "android.content.extra.SIZE";
+    field public static final String EXTRA_TOTAL_COUNT = "android.content.extra.TOTAL_COUNT";
+    field public static final int NOTIFY_DELETE = 16; // 0x10
+    field public static final int NOTIFY_INSERT = 4; // 0x4
+    field public static final int NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS = 2; // 0x2
+    field public static final int NOTIFY_SYNC_TO_NETWORK = 1; // 0x1
+    field public static final int NOTIFY_UPDATE = 8; // 0x8
+    field public static final String QUERY_ARG_GROUP_COLUMNS = "android:query-arg-group-columns";
+    field public static final String QUERY_ARG_LIMIT = "android:query-arg-limit";
+    field public static final String QUERY_ARG_OFFSET = "android:query-arg-offset";
+    field public static final String QUERY_ARG_SORT_COLLATION = "android:query-arg-sort-collation";
+    field public static final String QUERY_ARG_SORT_COLUMNS = "android:query-arg-sort-columns";
+    field public static final String QUERY_ARG_SORT_DIRECTION = "android:query-arg-sort-direction";
+    field public static final String QUERY_ARG_SORT_LOCALE = "android:query-arg-sort-locale";
+    field public static final String QUERY_ARG_SQL_GROUP_BY = "android:query-arg-sql-group-by";
+    field public static final String QUERY_ARG_SQL_HAVING = "android:query-arg-sql-having";
+    field public static final String QUERY_ARG_SQL_LIMIT = "android:query-arg-sql-limit";
+    field public static final String QUERY_ARG_SQL_SELECTION = "android:query-arg-sql-selection";
+    field public static final String QUERY_ARG_SQL_SELECTION_ARGS = "android:query-arg-sql-selection-args";
+    field public static final String QUERY_ARG_SQL_SORT_ORDER = "android:query-arg-sql-sort-order";
+    field public static final int QUERY_SORT_DIRECTION_ASCENDING = 0; // 0x0
+    field public static final int QUERY_SORT_DIRECTION_DESCENDING = 1; // 0x1
+    field public static final String SCHEME_ANDROID_RESOURCE = "android.resource";
+    field public static final String SCHEME_CONTENT = "content";
+    field public static final String SCHEME_FILE = "file";
+    field @Deprecated public static final String SYNC_EXTRAS_ACCOUNT = "account";
+    field public static final String SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS = "discard_deletions";
+    field public static final String SYNC_EXTRAS_DO_NOT_RETRY = "do_not_retry";
+    field public static final String SYNC_EXTRAS_EXPEDITED = "expedited";
+    field @Deprecated public static final String SYNC_EXTRAS_FORCE = "force";
+    field public static final String SYNC_EXTRAS_IGNORE_BACKOFF = "ignore_backoff";
+    field public static final String SYNC_EXTRAS_IGNORE_SETTINGS = "ignore_settings";
+    field public static final String SYNC_EXTRAS_INITIALIZE = "initialize";
+    field public static final String SYNC_EXTRAS_MANUAL = "force";
+    field public static final String SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS = "deletions_override";
+    field public static final String SYNC_EXTRAS_REQUIRE_CHARGING = "require_charging";
+    field public static final String SYNC_EXTRAS_SCHEDULE_AS_EXPEDITED_JOB = "schedule_as_expedited_job";
+    field public static final String SYNC_EXTRAS_UPLOAD = "upload";
+    field public static final int SYNC_OBSERVER_TYPE_ACTIVE = 4; // 0x4
+    field public static final int SYNC_OBSERVER_TYPE_PENDING = 2; // 0x2
+    field public static final int SYNC_OBSERVER_TYPE_SETTINGS = 1; // 0x1
+  }
+
+  public static final class ContentResolver.MimeTypeInfo {
+    method @NonNull public CharSequence getContentDescription();
+    method @NonNull public android.graphics.drawable.Icon getIcon();
+    method @NonNull public CharSequence getLabel();
+  }
+
+  public class ContentUris {
+    ctor public ContentUris();
+    method @NonNull public static android.net.Uri.Builder appendId(@NonNull android.net.Uri.Builder, long);
+    method public static long parseId(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri removeId(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri withAppendedId(@NonNull android.net.Uri, long);
+  }
+
+  public final class ContentValues implements android.os.Parcelable {
+    ctor public ContentValues();
+    ctor public ContentValues(int);
+    ctor public ContentValues(android.content.ContentValues);
+    method public void clear();
+    method public boolean containsKey(String);
+    method public int describeContents();
+    method public Object get(String);
+    method public Boolean getAsBoolean(String);
+    method public Byte getAsByte(String);
+    method public byte[] getAsByteArray(String);
+    method public Double getAsDouble(String);
+    method public Float getAsFloat(String);
+    method public Integer getAsInteger(String);
+    method public Long getAsLong(String);
+    method public Short getAsShort(String);
+    method public String getAsString(String);
+    method public boolean isEmpty();
+    method public java.util.Set<java.lang.String> keySet();
+    method public void put(String, String);
+    method public void put(String, Byte);
+    method public void put(String, Short);
+    method public void put(String, Integer);
+    method public void put(String, Long);
+    method public void put(String, Float);
+    method public void put(String, Double);
+    method public void put(String, Boolean);
+    method public void put(String, byte[]);
+    method public void putAll(android.content.ContentValues);
+    method public void putNull(String);
+    method public void remove(String);
+    method public int size();
+    method public java.util.Set<java.util.Map.Entry<java.lang.String,java.lang.Object>> valueSet();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentValues> CREATOR;
+    field public static final String TAG = "ContentValues";
+  }
+
+  public abstract class Context {
+    ctor public Context();
+    method public boolean bindIsolatedService(@NonNull @RequiresPermission android.content.Intent, int, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.content.ServiceConnection);
+    method public abstract boolean bindService(@RequiresPermission android.content.Intent, @NonNull android.content.ServiceConnection, int);
+    method public boolean bindService(@NonNull @RequiresPermission android.content.Intent, int, @NonNull java.util.concurrent.Executor, @NonNull android.content.ServiceConnection);
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.INTERACT_ACROSS_PROFILES}) public boolean bindServiceAsUser(@NonNull @RequiresPermission android.content.Intent, @NonNull android.content.ServiceConnection, int, @NonNull android.os.UserHandle);
+    method @CheckResult(suggest="#enforceCallingOrSelfPermission(String,String)") public abstract int checkCallingOrSelfPermission(@NonNull String);
+    method @CheckResult(suggest="#enforceCallingOrSelfUriPermission(Uri,int,String)") public abstract int checkCallingOrSelfUriPermission(android.net.Uri, int);
+    method @NonNull public int[] checkCallingOrSelfUriPermissions(@NonNull java.util.List<android.net.Uri>, int);
+    method @CheckResult(suggest="#enforceCallingPermission(String,String)") public abstract int checkCallingPermission(@NonNull String);
+    method @CheckResult(suggest="#enforceCallingUriPermission(Uri,int,String)") public abstract int checkCallingUriPermission(android.net.Uri, int);
+    method @NonNull public int[] checkCallingUriPermissions(@NonNull java.util.List<android.net.Uri>, int);
+    method @CheckResult(suggest="#enforcePermission(String,int,int,String)") public abstract int checkPermission(@NonNull String, int, int);
+    method public abstract int checkSelfPermission(@NonNull String);
+    method @CheckResult(suggest="#enforceUriPermission(Uri,int,int,String)") public abstract int checkUriPermission(android.net.Uri, int, int, int);
+    method @CheckResult(suggest="#enforceUriPermission(Uri,String,String,int,int,int,String)") public abstract int checkUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int);
+    method @NonNull public int[] checkUriPermissions(@NonNull java.util.List<android.net.Uri>, int, int, int);
+    method @Deprecated public abstract void clearWallpaper() throws java.io.IOException;
+    method @NonNull public android.content.Context createAttributionContext(@Nullable String);
+    method public abstract android.content.Context createConfigurationContext(@NonNull android.content.res.Configuration);
+    method @NonNull public android.content.Context createContext(@NonNull android.content.ContextParams);
+    method public abstract android.content.Context createContextForSplit(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.Context createDeviceProtectedStorageContext();
+    method @DisplayContext public abstract android.content.Context createDisplayContext(@NonNull android.view.Display);
+    method public abstract android.content.Context createPackageContext(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @UiContext public android.content.Context createWindowContext(int, @Nullable android.os.Bundle);
+    method @NonNull @UiContext public android.content.Context createWindowContext(@NonNull android.view.Display, int, @Nullable android.os.Bundle);
+    method public abstract String[] databaseList();
+    method public abstract boolean deleteDatabase(String);
+    method public abstract boolean deleteFile(String);
+    method public abstract boolean deleteSharedPreferences(String);
+    method public abstract void enforceCallingOrSelfPermission(@NonNull String, @Nullable String);
+    method public abstract void enforceCallingOrSelfUriPermission(android.net.Uri, int, String);
+    method public abstract void enforceCallingPermission(@NonNull String, @Nullable String);
+    method public abstract void enforceCallingUriPermission(android.net.Uri, int, String);
+    method public abstract void enforcePermission(@NonNull String, int, int, @Nullable String);
+    method public abstract void enforceUriPermission(android.net.Uri, int, int, int, String);
+    method public abstract void enforceUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int, @Nullable String);
+    method public abstract String[] fileList();
+    method public abstract android.content.Context getApplicationContext();
+    method public abstract android.content.pm.ApplicationInfo getApplicationInfo();
+    method public abstract android.content.res.AssetManager getAssets();
+    method @NonNull public android.content.AttributionSource getAttributionSource();
+    method @Nullable public String getAttributionTag();
+    method public abstract java.io.File getCacheDir();
+    method public abstract ClassLoader getClassLoader();
+    method public abstract java.io.File getCodeCacheDir();
+    method @ColorInt public final int getColor(@ColorRes int);
+    method @NonNull public final android.content.res.ColorStateList getColorStateList(@ColorRes int);
+    method public abstract android.content.ContentResolver getContentResolver();
+    method public abstract java.io.File getDataDir();
+    method public abstract java.io.File getDatabasePath(String);
+    method public abstract java.io.File getDir(String, int);
+    method @Nullable public android.view.Display getDisplay();
+    method @Nullable public final android.graphics.drawable.Drawable getDrawable(@DrawableRes int);
+    method @Nullable public abstract java.io.File getExternalCacheDir();
+    method public abstract java.io.File[] getExternalCacheDirs();
+    method @Nullable public abstract java.io.File getExternalFilesDir(@Nullable String);
+    method public abstract java.io.File[] getExternalFilesDirs(String);
+    method @Deprecated public abstract java.io.File[] getExternalMediaDirs();
+    method public abstract java.io.File getFileStreamPath(String);
+    method public abstract java.io.File getFilesDir();
+    method public java.util.concurrent.Executor getMainExecutor();
+    method public abstract android.os.Looper getMainLooper();
+    method public abstract java.io.File getNoBackupFilesDir();
+    method public abstract java.io.File getObbDir();
+    method public abstract java.io.File[] getObbDirs();
+    method @NonNull public String getOpPackageName();
+    method public abstract String getPackageCodePath();
+    method public abstract android.content.pm.PackageManager getPackageManager();
+    method public abstract String getPackageName();
+    method public abstract String getPackageResourcePath();
+    method @Nullable public android.content.ContextParams getParams();
+    method public abstract android.content.res.Resources getResources();
+    method public abstract android.content.SharedPreferences getSharedPreferences(String, int);
+    method @NonNull public final String getString(@StringRes int);
+    method @NonNull public final String getString(@StringRes int, java.lang.Object...);
+    method public abstract Object getSystemService(@NonNull String);
+    method public final <T> T getSystemService(@NonNull Class<T>);
+    method @Nullable public abstract String getSystemServiceName(@NonNull Class<?>);
+    method @NonNull public final CharSequence getText(@StringRes int);
+    method public abstract android.content.res.Resources.Theme getTheme();
+    method @Deprecated public abstract android.graphics.drawable.Drawable getWallpaper();
+    method @Deprecated public abstract int getWallpaperDesiredMinimumHeight();
+    method @Deprecated public abstract int getWallpaperDesiredMinimumWidth();
+    method public abstract void grantUriPermission(String, android.net.Uri, int);
+    method public abstract boolean isDeviceProtectedStorage();
+    method public boolean isRestricted();
+    method public boolean isUiContext();
+    method public abstract boolean moveDatabaseFrom(android.content.Context, String);
+    method public abstract boolean moveSharedPreferencesFrom(android.content.Context, String);
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@NonNull @StyleableRes int[]);
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@StyleRes int, @NonNull @StyleableRes int[]) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@Nullable android.util.AttributeSet, @NonNull @StyleableRes int[]);
+    method @NonNull public final android.content.res.TypedArray obtainStyledAttributes(@Nullable android.util.AttributeSet, @NonNull @StyleableRes int[], @AttrRes int, @StyleRes int);
+    method public abstract java.io.FileInputStream openFileInput(String) throws java.io.FileNotFoundException;
+    method public abstract java.io.FileOutputStream openFileOutput(String, int) throws java.io.FileNotFoundException;
+    method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, @Nullable android.database.DatabaseErrorHandler);
+    method @Deprecated public abstract android.graphics.drawable.Drawable peekWallpaper();
+    method public void registerComponentCallbacks(android.content.ComponentCallbacks);
+    method @Nullable public abstract android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter);
+    method @Nullable public abstract android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, int);
+    method @Nullable public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler);
+    method @Nullable public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public abstract void removeStickyBroadcast(@RequiresPermission android.content.Intent);
+    method @Deprecated @RequiresPermission(allOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.BROADCAST_STICKY}) public abstract void removeStickyBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle);
+    method public abstract void revokeUriPermission(android.net.Uri, int);
+    method public abstract void revokeUriPermission(String, android.net.Uri, int);
+    method public abstract void sendBroadcast(@RequiresPermission android.content.Intent);
+    method public abstract void sendBroadcast(@RequiresPermission android.content.Intent, @Nullable String);
+    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle);
+    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String);
+    method public void sendBroadcastWithMultiplePermissions(@NonNull android.content.Intent, @NonNull String[]);
+    method public abstract void sendOrderedBroadcast(@RequiresPermission android.content.Intent, @Nullable String);
+    method public abstract void sendOrderedBroadcast(@NonNull @RequiresPermission android.content.Intent, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission("android.permission.INTERACT_ACROSS_USERS") public abstract void sendOrderedBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String, android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public abstract void sendStickyBroadcast(@RequiresPermission android.content.Intent);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public void sendStickyBroadcast(@NonNull @RequiresPermission android.content.Intent, @Nullable android.os.Bundle);
+    method @Deprecated @RequiresPermission(allOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.BROADCAST_STICKY}) public abstract void sendStickyBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BROADCAST_STICKY) public abstract void sendStickyOrderedBroadcast(@RequiresPermission android.content.Intent, android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated @RequiresPermission(allOf={"android.permission.INTERACT_ACROSS_USERS", android.Manifest.permission.BROADCAST_STICKY}) public abstract void sendStickyOrderedBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public abstract void setTheme(@StyleRes int);
+    method @Deprecated public abstract void setWallpaper(android.graphics.Bitmap) throws java.io.IOException;
+    method @Deprecated public abstract void setWallpaper(java.io.InputStream) throws java.io.IOException;
+    method public abstract void startActivities(@RequiresPermission android.content.Intent[]);
+    method public abstract void startActivities(@RequiresPermission android.content.Intent[], android.os.Bundle);
+    method public abstract void startActivity(@RequiresPermission android.content.Intent);
+    method public abstract void startActivity(@RequiresPermission android.content.Intent, @Nullable android.os.Bundle);
+    method @Nullable public abstract android.content.ComponentName startForegroundService(android.content.Intent);
+    method public abstract boolean startInstrumentation(@NonNull android.content.ComponentName, @Nullable String, @Nullable android.os.Bundle);
+    method public abstract void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public abstract void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Nullable public abstract android.content.ComponentName startService(android.content.Intent);
+    method public abstract boolean stopService(android.content.Intent);
+    method public abstract void unbindService(@NonNull android.content.ServiceConnection);
+    method public void unregisterComponentCallbacks(android.content.ComponentCallbacks);
+    method public abstract void unregisterReceiver(android.content.BroadcastReceiver);
+    method public void updateServiceGroup(@NonNull android.content.ServiceConnection, int, int);
+    field public static final String ACCESSIBILITY_SERVICE = "accessibility";
+    field public static final String ACCOUNT_SERVICE = "account";
+    field public static final String ACTIVITY_SERVICE = "activity";
+    field public static final String ALARM_SERVICE = "alarm";
+    field public static final String APPWIDGET_SERVICE = "appwidget";
+    field public static final String APP_OPS_SERVICE = "appops";
+    field public static final String APP_SEARCH_SERVICE = "app_search";
+    field public static final String AUDIO_SERVICE = "audio";
+    field public static final String BATTERY_SERVICE = "batterymanager";
+    field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
+    field public static final int BIND_ADJUST_WITH_ACTIVITY = 128; // 0x80
+    field public static final int BIND_ALLOW_OOM_MANAGEMENT = 16; // 0x10
+    field public static final int BIND_AUTO_CREATE = 1; // 0x1
+    field public static final int BIND_DEBUG_UNBIND = 2; // 0x2
+    field public static final int BIND_EXTERNAL_SERVICE = -2147483648; // 0x80000000
+    field public static final int BIND_IMPORTANT = 64; // 0x40
+    field public static final int BIND_INCLUDE_CAPABILITIES = 4096; // 0x1000
+    field public static final int BIND_NOT_FOREGROUND = 4; // 0x4
+    field public static final int BIND_NOT_PERCEPTIBLE = 256; // 0x100
+    field public static final int BIND_WAIVE_PRIORITY = 32; // 0x20
+    field public static final String BIOMETRIC_SERVICE = "biometric";
+    field public static final String BLOB_STORE_SERVICE = "blob_store";
+    field public static final String BLUETOOTH_SERVICE = "bluetooth";
+    field public static final String BUGREPORT_SERVICE = "bugreport";
+    field public static final String CAMERA_SERVICE = "camera";
+    field public static final String CAPTIONING_SERVICE = "captioning";
+    field public static final String CARRIER_CONFIG_SERVICE = "carrier_config";
+    field public static final String CLIPBOARD_SERVICE = "clipboard";
+    field public static final String COMPANION_DEVICE_SERVICE = "companiondevice";
+    field public static final String CONNECTIVITY_DIAGNOSTICS_SERVICE = "connectivity_diagnostics";
+    field public static final String CONNECTIVITY_SERVICE = "connectivity";
+    field public static final String CONSUMER_IR_SERVICE = "consumer_ir";
+    field public static final int CONTEXT_IGNORE_SECURITY = 2; // 0x2
+    field public static final int CONTEXT_INCLUDE_CODE = 1; // 0x1
+    field public static final int CONTEXT_RESTRICTED = 4; // 0x4
+    field public static final String CROSS_PROFILE_APPS_SERVICE = "crossprofileapps";
+    field public static final String DEVICE_POLICY_SERVICE = "device_policy";
+    field public static final String DISPLAY_HASH_SERVICE = "display_hash";
+    field public static final String DISPLAY_SERVICE = "display";
+    field public static final String DOMAIN_VERIFICATION_SERVICE = "domain_verification";
+    field public static final String DOWNLOAD_SERVICE = "download";
+    field public static final String DROPBOX_SERVICE = "dropbox";
+    field public static final String EUICC_SERVICE = "euicc";
+    field public static final String FILE_INTEGRITY_SERVICE = "file_integrity";
+    field public static final String FINGERPRINT_SERVICE = "fingerprint";
+    field public static final String GAME_SERVICE = "game";
+    field public static final String HARDWARE_PROPERTIES_SERVICE = "hardware_properties";
+    field public static final String INPUT_METHOD_SERVICE = "input_method";
+    field public static final String INPUT_SERVICE = "input";
+    field public static final String IPSEC_SERVICE = "ipsec";
+    field public static final String JOB_SCHEDULER_SERVICE = "jobscheduler";
+    field public static final String KEYGUARD_SERVICE = "keyguard";
+    field public static final String LAUNCHER_APPS_SERVICE = "launcherapps";
+    field @UiContext public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
+    field public static final String LOCATION_SERVICE = "location";
+    field public static final String MEDIA_COMMUNICATION_SERVICE = "media_communication";
+    field public static final String MEDIA_METRICS_SERVICE = "media_metrics";
+    field public static final String MEDIA_PROJECTION_SERVICE = "media_projection";
+    field public static final String MEDIA_ROUTER_SERVICE = "media_router";
+    field public static final String MEDIA_SESSION_SERVICE = "media_session";
+    field public static final String MIDI_SERVICE = "midi";
+    field public static final int MODE_APPEND = 32768; // 0x8000
+    field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8
+    field @Deprecated public static final int MODE_MULTI_PROCESS = 4; // 0x4
+    field public static final int MODE_NO_LOCALIZED_COLLATORS = 16; // 0x10
+    field public static final int MODE_PRIVATE = 0; // 0x0
+    field @Deprecated public static final int MODE_WORLD_READABLE = 1; // 0x1
+    field @Deprecated public static final int MODE_WORLD_WRITEABLE = 2; // 0x2
+    field public static final String NETWORK_STATS_SERVICE = "netstats";
+    field public static final String NFC_SERVICE = "nfc";
+    field public static final String NOTIFICATION_SERVICE = "notification";
+    field public static final String NSD_SERVICE = "servicediscovery";
+    field public static final String PEOPLE_SERVICE = "people";
+    field public static final String PERFORMANCE_HINT_SERVICE = "performance_hint";
+    field public static final String POWER_SERVICE = "power";
+    field public static final String PRINT_SERVICE = "print";
+    field public static final int RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; // 0x1
+    field public static final String RESTRICTIONS_SERVICE = "restrictions";
+    field public static final String ROLE_SERVICE = "role";
+    field public static final String SEARCH_SERVICE = "search";
+    field public static final String SENSOR_SERVICE = "sensor";
+    field public static final String SHORTCUT_SERVICE = "shortcut";
+    field public static final String STORAGE_SERVICE = "storage";
+    field public static final String STORAGE_STATS_SERVICE = "storagestats";
+    field public static final String SYSTEM_HEALTH_SERVICE = "systemhealth";
+    field public static final String TELECOM_SERVICE = "telecom";
+    field public static final String TELEPHONY_IMS_SERVICE = "telephony_ims";
+    field public static final String TELEPHONY_SERVICE = "phone";
+    field public static final String TELEPHONY_SUBSCRIPTION_SERVICE = "telephony_subscription_service";
+    field public static final String TEXT_CLASSIFICATION_SERVICE = "textclassification";
+    field public static final String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
+    field public static final String TV_INPUT_SERVICE = "tv_input";
+    field public static final String UI_MODE_SERVICE = "uimode";
+    field public static final String USAGE_STATS_SERVICE = "usagestats";
+    field public static final String USB_SERVICE = "usb";
+    field public static final String USER_SERVICE = "user";
+    field public static final String VIBRATOR_MANAGER_SERVICE = "vibrator_manager";
+    field @Deprecated public static final String VIBRATOR_SERVICE = "vibrator";
+    field public static final String VPN_MANAGEMENT_SERVICE = "vpn_management";
+    field @UiContext public static final String WALLPAPER_SERVICE = "wallpaper";
+    field public static final String WIFI_AWARE_SERVICE = "wifiaware";
+    field public static final String WIFI_P2P_SERVICE = "wifip2p";
+    field public static final String WIFI_RTT_RANGING_SERVICE = "wifirtt";
+    field public static final String WIFI_SERVICE = "wifi";
+    field @UiContext public static final String WINDOW_SERVICE = "window";
+  }
+
+  public final class ContextParams {
+    method @Nullable public String getAttributionTag();
+    method @Nullable public android.content.AttributionSource getNextAttributionSource();
+  }
+
+  public static final class ContextParams.Builder {
+    ctor public ContextParams.Builder();
+    ctor public ContextParams.Builder(@NonNull android.content.ContextParams);
+    method @NonNull public android.content.ContextParams build();
+    method @NonNull public android.content.ContextParams.Builder setAttributionTag(@Nullable String);
+    method @NonNull public android.content.ContextParams.Builder setNextAttributionSource(@Nullable android.content.AttributionSource);
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    ctor public ContextWrapper(android.content.Context);
+    method protected void attachBaseContext(android.content.Context);
+    method public boolean bindService(android.content.Intent, android.content.ServiceConnection, int);
+    method public int checkCallingOrSelfPermission(String);
+    method public int checkCallingOrSelfUriPermission(android.net.Uri, int);
+    method public int checkCallingPermission(String);
+    method public int checkCallingUriPermission(android.net.Uri, int);
+    method public int checkPermission(String, int, int);
+    method public int checkSelfPermission(String);
+    method public int checkUriPermission(android.net.Uri, int, int, int);
+    method public int checkUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int);
+    method @Deprecated public void clearWallpaper() throws java.io.IOException;
+    method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+    method public android.content.Context createContextForSplit(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.Context createDeviceProtectedStorageContext();
+    method public android.content.Context createDisplayContext(android.view.Display);
+    method public android.content.Context createPackageContext(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public String[] databaseList();
+    method public boolean deleteDatabase(String);
+    method public boolean deleteFile(String);
+    method public boolean deleteSharedPreferences(String);
+    method public void enforceCallingOrSelfPermission(String, @Nullable String);
+    method public void enforceCallingOrSelfUriPermission(android.net.Uri, int, String);
+    method public void enforceCallingPermission(String, @Nullable String);
+    method public void enforceCallingUriPermission(android.net.Uri, int, String);
+    method public void enforcePermission(String, int, int, @Nullable String);
+    method public void enforceUriPermission(android.net.Uri, int, int, int, String);
+    method public void enforceUriPermission(@Nullable android.net.Uri, @Nullable String, @Nullable String, int, int, int, @Nullable String);
+    method public String[] fileList();
+    method public android.content.Context getApplicationContext();
+    method public android.content.pm.ApplicationInfo getApplicationInfo();
+    method public android.content.res.AssetManager getAssets();
+    method public android.content.Context getBaseContext();
+    method public java.io.File getCacheDir();
+    method public ClassLoader getClassLoader();
+    method public java.io.File getCodeCacheDir();
+    method public android.content.ContentResolver getContentResolver();
+    method public java.io.File getDataDir();
+    method public java.io.File getDatabasePath(String);
+    method public java.io.File getDir(String, int);
+    method @Nullable public java.io.File getExternalCacheDir();
+    method public java.io.File[] getExternalCacheDirs();
+    method @Nullable public java.io.File getExternalFilesDir(@Nullable String);
+    method public java.io.File[] getExternalFilesDirs(String);
+    method public java.io.File[] getExternalMediaDirs();
+    method public java.io.File getFileStreamPath(String);
+    method public java.io.File getFilesDir();
+    method public android.os.Looper getMainLooper();
+    method public java.io.File getNoBackupFilesDir();
+    method public java.io.File getObbDir();
+    method public java.io.File[] getObbDirs();
+    method public String getPackageCodePath();
+    method public android.content.pm.PackageManager getPackageManager();
+    method public String getPackageName();
+    method public String getPackageResourcePath();
+    method public android.content.res.Resources getResources();
+    method public android.content.SharedPreferences getSharedPreferences(String, int);
+    method public Object getSystemService(String);
+    method public String getSystemServiceName(Class<?>);
+    method public android.content.res.Resources.Theme getTheme();
+    method @Deprecated public android.graphics.drawable.Drawable getWallpaper();
+    method @Deprecated public int getWallpaperDesiredMinimumHeight();
+    method @Deprecated public int getWallpaperDesiredMinimumWidth();
+    method public void grantUriPermission(String, android.net.Uri, int);
+    method public boolean isDeviceProtectedStorage();
+    method public boolean moveDatabaseFrom(android.content.Context, String);
+    method public boolean moveSharedPreferencesFrom(android.content.Context, String);
+    method public java.io.FileInputStream openFileInput(String) throws java.io.FileNotFoundException;
+    method public java.io.FileOutputStream openFileOutput(String, int) throws java.io.FileNotFoundException;
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(String, int, android.database.sqlite.SQLiteDatabase.CursorFactory, @Nullable android.database.DatabaseErrorHandler);
+    method @Deprecated public android.graphics.drawable.Drawable peekWallpaper();
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter);
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, int);
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler);
+    method public android.content.Intent registerReceiver(@Nullable android.content.BroadcastReceiver, android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler, int);
+    method @Deprecated public void removeStickyBroadcast(android.content.Intent);
+    method @Deprecated public void removeStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void revokeUriPermission(android.net.Uri, int);
+    method public void revokeUriPermission(String, android.net.Uri, int);
+    method public void sendBroadcast(android.content.Intent);
+    method public void sendBroadcast(android.content.Intent, @Nullable String);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, String);
+    method public void sendOrderedBroadcast(android.content.Intent, @Nullable String);
+    method public void sendOrderedBroadcast(android.content.Intent, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcast(@NonNull @RequiresPermission android.content.Intent, int, @Nullable String, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, @Nullable String, @Nullable android.os.Bundle, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated public void sendStickyBroadcast(android.content.Intent);
+    method @Deprecated public void sendStickyBroadcastAsUser(android.content.Intent, android.os.UserHandle);
+    method @Deprecated public void sendStickyOrderedBroadcast(android.content.Intent, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated public void sendStickyOrderedBroadcastAsUser(android.content.Intent, android.os.UserHandle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method public void setTheme(int);
+    method @Deprecated public void setWallpaper(android.graphics.Bitmap) throws java.io.IOException;
+    method @Deprecated public void setWallpaper(java.io.InputStream) throws java.io.IOException;
+    method public void startActivities(android.content.Intent[]);
+    method public void startActivities(android.content.Intent[], @Nullable android.os.Bundle);
+    method public void startActivity(android.content.Intent);
+    method public void startActivity(android.content.Intent, @Nullable android.os.Bundle);
+    method @Nullable public android.content.ComponentName startForegroundService(android.content.Intent);
+    method public boolean startInstrumentation(android.content.ComponentName, @Nullable String, @Nullable android.os.Bundle);
+    method public void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int) throws android.content.IntentSender.SendIntentException;
+    method public void startIntentSender(android.content.IntentSender, @Nullable android.content.Intent, int, int, int, @Nullable android.os.Bundle) throws android.content.IntentSender.SendIntentException;
+    method @Nullable public android.content.ComponentName startService(android.content.Intent);
+    method public boolean stopService(android.content.Intent);
+    method public void unbindService(android.content.ServiceConnection);
+    method public void unregisterReceiver(android.content.BroadcastReceiver);
+  }
+
+  @Deprecated public class CursorLoader extends android.content.AsyncTaskLoader<android.database.Cursor> {
+    ctor @Deprecated public CursorLoader(android.content.Context);
+    ctor @Deprecated public CursorLoader(android.content.Context, android.net.Uri, String[], String, String[], String);
+    method @Deprecated public void deliverResult(android.database.Cursor);
+    method @Deprecated public String[] getProjection();
+    method @Deprecated public String getSelection();
+    method @Deprecated public String[] getSelectionArgs();
+    method @Deprecated public String getSortOrder();
+    method @Deprecated public android.net.Uri getUri();
+    method @Deprecated public android.database.Cursor loadInBackground();
+    method @Deprecated public void onCanceled(android.database.Cursor);
+    method @Deprecated public void setProjection(String[]);
+    method @Deprecated public void setSelection(String);
+    method @Deprecated public void setSelectionArgs(String[]);
+    method @Deprecated public void setSortOrder(String);
+    method @Deprecated public void setUri(android.net.Uri);
+  }
+
+  public interface DialogInterface {
+    method public void cancel();
+    method public void dismiss();
+    field @Deprecated public static final int BUTTON1 = -1; // 0xffffffff
+    field @Deprecated public static final int BUTTON2 = -2; // 0xfffffffe
+    field @Deprecated public static final int BUTTON3 = -3; // 0xfffffffd
+    field public static final int BUTTON_NEGATIVE = -2; // 0xfffffffe
+    field public static final int BUTTON_NEUTRAL = -3; // 0xfffffffd
+    field public static final int BUTTON_POSITIVE = -1; // 0xffffffff
+  }
+
+  public static interface DialogInterface.OnCancelListener {
+    method public void onCancel(android.content.DialogInterface);
+  }
+
+  public static interface DialogInterface.OnClickListener {
+    method public void onClick(android.content.DialogInterface, int);
+  }
+
+  public static interface DialogInterface.OnDismissListener {
+    method public void onDismiss(android.content.DialogInterface);
+  }
+
+  public static interface DialogInterface.OnKeyListener {
+    method public boolean onKey(android.content.DialogInterface, int, android.view.KeyEvent);
+  }
+
+  public static interface DialogInterface.OnMultiChoiceClickListener {
+    method public void onClick(android.content.DialogInterface, int, boolean);
+  }
+
+  public static interface DialogInterface.OnShowListener {
+    method public void onShow(android.content.DialogInterface);
+  }
+
+  public final class Entity {
+    ctor public Entity(android.content.ContentValues);
+    method public void addSubValue(android.net.Uri, android.content.ContentValues);
+    method public android.content.ContentValues getEntityValues();
+    method public java.util.ArrayList<android.content.Entity.NamedContentValues> getSubValues();
+  }
+
+  public static class Entity.NamedContentValues {
+    ctor public Entity.NamedContentValues(android.net.Uri, android.content.ContentValues);
+    field public final android.net.Uri uri;
+    field public final android.content.ContentValues values;
+  }
+
+  public interface EntityIterator extends java.util.Iterator<android.content.Entity> {
+    method public void close();
+    method public void reset();
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    ctor public Intent();
+    ctor public Intent(android.content.Intent);
+    ctor public Intent(String);
+    ctor public Intent(String, android.net.Uri);
+    ctor public Intent(android.content.Context, Class<?>);
+    ctor public Intent(String, android.net.Uri, android.content.Context, Class<?>);
+    method @NonNull public android.content.Intent addCategory(String);
+    method @NonNull public android.content.Intent addFlags(int);
+    method public Object clone();
+    method @NonNull public android.content.Intent cloneFilter();
+    method public static android.content.Intent createChooser(android.content.Intent, CharSequence);
+    method public static android.content.Intent createChooser(android.content.Intent, CharSequence, android.content.IntentSender);
+    method public int describeContents();
+    method public int fillIn(@NonNull android.content.Intent, int);
+    method public boolean filterEquals(android.content.Intent);
+    method public int filterHashCode();
+    method @Nullable public String getAction();
+    method @Nullable public boolean[] getBooleanArrayExtra(String);
+    method public boolean getBooleanExtra(String, boolean);
+    method @Nullable public android.os.Bundle getBundleExtra(String);
+    method @Nullable public byte[] getByteArrayExtra(String);
+    method public byte getByteExtra(String, byte);
+    method public java.util.Set<java.lang.String> getCategories();
+    method @Nullable public char[] getCharArrayExtra(String);
+    method public char getCharExtra(String, char);
+    method @Nullable public CharSequence[] getCharSequenceArrayExtra(String);
+    method @Nullable public java.util.ArrayList<java.lang.CharSequence> getCharSequenceArrayListExtra(String);
+    method @Nullable public CharSequence getCharSequenceExtra(String);
+    method @Nullable public android.content.ClipData getClipData();
+    method @Nullable public android.content.ComponentName getComponent();
+    method @Nullable public android.net.Uri getData();
+    method @Nullable public String getDataString();
+    method @Nullable public double[] getDoubleArrayExtra(String);
+    method public double getDoubleExtra(String, double);
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getFlags();
+    method @Nullable public float[] getFloatArrayExtra(String);
+    method public float getFloatExtra(String, float);
+    method @Nullable public String getIdentifier();
+    method @Nullable public int[] getIntArrayExtra(String);
+    method public int getIntExtra(String, int);
+    method @Nullable public java.util.ArrayList<java.lang.Integer> getIntegerArrayListExtra(String);
+    method @Deprecated public static android.content.Intent getIntent(String) throws java.net.URISyntaxException;
+    method public static android.content.Intent getIntentOld(String) throws java.net.URISyntaxException;
+    method @Nullable public long[] getLongArrayExtra(String);
+    method public long getLongExtra(String, long);
+    method @Nullable public String getPackage();
+    method @Nullable public android.os.Parcelable[] getParcelableArrayExtra(String);
+    method @Nullable public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayListExtra(String);
+    method @Nullable public <T extends android.os.Parcelable> T getParcelableExtra(String);
+    method @Nullable public String getScheme();
+    method @Nullable public android.content.Intent getSelector();
+    method @Nullable public java.io.Serializable getSerializableExtra(String);
+    method @Nullable public short[] getShortArrayExtra(String);
+    method public short getShortExtra(String, short);
+    method @Nullable public android.graphics.Rect getSourceBounds();
+    method @Nullable public String[] getStringArrayExtra(String);
+    method @Nullable public java.util.ArrayList<java.lang.String> getStringArrayListExtra(String);
+    method @Nullable public String getStringExtra(String);
+    method @Nullable public String getType();
+    method public boolean hasCategory(String);
+    method public boolean hasExtra(String);
+    method public boolean hasFileDescriptors();
+    method public static android.content.Intent makeMainActivity(android.content.ComponentName);
+    method public static android.content.Intent makeMainSelectorActivity(String, String);
+    method public static android.content.Intent makeRestartActivityTask(android.content.ComponentName);
+    method @Nullable public static String normalizeMimeType(@Nullable String);
+    method @NonNull public static android.content.Intent parseIntent(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static android.content.Intent parseUri(String, int) throws java.net.URISyntaxException;
+    method @NonNull public android.content.Intent putCharSequenceArrayListExtra(String, @Nullable java.util.ArrayList<java.lang.CharSequence>);
+    method @NonNull public android.content.Intent putExtra(String, boolean);
+    method @NonNull public android.content.Intent putExtra(String, byte);
+    method @NonNull public android.content.Intent putExtra(String, char);
+    method @NonNull public android.content.Intent putExtra(String, short);
+    method @NonNull public android.content.Intent putExtra(String, int);
+    method @NonNull public android.content.Intent putExtra(String, long);
+    method @NonNull public android.content.Intent putExtra(String, float);
+    method @NonNull public android.content.Intent putExtra(String, double);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable String);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable CharSequence);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable android.os.Parcelable);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable android.os.Parcelable[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable java.io.Serializable);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable boolean[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable byte[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable short[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable char[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable int[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable long[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable float[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable double[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable String[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable CharSequence[]);
+    method @NonNull public android.content.Intent putExtra(String, @Nullable android.os.Bundle);
+    method @NonNull public android.content.Intent putExtras(@NonNull android.content.Intent);
+    method @NonNull public android.content.Intent putExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.content.Intent putIntegerArrayListExtra(String, @Nullable java.util.ArrayList<java.lang.Integer>);
+    method @NonNull public android.content.Intent putParcelableArrayListExtra(String, @Nullable java.util.ArrayList<? extends android.os.Parcelable>);
+    method @NonNull public android.content.Intent putStringArrayListExtra(String, @Nullable java.util.ArrayList<java.lang.String>);
+    method public void readFromParcel(android.os.Parcel);
+    method public void removeCategory(String);
+    method public void removeExtra(String);
+    method public void removeFlags(int);
+    method @NonNull public android.content.Intent replaceExtras(@NonNull android.content.Intent);
+    method @NonNull public android.content.Intent replaceExtras(@Nullable android.os.Bundle);
+    method public android.content.ComponentName resolveActivity(@NonNull android.content.pm.PackageManager);
+    method public android.content.pm.ActivityInfo resolveActivityInfo(@NonNull android.content.pm.PackageManager, int);
+    method @Nullable public String resolveType(@NonNull android.content.Context);
+    method @Nullable public String resolveType(@NonNull android.content.ContentResolver);
+    method @Nullable public String resolveTypeIfNeeded(@NonNull android.content.ContentResolver);
+    method @NonNull public android.content.Intent setAction(@Nullable String);
+    method @NonNull public android.content.Intent setClass(@NonNull android.content.Context, @NonNull Class<?>);
+    method @NonNull public android.content.Intent setClassName(@NonNull android.content.Context, @NonNull String);
+    method @NonNull public android.content.Intent setClassName(@NonNull String, @NonNull String);
+    method public void setClipData(@Nullable android.content.ClipData);
+    method @NonNull public android.content.Intent setComponent(@Nullable android.content.ComponentName);
+    method @NonNull public android.content.Intent setData(@Nullable android.net.Uri);
+    method @NonNull public android.content.Intent setDataAndNormalize(@NonNull android.net.Uri);
+    method @NonNull public android.content.Intent setDataAndType(@Nullable android.net.Uri, @Nullable String);
+    method @NonNull public android.content.Intent setDataAndTypeAndNormalize(@NonNull android.net.Uri, @Nullable String);
+    method public void setExtrasClassLoader(@Nullable ClassLoader);
+    method @NonNull public android.content.Intent setFlags(int);
+    method @NonNull public android.content.Intent setIdentifier(@Nullable String);
+    method @NonNull public android.content.Intent setPackage(@Nullable String);
+    method public void setSelector(@Nullable android.content.Intent);
+    method public void setSourceBounds(@Nullable android.graphics.Rect);
+    method @NonNull public android.content.Intent setType(@Nullable String);
+    method @NonNull public android.content.Intent setTypeAndNormalize(@Nullable String);
+    method @Deprecated public String toURI();
+    method public String toUri(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE";
+    field public static final String ACTION_ALL_APPS = "android.intent.action.ALL_APPS";
+    field public static final String ACTION_ANSWER = "android.intent.action.ANSWER";
+    field public static final String ACTION_APPLICATION_PREFERENCES = "android.intent.action.APPLICATION_PREFERENCES";
+    field public static final String ACTION_APPLICATION_RESTRICTIONS_CHANGED = "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED";
+    field public static final String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
+    field public static final String ACTION_ASSIST = "android.intent.action.ASSIST";
+    field public static final String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
+    field public static final String ACTION_AUTO_REVOKE_PERMISSIONS = "android.intent.action.AUTO_REVOKE_PERMISSIONS";
+    field public static final String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
+    field public static final String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
+    field public static final String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
+    field public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
+    field public static final String ACTION_BUG_REPORT = "android.intent.action.BUG_REPORT";
+    field public static final String ACTION_CALL = "android.intent.action.CALL";
+    field public static final String ACTION_CALL_BUTTON = "android.intent.action.CALL_BUTTON";
+    field public static final String ACTION_CAMERA_BUTTON = "android.intent.action.CAMERA_BUTTON";
+    field public static final String ACTION_CARRIER_SETUP = "android.intent.action.CARRIER_SETUP";
+    field public static final String ACTION_CHOOSER = "android.intent.action.CHOOSER";
+    field @Deprecated @RequiresPermission("android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS") public static final String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";
+    field public static final String ACTION_CONFIGURATION_CHANGED = "android.intent.action.CONFIGURATION_CHANGED";
+    field public static final String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT";
+    field public static final String ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER";
+    field public static final String ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT";
+    field public static final String ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED";
+    field public static final String ACTION_DEFAULT = "android.intent.action.VIEW";
+    field public static final String ACTION_DEFINE = "android.intent.action.DEFINE";
+    field public static final String ACTION_DELETE = "android.intent.action.DELETE";
+    field @Deprecated public static final String ACTION_DEVICE_STORAGE_LOW = "android.intent.action.DEVICE_STORAGE_LOW";
+    field @Deprecated public static final String ACTION_DEVICE_STORAGE_OK = "android.intent.action.DEVICE_STORAGE_OK";
+    field public static final String ACTION_DIAL = "android.intent.action.DIAL";
+    field public static final String ACTION_DOCK_EVENT = "android.intent.action.DOCK_EVENT";
+    field public static final String ACTION_DREAMING_STARTED = "android.intent.action.DREAMING_STARTED";
+    field public static final String ACTION_DREAMING_STOPPED = "android.intent.action.DREAMING_STOPPED";
+    field public static final String ACTION_EDIT = "android.intent.action.EDIT";
+    field public static final String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE";
+    field public static final String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE";
+    field public static final String ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST";
+    field public static final String ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT";
+    field public static final String ACTION_GET_RESTRICTION_ENTRIES = "android.intent.action.GET_RESTRICTION_ENTRIES";
+    field public static final String ACTION_GTALK_SERVICE_CONNECTED = "android.intent.action.GTALK_CONNECTED";
+    field public static final String ACTION_GTALK_SERVICE_DISCONNECTED = "android.intent.action.GTALK_DISCONNECTED";
+    field public static final String ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG";
+    field public static final String ACTION_INPUT_METHOD_CHANGED = "android.intent.action.INPUT_METHOD_CHANGED";
+    field public static final String ACTION_INSERT = "android.intent.action.INSERT";
+    field public static final String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
+    field public static final String ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE";
+    field @Deprecated public static final String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
+    field public static final String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
+    field public static final String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
+    field public static final String ACTION_MAIN = "android.intent.action.MAIN";
+    field public static final String ACTION_MANAGED_PROFILE_ADDED = "android.intent.action.MANAGED_PROFILE_ADDED";
+    field public static final String ACTION_MANAGED_PROFILE_AVAILABLE = "android.intent.action.MANAGED_PROFILE_AVAILABLE";
+    field public static final String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED";
+    field public static final String ACTION_MANAGED_PROFILE_UNAVAILABLE = "android.intent.action.MANAGED_PROFILE_UNAVAILABLE";
+    field public static final String ACTION_MANAGED_PROFILE_UNLOCKED = "android.intent.action.MANAGED_PROFILE_UNLOCKED";
+    field public static final String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE";
+    field public static final String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
+    field public static final String ACTION_MANAGE_UNUSED_APPS = "android.intent.action.MANAGE_UNUSED_APPS";
+    field public static final String ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
+    field public static final String ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON";
+    field public static final String ACTION_MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING";
+    field public static final String ACTION_MEDIA_EJECT = "android.intent.action.MEDIA_EJECT";
+    field public static final String ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED";
+    field public static final String ACTION_MEDIA_NOFS = "android.intent.action.MEDIA_NOFS";
+    field public static final String ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED";
+    field public static final String ACTION_MEDIA_SCANNER_FINISHED = "android.intent.action.MEDIA_SCANNER_FINISHED";
+    field @Deprecated public static final String ACTION_MEDIA_SCANNER_SCAN_FILE = "android.intent.action.MEDIA_SCANNER_SCAN_FILE";
+    field public static final String ACTION_MEDIA_SCANNER_STARTED = "android.intent.action.MEDIA_SCANNER_STARTED";
+    field public static final String ACTION_MEDIA_SHARED = "android.intent.action.MEDIA_SHARED";
+    field public static final String ACTION_MEDIA_UNMOUNTABLE = "android.intent.action.MEDIA_UNMOUNTABLE";
+    field public static final String ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED";
+    field public static final String ACTION_MY_PACKAGE_REPLACED = "android.intent.action.MY_PACKAGE_REPLACED";
+    field public static final String ACTION_MY_PACKAGE_SUSPENDED = "android.intent.action.MY_PACKAGE_SUSPENDED";
+    field public static final String ACTION_MY_PACKAGE_UNSUSPENDED = "android.intent.action.MY_PACKAGE_UNSUSPENDED";
+    field @Deprecated public static final String ACTION_NEW_OUTGOING_CALL = "android.intent.action.NEW_OUTGOING_CALL";
+    field public static final String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
+    field public static final String ACTION_OPEN_DOCUMENT_TREE = "android.intent.action.OPEN_DOCUMENT_TREE";
+    field public static final String ACTION_PACKAGES_SUSPENDED = "android.intent.action.PACKAGES_SUSPENDED";
+    field public static final String ACTION_PACKAGES_UNSUSPENDED = "android.intent.action.PACKAGES_UNSUSPENDED";
+    field public static final String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
+    field public static final String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
+    field public static final String ACTION_PACKAGE_DATA_CLEARED = "android.intent.action.PACKAGE_DATA_CLEARED";
+    field public static final String ACTION_PACKAGE_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
+    field public static final String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED";
+    field @Deprecated public static final String ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL";
+    field public static final String ACTION_PACKAGE_NEEDS_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_VERIFICATION";
+    field public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
+    field public static final String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";
+    field public static final String ACTION_PACKAGE_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
+    field public static final String ACTION_PACKAGE_VERIFIED = "android.intent.action.PACKAGE_VERIFIED";
+    field public static final String ACTION_PASTE = "android.intent.action.PASTE";
+    field public static final String ACTION_PICK = "android.intent.action.PICK";
+    field public static final String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY";
+    field public static final String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED";
+    field public static final String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED";
+    field public static final String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY";
+    field public static final String ACTION_PROCESS_TEXT = "android.intent.action.PROCESS_TEXT";
+    field public static final String ACTION_PROFILE_ACCESSIBLE = "android.intent.action.PROFILE_ACCESSIBLE";
+    field public static final String ACTION_PROFILE_INACCESSIBLE = "android.intent.action.PROFILE_INACCESSIBLE";
+    field public static final String ACTION_PROVIDER_CHANGED = "android.intent.action.PROVIDER_CHANGED";
+    field public static final String ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK";
+    field public static final String ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW";
+    field public static final String ACTION_REBOOT = "android.intent.action.REBOOT";
+    field public static final String ACTION_RUN = "android.intent.action.RUN";
+    field public static final String ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
+    field public static final String ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON";
+    field public static final String ACTION_SEARCH = "android.intent.action.SEARCH";
+    field public static final String ACTION_SEARCH_LONG_PRESS = "android.intent.action.SEARCH_LONG_PRESS";
+    field public static final String ACTION_SEND = "android.intent.action.SEND";
+    field public static final String ACTION_SENDTO = "android.intent.action.SENDTO";
+    field public static final String ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE";
+    field public static final String ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER";
+    field public static final String ACTION_SHOW_APP_INFO = "android.intent.action.SHOW_APP_INFO";
+    field public static final String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN";
+    field public static final String ACTION_SYNC = "android.intent.action.SYNC";
+    field public static final String ACTION_SYSTEM_TUTORIAL = "android.intent.action.SYSTEM_TUTORIAL";
+    field public static final String ACTION_TIMEZONE_CHANGED = "android.intent.action.TIMEZONE_CHANGED";
+    field public static final String ACTION_TIME_CHANGED = "android.intent.action.TIME_SET";
+    field public static final String ACTION_TIME_TICK = "android.intent.action.TIME_TICK";
+    field public static final String ACTION_TRANSLATE = "android.intent.action.TRANSLATE";
+    field public static final String ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED";
+    field @Deprecated public static final String ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED";
+    field @Deprecated public static final String ACTION_UMS_DISCONNECTED = "android.intent.action.UMS_DISCONNECTED";
+    field @Deprecated public static final String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE";
+    field public static final String ACTION_USER_BACKGROUND = "android.intent.action.USER_BACKGROUND";
+    field public static final String ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND";
+    field public static final String ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE";
+    field public static final String ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT";
+    field public static final String ACTION_USER_UNLOCKED = "android.intent.action.USER_UNLOCKED";
+    field public static final String ACTION_VIEW = "android.intent.action.VIEW";
+    field public static final String ACTION_VIEW_LOCUS = "android.intent.action.VIEW_LOCUS";
+    field @RequiresPermission(android.Manifest.permission.START_VIEW_PERMISSION_USAGE) public static final String ACTION_VIEW_PERMISSION_USAGE = "android.intent.action.VIEW_PERMISSION_USAGE";
+    field @RequiresPermission(android.Manifest.permission.START_VIEW_PERMISSION_USAGE) public static final String ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD = "android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD";
+    field public static final String ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND";
+    field @Deprecated public static final String ACTION_WALLPAPER_CHANGED = "android.intent.action.WALLPAPER_CHANGED";
+    field public static final String ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH";
+    field public static final String CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET = "android.intent.category.ACCESSIBILITY_SHORTCUT_TARGET";
+    field public static final String CATEGORY_ALTERNATIVE = "android.intent.category.ALTERNATIVE";
+    field public static final String CATEGORY_APP_BROWSER = "android.intent.category.APP_BROWSER";
+    field public static final String CATEGORY_APP_CALCULATOR = "android.intent.category.APP_CALCULATOR";
+    field public static final String CATEGORY_APP_CALENDAR = "android.intent.category.APP_CALENDAR";
+    field public static final String CATEGORY_APP_CONTACTS = "android.intent.category.APP_CONTACTS";
+    field public static final String CATEGORY_APP_EMAIL = "android.intent.category.APP_EMAIL";
+    field public static final String CATEGORY_APP_FILES = "android.intent.category.APP_FILES";
+    field public static final String CATEGORY_APP_GALLERY = "android.intent.category.APP_GALLERY";
+    field public static final String CATEGORY_APP_MAPS = "android.intent.category.APP_MAPS";
+    field public static final String CATEGORY_APP_MARKET = "android.intent.category.APP_MARKET";
+    field public static final String CATEGORY_APP_MESSAGING = "android.intent.category.APP_MESSAGING";
+    field public static final String CATEGORY_APP_MUSIC = "android.intent.category.APP_MUSIC";
+    field public static final String CATEGORY_BROWSABLE = "android.intent.category.BROWSABLE";
+    field public static final String CATEGORY_CAR_DOCK = "android.intent.category.CAR_DOCK";
+    field public static final String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE";
+    field public static final String CATEGORY_DEFAULT = "android.intent.category.DEFAULT";
+    field public static final String CATEGORY_DESK_DOCK = "android.intent.category.DESK_DOCK";
+    field public static final String CATEGORY_DEVELOPMENT_PREFERENCE = "android.intent.category.DEVELOPMENT_PREFERENCE";
+    field public static final String CATEGORY_EMBED = "android.intent.category.EMBED";
+    field public static final String CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST = "android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST";
+    field public static final String CATEGORY_HE_DESK_DOCK = "android.intent.category.HE_DESK_DOCK";
+    field public static final String CATEGORY_HOME = "android.intent.category.HOME";
+    field public static final String CATEGORY_INFO = "android.intent.category.INFO";
+    field public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";
+    field public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
+    field public static final String CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK";
+    field public static final String CATEGORY_MONKEY = "android.intent.category.MONKEY";
+    field public static final String CATEGORY_OPENABLE = "android.intent.category.OPENABLE";
+    field public static final String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE";
+    field public static final String CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE";
+    field public static final String CATEGORY_SECONDARY_HOME = "android.intent.category.SECONDARY_HOME";
+    field public static final String CATEGORY_SELECTED_ALTERNATIVE = "android.intent.category.SELECTED_ALTERNATIVE";
+    field public static final String CATEGORY_TAB = "android.intent.category.TAB";
+    field public static final String CATEGORY_TEST = "android.intent.category.TEST";
+    field public static final String CATEGORY_TYPED_OPENABLE = "android.intent.category.TYPED_OPENABLE";
+    field public static final String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST";
+    field public static final String CATEGORY_VOICE = "android.intent.category.VOICE";
+    field public static final String CATEGORY_VR_HOME = "android.intent.category.VR_HOME";
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.Intent> CREATOR;
+    field public static final String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
+    field public static final String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE";
+    field @Deprecated public static final String EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE";
+    field public static final String EXTRA_ALTERNATE_INTENTS = "android.intent.extra.ALTERNATE_INTENTS";
+    field public static final String EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT";
+    field public static final String EXTRA_ASSIST_INPUT_DEVICE_ID = "android.intent.extra.ASSIST_INPUT_DEVICE_ID";
+    field public static final String EXTRA_ASSIST_INPUT_HINT_KEYBOARD = "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD";
+    field public static final String EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE";
+    field public static final String EXTRA_ASSIST_UID = "android.intent.extra.ASSIST_UID";
+    field public static final String EXTRA_ATTRIBUTION_TAGS = "android.intent.extra.ATTRIBUTION_TAGS";
+    field public static final String EXTRA_AUTO_LAUNCH_SINGLE_CHOICE = "android.intent.extra.AUTO_LAUNCH_SINGLE_CHOICE";
+    field public static final String EXTRA_BCC = "android.intent.extra.BCC";
+    field public static final String EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT";
+    field public static final String EXTRA_CC = "android.intent.extra.CC";
+    field @Deprecated public static final String EXTRA_CHANGED_COMPONENT_NAME = "android.intent.extra.changed_component_name";
+    field public static final String EXTRA_CHANGED_COMPONENT_NAME_LIST = "android.intent.extra.changed_component_name_list";
+    field public static final String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
+    field public static final String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
+    field public static final String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER = "android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER";
+    field public static final String EXTRA_CHOOSER_TARGETS = "android.intent.extra.CHOOSER_TARGETS";
+    field public static final String EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT";
+    field public static final String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER";
+    field public static final String EXTRA_COMPONENT_NAME = "android.intent.extra.COMPONENT_NAME";
+    field public static final String EXTRA_CONTENT_ANNOTATIONS = "android.intent.extra.CONTENT_ANNOTATIONS";
+    field public static final String EXTRA_CONTENT_QUERY = "android.intent.extra.CONTENT_QUERY";
+    field public static final String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED";
+    field public static final String EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE";
+    field public static final int EXTRA_DOCK_STATE_CAR = 2; // 0x2
+    field public static final int EXTRA_DOCK_STATE_DESK = 1; // 0x1
+    field public static final int EXTRA_DOCK_STATE_HE_DESK = 4; // 0x4
+    field public static final int EXTRA_DOCK_STATE_LE_DESK = 3; // 0x3
+    field public static final int EXTRA_DOCK_STATE_UNDOCKED = 0; // 0x0
+    field public static final String EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP";
+    field public static final String EXTRA_DURATION_MILLIS = "android.intent.extra.DURATION_MILLIS";
+    field public static final String EXTRA_EMAIL = "android.intent.extra.EMAIL";
+    field public static final String EXTRA_END_TIME = "android.intent.extra.END_TIME";
+    field public static final String EXTRA_EXCLUDE_COMPONENTS = "android.intent.extra.EXCLUDE_COMPONENTS";
+    field public static final String EXTRA_FROM_STORAGE = "android.intent.extra.FROM_STORAGE";
+    field public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT";
+    field public static final String EXTRA_INDEX = "android.intent.extra.INDEX";
+    field public static final String EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS";
+    field public static final String EXTRA_INSTALLER_PACKAGE_NAME = "android.intent.extra.INSTALLER_PACKAGE_NAME";
+    field public static final String EXTRA_INTENT = "android.intent.extra.INTENT";
+    field public static final String EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT";
+    field public static final String EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY";
+    field public static final String EXTRA_LOCUS_ID = "android.intent.extra.LOCUS_ID";
+    field public static final String EXTRA_MIME_TYPES = "android.intent.extra.MIME_TYPES";
+    field public static final String EXTRA_NOT_UNKNOWN_SOURCE = "android.intent.extra.NOT_UNKNOWN_SOURCE";
+    field public static final String EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI";
+    field public static final String EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME";
+    field public static final String EXTRA_PERMISSION_GROUP_NAME = "android.intent.extra.PERMISSION_GROUP_NAME";
+    field public static final String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
+    field public static final String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
+    field public static final String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
+    field public static final String EXTRA_QUICK_VIEW_FEATURES = "android.intent.extra.QUICK_VIEW_FEATURES";
+    field public static final String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
+    field public static final String EXTRA_REFERRER = "android.intent.extra.REFERRER";
+    field public static final String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
+    field public static final String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";
+    field public static final String EXTRA_REPLACEMENT_EXTRAS = "android.intent.extra.REPLACEMENT_EXTRAS";
+    field public static final String EXTRA_REPLACING = "android.intent.extra.REPLACING";
+    field public static final String EXTRA_RESTRICTIONS_BUNDLE = "android.intent.extra.restrictions_bundle";
+    field public static final String EXTRA_RESTRICTIONS_INTENT = "android.intent.extra.restrictions_intent";
+    field public static final String EXTRA_RESTRICTIONS_LIST = "android.intent.extra.restrictions_list";
+    field public static final String EXTRA_RESULT_RECEIVER = "android.intent.extra.RESULT_RECEIVER";
+    field public static final String EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT";
+    field @Deprecated public static final String EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON";
+    field @Deprecated public static final String EXTRA_SHORTCUT_ICON_RESOURCE = "android.intent.extra.shortcut.ICON_RESOURCE";
+    field public static final String EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID";
+    field @Deprecated public static final String EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT";
+    field @Deprecated public static final String EXTRA_SHORTCUT_NAME = "android.intent.extra.shortcut.NAME";
+    field public static final String EXTRA_SHUTDOWN_USERSPACE_ONLY = "android.intent.extra.SHUTDOWN_USERSPACE_ONLY";
+    field public static final String EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME";
+    field public static final String EXTRA_START_TIME = "android.intent.extra.START_TIME";
+    field public static final String EXTRA_STREAM = "android.intent.extra.STREAM";
+    field public static final String EXTRA_SUBJECT = "android.intent.extra.SUBJECT";
+    field public static final String EXTRA_SUSPENDED_PACKAGE_EXTRAS = "android.intent.extra.SUSPENDED_PACKAGE_EXTRAS";
+    field public static final String EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE";
+    field public static final String EXTRA_TEXT = "android.intent.extra.TEXT";
+    field public static final String EXTRA_TIME = "android.intent.extra.TIME";
+    field public static final String EXTRA_TIMEZONE = "time-zone";
+    field public static final String EXTRA_TITLE = "android.intent.extra.TITLE";
+    field public static final String EXTRA_UID = "android.intent.extra.UID";
+    field public static final String EXTRA_USER = "android.intent.extra.USER";
+    field public static final String EXTRA_USER_INITIATED = "android.intent.extra.USER_INITIATED";
+    field public static final int FILL_IN_ACTION = 1; // 0x1
+    field public static final int FILL_IN_CATEGORIES = 4; // 0x4
+    field public static final int FILL_IN_CLIP_DATA = 128; // 0x80
+    field public static final int FILL_IN_COMPONENT = 8; // 0x8
+    field public static final int FILL_IN_DATA = 2; // 0x2
+    field public static final int FILL_IN_IDENTIFIER = 256; // 0x100
+    field public static final int FILL_IN_PACKAGE = 16; // 0x10
+    field public static final int FILL_IN_SELECTOR = 64; // 0x40
+    field public static final int FILL_IN_SOURCE_BOUNDS = 32; // 0x20
+    field public static final int FLAG_ACTIVITY_BROUGHT_TO_FRONT = 4194304; // 0x400000
+    field public static final int FLAG_ACTIVITY_CLEAR_TASK = 32768; // 0x8000
+    field public static final int FLAG_ACTIVITY_CLEAR_TOP = 67108864; // 0x4000000
+    field @Deprecated public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 524288; // 0x80000
+    field public static final int FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS = 8388608; // 0x800000
+    field public static final int FLAG_ACTIVITY_FORWARD_RESULT = 33554432; // 0x2000000
+    field public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 1048576; // 0x100000
+    field public static final int FLAG_ACTIVITY_LAUNCH_ADJACENT = 4096; // 0x1000
+    field public static final int FLAG_ACTIVITY_MATCH_EXTERNAL = 2048; // 0x800
+    field public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 134217728; // 0x8000000
+    field public static final int FLAG_ACTIVITY_NEW_DOCUMENT = 524288; // 0x80000
+    field public static final int FLAG_ACTIVITY_NEW_TASK = 268435456; // 0x10000000
+    field public static final int FLAG_ACTIVITY_NO_ANIMATION = 65536; // 0x10000
+    field public static final int FLAG_ACTIVITY_NO_HISTORY = 1073741824; // 0x40000000
+    field public static final int FLAG_ACTIVITY_NO_USER_ACTION = 262144; // 0x40000
+    field public static final int FLAG_ACTIVITY_PREVIOUS_IS_TOP = 16777216; // 0x1000000
+    field public static final int FLAG_ACTIVITY_REORDER_TO_FRONT = 131072; // 0x20000
+    field public static final int FLAG_ACTIVITY_REQUIRE_DEFAULT = 512; // 0x200
+    field public static final int FLAG_ACTIVITY_REQUIRE_NON_BROWSER = 1024; // 0x400
+    field public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED = 2097152; // 0x200000
+    field public static final int FLAG_ACTIVITY_RETAIN_IN_RECENTS = 8192; // 0x2000
+    field public static final int FLAG_ACTIVITY_SINGLE_TOP = 536870912; // 0x20000000
+    field public static final int FLAG_ACTIVITY_TASK_ON_HOME = 16384; // 0x4000
+    field public static final int FLAG_DEBUG_LOG_RESOLUTION = 8; // 0x8
+    field public static final int FLAG_DIRECT_BOOT_AUTO = 256; // 0x100
+    field public static final int FLAG_EXCLUDE_STOPPED_PACKAGES = 16; // 0x10
+    field public static final int FLAG_FROM_BACKGROUND = 4; // 0x4
+    field public static final int FLAG_GRANT_PERSISTABLE_URI_PERMISSION = 64; // 0x40
+    field public static final int FLAG_GRANT_PREFIX_URI_PERMISSION = 128; // 0x80
+    field public static final int FLAG_GRANT_READ_URI_PERMISSION = 1; // 0x1
+    field public static final int FLAG_GRANT_WRITE_URI_PERMISSION = 2; // 0x2
+    field public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32; // 0x20
+    field public static final int FLAG_RECEIVER_FOREGROUND = 268435456; // 0x10000000
+    field public static final int FLAG_RECEIVER_NO_ABORT = 134217728; // 0x8000000
+    field public static final int FLAG_RECEIVER_REGISTERED_ONLY = 1073741824; // 0x40000000
+    field public static final int FLAG_RECEIVER_REPLACE_PENDING = 536870912; // 0x20000000
+    field public static final int FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS = 2097152; // 0x200000
+    field public static final String METADATA_DOCK_HOME = "android.dock_home";
+    field public static final int URI_ALLOW_UNSAFE = 4; // 0x4
+    field public static final int URI_ANDROID_APP_SCHEME = 2; // 0x2
+    field public static final int URI_INTENT_SCHEME = 1; // 0x1
+  }
+
+  public static final class Intent.FilterComparison {
+    ctor public Intent.FilterComparison(android.content.Intent);
+    method public android.content.Intent getIntent();
+  }
+
+  public static class Intent.ShortcutIconResource implements android.os.Parcelable {
+    ctor public Intent.ShortcutIconResource();
+    method public int describeContents();
+    method public static android.content.Intent.ShortcutIconResource fromContext(android.content.Context, @AnyRes int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.Intent.ShortcutIconResource> CREATOR;
+    field public String packageName;
+    field public String resourceName;
+  }
+
+  public class IntentFilter implements android.os.Parcelable {
+    ctor public IntentFilter();
+    ctor public IntentFilter(String);
+    ctor public IntentFilter(String, String) throws android.content.IntentFilter.MalformedMimeTypeException;
+    ctor public IntentFilter(android.content.IntentFilter);
+    method public final java.util.Iterator<java.lang.String> actionsIterator();
+    method public final void addAction(String);
+    method public final void addCategory(String);
+    method public final void addDataAuthority(String, String);
+    method public final void addDataPath(String, int);
+    method public final void addDataScheme(String);
+    method public final void addDataSchemeSpecificPart(String, int);
+    method public final void addDataType(String) throws android.content.IntentFilter.MalformedMimeTypeException;
+    method public final java.util.Iterator<android.content.IntentFilter.AuthorityEntry> authoritiesIterator();
+    method public final java.util.Iterator<java.lang.String> categoriesIterator();
+    method public final int countActions();
+    method public final int countCategories();
+    method public final int countDataAuthorities();
+    method public final int countDataPaths();
+    method public final int countDataSchemeSpecificParts();
+    method public final int countDataSchemes();
+    method public final int countDataTypes();
+    method public static android.content.IntentFilter create(String, String);
+    method public final int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public final String getAction(int);
+    method public final String getCategory(int);
+    method public final android.content.IntentFilter.AuthorityEntry getDataAuthority(int);
+    method public final android.os.PatternMatcher getDataPath(int);
+    method public final String getDataScheme(int);
+    method public final android.os.PatternMatcher getDataSchemeSpecificPart(int);
+    method public final String getDataType(int);
+    method public final int getPriority();
+    method public final boolean hasAction(String);
+    method public final boolean hasCategory(String);
+    method public final boolean hasDataAuthority(android.net.Uri);
+    method public final boolean hasDataPath(String);
+    method public final boolean hasDataScheme(String);
+    method public final boolean hasDataSchemeSpecificPart(String);
+    method public final boolean hasDataType(String);
+    method public final int match(android.content.ContentResolver, android.content.Intent, boolean, String);
+    method public final int match(String, String, String, android.net.Uri, java.util.Set<java.lang.String>, String);
+    method public final boolean matchAction(String);
+    method public final String matchCategories(java.util.Set<java.lang.String>);
+    method public final int matchData(String, String, android.net.Uri);
+    method public final int matchDataAuthority(android.net.Uri);
+    method public final java.util.Iterator<android.os.PatternMatcher> pathsIterator();
+    method public void readFromXml(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public final java.util.Iterator<android.os.PatternMatcher> schemeSpecificPartsIterator();
+    method public final java.util.Iterator<java.lang.String> schemesIterator();
+    method public final void setPriority(int);
+    method public final java.util.Iterator<java.lang.String> typesIterator();
+    method public final void writeToParcel(android.os.Parcel, int);
+    method public void writeToXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException;
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.IntentFilter> CREATOR;
+    field public static final int MATCH_ADJUSTMENT_MASK = 65535; // 0xffff
+    field public static final int MATCH_ADJUSTMENT_NORMAL = 32768; // 0x8000
+    field public static final int MATCH_CATEGORY_EMPTY = 1048576; // 0x100000
+    field public static final int MATCH_CATEGORY_HOST = 3145728; // 0x300000
+    field public static final int MATCH_CATEGORY_MASK = 268369920; // 0xfff0000
+    field public static final int MATCH_CATEGORY_PATH = 5242880; // 0x500000
+    field public static final int MATCH_CATEGORY_PORT = 4194304; // 0x400000
+    field public static final int MATCH_CATEGORY_SCHEME = 2097152; // 0x200000
+    field public static final int MATCH_CATEGORY_SCHEME_SPECIFIC_PART = 5767168; // 0x580000
+    field public static final int MATCH_CATEGORY_TYPE = 6291456; // 0x600000
+    field public static final int NO_MATCH_ACTION = -3; // 0xfffffffd
+    field public static final int NO_MATCH_CATEGORY = -4; // 0xfffffffc
+    field public static final int NO_MATCH_DATA = -2; // 0xfffffffe
+    field public static final int NO_MATCH_TYPE = -1; // 0xffffffff
+    field public static final int SYSTEM_HIGH_PRIORITY = 1000; // 0x3e8
+    field public static final int SYSTEM_LOW_PRIORITY = -1000; // 0xfffffc18
+  }
+
+  public static final class IntentFilter.AuthorityEntry {
+    ctor public IntentFilter.AuthorityEntry(String, String);
+    method public String getHost();
+    method public int getPort();
+    method public int match(android.net.Uri);
+  }
+
+  public static class IntentFilter.MalformedMimeTypeException extends android.util.AndroidException {
+    ctor public IntentFilter.MalformedMimeTypeException();
+    ctor public IntentFilter.MalformedMimeTypeException(String);
+  }
+
+  public class IntentSender implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getCreatorPackage();
+    method public int getCreatorUid();
+    method public android.os.UserHandle getCreatorUserHandle();
+    method @Deprecated public String getTargetPackage();
+    method public static android.content.IntentSender readIntentSenderOrNullFromParcel(android.os.Parcel);
+    method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler) throws android.content.IntentSender.SendIntentException;
+    method public void sendIntent(android.content.Context, int, android.content.Intent, android.content.IntentSender.OnFinished, android.os.Handler, String) throws android.content.IntentSender.SendIntentException;
+    method public static void writeIntentSenderOrNullToParcel(android.content.IntentSender, android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.IntentSender> CREATOR;
+  }
+
+  public static interface IntentSender.OnFinished {
+    method public void onSendFinished(android.content.IntentSender, android.content.Intent, int, String, android.os.Bundle);
+  }
+
+  public static class IntentSender.SendIntentException extends android.util.AndroidException {
+    ctor public IntentSender.SendIntentException();
+    ctor public IntentSender.SendIntentException(String);
+    ctor public IntentSender.SendIntentException(Exception);
+  }
+
+  @Deprecated public class Loader<D> {
+    ctor @Deprecated public Loader(android.content.Context);
+    method @Deprecated public void abandon();
+    method @Deprecated public boolean cancelLoad();
+    method @Deprecated public void commitContentChanged();
+    method @Deprecated public String dataToString(D);
+    method @Deprecated public void deliverCancellation();
+    method @Deprecated public void deliverResult(D);
+    method @Deprecated public void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated public void forceLoad();
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated public int getId();
+    method @Deprecated public boolean isAbandoned();
+    method @Deprecated public boolean isReset();
+    method @Deprecated public boolean isStarted();
+    method @Deprecated protected void onAbandon();
+    method @Deprecated protected boolean onCancelLoad();
+    method @Deprecated public void onContentChanged();
+    method @Deprecated protected void onForceLoad();
+    method @Deprecated protected void onReset();
+    method @Deprecated protected void onStartLoading();
+    method @Deprecated protected void onStopLoading();
+    method @Deprecated public void registerListener(int, android.content.Loader.OnLoadCompleteListener<D>);
+    method @Deprecated public void registerOnLoadCanceledListener(android.content.Loader.OnLoadCanceledListener<D>);
+    method @Deprecated public void reset();
+    method @Deprecated public void rollbackContentChanged();
+    method @Deprecated public final void startLoading();
+    method @Deprecated public void stopLoading();
+    method @Deprecated public boolean takeContentChanged();
+    method @Deprecated public void unregisterListener(android.content.Loader.OnLoadCompleteListener<D>);
+    method @Deprecated public void unregisterOnLoadCanceledListener(android.content.Loader.OnLoadCanceledListener<D>);
+  }
+
+  @Deprecated public final class Loader.ForceLoadContentObserver extends android.database.ContentObserver {
+    ctor @Deprecated public Loader.ForceLoadContentObserver();
+  }
+
+  @Deprecated public static interface Loader.OnLoadCanceledListener<D> {
+    method @Deprecated public void onLoadCanceled(android.content.Loader<D>);
+  }
+
+  @Deprecated public static interface Loader.OnLoadCompleteListener<D> {
+    method @Deprecated public void onLoadComplete(android.content.Loader<D>, D);
+  }
+
+  public final class LocusId implements android.os.Parcelable {
+    ctor public LocusId(@NonNull String);
+    method public int describeContents();
+    method @NonNull public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.LocusId> CREATOR;
+  }
+
+  public class MutableContextWrapper extends android.content.ContextWrapper {
+    ctor public MutableContextWrapper(android.content.Context);
+    method public void setBaseContext(android.content.Context);
+  }
+
+  public class OperationApplicationException extends java.lang.Exception {
+    ctor public OperationApplicationException();
+    ctor public OperationApplicationException(String);
+    ctor public OperationApplicationException(String, Throwable);
+    ctor public OperationApplicationException(Throwable);
+    ctor public OperationApplicationException(int);
+    ctor public OperationApplicationException(String, int);
+    method public int getNumSuccessfulYieldPoints();
+  }
+
+  public class PeriodicSync implements android.os.Parcelable {
+    ctor public PeriodicSync(android.accounts.Account, String, android.os.Bundle, long);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.PeriodicSync> CREATOR;
+    field public final android.accounts.Account account;
+    field public final String authority;
+    field public final android.os.Bundle extras;
+    field public final long period;
+  }
+
+  public class QuickViewConstants {
+    field public static final String FEATURE_DELETE = "android:delete";
+    field public static final String FEATURE_DOWNLOAD = "android:download";
+    field public static final String FEATURE_EDIT = "android:edit";
+    field public static final String FEATURE_PRINT = "android:print";
+    field public static final String FEATURE_SEND = "android:send";
+    field public static final String FEATURE_VIEW = "android:view";
+  }
+
+  public class ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException {
+    ctor public ReceiverCallNotAllowedException(String);
+  }
+
+  public class RestrictionEntry implements android.os.Parcelable {
+    ctor public RestrictionEntry(int, String);
+    ctor public RestrictionEntry(String, String);
+    ctor public RestrictionEntry(String, boolean);
+    ctor public RestrictionEntry(String, String[]);
+    ctor public RestrictionEntry(String, int);
+    ctor public RestrictionEntry(android.os.Parcel);
+    method public static android.content.RestrictionEntry createBundleArrayEntry(String, android.content.RestrictionEntry[]);
+    method public static android.content.RestrictionEntry createBundleEntry(String, android.content.RestrictionEntry[]);
+    method public int describeContents();
+    method public String[] getAllSelectedStrings();
+    method public String[] getChoiceEntries();
+    method public String[] getChoiceValues();
+    method public String getDescription();
+    method public int getIntValue();
+    method public String getKey();
+    method public android.content.RestrictionEntry[] getRestrictions();
+    method public boolean getSelectedState();
+    method public String getSelectedString();
+    method public String getTitle();
+    method public int getType();
+    method public void setAllSelectedStrings(String[]);
+    method public void setChoiceEntries(String[]);
+    method public void setChoiceEntries(android.content.Context, @ArrayRes int);
+    method public void setChoiceValues(String[]);
+    method public void setChoiceValues(android.content.Context, @ArrayRes int);
+    method public void setDescription(String);
+    method public void setIntValue(int);
+    method public void setRestrictions(android.content.RestrictionEntry[]);
+    method public void setSelectedState(boolean);
+    method public void setSelectedString(String);
+    method public void setTitle(String);
+    method public void setType(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.RestrictionEntry> CREATOR;
+    field public static final int TYPE_BOOLEAN = 1; // 0x1
+    field public static final int TYPE_BUNDLE = 7; // 0x7
+    field public static final int TYPE_BUNDLE_ARRAY = 8; // 0x8
+    field public static final int TYPE_CHOICE = 2; // 0x2
+    field public static final int TYPE_INTEGER = 5; // 0x5
+    field public static final int TYPE_MULTI_SELECT = 4; // 0x4
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_STRING = 6; // 0x6
+  }
+
+  public class RestrictionsManager {
+    method public static android.os.Bundle convertRestrictionsToBundle(java.util.List<android.content.RestrictionEntry>);
+    method public android.content.Intent createLocalApprovalIntent();
+    method public android.os.Bundle getApplicationRestrictions();
+    method public java.util.List<android.content.RestrictionEntry> getManifestRestrictions(String);
+    method public boolean hasRestrictionsProvider();
+    method public void notifyPermissionResponse(String, android.os.PersistableBundle);
+    method public void requestPermission(String, String, android.os.PersistableBundle);
+    field public static final String ACTION_PERMISSION_RESPONSE_RECEIVED = "android.content.action.PERMISSION_RESPONSE_RECEIVED";
+    field public static final String ACTION_REQUEST_LOCAL_APPROVAL = "android.content.action.REQUEST_LOCAL_APPROVAL";
+    field public static final String ACTION_REQUEST_PERMISSION = "android.content.action.REQUEST_PERMISSION";
+    field public static final String EXTRA_PACKAGE_NAME = "android.content.extra.PACKAGE_NAME";
+    field public static final String EXTRA_REQUEST_BUNDLE = "android.content.extra.REQUEST_BUNDLE";
+    field public static final String EXTRA_REQUEST_ID = "android.content.extra.REQUEST_ID";
+    field public static final String EXTRA_REQUEST_TYPE = "android.content.extra.REQUEST_TYPE";
+    field public static final String EXTRA_RESPONSE_BUNDLE = "android.content.extra.RESPONSE_BUNDLE";
+    field public static final String META_DATA_APP_RESTRICTIONS = "android.content.APP_RESTRICTIONS";
+    field public static final String REQUEST_KEY_APPROVE_LABEL = "android.request.approve_label";
+    field public static final String REQUEST_KEY_DATA = "android.request.data";
+    field public static final String REQUEST_KEY_DENY_LABEL = "android.request.deny_label";
+    field public static final String REQUEST_KEY_ICON = "android.request.icon";
+    field public static final String REQUEST_KEY_ID = "android.request.id";
+    field public static final String REQUEST_KEY_MESSAGE = "android.request.mesg";
+    field public static final String REQUEST_KEY_NEW_REQUEST = "android.request.new_request";
+    field public static final String REQUEST_KEY_TITLE = "android.request.title";
+    field public static final String REQUEST_TYPE_APPROVAL = "android.request.type.approval";
+    field public static final String RESPONSE_KEY_ERROR_CODE = "android.response.errorcode";
+    field public static final String RESPONSE_KEY_MESSAGE = "android.response.msg";
+    field public static final String RESPONSE_KEY_RESPONSE_TIMESTAMP = "android.response.timestamp";
+    field public static final String RESPONSE_KEY_RESULT = "android.response.result";
+    field public static final int RESULT_APPROVED = 1; // 0x1
+    field public static final int RESULT_DENIED = 2; // 0x2
+    field public static final int RESULT_ERROR = 5; // 0x5
+    field public static final int RESULT_ERROR_BAD_REQUEST = 1; // 0x1
+    field public static final int RESULT_ERROR_INTERNAL = 3; // 0x3
+    field public static final int RESULT_ERROR_NETWORK = 2; // 0x2
+    field public static final int RESULT_NO_RESPONSE = 3; // 0x3
+    field public static final int RESULT_UNKNOWN_REQUEST = 4; // 0x4
+  }
+
+  public class SearchRecentSuggestionsProvider extends android.content.ContentProvider {
+    ctor public SearchRecentSuggestionsProvider();
+    method public int delete(android.net.Uri, String, String[]);
+    method public String getType(android.net.Uri);
+    method public android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean onCreate();
+    method public android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method protected void setupSuggestions(String, int);
+    method public int update(android.net.Uri, android.content.ContentValues, String, String[]);
+    field public static final int DATABASE_MODE_2LINES = 2; // 0x2
+    field public static final int DATABASE_MODE_QUERIES = 1; // 0x1
+  }
+
+  public interface ServiceConnection {
+    method public default void onBindingDied(android.content.ComponentName);
+    method public default void onNullBinding(android.content.ComponentName);
+    method public void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+    method public void onServiceDisconnected(android.content.ComponentName);
+  }
+
+  public interface SharedPreferences {
+    method public boolean contains(String);
+    method public android.content.SharedPreferences.Editor edit();
+    method public java.util.Map<java.lang.String,?> getAll();
+    method public boolean getBoolean(String, boolean);
+    method public float getFloat(String, float);
+    method public int getInt(String, int);
+    method public long getLong(String, long);
+    method @Nullable public String getString(String, @Nullable String);
+    method @Nullable public java.util.Set<java.lang.String> getStringSet(String, @Nullable java.util.Set<java.lang.String>);
+    method public void registerOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener);
+    method public void unregisterOnSharedPreferenceChangeListener(android.content.SharedPreferences.OnSharedPreferenceChangeListener);
+  }
+
+  public static interface SharedPreferences.Editor {
+    method public void apply();
+    method public android.content.SharedPreferences.Editor clear();
+    method public boolean commit();
+    method public android.content.SharedPreferences.Editor putBoolean(String, boolean);
+    method public android.content.SharedPreferences.Editor putFloat(String, float);
+    method public android.content.SharedPreferences.Editor putInt(String, int);
+    method public android.content.SharedPreferences.Editor putLong(String, long);
+    method public android.content.SharedPreferences.Editor putString(String, @Nullable String);
+    method public android.content.SharedPreferences.Editor putStringSet(String, @Nullable java.util.Set<java.lang.String>);
+    method public android.content.SharedPreferences.Editor remove(String);
+  }
+
+  public static interface SharedPreferences.OnSharedPreferenceChangeListener {
+    method public void onSharedPreferenceChanged(android.content.SharedPreferences, String);
+  }
+
+  public class SyncAdapterType implements android.os.Parcelable {
+    ctor public SyncAdapterType(String, String, boolean, boolean);
+    ctor public SyncAdapterType(android.os.Parcel);
+    method public boolean allowParallelSyncs();
+    method public int describeContents();
+    method public String getSettingsActivity();
+    method public boolean isAlwaysSyncable();
+    method public boolean isUserVisible();
+    method public static android.content.SyncAdapterType newKey(String, String);
+    method public boolean supportsUploading();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncAdapterType> CREATOR;
+    field public final String accountType;
+    field public final String authority;
+    field public final boolean isKey;
+  }
+
+  public class SyncContext {
+    method public android.os.IBinder getSyncContextBinder();
+    method public void onFinished(android.content.SyncResult);
+  }
+
+  public class SyncInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public final android.accounts.Account account;
+    field public final String authority;
+    field public final long startTime;
+  }
+
+  public class SyncRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncRequest> CREATOR;
+  }
+
+  public static class SyncRequest.Builder {
+    ctor public SyncRequest.Builder();
+    method public android.content.SyncRequest build();
+    method public android.content.SyncRequest.Builder setDisallowMetered(boolean);
+    method public android.content.SyncRequest.Builder setExpedited(boolean);
+    method public android.content.SyncRequest.Builder setExtras(android.os.Bundle);
+    method public android.content.SyncRequest.Builder setIgnoreBackoff(boolean);
+    method public android.content.SyncRequest.Builder setIgnoreSettings(boolean);
+    method public android.content.SyncRequest.Builder setManual(boolean);
+    method public android.content.SyncRequest.Builder setNoRetry(boolean);
+    method public android.content.SyncRequest.Builder setRequiresCharging(boolean);
+    method @NonNull public android.content.SyncRequest.Builder setScheduleAsExpeditedJob(boolean);
+    method public android.content.SyncRequest.Builder setSyncAdapter(android.accounts.Account, String);
+    method public android.content.SyncRequest.Builder syncOnce();
+    method public android.content.SyncRequest.Builder syncPeriodic(long, long);
+  }
+
+  public final class SyncResult implements android.os.Parcelable {
+    ctor public SyncResult();
+    method public void clear();
+    method public int describeContents();
+    method public boolean hasError();
+    method public boolean hasHardError();
+    method public boolean hasSoftError();
+    method public boolean madeSomeProgress();
+    method public String toDebugString();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.content.SyncResult ALREADY_IN_PROGRESS;
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncResult> CREATOR;
+    field public boolean databaseError;
+    field public long delayUntil;
+    field public boolean fullSyncRequested;
+    field public boolean moreRecordsToGet;
+    field public boolean partialSyncUnavailable;
+    field public final android.content.SyncStats stats;
+    field public final boolean syncAlreadyInProgress;
+    field public boolean tooManyDeletions;
+    field public boolean tooManyRetries;
+  }
+
+  public class SyncStats implements android.os.Parcelable {
+    ctor public SyncStats();
+    ctor public SyncStats(android.os.Parcel);
+    method public void clear();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.SyncStats> CREATOR;
+    field public long numAuthExceptions;
+    field public long numConflictDetectedExceptions;
+    field public long numDeletes;
+    field public long numEntries;
+    field public long numInserts;
+    field public long numIoExceptions;
+    field public long numParseExceptions;
+    field public long numSkippedEntries;
+    field public long numUpdates;
+  }
+
+  public interface SyncStatusObserver {
+    method public void onStatusChanged(int);
+  }
+
+  public class UriMatcher {
+    ctor public UriMatcher(int);
+    method public void addURI(String, String, int);
+    method public int match(android.net.Uri);
+    field public static final int NO_MATCH = -1; // 0xffffffff
+  }
+
+  public final class UriPermission implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getPersistedTime();
+    method public android.net.Uri getUri();
+    method public boolean isReadPermission();
+    method public boolean isWritePermission();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.UriPermission> CREATOR;
+    field public static final long INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L
+  }
+
+}
+
+package android.content.pm {
+
+  public class ActivityInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    ctor public ActivityInfo();
+    ctor public ActivityInfo(android.content.pm.ActivityInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public final int getThemeResource();
+    field public static final int COLOR_MODE_DEFAULT = 0; // 0x0
+    field public static final int COLOR_MODE_HDR = 2; // 0x2
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT = 1; // 0x1
+    field public static final int CONFIG_COLOR_MODE = 16384; // 0x4000
+    field public static final int CONFIG_DENSITY = 4096; // 0x1000
+    field public static final int CONFIG_FONT_SCALE = 1073741824; // 0x40000000
+    field public static final int CONFIG_FONT_WEIGHT_ADJUSTMENT = 268435456; // 0x10000000
+    field public static final int CONFIG_KEYBOARD = 16; // 0x10
+    field public static final int CONFIG_KEYBOARD_HIDDEN = 32; // 0x20
+    field public static final int CONFIG_LAYOUT_DIRECTION = 8192; // 0x2000
+    field public static final int CONFIG_LOCALE = 4; // 0x4
+    field public static final int CONFIG_MCC = 1; // 0x1
+    field public static final int CONFIG_MNC = 2; // 0x2
+    field public static final int CONFIG_NAVIGATION = 64; // 0x40
+    field public static final int CONFIG_ORIENTATION = 128; // 0x80
+    field public static final int CONFIG_SCREEN_LAYOUT = 256; // 0x100
+    field public static final int CONFIG_SCREEN_SIZE = 1024; // 0x400
+    field public static final int CONFIG_SMALLEST_SCREEN_SIZE = 2048; // 0x800
+    field public static final int CONFIG_TOUCHSCREEN = 8; // 0x8
+    field public static final int CONFIG_UI_MODE = 512; // 0x200
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ActivityInfo> CREATOR;
+    field public static final int DOCUMENT_LAUNCH_ALWAYS = 2; // 0x2
+    field public static final int DOCUMENT_LAUNCH_INTO_EXISTING = 1; // 0x1
+    field public static final int DOCUMENT_LAUNCH_NEVER = 3; // 0x3
+    field public static final int DOCUMENT_LAUNCH_NONE = 0; // 0x0
+    field public static final int FLAG_ALLOW_TASK_REPARENTING = 64; // 0x40
+    field public static final int FLAG_ALWAYS_RETAIN_TASK_STATE = 8; // 0x8
+    field public static final int FLAG_AUTO_REMOVE_FROM_RECENTS = 8192; // 0x2000
+    field public static final int FLAG_CLEAR_TASK_ON_LAUNCH = 4; // 0x4
+    field public static final int FLAG_ENABLE_VR_MODE = 32768; // 0x8000
+    field public static final int FLAG_EXCLUDE_FROM_RECENTS = 32; // 0x20
+    field public static final int FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS = 256; // 0x100
+    field public static final int FLAG_FINISH_ON_TASK_LAUNCH = 2; // 0x2
+    field public static final int FLAG_HARDWARE_ACCELERATED = 512; // 0x200
+    field public static final int FLAG_IMMERSIVE = 2048; // 0x800
+    field public static final int FLAG_MULTIPROCESS = 1; // 0x1
+    field public static final int FLAG_NO_HISTORY = 128; // 0x80
+    field public static final int FLAG_PREFER_MINIMAL_POST_PROCESSING = 33554432; // 0x2000000
+    field public static final int FLAG_RELINQUISH_TASK_IDENTITY = 4096; // 0x1000
+    field public static final int FLAG_RESUME_WHILE_PAUSING = 16384; // 0x4000
+    field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
+    field public static final int FLAG_STATE_NOT_NEEDED = 16; // 0x10
+    field public static final int LAUNCH_MULTIPLE = 0; // 0x0
+    field public static final int LAUNCH_SINGLE_INSTANCE = 3; // 0x3
+    field public static final int LAUNCH_SINGLE_INSTANCE_PER_TASK = 4; // 0x4
+    field public static final int LAUNCH_SINGLE_TASK = 2; // 0x2
+    field public static final int LAUNCH_SINGLE_TOP = 1; // 0x1
+    field public static final int PERSIST_ACROSS_REBOOTS = 2; // 0x2
+    field public static final int PERSIST_NEVER = 1; // 0x1
+    field public static final int PERSIST_ROOT_ONLY = 0; // 0x0
+    field public static final int SCREEN_ORIENTATION_BEHIND = 3; // 0x3
+    field public static final int SCREEN_ORIENTATION_FULL_SENSOR = 10; // 0xa
+    field public static final int SCREEN_ORIENTATION_FULL_USER = 13; // 0xd
+    field public static final int SCREEN_ORIENTATION_LANDSCAPE = 0; // 0x0
+    field public static final int SCREEN_ORIENTATION_LOCKED = 14; // 0xe
+    field public static final int SCREEN_ORIENTATION_NOSENSOR = 5; // 0x5
+    field public static final int SCREEN_ORIENTATION_PORTRAIT = 1; // 0x1
+    field public static final int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8; // 0x8
+    field public static final int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9; // 0x9
+    field public static final int SCREEN_ORIENTATION_SENSOR = 4; // 0x4
+    field public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6; // 0x6
+    field public static final int SCREEN_ORIENTATION_SENSOR_PORTRAIT = 7; // 0x7
+    field public static final int SCREEN_ORIENTATION_UNSPECIFIED = -1; // 0xffffffff
+    field public static final int SCREEN_ORIENTATION_USER = 2; // 0x2
+    field public static final int SCREEN_ORIENTATION_USER_LANDSCAPE = 11; // 0xb
+    field public static final int SCREEN_ORIENTATION_USER_PORTRAIT = 12; // 0xc
+    field public static final int UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW = 1; // 0x1
+    field public int colorMode;
+    field public int configChanges;
+    field public int documentLaunchMode;
+    field public int flags;
+    field public int launchMode;
+    field public int maxRecents;
+    field public String parentActivityName;
+    field public String permission;
+    field public int persistableMode;
+    field public int screenOrientation;
+    field public int softInputMode;
+    field public String targetActivity;
+    field public String taskAffinity;
+    field public int theme;
+    field public int uiOptions;
+    field public android.content.pm.ActivityInfo.WindowLayout windowLayout;
+  }
+
+  public static final class ActivityInfo.WindowLayout {
+    ctor public ActivityInfo.WindowLayout(int, float, int, float, int, int, int);
+    field public final int gravity;
+    field public final int height;
+    field public final float heightFraction;
+    field public final int minHeight;
+    field public final int minWidth;
+    field public final int width;
+    field public final float widthFraction;
+  }
+
+  public final class ApkChecksum implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public java.security.cert.Certificate getInstallerCertificate() throws java.security.cert.CertificateException;
+    method @Nullable public String getInstallerPackageName();
+    method @Nullable public String getSplitName();
+    method public int getType();
+    method @NonNull public byte[] getValue();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ApkChecksum> CREATOR;
+  }
+
+  public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor public ApplicationInfo();
+    ctor public ApplicationInfo(android.content.pm.ApplicationInfo);
+    method public boolean areAttributionsUserVisible();
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public static CharSequence getCategoryTitle(android.content.Context, int);
+    method public int getGwpAsanMode();
+    method public int getMemtagMode();
+    method public int getNativeHeapZeroInitialized();
+    method public int getRequestRawExternalStorageAccess();
+    method public boolean isProfileable();
+    method public boolean isProfileableByShell();
+    method public boolean isResourceOverlay();
+    method public boolean isVirtualPreload();
+    method public CharSequence loadDescription(android.content.pm.PackageManager);
+    field public static final int CATEGORY_ACCESSIBILITY = 8; // 0x8
+    field public static final int CATEGORY_AUDIO = 1; // 0x1
+    field public static final int CATEGORY_GAME = 0; // 0x0
+    field public static final int CATEGORY_IMAGE = 3; // 0x3
+    field public static final int CATEGORY_MAPS = 6; // 0x6
+    field public static final int CATEGORY_NEWS = 5; // 0x5
+    field public static final int CATEGORY_PRODUCTIVITY = 7; // 0x7
+    field public static final int CATEGORY_SOCIAL = 4; // 0x4
+    field public static final int CATEGORY_UNDEFINED = -1; // 0xffffffff
+    field public static final int CATEGORY_VIDEO = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ApplicationInfo> CREATOR;
+    field public static final int FLAG_ALLOW_BACKUP = 32768; // 0x8000
+    field public static final int FLAG_ALLOW_CLEAR_USER_DATA = 64; // 0x40
+    field public static final int FLAG_ALLOW_TASK_REPARENTING = 32; // 0x20
+    field public static final int FLAG_DEBUGGABLE = 2; // 0x2
+    field public static final int FLAG_EXTERNAL_STORAGE = 262144; // 0x40000
+    field public static final int FLAG_EXTRACT_NATIVE_LIBS = 268435456; // 0x10000000
+    field public static final int FLAG_FACTORY_TEST = 16; // 0x10
+    field public static final int FLAG_FULL_BACKUP_ONLY = 67108864; // 0x4000000
+    field public static final int FLAG_HARDWARE_ACCELERATED = 536870912; // 0x20000000
+    field public static final int FLAG_HAS_CODE = 4; // 0x4
+    field public static final int FLAG_INSTALLED = 8388608; // 0x800000
+    field public static final int FLAG_IS_DATA_ONLY = 16777216; // 0x1000000
+    field @Deprecated public static final int FLAG_IS_GAME = 33554432; // 0x2000000
+    field public static final int FLAG_KILL_AFTER_RESTORE = 65536; // 0x10000
+    field public static final int FLAG_LARGE_HEAP = 1048576; // 0x100000
+    field public static final int FLAG_MULTIARCH = -2147483648; // 0x80000000
+    field public static final int FLAG_PERSISTENT = 8; // 0x8
+    field public static final int FLAG_RESIZEABLE_FOR_SCREENS = 4096; // 0x1000
+    field public static final int FLAG_RESTORE_ANY_VERSION = 131072; // 0x20000
+    field public static final int FLAG_STOPPED = 2097152; // 0x200000
+    field public static final int FLAG_SUPPORTS_LARGE_SCREENS = 2048; // 0x800
+    field public static final int FLAG_SUPPORTS_NORMAL_SCREENS = 1024; // 0x400
+    field public static final int FLAG_SUPPORTS_RTL = 4194304; // 0x400000
+    field @Deprecated public static final int FLAG_SUPPORTS_SCREEN_DENSITIES = 8192; // 0x2000
+    field public static final int FLAG_SUPPORTS_SMALL_SCREENS = 512; // 0x200
+    field public static final int FLAG_SUPPORTS_XLARGE_SCREENS = 524288; // 0x80000
+    field public static final int FLAG_SUSPENDED = 1073741824; // 0x40000000
+    field public static final int FLAG_SYSTEM = 1; // 0x1
+    field public static final int FLAG_TEST_ONLY = 256; // 0x100
+    field public static final int FLAG_UPDATED_SYSTEM_APP = 128; // 0x80
+    field public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 134217728; // 0x8000000
+    field public static final int FLAG_VM_SAFE_MODE = 16384; // 0x4000
+    field public static final int GWP_ASAN_ALWAYS = 1; // 0x1
+    field public static final int GWP_ASAN_DEFAULT = -1; // 0xffffffff
+    field public static final int GWP_ASAN_NEVER = 0; // 0x0
+    field public static final int MEMTAG_ASYNC = 1; // 0x1
+    field public static final int MEMTAG_DEFAULT = -1; // 0xffffffff
+    field public static final int MEMTAG_OFF = 0; // 0x0
+    field public static final int MEMTAG_SYNC = 2; // 0x2
+    field public static final int RAW_EXTERNAL_STORAGE_ACCESS_DEFAULT = 0; // 0x0
+    field public static final int RAW_EXTERNAL_STORAGE_ACCESS_NOT_REQUESTED = 2; // 0x2
+    field public static final int RAW_EXTERNAL_STORAGE_ACCESS_REQUESTED = 1; // 0x1
+    field public static final int ZEROINIT_DEFAULT = -1; // 0xffffffff
+    field public static final int ZEROINIT_DISABLED = 0; // 0x0
+    field public static final int ZEROINIT_ENABLED = 1; // 0x1
+    field public String appComponentFactory;
+    field public String backupAgentName;
+    field public int category;
+    field public String className;
+    field public int compatibleWidthLimitDp;
+    field public int compileSdkVersion;
+    field @Nullable public String compileSdkVersionCodename;
+    field public String dataDir;
+    field public int descriptionRes;
+    field public String deviceProtectedDataDir;
+    field public boolean enabled;
+    field public int flags;
+    field public int largestWidthLimitDp;
+    field public String manageSpaceActivityName;
+    field public int minSdkVersion;
+    field public String nativeLibraryDir;
+    field public String permission;
+    field public String processName;
+    field public String publicSourceDir;
+    field public int requiresSmallestWidthDp;
+    field public String[] sharedLibraryFiles;
+    field public String sourceDir;
+    field public String[] splitNames;
+    field public String[] splitPublicSourceDirs;
+    field public String[] splitSourceDirs;
+    field public java.util.UUID storageUuid;
+    field public int targetSdkVersion;
+    field public String taskAffinity;
+    field public int theme;
+    field public int uiOptions;
+    field public int uid;
+  }
+
+  public static class ApplicationInfo.DisplayNameComparator implements java.util.Comparator<android.content.pm.ApplicationInfo> {
+    ctor public ApplicationInfo.DisplayNameComparator(android.content.pm.PackageManager);
+    method public final int compare(android.content.pm.ApplicationInfo, android.content.pm.ApplicationInfo);
+  }
+
+  public final class Attribution implements android.os.Parcelable {
+    method public int describeContents();
+    method @IdRes public int getLabel();
+    method @NonNull public String getTag();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Attribution> CREATOR;
+  }
+
+  public final class ChangedPackages implements android.os.Parcelable {
+    ctor public ChangedPackages(int, @NonNull java.util.List<java.lang.String>);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getPackageNames();
+    method public int getSequenceNumber();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ChangedPackages> CREATOR;
+  }
+
+  public final class Checksum implements android.os.Parcelable {
+    ctor public Checksum(int, @NonNull byte[]);
+    method public int describeContents();
+    method public int getType();
+    method @NonNull public byte[] getValue();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Checksum> CREATOR;
+    field public static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256 = 32; // 0x20
+    field public static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512 = 64; // 0x40
+    field @Deprecated public static final int TYPE_WHOLE_MD5 = 2; // 0x2
+    field public static final int TYPE_WHOLE_MERKLE_ROOT_4K_SHA256 = 1; // 0x1
+    field @Deprecated public static final int TYPE_WHOLE_SHA1 = 4; // 0x4
+    field @Deprecated public static final int TYPE_WHOLE_SHA256 = 8; // 0x8
+    field @Deprecated public static final int TYPE_WHOLE_SHA512 = 16; // 0x10
+  }
+
+  public class ComponentInfo extends android.content.pm.PackageItemInfo {
+    ctor public ComponentInfo();
+    ctor public ComponentInfo(android.content.pm.ComponentInfo);
+    ctor protected ComponentInfo(android.os.Parcel);
+    method public final int getBannerResource();
+    method public final int getIconResource();
+    method public final int getLogoResource();
+    method public boolean isEnabled();
+    field public android.content.pm.ApplicationInfo applicationInfo;
+    field public String[] attributionTags;
+    field public int descriptionRes;
+    field public boolean directBootAware;
+    field public boolean enabled;
+    field public boolean exported;
+    field public String processName;
+    field public String splitName;
+  }
+
+  public class ConfigurationInfo implements android.os.Parcelable {
+    ctor public ConfigurationInfo();
+    ctor public ConfigurationInfo(android.content.pm.ConfigurationInfo);
+    method public int describeContents();
+    method public String getGlEsVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ConfigurationInfo> CREATOR;
+    field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0
+    field public static final int INPUT_FEATURE_FIVE_WAY_NAV = 2; // 0x2
+    field public static final int INPUT_FEATURE_HARD_KEYBOARD = 1; // 0x1
+    field public int reqGlEsVersion;
+    field public int reqInputFeatures;
+    field public int reqKeyboardType;
+    field public int reqNavigation;
+    field public int reqTouchScreen;
+  }
+
+  public class CrossProfileApps {
+    method public boolean canInteractAcrossProfiles();
+    method public boolean canRequestInteractAcrossProfiles();
+    method @NonNull public android.content.Intent createRequestInteractAcrossProfilesIntent();
+    method @NonNull public android.graphics.drawable.Drawable getProfileSwitchingIconDrawable(@NonNull android.os.UserHandle);
+    method @NonNull public CharSequence getProfileSwitchingLabel(@NonNull android.os.UserHandle);
+    method @NonNull public java.util.List<android.os.UserHandle> getTargetUserProfiles();
+    method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_PROFILES, "android.permission.INTERACT_ACROSS_USERS"}) public void startActivity(@NonNull android.content.Intent, @NonNull android.os.UserHandle, @Nullable android.app.Activity);
+    method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_PROFILES, "android.permission.INTERACT_ACROSS_USERS"}) public void startActivity(@NonNull android.content.Intent, @NonNull android.os.UserHandle, @Nullable android.app.Activity, @Nullable android.os.Bundle);
+    method public void startMainActivity(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    field public static final String ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED = "android.content.pm.action.CAN_INTERACT_ACROSS_PROFILES_CHANGED";
+  }
+
+  public final class FeatureGroupInfo implements android.os.Parcelable {
+    ctor public FeatureGroupInfo();
+    ctor public FeatureGroupInfo(android.content.pm.FeatureGroupInfo);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.FeatureGroupInfo> CREATOR;
+    field public android.content.pm.FeatureInfo[] features;
+  }
+
+  public class FeatureInfo implements android.os.Parcelable {
+    ctor public FeatureInfo();
+    ctor public FeatureInfo(android.content.pm.FeatureInfo);
+    method public int describeContents();
+    method public String getGlEsVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.FeatureInfo> CREATOR;
+    field public static final int FLAG_REQUIRED = 1; // 0x1
+    field public static final int GL_ES_VERSION_UNDEFINED = 0; // 0x0
+    field public int flags;
+    field public String name;
+    field public int reqGlEsVersion;
+    field public int version;
+  }
+
+  public final class InstallSourceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getInitiatingPackageName();
+    method @Nullable public android.content.pm.SigningInfo getInitiatingPackageSigningInfo();
+    method @Nullable public String getInstallingPackageName();
+    method @Nullable public String getOriginatingPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstallSourceInfo> CREATOR;
+  }
+
+  public class InstrumentationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor public InstrumentationInfo();
+    ctor public InstrumentationInfo(android.content.pm.InstrumentationInfo);
+    method public int describeContents();
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstrumentationInfo> CREATOR;
+    field public String dataDir;
+    field public boolean functionalTest;
+    field public boolean handleProfiling;
+    field public String publicSourceDir;
+    field public String sourceDir;
+    field public String[] splitNames;
+    field public String[] splitPublicSourceDirs;
+    field public String[] splitSourceDirs;
+    field public String targetPackage;
+    field public String targetProcesses;
+  }
+
+  public class LabeledIntent extends android.content.Intent {
+    ctor public LabeledIntent(android.content.Intent, String, int, int);
+    ctor public LabeledIntent(android.content.Intent, String, CharSequence, int);
+    ctor public LabeledIntent(String, int, int);
+    ctor public LabeledIntent(String, CharSequence, int);
+    method public int getIconResource();
+    method public int getLabelResource();
+    method public CharSequence getNonLocalizedLabel();
+    method public String getSourcePackage();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LabeledIntent> CREATOR;
+  }
+
+  public class LauncherActivityInfo {
+    method @NonNull public android.content.pm.ActivityInfo getActivityInfo();
+    method public android.content.pm.ApplicationInfo getApplicationInfo();
+    method public android.graphics.drawable.Drawable getBadgedIcon(int);
+    method public android.content.ComponentName getComponentName();
+    method public long getFirstInstallTime();
+    method public android.graphics.drawable.Drawable getIcon(int);
+    method public CharSequence getLabel();
+    method @FloatRange(from=0.0, to=1.0) public float getLoadingProgress();
+    method public String getName();
+    method public android.os.UserHandle getUser();
+  }
+
+  public class LauncherApps {
+    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(String, android.os.UserHandle);
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getAllPackageInstallerSessions();
+    method public android.content.pm.ApplicationInfo getApplicationInfo(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public android.content.pm.LauncherApps.PinItemRequest getPinItemRequest(android.content.Intent);
+    method public java.util.List<android.os.UserHandle> getProfiles();
+    method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
+    method @Nullable public android.content.IntentSender getShortcutConfigActivityIntent(@NonNull android.content.pm.LauncherActivityInfo);
+    method public java.util.List<android.content.pm.LauncherActivityInfo> getShortcutConfigActivityList(@Nullable String, @NonNull android.os.UserHandle);
+    method public android.graphics.drawable.Drawable getShortcutIconDrawable(@NonNull android.content.pm.ShortcutInfo, int);
+    method @Nullable public android.app.PendingIntent getShortcutIntent(@NonNull String, @NonNull String, @Nullable android.os.Bundle, @NonNull android.os.UserHandle);
+    method @Nullable public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(@NonNull android.content.pm.LauncherApps.ShortcutQuery, @NonNull android.os.UserHandle);
+    method @Nullable public android.os.Bundle getSuspendedPackageLauncherExtras(String, android.os.UserHandle);
+    method public boolean hasShortcutHostPermission();
+    method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
+    method public boolean isPackageEnabled(String, android.os.UserHandle);
+    method public void pinShortcuts(@NonNull String, @NonNull java.util.List<java.lang.String>, @NonNull android.os.UserHandle);
+    method public void registerCallback(android.content.pm.LauncherApps.Callback);
+    method public void registerCallback(android.content.pm.LauncherApps.Callback, android.os.Handler);
+    method public void registerPackageInstallerSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.content.pm.PackageInstaller.SessionCallback);
+    method public android.content.pm.LauncherActivityInfo resolveActivity(android.content.Intent, android.os.UserHandle);
+    method public boolean shouldHideFromSuggestions(@NonNull String, @NonNull android.os.UserHandle);
+    method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
+    method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
+    method public void startPackageInstallerSessionDetailsActivity(@NonNull android.content.pm.PackageInstaller.SessionInfo, @Nullable android.graphics.Rect, @Nullable android.os.Bundle);
+    method public void startShortcut(@NonNull String, @NonNull String, @Nullable android.graphics.Rect, @Nullable android.os.Bundle, @NonNull android.os.UserHandle);
+    method public void startShortcut(@NonNull android.content.pm.ShortcutInfo, @Nullable android.graphics.Rect, @Nullable android.os.Bundle);
+    method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
+    method public void unregisterPackageInstallerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback);
+    field public static final String ACTION_CONFIRM_PIN_APPWIDGET = "android.content.pm.action.CONFIRM_PIN_APPWIDGET";
+    field public static final String ACTION_CONFIRM_PIN_SHORTCUT = "android.content.pm.action.CONFIRM_PIN_SHORTCUT";
+    field public static final String EXTRA_PIN_ITEM_REQUEST = "android.content.pm.extra.PIN_ITEM_REQUEST";
+  }
+
+  public abstract static class LauncherApps.Callback {
+    ctor public LauncherApps.Callback();
+    method public abstract void onPackageAdded(String, android.os.UserHandle);
+    method public abstract void onPackageChanged(String, android.os.UserHandle);
+    method public void onPackageLoadingProgressChanged(@NonNull String, @NonNull android.os.UserHandle, float);
+    method public abstract void onPackageRemoved(String, android.os.UserHandle);
+    method public abstract void onPackagesAvailable(String[], android.os.UserHandle, boolean);
+    method public void onPackagesSuspended(String[], android.os.UserHandle);
+    method @Deprecated public void onPackagesSuspended(String[], android.os.UserHandle, @Nullable android.os.Bundle);
+    method public abstract void onPackagesUnavailable(String[], android.os.UserHandle, boolean);
+    method public void onPackagesUnsuspended(String[], android.os.UserHandle);
+    method public void onShortcutsChanged(@NonNull String, @NonNull java.util.List<android.content.pm.ShortcutInfo>, @NonNull android.os.UserHandle);
+  }
+
+  public static final class LauncherApps.PinItemRequest implements android.os.Parcelable {
+    method public boolean accept(@Nullable android.os.Bundle);
+    method public boolean accept();
+    method public int describeContents();
+    method @Nullable public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo(android.content.Context);
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getRequestType();
+    method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo();
+    method public boolean isValid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LauncherApps.PinItemRequest> CREATOR;
+    field public static final int REQUEST_TYPE_APPWIDGET = 2; // 0x2
+    field public static final int REQUEST_TYPE_SHORTCUT = 1; // 0x1
+  }
+
+  public static class LauncherApps.ShortcutQuery {
+    ctor public LauncherApps.ShortcutQuery();
+    method public android.content.pm.LauncherApps.ShortcutQuery setActivity(@Nullable android.content.ComponentName);
+    method public android.content.pm.LauncherApps.ShortcutQuery setChangedSince(long);
+    method @NonNull public android.content.pm.LauncherApps.ShortcutQuery setLocusIds(@Nullable java.util.List<android.content.LocusId>);
+    method public android.content.pm.LauncherApps.ShortcutQuery setPackage(@Nullable String);
+    method public android.content.pm.LauncherApps.ShortcutQuery setQueryFlags(int);
+    method public android.content.pm.LauncherApps.ShortcutQuery setShortcutIds(@Nullable java.util.List<java.lang.String>);
+    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
+    field public static final int FLAG_MATCH_CACHED = 16; // 0x10
+    field public static final int FLAG_MATCH_DYNAMIC = 1; // 0x1
+    field public static final int FLAG_MATCH_MANIFEST = 8; // 0x8
+    field public static final int FLAG_MATCH_PINNED = 2; // 0x2
+    field public static final int FLAG_MATCH_PINNED_BY_ANY_LAUNCHER = 1024; // 0x400
+  }
+
+  public final class ModuleInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getName();
+    method @Nullable public String getPackageName();
+    method public boolean isHidden();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ModuleInfo> CREATOR;
+  }
+
+  public class PackageInfo implements android.os.Parcelable {
+    ctor public PackageInfo();
+    method public int describeContents();
+    method public long getLongVersionCode();
+    method public void setLongVersionCode(long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageInfo> CREATOR;
+    field public static final int INSTALL_LOCATION_AUTO = 0; // 0x0
+    field public static final int INSTALL_LOCATION_INTERNAL_ONLY = 1; // 0x1
+    field public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2; // 0x2
+    field public static final int REQUESTED_PERMISSION_GRANTED = 2; // 0x2
+    field public static final int REQUESTED_PERMISSION_NEVER_FOR_LOCATION = 65536; // 0x10000
+    field public android.content.pm.ActivityInfo[] activities;
+    field public android.content.pm.ApplicationInfo applicationInfo;
+    field @Nullable public android.content.pm.Attribution[] attributions;
+    field public int baseRevisionCode;
+    field public android.content.pm.ConfigurationInfo[] configPreferences;
+    field public android.content.pm.FeatureGroupInfo[] featureGroups;
+    field public long firstInstallTime;
+    field public int[] gids;
+    field public int installLocation;
+    field public android.content.pm.InstrumentationInfo[] instrumentation;
+    field public boolean isApex;
+    field public long lastUpdateTime;
+    field public String packageName;
+    field public android.content.pm.PermissionInfo[] permissions;
+    field public android.content.pm.ProviderInfo[] providers;
+    field public android.content.pm.ActivityInfo[] receivers;
+    field public android.content.pm.FeatureInfo[] reqFeatures;
+    field public String[] requestedPermissions;
+    field public int[] requestedPermissionsFlags;
+    field public android.content.pm.ServiceInfo[] services;
+    field public String sharedUserId;
+    field public int sharedUserLabel;
+    field @Deprecated public android.content.pm.Signature[] signatures;
+    field public android.content.pm.SigningInfo signingInfo;
+    field public String[] splitNames;
+    field public int[] splitRevisionCodes;
+    field @Deprecated public int versionCode;
+    field public String versionName;
+  }
+
+  public class PackageInstaller {
+    method public void abandonSession(int);
+    method public int createSession(@NonNull android.content.pm.PackageInstaller.SessionParams) throws java.io.IOException;
+    method @Deprecated @Nullable public android.content.pm.PackageInstaller.SessionInfo getActiveStagedSession();
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getActiveStagedSessions();
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getAllSessions();
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getMySessions();
+    method @Nullable public android.content.pm.PackageInstaller.SessionInfo getSessionInfo(int);
+    method @NonNull public java.util.List<android.content.pm.PackageInstaller.SessionInfo> getStagedSessions();
+    method @RequiresPermission(allOf={android.Manifest.permission.INSTALL_PACKAGES, "com.android.permission.INSTALL_EXISTING_PACKAGES"}) public void installExistingPackage(@NonNull String, int, @Nullable android.content.IntentSender);
+    method @NonNull public android.content.pm.PackageInstaller.Session openSession(int) throws java.io.IOException;
+    method public void registerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback);
+    method public void registerSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull String, @NonNull android.content.IntentSender);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DELETE_PACKAGES, android.Manifest.permission.REQUEST_DELETE_PACKAGES}) public void uninstall(@NonNull android.content.pm.VersionedPackage, @NonNull android.content.IntentSender);
+    method @RequiresPermission(android.Manifest.permission.DELETE_PACKAGES) public void uninstallExistingPackage(@NonNull String, @Nullable android.content.IntentSender);
+    method public void unregisterSessionCallback(@NonNull android.content.pm.PackageInstaller.SessionCallback);
+    method public void updateSessionAppIcon(int, @Nullable android.graphics.Bitmap);
+    method public void updateSessionAppLabel(int, @Nullable CharSequence);
+    field public static final String ACTION_SESSION_COMMITTED = "android.content.pm.action.SESSION_COMMITTED";
+    field public static final String ACTION_SESSION_DETAILS = "android.content.pm.action.SESSION_DETAILS";
+    field public static final String ACTION_SESSION_UPDATED = "android.content.pm.action.SESSION_UPDATED";
+    field public static final String EXTRA_OTHER_PACKAGE_NAME = "android.content.pm.extra.OTHER_PACKAGE_NAME";
+    field public static final String EXTRA_PACKAGE_NAME = "android.content.pm.extra.PACKAGE_NAME";
+    field public static final String EXTRA_SESSION = "android.content.pm.extra.SESSION";
+    field public static final String EXTRA_SESSION_ID = "android.content.pm.extra.SESSION_ID";
+    field public static final String EXTRA_STATUS = "android.content.pm.extra.STATUS";
+    field public static final String EXTRA_STATUS_MESSAGE = "android.content.pm.extra.STATUS_MESSAGE";
+    field public static final String EXTRA_STORAGE_PATH = "android.content.pm.extra.STORAGE_PATH";
+    field public static final int STATUS_FAILURE = 1; // 0x1
+    field public static final int STATUS_FAILURE_ABORTED = 3; // 0x3
+    field public static final int STATUS_FAILURE_BLOCKED = 2; // 0x2
+    field public static final int STATUS_FAILURE_CONFLICT = 5; // 0x5
+    field public static final int STATUS_FAILURE_INCOMPATIBLE = 7; // 0x7
+    field public static final int STATUS_FAILURE_INVALID = 4; // 0x4
+    field public static final int STATUS_FAILURE_STORAGE = 6; // 0x6
+    field public static final int STATUS_PENDING_USER_ACTION = -1; // 0xffffffff
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public static class PackageInstaller.Session implements java.io.Closeable {
+    method public void abandon();
+    method public void addChildSessionId(int);
+    method public void close();
+    method public void commit(@NonNull android.content.IntentSender);
+    method public void fsync(@NonNull java.io.OutputStream) throws java.io.IOException;
+    method @NonNull public int[] getChildSessionIds();
+    method @NonNull public String[] getNames() throws java.io.IOException;
+    method public int getParentSessionId();
+    method public boolean isMultiPackage();
+    method public boolean isStaged();
+    method @NonNull public java.io.InputStream openRead(@NonNull String) throws java.io.IOException;
+    method @NonNull public java.io.OutputStream openWrite(@NonNull String, long, long) throws java.io.IOException;
+    method public void removeChildSessionId(int);
+    method public void removeSplit(@NonNull String) throws java.io.IOException;
+    method @Deprecated public void setChecksums(@NonNull String, @NonNull java.util.List<android.content.pm.Checksum>, @Nullable byte[]) throws java.io.IOException;
+    method public void setStagingProgress(float);
+    method public void transfer(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+  }
+
+  public abstract static class PackageInstaller.SessionCallback {
+    ctor public PackageInstaller.SessionCallback();
+    method public abstract void onActiveChanged(int, boolean);
+    method public abstract void onBadgingChanged(int);
+    method public abstract void onCreated(int);
+    method public abstract void onFinished(int, boolean);
+    method public abstract void onProgressChanged(int, float);
+  }
+
+  public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
+    method @Nullable public android.content.Intent createDetailsIntent();
+    method public int describeContents();
+    method @Nullable public android.graphics.Bitmap getAppIcon();
+    method @Nullable public CharSequence getAppLabel();
+    method @Nullable public String getAppPackageName();
+    method @NonNull public int[] getChildSessionIds();
+    method public long getCreatedMillis();
+    method public int getInstallLocation();
+    method public int getInstallReason();
+    method @Nullable public String getInstallerAttributionTag();
+    method @Nullable public String getInstallerPackageName();
+    method public int getMode();
+    method public int getOriginatingUid();
+    method @Nullable public android.net.Uri getOriginatingUri();
+    method public int getParentSessionId();
+    method public float getProgress();
+    method @Nullable public android.net.Uri getReferrerUri();
+    method public int getRequireUserAction();
+    method public int getSessionId();
+    method public long getSize();
+    method public int getStagedSessionErrorCode();
+    method @NonNull public String getStagedSessionErrorMessage();
+    method public long getUpdatedMillis();
+    method @NonNull public android.os.UserHandle getUser();
+    method public boolean hasParentSessionId();
+    method public boolean isActive();
+    method public boolean isCommitted();
+    method public boolean isMultiPackage();
+    method public boolean isSealed();
+    method public boolean isStaged();
+    method public boolean isStagedSessionActive();
+    method public boolean isStagedSessionApplied();
+    method public boolean isStagedSessionFailed();
+    method public boolean isStagedSessionReady();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.content.pm.PackageInstaller.SessionInfo> CREATOR;
+    field public static final int INVALID_ID = -1; // 0xffffffff
+    field public static final int STAGED_SESSION_ACTIVATION_FAILED = 2; // 0x2
+    field public static final int STAGED_SESSION_CONFLICT = 4; // 0x4
+    field public static final int STAGED_SESSION_NO_ERROR = 0; // 0x0
+    field public static final int STAGED_SESSION_UNKNOWN = 3; // 0x3
+    field public static final int STAGED_SESSION_VERIFICATION_FAILED = 1; // 0x1
+  }
+
+  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
+    ctor public PackageInstaller.SessionParams(int);
+    method public int describeContents();
+    method public void setAppIcon(@Nullable android.graphics.Bitmap);
+    method public void setAppLabel(@Nullable CharSequence);
+    method public void setAppPackageName(@Nullable String);
+    method @Deprecated public void setAutoRevokePermissionsMode(boolean);
+    method public void setInstallLocation(int);
+    method public void setInstallReason(int);
+    method public void setInstallScenario(int);
+    method public void setMultiPackage();
+    method public void setOriginatingUid(int);
+    method public void setOriginatingUri(@Nullable android.net.Uri);
+    method public void setReferrerUri(@Nullable android.net.Uri);
+    method public void setRequireUserAction(int);
+    method public void setSize(long);
+    method public void setWhitelistedRestrictedPermissions(@Nullable java.util.Set<java.lang.String>);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.content.pm.PackageInstaller.SessionParams> CREATOR;
+    field public static final int MODE_FULL_INSTALL = 1; // 0x1
+    field public static final int MODE_INHERIT_EXISTING = 2; // 0x2
+    field @NonNull public static final java.util.Set<java.lang.String> RESTRICTED_PERMISSIONS_ALL;
+    field public static final int USER_ACTION_NOT_REQUIRED = 2; // 0x2
+    field public static final int USER_ACTION_REQUIRED = 1; // 0x1
+    field public static final int USER_ACTION_UNSPECIFIED = 0; // 0x0
+  }
+
+  public class PackageItemInfo {
+    ctor public PackageItemInfo();
+    ctor public PackageItemInfo(android.content.pm.PackageItemInfo);
+    ctor protected PackageItemInfo(android.os.Parcel);
+    method protected void dumpBack(android.util.Printer, String);
+    method protected void dumpFront(android.util.Printer, String);
+    method public android.graphics.drawable.Drawable loadBanner(android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method @NonNull public CharSequence loadLabel(@NonNull android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadLogo(android.content.pm.PackageManager);
+    method public android.graphics.drawable.Drawable loadUnbadgedIcon(android.content.pm.PackageManager);
+    method public android.content.res.XmlResourceParser loadXmlMetaData(android.content.pm.PackageManager, String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public int banner;
+    field public int icon;
+    field public int labelRes;
+    field public int logo;
+    field public android.os.Bundle metaData;
+    field public String name;
+    field public CharSequence nonLocalizedLabel;
+    field public String packageName;
+  }
+
+  public static class PackageItemInfo.DisplayNameComparator implements java.util.Comparator<android.content.pm.PackageItemInfo> {
+    ctor public PackageItemInfo.DisplayNameComparator(android.content.pm.PackageManager);
+    method public final int compare(android.content.pm.PackageItemInfo, android.content.pm.PackageItemInfo);
+  }
+
+  public abstract class PackageManager {
+    ctor @Deprecated public PackageManager();
+    method @Deprecated public abstract void addPackageToPreferred(@NonNull String);
+    method public abstract boolean addPermission(@NonNull android.content.pm.PermissionInfo);
+    method public abstract boolean addPermissionAsync(@NonNull android.content.pm.PermissionInfo);
+    method @Deprecated public abstract void addPreferredActivity(@NonNull android.content.IntentFilter, int, @Nullable android.content.ComponentName[], @NonNull android.content.ComponentName);
+    method @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public boolean addWhitelistedRestrictedPermission(@NonNull String, @NonNull String, int);
+    method public abstract boolean canRequestPackageInstalls();
+    method public abstract String[] canonicalToCurrentPackageNames(@NonNull String[]);
+    method @CheckResult public abstract int checkPermission(@NonNull String, @NonNull String);
+    method @CheckResult public abstract int checkSignatures(@NonNull String, @NonNull String);
+    method @CheckResult public abstract int checkSignatures(int, int);
+    method public abstract void clearInstantAppCookie();
+    method @Deprecated public abstract void clearPackagePreferredActivities(@NonNull String);
+    method public abstract String[] currentToCanonicalPackageNames(@NonNull String[]);
+    method public abstract void extendVerificationTimeout(int, int, long);
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityBanner(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityBanner(@NonNull android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.graphics.drawable.Drawable getActivityIcon(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.graphics.drawable.Drawable getActivityIcon(@NonNull android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ActivityInfo getActivityInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityLogo(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.graphics.drawable.Drawable getActivityLogo(@NonNull android.content.Intent) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract java.util.List<android.content.pm.PermissionGroupInfo> getAllPermissionGroups(int);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationBanner(@NonNull android.content.pm.ApplicationInfo);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationBanner(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract int getApplicationEnabledSetting(@NonNull String);
+    method @NonNull public abstract android.graphics.drawable.Drawable getApplicationIcon(@NonNull android.content.pm.ApplicationInfo);
+    method @NonNull public abstract android.graphics.drawable.Drawable getApplicationIcon(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ApplicationInfo getApplicationInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract CharSequence getApplicationLabel(@NonNull android.content.pm.ApplicationInfo);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationLogo(@NonNull android.content.pm.ApplicationInfo);
+    method @Nullable public abstract android.graphics.drawable.Drawable getApplicationLogo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public CharSequence getBackgroundPermissionOptionLabel();
+    method @Nullable public abstract android.content.pm.ChangedPackages getChangedPackages(@IntRange(from=0) int);
+    method public abstract int getComponentEnabledSetting(@NonNull android.content.ComponentName);
+    method @NonNull public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
+    method @Nullable public abstract android.graphics.drawable.Drawable getDrawable(@NonNull String, @DrawableRes int, @Nullable android.content.pm.ApplicationInfo);
+    method public void getGroupOfPlatformPermission(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.String>);
+    method @NonNull public android.content.pm.InstallSourceInfo getInstallSourceInfo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
+    method @NonNull public java.util.List<android.content.pm.ModuleInfo> getInstalledModules(int);
+    method @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
+    method @Deprecated @Nullable public abstract String getInstallerPackageName(@NonNull String);
+    method @NonNull public abstract byte[] getInstantAppCookie();
+    method public abstract int getInstantAppCookieMaxBytes();
+    method @NonNull public abstract android.content.pm.InstrumentationInfo getInstrumentationInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.content.Intent getLaunchIntentForPackage(@NonNull String);
+    method @Nullable public abstract android.content.Intent getLeanbackLaunchIntentForPackage(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getMimeGroup(@NonNull String);
+    method @NonNull public android.content.pm.ModuleInfo getModuleInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract String getNameForUid(int);
+    method @Nullable public android.content.pm.PackageInfo getPackageArchiveInfo(@NonNull String, int);
+    method public abstract int[] getPackageGids(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract int[] getPackageGids(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.pm.PackageInfo getPackageInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.pm.PackageInfo getPackageInfo(@NonNull android.content.pm.VersionedPackage, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.PackageInstaller getPackageInstaller();
+    method public abstract int getPackageUid(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract String[] getPackagesForUid(int);
+    method @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPackagesHoldingPermissions(@NonNull String[], int);
+    method @NonNull public abstract android.content.pm.PermissionGroupInfo getPermissionGroupInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public abstract android.content.pm.PermissionInfo getPermissionInfo(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void getPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>);
+    method @Deprecated public abstract int getPreferredActivities(@NonNull java.util.List<android.content.IntentFilter>, @NonNull java.util.List<android.content.ComponentName>, @Nullable String);
+    method @Deprecated @NonNull public abstract java.util.List<android.content.pm.PackageInfo> getPreferredPackages(int);
+    method @NonNull public android.content.pm.PackageManager.Property getProperty(@NonNull String, @NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.content.pm.PackageManager.Property getProperty(@NonNull String, @NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ProviderInfo getProviderInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ActivityInfo getReceiverInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.res.Resources getResourcesForActivity(@NonNull android.content.ComponentName) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.res.Resources getResourcesForApplication(@NonNull android.content.pm.ApplicationInfo) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.content.res.Resources getResourcesForApplication(@NonNull android.content.pm.ApplicationInfo, @Nullable android.content.res.Configuration) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.res.Resources getResourcesForApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract android.content.pm.ServiceInfo getServiceInfo(@NonNull android.content.ComponentName, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public abstract java.util.List<android.content.pm.SharedLibraryInfo> getSharedLibraries(int);
+    method @Nullable public android.os.Bundle getSuspendedPackageAppExtras();
+    method public boolean getSyntheticAppDetailsActivityEnabled(@NonNull String);
+    method @NonNull public abstract android.content.pm.FeatureInfo[] getSystemAvailableFeatures();
+    method @Nullable public abstract String[] getSystemSharedLibraryNames();
+    method @IntRange(from=0) public int getTargetSdkVersion(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract CharSequence getText(@NonNull String, @StringRes int, @Nullable android.content.pm.ApplicationInfo);
+    method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedDrawableForDensity(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle, @Nullable android.graphics.Rect, int);
+    method @NonNull public abstract android.graphics.drawable.Drawable getUserBadgedIcon(@NonNull android.graphics.drawable.Drawable, @NonNull android.os.UserHandle);
+    method @NonNull public abstract CharSequence getUserBadgedLabel(@NonNull CharSequence, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions(@NonNull String, int);
+    method @Nullable public abstract android.content.res.XmlResourceParser getXml(@NonNull String, @XmlRes int, @Nullable android.content.pm.ApplicationInfo);
+    method public boolean hasSigningCertificate(@NonNull String, @NonNull byte[], int);
+    method public boolean hasSigningCertificate(int, @NonNull byte[], int);
+    method public abstract boolean hasSystemFeature(@NonNull String);
+    method public abstract boolean hasSystemFeature(@NonNull String, int);
+    method @RequiresPermission(value="android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS", conditional=true) public boolean isAutoRevokeWhitelisted(@NonNull String);
+    method public boolean isAutoRevokeWhitelisted();
+    method public boolean isDefaultApplicationIcon(@NonNull android.graphics.drawable.Drawable);
+    method public boolean isDeviceUpgrading();
+    method public abstract boolean isInstantApp();
+    method public abstract boolean isInstantApp(@NonNull String);
+    method public boolean isPackageSuspended(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public boolean isPackageSuspended();
+    method @CheckResult public abstract boolean isPermissionRevokedByPolicy(@NonNull String, @NonNull String);
+    method public abstract boolean isSafeMode();
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryActivityProperty(@NonNull String);
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryApplicationProperty(@NonNull String);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ProviderInfo> queryContentProviders(@Nullable String, int, int);
+    method @NonNull public abstract java.util.List<android.content.pm.InstrumentationInfo> queryInstrumentation(@NonNull String, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentActivities(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentActivityOptions(@Nullable android.content.ComponentName, @Nullable android.content.Intent[], @NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentContentProviders(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.ResolveInfo> queryIntentServices(@NonNull android.content.Intent, int);
+    method @NonNull public abstract java.util.List<android.content.pm.PermissionInfo> queryPermissionsByGroup(@Nullable String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryProviderProperty(@NonNull String);
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryReceiverProperty(@NonNull String);
+    method @NonNull public java.util.List<android.content.pm.PackageManager.Property> queryServiceProperty(@NonNull String);
+    method @Deprecated public abstract void removePackageFromPreferred(@NonNull String);
+    method public abstract void removePermission(@NonNull String);
+    method @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public boolean removeWhitelistedRestrictedPermission(@NonNull String, @NonNull String, int);
+    method public void requestChecksums(@NonNull String, boolean, int, @NonNull java.util.List<java.security.cert.Certificate>, @NonNull android.content.pm.PackageManager.OnChecksumsReadyListener) throws java.security.cert.CertificateEncodingException, android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract android.content.pm.ResolveInfo resolveActivity(@NonNull android.content.Intent, int);
+    method @Nullable public abstract android.content.pm.ProviderInfo resolveContentProvider(@NonNull String, int);
+    method @Nullable public abstract android.content.pm.ResolveInfo resolveService(@NonNull android.content.Intent, int);
+    method public abstract void setApplicationCategoryHint(@NonNull String, int);
+    method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public abstract void setApplicationEnabledSetting(@NonNull String, int, int);
+    method @RequiresPermission(value="android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS", conditional=true) public boolean setAutoRevokeWhitelisted(@NonNull String, boolean);
+    method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public abstract void setComponentEnabledSetting(@NonNull android.content.ComponentName, int, int);
+    method public abstract void setInstallerPackageName(@NonNull String, @Nullable String);
+    method public void setMimeGroup(@NonNull String, @NonNull java.util.Set<java.lang.String>);
+    method public abstract void updateInstantAppCookie(@Nullable byte[]);
+    method public abstract void verifyPendingInstall(int, int);
+    field public static final int CERT_INPUT_RAW_X509 = 0; // 0x0
+    field public static final int CERT_INPUT_SHA256 = 1; // 0x1
+    field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0
+    field public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; // 0x2
+    field public static final int COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED = 4; // 0x4
+    field public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; // 0x3
+    field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
+    field public static final int DONT_KILL_APP = 1; // 0x1
+    field public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
+    field public static final String EXTRA_VERIFICATION_RESULT = "android.content.pm.extra.VERIFICATION_RESULT";
+    field public static final String FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS = "android.software.activities_on_secondary_displays";
+    field public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets";
+    field public static final String FEATURE_AUDIO_LOW_LATENCY = "android.hardware.audio.low_latency";
+    field public static final String FEATURE_AUDIO_OUTPUT = "android.hardware.audio.output";
+    field public static final String FEATURE_AUDIO_PRO = "android.hardware.audio.pro";
+    field public static final String FEATURE_AUTOFILL = "android.software.autofill";
+    field public static final String FEATURE_AUTOMOTIVE = "android.hardware.type.automotive";
+    field public static final String FEATURE_BACKUP = "android.software.backup";
+    field public static final String FEATURE_BLUETOOTH = "android.hardware.bluetooth";
+    field public static final String FEATURE_BLUETOOTH_LE = "android.hardware.bluetooth_le";
+    field public static final String FEATURE_CAMERA = "android.hardware.camera";
+    field public static final String FEATURE_CAMERA_ANY = "android.hardware.camera.any";
+    field public static final String FEATURE_CAMERA_AR = "android.hardware.camera.ar";
+    field public static final String FEATURE_CAMERA_AUTOFOCUS = "android.hardware.camera.autofocus";
+    field public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING = "android.hardware.camera.capability.manual_post_processing";
+    field public static final String FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR = "android.hardware.camera.capability.manual_sensor";
+    field public static final String FEATURE_CAMERA_CAPABILITY_RAW = "android.hardware.camera.capability.raw";
+    field public static final String FEATURE_CAMERA_CONCURRENT = "android.hardware.camera.concurrent";
+    field public static final String FEATURE_CAMERA_EXTERNAL = "android.hardware.camera.external";
+    field public static final String FEATURE_CAMERA_FLASH = "android.hardware.camera.flash";
+    field public static final String FEATURE_CAMERA_FRONT = "android.hardware.camera.front";
+    field public static final String FEATURE_CAMERA_LEVEL_FULL = "android.hardware.camera.level.full";
+    field public static final String FEATURE_CANT_SAVE_STATE = "android.software.cant_save_state";
+    field public static final String FEATURE_COMPANION_DEVICE_SETUP = "android.software.companion_device_setup";
+    field public static final String FEATURE_CONNECTION_SERVICE = "android.software.connectionservice";
+    field public static final String FEATURE_CONSUMER_IR = "android.hardware.consumerir";
+    field public static final String FEATURE_CONTROLS = "android.software.controls";
+    field public static final String FEATURE_DEVICE_ADMIN = "android.software.device_admin";
+    field public static final String FEATURE_EMBEDDED = "android.hardware.type.embedded";
+    field public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
+    field public static final String FEATURE_FACE = "android.hardware.biometrics.face";
+    field public static final String FEATURE_FAKETOUCH = "android.hardware.faketouch";
+    field public static final String FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT = "android.hardware.faketouch.multitouch.distinct";
+    field public static final String FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND = "android.hardware.faketouch.multitouch.jazzhand";
+    field public static final String FEATURE_FINGERPRINT = "android.hardware.fingerprint";
+    field public static final String FEATURE_FREEFORM_WINDOW_MANAGEMENT = "android.software.freeform_window_management";
+    field public static final String FEATURE_GAMEPAD = "android.hardware.gamepad";
+    field public static final String FEATURE_HARDWARE_KEYSTORE = "android.hardware.hardware_keystore";
+    field public static final String FEATURE_HIFI_SENSORS = "android.hardware.sensor.hifi_sensors";
+    field public static final String FEATURE_HOME_SCREEN = "android.software.home_screen";
+    field public static final String FEATURE_IDENTITY_CREDENTIAL_HARDWARE = "android.hardware.identity_credential";
+    field public static final String FEATURE_IDENTITY_CREDENTIAL_HARDWARE_DIRECT_ACCESS = "android.hardware.identity_credential_direct_access";
+    field public static final String FEATURE_INPUT_METHODS = "android.software.input_methods";
+    field public static final String FEATURE_IPSEC_TUNNELS = "android.software.ipsec_tunnels";
+    field public static final String FEATURE_IRIS = "android.hardware.biometrics.iris";
+    field public static final String FEATURE_KEYSTORE_APP_ATTEST_KEY = "android.hardware.keystore.app_attest_key";
+    field public static final String FEATURE_KEYSTORE_LIMITED_USE_KEY = "android.hardware.keystore.limited_use_key";
+    field public static final String FEATURE_KEYSTORE_SINGLE_USE_KEY = "android.hardware.keystore.single_use_key";
+    field public static final String FEATURE_LEANBACK = "android.software.leanback";
+    field public static final String FEATURE_LEANBACK_ONLY = "android.software.leanback_only";
+    field public static final String FEATURE_LIVE_TV = "android.software.live_tv";
+    field public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
+    field public static final String FEATURE_LOCATION = "android.hardware.location";
+    field public static final String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
+    field public static final String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
+    field public static final String FEATURE_MANAGED_USERS = "android.software.managed_users";
+    field public static final String FEATURE_MICROPHONE = "android.hardware.microphone";
+    field public static final String FEATURE_MIDI = "android.software.midi";
+    field public static final String FEATURE_NFC = "android.hardware.nfc";
+    field public static final String FEATURE_NFC_BEAM = "android.sofware.nfc.beam";
+    field public static final String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
+    field public static final String FEATURE_NFC_HOST_CARD_EMULATION_NFCF = "android.hardware.nfc.hcef";
+    field public static final String FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE = "android.hardware.nfc.ese";
+    field public static final String FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC = "android.hardware.nfc.uicc";
+    field public static final String FEATURE_OPENGLES_DEQP_LEVEL = "android.software.opengles.deqp.level";
+    field public static final String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep";
+    field public static final String FEATURE_PC = "android.hardware.type.pc";
+    field public static final String FEATURE_PICTURE_IN_PICTURE = "android.software.picture_in_picture";
+    field public static final String FEATURE_PRINTING = "android.software.print";
+    field public static final String FEATURE_RAM_LOW = "android.hardware.ram.low";
+    field public static final String FEATURE_RAM_NORMAL = "android.hardware.ram.normal";
+    field public static final String FEATURE_SCREEN_LANDSCAPE = "android.hardware.screen.landscape";
+    field public static final String FEATURE_SCREEN_PORTRAIT = "android.hardware.screen.portrait";
+    field public static final String FEATURE_SECURELY_REMOVES_USERS = "android.software.securely_removes_users";
+    field public static final String FEATURE_SECURE_LOCK_SCREEN = "android.software.secure_lock_screen";
+    field public static final String FEATURE_SECURITY_MODEL_COMPATIBLE = "android.hardware.security.model.compatible";
+    field public static final String FEATURE_SENSOR_ACCELEROMETER = "android.hardware.sensor.accelerometer";
+    field public static final String FEATURE_SENSOR_AMBIENT_TEMPERATURE = "android.hardware.sensor.ambient_temperature";
+    field public static final String FEATURE_SENSOR_BAROMETER = "android.hardware.sensor.barometer";
+    field public static final String FEATURE_SENSOR_COMPASS = "android.hardware.sensor.compass";
+    field public static final String FEATURE_SENSOR_GYROSCOPE = "android.hardware.sensor.gyroscope";
+    field public static final String FEATURE_SENSOR_HEART_RATE = "android.hardware.sensor.heartrate";
+    field public static final String FEATURE_SENSOR_HEART_RATE_ECG = "android.hardware.sensor.heartrate.ecg";
+    field public static final String FEATURE_SENSOR_HINGE_ANGLE = "android.hardware.sensor.hinge_angle";
+    field public static final String FEATURE_SENSOR_LIGHT = "android.hardware.sensor.light";
+    field public static final String FEATURE_SENSOR_PROXIMITY = "android.hardware.sensor.proximity";
+    field public static final String FEATURE_SENSOR_RELATIVE_HUMIDITY = "android.hardware.sensor.relative_humidity";
+    field public static final String FEATURE_SENSOR_STEP_COUNTER = "android.hardware.sensor.stepcounter";
+    field public static final String FEATURE_SENSOR_STEP_DETECTOR = "android.hardware.sensor.stepdetector";
+    field public static final String FEATURE_SE_OMAPI_ESE = "android.hardware.se.omapi.ese";
+    field public static final String FEATURE_SE_OMAPI_SD = "android.hardware.se.omapi.sd";
+    field public static final String FEATURE_SE_OMAPI_UICC = "android.hardware.se.omapi.uicc";
+    field public static final String FEATURE_SIP = "android.software.sip";
+    field public static final String FEATURE_SIP_VOIP = "android.software.sip.voip";
+    field public static final String FEATURE_STRONGBOX_KEYSTORE = "android.hardware.strongbox_keystore";
+    field public static final String FEATURE_TELEPHONY = "android.hardware.telephony";
+    field public static final String FEATURE_TELEPHONY_CDMA = "android.hardware.telephony.cdma";
+    field public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc";
+    field public static final String FEATURE_TELEPHONY_GSM = "android.hardware.telephony.gsm";
+    field public static final String FEATURE_TELEPHONY_IMS = "android.hardware.telephony.ims";
+    field public static final String FEATURE_TELEPHONY_MBMS = "android.hardware.telephony.mbms";
+    field @Deprecated public static final String FEATURE_TELEVISION = "android.hardware.type.television";
+    field public static final String FEATURE_TOUCHSCREEN = "android.hardware.touchscreen";
+    field public static final String FEATURE_TOUCHSCREEN_MULTITOUCH = "android.hardware.touchscreen.multitouch";
+    field public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT = "android.hardware.touchscreen.multitouch.distinct";
+    field public static final String FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND = "android.hardware.touchscreen.multitouch.jazzhand";
+    field public static final String FEATURE_USB_ACCESSORY = "android.hardware.usb.accessory";
+    field public static final String FEATURE_USB_HOST = "android.hardware.usb.host";
+    field public static final String FEATURE_VERIFIED_BOOT = "android.software.verified_boot";
+    field public static final String FEATURE_VR_HEADTRACKING = "android.hardware.vr.headtracking";
+    field @Deprecated public static final String FEATURE_VR_MODE = "android.software.vr.mode";
+    field public static final String FEATURE_VR_MODE_HIGH_PERFORMANCE = "android.hardware.vr.high_performance";
+    field public static final String FEATURE_VULKAN_DEQP_LEVEL = "android.software.vulkan.deqp.level";
+    field public static final String FEATURE_VULKAN_HARDWARE_COMPUTE = "android.hardware.vulkan.compute";
+    field public static final String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level";
+    field public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version";
+    field public static final String FEATURE_WATCH = "android.hardware.type.watch";
+    field public static final String FEATURE_WEBVIEW = "android.software.webview";
+    field public static final String FEATURE_WIFI = "android.hardware.wifi";
+    field public static final String FEATURE_WIFI_AWARE = "android.hardware.wifi.aware";
+    field public static final String FEATURE_WIFI_DIRECT = "android.hardware.wifi.direct";
+    field public static final String FEATURE_WIFI_PASSPOINT = "android.hardware.wifi.passpoint";
+    field public static final String FEATURE_WIFI_RTT = "android.hardware.wifi.rtt";
+    field public static final int FLAG_PERMISSION_WHITELIST_INSTALLER = 2; // 0x2
+    field public static final int FLAG_PERMISSION_WHITELIST_SYSTEM = 1; // 0x1
+    field public static final int FLAG_PERMISSION_WHITELIST_UPGRADE = 4; // 0x4
+    field public static final int GET_ACTIVITIES = 1; // 0x1
+    field public static final int GET_ATTRIBUTIONS = -2147483648; // 0x80000000
+    field public static final int GET_CONFIGURATIONS = 16384; // 0x4000
+    field @Deprecated public static final int GET_DISABLED_COMPONENTS = 512; // 0x200
+    field @Deprecated public static final int GET_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
+    field public static final int GET_GIDS = 256; // 0x100
+    field public static final int GET_INSTRUMENTATION = 16; // 0x10
+    field @Deprecated public static final int GET_INTENT_FILTERS = 32; // 0x20
+    field public static final int GET_META_DATA = 128; // 0x80
+    field public static final int GET_PERMISSIONS = 4096; // 0x1000
+    field public static final int GET_PROVIDERS = 8; // 0x8
+    field public static final int GET_RECEIVERS = 2; // 0x2
+    field public static final int GET_RESOLVED_FILTER = 64; // 0x40
+    field public static final int GET_SERVICES = 4; // 0x4
+    field public static final int GET_SHARED_LIBRARY_FILES = 1024; // 0x400
+    field @Deprecated public static final int GET_SIGNATURES = 64; // 0x40
+    field public static final int GET_SIGNING_CERTIFICATES = 134217728; // 0x8000000
+    field @Deprecated public static final int GET_UNINSTALLED_PACKAGES = 8192; // 0x2000
+    field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800
+    field public static final int INSTALL_REASON_DEVICE_RESTORE = 2; // 0x2
+    field public static final int INSTALL_REASON_DEVICE_SETUP = 3; // 0x3
+    field public static final int INSTALL_REASON_POLICY = 1; // 0x1
+    field public static final int INSTALL_REASON_UNKNOWN = 0; // 0x0
+    field public static final int INSTALL_REASON_USER = 4; // 0x4
+    field public static final int INSTALL_SCENARIO_BULK = 2; // 0x2
+    field public static final int INSTALL_SCENARIO_BULK_SECONDARY = 3; // 0x3
+    field public static final int INSTALL_SCENARIO_DEFAULT = 0; // 0x0
+    field public static final int INSTALL_SCENARIO_FAST = 1; // 0x1
+    field public static final int MATCH_ALL = 131072; // 0x20000
+    field public static final int MATCH_APEX = 1073741824; // 0x40000000
+    field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000
+    field public static final int MATCH_DIRECT_BOOT_AUTO = 268435456; // 0x10000000
+    field public static final int MATCH_DIRECT_BOOT_AWARE = 524288; // 0x80000
+    field public static final int MATCH_DIRECT_BOOT_UNAWARE = 262144; // 0x40000
+    field public static final int MATCH_DISABLED_COMPONENTS = 512; // 0x200
+    field public static final int MATCH_DISABLED_UNTIL_USED_COMPONENTS = 32768; // 0x8000
+    field public static final int MATCH_SYSTEM_ONLY = 1048576; // 0x100000
+    field public static final int MATCH_UNINSTALLED_PACKAGES = 8192; // 0x2000
+    field public static final long MAXIMUM_VERIFICATION_TIMEOUT = 3600000L; // 0x36ee80L
+    field public static final int PERMISSION_DENIED = -1; // 0xffffffff
+    field public static final int PERMISSION_GRANTED = 0; // 0x0
+    field public static final String PROPERTY_MEDIA_CAPABILITIES = "android.media.PROPERTY_MEDIA_CAPABILITIES";
+    field public static final int SIGNATURE_FIRST_NOT_SIGNED = -1; // 0xffffffff
+    field public static final int SIGNATURE_MATCH = 0; // 0x0
+    field public static final int SIGNATURE_NEITHER_SIGNED = 1; // 0x1
+    field public static final int SIGNATURE_NO_MATCH = -3; // 0xfffffffd
+    field public static final int SIGNATURE_SECOND_NOT_SIGNED = -2; // 0xfffffffe
+    field public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; // 0xfffffffc
+    field public static final int SYNCHRONOUS = 2; // 0x2
+    field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_ALL;
+    field @NonNull public static final java.util.List<java.security.cert.Certificate> TRUST_NONE;
+    field public static final int VERIFICATION_ALLOW = 1; // 0x1
+    field public static final int VERIFICATION_REJECT = -1; // 0xffffffff
+    field public static final int VERSION_CODE_HIGHEST = -1; // 0xffffffff
+  }
+
+  public static class PackageManager.NameNotFoundException extends android.util.AndroidException {
+    ctor public PackageManager.NameNotFoundException();
+    ctor public PackageManager.NameNotFoundException(String);
+  }
+
+  @java.lang.FunctionalInterface public static interface PackageManager.OnChecksumsReadyListener {
+    method public void onChecksumsReady(@NonNull java.util.List<android.content.pm.ApkChecksum>);
+  }
+
+  public static final class PackageManager.Property implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getBoolean();
+    method @Nullable public String getClassName();
+    method public float getFloat();
+    method public int getInteger();
+    method @NonNull public String getName();
+    method @NonNull public String getPackageName();
+    method public int getResourceId();
+    method @Nullable public String getString();
+    method public boolean isBoolean();
+    method public boolean isFloat();
+    method public boolean isInteger();
+    method public boolean isResourceId();
+    method public boolean isString();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageManager.Property> CREATOR;
+  }
+
+  @Deprecated public class PackageStats implements android.os.Parcelable {
+    ctor @Deprecated public PackageStats(String);
+    ctor @Deprecated public PackageStats(android.os.Parcel);
+    ctor @Deprecated public PackageStats(android.content.pm.PackageStats);
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PackageStats> CREATOR;
+    field @Deprecated public long cacheSize;
+    field @Deprecated public long codeSize;
+    field @Deprecated public long dataSize;
+    field @Deprecated public long externalCacheSize;
+    field @Deprecated public long externalCodeSize;
+    field @Deprecated public long externalDataSize;
+    field @Deprecated public long externalMediaSize;
+    field @Deprecated public long externalObbSize;
+    field @Deprecated public String packageName;
+  }
+
+  public class PathPermission extends android.os.PatternMatcher {
+    ctor public PathPermission(String, int, String, String);
+    ctor public PathPermission(android.os.Parcel);
+    method public String getReadPermission();
+    method public String getWritePermission();
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PathPermission> CREATOR;
+  }
+
+  public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor @Deprecated public PermissionGroupInfo();
+    ctor @Deprecated public PermissionGroupInfo(@NonNull android.content.pm.PermissionGroupInfo);
+    method public int describeContents();
+    method @Nullable public CharSequence loadDescription(@NonNull android.content.pm.PackageManager);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PermissionGroupInfo> CREATOR;
+    field public static final int FLAG_PERSONAL_INFO = 1; // 0x1
+    field @StringRes public int descriptionRes;
+    field public int flags;
+    field @Nullable public CharSequence nonLocalizedDescription;
+    field public int priority;
+  }
+
+  public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    ctor @Deprecated public PermissionInfo();
+    ctor @Deprecated public PermissionInfo(@NonNull android.content.pm.PermissionInfo);
+    method public int describeContents();
+    method public int getProtection();
+    method public int getProtectionFlags();
+    method @Nullable public CharSequence loadDescription(@NonNull android.content.pm.PackageManager);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.PermissionInfo> CREATOR;
+    field public static final int FLAG_COSTS_MONEY = 1; // 0x1
+    field public static final int FLAG_HARD_RESTRICTED = 4; // 0x4
+    field public static final int FLAG_IMMUTABLY_RESTRICTED = 16; // 0x10
+    field public static final int FLAG_INSTALLED = 1073741824; // 0x40000000
+    field public static final int FLAG_SOFT_RESTRICTED = 8; // 0x8
+    field public static final int PROTECTION_DANGEROUS = 1; // 0x1
+    field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40
+    field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20
+    field public static final int PROTECTION_FLAG_INSTALLER = 256; // 0x100
+    field public static final int PROTECTION_FLAG_INSTANT = 4096; // 0x1000
+    field public static final int PROTECTION_FLAG_PRE23 = 128; // 0x80
+    field public static final int PROTECTION_FLAG_PREINSTALLED = 1024; // 0x400
+    field public static final int PROTECTION_FLAG_PRIVILEGED = 16; // 0x10
+    field public static final int PROTECTION_FLAG_RUNTIME_ONLY = 8192; // 0x2000
+    field public static final int PROTECTION_FLAG_SETUP = 2048; // 0x800
+    field @Deprecated public static final int PROTECTION_FLAG_SYSTEM = 16; // 0x10
+    field public static final int PROTECTION_FLAG_VERIFIER = 512; // 0x200
+    field public static final int PROTECTION_INTERNAL = 4; // 0x4
+    field @Deprecated public static final int PROTECTION_MASK_BASE = 15; // 0xf
+    field @Deprecated public static final int PROTECTION_MASK_FLAGS = 65520; // 0xfff0
+    field public static final int PROTECTION_NORMAL = 0; // 0x0
+    field public static final int PROTECTION_SIGNATURE = 2; // 0x2
+    field @Deprecated public static final int PROTECTION_SIGNATURE_OR_SYSTEM = 3; // 0x3
+    field @StringRes public int descriptionRes;
+    field public int flags;
+    field @Nullable public String group;
+    field @Nullable public CharSequence nonLocalizedDescription;
+    field @Deprecated public int protectionLevel;
+  }
+
+  public final class ProviderInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    ctor public ProviderInfo();
+    ctor public ProviderInfo(android.content.pm.ProviderInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ProviderInfo> CREATOR;
+    field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
+    field public String authority;
+    field public int flags;
+    field public boolean forceUriPermissions;
+    field public boolean grantUriPermissions;
+    field public int initOrder;
+    field @Deprecated public boolean isSyncable;
+    field public boolean multiprocess;
+    field public android.content.pm.PathPermission[] pathPermissions;
+    field public String readPermission;
+    field public android.os.PatternMatcher[] uriPermissionPatterns;
+    field public String writePermission;
+  }
+
+  public class ResolveInfo implements android.os.Parcelable {
+    ctor public ResolveInfo();
+    ctor public ResolveInfo(android.content.pm.ResolveInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public final int getIconResource();
+    method public boolean isCrossProfileIntentForwarderActivity();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ResolveInfo> CREATOR;
+    field public android.content.pm.ActivityInfo activityInfo;
+    field public android.content.IntentFilter filter;
+    field public int icon;
+    field public boolean isDefault;
+    field public boolean isInstantAppAvailable;
+    field public int labelRes;
+    field public int match;
+    field public CharSequence nonLocalizedLabel;
+    field public int preferredOrder;
+    field public int priority;
+    field public android.content.pm.ProviderInfo providerInfo;
+    field public String resolvePackageName;
+    field public android.content.pm.ServiceInfo serviceInfo;
+    field public int specificIndex;
+  }
+
+  public static class ResolveInfo.DisplayNameComparator implements java.util.Comparator<android.content.pm.ResolveInfo> {
+    ctor public ResolveInfo.DisplayNameComparator(android.content.pm.PackageManager);
+    method public final int compare(android.content.pm.ResolveInfo, android.content.pm.ResolveInfo);
+  }
+
+  public class ServiceInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    ctor public ServiceInfo();
+    ctor public ServiceInfo(android.content.pm.ServiceInfo);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public int getForegroundServiceType();
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ServiceInfo> CREATOR;
+    field public static final int FLAG_EXTERNAL_SERVICE = 4; // 0x4
+    field public static final int FLAG_ISOLATED_PROCESS = 2; // 0x2
+    field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
+    field public static final int FLAG_STOP_WITH_TASK = 1; // 0x1
+    field public static final int FLAG_USE_APP_ZYGOTE = 8; // 0x8
+    field public static final int FOREGROUND_SERVICE_TYPE_CAMERA = 64; // 0x40
+    field public static final int FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE = 16; // 0x10
+    field public static final int FOREGROUND_SERVICE_TYPE_DATA_SYNC = 1; // 0x1
+    field public static final int FOREGROUND_SERVICE_TYPE_LOCATION = 8; // 0x8
+    field public static final int FOREGROUND_SERVICE_TYPE_MANIFEST = -1; // 0xffffffff
+    field public static final int FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK = 2; // 0x2
+    field public static final int FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION = 32; // 0x20
+    field public static final int FOREGROUND_SERVICE_TYPE_MICROPHONE = 128; // 0x80
+    field public static final int FOREGROUND_SERVICE_TYPE_NONE = 0; // 0x0
+    field public static final int FOREGROUND_SERVICE_TYPE_PHONE_CALL = 4; // 0x4
+    field public int flags;
+    field public String permission;
+  }
+
+  public final class SharedLibraryInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.pm.VersionedPackage getDeclaringPackage();
+    method @NonNull public java.util.List<android.content.pm.VersionedPackage> getDependentPackages();
+    method @IntRange(from=0xffffffff) public long getLongVersion();
+    method public String getName();
+    method public int getType();
+    method @Deprecated @IntRange(from=0xffffffff) public int getVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SharedLibraryInfo> CREATOR;
+    field public static final int TYPE_BUILTIN = 0; // 0x0
+    field public static final int TYPE_DYNAMIC = 1; // 0x1
+    field public static final int TYPE_STATIC = 2; // 0x2
+    field public static final int VERSION_UNDEFINED = -1; // 0xffffffff
+  }
+
+  public final class ShortcutInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.content.ComponentName getActivity();
+    method @Nullable public java.util.Set<java.lang.String> getCategories();
+    method @Nullable public CharSequence getDisabledMessage();
+    method public int getDisabledReason();
+    method @Nullable public android.os.PersistableBundle getExtras();
+    method @NonNull public String getId();
+    method @Nullable public android.content.Intent getIntent();
+    method @Nullable public android.content.Intent[] getIntents();
+    method public long getLastChangedTimestamp();
+    method @Nullable public android.content.LocusId getLocusId();
+    method @Nullable public CharSequence getLongLabel();
+    method @NonNull public String getPackage();
+    method public int getRank();
+    method @Nullable public CharSequence getShortLabel();
+    method public android.os.UserHandle getUserHandle();
+    method public boolean hasKeyFieldsOnly();
+    method public boolean isCached();
+    method public boolean isDeclaredInManifest();
+    method public boolean isDynamic();
+    method public boolean isEnabled();
+    method public boolean isImmutable();
+    method public boolean isPinned();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ShortcutInfo> CREATOR;
+    field public static final int DISABLED_REASON_APP_CHANGED = 2; // 0x2
+    field public static final int DISABLED_REASON_BACKUP_NOT_SUPPORTED = 101; // 0x65
+    field public static final int DISABLED_REASON_BY_APP = 1; // 0x1
+    field public static final int DISABLED_REASON_NOT_DISABLED = 0; // 0x0
+    field public static final int DISABLED_REASON_OTHER_RESTORE_ISSUE = 103; // 0x67
+    field public static final int DISABLED_REASON_SIGNATURE_MISMATCH = 102; // 0x66
+    field public static final int DISABLED_REASON_UNKNOWN = 3; // 0x3
+    field public static final int DISABLED_REASON_VERSION_LOWER = 100; // 0x64
+    field public static final String SHORTCUT_CATEGORY_CONVERSATION = "android.shortcut.conversation";
+  }
+
+  public static class ShortcutInfo.Builder {
+    ctor public ShortcutInfo.Builder(android.content.Context, String);
+    method @NonNull public android.content.pm.ShortcutInfo build();
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setActivity(@NonNull android.content.ComponentName);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setCategories(java.util.Set<java.lang.String>);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setDisabledMessage(@NonNull CharSequence);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setExtras(@NonNull android.os.PersistableBundle);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setIntent(@NonNull android.content.Intent);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setIntents(@NonNull android.content.Intent[]);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setLocusId(@NonNull android.content.LocusId);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setLongLabel(@NonNull CharSequence);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setLongLived(boolean);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setPerson(@NonNull android.app.Person);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setPersons(@NonNull android.app.Person[]);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setRank(int);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setShortLabel(@NonNull CharSequence);
+    method @NonNull public android.content.pm.ShortcutInfo.Builder setStartingTheme(int);
+  }
+
+  public class ShortcutManager {
+    method @WorkerThread public boolean addDynamicShortcuts(@NonNull java.util.List<android.content.pm.ShortcutInfo>);
+    method @WorkerThread public android.content.Intent createShortcutResultIntent(@NonNull android.content.pm.ShortcutInfo);
+    method public void disableShortcuts(@NonNull java.util.List<java.lang.String>);
+    method public void disableShortcuts(@NonNull java.util.List<java.lang.String>, CharSequence);
+    method public void enableShortcuts(@NonNull java.util.List<java.lang.String>);
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
+    method public int getIconMaxHeight();
+    method public int getIconMaxWidth();
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getManifestShortcuts();
+    method public int getMaxShortcutCountPerActivity();
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
+    method @NonNull @WorkerThread public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(int);
+    method public boolean isRateLimitingActive();
+    method public boolean isRequestPinShortcutSupported();
+    method public void pushDynamicShortcut(@NonNull android.content.pm.ShortcutInfo);
+    method public void removeAllDynamicShortcuts();
+    method public void removeDynamicShortcuts(@NonNull java.util.List<java.lang.String>);
+    method public void removeLongLivedShortcuts(@NonNull java.util.List<java.lang.String>);
+    method public void reportShortcutUsed(String);
+    method @WorkerThread public boolean requestPinShortcut(@NonNull android.content.pm.ShortcutInfo, @Nullable android.content.IntentSender);
+    method @WorkerThread public boolean setDynamicShortcuts(@NonNull java.util.List<android.content.pm.ShortcutInfo>);
+    method @WorkerThread public boolean updateShortcuts(@NonNull java.util.List<android.content.pm.ShortcutInfo>);
+    field public static final int FLAG_MATCH_CACHED = 8; // 0x8
+    field public static final int FLAG_MATCH_DYNAMIC = 2; // 0x2
+    field public static final int FLAG_MATCH_MANIFEST = 1; // 0x1
+    field public static final int FLAG_MATCH_PINNED = 4; // 0x4
+  }
+
+  public class Signature implements android.os.Parcelable {
+    ctor public Signature(byte[]);
+    ctor public Signature(String);
+    method public int describeContents();
+    method public byte[] toByteArray();
+    method public char[] toChars();
+    method public char[] toChars(char[], int[]);
+    method public String toCharsString();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.Signature> CREATOR;
+  }
+
+  public final class SigningInfo implements android.os.Parcelable {
+    ctor public SigningInfo();
+    ctor public SigningInfo(android.content.pm.SigningInfo);
+    method public int describeContents();
+    method public android.content.pm.Signature[] getApkContentsSigners();
+    method public android.content.pm.Signature[] getSigningCertificateHistory();
+    method public boolean hasMultipleSigners();
+    method public boolean hasPastSigningCertificates();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SigningInfo> CREATOR;
+  }
+
+  public final class VersionedPackage implements android.os.Parcelable {
+    ctor public VersionedPackage(@NonNull String, int);
+    ctor public VersionedPackage(@NonNull String, long);
+    method public int describeContents();
+    method public long getLongVersionCode();
+    method @NonNull public String getPackageName();
+    method @Deprecated public int getVersionCode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.VersionedPackage> CREATOR;
+  }
+
+}
+
+package android.content.pm.verify.domain {
+
+  public final class DomainVerificationManager {
+    method @Nullable public android.content.pm.verify.domain.DomainVerificationUserState getDomainVerificationUserState(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+  }
+
+  public final class DomainVerificationUserState implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.Integer> getHostToStateMap();
+    method @NonNull public String getPackageName();
+    method @NonNull public android.os.UserHandle getUser();
+    method @NonNull public boolean isLinkHandlingAllowed();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainVerificationUserState> CREATOR;
+    field public static final int DOMAIN_STATE_NONE = 0; // 0x0
+    field public static final int DOMAIN_STATE_SELECTED = 1; // 0x1
+    field public static final int DOMAIN_STATE_VERIFIED = 2; // 0x2
+  }
+
+}
+
+package android.content.res {
+
+  public class AssetFileDescriptor implements java.io.Closeable android.os.Parcelable {
+    ctor public AssetFileDescriptor(android.os.ParcelFileDescriptor, long, long);
+    ctor public AssetFileDescriptor(android.os.ParcelFileDescriptor, long, long, android.os.Bundle);
+    method public void close() throws java.io.IOException;
+    method public java.io.FileInputStream createInputStream() throws java.io.IOException;
+    method public java.io.FileOutputStream createOutputStream() throws java.io.IOException;
+    method public int describeContents();
+    method public long getDeclaredLength();
+    method public android.os.Bundle getExtras();
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public long getLength();
+    method public android.os.ParcelFileDescriptor getParcelFileDescriptor();
+    method public long getStartOffset();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.AssetFileDescriptor> CREATOR;
+    field public static final long UNKNOWN_LENGTH = -1L; // 0xffffffffffffffffL
+  }
+
+  public static class AssetFileDescriptor.AutoCloseInputStream extends android.os.ParcelFileDescriptor.AutoCloseInputStream {
+    ctor public AssetFileDescriptor.AutoCloseInputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+  }
+
+  public static class AssetFileDescriptor.AutoCloseOutputStream extends android.os.ParcelFileDescriptor.AutoCloseOutputStream {
+    ctor public AssetFileDescriptor.AutoCloseOutputStream(android.content.res.AssetFileDescriptor) throws java.io.IOException;
+  }
+
+  public final class AssetManager implements java.lang.AutoCloseable {
+    method public void close();
+    method public String[] getLocales();
+    method @Nullable public String[] list(@NonNull String) throws java.io.IOException;
+    method @NonNull public java.io.InputStream open(@NonNull String) throws java.io.IOException;
+    method @NonNull public java.io.InputStream open(@NonNull String, int) throws java.io.IOException;
+    method @NonNull public android.content.res.AssetFileDescriptor openFd(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.AssetFileDescriptor openNonAssetFd(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.AssetFileDescriptor openNonAssetFd(int, @NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.XmlResourceParser openXmlResourceParser(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.content.res.XmlResourceParser openXmlResourceParser(int, @NonNull String) throws java.io.IOException;
+    field public static final int ACCESS_BUFFER = 3; // 0x3
+    field public static final int ACCESS_RANDOM = 1; // 0x1
+    field public static final int ACCESS_STREAMING = 2; // 0x2
+    field public static final int ACCESS_UNKNOWN = 0; // 0x0
+  }
+
+  public final class AssetManager.AssetInputStream extends java.io.InputStream {
+    method public int read() throws java.io.IOException;
+  }
+
+  public class ColorStateList implements android.os.Parcelable {
+    ctor public ColorStateList(int[][], @ColorInt int[]);
+    method @Deprecated @NonNull public static android.content.res.ColorStateList createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.content.res.ColorStateList createFromXml(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int describeContents();
+    method public int getChangingConfigurations();
+    method public int getColorForState(@Nullable int[], int);
+    method @ColorInt public int getDefaultColor();
+    method public boolean isOpaque();
+    method public boolean isStateful();
+    method @NonNull public static android.content.res.ColorStateList valueOf(@ColorInt int);
+    method @NonNull public android.content.res.ColorStateList withAlpha(int);
+    method @NonNull public android.content.res.ColorStateList withLStar(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.ColorStateList> CREATOR;
+  }
+
+  public final class Configuration implements java.lang.Comparable<android.content.res.Configuration> android.os.Parcelable {
+    ctor public Configuration();
+    ctor public Configuration(android.content.res.Configuration);
+    method public int compareTo(android.content.res.Configuration);
+    method public int describeContents();
+    method public int diff(android.content.res.Configuration);
+    method public boolean equals(android.content.res.Configuration);
+    method public int getLayoutDirection();
+    method @NonNull public android.os.LocaleList getLocales();
+    method public boolean isLayoutSizeAtLeast(int);
+    method public boolean isNightModeActive();
+    method public boolean isScreenHdr();
+    method public boolean isScreenRound();
+    method public boolean isScreenWideColorGamut();
+    method public static boolean needNewResources(int, int);
+    method public void readFromParcel(android.os.Parcel);
+    method public void setLayoutDirection(java.util.Locale);
+    method public void setLocale(@Nullable java.util.Locale);
+    method public void setLocales(@Nullable android.os.LocaleList);
+    method public void setTo(android.content.res.Configuration);
+    method public void setToDefaults();
+    method public int updateFrom(@NonNull android.content.res.Configuration);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int COLOR_MODE_HDR_MASK = 12; // 0xc
+    field public static final int COLOR_MODE_HDR_NO = 4; // 0x4
+    field public static final int COLOR_MODE_HDR_SHIFT = 2; // 0x2
+    field public static final int COLOR_MODE_HDR_UNDEFINED = 0; // 0x0
+    field public static final int COLOR_MODE_HDR_YES = 8; // 0x8
+    field public static final int COLOR_MODE_UNDEFINED = 0; // 0x0
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_MASK = 3; // 0x3
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_NO = 1; // 0x1
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED = 0; // 0x0
+    field public static final int COLOR_MODE_WIDE_COLOR_GAMUT_YES = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.Configuration> CREATOR;
+    field public static final int DENSITY_DPI_UNDEFINED = 0; // 0x0
+    field public static final int FONT_WEIGHT_ADJUSTMENT_UNDEFINED = 2147483647; // 0x7fffffff
+    field public static final int HARDKEYBOARDHIDDEN_NO = 1; // 0x1
+    field public static final int HARDKEYBOARDHIDDEN_UNDEFINED = 0; // 0x0
+    field public static final int HARDKEYBOARDHIDDEN_YES = 2; // 0x2
+    field public static final int KEYBOARDHIDDEN_NO = 1; // 0x1
+    field public static final int KEYBOARDHIDDEN_UNDEFINED = 0; // 0x0
+    field public static final int KEYBOARDHIDDEN_YES = 2; // 0x2
+    field public static final int KEYBOARD_12KEY = 3; // 0x3
+    field public static final int KEYBOARD_NOKEYS = 1; // 0x1
+    field public static final int KEYBOARD_QWERTY = 2; // 0x2
+    field public static final int KEYBOARD_UNDEFINED = 0; // 0x0
+    field public static final int MNC_ZERO = 65535; // 0xffff
+    field public static final int NAVIGATIONHIDDEN_NO = 1; // 0x1
+    field public static final int NAVIGATIONHIDDEN_UNDEFINED = 0; // 0x0
+    field public static final int NAVIGATIONHIDDEN_YES = 2; // 0x2
+    field public static final int NAVIGATION_DPAD = 2; // 0x2
+    field public static final int NAVIGATION_NONAV = 1; // 0x1
+    field public static final int NAVIGATION_TRACKBALL = 3; // 0x3
+    field public static final int NAVIGATION_UNDEFINED = 0; // 0x0
+    field public static final int NAVIGATION_WHEEL = 4; // 0x4
+    field public static final int ORIENTATION_LANDSCAPE = 2; // 0x2
+    field public static final int ORIENTATION_PORTRAIT = 1; // 0x1
+    field @Deprecated public static final int ORIENTATION_SQUARE = 3; // 0x3
+    field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_LAYOUTDIR_LTR = 64; // 0x40
+    field public static final int SCREENLAYOUT_LAYOUTDIR_MASK = 192; // 0xc0
+    field public static final int SCREENLAYOUT_LAYOUTDIR_RTL = 128; // 0x80
+    field public static final int SCREENLAYOUT_LAYOUTDIR_SHIFT = 6; // 0x6
+    field public static final int SCREENLAYOUT_LAYOUTDIR_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_LONG_MASK = 48; // 0x30
+    field public static final int SCREENLAYOUT_LONG_NO = 16; // 0x10
+    field public static final int SCREENLAYOUT_LONG_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_LONG_YES = 32; // 0x20
+    field public static final int SCREENLAYOUT_ROUND_MASK = 768; // 0x300
+    field public static final int SCREENLAYOUT_ROUND_NO = 256; // 0x100
+    field public static final int SCREENLAYOUT_ROUND_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_ROUND_YES = 512; // 0x200
+    field public static final int SCREENLAYOUT_SIZE_LARGE = 3; // 0x3
+    field public static final int SCREENLAYOUT_SIZE_MASK = 15; // 0xf
+    field public static final int SCREENLAYOUT_SIZE_NORMAL = 2; // 0x2
+    field public static final int SCREENLAYOUT_SIZE_SMALL = 1; // 0x1
+    field public static final int SCREENLAYOUT_SIZE_UNDEFINED = 0; // 0x0
+    field public static final int SCREENLAYOUT_SIZE_XLARGE = 4; // 0x4
+    field public static final int SCREENLAYOUT_UNDEFINED = 0; // 0x0
+    field public static final int SCREEN_HEIGHT_DP_UNDEFINED = 0; // 0x0
+    field public static final int SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0
+    field public static final int SMALLEST_SCREEN_WIDTH_DP_UNDEFINED = 0; // 0x0
+    field public static final int TOUCHSCREEN_FINGER = 3; // 0x3
+    field public static final int TOUCHSCREEN_NOTOUCH = 1; // 0x1
+    field @Deprecated public static final int TOUCHSCREEN_STYLUS = 2; // 0x2
+    field public static final int TOUCHSCREEN_UNDEFINED = 0; // 0x0
+    field public static final int UI_MODE_NIGHT_MASK = 48; // 0x30
+    field public static final int UI_MODE_NIGHT_NO = 16; // 0x10
+    field public static final int UI_MODE_NIGHT_UNDEFINED = 0; // 0x0
+    field public static final int UI_MODE_NIGHT_YES = 32; // 0x20
+    field public static final int UI_MODE_TYPE_APPLIANCE = 5; // 0x5
+    field public static final int UI_MODE_TYPE_CAR = 3; // 0x3
+    field public static final int UI_MODE_TYPE_DESK = 2; // 0x2
+    field public static final int UI_MODE_TYPE_MASK = 15; // 0xf
+    field public static final int UI_MODE_TYPE_NORMAL = 1; // 0x1
+    field public static final int UI_MODE_TYPE_TELEVISION = 4; // 0x4
+    field public static final int UI_MODE_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int UI_MODE_TYPE_VR_HEADSET = 7; // 0x7
+    field public static final int UI_MODE_TYPE_WATCH = 6; // 0x6
+    field public int colorMode;
+    field public int densityDpi;
+    field public float fontScale;
+    field public int fontWeightAdjustment;
+    field public int hardKeyboardHidden;
+    field public int keyboard;
+    field public int keyboardHidden;
+    field @Deprecated public java.util.Locale locale;
+    field public int mcc;
+    field public int mnc;
+    field public int navigation;
+    field public int navigationHidden;
+    field public int orientation;
+    field public int screenHeightDp;
+    field public int screenLayout;
+    field public int screenWidthDp;
+    field public int smallestScreenWidthDp;
+    field public int touchscreen;
+    field public int uiMode;
+  }
+
+  public class ObbInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.res.ObbInfo> CREATOR;
+    field public static final int OBB_OVERLAY = 1; // 0x1
+    field public String filename;
+    field public int flags;
+    field public String packageName;
+    field public int version;
+  }
+
+  public class ObbScanner {
+    method public static android.content.res.ObbInfo getObbInfo(String) throws java.io.IOException;
+  }
+
+  public class Resources {
+    ctor @Deprecated public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration);
+    method public void addLoaders(@NonNull android.content.res.loader.ResourcesLoader...);
+    method public final void finishPreloading();
+    method public final void flushLayoutCache();
+    method @NonNull public android.content.res.XmlResourceParser getAnimation(@AnimRes @AnimatorRes int) throws android.content.res.Resources.NotFoundException;
+    method public final android.content.res.AssetManager getAssets();
+    method @AnyRes public static int getAttributeSetSourceResId(@Nullable android.util.AttributeSet);
+    method public boolean getBoolean(@BoolRes int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated @ColorInt public int getColor(@ColorRes int) throws android.content.res.Resources.NotFoundException;
+    method @ColorInt public int getColor(@ColorRes int, @Nullable android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated @NonNull public android.content.res.ColorStateList getColorStateList(@ColorRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.ColorStateList getColorStateList(@ColorRes int, @Nullable android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.Configuration getConfiguration();
+    method public float getDimension(@DimenRes int) throws android.content.res.Resources.NotFoundException;
+    method public int getDimensionPixelOffset(@DimenRes int) throws android.content.res.Resources.NotFoundException;
+    method public int getDimensionPixelSize(@DimenRes int) throws android.content.res.Resources.NotFoundException;
+    method public android.util.DisplayMetrics getDisplayMetrics();
+    method @Deprecated public android.graphics.drawable.Drawable getDrawable(@DrawableRes int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawable(@DrawableRes int, @Nullable android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@DrawableRes int, int) throws android.content.res.Resources.NotFoundException;
+    method @Nullable public android.graphics.drawable.Drawable getDrawableForDensity(@DrawableRes int, int, @Nullable android.content.res.Resources.Theme);
+    method public float getFloat(@DimenRes int);
+    method @NonNull public android.graphics.Typeface getFont(@FontRes int) throws android.content.res.Resources.NotFoundException;
+    method public float getFraction(@FractionRes int, int, int);
+    method public int getIdentifier(String, String, String);
+    method @NonNull public int[] getIntArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method public int getInteger(@IntegerRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.XmlResourceParser getLayout(@LayoutRes int) throws android.content.res.Resources.NotFoundException;
+    method @Deprecated public android.graphics.Movie getMovie(@RawRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getQuantityString(@PluralsRes int, int, java.lang.Object...) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getQuantityString(@PluralsRes int, int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public CharSequence getQuantityText(@PluralsRes int, int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourceEntryName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourceName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourcePackageName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method public String getResourceTypeName(@AnyRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getString(@StringRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String getString(@StringRes int, java.lang.Object...) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public String[] getStringArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.content.res.Resources getSystem();
+    method @NonNull public CharSequence getText(@StringRes int) throws android.content.res.Resources.NotFoundException;
+    method public CharSequence getText(@StringRes int, CharSequence);
+    method @NonNull public CharSequence[] getTextArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method public void getValue(@AnyRes int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method public void getValue(String, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method public void getValueForDensity(@AnyRes int, int, android.util.TypedValue, boolean) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.XmlResourceParser getXml(@XmlRes int) throws android.content.res.Resources.NotFoundException;
+    method public final android.content.res.Resources.Theme newTheme();
+    method public android.content.res.TypedArray obtainAttributes(android.util.AttributeSet, @StyleableRes int[]);
+    method @NonNull public android.content.res.TypedArray obtainTypedArray(@ArrayRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public java.io.InputStream openRawResource(@RawRes int) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public java.io.InputStream openRawResource(@RawRes int, android.util.TypedValue) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.AssetFileDescriptor openRawResourceFd(@RawRes int) throws android.content.res.Resources.NotFoundException;
+    method public void parseBundleExtra(String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException;
+    method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void removeLoaders(@NonNull android.content.res.loader.ResourcesLoader...);
+    method @Deprecated public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
+    field @AnyRes public static final int ID_NULL = 0; // 0x0
+  }
+
+  public static class Resources.NotFoundException extends java.lang.RuntimeException {
+    ctor public Resources.NotFoundException();
+    ctor public Resources.NotFoundException(String);
+    ctor public Resources.NotFoundException(String, Exception);
+  }
+
+  public final class Resources.Theme {
+    method public void applyStyle(int, boolean);
+    method public void dump(int, String, String);
+    method @NonNull public int[] getAttributeResolutionStack(@AttrRes int, @StyleRes int, @StyleRes int);
+    method public int getChangingConfigurations();
+    method public android.graphics.drawable.Drawable getDrawable(@DrawableRes int) throws android.content.res.Resources.NotFoundException;
+    method @StyleRes public int getExplicitStyle(@Nullable android.util.AttributeSet);
+    method public android.content.res.Resources getResources();
+    method @NonNull public android.content.res.TypedArray obtainStyledAttributes(@NonNull @StyleableRes int[]);
+    method @NonNull public android.content.res.TypedArray obtainStyledAttributes(@StyleRes int, @NonNull @StyleableRes int[]) throws android.content.res.Resources.NotFoundException;
+    method @NonNull public android.content.res.TypedArray obtainStyledAttributes(@Nullable android.util.AttributeSet, @NonNull @StyleableRes int[], @AttrRes int, @StyleRes int);
+    method public void rebase();
+    method public boolean resolveAttribute(int, android.util.TypedValue, boolean);
+    method public void setTo(android.content.res.Resources.Theme);
+  }
+
+  public class TypedArray implements java.lang.AutoCloseable {
+    method public void close();
+    method public boolean getBoolean(@StyleableRes int, boolean);
+    method public int getChangingConfigurations();
+    method @ColorInt public int getColor(@StyleableRes int, @ColorInt int);
+    method @Nullable public android.content.res.ColorStateList getColorStateList(@StyleableRes int);
+    method public float getDimension(@StyleableRes int, float);
+    method public int getDimensionPixelOffset(@StyleableRes int, int);
+    method public int getDimensionPixelSize(@StyleableRes int, int);
+    method @Nullable public android.graphics.drawable.Drawable getDrawable(@StyleableRes int);
+    method public float getFloat(@StyleableRes int, float);
+    method @Nullable public android.graphics.Typeface getFont(@StyleableRes int);
+    method public float getFraction(@StyleableRes int, int, int, float);
+    method public int getIndex(int);
+    method public int getIndexCount();
+    method public int getInt(@StyleableRes int, int);
+    method public int getInteger(@StyleableRes int, int);
+    method public int getLayoutDimension(@StyleableRes int, String);
+    method public int getLayoutDimension(@StyleableRes int, int);
+    method public String getNonResourceString(@StyleableRes int);
+    method public String getPositionDescription();
+    method @AnyRes public int getResourceId(@StyleableRes int, int);
+    method public android.content.res.Resources getResources();
+    method @AnyRes public int getSourceResourceId(@StyleableRes int, @AnyRes int);
+    method @Nullable public String getString(@StyleableRes int);
+    method public CharSequence getText(@StyleableRes int);
+    method public CharSequence[] getTextArray(@StyleableRes int);
+    method public int getType(@StyleableRes int);
+    method public boolean getValue(@StyleableRes int, android.util.TypedValue);
+    method public boolean hasValue(@StyleableRes int);
+    method public boolean hasValueOrEmpty(@StyleableRes int);
+    method public int length();
+    method public android.util.TypedValue peekValue(@StyleableRes int);
+    method public void recycle();
+  }
+
+  public interface XmlResourceParser extends org.xmlpull.v1.XmlPullParser android.util.AttributeSet java.lang.AutoCloseable {
+    method public void close();
+  }
+
+}
+
+package android.content.res.loader {
+
+  public interface AssetsProvider {
+    method @Nullable public default android.content.res.AssetFileDescriptor loadAssetFd(@NonNull String, int);
+  }
+
+  public class ResourcesLoader {
+    ctor public ResourcesLoader();
+    method public void addProvider(@NonNull android.content.res.loader.ResourcesProvider);
+    method public void clearProviders();
+    method @NonNull public java.util.List<android.content.res.loader.ResourcesProvider> getProviders();
+    method public void removeProvider(@NonNull android.content.res.loader.ResourcesProvider);
+    method public void setProviders(@NonNull java.util.List<android.content.res.loader.ResourcesProvider>);
+  }
+
+  public class ResourcesProvider implements java.lang.AutoCloseable java.io.Closeable {
+    method public void close();
+    method @NonNull public static android.content.res.loader.ResourcesProvider empty(@NonNull android.content.res.loader.AssetsProvider);
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromApk(@NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromApk(@NonNull android.os.ParcelFileDescriptor, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromDirectory(@NonNull String, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromSplit(@NonNull android.content.Context, @NonNull String) throws java.io.IOException;
+    method @NonNull public static android.content.res.loader.ResourcesProvider loadFromTable(@NonNull android.os.ParcelFileDescriptor, @Nullable android.content.res.loader.AssetsProvider) throws java.io.IOException;
+  }
+
+}
+
+package android.database {
+
+  public abstract class AbstractCursor implements android.database.CrossProcessCursor {
+    ctor public AbstractCursor();
+    method protected void checkPosition();
+    method public void close();
+    method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
+    method public void deactivate();
+    method public void fillWindow(int, android.database.CursorWindow);
+    method protected void finalize();
+    method public byte[] getBlob(int);
+    method public int getColumnCount();
+    method public int getColumnIndex(String);
+    method public int getColumnIndexOrThrow(String);
+    method public String getColumnName(int);
+    method public android.os.Bundle getExtras();
+    method public android.net.Uri getNotificationUri();
+    method public final int getPosition();
+    method public int getType(int);
+    method @Deprecated protected Object getUpdatedField(int);
+    method public boolean getWantsAllOnMoveCalls();
+    method public android.database.CursorWindow getWindow();
+    method public final boolean isAfterLast();
+    method public final boolean isBeforeFirst();
+    method public boolean isClosed();
+    method @Deprecated protected boolean isFieldUpdated(int);
+    method public final boolean isFirst();
+    method public final boolean isLast();
+    method public final boolean move(int);
+    method public final boolean moveToFirst();
+    method public final boolean moveToLast();
+    method public final boolean moveToNext();
+    method public final boolean moveToPosition(int);
+    method public final boolean moveToPrevious();
+    method protected void onChange(boolean);
+    method public boolean onMove(int, int);
+    method public void registerContentObserver(android.database.ContentObserver);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public boolean requery();
+    method public android.os.Bundle respond(android.os.Bundle);
+    method public void setExtras(android.os.Bundle);
+    method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method public void unregisterContentObserver(android.database.ContentObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+    field @Deprecated protected boolean mClosed;
+    field @Deprecated protected android.content.ContentResolver mContentResolver;
+    field @Deprecated protected int mPos;
+  }
+
+  protected static class AbstractCursor.SelfContentObserver extends android.database.ContentObserver {
+    ctor public AbstractCursor.SelfContentObserver(android.database.AbstractCursor);
+  }
+
+  public abstract class AbstractWindowedCursor extends android.database.AbstractCursor {
+    ctor public AbstractWindowedCursor();
+    method public double getDouble(int);
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public short getShort(int);
+    method public String getString(int);
+    method public boolean hasWindow();
+    method @Deprecated public boolean isBlob(int);
+    method @Deprecated public boolean isFloat(int);
+    method @Deprecated public boolean isLong(int);
+    method public boolean isNull(int);
+    method @Deprecated public boolean isString(int);
+    method public void setWindow(android.database.CursorWindow);
+    field protected android.database.CursorWindow mWindow;
+  }
+
+  public final class CharArrayBuffer {
+    ctor public CharArrayBuffer(int);
+    ctor public CharArrayBuffer(char[]);
+    field public char[] data;
+    field public int sizeCopied;
+  }
+
+  public class ContentObservable extends android.database.Observable<android.database.ContentObserver> {
+    ctor public ContentObservable();
+    method @Deprecated public void dispatchChange(boolean);
+    method public void dispatchChange(boolean, android.net.Uri);
+    method @Deprecated public void notifyChange(boolean);
+    method public void registerObserver(android.database.ContentObserver);
+  }
+
+  public abstract class ContentObserver {
+    ctor public ContentObserver(android.os.Handler);
+    method public boolean deliverSelfNotifications();
+    method @Deprecated public final void dispatchChange(boolean);
+    method public final void dispatchChange(boolean, @Nullable android.net.Uri);
+    method public final void dispatchChange(boolean, @Nullable android.net.Uri, int);
+    method public final void dispatchChange(boolean, @NonNull java.util.Collection<android.net.Uri>, int);
+    method public void onChange(boolean);
+    method public void onChange(boolean, @Nullable android.net.Uri);
+    method public void onChange(boolean, @Nullable android.net.Uri, int);
+    method public void onChange(boolean, @NonNull java.util.Collection<android.net.Uri>, int);
+  }
+
+  public interface CrossProcessCursor extends android.database.Cursor {
+    method public void fillWindow(int, android.database.CursorWindow);
+    method public android.database.CursorWindow getWindow();
+    method public boolean onMove(int, int);
+  }
+
+  public class CrossProcessCursorWrapper extends android.database.CursorWrapper implements android.database.CrossProcessCursor {
+    ctor public CrossProcessCursorWrapper(android.database.Cursor);
+    method public void fillWindow(int, android.database.CursorWindow);
+    method public android.database.CursorWindow getWindow();
+    method public boolean onMove(int, int);
+  }
+
+  public interface Cursor extends java.io.Closeable {
+    method public void close();
+    method public void copyStringToBuffer(@IntRange(from=0) int, android.database.CharArrayBuffer);
+    method @Deprecated public void deactivate();
+    method public byte[] getBlob(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getColumnCount();
+    method @IntRange(from=0xffffffff) public int getColumnIndex(String);
+    method @IntRange(from=0) public int getColumnIndexOrThrow(String) throws java.lang.IllegalArgumentException;
+    method public String getColumnName(@IntRange(from=0) int);
+    method public String[] getColumnNames();
+    method @IntRange(from=0) public int getCount();
+    method public double getDouble(@IntRange(from=0) int);
+    method public android.os.Bundle getExtras();
+    method public float getFloat(@IntRange(from=0) int);
+    method public int getInt(@IntRange(from=0) int);
+    method public long getLong(@IntRange(from=0) int);
+    method public android.net.Uri getNotificationUri();
+    method @Nullable public default java.util.List<android.net.Uri> getNotificationUris();
+    method @IntRange(from=0xffffffff) public int getPosition();
+    method public short getShort(@IntRange(from=0) int);
+    method public String getString(@IntRange(from=0) int);
+    method public int getType(@IntRange(from=0) int);
+    method public boolean getWantsAllOnMoveCalls();
+    method public boolean isAfterLast();
+    method public boolean isBeforeFirst();
+    method public boolean isClosed();
+    method public boolean isFirst();
+    method public boolean isLast();
+    method public boolean isNull(@IntRange(from=0) int);
+    method public boolean move(int);
+    method public boolean moveToFirst();
+    method public boolean moveToLast();
+    method public boolean moveToNext();
+    method public boolean moveToPosition(@IntRange(from=0xffffffff) int);
+    method public boolean moveToPrevious();
+    method public void registerContentObserver(android.database.ContentObserver);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method @Deprecated public boolean requery();
+    method public android.os.Bundle respond(android.os.Bundle);
+    method public void setExtras(android.os.Bundle);
+    method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method public default void setNotificationUris(@NonNull android.content.ContentResolver, @NonNull java.util.List<android.net.Uri>);
+    method public void unregisterContentObserver(android.database.ContentObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+    field public static final int FIELD_TYPE_BLOB = 4; // 0x4
+    field public static final int FIELD_TYPE_FLOAT = 2; // 0x2
+    field public static final int FIELD_TYPE_INTEGER = 1; // 0x1
+    field public static final int FIELD_TYPE_NULL = 0; // 0x0
+    field public static final int FIELD_TYPE_STRING = 3; // 0x3
+  }
+
+  public class CursorIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
+    ctor public CursorIndexOutOfBoundsException(int, int);
+    ctor public CursorIndexOutOfBoundsException(String);
+  }
+
+  public final class CursorJoiner implements java.lang.Iterable<android.database.CursorJoiner.Result> java.util.Iterator<android.database.CursorJoiner.Result> {
+    ctor public CursorJoiner(android.database.Cursor, String[], android.database.Cursor, String[]);
+    method public boolean hasNext();
+    method public java.util.Iterator<android.database.CursorJoiner.Result> iterator();
+    method public android.database.CursorJoiner.Result next();
+  }
+
+  public enum CursorJoiner.Result {
+    enum_constant public static final android.database.CursorJoiner.Result BOTH;
+    enum_constant public static final android.database.CursorJoiner.Result LEFT;
+    enum_constant public static final android.database.CursorJoiner.Result RIGHT;
+  }
+
+  public class CursorWindow extends android.database.sqlite.SQLiteClosable implements android.os.Parcelable {
+    ctor public CursorWindow(String);
+    ctor public CursorWindow(String, long);
+    ctor @Deprecated public CursorWindow(boolean);
+    method public boolean allocRow();
+    method public void clear();
+    method public void copyStringToBuffer(@IntRange(from=0) int, @IntRange(from=0) int, android.database.CharArrayBuffer);
+    method public int describeContents();
+    method public void freeLastRow();
+    method public byte[] getBlob(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public double getDouble(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public float getFloat(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int getInt(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public long getLong(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @IntRange(from=0) public int getNumRows();
+    method public short getShort(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @IntRange(from=0) public int getStartPosition();
+    method public String getString(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int getType(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isBlob(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isFloat(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isLong(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isNull(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @Deprecated public boolean isString(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public static android.database.CursorWindow newFromParcel(android.os.Parcel);
+    method protected void onAllReferencesReleased();
+    method public boolean putBlob(byte[], @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putDouble(double, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putLong(long, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putNull(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean putString(String, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean setNumColumns(@IntRange(from=0) int);
+    method public void setStartPosition(@IntRange(from=0) int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.database.CursorWindow> CREATOR;
+  }
+
+  public class CursorWrapper implements android.database.Cursor {
+    ctor public CursorWrapper(android.database.Cursor);
+    method public void close();
+    method public void copyStringToBuffer(int, android.database.CharArrayBuffer);
+    method @Deprecated public void deactivate();
+    method public byte[] getBlob(int);
+    method public int getColumnCount();
+    method public int getColumnIndex(String);
+    method public int getColumnIndexOrThrow(String) throws java.lang.IllegalArgumentException;
+    method public String getColumnName(int);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public double getDouble(int);
+    method public android.os.Bundle getExtras();
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public android.net.Uri getNotificationUri();
+    method public int getPosition();
+    method public short getShort(int);
+    method public String getString(int);
+    method public int getType(int);
+    method public boolean getWantsAllOnMoveCalls();
+    method public android.database.Cursor getWrappedCursor();
+    method public boolean isAfterLast();
+    method public boolean isBeforeFirst();
+    method public boolean isClosed();
+    method public boolean isFirst();
+    method public boolean isLast();
+    method public boolean isNull(int);
+    method public boolean move(int);
+    method public boolean moveToFirst();
+    method public boolean moveToLast();
+    method public boolean moveToNext();
+    method public boolean moveToPosition(int);
+    method public boolean moveToPrevious();
+    method public void registerContentObserver(android.database.ContentObserver);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method @Deprecated public boolean requery();
+    method public android.os.Bundle respond(android.os.Bundle);
+    method public void setExtras(android.os.Bundle);
+    method public void setNotificationUri(android.content.ContentResolver, android.net.Uri);
+    method public void unregisterContentObserver(android.database.ContentObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public class DataSetObservable extends android.database.Observable<android.database.DataSetObserver> {
+    ctor public DataSetObservable();
+    method public void notifyChanged();
+    method public void notifyInvalidated();
+  }
+
+  public abstract class DataSetObserver {
+    ctor public DataSetObserver();
+    method public void onChanged();
+    method public void onInvalidated();
+  }
+
+  public interface DatabaseErrorHandler {
+    method public void onCorruption(android.database.sqlite.SQLiteDatabase);
+  }
+
+  public class DatabaseUtils {
+    ctor public DatabaseUtils();
+    method public static void appendEscapedSQLString(StringBuilder, String);
+    method public static String[] appendSelectionArgs(String[], String[]);
+    method public static final void appendValueToSql(StringBuilder, Object);
+    method public static void bindObjectToProgram(android.database.sqlite.SQLiteProgram, int, Object);
+    method public static android.os.ParcelFileDescriptor blobFileDescriptorForQuery(android.database.sqlite.SQLiteDatabase, String, String[]);
+    method public static android.os.ParcelFileDescriptor blobFileDescriptorForQuery(android.database.sqlite.SQLiteStatement, String[]);
+    method public static String concatenateWhere(String, String);
+    method public static void createDbFromSqlStatements(android.content.Context, String, int, String);
+    method public static void cursorDoubleToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorDoubleToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorDoubleToCursorValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorFloatToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorIntToContentValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorIntToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorIntToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorLongToContentValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorLongToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorLongToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorRowToContentValues(android.database.Cursor, android.content.ContentValues);
+    method public static void cursorShortToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorStringToContentValues(android.database.Cursor, String, android.content.ContentValues);
+    method public static void cursorStringToContentValues(android.database.Cursor, String, android.content.ContentValues, String);
+    method public static void cursorStringToContentValuesIfPresent(android.database.Cursor, android.content.ContentValues, String);
+    method public static void cursorStringToInsertHelper(android.database.Cursor, String, android.database.DatabaseUtils.InsertHelper, int);
+    method public static void dumpCurrentRow(android.database.Cursor);
+    method public static void dumpCurrentRow(android.database.Cursor, java.io.PrintStream);
+    method public static void dumpCurrentRow(android.database.Cursor, StringBuilder);
+    method public static String dumpCurrentRowToString(android.database.Cursor);
+    method public static void dumpCursor(android.database.Cursor);
+    method public static void dumpCursor(android.database.Cursor, java.io.PrintStream);
+    method public static void dumpCursor(android.database.Cursor, StringBuilder);
+    method public static String dumpCursorToString(android.database.Cursor);
+    method public static String getCollationKey(String);
+    method public static String getHexCollationKey(String);
+    method public static int getSqlStatementType(String);
+    method public static long longForQuery(android.database.sqlite.SQLiteDatabase, String, String[]);
+    method public static long longForQuery(android.database.sqlite.SQLiteStatement, String[]);
+    method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, String);
+    method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, String, String);
+    method public static long queryNumEntries(android.database.sqlite.SQLiteDatabase, String, String, String[]);
+    method public static final void readExceptionFromParcel(android.os.Parcel);
+    method public static void readExceptionWithFileNotFoundExceptionFromParcel(android.os.Parcel) throws java.io.FileNotFoundException;
+    method public static void readExceptionWithOperationApplicationExceptionFromParcel(android.os.Parcel) throws android.content.OperationApplicationException;
+    method public static String sqlEscapeString(String);
+    method public static String stringForQuery(android.database.sqlite.SQLiteDatabase, String, String[]);
+    method public static String stringForQuery(android.database.sqlite.SQLiteStatement, String[]);
+    method public static final void writeExceptionToParcel(android.os.Parcel, Exception);
+    field public static final int STATEMENT_ABORT = 6; // 0x6
+    field public static final int STATEMENT_ATTACH = 3; // 0x3
+    field public static final int STATEMENT_BEGIN = 4; // 0x4
+    field public static final int STATEMENT_COMMIT = 5; // 0x5
+    field public static final int STATEMENT_DDL = 8; // 0x8
+    field public static final int STATEMENT_OTHER = 99; // 0x63
+    field public static final int STATEMENT_PRAGMA = 7; // 0x7
+    field public static final int STATEMENT_SELECT = 1; // 0x1
+    field public static final int STATEMENT_UNPREPARED = 9; // 0x9
+    field public static final int STATEMENT_UPDATE = 2; // 0x2
+  }
+
+  @Deprecated public static class DatabaseUtils.InsertHelper {
+    ctor @Deprecated public DatabaseUtils.InsertHelper(android.database.sqlite.SQLiteDatabase, String);
+    method @Deprecated public void bind(int, double);
+    method @Deprecated public void bind(int, float);
+    method @Deprecated public void bind(int, long);
+    method @Deprecated public void bind(int, int);
+    method @Deprecated public void bind(int, boolean);
+    method @Deprecated public void bind(int, byte[]);
+    method @Deprecated public void bind(int, String);
+    method @Deprecated public void bindNull(int);
+    method @Deprecated public void close();
+    method @Deprecated public long execute();
+    method @Deprecated public int getColumnIndex(String);
+    method @Deprecated public long insert(android.content.ContentValues);
+    method @Deprecated public void prepareForInsert();
+    method @Deprecated public void prepareForReplace();
+    method @Deprecated public long replace(android.content.ContentValues);
+  }
+
+  public final class DefaultDatabaseErrorHandler implements android.database.DatabaseErrorHandler {
+    ctor public DefaultDatabaseErrorHandler();
+    method public void onCorruption(android.database.sqlite.SQLiteDatabase);
+  }
+
+  public class MatrixCursor extends android.database.AbstractCursor {
+    ctor public MatrixCursor(String[], int);
+    ctor public MatrixCursor(String[]);
+    method public void addRow(Object[]);
+    method public void addRow(Iterable<?>);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public double getDouble(int);
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public short getShort(int);
+    method public String getString(int);
+    method public boolean isNull(int);
+    method public android.database.MatrixCursor.RowBuilder newRow();
+  }
+
+  public class MatrixCursor.RowBuilder {
+    method public android.database.MatrixCursor.RowBuilder add(Object);
+    method public android.database.MatrixCursor.RowBuilder add(String, Object);
+  }
+
+  public class MergeCursor extends android.database.AbstractCursor {
+    ctor public MergeCursor(android.database.Cursor[]);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public double getDouble(int);
+    method public float getFloat(int);
+    method public int getInt(int);
+    method public long getLong(int);
+    method public short getShort(int);
+    method public String getString(int);
+    method public boolean isNull(int);
+  }
+
+  public abstract class Observable<T> {
+    ctor public Observable();
+    method public void registerObserver(T);
+    method public void unregisterAll();
+    method public void unregisterObserver(T);
+    field protected final java.util.ArrayList<T> mObservers;
+  }
+
+  public class SQLException extends java.lang.RuntimeException {
+    ctor public SQLException();
+    ctor public SQLException(String);
+    ctor public SQLException(String, Throwable);
+  }
+
+  public class StaleDataException extends java.lang.RuntimeException {
+    ctor public StaleDataException();
+    ctor public StaleDataException(String);
+  }
+
+}
+
+package android.database.sqlite {
+
+  public class SQLiteAbortException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteAbortException();
+    ctor public SQLiteAbortException(String);
+  }
+
+  public class SQLiteAccessPermException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteAccessPermException();
+    ctor public SQLiteAccessPermException(String);
+  }
+
+  public class SQLiteBindOrColumnIndexOutOfRangeException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteBindOrColumnIndexOutOfRangeException();
+    ctor public SQLiteBindOrColumnIndexOutOfRangeException(String);
+  }
+
+  public class SQLiteBlobTooBigException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteBlobTooBigException();
+    ctor public SQLiteBlobTooBigException(String);
+  }
+
+  public class SQLiteCantOpenDatabaseException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteCantOpenDatabaseException();
+    ctor public SQLiteCantOpenDatabaseException(String);
+  }
+
+  public abstract class SQLiteClosable implements java.io.Closeable {
+    ctor public SQLiteClosable();
+    method public void acquireReference();
+    method public void close();
+    method protected abstract void onAllReferencesReleased();
+    method @Deprecated protected void onAllReferencesReleasedFromContainer();
+    method public void releaseReference();
+    method @Deprecated public void releaseReferenceFromContainer();
+  }
+
+  public class SQLiteConstraintException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteConstraintException();
+    ctor public SQLiteConstraintException(String);
+  }
+
+  public class SQLiteCursor extends android.database.AbstractWindowedCursor {
+    ctor @Deprecated public SQLiteCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, String, android.database.sqlite.SQLiteQuery);
+    ctor public SQLiteCursor(android.database.sqlite.SQLiteCursorDriver, String, android.database.sqlite.SQLiteQuery);
+    method public String[] getColumnNames();
+    method public int getCount();
+    method public android.database.sqlite.SQLiteDatabase getDatabase();
+    method public void setFillWindowForwardOnly(boolean);
+    method public void setSelectionArguments(String[]);
+  }
+
+  public interface SQLiteCursorDriver {
+    method public void cursorClosed();
+    method public void cursorDeactivated();
+    method public void cursorRequeried(android.database.Cursor);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]);
+    method public void setBindArguments(String[]);
+  }
+
+  public final class SQLiteDatabase extends android.database.sqlite.SQLiteClosable {
+    method public void beginTransaction();
+    method public void beginTransactionNonExclusive();
+    method public void beginTransactionWithListener(android.database.sqlite.SQLiteTransactionListener);
+    method public void beginTransactionWithListenerNonExclusive(android.database.sqlite.SQLiteTransactionListener);
+    method public android.database.sqlite.SQLiteStatement compileStatement(String) throws android.database.SQLException;
+    method @NonNull public static android.database.sqlite.SQLiteDatabase create(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method @NonNull public static android.database.sqlite.SQLiteDatabase createInMemory(@NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public int delete(String, String, String[]);
+    method public static boolean deleteDatabase(@NonNull java.io.File);
+    method public void disableWriteAheadLogging();
+    method public boolean enableWriteAheadLogging();
+    method public void endTransaction();
+    method public void execPerConnectionSQL(@NonNull String, @Nullable Object[]) throws android.database.SQLException;
+    method public void execSQL(String) throws android.database.SQLException;
+    method public void execSQL(String, Object[]) throws android.database.SQLException;
+    method public static String findEditTable(String);
+    method public java.util.List<android.util.Pair<java.lang.String,java.lang.String>> getAttachedDbs();
+    method public long getMaximumSize();
+    method public long getPageSize();
+    method public String getPath();
+    method @Deprecated public java.util.Map<java.lang.String,java.lang.String> getSyncedTables();
+    method public int getVersion();
+    method public boolean inTransaction();
+    method public long insert(String, String, android.content.ContentValues);
+    method public long insertOrThrow(String, String, android.content.ContentValues) throws android.database.SQLException;
+    method public long insertWithOnConflict(String, String, android.content.ContentValues, int);
+    method public boolean isDatabaseIntegrityOk();
+    method public boolean isDbLockedByCurrentThread();
+    method @Deprecated public boolean isDbLockedByOtherThreads();
+    method public boolean isOpen();
+    method public boolean isReadOnly();
+    method public boolean isWriteAheadLoggingEnabled();
+    method @Deprecated public void markTableSyncable(String, String);
+    method @Deprecated public void markTableSyncable(String, String, String);
+    method public boolean needUpgrade(int);
+    method protected void onAllReferencesReleased();
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int);
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(@NonNull java.io.File, @NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public static android.database.sqlite.SQLiteDatabase openDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int, @Nullable android.database.DatabaseErrorHandler);
+    method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(@NonNull java.io.File, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public static android.database.sqlite.SQLiteDatabase openOrCreateDatabase(@NonNull String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, @Nullable android.database.DatabaseErrorHandler);
+    method public android.database.Cursor query(boolean, String, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor query(boolean, String, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
+    method public android.database.Cursor query(String, String[], String, String[], String, String, String);
+    method public android.database.Cursor query(String, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, String, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor queryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, boolean, String, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
+    method public android.database.Cursor rawQuery(String, String[]);
+    method public android.database.Cursor rawQuery(String, String[], android.os.CancellationSignal);
+    method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, String, String[], String);
+    method public android.database.Cursor rawQueryWithFactory(android.database.sqlite.SQLiteDatabase.CursorFactory, String, String[], String, android.os.CancellationSignal);
+    method public static int releaseMemory();
+    method public long replace(String, String, android.content.ContentValues);
+    method public long replaceOrThrow(String, String, android.content.ContentValues) throws android.database.SQLException;
+    method public void setCustomAggregateFunction(@NonNull String, @NonNull java.util.function.BinaryOperator<java.lang.String>) throws android.database.sqlite.SQLiteException;
+    method public void setCustomScalarFunction(@NonNull String, @NonNull java.util.function.UnaryOperator<java.lang.String>) throws android.database.sqlite.SQLiteException;
+    method public void setForeignKeyConstraintsEnabled(boolean);
+    method public void setLocale(java.util.Locale);
+    method @Deprecated public void setLockingEnabled(boolean);
+    method public void setMaxSqlCacheSize(int);
+    method public long setMaximumSize(long);
+    method public void setPageSize(long);
+    method public void setTransactionSuccessful();
+    method public void setVersion(int);
+    method public int update(String, android.content.ContentValues, String, String[]);
+    method public int updateWithOnConflict(String, android.content.ContentValues, String, String[], int);
+    method public void validateSql(@NonNull String, @Nullable android.os.CancellationSignal);
+    method @Deprecated public boolean yieldIfContended();
+    method public boolean yieldIfContendedSafely();
+    method public boolean yieldIfContendedSafely(long);
+    field public static final int CONFLICT_ABORT = 2; // 0x2
+    field public static final int CONFLICT_FAIL = 3; // 0x3
+    field public static final int CONFLICT_IGNORE = 4; // 0x4
+    field public static final int CONFLICT_NONE = 0; // 0x0
+    field public static final int CONFLICT_REPLACE = 5; // 0x5
+    field public static final int CONFLICT_ROLLBACK = 1; // 0x1
+    field public static final int CREATE_IF_NECESSARY = 268435456; // 0x10000000
+    field public static final int ENABLE_WRITE_AHEAD_LOGGING = 536870912; // 0x20000000
+    field public static final int MAX_SQL_CACHE_SIZE = 100; // 0x64
+    field public static final int NO_LOCALIZED_COLLATORS = 16; // 0x10
+    field public static final int OPEN_READONLY = 1; // 0x1
+    field public static final int OPEN_READWRITE = 0; // 0x0
+    field public static final int SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000; // 0xc350
+  }
+
+  public static interface SQLiteDatabase.CursorFactory {
+    method public android.database.Cursor newCursor(android.database.sqlite.SQLiteDatabase, android.database.sqlite.SQLiteCursorDriver, String, android.database.sqlite.SQLiteQuery);
+  }
+
+  public static final class SQLiteDatabase.OpenParams {
+    method @Nullable public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+    method @Nullable public android.database.DatabaseErrorHandler getErrorHandler();
+    method public long getIdleConnectionTimeout();
+    method @Nullable public String getJournalMode();
+    method @IntRange(from=0xffffffff) public int getLookasideSlotCount();
+    method @IntRange(from=0xffffffff) public int getLookasideSlotSize();
+    method public int getOpenFlags();
+    method @Nullable public String getSynchronousMode();
+  }
+
+  public static final class SQLiteDatabase.OpenParams.Builder {
+    ctor public SQLiteDatabase.OpenParams.Builder();
+    ctor public SQLiteDatabase.OpenParams.Builder(android.database.sqlite.SQLiteDatabase.OpenParams);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder addOpenFlags(int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams build();
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder removeOpenFlags(int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setCursorFactory(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setErrorHandler(@Nullable android.database.DatabaseErrorHandler);
+    method @Deprecated @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setIdleConnectionTimeout(@IntRange(from=0) long);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setJournalMode(@NonNull String);
+    method public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setLookasideConfig(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setOpenFlags(int);
+    method @NonNull public android.database.sqlite.SQLiteDatabase.OpenParams.Builder setSynchronousMode(@NonNull String);
+  }
+
+  public class SQLiteDatabaseCorruptException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDatabaseCorruptException();
+    ctor public SQLiteDatabaseCorruptException(String);
+  }
+
+  public class SQLiteDatabaseLockedException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDatabaseLockedException();
+    ctor public SQLiteDatabaseLockedException(String);
+  }
+
+  public class SQLiteDatatypeMismatchException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDatatypeMismatchException();
+    ctor public SQLiteDatatypeMismatchException(String);
+  }
+
+  public class SQLiteDiskIOException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDiskIOException();
+    ctor public SQLiteDiskIOException(String);
+  }
+
+  public class SQLiteDoneException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteDoneException();
+    ctor public SQLiteDoneException(String);
+  }
+
+  public class SQLiteException extends android.database.SQLException {
+    ctor public SQLiteException();
+    ctor public SQLiteException(String);
+    ctor public SQLiteException(String, Throwable);
+  }
+
+  public class SQLiteFullException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteFullException();
+    ctor public SQLiteFullException(String);
+  }
+
+  public class SQLiteMisuseException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteMisuseException();
+    ctor public SQLiteMisuseException(String);
+  }
+
+  public abstract class SQLiteOpenHelper implements java.lang.AutoCloseable {
+    ctor public SQLiteOpenHelper(@Nullable android.content.Context, @Nullable String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int);
+    ctor public SQLiteOpenHelper(@Nullable android.content.Context, @Nullable String, @Nullable android.database.sqlite.SQLiteDatabase.CursorFactory, int, @Nullable android.database.DatabaseErrorHandler);
+    ctor public SQLiteOpenHelper(@Nullable android.content.Context, @Nullable String, int, @NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public void close();
+    method public String getDatabaseName();
+    method public android.database.sqlite.SQLiteDatabase getReadableDatabase();
+    method public android.database.sqlite.SQLiteDatabase getWritableDatabase();
+    method public void onConfigure(android.database.sqlite.SQLiteDatabase);
+    method public abstract void onCreate(android.database.sqlite.SQLiteDatabase);
+    method public void onDowngrade(android.database.sqlite.SQLiteDatabase, int, int);
+    method public void onOpen(android.database.sqlite.SQLiteDatabase);
+    method public abstract void onUpgrade(android.database.sqlite.SQLiteDatabase, int, int);
+    method @Deprecated public void setIdleConnectionTimeout(@IntRange(from=0) long);
+    method public void setLookasideConfig(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public void setOpenParams(@NonNull android.database.sqlite.SQLiteDatabase.OpenParams);
+    method public void setWriteAheadLoggingEnabled(boolean);
+  }
+
+  public class SQLiteOutOfMemoryException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteOutOfMemoryException();
+    ctor public SQLiteOutOfMemoryException(String);
+  }
+
+  public abstract class SQLiteProgram extends android.database.sqlite.SQLiteClosable {
+    method public void bindAllArgsAsStrings(String[]);
+    method public void bindBlob(int, byte[]);
+    method public void bindDouble(int, double);
+    method public void bindLong(int, long);
+    method public void bindNull(int);
+    method public void bindString(int, String);
+    method public void clearBindings();
+    method @Deprecated public final int getUniqueId();
+    method protected void onAllReferencesReleased();
+  }
+
+  public final class SQLiteQuery extends android.database.sqlite.SQLiteProgram {
+  }
+
+  public class SQLiteQueryBuilder {
+    ctor public SQLiteQueryBuilder();
+    method public static void appendColumns(StringBuilder, String[]);
+    method public void appendWhere(@NonNull CharSequence);
+    method public void appendWhereEscapeString(@NonNull String);
+    method public void appendWhereStandalone(@NonNull CharSequence);
+    method public String buildQuery(String[], String, String, String, String, String);
+    method @Deprecated public String buildQuery(String[], String, String[], String, String, String, String);
+    method public static String buildQueryString(boolean, String, String[], String, String, String, String, String);
+    method public String buildUnionQuery(String[], String, String);
+    method public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String, String);
+    method @Deprecated public String buildUnionSubQuery(String, String[], java.util.Set<java.lang.String>, int, String, String, String[], String, String);
+    method public int delete(@NonNull android.database.sqlite.SQLiteDatabase, @Nullable String, @Nullable String[]);
+    method @Nullable public android.database.sqlite.SQLiteDatabase.CursorFactory getCursorFactory();
+    method @Nullable public java.util.Collection<java.util.regex.Pattern> getProjectionGreylist();
+    method @Nullable public java.util.Map<java.lang.String,java.lang.String> getProjectionMap();
+    method @Nullable public String getTables();
+    method public long insert(@NonNull android.database.sqlite.SQLiteDatabase, @NonNull android.content.ContentValues);
+    method public boolean isDistinct();
+    method public boolean isStrict();
+    method public boolean isStrictColumns();
+    method public boolean isStrictGrammar();
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase, String[], String, String[], String, String, String, String, android.os.CancellationSignal);
+    method public void setCursorFactory(@Nullable android.database.sqlite.SQLiteDatabase.CursorFactory);
+    method public void setDistinct(boolean);
+    method public void setProjectionGreylist(@Nullable java.util.Collection<java.util.regex.Pattern>);
+    method public void setProjectionMap(@Nullable java.util.Map<java.lang.String,java.lang.String>);
+    method public void setStrict(boolean);
+    method public void setStrictColumns(boolean);
+    method public void setStrictGrammar(boolean);
+    method public void setTables(@Nullable String);
+    method public int update(@NonNull android.database.sqlite.SQLiteDatabase, @NonNull android.content.ContentValues, @Nullable String, @Nullable String[]);
+  }
+
+  public class SQLiteReadOnlyDatabaseException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteReadOnlyDatabaseException();
+    ctor public SQLiteReadOnlyDatabaseException(String);
+  }
+
+  public final class SQLiteStatement extends android.database.sqlite.SQLiteProgram {
+    method public void execute();
+    method public long executeInsert();
+    method public int executeUpdateDelete();
+    method public android.os.ParcelFileDescriptor simpleQueryForBlobFileDescriptor();
+    method public long simpleQueryForLong();
+    method public String simpleQueryForString();
+  }
+
+  public class SQLiteTableLockedException extends android.database.sqlite.SQLiteException {
+    ctor public SQLiteTableLockedException();
+    ctor public SQLiteTableLockedException(String);
+  }
+
+  public interface SQLiteTransactionListener {
+    method public void onBegin();
+    method public void onCommit();
+    method public void onRollback();
+  }
+
+}
+
+package android.drm {
+
+  @Deprecated public class DrmConvertedStatus {
+    ctor @Deprecated public DrmConvertedStatus(int, byte[], int);
+    field @Deprecated public static final int STATUS_ERROR = 3; // 0x3
+    field @Deprecated public static final int STATUS_INPUTDATA_ERROR = 2; // 0x2
+    field @Deprecated public static final int STATUS_OK = 1; // 0x1
+    field @Deprecated public final byte[] convertedData;
+    field @Deprecated public final int offset;
+    field @Deprecated public final int statusCode;
+  }
+
+  @Deprecated public class DrmErrorEvent extends android.drm.DrmEvent {
+    ctor @Deprecated public DrmErrorEvent(int, int, String);
+    ctor @Deprecated public DrmErrorEvent(int, int, String, java.util.HashMap<java.lang.String,java.lang.Object>);
+    field @Deprecated public static final int TYPE_ACQUIRE_DRM_INFO_FAILED = 2008; // 0x7d8
+    field @Deprecated public static final int TYPE_NOT_SUPPORTED = 2003; // 0x7d3
+    field @Deprecated public static final int TYPE_NO_INTERNET_CONNECTION = 2005; // 0x7d5
+    field @Deprecated public static final int TYPE_OUT_OF_MEMORY = 2004; // 0x7d4
+    field @Deprecated public static final int TYPE_PROCESS_DRM_INFO_FAILED = 2006; // 0x7d6
+    field @Deprecated public static final int TYPE_REMOVE_ALL_RIGHTS_FAILED = 2007; // 0x7d7
+    field @Deprecated public static final int TYPE_RIGHTS_NOT_INSTALLED = 2001; // 0x7d1
+    field @Deprecated public static final int TYPE_RIGHTS_RENEWAL_NOT_ALLOWED = 2002; // 0x7d2
+  }
+
+  @Deprecated public class DrmEvent {
+    ctor @Deprecated protected DrmEvent(int, int, String, java.util.HashMap<java.lang.String,java.lang.Object>);
+    ctor @Deprecated protected DrmEvent(int, int, String);
+    method @Deprecated public Object getAttribute(String);
+    method @Deprecated public String getMessage();
+    method @Deprecated public int getType();
+    method @Deprecated public int getUniqueId();
+    field @Deprecated public static final String DRM_INFO_OBJECT = "drm_info_object";
+    field @Deprecated public static final String DRM_INFO_STATUS_OBJECT = "drm_info_status_object";
+    field @Deprecated public static final int TYPE_ALL_RIGHTS_REMOVED = 1001; // 0x3e9
+    field @Deprecated public static final int TYPE_DRM_INFO_PROCESSED = 1002; // 0x3ea
+  }
+
+  @Deprecated public class DrmInfo {
+    ctor @Deprecated public DrmInfo(int, byte[], String);
+    ctor @Deprecated public DrmInfo(int, String, String);
+    method @Deprecated public Object get(String);
+    method @Deprecated public byte[] getData();
+    method @Deprecated public int getInfoType();
+    method @Deprecated public String getMimeType();
+    method @Deprecated public java.util.Iterator<java.lang.Object> iterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> keyIterator();
+    method @Deprecated public void put(String, Object);
+  }
+
+  @Deprecated public class DrmInfoEvent extends android.drm.DrmEvent {
+    ctor @Deprecated public DrmInfoEvent(int, int, String);
+    ctor @Deprecated public DrmInfoEvent(int, int, String, java.util.HashMap<java.lang.String,java.lang.Object>);
+    field @Deprecated public static final int TYPE_ACCOUNT_ALREADY_REGISTERED = 5; // 0x5
+    field @Deprecated public static final int TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT = 1; // 0x1
+    field @Deprecated public static final int TYPE_REMOVE_RIGHTS = 2; // 0x2
+    field @Deprecated public static final int TYPE_RIGHTS_INSTALLED = 3; // 0x3
+    field @Deprecated public static final int TYPE_RIGHTS_REMOVED = 6; // 0x6
+    field @Deprecated public static final int TYPE_WAIT_FOR_RIGHTS = 4; // 0x4
+  }
+
+  @Deprecated public class DrmInfoRequest {
+    ctor @Deprecated public DrmInfoRequest(int, String);
+    method @Deprecated public Object get(String);
+    method @Deprecated public int getInfoType();
+    method @Deprecated public String getMimeType();
+    method @Deprecated public java.util.Iterator<java.lang.Object> iterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> keyIterator();
+    method @Deprecated public void put(String, Object);
+    field @Deprecated public static final String ACCOUNT_ID = "account_id";
+    field @Deprecated public static final String SUBSCRIPTION_ID = "subscription_id";
+    field @Deprecated public static final int TYPE_REGISTRATION_INFO = 1; // 0x1
+    field @Deprecated public static final int TYPE_RIGHTS_ACQUISITION_INFO = 3; // 0x3
+    field @Deprecated public static final int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4; // 0x4
+    field @Deprecated public static final int TYPE_UNREGISTRATION_INFO = 2; // 0x2
+  }
+
+  @Deprecated public class DrmInfoStatus {
+    ctor @Deprecated public DrmInfoStatus(int, int, android.drm.ProcessedData, String);
+    field @Deprecated public static final int STATUS_ERROR = 2; // 0x2
+    field @Deprecated public static final int STATUS_OK = 1; // 0x1
+    field @Deprecated public final android.drm.ProcessedData data;
+    field @Deprecated public final int infoType;
+    field @Deprecated public final String mimeType;
+    field @Deprecated public final int statusCode;
+  }
+
+  @Deprecated public class DrmManagerClient implements java.lang.AutoCloseable {
+    ctor @Deprecated public DrmManagerClient(android.content.Context);
+    method @Deprecated public android.drm.DrmInfo acquireDrmInfo(android.drm.DrmInfoRequest);
+    method @Deprecated public int acquireRights(android.drm.DrmInfoRequest);
+    method @Deprecated public boolean canHandle(String, String);
+    method @Deprecated public boolean canHandle(android.net.Uri, String);
+    method @Deprecated public int checkRightsStatus(String);
+    method @Deprecated public int checkRightsStatus(android.net.Uri);
+    method @Deprecated public int checkRightsStatus(String, int);
+    method @Deprecated public int checkRightsStatus(android.net.Uri, int);
+    method @Deprecated public void close();
+    method @Deprecated public android.drm.DrmConvertedStatus closeConvertSession(int);
+    method @Deprecated public android.drm.DrmConvertedStatus convertData(int, byte[]);
+    method @Deprecated public String[] getAvailableDrmEngines();
+    method @Deprecated @NonNull public java.util.Collection<android.drm.DrmSupportInfo> getAvailableDrmSupportInfo();
+    method @Deprecated public android.content.ContentValues getConstraints(String, int);
+    method @Deprecated public android.content.ContentValues getConstraints(android.net.Uri, int);
+    method @Deprecated public int getDrmObjectType(String, String);
+    method @Deprecated public int getDrmObjectType(android.net.Uri, String);
+    method @Deprecated public android.content.ContentValues getMetadata(String);
+    method @Deprecated public android.content.ContentValues getMetadata(android.net.Uri);
+    method @Deprecated public String getOriginalMimeType(String);
+    method @Deprecated public String getOriginalMimeType(android.net.Uri);
+    method @Deprecated public int openConvertSession(String);
+    method @Deprecated public int processDrmInfo(android.drm.DrmInfo);
+    method @Deprecated public void release();
+    method @Deprecated public int removeAllRights();
+    method @Deprecated public int removeRights(String);
+    method @Deprecated public int removeRights(android.net.Uri);
+    method @Deprecated public int saveRights(android.drm.DrmRights, String, String) throws java.io.IOException;
+    method @Deprecated public void setOnErrorListener(android.drm.DrmManagerClient.OnErrorListener);
+    method @Deprecated public void setOnEventListener(android.drm.DrmManagerClient.OnEventListener);
+    method @Deprecated public void setOnInfoListener(android.drm.DrmManagerClient.OnInfoListener);
+    field @Deprecated public static final int ERROR_NONE = 0; // 0x0
+    field @Deprecated public static final int ERROR_UNKNOWN = -2000; // 0xfffff830
+  }
+
+  @Deprecated public static interface DrmManagerClient.OnErrorListener {
+    method @Deprecated public void onError(android.drm.DrmManagerClient, android.drm.DrmErrorEvent);
+  }
+
+  @Deprecated public static interface DrmManagerClient.OnEventListener {
+    method @Deprecated public void onEvent(android.drm.DrmManagerClient, android.drm.DrmEvent);
+  }
+
+  @Deprecated public static interface DrmManagerClient.OnInfoListener {
+    method @Deprecated public void onInfo(android.drm.DrmManagerClient, android.drm.DrmInfoEvent);
+  }
+
+  @Deprecated public class DrmRights {
+    ctor @Deprecated public DrmRights(String, String);
+    ctor @Deprecated public DrmRights(String, String, String);
+    ctor @Deprecated public DrmRights(String, String, String, String);
+    ctor @Deprecated public DrmRights(java.io.File, String);
+    ctor @Deprecated public DrmRights(android.drm.ProcessedData, String);
+    method @Deprecated public String getAccountId();
+    method @Deprecated public byte[] getData();
+    method @Deprecated public String getMimeType();
+    method @Deprecated public String getSubscriptionId();
+  }
+
+  @Deprecated public class DrmStore {
+    ctor @Deprecated public DrmStore();
+  }
+
+  @Deprecated public static class DrmStore.Action {
+    ctor @Deprecated public DrmStore.Action();
+    field @Deprecated public static final int DEFAULT = 0; // 0x0
+    field @Deprecated public static final int DISPLAY = 7; // 0x7
+    field @Deprecated public static final int EXECUTE = 6; // 0x6
+    field @Deprecated public static final int OUTPUT = 4; // 0x4
+    field @Deprecated public static final int PLAY = 1; // 0x1
+    field @Deprecated public static final int PREVIEW = 5; // 0x5
+    field @Deprecated public static final int RINGTONE = 2; // 0x2
+    field @Deprecated public static final int TRANSFER = 3; // 0x3
+  }
+
+  @Deprecated public static interface DrmStore.ConstraintsColumns {
+    field @Deprecated public static final String EXTENDED_METADATA = "extended_metadata";
+    field @Deprecated public static final String LICENSE_AVAILABLE_TIME = "license_available_time";
+    field @Deprecated public static final String LICENSE_EXPIRY_TIME = "license_expiry_time";
+    field @Deprecated public static final String LICENSE_START_TIME = "license_start_time";
+    field @Deprecated public static final String MAX_REPEAT_COUNT = "max_repeat_count";
+    field @Deprecated public static final String REMAINING_REPEAT_COUNT = "remaining_repeat_count";
+  }
+
+  @Deprecated public static class DrmStore.DrmObjectType {
+    ctor @Deprecated public DrmStore.DrmObjectType();
+    field @Deprecated public static final int CONTENT = 1; // 0x1
+    field @Deprecated public static final int RIGHTS_OBJECT = 2; // 0x2
+    field @Deprecated public static final int TRIGGER_OBJECT = 3; // 0x3
+    field @Deprecated public static final int UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public static class DrmStore.Playback {
+    ctor @Deprecated public DrmStore.Playback();
+    field @Deprecated public static final int PAUSE = 2; // 0x2
+    field @Deprecated public static final int RESUME = 3; // 0x3
+    field @Deprecated public static final int START = 0; // 0x0
+    field @Deprecated public static final int STOP = 1; // 0x1
+  }
+
+  @Deprecated public static class DrmStore.RightsStatus {
+    ctor @Deprecated public DrmStore.RightsStatus();
+    field @Deprecated public static final int RIGHTS_EXPIRED = 2; // 0x2
+    field @Deprecated public static final int RIGHTS_INVALID = 1; // 0x1
+    field @Deprecated public static final int RIGHTS_NOT_ACQUIRED = 3; // 0x3
+    field @Deprecated public static final int RIGHTS_VALID = 0; // 0x0
+  }
+
+  @Deprecated public class DrmSupportInfo {
+    ctor @Deprecated public DrmSupportInfo();
+    method @Deprecated public void addFileSuffix(String);
+    method @Deprecated public void addMimeType(String);
+    method @Deprecated public String getDescriprition();
+    method @Deprecated public String getDescription();
+    method @Deprecated public java.util.Iterator<java.lang.String> getFileSuffixIterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> getMimeTypeIterator();
+    method @Deprecated public void setDescription(String);
+  }
+
+  @Deprecated public class DrmUtils {
+    ctor @Deprecated public DrmUtils();
+    method @Deprecated public static android.drm.DrmUtils.ExtendedMetadataParser getExtendedMetadataParser(byte[]);
+  }
+
+  @Deprecated public static class DrmUtils.ExtendedMetadataParser {
+    method @Deprecated public String get(String);
+    method @Deprecated public java.util.Iterator<java.lang.String> iterator();
+    method @Deprecated public java.util.Iterator<java.lang.String> keyIterator();
+  }
+
+  @Deprecated public class ProcessedData {
+    method @Deprecated public String getAccountId();
+    method @Deprecated public byte[] getData();
+    method @Deprecated public String getSubscriptionId();
+  }
+
+}
+
+package android.gesture {
+
+  public class Gesture implements android.os.Parcelable {
+    ctor public Gesture();
+    method public void addStroke(android.gesture.GestureStroke);
+    method public Object clone();
+    method public int describeContents();
+    method public android.graphics.RectF getBoundingBox();
+    method public long getID();
+    method public float getLength();
+    method public java.util.ArrayList<android.gesture.GestureStroke> getStrokes();
+    method public int getStrokesCount();
+    method public android.graphics.Bitmap toBitmap(int, int, int, int, int);
+    method public android.graphics.Bitmap toBitmap(int, int, int, int);
+    method public android.graphics.Path toPath();
+    method public android.graphics.Path toPath(android.graphics.Path);
+    method public android.graphics.Path toPath(int, int, int, int);
+    method public android.graphics.Path toPath(android.graphics.Path, int, int, int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.gesture.Gesture> CREATOR;
+  }
+
+  public final class GestureLibraries {
+    method public static android.gesture.GestureLibrary fromFile(String);
+    method public static android.gesture.GestureLibrary fromFile(java.io.File);
+    method @NonNull public static android.gesture.GestureLibrary fromFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public static android.gesture.GestureLibrary fromPrivateFile(android.content.Context, String);
+    method public static android.gesture.GestureLibrary fromRawResource(android.content.Context, @RawRes int);
+  }
+
+  public abstract class GestureLibrary {
+    ctor protected GestureLibrary();
+    method public void addGesture(String, android.gesture.Gesture);
+    method public java.util.Set<java.lang.String> getGestureEntries();
+    method public java.util.ArrayList<android.gesture.Gesture> getGestures(String);
+    method public int getOrientationStyle();
+    method public int getSequenceType();
+    method public boolean isReadOnly();
+    method public abstract boolean load();
+    method public java.util.ArrayList<android.gesture.Prediction> recognize(android.gesture.Gesture);
+    method public void removeEntry(String);
+    method public void removeGesture(String, android.gesture.Gesture);
+    method public abstract boolean save();
+    method public void setOrientationStyle(int);
+    method public void setSequenceType(int);
+    field protected final android.gesture.GestureStore mStore;
+  }
+
+  public class GestureOverlayView extends android.widget.FrameLayout {
+    ctor public GestureOverlayView(android.content.Context);
+    ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet);
+    ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int);
+    ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addOnGestureListener(android.gesture.GestureOverlayView.OnGestureListener);
+    method public void addOnGesturePerformedListener(android.gesture.GestureOverlayView.OnGesturePerformedListener);
+    method public void addOnGesturingListener(android.gesture.GestureOverlayView.OnGesturingListener);
+    method public void cancelClearAnimation();
+    method public void cancelGesture();
+    method public void clear(boolean);
+    method public java.util.ArrayList<android.gesture.GesturePoint> getCurrentStroke();
+    method public long getFadeOffset();
+    method public android.gesture.Gesture getGesture();
+    method @ColorInt public int getGestureColor();
+    method public android.graphics.Path getGesturePath();
+    method public android.graphics.Path getGesturePath(android.graphics.Path);
+    method public float getGestureStrokeAngleThreshold();
+    method public float getGestureStrokeLengthThreshold();
+    method public float getGestureStrokeSquarenessTreshold();
+    method public int getGestureStrokeType();
+    method public float getGestureStrokeWidth();
+    method public int getOrientation();
+    method @ColorInt public int getUncertainGestureColor();
+    method public boolean isEventsInterceptionEnabled();
+    method public boolean isFadeEnabled();
+    method public boolean isGestureVisible();
+    method public boolean isGesturing();
+    method public void removeAllOnGestureListeners();
+    method public void removeAllOnGesturePerformedListeners();
+    method public void removeAllOnGesturingListeners();
+    method public void removeOnGestureListener(android.gesture.GestureOverlayView.OnGestureListener);
+    method public void removeOnGesturePerformedListener(android.gesture.GestureOverlayView.OnGesturePerformedListener);
+    method public void removeOnGesturingListener(android.gesture.GestureOverlayView.OnGesturingListener);
+    method public void setEventsInterceptionEnabled(boolean);
+    method public void setFadeEnabled(boolean);
+    method public void setFadeOffset(long);
+    method public void setGesture(android.gesture.Gesture);
+    method public void setGestureColor(@ColorInt int);
+    method public void setGestureStrokeAngleThreshold(float);
+    method public void setGestureStrokeLengthThreshold(float);
+    method public void setGestureStrokeSquarenessTreshold(float);
+    method public void setGestureStrokeType(int);
+    method public void setGestureStrokeWidth(float);
+    method public void setGestureVisible(boolean);
+    method public void setOrientation(int);
+    method public void setUncertainGestureColor(@ColorInt int);
+    field public static final int GESTURE_STROKE_TYPE_MULTIPLE = 1; // 0x1
+    field public static final int GESTURE_STROKE_TYPE_SINGLE = 0; // 0x0
+    field public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
+    field public static final int ORIENTATION_VERTICAL = 1; // 0x1
+  }
+
+  public static interface GestureOverlayView.OnGestureListener {
+    method public void onGesture(android.gesture.GestureOverlayView, android.view.MotionEvent);
+    method public void onGestureCancelled(android.gesture.GestureOverlayView, android.view.MotionEvent);
+    method public void onGestureEnded(android.gesture.GestureOverlayView, android.view.MotionEvent);
+    method public void onGestureStarted(android.gesture.GestureOverlayView, android.view.MotionEvent);
+  }
+
+  public static interface GestureOverlayView.OnGesturePerformedListener {
+    method public void onGesturePerformed(android.gesture.GestureOverlayView, android.gesture.Gesture);
+  }
+
+  public static interface GestureOverlayView.OnGesturingListener {
+    method public void onGesturingEnded(android.gesture.GestureOverlayView);
+    method public void onGesturingStarted(android.gesture.GestureOverlayView);
+  }
+
+  public class GesturePoint {
+    ctor public GesturePoint(float, float, long);
+    method public Object clone();
+    field public final long timestamp;
+    field public final float x;
+    field public final float y;
+  }
+
+  public class GestureStore {
+    ctor public GestureStore();
+    method public void addGesture(String, android.gesture.Gesture);
+    method public java.util.Set<java.lang.String> getGestureEntries();
+    method public java.util.ArrayList<android.gesture.Gesture> getGestures(String);
+    method public int getOrientationStyle();
+    method public int getSequenceType();
+    method public boolean hasChanged();
+    method public void load(java.io.InputStream) throws java.io.IOException;
+    method public void load(java.io.InputStream, boolean) throws java.io.IOException;
+    method public java.util.ArrayList<android.gesture.Prediction> recognize(android.gesture.Gesture);
+    method public void removeEntry(String);
+    method public void removeGesture(String, android.gesture.Gesture);
+    method public void save(java.io.OutputStream) throws java.io.IOException;
+    method public void save(java.io.OutputStream, boolean) throws java.io.IOException;
+    method public void setOrientationStyle(int);
+    method public void setSequenceType(int);
+    field public static final int ORIENTATION_INVARIANT = 1; // 0x1
+    field public static final int ORIENTATION_SENSITIVE = 2; // 0x2
+    field public static final int SEQUENCE_INVARIANT = 1; // 0x1
+    field public static final int SEQUENCE_SENSITIVE = 2; // 0x2
+  }
+
+  public class GestureStroke {
+    ctor public GestureStroke(java.util.ArrayList<android.gesture.GesturePoint>);
+    method public void clearPath();
+    method public Object clone();
+    method public android.gesture.OrientedBoundingBox computeOrientedBoundingBox();
+    method public android.graphics.Path getPath();
+    method public android.graphics.Path toPath(float, float, int);
+    field public final android.graphics.RectF boundingBox;
+    field public final float length;
+    field public final float[] points;
+  }
+
+  public final class GestureUtils {
+    method public static android.gesture.OrientedBoundingBox computeOrientedBoundingBox(java.util.ArrayList<android.gesture.GesturePoint>);
+    method public static android.gesture.OrientedBoundingBox computeOrientedBoundingBox(float[]);
+    method public static float[] spatialSampling(android.gesture.Gesture, int);
+    method public static float[] spatialSampling(android.gesture.Gesture, int, boolean);
+    method public static float[] temporalSampling(android.gesture.GestureStroke, int);
+  }
+
+  public class OrientedBoundingBox {
+    field public final float centerX;
+    field public final float centerY;
+    field public final float height;
+    field public final float orientation;
+    field public final float squareness;
+    field public final float width;
+  }
+
+  public class Prediction {
+    field public final String name;
+    field public double score;
+  }
+
+}
+
+package android.graphics {
+
+  public final class Bitmap implements android.os.Parcelable {
+    method @NonNull public android.graphics.Bitmap asShared();
+    method @WorkerThread public boolean compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream);
+    method public android.graphics.Bitmap copy(android.graphics.Bitmap.Config, boolean);
+    method public void copyPixelsFromBuffer(java.nio.Buffer);
+    method public void copyPixelsToBuffer(java.nio.Buffer);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Bitmap);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Bitmap, int, int, int, int);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Bitmap, int, int, int, int, @Nullable android.graphics.Matrix, boolean);
+    method public static android.graphics.Bitmap createBitmap(int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(int, int, @NonNull android.graphics.Bitmap.Config, boolean);
+    method public static android.graphics.Bitmap createBitmap(int, int, @NonNull android.graphics.Bitmap.Config, boolean, @NonNull android.graphics.ColorSpace);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, int, int, @NonNull android.graphics.Bitmap.Config, boolean);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, int, int, @NonNull android.graphics.Bitmap.Config, boolean, @NonNull android.graphics.ColorSpace);
+    method public static android.graphics.Bitmap createBitmap(@ColorInt @NonNull int[], int, int, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@NonNull android.util.DisplayMetrics, @ColorInt @NonNull int[], int, int, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@ColorInt @NonNull int[], int, int, android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createBitmap(@Nullable android.util.DisplayMetrics, @ColorInt @NonNull int[], int, int, @NonNull android.graphics.Bitmap.Config);
+    method @NonNull public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Picture);
+    method @NonNull public static android.graphics.Bitmap createBitmap(@NonNull android.graphics.Picture, int, int, @NonNull android.graphics.Bitmap.Config);
+    method public static android.graphics.Bitmap createScaledBitmap(@NonNull android.graphics.Bitmap, int, int, boolean);
+    method public int describeContents();
+    method public void eraseColor(@ColorInt int);
+    method public void eraseColor(@ColorLong long);
+    method @CheckResult public android.graphics.Bitmap extractAlpha();
+    method @CheckResult public android.graphics.Bitmap extractAlpha(android.graphics.Paint, int[]);
+    method public int getAllocationByteCount();
+    method public int getByteCount();
+    method @NonNull public android.graphics.Color getColor(int, int);
+    method @Nullable public android.graphics.ColorSpace getColorSpace();
+    method public android.graphics.Bitmap.Config getConfig();
+    method public int getDensity();
+    method public int getGenerationId();
+    method @NonNull public android.hardware.HardwareBuffer getHardwareBuffer();
+    method public int getHeight();
+    method public byte[] getNinePatchChunk();
+    method @ColorInt public int getPixel(int, int);
+    method public void getPixels(@ColorInt int[], int, int, int, int, int, int);
+    method public int getRowBytes();
+    method public int getScaledHeight(android.graphics.Canvas);
+    method public int getScaledHeight(android.util.DisplayMetrics);
+    method public int getScaledHeight(int);
+    method public int getScaledWidth(android.graphics.Canvas);
+    method public int getScaledWidth(android.util.DisplayMetrics);
+    method public int getScaledWidth(int);
+    method public int getWidth();
+    method public boolean hasAlpha();
+    method public boolean hasMipMap();
+    method public boolean isMutable();
+    method public boolean isPremultiplied();
+    method public boolean isRecycled();
+    method public void prepareToDraw();
+    method public void reconfigure(int, int, android.graphics.Bitmap.Config);
+    method public void recycle();
+    method public boolean sameAs(android.graphics.Bitmap);
+    method public void setColorSpace(@NonNull android.graphics.ColorSpace);
+    method public void setConfig(android.graphics.Bitmap.Config);
+    method public void setDensity(int);
+    method public void setHasAlpha(boolean);
+    method public void setHasMipMap(boolean);
+    method public void setHeight(int);
+    method public void setPixel(int, int, @ColorInt int);
+    method public void setPixels(@ColorInt int[], int, int, int, int, int, int);
+    method public void setPremultiplied(boolean);
+    method public void setWidth(int);
+    method @Nullable public static android.graphics.Bitmap wrapHardwareBuffer(@NonNull android.hardware.HardwareBuffer, @Nullable android.graphics.ColorSpace);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Bitmap> CREATOR;
+    field public static final int DENSITY_NONE = 0; // 0x0
+  }
+
+  public enum Bitmap.CompressFormat {
+    enum_constant public static final android.graphics.Bitmap.CompressFormat JPEG;
+    enum_constant public static final android.graphics.Bitmap.CompressFormat PNG;
+    enum_constant @Deprecated public static final android.graphics.Bitmap.CompressFormat WEBP;
+    enum_constant public static final android.graphics.Bitmap.CompressFormat WEBP_LOSSLESS;
+    enum_constant public static final android.graphics.Bitmap.CompressFormat WEBP_LOSSY;
+  }
+
+  public enum Bitmap.Config {
+    enum_constant public static final android.graphics.Bitmap.Config ALPHA_8;
+    enum_constant @Deprecated public static final android.graphics.Bitmap.Config ARGB_4444;
+    enum_constant public static final android.graphics.Bitmap.Config ARGB_8888;
+    enum_constant public static final android.graphics.Bitmap.Config HARDWARE;
+    enum_constant public static final android.graphics.Bitmap.Config RGBA_F16;
+    enum_constant public static final android.graphics.Bitmap.Config RGB_565;
+  }
+
+  public class BitmapFactory {
+    ctor public BitmapFactory();
+    method public static android.graphics.Bitmap decodeByteArray(byte[], int, int, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeByteArray(byte[], int, int);
+    method public static android.graphics.Bitmap decodeFile(String, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeFile(String);
+    method public static android.graphics.Bitmap decodeFileDescriptor(java.io.FileDescriptor, android.graphics.Rect, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeFileDescriptor(java.io.FileDescriptor);
+    method public static android.graphics.Bitmap decodeResource(android.content.res.Resources, int, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeResource(android.content.res.Resources, int);
+    method @Nullable public static android.graphics.Bitmap decodeResourceStream(@Nullable android.content.res.Resources, @Nullable android.util.TypedValue, @Nullable java.io.InputStream, @Nullable android.graphics.Rect, @Nullable android.graphics.BitmapFactory.Options);
+    method @Nullable public static android.graphics.Bitmap decodeStream(@Nullable java.io.InputStream, @Nullable android.graphics.Rect, @Nullable android.graphics.BitmapFactory.Options);
+    method public static android.graphics.Bitmap decodeStream(java.io.InputStream);
+  }
+
+  public static class BitmapFactory.Options {
+    ctor public BitmapFactory.Options();
+    method @Deprecated public void requestCancelDecode();
+    field public android.graphics.Bitmap inBitmap;
+    field public int inDensity;
+    field @Deprecated public boolean inDither;
+    field @Deprecated public boolean inInputShareable;
+    field public boolean inJustDecodeBounds;
+    field public boolean inMutable;
+    field @Deprecated public boolean inPreferQualityOverSpeed;
+    field public android.graphics.ColorSpace inPreferredColorSpace;
+    field public android.graphics.Bitmap.Config inPreferredConfig;
+    field public boolean inPremultiplied;
+    field @Deprecated public boolean inPurgeable;
+    field public int inSampleSize;
+    field public boolean inScaled;
+    field public int inScreenDensity;
+    field public int inTargetDensity;
+    field public byte[] inTempStorage;
+    field @Deprecated public boolean mCancel;
+    field public android.graphics.ColorSpace outColorSpace;
+    field public android.graphics.Bitmap.Config outConfig;
+    field public int outHeight;
+    field public String outMimeType;
+    field public int outWidth;
+  }
+
+  public final class BitmapRegionDecoder {
+    method public android.graphics.Bitmap decodeRegion(android.graphics.Rect, android.graphics.BitmapFactory.Options);
+    method public int getHeight();
+    method public int getWidth();
+    method public boolean isRecycled();
+    method @Deprecated @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull byte[], int, int, boolean) throws java.io.IOException;
+    method @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull byte[], int, int) throws java.io.IOException;
+    method @Deprecated @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull java.io.FileDescriptor, boolean) throws java.io.IOException;
+    method @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method @Deprecated @Nullable public static android.graphics.BitmapRegionDecoder newInstance(@NonNull java.io.InputStream, boolean) throws java.io.IOException;
+    method @Nullable public static android.graphics.BitmapRegionDecoder newInstance(@NonNull java.io.InputStream) throws java.io.IOException;
+    method @Deprecated @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull String, boolean) throws java.io.IOException;
+    method @NonNull public static android.graphics.BitmapRegionDecoder newInstance(@NonNull String) throws java.io.IOException;
+    method public void recycle();
+  }
+
+  public class BitmapShader extends android.graphics.Shader {
+    ctor public BitmapShader(@NonNull android.graphics.Bitmap, @NonNull android.graphics.Shader.TileMode, @NonNull android.graphics.Shader.TileMode);
+  }
+
+  public enum BlendMode {
+    enum_constant public static final android.graphics.BlendMode CLEAR;
+    enum_constant public static final android.graphics.BlendMode COLOR;
+    enum_constant public static final android.graphics.BlendMode COLOR_BURN;
+    enum_constant public static final android.graphics.BlendMode COLOR_DODGE;
+    enum_constant public static final android.graphics.BlendMode DARKEN;
+    enum_constant public static final android.graphics.BlendMode DIFFERENCE;
+    enum_constant public static final android.graphics.BlendMode DST;
+    enum_constant public static final android.graphics.BlendMode DST_ATOP;
+    enum_constant public static final android.graphics.BlendMode DST_IN;
+    enum_constant public static final android.graphics.BlendMode DST_OUT;
+    enum_constant public static final android.graphics.BlendMode DST_OVER;
+    enum_constant public static final android.graphics.BlendMode EXCLUSION;
+    enum_constant public static final android.graphics.BlendMode HARD_LIGHT;
+    enum_constant public static final android.graphics.BlendMode HUE;
+    enum_constant public static final android.graphics.BlendMode LIGHTEN;
+    enum_constant public static final android.graphics.BlendMode LUMINOSITY;
+    enum_constant public static final android.graphics.BlendMode MODULATE;
+    enum_constant public static final android.graphics.BlendMode MULTIPLY;
+    enum_constant public static final android.graphics.BlendMode OVERLAY;
+    enum_constant public static final android.graphics.BlendMode PLUS;
+    enum_constant public static final android.graphics.BlendMode SATURATION;
+    enum_constant public static final android.graphics.BlendMode SCREEN;
+    enum_constant public static final android.graphics.BlendMode SOFT_LIGHT;
+    enum_constant public static final android.graphics.BlendMode SRC;
+    enum_constant public static final android.graphics.BlendMode SRC_ATOP;
+    enum_constant public static final android.graphics.BlendMode SRC_IN;
+    enum_constant public static final android.graphics.BlendMode SRC_OUT;
+    enum_constant public static final android.graphics.BlendMode SRC_OVER;
+    enum_constant public static final android.graphics.BlendMode XOR;
+  }
+
+  public final class BlendModeColorFilter extends android.graphics.ColorFilter {
+    ctor public BlendModeColorFilter(@ColorInt int, @NonNull android.graphics.BlendMode);
+    method @ColorInt public int getColor();
+    method public android.graphics.BlendMode getMode();
+  }
+
+  public class BlurMaskFilter extends android.graphics.MaskFilter {
+    ctor public BlurMaskFilter(float, android.graphics.BlurMaskFilter.Blur);
+  }
+
+  public enum BlurMaskFilter.Blur {
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur INNER;
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur NORMAL;
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur OUTER;
+    enum_constant public static final android.graphics.BlurMaskFilter.Blur SOLID;
+  }
+
+  public class Camera {
+    ctor public Camera();
+    method public void applyToCanvas(android.graphics.Canvas);
+    method public float dotWithNormal(float, float, float);
+    method public float getLocationX();
+    method public float getLocationY();
+    method public float getLocationZ();
+    method public void getMatrix(android.graphics.Matrix);
+    method public void restore();
+    method public void rotate(float, float, float);
+    method public void rotateX(float);
+    method public void rotateY(float);
+    method public void rotateZ(float);
+    method public void save();
+    method public void setLocation(float, float, float);
+    method public void translate(float, float, float);
+  }
+
+  public class Canvas {
+    ctor public Canvas();
+    ctor public Canvas(@NonNull android.graphics.Bitmap);
+    method public boolean clipOutPath(@NonNull android.graphics.Path);
+    method public boolean clipOutRect(@NonNull android.graphics.RectF);
+    method public boolean clipOutRect(@NonNull android.graphics.Rect);
+    method public boolean clipOutRect(float, float, float, float);
+    method public boolean clipOutRect(int, int, int, int);
+    method @Deprecated public boolean clipPath(@NonNull android.graphics.Path, @NonNull android.graphics.Region.Op);
+    method public boolean clipPath(@NonNull android.graphics.Path);
+    method @Deprecated public boolean clipRect(@NonNull android.graphics.RectF, @NonNull android.graphics.Region.Op);
+    method @Deprecated public boolean clipRect(@NonNull android.graphics.Rect, @NonNull android.graphics.Region.Op);
+    method public boolean clipRect(@NonNull android.graphics.RectF);
+    method public boolean clipRect(@NonNull android.graphics.Rect);
+    method @Deprecated public boolean clipRect(float, float, float, float, @NonNull android.graphics.Region.Op);
+    method public boolean clipRect(float, float, float, float);
+    method public boolean clipRect(int, int, int, int);
+    method public void concat(@Nullable android.graphics.Matrix);
+    method public void disableZ();
+    method public void drawARGB(int, int, int, int);
+    method public void drawArc(@NonNull android.graphics.RectF, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawArc(float, float, float, float, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, float, float, @Nullable android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @NonNull android.graphics.RectF, @Nullable android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @NonNull android.graphics.Rect, @Nullable android.graphics.Paint);
+    method @Deprecated public void drawBitmap(@NonNull int[], int, int, float, float, int, int, boolean, @Nullable android.graphics.Paint);
+    method @Deprecated public void drawBitmap(@NonNull int[], int, int, int, int, int, int, boolean, @Nullable android.graphics.Paint);
+    method public void drawBitmap(@NonNull android.graphics.Bitmap, @NonNull android.graphics.Matrix, @Nullable android.graphics.Paint);
+    method public void drawBitmapMesh(@NonNull android.graphics.Bitmap, int, int, @NonNull float[], int, @Nullable int[], int, @Nullable android.graphics.Paint);
+    method public void drawCircle(float, float, float, @NonNull android.graphics.Paint);
+    method public void drawColor(@ColorInt int);
+    method public void drawColor(@ColorLong long);
+    method public void drawColor(@ColorInt int, @NonNull android.graphics.PorterDuff.Mode);
+    method public void drawColor(@ColorInt int, @NonNull android.graphics.BlendMode);
+    method public void drawColor(@ColorLong long, @NonNull android.graphics.BlendMode);
+    method public void drawDoubleRoundRect(@NonNull android.graphics.RectF, float, float, @NonNull android.graphics.RectF, float, float, @NonNull android.graphics.Paint);
+    method public void drawDoubleRoundRect(@NonNull android.graphics.RectF, @NonNull float[], @NonNull android.graphics.RectF, @NonNull float[], @NonNull android.graphics.Paint);
+    method public void drawGlyphs(@NonNull int[], @IntRange(from=0) int, @NonNull float[], @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.fonts.Font, @NonNull android.graphics.Paint);
+    method public void drawLine(float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawLines(@NonNull @Size(multiple=4) float[], int, int, @NonNull android.graphics.Paint);
+    method public void drawLines(@NonNull @Size(multiple=4) float[], @NonNull android.graphics.Paint);
+    method public void drawOval(@NonNull android.graphics.RectF, @NonNull android.graphics.Paint);
+    method public void drawOval(float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawPaint(@NonNull android.graphics.Paint);
+    method public void drawPatch(@NonNull android.graphics.NinePatch, @NonNull android.graphics.Rect, @Nullable android.graphics.Paint);
+    method public void drawPatch(@NonNull android.graphics.NinePatch, @NonNull android.graphics.RectF, @Nullable android.graphics.Paint);
+    method public void drawPath(@NonNull android.graphics.Path, @NonNull android.graphics.Paint);
+    method public void drawPicture(@NonNull android.graphics.Picture);
+    method public void drawPicture(@NonNull android.graphics.Picture, @NonNull android.graphics.RectF);
+    method public void drawPicture(@NonNull android.graphics.Picture, @NonNull android.graphics.Rect);
+    method public void drawPoint(float, float, @NonNull android.graphics.Paint);
+    method public void drawPoints(@Size(multiple=2) float[], int, int, @NonNull android.graphics.Paint);
+    method public void drawPoints(@NonNull @Size(multiple=2) float[], @NonNull android.graphics.Paint);
+    method @Deprecated public void drawPosText(@NonNull char[], int, int, @NonNull @Size(multiple=2) float[], @NonNull android.graphics.Paint);
+    method @Deprecated public void drawPosText(@NonNull String, @NonNull @Size(multiple=2) float[], @NonNull android.graphics.Paint);
+    method public void drawRGB(int, int, int);
+    method public void drawRect(@NonNull android.graphics.RectF, @NonNull android.graphics.Paint);
+    method public void drawRect(@NonNull android.graphics.Rect, @NonNull android.graphics.Paint);
+    method public void drawRect(float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawRenderNode(@NonNull android.graphics.RenderNode);
+    method public void drawRoundRect(@NonNull android.graphics.RectF, float, float, @NonNull android.graphics.Paint);
+    method public void drawRoundRect(float, float, float, float, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull char[], int, int, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull String, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull String, int, int, float, float, @NonNull android.graphics.Paint);
+    method public void drawText(@NonNull CharSequence, int, int, float, float, @NonNull android.graphics.Paint);
+    method public void drawTextOnPath(@NonNull char[], int, int, @NonNull android.graphics.Path, float, float, @NonNull android.graphics.Paint);
+    method public void drawTextOnPath(@NonNull String, @NonNull android.graphics.Path, float, float, @NonNull android.graphics.Paint);
+    method public void drawTextRun(@NonNull char[], int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawTextRun(@NonNull CharSequence, int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawTextRun(@NonNull android.graphics.text.MeasuredText, int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method public void drawVertices(@NonNull android.graphics.Canvas.VertexMode, int, @NonNull float[], int, @Nullable float[], int, @Nullable int[], int, @Nullable short[], int, int, @NonNull android.graphics.Paint);
+    method public void enableZ();
+    method public boolean getClipBounds(@Nullable android.graphics.Rect);
+    method @NonNull public final android.graphics.Rect getClipBounds();
+    method public int getDensity();
+    method @Nullable public android.graphics.DrawFilter getDrawFilter();
+    method public int getHeight();
+    method @Deprecated public void getMatrix(@NonNull android.graphics.Matrix);
+    method @Deprecated @NonNull public final android.graphics.Matrix getMatrix();
+    method public int getMaximumBitmapHeight();
+    method public int getMaximumBitmapWidth();
+    method public int getSaveCount();
+    method public int getWidth();
+    method public boolean isHardwareAccelerated();
+    method public boolean isOpaque();
+    method @Deprecated public boolean quickReject(@NonNull android.graphics.RectF, @NonNull android.graphics.Canvas.EdgeType);
+    method public boolean quickReject(@NonNull android.graphics.RectF);
+    method @Deprecated public boolean quickReject(@NonNull android.graphics.Path, @NonNull android.graphics.Canvas.EdgeType);
+    method public boolean quickReject(@NonNull android.graphics.Path);
+    method @Deprecated public boolean quickReject(float, float, float, float, @NonNull android.graphics.Canvas.EdgeType);
+    method public boolean quickReject(float, float, float, float);
+    method public void restore();
+    method public void restoreToCount(int);
+    method public void rotate(float);
+    method public final void rotate(float, float, float);
+    method public int save();
+    method @Deprecated public int saveLayer(@Nullable android.graphics.RectF, @Nullable android.graphics.Paint, int);
+    method public int saveLayer(@Nullable android.graphics.RectF, @Nullable android.graphics.Paint);
+    method @Deprecated public int saveLayer(float, float, float, float, @Nullable android.graphics.Paint, int);
+    method public int saveLayer(float, float, float, float, @Nullable android.graphics.Paint);
+    method @Deprecated public int saveLayerAlpha(@Nullable android.graphics.RectF, int, int);
+    method public int saveLayerAlpha(@Nullable android.graphics.RectF, int);
+    method @Deprecated public int saveLayerAlpha(float, float, float, float, int, int);
+    method public int saveLayerAlpha(float, float, float, float, int);
+    method public void scale(float, float);
+    method public final void scale(float, float, float, float);
+    method public void setBitmap(@Nullable android.graphics.Bitmap);
+    method public void setDensity(int);
+    method public void setDrawFilter(@Nullable android.graphics.DrawFilter);
+    method public void setMatrix(@Nullable android.graphics.Matrix);
+    method public void skew(float, float);
+    method public void translate(float, float);
+    field public static final int ALL_SAVE_FLAG = 31; // 0x1f
+  }
+
+  @Deprecated public enum Canvas.EdgeType {
+    enum_constant @Deprecated public static final android.graphics.Canvas.EdgeType AA;
+    enum_constant @Deprecated public static final android.graphics.Canvas.EdgeType BW;
+  }
+
+  public enum Canvas.VertexMode {
+    enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLES;
+    enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_FAN;
+    enum_constant public static final android.graphics.Canvas.VertexMode TRIANGLE_STRIP;
+  }
+
+  @AnyThread public class Color {
+    ctor public Color();
+    method @ColorInt public static int HSVToColor(@Size(3) float[]);
+    method @ColorInt public static int HSVToColor(@IntRange(from=0, to=255) int, @Size(3) float[]);
+    method public static void RGBToHSV(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @Size(3) float[]);
+    method public float alpha();
+    method public static float alpha(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int alpha(int);
+    method @ColorInt public static int argb(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int);
+    method @ColorInt public static int argb(float, float, float, float);
+    method public float blue();
+    method public static float blue(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int blue(int);
+    method @NonNull public static android.graphics.ColorSpace colorSpace(@ColorLong long);
+    method public static void colorToHSV(@ColorInt int, @Size(3) float[]);
+    method @NonNull public android.graphics.Color convert(@NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(@ColorInt int, @NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(@ColorLong long, @NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(float, float, float, float, @NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace);
+    method @ColorLong public static long convert(@ColorLong long, @NonNull android.graphics.ColorSpace.Connector);
+    method @ColorLong public static long convert(float, float, float, float, @NonNull android.graphics.ColorSpace.Connector);
+    method @NonNull public android.graphics.ColorSpace getColorSpace();
+    method public float getComponent(@IntRange(from=0, to=4) int);
+    method @IntRange(from=4, to=5) public int getComponentCount();
+    method @NonNull @Size(min=4, max=5) public float[] getComponents();
+    method @NonNull @Size(min=4) public float[] getComponents(@Nullable @Size(min=4) float[]);
+    method public android.graphics.ColorSpace.Model getModel();
+    method public float green();
+    method public static float green(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int green(int);
+    method public static boolean isInColorSpace(@ColorLong long, @NonNull android.graphics.ColorSpace);
+    method public boolean isSrgb();
+    method public static boolean isSrgb(@ColorLong long);
+    method public boolean isWideGamut();
+    method public static boolean isWideGamut(@ColorLong long);
+    method public float luminance();
+    method public static float luminance(@ColorLong long);
+    method public static float luminance(@ColorInt int);
+    method @ColorLong public long pack();
+    method @ColorLong public static long pack(@ColorInt int);
+    method @ColorLong public static long pack(float, float, float);
+    method @ColorLong public static long pack(float, float, float, float);
+    method @ColorLong public static long pack(float, float, float, float, @NonNull android.graphics.ColorSpace);
+    method @ColorInt public static int parseColor(@Size(min=1) String);
+    method public float red();
+    method public static float red(@ColorLong long);
+    method @IntRange(from=0, to=255) public static int red(int);
+    method @ColorInt public static int rgb(@IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int, @IntRange(from=0, to=255) int);
+    method @ColorInt public static int rgb(float, float, float);
+    method @ColorInt public int toArgb();
+    method @ColorInt public static int toArgb(@ColorLong long);
+    method @NonNull public static android.graphics.Color valueOf(@ColorInt int);
+    method @NonNull public static android.graphics.Color valueOf(@ColorLong long);
+    method @NonNull public static android.graphics.Color valueOf(float, float, float);
+    method @NonNull public static android.graphics.Color valueOf(float, float, float, float);
+    method @NonNull public static android.graphics.Color valueOf(float, float, float, float, @NonNull android.graphics.ColorSpace);
+    method @NonNull public static android.graphics.Color valueOf(@NonNull @Size(min=4, max=5) float[], @NonNull android.graphics.ColorSpace);
+    field @ColorInt public static final int BLACK = -16777216; // 0xff000000
+    field @ColorInt public static final int BLUE = -16776961; // 0xff0000ff
+    field @ColorInt public static final int CYAN = -16711681; // 0xff00ffff
+    field @ColorInt public static final int DKGRAY = -12303292; // 0xff444444
+    field @ColorInt public static final int GRAY = -7829368; // 0xff888888
+    field @ColorInt public static final int GREEN = -16711936; // 0xff00ff00
+    field @ColorInt public static final int LTGRAY = -3355444; // 0xffcccccc
+    field @ColorInt public static final int MAGENTA = -65281; // 0xffff00ff
+    field @ColorInt public static final int RED = -65536; // 0xffff0000
+    field @ColorInt public static final int TRANSPARENT = 0; // 0x0
+    field @ColorInt public static final int WHITE = -1; // 0xffffffff
+    field @ColorInt public static final int YELLOW = -256; // 0xffffff00
+  }
+
+  public class ColorFilter {
+    ctor @Deprecated public ColorFilter();
+  }
+
+  public class ColorMatrix {
+    ctor public ColorMatrix();
+    ctor public ColorMatrix(float[]);
+    ctor public ColorMatrix(android.graphics.ColorMatrix);
+    method public final float[] getArray();
+    method public void postConcat(android.graphics.ColorMatrix);
+    method public void preConcat(android.graphics.ColorMatrix);
+    method public void reset();
+    method public void set(android.graphics.ColorMatrix);
+    method public void set(float[]);
+    method public void setConcat(android.graphics.ColorMatrix, android.graphics.ColorMatrix);
+    method public void setRGB2YUV();
+    method public void setRotate(int, float);
+    method public void setSaturation(float);
+    method public void setScale(float, float, float, float);
+    method public void setYUV2RGB();
+  }
+
+  public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
+    ctor public ColorMatrixColorFilter(@NonNull android.graphics.ColorMatrix);
+    ctor public ColorMatrixColorFilter(@NonNull float[]);
+    method public void getColorMatrix(android.graphics.ColorMatrix);
+  }
+
+  @AnyThread public abstract class ColorSpace {
+    method @NonNull public static android.graphics.ColorSpace adapt(@NonNull android.graphics.ColorSpace, @NonNull @Size(min=2, max=3) float[]);
+    method @NonNull public static android.graphics.ColorSpace adapt(@NonNull android.graphics.ColorSpace, @NonNull @Size(min=2, max=3) float[], @NonNull android.graphics.ColorSpace.Adaptation);
+    method @NonNull @Size(3) public static float[] cctToXyz(@IntRange(from=1) int);
+    method @NonNull @Size(9) public static float[] chromaticAdaptation(@NonNull android.graphics.ColorSpace.Adaptation, @NonNull @Size(min=2, max=3) float[], @NonNull @Size(min=2, max=3) float[]);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace.RenderIntent);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace);
+    method @NonNull public static android.graphics.ColorSpace.Connector connect(@NonNull android.graphics.ColorSpace, @NonNull android.graphics.ColorSpace.RenderIntent);
+    method @NonNull @Size(min=3) public float[] fromXyz(float, float, float);
+    method @NonNull @Size(min=3) public abstract float[] fromXyz(@NonNull @Size(min=3) float[]);
+    method @NonNull public static android.graphics.ColorSpace get(@NonNull android.graphics.ColorSpace.Named);
+    method @IntRange(from=1, to=4) public int getComponentCount();
+    method @IntRange(from=android.graphics.ColorSpace.MIN_ID, to=android.graphics.ColorSpace.MAX_ID) public int getId();
+    method public abstract float getMaxValue(@IntRange(from=0, to=3) int);
+    method public abstract float getMinValue(@IntRange(from=0, to=3) int);
+    method @NonNull public android.graphics.ColorSpace.Model getModel();
+    method @NonNull public String getName();
+    method public boolean isSrgb();
+    method public abstract boolean isWideGamut();
+    method @Nullable public static android.graphics.ColorSpace match(@NonNull @Size(9) float[], @NonNull android.graphics.ColorSpace.Rgb.TransferParameters);
+    method @NonNull @Size(3) public float[] toXyz(float, float, float);
+    method @NonNull @Size(min=3) public abstract float[] toXyz(@NonNull @Size(min=3) float[]);
+    field public static final float[] ILLUMINANT_A;
+    field public static final float[] ILLUMINANT_B;
+    field public static final float[] ILLUMINANT_C;
+    field public static final float[] ILLUMINANT_D50;
+    field public static final float[] ILLUMINANT_D55;
+    field public static final float[] ILLUMINANT_D60;
+    field public static final float[] ILLUMINANT_D65;
+    field public static final float[] ILLUMINANT_D75;
+    field public static final float[] ILLUMINANT_E;
+    field public static final int MAX_ID = 63; // 0x3f
+    field public static final int MIN_ID = -1; // 0xffffffff
+  }
+
+  public enum ColorSpace.Adaptation {
+    enum_constant public static final android.graphics.ColorSpace.Adaptation BRADFORD;
+    enum_constant public static final android.graphics.ColorSpace.Adaptation CIECAT02;
+    enum_constant public static final android.graphics.ColorSpace.Adaptation VON_KRIES;
+  }
+
+  @AnyThread public static class ColorSpace.Connector {
+    method @NonNull public android.graphics.ColorSpace getDestination();
+    method public android.graphics.ColorSpace.RenderIntent getRenderIntent();
+    method @NonNull public android.graphics.ColorSpace getSource();
+    method @NonNull @Size(3) public float[] transform(float, float, float);
+    method @NonNull @Size(min=3) public float[] transform(@NonNull @Size(min=3) float[]);
+  }
+
+  public enum ColorSpace.Model {
+    method @IntRange(from=1, to=4) public int getComponentCount();
+    enum_constant public static final android.graphics.ColorSpace.Model CMYK;
+    enum_constant public static final android.graphics.ColorSpace.Model LAB;
+    enum_constant public static final android.graphics.ColorSpace.Model RGB;
+    enum_constant public static final android.graphics.ColorSpace.Model XYZ;
+  }
+
+  public enum ColorSpace.Named {
+    enum_constant public static final android.graphics.ColorSpace.Named ACES;
+    enum_constant public static final android.graphics.ColorSpace.Named ACESCG;
+    enum_constant public static final android.graphics.ColorSpace.Named ADOBE_RGB;
+    enum_constant public static final android.graphics.ColorSpace.Named BT2020;
+    enum_constant public static final android.graphics.ColorSpace.Named BT709;
+    enum_constant public static final android.graphics.ColorSpace.Named CIE_LAB;
+    enum_constant public static final android.graphics.ColorSpace.Named CIE_XYZ;
+    enum_constant public static final android.graphics.ColorSpace.Named DCI_P3;
+    enum_constant public static final android.graphics.ColorSpace.Named DISPLAY_P3;
+    enum_constant public static final android.graphics.ColorSpace.Named EXTENDED_SRGB;
+    enum_constant public static final android.graphics.ColorSpace.Named LINEAR_EXTENDED_SRGB;
+    enum_constant public static final android.graphics.ColorSpace.Named LINEAR_SRGB;
+    enum_constant public static final android.graphics.ColorSpace.Named NTSC_1953;
+    enum_constant public static final android.graphics.ColorSpace.Named PRO_PHOTO_RGB;
+    enum_constant public static final android.graphics.ColorSpace.Named SMPTE_C;
+    enum_constant public static final android.graphics.ColorSpace.Named SRGB;
+  }
+
+  public enum ColorSpace.RenderIntent {
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent ABSOLUTE;
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent PERCEPTUAL;
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent RELATIVE;
+    enum_constant public static final android.graphics.ColorSpace.RenderIntent SATURATION;
+  }
+
+  @AnyThread public static class ColorSpace.Rgb extends android.graphics.ColorSpace {
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(9) float[], @NonNull java.util.function.DoubleUnaryOperator, @NonNull java.util.function.DoubleUnaryOperator);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(min=6, max=9) float[], @NonNull @Size(min=2, max=3) float[], @NonNull java.util.function.DoubleUnaryOperator, @NonNull java.util.function.DoubleUnaryOperator, float, float);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(9) float[], @NonNull android.graphics.ColorSpace.Rgb.TransferParameters);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(min=6, max=9) float[], @NonNull @Size(min=2, max=3) float[], @NonNull android.graphics.ColorSpace.Rgb.TransferParameters);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(9) float[], double);
+    ctor public ColorSpace.Rgb(@NonNull @Size(min=1) String, @NonNull @Size(min=6, max=9) float[], @NonNull @Size(min=2, max=3) float[], double);
+    method @NonNull @Size(3) public float[] fromLinear(float, float, float);
+    method @NonNull @Size(min=3) public float[] fromLinear(@NonNull @Size(min=3) float[]);
+    method @NonNull @Size(min=3) public float[] fromXyz(@NonNull @Size(min=3) float[]);
+    method @NonNull public java.util.function.DoubleUnaryOperator getEotf();
+    method @NonNull @Size(min=9) public float[] getInverseTransform(@NonNull @Size(min=9) float[]);
+    method @NonNull @Size(9) public float[] getInverseTransform();
+    method public float getMaxValue(int);
+    method public float getMinValue(int);
+    method @NonNull public java.util.function.DoubleUnaryOperator getOetf();
+    method @NonNull @Size(min=6) public float[] getPrimaries(@NonNull @Size(min=6) float[]);
+    method @NonNull @Size(6) public float[] getPrimaries();
+    method @Nullable public android.graphics.ColorSpace.Rgb.TransferParameters getTransferParameters();
+    method @NonNull @Size(min=9) public float[] getTransform(@NonNull @Size(min=9) float[]);
+    method @NonNull @Size(9) public float[] getTransform();
+    method @NonNull @Size(min=2) public float[] getWhitePoint(@NonNull @Size(min=2) float[]);
+    method @NonNull @Size(2) public float[] getWhitePoint();
+    method public boolean isWideGamut();
+    method @NonNull @Size(3) public float[] toLinear(float, float, float);
+    method @NonNull @Size(min=3) public float[] toLinear(@NonNull @Size(min=3) float[]);
+    method @NonNull @Size(min=3) public float[] toXyz(@NonNull @Size(min=3) float[]);
+  }
+
+  public static class ColorSpace.Rgb.TransferParameters {
+    ctor public ColorSpace.Rgb.TransferParameters(double, double, double, double, double);
+    ctor public ColorSpace.Rgb.TransferParameters(double, double, double, double, double, double, double);
+    field public final double a;
+    field public final double b;
+    field public final double c;
+    field public final double d;
+    field public final double e;
+    field public final double f;
+    field public final double g;
+  }
+
+  public class ComposePathEffect extends android.graphics.PathEffect {
+    ctor public ComposePathEffect(android.graphics.PathEffect, android.graphics.PathEffect);
+  }
+
+  public class ComposeShader extends android.graphics.Shader {
+    ctor @Deprecated public ComposeShader(@NonNull android.graphics.Shader, @NonNull android.graphics.Shader, @NonNull android.graphics.Xfermode);
+    ctor public ComposeShader(@NonNull android.graphics.Shader, @NonNull android.graphics.Shader, @NonNull android.graphics.PorterDuff.Mode);
+    ctor public ComposeShader(@NonNull android.graphics.Shader, @NonNull android.graphics.Shader, @NonNull android.graphics.BlendMode);
+  }
+
+  public class CornerPathEffect extends android.graphics.PathEffect {
+    ctor public CornerPathEffect(float);
+  }
+
+  public class DashPathEffect extends android.graphics.PathEffect {
+    ctor public DashPathEffect(float[], float);
+  }
+
+  public class DiscretePathEffect extends android.graphics.PathEffect {
+    ctor public DiscretePathEffect(float, float);
+  }
+
+  public class DrawFilter {
+    ctor public DrawFilter();
+  }
+
+  public class EmbossMaskFilter extends android.graphics.MaskFilter {
+    ctor @Deprecated public EmbossMaskFilter(float[], float, float, float);
+  }
+
+  public class HardwareRenderer {
+    ctor public HardwareRenderer();
+    method public void clearContent();
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest createRenderRequest();
+    method public void destroy();
+    method public boolean isOpaque();
+    method public void notifyFramePending();
+    method public void setContentRoot(@Nullable android.graphics.RenderNode);
+    method public void setLightSourceAlpha(@FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
+    method public void setLightSourceGeometry(float, float, float, float);
+    method public void setName(@NonNull String);
+    method public void setOpaque(boolean);
+    method public void setSurface(@Nullable android.view.Surface);
+    method public void start();
+    method public void stop();
+    field public static final int SYNC_CONTEXT_IS_STOPPED = 4; // 0x4
+    field public static final int SYNC_FRAME_DROPPED = 8; // 0x8
+    field public static final int SYNC_LOST_SURFACE_REWARD_IF_FOUND = 2; // 0x2
+    field public static final int SYNC_OK = 0; // 0x0
+    field public static final int SYNC_REDRAW_REQUESTED = 1; // 0x1
+  }
+
+  public final class HardwareRenderer.FrameRenderRequest {
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setFrameCommitCallback(@NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setVsyncTime(long);
+    method @NonNull public android.graphics.HardwareRenderer.FrameRenderRequest setWaitForPresent(boolean);
+    method public int syncAndDraw();
+  }
+
+  public final class ImageDecoder implements java.lang.AutoCloseable {
+    method public void close();
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull android.content.res.Resources, int);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull android.content.ContentResolver, @NonNull android.net.Uri);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull android.content.res.AssetManager, @NonNull String);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull byte[], int, int) throws java.lang.ArrayIndexOutOfBoundsException;
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull byte[]);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull java.nio.ByteBuffer);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull java.io.File);
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(@NonNull java.util.concurrent.Callable<android.content.res.AssetFileDescriptor>);
+    method @NonNull @WorkerThread public static android.graphics.Bitmap decodeBitmap(@NonNull android.graphics.ImageDecoder.Source, @NonNull android.graphics.ImageDecoder.OnHeaderDecodedListener) throws java.io.IOException;
+    method @NonNull @WorkerThread public static android.graphics.Bitmap decodeBitmap(@NonNull android.graphics.ImageDecoder.Source) throws java.io.IOException;
+    method @NonNull @WorkerThread public static android.graphics.drawable.Drawable decodeDrawable(@NonNull android.graphics.ImageDecoder.Source, @NonNull android.graphics.ImageDecoder.OnHeaderDecodedListener) throws java.io.IOException;
+    method @NonNull @WorkerThread public static android.graphics.drawable.Drawable decodeDrawable(@NonNull android.graphics.ImageDecoder.Source) throws java.io.IOException;
+    method public int getAllocator();
+    method @Nullable public android.graphics.Rect getCrop();
+    method public int getMemorySizePolicy();
+    method @Nullable public android.graphics.ImageDecoder.OnPartialImageListener getOnPartialImageListener();
+    method @Nullable public android.graphics.PostProcessor getPostProcessor();
+    method public boolean isDecodeAsAlphaMaskEnabled();
+    method public static boolean isMimeTypeSupported(@NonNull String);
+    method public boolean isMutableRequired();
+    method public boolean isUnpremultipliedRequired();
+    method public void setAllocator(int);
+    method public void setCrop(@Nullable android.graphics.Rect);
+    method public void setDecodeAsAlphaMaskEnabled(boolean);
+    method public void setMemorySizePolicy(int);
+    method public void setMutableRequired(boolean);
+    method public void setOnPartialImageListener(@Nullable android.graphics.ImageDecoder.OnPartialImageListener);
+    method public void setPostProcessor(@Nullable android.graphics.PostProcessor);
+    method public void setTargetColorSpace(android.graphics.ColorSpace);
+    method public void setTargetSampleSize(@IntRange(from=1) int);
+    method public void setTargetSize(@IntRange(from=1) @Px int, @IntRange(from=1) @Px int);
+    method public void setUnpremultipliedRequired(boolean);
+    field public static final int ALLOCATOR_DEFAULT = 0; // 0x0
+    field public static final int ALLOCATOR_HARDWARE = 3; // 0x3
+    field public static final int ALLOCATOR_SHARED_MEMORY = 2; // 0x2
+    field public static final int ALLOCATOR_SOFTWARE = 1; // 0x1
+    field public static final int MEMORY_POLICY_DEFAULT = 1; // 0x1
+    field public static final int MEMORY_POLICY_LOW_RAM = 0; // 0x0
+  }
+
+  public static final class ImageDecoder.DecodeException extends java.io.IOException {
+    method public int getError();
+    method @NonNull public android.graphics.ImageDecoder.Source getSource();
+    field public static final int SOURCE_EXCEPTION = 1; // 0x1
+    field public static final int SOURCE_INCOMPLETE = 2; // 0x2
+    field public static final int SOURCE_MALFORMED_DATA = 3; // 0x3
+  }
+
+  public static class ImageDecoder.ImageInfo {
+    method @Nullable public android.graphics.ColorSpace getColorSpace();
+    method @NonNull public String getMimeType();
+    method @NonNull public android.util.Size getSize();
+    method public boolean isAnimated();
+  }
+
+  public static interface ImageDecoder.OnHeaderDecodedListener {
+    method public void onHeaderDecoded(@NonNull android.graphics.ImageDecoder, @NonNull android.graphics.ImageDecoder.ImageInfo, @NonNull android.graphics.ImageDecoder.Source);
+  }
+
+  public static interface ImageDecoder.OnPartialImageListener {
+    method public boolean onPartialImage(@NonNull android.graphics.ImageDecoder.DecodeException);
+  }
+
+  public abstract static class ImageDecoder.Source {
+  }
+
+  public class ImageFormat {
+    ctor public ImageFormat();
+    method public static int getBitsPerPixel(int);
+    field public static final int DEPTH16 = 1144402265; // 0x44363159
+    field public static final int DEPTH_JPEG = 1768253795; // 0x69656963
+    field public static final int DEPTH_POINT_CLOUD = 257; // 0x101
+    field public static final int FLEX_RGBA_8888 = 42; // 0x2a
+    field public static final int FLEX_RGB_888 = 41; // 0x29
+    field public static final int HEIC = 1212500294; // 0x48454946
+    field public static final int JPEG = 256; // 0x100
+    field public static final int NV16 = 16; // 0x10
+    field public static final int NV21 = 17; // 0x11
+    field public static final int PRIVATE = 34; // 0x22
+    field public static final int RAW10 = 37; // 0x25
+    field public static final int RAW12 = 38; // 0x26
+    field public static final int RAW_PRIVATE = 36; // 0x24
+    field public static final int RAW_SENSOR = 32; // 0x20
+    field public static final int RGB_565 = 4; // 0x4
+    field public static final int UNKNOWN = 0; // 0x0
+    field public static final int Y8 = 538982489; // 0x20203859
+    field public static final int YCBCR_P010 = 54; // 0x36
+    field public static final int YUV_420_888 = 35; // 0x23
+    field public static final int YUV_422_888 = 39; // 0x27
+    field public static final int YUV_444_888 = 40; // 0x28
+    field public static final int YUY2 = 20; // 0x14
+    field public static final int YV12 = 842094169; // 0x32315659
+  }
+
+  public final class Insets implements android.os.Parcelable {
+    method @NonNull public static android.graphics.Insets add(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method public int describeContents();
+    method @NonNull public static android.graphics.Insets max(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method @NonNull public static android.graphics.Insets min(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method @NonNull public static android.graphics.Insets of(int, int, int, int);
+    method @NonNull public static android.graphics.Insets of(@Nullable android.graphics.Rect);
+    method @NonNull public static android.graphics.Insets subtract(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Insets> CREATOR;
+    field @NonNull public static final android.graphics.Insets NONE;
+    field public final int bottom;
+    field public final int left;
+    field public final int right;
+    field public final int top;
+  }
+
+  public class Interpolator {
+    ctor public Interpolator(int);
+    ctor public Interpolator(int, int);
+    method public final int getKeyFrameCount();
+    method public final int getValueCount();
+    method public void reset(int);
+    method public void reset(int, int);
+    method public void setKeyFrame(int, int, float[]);
+    method public void setKeyFrame(int, int, float[], float[]);
+    method public void setRepeatMirror(float, boolean);
+    method public android.graphics.Interpolator.Result timeToValues(float[]);
+    method public android.graphics.Interpolator.Result timeToValues(int, float[]);
+  }
+
+  public enum Interpolator.Result {
+    enum_constant public static final android.graphics.Interpolator.Result FREEZE_END;
+    enum_constant public static final android.graphics.Interpolator.Result FREEZE_START;
+    enum_constant public static final android.graphics.Interpolator.Result NORMAL;
+  }
+
+  public class LightingColorFilter extends android.graphics.ColorFilter {
+    ctor public LightingColorFilter(@ColorInt int, @ColorInt int);
+    method @ColorInt public int getColorAdd();
+    method @ColorInt public int getColorMultiply();
+  }
+
+  public class LinearGradient extends android.graphics.Shader {
+    ctor public LinearGradient(float, float, float, float, @ColorInt @NonNull int[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public LinearGradient(float, float, float, float, @ColorLong @NonNull long[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public LinearGradient(float, float, float, float, @ColorInt int, @ColorInt int, @NonNull android.graphics.Shader.TileMode);
+    ctor public LinearGradient(float, float, float, float, @ColorLong long, @ColorLong long, @NonNull android.graphics.Shader.TileMode);
+  }
+
+  public class MaskFilter {
+    ctor public MaskFilter();
+  }
+
+  public class Matrix {
+    ctor public Matrix();
+    ctor public Matrix(android.graphics.Matrix);
+    method public final void dump(@NonNull java.io.PrintWriter);
+    method public void getValues(float[]);
+    method public boolean invert(android.graphics.Matrix);
+    method public boolean isAffine();
+    method public boolean isIdentity();
+    method public void mapPoints(float[], int, float[], int, int);
+    method public void mapPoints(float[], float[]);
+    method public void mapPoints(float[]);
+    method public float mapRadius(float);
+    method public boolean mapRect(android.graphics.RectF, android.graphics.RectF);
+    method public boolean mapRect(android.graphics.RectF);
+    method public void mapVectors(float[], int, float[], int, int);
+    method public void mapVectors(float[], float[]);
+    method public void mapVectors(float[]);
+    method public boolean postConcat(android.graphics.Matrix);
+    method public boolean postRotate(float, float, float);
+    method public boolean postRotate(float);
+    method public boolean postScale(float, float, float, float);
+    method public boolean postScale(float, float);
+    method public boolean postSkew(float, float, float, float);
+    method public boolean postSkew(float, float);
+    method public boolean postTranslate(float, float);
+    method public boolean preConcat(android.graphics.Matrix);
+    method public boolean preRotate(float, float, float);
+    method public boolean preRotate(float);
+    method public boolean preScale(float, float, float, float);
+    method public boolean preScale(float, float);
+    method public boolean preSkew(float, float, float, float);
+    method public boolean preSkew(float, float);
+    method public boolean preTranslate(float, float);
+    method public boolean rectStaysRect();
+    method public void reset();
+    method public void set(android.graphics.Matrix);
+    method public boolean setConcat(android.graphics.Matrix, android.graphics.Matrix);
+    method public boolean setPolyToPoly(float[], int, float[], int, int);
+    method public boolean setRectToRect(android.graphics.RectF, android.graphics.RectF, android.graphics.Matrix.ScaleToFit);
+    method public void setRotate(float, float, float);
+    method public void setRotate(float);
+    method public void setScale(float, float, float, float);
+    method public void setScale(float, float);
+    method public void setSinCos(float, float, float, float);
+    method public void setSinCos(float, float);
+    method public void setSkew(float, float, float, float);
+    method public void setSkew(float, float);
+    method public void setTranslate(float, float);
+    method public void setValues(float[]);
+    method public String toShortString();
+    field @NonNull public static final android.graphics.Matrix IDENTITY_MATRIX;
+    field public static final int MPERSP_0 = 6; // 0x6
+    field public static final int MPERSP_1 = 7; // 0x7
+    field public static final int MPERSP_2 = 8; // 0x8
+    field public static final int MSCALE_X = 0; // 0x0
+    field public static final int MSCALE_Y = 4; // 0x4
+    field public static final int MSKEW_X = 1; // 0x1
+    field public static final int MSKEW_Y = 3; // 0x3
+    field public static final int MTRANS_X = 2; // 0x2
+    field public static final int MTRANS_Y = 5; // 0x5
+  }
+
+  public enum Matrix.ScaleToFit {
+    enum_constant public static final android.graphics.Matrix.ScaleToFit CENTER;
+    enum_constant public static final android.graphics.Matrix.ScaleToFit END;
+    enum_constant public static final android.graphics.Matrix.ScaleToFit FILL;
+    enum_constant public static final android.graphics.Matrix.ScaleToFit START;
+  }
+
+  @Deprecated public class Movie {
+    method @Deprecated public static android.graphics.Movie decodeByteArray(byte[], int, int);
+    method @Deprecated public static android.graphics.Movie decodeFile(String);
+    method @Deprecated public static android.graphics.Movie decodeStream(java.io.InputStream);
+    method @Deprecated public void draw(android.graphics.Canvas, float, float, android.graphics.Paint);
+    method @Deprecated public void draw(android.graphics.Canvas, float, float);
+    method @Deprecated public int duration();
+    method @Deprecated public int height();
+    method @Deprecated public boolean isOpaque();
+    method @Deprecated public boolean setTime(int);
+    method @Deprecated public int width();
+  }
+
+  public class NinePatch {
+    ctor public NinePatch(android.graphics.Bitmap, byte[]);
+    ctor public NinePatch(android.graphics.Bitmap, byte[], String);
+    method public void draw(android.graphics.Canvas, android.graphics.RectF);
+    method public void draw(android.graphics.Canvas, android.graphics.Rect);
+    method public void draw(android.graphics.Canvas, android.graphics.Rect, android.graphics.Paint);
+    method public android.graphics.Bitmap getBitmap();
+    method public int getDensity();
+    method public int getHeight();
+    method public String getName();
+    method public android.graphics.Paint getPaint();
+    method public final android.graphics.Region getTransparentRegion(android.graphics.Rect);
+    method public int getWidth();
+    method public final boolean hasAlpha();
+    method public static boolean isNinePatchChunk(byte[]);
+    method public void setPaint(android.graphics.Paint);
+  }
+
+  public final class Outline {
+    ctor public Outline();
+    ctor public Outline(@NonNull android.graphics.Outline);
+    method public boolean canClip();
+    method public float getAlpha();
+    method public float getRadius();
+    method public boolean getRect(@NonNull android.graphics.Rect);
+    method public boolean isEmpty();
+    method public void offset(int, int);
+    method public void set(@NonNull android.graphics.Outline);
+    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
+    method @Deprecated public void setConvexPath(@NonNull android.graphics.Path);
+    method public void setEmpty();
+    method public void setOval(int, int, int, int);
+    method public void setOval(@NonNull android.graphics.Rect);
+    method public void setPath(@NonNull android.graphics.Path);
+    method public void setRect(int, int, int, int);
+    method public void setRect(@NonNull android.graphics.Rect);
+    method public void setRoundRect(int, int, int, int, float);
+    method public void setRoundRect(@NonNull android.graphics.Rect, float);
+  }
+
+  public class Paint {
+    ctor public Paint();
+    ctor public Paint(int);
+    ctor public Paint(android.graphics.Paint);
+    method public float ascent();
+    method public int breakText(char[], int, int, float, float[]);
+    method public int breakText(CharSequence, int, int, boolean, float, float[]);
+    method public int breakText(String, boolean, float, float[]);
+    method public void clearShadowLayer();
+    method public float descent();
+    method public boolean equalsForTextMeasurement(@NonNull android.graphics.Paint);
+    method public int getAlpha();
+    method @Nullable public android.graphics.BlendMode getBlendMode();
+    method @ColorInt public int getColor();
+    method public android.graphics.ColorFilter getColorFilter();
+    method @ColorLong public long getColorLong();
+    method public int getEndHyphenEdit();
+    method public boolean getFillPath(android.graphics.Path, android.graphics.Path);
+    method public int getFlags();
+    method public String getFontFeatureSettings();
+    method public float getFontMetrics(android.graphics.Paint.FontMetrics);
+    method public android.graphics.Paint.FontMetrics getFontMetrics();
+    method public int getFontMetricsInt(android.graphics.Paint.FontMetricsInt);
+    method public android.graphics.Paint.FontMetricsInt getFontMetricsInt();
+    method public float getFontSpacing();
+    method public String getFontVariationSettings();
+    method public int getHinting();
+    method public float getLetterSpacing();
+    method public android.graphics.MaskFilter getMaskFilter();
+    method public int getOffsetForAdvance(char[], int, int, int, int, boolean, float);
+    method public int getOffsetForAdvance(CharSequence, int, int, int, int, boolean, float);
+    method public android.graphics.PathEffect getPathEffect();
+    method public float getRunAdvance(char[], int, int, int, int, boolean, int);
+    method public float getRunAdvance(CharSequence, int, int, int, int, boolean, int);
+    method public android.graphics.Shader getShader();
+    method @ColorInt public int getShadowLayerColor();
+    method @ColorLong public long getShadowLayerColorLong();
+    method public float getShadowLayerDx();
+    method public float getShadowLayerDy();
+    method public float getShadowLayerRadius();
+    method public int getStartHyphenEdit();
+    method @Px public float getStrikeThruPosition();
+    method @Px public float getStrikeThruThickness();
+    method public android.graphics.Paint.Cap getStrokeCap();
+    method public android.graphics.Paint.Join getStrokeJoin();
+    method public float getStrokeMiter();
+    method public float getStrokeWidth();
+    method public android.graphics.Paint.Style getStyle();
+    method public android.graphics.Paint.Align getTextAlign();
+    method public void getTextBounds(String, int, int, android.graphics.Rect);
+    method public void getTextBounds(@NonNull CharSequence, int, int, @NonNull android.graphics.Rect);
+    method public void getTextBounds(char[], int, int, android.graphics.Rect);
+    method @NonNull public java.util.Locale getTextLocale();
+    method @NonNull @Size(min=1) public android.os.LocaleList getTextLocales();
+    method public void getTextPath(char[], int, int, float, float, android.graphics.Path);
+    method public void getTextPath(String, int, int, float, float, android.graphics.Path);
+    method public float getTextRunAdvances(@NonNull char[], @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, boolean, @Nullable float[], @IntRange(from=0) int);
+    method public int getTextRunCursor(@NonNull char[], @IntRange(from=0) int, @IntRange(from=0) int, boolean, @IntRange(from=0) int, int);
+    method public int getTextRunCursor(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, boolean, @IntRange(from=0) int, int);
+    method public float getTextScaleX();
+    method public float getTextSize();
+    method public float getTextSkewX();
+    method public int getTextWidths(char[], int, int, float[]);
+    method public int getTextWidths(CharSequence, int, int, float[]);
+    method public int getTextWidths(String, int, int, float[]);
+    method public int getTextWidths(String, float[]);
+    method public android.graphics.Typeface getTypeface();
+    method @Px public float getUnderlinePosition();
+    method @Px public float getUnderlineThickness();
+    method @Px public float getWordSpacing();
+    method public android.graphics.Xfermode getXfermode();
+    method public boolean hasGlyph(String);
+    method public final boolean isAntiAlias();
+    method public final boolean isDither();
+    method public boolean isElegantTextHeight();
+    method public final boolean isFakeBoldText();
+    method public final boolean isFilterBitmap();
+    method public final boolean isLinearText();
+    method public final boolean isStrikeThruText();
+    method public final boolean isSubpixelText();
+    method public final boolean isUnderlineText();
+    method public float measureText(char[], int, int);
+    method public float measureText(String, int, int);
+    method public float measureText(String);
+    method public float measureText(CharSequence, int, int);
+    method public void reset();
+    method public void set(android.graphics.Paint);
+    method public void setARGB(int, int, int, int);
+    method public void setAlpha(int);
+    method public void setAntiAlias(boolean);
+    method public void setBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setColor(@ColorInt int);
+    method public void setColor(@ColorLong long);
+    method public android.graphics.ColorFilter setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setElegantTextHeight(boolean);
+    method public void setEndHyphenEdit(int);
+    method public void setFakeBoldText(boolean);
+    method public void setFilterBitmap(boolean);
+    method public void setFlags(int);
+    method public void setFontFeatureSettings(String);
+    method public boolean setFontVariationSettings(String);
+    method public void setHinting(int);
+    method public void setLetterSpacing(float);
+    method public void setLinearText(boolean);
+    method public android.graphics.MaskFilter setMaskFilter(android.graphics.MaskFilter);
+    method public android.graphics.PathEffect setPathEffect(android.graphics.PathEffect);
+    method public android.graphics.Shader setShader(android.graphics.Shader);
+    method public void setShadowLayer(float, float, float, @ColorInt int);
+    method public void setShadowLayer(float, float, float, @ColorLong long);
+    method public void setStartHyphenEdit(int);
+    method public void setStrikeThruText(boolean);
+    method public void setStrokeCap(android.graphics.Paint.Cap);
+    method public void setStrokeJoin(android.graphics.Paint.Join);
+    method public void setStrokeMiter(float);
+    method public void setStrokeWidth(float);
+    method public void setStyle(android.graphics.Paint.Style);
+    method public void setSubpixelText(boolean);
+    method public void setTextAlign(android.graphics.Paint.Align);
+    method public void setTextLocale(@NonNull java.util.Locale);
+    method public void setTextLocales(@NonNull @Size(min=1) android.os.LocaleList);
+    method public void setTextScaleX(float);
+    method public void setTextSize(float);
+    method public void setTextSkewX(float);
+    method public android.graphics.Typeface setTypeface(android.graphics.Typeface);
+    method public void setUnderlineText(boolean);
+    method public void setWordSpacing(@Px float);
+    method public android.graphics.Xfermode setXfermode(android.graphics.Xfermode);
+    field public static final int ANTI_ALIAS_FLAG = 1; // 0x1
+    field public static final int CURSOR_AFTER = 0; // 0x0
+    field public static final int CURSOR_AT = 4; // 0x4
+    field public static final int CURSOR_AT_OR_AFTER = 1; // 0x1
+    field public static final int CURSOR_AT_OR_BEFORE = 3; // 0x3
+    field public static final int CURSOR_BEFORE = 2; // 0x2
+    field public static final int DEV_KERN_TEXT_FLAG = 256; // 0x100
+    field public static final int DITHER_FLAG = 4; // 0x4
+    field public static final int EMBEDDED_BITMAP_TEXT_FLAG = 1024; // 0x400
+    field public static final int END_HYPHEN_EDIT_INSERT_ARMENIAN_HYPHEN = 3; // 0x3
+    field public static final int END_HYPHEN_EDIT_INSERT_HYPHEN = 2; // 0x2
+    field public static final int END_HYPHEN_EDIT_INSERT_MAQAF = 4; // 0x4
+    field public static final int END_HYPHEN_EDIT_INSERT_UCAS_HYPHEN = 5; // 0x5
+    field public static final int END_HYPHEN_EDIT_INSERT_ZWJ_AND_HYPHEN = 6; // 0x6
+    field public static final int END_HYPHEN_EDIT_NO_EDIT = 0; // 0x0
+    field public static final int END_HYPHEN_EDIT_REPLACE_WITH_HYPHEN = 1; // 0x1
+    field public static final int FAKE_BOLD_TEXT_FLAG = 32; // 0x20
+    field public static final int FILTER_BITMAP_FLAG = 2; // 0x2
+    field public static final int HINTING_OFF = 0; // 0x0
+    field public static final int HINTING_ON = 1; // 0x1
+    field public static final int LINEAR_TEXT_FLAG = 64; // 0x40
+    field public static final int START_HYPHEN_EDIT_INSERT_HYPHEN = 1; // 0x1
+    field public static final int START_HYPHEN_EDIT_INSERT_ZWJ = 2; // 0x2
+    field public static final int START_HYPHEN_EDIT_NO_EDIT = 0; // 0x0
+    field public static final int STRIKE_THRU_TEXT_FLAG = 16; // 0x10
+    field public static final int SUBPIXEL_TEXT_FLAG = 128; // 0x80
+    field public static final int UNDERLINE_TEXT_FLAG = 8; // 0x8
+  }
+
+  public enum Paint.Align {
+    enum_constant public static final android.graphics.Paint.Align CENTER;
+    enum_constant public static final android.graphics.Paint.Align LEFT;
+    enum_constant public static final android.graphics.Paint.Align RIGHT;
+  }
+
+  public enum Paint.Cap {
+    enum_constant public static final android.graphics.Paint.Cap BUTT;
+    enum_constant public static final android.graphics.Paint.Cap ROUND;
+    enum_constant public static final android.graphics.Paint.Cap SQUARE;
+  }
+
+  public static class Paint.FontMetrics {
+    ctor public Paint.FontMetrics();
+    field public float ascent;
+    field public float bottom;
+    field public float descent;
+    field public float leading;
+    field public float top;
+  }
+
+  public static class Paint.FontMetricsInt {
+    ctor public Paint.FontMetricsInt();
+    field public int ascent;
+    field public int bottom;
+    field public int descent;
+    field public int leading;
+    field public int top;
+  }
+
+  public enum Paint.Join {
+    enum_constant public static final android.graphics.Paint.Join BEVEL;
+    enum_constant public static final android.graphics.Paint.Join MITER;
+    enum_constant public static final android.graphics.Paint.Join ROUND;
+  }
+
+  public enum Paint.Style {
+    enum_constant public static final android.graphics.Paint.Style FILL;
+    enum_constant public static final android.graphics.Paint.Style FILL_AND_STROKE;
+    enum_constant public static final android.graphics.Paint.Style STROKE;
+  }
+
+  public class PaintFlagsDrawFilter extends android.graphics.DrawFilter {
+    ctor public PaintFlagsDrawFilter(int, int);
+  }
+
+  public final class ParcelableColorSpace implements android.os.Parcelable {
+    ctor public ParcelableColorSpace(@NonNull android.graphics.ColorSpace);
+    method public int describeContents();
+    method @NonNull public android.graphics.ColorSpace getColorSpace();
+    method public static boolean isParcelable(@NonNull android.graphics.ColorSpace);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.ParcelableColorSpace> CREATOR;
+  }
+
+  public class Path {
+    ctor public Path();
+    ctor public Path(@Nullable android.graphics.Path);
+    method public void addArc(@NonNull android.graphics.RectF, float, float);
+    method public void addArc(float, float, float, float, float, float);
+    method public void addCircle(float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addOval(@NonNull android.graphics.RectF, @NonNull android.graphics.Path.Direction);
+    method public void addOval(float, float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addPath(@NonNull android.graphics.Path, float, float);
+    method public void addPath(@NonNull android.graphics.Path);
+    method public void addPath(@NonNull android.graphics.Path, @NonNull android.graphics.Matrix);
+    method public void addRect(@NonNull android.graphics.RectF, @NonNull android.graphics.Path.Direction);
+    method public void addRect(float, float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(@NonNull android.graphics.RectF, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(float, float, float, float, float, float, @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(@NonNull android.graphics.RectF, @NonNull float[], @NonNull android.graphics.Path.Direction);
+    method public void addRoundRect(float, float, float, float, @NonNull float[], @NonNull android.graphics.Path.Direction);
+    method @NonNull @Size(min=6, multiple=3) public float[] approximate(@FloatRange(from=0) float);
+    method public void arcTo(@NonNull android.graphics.RectF, float, float, boolean);
+    method public void arcTo(@NonNull android.graphics.RectF, float, float);
+    method public void arcTo(float, float, float, float, float, float, boolean);
+    method public void close();
+    method public void computeBounds(@NonNull android.graphics.RectF, boolean);
+    method public void cubicTo(float, float, float, float, float, float);
+    method @NonNull public android.graphics.Path.FillType getFillType();
+    method public void incReserve(int);
+    method @Deprecated public boolean isConvex();
+    method public boolean isEmpty();
+    method public boolean isInverseFillType();
+    method public boolean isRect(@Nullable android.graphics.RectF);
+    method public void lineTo(float, float);
+    method public void moveTo(float, float);
+    method public void offset(float, float, @Nullable android.graphics.Path);
+    method public void offset(float, float);
+    method public boolean op(@NonNull android.graphics.Path, @NonNull android.graphics.Path.Op);
+    method public boolean op(@NonNull android.graphics.Path, @NonNull android.graphics.Path, @NonNull android.graphics.Path.Op);
+    method public void quadTo(float, float, float, float);
+    method public void rCubicTo(float, float, float, float, float, float);
+    method public void rLineTo(float, float);
+    method public void rMoveTo(float, float);
+    method public void rQuadTo(float, float, float, float);
+    method public void reset();
+    method public void rewind();
+    method public void set(@NonNull android.graphics.Path);
+    method public void setFillType(@NonNull android.graphics.Path.FillType);
+    method public void setLastPoint(float, float);
+    method public void toggleInverseFillType();
+    method public void transform(@NonNull android.graphics.Matrix, @Nullable android.graphics.Path);
+    method public void transform(@NonNull android.graphics.Matrix);
+  }
+
+  public enum Path.Direction {
+    enum_constant public static final android.graphics.Path.Direction CCW;
+    enum_constant public static final android.graphics.Path.Direction CW;
+  }
+
+  public enum Path.FillType {
+    enum_constant public static final android.graphics.Path.FillType EVEN_ODD;
+    enum_constant public static final android.graphics.Path.FillType INVERSE_EVEN_ODD;
+    enum_constant public static final android.graphics.Path.FillType INVERSE_WINDING;
+    enum_constant public static final android.graphics.Path.FillType WINDING;
+  }
+
+  public enum Path.Op {
+    enum_constant public static final android.graphics.Path.Op DIFFERENCE;
+    enum_constant public static final android.graphics.Path.Op INTERSECT;
+    enum_constant public static final android.graphics.Path.Op REVERSE_DIFFERENCE;
+    enum_constant public static final android.graphics.Path.Op UNION;
+    enum_constant public static final android.graphics.Path.Op XOR;
+  }
+
+  public class PathDashPathEffect extends android.graphics.PathEffect {
+    ctor public PathDashPathEffect(android.graphics.Path, float, float, android.graphics.PathDashPathEffect.Style);
+  }
+
+  public enum PathDashPathEffect.Style {
+    enum_constant public static final android.graphics.PathDashPathEffect.Style MORPH;
+    enum_constant public static final android.graphics.PathDashPathEffect.Style ROTATE;
+    enum_constant public static final android.graphics.PathDashPathEffect.Style TRANSLATE;
+  }
+
+  public class PathEffect {
+    ctor public PathEffect();
+  }
+
+  public class PathMeasure {
+    ctor public PathMeasure();
+    ctor public PathMeasure(android.graphics.Path, boolean);
+    method public float getLength();
+    method public boolean getMatrix(float, android.graphics.Matrix, int);
+    method public boolean getPosTan(float, float[], float[]);
+    method public boolean getSegment(float, float, android.graphics.Path, boolean);
+    method public boolean isClosed();
+    method public boolean nextContour();
+    method public void setPath(android.graphics.Path, boolean);
+    field public static final int POSITION_MATRIX_FLAG = 1; // 0x1
+    field public static final int TANGENT_MATRIX_FLAG = 2; // 0x2
+  }
+
+  public class Picture {
+    ctor public Picture();
+    ctor public Picture(android.graphics.Picture);
+    method @NonNull public android.graphics.Canvas beginRecording(int, int);
+    method public void draw(@NonNull android.graphics.Canvas);
+    method public void endRecording();
+    method public int getHeight();
+    method public int getWidth();
+    method public boolean requiresHardwareAcceleration();
+  }
+
+  public class PixelFormat {
+    ctor public PixelFormat();
+    method public static boolean formatHasAlpha(int);
+    method public static void getPixelFormatInfo(int, android.graphics.PixelFormat);
+    field @Deprecated public static final int A_8 = 8; // 0x8
+    field @Deprecated public static final int JPEG = 256; // 0x100
+    field @Deprecated public static final int LA_88 = 10; // 0xa
+    field @Deprecated public static final int L_8 = 9; // 0x9
+    field public static final int OPAQUE = -1; // 0xffffffff
+    field public static final int RGBA_1010102 = 43; // 0x2b
+    field @Deprecated public static final int RGBA_4444 = 7; // 0x7
+    field @Deprecated public static final int RGBA_5551 = 6; // 0x6
+    field public static final int RGBA_8888 = 1; // 0x1
+    field public static final int RGBA_F16 = 22; // 0x16
+    field public static final int RGBX_8888 = 2; // 0x2
+    field @Deprecated public static final int RGB_332 = 11; // 0xb
+    field public static final int RGB_565 = 4; // 0x4
+    field public static final int RGB_888 = 3; // 0x3
+    field public static final int TRANSLUCENT = -3; // 0xfffffffd
+    field public static final int TRANSPARENT = -2; // 0xfffffffe
+    field public static final int UNKNOWN = 0; // 0x0
+    field @Deprecated public static final int YCbCr_420_SP = 17; // 0x11
+    field @Deprecated public static final int YCbCr_422_I = 20; // 0x14
+    field @Deprecated public static final int YCbCr_422_SP = 16; // 0x10
+    field public int bitsPerPixel;
+    field public int bytesPerPixel;
+  }
+
+  public class Point implements android.os.Parcelable {
+    ctor public Point();
+    ctor public Point(int, int);
+    ctor public Point(@NonNull android.graphics.Point);
+    method public int describeContents();
+    method public final boolean equals(int, int);
+    method public final void negate();
+    method public final void offset(int, int);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void set(int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Point> CREATOR;
+    field public int x;
+    field public int y;
+  }
+
+  public class PointF implements android.os.Parcelable {
+    ctor public PointF();
+    ctor public PointF(float, float);
+    ctor public PointF(@NonNull android.graphics.Point);
+    ctor public PointF(@NonNull android.graphics.PointF);
+    method public int describeContents();
+    method public final boolean equals(float, float);
+    method public final float length();
+    method public static float length(float, float);
+    method public final void negate();
+    method public final void offset(float, float);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public final void set(float, float);
+    method public final void set(@NonNull android.graphics.PointF);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.PointF> CREATOR;
+    field public float x;
+    field public float y;
+  }
+
+  public class PorterDuff {
+    ctor public PorterDuff();
+  }
+
+  public enum PorterDuff.Mode {
+    enum_constant public static final android.graphics.PorterDuff.Mode ADD;
+    enum_constant public static final android.graphics.PorterDuff.Mode CLEAR;
+    enum_constant public static final android.graphics.PorterDuff.Mode DARKEN;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_ATOP;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_IN;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_OUT;
+    enum_constant public static final android.graphics.PorterDuff.Mode DST_OVER;
+    enum_constant public static final android.graphics.PorterDuff.Mode LIGHTEN;
+    enum_constant public static final android.graphics.PorterDuff.Mode MULTIPLY;
+    enum_constant public static final android.graphics.PorterDuff.Mode OVERLAY;
+    enum_constant public static final android.graphics.PorterDuff.Mode SCREEN;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_ATOP;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_IN;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_OUT;
+    enum_constant public static final android.graphics.PorterDuff.Mode SRC_OVER;
+    enum_constant public static final android.graphics.PorterDuff.Mode XOR;
+  }
+
+  public class PorterDuffColorFilter extends android.graphics.ColorFilter {
+    ctor public PorterDuffColorFilter(@ColorInt int, @NonNull android.graphics.PorterDuff.Mode);
+  }
+
+  public class PorterDuffXfermode extends android.graphics.Xfermode {
+    ctor public PorterDuffXfermode(android.graphics.PorterDuff.Mode);
+  }
+
+  public interface PostProcessor {
+    method public int onPostProcess(@NonNull android.graphics.Canvas);
+  }
+
+  public class RadialGradient extends android.graphics.Shader {
+    ctor public RadialGradient(float, float, float, @ColorInt @NonNull int[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, float, @ColorLong @NonNull long[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, @FloatRange(from=0.0f) float, float, float, @FloatRange(from=0.0f, fromInclusive=false) float, @ColorLong @NonNull long[], @Nullable float[], @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, float, @ColorInt int, @ColorInt int, @NonNull android.graphics.Shader.TileMode);
+    ctor public RadialGradient(float, float, float, @ColorLong long, @ColorLong long, @NonNull android.graphics.Shader.TileMode);
+  }
+
+  public final class RecordingCanvas extends android.graphics.Canvas {
+  }
+
+  public final class Rect implements android.os.Parcelable {
+    ctor public Rect();
+    ctor public Rect(int, int, int, int);
+    ctor public Rect(@Nullable android.graphics.Rect);
+    method public int centerX();
+    method public int centerY();
+    method public boolean contains(int, int);
+    method public boolean contains(int, int, int, int);
+    method public boolean contains(@NonNull android.graphics.Rect);
+    method public int describeContents();
+    method public float exactCenterX();
+    method public float exactCenterY();
+    method @NonNull public String flattenToString();
+    method public int height();
+    method public void inset(int, int);
+    method public void inset(@NonNull android.graphics.Insets);
+    method public void inset(int, int, int, int);
+    method @CheckResult public boolean intersect(int, int, int, int);
+    method @CheckResult public boolean intersect(@NonNull android.graphics.Rect);
+    method public boolean intersects(int, int, int, int);
+    method public static boolean intersects(@NonNull android.graphics.Rect, @NonNull android.graphics.Rect);
+    method public boolean isEmpty();
+    method public void offset(int, int);
+    method public void offsetTo(int, int);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void set(int, int, int, int);
+    method public void set(@NonNull android.graphics.Rect);
+    method public void setEmpty();
+    method @CheckResult public boolean setIntersect(@NonNull android.graphics.Rect, @NonNull android.graphics.Rect);
+    method public void sort();
+    method @NonNull public String toShortString();
+    method @Nullable public static android.graphics.Rect unflattenFromString(@Nullable String);
+    method public void union(int, int, int, int);
+    method public void union(@NonNull android.graphics.Rect);
+    method public void union(int, int);
+    method public int width();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Rect> CREATOR;
+    field public int bottom;
+    field public int left;
+    field public int right;
+    field public int top;
+  }
+
+  public class RectF implements android.os.Parcelable {
+    ctor public RectF();
+    ctor public RectF(float, float, float, float);
+    ctor public RectF(@Nullable android.graphics.RectF);
+    ctor public RectF(@Nullable android.graphics.Rect);
+    method public final float centerX();
+    method public final float centerY();
+    method public boolean contains(float, float);
+    method public boolean contains(float, float, float, float);
+    method public boolean contains(@NonNull android.graphics.RectF);
+    method public int describeContents();
+    method public final float height();
+    method public void inset(float, float);
+    method public boolean intersect(float, float, float, float);
+    method public boolean intersect(@NonNull android.graphics.RectF);
+    method public boolean intersects(float, float, float, float);
+    method public static boolean intersects(@NonNull android.graphics.RectF, @NonNull android.graphics.RectF);
+    method public final boolean isEmpty();
+    method public void offset(float, float);
+    method public void offsetTo(float, float);
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void round(@NonNull android.graphics.Rect);
+    method public void roundOut(@NonNull android.graphics.Rect);
+    method public void set(float, float, float, float);
+    method public void set(@NonNull android.graphics.RectF);
+    method public void set(@NonNull android.graphics.Rect);
+    method public void setEmpty();
+    method public boolean setIntersect(@NonNull android.graphics.RectF, @NonNull android.graphics.RectF);
+    method public void sort();
+    method @NonNull public String toShortString();
+    method public void union(float, float, float, float);
+    method public void union(@NonNull android.graphics.RectF);
+    method public void union(float, float);
+    method public final float width();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.RectF> CREATOR;
+    field public float bottom;
+    field public float left;
+    field public float right;
+    field public float top;
+  }
+
+  public class Region implements android.os.Parcelable {
+    ctor public Region();
+    ctor public Region(@NonNull android.graphics.Region);
+    ctor public Region(@NonNull android.graphics.Rect);
+    ctor public Region(int, int, int, int);
+    method public boolean contains(int, int);
+    method public int describeContents();
+    method @NonNull public android.graphics.Path getBoundaryPath();
+    method public boolean getBoundaryPath(@NonNull android.graphics.Path);
+    method @NonNull public android.graphics.Rect getBounds();
+    method public boolean getBounds(@NonNull android.graphics.Rect);
+    method public boolean isComplex();
+    method public boolean isEmpty();
+    method public boolean isRect();
+    method public boolean op(@NonNull android.graphics.Rect, @NonNull android.graphics.Region.Op);
+    method public boolean op(int, int, int, int, @NonNull android.graphics.Region.Op);
+    method public boolean op(@NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method public boolean op(@NonNull android.graphics.Rect, @NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method public boolean op(@NonNull android.graphics.Region, @NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method public boolean quickContains(@NonNull android.graphics.Rect);
+    method public boolean quickContains(int, int, int, int);
+    method public boolean quickReject(@NonNull android.graphics.Rect);
+    method public boolean quickReject(int, int, int, int);
+    method public boolean quickReject(android.graphics.Region);
+    method public boolean set(@NonNull android.graphics.Region);
+    method public boolean set(@NonNull android.graphics.Rect);
+    method public boolean set(int, int, int, int);
+    method public void setEmpty();
+    method public boolean setPath(@NonNull android.graphics.Path, @NonNull android.graphics.Region);
+    method public void translate(int, int);
+    method public void translate(int, int, android.graphics.Region);
+    method public final boolean union(@NonNull android.graphics.Rect);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.Region> CREATOR;
+  }
+
+  public enum Region.Op {
+    enum_constant public static final android.graphics.Region.Op DIFFERENCE;
+    enum_constant public static final android.graphics.Region.Op INTERSECT;
+    enum_constant public static final android.graphics.Region.Op REPLACE;
+    enum_constant public static final android.graphics.Region.Op REVERSE_DIFFERENCE;
+    enum_constant public static final android.graphics.Region.Op UNION;
+    enum_constant public static final android.graphics.Region.Op XOR;
+  }
+
+  public class RegionIterator {
+    ctor public RegionIterator(android.graphics.Region);
+    method public final boolean next(android.graphics.Rect);
+  }
+
+  public final class RenderEffect {
+    method @NonNull public static android.graphics.RenderEffect createBitmapEffect(@NonNull android.graphics.Bitmap);
+    method @NonNull public static android.graphics.RenderEffect createBitmapEffect(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @NonNull android.graphics.Rect);
+    method @NonNull public static android.graphics.RenderEffect createBlendModeEffect(@NonNull android.graphics.RenderEffect, @NonNull android.graphics.RenderEffect, @NonNull android.graphics.BlendMode);
+    method @NonNull public static android.graphics.RenderEffect createBlurEffect(float, float, @NonNull android.graphics.RenderEffect, @NonNull android.graphics.Shader.TileMode);
+    method @NonNull public static android.graphics.RenderEffect createBlurEffect(float, float, @NonNull android.graphics.Shader.TileMode);
+    method @NonNull public static android.graphics.RenderEffect createChainEffect(@NonNull android.graphics.RenderEffect, @NonNull android.graphics.RenderEffect);
+    method @NonNull public static android.graphics.RenderEffect createColorFilterEffect(@NonNull android.graphics.ColorFilter, @NonNull android.graphics.RenderEffect);
+    method @NonNull public static android.graphics.RenderEffect createColorFilterEffect(@NonNull android.graphics.ColorFilter);
+    method @NonNull public static android.graphics.RenderEffect createOffsetEffect(float, float);
+    method @NonNull public static android.graphics.RenderEffect createOffsetEffect(float, float, @NonNull android.graphics.RenderEffect);
+    method @NonNull public static android.graphics.RenderEffect createShaderEffect(@NonNull android.graphics.Shader);
+  }
+
+  public final class RenderNode {
+    ctor public RenderNode(@Nullable String);
+    method @NonNull public android.graphics.RecordingCanvas beginRecording(int, int);
+    method @NonNull public android.graphics.RecordingCanvas beginRecording();
+    method public long computeApproximateMemoryUsage();
+    method public void discardDisplayList();
+    method public void endRecording();
+    method public float getAlpha();
+    method @ColorInt public int getAmbientShadowColor();
+    method public int getBottom();
+    method @FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) public float getCameraDistance();
+    method public boolean getClipToBounds();
+    method public boolean getClipToOutline();
+    method public float getElevation();
+    method public int getHeight();
+    method public void getInverseMatrix(@NonNull android.graphics.Matrix);
+    method public int getLeft();
+    method public void getMatrix(@NonNull android.graphics.Matrix);
+    method public float getPivotX();
+    method public float getPivotY();
+    method public int getRight();
+    method public float getRotationX();
+    method public float getRotationY();
+    method public float getRotationZ();
+    method public float getScaleX();
+    method public float getScaleY();
+    method @ColorInt public int getSpotShadowColor();
+    method public int getTop();
+    method public float getTranslationX();
+    method public float getTranslationY();
+    method public float getTranslationZ();
+    method public long getUniqueId();
+    method public boolean getUseCompositingLayer();
+    method public int getWidth();
+    method public boolean hasDisplayList();
+    method public boolean hasIdentityMatrix();
+    method public boolean hasOverlappingRendering();
+    method public boolean hasShadow();
+    method public boolean isForceDarkAllowed();
+    method public boolean isPivotExplicitlySet();
+    method public boolean offsetLeftAndRight(int);
+    method public boolean offsetTopAndBottom(int);
+    method public boolean resetPivot();
+    method public boolean setAlpha(float);
+    method public boolean setAmbientShadowColor(@ColorInt int);
+    method public boolean setCameraDistance(@FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) float);
+    method public boolean setClipRect(@Nullable android.graphics.Rect);
+    method public boolean setClipToBounds(boolean);
+    method public boolean setClipToOutline(boolean);
+    method public boolean setElevation(float);
+    method public boolean setForceDarkAllowed(boolean);
+    method public boolean setHasOverlappingRendering(boolean);
+    method public boolean setOutline(@Nullable android.graphics.Outline);
+    method public boolean setPivotX(float);
+    method public boolean setPivotY(float);
+    method public boolean setPosition(int, int, int, int);
+    method public boolean setPosition(@NonNull android.graphics.Rect);
+    method public boolean setProjectBackwards(boolean);
+    method public boolean setProjectionReceiver(boolean);
+    method public boolean setRenderEffect(@Nullable android.graphics.RenderEffect);
+    method public boolean setRotationX(float);
+    method public boolean setRotationY(float);
+    method public boolean setRotationZ(float);
+    method public boolean setScaleX(float);
+    method public boolean setScaleY(float);
+    method public boolean setSpotShadowColor(@ColorInt int);
+    method public boolean setTranslationX(float);
+    method public boolean setTranslationY(float);
+    method public boolean setTranslationZ(float);
+    method public boolean setUseCompositingLayer(boolean, @Nullable android.graphics.Paint);
+  }
+
+  public class Shader {
+    ctor @Deprecated public Shader();
+    method public boolean getLocalMatrix(@NonNull android.graphics.Matrix);
+    method public void setLocalMatrix(@Nullable android.graphics.Matrix);
+  }
+
+  public enum Shader.TileMode {
+    enum_constant public static final android.graphics.Shader.TileMode CLAMP;
+    enum_constant public static final android.graphics.Shader.TileMode DECAL;
+    enum_constant public static final android.graphics.Shader.TileMode MIRROR;
+    enum_constant public static final android.graphics.Shader.TileMode REPEAT;
+  }
+
+  public class SumPathEffect extends android.graphics.PathEffect {
+    ctor public SumPathEffect(android.graphics.PathEffect, android.graphics.PathEffect);
+  }
+
+  public class SurfaceTexture {
+    ctor public SurfaceTexture(int);
+    ctor public SurfaceTexture(int, boolean);
+    ctor public SurfaceTexture(boolean);
+    method public void attachToGLContext(int);
+    method public void detachFromGLContext();
+    method public long getTimestamp();
+    method public void getTransformMatrix(float[]);
+    method public boolean isReleased();
+    method public void release();
+    method public void releaseTexImage();
+    method public void setDefaultBufferSize(int, int);
+    method public void setOnFrameAvailableListener(@Nullable android.graphics.SurfaceTexture.OnFrameAvailableListener);
+    method public void setOnFrameAvailableListener(@Nullable android.graphics.SurfaceTexture.OnFrameAvailableListener, @Nullable android.os.Handler);
+    method public void updateTexImage();
+  }
+
+  public static interface SurfaceTexture.OnFrameAvailableListener {
+    method public void onFrameAvailable(android.graphics.SurfaceTexture);
+  }
+
+  @Deprecated public static class SurfaceTexture.OutOfResourcesException extends java.lang.Exception {
+    ctor @Deprecated public SurfaceTexture.OutOfResourcesException();
+    ctor @Deprecated public SurfaceTexture.OutOfResourcesException(String);
+  }
+
+  public class SweepGradient extends android.graphics.Shader {
+    ctor public SweepGradient(float, float, @ColorInt @NonNull int[], @Nullable float[]);
+    ctor public SweepGradient(float, float, @ColorLong @NonNull long[], @Nullable float[]);
+    ctor public SweepGradient(float, float, @ColorInt int, @ColorInt int);
+    ctor public SweepGradient(float, float, @ColorLong long, @ColorLong long);
+  }
+
+  public class Typeface {
+    method public static android.graphics.Typeface create(String, int);
+    method public static android.graphics.Typeface create(android.graphics.Typeface, int);
+    method @NonNull public static android.graphics.Typeface create(@Nullable android.graphics.Typeface, @IntRange(from=1, to=1000) int, boolean);
+    method public static android.graphics.Typeface createFromAsset(android.content.res.AssetManager, String);
+    method public static android.graphics.Typeface createFromFile(@Nullable java.io.File);
+    method public static android.graphics.Typeface createFromFile(@Nullable String);
+    method public static android.graphics.Typeface defaultFromStyle(int);
+    method public int getStyle();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    method public final boolean isBold();
+    method public final boolean isItalic();
+    field public static final int BOLD = 1; // 0x1
+    field public static final int BOLD_ITALIC = 3; // 0x3
+    field public static final android.graphics.Typeface DEFAULT;
+    field public static final android.graphics.Typeface DEFAULT_BOLD;
+    field public static final int ITALIC = 2; // 0x2
+    field public static final android.graphics.Typeface MONOSPACE;
+    field public static final int NORMAL = 0; // 0x0
+    field public static final android.graphics.Typeface SANS_SERIF;
+    field public static final android.graphics.Typeface SERIF;
+  }
+
+  public static final class Typeface.Builder {
+    ctor public Typeface.Builder(@NonNull java.io.File);
+    ctor public Typeface.Builder(@NonNull java.io.FileDescriptor);
+    ctor public Typeface.Builder(@NonNull String);
+    ctor public Typeface.Builder(@NonNull android.content.res.AssetManager, @NonNull String);
+    method public android.graphics.Typeface build();
+    method public android.graphics.Typeface.Builder setFallback(@Nullable String);
+    method public android.graphics.Typeface.Builder setFontVariationSettings(@Nullable String);
+    method public android.graphics.Typeface.Builder setFontVariationSettings(@Nullable android.graphics.fonts.FontVariationAxis[]);
+    method public android.graphics.Typeface.Builder setItalic(boolean);
+    method public android.graphics.Typeface.Builder setTtcIndex(@IntRange(from=0) int);
+    method public android.graphics.Typeface.Builder setWeight(@IntRange(from=1, to=1000) int);
+  }
+
+  public static final class Typeface.CustomFallbackBuilder {
+    ctor public Typeface.CustomFallbackBuilder(@NonNull android.graphics.fonts.FontFamily);
+    method @NonNull public android.graphics.Typeface.CustomFallbackBuilder addCustomFallback(@NonNull android.graphics.fonts.FontFamily);
+    method @NonNull public android.graphics.Typeface build();
+    method @IntRange(from=64) public static int getMaxCustomFallbackCount();
+    method @NonNull public android.graphics.Typeface.CustomFallbackBuilder setStyle(@NonNull android.graphics.fonts.FontStyle);
+    method @NonNull public android.graphics.Typeface.CustomFallbackBuilder setSystemFallback(@NonNull String);
+  }
+
+  public class Xfermode {
+    ctor public Xfermode();
+  }
+
+  public class YuvImage {
+    ctor public YuvImage(byte[], int, int, int, int[]);
+    method public boolean compressToJpeg(android.graphics.Rect, int, java.io.OutputStream);
+    method public int getHeight();
+    method public int[] getStrides();
+    method public int getWidth();
+    method public byte[] getYuvData();
+    method public int getYuvFormat();
+  }
+
+}
+
+package android.graphics.drawable {
+
+  public class AdaptiveIconDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public AdaptiveIconDrawable(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+    method public void draw(android.graphics.Canvas);
+    method public android.graphics.drawable.Drawable getBackground();
+    method public static float getExtraInsetFraction();
+    method public android.graphics.drawable.Drawable getForeground();
+    method public android.graphics.Path getIconMask();
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setOpacity(int);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public interface Animatable {
+    method public boolean isRunning();
+    method public void start();
+    method public void stop();
+  }
+
+  public interface Animatable2 extends android.graphics.drawable.Animatable {
+    method public void clearAnimationCallbacks();
+    method public void registerAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    method public boolean unregisterAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+  }
+
+  public abstract static class Animatable2.AnimationCallback {
+    ctor public Animatable2.AnimationCallback();
+    method public void onAnimationEnd(android.graphics.drawable.Drawable);
+    method public void onAnimationStart(android.graphics.drawable.Drawable);
+  }
+
+  public class AnimatedImageDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
+    ctor public AnimatedImageDrawable();
+    method public void clearAnimationCallbacks();
+    method public void draw(@NonNull android.graphics.Canvas);
+    method public int getOpacity();
+    method public int getRepeatCount();
+    method public final boolean isAutoMirrored();
+    method public boolean isRunning();
+    method public void registerAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    method public void setAlpha(@IntRange(from=0, to=255) int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setRepeatCount(@IntRange(from=android.graphics.drawable.AnimatedImageDrawable.REPEAT_INFINITE) int);
+    method public void start();
+    method public void stop();
+    method public boolean unregisterAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    field public static final int REPEAT_INFINITE = -1; // 0xffffffff
+  }
+
+  public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable {
+    ctor public AnimatedStateListDrawable();
+    method public void addState(@NonNull int[], @NonNull android.graphics.drawable.Drawable, int);
+    method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, @NonNull T, boolean);
+  }
+
+  public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
+    ctor public AnimatedVectorDrawable();
+    method public void clearAnimationCallbacks();
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public boolean isRunning();
+    method public void registerAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+    method public void reset();
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void start();
+    method public void stop();
+    method public boolean unregisterAnimationCallback(@NonNull android.graphics.drawable.Animatable2.AnimationCallback);
+  }
+
+  public class AnimationDrawable extends android.graphics.drawable.DrawableContainer implements android.graphics.drawable.Animatable java.lang.Runnable {
+    ctor public AnimationDrawable();
+    method public void addFrame(@NonNull android.graphics.drawable.Drawable, int);
+    method public int getDuration(int);
+    method public android.graphics.drawable.Drawable getFrame(int);
+    method public int getNumberOfFrames();
+    method public boolean isOneShot();
+    method public boolean isRunning();
+    method public void run();
+    method public void setOneShot(boolean);
+    method public void start();
+    method public void stop();
+  }
+
+  public class BitmapDrawable extends android.graphics.drawable.Drawable {
+    ctor @Deprecated public BitmapDrawable();
+    ctor @Deprecated public BitmapDrawable(android.content.res.Resources);
+    ctor @Deprecated public BitmapDrawable(android.graphics.Bitmap);
+    ctor public BitmapDrawable(android.content.res.Resources, android.graphics.Bitmap);
+    ctor @Deprecated public BitmapDrawable(String);
+    ctor public BitmapDrawable(android.content.res.Resources, String);
+    ctor @Deprecated public BitmapDrawable(java.io.InputStream);
+    ctor public BitmapDrawable(android.content.res.Resources, java.io.InputStream);
+    method public void draw(android.graphics.Canvas);
+    method public final android.graphics.Bitmap getBitmap();
+    method public final android.graphics.drawable.Drawable.ConstantState getConstantState();
+    method public int getGravity();
+    method public int getOpacity();
+    method public final android.graphics.Paint getPaint();
+    method public android.graphics.Shader.TileMode getTileModeX();
+    method public android.graphics.Shader.TileMode getTileModeY();
+    method public boolean hasAntiAlias();
+    method public boolean hasMipMap();
+    method public final boolean isAutoMirrored();
+    method public void setAlpha(int);
+    method public void setAntiAlias(boolean);
+    method public void setBitmap(@Nullable android.graphics.Bitmap);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setGravity(int);
+    method public void setMipMap(boolean);
+    method public void setTargetDensity(android.graphics.Canvas);
+    method public void setTargetDensity(android.util.DisplayMetrics);
+    method public void setTargetDensity(int);
+    method public void setTileModeX(android.graphics.Shader.TileMode);
+    method public void setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode);
+    method public final void setTileModeY(android.graphics.Shader.TileMode);
+  }
+
+  public class ClipDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public ClipDrawable(android.graphics.drawable.Drawable, int, int);
+    field public static final int HORIZONTAL = 1; // 0x1
+    field public static final int VERTICAL = 2; // 0x2
+  }
+
+  public class ColorDrawable extends android.graphics.drawable.Drawable {
+    ctor public ColorDrawable();
+    ctor public ColorDrawable(@ColorInt int);
+    method public void draw(android.graphics.Canvas);
+    method @ColorInt public int getColor();
+    method public int getOpacity();
+    method public void setAlpha(int);
+    method public void setColor(@ColorInt int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+  }
+
+  public class ColorStateListDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public ColorStateListDrawable();
+    ctor public ColorStateListDrawable(@NonNull android.content.res.ColorStateList);
+    method public void clearAlpha();
+    method public void draw(@NonNull android.graphics.Canvas);
+    method @NonNull public android.content.res.ColorStateList getColorStateList();
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(@IntRange(from=0, to=255) int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setColorStateList(@NonNull android.content.res.ColorStateList);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public abstract class Drawable {
+    ctor public Drawable();
+    method public void applyTheme(@NonNull android.content.res.Resources.Theme);
+    method public boolean canApplyTheme();
+    method public void clearColorFilter();
+    method public final void copyBounds(@NonNull android.graphics.Rect);
+    method @NonNull public final android.graphics.Rect copyBounds();
+    method @Nullable public static android.graphics.drawable.Drawable createFromPath(String);
+    method public static android.graphics.drawable.Drawable createFromResourceStream(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, String);
+    method @Deprecated @Nullable public static android.graphics.drawable.Drawable createFromResourceStream(@Nullable android.content.res.Resources, @Nullable android.util.TypedValue, @Nullable java.io.InputStream, @Nullable String, @Nullable android.graphics.BitmapFactory.Options);
+    method public static android.graphics.drawable.Drawable createFromStream(java.io.InputStream, String);
+    method @NonNull public static android.graphics.drawable.Drawable createFromXml(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.graphics.drawable.Drawable createFromXml(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.graphics.drawable.Drawable createFromXmlInner(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @NonNull public static android.graphics.drawable.Drawable createFromXmlInner(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public abstract void draw(@NonNull android.graphics.Canvas);
+    method @IntRange(from=0, to=255) public int getAlpha();
+    method @NonNull public final android.graphics.Rect getBounds();
+    method @Nullable public android.graphics.drawable.Drawable.Callback getCallback();
+    method public int getChangingConfigurations();
+    method @Nullable public android.graphics.ColorFilter getColorFilter();
+    method @Nullable public android.graphics.drawable.Drawable.ConstantState getConstantState();
+    method @NonNull public android.graphics.drawable.Drawable getCurrent();
+    method @NonNull public android.graphics.Rect getDirtyBounds();
+    method public void getHotspotBounds(@NonNull android.graphics.Rect);
+    method public int getIntrinsicHeight();
+    method public int getIntrinsicWidth();
+    method public int getLayoutDirection();
+    method @IntRange(from=0, to=10000) public final int getLevel();
+    method public int getMinimumHeight();
+    method public int getMinimumWidth();
+    method @Deprecated public abstract int getOpacity();
+    method @NonNull public android.graphics.Insets getOpticalInsets();
+    method public void getOutline(@NonNull android.graphics.Outline);
+    method public boolean getPadding(@NonNull android.graphics.Rect);
+    method @NonNull public int[] getState();
+    method @Nullable public android.graphics.Region getTransparentRegion();
+    method public boolean hasFocusStateSpecified();
+    method public void inflate(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void inflate(@NonNull android.content.res.Resources, @NonNull org.xmlpull.v1.XmlPullParser, @NonNull android.util.AttributeSet, @Nullable android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void invalidateSelf();
+    method public boolean isAutoMirrored();
+    method public boolean isFilterBitmap();
+    method public boolean isProjected();
+    method public boolean isStateful();
+    method public final boolean isVisible();
+    method public void jumpToCurrentState();
+    method @NonNull public android.graphics.drawable.Drawable mutate();
+    method protected void onBoundsChange(android.graphics.Rect);
+    method public boolean onLayoutDirectionChanged(int);
+    method protected boolean onLevelChange(int);
+    method protected boolean onStateChange(int[]);
+    method public static int resolveOpacity(int, int);
+    method public void scheduleSelf(@NonNull Runnable, long);
+    method public abstract void setAlpha(@IntRange(from=0, to=255) int);
+    method public void setAutoMirrored(boolean);
+    method public void setBounds(int, int, int, int);
+    method public void setBounds(@NonNull android.graphics.Rect);
+    method public final void setCallback(@Nullable android.graphics.drawable.Drawable.Callback);
+    method public void setChangingConfigurations(int);
+    method public abstract void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method @Deprecated public void setColorFilter(@ColorInt int, @NonNull android.graphics.PorterDuff.Mode);
+    method @Deprecated public void setDither(boolean);
+    method public void setFilterBitmap(boolean);
+    method public void setHotspot(float, float);
+    method public void setHotspotBounds(int, int, int, int);
+    method public final boolean setLayoutDirection(int);
+    method public final boolean setLevel(@IntRange(from=0, to=10000) int);
+    method public boolean setState(@NonNull int[]);
+    method public void setTint(@ColorInt int);
+    method public void setTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setTintList(@Nullable android.content.res.ColorStateList);
+    method public void setTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public boolean setVisible(boolean, boolean);
+    method public void unscheduleSelf(@NonNull Runnable);
+  }
+
+  public static interface Drawable.Callback {
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public abstract static class Drawable.ConstantState {
+    ctor public Drawable.ConstantState();
+    method public boolean canApplyTheme();
+    method public abstract int getChangingConfigurations();
+    method @NonNull public abstract android.graphics.drawable.Drawable newDrawable();
+    method @NonNull public android.graphics.drawable.Drawable newDrawable(@Nullable android.content.res.Resources);
+    method @NonNull public android.graphics.drawable.Drawable newDrawable(@Nullable android.content.res.Resources, @Nullable android.content.res.Resources.Theme);
+  }
+
+  public class DrawableContainer extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public DrawableContainer();
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public boolean selectDrawable(int);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method protected void setConstantState(android.graphics.drawable.DrawableContainer.DrawableContainerState);
+    method public void setDither(boolean);
+    method public void setEnterFadeDuration(int);
+    method public void setExitFadeDuration(int);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public abstract static class DrawableContainer.DrawableContainerState extends android.graphics.drawable.Drawable.ConstantState {
+    method public final int addChild(android.graphics.drawable.Drawable);
+    method public boolean canConstantState();
+    method protected void computeConstantSize();
+    method public int getChangingConfigurations();
+    method public final android.graphics.drawable.Drawable getChild(int);
+    method public final int getChildCount();
+    method public final android.graphics.drawable.Drawable[] getChildren();
+    method public final int getConstantHeight();
+    method public final int getConstantMinimumHeight();
+    method public final int getConstantMinimumWidth();
+    method public final android.graphics.Rect getConstantPadding();
+    method public final int getConstantWidth();
+    method public final int getEnterFadeDuration();
+    method public final int getExitFadeDuration();
+    method public final int getOpacity();
+    method public void growArray(int, int);
+    method public final boolean isConstantSize();
+    method public final boolean isStateful();
+    method public final void setConstantSize(boolean);
+    method public final void setEnterFadeDuration(int);
+    method public final void setExitFadeDuration(int);
+    method public final void setVariablePadding(boolean);
+  }
+
+  public abstract class DrawableWrapper extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public DrawableWrapper(@Nullable android.graphics.drawable.Drawable);
+    method public void draw(@NonNull android.graphics.Canvas);
+    method @Nullable public android.graphics.drawable.Drawable getDrawable();
+    method public int getOpacity();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+  }
+
+  public class GradientDrawable extends android.graphics.drawable.Drawable {
+    ctor public GradientDrawable();
+    ctor public GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation, @ColorInt int[]);
+    method public void draw(android.graphics.Canvas);
+    method @Nullable public android.content.res.ColorStateList getColor();
+    method @Nullable public int[] getColors();
+    method @Nullable public float[] getCornerRadii();
+    method public float getCornerRadius();
+    method public float getGradientCenterX();
+    method public float getGradientCenterY();
+    method public float getGradientRadius();
+    method public int getGradientType();
+    method @Px public int getInnerRadius();
+    method public float getInnerRadiusRatio();
+    method public int getOpacity();
+    method public android.graphics.drawable.GradientDrawable.Orientation getOrientation();
+    method public int getShape();
+    method @Px public int getThickness();
+    method public float getThicknessRatio();
+    method public boolean getUseLevel();
+    method public void setAlpha(int);
+    method public void setColor(@ColorInt int);
+    method public void setColor(@Nullable android.content.res.ColorStateList);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setColors(@ColorInt @Nullable int[]);
+    method public void setColors(@ColorInt @Nullable int[], @Nullable float[]);
+    method public void setCornerRadii(@Nullable float[]);
+    method public void setCornerRadius(float);
+    method public void setDither(boolean);
+    method public void setGradientCenter(float, float);
+    method public void setGradientRadius(float);
+    method public void setGradientType(int);
+    method public void setInnerRadius(@Px int);
+    method public void setInnerRadiusRatio(@FloatRange(from=0.0f, fromInclusive=false) float);
+    method public void setOrientation(android.graphics.drawable.GradientDrawable.Orientation);
+    method public void setPadding(@Px int, @Px int, @Px int, @Px int);
+    method public void setShape(int);
+    method public void setSize(int, int);
+    method public void setStroke(int, @ColorInt int);
+    method public void setStroke(int, android.content.res.ColorStateList);
+    method public void setStroke(int, @ColorInt int, float, float);
+    method public void setStroke(int, android.content.res.ColorStateList, float, float);
+    method public void setThickness(@Px int);
+    method public void setThicknessRatio(@FloatRange(from=0.0f, fromInclusive=false) float);
+    method public void setUseLevel(boolean);
+    field public static final int LINE = 2; // 0x2
+    field public static final int LINEAR_GRADIENT = 0; // 0x0
+    field public static final int OVAL = 1; // 0x1
+    field public static final int RADIAL_GRADIENT = 1; // 0x1
+    field public static final int RECTANGLE = 0; // 0x0
+    field public static final int RING = 3; // 0x3
+    field public static final int SWEEP_GRADIENT = 2; // 0x2
+  }
+
+  public enum GradientDrawable.Orientation {
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BL_TR;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BOTTOM_TOP;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation BR_TL;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation LEFT_RIGHT;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation RIGHT_LEFT;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TL_BR;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TOP_BOTTOM;
+    enum_constant public static final android.graphics.drawable.GradientDrawable.Orientation TR_BL;
+  }
+
+  public final class Icon implements android.os.Parcelable {
+    method public static android.graphics.drawable.Icon createWithAdaptiveBitmap(android.graphics.Bitmap);
+    method @NonNull public static android.graphics.drawable.Icon createWithAdaptiveBitmapContentUri(@NonNull String);
+    method @NonNull public static android.graphics.drawable.Icon createWithAdaptiveBitmapContentUri(@NonNull android.net.Uri);
+    method public static android.graphics.drawable.Icon createWithBitmap(android.graphics.Bitmap);
+    method public static android.graphics.drawable.Icon createWithContentUri(String);
+    method public static android.graphics.drawable.Icon createWithContentUri(android.net.Uri);
+    method public static android.graphics.drawable.Icon createWithData(byte[], int, int);
+    method public static android.graphics.drawable.Icon createWithFilePath(String);
+    method public static android.graphics.drawable.Icon createWithResource(android.content.Context, @DrawableRes int);
+    method public static android.graphics.drawable.Icon createWithResource(String, @DrawableRes int);
+    method public int describeContents();
+    method @DrawableRes public int getResId();
+    method @NonNull public String getResPackage();
+    method public int getType();
+    method @NonNull public android.net.Uri getUri();
+    method public android.graphics.drawable.Drawable loadDrawable(android.content.Context);
+    method public void loadDrawableAsync(android.content.Context, android.os.Message);
+    method public void loadDrawableAsync(android.content.Context, android.graphics.drawable.Icon.OnDrawableLoadedListener, android.os.Handler);
+    method public android.graphics.drawable.Icon setTint(@ColorInt int);
+    method @NonNull public android.graphics.drawable.Icon setTintBlendMode(@NonNull android.graphics.BlendMode);
+    method public android.graphics.drawable.Icon setTintList(android.content.res.ColorStateList);
+    method @NonNull public android.graphics.drawable.Icon setTintMode(@NonNull android.graphics.PorterDuff.Mode);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.graphics.drawable.Icon> CREATOR;
+    field public static final int TYPE_ADAPTIVE_BITMAP = 5; // 0x5
+    field public static final int TYPE_BITMAP = 1; // 0x1
+    field public static final int TYPE_DATA = 3; // 0x3
+    field public static final int TYPE_RESOURCE = 2; // 0x2
+    field public static final int TYPE_URI = 4; // 0x4
+    field public static final int TYPE_URI_ADAPTIVE_BITMAP = 6; // 0x6
+  }
+
+  public static interface Icon.OnDrawableLoadedListener {
+    method public void onDrawableLoaded(android.graphics.drawable.Drawable);
+  }
+
+  public class InsetDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, int);
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, float);
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, int, int, int, int);
+    ctor public InsetDrawable(@Nullable android.graphics.drawable.Drawable, float, float, float, float);
+  }
+
+  public class LayerDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public LayerDrawable(@NonNull android.graphics.drawable.Drawable[]);
+    method public int addLayer(android.graphics.drawable.Drawable);
+    method public void draw(android.graphics.Canvas);
+    method public android.graphics.drawable.Drawable findDrawableByLayerId(int);
+    method public int findIndexByLayerId(int);
+    method public int getBottomPadding();
+    method public android.graphics.drawable.Drawable getDrawable(int);
+    method public int getEndPadding();
+    method public int getId(int);
+    method public int getLayerGravity(int);
+    method public int getLayerHeight(int);
+    method public int getLayerInsetBottom(int);
+    method public int getLayerInsetEnd(int);
+    method public int getLayerInsetLeft(int);
+    method public int getLayerInsetRight(int);
+    method public int getLayerInsetStart(int);
+    method public int getLayerInsetTop(int);
+    method public int getLayerWidth(int);
+    method public int getLeftPadding();
+    method public int getNumberOfLayers();
+    method public int getOpacity();
+    method public int getPaddingMode();
+    method public int getRightPadding();
+    method public int getStartPadding();
+    method public int getTopPadding();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setDrawable(int, android.graphics.drawable.Drawable);
+    method public boolean setDrawableByLayerId(int, android.graphics.drawable.Drawable);
+    method public void setId(int, int);
+    method public void setLayerGravity(int, int);
+    method public void setLayerHeight(int, int);
+    method public void setLayerInset(int, int, int, int, int);
+    method public void setLayerInsetBottom(int, int);
+    method public void setLayerInsetEnd(int, int);
+    method public void setLayerInsetLeft(int, int);
+    method public void setLayerInsetRelative(int, int, int, int, int);
+    method public void setLayerInsetRight(int, int);
+    method public void setLayerInsetStart(int, int);
+    method public void setLayerInsetTop(int, int);
+    method public void setLayerSize(int, int, int);
+    method public void setLayerWidth(int, int);
+    method public void setOpacity(int);
+    method public void setPadding(int, int, int, int);
+    method public void setPaddingMode(int);
+    method public void setPaddingRelative(int, int, int, int);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+    field public static final int INSET_UNDEFINED = -2147483648; // 0x80000000
+    field public static final int PADDING_MODE_NEST = 0; // 0x0
+    field public static final int PADDING_MODE_STACK = 1; // 0x1
+  }
+
+  public class LevelListDrawable extends android.graphics.drawable.DrawableContainer {
+    ctor public LevelListDrawable();
+    method public void addLevel(int, int, android.graphics.drawable.Drawable);
+  }
+
+  public class NinePatchDrawable extends android.graphics.drawable.Drawable {
+    ctor @Deprecated public NinePatchDrawable(android.graphics.Bitmap, byte[], android.graphics.Rect, String);
+    ctor public NinePatchDrawable(android.content.res.Resources, android.graphics.Bitmap, byte[], android.graphics.Rect, String);
+    ctor @Deprecated public NinePatchDrawable(@NonNull android.graphics.NinePatch);
+    ctor public NinePatchDrawable(@Nullable android.content.res.Resources, @NonNull android.graphics.NinePatch);
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method @NonNull public android.graphics.Paint getPaint();
+    method public void setAlpha(int);
+    method public void setColorFilter(@Nullable android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setTargetDensity(@NonNull android.graphics.Canvas);
+    method public void setTargetDensity(@NonNull android.util.DisplayMetrics);
+    method public void setTargetDensity(int);
+  }
+
+  public class PaintDrawable extends android.graphics.drawable.ShapeDrawable {
+    ctor public PaintDrawable();
+    ctor public PaintDrawable(int);
+    method public void setCornerRadii(float[]);
+    method public void setCornerRadius(float);
+  }
+
+  public class PictureDrawable extends android.graphics.drawable.Drawable {
+    ctor public PictureDrawable(android.graphics.Picture);
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public android.graphics.Picture getPicture();
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setPicture(android.graphics.Picture);
+  }
+
+  public class RippleDrawable extends android.graphics.drawable.LayerDrawable {
+    ctor public RippleDrawable(@NonNull android.content.res.ColorStateList, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method @NonNull public android.content.res.ColorStateList getEffectColor();
+    method public int getRadius();
+    method public void setColor(@NonNull android.content.res.ColorStateList);
+    method public void setEffectColor(@NonNull android.content.res.ColorStateList);
+    method public void setRadius(int);
+    field public static final int RADIUS_AUTO = -1; // 0xffffffff
+  }
+
+  public class RotateDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public RotateDrawable();
+    method public float getFromDegrees();
+    method public float getPivotX();
+    method public float getPivotY();
+    method public float getToDegrees();
+    method public boolean isPivotXRelative();
+    method public boolean isPivotYRelative();
+    method public void setFromDegrees(float);
+    method public void setPivotX(float);
+    method public void setPivotXRelative(boolean);
+    method public void setPivotY(float);
+    method public void setPivotYRelative(boolean);
+    method public void setToDegrees(float);
+  }
+
+  public class ScaleDrawable extends android.graphics.drawable.DrawableWrapper {
+    ctor public ScaleDrawable(android.graphics.drawable.Drawable, int, float, float);
+  }
+
+  public class ShapeDrawable extends android.graphics.drawable.Drawable {
+    ctor public ShapeDrawable();
+    ctor public ShapeDrawable(android.graphics.drawable.shapes.Shape);
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public android.graphics.Paint getPaint();
+    method public android.graphics.drawable.ShapeDrawable.ShaderFactory getShaderFactory();
+    method public android.graphics.drawable.shapes.Shape getShape();
+    method protected boolean inflateTag(String, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet);
+    method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDither(boolean);
+    method public void setIntrinsicHeight(int);
+    method public void setIntrinsicWidth(int);
+    method public void setPadding(int, int, int, int);
+    method public void setPadding(android.graphics.Rect);
+    method public void setShaderFactory(android.graphics.drawable.ShapeDrawable.ShaderFactory);
+    method public void setShape(android.graphics.drawable.shapes.Shape);
+  }
+
+  public abstract static class ShapeDrawable.ShaderFactory {
+    ctor public ShapeDrawable.ShaderFactory();
+    method public abstract android.graphics.Shader resize(int, int);
+  }
+
+  public class StateListDrawable extends android.graphics.drawable.DrawableContainer {
+    ctor public StateListDrawable();
+    method public void addState(int[], android.graphics.drawable.Drawable);
+    method public int findStateDrawableIndex(@NonNull int[]);
+    method public int getStateCount();
+    method @Nullable public android.graphics.drawable.Drawable getStateDrawable(int);
+    method @NonNull public int[] getStateSet(int);
+  }
+
+  public class TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public TransitionDrawable(android.graphics.drawable.Drawable[]);
+    method public boolean isCrossFadeEnabled();
+    method public void resetTransition();
+    method public void reverseTransition(int);
+    method public void setCrossFadeEnabled(boolean);
+    method public void startTransition(int);
+  }
+
+  public class VectorDrawable extends android.graphics.drawable.Drawable {
+    ctor public VectorDrawable();
+    method public void draw(android.graphics.Canvas);
+    method public int getOpacity();
+    method public void setAlpha(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+  }
+
+}
+
+package android.graphics.drawable.shapes {
+
+  public class ArcShape extends android.graphics.drawable.shapes.RectShape {
+    ctor public ArcShape(float, float);
+    method public android.graphics.drawable.shapes.ArcShape clone() throws java.lang.CloneNotSupportedException;
+    method public final float getStartAngle();
+    method public final float getSweepAngle();
+  }
+
+  public class OvalShape extends android.graphics.drawable.shapes.RectShape {
+    ctor public OvalShape();
+    method public android.graphics.drawable.shapes.OvalShape clone() throws java.lang.CloneNotSupportedException;
+  }
+
+  public class PathShape extends android.graphics.drawable.shapes.Shape {
+    ctor public PathShape(@NonNull android.graphics.Path, float, float);
+    method public android.graphics.drawable.shapes.PathShape clone() throws java.lang.CloneNotSupportedException;
+    method public void draw(android.graphics.Canvas, android.graphics.Paint);
+  }
+
+  public class RectShape extends android.graphics.drawable.shapes.Shape {
+    ctor public RectShape();
+    method public android.graphics.drawable.shapes.RectShape clone() throws java.lang.CloneNotSupportedException;
+    method public void draw(android.graphics.Canvas, android.graphics.Paint);
+    method protected final android.graphics.RectF rect();
+  }
+
+  public class RoundRectShape extends android.graphics.drawable.shapes.RectShape {
+    ctor public RoundRectShape(@Nullable float[], @Nullable android.graphics.RectF, @Nullable float[]);
+    method public android.graphics.drawable.shapes.RoundRectShape clone() throws java.lang.CloneNotSupportedException;
+  }
+
+  public abstract class Shape implements java.lang.Cloneable {
+    ctor public Shape();
+    method public android.graphics.drawable.shapes.Shape clone() throws java.lang.CloneNotSupportedException;
+    method public abstract void draw(android.graphics.Canvas, android.graphics.Paint);
+    method public final float getHeight();
+    method public void getOutline(@NonNull android.graphics.Outline);
+    method public final float getWidth();
+    method public boolean hasAlpha();
+    method protected void onResize(float, float);
+    method public final void resize(float, float);
+  }
+
+}
+
+package android.graphics.fonts {
+
+  public final class Font {
+    method @Nullable public android.graphics.fonts.FontVariationAxis[] getAxes();
+    method @NonNull public java.nio.ByteBuffer getBuffer();
+    method @Nullable public java.io.File getFile();
+    method public float getGlyphBounds(@IntRange(from=0) int, @NonNull android.graphics.Paint, @Nullable android.graphics.RectF);
+    method @NonNull public android.os.LocaleList getLocaleList();
+    method public void getMetrics(@NonNull android.graphics.Paint, @Nullable android.graphics.Paint.FontMetrics);
+    method public int getSourceIdentifier();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+    method @IntRange(from=0) public int getTtcIndex();
+  }
+
+  public static final class Font.Builder {
+    ctor public Font.Builder(@NonNull java.nio.ByteBuffer);
+    ctor public Font.Builder(@NonNull java.io.File);
+    ctor public Font.Builder(@NonNull android.os.ParcelFileDescriptor);
+    ctor public Font.Builder(@NonNull android.os.ParcelFileDescriptor, @IntRange(from=0) long, @IntRange(from=0xffffffff) long);
+    ctor public Font.Builder(@NonNull android.content.res.AssetManager, @NonNull String);
+    ctor public Font.Builder(@NonNull android.content.res.Resources, int);
+    ctor public Font.Builder(@NonNull android.graphics.fonts.Font);
+    method @NonNull public android.graphics.fonts.Font build() throws java.io.IOException;
+    method @NonNull public android.graphics.fonts.Font.Builder setFontVariationSettings(@Nullable String);
+    method @NonNull public android.graphics.fonts.Font.Builder setFontVariationSettings(@Nullable android.graphics.fonts.FontVariationAxis[]);
+    method @NonNull public android.graphics.fonts.Font.Builder setSlant(int);
+    method @NonNull public android.graphics.fonts.Font.Builder setTtcIndex(@IntRange(from=0) int);
+    method @NonNull public android.graphics.fonts.Font.Builder setWeight(@IntRange(from=android.graphics.fonts.FontStyle.FONT_WEIGHT_MIN, to=android.graphics.fonts.FontStyle.FONT_WEIGHT_MAX) int);
+  }
+
+  public final class FontFamily {
+    method @NonNull public android.graphics.fonts.Font getFont(@IntRange(from=0) int);
+    method @IntRange(from=1) public int getSize();
+  }
+
+  public static final class FontFamily.Builder {
+    ctor public FontFamily.Builder(@NonNull android.graphics.fonts.Font);
+    method @NonNull public android.graphics.fonts.FontFamily.Builder addFont(@NonNull android.graphics.fonts.Font);
+    method @NonNull public android.graphics.fonts.FontFamily build();
+  }
+
+  public final class FontStyle {
+    ctor public FontStyle();
+    ctor public FontStyle(int, int);
+    method public int getSlant();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    field public static final int FONT_SLANT_ITALIC = 1; // 0x1
+    field public static final int FONT_SLANT_UPRIGHT = 0; // 0x0
+    field public static final int FONT_WEIGHT_BLACK = 900; // 0x384
+    field public static final int FONT_WEIGHT_BOLD = 700; // 0x2bc
+    field public static final int FONT_WEIGHT_EXTRA_BOLD = 800; // 0x320
+    field public static final int FONT_WEIGHT_EXTRA_LIGHT = 200; // 0xc8
+    field public static final int FONT_WEIGHT_LIGHT = 300; // 0x12c
+    field public static final int FONT_WEIGHT_MAX = 1000; // 0x3e8
+    field public static final int FONT_WEIGHT_MEDIUM = 500; // 0x1f4
+    field public static final int FONT_WEIGHT_MIN = 1; // 0x1
+    field public static final int FONT_WEIGHT_NORMAL = 400; // 0x190
+    field public static final int FONT_WEIGHT_SEMI_BOLD = 600; // 0x258
+    field public static final int FONT_WEIGHT_THIN = 100; // 0x64
+  }
+
+  public final class FontVariationAxis {
+    ctor public FontVariationAxis(@NonNull String, float);
+    method @Nullable public static android.graphics.fonts.FontVariationAxis[] fromFontVariationSettings(@Nullable String);
+    method public float getStyleValue();
+    method public String getTag();
+    method @NonNull public static String toFontVariationSettings(@Nullable android.graphics.fonts.FontVariationAxis[]);
+  }
+
+  public final class SystemFonts {
+    method @NonNull public static java.util.Set<android.graphics.fonts.Font> getAvailableFonts();
+  }
+
+}
+
+package android.graphics.pdf {
+
+  public class PdfDocument {
+    ctor public PdfDocument();
+    method public void close();
+    method public void finishPage(android.graphics.pdf.PdfDocument.Page);
+    method public java.util.List<android.graphics.pdf.PdfDocument.PageInfo> getPages();
+    method public android.graphics.pdf.PdfDocument.Page startPage(android.graphics.pdf.PdfDocument.PageInfo);
+    method public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  public static final class PdfDocument.Page {
+    method public android.graphics.Canvas getCanvas();
+    method public android.graphics.pdf.PdfDocument.PageInfo getInfo();
+  }
+
+  public static final class PdfDocument.PageInfo {
+    method public android.graphics.Rect getContentRect();
+    method public int getPageHeight();
+    method public int getPageNumber();
+    method public int getPageWidth();
+  }
+
+  public static final class PdfDocument.PageInfo.Builder {
+    ctor public PdfDocument.PageInfo.Builder(int, int, int);
+    method public android.graphics.pdf.PdfDocument.PageInfo create();
+    method public android.graphics.pdf.PdfDocument.PageInfo.Builder setContentRect(android.graphics.Rect);
+  }
+
+  public final class PdfRenderer implements java.lang.AutoCloseable {
+    ctor public PdfRenderer(@NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method public void close();
+    method public int getPageCount();
+    method public android.graphics.pdf.PdfRenderer.Page openPage(int);
+    method public boolean shouldScaleForPrinting();
+  }
+
+  public final class PdfRenderer.Page implements java.lang.AutoCloseable {
+    method public void close();
+    method public int getHeight();
+    method public int getIndex();
+    method public int getWidth();
+    method public void render(@NonNull android.graphics.Bitmap, @Nullable android.graphics.Rect, @Nullable android.graphics.Matrix, int);
+    field public static final int RENDER_MODE_FOR_DISPLAY = 1; // 0x1
+    field public static final int RENDER_MODE_FOR_PRINT = 2; // 0x2
+  }
+
+}
+
+package android.graphics.text {
+
+  public class LineBreaker {
+    method @NonNull public android.graphics.text.LineBreaker.Result computeLineBreaks(@NonNull android.graphics.text.MeasuredText, @NonNull android.graphics.text.LineBreaker.ParagraphConstraints, @IntRange(from=0) int);
+    field public static final int BREAK_STRATEGY_BALANCED = 2; // 0x2
+    field public static final int BREAK_STRATEGY_HIGH_QUALITY = 1; // 0x1
+    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
+    field public static final int HYPHENATION_FREQUENCY_FULL = 2; // 0x2
+    field public static final int HYPHENATION_FREQUENCY_NONE = 0; // 0x0
+    field public static final int HYPHENATION_FREQUENCY_NORMAL = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_INTER_WORD = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_NONE = 0; // 0x0
+  }
+
+  public static final class LineBreaker.Builder {
+    ctor public LineBreaker.Builder();
+    method @NonNull public android.graphics.text.LineBreaker build();
+    method @NonNull public android.graphics.text.LineBreaker.Builder setBreakStrategy(int);
+    method @NonNull public android.graphics.text.LineBreaker.Builder setHyphenationFrequency(int);
+    method @NonNull public android.graphics.text.LineBreaker.Builder setIndents(@Nullable int[]);
+    method @NonNull public android.graphics.text.LineBreaker.Builder setJustificationMode(int);
+  }
+
+  public static class LineBreaker.ParagraphConstraints {
+    ctor public LineBreaker.ParagraphConstraints();
+    method @FloatRange(from=0) @Px public float getDefaultTabStop();
+    method @FloatRange(from=0.0f) @Px public float getFirstWidth();
+    method @IntRange(from=0) @Px public int getFirstWidthLineCount();
+    method @Nullable public float[] getTabStops();
+    method @FloatRange(from=0.0f) @Px public float getWidth();
+    method public void setIndent(@FloatRange(from=0.0f) @Px float, @IntRange(from=0) @Px int);
+    method public void setTabStops(@Nullable float[], @FloatRange(from=0) @Px float);
+    method public void setWidth(@FloatRange(from=0.0f) @Px float);
+  }
+
+  public static class LineBreaker.Result {
+    method public int getEndLineHyphenEdit(int);
+    method @Px public float getLineAscent(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getLineBreakOffset(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getLineCount();
+    method @Px public float getLineDescent(@IntRange(from=0) int);
+    method @Px public float getLineWidth(@IntRange(from=0) int);
+    method public int getStartLineHyphenEdit(int);
+    method public boolean hasLineTab(int);
+  }
+
+  public class MeasuredText {
+    method public void getBounds(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.Rect);
+    method @FloatRange(from=0.0f) @Px public float getCharWidthAt(@IntRange(from=0) int);
+    method @FloatRange(from=0.0) @Px public float getWidth(@IntRange(from=0) int, @IntRange(from=0) int);
+  }
+
+  public static final class MeasuredText.Builder {
+    ctor public MeasuredText.Builder(@NonNull char[]);
+    ctor public MeasuredText.Builder(@NonNull android.graphics.text.MeasuredText);
+    method @NonNull public android.graphics.text.MeasuredText.Builder appendReplacementRun(@NonNull android.graphics.Paint, @IntRange(from=0) int, @FloatRange(from=0) @Px float);
+    method @NonNull public android.graphics.text.MeasuredText.Builder appendStyleRun(@NonNull android.graphics.Paint, @IntRange(from=0) int, boolean);
+    method @NonNull public android.graphics.text.MeasuredText build();
+    method @NonNull public android.graphics.text.MeasuredText.Builder setComputeHyphenation(boolean);
+    method @NonNull public android.graphics.text.MeasuredText.Builder setComputeLayout(boolean);
+  }
+
+  public final class PositionedGlyphs {
+    method public float getAdvance();
+    method public float getAscent();
+    method public float getDescent();
+    method @NonNull public android.graphics.fonts.Font getFont(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getGlyphId(@IntRange(from=0) int);
+    method public float getGlyphX(@IntRange(from=0) int);
+    method public float getGlyphY(@IntRange(from=0) int);
+    method public float getOffsetX();
+    method public float getOffsetY();
+    method @IntRange(from=0) public int glyphCount();
+  }
+
+  public class TextRunShaper {
+    method @NonNull public static android.graphics.text.PositionedGlyphs shapeTextRun(@NonNull char[], int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+    method @NonNull public static android.graphics.text.PositionedGlyphs shapeTextRun(@NonNull CharSequence, int, int, int, int, float, float, boolean, @NonNull android.graphics.Paint);
+  }
+
+}
+
+package android.hardware {
+
+  public abstract class BatteryState {
+    ctor public BatteryState();
+    method @FloatRange(from=-1.0F, to=1.0f) public abstract float getCapacity();
+    method public abstract int getStatus();
+    method public abstract boolean isPresent();
+    field public static final int STATUS_CHARGING = 2; // 0x2
+    field public static final int STATUS_DISCHARGING = 3; // 0x3
+    field public static final int STATUS_FULL = 5; // 0x5
+    field public static final int STATUS_NOT_CHARGING = 4; // 0x4
+    field public static final int STATUS_UNKNOWN = 1; // 0x1
+  }
+
+  @Deprecated public class Camera {
+    method @Deprecated public final void addCallbackBuffer(byte[]);
+    method @Deprecated public final void autoFocus(android.hardware.Camera.AutoFocusCallback);
+    method @Deprecated public final void cancelAutoFocus();
+    method @Deprecated public final boolean enableShutterSound(boolean);
+    method @Deprecated protected void finalize();
+    method @Deprecated public static void getCameraInfo(int, android.hardware.Camera.CameraInfo);
+    method @Deprecated public static int getNumberOfCameras();
+    method @Deprecated public android.hardware.Camera.Parameters getParameters();
+    method @Deprecated public final void lock();
+    method @Deprecated public static android.hardware.Camera open(int);
+    method @Deprecated public static android.hardware.Camera open();
+    method @Deprecated public final void reconnect() throws java.io.IOException;
+    method @Deprecated public final void release();
+    method @Deprecated public void setAutoFocusMoveCallback(android.hardware.Camera.AutoFocusMoveCallback);
+    method @Deprecated public final void setDisplayOrientation(int);
+    method @Deprecated public final void setErrorCallback(android.hardware.Camera.ErrorCallback);
+    method @Deprecated public final void setFaceDetectionListener(android.hardware.Camera.FaceDetectionListener);
+    method @Deprecated public final void setOneShotPreviewCallback(android.hardware.Camera.PreviewCallback);
+    method @Deprecated public void setParameters(android.hardware.Camera.Parameters);
+    method @Deprecated public final void setPreviewCallback(android.hardware.Camera.PreviewCallback);
+    method @Deprecated public final void setPreviewCallbackWithBuffer(android.hardware.Camera.PreviewCallback);
+    method @Deprecated public final void setPreviewDisplay(android.view.SurfaceHolder) throws java.io.IOException;
+    method @Deprecated public final void setPreviewTexture(android.graphics.SurfaceTexture) throws java.io.IOException;
+    method @Deprecated public final void setZoomChangeListener(android.hardware.Camera.OnZoomChangeListener);
+    method @Deprecated public final void startFaceDetection();
+    method @Deprecated public final void startPreview();
+    method @Deprecated public final void startSmoothZoom(int);
+    method @Deprecated public final void stopFaceDetection();
+    method @Deprecated public final void stopPreview();
+    method @Deprecated public final void stopSmoothZoom();
+    method @Deprecated public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback);
+    method @Deprecated public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback);
+    method @Deprecated public final void unlock();
+    field @Deprecated public static final String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE";
+    field @Deprecated public static final String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO";
+    field @Deprecated public static final int CAMERA_ERROR_EVICTED = 2; // 0x2
+    field @Deprecated public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64
+    field @Deprecated public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  @Deprecated public static class Camera.Area {
+    ctor @Deprecated public Camera.Area(android.graphics.Rect, int);
+    field @Deprecated public android.graphics.Rect rect;
+    field @Deprecated public int weight;
+  }
+
+  @Deprecated public static interface Camera.AutoFocusCallback {
+    method @Deprecated public void onAutoFocus(boolean, android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.AutoFocusMoveCallback {
+    method @Deprecated public void onAutoFocusMoving(boolean, android.hardware.Camera);
+  }
+
+  @Deprecated public static class Camera.CameraInfo {
+    ctor @Deprecated public Camera.CameraInfo();
+    field @Deprecated public static final int CAMERA_FACING_BACK = 0; // 0x0
+    field @Deprecated public static final int CAMERA_FACING_FRONT = 1; // 0x1
+    field @Deprecated public boolean canDisableShutterSound;
+    field @Deprecated public int facing;
+    field @Deprecated public int orientation;
+  }
+
+  @Deprecated public static interface Camera.ErrorCallback {
+    method @Deprecated public void onError(int, android.hardware.Camera);
+  }
+
+  @Deprecated public static class Camera.Face {
+    ctor @Deprecated public Camera.Face();
+    field @Deprecated public int id;
+    field @Deprecated public android.graphics.Point leftEye;
+    field @Deprecated public android.graphics.Point mouth;
+    field @Deprecated public android.graphics.Rect rect;
+    field @Deprecated public android.graphics.Point rightEye;
+    field @Deprecated public int score;
+  }
+
+  @Deprecated public static interface Camera.FaceDetectionListener {
+    method @Deprecated public void onFaceDetection(android.hardware.Camera.Face[], android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.OnZoomChangeListener {
+    method @Deprecated public void onZoomChange(int, boolean, android.hardware.Camera);
+  }
+
+  @Deprecated public class Camera.Parameters {
+    method @Deprecated public String flatten();
+    method @Deprecated public String get(String);
+    method @Deprecated public String getAntibanding();
+    method @Deprecated public boolean getAutoExposureLock();
+    method @Deprecated public boolean getAutoWhiteBalanceLock();
+    method @Deprecated public String getColorEffect();
+    method @Deprecated public int getExposureCompensation();
+    method @Deprecated public float getExposureCompensationStep();
+    method @Deprecated public String getFlashMode();
+    method @Deprecated public float getFocalLength();
+    method @Deprecated public java.util.List<android.hardware.Camera.Area> getFocusAreas();
+    method @Deprecated public void getFocusDistances(float[]);
+    method @Deprecated public String getFocusMode();
+    method @Deprecated public float getHorizontalViewAngle();
+    method @Deprecated public int getInt(String);
+    method @Deprecated public int getJpegQuality();
+    method @Deprecated public int getJpegThumbnailQuality();
+    method @Deprecated public android.hardware.Camera.Size getJpegThumbnailSize();
+    method @Deprecated public int getMaxExposureCompensation();
+    method @Deprecated public int getMaxNumDetectedFaces();
+    method @Deprecated public int getMaxNumFocusAreas();
+    method @Deprecated public int getMaxNumMeteringAreas();
+    method @Deprecated public int getMaxZoom();
+    method @Deprecated public java.util.List<android.hardware.Camera.Area> getMeteringAreas();
+    method @Deprecated public int getMinExposureCompensation();
+    method @Deprecated public int getPictureFormat();
+    method @Deprecated public android.hardware.Camera.Size getPictureSize();
+    method @Deprecated public android.hardware.Camera.Size getPreferredPreviewSizeForVideo();
+    method @Deprecated public int getPreviewFormat();
+    method @Deprecated public void getPreviewFpsRange(int[]);
+    method @Deprecated public int getPreviewFrameRate();
+    method @Deprecated public android.hardware.Camera.Size getPreviewSize();
+    method @Deprecated public String getSceneMode();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedAntibanding();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedColorEffects();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedFlashModes();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedFocusModes();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedJpegThumbnailSizes();
+    method @Deprecated public java.util.List<java.lang.Integer> getSupportedPictureFormats();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedPictureSizes();
+    method @Deprecated public java.util.List<java.lang.Integer> getSupportedPreviewFormats();
+    method @Deprecated public java.util.List<int[]> getSupportedPreviewFpsRange();
+    method @Deprecated public java.util.List<java.lang.Integer> getSupportedPreviewFrameRates();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedPreviewSizes();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedSceneModes();
+    method @Deprecated public java.util.List<android.hardware.Camera.Size> getSupportedVideoSizes();
+    method @Deprecated public java.util.List<java.lang.String> getSupportedWhiteBalance();
+    method @Deprecated public float getVerticalViewAngle();
+    method @Deprecated public boolean getVideoStabilization();
+    method @Deprecated public String getWhiteBalance();
+    method @Deprecated public int getZoom();
+    method @Deprecated public java.util.List<java.lang.Integer> getZoomRatios();
+    method @Deprecated public boolean isAutoExposureLockSupported();
+    method @Deprecated public boolean isAutoWhiteBalanceLockSupported();
+    method @Deprecated public boolean isSmoothZoomSupported();
+    method @Deprecated public boolean isVideoSnapshotSupported();
+    method @Deprecated public boolean isVideoStabilizationSupported();
+    method @Deprecated public boolean isZoomSupported();
+    method @Deprecated public void remove(String);
+    method @Deprecated public void removeGpsData();
+    method @Deprecated public void set(String, String);
+    method @Deprecated public void set(String, int);
+    method @Deprecated public void setAntibanding(String);
+    method @Deprecated public void setAutoExposureLock(boolean);
+    method @Deprecated public void setAutoWhiteBalanceLock(boolean);
+    method @Deprecated public void setColorEffect(String);
+    method @Deprecated public void setExposureCompensation(int);
+    method @Deprecated public void setFlashMode(String);
+    method @Deprecated public void setFocusAreas(java.util.List<android.hardware.Camera.Area>);
+    method @Deprecated public void setFocusMode(String);
+    method @Deprecated public void setGpsAltitude(double);
+    method @Deprecated public void setGpsLatitude(double);
+    method @Deprecated public void setGpsLongitude(double);
+    method @Deprecated public void setGpsProcessingMethod(String);
+    method @Deprecated public void setGpsTimestamp(long);
+    method @Deprecated public void setJpegQuality(int);
+    method @Deprecated public void setJpegThumbnailQuality(int);
+    method @Deprecated public void setJpegThumbnailSize(int, int);
+    method @Deprecated public void setMeteringAreas(java.util.List<android.hardware.Camera.Area>);
+    method @Deprecated public void setPictureFormat(int);
+    method @Deprecated public void setPictureSize(int, int);
+    method @Deprecated public void setPreviewFormat(int);
+    method @Deprecated public void setPreviewFpsRange(int, int);
+    method @Deprecated public void setPreviewFrameRate(int);
+    method @Deprecated public void setPreviewSize(int, int);
+    method @Deprecated public void setRecordingHint(boolean);
+    method @Deprecated public void setRotation(int);
+    method @Deprecated public void setSceneMode(String);
+    method @Deprecated public void setVideoStabilization(boolean);
+    method @Deprecated public void setWhiteBalance(String);
+    method @Deprecated public void setZoom(int);
+    method @Deprecated public void unflatten(String);
+    field @Deprecated public static final String ANTIBANDING_50HZ = "50hz";
+    field @Deprecated public static final String ANTIBANDING_60HZ = "60hz";
+    field @Deprecated public static final String ANTIBANDING_AUTO = "auto";
+    field @Deprecated public static final String ANTIBANDING_OFF = "off";
+    field @Deprecated public static final String EFFECT_AQUA = "aqua";
+    field @Deprecated public static final String EFFECT_BLACKBOARD = "blackboard";
+    field @Deprecated public static final String EFFECT_MONO = "mono";
+    field @Deprecated public static final String EFFECT_NEGATIVE = "negative";
+    field @Deprecated public static final String EFFECT_NONE = "none";
+    field @Deprecated public static final String EFFECT_POSTERIZE = "posterize";
+    field @Deprecated public static final String EFFECT_SEPIA = "sepia";
+    field @Deprecated public static final String EFFECT_SOLARIZE = "solarize";
+    field @Deprecated public static final String EFFECT_WHITEBOARD = "whiteboard";
+    field @Deprecated public static final String FLASH_MODE_AUTO = "auto";
+    field @Deprecated public static final String FLASH_MODE_OFF = "off";
+    field @Deprecated public static final String FLASH_MODE_ON = "on";
+    field @Deprecated public static final String FLASH_MODE_RED_EYE = "red-eye";
+    field @Deprecated public static final String FLASH_MODE_TORCH = "torch";
+    field @Deprecated public static final int FOCUS_DISTANCE_FAR_INDEX = 2; // 0x2
+    field @Deprecated public static final int FOCUS_DISTANCE_NEAR_INDEX = 0; // 0x0
+    field @Deprecated public static final int FOCUS_DISTANCE_OPTIMAL_INDEX = 1; // 0x1
+    field @Deprecated public static final String FOCUS_MODE_AUTO = "auto";
+    field @Deprecated public static final String FOCUS_MODE_CONTINUOUS_PICTURE = "continuous-picture";
+    field @Deprecated public static final String FOCUS_MODE_CONTINUOUS_VIDEO = "continuous-video";
+    field @Deprecated public static final String FOCUS_MODE_EDOF = "edof";
+    field @Deprecated public static final String FOCUS_MODE_FIXED = "fixed";
+    field @Deprecated public static final String FOCUS_MODE_INFINITY = "infinity";
+    field @Deprecated public static final String FOCUS_MODE_MACRO = "macro";
+    field @Deprecated public static final int PREVIEW_FPS_MAX_INDEX = 1; // 0x1
+    field @Deprecated public static final int PREVIEW_FPS_MIN_INDEX = 0; // 0x0
+    field @Deprecated public static final String SCENE_MODE_ACTION = "action";
+    field @Deprecated public static final String SCENE_MODE_AUTO = "auto";
+    field @Deprecated public static final String SCENE_MODE_BARCODE = "barcode";
+    field @Deprecated public static final String SCENE_MODE_BEACH = "beach";
+    field @Deprecated public static final String SCENE_MODE_CANDLELIGHT = "candlelight";
+    field @Deprecated public static final String SCENE_MODE_FIREWORKS = "fireworks";
+    field @Deprecated public static final String SCENE_MODE_HDR = "hdr";
+    field @Deprecated public static final String SCENE_MODE_LANDSCAPE = "landscape";
+    field @Deprecated public static final String SCENE_MODE_NIGHT = "night";
+    field @Deprecated public static final String SCENE_MODE_NIGHT_PORTRAIT = "night-portrait";
+    field @Deprecated public static final String SCENE_MODE_PARTY = "party";
+    field @Deprecated public static final String SCENE_MODE_PORTRAIT = "portrait";
+    field @Deprecated public static final String SCENE_MODE_SNOW = "snow";
+    field @Deprecated public static final String SCENE_MODE_SPORTS = "sports";
+    field @Deprecated public static final String SCENE_MODE_STEADYPHOTO = "steadyphoto";
+    field @Deprecated public static final String SCENE_MODE_SUNSET = "sunset";
+    field @Deprecated public static final String SCENE_MODE_THEATRE = "theatre";
+    field @Deprecated public static final String WHITE_BALANCE_AUTO = "auto";
+    field @Deprecated public static final String WHITE_BALANCE_CLOUDY_DAYLIGHT = "cloudy-daylight";
+    field @Deprecated public static final String WHITE_BALANCE_DAYLIGHT = "daylight";
+    field @Deprecated public static final String WHITE_BALANCE_FLUORESCENT = "fluorescent";
+    field @Deprecated public static final String WHITE_BALANCE_INCANDESCENT = "incandescent";
+    field @Deprecated public static final String WHITE_BALANCE_SHADE = "shade";
+    field @Deprecated public static final String WHITE_BALANCE_TWILIGHT = "twilight";
+    field @Deprecated public static final String WHITE_BALANCE_WARM_FLUORESCENT = "warm-fluorescent";
+  }
+
+  @Deprecated public static interface Camera.PictureCallback {
+    method @Deprecated public void onPictureTaken(byte[], android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.PreviewCallback {
+    method @Deprecated public void onPreviewFrame(byte[], android.hardware.Camera);
+  }
+
+  @Deprecated public static interface Camera.ShutterCallback {
+    method @Deprecated public void onShutter();
+  }
+
+  @Deprecated public class Camera.Size {
+    ctor @Deprecated public Camera.Size(int, int);
+    field @Deprecated public int height;
+    field @Deprecated public int width;
+  }
+
+  public final class ConsumerIrManager {
+    method public android.hardware.ConsumerIrManager.CarrierFrequencyRange[] getCarrierFrequencies();
+    method public boolean hasIrEmitter();
+    method public void transmit(int, int[]);
+  }
+
+  public final class ConsumerIrManager.CarrierFrequencyRange {
+    ctor public ConsumerIrManager.CarrierFrequencyRange(int, int);
+    method public int getMaxFrequency();
+    method public int getMinFrequency();
+  }
+
+  public class GeomagneticField {
+    ctor public GeomagneticField(float, float, float, long);
+    method public float getDeclination();
+    method public float getFieldStrength();
+    method public float getHorizontalStrength();
+    method public float getInclination();
+    method public float getX();
+    method public float getY();
+    method public float getZ();
+  }
+
+  public final class HardwareBuffer implements java.lang.AutoCloseable android.os.Parcelable {
+    method public void close();
+    method @NonNull public static android.hardware.HardwareBuffer create(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int, long);
+    method public int describeContents();
+    method public int getFormat();
+    method public int getHeight();
+    method public int getLayers();
+    method public long getUsage();
+    method public int getWidth();
+    method public boolean isClosed();
+    method public static boolean isSupported(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int, long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BLOB = 33; // 0x21
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.HardwareBuffer> CREATOR;
+    field public static final int DS_24UI8 = 50; // 0x32
+    field public static final int DS_FP32UI8 = 52; // 0x34
+    field public static final int D_16 = 48; // 0x30
+    field public static final int D_24 = 49; // 0x31
+    field public static final int D_FP32 = 51; // 0x33
+    field public static final int RGBA_1010102 = 43; // 0x2b
+    field public static final int RGBA_8888 = 1; // 0x1
+    field public static final int RGBA_FP16 = 22; // 0x16
+    field public static final int RGBX_8888 = 2; // 0x2
+    field public static final int RGB_565 = 4; // 0x4
+    field public static final int RGB_888 = 3; // 0x3
+    field public static final int S_UI8 = 53; // 0x35
+    field public static final long USAGE_CPU_READ_OFTEN = 3L; // 0x3L
+    field public static final long USAGE_CPU_READ_RARELY = 2L; // 0x2L
+    field public static final long USAGE_CPU_WRITE_OFTEN = 48L; // 0x30L
+    field public static final long USAGE_CPU_WRITE_RARELY = 32L; // 0x20L
+    field public static final long USAGE_GPU_COLOR_OUTPUT = 512L; // 0x200L
+    field public static final long USAGE_GPU_CUBE_MAP = 33554432L; // 0x2000000L
+    field public static final long USAGE_GPU_DATA_BUFFER = 16777216L; // 0x1000000L
+    field public static final long USAGE_GPU_MIPMAP_COMPLETE = 67108864L; // 0x4000000L
+    field public static final long USAGE_GPU_SAMPLED_IMAGE = 256L; // 0x100L
+    field public static final long USAGE_PROTECTED_CONTENT = 16384L; // 0x4000L
+    field public static final long USAGE_SENSOR_DIRECT_DATA = 8388608L; // 0x800000L
+    field public static final long USAGE_VIDEO_ENCODE = 65536L; // 0x10000L
+    field public static final int YCBCR_420_888 = 35; // 0x23
+  }
+
+  public final class Sensor {
+    method public int getFifoMaxEventCount();
+    method public int getFifoReservedEventCount();
+    method public int getHighestDirectReportRateLevel();
+    method public int getId();
+    method public int getMaxDelay();
+    method public float getMaximumRange();
+    method public int getMinDelay();
+    method public String getName();
+    method public float getPower();
+    method public int getReportingMode();
+    method public float getResolution();
+    method public String getStringType();
+    method public int getType();
+    method public String getVendor();
+    method public int getVersion();
+    method public boolean isAdditionalInfoSupported();
+    method public boolean isDirectChannelTypeSupported(int);
+    method public boolean isDynamicSensor();
+    method public boolean isWakeUpSensor();
+    field public static final int REPORTING_MODE_CONTINUOUS = 0; // 0x0
+    field public static final int REPORTING_MODE_ONE_SHOT = 2; // 0x2
+    field public static final int REPORTING_MODE_ON_CHANGE = 1; // 0x1
+    field public static final int REPORTING_MODE_SPECIAL_TRIGGER = 3; // 0x3
+    field public static final String STRING_TYPE_ACCELEROMETER = "android.sensor.accelerometer";
+    field public static final String STRING_TYPE_ACCELEROMETER_UNCALIBRATED = "android.sensor.accelerometer_uncalibrated";
+    field public static final String STRING_TYPE_AMBIENT_TEMPERATURE = "android.sensor.ambient_temperature";
+    field public static final String STRING_TYPE_GAME_ROTATION_VECTOR = "android.sensor.game_rotation_vector";
+    field public static final String STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR = "android.sensor.geomagnetic_rotation_vector";
+    field public static final String STRING_TYPE_GRAVITY = "android.sensor.gravity";
+    field public static final String STRING_TYPE_GYROSCOPE = "android.sensor.gyroscope";
+    field public static final String STRING_TYPE_GYROSCOPE_UNCALIBRATED = "android.sensor.gyroscope_uncalibrated";
+    field public static final String STRING_TYPE_HEART_BEAT = "android.sensor.heart_beat";
+    field public static final String STRING_TYPE_HEART_RATE = "android.sensor.heart_rate";
+    field public static final String STRING_TYPE_HINGE_ANGLE = "android.sensor.hinge_angle";
+    field public static final String STRING_TYPE_LIGHT = "android.sensor.light";
+    field public static final String STRING_TYPE_LINEAR_ACCELERATION = "android.sensor.linear_acceleration";
+    field public static final String STRING_TYPE_LOW_LATENCY_OFFBODY_DETECT = "android.sensor.low_latency_offbody_detect";
+    field public static final String STRING_TYPE_MAGNETIC_FIELD = "android.sensor.magnetic_field";
+    field public static final String STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED = "android.sensor.magnetic_field_uncalibrated";
+    field public static final String STRING_TYPE_MOTION_DETECT = "android.sensor.motion_detect";
+    field @Deprecated public static final String STRING_TYPE_ORIENTATION = "android.sensor.orientation";
+    field public static final String STRING_TYPE_POSE_6DOF = "android.sensor.pose_6dof";
+    field public static final String STRING_TYPE_PRESSURE = "android.sensor.pressure";
+    field public static final String STRING_TYPE_PROXIMITY = "android.sensor.proximity";
+    field public static final String STRING_TYPE_RELATIVE_HUMIDITY = "android.sensor.relative_humidity";
+    field public static final String STRING_TYPE_ROTATION_VECTOR = "android.sensor.rotation_vector";
+    field public static final String STRING_TYPE_SIGNIFICANT_MOTION = "android.sensor.significant_motion";
+    field public static final String STRING_TYPE_STATIONARY_DETECT = "android.sensor.stationary_detect";
+    field public static final String STRING_TYPE_STEP_COUNTER = "android.sensor.step_counter";
+    field public static final String STRING_TYPE_STEP_DETECTOR = "android.sensor.step_detector";
+    field @Deprecated public static final String STRING_TYPE_TEMPERATURE = "android.sensor.temperature";
+    field public static final int TYPE_ACCELEROMETER = 1; // 0x1
+    field public static final int TYPE_ACCELEROMETER_UNCALIBRATED = 35; // 0x23
+    field public static final int TYPE_ALL = -1; // 0xffffffff
+    field public static final int TYPE_AMBIENT_TEMPERATURE = 13; // 0xd
+    field public static final int TYPE_DEVICE_PRIVATE_BASE = 65536; // 0x10000
+    field public static final int TYPE_GAME_ROTATION_VECTOR = 15; // 0xf
+    field public static final int TYPE_GEOMAGNETIC_ROTATION_VECTOR = 20; // 0x14
+    field public static final int TYPE_GRAVITY = 9; // 0x9
+    field public static final int TYPE_GYROSCOPE = 4; // 0x4
+    field public static final int TYPE_GYROSCOPE_UNCALIBRATED = 16; // 0x10
+    field public static final int TYPE_HEART_BEAT = 31; // 0x1f
+    field public static final int TYPE_HEART_RATE = 21; // 0x15
+    field public static final int TYPE_HINGE_ANGLE = 36; // 0x24
+    field public static final int TYPE_LIGHT = 5; // 0x5
+    field public static final int TYPE_LINEAR_ACCELERATION = 10; // 0xa
+    field public static final int TYPE_LOW_LATENCY_OFFBODY_DETECT = 34; // 0x22
+    field public static final int TYPE_MAGNETIC_FIELD = 2; // 0x2
+    field public static final int TYPE_MAGNETIC_FIELD_UNCALIBRATED = 14; // 0xe
+    field public static final int TYPE_MOTION_DETECT = 30; // 0x1e
+    field @Deprecated public static final int TYPE_ORIENTATION = 3; // 0x3
+    field public static final int TYPE_POSE_6DOF = 28; // 0x1c
+    field public static final int TYPE_PRESSURE = 6; // 0x6
+    field public static final int TYPE_PROXIMITY = 8; // 0x8
+    field public static final int TYPE_RELATIVE_HUMIDITY = 12; // 0xc
+    field public static final int TYPE_ROTATION_VECTOR = 11; // 0xb
+    field public static final int TYPE_SIGNIFICANT_MOTION = 17; // 0x11
+    field public static final int TYPE_STATIONARY_DETECT = 29; // 0x1d
+    field public static final int TYPE_STEP_COUNTER = 19; // 0x13
+    field public static final int TYPE_STEP_DETECTOR = 18; // 0x12
+    field @Deprecated public static final int TYPE_TEMPERATURE = 7; // 0x7
+  }
+
+  public class SensorAdditionalInfo {
+    field public static final int TYPE_FRAME_BEGIN = 0; // 0x0
+    field public static final int TYPE_FRAME_END = 1; // 0x1
+    field public static final int TYPE_INTERNAL_TEMPERATURE = 65537; // 0x10001
+    field public static final int TYPE_SAMPLING = 65540; // 0x10004
+    field public static final int TYPE_SENSOR_PLACEMENT = 65539; // 0x10003
+    field public static final int TYPE_UNTRACKED_DELAY = 65536; // 0x10000
+    field public static final int TYPE_VEC3_CALIBRATION = 65538; // 0x10002
+    field public final float[] floatValues;
+    field public final int[] intValues;
+    field public final android.hardware.Sensor sensor;
+    field public final int serial;
+    field public final int type;
+  }
+
+  public final class SensorDirectChannel implements java.nio.channels.Channel {
+    method public void close();
+    method public int configure(android.hardware.Sensor, int);
+    method public boolean isOpen();
+    field public static final int RATE_FAST = 2; // 0x2
+    field public static final int RATE_NORMAL = 1; // 0x1
+    field public static final int RATE_STOP = 0; // 0x0
+    field public static final int RATE_VERY_FAST = 3; // 0x3
+    field public static final int TYPE_HARDWARE_BUFFER = 2; // 0x2
+    field public static final int TYPE_MEMORY_FILE = 1; // 0x1
+  }
+
+  public class SensorEvent {
+    field public int accuracy;
+    field public android.hardware.Sensor sensor;
+    field public long timestamp;
+    field public final float[] values;
+  }
+
+  public abstract class SensorEventCallback implements android.hardware.SensorEventListener2 {
+    ctor public SensorEventCallback();
+    method public void onAccuracyChanged(android.hardware.Sensor, int);
+    method public void onFlushCompleted(android.hardware.Sensor);
+    method public void onSensorAdditionalInfo(android.hardware.SensorAdditionalInfo);
+    method public void onSensorChanged(android.hardware.SensorEvent);
+  }
+
+  public interface SensorEventListener {
+    method public void onAccuracyChanged(android.hardware.Sensor, int);
+    method public void onSensorChanged(android.hardware.SensorEvent);
+  }
+
+  public interface SensorEventListener2 extends android.hardware.SensorEventListener {
+    method public void onFlushCompleted(android.hardware.Sensor);
+  }
+
+  @Deprecated public interface SensorListener {
+    method @Deprecated public void onAccuracyChanged(int, int);
+    method @Deprecated public void onSensorChanged(int, float[]);
+  }
+
+  public abstract class SensorManager {
+    method public boolean cancelTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor);
+    method public android.hardware.SensorDirectChannel createDirectChannel(android.os.MemoryFile);
+    method public android.hardware.SensorDirectChannel createDirectChannel(android.hardware.HardwareBuffer);
+    method public boolean flush(android.hardware.SensorEventListener);
+    method public static float getAltitude(float, float);
+    method public static void getAngleChange(float[], float[], float[]);
+    method public android.hardware.Sensor getDefaultSensor(int);
+    method public android.hardware.Sensor getDefaultSensor(int, boolean);
+    method public java.util.List<android.hardware.Sensor> getDynamicSensorList(int);
+    method public static float getInclination(float[]);
+    method public static float[] getOrientation(float[], float[]);
+    method public static void getQuaternionFromVector(float[], float[]);
+    method public static boolean getRotationMatrix(float[], float[], float[], float[]);
+    method public static void getRotationMatrixFromVector(float[], float[]);
+    method public java.util.List<android.hardware.Sensor> getSensorList(int);
+    method @Deprecated public int getSensors();
+    method public boolean isDynamicSensorDiscoverySupported();
+    method public void registerDynamicSensorCallback(android.hardware.SensorManager.DynamicSensorCallback);
+    method public void registerDynamicSensorCallback(android.hardware.SensorManager.DynamicSensorCallback, android.os.Handler);
+    method @Deprecated public boolean registerListener(android.hardware.SensorListener, int);
+    method @Deprecated public boolean registerListener(android.hardware.SensorListener, int, int);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, android.os.Handler);
+    method public boolean registerListener(android.hardware.SensorEventListener, android.hardware.Sensor, int, int, android.os.Handler);
+    method public static boolean remapCoordinateSystem(float[], int, int, float[]);
+    method public boolean requestTriggerSensor(android.hardware.TriggerEventListener, android.hardware.Sensor);
+    method public void unregisterDynamicSensorCallback(android.hardware.SensorManager.DynamicSensorCallback);
+    method @Deprecated public void unregisterListener(android.hardware.SensorListener);
+    method @Deprecated public void unregisterListener(android.hardware.SensorListener, int);
+    method public void unregisterListener(android.hardware.SensorEventListener, android.hardware.Sensor);
+    method public void unregisterListener(android.hardware.SensorEventListener);
+    field public static final int AXIS_MINUS_X = 129; // 0x81
+    field public static final int AXIS_MINUS_Y = 130; // 0x82
+    field public static final int AXIS_MINUS_Z = 131; // 0x83
+    field public static final int AXIS_X = 1; // 0x1
+    field public static final int AXIS_Y = 2; // 0x2
+    field public static final int AXIS_Z = 3; // 0x3
+    field @Deprecated public static final int DATA_X = 0; // 0x0
+    field @Deprecated public static final int DATA_Y = 1; // 0x1
+    field @Deprecated public static final int DATA_Z = 2; // 0x2
+    field public static final float GRAVITY_DEATH_STAR_I = 3.5303614E-7f;
+    field public static final float GRAVITY_EARTH = 9.80665f;
+    field public static final float GRAVITY_JUPITER = 23.12f;
+    field public static final float GRAVITY_MARS = 3.71f;
+    field public static final float GRAVITY_MERCURY = 3.7f;
+    field public static final float GRAVITY_MOON = 1.6f;
+    field public static final float GRAVITY_NEPTUNE = 11.0f;
+    field public static final float GRAVITY_PLUTO = 0.6f;
+    field public static final float GRAVITY_SATURN = 8.96f;
+    field public static final float GRAVITY_SUN = 275.0f;
+    field public static final float GRAVITY_THE_ISLAND = 4.815162f;
+    field public static final float GRAVITY_URANUS = 8.69f;
+    field public static final float GRAVITY_VENUS = 8.87f;
+    field public static final float LIGHT_CLOUDY = 100.0f;
+    field public static final float LIGHT_FULLMOON = 0.25f;
+    field public static final float LIGHT_NO_MOON = 0.001f;
+    field public static final float LIGHT_OVERCAST = 10000.0f;
+    field public static final float LIGHT_SHADE = 20000.0f;
+    field public static final float LIGHT_SUNLIGHT = 110000.0f;
+    field public static final float LIGHT_SUNLIGHT_MAX = 120000.0f;
+    field public static final float LIGHT_SUNRISE = 400.0f;
+    field public static final float MAGNETIC_FIELD_EARTH_MAX = 60.0f;
+    field public static final float MAGNETIC_FIELD_EARTH_MIN = 30.0f;
+    field public static final float PRESSURE_STANDARD_ATMOSPHERE = 1013.25f;
+    field @Deprecated public static final int RAW_DATA_INDEX = 3; // 0x3
+    field @Deprecated public static final int RAW_DATA_X = 3; // 0x3
+    field @Deprecated public static final int RAW_DATA_Y = 4; // 0x4
+    field @Deprecated public static final int RAW_DATA_Z = 5; // 0x5
+    field @Deprecated public static final int SENSOR_ACCELEROMETER = 2; // 0x2
+    field @Deprecated public static final int SENSOR_ALL = 127; // 0x7f
+    field public static final int SENSOR_DELAY_FASTEST = 0; // 0x0
+    field public static final int SENSOR_DELAY_GAME = 1; // 0x1
+    field public static final int SENSOR_DELAY_NORMAL = 3; // 0x3
+    field public static final int SENSOR_DELAY_UI = 2; // 0x2
+    field @Deprecated public static final int SENSOR_LIGHT = 16; // 0x10
+    field @Deprecated public static final int SENSOR_MAGNETIC_FIELD = 8; // 0x8
+    field @Deprecated public static final int SENSOR_MAX = 64; // 0x40
+    field @Deprecated public static final int SENSOR_MIN = 1; // 0x1
+    field @Deprecated public static final int SENSOR_ORIENTATION = 1; // 0x1
+    field @Deprecated public static final int SENSOR_ORIENTATION_RAW = 128; // 0x80
+    field @Deprecated public static final int SENSOR_PROXIMITY = 32; // 0x20
+    field public static final int SENSOR_STATUS_ACCURACY_HIGH = 3; // 0x3
+    field public static final int SENSOR_STATUS_ACCURACY_LOW = 1; // 0x1
+    field public static final int SENSOR_STATUS_ACCURACY_MEDIUM = 2; // 0x2
+    field public static final int SENSOR_STATUS_NO_CONTACT = -1; // 0xffffffff
+    field public static final int SENSOR_STATUS_UNRELIABLE = 0; // 0x0
+    field @Deprecated public static final int SENSOR_TEMPERATURE = 4; // 0x4
+    field @Deprecated public static final int SENSOR_TRICORDER = 64; // 0x40
+    field public static final float STANDARD_GRAVITY = 9.80665f;
+  }
+
+  public abstract static class SensorManager.DynamicSensorCallback {
+    ctor public SensorManager.DynamicSensorCallback();
+    method public void onDynamicSensorConnected(android.hardware.Sensor);
+    method public void onDynamicSensorDisconnected(android.hardware.Sensor);
+  }
+
+  public final class SensorPrivacyManager {
+    method public boolean supportsSensorToggle(int);
+  }
+
+  public static class SensorPrivacyManager.Sensors {
+    field public static final int CAMERA = 2; // 0x2
+    field public static final int MICROPHONE = 1; // 0x1
+  }
+
+  public final class TriggerEvent {
+    field public android.hardware.Sensor sensor;
+    field public long timestamp;
+    field public final float[] values;
+  }
+
+  public abstract class TriggerEventListener {
+    ctor public TriggerEventListener();
+    method public abstract void onTrigger(android.hardware.TriggerEvent);
+  }
+
+}
+
+package android.hardware.biometrics {
+
+  public class BiometricManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public int canAuthenticate();
+    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public int canAuthenticate(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public android.hardware.biometrics.BiometricManager.Strings getStrings(int);
+    field public static final int BIOMETRIC_ERROR_HW_UNAVAILABLE = 1; // 0x1
+    field public static final int BIOMETRIC_ERROR_NONE_ENROLLED = 11; // 0xb
+    field public static final int BIOMETRIC_ERROR_NO_HARDWARE = 12; // 0xc
+    field public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
+    field public static final int BIOMETRIC_SUCCESS = 0; // 0x0
+  }
+
+  public static interface BiometricManager.Authenticators {
+    field public static final int BIOMETRIC_STRONG = 15; // 0xf
+    field public static final int BIOMETRIC_WEAK = 255; // 0xff
+    field public static final int DEVICE_CREDENTIAL = 32768; // 0x8000
+  }
+
+  public static class BiometricManager.Strings {
+    method @Nullable @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence getButtonLabel();
+    method @Nullable @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence getPromptMessage();
+    method @Nullable @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public CharSequence getSettingName();
+  }
+
+  public class BiometricPrompt {
+    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public void authenticate(@NonNull android.hardware.biometrics.BiometricPrompt.CryptoObject, @NonNull android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.biometrics.BiometricPrompt.AuthenticationCallback);
+    method @RequiresPermission(android.Manifest.permission.USE_BIOMETRIC) public void authenticate(@NonNull android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.biometrics.BiometricPrompt.AuthenticationCallback);
+    method @Nullable public int getAllowedAuthenticators();
+    method @Nullable public CharSequence getDescription();
+    method @Nullable public CharSequence getNegativeButtonText();
+    method @Nullable public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method public boolean isConfirmationRequired();
+    field public static final int AUTHENTICATION_RESULT_TYPE_BIOMETRIC = 2; // 0x2
+    field public static final int AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL = 1; // 0x1
+    field public static final int BIOMETRIC_ACQUIRED_GOOD = 0; // 0x0
+    field public static final int BIOMETRIC_ACQUIRED_IMAGER_DIRTY = 3; // 0x3
+    field public static final int BIOMETRIC_ACQUIRED_INSUFFICIENT = 2; // 0x2
+    field public static final int BIOMETRIC_ACQUIRED_PARTIAL = 1; // 0x1
+    field public static final int BIOMETRIC_ACQUIRED_TOO_FAST = 5; // 0x5
+    field public static final int BIOMETRIC_ACQUIRED_TOO_SLOW = 4; // 0x4
+    field public static final int BIOMETRIC_ERROR_CANCELED = 5; // 0x5
+    field public static final int BIOMETRIC_ERROR_HW_NOT_PRESENT = 12; // 0xc
+    field public static final int BIOMETRIC_ERROR_HW_UNAVAILABLE = 1; // 0x1
+    field public static final int BIOMETRIC_ERROR_LOCKOUT = 7; // 0x7
+    field public static final int BIOMETRIC_ERROR_LOCKOUT_PERMANENT = 9; // 0x9
+    field public static final int BIOMETRIC_ERROR_NO_BIOMETRICS = 11; // 0xb
+    field public static final int BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
+    field public static final int BIOMETRIC_ERROR_NO_SPACE = 4; // 0x4
+    field public static final int BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
+    field public static final int BIOMETRIC_ERROR_TIMEOUT = 3; // 0x3
+    field public static final int BIOMETRIC_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
+    field public static final int BIOMETRIC_ERROR_USER_CANCELED = 10; // 0xa
+    field public static final int BIOMETRIC_ERROR_VENDOR = 8; // 0x8
+  }
+
+  public abstract static class BiometricPrompt.AuthenticationCallback {
+    ctor public BiometricPrompt.AuthenticationCallback();
+    method public void onAuthenticationError(int, CharSequence);
+    method public void onAuthenticationFailed();
+    method public void onAuthenticationHelp(int, CharSequence);
+    method public void onAuthenticationSucceeded(android.hardware.biometrics.BiometricPrompt.AuthenticationResult);
+  }
+
+  public static class BiometricPrompt.AuthenticationResult {
+    method public int getAuthenticationType();
+    method public android.hardware.biometrics.BiometricPrompt.CryptoObject getCryptoObject();
+  }
+
+  public static class BiometricPrompt.Builder {
+    ctor public BiometricPrompt.Builder(android.content.Context);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt build();
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setAllowedAuthenticators(int);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setConfirmationRequired(boolean);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDescription(@NonNull CharSequence);
+    method @Deprecated @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setDeviceCredentialAllowed(boolean);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setNegativeButton(@NonNull CharSequence, @NonNull java.util.concurrent.Executor, @NonNull android.content.DialogInterface.OnClickListener);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setSubtitle(@NonNull CharSequence);
+    method @NonNull public android.hardware.biometrics.BiometricPrompt.Builder setTitle(@NonNull CharSequence);
+  }
+
+  public static final class BiometricPrompt.CryptoObject {
+    ctor public BiometricPrompt.CryptoObject(@NonNull java.security.Signature);
+    ctor public BiometricPrompt.CryptoObject(@NonNull javax.crypto.Cipher);
+    ctor public BiometricPrompt.CryptoObject(@NonNull javax.crypto.Mac);
+    ctor public BiometricPrompt.CryptoObject(@NonNull android.security.identity.IdentityCredential);
+    method public javax.crypto.Cipher getCipher();
+    method @Nullable public android.security.identity.IdentityCredential getIdentityCredential();
+    method public javax.crypto.Mac getMac();
+    method public java.security.Signature getSignature();
+  }
+
+}
+
+package android.hardware.camera2 {
+
+  public class CameraAccessException extends android.util.AndroidException {
+    ctor public CameraAccessException(int);
+    ctor public CameraAccessException(int, String);
+    ctor public CameraAccessException(int, String, Throwable);
+    ctor public CameraAccessException(int, Throwable);
+    method public final int getReason();
+    field public static final int CAMERA_DISABLED = 1; // 0x1
+    field public static final int CAMERA_DISCONNECTED = 2; // 0x2
+    field public static final int CAMERA_ERROR = 3; // 0x3
+    field public static final int CAMERA_IN_USE = 4; // 0x4
+    field public static final int MAX_CAMERAS_IN_USE = 5; // 0x5
+  }
+
+  public abstract class CameraCaptureSession implements java.lang.AutoCloseable {
+    ctor public CameraCaptureSession();
+    method public abstract void abortCaptures() throws android.hardware.camera2.CameraAccessException;
+    method public abstract int capture(@NonNull android.hardware.camera2.CaptureRequest, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int captureBurst(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int captureBurstRequests(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public int captureSingleRequest(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public abstract void close();
+    method public abstract void finalizeOutputConfigurations(java.util.List<android.hardware.camera2.params.OutputConfiguration>) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public abstract android.hardware.camera2.CameraDevice getDevice();
+    method @Nullable public abstract android.view.Surface getInputSurface();
+    method public abstract boolean isReprocessable();
+    method public abstract void prepare(@NonNull android.view.Surface) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int setRepeatingBurst(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int setRepeatingBurstRequests(@NonNull java.util.List<android.hardware.camera2.CaptureRequest>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int setRepeatingRequest(@NonNull android.hardware.camera2.CaptureRequest, @Nullable android.hardware.camera2.CameraCaptureSession.CaptureCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int setSingleRepeatingRequest(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.CaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public abstract void stopRepeating() throws android.hardware.camera2.CameraAccessException;
+    method public boolean supportsOfflineProcessing(@NonNull android.view.Surface);
+    method @Nullable public android.hardware.camera2.CameraOfflineSession switchToOffline(@NonNull java.util.Collection<android.view.Surface>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraOfflineSession.CameraOfflineSessionCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void updateOutputConfiguration(android.hardware.camera2.params.OutputConfiguration) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraCaptureSession.CaptureCallback {
+    ctor public CameraCaptureSession.CaptureCallback();
+    method public void onCaptureBufferLost(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.view.Surface, long);
+    method public void onCaptureCompleted(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.hardware.camera2.TotalCaptureResult);
+    method public void onCaptureFailed(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.hardware.camera2.CaptureFailure);
+    method public void onCaptureProgressed(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, @NonNull android.hardware.camera2.CaptureResult);
+    method public void onCaptureSequenceAborted(@NonNull android.hardware.camera2.CameraCaptureSession, int);
+    method public void onCaptureSequenceCompleted(@NonNull android.hardware.camera2.CameraCaptureSession, int, long);
+    method public void onCaptureStarted(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.hardware.camera2.CaptureRequest, long, long);
+  }
+
+  public abstract static class CameraCaptureSession.StateCallback {
+    ctor public CameraCaptureSession.StateCallback();
+    method public void onActive(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onCaptureQueueEmpty(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onClosed(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public abstract void onConfigureFailed(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public abstract void onConfigured(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onReady(@NonNull android.hardware.camera2.CameraCaptureSession);
+    method public void onSurfacePrepared(@NonNull android.hardware.camera2.CameraCaptureSession, @NonNull android.view.Surface);
+  }
+
+  public final class CameraCharacteristics extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CameraCharacteristics.Key<?>> {
+    method @Nullable public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
+    method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailablePhysicalCameraRequestKeys();
+    method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableSessionKeys();
+    method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeys();
+    method @NonNull public java.util.List<android.hardware.camera2.CameraCharacteristics.Key<?>> getKeysNeedingPermission();
+    method @NonNull public java.util.Set<java.lang.String> getPhysicalCameraIds();
+    method @Nullable public android.hardware.camera2.params.RecommendedStreamConfigurationMap getRecommendedStreamConfigurationMap(int);
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AE_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_COMPENSATION_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Rational> CONTROL_AE_COMPENSATION_STEP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AE_LOCK_AVAILABLE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AF_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_EFFECTS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.Capability[]> CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_SCENE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> CONTROL_AWB_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> CONTROL_AWB_LOCK_AVAILABLE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AF;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> CONTROL_MAX_REGIONS_AWB;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Float>> CONTROL_ZOOM_RATIO_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> DEPTH_DEPTH_IS_EXCLUSIVE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> DISTORTION_CORRECTION_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> EDGE_AVAILABLE_EDGE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> FLASH_INFO_AVAILABLE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.DeviceStateSensorOrientationMap> INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> INFO_SUPPORTED_HARDWARE_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.String> INFO_VERSION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_DISTORTION_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_FACING;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_APERTURES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_HYPERFOCAL_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LENS_POSE_REFERENCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_ROTATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_POSE_TRANSLATION;
+    field @Deprecated @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<float[]> LENS_RADIAL_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REPROCESS_MAX_CAPTURE_STALL;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> REQUEST_AVAILABLE_CAPABILITIES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_INPUT_STREAMS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_PROC_STALLING;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_MAX_NUM_OUTPUT_RAW;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> REQUEST_PARTIAL_RESULT_COUNT;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> REQUEST_PIPELINE_MAX_DEPTH;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SCALER_AVAILABLE_ROTATE_AND_CROP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SCALER_CROPPING_TYPE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SCALER_DEFAULT_SECURE_IMAGE_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_MAXIMUM_RESOLUTION_STREAM_COMBINATIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MandatoryStreamCombination[]> SCALER_MANDATORY_STREAM_COMBINATIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.MultiResolutionStreamConfigurationMap> SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.StreamConfigurationMap> SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.BlackLevelPattern> SENSOR_BLACK_LEVEL_PATTERN;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_CALIBRATION_TRANSFORM2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_COLOR_TRANSFORM2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.hardware.camera2.params.ColorSpaceTransform> SENSOR_FORWARD_MATRIX2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_BINNING_FACTOR;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Long>> SENSOR_INFO_EXPOSURE_TIME_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Boolean> SENSOR_INFO_LENS_SHADING_APPLIED;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Long> SENSOR_INFO_MAX_FRAME_DURATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.SizeF> SENSOR_INFO_PHYSICAL_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect> SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.util.Range<java.lang.Integer>> SENSOR_INFO_SENSITIVITY_RANGE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_TIMESTAMP_SOURCE;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_INFO_WHITE_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_MAX_ANALOG_SENSITIVITY;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<android.graphics.Rect[]> SENSOR_OPTICAL_BLACK_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_ORIENTATION;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SENSOR_REFERENCE_ILLUMINANT1;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Byte> SENSOR_REFERENCE_ILLUMINANT2;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> SHADING_AVAILABLE_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> STATISTICS_INFO_MAX_FACE_COUNT;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> SYNC_MAX_LATENCY;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> TONEMAP_AVAILABLE_TONE_MAP_MODES;
+    field @NonNull public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
+  }
+
+  public static final class CameraCharacteristics.Key<T> {
+    ctor public CameraCharacteristics.Key(@NonNull String, @NonNull Class<T>);
+    method @NonNull public String getName();
+  }
+
+  public abstract class CameraConstrainedHighSpeedCaptureSession extends android.hardware.camera2.CameraCaptureSession {
+    ctor public CameraConstrainedHighSpeedCaptureSession();
+    method @NonNull public abstract java.util.List<android.hardware.camera2.CaptureRequest> createHighSpeedRequestList(@NonNull android.hardware.camera2.CaptureRequest) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract class CameraDevice implements java.lang.AutoCloseable {
+    method public abstract void close();
+    method @NonNull public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int, java.util.Set<java.lang.String>) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createCaptureSession(@NonNull java.util.List<android.view.Surface>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public void createCaptureSession(android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createCaptureSessionByOutputConfigurations(java.util.List<android.hardware.camera2.params.OutputConfiguration>, android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createConstrainedHighSpeedCaptureSession(@NonNull java.util.List<android.view.Surface>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public void createExtensionSession(@NonNull android.hardware.camera2.params.ExtensionSessionConfiguration) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(@NonNull android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createReprocessableCaptureSession(@NonNull android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.view.Surface>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method @Deprecated public abstract void createReprocessableCaptureSessionByConfigurations(@NonNull android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public int getCameraAudioRestriction() throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public abstract String getId();
+    method public boolean isSessionConfigurationSupported(@NonNull android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
+    method public void setCameraAudioRestriction(int) throws android.hardware.camera2.CameraAccessException;
+    field public static final int AUDIO_RESTRICTION_NONE = 0; // 0x0
+    field public static final int AUDIO_RESTRICTION_VIBRATION = 1; // 0x1
+    field public static final int AUDIO_RESTRICTION_VIBRATION_SOUND = 3; // 0x3
+    field public static final int TEMPLATE_MANUAL = 6; // 0x6
+    field public static final int TEMPLATE_PREVIEW = 1; // 0x1
+    field public static final int TEMPLATE_RECORD = 3; // 0x3
+    field public static final int TEMPLATE_STILL_CAPTURE = 2; // 0x2
+    field public static final int TEMPLATE_VIDEO_SNAPSHOT = 4; // 0x4
+    field public static final int TEMPLATE_ZERO_SHUTTER_LAG = 5; // 0x5
+  }
+
+  public abstract static class CameraDevice.StateCallback {
+    ctor public CameraDevice.StateCallback();
+    method public void onClosed(@NonNull android.hardware.camera2.CameraDevice);
+    method public abstract void onDisconnected(@NonNull android.hardware.camera2.CameraDevice);
+    method public abstract void onError(@NonNull android.hardware.camera2.CameraDevice, int);
+    method public abstract void onOpened(@NonNull android.hardware.camera2.CameraDevice);
+    field public static final int ERROR_CAMERA_DEVICE = 4; // 0x4
+    field public static final int ERROR_CAMERA_DISABLED = 3; // 0x3
+    field public static final int ERROR_CAMERA_IN_USE = 1; // 0x1
+    field public static final int ERROR_CAMERA_SERVICE = 5; // 0x5
+    field public static final int ERROR_MAX_CAMERAS_IN_USE = 2; // 0x2
+  }
+
+  public final class CameraExtensionCharacteristics {
+    method @Nullable public android.util.Range<java.lang.Long> getEstimatedCaptureLatencyRangeMillis(int, @NonNull android.util.Size, int);
+    method @NonNull public <T> java.util.List<android.util.Size> getExtensionSupportedSizes(int, @NonNull Class<T>);
+    method @NonNull public java.util.List<android.util.Size> getExtensionSupportedSizes(int, int);
+    method @NonNull public java.util.List<java.lang.Integer> getSupportedExtensions();
+    field public static final int EXTENSION_AUTOMATIC = 0; // 0x0
+    field public static final int EXTENSION_BEAUTY = 1; // 0x1
+    field public static final int EXTENSION_BOKEH = 2; // 0x2
+    field public static final int EXTENSION_HDR = 3; // 0x3
+    field public static final int EXTENSION_NIGHT = 4; // 0x4
+  }
+
+  public abstract class CameraExtensionSession implements java.lang.AutoCloseable {
+    method public int capture(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraExtensionSession.ExtensionCaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void close() throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public android.hardware.camera2.CameraDevice getDevice();
+    method public int setRepeatingRequest(@NonNull android.hardware.camera2.CaptureRequest, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraExtensionSession.ExtensionCaptureCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void stopRepeating() throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraExtensionSession.ExtensionCaptureCallback {
+    ctor public CameraExtensionSession.ExtensionCaptureCallback();
+    method public void onCaptureFailed(@NonNull android.hardware.camera2.CameraExtensionSession, @NonNull android.hardware.camera2.CaptureRequest);
+    method public void onCaptureProcessStarted(@NonNull android.hardware.camera2.CameraExtensionSession, @NonNull android.hardware.camera2.CaptureRequest);
+    method public void onCaptureSequenceAborted(@NonNull android.hardware.camera2.CameraExtensionSession, int);
+    method public void onCaptureSequenceCompleted(@NonNull android.hardware.camera2.CameraExtensionSession, int);
+    method public void onCaptureStarted(@NonNull android.hardware.camera2.CameraExtensionSession, @NonNull android.hardware.camera2.CaptureRequest, long);
+  }
+
+  public abstract static class CameraExtensionSession.StateCallback {
+    ctor public CameraExtensionSession.StateCallback();
+    method public void onClosed(@NonNull android.hardware.camera2.CameraExtensionSession);
+    method public abstract void onConfigureFailed(@NonNull android.hardware.camera2.CameraExtensionSession);
+    method public abstract void onConfigured(@NonNull android.hardware.camera2.CameraExtensionSession);
+  }
+
+  public final class CameraManager {
+    method @NonNull public android.hardware.camera2.CameraCharacteristics getCameraCharacteristics(@NonNull String) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public android.hardware.camera2.CameraExtensionCharacteristics getCameraExtensionCharacteristics(@NonNull String) throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public String[] getCameraIdList() throws android.hardware.camera2.CameraAccessException;
+    method @NonNull public java.util.Set<java.util.Set<java.lang.String>> getConcurrentCameraIds() throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(android.Manifest.permission.CAMERA) public boolean isConcurrentSessionConfigurationSupported(@NonNull java.util.Map<java.lang.String,android.hardware.camera2.params.SessionConfiguration>) throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(android.Manifest.permission.CAMERA) public void openCamera(@NonNull String, @NonNull android.hardware.camera2.CameraDevice.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(android.Manifest.permission.CAMERA) public void openCamera(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
+    method public void registerAvailabilityCallback(@NonNull android.hardware.camera2.CameraManager.AvailabilityCallback, @Nullable android.os.Handler);
+    method public void registerAvailabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraManager.AvailabilityCallback);
+    method public void registerTorchCallback(@NonNull android.hardware.camera2.CameraManager.TorchCallback, @Nullable android.os.Handler);
+    method public void registerTorchCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraManager.TorchCallback);
+    method public void setTorchMode(@NonNull String, boolean) throws android.hardware.camera2.CameraAccessException;
+    method public void unregisterAvailabilityCallback(@NonNull android.hardware.camera2.CameraManager.AvailabilityCallback);
+    method public void unregisterTorchCallback(@NonNull android.hardware.camera2.CameraManager.TorchCallback);
+  }
+
+  public abstract static class CameraManager.AvailabilityCallback {
+    ctor public CameraManager.AvailabilityCallback();
+    method public void onCameraAccessPrioritiesChanged();
+    method public void onCameraAvailable(@NonNull String);
+    method public void onCameraUnavailable(@NonNull String);
+    method public void onPhysicalCameraAvailable(@NonNull String, @NonNull String);
+    method public void onPhysicalCameraUnavailable(@NonNull String, @NonNull String);
+  }
+
+  public abstract static class CameraManager.TorchCallback {
+    ctor public CameraManager.TorchCallback();
+    method public void onTorchModeChanged(@NonNull String, boolean);
+    method public void onTorchModeUnavailable(@NonNull String);
+  }
+
+  public abstract class CameraMetadata<TKey> {
+    method @NonNull public java.util.List<TKey> getKeys();
+    field public static final int COLOR_CORRECTION_ABERRATION_MODE_FAST = 1; // 0x1
+    field public static final int COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int COLOR_CORRECTION_ABERRATION_MODE_OFF = 0; // 0x0
+    field public static final int COLOR_CORRECTION_MODE_FAST = 1; // 0x1
+    field public static final int COLOR_CORRECTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int COLOR_CORRECTION_MODE_TRANSFORM_MATRIX = 0; // 0x0
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_50HZ = 1; // 0x1
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_60HZ = 2; // 0x2
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_AUTO = 3; // 0x3
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AE_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AE_MODE_ON = 1; // 0x1
+    field public static final int CONTROL_AE_MODE_ON_ALWAYS_FLASH = 3; // 0x3
+    field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH = 2; // 0x2
+    field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE = 4; // 0x4
+    field public static final int CONTROL_AE_MODE_ON_EXTERNAL_FLASH = 5; // 0x5
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL = 2; // 0x2
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_IDLE = 0; // 0x0
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_START = 1; // 0x1
+    field public static final int CONTROL_AE_STATE_CONVERGED = 2; // 0x2
+    field public static final int CONTROL_AE_STATE_FLASH_REQUIRED = 4; // 0x4
+    field public static final int CONTROL_AE_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AE_STATE_LOCKED = 3; // 0x3
+    field public static final int CONTROL_AE_STATE_PRECAPTURE = 5; // 0x5
+    field public static final int CONTROL_AE_STATE_SEARCHING = 1; // 0x1
+    field public static final int CONTROL_AF_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_AF_MODE_CONTINUOUS_PICTURE = 4; // 0x4
+    field public static final int CONTROL_AF_MODE_CONTINUOUS_VIDEO = 3; // 0x3
+    field public static final int CONTROL_AF_MODE_EDOF = 5; // 0x5
+    field public static final int CONTROL_AF_MODE_MACRO = 2; // 0x2
+    field public static final int CONTROL_AF_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AF_SCENE_CHANGE_DETECTED = 1; // 0x1
+    field public static final int CONTROL_AF_SCENE_CHANGE_NOT_DETECTED = 0; // 0x0
+    field public static final int CONTROL_AF_STATE_ACTIVE_SCAN = 3; // 0x3
+    field public static final int CONTROL_AF_STATE_FOCUSED_LOCKED = 4; // 0x4
+    field public static final int CONTROL_AF_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AF_STATE_NOT_FOCUSED_LOCKED = 5; // 0x5
+    field public static final int CONTROL_AF_STATE_PASSIVE_FOCUSED = 2; // 0x2
+    field public static final int CONTROL_AF_STATE_PASSIVE_SCAN = 1; // 0x1
+    field public static final int CONTROL_AF_STATE_PASSIVE_UNFOCUSED = 6; // 0x6
+    field public static final int CONTROL_AF_TRIGGER_CANCEL = 2; // 0x2
+    field public static final int CONTROL_AF_TRIGGER_IDLE = 0; // 0x0
+    field public static final int CONTROL_AF_TRIGGER_START = 1; // 0x1
+    field public static final int CONTROL_AWB_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_AWB_MODE_CLOUDY_DAYLIGHT = 6; // 0x6
+    field public static final int CONTROL_AWB_MODE_DAYLIGHT = 5; // 0x5
+    field public static final int CONTROL_AWB_MODE_FLUORESCENT = 3; // 0x3
+    field public static final int CONTROL_AWB_MODE_INCANDESCENT = 2; // 0x2
+    field public static final int CONTROL_AWB_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AWB_MODE_SHADE = 8; // 0x8
+    field public static final int CONTROL_AWB_MODE_TWILIGHT = 7; // 0x7
+    field public static final int CONTROL_AWB_MODE_WARM_FLUORESCENT = 4; // 0x4
+    field public static final int CONTROL_AWB_STATE_CONVERGED = 2; // 0x2
+    field public static final int CONTROL_AWB_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AWB_STATE_LOCKED = 3; // 0x3
+    field public static final int CONTROL_AWB_STATE_SEARCHING = 1; // 0x1
+    field public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0; // 0x0
+    field public static final int CONTROL_CAPTURE_INTENT_MANUAL = 6; // 0x6
+    field public static final int CONTROL_CAPTURE_INTENT_MOTION_TRACKING = 7; // 0x7
+    field public static final int CONTROL_CAPTURE_INTENT_PREVIEW = 1; // 0x1
+    field public static final int CONTROL_CAPTURE_INTENT_STILL_CAPTURE = 2; // 0x2
+    field public static final int CONTROL_CAPTURE_INTENT_VIDEO_RECORD = 3; // 0x3
+    field public static final int CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT = 4; // 0x4
+    field public static final int CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG = 5; // 0x5
+    field public static final int CONTROL_EFFECT_MODE_AQUA = 8; // 0x8
+    field public static final int CONTROL_EFFECT_MODE_BLACKBOARD = 7; // 0x7
+    field public static final int CONTROL_EFFECT_MODE_MONO = 1; // 0x1
+    field public static final int CONTROL_EFFECT_MODE_NEGATIVE = 2; // 0x2
+    field public static final int CONTROL_EFFECT_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_EFFECT_MODE_POSTERIZE = 5; // 0x5
+    field public static final int CONTROL_EFFECT_MODE_SEPIA = 4; // 0x4
+    field public static final int CONTROL_EFFECT_MODE_SOLARIZE = 3; // 0x3
+    field public static final int CONTROL_EFFECT_MODE_WHITEBOARD = 6; // 0x6
+    field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS = 2; // 0x2
+    field public static final int CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE = 1; // 0x1
+    field public static final int CONTROL_EXTENDED_SCENE_MODE_DISABLED = 0; // 0x0
+    field public static final int CONTROL_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_MODE_OFF_KEEP_STATE = 3; // 0x3
+    field public static final int CONTROL_MODE_USE_EXTENDED_SCENE_MODE = 4; // 0x4
+    field public static final int CONTROL_MODE_USE_SCENE_MODE = 2; // 0x2
+    field public static final int CONTROL_SCENE_MODE_ACTION = 2; // 0x2
+    field public static final int CONTROL_SCENE_MODE_BARCODE = 16; // 0x10
+    field public static final int CONTROL_SCENE_MODE_BEACH = 8; // 0x8
+    field public static final int CONTROL_SCENE_MODE_CANDLELIGHT = 15; // 0xf
+    field public static final int CONTROL_SCENE_MODE_DISABLED = 0; // 0x0
+    field public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1; // 0x1
+    field public static final int CONTROL_SCENE_MODE_FIREWORKS = 12; // 0xc
+    field public static final int CONTROL_SCENE_MODE_HDR = 18; // 0x12
+    field @Deprecated public static final int CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO = 17; // 0x11
+    field public static final int CONTROL_SCENE_MODE_LANDSCAPE = 4; // 0x4
+    field public static final int CONTROL_SCENE_MODE_NIGHT = 5; // 0x5
+    field public static final int CONTROL_SCENE_MODE_NIGHT_PORTRAIT = 6; // 0x6
+    field public static final int CONTROL_SCENE_MODE_PARTY = 14; // 0xe
+    field public static final int CONTROL_SCENE_MODE_PORTRAIT = 3; // 0x3
+    field public static final int CONTROL_SCENE_MODE_SNOW = 9; // 0x9
+    field public static final int CONTROL_SCENE_MODE_SPORTS = 13; // 0xd
+    field public static final int CONTROL_SCENE_MODE_STEADYPHOTO = 11; // 0xb
+    field public static final int CONTROL_SCENE_MODE_SUNSET = 10; // 0xa
+    field public static final int CONTROL_SCENE_MODE_THEATRE = 7; // 0x7
+    field public static final int CONTROL_VIDEO_STABILIZATION_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_VIDEO_STABILIZATION_MODE_ON = 1; // 0x1
+    field public static final int DISTORTION_CORRECTION_MODE_FAST = 1; // 0x1
+    field public static final int DISTORTION_CORRECTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int DISTORTION_CORRECTION_MODE_OFF = 0; // 0x0
+    field public static final int EDGE_MODE_FAST = 1; // 0x1
+    field public static final int EDGE_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int EDGE_MODE_OFF = 0; // 0x0
+    field public static final int EDGE_MODE_ZERO_SHUTTER_LAG = 3; // 0x3
+    field public static final int FLASH_MODE_OFF = 0; // 0x0
+    field public static final int FLASH_MODE_SINGLE = 1; // 0x1
+    field public static final int FLASH_MODE_TORCH = 2; // 0x2
+    field public static final int FLASH_STATE_CHARGING = 1; // 0x1
+    field public static final int FLASH_STATE_FIRED = 3; // 0x3
+    field public static final int FLASH_STATE_PARTIAL = 4; // 0x4
+    field public static final int FLASH_STATE_READY = 2; // 0x2
+    field public static final int FLASH_STATE_UNAVAILABLE = 0; // 0x0
+    field public static final int HOT_PIXEL_MODE_FAST = 1; // 0x1
+    field public static final int HOT_PIXEL_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int HOT_PIXEL_MODE_OFF = 0; // 0x0
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_3 = 3; // 0x3
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL = 4; // 0x4
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_FULL = 1; // 0x1
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY = 2; // 0x2
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED = 0; // 0x0
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_EXTERNAL = 2; // 0x2
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1; // 0x1
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2; // 0x2
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0; // 0x0
+    field public static final int LENS_OPTICAL_STABILIZATION_MODE_OFF = 0; // 0x0
+    field public static final int LENS_OPTICAL_STABILIZATION_MODE_ON = 1; // 0x1
+    field public static final int LENS_POSE_REFERENCE_GYROSCOPE = 1; // 0x1
+    field public static final int LENS_POSE_REFERENCE_PRIMARY_CAMERA = 0; // 0x0
+    field public static final int LENS_POSE_REFERENCE_UNDEFINED = 2; // 0x2
+    field public static final int LENS_STATE_MOVING = 1; // 0x1
+    field public static final int LENS_STATE_STATIONARY = 0; // 0x0
+    field public static final int LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE = 0; // 0x0
+    field public static final int LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED = 1; // 0x1
+    field public static final int NOISE_REDUCTION_MODE_FAST = 1; // 0x1
+    field public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int NOISE_REDUCTION_MODE_MINIMAL = 3; // 0x3
+    field public static final int NOISE_REDUCTION_MODE_OFF = 0; // 0x0
+    field public static final int NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG = 4; // 0x4
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0; // 0x0
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE = 6; // 0x6
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO = 9; // 0x9
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT = 8; // 0x8
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA = 11; // 0xb
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING = 2; // 0x2
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR = 1; // 0x1
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME = 12; // 0xc
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING = 10; // 0xa
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING = 15; // 0xf
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING = 4; // 0x4
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_RAW = 3; // 0x3
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS = 5; // 0x5
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING = 17; // 0x11
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA = 13; // 0xd
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA = 14; // 0xe
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR = 16; // 0x10
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING = 7; // 0x7
+    field public static final int SCALER_CROPPING_TYPE_CENTER_ONLY = 0; // 0x0
+    field public static final int SCALER_CROPPING_TYPE_FREEFORM = 1; // 0x1
+    field public static final int SCALER_ROTATE_AND_CROP_180 = 2; // 0x2
+    field public static final int SCALER_ROTATE_AND_CROP_270 = 3; // 0x3
+    field public static final int SCALER_ROTATE_AND_CROP_90 = 1; // 0x1
+    field public static final int SCALER_ROTATE_AND_CROP_AUTO = 4; // 0x4
+    field public static final int SCALER_ROTATE_AND_CROP_NONE = 0; // 0x0
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3; // 0x3
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG = 2; // 0x2
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG = 1; // 0x1
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO = 5; // 0x5
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR = 6; // 0x6
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB = 4; // 0x4
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB = 0; // 0x0
+    field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME = 1; // 0x1
+    field public static final int SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN = 0; // 0x0
+    field public static final int SENSOR_PIXEL_MODE_DEFAULT = 0; // 0x0
+    field public static final int SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION = 1; // 0x1
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER = 10; // 0xa
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT = 14; // 0xe
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D50 = 23; // 0x17
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D55 = 20; // 0x14
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D65 = 21; // 0x15
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D75 = 22; // 0x16
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT = 1; // 0x1
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT = 12; // 0xc
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT = 13; // 0xd
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER = 9; // 0x9
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLASH = 4; // 0x4
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT = 2; // 0x2
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN = 24; // 0x18
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_SHADE = 11; // 0xb
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A = 17; // 0x11
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B = 18; // 0x12
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C = 19; // 0x13
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN = 3; // 0x3
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT = 15; // 0xf
+    field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS = 2; // 0x2
+    field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY = 3; // 0x3
+    field public static final int SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 256; // 0x100
+    field public static final int SENSOR_TEST_PATTERN_MODE_OFF = 0; // 0x0
+    field public static final int SENSOR_TEST_PATTERN_MODE_PN9 = 4; // 0x4
+    field public static final int SENSOR_TEST_PATTERN_MODE_SOLID_COLOR = 1; // 0x1
+    field public static final int SHADING_MODE_FAST = 1; // 0x1
+    field public static final int SHADING_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int SHADING_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_FACE_DETECT_MODE_FULL = 2; // 0x2
+    field public static final int STATISTICS_FACE_DETECT_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_FACE_DETECT_MODE_SIMPLE = 1; // 0x1
+    field public static final int STATISTICS_LENS_SHADING_MAP_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_LENS_SHADING_MAP_MODE_ON = 1; // 0x1
+    field public static final int STATISTICS_OIS_DATA_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_OIS_DATA_MODE_ON = 1; // 0x1
+    field public static final int STATISTICS_SCENE_FLICKER_50HZ = 1; // 0x1
+    field public static final int STATISTICS_SCENE_FLICKER_60HZ = 2; // 0x2
+    field public static final int STATISTICS_SCENE_FLICKER_NONE = 0; // 0x0
+    field public static final int SYNC_MAX_LATENCY_PER_FRAME_CONTROL = 0; // 0x0
+    field public static final int SYNC_MAX_LATENCY_UNKNOWN = -1; // 0xffffffff
+    field public static final int TONEMAP_MODE_CONTRAST_CURVE = 0; // 0x0
+    field public static final int TONEMAP_MODE_FAST = 1; // 0x1
+    field public static final int TONEMAP_MODE_GAMMA_VALUE = 3; // 0x3
+    field public static final int TONEMAP_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int TONEMAP_MODE_PRESET_CURVE = 4; // 0x4
+    field public static final int TONEMAP_PRESET_CURVE_REC709 = 1; // 0x1
+    field public static final int TONEMAP_PRESET_CURVE_SRGB = 0; // 0x0
+  }
+
+  public abstract class CameraOfflineSession extends android.hardware.camera2.CameraCaptureSession {
+    ctor public CameraOfflineSession();
+  }
+
+  public abstract static class CameraOfflineSession.CameraOfflineSessionCallback {
+    ctor public CameraOfflineSession.CameraOfflineSessionCallback();
+    method public abstract void onClosed(@NonNull android.hardware.camera2.CameraOfflineSession);
+    method public abstract void onError(@NonNull android.hardware.camera2.CameraOfflineSession, int);
+    method public abstract void onIdle(@NonNull android.hardware.camera2.CameraOfflineSession);
+    method public abstract void onReady(@NonNull android.hardware.camera2.CameraOfflineSession);
+    method public abstract void onSwitchFailed(@NonNull android.hardware.camera2.CameraOfflineSession);
+    field public static final int STATUS_INTERNAL_ERROR = 0; // 0x0
+  }
+
+  public class CaptureFailure {
+    method public long getFrameNumber();
+    method @Nullable public String getPhysicalCameraId();
+    method public int getReason();
+    method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
+    method public int getSequenceId();
+    method public boolean wasImageCaptured();
+    field public static final int REASON_ERROR = 0; // 0x0
+    field public static final int REASON_FLUSHED = 1; // 0x1
+  }
+
+  public final class CaptureRequest extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CaptureRequest.Key<?>> implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getKeys();
+    method @Nullable public Object getTag();
+    method public boolean isReprocess();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_AWB_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_EXTENDED_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> CONTROL_ZOOM_RATIO;
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.CaptureRequest> CREATOR;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> EDGE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> FLASH_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> HOT_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.location.Location> JPEG_GPS_LOCATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> JPEG_ORIENTATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_APERTURE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FILTER_DENSITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.graphics.Rect> SCALER_CROP_REGION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SCALER_ROTATE_AND_CROP;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> SHADING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Float> TONEMAP_GAMMA;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureRequest.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+  }
+
+  public static final class CaptureRequest.Builder {
+    method public void addTarget(@NonNull android.view.Surface);
+    method @NonNull public android.hardware.camera2.CaptureRequest build();
+    method @Nullable public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method @Nullable public <T> T getPhysicalCameraKey(android.hardware.camera2.CaptureRequest.Key<T>, @NonNull String);
+    method public void removeTarget(@NonNull android.view.Surface);
+    method public <T> void set(@NonNull android.hardware.camera2.CaptureRequest.Key<T>, T);
+    method public <T> android.hardware.camera2.CaptureRequest.Builder setPhysicalCameraKey(@NonNull android.hardware.camera2.CaptureRequest.Key<T>, T, @NonNull String);
+    method public void setTag(@Nullable Object);
+  }
+
+  public static final class CaptureRequest.Key<T> {
+    ctor public CaptureRequest.Key(@NonNull String, @NonNull Class<T>);
+    method @NonNull public String getName();
+  }
+
+  public class CaptureResult extends android.hardware.camera2.CameraMetadata<android.hardware.camera2.CaptureResult.Key<?>> {
+    method @Nullable public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
+    method @NonNull public String getCameraId();
+    method public long getFrameNumber();
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getKeys();
+    method @NonNull public android.hardware.camera2.CaptureRequest getRequest();
+    method public int getSequenceId();
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> BLACK_LEVEL_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_ABERRATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.RggbChannelVector> COLOR_CORRECTION_GAINS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> COLOR_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.ColorSpaceTransform> COLOR_CORRECTION_TRANSFORM;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_ANTIBANDING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_EXPOSURE_COMPENSATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AE_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_PRECAPTURE_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AE_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AE_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Range<java.lang.Integer>> CONTROL_AE_TARGET_FPS_RANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AF_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_SCENE_CHANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AF_TRIGGER;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_AWB_LOCK;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.MeteringRectangle[]> CONTROL_AWB_REGIONS;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_AWB_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_CAPTURE_INTENT;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EFFECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> CONTROL_ENABLE_ZSL;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_EXTENDED_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_POST_RAW_SENSITIVITY_BOOST;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_SCENE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> CONTROL_VIDEO_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> CONTROL_ZOOM_RATIO;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> DISTORTION_CORRECTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> EDGE_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> FLASH_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> HOT_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.location.Location> JPEG_GPS_LOCATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> JPEG_ORIENTATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> JPEG_THUMBNAIL_QUALITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Size> JPEG_THUMBNAIL_SIZE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_APERTURE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FILTER_DENSITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCAL_LENGTH;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> LENS_FOCUS_DISTANCE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Float,java.lang.Float>> LENS_FOCUS_RANGE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_INTRINSIC_CALIBRATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_OPTICAL_STABILIZATION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_ROTATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_POSE_TRANSLATION;
+    field @Deprecated @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> LENS_RADIAL_DISTORTION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> LENS_STATE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.String> LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> NOISE_REDUCTION_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> REPROCESS_EFFECTIVE_EXPOSURE_FACTOR;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Byte> REQUEST_PIPELINE_DEPTH;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Rect> SCALER_CROP_REGION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SCALER_ROTATE_AND_CROP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<float[]> SENSOR_DYNAMIC_BLACK_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_DYNAMIC_WHITE_LEVEL;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_EXPOSURE_TIME;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_FRAME_DURATION;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> SENSOR_GREEN_SPLIT;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Rational[]> SENSOR_NEUTRAL_COLOR_POINT;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.util.Pair<java.lang.Double,java.lang.Double>[]> SENSOR_NOISE_PROFILE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_PIXEL_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> SENSOR_RAW_BINNING_FACTOR_USED;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_ROLLING_SHUTTER_SKEW;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_SENSITIVITY;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<int[]> SENSOR_TEST_PATTERN_DATA;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SENSOR_TEST_PATTERN_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Long> SENSOR_TIMESTAMP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> SHADING_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.Face[]> STATISTICS_FACES;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_FACE_DETECT_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.graphics.Point[]> STATISTICS_HOT_PIXEL_MAP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Boolean> STATISTICS_HOT_PIXEL_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.LensShadingMap> STATISTICS_LENS_SHADING_CORRECTION_MAP;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_LENS_SHADING_MAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_OIS_DATA_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.OisSample[]> STATISTICS_OIS_SAMPLES;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> STATISTICS_SCENE_FLICKER;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<android.hardware.camera2.params.TonemapCurve> TONEMAP_CURVE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Float> TONEMAP_GAMMA;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_MODE;
+    field @NonNull public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
+  }
+
+  public static final class CaptureResult.Key<T> {
+    ctor public CaptureResult.Key(@NonNull String, @NonNull Class<T>);
+    method @NonNull public String getName();
+  }
+
+  public final class DngCreator implements java.lang.AutoCloseable {
+    ctor public DngCreator(@NonNull android.hardware.camera2.CameraCharacteristics, @NonNull android.hardware.camera2.CaptureResult);
+    method public void close();
+    method @NonNull public android.hardware.camera2.DngCreator setDescription(@NonNull String);
+    method @NonNull public android.hardware.camera2.DngCreator setLocation(@NonNull android.location.Location);
+    method @NonNull public android.hardware.camera2.DngCreator setOrientation(int);
+    method @NonNull public android.hardware.camera2.DngCreator setThumbnail(@NonNull android.graphics.Bitmap);
+    method @NonNull public android.hardware.camera2.DngCreator setThumbnail(@NonNull android.media.Image);
+    method public void writeByteBuffer(@NonNull java.io.OutputStream, @NonNull android.util.Size, @NonNull java.nio.ByteBuffer, @IntRange(from=0) long) throws java.io.IOException;
+    method public void writeImage(@NonNull java.io.OutputStream, @NonNull android.media.Image) throws java.io.IOException;
+    method public void writeInputStream(@NonNull java.io.OutputStream, @NonNull android.util.Size, @NonNull java.io.InputStream, @IntRange(from=0) long) throws java.io.IOException;
+    field public static final int MAX_THUMBNAIL_DIMENSION = 256; // 0x100
+  }
+
+  public class MultiResolutionImageReader implements java.lang.AutoCloseable {
+    ctor public MultiResolutionImageReader(@NonNull java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo>, int, @IntRange(from=1) int);
+    method public void close();
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public android.hardware.camera2.params.MultiResolutionStreamInfo getStreamInfoForImageReader(@NonNull android.media.ImageReader);
+    method @NonNull public android.view.Surface getSurface();
+    method public void setOnImageAvailableListener(@Nullable android.media.ImageReader.OnImageAvailableListener, @Nullable java.util.concurrent.Executor);
+  }
+
+  public final class TotalCaptureResult extends android.hardware.camera2.CaptureResult {
+    method @NonNull public java.util.List<android.hardware.camera2.CaptureResult> getPartialResults();
+    method @Deprecated public java.util.Map<java.lang.String,android.hardware.camera2.CaptureResult> getPhysicalCameraResults();
+    method @NonNull public java.util.Map<java.lang.String,android.hardware.camera2.TotalCaptureResult> getPhysicalCameraTotalResults();
+  }
+
+}
+
+package android.hardware.camera2.params {
+
+  public final class BlackLevelPattern {
+    method public void copyTo(int[], int);
+    method public int getOffsetForIndex(int, int);
+    field public static final int COUNT = 4; // 0x4
+  }
+
+  public final class Capability {
+    method @NonNull public android.util.Size getMaxStreamingSize();
+    method public int getMode();
+    method @NonNull public android.util.Range<java.lang.Float> getZoomRatioRange();
+  }
+
+  public final class ColorSpaceTransform {
+    ctor public ColorSpaceTransform(android.util.Rational[]);
+    ctor public ColorSpaceTransform(int[]);
+    method public void copyElements(android.util.Rational[], int);
+    method public void copyElements(int[], int);
+    method public android.util.Rational getElement(int, int);
+  }
+
+  public final class DeviceStateSensorOrientationMap {
+    method public int getSensorOrientation(long);
+    field public static final long FOLDED = 4L; // 0x4L
+    field public static final long NORMAL = 0L; // 0x0L
+  }
+
+  public final class ExtensionSessionConfiguration {
+    ctor public ExtensionSessionConfiguration(int, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraExtensionSession.StateCallback);
+    method @NonNull public java.util.concurrent.Executor getExecutor();
+    method public int getExtension();
+    method @NonNull public java.util.List<android.hardware.camera2.params.OutputConfiguration> getOutputConfigurations();
+    method @NonNull public android.hardware.camera2.CameraExtensionSession.StateCallback getStateCallback();
+  }
+
+  public final class Face {
+    method public android.graphics.Rect getBounds();
+    method public int getId();
+    method public android.graphics.Point getLeftEyePosition();
+    method public android.graphics.Point getMouthPosition();
+    method public android.graphics.Point getRightEyePosition();
+    method public int getScore();
+    field public static final int ID_UNSUPPORTED = -1; // 0xffffffff
+    field public static final int SCORE_MAX = 100; // 0x64
+    field public static final int SCORE_MIN = 1; // 0x1
+  }
+
+  public final class InputConfiguration {
+    ctor public InputConfiguration(int, int, int);
+    ctor public InputConfiguration(@NonNull java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo>, int);
+    method public int getFormat();
+    method public int getHeight();
+    method public int getWidth();
+    method public boolean isMultiResolution();
+  }
+
+  public final class LensShadingMap {
+    method public void copyGainFactors(float[], int);
+    method public int getColumnCount();
+    method public float getGainFactor(int, int, int);
+    method public int getGainFactorCount();
+    method public android.hardware.camera2.params.RggbChannelVector getGainFactorVector(int, int);
+    method public int getRowCount();
+    field public static final float MINIMUM_GAIN_FACTOR = 1.0f;
+  }
+
+  public final class MandatoryStreamCombination {
+    method @NonNull public CharSequence getDescription();
+    method @NonNull public java.util.List<android.hardware.camera2.params.MandatoryStreamCombination.MandatoryStreamInformation> getStreamsInformation();
+    method public boolean isReprocessable();
+  }
+
+  public static final class MandatoryStreamCombination.MandatoryStreamInformation {
+    method @NonNull public java.util.List<android.util.Size> getAvailableSizes();
+    method public int getFormat();
+    method public boolean isInput();
+    method public boolean isMaximumSize();
+    method public boolean isUltraHighResolution();
+  }
+
+  public final class MeteringRectangle {
+    ctor public MeteringRectangle(int, int, int, int, int);
+    ctor public MeteringRectangle(android.graphics.Point, android.util.Size, int);
+    ctor public MeteringRectangle(android.graphics.Rect, int);
+    method public boolean equals(android.hardware.camera2.params.MeteringRectangle);
+    method public int getHeight();
+    method public int getMeteringWeight();
+    method public android.graphics.Rect getRect();
+    method public android.util.Size getSize();
+    method public android.graphics.Point getUpperLeftPoint();
+    method public int getWidth();
+    method public int getX();
+    method public int getY();
+    field public static final int METERING_WEIGHT_DONT_CARE = 0; // 0x0
+    field public static final int METERING_WEIGHT_MAX = 1000; // 0x3e8
+    field public static final int METERING_WEIGHT_MIN = 0; // 0x0
+  }
+
+  public final class MultiResolutionStreamConfigurationMap {
+    method @NonNull public int[] getInputFormats();
+    method @NonNull public java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo> getInputInfo(int);
+    method @NonNull public int[] getOutputFormats();
+    method @NonNull public java.util.Collection<android.hardware.camera2.params.MultiResolutionStreamInfo> getOutputInfo(int);
+  }
+
+  public class MultiResolutionStreamInfo {
+    ctor public MultiResolutionStreamInfo(@IntRange(from=1) int, @IntRange(from=1) int, @NonNull String);
+    method @IntRange(from=1) public int getHeight();
+    method @NonNull public String getPhysicalCameraId();
+    method @IntRange(from=1) public int getWidth();
+  }
+
+  public final class OisSample {
+    ctor public OisSample(long, float, float);
+    method public long getTimestamp();
+    method public float getXshift();
+    method public float getYshift();
+  }
+
+  public final class OutputConfiguration implements android.os.Parcelable {
+    ctor public OutputConfiguration(@NonNull android.view.Surface);
+    ctor public OutputConfiguration(int, @NonNull android.view.Surface);
+    ctor public OutputConfiguration(@NonNull android.util.Size, @NonNull Class<T>);
+    method public void addSensorPixelModeUsed(int);
+    method public void addSurface(@NonNull android.view.Surface);
+    method @NonNull public static java.util.Collection<android.hardware.camera2.params.OutputConfiguration> createInstancesForMultiResolutionOutput(@NonNull android.hardware.camera2.MultiResolutionImageReader);
+    method public int describeContents();
+    method public void enableSurfaceSharing();
+    method public int getMaxSharedSurfaceCount();
+    method @Nullable public android.view.Surface getSurface();
+    method public int getSurfaceGroupId();
+    method @NonNull public java.util.List<android.view.Surface> getSurfaces();
+    method public void removeSensorPixelModeUsed(int);
+    method public void removeSurface(@NonNull android.view.Surface);
+    method public void setPhysicalCameraId(@Nullable String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.params.OutputConfiguration> CREATOR;
+    field public static final int SURFACE_GROUP_ID_NONE = -1; // 0xffffffff
+  }
+
+  public final class RecommendedStreamConfigurationMap {
+    method @Nullable public java.util.Set<android.util.Size> getHighResolutionOutputSizes(int);
+    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getHighSpeedVideoFpsRanges();
+    method @Nullable public java.util.Set<android.util.Range<java.lang.Integer>> getHighSpeedVideoFpsRangesFor(@NonNull android.util.Size);
+    method @Nullable public java.util.Set<android.util.Size> getHighSpeedVideoSizes();
+    method @Nullable public java.util.Set<android.util.Size> getHighSpeedVideoSizesFor(@NonNull android.util.Range<java.lang.Integer>);
+    method @Nullable public java.util.Set<java.lang.Integer> getInputFormats();
+    method @Nullable public java.util.Set<android.util.Size> getInputSizes(int);
+    method @NonNull public java.util.Set<java.lang.Integer> getOutputFormats();
+    method @IntRange(from=0) public long getOutputMinFrameDuration(int, @NonNull android.util.Size);
+    method @IntRange(from=0) public <T> long getOutputMinFrameDuration(@NonNull Class<T>, @NonNull android.util.Size);
+    method @Nullable public java.util.Set<android.util.Size> getOutputSizes(int);
+    method @Nullable public <T> java.util.Set<android.util.Size> getOutputSizes(@NonNull Class<T>);
+    method @IntRange(from=0) public long getOutputStallDuration(int, @NonNull android.util.Size);
+    method @IntRange(from=0) public <T> long getOutputStallDuration(@NonNull Class<T>, @NonNull android.util.Size);
+    method public int getRecommendedUseCase();
+    method @Nullable public java.util.Set<java.lang.Integer> getValidOutputFormatsForInput(int);
+    method public boolean isOutputSupportedFor(int);
+    method public boolean isOutputSupportedFor(@NonNull android.view.Surface);
+    field public static final int USECASE_LOW_LATENCY_SNAPSHOT = 6; // 0x6
+    field public static final int USECASE_PREVIEW = 0; // 0x0
+    field public static final int USECASE_RAW = 5; // 0x5
+    field public static final int USECASE_RECORD = 1; // 0x1
+    field public static final int USECASE_SNAPSHOT = 3; // 0x3
+    field public static final int USECASE_VIDEO_SNAPSHOT = 2; // 0x2
+    field public static final int USECASE_ZSL = 4; // 0x4
+  }
+
+  public final class RggbChannelVector {
+    ctor public RggbChannelVector(float, float, float, float);
+    method public void copyTo(float[], int);
+    method public float getBlue();
+    method public float getComponent(int);
+    method public float getGreenEven();
+    method public float getGreenOdd();
+    method public float getRed();
+    field public static final int BLUE = 3; // 0x3
+    field public static final int COUNT = 4; // 0x4
+    field public static final int GREEN_EVEN = 1; // 0x1
+    field public static final int GREEN_ODD = 2; // 0x2
+    field public static final int RED = 0; // 0x0
+  }
+
+  public final class SessionConfiguration implements android.os.Parcelable {
+    ctor public SessionConfiguration(int, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback);
+    method public int describeContents();
+    method public java.util.concurrent.Executor getExecutor();
+    method public android.hardware.camera2.params.InputConfiguration getInputConfiguration();
+    method public java.util.List<android.hardware.camera2.params.OutputConfiguration> getOutputConfigurations();
+    method public android.hardware.camera2.CaptureRequest getSessionParameters();
+    method public int getSessionType();
+    method public android.hardware.camera2.CameraCaptureSession.StateCallback getStateCallback();
+    method public void setInputConfiguration(@NonNull android.hardware.camera2.params.InputConfiguration);
+    method public void setSessionParameters(android.hardware.camera2.CaptureRequest);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.camera2.params.SessionConfiguration> CREATOR;
+    field public static final int SESSION_HIGH_SPEED = 1; // 0x1
+    field public static final int SESSION_REGULAR = 0; // 0x0
+  }
+
+  public final class StreamConfigurationMap {
+    method public android.util.Size[] getHighResolutionOutputSizes(int);
+    method public android.util.Range<java.lang.Integer>[] getHighSpeedVideoFpsRanges();
+    method public android.util.Range<java.lang.Integer>[] getHighSpeedVideoFpsRangesFor(android.util.Size);
+    method public android.util.Size[] getHighSpeedVideoSizes();
+    method public android.util.Size[] getHighSpeedVideoSizesFor(android.util.Range<java.lang.Integer>);
+    method public int[] getInputFormats();
+    method public android.util.Size[] getInputSizes(int);
+    method public int[] getOutputFormats();
+    method public long getOutputMinFrameDuration(int, android.util.Size);
+    method public <T> long getOutputMinFrameDuration(Class<T>, android.util.Size);
+    method public <T> android.util.Size[] getOutputSizes(Class<T>);
+    method public android.util.Size[] getOutputSizes(int);
+    method public long getOutputStallDuration(int, android.util.Size);
+    method public <T> long getOutputStallDuration(Class<T>, android.util.Size);
+    method public int[] getValidOutputFormatsForInput(int);
+    method public boolean isOutputSupportedFor(int);
+    method public static <T> boolean isOutputSupportedFor(Class<T>);
+    method public boolean isOutputSupportedFor(android.view.Surface);
+  }
+
+  public final class TonemapCurve {
+    ctor public TonemapCurve(float[], float[], float[]);
+    method public void copyColorCurve(int, float[], int);
+    method public android.graphics.PointF getPoint(int, int);
+    method public int getPointCount(int);
+    field public static final int CHANNEL_BLUE = 2; // 0x2
+    field public static final int CHANNEL_GREEN = 1; // 0x1
+    field public static final int CHANNEL_RED = 0; // 0x0
+    field public static final float LEVEL_BLACK = 0.0f;
+    field public static final float LEVEL_WHITE = 1.0f;
+    field public static final int POINT_SIZE = 2; // 0x2
+  }
+
+}
+
+package android.hardware.display {
+
+  public final class DeviceProductInfo implements android.os.Parcelable {
+    ctor public DeviceProductInfo(@Nullable String, @NonNull String, @NonNull String, @IntRange(from=1990) int, int);
+    method public int describeContents();
+    method public int getConnectionToSinkType();
+    method @IntRange(from=0xffffffff, to=53) public int getManufactureWeek();
+    method @IntRange(from=0xffffffff) public int getManufactureYear();
+    method @NonNull public String getManufacturerPnpId();
+    method @IntRange(from=0xffffffff) public int getModelYear();
+    method @Nullable public String getName();
+    method @NonNull public String getProductId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONNECTION_TO_SINK_BUILT_IN = 1; // 0x1
+    field public static final int CONNECTION_TO_SINK_DIRECT = 2; // 0x2
+    field public static final int CONNECTION_TO_SINK_TRANSITIVE = 3; // 0x3
+    field public static final int CONNECTION_TO_SINK_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.DeviceProductInfo> CREATOR;
+  }
+
+  public final class DisplayManager {
+    method public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull String, int, int, int, @Nullable android.view.Surface, int);
+    method public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull String, int, int, int, @Nullable android.view.Surface, int, @Nullable android.hardware.display.VirtualDisplay.Callback, @Nullable android.os.Handler);
+    method public android.view.Display getDisplay(int);
+    method public android.view.Display[] getDisplays();
+    method public android.view.Display[] getDisplays(String);
+    method public int getMatchContentFrameRateUserPreference();
+    method public void registerDisplayListener(android.hardware.display.DisplayManager.DisplayListener, android.os.Handler);
+    method public void unregisterDisplayListener(android.hardware.display.DisplayManager.DisplayListener);
+    field public static final String DISPLAY_CATEGORY_PRESENTATION = "android.hardware.display.category.PRESENTATION";
+    field public static final int MATCH_CONTENT_FRAMERATE_ALWAYS = 2; // 0x2
+    field public static final int MATCH_CONTENT_FRAMERATE_NEVER = 0; // 0x0
+    field public static final int MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY = 1; // 0x1
+    field public static final int MATCH_CONTENT_FRAMERATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR = 16; // 0x10
+    field public static final int VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY = 8; // 0x8
+    field public static final int VIRTUAL_DISPLAY_FLAG_PRESENTATION = 2; // 0x2
+    field public static final int VIRTUAL_DISPLAY_FLAG_PUBLIC = 1; // 0x1
+    field public static final int VIRTUAL_DISPLAY_FLAG_SECURE = 4; // 0x4
+  }
+
+  public static interface DisplayManager.DisplayListener {
+    method public void onDisplayAdded(int);
+    method public void onDisplayChanged(int);
+    method public void onDisplayRemoved(int);
+  }
+
+  public final class VirtualDisplay {
+    method public android.view.Display getDisplay();
+    method public android.view.Surface getSurface();
+    method public void release();
+    method public void resize(int, int, int);
+    method public void setSurface(android.view.Surface);
+  }
+
+  public abstract static class VirtualDisplay.Callback {
+    ctor public VirtualDisplay.Callback();
+    method public void onPaused();
+    method public void onResumed();
+    method public void onStopped();
+  }
+
+}
+
+package android.hardware.fingerprint {
+
+  @Deprecated public class FingerprintManager {
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.USE_BIOMETRIC, android.Manifest.permission.USE_FINGERPRINT}) public void authenticate(@Nullable android.hardware.fingerprint.FingerprintManager.CryptoObject, @Nullable android.os.CancellationSignal, int, @NonNull android.hardware.fingerprint.FingerprintManager.AuthenticationCallback, @Nullable android.os.Handler);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean hasEnrolledFingerprints();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.USE_FINGERPRINT) public boolean isHardwareDetected();
+    field public static final int FINGERPRINT_ACQUIRED_GOOD = 0; // 0x0
+    field public static final int FINGERPRINT_ACQUIRED_IMAGER_DIRTY = 3; // 0x3
+    field public static final int FINGERPRINT_ACQUIRED_INSUFFICIENT = 2; // 0x2
+    field public static final int FINGERPRINT_ACQUIRED_PARTIAL = 1; // 0x1
+    field public static final int FINGERPRINT_ACQUIRED_TOO_FAST = 5; // 0x5
+    field public static final int FINGERPRINT_ACQUIRED_TOO_SLOW = 4; // 0x4
+    field public static final int FINGERPRINT_ERROR_CANCELED = 5; // 0x5
+    field public static final int FINGERPRINT_ERROR_HW_NOT_PRESENT = 12; // 0xc
+    field public static final int FINGERPRINT_ERROR_HW_UNAVAILABLE = 1; // 0x1
+    field public static final int FINGERPRINT_ERROR_LOCKOUT = 7; // 0x7
+    field public static final int FINGERPRINT_ERROR_LOCKOUT_PERMANENT = 9; // 0x9
+    field public static final int FINGERPRINT_ERROR_NO_FINGERPRINTS = 11; // 0xb
+    field public static final int FINGERPRINT_ERROR_NO_SPACE = 4; // 0x4
+    field public static final int FINGERPRINT_ERROR_TIMEOUT = 3; // 0x3
+    field public static final int FINGERPRINT_ERROR_UNABLE_TO_PROCESS = 2; // 0x2
+    field public static final int FINGERPRINT_ERROR_USER_CANCELED = 10; // 0xa
+    field public static final int FINGERPRINT_ERROR_VENDOR = 8; // 0x8
+  }
+
+  @Deprecated public abstract static class FingerprintManager.AuthenticationCallback {
+    ctor @Deprecated public FingerprintManager.AuthenticationCallback();
+    method @Deprecated public void onAuthenticationError(int, CharSequence);
+    method @Deprecated public void onAuthenticationFailed();
+    method @Deprecated public void onAuthenticationHelp(int, CharSequence);
+    method @Deprecated public void onAuthenticationSucceeded(android.hardware.fingerprint.FingerprintManager.AuthenticationResult);
+  }
+
+  @Deprecated public static class FingerprintManager.AuthenticationResult {
+    method @Deprecated public android.hardware.fingerprint.FingerprintManager.CryptoObject getCryptoObject();
+  }
+
+  @Deprecated public static final class FingerprintManager.CryptoObject {
+    ctor @Deprecated public FingerprintManager.CryptoObject(@NonNull java.security.Signature);
+    ctor @Deprecated public FingerprintManager.CryptoObject(@NonNull javax.crypto.Cipher);
+    ctor @Deprecated public FingerprintManager.CryptoObject(@NonNull javax.crypto.Mac);
+    method @Deprecated public javax.crypto.Cipher getCipher();
+    method @Deprecated public javax.crypto.Mac getMac();
+    method @Deprecated public java.security.Signature getSignature();
+  }
+
+}
+
+package android.hardware.input {
+
+  public final class InputManager {
+    method public android.view.InputDevice getInputDevice(int);
+    method public int[] getInputDeviceIds();
+    method @FloatRange(from=0, to=1) public float getMaximumObscuringOpacityForTouch();
+    method public void registerInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener, android.os.Handler);
+    method public void unregisterInputDeviceListener(android.hardware.input.InputManager.InputDeviceListener);
+    method @Nullable public android.view.VerifiedInputEvent verifyInputEvent(@NonNull android.view.InputEvent);
+    field public static final String ACTION_QUERY_KEYBOARD_LAYOUTS = "android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS";
+    field public static final String META_DATA_KEYBOARD_LAYOUTS = "android.hardware.input.metadata.KEYBOARD_LAYOUTS";
+  }
+
+  public static interface InputManager.InputDeviceListener {
+    method public void onInputDeviceAdded(int);
+    method public void onInputDeviceChanged(int);
+    method public void onInputDeviceRemoved(int);
+  }
+
+}
+
+package android.hardware.lights {
+
+  public final class Light implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getId();
+    method @NonNull public String getName();
+    method public int getOrdinal();
+    method public int getType();
+    method public boolean hasBrightnessControl();
+    method public boolean hasRgbControl();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.Light> CREATOR;
+    field public static final int LIGHT_CAPABILITY_BRIGHTNESS = 1; // 0x1
+    field public static final int LIGHT_CAPABILITY_RGB = 0; // 0x0
+    field public static final int LIGHT_TYPE_INPUT = 10001; // 0x2711
+    field public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
+    field public static final int LIGHT_TYPE_PLAYER_ID = 10002; // 0x2712
+  }
+
+  public final class LightState implements android.os.Parcelable {
+    method public int describeContents();
+    method @ColorInt public int getColor();
+    method public int getPlayerId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.lights.LightState> CREATOR;
+  }
+
+  public static final class LightState.Builder {
+    ctor public LightState.Builder();
+    method @NonNull public android.hardware.lights.LightState build();
+    method @NonNull public android.hardware.lights.LightState.Builder setColor(@ColorInt int);
+    method @NonNull public android.hardware.lights.LightState.Builder setPlayerId(int);
+  }
+
+  public abstract class LightsManager {
+    method @NonNull public abstract android.hardware.lights.LightState getLightState(@NonNull android.hardware.lights.Light);
+    method @NonNull public abstract java.util.List<android.hardware.lights.Light> getLights();
+    method @NonNull public abstract android.hardware.lights.LightsManager.LightsSession openSession();
+  }
+
+  public abstract static class LightsManager.LightsSession implements java.lang.AutoCloseable {
+    method public abstract void close();
+    method public abstract void requestLights(@NonNull android.hardware.lights.LightsRequest);
+  }
+
+  public final class LightsRequest {
+    method @NonNull public java.util.List<android.hardware.lights.LightState> getLightStates();
+    method @NonNull public java.util.List<java.lang.Integer> getLights();
+    method @NonNull public java.util.Map<android.hardware.lights.Light,android.hardware.lights.LightState> getLightsAndStates();
+  }
+
+  public static final class LightsRequest.Builder {
+    ctor public LightsRequest.Builder();
+    method @NonNull public android.hardware.lights.LightsRequest.Builder addLight(@NonNull android.hardware.lights.Light, @NonNull android.hardware.lights.LightState);
+    method @NonNull public android.hardware.lights.LightsRequest build();
+    method @NonNull public android.hardware.lights.LightsRequest.Builder clearLight(@NonNull android.hardware.lights.Light);
+  }
+
+}
+
+package android.hardware.usb {
+
+  public class UsbAccessory implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getDescription();
+    method @NonNull public String getManufacturer();
+    method @NonNull public String getModel();
+    method @Nullable public String getSerial();
+    method @Nullable public String getUri();
+    method @Nullable public String getVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbAccessory> CREATOR;
+  }
+
+  public class UsbConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getId();
+    method @NonNull public android.hardware.usb.UsbInterface getInterface(int);
+    method public int getInterfaceCount();
+    method public int getMaxPower();
+    method @Nullable public String getName();
+    method public boolean isRemoteWakeup();
+    method public boolean isSelfPowered();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbConfiguration> CREATOR;
+  }
+
+  public final class UsbConstants {
+    ctor public UsbConstants();
+    field public static final int USB_CLASS_APP_SPEC = 254; // 0xfe
+    field public static final int USB_CLASS_AUDIO = 1; // 0x1
+    field public static final int USB_CLASS_CDC_DATA = 10; // 0xa
+    field public static final int USB_CLASS_COMM = 2; // 0x2
+    field public static final int USB_CLASS_CONTENT_SEC = 13; // 0xd
+    field public static final int USB_CLASS_CSCID = 11; // 0xb
+    field public static final int USB_CLASS_HID = 3; // 0x3
+    field public static final int USB_CLASS_HUB = 9; // 0x9
+    field public static final int USB_CLASS_MASS_STORAGE = 8; // 0x8
+    field public static final int USB_CLASS_MISC = 239; // 0xef
+    field public static final int USB_CLASS_PER_INTERFACE = 0; // 0x0
+    field public static final int USB_CLASS_PHYSICA = 5; // 0x5
+    field public static final int USB_CLASS_PRINTER = 7; // 0x7
+    field public static final int USB_CLASS_STILL_IMAGE = 6; // 0x6
+    field public static final int USB_CLASS_VENDOR_SPEC = 255; // 0xff
+    field public static final int USB_CLASS_VIDEO = 14; // 0xe
+    field public static final int USB_CLASS_WIRELESS_CONTROLLER = 224; // 0xe0
+    field public static final int USB_DIR_IN = 128; // 0x80
+    field public static final int USB_DIR_OUT = 0; // 0x0
+    field public static final int USB_ENDPOINT_DIR_MASK = 128; // 0x80
+    field public static final int USB_ENDPOINT_NUMBER_MASK = 15; // 0xf
+    field public static final int USB_ENDPOINT_XFERTYPE_MASK = 3; // 0x3
+    field public static final int USB_ENDPOINT_XFER_BULK = 2; // 0x2
+    field public static final int USB_ENDPOINT_XFER_CONTROL = 0; // 0x0
+    field public static final int USB_ENDPOINT_XFER_INT = 3; // 0x3
+    field public static final int USB_ENDPOINT_XFER_ISOC = 1; // 0x1
+    field public static final int USB_INTERFACE_SUBCLASS_BOOT = 1; // 0x1
+    field public static final int USB_SUBCLASS_VENDOR_SPEC = 255; // 0xff
+    field public static final int USB_TYPE_CLASS = 32; // 0x20
+    field public static final int USB_TYPE_MASK = 96; // 0x60
+    field public static final int USB_TYPE_RESERVED = 96; // 0x60
+    field public static final int USB_TYPE_STANDARD = 0; // 0x0
+    field public static final int USB_TYPE_VENDOR = 64; // 0x40
+  }
+
+  public class UsbDevice implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.hardware.usb.UsbConfiguration getConfiguration(int);
+    method public int getConfigurationCount();
+    method public int getDeviceClass();
+    method public int getDeviceId();
+    method public static int getDeviceId(String);
+    method @NonNull public String getDeviceName();
+    method public static String getDeviceName(int);
+    method public int getDeviceProtocol();
+    method public int getDeviceSubclass();
+    method @NonNull public android.hardware.usb.UsbInterface getInterface(int);
+    method public int getInterfaceCount();
+    method @Nullable public String getManufacturerName();
+    method public int getProductId();
+    method @Nullable public String getProductName();
+    method @Nullable public String getSerialNumber();
+    method public int getVendorId();
+    method @NonNull public String getVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbDevice> CREATOR;
+  }
+
+  public class UsbDeviceConnection {
+    method public int bulkTransfer(android.hardware.usb.UsbEndpoint, byte[], int, int);
+    method public int bulkTransfer(android.hardware.usb.UsbEndpoint, byte[], int, int, int);
+    method public boolean claimInterface(android.hardware.usb.UsbInterface, boolean);
+    method public void close();
+    method public int controlTransfer(int, int, int, int, byte[], int, int);
+    method public int controlTransfer(int, int, int, int, byte[], int, int, int);
+    method public int getFileDescriptor();
+    method public byte[] getRawDescriptors();
+    method public String getSerial();
+    method public boolean releaseInterface(android.hardware.usb.UsbInterface);
+    method public android.hardware.usb.UsbRequest requestWait();
+    method public android.hardware.usb.UsbRequest requestWait(long) throws java.util.concurrent.TimeoutException;
+    method public boolean setConfiguration(android.hardware.usb.UsbConfiguration);
+    method public boolean setInterface(android.hardware.usb.UsbInterface);
+  }
+
+  public class UsbEndpoint implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAddress();
+    method public int getAttributes();
+    method public int getDirection();
+    method public int getEndpointNumber();
+    method public int getInterval();
+    method public int getMaxPacketSize();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbEndpoint> CREATOR;
+  }
+
+  public class UsbInterface implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAlternateSetting();
+    method public android.hardware.usb.UsbEndpoint getEndpoint(int);
+    method public int getEndpointCount();
+    method public int getId();
+    method public int getInterfaceClass();
+    method public int getInterfaceProtocol();
+    method public int getInterfaceSubclass();
+    method @Nullable public String getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbInterface> CREATOR;
+  }
+
+  public class UsbManager {
+    method public android.hardware.usb.UsbAccessory[] getAccessoryList();
+    method public java.util.HashMap<java.lang.String,android.hardware.usb.UsbDevice> getDeviceList();
+    method public boolean hasPermission(android.hardware.usb.UsbDevice);
+    method public boolean hasPermission(android.hardware.usb.UsbAccessory);
+    method public android.os.ParcelFileDescriptor openAccessory(android.hardware.usb.UsbAccessory);
+    method public android.hardware.usb.UsbDeviceConnection openDevice(android.hardware.usb.UsbDevice);
+    method public void requestPermission(android.hardware.usb.UsbDevice, android.app.PendingIntent);
+    method public void requestPermission(android.hardware.usb.UsbAccessory, android.app.PendingIntent);
+    field public static final String ACTION_USB_ACCESSORY_ATTACHED = "android.hardware.usb.action.USB_ACCESSORY_ATTACHED";
+    field public static final String ACTION_USB_ACCESSORY_DETACHED = "android.hardware.usb.action.USB_ACCESSORY_DETACHED";
+    field public static final String ACTION_USB_DEVICE_ATTACHED = "android.hardware.usb.action.USB_DEVICE_ATTACHED";
+    field public static final String ACTION_USB_DEVICE_DETACHED = "android.hardware.usb.action.USB_DEVICE_DETACHED";
+    field public static final String EXTRA_ACCESSORY = "accessory";
+    field public static final String EXTRA_DEVICE = "device";
+    field public static final String EXTRA_PERMISSION_GRANTED = "permission";
+  }
+
+  public class UsbRequest {
+    ctor public UsbRequest();
+    method public boolean cancel();
+    method public void close();
+    method public Object getClientData();
+    method public android.hardware.usb.UsbEndpoint getEndpoint();
+    method public boolean initialize(android.hardware.usb.UsbDeviceConnection, android.hardware.usb.UsbEndpoint);
+    method @Deprecated public boolean queue(java.nio.ByteBuffer, int);
+    method public boolean queue(@Nullable java.nio.ByteBuffer);
+    method public void setClientData(Object);
+  }
+
+}
+
+package android.icu.lang {
+
+  public final class UCharacter implements android.icu.lang.UCharacterEnums.ECharacterCategory android.icu.lang.UCharacterEnums.ECharacterDirection {
+    method public static int charCount(int);
+    method public static int codePointAt(CharSequence, int);
+    method public static int codePointAt(char[], int);
+    method public static int codePointAt(char[], int, int);
+    method public static int codePointBefore(CharSequence, int);
+    method public static int codePointBefore(char[], int);
+    method public static int codePointBefore(char[], int, int);
+    method public static int codePointCount(CharSequence, int, int);
+    method public static int codePointCount(char[], int, int);
+    method public static int digit(int, int);
+    method public static int digit(int);
+    method public static int foldCase(int, boolean);
+    method public static String foldCase(String, boolean);
+    method public static int foldCase(int, int);
+    method public static String foldCase(String, int);
+    method public static char forDigit(int, int);
+    method public static android.icu.util.VersionInfo getAge(int);
+    method public static int getBidiPairedBracket(int);
+    method public static int getCharFromExtendedName(String);
+    method public static int getCharFromName(String);
+    method public static int getCharFromNameAlias(String);
+    method public static int getCodePoint(char, char);
+    method public static int getCodePoint(char);
+    method public static int getCombiningClass(int);
+    method public static int getDirection(int);
+    method public static byte getDirectionality(int);
+    method public static String getExtendedName(int);
+    method public static android.icu.util.ValueIterator getExtendedNameIterator();
+    method public static int getHanNumericValue(int);
+    method public static int getIntPropertyMaxValue(int);
+    method public static int getIntPropertyMinValue(int);
+    method public static int getIntPropertyValue(int, int);
+    method public static int getMirror(int);
+    method public static String getName(int);
+    method public static String getName(String, String);
+    method public static String getNameAlias(int);
+    method public static android.icu.util.ValueIterator getNameIterator();
+    method public static int getNumericValue(int);
+    method public static int getPropertyEnum(CharSequence);
+    method public static String getPropertyName(int, int);
+    method public static int getPropertyValueEnum(int, CharSequence);
+    method public static String getPropertyValueName(int, int, int);
+    method public static int getType(int);
+    method public static android.icu.util.RangeValueIterator getTypeIterator();
+    method public static double getUnicodeNumericValue(int);
+    method public static android.icu.util.VersionInfo getUnicodeVersion();
+    method public static boolean hasBinaryProperty(int, int);
+    method public static boolean isBMP(int);
+    method public static boolean isBaseForm(int);
+    method public static boolean isDefined(int);
+    method public static boolean isDigit(int);
+    method public static boolean isHighSurrogate(char);
+    method public static boolean isISOControl(int);
+    method public static boolean isIdentifierIgnorable(int);
+    method public static boolean isJavaIdentifierPart(int);
+    method public static boolean isJavaIdentifierStart(int);
+    method public static boolean isLegal(int);
+    method public static boolean isLegal(String);
+    method public static boolean isLetter(int);
+    method public static boolean isLetterOrDigit(int);
+    method public static boolean isLowSurrogate(char);
+    method public static boolean isLowerCase(int);
+    method public static boolean isMirrored(int);
+    method public static boolean isPrintable(int);
+    method public static boolean isSpaceChar(int);
+    method public static boolean isSupplementary(int);
+    method public static boolean isSupplementaryCodePoint(int);
+    method public static boolean isSurrogatePair(char, char);
+    method public static boolean isTitleCase(int);
+    method public static boolean isUAlphabetic(int);
+    method public static boolean isULowercase(int);
+    method public static boolean isUUppercase(int);
+    method public static boolean isUWhiteSpace(int);
+    method public static boolean isUnicodeIdentifierPart(int);
+    method public static boolean isUnicodeIdentifierStart(int);
+    method public static boolean isUpperCase(int);
+    method public static boolean isValidCodePoint(int);
+    method public static boolean isWhitespace(int);
+    method public static int offsetByCodePoints(CharSequence, int, int);
+    method public static int offsetByCodePoints(char[], int, int, int, int);
+    method public static int toChars(int, char[], int);
+    method public static char[] toChars(int);
+    method public static int toCodePoint(char, char);
+    method public static int toLowerCase(int);
+    method public static String toLowerCase(String);
+    method public static String toLowerCase(java.util.Locale, String);
+    method public static String toLowerCase(android.icu.util.ULocale, String);
+    method public static String toString(int);
+    method public static int toTitleCase(int);
+    method public static String toTitleCase(String, android.icu.text.BreakIterator);
+    method public static String toTitleCase(java.util.Locale, String, android.icu.text.BreakIterator);
+    method public static String toTitleCase(android.icu.util.ULocale, String, android.icu.text.BreakIterator);
+    method public static String toTitleCase(android.icu.util.ULocale, String, android.icu.text.BreakIterator, int);
+    method public static String toTitleCase(java.util.Locale, String, android.icu.text.BreakIterator, int);
+    method public static int toUpperCase(int);
+    method public static String toUpperCase(String);
+    method public static String toUpperCase(java.util.Locale, String);
+    method public static String toUpperCase(android.icu.util.ULocale, String);
+    field public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+    field public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+    field public static final int MAX_CODE_POINT = 1114111; // 0x10ffff
+    field public static final char MAX_HIGH_SURROGATE = 56319; // 0xdbff '\udbff'
+    field public static final char MAX_LOW_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final int MAX_RADIX = 36; // 0x24
+    field public static final char MAX_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final int MAX_VALUE = 1114111; // 0x10ffff
+    field public static final int MIN_CODE_POINT = 0; // 0x0
+    field public static final char MIN_HIGH_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final char MIN_LOW_SURROGATE = 56320; // 0xdc00 '\udc00'
+    field public static final int MIN_RADIX = 2; // 0x2
+    field public static final int MIN_SUPPLEMENTARY_CODE_POINT = 65536; // 0x10000
+    field public static final char MIN_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final int MIN_VALUE = 0; // 0x0
+    field public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+    field public static final int REPLACEMENT_CHAR = 65533; // 0xfffd
+    field public static final int SUPPLEMENTARY_MIN_VALUE = 65536; // 0x10000
+    field public static final int TITLECASE_NO_BREAK_ADJUSTMENT = 512; // 0x200
+    field public static final int TITLECASE_NO_LOWERCASE = 256; // 0x100
+  }
+
+  public static interface UCharacter.BidiPairedBracketType {
+    field public static final int CLOSE = 2; // 0x2
+    field public static final int NONE = 0; // 0x0
+    field public static final int OPEN = 1; // 0x1
+  }
+
+  public static interface UCharacter.DecompositionType {
+    field public static final int CANONICAL = 1; // 0x1
+    field public static final int CIRCLE = 3; // 0x3
+    field public static final int COMPAT = 2; // 0x2
+    field public static final int FINAL = 4; // 0x4
+    field public static final int FONT = 5; // 0x5
+    field public static final int FRACTION = 6; // 0x6
+    field public static final int INITIAL = 7; // 0x7
+    field public static final int ISOLATED = 8; // 0x8
+    field public static final int MEDIAL = 9; // 0x9
+    field public static final int NARROW = 10; // 0xa
+    field public static final int NOBREAK = 11; // 0xb
+    field public static final int NONE = 0; // 0x0
+    field public static final int SMALL = 12; // 0xc
+    field public static final int SQUARE = 13; // 0xd
+    field public static final int SUB = 14; // 0xe
+    field public static final int SUPER = 15; // 0xf
+    field public static final int VERTICAL = 16; // 0x10
+    field public static final int WIDE = 17; // 0x11
+  }
+
+  public static interface UCharacter.EastAsianWidth {
+    field public static final int AMBIGUOUS = 1; // 0x1
+    field public static final int FULLWIDTH = 3; // 0x3
+    field public static final int HALFWIDTH = 2; // 0x2
+    field public static final int NARROW = 4; // 0x4
+    field public static final int NEUTRAL = 0; // 0x0
+    field public static final int WIDE = 5; // 0x5
+  }
+
+  public static interface UCharacter.GraphemeClusterBreak {
+    field public static final int CONTROL = 1; // 0x1
+    field public static final int CR = 2; // 0x2
+    field public static final int EXTEND = 3; // 0x3
+    field public static final int E_BASE = 13; // 0xd
+    field public static final int E_BASE_GAZ = 14; // 0xe
+    field public static final int E_MODIFIER = 15; // 0xf
+    field public static final int GLUE_AFTER_ZWJ = 16; // 0x10
+    field public static final int L = 4; // 0x4
+    field public static final int LF = 5; // 0x5
+    field public static final int LV = 6; // 0x6
+    field public static final int LVT = 7; // 0x7
+    field public static final int OTHER = 0; // 0x0
+    field public static final int PREPEND = 11; // 0xb
+    field public static final int REGIONAL_INDICATOR = 12; // 0xc
+    field public static final int SPACING_MARK = 10; // 0xa
+    field public static final int T = 8; // 0x8
+    field public static final int V = 9; // 0x9
+    field public static final int ZWJ = 17; // 0x11
+  }
+
+  public static interface UCharacter.HangulSyllableType {
+    field public static final int LEADING_JAMO = 1; // 0x1
+    field public static final int LVT_SYLLABLE = 5; // 0x5
+    field public static final int LV_SYLLABLE = 4; // 0x4
+    field public static final int NOT_APPLICABLE = 0; // 0x0
+    field public static final int TRAILING_JAMO = 3; // 0x3
+    field public static final int VOWEL_JAMO = 2; // 0x2
+  }
+
+  public static interface UCharacter.IndicPositionalCategory {
+    field public static final int BOTTOM = 1; // 0x1
+    field public static final int BOTTOM_AND_LEFT = 2; // 0x2
+    field public static final int BOTTOM_AND_RIGHT = 3; // 0x3
+    field public static final int LEFT = 4; // 0x4
+    field public static final int LEFT_AND_RIGHT = 5; // 0x5
+    field public static final int NA = 0; // 0x0
+    field public static final int OVERSTRUCK = 6; // 0x6
+    field public static final int RIGHT = 7; // 0x7
+    field public static final int TOP = 8; // 0x8
+    field public static final int TOP_AND_BOTTOM = 9; // 0x9
+    field public static final int TOP_AND_BOTTOM_AND_LEFT = 15; // 0xf
+    field public static final int TOP_AND_BOTTOM_AND_RIGHT = 10; // 0xa
+    field public static final int TOP_AND_LEFT = 11; // 0xb
+    field public static final int TOP_AND_LEFT_AND_RIGHT = 12; // 0xc
+    field public static final int TOP_AND_RIGHT = 13; // 0xd
+    field public static final int VISUAL_ORDER_LEFT = 14; // 0xe
+  }
+
+  public static interface UCharacter.IndicSyllabicCategory {
+    field public static final int AVAGRAHA = 1; // 0x1
+    field public static final int BINDU = 2; // 0x2
+    field public static final int BRAHMI_JOINING_NUMBER = 3; // 0x3
+    field public static final int CANTILLATION_MARK = 4; // 0x4
+    field public static final int CONSONANT = 5; // 0x5
+    field public static final int CONSONANT_DEAD = 6; // 0x6
+    field public static final int CONSONANT_FINAL = 7; // 0x7
+    field public static final int CONSONANT_HEAD_LETTER = 8; // 0x8
+    field public static final int CONSONANT_INITIAL_POSTFIXED = 9; // 0x9
+    field public static final int CONSONANT_KILLER = 10; // 0xa
+    field public static final int CONSONANT_MEDIAL = 11; // 0xb
+    field public static final int CONSONANT_PLACEHOLDER = 12; // 0xc
+    field public static final int CONSONANT_PRECEDING_REPHA = 13; // 0xd
+    field public static final int CONSONANT_PREFIXED = 14; // 0xe
+    field public static final int CONSONANT_SUBJOINED = 15; // 0xf
+    field public static final int CONSONANT_SUCCEEDING_REPHA = 16; // 0x10
+    field public static final int CONSONANT_WITH_STACKER = 17; // 0x11
+    field public static final int GEMINATION_MARK = 18; // 0x12
+    field public static final int INVISIBLE_STACKER = 19; // 0x13
+    field public static final int JOINER = 20; // 0x14
+    field public static final int MODIFYING_LETTER = 21; // 0x15
+    field public static final int NON_JOINER = 22; // 0x16
+    field public static final int NUKTA = 23; // 0x17
+    field public static final int NUMBER = 24; // 0x18
+    field public static final int NUMBER_JOINER = 25; // 0x19
+    field public static final int OTHER = 0; // 0x0
+    field public static final int PURE_KILLER = 26; // 0x1a
+    field public static final int REGISTER_SHIFTER = 27; // 0x1b
+    field public static final int SYLLABLE_MODIFIER = 28; // 0x1c
+    field public static final int TONE_LETTER = 29; // 0x1d
+    field public static final int TONE_MARK = 30; // 0x1e
+    field public static final int VIRAMA = 31; // 0x1f
+    field public static final int VISARGA = 32; // 0x20
+    field public static final int VOWEL = 33; // 0x21
+    field public static final int VOWEL_DEPENDENT = 34; // 0x22
+    field public static final int VOWEL_INDEPENDENT = 35; // 0x23
+  }
+
+  public static interface UCharacter.JoiningGroup {
+    field public static final int AFRICAN_FEH = 86; // 0x56
+    field public static final int AFRICAN_NOON = 87; // 0x57
+    field public static final int AFRICAN_QAF = 88; // 0x58
+    field public static final int AIN = 1; // 0x1
+    field public static final int ALAPH = 2; // 0x2
+    field public static final int ALEF = 3; // 0x3
+    field public static final int BEH = 4; // 0x4
+    field public static final int BETH = 5; // 0x5
+    field public static final int BURUSHASKI_YEH_BARREE = 54; // 0x36
+    field public static final int DAL = 6; // 0x6
+    field public static final int DALATH_RISH = 7; // 0x7
+    field public static final int E = 8; // 0x8
+    field public static final int FARSI_YEH = 55; // 0x37
+    field public static final int FE = 51; // 0x33
+    field public static final int FEH = 9; // 0x9
+    field public static final int FINAL_SEMKATH = 10; // 0xa
+    field public static final int GAF = 11; // 0xb
+    field public static final int GAMAL = 12; // 0xc
+    field public static final int HAH = 13; // 0xd
+    field public static final int HAMZA_ON_HEH_GOAL = 14; // 0xe
+    field public static final int HANIFI_ROHINGYA_KINNA_YA = 100; // 0x64
+    field public static final int HANIFI_ROHINGYA_PA = 101; // 0x65
+    field public static final int HE = 15; // 0xf
+    field public static final int HEH = 16; // 0x10
+    field public static final int HEH_GOAL = 17; // 0x11
+    field public static final int HETH = 18; // 0x12
+    field public static final int KAF = 19; // 0x13
+    field public static final int KAPH = 20; // 0x14
+    field public static final int KHAPH = 52; // 0x34
+    field public static final int KNOTTED_HEH = 21; // 0x15
+    field public static final int LAM = 22; // 0x16
+    field public static final int LAMADH = 23; // 0x17
+    field public static final int MALAYALAM_BHA = 89; // 0x59
+    field public static final int MALAYALAM_JA = 90; // 0x5a
+    field public static final int MALAYALAM_LLA = 91; // 0x5b
+    field public static final int MALAYALAM_LLLA = 92; // 0x5c
+    field public static final int MALAYALAM_NGA = 93; // 0x5d
+    field public static final int MALAYALAM_NNA = 94; // 0x5e
+    field public static final int MALAYALAM_NNNA = 95; // 0x5f
+    field public static final int MALAYALAM_NYA = 96; // 0x60
+    field public static final int MALAYALAM_RA = 97; // 0x61
+    field public static final int MALAYALAM_SSA = 98; // 0x62
+    field public static final int MALAYALAM_TTA = 99; // 0x63
+    field public static final int MANICHAEAN_ALEPH = 58; // 0x3a
+    field public static final int MANICHAEAN_AYIN = 59; // 0x3b
+    field public static final int MANICHAEAN_BETH = 60; // 0x3c
+    field public static final int MANICHAEAN_DALETH = 61; // 0x3d
+    field public static final int MANICHAEAN_DHAMEDH = 62; // 0x3e
+    field public static final int MANICHAEAN_FIVE = 63; // 0x3f
+    field public static final int MANICHAEAN_GIMEL = 64; // 0x40
+    field public static final int MANICHAEAN_HETH = 65; // 0x41
+    field public static final int MANICHAEAN_HUNDRED = 66; // 0x42
+    field public static final int MANICHAEAN_KAPH = 67; // 0x43
+    field public static final int MANICHAEAN_LAMEDH = 68; // 0x44
+    field public static final int MANICHAEAN_MEM = 69; // 0x45
+    field public static final int MANICHAEAN_NUN = 70; // 0x46
+    field public static final int MANICHAEAN_ONE = 71; // 0x47
+    field public static final int MANICHAEAN_PE = 72; // 0x48
+    field public static final int MANICHAEAN_QOPH = 73; // 0x49
+    field public static final int MANICHAEAN_RESH = 74; // 0x4a
+    field public static final int MANICHAEAN_SADHE = 75; // 0x4b
+    field public static final int MANICHAEAN_SAMEKH = 76; // 0x4c
+    field public static final int MANICHAEAN_TAW = 77; // 0x4d
+    field public static final int MANICHAEAN_TEN = 78; // 0x4e
+    field public static final int MANICHAEAN_TETH = 79; // 0x4f
+    field public static final int MANICHAEAN_THAMEDH = 80; // 0x50
+    field public static final int MANICHAEAN_TWENTY = 81; // 0x51
+    field public static final int MANICHAEAN_WAW = 82; // 0x52
+    field public static final int MANICHAEAN_YODH = 83; // 0x53
+    field public static final int MANICHAEAN_ZAYIN = 84; // 0x54
+    field public static final int MEEM = 24; // 0x18
+    field public static final int MIM = 25; // 0x19
+    field public static final int NOON = 26; // 0x1a
+    field public static final int NO_JOINING_GROUP = 0; // 0x0
+    field public static final int NUN = 27; // 0x1b
+    field public static final int NYA = 56; // 0x38
+    field public static final int PE = 28; // 0x1c
+    field public static final int QAF = 29; // 0x1d
+    field public static final int QAPH = 30; // 0x1e
+    field public static final int REH = 31; // 0x1f
+    field public static final int REVERSED_PE = 32; // 0x20
+    field public static final int ROHINGYA_YEH = 57; // 0x39
+    field public static final int SAD = 33; // 0x21
+    field public static final int SADHE = 34; // 0x22
+    field public static final int SEEN = 35; // 0x23
+    field public static final int SEMKATH = 36; // 0x24
+    field public static final int SHIN = 37; // 0x25
+    field public static final int STRAIGHT_WAW = 85; // 0x55
+    field public static final int SWASH_KAF = 38; // 0x26
+    field public static final int SYRIAC_WAW = 39; // 0x27
+    field public static final int TAH = 40; // 0x28
+    field public static final int TAW = 41; // 0x29
+    field public static final int TEH_MARBUTA = 42; // 0x2a
+    field public static final int TEH_MARBUTA_GOAL = 14; // 0xe
+    field public static final int TETH = 43; // 0x2b
+    field public static final int WAW = 44; // 0x2c
+    field public static final int YEH = 45; // 0x2d
+    field public static final int YEH_BARREE = 46; // 0x2e
+    field public static final int YEH_WITH_TAIL = 47; // 0x2f
+    field public static final int YUDH = 48; // 0x30
+    field public static final int YUDH_HE = 49; // 0x31
+    field public static final int ZAIN = 50; // 0x32
+    field public static final int ZHAIN = 53; // 0x35
+  }
+
+  public static interface UCharacter.JoiningType {
+    field public static final int DUAL_JOINING = 2; // 0x2
+    field public static final int JOIN_CAUSING = 1; // 0x1
+    field public static final int LEFT_JOINING = 3; // 0x3
+    field public static final int NON_JOINING = 0; // 0x0
+    field public static final int RIGHT_JOINING = 4; // 0x4
+    field public static final int TRANSPARENT = 5; // 0x5
+  }
+
+  public static interface UCharacter.LineBreak {
+    field public static final int ALPHABETIC = 2; // 0x2
+    field public static final int AMBIGUOUS = 1; // 0x1
+    field public static final int BREAK_AFTER = 4; // 0x4
+    field public static final int BREAK_BEFORE = 5; // 0x5
+    field public static final int BREAK_BOTH = 3; // 0x3
+    field public static final int BREAK_SYMBOLS = 27; // 0x1b
+    field public static final int CARRIAGE_RETURN = 10; // 0xa
+    field public static final int CLOSE_PARENTHESIS = 36; // 0x24
+    field public static final int CLOSE_PUNCTUATION = 8; // 0x8
+    field public static final int COMBINING_MARK = 9; // 0x9
+    field public static final int COMPLEX_CONTEXT = 24; // 0x18
+    field public static final int CONDITIONAL_JAPANESE_STARTER = 37; // 0x25
+    field public static final int CONTINGENT_BREAK = 7; // 0x7
+    field public static final int EXCLAMATION = 11; // 0xb
+    field public static final int E_BASE = 40; // 0x28
+    field public static final int E_MODIFIER = 41; // 0x29
+    field public static final int GLUE = 12; // 0xc
+    field public static final int H2 = 31; // 0x1f
+    field public static final int H3 = 32; // 0x20
+    field public static final int HEBREW_LETTER = 38; // 0x26
+    field public static final int HYPHEN = 13; // 0xd
+    field public static final int IDEOGRAPHIC = 14; // 0xe
+    field public static final int INFIX_NUMERIC = 16; // 0x10
+    field public static final int INSEPARABLE = 15; // 0xf
+    field public static final int INSEPERABLE = 15; // 0xf
+    field public static final int JL = 33; // 0x21
+    field public static final int JT = 34; // 0x22
+    field public static final int JV = 35; // 0x23
+    field public static final int LINE_FEED = 17; // 0x11
+    field public static final int MANDATORY_BREAK = 6; // 0x6
+    field public static final int NEXT_LINE = 29; // 0x1d
+    field public static final int NONSTARTER = 18; // 0x12
+    field public static final int NUMERIC = 19; // 0x13
+    field public static final int OPEN_PUNCTUATION = 20; // 0x14
+    field public static final int POSTFIX_NUMERIC = 21; // 0x15
+    field public static final int PREFIX_NUMERIC = 22; // 0x16
+    field public static final int QUOTATION = 23; // 0x17
+    field public static final int REGIONAL_INDICATOR = 39; // 0x27
+    field public static final int SPACE = 26; // 0x1a
+    field public static final int SURROGATE = 25; // 0x19
+    field public static final int UNKNOWN = 0; // 0x0
+    field public static final int WORD_JOINER = 30; // 0x1e
+    field public static final int ZWJ = 42; // 0x2a
+    field public static final int ZWSPACE = 28; // 0x1c
+  }
+
+  public static interface UCharacter.NumericType {
+    field public static final int DECIMAL = 1; // 0x1
+    field public static final int DIGIT = 2; // 0x2
+    field public static final int NONE = 0; // 0x0
+    field public static final int NUMERIC = 3; // 0x3
+  }
+
+  public static interface UCharacter.SentenceBreak {
+    field public static final int ATERM = 1; // 0x1
+    field public static final int CLOSE = 2; // 0x2
+    field public static final int CR = 11; // 0xb
+    field public static final int EXTEND = 12; // 0xc
+    field public static final int FORMAT = 3; // 0x3
+    field public static final int LF = 13; // 0xd
+    field public static final int LOWER = 4; // 0x4
+    field public static final int NUMERIC = 5; // 0x5
+    field public static final int OLETTER = 6; // 0x6
+    field public static final int OTHER = 0; // 0x0
+    field public static final int SCONTINUE = 14; // 0xe
+    field public static final int SEP = 7; // 0x7
+    field public static final int SP = 8; // 0x8
+    field public static final int STERM = 9; // 0x9
+    field public static final int UPPER = 10; // 0xa
+  }
+
+  public static final class UCharacter.UnicodeBlock extends java.lang.Character.Subset {
+    method public static android.icu.lang.UCharacter.UnicodeBlock forName(String);
+    method public int getID();
+    method public static android.icu.lang.UCharacter.UnicodeBlock getInstance(int);
+    method public static android.icu.lang.UCharacter.UnicodeBlock of(int);
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ADLAM;
+    field public static final int ADLAM_ID = 263; // 0x107
+    field public static final android.icu.lang.UCharacter.UnicodeBlock AEGEAN_NUMBERS;
+    field public static final int AEGEAN_NUMBERS_ID = 119; // 0x77
+    field public static final android.icu.lang.UCharacter.UnicodeBlock AHOM;
+    field public static final int AHOM_ID = 253; // 0xfd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ALCHEMICAL_SYMBOLS;
+    field public static final int ALCHEMICAL_SYMBOLS_ID = 208; // 0xd0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ALPHABETIC_PRESENTATION_FORMS;
+    field public static final int ALPHABETIC_PRESENTATION_FORMS_ID = 80; // 0x50
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANATOLIAN_HIEROGLYPHS;
+    field public static final int ANATOLIAN_HIEROGLYPHS_ID = 254; // 0xfe
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION;
+    field public static final int ANCIENT_GREEK_MUSICAL_NOTATION_ID = 126; // 0x7e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_NUMBERS;
+    field public static final int ANCIENT_GREEK_NUMBERS_ID = 127; // 0x7f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_SYMBOLS;
+    field public static final int ANCIENT_SYMBOLS_ID = 165; // 0xa5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_EXTENDED_A;
+    field public static final int ARABIC_EXTENDED_A_ID = 210; // 0xd2
+    field public static final int ARABIC_ID = 12; // 0xc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS;
+    field public static final int ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS_ID = 211; // 0xd3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_A;
+    field public static final int ARABIC_PRESENTATION_FORMS_A_ID = 81; // 0x51
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_B;
+    field public static final int ARABIC_PRESENTATION_FORMS_B_ID = 85; // 0x55
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_SUPPLEMENT;
+    field public static final int ARABIC_SUPPLEMENT_ID = 128; // 0x80
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARMENIAN;
+    field public static final int ARMENIAN_ID = 10; // 0xa
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARROWS;
+    field public static final int ARROWS_ID = 46; // 0x2e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock AVESTAN;
+    field public static final int AVESTAN_ID = 188; // 0xbc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BALINESE;
+    field public static final int BALINESE_ID = 147; // 0x93
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM;
+    field public static final int BAMUM_ID = 177; // 0xb1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM_SUPPLEMENT;
+    field public static final int BAMUM_SUPPLEMENT_ID = 202; // 0xca
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BASIC_LATIN;
+    field public static final int BASIC_LATIN_ID = 1; // 0x1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BASSA_VAH;
+    field public static final int BASSA_VAH_ID = 221; // 0xdd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BATAK;
+    field public static final int BATAK_ID = 199; // 0xc7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BENGALI;
+    field public static final int BENGALI_ID = 16; // 0x10
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BHAIKSUKI;
+    field public static final int BHAIKSUKI_ID = 264; // 0x108
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BLOCK_ELEMENTS;
+    field public static final int BLOCK_ELEMENTS_ID = 53; // 0x35
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO_EXTENDED;
+    field public static final int BOPOMOFO_EXTENDED_ID = 67; // 0x43
+    field public static final int BOPOMOFO_ID = 64; // 0x40
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BOX_DRAWING;
+    field public static final int BOX_DRAWING_ID = 52; // 0x34
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BRAHMI;
+    field public static final int BRAHMI_ID = 201; // 0xc9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BRAILLE_PATTERNS;
+    field public static final int BRAILLE_PATTERNS_ID = 57; // 0x39
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BUGINESE;
+    field public static final int BUGINESE_ID = 129; // 0x81
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BUHID;
+    field public static final int BUHID_ID = 100; // 0x64
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS;
+    field public static final int BYZANTINE_MUSICAL_SYMBOLS_ID = 91; // 0x5b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CARIAN;
+    field public static final int CARIAN_ID = 168; // 0xa8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CAUCASIAN_ALBANIAN;
+    field public static final int CAUCASIAN_ALBANIAN_ID = 222; // 0xde
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHAKMA;
+    field public static final int CHAKMA_ID = 212; // 0xd4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHAM;
+    field public static final int CHAM_ID = 164; // 0xa4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE;
+    field public static final int CHEROKEE_ID = 32; // 0x20
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE_SUPPLEMENT;
+    field public static final int CHEROKEE_SUPPLEMENT_ID = 255; // 0xff
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHESS_SYMBOLS;
+    field public static final int CHESS_SYMBOLS_ID = 281; // 0x119
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHORASMIAN;
+    field public static final int CHORASMIAN_ID = 301; // 0x12d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_FORMS;
+    field public static final int CJK_COMPATIBILITY_FORMS_ID = 83; // 0x53
+    field public static final int CJK_COMPATIBILITY_ID = 69; // 0x45
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS;
+    field public static final int CJK_COMPATIBILITY_IDEOGRAPHS_ID = 79; // 0x4f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT;
+    field public static final int CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT_ID = 95; // 0x5f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_RADICALS_SUPPLEMENT;
+    field public static final int CJK_RADICALS_SUPPLEMENT_ID = 58; // 0x3a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_STROKES;
+    field public static final int CJK_STROKES_ID = 130; // 0x82
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION;
+    field public static final int CJK_SYMBOLS_AND_PUNCTUATION_ID = 61; // 0x3d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A_ID = 70; // 0x46
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B_ID = 94; // 0x5e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C_ID = 197; // 0xc5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D_ID = 209; // 0xd1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E_ID = 256; // 0x100
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F_ID = 274; // 0x112
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G_ID = 302; // 0x12e
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_ID = 71; // 0x47
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_EXTENDED;
+    field public static final int COMBINING_DIACRITICAL_MARKS_EXTENDED_ID = 224; // 0xe0
+    field public static final int COMBINING_DIACRITICAL_MARKS_ID = 7; // 0x7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT;
+    field public static final int COMBINING_DIACRITICAL_MARKS_SUPPLEMENT_ID = 131; // 0x83
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_HALF_MARKS;
+    field public static final int COMBINING_HALF_MARKS_ID = 82; // 0x52
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS;
+    field public static final int COMBINING_MARKS_FOR_SYMBOLS_ID = 43; // 0x2b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMMON_INDIC_NUMBER_FORMS;
+    field public static final int COMMON_INDIC_NUMBER_FORMS_ID = 178; // 0xb2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CONTROL_PICTURES;
+    field public static final int CONTROL_PICTURES_ID = 49; // 0x31
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC_EPACT_NUMBERS;
+    field public static final int COPTIC_EPACT_NUMBERS_ID = 223; // 0xdf
+    field public static final int COPTIC_ID = 132; // 0x84
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COUNTING_ROD_NUMERALS;
+    field public static final int COUNTING_ROD_NUMERALS_ID = 154; // 0x9a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM;
+    field public static final int CUNEIFORM_ID = 152; // 0x98
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION;
+    field public static final int CUNEIFORM_NUMBERS_AND_PUNCTUATION_ID = 153; // 0x99
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CURRENCY_SYMBOLS;
+    field public static final int CURRENCY_SYMBOLS_ID = 42; // 0x2a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYPRIOT_SYLLABARY;
+    field public static final int CYPRIOT_SYLLABARY_ID = 123; // 0x7b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_A;
+    field public static final int CYRILLIC_EXTENDED_A_ID = 158; // 0x9e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_B;
+    field public static final int CYRILLIC_EXTENDED_B_ID = 160; // 0xa0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_C;
+    field public static final int CYRILLIC_EXTENDED_C_ID = 265; // 0x109
+    field public static final int CYRILLIC_ID = 9; // 0x9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENT;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENTARY;
+    field public static final int CYRILLIC_SUPPLEMENTARY_ID = 97; // 0x61
+    field public static final int CYRILLIC_SUPPLEMENT_ID = 97; // 0x61
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DESERET;
+    field public static final int DESERET_ID = 90; // 0x5a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI_EXTENDED;
+    field public static final int DEVANAGARI_EXTENDED_ID = 179; // 0xb3
+    field public static final int DEVANAGARI_ID = 15; // 0xf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DINGBATS;
+    field public static final int DINGBATS_ID = 56; // 0x38
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DIVES_AKURU;
+    field public static final int DIVES_AKURU_ID = 303; // 0x12f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DOGRA;
+    field public static final int DOGRA_ID = 282; // 0x11a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DOMINO_TILES;
+    field public static final int DOMINO_TILES_ID = 171; // 0xab
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DUPLOYAN;
+    field public static final int DUPLOYAN_ID = 225; // 0xe1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EARLY_DYNASTIC_CUNEIFORM;
+    field public static final int EARLY_DYNASTIC_CUNEIFORM_ID = 257; // 0x101
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPHS;
+    field public static final int EGYPTIAN_HIEROGLYPHS_ID = 194; // 0xc2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS;
+    field public static final int EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS_ID = 292; // 0x124
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ELBASAN;
+    field public static final int ELBASAN_ID = 226; // 0xe2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ELYMAIC;
+    field public static final int ELYMAIC_ID = 293; // 0x125
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EMOTICONS;
+    field public static final int EMOTICONS_ID = 206; // 0xce
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERICS;
+    field public static final int ENCLOSED_ALPHANUMERICS_ID = 51; // 0x33
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT;
+    field public static final int ENCLOSED_ALPHANUMERIC_SUPPLEMENT_ID = 195; // 0xc3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS;
+    field public static final int ENCLOSED_CJK_LETTERS_AND_MONTHS_ID = 68; // 0x44
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT;
+    field public static final int ENCLOSED_IDEOGRAPHIC_SUPPLEMENT_ID = 196; // 0xc4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED_A;
+    field public static final int ETHIOPIC_EXTENDED_A_ID = 200; // 0xc8
+    field public static final int ETHIOPIC_EXTENDED_ID = 133; // 0x85
+    field public static final int ETHIOPIC_ID = 31; // 0x1f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_SUPPLEMENT;
+    field public static final int ETHIOPIC_SUPPLEMENT_ID = 134; // 0x86
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GENERAL_PUNCTUATION;
+    field public static final int GENERAL_PUNCTUATION_ID = 40; // 0x28
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES_EXTENDED;
+    field public static final int GEOMETRIC_SHAPES_EXTENDED_ID = 227; // 0xe3
+    field public static final int GEOMETRIC_SHAPES_ID = 54; // 0x36
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_EXTENDED;
+    field public static final int GEORGIAN_EXTENDED_ID = 283; // 0x11b
+    field public static final int GEORGIAN_ID = 29; // 0x1d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_SUPPLEMENT;
+    field public static final int GEORGIAN_SUPPLEMENT_ID = 135; // 0x87
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC;
+    field public static final int GLAGOLITIC_ID = 136; // 0x88
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC_SUPPLEMENT;
+    field public static final int GLAGOLITIC_SUPPLEMENT_ID = 266; // 0x10a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GOTHIC;
+    field public static final int GOTHIC_ID = 89; // 0x59
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GRANTHA;
+    field public static final int GRANTHA_ID = 228; // 0xe4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GREEK;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GREEK_EXTENDED;
+    field public static final int GREEK_EXTENDED_ID = 39; // 0x27
+    field public static final int GREEK_ID = 8; // 0x8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GUJARATI;
+    field public static final int GUJARATI_ID = 18; // 0x12
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GUNJALA_GONDI;
+    field public static final int GUNJALA_GONDI_ID = 284; // 0x11c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GURMUKHI;
+    field public static final int GURMUKHI_ID = 17; // 0x11
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS;
+    field public static final int HALFWIDTH_AND_FULLWIDTH_FORMS_ID = 87; // 0x57
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_COMPATIBILITY_JAMO;
+    field public static final int HANGUL_COMPATIBILITY_JAMO_ID = 65; // 0x41
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_A;
+    field public static final int HANGUL_JAMO_EXTENDED_A_ID = 180; // 0xb4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_B;
+    field public static final int HANGUL_JAMO_EXTENDED_B_ID = 185; // 0xb9
+    field public static final int HANGUL_JAMO_ID = 30; // 0x1e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_SYLLABLES;
+    field public static final int HANGUL_SYLLABLES_ID = 74; // 0x4a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANIFI_ROHINGYA;
+    field public static final int HANIFI_ROHINGYA_ID = 285; // 0x11d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANUNOO;
+    field public static final int HANUNOO_ID = 99; // 0x63
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HATRAN;
+    field public static final int HATRAN_ID = 258; // 0x102
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HEBREW;
+    field public static final int HEBREW_ID = 11; // 0xb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_PRIVATE_USE_SURROGATES;
+    field public static final int HIGH_PRIVATE_USE_SURROGATES_ID = 76; // 0x4c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_SURROGATES;
+    field public static final int HIGH_SURROGATES_ID = 75; // 0x4b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HIRAGANA;
+    field public static final int HIRAGANA_ID = 62; // 0x3e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS;
+    field public static final int IDEOGRAPHIC_DESCRIPTION_CHARACTERS_ID = 60; // 0x3c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION;
+    field public static final int IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION_ID = 267; // 0x10b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IMPERIAL_ARAMAIC;
+    field public static final int IMPERIAL_ARAMAIC_ID = 186; // 0xba
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INDIC_SIYAQ_NUMBERS;
+    field public static final int INDIC_SIYAQ_NUMBERS_ID = 286; // 0x11e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PAHLAVI;
+    field public static final int INSCRIPTIONAL_PAHLAVI_ID = 190; // 0xbe
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PARTHIAN;
+    field public static final int INSCRIPTIONAL_PARTHIAN_ID = 189; // 0xbd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INVALID_CODE;
+    field public static final int INVALID_CODE_ID = -1; // 0xffffffff
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IPA_EXTENSIONS;
+    field public static final int IPA_EXTENSIONS_ID = 5; // 0x5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock JAVANESE;
+    field public static final int JAVANESE_ID = 181; // 0xb5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KAITHI;
+    field public static final int KAITHI_ID = 193; // 0xc1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANA_EXTENDED_A;
+    field public static final int KANA_EXTENDED_A_ID = 275; // 0x113
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANA_SUPPLEMENT;
+    field public static final int KANA_SUPPLEMENT_ID = 203; // 0xcb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANBUN;
+    field public static final int KANBUN_ID = 66; // 0x42
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANGXI_RADICALS;
+    field public static final int KANGXI_RADICALS_ID = 59; // 0x3b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANNADA;
+    field public static final int KANNADA_ID = 22; // 0x16
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA;
+    field public static final int KATAKANA_ID = 63; // 0x3f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS;
+    field public static final int KATAKANA_PHONETIC_EXTENSIONS_ID = 107; // 0x6b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KAYAH_LI;
+    field public static final int KAYAH_LI_ID = 162; // 0xa2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHAROSHTHI;
+    field public static final int KHAROSHTHI_ID = 137; // 0x89
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHITAN_SMALL_SCRIPT;
+    field public static final int KHITAN_SMALL_SCRIPT_ID = 304; // 0x130
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHMER;
+    field public static final int KHMER_ID = 36; // 0x24
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHMER_SYMBOLS;
+    field public static final int KHMER_SYMBOLS_ID = 113; // 0x71
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHOJKI;
+    field public static final int KHOJKI_ID = 229; // 0xe5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHUDAWADI;
+    field public static final int KHUDAWADI_ID = 230; // 0xe6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LAO;
+    field public static final int LAO_ID = 26; // 0x1a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_1_SUPPLEMENT;
+    field public static final int LATIN_1_SUPPLEMENT_ID = 2; // 0x2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_A;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_ADDITIONAL;
+    field public static final int LATIN_EXTENDED_ADDITIONAL_ID = 38; // 0x26
+    field public static final int LATIN_EXTENDED_A_ID = 3; // 0x3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_B;
+    field public static final int LATIN_EXTENDED_B_ID = 4; // 0x4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_C;
+    field public static final int LATIN_EXTENDED_C_ID = 148; // 0x94
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_D;
+    field public static final int LATIN_EXTENDED_D_ID = 149; // 0x95
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_E;
+    field public static final int LATIN_EXTENDED_E_ID = 231; // 0xe7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LEPCHA;
+    field public static final int LEPCHA_ID = 156; // 0x9c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LETTERLIKE_SYMBOLS;
+    field public static final int LETTERLIKE_SYMBOLS_ID = 44; // 0x2c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LIMBU;
+    field public static final int LIMBU_ID = 111; // 0x6f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_A;
+    field public static final int LINEAR_A_ID = 232; // 0xe8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_IDEOGRAMS;
+    field public static final int LINEAR_B_IDEOGRAMS_ID = 118; // 0x76
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_SYLLABARY;
+    field public static final int LINEAR_B_SYLLABARY_ID = 117; // 0x75
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LISU;
+    field public static final int LISU_ID = 176; // 0xb0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LISU_SUPPLEMENT;
+    field public static final int LISU_SUPPLEMENT_ID = 305; // 0x131
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LOW_SURROGATES;
+    field public static final int LOW_SURROGATES_ID = 77; // 0x4d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LYCIAN;
+    field public static final int LYCIAN_ID = 167; // 0xa7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LYDIAN;
+    field public static final int LYDIAN_ID = 169; // 0xa9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAHAJANI;
+    field public static final int MAHAJANI_ID = 233; // 0xe9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAHJONG_TILES;
+    field public static final int MAHJONG_TILES_ID = 170; // 0xaa
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAKASAR;
+    field public static final int MAKASAR_ID = 287; // 0x11f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MALAYALAM;
+    field public static final int MALAYALAM_ID = 23; // 0x17
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MANDAIC;
+    field public static final int MANDAIC_ID = 198; // 0xc6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MANICHAEAN;
+    field public static final int MANICHAEAN_ID = 234; // 0xea
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MARCHEN;
+    field public static final int MARCHEN_ID = 268; // 0x10c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MASARAM_GONDI;
+    field public static final int MASARAM_GONDI_ID = 276; // 0x114
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS;
+    field public static final int MATHEMATICAL_ALPHANUMERIC_SYMBOLS_ID = 93; // 0x5d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_OPERATORS;
+    field public static final int MATHEMATICAL_OPERATORS_ID = 47; // 0x2f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAYAN_NUMERALS;
+    field public static final int MAYAN_NUMERALS_ID = 288; // 0x120
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEDEFAIDRIN;
+    field public static final int MEDEFAIDRIN_ID = 289; // 0x121
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK_EXTENSIONS;
+    field public static final int MEETEI_MAYEK_EXTENSIONS_ID = 213; // 0xd5
+    field public static final int MEETEI_MAYEK_ID = 184; // 0xb8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MENDE_KIKAKUI;
+    field public static final int MENDE_KIKAKUI_ID = 235; // 0xeb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_CURSIVE;
+    field public static final int MEROITIC_CURSIVE_ID = 214; // 0xd6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_HIEROGLYPHS;
+    field public static final int MEROITIC_HIEROGLYPHS_ID = 215; // 0xd7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MIAO;
+    field public static final int MIAO_ID = 216; // 0xd8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A;
+    field public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A_ID = 102; // 0x66
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B;
+    field public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B_ID = 105; // 0x69
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS;
+    field public static final int MISCELLANEOUS_SYMBOLS_AND_ARROWS_ID = 115; // 0x73
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS;
+    field public static final int MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS_ID = 205; // 0xcd
+    field public static final int MISCELLANEOUS_SYMBOLS_ID = 55; // 0x37
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_TECHNICAL;
+    field public static final int MISCELLANEOUS_TECHNICAL_ID = 48; // 0x30
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MODI;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MODIFIER_TONE_LETTERS;
+    field public static final int MODIFIER_TONE_LETTERS_ID = 138; // 0x8a
+    field public static final int MODI_ID = 236; // 0xec
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN;
+    field public static final int MONGOLIAN_ID = 37; // 0x25
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN_SUPPLEMENT;
+    field public static final int MONGOLIAN_SUPPLEMENT_ID = 269; // 0x10d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MRO;
+    field public static final int MRO_ID = 237; // 0xed
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MULTANI;
+    field public static final int MULTANI_ID = 259; // 0x103
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MUSICAL_SYMBOLS;
+    field public static final int MUSICAL_SYMBOLS_ID = 92; // 0x5c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_A;
+    field public static final int MYANMAR_EXTENDED_A_ID = 182; // 0xb6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_B;
+    field public static final int MYANMAR_EXTENDED_B_ID = 238; // 0xee
+    field public static final int MYANMAR_ID = 28; // 0x1c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NABATAEAN;
+    field public static final int NABATAEAN_ID = 239; // 0xef
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NANDINAGARI;
+    field public static final int NANDINAGARI_ID = 294; // 0x126
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NEWA;
+    field public static final int NEWA_ID = 270; // 0x10e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NEW_TAI_LUE;
+    field public static final int NEW_TAI_LUE_ID = 139; // 0x8b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NKO;
+    field public static final int NKO_ID = 146; // 0x92
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NO_BLOCK;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NUMBER_FORMS;
+    field public static final int NUMBER_FORMS_ID = 45; // 0x2d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NUSHU;
+    field public static final int NUSHU_ID = 277; // 0x115
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NYIAKENG_PUACHUE_HMONG;
+    field public static final int NYIAKENG_PUACHUE_HMONG_ID = 295; // 0x127
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OGHAM;
+    field public static final int OGHAM_ID = 34; // 0x22
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_HUNGARIAN;
+    field public static final int OLD_HUNGARIAN_ID = 260; // 0x104
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_ITALIC;
+    field public static final int OLD_ITALIC_ID = 88; // 0x58
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_NORTH_ARABIAN;
+    field public static final int OLD_NORTH_ARABIAN_ID = 240; // 0xf0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERMIC;
+    field public static final int OLD_PERMIC_ID = 241; // 0xf1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERSIAN;
+    field public static final int OLD_PERSIAN_ID = 140; // 0x8c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOGDIAN;
+    field public static final int OLD_SOGDIAN_ID = 290; // 0x122
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOUTH_ARABIAN;
+    field public static final int OLD_SOUTH_ARABIAN_ID = 187; // 0xbb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_TURKIC;
+    field public static final int OLD_TURKIC_ID = 191; // 0xbf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OL_CHIKI;
+    field public static final int OL_CHIKI_ID = 157; // 0x9d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OPTICAL_CHARACTER_RECOGNITION;
+    field public static final int OPTICAL_CHARACTER_RECOGNITION_ID = 50; // 0x32
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ORIYA;
+    field public static final int ORIYA_ID = 19; // 0x13
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ORNAMENTAL_DINGBATS;
+    field public static final int ORNAMENTAL_DINGBATS_ID = 242; // 0xf2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OSAGE;
+    field public static final int OSAGE_ID = 271; // 0x10f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OSMANYA;
+    field public static final int OSMANYA_ID = 122; // 0x7a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OTTOMAN_SIYAQ_NUMBERS;
+    field public static final int OTTOMAN_SIYAQ_NUMBERS_ID = 296; // 0x128
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PAHAWH_HMONG;
+    field public static final int PAHAWH_HMONG_ID = 243; // 0xf3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PALMYRENE;
+    field public static final int PALMYRENE_ID = 244; // 0xf4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PAU_CIN_HAU;
+    field public static final int PAU_CIN_HAU_ID = 245; // 0xf5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHAGS_PA;
+    field public static final int PHAGS_PA_ID = 150; // 0x96
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHAISTOS_DISC;
+    field public static final int PHAISTOS_DISC_ID = 166; // 0xa6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHOENICIAN;
+    field public static final int PHOENICIAN_ID = 151; // 0x97
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS;
+    field public static final int PHONETIC_EXTENSIONS_ID = 114; // 0x72
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT;
+    field public static final int PHONETIC_EXTENSIONS_SUPPLEMENT_ID = 141; // 0x8d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PLAYING_CARDS;
+    field public static final int PLAYING_CARDS_ID = 204; // 0xcc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE_AREA;
+    field public static final int PRIVATE_USE_AREA_ID = 78; // 0x4e
+    field public static final int PRIVATE_USE_ID = 78; // 0x4e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PSALTER_PAHLAVI;
+    field public static final int PSALTER_PAHLAVI_ID = 246; // 0xf6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock REJANG;
+    field public static final int REJANG_ID = 163; // 0xa3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock RUMI_NUMERAL_SYMBOLS;
+    field public static final int RUMI_NUMERAL_SYMBOLS_ID = 192; // 0xc0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock RUNIC;
+    field public static final int RUNIC_ID = 35; // 0x23
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SAMARITAN;
+    field public static final int SAMARITAN_ID = 172; // 0xac
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SAURASHTRA;
+    field public static final int SAURASHTRA_ID = 161; // 0xa1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SHARADA;
+    field public static final int SHARADA_ID = 217; // 0xd9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SHAVIAN;
+    field public static final int SHAVIAN_ID = 121; // 0x79
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SHORTHAND_FORMAT_CONTROLS;
+    field public static final int SHORTHAND_FORMAT_CONTROLS_ID = 247; // 0xf7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SIDDHAM;
+    field public static final int SIDDHAM_ID = 248; // 0xf8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA_ARCHAIC_NUMBERS;
+    field public static final int SINHALA_ARCHAIC_NUMBERS_ID = 249; // 0xf9
+    field public static final int SINHALA_ID = 24; // 0x18
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_FORM_VARIANTS;
+    field public static final int SMALL_FORM_VARIANTS_ID = 84; // 0x54
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_KANA_EXTENSION;
+    field public static final int SMALL_KANA_EXTENSION_ID = 297; // 0x129
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SOGDIAN;
+    field public static final int SOGDIAN_ID = 291; // 0x123
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SORA_SOMPENG;
+    field public static final int SORA_SOMPENG_ID = 218; // 0xda
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SOYOMBO;
+    field public static final int SOYOMBO_ID = 278; // 0x116
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SPACING_MODIFIER_LETTERS;
+    field public static final int SPACING_MODIFIER_LETTERS_ID = 6; // 0x6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SPECIALS;
+    field public static final int SPECIALS_ID = 86; // 0x56
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE;
+    field public static final int SUNDANESE_ID = 155; // 0x9b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE_SUPPLEMENT;
+    field public static final int SUNDANESE_SUPPLEMENT_ID = 219; // 0xdb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS;
+    field public static final int SUPERSCRIPTS_AND_SUBSCRIPTS_ID = 41; // 0x29
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_A;
+    field public static final int SUPPLEMENTAL_ARROWS_A_ID = 103; // 0x67
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_B;
+    field public static final int SUPPLEMENTAL_ARROWS_B_ID = 104; // 0x68
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_C;
+    field public static final int SUPPLEMENTAL_ARROWS_C_ID = 250; // 0xfa
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS;
+    field public static final int SUPPLEMENTAL_MATHEMATICAL_OPERATORS_ID = 106; // 0x6a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_PUNCTUATION;
+    field public static final int SUPPLEMENTAL_PUNCTUATION_ID = 142; // 0x8e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS;
+    field public static final int SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS_ID = 261; // 0x105
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A;
+    field public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_A_ID = 109; // 0x6d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B;
+    field public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_B_ID = 110; // 0x6e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUTTON_SIGNWRITING;
+    field public static final int SUTTON_SIGNWRITING_ID = 262; // 0x106
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYLOTI_NAGRI;
+    field public static final int SYLOTI_NAGRI_ID = 143; // 0x8f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A;
+    field public static final int SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A_ID = 298; // 0x12a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_FOR_LEGACY_COMPUTING;
+    field public static final int SYMBOLS_FOR_LEGACY_COMPUTING_ID = 306; // 0x132
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC;
+    field public static final int SYRIAC_ID = 13; // 0xd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC_SUPPLEMENT;
+    field public static final int SYRIAC_SUPPLEMENT_ID = 279; // 0x117
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAGALOG;
+    field public static final int TAGALOG_ID = 98; // 0x62
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAGBANWA;
+    field public static final int TAGBANWA_ID = 101; // 0x65
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAGS;
+    field public static final int TAGS_ID = 96; // 0x60
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_LE;
+    field public static final int TAI_LE_ID = 112; // 0x70
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_THAM;
+    field public static final int TAI_THAM_ID = 174; // 0xae
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_VIET;
+    field public static final int TAI_VIET_ID = 183; // 0xb7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_XUAN_JING_SYMBOLS;
+    field public static final int TAI_XUAN_JING_SYMBOLS_ID = 124; // 0x7c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAKRI;
+    field public static final int TAKRI_ID = 220; // 0xdc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL;
+    field public static final int TAMIL_ID = 20; // 0x14
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL_SUPPLEMENT;
+    field public static final int TAMIL_SUPPLEMENT_ID = 299; // 0x12b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_COMPONENTS;
+    field public static final int TANGUT_COMPONENTS_ID = 273; // 0x111
+    field public static final int TANGUT_ID = 272; // 0x110
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_SUPPLEMENT;
+    field public static final int TANGUT_SUPPLEMENT_ID = 307; // 0x133
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TELUGU;
+    field public static final int TELUGU_ID = 21; // 0x15
+    field public static final android.icu.lang.UCharacter.UnicodeBlock THAANA;
+    field public static final int THAANA_ID = 14; // 0xe
+    field public static final android.icu.lang.UCharacter.UnicodeBlock THAI;
+    field public static final int THAI_ID = 25; // 0x19
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TIBETAN;
+    field public static final int TIBETAN_ID = 27; // 0x1b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TIFINAGH;
+    field public static final int TIFINAGH_ID = 144; // 0x90
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TIRHUTA;
+    field public static final int TIRHUTA_ID = 251; // 0xfb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS;
+    field public static final int TRANSPORT_AND_MAP_SYMBOLS_ID = 207; // 0xcf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock UGARITIC;
+    field public static final int UGARITIC_ID = 120; // 0x78
+    field public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED;
+    field public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_ID = 173; // 0xad
+    field public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_ID = 33; // 0x21
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VAI;
+    field public static final int VAI_ID = 159; // 0x9f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS;
+    field public static final int VARIATION_SELECTORS_ID = 108; // 0x6c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT;
+    field public static final int VARIATION_SELECTORS_SUPPLEMENT_ID = 125; // 0x7d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VEDIC_EXTENSIONS;
+    field public static final int VEDIC_EXTENSIONS_ID = 175; // 0xaf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VERTICAL_FORMS;
+    field public static final int VERTICAL_FORMS_ID = 145; // 0x91
+    field public static final android.icu.lang.UCharacter.UnicodeBlock WANCHO;
+    field public static final int WANCHO_ID = 300; // 0x12c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock WARANG_CITI;
+    field public static final int WARANG_CITI_ID = 252; // 0xfc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YEZIDI;
+    field public static final int YEZIDI_ID = 308; // 0x134
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YIJING_HEXAGRAM_SYMBOLS;
+    field public static final int YIJING_HEXAGRAM_SYMBOLS_ID = 116; // 0x74
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YI_RADICALS;
+    field public static final int YI_RADICALS_ID = 73; // 0x49
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YI_SYLLABLES;
+    field public static final int YI_SYLLABLES_ID = 72; // 0x48
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ZANABAZAR_SQUARE;
+    field public static final int ZANABAZAR_SQUARE_ID = 280; // 0x118
+  }
+
+  public static interface UCharacter.VerticalOrientation {
+    field public static final int ROTATED = 0; // 0x0
+    field public static final int TRANSFORMED_ROTATED = 1; // 0x1
+    field public static final int TRANSFORMED_UPRIGHT = 2; // 0x2
+    field public static final int UPRIGHT = 3; // 0x3
+  }
+
+  public static interface UCharacter.WordBreak {
+    field public static final int ALETTER = 1; // 0x1
+    field public static final int CR = 8; // 0x8
+    field public static final int DOUBLE_QUOTE = 16; // 0x10
+    field public static final int EXTEND = 9; // 0x9
+    field public static final int EXTENDNUMLET = 7; // 0x7
+    field public static final int E_BASE = 17; // 0x11
+    field public static final int E_BASE_GAZ = 18; // 0x12
+    field public static final int E_MODIFIER = 19; // 0x13
+    field public static final int FORMAT = 2; // 0x2
+    field public static final int GLUE_AFTER_ZWJ = 20; // 0x14
+    field public static final int HEBREW_LETTER = 14; // 0xe
+    field public static final int KATAKANA = 3; // 0x3
+    field public static final int LF = 10; // 0xa
+    field public static final int MIDLETTER = 4; // 0x4
+    field public static final int MIDNUM = 5; // 0x5
+    field public static final int MIDNUMLET = 11; // 0xb
+    field public static final int NEWLINE = 12; // 0xc
+    field public static final int NUMERIC = 6; // 0x6
+    field public static final int OTHER = 0; // 0x0
+    field public static final int REGIONAL_INDICATOR = 13; // 0xd
+    field public static final int SINGLE_QUOTE = 15; // 0xf
+    field public static final int WSEGSPACE = 22; // 0x16
+    field public static final int ZWJ = 21; // 0x15
+  }
+
+  public final class UCharacterCategory implements android.icu.lang.UCharacterEnums.ECharacterCategory {
+    method public static String toString(int);
+  }
+
+  public final class UCharacterDirection implements android.icu.lang.UCharacterEnums.ECharacterDirection {
+    method public static String toString(int);
+  }
+
+  public class UCharacterEnums {
+  }
+
+  public static interface UCharacterEnums.ECharacterCategory {
+    field public static final byte COMBINING_SPACING_MARK = 8; // 0x8
+    field public static final byte CONNECTOR_PUNCTUATION = 22; // 0x16
+    field public static final byte CONTROL = 15; // 0xf
+    field public static final byte CURRENCY_SYMBOL = 25; // 0x19
+    field public static final byte DASH_PUNCTUATION = 19; // 0x13
+    field public static final byte DECIMAL_DIGIT_NUMBER = 9; // 0x9
+    field public static final byte ENCLOSING_MARK = 7; // 0x7
+    field public static final byte END_PUNCTUATION = 21; // 0x15
+    field public static final byte FINAL_PUNCTUATION = 29; // 0x1d
+    field public static final byte FINAL_QUOTE_PUNCTUATION = 29; // 0x1d
+    field public static final byte FORMAT = 16; // 0x10
+    field public static final byte GENERAL_OTHER_TYPES = 0; // 0x0
+    field public static final byte INITIAL_PUNCTUATION = 28; // 0x1c
+    field public static final byte INITIAL_QUOTE_PUNCTUATION = 28; // 0x1c
+    field public static final byte LETTER_NUMBER = 10; // 0xa
+    field public static final byte LINE_SEPARATOR = 13; // 0xd
+    field public static final byte LOWERCASE_LETTER = 2; // 0x2
+    field public static final byte MATH_SYMBOL = 24; // 0x18
+    field public static final byte MODIFIER_LETTER = 4; // 0x4
+    field public static final byte MODIFIER_SYMBOL = 26; // 0x1a
+    field public static final byte NON_SPACING_MARK = 6; // 0x6
+    field public static final byte OTHER_LETTER = 5; // 0x5
+    field public static final byte OTHER_NUMBER = 11; // 0xb
+    field public static final byte OTHER_PUNCTUATION = 23; // 0x17
+    field public static final byte OTHER_SYMBOL = 27; // 0x1b
+    field public static final byte PARAGRAPH_SEPARATOR = 14; // 0xe
+    field public static final byte PRIVATE_USE = 17; // 0x11
+    field public static final byte SPACE_SEPARATOR = 12; // 0xc
+    field public static final byte START_PUNCTUATION = 20; // 0x14
+    field public static final byte SURROGATE = 18; // 0x12
+    field public static final byte TITLECASE_LETTER = 3; // 0x3
+    field public static final byte UNASSIGNED = 0; // 0x0
+    field public static final byte UPPERCASE_LETTER = 1; // 0x1
+  }
+
+  public static interface UCharacterEnums.ECharacterDirection {
+    field public static final int ARABIC_NUMBER = 5; // 0x5
+    field public static final int BLOCK_SEPARATOR = 7; // 0x7
+    field public static final int BOUNDARY_NEUTRAL = 18; // 0x12
+    field public static final int COMMON_NUMBER_SEPARATOR = 6; // 0x6
+    field public static final byte DIRECTIONALITY_ARABIC_NUMBER = 5; // 0x5
+    field public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 18; // 0x12
+    field public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 6; // 0x6
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 2; // 0x2
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+    field public static final byte DIRECTIONALITY_NONSPACING_MARK = 17; // 0x11
+    field public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 10; // 0xa
+    field public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 7; // 0x7
+    field public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 16; // 0x10
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+    field public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 8; // 0x8
+    field public static final byte DIRECTIONALITY_UNDEFINED = -1; // 0xffffffff
+    field public static final byte DIRECTIONALITY_WHITESPACE = 9; // 0x9
+    field public static final int DIR_NON_SPACING_MARK = 17; // 0x11
+    field public static final int EUROPEAN_NUMBER = 2; // 0x2
+    field public static final int EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+    field public static final int EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+    field public static final byte FIRST_STRONG_ISOLATE = 19; // 0x13
+    field public static final int LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+    field public static final byte LEFT_TO_RIGHT_ISOLATE = 20; // 0x14
+    field public static final int LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+    field public static final int OTHER_NEUTRAL = 10; // 0xa
+    field public static final int POP_DIRECTIONAL_FORMAT = 16; // 0x10
+    field public static final byte POP_DIRECTIONAL_ISOLATE = 22; // 0x16
+    field public static final int RIGHT_TO_LEFT = 1; // 0x1
+    field public static final int RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+    field public static final int RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+    field public static final byte RIGHT_TO_LEFT_ISOLATE = 21; // 0x15
+    field public static final int RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+    field public static final int SEGMENT_SEPARATOR = 8; // 0x8
+    field public static final int WHITE_SPACE_NEUTRAL = 9; // 0x9
+  }
+
+  public interface UProperty {
+    field public static final int AGE = 16384; // 0x4000
+    field public static final int ALPHABETIC = 0; // 0x0
+    field public static final int ASCII_HEX_DIGIT = 1; // 0x1
+    field public static final int BIDI_CLASS = 4096; // 0x1000
+    field public static final int BIDI_CONTROL = 2; // 0x2
+    field public static final int BIDI_MIRRORED = 3; // 0x3
+    field public static final int BIDI_MIRRORING_GLYPH = 16385; // 0x4001
+    field public static final int BIDI_PAIRED_BRACKET = 16397; // 0x400d
+    field public static final int BIDI_PAIRED_BRACKET_TYPE = 4117; // 0x1015
+    field public static final int BINARY_START = 0; // 0x0
+    field public static final int BLOCK = 4097; // 0x1001
+    field public static final int CANONICAL_COMBINING_CLASS = 4098; // 0x1002
+    field public static final int CASED = 49; // 0x31
+    field public static final int CASE_FOLDING = 16386; // 0x4002
+    field public static final int CASE_IGNORABLE = 50; // 0x32
+    field public static final int CASE_SENSITIVE = 34; // 0x22
+    field public static final int CHANGES_WHEN_CASEFOLDED = 54; // 0x36
+    field public static final int CHANGES_WHEN_CASEMAPPED = 55; // 0x37
+    field public static final int CHANGES_WHEN_LOWERCASED = 51; // 0x33
+    field public static final int CHANGES_WHEN_NFKC_CASEFOLDED = 56; // 0x38
+    field public static final int CHANGES_WHEN_TITLECASED = 53; // 0x35
+    field public static final int CHANGES_WHEN_UPPERCASED = 52; // 0x34
+    field public static final int DASH = 4; // 0x4
+    field public static final int DECOMPOSITION_TYPE = 4099; // 0x1003
+    field public static final int DEFAULT_IGNORABLE_CODE_POINT = 5; // 0x5
+    field public static final int DEPRECATED = 6; // 0x6
+    field public static final int DIACRITIC = 7; // 0x7
+    field public static final int DOUBLE_START = 12288; // 0x3000
+    field public static final int EAST_ASIAN_WIDTH = 4100; // 0x1004
+    field public static final int EMOJI = 57; // 0x39
+    field public static final int EMOJI_COMPONENT = 61; // 0x3d
+    field public static final int EMOJI_MODIFIER = 59; // 0x3b
+    field public static final int EMOJI_MODIFIER_BASE = 60; // 0x3c
+    field public static final int EMOJI_PRESENTATION = 58; // 0x3a
+    field public static final int EXTENDED_PICTOGRAPHIC = 64; // 0x40
+    field public static final int EXTENDER = 8; // 0x8
+    field public static final int FULL_COMPOSITION_EXCLUSION = 9; // 0x9
+    field public static final int GENERAL_CATEGORY = 4101; // 0x1005
+    field public static final int GENERAL_CATEGORY_MASK = 8192; // 0x2000
+    field public static final int GRAPHEME_BASE = 10; // 0xa
+    field public static final int GRAPHEME_CLUSTER_BREAK = 4114; // 0x1012
+    field public static final int GRAPHEME_EXTEND = 11; // 0xb
+    field public static final int GRAPHEME_LINK = 12; // 0xc
+    field public static final int HANGUL_SYLLABLE_TYPE = 4107; // 0x100b
+    field public static final int HEX_DIGIT = 13; // 0xd
+    field public static final int HYPHEN = 14; // 0xe
+    field public static final int IDEOGRAPHIC = 17; // 0x11
+    field public static final int IDS_BINARY_OPERATOR = 18; // 0x12
+    field public static final int IDS_TRINARY_OPERATOR = 19; // 0x13
+    field public static final int ID_CONTINUE = 15; // 0xf
+    field public static final int ID_START = 16; // 0x10
+    field public static final int INDIC_POSITIONAL_CATEGORY = 4118; // 0x1016
+    field public static final int INDIC_SYLLABIC_CATEGORY = 4119; // 0x1017
+    field public static final int INT_START = 4096; // 0x1000
+    field public static final int JOINING_GROUP = 4102; // 0x1006
+    field public static final int JOINING_TYPE = 4103; // 0x1007
+    field public static final int JOIN_CONTROL = 20; // 0x14
+    field public static final int LEAD_CANONICAL_COMBINING_CLASS = 4112; // 0x1010
+    field public static final int LINE_BREAK = 4104; // 0x1008
+    field public static final int LOGICAL_ORDER_EXCEPTION = 21; // 0x15
+    field public static final int LOWERCASE = 22; // 0x16
+    field public static final int LOWERCASE_MAPPING = 16388; // 0x4004
+    field public static final int MASK_START = 8192; // 0x2000
+    field public static final int MATH = 23; // 0x17
+    field public static final int NAME = 16389; // 0x4005
+    field public static final int NFC_INERT = 39; // 0x27
+    field public static final int NFC_QUICK_CHECK = 4110; // 0x100e
+    field public static final int NFD_INERT = 37; // 0x25
+    field public static final int NFD_QUICK_CHECK = 4108; // 0x100c
+    field public static final int NFKC_INERT = 40; // 0x28
+    field public static final int NFKC_QUICK_CHECK = 4111; // 0x100f
+    field public static final int NFKD_INERT = 38; // 0x26
+    field public static final int NFKD_QUICK_CHECK = 4109; // 0x100d
+    field public static final int NONCHARACTER_CODE_POINT = 24; // 0x18
+    field public static final int NUMERIC_TYPE = 4105; // 0x1009
+    field public static final int NUMERIC_VALUE = 12288; // 0x3000
+    field public static final int OTHER_PROPERTY_START = 28672; // 0x7000
+    field public static final int PATTERN_SYNTAX = 42; // 0x2a
+    field public static final int PATTERN_WHITE_SPACE = 43; // 0x2b
+    field public static final int POSIX_ALNUM = 44; // 0x2c
+    field public static final int POSIX_BLANK = 45; // 0x2d
+    field public static final int POSIX_GRAPH = 46; // 0x2e
+    field public static final int POSIX_PRINT = 47; // 0x2f
+    field public static final int POSIX_XDIGIT = 48; // 0x30
+    field public static final int PREPENDED_CONCATENATION_MARK = 63; // 0x3f
+    field public static final int QUOTATION_MARK = 25; // 0x19
+    field public static final int RADICAL = 26; // 0x1a
+    field public static final int REGIONAL_INDICATOR = 62; // 0x3e
+    field public static final int SCRIPT = 4106; // 0x100a
+    field public static final int SCRIPT_EXTENSIONS = 28672; // 0x7000
+    field public static final int SEGMENT_STARTER = 41; // 0x29
+    field public static final int SENTENCE_BREAK = 4115; // 0x1013
+    field public static final int SIMPLE_CASE_FOLDING = 16390; // 0x4006
+    field public static final int SIMPLE_LOWERCASE_MAPPING = 16391; // 0x4007
+    field public static final int SIMPLE_TITLECASE_MAPPING = 16392; // 0x4008
+    field public static final int SIMPLE_UPPERCASE_MAPPING = 16393; // 0x4009
+    field public static final int SOFT_DOTTED = 27; // 0x1b
+    field public static final int STRING_START = 16384; // 0x4000
+    field public static final int S_TERM = 35; // 0x23
+    field public static final int TERMINAL_PUNCTUATION = 28; // 0x1c
+    field public static final int TITLECASE_MAPPING = 16394; // 0x400a
+    field public static final int TRAIL_CANONICAL_COMBINING_CLASS = 4113; // 0x1011
+    field public static final int UNIFIED_IDEOGRAPH = 29; // 0x1d
+    field public static final int UPPERCASE = 30; // 0x1e
+    field public static final int UPPERCASE_MAPPING = 16396; // 0x400c
+    field public static final int VARIATION_SELECTOR = 36; // 0x24
+    field public static final int VERTICAL_ORIENTATION = 4120; // 0x1018
+    field public static final int WHITE_SPACE = 31; // 0x1f
+    field public static final int WORD_BREAK = 4116; // 0x1014
+    field public static final int XID_CONTINUE = 32; // 0x20
+    field public static final int XID_START = 33; // 0x21
+  }
+
+  public static interface UProperty.NameChoice {
+    field public static final int LONG = 1; // 0x1
+    field public static final int SHORT = 0; // 0x0
+  }
+
+  public final class UScript {
+    method public static boolean breaksBetweenLetters(int);
+    method public static int[] getCode(java.util.Locale);
+    method public static int[] getCode(android.icu.util.ULocale);
+    method public static int[] getCode(String);
+    method public static int getCodeFromName(String);
+    method public static String getName(int);
+    method public static String getSampleString(int);
+    method public static int getScript(int);
+    method public static int getScriptExtensions(int, java.util.BitSet);
+    method public static String getShortName(int);
+    method public static android.icu.lang.UScript.ScriptUsage getUsage(int);
+    method public static boolean hasScript(int, int);
+    method public static boolean isCased(int);
+    method public static boolean isRightToLeft(int);
+    field public static final int ADLAM = 167; // 0xa7
+    field public static final int AFAKA = 147; // 0x93
+    field public static final int AHOM = 161; // 0xa1
+    field public static final int ANATOLIAN_HIEROGLYPHS = 156; // 0x9c
+    field public static final int ARABIC = 2; // 0x2
+    field public static final int ARMENIAN = 3; // 0x3
+    field public static final int AVESTAN = 117; // 0x75
+    field public static final int BALINESE = 62; // 0x3e
+    field public static final int BAMUM = 130; // 0x82
+    field public static final int BASSA_VAH = 134; // 0x86
+    field public static final int BATAK = 63; // 0x3f
+    field public static final int BENGALI = 4; // 0x4
+    field public static final int BHAIKSUKI = 168; // 0xa8
+    field public static final int BLISSYMBOLS = 64; // 0x40
+    field public static final int BOOK_PAHLAVI = 124; // 0x7c
+    field public static final int BOPOMOFO = 5; // 0x5
+    field public static final int BRAHMI = 65; // 0x41
+    field public static final int BRAILLE = 46; // 0x2e
+    field public static final int BUGINESE = 55; // 0x37
+    field public static final int BUHID = 44; // 0x2c
+    field public static final int CANADIAN_ABORIGINAL = 40; // 0x28
+    field public static final int CARIAN = 104; // 0x68
+    field public static final int CAUCASIAN_ALBANIAN = 159; // 0x9f
+    field public static final int CHAKMA = 118; // 0x76
+    field public static final int CHAM = 66; // 0x42
+    field public static final int CHEROKEE = 6; // 0x6
+    field public static final int CHORASMIAN = 189; // 0xbd
+    field public static final int CIRTH = 67; // 0x43
+    field public static final int COMMON = 0; // 0x0
+    field public static final int COPTIC = 7; // 0x7
+    field public static final int CUNEIFORM = 101; // 0x65
+    field public static final int CYPRIOT = 47; // 0x2f
+    field public static final int CYRILLIC = 8; // 0x8
+    field public static final int DEMOTIC_EGYPTIAN = 69; // 0x45
+    field public static final int DESERET = 9; // 0x9
+    field public static final int DEVANAGARI = 10; // 0xa
+    field public static final int DIVES_AKURU = 190; // 0xbe
+    field public static final int DOGRA = 178; // 0xb2
+    field public static final int DUPLOYAN = 135; // 0x87
+    field public static final int EASTERN_SYRIAC = 97; // 0x61
+    field public static final int EGYPTIAN_HIEROGLYPHS = 71; // 0x47
+    field public static final int ELBASAN = 136; // 0x88
+    field public static final int ELYMAIC = 185; // 0xb9
+    field public static final int ESTRANGELO_SYRIAC = 95; // 0x5f
+    field public static final int ETHIOPIC = 11; // 0xb
+    field public static final int GEORGIAN = 12; // 0xc
+    field public static final int GLAGOLITIC = 56; // 0x38
+    field public static final int GOTHIC = 13; // 0xd
+    field public static final int GRANTHA = 137; // 0x89
+    field public static final int GREEK = 14; // 0xe
+    field public static final int GUJARATI = 15; // 0xf
+    field public static final int GUNJALA_GONDI = 179; // 0xb3
+    field public static final int GURMUKHI = 16; // 0x10
+    field public static final int HAN = 17; // 0x11
+    field public static final int HANGUL = 18; // 0x12
+    field public static final int HANIFI_ROHINGYA = 182; // 0xb6
+    field public static final int HANUNOO = 43; // 0x2b
+    field public static final int HAN_WITH_BOPOMOFO = 172; // 0xac
+    field public static final int HARAPPAN_INDUS = 77; // 0x4d
+    field public static final int HATRAN = 162; // 0xa2
+    field public static final int HEBREW = 19; // 0x13
+    field public static final int HIERATIC_EGYPTIAN = 70; // 0x46
+    field public static final int HIRAGANA = 20; // 0x14
+    field public static final int IMPERIAL_ARAMAIC = 116; // 0x74
+    field public static final int INHERITED = 1; // 0x1
+    field public static final int INSCRIPTIONAL_PAHLAVI = 122; // 0x7a
+    field public static final int INSCRIPTIONAL_PARTHIAN = 125; // 0x7d
+    field public static final int INVALID_CODE = -1; // 0xffffffff
+    field public static final int JAMO = 173; // 0xad
+    field public static final int JAPANESE = 105; // 0x69
+    field public static final int JAVANESE = 78; // 0x4e
+    field public static final int JURCHEN = 148; // 0x94
+    field public static final int KAITHI = 120; // 0x78
+    field public static final int KANNADA = 21; // 0x15
+    field public static final int KATAKANA = 22; // 0x16
+    field public static final int KATAKANA_OR_HIRAGANA = 54; // 0x36
+    field public static final int KAYAH_LI = 79; // 0x4f
+    field public static final int KHAROSHTHI = 57; // 0x39
+    field public static final int KHITAN_SMALL_SCRIPT = 191; // 0xbf
+    field public static final int KHMER = 23; // 0x17
+    field public static final int KHOJKI = 157; // 0x9d
+    field public static final int KHUDAWADI = 145; // 0x91
+    field public static final int KHUTSURI = 72; // 0x48
+    field public static final int KOREAN = 119; // 0x77
+    field public static final int KPELLE = 138; // 0x8a
+    field public static final int LANNA = 106; // 0x6a
+    field public static final int LAO = 24; // 0x18
+    field public static final int LATIN = 25; // 0x19
+    field public static final int LATIN_FRAKTUR = 80; // 0x50
+    field public static final int LATIN_GAELIC = 81; // 0x51
+    field public static final int LEPCHA = 82; // 0x52
+    field public static final int LIMBU = 48; // 0x30
+    field public static final int LINEAR_A = 83; // 0x53
+    field public static final int LINEAR_B = 49; // 0x31
+    field public static final int LISU = 131; // 0x83
+    field public static final int LOMA = 139; // 0x8b
+    field public static final int LYCIAN = 107; // 0x6b
+    field public static final int LYDIAN = 108; // 0x6c
+    field public static final int MAHAJANI = 160; // 0xa0
+    field public static final int MAKASAR = 180; // 0xb4
+    field public static final int MALAYALAM = 26; // 0x1a
+    field public static final int MANDAEAN = 84; // 0x54
+    field public static final int MANDAIC = 84; // 0x54
+    field public static final int MANICHAEAN = 121; // 0x79
+    field public static final int MARCHEN = 169; // 0xa9
+    field public static final int MASARAM_GONDI = 175; // 0xaf
+    field public static final int MATHEMATICAL_NOTATION = 128; // 0x80
+    field public static final int MAYAN_HIEROGLYPHS = 85; // 0x55
+    field public static final int MEDEFAIDRIN = 181; // 0xb5
+    field public static final int MEITEI_MAYEK = 115; // 0x73
+    field public static final int MENDE = 140; // 0x8c
+    field public static final int MEROITIC = 86; // 0x56
+    field public static final int MEROITIC_CURSIVE = 141; // 0x8d
+    field public static final int MEROITIC_HIEROGLYPHS = 86; // 0x56
+    field public static final int MIAO = 92; // 0x5c
+    field public static final int MODI = 163; // 0xa3
+    field public static final int MONGOLIAN = 27; // 0x1b
+    field public static final int MOON = 114; // 0x72
+    field public static final int MRO = 149; // 0x95
+    field public static final int MULTANI = 164; // 0xa4
+    field public static final int MYANMAR = 28; // 0x1c
+    field public static final int NABATAEAN = 143; // 0x8f
+    field public static final int NAKHI_GEBA = 132; // 0x84
+    field public static final int NANDINAGARI = 187; // 0xbb
+    field public static final int NEWA = 170; // 0xaa
+    field public static final int NEW_TAI_LUE = 59; // 0x3b
+    field public static final int NKO = 87; // 0x57
+    field public static final int NUSHU = 150; // 0x96
+    field public static final int NYIAKENG_PUACHUE_HMONG = 186; // 0xba
+    field public static final int OGHAM = 29; // 0x1d
+    field public static final int OLD_CHURCH_SLAVONIC_CYRILLIC = 68; // 0x44
+    field public static final int OLD_HUNGARIAN = 76; // 0x4c
+    field public static final int OLD_ITALIC = 30; // 0x1e
+    field public static final int OLD_NORTH_ARABIAN = 142; // 0x8e
+    field public static final int OLD_PERMIC = 89; // 0x59
+    field public static final int OLD_PERSIAN = 61; // 0x3d
+    field public static final int OLD_SOGDIAN = 184; // 0xb8
+    field public static final int OLD_SOUTH_ARABIAN = 133; // 0x85
+    field public static final int OL_CHIKI = 109; // 0x6d
+    field public static final int ORIYA = 31; // 0x1f
+    field public static final int ORKHON = 88; // 0x58
+    field public static final int OSAGE = 171; // 0xab
+    field public static final int OSMANYA = 50; // 0x32
+    field public static final int PAHAWH_HMONG = 75; // 0x4b
+    field public static final int PALMYRENE = 144; // 0x90
+    field public static final int PAU_CIN_HAU = 165; // 0xa5
+    field public static final int PHAGS_PA = 90; // 0x5a
+    field public static final int PHOENICIAN = 91; // 0x5b
+    field public static final int PHONETIC_POLLARD = 92; // 0x5c
+    field public static final int PSALTER_PAHLAVI = 123; // 0x7b
+    field public static final int REJANG = 110; // 0x6e
+    field public static final int RONGORONGO = 93; // 0x5d
+    field public static final int RUNIC = 32; // 0x20
+    field public static final int SAMARITAN = 126; // 0x7e
+    field public static final int SARATI = 94; // 0x5e
+    field public static final int SAURASHTRA = 111; // 0x6f
+    field public static final int SHARADA = 151; // 0x97
+    field public static final int SHAVIAN = 51; // 0x33
+    field public static final int SIDDHAM = 166; // 0xa6
+    field public static final int SIGN_WRITING = 112; // 0x70
+    field public static final int SIMPLIFIED_HAN = 73; // 0x49
+    field public static final int SINDHI = 145; // 0x91
+    field public static final int SINHALA = 33; // 0x21
+    field public static final int SOGDIAN = 183; // 0xb7
+    field public static final int SORA_SOMPENG = 152; // 0x98
+    field public static final int SOYOMBO = 176; // 0xb0
+    field public static final int SUNDANESE = 113; // 0x71
+    field public static final int SYLOTI_NAGRI = 58; // 0x3a
+    field public static final int SYMBOLS = 129; // 0x81
+    field public static final int SYMBOLS_EMOJI = 174; // 0xae
+    field public static final int SYRIAC = 34; // 0x22
+    field public static final int TAGALOG = 42; // 0x2a
+    field public static final int TAGBANWA = 45; // 0x2d
+    field public static final int TAI_LE = 52; // 0x34
+    field public static final int TAI_VIET = 127; // 0x7f
+    field public static final int TAKRI = 153; // 0x99
+    field public static final int TAMIL = 35; // 0x23
+    field public static final int TANGUT = 154; // 0x9a
+    field public static final int TELUGU = 36; // 0x24
+    field public static final int TENGWAR = 98; // 0x62
+    field public static final int THAANA = 37; // 0x25
+    field public static final int THAI = 38; // 0x26
+    field public static final int TIBETAN = 39; // 0x27
+    field public static final int TIFINAGH = 60; // 0x3c
+    field public static final int TIRHUTA = 158; // 0x9e
+    field public static final int TRADITIONAL_HAN = 74; // 0x4a
+    field public static final int UCAS = 40; // 0x28
+    field public static final int UGARITIC = 53; // 0x35
+    field public static final int UNKNOWN = 103; // 0x67
+    field public static final int UNWRITTEN_LANGUAGES = 102; // 0x66
+    field public static final int VAI = 99; // 0x63
+    field public static final int VISIBLE_SPEECH = 100; // 0x64
+    field public static final int WANCHO = 188; // 0xbc
+    field public static final int WARANG_CITI = 146; // 0x92
+    field public static final int WESTERN_SYRIAC = 96; // 0x60
+    field public static final int WOLEAI = 155; // 0x9b
+    field public static final int YEZIDI = 192; // 0xc0
+    field public static final int YI = 41; // 0x29
+    field public static final int ZANABAZAR_SQUARE = 177; // 0xb1
+  }
+
+  public enum UScript.ScriptUsage {
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage ASPIRATIONAL;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage EXCLUDED;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage LIMITED_USE;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage NOT_ENCODED;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage RECOMMENDED;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage UNKNOWN;
+  }
+
+}
+
+package android.icu.math {
+
+  public class BigDecimal extends java.lang.Number implements java.lang.Comparable<android.icu.math.BigDecimal> java.io.Serializable {
+    ctor public BigDecimal(java.math.BigDecimal);
+    ctor public BigDecimal(java.math.BigInteger);
+    ctor public BigDecimal(java.math.BigInteger, int);
+    ctor public BigDecimal(char[]);
+    ctor public BigDecimal(char[], int, int);
+    ctor public BigDecimal(double);
+    ctor public BigDecimal(int);
+    ctor public BigDecimal(long);
+    ctor public BigDecimal(String);
+    method public android.icu.math.BigDecimal abs();
+    method public android.icu.math.BigDecimal abs(android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal add(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal add(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public byte byteValueExact();
+    method public int compareTo(android.icu.math.BigDecimal);
+    method public int compareTo(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal, int);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal, int, int);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public double doubleValue();
+    method public float floatValue();
+    method public String format(int, int);
+    method public String format(int, int, int, int, int, int);
+    method public int intValue();
+    method public int intValueExact();
+    method public long longValue();
+    method public long longValueExact();
+    method public android.icu.math.BigDecimal max(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal max(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal min(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal min(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal movePointLeft(int);
+    method public android.icu.math.BigDecimal movePointRight(int);
+    method public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal negate();
+    method public android.icu.math.BigDecimal negate(android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal plus();
+    method public android.icu.math.BigDecimal plus(android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public int scale();
+    method public android.icu.math.BigDecimal setScale(int);
+    method public android.icu.math.BigDecimal setScale(int, int);
+    method public short shortValueExact();
+    method public int signum();
+    method public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public java.math.BigDecimal toBigDecimal();
+    method public java.math.BigInteger toBigInteger();
+    method public java.math.BigInteger toBigIntegerExact();
+    method public char[] toCharArray();
+    method public java.math.BigInteger unscaledValue();
+    method public static android.icu.math.BigDecimal valueOf(double);
+    method public static android.icu.math.BigDecimal valueOf(long);
+    method public static android.icu.math.BigDecimal valueOf(long, int);
+    field public static final android.icu.math.BigDecimal ONE;
+    field public static final int ROUND_CEILING = 2; // 0x2
+    field public static final int ROUND_DOWN = 1; // 0x1
+    field public static final int ROUND_FLOOR = 3; // 0x3
+    field public static final int ROUND_HALF_DOWN = 5; // 0x5
+    field public static final int ROUND_HALF_EVEN = 6; // 0x6
+    field public static final int ROUND_HALF_UP = 4; // 0x4
+    field public static final int ROUND_UNNECESSARY = 7; // 0x7
+    field public static final int ROUND_UP = 0; // 0x0
+    field public static final android.icu.math.BigDecimal TEN;
+    field public static final android.icu.math.BigDecimal ZERO;
+  }
+
+  public final class MathContext implements java.io.Serializable {
+    ctor public MathContext(int);
+    ctor public MathContext(int, int);
+    ctor public MathContext(int, int, boolean);
+    ctor public MathContext(int, int, boolean, int);
+    method public int getDigits();
+    method public int getForm();
+    method public boolean getLostDigits();
+    method public int getRoundingMode();
+    field public static final android.icu.math.MathContext DEFAULT;
+    field public static final int ENGINEERING = 2; // 0x2
+    field public static final int PLAIN = 0; // 0x0
+    field public static final int ROUND_CEILING = 2; // 0x2
+    field public static final int ROUND_DOWN = 1; // 0x1
+    field public static final int ROUND_FLOOR = 3; // 0x3
+    field public static final int ROUND_HALF_DOWN = 5; // 0x5
+    field public static final int ROUND_HALF_EVEN = 6; // 0x6
+    field public static final int ROUND_HALF_UP = 4; // 0x4
+    field public static final int ROUND_UNNECESSARY = 7; // 0x7
+    field public static final int ROUND_UP = 0; // 0x0
+    field public static final int SCIENTIFIC = 1; // 0x1
+  }
+
+}
+
+package android.icu.number {
+
+  public class CompactNotation extends android.icu.number.Notation {
+  }
+
+  public abstract class CurrencyPrecision extends android.icu.number.Precision {
+    method public android.icu.number.Precision withCurrency(android.icu.util.Currency);
+  }
+
+  public class FormattedNumber implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.math.BigDecimal toBigDecimal();
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public class FormattedNumberRange implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public java.math.BigDecimal getFirstBigDecimal();
+    method public android.icu.number.NumberRangeFormatter.RangeIdentityResult getIdentityResult();
+    method public java.math.BigDecimal getSecondBigDecimal();
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public abstract class FractionPrecision extends android.icu.number.Precision {
+    method public android.icu.number.Precision withMaxDigits(int);
+    method public android.icu.number.Precision withMinDigits(int);
+  }
+
+  public class IntegerWidth {
+    method public android.icu.number.IntegerWidth truncateAt(int);
+    method public static android.icu.number.IntegerWidth zeroFillTo(int);
+  }
+
+  public class LocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.LocalizedNumberFormatter> {
+    method public android.icu.number.FormattedNumber format(long);
+    method public android.icu.number.FormattedNumber format(double);
+    method public android.icu.number.FormattedNumber format(Number);
+    method public android.icu.number.FormattedNumber format(android.icu.util.Measure);
+    method public java.text.Format toFormat();
+  }
+
+  public class LocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.LocalizedNumberRangeFormatter> {
+    method public android.icu.number.FormattedNumberRange formatRange(int, int);
+    method public android.icu.number.FormattedNumberRange formatRange(double, double);
+    method public android.icu.number.FormattedNumberRange formatRange(Number, Number);
+  }
+
+  public class Notation {
+    method public static android.icu.number.CompactNotation compactLong();
+    method public static android.icu.number.CompactNotation compactShort();
+    method public static android.icu.number.ScientificNotation engineering();
+    method public static android.icu.number.ScientificNotation scientific();
+    method public static android.icu.number.SimpleNotation simple();
+  }
+
+  public final class NumberFormatter {
+    method public static android.icu.number.UnlocalizedNumberFormatter with();
+    method public static android.icu.number.LocalizedNumberFormatter withLocale(java.util.Locale);
+    method public static android.icu.number.LocalizedNumberFormatter withLocale(android.icu.util.ULocale);
+  }
+
+  public enum NumberFormatter.DecimalSeparatorDisplay {
+    enum_constant public static final android.icu.number.NumberFormatter.DecimalSeparatorDisplay ALWAYS;
+    enum_constant public static final android.icu.number.NumberFormatter.DecimalSeparatorDisplay AUTO;
+  }
+
+  public enum NumberFormatter.GroupingStrategy {
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy AUTO;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy MIN2;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy OFF;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy ON_ALIGNED;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy THOUSANDS;
+  }
+
+  public enum NumberFormatter.SignDisplay {
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ACCOUNTING;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ACCOUNTING_ALWAYS;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ACCOUNTING_EXCEPT_ZERO;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ALWAYS;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay AUTO;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay EXCEPT_ZERO;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay NEVER;
+  }
+
+  public enum NumberFormatter.UnitWidth {
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth FULL_NAME;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth HIDDEN;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth ISO_CODE;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth NARROW;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth SHORT;
+  }
+
+  public abstract class NumberFormatterSettings<T extends android.icu.number.NumberFormatterSettings<?>> {
+    method public T decimal(android.icu.number.NumberFormatter.DecimalSeparatorDisplay);
+    method public T grouping(android.icu.number.NumberFormatter.GroupingStrategy);
+    method public T integerWidth(android.icu.number.IntegerWidth);
+    method public T notation(android.icu.number.Notation);
+    method public T perUnit(android.icu.util.MeasureUnit);
+    method public T precision(android.icu.number.Precision);
+    method public T roundingMode(java.math.RoundingMode);
+    method public T scale(android.icu.number.Scale);
+    method public T sign(android.icu.number.NumberFormatter.SignDisplay);
+    method public T symbols(android.icu.text.DecimalFormatSymbols);
+    method public T symbols(android.icu.text.NumberingSystem);
+    method public T unit(android.icu.util.MeasureUnit);
+    method public T unitWidth(android.icu.number.NumberFormatter.UnitWidth);
+  }
+
+  public abstract class NumberRangeFormatter {
+    method public static android.icu.number.UnlocalizedNumberRangeFormatter with();
+    method public static android.icu.number.LocalizedNumberRangeFormatter withLocale(java.util.Locale);
+    method public static android.icu.number.LocalizedNumberRangeFormatter withLocale(android.icu.util.ULocale);
+  }
+
+  public enum NumberRangeFormatter.RangeCollapse {
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse ALL;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse AUTO;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse NONE;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse UNIT;
+  }
+
+  public enum NumberRangeFormatter.RangeIdentityFallback {
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback APPROXIMATELY;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback APPROXIMATELY_OR_SINGLE_VALUE;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback RANGE;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback SINGLE_VALUE;
+  }
+
+  public enum NumberRangeFormatter.RangeIdentityResult {
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityResult EQUAL_AFTER_ROUNDING;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityResult EQUAL_BEFORE_ROUNDING;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityResult NOT_EQUAL;
+  }
+
+  public abstract class NumberRangeFormatterSettings<T extends android.icu.number.NumberRangeFormatterSettings<?>> {
+    method public T collapse(android.icu.number.NumberRangeFormatter.RangeCollapse);
+    method public T identityFallback(android.icu.number.NumberRangeFormatter.RangeIdentityFallback);
+    method public T numberFormatterBoth(android.icu.number.UnlocalizedNumberFormatter);
+    method public T numberFormatterFirst(android.icu.number.UnlocalizedNumberFormatter);
+    method public T numberFormatterSecond(android.icu.number.UnlocalizedNumberFormatter);
+  }
+
+  public abstract class Precision {
+    method public static android.icu.number.CurrencyPrecision currency(android.icu.util.Currency.CurrencyUsage);
+    method public static android.icu.number.FractionPrecision fixedFraction(int);
+    method public static android.icu.number.Precision fixedSignificantDigits(int);
+    method public static android.icu.number.Precision increment(java.math.BigDecimal);
+    method public static android.icu.number.FractionPrecision integer();
+    method public static android.icu.number.FractionPrecision maxFraction(int);
+    method public static android.icu.number.Precision maxSignificantDigits(int);
+    method public static android.icu.number.FractionPrecision minFraction(int);
+    method public static android.icu.number.FractionPrecision minMaxFraction(int, int);
+    method public static android.icu.number.Precision minMaxSignificantDigits(int, int);
+    method public static android.icu.number.Precision minSignificantDigits(int);
+    method public static android.icu.number.Precision unlimited();
+  }
+
+  public class Scale {
+    method public static android.icu.number.Scale byBigDecimal(java.math.BigDecimal);
+    method public static android.icu.number.Scale byDouble(double);
+    method public static android.icu.number.Scale byDoubleAndPowerOfTen(double, int);
+    method public static android.icu.number.Scale none();
+    method public static android.icu.number.Scale powerOfTen(int);
+  }
+
+  public class ScientificNotation extends android.icu.number.Notation {
+    method public android.icu.number.ScientificNotation withExponentSignDisplay(android.icu.number.NumberFormatter.SignDisplay);
+    method public android.icu.number.ScientificNotation withMinExponentDigits(int);
+  }
+
+  public class SimpleNotation extends android.icu.number.Notation {
+  }
+
+  public class UnlocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.UnlocalizedNumberFormatter> {
+    method public android.icu.number.LocalizedNumberFormatter locale(java.util.Locale);
+    method public android.icu.number.LocalizedNumberFormatter locale(android.icu.util.ULocale);
+  }
+
+  public class UnlocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.UnlocalizedNumberRangeFormatter> {
+    method public android.icu.number.LocalizedNumberRangeFormatter locale(java.util.Locale);
+    method public android.icu.number.LocalizedNumberRangeFormatter locale(android.icu.util.ULocale);
+  }
+
+}
+
+package android.icu.text {
+
+  public final class AlphabeticIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+    ctor public AlphabeticIndex(android.icu.util.ULocale);
+    ctor public AlphabeticIndex(java.util.Locale);
+    ctor public AlphabeticIndex(android.icu.text.RuleBasedCollator);
+    method public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.text.UnicodeSet);
+    method public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.util.ULocale...);
+    method public android.icu.text.AlphabeticIndex<V> addLabels(java.util.Locale...);
+    method public android.icu.text.AlphabeticIndex<V> addRecord(CharSequence, V);
+    method public android.icu.text.AlphabeticIndex.ImmutableIndex<V> buildImmutableIndex();
+    method public android.icu.text.AlphabeticIndex<V> clearRecords();
+    method public int getBucketCount();
+    method public int getBucketIndex(CharSequence);
+    method public java.util.List<java.lang.String> getBucketLabels();
+    method public android.icu.text.RuleBasedCollator getCollator();
+    method public String getInflowLabel();
+    method public int getMaxLabelCount();
+    method public String getOverflowLabel();
+    method public int getRecordCount();
+    method public String getUnderflowLabel();
+    method public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator();
+    method public android.icu.text.AlphabeticIndex<V> setInflowLabel(String);
+    method public android.icu.text.AlphabeticIndex<V> setMaxLabelCount(int);
+    method public android.icu.text.AlphabeticIndex<V> setOverflowLabel(String);
+    method public android.icu.text.AlphabeticIndex<V> setUnderflowLabel(String);
+  }
+
+  public static class AlphabeticIndex.Bucket<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Record<V>> {
+    method public String getLabel();
+    method public android.icu.text.AlphabeticIndex.Bucket.LabelType getLabelType();
+    method public java.util.Iterator<android.icu.text.AlphabeticIndex.Record<V>> iterator();
+    method public int size();
+  }
+
+  public enum AlphabeticIndex.Bucket.LabelType {
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType INFLOW;
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType NORMAL;
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType OVERFLOW;
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType UNDERFLOW;
+  }
+
+  public static final class AlphabeticIndex.ImmutableIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+    method public android.icu.text.AlphabeticIndex.Bucket<V> getBucket(int);
+    method public int getBucketCount();
+    method public int getBucketIndex(CharSequence);
+    method public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator();
+  }
+
+  public static class AlphabeticIndex.Record<V> {
+    method public V getData();
+    method public CharSequence getName();
+  }
+
+  public class Bidi {
+    ctor public Bidi();
+    ctor public Bidi(int, int);
+    ctor public Bidi(String, int);
+    ctor public Bidi(java.text.AttributedCharacterIterator);
+    ctor public Bidi(char[], int, byte[], int, int, int);
+    method public boolean baseIsLeftToRight();
+    method public int countParagraphs();
+    method public int countRuns();
+    method public android.icu.text.Bidi createLineBidi(int, int);
+    method public static byte getBaseDirection(CharSequence);
+    method public int getBaseLevel();
+    method public android.icu.text.BidiClassifier getCustomClassifier();
+    method public int getCustomizedClass(int);
+    method public byte getDirection();
+    method public int getLength();
+    method public byte getLevelAt(int);
+    method public byte[] getLevels();
+    method public int getLogicalIndex(int);
+    method public int[] getLogicalMap();
+    method public android.icu.text.BidiRun getLogicalRun(int);
+    method public byte getParaLevel();
+    method public android.icu.text.BidiRun getParagraph(int);
+    method public android.icu.text.BidiRun getParagraphByIndex(int);
+    method public int getParagraphIndex(int);
+    method public int getProcessedLength();
+    method public int getReorderingMode();
+    method public int getReorderingOptions();
+    method public int getResultLength();
+    method public int getRunCount();
+    method public int getRunLevel(int);
+    method public int getRunLimit(int);
+    method public int getRunStart(int);
+    method public char[] getText();
+    method public String getTextAsString();
+    method public int getVisualIndex(int);
+    method public int[] getVisualMap();
+    method public android.icu.text.BidiRun getVisualRun(int);
+    method public static int[] invertMap(int[]);
+    method public boolean isInverse();
+    method public boolean isLeftToRight();
+    method public boolean isMixed();
+    method public boolean isOrderParagraphsLTR();
+    method public boolean isRightToLeft();
+    method public void orderParagraphsLTR(boolean);
+    method public static int[] reorderLogical(byte[]);
+    method public static int[] reorderVisual(byte[]);
+    method public static void reorderVisually(byte[], int, Object[], int, int);
+    method public static boolean requiresBidi(char[], int, int);
+    method public void setContext(String, String);
+    method public void setCustomClassifier(android.icu.text.BidiClassifier);
+    method public void setInverse(boolean);
+    method public android.icu.text.Bidi setLine(int, int);
+    method public void setPara(String, byte, byte[]);
+    method public void setPara(char[], byte, byte[]);
+    method public void setPara(java.text.AttributedCharacterIterator);
+    method public void setReorderingMode(int);
+    method public void setReorderingOptions(int);
+    method public String writeReordered(int);
+    method public static String writeReverse(String, int);
+    field public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = 126; // 0x7e
+    field public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = 127; // 0x7f
+    field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final short DO_MIRRORING = 2; // 0x2
+    field public static final short INSERT_LRM_FOR_NUMERIC = 4; // 0x4
+    field public static final short KEEP_BASE_COMBINING = 1; // 0x1
+    field public static final byte LEVEL_DEFAULT_LTR = 126; // 0x7e
+    field public static final byte LEVEL_DEFAULT_RTL = 127; // 0x7f
+    field public static final byte LEVEL_OVERRIDE = -128; // 0xffffff80
+    field public static final byte LTR = 0; // 0x0
+    field public static final int MAP_NOWHERE = -1; // 0xffffffff
+    field public static final byte MAX_EXPLICIT_LEVEL = 125; // 0x7d
+    field public static final byte MIXED = 2; // 0x2
+    field public static final byte NEUTRAL = 3; // 0x3
+    field public static final int OPTION_DEFAULT = 0; // 0x0
+    field public static final int OPTION_INSERT_MARKS = 1; // 0x1
+    field public static final int OPTION_REMOVE_CONTROLS = 2; // 0x2
+    field public static final int OPTION_STREAMING = 4; // 0x4
+    field public static final short OUTPUT_REVERSE = 16; // 0x10
+    field public static final short REMOVE_BIDI_CONTROLS = 8; // 0x8
+    field public static final short REORDER_DEFAULT = 0; // 0x0
+    field public static final short REORDER_GROUP_NUMBERS_WITH_R = 2; // 0x2
+    field public static final short REORDER_INVERSE_FOR_NUMBERS_SPECIAL = 6; // 0x6
+    field public static final short REORDER_INVERSE_LIKE_DIRECT = 5; // 0x5
+    field public static final short REORDER_INVERSE_NUMBERS_AS_L = 4; // 0x4
+    field public static final short REORDER_NUMBERS_SPECIAL = 1; // 0x1
+    field public static final short REORDER_RUNS_ONLY = 3; // 0x3
+    field public static final byte RTL = 1; // 0x1
+  }
+
+  public class BidiClassifier {
+    ctor public BidiClassifier(Object);
+    method public int classify(int);
+    method public Object getContext();
+    method public void setContext(Object);
+  }
+
+  public class BidiRun {
+    method public byte getDirection();
+    method public byte getEmbeddingLevel();
+    method public int getLength();
+    method public int getLimit();
+    method public int getStart();
+    method public boolean isEvenRun();
+    method public boolean isOddRun();
+  }
+
+  public abstract class BreakIterator implements java.lang.Cloneable {
+    ctor protected BreakIterator();
+    method public Object clone();
+    method public abstract int current();
+    method public abstract int first();
+    method public abstract int following(int);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static android.icu.text.BreakIterator getCharacterInstance();
+    method public static android.icu.text.BreakIterator getCharacterInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getCharacterInstance(android.icu.util.ULocale);
+    method public static android.icu.text.BreakIterator getLineInstance();
+    method public static android.icu.text.BreakIterator getLineInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getLineInstance(android.icu.util.ULocale);
+    method public int getRuleStatus();
+    method public int getRuleStatusVec(int[]);
+    method public static android.icu.text.BreakIterator getSentenceInstance();
+    method public static android.icu.text.BreakIterator getSentenceInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getSentenceInstance(android.icu.util.ULocale);
+    method public abstract java.text.CharacterIterator getText();
+    method @Deprecated public static android.icu.text.BreakIterator getTitleInstance();
+    method @Deprecated public static android.icu.text.BreakIterator getTitleInstance(java.util.Locale);
+    method @Deprecated public static android.icu.text.BreakIterator getTitleInstance(android.icu.util.ULocale);
+    method public static android.icu.text.BreakIterator getWordInstance();
+    method public static android.icu.text.BreakIterator getWordInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getWordInstance(android.icu.util.ULocale);
+    method public boolean isBoundary(int);
+    method public abstract int last();
+    method public abstract int next(int);
+    method public abstract int next();
+    method public int preceding(int);
+    method public abstract int previous();
+    method public void setText(String);
+    method public void setText(CharSequence);
+    method public abstract void setText(java.text.CharacterIterator);
+    field public static final int DONE = -1; // 0xffffffff
+    field public static final int KIND_CHARACTER = 0; // 0x0
+    field public static final int KIND_LINE = 2; // 0x2
+    field public static final int KIND_SENTENCE = 3; // 0x3
+    field @Deprecated public static final int KIND_TITLE = 4; // 0x4
+    field public static final int KIND_WORD = 1; // 0x1
+    field public static final int WORD_IDEO = 400; // 0x190
+    field public static final int WORD_IDEO_LIMIT = 500; // 0x1f4
+    field public static final int WORD_KANA = 300; // 0x12c
+    field public static final int WORD_KANA_LIMIT = 400; // 0x190
+    field public static final int WORD_LETTER = 200; // 0xc8
+    field public static final int WORD_LETTER_LIMIT = 300; // 0x12c
+    field public static final int WORD_NONE = 0; // 0x0
+    field public static final int WORD_NONE_LIMIT = 100; // 0x64
+    field public static final int WORD_NUMBER = 100; // 0x64
+    field public static final int WORD_NUMBER_LIMIT = 200; // 0xc8
+  }
+
+  public abstract class CaseMap {
+    method public static android.icu.text.CaseMap.Fold fold();
+    method public abstract android.icu.text.CaseMap omitUnchangedText();
+    method public static android.icu.text.CaseMap.Lower toLower();
+    method public static android.icu.text.CaseMap.Title toTitle();
+    method public static android.icu.text.CaseMap.Upper toUpper();
+  }
+
+  public static final class CaseMap.Fold extends android.icu.text.CaseMap {
+    method public String apply(CharSequence);
+    method public <A extends java.lang.Appendable> A apply(CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Fold omitUnchangedText();
+    method public android.icu.text.CaseMap.Fold turkic();
+  }
+
+  public static final class CaseMap.Lower extends android.icu.text.CaseMap {
+    method public String apply(java.util.Locale, CharSequence);
+    method public <A extends java.lang.Appendable> A apply(java.util.Locale, CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Lower omitUnchangedText();
+  }
+
+  public static final class CaseMap.Title extends android.icu.text.CaseMap {
+    method public android.icu.text.CaseMap.Title adjustToCased();
+    method public String apply(java.util.Locale, android.icu.text.BreakIterator, CharSequence);
+    method public <A extends java.lang.Appendable> A apply(java.util.Locale, android.icu.text.BreakIterator, CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Title noBreakAdjustment();
+    method public android.icu.text.CaseMap.Title noLowercase();
+    method public android.icu.text.CaseMap.Title omitUnchangedText();
+    method public android.icu.text.CaseMap.Title sentences();
+    method public android.icu.text.CaseMap.Title wholeString();
+  }
+
+  public static final class CaseMap.Upper extends android.icu.text.CaseMap {
+    method public String apply(java.util.Locale, CharSequence);
+    method public <A extends java.lang.Appendable> A apply(java.util.Locale, CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Upper omitUnchangedText();
+  }
+
+  public final class CollationElementIterator {
+    method public int getMaxExpansion(int);
+    method public int getOffset();
+    method public int next();
+    method public int previous();
+    method public static int primaryOrder(int);
+    method public void reset();
+    method public static int secondaryOrder(int);
+    method public void setOffset(int);
+    method public void setText(String);
+    method public void setText(android.icu.text.UCharacterIterator);
+    method public void setText(java.text.CharacterIterator);
+    method public static int tertiaryOrder(int);
+    field public static final int IGNORABLE = 0; // 0x0
+    field public static final int NULLORDER = -1; // 0xffffffff
+  }
+
+  public final class CollationKey implements java.lang.Comparable<android.icu.text.CollationKey> {
+    ctor public CollationKey(String, byte[]);
+    method public int compareTo(android.icu.text.CollationKey);
+    method public boolean equals(android.icu.text.CollationKey);
+    method public android.icu.text.CollationKey getBound(int, int);
+    method public String getSourceString();
+    method public android.icu.text.CollationKey merge(android.icu.text.CollationKey);
+    method public byte[] toByteArray();
+  }
+
+  public static final class CollationKey.BoundMode {
+    field public static final int LOWER = 0; // 0x0
+    field public static final int UPPER = 1; // 0x1
+    field public static final int UPPER_LONG = 2; // 0x2
+  }
+
+  public abstract class Collator implements java.lang.Cloneable java.util.Comparator<java.lang.Object> android.icu.util.Freezable<android.icu.text.Collator> {
+    ctor protected Collator();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method public android.icu.text.Collator cloneAsThawed();
+    method public abstract int compare(String, String);
+    method public int compare(Object, Object);
+    method public boolean equals(String, String);
+    method public android.icu.text.Collator freeze();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static final android.icu.util.ULocale[] getAvailableULocales();
+    method public abstract android.icu.text.CollationKey getCollationKey(String);
+    method public int getDecomposition();
+    method public static String getDisplayName(java.util.Locale, java.util.Locale);
+    method public static String getDisplayName(android.icu.util.ULocale, android.icu.util.ULocale);
+    method public static String getDisplayName(java.util.Locale);
+    method public static String getDisplayName(android.icu.util.ULocale);
+    method public static int[] getEquivalentReorderCodes(int);
+    method public static final android.icu.util.ULocale getFunctionalEquivalent(String, android.icu.util.ULocale, boolean[]);
+    method public static final android.icu.util.ULocale getFunctionalEquivalent(String, android.icu.util.ULocale);
+    method public static final android.icu.text.Collator getInstance();
+    method public static final android.icu.text.Collator getInstance(android.icu.util.ULocale);
+    method public static final android.icu.text.Collator getInstance(java.util.Locale);
+    method public static final String[] getKeywordValues(String);
+    method public static final String[] getKeywordValuesForLocale(String, android.icu.util.ULocale, boolean);
+    method public static final String[] getKeywords();
+    method public int getMaxVariable();
+    method public int[] getReorderCodes();
+    method public int getStrength();
+    method public android.icu.text.UnicodeSet getTailoredSet();
+    method public abstract android.icu.util.VersionInfo getUCAVersion();
+    method public abstract int getVariableTop();
+    method public abstract android.icu.util.VersionInfo getVersion();
+    method public boolean isFrozen();
+    method public void setDecomposition(int);
+    method public android.icu.text.Collator setMaxVariable(int);
+    method public void setReorderCodes(int...);
+    method public void setStrength(int);
+    field public static final int CANONICAL_DECOMPOSITION = 17; // 0x11
+    field public static final int FULL_DECOMPOSITION = 15; // 0xf
+    field public static final int IDENTICAL = 15; // 0xf
+    field public static final int NO_DECOMPOSITION = 16; // 0x10
+    field public static final int PRIMARY = 0; // 0x0
+    field public static final int QUATERNARY = 3; // 0x3
+    field public static final int SECONDARY = 1; // 0x1
+    field public static final int TERTIARY = 2; // 0x2
+  }
+
+  public static interface Collator.ReorderCodes {
+    field public static final int CURRENCY = 4099; // 0x1003
+    field public static final int DEFAULT = -1; // 0xffffffff
+    field public static final int DIGIT = 4100; // 0x1004
+    field public static final int FIRST = 4096; // 0x1000
+    field public static final int NONE = 103; // 0x67
+    field public static final int OTHERS = 103; // 0x67
+    field public static final int PUNCTUATION = 4097; // 0x1001
+    field public static final int SPACE = 4096; // 0x1000
+    field public static final int SYMBOL = 4098; // 0x1002
+  }
+
+  public class CompactDecimalFormat extends android.icu.text.DecimalFormat {
+    method public static android.icu.text.CompactDecimalFormat getInstance(android.icu.util.ULocale, android.icu.text.CompactDecimalFormat.CompactStyle);
+    method public static android.icu.text.CompactDecimalFormat getInstance(java.util.Locale, android.icu.text.CompactDecimalFormat.CompactStyle);
+  }
+
+  public enum CompactDecimalFormat.CompactStyle {
+    enum_constant public static final android.icu.text.CompactDecimalFormat.CompactStyle LONG;
+    enum_constant public static final android.icu.text.CompactDecimalFormat.CompactStyle SHORT;
+  }
+
+  public class ConstrainedFieldPosition {
+    ctor public ConstrainedFieldPosition();
+    method public void constrainClass(Class<?>);
+    method public void constrainField(java.text.Format.Field);
+    method public java.text.Format.Field getField();
+    method public Object getFieldValue();
+    method public long getInt64IterationContext();
+    method public int getLimit();
+    method public int getStart();
+    method public boolean matchesField(java.text.Format.Field, Object);
+    method public void reset();
+    method public void setInt64IterationContext(long);
+    method public void setState(java.text.Format.Field, Object, int, int);
+  }
+
+  public class CurrencyPluralInfo implements java.lang.Cloneable java.io.Serializable {
+    ctor public CurrencyPluralInfo();
+    ctor public CurrencyPluralInfo(java.util.Locale);
+    ctor public CurrencyPluralInfo(android.icu.util.ULocale);
+    method public Object clone();
+    method public String getCurrencyPluralPattern(String);
+    method public static android.icu.text.CurrencyPluralInfo getInstance();
+    method public static android.icu.text.CurrencyPluralInfo getInstance(java.util.Locale);
+    method public static android.icu.text.CurrencyPluralInfo getInstance(android.icu.util.ULocale);
+    method public android.icu.util.ULocale getLocale();
+    method public android.icu.text.PluralRules getPluralRules();
+    method public void setCurrencyPluralPattern(String, String);
+    method public void setLocale(android.icu.util.ULocale);
+    method public void setPluralRules(String);
+  }
+
+  public abstract class DateFormat extends android.icu.text.UFormat {
+    ctor protected DateFormat();
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(android.icu.util.Calendar, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(java.util.Date, StringBuffer, java.text.FieldPosition);
+    method public final String format(java.util.Date);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public boolean getBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute);
+    method public android.icu.util.Calendar getCalendar();
+    method public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type);
+    method public static final android.icu.text.DateFormat getDateInstance();
+    method public static final android.icu.text.DateFormat getDateInstance(int);
+    method public static final android.icu.text.DateFormat getDateInstance(int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateInstance(int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar, int);
+    method public static final android.icu.text.DateFormat getDateTimeInstance();
+    method public static final android.icu.text.DateFormat getDateTimeInstance(int, int);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(int, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(int, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar, int, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar, int, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar, int, int);
+    method public static final android.icu.text.DateFormat getInstance();
+    method public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar, java.util.Locale);
+    method public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(String);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar, String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar, String, android.icu.util.ULocale);
+    method public android.icu.text.NumberFormat getNumberFormat();
+    method public static final android.icu.text.DateFormat getPatternInstance(String);
+    method public static final android.icu.text.DateFormat getPatternInstance(String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getPatternInstance(String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar, String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar, String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getTimeInstance();
+    method public static final android.icu.text.DateFormat getTimeInstance(int);
+    method public static final android.icu.text.DateFormat getTimeInstance(int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getTimeInstance(int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar, int);
+    method public android.icu.util.TimeZone getTimeZone();
+    method public boolean isCalendarLenient();
+    method public boolean isLenient();
+    method public java.util.Date parse(String) throws java.text.ParseException;
+    method public abstract void parse(String, android.icu.util.Calendar, java.text.ParsePosition);
+    method public java.util.Date parse(String, java.text.ParsePosition);
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public android.icu.text.DateFormat setBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute, boolean);
+    method public void setCalendar(android.icu.util.Calendar);
+    method public void setCalendarLenient(boolean);
+    method public void setContext(android.icu.text.DisplayContext);
+    method public void setLenient(boolean);
+    method public void setNumberFormat(android.icu.text.NumberFormat);
+    method public void setTimeZone(android.icu.util.TimeZone);
+    field public static final String ABBR_GENERIC_TZ = "v";
+    field public static final String ABBR_MONTH = "MMM";
+    field public static final String ABBR_MONTH_DAY = "MMMd";
+    field public static final String ABBR_MONTH_WEEKDAY_DAY = "MMMEd";
+    field public static final String ABBR_QUARTER = "QQQ";
+    field public static final String ABBR_SPECIFIC_TZ = "z";
+    field public static final String ABBR_UTC_TZ = "ZZZZ";
+    field public static final String ABBR_WEEKDAY = "E";
+    field public static final int AM_PM_FIELD = 14; // 0xe
+    field public static final int AM_PM_MIDNIGHT_NOON_FIELD = 35; // 0x23
+    field public static final int DATE_FIELD = 3; // 0x3
+    field public static final String DAY = "d";
+    field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
+    field public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; // 0xb
+    field public static final int DAY_OF_YEAR_FIELD = 10; // 0xa
+    field public static final int DEFAULT = 2; // 0x2
+    field public static final int DOW_LOCAL_FIELD = 19; // 0x13
+    field public static final int ERA_FIELD = 0; // 0x0
+    field public static final int EXTENDED_YEAR_FIELD = 20; // 0x14
+    field public static final int FLEXIBLE_DAY_PERIOD_FIELD = 36; // 0x24
+    field public static final int FRACTIONAL_SECOND_FIELD = 8; // 0x8
+    field public static final int FULL = 0; // 0x0
+    field public static final String GENERIC_TZ = "vvvv";
+    field public static final String HOUR = "j";
+    field public static final int HOUR0_FIELD = 16; // 0x10
+    field public static final int HOUR1_FIELD = 15; // 0xf
+    field public static final String HOUR24 = "H";
+    field public static final String HOUR24_MINUTE = "Hm";
+    field public static final String HOUR24_MINUTE_SECOND = "Hms";
+    field public static final String HOUR_MINUTE = "jm";
+    field public static final String HOUR_MINUTE_SECOND = "jms";
+    field public static final int HOUR_OF_DAY0_FIELD = 5; // 0x5
+    field public static final int HOUR_OF_DAY1_FIELD = 4; // 0x4
+    field public static final int JULIAN_DAY_FIELD = 21; // 0x15
+    field public static final String LOCATION_TZ = "VVVV";
+    field public static final int LONG = 1; // 0x1
+    field public static final int MEDIUM = 2; // 0x2
+    field public static final int MILLISECONDS_IN_DAY_FIELD = 22; // 0x16
+    field public static final int MILLISECOND_FIELD = 8; // 0x8
+    field public static final String MINUTE = "m";
+    field public static final int MINUTE_FIELD = 6; // 0x6
+    field public static final String MINUTE_SECOND = "ms";
+    field public static final String MONTH = "MMMM";
+    field public static final String MONTH_DAY = "MMMMd";
+    field public static final int MONTH_FIELD = 2; // 0x2
+    field public static final String MONTH_WEEKDAY_DAY = "MMMMEEEEd";
+    field public static final int NONE = -1; // 0xffffffff
+    field public static final String NUM_MONTH = "M";
+    field public static final String NUM_MONTH_DAY = "Md";
+    field public static final String NUM_MONTH_WEEKDAY_DAY = "MEd";
+    field public static final String QUARTER = "QQQQ";
+    field public static final int QUARTER_FIELD = 27; // 0x1b
+    field public static final int RELATIVE = 128; // 0x80
+    field public static final int RELATIVE_DEFAULT = 130; // 0x82
+    field public static final int RELATIVE_FULL = 128; // 0x80
+    field public static final int RELATIVE_LONG = 129; // 0x81
+    field public static final int RELATIVE_MEDIUM = 130; // 0x82
+    field public static final int RELATIVE_SHORT = 131; // 0x83
+    field public static final String SECOND = "s";
+    field public static final int SECOND_FIELD = 7; // 0x7
+    field public static final int SHORT = 3; // 0x3
+    field public static final String SPECIFIC_TZ = "zzzz";
+    field public static final int STANDALONE_DAY_FIELD = 25; // 0x19
+    field public static final int STANDALONE_MONTH_FIELD = 26; // 0x1a
+    field public static final int STANDALONE_QUARTER_FIELD = 28; // 0x1c
+    field public static final int TIMEZONE_FIELD = 17; // 0x11
+    field public static final int TIMEZONE_GENERIC_FIELD = 24; // 0x18
+    field public static final int TIMEZONE_ISO_FIELD = 32; // 0x20
+    field public static final int TIMEZONE_ISO_LOCAL_FIELD = 33; // 0x21
+    field public static final int TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31; // 0x1f
+    field public static final int TIMEZONE_RFC_FIELD = 23; // 0x17
+    field public static final int TIMEZONE_SPECIAL_FIELD = 29; // 0x1d
+    field public static final String WEEKDAY = "EEEE";
+    field public static final int WEEK_OF_MONTH_FIELD = 13; // 0xd
+    field public static final int WEEK_OF_YEAR_FIELD = 12; // 0xc
+    field public static final String YEAR = "y";
+    field public static final String YEAR_ABBR_MONTH = "yMMM";
+    field public static final String YEAR_ABBR_MONTH_DAY = "yMMMd";
+    field public static final String YEAR_ABBR_MONTH_WEEKDAY_DAY = "yMMMEd";
+    field public static final String YEAR_ABBR_QUARTER = "yQQQ";
+    field public static final int YEAR_FIELD = 1; // 0x1
+    field public static final String YEAR_MONTH = "yMMMM";
+    field public static final String YEAR_MONTH_DAY = "yMMMMd";
+    field public static final String YEAR_MONTH_WEEKDAY_DAY = "yMMMMEEEEd";
+    field public static final int YEAR_NAME_FIELD = 30; // 0x1e
+    field public static final String YEAR_NUM_MONTH = "yM";
+    field public static final String YEAR_NUM_MONTH_DAY = "yMd";
+    field public static final String YEAR_NUM_MONTH_WEEKDAY_DAY = "yMEd";
+    field public static final String YEAR_QUARTER = "yQQQQ";
+    field public static final int YEAR_WOY_FIELD = 18; // 0x12
+    field protected android.icu.util.Calendar calendar;
+    field protected android.icu.text.NumberFormat numberFormat;
+  }
+
+  public enum DateFormat.BooleanAttribute {
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_ALLOW_NUMERIC;
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_ALLOW_WHITESPACE;
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_MULTIPLE_PATTERNS_FOR_MATCH;
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_PARTIAL_LITERAL_MATCH;
+  }
+
+  public static class DateFormat.Field extends java.text.Format.Field {
+    ctor protected DateFormat.Field(String, int);
+    method public int getCalendarField();
+    method public static android.icu.text.DateFormat.Field ofCalendarField(int);
+    field public static final android.icu.text.DateFormat.Field AM_PM;
+    field public static final android.icu.text.DateFormat.Field AM_PM_MIDNIGHT_NOON;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_MONTH;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_YEAR;
+    field public static final android.icu.text.DateFormat.Field DOW_LOCAL;
+    field public static final android.icu.text.DateFormat.Field ERA;
+    field public static final android.icu.text.DateFormat.Field EXTENDED_YEAR;
+    field public static final android.icu.text.DateFormat.Field FLEXIBLE_DAY_PERIOD;
+    field public static final android.icu.text.DateFormat.Field HOUR0;
+    field public static final android.icu.text.DateFormat.Field HOUR1;
+    field public static final android.icu.text.DateFormat.Field HOUR_OF_DAY0;
+    field public static final android.icu.text.DateFormat.Field HOUR_OF_DAY1;
+    field public static final android.icu.text.DateFormat.Field JULIAN_DAY;
+    field public static final android.icu.text.DateFormat.Field MILLISECOND;
+    field public static final android.icu.text.DateFormat.Field MILLISECONDS_IN_DAY;
+    field public static final android.icu.text.DateFormat.Field MINUTE;
+    field public static final android.icu.text.DateFormat.Field MONTH;
+    field public static final android.icu.text.DateFormat.Field QUARTER;
+    field public static final android.icu.text.DateFormat.Field SECOND;
+    field public static final android.icu.text.DateFormat.Field TIME_ZONE;
+    field public static final android.icu.text.DateFormat.Field WEEK_OF_MONTH;
+    field public static final android.icu.text.DateFormat.Field WEEK_OF_YEAR;
+    field public static final android.icu.text.DateFormat.Field YEAR;
+    field public static final android.icu.text.DateFormat.Field YEAR_WOY;
+  }
+
+  public class DateFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DateFormatSymbols();
+    ctor public DateFormatSymbols(java.util.Locale);
+    ctor public DateFormatSymbols(android.icu.util.ULocale);
+    ctor public DateFormatSymbols(android.icu.util.Calendar, java.util.Locale);
+    ctor public DateFormatSymbols(android.icu.util.Calendar, android.icu.util.ULocale);
+    ctor public DateFormatSymbols(Class<? extends android.icu.util.Calendar>, java.util.Locale);
+    ctor public DateFormatSymbols(Class<? extends android.icu.util.Calendar>, android.icu.util.ULocale);
+    ctor public DateFormatSymbols(java.util.ResourceBundle, java.util.Locale);
+    ctor public DateFormatSymbols(java.util.ResourceBundle, android.icu.util.ULocale);
+    method public Object clone();
+    method public String[] getAmPmStrings();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public String[] getEraNames();
+    method public String[] getEras();
+    method public static android.icu.text.DateFormatSymbols getInstance();
+    method public static android.icu.text.DateFormatSymbols getInstance(java.util.Locale);
+    method public static android.icu.text.DateFormatSymbols getInstance(android.icu.util.ULocale);
+    method public String getLocalPatternChars();
+    method public String[] getMonths();
+    method public String[] getMonths(int, int);
+    method public String[] getNarrowEras();
+    method public String[] getQuarters(int, int);
+    method public String[] getShortMonths();
+    method public String[] getShortWeekdays();
+    method public String[] getWeekdays();
+    method public String[] getWeekdays(int, int);
+    method public String[] getYearNames(int, int);
+    method public String[] getZodiacNames(int, int);
+    method public String[][] getZoneStrings();
+    method protected void initializeData(android.icu.util.ULocale, String);
+    method public void setAmPmStrings(String[]);
+    method public void setEraNames(String[]);
+    method public void setEras(String[]);
+    method public void setLocalPatternChars(String);
+    method public void setMonths(String[]);
+    method public void setMonths(String[], int, int);
+    method public void setNarrowEras(String[]);
+    method public void setQuarters(String[], int, int);
+    method public void setShortMonths(String[]);
+    method public void setShortWeekdays(String[]);
+    method public void setWeekdays(String[], int, int);
+    method public void setWeekdays(String[]);
+    method public void setYearNames(String[], int, int);
+    method public void setZodiacNames(String[], int, int);
+    method public void setZoneStrings(String[][]);
+    field public static final int ABBREVIATED = 0; // 0x0
+    field public static final int FORMAT = 0; // 0x0
+    field public static final int NARROW = 2; // 0x2
+    field public static final int SHORT = 3; // 0x3
+    field public static final int STANDALONE = 1; // 0x1
+    field public static final int WIDE = 1; // 0x1
+  }
+
+  public class DateIntervalFormat extends android.icu.text.UFormat {
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public final StringBuffer format(android.icu.util.DateInterval, StringBuffer, java.text.FieldPosition);
+    method public final StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, StringBuffer, java.text.FieldPosition);
+    method public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.DateInterval);
+    method public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.Calendar, android.icu.util.Calendar);
+    method public android.icu.text.DateFormat getDateFormat();
+    method public android.icu.text.DateIntervalInfo getDateIntervalInfo();
+    method public static final android.icu.text.DateIntervalFormat getInstance(String);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, java.util.Locale);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, android.icu.text.DateIntervalInfo);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, java.util.Locale, android.icu.text.DateIntervalInfo);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, android.icu.util.ULocale, android.icu.text.DateIntervalInfo);
+    method public android.icu.util.TimeZone getTimeZone();
+    method @Deprecated public Object parseObject(String, java.text.ParsePosition);
+    method public void setDateIntervalInfo(android.icu.text.DateIntervalInfo);
+    method public void setTimeZone(android.icu.util.TimeZone);
+  }
+
+  public static final class DateIntervalFormat.FormattedDateInterval implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public class DateIntervalInfo implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.DateIntervalInfo> java.io.Serializable {
+    ctor public DateIntervalInfo(android.icu.util.ULocale);
+    ctor public DateIntervalInfo(java.util.Locale);
+    method public Object clone();
+    method public android.icu.text.DateIntervalInfo cloneAsThawed();
+    method public android.icu.text.DateIntervalInfo freeze();
+    method public boolean getDefaultOrder();
+    method public String getFallbackIntervalPattern();
+    method public android.icu.text.DateIntervalInfo.PatternInfo getIntervalPattern(String, int);
+    method public boolean isFrozen();
+    method public void setFallbackIntervalPattern(String);
+    method public void setIntervalPattern(String, int, String);
+  }
+
+  public static final class DateIntervalInfo.PatternInfo implements java.lang.Cloneable java.io.Serializable {
+    ctor public DateIntervalInfo.PatternInfo(String, String, boolean);
+    method public boolean firstDateInPtnIsLaterDate();
+    method public String getFirstPart();
+    method public String getSecondPart();
+  }
+
+  public class DateTimePatternGenerator implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.DateTimePatternGenerator> {
+    ctor protected DateTimePatternGenerator();
+    method public android.icu.text.DateTimePatternGenerator addPattern(String, boolean, android.icu.text.DateTimePatternGenerator.PatternInfo);
+    method public Object clone();
+    method public android.icu.text.DateTimePatternGenerator cloneAsThawed();
+    method public android.icu.text.DateTimePatternGenerator freeze();
+    method public String getAppendItemFormat(int);
+    method public String getAppendItemName(int);
+    method public String getBaseSkeleton(String);
+    method public java.util.Set<java.lang.String> getBaseSkeletons(java.util.Set<java.lang.String>);
+    method public String getBestPattern(String);
+    method public String getBestPattern(String, int);
+    method public String getDateTimeFormat();
+    method public String getDecimal();
+    method public static android.icu.text.DateTimePatternGenerator getEmptyInstance();
+    method public String getFieldDisplayName(int, android.icu.text.DateTimePatternGenerator.DisplayWidth);
+    method public static android.icu.text.DateTimePatternGenerator getInstance();
+    method public static android.icu.text.DateTimePatternGenerator getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.DateTimePatternGenerator getInstance(java.util.Locale);
+    method public String getSkeleton(String);
+    method public java.util.Map<java.lang.String,java.lang.String> getSkeletons(java.util.Map<java.lang.String,java.lang.String>);
+    method public boolean isFrozen();
+    method public String replaceFieldTypes(String, String);
+    method public String replaceFieldTypes(String, String, int);
+    method public void setAppendItemFormat(int, String);
+    method public void setAppendItemName(int, String);
+    method public void setDateTimeFormat(String);
+    method public void setDecimal(String);
+    field public static final int DAY = 7; // 0x7
+    field public static final int DAYPERIOD = 10; // 0xa
+    field public static final int DAY_OF_WEEK_IN_MONTH = 9; // 0x9
+    field public static final int DAY_OF_YEAR = 8; // 0x8
+    field public static final int ERA = 0; // 0x0
+    field public static final int FRACTIONAL_SECOND = 14; // 0xe
+    field public static final int HOUR = 11; // 0xb
+    field public static final int MATCH_ALL_FIELDS_LENGTH = 65535; // 0xffff
+    field public static final int MATCH_HOUR_FIELD_LENGTH = 2048; // 0x800
+    field public static final int MATCH_NO_OPTIONS = 0; // 0x0
+    field public static final int MINUTE = 12; // 0xc
+    field public static final int MONTH = 3; // 0x3
+    field public static final int QUARTER = 2; // 0x2
+    field public static final int SECOND = 13; // 0xd
+    field public static final int WEEKDAY = 6; // 0x6
+    field public static final int WEEK_OF_MONTH = 5; // 0x5
+    field public static final int WEEK_OF_YEAR = 4; // 0x4
+    field public static final int YEAR = 1; // 0x1
+    field public static final int ZONE = 15; // 0xf
+  }
+
+  public enum DateTimePatternGenerator.DisplayWidth {
+    enum_constant public static final android.icu.text.DateTimePatternGenerator.DisplayWidth ABBREVIATED;
+    enum_constant public static final android.icu.text.DateTimePatternGenerator.DisplayWidth NARROW;
+    enum_constant public static final android.icu.text.DateTimePatternGenerator.DisplayWidth WIDE;
+  }
+
+  public static final class DateTimePatternGenerator.PatternInfo {
+    ctor public DateTimePatternGenerator.PatternInfo();
+    field public static final int BASE_CONFLICT = 1; // 0x1
+    field public static final int CONFLICT = 2; // 0x2
+    field public static final int OK = 0; // 0x0
+    field public String conflictingPattern;
+    field public int status;
+  }
+
+  public class DecimalFormat extends android.icu.text.NumberFormat {
+    ctor public DecimalFormat();
+    ctor public DecimalFormat(String);
+    ctor public DecimalFormat(String, android.icu.text.DecimalFormatSymbols);
+    ctor public DecimalFormat(String, android.icu.text.DecimalFormatSymbols, android.icu.text.CurrencyPluralInfo, int);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public boolean areSignificantDigitsUsed();
+    method public StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(java.math.BigInteger, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(java.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(android.icu.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
+    method public android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
+    method public android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
+    method public int getFormatWidth();
+    method public int getGroupingSize();
+    method public java.math.MathContext getMathContext();
+    method public android.icu.math.MathContext getMathContextICU();
+    method public int getMaximumSignificantDigits();
+    method public byte getMinimumExponentDigits();
+    method public int getMinimumGroupingDigits();
+    method public int getMinimumSignificantDigits();
+    method public int getMultiplier();
+    method public String getNegativePrefix();
+    method public String getNegativeSuffix();
+    method public char getPadCharacter();
+    method public int getPadPosition();
+    method @Deprecated public int getParseMaxDigits();
+    method public String getPositivePrefix();
+    method public String getPositiveSuffix();
+    method public java.math.BigDecimal getRoundingIncrement();
+    method public int getSecondaryGroupingSize();
+    method public boolean isDecimalPatternMatchRequired();
+    method public boolean isDecimalSeparatorAlwaysShown();
+    method public boolean isExponentSignAlwaysShown();
+    method public boolean isParseBigDecimal();
+    method public boolean isParseCaseSensitive();
+    method public boolean isParseNoExponent();
+    method public boolean isScientificNotation();
+    method public boolean isSignAlwaysShown();
+    method public Number parse(String, java.text.ParsePosition);
+    method public void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
+    method public void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
+    method public void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
+    method public void setDecimalPatternMatchRequired(boolean);
+    method public void setDecimalSeparatorAlwaysShown(boolean);
+    method public void setExponentSignAlwaysShown(boolean);
+    method public void setFormatWidth(int);
+    method public void setGroupingSize(int);
+    method public void setMathContext(java.math.MathContext);
+    method public void setMathContextICU(android.icu.math.MathContext);
+    method public void setMaximumSignificantDigits(int);
+    method public void setMinimumExponentDigits(byte);
+    method public void setMinimumGroupingDigits(int);
+    method public void setMinimumSignificantDigits(int);
+    method public void setMultiplier(int);
+    method public void setNegativePrefix(String);
+    method public void setNegativeSuffix(String);
+    method public void setPadCharacter(char);
+    method public void setPadPosition(int);
+    method public void setParseBigDecimal(boolean);
+    method public void setParseCaseSensitive(boolean);
+    method @Deprecated public void setParseMaxDigits(int);
+    method public void setParseNoExponent(boolean);
+    method public void setPositivePrefix(String);
+    method public void setPositiveSuffix(String);
+    method public void setRoundingIncrement(java.math.BigDecimal);
+    method public void setRoundingIncrement(android.icu.math.BigDecimal);
+    method public void setRoundingIncrement(double);
+    method public void setScientificNotation(boolean);
+    method public void setSecondaryGroupingSize(int);
+    method public void setSignAlwaysShown(boolean);
+    method public void setSignificantDigitsUsed(boolean);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+    field public static final int PAD_AFTER_PREFIX = 1; // 0x1
+    field public static final int PAD_AFTER_SUFFIX = 3; // 0x3
+    field public static final int PAD_BEFORE_PREFIX = 0; // 0x0
+    field public static final int PAD_BEFORE_SUFFIX = 2; // 0x2
+  }
+
+  public class DecimalFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DecimalFormatSymbols();
+    ctor public DecimalFormatSymbols(java.util.Locale);
+    ctor public DecimalFormatSymbols(android.icu.util.ULocale);
+    method public Object clone();
+    method public static android.icu.text.DecimalFormatSymbols forNumberingSystem(java.util.Locale, android.icu.text.NumberingSystem);
+    method public static android.icu.text.DecimalFormatSymbols forNumberingSystem(android.icu.util.ULocale, android.icu.text.NumberingSystem);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public android.icu.util.Currency getCurrency();
+    method public String getCurrencySymbol();
+    method public char getDecimalSeparator();
+    method public String getDecimalSeparatorString();
+    method public char getDigit();
+    method public String[] getDigitStrings();
+    method public char[] getDigits();
+    method public String getExponentMultiplicationSign();
+    method public String getExponentSeparator();
+    method public char getGroupingSeparator();
+    method public String getGroupingSeparatorString();
+    method public String getInfinity();
+    method public static android.icu.text.DecimalFormatSymbols getInstance();
+    method public static android.icu.text.DecimalFormatSymbols getInstance(java.util.Locale);
+    method public static android.icu.text.DecimalFormatSymbols getInstance(android.icu.util.ULocale);
+    method public String getInternationalCurrencySymbol();
+    method public java.util.Locale getLocale();
+    method public char getMinusSign();
+    method public String getMinusSignString();
+    method public char getMonetaryDecimalSeparator();
+    method public String getMonetaryDecimalSeparatorString();
+    method public char getMonetaryGroupingSeparator();
+    method public String getMonetaryGroupingSeparatorString();
+    method public String getNaN();
+    method public char getPadEscape();
+    method public String getPatternForCurrencySpacing(int, boolean);
+    method public char getPatternSeparator();
+    method public char getPerMill();
+    method public String getPerMillString();
+    method public char getPercent();
+    method public String getPercentString();
+    method public char getPlusSign();
+    method public String getPlusSignString();
+    method public char getSignificantDigit();
+    method public android.icu.util.ULocale getULocale();
+    method public char getZeroDigit();
+    method public void setCurrency(android.icu.util.Currency);
+    method public void setCurrencySymbol(String);
+    method public void setDecimalSeparator(char);
+    method public void setDecimalSeparatorString(String);
+    method public void setDigit(char);
+    method public void setDigitStrings(String[]);
+    method public void setExponentMultiplicationSign(String);
+    method public void setExponentSeparator(String);
+    method public void setGroupingSeparator(char);
+    method public void setGroupingSeparatorString(String);
+    method public void setInfinity(String);
+    method public void setInternationalCurrencySymbol(String);
+    method public void setMinusSign(char);
+    method public void setMinusSignString(String);
+    method public void setMonetaryDecimalSeparator(char);
+    method public void setMonetaryDecimalSeparatorString(String);
+    method public void setMonetaryGroupingSeparator(char);
+    method public void setMonetaryGroupingSeparatorString(String);
+    method public void setNaN(String);
+    method public void setPadEscape(char);
+    method public void setPatternForCurrencySpacing(int, boolean, String);
+    method public void setPatternSeparator(char);
+    method public void setPerMill(char);
+    method public void setPerMillString(String);
+    method public void setPercent(char);
+    method public void setPercentString(String);
+    method public void setPlusSign(char);
+    method public void setPlusSignString(String);
+    method public void setSignificantDigit(char);
+    method public void setZeroDigit(char);
+    field public static final int CURRENCY_SPC_CURRENCY_MATCH = 0; // 0x0
+    field public static final int CURRENCY_SPC_INSERT = 2; // 0x2
+    field public static final int CURRENCY_SPC_SURROUNDING_MATCH = 1; // 0x1
+  }
+
+  public enum DisplayContext {
+    method public android.icu.text.DisplayContext.Type type();
+    method public int value();
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_STANDALONE;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_UI_LIST_OR_MENU;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_NONE;
+    enum_constant public static final android.icu.text.DisplayContext DIALECT_NAMES;
+    enum_constant public static final android.icu.text.DisplayContext LENGTH_FULL;
+    enum_constant public static final android.icu.text.DisplayContext LENGTH_SHORT;
+    enum_constant public static final android.icu.text.DisplayContext NO_SUBSTITUTE;
+    enum_constant public static final android.icu.text.DisplayContext STANDARD_NAMES;
+    enum_constant public static final android.icu.text.DisplayContext SUBSTITUTE;
+  }
+
+  public enum DisplayContext.Type {
+    enum_constant public static final android.icu.text.DisplayContext.Type CAPITALIZATION;
+    enum_constant public static final android.icu.text.DisplayContext.Type DIALECT_HANDLING;
+    enum_constant public static final android.icu.text.DisplayContext.Type DISPLAY_LENGTH;
+    enum_constant public static final android.icu.text.DisplayContext.Type SUBSTITUTE_HANDLING;
+  }
+
+  public final class Edits {
+    ctor public Edits();
+    method public void addReplace(int, int);
+    method public void addUnchanged(int);
+    method public android.icu.text.Edits.Iterator getCoarseChangesIterator();
+    method public android.icu.text.Edits.Iterator getCoarseIterator();
+    method public android.icu.text.Edits.Iterator getFineChangesIterator();
+    method public android.icu.text.Edits.Iterator getFineIterator();
+    method public boolean hasChanges();
+    method public int lengthDelta();
+    method public android.icu.text.Edits mergeAndAppend(android.icu.text.Edits, android.icu.text.Edits);
+    method public int numberOfChanges();
+    method public void reset();
+  }
+
+  public static final class Edits.Iterator {
+    method public int destinationIndex();
+    method public int destinationIndexFromSourceIndex(int);
+    method public boolean findDestinationIndex(int);
+    method public boolean findSourceIndex(int);
+    method public boolean hasChange();
+    method public int newLength();
+    method public boolean next();
+    method public int oldLength();
+    method public int replacementIndex();
+    method public int sourceIndex();
+    method public int sourceIndexFromDestinationIndex(int);
+  }
+
+  public interface FormattedValue extends java.lang.CharSequence {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public abstract class IDNA {
+    method public static android.icu.text.IDNA getUTS46Instance(int);
+    method public abstract StringBuilder labelToASCII(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    method public abstract StringBuilder labelToUnicode(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    method public abstract StringBuilder nameToASCII(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    method public abstract StringBuilder nameToUnicode(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    field public static final int CHECK_BIDI = 4; // 0x4
+    field public static final int CHECK_CONTEXTJ = 8; // 0x8
+    field public static final int CHECK_CONTEXTO = 64; // 0x40
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int NONTRANSITIONAL_TO_ASCII = 16; // 0x10
+    field public static final int NONTRANSITIONAL_TO_UNICODE = 32; // 0x20
+    field public static final int USE_STD3_RULES = 2; // 0x2
+  }
+
+  public enum IDNA.Error {
+    enum_constant public static final android.icu.text.IDNA.Error BIDI;
+    enum_constant public static final android.icu.text.IDNA.Error CONTEXTJ;
+    enum_constant public static final android.icu.text.IDNA.Error CONTEXTO_DIGITS;
+    enum_constant public static final android.icu.text.IDNA.Error CONTEXTO_PUNCTUATION;
+    enum_constant public static final android.icu.text.IDNA.Error DISALLOWED;
+    enum_constant public static final android.icu.text.IDNA.Error DOMAIN_NAME_TOO_LONG;
+    enum_constant public static final android.icu.text.IDNA.Error EMPTY_LABEL;
+    enum_constant public static final android.icu.text.IDNA.Error HYPHEN_3_4;
+    enum_constant public static final android.icu.text.IDNA.Error INVALID_ACE_LABEL;
+    enum_constant public static final android.icu.text.IDNA.Error LABEL_HAS_DOT;
+    enum_constant public static final android.icu.text.IDNA.Error LABEL_TOO_LONG;
+    enum_constant public static final android.icu.text.IDNA.Error LEADING_COMBINING_MARK;
+    enum_constant public static final android.icu.text.IDNA.Error LEADING_HYPHEN;
+    enum_constant public static final android.icu.text.IDNA.Error PUNYCODE;
+    enum_constant public static final android.icu.text.IDNA.Error TRAILING_HYPHEN;
+  }
+
+  public static final class IDNA.Info {
+    ctor public IDNA.Info();
+    method public java.util.Set<android.icu.text.IDNA.Error> getErrors();
+    method public boolean hasErrors();
+    method public boolean isTransitionalDifferent();
+  }
+
+  public final class ListFormatter {
+    method public String format(java.lang.Object...);
+    method public String format(java.util.Collection<?>);
+    method public static android.icu.text.ListFormatter getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.ListFormatter getInstance(java.util.Locale);
+    method public static android.icu.text.ListFormatter getInstance();
+    method public String getPatternForNumItems(int);
+  }
+
+  public abstract class LocaleDisplayNames {
+    method public abstract android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type);
+    method public abstract android.icu.text.LocaleDisplayNames.DialectHandling getDialectHandling();
+    method public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale);
+    method public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale, android.icu.text.LocaleDisplayNames.DialectHandling);
+    method public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale, android.icu.text.DisplayContext...);
+    method public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale, android.icu.text.DisplayContext...);
+    method public abstract android.icu.util.ULocale getLocale();
+    method public java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiList(java.util.Set<android.icu.util.ULocale>, boolean, java.util.Comparator<java.lang.Object>);
+    method public abstract java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiListCompareWholeItems(java.util.Set<android.icu.util.ULocale>, java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem>);
+    method public abstract String keyDisplayName(String);
+    method public abstract String keyValueDisplayName(String, String);
+    method public abstract String languageDisplayName(String);
+    method public abstract String localeDisplayName(android.icu.util.ULocale);
+    method public abstract String localeDisplayName(java.util.Locale);
+    method public abstract String localeDisplayName(String);
+    method public abstract String regionDisplayName(String);
+    method public abstract String scriptDisplayName(String);
+    method public abstract String scriptDisplayName(int);
+    method public abstract String variantDisplayName(String);
+  }
+
+  public enum LocaleDisplayNames.DialectHandling {
+    enum_constant public static final android.icu.text.LocaleDisplayNames.DialectHandling DIALECT_NAMES;
+    enum_constant public static final android.icu.text.LocaleDisplayNames.DialectHandling STANDARD_NAMES;
+  }
+
+  public static class LocaleDisplayNames.UiListItem {
+    ctor public LocaleDisplayNames.UiListItem(android.icu.util.ULocale, android.icu.util.ULocale, String, String);
+    method public static java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem> getComparator(java.util.Comparator<java.lang.Object>, boolean);
+    field public final android.icu.util.ULocale minimized;
+    field public final android.icu.util.ULocale modified;
+    field public final String nameInDisplayLocale;
+    field public final String nameInSelf;
+  }
+
+  public class MeasureFormat extends android.icu.text.UFormat {
+    method public final boolean equals(Object);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public StringBuilder formatMeasurePerUnit(android.icu.util.Measure, android.icu.util.MeasureUnit, StringBuilder, java.text.FieldPosition);
+    method public final String formatMeasures(android.icu.util.Measure...);
+    method public StringBuilder formatMeasures(StringBuilder, java.text.FieldPosition, android.icu.util.Measure...);
+    method public static android.icu.text.MeasureFormat getCurrencyFormat(android.icu.util.ULocale);
+    method public static android.icu.text.MeasureFormat getCurrencyFormat(java.util.Locale);
+    method public static android.icu.text.MeasureFormat getCurrencyFormat();
+    method public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale, android.icu.text.MeasureFormat.FormatWidth);
+    method public static android.icu.text.MeasureFormat getInstance(java.util.Locale, android.icu.text.MeasureFormat.FormatWidth);
+    method public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale, android.icu.text.MeasureFormat.FormatWidth, android.icu.text.NumberFormat);
+    method public static android.icu.text.MeasureFormat getInstance(java.util.Locale, android.icu.text.MeasureFormat.FormatWidth, android.icu.text.NumberFormat);
+    method public final android.icu.util.ULocale getLocale();
+    method public android.icu.text.NumberFormat getNumberFormat();
+    method public String getUnitDisplayName(android.icu.util.MeasureUnit);
+    method public android.icu.text.MeasureFormat.FormatWidth getWidth();
+    method public final int hashCode();
+    method public android.icu.util.Measure parseObject(String, java.text.ParsePosition);
+  }
+
+  public enum MeasureFormat.FormatWidth {
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth NARROW;
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth NUMERIC;
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth SHORT;
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth WIDE;
+  }
+
+  public class MessageFormat extends android.icu.text.UFormat {
+    ctor public MessageFormat(String);
+    ctor public MessageFormat(String, java.util.Locale);
+    ctor public MessageFormat(String, android.icu.util.ULocale);
+    method public void applyPattern(String);
+    method public void applyPattern(String, android.icu.text.MessagePattern.ApostropheMode);
+    method public static String autoQuoteApostrophe(String);
+    method public final StringBuffer format(Object[], StringBuffer, java.text.FieldPosition);
+    method public final StringBuffer format(java.util.Map<java.lang.String,java.lang.Object>, StringBuffer, java.text.FieldPosition);
+    method public static String format(String, java.lang.Object...);
+    method public static String format(String, java.util.Map<java.lang.String,java.lang.Object>);
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public android.icu.text.MessagePattern.ApostropheMode getApostropheMode();
+    method public java.util.Set<java.lang.String> getArgumentNames();
+    method public java.text.Format getFormatByArgumentName(String);
+    method public java.text.Format[] getFormats();
+    method public java.text.Format[] getFormatsByArgumentIndex();
+    method public java.util.Locale getLocale();
+    method public android.icu.util.ULocale getULocale();
+    method public Object[] parse(String, java.text.ParsePosition);
+    method public Object[] parse(String) throws java.text.ParseException;
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public java.util.Map<java.lang.String,java.lang.Object> parseToMap(String, java.text.ParsePosition);
+    method public java.util.Map<java.lang.String,java.lang.Object> parseToMap(String) throws java.text.ParseException;
+    method public void setFormat(int, java.text.Format);
+    method public void setFormatByArgumentIndex(int, java.text.Format);
+    method public void setFormatByArgumentName(String, java.text.Format);
+    method public void setFormats(java.text.Format[]);
+    method public void setFormatsByArgumentIndex(java.text.Format[]);
+    method public void setFormatsByArgumentName(java.util.Map<java.lang.String,java.text.Format>);
+    method public void setLocale(java.util.Locale);
+    method public void setLocale(android.icu.util.ULocale);
+    method public String toPattern();
+    method public boolean usesNamedArguments();
+  }
+
+  public static class MessageFormat.Field extends java.text.Format.Field {
+    ctor protected MessageFormat.Field(String);
+    field public static final android.icu.text.MessageFormat.Field ARGUMENT;
+  }
+
+  public final class MessagePattern implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.MessagePattern> {
+    ctor public MessagePattern();
+    ctor public MessagePattern(android.icu.text.MessagePattern.ApostropheMode);
+    ctor public MessagePattern(String);
+    method public String autoQuoteApostropheDeep();
+    method public void clear();
+    method public void clearPatternAndSetApostropheMode(android.icu.text.MessagePattern.ApostropheMode);
+    method public Object clone();
+    method public android.icu.text.MessagePattern cloneAsThawed();
+    method public int countParts();
+    method public android.icu.text.MessagePattern freeze();
+    method public android.icu.text.MessagePattern.ApostropheMode getApostropheMode();
+    method public int getLimitPartIndex(int);
+    method public double getNumericValue(android.icu.text.MessagePattern.Part);
+    method public android.icu.text.MessagePattern.Part getPart(int);
+    method public android.icu.text.MessagePattern.Part.Type getPartType(int);
+    method public int getPatternIndex(int);
+    method public String getPatternString();
+    method public double getPluralOffset(int);
+    method public String getSubstring(android.icu.text.MessagePattern.Part);
+    method public boolean hasNamedArguments();
+    method public boolean hasNumberedArguments();
+    method public boolean isFrozen();
+    method public android.icu.text.MessagePattern parse(String);
+    method public android.icu.text.MessagePattern parseChoiceStyle(String);
+    method public android.icu.text.MessagePattern parsePluralStyle(String);
+    method public android.icu.text.MessagePattern parseSelectStyle(String);
+    method public boolean partSubstringMatches(android.icu.text.MessagePattern.Part, String);
+    method public static int validateArgumentName(String);
+    field public static final int ARG_NAME_NOT_NUMBER = -1; // 0xffffffff
+    field public static final int ARG_NAME_NOT_VALID = -2; // 0xfffffffe
+    field public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+  }
+
+  public enum MessagePattern.ApostropheMode {
+    enum_constant public static final android.icu.text.MessagePattern.ApostropheMode DOUBLE_OPTIONAL;
+    enum_constant public static final android.icu.text.MessagePattern.ApostropheMode DOUBLE_REQUIRED;
+  }
+
+  public enum MessagePattern.ArgType {
+    method public boolean hasPluralStyle();
+    enum_constant public static final android.icu.text.MessagePattern.ArgType CHOICE;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType NONE;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType PLURAL;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType SELECT;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType SELECTORDINAL;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType SIMPLE;
+  }
+
+  public static final class MessagePattern.Part {
+    method public android.icu.text.MessagePattern.ArgType getArgType();
+    method public int getIndex();
+    method public int getLength();
+    method public int getLimit();
+    method public android.icu.text.MessagePattern.Part.Type getType();
+    method public int getValue();
+  }
+
+  public enum MessagePattern.Part.Type {
+    method public boolean hasNumericValue();
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_DOUBLE;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_INT;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_LIMIT;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_NAME;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_NUMBER;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_SELECTOR;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_START;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_STYLE;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_TYPE;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type INSERT_CHAR;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type MSG_LIMIT;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type MSG_START;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type REPLACE_NUMBER;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type SKIP_SYNTAX;
+  }
+
+  public final class Normalizer implements java.lang.Cloneable {
+    method @Deprecated public Object clone();
+    method public static int compare(char[], int, int, char[], int, int, int);
+    method public static int compare(String, String, int);
+    method public static int compare(char[], char[], int);
+    method public static int compare(int, int, int);
+    method public static int compare(int, String, int);
+    field public static final int COMPARE_CODE_POINT_ORDER = 32768; // 0x8000
+    field public static final int COMPARE_IGNORE_CASE = 65536; // 0x10000
+    field public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+    field public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+    field public static final int INPUT_IS_FCD = 131072; // 0x20000
+    field public static final android.icu.text.Normalizer.QuickCheckResult MAYBE;
+    field public static final android.icu.text.Normalizer.QuickCheckResult NO;
+    field public static final android.icu.text.Normalizer.QuickCheckResult YES;
+  }
+
+  public static final class Normalizer.QuickCheckResult {
+  }
+
+  public abstract class Normalizer2 {
+    method public abstract StringBuilder append(StringBuilder, CharSequence);
+    method public int composePair(int, int);
+    method public int getCombiningClass(int);
+    method public abstract String getDecomposition(int);
+    method @Deprecated public static android.icu.text.Normalizer2 getInstance(java.io.InputStream, String, android.icu.text.Normalizer2.Mode);
+    method public static android.icu.text.Normalizer2 getNFCInstance();
+    method public static android.icu.text.Normalizer2 getNFDInstance();
+    method public static android.icu.text.Normalizer2 getNFKCCasefoldInstance();
+    method public static android.icu.text.Normalizer2 getNFKCInstance();
+    method public static android.icu.text.Normalizer2 getNFKDInstance();
+    method public String getRawDecomposition(int);
+    method public abstract boolean hasBoundaryAfter(int);
+    method public abstract boolean hasBoundaryBefore(int);
+    method public abstract boolean isInert(int);
+    method public abstract boolean isNormalized(CharSequence);
+    method public String normalize(CharSequence);
+    method public abstract StringBuilder normalize(CharSequence, StringBuilder);
+    method public abstract Appendable normalize(CharSequence, Appendable);
+    method public abstract StringBuilder normalizeSecondAndAppend(StringBuilder, CharSequence);
+    method public abstract android.icu.text.Normalizer.QuickCheckResult quickCheck(CharSequence);
+    method public abstract int spanQuickCheckYes(CharSequence);
+  }
+
+  public enum Normalizer2.Mode {
+    enum_constant public static final android.icu.text.Normalizer2.Mode COMPOSE;
+    enum_constant public static final android.icu.text.Normalizer2.Mode COMPOSE_CONTIGUOUS;
+    enum_constant public static final android.icu.text.Normalizer2.Mode DECOMPOSE;
+    enum_constant public static final android.icu.text.Normalizer2.Mode FCD;
+  }
+
+  public abstract class NumberFormat extends android.icu.text.UFormat {
+    ctor public NumberFormat();
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public final String format(double);
+    method public final String format(long);
+    method public final String format(java.math.BigInteger);
+    method public final String format(java.math.BigDecimal);
+    method public final String format(android.icu.math.BigDecimal);
+    method public final String format(android.icu.util.CurrencyAmount);
+    method public abstract StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(java.math.BigInteger, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(java.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(android.icu.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(android.icu.util.CurrencyAmount, StringBuffer, java.text.FieldPosition);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type);
+    method public android.icu.util.Currency getCurrency();
+    method public static final android.icu.text.NumberFormat getCurrencyInstance();
+    method public static android.icu.text.NumberFormat getCurrencyInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getCurrencyInstance(android.icu.util.ULocale);
+    method public static final android.icu.text.NumberFormat getInstance();
+    method public static android.icu.text.NumberFormat getInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale);
+    method public static final android.icu.text.NumberFormat getInstance(int);
+    method public static android.icu.text.NumberFormat getInstance(java.util.Locale, int);
+    method public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale, int);
+    method public static final android.icu.text.NumberFormat getIntegerInstance();
+    method public static android.icu.text.NumberFormat getIntegerInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getIntegerInstance(android.icu.util.ULocale);
+    method public int getMaximumFractionDigits();
+    method public int getMaximumIntegerDigits();
+    method public int getMinimumFractionDigits();
+    method public int getMinimumIntegerDigits();
+    method public static final android.icu.text.NumberFormat getNumberInstance();
+    method public static android.icu.text.NumberFormat getNumberInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getNumberInstance(android.icu.util.ULocale);
+    method protected static String getPattern(android.icu.util.ULocale, int);
+    method public static final android.icu.text.NumberFormat getPercentInstance();
+    method public static android.icu.text.NumberFormat getPercentInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getPercentInstance(android.icu.util.ULocale);
+    method public int getRoundingMode();
+    method public static final android.icu.text.NumberFormat getScientificInstance();
+    method public static android.icu.text.NumberFormat getScientificInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getScientificInstance(android.icu.util.ULocale);
+    method public boolean isGroupingUsed();
+    method public boolean isParseIntegerOnly();
+    method public boolean isParseStrict();
+    method public abstract Number parse(String, java.text.ParsePosition);
+    method public Number parse(String) throws java.text.ParseException;
+    method public android.icu.util.CurrencyAmount parseCurrency(CharSequence, java.text.ParsePosition);
+    method public final Object parseObject(String, java.text.ParsePosition);
+    method public void setContext(android.icu.text.DisplayContext);
+    method public void setCurrency(android.icu.util.Currency);
+    method public void setGroupingUsed(boolean);
+    method public void setMaximumFractionDigits(int);
+    method public void setMaximumIntegerDigits(int);
+    method public void setMinimumFractionDigits(int);
+    method public void setMinimumIntegerDigits(int);
+    method public void setParseIntegerOnly(boolean);
+    method public void setParseStrict(boolean);
+    method public void setRoundingMode(int);
+    field public static final int ACCOUNTINGCURRENCYSTYLE = 7; // 0x7
+    field public static final int CASHCURRENCYSTYLE = 8; // 0x8
+    field public static final int CURRENCYSTYLE = 1; // 0x1
+    field public static final int FRACTION_FIELD = 1; // 0x1
+    field public static final int INTEGERSTYLE = 4; // 0x4
+    field public static final int INTEGER_FIELD = 0; // 0x0
+    field public static final int ISOCURRENCYSTYLE = 5; // 0x5
+    field public static final int NUMBERSTYLE = 0; // 0x0
+    field public static final int PERCENTSTYLE = 2; // 0x2
+    field public static final int PLURALCURRENCYSTYLE = 6; // 0x6
+    field public static final int SCIENTIFICSTYLE = 3; // 0x3
+    field public static final int STANDARDCURRENCYSTYLE = 9; // 0x9
+  }
+
+  public static class NumberFormat.Field extends java.text.Format.Field {
+    ctor protected NumberFormat.Field(String);
+    field public static final android.icu.text.NumberFormat.Field COMPACT;
+    field public static final android.icu.text.NumberFormat.Field CURRENCY;
+    field public static final android.icu.text.NumberFormat.Field DECIMAL_SEPARATOR;
+    field public static final android.icu.text.NumberFormat.Field EXPONENT;
+    field public static final android.icu.text.NumberFormat.Field EXPONENT_SIGN;
+    field public static final android.icu.text.NumberFormat.Field EXPONENT_SYMBOL;
+    field public static final android.icu.text.NumberFormat.Field FRACTION;
+    field public static final android.icu.text.NumberFormat.Field GROUPING_SEPARATOR;
+    field public static final android.icu.text.NumberFormat.Field INTEGER;
+    field public static final android.icu.text.NumberFormat.Field MEASURE_UNIT;
+    field public static final android.icu.text.NumberFormat.Field PERCENT;
+    field public static final android.icu.text.NumberFormat.Field PERMILLE;
+    field public static final android.icu.text.NumberFormat.Field SIGN;
+  }
+
+  public class NumberingSystem {
+    ctor public NumberingSystem();
+    method public static String[] getAvailableNames();
+    method public String getDescription();
+    method public static android.icu.text.NumberingSystem getInstance(int, boolean, String);
+    method public static android.icu.text.NumberingSystem getInstance(java.util.Locale);
+    method public static android.icu.text.NumberingSystem getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.NumberingSystem getInstance();
+    method public static android.icu.text.NumberingSystem getInstanceByName(String);
+    method public String getName();
+    method public int getRadix();
+    method public boolean isAlgorithmic();
+    method public static boolean isValidDigitString(String);
+    field public static final android.icu.text.NumberingSystem LATIN;
+  }
+
+  public class PluralFormat extends android.icu.text.UFormat {
+    ctor public PluralFormat();
+    ctor public PluralFormat(android.icu.util.ULocale);
+    ctor public PluralFormat(java.util.Locale);
+    ctor public PluralFormat(android.icu.text.PluralRules);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules);
+    ctor public PluralFormat(java.util.Locale, android.icu.text.PluralRules);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules.PluralType);
+    ctor public PluralFormat(java.util.Locale, android.icu.text.PluralRules.PluralType);
+    ctor public PluralFormat(String);
+    ctor public PluralFormat(android.icu.util.ULocale, String);
+    ctor public PluralFormat(android.icu.text.PluralRules, String);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules, String);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules.PluralType, String);
+    method public void applyPattern(String);
+    method public boolean equals(android.icu.text.PluralFormat);
+    method public final String format(double);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public Number parse(String, java.text.ParsePosition);
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public void setNumberFormat(android.icu.text.NumberFormat);
+    method public String toPattern();
+  }
+
+  public class PluralRules implements java.io.Serializable {
+    method public static android.icu.text.PluralRules createRules(String);
+    method public boolean equals(android.icu.text.PluralRules);
+    method public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale);
+    method public static android.icu.text.PluralRules forLocale(java.util.Locale);
+    method public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale, android.icu.text.PluralRules.PluralType);
+    method public static android.icu.text.PluralRules forLocale(java.util.Locale, android.icu.text.PluralRules.PluralType);
+    method public java.util.Collection<java.lang.Double> getAllKeywordValues(String);
+    method public java.util.Set<java.lang.String> getKeywords();
+    method public java.util.Collection<java.lang.Double> getSamples(String);
+    method public double getUniqueKeywordValue(String);
+    method public static android.icu.text.PluralRules parseDescription(String) throws java.text.ParseException;
+    method public String select(double);
+    method public String select(android.icu.number.FormattedNumber);
+    field public static final android.icu.text.PluralRules DEFAULT;
+    field public static final String KEYWORD_FEW = "few";
+    field public static final String KEYWORD_MANY = "many";
+    field public static final String KEYWORD_ONE = "one";
+    field public static final String KEYWORD_OTHER = "other";
+    field public static final String KEYWORD_TWO = "two";
+    field public static final String KEYWORD_ZERO = "zero";
+    field public static final double NO_UNIQUE_VALUE = -0.00123456777;
+  }
+
+  public enum PluralRules.PluralType {
+    enum_constant public static final android.icu.text.PluralRules.PluralType CARDINAL;
+    enum_constant public static final android.icu.text.PluralRules.PluralType ORDINAL;
+  }
+
+  public final class RelativeDateTimeFormatter {
+    method public String combineDateAndTime(String, String);
+    method public String format(double, android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit);
+    method public String format(android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit);
+    method public String format(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public String formatNumeric(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatNumericToValue(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double, android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public android.icu.text.DisplayContext getCapitalizationContext();
+    method public android.icu.text.RelativeDateTimeFormatter.Style getFormatStyle();
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance();
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale, android.icu.text.NumberFormat);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale, android.icu.text.NumberFormat, android.icu.text.RelativeDateTimeFormatter.Style, android.icu.text.DisplayContext);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale, android.icu.text.NumberFormat);
+    method public android.icu.text.NumberFormat getNumberFormat();
+  }
+
+  public enum RelativeDateTimeFormatter.AbsoluteUnit {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit DAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit FRIDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit HOUR;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit MINUTE;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit MONDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit MONTH;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit NOW;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit QUARTER;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit SATURDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit SUNDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit THURSDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit TUESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit WEDNESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit WEEK;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit YEAR;
+  }
+
+  public enum RelativeDateTimeFormatter.Direction {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction LAST;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction LAST_2;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction NEXT;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction NEXT_2;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction PLAIN;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction THIS;
+  }
+
+  public static class RelativeDateTimeFormatter.FormattedRelativeDateTime implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public enum RelativeDateTimeFormatter.RelativeDateTimeUnit {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit DAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit FRIDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit HOUR;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MINUTE;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONTH;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit QUARTER;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SATURDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SECOND;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SUNDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit THURSDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit TUESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEDNESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEEK;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit YEAR;
+  }
+
+  public enum RelativeDateTimeFormatter.RelativeUnit {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit DAYS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit HOURS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit MINUTES;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit MONTHS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit SECONDS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit WEEKS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit YEARS;
+  }
+
+  public enum RelativeDateTimeFormatter.Style {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Style LONG;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Style NARROW;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Style SHORT;
+  }
+
+  public interface Replaceable {
+    method public int char32At(int);
+    method public char charAt(int);
+    method public void copy(int, int, int);
+    method public void getChars(int, int, char[], int);
+    method public boolean hasMetaData();
+    method public int length();
+    method public void replace(int, int, String);
+    method public void replace(int, int, char[], int, int);
+  }
+
+  public final class RuleBasedCollator extends android.icu.text.Collator {
+    ctor public RuleBasedCollator(String) throws java.lang.Exception;
+    method public android.icu.text.RuleBasedCollator cloneAsThawed();
+    method public int compare(String, String);
+    method public android.icu.text.CollationElementIterator getCollationElementIterator(String);
+    method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public android.icu.text.CollationElementIterator getCollationElementIterator(android.icu.text.UCharacterIterator);
+    method public android.icu.text.CollationKey getCollationKey(String);
+    method public void getContractionsAndExpansions(android.icu.text.UnicodeSet, android.icu.text.UnicodeSet, boolean) throws java.lang.Exception;
+    method public boolean getNumericCollation();
+    method public String getRules();
+    method public String getRules(boolean);
+    method public android.icu.util.VersionInfo getUCAVersion();
+    method public int getVariableTop();
+    method public android.icu.util.VersionInfo getVersion();
+    method public boolean isAlternateHandlingShifted();
+    method public boolean isCaseLevel();
+    method public boolean isFrenchCollation();
+    method public boolean isLowerCaseFirst();
+    method public boolean isUpperCaseFirst();
+    method public void setAlternateHandlingDefault();
+    method public void setAlternateHandlingShifted(boolean);
+    method public void setCaseFirstDefault();
+    method public void setCaseLevel(boolean);
+    method public void setCaseLevelDefault();
+    method public void setDecompositionDefault();
+    method public void setFrenchCollation(boolean);
+    method public void setFrenchCollationDefault();
+    method public void setLowerCaseFirst(boolean);
+    method public android.icu.text.RuleBasedCollator setMaxVariable(int);
+    method public void setNumericCollation(boolean);
+    method public void setNumericCollationDefault();
+    method public void setStrengthDefault();
+    method public void setUpperCaseFirst(boolean);
+  }
+
+  public final class ScientificNumberFormatter {
+    method public String format(Object);
+    method public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.util.ULocale, String, String);
+    method public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.text.DecimalFormat, String, String);
+    method public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.util.ULocale);
+    method public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.text.DecimalFormat);
+  }
+
+  public abstract class SearchIterator {
+    ctor protected SearchIterator(java.text.CharacterIterator, android.icu.text.BreakIterator);
+    method public final int first();
+    method public final int following(int);
+    method public android.icu.text.BreakIterator getBreakIterator();
+    method public android.icu.text.SearchIterator.ElementComparisonType getElementComparisonType();
+    method public abstract int getIndex();
+    method public int getMatchLength();
+    method public int getMatchStart();
+    method public String getMatchedText();
+    method public java.text.CharacterIterator getTarget();
+    method protected abstract int handleNext(int);
+    method protected abstract int handlePrevious(int);
+    method public boolean isOverlapping();
+    method public final int last();
+    method public int next();
+    method public final int preceding(int);
+    method public int previous();
+    method public void reset();
+    method public void setBreakIterator(android.icu.text.BreakIterator);
+    method public void setElementComparisonType(android.icu.text.SearchIterator.ElementComparisonType);
+    method public void setIndex(int);
+    method protected void setMatchLength(int);
+    method public void setOverlapping(boolean);
+    method public void setTarget(java.text.CharacterIterator);
+    field public static final int DONE = -1; // 0xffffffff
+    field protected android.icu.text.BreakIterator breakIterator;
+    field protected int matchLength;
+    field protected java.text.CharacterIterator targetText;
+  }
+
+  public enum SearchIterator.ElementComparisonType {
+    enum_constant public static final android.icu.text.SearchIterator.ElementComparisonType ANY_BASE_WEIGHT_IS_WILDCARD;
+    enum_constant public static final android.icu.text.SearchIterator.ElementComparisonType PATTERN_BASE_WEIGHT_IS_WILDCARD;
+    enum_constant public static final android.icu.text.SearchIterator.ElementComparisonType STANDARD_ELEMENT_COMPARISON;
+  }
+
+  public class SelectFormat extends java.text.Format {
+    ctor public SelectFormat(String);
+    method public void applyPattern(String);
+    method public final String format(String);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public String toPattern();
+  }
+
+  public class SimpleDateFormat extends android.icu.text.DateFormat {
+    ctor public SimpleDateFormat();
+    ctor public SimpleDateFormat(String);
+    ctor public SimpleDateFormat(String, java.util.Locale);
+    ctor public SimpleDateFormat(String, android.icu.util.ULocale);
+    ctor public SimpleDateFormat(String, String, android.icu.util.ULocale);
+    ctor public SimpleDateFormat(String, android.icu.text.DateFormatSymbols);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public StringBuffer format(android.icu.util.Calendar, StringBuffer, java.text.FieldPosition);
+    method public java.util.Date get2DigitYearStart();
+    method public android.icu.text.DateFormatSymbols getDateFormatSymbols();
+    method public android.icu.text.NumberFormat getNumberFormat(char);
+    method protected android.icu.text.DateFormatSymbols getSymbols();
+    method public android.icu.text.TimeZoneFormat getTimeZoneFormat();
+    method protected int matchQuarterString(String, int, int, String[], android.icu.util.Calendar);
+    method protected int matchString(String, int, int, String[], android.icu.util.Calendar);
+    method public void parse(String, android.icu.util.Calendar, java.text.ParsePosition);
+    method protected android.icu.text.DateFormat.Field patternCharToDateFormatField(char);
+    method public void set2DigitYearStart(java.util.Date);
+    method public void setDateFormatSymbols(android.icu.text.DateFormatSymbols);
+    method public void setNumberFormat(String, android.icu.text.NumberFormat);
+    method public void setTimeZoneFormat(android.icu.text.TimeZoneFormat);
+    method protected String subFormat(char, int, int, java.text.FieldPosition, android.icu.text.DateFormatSymbols, android.icu.util.Calendar) throws java.lang.IllegalArgumentException;
+    method protected int subParse(String, int, char, int, boolean, boolean, boolean[], android.icu.util.Calendar);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+    method protected String zeroPaddingNumber(long, int, int);
+  }
+
+  public class StringPrepParseException extends java.text.ParseException {
+    ctor public StringPrepParseException(String, int);
+    ctor public StringPrepParseException(String, int, String, int);
+    ctor public StringPrepParseException(String, int, String, int, int);
+    method public int getError();
+    field public static final int ACE_PREFIX_ERROR = 6; // 0x6
+    field public static final int BUFFER_OVERFLOW_ERROR = 9; // 0x9
+    field public static final int CHECK_BIDI_ERROR = 4; // 0x4
+    field public static final int DOMAIN_NAME_TOO_LONG_ERROR = 11; // 0xb
+    field public static final int ILLEGAL_CHAR_FOUND = 1; // 0x1
+    field public static final int INVALID_CHAR_FOUND = 0; // 0x0
+    field public static final int LABEL_TOO_LONG_ERROR = 8; // 0x8
+    field public static final int PROHIBITED_ERROR = 2; // 0x2
+    field public static final int STD3_ASCII_RULES_ERROR = 5; // 0x5
+    field public static final int UNASSIGNED_ERROR = 3; // 0x3
+    field public static final int VERIFICATION_ERROR = 7; // 0x7
+    field public static final int ZERO_LENGTH_LABEL = 10; // 0xa
+  }
+
+  public final class StringSearch extends android.icu.text.SearchIterator {
+    ctor public StringSearch(String, java.text.CharacterIterator, android.icu.text.RuleBasedCollator, android.icu.text.BreakIterator);
+    ctor public StringSearch(String, java.text.CharacterIterator, android.icu.text.RuleBasedCollator);
+    ctor public StringSearch(String, java.text.CharacterIterator, java.util.Locale);
+    ctor public StringSearch(String, java.text.CharacterIterator, android.icu.util.ULocale);
+    ctor public StringSearch(String, String);
+    method public android.icu.text.RuleBasedCollator getCollator();
+    method public int getIndex();
+    method public String getPattern();
+    method protected int handleNext(int);
+    method protected int handlePrevious(int);
+    method public boolean isCanonical();
+    method public void setCanonical(boolean);
+    method public void setCollator(android.icu.text.RuleBasedCollator);
+    method public void setPattern(String);
+  }
+
+  public interface SymbolTable {
+    method public char[] lookup(String);
+    method public android.icu.text.UnicodeMatcher lookupMatcher(int);
+    method public String parseReference(String, java.text.ParsePosition, int);
+    field public static final char SYMBOL_REF = 36; // 0x0024 '$'
+  }
+
+  public class TimeZoneFormat extends android.icu.text.UFormat implements android.icu.util.Freezable<android.icu.text.TimeZoneFormat> java.io.Serializable {
+    ctor protected TimeZoneFormat(android.icu.util.ULocale);
+    method public android.icu.text.TimeZoneFormat cloneAsThawed();
+    method public final String format(android.icu.text.TimeZoneFormat.Style, android.icu.util.TimeZone, long);
+    method public String format(android.icu.text.TimeZoneFormat.Style, android.icu.util.TimeZone, long, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType>);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public final String formatOffsetISO8601Basic(int, boolean, boolean, boolean);
+    method public final String formatOffsetISO8601Extended(int, boolean, boolean, boolean);
+    method public String formatOffsetLocalizedGMT(int);
+    method public String formatOffsetShortLocalizedGMT(int);
+    method public android.icu.text.TimeZoneFormat freeze();
+    method public java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> getDefaultParseOptions();
+    method public String getGMTOffsetDigits();
+    method public String getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType);
+    method public String getGMTPattern();
+    method public String getGMTZeroFormat();
+    method public static android.icu.text.TimeZoneFormat getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.TimeZoneFormat getInstance(java.util.Locale);
+    method public android.icu.text.TimeZoneNames getTimeZoneNames();
+    method public boolean isFrozen();
+    method public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style, String, java.text.ParsePosition, java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption>, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType>);
+    method public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style, String, java.text.ParsePosition, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType>);
+    method public final android.icu.util.TimeZone parse(String, java.text.ParsePosition);
+    method public final android.icu.util.TimeZone parse(String) throws java.text.ParseException;
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public final int parseOffsetISO8601(String, java.text.ParsePosition);
+    method public int parseOffsetLocalizedGMT(String, java.text.ParsePosition);
+    method public int parseOffsetShortLocalizedGMT(String, java.text.ParsePosition);
+    method public android.icu.text.TimeZoneFormat setDefaultParseOptions(java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption>);
+    method public android.icu.text.TimeZoneFormat setGMTOffsetDigits(String);
+    method public android.icu.text.TimeZoneFormat setGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType, String);
+    method public android.icu.text.TimeZoneFormat setGMTPattern(String);
+    method public android.icu.text.TimeZoneFormat setGMTZeroFormat(String);
+    method public android.icu.text.TimeZoneFormat setTimeZoneNames(android.icu.text.TimeZoneNames);
+  }
+
+  public enum TimeZoneFormat.GMTOffsetPatternType {
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType NEGATIVE_H;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType NEGATIVE_HM;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType NEGATIVE_HMS;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType POSITIVE_H;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType POSITIVE_HM;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType POSITIVE_HMS;
+  }
+
+  public enum TimeZoneFormat.ParseOption {
+    enum_constant public static final android.icu.text.TimeZoneFormat.ParseOption ALL_STYLES;
+    enum_constant public static final android.icu.text.TimeZoneFormat.ParseOption TZ_DATABASE_ABBREVIATIONS;
+  }
+
+  public enum TimeZoneFormat.Style {
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style EXEMPLAR_LOCATION;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style GENERIC_LOCATION;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style GENERIC_LONG;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style GENERIC_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_LOCAL_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_LOCAL_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_LOCAL_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_LOCAL_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_LOCAL_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style LOCALIZED_GMT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style LOCALIZED_GMT_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style SPECIFIC_LONG;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style SPECIFIC_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ZONE_ID;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ZONE_ID_SHORT;
+  }
+
+  public enum TimeZoneFormat.TimeType {
+    enum_constant public static final android.icu.text.TimeZoneFormat.TimeType DAYLIGHT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.TimeType STANDARD;
+    enum_constant public static final android.icu.text.TimeZoneFormat.TimeType UNKNOWN;
+  }
+
+  public abstract class TimeZoneNames implements java.io.Serializable {
+    method public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs();
+    method public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs(String);
+    method public final String getDisplayName(String, android.icu.text.TimeZoneNames.NameType, long);
+    method public String getExemplarLocationName(String);
+    method public static android.icu.text.TimeZoneNames getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.TimeZoneNames getInstance(java.util.Locale);
+    method public abstract String getMetaZoneDisplayName(String, android.icu.text.TimeZoneNames.NameType);
+    method public abstract String getMetaZoneID(String, long);
+    method public abstract String getReferenceZoneID(String, String);
+    method public static android.icu.text.TimeZoneNames getTZDBInstance(android.icu.util.ULocale);
+    method public abstract String getTimeZoneDisplayName(String, android.icu.text.TimeZoneNames.NameType);
+  }
+
+  public enum TimeZoneNames.NameType {
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType EXEMPLAR_LOCATION;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType LONG_DAYLIGHT;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType LONG_GENERIC;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType LONG_STANDARD;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType SHORT_DAYLIGHT;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType SHORT_GENERIC;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType SHORT_STANDARD;
+  }
+
+  public abstract class Transliterator {
+    method public static final android.icu.text.Transliterator createFromRules(String, String, int);
+    method public void filteredTransliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, boolean);
+    method public final void finishTransliteration(android.icu.text.Replaceable, android.icu.text.Transliterator.Position);
+    method public static final java.util.Enumeration<java.lang.String> getAvailableIDs();
+    method public static final java.util.Enumeration<java.lang.String> getAvailableSources();
+    method public static final java.util.Enumeration<java.lang.String> getAvailableTargets(String);
+    method public static final java.util.Enumeration<java.lang.String> getAvailableVariants(String, String);
+    method public static final String getDisplayName(String);
+    method public static String getDisplayName(String, java.util.Locale);
+    method public static String getDisplayName(String, android.icu.util.ULocale);
+    method public android.icu.text.Transliterator[] getElements();
+    method public final android.icu.text.UnicodeFilter getFilter();
+    method public final String getID();
+    method public static final android.icu.text.Transliterator getInstance(String);
+    method public static android.icu.text.Transliterator getInstance(String, int);
+    method public final android.icu.text.Transliterator getInverse();
+    method public final int getMaximumContextLength();
+    method public final android.icu.text.UnicodeSet getSourceSet();
+    method public android.icu.text.UnicodeSet getTargetSet();
+    method public void setFilter(android.icu.text.UnicodeFilter);
+    method public String toRules(boolean);
+    method public final int transliterate(android.icu.text.Replaceable, int, int);
+    method public final void transliterate(android.icu.text.Replaceable);
+    method public final String transliterate(String);
+    method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, String);
+    method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, int);
+    method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position);
+    field public static final int FORWARD = 0; // 0x0
+    field public static final int REVERSE = 1; // 0x1
+  }
+
+  public static class Transliterator.Position {
+    ctor public Transliterator.Position();
+    ctor public Transliterator.Position(int, int, int);
+    ctor public Transliterator.Position(int, int, int, int);
+    ctor public Transliterator.Position(android.icu.text.Transliterator.Position);
+    method public void set(android.icu.text.Transliterator.Position);
+    method public final void validate(int);
+    field public int contextLimit;
+    field public int contextStart;
+    field public int limit;
+    field public int start;
+  }
+
+  public abstract class UCharacterIterator implements java.lang.Cloneable {
+    ctor protected UCharacterIterator();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method public abstract int current();
+    method public int currentCodePoint();
+    method public java.text.CharacterIterator getCharacterIterator();
+    method public abstract int getIndex();
+    method public static final android.icu.text.UCharacterIterator getInstance(android.icu.text.Replaceable);
+    method public static final android.icu.text.UCharacterIterator getInstance(String);
+    method public static final android.icu.text.UCharacterIterator getInstance(char[]);
+    method public static final android.icu.text.UCharacterIterator getInstance(char[], int, int);
+    method public static final android.icu.text.UCharacterIterator getInstance(StringBuffer);
+    method public static final android.icu.text.UCharacterIterator getInstance(java.text.CharacterIterator);
+    method public abstract int getLength();
+    method public abstract int getText(char[], int);
+    method public final int getText(char[]);
+    method public String getText();
+    method public int moveCodePointIndex(int);
+    method public int moveIndex(int);
+    method public abstract int next();
+    method public int nextCodePoint();
+    method public abstract int previous();
+    method public int previousCodePoint();
+    method public abstract void setIndex(int);
+    method public void setToLimit();
+    method public void setToStart();
+    field public static final int DONE = -1; // 0xffffffff
+  }
+
+  public abstract class UFormat extends java.text.Format {
+    ctor public UFormat();
+  }
+
+  public abstract class UnicodeFilter implements android.icu.text.UnicodeMatcher {
+    method public abstract boolean contains(int);
+    method public int matches(android.icu.text.Replaceable, int[], int, boolean);
+  }
+
+  public interface UnicodeMatcher {
+    method public void addMatchSetTo(android.icu.text.UnicodeSet);
+    method public int matches(android.icu.text.Replaceable, int[], int, boolean);
+    method public boolean matchesIndexValue(int);
+    method public String toPattern(boolean);
+    field public static final char ETHER = 65535; // 0xffff '\uffff'
+    field public static final int U_MATCH = 2; // 0x2
+    field public static final int U_MISMATCH = 0; // 0x0
+    field public static final int U_PARTIAL_MATCH = 1; // 0x1
+  }
+
+  public class UnicodeSet extends android.icu.text.UnicodeFilter implements java.lang.Comparable<android.icu.text.UnicodeSet> android.icu.util.Freezable<android.icu.text.UnicodeSet> java.lang.Iterable<java.lang.String> {
+    ctor public UnicodeSet();
+    ctor public UnicodeSet(android.icu.text.UnicodeSet);
+    ctor public UnicodeSet(int, int);
+    ctor public UnicodeSet(int...);
+    ctor public UnicodeSet(String);
+    ctor public UnicodeSet(String, boolean);
+    ctor public UnicodeSet(String, int);
+    ctor public UnicodeSet(String, java.text.ParsePosition, android.icu.text.SymbolTable);
+    ctor public UnicodeSet(String, java.text.ParsePosition, android.icu.text.SymbolTable, int);
+    method public StringBuffer _generatePattern(StringBuffer, boolean);
+    method public StringBuffer _generatePattern(StringBuffer, boolean, boolean);
+    method public android.icu.text.UnicodeSet add(int, int);
+    method public final android.icu.text.UnicodeSet add(int);
+    method public final android.icu.text.UnicodeSet add(CharSequence);
+    method public android.icu.text.UnicodeSet add(Iterable<?>);
+    method public android.icu.text.UnicodeSet addAll(int, int);
+    method public final android.icu.text.UnicodeSet addAll(CharSequence);
+    method public android.icu.text.UnicodeSet addAll(android.icu.text.UnicodeSet);
+    method public android.icu.text.UnicodeSet addAll(Iterable<?>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet addAll(T...);
+    method public <T extends java.util.Collection<java.lang.String>> T addAllTo(T);
+    method public void addMatchSetTo(android.icu.text.UnicodeSet);
+    method public android.icu.text.UnicodeSet applyIntPropertyValue(int, int);
+    method public final android.icu.text.UnicodeSet applyPattern(String);
+    method public android.icu.text.UnicodeSet applyPattern(String, boolean);
+    method public android.icu.text.UnicodeSet applyPattern(String, int);
+    method public android.icu.text.UnicodeSet applyPropertyAlias(String, String);
+    method public android.icu.text.UnicodeSet applyPropertyAlias(String, String, android.icu.text.SymbolTable);
+    method public int charAt(int);
+    method public android.icu.text.UnicodeSet clear();
+    method public Object clone();
+    method public android.icu.text.UnicodeSet cloneAsThawed();
+    method public android.icu.text.UnicodeSet closeOver(int);
+    method public android.icu.text.UnicodeSet compact();
+    method public int compareTo(android.icu.text.UnicodeSet);
+    method public int compareTo(android.icu.text.UnicodeSet, android.icu.text.UnicodeSet.ComparisonStyle);
+    method public int compareTo(Iterable<java.lang.String>);
+    method public android.icu.text.UnicodeSet complement(int, int);
+    method public final android.icu.text.UnicodeSet complement(int);
+    method public android.icu.text.UnicodeSet complement();
+    method public final android.icu.text.UnicodeSet complement(CharSequence);
+    method public final android.icu.text.UnicodeSet complementAll(CharSequence);
+    method public android.icu.text.UnicodeSet complementAll(android.icu.text.UnicodeSet);
+    method public boolean contains(int);
+    method public boolean contains(int, int);
+    method public final boolean contains(CharSequence);
+    method public boolean containsAll(android.icu.text.UnicodeSet);
+    method public boolean containsAll(String);
+    method public <T extends java.lang.CharSequence> boolean containsAll(Iterable<T>);
+    method public boolean containsNone(int, int);
+    method public boolean containsNone(android.icu.text.UnicodeSet);
+    method public boolean containsNone(CharSequence);
+    method public <T extends java.lang.CharSequence> boolean containsNone(Iterable<T>);
+    method public final boolean containsSome(int, int);
+    method public final boolean containsSome(android.icu.text.UnicodeSet);
+    method public final boolean containsSome(CharSequence);
+    method public final <T extends java.lang.CharSequence> boolean containsSome(Iterable<T>);
+    method public android.icu.text.UnicodeSet freeze();
+    method public static android.icu.text.UnicodeSet from(CharSequence);
+    method public static android.icu.text.UnicodeSet fromAll(CharSequence);
+    method public int getRangeCount();
+    method public int getRangeEnd(int);
+    method public int getRangeStart(int);
+    method public int indexOf(int);
+    method public boolean isEmpty();
+    method public boolean isFrozen();
+    method public java.util.Iterator<java.lang.String> iterator();
+    method public boolean matchesIndexValue(int);
+    method public Iterable<android.icu.text.UnicodeSet.EntryRange> ranges();
+    method public android.icu.text.UnicodeSet remove(int, int);
+    method public final android.icu.text.UnicodeSet remove(int);
+    method public final android.icu.text.UnicodeSet remove(CharSequence);
+    method public final android.icu.text.UnicodeSet removeAll(CharSequence);
+    method public android.icu.text.UnicodeSet removeAll(android.icu.text.UnicodeSet);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet removeAll(Iterable<T>);
+    method public final android.icu.text.UnicodeSet removeAllStrings();
+    method public android.icu.text.UnicodeSet retain(int, int);
+    method public final android.icu.text.UnicodeSet retain(int);
+    method public final android.icu.text.UnicodeSet retain(CharSequence);
+    method public final android.icu.text.UnicodeSet retainAll(CharSequence);
+    method public android.icu.text.UnicodeSet retainAll(android.icu.text.UnicodeSet);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet retainAll(Iterable<T>);
+    method public android.icu.text.UnicodeSet set(int, int);
+    method public android.icu.text.UnicodeSet set(android.icu.text.UnicodeSet);
+    method public int size();
+    method public int span(CharSequence, android.icu.text.UnicodeSet.SpanCondition);
+    method public int span(CharSequence, int, android.icu.text.UnicodeSet.SpanCondition);
+    method public int spanBack(CharSequence, android.icu.text.UnicodeSet.SpanCondition);
+    method public int spanBack(CharSequence, int, android.icu.text.UnicodeSet.SpanCondition);
+    method public java.util.Collection<java.lang.String> strings();
+    method public String toPattern(boolean);
+    field public static final int ADD_CASE_MAPPINGS = 4; // 0x4
+    field public static final android.icu.text.UnicodeSet ALL_CODE_POINTS;
+    field public static final int CASE = 2; // 0x2
+    field public static final int CASE_INSENSITIVE = 2; // 0x2
+    field public static final android.icu.text.UnicodeSet EMPTY;
+    field public static final int IGNORE_SPACE = 1; // 0x1
+    field public static final int MAX_VALUE = 1114111; // 0x10ffff
+    field public static final int MIN_VALUE = 0; // 0x0
+  }
+
+  public enum UnicodeSet.ComparisonStyle {
+    enum_constant public static final android.icu.text.UnicodeSet.ComparisonStyle LEXICOGRAPHIC;
+    enum_constant public static final android.icu.text.UnicodeSet.ComparisonStyle LONGER_FIRST;
+    enum_constant public static final android.icu.text.UnicodeSet.ComparisonStyle SHORTER_FIRST;
+  }
+
+  public static class UnicodeSet.EntryRange {
+    field public int codepoint;
+    field public int codepointEnd;
+  }
+
+  public enum UnicodeSet.SpanCondition {
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition CONDITION_COUNT;
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition CONTAINED;
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition NOT_CONTAINED;
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition SIMPLE;
+  }
+
+  public class UnicodeSetIterator {
+    ctor public UnicodeSetIterator(android.icu.text.UnicodeSet);
+    ctor public UnicodeSetIterator();
+    method public String getString();
+    method public boolean next();
+    method public boolean nextRange();
+    method public void reset(android.icu.text.UnicodeSet);
+    method public void reset();
+    field public static int IS_STRING;
+    field public int codepoint;
+    field public int codepointEnd;
+    field public String string;
+  }
+
+  public class UnicodeSetSpanner {
+    ctor public UnicodeSetSpanner(android.icu.text.UnicodeSet);
+    method public int countIn(CharSequence);
+    method public int countIn(CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod);
+    method public int countIn(CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod, android.icu.text.UnicodeSet.SpanCondition);
+    method public String deleteFrom(CharSequence);
+    method public String deleteFrom(CharSequence, android.icu.text.UnicodeSet.SpanCondition);
+    method public android.icu.text.UnicodeSet getUnicodeSet();
+    method public String replaceFrom(CharSequence, CharSequence);
+    method public String replaceFrom(CharSequence, CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod);
+    method public String replaceFrom(CharSequence, CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod, android.icu.text.UnicodeSet.SpanCondition);
+    method public CharSequence trim(CharSequence);
+    method public CharSequence trim(CharSequence, android.icu.text.UnicodeSetSpanner.TrimOption);
+    method public CharSequence trim(CharSequence, android.icu.text.UnicodeSetSpanner.TrimOption, android.icu.text.UnicodeSet.SpanCondition);
+  }
+
+  public enum UnicodeSetSpanner.CountMethod {
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.CountMethod MIN_ELEMENTS;
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.CountMethod WHOLE_SPAN;
+  }
+
+  public enum UnicodeSetSpanner.TrimOption {
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.TrimOption BOTH;
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.TrimOption LEADING;
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.TrimOption TRAILING;
+  }
+
+}
+
+package android.icu.util {
+
+  public class BuddhistCalendar extends android.icu.util.GregorianCalendar {
+    ctor public BuddhistCalendar();
+    ctor public BuddhistCalendar(android.icu.util.TimeZone);
+    ctor public BuddhistCalendar(java.util.Locale);
+    ctor public BuddhistCalendar(android.icu.util.ULocale);
+    ctor public BuddhistCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public BuddhistCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public BuddhistCalendar(java.util.Date);
+    ctor public BuddhistCalendar(int, int, int);
+    ctor public BuddhistCalendar(int, int, int, int, int, int);
+    field public static final int BE = 0; // 0x0
+  }
+
+  public abstract class Calendar implements java.lang.Cloneable java.lang.Comparable<android.icu.util.Calendar> java.io.Serializable {
+    ctor protected Calendar();
+    ctor protected Calendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor protected Calendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    method public void add(int, int);
+    method public boolean after(Object);
+    method public boolean before(Object);
+    method public final void clear();
+    method public final void clear(int);
+    method public Object clone();
+    method public int compareTo(android.icu.util.Calendar);
+    method protected void complete();
+    method protected void computeFields();
+    method protected final void computeGregorianFields(int);
+    method protected int computeGregorianMonthStart(int, int);
+    method protected int computeJulianDay();
+    method @Deprecated protected int computeMillisInDay();
+    method protected void computeTime();
+    method @Deprecated protected int computeZoneOffset(long, int);
+    method public int fieldDifference(java.util.Date, int);
+    method protected String fieldName(int);
+    method protected static final long floorDivide(long, long);
+    method protected static final int floorDivide(int, int);
+    method protected static final int floorDivide(int, int, int[]);
+    method protected static final int floorDivide(long, int, int[]);
+    method public final int get(int);
+    method public int getActualMaximum(int);
+    method public int getActualMinimum(int);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public android.icu.text.DateFormat getDateTimeFormat(int, int, java.util.Locale);
+    method public android.icu.text.DateFormat getDateTimeFormat(int, int, android.icu.util.ULocale);
+    method public String getDisplayName(java.util.Locale);
+    method public String getDisplayName(android.icu.util.ULocale);
+    method public final int getFieldCount();
+    method protected int[][][] getFieldResolutionTable();
+    method public int getFirstDayOfWeek();
+    method public final int getGreatestMinimum(int);
+    method protected final int getGregorianDayOfMonth();
+    method protected final int getGregorianDayOfYear();
+    method protected final int getGregorianMonth();
+    method protected final int getGregorianYear();
+    method public static android.icu.util.Calendar getInstance();
+    method public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone);
+    method public static android.icu.util.Calendar getInstance(java.util.Locale);
+    method public static android.icu.util.Calendar getInstance(android.icu.util.ULocale);
+    method public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone, java.util.Locale);
+    method public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone, android.icu.util.ULocale);
+    method public static final String[] getKeywordValuesForLocale(String, android.icu.util.ULocale, boolean);
+    method public final int getLeastMaximum(int);
+    method protected int getLimit(int, int);
+    method public final int getMaximum(int);
+    method public int getMinimalDaysInFirstWeek();
+    method public final int getMinimum(int);
+    method public int getRepeatedWallTimeOption();
+    method public int getSkippedWallTimeOption();
+    method protected final int getStamp(int);
+    method public final java.util.Date getTime();
+    method public long getTimeInMillis();
+    method public android.icu.util.TimeZone getTimeZone();
+    method public String getType();
+    method public android.icu.util.Calendar.WeekData getWeekData();
+    method public static android.icu.util.Calendar.WeekData getWeekDataForRegion(String);
+    method protected static final int gregorianMonthLength(int, int);
+    method protected static final int gregorianPreviousMonthLength(int, int);
+    method protected void handleComputeFields(int);
+    method protected int handleComputeJulianDay(int);
+    method protected abstract int handleComputeMonthStart(int, int, boolean);
+    method protected int[] handleCreateFields();
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, java.util.Locale);
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, String, java.util.Locale);
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, android.icu.util.ULocale);
+    method protected abstract int handleGetExtendedYear();
+    method protected abstract int handleGetLimit(int, int);
+    method protected int handleGetMonthLength(int, int);
+    method protected int handleGetYearLength(int);
+    method protected final int internalGet(int);
+    method protected final int internalGet(int, int);
+    method protected final long internalGetTimeInMillis();
+    method protected final void internalSet(int, int);
+    method public boolean isEquivalentTo(android.icu.util.Calendar);
+    method protected static final boolean isGregorianLeapYear(int);
+    method public boolean isLenient();
+    method public final boolean isSet(int);
+    method public boolean isWeekend(java.util.Date);
+    method public boolean isWeekend();
+    method protected static final int julianDayToDayOfWeek(int);
+    method protected static final long julianDayToMillis(int);
+    method protected static final int millisToJulianDay(long);
+    method protected int newerField(int, int);
+    method protected int newestStamp(int, int, int);
+    method protected void pinField(int);
+    method protected void prepareGetActual(int, boolean);
+    method protected int resolveFields(int[][][]);
+    method public final void roll(int, boolean);
+    method public void roll(int, int);
+    method public final void set(int, int);
+    method public final void set(int, int, int);
+    method public final void set(int, int, int, int, int);
+    method public final void set(int, int, int, int, int, int);
+    method public void setFirstDayOfWeek(int);
+    method public void setLenient(boolean);
+    method public void setMinimalDaysInFirstWeek(int);
+    method public void setRepeatedWallTimeOption(int);
+    method public void setSkippedWallTimeOption(int);
+    method public final void setTime(java.util.Date);
+    method public void setTimeInMillis(long);
+    method public void setTimeZone(android.icu.util.TimeZone);
+    method public android.icu.util.Calendar setWeekData(android.icu.util.Calendar.WeekData);
+    method protected void validateField(int);
+    method protected final void validateField(int, int, int);
+    method protected void validateFields();
+    method protected int weekNumber(int, int, int);
+    method protected final int weekNumber(int, int);
+    field public static final int AM = 0; // 0x0
+    field public static final int AM_PM = 9; // 0x9
+    field public static final int APRIL = 3; // 0x3
+    field public static final int AUGUST = 7; // 0x7
+    field @Deprecated protected static final int BASE_FIELD_COUNT = 23; // 0x17
+    field public static final int DATE = 5; // 0x5
+    field public static final int DAY_OF_MONTH = 5; // 0x5
+    field public static final int DAY_OF_WEEK = 7; // 0x7
+    field public static final int DAY_OF_WEEK_IN_MONTH = 8; // 0x8
+    field public static final int DAY_OF_YEAR = 6; // 0x6
+    field public static final int DECEMBER = 11; // 0xb
+    field public static final int DOW_LOCAL = 18; // 0x12
+    field public static final int DST_OFFSET = 16; // 0x10
+    field protected static final int EPOCH_JULIAN_DAY = 2440588; // 0x253d8c
+    field public static final int ERA = 0; // 0x0
+    field public static final int EXTENDED_YEAR = 19; // 0x13
+    field public static final int FEBRUARY = 1; // 0x1
+    field public static final int FRIDAY = 6; // 0x6
+    field protected static final int GREATEST_MINIMUM = 1; // 0x1
+    field public static final int HOUR = 10; // 0xa
+    field public static final int HOUR_OF_DAY = 11; // 0xb
+    field protected static final int INTERNALLY_SET = 1; // 0x1
+    field public static final int IS_LEAP_MONTH = 22; // 0x16
+    field public static final int JANUARY = 0; // 0x0
+    field protected static final int JAN_1_1_JULIAN_DAY = 1721426; // 0x1a4452
+    field public static final int JULIAN_DAY = 20; // 0x14
+    field public static final int JULY = 6; // 0x6
+    field public static final int JUNE = 5; // 0x5
+    field protected static final int LEAST_MAXIMUM = 2; // 0x2
+    field public static final int MARCH = 2; // 0x2
+    field protected static final int MAXIMUM = 3; // 0x3
+    field protected static final java.util.Date MAX_DATE;
+    field @Deprecated protected static final int MAX_FIELD_COUNT = 32; // 0x20
+    field protected static final int MAX_JULIAN = 2130706432; // 0x7f000000
+    field protected static final long MAX_MILLIS = 183882168921600000L; // 0x28d47dbbf19b000L
+    field public static final int MAY = 4; // 0x4
+    field public static final int MILLISECOND = 14; // 0xe
+    field public static final int MILLISECONDS_IN_DAY = 21; // 0x15
+    field protected static final int MINIMUM = 0; // 0x0
+    field protected static final int MINIMUM_USER_STAMP = 2; // 0x2
+    field public static final int MINUTE = 12; // 0xc
+    field protected static final java.util.Date MIN_DATE;
+    field protected static final int MIN_JULIAN = -2130706432; // 0x81000000
+    field protected static final long MIN_MILLIS = -184303902528000000L; // 0xfd713893bf19b000L
+    field public static final int MONDAY = 2; // 0x2
+    field public static final int MONTH = 2; // 0x2
+    field public static final int NOVEMBER = 10; // 0xa
+    field public static final int OCTOBER = 9; // 0x9
+    field protected static final long ONE_DAY = 86400000L; // 0x5265c00L
+    field protected static final int ONE_HOUR = 3600000; // 0x36ee80
+    field protected static final int ONE_MINUTE = 60000; // 0xea60
+    field protected static final int ONE_SECOND = 1000; // 0x3e8
+    field protected static final long ONE_WEEK = 604800000L; // 0x240c8400L
+    field public static final int PM = 1; // 0x1
+    field protected static final int RESOLVE_REMAP = 32; // 0x20
+    field public static final int SATURDAY = 7; // 0x7
+    field public static final int SECOND = 13; // 0xd
+    field public static final int SEPTEMBER = 8; // 0x8
+    field public static final int SUNDAY = 1; // 0x1
+    field public static final int THURSDAY = 5; // 0x5
+    field public static final int TUESDAY = 3; // 0x3
+    field public static final int UNDECIMBER = 12; // 0xc
+    field protected static final int UNSET = 0; // 0x0
+    field public static final int WALLTIME_FIRST = 1; // 0x1
+    field public static final int WALLTIME_LAST = 0; // 0x0
+    field public static final int WALLTIME_NEXT_VALID = 2; // 0x2
+    field public static final int WEDNESDAY = 4; // 0x4
+    field public static final int WEEK_OF_MONTH = 4; // 0x4
+    field public static final int WEEK_OF_YEAR = 3; // 0x3
+    field public static final int YEAR = 1; // 0x1
+    field public static final int YEAR_WOY = 17; // 0x11
+    field public static final int ZONE_OFFSET = 15; // 0xf
+  }
+
+  public static final class Calendar.WeekData {
+    ctor public Calendar.WeekData(int, int, int, int, int, int);
+    field public final int firstDayOfWeek;
+    field public final int minimalDaysInFirstWeek;
+    field public final int weekendCease;
+    field public final int weekendCeaseMillis;
+    field public final int weekendOnset;
+    field public final int weekendOnsetMillis;
+  }
+
+  public class ChineseCalendar extends android.icu.util.Calendar {
+    ctor public ChineseCalendar();
+    ctor public ChineseCalendar(java.util.Date);
+    ctor public ChineseCalendar(int, int, int, int);
+    ctor public ChineseCalendar(int, int, int, int, int, int, int);
+    ctor public ChineseCalendar(int, int, int, int, int);
+    ctor public ChineseCalendar(int, int, int, int, int, int, int, int);
+    ctor public ChineseCalendar(java.util.Locale);
+    ctor public ChineseCalendar(android.icu.util.TimeZone);
+    ctor public ChineseCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public ChineseCalendar(android.icu.util.ULocale);
+    ctor public ChineseCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, String, android.icu.util.ULocale);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+  }
+
+  public final class CopticCalendar extends android.icu.util.Calendar {
+    ctor public CopticCalendar();
+    ctor public CopticCalendar(android.icu.util.TimeZone);
+    ctor public CopticCalendar(java.util.Locale);
+    ctor public CopticCalendar(android.icu.util.ULocale);
+    ctor public CopticCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public CopticCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public CopticCalendar(int, int, int);
+    ctor public CopticCalendar(java.util.Date);
+    ctor public CopticCalendar(int, int, int, int, int, int);
+    method @Deprecated protected void handleComputeFields(int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method @Deprecated protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    field public static final int AMSHIR = 5; // 0x5
+    field public static final int BABA = 1; // 0x1
+    field public static final int BARAMHAT = 6; // 0x6
+    field public static final int BARAMOUDA = 7; // 0x7
+    field public static final int BASHANS = 8; // 0x8
+    field public static final int EPEP = 10; // 0xa
+    field public static final int HATOR = 2; // 0x2
+    field public static final int KIAHK = 3; // 0x3
+    field public static final int MESRA = 11; // 0xb
+    field public static final int NASIE = 12; // 0xc
+    field public static final int PAONA = 9; // 0x9
+    field public static final int TOBA = 4; // 0x4
+    field public static final int TOUT = 0; // 0x0
+  }
+
+  public class Currency extends android.icu.util.MeasureUnit {
+    ctor protected Currency(String);
+    method public static android.icu.util.Currency fromJavaCurrency(java.util.Currency);
+    method public static java.util.Set<android.icu.util.Currency> getAvailableCurrencies();
+    method public static String[] getAvailableCurrencyCodes(android.icu.util.ULocale, java.util.Date);
+    method public static String[] getAvailableCurrencyCodes(java.util.Locale, java.util.Date);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static android.icu.util.ULocale[] getAvailableULocales();
+    method public String getCurrencyCode();
+    method public int getDefaultFractionDigits();
+    method public int getDefaultFractionDigits(android.icu.util.Currency.CurrencyUsage);
+    method public String getDisplayName();
+    method public String getDisplayName(java.util.Locale);
+    method public static android.icu.util.Currency getInstance(java.util.Locale);
+    method public static android.icu.util.Currency getInstance(android.icu.util.ULocale);
+    method public static android.icu.util.Currency getInstance(String);
+    method public static final String[] getKeywordValuesForLocale(String, android.icu.util.ULocale, boolean);
+    method public String getName(java.util.Locale, int, boolean[]);
+    method public String getName(android.icu.util.ULocale, int, boolean[]);
+    method public String getName(java.util.Locale, int, String, boolean[]);
+    method public String getName(android.icu.util.ULocale, int, String, boolean[]);
+    method public int getNumericCode();
+    method public double getRoundingIncrement();
+    method public double getRoundingIncrement(android.icu.util.Currency.CurrencyUsage);
+    method public String getSymbol();
+    method public String getSymbol(java.util.Locale);
+    method public String getSymbol(android.icu.util.ULocale);
+    method public static boolean isAvailable(String, java.util.Date, java.util.Date);
+    method public java.util.Currency toJavaCurrency();
+    field public static final int LONG_NAME = 1; // 0x1
+    field public static final int NARROW_SYMBOL_NAME = 3; // 0x3
+    field public static final int PLURAL_LONG_NAME = 2; // 0x2
+    field public static final int SYMBOL_NAME = 0; // 0x0
+  }
+
+  public enum Currency.CurrencyUsage {
+    enum_constant public static final android.icu.util.Currency.CurrencyUsage CASH;
+    enum_constant public static final android.icu.util.Currency.CurrencyUsage STANDARD;
+  }
+
+  public class CurrencyAmount extends android.icu.util.Measure {
+    ctor public CurrencyAmount(Number, android.icu.util.Currency);
+    ctor public CurrencyAmount(double, android.icu.util.Currency);
+    ctor public CurrencyAmount(Number, java.util.Currency);
+    ctor public CurrencyAmount(double, java.util.Currency);
+    method public android.icu.util.Currency getCurrency();
+  }
+
+  public final class DateInterval implements java.io.Serializable {
+    ctor public DateInterval(long, long);
+    method public long getFromDate();
+    method public long getToDate();
+  }
+
+  public final class EthiopicCalendar extends android.icu.util.Calendar {
+    ctor public EthiopicCalendar();
+    ctor public EthiopicCalendar(android.icu.util.TimeZone);
+    ctor public EthiopicCalendar(java.util.Locale);
+    ctor public EthiopicCalendar(android.icu.util.ULocale);
+    ctor public EthiopicCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public EthiopicCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public EthiopicCalendar(int, int, int);
+    ctor public EthiopicCalendar(java.util.Date);
+    ctor public EthiopicCalendar(int, int, int, int, int, int);
+    method @Deprecated protected void handleComputeFields(int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method @Deprecated protected int handleGetExtendedYear();
+    method @Deprecated protected int handleGetLimit(int, int);
+    method public boolean isAmeteAlemEra();
+    method public void setAmeteAlemEra(boolean);
+    field public static final int GENBOT = 8; // 0x8
+    field public static final int HAMLE = 10; // 0xa
+    field public static final int HEDAR = 2; // 0x2
+    field public static final int MEGABIT = 6; // 0x6
+    field public static final int MESKEREM = 0; // 0x0
+    field public static final int MIAZIA = 7; // 0x7
+    field public static final int NEHASSE = 11; // 0xb
+    field public static final int PAGUMEN = 12; // 0xc
+    field public static final int SENE = 9; // 0x9
+    field public static final int TAHSAS = 3; // 0x3
+    field public static final int TEKEMT = 1; // 0x1
+    field public static final int TER = 4; // 0x4
+    field public static final int YEKATIT = 5; // 0x5
+  }
+
+  public interface Freezable<T> extends java.lang.Cloneable {
+    method public T cloneAsThawed();
+    method public T freeze();
+    method public boolean isFrozen();
+  }
+
+  public class GregorianCalendar extends android.icu.util.Calendar {
+    ctor public GregorianCalendar();
+    ctor public GregorianCalendar(android.icu.util.TimeZone);
+    ctor public GregorianCalendar(java.util.Locale);
+    ctor public GregorianCalendar(android.icu.util.ULocale);
+    ctor public GregorianCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public GregorianCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public GregorianCalendar(int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int, int);
+    method public final java.util.Date getGregorianChange();
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    method public boolean isLeapYear(int);
+    method public void setGregorianChange(java.util.Date);
+    field public static final int AD = 1; // 0x1
+    field public static final int BC = 0; // 0x0
+    field protected transient boolean invertGregorian;
+    field protected transient boolean isGregorian;
+  }
+
+  public class HebrewCalendar extends android.icu.util.Calendar {
+    ctor public HebrewCalendar();
+    ctor public HebrewCalendar(android.icu.util.TimeZone);
+    ctor public HebrewCalendar(java.util.Locale);
+    ctor public HebrewCalendar(android.icu.util.ULocale);
+    ctor public HebrewCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public HebrewCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public HebrewCalendar(int, int, int);
+    ctor public HebrewCalendar(java.util.Date);
+    ctor public HebrewCalendar(int, int, int, int, int, int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    method @Deprecated protected void validateField(int);
+    field public static final int ADAR = 6; // 0x6
+    field public static final int ADAR_1 = 5; // 0x5
+    field public static final int AV = 11; // 0xb
+    field public static final int ELUL = 12; // 0xc
+    field public static final int HESHVAN = 1; // 0x1
+    field public static final int IYAR = 8; // 0x8
+    field public static final int KISLEV = 2; // 0x2
+    field public static final int NISAN = 7; // 0x7
+    field public static final int SHEVAT = 4; // 0x4
+    field public static final int SIVAN = 9; // 0x9
+    field public static final int TAMUZ = 10; // 0xa
+    field public static final int TEVET = 3; // 0x3
+    field public static final int TISHRI = 0; // 0x0
+  }
+
+  public class ICUUncheckedIOException extends java.lang.RuntimeException {
+    ctor public ICUUncheckedIOException();
+    ctor public ICUUncheckedIOException(String);
+    ctor public ICUUncheckedIOException(Throwable);
+    ctor public ICUUncheckedIOException(String, Throwable);
+  }
+
+  public class IllformedLocaleException extends java.lang.RuntimeException {
+    ctor public IllformedLocaleException();
+    ctor public IllformedLocaleException(String);
+    ctor public IllformedLocaleException(String, int);
+    method public int getErrorIndex();
+  }
+
+  public class IndianCalendar extends android.icu.util.Calendar {
+    ctor public IndianCalendar();
+    ctor public IndianCalendar(android.icu.util.TimeZone);
+    ctor public IndianCalendar(java.util.Locale);
+    ctor public IndianCalendar(android.icu.util.ULocale);
+    ctor public IndianCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public IndianCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public IndianCalendar(java.util.Date);
+    ctor public IndianCalendar(int, int, int);
+    ctor public IndianCalendar(int, int, int, int, int, int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    field public static final int AGRAHAYANA = 8; // 0x8
+    field public static final int ASADHA = 3; // 0x3
+    field public static final int ASVINA = 6; // 0x6
+    field public static final int BHADRA = 5; // 0x5
+    field public static final int CHAITRA = 0; // 0x0
+    field public static final int IE = 0; // 0x0
+    field public static final int JYAISTHA = 2; // 0x2
+    field public static final int KARTIKA = 7; // 0x7
+    field public static final int MAGHA = 10; // 0xa
+    field public static final int PAUSA = 9; // 0x9
+    field public static final int PHALGUNA = 11; // 0xb
+    field public static final int SRAVANA = 4; // 0x4
+    field public static final int VAISAKHA = 1; // 0x1
+  }
+
+  public class IslamicCalendar extends android.icu.util.Calendar {
+    ctor public IslamicCalendar();
+    ctor public IslamicCalendar(android.icu.util.TimeZone);
+    ctor public IslamicCalendar(java.util.Locale);
+    ctor public IslamicCalendar(android.icu.util.ULocale);
+    ctor public IslamicCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public IslamicCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public IslamicCalendar(java.util.Date);
+    ctor public IslamicCalendar(int, int, int);
+    ctor public IslamicCalendar(int, int, int, int, int, int);
+    method public android.icu.util.IslamicCalendar.CalculationType getCalculationType();
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    method public void setCalculationType(android.icu.util.IslamicCalendar.CalculationType);
+    field public static final int DHU_AL_HIJJAH = 11; // 0xb
+    field public static final int DHU_AL_QIDAH = 10; // 0xa
+    field public static final int JUMADA_1 = 4; // 0x4
+    field public static final int JUMADA_2 = 5; // 0x5
+    field public static final int MUHARRAM = 0; // 0x0
+    field public static final int RABI_1 = 2; // 0x2
+    field public static final int RABI_2 = 3; // 0x3
+    field public static final int RAJAB = 6; // 0x6
+    field public static final int RAMADAN = 8; // 0x8
+    field public static final int SAFAR = 1; // 0x1
+    field public static final int SHABAN = 7; // 0x7
+    field public static final int SHAWWAL = 9; // 0x9
+  }
+
+  public enum IslamicCalendar.CalculationType {
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC;
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC_CIVIL;
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC_TBLA;
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC_UMALQURA;
+  }
+
+  public class JapaneseCalendar extends android.icu.util.GregorianCalendar {
+    ctor public JapaneseCalendar();
+    ctor public JapaneseCalendar(android.icu.util.TimeZone);
+    ctor public JapaneseCalendar(java.util.Locale);
+    ctor public JapaneseCalendar(android.icu.util.ULocale);
+    ctor public JapaneseCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public JapaneseCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public JapaneseCalendar(java.util.Date);
+    ctor public JapaneseCalendar(int, int, int, int);
+    ctor public JapaneseCalendar(int, int, int);
+    ctor public JapaneseCalendar(int, int, int, int, int, int);
+    field public static final int HEISEI;
+    field public static final int MEIJI;
+    field public static final int REIWA;
+    field public static final int SHOWA;
+    field public static final int TAISHO;
+  }
+
+  public final class LocaleData {
+    method public static android.icu.util.VersionInfo getCLDRVersion();
+    method public String getDelimiter(int);
+    method public static android.icu.util.LocaleData getInstance(android.icu.util.ULocale);
+    method public static android.icu.util.LocaleData getInstance();
+    method public static android.icu.util.LocaleData.MeasurementSystem getMeasurementSystem(android.icu.util.ULocale);
+    method public boolean getNoSubstitute();
+    method public static android.icu.util.LocaleData.PaperSize getPaperSize(android.icu.util.ULocale);
+    method public void setNoSubstitute(boolean);
+    field public static final int ALT_QUOTATION_END = 3; // 0x3
+    field public static final int ALT_QUOTATION_START = 2; // 0x2
+    field public static final int QUOTATION_END = 1; // 0x1
+    field public static final int QUOTATION_START = 0; // 0x0
+  }
+
+  public static final class LocaleData.MeasurementSystem {
+    field public static final android.icu.util.LocaleData.MeasurementSystem SI;
+    field public static final android.icu.util.LocaleData.MeasurementSystem UK;
+    field public static final android.icu.util.LocaleData.MeasurementSystem US;
+  }
+
+  public static final class LocaleData.PaperSize {
+    method public int getHeight();
+    method public int getWidth();
+  }
+
+  public class Measure {
+    ctor public Measure(Number, android.icu.util.MeasureUnit);
+    method public Number getNumber();
+    method public android.icu.util.MeasureUnit getUnit();
+  }
+
+  public class MeasureUnit implements java.io.Serializable {
+    method public static java.util.Set<android.icu.util.MeasureUnit> getAvailable(String);
+    method public static java.util.Set<android.icu.util.MeasureUnit> getAvailable();
+    method public static java.util.Set<java.lang.String> getAvailableTypes();
+    method public String getSubtype();
+    method public String getType();
+    field public static final android.icu.util.MeasureUnit ACRE;
+    field public static final android.icu.util.MeasureUnit ACRE_FOOT;
+    field public static final android.icu.util.MeasureUnit AMPERE;
+    field public static final android.icu.util.MeasureUnit ARC_MINUTE;
+    field public static final android.icu.util.MeasureUnit ARC_SECOND;
+    field public static final android.icu.util.MeasureUnit ASTRONOMICAL_UNIT;
+    field public static final android.icu.util.MeasureUnit ATMOSPHERE;
+    field public static final android.icu.util.MeasureUnit BIT;
+    field public static final android.icu.util.MeasureUnit BUSHEL;
+    field public static final android.icu.util.MeasureUnit BYTE;
+    field public static final android.icu.util.MeasureUnit CALORIE;
+    field public static final android.icu.util.MeasureUnit CARAT;
+    field public static final android.icu.util.MeasureUnit CELSIUS;
+    field public static final android.icu.util.MeasureUnit CENTILITER;
+    field public static final android.icu.util.MeasureUnit CENTIMETER;
+    field public static final android.icu.util.MeasureUnit CENTURY;
+    field public static final android.icu.util.MeasureUnit CUBIC_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit CUBIC_FOOT;
+    field public static final android.icu.util.MeasureUnit CUBIC_INCH;
+    field public static final android.icu.util.MeasureUnit CUBIC_KILOMETER;
+    field public static final android.icu.util.MeasureUnit CUBIC_METER;
+    field public static final android.icu.util.MeasureUnit CUBIC_MILE;
+    field public static final android.icu.util.MeasureUnit CUBIC_YARD;
+    field public static final android.icu.util.MeasureUnit CUP;
+    field public static final android.icu.util.MeasureUnit CUP_METRIC;
+    field public static final android.icu.util.TimeUnit DAY;
+    field public static final android.icu.util.MeasureUnit DECADE;
+    field public static final android.icu.util.MeasureUnit DECILITER;
+    field public static final android.icu.util.MeasureUnit DECIMETER;
+    field public static final android.icu.util.MeasureUnit DEGREE;
+    field public static final android.icu.util.MeasureUnit DOT_PER_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit DOT_PER_INCH;
+    field public static final android.icu.util.MeasureUnit EM;
+    field public static final android.icu.util.MeasureUnit FAHRENHEIT;
+    field public static final android.icu.util.MeasureUnit FATHOM;
+    field public static final android.icu.util.MeasureUnit FLUID_OUNCE;
+    field public static final android.icu.util.MeasureUnit FOODCALORIE;
+    field public static final android.icu.util.MeasureUnit FOOT;
+    field public static final android.icu.util.MeasureUnit FURLONG;
+    field public static final android.icu.util.MeasureUnit GALLON;
+    field public static final android.icu.util.MeasureUnit GALLON_IMPERIAL;
+    field public static final android.icu.util.MeasureUnit GENERIC_TEMPERATURE;
+    field public static final android.icu.util.MeasureUnit GIGABIT;
+    field public static final android.icu.util.MeasureUnit GIGABYTE;
+    field public static final android.icu.util.MeasureUnit GIGAHERTZ;
+    field public static final android.icu.util.MeasureUnit GIGAWATT;
+    field public static final android.icu.util.MeasureUnit GRAM;
+    field public static final android.icu.util.MeasureUnit G_FORCE;
+    field public static final android.icu.util.MeasureUnit HECTARE;
+    field public static final android.icu.util.MeasureUnit HECTOLITER;
+    field public static final android.icu.util.MeasureUnit HECTOPASCAL;
+    field public static final android.icu.util.MeasureUnit HERTZ;
+    field public static final android.icu.util.MeasureUnit HORSEPOWER;
+    field public static final android.icu.util.TimeUnit HOUR;
+    field public static final android.icu.util.MeasureUnit INCH;
+    field public static final android.icu.util.MeasureUnit INCH_HG;
+    field public static final android.icu.util.MeasureUnit JOULE;
+    field public static final android.icu.util.MeasureUnit KARAT;
+    field public static final android.icu.util.MeasureUnit KELVIN;
+    field public static final android.icu.util.MeasureUnit KILOBIT;
+    field public static final android.icu.util.MeasureUnit KILOBYTE;
+    field public static final android.icu.util.MeasureUnit KILOCALORIE;
+    field public static final android.icu.util.MeasureUnit KILOGRAM;
+    field public static final android.icu.util.MeasureUnit KILOHERTZ;
+    field public static final android.icu.util.MeasureUnit KILOJOULE;
+    field public static final android.icu.util.MeasureUnit KILOMETER;
+    field public static final android.icu.util.MeasureUnit KILOMETER_PER_HOUR;
+    field public static final android.icu.util.MeasureUnit KILOWATT;
+    field public static final android.icu.util.MeasureUnit KILOWATT_HOUR;
+    field public static final android.icu.util.MeasureUnit KNOT;
+    field public static final android.icu.util.MeasureUnit LIGHT_YEAR;
+    field public static final android.icu.util.MeasureUnit LITER;
+    field public static final android.icu.util.MeasureUnit LITER_PER_100KILOMETERS;
+    field public static final android.icu.util.MeasureUnit LITER_PER_KILOMETER;
+    field public static final android.icu.util.MeasureUnit LUX;
+    field public static final android.icu.util.MeasureUnit MEGABIT;
+    field public static final android.icu.util.MeasureUnit MEGABYTE;
+    field public static final android.icu.util.MeasureUnit MEGAHERTZ;
+    field public static final android.icu.util.MeasureUnit MEGALITER;
+    field public static final android.icu.util.MeasureUnit MEGAPIXEL;
+    field public static final android.icu.util.MeasureUnit MEGAWATT;
+    field public static final android.icu.util.MeasureUnit METER;
+    field public static final android.icu.util.MeasureUnit METER_PER_SECOND;
+    field public static final android.icu.util.MeasureUnit METER_PER_SECOND_SQUARED;
+    field public static final android.icu.util.MeasureUnit METRIC_TON;
+    field public static final android.icu.util.MeasureUnit MICROGRAM;
+    field public static final android.icu.util.MeasureUnit MICROMETER;
+    field public static final android.icu.util.MeasureUnit MICROSECOND;
+    field public static final android.icu.util.MeasureUnit MILE;
+    field public static final android.icu.util.MeasureUnit MILE_PER_GALLON;
+    field public static final android.icu.util.MeasureUnit MILE_PER_GALLON_IMPERIAL;
+    field public static final android.icu.util.MeasureUnit MILE_PER_HOUR;
+    field public static final android.icu.util.MeasureUnit MILE_SCANDINAVIAN;
+    field public static final android.icu.util.MeasureUnit MILLIAMPERE;
+    field public static final android.icu.util.MeasureUnit MILLIBAR;
+    field public static final android.icu.util.MeasureUnit MILLIGRAM;
+    field public static final android.icu.util.MeasureUnit MILLIGRAM_PER_DECILITER;
+    field public static final android.icu.util.MeasureUnit MILLILITER;
+    field public static final android.icu.util.MeasureUnit MILLIMETER;
+    field public static final android.icu.util.MeasureUnit MILLIMETER_OF_MERCURY;
+    field public static final android.icu.util.MeasureUnit MILLIMOLE_PER_LITER;
+    field public static final android.icu.util.MeasureUnit MILLISECOND;
+    field public static final android.icu.util.MeasureUnit MILLIWATT;
+    field public static final android.icu.util.TimeUnit MINUTE;
+    field public static final android.icu.util.TimeUnit MONTH;
+    field public static final android.icu.util.MeasureUnit NANOMETER;
+    field public static final android.icu.util.MeasureUnit NANOSECOND;
+    field public static final android.icu.util.MeasureUnit NAUTICAL_MILE;
+    field public static final android.icu.util.MeasureUnit OHM;
+    field public static final android.icu.util.MeasureUnit OUNCE;
+    field public static final android.icu.util.MeasureUnit OUNCE_TROY;
+    field public static final android.icu.util.MeasureUnit PARSEC;
+    field public static final android.icu.util.MeasureUnit PART_PER_MILLION;
+    field public static final android.icu.util.MeasureUnit PERCENT;
+    field public static final android.icu.util.MeasureUnit PERMILLE;
+    field public static final android.icu.util.MeasureUnit PETABYTE;
+    field public static final android.icu.util.MeasureUnit PICOMETER;
+    field public static final android.icu.util.MeasureUnit PINT;
+    field public static final android.icu.util.MeasureUnit PINT_METRIC;
+    field public static final android.icu.util.MeasureUnit PIXEL;
+    field public static final android.icu.util.MeasureUnit PIXEL_PER_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit PIXEL_PER_INCH;
+    field public static final android.icu.util.MeasureUnit POINT;
+    field public static final android.icu.util.MeasureUnit POUND;
+    field public static final android.icu.util.MeasureUnit POUND_PER_SQUARE_INCH;
+    field public static final android.icu.util.MeasureUnit QUART;
+    field public static final android.icu.util.MeasureUnit RADIAN;
+    field public static final android.icu.util.MeasureUnit REVOLUTION_ANGLE;
+    field public static final android.icu.util.TimeUnit SECOND;
+    field public static final android.icu.util.MeasureUnit SQUARE_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit SQUARE_FOOT;
+    field public static final android.icu.util.MeasureUnit SQUARE_INCH;
+    field public static final android.icu.util.MeasureUnit SQUARE_KILOMETER;
+    field public static final android.icu.util.MeasureUnit SQUARE_METER;
+    field public static final android.icu.util.MeasureUnit SQUARE_MILE;
+    field public static final android.icu.util.MeasureUnit SQUARE_YARD;
+    field public static final android.icu.util.MeasureUnit STONE;
+    field public static final android.icu.util.MeasureUnit TABLESPOON;
+    field public static final android.icu.util.MeasureUnit TEASPOON;
+    field public static final android.icu.util.MeasureUnit TERABIT;
+    field public static final android.icu.util.MeasureUnit TERABYTE;
+    field public static final android.icu.util.MeasureUnit TON;
+    field public static final android.icu.util.MeasureUnit VOLT;
+    field public static final android.icu.util.MeasureUnit WATT;
+    field public static final android.icu.util.TimeUnit WEEK;
+    field public static final android.icu.util.MeasureUnit YARD;
+    field public static final android.icu.util.TimeUnit YEAR;
+  }
+
+  public class Output<T> {
+    ctor public Output();
+    ctor public Output(T);
+    field public T value;
+  }
+
+  public interface RangeValueIterator {
+    method public boolean next(android.icu.util.RangeValueIterator.Element);
+    method public void reset();
+  }
+
+  public static class RangeValueIterator.Element {
+    ctor public RangeValueIterator.Element();
+    field public int limit;
+    field public int start;
+    field public int value;
+  }
+
+  public class TaiwanCalendar extends android.icu.util.GregorianCalendar {
+    ctor public TaiwanCalendar();
+    ctor public TaiwanCalendar(android.icu.util.TimeZone);
+    ctor public TaiwanCalendar(java.util.Locale);
+    ctor public TaiwanCalendar(android.icu.util.ULocale);
+    ctor public TaiwanCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public TaiwanCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public TaiwanCalendar(java.util.Date);
+    ctor public TaiwanCalendar(int, int, int);
+    ctor public TaiwanCalendar(int, int, int, int, int, int);
+    field public static final int BEFORE_MINGUO = 0; // 0x0
+    field public static final int MINGUO = 1; // 0x1
+  }
+
+  public class TimeUnit extends android.icu.util.MeasureUnit {
+    method public static android.icu.util.TimeUnit[] values();
+  }
+
+  public abstract class TimeZone implements java.lang.Cloneable android.icu.util.Freezable<android.icu.util.TimeZone> java.io.Serializable {
+    ctor public TimeZone();
+    method public Object clone();
+    method public android.icu.util.TimeZone cloneAsThawed();
+    method public static int countEquivalentIDs(String);
+    method public android.icu.util.TimeZone freeze();
+    method public static java.util.Set<java.lang.String> getAvailableIDs(android.icu.util.TimeZone.SystemTimeZoneType, String, Integer);
+    method public static String[] getAvailableIDs(int);
+    method public static String[] getAvailableIDs(String);
+    method public static String[] getAvailableIDs();
+    method public static String getCanonicalID(String);
+    method public static String getCanonicalID(String, boolean[]);
+    method public int getDSTSavings();
+    method public static android.icu.util.TimeZone getDefault();
+    method public final String getDisplayName();
+    method public final String getDisplayName(java.util.Locale);
+    method public final String getDisplayName(android.icu.util.ULocale);
+    method public final String getDisplayName(boolean, int);
+    method public String getDisplayName(boolean, int, java.util.Locale);
+    method public String getDisplayName(boolean, int, android.icu.util.ULocale);
+    method public static String getEquivalentID(String, int);
+    method public static android.icu.util.TimeZone getFrozenTimeZone(String);
+    method public String getID();
+    method public static String getIDForWindowsID(String, String);
+    method public abstract int getOffset(int, int, int, int, int, int);
+    method public int getOffset(long);
+    method public void getOffset(long, boolean, int[]);
+    method public abstract int getRawOffset();
+    method public static String getRegion(String);
+    method public static String getTZDataVersion();
+    method public static android.icu.util.TimeZone getTimeZone(String);
+    method public static android.icu.util.TimeZone getTimeZone(String, int);
+    method public static String getWindowsID(String);
+    method public boolean hasSameRules(android.icu.util.TimeZone);
+    method public abstract boolean inDaylightTime(java.util.Date);
+    method public boolean isFrozen();
+    method public boolean observesDaylightTime();
+    method public void setID(String);
+    method public abstract void setRawOffset(int);
+    method public abstract boolean useDaylightTime();
+    field public static final int GENERIC_LOCATION = 7; // 0x7
+    field public static final android.icu.util.TimeZone GMT_ZONE;
+    field public static final int LONG = 1; // 0x1
+    field public static final int LONG_GENERIC = 3; // 0x3
+    field public static final int LONG_GMT = 5; // 0x5
+    field public static final int SHORT = 0; // 0x0
+    field public static final int SHORT_COMMONLY_USED = 6; // 0x6
+    field public static final int SHORT_GENERIC = 2; // 0x2
+    field public static final int SHORT_GMT = 4; // 0x4
+    field public static final int TIMEZONE_ICU = 0; // 0x0
+    field public static final int TIMEZONE_JDK = 1; // 0x1
+    field public static final android.icu.util.TimeZone UNKNOWN_ZONE;
+    field public static final String UNKNOWN_ZONE_ID = "Etc/Unknown";
+  }
+
+  public enum TimeZone.SystemTimeZoneType {
+    enum_constant public static final android.icu.util.TimeZone.SystemTimeZoneType ANY;
+    enum_constant public static final android.icu.util.TimeZone.SystemTimeZoneType CANONICAL;
+    enum_constant public static final android.icu.util.TimeZone.SystemTimeZoneType CANONICAL_LOCATION;
+  }
+
+  public final class ULocale implements java.lang.Comparable<android.icu.util.ULocale> java.io.Serializable {
+    ctor public ULocale(String);
+    ctor public ULocale(String, String);
+    ctor public ULocale(String, String, String);
+    method public static android.icu.util.ULocale acceptLanguage(String, android.icu.util.ULocale[], boolean[]);
+    method public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[], android.icu.util.ULocale[], boolean[]);
+    method public static android.icu.util.ULocale acceptLanguage(String, boolean[]);
+    method public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[], boolean[]);
+    method public static android.icu.util.ULocale addLikelySubtags(android.icu.util.ULocale);
+    method public static String canonicalize(String);
+    method public Object clone();
+    method public int compareTo(android.icu.util.ULocale);
+    method public static android.icu.util.ULocale createCanonical(String);
+    method public static android.icu.util.ULocale forLanguageTag(String);
+    method public static android.icu.util.ULocale forLocale(java.util.Locale);
+    method public static android.icu.util.ULocale[] getAvailableLocales();
+    method public static java.util.Collection<android.icu.util.ULocale> getAvailableLocalesByType(android.icu.util.ULocale.AvailableType);
+    method public String getBaseName();
+    method public static String getBaseName(String);
+    method public String getCharacterOrientation();
+    method public String getCountry();
+    method public static String getCountry(String);
+    method public static android.icu.util.ULocale getDefault();
+    method public static android.icu.util.ULocale getDefault(android.icu.util.ULocale.Category);
+    method public String getDisplayCountry();
+    method public String getDisplayCountry(android.icu.util.ULocale);
+    method public static String getDisplayCountry(String, String);
+    method public static String getDisplayCountry(String, android.icu.util.ULocale);
+    method public static String getDisplayKeyword(String);
+    method public static String getDisplayKeyword(String, String);
+    method public static String getDisplayKeyword(String, android.icu.util.ULocale);
+    method public String getDisplayKeywordValue(String);
+    method public String getDisplayKeywordValue(String, android.icu.util.ULocale);
+    method public static String getDisplayKeywordValue(String, String, String);
+    method public static String getDisplayKeywordValue(String, String, android.icu.util.ULocale);
+    method public String getDisplayLanguage();
+    method public String getDisplayLanguage(android.icu.util.ULocale);
+    method public static String getDisplayLanguage(String, String);
+    method public static String getDisplayLanguage(String, android.icu.util.ULocale);
+    method public String getDisplayLanguageWithDialect();
+    method public String getDisplayLanguageWithDialect(android.icu.util.ULocale);
+    method public static String getDisplayLanguageWithDialect(String, String);
+    method public static String getDisplayLanguageWithDialect(String, android.icu.util.ULocale);
+    method public String getDisplayName();
+    method public String getDisplayName(android.icu.util.ULocale);
+    method public static String getDisplayName(String, String);
+    method public static String getDisplayName(String, android.icu.util.ULocale);
+    method public String getDisplayNameWithDialect();
+    method public String getDisplayNameWithDialect(android.icu.util.ULocale);
+    method public static String getDisplayNameWithDialect(String, String);
+    method public static String getDisplayNameWithDialect(String, android.icu.util.ULocale);
+    method public String getDisplayScript();
+    method public String getDisplayScript(android.icu.util.ULocale);
+    method public static String getDisplayScript(String, String);
+    method public static String getDisplayScript(String, android.icu.util.ULocale);
+    method public String getDisplayVariant();
+    method public String getDisplayVariant(android.icu.util.ULocale);
+    method public static String getDisplayVariant(String, String);
+    method public static String getDisplayVariant(String, android.icu.util.ULocale);
+    method public String getExtension(char);
+    method public java.util.Set<java.lang.Character> getExtensionKeys();
+    method public static String getFallback(String);
+    method public android.icu.util.ULocale getFallback();
+    method public String getISO3Country();
+    method public static String getISO3Country(String);
+    method public String getISO3Language();
+    method public static String getISO3Language(String);
+    method public static String[] getISOCountries();
+    method public static String[] getISOLanguages();
+    method public String getKeywordValue(String);
+    method public static String getKeywordValue(String, String);
+    method public java.util.Iterator<java.lang.String> getKeywords();
+    method public static java.util.Iterator<java.lang.String> getKeywords(String);
+    method public String getLanguage();
+    method public static String getLanguage(String);
+    method public String getLineOrientation();
+    method public String getName();
+    method public static String getName(String);
+    method public String getScript();
+    method public static String getScript(String);
+    method public java.util.Set<java.lang.String> getUnicodeLocaleAttributes();
+    method public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
+    method public String getUnicodeLocaleType(String);
+    method public String getVariant();
+    method public static String getVariant(String);
+    method public boolean isRightToLeft();
+    method public static android.icu.util.ULocale minimizeSubtags(android.icu.util.ULocale);
+    method public android.icu.util.ULocale setKeywordValue(String, String);
+    method public static String setKeywordValue(String, String, String);
+    method public String toLanguageTag();
+    method public static String toLegacyKey(String);
+    method public static String toLegacyType(String, String);
+    method public java.util.Locale toLocale();
+    method public static String toUnicodeLocaleKey(String);
+    method public static String toUnicodeLocaleType(String, String);
+    field public static final android.icu.util.ULocale CANADA;
+    field public static final android.icu.util.ULocale CANADA_FRENCH;
+    field public static final android.icu.util.ULocale CHINA;
+    field public static final android.icu.util.ULocale CHINESE;
+    field public static final android.icu.util.ULocale ENGLISH;
+    field public static final android.icu.util.ULocale FRANCE;
+    field public static final android.icu.util.ULocale FRENCH;
+    field public static final android.icu.util.ULocale GERMAN;
+    field public static final android.icu.util.ULocale GERMANY;
+    field public static final android.icu.util.ULocale ITALIAN;
+    field public static final android.icu.util.ULocale ITALY;
+    field public static final android.icu.util.ULocale JAPAN;
+    field public static final android.icu.util.ULocale JAPANESE;
+    field public static final android.icu.util.ULocale KOREA;
+    field public static final android.icu.util.ULocale KOREAN;
+    field public static final android.icu.util.ULocale PRC;
+    field public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x'
+    field public static final android.icu.util.ULocale ROOT;
+    field public static final android.icu.util.ULocale SIMPLIFIED_CHINESE;
+    field public static final android.icu.util.ULocale TAIWAN;
+    field public static final android.icu.util.ULocale TRADITIONAL_CHINESE;
+    field public static final android.icu.util.ULocale UK;
+    field public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u'
+    field public static final android.icu.util.ULocale US;
+  }
+
+  public enum ULocale.AvailableType {
+    enum_constant public static final android.icu.util.ULocale.AvailableType DEFAULT;
+    enum_constant public static final android.icu.util.ULocale.AvailableType ONLY_LEGACY_ALIASES;
+    enum_constant public static final android.icu.util.ULocale.AvailableType WITH_LEGACY_ALIASES;
+  }
+
+  public static final class ULocale.Builder {
+    ctor public ULocale.Builder();
+    method public android.icu.util.ULocale.Builder addUnicodeLocaleAttribute(String);
+    method public android.icu.util.ULocale build();
+    method public android.icu.util.ULocale.Builder clear();
+    method public android.icu.util.ULocale.Builder clearExtensions();
+    method public android.icu.util.ULocale.Builder removeUnicodeLocaleAttribute(String);
+    method public android.icu.util.ULocale.Builder setExtension(char, String);
+    method public android.icu.util.ULocale.Builder setLanguage(String);
+    method public android.icu.util.ULocale.Builder setLanguageTag(String);
+    method public android.icu.util.ULocale.Builder setLocale(android.icu.util.ULocale);
+    method public android.icu.util.ULocale.Builder setRegion(String);
+    method public android.icu.util.ULocale.Builder setScript(String);
+    method public android.icu.util.ULocale.Builder setUnicodeLocaleKeyword(String, String);
+    method public android.icu.util.ULocale.Builder setVariant(String);
+  }
+
+  public enum ULocale.Category {
+    enum_constant public static final android.icu.util.ULocale.Category DISPLAY;
+    enum_constant public static final android.icu.util.ULocale.Category FORMAT;
+  }
+
+  public final class UniversalTimeScale {
+    method public static android.icu.math.BigDecimal bigDecimalFrom(double, int);
+    method public static android.icu.math.BigDecimal bigDecimalFrom(long, int);
+    method public static android.icu.math.BigDecimal bigDecimalFrom(android.icu.math.BigDecimal, int);
+    method public static long from(long, int);
+    method public static long getTimeScaleValue(int, int);
+    method public static android.icu.math.BigDecimal toBigDecimal(long, int);
+    method public static android.icu.math.BigDecimal toBigDecimal(android.icu.math.BigDecimal, int);
+    method public static long toLong(long, int);
+    field public static final int DB2_TIME = 8; // 0x8
+    field public static final int DOTNET_DATE_TIME = 4; // 0x4
+    field public static final int EPOCH_OFFSET_PLUS_1_VALUE = 6; // 0x6
+    field public static final int EPOCH_OFFSET_VALUE = 1; // 0x1
+    field public static final int EXCEL_TIME = 7; // 0x7
+    field public static final int FROM_MAX_VALUE = 3; // 0x3
+    field public static final int FROM_MIN_VALUE = 2; // 0x2
+    field public static final int ICU4C_TIME = 2; // 0x2
+    field public static final int JAVA_TIME = 0; // 0x0
+    field public static final int MAC_OLD_TIME = 5; // 0x5
+    field public static final int MAC_TIME = 6; // 0x6
+    field @Deprecated public static final int MAX_SCALE = 10; // 0xa
+    field public static final int TO_MAX_VALUE = 5; // 0x5
+    field public static final int TO_MIN_VALUE = 4; // 0x4
+    field public static final int UNITS_VALUE = 0; // 0x0
+    field public static final int UNIX_MICROSECONDS_TIME = 9; // 0x9
+    field public static final int UNIX_TIME = 1; // 0x1
+    field public static final int WINDOWS_FILE_TIME = 3; // 0x3
+  }
+
+  public interface ValueIterator {
+    method public boolean next(android.icu.util.ValueIterator.Element);
+    method public void reset();
+    method public void setRange(int, int);
+  }
+
+  public static final class ValueIterator.Element {
+    ctor public ValueIterator.Element();
+    field public int integer;
+    field public Object value;
+  }
+
+  public final class VersionInfo implements java.lang.Comparable<android.icu.util.VersionInfo> {
+    method public int compareTo(android.icu.util.VersionInfo);
+    method public static android.icu.util.VersionInfo getInstance(String);
+    method public static android.icu.util.VersionInfo getInstance(int, int, int, int);
+    method public static android.icu.util.VersionInfo getInstance(int, int, int);
+    method public static android.icu.util.VersionInfo getInstance(int, int);
+    method public static android.icu.util.VersionInfo getInstance(int);
+    method public int getMajor();
+    method public int getMicro();
+    method public int getMilli();
+    method public int getMinor();
+    field public static final android.icu.util.VersionInfo ICU_VERSION;
+    field public static final android.icu.util.VersionInfo UCOL_BUILDER_VERSION;
+    field public static final android.icu.util.VersionInfo UCOL_RUNTIME_VERSION;
+    field public static final android.icu.util.VersionInfo UNICODE_10_0;
+    field public static final android.icu.util.VersionInfo UNICODE_11_0;
+    field public static final android.icu.util.VersionInfo UNICODE_12_0;
+    field public static final android.icu.util.VersionInfo UNICODE_12_1;
+    field public static final android.icu.util.VersionInfo UNICODE_13_0;
+    field public static final android.icu.util.VersionInfo UNICODE_1_0;
+    field public static final android.icu.util.VersionInfo UNICODE_1_0_1;
+    field public static final android.icu.util.VersionInfo UNICODE_1_1_0;
+    field public static final android.icu.util.VersionInfo UNICODE_1_1_5;
+    field public static final android.icu.util.VersionInfo UNICODE_2_0;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_2;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_5;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_8;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_9;
+    field public static final android.icu.util.VersionInfo UNICODE_3_0;
+    field public static final android.icu.util.VersionInfo UNICODE_3_0_1;
+    field public static final android.icu.util.VersionInfo UNICODE_3_1_0;
+    field public static final android.icu.util.VersionInfo UNICODE_3_1_1;
+    field public static final android.icu.util.VersionInfo UNICODE_3_2;
+    field public static final android.icu.util.VersionInfo UNICODE_4_0;
+    field public static final android.icu.util.VersionInfo UNICODE_4_0_1;
+    field public static final android.icu.util.VersionInfo UNICODE_4_1;
+    field public static final android.icu.util.VersionInfo UNICODE_5_0;
+    field public static final android.icu.util.VersionInfo UNICODE_5_1;
+    field public static final android.icu.util.VersionInfo UNICODE_5_2;
+    field public static final android.icu.util.VersionInfo UNICODE_6_0;
+    field public static final android.icu.util.VersionInfo UNICODE_6_1;
+    field public static final android.icu.util.VersionInfo UNICODE_6_2;
+    field public static final android.icu.util.VersionInfo UNICODE_6_3;
+    field public static final android.icu.util.VersionInfo UNICODE_7_0;
+    field public static final android.icu.util.VersionInfo UNICODE_8_0;
+    field public static final android.icu.util.VersionInfo UNICODE_9_0;
+  }
+
+}
+
+package android.inputmethodservice {
+
+  public abstract class AbstractInputMethodService extends android.app.Service implements android.view.KeyEvent.Callback {
+    ctor public AbstractInputMethodService();
+    method public android.view.KeyEvent.DispatcherState getKeyDispatcherState();
+    method public final boolean isUiContext();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface();
+    method public abstract android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+  }
+
+  public abstract class AbstractInputMethodService.AbstractInputMethodImpl implements android.view.inputmethod.InputMethod {
+    ctor public AbstractInputMethodService.AbstractInputMethodImpl();
+    method @MainThread public void createSession(android.view.inputmethod.InputMethod.SessionCallback);
+    method @MainThread public void revokeSession(android.view.inputmethod.InputMethodSession);
+    method @MainThread public void setSessionEnabled(android.view.inputmethod.InputMethodSession, boolean);
+  }
+
+  public abstract class AbstractInputMethodService.AbstractInputMethodSessionImpl implements android.view.inputmethod.InputMethodSession {
+    ctor public AbstractInputMethodService.AbstractInputMethodSessionImpl();
+    method public void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public boolean isEnabled();
+    method public boolean isRevoked();
+    method public void revokeSelf();
+    method public void setEnabled(boolean);
+  }
+
+  public class ExtractEditText extends android.widget.EditText {
+    ctor public ExtractEditText(android.content.Context);
+    ctor public ExtractEditText(android.content.Context, android.util.AttributeSet);
+    ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int);
+    ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int, int);
+    method public void finishInternalChanges();
+    method public boolean hasVerticalScrollBar();
+    method public void startInternalChanges();
+  }
+
+  @UiContext public class InputMethodService extends android.inputmethodservice.AbstractInputMethodService {
+    ctor public InputMethodService();
+    method @Deprecated public boolean enableHardwareAcceleration();
+    method public int getBackDisposition();
+    method public int getCandidatesHiddenVisibility();
+    method public android.view.inputmethod.InputBinding getCurrentInputBinding();
+    method public android.view.inputmethod.InputConnection getCurrentInputConnection();
+    method public android.view.inputmethod.EditorInfo getCurrentInputEditorInfo();
+    method public boolean getCurrentInputStarted();
+    method @Deprecated public int getInputMethodWindowRecommendedHeight();
+    method public android.view.LayoutInflater getLayoutInflater();
+    method public int getMaxWidth();
+    method public CharSequence getTextForImeAction(int);
+    method public android.app.Dialog getWindow();
+    method public void hideStatusIcon();
+    method public void hideWindow();
+    method public boolean isExtractViewShown();
+    method public boolean isFullscreenMode();
+    method public boolean isInputViewShown();
+    method public boolean isShowInputRequested();
+    method public void onAppPrivateCommand(String, android.os.Bundle);
+    method public void onBindInput();
+    method public void onComputeInsets(android.inputmethodservice.InputMethodService.Insets);
+    method public void onConfigureWindow(android.view.Window, boolean, boolean);
+    method public android.view.View onCreateCandidatesView();
+    method public android.view.View onCreateExtractTextView();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest onCreateInlineSuggestionsRequest(@NonNull android.os.Bundle);
+    method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl onCreateInputMethodInterface();
+    method public android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl onCreateInputMethodSessionInterface();
+    method public android.view.View onCreateInputView();
+    method protected void onCurrentInputMethodSubtypeChanged(android.view.inputmethod.InputMethodSubtype);
+    method public void onDisplayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public boolean onEvaluateFullscreenMode();
+    method @CallSuper public boolean onEvaluateInputViewShown();
+    method public boolean onExtractTextContextMenuItem(int);
+    method public void onExtractedCursorMovement(int, int);
+    method public void onExtractedSelectionChanged(int, int);
+    method public void onExtractedTextClicked();
+    method public void onExtractingInputChanged(android.view.inputmethod.EditorInfo);
+    method public void onFinishCandidatesView(boolean);
+    method public void onFinishInput();
+    method public void onFinishInputView(boolean);
+    method public void onInitializeInterface();
+    method public boolean onInlineSuggestionsResponse(@NonNull android.view.inputmethod.InlineSuggestionsResponse);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public boolean onShowInputRequested(int, boolean);
+    method public void onStartCandidatesView(android.view.inputmethod.EditorInfo, boolean);
+    method public void onStartInput(android.view.inputmethod.EditorInfo, boolean);
+    method public void onStartInputView(android.view.inputmethod.EditorInfo, boolean);
+    method public void onUnbindInput();
+    method @Deprecated public void onUpdateCursor(android.graphics.Rect);
+    method public void onUpdateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo);
+    method public void onUpdateExtractedText(int, android.view.inputmethod.ExtractedText);
+    method public void onUpdateExtractingViews(android.view.inputmethod.EditorInfo);
+    method public void onUpdateExtractingVisibility(android.view.inputmethod.EditorInfo);
+    method public void onUpdateSelection(int, int, int, int, int, int);
+    method @Deprecated public void onViewClicked(boolean);
+    method public void onWindowHidden();
+    method public void onWindowShown();
+    method public void requestHideSelf(int);
+    method public final void requestShowSelf(int);
+    method public boolean sendDefaultEditorAction(boolean);
+    method public void sendDownUpKeyEvents(int);
+    method public void sendKeyChar(char);
+    method public void setBackDisposition(int);
+    method public void setCandidatesView(android.view.View);
+    method public void setCandidatesViewShown(boolean);
+    method public void setExtractView(android.view.View);
+    method public void setExtractViewShown(boolean);
+    method public void setInputView(android.view.View);
+    method public final boolean shouldOfferSwitchingToNextInputMethod();
+    method public void showStatusIcon(@DrawableRes int);
+    method public void showWindow(boolean);
+    method public void switchInputMethod(String);
+    method public final void switchInputMethod(String, android.view.inputmethod.InputMethodSubtype);
+    method public final boolean switchToNextInputMethod(boolean);
+    method public final boolean switchToPreviousInputMethod();
+    method public void updateFullscreenMode();
+    method public void updateInputViewShown();
+    field public static final int BACK_DISPOSITION_ADJUST_NOTHING = 3; // 0x3
+    field public static final int BACK_DISPOSITION_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2
+    field @Deprecated public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1
+  }
+
+  public class InputMethodService.InputMethodImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl {
+    ctor public InputMethodService.InputMethodImpl();
+    method @MainThread public void attachToken(android.os.IBinder);
+    method @MainThread public void bindInput(android.view.inputmethod.InputBinding);
+    method @MainThread public void changeInputMethodSubtype(android.view.inputmethod.InputMethodSubtype);
+    method @MainThread public void hideSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void restartInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void showSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void startInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void unbindInput();
+  }
+
+  public class InputMethodService.InputMethodSessionImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl {
+    ctor public InputMethodService.InputMethodSessionImpl();
+    method public void appPrivateCommand(String, android.os.Bundle);
+    method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public void finishInput();
+    method @Deprecated public void toggleSoftInput(int, int);
+    method public void updateCursor(android.graphics.Rect);
+    method public void updateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo);
+    method public void updateExtractedText(int, android.view.inputmethod.ExtractedText);
+    method public void updateSelection(int, int, int, int, int, int);
+    method public void viewClicked(boolean);
+  }
+
+  public static final class InputMethodService.Insets {
+    ctor public InputMethodService.Insets();
+    field public static final int TOUCHABLE_INSETS_CONTENT = 1; // 0x1
+    field public static final int TOUCHABLE_INSETS_FRAME = 0; // 0x0
+    field public static final int TOUCHABLE_INSETS_REGION = 3; // 0x3
+    field public static final int TOUCHABLE_INSETS_VISIBLE = 2; // 0x2
+    field public int contentTopInsets;
+    field public int touchableInsets;
+    field public final android.graphics.Region touchableRegion;
+    field public int visibleTopInsets;
+  }
+
+  @Deprecated public class Keyboard {
+    ctor @Deprecated public Keyboard(android.content.Context, int);
+    ctor @Deprecated public Keyboard(android.content.Context, @XmlRes int, int, int, int);
+    ctor @Deprecated public Keyboard(android.content.Context, @XmlRes int, int);
+    ctor @Deprecated public Keyboard(android.content.Context, int, CharSequence, int, int);
+    method @Deprecated protected android.inputmethodservice.Keyboard.Key createKeyFromXml(android.content.res.Resources, android.inputmethodservice.Keyboard.Row, int, int, android.content.res.XmlResourceParser);
+    method @Deprecated protected android.inputmethodservice.Keyboard.Row createRowFromXml(android.content.res.Resources, android.content.res.XmlResourceParser);
+    method @Deprecated public int getHeight();
+    method @Deprecated protected int getHorizontalGap();
+    method @Deprecated protected int getKeyHeight();
+    method @Deprecated protected int getKeyWidth();
+    method @Deprecated public java.util.List<android.inputmethodservice.Keyboard.Key> getKeys();
+    method @Deprecated public int getMinWidth();
+    method @Deprecated public java.util.List<android.inputmethodservice.Keyboard.Key> getModifierKeys();
+    method @Deprecated public int[] getNearestKeys(int, int);
+    method @Deprecated public int getShiftKeyIndex();
+    method @Deprecated protected int getVerticalGap();
+    method @Deprecated public boolean isShifted();
+    method @Deprecated protected void setHorizontalGap(int);
+    method @Deprecated protected void setKeyHeight(int);
+    method @Deprecated protected void setKeyWidth(int);
+    method @Deprecated public boolean setShifted(boolean);
+    method @Deprecated protected void setVerticalGap(int);
+    field @Deprecated public static final int EDGE_BOTTOM = 8; // 0x8
+    field @Deprecated public static final int EDGE_LEFT = 1; // 0x1
+    field @Deprecated public static final int EDGE_RIGHT = 2; // 0x2
+    field @Deprecated public static final int EDGE_TOP = 4; // 0x4
+    field @Deprecated public static final int KEYCODE_ALT = -6; // 0xfffffffa
+    field @Deprecated public static final int KEYCODE_CANCEL = -3; // 0xfffffffd
+    field @Deprecated public static final int KEYCODE_DELETE = -5; // 0xfffffffb
+    field @Deprecated public static final int KEYCODE_DONE = -4; // 0xfffffffc
+    field @Deprecated public static final int KEYCODE_MODE_CHANGE = -2; // 0xfffffffe
+    field @Deprecated public static final int KEYCODE_SHIFT = -1; // 0xffffffff
+  }
+
+  @Deprecated public static class Keyboard.Key {
+    ctor @Deprecated public Keyboard.Key(android.inputmethodservice.Keyboard.Row);
+    ctor @Deprecated public Keyboard.Key(android.content.res.Resources, android.inputmethodservice.Keyboard.Row, int, int, android.content.res.XmlResourceParser);
+    method @Deprecated public int[] getCurrentDrawableState();
+    method @Deprecated public boolean isInside(int, int);
+    method @Deprecated public void onPressed();
+    method @Deprecated public void onReleased(boolean);
+    method @Deprecated public int squaredDistanceFrom(int, int);
+    field @Deprecated public int[] codes;
+    field @Deprecated public int edgeFlags;
+    field @Deprecated public int gap;
+    field @Deprecated public int height;
+    field @Deprecated public android.graphics.drawable.Drawable icon;
+    field @Deprecated public android.graphics.drawable.Drawable iconPreview;
+    field @Deprecated public CharSequence label;
+    field @Deprecated public boolean modifier;
+    field @Deprecated public boolean on;
+    field @Deprecated public CharSequence popupCharacters;
+    field @Deprecated public int popupResId;
+    field @Deprecated public boolean pressed;
+    field @Deprecated public boolean repeatable;
+    field @Deprecated public boolean sticky;
+    field @Deprecated public CharSequence text;
+    field @Deprecated public int width;
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+  }
+
+  @Deprecated public static class Keyboard.Row {
+    ctor @Deprecated public Keyboard.Row(android.inputmethodservice.Keyboard);
+    ctor @Deprecated public Keyboard.Row(android.content.res.Resources, android.inputmethodservice.Keyboard, android.content.res.XmlResourceParser);
+    field @Deprecated public int defaultHeight;
+    field @Deprecated public int defaultHorizontalGap;
+    field @Deprecated public int defaultWidth;
+    field @Deprecated public int mode;
+    field @Deprecated public int rowEdgeFlags;
+    field @Deprecated public int verticalGap;
+  }
+
+  @Deprecated public class KeyboardView extends android.view.View implements android.view.View.OnClickListener {
+    ctor @Deprecated public KeyboardView(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public KeyboardView(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public KeyboardView(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void closing();
+    method @Deprecated public android.inputmethodservice.Keyboard getKeyboard();
+    method @Deprecated protected android.inputmethodservice.KeyboardView.OnKeyboardActionListener getOnKeyboardActionListener();
+    method @Deprecated public boolean handleBack();
+    method @Deprecated public void invalidateAllKeys();
+    method @Deprecated public void invalidateKey(int);
+    method @Deprecated public boolean isPreviewEnabled();
+    method @Deprecated public boolean isProximityCorrectionEnabled();
+    method @Deprecated public boolean isShifted();
+    method public void onClick(android.view.View);
+    method @Deprecated public void onDetachedFromWindow();
+    method @Deprecated public void onDraw(android.graphics.Canvas);
+    method @Deprecated protected boolean onLongPress(android.inputmethodservice.Keyboard.Key);
+    method @Deprecated public void onMeasure(int, int);
+    method @Deprecated public void onSizeChanged(int, int, int, int);
+    method @Deprecated public void setKeyboard(android.inputmethodservice.Keyboard);
+    method @Deprecated public void setOnKeyboardActionListener(android.inputmethodservice.KeyboardView.OnKeyboardActionListener);
+    method @Deprecated public void setPopupOffset(int, int);
+    method @Deprecated public void setPopupParent(android.view.View);
+    method @Deprecated public void setPreviewEnabled(boolean);
+    method @Deprecated public void setProximityCorrectionEnabled(boolean);
+    method @Deprecated public boolean setShifted(boolean);
+    method @Deprecated public void setVerticalCorrection(int);
+    method @Deprecated protected void swipeDown();
+    method @Deprecated protected void swipeLeft();
+    method @Deprecated protected void swipeRight();
+    method @Deprecated protected void swipeUp();
+  }
+
+  @Deprecated public static interface KeyboardView.OnKeyboardActionListener {
+    method @Deprecated public void onKey(int, int[]);
+    method @Deprecated public void onPress(int);
+    method @Deprecated public void onRelease(int);
+    method @Deprecated public void onText(CharSequence);
+    method @Deprecated public void swipeDown();
+    method @Deprecated public void swipeLeft();
+    method @Deprecated public void swipeRight();
+    method @Deprecated public void swipeUp();
+  }
+
+}
+
+package android.location {
+
+  public class Address implements android.os.Parcelable {
+    ctor public Address(java.util.Locale);
+    method public void clearLatitude();
+    method public void clearLongitude();
+    method public int describeContents();
+    method public String getAddressLine(int);
+    method public String getAdminArea();
+    method public String getCountryCode();
+    method public String getCountryName();
+    method public android.os.Bundle getExtras();
+    method public String getFeatureName();
+    method public double getLatitude();
+    method public java.util.Locale getLocale();
+    method public String getLocality();
+    method public double getLongitude();
+    method public int getMaxAddressLineIndex();
+    method public String getPhone();
+    method public String getPostalCode();
+    method public String getPremises();
+    method public String getSubAdminArea();
+    method public String getSubLocality();
+    method public String getSubThoroughfare();
+    method public String getThoroughfare();
+    method public String getUrl();
+    method public boolean hasLatitude();
+    method public boolean hasLongitude();
+    method public void setAddressLine(int, String);
+    method public void setAdminArea(String);
+    method public void setCountryCode(String);
+    method public void setCountryName(String);
+    method public void setExtras(android.os.Bundle);
+    method public void setFeatureName(String);
+    method public void setLatitude(double);
+    method public void setLocality(String);
+    method public void setLongitude(double);
+    method public void setPhone(String);
+    method public void setPostalCode(String);
+    method public void setPremises(String);
+    method public void setSubAdminArea(String);
+    method public void setSubLocality(String);
+    method public void setSubThoroughfare(String);
+    method public void setThoroughfare(String);
+    method public void setUrl(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.Address> CREATOR;
+  }
+
+  public class Criteria implements android.os.Parcelable {
+    ctor public Criteria();
+    ctor public Criteria(android.location.Criteria);
+    method public int describeContents();
+    method public int getAccuracy();
+    method public int getBearingAccuracy();
+    method public int getHorizontalAccuracy();
+    method public int getPowerRequirement();
+    method public int getSpeedAccuracy();
+    method public int getVerticalAccuracy();
+    method public boolean isAltitudeRequired();
+    method public boolean isBearingRequired();
+    method public boolean isCostAllowed();
+    method public boolean isSpeedRequired();
+    method public void setAccuracy(int);
+    method public void setAltitudeRequired(boolean);
+    method public void setBearingAccuracy(int);
+    method public void setBearingRequired(boolean);
+    method public void setCostAllowed(boolean);
+    method public void setHorizontalAccuracy(int);
+    method public void setPowerRequirement(int);
+    method public void setSpeedAccuracy(int);
+    method public void setSpeedRequired(boolean);
+    method public void setVerticalAccuracy(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACCURACY_COARSE = 2; // 0x2
+    field public static final int ACCURACY_FINE = 1; // 0x1
+    field public static final int ACCURACY_HIGH = 3; // 0x3
+    field public static final int ACCURACY_LOW = 1; // 0x1
+    field public static final int ACCURACY_MEDIUM = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.Criteria> CREATOR;
+    field public static final int NO_REQUIREMENT = 0; // 0x0
+    field public static final int POWER_HIGH = 3; // 0x3
+    field public static final int POWER_LOW = 1; // 0x1
+    field public static final int POWER_MEDIUM = 2; // 0x2
+  }
+
+  public final class Geocoder {
+    ctor public Geocoder(android.content.Context, java.util.Locale);
+    ctor public Geocoder(android.content.Context);
+    method public java.util.List<android.location.Address> getFromLocation(double, double, int) throws java.io.IOException;
+    method public java.util.List<android.location.Address> getFromLocationName(String, int) throws java.io.IOException;
+    method public java.util.List<android.location.Address> getFromLocationName(String, int, double, double, double, double) throws java.io.IOException;
+    method public static boolean isPresent();
+  }
+
+  public final class GnssAntennaInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0f) public double getCarrierFrequencyMHz();
+    method @NonNull public android.location.GnssAntennaInfo.PhaseCenterOffset getPhaseCenterOffset();
+    method @Nullable public android.location.GnssAntennaInfo.SphericalCorrections getPhaseCenterVariationCorrections();
+    method @Nullable public android.location.GnssAntennaInfo.SphericalCorrections getSignalGainCorrections();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo> CREATOR;
+  }
+
+  public static class GnssAntennaInfo.Builder {
+    ctor @Deprecated public GnssAntennaInfo.Builder();
+    ctor public GnssAntennaInfo.Builder(double, @NonNull android.location.GnssAntennaInfo.PhaseCenterOffset);
+    ctor public GnssAntennaInfo.Builder(@NonNull android.location.GnssAntennaInfo);
+    method @NonNull public android.location.GnssAntennaInfo build();
+    method @NonNull public android.location.GnssAntennaInfo.Builder setCarrierFrequencyMHz(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setPhaseCenterOffset(@NonNull android.location.GnssAntennaInfo.PhaseCenterOffset);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setPhaseCenterVariationCorrections(@Nullable android.location.GnssAntennaInfo.SphericalCorrections);
+    method @NonNull public android.location.GnssAntennaInfo.Builder setSignalGainCorrections(@Nullable android.location.GnssAntennaInfo.SphericalCorrections);
+  }
+
+  public static interface GnssAntennaInfo.Listener {
+    method public void onGnssAntennaInfoReceived(@NonNull java.util.List<android.location.GnssAntennaInfo>);
+  }
+
+  public static final class GnssAntennaInfo.PhaseCenterOffset implements android.os.Parcelable {
+    ctor public GnssAntennaInfo.PhaseCenterOffset(double, double, double, double, double, double);
+    method public int describeContents();
+    method @FloatRange public double getXOffsetMm();
+    method @FloatRange public double getXOffsetUncertaintyMm();
+    method @FloatRange public double getYOffsetMm();
+    method @FloatRange public double getYOffsetUncertaintyMm();
+    method @FloatRange public double getZOffsetMm();
+    method @FloatRange public double getZOffsetUncertaintyMm();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo.PhaseCenterOffset> CREATOR;
+  }
+
+  public static final class GnssAntennaInfo.SphericalCorrections implements android.os.Parcelable {
+    ctor public GnssAntennaInfo.SphericalCorrections(@NonNull double[][], @NonNull double[][]);
+    method public int describeContents();
+    method @NonNull public double[][] getCorrectionUncertaintiesArray();
+    method @NonNull public double[][] getCorrectionsArray();
+    method @FloatRange(from=0.0f, to=180.0f) public double getDeltaPhi();
+    method @FloatRange(from=0.0f, to=360.0f) public double getDeltaTheta();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssAntennaInfo.SphericalCorrections> CREATOR;
+  }
+
+  public final class GnssCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean hasAntennaInfo();
+    method @Deprecated public boolean hasGnssAntennaInfo();
+    method public boolean hasMeasurements();
+    method public boolean hasNavigationMessages();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssCapabilities> CREATOR;
+  }
+
+  public static final class GnssCapabilities.Builder {
+    ctor public GnssCapabilities.Builder();
+    ctor public GnssCapabilities.Builder(@NonNull android.location.GnssCapabilities);
+    method @NonNull public android.location.GnssCapabilities build();
+    method @NonNull public android.location.GnssCapabilities.Builder setHasAntennaInfo(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurements(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasNavigationMessages(boolean);
+  }
+
+  public final class GnssClock implements android.os.Parcelable {
+    method public int describeContents();
+    method public double getBiasNanos();
+    method @FloatRange(from=0.0f) public double getBiasUncertaintyNanos();
+    method public double getDriftNanosPerSecond();
+    method @FloatRange(from=0.0f) public double getDriftUncertaintyNanosPerSecond();
+    method public long getElapsedRealtimeNanos();
+    method @FloatRange(from=0.0f) public double getElapsedRealtimeUncertaintyNanos();
+    method public long getFullBiasNanos();
+    method public int getHardwareClockDiscontinuityCount();
+    method public int getLeapSecond();
+    method @FloatRange(from=0.0) public double getReferenceCarrierFrequencyHzForIsb();
+    method @NonNull public String getReferenceCodeTypeForIsb();
+    method public int getReferenceConstellationTypeForIsb();
+    method public long getTimeNanos();
+    method @FloatRange(from=0.0f) public double getTimeUncertaintyNanos();
+    method public boolean hasBiasNanos();
+    method public boolean hasBiasUncertaintyNanos();
+    method public boolean hasDriftNanosPerSecond();
+    method public boolean hasDriftUncertaintyNanosPerSecond();
+    method public boolean hasElapsedRealtimeNanos();
+    method public boolean hasElapsedRealtimeUncertaintyNanos();
+    method public boolean hasFullBiasNanos();
+    method public boolean hasLeapSecond();
+    method public boolean hasReferenceCarrierFrequencyHzForIsb();
+    method public boolean hasReferenceCodeTypeForIsb();
+    method public boolean hasReferenceConstellationTypeForIsb();
+    method public boolean hasTimeUncertaintyNanos();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssClock> CREATOR;
+  }
+
+  public final class GnssMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method public double getAccumulatedDeltaRangeMeters();
+    method public int getAccumulatedDeltaRangeState();
+    method public double getAccumulatedDeltaRangeUncertaintyMeters();
+    method public double getAutomaticGainControlLevelDb();
+    method @FloatRange(from=0, to=63) public double getBasebandCn0DbHz();
+    method @Deprecated public long getCarrierCycles();
+    method public float getCarrierFrequencyHz();
+    method @Deprecated public double getCarrierPhase();
+    method @Deprecated public double getCarrierPhaseUncertainty();
+    method @FloatRange(from=0, to=63) public double getCn0DbHz();
+    method @NonNull public String getCodeType();
+    method public int getConstellationType();
+    method public double getFullInterSignalBiasNanos();
+    method @FloatRange(from=0.0) public double getFullInterSignalBiasUncertaintyNanos();
+    method public int getMultipathIndicator();
+    method public double getPseudorangeRateMetersPerSecond();
+    method public double getPseudorangeRateUncertaintyMetersPerSecond();
+    method public long getReceivedSvTimeNanos();
+    method public long getReceivedSvTimeUncertaintyNanos();
+    method public double getSatelliteInterSignalBiasNanos();
+    method @FloatRange(from=0.0) public double getSatelliteInterSignalBiasUncertaintyNanos();
+    method public double getSnrInDb();
+    method public int getState();
+    method public int getSvid();
+    method public double getTimeOffsetNanos();
+    method public boolean hasAutomaticGainControlLevelDb();
+    method public boolean hasBasebandCn0DbHz();
+    method @Deprecated public boolean hasCarrierCycles();
+    method public boolean hasCarrierFrequencyHz();
+    method @Deprecated public boolean hasCarrierPhase();
+    method @Deprecated public boolean hasCarrierPhaseUncertainty();
+    method public boolean hasCodeType();
+    method public boolean hasFullInterSignalBiasNanos();
+    method public boolean hasFullInterSignalBiasUncertaintyNanos();
+    method public boolean hasSatelliteInterSignalBiasNanos();
+    method public boolean hasSatelliteInterSignalBiasUncertaintyNanos();
+    method public boolean hasSnrInDb();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ADR_STATE_CYCLE_SLIP = 4; // 0x4
+    field public static final int ADR_STATE_HALF_CYCLE_REPORTED = 16; // 0x10
+    field public static final int ADR_STATE_HALF_CYCLE_RESOLVED = 8; // 0x8
+    field public static final int ADR_STATE_RESET = 2; // 0x2
+    field public static final int ADR_STATE_UNKNOWN = 0; // 0x0
+    field public static final int ADR_STATE_VALID = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurement> CREATOR;
+    field public static final int MULTIPATH_INDICATOR_DETECTED = 1; // 0x1
+    field public static final int MULTIPATH_INDICATOR_NOT_DETECTED = 2; // 0x2
+    field public static final int MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0
+    field public static final int STATE_2ND_CODE_LOCK = 65536; // 0x10000
+    field public static final int STATE_BDS_D2_BIT_SYNC = 256; // 0x100
+    field public static final int STATE_BDS_D2_SUBFRAME_SYNC = 512; // 0x200
+    field public static final int STATE_BIT_SYNC = 2; // 0x2
+    field public static final int STATE_CODE_LOCK = 1; // 0x1
+    field public static final int STATE_GAL_E1BC_CODE_LOCK = 1024; // 0x400
+    field public static final int STATE_GAL_E1B_PAGE_SYNC = 4096; // 0x1000
+    field public static final int STATE_GAL_E1C_2ND_CODE_LOCK = 2048; // 0x800
+    field public static final int STATE_GLO_STRING_SYNC = 64; // 0x40
+    field public static final int STATE_GLO_TOD_DECODED = 128; // 0x80
+    field public static final int STATE_GLO_TOD_KNOWN = 32768; // 0x8000
+    field public static final int STATE_MSEC_AMBIGUOUS = 16; // 0x10
+    field public static final int STATE_SBAS_SYNC = 8192; // 0x2000
+    field public static final int STATE_SUBFRAME_SYNC = 4; // 0x4
+    field public static final int STATE_SYMBOL_SYNC = 32; // 0x20
+    field public static final int STATE_TOW_DECODED = 8; // 0x8
+    field public static final int STATE_TOW_KNOWN = 16384; // 0x4000
+    field public static final int STATE_UNKNOWN = 0; // 0x0
+  }
+
+  public final class GnssMeasurementRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isFullTracking();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurementRequest> CREATOR;
+  }
+
+  public static final class GnssMeasurementRequest.Builder {
+    ctor public GnssMeasurementRequest.Builder();
+    ctor public GnssMeasurementRequest.Builder(@NonNull android.location.GnssMeasurementRequest);
+    method @NonNull public android.location.GnssMeasurementRequest build();
+    method @NonNull public android.location.GnssMeasurementRequest.Builder setFullTracking(boolean);
+  }
+
+  public final class GnssMeasurementsEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.location.GnssClock getClock();
+    method @NonNull public java.util.Collection<android.location.GnssMeasurement> getMeasurements();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssMeasurementsEvent> CREATOR;
+  }
+
+  public abstract static class GnssMeasurementsEvent.Callback {
+    ctor public GnssMeasurementsEvent.Callback();
+    method public void onGnssMeasurementsReceived(android.location.GnssMeasurementsEvent);
+    method @Deprecated public void onStatusChanged(int);
+    field @Deprecated public static final int STATUS_LOCATION_DISABLED = 2; // 0x2
+    field @Deprecated public static final int STATUS_NOT_ALLOWED = 3; // 0x3
+    field @Deprecated public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
+    field @Deprecated public static final int STATUS_READY = 1; // 0x1
+  }
+
+  public final class GnssNavigationMessage implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public byte[] getData();
+    method @IntRange(from=0xffffffff, to=120) public int getMessageId();
+    method public int getStatus();
+    method @IntRange(from=1) public int getSubmessageId();
+    method @IntRange(from=1, to=200) public int getSvid();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssNavigationMessage> CREATOR;
+    field public static final int STATUS_PARITY_PASSED = 1; // 0x1
+    field public static final int STATUS_PARITY_REBUILT = 2; // 0x2
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_BDS_CNAV1 = 1283; // 0x503
+    field public static final int TYPE_BDS_CNAV2 = 1284; // 0x504
+    field public static final int TYPE_BDS_D1 = 1281; // 0x501
+    field public static final int TYPE_BDS_D2 = 1282; // 0x502
+    field public static final int TYPE_GAL_F = 1538; // 0x602
+    field public static final int TYPE_GAL_I = 1537; // 0x601
+    field public static final int TYPE_GLO_L1CA = 769; // 0x301
+    field public static final int TYPE_GPS_CNAV2 = 260; // 0x104
+    field public static final int TYPE_GPS_L1CA = 257; // 0x101
+    field public static final int TYPE_GPS_L2CNAV = 258; // 0x102
+    field public static final int TYPE_GPS_L5CNAV = 259; // 0x103
+    field public static final int TYPE_IRN_L5CA = 1793; // 0x701
+    field public static final int TYPE_QZS_L1CA = 1025; // 0x401
+    field public static final int TYPE_SBS = 513; // 0x201
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public abstract static class GnssNavigationMessage.Callback {
+    ctor public GnssNavigationMessage.Callback();
+    method public void onGnssNavigationMessageReceived(android.location.GnssNavigationMessage);
+    method @Deprecated public void onStatusChanged(int);
+    field @Deprecated public static final int STATUS_LOCATION_DISABLED = 2; // 0x2
+    field @Deprecated public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
+    field @Deprecated public static final int STATUS_READY = 1; // 0x1
+  }
+
+  public final class GnssStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0, to=360) public float getAzimuthDegrees(@IntRange(from=0) int);
+    method @FloatRange(from=0, to=63) public float getBasebandCn0DbHz(@IntRange(from=0) int);
+    method @FloatRange(from=0) public float getCarrierFrequencyHz(@IntRange(from=0) int);
+    method @FloatRange(from=0, to=63) public float getCn0DbHz(@IntRange(from=0) int);
+    method public int getConstellationType(@IntRange(from=0) int);
+    method @FloatRange(from=0xffffffa6, to=90) public float getElevationDegrees(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getSatelliteCount();
+    method @IntRange(from=1, to=200) public int getSvid(@IntRange(from=0) int);
+    method public boolean hasAlmanacData(@IntRange(from=0) int);
+    method public boolean hasBasebandCn0DbHz(@IntRange(from=0) int);
+    method public boolean hasCarrierFrequencyHz(@IntRange(from=0) int);
+    method public boolean hasEphemerisData(@IntRange(from=0) int);
+    method public boolean usedInFix(@IntRange(from=0) int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONSTELLATION_BEIDOU = 5; // 0x5
+    field public static final int CONSTELLATION_GALILEO = 6; // 0x6
+    field public static final int CONSTELLATION_GLONASS = 3; // 0x3
+    field public static final int CONSTELLATION_GPS = 1; // 0x1
+    field public static final int CONSTELLATION_IRNSS = 7; // 0x7
+    field public static final int CONSTELLATION_QZSS = 4; // 0x4
+    field public static final int CONSTELLATION_SBAS = 2; // 0x2
+    field public static final int CONSTELLATION_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssStatus> CREATOR;
+  }
+
+  public static final class GnssStatus.Builder {
+    ctor public GnssStatus.Builder();
+    method @NonNull public android.location.GnssStatus.Builder addSatellite(int, @IntRange(from=1, to=200) int, @FloatRange(from=0, to=63) float, @FloatRange(from=0xffffffa6, to=90) float, @FloatRange(from=0, to=360) float, boolean, boolean, boolean, boolean, @FloatRange(from=0) float, boolean, @FloatRange(from=0, to=63) float);
+    method @NonNull public android.location.GnssStatus build();
+    method @NonNull public android.location.GnssStatus.Builder clearSatellites();
+  }
+
+  public abstract static class GnssStatus.Callback {
+    ctor public GnssStatus.Callback();
+    method public void onFirstFix(int);
+    method public void onSatelliteStatusChanged(@NonNull android.location.GnssStatus);
+    method public void onStarted();
+    method public void onStopped();
+  }
+
+  @Deprecated public final class GpsSatellite {
+    method @Deprecated public float getAzimuth();
+    method @Deprecated public float getElevation();
+    method @Deprecated public int getPrn();
+    method @Deprecated public float getSnr();
+    method @Deprecated public boolean hasAlmanac();
+    method @Deprecated public boolean hasEphemeris();
+    method @Deprecated public boolean usedInFix();
+  }
+
+  @Deprecated public final class GpsStatus {
+    method @Deprecated @NonNull public static android.location.GpsStatus create(@NonNull android.location.GnssStatus, int);
+    method @Deprecated public int getMaxSatellites();
+    method @Deprecated public Iterable<android.location.GpsSatellite> getSatellites();
+    method @Deprecated public int getTimeToFirstFix();
+    field @Deprecated public static final int GPS_EVENT_FIRST_FIX = 3; // 0x3
+    field @Deprecated public static final int GPS_EVENT_SATELLITE_STATUS = 4; // 0x4
+    field @Deprecated public static final int GPS_EVENT_STARTED = 1; // 0x1
+    field @Deprecated public static final int GPS_EVENT_STOPPED = 2; // 0x2
+  }
+
+  @Deprecated public static interface GpsStatus.Listener {
+    method @Deprecated public void onGpsStatusChanged(int);
+  }
+
+  @Deprecated public static interface GpsStatus.NmeaListener {
+    method @Deprecated public void onNmeaReceived(long, String);
+  }
+
+  public class Location implements android.os.Parcelable {
+    ctor public Location(String);
+    ctor public Location(android.location.Location);
+    method public float bearingTo(android.location.Location);
+    method public static String convert(double, int);
+    method public static double convert(String);
+    method public int describeContents();
+    method public static void distanceBetween(double, double, double, double, float[]);
+    method public float distanceTo(android.location.Location);
+    method public void dump(android.util.Printer, String);
+    method public float getAccuracy();
+    method public double getAltitude();
+    method public float getBearing();
+    method public float getBearingAccuracyDegrees();
+    method public long getElapsedRealtimeNanos();
+    method public double getElapsedRealtimeUncertaintyNanos();
+    method public android.os.Bundle getExtras();
+    method public double getLatitude();
+    method public double getLongitude();
+    method public String getProvider();
+    method public float getSpeed();
+    method public float getSpeedAccuracyMetersPerSecond();
+    method public long getTime();
+    method public float getVerticalAccuracyMeters();
+    method public boolean hasAccuracy();
+    method public boolean hasAltitude();
+    method public boolean hasBearing();
+    method public boolean hasBearingAccuracy();
+    method public boolean hasElapsedRealtimeUncertaintyNanos();
+    method public boolean hasSpeed();
+    method public boolean hasSpeedAccuracy();
+    method public boolean hasVerticalAccuracy();
+    method @Deprecated public boolean isFromMockProvider();
+    method public boolean isMock();
+    method @Deprecated public void removeAccuracy();
+    method @Deprecated public void removeAltitude();
+    method @Deprecated public void removeBearing();
+    method @Deprecated public void removeSpeed();
+    method public void reset();
+    method public void set(android.location.Location);
+    method public void setAccuracy(float);
+    method public void setAltitude(double);
+    method public void setBearing(float);
+    method public void setBearingAccuracyDegrees(float);
+    method public void setElapsedRealtimeNanos(long);
+    method public void setElapsedRealtimeUncertaintyNanos(double);
+    method public void setExtras(@Nullable android.os.Bundle);
+    method public void setLatitude(double);
+    method public void setLongitude(double);
+    method public void setMock(boolean);
+    method public void setProvider(String);
+    method public void setSpeed(float);
+    method public void setSpeedAccuracyMetersPerSecond(float);
+    method public void setTime(long);
+    method public void setVerticalAccuracyMeters(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.Location> CREATOR;
+    field public static final int FORMAT_DEGREES = 0; // 0x0
+    field public static final int FORMAT_MINUTES = 1; // 0x1
+    field public static final int FORMAT_SECONDS = 2; // 0x2
+  }
+
+  public interface LocationListener {
+    method public default void onFlushComplete(int);
+    method public void onLocationChanged(@NonNull android.location.Location);
+    method public default void onLocationChanged(@NonNull java.util.List<android.location.Location>);
+    method public default void onProviderDisabled(@NonNull String);
+    method public default void onProviderEnabled(@NonNull String);
+    method @Deprecated public default void onStatusChanged(String, int, android.os.Bundle);
+  }
+
+  public class LocationManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addGpsStatusListener(android.location.GpsStatus.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.GpsStatus.NmeaListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.OnNmeaMessageListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.OnNmeaMessageListener, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.OnNmeaMessageListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void addProximityAlert(double, double, float, long, @NonNull android.app.PendingIntent);
+    method public void addTestProvider(@NonNull String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int);
+    method public void addTestProvider(@NonNull String, @NonNull android.location.provider.ProviderProperties);
+    method public void addTestProvider(@NonNull String, @NonNull android.location.provider.ProviderProperties, @NonNull java.util.Set<java.lang.String>);
+    method @Deprecated public void clearTestProviderEnabled(@NonNull String);
+    method @Deprecated public void clearTestProviderLocation(@NonNull String);
+    method @Deprecated public void clearTestProviderStatus(@NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getAllProviders();
+    method @Nullable public String getBestProvider(@NonNull android.location.Criteria, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull String, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull String, @NonNull android.location.LocationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
+    method @Nullable public java.util.List<android.location.GnssAntennaInfo> getGnssAntennaInfos();
+    method @NonNull public android.location.GnssCapabilities getGnssCapabilities();
+    method @Nullable public String getGnssHardwareModelName();
+    method public int getGnssYearOfHardware();
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.location.GpsStatus getGpsStatus(@Nullable android.location.GpsStatus);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.location.Location getLastKnownLocation(@NonNull String);
+    method @Deprecated @Nullable public android.location.LocationProvider getProvider(@NonNull String);
+    method @Nullable public android.location.provider.ProviderProperties getProviderProperties(@NonNull String);
+    method @NonNull public java.util.List<java.lang.String> getProviders(boolean);
+    method @NonNull public java.util.List<java.lang.String> getProviders(@NonNull android.location.Criteria, boolean);
+    method public boolean hasProvider(@NonNull String);
+    method public boolean isLocationEnabled();
+    method public boolean isProviderEnabled(@NonNull String);
+    method public boolean registerAntennaInfoListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssAntennaInfo.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @Deprecated public boolean registerGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssNavigationMessageCallback(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssNavigationMessage.Callback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull android.location.GnssStatus.Callback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull android.location.GnssStatus.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull java.util.concurrent.Executor, @NonNull android.location.GnssStatus.Callback);
+    method @Deprecated public void removeGpsStatusListener(android.location.GpsStatus.Listener);
+    method @Deprecated public void removeNmeaListener(@NonNull android.location.GpsStatus.NmeaListener);
+    method public void removeNmeaListener(@NonNull android.location.OnNmeaMessageListener);
+    method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeProximityAlert(@NonNull android.app.PendingIntent);
+    method public void removeTestProvider(@NonNull String);
+    method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeUpdates(@NonNull android.location.LocationListener);
+    method public void removeUpdates(@NonNull android.app.PendingIntent);
+    method public void requestFlush(@NonNull String, @NonNull android.location.LocationListener, int);
+    method public void requestFlush(@NonNull String, @NonNull android.app.PendingIntent, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.location.LocationListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, @NonNull android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, @NonNull android.location.LocationRequest, @NonNull android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull String, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull android.location.Criteria, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull String, @NonNull android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull android.location.Criteria, @NonNull android.app.PendingIntent);
+    method public boolean sendExtraCommand(@NonNull String, @NonNull String, @Nullable android.os.Bundle);
+    method public void setTestProviderEnabled(@NonNull String, boolean);
+    method public void setTestProviderLocation(@NonNull String, @NonNull android.location.Location);
+    method @Deprecated public void setTestProviderStatus(@NonNull String, int, @Nullable android.os.Bundle, long);
+    method public void unregisterAntennaInfoListener(@NonNull android.location.GnssAntennaInfo.Listener);
+    method public void unregisterGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
+    method public void unregisterGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback);
+    method public void unregisterGnssStatusCallback(@NonNull android.location.GnssStatus.Callback);
+    field public static final String ACTION_GNSS_CAPABILITIES_CHANGED = "android.location.action.GNSS_CAPABILITIES_CHANGED";
+    field public static final String EXTRA_GNSS_CAPABILITIES = "android.location.extra.GNSS_CAPABILITIES";
+    field public static final String EXTRA_LOCATION_ENABLED = "android.location.extra.LOCATION_ENABLED";
+    field public static final String EXTRA_PROVIDER_ENABLED = "android.location.extra.PROVIDER_ENABLED";
+    field public static final String EXTRA_PROVIDER_NAME = "android.location.extra.PROVIDER_NAME";
+    field public static final String FUSED_PROVIDER = "fused";
+    field public static final String GPS_PROVIDER = "gps";
+    field public static final String KEY_FLUSH_COMPLETE = "flushComplete";
+    field public static final String KEY_LOCATIONS = "locations";
+    field public static final String KEY_LOCATION_CHANGED = "location";
+    field public static final String KEY_PROVIDER_ENABLED = "providerEnabled";
+    field public static final String KEY_PROXIMITY_ENTERING = "entering";
+    field @Deprecated public static final String KEY_STATUS_CHANGED = "status";
+    field public static final String MODE_CHANGED_ACTION = "android.location.MODE_CHANGED";
+    field public static final String NETWORK_PROVIDER = "network";
+    field public static final String PASSIVE_PROVIDER = "passive";
+    field public static final String PROVIDERS_CHANGED_ACTION = "android.location.PROVIDERS_CHANGED";
+  }
+
+  @Deprecated public class LocationProvider {
+    method @Deprecated public int getAccuracy();
+    method @Deprecated public String getName();
+    method @Deprecated public int getPowerRequirement();
+    method @Deprecated public boolean hasMonetaryCost();
+    method @Deprecated public boolean meetsCriteria(android.location.Criteria);
+    method @Deprecated public boolean requiresCell();
+    method @Deprecated public boolean requiresNetwork();
+    method @Deprecated public boolean requiresSatellite();
+    method @Deprecated public boolean supportsAltitude();
+    method @Deprecated public boolean supportsBearing();
+    method @Deprecated public boolean supportsSpeed();
+    field @Deprecated public static final int AVAILABLE = 2; // 0x2
+    field @Deprecated public static final int OUT_OF_SERVICE = 0; // 0x0
+    field @Deprecated public static final int TEMPORARILY_UNAVAILABLE = 1; // 0x1
+  }
+
+  public final class LocationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=1) public long getDurationMillis();
+    method @IntRange(from=0) public long getIntervalMillis();
+    method @IntRange(from=0) public long getMaxUpdateDelayMillis();
+    method @IntRange(from=1, to=java.lang.Integer.MAX_VALUE) public int getMaxUpdates();
+    method @FloatRange(from=0, to=java.lang.Float.MAX_VALUE) public float getMinUpdateDistanceMeters();
+    method @IntRange(from=0) public long getMinUpdateIntervalMillis();
+    method public int getQuality();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.LocationRequest> CREATOR;
+    field public static final long PASSIVE_INTERVAL = 9223372036854775807L; // 0x7fffffffffffffffL
+    field public static final int QUALITY_BALANCED_POWER_ACCURACY = 102; // 0x66
+    field public static final int QUALITY_HIGH_ACCURACY = 100; // 0x64
+    field public static final int QUALITY_LOW_POWER = 104; // 0x68
+  }
+
+  public static final class LocationRequest.Builder {
+    ctor public LocationRequest.Builder(long);
+    ctor public LocationRequest.Builder(@NonNull android.location.LocationRequest);
+    method @NonNull public android.location.LocationRequest build();
+    method @NonNull public android.location.LocationRequest.Builder clearMinUpdateIntervalMillis();
+    method @NonNull public android.location.LocationRequest.Builder setDurationMillis(@IntRange(from=1) long);
+    method @NonNull public android.location.LocationRequest.Builder setIntervalMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.LocationRequest.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.LocationRequest.Builder setMaxUpdates(@IntRange(from=1, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.location.LocationRequest.Builder setMinUpdateDistanceMeters(@FloatRange(from=0, to=java.lang.Float.MAX_VALUE) float);
+    method @NonNull public android.location.LocationRequest.Builder setMinUpdateIntervalMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.LocationRequest.Builder setQuality(int);
+  }
+
+  public interface OnNmeaMessageListener {
+    method public void onNmeaMessage(String, long);
+  }
+
+  public abstract class SettingInjectorService extends android.app.Service {
+    ctor public SettingInjectorService(String);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method protected abstract boolean onGetEnabled();
+    method protected abstract String onGetSummary();
+    method public final void onStart(android.content.Intent, int);
+    method public final int onStartCommand(android.content.Intent, int, int);
+    method public static final void refreshSettings(@NonNull android.content.Context);
+    field public static final String ACTION_INJECTED_SETTING_CHANGED = "android.location.InjectedSettingChanged";
+    field public static final String ACTION_SERVICE_INTENT = "android.location.SettingInjectorService";
+    field public static final String ATTRIBUTES_NAME = "injected-location-setting";
+    field public static final String META_DATA_NAME = "android.location.SettingInjectorService";
+  }
+
+}
+
+package android.location.provider {
+
+  public final class ProviderProperties implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAccuracy();
+    method public int getPowerUsage();
+    method public boolean hasAltitudeSupport();
+    method public boolean hasBearingSupport();
+    method public boolean hasCellRequirement();
+    method public boolean hasMonetaryCost();
+    method public boolean hasNetworkRequirement();
+    method public boolean hasSatelliteRequirement();
+    method public boolean hasSpeedSupport();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ACCURACY_COARSE = 2; // 0x2
+    field public static final int ACCURACY_FINE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.provider.ProviderProperties> CREATOR;
+    field public static final int POWER_USAGE_HIGH = 3; // 0x3
+    field public static final int POWER_USAGE_LOW = 1; // 0x1
+    field public static final int POWER_USAGE_MEDIUM = 2; // 0x2
+  }
+
+  public static final class ProviderProperties.Builder {
+    ctor public ProviderProperties.Builder();
+    ctor public ProviderProperties.Builder(@NonNull android.location.provider.ProviderProperties);
+    method @NonNull public android.location.provider.ProviderProperties build();
+    method @NonNull public android.location.provider.ProviderProperties.Builder setAccuracy(int);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasAltitudeSupport(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasBearingSupport(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasCellRequirement(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasMonetaryCost(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasNetworkRequirement(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasSatelliteRequirement(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setHasSpeedSupport(boolean);
+    method @NonNull public android.location.provider.ProviderProperties.Builder setPowerUsage(int);
+  }
+
+}
+
+package android.media {
+
+  public final class ApplicationMediaCapabilities implements android.os.Parcelable {
+    method @NonNull public static android.media.ApplicationMediaCapabilities createFromXml(@NonNull org.xmlpull.v1.XmlPullParser);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getSupportedHdrTypes();
+    method @NonNull public java.util.List<java.lang.String> getSupportedVideoMimeTypes();
+    method @NonNull public java.util.List<java.lang.String> getUnsupportedHdrTypes();
+    method @NonNull public java.util.List<java.lang.String> getUnsupportedVideoMimeTypes();
+    method public boolean isFormatSpecified(@NonNull String);
+    method public boolean isHdrTypeSupported(@NonNull String);
+    method public boolean isVideoMimeTypeSupported(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.ApplicationMediaCapabilities> CREATOR;
+  }
+
+  public static final class ApplicationMediaCapabilities.Builder {
+    ctor public ApplicationMediaCapabilities.Builder();
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedHdrType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedVideoMimeType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addUnsupportedHdrType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addUnsupportedVideoMimeType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities build();
+  }
+
+  public class AsyncPlayer {
+    ctor public AsyncPlayer(String);
+    method @Deprecated public void play(android.content.Context, android.net.Uri, boolean, int);
+    method public void play(@NonNull android.content.Context, @NonNull android.net.Uri, boolean, @NonNull android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public void stop();
+  }
+
+  public final class AudioAttributes implements android.os.Parcelable {
+    method public boolean areHapticChannelsMuted();
+    method public int describeContents();
+    method public int getAllowedCapturePolicy();
+    method public int getContentType();
+    method public int getFlags();
+    method public int getSpatializationBehavior();
+    method public int getUsage();
+    method public int getVolumeControlStream();
+    method public boolean isContentSpatialized();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALLOW_CAPTURE_BY_ALL = 1; // 0x1
+    field public static final int ALLOW_CAPTURE_BY_NONE = 3; // 0x3
+    field public static final int ALLOW_CAPTURE_BY_SYSTEM = 2; // 0x2
+    field public static final int CONTENT_TYPE_MOVIE = 3; // 0x3
+    field public static final int CONTENT_TYPE_MUSIC = 2; // 0x2
+    field public static final int CONTENT_TYPE_SONIFICATION = 4; // 0x4
+    field public static final int CONTENT_TYPE_SPEECH = 1; // 0x1
+    field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioAttributes> CREATOR;
+    field public static final int FLAG_AUDIBILITY_ENFORCED = 1; // 0x1
+    field public static final int FLAG_HW_AV_SYNC = 16; // 0x10
+    field @Deprecated public static final int FLAG_LOW_LATENCY = 256; // 0x100
+    field public static final int SPATIALIZATION_BEHAVIOR_AUTO = 0; // 0x0
+    field public static final int SPATIALIZATION_BEHAVIOR_NEVER = 1; // 0x1
+    field public static final int USAGE_ALARM = 4; // 0x4
+    field public static final int USAGE_ASSISTANCE_ACCESSIBILITY = 11; // 0xb
+    field public static final int USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12; // 0xc
+    field public static final int USAGE_ASSISTANCE_SONIFICATION = 13; // 0xd
+    field public static final int USAGE_ASSISTANT = 16; // 0x10
+    field public static final int USAGE_GAME = 14; // 0xe
+    field public static final int USAGE_MEDIA = 1; // 0x1
+    field public static final int USAGE_NOTIFICATION = 5; // 0x5
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9; // 0x9
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8; // 0x8
+    field public static final int USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7; // 0x7
+    field public static final int USAGE_NOTIFICATION_EVENT = 10; // 0xa
+    field public static final int USAGE_NOTIFICATION_RINGTONE = 6; // 0x6
+    field public static final int USAGE_UNKNOWN = 0; // 0x0
+    field public static final int USAGE_VOICE_COMMUNICATION = 2; // 0x2
+    field public static final int USAGE_VOICE_COMMUNICATION_SIGNALLING = 3; // 0x3
+  }
+
+  public static class AudioAttributes.Builder {
+    ctor public AudioAttributes.Builder();
+    ctor public AudioAttributes.Builder(android.media.AudioAttributes);
+    method public android.media.AudioAttributes build();
+    method @NonNull public android.media.AudioAttributes.Builder setAllowedCapturePolicy(int);
+    method public android.media.AudioAttributes.Builder setContentType(int);
+    method public android.media.AudioAttributes.Builder setFlags(int);
+    method @NonNull public android.media.AudioAttributes.Builder setHapticChannelsMuted(boolean);
+    method @NonNull public android.media.AudioAttributes.Builder setIsContentSpatialized(boolean);
+    method public android.media.AudioAttributes.Builder setLegacyStreamType(int);
+    method @NonNull public android.media.AudioAttributes.Builder setSpatializationBehavior(int);
+    method public android.media.AudioAttributes.Builder setUsage(int);
+  }
+
+  public class AudioDescriptor {
+    method @NonNull public byte[] getDescriptor();
+    method public int getEncapsulationType();
+    method public int getStandard();
+    field public static final int STANDARD_EDID = 1; // 0x1
+    field public static final int STANDARD_NONE = 0; // 0x0
+  }
+
+  public abstract class AudioDeviceCallback {
+    ctor public AudioDeviceCallback();
+    method public void onAudioDevicesAdded(android.media.AudioDeviceInfo[]);
+    method public void onAudioDevicesRemoved(android.media.AudioDeviceInfo[]);
+  }
+
+  public final class AudioDeviceInfo {
+    method @NonNull public String getAddress();
+    method @NonNull public java.util.List<android.media.AudioDescriptor> getAudioDescriptors();
+    method @NonNull public java.util.List<android.media.AudioProfile> getAudioProfiles();
+    method @NonNull public int[] getChannelCounts();
+    method @NonNull public int[] getChannelIndexMasks();
+    method @NonNull public int[] getChannelMasks();
+    method @NonNull public int[] getEncapsulationMetadataTypes();
+    method @NonNull public int[] getEncapsulationModes();
+    method @NonNull public int[] getEncodings();
+    method public int getId();
+    method public CharSequence getProductName();
+    method @NonNull public int[] getSampleRates();
+    method public int getType();
+    method public boolean isSink();
+    method public boolean isSource();
+    field public static final int TYPE_AUX_LINE = 19; // 0x13
+    field public static final int TYPE_BLE_HEADSET = 26; // 0x1a
+    field public static final int TYPE_BLE_SPEAKER = 27; // 0x1b
+    field public static final int TYPE_BLUETOOTH_A2DP = 8; // 0x8
+    field public static final int TYPE_BLUETOOTH_SCO = 7; // 0x7
+    field public static final int TYPE_BUILTIN_EARPIECE = 1; // 0x1
+    field public static final int TYPE_BUILTIN_MIC = 15; // 0xf
+    field public static final int TYPE_BUILTIN_SPEAKER = 2; // 0x2
+    field public static final int TYPE_BUILTIN_SPEAKER_SAFE = 24; // 0x18
+    field public static final int TYPE_BUS = 21; // 0x15
+    field public static final int TYPE_DOCK = 13; // 0xd
+    field public static final int TYPE_FM = 14; // 0xe
+    field public static final int TYPE_FM_TUNER = 16; // 0x10
+    field public static final int TYPE_HDMI = 9; // 0x9
+    field public static final int TYPE_HDMI_ARC = 10; // 0xa
+    field public static final int TYPE_HDMI_EARC = 29; // 0x1d
+    field public static final int TYPE_HEARING_AID = 23; // 0x17
+    field public static final int TYPE_IP = 20; // 0x14
+    field public static final int TYPE_LINE_ANALOG = 5; // 0x5
+    field public static final int TYPE_LINE_DIGITAL = 6; // 0x6
+    field public static final int TYPE_REMOTE_SUBMIX = 25; // 0x19
+    field public static final int TYPE_TELEPHONY = 18; // 0x12
+    field public static final int TYPE_TV_TUNER = 17; // 0x11
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_USB_ACCESSORY = 12; // 0xc
+    field public static final int TYPE_USB_DEVICE = 11; // 0xb
+    field public static final int TYPE_USB_HEADSET = 22; // 0x16
+    field public static final int TYPE_WIRED_HEADPHONES = 4; // 0x4
+    field public static final int TYPE_WIRED_HEADSET = 3; // 0x3
+  }
+
+  public final class AudioFocusRequest {
+    method public boolean acceptsDelayedFocusGain();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method public int getFocusGain();
+    method public boolean willPauseWhenDucked();
+  }
+
+  public static final class AudioFocusRequest.Builder {
+    ctor public AudioFocusRequest.Builder(int);
+    ctor public AudioFocusRequest.Builder(@NonNull android.media.AudioFocusRequest);
+    method public android.media.AudioFocusRequest build();
+    method @NonNull public android.media.AudioFocusRequest.Builder setAcceptsDelayedFocusGain(boolean);
+    method @NonNull public android.media.AudioFocusRequest.Builder setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method @NonNull public android.media.AudioFocusRequest.Builder setFocusGain(int);
+    method @NonNull public android.media.AudioFocusRequest.Builder setForceDucking(boolean);
+    method @NonNull public android.media.AudioFocusRequest.Builder setOnAudioFocusChangeListener(@NonNull android.media.AudioManager.OnAudioFocusChangeListener);
+    method @NonNull public android.media.AudioFocusRequest.Builder setOnAudioFocusChangeListener(@NonNull android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.os.Handler);
+    method @NonNull public android.media.AudioFocusRequest.Builder setWillPauseWhenDucked(boolean);
+  }
+
+  public final class AudioFormat implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getChannelCount();
+    method public int getChannelIndexMask();
+    method public int getChannelMask();
+    method public int getEncoding();
+    method @IntRange(from=1) public int getFrameSizeInBytes();
+    method public int getSampleRate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_DEFAULT = 1; // 0x1
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_INVALID = 0; // 0x0
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_MONO = 2; // 0x2
+    field @Deprecated public static final int CHANNEL_CONFIGURATION_STEREO = 3; // 0x3
+    field public static final int CHANNEL_INVALID = 0; // 0x0
+    field public static final int CHANNEL_IN_BACK = 32; // 0x20
+    field public static final int CHANNEL_IN_BACK_PROCESSED = 512; // 0x200
+    field public static final int CHANNEL_IN_DEFAULT = 1; // 0x1
+    field public static final int CHANNEL_IN_FRONT = 16; // 0x10
+    field public static final int CHANNEL_IN_FRONT_PROCESSED = 256; // 0x100
+    field public static final int CHANNEL_IN_LEFT = 4; // 0x4
+    field public static final int CHANNEL_IN_LEFT_PROCESSED = 64; // 0x40
+    field public static final int CHANNEL_IN_MONO = 16; // 0x10
+    field public static final int CHANNEL_IN_PRESSURE = 1024; // 0x400
+    field public static final int CHANNEL_IN_RIGHT = 8; // 0x8
+    field public static final int CHANNEL_IN_RIGHT_PROCESSED = 128; // 0x80
+    field public static final int CHANNEL_IN_STEREO = 12; // 0xc
+    field public static final int CHANNEL_IN_VOICE_DNLINK = 32768; // 0x8000
+    field public static final int CHANNEL_IN_VOICE_UPLINK = 16384; // 0x4000
+    field public static final int CHANNEL_IN_X_AXIS = 2048; // 0x800
+    field public static final int CHANNEL_IN_Y_AXIS = 4096; // 0x1000
+    field public static final int CHANNEL_IN_Z_AXIS = 8192; // 0x2000
+    field public static final int CHANNEL_OUT_5POINT1 = 252; // 0xfc
+    field public static final int CHANNEL_OUT_5POINT1POINT2 = 3145980; // 0x3000fc
+    field public static final int CHANNEL_OUT_5POINT1POINT4 = 737532; // 0xb40fc
+    field @Deprecated public static final int CHANNEL_OUT_7POINT1 = 1020; // 0x3fc
+    field public static final int CHANNEL_OUT_7POINT1POINT2 = 3152124; // 0x3018fc
+    field public static final int CHANNEL_OUT_7POINT1POINT4 = 743676; // 0xb58fc
+    field public static final int CHANNEL_OUT_7POINT1_SURROUND = 6396; // 0x18fc
+    field public static final int CHANNEL_OUT_9POINT1POINT4 = 202070268; // 0xc0b58fc
+    field public static final int CHANNEL_OUT_9POINT1POINT6 = 205215996; // 0xc3b58fc
+    field public static final int CHANNEL_OUT_BACK_CENTER = 1024; // 0x400
+    field public static final int CHANNEL_OUT_BACK_LEFT = 64; // 0x40
+    field public static final int CHANNEL_OUT_BACK_RIGHT = 128; // 0x80
+    field public static final int CHANNEL_OUT_BOTTOM_FRONT_CENTER = 8388608; // 0x800000
+    field public static final int CHANNEL_OUT_BOTTOM_FRONT_LEFT = 4194304; // 0x400000
+    field public static final int CHANNEL_OUT_BOTTOM_FRONT_RIGHT = 16777216; // 0x1000000
+    field public static final int CHANNEL_OUT_DEFAULT = 1; // 0x1
+    field public static final int CHANNEL_OUT_FRONT_CENTER = 16; // 0x10
+    field public static final int CHANNEL_OUT_FRONT_LEFT = 4; // 0x4
+    field public static final int CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 256; // 0x100
+    field public static final int CHANNEL_OUT_FRONT_RIGHT = 8; // 0x8
+    field public static final int CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 512; // 0x200
+    field public static final int CHANNEL_OUT_FRONT_WIDE_LEFT = 67108864; // 0x4000000
+    field public static final int CHANNEL_OUT_FRONT_WIDE_RIGHT = 134217728; // 0x8000000
+    field public static final int CHANNEL_OUT_LOW_FREQUENCY = 32; // 0x20
+    field public static final int CHANNEL_OUT_LOW_FREQUENCY_2 = 33554432; // 0x2000000
+    field public static final int CHANNEL_OUT_MONO = 4; // 0x4
+    field public static final int CHANNEL_OUT_QUAD = 204; // 0xcc
+    field public static final int CHANNEL_OUT_SIDE_LEFT = 2048; // 0x800
+    field public static final int CHANNEL_OUT_SIDE_RIGHT = 4096; // 0x1000
+    field public static final int CHANNEL_OUT_STEREO = 12; // 0xc
+    field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c
+    field public static final int CHANNEL_OUT_TOP_BACK_CENTER = 262144; // 0x40000
+    field public static final int CHANNEL_OUT_TOP_BACK_LEFT = 131072; // 0x20000
+    field public static final int CHANNEL_OUT_TOP_BACK_RIGHT = 524288; // 0x80000
+    field public static final int CHANNEL_OUT_TOP_CENTER = 8192; // 0x2000
+    field public static final int CHANNEL_OUT_TOP_FRONT_CENTER = 32768; // 0x8000
+    field public static final int CHANNEL_OUT_TOP_FRONT_LEFT = 16384; // 0x4000
+    field public static final int CHANNEL_OUT_TOP_FRONT_RIGHT = 65536; // 0x10000
+    field public static final int CHANNEL_OUT_TOP_SIDE_LEFT = 1048576; // 0x100000
+    field public static final int CHANNEL_OUT_TOP_SIDE_RIGHT = 2097152; // 0x200000
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioFormat> CREATOR;
+    field public static final int ENCODING_AAC_ELD = 15; // 0xf
+    field public static final int ENCODING_AAC_HE_V1 = 11; // 0xb
+    field public static final int ENCODING_AAC_HE_V2 = 12; // 0xc
+    field public static final int ENCODING_AAC_LC = 10; // 0xa
+    field public static final int ENCODING_AAC_XHE = 16; // 0x10
+    field public static final int ENCODING_AC3 = 5; // 0x5
+    field public static final int ENCODING_AC4 = 17; // 0x11
+    field public static final int ENCODING_DEFAULT = 1; // 0x1
+    field public static final int ENCODING_DOLBY_MAT = 19; // 0x13
+    field public static final int ENCODING_DOLBY_TRUEHD = 14; // 0xe
+    field public static final int ENCODING_DRA = 28; // 0x1c
+    field public static final int ENCODING_DTS = 7; // 0x7
+    field public static final int ENCODING_DTS_HD = 8; // 0x8
+    field public static final int ENCODING_DTS_UHD = 27; // 0x1b
+    field public static final int ENCODING_E_AC3 = 6; // 0x6
+    field public static final int ENCODING_E_AC3_JOC = 18; // 0x12
+    field public static final int ENCODING_IEC61937 = 13; // 0xd
+    field public static final int ENCODING_INVALID = 0; // 0x0
+    field public static final int ENCODING_MP3 = 9; // 0x9
+    field public static final int ENCODING_MPEGH_BL_L3 = 23; // 0x17
+    field public static final int ENCODING_MPEGH_BL_L4 = 24; // 0x18
+    field public static final int ENCODING_MPEGH_LC_L3 = 25; // 0x19
+    field public static final int ENCODING_MPEGH_LC_L4 = 26; // 0x1a
+    field public static final int ENCODING_OPUS = 20; // 0x14
+    field public static final int ENCODING_PCM_16BIT = 2; // 0x2
+    field public static final int ENCODING_PCM_24BIT_PACKED = 21; // 0x15
+    field public static final int ENCODING_PCM_32BIT = 22; // 0x16
+    field public static final int ENCODING_PCM_8BIT = 3; // 0x3
+    field public static final int ENCODING_PCM_FLOAT = 4; // 0x4
+    field public static final int SAMPLE_RATE_UNSPECIFIED = 0; // 0x0
+  }
+
+  public static class AudioFormat.Builder {
+    ctor public AudioFormat.Builder();
+    ctor public AudioFormat.Builder(android.media.AudioFormat);
+    method public android.media.AudioFormat build();
+    method @NonNull public android.media.AudioFormat.Builder setChannelIndexMask(int);
+    method @NonNull public android.media.AudioFormat.Builder setChannelMask(int);
+    method public android.media.AudioFormat.Builder setEncoding(int) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioFormat.Builder setSampleRate(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public class AudioManager {
+    method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener);
+    method public int abandonAudioFocusRequest(@NonNull android.media.AudioFocusRequest);
+    method public void addOnCommunicationDeviceChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnCommunicationDeviceChangedListener);
+    method public void addOnModeChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnModeChangedListener);
+    method public void adjustStreamVolume(int, int, int);
+    method public void adjustSuggestedStreamVolume(int, int, int);
+    method public void adjustVolume(int, int);
+    method public void clearCommunicationDevice();
+    method public void dispatchMediaKeyEvent(android.view.KeyEvent);
+    method public int generateAudioSessionId();
+    method @NonNull public java.util.List<android.media.AudioPlaybackConfiguration> getActivePlaybackConfigurations();
+    method @NonNull public java.util.List<android.media.AudioRecordingConfiguration> getActiveRecordingConfigurations();
+    method public int getAllowedCapturePolicy();
+    method public int getAudioHwSyncForSession(int);
+    method @NonNull public java.util.List<android.media.AudioDeviceInfo> getAvailableCommunicationDevices();
+    method @Nullable public android.media.AudioDeviceInfo getCommunicationDevice();
+    method public android.media.AudioDeviceInfo[] getDevices(int);
+    method public int getEncodedSurroundMode();
+    method public java.util.List<android.media.MicrophoneInfo> getMicrophones() throws java.io.IOException;
+    method public int getMode();
+    method public String getParameters(String);
+    method public static int getPlaybackOffloadSupport(@NonNull android.media.AudioFormat, @NonNull android.media.AudioAttributes);
+    method public String getProperty(String);
+    method public int getRingerMode();
+    method @Deprecated public int getRouting(int);
+    method @NonNull public android.media.Spatializer getSpatializer();
+    method public int getStreamMaxVolume(int);
+    method public int getStreamMinVolume(int);
+    method public int getStreamVolume(int);
+    method public float getStreamVolumeDb(int, int, int);
+    method @Deprecated public int getVibrateSetting(int);
+    method @Deprecated public boolean isBluetoothA2dpOn();
+    method public boolean isBluetoothScoAvailableOffCall();
+    method public boolean isBluetoothScoOn();
+    method public boolean isCallScreeningModeSupported();
+    method public static boolean isHapticPlaybackSupported();
+    method public boolean isMicrophoneMute();
+    method public boolean isMusicActive();
+    method public static boolean isOffloadedPlaybackSupported(@NonNull android.media.AudioFormat, @NonNull android.media.AudioAttributes);
+    method public boolean isSpeakerphoneOn();
+    method public boolean isStreamMute(int);
+    method public boolean isSurroundFormatEnabled(int);
+    method public boolean isVolumeFixed();
+    method @Deprecated public boolean isWiredHeadsetOn();
+    method public void loadSoundEffects();
+    method public void playSoundEffect(int);
+    method public void playSoundEffect(int, float);
+    method public void registerAudioDeviceCallback(android.media.AudioDeviceCallback, @Nullable android.os.Handler);
+    method public void registerAudioPlaybackCallback(@NonNull android.media.AudioManager.AudioPlaybackCallback, @Nullable android.os.Handler);
+    method public void registerAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback, @Nullable android.os.Handler);
+    method @Deprecated public void registerMediaButtonEventReceiver(android.content.ComponentName);
+    method @Deprecated public void registerMediaButtonEventReceiver(android.app.PendingIntent);
+    method @Deprecated public void registerRemoteControlClient(android.media.RemoteControlClient);
+    method @Deprecated public boolean registerRemoteController(android.media.RemoteController);
+    method public void removeOnCommunicationDeviceChangedListener(@NonNull android.media.AudioManager.OnCommunicationDeviceChangedListener);
+    method public void removeOnModeChangedListener(@NonNull android.media.AudioManager.OnModeChangedListener);
+    method @Deprecated public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, int, int);
+    method public int requestAudioFocus(@NonNull android.media.AudioFocusRequest);
+    method public void setAllowedCapturePolicy(int);
+    method @Deprecated public void setBluetoothA2dpOn(boolean);
+    method public void setBluetoothScoOn(boolean);
+    method public boolean setCommunicationDevice(@NonNull android.media.AudioDeviceInfo);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SETTINGS) public boolean setEncodedSurroundMode(int);
+    method public void setMicrophoneMute(boolean);
+    method public void setMode(int);
+    method public void setParameters(String);
+    method public void setRingerMode(int);
+    method @Deprecated public void setRouting(int, int, int);
+    method public void setSpeakerphoneOn(boolean);
+    method @Deprecated public void setStreamMute(int, boolean);
+    method @Deprecated public void setStreamSolo(int, boolean);
+    method public void setStreamVolume(int, int, int);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SETTINGS) public boolean setSurroundFormatEnabled(int, boolean);
+    method @Deprecated public void setVibrateSetting(int, int);
+    method @Deprecated public void setWiredHeadsetOn(boolean);
+    method @Deprecated public boolean shouldVibrate(int);
+    method public void startBluetoothSco();
+    method public void stopBluetoothSco();
+    method public void unloadSoundEffects();
+    method public void unregisterAudioDeviceCallback(android.media.AudioDeviceCallback);
+    method public void unregisterAudioPlaybackCallback(@NonNull android.media.AudioManager.AudioPlaybackCallback);
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+    method @Deprecated public void unregisterMediaButtonEventReceiver(android.content.ComponentName);
+    method @Deprecated public void unregisterMediaButtonEventReceiver(android.app.PendingIntent);
+    method @Deprecated public void unregisterRemoteControlClient(android.media.RemoteControlClient);
+    method @Deprecated public void unregisterRemoteController(android.media.RemoteController);
+    field public static final String ACTION_AUDIO_BECOMING_NOISY = "android.media.AUDIO_BECOMING_NOISY";
+    field public static final String ACTION_HDMI_AUDIO_PLUG = "android.media.action.HDMI_AUDIO_PLUG";
+    field public static final String ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG";
+    field public static final String ACTION_MICROPHONE_MUTE_CHANGED = "android.media.action.MICROPHONE_MUTE_CHANGED";
+    field @Deprecated public static final String ACTION_SCO_AUDIO_STATE_CHANGED = "android.media.SCO_AUDIO_STATE_CHANGED";
+    field public static final String ACTION_SCO_AUDIO_STATE_UPDATED = "android.media.ACTION_SCO_AUDIO_STATE_UPDATED";
+    field public static final String ACTION_SPEAKERPHONE_STATE_CHANGED = "android.media.action.SPEAKERPHONE_STATE_CHANGED";
+    field public static final int ADJUST_LOWER = -1; // 0xffffffff
+    field public static final int ADJUST_MUTE = -100; // 0xffffff9c
+    field public static final int ADJUST_RAISE = 1; // 0x1
+    field public static final int ADJUST_SAME = 0; // 0x0
+    field public static final int ADJUST_TOGGLE_MUTE = 101; // 0x65
+    field public static final int ADJUST_UNMUTE = 100; // 0x64
+    field public static final int AUDIOFOCUS_GAIN = 1; // 0x1
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT = 2; // 0x2
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE = 4; // 0x4
+    field public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK = 3; // 0x3
+    field public static final int AUDIOFOCUS_LOSS = -1; // 0xffffffff
+    field public static final int AUDIOFOCUS_LOSS_TRANSIENT = -2; // 0xfffffffe
+    field public static final int AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK = -3; // 0xfffffffd
+    field public static final int AUDIOFOCUS_NONE = 0; // 0x0
+    field public static final int AUDIOFOCUS_REQUEST_DELAYED = 2; // 0x2
+    field public static final int AUDIOFOCUS_REQUEST_FAILED = 0; // 0x0
+    field public static final int AUDIOFOCUS_REQUEST_GRANTED = 1; // 0x1
+    field public static final int AUDIO_SESSION_ID_GENERATE = 0; // 0x0
+    field public static final int ENCODED_SURROUND_OUTPUT_ALWAYS = 2; // 0x2
+    field public static final int ENCODED_SURROUND_OUTPUT_AUTO = 0; // 0x0
+    field public static final int ENCODED_SURROUND_OUTPUT_MANUAL = 3; // 0x3
+    field public static final int ENCODED_SURROUND_OUTPUT_NEVER = 1; // 0x1
+    field public static final int ENCODED_SURROUND_OUTPUT_UNKNOWN = -1; // 0xffffffff
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa
+    field public static final String EXTRA_AUDIO_PLUG_STATE = "android.media.extra.AUDIO_PLUG_STATE";
+    field public static final String EXTRA_ENCODINGS = "android.media.extra.ENCODINGS";
+    field public static final String EXTRA_MAX_CHANNEL_COUNT = "android.media.extra.MAX_CHANNEL_COUNT";
+    field public static final String EXTRA_RINGER_MODE = "android.media.EXTRA_RINGER_MODE";
+    field public static final String EXTRA_SCO_AUDIO_PREVIOUS_STATE = "android.media.extra.SCO_AUDIO_PREVIOUS_STATE";
+    field public static final String EXTRA_SCO_AUDIO_STATE = "android.media.extra.SCO_AUDIO_STATE";
+    field @Deprecated public static final String EXTRA_VIBRATE_SETTING = "android.media.EXTRA_VIBRATE_SETTING";
+    field @Deprecated public static final String EXTRA_VIBRATE_TYPE = "android.media.EXTRA_VIBRATE_TYPE";
+    field public static final int FLAG_ALLOW_RINGER_MODES = 2; // 0x2
+    field public static final int FLAG_PLAY_SOUND = 4; // 0x4
+    field public static final int FLAG_REMOVE_SOUND_AND_VIBRATE = 8; // 0x8
+    field public static final int FLAG_SHOW_UI = 1; // 0x1
+    field public static final int FLAG_VIBRATE = 16; // 0x10
+    field public static final int FX_BACK = 10; // 0xa
+    field public static final int FX_FOCUS_NAVIGATION_DOWN = 2; // 0x2
+    field public static final int FX_FOCUS_NAVIGATION_LEFT = 3; // 0x3
+    field public static final int FX_FOCUS_NAVIGATION_RIGHT = 4; // 0x4
+    field public static final int FX_FOCUS_NAVIGATION_UP = 1; // 0x1
+    field public static final int FX_KEYPRESS_DELETE = 7; // 0x7
+    field public static final int FX_KEYPRESS_INVALID = 9; // 0x9
+    field public static final int FX_KEYPRESS_RETURN = 8; // 0x8
+    field public static final int FX_KEYPRESS_SPACEBAR = 6; // 0x6
+    field public static final int FX_KEYPRESS_STANDARD = 5; // 0x5
+    field public static final int FX_KEY_CLICK = 0; // 0x0
+    field public static final int GET_DEVICES_ALL = 3; // 0x3
+    field public static final int GET_DEVICES_INPUTS = 1; // 0x1
+    field public static final int GET_DEVICES_OUTPUTS = 2; // 0x2
+    field public static final int MODE_CALL_SCREENING = 4; // 0x4
+    field public static final int MODE_CURRENT = -1; // 0xffffffff
+    field public static final int MODE_INVALID = -2; // 0xfffffffe
+    field public static final int MODE_IN_CALL = 2; // 0x2
+    field public static final int MODE_IN_COMMUNICATION = 3; // 0x3
+    field public static final int MODE_NORMAL = 0; // 0x0
+    field public static final int MODE_RINGTONE = 1; // 0x1
+    field @Deprecated public static final int NUM_STREAMS = 5; // 0x5
+    field public static final int PLAYBACK_OFFLOAD_GAPLESS_SUPPORTED = 2; // 0x2
+    field public static final int PLAYBACK_OFFLOAD_NOT_SUPPORTED = 0; // 0x0
+    field public static final int PLAYBACK_OFFLOAD_SUPPORTED = 1; // 0x1
+    field public static final String PROPERTY_OUTPUT_FRAMES_PER_BUFFER = "android.media.property.OUTPUT_FRAMES_PER_BUFFER";
+    field public static final String PROPERTY_OUTPUT_SAMPLE_RATE = "android.media.property.OUTPUT_SAMPLE_RATE";
+    field public static final String PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED = "android.media.property.SUPPORT_AUDIO_SOURCE_UNPROCESSED";
+    field public static final String PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND = "android.media.property.SUPPORT_MIC_NEAR_ULTRASOUND";
+    field public static final String PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND = "android.media.property.SUPPORT_SPEAKER_NEAR_ULTRASOUND";
+    field public static final String RINGER_MODE_CHANGED_ACTION = "android.media.RINGER_MODE_CHANGED";
+    field public static final int RINGER_MODE_NORMAL = 2; // 0x2
+    field public static final int RINGER_MODE_SILENT = 0; // 0x0
+    field public static final int RINGER_MODE_VIBRATE = 1; // 0x1
+    field @Deprecated public static final int ROUTE_ALL = -1; // 0xffffffff
+    field @Deprecated public static final int ROUTE_BLUETOOTH = 4; // 0x4
+    field @Deprecated public static final int ROUTE_BLUETOOTH_A2DP = 16; // 0x10
+    field @Deprecated public static final int ROUTE_BLUETOOTH_SCO = 4; // 0x4
+    field @Deprecated public static final int ROUTE_EARPIECE = 1; // 0x1
+    field @Deprecated public static final int ROUTE_HEADSET = 8; // 0x8
+    field @Deprecated public static final int ROUTE_SPEAKER = 2; // 0x2
+    field public static final int SCO_AUDIO_STATE_CONNECTED = 1; // 0x1
+    field public static final int SCO_AUDIO_STATE_CONNECTING = 2; // 0x2
+    field public static final int SCO_AUDIO_STATE_DISCONNECTED = 0; // 0x0
+    field public static final int SCO_AUDIO_STATE_ERROR = -1; // 0xffffffff
+    field public static final int STREAM_ACCESSIBILITY = 10; // 0xa
+    field public static final int STREAM_ALARM = 4; // 0x4
+    field public static final int STREAM_DTMF = 8; // 0x8
+    field public static final int STREAM_MUSIC = 3; // 0x3
+    field public static final int STREAM_NOTIFICATION = 5; // 0x5
+    field public static final int STREAM_RING = 2; // 0x2
+    field public static final int STREAM_SYSTEM = 1; // 0x1
+    field public static final int STREAM_VOICE_CALL = 0; // 0x0
+    field public static final int USE_DEFAULT_STREAM_TYPE = -2147483648; // 0x80000000
+    field @Deprecated public static final String VIBRATE_SETTING_CHANGED_ACTION = "android.media.VIBRATE_SETTING_CHANGED";
+    field @Deprecated public static final int VIBRATE_SETTING_OFF = 0; // 0x0
+    field @Deprecated public static final int VIBRATE_SETTING_ON = 1; // 0x1
+    field @Deprecated public static final int VIBRATE_SETTING_ONLY_SILENT = 2; // 0x2
+    field @Deprecated public static final int VIBRATE_TYPE_NOTIFICATION = 1; // 0x1
+    field @Deprecated public static final int VIBRATE_TYPE_RINGER = 0; // 0x0
+  }
+
+  public abstract static class AudioManager.AudioPlaybackCallback {
+    ctor public AudioManager.AudioPlaybackCallback();
+    method public void onPlaybackConfigChanged(java.util.List<android.media.AudioPlaybackConfiguration>);
+  }
+
+  public abstract static class AudioManager.AudioRecordingCallback {
+    ctor public AudioManager.AudioRecordingCallback();
+    method public void onRecordingConfigChanged(java.util.List<android.media.AudioRecordingConfiguration>);
+  }
+
+  public static interface AudioManager.OnAudioFocusChangeListener {
+    method public void onAudioFocusChange(int);
+  }
+
+  public static interface AudioManager.OnCommunicationDeviceChangedListener {
+    method public void onCommunicationDeviceChanged(@Nullable android.media.AudioDeviceInfo);
+  }
+
+  public static interface AudioManager.OnModeChangedListener {
+    method public void onModeChanged(int);
+  }
+
+  public final class AudioMetadata {
+    method @NonNull public static android.media.AudioMetadataMap createMap();
+  }
+
+  public static class AudioMetadata.Format {
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Boolean> KEY_ATMOS_PRESENT;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_AUDIO_ENCODING;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_BIT_RATE;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_BIT_WIDTH;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_CHANNEL_MASK;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.String> KEY_MIME;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_PRESENTATION_CONTENT_CLASSIFIER;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_PRESENTATION_ID;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.String> KEY_PRESENTATION_LANGUAGE;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_PROGRAM_ID;
+    field @NonNull public static final android.media.AudioMetadata.Key<java.lang.Integer> KEY_SAMPLE_RATE;
+  }
+
+  public static interface AudioMetadata.Key<T> {
+    method @NonNull public String getName();
+    method @NonNull public Class<T> getValueClass();
+  }
+
+  public interface AudioMetadataMap extends android.media.AudioMetadataReadMap {
+    method @Nullable public <T> T remove(@NonNull android.media.AudioMetadata.Key<T>);
+    method @Nullable public <T> T set(@NonNull android.media.AudioMetadata.Key<T>, @NonNull T);
+  }
+
+  public interface AudioMetadataReadMap {
+    method public <T> boolean containsKey(@NonNull android.media.AudioMetadata.Key<T>);
+    method @NonNull public android.media.AudioMetadataMap dup();
+    method @Nullable public <T> T get(@NonNull android.media.AudioMetadata.Key<T>);
+    method @IntRange(from=0) public int size();
+  }
+
+  public final class AudioPlaybackCaptureConfiguration {
+    method @NonNull public int[] getExcludeUids();
+    method @NonNull public int[] getExcludeUsages();
+    method @NonNull public int[] getMatchingUids();
+    method @NonNull public int[] getMatchingUsages();
+    method @NonNull public android.media.projection.MediaProjection getMediaProjection();
+  }
+
+  public static final class AudioPlaybackCaptureConfiguration.Builder {
+    ctor public AudioPlaybackCaptureConfiguration.Builder(@NonNull android.media.projection.MediaProjection);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUid(int);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder addMatchingUsage(int);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration build();
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUid(int);
+    method @NonNull public android.media.AudioPlaybackCaptureConfiguration.Builder excludeUsage(int);
+  }
+
+  public final class AudioPlaybackConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.AudioAttributes getAudioAttributes();
+    method @Nullable public android.media.AudioDeviceInfo getAudioDeviceInfo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioPlaybackConfiguration> CREATOR;
+  }
+
+  public final class AudioPresentation {
+    method public java.util.Map<java.util.Locale,java.lang.String> getLabels();
+    method public java.util.Locale getLocale();
+    method public int getMasteringIndication();
+    method public int getPresentationId();
+    method public int getProgramId();
+    method public boolean hasAudioDescription();
+    method public boolean hasDialogueEnhancement();
+    method public boolean hasSpokenSubtitles();
+    field public static final int CONTENT_COMMENTARY = 5; // 0x5
+    field public static final int CONTENT_DIALOG = 4; // 0x4
+    field public static final int CONTENT_EMERGENCY = 6; // 0x6
+    field public static final int CONTENT_HEARING_IMPAIRED = 3; // 0x3
+    field public static final int CONTENT_MAIN = 0; // 0x0
+    field public static final int CONTENT_MUSIC_AND_EFFECTS = 1; // 0x1
+    field public static final int CONTENT_UNKNOWN = -1; // 0xffffffff
+    field public static final int CONTENT_VISUALLY_IMPAIRED = 2; // 0x2
+    field public static final int CONTENT_VOICEOVER = 7; // 0x7
+    field public static final int MASTERED_FOR_3D = 3; // 0x3
+    field public static final int MASTERED_FOR_HEADPHONE = 4; // 0x4
+    field public static final int MASTERED_FOR_STEREO = 1; // 0x1
+    field public static final int MASTERED_FOR_SURROUND = 2; // 0x2
+    field public static final int MASTERING_NOT_INDICATED = 0; // 0x0
+  }
+
+  public static final class AudioPresentation.Builder {
+    ctor public AudioPresentation.Builder(int);
+    method @NonNull public android.media.AudioPresentation build();
+    method @NonNull public android.media.AudioPresentation.Builder setHasAudioDescription(boolean);
+    method @NonNull public android.media.AudioPresentation.Builder setHasDialogueEnhancement(boolean);
+    method @NonNull public android.media.AudioPresentation.Builder setHasSpokenSubtitles(boolean);
+    method @NonNull public android.media.AudioPresentation.Builder setLabels(@NonNull java.util.Map<android.icu.util.ULocale,java.lang.CharSequence>);
+    method @NonNull public android.media.AudioPresentation.Builder setLocale(@NonNull android.icu.util.ULocale);
+    method @NonNull public android.media.AudioPresentation.Builder setMasteringIndication(int);
+    method @NonNull public android.media.AudioPresentation.Builder setProgramId(int);
+  }
+
+  public class AudioProfile {
+    method @NonNull public int[] getChannelIndexMasks();
+    method @NonNull public int[] getChannelMasks();
+    method public int getEncapsulationType();
+    method public int getFormat();
+    method @NonNull public int[] getSampleRates();
+    field public static final int AUDIO_ENCAPSULATION_TYPE_IEC61937 = 1; // 0x1
+    field public static final int AUDIO_ENCAPSULATION_TYPE_NONE = 0; // 0x0
+  }
+
+  public class AudioRecord implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection {
+    ctor @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public AudioRecord(int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method @Deprecated public void addOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener, android.os.Handler);
+    method protected void finalize();
+    method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException;
+    method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration();
+    method public int getAudioFormat();
+    method public int getAudioSessionId();
+    method public int getAudioSource();
+    method public int getBufferSizeInFrames();
+    method public int getChannelConfiguration();
+    method public int getChannelCount();
+    method @NonNull public android.media.AudioFormat getFormat();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public android.os.PersistableBundle getMetrics();
+    method public static int getMinBufferSize(int, int, int);
+    method public int getNotificationMarkerPosition();
+    method public int getPositionNotificationPeriod();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public int getRecordingState();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public int getSampleRate();
+    method public int getState();
+    method public int getTimestamp(@NonNull android.media.AudioTimestamp, int);
+    method public boolean isPrivacySensitive();
+    method public int read(@NonNull byte[], int, int);
+    method public int read(@NonNull byte[], int, int, int);
+    method public int read(@NonNull short[], int, int);
+    method public int read(@NonNull short[], int, int, int);
+    method public int read(@NonNull float[], int, int, int);
+    method public int read(@NonNull java.nio.ByteBuffer, int);
+    method public int read(@NonNull java.nio.ByteBuffer, int, int);
+    method public void registerAudioRecordingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioRecordingCallback);
+    method public void release();
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioRecord.OnRoutingChangedListener);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public int setNotificationMarkerPosition(int);
+    method public int setPositionNotificationPeriod(int);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredMicrophoneDirection(int);
+    method public boolean setPreferredMicrophoneFieldDimension(@FloatRange(from=-1.0, to=1.0) float);
+    method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener);
+    method public void setRecordPositionUpdateListener(android.media.AudioRecord.OnRecordPositionUpdateListener, android.os.Handler);
+    method public void startRecording() throws java.lang.IllegalStateException;
+    method public void startRecording(android.media.MediaSyncEvent) throws java.lang.IllegalStateException;
+    method public void stop() throws java.lang.IllegalStateException;
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -2; // 0xfffffffe
+    field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa
+    field public static final int ERROR_INVALID_OPERATION = -3; // 0xfffffffd
+    field public static final int READ_BLOCKING = 0; // 0x0
+    field public static final int READ_NON_BLOCKING = 1; // 0x1
+    field public static final int RECORDSTATE_RECORDING = 3; // 0x3
+    field public static final int RECORDSTATE_STOPPED = 1; // 0x1
+    field public static final int STATE_INITIALIZED = 1; // 0x1
+    field public static final int STATE_UNINITIALIZED = 0; // 0x0
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static class AudioRecord.Builder {
+    ctor public AudioRecord.Builder();
+    method @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public android.media.AudioRecord build() throws java.lang.UnsupportedOperationException;
+    method public android.media.AudioRecord.Builder setAudioFormat(@NonNull android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioRecord.Builder setAudioPlaybackCaptureConfig(@NonNull android.media.AudioPlaybackCaptureConfiguration);
+    method public android.media.AudioRecord.Builder setAudioSource(int) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioRecord.Builder setBufferSizeInBytes(int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioRecord.Builder setContext(@NonNull android.content.Context);
+    method @NonNull public android.media.AudioRecord.Builder setPrivacySensitive(boolean);
+  }
+
+  public static final class AudioRecord.MetricsConstants {
+    field public static final String CHANNELS = "android.media.audiorecord.channels";
+    field public static final String ENCODING = "android.media.audiorecord.encoding";
+    field @Deprecated public static final String LATENCY = "android.media.audiorecord.latency";
+    field public static final String SAMPLERATE = "android.media.audiorecord.samplerate";
+    field public static final String SOURCE = "android.media.audiorecord.source";
+  }
+
+  public static interface AudioRecord.OnRecordPositionUpdateListener {
+    method public void onMarkerReached(android.media.AudioRecord);
+    method public void onPeriodicNotification(android.media.AudioRecord);
+  }
+
+  @Deprecated public static interface AudioRecord.OnRoutingChangedListener extends android.media.AudioRouting.OnRoutingChangedListener {
+    method @Deprecated public void onRoutingChanged(android.media.AudioRecord);
+    method @Deprecated public default void onRoutingChanged(android.media.AudioRouting);
+  }
+
+  public final class AudioRecordingConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.AudioDeviceInfo getAudioDevice();
+    method public int getAudioSource();
+    method public int getClientAudioSessionId();
+    method public int getClientAudioSource();
+    method @NonNull public java.util.List<android.media.audiofx.AudioEffect.Descriptor> getClientEffects();
+    method public android.media.AudioFormat getClientFormat();
+    method @NonNull public java.util.List<android.media.audiofx.AudioEffect.Descriptor> getEffects();
+    method public android.media.AudioFormat getFormat();
+    method public boolean isClientSilenced();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioRecordingConfiguration> CREATOR;
+  }
+
+  public interface AudioRecordingMonitor {
+    method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration();
+    method public void registerAudioRecordingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioRecordingCallback);
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+  }
+
+  public interface AudioRouting {
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+  }
+
+  public static interface AudioRouting.OnRoutingChangedListener {
+    method public void onRoutingChanged(android.media.AudioRouting);
+  }
+
+  public final class AudioTimestamp {
+    ctor public AudioTimestamp();
+    field public static final int TIMEBASE_BOOTTIME = 1; // 0x1
+    field public static final int TIMEBASE_MONOTONIC = 0; // 0x0
+    field public long framePosition;
+    field public long nanoTime;
+  }
+
+  public class AudioTrack implements android.media.AudioRouting android.media.VolumeAutomation {
+    ctor @Deprecated public AudioTrack(int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    ctor @Deprecated public AudioTrack(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException;
+    ctor public AudioTrack(android.media.AudioAttributes, android.media.AudioFormat, int, int, int) throws java.lang.IllegalArgumentException;
+    method public void addOnCodecFormatChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioTrack.OnCodecFormatChangedListener);
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method @Deprecated public void addOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener, android.os.Handler);
+    method public int attachAuxEffect(int);
+    method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration);
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method public float getAudioDescriptionMixLeveldB();
+    method public int getAudioFormat();
+    method public int getAudioSessionId();
+    method @IntRange(from=0) public int getBufferCapacityInFrames();
+    method @IntRange(from=0) public int getBufferSizeInFrames();
+    method public int getChannelConfiguration();
+    method public int getChannelCount();
+    method public int getDualMonoMode();
+    method @NonNull public android.media.AudioFormat getFormat();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public static float getMaxVolume();
+    method public android.os.PersistableBundle getMetrics();
+    method public static int getMinBufferSize(int, int, int);
+    method public static float getMinVolume();
+    method @Deprecated protected int getNativeFrameCount();
+    method public static int getNativeOutputSampleRate(int);
+    method public int getNotificationMarkerPosition();
+    method @IntRange(from=0) public int getOffloadDelay();
+    method @IntRange(from=0) public int getOffloadPadding();
+    method public int getPerformanceMode();
+    method public int getPlayState();
+    method public int getPlaybackHeadPosition();
+    method @NonNull public android.media.PlaybackParams getPlaybackParams();
+    method public int getPlaybackRate();
+    method public int getPositionNotificationPeriod();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public int getSampleRate();
+    method @IntRange(from=1) public int getStartThresholdInFrames();
+    method public int getState();
+    method public int getStreamType();
+    method public boolean getTimestamp(android.media.AudioTimestamp);
+    method public int getUnderrunCount();
+    method public static boolean isDirectPlaybackSupported(@NonNull android.media.AudioFormat, @NonNull android.media.AudioAttributes);
+    method public boolean isOffloadedPlayback();
+    method public void pause() throws java.lang.IllegalStateException;
+    method public void play() throws java.lang.IllegalStateException;
+    method public void registerStreamEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioTrack.StreamEventCallback);
+    method public void release();
+    method public int reloadStaticData();
+    method public void removeOnCodecFormatChangedListener(@NonNull android.media.AudioTrack.OnCodecFormatChangedListener);
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method @Deprecated public void removeOnRoutingChangedListener(android.media.AudioTrack.OnRoutingChangedListener);
+    method public boolean setAudioDescriptionMixLeveldB(@FloatRange(to=48.0f, toInclusive=true) float);
+    method public int setAuxEffectSendLevel(@FloatRange(from=0.0) float);
+    method public int setBufferSizeInFrames(@IntRange(from=0) int);
+    method public boolean setDualMonoMode(int);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public int setLoopPoints(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int);
+    method public int setNotificationMarkerPosition(int);
+    method public void setOffloadDelayPadding(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public void setOffloadEndOfStream();
+    method public int setPlaybackHeadPosition(@IntRange(from=0) int);
+    method public void setPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener);
+    method public void setPlaybackPositionUpdateListener(android.media.AudioTrack.OnPlaybackPositionUpdateListener, android.os.Handler);
+    method public int setPlaybackRate(int);
+    method public int setPositionNotificationPeriod(int);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public int setPresentation(@NonNull android.media.AudioPresentation);
+    method @IntRange(from=1) public int setStartThresholdInFrames(@IntRange(from=1) int);
+    method @Deprecated protected void setState(int);
+    method @Deprecated public int setStereoVolume(float, float);
+    method public int setVolume(float);
+    method public void stop() throws java.lang.IllegalStateException;
+    method public void unregisterStreamEventCallback(@NonNull android.media.AudioTrack.StreamEventCallback);
+    method public int write(@NonNull byte[], int, int);
+    method public int write(@NonNull byte[], int, int, int);
+    method public int write(@NonNull short[], int, int);
+    method public int write(@NonNull short[], int, int, int);
+    method public int write(@NonNull float[], int, int, int);
+    method public int write(@NonNull java.nio.ByteBuffer, int, int);
+    method public int write(@NonNull java.nio.ByteBuffer, int, int, long);
+    field public static final int DUAL_MONO_MODE_LL = 2; // 0x2
+    field public static final int DUAL_MONO_MODE_LR = 1; // 0x1
+    field public static final int DUAL_MONO_MODE_OFF = 0; // 0x0
+    field public static final int DUAL_MONO_MODE_RR = 3; // 0x3
+    field public static final int ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR = 2; // 0x2
+    field public static final int ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER = 1; // 0x1
+    field public static final int ENCAPSULATION_MODE_ELEMENTARY_STREAM = 1; // 0x1
+    field public static final int ENCAPSULATION_MODE_NONE = 0; // 0x0
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -2; // 0xfffffffe
+    field public static final int ERROR_DEAD_OBJECT = -6; // 0xfffffffa
+    field public static final int ERROR_INVALID_OPERATION = -3; // 0xfffffffd
+    field public static final int MODE_STATIC = 0; // 0x0
+    field public static final int MODE_STREAM = 1; // 0x1
+    field public static final int PERFORMANCE_MODE_LOW_LATENCY = 1; // 0x1
+    field public static final int PERFORMANCE_MODE_NONE = 0; // 0x0
+    field public static final int PERFORMANCE_MODE_POWER_SAVING = 2; // 0x2
+    field public static final int PLAYSTATE_PAUSED = 2; // 0x2
+    field public static final int PLAYSTATE_PLAYING = 3; // 0x3
+    field public static final int PLAYSTATE_STOPPED = 1; // 0x1
+    field public static final int STATE_INITIALIZED = 1; // 0x1
+    field public static final int STATE_NO_STATIC_DATA = 2; // 0x2
+    field public static final int STATE_UNINITIALIZED = 0; // 0x0
+    field public static final int SUCCESS = 0; // 0x0
+    field public static final int WRITE_BLOCKING = 0; // 0x0
+    field public static final int WRITE_NON_BLOCKING = 1; // 0x1
+  }
+
+  public static class AudioTrack.Builder {
+    ctor public AudioTrack.Builder();
+    method @NonNull public android.media.AudioTrack build() throws java.lang.UnsupportedOperationException;
+    method @NonNull public android.media.AudioTrack.Builder setAudioAttributes(@NonNull android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setAudioFormat(@NonNull android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setBufferSizeInBytes(@IntRange(from=0) int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setEncapsulationMode(int);
+    method @NonNull public android.media.AudioTrack.Builder setOffloadedPlayback(boolean);
+    method @NonNull public android.media.AudioTrack.Builder setPerformanceMode(int);
+    method @NonNull public android.media.AudioTrack.Builder setSessionId(@IntRange(from=1) int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioTrack.Builder setTransferMode(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public static final class AudioTrack.MetricsConstants {
+    field @Deprecated public static final String CHANNELMASK = "android.media.audiorecord.channelmask";
+    field public static final String CONTENTTYPE = "android.media.audiotrack.type";
+    field @Deprecated public static final String SAMPLERATE = "android.media.audiorecord.samplerate";
+    field public static final String STREAMTYPE = "android.media.audiotrack.streamtype";
+    field public static final String USAGE = "android.media.audiotrack.usage";
+  }
+
+  public static interface AudioTrack.OnCodecFormatChangedListener {
+    method public void onCodecFormatChanged(@NonNull android.media.AudioTrack, @Nullable android.media.AudioMetadataReadMap);
+  }
+
+  public static interface AudioTrack.OnPlaybackPositionUpdateListener {
+    method public void onMarkerReached(android.media.AudioTrack);
+    method public void onPeriodicNotification(android.media.AudioTrack);
+  }
+
+  @Deprecated public static interface AudioTrack.OnRoutingChangedListener extends android.media.AudioRouting.OnRoutingChangedListener {
+    method @Deprecated public void onRoutingChanged(android.media.AudioTrack);
+    method @Deprecated public default void onRoutingChanged(android.media.AudioRouting);
+  }
+
+  public abstract static class AudioTrack.StreamEventCallback {
+    ctor public AudioTrack.StreamEventCallback();
+    method public void onDataRequest(@NonNull android.media.AudioTrack, @IntRange(from=0) int);
+    method public void onPresentationEnded(@NonNull android.media.AudioTrack);
+    method public void onTearDown(@NonNull android.media.AudioTrack);
+  }
+
+  public class CamcorderProfile {
+    method @Deprecated public static android.media.CamcorderProfile get(int);
+    method @Deprecated public static android.media.CamcorderProfile get(int, int);
+    method @Nullable public static android.media.EncoderProfiles getAll(@NonNull String, int);
+    method public static boolean hasProfile(int);
+    method public static boolean hasProfile(int, int);
+    field public static final int QUALITY_1080P = 6; // 0x6
+    field public static final int QUALITY_2160P = 8; // 0x8
+    field public static final int QUALITY_2K = 12; // 0xc
+    field public static final int QUALITY_480P = 4; // 0x4
+    field public static final int QUALITY_4KDCI = 10; // 0xa
+    field public static final int QUALITY_720P = 5; // 0x5
+    field public static final int QUALITY_8KUHD = 13; // 0xd
+    field public static final int QUALITY_CIF = 3; // 0x3
+    field public static final int QUALITY_HIGH = 1; // 0x1
+    field public static final int QUALITY_HIGH_SPEED_1080P = 2004; // 0x7d4
+    field public static final int QUALITY_HIGH_SPEED_2160P = 2005; // 0x7d5
+    field public static final int QUALITY_HIGH_SPEED_480P = 2002; // 0x7d2
+    field public static final int QUALITY_HIGH_SPEED_4KDCI = 2008; // 0x7d8
+    field public static final int QUALITY_HIGH_SPEED_720P = 2003; // 0x7d3
+    field public static final int QUALITY_HIGH_SPEED_CIF = 2006; // 0x7d6
+    field public static final int QUALITY_HIGH_SPEED_HIGH = 2001; // 0x7d1
+    field public static final int QUALITY_HIGH_SPEED_LOW = 2000; // 0x7d0
+    field public static final int QUALITY_HIGH_SPEED_VGA = 2007; // 0x7d7
+    field public static final int QUALITY_LOW = 0; // 0x0
+    field public static final int QUALITY_QCIF = 2; // 0x2
+    field public static final int QUALITY_QHD = 11; // 0xb
+    field public static final int QUALITY_QVGA = 7; // 0x7
+    field public static final int QUALITY_TIME_LAPSE_1080P = 1006; // 0x3ee
+    field public static final int QUALITY_TIME_LAPSE_2160P = 1008; // 0x3f0
+    field public static final int QUALITY_TIME_LAPSE_2K = 1012; // 0x3f4
+    field public static final int QUALITY_TIME_LAPSE_480P = 1004; // 0x3ec
+    field public static final int QUALITY_TIME_LAPSE_4KDCI = 1010; // 0x3f2
+    field public static final int QUALITY_TIME_LAPSE_720P = 1005; // 0x3ed
+    field public static final int QUALITY_TIME_LAPSE_8KUHD = 1013; // 0x3f5
+    field public static final int QUALITY_TIME_LAPSE_CIF = 1003; // 0x3eb
+    field public static final int QUALITY_TIME_LAPSE_HIGH = 1001; // 0x3e9
+    field public static final int QUALITY_TIME_LAPSE_LOW = 1000; // 0x3e8
+    field public static final int QUALITY_TIME_LAPSE_QCIF = 1002; // 0x3ea
+    field public static final int QUALITY_TIME_LAPSE_QHD = 1011; // 0x3f3
+    field public static final int QUALITY_TIME_LAPSE_QVGA = 1007; // 0x3ef
+    field public static final int QUALITY_TIME_LAPSE_VGA = 1009; // 0x3f1
+    field public static final int QUALITY_VGA = 9; // 0x9
+    field public int audioBitRate;
+    field public int audioChannels;
+    field public int audioCodec;
+    field public int audioSampleRate;
+    field public int duration;
+    field public int fileFormat;
+    field public int quality;
+    field public int videoBitRate;
+    field public int videoCodec;
+    field public int videoFrameHeight;
+    field public int videoFrameRate;
+    field public int videoFrameWidth;
+  }
+
+  public class CameraProfile {
+    ctor public CameraProfile();
+    method public static int getJpegEncodingQualityParameter(int);
+    method public static int getJpegEncodingQualityParameter(int, int);
+    field public static final int QUALITY_HIGH = 2; // 0x2
+    field public static final int QUALITY_LOW = 0; // 0x0
+    field public static final int QUALITY_MEDIUM = 1; // 0x1
+  }
+
+  public final class DeniedByServerException extends android.media.MediaDrmException {
+    ctor public DeniedByServerException(String);
+  }
+
+  public abstract class DrmInitData {
+    method @Deprecated public abstract android.media.DrmInitData.SchemeInitData get(java.util.UUID);
+    method @NonNull public android.media.DrmInitData.SchemeInitData getSchemeInitDataAt(int);
+    method public int getSchemeInitDataCount();
+  }
+
+  public static final class DrmInitData.SchemeInitData {
+    ctor public DrmInitData.SchemeInitData(@NonNull java.util.UUID, @NonNull String, @NonNull byte[]);
+    field @NonNull public static final java.util.UUID UUID_NIL;
+    field public final byte[] data;
+    field public final String mimeType;
+    field @NonNull public final java.util.UUID uuid;
+  }
+
+  public final class EncoderProfiles {
+    method @NonNull public java.util.List<android.media.EncoderProfiles.AudioProfile> getAudioProfiles();
+    method public int getDefaultDurationSeconds();
+    method public int getRecommendedFileFormat();
+    method @NonNull public java.util.List<android.media.EncoderProfiles.VideoProfile> getVideoProfiles();
+  }
+
+  public static final class EncoderProfiles.AudioProfile {
+    method public int getBitrate();
+    method public int getChannels();
+    method public int getCodec();
+    method @NonNull public String getMediaType();
+    method public int getProfile();
+    method public int getSampleRate();
+  }
+
+  public static final class EncoderProfiles.VideoProfile {
+    method public int getBitrate();
+    method public int getCodec();
+    method public int getFrameRate();
+    method public int getHeight();
+    method @NonNull public String getMediaType();
+    method public int getProfile();
+    method public int getWidth();
+  }
+
+  public class ExifInterface {
+    ctor public ExifInterface(@NonNull java.io.File) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull String) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull java.io.InputStream) throws java.io.IOException;
+    ctor public ExifInterface(@NonNull java.io.InputStream, int) throws java.io.IOException;
+    method public double getAltitude(double);
+    method @Nullable public String getAttribute(@NonNull String);
+    method @Nullable public byte[] getAttributeBytes(@NonNull String);
+    method public double getAttributeDouble(@NonNull String, double);
+    method public int getAttributeInt(@NonNull String, int);
+    method @Nullable public long[] getAttributeRange(@NonNull String);
+    method public long getDateTime();
+    method public long getDateTimeDigitized();
+    method public long getDateTimeOriginal();
+    method public long getGpsDateTime();
+    method public boolean getLatLong(float[]);
+    method public byte[] getThumbnail();
+    method public android.graphics.Bitmap getThumbnailBitmap();
+    method public byte[] getThumbnailBytes();
+    method @Nullable public long[] getThumbnailRange();
+    method public boolean hasAttribute(@NonNull String);
+    method public boolean hasThumbnail();
+    method public static boolean isSupportedMimeType(@NonNull String);
+    method public boolean isThumbnailCompressed();
+    method public void saveAttributes() throws java.io.IOException;
+    method public void setAttribute(@NonNull String, @Nullable String);
+    field public static final int ORIENTATION_FLIP_HORIZONTAL = 2; // 0x2
+    field public static final int ORIENTATION_FLIP_VERTICAL = 4; // 0x4
+    field public static final int ORIENTATION_NORMAL = 1; // 0x1
+    field public static final int ORIENTATION_ROTATE_180 = 3; // 0x3
+    field public static final int ORIENTATION_ROTATE_270 = 8; // 0x8
+    field public static final int ORIENTATION_ROTATE_90 = 6; // 0x6
+    field public static final int ORIENTATION_TRANSPOSE = 5; // 0x5
+    field public static final int ORIENTATION_TRANSVERSE = 7; // 0x7
+    field public static final int ORIENTATION_UNDEFINED = 0; // 0x0
+    field public static final int STREAM_TYPE_EXIF_DATA_ONLY = 1; // 0x1
+    field public static final int STREAM_TYPE_FULL_IMAGE_DATA = 0; // 0x0
+    field @Deprecated public static final String TAG_APERTURE = "FNumber";
+    field public static final String TAG_APERTURE_VALUE = "ApertureValue";
+    field public static final String TAG_ARTIST = "Artist";
+    field public static final String TAG_BITS_PER_SAMPLE = "BitsPerSample";
+    field public static final String TAG_BRIGHTNESS_VALUE = "BrightnessValue";
+    field public static final String TAG_CFA_PATTERN = "CFAPattern";
+    field public static final String TAG_COLOR_SPACE = "ColorSpace";
+    field public static final String TAG_COMPONENTS_CONFIGURATION = "ComponentsConfiguration";
+    field public static final String TAG_COMPRESSED_BITS_PER_PIXEL = "CompressedBitsPerPixel";
+    field public static final String TAG_COMPRESSION = "Compression";
+    field public static final String TAG_CONTRAST = "Contrast";
+    field public static final String TAG_COPYRIGHT = "Copyright";
+    field public static final String TAG_CUSTOM_RENDERED = "CustomRendered";
+    field public static final String TAG_DATETIME = "DateTime";
+    field public static final String TAG_DATETIME_DIGITIZED = "DateTimeDigitized";
+    field public static final String TAG_DATETIME_ORIGINAL = "DateTimeOriginal";
+    field public static final String TAG_DEFAULT_CROP_SIZE = "DefaultCropSize";
+    field public static final String TAG_DEVICE_SETTING_DESCRIPTION = "DeviceSettingDescription";
+    field public static final String TAG_DIGITAL_ZOOM_RATIO = "DigitalZoomRatio";
+    field public static final String TAG_DNG_VERSION = "DNGVersion";
+    field public static final String TAG_EXIF_VERSION = "ExifVersion";
+    field public static final String TAG_EXPOSURE_BIAS_VALUE = "ExposureBiasValue";
+    field public static final String TAG_EXPOSURE_INDEX = "ExposureIndex";
+    field public static final String TAG_EXPOSURE_MODE = "ExposureMode";
+    field public static final String TAG_EXPOSURE_PROGRAM = "ExposureProgram";
+    field public static final String TAG_EXPOSURE_TIME = "ExposureTime";
+    field public static final String TAG_FILE_SOURCE = "FileSource";
+    field public static final String TAG_FLASH = "Flash";
+    field public static final String TAG_FLASHPIX_VERSION = "FlashpixVersion";
+    field public static final String TAG_FLASH_ENERGY = "FlashEnergy";
+    field public static final String TAG_FOCAL_LENGTH = "FocalLength";
+    field public static final String TAG_FOCAL_LENGTH_IN_35MM_FILM = "FocalLengthIn35mmFilm";
+    field public static final String TAG_FOCAL_PLANE_RESOLUTION_UNIT = "FocalPlaneResolutionUnit";
+    field public static final String TAG_FOCAL_PLANE_X_RESOLUTION = "FocalPlaneXResolution";
+    field public static final String TAG_FOCAL_PLANE_Y_RESOLUTION = "FocalPlaneYResolution";
+    field public static final String TAG_F_NUMBER = "FNumber";
+    field public static final String TAG_GAIN_CONTROL = "GainControl";
+    field public static final String TAG_GPS_ALTITUDE = "GPSAltitude";
+    field public static final String TAG_GPS_ALTITUDE_REF = "GPSAltitudeRef";
+    field public static final String TAG_GPS_AREA_INFORMATION = "GPSAreaInformation";
+    field public static final String TAG_GPS_DATESTAMP = "GPSDateStamp";
+    field public static final String TAG_GPS_DEST_BEARING = "GPSDestBearing";
+    field public static final String TAG_GPS_DEST_BEARING_REF = "GPSDestBearingRef";
+    field public static final String TAG_GPS_DEST_DISTANCE = "GPSDestDistance";
+    field public static final String TAG_GPS_DEST_DISTANCE_REF = "GPSDestDistanceRef";
+    field public static final String TAG_GPS_DEST_LATITUDE = "GPSDestLatitude";
+    field public static final String TAG_GPS_DEST_LATITUDE_REF = "GPSDestLatitudeRef";
+    field public static final String TAG_GPS_DEST_LONGITUDE = "GPSDestLongitude";
+    field public static final String TAG_GPS_DEST_LONGITUDE_REF = "GPSDestLongitudeRef";
+    field public static final String TAG_GPS_DIFFERENTIAL = "GPSDifferential";
+    field public static final String TAG_GPS_DOP = "GPSDOP";
+    field public static final String TAG_GPS_IMG_DIRECTION = "GPSImgDirection";
+    field public static final String TAG_GPS_IMG_DIRECTION_REF = "GPSImgDirectionRef";
+    field public static final String TAG_GPS_LATITUDE = "GPSLatitude";
+    field public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef";
+    field public static final String TAG_GPS_LONGITUDE = "GPSLongitude";
+    field public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef";
+    field public static final String TAG_GPS_MAP_DATUM = "GPSMapDatum";
+    field public static final String TAG_GPS_MEASURE_MODE = "GPSMeasureMode";
+    field public static final String TAG_GPS_PROCESSING_METHOD = "GPSProcessingMethod";
+    field public static final String TAG_GPS_SATELLITES = "GPSSatellites";
+    field public static final String TAG_GPS_SPEED = "GPSSpeed";
+    field public static final String TAG_GPS_SPEED_REF = "GPSSpeedRef";
+    field public static final String TAG_GPS_STATUS = "GPSStatus";
+    field public static final String TAG_GPS_TIMESTAMP = "GPSTimeStamp";
+    field public static final String TAG_GPS_TRACK = "GPSTrack";
+    field public static final String TAG_GPS_TRACK_REF = "GPSTrackRef";
+    field public static final String TAG_GPS_VERSION_ID = "GPSVersionID";
+    field public static final String TAG_IMAGE_DESCRIPTION = "ImageDescription";
+    field public static final String TAG_IMAGE_LENGTH = "ImageLength";
+    field public static final String TAG_IMAGE_UNIQUE_ID = "ImageUniqueID";
+    field public static final String TAG_IMAGE_WIDTH = "ImageWidth";
+    field public static final String TAG_INTEROPERABILITY_INDEX = "InteroperabilityIndex";
+    field @Deprecated public static final String TAG_ISO = "ISOSpeedRatings";
+    field public static final String TAG_ISO_SPEED_RATINGS = "ISOSpeedRatings";
+    field public static final String TAG_JPEG_INTERCHANGE_FORMAT = "JPEGInterchangeFormat";
+    field public static final String TAG_JPEG_INTERCHANGE_FORMAT_LENGTH = "JPEGInterchangeFormatLength";
+    field public static final String TAG_LIGHT_SOURCE = "LightSource";
+    field public static final String TAG_MAKE = "Make";
+    field public static final String TAG_MAKER_NOTE = "MakerNote";
+    field public static final String TAG_MAX_APERTURE_VALUE = "MaxApertureValue";
+    field public static final String TAG_METERING_MODE = "MeteringMode";
+    field public static final String TAG_MODEL = "Model";
+    field public static final String TAG_NEW_SUBFILE_TYPE = "NewSubfileType";
+    field public static final String TAG_OECF = "OECF";
+    field public static final String TAG_OFFSET_TIME = "OffsetTime";
+    field public static final String TAG_OFFSET_TIME_DIGITIZED = "OffsetTimeDigitized";
+    field public static final String TAG_OFFSET_TIME_ORIGINAL = "OffsetTimeOriginal";
+    field public static final String TAG_ORF_ASPECT_FRAME = "AspectFrame";
+    field public static final String TAG_ORF_PREVIEW_IMAGE_LENGTH = "PreviewImageLength";
+    field public static final String TAG_ORF_PREVIEW_IMAGE_START = "PreviewImageStart";
+    field public static final String TAG_ORF_THUMBNAIL_IMAGE = "ThumbnailImage";
+    field public static final String TAG_ORIENTATION = "Orientation";
+    field public static final String TAG_PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation";
+    field public static final String TAG_PIXEL_X_DIMENSION = "PixelXDimension";
+    field public static final String TAG_PIXEL_Y_DIMENSION = "PixelYDimension";
+    field public static final String TAG_PLANAR_CONFIGURATION = "PlanarConfiguration";
+    field public static final String TAG_PRIMARY_CHROMATICITIES = "PrimaryChromaticities";
+    field public static final String TAG_REFERENCE_BLACK_WHITE = "ReferenceBlackWhite";
+    field public static final String TAG_RELATED_SOUND_FILE = "RelatedSoundFile";
+    field public static final String TAG_RESOLUTION_UNIT = "ResolutionUnit";
+    field public static final String TAG_ROWS_PER_STRIP = "RowsPerStrip";
+    field public static final String TAG_RW2_ISO = "ISO";
+    field public static final String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+    field public static final String TAG_RW2_SENSOR_BOTTOM_BORDER = "SensorBottomBorder";
+    field public static final String TAG_RW2_SENSOR_LEFT_BORDER = "SensorLeftBorder";
+    field public static final String TAG_RW2_SENSOR_RIGHT_BORDER = "SensorRightBorder";
+    field public static final String TAG_RW2_SENSOR_TOP_BORDER = "SensorTopBorder";
+    field public static final String TAG_SAMPLES_PER_PIXEL = "SamplesPerPixel";
+    field public static final String TAG_SATURATION = "Saturation";
+    field public static final String TAG_SCENE_CAPTURE_TYPE = "SceneCaptureType";
+    field public static final String TAG_SCENE_TYPE = "SceneType";
+    field public static final String TAG_SENSING_METHOD = "SensingMethod";
+    field public static final String TAG_SHARPNESS = "Sharpness";
+    field public static final String TAG_SHUTTER_SPEED_VALUE = "ShutterSpeedValue";
+    field public static final String TAG_SOFTWARE = "Software";
+    field public static final String TAG_SPATIAL_FREQUENCY_RESPONSE = "SpatialFrequencyResponse";
+    field public static final String TAG_SPECTRAL_SENSITIVITY = "SpectralSensitivity";
+    field public static final String TAG_STRIP_BYTE_COUNTS = "StripByteCounts";
+    field public static final String TAG_STRIP_OFFSETS = "StripOffsets";
+    field public static final String TAG_SUBFILE_TYPE = "SubfileType";
+    field public static final String TAG_SUBJECT_AREA = "SubjectArea";
+    field public static final String TAG_SUBJECT_DISTANCE = "SubjectDistance";
+    field public static final String TAG_SUBJECT_DISTANCE_RANGE = "SubjectDistanceRange";
+    field public static final String TAG_SUBJECT_LOCATION = "SubjectLocation";
+    field public static final String TAG_SUBSEC_TIME = "SubSecTime";
+    field @Deprecated public static final String TAG_SUBSEC_TIME_DIG = "SubSecTimeDigitized";
+    field public static final String TAG_SUBSEC_TIME_DIGITIZED = "SubSecTimeDigitized";
+    field @Deprecated public static final String TAG_SUBSEC_TIME_ORIG = "SubSecTimeOriginal";
+    field public static final String TAG_SUBSEC_TIME_ORIGINAL = "SubSecTimeOriginal";
+    field public static final String TAG_THUMBNAIL_IMAGE_LENGTH = "ThumbnailImageLength";
+    field public static final String TAG_THUMBNAIL_IMAGE_WIDTH = "ThumbnailImageWidth";
+    field public static final String TAG_THUMBNAIL_ORIENTATION = "ThumbnailOrientation";
+    field public static final String TAG_TRANSFER_FUNCTION = "TransferFunction";
+    field public static final String TAG_USER_COMMENT = "UserComment";
+    field public static final String TAG_WHITE_BALANCE = "WhiteBalance";
+    field public static final String TAG_WHITE_POINT = "WhitePoint";
+    field public static final String TAG_XMP = "Xmp";
+    field public static final String TAG_X_RESOLUTION = "XResolution";
+    field public static final String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
+    field public static final String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
+    field public static final String TAG_Y_CB_CR_SUB_SAMPLING = "YCbCrSubSampling";
+    field public static final String TAG_Y_RESOLUTION = "YResolution";
+    field public static final int WHITEBALANCE_AUTO = 0; // 0x0
+    field public static final int WHITEBALANCE_MANUAL = 1; // 0x1
+  }
+
+  public class FaceDetector {
+    ctor public FaceDetector(int, int, int);
+    method public int findFaces(android.graphics.Bitmap, android.media.FaceDetector.Face[]);
+  }
+
+  public class FaceDetector.Face {
+    method public float confidence();
+    method public float eyesDistance();
+    method public void getMidPoint(android.graphics.PointF);
+    method public float pose(int);
+    field public static final float CONFIDENCE_THRESHOLD = 0.4f;
+    field public static final int EULER_X = 0; // 0x0
+    field public static final int EULER_Y = 1; // 0x1
+    field public static final int EULER_Z = 2; // 0x2
+  }
+
+  public abstract class Image implements java.lang.AutoCloseable {
+    method public abstract void close();
+    method public android.graphics.Rect getCropRect();
+    method public abstract int getFormat();
+    method @Nullable public android.hardware.HardwareBuffer getHardwareBuffer();
+    method public abstract int getHeight();
+    method public abstract android.media.Image.Plane[] getPlanes();
+    method public abstract long getTimestamp();
+    method public abstract int getWidth();
+    method public void setCropRect(android.graphics.Rect);
+    method public void setTimestamp(long);
+  }
+
+  public abstract static class Image.Plane {
+    method public abstract java.nio.ByteBuffer getBuffer();
+    method public abstract int getPixelStride();
+    method public abstract int getRowStride();
+  }
+
+  public class ImageReader implements java.lang.AutoCloseable {
+    method public android.media.Image acquireLatestImage();
+    method public android.media.Image acquireNextImage();
+    method public void close();
+    method public void discardFreeBuffers();
+    method public int getHeight();
+    method public int getImageFormat();
+    method public int getMaxImages();
+    method public android.view.Surface getSurface();
+    method public int getWidth();
+    method @NonNull public static android.media.ImageReader newInstance(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int);
+    method @NonNull public static android.media.ImageReader newInstance(@IntRange(from=1) int, @IntRange(from=1) int, int, @IntRange(from=1) int, long);
+    method public void setOnImageAvailableListener(android.media.ImageReader.OnImageAvailableListener, android.os.Handler);
+  }
+
+  public static interface ImageReader.OnImageAvailableListener {
+    method public void onImageAvailable(android.media.ImageReader);
+  }
+
+  public class ImageWriter implements java.lang.AutoCloseable {
+    method public void close();
+    method public android.media.Image dequeueInputImage();
+    method public int getFormat();
+    method public int getMaxImages();
+    method @NonNull public static android.media.ImageWriter newInstance(@NonNull android.view.Surface, @IntRange(from=1) int);
+    method @NonNull public static android.media.ImageWriter newInstance(@NonNull android.view.Surface, @IntRange(from=1) int, int);
+    method public void queueInputImage(android.media.Image);
+    method public void setOnImageReleasedListener(android.media.ImageWriter.OnImageReleasedListener, android.os.Handler);
+  }
+
+  public static interface ImageWriter.OnImageReleasedListener {
+    method public void onImageReleased(android.media.ImageWriter);
+  }
+
+  public class JetPlayer {
+    method public boolean clearQueue();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method public boolean closeJetFile();
+    method protected void finalize();
+    method public static android.media.JetPlayer getJetPlayer();
+    method public static int getMaxTracks();
+    method public boolean loadJetFile(String);
+    method public boolean loadJetFile(android.content.res.AssetFileDescriptor);
+    method public boolean pause();
+    method public boolean play();
+    method public boolean queueJetSegment(int, int, int, int, int, byte);
+    method public boolean queueJetSegmentMuteArray(int, int, int, int, boolean[], byte);
+    method public void release();
+    method public void setEventListener(android.media.JetPlayer.OnJetEventListener);
+    method public void setEventListener(android.media.JetPlayer.OnJetEventListener, android.os.Handler);
+    method public boolean setMuteArray(boolean[], boolean);
+    method public boolean setMuteFlag(int, boolean, boolean);
+    method public boolean setMuteFlags(int, boolean);
+    method public boolean triggerClip(int);
+  }
+
+  public static interface JetPlayer.OnJetEventListener {
+    method public void onJetEvent(android.media.JetPlayer, short, byte, byte, byte, byte);
+    method public void onJetNumQueuedSegmentUpdate(android.media.JetPlayer, int);
+    method public void onJetPauseUpdate(android.media.JetPlayer, int);
+    method public void onJetUserIdUpdate(android.media.JetPlayer, int, int);
+  }
+
+  public class MediaActionSound {
+    ctor public MediaActionSound();
+    method public void load(int);
+    method public void play(int);
+    method public void release();
+    field public static final int FOCUS_COMPLETE = 1; // 0x1
+    field public static final int SHUTTER_CLICK = 0; // 0x0
+    field public static final int START_VIDEO_RECORDING = 2; // 0x2
+    field public static final int STOP_VIDEO_RECORDING = 3; // 0x3
+  }
+
+  public final class MediaCas implements java.lang.AutoCloseable {
+    ctor public MediaCas(int) throws android.media.MediaCasException.UnsupportedCasException;
+    ctor public MediaCas(@NonNull android.content.Context, int, @Nullable String, int) throws android.media.MediaCasException.UnsupportedCasException;
+    ctor public MediaCas(@NonNull android.content.Context, int, @Nullable String, int, @Nullable android.os.Handler, @Nullable android.media.MediaCas.EventListener) throws android.media.MediaCasException.UnsupportedCasException;
+    method public void close();
+    method public static android.media.MediaCas.PluginDescriptor[] enumeratePlugins();
+    method protected void finalize();
+    method public static boolean isSystemIdSupported(int);
+    method public android.media.MediaCas.Session openSession() throws android.media.MediaCasException;
+    method @Nullable public android.media.MediaCas.Session openSession(int, int) throws android.media.MediaCasException;
+    method public void processEmm(@NonNull byte[], int, int) throws android.media.MediaCasException;
+    method public void processEmm(@NonNull byte[]) throws android.media.MediaCasException;
+    method public void provision(@NonNull String) throws android.media.MediaCasException;
+    method public void refreshEntitlements(int, @Nullable byte[]) throws android.media.MediaCasException;
+    method public void sendEvent(int, int, @Nullable byte[]) throws android.media.MediaCasException;
+    method public void setEventListener(@Nullable android.media.MediaCas.EventListener, @Nullable android.os.Handler);
+    method public void setPrivateData(@NonNull byte[]) throws android.media.MediaCasException;
+    field public static final int PLUGIN_STATUS_PHYSICAL_MODULE_CHANGED = 0; // 0x0
+    field public static final int PLUGIN_STATUS_SESSION_NUMBER_CHANGED = 1; // 0x1
+    field public static final int SCRAMBLING_MODE_AES128 = 9; // 0x9
+    field public static final int SCRAMBLING_MODE_AES_ECB = 10; // 0xa
+    field public static final int SCRAMBLING_MODE_AES_SCTE52 = 11; // 0xb
+    field public static final int SCRAMBLING_MODE_DVB_CISSA_V1 = 6; // 0x6
+    field public static final int SCRAMBLING_MODE_DVB_CSA1 = 1; // 0x1
+    field public static final int SCRAMBLING_MODE_DVB_CSA2 = 2; // 0x2
+    field public static final int SCRAMBLING_MODE_DVB_CSA3_ENHANCE = 5; // 0x5
+    field public static final int SCRAMBLING_MODE_DVB_CSA3_MINIMAL = 4; // 0x4
+    field public static final int SCRAMBLING_MODE_DVB_CSA3_STANDARD = 3; // 0x3
+    field public static final int SCRAMBLING_MODE_DVB_IDSA = 7; // 0x7
+    field public static final int SCRAMBLING_MODE_MULTI2 = 8; // 0x8
+    field public static final int SCRAMBLING_MODE_RESERVED = 0; // 0x0
+    field public static final int SCRAMBLING_MODE_TDES_ECB = 12; // 0xc
+    field public static final int SCRAMBLING_MODE_TDES_SCTE52 = 13; // 0xd
+    field public static final int SESSION_USAGE_LIVE = 0; // 0x0
+    field public static final int SESSION_USAGE_PLAYBACK = 1; // 0x1
+    field public static final int SESSION_USAGE_RECORD = 2; // 0x2
+    field public static final int SESSION_USAGE_TIMESHIFT = 3; // 0x3
+  }
+
+  public static interface MediaCas.EventListener {
+    method public void onEvent(@NonNull android.media.MediaCas, int, int, @Nullable byte[]);
+    method public default void onPluginStatusUpdate(@NonNull android.media.MediaCas, int, int);
+    method public default void onResourceLost(@NonNull android.media.MediaCas);
+    method public default void onSessionEvent(@NonNull android.media.MediaCas, @NonNull android.media.MediaCas.Session, int, int, @Nullable byte[]);
+  }
+
+  public static class MediaCas.PluginDescriptor {
+    method @NonNull public String getName();
+    method public int getSystemId();
+  }
+
+  public final class MediaCas.Session implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public byte[] getSessionId();
+    method public void processEcm(@NonNull byte[], int, int) throws android.media.MediaCasException;
+    method public void processEcm(@NonNull byte[]) throws android.media.MediaCasException;
+    method public void sendSessionEvent(int, int, @Nullable byte[]) throws android.media.MediaCasException;
+    method public void setPrivateData(@NonNull byte[]) throws android.media.MediaCasException;
+  }
+
+  public class MediaCasException extends java.lang.Exception {
+  }
+
+  public static final class MediaCasException.DeniedByServerException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.InsufficientResourceException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.NotProvisionedException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.ResourceBusyException extends android.media.MediaCasException {
+  }
+
+  public static final class MediaCasException.UnsupportedCasException extends android.media.MediaCasException {
+  }
+
+  public class MediaCasStateException extends java.lang.IllegalStateException {
+    method @NonNull public String getDiagnosticInfo();
+  }
+
+  public final class MediaCodec {
+    method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, @Nullable android.media.MediaCrypto, int);
+    method public void configure(@Nullable android.media.MediaFormat, @Nullable android.view.Surface, int, @Nullable android.media.MediaDescrambler);
+    method @NonNull public static android.media.MediaCodec createByCodecName(@NonNull String) throws java.io.IOException;
+    method @NonNull public static android.media.MediaCodec createDecoderByType(@NonNull String) throws java.io.IOException;
+    method @NonNull public static android.media.MediaCodec createEncoderByType(@NonNull String) throws java.io.IOException;
+    method @NonNull public android.view.Surface createInputSurface();
+    method @NonNull public static android.view.Surface createPersistentInputSurface();
+    method public int dequeueInputBuffer(long);
+    method public int dequeueOutputBuffer(@NonNull android.media.MediaCodec.BufferInfo, long);
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public String getCanonicalName();
+    method @NonNull public android.media.MediaCodecInfo getCodecInfo();
+    method @Nullable public java.nio.ByteBuffer getInputBuffer(int);
+    method @Deprecated @NonNull public java.nio.ByteBuffer[] getInputBuffers();
+    method @NonNull public android.media.MediaFormat getInputFormat();
+    method @Nullable public android.media.Image getInputImage(int);
+    method public android.os.PersistableBundle getMetrics();
+    method @NonNull public String getName();
+    method @Nullable public java.nio.ByteBuffer getOutputBuffer(int);
+    method @Deprecated @NonNull public java.nio.ByteBuffer[] getOutputBuffers();
+    method @NonNull public android.media.MediaFormat getOutputFormat();
+    method @NonNull public android.media.MediaFormat getOutputFormat(int);
+    method @NonNull public android.media.MediaCodec.OutputFrame getOutputFrame(int);
+    method @Nullable public android.media.Image getOutputImage(int);
+    method @Nullable public android.media.MediaCodec.ParameterDescriptor getParameterDescriptor(@NonNull String);
+    method @NonNull public android.media.MediaCodec.QueueRequest getQueueRequest(int);
+    method @NonNull public java.util.List<java.lang.String> getSupportedVendorParameters();
+    method @Nullable public static android.media.Image mapHardwareBuffer(@NonNull android.hardware.HardwareBuffer);
+    method public void queueInputBuffer(int, int, int, long, int) throws android.media.MediaCodec.CryptoException;
+    method public void queueSecureInputBuffer(int, int, @NonNull android.media.MediaCodec.CryptoInfo, long, int) throws android.media.MediaCodec.CryptoException;
+    method public void release();
+    method public void releaseOutputBuffer(int, boolean);
+    method public void releaseOutputBuffer(int, long);
+    method public void reset();
+    method public void setAudioPresentation(@NonNull android.media.AudioPresentation);
+    method public void setCallback(@Nullable android.media.MediaCodec.Callback, @Nullable android.os.Handler);
+    method public void setCallback(@Nullable android.media.MediaCodec.Callback);
+    method public void setInputSurface(@NonNull android.view.Surface);
+    method public void setOnFirstTunnelFrameReadyListener(@Nullable android.os.Handler, @Nullable android.media.MediaCodec.OnFirstTunnelFrameReadyListener);
+    method public void setOnFrameRenderedListener(@Nullable android.media.MediaCodec.OnFrameRenderedListener, @Nullable android.os.Handler);
+    method public void setOutputSurface(@NonNull android.view.Surface);
+    method public void setParameters(@Nullable android.os.Bundle);
+    method public void setVideoScalingMode(int);
+    method public void signalEndOfInputStream();
+    method public void start();
+    method public void stop();
+    method public void subscribeToVendorParameters(@NonNull java.util.List<java.lang.String>);
+    method public void unsubscribeFromVendorParameters(@NonNull java.util.List<java.lang.String>);
+    field public static final int BUFFER_FLAG_CODEC_CONFIG = 2; // 0x2
+    field public static final int BUFFER_FLAG_END_OF_STREAM = 4; // 0x4
+    field public static final int BUFFER_FLAG_KEY_FRAME = 1; // 0x1
+    field public static final int BUFFER_FLAG_PARTIAL_FRAME = 8; // 0x8
+    field @Deprecated public static final int BUFFER_FLAG_SYNC_FRAME = 1; // 0x1
+    field public static final int CONFIGURE_FLAG_ENCODE = 1; // 0x1
+    field public static final int CONFIGURE_FLAG_USE_BLOCK_MODEL = 2; // 0x2
+    field public static final int CRYPTO_MODE_AES_CBC = 2; // 0x2
+    field public static final int CRYPTO_MODE_AES_CTR = 1; // 0x1
+    field public static final int CRYPTO_MODE_UNENCRYPTED = 0; // 0x0
+    field @Deprecated public static final int INFO_OUTPUT_BUFFERS_CHANGED = -3; // 0xfffffffd
+    field public static final int INFO_OUTPUT_FORMAT_CHANGED = -2; // 0xfffffffe
+    field public static final int INFO_TRY_AGAIN_LATER = -1; // 0xffffffff
+    field public static final String PARAMETER_KEY_HDR10_PLUS_INFO = "hdr10-plus-info";
+    field public static final String PARAMETER_KEY_LOW_LATENCY = "low-latency";
+    field public static final String PARAMETER_KEY_OFFSET_TIME = "time-offset-us";
+    field public static final String PARAMETER_KEY_REQUEST_SYNC_FRAME = "request-sync";
+    field public static final String PARAMETER_KEY_SUSPEND = "drop-input-frames";
+    field public static final String PARAMETER_KEY_SUSPEND_TIME = "drop-start-time-us";
+    field public static final String PARAMETER_KEY_TUNNEL_PEEK = "tunnel-peek";
+    field public static final String PARAMETER_KEY_VIDEO_BITRATE = "video-bitrate";
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2
+  }
+
+  public static final class MediaCodec.BufferInfo {
+    ctor public MediaCodec.BufferInfo();
+    method public void set(int, int, long, int);
+    field public int flags;
+    field public int offset;
+    field public long presentationTimeUs;
+    field public int size;
+  }
+
+  public abstract static class MediaCodec.Callback {
+    ctor public MediaCodec.Callback();
+    method public abstract void onError(@NonNull android.media.MediaCodec, @NonNull android.media.MediaCodec.CodecException);
+    method public abstract void onInputBufferAvailable(@NonNull android.media.MediaCodec, int);
+    method public abstract void onOutputBufferAvailable(@NonNull android.media.MediaCodec, int, @NonNull android.media.MediaCodec.BufferInfo);
+    method public abstract void onOutputFormatChanged(@NonNull android.media.MediaCodec, @NonNull android.media.MediaFormat);
+  }
+
+  public static final class MediaCodec.CodecException extends java.lang.IllegalStateException {
+    method @NonNull public String getDiagnosticInfo();
+    method public int getErrorCode();
+    method public boolean isRecoverable();
+    method public boolean isTransient();
+    field public static final int ERROR_INSUFFICIENT_RESOURCE = 1100; // 0x44c
+    field public static final int ERROR_RECLAIMED = 1101; // 0x44d
+  }
+
+  public static final class MediaCodec.CryptoException extends java.lang.RuntimeException {
+    ctor public MediaCodec.CryptoException(int, @Nullable String);
+    method public int getErrorCode();
+    field @Deprecated public static final int ERROR_FRAME_TOO_LARGE = 8; // 0x8
+    field @Deprecated public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4; // 0x4
+    field @Deprecated public static final int ERROR_INSUFFICIENT_SECURITY = 7; // 0x7
+    field @Deprecated public static final int ERROR_KEY_EXPIRED = 2; // 0x2
+    field @Deprecated public static final int ERROR_LOST_STATE = 9; // 0x9
+    field @Deprecated public static final int ERROR_NO_KEY = 1; // 0x1
+    field @Deprecated public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+    field @Deprecated public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
+    field @Deprecated public static final int ERROR_UNSUPPORTED_OPERATION = 6; // 0x6
+  }
+
+  public static final class MediaCodec.CryptoInfo {
+    ctor public MediaCodec.CryptoInfo();
+    method @NonNull public android.media.MediaCodec.CryptoInfo.Pattern getPattern();
+    method public void set(int, @NonNull int[], @NonNull int[], @NonNull byte[], @NonNull byte[], int);
+    method public void setPattern(android.media.MediaCodec.CryptoInfo.Pattern);
+    field public byte[] iv;
+    field public byte[] key;
+    field public int mode;
+    field public int[] numBytesOfClearData;
+    field public int[] numBytesOfEncryptedData;
+    field public int numSubSamples;
+  }
+
+  public static final class MediaCodec.CryptoInfo.Pattern {
+    ctor public MediaCodec.CryptoInfo.Pattern(int, int);
+    method public int getEncryptBlocks();
+    method public int getSkipBlocks();
+    method public void set(int, int);
+  }
+
+  public class MediaCodec.IncompatibleWithBlockModelException extends java.lang.RuntimeException {
+  }
+
+  public static final class MediaCodec.LinearBlock {
+    method protected void finalize();
+    method public static boolean isCodecCopyFreeCompatible(@NonNull String[]);
+    method public boolean isMappable();
+    method @NonNull public java.nio.ByteBuffer map();
+    method @Nullable public static android.media.MediaCodec.LinearBlock obtain(int, @NonNull String[]);
+    method public void recycle();
+  }
+
+  public static final class MediaCodec.MetricsConstants {
+    field public static final String CODEC = "android.media.mediacodec.codec";
+    field public static final String ENCODER = "android.media.mediacodec.encoder";
+    field public static final String HEIGHT = "android.media.mediacodec.height";
+    field public static final String MIME_TYPE = "android.media.mediacodec.mime";
+    field public static final String MODE = "android.media.mediacodec.mode";
+    field public static final String MODE_AUDIO = "audio";
+    field public static final String MODE_VIDEO = "video";
+    field public static final String ROTATION = "android.media.mediacodec.rotation";
+    field public static final String SECURE = "android.media.mediacodec.secure";
+    field public static final String WIDTH = "android.media.mediacodec.width";
+  }
+
+  public static interface MediaCodec.OnFirstTunnelFrameReadyListener {
+    method public void onFirstTunnelFrameReady(@NonNull android.media.MediaCodec);
+  }
+
+  public static interface MediaCodec.OnFrameRenderedListener {
+    method public void onFrameRendered(@NonNull android.media.MediaCodec, long, long);
+  }
+
+  public static final class MediaCodec.OutputFrame {
+    method @NonNull public java.util.Set<java.lang.String> getChangedKeys();
+    method public int getFlags();
+    method @NonNull public android.media.MediaFormat getFormat();
+    method @Nullable public android.hardware.HardwareBuffer getHardwareBuffer();
+    method @Nullable public android.media.MediaCodec.LinearBlock getLinearBlock();
+    method public long getPresentationTimeUs();
+  }
+
+  public static class MediaCodec.ParameterDescriptor {
+    method @NonNull public String getName();
+    method public int getType();
+  }
+
+  public final class MediaCodec.QueueRequest {
+    method public void queue();
+    method @NonNull public android.media.MediaCodec.QueueRequest setByteBufferParameter(@NonNull String, @NonNull java.nio.ByteBuffer);
+    method @NonNull public android.media.MediaCodec.QueueRequest setEncryptedLinearBlock(@NonNull android.media.MediaCodec.LinearBlock, int, int, @NonNull android.media.MediaCodec.CryptoInfo);
+    method @NonNull public android.media.MediaCodec.QueueRequest setFlags(int);
+    method @NonNull public android.media.MediaCodec.QueueRequest setFloatParameter(@NonNull String, float);
+    method @NonNull public android.media.MediaCodec.QueueRequest setHardwareBuffer(@NonNull android.hardware.HardwareBuffer);
+    method @NonNull public android.media.MediaCodec.QueueRequest setIntegerParameter(@NonNull String, int);
+    method @NonNull public android.media.MediaCodec.QueueRequest setLinearBlock(@NonNull android.media.MediaCodec.LinearBlock, int, int);
+    method @NonNull public android.media.MediaCodec.QueueRequest setLongParameter(@NonNull String, long);
+    method @NonNull public android.media.MediaCodec.QueueRequest setPresentationTimeUs(long);
+    method @NonNull public android.media.MediaCodec.QueueRequest setStringParameter(@NonNull String, @NonNull String);
+  }
+
+  public final class MediaCodecInfo {
+    method @NonNull public String getCanonicalName();
+    method public android.media.MediaCodecInfo.CodecCapabilities getCapabilitiesForType(String);
+    method @NonNull public String getName();
+    method public String[] getSupportedTypes();
+    method public boolean isAlias();
+    method public boolean isEncoder();
+    method public boolean isHardwareAccelerated();
+    method public boolean isSoftwareOnly();
+    method public boolean isVendor();
+  }
+
+  public static final class MediaCodecInfo.AudioCapabilities {
+    method public android.util.Range<java.lang.Integer> getBitrateRange();
+    method @NonNull public android.util.Range<java.lang.Integer>[] getInputChannelCountRanges();
+    method @IntRange(from=1, to=255) public int getMaxInputChannelCount();
+    method @IntRange(from=1, to=255) public int getMinInputChannelCount();
+    method public android.util.Range<java.lang.Integer>[] getSupportedSampleRateRanges();
+    method public int[] getSupportedSampleRates();
+    method public boolean isSampleRateSupported(int);
+  }
+
+  public static final class MediaCodecInfo.CodecCapabilities {
+    ctor public MediaCodecInfo.CodecCapabilities();
+    method public static android.media.MediaCodecInfo.CodecCapabilities createFromProfileLevel(String, int, int);
+    method public android.media.MediaCodecInfo.AudioCapabilities getAudioCapabilities();
+    method public android.media.MediaFormat getDefaultFormat();
+    method public android.media.MediaCodecInfo.EncoderCapabilities getEncoderCapabilities();
+    method public int getMaxSupportedInstances();
+    method public String getMimeType();
+    method public android.media.MediaCodecInfo.VideoCapabilities getVideoCapabilities();
+    method public boolean isFeatureRequired(String);
+    method public boolean isFeatureSupported(String);
+    method public boolean isFormatSupported(android.media.MediaFormat);
+    field @Deprecated public static final int COLOR_Format12bitRGB444 = 3; // 0x3
+    field @Deprecated public static final int COLOR_Format16bitARGB1555 = 5; // 0x5
+    field @Deprecated public static final int COLOR_Format16bitARGB4444 = 4; // 0x4
+    field @Deprecated public static final int COLOR_Format16bitBGR565 = 7; // 0x7
+    field public static final int COLOR_Format16bitRGB565 = 6; // 0x6
+    field @Deprecated public static final int COLOR_Format18BitBGR666 = 41; // 0x29
+    field @Deprecated public static final int COLOR_Format18bitARGB1665 = 9; // 0x9
+    field @Deprecated public static final int COLOR_Format18bitRGB666 = 8; // 0x8
+    field @Deprecated public static final int COLOR_Format19bitARGB1666 = 10; // 0xa
+    field @Deprecated public static final int COLOR_Format24BitABGR6666 = 43; // 0x2b
+    field @Deprecated public static final int COLOR_Format24BitARGB6666 = 42; // 0x2a
+    field @Deprecated public static final int COLOR_Format24bitARGB1887 = 13; // 0xd
+    field public static final int COLOR_Format24bitBGR888 = 12; // 0xc
+    field @Deprecated public static final int COLOR_Format24bitRGB888 = 11; // 0xb
+    field @Deprecated public static final int COLOR_Format25bitARGB1888 = 14; // 0xe
+    field public static final int COLOR_Format32bitABGR8888 = 2130747392; // 0x7f00a000
+    field @Deprecated public static final int COLOR_Format32bitARGB8888 = 16; // 0x10
+    field @Deprecated public static final int COLOR_Format32bitBGRA8888 = 15; // 0xf
+    field @Deprecated public static final int COLOR_Format8bitRGB332 = 2; // 0x2
+    field @Deprecated public static final int COLOR_FormatCbYCrY = 27; // 0x1b
+    field @Deprecated public static final int COLOR_FormatCrYCbY = 28; // 0x1c
+    field public static final int COLOR_FormatL16 = 36; // 0x24
+    field @Deprecated public static final int COLOR_FormatL2 = 33; // 0x21
+    field @Deprecated public static final int COLOR_FormatL24 = 37; // 0x25
+    field @Deprecated public static final int COLOR_FormatL32 = 38; // 0x26
+    field @Deprecated public static final int COLOR_FormatL4 = 34; // 0x22
+    field public static final int COLOR_FormatL8 = 35; // 0x23
+    field @Deprecated public static final int COLOR_FormatMonochrome = 1; // 0x1
+    field public static final int COLOR_FormatRGBAFlexible = 2134288520; // 0x7f36a888
+    field public static final int COLOR_FormatRGBFlexible = 2134292616; // 0x7f36b888
+    field public static final int COLOR_FormatRawBayer10bit = 31; // 0x1f
+    field public static final int COLOR_FormatRawBayer8bit = 30; // 0x1e
+    field public static final int COLOR_FormatRawBayer8bitcompressed = 32; // 0x20
+    field public static final int COLOR_FormatSurface = 2130708361; // 0x7f000789
+    field @Deprecated public static final int COLOR_FormatYCbYCr = 25; // 0x19
+    field @Deprecated public static final int COLOR_FormatYCrYCb = 26; // 0x1a
+    field @Deprecated public static final int COLOR_FormatYUV411PackedPlanar = 18; // 0x12
+    field @Deprecated public static final int COLOR_FormatYUV411Planar = 17; // 0x11
+    field public static final int COLOR_FormatYUV420Flexible = 2135033992; // 0x7f420888
+    field @Deprecated public static final int COLOR_FormatYUV420PackedPlanar = 20; // 0x14
+    field @Deprecated public static final int COLOR_FormatYUV420PackedSemiPlanar = 39; // 0x27
+    field @Deprecated public static final int COLOR_FormatYUV420Planar = 19; // 0x13
+    field @Deprecated public static final int COLOR_FormatYUV420SemiPlanar = 21; // 0x15
+    field public static final int COLOR_FormatYUV422Flexible = 2135042184; // 0x7f422888
+    field @Deprecated public static final int COLOR_FormatYUV422PackedPlanar = 23; // 0x17
+    field @Deprecated public static final int COLOR_FormatYUV422PackedSemiPlanar = 40; // 0x28
+    field @Deprecated public static final int COLOR_FormatYUV422Planar = 22; // 0x16
+    field @Deprecated public static final int COLOR_FormatYUV422SemiPlanar = 24; // 0x18
+    field public static final int COLOR_FormatYUV444Flexible = 2135181448; // 0x7f444888
+    field @Deprecated public static final int COLOR_FormatYUV444Interleaved = 29; // 0x1d
+    field @Deprecated public static final int COLOR_QCOM_FormatYUV420SemiPlanar = 2141391872; // 0x7fa30c00
+    field @Deprecated public static final int COLOR_TI_FormatYUV420PackedSemiPlanar = 2130706688; // 0x7f000100
+    field public static final String FEATURE_AdaptivePlayback = "adaptive-playback";
+    field public static final String FEATURE_DynamicTimestamp = "dynamic-timestamp";
+    field public static final String FEATURE_FrameParsing = "frame-parsing";
+    field public static final String FEATURE_IntraRefresh = "intra-refresh";
+    field public static final String FEATURE_LowLatency = "low-latency";
+    field public static final String FEATURE_MultipleFrames = "multiple-frames";
+    field public static final String FEATURE_PartialFrame = "partial-frame";
+    field public static final String FEATURE_QpBounds = "qp-bounds";
+    field public static final String FEATURE_SecurePlayback = "secure-playback";
+    field public static final String FEATURE_TunneledPlayback = "tunneled-playback";
+    field public int[] colorFormats;
+    field public android.media.MediaCodecInfo.CodecProfileLevel[] profileLevels;
+  }
+
+  public static final class MediaCodecInfo.CodecProfileLevel {
+    ctor public MediaCodecInfo.CodecProfileLevel();
+    field public static final int AACObjectELD = 39; // 0x27
+    field public static final int AACObjectERLC = 17; // 0x11
+    field public static final int AACObjectERScalable = 20; // 0x14
+    field public static final int AACObjectHE = 5; // 0x5
+    field public static final int AACObjectHE_PS = 29; // 0x1d
+    field public static final int AACObjectLC = 2; // 0x2
+    field public static final int AACObjectLD = 23; // 0x17
+    field public static final int AACObjectLTP = 4; // 0x4
+    field public static final int AACObjectMain = 1; // 0x1
+    field public static final int AACObjectSSR = 3; // 0x3
+    field public static final int AACObjectScalable = 6; // 0x6
+    field public static final int AACObjectXHE = 42; // 0x2a
+    field public static final int AV1Level2 = 1; // 0x1
+    field public static final int AV1Level21 = 2; // 0x2
+    field public static final int AV1Level22 = 4; // 0x4
+    field public static final int AV1Level23 = 8; // 0x8
+    field public static final int AV1Level3 = 16; // 0x10
+    field public static final int AV1Level31 = 32; // 0x20
+    field public static final int AV1Level32 = 64; // 0x40
+    field public static final int AV1Level33 = 128; // 0x80
+    field public static final int AV1Level4 = 256; // 0x100
+    field public static final int AV1Level41 = 512; // 0x200
+    field public static final int AV1Level42 = 1024; // 0x400
+    field public static final int AV1Level43 = 2048; // 0x800
+    field public static final int AV1Level5 = 4096; // 0x1000
+    field public static final int AV1Level51 = 8192; // 0x2000
+    field public static final int AV1Level52 = 16384; // 0x4000
+    field public static final int AV1Level53 = 32768; // 0x8000
+    field public static final int AV1Level6 = 65536; // 0x10000
+    field public static final int AV1Level61 = 131072; // 0x20000
+    field public static final int AV1Level62 = 262144; // 0x40000
+    field public static final int AV1Level63 = 524288; // 0x80000
+    field public static final int AV1Level7 = 1048576; // 0x100000
+    field public static final int AV1Level71 = 2097152; // 0x200000
+    field public static final int AV1Level72 = 4194304; // 0x400000
+    field public static final int AV1Level73 = 8388608; // 0x800000
+    field public static final int AV1ProfileMain10 = 2; // 0x2
+    field public static final int AV1ProfileMain10HDR10 = 4096; // 0x1000
+    field public static final int AV1ProfileMain10HDR10Plus = 8192; // 0x2000
+    field public static final int AV1ProfileMain8 = 1; // 0x1
+    field public static final int AVCLevel1 = 1; // 0x1
+    field public static final int AVCLevel11 = 4; // 0x4
+    field public static final int AVCLevel12 = 8; // 0x8
+    field public static final int AVCLevel13 = 16; // 0x10
+    field public static final int AVCLevel1b = 2; // 0x2
+    field public static final int AVCLevel2 = 32; // 0x20
+    field public static final int AVCLevel21 = 64; // 0x40
+    field public static final int AVCLevel22 = 128; // 0x80
+    field public static final int AVCLevel3 = 256; // 0x100
+    field public static final int AVCLevel31 = 512; // 0x200
+    field public static final int AVCLevel32 = 1024; // 0x400
+    field public static final int AVCLevel4 = 2048; // 0x800
+    field public static final int AVCLevel41 = 4096; // 0x1000
+    field public static final int AVCLevel42 = 8192; // 0x2000
+    field public static final int AVCLevel5 = 16384; // 0x4000
+    field public static final int AVCLevel51 = 32768; // 0x8000
+    field public static final int AVCLevel52 = 65536; // 0x10000
+    field public static final int AVCLevel6 = 131072; // 0x20000
+    field public static final int AVCLevel61 = 262144; // 0x40000
+    field public static final int AVCLevel62 = 524288; // 0x80000
+    field public static final int AVCProfileBaseline = 1; // 0x1
+    field public static final int AVCProfileConstrainedBaseline = 65536; // 0x10000
+    field public static final int AVCProfileConstrainedHigh = 524288; // 0x80000
+    field public static final int AVCProfileExtended = 4; // 0x4
+    field public static final int AVCProfileHigh = 8; // 0x8
+    field public static final int AVCProfileHigh10 = 16; // 0x10
+    field public static final int AVCProfileHigh422 = 32; // 0x20
+    field public static final int AVCProfileHigh444 = 64; // 0x40
+    field public static final int AVCProfileMain = 2; // 0x2
+    field public static final int DolbyVisionLevelFhd24 = 4; // 0x4
+    field public static final int DolbyVisionLevelFhd30 = 8; // 0x8
+    field public static final int DolbyVisionLevelFhd60 = 16; // 0x10
+    field public static final int DolbyVisionLevelHd24 = 1; // 0x1
+    field public static final int DolbyVisionLevelHd30 = 2; // 0x2
+    field public static final int DolbyVisionLevelUhd24 = 32; // 0x20
+    field public static final int DolbyVisionLevelUhd30 = 64; // 0x40
+    field public static final int DolbyVisionLevelUhd48 = 128; // 0x80
+    field public static final int DolbyVisionLevelUhd60 = 256; // 0x100
+    field public static final int DolbyVisionProfileDvav110 = 1024; // 0x400
+    field public static final int DolbyVisionProfileDvavPen = 2; // 0x2
+    field public static final int DolbyVisionProfileDvavPer = 1; // 0x1
+    field public static final int DolbyVisionProfileDvavSe = 512; // 0x200
+    field public static final int DolbyVisionProfileDvheDen = 8; // 0x8
+    field public static final int DolbyVisionProfileDvheDer = 4; // 0x4
+    field public static final int DolbyVisionProfileDvheDtb = 128; // 0x80
+    field public static final int DolbyVisionProfileDvheDth = 64; // 0x40
+    field public static final int DolbyVisionProfileDvheDtr = 16; // 0x10
+    field public static final int DolbyVisionProfileDvheSt = 256; // 0x100
+    field public static final int DolbyVisionProfileDvheStn = 32; // 0x20
+    field public static final int H263Level10 = 1; // 0x1
+    field public static final int H263Level20 = 2; // 0x2
+    field public static final int H263Level30 = 4; // 0x4
+    field public static final int H263Level40 = 8; // 0x8
+    field public static final int H263Level45 = 16; // 0x10
+    field public static final int H263Level50 = 32; // 0x20
+    field public static final int H263Level60 = 64; // 0x40
+    field public static final int H263Level70 = 128; // 0x80
+    field public static final int H263ProfileBackwardCompatible = 4; // 0x4
+    field public static final int H263ProfileBaseline = 1; // 0x1
+    field public static final int H263ProfileH320Coding = 2; // 0x2
+    field public static final int H263ProfileHighCompression = 32; // 0x20
+    field public static final int H263ProfileHighLatency = 256; // 0x100
+    field public static final int H263ProfileISWV2 = 8; // 0x8
+    field public static final int H263ProfileISWV3 = 16; // 0x10
+    field public static final int H263ProfileInterlace = 128; // 0x80
+    field public static final int H263ProfileInternet = 64; // 0x40
+    field public static final int HEVCHighTierLevel1 = 2; // 0x2
+    field public static final int HEVCHighTierLevel2 = 8; // 0x8
+    field public static final int HEVCHighTierLevel21 = 32; // 0x20
+    field public static final int HEVCHighTierLevel3 = 128; // 0x80
+    field public static final int HEVCHighTierLevel31 = 512; // 0x200
+    field public static final int HEVCHighTierLevel4 = 2048; // 0x800
+    field public static final int HEVCHighTierLevel41 = 8192; // 0x2000
+    field public static final int HEVCHighTierLevel5 = 32768; // 0x8000
+    field public static final int HEVCHighTierLevel51 = 131072; // 0x20000
+    field public static final int HEVCHighTierLevel52 = 524288; // 0x80000
+    field public static final int HEVCHighTierLevel6 = 2097152; // 0x200000
+    field public static final int HEVCHighTierLevel61 = 8388608; // 0x800000
+    field public static final int HEVCHighTierLevel62 = 33554432; // 0x2000000
+    field public static final int HEVCMainTierLevel1 = 1; // 0x1
+    field public static final int HEVCMainTierLevel2 = 4; // 0x4
+    field public static final int HEVCMainTierLevel21 = 16; // 0x10
+    field public static final int HEVCMainTierLevel3 = 64; // 0x40
+    field public static final int HEVCMainTierLevel31 = 256; // 0x100
+    field public static final int HEVCMainTierLevel4 = 1024; // 0x400
+    field public static final int HEVCMainTierLevel41 = 4096; // 0x1000
+    field public static final int HEVCMainTierLevel5 = 16384; // 0x4000
+    field public static final int HEVCMainTierLevel51 = 65536; // 0x10000
+    field public static final int HEVCMainTierLevel52 = 262144; // 0x40000
+    field public static final int HEVCMainTierLevel6 = 1048576; // 0x100000
+    field public static final int HEVCMainTierLevel61 = 4194304; // 0x400000
+    field public static final int HEVCMainTierLevel62 = 16777216; // 0x1000000
+    field public static final int HEVCProfileMain = 1; // 0x1
+    field public static final int HEVCProfileMain10 = 2; // 0x2
+    field public static final int HEVCProfileMain10HDR10 = 4096; // 0x1000
+    field public static final int HEVCProfileMain10HDR10Plus = 8192; // 0x2000
+    field public static final int HEVCProfileMainStill = 4; // 0x4
+    field public static final int MPEG2LevelH14 = 2; // 0x2
+    field public static final int MPEG2LevelHL = 3; // 0x3
+    field public static final int MPEG2LevelHP = 4; // 0x4
+    field public static final int MPEG2LevelLL = 0; // 0x0
+    field public static final int MPEG2LevelML = 1; // 0x1
+    field public static final int MPEG2Profile422 = 2; // 0x2
+    field public static final int MPEG2ProfileHigh = 5; // 0x5
+    field public static final int MPEG2ProfileMain = 1; // 0x1
+    field public static final int MPEG2ProfileSNR = 3; // 0x3
+    field public static final int MPEG2ProfileSimple = 0; // 0x0
+    field public static final int MPEG2ProfileSpatial = 4; // 0x4
+    field public static final int MPEG4Level0 = 1; // 0x1
+    field public static final int MPEG4Level0b = 2; // 0x2
+    field public static final int MPEG4Level1 = 4; // 0x4
+    field public static final int MPEG4Level2 = 8; // 0x8
+    field public static final int MPEG4Level3 = 16; // 0x10
+    field public static final int MPEG4Level3b = 24; // 0x18
+    field public static final int MPEG4Level4 = 32; // 0x20
+    field public static final int MPEG4Level4a = 64; // 0x40
+    field public static final int MPEG4Level5 = 128; // 0x80
+    field public static final int MPEG4Level6 = 256; // 0x100
+    field public static final int MPEG4ProfileAdvancedCoding = 4096; // 0x1000
+    field public static final int MPEG4ProfileAdvancedCore = 8192; // 0x2000
+    field public static final int MPEG4ProfileAdvancedRealTime = 1024; // 0x400
+    field public static final int MPEG4ProfileAdvancedScalable = 16384; // 0x4000
+    field public static final int MPEG4ProfileAdvancedSimple = 32768; // 0x8000
+    field public static final int MPEG4ProfileBasicAnimated = 256; // 0x100
+    field public static final int MPEG4ProfileCore = 4; // 0x4
+    field public static final int MPEG4ProfileCoreScalable = 2048; // 0x800
+    field public static final int MPEG4ProfileHybrid = 512; // 0x200
+    field public static final int MPEG4ProfileMain = 8; // 0x8
+    field public static final int MPEG4ProfileNbit = 16; // 0x10
+    field public static final int MPEG4ProfileScalableTexture = 32; // 0x20
+    field public static final int MPEG4ProfileSimple = 1; // 0x1
+    field public static final int MPEG4ProfileSimpleFBA = 128; // 0x80
+    field public static final int MPEG4ProfileSimpleFace = 64; // 0x40
+    field public static final int MPEG4ProfileSimpleScalable = 2; // 0x2
+    field public static final int VP8Level_Version0 = 1; // 0x1
+    field public static final int VP8Level_Version1 = 2; // 0x2
+    field public static final int VP8Level_Version2 = 4; // 0x4
+    field public static final int VP8Level_Version3 = 8; // 0x8
+    field public static final int VP8ProfileMain = 1; // 0x1
+    field public static final int VP9Level1 = 1; // 0x1
+    field public static final int VP9Level11 = 2; // 0x2
+    field public static final int VP9Level2 = 4; // 0x4
+    field public static final int VP9Level21 = 8; // 0x8
+    field public static final int VP9Level3 = 16; // 0x10
+    field public static final int VP9Level31 = 32; // 0x20
+    field public static final int VP9Level4 = 64; // 0x40
+    field public static final int VP9Level41 = 128; // 0x80
+    field public static final int VP9Level5 = 256; // 0x100
+    field public static final int VP9Level51 = 512; // 0x200
+    field public static final int VP9Level52 = 1024; // 0x400
+    field public static final int VP9Level6 = 2048; // 0x800
+    field public static final int VP9Level61 = 4096; // 0x1000
+    field public static final int VP9Level62 = 8192; // 0x2000
+    field public static final int VP9Profile0 = 1; // 0x1
+    field public static final int VP9Profile1 = 2; // 0x2
+    field public static final int VP9Profile2 = 4; // 0x4
+    field public static final int VP9Profile2HDR = 4096; // 0x1000
+    field public static final int VP9Profile2HDR10Plus = 16384; // 0x4000
+    field public static final int VP9Profile3 = 8; // 0x8
+    field public static final int VP9Profile3HDR = 8192; // 0x2000
+    field public static final int VP9Profile3HDR10Plus = 32768; // 0x8000
+    field public int level;
+    field public int profile;
+  }
+
+  public static final class MediaCodecInfo.EncoderCapabilities {
+    method public android.util.Range<java.lang.Integer> getComplexityRange();
+    method public android.util.Range<java.lang.Integer> getQualityRange();
+    method public boolean isBitrateModeSupported(int);
+    field public static final int BITRATE_MODE_CBR = 2; // 0x2
+    field public static final int BITRATE_MODE_CBR_FD = 3; // 0x3
+    field public static final int BITRATE_MODE_CQ = 0; // 0x0
+    field public static final int BITRATE_MODE_VBR = 1; // 0x1
+  }
+
+  public static final class MediaCodecInfo.VideoCapabilities {
+    method public boolean areSizeAndRateSupported(int, int, double);
+    method @Nullable public android.util.Range<java.lang.Double> getAchievableFrameRatesFor(int, int);
+    method public android.util.Range<java.lang.Integer> getBitrateRange();
+    method public int getHeightAlignment();
+    method public android.util.Range<java.lang.Integer> getSupportedFrameRates();
+    method public android.util.Range<java.lang.Double> getSupportedFrameRatesFor(int, int);
+    method public android.util.Range<java.lang.Integer> getSupportedHeights();
+    method public android.util.Range<java.lang.Integer> getSupportedHeightsFor(int);
+    method @Nullable public java.util.List<android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint> getSupportedPerformancePoints();
+    method public android.util.Range<java.lang.Integer> getSupportedWidths();
+    method public android.util.Range<java.lang.Integer> getSupportedWidthsFor(int);
+    method public int getWidthAlignment();
+    method public boolean isSizeSupported(int, int);
+  }
+
+  public static final class MediaCodecInfo.VideoCapabilities.PerformancePoint {
+    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(int, int, int);
+    method public boolean covers(@NonNull android.media.MediaFormat);
+    method public boolean covers(@NonNull android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint);
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_100;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_120;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_200;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_240;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint FHD_60;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_100;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_120;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_200;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_240;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint HD_60;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_48;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint SD_60;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_100;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_120;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_200;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_24;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_240;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_25;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_30;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_50;
+    field @NonNull public static final android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint UHD_60;
+  }
+
+  public final class MediaCodecList {
+    ctor public MediaCodecList(int);
+    method public String findDecoderForFormat(android.media.MediaFormat);
+    method public String findEncoderForFormat(android.media.MediaFormat);
+    method @Deprecated public static int getCodecCount();
+    method @Deprecated public static android.media.MediaCodecInfo getCodecInfoAt(int);
+    method public android.media.MediaCodecInfo[] getCodecInfos();
+    field public static final int ALL_CODECS = 1; // 0x1
+    field public static final int REGULAR_CODECS = 0; // 0x0
+  }
+
+  public class MediaCommunicationManager {
+    method @NonNull public java.util.List<android.media.Session2Token> getSession2Tokens();
+    method @IntRange(from=1) public int getVersion();
+  }
+
+  public class MediaController2 implements java.lang.AutoCloseable {
+    method public void cancelSessionCommand(@NonNull Object);
+    method public void close();
+    method @Nullable public android.media.Session2Token getConnectedToken();
+    method public boolean isPlaybackActive();
+    method @NonNull public Object sendSessionCommand(@NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+  }
+
+  public static final class MediaController2.Builder {
+    ctor public MediaController2.Builder(@NonNull android.content.Context, @NonNull android.media.Session2Token);
+    method @NonNull public android.media.MediaController2 build();
+    method @NonNull public android.media.MediaController2.Builder setConnectionHints(@NonNull android.os.Bundle);
+    method @NonNull public android.media.MediaController2.Builder setControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaController2.ControllerCallback);
+  }
+
+  public abstract static class MediaController2.ControllerCallback {
+    ctor public MediaController2.ControllerCallback();
+    method public void onCommandResult(@NonNull android.media.MediaController2, @NonNull Object, @NonNull android.media.Session2Command, @NonNull android.media.Session2Command.Result);
+    method public void onConnected(@NonNull android.media.MediaController2, @NonNull android.media.Session2CommandGroup);
+    method public void onDisconnected(@NonNull android.media.MediaController2);
+    method public void onPlaybackActiveChanged(@NonNull android.media.MediaController2, boolean);
+    method @Nullable public android.media.Session2Command.Result onSessionCommand(@NonNull android.media.MediaController2, @NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+  }
+
+  public final class MediaCrypto {
+    ctor public MediaCrypto(@NonNull java.util.UUID, @NonNull byte[]) throws android.media.MediaCryptoException;
+    method protected void finalize();
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID);
+    method public void release();
+    method public boolean requiresSecureDecoderComponent(@NonNull String);
+    method public void setMediaDrmSession(@NonNull byte[]) throws android.media.MediaCryptoException;
+  }
+
+  public final class MediaCryptoException extends java.lang.Exception {
+    ctor public MediaCryptoException(@Nullable String);
+  }
+
+  public abstract class MediaDataSource implements java.io.Closeable {
+    ctor public MediaDataSource();
+    method public abstract long getSize() throws java.io.IOException;
+    method public abstract int readAt(long, byte[], int, int) throws java.io.IOException;
+  }
+
+  public final class MediaDescrambler implements java.lang.AutoCloseable {
+    ctor public MediaDescrambler(int) throws android.media.MediaCasException.UnsupportedCasException;
+    method public void close();
+    method public int descramble(@NonNull java.nio.ByteBuffer, @NonNull java.nio.ByteBuffer, @NonNull android.media.MediaCodec.CryptoInfo);
+    method protected void finalize();
+    method public boolean requiresSecureDecoderComponent(@NonNull String);
+    method public void setMediaCasSession(@NonNull android.media.MediaCas.Session);
+    field public static final byte SCRAMBLE_CONTROL_EVEN_KEY = 2; // 0x2
+    field public static final byte SCRAMBLE_CONTROL_ODD_KEY = 3; // 0x3
+    field public static final byte SCRAMBLE_CONTROL_RESERVED = 1; // 0x1
+    field public static final byte SCRAMBLE_CONTROL_UNSCRAMBLED = 0; // 0x0
+    field public static final byte SCRAMBLE_FLAG_PES_HEADER = 1; // 0x1
+  }
+
+  public class MediaDescription implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.Bitmap getIconBitmap();
+    method @Nullable public android.net.Uri getIconUri();
+    method @Nullable public String getMediaId();
+    method @Nullable public android.net.Uri getMediaUri();
+    method @Nullable public CharSequence getSubtitle();
+    method @Nullable public CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long BT_FOLDER_TYPE_ALBUMS = 2L; // 0x2L
+    field public static final long BT_FOLDER_TYPE_ARTISTS = 3L; // 0x3L
+    field public static final long BT_FOLDER_TYPE_GENRES = 4L; // 0x4L
+    field public static final long BT_FOLDER_TYPE_MIXED = 0L; // 0x0L
+    field public static final long BT_FOLDER_TYPE_PLAYLISTS = 5L; // 0x5L
+    field public static final long BT_FOLDER_TYPE_TITLES = 1L; // 0x1L
+    field public static final long BT_FOLDER_TYPE_YEARS = 6L; // 0x6L
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaDescription> CREATOR;
+    field public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE";
+  }
+
+  public static class MediaDescription.Builder {
+    ctor public MediaDescription.Builder();
+    method public android.media.MediaDescription build();
+    method public android.media.MediaDescription.Builder setDescription(@Nullable CharSequence);
+    method public android.media.MediaDescription.Builder setExtras(@Nullable android.os.Bundle);
+    method public android.media.MediaDescription.Builder setIconBitmap(@Nullable android.graphics.Bitmap);
+    method public android.media.MediaDescription.Builder setIconUri(@Nullable android.net.Uri);
+    method public android.media.MediaDescription.Builder setMediaId(@Nullable String);
+    method public android.media.MediaDescription.Builder setMediaUri(@Nullable android.net.Uri);
+    method public android.media.MediaDescription.Builder setSubtitle(@Nullable CharSequence);
+    method public android.media.MediaDescription.Builder setTitle(@Nullable CharSequence);
+  }
+
+  public final class MediaDrm implements java.lang.AutoCloseable {
+    ctor public MediaDrm(@NonNull java.util.UUID) throws android.media.UnsupportedSchemeException;
+    method public void clearOnEventListener();
+    method public void clearOnExpirationUpdateListener();
+    method public void clearOnKeyStatusChangeListener();
+    method public void clearOnSessionLostStateListener();
+    method public void close();
+    method public void closeSession(@NonNull byte[]);
+    method @android.media.MediaDrm.HdcpLevel public int getConnectedHdcpLevel();
+    method public android.media.MediaDrm.CryptoSession getCryptoSession(@NonNull byte[], @NonNull String, @NonNull String);
+    method @NonNull public android.media.MediaDrm.KeyRequest getKeyRequest(@NonNull byte[], @Nullable byte[], @Nullable String, int, @Nullable java.util.HashMap<java.lang.String,java.lang.String>) throws android.media.NotProvisionedException;
+    method @NonNull public java.util.List<android.media.MediaDrm.LogMessage> getLogMessages();
+    method @android.media.MediaDrm.HdcpLevel public int getMaxHdcpLevel();
+    method public static int getMaxSecurityLevel();
+    method public int getMaxSessionCount();
+    method public android.os.PersistableBundle getMetrics();
+    method @NonNull public java.util.List<byte[]> getOfflineLicenseKeySetIds();
+    method public int getOfflineLicenseState(@NonNull byte[]);
+    method public int getOpenSessionCount();
+    method @Nullable public android.media.MediaDrm.PlaybackComponent getPlaybackComponent(@NonNull byte[]);
+    method @NonNull public byte[] getPropertyByteArray(String);
+    method @NonNull public String getPropertyString(@NonNull String);
+    method @NonNull public android.media.MediaDrm.ProvisionRequest getProvisionRequest();
+    method @NonNull public byte[] getSecureStop(@NonNull byte[]);
+    method @NonNull public java.util.List<byte[]> getSecureStopIds();
+    method @NonNull public java.util.List<byte[]> getSecureStops();
+    method @android.media.MediaDrm.SecurityLevel public int getSecurityLevel(@NonNull byte[]);
+    method @NonNull public static java.util.List<java.util.UUID> getSupportedCryptoSchemes();
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID);
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID, @NonNull String);
+    method public static boolean isCryptoSchemeSupported(@NonNull java.util.UUID, @NonNull String, @android.media.MediaDrm.SecurityLevel int);
+    method @NonNull public byte[] openSession() throws android.media.NotProvisionedException, android.media.ResourceBusyException;
+    method @NonNull public byte[] openSession(@android.media.MediaDrm.SecurityLevel int) throws android.media.NotProvisionedException, android.media.ResourceBusyException;
+    method @Nullable public byte[] provideKeyResponse(@NonNull byte[], @NonNull byte[]) throws android.media.DeniedByServerException, android.media.NotProvisionedException;
+    method public void provideProvisionResponse(@NonNull byte[]) throws android.media.DeniedByServerException;
+    method @NonNull public java.util.HashMap<java.lang.String,java.lang.String> queryKeyStatus(@NonNull byte[]);
+    method @Deprecated public void release();
+    method @Deprecated public void releaseAllSecureStops();
+    method public void releaseSecureStops(@NonNull byte[]);
+    method public void removeAllSecureStops();
+    method public void removeKeys(@NonNull byte[]);
+    method public void removeOfflineLicense(@NonNull byte[]);
+    method public void removeSecureStop(@NonNull byte[]);
+    method public boolean requiresSecureDecoder(@NonNull String);
+    method public boolean requiresSecureDecoder(@NonNull String, @android.media.MediaDrm.SecurityLevel int);
+    method public void restoreKeys(@NonNull byte[], @NonNull byte[]);
+    method public void setOnEventListener(@Nullable android.media.MediaDrm.OnEventListener);
+    method public void setOnEventListener(@Nullable android.media.MediaDrm.OnEventListener, @Nullable android.os.Handler);
+    method public void setOnEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaDrm.OnEventListener);
+    method public void setOnExpirationUpdateListener(@Nullable android.media.MediaDrm.OnExpirationUpdateListener, @Nullable android.os.Handler);
+    method public void setOnExpirationUpdateListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaDrm.OnExpirationUpdateListener);
+    method public void setOnKeyStatusChangeListener(@Nullable android.media.MediaDrm.OnKeyStatusChangeListener, @Nullable android.os.Handler);
+    method public void setOnKeyStatusChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaDrm.OnKeyStatusChangeListener);
+    method public void setOnSessionLostStateListener(@Nullable android.media.MediaDrm.OnSessionLostStateListener, @Nullable android.os.Handler);
+    method public void setOnSessionLostStateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaDrm.OnSessionLostStateListener);
+    method public void setPropertyByteArray(@NonNull String, @NonNull byte[]);
+    method public void setPropertyString(@NonNull String, @NonNull String);
+    field @Deprecated public static final int EVENT_KEY_EXPIRED = 3; // 0x3
+    field public static final int EVENT_KEY_REQUIRED = 2; // 0x2
+    field @Deprecated public static final int EVENT_PROVISION_REQUIRED = 1; // 0x1
+    field public static final int EVENT_SESSION_RECLAIMED = 5; // 0x5
+    field public static final int EVENT_VENDOR_DEFINED = 4; // 0x4
+    field public static final int HDCP_LEVEL_UNKNOWN = 0; // 0x0
+    field public static final int HDCP_NONE = 1; // 0x1
+    field public static final int HDCP_NO_DIGITAL_OUTPUT = 2147483647; // 0x7fffffff
+    field public static final int HDCP_V1 = 2; // 0x2
+    field public static final int HDCP_V2 = 3; // 0x3
+    field public static final int HDCP_V2_1 = 4; // 0x4
+    field public static final int HDCP_V2_2 = 5; // 0x5
+    field public static final int HDCP_V2_3 = 6; // 0x6
+    field public static final int KEY_TYPE_OFFLINE = 2; // 0x2
+    field public static final int KEY_TYPE_RELEASE = 3; // 0x3
+    field public static final int KEY_TYPE_STREAMING = 1; // 0x1
+    field public static final int OFFLINE_LICENSE_STATE_RELEASED = 2; // 0x2
+    field public static final int OFFLINE_LICENSE_STATE_UNKNOWN = 0; // 0x0
+    field public static final int OFFLINE_LICENSE_STATE_USABLE = 1; // 0x1
+    field public static final String PROPERTY_ALGORITHMS = "algorithms";
+    field public static final String PROPERTY_DESCRIPTION = "description";
+    field public static final String PROPERTY_DEVICE_UNIQUE_ID = "deviceUniqueId";
+    field public static final String PROPERTY_VENDOR = "vendor";
+    field public static final String PROPERTY_VERSION = "version";
+    field public static final int SECURITY_LEVEL_HW_SECURE_ALL = 5; // 0x5
+    field public static final int SECURITY_LEVEL_HW_SECURE_CRYPTO = 3; // 0x3
+    field public static final int SECURITY_LEVEL_HW_SECURE_DECODE = 4; // 0x4
+    field public static final int SECURITY_LEVEL_SW_SECURE_CRYPTO = 1; // 0x1
+    field public static final int SECURITY_LEVEL_SW_SECURE_DECODE = 2; // 0x2
+    field public static final int SECURITY_LEVEL_UNKNOWN = 0; // 0x0
+  }
+
+  public final class MediaDrm.CryptoSession {
+    method @NonNull public byte[] decrypt(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+    method @NonNull public byte[] encrypt(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+    method @NonNull public byte[] sign(@NonNull byte[], @NonNull byte[]);
+    method public boolean verify(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+  }
+
+  public static final class MediaDrm.ErrorCodes {
+    field public static final int ERROR_CERTIFICATE_MALFORMED = 10; // 0xa
+    field public static final int ERROR_CERTIFICATE_MISSING = 11; // 0xb
+    field public static final int ERROR_CRYPTO_LIBRARY = 12; // 0xc
+    field public static final int ERROR_FRAME_TOO_LARGE = 8; // 0x8
+    field public static final int ERROR_GENERIC_OEM = 13; // 0xd
+    field public static final int ERROR_GENERIC_PLUGIN = 14; // 0xe
+    field public static final int ERROR_INIT_DATA = 15; // 0xf
+    field public static final int ERROR_INSUFFICIENT_OUTPUT_PROTECTION = 4; // 0x4
+    field public static final int ERROR_INSUFFICIENT_SECURITY = 7; // 0x7
+    field public static final int ERROR_KEY_EXPIRED = 2; // 0x2
+    field public static final int ERROR_KEY_NOT_LOADED = 16; // 0x10
+    field public static final int ERROR_LICENSE_PARSE = 17; // 0x11
+    field public static final int ERROR_LICENSE_POLICY = 18; // 0x12
+    field public static final int ERROR_LICENSE_RELEASE = 19; // 0x13
+    field public static final int ERROR_LICENSE_REQUEST_REJECTED = 20; // 0x14
+    field public static final int ERROR_LICENSE_RESTORE = 21; // 0x15
+    field public static final int ERROR_LICENSE_STATE = 22; // 0x16
+    field public static final int ERROR_LOST_STATE = 9; // 0x9
+    field public static final int ERROR_MEDIA_FRAMEWORK = 23; // 0x17
+    field public static final int ERROR_NO_KEY = 1; // 0x1
+    field public static final int ERROR_PROVISIONING_CERTIFICATE = 24; // 0x18
+    field public static final int ERROR_PROVISIONING_CONFIG = 25; // 0x19
+    field public static final int ERROR_PROVISIONING_PARSE = 26; // 0x1a
+    field public static final int ERROR_PROVISIONING_REQUEST_REJECTED = 27; // 0x1b
+    field public static final int ERROR_PROVISIONING_RETRY = 28; // 0x1c
+    field public static final int ERROR_RESOURCE_BUSY = 3; // 0x3
+    field public static final int ERROR_RESOURCE_CONTENTION = 29; // 0x1d
+    field public static final int ERROR_SECURE_STOP_RELEASE = 30; // 0x1e
+    field public static final int ERROR_SESSION_NOT_OPENED = 5; // 0x5
+    field public static final int ERROR_STORAGE_READ = 31; // 0x1f
+    field public static final int ERROR_STORAGE_WRITE = 32; // 0x20
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int ERROR_UNSUPPORTED_OPERATION = 6; // 0x6
+    field public static final int ERROR_ZERO_SUBSAMPLES = 33; // 0x21
+  }
+
+  @Deprecated @IntDef({android.media.MediaDrm.HDCP_LEVEL_UNKNOWN, android.media.MediaDrm.HDCP_NONE, android.media.MediaDrm.HDCP_V1, android.media.MediaDrm.HDCP_V2, android.media.MediaDrm.HDCP_V2_1, android.media.MediaDrm.HDCP_V2_2, android.media.MediaDrm.HDCP_V2_3, android.media.MediaDrm.HDCP_NO_DIGITAL_OUTPUT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaDrm.HdcpLevel {
+  }
+
+  public static final class MediaDrm.KeyRequest {
+    method @NonNull public byte[] getData();
+    method @NonNull public String getDefaultUrl();
+    method public int getRequestType();
+    field public static final int REQUEST_TYPE_INITIAL = 0; // 0x0
+    field public static final int REQUEST_TYPE_NONE = 3; // 0x3
+    field public static final int REQUEST_TYPE_RELEASE = 2; // 0x2
+    field public static final int REQUEST_TYPE_RENEWAL = 1; // 0x1
+    field public static final int REQUEST_TYPE_UPDATE = 4; // 0x4
+  }
+
+  public static final class MediaDrm.KeyStatus {
+    method @NonNull public byte[] getKeyId();
+    method public int getStatusCode();
+    field public static final int STATUS_EXPIRED = 1; // 0x1
+    field public static final int STATUS_INTERNAL_ERROR = 4; // 0x4
+    field public static final int STATUS_OUTPUT_NOT_ALLOWED = 2; // 0x2
+    field public static final int STATUS_PENDING = 3; // 0x3
+    field public static final int STATUS_USABLE = 0; // 0x0
+    field public static final int STATUS_USABLE_IN_FUTURE = 5; // 0x5
+  }
+
+  public static final class MediaDrm.LogMessage {
+    method @NonNull public String getMessage();
+    method public int getPriority();
+    method public long getTimestampMillis();
+  }
+
+  public static final class MediaDrm.MediaDrmStateException extends java.lang.IllegalStateException {
+    method @NonNull public String getDiagnosticInfo();
+    method public int getErrorCode();
+    method public boolean isTransient();
+  }
+
+  public static final class MediaDrm.MetricsConstants {
+    field public static final String CLOSE_SESSION_ERROR_COUNT = "drm.mediadrm.close_session.error.count";
+    field public static final String CLOSE_SESSION_ERROR_LIST = "drm.mediadrm.close_session.error.list";
+    field public static final String CLOSE_SESSION_OK_COUNT = "drm.mediadrm.close_session.ok.count";
+    field public static final String EVENT_KEY_EXPIRED_COUNT = "drm.mediadrm.event.KEY_EXPIRED.count";
+    field public static final String EVENT_KEY_NEEDED_COUNT = "drm.mediadrm.event.KEY_NEEDED.count";
+    field public static final String EVENT_PROVISION_REQUIRED_COUNT = "drm.mediadrm.event.PROVISION_REQUIRED.count";
+    field public static final String EVENT_SESSION_RECLAIMED_COUNT = "drm.mediadrm.event.SESSION_RECLAIMED.count";
+    field public static final String EVENT_VENDOR_DEFINED_COUNT = "drm.mediadrm.event.VENDOR_DEFINED.count";
+    field public static final String GET_DEVICE_UNIQUE_ID_ERROR_COUNT = "drm.mediadrm.get_device_unique_id.error.count";
+    field public static final String GET_DEVICE_UNIQUE_ID_ERROR_LIST = "drm.mediadrm.get_device_unique_id.error.list";
+    field public static final String GET_DEVICE_UNIQUE_ID_OK_COUNT = "drm.mediadrm.get_device_unique_id.ok.count";
+    field public static final String GET_KEY_REQUEST_ERROR_COUNT = "drm.mediadrm.get_key_request.error.count";
+    field public static final String GET_KEY_REQUEST_ERROR_LIST = "drm.mediadrm.get_key_request.error.list";
+    field public static final String GET_KEY_REQUEST_OK_COUNT = "drm.mediadrm.get_key_request.ok.count";
+    field public static final String GET_KEY_REQUEST_OK_TIME_MICROS = "drm.mediadrm.get_key_request.ok.average_time_micros";
+    field public static final String GET_PROVISION_REQUEST_ERROR_COUNT = "drm.mediadrm.get_provision_request.error.count";
+    field public static final String GET_PROVISION_REQUEST_ERROR_LIST = "drm.mediadrm.get_provision_request.error.list";
+    field public static final String GET_PROVISION_REQUEST_OK_COUNT = "drm.mediadrm.get_provision_request.ok.count";
+    field public static final String KEY_STATUS_EXPIRED_COUNT = "drm.mediadrm.key_status.EXPIRED.count";
+    field public static final String KEY_STATUS_INTERNAL_ERROR_COUNT = "drm.mediadrm.key_status.INTERNAL_ERROR.count";
+    field public static final String KEY_STATUS_OUTPUT_NOT_ALLOWED_COUNT = "drm.mediadrm.key_status_change.OUTPUT_NOT_ALLOWED.count";
+    field public static final String KEY_STATUS_PENDING_COUNT = "drm.mediadrm.key_status_change.PENDING.count";
+    field public static final String KEY_STATUS_USABLE_COUNT = "drm.mediadrm.key_status_change.USABLE.count";
+    field public static final String OPEN_SESSION_ERROR_COUNT = "drm.mediadrm.open_session.error.count";
+    field public static final String OPEN_SESSION_ERROR_LIST = "drm.mediadrm.open_session.error.list";
+    field public static final String OPEN_SESSION_OK_COUNT = "drm.mediadrm.open_session.ok.count";
+    field public static final String PROVIDE_KEY_RESPONSE_ERROR_COUNT = "drm.mediadrm.provide_key_response.error.count";
+    field public static final String PROVIDE_KEY_RESPONSE_ERROR_LIST = "drm.mediadrm.provide_key_response.error.list";
+    field public static final String PROVIDE_KEY_RESPONSE_OK_COUNT = "drm.mediadrm.provide_key_response.ok.count";
+    field public static final String PROVIDE_KEY_RESPONSE_OK_TIME_MICROS = "drm.mediadrm.provide_key_response.ok.average_time_micros";
+    field public static final String PROVIDE_PROVISION_RESPONSE_ERROR_COUNT = "drm.mediadrm.provide_provision_response.error.count";
+    field public static final String PROVIDE_PROVISION_RESPONSE_ERROR_LIST = "drm.mediadrm.provide_provision_response.error.list";
+    field public static final String PROVIDE_PROVISION_RESPONSE_OK_COUNT = "drm.mediadrm.provide_provision_response.ok.count";
+    field public static final String SESSION_END_TIMES_MS = "drm.mediadrm.session_end_times_ms";
+    field public static final String SESSION_START_TIMES_MS = "drm.mediadrm.session_start_times_ms";
+  }
+
+  public static interface MediaDrm.OnEventListener {
+    method public void onEvent(@NonNull android.media.MediaDrm, @Nullable byte[], int, int, @Nullable byte[]);
+  }
+
+  public static interface MediaDrm.OnExpirationUpdateListener {
+    method public void onExpirationUpdate(@NonNull android.media.MediaDrm, @NonNull byte[], long);
+  }
+
+  public static interface MediaDrm.OnKeyStatusChangeListener {
+    method public void onKeyStatusChange(@NonNull android.media.MediaDrm, @NonNull byte[], @NonNull java.util.List<android.media.MediaDrm.KeyStatus>, boolean);
+  }
+
+  public static interface MediaDrm.OnSessionLostStateListener {
+    method public void onSessionLostState(@NonNull android.media.MediaDrm, @NonNull byte[]);
+  }
+
+  public final class MediaDrm.PlaybackComponent {
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+  }
+
+  public static final class MediaDrm.ProvisionRequest {
+    method @NonNull public byte[] getData();
+    method @NonNull public String getDefaultUrl();
+  }
+
+  @Deprecated @IntDef({android.media.MediaDrm.SECURITY_LEVEL_UNKNOWN, android.media.MediaDrm.SECURITY_LEVEL_SW_SECURE_CRYPTO, android.media.MediaDrm.SECURITY_LEVEL_SW_SECURE_DECODE, android.media.MediaDrm.SECURITY_LEVEL_HW_SECURE_CRYPTO, android.media.MediaDrm.SECURITY_LEVEL_HW_SECURE_DECODE, android.media.MediaDrm.SECURITY_LEVEL_HW_SECURE_ALL}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface MediaDrm.SecurityLevel {
+  }
+
+  public static final class MediaDrm.SessionException extends java.lang.RuntimeException {
+    ctor public MediaDrm.SessionException(int, @Nullable String);
+    method @Deprecated public int getErrorCode();
+    method public boolean isTransient();
+    field @Deprecated public static final int ERROR_RESOURCE_CONTENTION = 1; // 0x1
+    field @Deprecated public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public class MediaDrmException extends java.lang.Exception {
+    ctor public MediaDrmException(String);
+  }
+
+  public class MediaDrmResetException extends java.lang.IllegalStateException {
+    ctor public MediaDrmResetException(String);
+  }
+
+  public final class MediaExtractor {
+    ctor public MediaExtractor();
+    method public boolean advance();
+    method protected void finalize();
+    method @NonNull public java.util.List<android.media.AudioPresentation> getAudioPresentations(int);
+    method public long getCachedDuration();
+    method public android.media.MediaExtractor.CasInfo getCasInfo(int);
+    method public android.media.DrmInitData getDrmInitData();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public android.os.PersistableBundle getMetrics();
+    method @Nullable public java.util.Map<java.util.UUID,byte[]> getPsshInfo();
+    method public boolean getSampleCryptoInfo(@NonNull android.media.MediaCodec.CryptoInfo);
+    method public int getSampleFlags();
+    method public long getSampleSize();
+    method public long getSampleTime();
+    method public int getSampleTrackIndex();
+    method public int getTrackCount();
+    method @NonNull public android.media.MediaFormat getTrackFormat(int);
+    method public boolean hasCacheReachedEndOfStream();
+    method public int readSampleData(@NonNull java.nio.ByteBuffer, int);
+    method public void release();
+    method public void seekTo(long, int);
+    method public void selectTrack(int);
+    method public void setDataSource(@NonNull android.media.MediaDataSource) throws java.io.IOException;
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws java.io.IOException;
+    method public void setDataSource(@NonNull String, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws java.io.IOException;
+    method public void setDataSource(@NonNull String) throws java.io.IOException;
+    method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    method public void setDataSource(@NonNull java.io.FileDescriptor, long, long) throws java.io.IOException;
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public void setMediaCas(@NonNull android.media.MediaCas);
+    method public void unselectTrack(int);
+    field public static final int SAMPLE_FLAG_ENCRYPTED = 2; // 0x2
+    field public static final int SAMPLE_FLAG_PARTIAL_FRAME = 4; // 0x4
+    field public static final int SAMPLE_FLAG_SYNC = 1; // 0x1
+    field public static final int SEEK_TO_CLOSEST_SYNC = 2; // 0x2
+    field public static final int SEEK_TO_NEXT_SYNC = 1; // 0x1
+    field public static final int SEEK_TO_PREVIOUS_SYNC = 0; // 0x0
+  }
+
+  public static final class MediaExtractor.CasInfo {
+    method @Nullable public byte[] getPrivateData();
+    method public android.media.MediaCas.Session getSession();
+    method public int getSystemId();
+  }
+
+  public static final class MediaExtractor.MetricsConstants {
+    field public static final String FORMAT = "android.media.mediaextractor.fmt";
+    field public static final String MIME_TYPE = "android.media.mediaextractor.mime";
+    field public static final String TRACKS = "android.media.mediaextractor.ntrk";
+  }
+
+  public final class MediaFeature {
+    ctor public MediaFeature();
+  }
+
+  public static final class MediaFeature.HdrType {
+    field public static final String DOLBY_VISION = "android.media.feature.hdr.dolby_vision";
+    field public static final String HDR10 = "android.media.feature.hdr.hdr10";
+    field public static final String HDR10_PLUS = "android.media.feature.hdr.hdr10_plus";
+    field public static final String HLG = "android.media.feature.hdr.hlg";
+  }
+
+  public final class MediaFormat {
+    ctor public MediaFormat();
+    ctor public MediaFormat(@NonNull android.media.MediaFormat);
+    method public boolean containsFeature(@NonNull String);
+    method public boolean containsKey(@NonNull String);
+    method @NonNull public static android.media.MediaFormat createAudioFormat(@NonNull String, int, int);
+    method @NonNull public static android.media.MediaFormat createSubtitleFormat(@NonNull String, String);
+    method @NonNull public static android.media.MediaFormat createVideoFormat(@NonNull String, int, int);
+    method @Nullable public java.nio.ByteBuffer getByteBuffer(@NonNull String);
+    method @NonNull public java.nio.ByteBuffer getByteBuffer(@NonNull String, @NonNull java.nio.ByteBuffer);
+    method public boolean getFeatureEnabled(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getFeatures();
+    method public float getFloat(@NonNull String);
+    method public float getFloat(@NonNull String, float);
+    method public int getInteger(@NonNull String);
+    method public int getInteger(@NonNull String, int);
+    method @NonNull public java.util.Set<java.lang.String> getKeys();
+    method public long getLong(@NonNull String);
+    method public long getLong(@NonNull String, long);
+    method @Nullable public Number getNumber(@NonNull String);
+    method @NonNull public Number getNumber(@NonNull String, @NonNull Number);
+    method @Nullable public String getString(@NonNull String);
+    method @NonNull public String getString(@NonNull String, @NonNull String);
+    method public int getValueTypeForKey(@NonNull String);
+    method public void removeFeature(@NonNull String);
+    method public void removeKey(@NonNull String);
+    method public void setByteBuffer(@NonNull String, @Nullable java.nio.ByteBuffer);
+    method public void setFeatureEnabled(@NonNull String, boolean);
+    method public void setFloat(@NonNull String, float);
+    method public void setInteger(@NonNull String, int);
+    method public void setLong(@NonNull String, long);
+    method public void setString(@NonNull String, @Nullable String);
+    field public static final int COLOR_RANGE_FULL = 1; // 0x1
+    field public static final int COLOR_RANGE_LIMITED = 2; // 0x2
+    field public static final int COLOR_STANDARD_BT2020 = 6; // 0x6
+    field public static final int COLOR_STANDARD_BT601_NTSC = 4; // 0x4
+    field public static final int COLOR_STANDARD_BT601_PAL = 2; // 0x2
+    field public static final int COLOR_STANDARD_BT709 = 1; // 0x1
+    field public static final int COLOR_TRANSFER_HLG = 7; // 0x7
+    field public static final int COLOR_TRANSFER_LINEAR = 1; // 0x1
+    field public static final int COLOR_TRANSFER_SDR_VIDEO = 3; // 0x3
+    field public static final int COLOR_TRANSFER_ST2084 = 6; // 0x6
+    field public static final String KEY_AAC_DRC_ALBUM_MODE = "aac-drc-album-mode";
+    field public static final String KEY_AAC_DRC_ATTENUATION_FACTOR = "aac-drc-cut-level";
+    field public static final String KEY_AAC_DRC_BOOST_FACTOR = "aac-drc-boost-level";
+    field public static final String KEY_AAC_DRC_EFFECT_TYPE = "aac-drc-effect-type";
+    field public static final String KEY_AAC_DRC_HEAVY_COMPRESSION = "aac-drc-heavy-compression";
+    field public static final String KEY_AAC_DRC_OUTPUT_LOUDNESS = "aac-drc-output-loudness";
+    field public static final String KEY_AAC_DRC_TARGET_REFERENCE_LEVEL = "aac-target-ref-level";
+    field public static final String KEY_AAC_ENCODED_TARGET_LEVEL = "aac-encoded-target-level";
+    field public static final String KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT = "aac-max-output-channel_count";
+    field public static final String KEY_AAC_PROFILE = "aac-profile";
+    field public static final String KEY_AAC_SBR_MODE = "aac-sbr-mode";
+    field public static final String KEY_ALLOW_FRAME_DROP = "allow-frame-drop";
+    field public static final String KEY_AUDIO_SESSION_ID = "audio-session-id";
+    field public static final String KEY_BITRATE_MODE = "bitrate-mode";
+    field public static final String KEY_BIT_RATE = "bitrate";
+    field public static final String KEY_CAPTION_SERVICE_NUMBER = "caption-service-number";
+    field public static final String KEY_CAPTURE_RATE = "capture-rate";
+    field public static final String KEY_CHANNEL_COUNT = "channel-count";
+    field public static final String KEY_CHANNEL_MASK = "channel-mask";
+    field public static final String KEY_CODECS_STRING = "codecs-string";
+    field public static final String KEY_COLOR_FORMAT = "color-format";
+    field public static final String KEY_COLOR_RANGE = "color-range";
+    field public static final String KEY_COLOR_STANDARD = "color-standard";
+    field public static final String KEY_COLOR_TRANSFER = "color-transfer";
+    field public static final String KEY_COLOR_TRANSFER_REQUEST = "color-transfer-request";
+    field public static final String KEY_COMPLEXITY = "complexity";
+    field public static final String KEY_CREATE_INPUT_SURFACE_SUSPENDED = "create-input-buffers-suspended";
+    field public static final String KEY_DURATION = "durationUs";
+    field public static final String KEY_ENCODER_DELAY = "encoder-delay";
+    field public static final String KEY_ENCODER_PADDING = "encoder-padding";
+    field public static final String KEY_FLAC_COMPRESSION_LEVEL = "flac-compression-level";
+    field public static final String KEY_FRAME_RATE = "frame-rate";
+    field public static final String KEY_GRID_COLUMNS = "grid-cols";
+    field public static final String KEY_GRID_ROWS = "grid-rows";
+    field public static final String KEY_HAPTIC_CHANNEL_COUNT = "haptic-channel-count";
+    field public static final String KEY_HARDWARE_AV_SYNC_ID = "hw-av-sync-id";
+    field public static final String KEY_HDR10_PLUS_INFO = "hdr10-plus-info";
+    field public static final String KEY_HDR_STATIC_INFO = "hdr-static-info";
+    field public static final String KEY_HEIGHT = "height";
+    field public static final String KEY_INTRA_REFRESH_PERIOD = "intra-refresh-period";
+    field public static final String KEY_IS_ADTS = "is-adts";
+    field public static final String KEY_IS_AUTOSELECT = "is-autoselect";
+    field public static final String KEY_IS_DEFAULT = "is-default";
+    field public static final String KEY_IS_FORCED_SUBTITLE = "is-forced-subtitle";
+    field public static final String KEY_I_FRAME_INTERVAL = "i-frame-interval";
+    field public static final String KEY_LANGUAGE = "language";
+    field public static final String KEY_LATENCY = "latency";
+    field public static final String KEY_LEVEL = "level";
+    field public static final String KEY_LOW_LATENCY = "low-latency";
+    field public static final String KEY_MAX_B_FRAMES = "max-bframes";
+    field public static final String KEY_MAX_FPS_TO_ENCODER = "max-fps-to-encoder";
+    field public static final String KEY_MAX_HEIGHT = "max-height";
+    field public static final String KEY_MAX_INPUT_SIZE = "max-input-size";
+    field public static final String KEY_MAX_OUTPUT_CHANNEL_COUNT = "max-output-channel-count";
+    field public static final String KEY_MAX_PTS_GAP_TO_ENCODER = "max-pts-gap-to-encoder";
+    field public static final String KEY_MAX_WIDTH = "max-width";
+    field public static final String KEY_MIME = "mime";
+    field public static final String KEY_MPEGH_COMPATIBLE_SETS = "mpegh-compatible-sets";
+    field public static final String KEY_MPEGH_PROFILE_LEVEL_INDICATION = "mpegh-profile-level-indication";
+    field public static final String KEY_MPEGH_REFERENCE_CHANNEL_LAYOUT = "mpegh-reference-channel-layout";
+    field public static final String KEY_OPERATING_RATE = "operating-rate";
+    field public static final String KEY_OUTPUT_REORDER_DEPTH = "output-reorder-depth";
+    field public static final String KEY_PCM_ENCODING = "pcm-encoding";
+    field public static final String KEY_PIXEL_ASPECT_RATIO_HEIGHT = "sar-height";
+    field public static final String KEY_PIXEL_ASPECT_RATIO_WIDTH = "sar-width";
+    field public static final String KEY_PREPEND_HEADER_TO_SYNC_FRAMES = "prepend-sps-pps-to-idr-frames";
+    field public static final String KEY_PRIORITY = "priority";
+    field public static final String KEY_PROFILE = "profile";
+    field public static final String KEY_PUSH_BLANK_BUFFERS_ON_STOP = "push-blank-buffers-on-shutdown";
+    field public static final String KEY_QUALITY = "quality";
+    field public static final String KEY_REPEAT_PREVIOUS_FRAME_AFTER = "repeat-previous-frame-after";
+    field public static final String KEY_ROTATION = "rotation-degrees";
+    field public static final String KEY_SAMPLE_RATE = "sample-rate";
+    field public static final String KEY_SLICE_HEIGHT = "slice-height";
+    field public static final String KEY_SLOW_MOTION_MARKERS = "slow-motion-markers";
+    field public static final String KEY_STRIDE = "stride";
+    field public static final String KEY_TEMPORAL_LAYERING = "ts-schema";
+    field public static final String KEY_TILE_HEIGHT = "tile-height";
+    field public static final String KEY_TILE_WIDTH = "tile-width";
+    field public static final String KEY_TRACK_ID = "track-id";
+    field public static final String KEY_VIDEO_QP_B_MAX = "video-qp-b-max";
+    field public static final String KEY_VIDEO_QP_B_MIN = "video-qp-b-min";
+    field public static final String KEY_VIDEO_QP_I_MAX = "video-qp-i-max";
+    field public static final String KEY_VIDEO_QP_I_MIN = "video-qp-i-min";
+    field public static final String KEY_VIDEO_QP_MAX = "video-qp-max";
+    field public static final String KEY_VIDEO_QP_MIN = "video-qp-min";
+    field public static final String KEY_VIDEO_QP_P_MAX = "video-qp-p-max";
+    field public static final String KEY_VIDEO_QP_P_MIN = "video-qp-p-min";
+    field public static final String KEY_WIDTH = "width";
+    field public static final String MIMETYPE_AUDIO_AAC = "audio/mp4a-latm";
+    field public static final String MIMETYPE_AUDIO_AC3 = "audio/ac3";
+    field public static final String MIMETYPE_AUDIO_AC4 = "audio/ac4";
+    field public static final String MIMETYPE_AUDIO_AMR_NB = "audio/3gpp";
+    field public static final String MIMETYPE_AUDIO_AMR_WB = "audio/amr-wb";
+    field public static final String MIMETYPE_AUDIO_EAC3 = "audio/eac3";
+    field public static final String MIMETYPE_AUDIO_EAC3_JOC = "audio/eac3-joc";
+    field public static final String MIMETYPE_AUDIO_FLAC = "audio/flac";
+    field public static final String MIMETYPE_AUDIO_G711_ALAW = "audio/g711-alaw";
+    field public static final String MIMETYPE_AUDIO_G711_MLAW = "audio/g711-mlaw";
+    field public static final String MIMETYPE_AUDIO_MPEG = "audio/mpeg";
+    field public static final String MIMETYPE_AUDIO_MPEGH_MHA1 = "audio/mha1";
+    field public static final String MIMETYPE_AUDIO_MPEGH_MHM1 = "audio/mhm1";
+    field public static final String MIMETYPE_AUDIO_MSGSM = "audio/gsm";
+    field public static final String MIMETYPE_AUDIO_OPUS = "audio/opus";
+    field public static final String MIMETYPE_AUDIO_QCELP = "audio/qcelp";
+    field public static final String MIMETYPE_AUDIO_RAW = "audio/raw";
+    field public static final String MIMETYPE_AUDIO_SCRAMBLED = "audio/scrambled";
+    field public static final String MIMETYPE_AUDIO_VORBIS = "audio/vorbis";
+    field public static final String MIMETYPE_IMAGE_ANDROID_HEIC = "image/vnd.android.heic";
+    field public static final String MIMETYPE_TEXT_CEA_608 = "text/cea-608";
+    field public static final String MIMETYPE_TEXT_CEA_708 = "text/cea-708";
+    field public static final String MIMETYPE_TEXT_SUBRIP = "application/x-subrip";
+    field public static final String MIMETYPE_TEXT_VTT = "text/vtt";
+    field public static final String MIMETYPE_VIDEO_AV1 = "video/av01";
+    field public static final String MIMETYPE_VIDEO_AVC = "video/avc";
+    field public static final String MIMETYPE_VIDEO_DOLBY_VISION = "video/dolby-vision";
+    field public static final String MIMETYPE_VIDEO_H263 = "video/3gpp";
+    field public static final String MIMETYPE_VIDEO_HEVC = "video/hevc";
+    field public static final String MIMETYPE_VIDEO_MPEG2 = "video/mpeg2";
+    field public static final String MIMETYPE_VIDEO_MPEG4 = "video/mp4v-es";
+    field public static final String MIMETYPE_VIDEO_RAW = "video/raw";
+    field public static final String MIMETYPE_VIDEO_SCRAMBLED = "video/scrambled";
+    field public static final String MIMETYPE_VIDEO_VP8 = "video/x-vnd.on2.vp8";
+    field public static final String MIMETYPE_VIDEO_VP9 = "video/x-vnd.on2.vp9";
+    field public static final int TYPE_BYTE_BUFFER = 5; // 0x5
+    field public static final int TYPE_FLOAT = 3; // 0x3
+    field public static final int TYPE_INTEGER = 1; // 0x1
+    field public static final int TYPE_LONG = 2; // 0x2
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_STRING = 4; // 0x4
+  }
+
+  public final class MediaMetadata implements android.os.Parcelable {
+    method public boolean containsKey(String);
+    method public int describeContents();
+    method public android.graphics.Bitmap getBitmap(String);
+    method @IntRange(from=1) public int getBitmapDimensionLimit();
+    method @NonNull public android.media.MediaDescription getDescription();
+    method public long getLong(String);
+    method public android.media.Rating getRating(String);
+    method public String getString(String);
+    method public CharSequence getText(String);
+    method public java.util.Set<java.lang.String> keySet();
+    method public int size();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaMetadata> CREATOR;
+    field public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+    field public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+    field public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+    field public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+    field public static final String METADATA_KEY_ART = "android.media.metadata.ART";
+    field public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+    field public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+    field public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+    field public static final String METADATA_KEY_BT_FOLDER_TYPE = "android.media.metadata.BT_FOLDER_TYPE";
+    field public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+    field public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+    field public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
+    field public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+    field public static final String METADATA_KEY_DISPLAY_DESCRIPTION = "android.media.metadata.DISPLAY_DESCRIPTION";
+    field public static final String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
+    field public static final String METADATA_KEY_DISPLAY_ICON_URI = "android.media.metadata.DISPLAY_ICON_URI";
+    field public static final String METADATA_KEY_DISPLAY_SUBTITLE = "android.media.metadata.DISPLAY_SUBTITLE";
+    field public static final String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
+    field public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+    field public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+    field public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
+    field public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
+    field public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+    field public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
+    field public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+    field public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+    field public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+    field public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+    field public static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+  }
+
+  public static final class MediaMetadata.Builder {
+    ctor public MediaMetadata.Builder();
+    ctor public MediaMetadata.Builder(android.media.MediaMetadata);
+    method public android.media.MediaMetadata build();
+    method public android.media.MediaMetadata.Builder putBitmap(String, android.graphics.Bitmap);
+    method public android.media.MediaMetadata.Builder putLong(String, long);
+    method public android.media.MediaMetadata.Builder putRating(String, android.media.Rating);
+    method public android.media.MediaMetadata.Builder putString(String, String);
+    method public android.media.MediaMetadata.Builder putText(String, CharSequence);
+    method @NonNull public android.media.MediaMetadata.Builder setBitmapDimensionLimit(@IntRange(from=1) int);
+  }
+
+  @Deprecated public abstract class MediaMetadataEditor {
+    method @Deprecated public void addEditableKey(int);
+    method @Deprecated public abstract void apply();
+    method @Deprecated public void clear();
+    method @Deprecated public android.graphics.Bitmap getBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method @Deprecated public int[] getEditableKeys();
+    method @Deprecated public long getLong(int, long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public Object getObject(int, Object) throws java.lang.IllegalArgumentException;
+    method @Deprecated public String getString(int, String) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putObject(int, Object) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.MediaMetadataEditor putString(int, String) throws java.lang.IllegalArgumentException;
+    method @Deprecated public void removeEditableKeys();
+    field @Deprecated public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
+    field @Deprecated public static final int RATING_KEY_BY_OTHERS = 101; // 0x65
+    field @Deprecated public static final int RATING_KEY_BY_USER = 268435457; // 0x10000001
+  }
+
+  public class MediaMetadataRetriever implements java.lang.AutoCloseable {
+    ctor public MediaMetadataRetriever();
+    method public void close();
+    method @Nullable public String extractMetadata(int);
+    method @Nullable public byte[] getEmbeddedPicture();
+    method @Nullable public android.graphics.Bitmap getFrameAtIndex(int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getFrameAtIndex(int);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime(long, int);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime(long, int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime(long);
+    method @Nullable public android.graphics.Bitmap getFrameAtTime();
+    method @NonNull public java.util.List<android.graphics.Bitmap> getFramesAtIndex(int, int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @NonNull public java.util.List<android.graphics.Bitmap> getFramesAtIndex(int, int);
+    method @Nullable public android.graphics.Bitmap getImageAtIndex(int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getImageAtIndex(int);
+    method @Nullable public android.graphics.Bitmap getPrimaryImage(@NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method @Nullable public android.graphics.Bitmap getPrimaryImage();
+    method @Nullable public android.graphics.Bitmap getScaledFrameAtTime(long, int, @IntRange(from=1) int, @IntRange(from=1) int);
+    method @Nullable public android.graphics.Bitmap getScaledFrameAtTime(long, int, @IntRange(from=1) int, @IntRange(from=1) int, @NonNull android.media.MediaMetadataRetriever.BitmapParams);
+    method public void release();
+    method public void setDataSource(String) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(String, java.util.Map<java.lang.String,java.lang.String>) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(java.io.FileDescriptor, long, long) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(java.io.FileDescriptor) throws java.lang.IllegalArgumentException;
+    method public void setDataSource(android.content.Context, android.net.Uri) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method public void setDataSource(android.media.MediaDataSource) throws java.lang.IllegalArgumentException;
+    field public static final int METADATA_KEY_ALBUM = 1; // 0x1
+    field public static final int METADATA_KEY_ALBUMARTIST = 13; // 0xd
+    field public static final int METADATA_KEY_ARTIST = 2; // 0x2
+    field public static final int METADATA_KEY_AUTHOR = 3; // 0x3
+    field public static final int METADATA_KEY_BITRATE = 20; // 0x14
+    field public static final int METADATA_KEY_BITS_PER_SAMPLE = 39; // 0x27
+    field public static final int METADATA_KEY_CAPTURE_FRAMERATE = 25; // 0x19
+    field public static final int METADATA_KEY_CD_TRACK_NUMBER = 0; // 0x0
+    field public static final int METADATA_KEY_COLOR_RANGE = 37; // 0x25
+    field public static final int METADATA_KEY_COLOR_STANDARD = 35; // 0x23
+    field public static final int METADATA_KEY_COLOR_TRANSFER = 36; // 0x24
+    field public static final int METADATA_KEY_COMPILATION = 15; // 0xf
+    field public static final int METADATA_KEY_COMPOSER = 4; // 0x4
+    field public static final int METADATA_KEY_DATE = 5; // 0x5
+    field public static final int METADATA_KEY_DISC_NUMBER = 14; // 0xe
+    field public static final int METADATA_KEY_DURATION = 9; // 0x9
+    field public static final int METADATA_KEY_EXIF_LENGTH = 34; // 0x22
+    field public static final int METADATA_KEY_EXIF_OFFSET = 33; // 0x21
+    field public static final int METADATA_KEY_GENRE = 6; // 0x6
+    field public static final int METADATA_KEY_HAS_AUDIO = 16; // 0x10
+    field public static final int METADATA_KEY_HAS_IMAGE = 26; // 0x1a
+    field public static final int METADATA_KEY_HAS_VIDEO = 17; // 0x11
+    field public static final int METADATA_KEY_IMAGE_COUNT = 27; // 0x1b
+    field public static final int METADATA_KEY_IMAGE_HEIGHT = 30; // 0x1e
+    field public static final int METADATA_KEY_IMAGE_PRIMARY = 28; // 0x1c
+    field public static final int METADATA_KEY_IMAGE_ROTATION = 31; // 0x1f
+    field public static final int METADATA_KEY_IMAGE_WIDTH = 29; // 0x1d
+    field public static final int METADATA_KEY_LOCATION = 23; // 0x17
+    field public static final int METADATA_KEY_MIMETYPE = 12; // 0xc
+    field public static final int METADATA_KEY_NUM_TRACKS = 10; // 0xa
+    field public static final int METADATA_KEY_SAMPLERATE = 38; // 0x26
+    field public static final int METADATA_KEY_TITLE = 7; // 0x7
+    field public static final int METADATA_KEY_VIDEO_FRAME_COUNT = 32; // 0x20
+    field public static final int METADATA_KEY_VIDEO_HEIGHT = 19; // 0x13
+    field public static final int METADATA_KEY_VIDEO_ROTATION = 24; // 0x18
+    field public static final int METADATA_KEY_VIDEO_WIDTH = 18; // 0x12
+    field public static final int METADATA_KEY_WRITER = 11; // 0xb
+    field public static final int METADATA_KEY_XMP_LENGTH = 42; // 0x2a
+    field public static final int METADATA_KEY_XMP_OFFSET = 41; // 0x29
+    field public static final int METADATA_KEY_YEAR = 8; // 0x8
+    field public static final int OPTION_CLOSEST = 3; // 0x3
+    field public static final int OPTION_CLOSEST_SYNC = 2; // 0x2
+    field public static final int OPTION_NEXT_SYNC = 1; // 0x1
+    field public static final int OPTION_PREVIOUS_SYNC = 0; // 0x0
+  }
+
+  public static final class MediaMetadataRetriever.BitmapParams {
+    ctor public MediaMetadataRetriever.BitmapParams();
+    method @NonNull public android.graphics.Bitmap.Config getActualConfig();
+    method @NonNull public android.graphics.Bitmap.Config getPreferredConfig();
+    method public void setPreferredConfig(@NonNull android.graphics.Bitmap.Config);
+  }
+
+  public final class MediaMuxer {
+    ctor public MediaMuxer(@NonNull String, int) throws java.io.IOException;
+    ctor public MediaMuxer(@NonNull java.io.FileDescriptor, int) throws java.io.IOException;
+    method public int addTrack(@NonNull android.media.MediaFormat);
+    method public void release();
+    method public void setLocation(float, float);
+    method public void setOrientationHint(int);
+    method public void start();
+    method public void stop();
+    method public void writeSampleData(int, @NonNull java.nio.ByteBuffer, @NonNull android.media.MediaCodec.BufferInfo);
+  }
+
+  public static final class MediaMuxer.OutputFormat {
+    field public static final int MUXER_OUTPUT_3GPP = 2; // 0x2
+    field public static final int MUXER_OUTPUT_HEIF = 3; // 0x3
+    field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0
+    field public static final int MUXER_OUTPUT_OGG = 4; // 0x4
+    field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1
+  }
+
+  public final class MediaParser {
+    method public boolean advance(@NonNull android.media.MediaParser.SeekableInputReader) throws java.io.IOException;
+    method @NonNull public static android.media.MediaParser create(@NonNull android.media.MediaParser.OutputConsumer, @NonNull java.lang.String...);
+    method @NonNull public static android.media.MediaParser createByName(@NonNull String, @NonNull android.media.MediaParser.OutputConsumer);
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method @NonNull public String getParserName();
+    method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat);
+    method public void release();
+    method public void seek(@NonNull android.media.MediaParser.SeekPoint);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method @NonNull public android.media.MediaParser setParameter(@NonNull String, @NonNull Object);
+    method public boolean supportsParameter(@NonNull String);
+    field public static final String PARAMETER_ADTS_ENABLE_CBR_SEEKING = "android.media.mediaparser.adts.enableCbrSeeking";
+    field public static final String PARAMETER_AMR_ENABLE_CBR_SEEKING = "android.media.mediaparser.amr.enableCbrSeeking";
+    field public static final String PARAMETER_FLAC_DISABLE_ID3 = "android.media.mediaparser.flac.disableId3";
+    field public static final String PARAMETER_MATROSKA_DISABLE_CUES_SEEKING = "android.media.mediaparser.matroska.disableCuesSeeking";
+    field public static final String PARAMETER_MP3_DISABLE_ID3 = "android.media.mediaparser.mp3.disableId3";
+    field public static final String PARAMETER_MP3_ENABLE_CBR_SEEKING = "android.media.mediaparser.mp3.enableCbrSeeking";
+    field public static final String PARAMETER_MP3_ENABLE_INDEX_SEEKING = "android.media.mediaparser.mp3.enableIndexSeeking";
+    field public static final String PARAMETER_MP4_IGNORE_EDIT_LISTS = "android.media.mediaparser.mp4.ignoreEditLists";
+    field public static final String PARAMETER_MP4_IGNORE_TFDT_BOX = "android.media.mediaparser.mp4.ignoreTfdtBox";
+    field public static final String PARAMETER_MP4_TREAT_VIDEO_FRAMES_AS_KEYFRAMES = "android.media.mediaparser.mp4.treatVideoFramesAsKeyframes";
+    field public static final String PARAMETER_TS_ALLOW_NON_IDR_AVC_KEYFRAMES = "android.media.mediaparser.ts.allowNonIdrAvcKeyframes";
+    field public static final String PARAMETER_TS_DETECT_ACCESS_UNITS = "android.media.mediaparser.ts.ignoreDetectAccessUnits";
+    field public static final String PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS = "android.media.mediaparser.ts.enableHdmvDtsAudioStreams";
+    field public static final String PARAMETER_TS_IGNORE_AAC_STREAM = "android.media.mediaparser.ts.ignoreAacStream";
+    field public static final String PARAMETER_TS_IGNORE_AVC_STREAM = "android.media.mediaparser.ts.ignoreAvcStream";
+    field public static final String PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM = "android.media.mediaparser.ts.ignoreSpliceInfoStream";
+    field public static final String PARAMETER_TS_MODE = "android.media.mediaparser.ts.mode";
+    field public static final String PARSER_NAME_AC3 = "android.media.mediaparser.Ac3Parser";
+    field public static final String PARSER_NAME_AC4 = "android.media.mediaparser.Ac4Parser";
+    field public static final String PARSER_NAME_ADTS = "android.media.mediaparser.AdtsParser";
+    field public static final String PARSER_NAME_AMR = "android.media.mediaparser.AmrParser";
+    field public static final String PARSER_NAME_FLAC = "android.media.mediaparser.FlacParser";
+    field public static final String PARSER_NAME_FLV = "android.media.mediaparser.FlvParser";
+    field public static final String PARSER_NAME_FMP4 = "android.media.mediaparser.FragmentedMp4Parser";
+    field public static final String PARSER_NAME_MATROSKA = "android.media.mediaparser.MatroskaParser";
+    field public static final String PARSER_NAME_MP3 = "android.media.mediaparser.Mp3Parser";
+    field public static final String PARSER_NAME_MP4 = "android.media.mediaparser.Mp4Parser";
+    field public static final String PARSER_NAME_OGG = "android.media.mediaparser.OggParser";
+    field public static final String PARSER_NAME_PS = "android.media.mediaparser.PsParser";
+    field public static final String PARSER_NAME_TS = "android.media.mediaparser.TsParser";
+    field public static final String PARSER_NAME_UNKNOWN = "android.media.mediaparser.UNKNOWN";
+    field public static final String PARSER_NAME_WAV = "android.media.mediaparser.WavParser";
+    field public static final int SAMPLE_FLAG_DECODE_ONLY = -2147483648; // 0x80000000
+    field public static final int SAMPLE_FLAG_ENCRYPTED = 1073741824; // 0x40000000
+    field public static final int SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA = 268435456; // 0x10000000
+    field public static final int SAMPLE_FLAG_KEY_FRAME = 1; // 0x1
+    field public static final int SAMPLE_FLAG_LAST_SAMPLE = 536870912; // 0x20000000
+  }
+
+  public static interface MediaParser.InputReader {
+    method public long getLength();
+    method public long getPosition();
+    method public int read(@NonNull byte[], int, int) throws java.io.IOException;
+  }
+
+  public static interface MediaParser.OutputConsumer {
+    method public void onSampleCompleted(int, long, int, int, int, @Nullable android.media.MediaCodec.CryptoInfo);
+    method public void onSampleDataFound(int, @NonNull android.media.MediaParser.InputReader) throws java.io.IOException;
+    method public void onSeekMapFound(@NonNull android.media.MediaParser.SeekMap);
+    method public void onTrackCountFound(int);
+    method public void onTrackDataFound(int, @NonNull android.media.MediaParser.TrackData);
+  }
+
+  public static final class MediaParser.ParsingException extends java.io.IOException {
+  }
+
+  public static final class MediaParser.SeekMap {
+    method public long getDurationMicros();
+    method @NonNull public android.util.Pair<android.media.MediaParser.SeekPoint,android.media.MediaParser.SeekPoint> getSeekPoints(long);
+    method public boolean isSeekable();
+    field public static final int UNKNOWN_DURATION = -2147483648; // 0x80000000
+  }
+
+  public static final class MediaParser.SeekPoint {
+    field @NonNull public static final android.media.MediaParser.SeekPoint START;
+    field public final long position;
+    field public final long timeMicros;
+  }
+
+  public static interface MediaParser.SeekableInputReader extends android.media.MediaParser.InputReader {
+    method public void seekToPosition(long);
+  }
+
+  public static final class MediaParser.TrackData {
+    field @Nullable public final android.media.DrmInitData drmInitData;
+    field @NonNull public final android.media.MediaFormat mediaFormat;
+  }
+
+  public static final class MediaParser.UnrecognizedInputFormatException extends java.io.IOException {
+  }
+
+  public class MediaPlayer implements android.media.AudioRouting android.media.VolumeAutomation {
+    ctor public MediaPlayer();
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method public void addTimedTextSource(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void addTimedTextSource(android.content.Context, android.net.Uri, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void addTimedTextSource(java.io.FileDescriptor, String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void addTimedTextSource(java.io.FileDescriptor, long, long, String) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void attachAuxEffect(int);
+    method public void clearOnMediaTimeDiscontinuityListener();
+    method public void clearOnSubtitleDataListener();
+    method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri);
+    method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri, android.view.SurfaceHolder);
+    method public static android.media.MediaPlayer create(android.content.Context, android.net.Uri, android.view.SurfaceHolder, android.media.AudioAttributes, int);
+    method public static android.media.MediaPlayer create(android.content.Context, int);
+    method public static android.media.MediaPlayer create(android.content.Context, int, android.media.AudioAttributes, int);
+    method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration);
+    method public void deselectTrack(int) throws java.lang.IllegalStateException;
+    method protected void finalize();
+    method public int getAudioSessionId();
+    method public int getCurrentPosition();
+    method public android.media.MediaPlayer.DrmInfo getDrmInfo();
+    method @NonNull public String getDrmPropertyString(@NonNull String) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public int getDuration();
+    method @NonNull public android.media.MediaDrm.KeyRequest getKeyRequest(@Nullable byte[], @Nullable byte[], @Nullable String, int, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public android.os.PersistableBundle getMetrics();
+    method @NonNull public android.media.PlaybackParams getPlaybackParams();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public int getSelectedTrack(int) throws java.lang.IllegalStateException;
+    method @NonNull public android.media.SyncParams getSyncParams();
+    method @Nullable public android.media.MediaTimestamp getTimestamp();
+    method public android.media.MediaPlayer.TrackInfo[] getTrackInfo() throws java.lang.IllegalStateException;
+    method public int getVideoHeight();
+    method public int getVideoWidth();
+    method public boolean isLooping();
+    method public boolean isPlaying();
+    method public void pause() throws java.lang.IllegalStateException;
+    method public void prepare() throws java.io.IOException, java.lang.IllegalStateException;
+    method public void prepareAsync() throws java.lang.IllegalStateException;
+    method public void prepareDrm(@NonNull java.util.UUID) throws android.media.MediaPlayer.ProvisioningNetworkErrorException, android.media.MediaPlayer.ProvisioningServerErrorException, android.media.ResourceBusyException, android.media.UnsupportedSchemeException;
+    method public byte[] provideKeyResponse(@Nullable byte[], @NonNull byte[]) throws android.media.DeniedByServerException, android.media.MediaPlayer.NoDrmSchemeException;
+    method public void release();
+    method public void releaseDrm() throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method public void reset();
+    method public void restoreKeys(@NonNull byte[]) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public void seekTo(long, int);
+    method public void seekTo(int) throws java.lang.IllegalStateException;
+    method public void selectTrack(int) throws java.lang.IllegalStateException;
+    method public void setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public void setAudioSessionId(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method @Deprecated public void setAudioStreamType(int);
+    method public void setAuxEffectSendLevel(float);
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable java.util.Map<java.lang.String,java.lang.String>, @Nullable java.util.List<java.net.HttpCookie>) throws java.io.IOException;
+    method public void setDataSource(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable java.util.Map<java.lang.String,java.lang.String>) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
+    method public void setDataSource(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException;
+    method public void setDataSource(@NonNull android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDataSource(android.media.MediaDataSource) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setDisplay(android.view.SurfaceHolder);
+    method public void setDrmPropertyString(@NonNull String, @NonNull String) throws android.media.MediaPlayer.NoDrmSchemeException;
+    method public void setLooping(boolean);
+    method public void setNextMediaPlayer(android.media.MediaPlayer);
+    method public void setOnBufferingUpdateListener(android.media.MediaPlayer.OnBufferingUpdateListener);
+    method public void setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener);
+    method public void setOnDrmConfigHelper(android.media.MediaPlayer.OnDrmConfigHelper);
+    method public void setOnDrmInfoListener(android.media.MediaPlayer.OnDrmInfoListener);
+    method public void setOnDrmInfoListener(android.media.MediaPlayer.OnDrmInfoListener, android.os.Handler);
+    method public void setOnDrmPreparedListener(android.media.MediaPlayer.OnDrmPreparedListener);
+    method public void setOnDrmPreparedListener(android.media.MediaPlayer.OnDrmPreparedListener, android.os.Handler);
+    method public void setOnErrorListener(android.media.MediaPlayer.OnErrorListener);
+    method public void setOnInfoListener(android.media.MediaPlayer.OnInfoListener);
+    method public void setOnMediaTimeDiscontinuityListener(@NonNull android.media.MediaPlayer.OnMediaTimeDiscontinuityListener, @NonNull android.os.Handler);
+    method public void setOnMediaTimeDiscontinuityListener(@NonNull android.media.MediaPlayer.OnMediaTimeDiscontinuityListener);
+    method public void setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener);
+    method public void setOnSeekCompleteListener(android.media.MediaPlayer.OnSeekCompleteListener);
+    method public void setOnSubtitleDataListener(@NonNull android.media.MediaPlayer.OnSubtitleDataListener, @NonNull android.os.Handler);
+    method public void setOnSubtitleDataListener(@NonNull android.media.MediaPlayer.OnSubtitleDataListener);
+    method public void setOnTimedMetaDataAvailableListener(android.media.MediaPlayer.OnTimedMetaDataAvailableListener);
+    method public void setOnTimedTextListener(android.media.MediaPlayer.OnTimedTextListener);
+    method public void setOnVideoSizeChangedListener(android.media.MediaPlayer.OnVideoSizeChangedListener);
+    method public void setPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public void setScreenOnWhilePlaying(boolean);
+    method public void setSurface(android.view.Surface);
+    method public void setSyncParams(@NonNull android.media.SyncParams);
+    method public void setVideoScalingMode(int);
+    method public void setVolume(float, float);
+    method public void setWakeMode(android.content.Context, int);
+    method public void start() throws java.lang.IllegalStateException;
+    method public void stop() throws java.lang.IllegalStateException;
+    field public static final int MEDIA_ERROR_IO = -1004; // 0xfffffc14
+    field public static final int MEDIA_ERROR_MALFORMED = -1007; // 0xfffffc11
+    field public static final int MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK = 200; // 0xc8
+    field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64
+    field public static final int MEDIA_ERROR_TIMED_OUT = -110; // 0xffffff92
+    field public static final int MEDIA_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int MEDIA_ERROR_UNSUPPORTED = -1010; // 0xfffffc0e
+    field public static final int MEDIA_INFO_AUDIO_NOT_PLAYING = 804; // 0x324
+    field public static final int MEDIA_INFO_BAD_INTERLEAVING = 800; // 0x320
+    field public static final int MEDIA_INFO_BUFFERING_END = 702; // 0x2be
+    field public static final int MEDIA_INFO_BUFFERING_START = 701; // 0x2bd
+    field public static final int MEDIA_INFO_METADATA_UPDATE = 802; // 0x322
+    field public static final int MEDIA_INFO_NOT_SEEKABLE = 801; // 0x321
+    field public static final int MEDIA_INFO_STARTED_AS_NEXT = 2; // 0x2
+    field public static final int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902; // 0x386
+    field public static final int MEDIA_INFO_UNKNOWN = 1; // 0x1
+    field public static final int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901; // 0x385
+    field public static final int MEDIA_INFO_VIDEO_NOT_PLAYING = 805; // 0x325
+    field public static final int MEDIA_INFO_VIDEO_RENDERING_START = 3; // 0x3
+    field public static final int MEDIA_INFO_VIDEO_TRACK_LAGGING = 700; // 0x2bc
+    field @Deprecated public static final String MEDIA_MIMETYPE_TEXT_SUBRIP = "application/x-subrip";
+    field public static final int PREPARE_DRM_STATUS_PREPARATION_ERROR = 3; // 0x3
+    field public static final int PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR = 1; // 0x1
+    field public static final int PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR = 2; // 0x2
+    field public static final int PREPARE_DRM_STATUS_SUCCESS = 0; // 0x0
+    field public static final int SEEK_CLOSEST = 3; // 0x3
+    field public static final int SEEK_CLOSEST_SYNC = 2; // 0x2
+    field public static final int SEEK_NEXT_SYNC = 1; // 0x1
+    field public static final int SEEK_PREVIOUS_SYNC = 0; // 0x0
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT = 1; // 0x1
+    field public static final int VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING = 2; // 0x2
+  }
+
+  public static final class MediaPlayer.DrmInfo {
+    method public java.util.Map<java.util.UUID,byte[]> getPssh();
+    method public java.util.UUID[] getSupportedSchemes();
+  }
+
+  public static final class MediaPlayer.MetricsConstants {
+    field public static final String CODEC_AUDIO = "android.media.mediaplayer.audio.codec";
+    field public static final String CODEC_VIDEO = "android.media.mediaplayer.video.codec";
+    field public static final String DURATION = "android.media.mediaplayer.durationMs";
+    field public static final String ERRORS = "android.media.mediaplayer.err";
+    field public static final String ERROR_CODE = "android.media.mediaplayer.errcode";
+    field public static final String FRAMES = "android.media.mediaplayer.frames";
+    field public static final String FRAMES_DROPPED = "android.media.mediaplayer.dropped";
+    field public static final String HEIGHT = "android.media.mediaplayer.height";
+    field public static final String MIME_TYPE_AUDIO = "android.media.mediaplayer.audio.mime";
+    field public static final String MIME_TYPE_VIDEO = "android.media.mediaplayer.video.mime";
+    field public static final String PLAYING = "android.media.mediaplayer.playingMs";
+    field public static final String WIDTH = "android.media.mediaplayer.width";
+  }
+
+  public static final class MediaPlayer.NoDrmSchemeException extends android.media.MediaDrmException {
+    ctor public MediaPlayer.NoDrmSchemeException(String);
+  }
+
+  public static interface MediaPlayer.OnBufferingUpdateListener {
+    method public void onBufferingUpdate(android.media.MediaPlayer, int);
+  }
+
+  public static interface MediaPlayer.OnCompletionListener {
+    method public void onCompletion(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnDrmConfigHelper {
+    method public void onDrmConfig(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnDrmInfoListener {
+    method public void onDrmInfo(android.media.MediaPlayer, android.media.MediaPlayer.DrmInfo);
+  }
+
+  public static interface MediaPlayer.OnDrmPreparedListener {
+    method public void onDrmPrepared(android.media.MediaPlayer, int);
+  }
+
+  public static interface MediaPlayer.OnErrorListener {
+    method public boolean onError(android.media.MediaPlayer, int, int);
+  }
+
+  public static interface MediaPlayer.OnInfoListener {
+    method public boolean onInfo(android.media.MediaPlayer, int, int);
+  }
+
+  public static interface MediaPlayer.OnMediaTimeDiscontinuityListener {
+    method public void onMediaTimeDiscontinuity(@NonNull android.media.MediaPlayer, @NonNull android.media.MediaTimestamp);
+  }
+
+  public static interface MediaPlayer.OnPreparedListener {
+    method public void onPrepared(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnSeekCompleteListener {
+    method public void onSeekComplete(android.media.MediaPlayer);
+  }
+
+  public static interface MediaPlayer.OnSubtitleDataListener {
+    method public void onSubtitleData(@NonNull android.media.MediaPlayer, @NonNull android.media.SubtitleData);
+  }
+
+  public static interface MediaPlayer.OnTimedMetaDataAvailableListener {
+    method public void onTimedMetaDataAvailable(android.media.MediaPlayer, android.media.TimedMetaData);
+  }
+
+  public static interface MediaPlayer.OnTimedTextListener {
+    method public void onTimedText(android.media.MediaPlayer, android.media.TimedText);
+  }
+
+  public static interface MediaPlayer.OnVideoSizeChangedListener {
+    method public void onVideoSizeChanged(android.media.MediaPlayer, int, int);
+  }
+
+  public static final class MediaPlayer.ProvisioningNetworkErrorException extends android.media.MediaDrmException {
+    ctor public MediaPlayer.ProvisioningNetworkErrorException(String);
+  }
+
+  public static final class MediaPlayer.ProvisioningServerErrorException extends android.media.MediaDrmException {
+    ctor public MediaPlayer.ProvisioningServerErrorException(String);
+  }
+
+  public static class MediaPlayer.TrackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.MediaFormat getFormat();
+    method public String getLanguage();
+    method public int getTrackType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int MEDIA_TRACK_TYPE_AUDIO = 2; // 0x2
+    field public static final int MEDIA_TRACK_TYPE_METADATA = 5; // 0x5
+    field public static final int MEDIA_TRACK_TYPE_SUBTITLE = 4; // 0x4
+    field public static final int MEDIA_TRACK_TYPE_TIMEDTEXT = 3; // 0x3
+    field public static final int MEDIA_TRACK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int MEDIA_TRACK_TYPE_VIDEO = 1; // 0x1
+  }
+
+  public class MediaRecorder implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection {
+    ctor @Deprecated public MediaRecorder();
+    ctor public MediaRecorder(@NonNull android.content.Context);
+    method public void addOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener, android.os.Handler);
+    method protected void finalize();
+    method public java.util.List<android.media.MicrophoneInfo> getActiveMicrophones() throws java.io.IOException;
+    method @Nullable public android.media.AudioRecordingConfiguration getActiveRecordingConfiguration();
+    method public static final int getAudioSourceMax();
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method public int getMaxAmplitude() throws java.lang.IllegalStateException;
+    method public android.os.PersistableBundle getMetrics();
+    method public android.media.AudioDeviceInfo getPreferredDevice();
+    method public android.media.AudioDeviceInfo getRoutedDevice();
+    method public android.view.Surface getSurface();
+    method public boolean isPrivacySensitive();
+    method public void pause() throws java.lang.IllegalStateException;
+    method public void prepare() throws java.io.IOException, java.lang.IllegalStateException;
+    method public void registerAudioRecordingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioRecordingCallback);
+    method public void release();
+    method public void removeOnRoutingChangedListener(android.media.AudioRouting.OnRoutingChangedListener);
+    method public void reset();
+    method public void resume() throws java.lang.IllegalStateException;
+    method public void setAudioChannels(int);
+    method public void setAudioEncoder(int) throws java.lang.IllegalStateException;
+    method public void setAudioEncodingBitRate(int);
+    method public void setAudioProfile(@NonNull android.media.EncoderProfiles.AudioProfile);
+    method public void setAudioSamplingRate(int);
+    method public void setAudioSource(int) throws java.lang.IllegalStateException;
+    method @Deprecated public void setCamera(android.hardware.Camera);
+    method public void setCaptureRate(double);
+    method public void setInputSurface(@NonNull android.view.Surface);
+    method public void setLocation(float, float);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method public void setMaxDuration(int) throws java.lang.IllegalArgumentException;
+    method public void setMaxFileSize(long) throws java.lang.IllegalArgumentException;
+    method public void setNextOutputFile(java.io.FileDescriptor) throws java.io.IOException;
+    method public void setNextOutputFile(java.io.File) throws java.io.IOException;
+    method public void setOnErrorListener(android.media.MediaRecorder.OnErrorListener);
+    method public void setOnInfoListener(android.media.MediaRecorder.OnInfoListener);
+    method public void setOrientationHint(int);
+    method public void setOutputFile(java.io.FileDescriptor) throws java.lang.IllegalStateException;
+    method public void setOutputFile(java.io.File);
+    method public void setOutputFile(String) throws java.lang.IllegalStateException;
+    method public void setOutputFormat(int) throws java.lang.IllegalStateException;
+    method public boolean setPreferredDevice(android.media.AudioDeviceInfo);
+    method public boolean setPreferredMicrophoneDirection(int);
+    method public boolean setPreferredMicrophoneFieldDimension(@FloatRange(from=-1.0, to=1.0) float);
+    method public void setPreviewDisplay(android.view.Surface);
+    method public void setPrivacySensitive(boolean);
+    method public void setProfile(android.media.CamcorderProfile);
+    method public void setVideoEncoder(int) throws java.lang.IllegalStateException;
+    method public void setVideoEncodingBitRate(int);
+    method public void setVideoEncodingProfileLevel(int, int);
+    method public void setVideoFrameRate(int) throws java.lang.IllegalStateException;
+    method public void setVideoProfile(@NonNull android.media.EncoderProfiles.VideoProfile);
+    method public void setVideoSize(int, int) throws java.lang.IllegalStateException;
+    method public void setVideoSource(int) throws java.lang.IllegalStateException;
+    method public void start() throws java.lang.IllegalStateException;
+    method public void stop() throws java.lang.IllegalStateException;
+    method public void unregisterAudioRecordingCallback(@NonNull android.media.AudioManager.AudioRecordingCallback);
+    field public static final int MEDIA_ERROR_SERVER_DIED = 100; // 0x64
+    field public static final int MEDIA_RECORDER_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int MEDIA_RECORDER_INFO_MAX_DURATION_REACHED = 800; // 0x320
+    field public static final int MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING = 802; // 0x322
+    field public static final int MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED = 801; // 0x321
+    field public static final int MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED = 803; // 0x323
+    field public static final int MEDIA_RECORDER_INFO_UNKNOWN = 1; // 0x1
+  }
+
+  public final class MediaRecorder.AudioEncoder {
+    field public static final int AAC = 3; // 0x3
+    field public static final int AAC_ELD = 5; // 0x5
+    field public static final int AMR_NB = 1; // 0x1
+    field public static final int AMR_WB = 2; // 0x2
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int HE_AAC = 4; // 0x4
+    field public static final int OPUS = 7; // 0x7
+    field public static final int VORBIS = 6; // 0x6
+  }
+
+  public final class MediaRecorder.AudioSource {
+    field public static final int CAMCORDER = 5; // 0x5
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int MIC = 1; // 0x1
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int REMOTE_SUBMIX = 8; // 0x8
+    field public static final int UNPROCESSED = 9; // 0x9
+    field public static final int VOICE_CALL = 4; // 0x4
+    field public static final int VOICE_COMMUNICATION = 7; // 0x7
+    field public static final int VOICE_DOWNLINK = 3; // 0x3
+    field public static final int VOICE_PERFORMANCE = 10; // 0xa
+    field public static final int VOICE_RECOGNITION = 6; // 0x6
+    field public static final int VOICE_UPLINK = 2; // 0x2
+  }
+
+  public static final class MediaRecorder.MetricsConstants {
+    field public static final String AUDIO_BITRATE = "android.media.mediarecorder.audio-bitrate";
+    field public static final String AUDIO_CHANNELS = "android.media.mediarecorder.audio-channels";
+    field public static final String AUDIO_SAMPLERATE = "android.media.mediarecorder.audio-samplerate";
+    field public static final String AUDIO_TIMESCALE = "android.media.mediarecorder.audio-timescale";
+    field public static final String CAPTURE_FPS = "android.media.mediarecorder.capture-fps";
+    field public static final String CAPTURE_FPS_ENABLE = "android.media.mediarecorder.capture-fpsenable";
+    field public static final String FRAMERATE = "android.media.mediarecorder.frame-rate";
+    field public static final String HEIGHT = "android.media.mediarecorder.height";
+    field public static final String MOVIE_TIMESCALE = "android.media.mediarecorder.movie-timescale";
+    field public static final String ROTATION = "android.media.mediarecorder.rotation";
+    field public static final String VIDEO_BITRATE = "android.media.mediarecorder.video-bitrate";
+    field public static final String VIDEO_IFRAME_INTERVAL = "android.media.mediarecorder.video-iframe-interval";
+    field public static final String VIDEO_LEVEL = "android.media.mediarecorder.video-encoder-level";
+    field public static final String VIDEO_PROFILE = "android.media.mediarecorder.video-encoder-profile";
+    field public static final String VIDEO_TIMESCALE = "android.media.mediarecorder.video-timescale";
+    field public static final String WIDTH = "android.media.mediarecorder.width";
+  }
+
+  public static interface MediaRecorder.OnErrorListener {
+    method public void onError(android.media.MediaRecorder, int, int);
+  }
+
+  public static interface MediaRecorder.OnInfoListener {
+    method public void onInfo(android.media.MediaRecorder, int, int);
+  }
+
+  public final class MediaRecorder.OutputFormat {
+    field public static final int AAC_ADTS = 6; // 0x6
+    field public static final int AMR_NB = 3; // 0x3
+    field public static final int AMR_WB = 4; // 0x4
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int MPEG_2_TS = 8; // 0x8
+    field public static final int MPEG_4 = 2; // 0x2
+    field public static final int OGG = 11; // 0xb
+    field @Deprecated public static final int RAW_AMR = 3; // 0x3
+    field public static final int THREE_GPP = 1; // 0x1
+    field public static final int WEBM = 9; // 0x9
+  }
+
+  public final class MediaRecorder.VideoEncoder {
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int H263 = 1; // 0x1
+    field public static final int H264 = 2; // 0x2
+    field public static final int HEVC = 5; // 0x5
+    field public static final int MPEG_4_SP = 3; // 0x3
+    field public static final int VP8 = 4; // 0x4
+  }
+
+  public final class MediaRecorder.VideoSource {
+    field public static final int CAMERA = 1; // 0x1
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int SURFACE = 2; // 0x2
+  }
+
+  public final class MediaRoute2Info implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getClientPackageName();
+    method public int getConnectionState();
+    method @Nullable public CharSequence getDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public java.util.List<java.lang.String> getFeatures();
+    method @Nullable public android.net.Uri getIconUri();
+    method @NonNull public String getId();
+    method @NonNull public CharSequence getName();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public boolean isSystemRoute();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
+    field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
+    field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaRoute2Info> CREATOR;
+    field public static final String FEATURE_LIVE_AUDIO = "android.media.route.feature.LIVE_AUDIO";
+    field public static final String FEATURE_LIVE_VIDEO = "android.media.route.feature.LIVE_VIDEO";
+    field public static final String FEATURE_REMOTE_AUDIO_PLAYBACK = "android.media.route.feature.REMOTE_AUDIO_PLAYBACK";
+    field public static final String FEATURE_REMOTE_PLAYBACK = "android.media.route.feature.REMOTE_PLAYBACK";
+    field public static final String FEATURE_REMOTE_VIDEO_PLAYBACK = "android.media.route.feature.REMOTE_VIDEO_PLAYBACK";
+    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+  }
+
+  public static final class MediaRoute2Info.Builder {
+    ctor public MediaRoute2Info.Builder(@NonNull String, @NonNull CharSequence);
+    ctor public MediaRoute2Info.Builder(@NonNull android.media.MediaRoute2Info);
+    method @NonNull public android.media.MediaRoute2Info.Builder addFeature(@NonNull String);
+    method @NonNull public android.media.MediaRoute2Info.Builder addFeatures(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.media.MediaRoute2Info build();
+    method @NonNull public android.media.MediaRoute2Info.Builder clearFeatures();
+    method @NonNull public android.media.MediaRoute2Info.Builder setClientPackageName(@Nullable String);
+    method @NonNull public android.media.MediaRoute2Info.Builder setConnectionState(int);
+    method @NonNull public android.media.MediaRoute2Info.Builder setDescription(@Nullable CharSequence);
+    method @NonNull public android.media.MediaRoute2Info.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.media.MediaRoute2Info.Builder setIconUri(@Nullable android.net.Uri);
+    method @NonNull public android.media.MediaRoute2Info.Builder setVolume(int);
+    method @NonNull public android.media.MediaRoute2Info.Builder setVolumeHandling(int);
+    method @NonNull public android.media.MediaRoute2Info.Builder setVolumeMax(int);
+  }
+
+  public abstract class MediaRoute2ProviderService extends android.app.Service {
+    ctor public MediaRoute2ProviderService();
+    method @NonNull public final java.util.List<android.media.RoutingSessionInfo> getAllSessionInfo();
+    method @Nullable public final android.media.RoutingSessionInfo getSessionInfo(@NonNull String);
+    method public final void notifyRequestFailed(long, int);
+    method public final void notifyRoutes(@NonNull java.util.Collection<android.media.MediaRoute2Info>);
+    method public final void notifySessionCreated(long, @NonNull android.media.RoutingSessionInfo);
+    method public final void notifySessionReleased(@NonNull String);
+    method public final void notifySessionUpdated(@NonNull android.media.RoutingSessionInfo);
+    method @CallSuper @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCreateSession(long, @NonNull String, @NonNull String, @Nullable android.os.Bundle);
+    method public abstract void onDeselectRoute(long, @NonNull String, @NonNull String);
+    method public void onDiscoveryPreferenceChanged(@NonNull android.media.RouteDiscoveryPreference);
+    method public abstract void onReleaseSession(long, @NonNull String);
+    method public abstract void onSelectRoute(long, @NonNull String, @NonNull String);
+    method public abstract void onSetRouteVolume(long, @NonNull String, int);
+    method public abstract void onSetSessionVolume(long, @NonNull String, int);
+    method public abstract void onTransferToRoute(long, @NonNull String, @NonNull String);
+    field public static final int REASON_INVALID_COMMAND = 4; // 0x4
+    field public static final int REASON_NETWORK_ERROR = 2; // 0x2
+    field public static final int REASON_REJECTED = 1; // 0x1
+    field public static final int REASON_ROUTE_NOT_AVAILABLE = 3; // 0x3
+    field public static final int REASON_UNKNOWN_ERROR = 0; // 0x0
+    field public static final long REQUEST_ID_NONE = 0L; // 0x0L
+    field public static final String SERVICE_INTERFACE = "android.media.MediaRoute2ProviderService";
+  }
+
+  public class MediaRouter {
+    method public void addCallback(int, android.media.MediaRouter.Callback);
+    method public void addCallback(int, android.media.MediaRouter.Callback, int);
+    method public void addUserRoute(android.media.MediaRouter.UserRouteInfo);
+    method public void clearUserRoutes();
+    method public android.media.MediaRouter.RouteCategory createRouteCategory(CharSequence, boolean);
+    method public android.media.MediaRouter.RouteCategory createRouteCategory(int, boolean);
+    method public android.media.MediaRouter.UserRouteInfo createUserRoute(android.media.MediaRouter.RouteCategory);
+    method public android.media.MediaRouter.RouteCategory getCategoryAt(int);
+    method public int getCategoryCount();
+    method public android.media.MediaRouter.RouteInfo getDefaultRoute();
+    method public android.media.MediaRouter.RouteInfo getRouteAt(int);
+    method public int getRouteCount();
+    method public android.media.MediaRouter.RouteInfo getSelectedRoute(int);
+    method public void removeCallback(android.media.MediaRouter.Callback);
+    method public void removeUserRoute(android.media.MediaRouter.UserRouteInfo);
+    method public void selectRoute(int, @NonNull android.media.MediaRouter.RouteInfo);
+    field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1
+    field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2
+    field public static final int ROUTE_TYPE_LIVE_AUDIO = 1; // 0x1
+    field public static final int ROUTE_TYPE_LIVE_VIDEO = 2; // 0x2
+    field public static final int ROUTE_TYPE_USER = 8388608; // 0x800000
+  }
+
+  public abstract static class MediaRouter.Callback {
+    ctor public MediaRouter.Callback();
+    method public abstract void onRouteAdded(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteGrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup, int);
+    method public void onRoutePresentationDisplayChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteRemoved(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup);
+    method public abstract void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public abstract void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+  }
+
+  public static class MediaRouter.RouteCategory {
+    method public CharSequence getName();
+    method public CharSequence getName(android.content.Context);
+    method public java.util.List<android.media.MediaRouter.RouteInfo> getRoutes(java.util.List<android.media.MediaRouter.RouteInfo>);
+    method public int getSupportedTypes();
+    method public boolean isGroupable();
+  }
+
+  public static class MediaRouter.RouteGroup extends android.media.MediaRouter.RouteInfo {
+    method public void addRoute(android.media.MediaRouter.RouteInfo);
+    method public void addRoute(android.media.MediaRouter.RouteInfo, int);
+    method public android.media.MediaRouter.RouteInfo getRouteAt(int);
+    method public int getRouteCount();
+    method public void removeRoute(android.media.MediaRouter.RouteInfo);
+    method public void removeRoute(int);
+    method public void setIconDrawable(android.graphics.drawable.Drawable);
+    method public void setIconResource(@DrawableRes int);
+  }
+
+  public static class MediaRouter.RouteInfo {
+    method public android.media.MediaRouter.RouteCategory getCategory();
+    method public CharSequence getDescription();
+    method public int getDeviceType();
+    method public android.media.MediaRouter.RouteGroup getGroup();
+    method public android.graphics.drawable.Drawable getIconDrawable();
+    method public CharSequence getName();
+    method public CharSequence getName(android.content.Context);
+    method public int getPlaybackStream();
+    method public int getPlaybackType();
+    method public android.view.Display getPresentationDisplay();
+    method public CharSequence getStatus();
+    method public int getSupportedTypes();
+    method public Object getTag();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public boolean isConnecting();
+    method public boolean isEnabled();
+    method public void requestSetVolume(int);
+    method public void requestUpdateVolume(int);
+    method public void setTag(Object);
+    field public static final int DEVICE_TYPE_BLUETOOTH = 3; // 0x3
+    field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+    field public static final int DEVICE_TYPE_TV = 1; // 0x1
+    field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
+    field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
+    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+  }
+
+  public static class MediaRouter.SimpleCallback extends android.media.MediaRouter.Callback {
+    ctor public MediaRouter.SimpleCallback();
+    method public void onRouteAdded(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public void onRouteChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public void onRouteGrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup, int);
+    method public void onRouteRemoved(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+    method public void onRouteSelected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public void onRouteUngrouped(android.media.MediaRouter, android.media.MediaRouter.RouteInfo, android.media.MediaRouter.RouteGroup);
+    method public void onRouteUnselected(android.media.MediaRouter, int, android.media.MediaRouter.RouteInfo);
+    method public void onRouteVolumeChanged(android.media.MediaRouter, android.media.MediaRouter.RouteInfo);
+  }
+
+  public static class MediaRouter.UserRouteInfo extends android.media.MediaRouter.RouteInfo {
+    method public android.media.RemoteControlClient getRemoteControlClient();
+    method public void setDescription(CharSequence);
+    method public void setIconDrawable(android.graphics.drawable.Drawable);
+    method public void setIconResource(@DrawableRes int);
+    method public void setName(CharSequence);
+    method public void setName(int);
+    method public void setPlaybackStream(int);
+    method public void setPlaybackType(int);
+    method public void setRemoteControlClient(android.media.RemoteControlClient);
+    method public void setStatus(CharSequence);
+    method public void setVolume(int);
+    method public void setVolumeCallback(android.media.MediaRouter.VolumeCallback);
+    method public void setVolumeHandling(int);
+    method public void setVolumeMax(int);
+  }
+
+  public abstract static class MediaRouter.VolumeCallback {
+    ctor public MediaRouter.VolumeCallback();
+    method public abstract void onVolumeSetRequest(android.media.MediaRouter.RouteInfo, int);
+    method public abstract void onVolumeUpdateRequest(android.media.MediaRouter.RouteInfo, int);
+  }
+
+  public final class MediaRouter2 {
+    method @Nullable public android.media.MediaRouter2.RoutingController getController(@NonNull String);
+    method @NonNull public java.util.List<android.media.MediaRouter2.RoutingController> getControllers();
+    method @NonNull public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context);
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getRoutes();
+    method @NonNull public android.media.MediaRouter2.RoutingController getSystemController();
+    method public void registerControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.ControllerCallback);
+    method public void registerRouteCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.RouteCallback, @NonNull android.media.RouteDiscoveryPreference);
+    method public void registerTransferCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaRouter2.TransferCallback);
+    method public void setOnGetControllerHintsListener(@Nullable android.media.MediaRouter2.OnGetControllerHintsListener);
+    method public void stop();
+    method public void transferTo(@NonNull android.media.MediaRoute2Info);
+    method public void unregisterControllerCallback(@NonNull android.media.MediaRouter2.ControllerCallback);
+    method public void unregisterRouteCallback(@NonNull android.media.MediaRouter2.RouteCallback);
+    method public void unregisterTransferCallback(@NonNull android.media.MediaRouter2.TransferCallback);
+  }
+
+  public abstract static class MediaRouter2.ControllerCallback {
+    ctor public MediaRouter2.ControllerCallback();
+    method public void onControllerUpdated(@NonNull android.media.MediaRouter2.RoutingController);
+  }
+
+  public static interface MediaRouter2.OnGetControllerHintsListener {
+    method @Nullable public android.os.Bundle onGetControllerHints(@NonNull android.media.MediaRoute2Info);
+  }
+
+  public abstract static class MediaRouter2.RouteCallback {
+    ctor public MediaRouter2.RouteCallback();
+    method public void onRoutesAdded(@NonNull java.util.List<android.media.MediaRoute2Info>);
+    method public void onRoutesChanged(@NonNull java.util.List<android.media.MediaRoute2Info>);
+    method public void onRoutesRemoved(@NonNull java.util.List<android.media.MediaRoute2Info>);
+  }
+
+  public class MediaRouter2.RoutingController {
+    method public void deselectRoute(@NonNull android.media.MediaRoute2Info);
+    method @Nullable public android.os.Bundle getControlHints();
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getDeselectableRoutes();
+    method @NonNull public String getId();
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectableRoutes();
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getSelectedRoutes();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public boolean isReleased();
+    method public void release();
+    method public void selectRoute(@NonNull android.media.MediaRoute2Info);
+    method public void setVolume(int);
+  }
+
+  public abstract static class MediaRouter2.TransferCallback {
+    ctor public MediaRouter2.TransferCallback();
+    method public void onStop(@NonNull android.media.MediaRouter2.RoutingController);
+    method public void onTransfer(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRouter2.RoutingController);
+    method public void onTransferFailure(@NonNull android.media.MediaRoute2Info);
+  }
+
+  public class MediaScannerConnection implements android.content.ServiceConnection {
+    ctor public MediaScannerConnection(android.content.Context, android.media.MediaScannerConnection.MediaScannerConnectionClient);
+    method public void connect();
+    method public void disconnect();
+    method public boolean isConnected();
+    method public void onServiceConnected(android.content.ComponentName, android.os.IBinder);
+    method public void onServiceDisconnected(android.content.ComponentName);
+    method public void scanFile(String, String);
+    method public static void scanFile(android.content.Context, String[], String[], android.media.MediaScannerConnection.OnScanCompletedListener);
+  }
+
+  public static interface MediaScannerConnection.MediaScannerConnectionClient extends android.media.MediaScannerConnection.OnScanCompletedListener {
+    method public void onMediaScannerConnected();
+  }
+
+  public static interface MediaScannerConnection.OnScanCompletedListener {
+    method public void onScanCompleted(String, android.net.Uri);
+  }
+
+  public class MediaSession2 implements java.lang.AutoCloseable {
+    method public void broadcastSessionCommand(@NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+    method public void cancelSessionCommand(@NonNull android.media.MediaSession2.ControllerInfo, @NonNull Object);
+    method public void close();
+    method @NonNull public java.util.List<android.media.MediaSession2.ControllerInfo> getConnectedControllers();
+    method @NonNull public String getId();
+    method @NonNull public android.media.Session2Token getToken();
+    method public boolean isPlaybackActive();
+    method @NonNull public Object sendSessionCommand(@NonNull android.media.MediaSession2.ControllerInfo, @NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+    method public void setPlaybackActive(boolean);
+  }
+
+  public static final class MediaSession2.Builder {
+    ctor public MediaSession2.Builder(@NonNull android.content.Context);
+    method @NonNull public android.media.MediaSession2 build();
+    method @NonNull public android.media.MediaSession2.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.media.MediaSession2.Builder setId(@NonNull String);
+    method @NonNull public android.media.MediaSession2.Builder setSessionActivity(@Nullable android.app.PendingIntent);
+    method @NonNull public android.media.MediaSession2.Builder setSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaSession2.SessionCallback);
+  }
+
+  public static final class MediaSession2.ControllerInfo {
+    method @NonNull public android.os.Bundle getConnectionHints();
+    method @NonNull public String getPackageName();
+    method @NonNull public android.media.session.MediaSessionManager.RemoteUserInfo getRemoteUserInfo();
+    method public int getUid();
+  }
+
+  public abstract static class MediaSession2.SessionCallback {
+    ctor public MediaSession2.SessionCallback();
+    method public void onCommandResult(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo, @NonNull Object, @NonNull android.media.Session2Command, @NonNull android.media.Session2Command.Result);
+    method @Nullable public android.media.Session2CommandGroup onConnect(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo);
+    method public void onDisconnected(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo);
+    method public void onPostConnect(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo);
+    method @Nullable public android.media.Session2Command.Result onSessionCommand(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo, @NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+  }
+
+  public abstract class MediaSession2Service extends android.app.Service {
+    ctor public MediaSession2Service();
+    method public final void addSession(@NonNull android.media.MediaSession2);
+    method @NonNull public final java.util.List<android.media.MediaSession2> getSessions();
+    method @CallSuper @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @Nullable public abstract android.media.MediaSession2 onGetSession(@NonNull android.media.MediaSession2.ControllerInfo);
+    method @Nullable public abstract android.media.MediaSession2Service.MediaNotification onUpdateNotification(@NonNull android.media.MediaSession2);
+    method public final void removeSession(@NonNull android.media.MediaSession2);
+    field public static final String SERVICE_INTERFACE = "android.media.MediaSession2Service";
+  }
+
+  public static class MediaSession2Service.MediaNotification {
+    ctor public MediaSession2Service.MediaNotification(int, @NonNull android.app.Notification);
+    method @NonNull public android.app.Notification getNotification();
+    method public int getNotificationId();
+  }
+
+  public final class MediaSync {
+    ctor public MediaSync();
+    method @NonNull public android.view.Surface createInputSurface();
+    method protected void finalize();
+    method public void flush();
+    method @NonNull public android.media.PlaybackParams getPlaybackParams();
+    method @NonNull public android.media.SyncParams getSyncParams();
+    method @Nullable public android.media.MediaTimestamp getTimestamp();
+    method public void queueAudio(@NonNull java.nio.ByteBuffer, int, long);
+    method public void release();
+    method public void setAudioTrack(@Nullable android.media.AudioTrack);
+    method public void setCallback(@Nullable android.media.MediaSync.Callback, @Nullable android.os.Handler);
+    method public void setOnErrorListener(@Nullable android.media.MediaSync.OnErrorListener, @Nullable android.os.Handler);
+    method public void setPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public void setSurface(@Nullable android.view.Surface);
+    method public void setSyncParams(@NonNull android.media.SyncParams);
+    field public static final int MEDIASYNC_ERROR_AUDIOTRACK_FAIL = 1; // 0x1
+    field public static final int MEDIASYNC_ERROR_SURFACE_FAIL = 2; // 0x2
+  }
+
+  public abstract static class MediaSync.Callback {
+    ctor public MediaSync.Callback();
+    method public abstract void onAudioBufferConsumed(@NonNull android.media.MediaSync, @NonNull java.nio.ByteBuffer, int);
+  }
+
+  public static interface MediaSync.OnErrorListener {
+    method public void onError(@NonNull android.media.MediaSync, int, int);
+  }
+
+  public class MediaSyncEvent implements android.os.Parcelable {
+    method public static android.media.MediaSyncEvent createEvent(int) throws java.lang.IllegalArgumentException;
+    method public int describeContents();
+    method public int getAudioSessionId();
+    method public int getType();
+    method public android.media.MediaSyncEvent setAudioSessionId(int) throws java.lang.IllegalArgumentException;
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.MediaSyncEvent> CREATOR;
+    field public static final int SYNC_EVENT_NONE = 0; // 0x0
+    field public static final int SYNC_EVENT_PRESENTATION_COMPLETE = 1; // 0x1
+  }
+
+  public final class MediaTimestamp {
+    ctor public MediaTimestamp(long, long, @FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) float);
+    method public long getAnchorMediaTimeUs();
+    method public long getAnchorSystemNanoTime();
+    method @Deprecated public long getAnchorSytemNanoTime();
+    method @FloatRange(from=0.0f, to=java.lang.Float.MAX_VALUE) public float getMediaClockRate();
+    field public static final android.media.MediaTimestamp TIMESTAMP_UNKNOWN;
+  }
+
+  public interface MicrophoneDirection {
+    method public boolean setPreferredMicrophoneDirection(int);
+    method public boolean setPreferredMicrophoneFieldDimension(@FloatRange(from=-1.0, to=1.0) float);
+    field public static final int MIC_DIRECTION_AWAY_FROM_USER = 2; // 0x2
+    field public static final int MIC_DIRECTION_EXTERNAL = 3; // 0x3
+    field public static final int MIC_DIRECTION_TOWARDS_USER = 1; // 0x1
+    field public static final int MIC_DIRECTION_UNSPECIFIED = 0; // 0x0
+  }
+
+  public final class MicrophoneInfo {
+    method @NonNull public String getAddress();
+    method public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getChannelMapping();
+    method public String getDescription();
+    method public int getDirectionality();
+    method public java.util.List<android.util.Pair<java.lang.Float,java.lang.Float>> getFrequencyResponse();
+    method public int getGroup();
+    method public int getId();
+    method public int getIndexInTheGroup();
+    method public int getLocation();
+    method public float getMaxSpl();
+    method public float getMinSpl();
+    method public android.media.MicrophoneInfo.Coordinate3F getOrientation();
+    method public android.media.MicrophoneInfo.Coordinate3F getPosition();
+    method public float getSensitivity();
+    method public int getType();
+    field public static final int CHANNEL_MAPPING_DIRECT = 1; // 0x1
+    field public static final int CHANNEL_MAPPING_PROCESSED = 2; // 0x2
+    field public static final int DIRECTIONALITY_BI_DIRECTIONAL = 2; // 0x2
+    field public static final int DIRECTIONALITY_CARDIOID = 3; // 0x3
+    field public static final int DIRECTIONALITY_HYPER_CARDIOID = 4; // 0x4
+    field public static final int DIRECTIONALITY_OMNI = 1; // 0x1
+    field public static final int DIRECTIONALITY_SUPER_CARDIOID = 5; // 0x5
+    field public static final int DIRECTIONALITY_UNKNOWN = 0; // 0x0
+    field public static final int GROUP_UNKNOWN = -1; // 0xffffffff
+    field public static final int INDEX_IN_THE_GROUP_UNKNOWN = -1; // 0xffffffff
+    field public static final int LOCATION_MAINBODY = 1; // 0x1
+    field public static final int LOCATION_MAINBODY_MOVABLE = 2; // 0x2
+    field public static final int LOCATION_PERIPHERAL = 3; // 0x3
+    field public static final int LOCATION_UNKNOWN = 0; // 0x0
+    field public static final android.media.MicrophoneInfo.Coordinate3F ORIENTATION_UNKNOWN;
+    field public static final android.media.MicrophoneInfo.Coordinate3F POSITION_UNKNOWN;
+    field public static final float SENSITIVITY_UNKNOWN = -3.4028235E38f;
+    field public static final float SPL_UNKNOWN = -3.4028235E38f;
+  }
+
+  public static final class MicrophoneInfo.Coordinate3F {
+    field public final float x;
+    field public final float y;
+    field public final float z;
+  }
+
+  public final class NotProvisionedException extends android.media.MediaDrmException {
+    ctor public NotProvisionedException(String);
+  }
+
+  public final class PlaybackParams implements android.os.Parcelable {
+    ctor public PlaybackParams();
+    method public android.media.PlaybackParams allowDefaults();
+    method public int describeContents();
+    method public int getAudioFallbackMode();
+    method public float getPitch();
+    method public float getSpeed();
+    method public android.media.PlaybackParams setAudioFallbackMode(int);
+    method public android.media.PlaybackParams setPitch(float);
+    method public android.media.PlaybackParams setSpeed(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_FALLBACK_MODE_DEFAULT = 0; // 0x0
+    field public static final int AUDIO_FALLBACK_MODE_FAIL = 2; // 0x2
+    field public static final int AUDIO_FALLBACK_MODE_MUTE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.PlaybackParams> CREATOR;
+  }
+
+  public final class Rating implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getPercentRating();
+    method public int getRatingStyle();
+    method public float getStarRating();
+    method public boolean hasHeart();
+    method public boolean isRated();
+    method public boolean isThumbUp();
+    method public static android.media.Rating newHeartRating(boolean);
+    method public static android.media.Rating newPercentageRating(float);
+    method public static android.media.Rating newStarRating(int, float);
+    method public static android.media.Rating newThumbRating(boolean);
+    method public static android.media.Rating newUnratedRating(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Rating> CREATOR;
+    field public static final int RATING_3_STARS = 3; // 0x3
+    field public static final int RATING_4_STARS = 4; // 0x4
+    field public static final int RATING_5_STARS = 5; // 0x5
+    field public static final int RATING_HEART = 1; // 0x1
+    field public static final int RATING_NONE = 0; // 0x0
+    field public static final int RATING_PERCENTAGE = 6; // 0x6
+    field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
+  }
+
+  @Deprecated public class RemoteControlClient {
+    ctor @Deprecated public RemoteControlClient(android.app.PendingIntent);
+    ctor @Deprecated public RemoteControlClient(android.app.PendingIntent, android.os.Looper);
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor editMetadata(boolean);
+    method @Deprecated public android.media.session.MediaSession getMediaSession();
+    method @Deprecated public void setMetadataUpdateListener(android.media.RemoteControlClient.OnMetadataUpdateListener);
+    method @Deprecated public void setOnGetPlaybackPositionListener(android.media.RemoteControlClient.OnGetPlaybackPositionListener);
+    method @Deprecated public void setPlaybackPositionUpdateListener(android.media.RemoteControlClient.OnPlaybackPositionUpdateListener);
+    method @Deprecated public void setPlaybackState(int);
+    method @Deprecated public void setPlaybackState(int, long, float);
+    method @Deprecated public void setTransportControlFlags(int);
+    field @Deprecated public static final int FLAG_KEY_MEDIA_FAST_FORWARD = 64; // 0x40
+    field @Deprecated public static final int FLAG_KEY_MEDIA_NEXT = 128; // 0x80
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PAUSE = 16; // 0x10
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PLAY = 4; // 0x4
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PLAY_PAUSE = 8; // 0x8
+    field @Deprecated public static final int FLAG_KEY_MEDIA_POSITION_UPDATE = 256; // 0x100
+    field @Deprecated public static final int FLAG_KEY_MEDIA_PREVIOUS = 1; // 0x1
+    field @Deprecated public static final int FLAG_KEY_MEDIA_RATING = 512; // 0x200
+    field @Deprecated public static final int FLAG_KEY_MEDIA_REWIND = 2; // 0x2
+    field @Deprecated public static final int FLAG_KEY_MEDIA_STOP = 32; // 0x20
+    field @Deprecated public static final int PLAYSTATE_BUFFERING = 8; // 0x8
+    field @Deprecated public static final int PLAYSTATE_ERROR = 9; // 0x9
+    field @Deprecated public static final int PLAYSTATE_FAST_FORWARDING = 4; // 0x4
+    field @Deprecated public static final int PLAYSTATE_PAUSED = 2; // 0x2
+    field @Deprecated public static final int PLAYSTATE_PLAYING = 3; // 0x3
+    field @Deprecated public static final int PLAYSTATE_REWINDING = 5; // 0x5
+    field @Deprecated public static final int PLAYSTATE_SKIPPING_BACKWARDS = 7; // 0x7
+    field @Deprecated public static final int PLAYSTATE_SKIPPING_FORWARDS = 6; // 0x6
+    field @Deprecated public static final int PLAYSTATE_STOPPED = 1; // 0x1
+  }
+
+  @Deprecated public class RemoteControlClient.MetadataEditor extends android.media.MediaMetadataEditor {
+    method @Deprecated public void apply();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putBitmap(int, android.graphics.Bitmap) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putLong(int, long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putObject(int, Object) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.media.RemoteControlClient.MetadataEditor putString(int, String) throws java.lang.IllegalArgumentException;
+    field @Deprecated public static final int BITMAP_KEY_ARTWORK = 100; // 0x64
+  }
+
+  @Deprecated public static interface RemoteControlClient.OnGetPlaybackPositionListener {
+    method @Deprecated public long onGetPlaybackPosition();
+  }
+
+  @Deprecated public static interface RemoteControlClient.OnMetadataUpdateListener {
+    method @Deprecated public void onMetadataUpdate(int, Object);
+  }
+
+  @Deprecated public static interface RemoteControlClient.OnPlaybackPositionUpdateListener {
+    method @Deprecated public void onPlaybackPositionUpdate(long);
+  }
+
+  @Deprecated public final class RemoteController {
+    ctor @Deprecated public RemoteController(android.content.Context, android.media.RemoteController.OnClientUpdateListener) throws java.lang.IllegalArgumentException;
+    ctor @Deprecated public RemoteController(android.content.Context, android.media.RemoteController.OnClientUpdateListener, android.os.Looper) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean clearArtworkConfiguration();
+    method @Deprecated public android.media.RemoteController.MetadataEditor editMetadata();
+    method @Deprecated public long getEstimatedMediaPosition();
+    method @Deprecated public boolean seekTo(long) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean sendMediaKeyEvent(android.view.KeyEvent) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean setArtworkConfiguration(int, int) throws java.lang.IllegalArgumentException;
+    method @Deprecated public boolean setSynchronizationMode(int) throws java.lang.IllegalArgumentException;
+    field @Deprecated public static final int POSITION_SYNCHRONIZATION_CHECK = 1; // 0x1
+    field @Deprecated public static final int POSITION_SYNCHRONIZATION_NONE = 0; // 0x0
+  }
+
+  @Deprecated public class RemoteController.MetadataEditor extends android.media.MediaMetadataEditor {
+    method @Deprecated public void apply();
+  }
+
+  @Deprecated public static interface RemoteController.OnClientUpdateListener {
+    method @Deprecated public void onClientChange(boolean);
+    method @Deprecated public void onClientMetadataUpdate(android.media.RemoteController.MetadataEditor);
+    method @Deprecated public void onClientPlaybackStateUpdate(int);
+    method @Deprecated public void onClientPlaybackStateUpdate(int, long, long, float);
+    method @Deprecated public void onClientTransportControlUpdate(int);
+  }
+
+  public final class ResourceBusyException extends android.media.MediaDrmException {
+    ctor public ResourceBusyException(String);
+  }
+
+  public class Ringtone {
+    method protected void finalize();
+    method public android.media.AudioAttributes getAudioAttributes();
+    method @Deprecated public int getStreamType();
+    method public String getTitle(android.content.Context);
+    method public float getVolume();
+    method public boolean isHapticGeneratorEnabled();
+    method public boolean isLooping();
+    method public boolean isPlaying();
+    method public void play();
+    method public void setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public boolean setHapticGeneratorEnabled(boolean);
+    method public void setLooping(boolean);
+    method @Deprecated public void setStreamType(int);
+    method public void setVolume(float);
+    method public void stop();
+  }
+
+  public class RingtoneManager {
+    ctor public RingtoneManager(android.app.Activity);
+    ctor public RingtoneManager(android.content.Context);
+    method public static android.net.Uri getActualDefaultRingtoneUri(android.content.Context, int);
+    method public android.database.Cursor getCursor();
+    method public static int getDefaultType(android.net.Uri);
+    method public static android.net.Uri getDefaultUri(int);
+    method @Deprecated public boolean getIncludeDrm();
+    method public android.media.Ringtone getRingtone(int);
+    method public static android.media.Ringtone getRingtone(android.content.Context, android.net.Uri);
+    method public int getRingtonePosition(android.net.Uri);
+    method public android.net.Uri getRingtoneUri(int);
+    method public boolean getStopPreviousRingtone();
+    method public static android.net.Uri getValidRingtoneUri(android.content.Context);
+    method public boolean hasHapticChannels(int);
+    method public static boolean hasHapticChannels(@NonNull android.net.Uri);
+    method public int inferStreamType();
+    method public static boolean isDefault(android.net.Uri);
+    method @Nullable public static android.content.res.AssetFileDescriptor openDefaultRingtoneUri(@NonNull android.content.Context, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static void setActualDefaultRingtoneUri(android.content.Context, int, android.net.Uri);
+    method @Deprecated public void setIncludeDrm(boolean);
+    method public void setStopPreviousRingtone(boolean);
+    method public void setType(int);
+    method public void stopPreviousRingtone();
+    field public static final String ACTION_RINGTONE_PICKER = "android.intent.action.RINGTONE_PICKER";
+    field public static final String EXTRA_RINGTONE_DEFAULT_URI = "android.intent.extra.ringtone.DEFAULT_URI";
+    field public static final String EXTRA_RINGTONE_EXISTING_URI = "android.intent.extra.ringtone.EXISTING_URI";
+    field @Deprecated public static final String EXTRA_RINGTONE_INCLUDE_DRM = "android.intent.extra.ringtone.INCLUDE_DRM";
+    field public static final String EXTRA_RINGTONE_PICKED_URI = "android.intent.extra.ringtone.PICKED_URI";
+    field public static final String EXTRA_RINGTONE_SHOW_DEFAULT = "android.intent.extra.ringtone.SHOW_DEFAULT";
+    field public static final String EXTRA_RINGTONE_SHOW_SILENT = "android.intent.extra.ringtone.SHOW_SILENT";
+    field public static final String EXTRA_RINGTONE_TITLE = "android.intent.extra.ringtone.TITLE";
+    field public static final String EXTRA_RINGTONE_TYPE = "android.intent.extra.ringtone.TYPE";
+    field public static final int ID_COLUMN_INDEX = 0; // 0x0
+    field public static final int TITLE_COLUMN_INDEX = 1; // 0x1
+    field public static final int TYPE_ALARM = 4; // 0x4
+    field public static final int TYPE_ALL = 7; // 0x7
+    field public static final int TYPE_NOTIFICATION = 2; // 0x2
+    field public static final int TYPE_RINGTONE = 1; // 0x1
+    field public static final int URI_COLUMN_INDEX = 2; // 0x2
+  }
+
+  public final class RouteDiscoveryPreference implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getPreferredFeatures();
+    method public boolean shouldPerformActiveScan();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.RouteDiscoveryPreference> CREATOR;
+  }
+
+  public static final class RouteDiscoveryPreference.Builder {
+    ctor public RouteDiscoveryPreference.Builder(@NonNull java.util.List<java.lang.String>, boolean);
+    ctor public RouteDiscoveryPreference.Builder(@NonNull android.media.RouteDiscoveryPreference);
+    method @NonNull public android.media.RouteDiscoveryPreference build();
+    method @NonNull public android.media.RouteDiscoveryPreference.Builder setPreferredFeatures(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public android.media.RouteDiscoveryPreference.Builder setShouldPerformActiveScan(boolean);
+  }
+
+  public final class RoutingSessionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getClientPackageName();
+    method @Nullable public android.os.Bundle getControlHints();
+    method @NonNull public java.util.List<java.lang.String> getDeselectableRoutes();
+    method @NonNull public String getId();
+    method @Nullable public CharSequence getName();
+    method @NonNull public java.util.List<java.lang.String> getSelectableRoutes();
+    method @NonNull public java.util.List<java.lang.String> getSelectedRoutes();
+    method @NonNull public java.util.List<java.lang.String> getTransferableRoutes();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.RoutingSessionInfo> CREATOR;
+  }
+
+  public static final class RoutingSessionInfo.Builder {
+    ctor public RoutingSessionInfo.Builder(@NonNull String, @NonNull String);
+    ctor public RoutingSessionInfo.Builder(@NonNull android.media.RoutingSessionInfo);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addDeselectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addSelectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addSelectedRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder addTransferableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo build();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearDeselectableRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectableRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearSelectedRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder clearTransferableRoutes();
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeDeselectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeSelectedRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder removeTransferableRoute(@NonNull String);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setControlHints(@Nullable android.os.Bundle);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setName(@Nullable CharSequence);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolume(int);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeHandling(int);
+    method @NonNull public android.media.RoutingSessionInfo.Builder setVolumeMax(int);
+  }
+
+  public final class Session2Command implements android.os.Parcelable {
+    ctor public Session2Command(int);
+    ctor public Session2Command(@NonNull String, @Nullable android.os.Bundle);
+    method public int describeContents();
+    method public int getCommandCode();
+    method @Nullable public String getCustomAction();
+    method @Nullable public android.os.Bundle getCustomExtras();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int COMMAND_CODE_CUSTOM = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2Command> CREATOR;
+  }
+
+  public static final class Session2Command.Result {
+    ctor public Session2Command.Result(int, @Nullable android.os.Bundle);
+    method public int getResultCode();
+    method @Nullable public android.os.Bundle getResultData();
+    field public static final int RESULT_ERROR_UNKNOWN_ERROR = -1; // 0xffffffff
+    field public static final int RESULT_INFO_SKIPPED = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public final class Session2CommandGroup implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.media.Session2Command> getCommands();
+    method public boolean hasCommand(@NonNull android.media.Session2Command);
+    method public boolean hasCommand(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2CommandGroup> CREATOR;
+  }
+
+  public static final class Session2CommandGroup.Builder {
+    ctor public Session2CommandGroup.Builder();
+    ctor public Session2CommandGroup.Builder(@NonNull android.media.Session2CommandGroup);
+    method @NonNull public android.media.Session2CommandGroup.Builder addCommand(@NonNull android.media.Session2Command);
+    method @NonNull public android.media.Session2CommandGroup build();
+    method @NonNull public android.media.Session2CommandGroup.Builder removeCommand(@NonNull android.media.Session2Command);
+  }
+
+  public final class Session2Token implements android.os.Parcelable {
+    ctor public Session2Token(@NonNull android.content.Context, @NonNull android.content.ComponentName);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getPackageName();
+    method @Nullable public String getServiceName();
+    method public int getType();
+    method public int getUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2Token> CREATOR;
+    field public static final int TYPE_SESSION = 0; // 0x0
+    field public static final int TYPE_SESSION_SERVICE = 1; // 0x1
+  }
+
+  public class SoundPool {
+    ctor @Deprecated public SoundPool(int, int, int);
+    method public final void autoPause();
+    method public final void autoResume();
+    method protected void finalize();
+    method public int load(String, int);
+    method public int load(android.content.Context, int, int);
+    method public int load(android.content.res.AssetFileDescriptor, int);
+    method public int load(java.io.FileDescriptor, long, long, int);
+    method public final void pause(int);
+    method public final int play(int, float, float, int, int, float);
+    method public final void release();
+    method public final void resume(int);
+    method public final void setLoop(int, int);
+    method public void setOnLoadCompleteListener(android.media.SoundPool.OnLoadCompleteListener);
+    method public final void setPriority(int, int);
+    method public final void setRate(int, float);
+    method public final void setVolume(int, float, float);
+    method public final void stop(int);
+    method public final boolean unload(int);
+  }
+
+  public static class SoundPool.Builder {
+    ctor public SoundPool.Builder();
+    method public android.media.SoundPool build();
+    method public android.media.SoundPool.Builder setAudioAttributes(android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method public android.media.SoundPool.Builder setMaxStreams(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public static interface SoundPool.OnLoadCompleteListener {
+    method public void onLoadComplete(android.media.SoundPool, int, int);
+  }
+
+  public class Spatializer {
+    method public void addOnSpatializerStateChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnSpatializerStateChangedListener);
+    method public boolean canBeSpatialized(@NonNull android.media.AudioAttributes, @NonNull android.media.AudioFormat);
+    method public int getImmersiveAudioLevel();
+    method public boolean isAvailable();
+    method public boolean isEnabled();
+    method public void removeOnSpatializerStateChangedListener(@NonNull android.media.Spatializer.OnSpatializerStateChangedListener);
+    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL = 1; // 0x1
+    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_NONE = 0; // 0x0
+    field public static final int SPATIALIZER_IMMERSIVE_LEVEL_OTHER = -1; // 0xffffffff
+  }
+
+  public static interface Spatializer.OnSpatializerStateChangedListener {
+    method public void onSpatializerAvailableChanged(@NonNull android.media.Spatializer, boolean);
+    method public void onSpatializerEnabledChanged(@NonNull android.media.Spatializer, boolean);
+  }
+
+  public final class SubtitleData {
+    ctor public SubtitleData(int, long, long, @NonNull byte[]);
+    method @NonNull public byte[] getData();
+    method public long getDurationUs();
+    method public long getStartTimeUs();
+    method public int getTrackIndex();
+  }
+
+  public final class SyncParams {
+    ctor public SyncParams();
+    method public android.media.SyncParams allowDefaults();
+    method public int getAudioAdjustMode();
+    method public float getFrameRate();
+    method public int getSyncSource();
+    method public float getTolerance();
+    method public android.media.SyncParams setAudioAdjustMode(int);
+    method public android.media.SyncParams setFrameRate(float);
+    method public android.media.SyncParams setSyncSource(int);
+    method public android.media.SyncParams setTolerance(float);
+    field public static final int AUDIO_ADJUST_MODE_DEFAULT = 0; // 0x0
+    field public static final int AUDIO_ADJUST_MODE_RESAMPLE = 2; // 0x2
+    field public static final int AUDIO_ADJUST_MODE_STRETCH = 1; // 0x1
+    field public static final int SYNC_SOURCE_AUDIO = 2; // 0x2
+    field public static final int SYNC_SOURCE_DEFAULT = 0; // 0x0
+    field public static final int SYNC_SOURCE_SYSTEM_CLOCK = 1; // 0x1
+    field public static final int SYNC_SOURCE_VSYNC = 3; // 0x3
+  }
+
+  public class ThumbnailUtils {
+    ctor public ThumbnailUtils();
+    method @Deprecated @Nullable public static android.graphics.Bitmap createAudioThumbnail(@NonNull String, int);
+    method @NonNull public static android.graphics.Bitmap createAudioThumbnail(@NonNull java.io.File, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method @Deprecated @Nullable public static android.graphics.Bitmap createImageThumbnail(@NonNull String, int);
+    method @NonNull public static android.graphics.Bitmap createImageThumbnail(@NonNull java.io.File, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method @Deprecated @Nullable public static android.graphics.Bitmap createVideoThumbnail(@NonNull String, int);
+    method @NonNull public static android.graphics.Bitmap createVideoThumbnail(@NonNull java.io.File, @NonNull android.util.Size, @Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method public static android.graphics.Bitmap extractThumbnail(android.graphics.Bitmap, int, int);
+    method public static android.graphics.Bitmap extractThumbnail(android.graphics.Bitmap, int, int, int);
+    field public static final int OPTIONS_RECYCLE_INPUT = 2; // 0x2
+  }
+
+  public final class TimedMetaData {
+    ctor public TimedMetaData(long, @NonNull byte[]);
+    method public byte[] getMetaData();
+    method public long getTimestamp();
+  }
+
+  public final class TimedText {
+    method public android.graphics.Rect getBounds();
+    method public String getText();
+  }
+
+  public class ToneGenerator {
+    ctor public ToneGenerator(int, int);
+    method protected void finalize();
+    method public final int getAudioSessionId();
+    method public void release();
+    method public boolean startTone(int);
+    method public boolean startTone(int, int);
+    method public void stopTone();
+    field public static final int MAX_VOLUME = 100; // 0x64
+    field public static final int MIN_VOLUME = 0; // 0x0
+    field public static final int TONE_CDMA_ABBR_ALERT = 97; // 0x61
+    field public static final int TONE_CDMA_ABBR_INTERCEPT = 37; // 0x25
+    field public static final int TONE_CDMA_ABBR_REORDER = 39; // 0x27
+    field public static final int TONE_CDMA_ALERT_AUTOREDIAL_LITE = 87; // 0x57
+    field public static final int TONE_CDMA_ALERT_CALL_GUARD = 93; // 0x5d
+    field public static final int TONE_CDMA_ALERT_INCALL_LITE = 91; // 0x5b
+    field public static final int TONE_CDMA_ALERT_NETWORK_LITE = 86; // 0x56
+    field public static final int TONE_CDMA_ANSWER = 42; // 0x2a
+    field public static final int TONE_CDMA_CALLDROP_LITE = 95; // 0x5f
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP = 46; // 0x2e
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL = 45; // 0x2d
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 = 48; // 0x30
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 = 50; // 0x32
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 = 51; // 0x33
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 = 52; // 0x34
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING = 49; // 0x31
+    field public static final int TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI = 47; // 0x2f
+    field public static final int TONE_CDMA_CONFIRM = 41; // 0x29
+    field public static final int TONE_CDMA_DIAL_TONE_LITE = 34; // 0x22
+    field public static final int TONE_CDMA_EMERGENCY_RINGBACK = 92; // 0x5c
+    field public static final int TONE_CDMA_HIGH_L = 53; // 0x35
+    field public static final int TONE_CDMA_HIGH_PBX_L = 71; // 0x47
+    field public static final int TONE_CDMA_HIGH_PBX_SLS = 80; // 0x50
+    field public static final int TONE_CDMA_HIGH_PBX_SS = 74; // 0x4a
+    field public static final int TONE_CDMA_HIGH_PBX_SSL = 77; // 0x4d
+    field public static final int TONE_CDMA_HIGH_PBX_S_X4 = 83; // 0x53
+    field public static final int TONE_CDMA_HIGH_SLS = 65; // 0x41
+    field public static final int TONE_CDMA_HIGH_SS = 56; // 0x38
+    field public static final int TONE_CDMA_HIGH_SSL = 59; // 0x3b
+    field public static final int TONE_CDMA_HIGH_SS_2 = 62; // 0x3e
+    field public static final int TONE_CDMA_HIGH_S_X4 = 68; // 0x44
+    field public static final int TONE_CDMA_INTERCEPT = 36; // 0x24
+    field public static final int TONE_CDMA_KEYPAD_VOLUME_KEY_LITE = 89; // 0x59
+    field public static final int TONE_CDMA_LOW_L = 55; // 0x37
+    field public static final int TONE_CDMA_LOW_PBX_L = 73; // 0x49
+    field public static final int TONE_CDMA_LOW_PBX_SLS = 82; // 0x52
+    field public static final int TONE_CDMA_LOW_PBX_SS = 76; // 0x4c
+    field public static final int TONE_CDMA_LOW_PBX_SSL = 79; // 0x4f
+    field public static final int TONE_CDMA_LOW_PBX_S_X4 = 85; // 0x55
+    field public static final int TONE_CDMA_LOW_SLS = 67; // 0x43
+    field public static final int TONE_CDMA_LOW_SS = 58; // 0x3a
+    field public static final int TONE_CDMA_LOW_SSL = 61; // 0x3d
+    field public static final int TONE_CDMA_LOW_SS_2 = 64; // 0x40
+    field public static final int TONE_CDMA_LOW_S_X4 = 70; // 0x46
+    field public static final int TONE_CDMA_MED_L = 54; // 0x36
+    field public static final int TONE_CDMA_MED_PBX_L = 72; // 0x48
+    field public static final int TONE_CDMA_MED_PBX_SLS = 81; // 0x51
+    field public static final int TONE_CDMA_MED_PBX_SS = 75; // 0x4b
+    field public static final int TONE_CDMA_MED_PBX_SSL = 78; // 0x4e
+    field public static final int TONE_CDMA_MED_PBX_S_X4 = 84; // 0x54
+    field public static final int TONE_CDMA_MED_SLS = 66; // 0x42
+    field public static final int TONE_CDMA_MED_SS = 57; // 0x39
+    field public static final int TONE_CDMA_MED_SSL = 60; // 0x3c
+    field public static final int TONE_CDMA_MED_SS_2 = 63; // 0x3f
+    field public static final int TONE_CDMA_MED_S_X4 = 69; // 0x45
+    field public static final int TONE_CDMA_NETWORK_BUSY = 40; // 0x28
+    field public static final int TONE_CDMA_NETWORK_BUSY_ONE_SHOT = 96; // 0x60
+    field public static final int TONE_CDMA_NETWORK_CALLWAITING = 43; // 0x2b
+    field public static final int TONE_CDMA_NETWORK_USA_RINGBACK = 35; // 0x23
+    field public static final int TONE_CDMA_ONE_MIN_BEEP = 88; // 0x58
+    field public static final int TONE_CDMA_PIP = 44; // 0x2c
+    field public static final int TONE_CDMA_PRESSHOLDKEY_LITE = 90; // 0x5a
+    field public static final int TONE_CDMA_REORDER = 38; // 0x26
+    field public static final int TONE_CDMA_SIGNAL_OFF = 98; // 0x62
+    field public static final int TONE_CDMA_SOFT_ERROR_LITE = 94; // 0x5e
+    field public static final int TONE_DTMF_0 = 0; // 0x0
+    field public static final int TONE_DTMF_1 = 1; // 0x1
+    field public static final int TONE_DTMF_2 = 2; // 0x2
+    field public static final int TONE_DTMF_3 = 3; // 0x3
+    field public static final int TONE_DTMF_4 = 4; // 0x4
+    field public static final int TONE_DTMF_5 = 5; // 0x5
+    field public static final int TONE_DTMF_6 = 6; // 0x6
+    field public static final int TONE_DTMF_7 = 7; // 0x7
+    field public static final int TONE_DTMF_8 = 8; // 0x8
+    field public static final int TONE_DTMF_9 = 9; // 0x9
+    field public static final int TONE_DTMF_A = 12; // 0xc
+    field public static final int TONE_DTMF_B = 13; // 0xd
+    field public static final int TONE_DTMF_C = 14; // 0xe
+    field public static final int TONE_DTMF_D = 15; // 0xf
+    field public static final int TONE_DTMF_P = 11; // 0xb
+    field public static final int TONE_DTMF_S = 10; // 0xa
+    field public static final int TONE_PROP_ACK = 25; // 0x19
+    field public static final int TONE_PROP_BEEP = 24; // 0x18
+    field public static final int TONE_PROP_BEEP2 = 28; // 0x1c
+    field public static final int TONE_PROP_NACK = 26; // 0x1a
+    field public static final int TONE_PROP_PROMPT = 27; // 0x1b
+    field public static final int TONE_SUP_BUSY = 17; // 0x11
+    field public static final int TONE_SUP_CALL_WAITING = 22; // 0x16
+    field public static final int TONE_SUP_CONFIRM = 32; // 0x20
+    field public static final int TONE_SUP_CONGESTION = 18; // 0x12
+    field public static final int TONE_SUP_CONGESTION_ABBREV = 31; // 0x1f
+    field public static final int TONE_SUP_DIAL = 16; // 0x10
+    field public static final int TONE_SUP_ERROR = 21; // 0x15
+    field public static final int TONE_SUP_INTERCEPT = 29; // 0x1d
+    field public static final int TONE_SUP_INTERCEPT_ABBREV = 30; // 0x1e
+    field public static final int TONE_SUP_PIP = 33; // 0x21
+    field public static final int TONE_SUP_RADIO_ACK = 19; // 0x13
+    field public static final int TONE_SUP_RADIO_NOTAVAIL = 20; // 0x14
+    field public static final int TONE_SUP_RINGTONE = 23; // 0x17
+  }
+
+  public final class UnsupportedSchemeException extends android.media.MediaDrmException {
+    ctor public UnsupportedSchemeException(String);
+  }
+
+  public interface VolumeAutomation {
+    method @NonNull public android.media.VolumeShaper createVolumeShaper(@NonNull android.media.VolumeShaper.Configuration);
+  }
+
+  public abstract class VolumeProvider {
+    ctor public VolumeProvider(int, int, int);
+    ctor public VolumeProvider(int, int, int, @Nullable String);
+    method public final int getCurrentVolume();
+    method public final int getMaxVolume();
+    method public final int getVolumeControl();
+    method @Nullable public final String getVolumeControlId();
+    method public void onAdjustVolume(int);
+    method public void onSetVolumeTo(int);
+    method public final void setCurrentVolume(int);
+    field public static final int VOLUME_CONTROL_ABSOLUTE = 2; // 0x2
+    field public static final int VOLUME_CONTROL_FIXED = 0; // 0x0
+    field public static final int VOLUME_CONTROL_RELATIVE = 1; // 0x1
+  }
+
+  public final class VolumeShaper implements java.lang.AutoCloseable {
+    method public void apply(@NonNull android.media.VolumeShaper.Operation);
+    method public void close();
+    method protected void finalize();
+    method public float getVolume();
+    method public void replace(@NonNull android.media.VolumeShaper.Configuration, @NonNull android.media.VolumeShaper.Operation, boolean);
+  }
+
+  public static final class VolumeShaper.Configuration implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getDuration();
+    method public int getInterpolatorType();
+    method public static int getMaximumCurvePoints();
+    method public float[] getTimes();
+    method public float[] getVolumes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.VolumeShaper.Configuration> CREATOR;
+    field public static final android.media.VolumeShaper.Configuration CUBIC_RAMP;
+    field public static final int INTERPOLATOR_TYPE_CUBIC = 2; // 0x2
+    field public static final int INTERPOLATOR_TYPE_CUBIC_MONOTONIC = 3; // 0x3
+    field public static final int INTERPOLATOR_TYPE_LINEAR = 1; // 0x1
+    field public static final int INTERPOLATOR_TYPE_STEP = 0; // 0x0
+    field public static final android.media.VolumeShaper.Configuration LINEAR_RAMP;
+    field public static final android.media.VolumeShaper.Configuration SCURVE_RAMP;
+    field public static final android.media.VolumeShaper.Configuration SINE_RAMP;
+  }
+
+  public static final class VolumeShaper.Configuration.Builder {
+    ctor public VolumeShaper.Configuration.Builder();
+    ctor public VolumeShaper.Configuration.Builder(@NonNull android.media.VolumeShaper.Configuration);
+    method @NonNull public android.media.VolumeShaper.Configuration build();
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder invertVolumes();
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder reflectTimes();
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder scaleToEndVolume(float);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder scaleToStartVolume(float);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setCurve(@NonNull float[], @NonNull float[]);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setDuration(long);
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setInterpolatorType(int);
+  }
+
+  public static final class VolumeShaper.Operation implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.VolumeShaper.Operation> CREATOR;
+    field public static final android.media.VolumeShaper.Operation PLAY;
+    field public static final android.media.VolumeShaper.Operation REVERSE;
+  }
+
+}
+
+package android.media.audiofx {
+
+  public class AcousticEchoCanceler extends android.media.audiofx.AudioEffect {
+    method public static android.media.audiofx.AcousticEchoCanceler create(int);
+    method public static boolean isAvailable();
+  }
+
+  public class AudioEffect {
+    method protected void finalize();
+    method public android.media.audiofx.AudioEffect.Descriptor getDescriptor() throws java.lang.IllegalStateException;
+    method public boolean getEnabled() throws java.lang.IllegalStateException;
+    method public int getId() throws java.lang.IllegalStateException;
+    method public boolean hasControl() throws java.lang.IllegalStateException;
+    method public static android.media.audiofx.AudioEffect.Descriptor[] queryEffects();
+    method public void release();
+    method public void setControlStatusListener(android.media.audiofx.AudioEffect.OnControlStatusChangeListener);
+    method public void setEnableStatusListener(android.media.audiofx.AudioEffect.OnEnableStatusChangeListener);
+    method public int setEnabled(boolean) throws java.lang.IllegalStateException;
+    field public static final String ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION = "android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION";
+    field public static final String ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL = "android.media.action.DISPLAY_AUDIO_EFFECT_CONTROL_PANEL";
+    field public static final String ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION = "android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION";
+    field public static final int ALREADY_EXISTS = -2; // 0xfffffffe
+    field public static final int CONTENT_TYPE_GAME = 2; // 0x2
+    field public static final int CONTENT_TYPE_MOVIE = 1; // 0x1
+    field public static final int CONTENT_TYPE_MUSIC = 0; // 0x0
+    field public static final int CONTENT_TYPE_VOICE = 3; // 0x3
+    field public static final String EFFECT_AUXILIARY = "Auxiliary";
+    field public static final String EFFECT_INSERT = "Insert";
+    field public static final String EFFECT_POST_PROCESSING = "Post Processing";
+    field public static final String EFFECT_PRE_PROCESSING = "Pre Processing";
+    field public static final java.util.UUID EFFECT_TYPE_AEC;
+    field public static final java.util.UUID EFFECT_TYPE_AGC;
+    field public static final java.util.UUID EFFECT_TYPE_BASS_BOOST;
+    field public static final java.util.UUID EFFECT_TYPE_DYNAMICS_PROCESSING;
+    field public static final java.util.UUID EFFECT_TYPE_ENV_REVERB;
+    field public static final java.util.UUID EFFECT_TYPE_EQUALIZER;
+    field @NonNull public static final java.util.UUID EFFECT_TYPE_HAPTIC_GENERATOR;
+    field public static final java.util.UUID EFFECT_TYPE_LOUDNESS_ENHANCER;
+    field public static final java.util.UUID EFFECT_TYPE_NS;
+    field public static final java.util.UUID EFFECT_TYPE_PRESET_REVERB;
+    field public static final java.util.UUID EFFECT_TYPE_VIRTUALIZER;
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -4; // 0xfffffffc
+    field public static final int ERROR_DEAD_OBJECT = -7; // 0xfffffff9
+    field public static final int ERROR_INVALID_OPERATION = -5; // 0xfffffffb
+    field public static final int ERROR_NO_INIT = -3; // 0xfffffffd
+    field public static final int ERROR_NO_MEMORY = -6; // 0xfffffffa
+    field public static final String EXTRA_AUDIO_SESSION = "android.media.extra.AUDIO_SESSION";
+    field public static final String EXTRA_CONTENT_TYPE = "android.media.extra.CONTENT_TYPE";
+    field public static final String EXTRA_PACKAGE_NAME = "android.media.extra.PACKAGE_NAME";
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static class AudioEffect.Descriptor {
+    ctor public AudioEffect.Descriptor();
+    ctor public AudioEffect.Descriptor(String, String, String, String, String);
+    field public String connectMode;
+    field public String implementor;
+    field public String name;
+    field public java.util.UUID type;
+    field public java.util.UUID uuid;
+  }
+
+  public static interface AudioEffect.OnControlStatusChangeListener {
+    method public void onControlStatusChange(android.media.audiofx.AudioEffect, boolean);
+  }
+
+  public static interface AudioEffect.OnEnableStatusChangeListener {
+    method public void onEnableStatusChange(android.media.audiofx.AudioEffect, boolean);
+  }
+
+  public class AutomaticGainControl extends android.media.audiofx.AudioEffect {
+    method public static android.media.audiofx.AutomaticGainControl create(int);
+    method public static boolean isAvailable();
+  }
+
+  public class BassBoost extends android.media.audiofx.AudioEffect {
+    ctor public BassBoost(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.BassBoost.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoundedStrength() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean getStrengthSupported();
+    method public void setParameterListener(android.media.audiofx.BassBoost.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.BassBoost.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setStrength(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_STRENGTH = 1; // 0x1
+    field public static final int PARAM_STRENGTH_SUPPORTED = 0; // 0x0
+  }
+
+  public static interface BassBoost.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.BassBoost, int, int, short);
+  }
+
+  public static class BassBoost.Settings {
+    ctor public BassBoost.Settings();
+    ctor public BassBoost.Settings(String);
+    field public short strength;
+  }
+
+  public final class DynamicsProcessing extends android.media.audiofx.AudioEffect {
+    ctor public DynamicsProcessing(int);
+    ctor public DynamicsProcessing(int, int, @Nullable android.media.audiofx.DynamicsProcessing.Config);
+    method public android.media.audiofx.DynamicsProcessing.Channel getChannelByChannelIndex(int);
+    method public int getChannelCount();
+    method public android.media.audiofx.DynamicsProcessing.Config getConfig();
+    method public float getInputGainByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiterByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBandByChannelIndex(int, int);
+    method public android.media.audiofx.DynamicsProcessing.Mbc getMbcByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBandByChannelIndex(int, int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPostEqByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBandByChannelIndex(int, int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPreEqByChannelIndex(int);
+    method public void setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setInputGainAllChannelsTo(float);
+    method public void setInputGainbyChannel(int, float);
+    method public void setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setMbcBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPostEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    field public static final int VARIANT_FAVOR_FREQUENCY_RESOLUTION = 0; // 0x0
+    field public static final int VARIANT_FAVOR_TIME_RESOLUTION = 1; // 0x1
+  }
+
+  public static class DynamicsProcessing.BandBase {
+    ctor public DynamicsProcessing.BandBase(boolean, float);
+    method public float getCutoffFrequency();
+    method public boolean isEnabled();
+    method public void setCutoffFrequency(float);
+    method public void setEnabled(boolean);
+  }
+
+  public static class DynamicsProcessing.BandStage extends android.media.audiofx.DynamicsProcessing.Stage {
+    ctor public DynamicsProcessing.BandStage(boolean, boolean, int);
+    method public int getBandCount();
+  }
+
+  public static final class DynamicsProcessing.Channel {
+    ctor public DynamicsProcessing.Channel(float, boolean, int, boolean, int, boolean, int, boolean);
+    ctor public DynamicsProcessing.Channel(android.media.audiofx.DynamicsProcessing.Channel);
+    method public float getInputGain();
+    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiter();
+    method public android.media.audiofx.DynamicsProcessing.Mbc getMbc();
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBand(int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPostEq();
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBand(int);
+    method public android.media.audiofx.DynamicsProcessing.Eq getPreEq();
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBand(int);
+    method public void setInputGain(float);
+    method public void setLimiter(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setMbc(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setMbcBand(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setPostEq(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPostEqBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEq(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
+  }
+
+  public static final class DynamicsProcessing.Config {
+    method public android.media.audiofx.DynamicsProcessing.Channel getChannelByChannelIndex(int);
+    method public float getInputGainByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiterByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBandByChannelIndex(int, int);
+    method public int getMbcBandCount();
+    method public android.media.audiofx.DynamicsProcessing.Mbc getMbcByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBandByChannelIndex(int, int);
+    method public int getPostEqBandCount();
+    method public android.media.audiofx.DynamicsProcessing.Eq getPostEqByChannelIndex(int);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBandByChannelIndex(int, int);
+    method public int getPreEqBandCount();
+    method public android.media.audiofx.DynamicsProcessing.Eq getPreEqByChannelIndex(int);
+    method public float getPreferredFrameDuration();
+    method public int getVariant();
+    method public boolean isLimiterInUse();
+    method public boolean isMbcInUse();
+    method public boolean isPostEqInUse();
+    method public boolean isPreEqInUse();
+    method public void setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
+    method public void setInputGainAllChannelsTo(float);
+    method public void setInputGainByChannelIndex(int, float);
+    method public void setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
+    method public void setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setMbcBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public void setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
+    method public void setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPostEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public void setPreEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
+    method public void setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+  }
+
+  public static final class DynamicsProcessing.Config.Builder {
+    ctor public DynamicsProcessing.Config.Builder(int, int, boolean, int, boolean, int, boolean, int, boolean);
+    method public android.media.audiofx.DynamicsProcessing.Config build();
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setInputGainAllChannelsTo(float);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setInputGainByChannelIndex(int, float);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreferredFrameDuration(float);
+  }
+
+  public static final class DynamicsProcessing.Eq extends android.media.audiofx.DynamicsProcessing.BandStage {
+    ctor public DynamicsProcessing.Eq(boolean, boolean, int);
+    ctor public DynamicsProcessing.Eq(android.media.audiofx.DynamicsProcessing.Eq);
+    method public android.media.audiofx.DynamicsProcessing.EqBand getBand(int);
+    method public void setBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
+  }
+
+  public static final class DynamicsProcessing.EqBand extends android.media.audiofx.DynamicsProcessing.BandBase {
+    ctor public DynamicsProcessing.EqBand(boolean, float, float);
+    ctor public DynamicsProcessing.EqBand(android.media.audiofx.DynamicsProcessing.EqBand);
+    method public float getGain();
+    method public void setGain(float);
+  }
+
+  public static final class DynamicsProcessing.Limiter extends android.media.audiofx.DynamicsProcessing.Stage {
+    ctor public DynamicsProcessing.Limiter(boolean, boolean, int, float, float, float, float, float);
+    ctor public DynamicsProcessing.Limiter(android.media.audiofx.DynamicsProcessing.Limiter);
+    method public float getAttackTime();
+    method public int getLinkGroup();
+    method public float getPostGain();
+    method public float getRatio();
+    method public float getReleaseTime();
+    method public float getThreshold();
+    method public void setAttackTime(float);
+    method public void setLinkGroup(int);
+    method public void setPostGain(float);
+    method public void setRatio(float);
+    method public void setReleaseTime(float);
+    method public void setThreshold(float);
+  }
+
+  public static final class DynamicsProcessing.Mbc extends android.media.audiofx.DynamicsProcessing.BandStage {
+    ctor public DynamicsProcessing.Mbc(boolean, boolean, int);
+    ctor public DynamicsProcessing.Mbc(android.media.audiofx.DynamicsProcessing.Mbc);
+    method public android.media.audiofx.DynamicsProcessing.MbcBand getBand(int);
+    method public void setBand(int, android.media.audiofx.DynamicsProcessing.MbcBand);
+  }
+
+  public static final class DynamicsProcessing.MbcBand extends android.media.audiofx.DynamicsProcessing.BandBase {
+    ctor public DynamicsProcessing.MbcBand(boolean, float, float, float, float, float, float, float, float, float, float);
+    ctor public DynamicsProcessing.MbcBand(android.media.audiofx.DynamicsProcessing.MbcBand);
+    method public float getAttackTime();
+    method public float getExpanderRatio();
+    method public float getKneeWidth();
+    method public float getNoiseGateThreshold();
+    method public float getPostGain();
+    method public float getPreGain();
+    method public float getRatio();
+    method public float getReleaseTime();
+    method public float getThreshold();
+    method public void setAttackTime(float);
+    method public void setExpanderRatio(float);
+    method public void setKneeWidth(float);
+    method public void setNoiseGateThreshold(float);
+    method public void setPostGain(float);
+    method public void setPreGain(float);
+    method public void setRatio(float);
+    method public void setReleaseTime(float);
+    method public void setThreshold(float);
+  }
+
+  public static class DynamicsProcessing.Stage {
+    ctor public DynamicsProcessing.Stage(boolean, boolean);
+    method public boolean isEnabled();
+    method public boolean isInUse();
+    method public void setEnabled(boolean);
+  }
+
+  public class EnvironmentalReverb extends android.media.audiofx.AudioEffect {
+    ctor public EnvironmentalReverb(int, int) throws java.lang.IllegalArgumentException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public short getDecayHFRatio() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getDecayTime() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getDensity() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getDiffusion() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.EnvironmentalReverb.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getReflectionsDelay() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getReflectionsLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getReverbDelay() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getReverbLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoomHFLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoomLevel() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDecayHFRatio(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDecayTime(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDensity(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setDiffusion(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.EnvironmentalReverb.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.EnvironmentalReverb.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReflectionsDelay(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReflectionsLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReverbDelay(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setReverbLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setRoomHFLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setRoomLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_DECAY_HF_RATIO = 3; // 0x3
+    field public static final int PARAM_DECAY_TIME = 2; // 0x2
+    field public static final int PARAM_DENSITY = 9; // 0x9
+    field public static final int PARAM_DIFFUSION = 8; // 0x8
+    field public static final int PARAM_REFLECTIONS_DELAY = 5; // 0x5
+    field public static final int PARAM_REFLECTIONS_LEVEL = 4; // 0x4
+    field public static final int PARAM_REVERB_DELAY = 7; // 0x7
+    field public static final int PARAM_REVERB_LEVEL = 6; // 0x6
+    field public static final int PARAM_ROOM_HF_LEVEL = 1; // 0x1
+    field public static final int PARAM_ROOM_LEVEL = 0; // 0x0
+  }
+
+  public static interface EnvironmentalReverb.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.EnvironmentalReverb, int, int, int);
+  }
+
+  public static class EnvironmentalReverb.Settings {
+    ctor public EnvironmentalReverb.Settings();
+    ctor public EnvironmentalReverb.Settings(String);
+    field public short decayHFRatio;
+    field public int decayTime;
+    field public short density;
+    field public short diffusion;
+    field public int reflectionsDelay;
+    field public short reflectionsLevel;
+    field public int reverbDelay;
+    field public short reverbLevel;
+    field public short roomHFLevel;
+    field public short roomLevel;
+  }
+
+  public class Equalizer extends android.media.audiofx.AudioEffect {
+    ctor public Equalizer(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public short getBand(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int[] getBandFreqRange(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getBandLevel(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short[] getBandLevelRange() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public int getCenterFreq(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getCurrentPreset() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getNumberOfBands() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getNumberOfPresets() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public String getPresetName(short);
+    method public android.media.audiofx.Equalizer.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setBandLevel(short, short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.Equalizer.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.Equalizer.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void usePreset(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_BAND_FREQ_RANGE = 4; // 0x4
+    field public static final int PARAM_BAND_LEVEL = 2; // 0x2
+    field public static final int PARAM_CENTER_FREQ = 3; // 0x3
+    field public static final int PARAM_CURRENT_PRESET = 6; // 0x6
+    field public static final int PARAM_GET_BAND = 5; // 0x5
+    field public static final int PARAM_GET_NUM_OF_PRESETS = 7; // 0x7
+    field public static final int PARAM_GET_PRESET_NAME = 8; // 0x8
+    field public static final int PARAM_LEVEL_RANGE = 1; // 0x1
+    field public static final int PARAM_NUM_BANDS = 0; // 0x0
+    field public static final int PARAM_STRING_SIZE_MAX = 32; // 0x20
+  }
+
+  public static interface Equalizer.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.Equalizer, int, int, int, int);
+  }
+
+  public static class Equalizer.Settings {
+    ctor public Equalizer.Settings();
+    ctor public Equalizer.Settings(String);
+    field public short[] bandLevels;
+    field public short curPreset;
+    field public short numBands;
+  }
+
+  public class HapticGenerator extends android.media.audiofx.AudioEffect implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public static android.media.audiofx.HapticGenerator create(int);
+    method public static boolean isAvailable();
+    method public int setEnabled(boolean);
+  }
+
+  public class LoudnessEnhancer extends android.media.audiofx.AudioEffect {
+    ctor public LoudnessEnhancer(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public float getTargetGain() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setTargetGain(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_TARGET_GAIN_MB = 0; // 0x0
+  }
+
+  public class NoiseSuppressor extends android.media.audiofx.AudioEffect {
+    method public static android.media.audiofx.NoiseSuppressor create(int);
+    method public static boolean isAvailable();
+  }
+
+  public class PresetReverb extends android.media.audiofx.AudioEffect {
+    ctor public PresetReverb(int, int) throws java.lang.IllegalArgumentException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public short getPreset() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.PresetReverb.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.PresetReverb.OnParameterChangeListener);
+    method public void setPreset(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setProperties(android.media.audiofx.PresetReverb.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_PRESET = 0; // 0x0
+    field public static final short PRESET_LARGEHALL = 5; // 0x5
+    field public static final short PRESET_LARGEROOM = 3; // 0x3
+    field public static final short PRESET_MEDIUMHALL = 4; // 0x4
+    field public static final short PRESET_MEDIUMROOM = 2; // 0x2
+    field public static final short PRESET_NONE = 0; // 0x0
+    field public static final short PRESET_PLATE = 6; // 0x6
+    field public static final short PRESET_SMALLROOM = 1; // 0x1
+  }
+
+  public static interface PresetReverb.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.PresetReverb, int, int, short);
+  }
+
+  public static class PresetReverb.Settings {
+    ctor public PresetReverb.Settings();
+    ctor public PresetReverb.Settings(String);
+    field public short preset;
+  }
+
+  public class Virtualizer extends android.media.audiofx.AudioEffect {
+    ctor public Virtualizer(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method public boolean canVirtualize(int, int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean forceVirtualizationMode(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public android.media.audiofx.Virtualizer.Settings getProperties() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public short getRoundedStrength() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean getSpeakerAngles(int, int, int[]) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public boolean getStrengthSupported();
+    method public int getVirtualizationMode() throws java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setParameterListener(android.media.audiofx.Virtualizer.OnParameterChangeListener);
+    method public void setProperties(android.media.audiofx.Virtualizer.Settings) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    method public void setStrength(short) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+    field public static final int PARAM_STRENGTH = 1; // 0x1
+    field public static final int PARAM_STRENGTH_SUPPORTED = 0; // 0x0
+    field public static final int VIRTUALIZATION_MODE_AUTO = 1; // 0x1
+    field public static final int VIRTUALIZATION_MODE_BINAURAL = 2; // 0x2
+    field public static final int VIRTUALIZATION_MODE_OFF = 0; // 0x0
+    field public static final int VIRTUALIZATION_MODE_TRANSAURAL = 3; // 0x3
+  }
+
+  public static interface Virtualizer.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.Virtualizer, int, int, short);
+  }
+
+  public static class Virtualizer.Settings {
+    ctor public Virtualizer.Settings();
+    ctor public Virtualizer.Settings(String);
+    field public short strength;
+  }
+
+  public class Visualizer {
+    ctor public Visualizer(int) throws java.lang.RuntimeException, java.lang.UnsupportedOperationException;
+    method protected void finalize();
+    method public int getCaptureSize() throws java.lang.IllegalStateException;
+    method public static int[] getCaptureSizeRange();
+    method public boolean getEnabled();
+    method public int getFft(byte[]) throws java.lang.IllegalStateException;
+    method public static int getMaxCaptureRate();
+    method public int getMeasurementMode() throws java.lang.IllegalStateException;
+    method public int getMeasurementPeakRms(android.media.audiofx.Visualizer.MeasurementPeakRms);
+    method public int getSamplingRate() throws java.lang.IllegalStateException;
+    method public int getScalingMode() throws java.lang.IllegalStateException;
+    method public int getWaveForm(byte[]) throws java.lang.IllegalStateException;
+    method public void release();
+    method public int setCaptureSize(int) throws java.lang.IllegalStateException;
+    method public int setDataCaptureListener(android.media.audiofx.Visualizer.OnDataCaptureListener, int, boolean, boolean);
+    method public int setEnabled(boolean) throws java.lang.IllegalStateException;
+    method public int setMeasurementMode(int) throws java.lang.IllegalStateException;
+    method public int setScalingMode(int) throws java.lang.IllegalStateException;
+    field public static final int ALREADY_EXISTS = -2; // 0xfffffffe
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_BAD_VALUE = -4; // 0xfffffffc
+    field public static final int ERROR_DEAD_OBJECT = -7; // 0xfffffff9
+    field public static final int ERROR_INVALID_OPERATION = -5; // 0xfffffffb
+    field public static final int ERROR_NO_INIT = -3; // 0xfffffffd
+    field public static final int ERROR_NO_MEMORY = -6; // 0xfffffffa
+    field public static final int MEASUREMENT_MODE_NONE = 0; // 0x0
+    field public static final int MEASUREMENT_MODE_PEAK_RMS = 1; // 0x1
+    field public static final int SCALING_MODE_AS_PLAYED = 1; // 0x1
+    field public static final int SCALING_MODE_NORMALIZED = 0; // 0x0
+    field public static final int STATE_ENABLED = 2; // 0x2
+    field public static final int STATE_INITIALIZED = 1; // 0x1
+    field public static final int STATE_UNINITIALIZED = 0; // 0x0
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static final class Visualizer.MeasurementPeakRms {
+    ctor public Visualizer.MeasurementPeakRms();
+    field public int mPeak;
+    field public int mRms;
+  }
+
+  public static interface Visualizer.OnDataCaptureListener {
+    method public void onFftDataCapture(android.media.audiofx.Visualizer, byte[], int);
+    method public void onWaveFormDataCapture(android.media.audiofx.Visualizer, byte[], int);
+  }
+
+}
+
+package android.media.browse {
+
+  public final class MediaBrowser {
+    ctor public MediaBrowser(android.content.Context, android.content.ComponentName, android.media.browse.MediaBrowser.ConnectionCallback, android.os.Bundle);
+    method public void connect();
+    method public void disconnect();
+    method @Nullable public android.os.Bundle getExtras();
+    method public void getItem(@NonNull String, @NonNull android.media.browse.MediaBrowser.ItemCallback);
+    method @NonNull public String getRoot();
+    method @NonNull public android.content.ComponentName getServiceComponent();
+    method @NonNull public android.media.session.MediaSession.Token getSessionToken();
+    method public boolean isConnected();
+    method public void subscribe(@NonNull String, @NonNull android.media.browse.MediaBrowser.SubscriptionCallback);
+    method public void subscribe(@NonNull String, @NonNull android.os.Bundle, @NonNull android.media.browse.MediaBrowser.SubscriptionCallback);
+    method public void unsubscribe(@NonNull String);
+    method public void unsubscribe(@NonNull String, @NonNull android.media.browse.MediaBrowser.SubscriptionCallback);
+    field public static final String EXTRA_PAGE = "android.media.browse.extra.PAGE";
+    field public static final String EXTRA_PAGE_SIZE = "android.media.browse.extra.PAGE_SIZE";
+  }
+
+  public static class MediaBrowser.ConnectionCallback {
+    ctor public MediaBrowser.ConnectionCallback();
+    method public void onConnected();
+    method public void onConnectionFailed();
+    method public void onConnectionSuspended();
+  }
+
+  public abstract static class MediaBrowser.ItemCallback {
+    ctor public MediaBrowser.ItemCallback();
+    method public void onError(@NonNull String);
+    method public void onItemLoaded(android.media.browse.MediaBrowser.MediaItem);
+  }
+
+  public static class MediaBrowser.MediaItem implements android.os.Parcelable {
+    ctor public MediaBrowser.MediaItem(@NonNull android.media.MediaDescription, int);
+    method public int describeContents();
+    method @NonNull public android.media.MediaDescription getDescription();
+    method public int getFlags();
+    method @Nullable public String getMediaId();
+    method public boolean isBrowsable();
+    method public boolean isPlayable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.browse.MediaBrowser.MediaItem> CREATOR;
+    field public static final int FLAG_BROWSABLE = 1; // 0x1
+    field public static final int FLAG_PLAYABLE = 2; // 0x2
+  }
+
+  public abstract static class MediaBrowser.SubscriptionCallback {
+    ctor public MediaBrowser.SubscriptionCallback();
+    method public void onChildrenLoaded(@NonNull String, @NonNull java.util.List<android.media.browse.MediaBrowser.MediaItem>);
+    method public void onChildrenLoaded(@NonNull String, @NonNull java.util.List<android.media.browse.MediaBrowser.MediaItem>, @NonNull android.os.Bundle);
+    method public void onError(@NonNull String);
+    method public void onError(@NonNull String, @NonNull android.os.Bundle);
+  }
+
+}
+
+package android.media.effect {
+
+  public abstract class Effect {
+    ctor public Effect();
+    method public abstract void apply(int, int, int, int);
+    method public abstract String getName();
+    method public abstract void release();
+    method public abstract void setParameter(String, Object);
+    method public void setUpdateListener(android.media.effect.EffectUpdateListener);
+  }
+
+  public class EffectContext {
+    method public static android.media.effect.EffectContext createWithCurrentGlContext();
+    method public android.media.effect.EffectFactory getFactory();
+    method public void release();
+  }
+
+  public class EffectFactory {
+    method public android.media.effect.Effect createEffect(String);
+    method public static boolean isEffectSupported(String);
+    field public static final String EFFECT_AUTOFIX = "android.media.effect.effects.AutoFixEffect";
+    field public static final String EFFECT_BACKDROPPER = "android.media.effect.effects.BackDropperEffect";
+    field public static final String EFFECT_BITMAPOVERLAY = "android.media.effect.effects.BitmapOverlayEffect";
+    field public static final String EFFECT_BLACKWHITE = "android.media.effect.effects.BlackWhiteEffect";
+    field public static final String EFFECT_BRIGHTNESS = "android.media.effect.effects.BrightnessEffect";
+    field public static final String EFFECT_CONTRAST = "android.media.effect.effects.ContrastEffect";
+    field public static final String EFFECT_CROP = "android.media.effect.effects.CropEffect";
+    field public static final String EFFECT_CROSSPROCESS = "android.media.effect.effects.CrossProcessEffect";
+    field public static final String EFFECT_DOCUMENTARY = "android.media.effect.effects.DocumentaryEffect";
+    field public static final String EFFECT_DUOTONE = "android.media.effect.effects.DuotoneEffect";
+    field public static final String EFFECT_FILLLIGHT = "android.media.effect.effects.FillLightEffect";
+    field public static final String EFFECT_FISHEYE = "android.media.effect.effects.FisheyeEffect";
+    field public static final String EFFECT_FLIP = "android.media.effect.effects.FlipEffect";
+    field public static final String EFFECT_GRAIN = "android.media.effect.effects.GrainEffect";
+    field public static final String EFFECT_GRAYSCALE = "android.media.effect.effects.GrayscaleEffect";
+    field public static final String EFFECT_LOMOISH = "android.media.effect.effects.LomoishEffect";
+    field public static final String EFFECT_NEGATIVE = "android.media.effect.effects.NegativeEffect";
+    field public static final String EFFECT_POSTERIZE = "android.media.effect.effects.PosterizeEffect";
+    field public static final String EFFECT_REDEYE = "android.media.effect.effects.RedEyeEffect";
+    field public static final String EFFECT_ROTATE = "android.media.effect.effects.RotateEffect";
+    field public static final String EFFECT_SATURATE = "android.media.effect.effects.SaturateEffect";
+    field public static final String EFFECT_SEPIA = "android.media.effect.effects.SepiaEffect";
+    field public static final String EFFECT_SHARPEN = "android.media.effect.effects.SharpenEffect";
+    field public static final String EFFECT_STRAIGHTEN = "android.media.effect.effects.StraightenEffect";
+    field public static final String EFFECT_TEMPERATURE = "android.media.effect.effects.ColorTemperatureEffect";
+    field public static final String EFFECT_TINT = "android.media.effect.effects.TintEffect";
+    field public static final String EFFECT_VIGNETTE = "android.media.effect.effects.VignetteEffect";
+  }
+
+  public interface EffectUpdateListener {
+    method public void onEffectUpdated(android.media.effect.Effect, Object);
+  }
+
+}
+
+package android.media.metrics {
+
+  public abstract class Event {
+    method @NonNull public android.os.Bundle getMetricsBundle();
+    method @IntRange(from=0xffffffff) public long getTimeSinceCreatedMillis();
+  }
+
+  public final class LogSessionId {
+    method @NonNull public String getStringId();
+    field @NonNull public static final android.media.metrics.LogSessionId LOG_SESSION_ID_NONE;
+  }
+
+  public final class MediaMetricsManager {
+    method @NonNull public android.media.metrics.PlaybackSession createPlaybackSession();
+    method @NonNull public android.media.metrics.RecordingSession createRecordingSession();
+    field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL
+  }
+
+  public final class NetworkEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getNetworkType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.NetworkEvent> CREATOR;
+    field public static final int NETWORK_TYPE_2G = 4; // 0x4
+    field public static final int NETWORK_TYPE_3G = 5; // 0x5
+    field public static final int NETWORK_TYPE_4G = 6; // 0x6
+    field public static final int NETWORK_TYPE_5G_NSA = 7; // 0x7
+    field public static final int NETWORK_TYPE_5G_SA = 8; // 0x8
+    field public static final int NETWORK_TYPE_ETHERNET = 3; // 0x3
+    field public static final int NETWORK_TYPE_OFFLINE = 9; // 0x9
+    field public static final int NETWORK_TYPE_OTHER = 1; // 0x1
+    field public static final int NETWORK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int NETWORK_TYPE_WIFI = 2; // 0x2
+  }
+
+  public static final class NetworkEvent.Builder {
+    ctor public NetworkEvent.Builder();
+    method @NonNull public android.media.metrics.NetworkEvent build();
+    method @NonNull public android.media.metrics.NetworkEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.NetworkEvent.Builder setNetworkType(int);
+    method @NonNull public android.media.metrics.NetworkEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+  }
+
+  public final class PlaybackErrorEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getErrorCode();
+    method @IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) public int getSubErrorCode();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackErrorEvent> CREATOR;
+    field public static final int ERROR_AUDIO_TRACK_INIT_FAILED = 17; // 0x11
+    field public static final int ERROR_AUDIO_TRACK_OTHER = 19; // 0x13
+    field public static final int ERROR_AUDIO_TRACK_WRITE_FAILED = 18; // 0x12
+    field public static final int ERROR_DECODER_INIT_FAILED = 13; // 0xd
+    field public static final int ERROR_DECODING_FAILED = 14; // 0xe
+    field public static final int ERROR_DECODING_FORMAT_EXCEEDS_CAPABILITIES = 15; // 0xf
+    field public static final int ERROR_DECODING_FORMAT_UNSUPPORTED = 35; // 0x23
+    field public static final int ERROR_DECODING_OTHER = 16; // 0x10
+    field public static final int ERROR_DRM_CONTENT_ERROR = 28; // 0x1c
+    field public static final int ERROR_DRM_DEVICE_REVOKED = 29; // 0x1d
+    field public static final int ERROR_DRM_DISALLOWED_OPERATION = 26; // 0x1a
+    field public static final int ERROR_DRM_LICENSE_ACQUISITION_FAILED = 25; // 0x19
+    field public static final int ERROR_DRM_OTHER = 30; // 0x1e
+    field public static final int ERROR_DRM_PROVISIONING_FAILED = 24; // 0x18
+    field public static final int ERROR_DRM_SCHEME_UNSUPPORTED = 23; // 0x17
+    field public static final int ERROR_DRM_SYSTEM_ERROR = 27; // 0x1b
+    field public static final int ERROR_IO_BAD_HTTP_STATUS = 5; // 0x5
+    field public static final int ERROR_IO_CONNECTION_CLOSED = 8; // 0x8
+    field public static final int ERROR_IO_CONNECTION_TIMEOUT = 7; // 0x7
+    field public static final int ERROR_IO_DNS_FAILED = 6; // 0x6
+    field public static final int ERROR_IO_FILE_NOT_FOUND = 31; // 0x1f
+    field public static final int ERROR_IO_NETWORK_CONNECTION_FAILED = 4; // 0x4
+    field public static final int ERROR_IO_NETWORK_UNAVAILABLE = 3; // 0x3
+    field public static final int ERROR_IO_NO_PERMISSION = 32; // 0x20
+    field public static final int ERROR_IO_OTHER = 9; // 0x9
+    field public static final int ERROR_OTHER = 1; // 0x1
+    field public static final int ERROR_PARSING_CONTAINER_MALFORMED = 11; // 0xb
+    field public static final int ERROR_PARSING_CONTAINER_UNSUPPORTED = 34; // 0x22
+    field public static final int ERROR_PARSING_MANIFEST_MALFORMED = 10; // 0xa
+    field public static final int ERROR_PARSING_MANIFEST_UNSUPPORTED = 33; // 0x21
+    field public static final int ERROR_PARSING_OTHER = 12; // 0xc
+    field public static final int ERROR_PLAYER_BEHIND_LIVE_WINDOW = 21; // 0x15
+    field public static final int ERROR_PLAYER_OTHER = 22; // 0x16
+    field public static final int ERROR_PLAYER_REMOTE = 20; // 0x14
+    field public static final int ERROR_RUNTIME = 2; // 0x2
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class PlaybackErrorEvent.Builder {
+    ctor public PlaybackErrorEvent.Builder();
+    method @NonNull public android.media.metrics.PlaybackErrorEvent build();
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setErrorCode(int);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setException(@NonNull Exception);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setSubErrorCode(@IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.PlaybackErrorEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+  }
+
+  public final class PlaybackMetrics implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getAudioUnderrunCount();
+    method public int getContentType();
+    method @NonNull public byte[] getDrmSessionId();
+    method public int getDrmType();
+    method @NonNull public long[] getExperimentIds();
+    method @IntRange(from=0xffffffff) public long getLocalBytesRead();
+    method @IntRange(from=0xffffffff) public long getMediaDurationMillis();
+    method @NonNull public android.os.Bundle getMetricsBundle();
+    method @IntRange(from=0xffffffff) public long getNetworkBytesRead();
+    method @IntRange(from=0xffffffff) public long getNetworkTransferDurationMillis();
+    method public int getPlaybackType();
+    method @Nullable public String getPlayerName();
+    method @Nullable public String getPlayerVersion();
+    method public int getStreamSource();
+    method public int getStreamType();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getVideoFramesDropped();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getVideoFramesPlayed();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONTENT_TYPE_AD = 2; // 0x2
+    field public static final int CONTENT_TYPE_MAIN = 1; // 0x1
+    field public static final int CONTENT_TYPE_OTHER = 3; // 0x3
+    field public static final int CONTENT_TYPE_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackMetrics> CREATOR;
+    field public static final int DRM_TYPE_CLEARKEY = 6; // 0x6
+    field public static final int DRM_TYPE_NONE = 0; // 0x0
+    field public static final int DRM_TYPE_OTHER = 1; // 0x1
+    field public static final int DRM_TYPE_PLAY_READY = 2; // 0x2
+    field public static final int DRM_TYPE_WIDEVINE_L1 = 3; // 0x3
+    field public static final int DRM_TYPE_WIDEVINE_L3 = 4; // 0x4
+    field public static final int DRM_TYPE_WV_L3_FALLBACK = 5; // 0x5
+    field public static final int PLAYBACK_TYPE_LIVE = 2; // 0x2
+    field public static final int PLAYBACK_TYPE_OTHER = 3; // 0x3
+    field public static final int PLAYBACK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int PLAYBACK_TYPE_VOD = 1; // 0x1
+    field public static final int STREAM_SOURCE_DEVICE = 2; // 0x2
+    field public static final int STREAM_SOURCE_MIXED = 3; // 0x3
+    field public static final int STREAM_SOURCE_NETWORK = 1; // 0x1
+    field public static final int STREAM_SOURCE_UNKNOWN = 0; // 0x0
+    field public static final int STREAM_TYPE_DASH = 3; // 0x3
+    field public static final int STREAM_TYPE_HLS = 4; // 0x4
+    field public static final int STREAM_TYPE_OTHER = 1; // 0x1
+    field public static final int STREAM_TYPE_PROGRESSIVE = 2; // 0x2
+    field public static final int STREAM_TYPE_SS = 5; // 0x5
+    field public static final int STREAM_TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class PlaybackMetrics.Builder {
+    ctor public PlaybackMetrics.Builder();
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder addExperimentId(long);
+    method @NonNull public android.media.metrics.PlaybackMetrics build();
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setAudioUnderrunCount(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setContentType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setDrmSessionId(@NonNull byte[]);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setDrmType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setLocalBytesRead(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setMediaDurationMillis(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setNetworkBytesRead(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setNetworkTransferDurationMillis(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlaybackType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlayerName(@NonNull String);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setPlayerVersion(@NonNull String);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setStreamSource(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setStreamType(int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setVideoFramesDropped(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.PlaybackMetrics.Builder setVideoFramesPlayed(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+  }
+
+  public final class PlaybackSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public android.media.metrics.LogSessionId getSessionId();
+    method public void reportNetworkEvent(@NonNull android.media.metrics.NetworkEvent);
+    method public void reportPlaybackErrorEvent(@NonNull android.media.metrics.PlaybackErrorEvent);
+    method public void reportPlaybackMetrics(@NonNull android.media.metrics.PlaybackMetrics);
+    method public void reportPlaybackStateEvent(@NonNull android.media.metrics.PlaybackStateEvent);
+    method public void reportTrackChangeEvent(@NonNull android.media.metrics.TrackChangeEvent);
+  }
+
+  public final class PlaybackStateEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getState();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.PlaybackStateEvent> CREATOR;
+    field public static final int STATE_ABANDONED = 15; // 0xf
+    field public static final int STATE_BUFFERING = 6; // 0x6
+    field public static final int STATE_ENDED = 11; // 0xb
+    field public static final int STATE_FAILED = 13; // 0xd
+    field public static final int STATE_INTERRUPTED_BY_AD = 14; // 0xe
+    field public static final int STATE_JOINING_BACKGROUND = 1; // 0x1
+    field public static final int STATE_JOINING_FOREGROUND = 2; // 0x2
+    field public static final int STATE_NOT_STARTED = 0; // 0x0
+    field public static final int STATE_PAUSED = 4; // 0x4
+    field public static final int STATE_PAUSED_BUFFERING = 7; // 0x7
+    field public static final int STATE_PLAYING = 3; // 0x3
+    field public static final int STATE_SEEKING = 5; // 0x5
+    field public static final int STATE_STOPPED = 12; // 0xc
+    field public static final int STATE_SUPPRESSED = 9; // 0x9
+    field public static final int STATE_SUPPRESSED_BUFFERING = 10; // 0xa
+  }
+
+  public static final class PlaybackStateEvent.Builder {
+    ctor public PlaybackStateEvent.Builder();
+    method @NonNull public android.media.metrics.PlaybackStateEvent build();
+    method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setState(int);
+    method @NonNull public android.media.metrics.PlaybackStateEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+  }
+
+  public final class RecordingSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public android.media.metrics.LogSessionId getSessionId();
+  }
+
+  public final class TrackChangeEvent extends android.media.metrics.Event implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getAudioSampleRate();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getBitrate();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getChannelCount();
+    method @Nullable public String getCodecName();
+    method @Nullable public String getContainerMimeType();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getHeight();
+    method @Nullable public String getLanguage();
+    method @Nullable public String getLanguageRegion();
+    method @Nullable public String getSampleMimeType();
+    method public int getTrackChangeReason();
+    method public int getTrackState();
+    method public int getTrackType();
+    method @FloatRange(from=0xffffffff, to=java.lang.Float.MAX_VALUE) public float getVideoFrameRate();
+    method @IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) public int getWidth();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.metrics.TrackChangeEvent> CREATOR;
+    field public static final int TRACK_CHANGE_REASON_ADAPTIVE = 4; // 0x4
+    field public static final int TRACK_CHANGE_REASON_INITIAL = 2; // 0x2
+    field public static final int TRACK_CHANGE_REASON_MANUAL = 3; // 0x3
+    field public static final int TRACK_CHANGE_REASON_OTHER = 1; // 0x1
+    field public static final int TRACK_CHANGE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int TRACK_STATE_OFF = 0; // 0x0
+    field public static final int TRACK_STATE_ON = 1; // 0x1
+    field public static final int TRACK_TYPE_AUDIO = 0; // 0x0
+    field public static final int TRACK_TYPE_TEXT = 2; // 0x2
+    field public static final int TRACK_TYPE_VIDEO = 1; // 0x1
+  }
+
+  public static final class TrackChangeEvent.Builder {
+    ctor public TrackChangeEvent.Builder(int);
+    method @NonNull public android.media.metrics.TrackChangeEvent build();
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setAudioSampleRate(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setBitrate(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setChannelCount(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setCodecName(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setContainerMimeType(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setHeight(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setLanguage(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setLanguageRegion(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setMetricsBundle(@NonNull android.os.Bundle);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setSampleMimeType(@NonNull String);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTimeSinceCreatedMillis(@IntRange(from=0xffffffff) long);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTrackChangeReason(int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setTrackState(int);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setVideoFrameRate(@FloatRange(from=0xffffffff, to=java.lang.Float.MAX_VALUE) float);
+    method @NonNull public android.media.metrics.TrackChangeEvent.Builder setWidth(@IntRange(from=0xffffffff, to=java.lang.Integer.MAX_VALUE) int);
+  }
+
+}
+
+package android.media.midi {
+
+  public final class MidiDevice implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public android.media.midi.MidiDevice.MidiConnection connectPorts(android.media.midi.MidiInputPort, int);
+    method public android.media.midi.MidiDeviceInfo getInfo();
+    method public android.media.midi.MidiInputPort openInputPort(int);
+    method public android.media.midi.MidiOutputPort openOutputPort(int);
+  }
+
+  public class MidiDevice.MidiConnection implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+  }
+
+  public final class MidiDeviceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getId();
+    method public int getInputPortCount();
+    method public int getOutputPortCount();
+    method public android.media.midi.MidiDeviceInfo.PortInfo[] getPorts();
+    method public android.os.Bundle getProperties();
+    method public int getType();
+    method public boolean isPrivate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceInfo> CREATOR;
+    field public static final String PROPERTY_BLUETOOTH_DEVICE = "bluetooth_device";
+    field public static final String PROPERTY_MANUFACTURER = "manufacturer";
+    field public static final String PROPERTY_NAME = "name";
+    field public static final String PROPERTY_PRODUCT = "product";
+    field public static final String PROPERTY_SERIAL_NUMBER = "serial_number";
+    field public static final String PROPERTY_USB_DEVICE = "usb_device";
+    field public static final String PROPERTY_VERSION = "version";
+    field public static final int TYPE_BLUETOOTH = 3; // 0x3
+    field public static final int TYPE_USB = 1; // 0x1
+    field public static final int TYPE_VIRTUAL = 2; // 0x2
+  }
+
+  public static final class MidiDeviceInfo.PortInfo {
+    method public String getName();
+    method public int getPortNumber();
+    method public int getType();
+    field public static final int TYPE_INPUT = 1; // 0x1
+    field public static final int TYPE_OUTPUT = 2; // 0x2
+  }
+
+  public abstract class MidiDeviceService extends android.app.Service {
+    ctor public MidiDeviceService();
+    method public final android.media.midi.MidiDeviceInfo getDeviceInfo();
+    method public final android.media.midi.MidiReceiver[] getOutputPortReceivers();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onClose();
+    method public void onDeviceStatusChanged(android.media.midi.MidiDeviceStatus);
+    method public abstract android.media.midi.MidiReceiver[] onGetInputPortReceivers();
+    field public static final String SERVICE_INTERFACE = "android.media.midi.MidiDeviceService";
+  }
+
+  public final class MidiDeviceStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.midi.MidiDeviceInfo getDeviceInfo();
+    method public int getOutputPortOpenCount(int);
+    method public boolean isInputPortOpen(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.midi.MidiDeviceStatus> CREATOR;
+  }
+
+  public final class MidiInputPort extends android.media.midi.MidiReceiver implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public int getPortNumber();
+    method public void onSend(byte[], int, int, long) throws java.io.IOException;
+  }
+
+  public final class MidiManager {
+    method public android.media.midi.MidiDeviceInfo[] getDevices();
+    method public void openBluetoothDevice(android.bluetooth.BluetoothDevice, android.media.midi.MidiManager.OnDeviceOpenedListener, android.os.Handler);
+    method public void openDevice(android.media.midi.MidiDeviceInfo, android.media.midi.MidiManager.OnDeviceOpenedListener, android.os.Handler);
+    method public void registerDeviceCallback(android.media.midi.MidiManager.DeviceCallback, android.os.Handler);
+    method public void unregisterDeviceCallback(android.media.midi.MidiManager.DeviceCallback);
+  }
+
+  public static class MidiManager.DeviceCallback {
+    ctor public MidiManager.DeviceCallback();
+    method public void onDeviceAdded(android.media.midi.MidiDeviceInfo);
+    method public void onDeviceRemoved(android.media.midi.MidiDeviceInfo);
+    method public void onDeviceStatusChanged(android.media.midi.MidiDeviceStatus);
+  }
+
+  public static interface MidiManager.OnDeviceOpenedListener {
+    method public void onDeviceOpened(android.media.midi.MidiDevice);
+  }
+
+  public final class MidiOutputPort extends android.media.midi.MidiSender implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public int getPortNumber();
+    method public void onConnect(android.media.midi.MidiReceiver);
+    method public void onDisconnect(android.media.midi.MidiReceiver);
+  }
+
+  public abstract class MidiReceiver {
+    ctor public MidiReceiver();
+    ctor public MidiReceiver(int);
+    method public void flush() throws java.io.IOException;
+    method public final int getMaxMessageSize();
+    method public void onFlush() throws java.io.IOException;
+    method public abstract void onSend(byte[], int, int, long) throws java.io.IOException;
+    method public void send(byte[], int, int) throws java.io.IOException;
+    method public void send(byte[], int, int, long) throws java.io.IOException;
+  }
+
+  public abstract class MidiSender {
+    ctor public MidiSender();
+    method public void connect(android.media.midi.MidiReceiver);
+    method public void disconnect(android.media.midi.MidiReceiver);
+    method public abstract void onConnect(android.media.midi.MidiReceiver);
+    method public abstract void onDisconnect(android.media.midi.MidiReceiver);
+  }
+
+}
+
+package android.media.projection {
+
+  public final class MediaProjection {
+    method public android.hardware.display.VirtualDisplay createVirtualDisplay(@NonNull String, int, int, int, int, @Nullable android.view.Surface, @Nullable android.hardware.display.VirtualDisplay.Callback, @Nullable android.os.Handler);
+    method public void registerCallback(android.media.projection.MediaProjection.Callback, android.os.Handler);
+    method public void stop();
+    method public void unregisterCallback(android.media.projection.MediaProjection.Callback);
+  }
+
+  public abstract static class MediaProjection.Callback {
+    ctor public MediaProjection.Callback();
+    method public void onStop();
+  }
+
+  public final class MediaProjectionManager {
+    method public android.content.Intent createScreenCaptureIntent();
+    method public android.media.projection.MediaProjection getMediaProjection(int, @NonNull android.content.Intent);
+  }
+
+}
+
+package android.media.session {
+
+  public final class MediaController {
+    ctor public MediaController(@NonNull android.content.Context, @NonNull android.media.session.MediaSession.Token);
+    method public void adjustVolume(int, int);
+    method public boolean dispatchMediaButtonEvent(@NonNull android.view.KeyEvent);
+    method @Nullable public android.os.Bundle getExtras();
+    method public long getFlags();
+    method @Nullable public android.media.MediaMetadata getMetadata();
+    method public String getPackageName();
+    method @Nullable public android.media.session.MediaController.PlaybackInfo getPlaybackInfo();
+    method @Nullable public android.media.session.PlaybackState getPlaybackState();
+    method @Nullable public java.util.List<android.media.session.MediaSession.QueueItem> getQueue();
+    method @Nullable public CharSequence getQueueTitle();
+    method public int getRatingType();
+    method @Nullable public android.app.PendingIntent getSessionActivity();
+    method @NonNull public android.os.Bundle getSessionInfo();
+    method @NonNull public android.media.session.MediaSession.Token getSessionToken();
+    method @NonNull public String getTag();
+    method @NonNull public android.media.session.MediaController.TransportControls getTransportControls();
+    method public void registerCallback(@NonNull android.media.session.MediaController.Callback);
+    method public void registerCallback(@NonNull android.media.session.MediaController.Callback, @Nullable android.os.Handler);
+    method public void sendCommand(@NonNull String, @Nullable android.os.Bundle, @Nullable android.os.ResultReceiver);
+    method public void setVolumeTo(int, int);
+    method public void unregisterCallback(@NonNull android.media.session.MediaController.Callback);
+  }
+
+  public abstract static class MediaController.Callback {
+    ctor public MediaController.Callback();
+    method public void onAudioInfoChanged(android.media.session.MediaController.PlaybackInfo);
+    method public void onExtrasChanged(@Nullable android.os.Bundle);
+    method public void onMetadataChanged(@Nullable android.media.MediaMetadata);
+    method public void onPlaybackStateChanged(@Nullable android.media.session.PlaybackState);
+    method public void onQueueChanged(@Nullable java.util.List<android.media.session.MediaSession.QueueItem>);
+    method public void onQueueTitleChanged(@Nullable CharSequence);
+    method public void onSessionDestroyed();
+    method public void onSessionEvent(@NonNull String, @Nullable android.os.Bundle);
+  }
+
+  public static final class MediaController.PlaybackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.AudioAttributes getAudioAttributes();
+    method public int getCurrentVolume();
+    method public int getMaxVolume();
+    method public int getPlaybackType();
+    method public int getVolumeControl();
+    method @Nullable public String getVolumeControlId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaController.PlaybackInfo> CREATOR;
+    field public static final int PLAYBACK_TYPE_LOCAL = 1; // 0x1
+    field public static final int PLAYBACK_TYPE_REMOTE = 2; // 0x2
+  }
+
+  public final class MediaController.TransportControls {
+    method public void fastForward();
+    method public void pause();
+    method public void play();
+    method public void playFromMediaId(String, android.os.Bundle);
+    method public void playFromSearch(String, android.os.Bundle);
+    method public void playFromUri(android.net.Uri, android.os.Bundle);
+    method public void prepare();
+    method public void prepareFromMediaId(String, android.os.Bundle);
+    method public void prepareFromSearch(String, android.os.Bundle);
+    method public void prepareFromUri(android.net.Uri, android.os.Bundle);
+    method public void rewind();
+    method public void seekTo(long);
+    method public void sendCustomAction(@NonNull android.media.session.PlaybackState.CustomAction, @Nullable android.os.Bundle);
+    method public void sendCustomAction(@NonNull String, @Nullable android.os.Bundle);
+    method public void setPlaybackSpeed(float);
+    method public void setRating(android.media.Rating);
+    method public void skipToNext();
+    method public void skipToPrevious();
+    method public void skipToQueueItem(long);
+    method public void stop();
+  }
+
+  public final class MediaSession {
+    ctor public MediaSession(@NonNull android.content.Context, @NonNull String);
+    ctor public MediaSession(@NonNull android.content.Context, @NonNull String, @Nullable android.os.Bundle);
+    method @NonNull public android.media.session.MediaController getController();
+    method @NonNull public android.media.session.MediaSessionManager.RemoteUserInfo getCurrentControllerInfo();
+    method @NonNull public android.media.session.MediaSession.Token getSessionToken();
+    method public boolean isActive();
+    method public void release();
+    method public void sendSessionEvent(@NonNull String, @Nullable android.os.Bundle);
+    method public void setActive(boolean);
+    method public void setCallback(@Nullable android.media.session.MediaSession.Callback);
+    method public void setCallback(@Nullable android.media.session.MediaSession.Callback, @Nullable android.os.Handler);
+    method public void setExtras(@Nullable android.os.Bundle);
+    method public void setFlags(int);
+    method public void setMediaButtonBroadcastReceiver(@Nullable android.content.ComponentName);
+    method @Deprecated public void setMediaButtonReceiver(@Nullable android.app.PendingIntent);
+    method public void setMetadata(@Nullable android.media.MediaMetadata);
+    method public void setPlaybackState(@Nullable android.media.session.PlaybackState);
+    method public void setPlaybackToLocal(android.media.AudioAttributes);
+    method public void setPlaybackToRemote(@NonNull android.media.VolumeProvider);
+    method public void setQueue(@Nullable java.util.List<android.media.session.MediaSession.QueueItem>);
+    method public void setQueueTitle(@Nullable CharSequence);
+    method public void setRatingType(int);
+    method public void setSessionActivity(@Nullable android.app.PendingIntent);
+    field @Deprecated public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
+    field @Deprecated public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2
+  }
+
+  public abstract static class MediaSession.Callback {
+    ctor public MediaSession.Callback();
+    method public void onCommand(@NonNull String, @Nullable android.os.Bundle, @Nullable android.os.ResultReceiver);
+    method public void onCustomAction(@NonNull String, @Nullable android.os.Bundle);
+    method public void onFastForward();
+    method public boolean onMediaButtonEvent(@NonNull android.content.Intent);
+    method public void onPause();
+    method public void onPlay();
+    method public void onPlayFromMediaId(String, android.os.Bundle);
+    method public void onPlayFromSearch(String, android.os.Bundle);
+    method public void onPlayFromUri(android.net.Uri, android.os.Bundle);
+    method public void onPrepare();
+    method public void onPrepareFromMediaId(String, android.os.Bundle);
+    method public void onPrepareFromSearch(String, android.os.Bundle);
+    method public void onPrepareFromUri(android.net.Uri, android.os.Bundle);
+    method public void onRewind();
+    method public void onSeekTo(long);
+    method public void onSetPlaybackSpeed(float);
+    method public void onSetRating(@NonNull android.media.Rating);
+    method public void onSkipToNext();
+    method public void onSkipToPrevious();
+    method public void onSkipToQueueItem(long);
+    method public void onStop();
+  }
+
+  public static final class MediaSession.QueueItem implements android.os.Parcelable {
+    ctor public MediaSession.QueueItem(android.media.MediaDescription, long);
+    method public int describeContents();
+    method public android.media.MediaDescription getDescription();
+    method public long getQueueId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaSession.QueueItem> CREATOR;
+    field public static final int UNKNOWN_ID = -1; // 0xffffffff
+  }
+
+  public static final class MediaSession.Token implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.MediaSession.Token> CREATOR;
+  }
+
+  public final class MediaSessionManager {
+    method public void addOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, @Nullable android.content.ComponentName);
+    method public void addOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, @Nullable android.content.ComponentName, @Nullable android.os.Handler);
+    method public void addOnSession2TokensChangedListener(@NonNull android.media.session.MediaSessionManager.OnSession2TokensChangedListener);
+    method public void addOnSession2TokensChangedListener(@NonNull android.media.session.MediaSessionManager.OnSession2TokensChangedListener, @NonNull android.os.Handler);
+    method @NonNull public java.util.List<android.media.session.MediaController> getActiveSessions(@Nullable android.content.ComponentName);
+    method @NonNull public java.util.List<android.media.Session2Token> getSession2Tokens();
+    method public boolean isTrustedForMediaControl(@NonNull android.media.session.MediaSessionManager.RemoteUserInfo);
+    method @Deprecated public void notifySession2Created(@NonNull android.media.Session2Token);
+    method public void removeOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener);
+    method public void removeOnSession2TokensChangedListener(@NonNull android.media.session.MediaSessionManager.OnSession2TokensChangedListener);
+  }
+
+  public static interface MediaSessionManager.OnActiveSessionsChangedListener {
+    method public void onActiveSessionsChanged(@Nullable java.util.List<android.media.session.MediaController>);
+  }
+
+  public static interface MediaSessionManager.OnSession2TokensChangedListener {
+    method public void onSession2TokensChanged(@NonNull java.util.List<android.media.Session2Token>);
+  }
+
+  public static final class MediaSessionManager.RemoteUserInfo {
+    ctor public MediaSessionManager.RemoteUserInfo(@NonNull String, int, int);
+    method public String getPackageName();
+    method public int getPid();
+    method public int getUid();
+  }
+
+  public final class PlaybackState implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getActions();
+    method public long getActiveQueueItemId();
+    method public long getBufferedPosition();
+    method public java.util.List<android.media.session.PlaybackState.CustomAction> getCustomActions();
+    method public CharSequence getErrorMessage();
+    method @Nullable public android.os.Bundle getExtras();
+    method public long getLastPositionUpdateTime();
+    method public float getPlaybackSpeed();
+    method public long getPosition();
+    method public int getState();
+    method public boolean isActive();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
+    field public static final long ACTION_PAUSE = 2L; // 0x2L
+    field public static final long ACTION_PLAY = 4L; // 0x4L
+    field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
+    field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
+    field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L
+    field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+    field public static final long ACTION_PREPARE = 16384L; // 0x4000L
+    field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L
+    field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L
+    field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L
+    field public static final long ACTION_REWIND = 8L; // 0x8L
+    field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+    field public static final long ACTION_SET_PLAYBACK_SPEED = 4194304L; // 0x400000L
+    field public static final long ACTION_SET_RATING = 128L; // 0x80L
+    field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
+    field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
+    field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
+    field public static final long ACTION_STOP = 1L; // 0x1L
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.PlaybackState> CREATOR;
+    field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+    field public static final int STATE_BUFFERING = 6; // 0x6
+    field public static final int STATE_CONNECTING = 8; // 0x8
+    field public static final int STATE_ERROR = 7; // 0x7
+    field public static final int STATE_FAST_FORWARDING = 4; // 0x4
+    field public static final int STATE_NONE = 0; // 0x0
+    field public static final int STATE_PAUSED = 2; // 0x2
+    field public static final int STATE_PLAYING = 3; // 0x3
+    field public static final int STATE_REWINDING = 5; // 0x5
+    field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
+    field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
+    field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
+    field public static final int STATE_STOPPED = 1; // 0x1
+  }
+
+  public static final class PlaybackState.Builder {
+    ctor public PlaybackState.Builder();
+    ctor public PlaybackState.Builder(android.media.session.PlaybackState);
+    method public android.media.session.PlaybackState.Builder addCustomAction(String, String, int);
+    method public android.media.session.PlaybackState.Builder addCustomAction(android.media.session.PlaybackState.CustomAction);
+    method public android.media.session.PlaybackState build();
+    method public android.media.session.PlaybackState.Builder setActions(long);
+    method public android.media.session.PlaybackState.Builder setActiveQueueItemId(long);
+    method public android.media.session.PlaybackState.Builder setBufferedPosition(long);
+    method public android.media.session.PlaybackState.Builder setErrorMessage(CharSequence);
+    method public android.media.session.PlaybackState.Builder setExtras(android.os.Bundle);
+    method public android.media.session.PlaybackState.Builder setState(int, long, float, long);
+    method public android.media.session.PlaybackState.Builder setState(int, long, float);
+  }
+
+  public static final class PlaybackState.CustomAction implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getAction();
+    method public android.os.Bundle getExtras();
+    method public int getIcon();
+    method public CharSequence getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.session.PlaybackState.CustomAction> CREATOR;
+  }
+
+  public static final class PlaybackState.CustomAction.Builder {
+    ctor public PlaybackState.CustomAction.Builder(String, CharSequence, @DrawableRes int);
+    method public android.media.session.PlaybackState.CustomAction build();
+    method public android.media.session.PlaybackState.CustomAction.Builder setExtras(android.os.Bundle);
+  }
+
+}
+
+package android.media.tv {
+
+  public final class TvContentRating {
+    method public boolean contains(@NonNull android.media.tv.TvContentRating);
+    method public static android.media.tv.TvContentRating createRating(String, String, String, java.lang.String...);
+    method public String flattenToString();
+    method public String getDomain();
+    method public String getMainRating();
+    method public String getRatingSystem();
+    method public java.util.List<java.lang.String> getSubRatings();
+    method public static android.media.tv.TvContentRating unflattenFromString(String);
+    field public static final android.media.tv.TvContentRating UNRATED;
+  }
+
+  public final class TvContract {
+    method public static android.net.Uri buildChannelLogoUri(long);
+    method public static android.net.Uri buildChannelLogoUri(android.net.Uri);
+    method public static android.net.Uri buildChannelUri(long);
+    method public static android.net.Uri buildChannelUriForPassthroughInput(String);
+    method public static android.net.Uri buildChannelsUriForInput(@Nullable String);
+    method public static String buildInputId(android.content.ComponentName);
+    method public static android.net.Uri buildPreviewProgramUri(long);
+    method public static android.net.Uri buildPreviewProgramsUriForChannel(long);
+    method public static android.net.Uri buildPreviewProgramsUriForChannel(android.net.Uri);
+    method public static android.net.Uri buildProgramUri(long);
+    method public static android.net.Uri buildProgramsUriForChannel(long);
+    method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+    method public static android.net.Uri buildProgramsUriForChannel(long, long, long);
+    method public static android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+    method public static android.net.Uri buildRecordedProgramUri(long);
+    method public static android.net.Uri buildWatchNextProgramUri(long);
+    method public static boolean isChannelUri(@NonNull android.net.Uri);
+    method public static boolean isChannelUriForPassthroughInput(@NonNull android.net.Uri);
+    method public static boolean isChannelUriForTunerInput(@NonNull android.net.Uri);
+    method public static boolean isProgramUri(@NonNull android.net.Uri);
+    method public static boolean isRecordedProgramUri(@NonNull android.net.Uri);
+    method public static void requestChannelBrowsable(android.content.Context, long);
+    field public static final String ACTION_INITIALIZE_PROGRAMS = "android.media.tv.action.INITIALIZE_PROGRAMS";
+    field public static final String ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT = "android.media.tv.action.PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT";
+    field public static final String ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED";
+    field public static final String ACTION_REQUEST_CHANNEL_BROWSABLE = "android.media.tv.action.REQUEST_CHANNEL_BROWSABLE";
+    field public static final String ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED = "android.media.tv.action.WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED";
+    field public static final String AUTHORITY = "android.media.tv";
+    field public static final String EXTRA_CHANNEL_ID = "android.media.tv.extra.CHANNEL_ID";
+    field public static final String EXTRA_PREVIEW_PROGRAM_ID = "android.media.tv.extra.PREVIEW_PROGRAM_ID";
+    field public static final String EXTRA_WATCH_NEXT_PROGRAM_ID = "android.media.tv.extra.WATCH_NEXT_PROGRAM_ID";
+  }
+
+  public static interface TvContract.BaseTvColumns extends android.provider.BaseColumns {
+    field public static final String COLUMN_PACKAGE_NAME = "package_name";
+  }
+
+  public static final class TvContract.Channels implements android.media.tv.TvContract.BaseTvColumns {
+    method @Nullable public static String getVideoResolution(String);
+    field public static final String COLUMN_APP_LINK_COLOR = "app_link_color";
+    field public static final String COLUMN_APP_LINK_ICON_URI = "app_link_icon_uri";
+    field public static final String COLUMN_APP_LINK_INTENT_URI = "app_link_intent_uri";
+    field public static final String COLUMN_APP_LINK_POSTER_ART_URI = "app_link_poster_art_uri";
+    field public static final String COLUMN_APP_LINK_TEXT = "app_link_text";
+    field public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final String COLUMN_BROWSABLE = "browsable";
+    field public static final String COLUMN_CHANNEL_LIST_ID = "channel_list_id";
+    field public static final String COLUMN_DESCRIPTION = "description";
+    field public static final String COLUMN_DISPLAY_NAME = "display_name";
+    field public static final String COLUMN_DISPLAY_NUMBER = "display_number";
+    field public static final String COLUMN_GLOBAL_CONTENT_ID = "global_content_id";
+    field public static final String COLUMN_INPUT_ID = "input_id";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final String COLUMN_LOCKED = "locked";
+    field public static final String COLUMN_NETWORK_AFFILIATION = "network_affiliation";
+    field public static final String COLUMN_ORIGINAL_NETWORK_ID = "original_network_id";
+    field public static final String COLUMN_REMOTE_CONTROL_KEY_PRESET_NUMBER = "remote_control_key_preset_number";
+    field public static final String COLUMN_SCRAMBLED = "scrambled";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SERVICE_ID = "service_id";
+    field public static final String COLUMN_SERVICE_TYPE = "service_type";
+    field public static final String COLUMN_TRANSIENT = "transient";
+    field public static final String COLUMN_TRANSPORT_STREAM_ID = "transport_stream_id";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_FORMAT = "video_format";
+    field public static final String COLUMN_VIDEO_RESOLUTION = "video_resolution";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/channel";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/channel";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String SERVICE_TYPE_AUDIO = "SERVICE_TYPE_AUDIO";
+    field public static final String SERVICE_TYPE_AUDIO_VIDEO = "SERVICE_TYPE_AUDIO_VIDEO";
+    field public static final String SERVICE_TYPE_OTHER = "SERVICE_TYPE_OTHER";
+    field public static final String TYPE_1SEG = "TYPE_1SEG";
+    field public static final String TYPE_ATSC3_T = "TYPE_ATSC3_T";
+    field public static final String TYPE_ATSC_C = "TYPE_ATSC_C";
+    field public static final String TYPE_ATSC_M_H = "TYPE_ATSC_M_H";
+    field public static final String TYPE_ATSC_T = "TYPE_ATSC_T";
+    field public static final String TYPE_CMMB = "TYPE_CMMB";
+    field public static final String TYPE_DTMB = "TYPE_DTMB";
+    field public static final String TYPE_DVB_C = "TYPE_DVB_C";
+    field public static final String TYPE_DVB_C2 = "TYPE_DVB_C2";
+    field public static final String TYPE_DVB_H = "TYPE_DVB_H";
+    field public static final String TYPE_DVB_S = "TYPE_DVB_S";
+    field public static final String TYPE_DVB_S2 = "TYPE_DVB_S2";
+    field public static final String TYPE_DVB_SH = "TYPE_DVB_SH";
+    field public static final String TYPE_DVB_T = "TYPE_DVB_T";
+    field public static final String TYPE_DVB_T2 = "TYPE_DVB_T2";
+    field public static final String TYPE_ISDB_C = "TYPE_ISDB_C";
+    field public static final String TYPE_ISDB_S = "TYPE_ISDB_S";
+    field public static final String TYPE_ISDB_S3 = "TYPE_ISDB_S3";
+    field public static final String TYPE_ISDB_T = "TYPE_ISDB_T";
+    field public static final String TYPE_ISDB_TB = "TYPE_ISDB_TB";
+    field public static final String TYPE_NTSC = "TYPE_NTSC";
+    field public static final String TYPE_OTHER = "TYPE_OTHER";
+    field public static final String TYPE_PAL = "TYPE_PAL";
+    field public static final String TYPE_PREVIEW = "TYPE_PREVIEW";
+    field public static final String TYPE_SECAM = "TYPE_SECAM";
+    field public static final String TYPE_S_DMB = "TYPE_S_DMB";
+    field public static final String TYPE_T_DMB = "TYPE_T_DMB";
+    field public static final String VIDEO_FORMAT_1080I = "VIDEO_FORMAT_1080I";
+    field public static final String VIDEO_FORMAT_1080P = "VIDEO_FORMAT_1080P";
+    field public static final String VIDEO_FORMAT_2160P = "VIDEO_FORMAT_2160P";
+    field public static final String VIDEO_FORMAT_240P = "VIDEO_FORMAT_240P";
+    field public static final String VIDEO_FORMAT_360P = "VIDEO_FORMAT_360P";
+    field public static final String VIDEO_FORMAT_4320P = "VIDEO_FORMAT_4320P";
+    field public static final String VIDEO_FORMAT_480I = "VIDEO_FORMAT_480I";
+    field public static final String VIDEO_FORMAT_480P = "VIDEO_FORMAT_480P";
+    field public static final String VIDEO_FORMAT_576I = "VIDEO_FORMAT_576I";
+    field public static final String VIDEO_FORMAT_576P = "VIDEO_FORMAT_576P";
+    field public static final String VIDEO_FORMAT_720P = "VIDEO_FORMAT_720P";
+    field public static final String VIDEO_RESOLUTION_ED = "VIDEO_RESOLUTION_ED";
+    field public static final String VIDEO_RESOLUTION_FHD = "VIDEO_RESOLUTION_FHD";
+    field public static final String VIDEO_RESOLUTION_HD = "VIDEO_RESOLUTION_HD";
+    field public static final String VIDEO_RESOLUTION_SD = "VIDEO_RESOLUTION_SD";
+    field public static final String VIDEO_RESOLUTION_UHD = "VIDEO_RESOLUTION_UHD";
+  }
+
+  public static final class TvContract.Channels.Logo {
+    field public static final String CONTENT_DIRECTORY = "logo";
+  }
+
+  public static final class TvContract.PreviewPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+    field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+    field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+    field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+    field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+    field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_AUTHOR = "author";
+    field public static final String COLUMN_AVAILABILITY = "availability";
+    field public static final String COLUMN_BROWSABLE = "browsable";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_CONTENT_ID = "content_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_DURATION_MILLIS = "duration_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_INTENT_URI = "intent_uri";
+    field public static final String COLUMN_INTERACTION_COUNT = "interaction_count";
+    field public static final String COLUMN_INTERACTION_TYPE = "interaction_type";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final String COLUMN_ITEM_COUNT = "item_count";
+    field public static final String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+    field public static final String COLUMN_LIVE = "live";
+    field public static final String COLUMN_LOGO_URI = "logo_uri";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_OFFER_PRICE = "offer_price";
+    field public static final String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+    field public static final String COLUMN_RELEASE_DATE = "release_date";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_STARTING_PRICE = "starting_price";
+    field public static final String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_TRANSIENT = "transient";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String COLUMN_WEIGHT = "weight";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/preview_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/preview_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+    field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+    field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+    field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+    field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+    field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+    field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+    field public static final int TYPE_ALBUM = 8; // 0x8
+    field public static final int TYPE_ARTIST = 9; // 0x9
+    field public static final int TYPE_CHANNEL = 6; // 0x6
+    field public static final int TYPE_CLIP = 4; // 0x4
+    field public static final int TYPE_EVENT = 5; // 0x5
+    field public static final int TYPE_MOVIE = 0; // 0x0
+    field public static final int TYPE_PLAYLIST = 10; // 0xa
+    field public static final int TYPE_STATION = 11; // 0xb
+    field public static final int TYPE_TRACK = 7; // 0x7
+    field public static final int TYPE_TV_EPISODE = 3; // 0x3
+    field public static final int TYPE_TV_SEASON = 2; // 0x2
+    field public static final int TYPE_TV_SERIES = 1; // 0x1
+  }
+
+  public static final class TvContract.Programs implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field @Deprecated public static final String COLUMN_EPISODE_NUMBER = "episode_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_EVENT_ID = "event_id";
+    field public static final String COLUMN_GLOBAL_CONTENT_ID = "global_content_id";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_RECORDING_PROHIBITED = "recording_prohibited";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field @Deprecated public static final String COLUMN_SEASON_NUMBER = "season_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+  }
+
+  public static final class TvContract.Programs.Genres {
+    method public static String[] decode(@NonNull String);
+    method public static String encode(@NonNull java.lang.String...);
+    method public static boolean isCanonical(String);
+    field public static final String ANIMAL_WILDLIFE = "ANIMAL_WILDLIFE";
+    field public static final String ARTS = "ARTS";
+    field public static final String COMEDY = "COMEDY";
+    field public static final String DRAMA = "DRAMA";
+    field public static final String EDUCATION = "EDUCATION";
+    field public static final String ENTERTAINMENT = "ENTERTAINMENT";
+    field public static final String FAMILY_KIDS = "FAMILY_KIDS";
+    field public static final String GAMING = "GAMING";
+    field public static final String LIFE_STYLE = "LIFE_STYLE";
+    field public static final String MOVIES = "MOVIES";
+    field public static final String MUSIC = "MUSIC";
+    field public static final String NEWS = "NEWS";
+    field public static final String PREMIER = "PREMIER";
+    field public static final String SHOPPING = "SHOPPING";
+    field public static final String SPORTS = "SPORTS";
+    field public static final String TECH_SCIENCE = "TECH_SCIENCE";
+    field public static final String TRAVEL = "TRAVEL";
+  }
+
+  public static final class TvContract.RecordedPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_BROADCAST_GENRE = "broadcast_genre";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_INPUT_ID = "input_id";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_RECORDING_DATA_BYTES = "recording_data_bytes";
+    field public static final String COLUMN_RECORDING_DATA_URI = "recording_data_uri";
+    field public static final String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis";
+    field public static final String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/recorded_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/recorded_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+  }
+
+  public static final class TvContract.WatchNextPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final int ASPECT_RATIO_16_9 = 0; // 0x0
+    field public static final int ASPECT_RATIO_1_1 = 3; // 0x3
+    field public static final int ASPECT_RATIO_2_3 = 4; // 0x4
+    field public static final int ASPECT_RATIO_3_2 = 1; // 0x1
+    field public static final int ASPECT_RATIO_4_3 = 2; // 0x2
+    field public static final int AVAILABILITY_AVAILABLE = 0; // 0x0
+    field public static final int AVAILABILITY_FREE_WITH_SUBSCRIPTION = 1; // 0x1
+    field public static final int AVAILABILITY_PAID_CONTENT = 2; // 0x2
+    field public static final String COLUMN_AUDIO_LANGUAGE = "audio_language";
+    field public static final String COLUMN_AUTHOR = "author";
+    field public static final String COLUMN_AVAILABILITY = "availability";
+    field public static final String COLUMN_BROWSABLE = "browsable";
+    field public static final String COLUMN_CANONICAL_GENRE = "canonical_genre";
+    field public static final String COLUMN_CONTENT_ID = "content_id";
+    field public static final String COLUMN_CONTENT_RATING = "content_rating";
+    field public static final String COLUMN_DURATION_MILLIS = "duration_millis";
+    field public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number";
+    field public static final String COLUMN_EPISODE_TITLE = "episode_title";
+    field public static final String COLUMN_INTENT_URI = "intent_uri";
+    field public static final String COLUMN_INTERACTION_COUNT = "interaction_count";
+    field public static final String COLUMN_INTERACTION_TYPE = "interaction_type";
+    field public static final String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG2 = "internal_provider_flag2";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG3 = "internal_provider_flag3";
+    field public static final String COLUMN_INTERNAL_PROVIDER_FLAG4 = "internal_provider_flag4";
+    field public static final String COLUMN_INTERNAL_PROVIDER_ID = "internal_provider_id";
+    field public static final String COLUMN_ITEM_COUNT = "item_count";
+    field public static final String COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS = "last_engagement_time_utc_millis";
+    field public static final String COLUMN_LAST_PLAYBACK_POSITION_MILLIS = "last_playback_position_millis";
+    field public static final String COLUMN_LIVE = "live";
+    field public static final String COLUMN_LOGO_URI = "logo_uri";
+    field public static final String COLUMN_LONG_DESCRIPTION = "long_description";
+    field public static final String COLUMN_OFFER_PRICE = "offer_price";
+    field public static final String COLUMN_POSTER_ART_ASPECT_RATIO = "poster_art_aspect_ratio";
+    field public static final String COLUMN_POSTER_ART_URI = "poster_art_uri";
+    field public static final String COLUMN_PREVIEW_VIDEO_URI = "preview_video_uri";
+    field public static final String COLUMN_RELEASE_DATE = "release_date";
+    field public static final String COLUMN_REVIEW_RATING = "review_rating";
+    field public static final String COLUMN_REVIEW_RATING_STYLE = "review_rating_style";
+    field public static final String COLUMN_SEARCHABLE = "searchable";
+    field public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number";
+    field public static final String COLUMN_SEASON_TITLE = "season_title";
+    field public static final String COLUMN_SERIES_ID = "series_id";
+    field public static final String COLUMN_SHORT_DESCRIPTION = "short_description";
+    field public static final String COLUMN_SPLIT_ID = "split_id";
+    field public static final String COLUMN_STARTING_PRICE = "starting_price";
+    field public static final String COLUMN_THUMBNAIL_ASPECT_RATIO = "poster_thumbnail_aspect_ratio";
+    field public static final String COLUMN_THUMBNAIL_URI = "thumbnail_uri";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_TRANSIENT = "transient";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final String COLUMN_VERSION_NUMBER = "version_number";
+    field public static final String COLUMN_VIDEO_HEIGHT = "video_height";
+    field public static final String COLUMN_VIDEO_WIDTH = "video_width";
+    field public static final String COLUMN_WATCH_NEXT_TYPE = "watch_next_type";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watch_next_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/watch_next_program";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int INTERACTION_TYPE_FANS = 3; // 0x3
+    field public static final int INTERACTION_TYPE_FOLLOWERS = 2; // 0x2
+    field public static final int INTERACTION_TYPE_LIKES = 4; // 0x4
+    field public static final int INTERACTION_TYPE_LISTENS = 1; // 0x1
+    field public static final int INTERACTION_TYPE_THUMBS = 5; // 0x5
+    field public static final int INTERACTION_TYPE_VIEWERS = 6; // 0x6
+    field public static final int INTERACTION_TYPE_VIEWS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_PERCENTAGE = 2; // 0x2
+    field public static final int REVIEW_RATING_STYLE_STARS = 0; // 0x0
+    field public static final int REVIEW_RATING_STYLE_THUMBS_UP_DOWN = 1; // 0x1
+    field public static final int TYPE_ALBUM = 8; // 0x8
+    field public static final int TYPE_ARTIST = 9; // 0x9
+    field public static final int TYPE_CHANNEL = 6; // 0x6
+    field public static final int TYPE_CLIP = 4; // 0x4
+    field public static final int TYPE_EVENT = 5; // 0x5
+    field public static final int TYPE_MOVIE = 0; // 0x0
+    field public static final int TYPE_PLAYLIST = 10; // 0xa
+    field public static final int TYPE_STATION = 11; // 0xb
+    field public static final int TYPE_TRACK = 7; // 0x7
+    field public static final int TYPE_TV_EPISODE = 3; // 0x3
+    field public static final int TYPE_TV_SEASON = 2; // 0x2
+    field public static final int TYPE_TV_SERIES = 1; // 0x1
+    field public static final int WATCH_NEXT_TYPE_CONTINUE = 0; // 0x0
+    field public static final int WATCH_NEXT_TYPE_NEW = 2; // 0x2
+    field public static final int WATCH_NEXT_TYPE_NEXT = 1; // 0x1
+    field public static final int WATCH_NEXT_TYPE_WATCHLIST = 3; // 0x3
+  }
+
+  public final class TvInputInfo implements android.os.Parcelable {
+    method public boolean canPauseRecording();
+    method public boolean canRecord();
+    method @Deprecated public android.content.Intent createSettingsIntent();
+    method public android.content.Intent createSetupIntent();
+    method public int describeContents();
+    method public android.os.Bundle getExtras();
+    method public String getId();
+    method public String getParentId();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public int getTunerCount();
+    method public int getType();
+    method public boolean isHidden(android.content.Context);
+    method public boolean isPassthroughInput();
+    method public CharSequence loadCustomLabel(android.content.Context);
+    method public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context);
+    method public CharSequence loadLabel(@NonNull android.content.Context);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvInputInfo> CREATOR;
+    field public static final String EXTRA_INPUT_ID = "android.media.tv.extra.INPUT_ID";
+    field public static final int TYPE_COMPONENT = 1004; // 0x3ec
+    field public static final int TYPE_COMPOSITE = 1001; // 0x3e9
+    field public static final int TYPE_DISPLAY_PORT = 1008; // 0x3f0
+    field public static final int TYPE_DVI = 1006; // 0x3ee
+    field public static final int TYPE_HDMI = 1007; // 0x3ef
+    field public static final int TYPE_OTHER = 1000; // 0x3e8
+    field public static final int TYPE_SCART = 1003; // 0x3eb
+    field public static final int TYPE_SVIDEO = 1002; // 0x3ea
+    field public static final int TYPE_TUNER = 0; // 0x0
+    field public static final int TYPE_VGA = 1005; // 0x3ed
+  }
+
+  public static final class TvInputInfo.Builder {
+    ctor public TvInputInfo.Builder(android.content.Context, android.content.ComponentName);
+    method public android.media.tv.TvInputInfo build();
+    method @NonNull public android.media.tv.TvInputInfo.Builder setCanPauseRecording(boolean);
+    method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean);
+    method public android.media.tv.TvInputInfo.Builder setExtras(android.os.Bundle);
+    method public android.media.tv.TvInputInfo.Builder setTunerCount(int);
+  }
+
+  public final class TvInputManager {
+    method public java.util.List<android.media.tv.TvContentRating> getBlockedRatings();
+    method public int getInputState(@NonNull String);
+    method @Nullable public android.media.tv.TvInputInfo getTvInputInfo(@NonNull String);
+    method public java.util.List<android.media.tv.TvInputInfo> getTvInputList();
+    method public boolean isParentalControlsEnabled();
+    method public boolean isRatingBlocked(@NonNull android.media.tv.TvContentRating);
+    method public void registerCallback(@NonNull android.media.tv.TvInputManager.TvInputCallback, @NonNull android.os.Handler);
+    method public void unregisterCallback(@NonNull android.media.tv.TvInputManager.TvInputCallback);
+    method public void updateTvInputInfo(@NonNull android.media.tv.TvInputInfo);
+    field public static final String ACTION_BLOCKED_RATINGS_CHANGED = "android.media.tv.action.BLOCKED_RATINGS_CHANGED";
+    field public static final String ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED = "android.media.tv.action.PARENTAL_CONTROLS_ENABLED_CHANGED";
+    field public static final String ACTION_QUERY_CONTENT_RATING_SYSTEMS = "android.media.tv.action.QUERY_CONTENT_RATING_SYSTEMS";
+    field public static final String ACTION_SETUP_INPUTS = "android.media.tv.action.SETUP_INPUTS";
+    field public static final String ACTION_VIEW_RECORDING_SCHEDULES = "android.media.tv.action.VIEW_RECORDING_SCHEDULES";
+    field public static final int INPUT_STATE_CONNECTED = 0; // 0x0
+    field public static final int INPUT_STATE_CONNECTED_STANDBY = 1; // 0x1
+    field public static final int INPUT_STATE_DISCONNECTED = 2; // 0x2
+    field public static final String META_DATA_CONTENT_RATING_SYSTEMS = "android.media.tv.metadata.CONTENT_RATING_SYSTEMS";
+    field public static final int RECORDING_ERROR_INSUFFICIENT_SPACE = 1; // 0x1
+    field public static final int RECORDING_ERROR_RESOURCE_BUSY = 2; // 0x2
+    field public static final int RECORDING_ERROR_UNKNOWN = 0; // 0x0
+    field public static final long TIME_SHIFT_INVALID_TIME = -9223372036854775808L; // 0x8000000000000000L
+    field public static final int TIME_SHIFT_STATUS_AVAILABLE = 3; // 0x3
+    field public static final int TIME_SHIFT_STATUS_UNAVAILABLE = 2; // 0x2
+    field public static final int TIME_SHIFT_STATUS_UNKNOWN = 0; // 0x0
+    field public static final int TIME_SHIFT_STATUS_UNSUPPORTED = 1; // 0x1
+    field public static final int VIDEO_UNAVAILABLE_REASON_AUDIO_ONLY = 4; // 0x4
+    field public static final int VIDEO_UNAVAILABLE_REASON_BUFFERING = 3; // 0x3
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_BLACKOUT = 16; // 0x10
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_CARD_INVALID = 15; // 0xf
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_CARD_MUTE = 14; // 0xe
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_INSUFFICIENT_OUTPUT_PROTECTION = 7; // 0x7
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_LICENSE_EXPIRED = 10; // 0xa
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_NEED_ACTIVATION = 11; // 0xb
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_NEED_PAIRING = 12; // 0xc
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_NO_CARD = 13; // 0xd
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_PVR_RECORDING_NOT_ALLOWED = 8; // 0x8
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_REBOOTING = 17; // 0x11
+    field public static final int VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN = 18; // 0x12
+    field public static final int VIDEO_UNAVAILABLE_REASON_INSUFFICIENT_RESOURCE = 6; // 0x6
+    field public static final int VIDEO_UNAVAILABLE_REASON_NOT_CONNECTED = 5; // 0x5
+    field public static final int VIDEO_UNAVAILABLE_REASON_TUNING = 1; // 0x1
+    field public static final int VIDEO_UNAVAILABLE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL = 2; // 0x2
+  }
+
+  public abstract static class TvInputManager.TvInputCallback {
+    ctor public TvInputManager.TvInputCallback();
+    method public void onInputAdded(String);
+    method public void onInputRemoved(String);
+    method public void onInputStateChanged(String, int);
+    method public void onInputUpdated(String);
+    method public void onTvInputInfoUpdated(android.media.tv.TvInputInfo);
+  }
+
+  public abstract class TvInputService extends android.app.Service {
+    ctor public TvInputService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public android.media.tv.TvInputService.RecordingSession onCreateRecordingSession(@NonNull String);
+    method @Nullable public android.media.tv.TvInputService.RecordingSession onCreateRecordingSession(@NonNull String, @NonNull String);
+    method @Nullable public abstract android.media.tv.TvInputService.Session onCreateSession(@NonNull String);
+    method @Nullable public android.media.tv.TvInputService.Session onCreateSession(@NonNull String, @NonNull String);
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_BACKGROUND = 100; // 0x64
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_LIVE = 400; // 0x190
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK = 300; // 0x12c
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_RECORD = 500; // 0x1f4
+    field public static final int PRIORITY_HINT_USE_CASE_TYPE_SCAN = 200; // 0xc8
+    field public static final String SERVICE_INTERFACE = "android.media.tv.TvInputService";
+    field public static final String SERVICE_META_DATA = "android.media.tv.input";
+  }
+
+  public abstract static class TvInputService.HardwareSession extends android.media.tv.TvInputService.Session {
+    ctor public TvInputService.HardwareSession(android.content.Context);
+    method public abstract String getHardwareInputId();
+    method public void onHardwareVideoAvailable();
+    method public void onHardwareVideoUnavailable(int);
+    method public final boolean onSetSurface(android.view.Surface);
+  }
+
+  public abstract static class TvInputService.RecordingSession {
+    ctor public TvInputService.RecordingSession(android.content.Context);
+    method public void notifyError(int);
+    method public void notifyRecordingStopped(android.net.Uri);
+    method public void notifyTuned(android.net.Uri);
+    method public void onAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public void onPauseRecording(@NonNull android.os.Bundle);
+    method public abstract void onRelease();
+    method public void onResumeRecording(@NonNull android.os.Bundle);
+    method public abstract void onStartRecording(@Nullable android.net.Uri);
+    method public void onStartRecording(@Nullable android.net.Uri, @NonNull android.os.Bundle);
+    method public abstract void onStopRecording();
+    method public abstract void onTune(android.net.Uri);
+    method public void onTune(android.net.Uri, android.os.Bundle);
+  }
+
+  public abstract static class TvInputService.Session implements android.view.KeyEvent.Callback {
+    ctor public TvInputService.Session(android.content.Context);
+    method public void layoutSurface(int, int, int, int);
+    method public void notifyChannelRetuned(android.net.Uri);
+    method public void notifyContentAllowed();
+    method public void notifyContentBlocked(@NonNull android.media.tv.TvContentRating);
+    method public void notifyTimeShiftStatusChanged(int);
+    method public void notifyTrackSelected(int, String);
+    method public void notifyTracksChanged(java.util.List<android.media.tv.TvTrackInfo>);
+    method public void notifyVideoAvailable();
+    method public void notifyVideoUnavailable(int);
+    method public void onAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public android.view.View onCreateOverlayView();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onOverlayViewSizeChanged(int, int);
+    method public abstract void onRelease();
+    method public boolean onSelectTrack(int, @Nullable String);
+    method public abstract void onSetCaptionEnabled(boolean);
+    method public abstract void onSetStreamVolume(@FloatRange(from=0.0, to=1.0) float);
+    method public abstract boolean onSetSurface(@Nullable android.view.Surface);
+    method public void onSurfaceChanged(int, int, int);
+    method public long onTimeShiftGetCurrentPosition();
+    method public long onTimeShiftGetStartPosition();
+    method public void onTimeShiftPause();
+    method public void onTimeShiftPlay(android.net.Uri);
+    method public void onTimeShiftResume();
+    method public void onTimeShiftSeekTo(long);
+    method public void onTimeShiftSetPlaybackParams(android.media.PlaybackParams);
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public abstract boolean onTune(android.net.Uri);
+    method public boolean onTune(android.net.Uri, android.os.Bundle);
+    method public void onUnblockContent(android.media.tv.TvContentRating);
+    method public void setOverlayViewEnabled(boolean);
+  }
+
+  public class TvRecordingClient {
+    ctor public TvRecordingClient(android.content.Context, String, @NonNull android.media.tv.TvRecordingClient.RecordingCallback, android.os.Handler);
+    method public void pauseRecording();
+    method public void pauseRecording(@NonNull android.os.Bundle);
+    method public void release();
+    method public void resumeRecording();
+    method public void resumeRecording(@NonNull android.os.Bundle);
+    method public void sendAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public void startRecording(@Nullable android.net.Uri);
+    method public void startRecording(@Nullable android.net.Uri, @NonNull android.os.Bundle);
+    method public void stopRecording();
+    method public void tune(String, android.net.Uri);
+    method public void tune(String, android.net.Uri, android.os.Bundle);
+  }
+
+  public abstract static class TvRecordingClient.RecordingCallback {
+    ctor public TvRecordingClient.RecordingCallback();
+    method public void onConnectionFailed(String);
+    method public void onDisconnected(String);
+    method public void onError(int);
+    method public void onRecordingStopped(android.net.Uri);
+    method public void onTuned(android.net.Uri);
+  }
+
+  public final class TvTrackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAudioChannelCount();
+    method public int getAudioSampleRate();
+    method public CharSequence getDescription();
+    method @Nullable public String getEncoding();
+    method public android.os.Bundle getExtra();
+    method public String getId();
+    method public String getLanguage();
+    method public int getType();
+    method public byte getVideoActiveFormatDescription();
+    method public float getVideoFrameRate();
+    method public int getVideoHeight();
+    method public float getVideoPixelAspectRatio();
+    method public int getVideoWidth();
+    method public boolean isAudioDescription();
+    method public boolean isEncrypted();
+    method public boolean isHardOfHearing();
+    method public boolean isSpokenSubtitle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvTrackInfo> CREATOR;
+    field public static final int TYPE_AUDIO = 0; // 0x0
+    field public static final int TYPE_SUBTITLE = 2; // 0x2
+    field public static final int TYPE_VIDEO = 1; // 0x1
+  }
+
+  public static final class TvTrackInfo.Builder {
+    ctor public TvTrackInfo.Builder(int, @NonNull String);
+    method @NonNull public android.media.tv.TvTrackInfo build();
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioChannelCount(int);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioDescription(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setAudioSampleRate(int);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setDescription(@NonNull CharSequence);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setEncoding(@Nullable String);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setEncrypted(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setExtra(@NonNull android.os.Bundle);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setHardOfHearing(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setLanguage(@NonNull String);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setSpokenSubtitle(boolean);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoActiveFormatDescription(byte);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoFrameRate(float);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoHeight(int);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoPixelAspectRatio(float);
+    method @NonNull public android.media.tv.TvTrackInfo.Builder setVideoWidth(int);
+  }
+
+  public class TvView extends android.view.ViewGroup {
+    ctor public TvView(android.content.Context);
+    ctor public TvView(android.content.Context, android.util.AttributeSet);
+    ctor public TvView(android.content.Context, android.util.AttributeSet, int);
+    method public boolean dispatchUnhandledInputEvent(android.view.InputEvent);
+    method public String getSelectedTrack(int);
+    method public java.util.List<android.media.tv.TvTrackInfo> getTracks(int);
+    method public boolean onUnhandledInputEvent(android.view.InputEvent);
+    method public void reset();
+    method public void selectTrack(int, String);
+    method public void sendAppPrivateCommand(@NonNull String, android.os.Bundle);
+    method public void setCallback(@Nullable android.media.tv.TvView.TvInputCallback);
+    method public void setCaptionEnabled(boolean);
+    method public void setOnUnhandledInputEventListener(android.media.tv.TvView.OnUnhandledInputEventListener);
+    method public void setStreamVolume(@FloatRange(from=0.0, to=1.0) float);
+    method public void setTimeShiftPositionCallback(@Nullable android.media.tv.TvView.TimeShiftPositionCallback);
+    method public void setZOrderMediaOverlay(boolean);
+    method public void setZOrderOnTop(boolean);
+    method public void timeShiftPause();
+    method public void timeShiftPlay(String, android.net.Uri);
+    method public void timeShiftResume();
+    method public void timeShiftSeekTo(long);
+    method public void timeShiftSetPlaybackParams(@NonNull android.media.PlaybackParams);
+    method public void tune(@NonNull String, android.net.Uri);
+    method public void tune(String, android.net.Uri, android.os.Bundle);
+  }
+
+  public static interface TvView.OnUnhandledInputEventListener {
+    method public boolean onUnhandledInputEvent(android.view.InputEvent);
+  }
+
+  public abstract static class TvView.TimeShiftPositionCallback {
+    ctor public TvView.TimeShiftPositionCallback();
+    method public void onTimeShiftCurrentPositionChanged(String, long);
+    method public void onTimeShiftStartPositionChanged(String, long);
+  }
+
+  public abstract static class TvView.TvInputCallback {
+    ctor public TvView.TvInputCallback();
+    method public void onChannelRetuned(String, android.net.Uri);
+    method public void onConnectionFailed(String);
+    method public void onContentAllowed(String);
+    method public void onContentBlocked(String, android.media.tv.TvContentRating);
+    method public void onDisconnected(String);
+    method public void onTimeShiftStatusChanged(String, int);
+    method public void onTrackSelected(String, int, String);
+    method public void onTracksChanged(String, java.util.List<android.media.tv.TvTrackInfo>);
+    method public void onVideoAvailable(String);
+    method public void onVideoSizeChanged(String, int, int);
+    method public void onVideoUnavailable(String, int);
+  }
+
+}
+
+package android.mtp {
+
+  public final class MtpConstants {
+    ctor public MtpConstants();
+    method public static boolean isAbstractObject(int);
+    field public static final int ASSOCIATION_TYPE_GENERIC_FOLDER = 1; // 0x1
+    field public static final int FORMAT_3GP_CONTAINER = 47492; // 0xb984
+    field public static final int FORMAT_AAC = 47363; // 0xb903
+    field public static final int FORMAT_ABSTRACT_AUDIO_ALBUM = 47619; // 0xba03
+    field public static final int FORMAT_ABSTRACT_AUDIO_PLAYLIST = 47625; // 0xba09
+    field public static final int FORMAT_ABSTRACT_AV_PLAYLIST = 47621; // 0xba05
+    field public static final int FORMAT_ABSTRACT_DOCUMENT = 47745; // 0xba81
+    field public static final int FORMAT_ABSTRACT_IMAGE_ALBUM = 47618; // 0xba02
+    field public static final int FORMAT_ABSTRACT_MEDIACAST = 47627; // 0xba0b
+    field public static final int FORMAT_ABSTRACT_MULTIMEDIA_ALBUM = 47617; // 0xba01
+    field public static final int FORMAT_ABSTRACT_VIDEO_ALBUM = 47620; // 0xba04
+    field public static final int FORMAT_ABSTRACT_VIDEO_PLAYLIST = 47626; // 0xba0a
+    field public static final int FORMAT_AIFF = 12295; // 0x3007
+    field public static final int FORMAT_ASF = 12300; // 0x300c
+    field public static final int FORMAT_ASSOCIATION = 12289; // 0x3001
+    field public static final int FORMAT_ASX_PLAYLIST = 47635; // 0xba13
+    field public static final int FORMAT_AUDIBLE = 47364; // 0xb904
+    field public static final int FORMAT_AVI = 12298; // 0x300a
+    field public static final int FORMAT_BMP = 14340; // 0x3804
+    field public static final int FORMAT_DEFINED = 14336; // 0x3800
+    field public static final int FORMAT_DNG = 14353; // 0x3811
+    field public static final int FORMAT_DPOF = 12294; // 0x3006
+    field public static final int FORMAT_EXECUTABLE = 12291; // 0x3003
+    field public static final int FORMAT_EXIF_JPEG = 14337; // 0x3801
+    field public static final int FORMAT_FLAC = 47366; // 0xb906
+    field public static final int FORMAT_GIF = 14343; // 0x3807
+    field public static final int FORMAT_HTML = 12293; // 0x3005
+    field public static final int FORMAT_JFIF = 14344; // 0x3808
+    field public static final int FORMAT_JP2 = 14351; // 0x380f
+    field public static final int FORMAT_JPX = 14352; // 0x3810
+    field public static final int FORMAT_M3U_PLAYLIST = 47633; // 0xba11
+    field public static final int FORMAT_MP2 = 47491; // 0xb983
+    field public static final int FORMAT_MP3 = 12297; // 0x3009
+    field public static final int FORMAT_MP4_CONTAINER = 47490; // 0xb982
+    field public static final int FORMAT_MPEG = 12299; // 0x300b
+    field public static final int FORMAT_MPL_PLAYLIST = 47634; // 0xba12
+    field public static final int FORMAT_MS_EXCEL_SPREADSHEET = 47749; // 0xba85
+    field public static final int FORMAT_MS_POWERPOINT_PRESENTATION = 47750; // 0xba86
+    field public static final int FORMAT_MS_WORD_DOCUMENT = 47747; // 0xba83
+    field public static final int FORMAT_OGG = 47362; // 0xb902
+    field public static final int FORMAT_PICT = 14346; // 0x380a
+    field public static final int FORMAT_PLS_PLAYLIST = 47636; // 0xba14
+    field public static final int FORMAT_PNG = 14347; // 0x380b
+    field public static final int FORMAT_SCRIPT = 12290; // 0x3002
+    field public static final int FORMAT_TEXT = 12292; // 0x3004
+    field public static final int FORMAT_TIFF = 14349; // 0x380d
+    field public static final int FORMAT_TIFF_EP = 14338; // 0x3802
+    field public static final int FORMAT_UNDEFINED = 12288; // 0x3000
+    field public static final int FORMAT_UNDEFINED_AUDIO = 47360; // 0xb900
+    field public static final int FORMAT_UNDEFINED_COLLECTION = 47616; // 0xba00
+    field public static final int FORMAT_UNDEFINED_DOCUMENT = 47744; // 0xba80
+    field public static final int FORMAT_UNDEFINED_FIRMWARE = 47106; // 0xb802
+    field public static final int FORMAT_UNDEFINED_VIDEO = 47488; // 0xb980
+    field public static final int FORMAT_WAV = 12296; // 0x3008
+    field public static final int FORMAT_WINDOWS_IMAGE_FORMAT = 47233; // 0xb881
+    field public static final int FORMAT_WMA = 47361; // 0xb901
+    field public static final int FORMAT_WMV = 47489; // 0xb981
+    field public static final int FORMAT_WPL_PLAYLIST = 47632; // 0xba10
+    field public static final int FORMAT_XML_DOCUMENT = 47746; // 0xba82
+    field public static final int OPERATION_CLOSE_SESSION = 4099; // 0x1003
+    field public static final int OPERATION_COPY_OBJECT = 4122; // 0x101a
+    field public static final int OPERATION_DELETE_OBJECT = 4107; // 0x100b
+    field public static final int OPERATION_FORMAT_STORE = 4111; // 0x100f
+    field public static final int OPERATION_GET_DEVICE_INFO = 4097; // 0x1001
+    field public static final int OPERATION_GET_DEVICE_PROP_DESC = 4116; // 0x1014
+    field public static final int OPERATION_GET_DEVICE_PROP_VALUE = 4117; // 0x1015
+    field public static final int OPERATION_GET_NUM_OBJECTS = 4102; // 0x1006
+    field public static final int OPERATION_GET_OBJECT = 4105; // 0x1009
+    field public static final int OPERATION_GET_OBJECT_HANDLES = 4103; // 0x1007
+    field public static final int OPERATION_GET_OBJECT_INFO = 4104; // 0x1008
+    field public static final int OPERATION_GET_OBJECT_PROPS_SUPPORTED = 38913; // 0x9801
+    field public static final int OPERATION_GET_OBJECT_PROP_DESC = 38914; // 0x9802
+    field public static final int OPERATION_GET_OBJECT_PROP_VALUE = 38915; // 0x9803
+    field public static final int OPERATION_GET_OBJECT_REFERENCES = 38928; // 0x9810
+    field public static final int OPERATION_GET_PARTIAL_OBJECT = 4123; // 0x101b
+    field public static final int OPERATION_GET_PARTIAL_OBJECT_64 = 38337; // 0x95c1
+    field public static final int OPERATION_GET_STORAGE_INFO = 4101; // 0x1005
+    field public static final int OPERATION_GET_STORAGE_I_DS = 4100; // 0x1004
+    field public static final int OPERATION_GET_THUMB = 4106; // 0x100a
+    field public static final int OPERATION_INITIATE_CAPTURE = 4110; // 0x100e
+    field public static final int OPERATION_INITIATE_OPEN_CAPTURE = 4124; // 0x101c
+    field public static final int OPERATION_MOVE_OBJECT = 4121; // 0x1019
+    field public static final int OPERATION_OPEN_SESSION = 4098; // 0x1002
+    field public static final int OPERATION_POWER_DOWN = 4115; // 0x1013
+    field public static final int OPERATION_RESET_DEVICE = 4112; // 0x1010
+    field public static final int OPERATION_RESET_DEVICE_PROP_VALUE = 4119; // 0x1017
+    field public static final int OPERATION_SELF_TEST = 4113; // 0x1011
+    field public static final int OPERATION_SEND_OBJECT = 4109; // 0x100d
+    field public static final int OPERATION_SEND_OBJECT_INFO = 4108; // 0x100c
+    field public static final int OPERATION_SET_DEVICE_PROP_VALUE = 4118; // 0x1016
+    field public static final int OPERATION_SET_OBJECT_PROP_VALUE = 38916; // 0x9804
+    field public static final int OPERATION_SET_OBJECT_PROTECTION = 4114; // 0x1012
+    field public static final int OPERATION_SET_OBJECT_REFERENCES = 38929; // 0x9811
+    field public static final int OPERATION_SKIP = 38944; // 0x9820
+    field public static final int OPERATION_TERMINATE_OPEN_CAPTURE = 4120; // 0x1018
+    field public static final int PROTECTION_STATUS_NONE = 0; // 0x0
+    field public static final int PROTECTION_STATUS_NON_TRANSFERABLE_DATA = 32771; // 0x8003
+    field public static final int PROTECTION_STATUS_READ_ONLY = 32769; // 0x8001
+    field public static final int PROTECTION_STATUS_READ_ONLY_DATA = 32770; // 0x8002
+  }
+
+  public final class MtpDevice {
+    ctor public MtpDevice(@NonNull android.hardware.usb.UsbDevice);
+    method public void close();
+    method public boolean deleteObject(int);
+    method public int getDeviceId();
+    method @Nullable public android.mtp.MtpDeviceInfo getDeviceInfo();
+    method @NonNull public String getDeviceName();
+    method @Nullable public byte[] getObject(int, int);
+    method @Nullable public int[] getObjectHandles(int, int, int);
+    method @Nullable public android.mtp.MtpObjectInfo getObjectInfo(int);
+    method public long getParent(int);
+    method public long getPartialObject(int, long, long, @NonNull byte[]) throws java.io.IOException;
+    method public long getPartialObject64(int, long, long, @NonNull byte[]) throws java.io.IOException;
+    method public long getStorageId(int);
+    method @Nullable public int[] getStorageIds();
+    method @Nullable public android.mtp.MtpStorageInfo getStorageInfo(int);
+    method @Nullable public byte[] getThumbnail(int);
+    method public boolean importFile(int, @NonNull String);
+    method public boolean importFile(int, @NonNull android.os.ParcelFileDescriptor);
+    method public boolean open(@NonNull android.hardware.usb.UsbDeviceConnection);
+    method @NonNull public android.mtp.MtpEvent readEvent(@Nullable android.os.CancellationSignal) throws java.io.IOException;
+    method public boolean sendObject(int, long, @NonNull android.os.ParcelFileDescriptor);
+    method @Nullable public android.mtp.MtpObjectInfo sendObjectInfo(@NonNull android.mtp.MtpObjectInfo);
+  }
+
+  public class MtpDeviceInfo {
+    method @NonNull public final int[] getEventsSupported();
+    method @NonNull public final String getManufacturer();
+    method @NonNull public final String getModel();
+    method @NonNull public final int[] getOperationsSupported();
+    method @NonNull public final String getSerialNumber();
+    method @NonNull public final String getVersion();
+    method public boolean isEventSupported(int);
+    method public boolean isOperationSupported(int);
+  }
+
+  public class MtpEvent {
+    method public int getDevicePropCode();
+    method public int getEventCode();
+    method public int getObjectFormatCode();
+    method public int getObjectHandle();
+    method public int getObjectPropCode();
+    method public int getParameter1();
+    method public int getParameter2();
+    method public int getParameter3();
+    method public int getStorageId();
+    method public int getTransactionId();
+    field public static final int EVENT_CANCEL_TRANSACTION = 16385; // 0x4001
+    field public static final int EVENT_CAPTURE_COMPLETE = 16397; // 0x400d
+    field public static final int EVENT_DEVICE_INFO_CHANGED = 16392; // 0x4008
+    field public static final int EVENT_DEVICE_PROP_CHANGED = 16390; // 0x4006
+    field public static final int EVENT_DEVICE_RESET = 16395; // 0x400b
+    field public static final int EVENT_OBJECT_ADDED = 16386; // 0x4002
+    field public static final int EVENT_OBJECT_INFO_CHANGED = 16391; // 0x4007
+    field public static final int EVENT_OBJECT_PROP_CHANGED = 51201; // 0xc801
+    field public static final int EVENT_OBJECT_PROP_DESC_CHANGED = 51202; // 0xc802
+    field public static final int EVENT_OBJECT_REFERENCES_CHANGED = 51203; // 0xc803
+    field public static final int EVENT_OBJECT_REMOVED = 16387; // 0x4003
+    field public static final int EVENT_REQUEST_OBJECT_TRANSFER = 16393; // 0x4009
+    field public static final int EVENT_STORAGE_INFO_CHANGED = 16396; // 0x400c
+    field public static final int EVENT_STORE_ADDED = 16388; // 0x4004
+    field public static final int EVENT_STORE_FULL = 16394; // 0x400a
+    field public static final int EVENT_STORE_REMOVED = 16389; // 0x4005
+    field public static final int EVENT_UNDEFINED = 16384; // 0x4000
+    field public static final int EVENT_UNREPORTED_STATUS = 16398; // 0x400e
+  }
+
+  public final class MtpObjectInfo {
+    method public int getAssociationDesc();
+    method public int getAssociationType();
+    method public int getCompressedSize();
+    method public long getCompressedSizeLong();
+    method public long getDateCreated();
+    method public long getDateModified();
+    method public int getFormat();
+    method public int getImagePixDepth();
+    method public long getImagePixDepthLong();
+    method public int getImagePixHeight();
+    method public long getImagePixHeightLong();
+    method public int getImagePixWidth();
+    method public long getImagePixWidthLong();
+    method @NonNull public String getKeywords();
+    method @NonNull public String getName();
+    method public int getObjectHandle();
+    method public int getParent();
+    method public int getProtectionStatus();
+    method public int getSequenceNumber();
+    method public long getSequenceNumberLong();
+    method public int getStorageId();
+    method public int getThumbCompressedSize();
+    method public long getThumbCompressedSizeLong();
+    method public int getThumbFormat();
+    method public int getThumbPixHeight();
+    method public long getThumbPixHeightLong();
+    method public int getThumbPixWidth();
+    method public long getThumbPixWidthLong();
+  }
+
+  public static class MtpObjectInfo.Builder {
+    ctor public MtpObjectInfo.Builder();
+    ctor public MtpObjectInfo.Builder(android.mtp.MtpObjectInfo);
+    method public android.mtp.MtpObjectInfo build();
+    method public android.mtp.MtpObjectInfo.Builder setAssociationDesc(int);
+    method public android.mtp.MtpObjectInfo.Builder setAssociationType(int);
+    method public android.mtp.MtpObjectInfo.Builder setCompressedSize(long);
+    method public android.mtp.MtpObjectInfo.Builder setDateCreated(long);
+    method public android.mtp.MtpObjectInfo.Builder setDateModified(long);
+    method public android.mtp.MtpObjectInfo.Builder setFormat(int);
+    method public android.mtp.MtpObjectInfo.Builder setImagePixDepth(long);
+    method public android.mtp.MtpObjectInfo.Builder setImagePixHeight(long);
+    method public android.mtp.MtpObjectInfo.Builder setImagePixWidth(long);
+    method public android.mtp.MtpObjectInfo.Builder setKeywords(@NonNull String);
+    method public android.mtp.MtpObjectInfo.Builder setName(@NonNull String);
+    method public android.mtp.MtpObjectInfo.Builder setObjectHandle(int);
+    method public android.mtp.MtpObjectInfo.Builder setParent(int);
+    method public android.mtp.MtpObjectInfo.Builder setProtectionStatus(int);
+    method public android.mtp.MtpObjectInfo.Builder setSequenceNumber(long);
+    method public android.mtp.MtpObjectInfo.Builder setStorageId(int);
+    method public android.mtp.MtpObjectInfo.Builder setThumbCompressedSize(long);
+    method public android.mtp.MtpObjectInfo.Builder setThumbFormat(int);
+    method public android.mtp.MtpObjectInfo.Builder setThumbPixHeight(long);
+    method public android.mtp.MtpObjectInfo.Builder setThumbPixWidth(long);
+  }
+
+  public final class MtpStorageInfo {
+    method @NonNull public String getDescription();
+    method public long getFreeSpace();
+    method public long getMaxCapacity();
+    method public int getStorageId();
+    method @NonNull public String getVolumeIdentifier();
+  }
+
+}
+
+package android.net {
+
+  public class CaptivePortal implements android.os.Parcelable {
+    method public int describeContents();
+    method public void ignoreNetwork();
+    method public void reportCaptivePortalDismissed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.CaptivePortal> CREATOR;
+  }
+
+  public class ConnectivityDiagnosticsManager {
+    method public void registerConnectivityDiagnosticsCallback(@NonNull android.net.NetworkRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback);
+    method public void unregisterConnectivityDiagnosticsCallback(@NonNull android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback);
+  }
+
+  public abstract static class ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback {
+    ctor public ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback();
+    method public void onConnectivityReportAvailable(@NonNull android.net.ConnectivityDiagnosticsManager.ConnectivityReport);
+    method public void onDataStallSuspected(@NonNull android.net.ConnectivityDiagnosticsManager.DataStallReport);
+    method public void onNetworkConnectivityReported(@NonNull android.net.Network, boolean);
+  }
+
+  public static final class ConnectivityDiagnosticsManager.ConnectivityReport implements android.os.Parcelable {
+    ctor public ConnectivityDiagnosticsManager.ConnectivityReport(@NonNull android.net.Network, long, @NonNull android.net.LinkProperties, @NonNull android.net.NetworkCapabilities, @NonNull android.os.PersistableBundle);
+    method public int describeContents();
+    method @NonNull public android.os.PersistableBundle getAdditionalInfo();
+    method @NonNull public android.net.LinkProperties getLinkProperties();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method public long getReportTimestamp();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ConnectivityDiagnosticsManager.ConnectivityReport> CREATOR;
+    field public static final String KEY_NETWORK_PROBES_ATTEMPTED_BITMASK = "networkProbesAttempted";
+    field public static final String KEY_NETWORK_PROBES_SUCCEEDED_BITMASK = "networkProbesSucceeded";
+    field public static final String KEY_NETWORK_VALIDATION_RESULT = "networkValidationResult";
+    field public static final int NETWORK_PROBE_DNS = 4; // 0x4
+    field public static final int NETWORK_PROBE_FALLBACK = 32; // 0x20
+    field public static final int NETWORK_PROBE_HTTP = 8; // 0x8
+    field public static final int NETWORK_PROBE_HTTPS = 16; // 0x10
+    field public static final int NETWORK_PROBE_PRIVATE_DNS = 64; // 0x40
+    field public static final int NETWORK_VALIDATION_RESULT_INVALID = 0; // 0x0
+    field public static final int NETWORK_VALIDATION_RESULT_PARTIALLY_VALID = 2; // 0x2
+    field public static final int NETWORK_VALIDATION_RESULT_SKIPPED = 3; // 0x3
+    field public static final int NETWORK_VALIDATION_RESULT_VALID = 1; // 0x1
+  }
+
+  public static final class ConnectivityDiagnosticsManager.DataStallReport implements android.os.Parcelable {
+    ctor public ConnectivityDiagnosticsManager.DataStallReport(@NonNull android.net.Network, long, int, @NonNull android.net.LinkProperties, @NonNull android.net.NetworkCapabilities, @NonNull android.os.PersistableBundle);
+    method public int describeContents();
+    method public int getDetectionMethod();
+    method @NonNull public android.net.LinkProperties getLinkProperties();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method public long getReportTimestamp();
+    method @NonNull public android.os.PersistableBundle getStallDetails();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ConnectivityDiagnosticsManager.DataStallReport> CREATOR;
+    field public static final int DETECTION_METHOD_DNS_EVENTS = 1; // 0x1
+    field public static final int DETECTION_METHOD_TCP_METRICS = 2; // 0x2
+    field public static final String KEY_DNS_CONSECUTIVE_TIMEOUTS = "dnsConsecutiveTimeouts";
+    field public static final String KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS = "tcpMetricsCollectionPeriodMillis";
+    field public static final String KEY_TCP_PACKET_FAIL_RATE = "tcpPacketFailRate";
+  }
+
+  public class ConnectivityManager {
+    method public void addDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
+    method public boolean bindProcessToNetwork(@Nullable android.net.Network);
+    method @NonNull public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull android.net.IpSecManager.UdpEncapsulationSocket, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.Network getActiveNetwork();
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo getActiveNetworkInfo();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo[] getAllNetworkInfo();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.Network[] getAllNetworks();
+    method @Deprecated public boolean getBackgroundDataSetting();
+    method @Nullable public android.net.Network getBoundNetworkForProcess();
+    method public int getConnectionOwnerUid(int, @NonNull java.net.InetSocketAddress, @NonNull java.net.InetSocketAddress);
+    method @Nullable public android.net.ProxyInfo getDefaultProxy();
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.LinkProperties getLinkProperties(@Nullable android.net.Network);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public int getMultipathPreference(@Nullable android.net.Network);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkCapabilities getNetworkCapabilities(@Nullable android.net.Network);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo getNetworkInfo(int);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo getNetworkInfo(@Nullable android.net.Network);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public int getNetworkPreference();
+    method @Nullable public byte[] getNetworkWatchlistConfigHash();
+    method @Deprecated @Nullable public static android.net.Network getProcessDefaultNetwork();
+    method public int getRestrictBackgroundStatus();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public boolean isActiveNetworkMetered();
+    method public boolean isDefaultNetworkActive();
+    method @Deprecated public static boolean isNetworkTypeValid(int);
+    method public void registerBestMatchingNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.app.PendingIntent);
+    method public void releaseNetworkRequest(@NonNull android.app.PendingIntent);
+    method public void removeDefaultNetworkActiveListener(@NonNull android.net.ConnectivityManager.OnNetworkActiveListener);
+    method @Deprecated public void reportBadNetwork(@Nullable android.net.Network);
+    method public void reportNetworkConnectivity(@Nullable android.net.Network, boolean);
+    method public boolean requestBandwidthUpdate(@NonNull android.net.Network);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, int);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler, int);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.app.PendingIntent);
+    method @Deprecated public void setNetworkPreference(int);
+    method @Deprecated public static boolean setProcessDefaultNetwork(@Nullable android.net.Network);
+    method public void unregisterNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback);
+    method public void unregisterNetworkCallback(@NonNull android.app.PendingIntent);
+    field @Deprecated public static final String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
+    field public static final String ACTION_CAPTIVE_PORTAL_SIGN_IN = "android.net.conn.CAPTIVE_PORTAL";
+    field public static final String ACTION_RESTRICT_BACKGROUND_CHANGED = "android.net.conn.RESTRICT_BACKGROUND_CHANGED";
+    field @Deprecated public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
+    field @Deprecated public static final int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1
+    field public static final String EXTRA_CAPTIVE_PORTAL = "android.net.extra.CAPTIVE_PORTAL";
+    field public static final String EXTRA_CAPTIVE_PORTAL_URL = "android.net.extra.CAPTIVE_PORTAL_URL";
+    field @Deprecated public static final String EXTRA_EXTRA_INFO = "extraInfo";
+    field @Deprecated public static final String EXTRA_IS_FAILOVER = "isFailover";
+    field public static final String EXTRA_NETWORK = "android.net.extra.NETWORK";
+    field @Deprecated public static final String EXTRA_NETWORK_INFO = "networkInfo";
+    field public static final String EXTRA_NETWORK_REQUEST = "android.net.extra.NETWORK_REQUEST";
+    field @Deprecated public static final String EXTRA_NETWORK_TYPE = "networkType";
+    field public static final String EXTRA_NO_CONNECTIVITY = "noConnectivity";
+    field @Deprecated public static final String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
+    field public static final String EXTRA_REASON = "reason";
+    field public static final int MULTIPATH_PREFERENCE_HANDOVER = 1; // 0x1
+    field public static final int MULTIPATH_PREFERENCE_PERFORMANCE = 4; // 0x4
+    field public static final int MULTIPATH_PREFERENCE_RELIABILITY = 2; // 0x2
+    field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+    field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+    field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+    field @Deprecated public static final int TYPE_BLUETOOTH = 7; // 0x7
+    field @Deprecated public static final int TYPE_DUMMY = 8; // 0x8
+    field @Deprecated public static final int TYPE_ETHERNET = 9; // 0x9
+    field @Deprecated public static final int TYPE_MOBILE = 0; // 0x0
+    field @Deprecated public static final int TYPE_MOBILE_DUN = 4; // 0x4
+    field @Deprecated public static final int TYPE_MOBILE_HIPRI = 5; // 0x5
+    field @Deprecated public static final int TYPE_MOBILE_MMS = 2; // 0x2
+    field @Deprecated public static final int TYPE_MOBILE_SUPL = 3; // 0x3
+    field @Deprecated public static final int TYPE_VPN = 17; // 0x11
+    field @Deprecated public static final int TYPE_WIFI = 1; // 0x1
+    field @Deprecated public static final int TYPE_WIMAX = 6; // 0x6
+  }
+
+  public static class ConnectivityManager.NetworkCallback {
+    ctor public ConnectivityManager.NetworkCallback();
+    ctor public ConnectivityManager.NetworkCallback(int);
+    method public void onAvailable(@NonNull android.net.Network);
+    method public void onBlockedStatusChanged(@NonNull android.net.Network, boolean);
+    method public void onCapabilitiesChanged(@NonNull android.net.Network, @NonNull android.net.NetworkCapabilities);
+    method public void onLinkPropertiesChanged(@NonNull android.net.Network, @NonNull android.net.LinkProperties);
+    method public void onLosing(@NonNull android.net.Network, int);
+    method public void onLost(@NonNull android.net.Network);
+    method public void onUnavailable();
+    field public static final int FLAG_INCLUDE_LOCATION_INFO = 1; // 0x1
+  }
+
+  public static interface ConnectivityManager.OnNetworkActiveListener {
+    method public void onNetworkActive();
+  }
+
+  public class Credentials {
+    ctor public Credentials(int, int, int);
+    method public int getGid();
+    method public int getPid();
+    method public int getUid();
+  }
+
+  public class DhcpInfo implements android.os.Parcelable {
+    ctor public DhcpInfo();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.DhcpInfo> CREATOR;
+    field public int dns1;
+    field public int dns2;
+    field public int gateway;
+    field public int ipAddress;
+    field public int leaseDuration;
+    field public int netmask;
+    field public int serverAddress;
+  }
+
+  public final class DnsResolver {
+    method @NonNull public static android.net.DnsResolver getInstance();
+    method public void query(@Nullable android.net.Network, @NonNull String, int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super java.util.List<java.net.InetAddress>>);
+    method public void query(@Nullable android.net.Network, @NonNull String, int, int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super java.util.List<java.net.InetAddress>>);
+    method public void rawQuery(@Nullable android.net.Network, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super byte[]>);
+    method public void rawQuery(@Nullable android.net.Network, @NonNull String, int, int, int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super byte[]>);
+    field public static final int CLASS_IN = 1; // 0x1
+    field public static final int ERROR_PARSE = 0; // 0x0
+    field public static final int ERROR_SYSTEM = 1; // 0x1
+    field public static final int FLAG_EMPTY = 0; // 0x0
+    field public static final int FLAG_NO_CACHE_LOOKUP = 4; // 0x4
+    field public static final int FLAG_NO_CACHE_STORE = 2; // 0x2
+    field public static final int FLAG_NO_RETRY = 1; // 0x1
+    field public static final int TYPE_A = 1; // 0x1
+    field public static final int TYPE_AAAA = 28; // 0x1c
+  }
+
+  public static interface DnsResolver.Callback<T> {
+    method public void onAnswer(@NonNull T, int);
+    method public void onError(@NonNull android.net.DnsResolver.DnsException);
+  }
+
+  public static class DnsResolver.DnsException extends java.lang.Exception {
+    field public final int code;
+  }
+
+  public final class Ikev2VpnProfile extends android.net.PlatformVpnProfile {
+    method @NonNull public java.util.List<java.lang.String> getAllowedAlgorithms();
+    method public int getMaxMtu();
+    method @Nullable public String getPassword();
+    method @Nullable public byte[] getPresharedKey();
+    method @Nullable public android.net.ProxyInfo getProxyInfo();
+    method @Nullable public java.security.PrivateKey getRsaPrivateKey();
+    method @NonNull public String getServerAddr();
+    method @Nullable public java.security.cert.X509Certificate getServerRootCaCert();
+    method @Nullable public java.security.cert.X509Certificate getUserCert();
+    method @NonNull public String getUserIdentity();
+    method @Nullable public String getUsername();
+    method public boolean isBypassable();
+    method public boolean isMetered();
+  }
+
+  public static final class Ikev2VpnProfile.Builder {
+    ctor public Ikev2VpnProfile.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.net.Ikev2VpnProfile build();
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAllowedAlgorithms(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAuthDigitalSignature(@NonNull java.security.cert.X509Certificate, @NonNull java.security.PrivateKey, @Nullable java.security.cert.X509Certificate);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAuthPsk(@NonNull byte[]);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setAuthUsernamePassword(@NonNull String, @NonNull String, @Nullable java.security.cert.X509Certificate);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setBypassable(boolean);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setMaxMtu(int);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setMetered(boolean);
+    method @NonNull public android.net.Ikev2VpnProfile.Builder setProxy(@Nullable android.net.ProxyInfo);
+  }
+
+  public class InetAddresses {
+    method public static boolean isNumericAddress(@NonNull String);
+    method @NonNull public static java.net.InetAddress parseNumericAddress(@NonNull String);
+  }
+
+  public final class IpPrefix implements android.os.Parcelable {
+    method public boolean contains(@NonNull java.net.InetAddress);
+    method public int describeContents();
+    method @NonNull public java.net.InetAddress getAddress();
+    method @IntRange(from=0, to=128) public int getPrefixLength();
+    method @NonNull public byte[] getRawAddress();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpPrefix> CREATOR;
+  }
+
+  public final class IpSecAlgorithm implements android.os.Parcelable {
+    ctor public IpSecAlgorithm(@NonNull String, @NonNull byte[]);
+    ctor public IpSecAlgorithm(@NonNull String, @NonNull byte[], int);
+    method public int describeContents();
+    method @NonNull public byte[] getKey();
+    method @NonNull public String getName();
+    method @NonNull public static java.util.Set<java.lang.String> getSupportedAlgorithms();
+    method public int getTruncationLengthBits();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String AUTH_AES_CMAC = "cmac(aes)";
+    field public static final String AUTH_AES_XCBC = "xcbc(aes)";
+    field public static final String AUTH_CRYPT_AES_GCM = "rfc4106(gcm(aes))";
+    field public static final String AUTH_CRYPT_CHACHA20_POLY1305 = "rfc7539esp(chacha20,poly1305)";
+    field public static final String AUTH_HMAC_MD5 = "hmac(md5)";
+    field public static final String AUTH_HMAC_SHA1 = "hmac(sha1)";
+    field public static final String AUTH_HMAC_SHA256 = "hmac(sha256)";
+    field public static final String AUTH_HMAC_SHA384 = "hmac(sha384)";
+    field public static final String AUTH_HMAC_SHA512 = "hmac(sha512)";
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpSecAlgorithm> CREATOR;
+    field public static final String CRYPT_AES_CBC = "cbc(aes)";
+    field public static final String CRYPT_AES_CTR = "rfc3686(ctr(aes))";
+  }
+
+  public final class IpSecManager {
+    method @NonNull public android.net.IpSecManager.SecurityParameterIndex allocateSecurityParameterIndex(@NonNull java.net.InetAddress) throws android.net.IpSecManager.ResourceUnavailableException;
+    method @NonNull public android.net.IpSecManager.SecurityParameterIndex allocateSecurityParameterIndex(@NonNull java.net.InetAddress, int) throws android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
+    method public void applyTransportModeTransform(@NonNull java.net.Socket, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method public void applyTransportModeTransform(@NonNull java.net.DatagramSocket, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method public void applyTransportModeTransform(@NonNull java.io.FileDescriptor, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method @NonNull public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket(int) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
+    method @NonNull public android.net.IpSecManager.UdpEncapsulationSocket openUdpEncapsulationSocket() throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
+    method public void removeTransportModeTransforms(@NonNull java.net.Socket) throws java.io.IOException;
+    method public void removeTransportModeTransforms(@NonNull java.net.DatagramSocket) throws java.io.IOException;
+    method public void removeTransportModeTransforms(@NonNull java.io.FileDescriptor) throws java.io.IOException;
+    field public static final int DIRECTION_IN = 0; // 0x0
+    field public static final int DIRECTION_OUT = 1; // 0x1
+  }
+
+  public static final class IpSecManager.ResourceUnavailableException extends android.util.AndroidException {
+  }
+
+  public static final class IpSecManager.SecurityParameterIndex implements java.lang.AutoCloseable {
+    method public void close();
+    method public int getSpi();
+  }
+
+  public static final class IpSecManager.SpiUnavailableException extends android.util.AndroidException {
+    method public int getSpi();
+  }
+
+  public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
+    method public void close() throws java.io.IOException;
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public int getPort();
+  }
+
+  public final class IpSecTransform implements java.lang.AutoCloseable {
+    method public void close();
+  }
+
+  public static class IpSecTransform.Builder {
+    ctor public IpSecTransform.Builder(@NonNull android.content.Context);
+    method @NonNull public android.net.IpSecTransform buildTransportModeTransform(@NonNull java.net.InetAddress, @NonNull android.net.IpSecManager.SecurityParameterIndex) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
+    method @NonNull public android.net.IpSecTransform.Builder setAuthenticatedEncryption(@NonNull android.net.IpSecAlgorithm);
+    method @NonNull public android.net.IpSecTransform.Builder setAuthentication(@NonNull android.net.IpSecAlgorithm);
+    method @NonNull public android.net.IpSecTransform.Builder setEncryption(@NonNull android.net.IpSecAlgorithm);
+    method @NonNull public android.net.IpSecTransform.Builder setIpv4Encapsulation(@NonNull android.net.IpSecManager.UdpEncapsulationSocket, int);
+  }
+
+  public class LinkAddress implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.net.InetAddress getAddress();
+    method public int getFlags();
+    method @IntRange(from=0, to=128) public int getPrefixLength();
+    method public int getScope();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.LinkAddress> CREATOR;
+  }
+
+  public final class LinkProperties implements android.os.Parcelable {
+    ctor public LinkProperties();
+    method public boolean addRoute(@NonNull android.net.RouteInfo);
+    method public void clear();
+    method public int describeContents();
+    method @Nullable public java.net.Inet4Address getDhcpServerAddress();
+    method @NonNull public java.util.List<java.net.InetAddress> getDnsServers();
+    method @Nullable public String getDomains();
+    method @Nullable public android.net.ProxyInfo getHttpProxy();
+    method @Nullable public String getInterfaceName();
+    method @NonNull public java.util.List<android.net.LinkAddress> getLinkAddresses();
+    method public int getMtu();
+    method @Nullable public android.net.IpPrefix getNat64Prefix();
+    method @Nullable public String getPrivateDnsServerName();
+    method @NonNull public java.util.List<android.net.RouteInfo> getRoutes();
+    method public boolean isPrivateDnsActive();
+    method public boolean isWakeOnLanSupported();
+    method public void setDhcpServerAddress(@Nullable java.net.Inet4Address);
+    method public void setDnsServers(@NonNull java.util.Collection<java.net.InetAddress>);
+    method public void setDomains(@Nullable String);
+    method public void setHttpProxy(@Nullable android.net.ProxyInfo);
+    method public void setInterfaceName(@Nullable String);
+    method public void setLinkAddresses(@NonNull java.util.Collection<android.net.LinkAddress>);
+    method public void setMtu(int);
+    method public void setNat64Prefix(@Nullable android.net.IpPrefix);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.LinkProperties> CREATOR;
+  }
+
+  public class LocalServerSocket implements java.io.Closeable {
+    ctor public LocalServerSocket(String) throws java.io.IOException;
+    ctor public LocalServerSocket(java.io.FileDescriptor) throws java.io.IOException;
+    method public android.net.LocalSocket accept() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public android.net.LocalSocketAddress getLocalSocketAddress();
+  }
+
+  public class LocalSocket implements java.io.Closeable {
+    ctor public LocalSocket();
+    ctor public LocalSocket(int);
+    method public void bind(android.net.LocalSocketAddress) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void connect(android.net.LocalSocketAddress) throws java.io.IOException;
+    method public void connect(android.net.LocalSocketAddress, int) throws java.io.IOException;
+    method public java.io.FileDescriptor[] getAncillaryFileDescriptors() throws java.io.IOException;
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public android.net.LocalSocketAddress getLocalSocketAddress();
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public android.net.Credentials getPeerCredentials() throws java.io.IOException;
+    method public int getReceiveBufferSize() throws java.io.IOException;
+    method public android.net.LocalSocketAddress getRemoteSocketAddress();
+    method public int getSendBufferSize() throws java.io.IOException;
+    method public int getSoTimeout() throws java.io.IOException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public boolean isConnected();
+    method public boolean isInputShutdown();
+    method public boolean isOutputShutdown();
+    method public void setFileDescriptorsForSend(java.io.FileDescriptor[]);
+    method public void setReceiveBufferSize(int) throws java.io.IOException;
+    method public void setSendBufferSize(int) throws java.io.IOException;
+    method public void setSoTimeout(int) throws java.io.IOException;
+    method public void shutdownInput() throws java.io.IOException;
+    method public void shutdownOutput() throws java.io.IOException;
+    field public static final int SOCKET_DGRAM = 1; // 0x1
+    field public static final int SOCKET_SEQPACKET = 3; // 0x3
+    field public static final int SOCKET_STREAM = 2; // 0x2
+  }
+
+  public class LocalSocketAddress {
+    ctor public LocalSocketAddress(String, android.net.LocalSocketAddress.Namespace);
+    ctor public LocalSocketAddress(String);
+    method public String getName();
+    method public android.net.LocalSocketAddress.Namespace getNamespace();
+  }
+
+  public enum LocalSocketAddress.Namespace {
+    enum_constant public static final android.net.LocalSocketAddress.Namespace ABSTRACT;
+    enum_constant public static final android.net.LocalSocketAddress.Namespace FILESYSTEM;
+    enum_constant public static final android.net.LocalSocketAddress.Namespace RESERVED;
+  }
+
+  public final class MacAddress implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.net.MacAddress fromBytes(@NonNull byte[]);
+    method @NonNull public static android.net.MacAddress fromString(@NonNull String);
+    method public int getAddressType();
+    method @Nullable public java.net.Inet6Address getLinkLocalIpv6FromEui48Mac();
+    method public boolean isLocallyAssigned();
+    method public boolean matches(@NonNull android.net.MacAddress, @NonNull android.net.MacAddress);
+    method @NonNull public byte[] toByteArray();
+    method @NonNull public String toOuiString();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.net.MacAddress BROADCAST_ADDRESS;
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.MacAddress> CREATOR;
+    field public static final int TYPE_BROADCAST = 3; // 0x3
+    field public static final int TYPE_MULTICAST = 2; // 0x2
+    field public static final int TYPE_UNICAST = 1; // 0x1
+  }
+
+  public class MailTo {
+    method public String getBody();
+    method public String getCc();
+    method public java.util.Map<java.lang.String,java.lang.String> getHeaders();
+    method public String getSubject();
+    method public String getTo();
+    method public static boolean isMailTo(String);
+    method public static android.net.MailTo parse(String) throws android.net.ParseException;
+    field public static final String MAILTO_SCHEME = "mailto:";
+  }
+
+  public class Network implements android.os.Parcelable {
+    method public void bindSocket(java.net.DatagramSocket) throws java.io.IOException;
+    method public void bindSocket(java.net.Socket) throws java.io.IOException;
+    method public void bindSocket(java.io.FileDescriptor) throws java.io.IOException;
+    method public int describeContents();
+    method public static android.net.Network fromNetworkHandle(long);
+    method public java.net.InetAddress[] getAllByName(String) throws java.net.UnknownHostException;
+    method public java.net.InetAddress getByName(String) throws java.net.UnknownHostException;
+    method public long getNetworkHandle();
+    method public javax.net.SocketFactory getSocketFactory();
+    method public java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException;
+    method public java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException;
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.Network> CREATOR;
+  }
+
+  public final class NetworkCapabilities implements android.os.Parcelable {
+    ctor public NetworkCapabilities();
+    ctor public NetworkCapabilities(android.net.NetworkCapabilities);
+    method public int describeContents();
+    method @NonNull public int[] getCapabilities();
+    method public int getLinkDownstreamBandwidthKbps();
+    method public int getLinkUpstreamBandwidthKbps();
+    method @Nullable public android.net.NetworkSpecifier getNetworkSpecifier();
+    method public int getOwnerUid();
+    method public int getSignalStrength();
+    method @Nullable public android.net.TransportInfo getTransportInfo();
+    method public boolean hasCapability(int);
+    method public boolean hasTransport(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkCapabilities> CREATOR;
+    field public static final int NET_CAPABILITY_CAPTIVE_PORTAL = 17; // 0x11
+    field public static final int NET_CAPABILITY_CBS = 5; // 0x5
+    field public static final int NET_CAPABILITY_DUN = 2; // 0x2
+    field public static final int NET_CAPABILITY_EIMS = 10; // 0xa
+    field public static final int NET_CAPABILITY_ENTERPRISE = 29; // 0x1d
+    field public static final int NET_CAPABILITY_FOREGROUND = 19; // 0x13
+    field public static final int NET_CAPABILITY_FOTA = 3; // 0x3
+    field public static final int NET_CAPABILITY_HEAD_UNIT = 32; // 0x20
+    field public static final int NET_CAPABILITY_IA = 7; // 0x7
+    field public static final int NET_CAPABILITY_IMS = 4; // 0x4
+    field public static final int NET_CAPABILITY_INTERNET = 12; // 0xc
+    field public static final int NET_CAPABILITY_MCX = 23; // 0x17
+    field public static final int NET_CAPABILITY_MMS = 0; // 0x0
+    field public static final int NET_CAPABILITY_NOT_CONGESTED = 20; // 0x14
+    field public static final int NET_CAPABILITY_NOT_METERED = 11; // 0xb
+    field public static final int NET_CAPABILITY_NOT_RESTRICTED = 13; // 0xd
+    field public static final int NET_CAPABILITY_NOT_ROAMING = 18; // 0x12
+    field public static final int NET_CAPABILITY_NOT_SUSPENDED = 21; // 0x15
+    field public static final int NET_CAPABILITY_NOT_VPN = 15; // 0xf
+    field public static final int NET_CAPABILITY_RCS = 8; // 0x8
+    field public static final int NET_CAPABILITY_SUPL = 1; // 0x1
+    field public static final int NET_CAPABILITY_TEMPORARILY_NOT_METERED = 25; // 0x19
+    field public static final int NET_CAPABILITY_TRUSTED = 14; // 0xe
+    field public static final int NET_CAPABILITY_VALIDATED = 16; // 0x10
+    field public static final int NET_CAPABILITY_WIFI_P2P = 6; // 0x6
+    field public static final int NET_CAPABILITY_XCAP = 9; // 0x9
+    field public static final int SIGNAL_STRENGTH_UNSPECIFIED = -2147483648; // 0x80000000
+    field public static final int TRANSPORT_BLUETOOTH = 2; // 0x2
+    field public static final int TRANSPORT_CELLULAR = 0; // 0x0
+    field public static final int TRANSPORT_ETHERNET = 3; // 0x3
+    field public static final int TRANSPORT_LOWPAN = 6; // 0x6
+    field public static final int TRANSPORT_USB = 8; // 0x8
+    field public static final int TRANSPORT_VPN = 4; // 0x4
+    field public static final int TRANSPORT_WIFI = 1; // 0x1
+    field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
+  }
+
+  @Deprecated public class NetworkInfo implements android.os.Parcelable {
+    ctor @Deprecated public NetworkInfo(int, int, @Nullable String, @Nullable String);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.net.NetworkInfo.DetailedState getDetailedState();
+    method @Deprecated public String getExtraInfo();
+    method @Deprecated public String getReason();
+    method @Deprecated public android.net.NetworkInfo.State getState();
+    method @Deprecated public int getSubtype();
+    method @Deprecated public String getSubtypeName();
+    method @Deprecated public int getType();
+    method @Deprecated public String getTypeName();
+    method @Deprecated public boolean isAvailable();
+    method @Deprecated public boolean isConnected();
+    method @Deprecated public boolean isConnectedOrConnecting();
+    method @Deprecated public boolean isFailover();
+    method @Deprecated public boolean isRoaming();
+    method @Deprecated public void setDetailedState(@NonNull android.net.NetworkInfo.DetailedState, @Nullable String, @Nullable String);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkInfo> CREATOR;
+  }
+
+  @Deprecated public enum NetworkInfo.DetailedState {
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState AUTHENTICATING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState BLOCKED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState CAPTIVE_PORTAL_CHECK;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState CONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState CONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState DISCONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState DISCONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState FAILED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState IDLE;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState OBTAINING_IPADDR;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState SCANNING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState SUSPENDED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState VERIFYING_POOR_LINK;
+  }
+
+  @Deprecated public enum NetworkInfo.State {
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State CONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State CONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State DISCONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State DISCONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State SUSPENDED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State UNKNOWN;
+  }
+
+  public class NetworkRequest implements android.os.Parcelable {
+    method public boolean canBeSatisfiedBy(@Nullable android.net.NetworkCapabilities);
+    method public int describeContents();
+    method @NonNull public int[] getCapabilities();
+    method @Nullable public android.net.NetworkSpecifier getNetworkSpecifier();
+    method @NonNull public int[] getTransportTypes();
+    method public boolean hasCapability(int);
+    method public boolean hasTransport(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkRequest> CREATOR;
+  }
+
+  public static class NetworkRequest.Builder {
+    ctor public NetworkRequest.Builder();
+    ctor public NetworkRequest.Builder(@NonNull android.net.NetworkRequest);
+    method public android.net.NetworkRequest.Builder addCapability(int);
+    method public android.net.NetworkRequest.Builder addTransportType(int);
+    method public android.net.NetworkRequest build();
+    method @NonNull public android.net.NetworkRequest.Builder clearCapabilities();
+    method public android.net.NetworkRequest.Builder removeCapability(int);
+    method public android.net.NetworkRequest.Builder removeTransportType(int);
+    method @NonNull public android.net.NetworkRequest.Builder setIncludeOtherUidNetworks(boolean);
+    method @Deprecated public android.net.NetworkRequest.Builder setNetworkSpecifier(String);
+    method public android.net.NetworkRequest.Builder setNetworkSpecifier(android.net.NetworkSpecifier);
+  }
+
+  public abstract class NetworkSpecifier {
+    ctor public NetworkSpecifier();
+  }
+
+  public class ParseException extends java.lang.RuntimeException {
+    ctor public ParseException(@NonNull String);
+    ctor public ParseException(@NonNull String, @NonNull Throwable);
+    field public String response;
+  }
+
+  public abstract class PlatformVpnProfile {
+    method public final int getType();
+    method @NonNull public final String getTypeString();
+    field public static final int TYPE_IKEV2_IPSEC_PSK = 7; // 0x7
+    field public static final int TYPE_IKEV2_IPSEC_RSA = 8; // 0x8
+    field public static final int TYPE_IKEV2_IPSEC_USER_PASS = 6; // 0x6
+  }
+
+  public final class Proxy {
+    ctor public Proxy();
+    method @Deprecated public static String getDefaultHost();
+    method @Deprecated public static int getDefaultPort();
+    method @Deprecated public static String getHost(android.content.Context);
+    method @Deprecated public static int getPort(android.content.Context);
+    field public static final String PROXY_CHANGE_ACTION = "android.intent.action.PROXY_CHANGE";
+  }
+
+  public class ProxyInfo implements android.os.Parcelable {
+    ctor public ProxyInfo(@Nullable android.net.ProxyInfo);
+    method public static android.net.ProxyInfo buildDirectProxy(String, int);
+    method public static android.net.ProxyInfo buildDirectProxy(String, int, java.util.List<java.lang.String>);
+    method public static android.net.ProxyInfo buildPacProxy(android.net.Uri);
+    method @NonNull public static android.net.ProxyInfo buildPacProxy(@NonNull android.net.Uri, int);
+    method public int describeContents();
+    method public String[] getExclusionList();
+    method public String getHost();
+    method public android.net.Uri getPacFileUrl();
+    method public int getPort();
+    method public boolean isValid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ProxyInfo> CREATOR;
+  }
+
+  public final class RouteInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.IpPrefix getDestination();
+    method @Nullable public java.net.InetAddress getGateway();
+    method @Nullable public String getInterface();
+    method public boolean hasGateway();
+    method public boolean isDefaultRoute();
+    method public boolean matches(java.net.InetAddress);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.RouteInfo> CREATOR;
+  }
+
+  @Deprecated public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory {
+    ctor @Deprecated public SSLCertificateSocketFactory(int);
+    method @Deprecated public java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(String, int, java.net.InetAddress, int) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(String, int) throws java.io.IOException;
+    method @Deprecated public static javax.net.SocketFactory getDefault(int);
+    method @Deprecated public static javax.net.ssl.SSLSocketFactory getDefault(int, android.net.SSLSessionCache);
+    method @Deprecated public String[] getDefaultCipherSuites();
+    method @Deprecated public static javax.net.ssl.SSLSocketFactory getInsecure(int, android.net.SSLSessionCache);
+    method @Deprecated public byte[] getNpnSelectedProtocol(java.net.Socket);
+    method @Deprecated public String[] getSupportedCipherSuites();
+    method @Deprecated public void setHostname(java.net.Socket, String);
+    method @Deprecated public void setKeyManagers(javax.net.ssl.KeyManager[]);
+    method @Deprecated public void setNpnProtocols(byte[][]);
+    method @Deprecated public void setTrustManagers(javax.net.ssl.TrustManager[]);
+    method @Deprecated public void setUseSessionTickets(java.net.Socket, boolean);
+  }
+
+  public final class SSLSessionCache {
+    ctor public SSLSessionCache(java.io.File) throws java.io.IOException;
+    ctor public SSLSessionCache(android.content.Context);
+  }
+
+  public abstract class SocketKeepalive implements java.lang.AutoCloseable {
+    method public final void close();
+    method public final void start(@IntRange(from=0xa, to=0xe10) int);
+    method public final void stop();
+    field public static final int ERROR_HARDWARE_ERROR = -31; // 0xffffffe1
+    field public static final int ERROR_INSUFFICIENT_RESOURCES = -32; // 0xffffffe0
+    field public static final int ERROR_INVALID_INTERVAL = -24; // 0xffffffe8
+    field public static final int ERROR_INVALID_IP_ADDRESS = -21; // 0xffffffeb
+    field public static final int ERROR_INVALID_LENGTH = -23; // 0xffffffe9
+    field public static final int ERROR_INVALID_NETWORK = -20; // 0xffffffec
+    field public static final int ERROR_INVALID_PORT = -22; // 0xffffffea
+    field public static final int ERROR_INVALID_SOCKET = -25; // 0xffffffe7
+    field public static final int ERROR_SOCKET_NOT_IDLE = -26; // 0xffffffe6
+    field public static final int ERROR_UNSUPPORTED = -30; // 0xffffffe2
+  }
+
+  public static class SocketKeepalive.Callback {
+    ctor public SocketKeepalive.Callback();
+    method public void onDataReceived();
+    method public void onError(int);
+    method public void onStarted();
+    method public void onStopped();
+  }
+
+  public final class TelephonyNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getSubscriptionId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TelephonyNetworkSpecifier> CREATOR;
+  }
+
+  public static final class TelephonyNetworkSpecifier.Builder {
+    ctor public TelephonyNetworkSpecifier.Builder();
+    method @NonNull public android.net.TelephonyNetworkSpecifier build();
+    method @NonNull public android.net.TelephonyNetworkSpecifier.Builder setSubscriptionId(int);
+  }
+
+  public class TrafficStats {
+    ctor public TrafficStats();
+    method public static void clearThreadStatsTag();
+    method public static void clearThreadStatsUid();
+    method public static int getAndSetThreadStatsTag(int);
+    method public static long getMobileRxBytes();
+    method public static long getMobileRxPackets();
+    method public static long getMobileTxBytes();
+    method public static long getMobileTxPackets();
+    method public static long getRxBytes(@NonNull String);
+    method public static long getRxPackets(@NonNull String);
+    method public static int getThreadStatsTag();
+    method public static int getThreadStatsUid();
+    method public static long getTotalRxBytes();
+    method public static long getTotalRxPackets();
+    method public static long getTotalTxBytes();
+    method public static long getTotalTxPackets();
+    method public static long getTxBytes(@NonNull String);
+    method public static long getTxPackets(@NonNull String);
+    method public static long getUidRxBytes(int);
+    method public static long getUidRxPackets(int);
+    method @Deprecated public static long getUidTcpRxBytes(int);
+    method @Deprecated public static long getUidTcpRxSegments(int);
+    method @Deprecated public static long getUidTcpTxBytes(int);
+    method @Deprecated public static long getUidTcpTxSegments(int);
+    method public static long getUidTxBytes(int);
+    method public static long getUidTxPackets(int);
+    method @Deprecated public static long getUidUdpRxBytes(int);
+    method @Deprecated public static long getUidUdpRxPackets(int);
+    method @Deprecated public static long getUidUdpTxBytes(int);
+    method @Deprecated public static long getUidUdpTxPackets(int);
+    method public static void incrementOperationCount(int);
+    method public static void incrementOperationCount(int, int);
+    method public static void setThreadStatsTag(int);
+    method public static void setThreadStatsUid(int);
+    method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static void tagFileDescriptor(java.io.FileDescriptor) throws java.io.IOException;
+    method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+    method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
+    method public static void untagFileDescriptor(java.io.FileDescriptor) throws java.io.IOException;
+    method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
+    field public static final int UNSUPPORTED = -1; // 0xffffffff
+  }
+
+  public interface TransportInfo {
+  }
+
+  public abstract class Uri implements java.lang.Comparable<android.net.Uri> android.os.Parcelable {
+    method public abstract android.net.Uri.Builder buildUpon();
+    method public int compareTo(android.net.Uri);
+    method public static String decode(String);
+    method public static String encode(String);
+    method public static String encode(String, String);
+    method public static android.net.Uri fromFile(java.io.File);
+    method public static android.net.Uri fromParts(String, String, String);
+    method @Nullable public abstract String getAuthority();
+    method public boolean getBooleanQueryParameter(String, boolean);
+    method @Nullable public abstract String getEncodedAuthority();
+    method @Nullable public abstract String getEncodedFragment();
+    method @Nullable public abstract String getEncodedPath();
+    method @Nullable public abstract String getEncodedQuery();
+    method public abstract String getEncodedSchemeSpecificPart();
+    method @Nullable public abstract String getEncodedUserInfo();
+    method @Nullable public abstract String getFragment();
+    method @Nullable public abstract String getHost();
+    method @Nullable public abstract String getLastPathSegment();
+    method @Nullable public abstract String getPath();
+    method public abstract java.util.List<java.lang.String> getPathSegments();
+    method public abstract int getPort();
+    method @Nullable public abstract String getQuery();
+    method @Nullable public String getQueryParameter(String);
+    method public java.util.Set<java.lang.String> getQueryParameterNames();
+    method public java.util.List<java.lang.String> getQueryParameters(String);
+    method @Nullable public abstract String getScheme();
+    method public abstract String getSchemeSpecificPart();
+    method @Nullable public abstract String getUserInfo();
+    method public boolean isAbsolute();
+    method public abstract boolean isHierarchical();
+    method public boolean isOpaque();
+    method public abstract boolean isRelative();
+    method public android.net.Uri normalizeScheme();
+    method public static android.net.Uri parse(String);
+    method public abstract String toString();
+    method public static android.net.Uri withAppendedPath(android.net.Uri, String);
+    method public static void writeToParcel(android.os.Parcel, android.net.Uri);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.Uri> CREATOR;
+    field public static final android.net.Uri EMPTY;
+  }
+
+  public static final class Uri.Builder {
+    ctor public Uri.Builder();
+    method public android.net.Uri.Builder appendEncodedPath(String);
+    method public android.net.Uri.Builder appendPath(String);
+    method public android.net.Uri.Builder appendQueryParameter(String, String);
+    method public android.net.Uri.Builder authority(String);
+    method public android.net.Uri build();
+    method public android.net.Uri.Builder clearQuery();
+    method public android.net.Uri.Builder encodedAuthority(String);
+    method public android.net.Uri.Builder encodedFragment(String);
+    method public android.net.Uri.Builder encodedOpaquePart(String);
+    method public android.net.Uri.Builder encodedPath(String);
+    method public android.net.Uri.Builder encodedQuery(String);
+    method public android.net.Uri.Builder fragment(String);
+    method public android.net.Uri.Builder opaquePart(String);
+    method public android.net.Uri.Builder path(String);
+    method public android.net.Uri.Builder query(String);
+    method public android.net.Uri.Builder scheme(String);
+  }
+
+  public class UrlQuerySanitizer {
+    ctor public UrlQuerySanitizer();
+    ctor public UrlQuerySanitizer(String);
+    method protected void addSanitizedEntry(String, String);
+    method protected void clear();
+    method protected int decodeHexDigit(char);
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButNulAndAngleBracketsLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButNulLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllButWhitespaceLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAllIllegal();
+    method public boolean getAllowUnregisteredParamaters();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAmpAndSpaceLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getAmpLegal();
+    method public android.net.UrlQuerySanitizer.ValueSanitizer getEffectiveValueSanitizer(String);
+    method public java.util.List<android.net.UrlQuerySanitizer.ParameterValuePair> getParameterList();
+    method public java.util.Set<java.lang.String> getParameterSet();
+    method public boolean getPreferFirstRepeatedParameter();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getSpaceLegal();
+    method public android.net.UrlQuerySanitizer.ValueSanitizer getUnregisteredParameterValueSanitizer();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getUrlAndSpaceLegal();
+    method public static final android.net.UrlQuerySanitizer.ValueSanitizer getUrlLegal();
+    method public String getValue(String);
+    method public android.net.UrlQuerySanitizer.ValueSanitizer getValueSanitizer(String);
+    method public boolean hasParameter(String);
+    method protected boolean isHexDigit(char);
+    method protected void parseEntry(String, String);
+    method public void parseQuery(String);
+    method public void parseUrl(String);
+    method public void registerParameter(String, android.net.UrlQuerySanitizer.ValueSanitizer);
+    method public void registerParameters(String[], android.net.UrlQuerySanitizer.ValueSanitizer);
+    method public void setAllowUnregisteredParamaters(boolean);
+    method public void setPreferFirstRepeatedParameter(boolean);
+    method public void setUnregisteredParameterValueSanitizer(android.net.UrlQuerySanitizer.ValueSanitizer);
+    method public String unescape(String);
+  }
+
+  public static class UrlQuerySanitizer.IllegalCharacterValueSanitizer implements android.net.UrlQuerySanitizer.ValueSanitizer {
+    ctor public UrlQuerySanitizer.IllegalCharacterValueSanitizer(int);
+    method public String sanitize(String);
+    field public static final int ALL_BUT_NUL_AND_ANGLE_BRACKETS_LEGAL = 1439; // 0x59f
+    field public static final int ALL_BUT_NUL_LEGAL = 1535; // 0x5ff
+    field public static final int ALL_BUT_WHITESPACE_LEGAL = 1532; // 0x5fc
+    field public static final int ALL_ILLEGAL = 0; // 0x0
+    field public static final int ALL_OK = 2047; // 0x7ff
+    field public static final int ALL_WHITESPACE_OK = 3; // 0x3
+    field public static final int AMP_AND_SPACE_LEGAL = 129; // 0x81
+    field public static final int AMP_LEGAL = 128; // 0x80
+    field public static final int AMP_OK = 128; // 0x80
+    field public static final int DQUOTE_OK = 8; // 0x8
+    field public static final int GT_OK = 64; // 0x40
+    field public static final int LT_OK = 32; // 0x20
+    field public static final int NON_7_BIT_ASCII_OK = 4; // 0x4
+    field public static final int NUL_OK = 512; // 0x200
+    field public static final int OTHER_WHITESPACE_OK = 2; // 0x2
+    field public static final int PCT_OK = 256; // 0x100
+    field public static final int SCRIPT_URL_OK = 1024; // 0x400
+    field public static final int SPACE_LEGAL = 1; // 0x1
+    field public static final int SPACE_OK = 1; // 0x1
+    field public static final int SQUOTE_OK = 16; // 0x10
+    field public static final int URL_AND_SPACE_LEGAL = 405; // 0x195
+    field public static final int URL_LEGAL = 404; // 0x194
+  }
+
+  public class UrlQuerySanitizer.ParameterValuePair {
+    ctor public UrlQuerySanitizer.ParameterValuePair(String, String);
+    field public String mParameter;
+    field public String mValue;
+  }
+
+  public static interface UrlQuerySanitizer.ValueSanitizer {
+    method public String sanitize(String);
+  }
+
+  public class VpnManager {
+    method public void deleteProvisionedVpnProfile();
+    method @Nullable public android.content.Intent provisionVpnProfile(@NonNull android.net.PlatformVpnProfile);
+    method public void startProvisionedVpnProfile();
+    method public void stopProvisionedVpnProfile();
+  }
+
+  public class VpnService extends android.app.Service {
+    ctor public VpnService();
+    method public final boolean isAlwaysOn();
+    method public final boolean isLockdownEnabled();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onRevoke();
+    method public static android.content.Intent prepare(android.content.Context);
+    method public boolean protect(int);
+    method public boolean protect(java.net.Socket);
+    method public boolean protect(java.net.DatagramSocket);
+    method public boolean setUnderlyingNetworks(android.net.Network[]);
+    field public static final String SERVICE_INTERFACE = "android.net.VpnService";
+    field public static final String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON";
+  }
+
+  public class VpnService.Builder {
+    ctor public VpnService.Builder();
+    method @NonNull public android.net.VpnService.Builder addAddress(@NonNull java.net.InetAddress, int);
+    method @NonNull public android.net.VpnService.Builder addAddress(@NonNull String, int);
+    method @NonNull public android.net.VpnService.Builder addAllowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.net.VpnService.Builder addDisallowedApplication(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.VpnService.Builder addDnsServer(@NonNull String);
+    method @NonNull public android.net.VpnService.Builder addRoute(@NonNull java.net.InetAddress, int);
+    method @NonNull public android.net.VpnService.Builder addRoute(@NonNull String, int);
+    method @NonNull public android.net.VpnService.Builder addSearchDomain(@NonNull String);
+    method @NonNull public android.net.VpnService.Builder allowBypass();
+    method @NonNull public android.net.VpnService.Builder allowFamily(int);
+    method @Nullable public android.os.ParcelFileDescriptor establish();
+    method @NonNull public android.net.VpnService.Builder setBlocking(boolean);
+    method @NonNull public android.net.VpnService.Builder setConfigureIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.net.VpnService.Builder setHttpProxy(@NonNull android.net.ProxyInfo);
+    method @NonNull public android.net.VpnService.Builder setMetered(boolean);
+    method @NonNull public android.net.VpnService.Builder setMtu(int);
+    method @NonNull public android.net.VpnService.Builder setSession(@NonNull String);
+    method @NonNull public android.net.VpnService.Builder setUnderlyingNetworks(@Nullable android.net.Network[]);
+  }
+
+}
+
+package android.net.eap {
+
+  public final class EapSessionConfig {
+    method @Nullable public android.net.eap.EapSessionConfig.EapAkaConfig getEapAkaConfig();
+    method @Nullable public android.net.eap.EapSessionConfig.EapAkaPrimeConfig getEapAkaPrimeConfig();
+    method @NonNull public byte[] getEapIdentity();
+    method @Nullable public android.net.eap.EapSessionConfig.EapMsChapV2Config getEapMsChapV2Config();
+    method @Nullable public android.net.eap.EapSessionConfig.EapSimConfig getEapSimConfig();
+    method @Nullable public android.net.eap.EapSessionConfig.EapTtlsConfig getEapTtlsConfig();
+  }
+
+  public static final class EapSessionConfig.Builder {
+    ctor public EapSessionConfig.Builder();
+    method @NonNull public android.net.eap.EapSessionConfig build();
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapAkaConfig(int, int);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapAkaPrimeConfig(int, int, @NonNull String, boolean);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapIdentity(@NonNull byte[]);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapMsChapV2Config(@NonNull String, @NonNull String);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapSimConfig(int, int);
+    method @NonNull public android.net.eap.EapSessionConfig.Builder setEapTtlsConfig(@Nullable java.security.cert.X509Certificate, @NonNull android.net.eap.EapSessionConfig);
+  }
+
+  public static class EapSessionConfig.EapAkaConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method public int getAppType();
+    method public int getSubId();
+  }
+
+  public static class EapSessionConfig.EapAkaPrimeConfig extends android.net.eap.EapSessionConfig.EapAkaConfig {
+    method public boolean allowsMismatchedNetworkNames();
+    method @NonNull public String getNetworkName();
+  }
+
+  public abstract static class EapSessionConfig.EapMethodConfig {
+    method public int getMethodType();
+    field public static final int EAP_TYPE_AKA = 23; // 0x17
+    field public static final int EAP_TYPE_AKA_PRIME = 50; // 0x32
+    field public static final int EAP_TYPE_MSCHAP_V2 = 26; // 0x1a
+    field public static final int EAP_TYPE_SIM = 18; // 0x12
+    field public static final int EAP_TYPE_TTLS = 21; // 0x15
+  }
+
+  public static class EapSessionConfig.EapMsChapV2Config extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method @NonNull public String getPassword();
+    method @NonNull public String getUsername();
+  }
+
+  public static class EapSessionConfig.EapSimConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method public int getAppType();
+    method public int getSubId();
+  }
+
+  public static class EapSessionConfig.EapTtlsConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method @NonNull public android.net.eap.EapSessionConfig getInnerEapSessionConfig();
+    method @Nullable public java.security.cert.X509Certificate getServerCaCert();
+  }
+
+}
+
+package android.net.http {
+
+  public final class HttpResponseCache extends java.net.ResponseCache implements java.io.Closeable {
+    method public void close() throws java.io.IOException;
+    method public void delete() throws java.io.IOException;
+    method public void flush();
+    method public java.net.CacheResponse get(java.net.URI, String, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public int getHitCount();
+    method public static android.net.http.HttpResponseCache getInstalled();
+    method public int getNetworkCount();
+    method public int getRequestCount();
+    method public static android.net.http.HttpResponseCache install(java.io.File, long) throws java.io.IOException;
+    method public long maxSize();
+    method public java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
+    method public long size();
+  }
+
+  public class SslCertificate {
+    ctor @Deprecated public SslCertificate(String, String, String, String);
+    ctor @Deprecated public SslCertificate(String, String, java.util.Date, java.util.Date);
+    ctor public SslCertificate(java.security.cert.X509Certificate);
+    method public android.net.http.SslCertificate.DName getIssuedBy();
+    method public android.net.http.SslCertificate.DName getIssuedTo();
+    method @Deprecated public String getValidNotAfter();
+    method public java.util.Date getValidNotAfterDate();
+    method @Deprecated public String getValidNotBefore();
+    method public java.util.Date getValidNotBeforeDate();
+    method @Nullable public java.security.cert.X509Certificate getX509Certificate();
+    method public static android.net.http.SslCertificate restoreState(android.os.Bundle);
+    method public static android.os.Bundle saveState(android.net.http.SslCertificate);
+  }
+
+  public class SslCertificate.DName {
+    ctor public SslCertificate.DName(String);
+    method public String getCName();
+    method public String getDName();
+    method public String getOName();
+    method public String getUName();
+  }
+
+  public class SslError {
+    ctor @Deprecated public SslError(int, android.net.http.SslCertificate);
+    ctor @Deprecated public SslError(int, java.security.cert.X509Certificate);
+    ctor public SslError(int, android.net.http.SslCertificate, String);
+    ctor public SslError(int, java.security.cert.X509Certificate, String);
+    method public boolean addError(int);
+    method public android.net.http.SslCertificate getCertificate();
+    method public int getPrimaryError();
+    method public String getUrl();
+    method public boolean hasError(int);
+    field public static final int SSL_DATE_INVALID = 4; // 0x4
+    field public static final int SSL_EXPIRED = 1; // 0x1
+    field public static final int SSL_IDMISMATCH = 2; // 0x2
+    field public static final int SSL_INVALID = 5; // 0x5
+    field @Deprecated public static final int SSL_MAX_ERROR = 6; // 0x6
+    field public static final int SSL_NOTYETVALID = 0; // 0x0
+    field public static final int SSL_UNTRUSTED = 3; // 0x3
+  }
+
+  public class X509TrustManagerExtensions {
+    ctor public X509TrustManagerExtensions(javax.net.ssl.X509TrustManager) throws java.lang.IllegalArgumentException;
+    method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], String, String) throws java.security.cert.CertificateException;
+    method public boolean isSameTrustConfiguration(String, String);
+    method public boolean isUserAddedCertificate(java.security.cert.X509Certificate);
+  }
+
+}
+
+package android.net.ipsec.ike {
+
+  public final class ChildSaProposal extends android.net.ipsec.ike.SaProposal {
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedEncryptionAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedIntegrityAlgorithms();
+  }
+
+  public static final class ChildSaProposal.Builder {
+    ctor public ChildSaProposal.Builder();
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addDhGroup(int);
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addEncryptionAlgorithm(int, int);
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal.Builder addIntegrityAlgorithm(int);
+    method @NonNull public android.net.ipsec.ike.ChildSaProposal build();
+  }
+
+  public interface ChildSessionCallback {
+    method public void onClosed();
+    method public default void onClosedWithException(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public void onIpSecTransformCreated(@NonNull android.net.IpSecTransform, int);
+    method public void onIpSecTransformDeleted(@NonNull android.net.IpSecTransform, int);
+    method public void onOpened(@NonNull android.net.ipsec.ike.ChildSessionConfiguration);
+  }
+
+  public final class ChildSessionConfiguration {
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getInboundTrafficSelectors();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getOutboundTrafficSelectors();
+  }
+
+  public static final class ChildSessionConfiguration.Builder {
+    ctor public ChildSessionConfiguration.Builder(@NonNull java.util.List<android.net.ipsec.ike.IkeTrafficSelector>, @NonNull java.util.List<android.net.ipsec.ike.IkeTrafficSelector>);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration build();
+  }
+
+  public abstract class ChildSessionParams {
+    method @NonNull public java.util.List<android.net.ipsec.ike.ChildSaProposal> getChildSaProposals();
+    method @IntRange(from=0x12c, to=0x3840) public int getHardLifetimeSeconds();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getInboundTrafficSelectors();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeTrafficSelector> getOutboundTrafficSelectors();
+    method @IntRange(from=0x78, to=0x3840) public int getSoftLifetimeSeconds();
+  }
+
+  public final class IkeDerAsn1DnIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeDerAsn1DnIdentification(@NonNull javax.security.auth.x500.X500Principal);
+    field @NonNull public final javax.security.auth.x500.X500Principal derAsn1Dn;
+  }
+
+  public class IkeFqdnIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeFqdnIdentification(@NonNull String);
+    field @NonNull public final String fqdn;
+  }
+
+  public abstract class IkeIdentification {
+  }
+
+  public final class IkeIpv4AddrIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeIpv4AddrIdentification(@NonNull java.net.Inet4Address);
+    field @NonNull public final java.net.Inet4Address ipv4Address;
+  }
+
+  public class IkeIpv6AddrIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeIpv6AddrIdentification(@NonNull java.net.Inet6Address);
+    field @NonNull public final java.net.Inet6Address ipv6Address;
+  }
+
+  public final class IkeKeyIdIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeKeyIdIdentification(@NonNull byte[]);
+    field @NonNull public final byte[] keyId;
+  }
+
+  public final class IkeRfc822AddrIdentification extends android.net.ipsec.ike.IkeIdentification {
+    ctor public IkeRfc822AddrIdentification(@NonNull String);
+    field @NonNull public final String rfc822Name;
+  }
+
+  public final class IkeSaProposal extends android.net.ipsec.ike.SaProposal {
+    method @NonNull public java.util.List<java.lang.Integer> getPseudorandomFunctions();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedEncryptionAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedIntegrityAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedPseudorandomFunctions();
+  }
+
+  public static final class IkeSaProposal.Builder {
+    ctor public IkeSaProposal.Builder();
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addDhGroup(int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addEncryptionAlgorithm(int, int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addIntegrityAlgorithm(int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal.Builder addPseudorandomFunction(int);
+    method @NonNull public android.net.ipsec.ike.IkeSaProposal build();
+  }
+
+  public final class IkeSession implements java.lang.AutoCloseable {
+    ctor public IkeSession(@NonNull android.content.Context, @NonNull android.net.ipsec.ike.IkeSessionParams, @NonNull android.net.ipsec.ike.ChildSessionParams, @NonNull java.util.concurrent.Executor, @NonNull android.net.ipsec.ike.IkeSessionCallback, @NonNull android.net.ipsec.ike.ChildSessionCallback);
+    method public void close();
+    method public void closeChildSession(@NonNull android.net.ipsec.ike.ChildSessionCallback);
+    method public void finalize();
+    method public void kill();
+    method public void openChildSession(@NonNull android.net.ipsec.ike.ChildSessionParams, @NonNull android.net.ipsec.ike.ChildSessionCallback);
+  }
+
+  public interface IkeSessionCallback {
+    method public void onClosed();
+    method public default void onClosedWithException(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public default void onError(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public void onOpened(@NonNull android.net.ipsec.ike.IkeSessionConfiguration);
+  }
+
+  public final class IkeSessionConfiguration {
+    method @NonNull public android.net.ipsec.ike.IkeSessionConnectionInfo getIkeSessionConnectionInfo();
+    method @NonNull public String getRemoteApplicationVersion();
+    method @NonNull public java.util.List<byte[]> getRemoteVendorIds();
+    method public boolean isIkeExtensionEnabled(int);
+    field public static final int EXTENSION_TYPE_FRAGMENTATION = 1; // 0x1
+    field public static final int EXTENSION_TYPE_MOBIKE = 2; // 0x2
+  }
+
+  public static final class IkeSessionConfiguration.Builder {
+    ctor public IkeSessionConfiguration.Builder(@NonNull android.net.ipsec.ike.IkeSessionConnectionInfo);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder addIkeExtension(int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder addRemoteVendorId(@NonNull byte[]);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration build();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearIkeExtensions();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearRemoteApplicationVersion();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearRemoteVendorIds();
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder setRemoteApplicationVersion(@NonNull String);
+  }
+
+  public final class IkeSessionConnectionInfo {
+    ctor public IkeSessionConnectionInfo(@NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull android.net.Network);
+    method @NonNull public java.net.InetAddress getLocalAddress();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public java.net.InetAddress getRemoteAddress();
+  }
+
+  public final class IkeSessionParams {
+    method @IntRange(from=0x14, to=0x708) public int getDpdDelaySeconds();
+    method @IntRange(from=0x12c, to=0x15180) public int getHardLifetimeSeconds();
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeSaProposal> getIkeSaProposals();
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig getLocalAuthConfig();
+    method @NonNull public android.net.ipsec.ike.IkeIdentification getLocalIdentification();
+    method @IntRange(from=0xa, to=0xe10) public int getNattKeepAliveDelaySeconds();
+    method @Nullable public android.net.Network getNetwork();
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig getRemoteAuthConfig();
+    method @NonNull public android.net.ipsec.ike.IkeIdentification getRemoteIdentification();
+    method @NonNull public int[] getRetransmissionTimeoutsMillis();
+    method @NonNull public String getServerHostname();
+    method @IntRange(from=0x78, to=0x15180) public int getSoftLifetimeSeconds();
+    method public boolean hasIkeOption(int);
+    field public static final int IKE_OPTION_ACCEPT_ANY_REMOTE_ID = 0; // 0x0
+    field public static final int IKE_OPTION_EAP_ONLY_AUTH = 1; // 0x1
+    field public static final int IKE_OPTION_FORCE_PORT_4500 = 3; // 0x3
+    field public static final int IKE_OPTION_MOBIKE = 2; // 0x2
+  }
+
+  public static final class IkeSessionParams.Builder {
+    ctor public IkeSessionParams.Builder();
+    ctor public IkeSessionParams.Builder(@NonNull android.net.ipsec.ike.IkeSessionParams);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addIkeOption(int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addIkeSaProposal(@NonNull android.net.ipsec.ike.IkeSaProposal);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams build();
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder removeIkeOption(int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthDigitalSignature(@Nullable java.security.cert.X509Certificate, @NonNull java.security.cert.X509Certificate, @NonNull java.security.PrivateKey);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthDigitalSignature(@Nullable java.security.cert.X509Certificate, @NonNull java.security.cert.X509Certificate, @NonNull java.util.List<java.security.cert.X509Certificate>, @NonNull java.security.PrivateKey);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthEap(@Nullable java.security.cert.X509Certificate, @NonNull android.net.eap.EapSessionConfig);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setAuthPsk(@NonNull byte[]);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setDpdDelaySeconds(@IntRange(from=0x14, to=0x708) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setLifetimeSeconds(@IntRange(from=0x12c, to=0x15180) int, @IntRange(from=0x78, to=0x15180) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setLocalIdentification(@NonNull android.net.ipsec.ike.IkeIdentification);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setNattKeepAliveDelaySeconds(@IntRange(from=0xa, to=0xe10) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setNetwork(@Nullable android.net.Network);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setRemoteIdentification(@NonNull android.net.ipsec.ike.IkeIdentification);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setRetransmissionTimeoutsMillis(@NonNull int[]);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setServerHostname(@NonNull String);
+  }
+
+  public abstract static class IkeSessionParams.IkeAuthConfig {
+  }
+
+  public static class IkeSessionParams.IkeAuthDigitalSignLocalConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @NonNull public java.security.cert.X509Certificate getClientEndCertificate();
+    method @NonNull public java.util.List<java.security.cert.X509Certificate> getIntermediateCertificates();
+    method @NonNull public java.security.PrivateKey getPrivateKey();
+  }
+
+  public static class IkeSessionParams.IkeAuthDigitalSignRemoteConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @Nullable public java.security.cert.X509Certificate getRemoteCaCert();
+  }
+
+  public static class IkeSessionParams.IkeAuthEapConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @NonNull public android.net.eap.EapSessionConfig getEapConfig();
+  }
+
+  public static class IkeSessionParams.IkeAuthPskConfig extends android.net.ipsec.ike.IkeSessionParams.IkeAuthConfig {
+    method @NonNull public byte[] getPsk();
+  }
+
+  public final class IkeTrafficSelector {
+    ctor public IkeTrafficSelector(int, int, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress);
+    field public final int endPort;
+    field @NonNull public final java.net.InetAddress endingAddress;
+    field public final int startPort;
+    field @NonNull public final java.net.InetAddress startingAddress;
+  }
+
+  public final class IkeTunnelConnectionParams {
+    ctor public IkeTunnelConnectionParams(@NonNull android.net.ipsec.ike.IkeSessionParams, @NonNull android.net.ipsec.ike.TunnelModeChildSessionParams);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams getIkeSessionParams();
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams getTunnelModeChildSessionParams();
+  }
+
+  public abstract class SaProposal {
+    method @NonNull public java.util.List<java.lang.Integer> getDhGroups();
+    method @NonNull public java.util.List<android.util.Pair<java.lang.Integer,java.lang.Integer>> getEncryptionAlgorithms();
+    method @NonNull public java.util.List<java.lang.Integer> getIntegrityAlgorithms();
+    method @NonNull public static java.util.Set<java.lang.Integer> getSupportedDhGroups();
+    field public static final int DH_GROUP_1024_BIT_MODP = 2; // 0x2
+    field public static final int DH_GROUP_1536_BIT_MODP = 5; // 0x5
+    field public static final int DH_GROUP_2048_BIT_MODP = 14; // 0xe
+    field public static final int DH_GROUP_3072_BIT_MODP = 15; // 0xf
+    field public static final int DH_GROUP_4096_BIT_MODP = 16; // 0x10
+    field public static final int DH_GROUP_CURVE_25519 = 31; // 0x1f
+    field public static final int DH_GROUP_NONE = 0; // 0x0
+    field public static final int ENCRYPTION_ALGORITHM_3DES = 3; // 0x3
+    field public static final int ENCRYPTION_ALGORITHM_AES_CBC = 12; // 0xc
+    field public static final int ENCRYPTION_ALGORITHM_AES_CTR = 13; // 0xd
+    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_12 = 19; // 0x13
+    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_16 = 20; // 0x14
+    field public static final int ENCRYPTION_ALGORITHM_AES_GCM_8 = 18; // 0x12
+    field public static final int ENCRYPTION_ALGORITHM_CHACHA20_POLY1305 = 28; // 0x1c
+    field public static final int INTEGRITY_ALGORITHM_AES_CMAC_96 = 8; // 0x8
+    field public static final int INTEGRITY_ALGORITHM_AES_XCBC_96 = 5; // 0x5
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA1_96 = 2; // 0x2
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_256_128 = 12; // 0xc
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_384_192 = 13; // 0xd
+    field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_512_256 = 14; // 0xe
+    field public static final int INTEGRITY_ALGORITHM_NONE = 0; // 0x0
+    field public static final int KEY_LEN_AES_128 = 128; // 0x80
+    field public static final int KEY_LEN_AES_192 = 192; // 0xc0
+    field public static final int KEY_LEN_AES_256 = 256; // 0x100
+    field public static final int KEY_LEN_UNUSED = 0; // 0x0
+    field public static final int PSEUDORANDOM_FUNCTION_AES128_CMAC = 8; // 0x8
+    field public static final int PSEUDORANDOM_FUNCTION_AES128_XCBC = 4; // 0x4
+    field public static final int PSEUDORANDOM_FUNCTION_HMAC_SHA1 = 2; // 0x2
+    field public static final int PSEUDORANDOM_FUNCTION_SHA2_256 = 5; // 0x5
+    field public static final int PSEUDORANDOM_FUNCTION_SHA2_384 = 6; // 0x6
+    field public static final int PSEUDORANDOM_FUNCTION_SHA2_512 = 7; // 0x7
+  }
+
+  public final class TransportModeChildSessionParams extends android.net.ipsec.ike.ChildSessionParams {
+  }
+
+  public static final class TransportModeChildSessionParams.Builder {
+    ctor public TransportModeChildSessionParams.Builder();
+    ctor public TransportModeChildSessionParams.Builder(@NonNull android.net.ipsec.ike.TransportModeChildSessionParams);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addChildSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addInboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addOutboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams build();
+    method @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder setLifetimeSeconds(@IntRange(from=0x12c, to=0x3840) int, @IntRange(from=0x78, to=0x3840) int);
+  }
+
+  public final class TunnelModeChildSessionParams extends android.net.ipsec.ike.ChildSessionParams {
+    method @NonNull public java.util.List<android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest> getConfigurationRequests();
+  }
+
+  public static final class TunnelModeChildSessionParams.Builder {
+    ctor public TunnelModeChildSessionParams.Builder();
+    ctor public TunnelModeChildSessionParams.Builder(@NonNull android.net.ipsec.ike.TunnelModeChildSessionParams);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addChildSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalAddressRequest(int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalAddressRequest(@NonNull java.net.Inet4Address);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalAddressRequest(@NonNull java.net.Inet6Address, int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalDhcpServerRequest(int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addInternalDnsServerRequest(int);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addOutboundTrafficSelectors(@NonNull android.net.ipsec.ike.IkeTrafficSelector);
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams build();
+    method @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder setLifetimeSeconds(@IntRange(from=0x12c, to=0x3840) int, @IntRange(from=0x78, to=0x3840) int);
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4Address extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+    method @Nullable public java.net.Inet4Address getAddress();
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4DhcpServer extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4DnsServer extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv4Netmask extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv6Address extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+    method @Nullable public java.net.Inet6Address getAddress();
+    method public int getPrefixLength();
+  }
+
+  public static interface TunnelModeChildSessionParams.ConfigRequestIpv6DnsServer extends android.net.ipsec.ike.TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+  public static interface TunnelModeChildSessionParams.TunnelModeChildConfigRequest {
+  }
+
+}
+
+package android.net.ipsec.ike.exceptions {
+
+  public abstract class IkeException extends java.lang.Exception {
+  }
+
+  public final class IkeInternalException extends android.net.ipsec.ike.exceptions.IkeNonProtocolException {
+    ctor public IkeInternalException(@NonNull Throwable);
+    ctor public IkeInternalException(@NonNull String, @NonNull Throwable);
+  }
+
+  public final class IkeNetworkLostException extends android.net.ipsec.ike.exceptions.IkeNonProtocolException {
+    ctor public IkeNetworkLostException(@NonNull android.net.Network);
+    method @NonNull public android.net.Network getNetwork();
+  }
+
+  public abstract class IkeNonProtocolException extends android.net.ipsec.ike.exceptions.IkeException {
+  }
+
+  public abstract class IkeProtocolException extends android.net.ipsec.ike.exceptions.IkeException {
+    method public int getErrorType();
+    field public static final int ERROR_TYPE_AUTHENTICATION_FAILED = 24; // 0x18
+    field public static final int ERROR_TYPE_CHILD_SA_NOT_FOUND = 44; // 0x2c
+    field public static final int ERROR_TYPE_FAILED_CP_REQUIRED = 37; // 0x25
+    field public static final int ERROR_TYPE_INTERNAL_ADDRESS_FAILURE = 36; // 0x24
+    field public static final int ERROR_TYPE_INVALID_IKE_SPI = 4; // 0x4
+    field public static final int ERROR_TYPE_INVALID_KE_PAYLOAD = 17; // 0x11
+    field public static final int ERROR_TYPE_INVALID_MAJOR_VERSION = 5; // 0x5
+    field public static final int ERROR_TYPE_INVALID_MESSAGE_ID = 9; // 0x9
+    field public static final int ERROR_TYPE_INVALID_SELECTORS = 39; // 0x27
+    field public static final int ERROR_TYPE_INVALID_SYNTAX = 7; // 0x7
+    field public static final int ERROR_TYPE_NO_ADDITIONAL_SAS = 35; // 0x23
+    field public static final int ERROR_TYPE_NO_PROPOSAL_CHOSEN = 14; // 0xe
+    field public static final int ERROR_TYPE_SINGLE_PAIR_REQUIRED = 34; // 0x22
+    field public static final int ERROR_TYPE_TEMPORARY_FAILURE = 43; // 0x2b
+    field public static final int ERROR_TYPE_TS_UNACCEPTABLE = 38; // 0x26
+    field public static final int ERROR_TYPE_UNSUPPORTED_CRITICAL_PAYLOAD = 1; // 0x1
+  }
+
+  public final class InvalidKeException extends android.net.ipsec.ike.exceptions.IkeProtocolException {
+    ctor public InvalidKeException(int);
+    method public int getDhGroup();
+  }
+
+  public final class InvalidMajorVersionException extends android.net.ipsec.ike.exceptions.IkeProtocolException {
+    ctor public InvalidMajorVersionException(byte);
+    method public byte getMajorVersion();
+  }
+
+  public final class InvalidSelectorsException extends android.net.ipsec.ike.exceptions.IkeProtocolException {
+    ctor public InvalidSelectorsException(int, @NonNull byte[]);
+    method @NonNull public byte[] getIpSecPacketInfo();
+    method public int getIpSecSpi();
+  }
+
+}
+
+package android.net.nsd {
+
+  public final class NsdManager {
+    method public void discoverServices(String, int, android.net.nsd.NsdManager.DiscoveryListener);
+    method public void registerService(android.net.nsd.NsdServiceInfo, int, android.net.nsd.NsdManager.RegistrationListener);
+    method public void resolveService(android.net.nsd.NsdServiceInfo, android.net.nsd.NsdManager.ResolveListener);
+    method public void stopServiceDiscovery(android.net.nsd.NsdManager.DiscoveryListener);
+    method public void unregisterService(android.net.nsd.NsdManager.RegistrationListener);
+    field public static final String ACTION_NSD_STATE_CHANGED = "android.net.nsd.STATE_CHANGED";
+    field public static final String EXTRA_NSD_STATE = "nsd_state";
+    field public static final int FAILURE_ALREADY_ACTIVE = 3; // 0x3
+    field public static final int FAILURE_INTERNAL_ERROR = 0; // 0x0
+    field public static final int FAILURE_MAX_LIMIT = 4; // 0x4
+    field public static final int NSD_STATE_DISABLED = 1; // 0x1
+    field public static final int NSD_STATE_ENABLED = 2; // 0x2
+    field public static final int PROTOCOL_DNS_SD = 1; // 0x1
+  }
+
+  public static interface NsdManager.DiscoveryListener {
+    method public void onDiscoveryStarted(String);
+    method public void onDiscoveryStopped(String);
+    method public void onServiceFound(android.net.nsd.NsdServiceInfo);
+    method public void onServiceLost(android.net.nsd.NsdServiceInfo);
+    method public void onStartDiscoveryFailed(String, int);
+    method public void onStopDiscoveryFailed(String, int);
+  }
+
+  public static interface NsdManager.RegistrationListener {
+    method public void onRegistrationFailed(android.net.nsd.NsdServiceInfo, int);
+    method public void onServiceRegistered(android.net.nsd.NsdServiceInfo);
+    method public void onServiceUnregistered(android.net.nsd.NsdServiceInfo);
+    method public void onUnregistrationFailed(android.net.nsd.NsdServiceInfo, int);
+  }
+
+  public static interface NsdManager.ResolveListener {
+    method public void onResolveFailed(android.net.nsd.NsdServiceInfo, int);
+    method public void onServiceResolved(android.net.nsd.NsdServiceInfo);
+  }
+
+  public final class NsdServiceInfo implements android.os.Parcelable {
+    ctor public NsdServiceInfo();
+    method public int describeContents();
+    method public java.util.Map<java.lang.String,byte[]> getAttributes();
+    method public java.net.InetAddress getHost();
+    method public int getPort();
+    method public String getServiceName();
+    method public String getServiceType();
+    method public void removeAttribute(String);
+    method public void setAttribute(String, String);
+    method public void setHost(java.net.InetAddress);
+    method public void setPort(int);
+    method public void setServiceName(String);
+    method public void setServiceType(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.nsd.NsdServiceInfo> CREATOR;
+  }
+
+}
+
+package android.net.rtp {
+
+  @Deprecated public class AudioCodec {
+    method @Deprecated public static android.net.rtp.AudioCodec getCodec(int, String, String);
+    method @Deprecated public static android.net.rtp.AudioCodec[] getCodecs();
+    field @Deprecated public static final android.net.rtp.AudioCodec AMR;
+    field @Deprecated public static final android.net.rtp.AudioCodec GSM;
+    field @Deprecated public static final android.net.rtp.AudioCodec GSM_EFR;
+    field @Deprecated public static final android.net.rtp.AudioCodec PCMA;
+    field @Deprecated public static final android.net.rtp.AudioCodec PCMU;
+    field @Deprecated public final String fmtp;
+    field @Deprecated public final String rtpmap;
+    field @Deprecated public final int type;
+  }
+
+  @Deprecated public class AudioGroup {
+    ctor @Deprecated public AudioGroup();
+    ctor @Deprecated public AudioGroup(@NonNull android.content.Context);
+    method @Deprecated public void clear();
+    method @Deprecated public int getMode();
+    method @Deprecated public android.net.rtp.AudioStream[] getStreams();
+    method @Deprecated public void sendDtmf(int);
+    method @Deprecated public void setMode(int);
+    field @Deprecated public static final int MODE_ECHO_SUPPRESSION = 3; // 0x3
+    field @Deprecated public static final int MODE_MUTED = 1; // 0x1
+    field @Deprecated public static final int MODE_NORMAL = 2; // 0x2
+    field @Deprecated public static final int MODE_ON_HOLD = 0; // 0x0
+  }
+
+  @Deprecated public class AudioStream extends android.net.rtp.RtpStream {
+    ctor @Deprecated public AudioStream(java.net.InetAddress) throws java.net.SocketException;
+    method @Deprecated public android.net.rtp.AudioCodec getCodec();
+    method @Deprecated public int getDtmfType();
+    method @Deprecated public android.net.rtp.AudioGroup getGroup();
+    method @Deprecated public final boolean isBusy();
+    method @Deprecated public void join(android.net.rtp.AudioGroup);
+    method @Deprecated public void setCodec(android.net.rtp.AudioCodec);
+    method @Deprecated public void setDtmfType(int);
+  }
+
+  @Deprecated public class RtpStream {
+    method @Deprecated public void associate(java.net.InetAddress, int);
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public int getLocalPort();
+    method @Deprecated public int getMode();
+    method @Deprecated public java.net.InetAddress getRemoteAddress();
+    method @Deprecated public int getRemotePort();
+    method @Deprecated public boolean isBusy();
+    method @Deprecated public void release();
+    method @Deprecated public void setMode(int);
+    field @Deprecated public static final int MODE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int MODE_RECEIVE_ONLY = 2; // 0x2
+    field @Deprecated public static final int MODE_SEND_ONLY = 1; // 0x1
+  }
+
+}
+
+package android.net.sip {
+
+  @Deprecated public class SipAudioCall {
+    ctor @Deprecated public SipAudioCall(android.content.Context, android.net.sip.SipProfile);
+    method @Deprecated public void answerCall(int) throws android.net.sip.SipException;
+    method @Deprecated public void attachCall(android.net.sip.SipSession, String) throws android.net.sip.SipException;
+    method @Deprecated public void close();
+    method @Deprecated public void continueCall(int) throws android.net.sip.SipException;
+    method @Deprecated public void endCall() throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipProfile getLocalProfile();
+    method @Deprecated public android.net.sip.SipProfile getPeerProfile();
+    method @Deprecated public int getState();
+    method @Deprecated public void holdCall(int) throws android.net.sip.SipException;
+    method @Deprecated public boolean isInCall();
+    method @Deprecated public boolean isMuted();
+    method @Deprecated public boolean isOnHold();
+    method @Deprecated public void makeCall(android.net.sip.SipProfile, android.net.sip.SipSession, int) throws android.net.sip.SipException;
+    method @Deprecated public void sendDtmf(int);
+    method @Deprecated public void sendDtmf(int, android.os.Message);
+    method @Deprecated public void setListener(android.net.sip.SipAudioCall.Listener);
+    method @Deprecated public void setListener(android.net.sip.SipAudioCall.Listener, boolean);
+    method @Deprecated public void setSpeakerMode(boolean);
+    method @Deprecated public void startAudio();
+    method @Deprecated public void toggleMute();
+  }
+
+  @Deprecated public static class SipAudioCall.Listener {
+    ctor @Deprecated public SipAudioCall.Listener();
+    method @Deprecated public void onCallBusy(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCallEnded(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCallEstablished(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCallHeld(android.net.sip.SipAudioCall);
+    method @Deprecated public void onCalling(android.net.sip.SipAudioCall);
+    method @Deprecated public void onChanged(android.net.sip.SipAudioCall);
+    method @Deprecated public void onError(android.net.sip.SipAudioCall, int, String);
+    method @Deprecated public void onReadyToCall(android.net.sip.SipAudioCall);
+    method @Deprecated public void onRinging(android.net.sip.SipAudioCall, android.net.sip.SipProfile);
+    method @Deprecated public void onRingingBack(android.net.sip.SipAudioCall);
+  }
+
+  @Deprecated public class SipErrorCode {
+    method @Deprecated public static String toString(int);
+    field @Deprecated public static final int CLIENT_ERROR = -4; // 0xfffffffc
+    field @Deprecated public static final int CROSS_DOMAIN_AUTHENTICATION = -11; // 0xfffffff5
+    field @Deprecated public static final int DATA_CONNECTION_LOST = -10; // 0xfffffff6
+    field @Deprecated public static final int INVALID_CREDENTIALS = -8; // 0xfffffff8
+    field @Deprecated public static final int INVALID_REMOTE_URI = -6; // 0xfffffffa
+    field @Deprecated public static final int IN_PROGRESS = -9; // 0xfffffff7
+    field @Deprecated public static final int NO_ERROR = 0; // 0x0
+    field @Deprecated public static final int PEER_NOT_REACHABLE = -7; // 0xfffffff9
+    field @Deprecated public static final int SERVER_ERROR = -2; // 0xfffffffe
+    field @Deprecated public static final int SERVER_UNREACHABLE = -12; // 0xfffffff4
+    field @Deprecated public static final int SOCKET_ERROR = -1; // 0xffffffff
+    field @Deprecated public static final int TIME_OUT = -5; // 0xfffffffb
+    field @Deprecated public static final int TRANSACTION_TERMINTED = -3; // 0xfffffffd
+  }
+
+  @Deprecated public class SipException extends java.lang.Exception {
+    ctor @Deprecated public SipException();
+    ctor @Deprecated public SipException(String);
+    ctor @Deprecated public SipException(String, Throwable);
+  }
+
+  @Deprecated public class SipManager {
+    method @Deprecated public void close(String) throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipSession createSipSession(android.net.sip.SipProfile, android.net.sip.SipSession.Listener) throws android.net.sip.SipException;
+    method @Deprecated public static String getCallId(android.content.Intent);
+    method @Deprecated public static String getOfferSessionDescription(android.content.Intent);
+    method @Deprecated public android.net.sip.SipSession getSessionFor(android.content.Intent) throws android.net.sip.SipException;
+    method @Deprecated public static boolean isApiSupported(android.content.Context);
+    method @Deprecated public static boolean isIncomingCallIntent(android.content.Intent);
+    method @Deprecated public boolean isOpened(String) throws android.net.sip.SipException;
+    method @Deprecated public boolean isRegistered(String) throws android.net.sip.SipException;
+    method @Deprecated public static boolean isSipWifiOnly(android.content.Context);
+    method @Deprecated public static boolean isVoipSupported(android.content.Context);
+    method @Deprecated public android.net.sip.SipAudioCall makeAudioCall(android.net.sip.SipProfile, android.net.sip.SipProfile, android.net.sip.SipAudioCall.Listener, int) throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipAudioCall makeAudioCall(String, String, android.net.sip.SipAudioCall.Listener, int) throws android.net.sip.SipException;
+    method @Deprecated public static android.net.sip.SipManager newInstance(android.content.Context);
+    method @Deprecated public void open(android.net.sip.SipProfile) throws android.net.sip.SipException;
+    method @Deprecated public void open(android.net.sip.SipProfile, android.app.PendingIntent, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    method @Deprecated public void register(android.net.sip.SipProfile, int, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    method @Deprecated public void setRegistrationListener(String, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    method @Deprecated public android.net.sip.SipAudioCall takeAudioCall(android.content.Intent, android.net.sip.SipAudioCall.Listener) throws android.net.sip.SipException;
+    method @Deprecated public void unregister(android.net.sip.SipProfile, android.net.sip.SipRegistrationListener) throws android.net.sip.SipException;
+    field @Deprecated public static final String EXTRA_CALL_ID = "android:sipCallID";
+    field @Deprecated public static final String EXTRA_OFFER_SD = "android:sipOfferSD";
+    field @Deprecated public static final int INCOMING_CALL_RESULT_CODE = 101; // 0x65
+  }
+
+  @Deprecated public class SipProfile implements java.lang.Cloneable android.os.Parcelable java.io.Serializable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public String getAuthUserName();
+    method @Deprecated public boolean getAutoRegistration();
+    method @Deprecated public String getDisplayName();
+    method @Deprecated public String getPassword();
+    method @Deprecated public int getPort();
+    method @Deprecated public String getProfileName();
+    method @Deprecated public String getProtocol();
+    method @Deprecated public String getProxyAddress();
+    method @Deprecated public boolean getSendKeepAlive();
+    method @Deprecated public String getSipDomain();
+    method @Deprecated public String getUriString();
+    method @Deprecated public String getUserName();
+    method @Deprecated public void setCallingUid(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final android.os.Parcelable.Creator<android.net.sip.SipProfile> CREATOR;
+  }
+
+  @Deprecated public static class SipProfile.Builder {
+    ctor @Deprecated public SipProfile.Builder(android.net.sip.SipProfile);
+    ctor @Deprecated public SipProfile.Builder(String) throws java.text.ParseException;
+    ctor @Deprecated public SipProfile.Builder(String, String) throws java.text.ParseException;
+    method @Deprecated public android.net.sip.SipProfile build();
+    method @Deprecated public android.net.sip.SipProfile.Builder setAuthUserName(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setAutoRegistration(boolean);
+    method @Deprecated public android.net.sip.SipProfile.Builder setDisplayName(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setOutboundProxy(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setPassword(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setPort(int) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.net.sip.SipProfile.Builder setProfileName(String);
+    method @Deprecated public android.net.sip.SipProfile.Builder setProtocol(String) throws java.lang.IllegalArgumentException;
+    method @Deprecated public android.net.sip.SipProfile.Builder setSendKeepAlive(boolean);
+  }
+
+  @Deprecated public interface SipRegistrationListener {
+    method @Deprecated public void onRegistering(String);
+    method @Deprecated public void onRegistrationDone(String, long);
+    method @Deprecated public void onRegistrationFailed(String, int, String);
+  }
+
+  @Deprecated public final class SipSession {
+    method @Deprecated public void answerCall(String, int);
+    method @Deprecated public void changeCall(String, int);
+    method @Deprecated public void endCall();
+    method @Deprecated public String getCallId();
+    method @Deprecated public String getLocalIp();
+    method @Deprecated public android.net.sip.SipProfile getLocalProfile();
+    method @Deprecated public android.net.sip.SipProfile getPeerProfile();
+    method @Deprecated public int getState();
+    method @Deprecated public boolean isInCall();
+    method @Deprecated public void makeCall(android.net.sip.SipProfile, String, int);
+    method @Deprecated public void register(int);
+    method @Deprecated public void setListener(android.net.sip.SipSession.Listener);
+    method @Deprecated public void unregister();
+  }
+
+  @Deprecated public static class SipSession.Listener {
+    ctor @Deprecated public SipSession.Listener();
+    method @Deprecated public void onCallBusy(android.net.sip.SipSession);
+    method @Deprecated public void onCallChangeFailed(android.net.sip.SipSession, int, String);
+    method @Deprecated public void onCallEnded(android.net.sip.SipSession);
+    method @Deprecated public void onCallEstablished(android.net.sip.SipSession, String);
+    method @Deprecated public void onCalling(android.net.sip.SipSession);
+    method @Deprecated public void onError(android.net.sip.SipSession, int, String);
+    method @Deprecated public void onRegistering(android.net.sip.SipSession);
+    method @Deprecated public void onRegistrationDone(android.net.sip.SipSession, int);
+    method @Deprecated public void onRegistrationFailed(android.net.sip.SipSession, int, String);
+    method @Deprecated public void onRegistrationTimeout(android.net.sip.SipSession);
+    method @Deprecated public void onRinging(android.net.sip.SipSession, android.net.sip.SipProfile, String);
+    method @Deprecated public void onRingingBack(android.net.sip.SipSession);
+  }
+
+  @Deprecated public static class SipSession.State {
+    method @Deprecated public static String toString(int);
+    field @Deprecated public static final int DEREGISTERING = 2; // 0x2
+    field @Deprecated public static final int INCOMING_CALL = 3; // 0x3
+    field @Deprecated public static final int INCOMING_CALL_ANSWERING = 4; // 0x4
+    field @Deprecated public static final int IN_CALL = 8; // 0x8
+    field @Deprecated public static final int NOT_DEFINED = 101; // 0x65
+    field @Deprecated public static final int OUTGOING_CALL = 5; // 0x5
+    field @Deprecated public static final int OUTGOING_CALL_CANCELING = 7; // 0x7
+    field @Deprecated public static final int OUTGOING_CALL_RING_BACK = 6; // 0x6
+    field @Deprecated public static final int PINGING = 9; // 0x9
+    field @Deprecated public static final int READY_TO_CALL = 0; // 0x0
+    field @Deprecated public static final int REGISTERING = 1; // 0x1
+  }
+
+}
+
+package android.net.ssl {
+
+  public class SSLEngines {
+    method @Nullable public static byte[] exportKeyingMaterial(@NonNull javax.net.ssl.SSLEngine, @NonNull String, @Nullable byte[], int) throws javax.net.ssl.SSLException;
+    method public static boolean isSupportedEngine(@NonNull javax.net.ssl.SSLEngine);
+    method public static void setUseSessionTickets(@NonNull javax.net.ssl.SSLEngine, boolean);
+  }
+
+  public class SSLSockets {
+    method @Nullable public static byte[] exportKeyingMaterial(@NonNull javax.net.ssl.SSLSocket, @NonNull String, @Nullable byte[], int) throws javax.net.ssl.SSLException;
+    method public static boolean isSupportedSocket(@NonNull javax.net.ssl.SSLSocket);
+    method public static void setUseSessionTickets(@NonNull javax.net.ssl.SSLSocket, boolean);
+  }
+
+}
+
+package android.net.vcn {
+
+  public final class VcnConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.net.vcn.VcnGatewayConnectionConfig> getGatewayConnectionConfigs();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.vcn.VcnConfig> CREATOR;
+  }
+
+  public static final class VcnConfig.Builder {
+    ctor public VcnConfig.Builder(@NonNull android.content.Context);
+    method @NonNull public android.net.vcn.VcnConfig.Builder addGatewayConnectionConfig(@NonNull android.net.vcn.VcnGatewayConnectionConfig);
+    method @NonNull public android.net.vcn.VcnConfig build();
+  }
+
+  public final class VcnGatewayConnectionConfig {
+    method @NonNull public int[] getExposedCapabilities();
+    method @NonNull public String getGatewayConnectionName();
+    method @IntRange(from=0x500) public int getMaxMtu();
+    method @NonNull public long[] getRetryIntervalsMillis();
+  }
+
+  public static final class VcnGatewayConnectionConfig.Builder {
+    ctor public VcnGatewayConnectionConfig.Builder(@NonNull String, @NonNull android.net.ipsec.ike.IkeTunnelConnectionParams);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder addExposedCapability(int);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig build();
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder removeExposedCapability(int);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder setMaxMtu(@IntRange(from=0x500) int);
+    method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder setRetryIntervalsMillis(@NonNull long[]);
+  }
+
+  public class VcnManager {
+    method @RequiresPermission("carrier privileges") public void clearVcnConfig(@NonNull android.os.ParcelUuid) throws java.io.IOException;
+    method @NonNull public java.util.List<android.os.ParcelUuid> getConfiguredSubscriptionGroups();
+    method public void registerVcnStatusCallback(@NonNull android.os.ParcelUuid, @NonNull java.util.concurrent.Executor, @NonNull android.net.vcn.VcnManager.VcnStatusCallback);
+    method @RequiresPermission("carrier privileges") public void setVcnConfig(@NonNull android.os.ParcelUuid, @NonNull android.net.vcn.VcnConfig) throws java.io.IOException;
+    method public void unregisterVcnStatusCallback(@NonNull android.net.vcn.VcnManager.VcnStatusCallback);
+    field public static final int VCN_ERROR_CODE_CONFIG_ERROR = 1; // 0x1
+    field public static final int VCN_ERROR_CODE_INTERNAL_ERROR = 0; // 0x0
+    field public static final int VCN_ERROR_CODE_NETWORK_ERROR = 2; // 0x2
+    field public static final int VCN_STATUS_CODE_ACTIVE = 2; // 0x2
+    field public static final int VCN_STATUS_CODE_INACTIVE = 1; // 0x1
+    field public static final int VCN_STATUS_CODE_NOT_CONFIGURED = 0; // 0x0
+    field public static final int VCN_STATUS_CODE_SAFE_MODE = 3; // 0x3
+  }
+
+  public abstract static class VcnManager.VcnStatusCallback {
+    ctor public VcnManager.VcnStatusCallback();
+    method public abstract void onGatewayConnectionError(@NonNull String, int, @Nullable Throwable);
+    method public abstract void onStatusChanged(int);
+  }
+
+}
+
+package android.net.wifi {
+
+  public abstract class EasyConnectStatusCallback {
+    field public static final int EASY_CONNECT_EVENT_FAILURE_AUTHENTICATION = -2; // 0xfffffffe
+    field public static final int EASY_CONNECT_EVENT_FAILURE_BUSY = -5; // 0xfffffffb
+    field public static final int EASY_CONNECT_EVENT_FAILURE_CANNOT_FIND_NETWORK = -10; // 0xfffffff6
+    field public static final int EASY_CONNECT_EVENT_FAILURE_CONFIGURATION = -4; // 0xfffffffc
+    field public static final int EASY_CONNECT_EVENT_FAILURE_ENROLLEE_AUTHENTICATION = -11; // 0xfffffff5
+    field public static final int EASY_CONNECT_EVENT_FAILURE_ENROLLEE_FAILED_TO_SCAN_NETWORK_CHANNEL = -14; // 0xfffffff2
+    field public static final int EASY_CONNECT_EVENT_FAILURE_ENROLLEE_REJECTED_CONFIGURATION = -12; // 0xfffffff4
+    field public static final int EASY_CONNECT_EVENT_FAILURE_GENERIC = -7; // 0xfffffff9
+    field public static final int EASY_CONNECT_EVENT_FAILURE_INVALID_NETWORK = -9; // 0xfffffff7
+    field public static final int EASY_CONNECT_EVENT_FAILURE_INVALID_URI = -1; // 0xffffffff
+    field public static final int EASY_CONNECT_EVENT_FAILURE_NOT_COMPATIBLE = -3; // 0xfffffffd
+    field public static final int EASY_CONNECT_EVENT_FAILURE_NOT_SUPPORTED = -8; // 0xfffffff8
+    field public static final int EASY_CONNECT_EVENT_FAILURE_TIMEOUT = -6; // 0xfffffffa
+    field public static final int EASY_CONNECT_EVENT_FAILURE_URI_GENERATION = -13; // 0xfffffff3
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    ctor public ScanResult(@NonNull android.net.wifi.ScanResult);
+    ctor public ScanResult();
+    method public static int convertChannelToFrequencyMhzIfSupported(int, int);
+    method public static int convertFrequencyMhzToChannelIfSupported(int);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.wifi.ScanResult.InformationElement> getInformationElements();
+    method public int getWifiStandard();
+    method public boolean is80211mcResponder();
+    method public boolean isPasspointNetwork();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String BSSID;
+    field public static final int CHANNEL_WIDTH_160MHZ = 3; // 0x3
+    field public static final int CHANNEL_WIDTH_20MHZ = 0; // 0x0
+    field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1
+    field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2
+    field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.ScanResult> CREATOR;
+    field public String SSID;
+    field public static final int UNSPECIFIED = -1; // 0xffffffff
+    field public static final int WIFI_BAND_24_GHZ = 1; // 0x1
+    field public static final int WIFI_BAND_5_GHZ = 2; // 0x2
+    field public static final int WIFI_BAND_60_GHZ = 16; // 0x10
+    field public static final int WIFI_BAND_6_GHZ = 8; // 0x8
+    field public static final int WIFI_STANDARD_11AC = 5; // 0x5
+    field public static final int WIFI_STANDARD_11AD = 7; // 0x7
+    field public static final int WIFI_STANDARD_11AX = 6; // 0x6
+    field public static final int WIFI_STANDARD_11N = 4; // 0x4
+    field public static final int WIFI_STANDARD_LEGACY = 1; // 0x1
+    field public static final int WIFI_STANDARD_UNKNOWN = 0; // 0x0
+    field public String capabilities;
+    field public int centerFreq0;
+    field public int centerFreq1;
+    field public int channelWidth;
+    field public int frequency;
+    field public int level;
+    field @Deprecated public CharSequence operatorFriendlyName;
+    field public long timestamp;
+    field @Deprecated public CharSequence venueName;
+  }
+
+  public static class ScanResult.InformationElement implements android.os.Parcelable {
+    ctor public ScanResult.InformationElement(@NonNull android.net.wifi.ScanResult.InformationElement);
+    method public int describeContents();
+    method @NonNull public java.nio.ByteBuffer getBytes();
+    method public int getId();
+    method public int getIdExt();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.ScanResult.InformationElement> CREATOR;
+  }
+
+  public final class SoftApConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getBssid();
+    method @Nullable public String getPassphrase();
+    method public int getSecurityType();
+    method @Nullable public String getSsid();
+    method public boolean isHiddenSsid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.SoftApConfiguration> CREATOR;
+    field public static final int SECURITY_TYPE_OPEN = 0; // 0x0
+    field public static final int SECURITY_TYPE_WPA2_PSK = 1; // 0x1
+    field public static final int SECURITY_TYPE_WPA3_SAE = 3; // 0x3
+    field public static final int SECURITY_TYPE_WPA3_SAE_TRANSITION = 2; // 0x2
+  }
+
+  public enum SupplicantState implements android.os.Parcelable {
+    method public int describeContents();
+    method public static boolean isValidState(android.net.wifi.SupplicantState);
+    method public void writeToParcel(android.os.Parcel, int);
+    enum_constant public static final android.net.wifi.SupplicantState ASSOCIATED;
+    enum_constant public static final android.net.wifi.SupplicantState ASSOCIATING;
+    enum_constant public static final android.net.wifi.SupplicantState AUTHENTICATING;
+    enum_constant public static final android.net.wifi.SupplicantState COMPLETED;
+    enum_constant public static final android.net.wifi.SupplicantState DISCONNECTED;
+    enum_constant public static final android.net.wifi.SupplicantState DORMANT;
+    enum_constant public static final android.net.wifi.SupplicantState FOUR_WAY_HANDSHAKE;
+    enum_constant public static final android.net.wifi.SupplicantState GROUP_HANDSHAKE;
+    enum_constant public static final android.net.wifi.SupplicantState INACTIVE;
+    enum_constant public static final android.net.wifi.SupplicantState INTERFACE_DISABLED;
+    enum_constant public static final android.net.wifi.SupplicantState INVALID;
+    enum_constant public static final android.net.wifi.SupplicantState SCANNING;
+    enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED;
+  }
+
+  @Deprecated public class WifiConfiguration implements android.os.Parcelable {
+    ctor @Deprecated public WifiConfiguration();
+    ctor @Deprecated public WifiConfiguration(@NonNull android.net.wifi.WifiConfiguration);
+    method public int describeContents();
+    method @Deprecated public android.net.ProxyInfo getHttpProxy();
+    method @Deprecated @NonNull public String getKey();
+    method @Deprecated @NonNull public android.net.MacAddress getRandomizedMacAddress();
+    method @Deprecated public boolean isPasspoint();
+    method @Deprecated public void setHttpProxy(android.net.ProxyInfo);
+    method @Deprecated public void setSecurityParams(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public String BSSID;
+    field @Deprecated public String FQDN;
+    field @Deprecated public static final int SECURITY_TYPE_EAP = 3; // 0x3
+    field @Deprecated public static final int SECURITY_TYPE_EAP_SUITE_B = 5; // 0x5
+    field @Deprecated public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE = 9; // 0x9
+    field @Deprecated public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT = 5; // 0x5
+    field @Deprecated public static final int SECURITY_TYPE_OPEN = 0; // 0x0
+    field @Deprecated public static final int SECURITY_TYPE_OWE = 6; // 0x6
+    field @Deprecated public static final int SECURITY_TYPE_PSK = 2; // 0x2
+    field @Deprecated public static final int SECURITY_TYPE_SAE = 4; // 0x4
+    field @Deprecated public static final int SECURITY_TYPE_WAPI_CERT = 8; // 0x8
+    field @Deprecated public static final int SECURITY_TYPE_WAPI_PSK = 7; // 0x7
+    field @Deprecated public static final int SECURITY_TYPE_WEP = 1; // 0x1
+    field @Deprecated public String SSID;
+    field @Deprecated @NonNull public java.util.BitSet allowedAuthAlgorithms;
+    field @Deprecated @NonNull public java.util.BitSet allowedGroupCiphers;
+    field @Deprecated @NonNull public java.util.BitSet allowedGroupManagementCiphers;
+    field @Deprecated @NonNull public java.util.BitSet allowedKeyManagement;
+    field @Deprecated @NonNull public java.util.BitSet allowedPairwiseCiphers;
+    field @Deprecated @NonNull public java.util.BitSet allowedProtocols;
+    field @Deprecated @NonNull public java.util.BitSet allowedSuiteBCiphers;
+    field @Deprecated public android.net.wifi.WifiEnterpriseConfig enterpriseConfig;
+    field @Deprecated public boolean hiddenSSID;
+    field @Deprecated public boolean isHomeProviderNetwork;
+    field @Deprecated public int networkId;
+    field @Deprecated public String preSharedKey;
+    field @Deprecated public int priority;
+    field @Deprecated public String providerFriendlyName;
+    field @Deprecated public long[] roamingConsortiumIds;
+    field @Deprecated public int status;
+    field @Deprecated public String[] wepKeys;
+    field @Deprecated public int wepTxKeyIndex;
+  }
+
+  @Deprecated public static class WifiConfiguration.AuthAlgorithm {
+    field @Deprecated public static final int LEAP = 2; // 0x2
+    field @Deprecated public static final int OPEN = 0; // 0x0
+    field @Deprecated public static final int SAE = 3; // 0x3
+    field @Deprecated public static final int SHARED = 1; // 0x1
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "auth_alg";
+  }
+
+  @Deprecated public static class WifiConfiguration.GroupCipher {
+    field @Deprecated public static final int CCMP = 3; // 0x3
+    field @Deprecated public static final int GCMP_128 = 7; // 0x7
+    field @Deprecated public static final int GCMP_256 = 5; // 0x5
+    field @Deprecated public static final int SMS4 = 6; // 0x6
+    field @Deprecated public static final int TKIP = 2; // 0x2
+    field @Deprecated public static final int WEP104 = 1; // 0x1
+    field @Deprecated public static final int WEP40 = 0; // 0x0
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "group";
+  }
+
+  @Deprecated public static class WifiConfiguration.GroupMgmtCipher {
+    field @Deprecated public static final int BIP_CMAC_256 = 0; // 0x0
+    field @Deprecated public static final int BIP_GMAC_128 = 1; // 0x1
+    field @Deprecated public static final int BIP_GMAC_256 = 2; // 0x2
+  }
+
+  @Deprecated public static class WifiConfiguration.KeyMgmt {
+    field @Deprecated public static final int IEEE8021X = 3; // 0x3
+    field @Deprecated public static final int NONE = 0; // 0x0
+    field @Deprecated public static final int OWE = 9; // 0x9
+    field @Deprecated public static final int SAE = 8; // 0x8
+    field @Deprecated public static final int SUITE_B_192 = 10; // 0xa
+    field @Deprecated public static final int WPA_EAP = 2; // 0x2
+    field @Deprecated public static final int WPA_PSK = 1; // 0x1
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "key_mgmt";
+  }
+
+  @Deprecated public static class WifiConfiguration.PairwiseCipher {
+    field @Deprecated public static final int CCMP = 2; // 0x2
+    field @Deprecated public static final int GCMP_128 = 5; // 0x5
+    field @Deprecated public static final int GCMP_256 = 3; // 0x3
+    field @Deprecated public static final int NONE = 0; // 0x0
+    field @Deprecated public static final int SMS4 = 4; // 0x4
+    field @Deprecated public static final int TKIP = 1; // 0x1
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "pairwise";
+  }
+
+  @Deprecated public static class WifiConfiguration.Protocol {
+    field @Deprecated public static final int RSN = 1; // 0x1
+    field @Deprecated public static final int WAPI = 3; // 0x3
+    field @Deprecated public static final int WPA = 0; // 0x0
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "proto";
+  }
+
+  @Deprecated public static class WifiConfiguration.Status {
+    field @Deprecated public static final int CURRENT = 0; // 0x0
+    field @Deprecated public static final int DISABLED = 1; // 0x1
+    field @Deprecated public static final int ENABLED = 2; // 0x2
+    field @Deprecated public static final String[] strings;
+  }
+
+  public class WifiEnterpriseConfig implements android.os.Parcelable {
+    ctor public WifiEnterpriseConfig();
+    ctor public WifiEnterpriseConfig(android.net.wifi.WifiEnterpriseConfig);
+    method public int describeContents();
+    method public String getAltSubjectMatch();
+    method public String getAnonymousIdentity();
+    method @Nullable public java.security.cert.X509Certificate getCaCertificate();
+    method @Nullable public java.security.cert.X509Certificate[] getCaCertificates();
+    method public java.security.cert.X509Certificate getClientCertificate();
+    method @Nullable public java.security.cert.X509Certificate[] getClientCertificateChain();
+    method @Nullable public String getClientKeyPairAlias();
+    method @Nullable public java.security.PrivateKey getClientPrivateKey();
+    method @Nullable public String getDecoratedIdentityPrefix();
+    method public String getDomainSuffixMatch();
+    method public int getEapMethod();
+    method public String getIdentity();
+    method public String getPassword();
+    method public int getPhase2Method();
+    method public String getPlmn();
+    method public String getRealm();
+    method @Deprecated public String getSubjectMatch();
+    method public boolean isAuthenticationSimBased();
+    method public boolean isEapMethodServerCertUsed();
+    method public boolean isServerCertValidationEnabled();
+    method public void setAltSubjectMatch(String);
+    method public void setAnonymousIdentity(String);
+    method public void setCaCertificate(@Nullable java.security.cert.X509Certificate);
+    method public void setCaCertificates(@Nullable java.security.cert.X509Certificate[]);
+    method public void setClientKeyEntry(java.security.PrivateKey, java.security.cert.X509Certificate);
+    method public void setClientKeyEntryWithCertificateChain(java.security.PrivateKey, java.security.cert.X509Certificate[]);
+    method public void setClientKeyPairAlias(@NonNull String);
+    method public void setDecoratedIdentityPrefix(@Nullable String);
+    method public void setDomainSuffixMatch(String);
+    method public void setEapMethod(int);
+    method public void setIdentity(String);
+    method public void setPassword(String);
+    method public void setPhase2Method(int);
+    method public void setPlmn(String);
+    method public void setRealm(String);
+    method @Deprecated public void setSubjectMatch(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiEnterpriseConfig> CREATOR;
+    field public static final String EXTRA_WAPI_AS_CERTIFICATE_DATA = "android.net.wifi.extra.WAPI_AS_CERTIFICATE_DATA";
+    field public static final String EXTRA_WAPI_AS_CERTIFICATE_NAME = "android.net.wifi.extra.WAPI_AS_CERTIFICATE_NAME";
+    field public static final String EXTRA_WAPI_USER_CERTIFICATE_DATA = "android.net.wifi.extra.WAPI_USER_CERTIFICATE_DATA";
+    field public static final String EXTRA_WAPI_USER_CERTIFICATE_NAME = "android.net.wifi.extra.WAPI_USER_CERTIFICATE_NAME";
+    field public static final String WAPI_AS_CERTIFICATE = "WAPIAS_";
+    field public static final String WAPI_USER_CERTIFICATE = "WAPIUSR_";
+  }
+
+  public static final class WifiEnterpriseConfig.Eap {
+    field public static final int AKA = 5; // 0x5
+    field public static final int AKA_PRIME = 6; // 0x6
+    field public static final int NONE = -1; // 0xffffffff
+    field public static final int PEAP = 0; // 0x0
+    field public static final int PWD = 3; // 0x3
+    field public static final int SIM = 4; // 0x4
+    field public static final int TLS = 1; // 0x1
+    field public static final int TTLS = 2; // 0x2
+    field public static final int UNAUTH_TLS = 7; // 0x7
+    field public static final int WAPI_CERT = 8; // 0x8
+  }
+
+  public static final class WifiEnterpriseConfig.Phase2 {
+    field public static final int AKA = 6; // 0x6
+    field public static final int AKA_PRIME = 7; // 0x7
+    field public static final int GTC = 4; // 0x4
+    field public static final int MSCHAP = 2; // 0x2
+    field public static final int MSCHAPV2 = 3; // 0x3
+    field public static final int NONE = 0; // 0x0
+    field public static final int PAP = 1; // 0x1
+    field public static final int SIM = 5; // 0x5
+  }
+
+  public class WifiInfo implements android.os.Parcelable android.net.TransportInfo {
+    method public int describeContents();
+    method public String getBSSID();
+    method public int getCurrentSecurityType();
+    method public static android.net.NetworkInfo.DetailedState getDetailedStateOf(android.net.wifi.SupplicantState);
+    method public int getFrequency();
+    method public boolean getHiddenSSID();
+    method @Nullable public java.util.List<android.net.wifi.ScanResult.InformationElement> getInformationElements();
+    method @Deprecated public int getIpAddress();
+    method public int getLinkSpeed();
+    method @RequiresPermission(allOf={android.Manifest.permission.LOCAL_MAC_ADDRESS, android.Manifest.permission.ACCESS_FINE_LOCATION}) public String getMacAddress();
+    method public int getMaxSupportedRxLinkSpeedMbps();
+    method public int getMaxSupportedTxLinkSpeedMbps();
+    method public int getNetworkId();
+    method @Nullable public String getPasspointFqdn();
+    method @Nullable public String getPasspointProviderFriendlyName();
+    method public int getRssi();
+    method @IntRange(from=0xffffffff) public int getRxLinkSpeedMbps();
+    method public String getSSID();
+    method public int getSubscriptionId();
+    method public android.net.wifi.SupplicantState getSupplicantState();
+    method @IntRange(from=0xffffffff) public int getTxLinkSpeedMbps();
+    method public int getWifiStandard();
+    method @NonNull public android.net.wifi.WifiInfo makeCopy(long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String FREQUENCY_UNITS = "MHz";
+    field public static final String LINK_SPEED_UNITS = "Mbps";
+    field public static final int LINK_SPEED_UNKNOWN = -1; // 0xffffffff
+    field public static final int SECURITY_TYPE_EAP = 3; // 0x3
+    field public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE = 9; // 0x9
+    field public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT = 5; // 0x5
+    field public static final int SECURITY_TYPE_OPEN = 0; // 0x0
+    field public static final int SECURITY_TYPE_OSEN = 10; // 0xa
+    field public static final int SECURITY_TYPE_OWE = 6; // 0x6
+    field public static final int SECURITY_TYPE_PASSPOINT_R1_R2 = 11; // 0xb
+    field public static final int SECURITY_TYPE_PASSPOINT_R3 = 12; // 0xc
+    field public static final int SECURITY_TYPE_PSK = 2; // 0x2
+    field public static final int SECURITY_TYPE_SAE = 4; // 0x4
+    field public static final int SECURITY_TYPE_UNKNOWN = -1; // 0xffffffff
+    field public static final int SECURITY_TYPE_WAPI_CERT = 8; // 0x8
+    field public static final int SECURITY_TYPE_WAPI_PSK = 7; // 0x7
+    field public static final int SECURITY_TYPE_WEP = 1; // 0x1
+  }
+
+  public static final class WifiInfo.Builder {
+    ctor public WifiInfo.Builder();
+    method @NonNull public android.net.wifi.WifiInfo build();
+    method @NonNull public android.net.wifi.WifiInfo.Builder setBssid(@NonNull String);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setCurrentSecurityType(int);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setNetworkId(int);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setRssi(int);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setSsid(@NonNull byte[]);
+  }
+
+  public class WifiManager {
+    method @Deprecated public int addNetwork(android.net.wifi.WifiConfiguration);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_MANAGED_PROVISIONING}) public android.net.wifi.WifiManager.AddNetworkResult addNetworkPrivileged(@NonNull android.net.wifi.WifiConfiguration);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public int addNetworkSuggestions(@NonNull java.util.List<android.net.wifi.WifiNetworkSuggestion>);
+    method public void addOrUpdatePasspointConfiguration(android.net.wifi.hotspot2.PasspointConfiguration);
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public void addSuggestionConnectionStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SuggestionConnectionStatusListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void addSuggestionUserApprovalStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SuggestionUserApprovalStatusListener);
+    method @Deprecated public static int calculateSignalLevel(int, int);
+    method @IntRange(from=0) public int calculateSignalLevel(int);
+    method @Deprecated public void cancelWps(android.net.wifi.WifiManager.WpsCallback);
+    method public static int compareSignalLevel(int, int);
+    method public android.net.wifi.WifiManager.MulticastLock createMulticastLock(String);
+    method public android.net.wifi.WifiManager.WifiLock createWifiLock(int, String);
+    method @Deprecated public android.net.wifi.WifiManager.WifiLock createWifiLock(String);
+    method @Deprecated public boolean disableNetwork(int);
+    method @Deprecated public boolean disconnect();
+    method @Deprecated public boolean enableNetwork(int, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_MANAGED_PROVISIONING, android.Manifest.permission.NETWORK_CARRIER_PROVISIONING}) public void flushPasspointAnqpCache();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public java.util.List<android.net.wifi.WifiConfiguration> getCallerConfiguredNetworks();
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public java.util.List<android.net.wifi.WifiConfiguration> getConfiguredNetworks();
+    method @Deprecated public android.net.wifi.WifiInfo getConnectionInfo();
+    method @Deprecated public android.net.DhcpInfo getDhcpInfo();
+    method public int getMaxNumberOfNetworkSuggestionsPerApp();
+    method @IntRange(from=0) public int getMaxSignalLevel();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public java.util.List<android.net.wifi.WifiNetworkSuggestion> getNetworkSuggestions();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.net.wifi.hotspot2.PasspointConfiguration> getPasspointConfigurations();
+    method public java.util.List<android.net.wifi.ScanResult> getScanResults();
+    method public int getWifiState();
+    method public boolean is24GHzBandSupported();
+    method public boolean is5GHzBandSupported();
+    method public boolean is60GHzBandSupported();
+    method public boolean is6GHzBandSupported();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isAutoWakeupEnabled();
+    method public boolean isBridgedApConcurrencySupported();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isCarrierNetworkOffloadEnabled(int, boolean);
+    method public boolean isDecoratedIdentitySupported();
+    method @Deprecated public boolean isDeviceToApRttSupported();
+    method public boolean isEasyConnectEnrolleeResponderModeSupported();
+    method public boolean isEasyConnectSupported();
+    method public boolean isEnhancedOpenSupported();
+    method public boolean isEnhancedPowerReportingSupported();
+    method public boolean isMakeBeforeBreakWifiSwitchingSupported();
+    method public boolean isP2pSupported();
+    method public boolean isPasspointTermsAndConditionsSupported();
+    method public boolean isPreferredNetworkOffloadSupported();
+    method @Deprecated public boolean isScanAlwaysAvailable();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isScanThrottleEnabled();
+    method public boolean isStaApConcurrencySupported();
+    method public boolean isStaBridgedApConcurrencySupported();
+    method public boolean isStaConcurrencyForLocalOnlyConnectionsSupported();
+    method public boolean isTdlsSupported();
+    method public boolean isWapiSupported();
+    method public boolean isWifiDisplayR2Supported();
+    method public boolean isWifiEnabled();
+    method public boolean isWifiStandardSupported(int);
+    method public boolean isWpa3SaeH2eSupported();
+    method public boolean isWpa3SaePublicKeySupported();
+    method public boolean isWpa3SaeSupported();
+    method public boolean isWpa3SuiteBSupported();
+    method @Deprecated public boolean pingSupplicant();
+    method @Deprecated public boolean reassociate();
+    method @Deprecated public boolean reconnect();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void registerScanResultsCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.ScanResultsCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void registerSubsystemRestartTrackingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SubsystemRestartTrackingCallback);
+    method @Deprecated public boolean removeNetwork(int);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public int removeNetworkSuggestions(@NonNull java.util.List<android.net.wifi.WifiNetworkSuggestion>);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean removeNonCallerConfiguredNetworks();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_CARRIER_PROVISIONING}) public void removePasspointConfiguration(String);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void removeSuggestionConnectionStatusListener(@NonNull android.net.wifi.WifiManager.SuggestionConnectionStatusListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void removeSuggestionUserApprovalStatusListener(@NonNull android.net.wifi.WifiManager.SuggestionUserApprovalStatusListener);
+    method @Deprecated public boolean saveConfiguration();
+    method public void setTdlsEnabled(java.net.InetAddress, boolean);
+    method public void setTdlsEnabledWithMacAddress(String, boolean);
+    method @Deprecated public boolean setWifiEnabled(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback, @Nullable android.os.Handler);
+    method @Deprecated public boolean startScan();
+    method @Deprecated public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void unregisterScanResultsCallback(@NonNull android.net.wifi.WifiManager.ScanResultsCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void unregisterSubsystemRestartTrackingCallback(@NonNull android.net.wifi.WifiManager.SubsystemRestartTrackingCallback);
+    method @Deprecated public int updateNetwork(android.net.wifi.WifiConfiguration);
+    field public static final String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK";
+    field public static final String ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE = "android.net.wifi.action.REQUEST_SCAN_ALWAYS_AVAILABLE";
+    field public static final String ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION = "android.net.wifi.action.WIFI_NETWORK_SUGGESTION_POST_CONNECTION";
+    field public static final String ACTION_WIFI_SCAN_AVAILABILITY_CHANGED = "android.net.wifi.action.WIFI_SCAN_AVAILABILITY_CHANGED";
+    field @Deprecated public static final int ERROR_AUTHENTICATING = 1; // 0x1
+    field @Deprecated public static final String EXTRA_BSSID = "bssid";
+    field public static final String EXTRA_NETWORK_INFO = "networkInfo";
+    field public static final String EXTRA_NETWORK_SUGGESTION = "android.net.wifi.extra.NETWORK_SUGGESTION";
+    field public static final String EXTRA_NEW_RSSI = "newRssi";
+    field @Deprecated public static final String EXTRA_NEW_STATE = "newState";
+    field public static final String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state";
+    field public static final String EXTRA_RESULTS_UPDATED = "resultsUpdated";
+    field public static final String EXTRA_SCAN_AVAILABLE = "android.net.wifi.extra.SCAN_AVAILABLE";
+    field @Deprecated public static final String EXTRA_SUPPLICANT_CONNECTED = "connected";
+    field @Deprecated public static final String EXTRA_SUPPLICANT_ERROR = "supplicantError";
+    field @Deprecated public static final String EXTRA_WIFI_INFO = "wifiInfo";
+    field public static final String EXTRA_WIFI_STATE = "wifi_state";
+    field public static final String NETWORK_IDS_CHANGED_ACTION = "android.net.wifi.NETWORK_IDS_CHANGED";
+    field public static final String NETWORK_STATE_CHANGED_ACTION = "android.net.wifi.STATE_CHANGE";
+    field public static final String RSSI_CHANGED_ACTION = "android.net.wifi.RSSI_CHANGED";
+    field public static final String SCAN_RESULTS_AVAILABLE_ACTION = "android.net.wifi.SCAN_RESULTS";
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE = 3; // 0x3
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_EXCEEDS_MAX_PER_APP = 4; // 0x4
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_INVALID = 7; // 0x7
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_NOT_ALLOWED = 6; // 0x6
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED = 2; // 0x2
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL = 1; // 0x1
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID = 5; // 0x5
+    field public static final int STATUS_NETWORK_SUGGESTIONS_SUCCESS = 0; // 0x0
+    field public static final int STATUS_SUGGESTION_APPROVAL_APPROVED_BY_CARRIER_PRIVILEGE = 4; // 0x4
+    field public static final int STATUS_SUGGESTION_APPROVAL_APPROVED_BY_USER = 2; // 0x2
+    field public static final int STATUS_SUGGESTION_APPROVAL_PENDING = 1; // 0x1
+    field public static final int STATUS_SUGGESTION_APPROVAL_REJECTED_BY_USER = 3; // 0x3
+    field public static final int STATUS_SUGGESTION_APPROVAL_UNKNOWN = 0; // 0x0
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_ASSOCIATION = 1; // 0x1
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_AUTHENTICATION = 2; // 0x2
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_IP_PROVISIONING = 3; // 0x3
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final String SUPPLICANT_CONNECTION_CHANGE_ACTION = "android.net.wifi.supplicant.CONNECTION_CHANGE";
+    field @Deprecated public static final String SUPPLICANT_STATE_CHANGED_ACTION = "android.net.wifi.supplicant.STATE_CHANGE";
+    field public static final String UNKNOWN_SSID = "<unknown ssid>";
+    field @Deprecated public static final int WIFI_MODE_FULL = 1; // 0x1
+    field public static final int WIFI_MODE_FULL_HIGH_PERF = 3; // 0x3
+    field public static final int WIFI_MODE_FULL_LOW_LATENCY = 4; // 0x4
+    field @Deprecated public static final int WIFI_MODE_SCAN_ONLY = 2; // 0x2
+    field public static final String WIFI_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_STATE_CHANGED";
+    field public static final int WIFI_STATE_DISABLED = 1; // 0x1
+    field public static final int WIFI_STATE_DISABLING = 0; // 0x0
+    field public static final int WIFI_STATE_ENABLED = 3; // 0x3
+    field public static final int WIFI_STATE_ENABLING = 2; // 0x2
+    field public static final int WIFI_STATE_UNKNOWN = 4; // 0x4
+    field @Deprecated public static final int WPS_AUTH_FAILURE = 6; // 0x6
+    field @Deprecated public static final int WPS_OVERLAP_ERROR = 3; // 0x3
+    field @Deprecated public static final int WPS_TIMED_OUT = 7; // 0x7
+    field @Deprecated public static final int WPS_TKIP_ONLY_PROHIBITED = 5; // 0x5
+    field @Deprecated public static final int WPS_WEP_PROHIBITED = 4; // 0x4
+  }
+
+  public static final class WifiManager.AddNetworkResult implements android.os.Parcelable {
+    ctor public WifiManager.AddNetworkResult(int, int);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiManager.AddNetworkResult> CREATOR;
+    field public static final int STATUS_ADD_PASSPOINT_FAILURE = 3; // 0x3
+    field public static final int STATUS_ADD_WIFI_CONFIG_FAILURE = 4; // 0x4
+    field public static final int STATUS_FAILURE_UNKNOWN = 1; // 0x1
+    field public static final int STATUS_FAILURE_UPDATE_NETWORK_KEYS = 9; // 0x9
+    field public static final int STATUS_INVALID_CONFIGURATION = 5; // 0x5
+    field public static final int STATUS_INVALID_CONFIGURATION_ENTERPRISE = 10; // 0xa
+    field public static final int STATUS_NO_PERMISSION = 2; // 0x2
+    field public static final int STATUS_NO_PERMISSION_MODIFY_CONFIG = 6; // 0x6
+    field public static final int STATUS_NO_PERMISSION_MODIFY_MAC_RANDOMIZATION = 8; // 0x8
+    field public static final int STATUS_NO_PERMISSION_MODIFY_PROXY_SETTING = 7; // 0x7
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+    field public final int networkId;
+    field public final int statusCode;
+  }
+
+  public static class WifiManager.LocalOnlyHotspotCallback {
+    ctor public WifiManager.LocalOnlyHotspotCallback();
+    method public void onFailed(int);
+    method public void onStarted(android.net.wifi.WifiManager.LocalOnlyHotspotReservation);
+    method public void onStopped();
+    field public static final int ERROR_GENERIC = 2; // 0x2
+    field public static final int ERROR_INCOMPATIBLE_MODE = 3; // 0x3
+    field public static final int ERROR_NO_CHANNEL = 1; // 0x1
+    field public static final int ERROR_TETHERING_DISALLOWED = 4; // 0x4
+  }
+
+  public class WifiManager.LocalOnlyHotspotReservation implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public android.net.wifi.SoftApConfiguration getSoftApConfiguration();
+    method @Deprecated @Nullable public android.net.wifi.WifiConfiguration getWifiConfiguration();
+  }
+
+  public class WifiManager.MulticastLock {
+    method public void acquire();
+    method public boolean isHeld();
+    method public void release();
+    method public void setReferenceCounted(boolean);
+  }
+
+  public abstract static class WifiManager.ScanResultsCallback {
+    ctor public WifiManager.ScanResultsCallback();
+    method public abstract void onScanResultsAvailable();
+  }
+
+  public abstract static class WifiManager.SubsystemRestartTrackingCallback {
+    ctor public WifiManager.SubsystemRestartTrackingCallback();
+    method public abstract void onSubsystemRestarted();
+    method public abstract void onSubsystemRestarting();
+  }
+
+  public static interface WifiManager.SuggestionConnectionStatusListener {
+    method public void onConnectionStatus(@NonNull android.net.wifi.WifiNetworkSuggestion, int);
+  }
+
+  public static interface WifiManager.SuggestionUserApprovalStatusListener {
+    method public void onUserApprovalStatusChange(int);
+  }
+
+  public class WifiManager.WifiLock {
+    method public void acquire();
+    method public boolean isHeld();
+    method public void release();
+    method public void setReferenceCounted(boolean);
+    method public void setWorkSource(android.os.WorkSource);
+  }
+
+  @Deprecated public abstract static class WifiManager.WpsCallback {
+    ctor @Deprecated public WifiManager.WpsCallback();
+    method @Deprecated public abstract void onFailed(int);
+    method @Deprecated public abstract void onStarted(String);
+    method @Deprecated public abstract void onSucceeded();
+  }
+
+  public final class WifiNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getBand();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkSpecifier> CREATOR;
+  }
+
+  public static final class WifiNetworkSpecifier.Builder {
+    ctor public WifiNetworkSpecifier.Builder();
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier build();
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBand(int);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBssid(@NonNull android.net.MacAddress);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBssidPattern(@NonNull android.net.MacAddress, @NonNull android.net.MacAddress);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setIsEnhancedOpen(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setIsHiddenSsid(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setSsid(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setSsidPattern(@NonNull android.os.PatternMatcher);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2Passphrase(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3Enterprise192BitModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @Deprecated @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3EnterpriseStandardModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3Passphrase(@NonNull String);
+  }
+
+  public final class WifiNetworkSuggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getBssid();
+    method @Nullable public android.net.wifi.WifiEnterpriseConfig getEnterpriseConfig();
+    method @Nullable public String getPassphrase();
+    method @Nullable public android.net.wifi.hotspot2.PasspointConfiguration getPasspointConfig();
+    method @IntRange(from=0) public int getPriority();
+    method @IntRange(from=0) public int getPriorityGroup();
+    method @Nullable public String getSsid();
+    method public int getSubscriptionId();
+    method public boolean isAppInteractionRequired();
+    method public boolean isCarrierMerged();
+    method public boolean isCredentialSharedWithUser();
+    method public boolean isEnhancedOpen();
+    method public boolean isHiddenSsid();
+    method public boolean isInitialAutojoinEnabled();
+    method public boolean isMetered();
+    method public boolean isUntrusted();
+    method public boolean isUserInteractionRequired();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkSuggestion> CREATOR;
+    field public static final int RANDOMIZATION_NON_PERSISTENT = 1; // 0x1
+    field public static final int RANDOMIZATION_PERSISTENT = 0; // 0x0
+  }
+
+  public static final class WifiNetworkSuggestion.Builder {
+    ctor public WifiNetworkSuggestion.Builder();
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion build();
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setBssid(@NonNull android.net.MacAddress);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setCarrierMerged(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setCredentialSharedWithUser(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsAppInteractionRequired(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsEnhancedOpen(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsHiddenSsid(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsInitialAutojoinEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsMetered(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsUserInteractionRequired(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsWpa3SaeH2eOnlyModeEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setMacRandomizationSetting(int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPasspointConfig(@NonNull android.net.wifi.hotspot2.PasspointConfiguration);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPriority(@IntRange(from=0) int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPriorityGroup(@IntRange(from=0) int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setSsid(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setSubscriptionId(int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setUntrusted(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWapiEnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWapiPassphrase(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2Passphrase(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3Enterprise192BitModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @Deprecated @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3EnterpriseStandardModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3Passphrase(@NonNull String);
+  }
+
+  public class WpsInfo implements android.os.Parcelable {
+    ctor public WpsInfo();
+    ctor public WpsInfo(android.net.wifi.WpsInfo);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String BSSID;
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WpsInfo> CREATOR;
+    field public static final int DISPLAY = 1; // 0x1
+    field public static final int INVALID = 4; // 0x4
+    field public static final int KEYPAD = 2; // 0x2
+    field public static final int LABEL = 3; // 0x3
+    field public static final int PBC = 0; // 0x0
+    field public String pin;
+    field public int setup;
+  }
+
+}
+
+package android.net.wifi.aware {
+
+  public class AttachCallback {
+    ctor public AttachCallback();
+    method public void onAttachFailed();
+    method public void onAttached(android.net.wifi.aware.WifiAwareSession);
+  }
+
+  public final class AwareResources implements android.os.Parcelable {
+    ctor public AwareResources(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public int describeContents();
+    method @IntRange(from=0) public int getAvailableDataPathsCount();
+    method @IntRange(from=0) public int getAvailablePublishSessionsCount();
+    method @IntRange(from=0) public int getAvailableSubscribeSessionsCount();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.AwareResources> CREATOR;
+  }
+
+  public final class Characteristics implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getMaxMatchFilterLength();
+    method public int getMaxServiceNameLength();
+    method public int getMaxServiceSpecificInfoLength();
+    method public int getSupportedCipherSuites();
+    method public boolean isInstantCommunicationModeSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
+    field public static final int WIFI_AWARE_CIPHER_SUITE_NCS_SK_128 = 1; // 0x1
+    field public static final int WIFI_AWARE_CIPHER_SUITE_NCS_SK_256 = 2; // 0x2
+  }
+
+  public class DiscoverySession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierOpen(@NonNull android.net.wifi.aware.PeerHandle);
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(@NonNull android.net.wifi.aware.PeerHandle, @NonNull String);
+    method public void sendMessage(@NonNull android.net.wifi.aware.PeerHandle, int, @Nullable byte[]);
+  }
+
+  public class DiscoverySessionCallback {
+    ctor public DiscoverySessionCallback();
+    method public void onMessageReceived(android.net.wifi.aware.PeerHandle, byte[]);
+    method public void onMessageSendFailed(int);
+    method public void onMessageSendSucceeded(int);
+    method public void onPublishStarted(@NonNull android.net.wifi.aware.PublishDiscoverySession);
+    method public void onServiceDiscovered(android.net.wifi.aware.PeerHandle, byte[], java.util.List<byte[]>);
+    method public void onServiceDiscoveredWithinRange(android.net.wifi.aware.PeerHandle, byte[], java.util.List<byte[]>, int);
+    method public void onServiceLost(@NonNull android.net.wifi.aware.PeerHandle, int);
+    method public void onSessionConfigFailed();
+    method public void onSessionConfigUpdated();
+    method public void onSessionTerminated();
+    method public void onSubscribeStarted(@NonNull android.net.wifi.aware.SubscribeDiscoverySession);
+  }
+
+  public class IdentityChangedListener {
+    ctor public IdentityChangedListener();
+    method public void onIdentityChanged(byte[]);
+  }
+
+  public final class ParcelablePeerHandle extends android.net.wifi.aware.PeerHandle implements android.os.Parcelable {
+    ctor public ParcelablePeerHandle(@NonNull android.net.wifi.aware.PeerHandle);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.ParcelablePeerHandle> CREATOR;
+  }
+
+  public class PeerHandle {
+  }
+
+  public final class PublishConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.PublishConfig> CREATOR;
+    field public static final int PUBLISH_TYPE_SOLICITED = 1; // 0x1
+    field public static final int PUBLISH_TYPE_UNSOLICITED = 0; // 0x0
+  }
+
+  public static final class PublishConfig.Builder {
+    ctor public PublishConfig.Builder();
+    method public android.net.wifi.aware.PublishConfig build();
+    method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(@Nullable java.util.List<byte[]>);
+    method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int);
+    method public android.net.wifi.aware.PublishConfig.Builder setRangingEnabled(boolean);
+    method public android.net.wifi.aware.PublishConfig.Builder setServiceName(@NonNull String);
+    method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(@Nullable byte[]);
+    method public android.net.wifi.aware.PublishConfig.Builder setTerminateNotificationEnabled(boolean);
+    method public android.net.wifi.aware.PublishConfig.Builder setTtlSec(int);
+  }
+
+  public class PublishDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+    method public void updatePublish(@NonNull android.net.wifi.aware.PublishConfig);
+  }
+
+  public final class SubscribeConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.SubscribeConfig> CREATOR;
+    field public static final int SUBSCRIBE_TYPE_ACTIVE = 1; // 0x1
+    field public static final int SUBSCRIBE_TYPE_PASSIVE = 0; // 0x0
+  }
+
+  public static final class SubscribeConfig.Builder {
+    ctor public SubscribeConfig.Builder();
+    method public android.net.wifi.aware.SubscribeConfig build();
+    method public android.net.wifi.aware.SubscribeConfig.Builder setMatchFilter(@Nullable java.util.List<byte[]>);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setMaxDistanceMm(int);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setMinDistanceMm(int);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(@NonNull String);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(@Nullable byte[]);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int);
+  }
+
+  public class SubscribeDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+    method public void updateSubscribe(@NonNull android.net.wifi.aware.SubscribeConfig);
+  }
+
+  public class WifiAwareManager {
+    method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @Nullable android.os.Handler);
+    method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @NonNull android.net.wifi.aware.IdentityChangedListener, @Nullable android.os.Handler);
+    method @Nullable public android.net.wifi.aware.AwareResources getAvailableAwareResources();
+    method @Nullable public android.net.wifi.aware.Characteristics getCharacteristics();
+    method public boolean isAvailable();
+    method public boolean isDeviceAttached();
+    method public boolean isInstantCommunicationModeEnabled();
+    field public static final String ACTION_WIFI_AWARE_STATE_CHANGED = "android.net.wifi.aware.action.WIFI_AWARE_STATE_CHANGED";
+    field public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0; // 0x0
+    field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
+    field public static final int WIFI_AWARE_DISCOVERY_LOST_REASON_PEER_NOT_VISIBLE = 1; // 0x1
+    field public static final int WIFI_AWARE_DISCOVERY_LOST_REASON_UNKNOWN = 0; // 0x0
+  }
+
+  public final class WifiAwareNetworkInfo implements android.os.Parcelable android.net.TransportInfo {
+    method public int describeContents();
+    method @Nullable public java.net.Inet6Address getPeerIpv6Addr();
+    method public int getPort();
+    method public int getTransportProtocol();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.WifiAwareNetworkInfo> CREATOR;
+  }
+
+  public final class WifiAwareNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.WifiAwareNetworkSpecifier> CREATOR;
+  }
+
+  public static final class WifiAwareNetworkSpecifier.Builder {
+    ctor public WifiAwareNetworkSpecifier.Builder(@NonNull android.net.wifi.aware.DiscoverySession, @NonNull android.net.wifi.aware.PeerHandle);
+    ctor public WifiAwareNetworkSpecifier.Builder(@NonNull android.net.wifi.aware.PublishDiscoverySession);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier build();
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setPmk(@NonNull byte[]);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setPort(@IntRange(from=0, to=65535) int);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setPskPassphrase(@NonNull String);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setTransportProtocol(@IntRange(from=0, to=255) int);
+  }
+
+  public class WifiAwareSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierOpen(int, @NonNull byte[]);
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(int, @NonNull byte[], @NonNull String);
+    method public void publish(@NonNull android.net.wifi.aware.PublishConfig, @NonNull android.net.wifi.aware.DiscoverySessionCallback, @Nullable android.os.Handler);
+    method public void subscribe(@NonNull android.net.wifi.aware.SubscribeConfig, @NonNull android.net.wifi.aware.DiscoverySessionCallback, @Nullable android.os.Handler);
+  }
+
+}
+
+package android.net.wifi.hotspot2 {
+
+  public final class ConfigParser {
+    method public static android.net.wifi.hotspot2.PasspointConfiguration parsePasspointConfig(String, byte[]);
+  }
+
+  public final class PasspointConfiguration implements android.os.Parcelable {
+    ctor public PasspointConfiguration();
+    ctor public PasspointConfiguration(android.net.wifi.hotspot2.PasspointConfiguration);
+    method public int describeContents();
+    method public android.net.wifi.hotspot2.pps.Credential getCredential();
+    method @Nullable public String getDecoratedIdentityPrefix();
+    method public android.net.wifi.hotspot2.pps.HomeSp getHomeSp();
+    method public long getSubscriptionExpirationTimeMillis();
+    method @NonNull public String getUniqueId();
+    method public boolean isOsuProvisioned();
+    method public void setCredential(android.net.wifi.hotspot2.pps.Credential);
+    method public void setDecoratedIdentityPrefix(@Nullable String);
+    method public void setHomeSp(android.net.wifi.hotspot2.pps.HomeSp);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.PasspointConfiguration> CREATOR;
+  }
+
+}
+
+package android.net.wifi.hotspot2.omadm {
+
+  public final class PpsMoParser {
+    method public static android.net.wifi.hotspot2.PasspointConfiguration parseMoText(String);
+  }
+
+}
+
+package android.net.wifi.hotspot2.pps {
+
+  public final class Credential implements android.os.Parcelable {
+    ctor public Credential();
+    ctor public Credential(android.net.wifi.hotspot2.pps.Credential);
+    method public int describeContents();
+    method public java.security.cert.X509Certificate getCaCertificate();
+    method public android.net.wifi.hotspot2.pps.Credential.CertificateCredential getCertCredential();
+    method public java.security.cert.X509Certificate[] getClientCertificateChain();
+    method public java.security.PrivateKey getClientPrivateKey();
+    method public String getRealm();
+    method public android.net.wifi.hotspot2.pps.Credential.SimCredential getSimCredential();
+    method public android.net.wifi.hotspot2.pps.Credential.UserCredential getUserCredential();
+    method public void setCaCertificate(java.security.cert.X509Certificate);
+    method public void setCertCredential(android.net.wifi.hotspot2.pps.Credential.CertificateCredential);
+    method public void setClientCertificateChain(java.security.cert.X509Certificate[]);
+    method public void setClientPrivateKey(java.security.PrivateKey);
+    method public void setRealm(String);
+    method public void setSimCredential(android.net.wifi.hotspot2.pps.Credential.SimCredential);
+    method public void setUserCredential(android.net.wifi.hotspot2.pps.Credential.UserCredential);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential> CREATOR;
+  }
+
+  public static final class Credential.CertificateCredential implements android.os.Parcelable {
+    ctor public Credential.CertificateCredential();
+    ctor public Credential.CertificateCredential(android.net.wifi.hotspot2.pps.Credential.CertificateCredential);
+    method public int describeContents();
+    method public byte[] getCertSha256Fingerprint();
+    method public String getCertType();
+    method public void setCertSha256Fingerprint(byte[]);
+    method public void setCertType(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.CertificateCredential> CREATOR;
+  }
+
+  public static final class Credential.SimCredential implements android.os.Parcelable {
+    ctor public Credential.SimCredential();
+    ctor public Credential.SimCredential(android.net.wifi.hotspot2.pps.Credential.SimCredential);
+    method public int describeContents();
+    method public int getEapType();
+    method public String getImsi();
+    method public void setEapType(int);
+    method public void setImsi(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.SimCredential> CREATOR;
+  }
+
+  public static final class Credential.UserCredential implements android.os.Parcelable {
+    ctor public Credential.UserCredential();
+    ctor public Credential.UserCredential(android.net.wifi.hotspot2.pps.Credential.UserCredential);
+    method public int describeContents();
+    method public int getEapType();
+    method public String getNonEapInnerMethod();
+    method public String getPassword();
+    method public String getUsername();
+    method public void setEapType(int);
+    method public void setNonEapInnerMethod(String);
+    method public void setPassword(String);
+    method public void setUsername(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.UserCredential> CREATOR;
+  }
+
+  public final class HomeSp implements android.os.Parcelable {
+    ctor public HomeSp();
+    ctor public HomeSp(android.net.wifi.hotspot2.pps.HomeSp);
+    method public int describeContents();
+    method public String getFqdn();
+    method public String getFriendlyName();
+    method @Nullable public long[] getMatchAllOis();
+    method @Nullable public long[] getMatchAnyOis();
+    method @NonNull public java.util.Collection<java.lang.String> getOtherHomePartnersList();
+    method public long[] getRoamingConsortiumOis();
+    method public void setFqdn(String);
+    method public void setFriendlyName(String);
+    method public void setMatchAllOis(@Nullable long[]);
+    method public void setMatchAnyOis(@Nullable long[]);
+    method public void setOtherHomePartnersList(@NonNull java.util.Collection<java.lang.String>);
+    method public void setRoamingConsortiumOis(long[]);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.HomeSp> CREATOR;
+  }
+
+}
+
+package android.net.wifi.p2p {
+
+  public class WifiP2pConfig implements android.os.Parcelable {
+    ctor public WifiP2pConfig();
+    ctor public WifiP2pConfig(android.net.wifi.p2p.WifiP2pConfig);
+    method public int describeContents();
+    method public int getGroupOwnerBand();
+    method public int getNetworkId();
+    method @Nullable public String getNetworkName();
+    method @Nullable public String getPassphrase();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pConfig> CREATOR;
+    field public static final int GROUP_OWNER_BAND_2GHZ = 1; // 0x1
+    field public static final int GROUP_OWNER_BAND_5GHZ = 2; // 0x2
+    field public static final int GROUP_OWNER_BAND_AUTO = 0; // 0x0
+    field public static final int GROUP_OWNER_INTENT_AUTO = -1; // 0xffffffff
+    field public static final int GROUP_OWNER_INTENT_MAX = 15; // 0xf
+    field public static final int GROUP_OWNER_INTENT_MIN = 0; // 0x0
+    field public String deviceAddress;
+    field @IntRange(from=0, to=15) public int groupOwnerIntent;
+    field public android.net.wifi.WpsInfo wps;
+  }
+
+  public static final class WifiP2pConfig.Builder {
+    ctor public WifiP2pConfig.Builder();
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig build();
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder enablePersistentMode(boolean);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setDeviceAddress(@Nullable android.net.MacAddress);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setGroupOperatingBand(int);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setGroupOperatingFrequency(int);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setNetworkName(@NonNull String);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setPassphrase(@NonNull String);
+  }
+
+  public class WifiP2pDevice implements android.os.Parcelable {
+    ctor public WifiP2pDevice();
+    ctor public WifiP2pDevice(android.net.wifi.p2p.WifiP2pDevice);
+    method public int describeContents();
+    method @Nullable public android.net.wifi.p2p.WifiP2pWfdInfo getWfdInfo();
+    method public boolean isGroupOwner();
+    method public boolean isServiceDiscoveryCapable();
+    method public void update(@NonNull android.net.wifi.p2p.WifiP2pDevice);
+    method public boolean wpsDisplaySupported();
+    method public boolean wpsKeypadSupported();
+    method public boolean wpsPbcSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AVAILABLE = 3; // 0x3
+    field public static final int CONNECTED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pDevice> CREATOR;
+    field public static final int FAILED = 2; // 0x2
+    field public static final int INVITED = 1; // 0x1
+    field public static final int UNAVAILABLE = 4; // 0x4
+    field public String deviceAddress;
+    field public String deviceName;
+    field public String primaryDeviceType;
+    field public String secondaryDeviceType;
+    field public int status;
+  }
+
+  public class WifiP2pDeviceList implements android.os.Parcelable {
+    ctor public WifiP2pDeviceList();
+    ctor public WifiP2pDeviceList(android.net.wifi.p2p.WifiP2pDeviceList);
+    method public int describeContents();
+    method public android.net.wifi.p2p.WifiP2pDevice get(String);
+    method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getDeviceList();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pDeviceList> CREATOR;
+  }
+
+  public class WifiP2pGroup implements android.os.Parcelable {
+    ctor public WifiP2pGroup();
+    ctor public WifiP2pGroup(android.net.wifi.p2p.WifiP2pGroup);
+    method public int describeContents();
+    method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getClientList();
+    method public int getFrequency();
+    method public String getInterface();
+    method public int getNetworkId();
+    method public String getNetworkName();
+    method public android.net.wifi.p2p.WifiP2pDevice getOwner();
+    method public String getPassphrase();
+    method public boolean isGroupOwner();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroup> CREATOR;
+    field public static final int NETWORK_ID_PERSISTENT = -2; // 0xfffffffe
+    field public static final int NETWORK_ID_TEMPORARY = -1; // 0xffffffff
+  }
+
+  public class WifiP2pInfo implements android.os.Parcelable {
+    ctor public WifiP2pInfo();
+    ctor public WifiP2pInfo(android.net.wifi.p2p.WifiP2pInfo);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pInfo> CREATOR;
+    field public boolean groupFormed;
+    field public java.net.InetAddress groupOwnerAddress;
+    field public boolean isGroupOwner;
+  }
+
+  public class WifiP2pManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void addLocalService(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void addServiceRequest(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceRequest, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void cancelConnect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void clearLocalServices(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void clearServiceRequests(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void connect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pConfig, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void createGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void createGroup(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pConfig, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void discoverPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void discoverServices(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public android.net.wifi.p2p.WifiP2pManager.Channel initialize(android.content.Context, android.os.Looper, android.net.wifi.p2p.WifiP2pManager.ChannelListener);
+    method public void removeGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void removeLocalService(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void removeServiceRequest(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceRequest, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void requestConnectionInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestDeviceInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.DeviceInfoListener);
+    method public void requestDiscoveryState(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.DiscoveryStateListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestGroupInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.GroupInfoListener);
+    method public void requestNetworkInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.NetworkInfoListener);
+    method public void requestP2pState(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.P2pStateListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.PeerListListener);
+    method public void setDnsSdResponseListeners(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.DnsSdServiceResponseListener, android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener);
+    method public void setServiceResponseListener(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ServiceResponseListener);
+    method public void setUpnpServiceResponseListener(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.UpnpServiceResponseListener);
+    method public void stopPeerDiscovery(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    field public static final int BUSY = 2; // 0x2
+    field public static final int ERROR = 0; // 0x0
+    field public static final String EXTRA_DISCOVERY_STATE = "discoveryState";
+    field public static final String EXTRA_NETWORK_INFO = "networkInfo";
+    field public static final String EXTRA_P2P_DEVICE_LIST = "wifiP2pDeviceList";
+    field public static final String EXTRA_WIFI_P2P_DEVICE = "wifiP2pDevice";
+    field public static final String EXTRA_WIFI_P2P_GROUP = "p2pGroupInfo";
+    field public static final String EXTRA_WIFI_P2P_INFO = "wifiP2pInfo";
+    field public static final String EXTRA_WIFI_STATE = "wifi_p2p_state";
+    field public static final int NO_SERVICE_REQUESTS = 3; // 0x3
+    field public static final int P2P_UNSUPPORTED = 1; // 0x1
+    field public static final String WIFI_P2P_CONNECTION_CHANGED_ACTION = "android.net.wifi.p2p.CONNECTION_STATE_CHANGE";
+    field public static final String WIFI_P2P_DISCOVERY_CHANGED_ACTION = "android.net.wifi.p2p.DISCOVERY_STATE_CHANGE";
+    field public static final int WIFI_P2P_DISCOVERY_STARTED = 2; // 0x2
+    field public static final int WIFI_P2P_DISCOVERY_STOPPED = 1; // 0x1
+    field public static final String WIFI_P2P_PEERS_CHANGED_ACTION = "android.net.wifi.p2p.PEERS_CHANGED";
+    field public static final String WIFI_P2P_STATE_CHANGED_ACTION = "android.net.wifi.p2p.STATE_CHANGED";
+    field public static final int WIFI_P2P_STATE_DISABLED = 1; // 0x1
+    field public static final int WIFI_P2P_STATE_ENABLED = 2; // 0x2
+    field public static final String WIFI_P2P_THIS_DEVICE_CHANGED_ACTION = "android.net.wifi.p2p.THIS_DEVICE_CHANGED";
+  }
+
+  public static interface WifiP2pManager.ActionListener {
+    method public void onFailure(int);
+    method public void onSuccess();
+  }
+
+  public static class WifiP2pManager.Channel implements java.lang.AutoCloseable {
+    method public void close();
+  }
+
+  public static interface WifiP2pManager.ChannelListener {
+    method public void onChannelDisconnected();
+  }
+
+  public static interface WifiP2pManager.ConnectionInfoListener {
+    method public void onConnectionInfoAvailable(android.net.wifi.p2p.WifiP2pInfo);
+  }
+
+  public static interface WifiP2pManager.DeviceInfoListener {
+    method public void onDeviceInfoAvailable(@Nullable android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.DiscoveryStateListener {
+    method public void onDiscoveryStateAvailable(int);
+  }
+
+  public static interface WifiP2pManager.DnsSdServiceResponseListener {
+    method public void onDnsSdServiceAvailable(String, String, android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.DnsSdTxtRecordListener {
+    method public void onDnsSdTxtRecordAvailable(String, java.util.Map<java.lang.String,java.lang.String>, android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.GroupInfoListener {
+    method public void onGroupInfoAvailable(android.net.wifi.p2p.WifiP2pGroup);
+  }
+
+  public static interface WifiP2pManager.NetworkInfoListener {
+    method public void onNetworkInfoAvailable(@NonNull android.net.NetworkInfo);
+  }
+
+  public static interface WifiP2pManager.P2pStateListener {
+    method public void onP2pStateAvailable(int);
+  }
+
+  public static interface WifiP2pManager.PeerListListener {
+    method public void onPeersAvailable(android.net.wifi.p2p.WifiP2pDeviceList);
+  }
+
+  public static interface WifiP2pManager.ServiceResponseListener {
+    method public void onServiceAvailable(int, byte[], android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.UpnpServiceResponseListener {
+    method public void onUpnpServiceAvailable(java.util.List<java.lang.String>, android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public final class WifiP2pWfdInfo implements android.os.Parcelable {
+    ctor public WifiP2pWfdInfo();
+    ctor public WifiP2pWfdInfo(@Nullable android.net.wifi.p2p.WifiP2pWfdInfo);
+    method public int describeContents();
+    method public int getControlPort();
+    method public int getDeviceInfo();
+    method public int getDeviceType();
+    method public int getMaxThroughput();
+    method public int getR2DeviceInfo();
+    method public int getR2DeviceType();
+    method public boolean isContentProtectionSupported();
+    method public boolean isCoupledSinkSupportedAtSink();
+    method public boolean isCoupledSinkSupportedAtSource();
+    method public boolean isEnabled();
+    method public boolean isR2Supported();
+    method public boolean isSessionAvailable();
+    method public void setContentProtectionSupported(boolean);
+    method public void setControlPort(@IntRange(from=0) int);
+    method public void setCoupledSinkSupportAtSink(boolean);
+    method public void setCoupledSinkSupportAtSource(boolean);
+    method public boolean setDeviceType(int);
+    method public void setEnabled(boolean);
+    method public void setMaxThroughput(@IntRange(from=0) int);
+    method public boolean setR2DeviceType(int);
+    method public void setSessionAvailable(boolean);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pWfdInfo> CREATOR;
+    field public static final int DEVICE_INFO_AUDIO_ONLY_SUPPORT_AT_SOURCE = 2048; // 0x800
+    field public static final int DEVICE_INFO_AUDIO_UNSUPPORTED_AT_PRIMARY_SINK = 1024; // 0x400
+    field public static final int DEVICE_INFO_CONTENT_PROTECTION_SUPPORT = 256; // 0x100
+    field public static final int DEVICE_INFO_COUPLED_SINK_SUPPORT_AT_SINK = 8; // 0x8
+    field public static final int DEVICE_INFO_COUPLED_SINK_SUPPORT_AT_SOURCE = 4; // 0x4
+    field public static final int DEVICE_INFO_DEVICE_TYPE_MASK = 3; // 0x3
+    field public static final int DEVICE_INFO_PREFERRED_CONNECTIVITY_MASK = 128; // 0x80
+    field public static final int DEVICE_INFO_SESSION_AVAILABLE_MASK = 48; // 0x30
+    field public static final int DEVICE_INFO_TDLS_PERSISTENT_GROUP = 4096; // 0x1000
+    field public static final int DEVICE_INFO_TDLS_PERSISTENT_GROUP_REINVOKE = 8192; // 0x2000
+    field public static final int DEVICE_INFO_TIME_SYNCHRONIZATION_SUPPORT = 512; // 0x200
+    field public static final int DEVICE_INFO_WFD_SERVICE_DISCOVERY_SUPPORT = 64; // 0x40
+    field public static final int DEVICE_TYPE_PRIMARY_SINK = 1; // 0x1
+    field public static final int DEVICE_TYPE_SECONDARY_SINK = 2; // 0x2
+    field public static final int DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK = 3; // 0x3
+    field public static final int DEVICE_TYPE_WFD_SOURCE = 0; // 0x0
+    field public static final int PREFERRED_CONNECTIVITY_P2P = 0; // 0x0
+    field public static final int PREFERRED_CONNECTIVITY_TDLS = 1; // 0x1
+  }
+
+}
+
+package android.net.wifi.p2p.nsd {
+
+  public class WifiP2pDnsSdServiceInfo extends android.net.wifi.p2p.nsd.WifiP2pServiceInfo {
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo newInstance(String, String, java.util.Map<java.lang.String,java.lang.String>);
+  }
+
+  public class WifiP2pDnsSdServiceRequest extends android.net.wifi.p2p.nsd.WifiP2pServiceRequest {
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance();
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance(String);
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance(String, String);
+  }
+
+  public class WifiP2pServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int SERVICE_TYPE_ALL = 0; // 0x0
+    field public static final int SERVICE_TYPE_BONJOUR = 1; // 0x1
+    field public static final int SERVICE_TYPE_UPNP = 2; // 0x2
+    field public static final int SERVICE_TYPE_VENDOR_SPECIFIC = 255; // 0xff
+  }
+
+  public class WifiP2pServiceRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.net.wifi.p2p.nsd.WifiP2pServiceRequest newInstance(int, String);
+    method public static android.net.wifi.p2p.nsd.WifiP2pServiceRequest newInstance(int);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class WifiP2pUpnpServiceInfo extends android.net.wifi.p2p.nsd.WifiP2pServiceInfo {
+    method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo newInstance(String, String, java.util.List<java.lang.String>);
+  }
+
+  public class WifiP2pUpnpServiceRequest extends android.net.wifi.p2p.nsd.WifiP2pServiceRequest {
+    method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest newInstance();
+    method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest newInstance(String);
+  }
+
+}
+
+package android.net.wifi.rtt {
+
+  public class CivicLocationKeys {
+    field public static final int ADDITIONAL_CODE = 32; // 0x20
+    field public static final int APT = 26; // 0x1a
+    field public static final int BOROUGH = 4; // 0x4
+    field public static final int BRANCH_ROAD_NAME = 36; // 0x24
+    field public static final int BUILDING = 25; // 0x19
+    field public static final int CITY = 3; // 0x3
+    field public static final int COUNTY = 2; // 0x2
+    field public static final int DESK = 33; // 0x21
+    field public static final int FLOOR = 27; // 0x1b
+    field public static final int GROUP_OF_STREETS = 6; // 0x6
+    field public static final int HNO = 19; // 0x13
+    field public static final int HNS = 20; // 0x14
+    field public static final int LANGUAGE = 0; // 0x0
+    field public static final int LMK = 21; // 0x15
+    field public static final int LOC = 22; // 0x16
+    field public static final int NAM = 23; // 0x17
+    field public static final int NEIGHBORHOOD = 5; // 0x5
+    field public static final int PCN = 30; // 0x1e
+    field public static final int POD = 17; // 0x11
+    field public static final int POSTAL_CODE = 24; // 0x18
+    field public static final int PO_BOX = 31; // 0x1f
+    field public static final int PRD = 16; // 0x10
+    field public static final int PRIMARY_ROAD_NAME = 34; // 0x22
+    field public static final int ROAD_SECTION = 35; // 0x23
+    field public static final int ROOM = 28; // 0x1c
+    field public static final int SCRIPT = 128; // 0x80
+    field public static final int STATE = 1; // 0x1
+    field public static final int STREET_NAME_POST_MODIFIER = 39; // 0x27
+    field public static final int STREET_NAME_PRE_MODIFIER = 38; // 0x26
+    field public static final int STS = 18; // 0x12
+    field public static final int SUBBRANCH_ROAD_NAME = 37; // 0x25
+    field public static final int TYPE_OF_PLACE = 29; // 0x1d
+  }
+
+  public final class RangingRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public static int getDefaultRttBurstSize();
+    method public static int getMaxPeers();
+    method public static int getMaxRttBurstSize();
+    method public static int getMinRttBurstSize();
+    method public int getRttBurstSize();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingRequest> CREATOR;
+  }
+
+  public static final class RangingRequest.Builder {
+    ctor public RangingRequest.Builder();
+    method public android.net.wifi.rtt.RangingRequest.Builder addAccessPoint(@NonNull android.net.wifi.ScanResult);
+    method public android.net.wifi.rtt.RangingRequest.Builder addAccessPoints(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method @NonNull public android.net.wifi.rtt.RangingRequest.Builder addNon80211mcCapableAccessPoint(@NonNull android.net.wifi.ScanResult);
+    method @NonNull public android.net.wifi.rtt.RangingRequest.Builder addNon80211mcCapableAccessPoints(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.MacAddress);
+    method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.wifi.aware.PeerHandle);
+    method public android.net.wifi.rtt.RangingRequest build();
+    method @NonNull public android.net.wifi.rtt.RangingRequest.Builder setRttBurstSize(int);
+  }
+
+  public final class RangingResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDistanceMm();
+    method public int getDistanceStdDevMm();
+    method @Nullable public android.net.MacAddress getMacAddress();
+    method public int getNumAttemptedMeasurements();
+    method public int getNumSuccessfulMeasurements();
+    method @Nullable public android.net.wifi.aware.PeerHandle getPeerHandle();
+    method public long getRangingTimestampMillis();
+    method public int getRssi();
+    method public int getStatus();
+    method @Nullable public android.net.wifi.rtt.ResponderLocation getUnverifiedResponderLocation();
+    method public boolean is80211mcMeasurement();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingResult> CREATOR;
+    field public static final int STATUS_FAIL = 1; // 0x1
+    field public static final int STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC = 2; // 0x2
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public abstract class RangingResultCallback {
+    ctor public RangingResultCallback();
+    method public abstract void onRangingFailure(int);
+    method public abstract void onRangingResults(@NonNull java.util.List<android.net.wifi.rtt.RangingResult>);
+    field public static final int STATUS_CODE_FAIL = 1; // 0x1
+    field public static final int STATUS_CODE_FAIL_RTT_NOT_AVAILABLE = 2; // 0x2
+  }
+
+  public final class ResponderLocation implements android.os.Parcelable {
+    method public int describeContents();
+    method public double getAltitude();
+    method public int getAltitudeType();
+    method public double getAltitudeUncertainty();
+    method public java.util.List<android.net.MacAddress> getColocatedBssids();
+    method public int getDatum();
+    method public int getExpectedToMove();
+    method public double getFloorNumber();
+    method public double getHeightAboveFloorMeters();
+    method public double getHeightAboveFloorUncertaintyMeters();
+    method public double getLatitude();
+    method public double getLatitudeUncertainty();
+    method public int getLciVersion();
+    method public double getLongitude();
+    method public double getLongitudeUncertainty();
+    method @Nullable public String getMapImageMimeType();
+    method @Nullable public android.net.Uri getMapImageUri();
+    method public boolean getRegisteredLocationAgreementIndication();
+    method public boolean isLciSubelementValid();
+    method public boolean isZaxisSubelementValid();
+    method @Nullable public android.location.Address toCivicLocationAddress();
+    method @Nullable public android.util.SparseArray<java.lang.String> toCivicLocationSparseArray();
+    method @NonNull public android.location.Location toLocation();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALTITUDE_FLOORS = 2; // 0x2
+    field public static final int ALTITUDE_METERS = 1; // 0x1
+    field public static final int ALTITUDE_UNDEFINED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.ResponderLocation> CREATOR;
+    field public static final int DATUM_NAD83_MLLW = 3; // 0x3
+    field public static final int DATUM_NAD83_NAV88 = 2; // 0x2
+    field public static final int DATUM_UNDEFINED = 0; // 0x0
+    field public static final int DATUM_WGS84 = 1; // 0x1
+    field public static final int LCI_VERSION_1 = 1; // 0x1
+    field public static final int LOCATION_FIXED = 0; // 0x0
+    field public static final int LOCATION_MOVEMENT_UNKNOWN = 2; // 0x2
+    field public static final int LOCATION_RESERVED = 3; // 0x3
+    field public static final int LOCATION_VARIABLE = 1; // 0x1
+  }
+
+  public class WifiRttManager {
+    method public boolean isAvailable();
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.ACCESS_WIFI_STATE}) public void startRanging(@NonNull android.net.wifi.rtt.RangingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.rtt.RangingResultCallback);
+    field public static final String ACTION_WIFI_RTT_STATE_CHANGED = "android.net.wifi.rtt.action.WIFI_RTT_STATE_CHANGED";
+  }
+
+}
+
+package android.nfc {
+
+  public class FormatException extends java.lang.Exception {
+    ctor public FormatException();
+    ctor public FormatException(String);
+    ctor public FormatException(String, Throwable);
+  }
+
+  public final class NdefMessage implements android.os.Parcelable {
+    ctor public NdefMessage(byte[]) throws android.nfc.FormatException;
+    ctor public NdefMessage(android.nfc.NdefRecord, android.nfc.NdefRecord...);
+    ctor public NdefMessage(android.nfc.NdefRecord[]);
+    method public int describeContents();
+    method public int getByteArrayLength();
+    method public android.nfc.NdefRecord[] getRecords();
+    method public byte[] toByteArray();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.nfc.NdefMessage> CREATOR;
+  }
+
+  public final class NdefRecord implements android.os.Parcelable {
+    ctor public NdefRecord(short, byte[], byte[], byte[]);
+    ctor @Deprecated public NdefRecord(byte[]) throws android.nfc.FormatException;
+    method public static android.nfc.NdefRecord createApplicationRecord(String);
+    method public static android.nfc.NdefRecord createExternal(String, String, byte[]);
+    method public static android.nfc.NdefRecord createMime(String, byte[]);
+    method public static android.nfc.NdefRecord createTextRecord(String, String);
+    method public static android.nfc.NdefRecord createUri(android.net.Uri);
+    method public static android.nfc.NdefRecord createUri(String);
+    method public int describeContents();
+    method public byte[] getId();
+    method public byte[] getPayload();
+    method public short getTnf();
+    method public byte[] getType();
+    method @Deprecated public byte[] toByteArray();
+    method public String toMimeType();
+    method public android.net.Uri toUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.nfc.NdefRecord> CREATOR;
+    field public static final byte[] RTD_ALTERNATIVE_CARRIER;
+    field public static final byte[] RTD_HANDOVER_CARRIER;
+    field public static final byte[] RTD_HANDOVER_REQUEST;
+    field public static final byte[] RTD_HANDOVER_SELECT;
+    field public static final byte[] RTD_SMART_POSTER;
+    field public static final byte[] RTD_TEXT;
+    field public static final byte[] RTD_URI;
+    field public static final short TNF_ABSOLUTE_URI = 3; // 0x3
+    field public static final short TNF_EMPTY = 0; // 0x0
+    field public static final short TNF_EXTERNAL_TYPE = 4; // 0x4
+    field public static final short TNF_MIME_MEDIA = 2; // 0x2
+    field public static final short TNF_UNCHANGED = 6; // 0x6
+    field public static final short TNF_UNKNOWN = 5; // 0x5
+    field public static final short TNF_WELL_KNOWN = 1; // 0x1
+  }
+
+  public final class NfcAdapter {
+    method public void disableForegroundDispatch(android.app.Activity);
+    method @Deprecated public void disableForegroundNdefPush(android.app.Activity);
+    method public void disableReaderMode(android.app.Activity);
+    method public void enableForegroundDispatch(android.app.Activity, android.app.PendingIntent, android.content.IntentFilter[], String[][]);
+    method @Deprecated public void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage);
+    method public void enableReaderMode(android.app.Activity, android.nfc.NfcAdapter.ReaderCallback, int, android.os.Bundle);
+    method public static android.nfc.NfcAdapter getDefaultAdapter(android.content.Context);
+    method public boolean ignore(android.nfc.Tag, int, android.nfc.NfcAdapter.OnTagRemovedListener, android.os.Handler);
+    method @Deprecated public boolean invokeBeam(android.app.Activity);
+    method public boolean isEnabled();
+    method @Deprecated public boolean isNdefPushEnabled();
+    method public boolean isSecureNfcEnabled();
+    method public boolean isSecureNfcSupported();
+    method @Deprecated public void setBeamPushUris(android.net.Uri[], android.app.Activity);
+    method @Deprecated public void setBeamPushUrisCallback(android.nfc.NfcAdapter.CreateBeamUrisCallback, android.app.Activity);
+    method @Deprecated public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, android.app.Activity...);
+    method @Deprecated public void setNdefPushMessageCallback(android.nfc.NfcAdapter.CreateNdefMessageCallback, android.app.Activity, android.app.Activity...);
+    method @Deprecated public void setOnNdefPushCompleteCallback(android.nfc.NfcAdapter.OnNdefPushCompleteCallback, android.app.Activity, android.app.Activity...);
+    field public static final String ACTION_ADAPTER_STATE_CHANGED = "android.nfc.action.ADAPTER_STATE_CHANGED";
+    field public static final String ACTION_NDEF_DISCOVERED = "android.nfc.action.NDEF_DISCOVERED";
+    field @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public static final String ACTION_PREFERRED_PAYMENT_CHANGED = "android.nfc.action.PREFERRED_PAYMENT_CHANGED";
+    field public static final String ACTION_TAG_DISCOVERED = "android.nfc.action.TAG_DISCOVERED";
+    field public static final String ACTION_TECH_DISCOVERED = "android.nfc.action.TECH_DISCOVERED";
+    field @RequiresPermission(android.Manifest.permission.NFC_TRANSACTION_EVENT) public static final String ACTION_TRANSACTION_DETECTED = "android.nfc.action.TRANSACTION_DETECTED";
+    field public static final String EXTRA_ADAPTER_STATE = "android.nfc.extra.ADAPTER_STATE";
+    field public static final String EXTRA_AID = "android.nfc.extra.AID";
+    field public static final String EXTRA_DATA = "android.nfc.extra.DATA";
+    field public static final String EXTRA_ID = "android.nfc.extra.ID";
+    field public static final String EXTRA_NDEF_MESSAGES = "android.nfc.extra.NDEF_MESSAGES";
+    field public static final String EXTRA_PREFERRED_PAYMENT_CHANGED_REASON = "android.nfc.extra.PREFERRED_PAYMENT_CHANGED_REASON";
+    field public static final String EXTRA_READER_PRESENCE_CHECK_DELAY = "presence";
+    field public static final String EXTRA_SECURE_ELEMENT_NAME = "android.nfc.extra.SECURE_ELEMENT_NAME";
+    field public static final String EXTRA_TAG = "android.nfc.extra.TAG";
+    field public static final int FLAG_READER_NFC_A = 1; // 0x1
+    field public static final int FLAG_READER_NFC_B = 2; // 0x2
+    field public static final int FLAG_READER_NFC_BARCODE = 16; // 0x10
+    field public static final int FLAG_READER_NFC_F = 4; // 0x4
+    field public static final int FLAG_READER_NFC_V = 8; // 0x8
+    field public static final int FLAG_READER_NO_PLATFORM_SOUNDS = 256; // 0x100
+    field public static final int FLAG_READER_SKIP_NDEF_CHECK = 128; // 0x80
+    field public static final int PREFERRED_PAYMENT_CHANGED = 2; // 0x2
+    field public static final int PREFERRED_PAYMENT_LOADED = 1; // 0x1
+    field public static final int PREFERRED_PAYMENT_UPDATED = 3; // 0x3
+    field public static final int STATE_OFF = 1; // 0x1
+    field public static final int STATE_ON = 3; // 0x3
+    field public static final int STATE_TURNING_OFF = 4; // 0x4
+    field public static final int STATE_TURNING_ON = 2; // 0x2
+  }
+
+  @Deprecated public static interface NfcAdapter.CreateBeamUrisCallback {
+    method @Deprecated public android.net.Uri[] createBeamUris(android.nfc.NfcEvent);
+  }
+
+  @Deprecated public static interface NfcAdapter.CreateNdefMessageCallback {
+    method @Deprecated public android.nfc.NdefMessage createNdefMessage(android.nfc.NfcEvent);
+  }
+
+  @Deprecated public static interface NfcAdapter.OnNdefPushCompleteCallback {
+    method @Deprecated public void onNdefPushComplete(android.nfc.NfcEvent);
+  }
+
+  public static interface NfcAdapter.OnTagRemovedListener {
+    method public void onTagRemoved();
+  }
+
+  public static interface NfcAdapter.ReaderCallback {
+    method public void onTagDiscovered(android.nfc.Tag);
+  }
+
+  public final class NfcEvent {
+    field public final android.nfc.NfcAdapter nfcAdapter;
+    field public final int peerLlcpMajorVersion;
+    field public final int peerLlcpMinorVersion;
+  }
+
+  public final class NfcManager {
+    method public android.nfc.NfcAdapter getDefaultAdapter();
+  }
+
+  public final class Tag implements android.os.Parcelable {
+    method public int describeContents();
+    method public byte[] getId();
+    method public String[] getTechList();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.nfc.Tag> CREATOR;
+  }
+
+  public class TagLostException extends java.io.IOException {
+    ctor public TagLostException();
+    ctor public TagLostException(String);
+  }
+
+}
+
+package android.nfc.cardemulation {
+
+  public final class CardEmulation {
+    method public boolean categoryAllowsForegroundPreference(String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public java.util.List<java.lang.String> getAidsForPreferredPaymentService();
+    method public java.util.List<java.lang.String> getAidsForService(android.content.ComponentName, String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public CharSequence getDescriptionForPreferredPaymentService();
+    method public static android.nfc.cardemulation.CardEmulation getInstance(android.nfc.NfcAdapter);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NFC_PREFERRED_PAYMENT_INFO) public String getRouteDestinationForPreferredPaymentService();
+    method public int getSelectionModeForCategory(String);
+    method public boolean isDefaultServiceForAid(android.content.ComponentName, String);
+    method public boolean isDefaultServiceForCategory(android.content.ComponentName, String);
+    method public boolean registerAidsForService(android.content.ComponentName, String, java.util.List<java.lang.String>);
+    method public boolean removeAidsForService(android.content.ComponentName, String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NFC) public boolean setOffHostForService(@NonNull android.content.ComponentName, @NonNull String);
+    method public boolean setPreferredService(android.app.Activity, android.content.ComponentName);
+    method public boolean supportsAidPrefixRegistration();
+    method @NonNull @RequiresPermission(android.Manifest.permission.NFC) public boolean unsetOffHostForService(@NonNull android.content.ComponentName);
+    method public boolean unsetPreferredService(android.app.Activity);
+    field public static final String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT";
+    field public static final String CATEGORY_OTHER = "other";
+    field public static final String CATEGORY_PAYMENT = "payment";
+    field public static final String EXTRA_CATEGORY = "category";
+    field public static final String EXTRA_SERVICE_COMPONENT = "component";
+    field public static final int SELECTION_MODE_ALWAYS_ASK = 1; // 0x1
+    field public static final int SELECTION_MODE_ASK_IF_CONFLICT = 2; // 0x2
+    field public static final int SELECTION_MODE_PREFER_DEFAULT = 0; // 0x0
+  }
+
+  public abstract class HostApduService extends android.app.Service {
+    ctor public HostApduService();
+    method public final void notifyUnhandled();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onDeactivated(int);
+    method public abstract byte[] processCommandApdu(byte[], android.os.Bundle);
+    method public final void sendResponseApdu(byte[]);
+    field public static final int DEACTIVATION_DESELECTED = 1; // 0x1
+    field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0
+    field public static final String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_APDU_SERVICE";
+    field public static final String SERVICE_META_DATA = "android.nfc.cardemulation.host_apdu_service";
+  }
+
+  public abstract class HostNfcFService extends android.app.Service {
+    ctor public HostNfcFService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onDeactivated(int);
+    method public abstract byte[] processNfcFPacket(byte[], android.os.Bundle);
+    method public final void sendResponsePacket(byte[]);
+    field public static final int DEACTIVATION_LINK_LOSS = 0; // 0x0
+    field public static final String SERVICE_INTERFACE = "android.nfc.cardemulation.action.HOST_NFCF_SERVICE";
+    field public static final String SERVICE_META_DATA = "android.nfc.cardemulation.host_nfcf_service";
+  }
+
+  public final class NfcFCardEmulation {
+    method public boolean disableService(android.app.Activity) throws java.lang.RuntimeException;
+    method public boolean enableService(android.app.Activity, android.content.ComponentName) throws java.lang.RuntimeException;
+    method public static android.nfc.cardemulation.NfcFCardEmulation getInstance(android.nfc.NfcAdapter);
+    method public String getNfcid2ForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public String getSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
+    method public boolean registerSystemCodeForService(android.content.ComponentName, String) throws java.lang.RuntimeException;
+    method public boolean setNfcid2ForService(android.content.ComponentName, String) throws java.lang.RuntimeException;
+    method public boolean unregisterSystemCodeForService(android.content.ComponentName) throws java.lang.RuntimeException;
+  }
+
+  public abstract class OffHostApduService extends android.app.Service {
+    ctor public OffHostApduService();
+    field public static final String SERVICE_INTERFACE = "android.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE";
+    field public static final String SERVICE_META_DATA = "android.nfc.cardemulation.off_host_apdu_service";
+  }
+
+}
+
+package android.nfc.tech {
+
+  public final class IsoDep implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.IsoDep get(android.nfc.Tag);
+    method public byte[] getHiLayerResponse();
+    method public byte[] getHistoricalBytes();
+    method public int getMaxTransceiveLength();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public boolean isConnected();
+    method public boolean isExtendedLengthApduSupported();
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class MifareClassic implements android.nfc.tech.TagTechnology {
+    method public boolean authenticateSectorWithKeyA(int, byte[]) throws java.io.IOException;
+    method public boolean authenticateSectorWithKeyB(int, byte[]) throws java.io.IOException;
+    method public int blockToSector(int);
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public void decrement(int, int) throws java.io.IOException;
+    method public static android.nfc.tech.MifareClassic get(android.nfc.Tag);
+    method public int getBlockCount();
+    method public int getBlockCountInSector(int);
+    method public int getMaxTransceiveLength();
+    method public int getSectorCount();
+    method public int getSize();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public int getType();
+    method public void increment(int, int) throws java.io.IOException;
+    method public boolean isConnected();
+    method public byte[] readBlock(int) throws java.io.IOException;
+    method public void restore(int) throws java.io.IOException;
+    method public int sectorToBlock(int);
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+    method public void transfer(int) throws java.io.IOException;
+    method public void writeBlock(int, byte[]) throws java.io.IOException;
+    field public static final int BLOCK_SIZE = 16; // 0x10
+    field public static final byte[] KEY_DEFAULT;
+    field public static final byte[] KEY_MIFARE_APPLICATION_DIRECTORY;
+    field public static final byte[] KEY_NFC_FORUM;
+    field public static final int SIZE_1K = 1024; // 0x400
+    field public static final int SIZE_2K = 2048; // 0x800
+    field public static final int SIZE_4K = 4096; // 0x1000
+    field public static final int SIZE_MINI = 320; // 0x140
+    field public static final int TYPE_CLASSIC = 0; // 0x0
+    field public static final int TYPE_PLUS = 1; // 0x1
+    field public static final int TYPE_PRO = 2; // 0x2
+    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class MifareUltralight implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.MifareUltralight get(android.nfc.Tag);
+    method public int getMaxTransceiveLength();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public int getType();
+    method public boolean isConnected();
+    method public byte[] readPages(int) throws java.io.IOException;
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+    method public void writePage(int, byte[]) throws java.io.IOException;
+    field public static final int PAGE_SIZE = 4; // 0x4
+    field public static final int TYPE_ULTRALIGHT = 1; // 0x1
+    field public static final int TYPE_ULTRALIGHT_C = 2; // 0x2
+    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class Ndef implements android.nfc.tech.TagTechnology {
+    method public boolean canMakeReadOnly();
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.Ndef get(android.nfc.Tag);
+    method public android.nfc.NdefMessage getCachedNdefMessage();
+    method public int getMaxSize();
+    method public android.nfc.NdefMessage getNdefMessage() throws android.nfc.FormatException, java.io.IOException;
+    method public android.nfc.Tag getTag();
+    method public String getType();
+    method public boolean isConnected();
+    method public boolean isWritable();
+    method public boolean makeReadOnly() throws java.io.IOException;
+    method public void writeNdefMessage(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException;
+    field public static final String MIFARE_CLASSIC = "com.nxp.ndef.mifareclassic";
+    field public static final String NFC_FORUM_TYPE_1 = "org.nfcforum.ndef.type1";
+    field public static final String NFC_FORUM_TYPE_2 = "org.nfcforum.ndef.type2";
+    field public static final String NFC_FORUM_TYPE_3 = "org.nfcforum.ndef.type3";
+    field public static final String NFC_FORUM_TYPE_4 = "org.nfcforum.ndef.type4";
+  }
+
+  public final class NdefFormatable implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public void format(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException;
+    method public void formatReadOnly(android.nfc.NdefMessage) throws android.nfc.FormatException, java.io.IOException;
+    method public static android.nfc.tech.NdefFormatable get(android.nfc.Tag);
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+  }
+
+  public final class NfcA implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcA get(android.nfc.Tag);
+    method public byte[] getAtqa();
+    method public int getMaxTransceiveLength();
+    method public short getSak();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public boolean isConnected();
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class NfcB implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcB get(android.nfc.Tag);
+    method public byte[] getApplicationData();
+    method public int getMaxTransceiveLength();
+    method public byte[] getProtocolInfo();
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class NfcBarcode implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcBarcode get(android.nfc.Tag);
+    method public byte[] getBarcode();
+    method public android.nfc.Tag getTag();
+    method public int getType();
+    method public boolean isConnected();
+    field public static final int TYPE_KOVIO = 1; // 0x1
+    field public static final int TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class NfcF implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcF get(android.nfc.Tag);
+    method public byte[] getManufacturer();
+    method public int getMaxTransceiveLength();
+    method public byte[] getSystemCode();
+    method public android.nfc.Tag getTag();
+    method public int getTimeout();
+    method public boolean isConnected();
+    method public void setTimeout(int);
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public final class NfcV implements android.nfc.tech.TagTechnology {
+    method public void close() throws java.io.IOException;
+    method public void connect() throws java.io.IOException;
+    method public static android.nfc.tech.NfcV get(android.nfc.Tag);
+    method public byte getDsfId();
+    method public int getMaxTransceiveLength();
+    method public byte getResponseFlags();
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+  }
+
+  public interface TagTechnology extends java.io.Closeable {
+    method public void connect() throws java.io.IOException;
+    method public android.nfc.Tag getTag();
+    method public boolean isConnected();
+  }
+
+}
+
+package android.opengl {
+
+  public class EGL14 {
+    ctor public EGL14();
+    method public static boolean eglBindAPI(int);
+    method public static boolean eglBindTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int);
+    method public static boolean eglChooseConfig(android.opengl.EGLDisplay, int[], int, android.opengl.EGLConfig[], int, int, int[], int);
+    method public static boolean eglCopyBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface, int);
+    method public static android.opengl.EGLContext eglCreateContext(android.opengl.EGLDisplay, android.opengl.EGLConfig, android.opengl.EGLContext, int[], int);
+    method public static android.opengl.EGLSurface eglCreatePbufferFromClientBuffer(android.opengl.EGLDisplay, int, int, android.opengl.EGLConfig, int[], int);
+    method public static android.opengl.EGLSurface eglCreatePbufferSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int[], int);
+    method @Deprecated public static android.opengl.EGLSurface eglCreatePixmapSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int);
+    method public static android.opengl.EGLSurface eglCreateWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, Object, int[], int);
+    method public static boolean eglDestroyContext(android.opengl.EGLDisplay, android.opengl.EGLContext);
+    method public static boolean eglDestroySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface);
+    method public static boolean eglGetConfigAttrib(android.opengl.EGLDisplay, android.opengl.EGLConfig, int, int[], int);
+    method public static boolean eglGetConfigs(android.opengl.EGLDisplay, android.opengl.EGLConfig[], int, int, int[], int);
+    method public static android.opengl.EGLContext eglGetCurrentContext();
+    method public static android.opengl.EGLDisplay eglGetCurrentDisplay();
+    method public static android.opengl.EGLSurface eglGetCurrentSurface(int);
+    method public static android.opengl.EGLDisplay eglGetDisplay(int);
+    method public static int eglGetError();
+    method public static boolean eglInitialize(android.opengl.EGLDisplay, int[], int, int[], int);
+    method public static boolean eglMakeCurrent(android.opengl.EGLDisplay, android.opengl.EGLSurface, android.opengl.EGLSurface, android.opengl.EGLContext);
+    method public static int eglQueryAPI();
+    method public static boolean eglQueryContext(android.opengl.EGLDisplay, android.opengl.EGLContext, int, int[], int);
+    method public static String eglQueryString(android.opengl.EGLDisplay, int);
+    method public static boolean eglQuerySurface(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int[], int);
+    method public static boolean eglReleaseTexImage(android.opengl.EGLDisplay, android.opengl.EGLSurface, int);
+    method public static boolean eglReleaseThread();
+    method public static boolean eglSurfaceAttrib(android.opengl.EGLDisplay, android.opengl.EGLSurface, int, int);
+    method public static boolean eglSwapBuffers(android.opengl.EGLDisplay, android.opengl.EGLSurface);
+    method public static boolean eglSwapInterval(android.opengl.EGLDisplay, int);
+    method public static boolean eglTerminate(android.opengl.EGLDisplay);
+    method public static boolean eglWaitClient();
+    method public static boolean eglWaitGL();
+    method public static boolean eglWaitNative(int);
+    field public static final int EGL_ALPHA_MASK_SIZE = 12350; // 0x303e
+    field public static final int EGL_ALPHA_SIZE = 12321; // 0x3021
+    field public static final int EGL_BACK_BUFFER = 12420; // 0x3084
+    field public static final int EGL_BAD_ACCESS = 12290; // 0x3002
+    field public static final int EGL_BAD_ALLOC = 12291; // 0x3003
+    field public static final int EGL_BAD_ATTRIBUTE = 12292; // 0x3004
+    field public static final int EGL_BAD_CONFIG = 12293; // 0x3005
+    field public static final int EGL_BAD_CONTEXT = 12294; // 0x3006
+    field public static final int EGL_BAD_CURRENT_SURFACE = 12295; // 0x3007
+    field public static final int EGL_BAD_DISPLAY = 12296; // 0x3008
+    field public static final int EGL_BAD_MATCH = 12297; // 0x3009
+    field public static final int EGL_BAD_NATIVE_PIXMAP = 12298; // 0x300a
+    field public static final int EGL_BAD_NATIVE_WINDOW = 12299; // 0x300b
+    field public static final int EGL_BAD_PARAMETER = 12300; // 0x300c
+    field public static final int EGL_BAD_SURFACE = 12301; // 0x300d
+    field public static final int EGL_BIND_TO_TEXTURE_RGB = 12345; // 0x3039
+    field public static final int EGL_BIND_TO_TEXTURE_RGBA = 12346; // 0x303a
+    field public static final int EGL_BLUE_SIZE = 12322; // 0x3022
+    field public static final int EGL_BUFFER_DESTROYED = 12437; // 0x3095
+    field public static final int EGL_BUFFER_PRESERVED = 12436; // 0x3094
+    field public static final int EGL_BUFFER_SIZE = 12320; // 0x3020
+    field public static final int EGL_CLIENT_APIS = 12429; // 0x308d
+    field public static final int EGL_COLOR_BUFFER_TYPE = 12351; // 0x303f
+    field public static final int EGL_CONFIG_CAVEAT = 12327; // 0x3027
+    field public static final int EGL_CONFIG_ID = 12328; // 0x3028
+    field public static final int EGL_CONFORMANT = 12354; // 0x3042
+    field public static final int EGL_CONTEXT_CLIENT_TYPE = 12439; // 0x3097
+    field public static final int EGL_CONTEXT_CLIENT_VERSION = 12440; // 0x3098
+    field public static final int EGL_CONTEXT_LOST = 12302; // 0x300e
+    field public static final int EGL_CORE_NATIVE_ENGINE = 12379; // 0x305b
+    field public static final int EGL_DEFAULT_DISPLAY = 0; // 0x0
+    field public static final int EGL_DEPTH_SIZE = 12325; // 0x3025
+    field public static final int EGL_DISPLAY_SCALING = 10000; // 0x2710
+    field public static final int EGL_DRAW = 12377; // 0x3059
+    field public static final int EGL_EXTENSIONS = 12373; // 0x3055
+    field public static final int EGL_FALSE = 0; // 0x0
+    field public static final int EGL_GREEN_SIZE = 12323; // 0x3023
+    field public static final int EGL_HEIGHT = 12374; // 0x3056
+    field public static final int EGL_HORIZONTAL_RESOLUTION = 12432; // 0x3090
+    field public static final int EGL_LARGEST_PBUFFER = 12376; // 0x3058
+    field public static final int EGL_LEVEL = 12329; // 0x3029
+    field public static final int EGL_LUMINANCE_BUFFER = 12431; // 0x308f
+    field public static final int EGL_LUMINANCE_SIZE = 12349; // 0x303d
+    field public static final int EGL_MATCH_NATIVE_PIXMAP = 12353; // 0x3041
+    field public static final int EGL_MAX_PBUFFER_HEIGHT = 12330; // 0x302a
+    field public static final int EGL_MAX_PBUFFER_PIXELS = 12331; // 0x302b
+    field public static final int EGL_MAX_PBUFFER_WIDTH = 12332; // 0x302c
+    field public static final int EGL_MAX_SWAP_INTERVAL = 12348; // 0x303c
+    field public static final int EGL_MIN_SWAP_INTERVAL = 12347; // 0x303b
+    field public static final int EGL_MIPMAP_LEVEL = 12419; // 0x3083
+    field public static final int EGL_MIPMAP_TEXTURE = 12418; // 0x3082
+    field public static final int EGL_MULTISAMPLE_RESOLVE = 12441; // 0x3099
+    field public static final int EGL_MULTISAMPLE_RESOLVE_BOX = 12443; // 0x309b
+    field public static final int EGL_MULTISAMPLE_RESOLVE_BOX_BIT = 512; // 0x200
+    field public static final int EGL_MULTISAMPLE_RESOLVE_DEFAULT = 12442; // 0x309a
+    field public static final int EGL_NATIVE_RENDERABLE = 12333; // 0x302d
+    field public static final int EGL_NATIVE_VISUAL_ID = 12334; // 0x302e
+    field public static final int EGL_NATIVE_VISUAL_TYPE = 12335; // 0x302f
+    field public static final int EGL_NONE = 12344; // 0x3038
+    field public static final int EGL_NON_CONFORMANT_CONFIG = 12369; // 0x3051
+    field public static final int EGL_NOT_INITIALIZED = 12289; // 0x3001
+    field public static android.opengl.EGLContext EGL_NO_CONTEXT;
+    field public static android.opengl.EGLDisplay EGL_NO_DISPLAY;
+    field public static android.opengl.EGLSurface EGL_NO_SURFACE;
+    field public static final int EGL_NO_TEXTURE = 12380; // 0x305c
+    field public static final int EGL_OPENGL_API = 12450; // 0x30a2
+    field public static final int EGL_OPENGL_BIT = 8; // 0x8
+    field public static final int EGL_OPENGL_ES2_BIT = 4; // 0x4
+    field public static final int EGL_OPENGL_ES_API = 12448; // 0x30a0
+    field public static final int EGL_OPENGL_ES_BIT = 1; // 0x1
+    field public static final int EGL_OPENVG_API = 12449; // 0x30a1
+    field public static final int EGL_OPENVG_BIT = 2; // 0x2
+    field public static final int EGL_OPENVG_IMAGE = 12438; // 0x3096
+    field public static final int EGL_PBUFFER_BIT = 1; // 0x1
+    field public static final int EGL_PIXEL_ASPECT_RATIO = 12434; // 0x3092
+    field public static final int EGL_PIXMAP_BIT = 2; // 0x2
+    field public static final int EGL_READ = 12378; // 0x305a
+    field public static final int EGL_RED_SIZE = 12324; // 0x3024
+    field public static final int EGL_RENDERABLE_TYPE = 12352; // 0x3040
+    field public static final int EGL_RENDER_BUFFER = 12422; // 0x3086
+    field public static final int EGL_RGB_BUFFER = 12430; // 0x308e
+    field public static final int EGL_SAMPLES = 12337; // 0x3031
+    field public static final int EGL_SAMPLE_BUFFERS = 12338; // 0x3032
+    field public static final int EGL_SINGLE_BUFFER = 12421; // 0x3085
+    field public static final int EGL_SLOW_CONFIG = 12368; // 0x3050
+    field public static final int EGL_STENCIL_SIZE = 12326; // 0x3026
+    field public static final int EGL_SUCCESS = 12288; // 0x3000
+    field public static final int EGL_SURFACE_TYPE = 12339; // 0x3033
+    field public static final int EGL_SWAP_BEHAVIOR = 12435; // 0x3093
+    field public static final int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 1024; // 0x400
+    field public static final int EGL_TEXTURE_2D = 12383; // 0x305f
+    field public static final int EGL_TEXTURE_FORMAT = 12416; // 0x3080
+    field public static final int EGL_TEXTURE_RGB = 12381; // 0x305d
+    field public static final int EGL_TEXTURE_RGBA = 12382; // 0x305e
+    field public static final int EGL_TEXTURE_TARGET = 12417; // 0x3081
+    field public static final int EGL_TRANSPARENT_BLUE_VALUE = 12341; // 0x3035
+    field public static final int EGL_TRANSPARENT_GREEN_VALUE = 12342; // 0x3036
+    field public static final int EGL_TRANSPARENT_RED_VALUE = 12343; // 0x3037
+    field public static final int EGL_TRANSPARENT_RGB = 12370; // 0x3052
+    field public static final int EGL_TRANSPARENT_TYPE = 12340; // 0x3034
+    field public static final int EGL_TRUE = 1; // 0x1
+    field public static final int EGL_VENDOR = 12371; // 0x3053
+    field public static final int EGL_VERSION = 12372; // 0x3054
+    field public static final int EGL_VERTICAL_RESOLUTION = 12433; // 0x3091
+    field public static final int EGL_VG_ALPHA_FORMAT = 12424; // 0x3088
+    field public static final int EGL_VG_ALPHA_FORMAT_NONPRE = 12427; // 0x308b
+    field public static final int EGL_VG_ALPHA_FORMAT_PRE = 12428; // 0x308c
+    field public static final int EGL_VG_ALPHA_FORMAT_PRE_BIT = 64; // 0x40
+    field public static final int EGL_VG_COLORSPACE = 12423; // 0x3087
+    field public static final int EGL_VG_COLORSPACE_LINEAR = 12426; // 0x308a
+    field public static final int EGL_VG_COLORSPACE_LINEAR_BIT = 32; // 0x20
+    field public static final int EGL_VG_COLORSPACE_sRGB = 12425; // 0x3089
+    field public static final int EGL_WIDTH = 12375; // 0x3057
+    field public static final int EGL_WINDOW_BIT = 4; // 0x4
+  }
+
+  public final class EGL15 {
+    method public static int eglClientWaitSync(android.opengl.EGLDisplay, android.opengl.EGLSync, int, long);
+    method public static android.opengl.EGLImage eglCreateImage(android.opengl.EGLDisplay, android.opengl.EGLContext, int, long, long[], int);
+    method public static android.opengl.EGLSurface eglCreatePlatformPixmapSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.nio.Buffer, long[], int);
+    method public static android.opengl.EGLSurface eglCreatePlatformWindowSurface(android.opengl.EGLDisplay, android.opengl.EGLConfig, java.nio.Buffer, long[], int);
+    method public static android.opengl.EGLSync eglCreateSync(android.opengl.EGLDisplay, int, long[], int);
+    method public static boolean eglDestroyImage(android.opengl.EGLDisplay, android.opengl.EGLImage);
+    method public static boolean eglDestroySync(android.opengl.EGLDisplay, android.opengl.EGLSync);
+    method public static android.opengl.EGLDisplay eglGetPlatformDisplay(int, long, long[], int);
+    method public static boolean eglGetSyncAttrib(android.opengl.EGLDisplay, android.opengl.EGLSync, int, long[], int);
+    method public static boolean eglWaitSync(android.opengl.EGLDisplay, android.opengl.EGLSync, int);
+    field public static final int EGL_CL_EVENT_HANDLE = 12444; // 0x309c
+    field public static final int EGL_CONDITION_SATISFIED = 12534; // 0x30f6
+    field public static final int EGL_CONTEXT_MAJOR_VERSION = 12440; // 0x3098
+    field public static final int EGL_CONTEXT_MINOR_VERSION = 12539; // 0x30fb
+    field public static final int EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT = 2; // 0x2
+    field public static final int EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT = 1; // 0x1
+    field public static final int EGL_CONTEXT_OPENGL_DEBUG = 12720; // 0x31b0
+    field public static final int EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE = 12721; // 0x31b1
+    field public static final int EGL_CONTEXT_OPENGL_PROFILE_MASK = 12541; // 0x30fd
+    field public static final int EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY = 12733; // 0x31bd
+    field public static final int EGL_CONTEXT_OPENGL_ROBUST_ACCESS = 12722; // 0x31b2
+    field public static final long EGL_FOREVER = -1L; // 0xffffffffffffffffL
+    field public static final int EGL_GL_COLORSPACE = 12445; // 0x309d
+    field public static final int EGL_GL_COLORSPACE_LINEAR = 12426; // 0x308a
+    field public static final int EGL_GL_COLORSPACE_SRGB = 12425; // 0x3089
+    field public static final int EGL_GL_RENDERBUFFER = 12473; // 0x30b9
+    field public static final int EGL_GL_TEXTURE_2D = 12465; // 0x30b1
+    field public static final int EGL_GL_TEXTURE_3D = 12466; // 0x30b2
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 12468; // 0x30b4
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 12470; // 0x30b6
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 12472; // 0x30b8
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X = 12467; // 0x30b3
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 12469; // 0x30b5
+    field public static final int EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 12471; // 0x30b7
+    field public static final int EGL_GL_TEXTURE_LEVEL = 12476; // 0x30bc
+    field public static final int EGL_GL_TEXTURE_ZOFFSET = 12477; // 0x30bd
+    field public static final int EGL_IMAGE_PRESERVED = 12498; // 0x30d2
+    field public static final int EGL_LOSE_CONTEXT_ON_RESET = 12735; // 0x31bf
+    field public static final android.opengl.EGLContext EGL_NO_CONTEXT;
+    field public static final android.opengl.EGLDisplay EGL_NO_DISPLAY;
+    field public static final android.opengl.EGLImage EGL_NO_IMAGE;
+    field public static final int EGL_NO_RESET_NOTIFICATION = 12734; // 0x31be
+    field public static final android.opengl.EGLSurface EGL_NO_SURFACE;
+    field public static final android.opengl.EGLSync EGL_NO_SYNC;
+    field public static final int EGL_OPENGL_ES3_BIT = 64; // 0x40
+    field public static final int EGL_PLATFORM_ANDROID_KHR = 12609; // 0x3141
+    field public static final int EGL_SIGNALED = 12530; // 0x30f2
+    field public static final int EGL_SYNC_CL_EVENT = 12542; // 0x30fe
+    field public static final int EGL_SYNC_CL_EVENT_COMPLETE = 12543; // 0x30ff
+    field public static final int EGL_SYNC_CONDITION = 12536; // 0x30f8
+    field public static final int EGL_SYNC_FENCE = 12537; // 0x30f9
+    field public static final int EGL_SYNC_FLUSH_COMMANDS_BIT = 1; // 0x1
+    field public static final int EGL_SYNC_PRIOR_COMMANDS_COMPLETE = 12528; // 0x30f0
+    field public static final int EGL_SYNC_STATUS = 12529; // 0x30f1
+    field public static final int EGL_SYNC_TYPE = 12535; // 0x30f7
+    field public static final int EGL_TIMEOUT_EXPIRED = 12533; // 0x30f5
+    field public static final int EGL_UNSIGNALED = 12531; // 0x30f3
+  }
+
+  public class EGLConfig extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLContext extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLDisplay extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLExt {
+    ctor public EGLExt();
+    method public static boolean eglPresentationTimeANDROID(android.opengl.EGLDisplay, android.opengl.EGLSurface, long);
+    field public static final int EGL_CONTEXT_FLAGS_KHR = 12540; // 0x30fc
+    field public static final int EGL_CONTEXT_MAJOR_VERSION_KHR = 12440; // 0x3098
+    field public static final int EGL_CONTEXT_MINOR_VERSION_KHR = 12539; // 0x30fb
+    field public static final int EGL_OPENGL_ES3_BIT_KHR = 64; // 0x40
+    field public static final int EGL_RECORDABLE_ANDROID = 12610; // 0x3142
+  }
+
+  public class EGLImage extends android.opengl.EGLObjectHandle {
+  }
+
+  public abstract class EGLObjectHandle {
+    ctor @Deprecated protected EGLObjectHandle(int);
+    ctor protected EGLObjectHandle(long);
+    method @Deprecated public int getHandle();
+    method public long getNativeHandle();
+  }
+
+  public class EGLSurface extends android.opengl.EGLObjectHandle {
+  }
+
+  public class EGLSync extends android.opengl.EGLObjectHandle {
+  }
+
+  public class ETC1 {
+    ctor public ETC1();
+    method public static void decodeBlock(java.nio.Buffer, java.nio.Buffer);
+    method public static void decodeImage(java.nio.Buffer, java.nio.Buffer, int, int, int, int);
+    method public static void encodeBlock(java.nio.Buffer, int, java.nio.Buffer);
+    method public static void encodeImage(java.nio.Buffer, int, int, int, int, java.nio.Buffer);
+    method public static void formatHeader(java.nio.Buffer, int, int);
+    method public static int getEncodedDataSize(int, int);
+    method public static int getHeight(java.nio.Buffer);
+    method public static int getWidth(java.nio.Buffer);
+    method public static boolean isValid(java.nio.Buffer);
+    field public static final int DECODED_BLOCK_SIZE = 48; // 0x30
+    field public static final int ENCODED_BLOCK_SIZE = 8; // 0x8
+    field public static final int ETC1_RGB8_OES = 36196; // 0x8d64
+    field public static final int ETC_PKM_HEADER_SIZE = 16; // 0x10
+  }
+
+  public class ETC1Util {
+    ctor public ETC1Util();
+    method public static android.opengl.ETC1Util.ETC1Texture compressTexture(java.nio.Buffer, int, int, int, int);
+    method public static android.opengl.ETC1Util.ETC1Texture createTexture(java.io.InputStream) throws java.io.IOException;
+    method public static boolean isETC1Supported();
+    method public static void loadTexture(int, int, int, int, int, java.io.InputStream) throws java.io.IOException;
+    method public static void loadTexture(int, int, int, int, int, android.opengl.ETC1Util.ETC1Texture);
+    method public static void writeTexture(android.opengl.ETC1Util.ETC1Texture, java.io.OutputStream) throws java.io.IOException;
+  }
+
+  public static class ETC1Util.ETC1Texture {
+    ctor public ETC1Util.ETC1Texture(int, int, java.nio.ByteBuffer);
+    method public java.nio.ByteBuffer getData();
+    method public int getHeight();
+    method public int getWidth();
+  }
+
+  public class GLDebugHelper {
+    ctor public GLDebugHelper();
+    method public static javax.microedition.khronos.opengles.GL wrap(javax.microedition.khronos.opengles.GL, int, java.io.Writer);
+    method public static javax.microedition.khronos.egl.EGL wrap(javax.microedition.khronos.egl.EGL, int, java.io.Writer);
+    field public static final int CONFIG_CHECK_GL_ERROR = 1; // 0x1
+    field public static final int CONFIG_CHECK_THREAD = 2; // 0x2
+    field public static final int CONFIG_LOG_ARGUMENT_NAMES = 4; // 0x4
+    field public static final int ERROR_WRONG_THREAD = 28672; // 0x7000
+  }
+
+  public class GLES10 {
+    ctor public GLES10();
+    method public static void glActiveTexture(int);
+    method public static void glAlphaFunc(int, float);
+    method public static void glAlphaFuncx(int, int);
+    method public static void glBindTexture(int, int);
+    method public static void glBlendFunc(int, int);
+    method public static void glClear(int);
+    method public static void glClearColor(float, float, float, float);
+    method public static void glClearColorx(int, int, int, int);
+    method public static void glClearDepthf(float);
+    method public static void glClearDepthx(int);
+    method public static void glClearStencil(int);
+    method public static void glClientActiveTexture(int);
+    method public static void glColor4f(float, float, float, float);
+    method public static void glColor4x(int, int, int, int);
+    method public static void glColorMask(boolean, boolean, boolean, boolean);
+    method public static void glColorPointer(int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public static void glCopyTexSubImage2D(int, int, int, int, int, int, int, int);
+    method public static void glCullFace(int);
+    method public static void glDeleteTextures(int, int[], int);
+    method public static void glDeleteTextures(int, java.nio.IntBuffer);
+    method public static void glDepthFunc(int);
+    method public static void glDepthMask(boolean);
+    method public static void glDepthRangef(float, float);
+    method public static void glDepthRangex(int, int);
+    method public static void glDisable(int);
+    method public static void glDisableClientState(int);
+    method public static void glDrawArrays(int, int, int);
+    method public static void glDrawElements(int, int, int, java.nio.Buffer);
+    method public static void glEnable(int);
+    method public static void glEnableClientState(int);
+    method public static void glFinish();
+    method public static void glFlush();
+    method public static void glFogf(int, float);
+    method public static void glFogfv(int, float[], int);
+    method public static void glFogfv(int, java.nio.FloatBuffer);
+    method public static void glFogx(int, int);
+    method public static void glFogxv(int, int[], int);
+    method public static void glFogxv(int, java.nio.IntBuffer);
+    method public static void glFrontFace(int);
+    method public static void glFrustumf(float, float, float, float, float, float);
+    method public static void glFrustumx(int, int, int, int, int, int);
+    method public static void glGenTextures(int, int[], int);
+    method public static void glGenTextures(int, java.nio.IntBuffer);
+    method public static int glGetError();
+    method public static void glGetIntegerv(int, int[], int);
+    method public static void glGetIntegerv(int, java.nio.IntBuffer);
+    method public static String glGetString(int);
+    method public static void glHint(int, int);
+    method public static void glLightModelf(int, float);
+    method public static void glLightModelfv(int, float[], int);
+    method public static void glLightModelfv(int, java.nio.FloatBuffer);
+    method public static void glLightModelx(int, int);
+    method public static void glLightModelxv(int, int[], int);
+    method public static void glLightModelxv(int, java.nio.IntBuffer);
+    method public static void glLightf(int, int, float);
+    method public static void glLightfv(int, int, float[], int);
+    method public static void glLightfv(int, int, java.nio.FloatBuffer);
+    method public static void glLightx(int, int, int);
+    method public static void glLightxv(int, int, int[], int);
+    method public static void glLightxv(int, int, java.nio.IntBuffer);
+    method public static void glLineWidth(float);
+    method public static void glLineWidthx(int);
+    method public static void glLoadIdentity();
+    method public static void glLoadMatrixf(float[], int);
+    method public static void glLoadMatrixf(java.nio.FloatBuffer);
+    method public static void glLoadMatrixx(int[], int);
+    method public static void glLoadMatrixx(java.nio.IntBuffer);
+    method public static void glLogicOp(int);
+    method public static void glMaterialf(int, int, float);
+    method public static void glMaterialfv(int, int, float[], int);
+    method public static void glMaterialfv(int, int, java.nio.FloatBuffer);
+    method public static void glMaterialx(int, int, int);
+    method public static void glMaterialxv(int, int, int[], int);
+    method public static void glMaterialxv(int, int, java.nio.IntBuffer);
+    method public static void glMatrixMode(int);
+    method public static void glMultMatrixf(float[], int);
+    method public static void glMultMatrixf(java.nio.FloatBuffer);
+    method public static void glMultMatrixx(int[], int);
+    method public static void glMultMatrixx(java.nio.IntBuffer);
+    method public static void glMultiTexCoord4f(int, float, float, float, float);
+    method public static void glMultiTexCoord4x(int, int, int, int, int);
+    method public static void glNormal3f(float, float, float);
+    method public static void glNormal3x(int, int, int);
+    method public static void glNormalPointer(int, int, java.nio.Buffer);
+    method public static void glOrthof(float, float, float, float, float, float);
+    method public static void glOrthox(int, int, int, int, int, int);
+    method public static void glPixelStorei(int, int);
+    method public static void glPointSize(float);
+    method public static void glPointSizex(int);
+    method public static void glPolygonOffset(float, float);
+    method public static void glPolygonOffsetx(int, int);
+    method public static void glPopMatrix();
+    method public static void glPushMatrix();
+    method public static void glReadPixels(int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glRotatef(float, float, float, float);
+    method public static void glRotatex(int, int, int, int);
+    method public static void glSampleCoverage(float, boolean);
+    method public static void glSampleCoveragex(int, boolean);
+    method public static void glScalef(float, float, float);
+    method public static void glScalex(int, int, int);
+    method public static void glScissor(int, int, int, int);
+    method public static void glShadeModel(int);
+    method public static void glStencilFunc(int, int, int);
+    method public static void glStencilMask(int);
+    method public static void glStencilOp(int, int, int);
+    method public static void glTexCoordPointer(int, int, int, java.nio.Buffer);
+    method public static void glTexEnvf(int, int, float);
+    method public static void glTexEnvfv(int, int, float[], int);
+    method public static void glTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public static void glTexEnvx(int, int, int);
+    method public static void glTexEnvxv(int, int, int[], int);
+    method public static void glTexEnvxv(int, int, java.nio.IntBuffer);
+    method public static void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexParameterf(int, int, float);
+    method public static void glTexParameterx(int, int, int);
+    method public static void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTranslatef(float, float, float);
+    method public static void glTranslatex(int, int, int);
+    method public static void glVertexPointer(int, int, int, java.nio.Buffer);
+    method public static void glViewport(int, int, int, int);
+    field public static final int GL_ADD = 260; // 0x104
+    field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e
+    field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d
+    field public static final int GL_ALPHA = 6406; // 0x1906
+    field public static final int GL_ALPHA_BITS = 3413; // 0xd55
+    field public static final int GL_ALPHA_TEST = 3008; // 0xbc0
+    field public static final int GL_ALWAYS = 519; // 0x207
+    field public static final int GL_AMBIENT = 4608; // 0x1200
+    field public static final int GL_AMBIENT_AND_DIFFUSE = 5634; // 0x1602
+    field public static final int GL_AND = 5377; // 0x1501
+    field public static final int GL_AND_INVERTED = 5380; // 0x1504
+    field public static final int GL_AND_REVERSE = 5378; // 0x1502
+    field public static final int GL_BACK = 1029; // 0x405
+    field public static final int GL_BLEND = 3042; // 0xbe2
+    field public static final int GL_BLUE_BITS = 3412; // 0xd54
+    field public static final int GL_BYTE = 5120; // 0x1400
+    field public static final int GL_CCW = 2305; // 0x901
+    field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f
+    field public static final int GL_CLEAR = 5376; // 0x1500
+    field public static final int GL_COLOR_ARRAY = 32886; // 0x8076
+    field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000
+    field public static final int GL_COLOR_LOGIC_OP = 3058; // 0xbf2
+    field public static final int GL_COLOR_MATERIAL = 2903; // 0xb57
+    field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3
+    field public static final int GL_CONSTANT_ATTENUATION = 4615; // 0x1207
+    field public static final int GL_COPY = 5379; // 0x1503
+    field public static final int GL_COPY_INVERTED = 5388; // 0x150c
+    field public static final int GL_CULL_FACE = 2884; // 0xb44
+    field public static final int GL_CW = 2304; // 0x900
+    field public static final int GL_DECAL = 8449; // 0x2101
+    field public static final int GL_DECR = 7683; // 0x1e03
+    field public static final int GL_DEPTH_BITS = 3414; // 0xd56
+    field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100
+    field public static final int GL_DEPTH_TEST = 2929; // 0xb71
+    field public static final int GL_DIFFUSE = 4609; // 0x1201
+    field public static final int GL_DITHER = 3024; // 0xbd0
+    field public static final int GL_DONT_CARE = 4352; // 0x1100
+    field public static final int GL_DST_ALPHA = 772; // 0x304
+    field public static final int GL_DST_COLOR = 774; // 0x306
+    field public static final int GL_EMISSION = 5632; // 0x1600
+    field public static final int GL_EQUAL = 514; // 0x202
+    field public static final int GL_EQUIV = 5385; // 0x1509
+    field public static final int GL_EXP = 2048; // 0x800
+    field public static final int GL_EXP2 = 2049; // 0x801
+    field public static final int GL_EXTENSIONS = 7939; // 0x1f03
+    field public static final int GL_FALSE = 0; // 0x0
+    field public static final int GL_FASTEST = 4353; // 0x1101
+    field public static final int GL_FIXED = 5132; // 0x140c
+    field public static final int GL_FLAT = 7424; // 0x1d00
+    field public static final int GL_FLOAT = 5126; // 0x1406
+    field public static final int GL_FOG = 2912; // 0xb60
+    field public static final int GL_FOG_COLOR = 2918; // 0xb66
+    field public static final int GL_FOG_DENSITY = 2914; // 0xb62
+    field public static final int GL_FOG_END = 2916; // 0xb64
+    field public static final int GL_FOG_HINT = 3156; // 0xc54
+    field public static final int GL_FOG_MODE = 2917; // 0xb65
+    field public static final int GL_FOG_START = 2915; // 0xb63
+    field public static final int GL_FRONT = 1028; // 0x404
+    field public static final int GL_FRONT_AND_BACK = 1032; // 0x408
+    field public static final int GL_GEQUAL = 518; // 0x206
+    field public static final int GL_GREATER = 516; // 0x204
+    field public static final int GL_GREEN_BITS = 3411; // 0xd53
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739; // 0x8b9b
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738; // 0x8b9a
+    field public static final int GL_INCR = 7682; // 0x1e02
+    field public static final int GL_INVALID_ENUM = 1280; // 0x500
+    field public static final int GL_INVALID_OPERATION = 1282; // 0x502
+    field public static final int GL_INVALID_VALUE = 1281; // 0x501
+    field public static final int GL_INVERT = 5386; // 0x150a
+    field public static final int GL_KEEP = 7680; // 0x1e00
+    field public static final int GL_LEQUAL = 515; // 0x203
+    field public static final int GL_LESS = 513; // 0x201
+    field public static final int GL_LIGHT0 = 16384; // 0x4000
+    field public static final int GL_LIGHT1 = 16385; // 0x4001
+    field public static final int GL_LIGHT2 = 16386; // 0x4002
+    field public static final int GL_LIGHT3 = 16387; // 0x4003
+    field public static final int GL_LIGHT4 = 16388; // 0x4004
+    field public static final int GL_LIGHT5 = 16389; // 0x4005
+    field public static final int GL_LIGHT6 = 16390; // 0x4006
+    field public static final int GL_LIGHT7 = 16391; // 0x4007
+    field public static final int GL_LIGHTING = 2896; // 0xb50
+    field public static final int GL_LIGHT_MODEL_AMBIENT = 2899; // 0xb53
+    field public static final int GL_LIGHT_MODEL_TWO_SIDE = 2898; // 0xb52
+    field public static final int GL_LINEAR = 9729; // 0x2601
+    field public static final int GL_LINEAR_ATTENUATION = 4616; // 0x1208
+    field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703
+    field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701
+    field public static final int GL_LINES = 1; // 0x1
+    field public static final int GL_LINE_LOOP = 2; // 0x2
+    field public static final int GL_LINE_SMOOTH = 2848; // 0xb20
+    field public static final int GL_LINE_SMOOTH_HINT = 3154; // 0xc52
+    field public static final int GL_LINE_STRIP = 3; // 0x3
+    field public static final int GL_LUMINANCE = 6409; // 0x1909
+    field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a
+    field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9
+    field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8
+    field public static final int GL_MAX_LIGHTS = 3377; // 0xd31
+    field public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 3382; // 0xd36
+    field public static final int GL_MAX_PROJECTION_STACK_DEPTH = 3384; // 0xd38
+    field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33
+    field public static final int GL_MAX_TEXTURE_STACK_DEPTH = 3385; // 0xd39
+    field public static final int GL_MAX_TEXTURE_UNITS = 34018; // 0x84e2
+    field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a
+    field public static final int GL_MODELVIEW = 5888; // 0x1700
+    field public static final int GL_MODULATE = 8448; // 0x2100
+    field public static final int GL_MULTISAMPLE = 32925; // 0x809d
+    field public static final int GL_NAND = 5390; // 0x150e
+    field public static final int GL_NEAREST = 9728; // 0x2600
+    field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702
+    field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700
+    field public static final int GL_NEVER = 512; // 0x200
+    field public static final int GL_NICEST = 4354; // 0x1102
+    field public static final int GL_NOOP = 5381; // 0x1505
+    field public static final int GL_NOR = 5384; // 0x1508
+    field public static final int GL_NORMALIZE = 2977; // 0xba1
+    field public static final int GL_NORMAL_ARRAY = 32885; // 0x8075
+    field public static final int GL_NOTEQUAL = 517; // 0x205
+    field public static final int GL_NO_ERROR = 0; // 0x0
+    field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2
+    field public static final int GL_ONE = 1; // 0x1
+    field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305
+    field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307
+    field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303
+    field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301
+    field public static final int GL_OR = 5383; // 0x1507
+    field public static final int GL_OR_INVERTED = 5389; // 0x150d
+    field public static final int GL_OR_REVERSE = 5387; // 0x150b
+    field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505
+    field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05
+    field public static final int GL_PALETTE4_R5_G6_B5_OES = 35730; // 0x8b92
+    field public static final int GL_PALETTE4_RGB5_A1_OES = 35732; // 0x8b94
+    field public static final int GL_PALETTE4_RGB8_OES = 35728; // 0x8b90
+    field public static final int GL_PALETTE4_RGBA4_OES = 35731; // 0x8b93
+    field public static final int GL_PALETTE4_RGBA8_OES = 35729; // 0x8b91
+    field public static final int GL_PALETTE8_R5_G6_B5_OES = 35735; // 0x8b97
+    field public static final int GL_PALETTE8_RGB5_A1_OES = 35737; // 0x8b99
+    field public static final int GL_PALETTE8_RGB8_OES = 35733; // 0x8b95
+    field public static final int GL_PALETTE8_RGBA4_OES = 35736; // 0x8b98
+    field public static final int GL_PALETTE8_RGBA8_OES = 35734; // 0x8b96
+    field public static final int GL_PERSPECTIVE_CORRECTION_HINT = 3152; // 0xc50
+    field public static final int GL_POINTS = 0; // 0x0
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SMOOTH = 2832; // 0xb10
+    field public static final int GL_POINT_SMOOTH_HINT = 3153; // 0xc51
+    field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037
+    field public static final int GL_POLYGON_SMOOTH_HINT = 3155; // 0xc53
+    field public static final int GL_POSITION = 4611; // 0x1203
+    field public static final int GL_PROJECTION = 5889; // 0x1701
+    field public static final int GL_QUADRATIC_ATTENUATION = 4617; // 0x1209
+    field public static final int GL_RED_BITS = 3410; // 0xd52
+    field public static final int GL_RENDERER = 7937; // 0x1f01
+    field public static final int GL_REPEAT = 10497; // 0x2901
+    field public static final int GL_REPLACE = 7681; // 0x1e01
+    field public static final int GL_RESCALE_NORMAL = 32826; // 0x803a
+    field public static final int GL_RGB = 6407; // 0x1907
+    field public static final int GL_RGBA = 6408; // 0x1908
+    field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e
+    field public static final int GL_SAMPLE_ALPHA_TO_ONE = 32927; // 0x809f
+    field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0
+    field public static final int GL_SCISSOR_TEST = 3089; // 0xc11
+    field public static final int GL_SET = 5391; // 0x150f
+    field public static final int GL_SHININESS = 5633; // 0x1601
+    field public static final int GL_SHORT = 5122; // 0x1402
+    field public static final int GL_SMOOTH = 7425; // 0x1d01
+    field public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 2850; // 0xb22
+    field public static final int GL_SMOOTH_POINT_SIZE_RANGE = 2834; // 0xb12
+    field public static final int GL_SPECULAR = 4610; // 0x1202
+    field public static final int GL_SPOT_CUTOFF = 4614; // 0x1206
+    field public static final int GL_SPOT_DIRECTION = 4612; // 0x1204
+    field public static final int GL_SPOT_EXPONENT = 4613; // 0x1205
+    field public static final int GL_SRC_ALPHA = 770; // 0x302
+    field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308
+    field public static final int GL_SRC_COLOR = 768; // 0x300
+    field public static final int GL_STACK_OVERFLOW = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504
+    field public static final int GL_STENCIL_BITS = 3415; // 0xd57
+    field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400
+    field public static final int GL_STENCIL_TEST = 2960; // 0xb90
+    field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50
+    field public static final int GL_TEXTURE = 5890; // 0x1702
+    field public static final int GL_TEXTURE0 = 33984; // 0x84c0
+    field public static final int GL_TEXTURE1 = 33985; // 0x84c1
+    field public static final int GL_TEXTURE10 = 33994; // 0x84ca
+    field public static final int GL_TEXTURE11 = 33995; // 0x84cb
+    field public static final int GL_TEXTURE12 = 33996; // 0x84cc
+    field public static final int GL_TEXTURE13 = 33997; // 0x84cd
+    field public static final int GL_TEXTURE14 = 33998; // 0x84ce
+    field public static final int GL_TEXTURE15 = 33999; // 0x84cf
+    field public static final int GL_TEXTURE16 = 34000; // 0x84d0
+    field public static final int GL_TEXTURE17 = 34001; // 0x84d1
+    field public static final int GL_TEXTURE18 = 34002; // 0x84d2
+    field public static final int GL_TEXTURE19 = 34003; // 0x84d3
+    field public static final int GL_TEXTURE2 = 33986; // 0x84c2
+    field public static final int GL_TEXTURE20 = 34004; // 0x84d4
+    field public static final int GL_TEXTURE21 = 34005; // 0x84d5
+    field public static final int GL_TEXTURE22 = 34006; // 0x84d6
+    field public static final int GL_TEXTURE23 = 34007; // 0x84d7
+    field public static final int GL_TEXTURE24 = 34008; // 0x84d8
+    field public static final int GL_TEXTURE25 = 34009; // 0x84d9
+    field public static final int GL_TEXTURE26 = 34010; // 0x84da
+    field public static final int GL_TEXTURE27 = 34011; // 0x84db
+    field public static final int GL_TEXTURE28 = 34012; // 0x84dc
+    field public static final int GL_TEXTURE29 = 34013; // 0x84dd
+    field public static final int GL_TEXTURE3 = 33987; // 0x84c3
+    field public static final int GL_TEXTURE30 = 34014; // 0x84de
+    field public static final int GL_TEXTURE31 = 34015; // 0x84df
+    field public static final int GL_TEXTURE4 = 33988; // 0x84c4
+    field public static final int GL_TEXTURE5 = 33989; // 0x84c5
+    field public static final int GL_TEXTURE6 = 33990; // 0x84c6
+    field public static final int GL_TEXTURE7 = 33991; // 0x84c7
+    field public static final int GL_TEXTURE8 = 33992; // 0x84c8
+    field public static final int GL_TEXTURE9 = 33993; // 0x84c9
+    field public static final int GL_TEXTURE_2D = 3553; // 0xde1
+    field public static final int GL_TEXTURE_COORD_ARRAY = 32888; // 0x8078
+    field public static final int GL_TEXTURE_ENV = 8960; // 0x2300
+    field public static final int GL_TEXTURE_ENV_COLOR = 8705; // 0x2201
+    field public static final int GL_TEXTURE_ENV_MODE = 8704; // 0x2200
+    field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800
+    field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801
+    field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802
+    field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803
+    field public static final int GL_TRIANGLES = 4; // 0x4
+    field public static final int GL_TRIANGLE_FAN = 6; // 0x6
+    field public static final int GL_TRIANGLE_STRIP = 5; // 0x5
+    field public static final int GL_TRUE = 1; // 0x1
+    field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5
+    field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401
+    field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403
+    field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033
+    field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034
+    field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363
+    field public static final int GL_VENDOR = 7936; // 0x1f00
+    field public static final int GL_VERSION = 7938; // 0x1f02
+    field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074
+    field public static final int GL_XOR = 5382; // 0x1506
+    field public static final int GL_ZERO = 0; // 0x0
+  }
+
+  public class GLES10Ext {
+    ctor public GLES10Ext();
+    method public static int glQueryMatrixxOES(int[], int, int[], int);
+    method public static int glQueryMatrixxOES(java.nio.IntBuffer, java.nio.IntBuffer);
+  }
+
+  public class GLES11 extends android.opengl.GLES10 {
+    ctor public GLES11();
+    method public static void glBindBuffer(int, int);
+    method public static void glBufferData(int, int, java.nio.Buffer, int);
+    method public static void glBufferSubData(int, int, int, java.nio.Buffer);
+    method public static void glClipPlanef(int, float[], int);
+    method public static void glClipPlanef(int, java.nio.FloatBuffer);
+    method public static void glClipPlanex(int, int[], int);
+    method public static void glClipPlanex(int, java.nio.IntBuffer);
+    method public static void glColor4ub(byte, byte, byte, byte);
+    method public static void glColorPointer(int, int, int, int);
+    method public static void glDeleteBuffers(int, int[], int);
+    method public static void glDeleteBuffers(int, java.nio.IntBuffer);
+    method public static void glDrawElements(int, int, int, int);
+    method public static void glGenBuffers(int, int[], int);
+    method public static void glGenBuffers(int, java.nio.IntBuffer);
+    method public static void glGetBooleanv(int, boolean[], int);
+    method public static void glGetBooleanv(int, java.nio.IntBuffer);
+    method public static void glGetBufferParameteriv(int, int, int[], int);
+    method public static void glGetBufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glGetClipPlanef(int, float[], int);
+    method public static void glGetClipPlanef(int, java.nio.FloatBuffer);
+    method public static void glGetClipPlanex(int, int[], int);
+    method public static void glGetClipPlanex(int, java.nio.IntBuffer);
+    method public static void glGetFixedv(int, int[], int);
+    method public static void glGetFixedv(int, java.nio.IntBuffer);
+    method public static void glGetFloatv(int, float[], int);
+    method public static void glGetFloatv(int, java.nio.FloatBuffer);
+    method public static void glGetLightfv(int, int, float[], int);
+    method public static void glGetLightfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetLightxv(int, int, int[], int);
+    method public static void glGetLightxv(int, int, java.nio.IntBuffer);
+    method public static void glGetMaterialfv(int, int, float[], int);
+    method public static void glGetMaterialfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetMaterialxv(int, int, int[], int);
+    method public static void glGetMaterialxv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexEnvfv(int, int, float[], int);
+    method public static void glGetTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexEnviv(int, int, int[], int);
+    method public static void glGetTexEnviv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexEnvxv(int, int, int[], int);
+    method public static void glGetTexEnvxv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterfv(int, int, float[], int);
+    method public static void glGetTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexParameteriv(int, int, int[], int);
+    method public static void glGetTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterxv(int, int, int[], int);
+    method public static void glGetTexParameterxv(int, int, java.nio.IntBuffer);
+    method public static boolean glIsBuffer(int);
+    method public static boolean glIsEnabled(int);
+    method public static boolean glIsTexture(int);
+    method public static void glNormalPointer(int, int, int);
+    method public static void glPointParameterf(int, float);
+    method public static void glPointParameterfv(int, float[], int);
+    method public static void glPointParameterfv(int, java.nio.FloatBuffer);
+    method public static void glPointParameterx(int, int);
+    method public static void glPointParameterxv(int, int[], int);
+    method public static void glPointParameterxv(int, java.nio.IntBuffer);
+    method public static void glPointSizePointerOES(int, int, java.nio.Buffer);
+    method public static void glTexCoordPointer(int, int, int, int);
+    method public static void glTexEnvi(int, int, int);
+    method public static void glTexEnviv(int, int, int[], int);
+    method public static void glTexEnviv(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterfv(int, int, float[], int);
+    method public static void glTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glTexParameteri(int, int, int);
+    method public static void glTexParameteriv(int, int, int[], int);
+    method public static void glTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterxv(int, int, int[], int);
+    method public static void glTexParameterxv(int, int, java.nio.IntBuffer);
+    method public static void glVertexPointer(int, int, int, int);
+    field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0
+    field public static final int GL_ADD_SIGNED = 34164; // 0x8574
+    field public static final int GL_ALPHA_SCALE = 3356; // 0xd1c
+    field public static final int GL_ALPHA_TEST_FUNC = 3009; // 0xbc1
+    field public static final int GL_ALPHA_TEST_REF = 3010; // 0xbc2
+    field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892
+    field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894
+    field public static final int GL_BLEND_DST = 3040; // 0xbe0
+    field public static final int GL_BLEND_SRC = 3041; // 0xbe1
+    field public static final int GL_BUFFER_ACCESS = 35003; // 0x88bb
+    field public static final int GL_BUFFER_SIZE = 34660; // 0x8764
+    field public static final int GL_BUFFER_USAGE = 34661; // 0x8765
+    field public static final int GL_CLIENT_ACTIVE_TEXTURE = 34017; // 0x84e1
+    field public static final int GL_CLIP_PLANE0 = 12288; // 0x3000
+    field public static final int GL_CLIP_PLANE1 = 12289; // 0x3001
+    field public static final int GL_CLIP_PLANE2 = 12290; // 0x3002
+    field public static final int GL_CLIP_PLANE3 = 12291; // 0x3003
+    field public static final int GL_CLIP_PLANE4 = 12292; // 0x3004
+    field public static final int GL_CLIP_PLANE5 = 12293; // 0x3005
+    field public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 34968; // 0x8898
+    field public static final int GL_COLOR_ARRAY_POINTER = 32912; // 0x8090
+    field public static final int GL_COLOR_ARRAY_SIZE = 32897; // 0x8081
+    field public static final int GL_COLOR_ARRAY_STRIDE = 32899; // 0x8083
+    field public static final int GL_COLOR_ARRAY_TYPE = 32898; // 0x8082
+    field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22
+    field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23
+    field public static final int GL_COMBINE = 34160; // 0x8570
+    field public static final int GL_COMBINE_ALPHA = 34162; // 0x8572
+    field public static final int GL_COMBINE_RGB = 34161; // 0x8571
+    field public static final int GL_CONSTANT = 34166; // 0x8576
+    field public static final int GL_COORD_REPLACE_OES = 34914; // 0x8862
+    field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45
+    field public static final int GL_CURRENT_COLOR = 2816; // 0xb00
+    field public static final int GL_CURRENT_NORMAL = 2818; // 0xb02
+    field public static final int GL_CURRENT_TEXTURE_COORDS = 2819; // 0xb03
+    field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73
+    field public static final int GL_DEPTH_FUNC = 2932; // 0xb74
+    field public static final int GL_DEPTH_RANGE = 2928; // 0xb70
+    field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72
+    field public static final int GL_DOT3_RGB = 34478; // 0x86ae
+    field public static final int GL_DOT3_RGBA = 34479; // 0x86af
+    field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8
+    field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893
+    field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895
+    field public static final int GL_FRONT_FACE = 2886; // 0xb46
+    field public static final int GL_GENERATE_MIPMAP = 33169; // 0x8191
+    field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192
+    field public static final int GL_INTERPOLATE = 34165; // 0x8575
+    field public static final int GL_LINE_WIDTH = 2849; // 0xb21
+    field public static final int GL_LOGIC_OP_MODE = 3056; // 0xbf0
+    field public static final int GL_MATRIX_MODE = 2976; // 0xba0
+    field public static final int GL_MAX_CLIP_PLANES = 3378; // 0xd32
+    field public static final int GL_MODELVIEW_MATRIX = 2982; // 0xba6
+    field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d
+    field public static final int GL_MODELVIEW_STACK_DEPTH = 2979; // 0xba3
+    field public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 34967; // 0x8897
+    field public static final int GL_NORMAL_ARRAY_POINTER = 32911; // 0x808f
+    field public static final int GL_NORMAL_ARRAY_STRIDE = 32895; // 0x807f
+    field public static final int GL_NORMAL_ARRAY_TYPE = 32894; // 0x807e
+    field public static final int GL_OPERAND0_ALPHA = 34200; // 0x8598
+    field public static final int GL_OPERAND0_RGB = 34192; // 0x8590
+    field public static final int GL_OPERAND1_ALPHA = 34201; // 0x8599
+    field public static final int GL_OPERAND1_RGB = 34193; // 0x8591
+    field public static final int GL_OPERAND2_ALPHA = 34202; // 0x859a
+    field public static final int GL_OPERAND2_RGB = 34194; // 0x8592
+    field public static final int GL_POINT_DISTANCE_ATTENUATION = 33065; // 0x8129
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 35743; // 0x8b9f
+    field public static final int GL_POINT_SIZE_ARRAY_OES = 35740; // 0x8b9c
+    field public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 35212; // 0x898c
+    field public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 35211; // 0x898b
+    field public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 35210; // 0x898a
+    field public static final int GL_POINT_SIZE_MAX = 33063; // 0x8127
+    field public static final int GL_POINT_SIZE_MIN = 33062; // 0x8126
+    field public static final int GL_POINT_SPRITE_OES = 34913; // 0x8861
+    field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038
+    field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00
+    field public static final int GL_PREVIOUS = 34168; // 0x8578
+    field public static final int GL_PRIMARY_COLOR = 34167; // 0x8577
+    field public static final int GL_PROJECTION_MATRIX = 2983; // 0xba7
+    field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e
+    field public static final int GL_PROJECTION_STACK_DEPTH = 2980; // 0xba4
+    field public static final int GL_RGB_SCALE = 34163; // 0x8573
+    field public static final int GL_SAMPLES = 32937; // 0x80a9
+    field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8
+    field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab
+    field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa
+    field public static final int GL_SCISSOR_BOX = 3088; // 0xc10
+    field public static final int GL_SHADE_MODEL = 2900; // 0xb54
+    field public static final int GL_SRC0_ALPHA = 34184; // 0x8588
+    field public static final int GL_SRC0_RGB = 34176; // 0x8580
+    field public static final int GL_SRC1_ALPHA = 34185; // 0x8589
+    field public static final int GL_SRC1_RGB = 34177; // 0x8581
+    field public static final int GL_SRC2_ALPHA = 34186; // 0x858a
+    field public static final int GL_SRC2_RGB = 34178; // 0x8582
+    field public static final int GL_STATIC_DRAW = 35044; // 0x88e4
+    field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91
+    field public static final int GL_STENCIL_FAIL = 2964; // 0xb94
+    field public static final int GL_STENCIL_FUNC = 2962; // 0xb92
+    field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95
+    field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96
+    field public static final int GL_STENCIL_REF = 2967; // 0xb97
+    field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93
+    field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98
+    field public static final int GL_SUBTRACT = 34023; // 0x84e7
+    field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069
+    field public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970; // 0x889a
+    field public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 32914; // 0x8092
+    field public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 32904; // 0x8088
+    field public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 32906; // 0x808a
+    field public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 32905; // 0x8089
+    field public static final int GL_TEXTURE_MATRIX = 2984; // 0xba8
+    field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f
+    field public static final int GL_TEXTURE_STACK_DEPTH = 2981; // 0xba5
+    field public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 34966; // 0x8896
+    field public static final int GL_VERTEX_ARRAY_POINTER = 32910; // 0x808e
+    field public static final int GL_VERTEX_ARRAY_SIZE = 32890; // 0x807a
+    field public static final int GL_VERTEX_ARRAY_STRIDE = 32892; // 0x807c
+    field public static final int GL_VERTEX_ARRAY_TYPE = 32891; // 0x807b
+    field public static final int GL_VIEWPORT = 2978; // 0xba2
+    field public static final int GL_WRITE_ONLY = 35001; // 0x88b9
+  }
+
+  public class GLES11Ext {
+    ctor public GLES11Ext();
+    method public static void glAlphaFuncxOES(int, int);
+    method public static void glBindFramebufferOES(int, int);
+    method public static void glBindRenderbufferOES(int, int);
+    method public static void glBlendEquationOES(int);
+    method public static void glBlendEquationSeparateOES(int, int);
+    method public static void glBlendFuncSeparateOES(int, int, int, int);
+    method public static int glCheckFramebufferStatusOES(int);
+    method public static void glClearColorxOES(int, int, int, int);
+    method public static void glClearDepthfOES(float);
+    method public static void glClearDepthxOES(int);
+    method public static void glClipPlanefOES(int, float[], int);
+    method public static void glClipPlanefOES(int, java.nio.FloatBuffer);
+    method public static void glClipPlanexOES(int, int[], int);
+    method public static void glClipPlanexOES(int, java.nio.IntBuffer);
+    method public static void glColor4xOES(int, int, int, int);
+    method public static void glCurrentPaletteMatrixOES(int);
+    method public static void glDeleteFramebuffersOES(int, int[], int);
+    method public static void glDeleteFramebuffersOES(int, java.nio.IntBuffer);
+    method public static void glDeleteRenderbuffersOES(int, int[], int);
+    method public static void glDeleteRenderbuffersOES(int, java.nio.IntBuffer);
+    method public static void glDepthRangefOES(float, float);
+    method public static void glDepthRangexOES(int, int);
+    method public static void glDrawTexfOES(float, float, float, float, float);
+    method public static void glDrawTexfvOES(float[], int);
+    method public static void glDrawTexfvOES(java.nio.FloatBuffer);
+    method public static void glDrawTexiOES(int, int, int, int, int);
+    method public static void glDrawTexivOES(int[], int);
+    method public static void glDrawTexivOES(java.nio.IntBuffer);
+    method public static void glDrawTexsOES(short, short, short, short, short);
+    method public static void glDrawTexsvOES(short[], int);
+    method public static void glDrawTexsvOES(java.nio.ShortBuffer);
+    method public static void glDrawTexxOES(int, int, int, int, int);
+    method public static void glDrawTexxvOES(int[], int);
+    method public static void glDrawTexxvOES(java.nio.IntBuffer);
+    method public static void glEGLImageTargetRenderbufferStorageOES(int, java.nio.Buffer);
+    method public static void glEGLImageTargetTexture2DOES(int, java.nio.Buffer);
+    method public static void glFogxOES(int, int);
+    method public static void glFogxvOES(int, int[], int);
+    method public static void glFogxvOES(int, java.nio.IntBuffer);
+    method public static void glFramebufferRenderbufferOES(int, int, int, int);
+    method public static void glFramebufferTexture2DOES(int, int, int, int, int);
+    method public static void glFrustumfOES(float, float, float, float, float, float);
+    method public static void glFrustumxOES(int, int, int, int, int, int);
+    method public static void glGenFramebuffersOES(int, int[], int);
+    method public static void glGenFramebuffersOES(int, java.nio.IntBuffer);
+    method public static void glGenRenderbuffersOES(int, int[], int);
+    method public static void glGenRenderbuffersOES(int, java.nio.IntBuffer);
+    method public static void glGenerateMipmapOES(int);
+    method public static void glGetClipPlanefOES(int, float[], int);
+    method public static void glGetClipPlanefOES(int, java.nio.FloatBuffer);
+    method public static void glGetClipPlanexOES(int, int[], int);
+    method public static void glGetClipPlanexOES(int, java.nio.IntBuffer);
+    method public static void glGetFixedvOES(int, int[], int);
+    method public static void glGetFixedvOES(int, java.nio.IntBuffer);
+    method public static void glGetFramebufferAttachmentParameterivOES(int, int, int, int[], int);
+    method public static void glGetFramebufferAttachmentParameterivOES(int, int, int, java.nio.IntBuffer);
+    method public static void glGetLightxvOES(int, int, int[], int);
+    method public static void glGetLightxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetMaterialxvOES(int, int, int[], int);
+    method public static void glGetMaterialxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetRenderbufferParameterivOES(int, int, int[], int);
+    method public static void glGetRenderbufferParameterivOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexEnvxvOES(int, int, int[], int);
+    method public static void glGetTexEnvxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexGenfvOES(int, int, float[], int);
+    method public static void glGetTexGenfvOES(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexGenivOES(int, int, int[], int);
+    method public static void glGetTexGenivOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexGenxvOES(int, int, int[], int);
+    method public static void glGetTexGenxvOES(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterxvOES(int, int, int[], int);
+    method public static void glGetTexParameterxvOES(int, int, java.nio.IntBuffer);
+    method public static boolean glIsFramebufferOES(int);
+    method public static boolean glIsRenderbufferOES(int);
+    method public static void glLightModelxOES(int, int);
+    method public static void glLightModelxvOES(int, int[], int);
+    method public static void glLightModelxvOES(int, java.nio.IntBuffer);
+    method public static void glLightxOES(int, int, int);
+    method public static void glLightxvOES(int, int, int[], int);
+    method public static void glLightxvOES(int, int, java.nio.IntBuffer);
+    method public static void glLineWidthxOES(int);
+    method public static void glLoadMatrixxOES(int[], int);
+    method public static void glLoadMatrixxOES(java.nio.IntBuffer);
+    method public static void glLoadPaletteFromModelViewMatrixOES();
+    method public static void glMaterialxOES(int, int, int);
+    method public static void glMaterialxvOES(int, int, int[], int);
+    method public static void glMaterialxvOES(int, int, java.nio.IntBuffer);
+    method public static void glMatrixIndexPointerOES(int, int, int, java.nio.Buffer);
+    method public static void glMultMatrixxOES(int[], int);
+    method public static void glMultMatrixxOES(java.nio.IntBuffer);
+    method public static void glMultiTexCoord4xOES(int, int, int, int, int);
+    method public static void glNormal3xOES(int, int, int);
+    method public static void glOrthofOES(float, float, float, float, float, float);
+    method public static void glOrthoxOES(int, int, int, int, int, int);
+    method public static void glPointParameterxOES(int, int);
+    method public static void glPointParameterxvOES(int, int[], int);
+    method public static void glPointParameterxvOES(int, java.nio.IntBuffer);
+    method public static void glPointSizexOES(int);
+    method public static void glPolygonOffsetxOES(int, int);
+    method public static void glRenderbufferStorageOES(int, int, int, int);
+    method public static void glRotatexOES(int, int, int, int);
+    method public static void glSampleCoveragexOES(int, boolean);
+    method public static void glScalexOES(int, int, int);
+    method public static void glTexEnvxOES(int, int, int);
+    method public static void glTexEnvxvOES(int, int, int[], int);
+    method public static void glTexEnvxvOES(int, int, java.nio.IntBuffer);
+    method public static void glTexGenfOES(int, int, float);
+    method public static void glTexGenfvOES(int, int, float[], int);
+    method public static void glTexGenfvOES(int, int, java.nio.FloatBuffer);
+    method public static void glTexGeniOES(int, int, int);
+    method public static void glTexGenivOES(int, int, int[], int);
+    method public static void glTexGenivOES(int, int, java.nio.IntBuffer);
+    method public static void glTexGenxOES(int, int, int);
+    method public static void glTexGenxvOES(int, int, int[], int);
+    method public static void glTexGenxvOES(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterxOES(int, int, int);
+    method public static void glTexParameterxvOES(int, int, int[], int);
+    method public static void glTexParameterxvOES(int, int, java.nio.IntBuffer);
+    method public static void glTranslatexOES(int, int, int);
+    method public static void glWeightPointerOES(int, int, int, java.nio.Buffer);
+    field public static final int GL_3DC_XY_AMD = 34810; // 0x87fa
+    field public static final int GL_3DC_X_AMD = 34809; // 0x87f9
+    field public static final int GL_ATC_RGBA_EXPLICIT_ALPHA_AMD = 35987; // 0x8c93
+    field public static final int GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 34798; // 0x87ee
+    field public static final int GL_ATC_RGB_AMD = 35986; // 0x8c92
+    field public static final int GL_BGRA = 32993; // 0x80e1
+    field public static final int GL_BLEND_DST_ALPHA_OES = 32970; // 0x80ca
+    field public static final int GL_BLEND_DST_RGB_OES = 32968; // 0x80c8
+    field public static final int GL_BLEND_EQUATION_ALPHA_OES = 34877; // 0x883d
+    field public static final int GL_BLEND_EQUATION_OES = 32777; // 0x8009
+    field public static final int GL_BLEND_EQUATION_RGB_OES = 32777; // 0x8009
+    field public static final int GL_BLEND_SRC_ALPHA_OES = 32971; // 0x80cb
+    field public static final int GL_BLEND_SRC_RGB_OES = 32969; // 0x80c9
+    field public static final int GL_BUFFER_ACCESS_OES = 35003; // 0x88bb
+    field public static final int GL_BUFFER_MAPPED_OES = 35004; // 0x88bc
+    field public static final int GL_BUFFER_MAP_POINTER_OES = 35005; // 0x88bd
+    field public static final int GL_COLOR_ATTACHMENT0_OES = 36064; // 0x8ce0
+    field public static final int GL_CURRENT_PALETTE_MATRIX_OES = 34883; // 0x8843
+    field public static final int GL_DECR_WRAP_OES = 34056; // 0x8508
+    field public static final int GL_DEPTH24_STENCIL8_OES = 35056; // 0x88f0
+    field public static final int GL_DEPTH_ATTACHMENT_OES = 36096; // 0x8d00
+    field public static final int GL_DEPTH_COMPONENT16_OES = 33189; // 0x81a5
+    field public static final int GL_DEPTH_COMPONENT24_OES = 33190; // 0x81a6
+    field public static final int GL_DEPTH_COMPONENT32_OES = 33191; // 0x81a7
+    field public static final int GL_DEPTH_STENCIL_OES = 34041; // 0x84f9
+    field public static final int GL_ETC1_RGB8_OES = 36196; // 0x8d64
+    field public static final int GL_FIXED_OES = 5132; // 0x140c
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 36049; // 0x8cd1
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 36048; // 0x8cd0
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 36051; // 0x8cd3
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 36050; // 0x8cd2
+    field public static final int GL_FRAMEBUFFER_BINDING_OES = 36006; // 0x8ca6
+    field public static final int GL_FRAMEBUFFER_COMPLETE_OES = 36053; // 0x8cd5
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 36054; // 0x8cd6
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 36057; // 0x8cd9
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 36058; // 0x8cda
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 36055; // 0x8cd7
+    field public static final int GL_FRAMEBUFFER_OES = 36160; // 0x8d40
+    field public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 36061; // 0x8cdd
+    field public static final int GL_FUNC_ADD_OES = 32774; // 0x8006
+    field public static final int GL_FUNC_REVERSE_SUBTRACT_OES = 32779; // 0x800b
+    field public static final int GL_FUNC_SUBTRACT_OES = 32778; // 0x800a
+    field public static final int GL_INCR_WRAP_OES = 34055; // 0x8507
+    field public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 1286; // 0x506
+    field public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 35742; // 0x8b9e
+    field public static final int GL_MATRIX_INDEX_ARRAY_OES = 34884; // 0x8844
+    field public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 34889; // 0x8849
+    field public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 34886; // 0x8846
+    field public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 34888; // 0x8848
+    field public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 34887; // 0x8847
+    field public static final int GL_MATRIX_PALETTE_OES = 34880; // 0x8840
+    field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES = 34076; // 0x851c
+    field public static final int GL_MAX_PALETTE_MATRICES_OES = 34882; // 0x8842
+    field public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 34024; // 0x84e8
+    field public static final int GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047; // 0x84ff
+    field public static final int GL_MAX_VERTEX_UNITS_OES = 34468; // 0x86a4
+    field public static final int GL_MIRRORED_REPEAT_OES = 33648; // 0x8370
+    field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d
+    field public static final int GL_NONE_OES = 0; // 0x0
+    field public static final int GL_NORMAL_MAP_OES = 34065; // 0x8511
+    field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e
+    field public static final int GL_REFLECTION_MAP_OES = 34066; // 0x8512
+    field public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 36179; // 0x8d53
+    field public static final int GL_RENDERBUFFER_BINDING_OES = 36007; // 0x8ca7
+    field public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 36178; // 0x8d52
+    field public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 36180; // 0x8d54
+    field public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 36177; // 0x8d51
+    field public static final int GL_RENDERBUFFER_HEIGHT_OES = 36163; // 0x8d43
+    field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 36164; // 0x8d44
+    field public static final int GL_RENDERBUFFER_OES = 36161; // 0x8d41
+    field public static final int GL_RENDERBUFFER_RED_SIZE_OES = 36176; // 0x8d50
+    field public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 36181; // 0x8d55
+    field public static final int GL_RENDERBUFFER_WIDTH_OES = 36162; // 0x8d42
+    field public static final int GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES = 36200; // 0x8d68
+    field public static final int GL_RGB565_OES = 36194; // 0x8d62
+    field public static final int GL_RGB5_A1_OES = 32855; // 0x8057
+    field public static final int GL_RGB8_OES = 32849; // 0x8051
+    field public static final int GL_RGBA4_OES = 32854; // 0x8056
+    field public static final int GL_RGBA8_OES = 32856; // 0x8058
+    field public static final int GL_SAMPLER_EXTERNAL_OES = 36198; // 0x8d66
+    field public static final int GL_STENCIL_ATTACHMENT_OES = 36128; // 0x8d20
+    field public static final int GL_STENCIL_INDEX1_OES = 36166; // 0x8d46
+    field public static final int GL_STENCIL_INDEX4_OES = 36167; // 0x8d47
+    field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP_OES = 34068; // 0x8514
+    field public static final int GL_TEXTURE_BINDING_EXTERNAL_OES = 36199; // 0x8d67
+    field public static final int GL_TEXTURE_CROP_RECT_OES = 35741; // 0x8b9d
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES = 34070; // 0x8516
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES = 34072; // 0x8518
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES = 34074; // 0x851a
+    field public static final int GL_TEXTURE_CUBE_MAP_OES = 34067; // 0x8513
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES = 34069; // 0x8515
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES = 34071; // 0x8517
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES = 34073; // 0x8519
+    field public static final int GL_TEXTURE_EXTERNAL_OES = 36197; // 0x8d65
+    field public static final int GL_TEXTURE_GEN_MODE_OES = 9472; // 0x2500
+    field public static final int GL_TEXTURE_GEN_STR_OES = 36192; // 0x8d60
+    field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f
+    field public static final int GL_TEXTURE_MAX_ANISOTROPY_EXT = 34046; // 0x84fe
+    field public static final int GL_UNSIGNED_INT_24_8_OES = 34042; // 0x84fa
+    field public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 34974; // 0x889e
+    field public static final int GL_WEIGHT_ARRAY_OES = 34477; // 0x86ad
+    field public static final int GL_WEIGHT_ARRAY_POINTER_OES = 34476; // 0x86ac
+    field public static final int GL_WEIGHT_ARRAY_SIZE_OES = 34475; // 0x86ab
+    field public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 34474; // 0x86aa
+    field public static final int GL_WEIGHT_ARRAY_TYPE_OES = 34473; // 0x86a9
+    field public static final int GL_WRITE_ONLY_OES = 35001; // 0x88b9
+  }
+
+  public class GLES20 {
+    ctor public GLES20();
+    method public static void glActiveTexture(int);
+    method public static void glAttachShader(int, int);
+    method public static void glBindAttribLocation(int, int, String);
+    method public static void glBindBuffer(int, int);
+    method public static void glBindFramebuffer(int, int);
+    method public static void glBindRenderbuffer(int, int);
+    method public static void glBindTexture(int, int);
+    method public static void glBlendColor(float, float, float, float);
+    method public static void glBlendEquation(int);
+    method public static void glBlendEquationSeparate(int, int);
+    method public static void glBlendFunc(int, int);
+    method public static void glBlendFuncSeparate(int, int, int, int);
+    method public static void glBufferData(int, int, java.nio.Buffer, int);
+    method public static void glBufferSubData(int, int, int, java.nio.Buffer);
+    method public static int glCheckFramebufferStatus(int);
+    method public static void glClear(int);
+    method public static void glClearColor(float, float, float, float);
+    method public static void glClearDepthf(float);
+    method public static void glClearStencil(int);
+    method public static void glColorMask(boolean, boolean, boolean, boolean);
+    method public static void glCompileShader(int);
+    method public static void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public static void glCopyTexSubImage2D(int, int, int, int, int, int, int, int);
+    method public static int glCreateProgram();
+    method public static int glCreateShader(int);
+    method public static void glCullFace(int);
+    method public static void glDeleteBuffers(int, int[], int);
+    method public static void glDeleteBuffers(int, java.nio.IntBuffer);
+    method public static void glDeleteFramebuffers(int, int[], int);
+    method public static void glDeleteFramebuffers(int, java.nio.IntBuffer);
+    method public static void glDeleteProgram(int);
+    method public static void glDeleteRenderbuffers(int, int[], int);
+    method public static void glDeleteRenderbuffers(int, java.nio.IntBuffer);
+    method public static void glDeleteShader(int);
+    method public static void glDeleteTextures(int, int[], int);
+    method public static void glDeleteTextures(int, java.nio.IntBuffer);
+    method public static void glDepthFunc(int);
+    method public static void glDepthMask(boolean);
+    method public static void glDepthRangef(float, float);
+    method public static void glDetachShader(int, int);
+    method public static void glDisable(int);
+    method public static void glDisableVertexAttribArray(int);
+    method public static void glDrawArrays(int, int, int);
+    method public static void glDrawElements(int, int, int, int);
+    method public static void glDrawElements(int, int, int, java.nio.Buffer);
+    method public static void glEnable(int);
+    method public static void glEnableVertexAttribArray(int);
+    method public static void glFinish();
+    method public static void glFlush();
+    method public static void glFramebufferRenderbuffer(int, int, int, int);
+    method public static void glFramebufferTexture2D(int, int, int, int, int);
+    method public static void glFrontFace(int);
+    method public static void glGenBuffers(int, int[], int);
+    method public static void glGenBuffers(int, java.nio.IntBuffer);
+    method public static void glGenFramebuffers(int, int[], int);
+    method public static void glGenFramebuffers(int, java.nio.IntBuffer);
+    method public static void glGenRenderbuffers(int, int[], int);
+    method public static void glGenRenderbuffers(int, java.nio.IntBuffer);
+    method public static void glGenTextures(int, int[], int);
+    method public static void glGenTextures(int, java.nio.IntBuffer);
+    method public static void glGenerateMipmap(int);
+    method public static void glGetActiveAttrib(int, int, int, int[], int, int[], int, int[], int, byte[], int);
+    method public static String glGetActiveAttrib(int, int, int[], int, int[], int);
+    method public static String glGetActiveAttrib(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetActiveUniform(int, int, int, int[], int, int[], int, int[], int, byte[], int);
+    method public static String glGetActiveUniform(int, int, int[], int, int[], int);
+    method public static String glGetActiveUniform(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetAttachedShaders(int, int, int[], int, int[], int);
+    method public static void glGetAttachedShaders(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static int glGetAttribLocation(int, String);
+    method public static void glGetBooleanv(int, boolean[], int);
+    method public static void glGetBooleanv(int, java.nio.IntBuffer);
+    method public static void glGetBufferParameteriv(int, int, int[], int);
+    method public static void glGetBufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static int glGetError();
+    method public static void glGetFloatv(int, float[], int);
+    method public static void glGetFloatv(int, java.nio.FloatBuffer);
+    method public static void glGetFramebufferAttachmentParameteriv(int, int, int, int[], int);
+    method public static void glGetFramebufferAttachmentParameteriv(int, int, int, java.nio.IntBuffer);
+    method public static void glGetIntegerv(int, int[], int);
+    method public static void glGetIntegerv(int, java.nio.IntBuffer);
+    method public static String glGetProgramInfoLog(int);
+    method public static void glGetProgramiv(int, int, int[], int);
+    method public static void glGetProgramiv(int, int, java.nio.IntBuffer);
+    method public static void glGetRenderbufferParameteriv(int, int, int[], int);
+    method public static void glGetRenderbufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static String glGetShaderInfoLog(int);
+    method public static void glGetShaderPrecisionFormat(int, int, int[], int, int[], int);
+    method public static void glGetShaderPrecisionFormat(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetShaderSource(int, int, int[], int, byte[], int);
+    method public static String glGetShaderSource(int);
+    method public static void glGetShaderiv(int, int, int[], int);
+    method public static void glGetShaderiv(int, int, java.nio.IntBuffer);
+    method public static String glGetString(int);
+    method public static void glGetTexParameterfv(int, int, float[], int);
+    method public static void glGetTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetTexParameteriv(int, int, int[], int);
+    method public static void glGetTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static int glGetUniformLocation(int, String);
+    method public static void glGetUniformfv(int, int, float[], int);
+    method public static void glGetUniformfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetUniformiv(int, int, int[], int);
+    method public static void glGetUniformiv(int, int, java.nio.IntBuffer);
+    method public static void glGetVertexAttribfv(int, int, float[], int);
+    method public static void glGetVertexAttribfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetVertexAttribiv(int, int, int[], int);
+    method public static void glGetVertexAttribiv(int, int, java.nio.IntBuffer);
+    method public static void glHint(int, int);
+    method public static boolean glIsBuffer(int);
+    method public static boolean glIsEnabled(int);
+    method public static boolean glIsFramebuffer(int);
+    method public static boolean glIsProgram(int);
+    method public static boolean glIsRenderbuffer(int);
+    method public static boolean glIsShader(int);
+    method public static boolean glIsTexture(int);
+    method public static void glLineWidth(float);
+    method public static void glLinkProgram(int);
+    method public static void glPixelStorei(int, int);
+    method public static void glPolygonOffset(float, float);
+    method public static void glReadPixels(int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glReleaseShaderCompiler();
+    method public static void glRenderbufferStorage(int, int, int, int);
+    method public static void glSampleCoverage(float, boolean);
+    method public static void glScissor(int, int, int, int);
+    method public static void glShaderBinary(int, int[], int, int, java.nio.Buffer, int);
+    method public static void glShaderBinary(int, java.nio.IntBuffer, int, java.nio.Buffer, int);
+    method public static void glShaderSource(int, String);
+    method public static void glStencilFunc(int, int, int);
+    method public static void glStencilFuncSeparate(int, int, int, int);
+    method public static void glStencilMask(int);
+    method public static void glStencilMaskSeparate(int, int);
+    method public static void glStencilOp(int, int, int);
+    method public static void glStencilOpSeparate(int, int, int, int);
+    method public static void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexParameterf(int, int, float);
+    method public static void glTexParameterfv(int, int, float[], int);
+    method public static void glTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glTexParameteri(int, int, int);
+    method public static void glTexParameteriv(int, int, int[], int);
+    method public static void glTexParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glUniform1f(int, float);
+    method public static void glUniform1fv(int, int, float[], int);
+    method public static void glUniform1fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform1i(int, int);
+    method public static void glUniform1iv(int, int, int[], int);
+    method public static void glUniform1iv(int, int, java.nio.IntBuffer);
+    method public static void glUniform2f(int, float, float);
+    method public static void glUniform2fv(int, int, float[], int);
+    method public static void glUniform2fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform2i(int, int, int);
+    method public static void glUniform2iv(int, int, int[], int);
+    method public static void glUniform2iv(int, int, java.nio.IntBuffer);
+    method public static void glUniform3f(int, float, float, float);
+    method public static void glUniform3fv(int, int, float[], int);
+    method public static void glUniform3fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform3i(int, int, int, int);
+    method public static void glUniform3iv(int, int, int[], int);
+    method public static void glUniform3iv(int, int, java.nio.IntBuffer);
+    method public static void glUniform4f(int, float, float, float, float);
+    method public static void glUniform4fv(int, int, float[], int);
+    method public static void glUniform4fv(int, int, java.nio.FloatBuffer);
+    method public static void glUniform4i(int, int, int, int, int);
+    method public static void glUniform4iv(int, int, int[], int);
+    method public static void glUniform4iv(int, int, java.nio.IntBuffer);
+    method public static void glUniformMatrix2fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix2fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix3fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix3fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix4fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix4fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUseProgram(int);
+    method public static void glValidateProgram(int);
+    method public static void glVertexAttrib1f(int, float);
+    method public static void glVertexAttrib1fv(int, float[], int);
+    method public static void glVertexAttrib1fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttrib2f(int, float, float);
+    method public static void glVertexAttrib2fv(int, float[], int);
+    method public static void glVertexAttrib2fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttrib3f(int, float, float, float);
+    method public static void glVertexAttrib3fv(int, float[], int);
+    method public static void glVertexAttrib3fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttrib4f(int, float, float, float, float);
+    method public static void glVertexAttrib4fv(int, float[], int);
+    method public static void glVertexAttrib4fv(int, java.nio.FloatBuffer);
+    method public static void glVertexAttribPointer(int, int, int, boolean, int, int);
+    method public static void glVertexAttribPointer(int, int, int, boolean, int, java.nio.Buffer);
+    method public static void glViewport(int, int, int, int);
+    field public static final int GL_ACTIVE_ATTRIBUTES = 35721; // 0x8b89
+    field public static final int GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = 35722; // 0x8b8a
+    field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0
+    field public static final int GL_ACTIVE_UNIFORMS = 35718; // 0x8b86
+    field public static final int GL_ACTIVE_UNIFORM_MAX_LENGTH = 35719; // 0x8b87
+    field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e
+    field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d
+    field public static final int GL_ALPHA = 6406; // 0x1906
+    field public static final int GL_ALPHA_BITS = 3413; // 0xd55
+    field public static final int GL_ALWAYS = 519; // 0x207
+    field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892
+    field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894
+    field public static final int GL_ATTACHED_SHADERS = 35717; // 0x8b85
+    field public static final int GL_BACK = 1029; // 0x405
+    field public static final int GL_BLEND = 3042; // 0xbe2
+    field public static final int GL_BLEND_COLOR = 32773; // 0x8005
+    field public static final int GL_BLEND_DST_ALPHA = 32970; // 0x80ca
+    field public static final int GL_BLEND_DST_RGB = 32968; // 0x80c8
+    field public static final int GL_BLEND_EQUATION = 32777; // 0x8009
+    field public static final int GL_BLEND_EQUATION_ALPHA = 34877; // 0x883d
+    field public static final int GL_BLEND_EQUATION_RGB = 32777; // 0x8009
+    field public static final int GL_BLEND_SRC_ALPHA = 32971; // 0x80cb
+    field public static final int GL_BLEND_SRC_RGB = 32969; // 0x80c9
+    field public static final int GL_BLUE_BITS = 3412; // 0xd54
+    field public static final int GL_BOOL = 35670; // 0x8b56
+    field public static final int GL_BOOL_VEC2 = 35671; // 0x8b57
+    field public static final int GL_BOOL_VEC3 = 35672; // 0x8b58
+    field public static final int GL_BOOL_VEC4 = 35673; // 0x8b59
+    field public static final int GL_BUFFER_SIZE = 34660; // 0x8764
+    field public static final int GL_BUFFER_USAGE = 34661; // 0x8765
+    field public static final int GL_BYTE = 5120; // 0x1400
+    field public static final int GL_CCW = 2305; // 0x901
+    field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f
+    field public static final int GL_COLOR_ATTACHMENT0 = 36064; // 0x8ce0
+    field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000
+    field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22
+    field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23
+    field public static final int GL_COMPILE_STATUS = 35713; // 0x8b81
+    field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3
+    field public static final int GL_CONSTANT_ALPHA = 32771; // 0x8003
+    field public static final int GL_CONSTANT_COLOR = 32769; // 0x8001
+    field public static final int GL_CULL_FACE = 2884; // 0xb44
+    field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45
+    field public static final int GL_CURRENT_PROGRAM = 35725; // 0x8b8d
+    field public static final int GL_CURRENT_VERTEX_ATTRIB = 34342; // 0x8626
+    field public static final int GL_CW = 2304; // 0x900
+    field public static final int GL_DECR = 7683; // 0x1e03
+    field public static final int GL_DECR_WRAP = 34056; // 0x8508
+    field public static final int GL_DELETE_STATUS = 35712; // 0x8b80
+    field public static final int GL_DEPTH_ATTACHMENT = 36096; // 0x8d00
+    field public static final int GL_DEPTH_BITS = 3414; // 0xd56
+    field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100
+    field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73
+    field public static final int GL_DEPTH_COMPONENT = 6402; // 0x1902
+    field public static final int GL_DEPTH_COMPONENT16 = 33189; // 0x81a5
+    field public static final int GL_DEPTH_FUNC = 2932; // 0xb74
+    field public static final int GL_DEPTH_RANGE = 2928; // 0xb70
+    field public static final int GL_DEPTH_TEST = 2929; // 0xb71
+    field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72
+    field public static final int GL_DITHER = 3024; // 0xbd0
+    field public static final int GL_DONT_CARE = 4352; // 0x1100
+    field public static final int GL_DST_ALPHA = 772; // 0x304
+    field public static final int GL_DST_COLOR = 774; // 0x306
+    field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8
+    field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893
+    field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895
+    field public static final int GL_EQUAL = 514; // 0x202
+    field public static final int GL_EXTENSIONS = 7939; // 0x1f03
+    field public static final int GL_FALSE = 0; // 0x0
+    field public static final int GL_FASTEST = 4353; // 0x1101
+    field public static final int GL_FIXED = 5132; // 0x140c
+    field public static final int GL_FLOAT = 5126; // 0x1406
+    field public static final int GL_FLOAT_MAT2 = 35674; // 0x8b5a
+    field public static final int GL_FLOAT_MAT3 = 35675; // 0x8b5b
+    field public static final int GL_FLOAT_MAT4 = 35676; // 0x8b5c
+    field public static final int GL_FLOAT_VEC2 = 35664; // 0x8b50
+    field public static final int GL_FLOAT_VEC3 = 35665; // 0x8b51
+    field public static final int GL_FLOAT_VEC4 = 35666; // 0x8b52
+    field public static final int GL_FRAGMENT_SHADER = 35632; // 0x8b30
+    field public static final int GL_FRAMEBUFFER = 36160; // 0x8d40
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 36049; // 0x8cd1
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 36048; // 0x8cd0
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 36051; // 0x8cd3
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 36050; // 0x8cd2
+    field public static final int GL_FRAMEBUFFER_BINDING = 36006; // 0x8ca6
+    field public static final int GL_FRAMEBUFFER_COMPLETE = 36053; // 0x8cd5
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 36054; // 0x8cd6
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 36057; // 0x8cd9
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 36055; // 0x8cd7
+    field public static final int GL_FRAMEBUFFER_UNSUPPORTED = 36061; // 0x8cdd
+    field public static final int GL_FRONT = 1028; // 0x404
+    field public static final int GL_FRONT_AND_BACK = 1032; // 0x408
+    field public static final int GL_FRONT_FACE = 2886; // 0xb46
+    field public static final int GL_FUNC_ADD = 32774; // 0x8006
+    field public static final int GL_FUNC_REVERSE_SUBTRACT = 32779; // 0x800b
+    field public static final int GL_FUNC_SUBTRACT = 32778; // 0x800a
+    field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192
+    field public static final int GL_GEQUAL = 518; // 0x206
+    field public static final int GL_GREATER = 516; // 0x204
+    field public static final int GL_GREEN_BITS = 3411; // 0xd53
+    field public static final int GL_HIGH_FLOAT = 36338; // 0x8df2
+    field public static final int GL_HIGH_INT = 36341; // 0x8df5
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT = 35739; // 0x8b9b
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE = 35738; // 0x8b9a
+    field public static final int GL_INCR = 7682; // 0x1e02
+    field public static final int GL_INCR_WRAP = 34055; // 0x8507
+    field public static final int GL_INFO_LOG_LENGTH = 35716; // 0x8b84
+    field public static final int GL_INT = 5124; // 0x1404
+    field public static final int GL_INT_VEC2 = 35667; // 0x8b53
+    field public static final int GL_INT_VEC3 = 35668; // 0x8b54
+    field public static final int GL_INT_VEC4 = 35669; // 0x8b55
+    field public static final int GL_INVALID_ENUM = 1280; // 0x500
+    field public static final int GL_INVALID_FRAMEBUFFER_OPERATION = 1286; // 0x506
+    field public static final int GL_INVALID_OPERATION = 1282; // 0x502
+    field public static final int GL_INVALID_VALUE = 1281; // 0x501
+    field public static final int GL_INVERT = 5386; // 0x150a
+    field public static final int GL_KEEP = 7680; // 0x1e00
+    field public static final int GL_LEQUAL = 515; // 0x203
+    field public static final int GL_LESS = 513; // 0x201
+    field public static final int GL_LINEAR = 9729; // 0x2601
+    field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703
+    field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701
+    field public static final int GL_LINES = 1; // 0x1
+    field public static final int GL_LINE_LOOP = 2; // 0x2
+    field public static final int GL_LINE_STRIP = 3; // 0x3
+    field public static final int GL_LINE_WIDTH = 2849; // 0xb21
+    field public static final int GL_LINK_STATUS = 35714; // 0x8b82
+    field public static final int GL_LOW_FLOAT = 36336; // 0x8df0
+    field public static final int GL_LOW_INT = 36339; // 0x8df3
+    field public static final int GL_LUMINANCE = 6409; // 0x1909
+    field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a
+    field public static final int GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661; // 0x8b4d
+    field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076; // 0x851c
+    field public static final int GL_MAX_FRAGMENT_UNIFORM_VECTORS = 36349; // 0x8dfd
+    field public static final int GL_MAX_RENDERBUFFER_SIZE = 34024; // 0x84e8
+    field public static final int GL_MAX_TEXTURE_IMAGE_UNITS = 34930; // 0x8872
+    field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33
+    field public static final int GL_MAX_VARYING_VECTORS = 36348; // 0x8dfc
+    field public static final int GL_MAX_VERTEX_ATTRIBS = 34921; // 0x8869
+    field public static final int GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660; // 0x8b4c
+    field public static final int GL_MAX_VERTEX_UNIFORM_VECTORS = 36347; // 0x8dfb
+    field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a
+    field public static final int GL_MEDIUM_FLOAT = 36337; // 0x8df1
+    field public static final int GL_MEDIUM_INT = 36340; // 0x8df4
+    field public static final int GL_MIRRORED_REPEAT = 33648; // 0x8370
+    field public static final int GL_NEAREST = 9728; // 0x2600
+    field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702
+    field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700
+    field public static final int GL_NEVER = 512; // 0x200
+    field public static final int GL_NICEST = 4354; // 0x1102
+    field public static final int GL_NONE = 0; // 0x0
+    field public static final int GL_NOTEQUAL = 517; // 0x205
+    field public static final int GL_NO_ERROR = 0; // 0x0
+    field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2
+    field public static final int GL_NUM_SHADER_BINARY_FORMATS = 36345; // 0x8df9
+    field public static final int GL_ONE = 1; // 0x1
+    field public static final int GL_ONE_MINUS_CONSTANT_ALPHA = 32772; // 0x8004
+    field public static final int GL_ONE_MINUS_CONSTANT_COLOR = 32770; // 0x8002
+    field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305
+    field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307
+    field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303
+    field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301
+    field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505
+    field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05
+    field public static final int GL_POINTS = 0; // 0x0
+    field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038
+    field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037
+    field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00
+    field public static final int GL_RED_BITS = 3410; // 0xd52
+    field public static final int GL_RENDERBUFFER = 36161; // 0x8d41
+    field public static final int GL_RENDERBUFFER_ALPHA_SIZE = 36179; // 0x8d53
+    field public static final int GL_RENDERBUFFER_BINDING = 36007; // 0x8ca7
+    field public static final int GL_RENDERBUFFER_BLUE_SIZE = 36178; // 0x8d52
+    field public static final int GL_RENDERBUFFER_DEPTH_SIZE = 36180; // 0x8d54
+    field public static final int GL_RENDERBUFFER_GREEN_SIZE = 36177; // 0x8d51
+    field public static final int GL_RENDERBUFFER_HEIGHT = 36163; // 0x8d43
+    field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT = 36164; // 0x8d44
+    field public static final int GL_RENDERBUFFER_RED_SIZE = 36176; // 0x8d50
+    field public static final int GL_RENDERBUFFER_STENCIL_SIZE = 36181; // 0x8d55
+    field public static final int GL_RENDERBUFFER_WIDTH = 36162; // 0x8d42
+    field public static final int GL_RENDERER = 7937; // 0x1f01
+    field public static final int GL_REPEAT = 10497; // 0x2901
+    field public static final int GL_REPLACE = 7681; // 0x1e01
+    field public static final int GL_RGB = 6407; // 0x1907
+    field public static final int GL_RGB565 = 36194; // 0x8d62
+    field public static final int GL_RGB5_A1 = 32855; // 0x8057
+    field public static final int GL_RGBA = 6408; // 0x1908
+    field public static final int GL_RGBA4 = 32854; // 0x8056
+    field public static final int GL_SAMPLER_2D = 35678; // 0x8b5e
+    field public static final int GL_SAMPLER_CUBE = 35680; // 0x8b60
+    field public static final int GL_SAMPLES = 32937; // 0x80a9
+    field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e
+    field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8
+    field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0
+    field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab
+    field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa
+    field public static final int GL_SCISSOR_BOX = 3088; // 0xc10
+    field public static final int GL_SCISSOR_TEST = 3089; // 0xc11
+    field public static final int GL_SHADER_BINARY_FORMATS = 36344; // 0x8df8
+    field public static final int GL_SHADER_COMPILER = 36346; // 0x8dfa
+    field public static final int GL_SHADER_SOURCE_LENGTH = 35720; // 0x8b88
+    field public static final int GL_SHADER_TYPE = 35663; // 0x8b4f
+    field public static final int GL_SHADING_LANGUAGE_VERSION = 35724; // 0x8b8c
+    field public static final int GL_SHORT = 5122; // 0x1402
+    field public static final int GL_SRC_ALPHA = 770; // 0x302
+    field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308
+    field public static final int GL_SRC_COLOR = 768; // 0x300
+    field public static final int GL_STATIC_DRAW = 35044; // 0x88e4
+    field public static final int GL_STENCIL_ATTACHMENT = 36128; // 0x8d20
+    field public static final int GL_STENCIL_BACK_FAIL = 34817; // 0x8801
+    field public static final int GL_STENCIL_BACK_FUNC = 34816; // 0x8800
+    field public static final int GL_STENCIL_BACK_PASS_DEPTH_FAIL = 34818; // 0x8802
+    field public static final int GL_STENCIL_BACK_PASS_DEPTH_PASS = 34819; // 0x8803
+    field public static final int GL_STENCIL_BACK_REF = 36003; // 0x8ca3
+    field public static final int GL_STENCIL_BACK_VALUE_MASK = 36004; // 0x8ca4
+    field public static final int GL_STENCIL_BACK_WRITEMASK = 36005; // 0x8ca5
+    field public static final int GL_STENCIL_BITS = 3415; // 0xd57
+    field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400
+    field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91
+    field public static final int GL_STENCIL_FAIL = 2964; // 0xb94
+    field public static final int GL_STENCIL_FUNC = 2962; // 0xb92
+    field @Deprecated public static final int GL_STENCIL_INDEX = 6401; // 0x1901
+    field public static final int GL_STENCIL_INDEX8 = 36168; // 0x8d48
+    field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95
+    field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96
+    field public static final int GL_STENCIL_REF = 2967; // 0xb97
+    field public static final int GL_STENCIL_TEST = 2960; // 0xb90
+    field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93
+    field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98
+    field public static final int GL_STREAM_DRAW = 35040; // 0x88e0
+    field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50
+    field public static final int GL_TEXTURE = 5890; // 0x1702
+    field public static final int GL_TEXTURE0 = 33984; // 0x84c0
+    field public static final int GL_TEXTURE1 = 33985; // 0x84c1
+    field public static final int GL_TEXTURE10 = 33994; // 0x84ca
+    field public static final int GL_TEXTURE11 = 33995; // 0x84cb
+    field public static final int GL_TEXTURE12 = 33996; // 0x84cc
+    field public static final int GL_TEXTURE13 = 33997; // 0x84cd
+    field public static final int GL_TEXTURE14 = 33998; // 0x84ce
+    field public static final int GL_TEXTURE15 = 33999; // 0x84cf
+    field public static final int GL_TEXTURE16 = 34000; // 0x84d0
+    field public static final int GL_TEXTURE17 = 34001; // 0x84d1
+    field public static final int GL_TEXTURE18 = 34002; // 0x84d2
+    field public static final int GL_TEXTURE19 = 34003; // 0x84d3
+    field public static final int GL_TEXTURE2 = 33986; // 0x84c2
+    field public static final int GL_TEXTURE20 = 34004; // 0x84d4
+    field public static final int GL_TEXTURE21 = 34005; // 0x84d5
+    field public static final int GL_TEXTURE22 = 34006; // 0x84d6
+    field public static final int GL_TEXTURE23 = 34007; // 0x84d7
+    field public static final int GL_TEXTURE24 = 34008; // 0x84d8
+    field public static final int GL_TEXTURE25 = 34009; // 0x84d9
+    field public static final int GL_TEXTURE26 = 34010; // 0x84da
+    field public static final int GL_TEXTURE27 = 34011; // 0x84db
+    field public static final int GL_TEXTURE28 = 34012; // 0x84dc
+    field public static final int GL_TEXTURE29 = 34013; // 0x84dd
+    field public static final int GL_TEXTURE3 = 33987; // 0x84c3
+    field public static final int GL_TEXTURE30 = 34014; // 0x84de
+    field public static final int GL_TEXTURE31 = 34015; // 0x84df
+    field public static final int GL_TEXTURE4 = 33988; // 0x84c4
+    field public static final int GL_TEXTURE5 = 33989; // 0x84c5
+    field public static final int GL_TEXTURE6 = 33990; // 0x84c6
+    field public static final int GL_TEXTURE7 = 33991; // 0x84c7
+    field public static final int GL_TEXTURE8 = 33992; // 0x84c8
+    field public static final int GL_TEXTURE9 = 33993; // 0x84c9
+    field public static final int GL_TEXTURE_2D = 3553; // 0xde1
+    field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP = 34068; // 0x8514
+    field public static final int GL_TEXTURE_CUBE_MAP = 34067; // 0x8513
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070; // 0x8516
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072; // 0x8518
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074; // 0x851a
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069; // 0x8515
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071; // 0x8517
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073; // 0x8519
+    field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800
+    field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801
+    field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802
+    field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803
+    field public static final int GL_TRIANGLES = 4; // 0x4
+    field public static final int GL_TRIANGLE_FAN = 6; // 0x6
+    field public static final int GL_TRIANGLE_STRIP = 5; // 0x5
+    field public static final int GL_TRUE = 1; // 0x1
+    field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5
+    field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401
+    field public static final int GL_UNSIGNED_INT = 5125; // 0x1405
+    field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403
+    field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033
+    field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034
+    field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363
+    field public static final int GL_VALIDATE_STATUS = 35715; // 0x8b83
+    field public static final int GL_VENDOR = 7936; // 0x1f00
+    field public static final int GL_VERSION = 7938; // 0x1f02
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975; // 0x889f
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_ENABLED = 34338; // 0x8622
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922; // 0x886a
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_POINTER = 34373; // 0x8645
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_SIZE = 34339; // 0x8623
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_STRIDE = 34340; // 0x8624
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_TYPE = 34341; // 0x8625
+    field public static final int GL_VERTEX_SHADER = 35633; // 0x8b31
+    field public static final int GL_VIEWPORT = 2978; // 0xba2
+    field public static final int GL_ZERO = 0; // 0x0
+  }
+
+  public class GLES30 extends android.opengl.GLES20 {
+    ctor public GLES30();
+    method public static void glBeginQuery(int, int);
+    method public static void glBeginTransformFeedback(int);
+    method public static void glBindBufferBase(int, int, int);
+    method public static void glBindBufferRange(int, int, int, int, int);
+    method public static void glBindSampler(int, int);
+    method public static void glBindTransformFeedback(int, int);
+    method public static void glBindVertexArray(int);
+    method public static void glBlitFramebuffer(int, int, int, int, int, int, int, int, int, int);
+    method public static void glClearBufferfi(int, int, float, int);
+    method public static void glClearBufferfv(int, int, float[], int);
+    method public static void glClearBufferfv(int, int, java.nio.FloatBuffer);
+    method public static void glClearBufferiv(int, int, int[], int);
+    method public static void glClearBufferiv(int, int, java.nio.IntBuffer);
+    method public static void glClearBufferuiv(int, int, int[], int);
+    method public static void glClearBufferuiv(int, int, java.nio.IntBuffer);
+    method public static int glClientWaitSync(long, int, long);
+    method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexImage3D(int, int, int, int, int, int, int, int, int);
+    method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glCompressedTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glCopyBufferSubData(int, int, int, int, int);
+    method public static void glCopyTexSubImage3D(int, int, int, int, int, int, int, int, int);
+    method public static void glDeleteQueries(int, int[], int);
+    method public static void glDeleteQueries(int, java.nio.IntBuffer);
+    method public static void glDeleteSamplers(int, int[], int);
+    method public static void glDeleteSamplers(int, java.nio.IntBuffer);
+    method public static void glDeleteSync(long);
+    method public static void glDeleteTransformFeedbacks(int, int[], int);
+    method public static void glDeleteTransformFeedbacks(int, java.nio.IntBuffer);
+    method public static void glDeleteVertexArrays(int, int[], int);
+    method public static void glDeleteVertexArrays(int, java.nio.IntBuffer);
+    method public static void glDrawArraysInstanced(int, int, int, int);
+    method public static void glDrawBuffers(int, int[], int);
+    method public static void glDrawBuffers(int, java.nio.IntBuffer);
+    method public static void glDrawElementsInstanced(int, int, int, java.nio.Buffer, int);
+    method public static void glDrawElementsInstanced(int, int, int, int, int);
+    method public static void glDrawRangeElements(int, int, int, int, int, java.nio.Buffer);
+    method public static void glDrawRangeElements(int, int, int, int, int, int);
+    method public static void glEndQuery(int);
+    method public static void glEndTransformFeedback();
+    method public static long glFenceSync(int, int);
+    method public static void glFlushMappedBufferRange(int, int, int);
+    method public static void glFramebufferTextureLayer(int, int, int, int, int);
+    method public static void glGenQueries(int, int[], int);
+    method public static void glGenQueries(int, java.nio.IntBuffer);
+    method public static void glGenSamplers(int, int[], int);
+    method public static void glGenSamplers(int, java.nio.IntBuffer);
+    method public static void glGenTransformFeedbacks(int, int[], int);
+    method public static void glGenTransformFeedbacks(int, java.nio.IntBuffer);
+    method public static void glGenVertexArrays(int, int[], int);
+    method public static void glGenVertexArrays(int, java.nio.IntBuffer);
+    method public static void glGetActiveUniformBlockName(int, int, int, int[], int, byte[], int);
+    method public static void glGetActiveUniformBlockName(int, int, java.nio.Buffer, java.nio.Buffer);
+    method public static String glGetActiveUniformBlockName(int, int);
+    method public static void glGetActiveUniformBlockiv(int, int, int, int[], int);
+    method public static void glGetActiveUniformBlockiv(int, int, int, java.nio.IntBuffer);
+    method public static void glGetActiveUniformsiv(int, int, int[], int, int, int[], int);
+    method public static void glGetActiveUniformsiv(int, int, java.nio.IntBuffer, int, java.nio.IntBuffer);
+    method public static void glGetBufferParameteri64v(int, int, long[], int);
+    method public static void glGetBufferParameteri64v(int, int, java.nio.LongBuffer);
+    method public static java.nio.Buffer glGetBufferPointerv(int, int);
+    method public static int glGetFragDataLocation(int, String);
+    method public static void glGetInteger64i_v(int, int, long[], int);
+    method public static void glGetInteger64i_v(int, int, java.nio.LongBuffer);
+    method public static void glGetInteger64v(int, long[], int);
+    method public static void glGetInteger64v(int, java.nio.LongBuffer);
+    method public static void glGetIntegeri_v(int, int, int[], int);
+    method public static void glGetIntegeri_v(int, int, java.nio.IntBuffer);
+    method public static void glGetInternalformativ(int, int, int, int, int[], int);
+    method public static void glGetInternalformativ(int, int, int, int, java.nio.IntBuffer);
+    method public static void glGetProgramBinary(int, int, int[], int, int[], int, java.nio.Buffer);
+    method public static void glGetProgramBinary(int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.Buffer);
+    method public static void glGetQueryObjectuiv(int, int, int[], int);
+    method public static void glGetQueryObjectuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetQueryiv(int, int, int[], int);
+    method public static void glGetQueryiv(int, int, java.nio.IntBuffer);
+    method public static void glGetSamplerParameterfv(int, int, float[], int);
+    method public static void glGetSamplerParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glGetSamplerParameteriv(int, int, int[], int);
+    method public static void glGetSamplerParameteriv(int, int, java.nio.IntBuffer);
+    method public static String glGetStringi(int, int);
+    method public static void glGetSynciv(long, int, int, int[], int, int[], int);
+    method public static void glGetSynciv(long, int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetTransformFeedbackVarying(int, int, int, int[], int, int[], int, int[], int, byte[], int);
+    method @Deprecated public static void glGetTransformFeedbackVarying(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte);
+    method public static void glGetTransformFeedbackVarying(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.ByteBuffer);
+    method public static String glGetTransformFeedbackVarying(int, int, int[], int, int[], int);
+    method public static String glGetTransformFeedbackVarying(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static int glGetUniformBlockIndex(int, String);
+    method public static void glGetUniformIndices(int, String[], int[], int);
+    method public static void glGetUniformIndices(int, String[], java.nio.IntBuffer);
+    method public static void glGetUniformuiv(int, int, int[], int);
+    method public static void glGetUniformuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetVertexAttribIiv(int, int, int[], int);
+    method public static void glGetVertexAttribIiv(int, int, java.nio.IntBuffer);
+    method public static void glGetVertexAttribIuiv(int, int, int[], int);
+    method public static void glGetVertexAttribIuiv(int, int, java.nio.IntBuffer);
+    method public static void glInvalidateFramebuffer(int, int, int[], int);
+    method public static void glInvalidateFramebuffer(int, int, java.nio.IntBuffer);
+    method public static void glInvalidateSubFramebuffer(int, int, int[], int, int, int, int, int);
+    method public static void glInvalidateSubFramebuffer(int, int, java.nio.IntBuffer, int, int, int, int);
+    method public static boolean glIsQuery(int);
+    method public static boolean glIsSampler(int);
+    method public static boolean glIsSync(long);
+    method public static boolean glIsTransformFeedback(int);
+    method public static boolean glIsVertexArray(int);
+    method public static java.nio.Buffer glMapBufferRange(int, int, int, int);
+    method public static void glPauseTransformFeedback();
+    method public static void glProgramBinary(int, int, java.nio.Buffer, int);
+    method public static void glProgramParameteri(int, int, int);
+    method public static void glReadBuffer(int);
+    method public static void glReadPixels(int, int, int, int, int, int, int);
+    method public static void glRenderbufferStorageMultisample(int, int, int, int, int);
+    method public static void glResumeTransformFeedback();
+    method public static void glSamplerParameterf(int, int, float);
+    method public static void glSamplerParameterfv(int, int, float[], int);
+    method public static void glSamplerParameterfv(int, int, java.nio.FloatBuffer);
+    method public static void glSamplerParameteri(int, int, int);
+    method public static void glSamplerParameteriv(int, int, int[], int);
+    method public static void glSamplerParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexImage3D(int, int, int, int, int, int, int, int, int, int);
+    method public static void glTexStorage2D(int, int, int, int, int);
+    method public static void glTexStorage3D(int, int, int, int, int, int);
+    method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glTexSubImage3D(int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glTransformFeedbackVaryings(int, String[], int);
+    method public static void glUniform1ui(int, int);
+    method public static void glUniform1uiv(int, int, int[], int);
+    method public static void glUniform1uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniform2ui(int, int, int);
+    method public static void glUniform2uiv(int, int, int[], int);
+    method public static void glUniform2uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniform3ui(int, int, int, int);
+    method public static void glUniform3uiv(int, int, int[], int);
+    method public static void glUniform3uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniform4ui(int, int, int, int, int);
+    method public static void glUniform4uiv(int, int, int[], int);
+    method public static void glUniform4uiv(int, int, java.nio.IntBuffer);
+    method public static void glUniformBlockBinding(int, int, int);
+    method public static void glUniformMatrix2x3fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix2x3fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix2x4fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix2x4fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix3x2fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix3x2fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix3x4fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix3x4fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix4x2fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix4x2fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static void glUniformMatrix4x3fv(int, int, boolean, float[], int);
+    method public static void glUniformMatrix4x3fv(int, int, boolean, java.nio.FloatBuffer);
+    method public static boolean glUnmapBuffer(int);
+    method public static void glVertexAttribDivisor(int, int);
+    method public static void glVertexAttribI4i(int, int, int, int, int);
+    method public static void glVertexAttribI4iv(int, int[], int);
+    method public static void glVertexAttribI4iv(int, java.nio.IntBuffer);
+    method public static void glVertexAttribI4ui(int, int, int, int, int);
+    method public static void glVertexAttribI4uiv(int, int[], int);
+    method public static void glVertexAttribI4uiv(int, java.nio.IntBuffer);
+    method public static void glVertexAttribIPointer(int, int, int, int, java.nio.Buffer);
+    method public static void glVertexAttribIPointer(int, int, int, int, int);
+    method public static void glWaitSync(long, int, long);
+    field public static final int GL_ACTIVE_UNIFORM_BLOCKS = 35382; // 0x8a36
+    field public static final int GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH = 35381; // 0x8a35
+    field public static final int GL_ALREADY_SIGNALED = 37146; // 0x911a
+    field public static final int GL_ANY_SAMPLES_PASSED = 35887; // 0x8c2f
+    field public static final int GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 36202; // 0x8d6a
+    field public static final int GL_BLUE = 6405; // 0x1905
+    field public static final int GL_BUFFER_ACCESS_FLAGS = 37151; // 0x911f
+    field public static final int GL_BUFFER_MAPPED = 35004; // 0x88bc
+    field public static final int GL_BUFFER_MAP_LENGTH = 37152; // 0x9120
+    field public static final int GL_BUFFER_MAP_OFFSET = 37153; // 0x9121
+    field public static final int GL_BUFFER_MAP_POINTER = 35005; // 0x88bd
+    field public static final int GL_COLOR = 6144; // 0x1800
+    field public static final int GL_COLOR_ATTACHMENT1 = 36065; // 0x8ce1
+    field public static final int GL_COLOR_ATTACHMENT10 = 36074; // 0x8cea
+    field public static final int GL_COLOR_ATTACHMENT11 = 36075; // 0x8ceb
+    field public static final int GL_COLOR_ATTACHMENT12 = 36076; // 0x8cec
+    field public static final int GL_COLOR_ATTACHMENT13 = 36077; // 0x8ced
+    field public static final int GL_COLOR_ATTACHMENT14 = 36078; // 0x8cee
+    field public static final int GL_COLOR_ATTACHMENT15 = 36079; // 0x8cef
+    field public static final int GL_COLOR_ATTACHMENT2 = 36066; // 0x8ce2
+    field public static final int GL_COLOR_ATTACHMENT3 = 36067; // 0x8ce3
+    field public static final int GL_COLOR_ATTACHMENT4 = 36068; // 0x8ce4
+    field public static final int GL_COLOR_ATTACHMENT5 = 36069; // 0x8ce5
+    field public static final int GL_COLOR_ATTACHMENT6 = 36070; // 0x8ce6
+    field public static final int GL_COLOR_ATTACHMENT7 = 36071; // 0x8ce7
+    field public static final int GL_COLOR_ATTACHMENT8 = 36072; // 0x8ce8
+    field public static final int GL_COLOR_ATTACHMENT9 = 36073; // 0x8ce9
+    field public static final int GL_COMPARE_REF_TO_TEXTURE = 34894; // 0x884e
+    field public static final int GL_COMPRESSED_R11_EAC = 37488; // 0x9270
+    field public static final int GL_COMPRESSED_RG11_EAC = 37490; // 0x9272
+    field public static final int GL_COMPRESSED_RGB8_ETC2 = 37492; // 0x9274
+    field public static final int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37494; // 0x9276
+    field public static final int GL_COMPRESSED_RGBA8_ETC2_EAC = 37496; // 0x9278
+    field public static final int GL_COMPRESSED_SIGNED_R11_EAC = 37489; // 0x9271
+    field public static final int GL_COMPRESSED_SIGNED_RG11_EAC = 37491; // 0x9273
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 37497; // 0x9279
+    field public static final int GL_COMPRESSED_SRGB8_ETC2 = 37493; // 0x9275
+    field public static final int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 37495; // 0x9277
+    field public static final int GL_CONDITION_SATISFIED = 37148; // 0x911c
+    field public static final int GL_COPY_READ_BUFFER = 36662; // 0x8f36
+    field public static final int GL_COPY_READ_BUFFER_BINDING = 36662; // 0x8f36
+    field public static final int GL_COPY_WRITE_BUFFER = 36663; // 0x8f37
+    field public static final int GL_COPY_WRITE_BUFFER_BINDING = 36663; // 0x8f37
+    field public static final int GL_CURRENT_QUERY = 34917; // 0x8865
+    field public static final int GL_DEPTH = 6145; // 0x1801
+    field public static final int GL_DEPTH24_STENCIL8 = 35056; // 0x88f0
+    field public static final int GL_DEPTH32F_STENCIL8 = 36013; // 0x8cad
+    field public static final int GL_DEPTH_COMPONENT24 = 33190; // 0x81a6
+    field public static final int GL_DEPTH_COMPONENT32F = 36012; // 0x8cac
+    field public static final int GL_DEPTH_STENCIL = 34041; // 0x84f9
+    field public static final int GL_DEPTH_STENCIL_ATTACHMENT = 33306; // 0x821a
+    field public static final int GL_DRAW_BUFFER0 = 34853; // 0x8825
+    field public static final int GL_DRAW_BUFFER1 = 34854; // 0x8826
+    field public static final int GL_DRAW_BUFFER10 = 34863; // 0x882f
+    field public static final int GL_DRAW_BUFFER11 = 34864; // 0x8830
+    field public static final int GL_DRAW_BUFFER12 = 34865; // 0x8831
+    field public static final int GL_DRAW_BUFFER13 = 34866; // 0x8832
+    field public static final int GL_DRAW_BUFFER14 = 34867; // 0x8833
+    field public static final int GL_DRAW_BUFFER15 = 34868; // 0x8834
+    field public static final int GL_DRAW_BUFFER2 = 34855; // 0x8827
+    field public static final int GL_DRAW_BUFFER3 = 34856; // 0x8828
+    field public static final int GL_DRAW_BUFFER4 = 34857; // 0x8829
+    field public static final int GL_DRAW_BUFFER5 = 34858; // 0x882a
+    field public static final int GL_DRAW_BUFFER6 = 34859; // 0x882b
+    field public static final int GL_DRAW_BUFFER7 = 34860; // 0x882c
+    field public static final int GL_DRAW_BUFFER8 = 34861; // 0x882d
+    field public static final int GL_DRAW_BUFFER9 = 34862; // 0x882e
+    field public static final int GL_DRAW_FRAMEBUFFER = 36009; // 0x8ca9
+    field public static final int GL_DRAW_FRAMEBUFFER_BINDING = 36006; // 0x8ca6
+    field public static final int GL_DYNAMIC_COPY = 35050; // 0x88ea
+    field public static final int GL_DYNAMIC_READ = 35049; // 0x88e9
+    field public static final int GL_FLOAT_32_UNSIGNED_INT_24_8_REV = 36269; // 0x8dad
+    field public static final int GL_FLOAT_MAT2x3 = 35685; // 0x8b65
+    field public static final int GL_FLOAT_MAT2x4 = 35686; // 0x8b66
+    field public static final int GL_FLOAT_MAT3x2 = 35687; // 0x8b67
+    field public static final int GL_FLOAT_MAT3x4 = 35688; // 0x8b68
+    field public static final int GL_FLOAT_MAT4x2 = 35689; // 0x8b69
+    field public static final int GL_FLOAT_MAT4x3 = 35690; // 0x8b6a
+    field public static final int GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 35723; // 0x8b8b
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE = 33301; // 0x8215
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE = 33300; // 0x8214
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 33296; // 0x8210
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE = 33297; // 0x8211
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE = 33302; // 0x8216
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE = 33299; // 0x8213
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE = 33298; // 0x8212
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE = 33303; // 0x8217
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER = 36052; // 0x8cd4
+    field public static final int GL_FRAMEBUFFER_DEFAULT = 33304; // 0x8218
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = 36182; // 0x8d56
+    field public static final int GL_FRAMEBUFFER_UNDEFINED = 33305; // 0x8219
+    field public static final int GL_GREEN = 6404; // 0x1904
+    field public static final int GL_HALF_FLOAT = 5131; // 0x140b
+    field public static final int GL_INTERLEAVED_ATTRIBS = 35980; // 0x8c8c
+    field public static final int GL_INT_2_10_10_10_REV = 36255; // 0x8d9f
+    field public static final int GL_INT_SAMPLER_2D = 36298; // 0x8dca
+    field public static final int GL_INT_SAMPLER_2D_ARRAY = 36303; // 0x8dcf
+    field public static final int GL_INT_SAMPLER_3D = 36299; // 0x8dcb
+    field public static final int GL_INT_SAMPLER_CUBE = 36300; // 0x8dcc
+    field public static final int GL_INVALID_INDEX = -1; // 0xffffffff
+    field public static final int GL_MAJOR_VERSION = 33307; // 0x821b
+    field public static final int GL_MAP_FLUSH_EXPLICIT_BIT = 16; // 0x10
+    field public static final int GL_MAP_INVALIDATE_BUFFER_BIT = 8; // 0x8
+    field public static final int GL_MAP_INVALIDATE_RANGE_BIT = 4; // 0x4
+    field public static final int GL_MAP_READ_BIT = 1; // 0x1
+    field public static final int GL_MAP_UNSYNCHRONIZED_BIT = 32; // 0x20
+    field public static final int GL_MAP_WRITE_BIT = 2; // 0x2
+    field public static final int GL_MAX = 32776; // 0x8008
+    field public static final int GL_MAX_3D_TEXTURE_SIZE = 32883; // 0x8073
+    field public static final int GL_MAX_ARRAY_TEXTURE_LAYERS = 35071; // 0x88ff
+    field public static final int GL_MAX_COLOR_ATTACHMENTS = 36063; // 0x8cdf
+    field public static final int GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS = 35379; // 0x8a33
+    field public static final int GL_MAX_COMBINED_UNIFORM_BLOCKS = 35374; // 0x8a2e
+    field public static final int GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS = 35377; // 0x8a31
+    field public static final int GL_MAX_DRAW_BUFFERS = 34852; // 0x8824
+    field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9
+    field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8
+    field public static final int GL_MAX_ELEMENT_INDEX = 36203; // 0x8d6b
+    field public static final int GL_MAX_FRAGMENT_INPUT_COMPONENTS = 37157; // 0x9125
+    field public static final int GL_MAX_FRAGMENT_UNIFORM_BLOCKS = 35373; // 0x8a2d
+    field public static final int GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 35657; // 0x8b49
+    field public static final int GL_MAX_PROGRAM_TEXEL_OFFSET = 35077; // 0x8905
+    field public static final int GL_MAX_SAMPLES = 36183; // 0x8d57
+    field public static final int GL_MAX_SERVER_WAIT_TIMEOUT = 37137; // 0x9111
+    field public static final int GL_MAX_TEXTURE_LOD_BIAS = 34045; // 0x84fd
+    field public static final int GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS = 35978; // 0x8c8a
+    field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 35979; // 0x8c8b
+    field public static final int GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS = 35968; // 0x8c80
+    field public static final int GL_MAX_UNIFORM_BLOCK_SIZE = 35376; // 0x8a30
+    field public static final int GL_MAX_UNIFORM_BUFFER_BINDINGS = 35375; // 0x8a2f
+    field public static final int GL_MAX_VARYING_COMPONENTS = 35659; // 0x8b4b
+    field public static final int GL_MAX_VERTEX_OUTPUT_COMPONENTS = 37154; // 0x9122
+    field public static final int GL_MAX_VERTEX_UNIFORM_BLOCKS = 35371; // 0x8a2b
+    field public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 35658; // 0x8b4a
+    field public static final int GL_MIN = 32775; // 0x8007
+    field public static final int GL_MINOR_VERSION = 33308; // 0x821c
+    field public static final int GL_MIN_PROGRAM_TEXEL_OFFSET = 35076; // 0x8904
+    field public static final int GL_NUM_EXTENSIONS = 33309; // 0x821d
+    field public static final int GL_NUM_PROGRAM_BINARY_FORMATS = 34814; // 0x87fe
+    field public static final int GL_NUM_SAMPLE_COUNTS = 37760; // 0x9380
+    field public static final int GL_OBJECT_TYPE = 37138; // 0x9112
+    field public static final int GL_PACK_ROW_LENGTH = 3330; // 0xd02
+    field public static final int GL_PACK_SKIP_PIXELS = 3332; // 0xd04
+    field public static final int GL_PACK_SKIP_ROWS = 3331; // 0xd03
+    field public static final int GL_PIXEL_PACK_BUFFER = 35051; // 0x88eb
+    field public static final int GL_PIXEL_PACK_BUFFER_BINDING = 35053; // 0x88ed
+    field public static final int GL_PIXEL_UNPACK_BUFFER = 35052; // 0x88ec
+    field public static final int GL_PIXEL_UNPACK_BUFFER_BINDING = 35055; // 0x88ef
+    field public static final int GL_PRIMITIVE_RESTART_FIXED_INDEX = 36201; // 0x8d69
+    field public static final int GL_PROGRAM_BINARY_FORMATS = 34815; // 0x87ff
+    field public static final int GL_PROGRAM_BINARY_LENGTH = 34625; // 0x8741
+    field public static final int GL_PROGRAM_BINARY_RETRIEVABLE_HINT = 33367; // 0x8257
+    field public static final int GL_QUERY_RESULT = 34918; // 0x8866
+    field public static final int GL_QUERY_RESULT_AVAILABLE = 34919; // 0x8867
+    field public static final int GL_R11F_G11F_B10F = 35898; // 0x8c3a
+    field public static final int GL_R16F = 33325; // 0x822d
+    field public static final int GL_R16I = 33331; // 0x8233
+    field public static final int GL_R16UI = 33332; // 0x8234
+    field public static final int GL_R32F = 33326; // 0x822e
+    field public static final int GL_R32I = 33333; // 0x8235
+    field public static final int GL_R32UI = 33334; // 0x8236
+    field public static final int GL_R8 = 33321; // 0x8229
+    field public static final int GL_R8I = 33329; // 0x8231
+    field public static final int GL_R8UI = 33330; // 0x8232
+    field public static final int GL_R8_SNORM = 36756; // 0x8f94
+    field public static final int GL_RASTERIZER_DISCARD = 35977; // 0x8c89
+    field public static final int GL_READ_BUFFER = 3074; // 0xc02
+    field public static final int GL_READ_FRAMEBUFFER = 36008; // 0x8ca8
+    field public static final int GL_READ_FRAMEBUFFER_BINDING = 36010; // 0x8caa
+    field public static final int GL_RED = 6403; // 0x1903
+    field public static final int GL_RED_INTEGER = 36244; // 0x8d94
+    field public static final int GL_RENDERBUFFER_SAMPLES = 36011; // 0x8cab
+    field public static final int GL_RG = 33319; // 0x8227
+    field public static final int GL_RG16F = 33327; // 0x822f
+    field public static final int GL_RG16I = 33337; // 0x8239
+    field public static final int GL_RG16UI = 33338; // 0x823a
+    field public static final int GL_RG32F = 33328; // 0x8230
+    field public static final int GL_RG32I = 33339; // 0x823b
+    field public static final int GL_RG32UI = 33340; // 0x823c
+    field public static final int GL_RG8 = 33323; // 0x822b
+    field public static final int GL_RG8I = 33335; // 0x8237
+    field public static final int GL_RG8UI = 33336; // 0x8238
+    field public static final int GL_RG8_SNORM = 36757; // 0x8f95
+    field public static final int GL_RGB10_A2 = 32857; // 0x8059
+    field public static final int GL_RGB10_A2UI = 36975; // 0x906f
+    field public static final int GL_RGB16F = 34843; // 0x881b
+    field public static final int GL_RGB16I = 36233; // 0x8d89
+    field public static final int GL_RGB16UI = 36215; // 0x8d77
+    field public static final int GL_RGB32F = 34837; // 0x8815
+    field public static final int GL_RGB32I = 36227; // 0x8d83
+    field public static final int GL_RGB32UI = 36209; // 0x8d71
+    field public static final int GL_RGB8 = 32849; // 0x8051
+    field public static final int GL_RGB8I = 36239; // 0x8d8f
+    field public static final int GL_RGB8UI = 36221; // 0x8d7d
+    field public static final int GL_RGB8_SNORM = 36758; // 0x8f96
+    field public static final int GL_RGB9_E5 = 35901; // 0x8c3d
+    field public static final int GL_RGBA16F = 34842; // 0x881a
+    field public static final int GL_RGBA16I = 36232; // 0x8d88
+    field public static final int GL_RGBA16UI = 36214; // 0x8d76
+    field public static final int GL_RGBA32F = 34836; // 0x8814
+    field public static final int GL_RGBA32I = 36226; // 0x8d82
+    field public static final int GL_RGBA32UI = 36208; // 0x8d70
+    field public static final int GL_RGBA8 = 32856; // 0x8058
+    field public static final int GL_RGBA8I = 36238; // 0x8d8e
+    field public static final int GL_RGBA8UI = 36220; // 0x8d7c
+    field public static final int GL_RGBA8_SNORM = 36759; // 0x8f97
+    field public static final int GL_RGBA_INTEGER = 36249; // 0x8d99
+    field public static final int GL_RGB_INTEGER = 36248; // 0x8d98
+    field public static final int GL_RG_INTEGER = 33320; // 0x8228
+    field public static final int GL_SAMPLER_2D_ARRAY = 36289; // 0x8dc1
+    field public static final int GL_SAMPLER_2D_ARRAY_SHADOW = 36292; // 0x8dc4
+    field public static final int GL_SAMPLER_2D_SHADOW = 35682; // 0x8b62
+    field public static final int GL_SAMPLER_3D = 35679; // 0x8b5f
+    field public static final int GL_SAMPLER_BINDING = 35097; // 0x8919
+    field public static final int GL_SAMPLER_CUBE_SHADOW = 36293; // 0x8dc5
+    field public static final int GL_SEPARATE_ATTRIBS = 35981; // 0x8c8d
+    field public static final int GL_SIGNALED = 37145; // 0x9119
+    field public static final int GL_SIGNED_NORMALIZED = 36764; // 0x8f9c
+    field public static final int GL_SRGB = 35904; // 0x8c40
+    field public static final int GL_SRGB8 = 35905; // 0x8c41
+    field public static final int GL_SRGB8_ALPHA8 = 35907; // 0x8c43
+    field public static final int GL_STATIC_COPY = 35046; // 0x88e6
+    field public static final int GL_STATIC_READ = 35045; // 0x88e5
+    field public static final int GL_STENCIL = 6146; // 0x1802
+    field public static final int GL_STREAM_COPY = 35042; // 0x88e2
+    field public static final int GL_STREAM_READ = 35041; // 0x88e1
+    field public static final int GL_SYNC_CONDITION = 37139; // 0x9113
+    field public static final int GL_SYNC_FENCE = 37142; // 0x9116
+    field public static final int GL_SYNC_FLAGS = 37141; // 0x9115
+    field public static final int GL_SYNC_FLUSH_COMMANDS_BIT = 1; // 0x1
+    field public static final int GL_SYNC_GPU_COMMANDS_COMPLETE = 37143; // 0x9117
+    field public static final int GL_SYNC_STATUS = 37140; // 0x9114
+    field public static final int GL_TEXTURE_2D_ARRAY = 35866; // 0x8c1a
+    field public static final int GL_TEXTURE_3D = 32879; // 0x806f
+    field public static final int GL_TEXTURE_BASE_LEVEL = 33084; // 0x813c
+    field public static final int GL_TEXTURE_BINDING_2D_ARRAY = 35869; // 0x8c1d
+    field public static final int GL_TEXTURE_BINDING_3D = 32874; // 0x806a
+    field public static final int GL_TEXTURE_COMPARE_FUNC = 34893; // 0x884d
+    field public static final int GL_TEXTURE_COMPARE_MODE = 34892; // 0x884c
+    field public static final int GL_TEXTURE_IMMUTABLE_FORMAT = 37167; // 0x912f
+    field public static final int GL_TEXTURE_IMMUTABLE_LEVELS = 33503; // 0x82df
+    field public static final int GL_TEXTURE_MAX_LEVEL = 33085; // 0x813d
+    field public static final int GL_TEXTURE_MAX_LOD = 33083; // 0x813b
+    field public static final int GL_TEXTURE_MIN_LOD = 33082; // 0x813a
+    field public static final int GL_TEXTURE_SWIZZLE_A = 36421; // 0x8e45
+    field public static final int GL_TEXTURE_SWIZZLE_B = 36420; // 0x8e44
+    field public static final int GL_TEXTURE_SWIZZLE_G = 36419; // 0x8e43
+    field public static final int GL_TEXTURE_SWIZZLE_R = 36418; // 0x8e42
+    field public static final int GL_TEXTURE_WRAP_R = 32882; // 0x8072
+    field public static final int GL_TIMEOUT_EXPIRED = 37147; // 0x911b
+    field public static final long GL_TIMEOUT_IGNORED = -1L; // 0xffffffffffffffffL
+    field public static final int GL_TRANSFORM_FEEDBACK = 36386; // 0x8e22
+    field public static final int GL_TRANSFORM_FEEDBACK_ACTIVE = 36388; // 0x8e24
+    field public static final int GL_TRANSFORM_FEEDBACK_BINDING = 36389; // 0x8e25
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER = 35982; // 0x8c8e
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_BINDING = 35983; // 0x8c8f
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_MODE = 35967; // 0x8c7f
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_SIZE = 35973; // 0x8c85
+    field public static final int GL_TRANSFORM_FEEDBACK_BUFFER_START = 35972; // 0x8c84
+    field public static final int GL_TRANSFORM_FEEDBACK_PAUSED = 36387; // 0x8e23
+    field public static final int GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN = 35976; // 0x8c88
+    field public static final int GL_TRANSFORM_FEEDBACK_VARYINGS = 35971; // 0x8c83
+    field public static final int GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH = 35958; // 0x8c76
+    field public static final int GL_UNIFORM_ARRAY_STRIDE = 35388; // 0x8a3c
+    field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS = 35394; // 0x8a42
+    field public static final int GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES = 35395; // 0x8a43
+    field public static final int GL_UNIFORM_BLOCK_BINDING = 35391; // 0x8a3f
+    field public static final int GL_UNIFORM_BLOCK_DATA_SIZE = 35392; // 0x8a40
+    field public static final int GL_UNIFORM_BLOCK_INDEX = 35386; // 0x8a3a
+    field public static final int GL_UNIFORM_BLOCK_NAME_LENGTH = 35393; // 0x8a41
+    field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER = 35398; // 0x8a46
+    field public static final int GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER = 35396; // 0x8a44
+    field public static final int GL_UNIFORM_BUFFER = 35345; // 0x8a11
+    field public static final int GL_UNIFORM_BUFFER_BINDING = 35368; // 0x8a28
+    field public static final int GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT = 35380; // 0x8a34
+    field public static final int GL_UNIFORM_BUFFER_SIZE = 35370; // 0x8a2a
+    field public static final int GL_UNIFORM_BUFFER_START = 35369; // 0x8a29
+    field public static final int GL_UNIFORM_IS_ROW_MAJOR = 35390; // 0x8a3e
+    field public static final int GL_UNIFORM_MATRIX_STRIDE = 35389; // 0x8a3d
+    field public static final int GL_UNIFORM_NAME_LENGTH = 35385; // 0x8a39
+    field public static final int GL_UNIFORM_OFFSET = 35387; // 0x8a3b
+    field public static final int GL_UNIFORM_SIZE = 35384; // 0x8a38
+    field public static final int GL_UNIFORM_TYPE = 35383; // 0x8a37
+    field public static final int GL_UNPACK_IMAGE_HEIGHT = 32878; // 0x806e
+    field public static final int GL_UNPACK_ROW_LENGTH = 3314; // 0xcf2
+    field public static final int GL_UNPACK_SKIP_IMAGES = 32877; // 0x806d
+    field public static final int GL_UNPACK_SKIP_PIXELS = 3316; // 0xcf4
+    field public static final int GL_UNPACK_SKIP_ROWS = 3315; // 0xcf3
+    field public static final int GL_UNSIGNALED = 37144; // 0x9118
+    field public static final int GL_UNSIGNED_INT_10F_11F_11F_REV = 35899; // 0x8c3b
+    field public static final int GL_UNSIGNED_INT_24_8 = 34042; // 0x84fa
+    field public static final int GL_UNSIGNED_INT_2_10_10_10_REV = 33640; // 0x8368
+    field public static final int GL_UNSIGNED_INT_5_9_9_9_REV = 35902; // 0x8c3e
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D = 36306; // 0x8dd2
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_ARRAY = 36311; // 0x8dd7
+    field public static final int GL_UNSIGNED_INT_SAMPLER_3D = 36307; // 0x8dd3
+    field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE = 36308; // 0x8dd4
+    field public static final int GL_UNSIGNED_INT_VEC2 = 36294; // 0x8dc6
+    field public static final int GL_UNSIGNED_INT_VEC3 = 36295; // 0x8dc7
+    field public static final int GL_UNSIGNED_INT_VEC4 = 36296; // 0x8dc8
+    field public static final int GL_UNSIGNED_NORMALIZED = 35863; // 0x8c17
+    field public static final int GL_VERTEX_ARRAY_BINDING = 34229; // 0x85b5
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_DIVISOR = 35070; // 0x88fe
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_INTEGER = 35069; // 0x88fd
+    field public static final int GL_WAIT_FAILED = 37149; // 0x911d
+  }
+
+  public class GLES31 extends android.opengl.GLES30 {
+    method public static void glActiveShaderProgram(int, int);
+    method public static void glBindImageTexture(int, int, int, boolean, int, int, int);
+    method public static void glBindProgramPipeline(int);
+    method public static void glBindVertexBuffer(int, int, long, int);
+    method public static int glCreateShaderProgramv(int, String[]);
+    method public static void glDeleteProgramPipelines(int, int[], int);
+    method public static void glDeleteProgramPipelines(int, java.nio.IntBuffer);
+    method public static void glDispatchCompute(int, int, int);
+    method public static void glDispatchComputeIndirect(long);
+    method public static void glDrawArraysIndirect(int, long);
+    method public static void glDrawElementsIndirect(int, int, long);
+    method public static void glFramebufferParameteri(int, int, int);
+    method public static void glGenProgramPipelines(int, int[], int);
+    method public static void glGenProgramPipelines(int, java.nio.IntBuffer);
+    method public static void glGetBooleani_v(int, int, boolean[], int);
+    method public static void glGetBooleani_v(int, int, java.nio.IntBuffer);
+    method public static void glGetFramebufferParameteriv(int, int, int[], int);
+    method public static void glGetFramebufferParameteriv(int, int, java.nio.IntBuffer);
+    method public static void glGetMultisamplefv(int, int, float[], int);
+    method public static void glGetMultisamplefv(int, int, java.nio.FloatBuffer);
+    method public static void glGetProgramInterfaceiv(int, int, int, int[], int);
+    method public static void glGetProgramInterfaceiv(int, int, int, java.nio.IntBuffer);
+    method public static String glGetProgramPipelineInfoLog(int);
+    method public static void glGetProgramPipelineiv(int, int, int[], int);
+    method public static void glGetProgramPipelineiv(int, int, java.nio.IntBuffer);
+    method public static int glGetProgramResourceIndex(int, int, String);
+    method public static int glGetProgramResourceLocation(int, int, String);
+    method public static String glGetProgramResourceName(int, int, int);
+    method public static void glGetProgramResourceiv(int, int, int, int, int[], int, int, int[], int, int[], int);
+    method public static void glGetProgramResourceiv(int, int, int, int, java.nio.IntBuffer, int, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static void glGetTexLevelParameterfv(int, int, int, float[], int);
+    method public static void glGetTexLevelParameterfv(int, int, int, java.nio.FloatBuffer);
+    method public static void glGetTexLevelParameteriv(int, int, int, int[], int);
+    method public static void glGetTexLevelParameteriv(int, int, int, java.nio.IntBuffer);
+    method public static boolean glIsProgramPipeline(int);
+    method public static void glMemoryBarrier(int);
+    method public static void glMemoryBarrierByRegion(int);
+    method public static void glProgramUniform1f(int, int, float);
+    method public static void glProgramUniform1fv(int, int, int, float[], int);
+    method public static void glProgramUniform1fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform1i(int, int, int);
+    method public static void glProgramUniform1iv(int, int, int, int[], int);
+    method public static void glProgramUniform1iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform1ui(int, int, int);
+    method public static void glProgramUniform1uiv(int, int, int, int[], int);
+    method public static void glProgramUniform1uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform2f(int, int, float, float);
+    method public static void glProgramUniform2fv(int, int, int, float[], int);
+    method public static void glProgramUniform2fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform2i(int, int, int, int);
+    method public static void glProgramUniform2iv(int, int, int, int[], int);
+    method public static void glProgramUniform2iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform2ui(int, int, int, int);
+    method public static void glProgramUniform2uiv(int, int, int, int[], int);
+    method public static void glProgramUniform2uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform3f(int, int, float, float, float);
+    method public static void glProgramUniform3fv(int, int, int, float[], int);
+    method public static void glProgramUniform3fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform3i(int, int, int, int, int);
+    method public static void glProgramUniform3iv(int, int, int, int[], int);
+    method public static void glProgramUniform3iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform3ui(int, int, int, int, int);
+    method public static void glProgramUniform3uiv(int, int, int, int[], int);
+    method public static void glProgramUniform3uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform4f(int, int, float, float, float, float);
+    method public static void glProgramUniform4fv(int, int, int, float[], int);
+    method public static void glProgramUniform4fv(int, int, int, java.nio.FloatBuffer);
+    method public static void glProgramUniform4i(int, int, int, int, int, int);
+    method public static void glProgramUniform4iv(int, int, int, int[], int);
+    method public static void glProgramUniform4iv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniform4ui(int, int, int, int, int, int);
+    method public static void glProgramUniform4uiv(int, int, int, int[], int);
+    method public static void glProgramUniform4uiv(int, int, int, java.nio.IntBuffer);
+    method public static void glProgramUniformMatrix2fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix2fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix2x3fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix2x3fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix2x4fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix2x4fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix3fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix3fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix3x2fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix3x2fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix3x4fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix3x4fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix4fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix4fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix4x2fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix4x2fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glProgramUniformMatrix4x3fv(int, int, int, boolean, float[], int);
+    method public static void glProgramUniformMatrix4x3fv(int, int, int, boolean, java.nio.FloatBuffer);
+    method public static void glSampleMaski(int, int);
+    method public static void glTexStorage2DMultisample(int, int, int, int, int, boolean);
+    method public static void glUseProgramStages(int, int, int);
+    method public static void glValidateProgramPipeline(int);
+    method public static void glVertexAttribBinding(int, int);
+    method public static void glVertexAttribFormat(int, int, int, boolean, int);
+    method public static void glVertexAttribIFormat(int, int, int, int);
+    method public static void glVertexBindingDivisor(int, int);
+    field public static final int GL_ACTIVE_ATOMIC_COUNTER_BUFFERS = 37593; // 0x92d9
+    field public static final int GL_ACTIVE_PROGRAM = 33369; // 0x8259
+    field public static final int GL_ACTIVE_RESOURCES = 37621; // 0x92f5
+    field public static final int GL_ACTIVE_VARIABLES = 37637; // 0x9305
+    field public static final int GL_ALL_BARRIER_BITS = -1; // 0xffffffff
+    field public static final int GL_ALL_SHADER_BITS = -1; // 0xffffffff
+    field public static final int GL_ARRAY_SIZE = 37627; // 0x92fb
+    field public static final int GL_ARRAY_STRIDE = 37630; // 0x92fe
+    field public static final int GL_ATOMIC_COUNTER_BARRIER_BIT = 4096; // 0x1000
+    field public static final int GL_ATOMIC_COUNTER_BUFFER = 37568; // 0x92c0
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_BINDING = 37569; // 0x92c1
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_INDEX = 37633; // 0x9301
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_SIZE = 37571; // 0x92c3
+    field public static final int GL_ATOMIC_COUNTER_BUFFER_START = 37570; // 0x92c2
+    field public static final int GL_BLOCK_INDEX = 37629; // 0x92fd
+    field public static final int GL_BUFFER_BINDING = 37634; // 0x9302
+    field public static final int GL_BUFFER_DATA_SIZE = 37635; // 0x9303
+    field public static final int GL_BUFFER_UPDATE_BARRIER_BIT = 512; // 0x200
+    field public static final int GL_BUFFER_VARIABLE = 37605; // 0x92e5
+    field public static final int GL_COMMAND_BARRIER_BIT = 64; // 0x40
+    field public static final int GL_COMPUTE_SHADER = 37305; // 0x91b9
+    field public static final int GL_COMPUTE_SHADER_BIT = 32; // 0x20
+    field public static final int GL_COMPUTE_WORK_GROUP_SIZE = 33383; // 0x8267
+    field public static final int GL_DEPTH_STENCIL_TEXTURE_MODE = 37098; // 0x90ea
+    field public static final int GL_DISPATCH_INDIRECT_BUFFER = 37102; // 0x90ee
+    field public static final int GL_DISPATCH_INDIRECT_BUFFER_BINDING = 37103; // 0x90ef
+    field public static final int GL_DRAW_INDIRECT_BUFFER = 36671; // 0x8f3f
+    field public static final int GL_DRAW_INDIRECT_BUFFER_BINDING = 36675; // 0x8f43
+    field public static final int GL_ELEMENT_ARRAY_BARRIER_BIT = 2; // 0x2
+    field public static final int GL_FRAGMENT_SHADER_BIT = 2; // 0x2
+    field public static final int GL_FRAMEBUFFER_BARRIER_BIT = 1024; // 0x400
+    field public static final int GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS = 37652; // 0x9314
+    field public static final int GL_FRAMEBUFFER_DEFAULT_HEIGHT = 37649; // 0x9311
+    field public static final int GL_FRAMEBUFFER_DEFAULT_SAMPLES = 37651; // 0x9313
+    field public static final int GL_FRAMEBUFFER_DEFAULT_WIDTH = 37648; // 0x9310
+    field public static final int GL_IMAGE_2D = 36941; // 0x904d
+    field public static final int GL_IMAGE_2D_ARRAY = 36947; // 0x9053
+    field public static final int GL_IMAGE_3D = 36942; // 0x904e
+    field public static final int GL_IMAGE_BINDING_ACCESS = 36670; // 0x8f3e
+    field public static final int GL_IMAGE_BINDING_FORMAT = 36974; // 0x906e
+    field public static final int GL_IMAGE_BINDING_LAYER = 36669; // 0x8f3d
+    field public static final int GL_IMAGE_BINDING_LAYERED = 36668; // 0x8f3c
+    field public static final int GL_IMAGE_BINDING_LEVEL = 36667; // 0x8f3b
+    field public static final int GL_IMAGE_BINDING_NAME = 36666; // 0x8f3a
+    field public static final int GL_IMAGE_CUBE = 36944; // 0x9050
+    field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS = 37065; // 0x90c9
+    field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE = 37064; // 0x90c8
+    field public static final int GL_IMAGE_FORMAT_COMPATIBILITY_TYPE = 37063; // 0x90c7
+    field public static final int GL_INT_IMAGE_2D = 36952; // 0x9058
+    field public static final int GL_INT_IMAGE_2D_ARRAY = 36958; // 0x905e
+    field public static final int GL_INT_IMAGE_3D = 36953; // 0x9059
+    field public static final int GL_INT_IMAGE_CUBE = 36955; // 0x905b
+    field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE = 37129; // 0x9109
+    field public static final int GL_IS_ROW_MAJOR = 37632; // 0x9300
+    field public static final int GL_LOCATION = 37646; // 0x930e
+    field public static final int GL_MATRIX_STRIDE = 37631; // 0x92ff
+    field public static final int GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS = 37596; // 0x92dc
+    field public static final int GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE = 37592; // 0x92d8
+    field public static final int GL_MAX_COLOR_TEXTURE_SAMPLES = 37134; // 0x910e
+    field public static final int GL_MAX_COMBINED_ATOMIC_COUNTERS = 37591; // 0x92d7
+    field public static final int GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS = 37585; // 0x92d1
+    field public static final int GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS = 33382; // 0x8266
+    field public static final int GL_MAX_COMBINED_IMAGE_UNIFORMS = 37071; // 0x90cf
+    field public static final int GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES = 36665; // 0x8f39
+    field public static final int GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS = 37084; // 0x90dc
+    field public static final int GL_MAX_COMPUTE_ATOMIC_COUNTERS = 33381; // 0x8265
+    field public static final int GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS = 33380; // 0x8264
+    field public static final int GL_MAX_COMPUTE_IMAGE_UNIFORMS = 37309; // 0x91bd
+    field public static final int GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS = 37083; // 0x90db
+    field public static final int GL_MAX_COMPUTE_SHARED_MEMORY_SIZE = 33378; // 0x8262
+    field public static final int GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS = 37308; // 0x91bc
+    field public static final int GL_MAX_COMPUTE_UNIFORM_BLOCKS = 37307; // 0x91bb
+    field public static final int GL_MAX_COMPUTE_UNIFORM_COMPONENTS = 33379; // 0x8263
+    field public static final int GL_MAX_COMPUTE_WORK_GROUP_COUNT = 37310; // 0x91be
+    field public static final int GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS = 37099; // 0x90eb
+    field public static final int GL_MAX_COMPUTE_WORK_GROUP_SIZE = 37311; // 0x91bf
+    field public static final int GL_MAX_DEPTH_TEXTURE_SAMPLES = 37135; // 0x910f
+    field public static final int GL_MAX_FRAGMENT_ATOMIC_COUNTERS = 37590; // 0x92d6
+    field public static final int GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS = 37584; // 0x92d0
+    field public static final int GL_MAX_FRAGMENT_IMAGE_UNIFORMS = 37070; // 0x90ce
+    field public static final int GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS = 37082; // 0x90da
+    field public static final int GL_MAX_FRAMEBUFFER_HEIGHT = 37654; // 0x9316
+    field public static final int GL_MAX_FRAMEBUFFER_SAMPLES = 37656; // 0x9318
+    field public static final int GL_MAX_FRAMEBUFFER_WIDTH = 37653; // 0x9315
+    field public static final int GL_MAX_IMAGE_UNITS = 36664; // 0x8f38
+    field public static final int GL_MAX_INTEGER_SAMPLES = 37136; // 0x9110
+    field public static final int GL_MAX_NAME_LENGTH = 37622; // 0x92f6
+    field public static final int GL_MAX_NUM_ACTIVE_VARIABLES = 37623; // 0x92f7
+    field public static final int GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET = 36447; // 0x8e5f
+    field public static final int GL_MAX_SAMPLE_MASK_WORDS = 36441; // 0x8e59
+    field public static final int GL_MAX_SHADER_STORAGE_BLOCK_SIZE = 37086; // 0x90de
+    field public static final int GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS = 37085; // 0x90dd
+    field public static final int GL_MAX_UNIFORM_LOCATIONS = 33390; // 0x826e
+    field public static final int GL_MAX_VERTEX_ATOMIC_COUNTERS = 37586; // 0x92d2
+    field public static final int GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS = 37580; // 0x92cc
+    field public static final int GL_MAX_VERTEX_ATTRIB_BINDINGS = 33498; // 0x82da
+    field public static final int GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET = 33497; // 0x82d9
+    field public static final int GL_MAX_VERTEX_ATTRIB_STRIDE = 33509; // 0x82e5
+    field public static final int GL_MAX_VERTEX_IMAGE_UNIFORMS = 37066; // 0x90ca
+    field public static final int GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS = 37078; // 0x90d6
+    field public static final int GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET = 36446; // 0x8e5e
+    field public static final int GL_NAME_LENGTH = 37625; // 0x92f9
+    field public static final int GL_NUM_ACTIVE_VARIABLES = 37636; // 0x9304
+    field public static final int GL_OFFSET = 37628; // 0x92fc
+    field public static final int GL_PIXEL_BUFFER_BARRIER_BIT = 128; // 0x80
+    field public static final int GL_PROGRAM_INPUT = 37603; // 0x92e3
+    field public static final int GL_PROGRAM_OUTPUT = 37604; // 0x92e4
+    field public static final int GL_PROGRAM_PIPELINE_BINDING = 33370; // 0x825a
+    field public static final int GL_PROGRAM_SEPARABLE = 33368; // 0x8258
+    field public static final int GL_READ_ONLY = 35000; // 0x88b8
+    field public static final int GL_READ_WRITE = 35002; // 0x88ba
+    field public static final int GL_REFERENCED_BY_COMPUTE_SHADER = 37643; // 0x930b
+    field public static final int GL_REFERENCED_BY_FRAGMENT_SHADER = 37642; // 0x930a
+    field public static final int GL_REFERENCED_BY_VERTEX_SHADER = 37638; // 0x9306
+    field public static final int GL_SAMPLER_2D_MULTISAMPLE = 37128; // 0x9108
+    field public static final int GL_SAMPLE_MASK = 36433; // 0x8e51
+    field public static final int GL_SAMPLE_MASK_VALUE = 36434; // 0x8e52
+    field public static final int GL_SAMPLE_POSITION = 36432; // 0x8e50
+    field public static final int GL_SHADER_IMAGE_ACCESS_BARRIER_BIT = 32; // 0x20
+    field public static final int GL_SHADER_STORAGE_BARRIER_BIT = 8192; // 0x2000
+    field public static final int GL_SHADER_STORAGE_BLOCK = 37606; // 0x92e6
+    field public static final int GL_SHADER_STORAGE_BUFFER = 37074; // 0x90d2
+    field public static final int GL_SHADER_STORAGE_BUFFER_BINDING = 37075; // 0x90d3
+    field public static final int GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT = 37087; // 0x90df
+    field public static final int GL_SHADER_STORAGE_BUFFER_SIZE = 37077; // 0x90d5
+    field public static final int GL_SHADER_STORAGE_BUFFER_START = 37076; // 0x90d4
+    field public static final int GL_STENCIL_INDEX = 6401; // 0x1901
+    field public static final int GL_TEXTURE_2D_MULTISAMPLE = 37120; // 0x9100
+    field public static final int GL_TEXTURE_ALPHA_SIZE = 32863; // 0x805f
+    field public static final int GL_TEXTURE_ALPHA_TYPE = 35859; // 0x8c13
+    field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE = 37124; // 0x9104
+    field public static final int GL_TEXTURE_BLUE_SIZE = 32862; // 0x805e
+    field public static final int GL_TEXTURE_BLUE_TYPE = 35858; // 0x8c12
+    field public static final int GL_TEXTURE_COMPRESSED = 34465; // 0x86a1
+    field public static final int GL_TEXTURE_DEPTH = 32881; // 0x8071
+    field public static final int GL_TEXTURE_DEPTH_SIZE = 34890; // 0x884a
+    field public static final int GL_TEXTURE_DEPTH_TYPE = 35862; // 0x8c16
+    field public static final int GL_TEXTURE_FETCH_BARRIER_BIT = 8; // 0x8
+    field public static final int GL_TEXTURE_FIXED_SAMPLE_LOCATIONS = 37127; // 0x9107
+    field public static final int GL_TEXTURE_GREEN_SIZE = 32861; // 0x805d
+    field public static final int GL_TEXTURE_GREEN_TYPE = 35857; // 0x8c11
+    field public static final int GL_TEXTURE_HEIGHT = 4097; // 0x1001
+    field public static final int GL_TEXTURE_INTERNAL_FORMAT = 4099; // 0x1003
+    field public static final int GL_TEXTURE_RED_SIZE = 32860; // 0x805c
+    field public static final int GL_TEXTURE_RED_TYPE = 35856; // 0x8c10
+    field public static final int GL_TEXTURE_SAMPLES = 37126; // 0x9106
+    field public static final int GL_TEXTURE_SHARED_SIZE = 35903; // 0x8c3f
+    field public static final int GL_TEXTURE_STENCIL_SIZE = 35057; // 0x88f1
+    field public static final int GL_TEXTURE_UPDATE_BARRIER_BIT = 256; // 0x100
+    field public static final int GL_TEXTURE_WIDTH = 4096; // 0x1000
+    field public static final int GL_TOP_LEVEL_ARRAY_SIZE = 37644; // 0x930c
+    field public static final int GL_TOP_LEVEL_ARRAY_STRIDE = 37645; // 0x930d
+    field public static final int GL_TRANSFORM_FEEDBACK_BARRIER_BIT = 2048; // 0x800
+    field public static final int GL_TRANSFORM_FEEDBACK_VARYING = 37620; // 0x92f4
+    field public static final int GL_TYPE = 37626; // 0x92fa
+    field public static final int GL_UNIFORM = 37601; // 0x92e1
+    field public static final int GL_UNIFORM_BARRIER_BIT = 4; // 0x4
+    field public static final int GL_UNIFORM_BLOCK = 37602; // 0x92e2
+    field public static final int GL_UNSIGNED_INT_ATOMIC_COUNTER = 37595; // 0x92db
+    field public static final int GL_UNSIGNED_INT_IMAGE_2D = 36963; // 0x9063
+    field public static final int GL_UNSIGNED_INT_IMAGE_2D_ARRAY = 36969; // 0x9069
+    field public static final int GL_UNSIGNED_INT_IMAGE_3D = 36964; // 0x9064
+    field public static final int GL_UNSIGNED_INT_IMAGE_CUBE = 36966; // 0x9066
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE = 37130; // 0x910a
+    field public static final int GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 1; // 0x1
+    field public static final int GL_VERTEX_ATTRIB_BINDING = 33492; // 0x82d4
+    field public static final int GL_VERTEX_ATTRIB_RELATIVE_OFFSET = 33493; // 0x82d5
+    field public static final int GL_VERTEX_BINDING_BUFFER = 36687; // 0x8f4f
+    field public static final int GL_VERTEX_BINDING_DIVISOR = 33494; // 0x82d6
+    field public static final int GL_VERTEX_BINDING_OFFSET = 33495; // 0x82d7
+    field public static final int GL_VERTEX_BINDING_STRIDE = 33496; // 0x82d8
+    field public static final int GL_VERTEX_SHADER_BIT = 1; // 0x1
+    field public static final int GL_WRITE_ONLY = 35001; // 0x88b9
+  }
+
+  public class GLES31Ext {
+    method public static void glBlendBarrierKHR();
+    method public static void glBlendEquationSeparateiEXT(int, int, int);
+    method public static void glBlendEquationiEXT(int, int);
+    method public static void glBlendFuncSeparateiEXT(int, int, int, int, int);
+    method public static void glBlendFunciEXT(int, int, int);
+    method public static void glColorMaskiEXT(int, boolean, boolean, boolean, boolean);
+    method public static void glCopyImageSubDataEXT(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glDebugMessageCallbackKHR(android.opengl.GLES31Ext.DebugProcKHR);
+    method public static void glDebugMessageControlKHR(int, int, int, int, int[], int, boolean);
+    method public static void glDebugMessageControlKHR(int, int, int, int, java.nio.IntBuffer, boolean);
+    method public static void glDebugMessageInsertKHR(int, int, int, int, String);
+    method public static void glDisableiEXT(int, int);
+    method public static void glEnableiEXT(int, int);
+    method public static void glFramebufferTextureEXT(int, int, int, int);
+    method public static android.opengl.GLES31Ext.DebugProcKHR glGetDebugMessageCallbackKHR();
+    method public static int glGetDebugMessageLogKHR(int, int, int[], int, int[], int, int[], int, int[], int, int[], int, byte[], int);
+    method public static int glGetDebugMessageLogKHR(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.ByteBuffer);
+    method public static String[] glGetDebugMessageLogKHR(int, int[], int, int[], int, int[], int, int[], int);
+    method public static String[] glGetDebugMessageLogKHR(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static String glGetObjectLabelKHR(int, int);
+    method public static String glGetObjectPtrLabelKHR(long);
+    method public static void glGetSamplerParameterIivEXT(int, int, int[], int);
+    method public static void glGetSamplerParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glGetSamplerParameterIuivEXT(int, int, int[], int);
+    method public static void glGetSamplerParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIivEXT(int, int, int[], int);
+    method public static void glGetTexParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIuivEXT(int, int, int[], int);
+    method public static void glGetTexParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static boolean glIsEnablediEXT(int, int);
+    method public static void glMinSampleShadingOES(float);
+    method public static void glObjectLabelKHR(int, int, int, String);
+    method public static void glObjectPtrLabelKHR(long, String);
+    method public static void glPatchParameteriEXT(int, int);
+    method public static void glPopDebugGroupKHR();
+    method public static void glPrimitiveBoundingBoxEXT(float, float, float, float, float, float, float, float);
+    method public static void glPushDebugGroupKHR(int, int, int, String);
+    method public static void glSamplerParameterIivEXT(int, int, int[], int);
+    method public static void glSamplerParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glSamplerParameterIuivEXT(int, int, int[], int);
+    method public static void glSamplerParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static void glTexBufferEXT(int, int, int);
+    method public static void glTexBufferRangeEXT(int, int, int, int, int);
+    method public static void glTexParameterIivEXT(int, int, int[], int);
+    method public static void glTexParameterIivEXT(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterIuivEXT(int, int, int[], int);
+    method public static void glTexParameterIuivEXT(int, int, java.nio.IntBuffer);
+    method public static void glTexStorage3DMultisampleOES(int, int, int, int, int, int, boolean);
+    field public static final int GL_BLEND_ADVANCED_COHERENT_KHR = 37509; // 0x9285
+    field public static final int GL_BUFFER_KHR = 33504; // 0x82e0
+    field public static final int GL_CLAMP_TO_BORDER_EXT = 33069; // 0x812d
+    field public static final int GL_COLORBURN_KHR = 37530; // 0x929a
+    field public static final int GL_COLORDODGE_KHR = 37529; // 0x9299
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x10_KHR = 37819; // 0x93bb
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x5_KHR = 37816; // 0x93b8
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x6_KHR = 37817; // 0x93b9
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x8_KHR = 37818; // 0x93ba
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x10_KHR = 37820; // 0x93bc
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x12_KHR = 37821; // 0x93bd
+    field public static final int GL_COMPRESSED_RGBA_ASTC_4x4_KHR = 37808; // 0x93b0
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x4_KHR = 37809; // 0x93b1
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x5_KHR = 37810; // 0x93b2
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x5_KHR = 37811; // 0x93b3
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x6_KHR = 37812; // 0x93b4
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x5_KHR = 37813; // 0x93b5
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x6_KHR = 37814; // 0x93b6
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x8_KHR = 37815; // 0x93b7
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR = 37851; // 0x93db
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR = 37848; // 0x93d8
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR = 37849; // 0x93d9
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR = 37850; // 0x93da
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR = 37852; // 0x93dc
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR = 37853; // 0x93dd
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 37840; // 0x93d0
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR = 37841; // 0x93d1
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR = 37842; // 0x93d2
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR = 37843; // 0x93d3
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR = 37844; // 0x93d4
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR = 37845; // 0x93d5
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR = 37846; // 0x93d6
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR = 37847; // 0x93d7
+    field public static final int GL_CONTEXT_FLAG_DEBUG_BIT_KHR = 2; // 0x2
+    field public static final int GL_DARKEN_KHR = 37527; // 0x9297
+    field public static final int GL_DEBUG_CALLBACK_FUNCTION_KHR = 33348; // 0x8244
+    field public static final int GL_DEBUG_CALLBACK_USER_PARAM_KHR = 33349; // 0x8245
+    field public static final int GL_DEBUG_GROUP_STACK_DEPTH_KHR = 33389; // 0x826d
+    field public static final int GL_DEBUG_LOGGED_MESSAGES_KHR = 37189; // 0x9145
+    field public static final int GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR = 33347; // 0x8243
+    field public static final int GL_DEBUG_OUTPUT_KHR = 37600; // 0x92e0
+    field public static final int GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR = 33346; // 0x8242
+    field public static final int GL_DEBUG_SEVERITY_HIGH_KHR = 37190; // 0x9146
+    field public static final int GL_DEBUG_SEVERITY_LOW_KHR = 37192; // 0x9148
+    field public static final int GL_DEBUG_SEVERITY_MEDIUM_KHR = 37191; // 0x9147
+    field public static final int GL_DEBUG_SEVERITY_NOTIFICATION_KHR = 33387; // 0x826b
+    field public static final int GL_DEBUG_SOURCE_API_KHR = 33350; // 0x8246
+    field public static final int GL_DEBUG_SOURCE_APPLICATION_KHR = 33354; // 0x824a
+    field public static final int GL_DEBUG_SOURCE_OTHER_KHR = 33355; // 0x824b
+    field public static final int GL_DEBUG_SOURCE_SHADER_COMPILER_KHR = 33352; // 0x8248
+    field public static final int GL_DEBUG_SOURCE_THIRD_PARTY_KHR = 33353; // 0x8249
+    field public static final int GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR = 33351; // 0x8247
+    field public static final int GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR = 33357; // 0x824d
+    field public static final int GL_DEBUG_TYPE_ERROR_KHR = 33356; // 0x824c
+    field public static final int GL_DEBUG_TYPE_MARKER_KHR = 33384; // 0x8268
+    field public static final int GL_DEBUG_TYPE_OTHER_KHR = 33361; // 0x8251
+    field public static final int GL_DEBUG_TYPE_PERFORMANCE_KHR = 33360; // 0x8250
+    field public static final int GL_DEBUG_TYPE_POP_GROUP_KHR = 33386; // 0x826a
+    field public static final int GL_DEBUG_TYPE_PORTABILITY_KHR = 33359; // 0x824f
+    field public static final int GL_DEBUG_TYPE_PUSH_GROUP_KHR = 33385; // 0x8269
+    field public static final int GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR = 33358; // 0x824e
+    field public static final int GL_DECODE_EXT = 35401; // 0x8a49
+    field public static final int GL_DIFFERENCE_KHR = 37534; // 0x929e
+    field public static final int GL_EXCLUSION_KHR = 37536; // 0x92a0
+    field public static final int GL_FIRST_VERTEX_CONVENTION_EXT = 36429; // 0x8e4d
+    field public static final int GL_FRACTIONAL_EVEN_EXT = 36476; // 0x8e7c
+    field public static final int GL_FRACTIONAL_ODD_EXT = 36475; // 0x8e7b
+    field public static final int GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES = 36445; // 0x8e5d
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = 36263; // 0x8da7
+    field public static final int GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT = 37650; // 0x9312
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = 36264; // 0x8da8
+    field public static final int GL_GEOMETRY_LINKED_INPUT_TYPE_EXT = 35095; // 0x8917
+    field public static final int GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT = 35096; // 0x8918
+    field public static final int GL_GEOMETRY_LINKED_VERTICES_OUT_EXT = 35094; // 0x8916
+    field public static final int GL_GEOMETRY_SHADER_BIT_EXT = 4; // 0x4
+    field public static final int GL_GEOMETRY_SHADER_EXT = 36313; // 0x8dd9
+    field public static final int GL_GEOMETRY_SHADER_INVOCATIONS_EXT = 34943; // 0x887f
+    field public static final int GL_HARDLIGHT_KHR = 37531; // 0x929b
+    field public static final int GL_HSL_COLOR_KHR = 37551; // 0x92af
+    field public static final int GL_HSL_HUE_KHR = 37549; // 0x92ad
+    field public static final int GL_HSL_LUMINOSITY_KHR = 37552; // 0x92b0
+    field public static final int GL_HSL_SATURATION_KHR = 37550; // 0x92ae
+    field public static final int GL_IMAGE_BUFFER_EXT = 36945; // 0x9051
+    field public static final int GL_IMAGE_CUBE_MAP_ARRAY_EXT = 36948; // 0x9054
+    field public static final int GL_INT_IMAGE_BUFFER_EXT = 36956; // 0x905c
+    field public static final int GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 36959; // 0x905f
+    field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37132; // 0x910c
+    field public static final int GL_INT_SAMPLER_BUFFER_EXT = 36304; // 0x8dd0
+    field public static final int GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 36878; // 0x900e
+    field public static final int GL_ISOLINES_EXT = 36474; // 0x8e7a
+    field public static final int GL_IS_PER_PATCH_EXT = 37607; // 0x92e7
+    field public static final int GL_LAST_VERTEX_CONVENTION_EXT = 36430; // 0x8e4e
+    field public static final int GL_LAYER_PROVOKING_VERTEX_EXT = 33374; // 0x825e
+    field public static final int GL_LIGHTEN_KHR = 37528; // 0x9298
+    field public static final int GL_LINES_ADJACENCY_EXT = 10; // 0xa
+    field public static final int GL_LINE_STRIP_ADJACENCY_EXT = 11; // 0xb
+    field public static final int GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT = 35378; // 0x8a32
+    field public static final int GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 36382; // 0x8e1e
+    field public static final int GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 36383; // 0x8e1f
+    field public static final int GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR = 33388; // 0x826c
+    field public static final int GL_MAX_DEBUG_LOGGED_MESSAGES_KHR = 37188; // 0x9144
+    field public static final int GL_MAX_DEBUG_MESSAGE_LENGTH_KHR = 37187; // 0x9143
+    field public static final int GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES = 36444; // 0x8e5c
+    field public static final int GL_MAX_FRAMEBUFFER_LAYERS_EXT = 37655; // 0x9317
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT = 37589; // 0x92d5
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT = 37583; // 0x92cf
+    field public static final int GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT = 37069; // 0x90cd
+    field public static final int GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT = 37155; // 0x9123
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT = 37156; // 0x9124
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT = 36320; // 0x8de0
+    field public static final int GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT = 36442; // 0x8e5a
+    field public static final int GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT = 37079; // 0x90d7
+    field public static final int GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = 35881; // 0x8c29
+    field public static final int GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT = 36321; // 0x8de1
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT = 35372; // 0x8a2c
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT = 36319; // 0x8ddf
+    field public static final int GL_MAX_LABEL_LENGTH_KHR = 33512; // 0x82e8
+    field public static final int GL_MAX_PATCH_VERTICES_EXT = 36477; // 0x8e7d
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT = 37587; // 0x92d3
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT = 37581; // 0x92cd
+    field public static final int GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT = 37067; // 0x90cb
+    field public static final int GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT = 34924; // 0x886c
+    field public static final int GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT = 36483; // 0x8e83
+    field public static final int GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT = 37080; // 0x90d8
+    field public static final int GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT = 36481; // 0x8e81
+    field public static final int GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT = 36485; // 0x8e85
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT = 36489; // 0x8e89
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT = 36479; // 0x8e7f
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT = 37588; // 0x92d4
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT = 37582; // 0x92ce
+    field public static final int GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT = 37068; // 0x90cc
+    field public static final int GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT = 34925; // 0x886d
+    field public static final int GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT = 36486; // 0x8e86
+    field public static final int GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT = 37081; // 0x90d9
+    field public static final int GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT = 36482; // 0x8e82
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT = 36490; // 0x8e8a
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT = 36480; // 0x8e80
+    field public static final int GL_MAX_TESS_GEN_LEVEL_EXT = 36478; // 0x8e7e
+    field public static final int GL_MAX_TESS_PATCH_COMPONENTS_EXT = 36484; // 0x8e84
+    field public static final int GL_MAX_TEXTURE_BUFFER_SIZE_EXT = 35883; // 0x8c2b
+    field public static final int GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES = 36443; // 0x8e5b
+    field public static final int GL_MIN_SAMPLE_SHADING_VALUE_OES = 35895; // 0x8c37
+    field public static final int GL_MULTIPLY_KHR = 37524; // 0x9294
+    field public static final int GL_OVERLAY_KHR = 37526; // 0x9296
+    field public static final int GL_PATCHES_EXT = 14; // 0xe
+    field public static final int GL_PATCH_VERTICES_EXT = 36466; // 0x8e72
+    field public static final int GL_PRIMITIVES_GENERATED_EXT = 35975; // 0x8c87
+    field public static final int GL_PRIMITIVE_BOUNDING_BOX_EXT = 37566; // 0x92be
+    field public static final int GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 33313; // 0x8221
+    field public static final int GL_PROGRAM_KHR = 33506; // 0x82e2
+    field public static final int GL_QUADS_EXT = 7; // 0x7
+    field public static final int GL_QUERY_KHR = 33507; // 0x82e3
+    field public static final int GL_REFERENCED_BY_GEOMETRY_SHADER_EXT = 37641; // 0x9309
+    field public static final int GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT = 37639; // 0x9307
+    field public static final int GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT = 37640; // 0x9308
+    field public static final int GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37131; // 0x910b
+    field public static final int GL_SAMPLER_BUFFER_EXT = 36290; // 0x8dc2
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_EXT = 36876; // 0x900c
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT = 36877; // 0x900d
+    field public static final int GL_SAMPLER_KHR = 33510; // 0x82e6
+    field public static final int GL_SAMPLE_SHADING_OES = 35894; // 0x8c36
+    field public static final int GL_SCREEN_KHR = 37525; // 0x9295
+    field public static final int GL_SHADER_KHR = 33505; // 0x82e1
+    field public static final int GL_SKIP_DECODE_EXT = 35402; // 0x8a4a
+    field public static final int GL_SOFTLIGHT_KHR = 37532; // 0x929c
+    field public static final int GL_STACK_OVERFLOW_KHR = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW_KHR = 1284; // 0x504
+    field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48
+    field public static final int GL_STENCIL_INDEX_OES = 6401; // 0x1901
+    field public static final int GL_TESS_CONTROL_OUTPUT_VERTICES_EXT = 36469; // 0x8e75
+    field public static final int GL_TESS_CONTROL_SHADER_BIT_EXT = 8; // 0x8
+    field public static final int GL_TESS_CONTROL_SHADER_EXT = 36488; // 0x8e88
+    field public static final int GL_TESS_EVALUATION_SHADER_BIT_EXT = 16; // 0x10
+    field public static final int GL_TESS_EVALUATION_SHADER_EXT = 36487; // 0x8e87
+    field public static final int GL_TESS_GEN_MODE_EXT = 36470; // 0x8e76
+    field public static final int GL_TESS_GEN_POINT_MODE_EXT = 36473; // 0x8e79
+    field public static final int GL_TESS_GEN_SPACING_EXT = 36471; // 0x8e77
+    field public static final int GL_TESS_GEN_VERTEX_ORDER_EXT = 36472; // 0x8e78
+    field public static final int GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES = 37122; // 0x9102
+    field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES = 37125; // 0x9105
+    field public static final int GL_TEXTURE_BINDING_BUFFER_EXT = 35884; // 0x8c2c
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT = 36874; // 0x900a
+    field public static final int GL_TEXTURE_BORDER_COLOR_EXT = 4100; // 0x1004
+    field public static final int GL_TEXTURE_BUFFER_BINDING_EXT = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT = 35885; // 0x8c2d
+    field public static final int GL_TEXTURE_BUFFER_EXT = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT = 37279; // 0x919f
+    field public static final int GL_TEXTURE_BUFFER_OFFSET_EXT = 37277; // 0x919d
+    field public static final int GL_TEXTURE_BUFFER_SIZE_EXT = 37278; // 0x919e
+    field public static final int GL_TEXTURE_CUBE_MAP_ARRAY_EXT = 36873; // 0x9009
+    field public static final int GL_TEXTURE_SRGB_DECODE_EXT = 35400; // 0x8a48
+    field public static final int GL_TRIANGLES_ADJACENCY_EXT = 12; // 0xc
+    field public static final int GL_TRIANGLE_STRIP_ADJACENCY_EXT = 13; // 0xd
+    field public static final int GL_UNDEFINED_VERTEX_EXT = 33376; // 0x8260
+    field public static final int GL_UNSIGNED_INT_IMAGE_BUFFER_EXT = 36967; // 0x9067
+    field public static final int GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT = 36970; // 0x906a
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES = 37133; // 0x910d
+    field public static final int GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT = 36312; // 0x8dd8
+    field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT = 36879; // 0x900f
+    field public static final int GL_VERTEX_ARRAY_KHR = 32884; // 0x8074
+  }
+
+  public static interface GLES31Ext.DebugProcKHR {
+    method public void onMessage(int, int, int, int, String);
+  }
+
+  public class GLES32 extends android.opengl.GLES31 {
+    method public static void glBlendBarrier();
+    method public static void glBlendEquationSeparatei(int, int, int);
+    method public static void glBlendEquationi(int, int);
+    method public static void glBlendFuncSeparatei(int, int, int, int, int);
+    method public static void glBlendFunci(int, int, int);
+    method public static void glColorMaski(int, boolean, boolean, boolean, boolean);
+    method public static void glCopyImageSubData(int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
+    method public static void glDebugMessageCallback(android.opengl.GLES32.DebugProc);
+    method public static void glDebugMessageControl(int, int, int, int, int[], int, boolean);
+    method public static void glDebugMessageControl(int, int, int, int, java.nio.IntBuffer, boolean);
+    method public static void glDebugMessageInsert(int, int, int, int, int, String);
+    method public static void glDisablei(int, int);
+    method public static void glDrawElementsBaseVertex(int, int, int, java.nio.Buffer, int);
+    method public static void glDrawElementsInstancedBaseVertex(int, int, int, java.nio.Buffer, int, int);
+    method public static void glDrawElementsInstancedBaseVertex(int, int, int, int, int, int);
+    method public static void glDrawRangeElementsBaseVertex(int, int, int, int, int, java.nio.Buffer, int);
+    method public static void glEnablei(int, int);
+    method public static void glFramebufferTexture(int, int, int, int);
+    method public static int glGetDebugMessageLog(int, int, int[], int, int[], int, int[], int, int[], int, int[], int, byte[], int);
+    method public static int glGetDebugMessageLog(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.ByteBuffer);
+    method public static String[] glGetDebugMessageLog(int, int[], int, int[], int, int[], int, int[], int);
+    method public static String[] glGetDebugMessageLog(int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer);
+    method public static int glGetGraphicsResetStatus();
+    method public static String glGetObjectLabel(int, int);
+    method public static String glGetObjectPtrLabel(long);
+    method public static long glGetPointerv(int);
+    method public static void glGetSamplerParameterIiv(int, int, int[], int);
+    method public static void glGetSamplerParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glGetSamplerParameterIuiv(int, int, int[], int);
+    method public static void glGetSamplerParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIiv(int, int, int[], int);
+    method public static void glGetTexParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glGetTexParameterIuiv(int, int, int[], int);
+    method public static void glGetTexParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glGetnUniformfv(int, int, int, float[], int);
+    method public static void glGetnUniformfv(int, int, int, java.nio.FloatBuffer);
+    method public static void glGetnUniformiv(int, int, int, int[], int);
+    method public static void glGetnUniformiv(int, int, int, java.nio.IntBuffer);
+    method public static void glGetnUniformuiv(int, int, int, int[], int);
+    method public static void glGetnUniformuiv(int, int, int, java.nio.IntBuffer);
+    method public static boolean glIsEnabledi(int, int);
+    method public static void glMinSampleShading(float);
+    method public static void glObjectLabel(int, int, int, String);
+    method public static void glObjectPtrLabel(long, String);
+    method public static void glPatchParameteri(int, int);
+    method public static void glPopDebugGroup();
+    method public static void glPrimitiveBoundingBox(float, float, float, float, float, float, float, float);
+    method public static void glPushDebugGroup(int, int, int, String);
+    method public static void glReadnPixels(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public static void glSamplerParameterIiv(int, int, int[], int);
+    method public static void glSamplerParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glSamplerParameterIuiv(int, int, int[], int);
+    method public static void glSamplerParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glTexBuffer(int, int, int);
+    method public static void glTexBufferRange(int, int, int, int, int);
+    method public static void glTexParameterIiv(int, int, int[], int);
+    method public static void glTexParameterIiv(int, int, java.nio.IntBuffer);
+    method public static void glTexParameterIuiv(int, int, int[], int);
+    method public static void glTexParameterIuiv(int, int, java.nio.IntBuffer);
+    method public static void glTexStorage3DMultisample(int, int, int, int, int, int, boolean);
+    field public static final int GL_BUFFER = 33504; // 0x82e0
+    field public static final int GL_CLAMP_TO_BORDER = 33069; // 0x812d
+    field public static final int GL_COLORBURN = 37530; // 0x929a
+    field public static final int GL_COLORDODGE = 37529; // 0x9299
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x10 = 37819; // 0x93bb
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x5 = 37816; // 0x93b8
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x6 = 37817; // 0x93b9
+    field public static final int GL_COMPRESSED_RGBA_ASTC_10x8 = 37818; // 0x93ba
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x10 = 37820; // 0x93bc
+    field public static final int GL_COMPRESSED_RGBA_ASTC_12x12 = 37821; // 0x93bd
+    field public static final int GL_COMPRESSED_RGBA_ASTC_4x4 = 37808; // 0x93b0
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x4 = 37809; // 0x93b1
+    field public static final int GL_COMPRESSED_RGBA_ASTC_5x5 = 37810; // 0x93b2
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x5 = 37811; // 0x93b3
+    field public static final int GL_COMPRESSED_RGBA_ASTC_6x6 = 37812; // 0x93b4
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x5 = 37813; // 0x93b5
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x6 = 37814; // 0x93b6
+    field public static final int GL_COMPRESSED_RGBA_ASTC_8x8 = 37815; // 0x93b7
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 = 37851; // 0x93db
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 = 37848; // 0x93d8
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 = 37849; // 0x93d9
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 = 37850; // 0x93da
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 = 37852; // 0x93dc
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 = 37853; // 0x93dd
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 = 37840; // 0x93d0
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 = 37841; // 0x93d1
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 = 37842; // 0x93d2
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 = 37843; // 0x93d3
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 = 37844; // 0x93d4
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 = 37845; // 0x93d5
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 = 37846; // 0x93d6
+    field public static final int GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 = 37847; // 0x93d7
+    field public static final int GL_CONTEXT_FLAGS = 33310; // 0x821e
+    field public static final int GL_CONTEXT_FLAG_DEBUG_BIT = 2; // 0x2
+    field public static final int GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT = 4; // 0x4
+    field public static final int GL_CONTEXT_LOST = 1287; // 0x507
+    field public static final int GL_DARKEN = 37527; // 0x9297
+    field public static final int GL_DEBUG_CALLBACK_FUNCTION = 33348; // 0x8244
+    field public static final int GL_DEBUG_CALLBACK_USER_PARAM = 33349; // 0x8245
+    field public static final int GL_DEBUG_GROUP_STACK_DEPTH = 33389; // 0x826d
+    field public static final int GL_DEBUG_LOGGED_MESSAGES = 37189; // 0x9145
+    field public static final int GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = 33347; // 0x8243
+    field public static final int GL_DEBUG_OUTPUT = 37600; // 0x92e0
+    field public static final int GL_DEBUG_OUTPUT_SYNCHRONOUS = 33346; // 0x8242
+    field public static final int GL_DEBUG_SEVERITY_HIGH = 37190; // 0x9146
+    field public static final int GL_DEBUG_SEVERITY_LOW = 37192; // 0x9148
+    field public static final int GL_DEBUG_SEVERITY_MEDIUM = 37191; // 0x9147
+    field public static final int GL_DEBUG_SEVERITY_NOTIFICATION = 33387; // 0x826b
+    field public static final int GL_DEBUG_SOURCE_API = 33350; // 0x8246
+    field public static final int GL_DEBUG_SOURCE_APPLICATION = 33354; // 0x824a
+    field public static final int GL_DEBUG_SOURCE_OTHER = 33355; // 0x824b
+    field public static final int GL_DEBUG_SOURCE_SHADER_COMPILER = 33352; // 0x8248
+    field public static final int GL_DEBUG_SOURCE_THIRD_PARTY = 33353; // 0x8249
+    field public static final int GL_DEBUG_SOURCE_WINDOW_SYSTEM = 33351; // 0x8247
+    field public static final int GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR = 33357; // 0x824d
+    field public static final int GL_DEBUG_TYPE_ERROR = 33356; // 0x824c
+    field public static final int GL_DEBUG_TYPE_MARKER = 33384; // 0x8268
+    field public static final int GL_DEBUG_TYPE_OTHER = 33361; // 0x8251
+    field public static final int GL_DEBUG_TYPE_PERFORMANCE = 33360; // 0x8250
+    field public static final int GL_DEBUG_TYPE_POP_GROUP = 33386; // 0x826a
+    field public static final int GL_DEBUG_TYPE_PORTABILITY = 33359; // 0x824f
+    field public static final int GL_DEBUG_TYPE_PUSH_GROUP = 33385; // 0x8269
+    field public static final int GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR = 33358; // 0x824e
+    field public static final int GL_DIFFERENCE = 37534; // 0x929e
+    field public static final int GL_EXCLUSION = 37536; // 0x92a0
+    field public static final int GL_FIRST_VERTEX_CONVENTION = 36429; // 0x8e4d
+    field public static final int GL_FRACTIONAL_EVEN = 36476; // 0x8e7c
+    field public static final int GL_FRACTIONAL_ODD = 36475; // 0x8e7b
+    field public static final int GL_FRAGMENT_INTERPOLATION_OFFSET_BITS = 36445; // 0x8e5d
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_LAYERED = 36263; // 0x8da7
+    field public static final int GL_FRAMEBUFFER_DEFAULT_LAYERS = 37650; // 0x9312
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS = 36264; // 0x8da8
+    field public static final int GL_GEOMETRY_INPUT_TYPE = 35095; // 0x8917
+    field public static final int GL_GEOMETRY_OUTPUT_TYPE = 35096; // 0x8918
+    field public static final int GL_GEOMETRY_SHADER = 36313; // 0x8dd9
+    field public static final int GL_GEOMETRY_SHADER_BIT = 4; // 0x4
+    field public static final int GL_GEOMETRY_SHADER_INVOCATIONS = 34943; // 0x887f
+    field public static final int GL_GEOMETRY_VERTICES_OUT = 35094; // 0x8916
+    field public static final int GL_GUILTY_CONTEXT_RESET = 33363; // 0x8253
+    field public static final int GL_HARDLIGHT = 37531; // 0x929b
+    field public static final int GL_HSL_COLOR = 37551; // 0x92af
+    field public static final int GL_HSL_HUE = 37549; // 0x92ad
+    field public static final int GL_HSL_LUMINOSITY = 37552; // 0x92b0
+    field public static final int GL_HSL_SATURATION = 37550; // 0x92ae
+    field public static final int GL_IMAGE_BUFFER = 36945; // 0x9051
+    field public static final int GL_IMAGE_CUBE_MAP_ARRAY = 36948; // 0x9054
+    field public static final int GL_INNOCENT_CONTEXT_RESET = 33364; // 0x8254
+    field public static final int GL_INT_IMAGE_BUFFER = 36956; // 0x905c
+    field public static final int GL_INT_IMAGE_CUBE_MAP_ARRAY = 36959; // 0x905f
+    field public static final int GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 37132; // 0x910c
+    field public static final int GL_INT_SAMPLER_BUFFER = 36304; // 0x8dd0
+    field public static final int GL_INT_SAMPLER_CUBE_MAP_ARRAY = 36878; // 0x900e
+    field public static final int GL_ISOLINES = 36474; // 0x8e7a
+    field public static final int GL_IS_PER_PATCH = 37607; // 0x92e7
+    field public static final int GL_LAST_VERTEX_CONVENTION = 36430; // 0x8e4e
+    field public static final int GL_LAYER_PROVOKING_VERTEX = 33374; // 0x825e
+    field public static final int GL_LIGHTEN = 37528; // 0x9298
+    field public static final int GL_LINES_ADJACENCY = 10; // 0xa
+    field public static final int GL_LINE_STRIP_ADJACENCY = 11; // 0xb
+    field public static final int GL_LOSE_CONTEXT_ON_RESET = 33362; // 0x8252
+    field public static final int GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS = 35378; // 0x8a32
+    field public static final int GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS = 36382; // 0x8e1e
+    field public static final int GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS = 36383; // 0x8e1f
+    field public static final int GL_MAX_DEBUG_GROUP_STACK_DEPTH = 33388; // 0x826c
+    field public static final int GL_MAX_DEBUG_LOGGED_MESSAGES = 37188; // 0x9144
+    field public static final int GL_MAX_DEBUG_MESSAGE_LENGTH = 37187; // 0x9143
+    field public static final int GL_MAX_FRAGMENT_INTERPOLATION_OFFSET = 36444; // 0x8e5c
+    field public static final int GL_MAX_FRAMEBUFFER_LAYERS = 37655; // 0x9317
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTERS = 37589; // 0x92d5
+    field public static final int GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS = 37583; // 0x92cf
+    field public static final int GL_MAX_GEOMETRY_IMAGE_UNIFORMS = 37069; // 0x90cd
+    field public static final int GL_MAX_GEOMETRY_INPUT_COMPONENTS = 37155; // 0x9123
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_COMPONENTS = 37156; // 0x9124
+    field public static final int GL_MAX_GEOMETRY_OUTPUT_VERTICES = 36320; // 0x8de0
+    field public static final int GL_MAX_GEOMETRY_SHADER_INVOCATIONS = 36442; // 0x8e5a
+    field public static final int GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS = 37079; // 0x90d7
+    field public static final int GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS = 35881; // 0x8c29
+    field public static final int GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 36321; // 0x8de1
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_BLOCKS = 35372; // 0x8a2c
+    field public static final int GL_MAX_GEOMETRY_UNIFORM_COMPONENTS = 36319; // 0x8ddf
+    field public static final int GL_MAX_LABEL_LENGTH = 33512; // 0x82e8
+    field public static final int GL_MAX_PATCH_VERTICES = 36477; // 0x8e7d
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS = 37587; // 0x92d3
+    field public static final int GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS = 37581; // 0x92cd
+    field public static final int GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS = 37067; // 0x90cb
+    field public static final int GL_MAX_TESS_CONTROL_INPUT_COMPONENTS = 34924; // 0x886c
+    field public static final int GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS = 36483; // 0x8e83
+    field public static final int GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS = 37080; // 0x90d8
+    field public static final int GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS = 36481; // 0x8e81
+    field public static final int GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS = 36485; // 0x8e85
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS = 36489; // 0x8e89
+    field public static final int GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS = 36479; // 0x8e7f
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS = 37588; // 0x92d4
+    field public static final int GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS = 37582; // 0x92ce
+    field public static final int GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS = 37068; // 0x90cc
+    field public static final int GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS = 34925; // 0x886d
+    field public static final int GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS = 36486; // 0x8e86
+    field public static final int GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS = 37081; // 0x90d9
+    field public static final int GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS = 36482; // 0x8e82
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS = 36490; // 0x8e8a
+    field public static final int GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS = 36480; // 0x8e80
+    field public static final int GL_MAX_TESS_GEN_LEVEL = 36478; // 0x8e7e
+    field public static final int GL_MAX_TESS_PATCH_COMPONENTS = 36484; // 0x8e84
+    field public static final int GL_MAX_TEXTURE_BUFFER_SIZE = 35883; // 0x8c2b
+    field public static final int GL_MIN_FRAGMENT_INTERPOLATION_OFFSET = 36443; // 0x8e5b
+    field public static final int GL_MIN_SAMPLE_SHADING_VALUE = 35895; // 0x8c37
+    field public static final int GL_MULTIPLY = 37524; // 0x9294
+    field public static final int GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY = 37762; // 0x9382
+    field public static final int GL_MULTISAMPLE_LINE_WIDTH_RANGE = 37761; // 0x9381
+    field public static final int GL_NO_RESET_NOTIFICATION = 33377; // 0x8261
+    field public static final int GL_OVERLAY = 37526; // 0x9296
+    field public static final int GL_PATCHES = 14; // 0xe
+    field public static final int GL_PATCH_VERTICES = 36466; // 0x8e72
+    field public static final int GL_PRIMITIVES_GENERATED = 35975; // 0x8c87
+    field public static final int GL_PRIMITIVE_BOUNDING_BOX = 37566; // 0x92be
+    field public static final int GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED = 33313; // 0x8221
+    field public static final int GL_PROGRAM = 33506; // 0x82e2
+    field public static final int GL_PROGRAM_PIPELINE = 33508; // 0x82e4
+    field public static final int GL_QUADS = 7; // 0x7
+    field public static final int GL_QUERY = 33507; // 0x82e3
+    field public static final int GL_REFERENCED_BY_GEOMETRY_SHADER = 37641; // 0x9309
+    field public static final int GL_REFERENCED_BY_TESS_CONTROL_SHADER = 37639; // 0x9307
+    field public static final int GL_REFERENCED_BY_TESS_EVALUATION_SHADER = 37640; // 0x9308
+    field public static final int GL_RESET_NOTIFICATION_STRATEGY = 33366; // 0x8256
+    field public static final int GL_SAMPLER = 33510; // 0x82e6
+    field public static final int GL_SAMPLER_2D_MULTISAMPLE_ARRAY = 37131; // 0x910b
+    field public static final int GL_SAMPLER_BUFFER = 36290; // 0x8dc2
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY = 36876; // 0x900c
+    field public static final int GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW = 36877; // 0x900d
+    field public static final int GL_SAMPLE_SHADING = 35894; // 0x8c36
+    field public static final int GL_SCREEN = 37525; // 0x9295
+    field public static final int GL_SHADER = 33505; // 0x82e1
+    field public static final int GL_SOFTLIGHT = 37532; // 0x929c
+    field public static final int GL_STACK_OVERFLOW = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504
+    field public static final int GL_TESS_CONTROL_OUTPUT_VERTICES = 36469; // 0x8e75
+    field public static final int GL_TESS_CONTROL_SHADER = 36488; // 0x8e88
+    field public static final int GL_TESS_CONTROL_SHADER_BIT = 8; // 0x8
+    field public static final int GL_TESS_EVALUATION_SHADER = 36487; // 0x8e87
+    field public static final int GL_TESS_EVALUATION_SHADER_BIT = 16; // 0x10
+    field public static final int GL_TESS_GEN_MODE = 36470; // 0x8e76
+    field public static final int GL_TESS_GEN_POINT_MODE = 36473; // 0x8e79
+    field public static final int GL_TESS_GEN_SPACING = 36471; // 0x8e77
+    field public static final int GL_TESS_GEN_VERTEX_ORDER = 36472; // 0x8e78
+    field public static final int GL_TEXTURE_2D_MULTISAMPLE_ARRAY = 37122; // 0x9102
+    field public static final int GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY = 37125; // 0x9105
+    field public static final int GL_TEXTURE_BINDING_BUFFER = 35884; // 0x8c2c
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP_ARRAY = 36874; // 0x900a
+    field public static final int GL_TEXTURE_BORDER_COLOR = 4100; // 0x1004
+    field public static final int GL_TEXTURE_BUFFER = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_BINDING = 35882; // 0x8c2a
+    field public static final int GL_TEXTURE_BUFFER_DATA_STORE_BINDING = 35885; // 0x8c2d
+    field public static final int GL_TEXTURE_BUFFER_OFFSET = 37277; // 0x919d
+    field public static final int GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT = 37279; // 0x919f
+    field public static final int GL_TEXTURE_BUFFER_SIZE = 37278; // 0x919e
+    field public static final int GL_TEXTURE_CUBE_MAP_ARRAY = 36873; // 0x9009
+    field public static final int GL_TRIANGLES_ADJACENCY = 12; // 0xc
+    field public static final int GL_TRIANGLE_STRIP_ADJACENCY = 13; // 0xd
+    field public static final int GL_UNDEFINED_VERTEX = 33376; // 0x8260
+    field public static final int GL_UNKNOWN_CONTEXT_RESET = 33365; // 0x8255
+    field public static final int GL_UNSIGNED_INT_IMAGE_BUFFER = 36967; // 0x9067
+    field public static final int GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY = 36970; // 0x906a
+    field public static final int GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY = 37133; // 0x910d
+    field public static final int GL_UNSIGNED_INT_SAMPLER_BUFFER = 36312; // 0x8dd8
+    field public static final int GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY = 36879; // 0x900f
+    field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074
+  }
+
+  public static interface GLES32.DebugProc {
+    method public void onMessage(int, int, int, int, String);
+  }
+
+  public class GLException extends java.lang.RuntimeException {
+    ctor public GLException(int);
+    ctor public GLException(int, String);
+  }
+
+  public class GLSurfaceView extends android.view.SurfaceView implements android.view.SurfaceHolder.Callback2 {
+    ctor public GLSurfaceView(android.content.Context);
+    ctor public GLSurfaceView(android.content.Context, android.util.AttributeSet);
+    method public int getDebugFlags();
+    method public boolean getPreserveEGLContextOnPause();
+    method public int getRenderMode();
+    method public void onPause();
+    method public void onResume();
+    method public void queueEvent(Runnable);
+    method public void requestRender();
+    method public void setDebugFlags(int);
+    method public void setEGLConfigChooser(android.opengl.GLSurfaceView.EGLConfigChooser);
+    method public void setEGLConfigChooser(boolean);
+    method public void setEGLConfigChooser(int, int, int, int, int, int);
+    method public void setEGLContextClientVersion(int);
+    method public void setEGLContextFactory(android.opengl.GLSurfaceView.EGLContextFactory);
+    method public void setEGLWindowSurfaceFactory(android.opengl.GLSurfaceView.EGLWindowSurfaceFactory);
+    method public void setGLWrapper(android.opengl.GLSurfaceView.GLWrapper);
+    method public void setPreserveEGLContextOnPause(boolean);
+    method public void setRenderMode(int);
+    method public void setRenderer(android.opengl.GLSurfaceView.Renderer);
+    method public void surfaceChanged(android.view.SurfaceHolder, int, int, int);
+    method public void surfaceCreated(android.view.SurfaceHolder);
+    method public void surfaceDestroyed(android.view.SurfaceHolder);
+    method @Deprecated public void surfaceRedrawNeeded(android.view.SurfaceHolder);
+    field public static final int DEBUG_CHECK_GL_ERROR = 1; // 0x1
+    field public static final int DEBUG_LOG_GL_CALLS = 2; // 0x2
+    field public static final int RENDERMODE_CONTINUOUSLY = 1; // 0x1
+    field public static final int RENDERMODE_WHEN_DIRTY = 0; // 0x0
+  }
+
+  public static interface GLSurfaceView.EGLConfigChooser {
+    method public javax.microedition.khronos.egl.EGLConfig chooseConfig(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay);
+  }
+
+  public static interface GLSurfaceView.EGLContextFactory {
+    method public javax.microedition.khronos.egl.EGLContext createContext(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig);
+    method public void destroyContext(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext);
+  }
+
+  public static interface GLSurfaceView.EGLWindowSurfaceFactory {
+    method public javax.microedition.khronos.egl.EGLSurface createWindowSurface(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, Object);
+    method public void destroySurface(javax.microedition.khronos.egl.EGL10, javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface);
+  }
+
+  public static interface GLSurfaceView.GLWrapper {
+    method public javax.microedition.khronos.opengles.GL wrap(javax.microedition.khronos.opengles.GL);
+  }
+
+  public static interface GLSurfaceView.Renderer {
+    method public void onDrawFrame(javax.microedition.khronos.opengles.GL10);
+    method public void onSurfaceChanged(javax.microedition.khronos.opengles.GL10, int, int);
+    method public void onSurfaceCreated(javax.microedition.khronos.opengles.GL10, javax.microedition.khronos.egl.EGLConfig);
+  }
+
+  public class GLU {
+    ctor public GLU();
+    method public static String gluErrorString(int);
+    method public static void gluLookAt(javax.microedition.khronos.opengles.GL10, float, float, float, float, float, float, float, float, float);
+    method public static void gluOrtho2D(javax.microedition.khronos.opengles.GL10, float, float, float, float);
+    method public static void gluPerspective(javax.microedition.khronos.opengles.GL10, float, float, float, float);
+    method public static int gluProject(float, float, float, float[], int, float[], int, int[], int, float[], int);
+    method public static int gluUnProject(float, float, float, float[], int, float[], int, int[], int, float[], int);
+  }
+
+  public final class GLUtils {
+    method public static String getEGLErrorString(int);
+    method public static int getInternalFormat(android.graphics.Bitmap);
+    method public static int getType(android.graphics.Bitmap);
+    method public static void texImage2D(int, int, int, android.graphics.Bitmap, int);
+    method public static void texImage2D(int, int, int, android.graphics.Bitmap, int, int);
+    method public static void texImage2D(int, int, android.graphics.Bitmap, int);
+    method public static void texSubImage2D(int, int, int, int, android.graphics.Bitmap);
+    method public static void texSubImage2D(int, int, int, int, android.graphics.Bitmap, int, int);
+  }
+
+  public class Matrix {
+    ctor @Deprecated public Matrix();
+    method public static void frustumM(float[], int, float, float, float, float, float, float);
+    method public static boolean invertM(float[], int, float[], int);
+    method public static float length(float, float, float);
+    method public static void multiplyMM(float[], int, float[], int, float[], int);
+    method public static void multiplyMV(float[], int, float[], int, float[], int);
+    method public static void orthoM(float[], int, float, float, float, float, float, float);
+    method public static void perspectiveM(float[], int, float, float, float, float);
+    method public static void rotateM(float[], int, float[], int, float, float, float, float);
+    method public static void rotateM(float[], int, float, float, float, float);
+    method public static void scaleM(float[], int, float[], int, float, float, float);
+    method public static void scaleM(float[], int, float, float, float);
+    method public static void setIdentityM(float[], int);
+    method public static void setLookAtM(float[], int, float, float, float, float, float, float, float, float, float);
+    method public static void setRotateEulerM(float[], int, float, float, float);
+    method public static void setRotateM(float[], int, float, float, float, float);
+    method public static void translateM(float[], int, float[], int, float, float, float);
+    method public static void translateM(float[], int, float, float, float);
+    method public static void transposeM(float[], int, float[], int);
+  }
+
+  public class Visibility {
+    ctor public Visibility();
+    method public static void computeBoundingSphere(float[], int, int, float[], int);
+    method public static int frustumCullSpheres(float[], int, float[], int, int, int[], int, int);
+    method public static int visibilityTest(float[], int, float[], int, char[], int, int);
+  }
+
+}
+
+package android.os {
+
+  @Deprecated public abstract class AsyncTask<Params, Progress, Result> {
+    ctor @Deprecated public AsyncTask();
+    method @Deprecated public final boolean cancel(boolean);
+    method @Deprecated @WorkerThread protected abstract Result doInBackground(Params...);
+    method @Deprecated @MainThread public final android.os.AsyncTask<Params,Progress,Result> execute(Params...);
+    method @Deprecated @MainThread public static void execute(Runnable);
+    method @Deprecated @MainThread public final android.os.AsyncTask<Params,Progress,Result> executeOnExecutor(java.util.concurrent.Executor, Params...);
+    method @Deprecated public final Result get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method @Deprecated public final Result get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method @Deprecated public final android.os.AsyncTask.Status getStatus();
+    method @Deprecated public final boolean isCancelled();
+    method @Deprecated @MainThread protected void onCancelled(Result);
+    method @Deprecated @MainThread protected void onCancelled();
+    method @Deprecated @MainThread protected void onPostExecute(Result);
+    method @Deprecated @MainThread protected void onPreExecute();
+    method @Deprecated @MainThread protected void onProgressUpdate(Progress...);
+    method @Deprecated @WorkerThread protected final void publishProgress(Progress...);
+    field @Deprecated public static final java.util.concurrent.Executor SERIAL_EXECUTOR;
+    field @Deprecated public static final java.util.concurrent.Executor THREAD_POOL_EXECUTOR;
+  }
+
+  @Deprecated public enum AsyncTask.Status {
+    enum_constant @Deprecated public static final android.os.AsyncTask.Status FINISHED;
+    enum_constant @Deprecated public static final android.os.AsyncTask.Status PENDING;
+    enum_constant @Deprecated public static final android.os.AsyncTask.Status RUNNING;
+  }
+
+  public class BadParcelableException extends android.util.AndroidRuntimeException {
+    ctor public BadParcelableException(String);
+    ctor public BadParcelableException(Exception);
+  }
+
+  public class BaseBundle {
+    method public void clear();
+    method public boolean containsKey(String);
+    method @Nullable public Object get(String);
+    method public boolean getBoolean(String);
+    method public boolean getBoolean(String, boolean);
+    method @Nullable public boolean[] getBooleanArray(@Nullable String);
+    method public double getDouble(String);
+    method public double getDouble(String, double);
+    method @Nullable public double[] getDoubleArray(@Nullable String);
+    method public int getInt(String);
+    method public int getInt(String, int);
+    method @Nullable public int[] getIntArray(@Nullable String);
+    method public long getLong(String);
+    method public long getLong(String, long);
+    method @Nullable public long[] getLongArray(@Nullable String);
+    method @Nullable public String getString(@Nullable String);
+    method public String getString(@Nullable String, String);
+    method @Nullable public String[] getStringArray(@Nullable String);
+    method public boolean isEmpty();
+    method public java.util.Set<java.lang.String> keySet();
+    method public void putAll(android.os.PersistableBundle);
+    method public void putBoolean(@Nullable String, boolean);
+    method public void putBooleanArray(@Nullable String, @Nullable boolean[]);
+    method public void putDouble(@Nullable String, double);
+    method public void putDoubleArray(@Nullable String, @Nullable double[]);
+    method public void putInt(@Nullable String, int);
+    method public void putIntArray(@Nullable String, @Nullable int[]);
+    method public void putLong(@Nullable String, long);
+    method public void putLongArray(@Nullable String, @Nullable long[]);
+    method public void putString(@Nullable String, @Nullable String);
+    method public void putStringArray(@Nullable String, @Nullable String[]);
+    method public void remove(String);
+    method public int size();
+  }
+
+  public class BatteryManager {
+    method public long computeChargeTimeRemaining();
+    method public int getIntProperty(int);
+    method public long getLongProperty(int);
+    method public boolean isCharging();
+    field public static final String ACTION_CHARGING = "android.os.action.CHARGING";
+    field public static final String ACTION_DISCHARGING = "android.os.action.DISCHARGING";
+    field public static final int BATTERY_HEALTH_COLD = 7; // 0x7
+    field public static final int BATTERY_HEALTH_DEAD = 4; // 0x4
+    field public static final int BATTERY_HEALTH_GOOD = 2; // 0x2
+    field public static final int BATTERY_HEALTH_OVERHEAT = 3; // 0x3
+    field public static final int BATTERY_HEALTH_OVER_VOLTAGE = 5; // 0x5
+    field public static final int BATTERY_HEALTH_UNKNOWN = 1; // 0x1
+    field public static final int BATTERY_HEALTH_UNSPECIFIED_FAILURE = 6; // 0x6
+    field public static final int BATTERY_PLUGGED_AC = 1; // 0x1
+    field public static final int BATTERY_PLUGGED_USB = 2; // 0x2
+    field public static final int BATTERY_PLUGGED_WIRELESS = 4; // 0x4
+    field public static final int BATTERY_PROPERTY_CAPACITY = 4; // 0x4
+    field public static final int BATTERY_PROPERTY_CHARGE_COUNTER = 1; // 0x1
+    field public static final int BATTERY_PROPERTY_CURRENT_AVERAGE = 3; // 0x3
+    field public static final int BATTERY_PROPERTY_CURRENT_NOW = 2; // 0x2
+    field public static final int BATTERY_PROPERTY_ENERGY_COUNTER = 5; // 0x5
+    field public static final int BATTERY_PROPERTY_STATUS = 6; // 0x6
+    field public static final int BATTERY_STATUS_CHARGING = 2; // 0x2
+    field public static final int BATTERY_STATUS_DISCHARGING = 3; // 0x3
+    field public static final int BATTERY_STATUS_FULL = 5; // 0x5
+    field public static final int BATTERY_STATUS_NOT_CHARGING = 4; // 0x4
+    field public static final int BATTERY_STATUS_UNKNOWN = 1; // 0x1
+    field public static final String EXTRA_BATTERY_LOW = "battery_low";
+    field public static final String EXTRA_HEALTH = "health";
+    field public static final String EXTRA_ICON_SMALL = "icon-small";
+    field public static final String EXTRA_LEVEL = "level";
+    field public static final String EXTRA_PLUGGED = "plugged";
+    field public static final String EXTRA_PRESENT = "present";
+    field public static final String EXTRA_SCALE = "scale";
+    field public static final String EXTRA_STATUS = "status";
+    field public static final String EXTRA_TECHNOLOGY = "technology";
+    field public static final String EXTRA_TEMPERATURE = "temperature";
+    field public static final String EXTRA_VOLTAGE = "voltage";
+  }
+
+  public class Binder implements android.os.IBinder {
+    ctor public Binder();
+    ctor public Binder(@Nullable String);
+    method public void attachInterface(@Nullable android.os.IInterface, @Nullable String);
+    method public static final long clearCallingIdentity();
+    method public static final long clearCallingWorkSource();
+    method public void dump(@NonNull java.io.FileDescriptor, @Nullable String[]);
+    method protected void dump(@NonNull java.io.FileDescriptor, @NonNull java.io.PrintWriter, @Nullable String[]);
+    method public void dumpAsync(@NonNull java.io.FileDescriptor, @Nullable String[]);
+    method public static final void flushPendingCommands();
+    method public static final int getCallingPid();
+    method public static final int getCallingUid();
+    method public static final int getCallingUidOrThrow();
+    method @NonNull public static final android.os.UserHandle getCallingUserHandle();
+    method public static final int getCallingWorkSourceUid();
+    method @Nullable public String getInterfaceDescriptor();
+    method public boolean isBinderAlive();
+    method public static final void joinThreadPool();
+    method public void linkToDeath(@NonNull android.os.IBinder.DeathRecipient, int);
+    method protected boolean onTransact(int, @NonNull android.os.Parcel, @Nullable android.os.Parcel, int) throws android.os.RemoteException;
+    method public boolean pingBinder();
+    method @Nullable public android.os.IInterface queryLocalInterface(@NonNull String);
+    method public static final void restoreCallingIdentity(long);
+    method public static final void restoreCallingWorkSource(long);
+    method public static final long setCallingWorkSourceUid(int);
+    method public final boolean transact(int, @NonNull android.os.Parcel, @Nullable android.os.Parcel, int) throws android.os.RemoteException;
+    method public boolean unlinkToDeath(@NonNull android.os.IBinder.DeathRecipient, int);
+  }
+
+  public final class BugreportManager {
+    method @WorkerThread public void cancelBugreport();
+    method @WorkerThread public void startConnectivityBugreport(@NonNull android.os.ParcelFileDescriptor, @NonNull java.util.concurrent.Executor, @NonNull android.os.BugreportManager.BugreportCallback);
+  }
+
+  public abstract static class BugreportManager.BugreportCallback {
+    ctor public BugreportManager.BugreportCallback();
+    method public void onEarlyReportFinished();
+    method public void onError(int);
+    method public void onFinished();
+    method public void onProgress(@FloatRange(from=0.0f, to=100.0f) float);
+    field public static final int BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS = 5; // 0x5
+    field public static final int BUGREPORT_ERROR_INVALID_INPUT = 1; // 0x1
+    field public static final int BUGREPORT_ERROR_RUNTIME = 2; // 0x2
+    field public static final int BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT = 4; // 0x4
+    field public static final int BUGREPORT_ERROR_USER_DENIED_CONSENT = 3; // 0x3
+  }
+
+  public class Build {
+    ctor public Build();
+    method @NonNull public static java.util.List<android.os.Build.Partition> getFingerprintedPartitions();
+    method public static String getRadioVersion();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public static String getSerial();
+    field public static final String BOARD;
+    field public static final String BOOTLOADER;
+    field public static final String BRAND;
+    field @Deprecated public static final String CPU_ABI;
+    field @Deprecated public static final String CPU_ABI2;
+    field public static final String DEVICE;
+    field public static final String DISPLAY;
+    field public static final String FINGERPRINT;
+    field public static final String HARDWARE;
+    field public static final String HOST;
+    field public static final String ID;
+    field public static final String MANUFACTURER;
+    field public static final String MODEL;
+    field @NonNull public static final String ODM_SKU;
+    field public static final String PRODUCT;
+    field @Deprecated public static final String RADIO;
+    field @Deprecated public static final String SERIAL;
+    field @NonNull public static final String SKU;
+    field @NonNull public static final String SOC_MANUFACTURER;
+    field @NonNull public static final String SOC_MODEL;
+    field public static final String[] SUPPORTED_32_BIT_ABIS;
+    field public static final String[] SUPPORTED_64_BIT_ABIS;
+    field public static final String[] SUPPORTED_ABIS;
+    field public static final String TAGS;
+    field public static final long TIME;
+    field public static final String TYPE;
+    field public static final String UNKNOWN = "unknown";
+    field public static final String USER;
+  }
+
+  public static class Build.Partition {
+    method public long getBuildTimeMillis();
+    method @NonNull public String getFingerprint();
+    method @NonNull public String getName();
+    field public static final String PARTITION_NAME_SYSTEM = "system";
+  }
+
+  public static class Build.VERSION {
+    ctor public Build.VERSION();
+    field public static final String BASE_OS;
+    field public static final String CODENAME;
+    field public static final String INCREMENTAL;
+    field public static final int MEDIA_PERFORMANCE_CLASS;
+    field public static final int PREVIEW_SDK_INT;
+    field public static final String RELEASE;
+    field @NonNull public static final String RELEASE_OR_CODENAME;
+    field @Deprecated public static final String SDK;
+    field public static final int SDK_INT;
+    field public static final String SECURITY_PATCH;
+  }
+
+  public static class Build.VERSION_CODES {
+    ctor public Build.VERSION_CODES();
+    field public static final int BASE = 1; // 0x1
+    field public static final int BASE_1_1 = 2; // 0x2
+    field public static final int CUPCAKE = 3; // 0x3
+    field public static final int CUR_DEVELOPMENT = 10000; // 0x2710
+    field public static final int DONUT = 4; // 0x4
+    field public static final int ECLAIR = 5; // 0x5
+    field public static final int ECLAIR_0_1 = 6; // 0x6
+    field public static final int ECLAIR_MR1 = 7; // 0x7
+    field public static final int FROYO = 8; // 0x8
+    field public static final int GINGERBREAD = 9; // 0x9
+    field public static final int GINGERBREAD_MR1 = 10; // 0xa
+    field public static final int HONEYCOMB = 11; // 0xb
+    field public static final int HONEYCOMB_MR1 = 12; // 0xc
+    field public static final int HONEYCOMB_MR2 = 13; // 0xd
+    field public static final int ICE_CREAM_SANDWICH = 14; // 0xe
+    field public static final int ICE_CREAM_SANDWICH_MR1 = 15; // 0xf
+    field public static final int JELLY_BEAN = 16; // 0x10
+    field public static final int JELLY_BEAN_MR1 = 17; // 0x11
+    field public static final int JELLY_BEAN_MR2 = 18; // 0x12
+    field public static final int KITKAT = 19; // 0x13
+    field public static final int KITKAT_WATCH = 20; // 0x14
+    field public static final int LOLLIPOP = 21; // 0x15
+    field public static final int LOLLIPOP_MR1 = 22; // 0x16
+    field public static final int M = 23; // 0x17
+    field public static final int N = 24; // 0x18
+    field public static final int N_MR1 = 25; // 0x19
+    field public static final int O = 26; // 0x1a
+    field public static final int O_MR1 = 27; // 0x1b
+    field public static final int P = 28; // 0x1c
+    field public static final int Q = 29; // 0x1d
+    field public static final int R = 30; // 0x1e
+    field public static final int S = 31; // 0x1f
+    field public static final int S_V2 = 32; // 0x20
+  }
+
+  public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
+    ctor public Bundle();
+    ctor public Bundle(ClassLoader);
+    ctor public Bundle(int);
+    ctor public Bundle(android.os.Bundle);
+    ctor public Bundle(android.os.PersistableBundle);
+    method public Object clone();
+    method public android.os.Bundle deepCopy();
+    method public int describeContents();
+    method @Nullable public android.os.IBinder getBinder(@Nullable String);
+    method @Nullable public android.os.Bundle getBundle(@Nullable String);
+    method public byte getByte(String);
+    method public Byte getByte(String, byte);
+    method @Nullable public byte[] getByteArray(@Nullable String);
+    method public char getChar(String);
+    method public char getChar(String, char);
+    method @Nullable public char[] getCharArray(@Nullable String);
+    method @Nullable public CharSequence getCharSequence(@Nullable String);
+    method public CharSequence getCharSequence(@Nullable String, CharSequence);
+    method @Nullable public CharSequence[] getCharSequenceArray(@Nullable String);
+    method @Nullable public java.util.ArrayList<java.lang.CharSequence> getCharSequenceArrayList(@Nullable String);
+    method public ClassLoader getClassLoader();
+    method public float getFloat(String);
+    method public float getFloat(String, float);
+    method @Nullable public float[] getFloatArray(@Nullable String);
+    method @Nullable public java.util.ArrayList<java.lang.Integer> getIntegerArrayList(@Nullable String);
+    method @Nullable public <T extends android.os.Parcelable> T getParcelable(@Nullable String);
+    method @Nullable public android.os.Parcelable[] getParcelableArray(@Nullable String);
+    method @Nullable public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayList(@Nullable String);
+    method @Nullable public java.io.Serializable getSerializable(@Nullable String);
+    method public short getShort(String);
+    method public short getShort(String, short);
+    method @Nullable public short[] getShortArray(@Nullable String);
+    method @Nullable public android.util.Size getSize(@Nullable String);
+    method @Nullable public android.util.SizeF getSizeF(@Nullable String);
+    method @Nullable public <T extends android.os.Parcelable> android.util.SparseArray<T> getSparseParcelableArray(@Nullable String);
+    method @Nullable public java.util.ArrayList<java.lang.String> getStringArrayList(@Nullable String);
+    method public boolean hasFileDescriptors();
+    method public void putAll(android.os.Bundle);
+    method public void putBinder(@Nullable String, @Nullable android.os.IBinder);
+    method public void putBundle(@Nullable String, @Nullable android.os.Bundle);
+    method public void putByte(@Nullable String, byte);
+    method public void putByteArray(@Nullable String, @Nullable byte[]);
+    method public void putChar(@Nullable String, char);
+    method public void putCharArray(@Nullable String, @Nullable char[]);
+    method public void putCharSequence(@Nullable String, @Nullable CharSequence);
+    method public void putCharSequenceArray(@Nullable String, @Nullable CharSequence[]);
+    method public void putCharSequenceArrayList(@Nullable String, @Nullable java.util.ArrayList<java.lang.CharSequence>);
+    method public void putFloat(@Nullable String, float);
+    method public void putFloatArray(@Nullable String, @Nullable float[]);
+    method public void putIntegerArrayList(@Nullable String, @Nullable java.util.ArrayList<java.lang.Integer>);
+    method public void putParcelable(@Nullable String, @Nullable android.os.Parcelable);
+    method public void putParcelableArray(@Nullable String, @Nullable android.os.Parcelable[]);
+    method public void putParcelableArrayList(@Nullable String, @Nullable java.util.ArrayList<? extends android.os.Parcelable>);
+    method public void putSerializable(@Nullable String, @Nullable java.io.Serializable);
+    method public void putShort(@Nullable String, short);
+    method public void putShortArray(@Nullable String, @Nullable short[]);
+    method public void putSize(@Nullable String, @Nullable android.util.Size);
+    method public void putSizeF(@Nullable String, @Nullable android.util.SizeF);
+    method public void putSparseParcelableArray(@Nullable String, @Nullable android.util.SparseArray<? extends android.os.Parcelable>);
+    method public void putStringArrayList(@Nullable String, @Nullable java.util.ArrayList<java.lang.String>);
+    method public void readFromParcel(android.os.Parcel);
+    method public void setClassLoader(ClassLoader);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Bundle> CREATOR;
+    field public static final android.os.Bundle EMPTY;
+  }
+
+  public final class CancellationSignal {
+    ctor public CancellationSignal();
+    method public void cancel();
+    method public boolean isCanceled();
+    method public void setOnCancelListener(android.os.CancellationSignal.OnCancelListener);
+    method public void throwIfCanceled();
+  }
+
+  public static interface CancellationSignal.OnCancelListener {
+    method public void onCancel();
+  }
+
+  public abstract class CombinedVibration implements android.os.Parcelable {
+    method @NonNull public static android.os.CombinedVibration createParallel(@NonNull android.os.VibrationEffect);
+    method public int describeContents();
+    method @NonNull public static android.os.CombinedVibration.ParallelCombination startParallel();
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration> CREATOR;
+  }
+
+  public static final class CombinedVibration.ParallelCombination {
+    method @NonNull public android.os.CombinedVibration.ParallelCombination addVibrator(int, @NonNull android.os.VibrationEffect);
+    method @NonNull public android.os.CombinedVibration combine();
+  }
+
+  public class ConditionVariable {
+    ctor public ConditionVariable();
+    ctor public ConditionVariable(boolean);
+    method public void block();
+    method public boolean block(long);
+    method public void close();
+    method public void open();
+  }
+
+  public abstract class CountDownTimer {
+    ctor public CountDownTimer(long, long);
+    method public final void cancel();
+    method public abstract void onFinish();
+    method public abstract void onTick(long);
+    method public final android.os.CountDownTimer start();
+  }
+
+  public final class CpuUsageInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getActive();
+    method public long getTotal();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CpuUsageInfo> CREATOR;
+  }
+
+  public class DeadObjectException extends android.os.RemoteException {
+    ctor public DeadObjectException();
+    ctor public DeadObjectException(String);
+  }
+
+  public class DeadSystemException extends android.os.DeadObjectException {
+    ctor public DeadSystemException();
+  }
+
+  public final class Debug {
+    method public static void attachJvmtiAgent(@NonNull String, @Nullable String, @Nullable ClassLoader) throws java.io.IOException;
+    method @Deprecated public static void changeDebugPort(int);
+    method public static void dumpHprofData(String) throws java.io.IOException;
+    method public static boolean dumpService(String, java.io.FileDescriptor, String[]);
+    method public static void enableEmulatorTraceOutput();
+    method public static int getBinderDeathObjectCount();
+    method public static int getBinderLocalObjectCount();
+    method public static int getBinderProxyObjectCount();
+    method public static int getBinderReceivedTransactions();
+    method public static int getBinderSentTransactions();
+    method @Deprecated public static int getGlobalAllocCount();
+    method @Deprecated public static int getGlobalAllocSize();
+    method @Deprecated public static int getGlobalClassInitCount();
+    method @Deprecated public static int getGlobalClassInitTime();
+    method @Deprecated public static int getGlobalExternalAllocCount();
+    method @Deprecated public static int getGlobalExternalAllocSize();
+    method @Deprecated public static int getGlobalExternalFreedCount();
+    method @Deprecated public static int getGlobalExternalFreedSize();
+    method @Deprecated public static int getGlobalFreedCount();
+    method @Deprecated public static int getGlobalFreedSize();
+    method @Deprecated public static int getGlobalGcInvocationCount();
+    method public static int getLoadedClassCount();
+    method public static void getMemoryInfo(android.os.Debug.MemoryInfo);
+    method public static long getNativeHeapAllocatedSize();
+    method public static long getNativeHeapFreeSize();
+    method public static long getNativeHeapSize();
+    method public static long getPss();
+    method public static String getRuntimeStat(String);
+    method public static java.util.Map<java.lang.String,java.lang.String> getRuntimeStats();
+    method @Deprecated public static int getThreadAllocCount();
+    method @Deprecated public static int getThreadAllocSize();
+    method @Deprecated public static int getThreadExternalAllocCount();
+    method @Deprecated public static int getThreadExternalAllocSize();
+    method @Deprecated public static int getThreadGcInvocationCount();
+    method public static boolean isDebuggerConnected();
+    method public static void printLoadedClasses(int);
+    method @Deprecated public static void resetAllCounts();
+    method @Deprecated public static void resetGlobalAllocCount();
+    method @Deprecated public static void resetGlobalAllocSize();
+    method @Deprecated public static void resetGlobalClassInitCount();
+    method @Deprecated public static void resetGlobalClassInitTime();
+    method @Deprecated public static void resetGlobalExternalAllocCount();
+    method @Deprecated public static void resetGlobalExternalAllocSize();
+    method @Deprecated public static void resetGlobalExternalFreedCount();
+    method @Deprecated public static void resetGlobalExternalFreedSize();
+    method @Deprecated public static void resetGlobalFreedCount();
+    method @Deprecated public static void resetGlobalFreedSize();
+    method @Deprecated public static void resetGlobalGcInvocationCount();
+    method @Deprecated public static void resetThreadAllocCount();
+    method @Deprecated public static void resetThreadAllocSize();
+    method @Deprecated public static void resetThreadExternalAllocCount();
+    method @Deprecated public static void resetThreadExternalAllocSize();
+    method @Deprecated public static void resetThreadGcInvocationCount();
+    method @Deprecated public static int setAllocationLimit(int);
+    method @Deprecated public static int setGlobalAllocationLimit(int);
+    method @Deprecated public static void startAllocCounting();
+    method public static void startMethodTracing();
+    method public static void startMethodTracing(String);
+    method public static void startMethodTracing(String, int);
+    method public static void startMethodTracing(String, int, int);
+    method public static void startMethodTracingSampling(String, int, int);
+    method public static void startNativeTracing();
+    method @Deprecated public static void stopAllocCounting();
+    method public static void stopMethodTracing();
+    method public static void stopNativeTracing();
+    method public static long threadCpuTimeNanos();
+    method public static void waitForDebugger();
+    method public static boolean waitingForDebugger();
+    field public static final int SHOW_CLASSLOADER = 2; // 0x2
+    field public static final int SHOW_FULL_DETAIL = 1; // 0x1
+    field public static final int SHOW_INITIALIZED = 4; // 0x4
+    field @Deprecated public static final int TRACE_COUNT_ALLOCS = 1; // 0x1
+  }
+
+  @Deprecated public static class Debug.InstructionCount {
+    ctor @Deprecated public Debug.InstructionCount();
+    method @Deprecated public boolean collect();
+    method @Deprecated public int globalMethodInvocations();
+    method @Deprecated public int globalTotal();
+    method @Deprecated public boolean resetAndStart();
+  }
+
+  public static class Debug.MemoryInfo implements android.os.Parcelable {
+    ctor public Debug.MemoryInfo();
+    method public int describeContents();
+    method public String getMemoryStat(String);
+    method public java.util.Map<java.lang.String,java.lang.String> getMemoryStats();
+    method public int getTotalPrivateClean();
+    method public int getTotalPrivateDirty();
+    method public int getTotalPss();
+    method public int getTotalSharedClean();
+    method public int getTotalSharedDirty();
+    method public int getTotalSwappablePss();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Debug.MemoryInfo> CREATOR;
+    field public int dalvikPrivateDirty;
+    field public int dalvikPss;
+    field public int dalvikSharedDirty;
+    field public int nativePrivateDirty;
+    field public int nativePss;
+    field public int nativeSharedDirty;
+    field public int otherPrivateDirty;
+    field public int otherPss;
+    field public int otherSharedDirty;
+  }
+
+  public class DropBoxManager {
+    ctor protected DropBoxManager();
+    method public void addData(@NonNull String, @Nullable byte[], int);
+    method public void addFile(@NonNull String, @NonNull java.io.File, int) throws java.io.IOException;
+    method public void addText(@NonNull String, @NonNull String);
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.READ_LOGS, android.Manifest.permission.PACKAGE_USAGE_STATS}) public android.os.DropBoxManager.Entry getNextEntry(String, long);
+    method public boolean isTagEnabled(String);
+    field public static final String ACTION_DROPBOX_ENTRY_ADDED = "android.intent.action.DROPBOX_ENTRY_ADDED";
+    field public static final String EXTRA_DROPPED_COUNT = "android.os.extra.DROPPED_COUNT";
+    field public static final String EXTRA_TAG = "tag";
+    field public static final String EXTRA_TIME = "time";
+    field public static final int IS_EMPTY = 1; // 0x1
+    field public static final int IS_GZIPPED = 4; // 0x4
+    field public static final int IS_TEXT = 2; // 0x2
+  }
+
+  public static class DropBoxManager.Entry implements java.io.Closeable android.os.Parcelable {
+    ctor public DropBoxManager.Entry(@NonNull String, long);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @NonNull String);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @Nullable byte[], int);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @Nullable android.os.ParcelFileDescriptor, int);
+    ctor public DropBoxManager.Entry(@NonNull String, long, @NonNull java.io.File, int) throws java.io.IOException;
+    method public void close();
+    method public int describeContents();
+    method public int getFlags();
+    method @Nullable public java.io.InputStream getInputStream() throws java.io.IOException;
+    method @NonNull public String getTag();
+    method @Nullable public String getText(int);
+    method public long getTimeMillis();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.DropBoxManager.Entry> CREATOR;
+  }
+
+  public class Environment {
+    ctor public Environment();
+    method public static java.io.File getDataDirectory();
+    method public static java.io.File getDownloadCacheDirectory();
+    method public static java.io.File getExternalStorageDirectory();
+    method public static java.io.File getExternalStoragePublicDirectory(String);
+    method public static String getExternalStorageState();
+    method public static String getExternalStorageState(java.io.File);
+    method @NonNull public static java.io.File getRootDirectory();
+    method @NonNull public static java.io.File getStorageDirectory();
+    method @Deprecated public static String getStorageState(java.io.File);
+    method public static boolean isExternalStorageEmulated();
+    method public static boolean isExternalStorageEmulated(@NonNull java.io.File);
+    method public static boolean isExternalStorageLegacy();
+    method public static boolean isExternalStorageLegacy(@NonNull java.io.File);
+    method public static boolean isExternalStorageManager();
+    method public static boolean isExternalStorageManager(@NonNull java.io.File);
+    method public static boolean isExternalStorageRemovable();
+    method public static boolean isExternalStorageRemovable(@NonNull java.io.File);
+    field public static String DIRECTORY_ALARMS;
+    field public static String DIRECTORY_AUDIOBOOKS;
+    field public static String DIRECTORY_DCIM;
+    field public static String DIRECTORY_DOCUMENTS;
+    field public static String DIRECTORY_DOWNLOADS;
+    field public static String DIRECTORY_MOVIES;
+    field public static String DIRECTORY_MUSIC;
+    field public static String DIRECTORY_NOTIFICATIONS;
+    field public static String DIRECTORY_PICTURES;
+    field public static String DIRECTORY_PODCASTS;
+    field @NonNull public static String DIRECTORY_RECORDINGS;
+    field public static String DIRECTORY_RINGTONES;
+    field public static String DIRECTORY_SCREENSHOTS;
+    field public static final String MEDIA_BAD_REMOVAL = "bad_removal";
+    field public static final String MEDIA_CHECKING = "checking";
+    field public static final String MEDIA_EJECTING = "ejecting";
+    field public static final String MEDIA_MOUNTED = "mounted";
+    field public static final String MEDIA_MOUNTED_READ_ONLY = "mounted_ro";
+    field public static final String MEDIA_NOFS = "nofs";
+    field public static final String MEDIA_REMOVED = "removed";
+    field public static final String MEDIA_SHARED = "shared";
+    field public static final String MEDIA_UNKNOWN = "unknown";
+    field public static final String MEDIA_UNMOUNTABLE = "unmountable";
+    field public static final String MEDIA_UNMOUNTED = "unmounted";
+  }
+
+  public abstract class FileObserver {
+    ctor @Deprecated public FileObserver(String);
+    ctor public FileObserver(@NonNull java.io.File);
+    ctor public FileObserver(@NonNull java.util.List<java.io.File>);
+    ctor @Deprecated public FileObserver(String, int);
+    ctor public FileObserver(@NonNull java.io.File, int);
+    ctor public FileObserver(@NonNull java.util.List<java.io.File>, int);
+    method protected void finalize();
+    method public abstract void onEvent(int, @Nullable String);
+    method public void startWatching();
+    method public void stopWatching();
+    field public static final int ACCESS = 1; // 0x1
+    field public static final int ALL_EVENTS = 4095; // 0xfff
+    field public static final int ATTRIB = 4; // 0x4
+    field public static final int CLOSE_NOWRITE = 16; // 0x10
+    field public static final int CLOSE_WRITE = 8; // 0x8
+    field public static final int CREATE = 256; // 0x100
+    field public static final int DELETE = 512; // 0x200
+    field public static final int DELETE_SELF = 1024; // 0x400
+    field public static final int MODIFY = 2; // 0x2
+    field public static final int MOVED_FROM = 64; // 0x40
+    field public static final int MOVED_TO = 128; // 0x80
+    field public static final int MOVE_SELF = 2048; // 0x800
+    field public static final int OPEN = 32; // 0x20
+  }
+
+  public class FileUriExposedException extends java.lang.RuntimeException {
+    ctor public FileUriExposedException(String);
+  }
+
+  public final class FileUtils {
+    method @Deprecated public static void closeQuietly(@Nullable AutoCloseable);
+    method @Deprecated public static void closeQuietly(@Nullable java.io.FileDescriptor);
+    method public static long copy(@NonNull java.io.InputStream, @NonNull java.io.OutputStream) throws java.io.IOException;
+    method public static long copy(@NonNull java.io.InputStream, @NonNull java.io.OutputStream, @Nullable android.os.CancellationSignal, @Nullable java.util.concurrent.Executor, @Nullable android.os.FileUtils.ProgressListener) throws java.io.IOException;
+    method public static long copy(@NonNull java.io.FileDescriptor, @NonNull java.io.FileDescriptor) throws java.io.IOException;
+    method public static long copy(@NonNull java.io.FileDescriptor, @NonNull java.io.FileDescriptor, @Nullable android.os.CancellationSignal, @Nullable java.util.concurrent.Executor, @Nullable android.os.FileUtils.ProgressListener) throws java.io.IOException;
+  }
+
+  public static interface FileUtils.ProgressListener {
+    method public void onProgress(long);
+  }
+
+  public class Handler {
+    ctor @Deprecated public Handler();
+    ctor @Deprecated public Handler(@Nullable android.os.Handler.Callback);
+    ctor public Handler(@NonNull android.os.Looper);
+    ctor public Handler(@NonNull android.os.Looper, @Nullable android.os.Handler.Callback);
+    method @NonNull public static android.os.Handler createAsync(@NonNull android.os.Looper);
+    method @NonNull public static android.os.Handler createAsync(@NonNull android.os.Looper, @NonNull android.os.Handler.Callback);
+    method public void dispatchMessage(@NonNull android.os.Message);
+    method public final void dump(@NonNull android.util.Printer, @NonNull String);
+    method @NonNull public final android.os.Looper getLooper();
+    method @NonNull public String getMessageName(@NonNull android.os.Message);
+    method public void handleMessage(@NonNull android.os.Message);
+    method public final boolean hasCallbacks(@NonNull Runnable);
+    method public final boolean hasMessages(int);
+    method public final boolean hasMessages(int, @Nullable Object);
+    method @NonNull public final android.os.Message obtainMessage();
+    method @NonNull public final android.os.Message obtainMessage(int);
+    method @NonNull public final android.os.Message obtainMessage(int, @Nullable Object);
+    method @NonNull public final android.os.Message obtainMessage(int, int, int);
+    method @NonNull public final android.os.Message obtainMessage(int, int, int, @Nullable Object);
+    method public final boolean post(@NonNull Runnable);
+    method public final boolean postAtFrontOfQueue(@NonNull Runnable);
+    method public final boolean postAtTime(@NonNull Runnable, long);
+    method public final boolean postAtTime(@NonNull Runnable, @Nullable Object, long);
+    method public final boolean postDelayed(@NonNull Runnable, long);
+    method public final boolean postDelayed(@NonNull Runnable, @Nullable Object, long);
+    method public final void removeCallbacks(@NonNull Runnable);
+    method public final void removeCallbacks(@NonNull Runnable, @Nullable Object);
+    method public final void removeCallbacksAndMessages(@Nullable Object);
+    method public final void removeMessages(int);
+    method public final void removeMessages(int, @Nullable Object);
+    method public final boolean sendEmptyMessage(int);
+    method public final boolean sendEmptyMessageAtTime(int, long);
+    method public final boolean sendEmptyMessageDelayed(int, long);
+    method public final boolean sendMessage(@NonNull android.os.Message);
+    method public final boolean sendMessageAtFrontOfQueue(@NonNull android.os.Message);
+    method public boolean sendMessageAtTime(@NonNull android.os.Message, long);
+    method public final boolean sendMessageDelayed(@NonNull android.os.Message, long);
+  }
+
+  public static interface Handler.Callback {
+    method public boolean handleMessage(@NonNull android.os.Message);
+  }
+
+  public class HandlerThread extends java.lang.Thread {
+    ctor public HandlerThread(String);
+    ctor public HandlerThread(String, int);
+    method public android.os.Looper getLooper();
+    method public int getThreadId();
+    method protected void onLooperPrepared();
+    method public boolean quit();
+    method public boolean quitSafely();
+  }
+
+  public class HardwarePropertiesManager {
+    method @NonNull public android.os.CpuUsageInfo[] getCpuUsages();
+    method @NonNull public float[] getDeviceTemperatures(int, int);
+    method @NonNull public float[] getFanSpeeds();
+    field public static final int DEVICE_TEMPERATURE_BATTERY = 2; // 0x2
+    field public static final int DEVICE_TEMPERATURE_CPU = 0; // 0x0
+    field public static final int DEVICE_TEMPERATURE_GPU = 1; // 0x1
+    field public static final int DEVICE_TEMPERATURE_SKIN = 3; // 0x3
+    field public static final int TEMPERATURE_CURRENT = 0; // 0x0
+    field public static final int TEMPERATURE_SHUTDOWN = 2; // 0x2
+    field public static final int TEMPERATURE_THROTTLING = 1; // 0x1
+    field public static final int TEMPERATURE_THROTTLING_BELOW_VR_MIN = 3; // 0x3
+    field public static final float UNDEFINED_TEMPERATURE = -3.4028235E38f;
+  }
+
+  public interface IBinder {
+    method public void dump(@NonNull java.io.FileDescriptor, @Nullable String[]) throws android.os.RemoteException;
+    method public void dumpAsync(@NonNull java.io.FileDescriptor, @Nullable String[]) throws android.os.RemoteException;
+    method @Nullable public String getInterfaceDescriptor() throws android.os.RemoteException;
+    method public static int getSuggestedMaxIpcSizeBytes();
+    method public boolean isBinderAlive();
+    method public void linkToDeath(@NonNull android.os.IBinder.DeathRecipient, int) throws android.os.RemoteException;
+    method public boolean pingBinder();
+    method @Nullable public android.os.IInterface queryLocalInterface(@NonNull String);
+    method public boolean transact(int, @NonNull android.os.Parcel, @Nullable android.os.Parcel, int) throws android.os.RemoteException;
+    method public boolean unlinkToDeath(@NonNull android.os.IBinder.DeathRecipient, int);
+    field public static final int DUMP_TRANSACTION = 1598311760; // 0x5f444d50
+    field public static final int FIRST_CALL_TRANSACTION = 1; // 0x1
+    field public static final int FLAG_ONEWAY = 1; // 0x1
+    field public static final int INTERFACE_TRANSACTION = 1598968902; // 0x5f4e5446
+    field public static final int LAST_CALL_TRANSACTION = 16777215; // 0xffffff
+    field public static final int LIKE_TRANSACTION = 1598835019; // 0x5f4c494b
+    field public static final int PING_TRANSACTION = 1599098439; // 0x5f504e47
+    field public static final int TWEET_TRANSACTION = 1599362900; // 0x5f545754
+  }
+
+  public static interface IBinder.DeathRecipient {
+    method public void binderDied();
+  }
+
+  public interface IInterface {
+    method public android.os.IBinder asBinder();
+  }
+
+  public class LimitExceededException extends java.lang.IllegalStateException {
+    ctor public LimitExceededException();
+    ctor public LimitExceededException(@NonNull String);
+  }
+
+  public final class LocaleList implements android.os.Parcelable {
+    ctor public LocaleList(@NonNull java.util.Locale...);
+    method public int describeContents();
+    method @NonNull public static android.os.LocaleList forLanguageTags(@Nullable String);
+    method public java.util.Locale get(int);
+    method @NonNull @Size(min=1) public static android.os.LocaleList getAdjustedDefault();
+    method @NonNull @Size(min=1) public static android.os.LocaleList getDefault();
+    method @NonNull public static android.os.LocaleList getEmptyLocaleList();
+    method @Nullable public java.util.Locale getFirstMatch(String[]);
+    method @IntRange(from=0xffffffff) public int indexOf(java.util.Locale);
+    method public boolean isEmpty();
+    method public static boolean isPseudoLocale(@Nullable android.icu.util.ULocale);
+    method public static void setDefault(@NonNull @Size(min=1) android.os.LocaleList);
+    method @IntRange(from=0) public int size();
+    method @NonNull public String toLanguageTags();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.LocaleList> CREATOR;
+  }
+
+  public final class Looper {
+    method public void dump(@NonNull android.util.Printer, @NonNull String);
+    method public static android.os.Looper getMainLooper();
+    method @NonNull public android.os.MessageQueue getQueue();
+    method @NonNull public Thread getThread();
+    method public boolean isCurrentThread();
+    method public static void loop();
+    method @Nullable public static android.os.Looper myLooper();
+    method @NonNull public static android.os.MessageQueue myQueue();
+    method public static void prepare();
+    method @Deprecated public static void prepareMainLooper();
+    method public void quit();
+    method public void quitSafely();
+    method public void setMessageLogging(@Nullable android.util.Printer);
+  }
+
+  public class MemoryFile {
+    ctor public MemoryFile(String, int) throws java.io.IOException;
+    method @Deprecated public boolean allowPurging(boolean) throws java.io.IOException;
+    method public void close();
+    method public java.io.InputStream getInputStream();
+    method public java.io.OutputStream getOutputStream();
+    method @Deprecated public boolean isPurgingAllowed();
+    method public int length();
+    method public int readBytes(byte[], int, int, int) throws java.io.IOException;
+    method public void writeBytes(byte[], int, int, int) throws java.io.IOException;
+  }
+
+  public final class Message implements android.os.Parcelable {
+    ctor public Message();
+    method public void copyFrom(android.os.Message);
+    method public int describeContents();
+    method public Runnable getCallback();
+    method public android.os.Bundle getData();
+    method public android.os.Handler getTarget();
+    method public long getWhen();
+    method public boolean isAsynchronous();
+    method public static android.os.Message obtain();
+    method public static android.os.Message obtain(android.os.Message);
+    method public static android.os.Message obtain(android.os.Handler);
+    method public static android.os.Message obtain(android.os.Handler, Runnable);
+    method public static android.os.Message obtain(android.os.Handler, int);
+    method public static android.os.Message obtain(android.os.Handler, int, Object);
+    method public static android.os.Message obtain(android.os.Handler, int, int, int);
+    method public static android.os.Message obtain(android.os.Handler, int, int, int, Object);
+    method public android.os.Bundle peekData();
+    method public void recycle();
+    method public void sendToTarget();
+    method public void setAsynchronous(boolean);
+    method public void setData(android.os.Bundle);
+    method public void setTarget(android.os.Handler);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Message> CREATOR;
+    field public int arg1;
+    field public int arg2;
+    field public Object obj;
+    field public android.os.Messenger replyTo;
+    field public int sendingUid;
+    field public int what;
+  }
+
+  public final class MessageQueue {
+    method public void addIdleHandler(@NonNull android.os.MessageQueue.IdleHandler);
+    method public void addOnFileDescriptorEventListener(@NonNull java.io.FileDescriptor, int, @NonNull android.os.MessageQueue.OnFileDescriptorEventListener);
+    method public boolean isIdle();
+    method public void removeIdleHandler(@NonNull android.os.MessageQueue.IdleHandler);
+    method public void removeOnFileDescriptorEventListener(@NonNull java.io.FileDescriptor);
+  }
+
+  public static interface MessageQueue.IdleHandler {
+    method public boolean queueIdle();
+  }
+
+  public static interface MessageQueue.OnFileDescriptorEventListener {
+    method public int onFileDescriptorEvents(@NonNull java.io.FileDescriptor, int);
+    field public static final int EVENT_ERROR = 4; // 0x4
+    field public static final int EVENT_INPUT = 1; // 0x1
+    field public static final int EVENT_OUTPUT = 2; // 0x2
+  }
+
+  public final class Messenger implements android.os.Parcelable {
+    ctor public Messenger(android.os.Handler);
+    ctor public Messenger(android.os.IBinder);
+    method public int describeContents();
+    method public android.os.IBinder getBinder();
+    method public static android.os.Messenger readMessengerOrNullFromParcel(android.os.Parcel);
+    method public void send(android.os.Message) throws android.os.RemoteException;
+    method public static void writeMessengerOrNullToParcel(android.os.Messenger, android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.Messenger> CREATOR;
+  }
+
+  public class NetworkOnMainThreadException extends java.lang.RuntimeException {
+    ctor public NetworkOnMainThreadException();
+  }
+
+  public class OperationCanceledException extends java.lang.RuntimeException {
+    ctor public OperationCanceledException();
+    ctor public OperationCanceledException(String);
+  }
+
+  public interface OutcomeReceiver<R, E extends java.lang.Throwable> {
+    method public default void onError(@NonNull E);
+    method public void onResult(@NonNull R);
+  }
+
+  public final class Parcel {
+    method public void appendFrom(android.os.Parcel, int, int);
+    method @Nullable public android.os.IBinder[] createBinderArray();
+    method @Nullable public java.util.ArrayList<android.os.IBinder> createBinderArrayList();
+    method @Nullable public boolean[] createBooleanArray();
+    method @Nullable public byte[] createByteArray();
+    method @Nullable public char[] createCharArray();
+    method @Nullable public double[] createDoubleArray();
+    method @Nullable public float[] createFloatArray();
+    method @Nullable public int[] createIntArray();
+    method @Nullable public long[] createLongArray();
+    method @Nullable public String[] createStringArray();
+    method @Nullable public java.util.ArrayList<java.lang.String> createStringArrayList();
+    method @Nullable public <T> T[] createTypedArray(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T> java.util.ArrayList<T> createTypedArrayList(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T extends android.os.Parcelable> android.util.ArrayMap<java.lang.String,T> createTypedArrayMap(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T extends android.os.Parcelable> android.util.SparseArray<T> createTypedSparseArray(@NonNull android.os.Parcelable.Creator<T>);
+    method public int dataAvail();
+    method public int dataCapacity();
+    method public int dataPosition();
+    method public int dataSize();
+    method public void enforceInterface(@NonNull String);
+    method public boolean hasFileDescriptors();
+    method public byte[] marshall();
+    method @NonNull public static android.os.Parcel obtain();
+    method @Nullable public Object[] readArray(@Nullable ClassLoader);
+    method @Nullable public java.util.ArrayList readArrayList(@Nullable ClassLoader);
+    method public void readBinderArray(@NonNull android.os.IBinder[]);
+    method public void readBinderList(@NonNull java.util.List<android.os.IBinder>);
+    method public boolean readBoolean();
+    method public void readBooleanArray(@NonNull boolean[]);
+    method @Nullable public android.os.Bundle readBundle();
+    method @Nullable public android.os.Bundle readBundle(@Nullable ClassLoader);
+    method public byte readByte();
+    method public void readByteArray(@NonNull byte[]);
+    method public void readCharArray(@NonNull char[]);
+    method public double readDouble();
+    method public void readDoubleArray(@NonNull double[]);
+    method public void readException();
+    method public void readException(int, String);
+    method public android.os.ParcelFileDescriptor readFileDescriptor();
+    method public float readFloat();
+    method public void readFloatArray(@NonNull float[]);
+    method @Nullable public java.util.HashMap readHashMap(@Nullable ClassLoader);
+    method public int readInt();
+    method public void readIntArray(@NonNull int[]);
+    method public void readList(@NonNull java.util.List, @Nullable ClassLoader);
+    method public long readLong();
+    method public void readLongArray(@NonNull long[]);
+    method public void readMap(@NonNull java.util.Map, @Nullable ClassLoader);
+    method @Nullable public <T extends android.os.Parcelable> T readParcelable(@Nullable ClassLoader);
+    method @Nullable public android.os.Parcelable[] readParcelableArray(@Nullable ClassLoader);
+    method @Nullable public android.os.Parcelable.Creator<?> readParcelableCreator(@Nullable ClassLoader);
+    method @NonNull public <T extends android.os.Parcelable> java.util.List<T> readParcelableList(@NonNull java.util.List<T>, @Nullable ClassLoader);
+    method @Nullable public android.os.PersistableBundle readPersistableBundle();
+    method @Nullable public android.os.PersistableBundle readPersistableBundle(@Nullable ClassLoader);
+    method @Nullable public java.io.Serializable readSerializable();
+    method @NonNull public android.util.Size readSize();
+    method @NonNull public android.util.SizeF readSizeF();
+    method @Nullable public <T> android.util.SparseArray<T> readSparseArray(@Nullable ClassLoader);
+    method @Nullable public android.util.SparseBooleanArray readSparseBooleanArray();
+    method @Nullable public String readString();
+    method public void readStringArray(@NonNull String[]);
+    method public void readStringList(@NonNull java.util.List<java.lang.String>);
+    method public android.os.IBinder readStrongBinder();
+    method public <T> void readTypedArray(@NonNull T[], @NonNull android.os.Parcelable.Creator<T>);
+    method public <T> void readTypedList(@NonNull java.util.List<T>, @NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public <T> T readTypedObject(@NonNull android.os.Parcelable.Creator<T>);
+    method @Nullable public Object readValue(@Nullable ClassLoader);
+    method public void recycle();
+    method public void setDataCapacity(int);
+    method public void setDataPosition(int);
+    method public void setDataSize(int);
+    method public void unmarshall(@NonNull byte[], int, int);
+    method public void writeArray(@Nullable Object[]);
+    method public void writeBinderArray(@Nullable android.os.IBinder[]);
+    method public void writeBinderList(@Nullable java.util.List<android.os.IBinder>);
+    method public void writeBoolean(boolean);
+    method public void writeBooleanArray(@Nullable boolean[]);
+    method public void writeBundle(@Nullable android.os.Bundle);
+    method public void writeByte(byte);
+    method public void writeByteArray(@Nullable byte[]);
+    method public void writeByteArray(@Nullable byte[], int, int);
+    method public void writeCharArray(@Nullable char[]);
+    method public void writeDouble(double);
+    method public void writeDoubleArray(@Nullable double[]);
+    method public void writeException(@NonNull Exception);
+    method public void writeFileDescriptor(@NonNull java.io.FileDescriptor);
+    method public void writeFloat(float);
+    method public void writeFloatArray(@Nullable float[]);
+    method public void writeInt(int);
+    method public void writeIntArray(@Nullable int[]);
+    method public void writeInterfaceToken(@NonNull String);
+    method public void writeList(@Nullable java.util.List);
+    method public void writeLong(long);
+    method public void writeLongArray(@Nullable long[]);
+    method public void writeMap(@Nullable java.util.Map);
+    method public void writeNoException();
+    method public void writeParcelable(@Nullable android.os.Parcelable, int);
+    method public <T extends android.os.Parcelable> void writeParcelableArray(@Nullable T[], int);
+    method public void writeParcelableCreator(@NonNull android.os.Parcelable);
+    method public <T extends android.os.Parcelable> void writeParcelableList(@Nullable java.util.List<T>, int);
+    method public void writePersistableBundle(@Nullable android.os.PersistableBundle);
+    method public void writeSerializable(@Nullable java.io.Serializable);
+    method public void writeSize(@NonNull android.util.Size);
+    method public void writeSizeF(@NonNull android.util.SizeF);
+    method public <T> void writeSparseArray(@Nullable android.util.SparseArray<T>);
+    method public void writeSparseBooleanArray(@Nullable android.util.SparseBooleanArray);
+    method public void writeString(@Nullable String);
+    method public void writeStringArray(@Nullable String[]);
+    method public void writeStringList(@Nullable java.util.List<java.lang.String>);
+    method public void writeStrongBinder(android.os.IBinder);
+    method public void writeStrongInterface(android.os.IInterface);
+    method public <T extends android.os.Parcelable> void writeTypedArray(@Nullable T[], int);
+    method public <T extends android.os.Parcelable> void writeTypedArrayMap(@Nullable android.util.ArrayMap<java.lang.String,T>, int);
+    method public <T extends android.os.Parcelable> void writeTypedList(@Nullable java.util.List<T>);
+    method public <T extends android.os.Parcelable> void writeTypedObject(@Nullable T, int);
+    method public <T extends android.os.Parcelable> void writeTypedSparseArray(@Nullable android.util.SparseArray<T>, int);
+    method public void writeValue(@Nullable Object);
+    field public static final android.os.Parcelable.Creator<java.lang.String> STRING_CREATOR;
+  }
+
+  public class ParcelFileDescriptor implements java.io.Closeable android.os.Parcelable {
+    ctor public ParcelFileDescriptor(android.os.ParcelFileDescriptor);
+    method public static android.os.ParcelFileDescriptor adoptFd(int);
+    method public boolean canDetectErrors();
+    method public void checkError() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void closeWithError(String) throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createPipe() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createReliablePipe() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createReliableSocketPair() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor[] createSocketPair() throws java.io.IOException;
+    method public int describeContents();
+    method public int detachFd();
+    method public static android.os.ParcelFileDescriptor dup(java.io.FileDescriptor) throws java.io.IOException;
+    method public android.os.ParcelFileDescriptor dup() throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor fromDatagramSocket(java.net.DatagramSocket);
+    method public static android.os.ParcelFileDescriptor fromFd(int) throws java.io.IOException;
+    method public static android.os.ParcelFileDescriptor fromSocket(java.net.Socket);
+    method public int getFd();
+    method public java.io.FileDescriptor getFileDescriptor();
+    method public long getStatSize();
+    method public static android.os.ParcelFileDescriptor open(java.io.File, int) throws java.io.FileNotFoundException;
+    method public static android.os.ParcelFileDescriptor open(java.io.File, int, android.os.Handler, android.os.ParcelFileDescriptor.OnCloseListener) throws java.io.IOException;
+    method public static int parseMode(String);
+    method @NonNull public static android.os.ParcelFileDescriptor wrap(@NonNull android.os.ParcelFileDescriptor, @NonNull android.os.Handler, @NonNull android.os.ParcelFileDescriptor.OnCloseListener) throws java.io.IOException;
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelFileDescriptor> CREATOR;
+    field public static final int MODE_APPEND = 33554432; // 0x2000000
+    field public static final int MODE_CREATE = 134217728; // 0x8000000
+    field public static final int MODE_READ_ONLY = 268435456; // 0x10000000
+    field public static final int MODE_READ_WRITE = 805306368; // 0x30000000
+    field public static final int MODE_TRUNCATE = 67108864; // 0x4000000
+    field @Deprecated public static final int MODE_WORLD_READABLE = 1; // 0x1
+    field @Deprecated public static final int MODE_WORLD_WRITEABLE = 2; // 0x2
+    field public static final int MODE_WRITE_ONLY = 536870912; // 0x20000000
+  }
+
+  public static class ParcelFileDescriptor.AutoCloseInputStream extends java.io.FileInputStream {
+    ctor public ParcelFileDescriptor.AutoCloseInputStream(android.os.ParcelFileDescriptor);
+  }
+
+  public static class ParcelFileDescriptor.AutoCloseOutputStream extends java.io.FileOutputStream {
+    ctor public ParcelFileDescriptor.AutoCloseOutputStream(android.os.ParcelFileDescriptor);
+  }
+
+  public static class ParcelFileDescriptor.FileDescriptorDetachedException extends java.io.IOException {
+    ctor public ParcelFileDescriptor.FileDescriptorDetachedException();
+  }
+
+  public static interface ParcelFileDescriptor.OnCloseListener {
+    method public void onClose(java.io.IOException);
+  }
+
+  public class ParcelFormatException extends java.lang.RuntimeException {
+    ctor public ParcelFormatException();
+    ctor public ParcelFormatException(String);
+  }
+
+  public final class ParcelUuid implements android.os.Parcelable {
+    ctor public ParcelUuid(java.util.UUID);
+    method public int describeContents();
+    method public static android.os.ParcelUuid fromString(String);
+    method public java.util.UUID getUuid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelUuid> CREATOR;
+  }
+
+  public interface Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONTENTS_FILE_DESCRIPTOR = 1; // 0x1
+    field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1
+  }
+
+  public static interface Parcelable.ClassLoaderCreator<T> extends android.os.Parcelable.Creator<T> {
+    method public T createFromParcel(android.os.Parcel, ClassLoader);
+  }
+
+  public static interface Parcelable.Creator<T> {
+    method public T createFromParcel(android.os.Parcel);
+    method public T[] newArray(int);
+  }
+
+  public class PatternMatcher implements android.os.Parcelable {
+    ctor public PatternMatcher(String, int);
+    ctor public PatternMatcher(android.os.Parcel);
+    method public int describeContents();
+    method public final String getPath();
+    method public final int getType();
+    method public boolean match(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.PatternMatcher> CREATOR;
+    field public static final int PATTERN_ADVANCED_GLOB = 3; // 0x3
+    field public static final int PATTERN_LITERAL = 0; // 0x0
+    field public static final int PATTERN_PREFIX = 1; // 0x1
+    field public static final int PATTERN_SIMPLE_GLOB = 2; // 0x2
+    field public static final int PATTERN_SUFFIX = 4; // 0x4
+  }
+
+  public final class PerformanceHintManager {
+    method @Nullable public android.os.PerformanceHintManager.Session createHintSession(@NonNull int[], long);
+    method public long getPreferredUpdateRateNanos();
+  }
+
+  public static class PerformanceHintManager.Session implements java.io.Closeable {
+    method public void close();
+    method public void reportActualWorkDuration(long);
+    method public void updateTargetWorkDuration(long);
+  }
+
+  public final class PersistableBundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
+    ctor public PersistableBundle();
+    ctor public PersistableBundle(int);
+    ctor public PersistableBundle(android.os.PersistableBundle);
+    method public Object clone();
+    method public android.os.PersistableBundle deepCopy();
+    method public int describeContents();
+    method @Nullable public android.os.PersistableBundle getPersistableBundle(@Nullable String);
+    method public void putPersistableBundle(@Nullable String, @Nullable android.os.PersistableBundle);
+    method @NonNull public static android.os.PersistableBundle readFromStream(@NonNull java.io.InputStream) throws java.io.IOException;
+    method public void writeToParcel(android.os.Parcel, int);
+    method public void writeToStream(@NonNull java.io.OutputStream) throws java.io.IOException;
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.PersistableBundle> CREATOR;
+    field public static final android.os.PersistableBundle EMPTY;
+  }
+
+  public final class PowerManager {
+    method public void addThermalStatusListener(@NonNull android.os.PowerManager.OnThermalStatusChangedListener);
+    method public void addThermalStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.PowerManager.OnThermalStatusChangedListener);
+    method @Nullable public java.time.Duration getBatteryDischargePrediction();
+    method public int getCurrentThermalStatus();
+    method public int getLocationPowerSaveMode();
+    method public float getThermalHeadroom(@IntRange(from=0, to=60) int);
+    method public boolean isBatteryDischargePredictionPersonalized();
+    method public boolean isDeviceIdleMode();
+    method public boolean isIgnoringBatteryOptimizations(String);
+    method public boolean isInteractive();
+    method public boolean isPowerSaveMode();
+    method public boolean isRebootingUserspaceSupported();
+    method @Deprecated public boolean isScreenOn();
+    method public boolean isSustainedPerformanceModeSupported();
+    method public boolean isWakeLockLevelSupported(int);
+    method public android.os.PowerManager.WakeLock newWakeLock(int, String);
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public void reboot(@Nullable String);
+    method public void removeThermalStatusListener(@NonNull android.os.PowerManager.OnThermalStatusChangedListener);
+    field public static final int ACQUIRE_CAUSES_WAKEUP = 268435456; // 0x10000000
+    field public static final String ACTION_DEVICE_IDLE_MODE_CHANGED = "android.os.action.DEVICE_IDLE_MODE_CHANGED";
+    field public static final String ACTION_POWER_SAVE_MODE_CHANGED = "android.os.action.POWER_SAVE_MODE_CHANGED";
+    field @Deprecated public static final int FULL_WAKE_LOCK = 26; // 0x1a
+    field public static final int LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF = 2; // 0x2
+    field public static final int LOCATION_MODE_FOREGROUND_ONLY = 3; // 0x3
+    field public static final int LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF = 1; // 0x1
+    field public static final int LOCATION_MODE_NO_CHANGE = 0; // 0x0
+    field public static final int LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF = 4; // 0x4
+    field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000
+    field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1
+    field public static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32; // 0x20
+    field public static final int RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY = 1; // 0x1
+    field @Deprecated public static final int SCREEN_BRIGHT_WAKE_LOCK = 10; // 0xa
+    field @Deprecated public static final int SCREEN_DIM_WAKE_LOCK = 6; // 0x6
+    field public static final int THERMAL_STATUS_CRITICAL = 4; // 0x4
+    field public static final int THERMAL_STATUS_EMERGENCY = 5; // 0x5
+    field public static final int THERMAL_STATUS_LIGHT = 1; // 0x1
+    field public static final int THERMAL_STATUS_MODERATE = 2; // 0x2
+    field public static final int THERMAL_STATUS_NONE = 0; // 0x0
+    field public static final int THERMAL_STATUS_SEVERE = 3; // 0x3
+    field public static final int THERMAL_STATUS_SHUTDOWN = 6; // 0x6
+  }
+
+  public static interface PowerManager.OnThermalStatusChangedListener {
+    method public void onThermalStatusChanged(int);
+  }
+
+  public final class PowerManager.WakeLock {
+    method public void acquire();
+    method public void acquire(long);
+    method public boolean isHeld();
+    method public void release();
+    method public void release(int);
+    method public void setReferenceCounted(boolean);
+    method public void setWorkSource(android.os.WorkSource);
+  }
+
+  public class Process {
+    ctor public Process();
+    method public static final long getElapsedCpuTime();
+    method public static final int[] getExclusiveCores();
+    method public static final int getGidForName(String);
+    method public static final long getStartElapsedRealtime();
+    method public static final long getStartUptimeMillis();
+    method public static final int getThreadPriority(int) throws java.lang.IllegalArgumentException;
+    method public static final int getUidForName(String);
+    method public static final boolean is64Bit();
+    method public static boolean isApplicationUid(int);
+    method public static final boolean isIsolated();
+    method public static final void killProcess(int);
+    method public static final int myPid();
+    method public static final int myTid();
+    method public static final int myUid();
+    method public static android.os.UserHandle myUserHandle();
+    method public static final void sendSignal(int, int);
+    method public static final void setThreadPriority(int, int) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method public static final void setThreadPriority(int) throws java.lang.IllegalArgumentException, java.lang.SecurityException;
+    method @Deprecated public static final boolean supportsProcesses();
+    field public static final int BLUETOOTH_UID = 1002; // 0x3ea
+    field public static final int FIRST_APPLICATION_UID = 10000; // 0x2710
+    field public static final int INVALID_UID = -1; // 0xffffffff
+    field public static final int LAST_APPLICATION_UID = 19999; // 0x4e1f
+    field public static final int PHONE_UID = 1001; // 0x3e9
+    field public static final int ROOT_UID = 0; // 0x0
+    field public static final int SHELL_UID = 2000; // 0x7d0
+    field public static final int SIGNAL_KILL = 9; // 0x9
+    field public static final int SIGNAL_QUIT = 3; // 0x3
+    field public static final int SIGNAL_USR1 = 10; // 0xa
+    field public static final int SYSTEM_UID = 1000; // 0x3e8
+    field public static final int THREAD_PRIORITY_AUDIO = -16; // 0xfffffff0
+    field public static final int THREAD_PRIORITY_BACKGROUND = 10; // 0xa
+    field public static final int THREAD_PRIORITY_DEFAULT = 0; // 0x0
+    field public static final int THREAD_PRIORITY_DISPLAY = -4; // 0xfffffffc
+    field public static final int THREAD_PRIORITY_FOREGROUND = -2; // 0xfffffffe
+    field public static final int THREAD_PRIORITY_LESS_FAVORABLE = 1; // 0x1
+    field public static final int THREAD_PRIORITY_LOWEST = 19; // 0x13
+    field public static final int THREAD_PRIORITY_MORE_FAVORABLE = -1; // 0xffffffff
+    field public static final int THREAD_PRIORITY_URGENT_AUDIO = -19; // 0xffffffed
+    field public static final int THREAD_PRIORITY_URGENT_DISPLAY = -8; // 0xfffffff8
+    field public static final int THREAD_PRIORITY_VIDEO = -10; // 0xfffffff6
+    field public static final int WIFI_UID = 1010; // 0x3f2
+  }
+
+  public abstract class ProxyFileDescriptorCallback {
+    ctor public ProxyFileDescriptorCallback();
+    method public void onFsync() throws android.system.ErrnoException;
+    method public long onGetSize() throws android.system.ErrnoException;
+    method public int onRead(long, int, byte[]) throws android.system.ErrnoException;
+    method public abstract void onRelease();
+    method public int onWrite(long, int, byte[]) throws android.system.ErrnoException;
+  }
+
+  public class RecoverySystem {
+    method @RequiresPermission("android.permission.RECOVERY") public static void installPackage(android.content.Context, java.io.File) throws java.io.IOException;
+    method public static void rebootWipeCache(android.content.Context) throws java.io.IOException;
+    method public static void rebootWipeUserData(android.content.Context) throws java.io.IOException;
+    method public static void verifyPackage(java.io.File, android.os.RecoverySystem.ProgressListener, java.io.File) throws java.security.GeneralSecurityException, java.io.IOException;
+  }
+
+  public static interface RecoverySystem.ProgressListener {
+    method public void onProgress(int);
+  }
+
+  public class RemoteCallbackList<E extends android.os.IInterface> {
+    ctor public RemoteCallbackList();
+    method public int beginBroadcast();
+    method public void finishBroadcast();
+    method public Object getBroadcastCookie(int);
+    method public E getBroadcastItem(int);
+    method public Object getRegisteredCallbackCookie(int);
+    method public int getRegisteredCallbackCount();
+    method public E getRegisteredCallbackItem(int);
+    method public void kill();
+    method public void onCallbackDied(E);
+    method public void onCallbackDied(E, Object);
+    method public boolean register(E);
+    method public boolean register(E, Object);
+    method public boolean unregister(E);
+  }
+
+  public class RemoteException extends android.util.AndroidException {
+    ctor public RemoteException();
+    ctor public RemoteException(String);
+    method @NonNull public RuntimeException rethrowAsRuntimeException();
+    method @NonNull public RuntimeException rethrowFromSystemServer();
+  }
+
+  public class ResultReceiver implements android.os.Parcelable {
+    ctor public ResultReceiver(android.os.Handler);
+    method public int describeContents();
+    method protected void onReceiveResult(int, android.os.Bundle);
+    method public void send(int, android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ResultReceiver> CREATOR;
+  }
+
+  public final class SharedMemory implements java.io.Closeable android.os.Parcelable {
+    method public void close();
+    method @NonNull public static android.os.SharedMemory create(@Nullable String, int) throws android.system.ErrnoException;
+    method public int describeContents();
+    method public int getSize();
+    method @NonNull public java.nio.ByteBuffer map(int, int, int) throws android.system.ErrnoException;
+    method @NonNull public java.nio.ByteBuffer mapReadOnly() throws android.system.ErrnoException;
+    method @NonNull public java.nio.ByteBuffer mapReadWrite() throws android.system.ErrnoException;
+    method public boolean setProtect(int);
+    method public static void unmap(@NonNull java.nio.ByteBuffer);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.SharedMemory> CREATOR;
+  }
+
+  public class StatFs {
+    ctor public StatFs(String);
+    method @Deprecated public int getAvailableBlocks();
+    method public long getAvailableBlocksLong();
+    method public long getAvailableBytes();
+    method @Deprecated public int getBlockCount();
+    method public long getBlockCountLong();
+    method @Deprecated public int getBlockSize();
+    method public long getBlockSizeLong();
+    method @Deprecated public int getFreeBlocks();
+    method public long getFreeBlocksLong();
+    method public long getFreeBytes();
+    method public long getTotalBytes();
+    method public void restat(String);
+  }
+
+  public final class StrictMode {
+    method public static android.os.StrictMode.ThreadPolicy allowThreadDiskReads();
+    method public static android.os.StrictMode.ThreadPolicy allowThreadDiskWrites();
+    method public static void enableDefaults();
+    method public static android.os.StrictMode.ThreadPolicy getThreadPolicy();
+    method public static android.os.StrictMode.VmPolicy getVmPolicy();
+    method public static void noteSlowCall(String);
+    method public static void setThreadPolicy(android.os.StrictMode.ThreadPolicy);
+    method public static void setVmPolicy(android.os.StrictMode.VmPolicy);
+  }
+
+  public static interface StrictMode.OnThreadViolationListener {
+    method public void onThreadViolation(android.os.strictmode.Violation);
+  }
+
+  public static interface StrictMode.OnVmViolationListener {
+    method public void onVmViolation(android.os.strictmode.Violation);
+  }
+
+  public static final class StrictMode.ThreadPolicy {
+    field public static final android.os.StrictMode.ThreadPolicy LAX;
+  }
+
+  public static final class StrictMode.ThreadPolicy.Builder {
+    ctor public StrictMode.ThreadPolicy.Builder();
+    ctor public StrictMode.ThreadPolicy.Builder(android.os.StrictMode.ThreadPolicy);
+    method public android.os.StrictMode.ThreadPolicy build();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectAll();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectCustomSlowCalls();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskReads();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyDropBox();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyFlashScreen();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnThreadViolationListener);
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyLog();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitAll();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitCustomSlowCalls();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskReads();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
+  }
+
+  public static final class StrictMode.VmPolicy {
+    field public static final android.os.StrictMode.VmPolicy LAX;
+  }
+
+  public static final class StrictMode.VmPolicy.Builder {
+    ctor public StrictMode.VmPolicy.Builder();
+    ctor public StrictMode.VmPolicy.Builder(android.os.StrictMode.VmPolicy);
+    method public android.os.StrictMode.VmPolicy build();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectActivityLeaks();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectAll();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCleartextNetwork();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectContentUriWithoutPermission();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectCredentialProtectedWhileLocked();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectFileUriExposure();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectImplicitDirectBoot();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectIncorrectContextUse();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedClosableObjects();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectNonSdkApiUsage();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectUnsafeIntentLaunch();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder detectUntaggedSockets();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeath();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyDropBox();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.StrictMode.OnVmViolationListener);
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyLog();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder permitNonSdkApiUsage();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder permitUnsafeIntentLaunch();
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder setClassInstanceLimit(Class, int);
+  }
+
+  public final class SystemClock {
+    method @NonNull public static java.time.Clock currentGnssTimeClock();
+    method public static long currentThreadTimeMillis();
+    method public static long elapsedRealtime();
+    method public static long elapsedRealtimeNanos();
+    method public static boolean setCurrentTimeMillis(long);
+    method public static void sleep(long);
+    method public static long uptimeMillis();
+  }
+
+  public class TestLooperManager {
+    method public void execute(android.os.Message);
+    method public android.os.MessageQueue getMessageQueue();
+    method public boolean hasMessages(android.os.Handler, Object, int);
+    method public boolean hasMessages(android.os.Handler, Object, Runnable);
+    method public android.os.Message next();
+    method public void recycle(android.os.Message);
+    method public void release();
+  }
+
+  public abstract class TokenWatcher {
+    ctor public TokenWatcher(android.os.Handler, String);
+    method public void acquire(android.os.IBinder, String);
+    method public abstract void acquired();
+    method public void cleanup(android.os.IBinder, boolean);
+    method public void dump();
+    method public void dump(java.io.PrintWriter);
+    method public boolean isAcquired();
+    method public void release(android.os.IBinder);
+    method public abstract void released();
+  }
+
+  public final class Trace {
+    method public static void beginAsyncSection(@NonNull String, int);
+    method public static void beginSection(@NonNull String);
+    method public static void endAsyncSection(@NonNull String, int);
+    method public static void endSection();
+    method public static boolean isEnabled();
+    method public static void setCounter(@NonNull String, long);
+  }
+
+  public class TransactionTooLargeException extends android.os.RemoteException {
+    ctor public TransactionTooLargeException();
+    ctor public TransactionTooLargeException(String);
+  }
+
+  public final class UserHandle implements android.os.Parcelable {
+    ctor public UserHandle(android.os.Parcel);
+    method public int describeContents();
+    method public static android.os.UserHandle getUserHandleForUid(int);
+    method public static android.os.UserHandle readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    method public static void writeToParcel(android.os.UserHandle, android.os.Parcel);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.UserHandle> CREATOR;
+  }
+
+  public class UserManager {
+    method public static android.content.Intent createUserCreationIntent(@Nullable String, @Nullable String, @Nullable String, @Nullable android.os.PersistableBundle);
+    method @WorkerThread public android.os.Bundle getApplicationRestrictions(String);
+    method public long getSerialNumberForUser(android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.CREATE_USERS"}) public int getUserCount();
+    method public long getUserCreationTime(android.os.UserHandle);
+    method public android.os.UserHandle getUserForSerialNumber(long);
+    method @NonNull @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED, "android.permission.CREATE_USERS"}, conditional=true) public String getUserName();
+    method public java.util.List<android.os.UserHandle> getUserProfiles();
+    method public android.os.Bundle getUserRestrictions();
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public android.os.Bundle getUserRestrictions(android.os.UserHandle);
+    method public boolean hasUserRestriction(String);
+    method public boolean isDemoUser();
+    method public static boolean isHeadlessSystemUserMode();
+    method public boolean isManagedProfile();
+    method public boolean isQuietModeEnabled(android.os.UserHandle);
+    method public boolean isSystemUser();
+    method public boolean isUserAGoat();
+    method public boolean isUserForeground();
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserRunning(android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserRunningOrStopping(android.os.UserHandle);
+    method public boolean isUserUnlocked();
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.INTERACT_ACROSS_USERS"}, conditional=true) public boolean isUserUnlocked(android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.MANAGE_USERS", "android.permission.MODIFY_QUIET_MODE"}, conditional=true) public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle);
+    method public boolean requestQuietModeEnabled(boolean, @NonNull android.os.UserHandle, int);
+    method @Deprecated public boolean setRestrictionsChallenge(String);
+    method @Deprecated @RequiresPermission("android.permission.MANAGE_USERS") public void setUserRestriction(String, boolean);
+    method @Deprecated public void setUserRestrictions(android.os.Bundle);
+    method @Deprecated public void setUserRestrictions(android.os.Bundle, android.os.UserHandle);
+    method public static boolean supportsMultipleUsers();
+    field public static final String ALLOW_PARENT_PROFILE_APP_LINKING = "allow_parent_profile_app_linking";
+    field @Deprecated public static final String DISALLOW_ADD_MANAGED_PROFILE = "no_add_managed_profile";
+    field public static final String DISALLOW_ADD_USER = "no_add_user";
+    field public static final String DISALLOW_ADJUST_VOLUME = "no_adjust_volume";
+    field public static final String DISALLOW_AIRPLANE_MODE = "no_airplane_mode";
+    field public static final String DISALLOW_AMBIENT_DISPLAY = "no_ambient_display";
+    field public static final String DISALLOW_APPS_CONTROL = "no_control_apps";
+    field public static final String DISALLOW_AUTOFILL = "no_autofill";
+    field public static final String DISALLOW_BLUETOOTH = "no_bluetooth";
+    field public static final String DISALLOW_BLUETOOTH_SHARING = "no_bluetooth_sharing";
+    field public static final String DISALLOW_CAMERA_TOGGLE = "disallow_camera_toggle";
+    field public static final String DISALLOW_CONFIG_BLUETOOTH = "no_config_bluetooth";
+    field public static final String DISALLOW_CONFIG_BRIGHTNESS = "no_config_brightness";
+    field public static final String DISALLOW_CONFIG_CELL_BROADCASTS = "no_config_cell_broadcasts";
+    field public static final String DISALLOW_CONFIG_CREDENTIALS = "no_config_credentials";
+    field public static final String DISALLOW_CONFIG_DATE_TIME = "no_config_date_time";
+    field public static final String DISALLOW_CONFIG_LOCALE = "no_config_locale";
+    field public static final String DISALLOW_CONFIG_LOCATION = "no_config_location";
+    field public static final String DISALLOW_CONFIG_MOBILE_NETWORKS = "no_config_mobile_networks";
+    field public static final String DISALLOW_CONFIG_PRIVATE_DNS = "disallow_config_private_dns";
+    field public static final String DISALLOW_CONFIG_SCREEN_TIMEOUT = "no_config_screen_timeout";
+    field public static final String DISALLOW_CONFIG_TETHERING = "no_config_tethering";
+    field public static final String DISALLOW_CONFIG_VPN = "no_config_vpn";
+    field public static final String DISALLOW_CONFIG_WIFI = "no_config_wifi";
+    field public static final String DISALLOW_CONTENT_CAPTURE = "no_content_capture";
+    field public static final String DISALLOW_CONTENT_SUGGESTIONS = "no_content_suggestions";
+    field public static final String DISALLOW_CREATE_WINDOWS = "no_create_windows";
+    field public static final String DISALLOW_CROSS_PROFILE_COPY_PASTE = "no_cross_profile_copy_paste";
+    field public static final String DISALLOW_DATA_ROAMING = "no_data_roaming";
+    field public static final String DISALLOW_DEBUGGING_FEATURES = "no_debugging_features";
+    field public static final String DISALLOW_FACTORY_RESET = "no_factory_reset";
+    field public static final String DISALLOW_FUN = "no_fun";
+    field public static final String DISALLOW_INSTALL_APPS = "no_install_apps";
+    field public static final String DISALLOW_INSTALL_UNKNOWN_SOURCES = "no_install_unknown_sources";
+    field public static final String DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY = "no_install_unknown_sources_globally";
+    field public static final String DISALLOW_MICROPHONE_TOGGLE = "disallow_microphone_toggle";
+    field public static final String DISALLOW_MODIFY_ACCOUNTS = "no_modify_accounts";
+    field public static final String DISALLOW_MOUNT_PHYSICAL_MEDIA = "no_physical_media";
+    field public static final String DISALLOW_NETWORK_RESET = "no_network_reset";
+    field public static final String DISALLOW_OUTGOING_BEAM = "no_outgoing_beam";
+    field public static final String DISALLOW_OUTGOING_CALLS = "no_outgoing_calls";
+    field public static final String DISALLOW_PRINTING = "no_printing";
+    field @Deprecated public static final String DISALLOW_REMOVE_MANAGED_PROFILE = "no_remove_managed_profile";
+    field public static final String DISALLOW_REMOVE_USER = "no_remove_user";
+    field public static final String DISALLOW_SAFE_BOOT = "no_safe_boot";
+    field public static final String DISALLOW_SET_USER_ICON = "no_set_user_icon";
+    field public static final String DISALLOW_SET_WALLPAPER = "no_set_wallpaper";
+    field public static final String DISALLOW_SHARE_INTO_MANAGED_PROFILE = "no_sharing_into_profile";
+    field public static final String DISALLOW_SHARE_LOCATION = "no_share_location";
+    field public static final String DISALLOW_SMS = "no_sms";
+    field public static final String DISALLOW_SYSTEM_ERROR_DIALOGS = "no_system_error_dialogs";
+    field public static final String DISALLOW_UNIFIED_PASSWORD = "no_unified_password";
+    field public static final String DISALLOW_UNINSTALL_APPS = "no_uninstall_apps";
+    field public static final String DISALLOW_UNMUTE_MICROPHONE = "no_unmute_microphone";
+    field public static final String DISALLOW_USB_FILE_TRANSFER = "no_usb_file_transfer";
+    field public static final String DISALLOW_USER_SWITCH = "no_user_switch";
+    field public static final String ENSURE_VERIFY_APPS = "ensure_verify_apps";
+    field public static final String KEY_RESTRICTIONS_PENDING = "restrictions_pending";
+    field public static final int QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED = 1; // 0x1
+    field public static final int USER_CREATION_FAILED_NOT_PERMITTED = 1; // 0x1
+    field public static final int USER_CREATION_FAILED_NO_MORE_USERS = 2; // 0x2
+    field public static final int USER_OPERATION_ERROR_CURRENT_USER = 4; // 0x4
+    field public static final int USER_OPERATION_ERROR_LOW_STORAGE = 5; // 0x5
+    field public static final int USER_OPERATION_ERROR_MANAGED_PROFILE = 2; // 0x2
+    field public static final int USER_OPERATION_ERROR_MAX_RUNNING_USERS = 3; // 0x3
+    field public static final int USER_OPERATION_ERROR_MAX_USERS = 6; // 0x6
+    field public static final int USER_OPERATION_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int USER_OPERATION_SUCCESS = 0; // 0x0
+  }
+
+  public static class UserManager.UserOperationException extends java.lang.RuntimeException {
+    method public int getUserOperationResult();
+  }
+
+  public final class VibrationAttributes implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getFlags();
+    method public int getUsage();
+    method public int getUsageClass();
+    method public boolean isFlagSet(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationAttributes> CREATOR;
+    field public static final int FLAG_BYPASS_INTERRUPTION_POLICY = 1; // 0x1
+    field public static final int USAGE_ALARM = 17; // 0x11
+    field public static final int USAGE_CLASS_ALARM = 1; // 0x1
+    field public static final int USAGE_CLASS_FEEDBACK = 2; // 0x2
+    field public static final int USAGE_CLASS_MASK = 15; // 0xf
+    field public static final int USAGE_CLASS_UNKNOWN = 0; // 0x0
+    field public static final int USAGE_COMMUNICATION_REQUEST = 65; // 0x41
+    field public static final int USAGE_HARDWARE_FEEDBACK = 50; // 0x32
+    field public static final int USAGE_NOTIFICATION = 49; // 0x31
+    field public static final int USAGE_PHYSICAL_EMULATION = 34; // 0x22
+    field public static final int USAGE_RINGTONE = 33; // 0x21
+    field public static final int USAGE_TOUCH = 18; // 0x12
+    field public static final int USAGE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class VibrationAttributes.Builder {
+    ctor public VibrationAttributes.Builder();
+    ctor public VibrationAttributes.Builder(@Nullable android.os.VibrationAttributes);
+    method @NonNull public android.os.VibrationAttributes build();
+    method @NonNull public android.os.VibrationAttributes.Builder setFlags(int, int);
+    method @NonNull public android.os.VibrationAttributes.Builder setUsage(int);
+  }
+
+  public abstract class VibrationEffect implements android.os.Parcelable {
+    method public static android.os.VibrationEffect createOneShot(long, int);
+    method @NonNull public static android.os.VibrationEffect createPredefined(int);
+    method public static android.os.VibrationEffect createWaveform(long[], int);
+    method public static android.os.VibrationEffect createWaveform(long[], int[], int);
+    method public int describeContents();
+    method @NonNull public static android.os.VibrationEffect.Composition startComposition();
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect> CREATOR;
+    field public static final int DEFAULT_AMPLITUDE = -1; // 0xffffffff
+    field public static final int EFFECT_CLICK = 0; // 0x0
+    field public static final int EFFECT_DOUBLE_CLICK = 1; // 0x1
+    field public static final int EFFECT_HEAVY_CLICK = 5; // 0x5
+    field public static final int EFFECT_TICK = 2; // 0x2
+  }
+
+  public static final class VibrationEffect.Composition {
+    method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int);
+    method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int, @FloatRange(from=0.0f, to=1.0f) float);
+    method @NonNull public android.os.VibrationEffect.Composition addPrimitive(int, @FloatRange(from=0.0f, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect compose();
+    field public static final int PRIMITIVE_CLICK = 1; // 0x1
+    field public static final int PRIMITIVE_LOW_TICK = 8; // 0x8
+    field public static final int PRIMITIVE_QUICK_FALL = 6; // 0x6
+    field public static final int PRIMITIVE_QUICK_RISE = 4; // 0x4
+    field public static final int PRIMITIVE_SLOW_RISE = 5; // 0x5
+    field public static final int PRIMITIVE_SPIN = 3; // 0x3
+    field public static final int PRIMITIVE_THUD = 2; // 0x2
+    field public static final int PRIMITIVE_TICK = 7; // 0x7
+  }
+
+  public abstract class Vibrator {
+    method public final int areAllEffectsSupported(@NonNull int...);
+    method public final boolean areAllPrimitivesSupported(@NonNull int...);
+    method @NonNull public int[] areEffectsSupported(@NonNull int...);
+    method @NonNull public boolean[] arePrimitivesSupported(@NonNull int...);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public abstract void cancel();
+    method public int getId();
+    method @NonNull public int[] getPrimitiveDurations(@NonNull int...);
+    method public abstract boolean hasAmplitudeControl();
+    method public abstract boolean hasVibrator();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long, android.media.AudioAttributes);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long[], int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(long[], int, android.media.AudioAttributes);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(android.os.VibrationEffect);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(android.os.VibrationEffect, android.media.AudioAttributes);
+    field public static final int VIBRATION_EFFECT_SUPPORT_NO = 2; // 0x2
+    field public static final int VIBRATION_EFFECT_SUPPORT_UNKNOWN = 0; // 0x0
+    field public static final int VIBRATION_EFFECT_SUPPORT_YES = 1; // 0x1
+  }
+
+  public abstract class VibratorManager {
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public abstract void cancel();
+    method @NonNull public abstract android.os.Vibrator getDefaultVibrator();
+    method @NonNull public abstract android.os.Vibrator getVibrator(int);
+    method @NonNull public abstract int[] getVibratorIds();
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public final void vibrate(@NonNull android.os.CombinedVibration);
+    method @RequiresPermission(android.Manifest.permission.VIBRATE) public final void vibrate(@NonNull android.os.CombinedVibration, @Nullable android.os.VibrationAttributes);
+  }
+
+  public class WorkSource implements android.os.Parcelable {
+    ctor public WorkSource();
+    ctor public WorkSource(android.os.WorkSource);
+    method public boolean add(android.os.WorkSource);
+    method public void clear();
+    method public int describeContents();
+    method public boolean diff(android.os.WorkSource);
+    method public boolean remove(android.os.WorkSource);
+    method public void set(android.os.WorkSource);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.WorkSource> CREATOR;
+  }
+
+}
+
+package android.os.health {
+
+  public class HealthStats {
+    method public String getDataType();
+    method public long getMeasurement(int);
+    method public int getMeasurementKeyAt(int);
+    method public int getMeasurementKeyCount();
+    method public java.util.Map<java.lang.String,java.lang.Long> getMeasurements(int);
+    method public int getMeasurementsKeyAt(int);
+    method public int getMeasurementsKeyCount();
+    method public java.util.Map<java.lang.String,android.os.health.HealthStats> getStats(int);
+    method public int getStatsKeyAt(int);
+    method public int getStatsKeyCount();
+    method public android.os.health.TimerStat getTimer(int);
+    method public int getTimerCount(int);
+    method public int getTimerKeyAt(int);
+    method public int getTimerKeyCount();
+    method public long getTimerTime(int);
+    method public java.util.Map<java.lang.String,android.os.health.TimerStat> getTimers(int);
+    method public int getTimersKeyAt(int);
+    method public int getTimersKeyCount();
+    method public boolean hasMeasurement(int);
+    method public boolean hasMeasurements(int);
+    method public boolean hasStats(int);
+    method public boolean hasTimer(int);
+    method public boolean hasTimers(int);
+  }
+
+  public final class PackageHealthStats {
+    field public static final int MEASUREMENTS_WAKEUP_ALARMS_COUNT = 40002; // 0x9c42
+    field public static final int STATS_SERVICES = 40001; // 0x9c41
+  }
+
+  public final class PidHealthStats {
+    field public static final int MEASUREMENT_WAKE_NESTING_COUNT = 20001; // 0x4e21
+    field public static final int MEASUREMENT_WAKE_START_MS = 20003; // 0x4e23
+    field public static final int MEASUREMENT_WAKE_SUM_MS = 20002; // 0x4e22
+  }
+
+  public final class ProcessHealthStats {
+    field public static final int MEASUREMENT_ANR_COUNT = 30005; // 0x7535
+    field public static final int MEASUREMENT_CRASHES_COUNT = 30004; // 0x7534
+    field public static final int MEASUREMENT_FOREGROUND_MS = 30006; // 0x7536
+    field public static final int MEASUREMENT_STARTS_COUNT = 30003; // 0x7533
+    field public static final int MEASUREMENT_SYSTEM_TIME_MS = 30002; // 0x7532
+    field public static final int MEASUREMENT_USER_TIME_MS = 30001; // 0x7531
+  }
+
+  public final class ServiceHealthStats {
+    field public static final int MEASUREMENT_LAUNCH_COUNT = 50002; // 0xc352
+    field public static final int MEASUREMENT_START_SERVICE_COUNT = 50001; // 0xc351
+  }
+
+  public class SystemHealthManager {
+    method public android.os.health.HealthStats takeMyUidSnapshot();
+    method public android.os.health.HealthStats takeUidSnapshot(int);
+    method public android.os.health.HealthStats[] takeUidSnapshots(int[]);
+  }
+
+  public final class TimerStat implements android.os.Parcelable {
+    ctor public TimerStat();
+    ctor public TimerStat(int, long);
+    ctor public TimerStat(android.os.Parcel);
+    method public int describeContents();
+    method public int getCount();
+    method public long getTime();
+    method public void setCount(int);
+    method public void setTime(long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.health.TimerStat> CREATOR;
+  }
+
+  public final class UidHealthStats {
+    field public static final int MEASUREMENT_BLUETOOTH_IDLE_MS = 10020; // 0x2724
+    field public static final int MEASUREMENT_BLUETOOTH_POWER_MAMS = 10023; // 0x2727
+    field public static final int MEASUREMENT_BLUETOOTH_RX_BYTES = 10052; // 0x2744
+    field public static final int MEASUREMENT_BLUETOOTH_RX_MS = 10021; // 0x2725
+    field public static final int MEASUREMENT_BLUETOOTH_RX_PACKETS = 10058; // 0x274a
+    field public static final int MEASUREMENT_BLUETOOTH_TX_BYTES = 10053; // 0x2745
+    field public static final int MEASUREMENT_BLUETOOTH_TX_MS = 10022; // 0x2726
+    field public static final int MEASUREMENT_BLUETOOTH_TX_PACKETS = 10059; // 0x274b
+    field public static final int MEASUREMENT_BUTTON_USER_ACTIVITY_COUNT = 10046; // 0x273e
+    field @Deprecated public static final int MEASUREMENT_CPU_POWER_MAMS = 10064; // 0x2750
+    field public static final int MEASUREMENT_MOBILE_IDLE_MS = 10024; // 0x2728
+    field public static final int MEASUREMENT_MOBILE_POWER_MAMS = 10027; // 0x272b
+    field public static final int MEASUREMENT_MOBILE_RX_BYTES = 10048; // 0x2740
+    field public static final int MEASUREMENT_MOBILE_RX_MS = 10025; // 0x2729
+    field public static final int MEASUREMENT_MOBILE_RX_PACKETS = 10054; // 0x2746
+    field public static final int MEASUREMENT_MOBILE_TX_BYTES = 10049; // 0x2741
+    field public static final int MEASUREMENT_MOBILE_TX_MS = 10026; // 0x272a
+    field public static final int MEASUREMENT_MOBILE_TX_PACKETS = 10055; // 0x2747
+    field public static final int MEASUREMENT_OTHER_USER_ACTIVITY_COUNT = 10045; // 0x273d
+    field public static final int MEASUREMENT_REALTIME_BATTERY_MS = 10001; // 0x2711
+    field public static final int MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS = 10003; // 0x2713
+    field public static final int MEASUREMENT_SYSTEM_CPU_TIME_MS = 10063; // 0x274f
+    field public static final int MEASUREMENT_TOUCH_USER_ACTIVITY_COUNT = 10047; // 0x273f
+    field public static final int MEASUREMENT_UPTIME_BATTERY_MS = 10002; // 0x2712
+    field public static final int MEASUREMENT_UPTIME_SCREEN_OFF_BATTERY_MS = 10004; // 0x2714
+    field public static final int MEASUREMENT_USER_CPU_TIME_MS = 10062; // 0x274e
+    field public static final int MEASUREMENT_WIFI_FULL_LOCK_MS = 10029; // 0x272d
+    field public static final int MEASUREMENT_WIFI_IDLE_MS = 10016; // 0x2720
+    field public static final int MEASUREMENT_WIFI_MULTICAST_MS = 10031; // 0x272f
+    field public static final int MEASUREMENT_WIFI_POWER_MAMS = 10019; // 0x2723
+    field public static final int MEASUREMENT_WIFI_RUNNING_MS = 10028; // 0x272c
+    field public static final int MEASUREMENT_WIFI_RX_BYTES = 10050; // 0x2742
+    field public static final int MEASUREMENT_WIFI_RX_MS = 10017; // 0x2721
+    field public static final int MEASUREMENT_WIFI_RX_PACKETS = 10056; // 0x2748
+    field public static final int MEASUREMENT_WIFI_TX_BYTES = 10051; // 0x2743
+    field public static final int MEASUREMENT_WIFI_TX_MS = 10018; // 0x2722
+    field public static final int MEASUREMENT_WIFI_TX_PACKETS = 10057; // 0x2749
+    field public static final int STATS_PACKAGES = 10015; // 0x271f
+    field public static final int STATS_PIDS = 10013; // 0x271d
+    field public static final int STATS_PROCESSES = 10014; // 0x271e
+    field public static final int TIMERS_JOBS = 10010; // 0x271a
+    field public static final int TIMERS_SENSORS = 10012; // 0x271c
+    field public static final int TIMERS_SYNCS = 10009; // 0x2719
+    field public static final int TIMERS_WAKELOCKS_DRAW = 10008; // 0x2718
+    field public static final int TIMERS_WAKELOCKS_FULL = 10005; // 0x2715
+    field public static final int TIMERS_WAKELOCKS_PARTIAL = 10006; // 0x2716
+    field public static final int TIMERS_WAKELOCKS_WINDOW = 10007; // 0x2717
+    field public static final int TIMER_AUDIO = 10032; // 0x2730
+    field public static final int TIMER_BLUETOOTH_SCAN = 10037; // 0x2735
+    field public static final int TIMER_CAMERA = 10035; // 0x2733
+    field public static final int TIMER_FLASHLIGHT = 10034; // 0x2732
+    field public static final int TIMER_FOREGROUND_ACTIVITY = 10036; // 0x2734
+    field public static final int TIMER_GPS_SENSOR = 10011; // 0x271b
+    field public static final int TIMER_MOBILE_RADIO_ACTIVE = 10061; // 0x274d
+    field public static final int TIMER_PROCESS_STATE_BACKGROUND_MS = 10042; // 0x273a
+    field public static final int TIMER_PROCESS_STATE_CACHED_MS = 10043; // 0x273b
+    field public static final int TIMER_PROCESS_STATE_FOREGROUND_MS = 10041; // 0x2739
+    field public static final int TIMER_PROCESS_STATE_FOREGROUND_SERVICE_MS = 10039; // 0x2737
+    field public static final int TIMER_PROCESS_STATE_TOP_MS = 10038; // 0x2736
+    field public static final int TIMER_PROCESS_STATE_TOP_SLEEPING_MS = 10040; // 0x2738
+    field public static final int TIMER_VIBRATOR = 10044; // 0x273c
+    field public static final int TIMER_VIDEO = 10033; // 0x2731
+    field public static final int TIMER_WIFI_SCAN = 10030; // 0x272e
+  }
+
+}
+
+package android.os.storage {
+
+  public abstract class OnObbStateChangeListener {
+    ctor public OnObbStateChangeListener();
+    method public void onObbStateChange(String, int);
+    field public static final int ERROR_ALREADY_MOUNTED = 24; // 0x18
+    field public static final int ERROR_COULD_NOT_MOUNT = 21; // 0x15
+    field public static final int ERROR_COULD_NOT_UNMOUNT = 22; // 0x16
+    field public static final int ERROR_INTERNAL = 20; // 0x14
+    field public static final int ERROR_NOT_MOUNTED = 23; // 0x17
+    field public static final int ERROR_PERMISSION_DENIED = 25; // 0x19
+    field public static final int MOUNTED = 1; // 0x1
+    field public static final int UNMOUNTED = 2; // 0x2
+  }
+
+  public class StorageManager {
+    method @WorkerThread public void allocateBytes(@NonNull java.util.UUID, long) throws java.io.IOException;
+    method @WorkerThread public void allocateBytes(java.io.FileDescriptor, long) throws java.io.IOException;
+    method @WorkerThread public long getAllocatableBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @WorkerThread public long getCacheQuotaBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @WorkerThread public long getCacheSizeBytes(@NonNull java.util.UUID) throws java.io.IOException;
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE) public android.app.PendingIntent getManageSpaceActivityIntent(@NonNull String, int);
+    method public String getMountedObbPath(String);
+    method @NonNull public android.os.storage.StorageVolume getPrimaryStorageVolume();
+    method @NonNull public java.util.List<android.os.storage.StorageVolume> getRecentStorageVolumes();
+    method @Nullable public android.os.storage.StorageVolume getStorageVolume(@NonNull java.io.File);
+    method @NonNull public android.os.storage.StorageVolume getStorageVolume(@NonNull android.net.Uri);
+    method @NonNull public java.util.List<android.os.storage.StorageVolume> getStorageVolumes();
+    method @NonNull public java.util.UUID getUuidForPath(@NonNull java.io.File) throws java.io.IOException;
+    method public boolean isAllocationSupported(@NonNull java.io.FileDescriptor);
+    method public boolean isCacheBehaviorGroup(java.io.File) throws java.io.IOException;
+    method public boolean isCacheBehaviorTombstone(java.io.File) throws java.io.IOException;
+    method public boolean isCheckpointSupported();
+    method public boolean isEncrypted(java.io.File);
+    method public boolean isObbMounted(String);
+    method public boolean mountObb(String, String, android.os.storage.OnObbStateChangeListener);
+    method @NonNull public android.os.ParcelFileDescriptor openProxyFileDescriptor(int, android.os.ProxyFileDescriptorCallback, android.os.Handler) throws java.io.IOException;
+    method public void registerStorageVolumeCallback(@NonNull java.util.concurrent.Executor, @NonNull android.os.storage.StorageManager.StorageVolumeCallback);
+    method public void setCacheBehaviorGroup(java.io.File, boolean) throws java.io.IOException;
+    method public void setCacheBehaviorTombstone(java.io.File, boolean) throws java.io.IOException;
+    method public boolean unmountObb(String, boolean, android.os.storage.OnObbStateChangeListener);
+    method public void unregisterStorageVolumeCallback(@NonNull android.os.storage.StorageManager.StorageVolumeCallback);
+    field @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE) public static final String ACTION_CLEAR_APP_CACHE = "android.os.storage.action.CLEAR_APP_CACHE";
+    field public static final String ACTION_MANAGE_STORAGE = "android.os.storage.action.MANAGE_STORAGE";
+    field public static final String EXTRA_REQUESTED_BYTES = "android.os.storage.extra.REQUESTED_BYTES";
+    field public static final String EXTRA_UUID = "android.os.storage.extra.UUID";
+    field public static final java.util.UUID UUID_DEFAULT;
+  }
+
+  public static class StorageManager.StorageVolumeCallback {
+    ctor public StorageManager.StorageVolumeCallback();
+    method public void onStateChanged(@NonNull android.os.storage.StorageVolume);
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method @Deprecated @Nullable public android.content.Intent createAccessIntent(String);
+    method @NonNull public android.content.Intent createOpenDocumentTreeIntent();
+    method public int describeContents();
+    method public String getDescription(android.content.Context);
+    method @Nullable public java.io.File getDirectory();
+    method @Nullable public String getMediaStoreVolumeName();
+    method public String getState();
+    method @Nullable public java.util.UUID getStorageUuid();
+    method @Nullable public String getUuid();
+    method public boolean isEmulated();
+    method public boolean isPrimary();
+    method public boolean isRemovable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.storage.StorageVolume> CREATOR;
+    field public static final String EXTRA_STORAGE_VOLUME = "android.os.storage.extra.STORAGE_VOLUME";
+  }
+
+}
+
+package android.os.strictmode {
+
+  public final class CleartextNetworkViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ContentUriWithoutPermissionViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class CredentialProtectedWhileLockedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class CustomViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class DiskReadViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class DiskWriteViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class FileUriExposedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ImplicitDirectBootViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class IncorrectContextUseViolation extends android.os.strictmode.Violation {
+    ctor public IncorrectContextUseViolation(@NonNull String, @NonNull Throwable);
+  }
+
+  public class InstanceCountViolation extends android.os.strictmode.Violation {
+    method public long getNumberOfInstances();
+  }
+
+  public final class IntentReceiverLeakedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class LeakedClosableViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class NetworkViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class NonSdkApiUsedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ResourceMismatchViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class ServiceConnectionLeakedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class SqliteObjectLeakedViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class UnbufferedIoViolation extends android.os.strictmode.Violation {
+  }
+
+  public final class UnsafeIntentLaunchViolation extends android.os.strictmode.Violation {
+    ctor public UnsafeIntentLaunchViolation(@NonNull android.content.Intent);
+    method @Nullable public android.content.Intent getIntent();
+  }
+
+  public final class UntaggedSocketViolation extends android.os.strictmode.Violation {
+  }
+
+  public abstract class Violation extends java.lang.Throwable {
+  }
+
+  public final class WebViewMethodCalledOnWrongThreadViolation extends android.os.strictmode.Violation {
+  }
+
+}
+
+package android.preference {
+
+  @Deprecated public class CheckBoxPreference extends android.preference.TwoStatePreference {
+    ctor @Deprecated public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public CheckBoxPreference(android.content.Context);
+  }
+
+  @Deprecated public abstract class DialogPreference extends android.preference.Preference implements android.content.DialogInterface.OnClickListener android.content.DialogInterface.OnDismissListener android.preference.PreferenceManager.OnActivityDestroyListener {
+    ctor @Deprecated public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public DialogPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public DialogPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public DialogPreference(android.content.Context);
+    method @Deprecated public android.app.Dialog getDialog();
+    method @Deprecated public android.graphics.drawable.Drawable getDialogIcon();
+    method @Deprecated public int getDialogLayoutResource();
+    method @Deprecated public CharSequence getDialogMessage();
+    method @Deprecated public CharSequence getDialogTitle();
+    method @Deprecated public CharSequence getNegativeButtonText();
+    method @Deprecated public CharSequence getPositiveButtonText();
+    method @Deprecated public void onActivityDestroy();
+    method @Deprecated @CallSuper protected void onBindDialogView(android.view.View);
+    method @Deprecated public void onClick(android.content.DialogInterface, int);
+    method @Deprecated protected android.view.View onCreateDialogView();
+    method @Deprecated protected void onDialogClosed(boolean);
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method @Deprecated protected void onPrepareDialogBuilder(android.app.AlertDialog.Builder);
+    method @Deprecated public void setDialogIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public void setDialogIcon(@DrawableRes int);
+    method @Deprecated public void setDialogLayoutResource(int);
+    method @Deprecated public void setDialogMessage(CharSequence);
+    method @Deprecated public void setDialogMessage(int);
+    method @Deprecated public void setDialogTitle(CharSequence);
+    method @Deprecated public void setDialogTitle(int);
+    method @Deprecated public void setNegativeButtonText(CharSequence);
+    method @Deprecated public void setNegativeButtonText(@StringRes int);
+    method @Deprecated public void setPositiveButtonText(CharSequence);
+    method @Deprecated public void setPositiveButtonText(@StringRes int);
+    method @Deprecated protected void showDialog(android.os.Bundle);
+  }
+
+  @Deprecated public class EditTextPreference extends android.preference.DialogPreference {
+    ctor @Deprecated public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public EditTextPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public EditTextPreference(android.content.Context);
+    method @Deprecated public android.widget.EditText getEditText();
+    method @Deprecated public String getText();
+    method @Deprecated protected void onAddEditTextToDialogView(android.view.View, android.widget.EditText);
+    method @Deprecated public void setText(String);
+  }
+
+  @Deprecated public class ListPreference extends android.preference.DialogPreference {
+    ctor @Deprecated public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public ListPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public ListPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public ListPreference(android.content.Context);
+    method @Deprecated public int findIndexOfValue(String);
+    method @Deprecated public CharSequence[] getEntries();
+    method @Deprecated public CharSequence getEntry();
+    method @Deprecated public CharSequence[] getEntryValues();
+    method @Deprecated public String getValue();
+    method @Deprecated public void setEntries(CharSequence[]);
+    method @Deprecated public void setEntries(@ArrayRes int);
+    method @Deprecated public void setEntryValues(CharSequence[]);
+    method @Deprecated public void setEntryValues(@ArrayRes int);
+    method @Deprecated public void setValue(String);
+    method @Deprecated public void setValueIndex(int);
+  }
+
+  @Deprecated public class MultiSelectListPreference extends android.preference.DialogPreference {
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public MultiSelectListPreference(android.content.Context);
+    method @Deprecated public int findIndexOfValue(String);
+    method @Deprecated public CharSequence[] getEntries();
+    method @Deprecated public CharSequence[] getEntryValues();
+    method @Deprecated public java.util.Set<java.lang.String> getValues();
+    method @Deprecated public void setEntries(CharSequence[]);
+    method @Deprecated public void setEntries(@ArrayRes int);
+    method @Deprecated public void setEntryValues(CharSequence[]);
+    method @Deprecated public void setEntryValues(@ArrayRes int);
+    method @Deprecated public void setValues(java.util.Set<java.lang.String>);
+  }
+
+  @Deprecated public class Preference implements java.lang.Comparable<android.preference.Preference> {
+    ctor @Deprecated public Preference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public Preference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public Preference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public Preference(android.content.Context);
+    method @Deprecated protected boolean callChangeListener(Object);
+    method @Deprecated public int compareTo(android.preference.Preference);
+    method @Deprecated protected android.preference.Preference findPreferenceInHierarchy(String);
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated public String getDependency();
+    method @Deprecated public android.content.SharedPreferences.Editor getEditor();
+    method @Deprecated public android.os.Bundle getExtras();
+    method @Deprecated public String getFragment();
+    method @Deprecated public android.graphics.drawable.Drawable getIcon();
+    method @Deprecated public android.content.Intent getIntent();
+    method @Deprecated public String getKey();
+    method @Deprecated @LayoutRes public int getLayoutResource();
+    method @Deprecated public android.preference.Preference.OnPreferenceChangeListener getOnPreferenceChangeListener();
+    method @Deprecated public android.preference.Preference.OnPreferenceClickListener getOnPreferenceClickListener();
+    method @Deprecated public int getOrder();
+    method @Deprecated @Nullable public android.preference.PreferenceGroup getParent();
+    method @Deprecated protected boolean getPersistedBoolean(boolean);
+    method @Deprecated protected float getPersistedFloat(float);
+    method @Deprecated protected int getPersistedInt(int);
+    method @Deprecated protected long getPersistedLong(long);
+    method @Deprecated protected String getPersistedString(String);
+    method @Deprecated public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>);
+    method @Deprecated @Nullable public android.preference.PreferenceDataStore getPreferenceDataStore();
+    method @Deprecated public android.preference.PreferenceManager getPreferenceManager();
+    method @Deprecated public android.content.SharedPreferences getSharedPreferences();
+    method @Deprecated public boolean getShouldDisableView();
+    method @Deprecated public CharSequence getSummary();
+    method @Deprecated public CharSequence getTitle();
+    method @Deprecated @StringRes public int getTitleRes();
+    method @Deprecated public android.view.View getView(android.view.View, android.view.ViewGroup);
+    method @Deprecated @LayoutRes public int getWidgetLayoutResource();
+    method @Deprecated public boolean hasKey();
+    method @Deprecated public boolean isEnabled();
+    method @Deprecated public boolean isIconSpaceReserved();
+    method @Deprecated public boolean isPersistent();
+    method @Deprecated public boolean isRecycleEnabled();
+    method @Deprecated public boolean isSelectable();
+    method @Deprecated public boolean isSingleLineTitle();
+    method @Deprecated protected void notifyChanged();
+    method @Deprecated public void notifyDependencyChange(boolean);
+    method @Deprecated protected void notifyHierarchyChanged();
+    method @Deprecated protected void onAttachedToActivity();
+    method @Deprecated protected void onAttachedToHierarchy(android.preference.PreferenceManager);
+    method @Deprecated @CallSuper protected void onBindView(android.view.View);
+    method @Deprecated protected void onClick();
+    method @Deprecated @CallSuper protected android.view.View onCreateView(android.view.ViewGroup);
+    method @Deprecated public void onDependencyChanged(android.preference.Preference, boolean);
+    method @Deprecated protected Object onGetDefaultValue(android.content.res.TypedArray, int);
+    method @Deprecated public void onParentChanged(android.preference.Preference, boolean);
+    method @Deprecated @CallSuper protected void onPrepareForRemoval();
+    method @Deprecated protected void onRestoreInstanceState(android.os.Parcelable);
+    method @Deprecated protected android.os.Parcelable onSaveInstanceState();
+    method @Deprecated protected void onSetInitialValue(boolean, Object);
+    method @Deprecated public android.os.Bundle peekExtras();
+    method @Deprecated protected boolean persistBoolean(boolean);
+    method @Deprecated protected boolean persistFloat(float);
+    method @Deprecated protected boolean persistInt(int);
+    method @Deprecated protected boolean persistLong(long);
+    method @Deprecated protected boolean persistString(String);
+    method @Deprecated public boolean persistStringSet(java.util.Set<java.lang.String>);
+    method @Deprecated public void restoreHierarchyState(android.os.Bundle);
+    method @Deprecated public void saveHierarchyState(android.os.Bundle);
+    method @Deprecated public void setDefaultValue(Object);
+    method @Deprecated public void setDependency(String);
+    method @Deprecated public void setEnabled(boolean);
+    method @Deprecated public void setFragment(String);
+    method @Deprecated public void setIcon(android.graphics.drawable.Drawable);
+    method @Deprecated public void setIcon(@DrawableRes int);
+    method @Deprecated public void setIconSpaceReserved(boolean);
+    method @Deprecated public void setIntent(android.content.Intent);
+    method @Deprecated public void setKey(String);
+    method @Deprecated public void setLayoutResource(@LayoutRes int);
+    method @Deprecated public void setOnPreferenceChangeListener(android.preference.Preference.OnPreferenceChangeListener);
+    method @Deprecated public void setOnPreferenceClickListener(android.preference.Preference.OnPreferenceClickListener);
+    method @Deprecated public void setOrder(int);
+    method @Deprecated public void setPersistent(boolean);
+    method @Deprecated public void setPreferenceDataStore(android.preference.PreferenceDataStore);
+    method @Deprecated @CallSuper public void setRecycleEnabled(boolean);
+    method @Deprecated public void setSelectable(boolean);
+    method @Deprecated public void setShouldDisableView(boolean);
+    method @Deprecated public void setSingleLineTitle(boolean);
+    method @Deprecated public void setSummary(CharSequence);
+    method @Deprecated public void setSummary(@StringRes int);
+    method @Deprecated public void setTitle(CharSequence);
+    method @Deprecated public void setTitle(@StringRes int);
+    method @Deprecated public void setWidgetLayoutResource(@LayoutRes int);
+    method @Deprecated public boolean shouldCommit();
+    method @Deprecated public boolean shouldDisableDependents();
+    method @Deprecated protected boolean shouldPersist();
+    field @Deprecated public static final int DEFAULT_ORDER = 2147483647; // 0x7fffffff
+  }
+
+  @Deprecated public static class Preference.BaseSavedState extends android.view.AbsSavedState {
+    ctor @Deprecated public Preference.BaseSavedState(android.os.Parcel);
+    ctor @Deprecated public Preference.BaseSavedState(android.os.Parcelable);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.preference.Preference.BaseSavedState> CREATOR;
+  }
+
+  @Deprecated public static interface Preference.OnPreferenceChangeListener {
+    method @Deprecated public boolean onPreferenceChange(android.preference.Preference, Object);
+  }
+
+  @Deprecated public static interface Preference.OnPreferenceClickListener {
+    method @Deprecated public boolean onPreferenceClick(android.preference.Preference);
+  }
+
+  @Deprecated public abstract class PreferenceActivity extends android.app.ListActivity implements android.preference.PreferenceFragment.OnPreferenceStartFragmentCallback {
+    ctor @Deprecated public PreferenceActivity();
+    method @Deprecated public void addPreferencesFromIntent(android.content.Intent);
+    method @Deprecated public void addPreferencesFromResource(int);
+    method @Deprecated public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public void finishPreferencePanel(android.app.Fragment, int, android.content.Intent);
+    method @Deprecated public android.preference.PreferenceManager getPreferenceManager();
+    method @Deprecated public android.preference.PreferenceScreen getPreferenceScreen();
+    method @Deprecated public boolean hasHeaders();
+    method @Deprecated public void invalidateHeaders();
+    method @Deprecated public boolean isMultiPane();
+    method @Deprecated protected boolean isValidFragment(String);
+    method @Deprecated public void loadHeadersFromResource(@XmlRes int, java.util.List<android.preference.PreferenceActivity.Header>);
+    method @Deprecated public void onBuildHeaders(java.util.List<android.preference.PreferenceActivity.Header>);
+    method @Deprecated public android.content.Intent onBuildStartFragmentIntent(String, android.os.Bundle, @StringRes int, int);
+    method @Deprecated public android.preference.PreferenceActivity.Header onGetInitialHeader();
+    method @Deprecated public android.preference.PreferenceActivity.Header onGetNewHeader();
+    method @Deprecated public void onHeaderClick(android.preference.PreferenceActivity.Header, int);
+    method @Deprecated public boolean onIsHidingHeaders();
+    method @Deprecated public boolean onIsMultiPane();
+    method @Deprecated public boolean onPreferenceStartFragment(android.preference.PreferenceFragment, android.preference.Preference);
+    method @Deprecated public boolean onPreferenceTreeClick(android.preference.PreferenceScreen, android.preference.Preference);
+    method @Deprecated public void setListFooter(android.view.View);
+    method @Deprecated public void setParentTitle(CharSequence, CharSequence, android.view.View.OnClickListener);
+    method @Deprecated public void setPreferenceScreen(android.preference.PreferenceScreen);
+    method @Deprecated public void showBreadCrumbs(CharSequence, CharSequence);
+    method @Deprecated public void startPreferenceFragment(android.app.Fragment, boolean);
+    method @Deprecated public void startPreferencePanel(String, android.os.Bundle, @StringRes int, CharSequence, android.app.Fragment, int);
+    method @Deprecated public void startWithFragment(String, android.os.Bundle, android.app.Fragment, int);
+    method @Deprecated public void startWithFragment(String, android.os.Bundle, android.app.Fragment, int, @StringRes int, @StringRes int);
+    method @Deprecated public void switchToHeader(String, android.os.Bundle);
+    method @Deprecated public void switchToHeader(android.preference.PreferenceActivity.Header);
+    field @Deprecated public static final String EXTRA_NO_HEADERS = ":android:no_headers";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT = ":android:show_fragment";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT_ARGUMENTS = ":android:show_fragment_args";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT_SHORT_TITLE = ":android:show_fragment_short_title";
+    field @Deprecated public static final String EXTRA_SHOW_FRAGMENT_TITLE = ":android:show_fragment_title";
+    field @Deprecated public static final long HEADER_ID_UNDEFINED = -1L; // 0xffffffffffffffffL
+  }
+
+  @Deprecated public static final class PreferenceActivity.Header implements android.os.Parcelable {
+    ctor @Deprecated public PreferenceActivity.Header();
+    method @Deprecated public int describeContents();
+    method @Deprecated public CharSequence getBreadCrumbShortTitle(android.content.res.Resources);
+    method @Deprecated public CharSequence getBreadCrumbTitle(android.content.res.Resources);
+    method @Deprecated public CharSequence getSummary(android.content.res.Resources);
+    method @Deprecated public CharSequence getTitle(android.content.res.Resources);
+    method @Deprecated public void readFromParcel(android.os.Parcel);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.preference.PreferenceActivity.Header> CREATOR;
+    field @Deprecated public CharSequence breadCrumbShortTitle;
+    field @Deprecated @StringRes public int breadCrumbShortTitleRes;
+    field @Deprecated public CharSequence breadCrumbTitle;
+    field @Deprecated @StringRes public int breadCrumbTitleRes;
+    field @Deprecated public android.os.Bundle extras;
+    field @Deprecated public String fragment;
+    field @Deprecated public android.os.Bundle fragmentArguments;
+    field @Deprecated public int iconRes;
+    field @Deprecated public long id;
+    field @Deprecated public android.content.Intent intent;
+    field @Deprecated public CharSequence summary;
+    field @Deprecated @StringRes public int summaryRes;
+    field @Deprecated public CharSequence title;
+    field @Deprecated @StringRes public int titleRes;
+  }
+
+  @Deprecated public class PreferenceCategory extends android.preference.PreferenceGroup {
+    ctor @Deprecated public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public PreferenceCategory(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public PreferenceCategory(android.content.Context);
+  }
+
+  @Deprecated public interface PreferenceDataStore {
+    method @Deprecated public default boolean getBoolean(String, boolean);
+    method @Deprecated public default float getFloat(String, float);
+    method @Deprecated public default int getInt(String, int);
+    method @Deprecated public default long getLong(String, long);
+    method @Deprecated @Nullable public default String getString(String, @Nullable String);
+    method @Deprecated @Nullable public default java.util.Set<java.lang.String> getStringSet(String, @Nullable java.util.Set<java.lang.String>);
+    method @Deprecated public default void putBoolean(String, boolean);
+    method @Deprecated public default void putFloat(String, float);
+    method @Deprecated public default void putInt(String, int);
+    method @Deprecated public default void putLong(String, long);
+    method @Deprecated public default void putString(String, @Nullable String);
+    method @Deprecated public default void putStringSet(String, @Nullable java.util.Set<java.lang.String>);
+  }
+
+  @Deprecated public abstract class PreferenceFragment extends android.app.Fragment {
+    ctor @Deprecated public PreferenceFragment();
+    method @Deprecated public void addPreferencesFromIntent(android.content.Intent);
+    method @Deprecated public void addPreferencesFromResource(@XmlRes int);
+    method @Deprecated public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public android.preference.PreferenceManager getPreferenceManager();
+    method @Deprecated public android.preference.PreferenceScreen getPreferenceScreen();
+    method @Deprecated public boolean onPreferenceTreeClick(android.preference.PreferenceScreen, android.preference.Preference);
+    method @Deprecated public void setPreferenceScreen(android.preference.PreferenceScreen);
+  }
+
+  @Deprecated public static interface PreferenceFragment.OnPreferenceStartFragmentCallback {
+    method @Deprecated public boolean onPreferenceStartFragment(android.preference.PreferenceFragment, android.preference.Preference);
+  }
+
+  @Deprecated public abstract class PreferenceGroup extends android.preference.Preference {
+    ctor @Deprecated public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public PreferenceGroup(android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void addItemFromInflater(android.preference.Preference);
+    method @Deprecated public boolean addPreference(android.preference.Preference);
+    method @Deprecated protected void dispatchRestoreInstanceState(android.os.Bundle);
+    method @Deprecated protected void dispatchSaveInstanceState(android.os.Bundle);
+    method @Deprecated public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public android.preference.Preference getPreference(int);
+    method @Deprecated public int getPreferenceCount();
+    method @Deprecated protected boolean isOnSameScreenAsChildren();
+    method @Deprecated public boolean isOrderingAsAdded();
+    method @Deprecated protected boolean onPrepareAddPreference(android.preference.Preference);
+    method @Deprecated public void removeAll();
+    method @Deprecated public boolean removePreference(android.preference.Preference);
+    method @Deprecated public void setOrderingAsAdded(boolean);
+  }
+
+  @Deprecated public class PreferenceManager {
+    method @Deprecated public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
+    method @Deprecated @Nullable public android.preference.Preference findPreference(CharSequence);
+    method @Deprecated public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+    method @Deprecated public static String getDefaultSharedPreferencesName(android.content.Context);
+    method @Deprecated @Nullable public android.preference.PreferenceDataStore getPreferenceDataStore();
+    method @Deprecated public android.content.SharedPreferences getSharedPreferences();
+    method @Deprecated public int getSharedPreferencesMode();
+    method @Deprecated public String getSharedPreferencesName();
+    method @Deprecated public boolean isStorageDefault();
+    method @Deprecated public boolean isStorageDeviceProtected();
+    method @Deprecated public static void setDefaultValues(android.content.Context, @XmlRes int, boolean);
+    method @Deprecated public static void setDefaultValues(android.content.Context, String, int, int, boolean);
+    method @Deprecated public void setPreferenceDataStore(android.preference.PreferenceDataStore);
+    method @Deprecated public void setSharedPreferencesMode(int);
+    method @Deprecated public void setSharedPreferencesName(String);
+    method @Deprecated public void setStorageDefault();
+    method @Deprecated public void setStorageDeviceProtected();
+    field @Deprecated public static final String KEY_HAS_SET_DEFAULT_VALUES = "_has_set_default_values";
+    field @Deprecated public static final String METADATA_KEY_PREFERENCES = "android.preference";
+  }
+
+  @Deprecated public static interface PreferenceManager.OnActivityDestroyListener {
+    method @Deprecated public void onActivityDestroy();
+  }
+
+  @Deprecated public static interface PreferenceManager.OnActivityResultListener {
+    method @Deprecated public boolean onActivityResult(int, int, android.content.Intent);
+  }
+
+  @Deprecated public static interface PreferenceManager.OnActivityStopListener {
+    method @Deprecated public void onActivityStop();
+  }
+
+  @Deprecated public final class PreferenceScreen extends android.preference.PreferenceGroup implements android.widget.AdapterView.OnItemClickListener android.content.DialogInterface.OnDismissListener {
+    method @Deprecated public void bind(android.widget.ListView);
+    method @Deprecated public android.app.Dialog getDialog();
+    method @Deprecated public android.widget.ListAdapter getRootAdapter();
+    method @Deprecated protected android.widget.ListAdapter onCreateRootAdapter();
+    method @Deprecated public void onDismiss(android.content.DialogInterface);
+    method @Deprecated public void onItemClick(android.widget.AdapterView, android.view.View, int, long);
+  }
+
+  @Deprecated public class RingtonePreference extends android.preference.Preference implements android.preference.PreferenceManager.OnActivityResultListener {
+    ctor @Deprecated public RingtonePreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public RingtonePreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public RingtonePreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public RingtonePreference(android.content.Context);
+    method @Deprecated public int getRingtoneType();
+    method @Deprecated public boolean getShowDefault();
+    method @Deprecated public boolean getShowSilent();
+    method @Deprecated public boolean onActivityResult(int, int, android.content.Intent);
+    method @Deprecated protected void onPrepareRingtonePickerIntent(android.content.Intent);
+    method @Deprecated protected android.net.Uri onRestoreRingtone();
+    method @Deprecated protected void onSaveRingtone(android.net.Uri);
+    method @Deprecated public void setRingtoneType(int);
+    method @Deprecated public void setShowDefault(boolean);
+    method @Deprecated public void setShowSilent(boolean);
+  }
+
+  @Deprecated public class SwitchPreference extends android.preference.TwoStatePreference {
+    ctor @Deprecated public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public SwitchPreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public SwitchPreference(android.content.Context);
+    method @Deprecated public CharSequence getSwitchTextOff();
+    method @Deprecated public CharSequence getSwitchTextOn();
+    method @Deprecated public void setSwitchTextOff(CharSequence);
+    method @Deprecated public void setSwitchTextOff(@StringRes int);
+    method @Deprecated public void setSwitchTextOn(CharSequence);
+    method @Deprecated public void setSwitchTextOn(@StringRes int);
+  }
+
+  @Deprecated public abstract class TwoStatePreference extends android.preference.Preference {
+    ctor @Deprecated public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor @Deprecated public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TwoStatePreference(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TwoStatePreference(android.content.Context);
+    method @Deprecated public boolean getDisableDependentsState();
+    method @Deprecated public CharSequence getSummaryOff();
+    method @Deprecated public CharSequence getSummaryOn();
+    method @Deprecated public boolean isChecked();
+    method @Deprecated public void setChecked(boolean);
+    method @Deprecated public void setDisableDependentsState(boolean);
+    method @Deprecated public void setSummaryOff(CharSequence);
+    method @Deprecated public void setSummaryOff(@StringRes int);
+    method @Deprecated public void setSummaryOn(CharSequence);
+    method @Deprecated public void setSummaryOn(@StringRes int);
+  }
+
+}
+
+package android.print {
+
+  public final class PageRange implements android.os.Parcelable {
+    ctor public PageRange(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int describeContents();
+    method @IntRange(from=0) public int getEnd();
+    method @IntRange(from=0) public int getStart();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.print.PageRange ALL_PAGES;
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PageRange> CREATOR;
+  }
+
+  public final class PrintAttributes implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public int getColorMode();
+    method @IntRange(from=0) public int getDuplexMode();
+    method @Nullable public android.print.PrintAttributes.MediaSize getMediaSize();
+    method @Nullable public android.print.PrintAttributes.Margins getMinMargins();
+    method @Nullable public android.print.PrintAttributes.Resolution getResolution();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int COLOR_MODE_COLOR = 2; // 0x2
+    field public static final int COLOR_MODE_MONOCHROME = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintAttributes> CREATOR;
+    field public static final int DUPLEX_MODE_LONG_EDGE = 2; // 0x2
+    field public static final int DUPLEX_MODE_NONE = 1; // 0x1
+    field public static final int DUPLEX_MODE_SHORT_EDGE = 4; // 0x4
+  }
+
+  public static final class PrintAttributes.Builder {
+    ctor public PrintAttributes.Builder();
+    method @NonNull public android.print.PrintAttributes build();
+    method @NonNull public android.print.PrintAttributes.Builder setColorMode(int);
+    method @NonNull public android.print.PrintAttributes.Builder setDuplexMode(int);
+    method @NonNull public android.print.PrintAttributes.Builder setMediaSize(@NonNull android.print.PrintAttributes.MediaSize);
+    method @NonNull public android.print.PrintAttributes.Builder setMinMargins(@NonNull android.print.PrintAttributes.Margins);
+    method @NonNull public android.print.PrintAttributes.Builder setResolution(@NonNull android.print.PrintAttributes.Resolution);
+  }
+
+  public static final class PrintAttributes.Margins {
+    ctor public PrintAttributes.Margins(int, int, int, int);
+    method public int getBottomMils();
+    method public int getLeftMils();
+    method public int getRightMils();
+    method public int getTopMils();
+    field public static final android.print.PrintAttributes.Margins NO_MARGINS;
+  }
+
+  public static final class PrintAttributes.MediaSize {
+    ctor public PrintAttributes.MediaSize(@NonNull String, @NonNull String, @IntRange(from=1) int, @IntRange(from=1) int);
+    method @NonNull public android.print.PrintAttributes.MediaSize asLandscape();
+    method @NonNull public android.print.PrintAttributes.MediaSize asPortrait();
+    method @IntRange(from=1) public int getHeightMils();
+    method @NonNull public String getId();
+    method @NonNull public String getLabel(@NonNull android.content.pm.PackageManager);
+    method @IntRange(from=1) public int getWidthMils();
+    method public boolean isPortrait();
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_C;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_D;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_E;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize ANSI_F;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A0;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A1;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A10;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A2;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A3;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A4;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A5;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A6;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A7;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A8;
+    field public static final android.print.PrintAttributes.MediaSize ISO_A9;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B0;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B1;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B10;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B2;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B3;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B4;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B5;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B6;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B7;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B8;
+    field public static final android.print.PrintAttributes.MediaSize ISO_B9;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C0;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C1;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C10;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C2;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C3;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C4;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C5;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C6;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C7;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C8;
+    field public static final android.print.PrintAttributes.MediaSize ISO_C9;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B0;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B1;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B10;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B2;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B3;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B4;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B5;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B6;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B7;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B8;
+    field public static final android.print.PrintAttributes.MediaSize JIS_B9;
+    field public static final android.print.PrintAttributes.MediaSize JIS_EXEC;
+    field public static final android.print.PrintAttributes.MediaSize JPN_CHOU2;
+    field public static final android.print.PrintAttributes.MediaSize JPN_CHOU3;
+    field public static final android.print.PrintAttributes.MediaSize JPN_CHOU4;
+    field public static final android.print.PrintAttributes.MediaSize JPN_HAGAKI;
+    field public static final android.print.PrintAttributes.MediaSize JPN_KAHU;
+    field public static final android.print.PrintAttributes.MediaSize JPN_KAKU2;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize JPN_OE_PHOTO_L;
+    field public static final android.print.PrintAttributes.MediaSize JPN_OUFUKU;
+    field public static final android.print.PrintAttributes.MediaSize JPN_YOU4;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_A;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_B;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_C;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_D;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_E;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_ARCH_E1;
+    field public static final android.print.PrintAttributes.MediaSize NA_FOOLSCAP;
+    field public static final android.print.PrintAttributes.MediaSize NA_GOVT_LETTER;
+    field public static final android.print.PrintAttributes.MediaSize NA_INDEX_3X5;
+    field public static final android.print.PrintAttributes.MediaSize NA_INDEX_4X6;
+    field public static final android.print.PrintAttributes.MediaSize NA_INDEX_5X8;
+    field public static final android.print.PrintAttributes.MediaSize NA_JUNIOR_LEGAL;
+    field public static final android.print.PrintAttributes.MediaSize NA_LEDGER;
+    field public static final android.print.PrintAttributes.MediaSize NA_LEGAL;
+    field public static final android.print.PrintAttributes.MediaSize NA_LETTER;
+    field public static final android.print.PrintAttributes.MediaSize NA_MONARCH;
+    field public static final android.print.PrintAttributes.MediaSize NA_QUARTO;
+    field @NonNull public static final android.print.PrintAttributes.MediaSize NA_SUPER_B;
+    field public static final android.print.PrintAttributes.MediaSize NA_TABLOID;
+    field public static final android.print.PrintAttributes.MediaSize OM_DAI_PA_KAI;
+    field public static final android.print.PrintAttributes.MediaSize OM_JUURO_KU_KAI;
+    field public static final android.print.PrintAttributes.MediaSize OM_PA_KAI;
+    field public static final android.print.PrintAttributes.MediaSize PRC_1;
+    field public static final android.print.PrintAttributes.MediaSize PRC_10;
+    field public static final android.print.PrintAttributes.MediaSize PRC_16K;
+    field public static final android.print.PrintAttributes.MediaSize PRC_2;
+    field public static final android.print.PrintAttributes.MediaSize PRC_3;
+    field public static final android.print.PrintAttributes.MediaSize PRC_4;
+    field public static final android.print.PrintAttributes.MediaSize PRC_5;
+    field public static final android.print.PrintAttributes.MediaSize PRC_6;
+    field public static final android.print.PrintAttributes.MediaSize PRC_7;
+    field public static final android.print.PrintAttributes.MediaSize PRC_8;
+    field public static final android.print.PrintAttributes.MediaSize PRC_9;
+    field public static final android.print.PrintAttributes.MediaSize ROC_16K;
+    field public static final android.print.PrintAttributes.MediaSize ROC_8K;
+    field public static final android.print.PrintAttributes.MediaSize UNKNOWN_LANDSCAPE;
+    field public static final android.print.PrintAttributes.MediaSize UNKNOWN_PORTRAIT;
+  }
+
+  public static final class PrintAttributes.Resolution {
+    ctor public PrintAttributes.Resolution(@NonNull String, @NonNull String, @IntRange(from=1) int, @IntRange(from=1) int);
+    method @IntRange(from=1) public int getHorizontalDpi();
+    method @NonNull public String getId();
+    method @NonNull public String getLabel();
+    method @IntRange(from=1) public int getVerticalDpi();
+  }
+
+  public abstract class PrintDocumentAdapter {
+    ctor public PrintDocumentAdapter();
+    method public void onFinish();
+    method public abstract void onLayout(android.print.PrintAttributes, android.print.PrintAttributes, android.os.CancellationSignal, android.print.PrintDocumentAdapter.LayoutResultCallback, android.os.Bundle);
+    method public void onStart();
+    method public abstract void onWrite(android.print.PageRange[], android.os.ParcelFileDescriptor, android.os.CancellationSignal, android.print.PrintDocumentAdapter.WriteResultCallback);
+    field public static final String EXTRA_PRINT_PREVIEW = "EXTRA_PRINT_PREVIEW";
+  }
+
+  public abstract static class PrintDocumentAdapter.LayoutResultCallback {
+    method public void onLayoutCancelled();
+    method public void onLayoutFailed(CharSequence);
+    method public void onLayoutFinished(android.print.PrintDocumentInfo, boolean);
+  }
+
+  public abstract static class PrintDocumentAdapter.WriteResultCallback {
+    method public void onWriteCancelled();
+    method public void onWriteFailed(CharSequence);
+    method public void onWriteFinished(android.print.PageRange[]);
+  }
+
+  public final class PrintDocumentInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getContentType();
+    method @IntRange(from=0) public long getDataSize();
+    method @NonNull public String getName();
+    method @IntRange(from=0xffffffff) public int getPageCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONTENT_TYPE_DOCUMENT = 0; // 0x0
+    field public static final int CONTENT_TYPE_PHOTO = 1; // 0x1
+    field public static final int CONTENT_TYPE_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintDocumentInfo> CREATOR;
+    field public static final int PAGE_COUNT_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class PrintDocumentInfo.Builder {
+    ctor public PrintDocumentInfo.Builder(@NonNull String);
+    method @NonNull public android.print.PrintDocumentInfo build();
+    method @NonNull public android.print.PrintDocumentInfo.Builder setContentType(int);
+    method @NonNull public android.print.PrintDocumentInfo.Builder setPageCount(@IntRange(from=0xffffffff) int);
+  }
+
+  public final class PrintJob {
+    method public void cancel();
+    method @Nullable public android.print.PrintJobId getId();
+    method @NonNull public android.print.PrintJobInfo getInfo();
+    method public boolean isBlocked();
+    method public boolean isCancelled();
+    method public boolean isCompleted();
+    method public boolean isFailed();
+    method public boolean isQueued();
+    method public boolean isStarted();
+    method public void restart();
+  }
+
+  public final class PrintJobId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintJobId> CREATOR;
+  }
+
+  public final class PrintJobInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAdvancedIntOption(String);
+    method public String getAdvancedStringOption(String);
+    method @NonNull public android.print.PrintAttributes getAttributes();
+    method @IntRange(from=0) public int getCopies();
+    method public long getCreationTime();
+    method @Nullable public android.print.PrintJobId getId();
+    method @NonNull public String getLabel();
+    method @Nullable public android.print.PageRange[] getPages();
+    method @Nullable public android.print.PrinterId getPrinterId();
+    method public int getState();
+    method public boolean hasAdvancedOption(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrintJobInfo> CREATOR;
+    field public static final int STATE_BLOCKED = 4; // 0x4
+    field public static final int STATE_CANCELED = 7; // 0x7
+    field public static final int STATE_COMPLETED = 5; // 0x5
+    field public static final int STATE_CREATED = 1; // 0x1
+    field public static final int STATE_FAILED = 6; // 0x6
+    field public static final int STATE_QUEUED = 2; // 0x2
+    field public static final int STATE_STARTED = 3; // 0x3
+  }
+
+  public static final class PrintJobInfo.Builder {
+    ctor public PrintJobInfo.Builder(@Nullable android.print.PrintJobInfo);
+    method @NonNull public android.print.PrintJobInfo build();
+    method public void putAdvancedOption(@NonNull String, @Nullable String);
+    method public void putAdvancedOption(@NonNull String, int);
+    method public void setAttributes(@NonNull android.print.PrintAttributes);
+    method public void setCopies(@IntRange(from=1) int);
+    method public void setPages(@NonNull android.print.PageRange[]);
+  }
+
+  public final class PrintManager {
+    method @NonNull public java.util.List<android.print.PrintJob> getPrintJobs();
+    method @NonNull public android.print.PrintJob print(@NonNull String, @NonNull android.print.PrintDocumentAdapter, @Nullable android.print.PrintAttributes);
+  }
+
+  public final class PrinterCapabilitiesInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getColorModes();
+    method @NonNull public android.print.PrintAttributes getDefaults();
+    method public int getDuplexModes();
+    method @NonNull public java.util.List<android.print.PrintAttributes.MediaSize> getMediaSizes();
+    method @NonNull public android.print.PrintAttributes.Margins getMinMargins();
+    method @NonNull public java.util.List<android.print.PrintAttributes.Resolution> getResolutions();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterCapabilitiesInfo> CREATOR;
+  }
+
+  public static final class PrinterCapabilitiesInfo.Builder {
+    ctor public PrinterCapabilitiesInfo.Builder(@NonNull android.print.PrinterId);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder addMediaSize(@NonNull android.print.PrintAttributes.MediaSize, boolean);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder addResolution(@NonNull android.print.PrintAttributes.Resolution, boolean);
+    method @NonNull public android.print.PrinterCapabilitiesInfo build();
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder setColorModes(int, int);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder setDuplexModes(int, int);
+    method @NonNull public android.print.PrinterCapabilitiesInfo.Builder setMinMargins(@NonNull android.print.PrintAttributes.Margins);
+  }
+
+  public final class PrinterId implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getLocalId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterId> CREATOR;
+  }
+
+  public final class PrinterInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.print.PrinterCapabilitiesInfo getCapabilities();
+    method @Nullable public String getDescription();
+    method @NonNull public android.print.PrinterId getId();
+    method @NonNull public String getName();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.print.PrinterInfo> CREATOR;
+    field public static final int STATUS_BUSY = 2; // 0x2
+    field public static final int STATUS_IDLE = 1; // 0x1
+    field public static final int STATUS_UNAVAILABLE = 3; // 0x3
+  }
+
+  public static final class PrinterInfo.Builder {
+    ctor public PrinterInfo.Builder(@NonNull android.print.PrinterId, @NonNull String, int);
+    ctor public PrinterInfo.Builder(@NonNull android.print.PrinterInfo);
+    method @NonNull public android.print.PrinterInfo build();
+    method @NonNull public android.print.PrinterInfo.Builder setCapabilities(@NonNull android.print.PrinterCapabilitiesInfo);
+    method @NonNull public android.print.PrinterInfo.Builder setDescription(@NonNull String);
+    method @NonNull public android.print.PrinterInfo.Builder setHasCustomPrinterIcon(boolean);
+    method @NonNull public android.print.PrinterInfo.Builder setIconResourceId(@DrawableRes int);
+    method @NonNull public android.print.PrinterInfo.Builder setInfoIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.print.PrinterInfo.Builder setName(@NonNull String);
+    method @NonNull public android.print.PrinterInfo.Builder setStatus(int);
+  }
+
+}
+
+package android.print.pdf {
+
+  public class PrintedPdfDocument extends android.graphics.pdf.PdfDocument {
+    ctor public PrintedPdfDocument(@NonNull android.content.Context, @NonNull android.print.PrintAttributes);
+    method @NonNull public android.graphics.Rect getPageContentRect();
+    method @IntRange(from=0) public int getPageHeight();
+    method @IntRange(from=0) public int getPageWidth();
+    method @NonNull public android.graphics.pdf.PdfDocument.Page startPage(@IntRange(from=0) int);
+  }
+
+}
+
+package android.printservice {
+
+  public final class CustomPrinterIconCallback {
+    method public boolean onCustomPrinterIconLoaded(@Nullable android.graphics.drawable.Icon);
+  }
+
+  public final class PrintDocument {
+    method @Nullable public android.os.ParcelFileDescriptor getData();
+    method @NonNull public android.print.PrintDocumentInfo getInfo();
+  }
+
+  public final class PrintJob {
+    method @MainThread public boolean block(@Nullable String);
+    method @MainThread public boolean cancel();
+    method @MainThread public boolean complete();
+    method @MainThread public boolean fail(@Nullable String);
+    method @MainThread public int getAdvancedIntOption(String);
+    method @MainThread public String getAdvancedStringOption(String);
+    method @MainThread @NonNull public android.printservice.PrintDocument getDocument();
+    method @MainThread public android.print.PrintJobId getId();
+    method @MainThread @NonNull public android.print.PrintJobInfo getInfo();
+    method @MainThread @Nullable public String getTag();
+    method @MainThread public boolean hasAdvancedOption(String);
+    method @MainThread public boolean isBlocked();
+    method @MainThread public boolean isCancelled();
+    method @MainThread public boolean isCompleted();
+    method @MainThread public boolean isFailed();
+    method @MainThread public boolean isQueued();
+    method @MainThread public boolean isStarted();
+    method @MainThread public void setProgress(@FloatRange(from=0.0, to=1.0) float);
+    method @MainThread public void setStatus(@Nullable CharSequence);
+    method @MainThread public void setStatus(@StringRes int);
+    method @MainThread public boolean setTag(@NonNull String);
+    method @MainThread public boolean start();
+  }
+
+  public abstract class PrintService extends android.app.Service {
+    ctor public PrintService();
+    method protected final void attachBaseContext(android.content.Context);
+    method @NonNull public final android.print.PrinterId generatePrinterId(String);
+    method public final java.util.List<android.printservice.PrintJob> getActivePrintJobs();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method protected void onConnected();
+    method @Nullable protected abstract android.printservice.PrinterDiscoverySession onCreatePrinterDiscoverySession();
+    method protected void onDisconnected();
+    method protected abstract void onPrintJobQueued(android.printservice.PrintJob);
+    method protected abstract void onRequestCancelPrintJob(android.printservice.PrintJob);
+    field public static final String EXTRA_CAN_SELECT_PRINTER = "android.printservice.extra.CAN_SELECT_PRINTER";
+    field public static final String EXTRA_PRINTER_INFO = "android.intent.extra.print.EXTRA_PRINTER_INFO";
+    field public static final String EXTRA_PRINT_DOCUMENT_INFO = "android.printservice.extra.PRINT_DOCUMENT_INFO";
+    field public static final String EXTRA_PRINT_JOB_INFO = "android.intent.extra.print.PRINT_JOB_INFO";
+    field public static final String EXTRA_SELECT_PRINTER = "android.printservice.extra.SELECT_PRINTER";
+    field public static final String SERVICE_INTERFACE = "android.printservice.PrintService";
+    field public static final String SERVICE_META_DATA = "android.printservice";
+  }
+
+  public abstract class PrinterDiscoverySession {
+    ctor public PrinterDiscoverySession();
+    method public final void addPrinters(@NonNull java.util.List<android.print.PrinterInfo>);
+    method @NonNull public final java.util.List<android.print.PrinterInfo> getPrinters();
+    method @NonNull public final java.util.List<android.print.PrinterId> getTrackedPrinters();
+    method public final boolean isDestroyed();
+    method public final boolean isPrinterDiscoveryStarted();
+    method public abstract void onDestroy();
+    method public void onRequestCustomPrinterIcon(@NonNull android.print.PrinterId, @NonNull android.os.CancellationSignal, @NonNull android.printservice.CustomPrinterIconCallback);
+    method public abstract void onStartPrinterDiscovery(@NonNull java.util.List<android.print.PrinterId>);
+    method public abstract void onStartPrinterStateTracking(@NonNull android.print.PrinterId);
+    method public abstract void onStopPrinterDiscovery();
+    method public abstract void onStopPrinterStateTracking(@NonNull android.print.PrinterId);
+    method public abstract void onValidatePrinters(@NonNull java.util.List<android.print.PrinterId>);
+    method public final void removePrinters(@NonNull java.util.List<android.print.PrinterId>);
+  }
+
+}
+
+package android.provider {
+
+  public final class AlarmClock {
+    ctor public AlarmClock();
+    field public static final String ACTION_DISMISS_ALARM = "android.intent.action.DISMISS_ALARM";
+    field public static final String ACTION_DISMISS_TIMER = "android.intent.action.DISMISS_TIMER";
+    field public static final String ACTION_SET_ALARM = "android.intent.action.SET_ALARM";
+    field public static final String ACTION_SET_TIMER = "android.intent.action.SET_TIMER";
+    field public static final String ACTION_SHOW_ALARMS = "android.intent.action.SHOW_ALARMS";
+    field public static final String ACTION_SHOW_TIMERS = "android.intent.action.SHOW_TIMERS";
+    field public static final String ACTION_SNOOZE_ALARM = "android.intent.action.SNOOZE_ALARM";
+    field public static final String ALARM_SEARCH_MODE_ALL = "android.all";
+    field public static final String ALARM_SEARCH_MODE_LABEL = "android.label";
+    field public static final String ALARM_SEARCH_MODE_NEXT = "android.next";
+    field public static final String ALARM_SEARCH_MODE_TIME = "android.time";
+    field public static final String EXTRA_ALARM_SEARCH_MODE = "android.intent.extra.alarm.SEARCH_MODE";
+    field public static final String EXTRA_ALARM_SNOOZE_DURATION = "android.intent.extra.alarm.SNOOZE_DURATION";
+    field public static final String EXTRA_DAYS = "android.intent.extra.alarm.DAYS";
+    field public static final String EXTRA_HOUR = "android.intent.extra.alarm.HOUR";
+    field public static final String EXTRA_IS_PM = "android.intent.extra.alarm.IS_PM";
+    field public static final String EXTRA_LENGTH = "android.intent.extra.alarm.LENGTH";
+    field public static final String EXTRA_MESSAGE = "android.intent.extra.alarm.MESSAGE";
+    field public static final String EXTRA_MINUTES = "android.intent.extra.alarm.MINUTES";
+    field public static final String EXTRA_RINGTONE = "android.intent.extra.alarm.RINGTONE";
+    field public static final String EXTRA_SKIP_UI = "android.intent.extra.alarm.SKIP_UI";
+    field public static final String EXTRA_VIBRATE = "android.intent.extra.alarm.VIBRATE";
+    field public static final String VALUE_RINGTONE_SILENT = "silent";
+  }
+
+  public interface BaseColumns {
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  public class BlockedNumberContract {
+    method public static boolean canCurrentUserBlockNumbers(android.content.Context);
+    method @WorkerThread public static boolean isBlocked(android.content.Context, String);
+    method @WorkerThread public static int unblock(android.content.Context, String);
+    field public static final String AUTHORITY = "com.android.blockednumber";
+    field public static final android.net.Uri AUTHORITY_URI;
+  }
+
+  public static class BlockedNumberContract.BlockedNumbers {
+    field public static final String COLUMN_E164_NUMBER = "e164_number";
+    field public static final String COLUMN_ID = "_id";
+    field public static final String COLUMN_ORIGINAL_NUMBER = "original_number";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/blocked_number";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/blocked_number";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public class Browser {
+    ctor public Browser();
+    method public static final void sendString(android.content.Context, String);
+    field public static final String EXTRA_APPLICATION_ID = "com.android.browser.application_id";
+    field public static final String EXTRA_CREATE_NEW_TAB = "create_new_tab";
+    field public static final String EXTRA_HEADERS = "com.android.browser.headers";
+    field public static final String INITIAL_ZOOM_LEVEL = "browser.initialZoomLevel";
+  }
+
+  public final class CalendarContract {
+    method public static boolean startViewCalendarEventInManagedProfile(@NonNull android.content.Context, long, long, long, boolean, int);
+    field public static final String ACCOUNT_TYPE_LOCAL = "LOCAL";
+    field public static final String ACTION_EVENT_REMINDER = "android.intent.action.EVENT_REMINDER";
+    field public static final String ACTION_HANDLE_CUSTOM_EVENT = "android.provider.calendar.action.HANDLE_CUSTOM_EVENT";
+    field public static final String ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT = "android.provider.calendar.action.VIEW_MANAGED_PROFILE_CALENDAR_EVENT";
+    field public static final String AUTHORITY = "com.android.calendar";
+    field public static final String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String EXTRA_CUSTOM_APP_URI = "customAppUri";
+    field public static final String EXTRA_EVENT_ALL_DAY = "allDay";
+    field public static final String EXTRA_EVENT_BEGIN_TIME = "beginTime";
+    field public static final String EXTRA_EVENT_END_TIME = "endTime";
+    field public static final String EXTRA_EVENT_ID = "id";
+  }
+
+  public static final class CalendarContract.Attendees implements android.provider.BaseColumns android.provider.CalendarContract.AttendeesColumns android.provider.CalendarContract.EventsColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, long, String[]);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.AttendeesColumns {
+    field public static final String ATTENDEE_EMAIL = "attendeeEmail";
+    field public static final String ATTENDEE_IDENTITY = "attendeeIdentity";
+    field public static final String ATTENDEE_ID_NAMESPACE = "attendeeIdNamespace";
+    field public static final String ATTENDEE_NAME = "attendeeName";
+    field public static final String ATTENDEE_RELATIONSHIP = "attendeeRelationship";
+    field public static final String ATTENDEE_STATUS = "attendeeStatus";
+    field public static final int ATTENDEE_STATUS_ACCEPTED = 1; // 0x1
+    field public static final int ATTENDEE_STATUS_DECLINED = 2; // 0x2
+    field public static final int ATTENDEE_STATUS_INVITED = 3; // 0x3
+    field public static final int ATTENDEE_STATUS_NONE = 0; // 0x0
+    field public static final int ATTENDEE_STATUS_TENTATIVE = 4; // 0x4
+    field public static final String ATTENDEE_TYPE = "attendeeType";
+    field public static final String EVENT_ID = "event_id";
+    field public static final int RELATIONSHIP_ATTENDEE = 1; // 0x1
+    field public static final int RELATIONSHIP_NONE = 0; // 0x0
+    field public static final int RELATIONSHIP_ORGANIZER = 2; // 0x2
+    field public static final int RELATIONSHIP_PERFORMER = 3; // 0x3
+    field public static final int RELATIONSHIP_SPEAKER = 4; // 0x4
+    field public static final int TYPE_NONE = 0; // 0x0
+    field public static final int TYPE_OPTIONAL = 2; // 0x2
+    field public static final int TYPE_REQUIRED = 1; // 0x1
+    field public static final int TYPE_RESOURCE = 3; // 0x3
+  }
+
+  public static final class CalendarContract.CalendarAlerts implements android.provider.BaseColumns android.provider.CalendarContract.CalendarAlertsColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri CONTENT_URI_BY_INSTANCE;
+  }
+
+  protected static interface CalendarContract.CalendarAlertsColumns {
+    field public static final String ALARM_TIME = "alarmTime";
+    field public static final String BEGIN = "begin";
+    field public static final String CREATION_TIME = "creationTime";
+    field public static final String DEFAULT_SORT_ORDER = "begin ASC,title ASC";
+    field public static final String END = "end";
+    field public static final String EVENT_ID = "event_id";
+    field public static final String MINUTES = "minutes";
+    field public static final String NOTIFY_TIME = "notifyTime";
+    field public static final String RECEIVED_TIME = "receivedTime";
+    field public static final String STATE = "state";
+    field public static final int STATE_DISMISSED = 2; // 0x2
+    field public static final int STATE_FIRED = 1; // 0x1
+    field public static final int STATE_SCHEDULED = 0; // 0x0
+  }
+
+  public static final class CalendarContract.CalendarCache implements android.provider.CalendarContract.CalendarCacheColumns {
+    field public static final String KEY_TIMEZONE_INSTANCES = "timezoneInstances";
+    field public static final String KEY_TIMEZONE_INSTANCES_PREVIOUS = "timezoneInstancesPrevious";
+    field public static final String KEY_TIMEZONE_TYPE = "timezoneType";
+    field public static final String TIMEZONE_TYPE_AUTO = "auto";
+    field public static final String TIMEZONE_TYPE_HOME = "home";
+    field public static final android.net.Uri URI;
+  }
+
+  protected static interface CalendarContract.CalendarCacheColumns {
+    field public static final String KEY = "key";
+    field public static final String VALUE = "value";
+  }
+
+  protected static interface CalendarContract.CalendarColumns {
+    field public static final String ALLOWED_ATTENDEE_TYPES = "allowedAttendeeTypes";
+    field public static final String ALLOWED_AVAILABILITY = "allowedAvailability";
+    field public static final String ALLOWED_REMINDERS = "allowedReminders";
+    field public static final String CALENDAR_ACCESS_LEVEL = "calendar_access_level";
+    field public static final String CALENDAR_COLOR = "calendar_color";
+    field public static final String CALENDAR_COLOR_KEY = "calendar_color_index";
+    field public static final String CALENDAR_DISPLAY_NAME = "calendar_displayName";
+    field public static final String CALENDAR_TIME_ZONE = "calendar_timezone";
+    field public static final int CAL_ACCESS_CONTRIBUTOR = 500; // 0x1f4
+    field public static final int CAL_ACCESS_EDITOR = 600; // 0x258
+    field public static final int CAL_ACCESS_FREEBUSY = 100; // 0x64
+    field public static final int CAL_ACCESS_NONE = 0; // 0x0
+    field public static final int CAL_ACCESS_OVERRIDE = 400; // 0x190
+    field public static final int CAL_ACCESS_OWNER = 700; // 0x2bc
+    field public static final int CAL_ACCESS_READ = 200; // 0xc8
+    field public static final int CAL_ACCESS_RESPOND = 300; // 0x12c
+    field public static final int CAL_ACCESS_ROOT = 800; // 0x320
+    field public static final String CAN_MODIFY_TIME_ZONE = "canModifyTimeZone";
+    field public static final String CAN_ORGANIZER_RESPOND = "canOrganizerRespond";
+    field public static final String IS_PRIMARY = "isPrimary";
+    field public static final String MAX_REMINDERS = "maxReminders";
+    field public static final String OWNER_ACCOUNT = "ownerAccount";
+    field public static final String SYNC_EVENTS = "sync_events";
+    field public static final String VISIBLE = "visible";
+  }
+
+  public static final class CalendarContract.CalendarEntity implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.CalendarSyncColumns {
+    field public static final String CAL_SYNC1 = "cal_sync1";
+    field public static final String CAL_SYNC10 = "cal_sync10";
+    field public static final String CAL_SYNC2 = "cal_sync2";
+    field public static final String CAL_SYNC3 = "cal_sync3";
+    field public static final String CAL_SYNC4 = "cal_sync4";
+    field public static final String CAL_SYNC5 = "cal_sync5";
+    field public static final String CAL_SYNC6 = "cal_sync6";
+    field public static final String CAL_SYNC7 = "cal_sync7";
+    field public static final String CAL_SYNC8 = "cal_sync8";
+    field public static final String CAL_SYNC9 = "cal_sync9";
+  }
+
+  public static final class CalendarContract.Calendars implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+    field public static final String CALENDAR_LOCATION = "calendar_location";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "calendar_displayName";
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+    field public static final String NAME = "name";
+  }
+
+  public static final class CalendarContract.Colors implements android.provider.CalendarContract.ColorsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.ColorsColumns extends android.provider.SyncStateContract.Columns {
+    field public static final String COLOR = "color";
+    field public static final String COLOR_KEY = "color_index";
+    field public static final String COLOR_TYPE = "color_type";
+    field public static final int TYPE_CALENDAR = 0; // 0x0
+    field public static final int TYPE_EVENT = 1; // 0x1
+  }
+
+  public static final class CalendarContract.EventDays implements android.provider.CalendarContract.EventDaysColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, int, int, String[]);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.EventDaysColumns {
+    field public static final String ENDDAY = "endDay";
+    field public static final String STARTDAY = "startDay";
+  }
+
+  public static final class CalendarContract.Events implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+    field public static final android.net.Uri CONTENT_EXCEPTION_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.EventsColumns {
+    field public static final int ACCESS_CONFIDENTIAL = 1; // 0x1
+    field public static final int ACCESS_DEFAULT = 0; // 0x0
+    field public static final String ACCESS_LEVEL = "accessLevel";
+    field public static final int ACCESS_PRIVATE = 2; // 0x2
+    field public static final int ACCESS_PUBLIC = 3; // 0x3
+    field public static final String ALL_DAY = "allDay";
+    field public static final String AVAILABILITY = "availability";
+    field public static final int AVAILABILITY_BUSY = 0; // 0x0
+    field public static final int AVAILABILITY_FREE = 1; // 0x1
+    field public static final int AVAILABILITY_TENTATIVE = 2; // 0x2
+    field public static final String CALENDAR_ID = "calendar_id";
+    field public static final String CAN_INVITE_OTHERS = "canInviteOthers";
+    field public static final String CUSTOM_APP_PACKAGE = "customAppPackage";
+    field public static final String CUSTOM_APP_URI = "customAppUri";
+    field public static final String DESCRIPTION = "description";
+    field public static final String DISPLAY_COLOR = "displayColor";
+    field public static final String DTEND = "dtend";
+    field public static final String DTSTART = "dtstart";
+    field public static final String DURATION = "duration";
+    field public static final String EVENT_COLOR = "eventColor";
+    field public static final String EVENT_COLOR_KEY = "eventColor_index";
+    field public static final String EVENT_END_TIMEZONE = "eventEndTimezone";
+    field public static final String EVENT_LOCATION = "eventLocation";
+    field public static final String EVENT_TIMEZONE = "eventTimezone";
+    field public static final String EXDATE = "exdate";
+    field public static final String EXRULE = "exrule";
+    field public static final String GUESTS_CAN_INVITE_OTHERS = "guestsCanInviteOthers";
+    field public static final String GUESTS_CAN_MODIFY = "guestsCanModify";
+    field public static final String GUESTS_CAN_SEE_GUESTS = "guestsCanSeeGuests";
+    field public static final String HAS_ALARM = "hasAlarm";
+    field public static final String HAS_ATTENDEE_DATA = "hasAttendeeData";
+    field public static final String HAS_EXTENDED_PROPERTIES = "hasExtendedProperties";
+    field public static final String IS_ORGANIZER = "isOrganizer";
+    field public static final String LAST_DATE = "lastDate";
+    field public static final String LAST_SYNCED = "lastSynced";
+    field public static final String ORGANIZER = "organizer";
+    field public static final String ORIGINAL_ALL_DAY = "originalAllDay";
+    field public static final String ORIGINAL_ID = "original_id";
+    field public static final String ORIGINAL_INSTANCE_TIME = "originalInstanceTime";
+    field public static final String ORIGINAL_SYNC_ID = "original_sync_id";
+    field public static final String RDATE = "rdate";
+    field public static final String RRULE = "rrule";
+    field public static final String SELF_ATTENDEE_STATUS = "selfAttendeeStatus";
+    field public static final String STATUS = "eventStatus";
+    field public static final int STATUS_CANCELED = 2; // 0x2
+    field public static final int STATUS_CONFIRMED = 1; // 0x1
+    field public static final int STATUS_TENTATIVE = 0; // 0x0
+    field public static final String SYNC_DATA1 = "sync_data1";
+    field public static final String SYNC_DATA10 = "sync_data10";
+    field public static final String SYNC_DATA2 = "sync_data2";
+    field public static final String SYNC_DATA3 = "sync_data3";
+    field public static final String SYNC_DATA4 = "sync_data4";
+    field public static final String SYNC_DATA5 = "sync_data5";
+    field public static final String SYNC_DATA6 = "sync_data6";
+    field public static final String SYNC_DATA7 = "sync_data7";
+    field public static final String SYNC_DATA8 = "sync_data8";
+    field public static final String SYNC_DATA9 = "sync_data9";
+    field public static final String TITLE = "title";
+    field public static final String UID_2445 = "uid2445";
+  }
+
+  public static final class CalendarContract.EventsEntity implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentResolver);
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor, android.content.ContentProviderClient);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static final class CalendarContract.ExtendedProperties implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.ExtendedPropertiesColumns {
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.ExtendedPropertiesColumns {
+    field public static final String EVENT_ID = "event_id";
+    field public static final String NAME = "name";
+    field public static final String VALUE = "value";
+  }
+
+  public static final class CalendarContract.Instances implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, String[], long, long);
+    method public static android.database.Cursor query(android.content.ContentResolver, String[], long, long, String);
+    field public static final String BEGIN = "begin";
+    field public static final android.net.Uri CONTENT_BY_DAY_URI;
+    field public static final android.net.Uri CONTENT_SEARCH_BY_DAY_URI;
+    field public static final android.net.Uri CONTENT_SEARCH_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String END = "end";
+    field public static final String END_DAY = "endDay";
+    field public static final String END_MINUTE = "endMinute";
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_BY_DAY_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_SEARCH_URI;
+    field @NonNull public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+    field public static final String EVENT_ID = "event_id";
+    field public static final String START_DAY = "startDay";
+    field public static final String START_MINUTE = "startMinute";
+  }
+
+  public static final class CalendarContract.Reminders implements android.provider.BaseColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.RemindersColumns {
+    method public static android.database.Cursor query(android.content.ContentResolver, long, String[]);
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface CalendarContract.RemindersColumns {
+    field public static final String EVENT_ID = "event_id";
+    field public static final String METHOD = "method";
+    field public static final int METHOD_ALARM = 4; // 0x4
+    field public static final int METHOD_ALERT = 1; // 0x1
+    field public static final int METHOD_DEFAULT = 0; // 0x0
+    field public static final int METHOD_EMAIL = 2; // 0x2
+    field public static final int METHOD_SMS = 3; // 0x3
+    field public static final String MINUTES = "minutes";
+    field public static final int MINUTES_DEFAULT = -1; // 0xffffffff
+  }
+
+  protected static interface CalendarContract.SyncColumns extends android.provider.CalendarContract.CalendarSyncColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String CAN_PARTIALLY_UPDATE = "canPartiallyUpdate";
+    field public static final String DELETED = "deleted";
+    field public static final String DIRTY = "dirty";
+    field public static final String MUTATORS = "mutators";
+    field public static final String _SYNC_ID = "_sync_id";
+  }
+
+  public static final class CalendarContract.SyncState implements android.provider.SyncStateContract.Columns {
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public class CallLog {
+    ctor public CallLog();
+    field public static final String AUTHORITY = "call_log";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static class CallLog.Calls implements android.provider.BaseColumns {
+    ctor public CallLog.Calls();
+    method public static String getLastOutgoingCall(android.content.Context);
+    field public static final int ANSWERED_EXTERNALLY_TYPE = 7; // 0x7
+    field public static final long AUTO_MISSED_EMERGENCY_CALL = 1L; // 0x1L
+    field public static final long AUTO_MISSED_MAXIMUM_DIALING = 4L; // 0x4L
+    field public static final long AUTO_MISSED_MAXIMUM_RINGING = 2L; // 0x2L
+    field public static final int BLOCKED_TYPE = 6; // 0x6
+    field public static final String BLOCK_REASON = "block_reason";
+    field public static final int BLOCK_REASON_BLOCKED_NUMBER = 3; // 0x3
+    field public static final int BLOCK_REASON_CALL_SCREENING_SERVICE = 1; // 0x1
+    field public static final int BLOCK_REASON_DIRECT_TO_VOICEMAIL = 2; // 0x2
+    field public static final int BLOCK_REASON_NOT_BLOCKED = 0; // 0x0
+    field public static final int BLOCK_REASON_NOT_IN_CONTACTS = 7; // 0x7
+    field public static final int BLOCK_REASON_PAY_PHONE = 6; // 0x6
+    field public static final int BLOCK_REASON_RESTRICTED_NUMBER = 5; // 0x5
+    field public static final int BLOCK_REASON_UNKNOWN_NUMBER = 4; // 0x4
+    field public static final String CACHED_FORMATTED_NUMBER = "formatted_number";
+    field public static final String CACHED_LOOKUP_URI = "lookup_uri";
+    field public static final String CACHED_MATCHED_NUMBER = "matched_number";
+    field public static final String CACHED_NAME = "name";
+    field public static final String CACHED_NORMALIZED_NUMBER = "normalized_number";
+    field public static final String CACHED_NUMBER_LABEL = "numberlabel";
+    field public static final String CACHED_NUMBER_TYPE = "numbertype";
+    field public static final String CACHED_PHOTO_ID = "photo_id";
+    field public static final String CACHED_PHOTO_URI = "photo_uri";
+    field public static final String CALL_SCREENING_APP_NAME = "call_screening_app_name";
+    field public static final String CALL_SCREENING_COMPONENT_NAME = "call_screening_component_name";
+    field public static final String COMPOSER_PHOTO_URI = "composer_photo_uri";
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/calls";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/calls";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri CONTENT_URI_WITH_VOICEMAIL;
+    field public static final String COUNTRY_ISO = "countryiso";
+    field public static final String DATA_USAGE = "data_usage";
+    field public static final String DATE = "date";
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final String DURATION = "duration";
+    field public static final String EXTRA_CALL_TYPE_FILTER = "android.provider.extra.CALL_TYPE_FILTER";
+    field public static final String FEATURES = "features";
+    field public static final int FEATURES_ASSISTED_DIALING_USED = 16; // 0x10
+    field public static final int FEATURES_HD_CALL = 4; // 0x4
+    field public static final int FEATURES_PULLED_EXTERNALLY = 2; // 0x2
+    field public static final int FEATURES_RTT = 32; // 0x20
+    field public static final int FEATURES_VIDEO = 1; // 0x1
+    field public static final int FEATURES_VOLTE = 64; // 0x40
+    field public static final int FEATURES_WIFI = 8; // 0x8
+    field public static final String GEOCODED_LOCATION = "geocoded_location";
+    field public static final int INCOMING_TYPE = 1; // 0x1
+    field public static final String IS_READ = "is_read";
+    field public static final String LAST_MODIFIED = "last_modified";
+    field public static final String LIMIT_PARAM_KEY = "limit";
+    field public static final String LOCATION = "location";
+    field public static final String MISSED_REASON = "missed_reason";
+    field public static final long MISSED_REASON_NOT_MISSED = 0L; // 0x0L
+    field public static final int MISSED_TYPE = 3; // 0x3
+    field public static final String NEW = "new";
+    field public static final String NUMBER = "number";
+    field public static final String NUMBER_PRESENTATION = "presentation";
+    field public static final String OFFSET_PARAM_KEY = "offset";
+    field public static final int OUTGOING_TYPE = 2; // 0x2
+    field public static final String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name";
+    field public static final String PHONE_ACCOUNT_ID = "subscription_id";
+    field public static final String POST_DIAL_DIGITS = "post_dial_digits";
+    field public static final int PRESENTATION_ALLOWED = 1; // 0x1
+    field public static final int PRESENTATION_PAYPHONE = 4; // 0x4
+    field public static final int PRESENTATION_RESTRICTED = 2; // 0x2
+    field public static final int PRESENTATION_UNKNOWN = 3; // 0x3
+    field public static final String PRIORITY = "priority";
+    field public static final int PRIORITY_NORMAL = 0; // 0x0
+    field public static final int PRIORITY_URGENT = 1; // 0x1
+    field public static final int REJECTED_TYPE = 5; // 0x5
+    field public static final String SUBJECT = "subject";
+    field public static final String TRANSCRIPTION = "transcription";
+    field public static final String TYPE = "type";
+    field public static final long USER_MISSED_CALL_FILTERS_TIMEOUT = 4194304L; // 0x400000L
+    field public static final long USER_MISSED_CALL_SCREENING_SERVICE_SILENCED = 2097152L; // 0x200000L
+    field public static final long USER_MISSED_DND_MODE = 262144L; // 0x40000L
+    field public static final long USER_MISSED_LOW_RING_VOLUME = 524288L; // 0x80000L
+    field public static final long USER_MISSED_NO_ANSWER = 65536L; // 0x10000L
+    field public static final long USER_MISSED_NO_VIBRATE = 1048576L; // 0x100000L
+    field public static final long USER_MISSED_SHORT_RING = 131072L; // 0x20000L
+    field public static final String VIA_NUMBER = "via_number";
+    field public static final int VOICEMAIL_TYPE = 4; // 0x4
+    field public static final String VOICEMAIL_URI = "voicemail_uri";
+  }
+
+  public static class CallLog.Locations implements android.provider.BaseColumns {
+    field public static final String AUTHORITY = "call_composer_locations";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/call_composer_location";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/call_composer_location";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String LATITUDE = "latitude";
+    field public static final String LONGITUDE = "longitude";
+  }
+
+  @Deprecated public class Contacts {
+    field @Deprecated public static final String AUTHORITY = "contacts";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final int KIND_EMAIL = 1; // 0x1
+    field @Deprecated public static final int KIND_IM = 3; // 0x3
+    field @Deprecated public static final int KIND_ORGANIZATION = 4; // 0x4
+    field @Deprecated public static final int KIND_PHONE = 5; // 0x5
+    field @Deprecated public static final int KIND_POSTAL = 2; // 0x2
+  }
+
+  @Deprecated public static final class Contacts.ContactMethods implements android.provider.BaseColumns android.provider.Contacts.ContactMethodsColumns android.provider.Contacts.PeopleColumns {
+    method @Deprecated public void addPostalLocation(android.content.Context, long, double, double);
+    method @Deprecated public static Object decodeImProtocol(String);
+    method @Deprecated public static String encodeCustomImProtocol(String);
+    method @Deprecated public static String encodePredefinedImProtocol(int);
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, int, CharSequence);
+    field @Deprecated public static final String CONTENT_EMAIL_ITEM_TYPE = "vnd.android.cursor.item/email";
+    field @Deprecated public static final String CONTENT_EMAIL_TYPE = "vnd.android.cursor.dir/email";
+    field @Deprecated public static final android.net.Uri CONTENT_EMAIL_URI;
+    field @Deprecated public static final String CONTENT_IM_ITEM_TYPE = "vnd.android.cursor.item/jabber-im";
+    field @Deprecated public static final String CONTENT_POSTAL_ITEM_TYPE = "vnd.android.cursor.item/postal-address";
+    field @Deprecated public static final String CONTENT_POSTAL_TYPE = "vnd.android.cursor.dir/postal-address";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact-methods";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final String POSTAL_LOCATION_LATITUDE = "data";
+    field @Deprecated public static final String POSTAL_LOCATION_LONGITUDE = "aux_data";
+    field @Deprecated public static final int PROTOCOL_AIM = 0; // 0x0
+    field @Deprecated public static final int PROTOCOL_GOOGLE_TALK = 5; // 0x5
+    field @Deprecated public static final int PROTOCOL_ICQ = 6; // 0x6
+    field @Deprecated public static final int PROTOCOL_JABBER = 7; // 0x7
+    field @Deprecated public static final int PROTOCOL_MSN = 1; // 0x1
+    field @Deprecated public static final int PROTOCOL_QQ = 4; // 0x4
+    field @Deprecated public static final int PROTOCOL_SKYPE = 3; // 0x3
+    field @Deprecated public static final int PROTOCOL_YAHOO = 2; // 0x2
+  }
+
+  @Deprecated public static interface Contacts.ContactMethodsColumns {
+    field @Deprecated public static final String AUX_DATA = "aux_data";
+    field @Deprecated public static final String DATA = "data";
+    field @Deprecated public static final String ISPRIMARY = "isprimary";
+    field @Deprecated public static final String KIND = "kind";
+    field @Deprecated public static final String LABEL = "label";
+    field @Deprecated public static final String TYPE = "type";
+    field @Deprecated public static final int TYPE_CUSTOM = 0; // 0x0
+    field @Deprecated public static final int TYPE_HOME = 1; // 0x1
+    field @Deprecated public static final int TYPE_OTHER = 3; // 0x3
+    field @Deprecated public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  @Deprecated public static final class Contacts.Extensions implements android.provider.BaseColumns android.provider.Contacts.ExtensionsColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_extensions";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_extensions";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "person, name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+  }
+
+  @Deprecated public static interface Contacts.ExtensionsColumns {
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String VALUE = "value";
+  }
+
+  @Deprecated public static final class Contacts.GroupMembership implements android.provider.BaseColumns android.provider.Contacts.GroupsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "groupmembership";
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroupmembership";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroupmembership";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "group_id ASC";
+    field @Deprecated public static final String GROUP_ID = "group_id";
+    field @Deprecated public static final String GROUP_SYNC_ACCOUNT = "group_sync_account";
+    field @Deprecated public static final String GROUP_SYNC_ACCOUNT_TYPE = "group_sync_account_type";
+    field @Deprecated public static final String GROUP_SYNC_ID = "group_sync_id";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final android.net.Uri RAW_CONTENT_URI;
+  }
+
+  @Deprecated public static final class Contacts.Groups implements android.provider.BaseColumns android.provider.Contacts.GroupsColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contactsgroup";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contactsgroup";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final android.net.Uri DELETED_CONTENT_URI;
+    field @Deprecated public static final String GROUP_ANDROID_STARRED = "Starred in Android";
+    field @Deprecated public static final String GROUP_MY_CONTACTS = "Contacts";
+  }
+
+  @Deprecated public static interface Contacts.GroupsColumns {
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String NOTES = "notes";
+    field @Deprecated public static final String SHOULD_SYNC = "should_sync";
+    field @Deprecated public static final String SYSTEM_ID = "system_id";
+  }
+
+  @Deprecated public static final class Contacts.Intents {
+    ctor @Deprecated public Contacts.Intents();
+    field @Deprecated public static final String ATTACH_IMAGE = "com.android.contacts.action.ATTACH_IMAGE";
+    field @Deprecated public static final String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION";
+    field @Deprecated public static final String EXTRA_FORCE_CREATE = "com.android.contacts.action.FORCE_CREATE";
+    field @Deprecated public static final String SEARCH_SUGGESTION_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED";
+    field @Deprecated public static final String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED";
+    field @Deprecated public static final String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED";
+    field @Deprecated public static final String SHOW_OR_CREATE_CONTACT = "com.android.contacts.action.SHOW_OR_CREATE_CONTACT";
+  }
+
+  @Deprecated public static final class Contacts.Intents.Insert {
+    ctor @Deprecated public Contacts.Intents.Insert();
+    field @Deprecated public static final String ACTION = "android.intent.action.INSERT";
+    field @Deprecated public static final String COMPANY = "company";
+    field @Deprecated public static final String EMAIL = "email";
+    field @Deprecated public static final String EMAIL_ISPRIMARY = "email_isprimary";
+    field @Deprecated public static final String EMAIL_TYPE = "email_type";
+    field @Deprecated public static final String FULL_MODE = "full_mode";
+    field @Deprecated public static final String IM_HANDLE = "im_handle";
+    field @Deprecated public static final String IM_ISPRIMARY = "im_isprimary";
+    field @Deprecated public static final String IM_PROTOCOL = "im_protocol";
+    field @Deprecated public static final String JOB_TITLE = "job_title";
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String NOTES = "notes";
+    field @Deprecated public static final String PHONE = "phone";
+    field @Deprecated public static final String PHONETIC_NAME = "phonetic_name";
+    field @Deprecated public static final String PHONE_ISPRIMARY = "phone_isprimary";
+    field @Deprecated public static final String PHONE_TYPE = "phone_type";
+    field @Deprecated public static final String POSTAL = "postal";
+    field @Deprecated public static final String POSTAL_ISPRIMARY = "postal_isprimary";
+    field @Deprecated public static final String POSTAL_TYPE = "postal_type";
+    field @Deprecated public static final String SECONDARY_EMAIL = "secondary_email";
+    field @Deprecated public static final String SECONDARY_EMAIL_TYPE = "secondary_email_type";
+    field @Deprecated public static final String SECONDARY_PHONE = "secondary_phone";
+    field @Deprecated public static final String SECONDARY_PHONE_TYPE = "secondary_phone_type";
+    field @Deprecated public static final String TERTIARY_EMAIL = "tertiary_email";
+    field @Deprecated public static final String TERTIARY_EMAIL_TYPE = "tertiary_email_type";
+    field @Deprecated public static final String TERTIARY_PHONE = "tertiary_phone";
+    field @Deprecated public static final String TERTIARY_PHONE_TYPE = "tertiary_phone_type";
+  }
+
+  @Deprecated public static final class Contacts.Intents.UI {
+    ctor @Deprecated public Contacts.Intents.UI();
+    field @Deprecated public static final String FILTER_CONTACTS_ACTION = "com.android.contacts.action.FILTER_CONTACTS";
+    field @Deprecated public static final String FILTER_TEXT_EXTRA_KEY = "com.android.contacts.extra.FILTER_TEXT";
+    field @Deprecated public static final String GROUP_NAME_EXTRA_KEY = "com.android.contacts.extra.GROUP";
+    field @Deprecated public static final String LIST_ALL_CONTACTS_ACTION = "com.android.contacts.action.LIST_ALL_CONTACTS";
+    field @Deprecated public static final String LIST_CONTACTS_WITH_PHONES_ACTION = "com.android.contacts.action.LIST_CONTACTS_WITH_PHONES";
+    field @Deprecated public static final String LIST_DEFAULT = "com.android.contacts.action.LIST_DEFAULT";
+    field @Deprecated public static final String LIST_FREQUENT_ACTION = "com.android.contacts.action.LIST_FREQUENT";
+    field @Deprecated public static final String LIST_GROUP_ACTION = "com.android.contacts.action.LIST_GROUP";
+    field @Deprecated public static final String LIST_STARRED_ACTION = "com.android.contacts.action.LIST_STARRED";
+    field @Deprecated public static final String LIST_STREQUENT_ACTION = "com.android.contacts.action.LIST_STREQUENT";
+    field @Deprecated public static final String TITLE_EXTRA_KEY = "com.android.contacts.extra.TITLE_EXTRA";
+  }
+
+  @Deprecated public static interface Contacts.OrganizationColumns {
+    field @Deprecated public static final String COMPANY = "company";
+    field @Deprecated public static final String ISPRIMARY = "isprimary";
+    field @Deprecated public static final String LABEL = "label";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final String TITLE = "title";
+    field @Deprecated public static final String TYPE = "type";
+    field @Deprecated public static final int TYPE_CUSTOM = 0; // 0x0
+    field @Deprecated public static final int TYPE_OTHER = 2; // 0x2
+    field @Deprecated public static final int TYPE_WORK = 1; // 0x1
+  }
+
+  @Deprecated public static final class Contacts.Organizations implements android.provider.BaseColumns android.provider.Contacts.OrganizationColumns {
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, CharSequence);
+    field @Deprecated public static final String CONTENT_DIRECTORY = "organizations";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "company, title, isprimary ASC";
+  }
+
+  @Deprecated public static final class Contacts.People implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns android.provider.Contacts.PresenceColumns {
+    method @Deprecated public static android.net.Uri addToGroup(android.content.ContentResolver, long, String);
+    method @Deprecated public static android.net.Uri addToGroup(android.content.ContentResolver, long, long);
+    method @Deprecated public static android.net.Uri addToMyContactsGroup(android.content.ContentResolver, long);
+    method @Deprecated public static android.net.Uri createPersonInMyContactsGroup(android.content.ContentResolver, android.content.ContentValues);
+    method @Deprecated public static android.graphics.Bitmap loadContactPhoto(android.content.Context, android.net.Uri, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static void markAsContacted(android.content.ContentResolver, long);
+    method @Deprecated public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri);
+    method @Deprecated public static android.database.Cursor queryGroups(android.content.ContentResolver, long);
+    method @Deprecated public static void setPhotoData(android.content.ContentResolver, android.net.Uri, byte[]);
+    field @Deprecated public static final android.net.Uri CONTENT_FILTER_URI;
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/person";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/person";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final android.net.Uri DELETED_CONTENT_URI;
+    field @Deprecated public static final String PRIMARY_EMAIL_ID = "primary_email";
+    field @Deprecated public static final String PRIMARY_ORGANIZATION_ID = "primary_organization";
+    field @Deprecated public static final String PRIMARY_PHONE_ID = "primary_phone";
+  }
+
+  @Deprecated public static final class Contacts.People.ContactMethods implements android.provider.BaseColumns android.provider.Contacts.ContactMethodsColumns android.provider.Contacts.PeopleColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "contact_methods";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "data ASC";
+  }
+
+  @Deprecated public static class Contacts.People.Extensions implements android.provider.BaseColumns android.provider.Contacts.ExtensionsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "extensions";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+  }
+
+  @Deprecated public static final class Contacts.People.Phones implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "phones";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "number ASC";
+  }
+
+  @Deprecated public static interface Contacts.PeopleColumns {
+    field @Deprecated public static final String CUSTOM_RINGTONE = "custom_ringtone";
+    field @Deprecated public static final String DISPLAY_NAME = "display_name";
+    field @Deprecated public static final String LAST_TIME_CONTACTED = "last_time_contacted";
+    field @Deprecated public static final String NAME = "name";
+    field @Deprecated public static final String NOTES = "notes";
+    field @Deprecated public static final String PHONETIC_NAME = "phonetic_name";
+    field @Deprecated public static final String PHOTO_VERSION = "photo_version";
+    field @Deprecated public static final String SEND_TO_VOICEMAIL = "send_to_voicemail";
+    field @Deprecated public static final String STARRED = "starred";
+    field @Deprecated public static final String TIMES_CONTACTED = "times_contacted";
+  }
+
+  @Deprecated public static final class Contacts.Phones implements android.provider.BaseColumns android.provider.Contacts.PeopleColumns android.provider.Contacts.PhonesColumns {
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, CharSequence, CharSequence[]);
+    method @Deprecated public static CharSequence getDisplayLabel(android.content.Context, int, CharSequence);
+    field @Deprecated public static final android.net.Uri CONTENT_FILTER_URL;
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String PERSON_ID = "person";
+  }
+
+  @Deprecated public static interface Contacts.PhonesColumns {
+    field @Deprecated public static final String ISPRIMARY = "isprimary";
+    field @Deprecated public static final String LABEL = "label";
+    field @Deprecated public static final String NUMBER = "number";
+    field @Deprecated public static final String NUMBER_KEY = "number_key";
+    field @Deprecated public static final String TYPE = "type";
+    field @Deprecated public static final int TYPE_CUSTOM = 0; // 0x0
+    field @Deprecated public static final int TYPE_FAX_HOME = 5; // 0x5
+    field @Deprecated public static final int TYPE_FAX_WORK = 4; // 0x4
+    field @Deprecated public static final int TYPE_HOME = 1; // 0x1
+    field @Deprecated public static final int TYPE_MOBILE = 2; // 0x2
+    field @Deprecated public static final int TYPE_OTHER = 7; // 0x7
+    field @Deprecated public static final int TYPE_PAGER = 6; // 0x6
+    field @Deprecated public static final int TYPE_WORK = 3; // 0x3
+  }
+
+  @Deprecated public static final class Contacts.Photos implements android.provider.BaseColumns android.provider.Contacts.PhotosColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "photo";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "person ASC";
+  }
+
+  @Deprecated public static interface Contacts.PhotosColumns {
+    field @Deprecated public static final String DATA = "data";
+    field @Deprecated public static final String DOWNLOAD_REQUIRED = "download_required";
+    field @Deprecated public static final String EXISTS_ON_SERVER = "exists_on_server";
+    field @Deprecated public static final String LOCAL_VERSION = "local_version";
+    field @Deprecated public static final String PERSON_ID = "person";
+    field @Deprecated public static final String SYNC_ERROR = "sync_error";
+  }
+
+  @Deprecated public static interface Contacts.PresenceColumns {
+    field @Deprecated public static final int AVAILABLE = 5; // 0x5
+    field @Deprecated public static final int AWAY = 2; // 0x2
+    field @Deprecated public static final int DO_NOT_DISTURB = 4; // 0x4
+    field @Deprecated public static final int IDLE = 3; // 0x3
+    field @Deprecated public static final String IM_ACCOUNT = "im_account";
+    field @Deprecated public static final String IM_HANDLE = "im_handle";
+    field @Deprecated public static final String IM_PROTOCOL = "im_protocol";
+    field @Deprecated public static final int INVISIBLE = 1; // 0x1
+    field @Deprecated public static final int OFFLINE = 0; // 0x0
+    field @Deprecated public static final String PRESENCE_CUSTOM_STATUS = "status";
+    field @Deprecated public static final String PRESENCE_STATUS = "mode";
+    field @Deprecated public static final String PRIORITY = "priority";
+  }
+
+  @Deprecated public static final class Contacts.Settings implements android.provider.BaseColumns android.provider.Contacts.SettingsColumns {
+    method @Deprecated public static String getSetting(android.content.ContentResolver, String, String);
+    method @Deprecated public static void setSetting(android.content.ContentResolver, String, String, String);
+    field @Deprecated public static final String CONTENT_DIRECTORY = "settings";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "key ASC";
+    field @Deprecated public static final String SYNC_EVERYTHING = "syncEverything";
+  }
+
+  @Deprecated public static interface Contacts.SettingsColumns {
+    field @Deprecated public static final String KEY = "key";
+    field @Deprecated public static final String VALUE = "value";
+    field @Deprecated public static final String _SYNC_ACCOUNT = "_sync_account";
+    field @Deprecated public static final String _SYNC_ACCOUNT_TYPE = "_sync_account_type";
+  }
+
+  public final class ContactsContract {
+    ctor public ContactsContract();
+    method public static boolean isProfileId(long);
+    field public static final String AUTHORITY = "com.android.contacts";
+    field public static final android.net.Uri AUTHORITY_URI;
+    field public static final String CALLER_IS_SYNCADAPTER = "caller_is_syncadapter";
+    field public static final String DEFERRED_SNIPPETING = "deferred_snippeting";
+    field public static final String DEFERRED_SNIPPETING_QUERY = "deferred_snippeting_query";
+    field public static final String DIRECTORY_PARAM_KEY = "directory";
+    field public static final String LIMIT_PARAM_KEY = "limit";
+    field public static final String PRIMARY_ACCOUNT_NAME = "name_for_primary_account";
+    field public static final String PRIMARY_ACCOUNT_TYPE = "type_for_primary_account";
+    field public static final String REMOVE_DUPLICATE_ENTRIES = "remove_duplicate_entries";
+    field public static final String STREQUENT_PHONE_ONLY = "strequent_phone_only";
+  }
+
+  public static final class ContactsContract.AggregationExceptions implements android.provider.BaseColumns {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/aggregation_exception";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/aggregation_exception";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String RAW_CONTACT_ID1 = "raw_contact_id1";
+    field public static final String RAW_CONTACT_ID2 = "raw_contact_id2";
+    field public static final String TYPE = "type";
+    field public static final int TYPE_AUTOMATIC = 0; // 0x0
+    field public static final int TYPE_KEEP_SEPARATE = 2; // 0x2
+    field public static final int TYPE_KEEP_TOGETHER = 1; // 0x1
+  }
+
+  protected static interface ContactsContract.BaseSyncColumns {
+    field public static final String SYNC1 = "sync1";
+    field public static final String SYNC2 = "sync2";
+    field public static final String SYNC3 = "sync3";
+    field public static final String SYNC4 = "sync4";
+  }
+
+  public static final class ContactsContract.CommonDataKinds {
+  }
+
+  public static interface ContactsContract.CommonDataKinds.BaseTypes {
+    field public static final int TYPE_CUSTOM = 0; // 0x0
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Callable implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    ctor public ContactsContract.CommonDataKinds.Callable();
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+  }
+
+  protected static interface ContactsContract.CommonDataKinds.CommonColumns extends android.provider.ContactsContract.CommonDataKinds.BaseTypes {
+    field public static final String DATA = "data1";
+    field public static final String LABEL = "data3";
+    field public static final String TYPE = "data2";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Contactables implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    ctor public ContactsContract.CommonDataKinds.Contactables();
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String VISIBLE_CONTACTS_ONLY = "visible_contacts_only";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Email implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String ADDRESS = "data1";
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/email_v2";
+    field public static final android.net.Uri CONTENT_LOOKUP_URI;
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DISPLAY_NAME = "data4";
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_LOOKUP_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_MOBILE = 4; // 0x4
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Event implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeResource(Integer);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_event";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String START_DATE = "data1";
+    field public static final int TYPE_ANNIVERSARY = 1; // 0x1
+    field public static final int TYPE_BIRTHDAY = 3; // 0x3
+    field public static final int TYPE_OTHER = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.GroupMembership implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/group_membership";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String GROUP_ROW_ID = "data1";
+    field public static final String GROUP_SOURCE_ID = "group_sourceid";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Identity implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/identity";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String IDENTITY = "data1";
+    field public static final String NAMESPACE = "data2";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Im implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getProtocolLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getProtocolLabelResource(int);
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/im";
+    field public static final String CUSTOM_PROTOCOL = "data6";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String PROTOCOL = "data5";
+    field @Deprecated public static final int PROTOCOL_AIM = 0; // 0x0
+    field public static final int PROTOCOL_CUSTOM = -1; // 0xffffffff
+    field @Deprecated public static final int PROTOCOL_GOOGLE_TALK = 5; // 0x5
+    field @Deprecated public static final int PROTOCOL_ICQ = 6; // 0x6
+    field @Deprecated public static final int PROTOCOL_JABBER = 7; // 0x7
+    field @Deprecated public static final int PROTOCOL_MSN = 1; // 0x1
+    field @Deprecated public static final int PROTOCOL_NETMEETING = 8; // 0x8
+    field @Deprecated public static final int PROTOCOL_QQ = 4; // 0x4
+    field @Deprecated public static final int PROTOCOL_SKYPE = 3; // 0x3
+    field @Deprecated public static final int PROTOCOL_YAHOO = 2; // 0x2
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Nickname implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/nickname";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NAME = "data1";
+    field public static final int TYPE_DEFAULT = 1; // 0x1
+    field public static final int TYPE_INITIALS = 5; // 0x5
+    field public static final int TYPE_MAIDEN_NAME = 3; // 0x3
+    field @Deprecated public static final int TYPE_MAINDEN_NAME = 3; // 0x3
+    field public static final int TYPE_OTHER_NAME = 2; // 0x2
+    field public static final int TYPE_SHORT_NAME = 4; // 0x4
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Note implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/note";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NOTE = "data1";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Organization implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String COMPANY = "data1";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/organization";
+    field public static final String DEPARTMENT = "data5";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String JOB_DESCRIPTION = "data6";
+    field public static final String OFFICE_LOCATION = "data9";
+    field public static final String PHONETIC_NAME = "data8";
+    field public static final String PHONETIC_NAME_STYLE = "data10";
+    field public static final String SYMBOL = "data7";
+    field public static final String TITLE = "data4";
+    field public static final int TYPE_OTHER = 2; // 0x2
+    field public static final int TYPE_WORK = 1; // 0x1
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Phone implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone_v2";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone_v2";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NORMALIZED_NUMBER = "data4";
+    field public static final String NUMBER = "data1";
+    field public static final String SEARCH_DISPLAY_NAME_KEY = "search_display_name";
+    field public static final String SEARCH_PHONE_NUMBER_KEY = "search_phone_number";
+    field public static final int TYPE_ASSISTANT = 19; // 0x13
+    field public static final int TYPE_CALLBACK = 8; // 0x8
+    field public static final int TYPE_CAR = 9; // 0x9
+    field public static final int TYPE_COMPANY_MAIN = 10; // 0xa
+    field public static final int TYPE_FAX_HOME = 5; // 0x5
+    field public static final int TYPE_FAX_WORK = 4; // 0x4
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_ISDN = 11; // 0xb
+    field public static final int TYPE_MAIN = 12; // 0xc
+    field public static final int TYPE_MMS = 20; // 0x14
+    field public static final int TYPE_MOBILE = 2; // 0x2
+    field public static final int TYPE_OTHER = 7; // 0x7
+    field public static final int TYPE_OTHER_FAX = 13; // 0xd
+    field public static final int TYPE_PAGER = 6; // 0x6
+    field public static final int TYPE_RADIO = 14; // 0xe
+    field public static final int TYPE_TELEX = 15; // 0xf
+    field public static final int TYPE_TTY_TDD = 16; // 0x10
+    field public static final int TYPE_WORK = 3; // 0x3
+    field public static final int TYPE_WORK_MOBILE = 17; // 0x11
+    field public static final int TYPE_WORK_PAGER = 18; // 0x12
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Photo implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/photo";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String PHOTO = "data15";
+    field public static final String PHOTO_FILE_ID = "data14";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Relation implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/relation";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String NAME = "data1";
+    field public static final int TYPE_ASSISTANT = 1; // 0x1
+    field public static final int TYPE_BROTHER = 2; // 0x2
+    field public static final int TYPE_CHILD = 3; // 0x3
+    field public static final int TYPE_DOMESTIC_PARTNER = 4; // 0x4
+    field public static final int TYPE_FATHER = 5; // 0x5
+    field public static final int TYPE_FRIEND = 6; // 0x6
+    field public static final int TYPE_MANAGER = 7; // 0x7
+    field public static final int TYPE_MOTHER = 8; // 0x8
+    field public static final int TYPE_PARENT = 9; // 0x9
+    field public static final int TYPE_PARTNER = 10; // 0xa
+    field public static final int TYPE_REFERRED_BY = 11; // 0xb
+    field public static final int TYPE_RELATIVE = 12; // 0xc
+    field public static final int TYPE_SISTER = 13; // 0xd
+    field public static final int TYPE_SPOUSE = 14; // 0xe
+  }
+
+  public static final class ContactsContract.CommonDataKinds.SipAddress implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sip_address";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String SIP_ADDRESS = "data1";
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.StructuredName implements android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/name";
+    field public static final String DISPLAY_NAME = "data1";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String FAMILY_NAME = "data3";
+    field public static final String FULL_NAME_STYLE = "data10";
+    field public static final String GIVEN_NAME = "data2";
+    field public static final String MIDDLE_NAME = "data5";
+    field public static final String PHONETIC_FAMILY_NAME = "data9";
+    field public static final String PHONETIC_GIVEN_NAME = "data7";
+    field public static final String PHONETIC_MIDDLE_NAME = "data8";
+    field public static final String PHONETIC_NAME_STYLE = "data11";
+    field public static final String PREFIX = "data4";
+    field public static final String SUFFIX = "data6";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.StructuredPostal implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static CharSequence getTypeLabel(android.content.res.Resources, int, CharSequence);
+    method public static int getTypeLabelResource(int);
+    field public static final String CITY = "data7";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/postal-address_v2";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/postal-address_v2";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String COUNTRY = "data10";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String FORMATTED_ADDRESS = "data1";
+    field public static final String NEIGHBORHOOD = "data6";
+    field public static final String POBOX = "data5";
+    field public static final String POSTCODE = "data9";
+    field public static final String REGION = "data8";
+    field public static final String STREET = "data4";
+    field public static final int TYPE_HOME = 1; // 0x1
+    field public static final int TYPE_OTHER = 3; // 0x3
+    field public static final int TYPE_WORK = 2; // 0x2
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Website implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/website";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final int TYPE_BLOG = 2; // 0x2
+    field public static final int TYPE_FTP = 6; // 0x6
+    field public static final int TYPE_HOME = 4; // 0x4
+    field public static final int TYPE_HOMEPAGE = 1; // 0x1
+    field public static final int TYPE_OTHER = 7; // 0x7
+    field public static final int TYPE_PROFILE = 3; // 0x3
+    field public static final int TYPE_WORK = 5; // 0x5
+    field public static final String URL = "data1";
+  }
+
+  protected static interface ContactsContract.ContactNameColumns {
+    field public static final String DISPLAY_NAME_ALTERNATIVE = "display_name_alt";
+    field public static final String DISPLAY_NAME_PRIMARY = "display_name";
+    field public static final String DISPLAY_NAME_SOURCE = "display_name_source";
+    field public static final String PHONETIC_NAME = "phonetic_name";
+    field public static final String PHONETIC_NAME_STYLE = "phonetic_name_style";
+    field public static final String SORT_KEY_ALTERNATIVE = "sort_key_alt";
+    field public static final String SORT_KEY_PRIMARY = "sort_key";
+  }
+
+  protected static interface ContactsContract.ContactOptionsColumns {
+    field public static final String CUSTOM_RINGTONE = "custom_ringtone";
+    field @Deprecated public static final String LAST_TIME_CONTACTED = "last_time_contacted";
+    field public static final String PINNED = "pinned";
+    field public static final String SEND_TO_VOICEMAIL = "send_to_voicemail";
+    field public static final String STARRED = "starred";
+    field @Deprecated public static final String TIMES_CONTACTED = "times_contacted";
+  }
+
+  protected static interface ContactsContract.ContactStatusColumns {
+    field public static final String CONTACT_CHAT_CAPABILITY = "contact_chat_capability";
+    field public static final String CONTACT_PRESENCE = "contact_presence";
+    field public static final String CONTACT_STATUS = "contact_status";
+    field public static final String CONTACT_STATUS_ICON = "contact_status_icon";
+    field public static final String CONTACT_STATUS_LABEL = "contact_status_label";
+    field public static final String CONTACT_STATUS_RES_PACKAGE = "contact_status_res_package";
+    field public static final String CONTACT_STATUS_TIMESTAMP = "contact_status_ts";
+  }
+
+  public static class ContactsContract.Contacts implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns {
+    method public static android.net.Uri getLookupUri(android.content.ContentResolver, android.net.Uri);
+    method public static android.net.Uri getLookupUri(long, String);
+    method public static boolean isEnterpriseContactId(long);
+    method public static android.net.Uri lookupContact(android.content.ContentResolver, android.net.Uri);
+    method @Deprecated public static void markAsContacted(android.content.ContentResolver, long);
+    method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri, boolean);
+    method public static java.io.InputStream openContactPhotoInputStream(android.content.ContentResolver, android.net.Uri);
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field @Deprecated public static final android.net.Uri CONTENT_FREQUENT_URI;
+    field public static final android.net.Uri CONTENT_GROUP_URI;
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact";
+    field public static final android.net.Uri CONTENT_LOOKUP_URI;
+    field public static final android.net.Uri CONTENT_MULTI_VCARD_URI;
+    field public static final android.net.Uri CONTENT_STREQUENT_FILTER_URI;
+    field public static final android.net.Uri CONTENT_STREQUENT_URI;
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String CONTENT_VCARD_TYPE = "text/x-vcard";
+    field public static final android.net.Uri CONTENT_VCARD_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String QUERY_PARAMETER_VCARD_NO_PHOTO = "no_photo";
+  }
+
+  public static final class ContactsContract.Contacts.AggregationSuggestions implements android.provider.BaseColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns {
+    field public static final String CONTENT_DIRECTORY = "suggestions";
+  }
+
+  public static final class ContactsContract.Contacts.AggregationSuggestions.Builder {
+    ctor public ContactsContract.Contacts.AggregationSuggestions.Builder();
+    method public android.provider.ContactsContract.Contacts.AggregationSuggestions.Builder addNameParameter(String);
+    method public android.net.Uri build();
+    method public android.provider.ContactsContract.Contacts.AggregationSuggestions.Builder setContactId(long);
+    method public android.provider.ContactsContract.Contacts.AggregationSuggestions.Builder setLimit(int);
+  }
+
+  public static final class ContactsContract.Contacts.Data implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns {
+    field public static final String CONTENT_DIRECTORY = "data";
+  }
+
+  public static final class ContactsContract.Contacts.Entity implements android.provider.BaseColumns android.provider.ContactsContract.BaseSyncColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.DataUsageStatColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.StatusColumns android.provider.ContactsContract.SyncColumns {
+    field public static final String CONTENT_DIRECTORY = "entities";
+    field public static final String DATA_ID = "data_id";
+    field public static final String RAW_CONTACT_ID = "raw_contact_id";
+  }
+
+  public static final class ContactsContract.Contacts.Photo implements android.provider.BaseColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final String CONTENT_DIRECTORY = "photo";
+    field public static final String DISPLAY_PHOTO = "display_photo";
+    field public static final String PHOTO = "data15";
+    field public static final String PHOTO_FILE_ID = "data14";
+  }
+
+  protected static interface ContactsContract.ContactsColumns {
+    field public static final String CONTACT_LAST_UPDATED_TIMESTAMP = "contact_last_updated_timestamp";
+    field public static final String DISPLAY_NAME = "display_name";
+    field public static final String HAS_PHONE_NUMBER = "has_phone_number";
+    field public static final String IN_DEFAULT_DIRECTORY = "in_default_directory";
+    field public static final String IN_VISIBLE_GROUP = "in_visible_group";
+    field public static final String IS_USER_PROFILE = "is_user_profile";
+    field public static final String LOOKUP_KEY = "lookup";
+    field public static final String NAME_RAW_CONTACT_ID = "name_raw_contact_id";
+    field public static final String PHOTO_FILE_ID = "photo_file_id";
+    field public static final String PHOTO_ID = "photo_id";
+    field public static final String PHOTO_THUMBNAIL_URI = "photo_thumb_uri";
+    field public static final String PHOTO_URI = "photo_uri";
+  }
+
+  public static final class ContactsContract.Data implements android.provider.ContactsContract.DataColumnsWithJoins {
+    method public static android.net.Uri getContactLookupUri(android.content.ContentResolver, android.net.Uri);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/data";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
+    field public static final String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
+    field public static final String VISIBLE_CONTACTS_ONLY = "visible_contacts_only";
+  }
+
+  protected static interface ContactsContract.DataColumns {
+    field @Deprecated public static final String CARRIER_PRESENCE = "carrier_presence";
+    field @Deprecated public static final int CARRIER_PRESENCE_VT_CAPABLE = 1; // 0x1
+    field public static final String DATA1 = "data1";
+    field public static final String DATA10 = "data10";
+    field public static final String DATA11 = "data11";
+    field public static final String DATA12 = "data12";
+    field public static final String DATA13 = "data13";
+    field public static final String DATA14 = "data14";
+    field public static final String DATA15 = "data15";
+    field public static final String DATA2 = "data2";
+    field public static final String DATA3 = "data3";
+    field public static final String DATA4 = "data4";
+    field public static final String DATA5 = "data5";
+    field public static final String DATA6 = "data6";
+    field public static final String DATA7 = "data7";
+    field public static final String DATA8 = "data8";
+    field public static final String DATA9 = "data9";
+    field public static final String DATA_VERSION = "data_version";
+    field public static final String IS_PRIMARY = "is_primary";
+    field public static final String IS_READ_ONLY = "is_read_only";
+    field public static final String IS_SUPER_PRIMARY = "is_super_primary";
+    field public static final String MIMETYPE = "mimetype";
+    field public static final String PREFERRED_PHONE_ACCOUNT_COMPONENT_NAME = "preferred_phone_account_component_name";
+    field public static final String PREFERRED_PHONE_ACCOUNT_ID = "preferred_phone_account_id";
+    field public static final String RAW_CONTACT_ID = "raw_contact_id";
+    field public static final String RES_PACKAGE = "res_package";
+    field public static final String SYNC1 = "data_sync1";
+    field public static final String SYNC2 = "data_sync2";
+    field public static final String SYNC3 = "data_sync3";
+    field public static final String SYNC4 = "data_sync4";
+  }
+
+  protected static interface ContactsContract.DataColumnsWithJoins extends android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.DataUsageStatColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.StatusColumns {
+  }
+
+  @Deprecated public static final class ContactsContract.DataUsageFeedback {
+    ctor @Deprecated public ContactsContract.DataUsageFeedback();
+    field @Deprecated public static final android.net.Uri DELETE_USAGE_URI;
+    field @Deprecated public static final android.net.Uri FEEDBACK_URI;
+    field @Deprecated public static final String USAGE_TYPE = "type";
+    field @Deprecated public static final String USAGE_TYPE_CALL = "call";
+    field @Deprecated public static final String USAGE_TYPE_LONG_TEXT = "long_text";
+    field @Deprecated public static final String USAGE_TYPE_SHORT_TEXT = "short_text";
+  }
+
+  protected static interface ContactsContract.DataUsageStatColumns {
+    field @Deprecated public static final String LAST_TIME_USED = "last_time_used";
+    field @Deprecated public static final String TIMES_USED = "times_used";
+  }
+
+  public static final class ContactsContract.DeletedContacts implements android.provider.ContactsContract.DeletedContactsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final long DAYS_KEPT_MILLISECONDS = 2592000000L; // 0x9a7ec800L
+  }
+
+  protected static interface ContactsContract.DeletedContactsColumns {
+    field public static final String CONTACT_DELETED_TIMESTAMP = "contact_deleted_timestamp";
+    field public static final String CONTACT_ID = "contact_id";
+  }
+
+  public static final class ContactsContract.Directory implements android.provider.BaseColumns {
+    method public static boolean isEnterpriseDirectoryId(long);
+    method public static boolean isRemoteDirectoryId(long);
+    method public static void notifyDirectoryChange(android.content.ContentResolver);
+    field public static final String ACCOUNT_NAME = "accountName";
+    field public static final String ACCOUNT_TYPE = "accountType";
+    field public static final String CALLER_PACKAGE_PARAM_KEY = "callerPackage";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final long DEFAULT = 0L; // 0x0L
+    field public static final String DIRECTORY_AUTHORITY = "authority";
+    field public static final String DISPLAY_NAME = "displayName";
+    field public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+    field public static final long ENTERPRISE_DEFAULT = 1000000000L; // 0x3b9aca00L
+    field public static final long ENTERPRISE_LOCAL_INVISIBLE = 1000000001L; // 0x3b9aca01L
+    field public static final String EXPORT_SUPPORT = "exportSupport";
+    field public static final int EXPORT_SUPPORT_ANY_ACCOUNT = 2; // 0x2
+    field public static final int EXPORT_SUPPORT_NONE = 0; // 0x0
+    field public static final int EXPORT_SUPPORT_SAME_ACCOUNT_ONLY = 1; // 0x1
+    field public static final long LOCAL_INVISIBLE = 1L; // 0x1L
+    field public static final String PACKAGE_NAME = "packageName";
+    field public static final String PHOTO_SUPPORT = "photoSupport";
+    field public static final int PHOTO_SUPPORT_FULL = 3; // 0x3
+    field public static final int PHOTO_SUPPORT_FULL_SIZE_ONLY = 2; // 0x2
+    field public static final int PHOTO_SUPPORT_NONE = 0; // 0x0
+    field public static final int PHOTO_SUPPORT_THUMBNAIL_ONLY = 1; // 0x1
+    field public static final String SHORTCUT_SUPPORT = "shortcutSupport";
+    field public static final int SHORTCUT_SUPPORT_DATA_ITEMS_ONLY = 1; // 0x1
+    field public static final int SHORTCUT_SUPPORT_FULL = 2; // 0x2
+    field public static final int SHORTCUT_SUPPORT_NONE = 0; // 0x0
+    field public static final String TYPE_RESOURCE_ID = "typeResourceId";
+  }
+
+  public static interface ContactsContract.DisplayNameSources {
+    field public static final int EMAIL = 10; // 0xa
+    field public static final int NICKNAME = 35; // 0x23
+    field public static final int ORGANIZATION = 30; // 0x1e
+    field public static final int PHONE = 20; // 0x14
+    field public static final int STRUCTURED_NAME = 40; // 0x28
+    field public static final int STRUCTURED_PHONETIC_NAME = 37; // 0x25
+    field public static final int UNDEFINED = 0; // 0x0
+  }
+
+  public static final class ContactsContract.DisplayPhoto {
+    field public static final android.net.Uri CONTENT_MAX_DIMENSIONS_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DISPLAY_MAX_DIM = "display_max_dim";
+    field public static final String THUMBNAIL_MAX_DIM = "thumbnail_max_dim";
+  }
+
+  public static interface ContactsContract.FullNameStyle {
+    field public static final int CHINESE = 3; // 0x3
+    field public static final int CJK = 2; // 0x2
+    field public static final int JAPANESE = 4; // 0x4
+    field public static final int KOREAN = 5; // 0x5
+    field public static final int UNDEFINED = 0; // 0x0
+    field public static final int WESTERN = 1; // 0x1
+  }
+
+  public static final class ContactsContract.Groups implements android.provider.BaseColumns android.provider.ContactsContract.GroupsColumns android.provider.ContactsContract.SyncColumns {
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/group";
+    field public static final android.net.Uri CONTENT_SUMMARY_URI;
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/group";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface ContactsContract.GroupsColumns {
+    field public static final String AUTO_ADD = "auto_add";
+    field public static final String DATA_SET = "data_set";
+    field public static final String DELETED = "deleted";
+    field public static final String FAVORITES = "favorites";
+    field public static final String GROUP_IS_READ_ONLY = "group_is_read_only";
+    field public static final String GROUP_VISIBLE = "group_visible";
+    field public static final String NOTES = "notes";
+    field public static final String RES_PACKAGE = "res_package";
+    field public static final String SHOULD_SYNC = "should_sync";
+    field public static final String SUMMARY_COUNT = "summ_count";
+    field public static final String SUMMARY_WITH_PHONES = "summ_phones";
+    field public static final String SYSTEM_ID = "system_id";
+    field public static final String TITLE = "title";
+    field public static final String TITLE_RES = "title_res";
+  }
+
+  public static final class ContactsContract.Intents {
+    ctor public ContactsContract.Intents();
+    field public static final String ACTION_VOICE_SEND_MESSAGE_TO_CONTACTS = "android.provider.action.VOICE_SEND_MESSAGE_TO_CONTACTS";
+    field public static final String ATTACH_IMAGE = "com.android.contacts.action.ATTACH_IMAGE";
+    field public static final String CONTACTS_DATABASE_CREATED = "android.provider.Contacts.DATABASE_CREATED";
+    field public static final String EXTRA_CREATE_DESCRIPTION = "com.android.contacts.action.CREATE_DESCRIPTION";
+    field public static final String EXTRA_FORCE_CREATE = "com.android.contacts.action.FORCE_CREATE";
+    field public static final String EXTRA_RECIPIENT_CONTACT_CHAT_ID = "android.provider.extra.RECIPIENT_CONTACT_CHAT_ID";
+    field public static final String EXTRA_RECIPIENT_CONTACT_NAME = "android.provider.extra.RECIPIENT_CONTACT_NAME";
+    field public static final String EXTRA_RECIPIENT_CONTACT_URI = "android.provider.extra.RECIPIENT_CONTACT_URI";
+    field public static final String INVITE_CONTACT = "com.android.contacts.action.INVITE_CONTACT";
+    field public static final String METADATA_ACCOUNT_TYPE = "android.provider.account_type";
+    field public static final String METADATA_MIMETYPE = "android.provider.mimetype";
+    field public static final String SEARCH_SUGGESTION_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CLICKED";
+    field public static final String SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED";
+    field public static final String SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED = "android.provider.Contacts.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED";
+    field public static final String SHOW_OR_CREATE_CONTACT = "com.android.contacts.action.SHOW_OR_CREATE_CONTACT";
+  }
+
+  public static final class ContactsContract.Intents.Insert {
+    ctor public ContactsContract.Intents.Insert();
+    field public static final String ACTION = "android.intent.action.INSERT";
+    field public static final String COMPANY = "company";
+    field public static final String DATA = "data";
+    field public static final String EMAIL = "email";
+    field public static final String EMAIL_ISPRIMARY = "email_isprimary";
+    field public static final String EMAIL_TYPE = "email_type";
+    field public static final String EXTRA_ACCOUNT = "android.provider.extra.ACCOUNT";
+    field public static final String EXTRA_DATA_SET = "android.provider.extra.DATA_SET";
+    field public static final String FULL_MODE = "full_mode";
+    field public static final String IM_HANDLE = "im_handle";
+    field public static final String IM_ISPRIMARY = "im_isprimary";
+    field public static final String IM_PROTOCOL = "im_protocol";
+    field public static final String JOB_TITLE = "job_title";
+    field public static final String NAME = "name";
+    field public static final String NOTES = "notes";
+    field public static final String PHONE = "phone";
+    field public static final String PHONETIC_NAME = "phonetic_name";
+    field public static final String PHONE_ISPRIMARY = "phone_isprimary";
+    field public static final String PHONE_TYPE = "phone_type";
+    field public static final String POSTAL = "postal";
+    field public static final String POSTAL_ISPRIMARY = "postal_isprimary";
+    field public static final String POSTAL_TYPE = "postal_type";
+    field public static final String SECONDARY_EMAIL = "secondary_email";
+    field public static final String SECONDARY_EMAIL_TYPE = "secondary_email_type";
+    field public static final String SECONDARY_PHONE = "secondary_phone";
+    field public static final String SECONDARY_PHONE_TYPE = "secondary_phone_type";
+    field public static final String TERTIARY_EMAIL = "tertiary_email";
+    field public static final String TERTIARY_EMAIL_TYPE = "tertiary_email_type";
+    field public static final String TERTIARY_PHONE = "tertiary_phone";
+    field public static final String TERTIARY_PHONE_TYPE = "tertiary_phone_type";
+  }
+
+  public static final class ContactsContract.PhoneLookup implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.PhoneLookupColumns {
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
+    field public static final String QUERY_PARAMETER_SIP_ADDRESS = "sip";
+  }
+
+  protected static interface ContactsContract.PhoneLookupColumns {
+    field public static final String CONTACT_ID = "contact_id";
+    field public static final String DATA_ID = "data_id";
+    field public static final String LABEL = "label";
+    field public static final String NORMALIZED_NUMBER = "normalized_number";
+    field public static final String NUMBER = "number";
+    field public static final String TYPE = "type";
+  }
+
+  public static interface ContactsContract.PhoneticNameStyle {
+    field public static final int JAPANESE = 4; // 0x4
+    field public static final int KOREAN = 5; // 0x5
+    field public static final int PINYIN = 3; // 0x3
+    field public static final int UNDEFINED = 0; // 0x0
+  }
+
+  public static final class ContactsContract.PinnedPositions {
+    ctor public ContactsContract.PinnedPositions();
+    method public static void pin(android.content.ContentResolver, long, int);
+    method public static void undemote(android.content.ContentResolver, long);
+    field public static final int DEMOTED = -1; // 0xffffffff
+    field public static final int UNPINNED = 0; // 0x0
+  }
+
+  @Deprecated public static final class ContactsContract.Presence extends android.provider.ContactsContract.StatusUpdates {
+    ctor @Deprecated public ContactsContract.Presence();
+  }
+
+  protected static interface ContactsContract.PresenceColumns {
+    field public static final String CUSTOM_PROTOCOL = "custom_protocol";
+    field public static final String DATA_ID = "presence_data_id";
+    field public static final String IM_ACCOUNT = "im_account";
+    field public static final String IM_HANDLE = "im_handle";
+    field public static final String PROTOCOL = "protocol";
+  }
+
+  public static final class ContactsContract.Profile implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactStatusColumns android.provider.ContactsContract.ContactsColumns {
+    field public static final android.net.Uri CONTENT_RAW_CONTACTS_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri CONTENT_VCARD_URI;
+    field public static final long MIN_ID = 9223372034707292160L; // 0x7fffffff80000000L
+  }
+
+  public static final class ContactsContract.ProfileSyncState implements android.provider.SyncStateContract.Columns {
+    method public static byte[] get(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.util.Pair<android.net.Uri,byte[]> getWithUri(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.content.ContentProviderOperation newSetOperation(android.accounts.Account, byte[]);
+    method public static void set(android.content.ContentProviderClient, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    field public static final String CONTENT_DIRECTORY = "syncstate";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static final class ContactsContract.ProviderStatus {
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/provider_status";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATABASE_CREATION_TIMESTAMP = "database_creation_timestamp";
+    field public static final String STATUS = "status";
+    field public static final int STATUS_BUSY = 1; // 0x1
+    field public static final int STATUS_EMPTY = 2; // 0x2
+    field public static final int STATUS_NORMAL = 0; // 0x0
+  }
+
+  public static final class ContactsContract.QuickContact {
+    ctor public ContactsContract.QuickContact();
+    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, int, String[]);
+    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, int, String[]);
+    method public static void showQuickContact(android.content.Context, android.view.View, android.net.Uri, String[], String);
+    method public static void showQuickContact(android.content.Context, android.graphics.Rect, android.net.Uri, String[], String);
+    field public static final String ACTION_QUICK_CONTACT = "android.provider.action.QUICK_CONTACT";
+    field public static final String EXTRA_EXCLUDE_MIMES = "android.provider.extra.EXCLUDE_MIMES";
+    field public static final String EXTRA_MODE = "android.provider.extra.MODE";
+    field public static final String EXTRA_PRIORITIZED_MIMETYPE = "android.provider.extra.PRIORITIZED_MIMETYPE";
+    field public static final int MODE_LARGE = 3; // 0x3
+    field public static final int MODE_MEDIUM = 2; // 0x2
+    field public static final int MODE_SMALL = 1; // 0x1
+  }
+
+  public static final class ContactsContract.RawContacts implements android.provider.BaseColumns android.provider.ContactsContract.ContactNameColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.RawContactsColumns android.provider.ContactsContract.SyncColumns {
+    method public static android.net.Uri getContactLookupUri(android.content.ContentResolver, android.net.Uri);
+    method @Nullable public static String getLocalAccountName(@NonNull android.content.Context);
+    method @Nullable public static String getLocalAccountType(@NonNull android.content.Context);
+    method public static android.content.EntityIterator newEntityIterator(android.database.Cursor);
+    field public static final int AGGREGATION_MODE_DEFAULT = 0; // 0x0
+    field public static final int AGGREGATION_MODE_DISABLED = 3; // 0x3
+    field @Deprecated public static final int AGGREGATION_MODE_IMMEDIATE = 1; // 0x1
+    field public static final int AGGREGATION_MODE_SUSPENDED = 2; // 0x2
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/raw_contact";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static final class ContactsContract.RawContacts.Data implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns {
+    field public static final String CONTENT_DIRECTORY = "data";
+  }
+
+  public static final class ContactsContract.RawContacts.DisplayPhoto {
+    field public static final String CONTENT_DIRECTORY = "display_photo";
+  }
+
+  public static final class ContactsContract.RawContacts.Entity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns {
+    field public static final String CONTENT_DIRECTORY = "entity";
+    field public static final String DATA_ID = "data_id";
+  }
+
+  protected static interface ContactsContract.RawContactsColumns {
+    field public static final String ACCOUNT_TYPE_AND_DATA_SET = "account_type_and_data_set";
+    field public static final String AGGREGATION_MODE = "aggregation_mode";
+    field public static final String BACKUP_ID = "backup_id";
+    field public static final String CONTACT_ID = "contact_id";
+    field public static final String DATA_SET = "data_set";
+    field public static final String DELETED = "deleted";
+    field @Deprecated public static final String METADATA_DIRTY = "metadata_dirty";
+    field public static final String RAW_CONTACT_IS_READ_ONLY = "raw_contact_is_read_only";
+    field public static final String RAW_CONTACT_IS_USER_PROFILE = "raw_contact_is_user_profile";
+  }
+
+  public static final class ContactsContract.RawContactsEntity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.RawContactsColumns {
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/raw_contact_entity";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_ID = "data_id";
+    field public static final android.net.Uri PROFILE_CONTENT_URI;
+  }
+
+  public static class ContactsContract.SearchSnippets {
+    ctor public ContactsContract.SearchSnippets();
+    field public static final String DEFERRED_SNIPPETING_KEY = "deferred_snippeting";
+    field public static final String SNIPPET = "snippet";
+  }
+
+  public static final class ContactsContract.Settings implements android.provider.ContactsContract.SettingsColumns {
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/setting";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/setting";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  protected static interface ContactsContract.SettingsColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String ANY_UNSYNCED = "any_unsynced";
+    field public static final String DATA_SET = "data_set";
+    field public static final String SHOULD_SYNC = "should_sync";
+    field public static final String UNGROUPED_COUNT = "summ_count";
+    field public static final String UNGROUPED_VISIBLE = "ungrouped_visible";
+    field public static final String UNGROUPED_WITH_PHONES = "summ_phones";
+  }
+
+  public static final class ContactsContract.SimAccount implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getAccountName();
+    method @NonNull public String getAccountType();
+    method public int getEfType();
+    method public int getSimSlotIndex();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ADN_EF_TYPE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.provider.ContactsContract.SimAccount> CREATOR;
+    field public static final int FDN_EF_TYPE = 2; // 0x2
+    field public static final int SDN_EF_TYPE = 3; // 0x3
+    field public static final int UNKNOWN_EF_TYPE = 0; // 0x0
+  }
+
+  public static final class ContactsContract.SimContacts {
+    method @NonNull public static java.util.List<android.provider.ContactsContract.SimAccount> getSimAccounts(@NonNull android.content.ContentResolver);
+    field public static final String ACTION_SIM_ACCOUNTS_CHANGED = "android.provider.action.SIM_ACCOUNTS_CHANGED";
+  }
+
+  protected static interface ContactsContract.StatusColumns {
+    field public static final int AVAILABLE = 5; // 0x5
+    field public static final int AWAY = 2; // 0x2
+    field public static final int CAPABILITY_HAS_CAMERA = 4; // 0x4
+    field public static final int CAPABILITY_HAS_VIDEO = 2; // 0x2
+    field public static final int CAPABILITY_HAS_VOICE = 1; // 0x1
+    field public static final String CHAT_CAPABILITY = "chat_capability";
+    field public static final int DO_NOT_DISTURB = 4; // 0x4
+    field public static final int IDLE = 3; // 0x3
+    field public static final int INVISIBLE = 1; // 0x1
+    field public static final int OFFLINE = 0; // 0x0
+    field public static final String PRESENCE = "mode";
+    field @Deprecated public static final String PRESENCE_CUSTOM_STATUS = "status";
+    field @Deprecated public static final String PRESENCE_STATUS = "mode";
+    field public static final String STATUS = "status";
+    field public static final String STATUS_ICON = "status_icon";
+    field public static final String STATUS_LABEL = "status_label";
+    field public static final String STATUS_RES_PACKAGE = "status_res_package";
+    field public static final String STATUS_TIMESTAMP = "status_ts";
+  }
+
+  public static class ContactsContract.StatusUpdates implements android.provider.ContactsContract.PresenceColumns android.provider.ContactsContract.StatusColumns {
+    method public static final int getPresenceIconResourceId(int);
+    method public static final int getPresencePrecedence(int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/status-update";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/status-update";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri PROFILE_CONTENT_URI;
+  }
+
+  protected static interface ContactsContract.SyncColumns extends android.provider.ContactsContract.BaseSyncColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String DIRTY = "dirty";
+    field public static final String SOURCE_ID = "sourceid";
+    field public static final String VERSION = "version";
+  }
+
+  public static final class ContactsContract.SyncState implements android.provider.SyncStateContract.Columns {
+    method public static byte[] get(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.util.Pair<android.net.Uri,byte[]> getWithUri(android.content.ContentProviderClient, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.content.ContentProviderOperation newSetOperation(android.accounts.Account, byte[]);
+    method public static void set(android.content.ContentProviderClient, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    field public static final String CONTENT_DIRECTORY = "syncstate";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public final class DocumentsContract {
+    method public static android.net.Uri buildChildDocumentsUri(String, String);
+    method public static android.net.Uri buildChildDocumentsUriUsingTree(android.net.Uri, String);
+    method public static android.net.Uri buildDocumentUri(String, String);
+    method public static android.net.Uri buildDocumentUriUsingTree(android.net.Uri, String);
+    method public static android.net.Uri buildRecentDocumentsUri(String, String);
+    method public static android.net.Uri buildRootUri(String, String);
+    method public static android.net.Uri buildRootsUri(String);
+    method public static android.net.Uri buildSearchDocumentsUri(String, String, String);
+    method public static android.net.Uri buildTreeDocumentUri(String, String);
+    method @Nullable public static android.net.Uri copyDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public static android.net.Uri createDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull String, @NonNull String) throws java.io.FileNotFoundException;
+    method @Nullable public static android.content.IntentSender createWebLinkIntent(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method public static boolean deleteDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static void ejectRoot(@NonNull android.content.ContentResolver, @NonNull android.net.Uri);
+    method @Nullable public static android.provider.DocumentsContract.Path findDocumentPath(@NonNull android.content.ContentResolver, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static String getDocumentId(android.net.Uri);
+    method @Nullable public static android.os.Bundle getDocumentMetadata(@NonNull android.content.ContentResolver, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public static android.graphics.Bitmap getDocumentThumbnail(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.graphics.Point, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public static String getRootId(android.net.Uri);
+    method public static String getSearchDocumentsQuery(android.net.Uri);
+    method public static String getTreeDocumentId(android.net.Uri);
+    method public static boolean isChildDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static boolean isDocumentUri(android.content.Context, @Nullable android.net.Uri);
+    method public static boolean isRootUri(@NonNull android.content.Context, @Nullable android.net.Uri);
+    method public static boolean isRootsUri(@NonNull android.content.Context, @Nullable android.net.Uri);
+    method public static boolean isTreeUri(android.net.Uri);
+    method @Nullable public static android.net.Uri moveDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method public static boolean removeDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull android.net.Uri) throws java.io.FileNotFoundException;
+    method @Nullable public static android.net.Uri renameDocument(@NonNull android.content.ContentResolver, @NonNull android.net.Uri, @NonNull String) throws java.io.FileNotFoundException;
+    field public static final String ACTION_DOCUMENT_SETTINGS = "android.provider.action.DOCUMENT_SETTINGS";
+    field public static final String EXTRA_ERROR = "error";
+    field public static final String EXTRA_EXCLUDE_SELF = "android.provider.extra.EXCLUDE_SELF";
+    field public static final String EXTRA_INFO = "info";
+    field public static final String EXTRA_INITIAL_URI = "android.provider.extra.INITIAL_URI";
+    field public static final String EXTRA_LOADING = "loading";
+    field public static final String EXTRA_ORIENTATION = "android.provider.extra.ORIENTATION";
+    field public static final String EXTRA_PROMPT = "android.provider.extra.PROMPT";
+    field public static final String METADATA_EXIF = "android:documentExif";
+    field public static final String METADATA_TREE_COUNT = "android:metadataTreeCount";
+    field public static final String METADATA_TREE_SIZE = "android:metadataTreeSize";
+    field public static final String METADATA_TYPES = "android:documentMetadataTypes";
+    field public static final String PROVIDER_INTERFACE = "android.content.action.DOCUMENTS_PROVIDER";
+    field public static final String QUERY_ARG_DISPLAY_NAME = "android:query-arg-display-name";
+    field public static final String QUERY_ARG_EXCLUDE_MEDIA = "android:query-arg-exclude-media";
+    field public static final String QUERY_ARG_FILE_SIZE_OVER = "android:query-arg-file-size-over";
+    field public static final String QUERY_ARG_LAST_MODIFIED_AFTER = "android:query-arg-last-modified-after";
+    field public static final String QUERY_ARG_MIME_TYPES = "android:query-arg-mime-types";
+  }
+
+  public static final class DocumentsContract.Document {
+    field public static final String COLUMN_DISPLAY_NAME = "_display_name";
+    field public static final String COLUMN_DOCUMENT_ID = "document_id";
+    field public static final String COLUMN_FLAGS = "flags";
+    field public static final String COLUMN_ICON = "icon";
+    field public static final String COLUMN_LAST_MODIFIED = "last_modified";
+    field public static final String COLUMN_MIME_TYPE = "mime_type";
+    field public static final String COLUMN_SIZE = "_size";
+    field public static final String COLUMN_SUMMARY = "summary";
+    field public static final int FLAG_DIR_BLOCKS_OPEN_DOCUMENT_TREE = 32768; // 0x8000
+    field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10
+    field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20
+    field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8
+    field public static final int FLAG_PARTIAL = 8192; // 0x2000
+    field public static final int FLAG_SUPPORTS_COPY = 128; // 0x80
+    field public static final int FLAG_SUPPORTS_DELETE = 4; // 0x4
+    field public static final int FLAG_SUPPORTS_METADATA = 16384; // 0x4000
+    field public static final int FLAG_SUPPORTS_MOVE = 256; // 0x100
+    field public static final int FLAG_SUPPORTS_REMOVE = 1024; // 0x400
+    field public static final int FLAG_SUPPORTS_RENAME = 64; // 0x40
+    field public static final int FLAG_SUPPORTS_SETTINGS = 2048; // 0x800
+    field public static final int FLAG_SUPPORTS_THUMBNAIL = 1; // 0x1
+    field public static final int FLAG_SUPPORTS_WRITE = 2; // 0x2
+    field public static final int FLAG_VIRTUAL_DOCUMENT = 512; // 0x200
+    field public static final int FLAG_WEB_LINKABLE = 4096; // 0x1000
+    field public static final String MIME_TYPE_DIR = "vnd.android.document/directory";
+  }
+
+  public static final class DocumentsContract.Path implements android.os.Parcelable {
+    ctor public DocumentsContract.Path(@Nullable String, java.util.List<java.lang.String>);
+    method public int describeContents();
+    method public java.util.List<java.lang.String> getPath();
+    method @Nullable public String getRootId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.provider.DocumentsContract.Path> CREATOR;
+  }
+
+  public static final class DocumentsContract.Root {
+    field public static final String COLUMN_AVAILABLE_BYTES = "available_bytes";
+    field public static final String COLUMN_CAPACITY_BYTES = "capacity_bytes";
+    field public static final String COLUMN_DOCUMENT_ID = "document_id";
+    field public static final String COLUMN_FLAGS = "flags";
+    field public static final String COLUMN_ICON = "icon";
+    field public static final String COLUMN_MIME_TYPES = "mime_types";
+    field public static final String COLUMN_QUERY_ARGS = "query_args";
+    field public static final String COLUMN_ROOT_ID = "root_id";
+    field public static final String COLUMN_SUMMARY = "summary";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final int FLAG_EMPTY = 64; // 0x40
+    field public static final int FLAG_LOCAL_ONLY = 2; // 0x2
+    field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1
+    field public static final int FLAG_SUPPORTS_EJECT = 32; // 0x20
+    field public static final int FLAG_SUPPORTS_IS_CHILD = 16; // 0x10
+    field public static final int FLAG_SUPPORTS_RECENTS = 4; // 0x4
+    field public static final int FLAG_SUPPORTS_SEARCH = 8; // 0x8
+    field public static final String MIME_TYPE_ITEM = "vnd.android.document/root";
+  }
+
+  public abstract class DocumentsProvider extends android.content.ContentProvider {
+    ctor public DocumentsProvider();
+    method public String copyDocument(String, String) throws java.io.FileNotFoundException;
+    method public String createDocument(String, String, String) throws java.io.FileNotFoundException;
+    method public android.content.IntentSender createWebLinkIntent(String, @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method public final int delete(android.net.Uri, String, String[]);
+    method public void deleteDocument(String) throws java.io.FileNotFoundException;
+    method public void ejectRoot(String);
+    method public android.provider.DocumentsContract.Path findDocumentPath(@Nullable String, String) throws java.io.FileNotFoundException;
+    method @Nullable public android.os.Bundle getDocumentMetadata(@NonNull String) throws java.io.FileNotFoundException;
+    method public String[] getDocumentStreamTypes(String, String);
+    method public String getDocumentType(String) throws java.io.FileNotFoundException;
+    method public final String getType(android.net.Uri);
+    method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean isChildDocument(String, String);
+    method public String moveDocument(String, String, String) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, String) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public abstract android.os.ParcelFileDescriptor openDocument(String, String, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public android.content.res.AssetFileDescriptor openDocumentThumbnail(String, android.graphics.Point, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public final android.os.ParcelFileDescriptor openFile(android.net.Uri, String) throws java.io.FileNotFoundException;
+    method public final android.os.ParcelFileDescriptor openFile(android.net.Uri, String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, String, android.os.Bundle) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public android.content.res.AssetFileDescriptor openTypedDocument(String, String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public final android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method public final android.database.Cursor query(android.net.Uri, String[], android.os.Bundle, android.os.CancellationSignal);
+    method public abstract android.database.Cursor queryChildDocuments(String, String[], String) throws java.io.FileNotFoundException;
+    method public android.database.Cursor queryChildDocuments(String, @Nullable String[], @Nullable android.os.Bundle) throws java.io.FileNotFoundException;
+    method public abstract android.database.Cursor queryDocument(String, String[]) throws java.io.FileNotFoundException;
+    method public android.database.Cursor queryRecentDocuments(String, String[]) throws java.io.FileNotFoundException;
+    method @Nullable public android.database.Cursor queryRecentDocuments(@NonNull String, @Nullable String[], @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal) throws java.io.FileNotFoundException;
+    method public abstract android.database.Cursor queryRoots(String[]) throws java.io.FileNotFoundException;
+    method public android.database.Cursor querySearchDocuments(String, String, String[]) throws java.io.FileNotFoundException;
+    method @Nullable public android.database.Cursor querySearchDocuments(@NonNull String, @Nullable String[], @NonNull android.os.Bundle) throws java.io.FileNotFoundException;
+    method public void removeDocument(String, String) throws java.io.FileNotFoundException;
+    method public String renameDocument(String, String) throws java.io.FileNotFoundException;
+    method public final void revokeDocumentPermission(String);
+    method public final int update(android.net.Uri, android.content.ContentValues, String, String[]);
+  }
+
+  @Deprecated public final class FontRequest {
+    ctor @Deprecated public FontRequest(@NonNull String, @NonNull String, @NonNull String);
+    ctor @Deprecated public FontRequest(@NonNull String, @NonNull String, @NonNull String, @NonNull java.util.List<java.util.List<byte[]>>);
+    method @Deprecated public java.util.List<java.util.List<byte[]>> getCertificates();
+    method @Deprecated public String getProviderAuthority();
+    method @Deprecated public String getProviderPackage();
+    method @Deprecated public String getQuery();
+  }
+
+  @Deprecated public class FontsContract {
+    method @Deprecated public static android.graphics.Typeface buildTypeface(@NonNull android.content.Context, @Nullable android.os.CancellationSignal, @NonNull android.provider.FontsContract.FontInfo[]);
+    method @Deprecated @NonNull public static android.provider.FontsContract.FontFamilyResult fetchFonts(@NonNull android.content.Context, @Nullable android.os.CancellationSignal, @NonNull android.provider.FontRequest) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public static void requestFonts(@NonNull android.content.Context, @NonNull android.provider.FontRequest, @NonNull android.os.Handler, @Nullable android.os.CancellationSignal, @NonNull android.provider.FontsContract.FontRequestCallback);
+  }
+
+  @Deprecated public static final class FontsContract.Columns implements android.provider.BaseColumns {
+    field @Deprecated public static final String FILE_ID = "file_id";
+    field @Deprecated public static final String ITALIC = "font_italic";
+    field @Deprecated public static final String RESULT_CODE = "result_code";
+    field @Deprecated public static final int RESULT_CODE_FONT_NOT_FOUND = 1; // 0x1
+    field @Deprecated public static final int RESULT_CODE_FONT_UNAVAILABLE = 2; // 0x2
+    field @Deprecated public static final int RESULT_CODE_MALFORMED_QUERY = 3; // 0x3
+    field @Deprecated public static final int RESULT_CODE_OK = 0; // 0x0
+    field @Deprecated public static final String TTC_INDEX = "font_ttc_index";
+    field @Deprecated public static final String VARIATION_SETTINGS = "font_variation_settings";
+    field @Deprecated public static final String WEIGHT = "font_weight";
+  }
+
+  @Deprecated public static class FontsContract.FontFamilyResult {
+    method @Deprecated @NonNull public android.provider.FontsContract.FontInfo[] getFonts();
+    method @Deprecated public int getStatusCode();
+    field @Deprecated public static final int STATUS_OK = 0; // 0x0
+    field @Deprecated public static final int STATUS_REJECTED = 3; // 0x3
+    field @Deprecated public static final int STATUS_UNEXPECTED_DATA_PROVIDED = 2; // 0x2
+    field @Deprecated public static final int STATUS_WRONG_CERTIFICATES = 1; // 0x1
+  }
+
+  @Deprecated public static class FontsContract.FontInfo {
+    method @Deprecated @Nullable public android.graphics.fonts.FontVariationAxis[] getAxes();
+    method @Deprecated public int getResultCode();
+    method @Deprecated @IntRange(from=0) public int getTtcIndex();
+    method @Deprecated @NonNull public android.net.Uri getUri();
+    method @Deprecated @IntRange(from=1, to=1000) public int getWeight();
+    method @Deprecated public boolean isItalic();
+  }
+
+  @Deprecated public static class FontsContract.FontRequestCallback {
+    ctor @Deprecated public FontsContract.FontRequestCallback();
+    method @Deprecated public void onTypefaceRequestFailed(int);
+    method @Deprecated public void onTypefaceRetrieved(android.graphics.Typeface);
+    field @Deprecated public static final int FAIL_REASON_FONT_LOAD_ERROR = -3; // 0xfffffffd
+    field @Deprecated public static final int FAIL_REASON_FONT_NOT_FOUND = 1; // 0x1
+    field @Deprecated public static final int FAIL_REASON_FONT_UNAVAILABLE = 2; // 0x2
+    field @Deprecated public static final int FAIL_REASON_MALFORMED_QUERY = 3; // 0x3
+    field @Deprecated public static final int FAIL_REASON_PROVIDER_NOT_FOUND = -1; // 0xffffffff
+    field @Deprecated public static final int FAIL_REASON_WRONG_CERTIFICATES = -2; // 0xfffffffe
+  }
+
+  @Deprecated public final class LiveFolders implements android.provider.BaseColumns {
+    field @Deprecated public static final String ACTION_CREATE_LIVE_FOLDER = "android.intent.action.CREATE_LIVE_FOLDER";
+    field @Deprecated public static final String DESCRIPTION = "description";
+    field @Deprecated public static final int DISPLAY_MODE_GRID = 1; // 0x1
+    field @Deprecated public static final int DISPLAY_MODE_LIST = 2; // 0x2
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_BASE_INTENT = "android.intent.extra.livefolder.BASE_INTENT";
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_DISPLAY_MODE = "android.intent.extra.livefolder.DISPLAY_MODE";
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_ICON = "android.intent.extra.livefolder.ICON";
+    field @Deprecated public static final String EXTRA_LIVE_FOLDER_NAME = "android.intent.extra.livefolder.NAME";
+    field @Deprecated public static final String ICON_BITMAP = "icon_bitmap";
+    field @Deprecated public static final String ICON_PACKAGE = "icon_package";
+    field @Deprecated public static final String ICON_RESOURCE = "icon_resource";
+    field @Deprecated public static final String INTENT = "intent";
+    field @Deprecated public static final String NAME = "name";
+  }
+
+  public final class MediaStore {
+    ctor public MediaStore();
+    method public static boolean canManageMedia(@NonNull android.content.Context);
+    method @NonNull public static android.app.PendingIntent createDeleteRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>);
+    method @NonNull public static android.app.PendingIntent createFavoriteRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>, boolean);
+    method @NonNull public static android.app.PendingIntent createTrashRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>, boolean);
+    method @NonNull public static android.app.PendingIntent createWriteRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>);
+    method @Nullable public static android.net.Uri getDocumentUri(@NonNull android.content.Context, @NonNull android.net.Uri);
+    method @NonNull public static java.util.Set<java.lang.String> getExternalVolumeNames(@NonNull android.content.Context);
+    method public static long getGeneration(@NonNull android.content.Context, @NonNull String);
+    method public static android.net.Uri getMediaScannerUri();
+    method @Nullable public static android.net.Uri getMediaUri(@NonNull android.content.Context, @NonNull android.net.Uri);
+    method @NonNull public static android.os.ParcelFileDescriptor getOriginalMediaFormatFileDescriptor(@NonNull android.content.Context, @NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method @NonNull public static java.util.Set<java.lang.String> getRecentExternalVolumeNames(@NonNull android.content.Context);
+    method @Nullable public static android.net.Uri getRedactedUri(@NonNull android.content.ContentResolver, @NonNull android.net.Uri);
+    method @NonNull public static java.util.List<android.net.Uri> getRedactedUri(@NonNull android.content.ContentResolver, @NonNull java.util.List<android.net.Uri>);
+    method public static boolean getRequireOriginal(@NonNull android.net.Uri);
+    method @NonNull public static String getVersion(@NonNull android.content.Context);
+    method @NonNull public static String getVersion(@NonNull android.content.Context, @NonNull String);
+    method @NonNull public static String getVolumeName(@NonNull android.net.Uri);
+    method public static boolean isCurrentSystemGallery(@NonNull android.content.ContentResolver, int, @NonNull String);
+    method @Deprecated @NonNull public static android.net.Uri setIncludePending(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri setRequireOriginal(@NonNull android.net.Uri);
+    field public static final String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE";
+    field public static final String ACTION_IMAGE_CAPTURE_SECURE = "android.media.action.IMAGE_CAPTURE_SECURE";
+    field public static final String ACTION_REVIEW = "android.provider.action.REVIEW";
+    field public static final String ACTION_REVIEW_SECURE = "android.provider.action.REVIEW_SECURE";
+    field public static final String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE";
+    field public static final String AUTHORITY = "media";
+    field @NonNull public static final android.net.Uri AUTHORITY_URI;
+    field public static final String EXTRA_ACCEPT_ORIGINAL_MEDIA_FORMAT = "android.provider.extra.ACCEPT_ORIGINAL_MEDIA_FORMAT";
+    field public static final String EXTRA_BRIGHTNESS = "android.provider.extra.BRIGHTNESS";
+    field public static final String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit";
+    field public static final String EXTRA_FINISH_ON_COMPLETION = "android.intent.extra.finishOnCompletion";
+    field public static final String EXTRA_FULL_SCREEN = "android.intent.extra.fullScreen";
+    field public static final String EXTRA_MEDIA_ALBUM = "android.intent.extra.album";
+    field public static final String EXTRA_MEDIA_ARTIST = "android.intent.extra.artist";
+    field public static final String EXTRA_MEDIA_CAPABILITIES = "android.provider.extra.MEDIA_CAPABILITIES";
+    field public static final String EXTRA_MEDIA_CAPABILITIES_UID = "android.provider.extra.MEDIA_CAPABILITIES_UID";
+    field public static final String EXTRA_MEDIA_FOCUS = "android.intent.extra.focus";
+    field public static final String EXTRA_MEDIA_GENRE = "android.intent.extra.genre";
+    field @Deprecated public static final String EXTRA_MEDIA_PLAYLIST = "android.intent.extra.playlist";
+    field public static final String EXTRA_MEDIA_RADIO_CHANNEL = "android.intent.extra.radio_channel";
+    field public static final String EXTRA_MEDIA_TITLE = "android.intent.extra.title";
+    field public static final String EXTRA_OUTPUT = "output";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "android.intent.extra.screenOrientation";
+    field public static final String EXTRA_SHOW_ACTION_ICONS = "android.intent.extra.showActionIcons";
+    field public static final String EXTRA_SIZE_LIMIT = "android.intent.extra.sizeLimit";
+    field public static final String EXTRA_VIDEO_QUALITY = "android.intent.extra.videoQuality";
+    field public static final String INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH = "android.media.action.MEDIA_PLAY_FROM_SEARCH";
+    field public static final String INTENT_ACTION_MEDIA_SEARCH = "android.intent.action.MEDIA_SEARCH";
+    field @Deprecated public static final String INTENT_ACTION_MUSIC_PLAYER = "android.intent.action.MUSIC_PLAYER";
+    field public static final String INTENT_ACTION_STILL_IMAGE_CAMERA = "android.media.action.STILL_IMAGE_CAMERA";
+    field public static final String INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE = "android.media.action.STILL_IMAGE_CAMERA_SECURE";
+    field public static final String INTENT_ACTION_TEXT_OPEN_FROM_SEARCH = "android.media.action.TEXT_OPEN_FROM_SEARCH";
+    field public static final String INTENT_ACTION_VIDEO_CAMERA = "android.media.action.VIDEO_CAMERA";
+    field public static final String INTENT_ACTION_VIDEO_PLAY_FROM_SEARCH = "android.media.action.VIDEO_PLAY_FROM_SEARCH";
+    field public static final int MATCH_DEFAULT = 0; // 0x0
+    field public static final int MATCH_EXCLUDE = 2; // 0x2
+    field public static final int MATCH_INCLUDE = 1; // 0x1
+    field public static final int MATCH_ONLY = 3; // 0x3
+    field public static final String MEDIA_IGNORE_FILENAME = ".nomedia";
+    field public static final String MEDIA_SCANNER_VOLUME = "volume";
+    field public static final String META_DATA_REVIEW_GALLERY_PREWARM_SERVICE = "android.media.review_gallery_prewarm_service";
+    field public static final String META_DATA_STILL_IMAGE_CAMERA_PREWARM_SERVICE = "android.media.still_image_camera_preview_service";
+    field public static final String QUERY_ARG_INCLUDE_RECENTLY_UNMOUNTED_VOLUMES = "android:query-arg-recently-unmounted-volumes";
+    field public static final String QUERY_ARG_MATCH_FAVORITE = "android:query-arg-match-favorite";
+    field public static final String QUERY_ARG_MATCH_PENDING = "android:query-arg-match-pending";
+    field public static final String QUERY_ARG_MATCH_TRASHED = "android:query-arg-match-trashed";
+    field public static final String QUERY_ARG_RELATED_URI = "android:query-arg-related-uri";
+    field public static final String UNKNOWN_STRING = "<unknown>";
+    field public static final String VOLUME_EXTERNAL = "external";
+    field public static final String VOLUME_EXTERNAL_PRIMARY = "external_primary";
+    field public static final String VOLUME_INTERNAL = "internal";
+  }
+
+  public static final class MediaStore.Audio {
+    ctor public MediaStore.Audio();
+    method @Deprecated @Nullable public static String keyFor(@Nullable String);
+  }
+
+  public static interface MediaStore.Audio.AlbumColumns {
+    field public static final String ALBUM = "album";
+    field @Deprecated public static final String ALBUM_ART = "album_art";
+    field public static final String ALBUM_ID = "album_id";
+    field @Deprecated public static final String ALBUM_KEY = "album_key";
+    field public static final String ARTIST = "artist";
+    field public static final String ARTIST_ID = "artist_id";
+    field @Deprecated public static final String ARTIST_KEY = "artist_key";
+    field public static final String FIRST_YEAR = "minyear";
+    field public static final String LAST_YEAR = "maxyear";
+    field public static final String NUMBER_OF_SONGS = "numsongs";
+    field public static final String NUMBER_OF_SONGS_FOR_ARTIST = "numsongs_by_artist";
+  }
+
+  public static final class MediaStore.Audio.Albums implements android.provider.BaseColumns android.provider.MediaStore.Audio.AlbumColumns {
+    ctor public MediaStore.Audio.Albums();
+    method public static android.net.Uri getContentUri(String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/albums";
+    field public static final String DEFAULT_SORT_ORDER = "album_key";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/album";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static interface MediaStore.Audio.ArtistColumns {
+    field public static final String ARTIST = "artist";
+    field @Deprecated public static final String ARTIST_KEY = "artist_key";
+    field public static final String NUMBER_OF_ALBUMS = "number_of_albums";
+    field public static final String NUMBER_OF_TRACKS = "number_of_tracks";
+  }
+
+  public static final class MediaStore.Audio.Artists implements android.provider.BaseColumns android.provider.MediaStore.Audio.ArtistColumns {
+    ctor public MediaStore.Audio.Artists();
+    method public static android.net.Uri getContentUri(String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/artists";
+    field public static final String DEFAULT_SORT_ORDER = "artist_key";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/artist";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static final class MediaStore.Audio.Artists.Albums implements android.provider.BaseColumns android.provider.MediaStore.Audio.AlbumColumns {
+    ctor public MediaStore.Audio.Artists.Albums();
+    method public static android.net.Uri getContentUri(String, long);
+  }
+
+  public static interface MediaStore.Audio.AudioColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String ALBUM_ID = "album_id";
+    field @Deprecated public static final String ALBUM_KEY = "album_key";
+    field public static final String ARTIST_ID = "artist_id";
+    field @Deprecated public static final String ARTIST_KEY = "artist_key";
+    field public static final String BOOKMARK = "bookmark";
+    field public static final String GENRE = "genre";
+    field public static final String GENRE_ID = "genre_id";
+    field @Deprecated public static final String GENRE_KEY = "genre_key";
+    field public static final String IS_ALARM = "is_alarm";
+    field public static final String IS_AUDIOBOOK = "is_audiobook";
+    field public static final String IS_MUSIC = "is_music";
+    field public static final String IS_NOTIFICATION = "is_notification";
+    field public static final String IS_PODCAST = "is_podcast";
+    field public static final String IS_RECORDING = "is_recording";
+    field public static final String IS_RINGTONE = "is_ringtone";
+    field @Deprecated public static final String TITLE_KEY = "title_key";
+    field public static final String TITLE_RESOURCE_URI = "title_resource_uri";
+    field public static final String TRACK = "track";
+    field public static final String YEAR = "year";
+  }
+
+  public static final class MediaStore.Audio.Genres implements android.provider.BaseColumns android.provider.MediaStore.Audio.GenresColumns {
+    ctor public MediaStore.Audio.Genres();
+    method public static android.net.Uri getContentUri(String);
+    method public static android.net.Uri getContentUriForAudioId(String, int);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/genre";
+    field public static final String DEFAULT_SORT_ORDER = "name";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/genre";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static final class MediaStore.Audio.Genres.Members implements android.provider.MediaStore.Audio.AudioColumns {
+    ctor public MediaStore.Audio.Genres.Members();
+    method public static android.net.Uri getContentUri(String, long);
+    field public static final String AUDIO_ID = "audio_id";
+    field public static final String CONTENT_DIRECTORY = "members";
+    field public static final String DEFAULT_SORT_ORDER = "title_key";
+    field public static final String GENRE_ID = "genre_id";
+  }
+
+  public static interface MediaStore.Audio.GenresColumns {
+    field public static final String NAME = "name";
+  }
+
+  public static final class MediaStore.Audio.Media implements android.provider.MediaStore.Audio.AudioColumns {
+    ctor public MediaStore.Audio.Media();
+    method public static android.net.Uri getContentUri(String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    method @Deprecated @Nullable public static android.net.Uri getContentUriForPath(@NonNull String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/audio";
+    field public static final String DEFAULT_SORT_ORDER = "title_key";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/audio";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final String EXTRA_MAX_BYTES = "android.provider.MediaStore.extra.MAX_BYTES";
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+    field public static final String RECORD_SOUND_ACTION = "android.provider.MediaStore.RECORD_SOUND";
+  }
+
+  @Deprecated public static final class MediaStore.Audio.Playlists implements android.provider.BaseColumns android.provider.MediaStore.Audio.PlaylistsColumns {
+    ctor @Deprecated public MediaStore.Audio.Playlists();
+    method @Deprecated public static android.net.Uri getContentUri(String);
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/playlist";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name";
+    field @Deprecated public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/playlist";
+    field @Deprecated public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @Deprecated public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  @Deprecated public static final class MediaStore.Audio.Playlists.Members implements android.provider.MediaStore.Audio.AudioColumns {
+    ctor @Deprecated public MediaStore.Audio.Playlists.Members();
+    method @Deprecated public static android.net.Uri getContentUri(String, long);
+    method @Deprecated public static boolean moveItem(android.content.ContentResolver, long, int, int);
+    field @Deprecated public static final String AUDIO_ID = "audio_id";
+    field @Deprecated public static final String CONTENT_DIRECTORY = "members";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "play_order";
+    field @Deprecated public static final String PLAYLIST_ID = "playlist_id";
+    field @Deprecated public static final String PLAY_ORDER = "play_order";
+    field @Deprecated public static final String _ID = "_id";
+  }
+
+  @Deprecated public static interface MediaStore.Audio.PlaylistsColumns extends android.provider.MediaStore.MediaColumns {
+    field @Deprecated public static final String DATA = "_data";
+    field @Deprecated public static final String DATE_ADDED = "date_added";
+    field @Deprecated public static final String DATE_MODIFIED = "date_modified";
+    field @Deprecated public static final String NAME = "name";
+  }
+
+  public static final class MediaStore.Audio.Radio {
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/radio";
+  }
+
+  public static interface MediaStore.DownloadColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String DOWNLOAD_URI = "download_uri";
+    field public static final String REFERER_URI = "referer_uri";
+  }
+
+  public static final class MediaStore.Downloads implements android.provider.MediaStore.DownloadColumns {
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/download";
+    field @NonNull public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @NonNull public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static final class MediaStore.Files {
+    ctor public MediaStore.Files();
+    method public static android.net.Uri getContentUri(String);
+    method public static android.net.Uri getContentUri(String, long);
+  }
+
+  public static interface MediaStore.Files.FileColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String MEDIA_TYPE = "media_type";
+    field public static final int MEDIA_TYPE_AUDIO = 2; // 0x2
+    field public static final int MEDIA_TYPE_DOCUMENT = 6; // 0x6
+    field public static final int MEDIA_TYPE_IMAGE = 1; // 0x1
+    field public static final int MEDIA_TYPE_NONE = 0; // 0x0
+    field @Deprecated public static final int MEDIA_TYPE_PLAYLIST = 4; // 0x4
+    field public static final int MEDIA_TYPE_SUBTITLE = 5; // 0x5
+    field public static final int MEDIA_TYPE_VIDEO = 3; // 0x3
+    field public static final String MIME_TYPE = "mime_type";
+    field public static final String PARENT = "parent";
+  }
+
+  public static final class MediaStore.Images {
+    ctor public MediaStore.Images();
+  }
+
+  public static interface MediaStore.Images.ImageColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String DESCRIPTION = "description";
+    field public static final String EXPOSURE_TIME = "exposure_time";
+    field public static final String F_NUMBER = "f_number";
+    field public static final String ISO = "iso";
+    field public static final String IS_PRIVATE = "isprivate";
+    field @Deprecated public static final String LATITUDE = "latitude";
+    field @Deprecated public static final String LONGITUDE = "longitude";
+    field @Deprecated public static final String MINI_THUMB_MAGIC = "mini_thumb_magic";
+    field @Deprecated public static final String PICASA_ID = "picasa_id";
+    field public static final String SCENE_CAPTURE_TYPE = "scene_capture_type";
+  }
+
+  public static final class MediaStore.Images.Media implements android.provider.MediaStore.Images.ImageColumns {
+    ctor public MediaStore.Images.Media();
+    method @Deprecated public static android.graphics.Bitmap getBitmap(android.content.ContentResolver, android.net.Uri) throws java.io.FileNotFoundException, java.io.IOException;
+    method public static android.net.Uri getContentUri(String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    method @Deprecated public static String insertImage(android.content.ContentResolver, String, String, String) throws java.io.FileNotFoundException;
+    method @Deprecated public static String insertImage(android.content.ContentResolver, android.graphics.Bitmap, String, String);
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[], String, String);
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[], String, String[], String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/image";
+    field public static final String DEFAULT_SORT_ORDER = "bucket_display_name";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  @Deprecated public static class MediaStore.Images.Thumbnails implements android.provider.BaseColumns {
+    ctor @Deprecated public MediaStore.Images.Thumbnails();
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long);
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long, long);
+    method @Deprecated public static android.net.Uri getContentUri(String);
+    method @Deprecated @NonNull public static android.util.Size getKindSize(int);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, long, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static final android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
+    method @Deprecated public static final android.database.Cursor queryMiniThumbnail(android.content.ContentResolver, long, int, String[]);
+    method @Deprecated public static final android.database.Cursor queryMiniThumbnails(android.content.ContentResolver, android.net.Uri, int, String[]);
+    field @Deprecated public static final String DATA = "_data";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "image_id ASC";
+    field @Deprecated public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @Deprecated public static final int FULL_SCREEN_KIND = 2; // 0x2
+    field @Deprecated public static final String HEIGHT = "height";
+    field @Deprecated public static final String IMAGE_ID = "image_id";
+    field @Deprecated public static final android.net.Uri INTERNAL_CONTENT_URI;
+    field @Deprecated public static final String KIND = "kind";
+    field @Deprecated public static final int MICRO_KIND = 3; // 0x3
+    field @Deprecated public static final int MINI_KIND = 1; // 0x1
+    field @Deprecated public static final String THUMB_DATA = "thumb_data";
+    field @Deprecated public static final String WIDTH = "width";
+  }
+
+  public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
+    field public static final String ALBUM = "album";
+    field public static final String ALBUM_ARTIST = "album_artist";
+    field public static final String ARTIST = "artist";
+    field public static final String AUTHOR = "author";
+    field public static final String BITRATE = "bitrate";
+    field public static final String BUCKET_DISPLAY_NAME = "bucket_display_name";
+    field public static final String BUCKET_ID = "bucket_id";
+    field public static final String CAPTURE_FRAMERATE = "capture_framerate";
+    field public static final String CD_TRACK_NUMBER = "cd_track_number";
+    field public static final String COMPILATION = "compilation";
+    field public static final String COMPOSER = "composer";
+    field @Deprecated public static final String DATA = "_data";
+    field public static final String DATE_ADDED = "date_added";
+    field public static final String DATE_EXPIRES = "date_expires";
+    field public static final String DATE_MODIFIED = "date_modified";
+    field public static final String DATE_TAKEN = "datetaken";
+    field public static final String DISC_NUMBER = "disc_number";
+    field public static final String DISPLAY_NAME = "_display_name";
+    field public static final String DOCUMENT_ID = "document_id";
+    field public static final String DURATION = "duration";
+    field public static final String GENERATION_ADDED = "generation_added";
+    field public static final String GENERATION_MODIFIED = "generation_modified";
+    field public static final String GENRE = "genre";
+    field public static final String HEIGHT = "height";
+    field public static final String INSTANCE_ID = "instance_id";
+    field public static final String IS_DOWNLOAD = "is_download";
+    field public static final String IS_DRM = "is_drm";
+    field public static final String IS_FAVORITE = "is_favorite";
+    field public static final String IS_PENDING = "is_pending";
+    field public static final String IS_TRASHED = "is_trashed";
+    field public static final String MIME_TYPE = "mime_type";
+    field public static final String NUM_TRACKS = "num_tracks";
+    field public static final String ORIENTATION = "orientation";
+    field public static final String ORIGINAL_DOCUMENT_ID = "original_document_id";
+    field public static final String OWNER_PACKAGE_NAME = "owner_package_name";
+    field public static final String RELATIVE_PATH = "relative_path";
+    field public static final String RESOLUTION = "resolution";
+    field public static final String SIZE = "_size";
+    field public static final String TITLE = "title";
+    field public static final String VOLUME_NAME = "volume_name";
+    field public static final String WIDTH = "width";
+    field public static final String WRITER = "writer";
+    field public static final String XMP = "xmp";
+    field public static final String YEAR = "year";
+  }
+
+  public static final class MediaStore.Video {
+    ctor public MediaStore.Video();
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
+    field public static final String DEFAULT_SORT_ORDER = "_display_name";
+  }
+
+  public static final class MediaStore.Video.Media implements android.provider.MediaStore.Video.VideoColumns {
+    ctor public MediaStore.Video.Media();
+    method public static android.net.Uri getContentUri(String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/video";
+    field public static final String DEFAULT_SORT_ORDER = "title";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  @Deprecated public static class MediaStore.Video.Thumbnails implements android.provider.BaseColumns {
+    ctor @Deprecated public MediaStore.Video.Thumbnails();
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long);
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long, long);
+    method @Deprecated public static android.net.Uri getContentUri(String);
+    method @Deprecated @NonNull public static android.util.Size getKindSize(int);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, long, int, android.graphics.BitmapFactory.Options);
+    field @Deprecated public static final String DATA = "_data";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "video_id ASC";
+    field @Deprecated public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @Deprecated public static final int FULL_SCREEN_KIND = 2; // 0x2
+    field @Deprecated public static final String HEIGHT = "height";
+    field @Deprecated public static final android.net.Uri INTERNAL_CONTENT_URI;
+    field @Deprecated public static final String KIND = "kind";
+    field @Deprecated public static final int MICRO_KIND = 3; // 0x3
+    field @Deprecated public static final int MINI_KIND = 1; // 0x1
+    field @Deprecated public static final String VIDEO_ID = "video_id";
+    field @Deprecated public static final String WIDTH = "width";
+  }
+
+  public static interface MediaStore.Video.VideoColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String BOOKMARK = "bookmark";
+    field public static final String CATEGORY = "category";
+    field public static final String COLOR_RANGE = "color_range";
+    field public static final String COLOR_STANDARD = "color_standard";
+    field public static final String COLOR_TRANSFER = "color_transfer";
+    field public static final String DESCRIPTION = "description";
+    field public static final String IS_PRIVATE = "isprivate";
+    field public static final String LANGUAGE = "language";
+    field @Deprecated public static final String LATITUDE = "latitude";
+    field @Deprecated public static final String LONGITUDE = "longitude";
+    field @Deprecated public static final String MINI_THUMB_MAGIC = "mini_thumb_magic";
+    field public static final String TAGS = "tags";
+  }
+
+  public interface OpenableColumns {
+    field public static final String DISPLAY_NAME = "_display_name";
+    field public static final String SIZE = "_size";
+  }
+
+  public class SearchRecentSuggestions {
+    ctor public SearchRecentSuggestions(android.content.Context, String, int);
+    method public void clearHistory();
+    method public void saveRecentQuery(String, String);
+    method protected void truncateHistory(android.content.ContentResolver, int);
+    field public static final String[] QUERIES_PROJECTION_1LINE;
+    field public static final String[] QUERIES_PROJECTION_2LINE;
+    field public static final int QUERIES_PROJECTION_DATE_INDEX = 1; // 0x1
+    field public static final int QUERIES_PROJECTION_DISPLAY1_INDEX = 3; // 0x3
+    field public static final int QUERIES_PROJECTION_DISPLAY2_INDEX = 4; // 0x4
+    field public static final int QUERIES_PROJECTION_QUERY_INDEX = 2; // 0x2
+  }
+
+  public final class Settings {
+    ctor public Settings();
+    method public static boolean canDrawOverlays(android.content.Context);
+    field public static final String ACTION_ACCESSIBILITY_SETTINGS = "android.settings.ACCESSIBILITY_SETTINGS";
+    field public static final String ACTION_ADD_ACCOUNT = "android.settings.ADD_ACCOUNT_SETTINGS";
+    field public static final String ACTION_AIRPLANE_MODE_SETTINGS = "android.settings.AIRPLANE_MODE_SETTINGS";
+    field public static final String ACTION_APN_SETTINGS = "android.settings.APN_SETTINGS";
+    field public static final String ACTION_APPLICATION_DETAILS_SETTINGS = "android.settings.APPLICATION_DETAILS_SETTINGS";
+    field public static final String ACTION_APPLICATION_DEVELOPMENT_SETTINGS = "android.settings.APPLICATION_DEVELOPMENT_SETTINGS";
+    field public static final String ACTION_APPLICATION_SETTINGS = "android.settings.APPLICATION_SETTINGS";
+    field public static final String ACTION_APP_NOTIFICATION_BUBBLE_SETTINGS = "android.settings.APP_NOTIFICATION_BUBBLE_SETTINGS";
+    field public static final String ACTION_APP_NOTIFICATION_SETTINGS = "android.settings.APP_NOTIFICATION_SETTINGS";
+    field public static final String ACTION_APP_OPEN_BY_DEFAULT_SETTINGS = "android.settings.APP_OPEN_BY_DEFAULT_SETTINGS";
+    field public static final String ACTION_APP_SEARCH_SETTINGS = "android.settings.APP_SEARCH_SETTINGS";
+    field public static final String ACTION_APP_USAGE_SETTINGS = "android.settings.action.APP_USAGE_SETTINGS";
+    field public static final String ACTION_AUTO_ROTATE_SETTINGS = "android.settings.AUTO_ROTATE_SETTINGS";
+    field public static final String ACTION_BATTERY_SAVER_SETTINGS = "android.settings.BATTERY_SAVER_SETTINGS";
+    field public static final String ACTION_BIOMETRIC_ENROLL = "android.settings.BIOMETRIC_ENROLL";
+    field public static final String ACTION_BLUETOOTH_SETTINGS = "android.settings.BLUETOOTH_SETTINGS";
+    field public static final String ACTION_CAPTIONING_SETTINGS = "android.settings.CAPTIONING_SETTINGS";
+    field public static final String ACTION_CAST_SETTINGS = "android.settings.CAST_SETTINGS";
+    field public static final String ACTION_CHANNEL_NOTIFICATION_SETTINGS = "android.settings.CHANNEL_NOTIFICATION_SETTINGS";
+    field public static final String ACTION_CONDITION_PROVIDER_SETTINGS = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
+    field public static final String ACTION_DATA_ROAMING_SETTINGS = "android.settings.DATA_ROAMING_SETTINGS";
+    field public static final String ACTION_DATA_USAGE_SETTINGS = "android.settings.DATA_USAGE_SETTINGS";
+    field public static final String ACTION_DATE_SETTINGS = "android.settings.DATE_SETTINGS";
+    field public static final String ACTION_DEVICE_INFO_SETTINGS = "android.settings.DEVICE_INFO_SETTINGS";
+    field public static final String ACTION_DISPLAY_SETTINGS = "android.settings.DISPLAY_SETTINGS";
+    field public static final String ACTION_DREAM_SETTINGS = "android.settings.DREAM_SETTINGS";
+    field @Deprecated public static final String ACTION_FINGERPRINT_ENROLL = "android.settings.FINGERPRINT_ENROLL";
+    field public static final String ACTION_HARD_KEYBOARD_SETTINGS = "android.settings.HARD_KEYBOARD_SETTINGS";
+    field public static final String ACTION_HOME_SETTINGS = "android.settings.HOME_SETTINGS";
+    field public static final String ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS = "android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS";
+    field public static final String ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS = "android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS";
+    field public static final String ACTION_INPUT_METHOD_SETTINGS = "android.settings.INPUT_METHOD_SETTINGS";
+    field public static final String ACTION_INPUT_METHOD_SUBTYPE_SETTINGS = "android.settings.INPUT_METHOD_SUBTYPE_SETTINGS";
+    field public static final String ACTION_INTERNAL_STORAGE_SETTINGS = "android.settings.INTERNAL_STORAGE_SETTINGS";
+    field public static final String ACTION_LOCALE_SETTINGS = "android.settings.LOCALE_SETTINGS";
+    field public static final String ACTION_LOCATION_SOURCE_SETTINGS = "android.settings.LOCATION_SOURCE_SETTINGS";
+    field public static final String ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS = "android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS";
+    field public static final String ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION = "android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION";
+    field public static final String ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS = "android.settings.MANAGE_ALL_SIM_PROFILES_SETTINGS";
+    field public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS";
+    field public static final String ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION = "android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION";
+    field public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS";
+    field public static final String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMISSION";
+    field public static final String ACTION_MANAGE_UNKNOWN_APP_SOURCES = "android.settings.MANAGE_UNKNOWN_APP_SOURCES";
+    field public static final String ACTION_MANAGE_WRITE_SETTINGS = "android.settings.action.MANAGE_WRITE_SETTINGS";
+    field public static final String ACTION_MEMORY_CARD_SETTINGS = "android.settings.MEMORY_CARD_SETTINGS";
+    field public static final String ACTION_NETWORK_OPERATOR_SETTINGS = "android.settings.NETWORK_OPERATOR_SETTINGS";
+    field public static final String ACTION_NFCSHARING_SETTINGS = "android.settings.NFCSHARING_SETTINGS";
+    field public static final String ACTION_NFC_PAYMENT_SETTINGS = "android.settings.NFC_PAYMENT_SETTINGS";
+    field public static final String ACTION_NFC_SETTINGS = "android.settings.NFC_SETTINGS";
+    field public static final String ACTION_NIGHT_DISPLAY_SETTINGS = "android.settings.NIGHT_DISPLAY_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_ASSISTANT_SETTINGS = "android.settings.NOTIFICATION_ASSISTANT_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_LISTENER_DETAIL_SETTINGS = "android.settings.NOTIFICATION_LISTENER_DETAIL_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_LISTENER_SETTINGS = "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS = "android.settings.NOTIFICATION_POLICY_ACCESS_SETTINGS";
+    field public static final String ACTION_PRINT_SETTINGS = "android.settings.ACTION_PRINT_SETTINGS";
+    field public static final String ACTION_PRIVACY_SETTINGS = "android.settings.PRIVACY_SETTINGS";
+    field public static final String ACTION_PROCESS_WIFI_EASY_CONNECT_URI = "android.settings.PROCESS_WIFI_EASY_CONNECT_URI";
+    field public static final String ACTION_QUICK_ACCESS_WALLET_SETTINGS = "android.settings.QUICK_ACCESS_WALLET_SETTINGS";
+    field public static final String ACTION_QUICK_LAUNCH_SETTINGS = "android.settings.QUICK_LAUNCH_SETTINGS";
+    field public static final String ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS = "android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS";
+    field public static final String ACTION_REQUEST_MANAGE_MEDIA = "android.settings.REQUEST_MANAGE_MEDIA";
+    field public static final String ACTION_REQUEST_SCHEDULE_EXACT_ALARM = "android.settings.REQUEST_SCHEDULE_EXACT_ALARM";
+    field public static final String ACTION_REQUEST_SET_AUTOFILL_SERVICE = "android.settings.REQUEST_SET_AUTOFILL_SERVICE";
+    field public static final String ACTION_SEARCH_SETTINGS = "android.search.action.SEARCH_SETTINGS";
+    field public static final String ACTION_SECURITY_SETTINGS = "android.settings.SECURITY_SETTINGS";
+    field public static final String ACTION_SETTINGS = "android.settings.SETTINGS";
+    field public static final String ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY = "android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY";
+    field public static final String ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
+    field public static final String ACTION_SHOW_WORK_POLICY_INFO = "android.settings.SHOW_WORK_POLICY_INFO";
+    field public static final String ACTION_SOUND_SETTINGS = "android.settings.SOUND_SETTINGS";
+    field @Deprecated public static final String ACTION_STORAGE_VOLUME_ACCESS_SETTINGS = "android.settings.STORAGE_VOLUME_ACCESS_SETTINGS";
+    field public static final String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS";
+    field public static final String ACTION_USAGE_ACCESS_SETTINGS = "android.settings.USAGE_ACCESS_SETTINGS";
+    field public static final String ACTION_USER_DICTIONARY_SETTINGS = "android.settings.USER_DICTIONARY_SETTINGS";
+    field public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE = "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
+    field public static final String ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE = "android.settings.VOICE_CONTROL_BATTERY_SAVER_MODE";
+    field public static final String ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE = "android.settings.VOICE_CONTROL_DO_NOT_DISTURB_MODE";
+    field public static final String ACTION_VOICE_INPUT_SETTINGS = "android.settings.VOICE_INPUT_SETTINGS";
+    field public static final String ACTION_VPN_SETTINGS = "android.settings.VPN_SETTINGS";
+    field public static final String ACTION_VR_LISTENER_SETTINGS = "android.settings.VR_LISTENER_SETTINGS";
+    field public static final String ACTION_WEBVIEW_SETTINGS = "android.settings.WEBVIEW_SETTINGS";
+    field public static final String ACTION_WIFI_ADD_NETWORKS = "android.settings.WIFI_ADD_NETWORKS";
+    field public static final String ACTION_WIFI_IP_SETTINGS = "android.settings.WIFI_IP_SETTINGS";
+    field public static final String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS";
+    field public static final String ACTION_WIRELESS_SETTINGS = "android.settings.WIRELESS_SETTINGS";
+    field public static final String ACTION_ZEN_MODE_PRIORITY_SETTINGS = "android.settings.ZEN_MODE_PRIORITY_SETTINGS";
+    field public static final int ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED = 1; // 0x1
+    field public static final int ADD_WIFI_RESULT_ALREADY_EXISTS = 2; // 0x2
+    field public static final int ADD_WIFI_RESULT_SUCCESS = 0; // 0x0
+    field public static final String AUTHORITY = "settings";
+    field public static final String EXTRA_ACCOUNT_TYPES = "account_types";
+    field public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
+    field public static final String EXTRA_APP_PACKAGE = "android.provider.extra.APP_PACKAGE";
+    field public static final String EXTRA_AUTHORITIES = "authorities";
+    field public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED = "android.settings.extra.battery_saver_mode_enabled";
+    field public static final String EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED = "android.provider.extra.BIOMETRIC_AUTHENTICATORS_ALLOWED";
+    field public static final String EXTRA_CHANNEL_FILTER_LIST = "android.provider.extra.CHANNEL_FILTER_LIST";
+    field public static final String EXTRA_CHANNEL_ID = "android.provider.extra.CHANNEL_ID";
+    field public static final String EXTRA_CONVERSATION_ID = "android.provider.extra.CONVERSATION_ID";
+    field public static final String EXTRA_DO_NOT_DISTURB_MODE_ENABLED = "android.settings.extra.do_not_disturb_mode_enabled";
+    field public static final String EXTRA_DO_NOT_DISTURB_MODE_MINUTES = "android.settings.extra.do_not_disturb_mode_minutes";
+    field public static final String EXTRA_EASY_CONNECT_ATTEMPTED_SSID = "android.provider.extra.EASY_CONNECT_ATTEMPTED_SSID";
+    field public static final String EXTRA_EASY_CONNECT_BAND_LIST = "android.provider.extra.EASY_CONNECT_BAND_LIST";
+    field public static final String EXTRA_EASY_CONNECT_CHANNEL_LIST = "android.provider.extra.EASY_CONNECT_CHANNEL_LIST";
+    field public static final String EXTRA_EASY_CONNECT_ERROR_CODE = "android.provider.extra.EASY_CONNECT_ERROR_CODE";
+    field public static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
+    field public static final String EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME = "android.provider.extra.NOTIFICATION_LISTENER_COMPONENT_NAME";
+    field public static final String EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY = "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY";
+    field public static final String EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI = "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI";
+    field public static final String EXTRA_SUB_ID = "android.provider.extra.SUB_ID";
+    field public static final String EXTRA_WIFI_NETWORK_LIST = "android.provider.extra.WIFI_NETWORK_LIST";
+    field public static final String EXTRA_WIFI_NETWORK_RESULT_LIST = "android.provider.extra.WIFI_NETWORK_RESULT_LIST";
+    field public static final String INTENT_CATEGORY_USAGE_ACCESS_CONFIG = "android.intent.category.USAGE_ACCESS_CONFIG";
+    field public static final String METADATA_USAGE_ACCESS_REASON = "android.settings.metadata.USAGE_ACCESS_REASON";
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    ctor public Settings.Global();
+    method public static float getFloat(android.content.ContentResolver, String, float);
+    method public static float getFloat(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static int getInt(android.content.ContentResolver, String, int);
+    method public static int getInt(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static long getLong(android.content.ContentResolver, String, long);
+    method public static long getLong(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static String getString(android.content.ContentResolver, String);
+    method public static android.net.Uri getUriFor(String);
+    method public static boolean putFloat(android.content.ContentResolver, String, float);
+    method public static boolean putInt(android.content.ContentResolver, String, int);
+    method public static boolean putLong(android.content.ContentResolver, String, long);
+    method public static boolean putString(android.content.ContentResolver, String, String);
+    field public static final String ADB_ENABLED = "adb_enabled";
+    field public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
+    field public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
+    field public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+    field public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
+    field public static final String APPLY_RAMPING_RINGER = "apply_ramping_ringer";
+    field public static final String AUTO_TIME = "auto_time";
+    field public static final String AUTO_TIME_ZONE = "auto_time_zone";
+    field public static final String BLUETOOTH_ON = "bluetooth_on";
+    field public static final String BOOT_COUNT = "boot_count";
+    field public static final String CONTACT_METADATA_SYNC_ENABLED = "contact_metadata_sync_enabled";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_ROAMING = "data_roaming";
+    field public static final String DEBUG_APP = "debug_app";
+    field public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
+    field public static final String DEVICE_NAME = "device_name";
+    field public static final String DEVICE_PROVISIONED = "device_provisioned";
+    field public static final String HTTP_PROXY = "http_proxy";
+    field @Deprecated public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+    field public static final String MODE_RINGER = "mode_ringer";
+    field public static final String NETWORK_PREFERENCE = "network_preference";
+    field public static final String RADIO_BLUETOOTH = "bluetooth";
+    field public static final String RADIO_CELL = "cell";
+    field public static final String RADIO_NFC = "nfc";
+    field public static final String RADIO_WIFI = "wifi";
+    field @Deprecated public static final String SHOW_PROCESSES = "show_processes";
+    field public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
+    field public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+    field public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
+    field public static final String USE_GOOGLE_MAIL = "use_google_mail";
+    field public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+    field public static final String WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN = "wifi_device_owner_configs_lockdown";
+    field public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
+    field public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+    field @Deprecated public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+    field public static final String WIFI_ON = "wifi_on";
+    field @Deprecated public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
+    field public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+    field public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+  }
+
+  public static class Settings.NameValueTable implements android.provider.BaseColumns {
+    ctor public Settings.NameValueTable();
+    method public static android.net.Uri getUriFor(android.net.Uri, String);
+    method protected static boolean putString(android.content.ContentResolver, android.net.Uri, String, String);
+    field public static final String NAME = "name";
+    field public static final String VALUE = "value";
+  }
+
+  public static final class Settings.Panel {
+    field public static final String ACTION_INTERNET_CONNECTIVITY = "android.settings.panel.action.INTERNET_CONNECTIVITY";
+    field public static final String ACTION_NFC = "android.settings.panel.action.NFC";
+    field public static final String ACTION_VOLUME = "android.settings.panel.action.VOLUME";
+    field public static final String ACTION_WIFI = "android.settings.panel.action.WIFI";
+  }
+
+  public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
+    ctor public Settings.Secure();
+    method public static float getFloat(android.content.ContentResolver, String, float);
+    method public static float getFloat(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static int getInt(android.content.ContentResolver, String, int);
+    method public static int getInt(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static long getLong(android.content.ContentResolver, String, long);
+    method public static long getLong(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static String getString(android.content.ContentResolver, String);
+    method public static android.net.Uri getUriFor(String);
+    method @Deprecated public static boolean isLocationProviderEnabled(android.content.ContentResolver, String);
+    method public static boolean putFloat(android.content.ContentResolver, String, float);
+    method public static boolean putInt(android.content.ContentResolver, String, int);
+    method public static boolean putLong(android.content.ContentResolver, String, long);
+    method public static boolean putString(android.content.ContentResolver, String, String);
+    method @Deprecated public static void setLocationProviderEnabled(android.content.ContentResolver, String, boolean);
+    field public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED = "accessibility_display_inversion_enabled";
+    field public static final String ACCESSIBILITY_ENABLED = "accessibility_enabled";
+    field @Deprecated public static final String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password";
+    field @Deprecated public static final String ADB_ENABLED = "adb_enabled";
+    field public static final String ALLOWED_GEOLOCATION_ORIGINS = "allowed_geolocation_origins";
+    field @Deprecated public static final String ALLOW_MOCK_LOCATION = "mock_location";
+    field public static final String ANDROID_ID = "android_id";
+    field @Deprecated public static final String BACKGROUND_DATA = "background_data";
+    field @Deprecated public static final String BLUETOOTH_ON = "bluetooth_on";
+    field public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DATA_ROAMING = "data_roaming";
+    field public static final String DEFAULT_INPUT_METHOD = "default_input_method";
+    field @Deprecated public static final String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
+    field @Deprecated public static final String DEVICE_PROVISIONED = "device_provisioned";
+    field public static final String ENABLED_ACCESSIBILITY_SERVICES = "enabled_accessibility_services";
+    field public static final String ENABLED_INPUT_METHODS = "enabled_input_methods";
+    field @Deprecated public static final String HTTP_PROXY = "http_proxy";
+    field public static final String INPUT_METHOD_SELECTOR_VISIBILITY = "input_method_selector_visibility";
+    field @Deprecated public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+    field @Deprecated public static final String LOCATION_MODE = "location_mode";
+    field @Deprecated public static final int LOCATION_MODE_BATTERY_SAVING = 2; // 0x2
+    field @Deprecated public static final int LOCATION_MODE_HIGH_ACCURACY = 3; // 0x3
+    field public static final int LOCATION_MODE_OFF = 0; // 0x0
+    field @Deprecated public static final int LOCATION_MODE_SENSORS_ONLY = 1; // 0x1
+    field @Deprecated public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
+    field @Deprecated public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";
+    field @Deprecated public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
+    field @Deprecated public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
+    field @Deprecated public static final String LOGGING_ID = "logging_id";
+    field @Deprecated public static final String NETWORK_PREFERENCE = "network_preference";
+    field public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
+    field public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
+    field public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
+    field public static final String RTT_CALLING_MODE = "rtt_calling_mode";
+    field public static final String SECURE_FRP_MODE = "secure_frp_mode";
+    field public static final String SELECTED_INPUT_METHOD_SUBTYPE = "selected_input_method_subtype";
+    field public static final String SETTINGS_CLASSNAME = "settings_classname";
+    field public static final String SKIP_FIRST_USE_HINTS = "skip_first_use_hints";
+    field public static final String TOUCH_EXPLORATION_ENABLED = "touch_exploration_enabled";
+    field @Deprecated public static final String TTS_DEFAULT_COUNTRY = "tts_default_country";
+    field @Deprecated public static final String TTS_DEFAULT_LANG = "tts_default_lang";
+    field public static final String TTS_DEFAULT_PITCH = "tts_default_pitch";
+    field public static final String TTS_DEFAULT_RATE = "tts_default_rate";
+    field public static final String TTS_DEFAULT_SYNTH = "tts_default_synth";
+    field @Deprecated public static final String TTS_DEFAULT_VARIANT = "tts_default_variant";
+    field public static final String TTS_ENABLED_PLUGINS = "tts_enabled_plugins";
+    field @Deprecated public static final String TTS_USE_DEFAULTS = "tts_use_defaults";
+    field @Deprecated public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
+    field @Deprecated public static final String USE_GOOGLE_MAIL = "use_google_mail";
+    field @Deprecated public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
+    field @Deprecated public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+    field @Deprecated public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+    field @Deprecated public static final String WIFI_ON = "wifi_on";
+    field @Deprecated public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
+    field @Deprecated public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
+    field @Deprecated public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_WATCH_LIST = "wifi_watchdog_watch_list";
+  }
+
+  public static class Settings.SettingNotFoundException extends android.util.AndroidException {
+    ctor public Settings.SettingNotFoundException(String);
+  }
+
+  public static final class Settings.System extends android.provider.Settings.NameValueTable {
+    ctor public Settings.System();
+    method public static boolean canWrite(android.content.Context);
+    method public static void getConfiguration(android.content.ContentResolver, android.content.res.Configuration);
+    method public static float getFloat(android.content.ContentResolver, String, float);
+    method public static float getFloat(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static int getInt(android.content.ContentResolver, String, int);
+    method public static int getInt(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method public static long getLong(android.content.ContentResolver, String, long);
+    method public static long getLong(android.content.ContentResolver, String) throws android.provider.Settings.SettingNotFoundException;
+    method @Deprecated public static boolean getShowGTalkServiceStatus(android.content.ContentResolver);
+    method public static String getString(android.content.ContentResolver, String);
+    method public static android.net.Uri getUriFor(String);
+    method public static boolean putConfiguration(android.content.ContentResolver, android.content.res.Configuration);
+    method public static boolean putFloat(android.content.ContentResolver, String, float);
+    method public static boolean putInt(android.content.ContentResolver, String, int);
+    method public static boolean putLong(android.content.ContentResolver, String, long);
+    method public static boolean putString(android.content.ContentResolver, String, String);
+    method @Deprecated public static void setShowGTalkServiceStatus(android.content.ContentResolver, boolean);
+    field public static final String ACCELEROMETER_ROTATION = "accelerometer_rotation";
+    field @Deprecated public static final String ADB_ENABLED = "adb_enabled";
+    field @Deprecated public static final String AIRPLANE_MODE_ON = "airplane_mode_on";
+    field @Deprecated public static final String AIRPLANE_MODE_RADIOS = "airplane_mode_radios";
+    field public static final String ALARM_ALERT = "alarm_alert";
+    field @Deprecated public static final String ALWAYS_FINISH_ACTIVITIES = "always_finish_activities";
+    field @Deprecated public static final String ANDROID_ID = "android_id";
+    field @Deprecated public static final String ANIMATOR_DURATION_SCALE = "animator_duration_scale";
+    field @Deprecated public static final String AUTO_TIME = "auto_time";
+    field @Deprecated public static final String AUTO_TIME_ZONE = "auto_time_zone";
+    field public static final String BLUETOOTH_DISCOVERABILITY = "bluetooth_discoverability";
+    field public static final String BLUETOOTH_DISCOVERABILITY_TIMEOUT = "bluetooth_discoverability_timeout";
+    field @Deprecated public static final String BLUETOOTH_ON = "bluetooth_on";
+    field public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String DATA_ROAMING = "data_roaming";
+    field @Deprecated public static final String DATE_FORMAT = "date_format";
+    field @Deprecated public static final String DEBUG_APP = "debug_app";
+    field public static final android.net.Uri DEFAULT_ALARM_ALERT_URI;
+    field public static final android.net.Uri DEFAULT_NOTIFICATION_URI;
+    field public static final android.net.Uri DEFAULT_RINGTONE_URI;
+    field @Deprecated public static final String DEVICE_PROVISIONED = "device_provisioned";
+    field @Deprecated public static final String DIM_SCREEN = "dim_screen";
+    field public static final String DTMF_TONE_TYPE_WHEN_DIALING = "dtmf_tone_type";
+    field public static final String DTMF_TONE_WHEN_DIALING = "dtmf_tone";
+    field public static final String END_BUTTON_BEHAVIOR = "end_button_behavior";
+    field public static final String FONT_SCALE = "font_scale";
+    field public static final String HAPTIC_FEEDBACK_ENABLED = "haptic_feedback_enabled";
+    field @Deprecated public static final String HTTP_PROXY = "http_proxy";
+    field @Deprecated public static final String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
+    field @Deprecated public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
+    field @Deprecated public static final String LOCK_PATTERN_ENABLED = "lock_pattern_autolock";
+    field @Deprecated public static final String LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED = "lock_pattern_tactile_feedback_enabled";
+    field @Deprecated public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
+    field @Deprecated public static final String LOGGING_ID = "logging_id";
+    field @Deprecated public static final String MODE_RINGER = "mode_ringer";
+    field public static final String MODE_RINGER_STREAMS_AFFECTED = "mode_ringer_streams_affected";
+    field public static final String MUTE_STREAMS_AFFECTED = "mute_streams_affected";
+    field @Deprecated public static final String NETWORK_PREFERENCE = "network_preference";
+    field @Deprecated public static final String NEXT_ALARM_FORMATTED = "next_alarm_formatted";
+    field public static final String NOTIFICATION_SOUND = "notification_sound";
+    field @Deprecated public static final String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
+    field @Deprecated public static final String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
+    field @Deprecated public static final String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
+    field @Deprecated public static final String RADIO_BLUETOOTH = "bluetooth";
+    field @Deprecated public static final String RADIO_CELL = "cell";
+    field @Deprecated public static final String RADIO_NFC = "nfc";
+    field @Deprecated public static final String RADIO_WIFI = "wifi";
+    field public static final String RINGTONE = "ringtone";
+    field public static final String SCREEN_BRIGHTNESS = "screen_brightness";
+    field public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode";
+    field public static final int SCREEN_BRIGHTNESS_MODE_AUTOMATIC = 1; // 0x1
+    field public static final int SCREEN_BRIGHTNESS_MODE_MANUAL = 0; // 0x0
+    field public static final String SCREEN_OFF_TIMEOUT = "screen_off_timeout";
+    field @Deprecated public static final String SETTINGS_CLASSNAME = "settings_classname";
+    field public static final String SETUP_WIZARD_HAS_RUN = "setup_wizard_has_run";
+    field public static final String SHOW_GTALK_SERVICE_STATUS = "SHOW_GTALK_SERVICE_STATUS";
+    field @Deprecated public static final String SHOW_PROCESSES = "show_processes";
+    field @Deprecated public static final String SHOW_WEB_SUGGESTIONS = "show_web_suggestions";
+    field public static final String SOUND_EFFECTS_ENABLED = "sound_effects_enabled";
+    field @Deprecated public static final String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
+    field public static final String TEXT_AUTO_CAPS = "auto_caps";
+    field public static final String TEXT_AUTO_PUNCTUATE = "auto_punctuate";
+    field public static final String TEXT_AUTO_REPLACE = "auto_replace";
+    field public static final String TEXT_SHOW_PASSWORD = "show_password";
+    field public static final String TIME_12_24 = "time_12_24";
+    field @Deprecated public static final String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
+    field @Deprecated public static final String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled";
+    field public static final String USER_ROTATION = "user_rotation";
+    field @Deprecated public static final String USE_GOOGLE_MAIL = "use_google_mail";
+    field public static final String VIBRATE_ON = "vibrate_on";
+    field public static final String VIBRATE_WHEN_RINGING = "vibrate_when_ringing";
+    field @Deprecated public static final String WAIT_FOR_DEBUGGER = "wait_for_debugger";
+    field @Deprecated public static final String WALLPAPER_ACTIVITY = "wallpaper_activity";
+    field @Deprecated public static final String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count";
+    field @Deprecated public static final String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON = "wifi_networks_available_notification_on";
+    field @Deprecated public static final String WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY = "wifi_networks_available_repeat_delay";
+    field @Deprecated public static final String WIFI_NUM_OPEN_NETWORKS_KEPT = "wifi_num_open_networks_kept";
+    field @Deprecated public static final String WIFI_ON = "wifi_on";
+    field @Deprecated public static final String WIFI_SLEEP_POLICY = "wifi_sleep_policy";
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_DEFAULT = 0; // 0x0
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER = 2; // 0x2
+    field @Deprecated public static final int WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED = 1; // 0x1
+    field @Deprecated public static final String WIFI_STATIC_DNS1 = "wifi_static_dns1";
+    field @Deprecated public static final String WIFI_STATIC_DNS2 = "wifi_static_dns2";
+    field @Deprecated public static final String WIFI_STATIC_GATEWAY = "wifi_static_gateway";
+    field @Deprecated public static final String WIFI_STATIC_IP = "wifi_static_ip";
+    field @Deprecated public static final String WIFI_STATIC_NETMASK = "wifi_static_netmask";
+    field @Deprecated public static final String WIFI_USE_STATIC_IP = "wifi_use_static_ip";
+    field @Deprecated public static final String WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE = "wifi_watchdog_acceptable_packet_loss_percentage";
+    field @Deprecated public static final String WIFI_WATCHDOG_AP_COUNT = "wifi_watchdog_ap_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS = "wifi_watchdog_background_check_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED = "wifi_watchdog_background_check_enabled";
+    field @Deprecated public static final String WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS = "wifi_watchdog_background_check_timeout_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT = "wifi_watchdog_initial_ignored_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_MAX_AP_CHECKS = "wifi_watchdog_max_ap_checks";
+    field @Deprecated public static final String WIFI_WATCHDOG_ON = "wifi_watchdog_on";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_COUNT = "wifi_watchdog_ping_count";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_DELAY_MS = "wifi_watchdog_ping_delay_ms";
+    field @Deprecated public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms";
+    field @Deprecated public static final String WINDOW_ANIMATION_SCALE = "window_animation_scale";
+  }
+
+  public class SettingsSlicesContract {
+    field public static final String AUTHORITY = "android.settings.slices";
+    field public static final android.net.Uri BASE_URI;
+    field public static final String KEY_AIRPLANE_MODE = "airplane_mode";
+    field public static final String KEY_BATTERY_SAVER = "battery_saver";
+    field public static final String KEY_BLUETOOTH = "bluetooth";
+    field public static final String KEY_LOCATION = "location";
+    field public static final String KEY_WIFI = "wifi";
+    field public static final String PATH_SETTING_ACTION = "action";
+    field public static final String PATH_SETTING_INTENT = "intent";
+  }
+
+  public final class SimPhonebookContract {
+    field public static final String AUTHORITY = "com.android.simphonebook";
+    field @NonNull public static final android.net.Uri AUTHORITY_URI;
+  }
+
+  public static final class SimPhonebookContract.ElementaryFiles {
+    method @NonNull public static android.net.Uri getItemUri(int, int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sim-elementary-file";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/sim-elementary-file";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final int EF_ADN = 1; // 0x1
+    field public static final int EF_FDN = 2; // 0x2
+    field public static final int EF_SDN = 3; // 0x3
+    field public static final String EF_TYPE = "ef_type";
+    field public static final int EF_UNKNOWN = 0; // 0x0
+    field public static final String MAX_RECORDS = "max_records";
+    field public static final String NAME_MAX_LENGTH = "name_max_length";
+    field public static final String PHONE_NUMBER_MAX_LENGTH = "phone_number_max_length";
+    field public static final String RECORD_COUNT = "record_count";
+    field public static final String SLOT_INDEX = "slot_index";
+    field public static final String SUBSCRIPTION_ID = "subscription_id";
+  }
+
+  public static final class SimPhonebookContract.SimRecords {
+    method @NonNull public static android.net.Uri getContentUri(int, int);
+    method @IntRange(from=0) @WorkerThread public static int getEncodedNameLength(@NonNull android.content.ContentResolver, @NonNull String);
+    method @NonNull public static android.net.Uri getItemUri(int, int, @IntRange(from=1) int);
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/sim-contact_v2";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/sim-contact_v2";
+    field public static final String ELEMENTARY_FILE_TYPE = "elementary_file_type";
+    field public static final int ERROR_NAME_UNSUPPORTED = -1; // 0xffffffff
+    field public static final String NAME = "name";
+    field public static final String PHONE_NUMBER = "phone_number";
+    field public static final String RECORD_NUMBER = "record_number";
+    field public static final String SUBSCRIPTION_ID = "subscription_id";
+  }
+
+  public class SyncStateContract {
+    ctor public SyncStateContract();
+  }
+
+  public static interface SyncStateContract.Columns extends android.provider.BaseColumns {
+    field public static final String ACCOUNT_NAME = "account_name";
+    field public static final String ACCOUNT_TYPE = "account_type";
+    field public static final String DATA = "data";
+  }
+
+  public static class SyncStateContract.Constants implements android.provider.SyncStateContract.Columns {
+    ctor public SyncStateContract.Constants();
+    field public static final String CONTENT_DIRECTORY = "syncstate";
+  }
+
+  public static final class SyncStateContract.Helpers {
+    ctor public SyncStateContract.Helpers();
+    method public static byte[] get(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.util.Pair<android.net.Uri,byte[]> getWithUri(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account) throws android.os.RemoteException;
+    method public static android.net.Uri insert(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    method public static android.content.ContentProviderOperation newSetOperation(android.net.Uri, android.accounts.Account, byte[]);
+    method public static android.content.ContentProviderOperation newUpdateOperation(android.net.Uri, byte[]);
+    method public static void set(android.content.ContentProviderClient, android.net.Uri, android.accounts.Account, byte[]) throws android.os.RemoteException;
+    method public static void update(android.content.ContentProviderClient, android.net.Uri, byte[]) throws android.os.RemoteException;
+  }
+
+  public final class Telephony {
+  }
+
+  public static interface Telephony.BaseMmsColumns extends android.provider.BaseColumns {
+    field public static final String CONTENT_CLASS = "ct_cls";
+    field public static final String CONTENT_LOCATION = "ct_l";
+    field public static final String CONTENT_TYPE = "ct_t";
+    field public static final String CREATOR = "creator";
+    field public static final String DATE = "date";
+    field public static final String DATE_SENT = "date_sent";
+    field public static final String DELIVERY_REPORT = "d_rpt";
+    field public static final String DELIVERY_TIME = "d_tm";
+    field public static final String EXPIRY = "exp";
+    field public static final String LOCKED = "locked";
+    field public static final String MESSAGE_BOX = "msg_box";
+    field public static final int MESSAGE_BOX_ALL = 0; // 0x0
+    field public static final int MESSAGE_BOX_DRAFTS = 3; // 0x3
+    field public static final int MESSAGE_BOX_FAILED = 5; // 0x5
+    field public static final int MESSAGE_BOX_INBOX = 1; // 0x1
+    field public static final int MESSAGE_BOX_OUTBOX = 4; // 0x4
+    field public static final int MESSAGE_BOX_SENT = 2; // 0x2
+    field public static final String MESSAGE_CLASS = "m_cls";
+    field public static final String MESSAGE_ID = "m_id";
+    field public static final String MESSAGE_SIZE = "m_size";
+    field public static final String MESSAGE_TYPE = "m_type";
+    field public static final String MMS_VERSION = "v";
+    field public static final String PRIORITY = "pri";
+    field public static final String READ = "read";
+    field public static final String READ_REPORT = "rr";
+    field public static final String READ_STATUS = "read_status";
+    field public static final String REPORT_ALLOWED = "rpt_a";
+    field public static final String RESPONSE_STATUS = "resp_st";
+    field public static final String RESPONSE_TEXT = "resp_txt";
+    field public static final String RETRIEVE_STATUS = "retr_st";
+    field public static final String RETRIEVE_TEXT = "retr_txt";
+    field public static final String RETRIEVE_TEXT_CHARSET = "retr_txt_cs";
+    field public static final String SEEN = "seen";
+    field public static final String STATUS = "st";
+    field public static final String SUBJECT = "sub";
+    field public static final String SUBJECT_CHARSET = "sub_cs";
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+    field public static final String TEXT_ONLY = "text_only";
+    field public static final String THREAD_ID = "thread_id";
+    field public static final String TRANSACTION_ID = "tr_id";
+  }
+
+  public static interface Telephony.CanonicalAddressesColumns extends android.provider.BaseColumns {
+    field public static final String ADDRESS = "address";
+  }
+
+  public static final class Telephony.CarrierId implements android.provider.BaseColumns {
+    method @NonNull public static android.net.Uri getSpecificCarrierIdUriForSubscriptionId(int);
+    method public static android.net.Uri getUriForSubscriptionId(int);
+    field public static final String CARRIER_ID = "carrier_id";
+    field public static final String CARRIER_NAME = "carrier_name";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String SPECIFIC_CARRIER_ID = "specific_carrier_id";
+    field public static final String SPECIFIC_CARRIER_ID_NAME = "specific_carrier_id_name";
+  }
+
+  public static final class Telephony.Carriers implements android.provider.BaseColumns {
+    field public static final String APN = "apn";
+    field public static final String AUTH_TYPE = "authtype";
+    field @Deprecated public static final String BEARER = "bearer";
+    field public static final String CARRIER_ENABLED = "carrier_enabled";
+    field public static final String CARRIER_ID = "carrier_id";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String CURRENT = "current";
+    field public static final String DEFAULT_SORT_ORDER = "name ASC";
+    field @Deprecated public static final String MCC = "mcc";
+    field public static final String MMSC = "mmsc";
+    field public static final String MMSPORT = "mmsport";
+    field public static final String MMSPROXY = "mmsproxy";
+    field @Deprecated public static final String MNC = "mnc";
+    field @Deprecated public static final String MVNO_MATCH_DATA = "mvno_match_data";
+    field @Deprecated public static final String MVNO_TYPE = "mvno_type";
+    field public static final String NAME = "name";
+    field public static final String NETWORK_TYPE_BITMASK = "network_type_bitmask";
+    field @Deprecated public static final String NUMERIC = "numeric";
+    field public static final String PASSWORD = "password";
+    field public static final String PORT = "port";
+    field public static final String PROTOCOL = "protocol";
+    field public static final String PROXY = "proxy";
+    field public static final String ROAMING_PROTOCOL = "roaming_protocol";
+    field public static final String SERVER = "server";
+    field @NonNull public static final android.net.Uri SIM_APN_URI;
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+    field public static final String TYPE = "type";
+    field public static final String USER = "user";
+  }
+
+  public static final class Telephony.Mms implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final android.net.Uri REPORT_REQUEST_URI;
+    field public static final android.net.Uri REPORT_STATUS_URI;
+  }
+
+  public static final class Telephony.Mms.Addr implements android.provider.BaseColumns {
+    method @NonNull public static android.net.Uri getAddrUriForMessage(@NonNull String);
+    field public static final String ADDRESS = "address";
+    field public static final String CHARSET = "charset";
+    field public static final String CONTACT_ID = "contact_id";
+    field public static final String MSG_ID = "msg_id";
+    field public static final String TYPE = "type";
+  }
+
+  public static final class Telephony.Mms.Draft implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Mms.Inbox implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Mms.Intents {
+    field public static final String CONTENT_CHANGED_ACTION = "android.intent.action.CONTENT_CHANGED";
+    field public static final String DELETED_CONTENTS = "deleted_contents";
+  }
+
+  public static final class Telephony.Mms.Outbox implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Mms.Part implements android.provider.BaseColumns {
+    method @NonNull public static android.net.Uri getPartUriForMessage(@NonNull String);
+    field public static final String CHARSET = "chset";
+    field public static final String CONTENT_DISPOSITION = "cd";
+    field public static final String CONTENT_ID = "cid";
+    field public static final String CONTENT_LOCATION = "cl";
+    field public static final String CONTENT_TYPE = "ct";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String CT_START = "ctt_s";
+    field public static final String CT_TYPE = "ctt_t";
+    field public static final String FILENAME = "fn";
+    field public static final String MSG_ID = "mid";
+    field public static final String NAME = "name";
+    field public static final String SEQ = "seq";
+    field public static final String TEXT = "text";
+    field public static final String _DATA = "_data";
+  }
+
+  public static final class Telephony.Mms.Rate {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String SENT_TIME = "sent_time";
+  }
+
+  public static final class Telephony.Mms.Sent implements android.provider.Telephony.BaseMmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.MmsSms implements android.provider.BaseColumns {
+    field public static final android.net.Uri CONTENT_CONVERSATIONS_URI;
+    field public static final android.net.Uri CONTENT_DRAFT_URI;
+    field public static final android.net.Uri CONTENT_FILTER_BYPHONE_URI;
+    field public static final android.net.Uri CONTENT_LOCKED_URI;
+    field public static final android.net.Uri CONTENT_UNDELIVERED_URI;
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final int ERR_TYPE_GENERIC = 1; // 0x1
+    field public static final int ERR_TYPE_GENERIC_PERMANENT = 10; // 0xa
+    field public static final int ERR_TYPE_MMS_PROTO_PERMANENT = 12; // 0xc
+    field public static final int ERR_TYPE_MMS_PROTO_TRANSIENT = 3; // 0x3
+    field public static final int ERR_TYPE_SMS_PROTO_PERMANENT = 11; // 0xb
+    field public static final int ERR_TYPE_SMS_PROTO_TRANSIENT = 2; // 0x2
+    field public static final int ERR_TYPE_TRANSPORT_FAILURE = 4; // 0x4
+    field public static final int MMS_PROTO = 1; // 0x1
+    field public static final int NO_ERROR = 0; // 0x0
+    field public static final android.net.Uri SEARCH_URI;
+    field public static final int SMS_PROTO = 0; // 0x0
+    field public static final String TYPE_DISCRIMINATOR_COLUMN = "transport_type";
+  }
+
+  public static final class Telephony.MmsSms.PendingMessages implements android.provider.BaseColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DUE_TIME = "due_time";
+    field public static final String ERROR_CODE = "err_code";
+    field public static final String ERROR_TYPE = "err_type";
+    field public static final String LAST_TRY = "last_try";
+    field public static final String MSG_ID = "msg_id";
+    field public static final String MSG_TYPE = "msg_type";
+    field public static final String PROTO_TYPE = "proto_type";
+    field public static final String RETRY_INDEX = "retry_index";
+    field public static final String SUBSCRIPTION_ID = "pending_sub_id";
+  }
+
+  public static final class Telephony.ServiceStateTable {
+    method public static android.net.Uri getUriForSubscriptionId(int);
+    method public static android.net.Uri getUriForSubscriptionIdAndField(int, String);
+    field public static final String AUTHORITY = "service-state";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_NETWORK_TYPE = "data_network_type";
+    field public static final String DATA_REG_STATE = "data_reg_state";
+    field public static final String DUPLEX_MODE = "duplex_mode";
+    field public static final String IS_MANUAL_NETWORK_SELECTION = "is_manual_network_selection";
+    field public static final String VOICE_OPERATOR_NUMERIC = "voice_operator_numeric";
+    field public static final String VOICE_REG_STATE = "voice_reg_state";
+  }
+
+  public static final class Telephony.Sms implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    method public static String getDefaultSmsPackage(android.content.Context);
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Conversations implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final String MESSAGE_COUNT = "msg_count";
+    field public static final String SNIPPET = "snippet";
+  }
+
+  public static final class Telephony.Sms.Draft implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Inbox implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Intents {
+    method public static android.telephony.SmsMessage[] getMessagesFromIntent(android.content.Intent);
+    field public static final String ACTION_CHANGE_DEFAULT = "android.provider.Telephony.ACTION_CHANGE_DEFAULT";
+    field public static final String ACTION_DEFAULT_SMS_PACKAGE_CHANGED = "android.provider.action.DEFAULT_SMS_PACKAGE_CHANGED";
+    field public static final String ACTION_EXTERNAL_PROVIDER_CHANGE = "android.provider.action.EXTERNAL_PROVIDER_CHANGE";
+    field public static final String DATA_SMS_RECEIVED_ACTION = "android.intent.action.DATA_SMS_RECEIVED";
+    field public static final String EXTRA_IS_DEFAULT_SMS_APP = "android.provider.extra.IS_DEFAULT_SMS_APP";
+    field public static final String EXTRA_PACKAGE_NAME = "package";
+    field public static final int RESULT_SMS_DATABASE_ERROR = 10; // 0xa
+    field public static final int RESULT_SMS_DISPATCH_FAILURE = 6; // 0x6
+    field public static final int RESULT_SMS_DUPLICATED = 5; // 0x5
+    field public static final int RESULT_SMS_GENERIC_ERROR = 2; // 0x2
+    field public static final int RESULT_SMS_HANDLED = 1; // 0x1
+    field public static final int RESULT_SMS_INVALID_URI = 11; // 0xb
+    field public static final int RESULT_SMS_NULL_MESSAGE = 8; // 0x8
+    field public static final int RESULT_SMS_NULL_PDU = 7; // 0x7
+    field public static final int RESULT_SMS_OUT_OF_MEMORY = 3; // 0x3
+    field public static final int RESULT_SMS_RECEIVED_WHILE_ENCRYPTED = 9; // 0x9
+    field public static final int RESULT_SMS_UNSUPPORTED = 4; // 0x4
+    field @Deprecated public static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
+    field public static final String SIM_FULL_ACTION = "android.provider.Telephony.SIM_FULL";
+    field public static final String SMS_CB_RECEIVED_ACTION = "android.provider.Telephony.SMS_CB_RECEIVED";
+    field public static final String SMS_DELIVER_ACTION = "android.provider.Telephony.SMS_DELIVER";
+    field public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
+    field public static final String SMS_REJECTED_ACTION = "android.provider.Telephony.SMS_REJECTED";
+    field public static final String SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION = "android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED";
+    field public static final String WAP_PUSH_DELIVER_ACTION = "android.provider.Telephony.WAP_PUSH_DELIVER";
+    field public static final String WAP_PUSH_RECEIVED_ACTION = "android.provider.Telephony.WAP_PUSH_RECEIVED";
+  }
+
+  public static final class Telephony.Sms.Outbox implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static final class Telephony.Sms.Sent implements android.provider.BaseColumns android.provider.Telephony.TextBasedSmsColumns {
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+  }
+
+  public static interface Telephony.TextBasedSmsColumns {
+    field public static final String ADDRESS = "address";
+    field public static final String BODY = "body";
+    field public static final String CREATOR = "creator";
+    field public static final String DATE = "date";
+    field public static final String DATE_SENT = "date_sent";
+    field public static final String ERROR_CODE = "error_code";
+    field public static final String LOCKED = "locked";
+    field public static final int MESSAGE_TYPE_ALL = 0; // 0x0
+    field public static final int MESSAGE_TYPE_DRAFT = 3; // 0x3
+    field public static final int MESSAGE_TYPE_FAILED = 5; // 0x5
+    field public static final int MESSAGE_TYPE_INBOX = 1; // 0x1
+    field public static final int MESSAGE_TYPE_OUTBOX = 4; // 0x4
+    field public static final int MESSAGE_TYPE_QUEUED = 6; // 0x6
+    field public static final int MESSAGE_TYPE_SENT = 2; // 0x2
+    field public static final String PERSON = "person";
+    field public static final String PROTOCOL = "protocol";
+    field public static final String READ = "read";
+    field public static final String REPLY_PATH_PRESENT = "reply_path_present";
+    field public static final String SEEN = "seen";
+    field public static final String SERVICE_CENTER = "service_center";
+    field public static final String STATUS = "status";
+    field public static final int STATUS_COMPLETE = 0; // 0x0
+    field public static final int STATUS_FAILED = 64; // 0x40
+    field public static final int STATUS_NONE = -1; // 0xffffffff
+    field public static final int STATUS_PENDING = 32; // 0x20
+    field public static final String SUBJECT = "subject";
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+    field public static final String THREAD_ID = "thread_id";
+    field public static final String TYPE = "type";
+  }
+
+  public static final class Telephony.Threads implements android.provider.Telephony.ThreadsColumns {
+    method public static long getOrCreateThreadId(android.content.Context, String);
+    method public static long getOrCreateThreadId(android.content.Context, java.util.Set<java.lang.String>);
+    field public static final int BROADCAST_THREAD = 1; // 0x1
+    field public static final int COMMON_THREAD = 0; // 0x0
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri OBSOLETE_THREADS_URI;
+  }
+
+  public static interface Telephony.ThreadsColumns extends android.provider.BaseColumns {
+    field public static final String ARCHIVED = "archived";
+    field public static final String DATE = "date";
+    field public static final String ERROR = "error";
+    field public static final String HAS_ATTACHMENT = "has_attachment";
+    field public static final String MESSAGE_COUNT = "message_count";
+    field public static final String READ = "read";
+    field public static final String RECIPIENT_IDS = "recipient_ids";
+    field public static final String SNIPPET = "snippet";
+    field public static final String SNIPPET_CHARSET = "snippet_cs";
+    field public static final String TYPE = "type";
+  }
+
+  public class UserDictionary {
+    ctor public UserDictionary();
+    field public static final String AUTHORITY = "user_dictionary";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public static class UserDictionary.Words implements android.provider.BaseColumns {
+    ctor public UserDictionary.Words();
+    method @Deprecated public static void addWord(android.content.Context, String, int, int);
+    method public static void addWord(android.content.Context, String, int, String, java.util.Locale);
+    field public static final String APP_ID = "appid";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.userword";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.userword";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DEFAULT_SORT_ORDER = "frequency DESC";
+    field public static final String FREQUENCY = "frequency";
+    field public static final String LOCALE = "locale";
+    field @Deprecated public static final int LOCALE_TYPE_ALL = 0; // 0x0
+    field @Deprecated public static final int LOCALE_TYPE_CURRENT = 1; // 0x1
+    field public static final String SHORTCUT = "shortcut";
+    field public static final String WORD = "word";
+    field public static final String _ID = "_id";
+  }
+
+  public class VoicemailContract {
+    field public static final String ACTION_FETCH_VOICEMAIL = "android.intent.action.FETCH_VOICEMAIL";
+    field public static final String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL";
+    field public static final String ACTION_SYNC_VOICEMAIL = "android.provider.action.SYNC_VOICEMAIL";
+    field public static final String AUTHORITY = "com.android.voicemail";
+    field public static final String EXTRA_PHONE_ACCOUNT_HANDLE = "android.provider.extra.PHONE_ACCOUNT_HANDLE";
+    field public static final String EXTRA_SELF_CHANGE = "com.android.voicemail.extra.SELF_CHANGE";
+    field public static final String PARAM_KEY_SOURCE_PACKAGE = "source_package";
+  }
+
+  public static final class VoicemailContract.Status implements android.provider.BaseColumns {
+    method public static android.net.Uri buildSourceUri(String);
+    field public static final String CONFIGURATION_STATE = "configuration_state";
+    field public static final int CONFIGURATION_STATE_CAN_BE_CONFIGURED = 2; // 0x2
+    field public static final int CONFIGURATION_STATE_CONFIGURING = 3; // 0x3
+    field public static final int CONFIGURATION_STATE_DISABLED = 5; // 0x5
+    field public static final int CONFIGURATION_STATE_FAILED = 4; // 0x4
+    field public static final int CONFIGURATION_STATE_NOT_CONFIGURED = 1; // 0x1
+    field public static final int CONFIGURATION_STATE_OK = 0; // 0x0
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_CHANNEL_STATE = "data_channel_state";
+    field public static final int DATA_CHANNEL_STATE_BAD_CONFIGURATION = 3; // 0x3
+    field public static final int DATA_CHANNEL_STATE_COMMUNICATION_ERROR = 4; // 0x4
+    field public static final int DATA_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1
+    field public static final int DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED = 2; // 0x2
+    field public static final int DATA_CHANNEL_STATE_OK = 0; // 0x0
+    field public static final int DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR = 6; // 0x6
+    field public static final int DATA_CHANNEL_STATE_SERVER_ERROR = 5; // 0x5
+    field public static final String DIR_TYPE = "vnd.android.cursor.dir/voicemail.source.status";
+    field public static final String ITEM_TYPE = "vnd.android.cursor.item/voicemail.source.status";
+    field public static final String NOTIFICATION_CHANNEL_STATE = "notification_channel_state";
+    field public static final int NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING = 2; // 0x2
+    field public static final int NOTIFICATION_CHANNEL_STATE_NO_CONNECTION = 1; // 0x1
+    field public static final int NOTIFICATION_CHANNEL_STATE_OK = 0; // 0x0
+    field public static final String PHONE_ACCOUNT_COMPONENT_NAME = "phone_account_component_name";
+    field public static final String PHONE_ACCOUNT_ID = "phone_account_id";
+    field public static final String QUOTA_OCCUPIED = "quota_occupied";
+    field public static final String QUOTA_TOTAL = "quota_total";
+    field public static final int QUOTA_UNAVAILABLE = -1; // 0xffffffff
+    field public static final String SETTINGS_URI = "settings_uri";
+    field public static final String SOURCE_PACKAGE = "source_package";
+    field public static final String SOURCE_TYPE = "source_type";
+    field public static final String VOICEMAIL_ACCESS_URI = "voicemail_access_uri";
+  }
+
+  public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns {
+    method public static android.net.Uri buildSourceUri(String);
+    field public static final String ARCHIVED = "archived";
+    field public static final String BACKED_UP = "backed_up";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String DATE = "date";
+    field public static final String DELETED = "deleted";
+    field public static final String DIRTY = "dirty";
+    field public static final int DIRTY_RETAIN = -1; // 0xffffffff
+    field public static final String DIR_TYPE = "vnd.android.cursor.dir/voicemails";
+    field public static final String DURATION = "duration";
+    field public static final String HAS_CONTENT = "has_content";
+    field public static final String IS_OMTP_VOICEMAIL = "is_omtp_voicemail";
+    field public static final String IS_READ = "is_read";
+    field public static final String ITEM_TYPE = "vnd.android.cursor.item/voicemail";
+    field public static final String LAST_MODIFIED = "last_modified";
+    field public static final String MIME_TYPE = "mime_type";
+    field public static final String NEW = "new";
+    field public static final String NUMBER = "number";
+    field public static final String PHONE_ACCOUNT_COMPONENT_NAME = "subscription_component_name";
+    field public static final String PHONE_ACCOUNT_ID = "subscription_id";
+    field public static final String RESTORED = "restored";
+    field public static final String SOURCE_DATA = "source_data";
+    field public static final String SOURCE_PACKAGE = "source_package";
+    field public static final String TRANSCRIPTION = "transcription";
+  }
+
+}
+
+package android.renderscript {
+
+  @Deprecated public class Allocation extends android.renderscript.BaseObj {
+    method @Deprecated public void copy1DRangeFrom(int, int, Object);
+    method @Deprecated public void copy1DRangeFrom(int, int, int[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, short[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, byte[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, float[]);
+    method @Deprecated public void copy1DRangeFrom(int, int, android.renderscript.Allocation, int);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, Object);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, int[]);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, short[]);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, byte[]);
+    method @Deprecated public void copy1DRangeFromUnchecked(int, int, float[]);
+    method @Deprecated public void copy1DRangeTo(int, int, Object);
+    method @Deprecated public void copy1DRangeTo(int, int, int[]);
+    method @Deprecated public void copy1DRangeTo(int, int, short[]);
+    method @Deprecated public void copy1DRangeTo(int, int, byte[]);
+    method @Deprecated public void copy1DRangeTo(int, int, float[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, Object);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, int[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, short[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, byte[]);
+    method @Deprecated public void copy1DRangeToUnchecked(int, int, float[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, Object);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, byte[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, short[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, int[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, float[]);
+    method @Deprecated public void copy2DRangeFrom(int, int, int, int, android.renderscript.Allocation, int, int);
+    method @Deprecated public void copy2DRangeFrom(int, int, android.graphics.Bitmap);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, Object);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, byte[]);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, short[]);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, int[]);
+    method @Deprecated public void copy2DRangeTo(int, int, int, int, float[]);
+    method @Deprecated public void copy3DRangeFrom(int, int, int, int, int, int, Object);
+    method @Deprecated public void copy3DRangeFrom(int, int, int, int, int, int, android.renderscript.Allocation, int, int, int);
+    method @Deprecated public void copy3DRangeTo(int, int, int, int, int, int, Object);
+    method @Deprecated public void copyFrom(android.renderscript.BaseObj[]);
+    method @Deprecated public void copyFrom(Object);
+    method @Deprecated public void copyFrom(int[]);
+    method @Deprecated public void copyFrom(short[]);
+    method @Deprecated public void copyFrom(byte[]);
+    method @Deprecated public void copyFrom(float[]);
+    method @Deprecated public void copyFrom(android.graphics.Bitmap);
+    method @Deprecated public void copyFrom(android.renderscript.Allocation);
+    method @Deprecated public void copyFromUnchecked(Object);
+    method @Deprecated public void copyFromUnchecked(int[]);
+    method @Deprecated public void copyFromUnchecked(short[]);
+    method @Deprecated public void copyFromUnchecked(byte[]);
+    method @Deprecated public void copyFromUnchecked(float[]);
+    method @Deprecated public void copyTo(android.graphics.Bitmap);
+    method @Deprecated public void copyTo(Object);
+    method @Deprecated public void copyTo(byte[]);
+    method @Deprecated public void copyTo(short[]);
+    method @Deprecated public void copyTo(int[]);
+    method @Deprecated public void copyTo(float[]);
+    method @Deprecated public static android.renderscript.Allocation[] createAllocations(android.renderscript.RenderScript, android.renderscript.Type, int, int);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createCubemapFromCubeFaces(android.renderscript.RenderScript, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap, android.graphics.Bitmap);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmap(android.renderscript.RenderScript, android.graphics.Bitmap);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmapResource(android.renderscript.RenderScript, android.content.res.Resources, int, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createFromBitmapResource(android.renderscript.RenderScript, android.content.res.Resources, int);
+    method @Deprecated public static android.renderscript.Allocation createFromString(android.renderscript.RenderScript, String, int);
+    method @Deprecated public static android.renderscript.Allocation createSized(android.renderscript.RenderScript, android.renderscript.Element, int, int);
+    method @Deprecated public static android.renderscript.Allocation createSized(android.renderscript.RenderScript, android.renderscript.Element, int);
+    method @Deprecated public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type, android.renderscript.Allocation.MipmapControl, int);
+    method @Deprecated public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type, int);
+    method @Deprecated public static android.renderscript.Allocation createTyped(android.renderscript.RenderScript, android.renderscript.Type);
+    method @Deprecated public void generateMipmaps();
+    method @Deprecated public java.nio.ByteBuffer getByteBuffer();
+    method @Deprecated public int getBytesSize();
+    method @Deprecated public android.renderscript.Element getElement();
+    method @Deprecated public long getStride();
+    method @Deprecated public android.view.Surface getSurface();
+    method @Deprecated public long getTimeStamp();
+    method @Deprecated public android.renderscript.Type getType();
+    method @Deprecated public int getUsage();
+    method @Deprecated public void ioReceive();
+    method @Deprecated public void ioSend();
+    method @Deprecated public void resize(int);
+    method @Deprecated public void setAutoPadding(boolean);
+    method @Deprecated public void setFromFieldPacker(int, android.renderscript.FieldPacker);
+    method @Deprecated public void setFromFieldPacker(int, int, android.renderscript.FieldPacker);
+    method @Deprecated public void setFromFieldPacker(int, int, int, int, android.renderscript.FieldPacker);
+    method @Deprecated public void setOnBufferAvailableListener(android.renderscript.Allocation.OnBufferAvailableListener);
+    method @Deprecated public void setSurface(android.view.Surface);
+    method @Deprecated public void syncAll(int);
+    field @Deprecated public static final int USAGE_GRAPHICS_CONSTANTS = 8; // 0x8
+    field @Deprecated public static final int USAGE_GRAPHICS_RENDER_TARGET = 16; // 0x10
+    field @Deprecated public static final int USAGE_GRAPHICS_TEXTURE = 2; // 0x2
+    field @Deprecated public static final int USAGE_GRAPHICS_VERTEX = 4; // 0x4
+    field @Deprecated public static final int USAGE_IO_INPUT = 32; // 0x20
+    field @Deprecated public static final int USAGE_IO_OUTPUT = 64; // 0x40
+    field @Deprecated public static final int USAGE_SCRIPT = 1; // 0x1
+    field @Deprecated public static final int USAGE_SHARED = 128; // 0x80
+  }
+
+  @Deprecated public enum Allocation.MipmapControl {
+    enum_constant @Deprecated public static final android.renderscript.Allocation.MipmapControl MIPMAP_FULL;
+    enum_constant @Deprecated public static final android.renderscript.Allocation.MipmapControl MIPMAP_NONE;
+    enum_constant @Deprecated public static final android.renderscript.Allocation.MipmapControl MIPMAP_ON_SYNC_TO_TEXTURE;
+  }
+
+  @Deprecated public static interface Allocation.OnBufferAvailableListener {
+    method @Deprecated public void onBufferAvailable(android.renderscript.Allocation);
+  }
+
+  @Deprecated public class AllocationAdapter extends android.renderscript.Allocation {
+    method @Deprecated public static android.renderscript.AllocationAdapter create1D(android.renderscript.RenderScript, android.renderscript.Allocation);
+    method @Deprecated public static android.renderscript.AllocationAdapter create2D(android.renderscript.RenderScript, android.renderscript.Allocation);
+    method @Deprecated public static android.renderscript.AllocationAdapter createTyped(android.renderscript.RenderScript, android.renderscript.Allocation, android.renderscript.Type);
+    method @Deprecated public void resize(int);
+    method @Deprecated public void setFace(android.renderscript.Type.CubemapFace);
+    method @Deprecated public void setLOD(int);
+    method @Deprecated public void setX(int);
+    method @Deprecated public void setY(int);
+    method @Deprecated public void setZ(int);
+  }
+
+  @Deprecated public class BaseObj {
+    method @Deprecated public void destroy();
+    method @Deprecated public String getName();
+    method @Deprecated public void setName(String);
+  }
+
+  @Deprecated public class Byte2 {
+    ctor @Deprecated public Byte2();
+    ctor @Deprecated public Byte2(byte, byte);
+    field @Deprecated public byte x;
+    field @Deprecated public byte y;
+  }
+
+  @Deprecated public class Byte3 {
+    ctor @Deprecated public Byte3();
+    ctor @Deprecated public Byte3(byte, byte, byte);
+    field @Deprecated public byte x;
+    field @Deprecated public byte y;
+    field @Deprecated public byte z;
+  }
+
+  @Deprecated public class Byte4 {
+    ctor @Deprecated public Byte4();
+    ctor @Deprecated public Byte4(byte, byte, byte, byte);
+    field @Deprecated public byte w;
+    field @Deprecated public byte x;
+    field @Deprecated public byte y;
+    field @Deprecated public byte z;
+  }
+
+  @Deprecated public class Double2 {
+    ctor @Deprecated public Double2();
+    ctor @Deprecated public Double2(double, double);
+    field @Deprecated public double x;
+    field @Deprecated public double y;
+  }
+
+  @Deprecated public class Double3 {
+    ctor @Deprecated public Double3();
+    ctor @Deprecated public Double3(double, double, double);
+    field @Deprecated public double x;
+    field @Deprecated public double y;
+    field @Deprecated public double z;
+  }
+
+  @Deprecated public class Double4 {
+    ctor @Deprecated public Double4();
+    ctor @Deprecated public Double4(double, double, double, double);
+    field @Deprecated public double w;
+    field @Deprecated public double x;
+    field @Deprecated public double y;
+    field @Deprecated public double z;
+  }
+
+  @Deprecated public class Element extends android.renderscript.BaseObj {
+    method @Deprecated public static android.renderscript.Element ALLOCATION(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element A_8(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element BOOLEAN(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element ELEMENT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F16_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F32_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element F64_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element FONT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I16_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I32_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I64_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element I8_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX4X4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX_2X2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX_3X3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MATRIX_4X4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element MESH(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_FRAGMENT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_RASTER(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_STORE(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element PROGRAM_VERTEX(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGBA_4444(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGBA_5551(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGBA_8888(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGB_565(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element RGB_888(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element SAMPLER(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element SCRIPT(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element TYPE(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U16_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U32_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U64_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8_2(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8_3(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element U8_4(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element YUV(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Element createPixel(android.renderscript.RenderScript, android.renderscript.Element.DataType, android.renderscript.Element.DataKind);
+    method @Deprecated public static android.renderscript.Element createVector(android.renderscript.RenderScript, android.renderscript.Element.DataType, int);
+    method @Deprecated public int getBytesSize();
+    method @Deprecated public android.renderscript.Element.DataKind getDataKind();
+    method @Deprecated public android.renderscript.Element.DataType getDataType();
+    method @Deprecated public android.renderscript.Element getSubElement(int);
+    method @Deprecated public int getSubElementArraySize(int);
+    method @Deprecated public int getSubElementCount();
+    method @Deprecated public String getSubElementName(int);
+    method @Deprecated public int getSubElementOffsetBytes(int);
+    method @Deprecated public int getVectorSize();
+    method @Deprecated public boolean isCompatible(android.renderscript.Element);
+    method @Deprecated public boolean isComplex();
+  }
+
+  @Deprecated public static class Element.Builder {
+    ctor @Deprecated public Element.Builder(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.Element.Builder add(android.renderscript.Element, String, int);
+    method @Deprecated public android.renderscript.Element.Builder add(android.renderscript.Element, String);
+    method @Deprecated public android.renderscript.Element create();
+  }
+
+  @Deprecated public enum Element.DataKind {
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_A;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_DEPTH;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_L;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_LA;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_RGB;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_RGBA;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind PIXEL_YUV;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataKind USER;
+  }
+
+  @Deprecated public enum Element.DataType {
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType BOOLEAN;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType FLOAT_16;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType FLOAT_32;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType FLOAT_64;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType MATRIX_2X2;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType MATRIX_3X3;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType MATRIX_4X4;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType NONE;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_ALLOCATION;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_ELEMENT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_FONT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_MESH;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_FRAGMENT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_RASTER;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_STORE;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_PROGRAM_VERTEX;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_SAMPLER;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_SCRIPT;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType RS_TYPE;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_16;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_32;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_64;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType SIGNED_8;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_16;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_32;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_4_4_4_4;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_5_5_5_1;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_5_6_5;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_64;
+    enum_constant @Deprecated public static final android.renderscript.Element.DataType UNSIGNED_8;
+  }
+
+  @Deprecated public class FieldPacker {
+    ctor @Deprecated public FieldPacker(int);
+    ctor @Deprecated public FieldPacker(byte[]);
+    method @Deprecated public void addBoolean(boolean);
+    method @Deprecated public void addF32(float);
+    method @Deprecated public void addF32(android.renderscript.Float2);
+    method @Deprecated public void addF32(android.renderscript.Float3);
+    method @Deprecated public void addF32(android.renderscript.Float4);
+    method @Deprecated public void addF64(double);
+    method @Deprecated public void addF64(android.renderscript.Double2);
+    method @Deprecated public void addF64(android.renderscript.Double3);
+    method @Deprecated public void addF64(android.renderscript.Double4);
+    method @Deprecated public void addI16(short);
+    method @Deprecated public void addI16(android.renderscript.Short2);
+    method @Deprecated public void addI16(android.renderscript.Short3);
+    method @Deprecated public void addI16(android.renderscript.Short4);
+    method @Deprecated public void addI32(int);
+    method @Deprecated public void addI32(android.renderscript.Int2);
+    method @Deprecated public void addI32(android.renderscript.Int3);
+    method @Deprecated public void addI32(android.renderscript.Int4);
+    method @Deprecated public void addI64(long);
+    method @Deprecated public void addI64(android.renderscript.Long2);
+    method @Deprecated public void addI64(android.renderscript.Long3);
+    method @Deprecated public void addI64(android.renderscript.Long4);
+    method @Deprecated public void addI8(byte);
+    method @Deprecated public void addI8(android.renderscript.Byte2);
+    method @Deprecated public void addI8(android.renderscript.Byte3);
+    method @Deprecated public void addI8(android.renderscript.Byte4);
+    method @Deprecated public void addMatrix(android.renderscript.Matrix4f);
+    method @Deprecated public void addMatrix(android.renderscript.Matrix3f);
+    method @Deprecated public void addMatrix(android.renderscript.Matrix2f);
+    method @Deprecated public void addObj(android.renderscript.BaseObj);
+    method @Deprecated public void addU16(int);
+    method @Deprecated public void addU16(android.renderscript.Int2);
+    method @Deprecated public void addU16(android.renderscript.Int3);
+    method @Deprecated public void addU16(android.renderscript.Int4);
+    method @Deprecated public void addU32(long);
+    method @Deprecated public void addU32(android.renderscript.Long2);
+    method @Deprecated public void addU32(android.renderscript.Long3);
+    method @Deprecated public void addU32(android.renderscript.Long4);
+    method @Deprecated public void addU64(long);
+    method @Deprecated public void addU64(android.renderscript.Long2);
+    method @Deprecated public void addU64(android.renderscript.Long3);
+    method @Deprecated public void addU64(android.renderscript.Long4);
+    method @Deprecated public void addU8(short);
+    method @Deprecated public void addU8(android.renderscript.Short2);
+    method @Deprecated public void addU8(android.renderscript.Short3);
+    method @Deprecated public void addU8(android.renderscript.Short4);
+    method @Deprecated public void align(int);
+    method @Deprecated public final byte[] getData();
+    method @Deprecated public void reset();
+    method @Deprecated public void reset(int);
+    method @Deprecated public void skip(int);
+    method @Deprecated public boolean subBoolean();
+    method @Deprecated public android.renderscript.Byte2 subByte2();
+    method @Deprecated public android.renderscript.Byte3 subByte3();
+    method @Deprecated public android.renderscript.Byte4 subByte4();
+    method @Deprecated public android.renderscript.Double2 subDouble2();
+    method @Deprecated public android.renderscript.Double3 subDouble3();
+    method @Deprecated public android.renderscript.Double4 subDouble4();
+    method @Deprecated public float subF32();
+    method @Deprecated public double subF64();
+    method @Deprecated public android.renderscript.Float2 subFloat2();
+    method @Deprecated public android.renderscript.Float3 subFloat3();
+    method @Deprecated public android.renderscript.Float4 subFloat4();
+    method @Deprecated public short subI16();
+    method @Deprecated public int subI32();
+    method @Deprecated public long subI64();
+    method @Deprecated public byte subI8();
+    method @Deprecated public android.renderscript.Int2 subInt2();
+    method @Deprecated public android.renderscript.Int3 subInt3();
+    method @Deprecated public android.renderscript.Int4 subInt4();
+    method @Deprecated public android.renderscript.Long2 subLong2();
+    method @Deprecated public android.renderscript.Long3 subLong3();
+    method @Deprecated public android.renderscript.Long4 subLong4();
+    method @Deprecated public android.renderscript.Matrix2f subMatrix2f();
+    method @Deprecated public android.renderscript.Matrix3f subMatrix3f();
+    method @Deprecated public android.renderscript.Matrix4f subMatrix4f();
+    method @Deprecated public android.renderscript.Short2 subShort2();
+    method @Deprecated public android.renderscript.Short3 subShort3();
+    method @Deprecated public android.renderscript.Short4 subShort4();
+    method @Deprecated public void subalign(int);
+  }
+
+  @Deprecated public class Float2 {
+    ctor @Deprecated public Float2();
+    ctor @Deprecated public Float2(float, float);
+    field @Deprecated public float x;
+    field @Deprecated public float y;
+  }
+
+  @Deprecated public class Float3 {
+    ctor @Deprecated public Float3();
+    ctor @Deprecated public Float3(float, float, float);
+    field @Deprecated public float x;
+    field @Deprecated public float y;
+    field @Deprecated public float z;
+  }
+
+  @Deprecated public class Float4 {
+    ctor @Deprecated public Float4();
+    ctor @Deprecated public Float4(float, float, float, float);
+    field @Deprecated public float w;
+    field @Deprecated public float x;
+    field @Deprecated public float y;
+    field @Deprecated public float z;
+  }
+
+  @Deprecated public class Int2 {
+    ctor @Deprecated public Int2();
+    ctor @Deprecated public Int2(int, int);
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+  }
+
+  @Deprecated public class Int3 {
+    ctor @Deprecated public Int3();
+    ctor @Deprecated public Int3(int, int, int);
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+    field @Deprecated public int z;
+  }
+
+  @Deprecated public class Int4 {
+    ctor @Deprecated public Int4();
+    ctor @Deprecated public Int4(int, int, int, int);
+    field @Deprecated public int w;
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+    field @Deprecated public int z;
+  }
+
+  @Deprecated public class Long2 {
+    ctor @Deprecated public Long2();
+    ctor @Deprecated public Long2(long, long);
+    field @Deprecated public long x;
+    field @Deprecated public long y;
+  }
+
+  @Deprecated public class Long3 {
+    ctor @Deprecated public Long3();
+    ctor @Deprecated public Long3(long, long, long);
+    field @Deprecated public long x;
+    field @Deprecated public long y;
+    field @Deprecated public long z;
+  }
+
+  @Deprecated public class Long4 {
+    ctor @Deprecated public Long4();
+    ctor @Deprecated public Long4(long, long, long, long);
+    field @Deprecated public long w;
+    field @Deprecated public long x;
+    field @Deprecated public long y;
+    field @Deprecated public long z;
+  }
+
+  @Deprecated public class Matrix2f {
+    ctor @Deprecated public Matrix2f();
+    ctor @Deprecated public Matrix2f(float[]);
+    method @Deprecated public float get(int, int);
+    method @Deprecated public float[] getArray();
+    method @Deprecated public void load(android.renderscript.Matrix2f);
+    method @Deprecated public void loadIdentity();
+    method @Deprecated public void loadMultiply(android.renderscript.Matrix2f, android.renderscript.Matrix2f);
+    method @Deprecated public void loadRotate(float);
+    method @Deprecated public void loadScale(float, float);
+    method @Deprecated public void multiply(android.renderscript.Matrix2f);
+    method @Deprecated public void rotate(float);
+    method @Deprecated public void scale(float, float);
+    method @Deprecated public void set(int, int, float);
+    method @Deprecated public void transpose();
+  }
+
+  @Deprecated public class Matrix3f {
+    ctor @Deprecated public Matrix3f();
+    ctor @Deprecated public Matrix3f(float[]);
+    method @Deprecated public float get(int, int);
+    method @Deprecated public float[] getArray();
+    method @Deprecated public void load(android.renderscript.Matrix3f);
+    method @Deprecated public void loadIdentity();
+    method @Deprecated public void loadMultiply(android.renderscript.Matrix3f, android.renderscript.Matrix3f);
+    method @Deprecated public void loadRotate(float, float, float, float);
+    method @Deprecated public void loadRotate(float);
+    method @Deprecated public void loadScale(float, float);
+    method @Deprecated public void loadScale(float, float, float);
+    method @Deprecated public void loadTranslate(float, float);
+    method @Deprecated public void multiply(android.renderscript.Matrix3f);
+    method @Deprecated public void rotate(float, float, float, float);
+    method @Deprecated public void rotate(float);
+    method @Deprecated public void scale(float, float);
+    method @Deprecated public void scale(float, float, float);
+    method @Deprecated public void set(int, int, float);
+    method @Deprecated public void translate(float, float);
+    method @Deprecated public void transpose();
+  }
+
+  @Deprecated public class Matrix4f {
+    ctor @Deprecated public Matrix4f();
+    ctor @Deprecated public Matrix4f(float[]);
+    method @Deprecated public float get(int, int);
+    method @Deprecated public float[] getArray();
+    method @Deprecated public boolean inverse();
+    method @Deprecated public boolean inverseTranspose();
+    method @Deprecated public void load(android.renderscript.Matrix4f);
+    method @Deprecated public void loadFrustum(float, float, float, float, float, float);
+    method @Deprecated public void loadIdentity();
+    method @Deprecated public void loadMultiply(android.renderscript.Matrix4f, android.renderscript.Matrix4f);
+    method @Deprecated public void loadOrtho(float, float, float, float, float, float);
+    method @Deprecated public void loadOrthoWindow(int, int);
+    method @Deprecated public void loadPerspective(float, float, float, float);
+    method @Deprecated public void loadProjectionNormalized(int, int);
+    method @Deprecated public void loadRotate(float, float, float, float);
+    method @Deprecated public void loadScale(float, float, float);
+    method @Deprecated public void loadTranslate(float, float, float);
+    method @Deprecated public void multiply(android.renderscript.Matrix4f);
+    method @Deprecated public void rotate(float, float, float, float);
+    method @Deprecated public void scale(float, float, float);
+    method @Deprecated public void set(int, int, float);
+    method @Deprecated public void translate(float, float, float);
+    method @Deprecated public void transpose();
+  }
+
+  @Deprecated public class RSDriverException extends android.renderscript.RSRuntimeException {
+    ctor @Deprecated public RSDriverException(String);
+  }
+
+  @Deprecated public class RSIllegalArgumentException extends android.renderscript.RSRuntimeException {
+    ctor @Deprecated public RSIllegalArgumentException(String);
+  }
+
+  @Deprecated public class RSInvalidStateException extends android.renderscript.RSRuntimeException {
+    ctor @Deprecated public RSInvalidStateException(String);
+  }
+
+  @Deprecated public class RSRuntimeException extends java.lang.RuntimeException {
+    ctor @Deprecated public RSRuntimeException(String);
+  }
+
+  @Deprecated public class RenderScript {
+    method @Deprecated public void contextDump();
+    method @Deprecated public static android.renderscript.RenderScript create(android.content.Context);
+    method @Deprecated public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType);
+    method @Deprecated public static android.renderscript.RenderScript create(android.content.Context, android.renderscript.RenderScript.ContextType, int);
+    method @Deprecated public static android.renderscript.RenderScript createMultiContext(android.content.Context, android.renderscript.RenderScript.ContextType, int, int);
+    method @Deprecated public void destroy();
+    method @Deprecated public void finish();
+    method @Deprecated public final android.content.Context getApplicationContext();
+    method @Deprecated public android.renderscript.RenderScript.RSErrorHandler getErrorHandler();
+    method @Deprecated public android.renderscript.RenderScript.RSMessageHandler getMessageHandler();
+    method @Deprecated public static long getMinorVersion();
+    method @Deprecated public static void releaseAllContexts();
+    method @Deprecated public void sendMessage(int, int[]);
+    method @Deprecated public void setErrorHandler(android.renderscript.RenderScript.RSErrorHandler);
+    method @Deprecated public void setMessageHandler(android.renderscript.RenderScript.RSMessageHandler);
+    method @Deprecated public void setPriority(android.renderscript.RenderScript.Priority);
+    field @Deprecated public static final int CREATE_FLAG_LOW_LATENCY = 2; // 0x2
+    field @Deprecated public static final int CREATE_FLAG_LOW_POWER = 4; // 0x4
+    field @Deprecated public static final int CREATE_FLAG_NONE = 0; // 0x0
+  }
+
+  @Deprecated public enum RenderScript.ContextType {
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.ContextType DEBUG;
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.ContextType NORMAL;
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.ContextType PROFILE;
+  }
+
+  @Deprecated public enum RenderScript.Priority {
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.Priority LOW;
+    enum_constant @Deprecated public static final android.renderscript.RenderScript.Priority NORMAL;
+  }
+
+  @Deprecated public static class RenderScript.RSErrorHandler implements java.lang.Runnable {
+    ctor @Deprecated public RenderScript.RSErrorHandler();
+    method @Deprecated public void run();
+    field @Deprecated protected String mErrorMessage;
+    field @Deprecated protected int mErrorNum;
+  }
+
+  @Deprecated public static class RenderScript.RSMessageHandler implements java.lang.Runnable {
+    ctor @Deprecated public RenderScript.RSMessageHandler();
+    method @Deprecated public void run();
+    field @Deprecated protected int[] mData;
+    field @Deprecated protected int mID;
+    field @Deprecated protected int mLength;
+  }
+
+  @Deprecated public class Sampler extends android.renderscript.BaseObj {
+    method @Deprecated public static android.renderscript.Sampler CLAMP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler CLAMP_LINEAR_MIP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler CLAMP_NEAREST(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler MIRRORED_REPEAT_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler MIRRORED_REPEAT_NEAREST(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler WRAP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler WRAP_LINEAR_MIP_LINEAR(android.renderscript.RenderScript);
+    method @Deprecated public static android.renderscript.Sampler WRAP_NEAREST(android.renderscript.RenderScript);
+    method @Deprecated public float getAnisotropy();
+    method @Deprecated public android.renderscript.Sampler.Value getMagnification();
+    method @Deprecated public android.renderscript.Sampler.Value getMinification();
+    method @Deprecated public android.renderscript.Sampler.Value getWrapS();
+    method @Deprecated public android.renderscript.Sampler.Value getWrapT();
+  }
+
+  @Deprecated public static class Sampler.Builder {
+    ctor @Deprecated public Sampler.Builder(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.Sampler create();
+    method @Deprecated public void setAnisotropy(float);
+    method @Deprecated public void setMagnification(android.renderscript.Sampler.Value);
+    method @Deprecated public void setMinification(android.renderscript.Sampler.Value);
+    method @Deprecated public void setWrapS(android.renderscript.Sampler.Value);
+    method @Deprecated public void setWrapT(android.renderscript.Sampler.Value);
+  }
+
+  @Deprecated public enum Sampler.Value {
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value CLAMP;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value LINEAR;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value LINEAR_MIP_LINEAR;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value LINEAR_MIP_NEAREST;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value MIRRORED_REPEAT;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value NEAREST;
+    enum_constant @Deprecated public static final android.renderscript.Sampler.Value WRAP;
+  }
+
+  @Deprecated public class Script extends android.renderscript.BaseObj {
+    method @Deprecated public void bindAllocation(android.renderscript.Allocation, int);
+    method @Deprecated protected android.renderscript.Script.FieldID createFieldID(int, android.renderscript.Element);
+    method @Deprecated protected android.renderscript.Script.InvokeID createInvokeID(int);
+    method @Deprecated protected android.renderscript.Script.KernelID createKernelID(int, int, android.renderscript.Element, android.renderscript.Element);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.FieldPacker, android.renderscript.Script.LaunchOptions);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation[], android.renderscript.Allocation, android.renderscript.FieldPacker);
+    method @Deprecated protected void forEach(int, android.renderscript.Allocation[], android.renderscript.Allocation, android.renderscript.FieldPacker, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public boolean getVarB(int);
+    method @Deprecated public double getVarD(int);
+    method @Deprecated public float getVarF(int);
+    method @Deprecated public int getVarI(int);
+    method @Deprecated public long getVarJ(int);
+    method @Deprecated public void getVarV(int, android.renderscript.FieldPacker);
+    method @Deprecated protected void invoke(int);
+    method @Deprecated protected void invoke(int, android.renderscript.FieldPacker);
+    method @Deprecated protected void reduce(int, android.renderscript.Allocation[], android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void setTimeZone(String);
+    method @Deprecated public void setVar(int, float);
+    method @Deprecated public void setVar(int, double);
+    method @Deprecated public void setVar(int, int);
+    method @Deprecated public void setVar(int, long);
+    method @Deprecated public void setVar(int, boolean);
+    method @Deprecated public void setVar(int, android.renderscript.BaseObj);
+    method @Deprecated public void setVar(int, android.renderscript.FieldPacker);
+    method @Deprecated public void setVar(int, android.renderscript.FieldPacker, android.renderscript.Element, int[]);
+  }
+
+  @Deprecated public static class Script.Builder {
+  }
+
+  @Deprecated public static class Script.FieldBase {
+    ctor @Deprecated protected Script.FieldBase();
+    method @Deprecated public android.renderscript.Allocation getAllocation();
+    method @Deprecated public android.renderscript.Element getElement();
+    method @Deprecated public android.renderscript.Type getType();
+    method @Deprecated protected void init(android.renderscript.RenderScript, int);
+    method @Deprecated protected void init(android.renderscript.RenderScript, int, int);
+    method @Deprecated public void updateAllocation();
+    field @Deprecated protected android.renderscript.Allocation mAllocation;
+    field @Deprecated protected android.renderscript.Element mElement;
+  }
+
+  @Deprecated public static final class Script.FieldID extends android.renderscript.BaseObj {
+  }
+
+  @Deprecated public static final class Script.InvokeID extends android.renderscript.BaseObj {
+  }
+
+  @Deprecated public static final class Script.KernelID extends android.renderscript.BaseObj {
+  }
+
+  @Deprecated public static final class Script.LaunchOptions {
+    ctor @Deprecated public Script.LaunchOptions();
+    method @Deprecated public int getXEnd();
+    method @Deprecated public int getXStart();
+    method @Deprecated public int getYEnd();
+    method @Deprecated public int getYStart();
+    method @Deprecated public int getZEnd();
+    method @Deprecated public int getZStart();
+    method @Deprecated public android.renderscript.Script.LaunchOptions setX(int, int);
+    method @Deprecated public android.renderscript.Script.LaunchOptions setY(int, int);
+    method @Deprecated public android.renderscript.Script.LaunchOptions setZ(int, int);
+  }
+
+  @Deprecated public class ScriptC extends android.renderscript.Script {
+    ctor @Deprecated protected ScriptC(int, android.renderscript.RenderScript);
+    ctor @Deprecated protected ScriptC(long, android.renderscript.RenderScript);
+    ctor @Deprecated protected ScriptC(android.renderscript.RenderScript, android.content.res.Resources, int);
+    ctor @Deprecated protected ScriptC(android.renderscript.RenderScript, String, byte[], byte[]);
+  }
+
+  @Deprecated public final class ScriptGroup extends android.renderscript.BaseObj {
+    method @Deprecated public Object[] execute(java.lang.Object...);
+    method @Deprecated public void execute();
+    method @Deprecated public void setInput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+    method @Deprecated public void setOutput(android.renderscript.Script.KernelID, android.renderscript.Allocation);
+  }
+
+  @Deprecated public static final class ScriptGroup.Binding {
+    ctor @Deprecated public ScriptGroup.Binding(android.renderscript.Script.FieldID, Object);
+  }
+
+  @Deprecated public static final class ScriptGroup.Builder {
+    ctor @Deprecated public ScriptGroup.Builder(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.FieldID);
+    method @Deprecated public android.renderscript.ScriptGroup.Builder addConnection(android.renderscript.Type, android.renderscript.Script.KernelID, android.renderscript.Script.KernelID);
+    method @Deprecated public android.renderscript.ScriptGroup.Builder addKernel(android.renderscript.Script.KernelID);
+    method @Deprecated public android.renderscript.ScriptGroup create();
+  }
+
+  @Deprecated public static final class ScriptGroup.Builder2 {
+    ctor @Deprecated public ScriptGroup.Builder2(android.renderscript.RenderScript);
+    method @Deprecated public android.renderscript.ScriptGroup.Input addInput();
+    method @Deprecated public android.renderscript.ScriptGroup.Closure addInvoke(android.renderscript.Script.InvokeID, java.lang.Object...);
+    method @Deprecated public android.renderscript.ScriptGroup.Closure addKernel(android.renderscript.Script.KernelID, android.renderscript.Type, java.lang.Object...);
+    method @Deprecated public android.renderscript.ScriptGroup create(String, android.renderscript.ScriptGroup.Future...);
+  }
+
+  @Deprecated public static final class ScriptGroup.Closure extends android.renderscript.BaseObj {
+    method @Deprecated public android.renderscript.ScriptGroup.Future getGlobal(android.renderscript.Script.FieldID);
+    method @Deprecated public android.renderscript.ScriptGroup.Future getReturn();
+  }
+
+  @Deprecated public static final class ScriptGroup.Future {
+  }
+
+  @Deprecated public static final class ScriptGroup.Input {
+  }
+
+  @Deprecated public abstract class ScriptIntrinsic extends android.renderscript.Script {
+  }
+
+  @Deprecated public final class ScriptIntrinsic3DLUT extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsic3DLUT create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setLUT(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicBLAS extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public void BNNM(android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation, int, int);
+    method @Deprecated public void CGBMV(int, int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CGEMM(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CGEMV(int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CGERC(android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CGERU(android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHBMV(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CHEMM(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CHEMV(int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CHER(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHER2(int, android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHER2K(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void CHERK(int, int, float, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void CHPMV(int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Float2, android.renderscript.Allocation, int);
+    method @Deprecated public void CHPR(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CHPR2(int, android.renderscript.Float2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void CSYMM(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CSYR2K(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CSYRK(int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Float2, android.renderscript.Allocation);
+    method @Deprecated public void CTBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTRMM(int, int, int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void CTRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void CTRSM(int, int, int, int, android.renderscript.Float2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void CTRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DGBMV(int, int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DGEMM(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DGEMV(int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DGER(double, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSBMV(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DSPMV(int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DSPR(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSPR2(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSYMM(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DSYMV(int, double, android.renderscript.Allocation, android.renderscript.Allocation, int, double, android.renderscript.Allocation, int);
+    method @Deprecated public void DSYR(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSYR2(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void DSYR2K(int, int, double, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DSYRK(int, int, double, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void DTBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTRMM(int, int, int, int, double, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void DTRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void DTRSM(int, int, int, int, double, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void DTRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void SGBMV(int, int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SGEMM(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void SGEMV(int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SGER(float, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSBMV(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SSPMV(int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SSPR(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSPR2(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSYMM(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void SSYMV(int, float, android.renderscript.Allocation, android.renderscript.Allocation, int, float, android.renderscript.Allocation, int);
+    method @Deprecated public void SSYR(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSYR2(int, float, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void SSYR2K(int, int, float, android.renderscript.Allocation, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void SSYRK(int, int, float, android.renderscript.Allocation, float, android.renderscript.Allocation);
+    method @Deprecated public void STBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STRMM(int, int, int, int, float, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void STRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void STRSM(int, int, int, int, float, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void STRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZGBMV(int, int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZGEMM(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZGEMV(int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZGERC(android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZGERU(android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHBMV(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZHEMM(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZHEMV(int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZHER(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHER2(int, android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHER2K(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void ZHERK(int, int, double, android.renderscript.Allocation, double, android.renderscript.Allocation);
+    method @Deprecated public void ZHPMV(int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, int, android.renderscript.Double2, android.renderscript.Allocation, int);
+    method @Deprecated public void ZHPR(int, double, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZHPR2(int, android.renderscript.Double2, android.renderscript.Allocation, int, android.renderscript.Allocation, int, android.renderscript.Allocation);
+    method @Deprecated public void ZSYMM(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZSYR2K(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZSYRK(int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Double2, android.renderscript.Allocation);
+    method @Deprecated public void ZTBMV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTBSV(int, int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTPMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTPSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTRMM(int, int, int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void ZTRMV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public void ZTRSM(int, int, int, int, android.renderscript.Double2, android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void ZTRSV(int, int, int, android.renderscript.Allocation, android.renderscript.Allocation, int);
+    method @Deprecated public static android.renderscript.ScriptIntrinsicBLAS create(android.renderscript.RenderScript);
+    field @Deprecated public static final int CONJ_TRANSPOSE = 113; // 0x71
+    field @Deprecated public static final int LEFT = 141; // 0x8d
+    field @Deprecated public static final int LOWER = 122; // 0x7a
+    field @Deprecated public static final int NON_UNIT = 131; // 0x83
+    field @Deprecated public static final int NO_TRANSPOSE = 111; // 0x6f
+    field @Deprecated public static final int RIGHT = 142; // 0x8e
+    field @Deprecated public static final int TRANSPOSE = 112; // 0x70
+    field @Deprecated public static final int UNIT = 132; // 0x84
+    field @Deprecated public static final int UPPER = 121; // 0x79
+  }
+
+  @Deprecated public class ScriptIntrinsicBlend extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicBlend create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDAdd();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDClear();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDst();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstAtop();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstIn();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstOut();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDDstOver();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDMultiply();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrc();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcAtop();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcIn();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcOut();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSrcOver();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDSubtract();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelIDXor();
+  }
+
+  @Deprecated public final class ScriptIntrinsicBlur extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicBlur create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+    method @Deprecated public void setRadius(float);
+  }
+
+  @Deprecated public final class ScriptIntrinsicColorMatrix extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setAdd(android.renderscript.Float4);
+    method @Deprecated public void setAdd(float, float, float, float);
+    method @Deprecated public void setColorMatrix(android.renderscript.Matrix4f);
+    method @Deprecated public void setColorMatrix(android.renderscript.Matrix3f);
+    method @Deprecated public void setGreyscale();
+    method @Deprecated public void setRGBtoYUV();
+    method @Deprecated public void setYUVtoRGB();
+  }
+
+  @Deprecated public final class ScriptIntrinsicConvolve3x3 extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicConvolve3x3 create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setCoefficients(float[]);
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicConvolve5x5 extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicConvolve5x5 create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setCoefficients(float[]);
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicHistogram extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicHistogram create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public void forEach_Dot(android.renderscript.Allocation);
+    method @Deprecated public void forEach_Dot(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID_Separate();
+    method @Deprecated public void setDotCoefficients(float, float, float, float);
+    method @Deprecated public void setOutput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicLUT extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicLUT create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method @Deprecated public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setAlpha(int, int);
+    method @Deprecated public void setBlue(int, int);
+    method @Deprecated public void setGreen(int, int);
+    method @Deprecated public void setRed(int, int);
+  }
+
+  @Deprecated public final class ScriptIntrinsicResize extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicResize create(android.renderscript.RenderScript);
+    method @Deprecated public void forEach_bicubic(android.renderscript.Allocation);
+    method @Deprecated public void forEach_bicubic(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID_bicubic();
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public final class ScriptIntrinsicYuvToRGB extends android.renderscript.ScriptIntrinsic {
+    method @Deprecated public static android.renderscript.ScriptIntrinsicYuvToRGB create(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public void forEach(android.renderscript.Allocation);
+    method @Deprecated public android.renderscript.Script.FieldID getFieldID_Input();
+    method @Deprecated public android.renderscript.Script.KernelID getKernelID();
+    method @Deprecated public void setInput(android.renderscript.Allocation);
+  }
+
+  @Deprecated public class Short2 {
+    ctor @Deprecated public Short2();
+    ctor @Deprecated public Short2(short, short);
+    field @Deprecated public short x;
+    field @Deprecated public short y;
+  }
+
+  @Deprecated public class Short3 {
+    ctor @Deprecated public Short3();
+    ctor @Deprecated public Short3(short, short, short);
+    field @Deprecated public short x;
+    field @Deprecated public short y;
+    field @Deprecated public short z;
+  }
+
+  @Deprecated public class Short4 {
+    ctor @Deprecated public Short4();
+    ctor @Deprecated public Short4(short, short, short, short);
+    field @Deprecated public short w;
+    field @Deprecated public short x;
+    field @Deprecated public short y;
+    field @Deprecated public short z;
+  }
+
+  @Deprecated public class Type extends android.renderscript.BaseObj {
+    method @Deprecated public static android.renderscript.Type createX(android.renderscript.RenderScript, android.renderscript.Element, int);
+    method @Deprecated public static android.renderscript.Type createXY(android.renderscript.RenderScript, android.renderscript.Element, int, int);
+    method @Deprecated public static android.renderscript.Type createXYZ(android.renderscript.RenderScript, android.renderscript.Element, int, int, int);
+    method @Deprecated public int getCount();
+    method @Deprecated public android.renderscript.Element getElement();
+    method @Deprecated public int getX();
+    method @Deprecated public int getY();
+    method @Deprecated public int getYuv();
+    method @Deprecated public int getZ();
+    method @Deprecated public boolean hasFaces();
+    method @Deprecated public boolean hasMipmaps();
+  }
+
+  @Deprecated public static class Type.Builder {
+    ctor @Deprecated public Type.Builder(android.renderscript.RenderScript, android.renderscript.Element);
+    method @Deprecated public android.renderscript.Type create();
+    method @Deprecated public android.renderscript.Type.Builder setFaces(boolean);
+    method @Deprecated public android.renderscript.Type.Builder setMipmaps(boolean);
+    method @Deprecated public android.renderscript.Type.Builder setX(int);
+    method @Deprecated public android.renderscript.Type.Builder setY(int);
+    method @Deprecated public android.renderscript.Type.Builder setYuvFormat(int);
+    method @Deprecated public android.renderscript.Type.Builder setZ(int);
+  }
+
+  @Deprecated public enum Type.CubemapFace {
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace NEGATIVE_X;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace NEGATIVE_Y;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace NEGATIVE_Z;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITIVE_X;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITIVE_Y;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITIVE_Z;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITVE_X;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITVE_Y;
+    enum_constant @Deprecated public static final android.renderscript.Type.CubemapFace POSITVE_Z;
+  }
+
+}
+
+package android.sax {
+
+  public class Element {
+    method public android.sax.Element getChild(String);
+    method public android.sax.Element getChild(String, String);
+    method public android.sax.Element requireChild(String);
+    method public android.sax.Element requireChild(String, String);
+    method public void setElementListener(android.sax.ElementListener);
+    method public void setEndElementListener(android.sax.EndElementListener);
+    method public void setEndTextElementListener(android.sax.EndTextElementListener);
+    method public void setStartElementListener(android.sax.StartElementListener);
+    method public void setTextElementListener(android.sax.TextElementListener);
+  }
+
+  public interface ElementListener extends android.sax.StartElementListener android.sax.EndElementListener {
+  }
+
+  public interface EndElementListener {
+    method public void end();
+  }
+
+  public interface EndTextElementListener {
+    method public void end(String);
+  }
+
+  public class RootElement extends android.sax.Element {
+    ctor public RootElement(String, String);
+    ctor public RootElement(String);
+    method public org.xml.sax.ContentHandler getContentHandler();
+  }
+
+  public interface StartElementListener {
+    method public void start(org.xml.sax.Attributes);
+  }
+
+  public interface TextElementListener extends android.sax.StartElementListener android.sax.EndTextElementListener {
+  }
+
+}
+
+package android.se.omapi {
+
+  public final class Channel implements java.nio.channels.Channel {
+    method public void close();
+    method @Nullable public byte[] getSelectResponse();
+    method @NonNull public android.se.omapi.Session getSession();
+    method public boolean isBasicChannel();
+    method public boolean isOpen();
+    method public boolean selectNext() throws java.io.IOException;
+    method @NonNull public byte[] transmit(@NonNull byte[]) throws java.io.IOException;
+  }
+
+  public final class Reader {
+    method public void closeSessions();
+    method @NonNull public String getName();
+    method @NonNull public android.se.omapi.SEService getSEService();
+    method public boolean isSecureElementPresent();
+    method @NonNull public android.se.omapi.Session openSession() throws java.io.IOException;
+  }
+
+  public final class SEService {
+    ctor public SEService(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.se.omapi.SEService.OnConnectedListener);
+    method @NonNull public android.se.omapi.Reader[] getReaders();
+    method @NonNull public android.se.omapi.Reader getUiccReader(int);
+    method @NonNull public String getVersion();
+    method public boolean isConnected();
+    method public void shutdown();
+    field public static final String ACTION_SECURE_ELEMENT_STATE_CHANGED = "android.se.omapi.action.SECURE_ELEMENT_STATE_CHANGED";
+    field public static final String EXTRA_READER_NAME = "android.se.omapi.extra.READER_NAME";
+    field public static final String EXTRA_READER_STATE = "android.se.omapi.extra.READER_STATE";
+  }
+
+  public static interface SEService.OnConnectedListener {
+    method public void onConnected();
+  }
+
+  public final class Session {
+    method public void close();
+    method public void closeChannels();
+    method @Nullable public byte[] getATR();
+    method @NonNull public android.se.omapi.Reader getReader();
+    method public boolean isClosed();
+    method @Nullable public android.se.omapi.Channel openBasicChannel(@Nullable byte[], @Nullable byte) throws java.io.IOException;
+    method @Nullable public android.se.omapi.Channel openBasicChannel(@Nullable byte[]) throws java.io.IOException;
+    method @Nullable public android.se.omapi.Channel openLogicalChannel(@Nullable byte[], @Nullable byte) throws java.io.IOException;
+    method @Nullable public android.se.omapi.Channel openLogicalChannel(@Nullable byte[]) throws java.io.IOException;
+  }
+
+}
+
+package android.security {
+
+  public final class AppUriAuthenticationPolicy implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.util.Map<android.net.Uri,java.lang.String>> getAppAndUriMappings();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.AppUriAuthenticationPolicy> CREATOR;
+  }
+
+  public static final class AppUriAuthenticationPolicy.Builder {
+    ctor public AppUriAuthenticationPolicy.Builder();
+    method @NonNull public android.security.AppUriAuthenticationPolicy.Builder addAppAndUriMapping(@NonNull String, @NonNull android.net.Uri, @NonNull String);
+    method @NonNull public android.security.AppUriAuthenticationPolicy build();
+  }
+
+  public final class AttestedKeyPair {
+    ctor public AttestedKeyPair(@Nullable java.security.KeyPair, @NonNull java.util.List<java.security.cert.Certificate>);
+    method @NonNull public java.util.List<java.security.cert.Certificate> getAttestationRecord();
+    method @Nullable public java.security.KeyPair getKeyPair();
+  }
+
+  public class ConfirmationAlreadyPresentingException extends java.lang.Exception {
+    ctor public ConfirmationAlreadyPresentingException();
+    ctor public ConfirmationAlreadyPresentingException(String);
+  }
+
+  public abstract class ConfirmationCallback {
+    ctor public ConfirmationCallback();
+    method public void onCanceled();
+    method public void onConfirmed(@NonNull byte[]);
+    method public void onDismissed();
+    method public void onError(Throwable);
+  }
+
+  public class ConfirmationNotAvailableException extends java.lang.Exception {
+    ctor public ConfirmationNotAvailableException();
+    ctor public ConfirmationNotAvailableException(String);
+  }
+
+  public class ConfirmationPrompt {
+    method public void cancelPrompt();
+    method public static boolean isSupported(android.content.Context);
+    method public void presentPrompt(@NonNull java.util.concurrent.Executor, @NonNull android.security.ConfirmationCallback) throws android.security.ConfirmationAlreadyPresentingException, android.security.ConfirmationNotAvailableException;
+  }
+
+  public static final class ConfirmationPrompt.Builder {
+    ctor public ConfirmationPrompt.Builder(android.content.Context);
+    method public android.security.ConfirmationPrompt build();
+    method public android.security.ConfirmationPrompt.Builder setExtraData(byte[]);
+    method public android.security.ConfirmationPrompt.Builder setPromptText(CharSequence);
+  }
+
+  public final class FileIntegrityManager {
+    method public boolean isApkVeritySupported();
+    method @RequiresPermission(anyOf={android.Manifest.permission.INSTALL_PACKAGES, android.Manifest.permission.REQUEST_INSTALL_PACKAGES}) public boolean isAppSourceCertificateTrusted(@NonNull java.security.cert.X509Certificate) throws java.security.cert.CertificateEncodingException;
+  }
+
+  public final class KeyChain {
+    ctor public KeyChain();
+    method public static void choosePrivateKeyAlias(@NonNull android.app.Activity, @NonNull android.security.KeyChainAliasCallback, @Nullable String[], @Nullable java.security.Principal[], @Nullable String, int, @Nullable String);
+    method public static void choosePrivateKeyAlias(@NonNull android.app.Activity, @NonNull android.security.KeyChainAliasCallback, @Nullable String[], @Nullable java.security.Principal[], @Nullable android.net.Uri, @Nullable String);
+    method @NonNull public static android.content.Intent createInstallIntent();
+    method @NonNull public static android.content.Intent createManageCredentialsIntent(@NonNull android.security.AppUriAuthenticationPolicy);
+    method @Nullable @WorkerThread public static java.security.cert.X509Certificate[] getCertificateChain(@NonNull android.content.Context, @NonNull String) throws java.lang.InterruptedException, android.security.KeyChainException;
+    method @NonNull @WorkerThread public static android.security.AppUriAuthenticationPolicy getCredentialManagementAppPolicy(@NonNull android.content.Context) throws java.lang.SecurityException;
+    method @Nullable @WorkerThread public static java.security.PrivateKey getPrivateKey(@NonNull android.content.Context, @NonNull String) throws java.lang.InterruptedException, android.security.KeyChainException;
+    method @Deprecated public static boolean isBoundKeyAlgorithm(@NonNull String);
+    method @WorkerThread public static boolean isCredentialManagementApp(@NonNull android.content.Context);
+    method public static boolean isKeyAlgorithmSupported(@NonNull String);
+    method @RequiresPermission(value="android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP", conditional=true) @WorkerThread public static boolean removeCredentialManagementApp(@NonNull android.content.Context);
+    field public static final String ACTION_KEYCHAIN_CHANGED = "android.security.action.KEYCHAIN_CHANGED";
+    field public static final String ACTION_KEY_ACCESS_CHANGED = "android.security.action.KEY_ACCESS_CHANGED";
+    field @Deprecated public static final String ACTION_STORAGE_CHANGED = "android.security.STORAGE_CHANGED";
+    field public static final String ACTION_TRUST_STORE_CHANGED = "android.security.action.TRUST_STORE_CHANGED";
+    field public static final String EXTRA_CERTIFICATE = "CERT";
+    field public static final String EXTRA_KEY_ACCESSIBLE = "android.security.extra.KEY_ACCESSIBLE";
+    field public static final String EXTRA_KEY_ALIAS = "android.security.extra.KEY_ALIAS";
+    field public static final String EXTRA_NAME = "name";
+    field public static final String EXTRA_PKCS12 = "PKCS12";
+    field public static final String KEY_ALIAS_SELECTION_DENIED = "android:alias-selection-denied";
+  }
+
+  public interface KeyChainAliasCallback {
+    method public void alias(@Nullable String);
+  }
+
+  public class KeyChainException extends java.lang.Exception {
+    ctor public KeyChainException();
+    ctor public KeyChainException(String);
+    ctor public KeyChainException(String, Throwable);
+    ctor public KeyChainException(Throwable);
+  }
+
+  @Deprecated public final class KeyPairGeneratorSpec implements java.security.spec.AlgorithmParameterSpec {
+    method @Deprecated @NonNull public java.security.spec.AlgorithmParameterSpec getAlgorithmParameterSpec();
+    method @Deprecated public android.content.Context getContext();
+    method @Deprecated @NonNull public java.util.Date getEndDate();
+    method @Deprecated public int getKeySize();
+    method @Deprecated @Nullable public String getKeyType();
+    method @Deprecated public String getKeystoreAlias();
+    method @Deprecated @NonNull public java.math.BigInteger getSerialNumber();
+    method @Deprecated @NonNull public java.util.Date getStartDate();
+    method @Deprecated @NonNull public javax.security.auth.x500.X500Principal getSubjectDN();
+    method @Deprecated public boolean isEncryptionRequired();
+  }
+
+  @Deprecated public static final class KeyPairGeneratorSpec.Builder {
+    ctor @Deprecated public KeyPairGeneratorSpec.Builder(@NonNull android.content.Context);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec build();
+    method @Deprecated public android.security.KeyPairGeneratorSpec.Builder setAlgorithmParameterSpec(@NonNull java.security.spec.AlgorithmParameterSpec);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setAlias(@NonNull String);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setEncryptionRequired();
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setEndDate(@NonNull java.util.Date);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setKeySize(int);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setKeyType(@NonNull String) throws java.security.NoSuchAlgorithmException;
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setSerialNumber(@NonNull java.math.BigInteger);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setStartDate(@NonNull java.util.Date);
+    method @Deprecated @NonNull public android.security.KeyPairGeneratorSpec.Builder setSubject(@NonNull javax.security.auth.x500.X500Principal);
+  }
+
+  @Deprecated public final class KeyStoreParameter implements java.security.KeyStore.ProtectionParameter {
+    method @Deprecated public boolean isEncryptionRequired();
+  }
+
+  @Deprecated public static final class KeyStoreParameter.Builder {
+    ctor @Deprecated public KeyStoreParameter.Builder(@NonNull android.content.Context);
+    method @Deprecated @NonNull public android.security.KeyStoreParameter build();
+    method @Deprecated @NonNull public android.security.KeyStoreParameter.Builder setEncryptionRequired(boolean);
+  }
+
+  public class NetworkSecurityPolicy {
+    method public static android.security.NetworkSecurityPolicy getInstance();
+    method public boolean isCleartextTrafficPermitted();
+    method public boolean isCleartextTrafficPermitted(String);
+  }
+
+}
+
+package android.security.identity {
+
+  public class AccessControlProfile {
+  }
+
+  public static final class AccessControlProfile.Builder {
+    ctor public AccessControlProfile.Builder(@NonNull android.security.identity.AccessControlProfileId);
+    method @NonNull public android.security.identity.AccessControlProfile build();
+    method @NonNull public android.security.identity.AccessControlProfile.Builder setReaderCertificate(@NonNull java.security.cert.X509Certificate);
+    method @NonNull public android.security.identity.AccessControlProfile.Builder setUserAuthenticationRequired(boolean);
+    method @NonNull public android.security.identity.AccessControlProfile.Builder setUserAuthenticationTimeout(long);
+  }
+
+  public class AccessControlProfileId {
+    ctor public AccessControlProfileId(int);
+    method public int getId();
+  }
+
+  public class AlreadyPersonalizedException extends android.security.identity.IdentityCredentialException {
+    ctor public AlreadyPersonalizedException(@NonNull String);
+    ctor public AlreadyPersonalizedException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class CipherSuiteNotSupportedException extends android.security.identity.IdentityCredentialException {
+    ctor public CipherSuiteNotSupportedException(@NonNull String);
+    ctor public CipherSuiteNotSupportedException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class DocTypeNotSupportedException extends android.security.identity.IdentityCredentialException {
+    ctor public DocTypeNotSupportedException(@NonNull String);
+    ctor public DocTypeNotSupportedException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class EphemeralPublicKeyNotFoundException extends android.security.identity.IdentityCredentialException {
+    ctor public EphemeralPublicKeyNotFoundException(@NonNull String);
+    ctor public EphemeralPublicKeyNotFoundException(@NonNull String, @NonNull Throwable);
+  }
+
+  public abstract class IdentityCredential {
+    method @NonNull public abstract java.security.KeyPair createEphemeralKeyPair();
+    method @NonNull public abstract byte[] decryptMessageFromReader(@NonNull byte[]) throws android.security.identity.MessageDecryptionException;
+    method @NonNull public byte[] delete(@NonNull byte[]);
+    method @NonNull public abstract byte[] encryptMessageToReader(@NonNull byte[]);
+    method @NonNull public abstract java.util.Collection<java.security.cert.X509Certificate> getAuthKeysNeedingCertification();
+    method @NonNull public abstract int[] getAuthenticationDataUsageCount();
+    method @NonNull public abstract java.util.Collection<java.security.cert.X509Certificate> getCredentialKeyCertificateChain();
+    method @NonNull public abstract android.security.identity.ResultData getEntries(@Nullable byte[], @NonNull java.util.Map<java.lang.String,java.util.Collection<java.lang.String>>, @Nullable byte[], @Nullable byte[]) throws android.security.identity.EphemeralPublicKeyNotFoundException, android.security.identity.InvalidReaderSignatureException, android.security.identity.InvalidRequestMessageException, android.security.identity.NoAuthenticationKeyAvailableException, android.security.identity.SessionTranscriptMismatchException;
+    method @NonNull public byte[] proveOwnership(@NonNull byte[]);
+    method public abstract void setAllowUsingExhaustedKeys(boolean);
+    method public void setAllowUsingExpiredKeys(boolean);
+    method public abstract void setAvailableAuthenticationKeys(int, int);
+    method public abstract void setReaderEphemeralPublicKey(@NonNull java.security.PublicKey) throws java.security.InvalidKeyException;
+    method @Deprecated public abstract void storeStaticAuthenticationData(@NonNull java.security.cert.X509Certificate, @NonNull byte[]) throws android.security.identity.UnknownAuthenticationKeyException;
+    method public void storeStaticAuthenticationData(@NonNull java.security.cert.X509Certificate, @NonNull java.time.Instant, @NonNull byte[]) throws android.security.identity.UnknownAuthenticationKeyException;
+    method @NonNull public byte[] update(@NonNull android.security.identity.PersonalizationData);
+  }
+
+  public class IdentityCredentialException extends java.lang.Exception {
+    ctor public IdentityCredentialException(@NonNull String);
+    ctor public IdentityCredentialException(@NonNull String, @NonNull Throwable);
+  }
+
+  public abstract class IdentityCredentialStore {
+    method @NonNull public abstract android.security.identity.WritableIdentityCredential createCredential(@NonNull String, @NonNull String) throws android.security.identity.AlreadyPersonalizedException, android.security.identity.DocTypeNotSupportedException;
+    method @Deprecated @Nullable public abstract byte[] deleteCredentialByName(@NonNull String);
+    method @Nullable public abstract android.security.identity.IdentityCredential getCredentialByName(@NonNull String, int) throws android.security.identity.CipherSuiteNotSupportedException;
+    method @Nullable public static android.security.identity.IdentityCredentialStore getDirectAccessInstance(@NonNull android.content.Context);
+    method @Nullable public static android.security.identity.IdentityCredentialStore getInstance(@NonNull android.content.Context);
+    method @NonNull public abstract String[] getSupportedDocTypes();
+    field public static final int CIPHERSUITE_ECDHE_HKDF_ECDSA_WITH_AES_256_GCM_SHA256 = 1; // 0x1
+  }
+
+  public class InvalidReaderSignatureException extends android.security.identity.IdentityCredentialException {
+    ctor public InvalidReaderSignatureException(@NonNull String);
+    ctor public InvalidReaderSignatureException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class InvalidRequestMessageException extends android.security.identity.IdentityCredentialException {
+    ctor public InvalidRequestMessageException(@NonNull String);
+    ctor public InvalidRequestMessageException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class MessageDecryptionException extends android.security.identity.IdentityCredentialException {
+    ctor public MessageDecryptionException(@NonNull String);
+    ctor public MessageDecryptionException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class NoAuthenticationKeyAvailableException extends android.security.identity.IdentityCredentialException {
+    ctor public NoAuthenticationKeyAvailableException(@NonNull String);
+    ctor public NoAuthenticationKeyAvailableException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class PersonalizationData {
+  }
+
+  public static final class PersonalizationData.Builder {
+    ctor public PersonalizationData.Builder();
+    method @NonNull public android.security.identity.PersonalizationData.Builder addAccessControlProfile(@NonNull android.security.identity.AccessControlProfile);
+    method @NonNull public android.security.identity.PersonalizationData build();
+    method @NonNull public android.security.identity.PersonalizationData.Builder putEntry(@NonNull String, @NonNull String, @NonNull java.util.Collection<android.security.identity.AccessControlProfileId>, @NonNull byte[]);
+  }
+
+  public abstract class ResultData {
+    method @NonNull public abstract byte[] getAuthenticatedData();
+    method @Nullable public abstract byte[] getEntry(@NonNull String, @NonNull String);
+    method @Nullable public abstract java.util.Collection<java.lang.String> getEntryNames(@NonNull String);
+    method @Nullable public abstract byte[] getMessageAuthenticationCode();
+    method @NonNull public abstract java.util.Collection<java.lang.String> getNamespaces();
+    method @Nullable public abstract java.util.Collection<java.lang.String> getRetrievedEntryNames(@NonNull String);
+    method @NonNull public abstract byte[] getStaticAuthenticationData();
+    method public abstract int getStatus(@NonNull String, @NonNull String);
+    field public static final int STATUS_NOT_IN_REQUEST_MESSAGE = 3; // 0x3
+    field public static final int STATUS_NOT_REQUESTED = 2; // 0x2
+    field public static final int STATUS_NO_ACCESS_CONTROL_PROFILES = 6; // 0x6
+    field public static final int STATUS_NO_SUCH_ENTRY = 1; // 0x1
+    field public static final int STATUS_OK = 0; // 0x0
+    field public static final int STATUS_READER_AUTHENTICATION_FAILED = 5; // 0x5
+    field public static final int STATUS_USER_AUTHENTICATION_FAILED = 4; // 0x4
+  }
+
+  public class SessionTranscriptMismatchException extends android.security.identity.IdentityCredentialException {
+    ctor public SessionTranscriptMismatchException(@NonNull String);
+    ctor public SessionTranscriptMismatchException(@NonNull String, @NonNull Throwable);
+  }
+
+  public class UnknownAuthenticationKeyException extends android.security.identity.IdentityCredentialException {
+    ctor public UnknownAuthenticationKeyException(@NonNull String);
+    ctor public UnknownAuthenticationKeyException(@NonNull String, @NonNull Throwable);
+  }
+
+  public abstract class WritableIdentityCredential {
+    method @NonNull public abstract java.util.Collection<java.security.cert.X509Certificate> getCredentialKeyCertificateChain(@NonNull byte[]);
+    method @NonNull public abstract byte[] personalize(@NonNull android.security.identity.PersonalizationData);
+  }
+
+}
+
+package android.security.keystore {
+
+  public class BackendBusyException extends java.security.ProviderException {
+    ctor public BackendBusyException(long);
+    ctor public BackendBusyException(long, @NonNull String);
+    ctor public BackendBusyException(long, @NonNull String, @NonNull Throwable);
+    method public long getBackOffHintMillis();
+  }
+
+  public class KeyExpiredException extends java.security.InvalidKeyException {
+    ctor public KeyExpiredException();
+    ctor public KeyExpiredException(String);
+    ctor public KeyExpiredException(String, Throwable);
+  }
+
+  public final class KeyGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    method @Nullable public java.security.spec.AlgorithmParameterSpec getAlgorithmParameterSpec();
+    method @Nullable public String getAttestKeyAlias();
+    method public byte[] getAttestationChallenge();
+    method @NonNull public String[] getBlockModes();
+    method @NonNull public java.util.Date getCertificateNotAfter();
+    method @NonNull public java.util.Date getCertificateNotBefore();
+    method @NonNull public java.math.BigInteger getCertificateSerialNumber();
+    method @NonNull public javax.security.auth.x500.X500Principal getCertificateSubject();
+    method @NonNull public String[] getDigests();
+    method @NonNull public String[] getEncryptionPaddings();
+    method public int getKeySize();
+    method @Nullable public java.util.Date getKeyValidityForConsumptionEnd();
+    method @Nullable public java.util.Date getKeyValidityForOriginationEnd();
+    method @Nullable public java.util.Date getKeyValidityStart();
+    method @NonNull public String getKeystoreAlias();
+    method public int getMaxUsageCount();
+    method public int getPurposes();
+    method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
+    method public int getUserAuthenticationValidityDurationSeconds();
+    method public boolean isDevicePropertiesAttestationIncluded();
+    method @NonNull public boolean isDigestsSpecified();
+    method public boolean isInvalidatedByBiometricEnrollment();
+    method public boolean isRandomizedEncryptionRequired();
+    method public boolean isStrongBoxBacked();
+    method public boolean isUnlockedDeviceRequired();
+    method public boolean isUserAuthenticationRequired();
+    method public boolean isUserAuthenticationValidWhileOnBody();
+    method public boolean isUserConfirmationRequired();
+    method public boolean isUserPresenceRequired();
+  }
+
+  public static final class KeyGenParameterSpec.Builder {
+    ctor public KeyGenParameterSpec.Builder(@NonNull String, int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec build();
+    method public android.security.keystore.KeyGenParameterSpec.Builder setAlgorithmParameterSpec(@NonNull java.security.spec.AlgorithmParameterSpec);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setAttestKeyAlias(@Nullable String);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setAttestationChallenge(byte[]);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setBlockModes(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateNotAfter(@NonNull java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateNotBefore(@NonNull java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateSerialNumber(@NonNull java.math.BigInteger);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setCertificateSubject(@NonNull javax.security.auth.x500.X500Principal);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setDevicePropertiesAttestationIncluded(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setDigests(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setEncryptionPaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setInvalidatedByBiometricEnrollment(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setIsStrongBoxBacked(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeySize(int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityForConsumptionEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityForOriginationEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityStart(java.util.Date);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setMaxUsageCount(int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setRandomizedEncryptionRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setSignaturePaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUnlockedDeviceRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationParameters(@IntRange(from=0) int, int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidWhileOnBody(boolean);
+    method @Deprecated @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserConfirmationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUserPresenceRequired(boolean);
+  }
+
+  public class KeyInfo implements java.security.spec.KeySpec {
+    method @NonNull public String[] getBlockModes();
+    method @NonNull public String[] getDigests();
+    method @NonNull public String[] getEncryptionPaddings();
+    method public int getKeySize();
+    method @Nullable public java.util.Date getKeyValidityForConsumptionEnd();
+    method @Nullable public java.util.Date getKeyValidityForOriginationEnd();
+    method @Nullable public java.util.Date getKeyValidityStart();
+    method public String getKeystoreAlias();
+    method public int getOrigin();
+    method public int getPurposes();
+    method public int getRemainingUsageCount();
+    method public int getSecurityLevel();
+    method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
+    method public int getUserAuthenticationValidityDurationSeconds();
+    method @Deprecated public boolean isInsideSecureHardware();
+    method public boolean isInvalidatedByBiometricEnrollment();
+    method public boolean isTrustedUserPresenceRequired();
+    method public boolean isUserAuthenticationRequired();
+    method public boolean isUserAuthenticationRequirementEnforcedBySecureHardware();
+    method public boolean isUserAuthenticationValidWhileOnBody();
+    method public boolean isUserConfirmationRequired();
+  }
+
+  public class KeyNotYetValidException extends java.security.InvalidKeyException {
+    ctor public KeyNotYetValidException();
+    ctor public KeyNotYetValidException(String);
+    ctor public KeyNotYetValidException(String, Throwable);
+  }
+
+  public class KeyPermanentlyInvalidatedException extends java.security.InvalidKeyException {
+    ctor public KeyPermanentlyInvalidatedException();
+    ctor public KeyPermanentlyInvalidatedException(String);
+    ctor public KeyPermanentlyInvalidatedException(String, Throwable);
+  }
+
+  public abstract class KeyProperties {
+    field public static final int AUTH_BIOMETRIC_STRONG = 2; // 0x2
+    field public static final int AUTH_DEVICE_CREDENTIAL = 1; // 0x1
+    field public static final String BLOCK_MODE_CBC = "CBC";
+    field public static final String BLOCK_MODE_CTR = "CTR";
+    field public static final String BLOCK_MODE_ECB = "ECB";
+    field public static final String BLOCK_MODE_GCM = "GCM";
+    field public static final String DIGEST_MD5 = "MD5";
+    field public static final String DIGEST_NONE = "NONE";
+    field public static final String DIGEST_SHA1 = "SHA-1";
+    field public static final String DIGEST_SHA224 = "SHA-224";
+    field public static final String DIGEST_SHA256 = "SHA-256";
+    field public static final String DIGEST_SHA384 = "SHA-384";
+    field public static final String DIGEST_SHA512 = "SHA-512";
+    field public static final String ENCRYPTION_PADDING_NONE = "NoPadding";
+    field public static final String ENCRYPTION_PADDING_PKCS7 = "PKCS7Padding";
+    field public static final String ENCRYPTION_PADDING_RSA_OAEP = "OAEPPadding";
+    field public static final String ENCRYPTION_PADDING_RSA_PKCS1 = "PKCS1Padding";
+    field @Deprecated public static final String KEY_ALGORITHM_3DES = "DESede";
+    field public static final String KEY_ALGORITHM_AES = "AES";
+    field public static final String KEY_ALGORITHM_EC = "EC";
+    field public static final String KEY_ALGORITHM_HMAC_SHA1 = "HmacSHA1";
+    field public static final String KEY_ALGORITHM_HMAC_SHA224 = "HmacSHA224";
+    field public static final String KEY_ALGORITHM_HMAC_SHA256 = "HmacSHA256";
+    field public static final String KEY_ALGORITHM_HMAC_SHA384 = "HmacSHA384";
+    field public static final String KEY_ALGORITHM_HMAC_SHA512 = "HmacSHA512";
+    field public static final String KEY_ALGORITHM_RSA = "RSA";
+    field public static final int ORIGIN_GENERATED = 1; // 0x1
+    field public static final int ORIGIN_IMPORTED = 2; // 0x2
+    field public static final int ORIGIN_SECURELY_IMPORTED = 8; // 0x8
+    field public static final int ORIGIN_UNKNOWN = 4; // 0x4
+    field public static final int PURPOSE_AGREE_KEY = 64; // 0x40
+    field public static final int PURPOSE_ATTEST_KEY = 128; // 0x80
+    field public static final int PURPOSE_DECRYPT = 2; // 0x2
+    field public static final int PURPOSE_ENCRYPT = 1; // 0x1
+    field public static final int PURPOSE_SIGN = 4; // 0x4
+    field public static final int PURPOSE_VERIFY = 8; // 0x8
+    field public static final int PURPOSE_WRAP_KEY = 32; // 0x20
+    field public static final int SECURITY_LEVEL_SOFTWARE = 0; // 0x0
+    field public static final int SECURITY_LEVEL_STRONGBOX = 2; // 0x2
+    field public static final int SECURITY_LEVEL_TRUSTED_ENVIRONMENT = 1; // 0x1
+    field public static final int SECURITY_LEVEL_UNKNOWN = -2; // 0xfffffffe
+    field public static final int SECURITY_LEVEL_UNKNOWN_SECURE = -1; // 0xffffffff
+    field public static final String SIGNATURE_PADDING_RSA_PKCS1 = "PKCS1";
+    field public static final String SIGNATURE_PADDING_RSA_PSS = "PSS";
+    field public static final int UNRESTRICTED_USAGE_COUNT = -1; // 0xffffffff
+  }
+
+  public final class KeyProtection implements java.security.KeyStore.ProtectionParameter {
+    method @NonNull public String[] getBlockModes();
+    method @NonNull public String[] getDigests();
+    method @NonNull public String[] getEncryptionPaddings();
+    method @Nullable public java.util.Date getKeyValidityForConsumptionEnd();
+    method @Nullable public java.util.Date getKeyValidityForOriginationEnd();
+    method @Nullable public java.util.Date getKeyValidityStart();
+    method public int getMaxUsageCount();
+    method public int getPurposes();
+    method @NonNull public String[] getSignaturePaddings();
+    method public int getUserAuthenticationType();
+    method public int getUserAuthenticationValidityDurationSeconds();
+    method public boolean isDigestsSpecified();
+    method public boolean isInvalidatedByBiometricEnrollment();
+    method public boolean isRandomizedEncryptionRequired();
+    method public boolean isUnlockedDeviceRequired();
+    method public boolean isUserAuthenticationRequired();
+    method public boolean isUserAuthenticationValidWhileOnBody();
+    method public boolean isUserConfirmationRequired();
+    method public boolean isUserPresenceRequired();
+  }
+
+  public static final class KeyProtection.Builder {
+    ctor public KeyProtection.Builder(int);
+    method @NonNull public android.security.keystore.KeyProtection build();
+    method @NonNull public android.security.keystore.KeyProtection.Builder setBlockModes(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setDigests(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setEncryptionPaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setInvalidatedByBiometricEnrollment(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setIsStrongBoxBacked(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityForConsumptionEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityForOriginationEnd(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setKeyValidityStart(java.util.Date);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setMaxUsageCount(int);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setRandomizedEncryptionRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setSignaturePaddings(java.lang.String...);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUnlockedDeviceRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationParameters(@IntRange(from=0) int, int);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidWhileOnBody(boolean);
+    method @Deprecated @NonNull public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidityDurationSeconds(@IntRange(from=0xffffffff) int);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserConfirmationRequired(boolean);
+    method @NonNull public android.security.keystore.KeyProtection.Builder setUserPresenceRequired(boolean);
+  }
+
+  public class SecureKeyImportUnavailableException extends java.security.ProviderException {
+    ctor public SecureKeyImportUnavailableException();
+    ctor public SecureKeyImportUnavailableException(String);
+    ctor public SecureKeyImportUnavailableException(String, Throwable);
+    ctor public SecureKeyImportUnavailableException(Throwable);
+  }
+
+  public class StrongBoxUnavailableException extends java.security.ProviderException {
+    ctor public StrongBoxUnavailableException();
+    ctor public StrongBoxUnavailableException(String);
+    ctor public StrongBoxUnavailableException(String, Throwable);
+    ctor public StrongBoxUnavailableException(Throwable);
+  }
+
+  public class UserNotAuthenticatedException extends java.security.InvalidKeyException {
+    ctor public UserNotAuthenticatedException();
+    ctor public UserNotAuthenticatedException(String);
+    ctor public UserNotAuthenticatedException(String, Throwable);
+  }
+
+  public class UserPresenceUnavailableException extends java.security.InvalidKeyException {
+    ctor public UserPresenceUnavailableException();
+    ctor public UserPresenceUnavailableException(String);
+    ctor public UserPresenceUnavailableException(String, Throwable);
+  }
+
+  public class WrappedKeyEntry implements java.security.KeyStore.Entry {
+    ctor public WrappedKeyEntry(byte[], String, String, java.security.spec.AlgorithmParameterSpec);
+    method public java.security.spec.AlgorithmParameterSpec getAlgorithmParameterSpec();
+    method public String getTransformation();
+    method public byte[] getWrappedKeyBytes();
+    method public String getWrappingKeyAlias();
+  }
+
+}
+
+package android.service.autofill {
+
+  public abstract class AutofillService extends android.app.Service {
+    ctor public AutofillService();
+    method @Nullable public final android.service.autofill.FillEventHistory getFillEventHistory();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public void onConnected();
+    method public void onDisconnected();
+    method public abstract void onFillRequest(@NonNull android.service.autofill.FillRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.FillCallback);
+    method public abstract void onSaveRequest(@NonNull android.service.autofill.SaveRequest, @NonNull android.service.autofill.SaveCallback);
+    method public void onSavedDatasetsInfoRequest(@NonNull android.service.autofill.SavedDatasetsInfoCallback);
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.AutofillService";
+    field public static final String SERVICE_META_DATA = "android.autofill";
+  }
+
+  public final class BatchUpdates implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.BatchUpdates> CREATOR;
+  }
+
+  public static class BatchUpdates.Builder {
+    ctor public BatchUpdates.Builder();
+    method public android.service.autofill.BatchUpdates build();
+    method public android.service.autofill.BatchUpdates.Builder transformChild(int, @NonNull android.service.autofill.Transformation);
+    method public android.service.autofill.BatchUpdates.Builder updateTemplate(@NonNull android.widget.RemoteViews);
+  }
+
+  public final class CharSequenceTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CharSequenceTransformation> CREATOR;
+  }
+
+  public static class CharSequenceTransformation.Builder {
+    ctor public CharSequenceTransformation.Builder(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @NonNull String);
+    method public android.service.autofill.CharSequenceTransformation.Builder addField(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @NonNull String);
+    method public android.service.autofill.CharSequenceTransformation build();
+  }
+
+  public final class CustomDescription implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CustomDescription> CREATOR;
+  }
+
+  public static class CustomDescription.Builder {
+    ctor public CustomDescription.Builder(@NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.CustomDescription.Builder addChild(int, @NonNull android.service.autofill.Transformation);
+    method @NonNull public android.service.autofill.CustomDescription.Builder addOnClickAction(int, @NonNull android.service.autofill.OnClickAction);
+    method @NonNull public android.service.autofill.CustomDescription.Builder batchUpdate(@NonNull android.service.autofill.Validator, @NonNull android.service.autofill.BatchUpdates);
+    method @NonNull public android.service.autofill.CustomDescription build();
+  }
+
+  public final class Dataset implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.Dataset> CREATOR;
+  }
+
+  public static final class Dataset.Builder {
+    ctor public Dataset.Builder(@NonNull android.widget.RemoteViews);
+    ctor public Dataset.Builder();
+    method @NonNull public android.service.autofill.Dataset build();
+    method @NonNull public android.service.autofill.Dataset.Builder setAuthentication(@Nullable android.content.IntentSender);
+    method @NonNull public android.service.autofill.Dataset.Builder setId(@Nullable String);
+    method @NonNull public android.service.autofill.Dataset.Builder setInlinePresentation(@NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setInlinePresentation(@NonNull android.service.autofill.InlinePresentation, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setValue(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.widget.RemoteViews, @NonNull android.service.autofill.InlinePresentation, @NonNull android.service.autofill.InlinePresentation);
+  }
+
+  public final class DateTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    ctor public DateTransformation(@NonNull android.view.autofill.AutofillId, @NonNull android.icu.text.DateFormat);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.DateTransformation> CREATOR;
+  }
+
+  public final class DateValueSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    ctor public DateValueSanitizer(@NonNull android.icu.text.DateFormat);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.DateValueSanitizer> CREATOR;
+  }
+
+  public final class FieldClassification {
+    method @NonNull public java.util.List<android.service.autofill.FieldClassification.Match> getMatches();
+  }
+
+  public static final class FieldClassification.Match {
+    method @NonNull public String getCategoryId();
+    method public float getScore();
+  }
+
+  public final class FillCallback {
+    method public void onFailure(@Nullable CharSequence);
+    method public void onSuccess(@Nullable android.service.autofill.FillResponse);
+  }
+
+  public final class FillContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.autofill.AutofillId getFocusedId();
+    method public int getRequestId();
+    method @NonNull public android.app.assist.AssistStructure getStructure();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillContext> CREATOR;
+  }
+
+  public final class FillEventHistory implements android.os.Parcelable {
+    method public int describeContents();
+    method @Deprecated @Nullable public android.os.Bundle getClientState();
+    method @Nullable public java.util.List<android.service.autofill.FillEventHistory.Event> getEvents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillEventHistory> CREATOR;
+  }
+
+  public static final class FillEventHistory.Event {
+    method @NonNull public java.util.Map<android.view.autofill.AutofillId,java.lang.String> getChangedFields();
+    method @Nullable public android.os.Bundle getClientState();
+    method @Nullable public String getDatasetId();
+    method @NonNull public java.util.Map<android.view.autofill.AutofillId,android.service.autofill.FieldClassification> getFieldsClassification();
+    method @NonNull public java.util.Set<java.lang.String> getIgnoredDatasetIds();
+    method @NonNull public java.util.Map<android.view.autofill.AutofillId,java.util.Set<java.lang.String>> getManuallyEnteredField();
+    method public int getNoSaveUiReason();
+    method @NonNull public java.util.Set<java.lang.String> getSelectedDatasetIds();
+    method public int getType();
+    field public static final int NO_SAVE_UI_REASON_DATASET_MATCH = 6; // 0x6
+    field public static final int NO_SAVE_UI_REASON_FIELD_VALIDATION_FAILED = 5; // 0x5
+    field public static final int NO_SAVE_UI_REASON_HAS_EMPTY_REQUIRED = 3; // 0x3
+    field public static final int NO_SAVE_UI_REASON_NONE = 0; // 0x0
+    field public static final int NO_SAVE_UI_REASON_NO_SAVE_INFO = 1; // 0x1
+    field public static final int NO_SAVE_UI_REASON_NO_VALUE_CHANGED = 4; // 0x4
+    field public static final int NO_SAVE_UI_REASON_WITH_DELAY_SAVE_FLAG = 2; // 0x2
+    field public static final int TYPE_AUTHENTICATION_SELECTED = 2; // 0x2
+    field public static final int TYPE_CONTEXT_COMMITTED = 4; // 0x4
+    field public static final int TYPE_DATASETS_SHOWN = 5; // 0x5
+    field public static final int TYPE_DATASET_AUTHENTICATION_SELECTED = 1; // 0x1
+    field public static final int TYPE_DATASET_SELECTED = 0; // 0x0
+    field public static final int TYPE_SAVE_SHOWN = 3; // 0x3
+  }
+
+  public final class FillRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getClientState();
+    method @NonNull public java.util.List<android.service.autofill.FillContext> getFillContexts();
+    method public int getFlags();
+    method public int getId();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest getInlineSuggestionsRequest();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillRequest> CREATOR;
+    field public static final int FLAG_COMPATIBILITY_MODE_REQUEST = 2; // 0x2
+    field public static final int FLAG_MANUAL_REQUEST = 1; // 0x1
+  }
+
+  public final class FillResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.FillResponse> CREATOR;
+    field public static final int FLAG_DISABLE_ACTIVITY_ONLY = 2; // 0x2
+    field public static final int FLAG_TRACK_CONTEXT_COMMITED = 1; // 0x1
+  }
+
+  public static final class FillResponse.Builder {
+    ctor public FillResponse.Builder();
+    method @NonNull public android.service.autofill.FillResponse.Builder addDataset(@Nullable android.service.autofill.Dataset);
+    method @NonNull public android.service.autofill.FillResponse build();
+    method @NonNull public android.service.autofill.FillResponse.Builder disableAutofill(long);
+    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews, @Nullable android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.FillResponse.Builder setAuthentication(@NonNull android.view.autofill.AutofillId[], @Nullable android.content.IntentSender, @Nullable android.widget.RemoteViews, @Nullable android.service.autofill.InlinePresentation, @Nullable android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.FillResponse.Builder setClientState(@Nullable android.os.Bundle);
+    method @NonNull public android.service.autofill.FillResponse.Builder setFieldClassificationIds(@NonNull android.view.autofill.AutofillId...);
+    method @NonNull public android.service.autofill.FillResponse.Builder setFlags(int);
+    method @NonNull public android.service.autofill.FillResponse.Builder setFooter(@NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.FillResponse.Builder setHeader(@NonNull android.widget.RemoteViews);
+    method @NonNull public android.service.autofill.FillResponse.Builder setIgnoredIds(android.view.autofill.AutofillId...);
+    method @NonNull public android.service.autofill.FillResponse.Builder setPresentationCancelIds(@Nullable int[]);
+    method @NonNull public android.service.autofill.FillResponse.Builder setSaveInfo(@NonNull android.service.autofill.SaveInfo);
+    method @NonNull public android.service.autofill.FillResponse.Builder setUserData(@NonNull android.service.autofill.UserData);
+  }
+
+  public final class ImageTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.ImageTransformation> CREATOR;
+  }
+
+  public static class ImageTransformation.Builder {
+    ctor @Deprecated public ImageTransformation.Builder(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @DrawableRes int);
+    ctor public ImageTransformation.Builder(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern, @DrawableRes int, @NonNull CharSequence);
+    method @Deprecated public android.service.autofill.ImageTransformation.Builder addOption(@NonNull java.util.regex.Pattern, @DrawableRes int);
+    method public android.service.autofill.ImageTransformation.Builder addOption(@NonNull java.util.regex.Pattern, @DrawableRes int, @NonNull CharSequence);
+    method public android.service.autofill.ImageTransformation build();
+  }
+
+  public final class InlinePresentation implements android.os.Parcelable {
+    ctor public InlinePresentation(@NonNull android.app.slice.Slice, @NonNull android.widget.inline.InlinePresentationSpec, boolean);
+    method @NonNull public static android.service.autofill.InlinePresentation createTooltipPresentation(@NonNull android.app.slice.Slice, @NonNull android.widget.inline.InlinePresentationSpec);
+    method public int describeContents();
+    method @NonNull public android.widget.inline.InlinePresentationSpec getInlinePresentationSpec();
+    method @NonNull public android.app.slice.Slice getSlice();
+    method public boolean isPinned();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.InlinePresentation> CREATOR;
+  }
+
+  public final class LuhnChecksumValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public LuhnChecksumValidator(@NonNull android.view.autofill.AutofillId...);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.LuhnChecksumValidator> CREATOR;
+  }
+
+  public interface OnClickAction {
+  }
+
+  public final class RegexValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public RegexValidator(@NonNull android.view.autofill.AutofillId, @NonNull java.util.regex.Pattern);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.RegexValidator> CREATOR;
+  }
+
+  public interface Sanitizer {
+  }
+
+  public final class SaveCallback {
+    method public void onFailure(CharSequence);
+    method public void onSuccess();
+    method public void onSuccess(@NonNull android.content.IntentSender);
+  }
+
+  public final class SaveInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.SaveInfo> CREATOR;
+    field public static final int FLAG_DELAY_SAVE = 4; // 0x4
+    field public static final int FLAG_DONT_SAVE_ON_FINISH = 2; // 0x2
+    field public static final int FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE = 1; // 0x1
+    field public static final int NEGATIVE_BUTTON_STYLE_CANCEL = 0; // 0x0
+    field public static final int NEGATIVE_BUTTON_STYLE_NEVER = 2; // 0x2
+    field public static final int NEGATIVE_BUTTON_STYLE_REJECT = 1; // 0x1
+    field public static final int POSITIVE_BUTTON_STYLE_CONTINUE = 1; // 0x1
+    field public static final int POSITIVE_BUTTON_STYLE_SAVE = 0; // 0x0
+    field public static final int SAVE_DATA_TYPE_ADDRESS = 2; // 0x2
+    field public static final int SAVE_DATA_TYPE_CREDIT_CARD = 4; // 0x4
+    field public static final int SAVE_DATA_TYPE_DEBIT_CARD = 32; // 0x20
+    field public static final int SAVE_DATA_TYPE_EMAIL_ADDRESS = 16; // 0x10
+    field public static final int SAVE_DATA_TYPE_GENERIC = 0; // 0x0
+    field public static final int SAVE_DATA_TYPE_GENERIC_CARD = 128; // 0x80
+    field public static final int SAVE_DATA_TYPE_PASSWORD = 1; // 0x1
+    field public static final int SAVE_DATA_TYPE_PAYMENT_CARD = 64; // 0x40
+    field public static final int SAVE_DATA_TYPE_USERNAME = 8; // 0x8
+  }
+
+  public static final class SaveInfo.Builder {
+    ctor public SaveInfo.Builder(int, @NonNull android.view.autofill.AutofillId[]);
+    ctor public SaveInfo.Builder(int);
+    method @NonNull public android.service.autofill.SaveInfo.Builder addSanitizer(@NonNull android.service.autofill.Sanitizer, @NonNull android.view.autofill.AutofillId...);
+    method public android.service.autofill.SaveInfo build();
+    method @NonNull public android.service.autofill.SaveInfo.Builder setCustomDescription(@NonNull android.service.autofill.CustomDescription);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setDescription(@Nullable CharSequence);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setFlags(int);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setNegativeAction(int, @Nullable android.content.IntentSender);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setOptionalIds(@NonNull android.view.autofill.AutofillId[]);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setPositiveAction(int);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setTriggerId(@NonNull android.view.autofill.AutofillId);
+    method @NonNull public android.service.autofill.SaveInfo.Builder setValidator(@NonNull android.service.autofill.Validator);
+  }
+
+  public final class SaveRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getClientState();
+    method @Nullable public java.util.List<java.lang.String> getDatasetIds();
+    method @NonNull public java.util.List<android.service.autofill.FillContext> getFillContexts();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.SaveRequest> CREATOR;
+  }
+
+  public final class SavedDatasetsInfo {
+    ctor public SavedDatasetsInfo(@NonNull String, @IntRange(from=0) int);
+    method @IntRange(from=0) public int getCount();
+    method @NonNull public String getType();
+    field public static final String TYPE_OTHER = "other";
+    field public static final String TYPE_PASSWORDS = "passwords";
+  }
+
+  public interface SavedDatasetsInfoCallback {
+    method public void onError(int);
+    method public void onSuccess(@NonNull java.util.Set<android.service.autofill.SavedDatasetsInfo>);
+    field public static final int ERROR_NEEDS_USER_ACTION = 2; // 0x2
+    field public static final int ERROR_OTHER = 0; // 0x0
+    field public static final int ERROR_UNSUPPORTED = 1; // 0x1
+  }
+
+  public final class TextValueSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    ctor public TextValueSanitizer(@NonNull java.util.regex.Pattern, @NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.TextValueSanitizer> CREATOR;
+  }
+
+  public interface Transformation {
+  }
+
+  public final class UserData implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getFieldClassificationAlgorithm();
+    method @Nullable public String getFieldClassificationAlgorithmForCategory(@NonNull String);
+    method public String getId();
+    method public static int getMaxCategoryCount();
+    method public static int getMaxFieldClassificationIdsSize();
+    method public static int getMaxUserDataSize();
+    method public static int getMaxValueLength();
+    method public static int getMinValueLength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.UserData> CREATOR;
+  }
+
+  public static final class UserData.Builder {
+    ctor public UserData.Builder(@NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.service.autofill.UserData.Builder add(@NonNull String, @NonNull String);
+    method @NonNull public android.service.autofill.UserData build();
+    method @NonNull public android.service.autofill.UserData.Builder setFieldClassificationAlgorithm(@Nullable String, @Nullable android.os.Bundle);
+    method @NonNull public android.service.autofill.UserData.Builder setFieldClassificationAlgorithmForCategory(@NonNull String, @Nullable String, @Nullable android.os.Bundle);
+  }
+
+  public interface Validator {
+  }
+
+  public final class Validators {
+    method @NonNull public static android.service.autofill.Validator and(@NonNull android.service.autofill.Validator...);
+    method @NonNull public static android.service.autofill.Validator not(@NonNull android.service.autofill.Validator);
+    method @NonNull public static android.service.autofill.Validator or(@NonNull android.service.autofill.Validator...);
+  }
+
+  public final class VisibilitySetterAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.VisibilitySetterAction> CREATOR;
+  }
+
+  public static final class VisibilitySetterAction.Builder {
+    ctor public VisibilitySetterAction.Builder(@IdRes int, int);
+    method @NonNull public android.service.autofill.VisibilitySetterAction build();
+    method @NonNull public android.service.autofill.VisibilitySetterAction.Builder setVisibility(@IdRes int, int);
+  }
+
+}
+
+package android.service.carrier {
+
+  public class CarrierIdentifier implements android.os.Parcelable {
+    ctor public CarrierIdentifier(String, String, @Nullable String, @Nullable String, @Nullable String, @Nullable String);
+    ctor public CarrierIdentifier(@NonNull String, @NonNull String, @Nullable String, @Nullable String, @Nullable String, @Nullable String, int, int);
+    ctor public CarrierIdentifier(byte[], @Nullable String, @Nullable String);
+    method public int describeContents();
+    method public int getCarrierId();
+    method @Nullable public String getGid1();
+    method @Nullable public String getGid2();
+    method @Nullable public String getImsi();
+    method public String getMcc();
+    method public String getMnc();
+    method public int getSpecificCarrierId();
+    method @Nullable public String getSpn();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.carrier.CarrierIdentifier> CREATOR;
+  }
+
+  public class CarrierMessagingClientService extends android.app.Service {
+    ctor public CarrierMessagingClientService();
+    method @NonNull public final android.os.IBinder onBind(@Nullable android.content.Intent);
+  }
+
+  public abstract class CarrierMessagingService extends android.app.Service {
+    ctor public CarrierMessagingService();
+    method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onDownloadMms(@NonNull android.net.Uri, int, @NonNull android.net.Uri, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Integer>);
+    method @Deprecated public void onFilterSms(@NonNull android.service.carrier.MessagePdu, @NonNull String, int, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Boolean>);
+    method public void onReceiveTextSms(@NonNull android.service.carrier.MessagePdu, @NonNull String, int, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<java.lang.Integer>);
+    method @Deprecated public void onSendDataSms(@NonNull byte[], int, @NonNull String, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendDataSms(@NonNull byte[], int, @NonNull String, int, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendMms(@NonNull android.net.Uri, int, @Nullable android.net.Uri, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMmsResult>);
+    method @Deprecated public void onSendMultipartTextSms(@NonNull java.util.List<java.lang.String>, int, @NonNull String, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method public void onSendMultipartTextSms(@NonNull java.util.List<java.lang.String>, int, @NonNull String, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendMultipartSmsResult>);
+    method @Deprecated public void onSendTextSms(@NonNull String, int, @NonNull String, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    method public void onSendTextSms(@NonNull String, int, @NonNull String, int, @NonNull android.service.carrier.CarrierMessagingService.ResultCallback<android.service.carrier.CarrierMessagingService.SendSmsResult>);
+    field public static final int DOWNLOAD_STATUS_ERROR = 2; // 0x2
+    field public static final int DOWNLOAD_STATUS_OK = 0; // 0x0
+    field public static final int DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
+    field public static final int RECEIVE_OPTIONS_DEFAULT = 0; // 0x0
+    field public static final int RECEIVE_OPTIONS_DROP = 1; // 0x1
+    field public static final int RECEIVE_OPTIONS_SKIP_NOTIFY_WHEN_CREDENTIAL_PROTECTED_STORAGE_UNAVAILABLE = 2; // 0x2
+    field public static final int SEND_FLAG_REQUEST_DELIVERY_STATUS = 1; // 0x1
+    field public static final int SEND_STATUS_ERROR = 2; // 0x2
+    field public static final int SEND_STATUS_OK = 0; // 0x0
+    field public static final int SEND_STATUS_RETRY_ON_CARRIER_NETWORK = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.carrier.CarrierMessagingService";
+  }
+
+  public static interface CarrierMessagingService.ResultCallback<T> {
+    method public void onReceiveResult(@NonNull T) throws android.os.RemoteException;
+  }
+
+  public static final class CarrierMessagingService.SendMmsResult {
+    ctor public CarrierMessagingService.SendMmsResult(int, @Nullable byte[]);
+    method @Nullable public byte[] getSendConfPdu();
+    method public int getSendStatus();
+  }
+
+  public static final class CarrierMessagingService.SendMultipartSmsResult {
+    ctor public CarrierMessagingService.SendMultipartSmsResult(int, @Nullable int[]);
+    method @Nullable public int[] getMessageRefs();
+    method public int getSendStatus();
+  }
+
+  public static final class CarrierMessagingService.SendSmsResult {
+    ctor public CarrierMessagingService.SendSmsResult(int, int);
+    method public int getMessageRef();
+    method public int getSendStatus();
+  }
+
+  public abstract class CarrierService extends android.app.Service {
+    ctor public CarrierService();
+    method public final void notifyCarrierNetworkChange(boolean);
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.os.PersistableBundle onLoadConfig(android.service.carrier.CarrierIdentifier);
+    field public static final String CARRIER_SERVICE_INTERFACE = "android.service.carrier.CarrierService";
+  }
+
+  public final class MessagePdu implements android.os.Parcelable {
+    ctor public MessagePdu(@NonNull java.util.List<byte[]>);
+    method public int describeContents();
+    method @NonNull public java.util.List<byte[]> getPdus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.carrier.MessagePdu> CREATOR;
+  }
+
+}
+
+package android.service.chooser {
+
+  @Deprecated public final class ChooserTarget implements android.os.Parcelable {
+    ctor @Deprecated public ChooserTarget(CharSequence, android.graphics.drawable.Icon, float, android.content.ComponentName, @Nullable android.os.Bundle);
+    method @Deprecated public int describeContents();
+    method @Deprecated public android.content.ComponentName getComponentName();
+    method @Deprecated public android.graphics.drawable.Icon getIcon();
+    method @Deprecated public android.os.Bundle getIntentExtras();
+    method @Deprecated public float getScore();
+    method @Deprecated public CharSequence getTitle();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.service.chooser.ChooserTarget> CREATOR;
+  }
+
+  @Deprecated public abstract class ChooserTargetService extends android.app.Service {
+    ctor @Deprecated public ChooserTargetService();
+    method @Deprecated public android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public abstract java.util.List<android.service.chooser.ChooserTarget> onGetChooserTargets(android.content.ComponentName, android.content.IntentFilter);
+    field @Deprecated public static final String BIND_PERMISSION = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
+    field @Deprecated public static final String META_DATA_NAME = "android.service.chooser.chooser_target_service";
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.service.chooser.ChooserTargetService";
+  }
+
+}
+
+package android.service.controls {
+
+  public final class Control implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.app.PendingIntent getAppIntent();
+    method @NonNull public String getControlId();
+    method @NonNull public android.service.controls.templates.ControlTemplate getControlTemplate();
+    method @Nullable public android.content.res.ColorStateList getCustomColor();
+    method @Nullable public android.graphics.drawable.Icon getCustomIcon();
+    method public int getDeviceType();
+    method public int getStatus();
+    method @NonNull public CharSequence getStatusText();
+    method @Nullable public CharSequence getStructure();
+    method @NonNull public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method @Nullable public CharSequence getZone();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.controls.Control> CREATOR;
+    field public static final int STATUS_DISABLED = 4; // 0x4
+    field public static final int STATUS_ERROR = 3; // 0x3
+    field public static final int STATUS_NOT_FOUND = 2; // 0x2
+    field public static final int STATUS_OK = 1; // 0x1
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class Control.StatefulBuilder {
+    ctor public Control.StatefulBuilder(@NonNull String, @NonNull android.app.PendingIntent);
+    ctor public Control.StatefulBuilder(@NonNull android.service.controls.Control);
+    method @NonNull public android.service.controls.Control build();
+    method @NonNull public android.service.controls.Control.StatefulBuilder setAppIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setControlId(@NonNull String);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setControlTemplate(@NonNull android.service.controls.templates.ControlTemplate);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setCustomColor(@Nullable android.content.res.ColorStateList);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setCustomIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setDeviceType(int);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setStatus(int);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setStatusText(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setStructure(@Nullable CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setSubtitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setTitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatefulBuilder setZone(@Nullable CharSequence);
+  }
+
+  public static final class Control.StatelessBuilder {
+    ctor public Control.StatelessBuilder(@NonNull String, @NonNull android.app.PendingIntent);
+    ctor public Control.StatelessBuilder(@NonNull android.service.controls.Control);
+    method @NonNull public android.service.controls.Control build();
+    method @NonNull public android.service.controls.Control.StatelessBuilder setAppIntent(@NonNull android.app.PendingIntent);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setControlId(@NonNull String);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setCustomColor(@Nullable android.content.res.ColorStateList);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setCustomIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setDeviceType(int);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setStructure(@Nullable CharSequence);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setSubtitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setTitle(@NonNull CharSequence);
+    method @NonNull public android.service.controls.Control.StatelessBuilder setZone(@Nullable CharSequence);
+  }
+
+  public abstract class ControlsProviderService extends android.app.Service {
+    ctor public ControlsProviderService();
+    method @NonNull public abstract java.util.concurrent.Flow.Publisher<android.service.controls.Control> createPublisherFor(@NonNull java.util.List<java.lang.String>);
+    method @NonNull public abstract java.util.concurrent.Flow.Publisher<android.service.controls.Control> createPublisherForAllAvailable();
+    method @Nullable public java.util.concurrent.Flow.Publisher<android.service.controls.Control> createPublisherForSuggested();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public final boolean onUnbind(@NonNull android.content.Intent);
+    method public abstract void performControlAction(@NonNull String, @NonNull android.service.controls.actions.ControlAction, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method public static void requestAddControl(@NonNull android.content.Context, @NonNull android.content.ComponentName, @NonNull android.service.controls.Control);
+    field public static final String SERVICE_CONTROLS = "android.service.controls.ControlsProviderService";
+    field @NonNull public static final String TAG = "ControlsProviderService";
+  }
+
+  public class DeviceTypes {
+    method public static boolean validDeviceType(int);
+    field public static final int TYPE_AC_HEATER = 1; // 0x1
+    field public static final int TYPE_AC_UNIT = 2; // 0x2
+    field public static final int TYPE_AIR_FRESHENER = 3; // 0x3
+    field public static final int TYPE_AIR_PURIFIER = 4; // 0x4
+    field public static final int TYPE_AWNING = 33; // 0x21
+    field public static final int TYPE_BLINDS = 34; // 0x22
+    field public static final int TYPE_CAMERA = 50; // 0x32
+    field public static final int TYPE_CLOSET = 35; // 0x23
+    field public static final int TYPE_COFFEE_MAKER = 5; // 0x5
+    field public static final int TYPE_CURTAIN = 36; // 0x24
+    field public static final int TYPE_DEHUMIDIFIER = 6; // 0x6
+    field public static final int TYPE_DISHWASHER = 24; // 0x18
+    field public static final int TYPE_DISPLAY = 7; // 0x7
+    field public static final int TYPE_DOOR = 37; // 0x25
+    field public static final int TYPE_DOORBELL = 51; // 0x33
+    field public static final int TYPE_DRAWER = 38; // 0x26
+    field public static final int TYPE_DRYER = 25; // 0x19
+    field public static final int TYPE_FAN = 8; // 0x8
+    field public static final int TYPE_GARAGE = 39; // 0x27
+    field public static final int TYPE_GATE = 40; // 0x28
+    field public static final int TYPE_GENERIC_ARM_DISARM = -5; // 0xfffffffb
+    field public static final int TYPE_GENERIC_LOCK_UNLOCK = -4; // 0xfffffffc
+    field public static final int TYPE_GENERIC_ON_OFF = -1; // 0xffffffff
+    field public static final int TYPE_GENERIC_OPEN_CLOSE = -3; // 0xfffffffd
+    field public static final int TYPE_GENERIC_START_STOP = -2; // 0xfffffffe
+    field public static final int TYPE_GENERIC_TEMP_SETTING = -6; // 0xfffffffa
+    field public static final int TYPE_GENERIC_VIEWSTREAM = -7; // 0xfffffff9
+    field public static final int TYPE_HEATER = 47; // 0x2f
+    field public static final int TYPE_HOOD = 10; // 0xa
+    field public static final int TYPE_HUMIDIFIER = 11; // 0xb
+    field public static final int TYPE_KETTLE = 12; // 0xc
+    field public static final int TYPE_LIGHT = 13; // 0xd
+    field public static final int TYPE_LOCK = 45; // 0x2d
+    field public static final int TYPE_MICROWAVE = 14; // 0xe
+    field public static final int TYPE_MOP = 26; // 0x1a
+    field public static final int TYPE_MOWER = 27; // 0x1b
+    field public static final int TYPE_MULTICOOKER = 28; // 0x1c
+    field public static final int TYPE_OUTLET = 15; // 0xf
+    field public static final int TYPE_PERGOLA = 41; // 0x29
+    field public static final int TYPE_RADIATOR = 16; // 0x10
+    field public static final int TYPE_REFRIGERATOR = 48; // 0x30
+    field public static final int TYPE_REMOTE_CONTROL = 17; // 0x11
+    field public static final int TYPE_ROUTINE = 52; // 0x34
+    field public static final int TYPE_SECURITY_SYSTEM = 46; // 0x2e
+    field public static final int TYPE_SET_TOP = 18; // 0x12
+    field public static final int TYPE_SHOWER = 29; // 0x1d
+    field public static final int TYPE_SHUTTER = 42; // 0x2a
+    field public static final int TYPE_SPRINKLER = 30; // 0x1e
+    field public static final int TYPE_STANDMIXER = 19; // 0x13
+    field public static final int TYPE_STYLER = 20; // 0x14
+    field public static final int TYPE_SWITCH = 21; // 0x15
+    field public static final int TYPE_THERMOSTAT = 49; // 0x31
+    field public static final int TYPE_TV = 22; // 0x16
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_VACUUM = 32; // 0x20
+    field public static final int TYPE_VALVE = 44; // 0x2c
+    field public static final int TYPE_WASHER = 31; // 0x1f
+    field public static final int TYPE_WATER_HEATER = 23; // 0x17
+    field public static final int TYPE_WINDOW = 43; // 0x2b
+  }
+
+}
+
+package android.service.controls.actions {
+
+  public final class BooleanAction extends android.service.controls.actions.ControlAction {
+    ctor public BooleanAction(@NonNull String, boolean);
+    ctor public BooleanAction(@NonNull String, boolean, @Nullable String);
+    method public int getActionType();
+    method public boolean getNewState();
+  }
+
+  public final class CommandAction extends android.service.controls.actions.ControlAction {
+    ctor public CommandAction(@NonNull String, @Nullable String);
+    ctor public CommandAction(@NonNull String);
+    method public int getActionType();
+  }
+
+  public abstract class ControlAction {
+    method public abstract int getActionType();
+    method @Nullable public String getChallengeValue();
+    method @NonNull public static android.service.controls.actions.ControlAction getErrorAction();
+    method @NonNull public String getTemplateId();
+    method public static final boolean isValidResponse(int);
+    field public static final int RESPONSE_CHALLENGE_ACK = 3; // 0x3
+    field public static final int RESPONSE_CHALLENGE_PASSPHRASE = 5; // 0x5
+    field public static final int RESPONSE_CHALLENGE_PIN = 4; // 0x4
+    field public static final int RESPONSE_FAIL = 2; // 0x2
+    field public static final int RESPONSE_OK = 1; // 0x1
+    field public static final int RESPONSE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_BOOLEAN = 1; // 0x1
+    field public static final int TYPE_COMMAND = 5; // 0x5
+    field public static final int TYPE_ERROR = -1; // 0xffffffff
+    field public static final int TYPE_FLOAT = 2; // 0x2
+    field public static final int TYPE_MODE = 4; // 0x4
+  }
+
+  public final class FloatAction extends android.service.controls.actions.ControlAction {
+    ctor public FloatAction(@NonNull String, float);
+    ctor public FloatAction(@NonNull String, float, @Nullable String);
+    method public int getActionType();
+    method public float getNewValue();
+  }
+
+  public final class ModeAction extends android.service.controls.actions.ControlAction {
+    ctor public ModeAction(@NonNull String, int, @Nullable String);
+    ctor public ModeAction(@NonNull String, int);
+    method public int getActionType();
+    method public int getNewMode();
+  }
+
+}
+
+package android.service.controls.templates {
+
+  public final class ControlButton implements android.os.Parcelable {
+    ctor public ControlButton(boolean, @NonNull CharSequence);
+    method public int describeContents();
+    method @NonNull public CharSequence getActionDescription();
+    method public boolean isChecked();
+    method @NonNull public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.controls.templates.ControlButton> CREATOR;
+  }
+
+  public abstract class ControlTemplate {
+    method @NonNull public static android.service.controls.templates.ControlTemplate getErrorTemplate();
+    method @NonNull public static android.service.controls.templates.ControlTemplate getNoTemplateObject();
+    method @NonNull public String getTemplateId();
+    method public abstract int getTemplateType();
+    field public static final int TYPE_ERROR = -1; // 0xffffffff
+    field public static final int TYPE_NO_TEMPLATE = 0; // 0x0
+    field public static final int TYPE_RANGE = 2; // 0x2
+    field public static final int TYPE_STATELESS = 8; // 0x8
+    field public static final int TYPE_TEMPERATURE = 7; // 0x7
+    field public static final int TYPE_THUMBNAIL = 3; // 0x3
+    field public static final int TYPE_TOGGLE = 1; // 0x1
+    field public static final int TYPE_TOGGLE_RANGE = 6; // 0x6
+  }
+
+  public final class RangeTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public RangeTemplate(@NonNull String, float, float, float, float, @Nullable CharSequence);
+    method public float getCurrentValue();
+    method @NonNull public CharSequence getFormatString();
+    method public float getMaxValue();
+    method public float getMinValue();
+    method public float getStepValue();
+    method public int getTemplateType();
+  }
+
+  public final class StatelessTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public StatelessTemplate(@NonNull String);
+    method public int getTemplateType();
+  }
+
+  public final class TemperatureControlTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public TemperatureControlTemplate(@NonNull String, @NonNull android.service.controls.templates.ControlTemplate, int, int, int);
+    method public int getCurrentActiveMode();
+    method public int getCurrentMode();
+    method public int getModes();
+    method @NonNull public android.service.controls.templates.ControlTemplate getTemplate();
+    method public int getTemplateType();
+    field public static final int FLAG_MODE_COOL = 8; // 0x8
+    field public static final int FLAG_MODE_ECO = 32; // 0x20
+    field public static final int FLAG_MODE_HEAT = 4; // 0x4
+    field public static final int FLAG_MODE_HEAT_COOL = 16; // 0x10
+    field public static final int FLAG_MODE_OFF = 2; // 0x2
+    field public static final int MODE_COOL = 3; // 0x3
+    field public static final int MODE_ECO = 5; // 0x5
+    field public static final int MODE_HEAT = 2; // 0x2
+    field public static final int MODE_HEAT_COOL = 4; // 0x4
+    field public static final int MODE_OFF = 1; // 0x1
+    field public static final int MODE_UNKNOWN = 0; // 0x0
+  }
+
+  public final class ThumbnailTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public ThumbnailTemplate(@NonNull String, boolean, @NonNull android.graphics.drawable.Icon, @NonNull CharSequence);
+    method @NonNull public CharSequence getContentDescription();
+    method public int getTemplateType();
+    method @NonNull public android.graphics.drawable.Icon getThumbnail();
+    method public boolean isActive();
+  }
+
+  public final class ToggleRangeTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public ToggleRangeTemplate(@NonNull String, @NonNull android.service.controls.templates.ControlButton, @NonNull android.service.controls.templates.RangeTemplate);
+    ctor public ToggleRangeTemplate(@NonNull String, boolean, @NonNull CharSequence, @NonNull android.service.controls.templates.RangeTemplate);
+    method @NonNull public CharSequence getActionDescription();
+    method @NonNull public android.service.controls.templates.RangeTemplate getRange();
+    method public int getTemplateType();
+    method public boolean isChecked();
+  }
+
+  public final class ToggleTemplate extends android.service.controls.templates.ControlTemplate {
+    ctor public ToggleTemplate(@NonNull String, @NonNull android.service.controls.templates.ControlButton);
+    method @NonNull public CharSequence getContentDescription();
+    method public int getTemplateType();
+    method public boolean isChecked();
+  }
+
+}
+
+package android.service.dreams {
+
+  public class DreamService extends android.app.Service implements android.view.Window.Callback {
+    ctor public DreamService();
+    method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method public final void finish();
+    method public android.view.Window getWindow();
+    method public android.view.WindowManager getWindowManager();
+    method public boolean isFullscreen();
+    method public boolean isInteractive();
+    method public boolean isScreenBright();
+    method public void onActionModeFinished(android.view.ActionMode);
+    method public void onActionModeStarted(android.view.ActionMode);
+    method public void onAttachedToWindow();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public void onContentChanged();
+    method public boolean onCreatePanelMenu(int, android.view.Menu);
+    method public android.view.View onCreatePanelView(int);
+    method public void onDetachedFromWindow();
+    method public void onDreamingStarted();
+    method public void onDreamingStopped();
+    method public boolean onMenuItemSelected(int, android.view.MenuItem);
+    method public boolean onMenuOpened(int, android.view.Menu);
+    method public void onPanelClosed(int, android.view.Menu);
+    method public boolean onPreparePanel(int, android.view.View, android.view.Menu);
+    method public boolean onSearchRequested(android.view.SearchEvent);
+    method public boolean onSearchRequested();
+    method public void onWakeUp();
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public void setContentView(@LayoutRes int);
+    method public void setContentView(android.view.View);
+    method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void setFullscreen(boolean);
+    method public void setInteractive(boolean);
+    method public void setScreenBright(boolean);
+    method public final void wakeUp();
+    field public static final String DREAM_META_DATA = "android.service.dream";
+    field public static final String SERVICE_INTERFACE = "android.service.dreams.DreamService";
+  }
+
+}
+
+package android.service.media {
+
+  public abstract class CameraPrewarmService extends android.app.Service {
+    ctor public CameraPrewarmService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onCooldown(boolean);
+    method public abstract void onPrewarm();
+  }
+
+  public abstract class MediaBrowserService extends android.app.Service {
+    ctor public MediaBrowserService();
+    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public final android.os.Bundle getBrowserRootHints();
+    method public final android.media.session.MediaSessionManager.RemoteUserInfo getCurrentBrowserInfo();
+    method @Nullable public android.media.session.MediaSession.Token getSessionToken();
+    method public void notifyChildrenChanged(@NonNull String);
+    method public void notifyChildrenChanged(@NonNull String, @NonNull android.os.Bundle);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public abstract android.service.media.MediaBrowserService.BrowserRoot onGetRoot(@NonNull String, int, @Nullable android.os.Bundle);
+    method public abstract void onLoadChildren(@NonNull String, @NonNull android.service.media.MediaBrowserService.Result<java.util.List<android.media.browse.MediaBrowser.MediaItem>>);
+    method public void onLoadChildren(@NonNull String, @NonNull android.service.media.MediaBrowserService.Result<java.util.List<android.media.browse.MediaBrowser.MediaItem>>, @NonNull android.os.Bundle);
+    method public void onLoadItem(String, android.service.media.MediaBrowserService.Result<android.media.browse.MediaBrowser.MediaItem>);
+    method public void setSessionToken(android.media.session.MediaSession.Token);
+    field public static final String SERVICE_INTERFACE = "android.media.browse.MediaBrowserService";
+  }
+
+  public static final class MediaBrowserService.BrowserRoot {
+    ctor public MediaBrowserService.BrowserRoot(@NonNull String, @Nullable android.os.Bundle);
+    method public android.os.Bundle getExtras();
+    method public String getRootId();
+    field public static final String EXTRA_OFFLINE = "android.service.media.extra.OFFLINE";
+    field public static final String EXTRA_RECENT = "android.service.media.extra.RECENT";
+    field public static final String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
+  }
+
+  public class MediaBrowserService.Result<T> {
+    method public void detach();
+    method public void sendResult(T);
+  }
+
+}
+
+package android.service.notification {
+
+  public final class Condition implements android.os.Parcelable {
+    ctor public Condition(android.net.Uri, String, int);
+    ctor public Condition(android.net.Uri, String, String, String, int, int, int);
+    ctor public Condition(android.os.Parcel);
+    method public android.service.notification.Condition copy();
+    method public int describeContents();
+    method public static boolean isValidId(android.net.Uri, String);
+    method public static android.net.Uri.Builder newId(android.content.Context);
+    method public static String relevanceToString(int);
+    method public static String stateToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.Condition> CREATOR;
+    field public static final int FLAG_RELEVANT_ALWAYS = 2; // 0x2
+    field public static final int FLAG_RELEVANT_NOW = 1; // 0x1
+    field public static final String SCHEME = "condition";
+    field public static final int STATE_ERROR = 3; // 0x3
+    field public static final int STATE_FALSE = 0; // 0x0
+    field public static final int STATE_TRUE = 1; // 0x1
+    field public static final int STATE_UNKNOWN = 2; // 0x2
+    field public final int flags;
+    field public final int icon;
+    field public final android.net.Uri id;
+    field public final String line1;
+    field public final String line2;
+    field public final int state;
+    field public final String summary;
+  }
+
+  @Deprecated public abstract class ConditionProviderService extends android.app.Service {
+    ctor @Deprecated public ConditionProviderService();
+    method @Deprecated public final void notifyCondition(android.service.notification.Condition);
+    method @Deprecated public final void notifyConditions(android.service.notification.Condition...);
+    method @Deprecated public android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public abstract void onConnected();
+    method @Deprecated public void onRequestConditions(int);
+    method @Deprecated public abstract void onSubscribe(android.net.Uri);
+    method @Deprecated public abstract void onUnsubscribe(android.net.Uri);
+    method @Deprecated public static final void requestRebind(android.content.ComponentName);
+    method @Deprecated public final void requestUnbind();
+    field @Deprecated public static final String EXTRA_RULE_ID = "android.service.notification.extra.RULE_ID";
+    field @Deprecated public static final String META_DATA_CONFIGURATION_ACTIVITY = "android.service.zen.automatic.configurationActivity";
+    field @Deprecated public static final String META_DATA_RULE_INSTANCE_LIMIT = "android.service.zen.automatic.ruleInstanceLimit";
+    field @Deprecated public static final String META_DATA_RULE_TYPE = "android.service.zen.automatic.ruleType";
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.service.notification.ConditionProviderService";
+  }
+
+  public abstract class NotificationListenerService extends android.app.Service {
+    ctor public NotificationListenerService();
+    method public final void cancelAllNotifications();
+    method @Deprecated public final void cancelNotification(String, String, int);
+    method public final void cancelNotification(String);
+    method public final void cancelNotifications(String[]);
+    method public final void clearRequestedListenerHints();
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications();
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(String[]);
+    method public final int getCurrentInterruptionFilter();
+    method public final int getCurrentListenerHints();
+    method public android.service.notification.NotificationListenerService.RankingMap getCurrentRanking();
+    method public final java.util.List<android.app.NotificationChannelGroup> getNotificationChannelGroups(@NonNull String, @NonNull android.os.UserHandle);
+    method public final java.util.List<android.app.NotificationChannel> getNotificationChannels(@NonNull String, @NonNull android.os.UserHandle);
+    method public final android.service.notification.StatusBarNotification[] getSnoozedNotifications();
+    method public final void migrateNotificationFilter(int, @Nullable java.util.List<java.lang.String>);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onInterruptionFilterChanged(int);
+    method public void onListenerConnected();
+    method public void onListenerDisconnected();
+    method public void onListenerHintsChanged(int);
+    method public void onNotificationChannelGroupModified(String, android.os.UserHandle, android.app.NotificationChannelGroup, int);
+    method public void onNotificationChannelModified(String, android.os.UserHandle, android.app.NotificationChannel, int);
+    method public void onNotificationPosted(android.service.notification.StatusBarNotification);
+    method public void onNotificationPosted(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationRankingUpdate(android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationRemoved(android.service.notification.StatusBarNotification);
+    method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationRemoved(android.service.notification.StatusBarNotification, android.service.notification.NotificationListenerService.RankingMap, int);
+    method public void onSilentStatusBarIconsVisibilityChanged(boolean);
+    method public final void requestInterruptionFilter(int);
+    method public final void requestListenerHints(int);
+    method public static void requestRebind(android.content.ComponentName);
+    method public final void requestUnbind();
+    method public final void setNotificationsShown(String[]);
+    method public final void snoozeNotification(String, long);
+    method public final void updateNotificationChannel(@NonNull String, @NonNull android.os.UserHandle, @NonNull android.app.NotificationChannel);
+    field public static final int FLAG_FILTER_TYPE_ALERTING = 2; // 0x2
+    field public static final int FLAG_FILTER_TYPE_CONVERSATIONS = 1; // 0x1
+    field public static final int FLAG_FILTER_TYPE_ONGOING = 8; // 0x8
+    field public static final int FLAG_FILTER_TYPE_SILENT = 4; // 0x4
+    field public static final int HINT_HOST_DISABLE_CALL_EFFECTS = 4; // 0x4
+    field public static final int HINT_HOST_DISABLE_EFFECTS = 1; // 0x1
+    field public static final int HINT_HOST_DISABLE_NOTIFICATION_EFFECTS = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_ALARMS = 4; // 0x4
+    field public static final int INTERRUPTION_FILTER_ALL = 1; // 0x1
+    field public static final int INTERRUPTION_FILTER_NONE = 3; // 0x3
+    field public static final int INTERRUPTION_FILTER_PRIORITY = 2; // 0x2
+    field public static final int INTERRUPTION_FILTER_UNKNOWN = 0; // 0x0
+    field public static final String META_DATA_DEFAULT_FILTER_TYPES = "android.service.notification.default_filter_types";
+    field public static final String META_DATA_DISABLED_FILTER_TYPES = "android.service.notification.disabled_filter_types";
+    field public static final int NOTIFICATION_CHANNEL_OR_GROUP_ADDED = 1; // 0x1
+    field public static final int NOTIFICATION_CHANNEL_OR_GROUP_DELETED = 3; // 0x3
+    field public static final int NOTIFICATION_CHANNEL_OR_GROUP_UPDATED = 2; // 0x2
+    field public static final int REASON_APP_CANCEL = 8; // 0x8
+    field public static final int REASON_APP_CANCEL_ALL = 9; // 0x9
+    field public static final int REASON_CANCEL = 2; // 0x2
+    field public static final int REASON_CANCEL_ALL = 3; // 0x3
+    field public static final int REASON_CHANNEL_BANNED = 17; // 0x11
+    field public static final int REASON_CHANNEL_REMOVED = 20; // 0x14
+    field public static final int REASON_CLEAR_DATA = 21; // 0x15
+    field public static final int REASON_CLICK = 1; // 0x1
+    field public static final int REASON_ERROR = 4; // 0x4
+    field public static final int REASON_GROUP_OPTIMIZATION = 13; // 0xd
+    field public static final int REASON_GROUP_SUMMARY_CANCELED = 12; // 0xc
+    field public static final int REASON_LISTENER_CANCEL = 10; // 0xa
+    field public static final int REASON_LISTENER_CANCEL_ALL = 11; // 0xb
+    field public static final int REASON_PACKAGE_BANNED = 7; // 0x7
+    field public static final int REASON_PACKAGE_CHANGED = 5; // 0x5
+    field public static final int REASON_PACKAGE_SUSPENDED = 14; // 0xe
+    field public static final int REASON_PROFILE_TURNED_OFF = 15; // 0xf
+    field public static final int REASON_SNOOZED = 18; // 0x12
+    field public static final int REASON_TIMEOUT = 19; // 0x13
+    field public static final int REASON_UNAUTOBUNDLED = 16; // 0x10
+    field public static final int REASON_USER_STOPPED = 6; // 0x6
+    field public static final String SERVICE_INTERFACE = "android.service.notification.NotificationListenerService";
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_OFF = 1; // 0x1
+    field @Deprecated public static final int SUPPRESSED_EFFECT_SCREEN_ON = 2; // 0x2
+  }
+
+  public static class NotificationListenerService.Ranking {
+    ctor public NotificationListenerService.Ranking();
+    method public boolean canBubble();
+    method public boolean canShowBadge();
+    method public android.app.NotificationChannel getChannel();
+    method @Nullable public android.content.pm.ShortcutInfo getConversationShortcutInfo();
+    method public int getImportance();
+    method public CharSequence getImportanceExplanation();
+    method public String getKey();
+    method public long getLastAudiblyAlertedMillis();
+    method public int getLockscreenVisibilityOverride();
+    method public String getOverrideGroupKey();
+    method public int getRank();
+    method @NonNull public java.util.List<android.app.Notification.Action> getSmartActions();
+    method @NonNull public java.util.List<java.lang.CharSequence> getSmartReplies();
+    method public int getSuppressedVisualEffects();
+    method public int getUserSentiment();
+    method public boolean isAmbient();
+    method public boolean isConversation();
+    method public boolean isSuspended();
+    method public boolean matchesInterruptionFilter();
+    field public static final int USER_SENTIMENT_NEGATIVE = -1; // 0xffffffff
+    field public static final int USER_SENTIMENT_NEUTRAL = 0; // 0x0
+    field public static final int USER_SENTIMENT_POSITIVE = 1; // 0x1
+    field public static final int VISIBILITY_NO_OVERRIDE = -1000; // 0xfffffc18
+  }
+
+  public static class NotificationListenerService.RankingMap implements android.os.Parcelable {
+    method public int describeContents();
+    method public String[] getOrderedKeys();
+    method public boolean getRanking(String, android.service.notification.NotificationListenerService.Ranking);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.NotificationListenerService.RankingMap> CREATOR;
+  }
+
+  public class StatusBarNotification implements android.os.Parcelable {
+    ctor @Deprecated public StatusBarNotification(String, String, int, String, int, int, int, android.app.Notification, android.os.UserHandle, long);
+    ctor public StatusBarNotification(android.os.Parcel);
+    method public android.service.notification.StatusBarNotification clone();
+    method public int describeContents();
+    method public String getGroupKey();
+    method public int getId();
+    method public String getKey();
+    method public android.app.Notification getNotification();
+    method @NonNull public String getOpPkg();
+    method public String getOverrideGroupKey();
+    method public String getPackageName();
+    method public long getPostTime();
+    method public String getTag();
+    method public int getUid();
+    method public android.os.UserHandle getUser();
+    method @Deprecated public int getUserId();
+    method public boolean isAppGroup();
+    method public boolean isClearable();
+    method public boolean isGroup();
+    method public boolean isOngoing();
+    method public void setOverrideGroupKey(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.StatusBarNotification> CREATOR;
+  }
+
+  public final class ZenPolicy implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getPriorityCallSenders();
+    method public int getPriorityCategoryAlarms();
+    method public int getPriorityCategoryCalls();
+    method public int getPriorityCategoryConversations();
+    method public int getPriorityCategoryEvents();
+    method public int getPriorityCategoryMedia();
+    method public int getPriorityCategoryMessages();
+    method public int getPriorityCategoryReminders();
+    method public int getPriorityCategoryRepeatCallers();
+    method public int getPriorityCategorySystem();
+    method public int getPriorityConversationSenders();
+    method public int getPriorityMessageSenders();
+    method public int getVisualEffectAmbient();
+    method public int getVisualEffectBadge();
+    method public int getVisualEffectFullScreenIntent();
+    method public int getVisualEffectLights();
+    method public int getVisualEffectNotificationList();
+    method public int getVisualEffectPeek();
+    method public int getVisualEffectStatusBar();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONVERSATION_SENDERS_ANYONE = 1; // 0x1
+    field public static final int CONVERSATION_SENDERS_IMPORTANT = 2; // 0x2
+    field public static final int CONVERSATION_SENDERS_NONE = 3; // 0x3
+    field public static final int CONVERSATION_SENDERS_UNSET = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.ZenPolicy> CREATOR;
+    field public static final int PEOPLE_TYPE_ANYONE = 1; // 0x1
+    field public static final int PEOPLE_TYPE_CONTACTS = 2; // 0x2
+    field public static final int PEOPLE_TYPE_NONE = 4; // 0x4
+    field public static final int PEOPLE_TYPE_STARRED = 3; // 0x3
+    field public static final int PEOPLE_TYPE_UNSET = 0; // 0x0
+    field public static final int STATE_ALLOW = 1; // 0x1
+    field public static final int STATE_DISALLOW = 2; // 0x2
+    field public static final int STATE_UNSET = 0; // 0x0
+  }
+
+  public static final class ZenPolicy.Builder {
+    ctor public ZenPolicy.Builder();
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowAlarms(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowAllSounds();
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowCalls(int);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowConversations(int);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowEvents(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowMedia(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowMessages(int);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowReminders(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowRepeatCallers(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder allowSystem(boolean);
+    method @NonNull public android.service.notification.ZenPolicy build();
+    method @NonNull public android.service.notification.ZenPolicy.Builder disallowAllSounds();
+    method @NonNull public android.service.notification.ZenPolicy.Builder hideAllVisualEffects();
+    method @NonNull public android.service.notification.ZenPolicy.Builder showAllVisualEffects();
+    method @NonNull public android.service.notification.ZenPolicy.Builder showBadges(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showFullScreenIntent(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showInAmbientDisplay(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showInNotificationList(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showLights(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showPeeking(boolean);
+    method @NonNull public android.service.notification.ZenPolicy.Builder showStatusBarIcons(boolean);
+  }
+
+}
+
+package android.service.quickaccesswallet {
+
+  public interface GetWalletCardsCallback {
+    method public void onFailure(@NonNull android.service.quickaccesswallet.GetWalletCardsError);
+    method public void onSuccess(@NonNull android.service.quickaccesswallet.GetWalletCardsResponse);
+  }
+
+  public final class GetWalletCardsError implements android.os.Parcelable {
+    ctor public GetWalletCardsError(@Nullable android.graphics.drawable.Icon, @Nullable CharSequence);
+    method public int describeContents();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @Nullable public CharSequence getMessage();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.GetWalletCardsError> CREATOR;
+  }
+
+  public final class GetWalletCardsRequest implements android.os.Parcelable {
+    ctor public GetWalletCardsRequest(int, int, int, int);
+    method public int describeContents();
+    method public int getCardHeightPx();
+    method public int getCardWidthPx();
+    method public int getIconSizePx();
+    method public int getMaxCards();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.GetWalletCardsRequest> CREATOR;
+  }
+
+  public final class GetWalletCardsResponse implements android.os.Parcelable {
+    ctor public GetWalletCardsResponse(@NonNull java.util.List<android.service.quickaccesswallet.WalletCard>, int);
+    method public int describeContents();
+    method public int getSelectedIndex();
+    method @NonNull public java.util.List<android.service.quickaccesswallet.WalletCard> getWalletCards();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.GetWalletCardsResponse> CREATOR;
+  }
+
+  public abstract class QuickAccessWalletService extends android.app.Service {
+    ctor public QuickAccessWalletService();
+    method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onWalletCardSelected(@NonNull android.service.quickaccesswallet.SelectWalletCardRequest);
+    method public abstract void onWalletCardsRequested(@NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.GetWalletCardsCallback);
+    method public abstract void onWalletDismissed();
+    method public final void sendWalletServiceEvent(@NonNull android.service.quickaccesswallet.WalletServiceEvent);
+    field public static final String ACTION_VIEW_WALLET = "android.service.quickaccesswallet.action.VIEW_WALLET";
+    field public static final String ACTION_VIEW_WALLET_SETTINGS = "android.service.quickaccesswallet.action.VIEW_WALLET_SETTINGS";
+    field public static final String SERVICE_INTERFACE = "android.service.quickaccesswallet.QuickAccessWalletService";
+    field public static final String SERVICE_META_DATA = "android.quickaccesswallet";
+  }
+
+  public final class SelectWalletCardRequest implements android.os.Parcelable {
+    ctor public SelectWalletCardRequest(@NonNull String);
+    method public int describeContents();
+    method @NonNull public String getCardId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.SelectWalletCardRequest> CREATOR;
+  }
+
+  public final class WalletCard implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.graphics.drawable.Icon getCardIcon();
+    method @NonNull public String getCardId();
+    method @NonNull public android.graphics.drawable.Icon getCardImage();
+    method @Nullable public CharSequence getCardLabel();
+    method @NonNull public CharSequence getContentDescription();
+    method @NonNull public android.app.PendingIntent getPendingIntent();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.WalletCard> CREATOR;
+  }
+
+  public static final class WalletCard.Builder {
+    ctor public WalletCard.Builder(@NonNull String, @NonNull android.graphics.drawable.Icon, @NonNull CharSequence, @NonNull android.app.PendingIntent);
+    method @NonNull public android.service.quickaccesswallet.WalletCard build();
+    method @NonNull public android.service.quickaccesswallet.WalletCard.Builder setCardIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.service.quickaccesswallet.WalletCard.Builder setCardLabel(@Nullable CharSequence);
+  }
+
+  public final class WalletServiceEvent implements android.os.Parcelable {
+    ctor public WalletServiceEvent(int);
+    method public int describeContents();
+    method public int getEventType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quickaccesswallet.WalletServiceEvent> CREATOR;
+    field public static final int TYPE_NFC_PAYMENT_STARTED = 1; // 0x1
+  }
+
+}
+
+package android.service.quicksettings {
+
+  public final class Tile implements android.os.Parcelable {
+    method public int describeContents();
+    method public CharSequence getContentDescription();
+    method public android.graphics.drawable.Icon getIcon();
+    method public CharSequence getLabel();
+    method public int getState();
+    method @Nullable public CharSequence getStateDescription();
+    method @Nullable public CharSequence getSubtitle();
+    method public void setContentDescription(CharSequence);
+    method public void setIcon(android.graphics.drawable.Icon);
+    method public void setLabel(CharSequence);
+    method public void setState(int);
+    method public void setStateDescription(@Nullable CharSequence);
+    method public void setSubtitle(@Nullable CharSequence);
+    method public void updateTile();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.quicksettings.Tile> CREATOR;
+    field public static final int STATE_ACTIVE = 2; // 0x2
+    field public static final int STATE_INACTIVE = 1; // 0x1
+    field public static final int STATE_UNAVAILABLE = 0; // 0x0
+  }
+
+  public class TileService extends android.app.Service {
+    ctor public TileService();
+    method public final android.service.quicksettings.Tile getQsTile();
+    method public final boolean isLocked();
+    method public final boolean isSecure();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onClick();
+    method public void onStartListening();
+    method public void onStopListening();
+    method public void onTileAdded();
+    method public void onTileRemoved();
+    method public static final void requestListeningState(android.content.Context, android.content.ComponentName);
+    method public final void showDialog(android.app.Dialog);
+    method public final void startActivityAndCollapse(android.content.Intent);
+    method public final void unlockAndRun(Runnable);
+    field public static final String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE";
+    field public static final String ACTION_QS_TILE_PREFERENCES = "android.service.quicksettings.action.QS_TILE_PREFERENCES";
+    field public static final String META_DATA_ACTIVE_TILE = "android.service.quicksettings.ACTIVE_TILE";
+    field public static final String META_DATA_TOGGLEABLE_TILE = "android.service.quicksettings.TOGGLEABLE_TILE";
+  }
+
+}
+
+package android.service.restrictions {
+
+  public abstract class RestrictionsReceiver extends android.content.BroadcastReceiver {
+    ctor public RestrictionsReceiver();
+    method public void onReceive(android.content.Context, android.content.Intent);
+    method public abstract void onRequestPermission(android.content.Context, String, String, String, android.os.PersistableBundle);
+  }
+
+}
+
+package android.service.textservice {
+
+  public abstract class SpellCheckerService extends android.app.Service {
+    ctor public SpellCheckerService();
+    method public abstract android.service.textservice.SpellCheckerService.Session createSession();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    field public static final String SERVICE_INTERFACE = "android.service.textservice.SpellCheckerService";
+  }
+
+  public abstract static class SpellCheckerService.Session {
+    ctor public SpellCheckerService.Session();
+    method public android.os.Bundle getBundle();
+    method public String getLocale();
+    method public int getSupportedAttributes();
+    method public void onCancel();
+    method public void onClose();
+    method public abstract void onCreate();
+    method public android.view.textservice.SentenceSuggestionsInfo[] onGetSentenceSuggestionsMultiple(android.view.textservice.TextInfo[], int);
+    method public abstract android.view.textservice.SuggestionsInfo onGetSuggestions(android.view.textservice.TextInfo, int);
+    method public android.view.textservice.SuggestionsInfo[] onGetSuggestionsMultiple(android.view.textservice.TextInfo[], int, boolean);
+  }
+
+}
+
+package android.service.voice {
+
+  public final class VisibleActivityInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.service.voice.VoiceInteractionSession.ActivityId getActivityId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.voice.VisibleActivityInfo> CREATOR;
+  }
+
+  public class VoiceInteractionService extends android.app.Service {
+    ctor public VoiceInteractionService();
+    method public int getDisabledShowContext();
+    method public static boolean isActiveService(android.content.Context, android.content.ComponentName);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @NonNull public java.util.Set<java.lang.String> onGetSupportedVoiceActions(@NonNull java.util.Set<java.lang.String>);
+    method public void onLaunchVoiceAssistFromKeyguard();
+    method public void onReady();
+    method public void onShutdown();
+    method public void setDisabledShowContext(int);
+    method public final void setUiHints(@NonNull android.os.Bundle);
+    method public void showSession(android.os.Bundle, int);
+    field public static final String SERVICE_INTERFACE = "android.service.voice.VoiceInteractionService";
+    field public static final String SERVICE_META_DATA = "android.voice_interaction";
+  }
+
+  public class VoiceInteractionSession implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback {
+    ctor public VoiceInteractionSession(android.content.Context);
+    ctor public VoiceInteractionSession(android.content.Context, android.os.Handler);
+    method public void closeSystemDialogs();
+    method public void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public void finish();
+    method public android.content.Context getContext();
+    method public int getDisabledShowContext();
+    method public android.view.LayoutInflater getLayoutInflater();
+    method public int getUserDisabledShowContext();
+    method public android.app.Dialog getWindow();
+    method public void hide();
+    method public void onAssistStructureFailure(Throwable);
+    method public void onBackPressed();
+    method public void onCancelRequest(android.service.voice.VoiceInteractionSession.Request);
+    method public void onCloseSystemDialogs();
+    method public void onComputeInsets(android.service.voice.VoiceInteractionSession.Insets);
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onCreate();
+    method public android.view.View onCreateContentView();
+    method public void onDestroy();
+    method public void onDirectActionsInvalidated(@NonNull android.service.voice.VoiceInteractionSession.ActivityId);
+    method public boolean[] onGetSupportedCommands(String[]);
+    method @Deprecated public void onHandleAssist(@Nullable android.os.Bundle, @Nullable android.app.assist.AssistStructure, @Nullable android.app.assist.AssistContent);
+    method public void onHandleAssist(@NonNull android.service.voice.VoiceInteractionSession.AssistState);
+    method @Deprecated public void onHandleAssistSecondary(@Nullable android.os.Bundle, @Nullable android.app.assist.AssistStructure, @Nullable android.app.assist.AssistContent, int, int);
+    method public void onHandleScreenshot(@Nullable android.graphics.Bitmap);
+    method public void onHide();
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onLockscreenShown();
+    method public void onLowMemory();
+    method public void onPrepareShow(android.os.Bundle, int);
+    method public void onRequestAbortVoice(android.service.voice.VoiceInteractionSession.AbortVoiceRequest);
+    method public void onRequestCommand(android.service.voice.VoiceInteractionSession.CommandRequest);
+    method public void onRequestCompleteVoice(android.service.voice.VoiceInteractionSession.CompleteVoiceRequest);
+    method public void onRequestConfirmation(android.service.voice.VoiceInteractionSession.ConfirmationRequest);
+    method public void onRequestPickOption(android.service.voice.VoiceInteractionSession.PickOptionRequest);
+    method public void onShow(android.os.Bundle, int);
+    method public void onTaskFinished(android.content.Intent, int);
+    method public void onTaskStarted(android.content.Intent, int);
+    method public void onTrimMemory(int);
+    method public final void performDirectAction(@NonNull android.app.DirectAction, @Nullable android.os.Bundle, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.os.Bundle>);
+    method public final void registerVisibleActivityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.service.voice.VoiceInteractionSession.VisibleActivityCallback);
+    method public final void requestDirectActions(@NonNull android.service.voice.VoiceInteractionSession.ActivityId, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<android.app.DirectAction>>);
+    method public void setContentView(android.view.View);
+    method public void setDisabledShowContext(int);
+    method public void setKeepAwake(boolean);
+    method public void setTheme(int);
+    method public void setUiEnabled(boolean);
+    method public void show(android.os.Bundle, int);
+    method public void startAssistantActivity(android.content.Intent);
+    method public void startVoiceActivity(android.content.Intent);
+    method public final void unregisterVisibleActivityCallback(@NonNull android.service.voice.VoiceInteractionSession.VisibleActivityCallback);
+    field public static final int SHOW_SOURCE_ACTIVITY = 16; // 0x10
+    field public static final int SHOW_SOURCE_APPLICATION = 8; // 0x8
+    field public static final int SHOW_SOURCE_ASSIST_GESTURE = 4; // 0x4
+    field public static final int SHOW_SOURCE_AUTOMOTIVE_SYSTEM_UI = 128; // 0x80
+    field public static final int SHOW_SOURCE_NOTIFICATION = 64; // 0x40
+    field public static final int SHOW_SOURCE_PUSH_TO_TALK = 32; // 0x20
+    field public static final int SHOW_WITH_ASSIST = 1; // 0x1
+    field public static final int SHOW_WITH_SCREENSHOT = 2; // 0x2
+  }
+
+  public static final class VoiceInteractionSession.AbortVoiceRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method @Deprecated @Nullable public CharSequence getMessage();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendAbortResult(android.os.Bundle);
+  }
+
+  public static class VoiceInteractionSession.ActivityId {
+  }
+
+  public static final class VoiceInteractionSession.AssistState {
+    method @NonNull public android.service.voice.VoiceInteractionSession.ActivityId getActivityId();
+    method @Nullable public android.app.assist.AssistContent getAssistContent();
+    method @Nullable public android.os.Bundle getAssistData();
+    method @Nullable public android.app.assist.AssistStructure getAssistStructure();
+    method @IntRange(from=0) public int getCount();
+    method @IntRange(from=0xffffffff) public int getIndex();
+    method public boolean isFocused();
+  }
+
+  public static final class VoiceInteractionSession.CommandRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method public String getCommand();
+    method public void sendIntermediateResult(android.os.Bundle);
+    method public void sendResult(android.os.Bundle);
+  }
+
+  public static final class VoiceInteractionSession.CompleteVoiceRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method @Deprecated @Nullable public CharSequence getMessage();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendCompleteResult(android.os.Bundle);
+  }
+
+  public static final class VoiceInteractionSession.ConfirmationRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method @Deprecated @Nullable public CharSequence getPrompt();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendConfirmationResult(boolean, android.os.Bundle);
+  }
+
+  public static final class VoiceInteractionSession.Insets {
+    ctor public VoiceInteractionSession.Insets();
+    field public static final int TOUCHABLE_INSETS_CONTENT = 1; // 0x1
+    field public static final int TOUCHABLE_INSETS_FRAME = 0; // 0x0
+    field public static final int TOUCHABLE_INSETS_REGION = 3; // 0x3
+    field public final android.graphics.Rect contentInsets;
+    field public int touchableInsets;
+    field public final android.graphics.Region touchableRegion;
+  }
+
+  public static final class VoiceInteractionSession.PickOptionRequest extends android.service.voice.VoiceInteractionSession.Request {
+    method public android.app.VoiceInteractor.PickOptionRequest.Option[] getOptions();
+    method @Deprecated @Nullable public CharSequence getPrompt();
+    method @Nullable public android.app.VoiceInteractor.Prompt getVoicePrompt();
+    method public void sendIntermediatePickOptionResult(android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
+    method public void sendPickOptionResult(android.app.VoiceInteractor.PickOptionRequest.Option[], android.os.Bundle);
+  }
+
+  public static class VoiceInteractionSession.Request {
+    method public void cancel();
+    method public String getCallingPackage();
+    method public int getCallingUid();
+    method public android.os.Bundle getExtras();
+    method public boolean isActive();
+  }
+
+  public static interface VoiceInteractionSession.VisibleActivityCallback {
+    method public default void onInvisible(@NonNull android.service.voice.VoiceInteractionSession.ActivityId);
+    method public default void onVisible(@NonNull android.service.voice.VisibleActivityInfo);
+  }
+
+  public abstract class VoiceInteractionSessionService extends android.app.Service {
+    ctor public VoiceInteractionSessionService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.service.voice.VoiceInteractionSession onNewSession(android.os.Bundle);
+  }
+
+}
+
+package android.service.vr {
+
+  public abstract class VrListenerService extends android.app.Service {
+    ctor public VrListenerService();
+    method public static final boolean isVrModePackageEnabled(@NonNull android.content.Context, @NonNull android.content.ComponentName);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onCurrentVrActivityChanged(android.content.ComponentName);
+    field public static final String SERVICE_INTERFACE = "android.service.vr.VrListenerService";
+  }
+
+}
+
+package android.service.wallpaper {
+
+  public abstract class WallpaperService extends android.app.Service {
+    ctor public WallpaperService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.service.wallpaper.WallpaperService.Engine onCreateEngine();
+    field public static final String SERVICE_INTERFACE = "android.service.wallpaper.WallpaperService";
+    field public static final String SERVICE_META_DATA = "android.service.wallpaper";
+  }
+
+  public class WallpaperService.Engine {
+    ctor public WallpaperService.Engine();
+    method protected void dump(String, java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method public int getDesiredMinimumHeight();
+    method public int getDesiredMinimumWidth();
+    method @Nullable public android.content.Context getDisplayContext();
+    method public android.view.SurfaceHolder getSurfaceHolder();
+    method public boolean isPreview();
+    method public boolean isVisible();
+    method public void notifyColorsChanged();
+    method public void onApplyWindowInsets(android.view.WindowInsets);
+    method public android.os.Bundle onCommand(String, int, int, int, android.os.Bundle, boolean);
+    method @Nullable public android.app.WallpaperColors onComputeColors();
+    method public void onCreate(android.view.SurfaceHolder);
+    method public void onDesiredSizeChanged(int, int);
+    method public void onDestroy();
+    method public void onOffsetsChanged(float, float, float, float, int, int);
+    method public void onSurfaceChanged(android.view.SurfaceHolder, int, int, int);
+    method public void onSurfaceCreated(android.view.SurfaceHolder);
+    method public void onSurfaceDestroyed(android.view.SurfaceHolder);
+    method public void onSurfaceRedrawNeeded(android.view.SurfaceHolder);
+    method public void onTouchEvent(android.view.MotionEvent);
+    method public void onVisibilityChanged(boolean);
+    method public void onZoomChanged(@FloatRange(from=0.0f, to=1.0f) float);
+    method public void setOffsetNotificationsEnabled(boolean);
+    method public void setTouchEventsEnabled(boolean);
+  }
+
+}
+
+package android.speech {
+
+  public interface RecognitionListener {
+    method public void onBeginningOfSpeech();
+    method public void onBufferReceived(byte[]);
+    method public void onEndOfSpeech();
+    method public void onError(int);
+    method public void onEvent(int, android.os.Bundle);
+    method public void onPartialResults(android.os.Bundle);
+    method public void onReadyForSpeech(android.os.Bundle);
+    method public void onResults(android.os.Bundle);
+    method public void onRmsChanged(float);
+  }
+
+  public abstract class RecognitionService extends android.app.Service {
+    ctor public RecognitionService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method protected abstract void onCancel(android.speech.RecognitionService.Callback);
+    method protected abstract void onStartListening(android.content.Intent, android.speech.RecognitionService.Callback);
+    method protected abstract void onStopListening(android.speech.RecognitionService.Callback);
+    field public static final String SERVICE_INTERFACE = "android.speech.RecognitionService";
+    field public static final String SERVICE_META_DATA = "android.speech";
+  }
+
+  public class RecognitionService.Callback {
+    method public void beginningOfSpeech() throws android.os.RemoteException;
+    method public void bufferReceived(byte[]) throws android.os.RemoteException;
+    method public void endOfSpeech() throws android.os.RemoteException;
+    method public void error(int) throws android.os.RemoteException;
+    method @NonNull public android.content.AttributionSource getCallingAttributionSource();
+    method public int getCallingUid();
+    method public void partialResults(android.os.Bundle) throws android.os.RemoteException;
+    method public void readyForSpeech(android.os.Bundle) throws android.os.RemoteException;
+    method public void results(android.os.Bundle) throws android.os.RemoteException;
+    method public void rmsChanged(float) throws android.os.RemoteException;
+  }
+
+  public class RecognizerIntent {
+    method public static final android.content.Intent getVoiceDetailsIntent(android.content.Context);
+    field public static final String ACTION_GET_LANGUAGE_DETAILS = "android.speech.action.GET_LANGUAGE_DETAILS";
+    field public static final String ACTION_RECOGNIZE_SPEECH = "android.speech.action.RECOGNIZE_SPEECH";
+    field public static final String ACTION_VOICE_SEARCH_HANDS_FREE = "android.speech.action.VOICE_SEARCH_HANDS_FREE";
+    field public static final String ACTION_WEB_SEARCH = "android.speech.action.WEB_SEARCH";
+    field public static final String DETAILS_META_DATA = "android.speech.DETAILS";
+    field public static final String EXTRA_AUDIO_INJECT_SOURCE = "android.speech.extra.AUDIO_INJECT_SOURCE";
+    field public static final String EXTRA_CALLING_PACKAGE = "calling_package";
+    field public static final String EXTRA_CONFIDENCE_SCORES = "android.speech.extra.CONFIDENCE_SCORES";
+    field public static final String EXTRA_LANGUAGE = "android.speech.extra.LANGUAGE";
+    field public static final String EXTRA_LANGUAGE_MODEL = "android.speech.extra.LANGUAGE_MODEL";
+    field public static final String EXTRA_LANGUAGE_PREFERENCE = "android.speech.extra.LANGUAGE_PREFERENCE";
+    field public static final String EXTRA_MAX_RESULTS = "android.speech.extra.MAX_RESULTS";
+    field public static final String EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE = "android.speech.extra.ONLY_RETURN_LANGUAGE_PREFERENCE";
+    field public static final String EXTRA_ORIGIN = "android.speech.extra.ORIGIN";
+    field public static final String EXTRA_PARTIAL_RESULTS = "android.speech.extra.PARTIAL_RESULTS";
+    field public static final String EXTRA_PREFER_OFFLINE = "android.speech.extra.PREFER_OFFLINE";
+    field public static final String EXTRA_PROMPT = "android.speech.extra.PROMPT";
+    field public static final String EXTRA_RESULTS = "android.speech.extra.RESULTS";
+    field public static final String EXTRA_RESULTS_PENDINGINTENT = "android.speech.extra.RESULTS_PENDINGINTENT";
+    field public static final String EXTRA_RESULTS_PENDINGINTENT_BUNDLE = "android.speech.extra.RESULTS_PENDINGINTENT_BUNDLE";
+    field public static final String EXTRA_SECURE = "android.speech.extras.EXTRA_SECURE";
+    field public static final String EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS";
+    field public static final String EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_MINIMUM_LENGTH_MILLIS";
+    field public static final String EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS = "android.speech.extras.SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS";
+    field public static final String EXTRA_SUPPORTED_LANGUAGES = "android.speech.extra.SUPPORTED_LANGUAGES";
+    field public static final String EXTRA_WEB_SEARCH_ONLY = "android.speech.extra.WEB_SEARCH_ONLY";
+    field public static final String LANGUAGE_MODEL_FREE_FORM = "free_form";
+    field public static final String LANGUAGE_MODEL_WEB_SEARCH = "web_search";
+    field public static final int RESULT_AUDIO_ERROR = 5; // 0x5
+    field public static final int RESULT_CLIENT_ERROR = 2; // 0x2
+    field public static final int RESULT_NETWORK_ERROR = 4; // 0x4
+    field public static final int RESULT_NO_MATCH = 1; // 0x1
+    field public static final int RESULT_SERVER_ERROR = 3; // 0x3
+  }
+
+  public class RecognizerResultsIntent {
+    field public static final String ACTION_VOICE_SEARCH_RESULTS = "android.speech.action.VOICE_SEARCH_RESULTS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_HTML = "android.speech.extras.VOICE_SEARCH_RESULT_HTML";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS = "android.speech.extras.VOICE_SEARCH_RESULT_HTML_BASE_URLS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS = "android.speech.extras.EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_STRINGS = "android.speech.extras.VOICE_SEARCH_RESULT_STRINGS";
+    field public static final String EXTRA_VOICE_SEARCH_RESULT_URLS = "android.speech.extras.VOICE_SEARCH_RESULT_URLS";
+    field public static final String URI_SCHEME_INLINE = "inline";
+  }
+
+  public class SpeechRecognizer {
+    method @MainThread public void cancel();
+    method @MainThread @NonNull public static android.speech.SpeechRecognizer createOnDeviceSpeechRecognizer(@NonNull android.content.Context);
+    method @MainThread public static android.speech.SpeechRecognizer createSpeechRecognizer(android.content.Context);
+    method @MainThread public static android.speech.SpeechRecognizer createSpeechRecognizer(android.content.Context, android.content.ComponentName);
+    method public void destroy();
+    method public static boolean isOnDeviceRecognitionAvailable(@NonNull android.content.Context);
+    method public static boolean isRecognitionAvailable(@NonNull android.content.Context);
+    method @MainThread public void setRecognitionListener(android.speech.RecognitionListener);
+    method @MainThread public void startListening(android.content.Intent);
+    method @MainThread public void stopListening();
+    field public static final String CONFIDENCE_SCORES = "confidence_scores";
+    field public static final int ERROR_AUDIO = 3; // 0x3
+    field public static final int ERROR_CLIENT = 5; // 0x5
+    field public static final int ERROR_INSUFFICIENT_PERMISSIONS = 9; // 0x9
+    field public static final int ERROR_LANGUAGE_NOT_SUPPORTED = 12; // 0xc
+    field public static final int ERROR_LANGUAGE_UNAVAILABLE = 13; // 0xd
+    field public static final int ERROR_NETWORK = 2; // 0x2
+    field public static final int ERROR_NETWORK_TIMEOUT = 1; // 0x1
+    field public static final int ERROR_NO_MATCH = 7; // 0x7
+    field public static final int ERROR_RECOGNIZER_BUSY = 8; // 0x8
+    field public static final int ERROR_SERVER = 4; // 0x4
+    field public static final int ERROR_SERVER_DISCONNECTED = 11; // 0xb
+    field public static final int ERROR_SPEECH_TIMEOUT = 6; // 0x6
+    field public static final int ERROR_TOO_MANY_REQUESTS = 10; // 0xa
+    field public static final String RESULTS_RECOGNITION = "results_recognition";
+  }
+
+}
+
+package android.speech.tts {
+
+  public interface SynthesisCallback {
+    method public int audioAvailable(byte[], int, int);
+    method public int done();
+    method public void error();
+    method public void error(int);
+    method public int getMaxBufferSize();
+    method public boolean hasFinished();
+    method public boolean hasStarted();
+    method public default void rangeStart(int, int, int);
+    method public int start(int, int, @IntRange(from=1, to=2) int);
+  }
+
+  public final class SynthesisRequest {
+    ctor public SynthesisRequest(String, android.os.Bundle);
+    ctor public SynthesisRequest(CharSequence, android.os.Bundle);
+    method public int getCallerUid();
+    method public CharSequence getCharSequenceText();
+    method public String getCountry();
+    method public String getLanguage();
+    method public android.os.Bundle getParams();
+    method public int getPitch();
+    method public int getSpeechRate();
+    method @Deprecated public String getText();
+    method public String getVariant();
+    method public String getVoiceName();
+  }
+
+  public class TextToSpeech {
+    ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener);
+    ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, String);
+    method public int addEarcon(String, String, @RawRes int);
+    method @Deprecated public int addEarcon(String, String);
+    method public int addEarcon(String, java.io.File);
+    method public int addEarcon(@NonNull String, @NonNull android.net.Uri);
+    method public int addSpeech(String, String, @RawRes int);
+    method public int addSpeech(CharSequence, String, @RawRes int);
+    method public int addSpeech(String, String);
+    method public int addSpeech(CharSequence, java.io.File);
+    method public int addSpeech(@NonNull CharSequence, @NonNull android.net.Uri);
+    method @Deprecated public boolean areDefaultsEnforced();
+    method public java.util.Set<java.util.Locale> getAvailableLanguages();
+    method public String getDefaultEngine();
+    method @Deprecated public java.util.Locale getDefaultLanguage();
+    method public android.speech.tts.Voice getDefaultVoice();
+    method public java.util.List<android.speech.tts.TextToSpeech.EngineInfo> getEngines();
+    method @Deprecated public java.util.Set<java.lang.String> getFeatures(java.util.Locale);
+    method @Deprecated public java.util.Locale getLanguage();
+    method public static int getMaxSpeechInputLength();
+    method public android.speech.tts.Voice getVoice();
+    method public java.util.Set<android.speech.tts.Voice> getVoices();
+    method public int isLanguageAvailable(java.util.Locale);
+    method public boolean isSpeaking();
+    method public int playEarcon(String, int, android.os.Bundle, String);
+    method @Deprecated public int playEarcon(String, int, java.util.HashMap<java.lang.String,java.lang.String>);
+    method @Deprecated public int playSilence(long, int, java.util.HashMap<java.lang.String,java.lang.String>);
+    method public int playSilentUtterance(long, int, String);
+    method public int setAudioAttributes(android.media.AudioAttributes);
+    method @Deprecated public int setEngineByPackageName(String);
+    method public int setLanguage(java.util.Locale);
+    method @Deprecated public int setOnUtteranceCompletedListener(android.speech.tts.TextToSpeech.OnUtteranceCompletedListener);
+    method public int setOnUtteranceProgressListener(android.speech.tts.UtteranceProgressListener);
+    method public int setPitch(float);
+    method public int setSpeechRate(float);
+    method public int setVoice(android.speech.tts.Voice);
+    method public void shutdown();
+    method public int speak(CharSequence, int, android.os.Bundle, String);
+    method @Deprecated public int speak(String, int, java.util.HashMap<java.lang.String,java.lang.String>);
+    method public int stop();
+    method public int synthesizeToFile(@NonNull CharSequence, @NonNull android.os.Bundle, @NonNull android.os.ParcelFileDescriptor, @NonNull String);
+    method public int synthesizeToFile(CharSequence, android.os.Bundle, java.io.File, String);
+    method @Deprecated public int synthesizeToFile(String, java.util.HashMap<java.lang.String,java.lang.String>, String);
+    field public static final String ACTION_TTS_QUEUE_PROCESSING_COMPLETED = "android.speech.tts.TTS_QUEUE_PROCESSING_COMPLETED";
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_INVALID_REQUEST = -8; // 0xfffffff8
+    field public static final int ERROR_NETWORK = -6; // 0xfffffffa
+    field public static final int ERROR_NETWORK_TIMEOUT = -7; // 0xfffffff9
+    field public static final int ERROR_NOT_INSTALLED_YET = -9; // 0xfffffff7
+    field public static final int ERROR_OUTPUT = -5; // 0xfffffffb
+    field public static final int ERROR_SERVICE = -4; // 0xfffffffc
+    field public static final int ERROR_SYNTHESIS = -3; // 0xfffffffd
+    field public static final int LANG_AVAILABLE = 0; // 0x0
+    field public static final int LANG_COUNTRY_AVAILABLE = 1; // 0x1
+    field public static final int LANG_COUNTRY_VAR_AVAILABLE = 2; // 0x2
+    field public static final int LANG_MISSING_DATA = -1; // 0xffffffff
+    field public static final int LANG_NOT_SUPPORTED = -2; // 0xfffffffe
+    field public static final int QUEUE_ADD = 1; // 0x1
+    field public static final int QUEUE_FLUSH = 0; // 0x0
+    field public static final int STOPPED = -2; // 0xfffffffe
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public class TextToSpeech.Engine {
+    ctor public TextToSpeech.Engine();
+    field public static final String ACTION_CHECK_TTS_DATA = "android.speech.tts.engine.CHECK_TTS_DATA";
+    field public static final String ACTION_GET_SAMPLE_TEXT = "android.speech.tts.engine.GET_SAMPLE_TEXT";
+    field public static final String ACTION_INSTALL_TTS_DATA = "android.speech.tts.engine.INSTALL_TTS_DATA";
+    field public static final String ACTION_TTS_DATA_INSTALLED = "android.speech.tts.engine.TTS_DATA_INSTALLED";
+    field @Deprecated public static final int CHECK_VOICE_DATA_BAD_DATA = -1; // 0xffffffff
+    field public static final int CHECK_VOICE_DATA_FAIL = 0; // 0x0
+    field @Deprecated public static final int CHECK_VOICE_DATA_MISSING_DATA = -2; // 0xfffffffe
+    field @Deprecated public static final int CHECK_VOICE_DATA_MISSING_VOLUME = -3; // 0xfffffffd
+    field public static final int CHECK_VOICE_DATA_PASS = 1; // 0x1
+    field public static final int DEFAULT_STREAM = 3; // 0x3
+    field public static final String EXTRA_AVAILABLE_VOICES = "availableVoices";
+    field @Deprecated public static final String EXTRA_CHECK_VOICE_DATA_FOR = "checkVoiceDataFor";
+    field public static final String EXTRA_SAMPLE_TEXT = "sampleText";
+    field @Deprecated public static final String EXTRA_TTS_DATA_INSTALLED = "dataInstalled";
+    field public static final String EXTRA_UNAVAILABLE_VOICES = "unavailableVoices";
+    field @Deprecated public static final String EXTRA_VOICE_DATA_FILES = "dataFiles";
+    field @Deprecated public static final String EXTRA_VOICE_DATA_FILES_INFO = "dataFilesInfo";
+    field @Deprecated public static final String EXTRA_VOICE_DATA_ROOT_DIRECTORY = "dataRoot";
+    field public static final String INTENT_ACTION_TTS_SERVICE = "android.intent.action.TTS_SERVICE";
+    field @Deprecated public static final String KEY_FEATURE_EMBEDDED_SYNTHESIS = "embeddedTts";
+    field public static final String KEY_FEATURE_NETWORK_RETRIES_COUNT = "networkRetriesCount";
+    field @Deprecated public static final String KEY_FEATURE_NETWORK_SYNTHESIS = "networkTts";
+    field public static final String KEY_FEATURE_NETWORK_TIMEOUT_MS = "networkTimeoutMs";
+    field public static final String KEY_FEATURE_NOT_INSTALLED = "notInstalled";
+    field public static final String KEY_PARAM_PAN = "pan";
+    field public static final String KEY_PARAM_SESSION_ID = "sessionId";
+    field public static final String KEY_PARAM_STREAM = "streamType";
+    field public static final String KEY_PARAM_UTTERANCE_ID = "utteranceId";
+    field public static final String KEY_PARAM_VOLUME = "volume";
+    field public static final String SERVICE_META_DATA = "android.speech.tts";
+  }
+
+  public static class TextToSpeech.EngineInfo {
+    ctor public TextToSpeech.EngineInfo();
+    field public int icon;
+    field public String label;
+    field public String name;
+  }
+
+  public static interface TextToSpeech.OnInitListener {
+    method public void onInit(int);
+  }
+
+  @Deprecated public static interface TextToSpeech.OnUtteranceCompletedListener {
+    method @Deprecated public void onUtteranceCompleted(String);
+  }
+
+  public abstract class TextToSpeechService extends android.app.Service {
+    ctor public TextToSpeechService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public String onGetDefaultVoiceNameFor(String, String, String);
+    method protected java.util.Set<java.lang.String> onGetFeaturesForLanguage(String, String, String);
+    method protected abstract String[] onGetLanguage();
+    method public java.util.List<android.speech.tts.Voice> onGetVoices();
+    method protected abstract int onIsLanguageAvailable(String, String, String);
+    method public int onIsValidVoiceName(String);
+    method protected abstract int onLoadLanguage(String, String, String);
+    method public int onLoadVoice(String);
+    method protected abstract void onStop();
+    method protected abstract void onSynthesizeText(android.speech.tts.SynthesisRequest, android.speech.tts.SynthesisCallback);
+  }
+
+  public abstract class UtteranceProgressListener {
+    ctor public UtteranceProgressListener();
+    method public void onAudioAvailable(String, byte[]);
+    method public void onBeginSynthesis(String, int, int, int);
+    method public abstract void onDone(String);
+    method @Deprecated public abstract void onError(String);
+    method public void onError(String, int);
+    method public void onRangeStart(String, int, int, int);
+    method public abstract void onStart(String);
+    method public void onStop(String, boolean);
+  }
+
+  public class Voice implements android.os.Parcelable {
+    ctor public Voice(String, java.util.Locale, int, int, boolean, java.util.Set<java.lang.String>);
+    method public int describeContents();
+    method public java.util.Set<java.lang.String> getFeatures();
+    method public int getLatency();
+    method public java.util.Locale getLocale();
+    method public String getName();
+    method public int getQuality();
+    method public boolean isNetworkConnectionRequired();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.speech.tts.Voice> CREATOR;
+    field public static final int LATENCY_HIGH = 400; // 0x190
+    field public static final int LATENCY_LOW = 200; // 0xc8
+    field public static final int LATENCY_NORMAL = 300; // 0x12c
+    field public static final int LATENCY_VERY_HIGH = 500; // 0x1f4
+    field public static final int LATENCY_VERY_LOW = 100; // 0x64
+    field public static final int QUALITY_HIGH = 400; // 0x190
+    field public static final int QUALITY_LOW = 200; // 0xc8
+    field public static final int QUALITY_NORMAL = 300; // 0x12c
+    field public static final int QUALITY_VERY_HIGH = 500; // 0x1f4
+    field public static final int QUALITY_VERY_LOW = 100; // 0x64
+  }
+
+}
+
+package android.system {
+
+  public final class ErrnoException extends java.lang.Exception {
+    ctor public ErrnoException(String, int);
+    ctor public ErrnoException(String, int, Throwable);
+    method @NonNull public java.io.IOException rethrowAsIOException() throws java.io.IOException;
+    method @NonNull public java.net.SocketException rethrowAsSocketException() throws java.net.SocketException;
+    field public final int errno;
+  }
+
+  public class Int64Ref {
+    ctor public Int64Ref(long);
+    field public long value;
+  }
+
+  public final class Os {
+    method public static java.io.FileDescriptor accept(java.io.FileDescriptor, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static boolean access(String, int) throws android.system.ErrnoException;
+    method public static void bind(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void bind(@NonNull java.io.FileDescriptor, @NonNull java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void chmod(String, int) throws android.system.ErrnoException;
+    method public static void chown(String, int, int) throws android.system.ErrnoException;
+    method public static void close(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void connect(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void connect(@NonNull java.io.FileDescriptor, @NonNull java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static java.io.FileDescriptor dup(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor dup2(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static String[] environ();
+    method public static void execv(String, String[]) throws android.system.ErrnoException;
+    method public static void execve(String, String[], String[]) throws android.system.ErrnoException;
+    method public static void fchmod(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static void fchown(java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static int fcntlInt(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static void fdatasync(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static android.system.StructStat fstat(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static android.system.StructStatVfs fstatvfs(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void fsync(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void ftruncate(java.io.FileDescriptor, long) throws android.system.ErrnoException;
+    method public static String gai_strerror(int);
+    method public static int getegid();
+    method public static String getenv(String);
+    method public static int geteuid();
+    method public static int getgid();
+    method public static java.net.SocketAddress getpeername(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static int getpid();
+    method public static int getppid();
+    method public static java.net.SocketAddress getsockname(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method @NonNull public static android.system.StructTimeval getsockoptTimeval(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static int gettid();
+    method public static int getuid();
+    method public static byte[] getxattr(String, String) throws android.system.ErrnoException;
+    method public static String if_indextoname(int);
+    method public static int if_nametoindex(String);
+    method public static java.net.InetAddress inet_pton(int, String);
+    method public static boolean isatty(java.io.FileDescriptor);
+    method public static void kill(int, int) throws android.system.ErrnoException;
+    method public static void lchown(String, int, int) throws android.system.ErrnoException;
+    method public static void link(String, String) throws android.system.ErrnoException;
+    method public static void listen(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static String[] listxattr(String) throws android.system.ErrnoException;
+    method public static long lseek(java.io.FileDescriptor, long, int) throws android.system.ErrnoException;
+    method public static android.system.StructStat lstat(String) throws android.system.ErrnoException;
+    method @NonNull public static java.io.FileDescriptor memfd_create(@NonNull String, int) throws android.system.ErrnoException;
+    method public static void mincore(long, long, byte[]) throws android.system.ErrnoException;
+    method public static void mkdir(String, int) throws android.system.ErrnoException;
+    method public static void mkfifo(String, int) throws android.system.ErrnoException;
+    method public static void mlock(long, long) throws android.system.ErrnoException;
+    method public static long mmap(long, long, int, int, java.io.FileDescriptor, long) throws android.system.ErrnoException;
+    method public static void msync(long, long, int) throws android.system.ErrnoException;
+    method public static void munlock(long, long) throws android.system.ErrnoException;
+    method public static void munmap(long, long) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor open(String, int, int) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor[] pipe() throws android.system.ErrnoException;
+    method public static int poll(android.system.StructPollfd[], int) throws android.system.ErrnoException;
+    method public static void posix_fallocate(java.io.FileDescriptor, long, long) throws android.system.ErrnoException;
+    method public static int prctl(int, long, long, long, long) throws android.system.ErrnoException;
+    method public static int pread(java.io.FileDescriptor, java.nio.ByteBuffer, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int pread(java.io.FileDescriptor, byte[], int, int, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int pwrite(java.io.FileDescriptor, java.nio.ByteBuffer, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int pwrite(java.io.FileDescriptor, byte[], int, int, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int read(java.io.FileDescriptor, java.nio.ByteBuffer) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int read(java.io.FileDescriptor, byte[], int, int) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static String readlink(String) throws android.system.ErrnoException;
+    method public static int readv(java.io.FileDescriptor, Object[], int[], int[]) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int recvfrom(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int recvfrom(java.io.FileDescriptor, byte[], int, int, int, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int recvmsg(@NonNull java.io.FileDescriptor, @NonNull android.system.StructMsghdr, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void remove(String) throws android.system.ErrnoException;
+    method public static void removexattr(String, String) throws android.system.ErrnoException;
+    method public static void rename(String, String) throws android.system.ErrnoException;
+    method public static long sendfile(java.io.FileDescriptor, java.io.FileDescriptor, android.system.Int64Ref, long) throws android.system.ErrnoException;
+    method public static int sendmsg(@NonNull java.io.FileDescriptor, @NonNull android.system.StructMsghdr, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int sendto(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int sendto(@NonNull java.io.FileDescriptor, @NonNull byte[], int, int, int, @Nullable java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method @Deprecated public static void setegid(int) throws android.system.ErrnoException;
+    method public static void setenv(String, String, boolean) throws android.system.ErrnoException;
+    method @Deprecated public static void seteuid(int) throws android.system.ErrnoException;
+    method @Deprecated public static void setgid(int) throws android.system.ErrnoException;
+    method public static int setsid() throws android.system.ErrnoException;
+    method public static void setsockoptInt(java.io.FileDescriptor, int, int, int) throws android.system.ErrnoException;
+    method public static void setsockoptTimeval(@NonNull java.io.FileDescriptor, int, int, @NonNull android.system.StructTimeval) throws android.system.ErrnoException;
+    method @Deprecated public static void setuid(int) throws android.system.ErrnoException;
+    method public static void setxattr(String, String, byte[], int) throws android.system.ErrnoException;
+    method public static void shutdown(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor socket(int, int, int) throws android.system.ErrnoException;
+    method public static void socketpair(int, int, int, java.io.FileDescriptor, java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static android.system.StructStat stat(String) throws android.system.ErrnoException;
+    method public static android.system.StructStatVfs statvfs(String) throws android.system.ErrnoException;
+    method public static String strerror(int);
+    method public static String strsignal(int);
+    method public static void symlink(String, String) throws android.system.ErrnoException;
+    method public static long sysconf(int);
+    method public static void tcdrain(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void tcsendbreak(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static int umask(int);
+    method public static android.system.StructUtsname uname();
+    method public static void unsetenv(String) throws android.system.ErrnoException;
+    method public static int write(java.io.FileDescriptor, java.nio.ByteBuffer) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int write(java.io.FileDescriptor, byte[], int, int) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int writev(java.io.FileDescriptor, Object[], int[], int[]) throws android.system.ErrnoException, java.io.InterruptedIOException;
+  }
+
+  public final class OsConstants {
+    method public static boolean S_ISBLK(int);
+    method public static boolean S_ISCHR(int);
+    method public static boolean S_ISDIR(int);
+    method public static boolean S_ISFIFO(int);
+    method public static boolean S_ISLNK(int);
+    method public static boolean S_ISREG(int);
+    method public static boolean S_ISSOCK(int);
+    method public static boolean WCOREDUMP(int);
+    method public static int WEXITSTATUS(int);
+    method public static boolean WIFEXITED(int);
+    method public static boolean WIFSIGNALED(int);
+    method public static boolean WIFSTOPPED(int);
+    method public static int WSTOPSIG(int);
+    method public static int WTERMSIG(int);
+    method public static String errnoName(int);
+    method public static String gaiName(int);
+    field public static final int AF_INET;
+    field public static final int AF_INET6;
+    field public static final int AF_NETLINK;
+    field public static final int AF_PACKET;
+    field public static final int AF_UNIX;
+    field public static final int AF_UNSPEC;
+    field public static final int AF_VSOCK;
+    field public static final int AI_ADDRCONFIG;
+    field public static final int AI_ALL;
+    field public static final int AI_CANONNAME;
+    field public static final int AI_NUMERICHOST;
+    field public static final int AI_NUMERICSERV;
+    field public static final int AI_PASSIVE;
+    field public static final int AI_V4MAPPED;
+    field public static final int ARPHRD_ETHER;
+    field public static final int CAP_AUDIT_CONTROL;
+    field public static final int CAP_AUDIT_WRITE;
+    field public static final int CAP_BLOCK_SUSPEND;
+    field public static final int CAP_CHOWN;
+    field public static final int CAP_DAC_OVERRIDE;
+    field public static final int CAP_DAC_READ_SEARCH;
+    field public static final int CAP_FOWNER;
+    field public static final int CAP_FSETID;
+    field public static final int CAP_IPC_LOCK;
+    field public static final int CAP_IPC_OWNER;
+    field public static final int CAP_KILL;
+    field public static final int CAP_LAST_CAP;
+    field public static final int CAP_LEASE;
+    field public static final int CAP_LINUX_IMMUTABLE;
+    field public static final int CAP_MAC_ADMIN;
+    field public static final int CAP_MAC_OVERRIDE;
+    field public static final int CAP_MKNOD;
+    field public static final int CAP_NET_ADMIN;
+    field public static final int CAP_NET_BIND_SERVICE;
+    field public static final int CAP_NET_BROADCAST;
+    field public static final int CAP_NET_RAW;
+    field public static final int CAP_SETFCAP;
+    field public static final int CAP_SETGID;
+    field public static final int CAP_SETPCAP;
+    field public static final int CAP_SETUID;
+    field public static final int CAP_SYSLOG;
+    field public static final int CAP_SYS_ADMIN;
+    field public static final int CAP_SYS_BOOT;
+    field public static final int CAP_SYS_CHROOT;
+    field public static final int CAP_SYS_MODULE;
+    field public static final int CAP_SYS_NICE;
+    field public static final int CAP_SYS_PACCT;
+    field public static final int CAP_SYS_PTRACE;
+    field public static final int CAP_SYS_RAWIO;
+    field public static final int CAP_SYS_RESOURCE;
+    field public static final int CAP_SYS_TIME;
+    field public static final int CAP_SYS_TTY_CONFIG;
+    field public static final int CAP_WAKE_ALARM;
+    field public static final int E2BIG;
+    field public static final int EACCES;
+    field public static final int EADDRINUSE;
+    field public static final int EADDRNOTAVAIL;
+    field public static final int EAFNOSUPPORT;
+    field public static final int EAGAIN;
+    field public static final int EAI_AGAIN;
+    field public static final int EAI_BADFLAGS;
+    field public static final int EAI_FAIL;
+    field public static final int EAI_FAMILY;
+    field public static final int EAI_MEMORY;
+    field public static final int EAI_NODATA;
+    field public static final int EAI_NONAME;
+    field public static final int EAI_OVERFLOW;
+    field public static final int EAI_SERVICE;
+    field public static final int EAI_SOCKTYPE;
+    field public static final int EAI_SYSTEM;
+    field public static final int EALREADY;
+    field public static final int EBADF;
+    field public static final int EBADMSG;
+    field public static final int EBUSY;
+    field public static final int ECANCELED;
+    field public static final int ECHILD;
+    field public static final int ECONNABORTED;
+    field public static final int ECONNREFUSED;
+    field public static final int ECONNRESET;
+    field public static final int EDEADLK;
+    field public static final int EDESTADDRREQ;
+    field public static final int EDOM;
+    field public static final int EDQUOT;
+    field public static final int EEXIST;
+    field public static final int EFAULT;
+    field public static final int EFBIG;
+    field public static final int EHOSTUNREACH;
+    field public static final int EIDRM;
+    field public static final int EILSEQ;
+    field public static final int EINPROGRESS;
+    field public static final int EINTR;
+    field public static final int EINVAL;
+    field public static final int EIO;
+    field public static final int EISCONN;
+    field public static final int EISDIR;
+    field public static final int ELOOP;
+    field public static final int EMFILE;
+    field public static final int EMLINK;
+    field public static final int EMSGSIZE;
+    field public static final int EMULTIHOP;
+    field public static final int ENAMETOOLONG;
+    field public static final int ENETDOWN;
+    field public static final int ENETRESET;
+    field public static final int ENETUNREACH;
+    field public static final int ENFILE;
+    field public static final int ENOBUFS;
+    field public static final int ENODATA;
+    field public static final int ENODEV;
+    field public static final int ENOENT;
+    field public static final int ENOEXEC;
+    field public static final int ENOLCK;
+    field public static final int ENOLINK;
+    field public static final int ENOMEM;
+    field public static final int ENOMSG;
+    field public static final int ENONET;
+    field public static final int ENOPROTOOPT;
+    field public static final int ENOSPC;
+    field public static final int ENOSR;
+    field public static final int ENOSTR;
+    field public static final int ENOSYS;
+    field public static final int ENOTCONN;
+    field public static final int ENOTDIR;
+    field public static final int ENOTEMPTY;
+    field public static final int ENOTSOCK;
+    field public static final int ENOTSUP;
+    field public static final int ENOTTY;
+    field public static final int ENXIO;
+    field public static final int EOPNOTSUPP;
+    field public static final int EOVERFLOW;
+    field public static final int EPERM;
+    field public static final int EPIPE;
+    field public static final int EPROTO;
+    field public static final int EPROTONOSUPPORT;
+    field public static final int EPROTOTYPE;
+    field public static final int ERANGE;
+    field public static final int EROFS;
+    field public static final int ESPIPE;
+    field public static final int ESRCH;
+    field public static final int ESTALE;
+    field public static final int ETH_P_ALL;
+    field public static final int ETH_P_ARP;
+    field public static final int ETH_P_IP;
+    field public static final int ETH_P_IPV6;
+    field public static final int ETIME;
+    field public static final int ETIMEDOUT;
+    field public static final int ETXTBSY;
+    field public static final int EXDEV;
+    field public static final int EXIT_FAILURE;
+    field public static final int EXIT_SUCCESS;
+    field public static final int FD_CLOEXEC;
+    field public static final int FIONREAD;
+    field public static final int F_DUPFD;
+    field public static final int F_DUPFD_CLOEXEC;
+    field public static final int F_GETFD;
+    field public static final int F_GETFL;
+    field public static final int F_GETLK;
+    field public static final int F_GETLK64;
+    field public static final int F_GETOWN;
+    field public static final int F_OK;
+    field public static final int F_RDLCK;
+    field public static final int F_SETFD;
+    field public static final int F_SETFL;
+    field public static final int F_SETLK;
+    field public static final int F_SETLK64;
+    field public static final int F_SETLKW;
+    field public static final int F_SETLKW64;
+    field public static final int F_SETOWN;
+    field public static final int F_UNLCK;
+    field public static final int F_WRLCK;
+    field public static final int ICMP6_ECHO_REPLY;
+    field public static final int ICMP6_ECHO_REQUEST;
+    field public static final int ICMP_ECHO;
+    field public static final int ICMP_ECHOREPLY;
+    field public static final int IFA_F_DADFAILED;
+    field public static final int IFA_F_DEPRECATED;
+    field public static final int IFA_F_HOMEADDRESS;
+    field public static final int IFA_F_NODAD;
+    field public static final int IFA_F_OPTIMISTIC;
+    field public static final int IFA_F_PERMANENT;
+    field public static final int IFA_F_SECONDARY;
+    field public static final int IFA_F_TEMPORARY;
+    field public static final int IFA_F_TENTATIVE;
+    field public static final int IFF_ALLMULTI;
+    field public static final int IFF_AUTOMEDIA;
+    field public static final int IFF_BROADCAST;
+    field public static final int IFF_DEBUG;
+    field public static final int IFF_DYNAMIC;
+    field public static final int IFF_LOOPBACK;
+    field public static final int IFF_MASTER;
+    field public static final int IFF_MULTICAST;
+    field public static final int IFF_NOARP;
+    field public static final int IFF_NOTRAILERS;
+    field public static final int IFF_POINTOPOINT;
+    field public static final int IFF_PORTSEL;
+    field public static final int IFF_PROMISC;
+    field public static final int IFF_RUNNING;
+    field public static final int IFF_SLAVE;
+    field public static final int IFF_UP;
+    field public static final int IPPROTO_ICMP;
+    field public static final int IPPROTO_ICMPV6;
+    field public static final int IPPROTO_IP;
+    field public static final int IPPROTO_IPV6;
+    field public static final int IPPROTO_RAW;
+    field public static final int IPPROTO_TCP;
+    field public static final int IPPROTO_UDP;
+    field public static final int IPV6_CHECKSUM;
+    field public static final int IPV6_MULTICAST_HOPS;
+    field public static final int IPV6_MULTICAST_IF;
+    field public static final int IPV6_MULTICAST_LOOP;
+    field public static final int IPV6_RECVDSTOPTS;
+    field public static final int IPV6_RECVHOPLIMIT;
+    field public static final int IPV6_RECVHOPOPTS;
+    field public static final int IPV6_RECVPKTINFO;
+    field public static final int IPV6_RECVRTHDR;
+    field public static final int IPV6_RECVTCLASS;
+    field public static final int IPV6_TCLASS;
+    field public static final int IPV6_UNICAST_HOPS;
+    field public static final int IPV6_V6ONLY;
+    field public static final int IP_MULTICAST_IF;
+    field public static final int IP_MULTICAST_LOOP;
+    field public static final int IP_MULTICAST_TTL;
+    field public static final int IP_TOS;
+    field public static final int IP_TTL;
+    field public static final int MAP_ANONYMOUS;
+    field public static final int MAP_FIXED;
+    field public static final int MAP_PRIVATE;
+    field public static final int MAP_SHARED;
+    field public static final int MCAST_BLOCK_SOURCE;
+    field public static final int MCAST_JOIN_GROUP;
+    field public static final int MCAST_JOIN_SOURCE_GROUP;
+    field public static final int MCAST_LEAVE_GROUP;
+    field public static final int MCAST_LEAVE_SOURCE_GROUP;
+    field public static final int MCAST_UNBLOCK_SOURCE;
+    field public static final int MCL_CURRENT;
+    field public static final int MCL_FUTURE;
+    field public static final int MFD_CLOEXEC;
+    field public static final int MSG_CTRUNC;
+    field public static final int MSG_DONTROUTE;
+    field public static final int MSG_EOR;
+    field public static final int MSG_OOB;
+    field public static final int MSG_PEEK;
+    field public static final int MSG_TRUNC;
+    field public static final int MSG_WAITALL;
+    field public static final int MS_ASYNC;
+    field public static final int MS_INVALIDATE;
+    field public static final int MS_SYNC;
+    field public static final int NETLINK_INET_DIAG;
+    field public static final int NETLINK_NETFILTER;
+    field public static final int NETLINK_ROUTE;
+    field public static final int NI_DGRAM;
+    field public static final int NI_NAMEREQD;
+    field public static final int NI_NOFQDN;
+    field public static final int NI_NUMERICHOST;
+    field public static final int NI_NUMERICSERV;
+    field public static final int O_ACCMODE;
+    field public static final int O_APPEND;
+    field public static final int O_CLOEXEC;
+    field public static final int O_CREAT;
+    field public static final int O_DSYNC;
+    field public static final int O_EXCL;
+    field public static final int O_NOCTTY;
+    field public static final int O_NOFOLLOW;
+    field public static final int O_NONBLOCK;
+    field public static final int O_RDONLY;
+    field public static final int O_RDWR;
+    field public static final int O_SYNC;
+    field public static final int O_TRUNC;
+    field public static final int O_WRONLY;
+    field public static final int POLLERR;
+    field public static final int POLLHUP;
+    field public static final int POLLIN;
+    field public static final int POLLNVAL;
+    field public static final int POLLOUT;
+    field public static final int POLLPRI;
+    field public static final int POLLRDBAND;
+    field public static final int POLLRDNORM;
+    field public static final int POLLWRBAND;
+    field public static final int POLLWRNORM;
+    field public static final int PROT_EXEC;
+    field public static final int PROT_NONE;
+    field public static final int PROT_READ;
+    field public static final int PROT_WRITE;
+    field public static final int PR_GET_DUMPABLE;
+    field public static final int PR_SET_DUMPABLE;
+    field public static final int PR_SET_NO_NEW_PRIVS;
+    field public static final int RTMGRP_NEIGH;
+    field public static final int RT_SCOPE_HOST;
+    field public static final int RT_SCOPE_LINK;
+    field public static final int RT_SCOPE_NOWHERE;
+    field public static final int RT_SCOPE_SITE;
+    field public static final int RT_SCOPE_UNIVERSE;
+    field public static final int R_OK;
+    field public static final int SEEK_CUR;
+    field public static final int SEEK_END;
+    field public static final int SEEK_SET;
+    field public static final int SHUT_RD;
+    field public static final int SHUT_RDWR;
+    field public static final int SHUT_WR;
+    field public static final int SIGABRT;
+    field public static final int SIGALRM;
+    field public static final int SIGBUS;
+    field public static final int SIGCHLD;
+    field public static final int SIGCONT;
+    field public static final int SIGFPE;
+    field public static final int SIGHUP;
+    field public static final int SIGILL;
+    field public static final int SIGINT;
+    field public static final int SIGIO;
+    field public static final int SIGKILL;
+    field public static final int SIGPIPE;
+    field public static final int SIGPROF;
+    field public static final int SIGPWR;
+    field public static final int SIGQUIT;
+    field public static final int SIGRTMAX;
+    field public static final int SIGRTMIN;
+    field public static final int SIGSEGV;
+    field public static final int SIGSTKFLT;
+    field public static final int SIGSTOP;
+    field public static final int SIGSYS;
+    field public static final int SIGTERM;
+    field public static final int SIGTRAP;
+    field public static final int SIGTSTP;
+    field public static final int SIGTTIN;
+    field public static final int SIGTTOU;
+    field public static final int SIGURG;
+    field public static final int SIGUSR1;
+    field public static final int SIGUSR2;
+    field public static final int SIGVTALRM;
+    field public static final int SIGWINCH;
+    field public static final int SIGXCPU;
+    field public static final int SIGXFSZ;
+    field public static final int SIOCGIFADDR;
+    field public static final int SIOCGIFBRDADDR;
+    field public static final int SIOCGIFDSTADDR;
+    field public static final int SIOCGIFNETMASK;
+    field public static final int SOCK_CLOEXEC;
+    field public static final int SOCK_DGRAM;
+    field public static final int SOCK_NONBLOCK;
+    field public static final int SOCK_RAW;
+    field public static final int SOCK_SEQPACKET;
+    field public static final int SOCK_STREAM;
+    field public static final int SOL_SOCKET;
+    field public static final int SOL_UDP;
+    field public static final int SO_BINDTODEVICE;
+    field public static final int SO_BROADCAST;
+    field public static final int SO_DEBUG;
+    field public static final int SO_DONTROUTE;
+    field public static final int SO_ERROR;
+    field public static final int SO_KEEPALIVE;
+    field public static final int SO_LINGER;
+    field public static final int SO_OOBINLINE;
+    field public static final int SO_PASSCRED;
+    field public static final int SO_PEERCRED;
+    field public static final int SO_RCVBUF;
+    field public static final int SO_RCVLOWAT;
+    field public static final int SO_RCVTIMEO;
+    field public static final int SO_REUSEADDR;
+    field public static final int SO_SNDBUF;
+    field public static final int SO_SNDLOWAT;
+    field public static final int SO_SNDTIMEO;
+    field public static final int SO_TYPE;
+    field public static final int STDERR_FILENO;
+    field public static final int STDIN_FILENO;
+    field public static final int STDOUT_FILENO;
+    field public static final int ST_MANDLOCK;
+    field public static final int ST_NOATIME;
+    field public static final int ST_NODEV;
+    field public static final int ST_NODIRATIME;
+    field public static final int ST_NOEXEC;
+    field public static final int ST_NOSUID;
+    field public static final int ST_RDONLY;
+    field public static final int ST_RELATIME;
+    field public static final int ST_SYNCHRONOUS;
+    field public static final int S_IFBLK;
+    field public static final int S_IFCHR;
+    field public static final int S_IFDIR;
+    field public static final int S_IFIFO;
+    field public static final int S_IFLNK;
+    field public static final int S_IFMT;
+    field public static final int S_IFREG;
+    field public static final int S_IFSOCK;
+    field public static final int S_IRGRP;
+    field public static final int S_IROTH;
+    field public static final int S_IRUSR;
+    field public static final int S_IRWXG;
+    field public static final int S_IRWXO;
+    field public static final int S_IRWXU;
+    field public static final int S_ISGID;
+    field public static final int S_ISUID;
+    field public static final int S_ISVTX;
+    field public static final int S_IWGRP;
+    field public static final int S_IWOTH;
+    field public static final int S_IWUSR;
+    field public static final int S_IXGRP;
+    field public static final int S_IXOTH;
+    field public static final int S_IXUSR;
+    field public static final int TCP_NODELAY;
+    field public static final int TCP_USER_TIMEOUT;
+    field public static final int UDP_GRO;
+    field public static final int UDP_SEGMENT;
+    field public static final int VMADDR_CID_ANY;
+    field public static final int VMADDR_CID_HOST;
+    field public static final int VMADDR_CID_LOCAL;
+    field public static final int VMADDR_PORT_ANY;
+    field public static final int WCONTINUED;
+    field public static final int WEXITED;
+    field public static final int WNOHANG;
+    field public static final int WNOWAIT;
+    field public static final int WSTOPPED;
+    field public static final int WUNTRACED;
+    field public static final int W_OK;
+    field public static final int X_OK;
+    field public static final int _SC_2_CHAR_TERM;
+    field public static final int _SC_2_C_BIND;
+    field public static final int _SC_2_C_DEV;
+    field public static final int _SC_2_C_VERSION;
+    field public static final int _SC_2_FORT_DEV;
+    field public static final int _SC_2_FORT_RUN;
+    field public static final int _SC_2_LOCALEDEF;
+    field public static final int _SC_2_SW_DEV;
+    field public static final int _SC_2_UPE;
+    field public static final int _SC_2_VERSION;
+    field public static final int _SC_AIO_LISTIO_MAX;
+    field public static final int _SC_AIO_MAX;
+    field public static final int _SC_AIO_PRIO_DELTA_MAX;
+    field public static final int _SC_ARG_MAX;
+    field public static final int _SC_ASYNCHRONOUS_IO;
+    field public static final int _SC_ATEXIT_MAX;
+    field public static final int _SC_AVPHYS_PAGES;
+    field public static final int _SC_BC_BASE_MAX;
+    field public static final int _SC_BC_DIM_MAX;
+    field public static final int _SC_BC_SCALE_MAX;
+    field public static final int _SC_BC_STRING_MAX;
+    field public static final int _SC_CHILD_MAX;
+    field public static final int _SC_CLK_TCK;
+    field public static final int _SC_COLL_WEIGHTS_MAX;
+    field public static final int _SC_DELAYTIMER_MAX;
+    field public static final int _SC_EXPR_NEST_MAX;
+    field public static final int _SC_FSYNC;
+    field public static final int _SC_GETGR_R_SIZE_MAX;
+    field public static final int _SC_GETPW_R_SIZE_MAX;
+    field public static final int _SC_IOV_MAX;
+    field public static final int _SC_JOB_CONTROL;
+    field public static final int _SC_LINE_MAX;
+    field public static final int _SC_LOGIN_NAME_MAX;
+    field public static final int _SC_MAPPED_FILES;
+    field public static final int _SC_MEMLOCK;
+    field public static final int _SC_MEMLOCK_RANGE;
+    field public static final int _SC_MEMORY_PROTECTION;
+    field public static final int _SC_MESSAGE_PASSING;
+    field public static final int _SC_MQ_OPEN_MAX;
+    field public static final int _SC_MQ_PRIO_MAX;
+    field public static final int _SC_NGROUPS_MAX;
+    field public static final int _SC_NPROCESSORS_CONF;
+    field public static final int _SC_NPROCESSORS_ONLN;
+    field public static final int _SC_OPEN_MAX;
+    field public static final int _SC_PAGESIZE;
+    field public static final int _SC_PAGE_SIZE;
+    field public static final int _SC_PASS_MAX;
+    field public static final int _SC_PHYS_PAGES;
+    field public static final int _SC_PRIORITIZED_IO;
+    field public static final int _SC_PRIORITY_SCHEDULING;
+    field public static final int _SC_REALTIME_SIGNALS;
+    field public static final int _SC_RE_DUP_MAX;
+    field public static final int _SC_RTSIG_MAX;
+    field public static final int _SC_SAVED_IDS;
+    field public static final int _SC_SEMAPHORES;
+    field public static final int _SC_SEM_NSEMS_MAX;
+    field public static final int _SC_SEM_VALUE_MAX;
+    field public static final int _SC_SHARED_MEMORY_OBJECTS;
+    field public static final int _SC_SIGQUEUE_MAX;
+    field public static final int _SC_STREAM_MAX;
+    field public static final int _SC_SYNCHRONIZED_IO;
+    field public static final int _SC_THREADS;
+    field public static final int _SC_THREAD_ATTR_STACKADDR;
+    field public static final int _SC_THREAD_ATTR_STACKSIZE;
+    field public static final int _SC_THREAD_DESTRUCTOR_ITERATIONS;
+    field public static final int _SC_THREAD_KEYS_MAX;
+    field public static final int _SC_THREAD_PRIORITY_SCHEDULING;
+    field public static final int _SC_THREAD_PRIO_INHERIT;
+    field public static final int _SC_THREAD_PRIO_PROTECT;
+    field public static final int _SC_THREAD_SAFE_FUNCTIONS;
+    field public static final int _SC_THREAD_STACK_MIN;
+    field public static final int _SC_THREAD_THREADS_MAX;
+    field public static final int _SC_TIMERS;
+    field public static final int _SC_TIMER_MAX;
+    field public static final int _SC_TTY_NAME_MAX;
+    field public static final int _SC_TZNAME_MAX;
+    field public static final int _SC_VERSION;
+    field public static final int _SC_XBS5_ILP32_OFF32;
+    field public static final int _SC_XBS5_ILP32_OFFBIG;
+    field public static final int _SC_XBS5_LP64_OFF64;
+    field public static final int _SC_XBS5_LPBIG_OFFBIG;
+    field public static final int _SC_XOPEN_CRYPT;
+    field public static final int _SC_XOPEN_ENH_I18N;
+    field public static final int _SC_XOPEN_LEGACY;
+    field public static final int _SC_XOPEN_REALTIME;
+    field public static final int _SC_XOPEN_REALTIME_THREADS;
+    field public static final int _SC_XOPEN_SHM;
+    field public static final int _SC_XOPEN_UNIX;
+    field public static final int _SC_XOPEN_VERSION;
+    field public static final int _SC_XOPEN_XCU_VERSION;
+  }
+
+  public final class StructCmsghdr {
+    ctor public StructCmsghdr(int, int, short);
+    ctor public StructCmsghdr(int, int, @NonNull byte[]);
+    field @NonNull public final byte[] cmsg_data;
+    field public final int cmsg_level;
+    field public final int cmsg_type;
+  }
+
+  public final class StructMsghdr {
+    ctor public StructMsghdr(@Nullable java.net.SocketAddress, @NonNull java.nio.ByteBuffer[], @Nullable android.system.StructCmsghdr[], int);
+    field @Nullable public android.system.StructCmsghdr[] msg_control;
+    field public int msg_flags;
+    field @NonNull public final java.nio.ByteBuffer[] msg_iov;
+    field @Nullable public java.net.SocketAddress msg_name;
+  }
+
+  public final class StructPollfd {
+    ctor public StructPollfd();
+    field public short events;
+    field public java.io.FileDescriptor fd;
+    field public short revents;
+    field public Object userData;
+  }
+
+  public final class StructStat {
+    ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+    ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+    field public final android.system.StructTimespec st_atim;
+    field public final long st_atime;
+    field public final long st_blksize;
+    field public final long st_blocks;
+    field public final android.system.StructTimespec st_ctim;
+    field public final long st_ctime;
+    field public final long st_dev;
+    field public final int st_gid;
+    field public final long st_ino;
+    field public final int st_mode;
+    field public final android.system.StructTimespec st_mtim;
+    field public final long st_mtime;
+    field public final long st_nlink;
+    field public final long st_rdev;
+    field public final long st_size;
+    field public final int st_uid;
+  }
+
+  public final class StructStatVfs {
+    ctor public StructStatVfs(long, long, long, long, long, long, long, long, long, long, long);
+    field public final long f_bavail;
+    field public final long f_bfree;
+    field public final long f_blocks;
+    field public final long f_bsize;
+    field public final long f_favail;
+    field public final long f_ffree;
+    field public final long f_files;
+    field public final long f_flag;
+    field public final long f_frsize;
+    field public final long f_fsid;
+    field public final long f_namemax;
+  }
+
+  public final class StructTimespec implements java.lang.Comparable<android.system.StructTimespec> {
+    ctor public StructTimespec(long, long);
+    method public int compareTo(android.system.StructTimespec);
+    field public final long tv_nsec;
+    field public final long tv_sec;
+  }
+
+  public final class StructTimeval {
+    method @NonNull public static android.system.StructTimeval fromMillis(long);
+    method public long toMillis();
+    field public final long tv_sec;
+    field public final long tv_usec;
+  }
+
+  public final class StructUtsname {
+    ctor public StructUtsname(String, String, String, String, String);
+    field public final String machine;
+    field public final String nodename;
+    field public final String release;
+    field public final String sysname;
+    field public final String version;
+  }
+
+}
+
+package android.telecom {
+
+  public final class Call {
+    method public void addConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void answer(int);
+    method public void conference(android.telecom.Call);
+    method public void deflect(android.net.Uri);
+    method public void disconnect();
+    method public java.util.List<java.lang.String> getCannedTextResponses();
+    method public java.util.List<android.telecom.Call> getChildren();
+    method public java.util.List<android.telecom.Call> getConferenceableCalls();
+    method public android.telecom.Call.Details getDetails();
+    method @Nullable public android.telecom.Call getGenericConferenceActiveChildCall();
+    method public android.telecom.Call getParent();
+    method public String getRemainingPostDialSequence();
+    method @Nullable public android.telecom.Call.RttCall getRttCall();
+    method @Deprecated public int getState();
+    method public android.telecom.InCallService.VideoCall getVideoCall();
+    method public void handoverTo(android.telecom.PhoneAccountHandle, int, android.os.Bundle);
+    method public void hold();
+    method public boolean isRttActive();
+    method public void mergeConference();
+    method public void phoneAccountSelected(android.telecom.PhoneAccountHandle, boolean);
+    method public void playDtmfTone(char);
+    method public void postDialContinue(boolean);
+    method public void pullExternalCall();
+    method public void putExtras(android.os.Bundle);
+    method public void registerCallback(android.telecom.Call.Callback);
+    method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
+    method public void reject(boolean, String);
+    method public void reject(int);
+    method public void removeExtras(java.util.List<java.lang.String>);
+    method public void removeExtras(java.lang.String...);
+    method public void respondToRttRequest(int, boolean);
+    method public void sendCallEvent(String, android.os.Bundle);
+    method public void sendRttRequest();
+    method public void splitFromConference();
+    method public void stopDtmfTone();
+    method public void stopRtt();
+    method public void swapConference();
+    method public void unhold();
+    method public void unregisterCallback(android.telecom.Call.Callback);
+    field @Deprecated public static final String AVAILABLE_PHONE_ACCOUNTS = "selectPhoneAccountAccounts";
+    field public static final String EVENT_CLEAR_DIAGNOSTIC_MESSAGE = "android.telecom.event.CLEAR_DIAGNOSTIC_MESSAGE";
+    field public static final String EVENT_DISPLAY_DIAGNOSTIC_MESSAGE = "android.telecom.event.DISPLAY_DIAGNOSTIC_MESSAGE";
+    field public static final String EXTRA_DIAGNOSTIC_MESSAGE = "android.telecom.extra.DIAGNOSTIC_MESSAGE";
+    field public static final String EXTRA_DIAGNOSTIC_MESSAGE_ID = "android.telecom.extra.DIAGNOSTIC_MESSAGE_ID";
+    field public static final String EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS = "android.telecom.extra.LAST_EMERGENCY_CALLBACK_TIME_MILLIS";
+    field public static final String EXTRA_SILENT_RINGING_REQUESTED = "android.telecom.extra.SILENT_RINGING_REQUESTED";
+    field public static final String EXTRA_SUGGESTED_PHONE_ACCOUNTS = "android.telecom.extra.SUGGESTED_PHONE_ACCOUNTS";
+    field public static final int REJECT_REASON_DECLINED = 1; // 0x1
+    field public static final int REJECT_REASON_UNWANTED = 2; // 0x2
+    field public static final int STATE_ACTIVE = 4; // 0x4
+    field public static final int STATE_AUDIO_PROCESSING = 12; // 0xc
+    field public static final int STATE_CONNECTING = 9; // 0x9
+    field public static final int STATE_DIALING = 1; // 0x1
+    field public static final int STATE_DISCONNECTED = 7; // 0x7
+    field public static final int STATE_DISCONNECTING = 10; // 0xa
+    field public static final int STATE_HOLDING = 3; // 0x3
+    field public static final int STATE_NEW = 0; // 0x0
+    field public static final int STATE_PULLING_CALL = 11; // 0xb
+    field public static final int STATE_RINGING = 2; // 0x2
+    field public static final int STATE_SELECT_PHONE_ACCOUNT = 8; // 0x8
+    field public static final int STATE_SIMULATED_RINGING = 13; // 0xd
+  }
+
+  public abstract static class Call.Callback {
+    ctor public Call.Callback();
+    method public void onCallDestroyed(android.telecom.Call);
+    method public void onCannedTextResponsesLoaded(android.telecom.Call, java.util.List<java.lang.String>);
+    method public void onChildrenChanged(android.telecom.Call, java.util.List<android.telecom.Call>);
+    method public void onConferenceableCallsChanged(android.telecom.Call, java.util.List<android.telecom.Call>);
+    method public void onConnectionEvent(android.telecom.Call, String, android.os.Bundle);
+    method public void onDetailsChanged(android.telecom.Call, android.telecom.Call.Details);
+    method public void onHandoverComplete(android.telecom.Call);
+    method public void onHandoverFailed(android.telecom.Call, int);
+    method public void onParentChanged(android.telecom.Call, android.telecom.Call);
+    method public void onPostDialWait(android.telecom.Call, String);
+    method public void onRttInitiationFailure(android.telecom.Call, int);
+    method public void onRttModeChanged(android.telecom.Call, int);
+    method public void onRttRequest(android.telecom.Call, int);
+    method public void onRttStatusChanged(android.telecom.Call, boolean, android.telecom.Call.RttCall);
+    method public void onStateChanged(android.telecom.Call, int);
+    method public void onVideoCallChanged(android.telecom.Call, android.telecom.InCallService.VideoCall);
+    field public static final int HANDOVER_FAILURE_DEST_APP_REJECTED = 1; // 0x1
+    field public static final int HANDOVER_FAILURE_NOT_SUPPORTED = 2; // 0x2
+    field public static final int HANDOVER_FAILURE_ONGOING_EMERGENCY_CALL = 4; // 0x4
+    field public static final int HANDOVER_FAILURE_UNKNOWN = 5; // 0x5
+    field public static final int HANDOVER_FAILURE_USER_REJECTED = 3; // 0x3
+  }
+
+  public static class Call.Details {
+    method public static boolean can(int, int);
+    method public boolean can(int);
+    method public static String capabilitiesToString(int);
+    method public android.telecom.PhoneAccountHandle getAccountHandle();
+    method public int getCallCapabilities();
+    method public int getCallDirection();
+    method public int getCallProperties();
+    method public String getCallerDisplayName();
+    method public int getCallerDisplayNamePresentation();
+    method public int getCallerNumberVerificationStatus();
+    method public final long getConnectTimeMillis();
+    method @Nullable public String getContactDisplayName();
+    method public long getCreationTimeMillis();
+    method public android.telecom.DisconnectCause getDisconnectCause();
+    method public android.os.Bundle getExtras();
+    method public android.telecom.GatewayInfo getGatewayInfo();
+    method public android.net.Uri getHandle();
+    method public int getHandlePresentation();
+    method public android.os.Bundle getIntentExtras();
+    method public final int getState();
+    method public android.telecom.StatusHints getStatusHints();
+    method public int getVideoState();
+    method public static boolean hasProperty(int, int);
+    method public boolean hasProperty(int);
+    method public static String propertiesToString(int);
+    field public static final int CAPABILITY_ADD_PARTICIPANT = 33554432; // 0x2000000
+    field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 4194304; // 0x400000
+    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_PULL_CALL = 8388608; // 0x800000
+    field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
+    field public static final int CAPABILITY_HOLD = 1; // 0x1
+    field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
+    field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4
+    field public static final int CAPABILITY_MUTE = 64; // 0x40
+    field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
+    field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL = 3072; // 0xc00
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_RX = 1024; // 0x400
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
+    field public static final int CAPABILITY_SUPPORT_DEFLECT = 16777216; // 0x1000000
+    field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
+    field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
+    field public static final int DIRECTION_INCOMING = 0; // 0x0
+    field public static final int DIRECTION_OUTGOING = 1; // 0x1
+    field public static final int DIRECTION_UNKNOWN = -1; // 0xffffffff
+    field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
+    field public static final int PROPERTY_CONFERENCE = 1; // 0x1
+    field public static final int PROPERTY_CROSS_SIM = 16384; // 0x4000
+    field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4
+    field public static final int PROPERTY_ENTERPRISE_CALL = 32; // 0x20
+    field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
+    field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 128; // 0x80
+    field public static final int PROPERTY_HIGH_DEF_AUDIO = 16; // 0x10
+    field public static final int PROPERTY_IS_ADHOC_CONFERENCE = 8192; // 0x2000
+    field public static final int PROPERTY_IS_EXTERNAL_CALL = 64; // 0x40
+    field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 2048; // 0x800
+    field public static final int PROPERTY_RTT = 1024; // 0x400
+    field public static final int PROPERTY_SELF_MANAGED = 256; // 0x100
+    field public static final int PROPERTY_VOIP_AUDIO_MODE = 4096; // 0x1000
+    field public static final int PROPERTY_WIFI = 8; // 0x8
+  }
+
+  public static final class Call.RttCall {
+    method public int getRttAudioMode();
+    method public String read();
+    method public String readImmediately() throws java.io.IOException;
+    method public void setRttMode(int);
+    method public void write(String) throws java.io.IOException;
+    field public static final int RTT_MODE_FULL = 1; // 0x1
+    field public static final int RTT_MODE_HCO = 2; // 0x2
+    field public static final int RTT_MODE_VCO = 3; // 0x3
+  }
+
+  public final class CallAudioState implements android.os.Parcelable {
+    ctor public CallAudioState(boolean, int, int);
+    method public static String audioRouteToString(int);
+    method public int describeContents();
+    method public android.bluetooth.BluetoothDevice getActiveBluetoothDevice();
+    method public int getRoute();
+    method public java.util.Collection<android.bluetooth.BluetoothDevice> getSupportedBluetoothDevices();
+    method public int getSupportedRouteMask();
+    method public boolean isMuted();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.CallAudioState> CREATOR;
+    field public static final int ROUTE_BLUETOOTH = 2; // 0x2
+    field public static final int ROUTE_EARPIECE = 1; // 0x1
+    field public static final int ROUTE_SPEAKER = 8; // 0x8
+    field public static final int ROUTE_WIRED_HEADSET = 4; // 0x4
+    field public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5
+  }
+
+  public abstract class CallRedirectionService extends android.app.Service {
+    ctor public CallRedirectionService();
+    method public final void cancelCall();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onPlaceCall(@NonNull android.net.Uri, @NonNull android.telecom.PhoneAccountHandle, boolean);
+    method public final boolean onUnbind(@NonNull android.content.Intent);
+    method public final void placeCallUnmodified();
+    method public final void redirectCall(@NonNull android.net.Uri, @NonNull android.telecom.PhoneAccountHandle, boolean);
+    field public static final String SERVICE_INTERFACE = "android.telecom.CallRedirectionService";
+  }
+
+  public abstract class CallScreeningService extends android.app.Service {
+    ctor public CallScreeningService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onScreenCall(@NonNull android.telecom.Call.Details);
+    method public final void respondToCall(@NonNull android.telecom.Call.Details, @NonNull android.telecom.CallScreeningService.CallResponse);
+    field public static final String SERVICE_INTERFACE = "android.telecom.CallScreeningService";
+  }
+
+  public static class CallScreeningService.CallResponse {
+    method public int getCallComposerAttachmentsToShow();
+    method public boolean getDisallowCall();
+    method public boolean getRejectCall();
+    method public boolean getSilenceCall();
+    method public boolean getSkipCallLog();
+    method public boolean getSkipNotification();
+    field public static final int CALL_COMPOSER_ATTACHMENT_LOCATION = 2; // 0x2
+    field public static final int CALL_COMPOSER_ATTACHMENT_PICTURE = 1; // 0x1
+    field public static final int CALL_COMPOSER_ATTACHMENT_PRIORITY = 8; // 0x8
+    field public static final int CALL_COMPOSER_ATTACHMENT_SUBJECT = 4; // 0x4
+  }
+
+  public static class CallScreeningService.CallResponse.Builder {
+    ctor public CallScreeningService.CallResponse.Builder();
+    method public android.telecom.CallScreeningService.CallResponse build();
+    method @NonNull public android.telecom.CallScreeningService.CallResponse.Builder setCallComposerAttachmentsToShow(int);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setDisallowCall(boolean);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setRejectCall(boolean);
+    method @NonNull public android.telecom.CallScreeningService.CallResponse.Builder setSilenceCall(boolean);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setSkipCallLog(boolean);
+    method public android.telecom.CallScreeningService.CallResponse.Builder setSkipNotification(boolean);
+  }
+
+  public abstract class Conference extends android.telecom.Conferenceable {
+    ctor public Conference(android.telecom.PhoneAccountHandle);
+    method public final boolean addConnection(android.telecom.Connection);
+    method @NonNull public static android.telecom.Conference createFailedConference(@NonNull android.telecom.DisconnectCause, @NonNull android.telecom.PhoneAccountHandle);
+    method public final void destroy();
+    method public final android.telecom.CallAudioState getCallAudioState();
+    method public final java.util.List<android.telecom.Connection> getConferenceableConnections();
+    method public final int getConnectionCapabilities();
+    method public final int getConnectionProperties();
+    method public final long getConnectionStartElapsedRealtimeMillis();
+    method @IntRange(from=0) public final long getConnectionTime();
+    method public final java.util.List<android.telecom.Connection> getConnections();
+    method public final android.telecom.DisconnectCause getDisconnectCause();
+    method public final android.os.Bundle getExtras();
+    method public final android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method public final int getState();
+    method public final android.telecom.StatusHints getStatusHints();
+    method public android.telecom.Connection.VideoProvider getVideoProvider();
+    method public int getVideoState();
+    method public final boolean isRingbackRequested();
+    method public void onAddConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void onAnswer(int);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
+    method public void onConnectionAdded(android.telecom.Connection);
+    method public void onDisconnect();
+    method public void onExtrasChanged(android.os.Bundle);
+    method public void onHold();
+    method public void onMerge(android.telecom.Connection);
+    method public void onMerge();
+    method public void onPlayDtmfTone(char);
+    method public void onReject();
+    method public void onSeparate(android.telecom.Connection);
+    method public void onStopDtmfTone();
+    method public void onSwap();
+    method public void onUnhold();
+    method public final void putExtras(@NonNull android.os.Bundle);
+    method public final void removeConnection(android.telecom.Connection);
+    method public final void removeExtras(java.util.List<java.lang.String>);
+    method public final void removeExtras(java.lang.String...);
+    method public void sendConferenceEvent(@NonNull String, @Nullable android.os.Bundle);
+    method public final void setActive();
+    method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
+    method public final void setConnectionCapabilities(int);
+    method public final void setConnectionProperties(int);
+    method @Deprecated public final void setConnectionStartElapsedRealTime(long);
+    method public final void setConnectionStartElapsedRealtimeMillis(long);
+    method public final void setConnectionTime(@IntRange(from=0) long);
+    method public final void setDialing();
+    method public final void setDisconnected(android.telecom.DisconnectCause);
+    method public final void setExtras(@Nullable android.os.Bundle);
+    method public final void setOnHold();
+    method public final void setRingbackRequested(boolean);
+    method public final void setRinging();
+    method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection, android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(android.telecom.Connection, int);
+    field public static final long CONNECT_TIME_NOT_SPECIFIED = 0L; // 0x0L
+  }
+
+  public abstract class Conferenceable {
+  }
+
+  public abstract class Connection extends android.telecom.Conferenceable {
+    ctor public Connection();
+    method public static String capabilitiesToString(int);
+    method public static android.telecom.Connection createCanceledConnection();
+    method public static android.telecom.Connection createFailedConnection(android.telecom.DisconnectCause);
+    method public final void destroy();
+    method public final android.net.Uri getAddress();
+    method public final int getAddressPresentation();
+    method public final boolean getAudioModeIsVoip();
+    method public final android.telecom.CallAudioState getCallAudioState();
+    method public final String getCallerDisplayName();
+    method public final int getCallerDisplayNamePresentation();
+    method public final int getCallerNumberVerificationStatus();
+    method public final android.telecom.Conference getConference();
+    method public final java.util.List<android.telecom.Conferenceable> getConferenceables();
+    method public final int getConnectionCapabilities();
+    method public final int getConnectionProperties();
+    method public final android.telecom.DisconnectCause getDisconnectCause();
+    method public final android.os.Bundle getExtras();
+    method public final int getState();
+    method public final android.telecom.StatusHints getStatusHints();
+    method public final android.telecom.Connection.VideoProvider getVideoProvider();
+    method public final int getVideoState();
+    method public void handleRttUpgradeResponse(@Nullable android.telecom.Connection.RttTextStream);
+    method public final boolean isRingbackRequested();
+    method public final void notifyConferenceMergeFailed();
+    method public void onAbort();
+    method public void onAddConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void onAnswer(int);
+    method public void onAnswer();
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
+    method public void onCallEvent(String, android.os.Bundle);
+    method public void onDeflect(android.net.Uri);
+    method public void onDisconnect();
+    method public void onExtrasChanged(android.os.Bundle);
+    method public void onHandoverComplete();
+    method public void onHold();
+    method public void onPlayDtmfTone(char);
+    method public void onPostDialContinue(boolean);
+    method public void onPullExternalCall();
+    method public void onReject();
+    method public void onReject(int);
+    method public void onReject(String);
+    method public void onSeparate();
+    method public void onShowIncomingCallUi();
+    method public void onSilence();
+    method public void onStartRtt(@NonNull android.telecom.Connection.RttTextStream);
+    method public void onStateChanged(int);
+    method public void onStopDtmfTone();
+    method public void onStopRtt();
+    method public void onTrackedByNonUiService(boolean);
+    method public void onUnhold();
+    method public void onUsingAlternativeUi(boolean);
+    method public static String propertiesToString(int);
+    method public final void putExtras(@NonNull android.os.Bundle);
+    method public final void removeExtras(java.util.List<java.lang.String>);
+    method public final void removeExtras(java.lang.String...);
+    method public void requestBluetoothAudio(@NonNull android.bluetooth.BluetoothDevice);
+    method public void sendConnectionEvent(String, android.os.Bundle);
+    method public final void sendRemoteRttRequest();
+    method public final void sendRttInitiationFailure(int);
+    method public final void sendRttInitiationSuccess();
+    method public final void sendRttSessionRemotelyTerminated();
+    method public final void setActive();
+    method public final void setAddress(android.net.Uri, int);
+    method public final void setAudioModeIsVoip(boolean);
+    method public final void setAudioRoute(int);
+    method public final void setCallerDisplayName(String, int);
+    method public final void setCallerNumberVerificationStatus(int);
+    method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
+    method public final void setConferenceables(java.util.List<android.telecom.Conferenceable>);
+    method public final void setConnectionCapabilities(int);
+    method public final void setConnectionProperties(int);
+    method public final void setDialing();
+    method public final void setDisconnected(android.telecom.DisconnectCause);
+    method public final void setExtras(@Nullable android.os.Bundle);
+    method public final void setInitialized();
+    method public final void setInitializing();
+    method public final void setNextPostDialChar(char);
+    method public final void setOnHold();
+    method public final void setPostDialWait(String);
+    method public final void setPulling();
+    method public final void setRingbackRequested(boolean);
+    method public final void setRinging();
+    method public final void setStatusHints(android.telecom.StatusHints);
+    method public final void setVideoProvider(android.telecom.Connection.VideoProvider);
+    method public final void setVideoState(int);
+    method public static String stateToString(int);
+    field public static final int AUDIO_CODEC_AMR = 1; // 0x1
+    field public static final int AUDIO_CODEC_AMR_WB = 2; // 0x2
+    field public static final int AUDIO_CODEC_EVRC = 4; // 0x4
+    field public static final int AUDIO_CODEC_EVRC_B = 5; // 0x5
+    field public static final int AUDIO_CODEC_EVRC_NW = 7; // 0x7
+    field public static final int AUDIO_CODEC_EVRC_WB = 6; // 0x6
+    field public static final int AUDIO_CODEC_EVS_FB = 20; // 0x14
+    field public static final int AUDIO_CODEC_EVS_NB = 17; // 0x11
+    field public static final int AUDIO_CODEC_EVS_SWB = 19; // 0x13
+    field public static final int AUDIO_CODEC_EVS_WB = 18; // 0x12
+    field public static final int AUDIO_CODEC_G711A = 13; // 0xd
+    field public static final int AUDIO_CODEC_G711AB = 15; // 0xf
+    field public static final int AUDIO_CODEC_G711U = 11; // 0xb
+    field public static final int AUDIO_CODEC_G722 = 14; // 0xe
+    field public static final int AUDIO_CODEC_G723 = 12; // 0xc
+    field public static final int AUDIO_CODEC_G729 = 16; // 0x10
+    field public static final int AUDIO_CODEC_GSM_EFR = 8; // 0x8
+    field public static final int AUDIO_CODEC_GSM_FR = 9; // 0x9
+    field public static final int AUDIO_CODEC_GSM_HR = 10; // 0xa
+    field public static final int AUDIO_CODEC_NONE = 0; // 0x0
+    field public static final int AUDIO_CODEC_QCELP13K = 3; // 0x3
+    field public static final int CAPABILITY_ADD_PARTICIPANT = 67108864; // 0x4000000
+    field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 8388608; // 0x800000
+    field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_PULL_CALL = 16777216; // 0x1000000
+    field public static final int CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION = 4194304; // 0x400000
+    field @Deprecated public static final int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 524288; // 0x80000
+    field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
+    field public static final int CAPABILITY_HOLD = 1; // 0x1
+    field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
+    field public static final int CAPABILITY_MERGE_CONFERENCE = 4; // 0x4
+    field public static final int CAPABILITY_MUTE = 64; // 0x40
+    field public static final int CAPABILITY_RESPOND_VIA_TEXT = 32; // 0x20
+    field public static final int CAPABILITY_SEPARATE_FROM_CONFERENCE = 4096; // 0x1000
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL = 768; // 0x300
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_RX = 256; // 0x100
+    field public static final int CAPABILITY_SUPPORTS_VT_LOCAL_TX = 512; // 0x200
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL = 3072; // 0xc00
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_RX = 1024; // 0x400
+    field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
+    field public static final int CAPABILITY_SUPPORT_DEFLECT = 33554432; // 0x2000000
+    field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
+    field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
+    field public static final String EVENT_CALL_HOLD_FAILED = "android.telecom.event.CALL_HOLD_FAILED";
+    field public static final String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";
+    field public static final String EVENT_CALL_PULL_FAILED = "android.telecom.event.CALL_PULL_FAILED";
+    field public static final String EVENT_CALL_REMOTELY_HELD = "android.telecom.event.CALL_REMOTELY_HELD";
+    field public static final String EVENT_CALL_REMOTELY_UNHELD = "android.telecom.event.CALL_REMOTELY_UNHELD";
+    field public static final String EVENT_CALL_SWITCH_FAILED = "android.telecom.event.CALL_SWITCH_FAILED";
+    field public static final String EVENT_MERGE_COMPLETE = "android.telecom.event.MERGE_COMPLETE";
+    field public static final String EVENT_MERGE_START = "android.telecom.event.MERGE_START";
+    field public static final String EVENT_ON_HOLD_TONE_END = "android.telecom.event.ON_HOLD_TONE_END";
+    field public static final String EVENT_ON_HOLD_TONE_START = "android.telecom.event.ON_HOLD_TONE_START";
+    field public static final String EVENT_RTT_AUDIO_INDICATION_CHANGED = "android.telecom.event.RTT_AUDIO_INDICATION_CHANGED";
+    field public static final String EXTRA_ANSWERING_DROPS_FG_CALL = "android.telecom.extra.ANSWERING_DROPS_FG_CALL";
+    field public static final String EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME = "android.telecom.extra.ANSWERING_DROPS_FG_CALL_APP_NAME";
+    field public static final String EXTRA_AUDIO_CODEC = "android.telecom.extra.AUDIO_CODEC";
+    field public static final String EXTRA_AUDIO_CODEC_BANDWIDTH_KHZ = "android.telecom.extra.AUDIO_CODEC_BANDWIDTH_KHZ";
+    field public static final String EXTRA_AUDIO_CODEC_BITRATE_KBPS = "android.telecom.extra.AUDIO_CODEC_BITRATE_KBPS";
+    field public static final String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
+    field public static final String EXTRA_CHILD_ADDRESS = "android.telecom.extra.CHILD_ADDRESS";
+    field public static final String EXTRA_IS_RTT_AUDIO_PRESENT = "android.telecom.extra.IS_RTT_AUDIO_PRESENT";
+    field public static final String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
+    field public static final String EXTRA_SIP_INVITE = "android.telecom.extra.SIP_INVITE";
+    field public static final int PROPERTY_ASSISTED_DIALING = 512; // 0x200
+    field public static final int PROPERTY_CROSS_SIM = 8192; // 0x2000
+    field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 32; // 0x20
+    field public static final int PROPERTY_HIGH_DEF_AUDIO = 4; // 0x4
+    field public static final int PROPERTY_IS_ADHOC_CONFERENCE = 4096; // 0x1000
+    field public static final int PROPERTY_IS_EXTERNAL_CALL = 16; // 0x10
+    field public static final int PROPERTY_IS_RTT = 256; // 0x100
+    field public static final int PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL = 1024; // 0x400
+    field public static final int PROPERTY_SELF_MANAGED = 128; // 0x80
+    field public static final int PROPERTY_WIFI = 8; // 0x8
+    field public static final int STATE_ACTIVE = 4; // 0x4
+    field public static final int STATE_DIALING = 3; // 0x3
+    field public static final int STATE_DISCONNECTED = 6; // 0x6
+    field public static final int STATE_HOLDING = 5; // 0x5
+    field public static final int STATE_INITIALIZING = 0; // 0x0
+    field public static final int STATE_NEW = 1; // 0x1
+    field public static final int STATE_PULLING_CALL = 7; // 0x7
+    field public static final int STATE_RINGING = 2; // 0x2
+    field public static final int VERIFICATION_STATUS_FAILED = 2; // 0x2
+    field public static final int VERIFICATION_STATUS_NOT_VERIFIED = 0; // 0x0
+    field public static final int VERIFICATION_STATUS_PASSED = 1; // 0x1
+  }
+
+  public static final class Connection.RttModifyStatus {
+    field public static final int SESSION_MODIFY_REQUEST_FAIL = 2; // 0x2
+    field public static final int SESSION_MODIFY_REQUEST_INVALID = 3; // 0x3
+    field public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE = 5; // 0x5
+    field public static final int SESSION_MODIFY_REQUEST_SUCCESS = 1; // 0x1
+    field public static final int SESSION_MODIFY_REQUEST_TIMED_OUT = 4; // 0x4
+  }
+
+  public static final class Connection.RttTextStream {
+    method public String read() throws java.io.IOException;
+    method public String readImmediately() throws java.io.IOException;
+    method public void write(String) throws java.io.IOException;
+  }
+
+  public abstract static class Connection.VideoProvider {
+    ctor public Connection.VideoProvider();
+    method public void changeCameraCapabilities(android.telecom.VideoProfile.CameraCapabilities);
+    method public void changePeerDimensions(int, int);
+    method public void changeVideoQuality(int);
+    method public void handleCallSessionEvent(int);
+    method public abstract void onRequestCameraCapabilities();
+    method public abstract void onRequestConnectionDataUsage();
+    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
+    method public abstract void onSetCamera(String);
+    method public abstract void onSetDeviceOrientation(int);
+    method public abstract void onSetDisplaySurface(android.view.Surface);
+    method public abstract void onSetPauseImage(android.net.Uri);
+    method public abstract void onSetPreviewSurface(android.view.Surface);
+    method public abstract void onSetZoom(float);
+    method public void receiveSessionModifyRequest(android.telecom.VideoProfile);
+    method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public void setCallDataUsage(long);
+    field public static final int SESSION_EVENT_CAMERA_FAILURE = 5; // 0x5
+    field public static final int SESSION_EVENT_CAMERA_PERMISSION_ERROR = 7; // 0x7
+    field public static final int SESSION_EVENT_CAMERA_READY = 6; // 0x6
+    field public static final int SESSION_EVENT_RX_PAUSE = 1; // 0x1
+    field public static final int SESSION_EVENT_RX_RESUME = 2; // 0x2
+    field public static final int SESSION_EVENT_TX_START = 3; // 0x3
+    field public static final int SESSION_EVENT_TX_STOP = 4; // 0x4
+    field public static final int SESSION_MODIFY_REQUEST_FAIL = 2; // 0x2
+    field public static final int SESSION_MODIFY_REQUEST_INVALID = 3; // 0x3
+    field public static final int SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE = 5; // 0x5
+    field public static final int SESSION_MODIFY_REQUEST_SUCCESS = 1; // 0x1
+    field public static final int SESSION_MODIFY_REQUEST_TIMED_OUT = 4; // 0x4
+  }
+
+  public final class ConnectionRequest implements android.os.Parcelable {
+    ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle);
+    ctor public ConnectionRequest(android.telecom.PhoneAccountHandle, android.net.Uri, android.os.Bundle, int);
+    method public int describeContents();
+    method public android.telecom.PhoneAccountHandle getAccountHandle();
+    method public android.net.Uri getAddress();
+    method public android.os.Bundle getExtras();
+    method @Nullable public java.util.List<android.net.Uri> getParticipants();
+    method public android.telecom.Connection.RttTextStream getRttTextStream();
+    method public int getVideoState();
+    method public boolean isAdhocConferenceCall();
+    method public boolean isRequestingRtt();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ConnectionRequest> CREATOR;
+  }
+
+  public abstract class ConnectionService extends android.app.Service {
+    ctor public ConnectionService();
+    method public final void addConference(android.telecom.Conference);
+    method public final void addExistingConnection(android.telecom.PhoneAccountHandle, android.telecom.Connection);
+    method public final void conferenceRemoteConnections(android.telecom.RemoteConnection, android.telecom.RemoteConnection);
+    method public final void connectionServiceFocusReleased();
+    method @Nullable public final android.telecom.RemoteConference createRemoteIncomingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
+    method @Nullable public final android.telecom.RemoteConnection createRemoteIncomingConnection(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method @Nullable public final android.telecom.RemoteConference createRemoteOutgoingConference(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
+    method @Nullable public final android.telecom.RemoteConnection createRemoteOutgoingConnection(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public final java.util.Collection<android.telecom.Conference> getAllConferences();
+    method public final java.util.Collection<android.telecom.Connection> getAllConnections();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public void onConference(android.telecom.Connection, android.telecom.Connection);
+    method public void onConnectionServiceFocusGained();
+    method public void onConnectionServiceFocusLost();
+    method @Nullable public android.telecom.Conference onCreateIncomingConference(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public void onCreateIncomingConferenceFailed(@Nullable android.telecom.PhoneAccountHandle, @Nullable android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateIncomingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public void onCreateIncomingConnectionFailed(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateIncomingHandoverConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method @Nullable public android.telecom.Conference onCreateOutgoingConference(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public void onCreateOutgoingConferenceFailed(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateOutgoingConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public void onCreateOutgoingConnectionFailed(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public android.telecom.Connection onCreateOutgoingHandoverConnection(android.telecom.PhoneAccountHandle, android.telecom.ConnectionRequest);
+    method public void onHandoverFailed(android.telecom.ConnectionRequest, int);
+    method public void onRemoteConferenceAdded(android.telecom.RemoteConference);
+    method public void onRemoteExistingConnectionAdded(android.telecom.RemoteConnection);
+    field public static final String SERVICE_INTERFACE = "android.telecom.ConnectionService";
+  }
+
+  public final class DisconnectCause implements android.os.Parcelable {
+    ctor public DisconnectCause(int);
+    ctor public DisconnectCause(int, String);
+    ctor public DisconnectCause(int, CharSequence, CharSequence, String);
+    ctor public DisconnectCause(int, CharSequence, CharSequence, String, int);
+    method public int describeContents();
+    method public int getCode();
+    method public CharSequence getDescription();
+    method public CharSequence getLabel();
+    method public String getReason();
+    method public int getTone();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ANSWERED_ELSEWHERE = 11; // 0xb
+    field public static final int BUSY = 7; // 0x7
+    field public static final int CALL_PULLED = 12; // 0xc
+    field public static final int CANCELED = 4; // 0x4
+    field public static final int CONNECTION_MANAGER_NOT_SUPPORTED = 10; // 0xa
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.DisconnectCause> CREATOR;
+    field public static final int ERROR = 1; // 0x1
+    field public static final int LOCAL = 2; // 0x2
+    field public static final int MISSED = 5; // 0x5
+    field public static final int OTHER = 9; // 0x9
+    field public static final String REASON_EMERGENCY_CALL_PLACED = "REASON_EMERGENCY_CALL_PLACED";
+    field public static final String REASON_EMULATING_SINGLE_CALL = "EMULATING_SINGLE_CALL";
+    field public static final String REASON_IMS_ACCESS_BLOCKED = "REASON_IMS_ACCESS_BLOCKED";
+    field public static final String REASON_WIFI_ON_BUT_WFC_OFF = "REASON_WIFI_ON_BUT_WFC_OFF";
+    field public static final int REJECTED = 6; // 0x6
+    field public static final int REMOTE = 3; // 0x3
+    field public static final int RESTRICTED = 8; // 0x8
+    field public static final int UNKNOWN = 0; // 0x0
+  }
+
+  public class GatewayInfo implements android.os.Parcelable {
+    ctor public GatewayInfo(String, android.net.Uri, android.net.Uri);
+    method public int describeContents();
+    method public android.net.Uri getGatewayAddress();
+    method public String getGatewayProviderPackageName();
+    method public android.net.Uri getOriginalAddress();
+    method public boolean isEmpty();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.GatewayInfo> CREATOR;
+  }
+
+  public abstract class InCallService extends android.app.Service {
+    ctor public InCallService();
+    method public final boolean canAddCall();
+    method public final android.telecom.CallAudioState getCallAudioState();
+    method public final java.util.List<android.telecom.Call> getCalls();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onBringToForeground(boolean);
+    method public void onCallAdded(android.telecom.Call);
+    method public void onCallAudioStateChanged(android.telecom.CallAudioState);
+    method public void onCallRemoved(android.telecom.Call);
+    method public void onCanAddCallChanged(boolean);
+    method public void onConnectionEvent(android.telecom.Call, String, android.os.Bundle);
+    method public void onSilenceRinger();
+    method public final void requestBluetoothAudio(@NonNull android.bluetooth.BluetoothDevice);
+    method public final void setAudioRoute(int);
+    method public final void setMuted(boolean);
+    field public static final String SERVICE_INTERFACE = "android.telecom.InCallService";
+  }
+
+  public abstract static class InCallService.VideoCall {
+    ctor public InCallService.VideoCall();
+    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback);
+    method public abstract void registerCallback(android.telecom.InCallService.VideoCall.Callback, android.os.Handler);
+    method public abstract void requestCallDataUsage();
+    method public abstract void requestCameraCapabilities();
+    method public abstract void sendSessionModifyRequest(android.telecom.VideoProfile);
+    method public abstract void sendSessionModifyResponse(android.telecom.VideoProfile);
+    method public abstract void setCamera(String);
+    method public abstract void setDeviceOrientation(int);
+    method public abstract void setDisplaySurface(android.view.Surface);
+    method public abstract void setPauseImage(android.net.Uri);
+    method public abstract void setPreviewSurface(android.view.Surface);
+    method public abstract void setZoom(float);
+    method public abstract void unregisterCallback(android.telecom.InCallService.VideoCall.Callback);
+  }
+
+  public abstract static class InCallService.VideoCall.Callback {
+    ctor public InCallService.VideoCall.Callback();
+    method public abstract void onCallDataUsageChanged(long);
+    method public abstract void onCallSessionEvent(int);
+    method public abstract void onCameraCapabilitiesChanged(android.telecom.VideoProfile.CameraCapabilities);
+    method public abstract void onPeerDimensionsChanged(int, int);
+    method public abstract void onSessionModifyRequestReceived(android.telecom.VideoProfile);
+    method public abstract void onSessionModifyResponseReceived(int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public abstract void onVideoQualityChanged(int);
+  }
+
+  public final class PhoneAccount implements android.os.Parcelable {
+    method public static android.telecom.PhoneAccount.Builder builder(android.telecom.PhoneAccountHandle, CharSequence);
+    method public int describeContents();
+    method public android.telecom.PhoneAccountHandle getAccountHandle();
+    method public android.net.Uri getAddress();
+    method public int getCapabilities();
+    method public android.os.Bundle getExtras();
+    method public int getHighlightColor();
+    method public android.graphics.drawable.Icon getIcon();
+    method public CharSequence getLabel();
+    method public CharSequence getShortDescription();
+    method public android.net.Uri getSubscriptionAddress();
+    method public java.util.List<java.lang.String> getSupportedUriSchemes();
+    method public boolean hasCapabilities(int);
+    method public boolean isEnabled();
+    method public boolean supportsUriScheme(String);
+    method public android.telecom.PhoneAccount.Builder toBuilder();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CAPABILITY_ADHOC_CONFERENCE_CALLING = 16384; // 0x4000
+    field public static final int CAPABILITY_CALL_COMPOSER = 32768; // 0x8000
+    field public static final int CAPABILITY_CALL_PROVIDER = 2; // 0x2
+    field public static final int CAPABILITY_CALL_SUBJECT = 64; // 0x40
+    field public static final int CAPABILITY_CONNECTION_MANAGER = 1; // 0x1
+    field public static final int CAPABILITY_PLACE_EMERGENCY_CALLS = 16; // 0x10
+    field public static final int CAPABILITY_RTT = 4096; // 0x1000
+    field public static final int CAPABILITY_SELF_MANAGED = 2048; // 0x800
+    field public static final int CAPABILITY_SIM_SUBSCRIPTION = 4; // 0x4
+    field public static final int CAPABILITY_SUPPORTS_VIDEO_CALLING = 1024; // 0x400
+    field public static final int CAPABILITY_VIDEO_CALLING = 8; // 0x8
+    field public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE = 256; // 0x100
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccount> CREATOR;
+    field public static final String EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE = "android.telecom.extra.ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE";
+    field public static final String EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE = "android.telecom.extra.ALWAYS_USE_VOIP_AUDIO_MODE";
+    field public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING = "android.telecom.extra.CALL_SUBJECT_CHARACTER_ENCODING";
+    field public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH = "android.telecom.extra.CALL_SUBJECT_MAX_LENGTH";
+    field public static final String EXTRA_LOG_SELF_MANAGED_CALLS = "android.telecom.extra.LOG_SELF_MANAGED_CALLS";
+    field public static final String EXTRA_SUPPORTS_HANDOVER_FROM = "android.telecom.extra.SUPPORTS_HANDOVER_FROM";
+    field public static final String EXTRA_SUPPORTS_HANDOVER_TO = "android.telecom.extra.SUPPORTS_HANDOVER_TO";
+    field public static final int NO_HIGHLIGHT_COLOR = 0; // 0x0
+    field public static final int NO_RESOURCE_ID = -1; // 0xffffffff
+    field public static final String SCHEME_SIP = "sip";
+    field public static final String SCHEME_TEL = "tel";
+    field public static final String SCHEME_VOICEMAIL = "voicemail";
+  }
+
+  public static class PhoneAccount.Builder {
+    ctor public PhoneAccount.Builder(android.telecom.PhoneAccountHandle, CharSequence);
+    ctor public PhoneAccount.Builder(android.telecom.PhoneAccount);
+    method public android.telecom.PhoneAccount.Builder addSupportedUriScheme(String);
+    method public android.telecom.PhoneAccount build();
+    method public android.telecom.PhoneAccount.Builder setAddress(android.net.Uri);
+    method public android.telecom.PhoneAccount.Builder setCapabilities(int);
+    method public android.telecom.PhoneAccount.Builder setExtras(android.os.Bundle);
+    method public android.telecom.PhoneAccount.Builder setHighlightColor(int);
+    method public android.telecom.PhoneAccount.Builder setIcon(android.graphics.drawable.Icon);
+    method public android.telecom.PhoneAccount.Builder setShortDescription(CharSequence);
+    method public android.telecom.PhoneAccount.Builder setSubscriptionAddress(android.net.Uri);
+    method public android.telecom.PhoneAccount.Builder setSupportedUriSchemes(java.util.List<java.lang.String>);
+  }
+
+  public final class PhoneAccountHandle implements android.os.Parcelable {
+    ctor public PhoneAccountHandle(@NonNull android.content.ComponentName, @NonNull String);
+    ctor public PhoneAccountHandle(@NonNull android.content.ComponentName, @NonNull String, @NonNull android.os.UserHandle);
+    method public int describeContents();
+    method public android.content.ComponentName getComponentName();
+    method public String getId();
+    method public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccountHandle> CREATOR;
+  }
+
+  public final class PhoneAccountSuggestion implements android.os.Parcelable {
+    ctor public PhoneAccountSuggestion(@NonNull android.telecom.PhoneAccountHandle, int, boolean);
+    method public int describeContents();
+    method @NonNull public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method public int getReason();
+    method public boolean shouldAutoSelect();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccountSuggestion> CREATOR;
+    field public static final int REASON_FREQUENT = 2; // 0x2
+    field public static final int REASON_INTRA_CARRIER = 1; // 0x1
+    field public static final int REASON_NONE = 0; // 0x0
+    field public static final int REASON_OTHER = 4; // 0x4
+    field public static final int REASON_USER_SET = 3; // 0x3
+  }
+
+  public final class RemoteConference {
+    method public void disconnect();
+    method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections();
+    method public int getConnectionCapabilities();
+    method public int getConnectionProperties();
+    method public java.util.List<android.telecom.RemoteConnection> getConnections();
+    method public android.telecom.DisconnectCause getDisconnectCause();
+    method public android.os.Bundle getExtras();
+    method public int getState();
+    method public void hold();
+    method public void merge();
+    method public void playDtmfTone(char);
+    method public void registerCallback(android.telecom.RemoteConference.Callback);
+    method public void registerCallback(android.telecom.RemoteConference.Callback, android.os.Handler);
+    method public void separate(android.telecom.RemoteConnection);
+    method public void setCallAudioState(android.telecom.CallAudioState);
+    method public void stopDtmfTone();
+    method public void swap();
+    method public void unhold();
+    method public void unregisterCallback(android.telecom.RemoteConference.Callback);
+  }
+
+  public abstract static class RemoteConference.Callback {
+    ctor public RemoteConference.Callback();
+    method public void onConferenceableConnectionsChanged(android.telecom.RemoteConference, java.util.List<android.telecom.RemoteConnection>);
+    method public void onConnectionAdded(android.telecom.RemoteConference, android.telecom.RemoteConnection);
+    method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConference, int);
+    method public void onConnectionPropertiesChanged(android.telecom.RemoteConference, int);
+    method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection);
+    method public void onDestroyed(android.telecom.RemoteConference);
+    method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause);
+    method public void onExtrasChanged(android.telecom.RemoteConference, @Nullable android.os.Bundle);
+    method public void onStateChanged(android.telecom.RemoteConference, int, int);
+  }
+
+  public final class RemoteConnection {
+    method public void abort();
+    method public void addConferenceParticipants(@NonNull java.util.List<android.net.Uri>);
+    method public void answer();
+    method public void disconnect();
+    method public android.net.Uri getAddress();
+    method public int getAddressPresentation();
+    method public CharSequence getCallerDisplayName();
+    method public int getCallerDisplayNamePresentation();
+    method public android.telecom.RemoteConference getConference();
+    method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections();
+    method public int getConnectionCapabilities();
+    method public int getConnectionProperties();
+    method public android.telecom.DisconnectCause getDisconnectCause();
+    method public android.os.Bundle getExtras();
+    method public int getState();
+    method public android.telecom.StatusHints getStatusHints();
+    method public android.telecom.RemoteConnection.VideoProvider getVideoProvider();
+    method public int getVideoState();
+    method public void hold();
+    method public boolean isRingbackRequested();
+    method public boolean isVoipAudioMode();
+    method public void playDtmfTone(char);
+    method public void postDialContinue(boolean);
+    method public void pullExternalCall();
+    method public void registerCallback(android.telecom.RemoteConnection.Callback);
+    method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
+    method public void reject();
+    method public void setCallAudioState(android.telecom.CallAudioState);
+    method public void stopDtmfTone();
+    method public void unhold();
+    method public void unregisterCallback(android.telecom.RemoteConnection.Callback);
+  }
+
+  public abstract static class RemoteConnection.Callback {
+    ctor public RemoteConnection.Callback();
+    method public void onAddressChanged(android.telecom.RemoteConnection, android.net.Uri, int);
+    method public void onCallerDisplayNameChanged(android.telecom.RemoteConnection, String, int);
+    method public void onConferenceChanged(android.telecom.RemoteConnection, android.telecom.RemoteConference);
+    method public void onConferenceableConnectionsChanged(android.telecom.RemoteConnection, java.util.List<android.telecom.RemoteConnection>);
+    method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int);
+    method public void onConnectionEvent(android.telecom.RemoteConnection, String, android.os.Bundle);
+    method public void onConnectionPropertiesChanged(android.telecom.RemoteConnection, int);
+    method public void onDestroyed(android.telecom.RemoteConnection);
+    method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause);
+    method public void onExtrasChanged(android.telecom.RemoteConnection, @Nullable android.os.Bundle);
+    method public void onPostDialChar(android.telecom.RemoteConnection, char);
+    method public void onPostDialWait(android.telecom.RemoteConnection, String);
+    method public void onRingbackRequested(android.telecom.RemoteConnection, boolean);
+    method public void onStateChanged(android.telecom.RemoteConnection, int);
+    method public void onStatusHintsChanged(android.telecom.RemoteConnection, android.telecom.StatusHints);
+    method public void onVideoProviderChanged(android.telecom.RemoteConnection, android.telecom.RemoteConnection.VideoProvider);
+    method public void onVideoStateChanged(android.telecom.RemoteConnection, int);
+    method public void onVoipAudioChanged(android.telecom.RemoteConnection, boolean);
+  }
+
+  public static class RemoteConnection.VideoProvider {
+    method public void registerCallback(android.telecom.RemoteConnection.VideoProvider.Callback);
+    method public void requestCallDataUsage();
+    method public void requestCameraCapabilities();
+    method public void sendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public void sendSessionModifyResponse(android.telecom.VideoProfile);
+    method public void setCamera(String);
+    method public void setDeviceOrientation(int);
+    method public void setDisplaySurface(android.view.Surface);
+    method public void setPauseImage(android.net.Uri);
+    method public void setPreviewSurface(android.view.Surface);
+    method public void setZoom(float);
+    method public void unregisterCallback(android.telecom.RemoteConnection.VideoProvider.Callback);
+  }
+
+  public abstract static class RemoteConnection.VideoProvider.Callback {
+    ctor public RemoteConnection.VideoProvider.Callback();
+    method public void onCallDataUsageChanged(android.telecom.RemoteConnection.VideoProvider, long);
+    method public void onCallSessionEvent(android.telecom.RemoteConnection.VideoProvider, int);
+    method public void onCameraCapabilitiesChanged(android.telecom.RemoteConnection.VideoProvider, android.telecom.VideoProfile.CameraCapabilities);
+    method public void onPeerDimensionsChanged(android.telecom.RemoteConnection.VideoProvider, int, int);
+    method public void onSessionModifyRequestReceived(android.telecom.RemoteConnection.VideoProvider, android.telecom.VideoProfile);
+    method public void onSessionModifyResponseReceived(android.telecom.RemoteConnection.VideoProvider, int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public void onVideoQualityChanged(android.telecom.RemoteConnection.VideoProvider, int);
+  }
+
+  public final class StatusHints implements android.os.Parcelable {
+    ctor public StatusHints(CharSequence, android.graphics.drawable.Icon, android.os.Bundle);
+    method public int describeContents();
+    method public android.os.Bundle getExtras();
+    method public android.graphics.drawable.Icon getIcon();
+    method public CharSequence getLabel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.StatusHints> CREATOR;
+  }
+
+  public class TelecomManager {
+    method public void acceptHandover(android.net.Uri, int, android.telecom.PhoneAccountHandle);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ANSWER_PHONE_CALLS, android.Manifest.permission.MODIFY_PHONE_STATE}) public void acceptRingingCall();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ANSWER_PHONE_CALLS, android.Manifest.permission.MODIFY_PHONE_STATE}) public void acceptRingingCall(int);
+    method public void addNewIncomingCall(android.telecom.PhoneAccountHandle, android.os.Bundle);
+    method public void addNewIncomingConference(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void cancelMissedCallsNotification();
+    method public android.content.Intent createManageBlockedNumbersIntent();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ANSWER_PHONE_CALLS) public boolean endCall();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.net.Uri getAdnUriForPhoneAccount(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts();
+    method public String getDefaultDialerPackage();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telecom.PhoneAccountHandle getDefaultOutgoingPhoneAccount(String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS}, conditional=true) public String getLine1Number(android.telecom.PhoneAccountHandle);
+    method public android.telecom.PhoneAccount getPhoneAccount(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getSelfManagedPhoneAccounts();
+    method public android.telecom.PhoneAccountHandle getSimCallManager();
+    method @Nullable public android.telecom.PhoneAccountHandle getSimCallManagerForSubscription(int);
+    method @Nullable public String getSystemDialerPackage();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telecom.PhoneAccountHandle getUserSelectedOutgoingPhoneAccount();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handleMmi(String, android.telecom.PhoneAccountHandle);
+    method public boolean hasManageOngoingCallsPermission();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isInCall();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isInManagedCall();
+    method public boolean isIncomingCallPermitted(android.telecom.PhoneAccountHandle);
+    method public boolean isOutgoingCallPermitted(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PHONE_STATE}) public boolean isTtySupported();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isVoiceMailNumber(android.telecom.PhoneAccountHandle, String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.CALL_PHONE, android.Manifest.permission.MANAGE_OWN_CALLS}) public void placeCall(android.net.Uri, android.os.Bundle);
+    method public void registerPhoneAccount(android.telecom.PhoneAccount);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void showInCallScreen(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void silenceRinger();
+    method @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void startConference(@NonNull java.util.List<android.net.Uri>, @NonNull android.os.Bundle);
+    method public void unregisterPhoneAccount(android.telecom.PhoneAccountHandle);
+    field public static final String ACTION_CHANGE_DEFAULT_DIALER = "android.telecom.action.CHANGE_DEFAULT_DIALER";
+    field public static final String ACTION_CHANGE_PHONE_ACCOUNTS = "android.telecom.action.CHANGE_PHONE_ACCOUNTS";
+    field public static final String ACTION_CONFIGURE_PHONE_ACCOUNT = "android.telecom.action.CONFIGURE_PHONE_ACCOUNT";
+    field public static final String ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED = "android.telecom.action.DEFAULT_CALL_SCREENING_APP_CHANGED";
+    field public static final String ACTION_DEFAULT_DIALER_CHANGED = "android.telecom.action.DEFAULT_DIALER_CHANGED";
+    field @Deprecated public static final String ACTION_INCOMING_CALL = "android.telecom.action.INCOMING_CALL";
+    field public static final String ACTION_PHONE_ACCOUNT_REGISTERED = "android.telecom.action.PHONE_ACCOUNT_REGISTERED";
+    field public static final String ACTION_PHONE_ACCOUNT_UNREGISTERED = "android.telecom.action.PHONE_ACCOUNT_UNREGISTERED";
+    field public static final String ACTION_POST_CALL = "android.telecom.action.POST_CALL";
+    field public static final String ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS = "android.telecom.action.SHOW_CALL_ACCESSIBILITY_SETTINGS";
+    field public static final String ACTION_SHOW_CALL_SETTINGS = "android.telecom.action.SHOW_CALL_SETTINGS";
+    field public static final String ACTION_SHOW_MISSED_CALLS_NOTIFICATION = "android.telecom.action.SHOW_MISSED_CALLS_NOTIFICATION";
+    field public static final String ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS = "android.telecom.action.SHOW_RESPOND_VIA_SMS_SETTINGS";
+    field public static final char DTMF_CHARACTER_PAUSE = 44; // 0x002c ','
+    field public static final char DTMF_CHARACTER_WAIT = 59; // 0x003b ';'
+    field public static final int DURATION_LONG = 3; // 0x3
+    field public static final int DURATION_MEDIUM = 2; // 0x2
+    field public static final int DURATION_SHORT = 1; // 0x1
+    field public static final int DURATION_VERY_SHORT = 0; // 0x0
+    field public static final String EXTRA_CALL_BACK_NUMBER = "android.telecom.extra.CALL_BACK_NUMBER";
+    field public static final String EXTRA_CALL_DISCONNECT_CAUSE = "android.telecom.extra.CALL_DISCONNECT_CAUSE";
+    field public static final String EXTRA_CALL_DISCONNECT_MESSAGE = "android.telecom.extra.CALL_DISCONNECT_MESSAGE";
+    field public static final String EXTRA_CALL_DURATION = "android.telecom.extra.CALL_DURATION";
+    field public static final String EXTRA_CALL_NETWORK_TYPE = "android.telecom.extra.CALL_NETWORK_TYPE";
+    field public static final String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
+    field public static final String EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME = "android.telecom.extra.CHANGE_DEFAULT_DIALER_PACKAGE_NAME";
+    field public static final String EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME = "android.telecom.extra.DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME";
+    field public static final String EXTRA_DISCONNECT_CAUSE = "android.telecom.extra.DISCONNECT_CAUSE";
+    field public static final String EXTRA_HANDLE = "android.telecom.extra.HANDLE";
+    field public static final String EXTRA_HAS_PICTURE = "android.telecom.extra.HAS_PICTURE";
+    field public static final String EXTRA_INCOMING_CALL_ADDRESS = "android.telecom.extra.INCOMING_CALL_ADDRESS";
+    field public static final String EXTRA_INCOMING_CALL_EXTRAS = "android.telecom.extra.INCOMING_CALL_EXTRAS";
+    field public static final String EXTRA_INCOMING_VIDEO_STATE = "android.telecom.extra.INCOMING_VIDEO_STATE";
+    field public static final String EXTRA_IS_DEFAULT_CALL_SCREENING_APP = "android.telecom.extra.IS_DEFAULT_CALL_SCREENING_APP";
+    field public static final String EXTRA_LOCATION = "android.telecom.extra.LOCATION";
+    field public static final String EXTRA_NOTIFICATION_COUNT = "android.telecom.extra.NOTIFICATION_COUNT";
+    field public static final String EXTRA_NOTIFICATION_PHONE_NUMBER = "android.telecom.extra.NOTIFICATION_PHONE_NUMBER";
+    field public static final String EXTRA_OUTGOING_CALL_EXTRAS = "android.telecom.extra.OUTGOING_CALL_EXTRAS";
+    field public static final String EXTRA_OUTGOING_PICTURE = "android.telecom.extra.OUTGOING_PICTURE";
+    field public static final String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telecom.extra.PHONE_ACCOUNT_HANDLE";
+    field public static final String EXTRA_PICTURE_URI = "android.telecom.extra.PICTURE_URI";
+    field public static final String EXTRA_PRIORITY = "android.telecom.extra.PRIORITY";
+    field public static final String EXTRA_START_CALL_WITH_RTT = "android.telecom.extra.START_CALL_WITH_RTT";
+    field public static final String EXTRA_START_CALL_WITH_SPEAKERPHONE = "android.telecom.extra.START_CALL_WITH_SPEAKERPHONE";
+    field public static final String EXTRA_START_CALL_WITH_VIDEO_STATE = "android.telecom.extra.START_CALL_WITH_VIDEO_STATE";
+    field public static final String EXTRA_USE_ASSISTED_DIALING = "android.telecom.extra.USE_ASSISTED_DIALING";
+    field public static final String GATEWAY_ORIGINAL_ADDRESS = "android.telecom.extra.GATEWAY_ORIGINAL_ADDRESS";
+    field public static final String GATEWAY_PROVIDER_PACKAGE = "android.telecom.extra.GATEWAY_PROVIDER_PACKAGE";
+    field public static final String METADATA_INCLUDE_EXTERNAL_CALLS = "android.telecom.INCLUDE_EXTERNAL_CALLS";
+    field public static final String METADATA_INCLUDE_SELF_MANAGED_CALLS = "android.telecom.INCLUDE_SELF_MANAGED_CALLS";
+    field public static final String METADATA_IN_CALL_SERVICE_CAR_MODE_UI = "android.telecom.IN_CALL_SERVICE_CAR_MODE_UI";
+    field public static final String METADATA_IN_CALL_SERVICE_RINGING = "android.telecom.IN_CALL_SERVICE_RINGING";
+    field public static final String METADATA_IN_CALL_SERVICE_UI = "android.telecom.IN_CALL_SERVICE_UI";
+    field public static final int PRESENTATION_ALLOWED = 1; // 0x1
+    field public static final int PRESENTATION_PAYPHONE = 4; // 0x4
+    field public static final int PRESENTATION_RESTRICTED = 2; // 0x2
+    field public static final int PRESENTATION_UNKNOWN = 3; // 0x3
+    field public static final int PRIORITY_NORMAL = 0; // 0x0
+    field public static final int PRIORITY_URGENT = 1; // 0x1
+  }
+
+  public class VideoProfile implements android.os.Parcelable {
+    ctor public VideoProfile(int);
+    ctor public VideoProfile(int, int);
+    method public int describeContents();
+    method public int getQuality();
+    method public int getVideoState();
+    method public static boolean isAudioOnly(int);
+    method public static boolean isBidirectional(int);
+    method public static boolean isPaused(int);
+    method public static boolean isReceptionEnabled(int);
+    method public static boolean isTransmissionEnabled(int);
+    method public static boolean isVideo(int);
+    method public static String videoStateToString(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.VideoProfile> CREATOR;
+    field public static final int QUALITY_DEFAULT = 4; // 0x4
+    field public static final int QUALITY_HIGH = 1; // 0x1
+    field public static final int QUALITY_LOW = 3; // 0x3
+    field public static final int QUALITY_MEDIUM = 2; // 0x2
+    field public static final int STATE_AUDIO_ONLY = 0; // 0x0
+    field public static final int STATE_BIDIRECTIONAL = 3; // 0x3
+    field public static final int STATE_PAUSED = 4; // 0x4
+    field public static final int STATE_RX_ENABLED = 2; // 0x2
+    field public static final int STATE_TX_ENABLED = 1; // 0x1
+  }
+
+  public static final class VideoProfile.CameraCapabilities implements android.os.Parcelable {
+    ctor public VideoProfile.CameraCapabilities(@IntRange(from=0) int, @IntRange(from=0) int);
+    ctor public VideoProfile.CameraCapabilities(@IntRange(from=0) int, @IntRange(from=0) int, boolean, @FloatRange(from=1.0f) float);
+    method public int describeContents();
+    method public int getHeight();
+    method public float getMaxZoom();
+    method public int getWidth();
+    method public boolean isZoomSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.VideoProfile.CameraCapabilities> CREATOR;
+  }
+
+}
+
+package android.telephony {
+
+  public final class AccessNetworkConstants {
+    field public static final int TRANSPORT_TYPE_WLAN = 2; // 0x2
+    field public static final int TRANSPORT_TYPE_WWAN = 1; // 0x1
+  }
+
+  public static final class AccessNetworkConstants.AccessNetworkType {
+    field public static final int CDMA2000 = 4; // 0x4
+    field public static final int EUTRAN = 3; // 0x3
+    field public static final int GERAN = 1; // 0x1
+    field public static final int IWLAN = 5; // 0x5
+    field public static final int NGRAN = 6; // 0x6
+    field public static final int UNKNOWN = 0; // 0x0
+    field public static final int UTRAN = 2; // 0x2
+  }
+
+  public static final class AccessNetworkConstants.EutranBand {
+    field public static final int BAND_1 = 1; // 0x1
+    field public static final int BAND_10 = 10; // 0xa
+    field public static final int BAND_11 = 11; // 0xb
+    field public static final int BAND_12 = 12; // 0xc
+    field public static final int BAND_13 = 13; // 0xd
+    field public static final int BAND_14 = 14; // 0xe
+    field public static final int BAND_17 = 17; // 0x11
+    field public static final int BAND_18 = 18; // 0x12
+    field public static final int BAND_19 = 19; // 0x13
+    field public static final int BAND_2 = 2; // 0x2
+    field public static final int BAND_20 = 20; // 0x14
+    field public static final int BAND_21 = 21; // 0x15
+    field public static final int BAND_22 = 22; // 0x16
+    field public static final int BAND_23 = 23; // 0x17
+    field public static final int BAND_24 = 24; // 0x18
+    field public static final int BAND_25 = 25; // 0x19
+    field public static final int BAND_26 = 26; // 0x1a
+    field public static final int BAND_27 = 27; // 0x1b
+    field public static final int BAND_28 = 28; // 0x1c
+    field public static final int BAND_3 = 3; // 0x3
+    field public static final int BAND_30 = 30; // 0x1e
+    field public static final int BAND_31 = 31; // 0x1f
+    field public static final int BAND_33 = 33; // 0x21
+    field public static final int BAND_34 = 34; // 0x22
+    field public static final int BAND_35 = 35; // 0x23
+    field public static final int BAND_36 = 36; // 0x24
+    field public static final int BAND_37 = 37; // 0x25
+    field public static final int BAND_38 = 38; // 0x26
+    field public static final int BAND_39 = 39; // 0x27
+    field public static final int BAND_4 = 4; // 0x4
+    field public static final int BAND_40 = 40; // 0x28
+    field public static final int BAND_41 = 41; // 0x29
+    field public static final int BAND_42 = 42; // 0x2a
+    field public static final int BAND_43 = 43; // 0x2b
+    field public static final int BAND_44 = 44; // 0x2c
+    field public static final int BAND_45 = 45; // 0x2d
+    field public static final int BAND_46 = 46; // 0x2e
+    field public static final int BAND_47 = 47; // 0x2f
+    field public static final int BAND_48 = 48; // 0x30
+    field public static final int BAND_49 = 49; // 0x31
+    field public static final int BAND_5 = 5; // 0x5
+    field public static final int BAND_50 = 50; // 0x32
+    field public static final int BAND_51 = 51; // 0x33
+    field public static final int BAND_52 = 52; // 0x34
+    field public static final int BAND_53 = 53; // 0x35
+    field public static final int BAND_6 = 6; // 0x6
+    field public static final int BAND_65 = 65; // 0x41
+    field public static final int BAND_66 = 66; // 0x42
+    field public static final int BAND_68 = 68; // 0x44
+    field public static final int BAND_7 = 7; // 0x7
+    field public static final int BAND_70 = 70; // 0x46
+    field public static final int BAND_71 = 71; // 0x47
+    field public static final int BAND_72 = 72; // 0x48
+    field public static final int BAND_73 = 73; // 0x49
+    field public static final int BAND_74 = 74; // 0x4a
+    field public static final int BAND_8 = 8; // 0x8
+    field public static final int BAND_85 = 85; // 0x55
+    field public static final int BAND_87 = 87; // 0x57
+    field public static final int BAND_88 = 88; // 0x58
+    field public static final int BAND_9 = 9; // 0x9
+  }
+
+  public static final class AccessNetworkConstants.GeranBand {
+    field public static final int BAND_450 = 3; // 0x3
+    field public static final int BAND_480 = 4; // 0x4
+    field public static final int BAND_710 = 5; // 0x5
+    field public static final int BAND_750 = 6; // 0x6
+    field public static final int BAND_850 = 8; // 0x8
+    field public static final int BAND_DCS1800 = 12; // 0xc
+    field public static final int BAND_E900 = 10; // 0xa
+    field public static final int BAND_ER900 = 14; // 0xe
+    field public static final int BAND_P900 = 9; // 0x9
+    field public static final int BAND_PCS1900 = 13; // 0xd
+    field public static final int BAND_R900 = 11; // 0xb
+    field public static final int BAND_T380 = 1; // 0x1
+    field public static final int BAND_T410 = 2; // 0x2
+    field public static final int BAND_T810 = 7; // 0x7
+  }
+
+  public static final class AccessNetworkConstants.NgranBands {
+    field public static final int BAND_1 = 1; // 0x1
+    field public static final int BAND_12 = 12; // 0xc
+    field public static final int BAND_14 = 14; // 0xe
+    field public static final int BAND_18 = 18; // 0x12
+    field public static final int BAND_2 = 2; // 0x2
+    field public static final int BAND_20 = 20; // 0x14
+    field public static final int BAND_25 = 25; // 0x19
+    field public static final int BAND_257 = 257; // 0x101
+    field public static final int BAND_258 = 258; // 0x102
+    field public static final int BAND_26 = 26; // 0x1a
+    field public static final int BAND_260 = 260; // 0x104
+    field public static final int BAND_261 = 261; // 0x105
+    field public static final int BAND_28 = 28; // 0x1c
+    field public static final int BAND_29 = 29; // 0x1d
+    field public static final int BAND_3 = 3; // 0x3
+    field public static final int BAND_30 = 30; // 0x1e
+    field public static final int BAND_34 = 34; // 0x22
+    field public static final int BAND_38 = 38; // 0x26
+    field public static final int BAND_39 = 39; // 0x27
+    field public static final int BAND_40 = 40; // 0x28
+    field public static final int BAND_41 = 41; // 0x29
+    field public static final int BAND_46 = 46; // 0x2e
+    field public static final int BAND_48 = 48; // 0x30
+    field public static final int BAND_5 = 5; // 0x5
+    field public static final int BAND_50 = 50; // 0x32
+    field public static final int BAND_51 = 51; // 0x33
+    field public static final int BAND_53 = 53; // 0x35
+    field public static final int BAND_65 = 65; // 0x41
+    field public static final int BAND_66 = 66; // 0x42
+    field public static final int BAND_7 = 7; // 0x7
+    field public static final int BAND_70 = 70; // 0x46
+    field public static final int BAND_71 = 71; // 0x47
+    field public static final int BAND_74 = 74; // 0x4a
+    field public static final int BAND_75 = 75; // 0x4b
+    field public static final int BAND_76 = 76; // 0x4c
+    field public static final int BAND_77 = 77; // 0x4d
+    field public static final int BAND_78 = 78; // 0x4e
+    field public static final int BAND_79 = 79; // 0x4f
+    field public static final int BAND_8 = 8; // 0x8
+    field public static final int BAND_80 = 80; // 0x50
+    field public static final int BAND_81 = 81; // 0x51
+    field public static final int BAND_82 = 82; // 0x52
+    field public static final int BAND_83 = 83; // 0x53
+    field public static final int BAND_84 = 84; // 0x54
+    field public static final int BAND_86 = 86; // 0x56
+    field public static final int BAND_89 = 89; // 0x59
+    field public static final int BAND_90 = 90; // 0x5a
+    field public static final int BAND_91 = 91; // 0x5b
+    field public static final int BAND_92 = 92; // 0x5c
+    field public static final int BAND_93 = 93; // 0x5d
+    field public static final int BAND_94 = 94; // 0x5e
+    field public static final int BAND_95 = 95; // 0x5f
+    field public static final int BAND_96 = 96; // 0x60
+  }
+
+  public static final class AccessNetworkConstants.UtranBand {
+    field public static final int BAND_1 = 1; // 0x1
+    field public static final int BAND_10 = 10; // 0xa
+    field public static final int BAND_11 = 11; // 0xb
+    field public static final int BAND_12 = 12; // 0xc
+    field public static final int BAND_13 = 13; // 0xd
+    field public static final int BAND_14 = 14; // 0xe
+    field public static final int BAND_19 = 19; // 0x13
+    field public static final int BAND_2 = 2; // 0x2
+    field public static final int BAND_20 = 20; // 0x14
+    field public static final int BAND_21 = 21; // 0x15
+    field public static final int BAND_22 = 22; // 0x16
+    field public static final int BAND_25 = 25; // 0x19
+    field public static final int BAND_26 = 26; // 0x1a
+    field public static final int BAND_3 = 3; // 0x3
+    field public static final int BAND_4 = 4; // 0x4
+    field public static final int BAND_5 = 5; // 0x5
+    field public static final int BAND_6 = 6; // 0x6
+    field public static final int BAND_7 = 7; // 0x7
+    field public static final int BAND_8 = 8; // 0x8
+    field public static final int BAND_9 = 9; // 0x9
+    field public static final int BAND_A = 101; // 0x65
+    field public static final int BAND_B = 102; // 0x66
+    field public static final int BAND_C = 103; // 0x67
+    field public static final int BAND_D = 104; // 0x68
+    field public static final int BAND_E = 105; // 0x69
+    field public static final int BAND_F = 106; // 0x6a
+  }
+
+  public final class AvailableNetworkInfo implements android.os.Parcelable {
+    ctor public AvailableNetworkInfo(int, int, @NonNull java.util.List<java.lang.String>, @NonNull java.util.List<java.lang.Integer>);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.Integer> getBands();
+    method @NonNull public java.util.List<java.lang.String> getMccMncs();
+    method public int getPriority();
+    method public int getSubId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.AvailableNetworkInfo> CREATOR;
+    field public static final int PRIORITY_HIGH = 1; // 0x1
+    field public static final int PRIORITY_LOW = 3; // 0x3
+    field public static final int PRIORITY_MED = 2; // 0x2
+  }
+
+  public final class BarringInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.telephony.BarringInfo.BarringServiceInfo getBarringServiceInfo(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BARRING_SERVICE_TYPE_CS_FALLBACK = 5; // 0x5
+    field public static final int BARRING_SERVICE_TYPE_CS_SERVICE = 0; // 0x0
+    field public static final int BARRING_SERVICE_TYPE_CS_VOICE = 2; // 0x2
+    field public static final int BARRING_SERVICE_TYPE_EMERGENCY = 8; // 0x8
+    field public static final int BARRING_SERVICE_TYPE_MMTEL_VIDEO = 7; // 0x7
+    field public static final int BARRING_SERVICE_TYPE_MMTEL_VOICE = 6; // 0x6
+    field public static final int BARRING_SERVICE_TYPE_MO_DATA = 4; // 0x4
+    field public static final int BARRING_SERVICE_TYPE_MO_SIGNALLING = 3; // 0x3
+    field public static final int BARRING_SERVICE_TYPE_PS_SERVICE = 1; // 0x1
+    field public static final int BARRING_SERVICE_TYPE_SMS = 9; // 0x9
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.BarringInfo> CREATOR;
+  }
+
+  public static final class BarringInfo.BarringServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getBarringType();
+    method public int getConditionalBarringFactor();
+    method public int getConditionalBarringTimeSeconds();
+    method public boolean isBarred();
+    method public boolean isConditionallyBarred();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BARRING_TYPE_CONDITIONAL = 1; // 0x1
+    field public static final int BARRING_TYPE_NONE = 0; // 0x0
+    field public static final int BARRING_TYPE_UNCONDITIONAL = 2; // 0x2
+    field public static final int BARRING_TYPE_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.BarringInfo.BarringServiceInfo> CREATOR;
+  }
+
+  public class CarrierConfigManager {
+    method @Nullable public android.os.PersistableBundle getConfig();
+    method @Nullable public android.os.PersistableBundle getConfigByComponentForSubId(@NonNull String, int);
+    method @Nullable public android.os.PersistableBundle getConfigForSubId(int);
+    method public static boolean isConfigForIdentifiedCarrier(android.os.PersistableBundle);
+    method public void notifyConfigChangedForSubId(int);
+    field public static final String ACTION_CARRIER_CONFIG_CHANGED = "android.telephony.action.CARRIER_CONFIG_CHANGED";
+    field public static final int CARRIER_NR_AVAILABILITY_NSA = 1; // 0x1
+    field public static final int CARRIER_NR_AVAILABILITY_SA = 2; // 0x2
+    field public static final int CROSS_SIM_SPN_FORMAT_CARRIER_NAME_ONLY = 0; // 0x0
+    field public static final int CROSS_SIM_SPN_FORMAT_CARRIER_NAME_WITH_BRANDING = 1; // 0x1
+    field public static final int DATA_CYCLE_THRESHOLD_DISABLED = -2; // 0xfffffffe
+    field public static final int DATA_CYCLE_USE_PLATFORM_DEFAULT = -1; // 0xffffffff
+    field public static final String ENABLE_EAP_METHOD_PREFIX_BOOL = "enable_eap_method_prefix_bool";
+    field public static final String EXTRA_REBROADCAST_ON_UNLOCK = "android.telephony.extra.REBROADCAST_ON_UNLOCK";
+    field public static final String EXTRA_SLOT_INDEX = "android.telephony.extra.SLOT_INDEX";
+    field public static final String EXTRA_SUBSCRIPTION_INDEX = "android.telephony.extra.SUBSCRIPTION_INDEX";
+    field public static final String IMSI_KEY_AVAILABILITY_INT = "imsi_key_availability_int";
+    field public static final String KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY = "5g_nr_ssrsrp_thresholds_int_array";
+    field public static final String KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY = "5g_nr_ssrsrq_thresholds_int_array";
+    field public static final String KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY = "5g_nr_sssinr_thresholds_int_array";
+    field public static final String KEY_ADDITIONAL_CALL_SETTING_BOOL = "additional_call_setting_bool";
+    field public static final String KEY_ALLOW_ADDING_APNS_BOOL = "allow_adding_apns_bool";
+    field public static final String KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL = "allow_add_call_during_video_call";
+    field public static final String KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
+    field public static final String KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL = "allow_emergency_video_calls_bool";
+    field public static final String KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL = "allow_hold_call_during_emergency_bool";
+    field public static final String KEY_ALLOW_HOLD_VIDEO_CALL_BOOL = "allow_hold_video_call_bool";
+    field public static final String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
+    field public static final String KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL = "allow_merge_wifi_calls_when_vowifi_off_bool";
+    field public static final String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
+    field public static final String KEY_ALLOW_VIDEO_CALLING_FALLBACK_BOOL = "allow_video_calling_fallback_bool";
+    field public static final String KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL = "always_show_data_rat_icon_bool";
+    field @Deprecated public static final String KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL = "always_show_emergency_alert_onoff_bool";
+    field public static final String KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN = "always_show_primary_signal_bar_in_opportunistic_network_boolean";
+    field public static final String KEY_APN_EXPAND_BOOL = "apn_expand_bool";
+    field public static final String KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY = "apn_settings_default_apn_types_string_array";
+    field public static final String KEY_AUTO_RETRY_ENABLED_BOOL = "auto_retry_enabled_bool";
+    field public static final String KEY_CALL_BARRING_DEFAULT_SERVICE_CLASS_INT = "call_barring_default_service_class_int";
+    field public static final String KEY_CALL_BARRING_SUPPORTS_DEACTIVATE_ALL_BOOL = "call_barring_supports_deactivate_all_bool";
+    field public static final String KEY_CALL_BARRING_SUPPORTS_PASSWORD_CHANGE_BOOL = "call_barring_supports_password_change_bool";
+    field public static final String KEY_CALL_BARRING_VISIBILITY_BOOL = "call_barring_visibility_bool";
+    field public static final String KEY_CALL_COMPOSER_PICTURE_SERVER_URL_STRING = "call_composer_picture_server_url_string";
+    field public static final String KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY = "call_forwarding_blocks_while_roaming_string_array";
+    field public static final String KEY_CALL_REDIRECTION_SERVICE_COMPONENT_NAME_STRING = "call_redirection_service_component_name_string";
+    field public static final String KEY_CARRIER_ALLOW_DEFLECT_IMS_CALL_BOOL = "carrier_allow_deflect_ims_call_bool";
+    field public static final String KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL = "carrier_allow_turnoff_ims_bool";
+    field public static final String KEY_CARRIER_APP_REQUIRED_DURING_SIM_SETUP_BOOL = "carrier_app_required_during_setup_bool";
+    field public static final String KEY_CARRIER_CALL_SCREENING_APP_STRING = "call_screening_app";
+    field public static final String KEY_CARRIER_CERTIFICATE_STRING_ARRAY = "carrier_certificate_string_array";
+    field public static final String KEY_CARRIER_CONFIG_APPLIED_BOOL = "carrier_config_applied_bool";
+    field public static final String KEY_CARRIER_CONFIG_VERSION_STRING = "carrier_config_version_string";
+    field public static final String KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL = "carrier_cross_sim_ims_available_bool";
+    field public static final String KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS = "carrier_data_call_permanent_failure_strings";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY = "carrier_default_actions_on_dcfailure_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DEFAULT_NETWORK_AVAILABLE = "carrier_default_actions_on_default_network_available_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY = "carrier_default_actions_on_redirection_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_RESET = "carrier_default_actions_on_reset_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_REDIRECTION_URL_STRING_ARRAY = "carrier_default_redirection_url_string_array";
+    field public static final String KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL = "carrier_default_wfc_ims_enabled_bool";
+    field public static final String KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT = "carrier_default_wfc_ims_mode_int";
+    field public static final String KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT = "carrier_default_wfc_ims_roaming_mode_int";
+    field @Deprecated public static final String KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL = "carrier_force_disable_etws_cmas_test_bool";
+    field public static final String KEY_CARRIER_IMS_GBA_REQUIRED_BOOL = "carrier_ims_gba_required_bool";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL = "carrier_instant_lettering_available_bool";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING = "carrier_instant_lettering_encoding_string";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING = "carrier_instant_lettering_escaped_chars_string";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING = "carrier_instant_lettering_invalid_chars_string";
+    field public static final String KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT = "carrier_instant_lettering_length_limit_int";
+    field public static final String KEY_CARRIER_NAME_OVERRIDE_BOOL = "carrier_name_override_bool";
+    field public static final String KEY_CARRIER_NAME_STRING = "carrier_name_string";
+    field public static final String KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY = "carrier_nr_availabilities_int_array";
+    field public static final String KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL = "carrier_provisions_wifi_merged_networks_bool";
+    field public static final String KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL = "carrier_rcs_provisioning_required_bool";
+    field public static final String KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING = "carrier_settings_activity_component_name_string";
+    field public static final String KEY_CARRIER_SETTINGS_ENABLE_BOOL = "carrier_settings_enable_bool";
+    field public static final String KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL = "carrier_supports_ss_over_ut_bool";
+    field public static final String KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL = "carrier_use_ims_first_for_emergency_bool";
+    field public static final String KEY_CARRIER_USSD_METHOD_INT = "carrier_ussd_method_int";
+    field public static final String KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL = "carrier_ut_provisioning_required_bool";
+    field public static final String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
+    field public static final String KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL = "carrier_volte_override_wfc_provisioning_bool";
+    field public static final String KEY_CARRIER_VOLTE_PROVISIONED_BOOL = "carrier_volte_provisioned_bool";
+    field public static final String KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL = "carrier_volte_provisioning_required_bool";
+    field public static final String KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL = "carrier_volte_tty_supported_bool";
+    field public static final String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
+    field @Deprecated public static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING = "carrier_vvm_package_name_string";
+    field public static final String KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY = "carrier_vvm_package_name_string_array";
+    field public static final String KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL = "carrier_wfc_ims_available_bool";
+    field public static final String KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL = "carrier_wfc_supports_wifi_only_bool";
+    field public static final String KEY_CDMA_3WAYCALL_FLASH_DELAY_INT = "cdma_3waycall_flash_delay_int";
+    field public static final String KEY_CDMA_DTMF_TONE_DELAY_INT = "cdma_dtmf_tone_delay_int";
+    field public static final String KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY = "cdma_nonroaming_networks_string_array";
+    field public static final String KEY_CDMA_ROAMING_MODE_INT = "cdma_roaming_mode_int";
+    field public static final String KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY = "cdma_roaming_networks_string_array";
+    field public static final String KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL = "check_pricing_with_carrier_data_roaming_bool";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_BOOL = "ci_action_on_sys_update_bool";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING = "ci_action_on_sys_update_extra_string";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING = "ci_action_on_sys_update_extra_val_string";
+    field public static final String KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING = "ci_action_on_sys_update_intent_string";
+    field public static final String KEY_CONFIG_IMS_MMTEL_PACKAGE_OVERRIDE_STRING = "config_ims_mmtel_package_override_string";
+    field @Deprecated public static final String KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING = "config_ims_package_override_string";
+    field public static final String KEY_CONFIG_IMS_RCS_PACKAGE_OVERRIDE_STRING = "config_ims_rcs_package_override_string";
+    field public static final String KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING = "config_plans_package_override_string";
+    field public static final String KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL = "config_telephony_use_own_number_for_voicemail_bool";
+    field public static final String KEY_CONFIG_WIFI_DISABLE_IN_ECBM = "config_wifi_disable_in_ecbm";
+    field public static final String KEY_CROSS_SIM_SPN_FORMAT_INT = "cross_sim_spn_format_int";
+    field public static final String KEY_CSP_ENABLED_BOOL = "csp_enabled_bool";
+    field public static final String KEY_DATA_LIMIT_NOTIFICATION_BOOL = "data_limit_notification_bool";
+    field public static final String KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG = "data_limit_threshold_bytes_long";
+    field public static final String KEY_DATA_RAPID_NOTIFICATION_BOOL = "data_rapid_notification_bool";
+    field public static final String KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG = "data_switch_validation_timeout_long";
+    field public static final String KEY_DATA_WARNING_NOTIFICATION_BOOL = "data_warning_notification_bool";
+    field public static final String KEY_DATA_WARNING_THRESHOLD_BYTES_LONG = "data_warning_threshold_bytes_long";
+    field public static final String KEY_DEFAULT_SIM_CALL_MANAGER_STRING = "default_sim_call_manager_string";
+    field public static final String KEY_DEFAULT_VM_NUMBER_ROAMING_AND_IMS_UNREGISTERED_STRING = "default_vm_number_roaming_and_ims_unregistered_string";
+    field public static final String KEY_DEFAULT_VM_NUMBER_STRING = "default_vm_number_string";
+    field public static final String KEY_DIAL_STRING_REPLACE_STRING_ARRAY = "dial_string_replace_string_array";
+    field public static final String KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
+    field public static final String KEY_DISABLE_CHARGE_INDICATION_BOOL = "disable_charge_indication_bool";
+    field public static final String KEY_DISABLE_SUPPLEMENTARY_SERVICES_IN_AIRPLANE_MODE_BOOL = "disable_supplementary_services_in_airplane_mode_bool";
+    field public static final String KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY = "disconnect_cause_play_busytone_int_array";
+    field public static final String KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL = "display_call_strength_indicator_bool";
+    field public static final String KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL = "display_hd_audio_property_bool";
+    field public static final String KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL = "drop_video_call_when_answering_audio_call_bool";
+    field public static final String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
+    field public static final String KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT = "duration_blocking_disabled_after_emergency_int";
+    field public static final String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
+    field public static final String KEY_EDITABLE_VOICEMAIL_NUMBER_BOOL = "editable_voicemail_number_bool";
+    field public static final String KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL = "editable_voicemail_number_setting_bool";
+    field public static final String KEY_EDITABLE_WFC_MODE_BOOL = "editable_wfc_mode_bool";
+    field public static final String KEY_EDITABLE_WFC_ROAMING_MODE_BOOL = "editable_wfc_roaming_mode_bool";
+    field public static final String KEY_EMERGENCY_NOTIFICATION_DELAY_INT = "emergency_notification_delay_int";
+    field public static final String KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY = "emergency_number_prefix_string_array";
+    field public static final String KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL = "enable_dialer_key_vibration_bool";
+    field public static final String KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL = "enhanced_4g_lte_on_by_default_bool";
+    field public static final String KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT = "enhanced_4g_lte_title_variant_int";
+    field public static final String KEY_FORCE_HOME_NETWORK_BOOL = "force_home_network_bool";
+    field public static final String KEY_GSM_DTMF_TONE_DELAY_INT = "gsm_dtmf_tone_delay_int";
+    field public static final String KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY = "gsm_nonroaming_networks_string_array";
+    field public static final String KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY = "gsm_roaming_networks_string_array";
+    field public static final String KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL = "has_in_call_noise_suppression_bool";
+    field public static final String KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL = "hide_carrier_network_settings_bool";
+    field public static final String KEY_HIDE_ENABLE_2G = "hide_enable_2g_bool";
+    field public static final String KEY_HIDE_ENHANCED_4G_LTE_BOOL = "hide_enhanced_4g_lte_bool";
+    field public static final String KEY_HIDE_IMS_APN_BOOL = "hide_ims_apn_bool";
+    field public static final String KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL = "hide_lte_plus_data_icon_bool";
+    field public static final String KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL = "hide_preferred_network_type_bool";
+    field public static final String KEY_HIDE_PRESET_APN_DETAILS_BOOL = "hide_preset_apn_details_bool";
+    field public static final String KEY_HIDE_SIM_LOCK_SETTINGS_BOOL = "hide_sim_lock_settings_bool";
+    field public static final String KEY_HIDE_TTY_HCO_VCO_WITH_RTT_BOOL = "hide_tty_hco_vco_with_rtt";
+    field public static final String KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS = "ignore_data_enabled_changed_for_video_calls";
+    field public static final String KEY_IGNORE_RTT_MODE_SETTING_BOOL = "ignore_rtt_mode_setting_bool";
+    field public static final String KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL = "ignore_sim_network_locked_events_bool";
+    field public static final String KEY_IMS_CONFERENCE_SIZE_LIMIT_INT = "ims_conference_size_limit_int";
+    field public static final String KEY_IMS_DTMF_TONE_DELAY_INT = "ims_dtmf_tone_delay_int";
+    field public static final String KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL = "is_ims_conference_size_enforced_bool";
+    field public static final String KEY_LTE_ENABLED_BOOL = "lte_enabled_bool";
+    field public static final String KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY = "lte_rsrq_thresholds_int_array";
+    field public static final String KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY = "lte_rssnr_thresholds_int_array";
+    field public static final String KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL = "mdn_is_additional_voicemail_number_bool";
+    field public static final String KEY_MMS_ALIAS_ENABLED_BOOL = "aliasEnabled";
+    field public static final String KEY_MMS_ALIAS_MAX_CHARS_INT = "aliasMaxChars";
+    field public static final String KEY_MMS_ALIAS_MIN_CHARS_INT = "aliasMinChars";
+    field public static final String KEY_MMS_ALLOW_ATTACH_AUDIO_BOOL = "allowAttachAudio";
+    field public static final String KEY_MMS_APPEND_TRANSACTION_ID_BOOL = "enabledTransID";
+    field public static final String KEY_MMS_CLOSE_CONNECTION_BOOL = "mmsCloseConnection";
+    field public static final String KEY_MMS_EMAIL_GATEWAY_NUMBER_STRING = "emailGatewayNumber";
+    field public static final String KEY_MMS_GROUP_MMS_ENABLED_BOOL = "enableGroupMms";
+    field public static final String KEY_MMS_HTTP_PARAMS_STRING = "httpParams";
+    field public static final String KEY_MMS_HTTP_SOCKET_TIMEOUT_INT = "httpSocketTimeout";
+    field public static final String KEY_MMS_MAX_IMAGE_HEIGHT_INT = "maxImageHeight";
+    field public static final String KEY_MMS_MAX_IMAGE_WIDTH_INT = "maxImageWidth";
+    field public static final String KEY_MMS_MAX_MESSAGE_SIZE_INT = "maxMessageSize";
+    field public static final String KEY_MMS_MESSAGE_TEXT_MAX_SIZE_INT = "maxMessageTextSize";
+    field public static final String KEY_MMS_MMS_DELIVERY_REPORT_ENABLED_BOOL = "enableMMSDeliveryReports";
+    field public static final String KEY_MMS_MMS_ENABLED_BOOL = "enabledMMS";
+    field public static final String KEY_MMS_MMS_READ_REPORT_ENABLED_BOOL = "enableMMSReadReports";
+    field public static final String KEY_MMS_MULTIPART_SMS_ENABLED_BOOL = "enableMultipartSMS";
+    field public static final String KEY_MMS_NAI_SUFFIX_STRING = "naiSuffix";
+    field public static final String KEY_MMS_NOTIFY_WAP_MMSC_ENABLED_BOOL = "enabledNotifyWapMMSC";
+    field public static final String KEY_MMS_RECIPIENT_LIMIT_INT = "recipientLimit";
+    field public static final String KEY_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_BOOL = "sendMultipartSmsAsSeparateMessages";
+    field public static final String KEY_MMS_SHOW_CELL_BROADCAST_APP_LINKS_BOOL = "config_cellBroadcastAppLinks";
+    field public static final String KEY_MMS_SMS_DELIVERY_REPORT_ENABLED_BOOL = "enableSMSDeliveryReports";
+    field public static final String KEY_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_INT = "smsToMmsTextLengthThreshold";
+    field public static final String KEY_MMS_SMS_TO_MMS_TEXT_THRESHOLD_INT = "smsToMmsTextThreshold";
+    field public static final String KEY_MMS_SUBJECT_MAX_LENGTH_INT = "maxSubjectLength";
+    field public static final String KEY_MMS_SUPPORT_HTTP_CHARSET_HEADER_BOOL = "supportHttpCharsetHeader";
+    field public static final String KEY_MMS_SUPPORT_MMS_CONTENT_DISPOSITION_BOOL = "supportMmsContentDisposition";
+    field public static final String KEY_MMS_UA_PROF_TAG_NAME_STRING = "uaProfTagName";
+    field public static final String KEY_MMS_UA_PROF_URL_STRING = "uaProfUrl";
+    field public static final String KEY_MMS_USER_AGENT_STRING = "userAgent";
+    field public static final String KEY_MONTHLY_DATA_CYCLE_DAY_INT = "monthly_data_cycle_day_int";
+    field public static final String KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL = "only_auto_select_in_home_network";
+    field public static final String KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY = "only_single_dc_allowed_int_array";
+    field public static final String KEY_OPERATOR_SELECTION_EXPAND_BOOL = "operator_selection_expand_bool";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_BACKOFF_TIME_LONG = "opportunistic_network_backoff_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG = "opportunistic_network_data_switch_exit_hysteresis_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG = "opportunistic_network_data_switch_hysteresis_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG = "opportunistic_network_entry_or_exit_hysteresis_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_BANDWIDTH_INT = "opportunistic_network_entry_threshold_bandwidth_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSRP_INT = "opportunistic_network_entry_threshold_rsrp_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSSNR_INT = "opportunistic_network_entry_threshold_rssnr_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSRP_INT = "opportunistic_network_exit_threshold_rsrp_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSSNR_INT = "opportunistic_network_exit_threshold_rssnr_int";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_MAX_BACKOFF_TIME_LONG = "opportunistic_network_max_backoff_time_long";
+    field public static final String KEY_OPPORTUNISTIC_NETWORK_PING_PONG_TIME_LONG = "opportunistic_network_ping_pong_time_long";
+    field public static final String KEY_PING_TEST_BEFORE_DATA_SWITCH_BOOL = "ping_test_before_data_switch_bool";
+    field public static final String KEY_PREFER_2G_BOOL = "prefer_2g_bool";
+    field public static final String KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL = "prevent_clir_activation_and_deactivation_code_bool";
+    field public static final String KEY_RADIO_RESTART_FAILURE_CAUSES_INT_ARRAY = "radio_restart_failure_causes_int_array";
+    field public static final String KEY_RCS_CONFIG_SERVER_URL_STRING = "rcs_config_server_url_string";
+    field public static final String KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY = "read_only_apn_fields_string_array";
+    field public static final String KEY_READ_ONLY_APN_TYPES_STRING_ARRAY = "read_only_apn_types_string_array";
+    field public static final String KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL = "require_entitlement_checks_bool";
+    field @Deprecated public static final String KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL = "restart_radio_on_pdp_fail_regular_deactivation_bool";
+    field public static final String KEY_RTT_AUTO_UPGRADE_BOOL = "rtt_auto_upgrade_bool";
+    field public static final String KEY_RTT_DOWNGRADE_SUPPORTED_BOOL = "rtt_downgrade_supported_bool";
+    field public static final String KEY_RTT_SUPPORTED_BOOL = "rtt_supported_bool";
+    field public static final String KEY_RTT_SUPPORTED_FOR_VT_BOOL = "rtt_supported_for_vt_bool";
+    field public static final String KEY_RTT_SUPPORTED_WHILE_ROAMING_BOOL = "rtt_supported_while_roaming_bool";
+    field public static final String KEY_RTT_UPGRADE_SUPPORTED_BOOL = "rtt_upgrade_supported_bool";
+    field public static final String KEY_RTT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_VT_CALL_BOOL = "rtt_upgrade_supported_for_downgraded_vt_call";
+    field public static final String KEY_SHOW_4G_FOR_3G_DATA_ICON_BOOL = "show_4g_for_3g_data_icon_bool";
+    field public static final String KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL = "show_4g_for_lte_data_icon_bool";
+    field public static final String KEY_SHOW_APN_SETTING_CDMA_BOOL = "show_apn_setting_cdma_bool";
+    field public static final String KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL = "show_blocking_pay_phone_option_bool";
+    field public static final String KEY_SHOW_CALL_BLOCKING_DISABLED_NOTIFICATION_ALWAYS_BOOL = "show_call_blocking_disabled_notification_always_bool";
+    field public static final String KEY_SHOW_CDMA_CHOICES_BOOL = "show_cdma_choices_bool";
+    field public static final String KEY_SHOW_FORWARDED_NUMBER_BOOL = "show_forwarded_number_bool";
+    field public static final String KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL = "show_iccid_in_sim_status_bool";
+    field public static final String KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL = "show_ims_registration_status_bool";
+    field public static final String KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL = "show_onscreen_dial_button_bool";
+    field public static final String KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL = "show_signal_strength_in_sim_status_bool";
+    field public static final String KEY_SHOW_VIDEO_CALL_CHARGES_ALERT_DIALOG_BOOL = "show_video_call_charges_alert_dialog_bool";
+    field public static final String KEY_SHOW_WFC_LOCATION_PRIVACY_POLICY_BOOL = "show_wfc_location_privacy_policy_bool";
+    field public static final String KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL = "simplified_network_settings_bool";
+    field public static final String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool";
+    field public static final String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool";
+    field public static final String KEY_SUPPORTS_CALL_COMPOSER_BOOL = "supports_call_composer_bool";
+    field public static final String KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_DTMF_BOOL = "supports_device_to_device_communication_using_dtmf_bool";
+    field public static final String KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_RTP_BOOL = "supports_device_to_device_communication_using_rtp_bool";
+    field public static final String KEY_SUPPORTS_SDP_NEGOTIATION_OF_D2D_RTP_HEADER_EXTENSIONS_BOOL = "supports_sdp_negotiation_of_d2d_rtp_header_extensions_bool";
+    field public static final String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL = "support_3gpp_call_forwarding_while_roaming_bool";
+    field public static final String KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL = "support_add_conference_participants_bool";
+    field public static final String KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL = "support_adhoc_conference_calls_bool";
+    field public static final String KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL = "support_clir_network_default_bool";
+    field public static final String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
+    field public static final String KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL = "support_emergency_sms_over_ims_bool";
+    field public static final String KEY_SUPPORT_ENHANCED_CALL_BLOCKING_BOOL = "support_enhanced_call_blocking_bool";
+    field public static final String KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL = "support_ims_conference_event_package_bool";
+    field public static final String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool";
+    field public static final String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool";
+    field public static final String KEY_SUPPORT_TDSCDMA_BOOL = "support_tdscdma_bool";
+    field public static final String KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY = "support_tdscdma_roaming_networks_string_array";
+    field public static final String KEY_SWITCH_DATA_TO_PRIMARY_IF_PRIMARY_IS_OOS_BOOL = "switch_data_to_primary_if_primary_is_oos_bool";
+    field public static final String KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL = "treat_downgraded_video_calls_as_video_calls_bool";
+    field public static final String KEY_TTY_SUPPORTED_BOOL = "tty_supported_bool";
+    field public static final String KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY = "unloggable_numbers_string_array";
+    field public static final String KEY_USE_ACS_FOR_RCS_BOOL = "use_acs_for_rcs_bool";
+    field public static final String KEY_USE_HFA_FOR_PROVISIONING_BOOL = "use_hfa_for_provisioning_bool";
+    field public static final String KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL = "use_ip_for_calling_indicator_bool";
+    field public static final String KEY_USE_OTASP_FOR_PROVISIONING_BOOL = "use_otasp_for_provisioning_bool";
+    field @Deprecated public static final String KEY_USE_RCS_PRESENCE_BOOL = "use_rcs_presence_bool";
+    field public static final String KEY_USE_RCS_SIP_OPTIONS_BOOL = "use_rcs_sip_options_bool";
+    field public static final String KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL = "use_wfc_home_network_mode_in_roaming_network_bool";
+    field public static final String KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL = "voicemail_notification_persistent_bool";
+    field public static final String KEY_VOICE_PRIVACY_DISABLE_UI_BOOL = "voice_privacy_disable_ui_bool";
+    field public static final String KEY_VOLTE_REPLACEMENT_RAT_INT = "volte_replacement_rat_int";
+    field public static final String KEY_VT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_RTT_CALL_BOOL = "vt_upgrade_supported_for_downgraded_rtt_call";
+    field public static final String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL = "vvm_cellular_data_required_bool";
+    field public static final String KEY_VVM_CLIENT_PREFIX_STRING = "vvm_client_prefix_string";
+    field public static final String KEY_VVM_DESTINATION_NUMBER_STRING = "vvm_destination_number_string";
+    field public static final String KEY_VVM_DISABLED_CAPABILITIES_STRING_ARRAY = "vvm_disabled_capabilities_string_array";
+    field public static final String KEY_VVM_LEGACY_MODE_ENABLED_BOOL = "vvm_legacy_mode_enabled_bool";
+    field public static final String KEY_VVM_PORT_NUMBER_INT = "vvm_port_number_int";
+    field public static final String KEY_VVM_PREFETCH_BOOL = "vvm_prefetch_bool";
+    field public static final String KEY_VVM_SSL_ENABLED_BOOL = "vvm_ssl_enabled_bool";
+    field public static final String KEY_VVM_TYPE_STRING = "vvm_type_string";
+    field public static final String KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING = "wfc_emergency_address_carrier_app_string";
+    field public static final String KEY_WORLD_MODE_ENABLED_BOOL = "world_mode_enabled_bool";
+    field public static final String KEY_WORLD_PHONE_BOOL = "world_phone_bool";
+    field public static final int SERVICE_CLASS_NONE = 0; // 0x0
+    field public static final int SERVICE_CLASS_VOICE = 1; // 0x1
+    field public static final int USSD_OVER_CS_ONLY = 2; // 0x2
+    field public static final int USSD_OVER_CS_PREFERRED = 0; // 0x0
+    field public static final int USSD_OVER_IMS_ONLY = 3; // 0x3
+    field public static final int USSD_OVER_IMS_PREFERRED = 1; // 0x1
+  }
+
+  public static final class CarrierConfigManager.Apn {
+    field @Deprecated public static final String KEY_PREFIX = "apn.";
+    field public static final String KEY_SETTINGS_DEFAULT_PROTOCOL_STRING = "apn.settings_default_protocol_string";
+    field public static final String KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING = "apn.settings_default_roaming_protocol_string";
+    field public static final String PROTOCOL_IPV4 = "IP";
+    field public static final String PROTOCOL_IPV4V6 = "IPV4V6";
+    field public static final String PROTOCOL_IPV6 = "IPV6";
+  }
+
+  public static final class CarrierConfigManager.Gps {
+    field public static final String KEY_PERSIST_LPP_MODE_BOOL = "gps.persist_lpp_mode_bool";
+    field public static final String KEY_PREFIX = "gps.";
+  }
+
+  public static final class CarrierConfigManager.Ims {
+    field public static final String KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL = "ims.enable_presence_capability_exchange_bool";
+    field public static final String KEY_ENABLE_PRESENCE_GROUP_SUBSCRIBE_BOOL = "ims.enable_presence_group_subscribe_bool";
+    field public static final String KEY_ENABLE_PRESENCE_PUBLISH_BOOL = "ims.enable_presence_publish_bool";
+    field public static final String KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL = "ims.ims_single_registration_required_bool";
+    field public static final String KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT = "ims.non_rcs_capabilities_cache_expiration_sec_int";
+    field public static final String KEY_PREFIX = "ims.";
+    field public static final String KEY_RCS_BULK_CAPABILITY_EXCHANGE_BOOL = "ims.rcs_bulk_capability_exchange_bool";
+    field public static final String KEY_RCS_FEATURE_TAG_ALLOWED_STRING_ARRAY = "ims.rcs_feature_tag_allowed_string_array";
+    field public static final String KEY_WIFI_OFF_DEFERRING_TIME_MILLIS_INT = "ims.wifi_off_deferring_time_millis_int";
+  }
+
+  public static final class CarrierConfigManager.ImsServiceEntitlement {
+    field public static final String KEY_ENTITLEMENT_SERVER_URL_STRING = "imsserviceentitlement.entitlement_server_url_string";
+    field public static final String KEY_FCM_SENDER_ID_STRING = "imsserviceentitlement.fcm_sender_id_string";
+    field public static final String KEY_IMS_PROVISIONING_BOOL = "imsserviceentitlement.ims_provisioning_bool";
+    field public static final String KEY_PREFIX = "imsserviceentitlement.";
+    field public static final String KEY_SHOW_VOWIFI_WEBVIEW_BOOL = "imsserviceentitlement.show_vowifi_webview_bool";
+  }
+
+  public static final class CarrierConfigManager.Iwlan {
+    field public static final int AUTHENTICATION_METHOD_CERT = 1; // 0x1
+    field public static final int AUTHENTICATION_METHOD_EAP_ONLY = 0; // 0x0
+    field public static final int EPDG_ADDRESS_CELLULAR_LOC = 3; // 0x3
+    field public static final int EPDG_ADDRESS_PCO = 2; // 0x2
+    field public static final int EPDG_ADDRESS_PLMN = 1; // 0x1
+    field public static final int EPDG_ADDRESS_STATIC = 0; // 0x0
+    field public static final int ID_TYPE_FQDN = 2; // 0x2
+    field public static final int ID_TYPE_KEY_ID = 11; // 0xb
+    field public static final int ID_TYPE_RFC822_ADDR = 3; // 0x3
+    field public static final String KEY_ADD_KE_TO_CHILD_SESSION_REKEY_BOOL = "iwlan.add_ke_to_child_session_rekey_bool";
+    field public static final String KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT = "iwlan.child_sa_rekey_hard_timer_sec_int";
+    field public static final String KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT = "iwlan.child_sa_rekey_soft_timer_sec_int";
+    field public static final String KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY = "iwlan.child_session_aes_cbc_key_size_int_array";
+    field public static final String KEY_CHILD_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY = "iwlan.child_session_aes_ctr_key_size_int_array";
+    field public static final String KEY_DIFFIE_HELLMAN_GROUPS_INT_ARRAY = "iwlan.diffie_hellman_groups_int_array";
+    field public static final String KEY_DPD_TIMER_SEC_INT = "iwlan.dpd_timer_sec_int";
+    field public static final String KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY = "iwlan.epdg_address_priority_int_array";
+    field public static final String KEY_EPDG_AUTHENTICATION_METHOD_INT = "iwlan.epdg_authentication_method_int";
+    field public static final String KEY_EPDG_PCO_ID_IPV4_INT = "iwlan.epdg_pco_id_ipv4_int";
+    field public static final String KEY_EPDG_PCO_ID_IPV6_INT = "iwlan.epdg_pco_id_ipv6_int";
+    field public static final String KEY_EPDG_STATIC_ADDRESS_ROAMING_STRING = "iwlan.epdg_static_address_roaming_string";
+    field public static final String KEY_EPDG_STATIC_ADDRESS_STRING = "iwlan.epdg_static_address_string";
+    field public static final String KEY_IKE_LOCAL_ID_TYPE_INT = "iwlan.ike_local_id_type_int";
+    field public static final String KEY_IKE_REKEY_HARD_TIMER_SEC_INT = "iwlan.ike_rekey_hard_timer_in_sec";
+    field public static final String KEY_IKE_REKEY_SOFT_TIMER_SEC_INT = "iwlan.ike_rekey_soft_timer_sec_int";
+    field public static final String KEY_IKE_REMOTE_ID_TYPE_INT = "iwlan.ike_remote_id_type_int";
+    field public static final String KEY_IKE_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY = "iwlan.ike_session_encryption_aes_cbc_key_size_int_array";
+    field public static final String KEY_IKE_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY = "iwlan.ike_session_encryption_aes_ctr_key_size_int_array";
+    field public static final String KEY_MAX_RETRIES_INT = "iwlan.max_retries_int";
+    field public static final String KEY_MCC_MNCS_STRING_ARRAY = "iwlan.mcc_mncs_string_array";
+    field public static final String KEY_NATT_KEEP_ALIVE_TIMER_SEC_INT = "iwlan.natt_keep_alive_timer_sec_int";
+    field public static final String KEY_PREFIX = "iwlan.";
+    field public static final String KEY_RETRANSMIT_TIMER_MSEC_INT_ARRAY = "iwlan.retransmit_timer_sec_int_array";
+    field public static final String KEY_SUPPORTED_CHILD_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY = "iwlan.supported_child_session_encryption_algorithms_int_array";
+    field public static final String KEY_SUPPORTED_IKE_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY = "iwlan.supported_ike_session_encryption_algorithms_int_array";
+    field public static final String KEY_SUPPORTED_INTEGRITY_ALGORITHMS_INT_ARRAY = "iwlan.supported_integrity_algorithms_int_array";
+    field public static final String KEY_SUPPORTED_PRF_ALGORITHMS_INT_ARRAY = "iwlan.supported_prf_algorithms_int_array";
+  }
+
+  public abstract class CellIdentity implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getOperatorAlphaLong();
+    method @Nullable public CharSequence getOperatorAlphaShort();
+    method @CallSuper public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentity> CREATOR;
+  }
+
+  public final class CellIdentityCdma extends android.telephony.CellIdentity {
+    method public int getBasestationId();
+    method public int getLatitude();
+    method public int getLongitude();
+    method public int getNetworkId();
+    method public int getSystemId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityCdma> CREATOR;
+  }
+
+  public final class CellIdentityGsm extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method public int getArfcn();
+    method public int getBsic();
+    method public int getCid();
+    method public int getLac();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method @Deprecated public int getPsc();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityGsm> CREATOR;
+  }
+
+  public final class CellIdentityLte extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method @NonNull public int[] getBands();
+    method public int getBandwidth();
+    method public int getCi();
+    method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
+    method public int getEarfcn();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method public int getPci();
+    method public int getTac();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityLte> CREATOR;
+  }
+
+  public final class CellIdentityNr extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method @NonNull public int[] getBands();
+    method @Nullable public String getMccString();
+    method @Nullable public String getMncString();
+    method public long getNci();
+    method @IntRange(from=0, to=3279165) public int getNrarfcn();
+    method @IntRange(from=0, to=1007) public int getPci();
+    method @IntRange(from=0, to=16777215) public int getTac();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityNr> CREATOR;
+  }
+
+  public final class CellIdentityTdscdma extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method public int getCid();
+    method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
+    method public int getCpid();
+    method public int getLac();
+    method @Nullable public String getMccString();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method public int getUarfcn();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityTdscdma> CREATOR;
+  }
+
+  public final class CellIdentityWcdma extends android.telephony.CellIdentity {
+    method @NonNull public java.util.Set<java.lang.String> getAdditionalPlmns();
+    method public int getCid();
+    method @Nullable public android.telephony.ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo();
+    method public int getLac();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method @Nullable public String getMobileNetworkOperator();
+    method public int getPsc();
+    method public int getUarfcn();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellIdentityWcdma> CREATOR;
+  }
+
+  public abstract class CellInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCellConnectionStatus();
+    method @NonNull public abstract android.telephony.CellIdentity getCellIdentity();
+    method @NonNull public abstract android.telephony.CellSignalStrength getCellSignalStrength();
+    method @Deprecated public long getTimeStamp();
+    method public long getTimestampMillis();
+    method public boolean isRegistered();
+    field public static final int CONNECTION_NONE = 0; // 0x0
+    field public static final int CONNECTION_PRIMARY_SERVING = 1; // 0x1
+    field public static final int CONNECTION_SECONDARY_SERVING = 2; // 0x2
+    field public static final int CONNECTION_UNKNOWN = 2147483647; // 0x7fffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfo> CREATOR;
+    field public static final int UNAVAILABLE = 2147483647; // 0x7fffffff
+    field public static final long UNAVAILABLE_LONG = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+  public final class CellInfoCdma extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityCdma getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthCdma getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoCdma> CREATOR;
+  }
+
+  public final class CellInfoGsm extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityGsm getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthGsm getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoGsm> CREATOR;
+  }
+
+  public final class CellInfoLte extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityLte getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthLte getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoLte> CREATOR;
+  }
+
+  public final class CellInfoNr extends android.telephony.CellInfo {
+    method @NonNull public android.telephony.CellIdentity getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrength getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoNr> CREATOR;
+  }
+
+  public final class CellInfoTdscdma extends android.telephony.CellInfo implements android.os.Parcelable {
+    method @NonNull public android.telephony.CellIdentityTdscdma getCellIdentity();
+    method @NonNull public android.telephony.CellSignalStrengthTdscdma getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoTdscdma> CREATOR;
+  }
+
+  public final class CellInfoWcdma extends android.telephony.CellInfo implements android.os.Parcelable {
+    method public android.telephony.CellIdentityWcdma getCellIdentity();
+    method public android.telephony.CellSignalStrengthWcdma getCellSignalStrength();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellInfoWcdma> CREATOR;
+  }
+
+  @Deprecated public abstract class CellLocation {
+    ctor @Deprecated public CellLocation();
+    method @Deprecated public static android.telephony.CellLocation getEmpty();
+    method @Deprecated public static void requestLocationUpdate();
+  }
+
+  public abstract class CellSignalStrength {
+    method public abstract boolean equals(Object);
+    method public abstract int getAsuLevel();
+    method public abstract int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public abstract int getLevel();
+    method public abstract int hashCode();
+    field public static final int SIGNAL_STRENGTH_GOOD = 3; // 0x3
+    field public static final int SIGNAL_STRENGTH_GREAT = 4; // 0x4
+    field public static final int SIGNAL_STRENGTH_MODERATE = 2; // 0x2
+    field public static final int SIGNAL_STRENGTH_NONE_OR_UNKNOWN = 0; // 0x0
+    field public static final int SIGNAL_STRENGTH_POOR = 1; // 0x1
+  }
+
+  public final class CellSignalStrengthCdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getCdmaDbm();
+    method public int getCdmaEcio();
+    method public int getCdmaLevel();
+    method public int getDbm();
+    method public int getEvdoDbm();
+    method public int getEvdoEcio();
+    method public int getEvdoLevel();
+    method public int getEvdoSnr();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthCdma> CREATOR;
+  }
+
+  public final class CellSignalStrengthGsm extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getBitErrorRate();
+    method public int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public int getRssi();
+    method public int getTimingAdvance();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthGsm> CREATOR;
+  }
+
+  public final class CellSignalStrengthLte extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method @IntRange(from=0, to=15) public int getCqi();
+    method @IntRange(from=1, to=6) public int getCqiTableIndex();
+    method public int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public int getRsrp();
+    method public int getRsrq();
+    method public int getRssi();
+    method public int getRssnr();
+    method public int getTimingAdvance();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthLte> CREATOR;
+  }
+
+  public final class CellSignalStrengthNr extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method @IntRange(from=0, to=15) @NonNull public java.util.List<java.lang.Integer> getCsiCqiReport();
+    method @IntRange(from=1, to=3) public int getCsiCqiTableIndex();
+    method public int getCsiRsrp();
+    method public int getCsiRsrq();
+    method public int getCsiSinr();
+    method public int getDbm();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public int getSsRsrp();
+    method public int getSsRsrq();
+    method public int getSsSinr();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthNr> CREATOR;
+  }
+
+  public final class CellSignalStrengthTdscdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getDbm();
+    method @IntRange(from=0, to=4) public int getLevel();
+    method public int getRscp();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthTdscdma> CREATOR;
+  }
+
+  public final class CellSignalStrengthWcdma extends android.telephony.CellSignalStrength implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAsuLevel();
+    method public int getDbm();
+    method public int getEcNo();
+    method @IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) public int getLevel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CellSignalStrengthWcdma> CREATOR;
+  }
+
+  public final class ClosedSubscriberGroupInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0, to=134217727) public int getCsgIdentity();
+    method public boolean getCsgIndicator();
+    method @NonNull public String getHomeNodebName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ClosedSubscriberGroupInfo> CREATOR;
+  }
+
+  public final class DataFailCause {
+    field public static final int ACCESS_ATTEMPT_ALREADY_IN_PROGRESS = 2219; // 0x8ab
+    field public static final int ACCESS_BLOCK = 2087; // 0x827
+    field public static final int ACCESS_BLOCK_ALL = 2088; // 0x828
+    field public static final int ACCESS_CLASS_DSAC_REJECTION = 2108; // 0x83c
+    field public static final int ACCESS_CONTROL_LIST_CHECK_FAILURE = 2128; // 0x850
+    field public static final int ACTIVATION_REJECTED_BCM_VIOLATION = 48; // 0x30
+    field public static final int ACTIVATION_REJECT_GGSN = 30; // 0x1e
+    field public static final int ACTIVATION_REJECT_UNSPECIFIED = 31; // 0x1f
+    field public static final int ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED = 65; // 0x41
+    field public static final int ALL_MATCHING_RULES_FAILED = 2254; // 0x8ce
+    field public static final int APN_DISABLED = 2045; // 0x7fd
+    field public static final int APN_DISALLOWED_ON_ROAMING = 2059; // 0x80b
+    field public static final int APN_MISMATCH = 2054; // 0x806
+    field public static final int APN_PARAMETERS_CHANGED = 2060; // 0x80c
+    field public static final int APN_PENDING_HANDOVER = 2041; // 0x7f9
+    field public static final int APN_TYPE_CONFLICT = 112; // 0x70
+    field public static final int AUTH_FAILURE_ON_EMERGENCY_CALL = 122; // 0x7a
+    field public static final int BEARER_HANDLING_NOT_SUPPORTED = 60; // 0x3c
+    field public static final int CALL_DISALLOWED_IN_ROAMING = 2068; // 0x814
+    field public static final int CALL_PREEMPT_BY_EMERGENCY_APN = 127; // 0x7f
+    field public static final int CANNOT_ENCODE_OTA_MESSAGE = 2159; // 0x86f
+    field public static final int CDMA_ALERT_STOP = 2077; // 0x81d
+    field public static final int CDMA_INCOMING_CALL = 2076; // 0x81c
+    field public static final int CDMA_INTERCEPT = 2073; // 0x819
+    field public static final int CDMA_LOCK = 2072; // 0x818
+    field public static final int CDMA_RELEASE_DUE_TO_SO_REJECTION = 2075; // 0x81b
+    field public static final int CDMA_REORDER = 2074; // 0x81a
+    field public static final int CDMA_RETRY_ORDER = 2086; // 0x826
+    field public static final int CHANNEL_ACQUISITION_FAILURE = 2078; // 0x81e
+    field public static final int CLOSE_IN_PROGRESS = 2030; // 0x7ee
+    field public static final int COLLISION_WITH_NETWORK_INITIATED_REQUEST = 56; // 0x38
+    field public static final int COMPANION_IFACE_IN_USE = 118; // 0x76
+    field public static final int CONCURRENT_SERVICES_INCOMPATIBLE = 2083; // 0x823
+    field public static final int CONCURRENT_SERVICES_NOT_ALLOWED = 2091; // 0x82b
+    field public static final int CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION = 2080; // 0x820
+    field public static final int CONDITIONAL_IE_ERROR = 100; // 0x64
+    field public static final int CONGESTION = 2106; // 0x83a
+    field public static final int CONNECTION_RELEASED = 2113; // 0x841
+    field public static final int CS_DOMAIN_NOT_AVAILABLE = 2181; // 0x885
+    field public static final int CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED = 2188; // 0x88c
+    field public static final int DATA_PLAN_EXPIRED = 2198; // 0x896
+    field public static final int DATA_ROAMING_SETTINGS_DISABLED = 2064; // 0x810
+    field public static final int DATA_SETTINGS_DISABLED = 2063; // 0x80f
+    field public static final int DBM_OR_SMS_IN_PROGRESS = 2211; // 0x8a3
+    field public static final int DDS_SWITCHED = 2065; // 0x811
+    field public static final int DDS_SWITCH_IN_PROGRESS = 2067; // 0x813
+    field public static final int DRB_RELEASED_BY_RRC = 2112; // 0x840
+    field public static final int DS_EXPLICIT_DEACTIVATION = 2125; // 0x84d
+    field public static final int DUAL_SWITCH = 2227; // 0x8b3
+    field public static final int DUN_CALL_DISALLOWED = 2056; // 0x808
+    field public static final int DUPLICATE_BEARER_ID = 2118; // 0x846
+    field public static final int EHRPD_TO_HRPD_FALLBACK = 2049; // 0x801
+    field public static final int EMBMS_NOT_ENABLED = 2193; // 0x891
+    field public static final int EMBMS_REGULAR_DEACTIVATION = 2195; // 0x893
+    field public static final int EMERGENCY_IFACE_ONLY = 116; // 0x74
+    field public static final int EMERGENCY_MODE = 2221; // 0x8ad
+    field public static final int EMM_ACCESS_BARRED = 115; // 0x73
+    field public static final int EMM_ACCESS_BARRED_INFINITE_RETRY = 121; // 0x79
+    field public static final int EMM_ATTACH_FAILED = 2115; // 0x843
+    field public static final int EMM_ATTACH_STARTED = 2116; // 0x844
+    field public static final int EMM_DETACHED = 2114; // 0x842
+    field public static final int EMM_T3417_EXPIRED = 2130; // 0x852
+    field public static final int EMM_T3417_EXT_EXPIRED = 2131; // 0x853
+    field public static final int EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED = 2178; // 0x882
+    field public static final int EPS_SERVICES_NOT_ALLOWED_IN_PLMN = 2179; // 0x883
+    field public static final int ERROR_UNSPECIFIED = 65535; // 0xffff
+    field public static final int ESM_BAD_OTA_MESSAGE = 2122; // 0x84a
+    field public static final int ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK = 2120; // 0x848
+    field public static final int ESM_COLLISION_SCENARIOS = 2119; // 0x847
+    field public static final int ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT = 2124; // 0x84c
+    field public static final int ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL = 2123; // 0x84b
+    field public static final int ESM_FAILURE = 2182; // 0x886
+    field public static final int ESM_INFO_NOT_RECEIVED = 53; // 0x35
+    field public static final int ESM_LOCAL_CAUSE_NONE = 2126; // 0x84e
+    field public static final int ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER = 2121; // 0x849
+    field public static final int ESM_PROCEDURE_TIME_OUT = 2155; // 0x86b
+    field public static final int ESM_UNKNOWN_EPS_BEARER_CONTEXT = 2111; // 0x83f
+    field public static final int EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE = 2201; // 0x899
+    field public static final int EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY = 2200; // 0x898
+    field public static final int EVDO_HDR_CHANGED = 2202; // 0x89a
+    field public static final int EVDO_HDR_CONNECTION_SETUP_TIMEOUT = 2206; // 0x89e
+    field public static final int EVDO_HDR_EXITED = 2203; // 0x89b
+    field public static final int EVDO_HDR_NO_SESSION = 2204; // 0x89c
+    field public static final int EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL = 2205; // 0x89d
+    field public static final int FADE = 2217; // 0x8a9
+    field public static final int FAILED_TO_ACQUIRE_COLOCATED_HDR = 2207; // 0x89f
+    field public static final int FEATURE_NOT_SUPP = 40; // 0x28
+    field public static final int FILTER_SEMANTIC_ERROR = 44; // 0x2c
+    field public static final int FILTER_SYTAX_ERROR = 45; // 0x2d
+    field public static final int FORBIDDEN_APN_NAME = 2066; // 0x812
+    field public static final int GPRS_REGISTRATION_FAIL = -2; // 0xfffffffe
+    field public static final int GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED = 2097; // 0x831
+    field public static final int GPRS_SERVICES_NOT_ALLOWED = 2098; // 0x832
+    field public static final int GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN = 2103; // 0x837
+    field public static final int HANDOFF_PREFERENCE_CHANGED = 2251; // 0x8cb
+    field public static final int HDR_ACCESS_FAILURE = 2213; // 0x8a5
+    field public static final int HDR_FADE = 2212; // 0x8a4
+    field public static final int HDR_NO_LOCK_GRANTED = 2210; // 0x8a2
+    field public static final int IFACE_AND_POL_FAMILY_MISMATCH = 120; // 0x78
+    field public static final int IFACE_MISMATCH = 117; // 0x75
+    field public static final int ILLEGAL_ME = 2096; // 0x830
+    field public static final int ILLEGAL_MS = 2095; // 0x82f
+    field public static final int IMEI_NOT_ACCEPTED = 2177; // 0x881
+    field public static final int IMPLICITLY_DETACHED = 2100; // 0x834
+    field public static final int IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER = 2176; // 0x880
+    field public static final int INCOMING_CALL_REJECTED = 2092; // 0x82c
+    field public static final int INSUFFICIENT_RESOURCES = 26; // 0x1a
+    field public static final int INTERFACE_IN_USE = 2058; // 0x80a
+    field public static final int INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN = 114; // 0x72
+    field public static final int INTERNAL_EPC_NONEPC_TRANSITION = 2057; // 0x809
+    field public static final int INVALID_CONNECTION_ID = 2156; // 0x86c
+    field public static final int INVALID_DNS_ADDR = 123; // 0x7b
+    field public static final int INVALID_EMM_STATE = 2190; // 0x88e
+    field public static final int INVALID_MANDATORY_INFO = 96; // 0x60
+    field public static final int INVALID_MODE = 2223; // 0x8af
+    field public static final int INVALID_PCSCF_ADDR = 113; // 0x71
+    field public static final int INVALID_PCSCF_OR_DNS_ADDRESS = 124; // 0x7c
+    field public static final int INVALID_PRIMARY_NSAPI = 2158; // 0x86e
+    field public static final int INVALID_SIM_STATE = 2224; // 0x8b0
+    field public static final int INVALID_TRANSACTION_ID = 81; // 0x51
+    field public static final int IPV6_ADDRESS_TRANSFER_FAILED = 2047; // 0x7ff
+    field public static final int IPV6_PREFIX_UNAVAILABLE = 2250; // 0x8ca
+    field public static final int IP_ADDRESS_MISMATCH = 119; // 0x77
+    field public static final int IP_VERSION_MISMATCH = 2055; // 0x807
+    field public static final int IRAT_HANDOVER_FAILED = 2194; // 0x892
+    field public static final int IS707B_MAX_ACCESS_PROBES = 2089; // 0x829
+    field public static final int IWLAN_AUTHORIZATION_REJECTED = 9003; // 0x232b
+    field public static final int IWLAN_DNS_RESOLUTION_NAME_FAILURE = 16388; // 0x4004
+    field public static final int IWLAN_DNS_RESOLUTION_TIMEOUT = 16389; // 0x4005
+    field public static final int IWLAN_IKEV2_AUTH_FAILURE = 16385; // 0x4001
+    field public static final int IWLAN_IKEV2_CERT_INVALID = 16387; // 0x4003
+    field public static final int IWLAN_IKEV2_CONFIG_FAILURE = 16384; // 0x4000
+    field public static final int IWLAN_IKEV2_MSG_TIMEOUT = 16386; // 0x4002
+    field public static final int IWLAN_ILLEGAL_ME = 9006; // 0x232e
+    field public static final int IWLAN_IMEI_NOT_ACCEPTED = 11005; // 0x2afd
+    field public static final int IWLAN_MAX_CONNECTION_REACHED = 8193; // 0x2001
+    field public static final int IWLAN_NETWORK_FAILURE = 10500; // 0x2904
+    field public static final int IWLAN_NON_3GPP_ACCESS_TO_EPC_NOT_ALLOWED = 9000; // 0x2328
+    field public static final int IWLAN_NO_APN_SUBSCRIPTION = 9002; // 0x232a
+    field public static final int IWLAN_PDN_CONNECTION_REJECTION = 8192; // 0x2000
+    field public static final int IWLAN_PLMN_NOT_ALLOWED = 11011; // 0x2b03
+    field public static final int IWLAN_RAT_TYPE_NOT_ALLOWED = 11001; // 0x2af9
+    field public static final int IWLAN_SEMANTIC_ERRORS_IN_PACKET_FILTERS = 8244; // 0x2034
+    field public static final int IWLAN_SEMANTIC_ERROR_IN_THE_TFT_OPERATION = 8241; // 0x2031
+    field public static final int IWLAN_SYNTACTICAL_ERRORS_IN_PACKET_FILTERS = 8245; // 0x2035
+    field public static final int IWLAN_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION = 8242; // 0x2032
+    field public static final int IWLAN_UNAUTHENTICATED_EMERGENCY_NOT_SUPPORTED = 11055; // 0x2b2f
+    field public static final int IWLAN_USER_UNKNOWN = 9001; // 0x2329
+    field public static final int LIMITED_TO_IPV4 = 2234; // 0x8ba
+    field public static final int LIMITED_TO_IPV6 = 2235; // 0x8bb
+    field public static final int LLC_SNDCP = 25; // 0x19
+    field public static final int LOCAL_END = 2215; // 0x8a7
+    field public static final int LOCATION_AREA_NOT_ALLOWED = 2102; // 0x836
+    field public static final int LOST_CONNECTION = 65540; // 0x10004
+    field public static final int LOWER_LAYER_REGISTRATION_FAILURE = 2197; // 0x895
+    field public static final int LOW_POWER_MODE_OR_POWERING_DOWN = 2044; // 0x7fc
+    field public static final int LTE_NAS_SERVICE_REQUEST_FAILED = 2117; // 0x845
+    field public static final int LTE_THROTTLING_NOT_REQUIRED = 2127; // 0x84f
+    field public static final int MAC_FAILURE = 2183; // 0x887
+    field public static final int MATCH_ALL_RULE_NOT_ALLOWED = 2253; // 0x8cd
+    field public static final int MAXIMIUM_NSAPIS_EXCEEDED = 2157; // 0x86d
+    field public static final int MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED = 2166; // 0x876
+    field public static final int MAX_ACCESS_PROBE = 2079; // 0x81f
+    field public static final int MAX_IPV4_CONNECTIONS = 2052; // 0x804
+    field public static final int MAX_IPV6_CONNECTIONS = 2053; // 0x805
+    field public static final int MAX_PPP_INACTIVITY_TIMER_EXPIRED = 2046; // 0x7fe
+    field public static final int MESSAGE_INCORRECT_SEMANTIC = 95; // 0x5f
+    field public static final int MESSAGE_TYPE_UNSUPPORTED = 97; // 0x61
+    field public static final int MIP_CONFIG_FAILURE = 2050; // 0x802
+    field public static final int MIP_FA_ADMIN_PROHIBITED = 2001; // 0x7d1
+    field public static final int MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED = 2012; // 0x7dc
+    field public static final int MIP_FA_ENCAPSULATION_UNAVAILABLE = 2008; // 0x7d8
+    field public static final int MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE = 2004; // 0x7d4
+    field public static final int MIP_FA_INSUFFICIENT_RESOURCES = 2002; // 0x7d2
+    field public static final int MIP_FA_MALFORMED_REPLY = 2007; // 0x7d7
+    field public static final int MIP_FA_MALFORMED_REQUEST = 2006; // 0x7d6
+    field public static final int MIP_FA_MISSING_CHALLENGE = 2017; // 0x7e1
+    field public static final int MIP_FA_MISSING_HOME_ADDRESS = 2015; // 0x7df
+    field public static final int MIP_FA_MISSING_HOME_AGENT = 2014; // 0x7de
+    field public static final int MIP_FA_MISSING_NAI = 2013; // 0x7dd
+    field public static final int MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE = 2003; // 0x7d3
+    field public static final int MIP_FA_REASON_UNSPECIFIED = 2000; // 0x7d0
+    field public static final int MIP_FA_REQUESTED_LIFETIME_TOO_LONG = 2005; // 0x7d5
+    field public static final int MIP_FA_REVERSE_TUNNEL_IS_MANDATORY = 2011; // 0x7db
+    field public static final int MIP_FA_REVERSE_TUNNEL_UNAVAILABLE = 2010; // 0x7da
+    field public static final int MIP_FA_STALE_CHALLENGE = 2018; // 0x7e2
+    field public static final int MIP_FA_UNKNOWN_CHALLENGE = 2016; // 0x7e0
+    field public static final int MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE = 2009; // 0x7d9
+    field public static final int MIP_HA_ADMIN_PROHIBITED = 2020; // 0x7e4
+    field public static final int MIP_HA_ENCAPSULATION_UNAVAILABLE = 2029; // 0x7ed
+    field public static final int MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE = 2023; // 0x7e7
+    field public static final int MIP_HA_INSUFFICIENT_RESOURCES = 2021; // 0x7e5
+    field public static final int MIP_HA_MALFORMED_REQUEST = 2025; // 0x7e9
+    field public static final int MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE = 2022; // 0x7e6
+    field public static final int MIP_HA_REASON_UNSPECIFIED = 2019; // 0x7e3
+    field public static final int MIP_HA_REGISTRATION_ID_MISMATCH = 2024; // 0x7e8
+    field public static final int MIP_HA_REVERSE_TUNNEL_IS_MANDATORY = 2028; // 0x7ec
+    field public static final int MIP_HA_REVERSE_TUNNEL_UNAVAILABLE = 2027; // 0x7eb
+    field public static final int MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS = 2026; // 0x7ea
+    field public static final int MISSING_UNKNOWN_APN = 27; // 0x1b
+    field public static final int MODEM_APP_PREEMPTED = 2032; // 0x7f0
+    field public static final int MODEM_RESTART = 2037; // 0x7f5
+    field public static final int MSC_TEMPORARILY_NOT_REACHABLE = 2180; // 0x884
+    field public static final int MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE = 101; // 0x65
+    field public static final int MSG_TYPE_NONCOMPATIBLE_STATE = 98; // 0x62
+    field public static final int MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK = 2099; // 0x833
+    field public static final int MULTIPLE_PDP_CALL_NOT_ALLOWED = 2192; // 0x890
+    field public static final int MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED = 55; // 0x37
+    field public static final int NAS_LAYER_FAILURE = 2191; // 0x88f
+    field public static final int NAS_REQUEST_REJECTED_BY_NETWORK = 2167; // 0x877
+    field public static final int NAS_SIGNALLING = 14; // 0xe
+    field public static final int NETWORK_FAILURE = 38; // 0x26
+    field public static final int NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH = 2154; // 0x86a
+    field public static final int NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH = 2153; // 0x869
+    field public static final int NETWORK_INITIATED_TERMINATION = 2031; // 0x7ef
+    field public static final int NONE = 0; // 0x0
+    field public static final int NON_IP_NOT_SUPPORTED = 2069; // 0x815
+    field public static final int NORMAL_RELEASE = 2218; // 0x8aa
+    field public static final int NO_CDMA_SERVICE = 2084; // 0x824
+    field public static final int NO_COLLOCATED_HDR = 2225; // 0x8b1
+    field public static final int NO_EPS_BEARER_CONTEXT_ACTIVATED = 2189; // 0x88d
+    field public static final int NO_GPRS_CONTEXT = 2094; // 0x82e
+    field public static final int NO_HYBRID_HDR_SERVICE = 2209; // 0x8a1
+    field public static final int NO_PDP_CONTEXT_ACTIVATED = 2107; // 0x83b
+    field public static final int NO_RESPONSE_FROM_BASE_STATION = 2081; // 0x821
+    field public static final int NO_SERVICE = 2216; // 0x8a8
+    field public static final int NO_SERVICE_ON_GATEWAY = 2093; // 0x82d
+    field public static final int NSAPI_IN_USE = 35; // 0x23
+    field public static final int NULL_APN_DISALLOWED = 2061; // 0x80d
+    field public static final int OEM_DCFAILCAUSE_1 = 4097; // 0x1001
+    field public static final int OEM_DCFAILCAUSE_10 = 4106; // 0x100a
+    field public static final int OEM_DCFAILCAUSE_11 = 4107; // 0x100b
+    field public static final int OEM_DCFAILCAUSE_12 = 4108; // 0x100c
+    field public static final int OEM_DCFAILCAUSE_13 = 4109; // 0x100d
+    field public static final int OEM_DCFAILCAUSE_14 = 4110; // 0x100e
+    field public static final int OEM_DCFAILCAUSE_15 = 4111; // 0x100f
+    field public static final int OEM_DCFAILCAUSE_2 = 4098; // 0x1002
+    field public static final int OEM_DCFAILCAUSE_3 = 4099; // 0x1003
+    field public static final int OEM_DCFAILCAUSE_4 = 4100; // 0x1004
+    field public static final int OEM_DCFAILCAUSE_5 = 4101; // 0x1005
+    field public static final int OEM_DCFAILCAUSE_6 = 4102; // 0x1006
+    field public static final int OEM_DCFAILCAUSE_7 = 4103; // 0x1007
+    field public static final int OEM_DCFAILCAUSE_8 = 4104; // 0x1008
+    field public static final int OEM_DCFAILCAUSE_9 = 4105; // 0x1009
+    field public static final int ONLY_IPV4V6_ALLOWED = 57; // 0x39
+    field public static final int ONLY_IPV4_ALLOWED = 50; // 0x32
+    field public static final int ONLY_IPV6_ALLOWED = 51; // 0x33
+    field public static final int ONLY_NON_IP_ALLOWED = 58; // 0x3a
+    field public static final int ONLY_SINGLE_BEARER_ALLOWED = 52; // 0x34
+    field public static final int OPERATOR_BARRED = 8; // 0x8
+    field public static final int OTASP_COMMIT_IN_PROGRESS = 2208; // 0x8a0
+    field public static final int PDN_CONN_DOES_NOT_EXIST = 54; // 0x36
+    field public static final int PDN_INACTIVITY_TIMER_EXPIRED = 2051; // 0x803
+    field public static final int PDN_IPV4_CALL_DISALLOWED = 2033; // 0x7f1
+    field public static final int PDN_IPV4_CALL_THROTTLED = 2034; // 0x7f2
+    field public static final int PDN_IPV6_CALL_DISALLOWED = 2035; // 0x7f3
+    field public static final int PDN_IPV6_CALL_THROTTLED = 2036; // 0x7f4
+    field public static final int PDN_NON_IP_CALL_DISALLOWED = 2071; // 0x817
+    field public static final int PDN_NON_IP_CALL_THROTTLED = 2070; // 0x816
+    field public static final int PDP_ACTIVATE_MAX_RETRY_FAILED = 2109; // 0x83d
+    field public static final int PDP_DUPLICATE = 2104; // 0x838
+    field public static final int PDP_ESTABLISH_TIMEOUT_EXPIRED = 2161; // 0x871
+    field public static final int PDP_INACTIVE_TIMEOUT_EXPIRED = 2163; // 0x873
+    field public static final int PDP_LOWERLAYER_ERROR = 2164; // 0x874
+    field public static final int PDP_MODIFY_COLLISION = 2165; // 0x875
+    field public static final int PDP_MODIFY_TIMEOUT_EXPIRED = 2162; // 0x872
+    field public static final int PDP_PPP_NOT_SUPPORTED = 2038; // 0x7f6
+    field public static final int PDP_WITHOUT_ACTIVE_TFT = 46; // 0x2e
+    field public static final int PHONE_IN_USE = 2222; // 0x8ae
+    field public static final int PHYSICAL_LINK_CLOSE_IN_PROGRESS = 2040; // 0x7f8
+    field public static final int PLMN_NOT_ALLOWED = 2101; // 0x835
+    field public static final int PPP_AUTH_FAILURE = 2229; // 0x8b5
+    field public static final int PPP_CHAP_FAILURE = 2232; // 0x8b8
+    field public static final int PPP_CLOSE_IN_PROGRESS = 2233; // 0x8b9
+    field public static final int PPP_OPTION_MISMATCH = 2230; // 0x8b6
+    field public static final int PPP_PAP_FAILURE = 2231; // 0x8b7
+    field public static final int PPP_TIMEOUT = 2228; // 0x8b4
+    field public static final int PREF_RADIO_TECH_CHANGED = -4; // 0xfffffffc
+    field public static final int PROFILE_BEARER_INCOMPATIBLE = 2042; // 0x7fa
+    field public static final int PROTOCOL_ERRORS = 111; // 0x6f
+    field public static final int QOS_NOT_ACCEPTED = 37; // 0x25
+    field public static final int RADIO_ACCESS_BEARER_FAILURE = 2110; // 0x83e
+    field public static final int RADIO_ACCESS_BEARER_SETUP_FAILURE = 2160; // 0x870
+    field public static final int RADIO_NOT_AVAILABLE = 65537; // 0x10001
+    field public static final int RADIO_POWER_OFF = -5; // 0xfffffffb
+    field public static final int REDIRECTION_OR_HANDOFF_IN_PROGRESS = 2220; // 0x8ac
+    field public static final int REGISTRATION_FAIL = -1; // 0xffffffff
+    field public static final int REGULAR_DEACTIVATION = 36; // 0x24
+    field public static final int REJECTED_BY_BASE_STATION = 2082; // 0x822
+    field public static final int RRC_CONNECTION_ABORTED_AFTER_HANDOVER = 2173; // 0x87d
+    field public static final int RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE = 2174; // 0x87e
+    field public static final int RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE = 2171; // 0x87b
+    field public static final int RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE = 2175; // 0x87f
+    field public static final int RRC_CONNECTION_ABORT_REQUEST = 2151; // 0x867
+    field public static final int RRC_CONNECTION_ACCESS_BARRED = 2139; // 0x85b
+    field public static final int RRC_CONNECTION_ACCESS_STRATUM_FAILURE = 2137; // 0x859
+    field public static final int RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS = 2138; // 0x85a
+    field public static final int RRC_CONNECTION_CELL_NOT_CAMPED = 2144; // 0x860
+    field public static final int RRC_CONNECTION_CELL_RESELECTION = 2140; // 0x85c
+    field public static final int RRC_CONNECTION_CONFIG_FAILURE = 2141; // 0x85d
+    field public static final int RRC_CONNECTION_INVALID_REQUEST = 2168; // 0x878
+    field public static final int RRC_CONNECTION_LINK_FAILURE = 2143; // 0x85f
+    field public static final int RRC_CONNECTION_NORMAL_RELEASE = 2147; // 0x863
+    field public static final int RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER = 2150; // 0x866
+    field public static final int RRC_CONNECTION_RADIO_LINK_FAILURE = 2148; // 0x864
+    field public static final int RRC_CONNECTION_REESTABLISHMENT_FAILURE = 2149; // 0x865
+    field public static final int RRC_CONNECTION_REJECT_BY_NETWORK = 2146; // 0x862
+    field public static final int RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE = 2172; // 0x87c
+    field public static final int RRC_CONNECTION_RF_UNAVAILABLE = 2170; // 0x87a
+    field public static final int RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR = 2152; // 0x868
+    field public static final int RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE = 2145; // 0x861
+    field public static final int RRC_CONNECTION_TIMER_EXPIRED = 2142; // 0x85e
+    field public static final int RRC_CONNECTION_TRACKING_AREA_ID_CHANGED = 2169; // 0x879
+    field public static final int RRC_UPLINK_CONNECTION_RELEASE = 2134; // 0x856
+    field public static final int RRC_UPLINK_DATA_TRANSMISSION_FAILURE = 2132; // 0x854
+    field public static final int RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER = 2133; // 0x855
+    field public static final int RRC_UPLINK_ERROR_REQUEST_FROM_NAS = 2136; // 0x858
+    field public static final int RRC_UPLINK_RADIO_LINK_FAILURE = 2135; // 0x857
+    field public static final int RUIM_NOT_PRESENT = 2085; // 0x825
+    field public static final int SECURITY_MODE_REJECTED = 2186; // 0x88a
+    field public static final int SERVICE_NOT_ALLOWED_ON_PLMN = 2129; // 0x851
+    field public static final int SERVICE_OPTION_NOT_SUBSCRIBED = 33; // 0x21
+    field public static final int SERVICE_OPTION_NOT_SUPPORTED = 32; // 0x20
+    field public static final int SERVICE_OPTION_OUT_OF_ORDER = 34; // 0x22
+    field public static final int SIGNAL_LOST = -3; // 0xfffffffd
+    field public static final int SIM_CARD_CHANGED = 2043; // 0x7fb
+    field public static final int SLICE_REJECTED = 2252; // 0x8cc
+    field public static final int SYNCHRONIZATION_FAILURE = 2184; // 0x888
+    field public static final int TEST_LOOPBACK_REGULAR_DEACTIVATION = 2196; // 0x894
+    field public static final int TETHERED_CALL_ACTIVE = -6; // 0xfffffffa
+    field public static final int TFT_SEMANTIC_ERROR = 41; // 0x29
+    field public static final int TFT_SYTAX_ERROR = 42; // 0x2a
+    field public static final int THERMAL_EMERGENCY = 2090; // 0x82a
+    field public static final int THERMAL_MITIGATION = 2062; // 0x80e
+    field public static final int TRAT_SWAP_FAILED = 2048; // 0x800
+    field public static final int UE_INITIATED_DETACH_OR_DISCONNECT = 128; // 0x80
+    field public static final int UE_IS_ENTERING_POWERSAVE_MODE = 2226; // 0x8b2
+    field public static final int UE_RAT_CHANGE = 2105; // 0x839
+    field public static final int UE_SECURITY_CAPABILITIES_MISMATCH = 2185; // 0x889
+    field public static final int UMTS_HANDOVER_TO_IWLAN = 2199; // 0x897
+    field public static final int UMTS_REACTIVATION_REQ = 39; // 0x27
+    field public static final int UNACCEPTABLE_NETWORK_PARAMETER = 65538; // 0x10002
+    field public static final int UNACCEPTABLE_NON_EPS_AUTHENTICATION = 2187; // 0x88b
+    field public static final int UNKNOWN = 65536; // 0x10000
+    field public static final int UNKNOWN_INFO_ELEMENT = 99; // 0x63
+    field public static final int UNKNOWN_PDP_ADDRESS_TYPE = 28; // 0x1c
+    field public static final int UNKNOWN_PDP_CONTEXT = 43; // 0x2b
+    field public static final int UNPREFERRED_RAT = 2039; // 0x7f7
+    field public static final int UNSUPPORTED_1X_PREV = 2214; // 0x8a6
+    field public static final int UNSUPPORTED_APN_IN_CURRENT_PLMN = 66; // 0x42
+    field public static final int UNSUPPORTED_QCI_VALUE = 59; // 0x3b
+    field public static final int USER_AUTHENTICATION = 29; // 0x1d
+    field public static final int VSNCP_ADMINISTRATIVELY_PROHIBITED = 2245; // 0x8c5
+    field public static final int VSNCP_APN_UNAUTHORIZED = 2238; // 0x8be
+    field public static final int VSNCP_GEN_ERROR = 2237; // 0x8bd
+    field public static final int VSNCP_INSUFFICIENT_PARAMETERS = 2243; // 0x8c3
+    field public static final int VSNCP_NO_PDN_GATEWAY_ADDRESS = 2240; // 0x8c0
+    field public static final int VSNCP_PDN_EXISTS_FOR_THIS_APN = 2248; // 0x8c8
+    field public static final int VSNCP_PDN_GATEWAY_REJECT = 2242; // 0x8c2
+    field public static final int VSNCP_PDN_GATEWAY_UNREACHABLE = 2241; // 0x8c1
+    field public static final int VSNCP_PDN_ID_IN_USE = 2246; // 0x8c6
+    field public static final int VSNCP_PDN_LIMIT_EXCEEDED = 2239; // 0x8bf
+    field public static final int VSNCP_RECONNECT_NOT_ALLOWED = 2249; // 0x8c9
+    field public static final int VSNCP_RESOURCE_UNAVAILABLE = 2244; // 0x8c4
+    field public static final int VSNCP_SUBSCRIBER_LIMITATION = 2247; // 0x8c7
+    field public static final int VSNCP_TIMEOUT = 2236; // 0x8bc
+  }
+
+  public final class DisconnectCause {
+    field public static final int ALREADY_DIALING = 72; // 0x48
+    field public static final int ANSWERED_ELSEWHERE = 52; // 0x34
+    field public static final int BUSY = 4; // 0x4
+    field public static final int CALLING_DISABLED = 74; // 0x4a
+    field public static final int CALL_BARRED = 20; // 0x14
+    field public static final int CALL_PULLED = 51; // 0x33
+    field public static final int CANT_CALL_WHILE_RINGING = 73; // 0x49
+    field public static final int CDMA_ACCESS_BLOCKED = 35; // 0x23
+    field public static final int CDMA_ACCESS_FAILURE = 32; // 0x20
+    field public static final int CDMA_ALREADY_ACTIVATED = 49; // 0x31
+    field public static final int CDMA_DROP = 27; // 0x1b
+    field public static final int CDMA_INTERCEPT = 28; // 0x1c
+    field public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 26; // 0x1a
+    field public static final int CDMA_NOT_EMERGENCY = 34; // 0x22
+    field public static final int CDMA_PREEMPTED = 33; // 0x21
+    field public static final int CDMA_REORDER = 29; // 0x1d
+    field public static final int CDMA_RETRY_ORDER = 31; // 0x1f
+    field public static final int CDMA_SO_REJECT = 30; // 0x1e
+    field public static final int CONGESTION = 5; // 0x5
+    field public static final int CS_RESTRICTED = 22; // 0x16
+    field public static final int CS_RESTRICTED_EMERGENCY = 24; // 0x18
+    field public static final int CS_RESTRICTED_NORMAL = 23; // 0x17
+    field public static final int DATA_DISABLED = 54; // 0x36
+    field public static final int DATA_LIMIT_REACHED = 55; // 0x37
+    field public static final int DIALED_CALL_FORWARDING_WHILE_ROAMING = 57; // 0x39
+    field public static final int DIALED_MMI = 39; // 0x27
+    field public static final int DIAL_LOW_BATTERY = 62; // 0x3e
+    field public static final int DIAL_MODIFIED_TO_DIAL = 48; // 0x30
+    field public static final int DIAL_MODIFIED_TO_DIAL_VIDEO = 66; // 0x42
+    field public static final int DIAL_MODIFIED_TO_SS = 47; // 0x2f
+    field public static final int DIAL_MODIFIED_TO_USSD = 46; // 0x2e
+    field public static final int DIAL_VIDEO_MODIFIED_TO_DIAL = 69; // 0x45
+    field public static final int DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 70; // 0x46
+    field public static final int DIAL_VIDEO_MODIFIED_TO_SS = 67; // 0x43
+    field public static final int DIAL_VIDEO_MODIFIED_TO_USSD = 68; // 0x44
+    field public static final int EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE = 78; // 0x4e
+    field public static final int EMERGENCY_PERM_FAILURE = 64; // 0x40
+    field public static final int EMERGENCY_TEMP_FAILURE = 63; // 0x3f
+    field public static final int ERROR_UNSPECIFIED = 36; // 0x24
+    field public static final int FDN_BLOCKED = 21; // 0x15
+    field public static final int ICC_ERROR = 19; // 0x13
+    field public static final int IMEI_NOT_ACCEPTED = 58; // 0x3a
+    field public static final int IMS_ACCESS_BLOCKED = 60; // 0x3c
+    field public static final int IMS_MERGED_SUCCESSFULLY = 45; // 0x2d
+    field public static final int IMS_SIP_ALTERNATE_EMERGENCY_CALL = 71; // 0x47
+    field public static final int INCOMING_AUTO_REJECTED = 81; // 0x51
+    field public static final int INCOMING_MISSED = 1; // 0x1
+    field public static final int INCOMING_REJECTED = 16; // 0x10
+    field public static final int INVALID_CREDENTIALS = 10; // 0xa
+    field public static final int INVALID_NUMBER = 7; // 0x7
+    field public static final int LIMIT_EXCEEDED = 15; // 0xf
+    field public static final int LOCAL = 3; // 0x3
+    field public static final int LOST_SIGNAL = 14; // 0xe
+    field public static final int LOW_BATTERY = 61; // 0x3d
+    field public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53; // 0x35
+    field public static final int MEDIA_TIMEOUT = 77; // 0x4d
+    field public static final int MMI = 6; // 0x6
+    field public static final int NORMAL = 2; // 0x2
+    field public static final int NORMAL_UNSPECIFIED = 65; // 0x41
+    field public static final int NOT_DISCONNECTED = 0; // 0x0
+    field public static final int NOT_VALID = -1; // 0xffffffff
+    field public static final int NO_PHONE_NUMBER_SUPPLIED = 38; // 0x26
+    field public static final int NUMBER_UNREACHABLE = 8; // 0x8
+    field public static final int OTASP_PROVISIONING_IN_PROCESS = 76; // 0x4c
+    field public static final int OUTGOING_CANCELED = 44; // 0x2c
+    field public static final int OUTGOING_EMERGENCY_CALL_PLACED = 80; // 0x50
+    field public static final int OUTGOING_FAILURE = 43; // 0x2b
+    field public static final int OUT_OF_NETWORK = 11; // 0xb
+    field public static final int OUT_OF_SERVICE = 18; // 0x12
+    field public static final int POWER_OFF = 17; // 0x11
+    field public static final int SERVER_ERROR = 12; // 0xc
+    field public static final int SERVER_UNREACHABLE = 9; // 0x9
+    field public static final int TIMED_OUT = 13; // 0xd
+    field public static final int TOO_MANY_ONGOING_CALLS = 75; // 0x4b
+    field public static final int UNOBTAINABLE_NUMBER = 25; // 0x19
+    field public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50; // 0x32
+    field public static final int VOICEMAIL_NUMBER_MISSING = 40; // 0x28
+    field public static final int WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION = 79; // 0x4f
+    field public static final int WIFI_LOST = 59; // 0x3b
+  }
+
+  public class IccOpenLogicalChannelResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getChannel();
+    method public byte[] getSelectResponse();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.IccOpenLogicalChannelResponse> CREATOR;
+    field public static final int INVALID_CHANNEL = -1; // 0xffffffff
+    field public static final int STATUS_MISSING_RESOURCE = 2; // 0x2
+    field public static final int STATUS_NO_ERROR = 1; // 0x1
+    field public static final int STATUS_NO_SUCH_ELEMENT = 3; // 0x3
+    field public static final int STATUS_UNKNOWN_ERROR = 4; // 0x4
+  }
+
+  public class MbmsDownloadSession implements java.lang.AutoCloseable {
+    method public void addProgressListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.DownloadProgressListener);
+    method public void addServiceAnnouncement(@NonNull byte[]);
+    method public void addStatusListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.DownloadStatusListener);
+    method public void cancelDownload(@NonNull android.telephony.mbms.DownloadRequest);
+    method public void close();
+    method public static android.telephony.MbmsDownloadSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsDownloadSessionCallback);
+    method @Nullable public static android.telephony.MbmsDownloadSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, int, @NonNull android.telephony.mbms.MbmsDownloadSessionCallback);
+    method public void download(@NonNull android.telephony.mbms.DownloadRequest);
+    method public static int getMaximumServiceAnnouncementSize();
+    method @Nullable public java.io.File getTempFileRootDirectory();
+    method @NonNull public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads();
+    method public void removeProgressListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull android.telephony.mbms.DownloadProgressListener);
+    method public void removeStatusListener(@NonNull android.telephony.mbms.DownloadRequest, @NonNull android.telephony.mbms.DownloadStatusListener);
+    method public void requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo);
+    method public void requestUpdateFileServices(@NonNull java.util.List<java.lang.String>);
+    method public void resetDownloadKnowledge(android.telephony.mbms.DownloadRequest);
+    method public void setTempFileRootDirectory(@NonNull java.io.File);
+    field public static final String DEFAULT_TOP_LEVEL_TEMP_DIRECTORY = "androidMbmsTempFileRoot";
+    field public static final String EXTRA_MBMS_COMPLETED_FILE_URI = "android.telephony.extra.MBMS_COMPLETED_FILE_URI";
+    field public static final String EXTRA_MBMS_DOWNLOAD_REQUEST = "android.telephony.extra.MBMS_DOWNLOAD_REQUEST";
+    field public static final String EXTRA_MBMS_DOWNLOAD_RESULT = "android.telephony.extra.MBMS_DOWNLOAD_RESULT";
+    field public static final String EXTRA_MBMS_FILE_INFO = "android.telephony.extra.MBMS_FILE_INFO";
+    field public static final int RESULT_CANCELLED = 2; // 0x2
+    field public static final int RESULT_DOWNLOAD_FAILURE = 6; // 0x6
+    field public static final int RESULT_EXPIRED = 3; // 0x3
+    field public static final int RESULT_FILE_ROOT_UNREACHABLE = 8; // 0x8
+    field public static final int RESULT_IO_ERROR = 4; // 0x4
+    field public static final int RESULT_OUT_OF_STORAGE = 7; // 0x7
+    field public static final int RESULT_SERVICE_ID_NOT_DEFINED = 5; // 0x5
+    field public static final int RESULT_SUCCESSFUL = 1; // 0x1
+    field public static final int STATUS_ACTIVELY_DOWNLOADING = 1; // 0x1
+    field public static final int STATUS_PENDING_DOWNLOAD = 2; // 0x2
+    field public static final int STATUS_PENDING_DOWNLOAD_WINDOW = 4; // 0x4
+    field public static final int STATUS_PENDING_REPAIR = 3; // 0x3
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public class MbmsGroupCallSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Nullable public static android.telephony.MbmsGroupCallSession create(@NonNull android.content.Context, int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsGroupCallSessionCallback);
+    method @Nullable public static android.telephony.MbmsGroupCallSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsGroupCallSessionCallback);
+    method @Nullable public android.telephony.mbms.GroupCall startGroupCall(long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.GroupCallCallback);
+  }
+
+  public class MbmsStreamingSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Nullable public static android.telephony.MbmsStreamingSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, int, @NonNull android.telephony.mbms.MbmsStreamingSessionCallback);
+    method public static android.telephony.MbmsStreamingSession create(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.mbms.MbmsStreamingSessionCallback);
+    method public void requestUpdateStreamingServices(java.util.List<java.lang.String>);
+    method @Nullable public android.telephony.mbms.StreamingService startStreaming(android.telephony.mbms.StreamingServiceInfo, @NonNull java.util.concurrent.Executor, android.telephony.mbms.StreamingServiceCallback);
+  }
+
+  @Deprecated public class NeighboringCellInfo implements android.os.Parcelable {
+    ctor @Deprecated public NeighboringCellInfo();
+    ctor @Deprecated public NeighboringCellInfo(int, int);
+    ctor @Deprecated public NeighboringCellInfo(int, String, int);
+    ctor @Deprecated public NeighboringCellInfo(android.os.Parcel);
+    method @Deprecated public int describeContents();
+    method @Deprecated public int getCid();
+    method @Deprecated public int getLac();
+    method @Deprecated public int getNetworkType();
+    method @Deprecated public int getPsc();
+    method @Deprecated public int getRssi();
+    method @Deprecated public void setCid(int);
+    method @Deprecated public void setRssi(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.telephony.NeighboringCellInfo> CREATOR;
+    field @Deprecated public static final int UNKNOWN_CID = -1; // 0xffffffff
+    field @Deprecated public static final int UNKNOWN_RSSI = 99; // 0x63
+  }
+
+  public final class NetworkRegistrationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAccessNetworkTechnology();
+    method @NonNull public java.util.List<java.lang.Integer> getAvailableServices();
+    method @Nullable public android.telephony.CellIdentity getCellIdentity();
+    method public int getDomain();
+    method @Nullable public String getRegisteredPlmn();
+    method public int getTransportType();
+    method public boolean isRegistered();
+    method public boolean isRoaming();
+    method public boolean isSearching();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NetworkRegistrationInfo> CREATOR;
+    field public static final int DOMAIN_CS = 1; // 0x1
+    field public static final int DOMAIN_CS_PS = 3; // 0x3
+    field public static final int DOMAIN_PS = 2; // 0x2
+    field public static final int DOMAIN_UNKNOWN = 0; // 0x0
+    field public static final int NR_STATE_CONNECTED = 3; // 0x3
+    field public static final int NR_STATE_NONE = 0; // 0x0
+    field public static final int NR_STATE_NOT_RESTRICTED = 2; // 0x2
+    field public static final int NR_STATE_RESTRICTED = 1; // 0x1
+    field public static final int SERVICE_TYPE_DATA = 2; // 0x2
+    field public static final int SERVICE_TYPE_EMERGENCY = 5; // 0x5
+    field public static final int SERVICE_TYPE_SMS = 3; // 0x3
+    field public static final int SERVICE_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int SERVICE_TYPE_VIDEO = 4; // 0x4
+    field public static final int SERVICE_TYPE_VOICE = 1; // 0x1
+  }
+
+  public class NetworkScan {
+    method public void stopScan();
+    field public static final int ERROR_INTERRUPTED = 10002; // 0x2712
+    field public static final int ERROR_INVALID_SCAN = 2; // 0x2
+    field public static final int ERROR_INVALID_SCANID = 10001; // 0x2711
+    field public static final int ERROR_MODEM_ERROR = 1; // 0x1
+    field public static final int ERROR_MODEM_UNAVAILABLE = 3; // 0x3
+    field public static final int ERROR_RADIO_INTERFACE_ERROR = 10000; // 0x2710
+    field public static final int ERROR_UNSUPPORTED = 4; // 0x4
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public final class NetworkScanRequest implements android.os.Parcelable {
+    ctor public NetworkScanRequest(int, android.telephony.RadioAccessSpecifier[], int, int, boolean, int, java.util.ArrayList<java.lang.String>);
+    method public int describeContents();
+    method public boolean getIncrementalResults();
+    method public int getIncrementalResultsPeriodicity();
+    method public int getMaxSearchTime();
+    method public java.util.ArrayList<java.lang.String> getPlmns();
+    method public int getScanType();
+    method public int getSearchPeriodicity();
+    method public android.telephony.RadioAccessSpecifier[] getSpecifiers();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NetworkScanRequest> CREATOR;
+    field public static final int SCAN_TYPE_ONE_SHOT = 0; // 0x0
+    field public static final int SCAN_TYPE_PERIODIC = 1; // 0x1
+  }
+
+  public class PhoneNumberFormattingTextWatcher implements android.text.TextWatcher {
+    ctor public PhoneNumberFormattingTextWatcher();
+    ctor public PhoneNumberFormattingTextWatcher(String);
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+  public class PhoneNumberUtils {
+    ctor public PhoneNumberUtils();
+    method public static void addTtsSpan(android.text.Spannable, int, int);
+    method public static boolean areSamePhoneNumber(@NonNull String, @NonNull String, @NonNull String);
+    method @Deprecated public static String calledPartyBCDFragmentToString(byte[], int, int);
+    method public static String calledPartyBCDFragmentToString(byte[], int, int, int);
+    method @Deprecated public static String calledPartyBCDToString(byte[], int, int);
+    method public static String calledPartyBCDToString(byte[], int, int, int);
+    method @Deprecated public static boolean compare(String, String);
+    method @Deprecated public static boolean compare(android.content.Context, String, String);
+    method public static String convertKeypadLettersToDigits(String);
+    method public static android.text.style.TtsSpan createTtsSpan(String);
+    method public static CharSequence createTtsSpannable(CharSequence);
+    method public static String extractNetworkPortion(String);
+    method public static String extractPostDialPortion(String);
+    method @Deprecated public static void formatJapaneseNumber(android.text.Editable);
+    method @Deprecated public static void formatNanpNumber(android.text.Editable);
+    method @Deprecated public static String formatNumber(String);
+    method @Deprecated public static void formatNumber(android.text.Editable, int);
+    method public static String formatNumber(String, String);
+    method public static String formatNumber(String, String, String);
+    method public static String formatNumberToE164(String, String);
+    method public static String formatNumberToRFC3966(String, String);
+    method @Deprecated public static int getFormatTypeForLocale(java.util.Locale);
+    method public static String getNumberFromIntent(android.content.Intent, android.content.Context);
+    method public static String getStrippedReversed(String);
+    method public static final boolean is12Key(char);
+    method public static final boolean isDialable(char);
+    method @Deprecated public static boolean isEmergencyNumber(String);
+    method public static boolean isGlobalPhoneNumber(String);
+    method public static boolean isISODigit(char);
+    method @Deprecated public static boolean isLocalEmergencyNumber(android.content.Context, String);
+    method public static final boolean isNonSeparator(char);
+    method public static final boolean isReallyDialable(char);
+    method public static final boolean isStartsPostDial(char);
+    method public static boolean isVoiceMailNumber(String);
+    method public static boolean isWellFormedSmsAddress(String);
+    method public static byte[] networkPortionToCalledPartyBCD(String);
+    method public static byte[] networkPortionToCalledPartyBCDWithLength(String);
+    method public static String normalizeNumber(String);
+    method @Deprecated public static byte[] numberToCalledPartyBCD(String);
+    method public static byte[] numberToCalledPartyBCD(String, int);
+    method public static String replaceUnicodeDigits(String);
+    method public static String stringFromStringAndTOA(String, int);
+    method public static String stripSeparators(String);
+    method public static String toCallerIDMinMatch(String);
+    method public static int toaFromString(String);
+    field public static final int BCD_EXTENDED_TYPE_CALLED_PARTY = 2; // 0x2
+    field public static final int BCD_EXTENDED_TYPE_EF_ADN = 1; // 0x1
+    field public static final int FORMAT_JAPAN = 2; // 0x2
+    field public static final int FORMAT_NANP = 1; // 0x1
+    field public static final int FORMAT_UNKNOWN = 0; // 0x0
+    field public static final char PAUSE = 44; // 0x002c ','
+    field public static final int TOA_International = 145; // 0x91
+    field public static final int TOA_Unknown = 129; // 0x81
+    field public static final char WAIT = 59; // 0x003b ';'
+    field public static final char WILD = 78; // 0x004e 'N'
+  }
+
+  @Deprecated public class PhoneStateListener {
+    ctor @Deprecated public PhoneStateListener();
+    ctor @Deprecated public PhoneStateListener(@NonNull java.util.concurrent.Executor);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onActiveDataSubscriptionIdChanged(int);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onBarringInfoChanged(@NonNull android.telephony.BarringInfo);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallDisconnectCauseChanged(int, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onCallForwardingIndicatorChanged(boolean);
+    method @Deprecated @RequiresPermission(value=android.Manifest.permission.READ_PHONE_STATE, conditional=true) public void onCallStateChanged(int, String);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onCellInfoChanged(java.util.List<android.telephony.CellInfo>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void onCellLocationChanged(android.telephony.CellLocation);
+    method @Deprecated public void onDataActivity(int);
+    method @Deprecated public void onDataConnectionStateChanged(int);
+    method @Deprecated public void onDataConnectionStateChanged(int, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onEmergencyNumberListChanged(@NonNull java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onMessageWaitingIndicatorChanged(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onRegistrationFailed(@NonNull android.telephony.CellIdentity, @NonNull String, int, int, int);
+    method @Deprecated public void onServiceStateChanged(android.telephony.ServiceState);
+    method @Deprecated public void onSignalStrengthChanged(int);
+    method @Deprecated public void onSignalStrengthsChanged(android.telephony.SignalStrength);
+    method @Deprecated public void onUserMobileDataStateChanged(boolean);
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE = 4194304; // 0x400000
+    field @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int LISTEN_BARRING_INFO = -2147483648; // 0x80000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_CALL_DISCONNECT_CAUSES = 33554432; // 0x2000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_CALL_FORWARDING_INDICATOR = 8; // 0x8
+    field @Deprecated public static final int LISTEN_CALL_STATE = 32; // 0x20
+    field @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int LISTEN_CELL_INFO = 1024; // 0x400
+    field @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static final int LISTEN_CELL_LOCATION = 16; // 0x10
+    field @Deprecated public static final int LISTEN_DATA_ACTIVITY = 128; // 0x80
+    field @Deprecated public static final int LISTEN_DATA_CONNECTION_STATE = 64; // 0x40
+    field @Deprecated public static final int LISTEN_DISPLAY_INFO_CHANGED = 1048576; // 0x100000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_EMERGENCY_NUMBER_LIST = 16777216; // 0x1000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_IMS_CALL_DISCONNECT_CAUSES = 134217728; // 0x8000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int LISTEN_MESSAGE_WAITING_INDICATOR = 4; // 0x4
+    field @Deprecated public static final int LISTEN_NONE = 0; // 0x0
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE = 4096; // 0x1000
+    field @Deprecated @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int LISTEN_REGISTRATION_FAILURE = 1073741824; // 0x40000000
+    field @Deprecated public static final int LISTEN_SERVICE_STATE = 1; // 0x1
+    field @Deprecated public static final int LISTEN_SIGNAL_STRENGTH = 2; // 0x2
+    field @Deprecated public static final int LISTEN_SIGNAL_STRENGTHS = 256; // 0x100
+    field @Deprecated public static final int LISTEN_USER_MOBILE_DATA_STATE = 524288; // 0x80000
+  }
+
+  public final class PhysicalChannelConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=1, to=261) public int getBand();
+    method @IntRange(from=1) public int getCellBandwidthDownlinkKhz();
+    method @IntRange(from=1) public int getCellBandwidthUplinkKhz();
+    method public int getConnectionStatus();
+    method @IntRange(from=0) public int getDownlinkChannelNumber();
+    method @IntRange(from=0) public int getDownlinkFrequencyKhz();
+    method public int getNetworkType();
+    method @IntRange(from=0, to=1007) public int getPhysicalCellId();
+    method @IntRange(from=0) public int getUplinkChannelNumber();
+    method @IntRange(from=0) public int getUplinkFrequencyKhz();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BAND_UNKNOWN = 0; // 0x0
+    field public static final int CELL_BANDWIDTH_UNKNOWN = 0; // 0x0
+    field public static final int CHANNEL_NUMBER_UNKNOWN = 2147483647; // 0x7fffffff
+    field public static final int CONNECTION_PRIMARY_SERVING = 1; // 0x1
+    field public static final int CONNECTION_SECONDARY_SERVING = 2; // 0x2
+    field public static final int CONNECTION_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhysicalChannelConfig> CREATOR;
+    field public static final int FREQUENCY_UNKNOWN = -1; // 0xffffffff
+    field public static final int PHYSICAL_CELL_ID_MAXIMUM_VALUE = 1007; // 0x3ef
+    field public static final int PHYSICAL_CELL_ID_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class PreciseDataConnectionState implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.telephony.data.ApnSetting getApnSetting();
+    method public int getId();
+    method public int getLastCauseCode();
+    method @Nullable public android.net.LinkProperties getLinkProperties();
+    method public int getNetworkType();
+    method public int getState();
+    method public int getTransportType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PreciseDataConnectionState> CREATOR;
+  }
+
+  public final class RadioAccessSpecifier implements android.os.Parcelable {
+    ctor public RadioAccessSpecifier(int, int[], int[]);
+    method public int describeContents();
+    method public int[] getBands();
+    method public int[] getChannels();
+    method public int getRadioAccessNetwork();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.RadioAccessSpecifier> CREATOR;
+  }
+
+  public class ServiceState implements android.os.Parcelable {
+    ctor public ServiceState();
+    ctor public ServiceState(android.telephony.ServiceState);
+    ctor @Deprecated public ServiceState(android.os.Parcel);
+    method protected void copyFrom(android.telephony.ServiceState);
+    method public int describeContents();
+    method public int getCdmaNetworkId();
+    method public int getCdmaSystemId();
+    method public int[] getCellBandwidths();
+    method public int getChannelNumber();
+    method public int getDuplexMode();
+    method public boolean getIsManualSelection();
+    method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoList();
+    method public String getOperatorAlphaLong();
+    method public String getOperatorAlphaShort();
+    method public String getOperatorNumeric();
+    method public boolean getRoaming();
+    method public int getState();
+    method public boolean isSearching();
+    method public void setIsManualSelection(boolean);
+    method public void setOperatorName(String, String, String);
+    method public void setRoaming(boolean);
+    method public void setState(int);
+    method public void setStateOff();
+    method public void setStateOutOfService();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ServiceState> CREATOR;
+    field public static final int DUPLEX_MODE_FDD = 1; // 0x1
+    field public static final int DUPLEX_MODE_TDD = 2; // 0x2
+    field public static final int DUPLEX_MODE_UNKNOWN = 0; // 0x0
+    field public static final int STATE_EMERGENCY_ONLY = 2; // 0x2
+    field public static final int STATE_IN_SERVICE = 0; // 0x0
+    field public static final int STATE_OUT_OF_SERVICE = 1; // 0x1
+    field public static final int STATE_POWER_OFF = 3; // 0x3
+    field public static final int UNKNOWN_ID = -1; // 0xffffffff
+  }
+
+  public class SignalStrength implements android.os.Parcelable {
+    ctor public SignalStrength(@NonNull android.telephony.SignalStrength);
+    method public int describeContents();
+    method @Deprecated public int getCdmaDbm();
+    method @Deprecated public int getCdmaEcio();
+    method @NonNull public java.util.List<android.telephony.CellSignalStrength> getCellSignalStrengths();
+    method @NonNull public <T extends android.telephony.CellSignalStrength> java.util.List<T> getCellSignalStrengths(@NonNull Class<T>);
+    method @Deprecated public int getEvdoDbm();
+    method @Deprecated public int getEvdoEcio();
+    method @Deprecated public int getEvdoSnr();
+    method @Deprecated public int getGsmBitErrorRate();
+    method @Deprecated public int getGsmSignalStrength();
+    method public int getLevel();
+    method public long getTimestampMillis();
+    method @Deprecated public boolean isGsm();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SignalStrength> CREATOR;
+    field public static final int INVALID = 2147483647; // 0x7fffffff
+  }
+
+  public final class SignalStrengthUpdateRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Collection<android.telephony.SignalThresholdInfo> getSignalThresholdInfos();
+    method public boolean isReportingRequestedWhileIdle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SignalStrengthUpdateRequest> CREATOR;
+  }
+
+  public static final class SignalStrengthUpdateRequest.Builder {
+    ctor public SignalStrengthUpdateRequest.Builder();
+    method @NonNull public android.telephony.SignalStrengthUpdateRequest build();
+    method @NonNull public android.telephony.SignalStrengthUpdateRequest.Builder setReportingRequestedWhileIdle(boolean);
+    method @NonNull public android.telephony.SignalStrengthUpdateRequest.Builder setSignalThresholdInfos(@NonNull java.util.Collection<android.telephony.SignalThresholdInfo>);
+  }
+
+  public final class SignalThresholdInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public static int getMaximumNumberOfThresholdsAllowed();
+    method public static int getMinimumNumberOfThresholdsAllowed();
+    method public int getRadioAccessNetworkType();
+    method public int getSignalMeasurementType();
+    method @NonNull public int[] getThresholds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SignalThresholdInfo> CREATOR;
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSCP = 2; // 0x2
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSRP = 3; // 0x3
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSRQ = 4; // 0x4
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSSI = 1; // 0x1
+    field public static final int SIGNAL_MEASUREMENT_TYPE_RSSNR = 5; // 0x5
+    field public static final int SIGNAL_MEASUREMENT_TYPE_SSRSRP = 6; // 0x6
+    field public static final int SIGNAL_MEASUREMENT_TYPE_SSRSRQ = 7; // 0x7
+    field public static final int SIGNAL_MEASUREMENT_TYPE_SSSINR = 8; // 0x8
+    field public static final int SIGNAL_MEASUREMENT_TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class SignalThresholdInfo.Builder {
+    ctor public SignalThresholdInfo.Builder();
+    method @NonNull public android.telephony.SignalThresholdInfo build();
+    method @NonNull public android.telephony.SignalThresholdInfo.Builder setRadioAccessNetworkType(int);
+    method @NonNull public android.telephony.SignalThresholdInfo.Builder setSignalMeasurementType(int);
+    method @NonNull public android.telephony.SignalThresholdInfo.Builder setThresholds(@NonNull int[]);
+  }
+
+  public final class SmsManager {
+    method public String createAppSpecificSmsToken(android.app.PendingIntent);
+    method @Nullable public String createAppSpecificSmsTokenWithPackageInfo(@Nullable String, @NonNull android.app.PendingIntent);
+    method @NonNull public android.telephony.SmsManager createForSubscriptionId(int);
+    method public java.util.ArrayList<java.lang.String> divideMessage(String);
+    method public void downloadMultimediaMessage(android.content.Context, String, android.net.Uri, android.os.Bundle, android.app.PendingIntent);
+    method public void downloadMultimediaMessage(@NonNull android.content.Context, @NonNull String, @NonNull android.net.Uri, @Nullable android.os.Bundle, @Nullable android.app.PendingIntent, long);
+    method @NonNull public android.os.Bundle getCarrierConfigValues();
+    method @Deprecated public static android.telephony.SmsManager getDefault();
+    method public static int getDefaultSmsSubscriptionId();
+    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public int getSmsCapacityOnIcc();
+    method @Deprecated public static android.telephony.SmsManager getSmsManagerForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.SMS_FINANCIAL_TRANSACTIONS) public void getSmsMessagesForFinancialApp(android.os.Bundle, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.SmsManager.FinancialSmsCallback);
+    method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSmscAddress();
+    method public int getSubscriptionId();
+    method public void injectSmsPdu(byte[], String, android.app.PendingIntent);
+    method public void sendDataMessage(String, String, short, byte[], android.app.PendingIntent, android.app.PendingIntent);
+    method public void sendMultimediaMessage(android.content.Context, android.net.Uri, String, android.os.Bundle, android.app.PendingIntent);
+    method public void sendMultimediaMessage(@NonNull android.content.Context, @NonNull android.net.Uri, @Nullable String, @Nullable android.os.Bundle, @Nullable android.app.PendingIntent, long);
+    method public void sendMultipartTextMessage(String, String, java.util.ArrayList<java.lang.String>, java.util.ArrayList<android.app.PendingIntent>, java.util.ArrayList<android.app.PendingIntent>);
+    method public void sendMultipartTextMessage(@NonNull String, @Nullable String, @NonNull java.util.List<java.lang.String>, @Nullable java.util.List<android.app.PendingIntent>, @Nullable java.util.List<android.app.PendingIntent>, long);
+    method public void sendMultipartTextMessage(@NonNull String, @Nullable String, @NonNull java.util.List<java.lang.String>, @Nullable java.util.List<android.app.PendingIntent>, @Nullable java.util.List<android.app.PendingIntent>, @NonNull String, @Nullable String);
+    method public void sendTextMessage(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
+    method public void sendTextMessage(@NonNull String, @Nullable String, @NonNull String, @Nullable android.app.PendingIntent, @Nullable android.app.PendingIntent, long);
+    method @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.SEND_SMS}) public void sendTextMessageWithoutPersisting(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSmscAddress(@NonNull String);
+    field public static final String EXTRA_MMS_DATA = "android.telephony.extra.MMS_DATA";
+    field public static final String EXTRA_MMS_HTTP_STATUS = "android.telephony.extra.MMS_HTTP_STATUS";
+    field public static final String MMS_CONFIG_ALIAS_ENABLED = "aliasEnabled";
+    field public static final String MMS_CONFIG_ALIAS_MAX_CHARS = "aliasMaxChars";
+    field public static final String MMS_CONFIG_ALIAS_MIN_CHARS = "aliasMinChars";
+    field public static final String MMS_CONFIG_ALLOW_ATTACH_AUDIO = "allowAttachAudio";
+    field public static final String MMS_CONFIG_APPEND_TRANSACTION_ID = "enabledTransID";
+    field public static final String MMS_CONFIG_EMAIL_GATEWAY_NUMBER = "emailGatewayNumber";
+    field public static final String MMS_CONFIG_GROUP_MMS_ENABLED = "enableGroupMms";
+    field public static final String MMS_CONFIG_HTTP_PARAMS = "httpParams";
+    field public static final String MMS_CONFIG_HTTP_SOCKET_TIMEOUT = "httpSocketTimeout";
+    field public static final String MMS_CONFIG_MAX_IMAGE_HEIGHT = "maxImageHeight";
+    field public static final String MMS_CONFIG_MAX_IMAGE_WIDTH = "maxImageWidth";
+    field public static final String MMS_CONFIG_MAX_MESSAGE_SIZE = "maxMessageSize";
+    field public static final String MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE = "maxMessageTextSize";
+    field public static final String MMS_CONFIG_MMS_DELIVERY_REPORT_ENABLED = "enableMMSDeliveryReports";
+    field public static final String MMS_CONFIG_MMS_ENABLED = "enabledMMS";
+    field public static final String MMS_CONFIG_MMS_READ_REPORT_ENABLED = "enableMMSReadReports";
+    field public static final String MMS_CONFIG_MULTIPART_SMS_ENABLED = "enableMultipartSMS";
+    field public static final String MMS_CONFIG_NAI_SUFFIX = "naiSuffix";
+    field public static final String MMS_CONFIG_NOTIFY_WAP_MMSC_ENABLED = "enabledNotifyWapMMSC";
+    field public static final String MMS_CONFIG_RECIPIENT_LIMIT = "recipientLimit";
+    field public static final String MMS_CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES = "sendMultipartSmsAsSeparateMessages";
+    field public static final String MMS_CONFIG_SHOW_CELL_BROADCAST_APP_LINKS = "config_cellBroadcastAppLinks";
+    field public static final String MMS_CONFIG_SMS_DELIVERY_REPORT_ENABLED = "enableSMSDeliveryReports";
+    field public static final String MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD = "smsToMmsTextLengthThreshold";
+    field public static final String MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD = "smsToMmsTextThreshold";
+    field public static final String MMS_CONFIG_SUBJECT_MAX_LENGTH = "maxSubjectLength";
+    field public static final String MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER = "supportHttpCharsetHeader";
+    field public static final String MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION = "supportMmsContentDisposition";
+    field public static final String MMS_CONFIG_UA_PROF_TAG_NAME = "uaProfTagName";
+    field public static final String MMS_CONFIG_UA_PROF_URL = "uaProfUrl";
+    field public static final String MMS_CONFIG_USER_AGENT = "userAgent";
+    field public static final int MMS_ERROR_CONFIGURATION_ERROR = 7; // 0x7
+    field public static final int MMS_ERROR_HTTP_FAILURE = 4; // 0x4
+    field public static final int MMS_ERROR_INVALID_APN = 2; // 0x2
+    field public static final int MMS_ERROR_IO_ERROR = 5; // 0x5
+    field public static final int MMS_ERROR_NO_DATA_NETWORK = 8; // 0x8
+    field public static final int MMS_ERROR_RETRY = 6; // 0x6
+    field public static final int MMS_ERROR_UNABLE_CONNECT_MMS = 3; // 0x3
+    field public static final int MMS_ERROR_UNSPECIFIED = 1; // 0x1
+    field public static final int RESULT_BLUETOOTH_DISCONNECTED = 27; // 0x1b
+    field public static final int RESULT_CANCELLED = 23; // 0x17
+    field public static final int RESULT_ENCODING_ERROR = 18; // 0x12
+    field public static final int RESULT_ERROR_FDN_CHECK_FAILURE = 6; // 0x6
+    field public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1
+    field public static final int RESULT_ERROR_LIMIT_EXCEEDED = 5; // 0x5
+    field public static final int RESULT_ERROR_NONE = 0; // 0x0
+    field public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4
+    field public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3
+    field public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2
+    field public static final int RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED = 8; // 0x8
+    field public static final int RESULT_ERROR_SHORT_CODE_NOT_ALLOWED = 7; // 0x7
+    field public static final int RESULT_INTERNAL_ERROR = 21; // 0x15
+    field public static final int RESULT_INVALID_ARGUMENTS = 11; // 0xb
+    field public static final int RESULT_INVALID_BLUETOOTH_ADDRESS = 26; // 0x1a
+    field public static final int RESULT_INVALID_SMSC_ADDRESS = 19; // 0x13
+    field public static final int RESULT_INVALID_SMS_FORMAT = 14; // 0xe
+    field public static final int RESULT_INVALID_STATE = 12; // 0xc
+    field public static final int RESULT_MODEM_ERROR = 16; // 0x10
+    field public static final int RESULT_NETWORK_ERROR = 17; // 0x11
+    field public static final int RESULT_NETWORK_REJECT = 10; // 0xa
+    field public static final int RESULT_NO_BLUETOOTH_SERVICE = 25; // 0x19
+    field public static final int RESULT_NO_DEFAULT_SMS_APP = 32; // 0x20
+    field public static final int RESULT_NO_MEMORY = 13; // 0xd
+    field public static final int RESULT_NO_RESOURCES = 22; // 0x16
+    field public static final int RESULT_OPERATION_NOT_ALLOWED = 20; // 0x14
+    field public static final int RESULT_RADIO_NOT_AVAILABLE = 9; // 0x9
+    field public static final int RESULT_RECEIVE_DISPATCH_FAILURE = 500; // 0x1f4
+    field public static final int RESULT_RECEIVE_INJECTED_NULL_PDU = 501; // 0x1f5
+    field public static final int RESULT_RECEIVE_NULL_MESSAGE_FROM_RIL = 503; // 0x1f7
+    field public static final int RESULT_RECEIVE_RUNTIME_EXCEPTION = 502; // 0x1f6
+    field public static final int RESULT_RECEIVE_SQL_EXCEPTION = 505; // 0x1f9
+    field public static final int RESULT_RECEIVE_URI_EXCEPTION = 506; // 0x1fa
+    field public static final int RESULT_RECEIVE_WHILE_ENCRYPTED = 504; // 0x1f8
+    field public static final int RESULT_REMOTE_EXCEPTION = 31; // 0x1f
+    field public static final int RESULT_REQUEST_NOT_SUPPORTED = 24; // 0x18
+    field public static final int RESULT_RIL_ACCESS_BARRED = 122; // 0x7a
+    field public static final int RESULT_RIL_BLOCKED_DUE_TO_CALL = 123; // 0x7b
+    field public static final int RESULT_RIL_CANCELLED = 119; // 0x77
+    field public static final int RESULT_RIL_ENCODING_ERR = 109; // 0x6d
+    field public static final int RESULT_RIL_INTERNAL_ERR = 113; // 0x71
+    field public static final int RESULT_RIL_INVALID_ARGUMENTS = 104; // 0x68
+    field public static final int RESULT_RIL_INVALID_MODEM_STATE = 115; // 0x73
+    field public static final int RESULT_RIL_INVALID_SMSC_ADDRESS = 110; // 0x6e
+    field public static final int RESULT_RIL_INVALID_SMS_FORMAT = 107; // 0x6b
+    field public static final int RESULT_RIL_INVALID_STATE = 103; // 0x67
+    field public static final int RESULT_RIL_MODEM_ERR = 111; // 0x6f
+    field public static final int RESULT_RIL_NETWORK_ERR = 112; // 0x70
+    field public static final int RESULT_RIL_NETWORK_NOT_READY = 116; // 0x74
+    field public static final int RESULT_RIL_NETWORK_REJECT = 102; // 0x66
+    field public static final int RESULT_RIL_NO_MEMORY = 105; // 0x69
+    field public static final int RESULT_RIL_NO_RESOURCES = 118; // 0x76
+    field public static final int RESULT_RIL_OPERATION_NOT_ALLOWED = 117; // 0x75
+    field public static final int RESULT_RIL_RADIO_NOT_AVAILABLE = 100; // 0x64
+    field public static final int RESULT_RIL_REQUEST_NOT_SUPPORTED = 114; // 0x72
+    field public static final int RESULT_RIL_REQUEST_RATE_LIMITED = 106; // 0x6a
+    field public static final int RESULT_RIL_SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED = 121; // 0x79
+    field public static final int RESULT_RIL_SIM_ABSENT = 120; // 0x78
+    field public static final int RESULT_RIL_SMS_SEND_FAIL_RETRY = 101; // 0x65
+    field public static final int RESULT_RIL_SYSTEM_ERR = 108; // 0x6c
+    field public static final int RESULT_SMS_BLOCKED_DURING_EMERGENCY = 29; // 0x1d
+    field public static final int RESULT_SMS_SEND_RETRY_FAILED = 30; // 0x1e
+    field public static final int RESULT_SYSTEM_ERROR = 15; // 0xf
+    field public static final int RESULT_UNEXPECTED_EVENT_STOP_SENDING = 28; // 0x1c
+    field public static final int STATUS_ON_ICC_FREE = 0; // 0x0
+    field public static final int STATUS_ON_ICC_READ = 1; // 0x1
+    field public static final int STATUS_ON_ICC_SENT = 5; // 0x5
+    field public static final int STATUS_ON_ICC_UNREAD = 3; // 0x3
+    field public static final int STATUS_ON_ICC_UNSENT = 7; // 0x7
+  }
+
+  public abstract static class SmsManager.FinancialSmsCallback {
+    ctor public SmsManager.FinancialSmsCallback();
+    method public abstract void onFinancialSmsMessages(android.database.CursorWindow);
+  }
+
+  public class SmsMessage {
+    method public static int[] calculateLength(CharSequence, boolean);
+    method public static int[] calculateLength(String, boolean);
+    method @Deprecated public static android.telephony.SmsMessage createFromPdu(byte[]);
+    method public static android.telephony.SmsMessage createFromPdu(byte[], String);
+    method public String getDisplayMessageBody();
+    method public String getDisplayOriginatingAddress();
+    method public String getEmailBody();
+    method public String getEmailFrom();
+    method public int getIndexOnIcc();
+    method @Deprecated public int getIndexOnSim();
+    method public String getMessageBody();
+    method public android.telephony.SmsMessage.MessageClass getMessageClass();
+    method @Nullable public String getOriginatingAddress();
+    method public byte[] getPdu();
+    method public int getProtocolIdentifier();
+    method public String getPseudoSubject();
+    method public String getServiceCenterAddress();
+    method public int getStatus();
+    method public int getStatusOnIcc();
+    method @Deprecated public int getStatusOnSim();
+    method public static android.telephony.SmsMessage.SubmitPdu getSubmitPdu(String, String, String, boolean);
+    method public static android.telephony.SmsMessage.SubmitPdu getSubmitPdu(String, String, short, byte[], boolean);
+    method public static int getTPLayerLengthForPDU(String);
+    method public long getTimestampMillis();
+    method public byte[] getUserData();
+    method public boolean isCphsMwiMessage();
+    method public boolean isEmail();
+    method public boolean isMWIClearMessage();
+    method public boolean isMWISetMessage();
+    method public boolean isMwiDontStore();
+    method public boolean isReplace();
+    method public boolean isReplyPathPresent();
+    method public boolean isStatusReportMessage();
+    field public static final int ENCODING_16BIT = 3; // 0x3
+    field public static final int ENCODING_7BIT = 1; // 0x1
+    field public static final int ENCODING_8BIT = 2; // 0x2
+    field public static final int ENCODING_UNKNOWN = 0; // 0x0
+    field public static final String FORMAT_3GPP = "3gpp";
+    field public static final String FORMAT_3GPP2 = "3gpp2";
+    field public static final int MAX_USER_DATA_BYTES = 140; // 0x8c
+    field public static final int MAX_USER_DATA_BYTES_WITH_HEADER = 134; // 0x86
+    field public static final int MAX_USER_DATA_SEPTETS = 160; // 0xa0
+    field public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153; // 0x99
+  }
+
+  public enum SmsMessage.MessageClass {
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_0;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_1;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_2;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass CLASS_3;
+    enum_constant public static final android.telephony.SmsMessage.MessageClass UNKNOWN;
+  }
+
+  public static class SmsMessage.SubmitPdu {
+    field public byte[] encodedMessage;
+    field public byte[] encodedScAddress;
+  }
+
+  public class SubscriptionInfo implements android.os.Parcelable {
+    method public android.graphics.Bitmap createIconBitmap(android.content.Context);
+    method public int describeContents();
+    method public int getCardId();
+    method public int getCarrierId();
+    method public CharSequence getCarrierName();
+    method public String getCountryIso();
+    method public int getDataRoaming();
+    method public CharSequence getDisplayName();
+    method @Nullable public android.os.ParcelUuid getGroupUuid();
+    method public String getIccId();
+    method public int getIconTint();
+    method @Deprecated public int getMcc();
+    method @Nullable public String getMccString();
+    method @Deprecated public int getMnc();
+    method @Nullable public String getMncString();
+    method public String getNumber();
+    method public int getSimSlotIndex();
+    method public int getSubscriptionId();
+    method public int getSubscriptionType();
+    method public boolean isEmbedded();
+    method public boolean isOpportunistic();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SubscriptionInfo> CREATOR;
+  }
+
+  public class SubscriptionManager {
+    method public void addOnOpportunisticSubscriptionsChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener);
+    method @Deprecated public void addOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
+    method public void addOnSubscriptionsChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void addSubscriptionsIntoGroup(@NonNull java.util.List<java.lang.Integer>, @NonNull android.os.ParcelUuid);
+    method public boolean canManageSubscription(android.telephony.SubscriptionInfo);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.os.ParcelUuid createSubscriptionGroup(@NonNull java.util.List<java.lang.Integer>);
+    method @Deprecated public static android.telephony.SubscriptionManager from(android.content.Context);
+    method public java.util.List<android.telephony.SubscriptionInfo> getAccessibleSubscriptionInfoList();
+    method public static int getActiveDataSubscriptionId();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telephony.SubscriptionInfo getActiveSubscriptionInfo(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getActiveSubscriptionInfoCount();
+    method public int getActiveSubscriptionInfoCountMax();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public android.telephony.SubscriptionInfo getActiveSubscriptionInfoForSimSlotIndex(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telephony.SubscriptionInfo> getActiveSubscriptionInfoList();
+    method @NonNull public java.util.List<android.telephony.SubscriptionInfo> getCompleteActiveSubscriptionInfoList();
+    method public static int getDefaultDataSubscriptionId();
+    method public static int getDefaultSmsSubscriptionId();
+    method public static int getDefaultSubscriptionId();
+    method public static int getDefaultVoiceSubscriptionId();
+    method @NonNull public java.util.List<android.net.Uri> getDeviceToDeviceStatusSharingContacts(int);
+    method public int getDeviceToDeviceStatusSharingPreference(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telephony.SubscriptionInfo> getOpportunisticSubscriptions();
+    method public static int getSlotIndex(int);
+    method @Nullable public int[] getSubscriptionIds(int);
+    method @NonNull public java.util.List<android.telephony.SubscriptionPlan> getSubscriptionPlans(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<android.telephony.SubscriptionInfo> getSubscriptionsInGroup(@NonNull android.os.ParcelUuid);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isActiveSubscriptionId(int);
+    method public boolean isNetworkRoaming(int);
+    method public static boolean isUsableSubscriptionId(int);
+    method public static boolean isValidSubscriptionId(int);
+    method public void removeOnOpportunisticSubscriptionsChangedListener(@NonNull android.telephony.SubscriptionManager.OnOpportunisticSubscriptionsChangedListener);
+    method public void removeOnSubscriptionsChangedListener(android.telephony.SubscriptionManager.OnSubscriptionsChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void removeSubscriptionsFromGroup(@NonNull java.util.List<java.lang.Integer>, @NonNull android.os.ParcelUuid);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDeviceToDeviceStatusSharingContacts(int, @NonNull java.util.List<android.net.Uri>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDeviceToDeviceStatusSharingPreference(int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setOpportunistic(boolean, int);
+    method public void setSubscriptionOverrideCongested(int, boolean, long);
+    method public void setSubscriptionOverrideCongested(int, boolean, @NonNull int[], long);
+    method public void setSubscriptionOverrideUnmetered(int, boolean, long);
+    method public void setSubscriptionOverrideUnmetered(int, boolean, @NonNull int[], long);
+    method public void setSubscriptionPlans(int, @NonNull java.util.List<android.telephony.SubscriptionPlan>);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, @NonNull android.app.PendingIntent);
+    field public static final String ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_DEFAULT_SUBSCRIPTION_CHANGED = "android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_MANAGE_SUBSCRIPTION_PLANS = "android.telephony.action.MANAGE_SUBSCRIPTION_PLANS";
+    field public static final String ACTION_REFRESH_SUBSCRIPTION_PLANS = "android.telephony.action.REFRESH_SUBSCRIPTION_PLANS";
+    field public static final int D2D_SHARING_ALL = 3; // 0x3
+    field public static final int D2D_SHARING_ALL_CONTACTS = 1; // 0x1
+    field public static final int D2D_SHARING_DISABLED = 0; // 0x0
+    field public static final int D2D_SHARING_SELECTED_CONTACTS = 2; // 0x2
+    field public static final String D2D_STATUS_SHARING = "d2d_sharing_status";
+    field public static final String D2D_STATUS_SHARING_SELECTED_CONTACTS = "d2d_sharing_contacts";
+    field public static final int DATA_ROAMING_DISABLE = 0; // 0x0
+    field public static final int DATA_ROAMING_ENABLE = 1; // 0x1
+    field public static final int DEFAULT_SUBSCRIPTION_ID = 2147483647; // 0x7fffffff
+    field public static final String EXTRA_SLOT_INDEX = "android.telephony.extra.SLOT_INDEX";
+    field public static final String EXTRA_SUBSCRIPTION_INDEX = "android.telephony.extra.SUBSCRIPTION_INDEX";
+    field public static final int INVALID_SIM_SLOT_INDEX = -1; // 0xffffffff
+    field public static final int INVALID_SUBSCRIPTION_ID = -1; // 0xffffffff
+    field public static final int SUBSCRIPTION_TYPE_LOCAL_SIM = 0; // 0x0
+    field public static final int SUBSCRIPTION_TYPE_REMOTE_SIM = 1; // 0x1
+  }
+
+  public static class SubscriptionManager.OnOpportunisticSubscriptionsChangedListener {
+    ctor public SubscriptionManager.OnOpportunisticSubscriptionsChangedListener();
+    method public void onOpportunisticSubscriptionsChanged();
+  }
+
+  public static class SubscriptionManager.OnSubscriptionsChangedListener {
+    ctor public SubscriptionManager.OnSubscriptionsChangedListener();
+    method public void onSubscriptionsChanged();
+  }
+
+  public final class SubscriptionPlan implements android.os.Parcelable {
+    method public java.util.Iterator<android.util.Range<java.time.ZonedDateTime>> cycleIterator();
+    method public int describeContents();
+    method public int getDataLimitBehavior();
+    method public long getDataLimitBytes();
+    method public long getDataUsageBytes();
+    method public long getDataUsageTime();
+    method @NonNull public int[] getNetworkTypes();
+    method @Nullable public CharSequence getSummary();
+    method @Nullable public CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long BYTES_UNKNOWN = -1L; // 0xffffffffffffffffL
+    field public static final long BYTES_UNLIMITED = 9223372036854775807L; // 0x7fffffffffffffffL
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SubscriptionPlan> CREATOR;
+    field public static final int LIMIT_BEHAVIOR_BILLED = 1; // 0x1
+    field public static final int LIMIT_BEHAVIOR_DISABLED = 0; // 0x0
+    field public static final int LIMIT_BEHAVIOR_THROTTLED = 2; // 0x2
+    field public static final int LIMIT_BEHAVIOR_UNKNOWN = -1; // 0xffffffff
+    field public static final long TIME_UNKNOWN = -1L; // 0xffffffffffffffffL
+  }
+
+  public static class SubscriptionPlan.Builder {
+    method public android.telephony.SubscriptionPlan build();
+    method public static android.telephony.SubscriptionPlan.Builder createNonrecurring(java.time.ZonedDateTime, java.time.ZonedDateTime);
+    method public static android.telephony.SubscriptionPlan.Builder createRecurring(java.time.ZonedDateTime, java.time.Period);
+    method @NonNull public android.telephony.SubscriptionPlan.Builder resetNetworkTypes();
+    method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int);
+    method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long);
+    method @NonNull public android.telephony.SubscriptionPlan.Builder setNetworkTypes(@NonNull int[]);
+    method public android.telephony.SubscriptionPlan.Builder setSummary(@Nullable CharSequence);
+    method public android.telephony.SubscriptionPlan.Builder setTitle(@Nullable CharSequence);
+  }
+
+  public class TelephonyCallback {
+    ctor public TelephonyCallback();
+  }
+
+  public static interface TelephonyCallback.ActiveDataSubscriptionIdListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onActiveDataSubscriptionIdChanged(int);
+  }
+
+  public static interface TelephonyCallback.BarringInfoListener {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onBarringInfoChanged(@NonNull android.telephony.BarringInfo);
+  }
+
+  public static interface TelephonyCallback.CallDisconnectCauseListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallDisconnectCauseChanged(int, int);
+  }
+
+  public static interface TelephonyCallback.CallForwardingIndicatorListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onCallForwardingIndicatorChanged(boolean);
+  }
+
+  public static interface TelephonyCallback.CallStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onCallStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.CarrierNetworkListener {
+    method public void onCarrierNetworkChange(boolean);
+  }
+
+  public static interface TelephonyCallback.CellInfoListener {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onCellInfoChanged(@NonNull java.util.List<android.telephony.CellInfo>);
+  }
+
+  public static interface TelephonyCallback.CellLocationListener {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void onCellLocationChanged(@NonNull android.telephony.CellLocation);
+  }
+
+  public static interface TelephonyCallback.DataActivationStateListener {
+    method public void onDataActivationStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.DataActivityListener {
+    method public void onDataActivity(int);
+  }
+
+  public static interface TelephonyCallback.DataConnectionStateListener {
+    method public void onDataConnectionStateChanged(int, int);
+  }
+
+  public static interface TelephonyCallback.DisplayInfoListener {
+    method public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo);
+  }
+
+  public static interface TelephonyCallback.EmergencyNumberListListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onEmergencyNumberListChanged(@NonNull java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>>);
+  }
+
+  public static interface TelephonyCallback.ImsCallDisconnectCauseListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
+  }
+
+  public static interface TelephonyCallback.MessageWaitingIndicatorListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public void onMessageWaitingIndicatorChanged(boolean);
+  }
+
+  public static interface TelephonyCallback.PhysicalChannelConfigListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPhysicalChannelConfigChanged(@NonNull java.util.List<android.telephony.PhysicalChannelConfig>);
+  }
+
+  public static interface TelephonyCallback.PreciseDataConnectionStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);
+  }
+
+  public static interface TelephonyCallback.RegistrationFailedListener {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void onRegistrationFailed(@NonNull android.telephony.CellIdentity, @NonNull String, int, int, int);
+  }
+
+  public static interface TelephonyCallback.ServiceStateListener {
+    method public void onServiceStateChanged(@NonNull android.telephony.ServiceState);
+  }
+
+  public static interface TelephonyCallback.SignalStrengthsListener {
+    method public void onSignalStrengthsChanged(@NonNull android.telephony.SignalStrength);
+  }
+
+  public static interface TelephonyCallback.UserMobileDataStateListener {
+    method public void onUserMobileDataStateChanged(boolean);
+  }
+
+  public final class TelephonyDisplayInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getNetworkType();
+    method public int getOverrideNetworkType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.TelephonyDisplayInfo> CREATOR;
+    field public static final int OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO = 2; // 0x2
+    field public static final int OVERRIDE_NETWORK_TYPE_LTE_CA = 1; // 0x1
+    field public static final int OVERRIDE_NETWORK_TYPE_NONE = 0; // 0x0
+    field public static final int OVERRIDE_NETWORK_TYPE_NR_ADVANCED = 5; // 0x5
+    field public static final int OVERRIDE_NETWORK_TYPE_NR_NSA = 3; // 0x3
+    field @Deprecated public static final int OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE = 4; // 0x4
+  }
+
+  public class TelephonyManager {
+    method public boolean canChangeDtmfToneLength();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void clearSignalStrengthUpdateRequest(@NonNull android.telephony.SignalStrengthUpdateRequest);
+    method @Nullable public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle);
+    method public android.telephony.TelephonyManager createForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean doesSwitchMultiSimConfigTriggerReboot();
+    method public int getActiveModemCount();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public java.util.List<android.telephony.CellInfo> getAllCellInfo();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public int getCallComposerStatus();
+    method @Deprecated @RequiresPermission(value=android.Manifest.permission.READ_PHONE_STATE, conditional=true) public int getCallState();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getCallStateForSubscription();
+    method public int getCardIdForDefaultEuicc();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) @WorkerThread public android.os.PersistableBundle getCarrierConfig();
+    method public int getCarrierIdFromSimMccMnc();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.telephony.CellLocation getCellLocation();
+    method public int getDataActivity();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getDataNetworkType();
+    method public int getDataState();
+    method @Deprecated @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDeviceId();
+    method @Deprecated @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getDeviceId(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>> getEmergencyNumberList(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public java.util.List<java.lang.String> getEquivalentHomePlmns();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String[] getForbiddenPlmns();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getGroupIdLevel1();
+    method public String getIccAuthentication(int, int, String);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getImei();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getImei(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.READ_SMS, android.Manifest.permission.READ_PHONE_NUMBERS}) public String getLine1Number();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public String getManualNetworkSelectionPlmn();
+    method @Nullable public String getManufacturerCode();
+    method @Nullable public String getManufacturerCode(int);
+    method public static long getMaximumCallComposerPictureSize();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getMeid();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getMeid(int);
+    method public String getMmsUAProfUrl();
+    method public String getMmsUserAgent();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getNai();
+    method public String getNetworkCountryIso();
+    method @NonNull public String getNetworkCountryIso(int);
+    method public String getNetworkOperator();
+    method public String getNetworkOperatorName();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public int getNetworkSelectionMode();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getNetworkSlicingConfiguration(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.telephony.data.NetworkSlicingConfig,android.telephony.TelephonyManager.NetworkSlicingException>);
+    method public String getNetworkSpecifier();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getNetworkType();
+    method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method @Deprecated public int getPhoneCount();
+    method public int getPhoneType();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PHONE_STATE}) public int getPreferredOpportunisticDataSubscription();
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_COARSE_LOCATION}) public android.telephony.ServiceState getServiceState();
+    method @Nullable public android.telephony.SignalStrength getSignalStrength();
+    method public int getSimCarrierId();
+    method @Nullable public CharSequence getSimCarrierIdName();
+    method public String getSimCountryIso();
+    method public String getSimOperator();
+    method public String getSimOperatorName();
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSimSerialNumber();
+    method public int getSimSpecificCarrierId();
+    method @Nullable public CharSequence getSimSpecificCarrierIdName();
+    method public int getSimState();
+    method public int getSimState(int);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSubscriberId();
+    method public int getSubscriptionId();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getSubscriptionId(@NonNull android.telecom.PhoneAccountHandle);
+    method public int getSupportedModemCount();
+    method @Nullable public String getTypeAllocationCode();
+    method @Nullable public String getTypeAllocationCode(int);
+    method @NonNull @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public java.util.List<android.telephony.UiccCardInfo> getUiccCardsInfo();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVisualVoicemailPackageName();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailAlphaTag();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getVoiceMailNumber();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getVoiceNetworkType();
+    method @Nullable public android.net.Uri getVoicemailRingtoneUri(android.telecom.PhoneAccountHandle);
+    method public boolean hasCarrierPrivileges();
+    method public boolean hasIccCard();
+    method @Deprecated public boolean iccCloseLogicalChannel(int);
+    method @Deprecated public byte[] iccExchangeSimIO(int, int, int, int, int, String);
+    method @Deprecated public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(String);
+    method @Deprecated public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(String, int);
+    method @Deprecated public String iccTransmitApduBasicChannel(int, int, int, int, int, String);
+    method @Deprecated public String iccTransmitApduLogicalChannel(int, int, int, int, int, int, String);
+    method public boolean isConcurrentVoiceAndDataSupported();
+    method public boolean isDataCapable();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public boolean isDataConnectionAllowed();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataEnabled();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataEnabledForReason(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_NETWORK_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isDataRoamingEnabled();
+    method public boolean isEmergencyNumber(@NonNull String);
+    method public boolean isHearingAidCompatibilitySupported();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, "android.permission.READ_PRIVILEGED_PHONE_STATE"}) public boolean isManualNetworkSelectionAllowed();
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isModemEnabledForSlot(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int isMultiSimSupported();
+    method public boolean isNetworkRoaming();
+    method public boolean isRadioInterfaceCapabilitySupported(@NonNull String);
+    method public boolean isRttSupported();
+    method public boolean isSmsCapable();
+    method @Deprecated public boolean isTtyModeSupported();
+    method public boolean isVoiceCapable();
+    method public boolean isVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle);
+    method public boolean isWorldPhone();
+    method @Deprecated public void listen(android.telephony.PhoneStateListener, int);
+    method public void registerTelephonyCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestCellInfoUpdate(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CellInfoCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, java.util.concurrent.Executor, android.telephony.TelephonyScanManager.NetworkScanCallback);
+    method public void sendDialerSpecialCode(String);
+    method @Deprecated public String sendEnvelopeWithStatus(String);
+    method @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void sendUssdRequest(String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler);
+    method public void sendVisualVoicemailSms(String, int, String, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCallComposerStatus(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabledForReason(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setForbiddenPlmns(@NonNull java.util.List<java.lang.String>);
+    method public boolean setLine1NumberForDisplay(String, String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setNetworkSelectionModeAutomatic();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setNetworkSelectionModeManual(String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setNetworkSelectionModeManual(@NonNull String, boolean, int);
+    method public boolean setOperatorBrandOverride(String);
+    method public boolean setPreferredNetworkTypeToGlobal();
+    method public void setPreferredOpportunisticDataSubscription(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSignalStrengthUpdateRequest(@NonNull android.telephony.SignalStrengthUpdateRequest);
+    method public void setVisualVoicemailSmsFilterSettings(android.telephony.VisualVoicemailSmsFilterSettings);
+    method public boolean setVoiceMailNumber(String, String);
+    method @Deprecated public void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri);
+    method @Deprecated public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void switchMultiSimConfig(int);
+    method public void unregisterTelephonyCallback(@NonNull android.telephony.TelephonyCallback);
+    method public void updateAvailableNetworks(@NonNull java.util.List<android.telephony.AvailableNetworkInfo>, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method public void uploadCallComposerPicture(@NonNull java.nio.file.Path, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.os.ParcelUuid,android.telephony.TelephonyManager.CallComposerException>);
+    method public void uploadCallComposerPicture(@NonNull java.io.InputStream, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.os.ParcelUuid,android.telephony.TelephonyManager.CallComposerException>);
+    field public static final String ACTION_CARRIER_MESSAGING_CLIENT_SERVICE = "android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE";
+    field public static final String ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE = "android.telephony.action.CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE";
+    field public static final String ACTION_CARRIER_SIGNAL_PCO_VALUE = "android.telephony.action.CARRIER_SIGNAL_PCO_VALUE";
+    field public static final String ACTION_CARRIER_SIGNAL_REDIRECTED = "android.telephony.action.CARRIER_SIGNAL_REDIRECTED";
+    field public static final String ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED = "android.telephony.action.CARRIER_SIGNAL_REQUEST_NETWORK_FAILED";
+    field public static final String ACTION_CARRIER_SIGNAL_RESET = "android.telephony.action.CARRIER_SIGNAL_RESET";
+    field public static final String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL";
+    field public static final String ACTION_MULTI_SIM_CONFIG_CHANGED = "android.telephony.action.MULTI_SIM_CONFIG_CHANGED";
+    field public static final String ACTION_NETWORK_COUNTRY_CHANGED = "android.telephony.action.NETWORK_COUNTRY_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE";
+    field public static final String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE";
+    field public static final String ACTION_SECRET_CODE = "android.telephony.action.SECRET_CODE";
+    field public static final String ACTION_SHOW_VOICEMAIL_NOTIFICATION = "android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION";
+    field public static final String ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_CARRIER_IDENTITY_CHANGED";
+    field public static final String ACTION_SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED";
+    field public static final int APPTYPE_CSIM = 4; // 0x4
+    field public static final int APPTYPE_ISIM = 5; // 0x5
+    field public static final int APPTYPE_RUIM = 3; // 0x3
+    field public static final int APPTYPE_SIM = 1; // 0x1
+    field public static final int APPTYPE_UNKNOWN = 0; // 0x0
+    field public static final int APPTYPE_USIM = 2; // 0x2
+    field public static final int AUTHTYPE_EAP_AKA = 129; // 0x81
+    field public static final int AUTHTYPE_EAP_SIM = 128; // 0x80
+    field public static final int CALL_COMPOSER_STATUS_OFF = 0; // 0x0
+    field public static final int CALL_COMPOSER_STATUS_ON = 1; // 0x1
+    field public static final int CALL_STATE_IDLE = 0; // 0x0
+    field public static final int CALL_STATE_OFFHOOK = 2; // 0x2
+    field public static final int CALL_STATE_RINGING = 1; // 0x1
+    field public static final String CAPABILITY_SLICING_CONFIG_SUPPORTED = "CAPABILITY_SLICING_CONFIG_SUPPORTED";
+    field public static final int CDMA_ROAMING_MODE_AFFILIATED = 1; // 0x1
+    field public static final int CDMA_ROAMING_MODE_ANY = 2; // 0x2
+    field public static final int CDMA_ROAMING_MODE_HOME = 0; // 0x0
+    field public static final int CDMA_ROAMING_MODE_RADIO_DEFAULT = -1; // 0xffffffff
+    field public static final int DATA_ACTIVITY_DORMANT = 4; // 0x4
+    field public static final int DATA_ACTIVITY_IN = 1; // 0x1
+    field public static final int DATA_ACTIVITY_INOUT = 3; // 0x3
+    field public static final int DATA_ACTIVITY_NONE = 0; // 0x0
+    field public static final int DATA_ACTIVITY_OUT = 2; // 0x2
+    field public static final int DATA_CONNECTED = 2; // 0x2
+    field public static final int DATA_CONNECTING = 1; // 0x1
+    field public static final int DATA_DISCONNECTED = 0; // 0x0
+    field public static final int DATA_DISCONNECTING = 4; // 0x4
+    field public static final int DATA_ENABLED_REASON_CARRIER = 2; // 0x2
+    field public static final int DATA_ENABLED_REASON_POLICY = 1; // 0x1
+    field public static final int DATA_ENABLED_REASON_THERMAL = 3; // 0x3
+    field public static final int DATA_ENABLED_REASON_USER = 0; // 0x0
+    field public static final int DATA_SUSPENDED = 3; // 0x3
+    field public static final int DATA_UNKNOWN = -1; // 0xffffffff
+    field public static final int ERI_FLASH = 2; // 0x2
+    field public static final int ERI_OFF = 1; // 0x1
+    field public static final int ERI_ON = 0; // 0x0
+    field public static final String EXTRA_ACTIVE_SIM_SUPPORTED_COUNT = "android.telephony.extra.ACTIVE_SIM_SUPPORTED_COUNT";
+    field public static final String EXTRA_APN_PROTOCOL = "android.telephony.extra.APN_PROTOCOL";
+    field public static final String EXTRA_APN_TYPE = "android.telephony.extra.APN_TYPE";
+    field public static final String EXTRA_CALL_VOICEMAIL_INTENT = "android.telephony.extra.CALL_VOICEMAIL_INTENT";
+    field public static final String EXTRA_CARRIER_ID = "android.telephony.extra.CARRIER_ID";
+    field public static final String EXTRA_CARRIER_NAME = "android.telephony.extra.CARRIER_NAME";
+    field public static final String EXTRA_DATA_FAIL_CAUSE = "android.telephony.extra.DATA_FAIL_CAUSE";
+    field public static final String EXTRA_DEFAULT_NETWORK_AVAILABLE = "android.telephony.extra.DEFAULT_NETWORK_AVAILABLE";
+    field public static final String EXTRA_HIDE_PUBLIC_SETTINGS = "android.telephony.extra.HIDE_PUBLIC_SETTINGS";
+    field @Deprecated public static final String EXTRA_INCOMING_NUMBER = "incoming_number";
+    field public static final String EXTRA_IS_REFRESH = "android.telephony.extra.IS_REFRESH";
+    field public static final String EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT = "android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT";
+    field public static final String EXTRA_NETWORK_COUNTRY = "android.telephony.extra.NETWORK_COUNTRY";
+    field public static final String EXTRA_NOTIFICATION_COUNT = "android.telephony.extra.NOTIFICATION_COUNT";
+    field public static final String EXTRA_PCO_ID = "android.telephony.extra.PCO_ID";
+    field public static final String EXTRA_PCO_VALUE = "android.telephony.extra.PCO_VALUE";
+    field public static final String EXTRA_PHONE_ACCOUNT_HANDLE = "android.telephony.extra.PHONE_ACCOUNT_HANDLE";
+    field public static final String EXTRA_REDIRECTION_URL = "android.telephony.extra.REDIRECTION_URL";
+    field public static final String EXTRA_SPECIFIC_CARRIER_ID = "android.telephony.extra.SPECIFIC_CARRIER_ID";
+    field public static final String EXTRA_SPECIFIC_CARRIER_NAME = "android.telephony.extra.SPECIFIC_CARRIER_NAME";
+    field public static final String EXTRA_STATE = "state";
+    field public static final String EXTRA_STATE_IDLE;
+    field public static final String EXTRA_STATE_OFFHOOK;
+    field public static final String EXTRA_STATE_RINGING;
+    field public static final String EXTRA_SUBSCRIPTION_ID = "android.telephony.extra.SUBSCRIPTION_ID";
+    field public static final String EXTRA_VOICEMAIL_NUMBER = "android.telephony.extra.VOICEMAIL_NUMBER";
+    field public static final String METADATA_HIDE_VOICEMAIL_SETTINGS_MENU = "android.telephony.HIDE_VOICEMAIL_SETTINGS_MENU";
+    field public static final int MULTISIM_ALLOWED = 0; // 0x0
+    field public static final int MULTISIM_NOT_SUPPORTED_BY_CARRIER = 2; // 0x2
+    field public static final int MULTISIM_NOT_SUPPORTED_BY_HARDWARE = 1; // 0x1
+    field public static final int NETWORK_SELECTION_MODE_AUTO = 1; // 0x1
+    field public static final int NETWORK_SELECTION_MODE_MANUAL = 2; // 0x2
+    field public static final int NETWORK_SELECTION_MODE_UNKNOWN = 0; // 0x0
+    field public static final int NETWORK_TYPE_1xRTT = 7; // 0x7
+    field public static final int NETWORK_TYPE_CDMA = 4; // 0x4
+    field public static final int NETWORK_TYPE_EDGE = 2; // 0x2
+    field public static final int NETWORK_TYPE_EHRPD = 14; // 0xe
+    field public static final int NETWORK_TYPE_EVDO_0 = 5; // 0x5
+    field public static final int NETWORK_TYPE_EVDO_A = 6; // 0x6
+    field public static final int NETWORK_TYPE_EVDO_B = 12; // 0xc
+    field public static final int NETWORK_TYPE_GPRS = 1; // 0x1
+    field public static final int NETWORK_TYPE_GSM = 16; // 0x10
+    field public static final int NETWORK_TYPE_HSDPA = 8; // 0x8
+    field public static final int NETWORK_TYPE_HSPA = 10; // 0xa
+    field public static final int NETWORK_TYPE_HSPAP = 15; // 0xf
+    field public static final int NETWORK_TYPE_HSUPA = 9; // 0x9
+    field public static final int NETWORK_TYPE_IDEN = 11; // 0xb
+    field public static final int NETWORK_TYPE_IWLAN = 18; // 0x12
+    field public static final int NETWORK_TYPE_LTE = 13; // 0xd
+    field public static final int NETWORK_TYPE_NR = 20; // 0x14
+    field public static final int NETWORK_TYPE_TD_SCDMA = 17; // 0x11
+    field public static final int NETWORK_TYPE_UMTS = 3; // 0x3
+    field public static final int NETWORK_TYPE_UNKNOWN = 0; // 0x0
+    field public static final int PHONE_TYPE_CDMA = 2; // 0x2
+    field public static final int PHONE_TYPE_GSM = 1; // 0x1
+    field public static final int PHONE_TYPE_NONE = 0; // 0x0
+    field public static final int PHONE_TYPE_SIP = 3; // 0x3
+    field public static final int SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION = 2; // 0x2
+    field public static final int SET_OPPORTUNISTIC_SUB_NO_OPPORTUNISTIC_SUB_AVAILABLE = 3; // 0x3
+    field public static final int SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION = 4; // 0x4
+    field public static final int SET_OPPORTUNISTIC_SUB_SUCCESS = 0; // 0x0
+    field public static final int SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED = 1; // 0x1
+    field public static final int SIM_STATE_ABSENT = 1; // 0x1
+    field public static final int SIM_STATE_CARD_IO_ERROR = 8; // 0x8
+    field public static final int SIM_STATE_CARD_RESTRICTED = 9; // 0x9
+    field public static final int SIM_STATE_NETWORK_LOCKED = 4; // 0x4
+    field public static final int SIM_STATE_NOT_READY = 6; // 0x6
+    field public static final int SIM_STATE_PERM_DISABLED = 7; // 0x7
+    field public static final int SIM_STATE_PIN_REQUIRED = 2; // 0x2
+    field public static final int SIM_STATE_PUK_REQUIRED = 3; // 0x3
+    field public static final int SIM_STATE_READY = 5; // 0x5
+    field public static final int SIM_STATE_UNKNOWN = 0; // 0x0
+    field public static final int UNINITIALIZED_CARD_ID = -2; // 0xfffffffe
+    field public static final int UNKNOWN_CARRIER_ID = -1; // 0xffffffff
+    field public static final int UNSUPPORTED_CARD_ID = -1; // 0xffffffff
+    field public static final int UPDATE_AVAILABLE_NETWORKS_ABORTED = 2; // 0x2
+    field public static final int UPDATE_AVAILABLE_NETWORKS_DISABLE_MODEM_FAIL = 5; // 0x5
+    field public static final int UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL = 6; // 0x6
+    field public static final int UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS = 3; // 0x3
+    field public static final int UPDATE_AVAILABLE_NETWORKS_MULTIPLE_NETWORKS_NOT_SUPPORTED = 7; // 0x7
+    field public static final int UPDATE_AVAILABLE_NETWORKS_NO_CARRIER_PRIVILEGE = 4; // 0x4
+    field public static final int UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE = 8; // 0x8
+    field public static final int UPDATE_AVAILABLE_NETWORKS_REMOTE_SERVICE_EXCEPTION = 9; // 0x9
+    field public static final int UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED = 10; // 0xa
+    field public static final int UPDATE_AVAILABLE_NETWORKS_SUCCESS = 0; // 0x0
+    field public static final int UPDATE_AVAILABLE_NETWORKS_UNKNOWN_FAILURE = 1; // 0x1
+    field public static final int USSD_ERROR_SERVICE_UNAVAIL = -2; // 0xfffffffe
+    field public static final int USSD_RETURN_FAILURE = -1; // 0xffffffff
+    field public static final String VVM_TYPE_CVVM = "vvm_type_cvvm";
+    field public static final String VVM_TYPE_OMTP = "vvm_type_omtp";
+  }
+
+  public static class TelephonyManager.CallComposerException extends java.lang.Exception {
+    ctor public TelephonyManager.CallComposerException(int, @Nullable java.io.IOException);
+    method public int getErrorCode();
+    method @Nullable public java.io.IOException getIOException();
+    field public static final int ERROR_AUTHENTICATION_FAILED = 3; // 0x3
+    field public static final int ERROR_FILE_TOO_LARGE = 2; // 0x2
+    field public static final int ERROR_INPUT_CLOSED = 4; // 0x4
+    field public static final int ERROR_IO_EXCEPTION = 5; // 0x5
+    field public static final int ERROR_NETWORK_UNAVAILABLE = 6; // 0x6
+    field public static final int ERROR_REMOTE_END_CLOSED = 1; // 0x1
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public abstract static class TelephonyManager.CellInfoCallback {
+    ctor public TelephonyManager.CellInfoCallback();
+    method public abstract void onCellInfo(@NonNull java.util.List<android.telephony.CellInfo>);
+    method public void onError(int, @Nullable Throwable);
+    field public static final int ERROR_MODEM_ERROR = 2; // 0x2
+    field public static final int ERROR_TIMEOUT = 1; // 0x1
+  }
+
+  public class TelephonyManager.ModemErrorException extends android.telephony.TelephonyManager.NetworkSlicingException {
+  }
+
+  public static class TelephonyManager.NetworkSlicingException extends java.lang.Exception {
+  }
+
+  public class TelephonyManager.TimeoutException extends android.telephony.TelephonyManager.NetworkSlicingException {
+  }
+
+  public abstract static class TelephonyManager.UssdResponseCallback {
+    ctor public TelephonyManager.UssdResponseCallback();
+    method public void onReceiveUssdResponse(android.telephony.TelephonyManager, String, CharSequence);
+    method public void onReceiveUssdResponseFailed(android.telephony.TelephonyManager, String, int);
+  }
+
+  public final class TelephonyScanManager {
+    ctor public TelephonyScanManager();
+  }
+
+  public abstract static class TelephonyScanManager.NetworkScanCallback {
+    ctor public TelephonyScanManager.NetworkScanCallback();
+    method public void onComplete();
+    method public void onError(int);
+    method public void onResults(java.util.List<android.telephony.CellInfo>);
+  }
+
+  public final class UiccCardInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCardId();
+    method @Nullable public String getEid();
+    method @Nullable public String getIccId();
+    method public int getSlotIndex();
+    method public boolean isEuicc();
+    method public boolean isRemovable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccCardInfo> CREATOR;
+  }
+
+  public abstract class VisualVoicemailService extends android.app.Service {
+    ctor public VisualVoicemailService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @MainThread public abstract void onCellServiceConnected(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle);
+    method @MainThread public abstract void onSimRemoved(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telecom.PhoneAccountHandle);
+    method @MainThread public abstract void onSmsReceived(android.telephony.VisualVoicemailService.VisualVoicemailTask, android.telephony.VisualVoicemailSms);
+    method @MainThread public abstract void onStopped(android.telephony.VisualVoicemailService.VisualVoicemailTask);
+    field public static final String SERVICE_INTERFACE = "android.telephony.VisualVoicemailService";
+  }
+
+  public static class VisualVoicemailService.VisualVoicemailTask {
+    method public final void finish();
+  }
+
+  public final class VisualVoicemailSms implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.os.Bundle getFields();
+    method public String getMessageBody();
+    method public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method public String getPrefix();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VisualVoicemailSms> CREATOR;
+  }
+
+  public final class VisualVoicemailSmsFilterSettings implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VisualVoicemailSmsFilterSettings> CREATOR;
+    field public static final int DESTINATION_PORT_ANY = -1; // 0xffffffff
+    field public static final int DESTINATION_PORT_DATA_SMS = -2; // 0xfffffffe
+    field public final String clientPrefix;
+    field public final int destinationPort;
+    field public final java.util.List<java.lang.String> originatingNumbers;
+  }
+
+  public static class VisualVoicemailSmsFilterSettings.Builder {
+    ctor public VisualVoicemailSmsFilterSettings.Builder();
+    method public android.telephony.VisualVoicemailSmsFilterSettings build();
+    method public android.telephony.VisualVoicemailSmsFilterSettings.Builder setClientPrefix(String);
+    method public android.telephony.VisualVoicemailSmsFilterSettings.Builder setDestinationPort(int);
+    method public android.telephony.VisualVoicemailSmsFilterSettings.Builder setOriginatingNumbers(java.util.List<java.lang.String>);
+  }
+
+}
+
+package android.telephony.cdma {
+
+  @Deprecated public class CdmaCellLocation extends android.telephony.CellLocation {
+    ctor @Deprecated public CdmaCellLocation();
+    ctor @Deprecated public CdmaCellLocation(android.os.Bundle);
+    method @Deprecated public static double convertQuartSecToDecDegrees(int);
+    method @Deprecated public void fillInNotifierBundle(android.os.Bundle);
+    method @Deprecated public int getBaseStationId();
+    method @Deprecated public int getBaseStationLatitude();
+    method @Deprecated public int getBaseStationLongitude();
+    method @Deprecated public int getNetworkId();
+    method @Deprecated public int getSystemId();
+    method @Deprecated public void setCellLocationData(int, int, int);
+    method @Deprecated public void setCellLocationData(int, int, int, int, int);
+    method @Deprecated public void setStateInvalid();
+  }
+
+}
+
+package android.telephony.data {
+
+  public class ApnSetting implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getApnName();
+    method public int getApnTypeBitmask();
+    method public int getAuthType();
+    method public int getCarrierId();
+    method public String getEntryName();
+    method public int getId();
+    method @Deprecated public java.net.InetAddress getMmsProxyAddress();
+    method public String getMmsProxyAddressAsString();
+    method public int getMmsProxyPort();
+    method public android.net.Uri getMmsc();
+    method public int getMvnoType();
+    method public int getNetworkTypeBitmask();
+    method public String getOperatorNumeric();
+    method public String getPassword();
+    method public int getProtocol();
+    method @Deprecated public java.net.InetAddress getProxyAddress();
+    method public String getProxyAddressAsString();
+    method public int getProxyPort();
+    method public int getRoamingProtocol();
+    method public String getUser();
+    method public boolean isEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int AUTH_TYPE_CHAP = 2; // 0x2
+    field public static final int AUTH_TYPE_NONE = 0; // 0x0
+    field public static final int AUTH_TYPE_PAP = 1; // 0x1
+    field public static final int AUTH_TYPE_PAP_OR_CHAP = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.ApnSetting> CREATOR;
+    field public static final int MVNO_TYPE_GID = 2; // 0x2
+    field public static final int MVNO_TYPE_ICCID = 3; // 0x3
+    field public static final int MVNO_TYPE_IMSI = 1; // 0x1
+    field public static final int MVNO_TYPE_SPN = 0; // 0x0
+    field public static final int PROTOCOL_IP = 0; // 0x0
+    field public static final int PROTOCOL_IPV4V6 = 2; // 0x2
+    field public static final int PROTOCOL_IPV6 = 1; // 0x1
+    field public static final int PROTOCOL_NON_IP = 4; // 0x4
+    field public static final int PROTOCOL_PPP = 3; // 0x3
+    field public static final int PROTOCOL_UNSTRUCTURED = 5; // 0x5
+    field public static final int TYPE_BIP = 8192; // 0x2000
+    field public static final int TYPE_CBS = 128; // 0x80
+    field public static final int TYPE_DEFAULT = 17; // 0x11
+    field public static final int TYPE_DUN = 8; // 0x8
+    field public static final int TYPE_EMERGENCY = 512; // 0x200
+    field public static final int TYPE_FOTA = 32; // 0x20
+    field public static final int TYPE_HIPRI = 16; // 0x10
+    field public static final int TYPE_IA = 256; // 0x100
+    field public static final int TYPE_IMS = 64; // 0x40
+    field public static final int TYPE_MCX = 1024; // 0x400
+    field public static final int TYPE_MMS = 2; // 0x2
+    field public static final int TYPE_SUPL = 4; // 0x4
+    field public static final int TYPE_VSIM = 4096; // 0x1000
+    field public static final int TYPE_XCAP = 2048; // 0x800
+  }
+
+  public static class ApnSetting.Builder {
+    ctor public ApnSetting.Builder();
+    method public android.telephony.data.ApnSetting build();
+    method @NonNull public android.telephony.data.ApnSetting.Builder setApnName(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setApnTypeBitmask(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setAuthType(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setCarrierEnabled(boolean);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setCarrierId(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setEntryName(@Nullable String);
+    method @Deprecated public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(java.net.InetAddress);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMmsProxyAddress(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMmsProxyPort(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMmsc(@Nullable android.net.Uri);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setMvnoType(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setNetworkTypeBitmask(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setOperatorNumeric(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setPassword(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setProtocol(int);
+    method @Deprecated public android.telephony.data.ApnSetting.Builder setProxyAddress(java.net.InetAddress);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setProxyAddress(@Nullable String);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setProxyPort(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setRoamingProtocol(int);
+    method @NonNull public android.telephony.data.ApnSetting.Builder setUser(@Nullable String);
+  }
+
+  public final class NetworkSliceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0xffffffff, to=0xfffffe) public int getMappedHplmnSliceDifferentiator();
+    method public int getMappedHplmnSliceServiceType();
+    method @IntRange(from=0xffffffff, to=0xfffffe) public int getSliceDifferentiator();
+    method public int getSliceServiceType();
+    method public int getStatus();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.NetworkSliceInfo> CREATOR;
+    field public static final int SLICE_DIFFERENTIATOR_NO_SLICE = -1; // 0xffffffff
+    field public static final int SLICE_SERVICE_TYPE_EMBB = 1; // 0x1
+    field public static final int SLICE_SERVICE_TYPE_MIOT = 3; // 0x3
+    field public static final int SLICE_SERVICE_TYPE_NONE = 0; // 0x0
+    field public static final int SLICE_SERVICE_TYPE_URLLC = 2; // 0x2
+    field public static final int SLICE_STATUS_ALLOWED = 2; // 0x2
+    field public static final int SLICE_STATUS_CONFIGURED = 1; // 0x1
+    field public static final int SLICE_STATUS_DEFAULT_CONFIGURED = 5; // 0x5
+    field public static final int SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN = 3; // 0x3
+    field public static final int SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_REGISTERED_AREA = 4; // 0x4
+    field public static final int SLICE_STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class NetworkSliceInfo.Builder {
+    ctor public NetworkSliceInfo.Builder();
+    method @NonNull public android.telephony.data.NetworkSliceInfo build();
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setMappedHplmnSliceDifferentiator(@IntRange(from=0xffffffff, to=0xfffffe) int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setMappedHplmnSliceServiceType(int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setSliceDifferentiator(@IntRange(from=0xffffffff, to=0xfffffe) int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setSliceServiceType(int);
+    method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setStatus(int);
+  }
+
+  public final class NetworkSlicingConfig implements android.os.Parcelable {
+    ctor public NetworkSlicingConfig();
+    method public int describeContents();
+    method @NonNull public java.util.List<android.telephony.data.NetworkSliceInfo> getSliceInfo();
+    method @NonNull public java.util.List<android.telephony.data.UrspRule> getUrspRules();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.NetworkSlicingConfig> CREATOR;
+  }
+
+  public final class RouteSelectionDescriptor implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getDataNetworkName();
+    method @IntRange(from=0x0, to=0xff) public int getPrecedence();
+    method public int getSessionType();
+    method @NonNull public java.util.List<android.telephony.data.NetworkSliceInfo> getSliceInfo();
+    method public int getSscMode();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.RouteSelectionDescriptor> CREATOR;
+    field public static final int ROUTE_SSC_MODE_1 = 1; // 0x1
+    field public static final int ROUTE_SSC_MODE_2 = 2; // 0x2
+    field public static final int ROUTE_SSC_MODE_3 = 3; // 0x3
+    field public static final int SESSION_TYPE_IPV4 = 0; // 0x0
+    field public static final int SESSION_TYPE_IPV4V6 = 2; // 0x2
+    field public static final int SESSION_TYPE_IPV6 = 1; // 0x1
+  }
+
+  public final class TrafficDescriptor implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getDataNetworkName();
+    method @Nullable public byte[] getOsAppId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.TrafficDescriptor> CREATOR;
+  }
+
+  public static final class TrafficDescriptor.Builder {
+    ctor public TrafficDescriptor.Builder();
+    method @NonNull public android.telephony.data.TrafficDescriptor build();
+    method @NonNull public android.telephony.data.TrafficDescriptor.Builder setDataNetworkName(@NonNull String);
+    method @NonNull public android.telephony.data.TrafficDescriptor.Builder setOsAppId(@NonNull byte[]);
+  }
+
+  public final class UrspRule implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0x0, to=0xff) public int getPrecedence();
+    method @NonNull public java.util.List<android.telephony.data.RouteSelectionDescriptor> getRouteSelectionDescriptor();
+    method @NonNull public java.util.List<android.telephony.data.TrafficDescriptor> getTrafficDescriptors();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.UrspRule> CREATOR;
+  }
+
+}
+
+package android.telephony.emergency {
+
+  public final class EmergencyNumber implements java.lang.Comparable<android.telephony.emergency.EmergencyNumber> android.os.Parcelable {
+    method public int compareTo(@NonNull android.telephony.emergency.EmergencyNumber);
+    method public int describeContents();
+    method @NonNull public String getCountryIso();
+    method public int getEmergencyCallRouting();
+    method @NonNull public java.util.List<java.lang.Integer> getEmergencyNumberSources();
+    method @NonNull public java.util.List<java.lang.Integer> getEmergencyServiceCategories();
+    method @NonNull public java.util.List<java.lang.String> getEmergencyUrns();
+    method @NonNull public String getMnc();
+    method @NonNull public String getNumber();
+    method public boolean isFromSources(int);
+    method public boolean isInEmergencyServiceCategories(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.emergency.EmergencyNumber> CREATOR;
+    field public static final int EMERGENCY_CALL_ROUTING_EMERGENCY = 1; // 0x1
+    field public static final int EMERGENCY_CALL_ROUTING_NORMAL = 2; // 0x2
+    field public static final int EMERGENCY_CALL_ROUTING_UNKNOWN = 0; // 0x0
+    field public static final int EMERGENCY_NUMBER_SOURCE_DATABASE = 16; // 0x10
+    field public static final int EMERGENCY_NUMBER_SOURCE_DEFAULT = 8; // 0x8
+    field public static final int EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG = 4; // 0x4
+    field public static final int EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING = 1; // 0x1
+    field public static final int EMERGENCY_NUMBER_SOURCE_SIM = 2; // 0x2
+    field public static final int EMERGENCY_SERVICE_CATEGORY_AIEC = 64; // 0x40
+    field public static final int EMERGENCY_SERVICE_CATEGORY_AMBULANCE = 2; // 0x2
+    field public static final int EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE = 4; // 0x4
+    field public static final int EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD = 8; // 0x8
+    field public static final int EMERGENCY_SERVICE_CATEGORY_MIEC = 32; // 0x20
+    field public static final int EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE = 16; // 0x10
+    field public static final int EMERGENCY_SERVICE_CATEGORY_POLICE = 1; // 0x1
+    field public static final int EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED = 0; // 0x0
+  }
+
+}
+
+package android.telephony.euicc {
+
+  public final class DownloadableSubscription implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.telephony.euicc.DownloadableSubscription forActivationCode(String);
+    method @Nullable public String getConfirmationCode();
+    method @Nullable public String getEncodedActivationCode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.DownloadableSubscription> CREATOR;
+  }
+
+  public static final class DownloadableSubscription.Builder {
+    ctor public DownloadableSubscription.Builder(@NonNull android.telephony.euicc.DownloadableSubscription);
+    ctor public DownloadableSubscription.Builder(@NonNull String);
+    method @NonNull public android.telephony.euicc.DownloadableSubscription build();
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setConfirmationCode(@NonNull String);
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setEncodedActivationCode(@NonNull String);
+  }
+
+  public final class EuiccInfo implements android.os.Parcelable {
+    ctor public EuiccInfo(@Nullable String);
+    method public int describeContents();
+    method @Nullable public String getOsVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccInfo> CREATOR;
+  }
+
+  public class EuiccManager {
+    method @NonNull public android.telephony.euicc.EuiccManager createForCardId(int);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void deleteSubscription(int, android.app.PendingIntent);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void downloadSubscription(android.telephony.euicc.DownloadableSubscription, boolean, android.app.PendingIntent);
+    method @Nullable public String getEid();
+    method @Nullable public android.telephony.euicc.EuiccInfo getEuiccInfo();
+    method public boolean isEnabled();
+    method public void startResolutionActivity(android.app.Activity, int, android.content.Intent, android.app.PendingIntent) throws android.content.IntentSender.SendIntentException;
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, android.app.PendingIntent);
+    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void updateSubscriptionNickname(int, @Nullable String, @NonNull android.app.PendingIntent);
+    field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";
+    field public static final String ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE = "android.telephony.euicc.action.NOTIFY_CARRIER_SETUP_INCOMPLETE";
+    field public static final String ACTION_START_EUICC_ACTIVATION = "android.telephony.euicc.action.START_EUICC_ACTIVATION";
+    field public static final int EMBEDDED_SUBSCRIPTION_RESULT_ERROR = 2; // 0x2
+    field public static final int EMBEDDED_SUBSCRIPTION_RESULT_OK = 0; // 0x0
+    field public static final int EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR = 1; // 0x1
+    field public static final int ERROR_ADDRESS_MISSING = 10011; // 0x271b
+    field public static final int ERROR_CARRIER_LOCKED = 10000; // 0x2710
+    field public static final int ERROR_CERTIFICATE_ERROR = 10012; // 0x271c
+    field public static final int ERROR_CONNECTION_ERROR = 10014; // 0x271e
+    field public static final int ERROR_DISALLOWED_BY_PPR = 10010; // 0x271a
+    field public static final int ERROR_EUICC_INSUFFICIENT_MEMORY = 10004; // 0x2714
+    field public static final int ERROR_EUICC_MISSING = 10006; // 0x2716
+    field public static final int ERROR_INCOMPATIBLE_CARRIER = 10003; // 0x2713
+    field public static final int ERROR_INSTALL_PROFILE = 10009; // 0x2719
+    field public static final int ERROR_INVALID_ACTIVATION_CODE = 10001; // 0x2711
+    field public static final int ERROR_INVALID_CONFIRMATION_CODE = 10002; // 0x2712
+    field public static final int ERROR_INVALID_RESPONSE = 10015; // 0x271f
+    field public static final int ERROR_NO_PROFILES_AVAILABLE = 10013; // 0x271d
+    field public static final int ERROR_OPERATION_BUSY = 10016; // 0x2720
+    field public static final int ERROR_SIM_MISSING = 10008; // 0x2718
+    field public static final int ERROR_TIME_OUT = 10005; // 0x2715
+    field public static final int ERROR_UNSUPPORTED_VERSION = 10007; // 0x2717
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DETAILED_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_ERROR_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_ERROR_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_OPERATION_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE";
+    field public static final String EXTRA_USE_QR_SCANNER = "android.telephony.euicc.extra.USE_QR_SCANNER";
+    field public static final String META_DATA_CARRIER_ICON = "android.telephony.euicc.carriericon";
+    field public static final int OPERATION_APDU = 8; // 0x8
+    field public static final int OPERATION_DOWNLOAD = 5; // 0x5
+    field public static final int OPERATION_EUICC_CARD = 3; // 0x3
+    field public static final int OPERATION_EUICC_GSMA = 7; // 0x7
+    field public static final int OPERATION_HTTP = 11; // 0xb
+    field public static final int OPERATION_METADATA = 6; // 0x6
+    field public static final int OPERATION_SIM_SLOT = 2; // 0x2
+    field public static final int OPERATION_SMDX = 9; // 0x9
+    field public static final int OPERATION_SMDX_SUBJECT_REASON_CODE = 10; // 0xa
+    field public static final int OPERATION_SWITCH = 4; // 0x4
+    field public static final int OPERATION_SYSTEM = 1; // 0x1
+  }
+
+}
+
+package android.telephony.gsm {
+
+  @Deprecated public class GsmCellLocation extends android.telephony.CellLocation {
+    ctor @Deprecated public GsmCellLocation();
+    ctor @Deprecated public GsmCellLocation(android.os.Bundle);
+    method @Deprecated public void fillInNotifierBundle(android.os.Bundle);
+    method @Deprecated public int getCid();
+    method @Deprecated public int getLac();
+    method @Deprecated public int getPsc();
+    method @Deprecated public void setLacAndCid(int, int);
+    method @Deprecated public void setStateInvalid();
+  }
+
+  @Deprecated public final class SmsManager {
+    method @Deprecated public java.util.ArrayList<java.lang.String> divideMessage(String);
+    method @Deprecated public static android.telephony.gsm.SmsManager getDefault();
+    method @Deprecated public void sendDataMessage(String, String, short, byte[], android.app.PendingIntent, android.app.PendingIntent);
+    method @Deprecated public void sendMultipartTextMessage(String, String, java.util.ArrayList<java.lang.String>, java.util.ArrayList<android.app.PendingIntent>, java.util.ArrayList<android.app.PendingIntent>);
+    method @Deprecated public void sendTextMessage(String, String, String, android.app.PendingIntent, android.app.PendingIntent);
+    field @Deprecated public static final int RESULT_ERROR_GENERIC_FAILURE = 1; // 0x1
+    field @Deprecated public static final int RESULT_ERROR_NO_SERVICE = 4; // 0x4
+    field @Deprecated public static final int RESULT_ERROR_NULL_PDU = 3; // 0x3
+    field @Deprecated public static final int RESULT_ERROR_RADIO_OFF = 2; // 0x2
+    field @Deprecated public static final int STATUS_ON_SIM_FREE = 0; // 0x0
+    field @Deprecated public static final int STATUS_ON_SIM_READ = 1; // 0x1
+    field @Deprecated public static final int STATUS_ON_SIM_SENT = 5; // 0x5
+    field @Deprecated public static final int STATUS_ON_SIM_UNREAD = 3; // 0x3
+    field @Deprecated public static final int STATUS_ON_SIM_UNSENT = 7; // 0x7
+  }
+
+  @Deprecated public class SmsMessage {
+    ctor @Deprecated public SmsMessage();
+    method @Deprecated public static int[] calculateLength(CharSequence, boolean);
+    method @Deprecated public static int[] calculateLength(String, boolean);
+    method @Deprecated public static android.telephony.gsm.SmsMessage createFromPdu(byte[]);
+    method @Deprecated public String getDisplayMessageBody();
+    method @Deprecated public String getDisplayOriginatingAddress();
+    method @Deprecated public String getEmailBody();
+    method @Deprecated public String getEmailFrom();
+    method @Deprecated public int getIndexOnSim();
+    method @Deprecated public String getMessageBody();
+    method @Deprecated public android.telephony.gsm.SmsMessage.MessageClass getMessageClass();
+    method @Deprecated public String getOriginatingAddress();
+    method @Deprecated public byte[] getPdu();
+    method @Deprecated public int getProtocolIdentifier();
+    method @Deprecated public String getPseudoSubject();
+    method @Deprecated public String getServiceCenterAddress();
+    method @Deprecated public int getStatus();
+    method @Deprecated public int getStatusOnSim();
+    method @Deprecated public static android.telephony.gsm.SmsMessage.SubmitPdu getSubmitPdu(String, String, String, boolean);
+    method @Deprecated public static android.telephony.gsm.SmsMessage.SubmitPdu getSubmitPdu(String, String, short, byte[], boolean);
+    method @Deprecated public static int getTPLayerLengthForPDU(String);
+    method @Deprecated public long getTimestampMillis();
+    method @Deprecated public byte[] getUserData();
+    method @Deprecated public boolean isCphsMwiMessage();
+    method @Deprecated public boolean isEmail();
+    method @Deprecated public boolean isMWIClearMessage();
+    method @Deprecated public boolean isMWISetMessage();
+    method @Deprecated public boolean isMwiDontStore();
+    method @Deprecated public boolean isReplace();
+    method @Deprecated public boolean isReplyPathPresent();
+    method @Deprecated public boolean isStatusReportMessage();
+    field @Deprecated public static final int ENCODING_16BIT = 3; // 0x3
+    field @Deprecated public static final int ENCODING_7BIT = 1; // 0x1
+    field @Deprecated public static final int ENCODING_8BIT = 2; // 0x2
+    field @Deprecated public static final int ENCODING_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final int MAX_USER_DATA_BYTES = 140; // 0x8c
+    field @Deprecated public static final int MAX_USER_DATA_SEPTETS = 160; // 0xa0
+    field @Deprecated public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153; // 0x99
+  }
+
+  @Deprecated public enum SmsMessage.MessageClass {
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_0;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_1;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_2;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass CLASS_3;
+    enum_constant @Deprecated public static final android.telephony.gsm.SmsMessage.MessageClass UNKNOWN;
+  }
+
+  @Deprecated public static class SmsMessage.SubmitPdu {
+    ctor @Deprecated public SmsMessage.SubmitPdu();
+    field @Deprecated public byte[] encodedMessage;
+    field @Deprecated public byte[] encodedScAddress;
+  }
+
+}
+
+package android.telephony.ims {
+
+  public final class ImsException extends java.lang.Exception {
+    method public int getCode();
+    field public static final int CODE_ERROR_INVALID_SUBSCRIPTION = 3; // 0x3
+    field public static final int CODE_ERROR_SERVICE_UNAVAILABLE = 1; // 0x1
+    field public static final int CODE_ERROR_UNSPECIFIED = 0; // 0x0
+    field public static final int CODE_ERROR_UNSUPPORTED_OPERATION = 2; // 0x2
+  }
+
+  public class ImsManager {
+    method @NonNull public android.telephony.ims.ImsMmTelManager getImsMmTelManager(int);
+    method @NonNull public android.telephony.ims.ImsRcsManager getImsRcsManager(int);
+    field public static final String ACTION_WFC_IMS_REGISTRATION_ERROR = "android.telephony.ims.action.WFC_IMS_REGISTRATION_ERROR";
+    field public static final String EXTRA_WFC_REGISTRATION_FAILURE_MESSAGE = "android.telephony.ims.extra.WFC_REGISTRATION_FAILURE_MESSAGE";
+    field public static final String EXTRA_WFC_REGISTRATION_FAILURE_TITLE = "android.telephony.ims.extra.WFC_REGISTRATION_FAILURE_TITLE";
+  }
+
+  public class ImsMmTelManager implements android.telephony.ims.RegistrationManager {
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public int getVoWiFiModeSetting();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isAdvancedCallingSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isCrossSimCallingEnabled() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isTtyOverVolteEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isVoWiFiRoamingSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isVoWiFiSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public boolean isVtSettingEnabled();
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void registerMmTelCapabilityCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
+    method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public void unregisterMmTelCapabilityCallback(@NonNull android.telephony.ims.ImsMmTelManager.CapabilityCallback);
+    field public static final int WIFI_MODE_CELLULAR_PREFERRED = 1; // 0x1
+    field public static final int WIFI_MODE_WIFI_ONLY = 0; // 0x0
+    field public static final int WIFI_MODE_WIFI_PREFERRED = 2; // 0x2
+  }
+
+  public static class ImsMmTelManager.CapabilityCallback {
+    ctor public ImsMmTelManager.CapabilityCallback();
+    method public void onCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.MmTelFeature.MmTelCapabilities);
+  }
+
+  public class ImsRcsManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @NonNull public android.telephony.ims.RcsUceAdapter getUceAdapter();
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
+    field public static final String ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN = "android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN";
+  }
+
+  public final class ImsReasonInfo implements android.os.Parcelable {
+    ctor public ImsReasonInfo(int, int, @Nullable String);
+    method public int describeContents();
+    method public int getCode();
+    method public int getExtraCode();
+    method @Nullable public String getExtraMessage();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CODE_ACCESS_CLASS_BLOCKED = 1512; // 0x5e8
+    field public static final int CODE_ANSWERED_ELSEWHERE = 1014; // 0x3f6
+    field public static final int CODE_BLACKLISTED_CALL_ID = 506; // 0x1fa
+    field public static final int CODE_CALL_BARRED = 240; // 0xf0
+    field public static final int CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 1100; // 0x44c
+    field public static final int CODE_CALL_END_CAUSE_CALL_PULL = 1016; // 0x3f8
+    field public static final int CODE_CALL_PULL_OUT_OF_SYNC = 1015; // 0x3f7
+    field public static final int CODE_DATA_DISABLED = 1406; // 0x57e
+    field public static final int CODE_DATA_LIMIT_REACHED = 1405; // 0x57d
+    field public static final int CODE_DIAL_MODIFIED_TO_DIAL = 246; // 0xf6
+    field public static final int CODE_DIAL_MODIFIED_TO_DIAL_VIDEO = 247; // 0xf7
+    field public static final int CODE_DIAL_MODIFIED_TO_SS = 245; // 0xf5
+    field public static final int CODE_DIAL_MODIFIED_TO_USSD = 244; // 0xf4
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL = 248; // 0xf8
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 249; // 0xf9
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_SS = 250; // 0xfa
+    field public static final int CODE_DIAL_VIDEO_MODIFIED_TO_USSD = 251; // 0xfb
+    field public static final int CODE_ECBM_NOT_SUPPORTED = 901; // 0x385
+    field public static final int CODE_EMERGENCY_PERM_FAILURE = 364; // 0x16c
+    field public static final int CODE_EMERGENCY_TEMP_FAILURE = 363; // 0x16b
+    field public static final int CODE_EPDG_TUNNEL_ESTABLISH_FAILURE = 1400; // 0x578
+    field public static final int CODE_EPDG_TUNNEL_LOST_CONNECTION = 1402; // 0x57a
+    field public static final int CODE_EPDG_TUNNEL_REKEY_FAILURE = 1401; // 0x579
+    field public static final int CODE_FDN_BLOCKED = 241; // 0xf1
+    field public static final int CODE_IKEV2_AUTH_FAILURE = 1408; // 0x580
+    field public static final int CODE_IMEI_NOT_ACCEPTED = 243; // 0xf3
+    field public static final int CODE_IWLAN_DPD_FAILURE = 1300; // 0x514
+    field public static final int CODE_LOCAL_CALL_BUSY = 142; // 0x8e
+    field public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146; // 0x92
+    field public static final int CODE_LOCAL_CALL_DECLINE = 143; // 0x8f
+    field public static final int CODE_LOCAL_CALL_EXCEEDED = 141; // 0x8d
+    field public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145; // 0x91
+    field public static final int CODE_LOCAL_CALL_TERMINATED = 148; // 0x94
+    field public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144; // 0x90
+    field public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147; // 0x93
+    field public static final int CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE = 108; // 0x6c
+    field public static final int CODE_LOCAL_HO_NOT_FEASIBLE = 149; // 0x95
+    field public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101; // 0x65
+    field public static final int CODE_LOCAL_ILLEGAL_STATE = 102; // 0x66
+    field public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106; // 0x6a
+    field public static final int CODE_LOCAL_INTERNAL_ERROR = 103; // 0x67
+    field public static final int CODE_LOCAL_LOW_BATTERY = 112; // 0x70
+    field public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124; // 0x7c
+    field public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122; // 0x7a
+    field public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121; // 0x79
+    field public static final int CODE_LOCAL_NETWORK_ROAMING = 123; // 0x7b
+    field public static final int CODE_LOCAL_NOT_REGISTERED = 132; // 0x84
+    field public static final int CODE_LOCAL_NO_PENDING_CALL = 107; // 0x6b
+    field public static final int CODE_LOCAL_POWER_OFF = 111; // 0x6f
+    field public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131; // 0x83
+    field public static final int CODE_LOW_BATTERY = 505; // 0x1f9
+    field public static final int CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED = 1403; // 0x57b
+    field public static final int CODE_MEDIA_INIT_FAILED = 401; // 0x191
+    field public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403; // 0x193
+    field public static final int CODE_MEDIA_NO_DATA = 402; // 0x192
+    field public static final int CODE_MEDIA_UNSPECIFIED = 404; // 0x194
+    field public static final int CODE_MULTIENDPOINT_NOT_SUPPORTED = 902; // 0x386
+    field public static final int CODE_NETWORK_CONGESTION = 1624; // 0x658
+    field public static final int CODE_NETWORK_DETACH = 1513; // 0x5e9
+    field public static final int CODE_NETWORK_REJECT = 1504; // 0x5e0
+    field public static final int CODE_NETWORK_RESP_TIMEOUT = 1503; // 0x5df
+    field public static final int CODE_NO_CSFB_IN_CS_ROAM = 1516; // 0x5ec
+    field public static final int CODE_NO_VALID_SIM = 1501; // 0x5dd
+    field public static final int CODE_OEM_CAUSE_1 = 61441; // 0xf001
+    field public static final int CODE_OEM_CAUSE_10 = 61450; // 0xf00a
+    field public static final int CODE_OEM_CAUSE_11 = 61451; // 0xf00b
+    field public static final int CODE_OEM_CAUSE_12 = 61452; // 0xf00c
+    field public static final int CODE_OEM_CAUSE_13 = 61453; // 0xf00d
+    field public static final int CODE_OEM_CAUSE_14 = 61454; // 0xf00e
+    field public static final int CODE_OEM_CAUSE_15 = 61455; // 0xf00f
+    field public static final int CODE_OEM_CAUSE_2 = 61442; // 0xf002
+    field public static final int CODE_OEM_CAUSE_3 = 61443; // 0xf003
+    field public static final int CODE_OEM_CAUSE_4 = 61444; // 0xf004
+    field public static final int CODE_OEM_CAUSE_5 = 61445; // 0xf005
+    field public static final int CODE_OEM_CAUSE_6 = 61446; // 0xf006
+    field public static final int CODE_OEM_CAUSE_7 = 61447; // 0xf007
+    field public static final int CODE_OEM_CAUSE_8 = 61448; // 0xf008
+    field public static final int CODE_OEM_CAUSE_9 = 61449; // 0xf009
+    field public static final int CODE_RADIO_ACCESS_FAILURE = 1505; // 0x5e1
+    field public static final int CODE_RADIO_INTERNAL_ERROR = 1502; // 0x5de
+    field public static final int CODE_RADIO_LINK_FAILURE = 1506; // 0x5e2
+    field public static final int CODE_RADIO_LINK_LOST = 1507; // 0x5e3
+    field public static final int CODE_RADIO_OFF = 1500; // 0x5dc
+    field public static final int CODE_RADIO_RELEASE_ABNORMAL = 1511; // 0x5e7
+    field public static final int CODE_RADIO_RELEASE_NORMAL = 1510; // 0x5e6
+    field public static final int CODE_RADIO_SETUP_FAILURE = 1509; // 0x5e5
+    field public static final int CODE_RADIO_UPLINK_FAILURE = 1508; // 0x5e4
+    field public static final int CODE_REGISTRATION_ERROR = 1000; // 0x3e8
+    field public static final int CODE_REJECTED_ELSEWHERE = 1017; // 0x3f9
+    field public static final int CODE_REJECT_1X_COLLISION = 1603; // 0x643
+    field public static final int CODE_REJECT_CALL_ON_OTHER_SUB = 1602; // 0x642
+    field public static final int CODE_REJECT_CALL_TYPE_NOT_ALLOWED = 1605; // 0x645
+    field public static final int CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED = 1617; // 0x651
+    field public static final int CODE_REJECT_INTERNAL_ERROR = 1612; // 0x64c
+    field public static final int CODE_REJECT_MAX_CALL_LIMIT_REACHED = 1608; // 0x648
+    field public static final int CODE_REJECT_ONGOING_CALL_SETUP = 1607; // 0x647
+    field public static final int CODE_REJECT_ONGOING_CALL_TRANSFER = 1611; // 0x64b
+    field public static final int CODE_REJECT_ONGOING_CALL_UPGRADE = 1616; // 0x650
+    field public static final int CODE_REJECT_ONGOING_CALL_WAITING_DISABLED = 1601; // 0x641
+    field public static final int CODE_REJECT_ONGOING_CONFERENCE_CALL = 1618; // 0x652
+    field public static final int CODE_REJECT_ONGOING_CS_CALL = 1621; // 0x655
+    field public static final int CODE_REJECT_ONGOING_E911_CALL = 1606; // 0x646
+    field public static final int CODE_REJECT_ONGOING_ENCRYPTED_CALL = 1620; // 0x654
+    field public static final int CODE_REJECT_ONGOING_HANDOVER = 1614; // 0x64e
+    field public static final int CODE_REJECT_QOS_FAILURE = 1613; // 0x64d
+    field public static final int CODE_REJECT_SERVICE_NOT_REGISTERED = 1604; // 0x644
+    field public static final int CODE_REJECT_UNKNOWN = 1600; // 0x640
+    field public static final int CODE_REJECT_UNSUPPORTED_SDP_HEADERS = 1610; // 0x64a
+    field public static final int CODE_REJECT_UNSUPPORTED_SIP_HEADERS = 1609; // 0x649
+    field public static final int CODE_REJECT_VT_AVPF_NOT_ALLOWED = 1619; // 0x653
+    field public static final int CODE_REJECT_VT_TTY_NOT_ALLOWED = 1615; // 0x64f
+    field public static final int CODE_REMOTE_CALL_DECLINE = 1404; // 0x57c
+    field public static final int CODE_SESSION_MODIFICATION_FAILED = 1517; // 0x5ed
+    field public static final int CODE_SIP_ALTERNATE_EMERGENCY_CALL = 1514; // 0x5ea
+    field public static final int CODE_SIP_AMBIGUOUS = 376; // 0x178
+    field public static final int CODE_SIP_BAD_ADDRESS = 337; // 0x151
+    field public static final int CODE_SIP_BAD_REQUEST = 331; // 0x14b
+    field public static final int CODE_SIP_BUSY = 338; // 0x152
+    field public static final int CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST = 372; // 0x174
+    field public static final int CODE_SIP_CLIENT_ERROR = 342; // 0x156
+    field public static final int CODE_SIP_EXTENSION_REQUIRED = 370; // 0x172
+    field public static final int CODE_SIP_FORBIDDEN = 332; // 0x14c
+    field public static final int CODE_SIP_GLOBAL_ERROR = 362; // 0x16a
+    field public static final int CODE_SIP_INTERVAL_TOO_BRIEF = 371; // 0x173
+    field public static final int CODE_SIP_LOOP_DETECTED = 373; // 0x175
+    field public static final int CODE_SIP_METHOD_NOT_ALLOWED = 366; // 0x16e
+    field public static final int CODE_SIP_NOT_ACCEPTABLE = 340; // 0x154
+    field public static final int CODE_SIP_NOT_FOUND = 333; // 0x14d
+    field public static final int CODE_SIP_NOT_REACHABLE = 341; // 0x155
+    field public static final int CODE_SIP_NOT_SUPPORTED = 334; // 0x14e
+    field public static final int CODE_SIP_PROXY_AUTHENTICATION_REQUIRED = 367; // 0x16f
+    field public static final int CODE_SIP_REDIRECTED = 321; // 0x141
+    field public static final int CODE_SIP_REQUEST_CANCELLED = 339; // 0x153
+    field public static final int CODE_SIP_REQUEST_ENTITY_TOO_LARGE = 368; // 0x170
+    field public static final int CODE_SIP_REQUEST_PENDING = 377; // 0x179
+    field public static final int CODE_SIP_REQUEST_TIMEOUT = 335; // 0x14f
+    field public static final int CODE_SIP_REQUEST_URI_TOO_LARGE = 369; // 0x171
+    field public static final int CODE_SIP_SERVER_ERROR = 354; // 0x162
+    field public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351; // 0x15f
+    field public static final int CODE_SIP_SERVER_TIMEOUT = 353; // 0x161
+    field public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352; // 0x160
+    field public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336; // 0x150
+    field public static final int CODE_SIP_TOO_MANY_HOPS = 374; // 0x176
+    field public static final int CODE_SIP_TRANSACTION_DOES_NOT_EXIST = 343; // 0x157
+    field public static final int CODE_SIP_UNDECIPHERABLE = 378; // 0x17a
+    field public static final int CODE_SIP_USER_MARKED_UNWANTED = 365; // 0x16d
+    field public static final int CODE_SIP_USER_REJECTED = 361; // 0x169
+    field public static final int CODE_SUPP_SVC_CANCELLED = 1202; // 0x4b2
+    field public static final int CODE_SUPP_SVC_FAILED = 1201; // 0x4b1
+    field public static final int CODE_SUPP_SVC_REINVITE_COLLISION = 1203; // 0x4b3
+    field public static final int CODE_TIMEOUT_1XX_WAITING = 201; // 0xc9
+    field public static final int CODE_TIMEOUT_NO_ANSWER = 202; // 0xca
+    field public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203; // 0xcb
+    field public static final int CODE_UNSPECIFIED = 0; // 0x0
+    field public static final int CODE_USER_CANCELLED_SESSION_MODIFICATION = 512; // 0x200
+    field public static final int CODE_USER_DECLINE = 504; // 0x1f8
+    field public static final int CODE_USER_IGNORE = 503; // 0x1f7
+    field public static final int CODE_USER_NOANSWER = 502; // 0x1f6
+    field public static final int CODE_USER_REJECTED_SESSION_MODIFICATION = 511; // 0x1ff
+    field public static final int CODE_USER_TERMINATED = 501; // 0x1f5
+    field public static final int CODE_USER_TERMINATED_BY_REMOTE = 510; // 0x1fe
+    field public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821; // 0x335
+    field public static final int CODE_UT_NETWORK_ERROR = 804; // 0x324
+    field public static final int CODE_UT_NOT_SUPPORTED = 801; // 0x321
+    field public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803; // 0x323
+    field public static final int CODE_UT_SERVICE_UNAVAILABLE = 802; // 0x322
+    field public static final int CODE_UT_SS_MODIFIED_TO_DIAL = 822; // 0x336
+    field public static final int CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO = 825; // 0x339
+    field public static final int CODE_UT_SS_MODIFIED_TO_SS = 824; // 0x338
+    field public static final int CODE_UT_SS_MODIFIED_TO_USSD = 823; // 0x337
+    field public static final int CODE_WIFI_LOST = 1407; // 0x57f
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsReasonInfo> CREATOR;
+    field public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3; // 0x3
+    field public static final int EXTRA_CODE_CALL_RETRY_EMERGENCY = 4; // 0x4
+    field public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1; // 0x1
+    field public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2; // 0x2
+  }
+
+  public final class ImsRegistrationAttributes implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAttributeFlags();
+    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
+    method public int getTransportType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ATTR_EPDG_OVER_CELL_INTERNET = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsRegistrationAttributes> CREATOR;
+  }
+
+  public class RcsUceAdapter {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isUceSettingEnabled() throws android.telephony.ims.ImsException;
+  }
+
+  public interface RegistrationManager {
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getRegistrationTransportType(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RegistrationManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.RegistrationManager.RegistrationCallback);
+    field public static final int REGISTRATION_STATE_NOT_REGISTERED = 0; // 0x0
+    field public static final int REGISTRATION_STATE_REGISTERED = 2; // 0x2
+    field public static final int REGISTRATION_STATE_REGISTERING = 1; // 0x1
+  }
+
+  public static class RegistrationManager.RegistrationCallback {
+    ctor public RegistrationManager.RegistrationCallback();
+    method @Deprecated public void onRegistered(int);
+    method public void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method @Deprecated public void onRegistering(int);
+    method public void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method public void onTechnologyChangeFailed(int, @NonNull android.telephony.ims.ImsReasonInfo);
+    method public void onUnregistered(@NonNull android.telephony.ims.ImsReasonInfo);
+  }
+
+}
+
+package android.telephony.ims.feature {
+
+  public class MmTelFeature {
+  }
+
+  public static class MmTelFeature.MmTelCapabilities {
+    method public final boolean isCapable(int);
+    field public static final int CAPABILITY_TYPE_CALL_COMPOSER = 16; // 0x10
+    field public static final int CAPABILITY_TYPE_SMS = 8; // 0x8
+    field public static final int CAPABILITY_TYPE_UT = 4; // 0x4
+    field public static final int CAPABILITY_TYPE_VIDEO = 2; // 0x2
+    field public static final int CAPABILITY_TYPE_VOICE = 1; // 0x1
+  }
+
+}
+
+package android.telephony.mbms {
+
+  public class DownloadProgressListener {
+    ctor public DownloadProgressListener();
+    method public void onProgressUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int, int, int, int);
+  }
+
+  public final class DownloadRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.net.Uri getDestinationUri();
+    method public String getFileServiceId();
+    method public static int getMaxAppIntentSize();
+    method public static int getMaxDestinationUriSize();
+    method public android.net.Uri getSourceUri();
+    method public int getSubscriptionId();
+    method public byte[] toByteArray();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.DownloadRequest> CREATOR;
+  }
+
+  public static class DownloadRequest.Builder {
+    ctor public DownloadRequest.Builder(@NonNull android.net.Uri, @NonNull android.net.Uri);
+    method public android.telephony.mbms.DownloadRequest build();
+    method public static android.telephony.mbms.DownloadRequest.Builder fromDownloadRequest(android.telephony.mbms.DownloadRequest);
+    method public static android.telephony.mbms.DownloadRequest.Builder fromSerializedRequest(byte[]);
+    method public android.telephony.mbms.DownloadRequest.Builder setAppIntent(android.content.Intent);
+    method public android.telephony.mbms.DownloadRequest.Builder setServiceInfo(android.telephony.mbms.FileServiceInfo);
+    method public android.telephony.mbms.DownloadRequest.Builder setSubscriptionId(int);
+  }
+
+  public class DownloadStatusListener {
+    ctor public DownloadStatusListener();
+    method public void onStatusUpdated(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo, int);
+  }
+
+  public final class FileInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getMimeType();
+    method public android.net.Uri getUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.FileInfo> CREATOR;
+  }
+
+  public final class FileServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.List<android.telephony.mbms.FileInfo> getFiles();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.FileServiceInfo> CREATOR;
+  }
+
+  public class GroupCall implements java.lang.AutoCloseable {
+    method public void close();
+    method public long getTmgi();
+    method public void updateGroupCall(@NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);
+    field public static final int REASON_BY_USER_REQUEST = 1; // 0x1
+    field public static final int REASON_FREQUENCY_CONFLICT = 3; // 0x3
+    field public static final int REASON_LEFT_MBMS_BROADCAST_AREA = 6; // 0x6
+    field public static final int REASON_NONE = 0; // 0x0
+    field public static final int REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE = 5; // 0x5
+    field public static final int REASON_OUT_OF_MEMORY = 4; // 0x4
+    field public static final int STATE_STALLED = 3; // 0x3
+    field public static final int STATE_STARTED = 2; // 0x2
+    field public static final int STATE_STOPPED = 1; // 0x1
+  }
+
+  public interface GroupCallCallback {
+    method public default void onBroadcastSignalStrengthUpdated(@IntRange(from=0xffffffff, to=4) int);
+    method public default void onError(int, @Nullable String);
+    method public default void onGroupCallStateChanged(int, int);
+    field public static final int SIGNAL_STRENGTH_UNAVAILABLE = -1; // 0xffffffff
+  }
+
+  public class MbmsDownloadReceiver extends android.content.BroadcastReceiver {
+    ctor public MbmsDownloadReceiver();
+    method public void onReceive(android.content.Context, android.content.Intent);
+  }
+
+  public class MbmsDownloadSessionCallback {
+    ctor public MbmsDownloadSessionCallback();
+    method public void onError(int, String);
+    method public void onFileServicesUpdated(java.util.List<android.telephony.mbms.FileServiceInfo>);
+    method public void onMiddlewareReady();
+  }
+
+  public class MbmsErrors {
+    field public static final int ERROR_MIDDLEWARE_LOST = 3; // 0x3
+    field public static final int ERROR_MIDDLEWARE_NOT_BOUND = 2; // 0x2
+    field public static final int ERROR_NO_UNIQUE_MIDDLEWARE = 1; // 0x1
+    field public static final int SUCCESS = 0; // 0x0
+    field public static final int UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static class MbmsErrors.DownloadErrors {
+    field public static final int ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT = 401; // 0x191
+    field public static final int ERROR_MALFORMED_SERVICE_ANNOUNCEMENT = 404; // 0x194
+    field public static final int ERROR_UNKNOWN_DOWNLOAD_REQUEST = 402; // 0x192
+    field public static final int ERROR_UNKNOWN_FILE_INFO = 403; // 0x193
+  }
+
+  public static class MbmsErrors.GeneralErrors {
+    field public static final int ERROR_CARRIER_CHANGE_NOT_ALLOWED = 207; // 0xcf
+    field public static final int ERROR_IN_E911 = 204; // 0xcc
+    field public static final int ERROR_MIDDLEWARE_NOT_YET_READY = 201; // 0xc9
+    field public static final int ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE = 203; // 0xcb
+    field public static final int ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE = 205; // 0xcd
+    field public static final int ERROR_OUT_OF_MEMORY = 202; // 0xca
+    field public static final int ERROR_UNABLE_TO_READ_SIM = 206; // 0xce
+  }
+
+  public static class MbmsErrors.GroupCallErrors {
+    field public static final int ERROR_DUPLICATE_START_GROUP_CALL = 502; // 0x1f6
+    field public static final int ERROR_UNABLE_TO_START_SERVICE = 501; // 0x1f5
+  }
+
+  public static class MbmsErrors.InitializationErrors {
+    field public static final int ERROR_APP_PERMISSIONS_NOT_GRANTED = 102; // 0x66
+    field public static final int ERROR_DUPLICATE_INITIALIZE = 101; // 0x65
+    field public static final int ERROR_UNABLE_TO_INITIALIZE = 103; // 0x67
+  }
+
+  public static class MbmsErrors.StreamingErrors {
+    field public static final int ERROR_CONCURRENT_SERVICE_LIMIT_REACHED = 301; // 0x12d
+    field public static final int ERROR_DUPLICATE_START_STREAM = 303; // 0x12f
+    field public static final int ERROR_UNABLE_TO_START_SERVICE = 302; // 0x12e
+  }
+
+  public interface MbmsGroupCallSessionCallback {
+    method public default void onAvailableSaisUpdated(@NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.util.List<java.lang.Integer>>);
+    method public default void onError(int, @Nullable String);
+    method public default void onMiddlewareReady();
+    method public default void onServiceInterfaceAvailable(@NonNull String, int);
+  }
+
+  public class MbmsStreamingSessionCallback {
+    ctor public MbmsStreamingSessionCallback();
+    method public void onError(int, @Nullable String);
+    method public void onMiddlewareReady();
+    method public void onStreamingServicesUpdated(java.util.List<android.telephony.mbms.StreamingServiceInfo>);
+  }
+
+  public class ServiceInfo {
+    method public java.util.List<java.util.Locale> getLocales();
+    method @NonNull public CharSequence getNameForLocale(@NonNull java.util.Locale);
+    method @NonNull public java.util.Set<java.util.Locale> getNamedContentLocales();
+    method public String getServiceClassName();
+    method public String getServiceId();
+    method public java.util.Date getSessionEndTime();
+    method public java.util.Date getSessionStartTime();
+  }
+
+  public class StreamingService implements java.lang.AutoCloseable {
+    method public void close();
+    method public android.telephony.mbms.StreamingServiceInfo getInfo();
+    method @Nullable public android.net.Uri getPlaybackUri();
+    field public static final int BROADCAST_METHOD = 1; // 0x1
+    field public static final int REASON_BY_USER_REQUEST = 1; // 0x1
+    field public static final int REASON_END_OF_SESSION = 2; // 0x2
+    field public static final int REASON_FREQUENCY_CONFLICT = 3; // 0x3
+    field public static final int REASON_LEFT_MBMS_BROADCAST_AREA = 6; // 0x6
+    field public static final int REASON_NONE = 0; // 0x0
+    field public static final int REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE = 5; // 0x5
+    field public static final int REASON_OUT_OF_MEMORY = 4; // 0x4
+    field public static final int STATE_STALLED = 3; // 0x3
+    field public static final int STATE_STARTED = 2; // 0x2
+    field public static final int STATE_STOPPED = 1; // 0x1
+    field public static final int UNICAST_METHOD = 2; // 0x2
+  }
+
+  public class StreamingServiceCallback {
+    ctor public StreamingServiceCallback();
+    method public void onBroadcastSignalStrengthUpdated(int);
+    method public void onError(int, @Nullable String);
+    method public void onMediaDescriptionUpdated();
+    method public void onStreamMethodUpdated(int);
+    method public void onStreamStateUpdated(int, int);
+    field public static final int SIGNAL_STRENGTH_UNAVAILABLE = -1; // 0xffffffff
+  }
+
+  public final class StreamingServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.StreamingServiceInfo> CREATOR;
+  }
+
+}
+
+package android.text {
+
+  @Deprecated public class AlteredCharSequence implements java.lang.CharSequence android.text.GetChars {
+    method @Deprecated public char charAt(int);
+    method @Deprecated public void getChars(int, int, char[], int);
+    method @Deprecated public int length();
+    method @Deprecated public static android.text.AlteredCharSequence make(CharSequence, char[], int, int);
+    method @Deprecated public CharSequence subSequence(int, int);
+  }
+
+  @Deprecated public class AndroidCharacter {
+    ctor @Deprecated public AndroidCharacter();
+    method @Deprecated public static void getDirectionalities(char[], byte[], int);
+    method @Deprecated public static int getEastAsianWidth(char);
+    method @Deprecated public static void getEastAsianWidths(char[], int, int, byte[]);
+    method @Deprecated public static char getMirror(char);
+    method @Deprecated public static boolean mirror(char[], int, int);
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_AMBIGUOUS = 1; // 0x1
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_FULL_WIDTH = 3; // 0x3
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_HALF_WIDTH = 2; // 0x2
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_NARROW = 4; // 0x4
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_NEUTRAL = 0; // 0x0
+    field @Deprecated public static final int EAST_ASIAN_WIDTH_WIDE = 5; // 0x5
+  }
+
+  public class Annotation implements android.text.ParcelableSpan {
+    ctor public Annotation(String, String);
+    ctor public Annotation(android.os.Parcel);
+    method public int describeContents();
+    method public String getKey();
+    method public int getSpanTypeId();
+    method public String getValue();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class AutoText {
+    method public static String get(CharSequence, int, int, android.view.View);
+    method public static int getSize(android.view.View);
+  }
+
+  public final class BidiFormatter {
+    method public static android.text.BidiFormatter getInstance();
+    method public static android.text.BidiFormatter getInstance(boolean);
+    method public static android.text.BidiFormatter getInstance(java.util.Locale);
+    method public boolean getStereoReset();
+    method public boolean isRtl(String);
+    method public boolean isRtl(CharSequence);
+    method public boolean isRtlContext();
+    method @Nullable public String unicodeWrap(@Nullable String, android.text.TextDirectionHeuristic, boolean);
+    method @Nullable public CharSequence unicodeWrap(@Nullable CharSequence, android.text.TextDirectionHeuristic, boolean);
+    method public String unicodeWrap(String, android.text.TextDirectionHeuristic);
+    method public CharSequence unicodeWrap(CharSequence, android.text.TextDirectionHeuristic);
+    method public String unicodeWrap(String, boolean);
+    method public CharSequence unicodeWrap(CharSequence, boolean);
+    method public String unicodeWrap(String);
+    method public CharSequence unicodeWrap(CharSequence);
+  }
+
+  public static final class BidiFormatter.Builder {
+    ctor public BidiFormatter.Builder();
+    ctor public BidiFormatter.Builder(boolean);
+    ctor public BidiFormatter.Builder(java.util.Locale);
+    method public android.text.BidiFormatter build();
+    method public android.text.BidiFormatter.Builder setTextDirectionHeuristic(android.text.TextDirectionHeuristic);
+    method public android.text.BidiFormatter.Builder stereoReset(boolean);
+  }
+
+  public class BoringLayout extends android.text.Layout implements android.text.TextUtils.EllipsizeCallback {
+    ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean);
+    ctor public BoringLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int);
+    method public void ellipsized(int, int);
+    method public int getBottomPadding();
+    method public int getEllipsisCount(int);
+    method public int getEllipsisStart(int);
+    method public boolean getLineContainsTab(int);
+    method public int getLineCount();
+    method public int getLineDescent(int);
+    method public final android.text.Layout.Directions getLineDirections(int);
+    method public int getLineStart(int);
+    method public int getLineTop(int);
+    method public int getParagraphDirection(int);
+    method public int getTopPadding();
+    method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint);
+    method public static android.text.BoringLayout.Metrics isBoring(CharSequence, android.text.TextPaint, android.text.BoringLayout.Metrics);
+    method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean);
+    method public static android.text.BoringLayout make(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int);
+    method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean);
+    method public android.text.BoringLayout replaceOrMake(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, android.text.BoringLayout.Metrics, boolean, android.text.TextUtils.TruncateAt, int);
+  }
+
+  public static class BoringLayout.Metrics extends android.graphics.Paint.FontMetricsInt {
+    ctor public BoringLayout.Metrics();
+    field public int width;
+  }
+
+  @Deprecated public abstract class ClipboardManager {
+    ctor @Deprecated public ClipboardManager();
+    method @Deprecated public abstract CharSequence getText();
+    method @Deprecated public abstract boolean hasText();
+    method @Deprecated public abstract void setText(CharSequence);
+  }
+
+  public class DynamicLayout extends android.text.Layout {
+    ctor @Deprecated public DynamicLayout(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @FloatRange(from=0.0) float, float, boolean);
+    ctor @Deprecated public DynamicLayout(@NonNull CharSequence, @NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @FloatRange(from=0.0) float, float, boolean);
+    ctor @Deprecated public DynamicLayout(@NonNull CharSequence, @NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int, @NonNull android.text.Layout.Alignment, @FloatRange(from=0.0) float, float, boolean, @Nullable android.text.TextUtils.TruncateAt, @IntRange(from=0) int);
+    method public int getBottomPadding();
+    method public int getEllipsisCount(int);
+    method public int getEllipsisStart(int);
+    method public boolean getLineContainsTab(int);
+    method public int getLineCount();
+    method public int getLineDescent(int);
+    method public final android.text.Layout.Directions getLineDirections(int);
+    method public int getLineStart(int);
+    method public int getLineTop(int);
+    method public int getParagraphDirection(int);
+    method public int getTopPadding();
+  }
+
+  public static final class DynamicLayout.Builder {
+    method @NonNull public android.text.DynamicLayout build();
+    method @NonNull public static android.text.DynamicLayout.Builder obtain(@NonNull CharSequence, @NonNull android.text.TextPaint, @IntRange(from=0) int);
+    method @NonNull public android.text.DynamicLayout.Builder setAlignment(@NonNull android.text.Layout.Alignment);
+    method @NonNull public android.text.DynamicLayout.Builder setBreakStrategy(int);
+    method @NonNull public android.text.DynamicLayout.Builder setDisplayText(@NonNull CharSequence);
+    method public android.text.DynamicLayout.Builder setEllipsize(@Nullable android.text.TextUtils.TruncateAt);
+    method @NonNull public android.text.DynamicLayout.Builder setEllipsizedWidth(@IntRange(from=0) int);
+    method @NonNull public android.text.DynamicLayout.Builder setHyphenationFrequency(int);
+    method @NonNull public android.text.DynamicLayout.Builder setIncludePad(boolean);
+    method @NonNull public android.text.DynamicLayout.Builder setJustificationMode(int);
+    method @NonNull public android.text.DynamicLayout.Builder setLineSpacing(float, @FloatRange(from=0.0) float);
+    method @NonNull public android.text.DynamicLayout.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
+    method @NonNull public android.text.DynamicLayout.Builder setUseLineSpacingFromFallbacks(boolean);
+  }
+
+  public interface Editable extends java.lang.CharSequence java.lang.Appendable android.text.GetChars android.text.Spannable {
+    method public android.text.Editable append(CharSequence);
+    method public android.text.Editable append(CharSequence, int, int);
+    method public android.text.Editable append(char);
+    method public void clear();
+    method public void clearSpans();
+    method public android.text.Editable delete(int, int);
+    method public android.text.InputFilter[] getFilters();
+    method public android.text.Editable insert(int, CharSequence, int, int);
+    method public android.text.Editable insert(int, CharSequence);
+    method public android.text.Editable replace(int, int, CharSequence, int, int);
+    method public android.text.Editable replace(int, int, CharSequence);
+    method public void setFilters(android.text.InputFilter[]);
+  }
+
+  public static class Editable.Factory {
+    ctor public Editable.Factory();
+    method public static android.text.Editable.Factory getInstance();
+    method public android.text.Editable newEditable(CharSequence);
+  }
+
+  public interface GetChars extends java.lang.CharSequence {
+    method public void getChars(int, int, char[], int);
+  }
+
+  public class Html {
+    method public static String escapeHtml(CharSequence);
+    method @Deprecated public static android.text.Spanned fromHtml(String);
+    method public static android.text.Spanned fromHtml(String, int);
+    method @Deprecated public static android.text.Spanned fromHtml(String, android.text.Html.ImageGetter, android.text.Html.TagHandler);
+    method public static android.text.Spanned fromHtml(String, int, android.text.Html.ImageGetter, android.text.Html.TagHandler);
+    method @Deprecated public static String toHtml(android.text.Spanned);
+    method public static String toHtml(android.text.Spanned, int);
+    field public static final int FROM_HTML_MODE_COMPACT = 63; // 0x3f
+    field public static final int FROM_HTML_MODE_LEGACY = 0; // 0x0
+    field public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256; // 0x100
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32; // 0x20
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16; // 0x10
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2; // 0x2
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8; // 0x8
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4; // 0x4
+    field public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1; // 0x1
+    field public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0; // 0x0
+    field public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1; // 0x1
+  }
+
+  public static interface Html.ImageGetter {
+    method public android.graphics.drawable.Drawable getDrawable(String);
+  }
+
+  public static interface Html.TagHandler {
+    method public void handleTag(boolean, String, android.text.Editable, org.xml.sax.XMLReader);
+  }
+
+  public interface InputFilter {
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+  }
+
+  public static class InputFilter.AllCaps implements android.text.InputFilter {
+    ctor public InputFilter.AllCaps();
+    ctor public InputFilter.AllCaps(@NonNull java.util.Locale);
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+  }
+
+  public static class InputFilter.LengthFilter implements android.text.InputFilter {
+    ctor public InputFilter.LengthFilter(int);
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+    method public int getMax();
+  }
+
+  public interface InputType {
+    field public static final int TYPE_CLASS_DATETIME = 4; // 0x4
+    field public static final int TYPE_CLASS_NUMBER = 2; // 0x2
+    field public static final int TYPE_CLASS_PHONE = 3; // 0x3
+    field public static final int TYPE_CLASS_TEXT = 1; // 0x1
+    field public static final int TYPE_DATETIME_VARIATION_DATE = 16; // 0x10
+    field public static final int TYPE_DATETIME_VARIATION_NORMAL = 0; // 0x0
+    field public static final int TYPE_DATETIME_VARIATION_TIME = 32; // 0x20
+    field public static final int TYPE_MASK_CLASS = 15; // 0xf
+    field public static final int TYPE_MASK_FLAGS = 16773120; // 0xfff000
+    field public static final int TYPE_MASK_VARIATION = 4080; // 0xff0
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_NUMBER_FLAG_DECIMAL = 8192; // 0x2000
+    field public static final int TYPE_NUMBER_FLAG_SIGNED = 4096; // 0x1000
+    field public static final int TYPE_NUMBER_VARIATION_NORMAL = 0; // 0x0
+    field public static final int TYPE_NUMBER_VARIATION_PASSWORD = 16; // 0x10
+    field public static final int TYPE_TEXT_FLAG_AUTO_COMPLETE = 65536; // 0x10000
+    field public static final int TYPE_TEXT_FLAG_AUTO_CORRECT = 32768; // 0x8000
+    field public static final int TYPE_TEXT_FLAG_CAP_CHARACTERS = 4096; // 0x1000
+    field public static final int TYPE_TEXT_FLAG_CAP_SENTENCES = 16384; // 0x4000
+    field public static final int TYPE_TEXT_FLAG_CAP_WORDS = 8192; // 0x2000
+    field public static final int TYPE_TEXT_FLAG_IME_MULTI_LINE = 262144; // 0x40000
+    field public static final int TYPE_TEXT_FLAG_MULTI_LINE = 131072; // 0x20000
+    field public static final int TYPE_TEXT_FLAG_NO_SUGGESTIONS = 524288; // 0x80000
+    field public static final int TYPE_TEXT_VARIATION_EMAIL_ADDRESS = 32; // 0x20
+    field public static final int TYPE_TEXT_VARIATION_EMAIL_SUBJECT = 48; // 0x30
+    field public static final int TYPE_TEXT_VARIATION_FILTER = 176; // 0xb0
+    field public static final int TYPE_TEXT_VARIATION_LONG_MESSAGE = 80; // 0x50
+    field public static final int TYPE_TEXT_VARIATION_NORMAL = 0; // 0x0
+    field public static final int TYPE_TEXT_VARIATION_PASSWORD = 128; // 0x80
+    field public static final int TYPE_TEXT_VARIATION_PERSON_NAME = 96; // 0x60
+    field public static final int TYPE_TEXT_VARIATION_PHONETIC = 192; // 0xc0
+    field public static final int TYPE_TEXT_VARIATION_POSTAL_ADDRESS = 112; // 0x70
+    field public static final int TYPE_TEXT_VARIATION_SHORT_MESSAGE = 64; // 0x40
+    field public static final int TYPE_TEXT_VARIATION_URI = 16; // 0x10
+    field public static final int TYPE_TEXT_VARIATION_VISIBLE_PASSWORD = 144; // 0x90
+    field public static final int TYPE_TEXT_VARIATION_WEB_EDIT_TEXT = 160; // 0xa0
+    field public static final int TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS = 208; // 0xd0
+    field public static final int TYPE_TEXT_VARIATION_WEB_PASSWORD = 224; // 0xe0
+  }
+
+  public abstract class Layout {
+    ctor protected Layout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float);
+    method public void draw(android.graphics.Canvas);
+    method public void draw(android.graphics.Canvas, android.graphics.Path, android.graphics.Paint, int);
+    method public final android.text.Layout.Alignment getAlignment();
+    method public abstract int getBottomPadding();
+    method public void getCursorPath(int, android.graphics.Path, CharSequence);
+    method public static float getDesiredWidth(CharSequence, android.text.TextPaint);
+    method public static float getDesiredWidth(CharSequence, int, int, android.text.TextPaint);
+    method public abstract int getEllipsisCount(int);
+    method public abstract int getEllipsisStart(int);
+    method public int getEllipsizedWidth();
+    method public int getHeight();
+    method public final int getLineAscent(int);
+    method public final int getLineBaseline(int);
+    method public final int getLineBottom(int);
+    method public int getLineBounds(int, android.graphics.Rect);
+    method public abstract boolean getLineContainsTab(int);
+    method public abstract int getLineCount();
+    method public abstract int getLineDescent(int);
+    method public abstract android.text.Layout.Directions getLineDirections(int);
+    method public final int getLineEnd(int);
+    method public int getLineForOffset(int);
+    method public int getLineForVertical(int);
+    method public float getLineLeft(int);
+    method public float getLineMax(int);
+    method public float getLineRight(int);
+    method public abstract int getLineStart(int);
+    method public abstract int getLineTop(int);
+    method public int getLineVisibleEnd(int);
+    method public float getLineWidth(int);
+    method public int getOffsetForHorizontal(int, float);
+    method public int getOffsetToLeftOf(int);
+    method public int getOffsetToRightOf(int);
+    method public final android.text.TextPaint getPaint();
+    method public final android.text.Layout.Alignment getParagraphAlignment(int);
+    method public abstract int getParagraphDirection(int);
+    method public final int getParagraphLeft(int);
+    method public final int getParagraphRight(int);
+    method public float getPrimaryHorizontal(int);
+    method public float getSecondaryHorizontal(int);
+    method public void getSelectionPath(int, int, android.graphics.Path);
+    method public final float getSpacingAdd();
+    method public final float getSpacingMultiplier();
+    method public final CharSequence getText();
+    method public abstract int getTopPadding();
+    method public final int getWidth();
+    method public final void increaseWidthTo(int);
+    method public boolean isRtlCharAt(int);
+    method protected final boolean isSpanned();
+    field public static final int BREAK_STRATEGY_BALANCED = 2; // 0x2
+    field public static final int BREAK_STRATEGY_HIGH_QUALITY = 1; // 0x1
+    field public static final int BREAK_STRATEGY_SIMPLE = 0; // 0x0
+    field public static final float DEFAULT_LINESPACING_ADDITION = 0.0f;
+    field public static final float DEFAULT_LINESPACING_MULTIPLIER = 1.0f;
+    field public static final int DIR_LEFT_TO_RIGHT = 1; // 0x1
+    field public static final int DIR_RIGHT_TO_LEFT = -1; // 0xffffffff
+    field public static final int HYPHENATION_FREQUENCY_FULL = 2; // 0x2
+    field public static final int HYPHENATION_FREQUENCY_NONE = 0; // 0x0
+    field public static final int HYPHENATION_FREQUENCY_NORMAL = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_INTER_WORD = 1; // 0x1
+    field public static final int JUSTIFICATION_MODE_NONE = 0; // 0x0
+  }
+
+  public enum Layout.Alignment {
+    enum_constant public static final android.text.Layout.Alignment ALIGN_CENTER;
+    enum_constant public static final android.text.Layout.Alignment ALIGN_NORMAL;
+    enum_constant public static final android.text.Layout.Alignment ALIGN_OPPOSITE;
+  }
+
+  public static class Layout.Directions {
+  }
+
+  @Deprecated public abstract class LoginFilter implements android.text.InputFilter {
+    method @Deprecated public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+    method @Deprecated public abstract boolean isAllowed(char);
+    method @Deprecated public void onInvalidCharacter(char);
+    method @Deprecated public void onStart();
+    method @Deprecated public void onStop();
+  }
+
+  @Deprecated public static class LoginFilter.PasswordFilterGMail extends android.text.LoginFilter {
+    ctor @Deprecated public LoginFilter.PasswordFilterGMail();
+    ctor @Deprecated public LoginFilter.PasswordFilterGMail(boolean);
+    method @Deprecated public boolean isAllowed(char);
+  }
+
+  @Deprecated public static class LoginFilter.UsernameFilterGMail extends android.text.LoginFilter {
+    ctor @Deprecated public LoginFilter.UsernameFilterGMail();
+    ctor @Deprecated public LoginFilter.UsernameFilterGMail(boolean);
+    method @Deprecated public boolean isAllowed(char);
+  }
+
+  @Deprecated public static class LoginFilter.UsernameFilterGeneric extends android.text.LoginFilter {
+    ctor @Deprecated public LoginFilter.UsernameFilterGeneric();
+    ctor @Deprecated public LoginFilter.UsernameFilterGeneric(boolean);
+    method @Deprecated public boolean isAllowed(char);
+  }
+
+  public interface NoCopySpan {
+  }
+
+  public static class NoCopySpan.Concrete implements android.text.NoCopySpan {
+    ctor public NoCopySpan.Concrete();
+  }
+
+  public interface ParcelableSpan extends android.os.Parcelable {
+    method public int getSpanTypeId();
+  }
+
+  public class PrecomputedText implements android.text.Spannable {
+    method public char charAt(int);
+    method public static android.text.PrecomputedText create(@NonNull CharSequence, @NonNull android.text.PrecomputedText.Params);
+    method public void getBounds(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.Rect);
+    method @IntRange(from=0) public int getParagraphCount();
+    method @IntRange(from=0) public int getParagraphEnd(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getParagraphStart(@IntRange(from=0) int);
+    method @NonNull public android.text.PrecomputedText.Params getParams();
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method @FloatRange(from=0) public float getWidth(@IntRange(from=0) int, @IntRange(from=0) int);
+    method public int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public void removeSpan(Object);
+    method public void setSpan(Object, int, int, int);
+    method public CharSequence subSequence(int, int);
+  }
+
+  public static final class PrecomputedText.Params {
+    method public int getBreakStrategy();
+    method public int getHyphenationFrequency();
+    method @NonNull public android.text.TextDirectionHeuristic getTextDirection();
+    method @NonNull public android.text.TextPaint getTextPaint();
+  }
+
+  public static class PrecomputedText.Params.Builder {
+    ctor public PrecomputedText.Params.Builder(@NonNull android.text.TextPaint);
+    ctor public PrecomputedText.Params.Builder(@NonNull android.text.PrecomputedText.Params);
+    method @NonNull public android.text.PrecomputedText.Params build();
+    method public android.text.PrecomputedText.Params.Builder setBreakStrategy(int);
+    method public android.text.PrecomputedText.Params.Builder setHyphenationFrequency(int);
+    method public android.text.PrecomputedText.Params.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
+  }
+
+  public class Selection {
+    method public static boolean extendDown(android.text.Spannable, android.text.Layout);
+    method public static boolean extendLeft(android.text.Spannable, android.text.Layout);
+    method public static boolean extendRight(android.text.Spannable, android.text.Layout);
+    method public static final void extendSelection(android.text.Spannable, int);
+    method public static boolean extendToLeftEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean extendToRightEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean extendUp(android.text.Spannable, android.text.Layout);
+    method public static final int getSelectionEnd(CharSequence);
+    method public static final int getSelectionStart(CharSequence);
+    method public static boolean moveDown(android.text.Spannable, android.text.Layout);
+    method public static boolean moveLeft(android.text.Spannable, android.text.Layout);
+    method public static boolean moveRight(android.text.Spannable, android.text.Layout);
+    method public static boolean moveToLeftEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean moveToRightEdge(android.text.Spannable, android.text.Layout);
+    method public static boolean moveUp(android.text.Spannable, android.text.Layout);
+    method public static final void removeSelection(android.text.Spannable);
+    method public static final void selectAll(android.text.Spannable);
+    method public static void setSelection(android.text.Spannable, int, int);
+    method public static final void setSelection(android.text.Spannable, int);
+    field public static final Object SELECTION_END;
+    field public static final Object SELECTION_START;
+  }
+
+  public interface SpanWatcher extends android.text.NoCopySpan {
+    method public void onSpanAdded(android.text.Spannable, Object, int, int);
+    method public void onSpanChanged(android.text.Spannable, Object, int, int, int, int);
+    method public void onSpanRemoved(android.text.Spannable, Object, int, int);
+  }
+
+  public interface Spannable extends android.text.Spanned {
+    method public void removeSpan(Object);
+    method public void setSpan(Object, int, int, int);
+  }
+
+  public static class Spannable.Factory {
+    ctor public Spannable.Factory();
+    method public static android.text.Spannable.Factory getInstance();
+    method public android.text.Spannable newSpannable(CharSequence);
+  }
+
+  public class SpannableString implements java.lang.CharSequence android.text.GetChars android.text.Spannable {
+    ctor public SpannableString(CharSequence);
+    method public final char charAt(int);
+    method public final void getChars(int, int, char[], int);
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method public final int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public void removeSpan(Object);
+    method public void setSpan(Object, int, int, int);
+    method public final CharSequence subSequence(int, int);
+    method public final String toString();
+    method public static android.text.SpannableString valueOf(CharSequence);
+  }
+
+  public class SpannableStringBuilder implements java.lang.Appendable java.lang.CharSequence android.text.Editable android.text.GetChars android.text.Spannable {
+    ctor public SpannableStringBuilder();
+    ctor public SpannableStringBuilder(CharSequence);
+    ctor public SpannableStringBuilder(CharSequence, int, int);
+    method public android.text.SpannableStringBuilder append(CharSequence);
+    method public android.text.SpannableStringBuilder append(CharSequence, Object, int);
+    method public android.text.SpannableStringBuilder append(CharSequence, int, int);
+    method public android.text.SpannableStringBuilder append(char);
+    method public char charAt(int);
+    method public void clear();
+    method public void clearSpans();
+    method public android.text.SpannableStringBuilder delete(int, int);
+    method public void getChars(int, int, char[], int);
+    method public android.text.InputFilter[] getFilters();
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, @Nullable Class<T>);
+    method @Deprecated public int getTextRunCursor(int, int, int, int, int, android.graphics.Paint);
+    method public int getTextWatcherDepth();
+    method public android.text.SpannableStringBuilder insert(int, CharSequence, int, int);
+    method public android.text.SpannableStringBuilder insert(int, CharSequence);
+    method public int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public void removeSpan(Object);
+    method public android.text.SpannableStringBuilder replace(int, int, CharSequence);
+    method public android.text.SpannableStringBuilder replace(int, int, CharSequence, int, int);
+    method public void setFilters(android.text.InputFilter[]);
+    method public void setSpan(Object, int, int, int);
+    method public CharSequence subSequence(int, int);
+    method public static android.text.SpannableStringBuilder valueOf(CharSequence);
+  }
+
+  public interface Spanned extends java.lang.CharSequence {
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method public int nextSpanTransition(int, int, Class);
+    field public static final int SPAN_COMPOSING = 256; // 0x100
+    field public static final int SPAN_EXCLUSIVE_EXCLUSIVE = 33; // 0x21
+    field public static final int SPAN_EXCLUSIVE_INCLUSIVE = 34; // 0x22
+    field public static final int SPAN_INCLUSIVE_EXCLUSIVE = 17; // 0x11
+    field public static final int SPAN_INCLUSIVE_INCLUSIVE = 18; // 0x12
+    field public static final int SPAN_INTERMEDIATE = 512; // 0x200
+    field public static final int SPAN_MARK_MARK = 17; // 0x11
+    field public static final int SPAN_MARK_POINT = 18; // 0x12
+    field public static final int SPAN_PARAGRAPH = 51; // 0x33
+    field public static final int SPAN_POINT_MARK = 33; // 0x21
+    field public static final int SPAN_POINT_MARK_MASK = 51; // 0x33
+    field public static final int SPAN_POINT_POINT = 34; // 0x22
+    field public static final int SPAN_PRIORITY = 16711680; // 0xff0000
+    field public static final int SPAN_PRIORITY_SHIFT = 16; // 0x10
+    field public static final int SPAN_USER = -16777216; // 0xff000000
+    field public static final int SPAN_USER_SHIFT = 24; // 0x18
+  }
+
+  public final class SpannedString implements java.lang.CharSequence android.text.GetChars android.text.Spanned {
+    ctor public SpannedString(CharSequence);
+    method public final char charAt(int);
+    method public final void getChars(int, int, char[], int);
+    method public int getSpanEnd(Object);
+    method public int getSpanFlags(Object);
+    method public int getSpanStart(Object);
+    method public <T> T[] getSpans(int, int, Class<T>);
+    method public final int length();
+    method public int nextSpanTransition(int, int, Class);
+    method public CharSequence subSequence(int, int);
+    method public static android.text.SpannedString valueOf(CharSequence);
+  }
+
+  public class StaticLayout extends android.text.Layout {
+    ctor @Deprecated public StaticLayout(CharSequence, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean);
+    ctor @Deprecated public StaticLayout(CharSequence, int, int, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean);
+    ctor @Deprecated public StaticLayout(CharSequence, int, int, android.text.TextPaint, int, android.text.Layout.Alignment, float, float, boolean, android.text.TextUtils.TruncateAt, int);
+    method public int getBottomPadding();
+    method public int getEllipsisCount(int);
+    method public int getEllipsisStart(int);
+    method public boolean getLineContainsTab(int);
+    method public int getLineCount();
+    method public int getLineDescent(int);
+    method public final android.text.Layout.Directions getLineDirections(int);
+    method public int getLineStart(int);
+    method public int getLineTop(int);
+    method public int getParagraphDirection(int);
+    method public int getTopPadding();
+  }
+
+  public static final class StaticLayout.Builder {
+    method @NonNull public android.text.StaticLayout build();
+    method @NonNull public static android.text.StaticLayout.Builder obtain(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.text.TextPaint, @IntRange(from=0) int);
+    method @NonNull public android.text.StaticLayout.Builder setAlignment(@NonNull android.text.Layout.Alignment);
+    method @NonNull public android.text.StaticLayout.Builder setBreakStrategy(int);
+    method @NonNull public android.text.StaticLayout.Builder setEllipsize(@Nullable android.text.TextUtils.TruncateAt);
+    method @NonNull public android.text.StaticLayout.Builder setEllipsizedWidth(@IntRange(from=0) int);
+    method @NonNull public android.text.StaticLayout.Builder setHyphenationFrequency(int);
+    method @NonNull public android.text.StaticLayout.Builder setIncludePad(boolean);
+    method @NonNull public android.text.StaticLayout.Builder setIndents(@Nullable int[], @Nullable int[]);
+    method @NonNull public android.text.StaticLayout.Builder setJustificationMode(int);
+    method @NonNull public android.text.StaticLayout.Builder setLineSpacing(float, @FloatRange(from=0.0) float);
+    method @NonNull public android.text.StaticLayout.Builder setMaxLines(@IntRange(from=0) int);
+    method public android.text.StaticLayout.Builder setText(CharSequence);
+    method @NonNull public android.text.StaticLayout.Builder setTextDirection(@NonNull android.text.TextDirectionHeuristic);
+    method @NonNull public android.text.StaticLayout.Builder setUseLineSpacingFromFallbacks(boolean);
+  }
+
+  public interface TextDirectionHeuristic {
+    method public boolean isRtl(char[], int, int);
+    method public boolean isRtl(CharSequence, int, int);
+  }
+
+  public class TextDirectionHeuristics {
+    ctor public TextDirectionHeuristics();
+    field public static final android.text.TextDirectionHeuristic ANYRTL_LTR;
+    field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_LTR;
+    field public static final android.text.TextDirectionHeuristic FIRSTSTRONG_RTL;
+    field public static final android.text.TextDirectionHeuristic LOCALE;
+    field public static final android.text.TextDirectionHeuristic LTR;
+    field public static final android.text.TextDirectionHeuristic RTL;
+  }
+
+  public class TextPaint extends android.graphics.Paint {
+    ctor public TextPaint();
+    ctor public TextPaint(int);
+    ctor public TextPaint(android.graphics.Paint);
+    method public void set(android.text.TextPaint);
+    field public int baselineShift;
+    field @ColorInt public int bgColor;
+    field public float density;
+    field public int[] drawableState;
+    field @ColorInt public int linkColor;
+    field @ColorInt public int underlineColor;
+    field @Px public float underlineThickness;
+  }
+
+  public class TextShaper {
+    method public static void shapeText(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.text.TextDirectionHeuristic, @NonNull android.text.TextPaint, @NonNull android.text.TextShaper.GlyphsConsumer);
+  }
+
+  public static interface TextShaper.GlyphsConsumer {
+    method public void accept(@IntRange(from=0) int, @IntRange(from=0) int, @NonNull android.graphics.text.PositionedGlyphs, @NonNull android.text.TextPaint);
+  }
+
+  public class TextUtils {
+    method @Deprecated public static CharSequence commaEllipsize(CharSequence, android.text.TextPaint, float, String, String);
+    method public static CharSequence concat(java.lang.CharSequence...);
+    method public static void copySpansFrom(android.text.Spanned, int, int, Class, android.text.Spannable, int);
+    method public static void dumpSpans(CharSequence, android.util.Printer, String);
+    method public static CharSequence ellipsize(CharSequence, android.text.TextPaint, float, android.text.TextUtils.TruncateAt);
+    method public static CharSequence ellipsize(CharSequence, android.text.TextPaint, float, android.text.TextUtils.TruncateAt, boolean, @Nullable android.text.TextUtils.EllipsizeCallback);
+    method public static boolean equals(CharSequence, CharSequence);
+    method public static CharSequence expandTemplate(CharSequence, java.lang.CharSequence...);
+    method public static int getCapsMode(CharSequence, int, int);
+    method public static void getChars(CharSequence, int, int, char[], int);
+    method public static int getLayoutDirectionFromLocale(java.util.Locale);
+    method public static int getOffsetAfter(CharSequence, int);
+    method public static int getOffsetBefore(CharSequence, int);
+    method @Deprecated public static CharSequence getReverse(CharSequence, int, int);
+    method public static int getTrimmedLength(CharSequence);
+    method public static String htmlEncode(String);
+    method public static int indexOf(CharSequence, char);
+    method public static int indexOf(CharSequence, char, int);
+    method public static int indexOf(CharSequence, char, int, int);
+    method public static int indexOf(CharSequence, CharSequence);
+    method public static int indexOf(CharSequence, CharSequence, int);
+    method public static int indexOf(CharSequence, CharSequence, int, int);
+    method public static boolean isDigitsOnly(CharSequence);
+    method public static boolean isEmpty(@Nullable CharSequence);
+    method public static boolean isGraphic(CharSequence);
+    method @Deprecated public static boolean isGraphic(char);
+    method public static String join(@NonNull CharSequence, @NonNull Object[]);
+    method public static String join(@NonNull CharSequence, @NonNull Iterable);
+    method public static int lastIndexOf(CharSequence, char);
+    method public static int lastIndexOf(CharSequence, char, int);
+    method public static int lastIndexOf(CharSequence, char, int, int);
+    method public static CharSequence listEllipsize(@Nullable android.content.Context, @Nullable java.util.List<java.lang.CharSequence>, @NonNull String, @NonNull android.text.TextPaint, @FloatRange(from=0.0, fromInclusive=false) float, @PluralsRes int);
+    method @NonNull public static CharSequence makeSafeForPresentation(@NonNull String, @IntRange(from=0) int, @FloatRange(from=0) float, int);
+    method public static boolean regionMatches(CharSequence, int, CharSequence, int, int);
+    method public static CharSequence replace(CharSequence, String[], CharSequence[]);
+    method public static String[] split(String, String);
+    method public static String[] split(String, java.util.regex.Pattern);
+    method public static CharSequence stringOrSpannedString(CharSequence);
+    method public static String substring(CharSequence, int, int);
+    method public static void writeToParcel(@Nullable CharSequence, @NonNull android.os.Parcel, int);
+    field public static final int CAP_MODE_CHARACTERS = 4096; // 0x1000
+    field public static final int CAP_MODE_SENTENCES = 16384; // 0x4000
+    field public static final int CAP_MODE_WORDS = 8192; // 0x2000
+    field public static final android.os.Parcelable.Creator<java.lang.CharSequence> CHAR_SEQUENCE_CREATOR;
+    field public static final int SAFE_STRING_FLAG_FIRST_LINE = 4; // 0x4
+    field public static final int SAFE_STRING_FLAG_SINGLE_LINE = 2; // 0x2
+    field public static final int SAFE_STRING_FLAG_TRIM = 1; // 0x1
+  }
+
+  public static interface TextUtils.EllipsizeCallback {
+    method public void ellipsized(int, int);
+  }
+
+  public static class TextUtils.SimpleStringSplitter implements java.util.Iterator<java.lang.String> android.text.TextUtils.StringSplitter {
+    ctor public TextUtils.SimpleStringSplitter(char);
+    method public boolean hasNext();
+    method public java.util.Iterator<java.lang.String> iterator();
+    method public String next();
+    method public void setString(String);
+  }
+
+  public static interface TextUtils.StringSplitter extends java.lang.Iterable<java.lang.String> {
+    method public void setString(String);
+  }
+
+  public enum TextUtils.TruncateAt {
+    enum_constant public static final android.text.TextUtils.TruncateAt END;
+    enum_constant public static final android.text.TextUtils.TruncateAt MARQUEE;
+    enum_constant public static final android.text.TextUtils.TruncateAt MIDDLE;
+    enum_constant public static final android.text.TextUtils.TruncateAt START;
+  }
+
+  public interface TextWatcher extends android.text.NoCopySpan {
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+}
+
+package android.text.format {
+
+  public class DateFormat {
+    ctor public DateFormat();
+    method public static CharSequence format(CharSequence, long);
+    method public static CharSequence format(CharSequence, java.util.Date);
+    method public static CharSequence format(CharSequence, java.util.Calendar);
+    method public static String getBestDateTimePattern(java.util.Locale, String);
+    method public static java.text.DateFormat getDateFormat(android.content.Context);
+    method public static char[] getDateFormatOrder(android.content.Context);
+    method public static java.text.DateFormat getLongDateFormat(android.content.Context);
+    method public static java.text.DateFormat getMediumDateFormat(android.content.Context);
+    method public static java.text.DateFormat getTimeFormat(android.content.Context);
+    method public static boolean is24HourFormat(android.content.Context);
+  }
+
+  public class DateUtils {
+    ctor public DateUtils();
+    method public static String formatDateRange(android.content.Context, long, long, int);
+    method public static java.util.Formatter formatDateRange(android.content.Context, java.util.Formatter, long, long, int);
+    method public static java.util.Formatter formatDateRange(android.content.Context, java.util.Formatter, long, long, int, String);
+    method public static String formatDateTime(android.content.Context, long, int);
+    method public static String formatElapsedTime(long);
+    method public static String formatElapsedTime(StringBuilder, long);
+    method public static final CharSequence formatSameDayTime(long, long, int, int);
+    method @Deprecated public static String getAMPMString(int);
+    method @Deprecated public static String getDayOfWeekString(int, int);
+    method @Deprecated public static String getMonthString(int, int);
+    method public static CharSequence getRelativeDateTimeString(android.content.Context, long, long, long, int);
+    method public static CharSequence getRelativeTimeSpanString(long);
+    method public static CharSequence getRelativeTimeSpanString(long, long, long);
+    method public static CharSequence getRelativeTimeSpanString(long, long, long, int);
+    method public static CharSequence getRelativeTimeSpanString(android.content.Context, long, boolean);
+    method public static CharSequence getRelativeTimeSpanString(android.content.Context, long);
+    method public static boolean isToday(long);
+    field @Deprecated public static final String ABBREV_MONTH_FORMAT = "%b";
+    field public static final String ABBREV_WEEKDAY_FORMAT = "%a";
+    field public static final long DAY_IN_MILLIS = 86400000L; // 0x5265c00L
+    field @Deprecated public static final int FORMAT_12HOUR = 64; // 0x40
+    field @Deprecated public static final int FORMAT_24HOUR = 128; // 0x80
+    field public static final int FORMAT_ABBREV_ALL = 524288; // 0x80000
+    field public static final int FORMAT_ABBREV_MONTH = 65536; // 0x10000
+    field public static final int FORMAT_ABBREV_RELATIVE = 262144; // 0x40000
+    field public static final int FORMAT_ABBREV_TIME = 16384; // 0x4000
+    field public static final int FORMAT_ABBREV_WEEKDAY = 32768; // 0x8000
+    field @Deprecated public static final int FORMAT_CAP_AMPM = 256; // 0x100
+    field @Deprecated public static final int FORMAT_CAP_MIDNIGHT = 4096; // 0x1000
+    field @Deprecated public static final int FORMAT_CAP_NOON = 1024; // 0x400
+    field @Deprecated public static final int FORMAT_CAP_NOON_MIDNIGHT = 5120; // 0x1400
+    field public static final int FORMAT_NO_MIDNIGHT = 2048; // 0x800
+    field public static final int FORMAT_NO_MONTH_DAY = 32; // 0x20
+    field public static final int FORMAT_NO_NOON = 512; // 0x200
+    field @Deprecated public static final int FORMAT_NO_NOON_MIDNIGHT = 2560; // 0xa00
+    field public static final int FORMAT_NO_YEAR = 8; // 0x8
+    field public static final int FORMAT_NUMERIC_DATE = 131072; // 0x20000
+    field public static final int FORMAT_SHOW_DATE = 16; // 0x10
+    field public static final int FORMAT_SHOW_TIME = 1; // 0x1
+    field public static final int FORMAT_SHOW_WEEKDAY = 2; // 0x2
+    field public static final int FORMAT_SHOW_YEAR = 4; // 0x4
+    field @Deprecated public static final int FORMAT_UTC = 8192; // 0x2000
+    field public static final long HOUR_IN_MILLIS = 3600000L; // 0x36ee80L
+    field @Deprecated public static final String HOUR_MINUTE_24 = "%H:%M";
+    field @Deprecated public static final int LENGTH_LONG = 10; // 0xa
+    field @Deprecated public static final int LENGTH_MEDIUM = 20; // 0x14
+    field @Deprecated public static final int LENGTH_SHORT = 30; // 0x1e
+    field @Deprecated public static final int LENGTH_SHORTER = 40; // 0x28
+    field @Deprecated public static final int LENGTH_SHORTEST = 50; // 0x32
+    field public static final long MINUTE_IN_MILLIS = 60000L; // 0xea60L
+    field public static final String MONTH_DAY_FORMAT = "%-d";
+    field public static final String MONTH_FORMAT = "%B";
+    field public static final String NUMERIC_MONTH_FORMAT = "%m";
+    field public static final long SECOND_IN_MILLIS = 1000L; // 0x3e8L
+    field public static final String WEEKDAY_FORMAT = "%A";
+    field public static final long WEEK_IN_MILLIS = 604800000L; // 0x240c8400L
+    field public static final String YEAR_FORMAT = "%Y";
+    field public static final String YEAR_FORMAT_TWO_DIGITS = "%g";
+    field @Deprecated public static final long YEAR_IN_MILLIS = 31449600000L; // 0x7528ad000L
+    field @Deprecated public static final int[] sameMonthTable;
+    field @Deprecated public static final int[] sameYearTable;
+  }
+
+  public final class Formatter {
+    ctor public Formatter();
+    method public static String formatFileSize(@Nullable android.content.Context, long);
+    method @Deprecated public static String formatIpAddress(int);
+    method public static String formatShortFileSize(@Nullable android.content.Context, long);
+  }
+
+  @Deprecated public class Time {
+    ctor @Deprecated public Time(String);
+    ctor @Deprecated public Time();
+    ctor @Deprecated public Time(android.text.format.Time);
+    method @Deprecated public boolean after(android.text.format.Time);
+    method @Deprecated public boolean before(android.text.format.Time);
+    method @Deprecated public void clear(String);
+    method @Deprecated public static int compare(android.text.format.Time, android.text.format.Time);
+    method @Deprecated public String format(String);
+    method @Deprecated public String format2445();
+    method @Deprecated public String format3339(boolean);
+    method @Deprecated public int getActualMaximum(int);
+    method @Deprecated public static String getCurrentTimezone();
+    method @Deprecated public static int getJulianDay(long, long);
+    method @Deprecated public static int getJulianMondayFromWeeksSinceEpoch(int);
+    method @Deprecated public int getWeekNumber();
+    method @Deprecated public static int getWeeksSinceEpochFromJulianDay(int, int);
+    method @Deprecated public static boolean isEpoch(android.text.format.Time);
+    method @Deprecated public long normalize(boolean);
+    method @Deprecated public boolean parse(String);
+    method @Deprecated public boolean parse3339(String);
+    method @Deprecated public void set(long);
+    method @Deprecated public void set(android.text.format.Time);
+    method @Deprecated public void set(int, int, int, int, int, int);
+    method @Deprecated public void set(int, int, int);
+    method @Deprecated public long setJulianDay(int);
+    method @Deprecated public void setToNow();
+    method @Deprecated public void switchTimezone(String);
+    method @Deprecated public long toMillis(boolean);
+    field @Deprecated public static final int EPOCH_JULIAN_DAY = 2440588; // 0x253d8c
+    field @Deprecated public static final int FRIDAY = 5; // 0x5
+    field @Deprecated public static final int HOUR = 3; // 0x3
+    field @Deprecated public static final int MINUTE = 2; // 0x2
+    field @Deprecated public static final int MONDAY = 1; // 0x1
+    field @Deprecated public static final int MONDAY_BEFORE_JULIAN_EPOCH = 2440585; // 0x253d89
+    field @Deprecated public static final int MONTH = 5; // 0x5
+    field @Deprecated public static final int MONTH_DAY = 4; // 0x4
+    field @Deprecated public static final int SATURDAY = 6; // 0x6
+    field @Deprecated public static final int SECOND = 1; // 0x1
+    field @Deprecated public static final int SUNDAY = 0; // 0x0
+    field @Deprecated public static final int THURSDAY = 4; // 0x4
+    field @Deprecated public static final String TIMEZONE_UTC = "UTC";
+    field @Deprecated public static final int TUESDAY = 2; // 0x2
+    field @Deprecated public static final int WEDNESDAY = 3; // 0x3
+    field @Deprecated public static final int WEEK_DAY = 7; // 0x7
+    field @Deprecated public static final int WEEK_NUM = 9; // 0x9
+    field @Deprecated public static final int YEAR = 6; // 0x6
+    field @Deprecated public static final int YEAR_DAY = 8; // 0x8
+    field @Deprecated public boolean allDay;
+    field @Deprecated public long gmtoff;
+    field @Deprecated public int hour;
+    field @Deprecated public int isDst;
+    field @Deprecated public int minute;
+    field @Deprecated public int month;
+    field @Deprecated public int monthDay;
+    field @Deprecated public int second;
+    field @Deprecated public String timezone;
+    field @Deprecated public int weekDay;
+    field @Deprecated public int year;
+    field @Deprecated public int yearDay;
+  }
+
+}
+
+package android.text.method {
+
+  public class ArrowKeyMovementMethod extends android.text.method.BaseMovementMethod implements android.text.method.MovementMethod {
+    ctor public ArrowKeyMovementMethod();
+    method public static android.text.method.MovementMethod getInstance();
+  }
+
+  public abstract class BaseKeyListener extends android.text.method.MetaKeyKeyListener implements android.text.method.KeyListener {
+    ctor public BaseKeyListener();
+    method public boolean backspace(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean forwardDelete(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.view.View, android.text.Editable, android.view.KeyEvent);
+  }
+
+  public class BaseMovementMethod implements android.text.method.MovementMethod {
+    ctor public BaseMovementMethod();
+    method protected boolean bottom(android.widget.TextView, android.text.Spannable);
+    method public boolean canSelectArbitrarily();
+    method protected boolean down(android.widget.TextView, android.text.Spannable);
+    method protected boolean end(android.widget.TextView, android.text.Spannable);
+    method protected int getMovementMetaState(android.text.Spannable, android.view.KeyEvent);
+    method protected boolean handleMovementKey(android.widget.TextView, android.text.Spannable, int, int, android.view.KeyEvent);
+    method protected boolean home(android.widget.TextView, android.text.Spannable);
+    method public void initialize(android.widget.TextView, android.text.Spannable);
+    method protected boolean left(android.widget.TextView, android.text.Spannable);
+    method protected boolean lineEnd(android.widget.TextView, android.text.Spannable);
+    method protected boolean lineStart(android.widget.TextView, android.text.Spannable);
+    method public boolean onGenericMotionEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onKeyDown(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.widget.TextView, android.text.Spannable, android.view.KeyEvent);
+    method public boolean onKeyUp(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public void onTakeFocus(android.widget.TextView, android.text.Spannable, int);
+    method public boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method protected boolean pageDown(android.widget.TextView, android.text.Spannable);
+    method protected boolean pageUp(android.widget.TextView, android.text.Spannable);
+    method protected boolean right(android.widget.TextView, android.text.Spannable);
+    method protected boolean top(android.widget.TextView, android.text.Spannable);
+    method protected boolean up(android.widget.TextView, android.text.Spannable);
+  }
+
+  public class CharacterPickerDialog extends android.app.Dialog implements android.widget.AdapterView.OnItemClickListener android.view.View.OnClickListener {
+    ctor public CharacterPickerDialog(android.content.Context, android.view.View, android.text.Editable, String, boolean);
+    method public void onClick(android.view.View);
+    method public void onItemClick(android.widget.AdapterView, android.view.View, int, long);
+  }
+
+  public class DateKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public DateKeyListener();
+    ctor public DateKeyListener(@Nullable java.util.Locale);
+    method @NonNull protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.DateKeyListener getInstance();
+    method @NonNull public static android.text.method.DateKeyListener getInstance(@Nullable java.util.Locale);
+    field @Deprecated public static final char[] CHARACTERS;
+  }
+
+  public class DateTimeKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public DateTimeKeyListener();
+    ctor public DateTimeKeyListener(@Nullable java.util.Locale);
+    method @NonNull protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.DateTimeKeyListener getInstance();
+    method @NonNull public static android.text.method.DateTimeKeyListener getInstance(@Nullable java.util.Locale);
+    field @Deprecated public static final char[] CHARACTERS;
+  }
+
+  public class DialerKeyListener extends android.text.method.NumberKeyListener {
+    ctor public DialerKeyListener();
+    method protected char[] getAcceptedChars();
+    method public int getInputType();
+    method public static android.text.method.DialerKeyListener getInstance();
+    field public static final char[] CHARACTERS;
+  }
+
+  public class DigitsKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public DigitsKeyListener();
+    ctor @Deprecated public DigitsKeyListener(boolean, boolean);
+    ctor public DigitsKeyListener(@Nullable java.util.Locale);
+    ctor public DigitsKeyListener(@Nullable java.util.Locale, boolean, boolean);
+    method protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.DigitsKeyListener getInstance();
+    method @Deprecated @NonNull public static android.text.method.DigitsKeyListener getInstance(boolean, boolean);
+    method @NonNull public static android.text.method.DigitsKeyListener getInstance(@Nullable java.util.Locale);
+    method @NonNull public static android.text.method.DigitsKeyListener getInstance(@Nullable java.util.Locale, boolean, boolean);
+    method @NonNull public static android.text.method.DigitsKeyListener getInstance(@NonNull String);
+  }
+
+  public class HideReturnsTransformationMethod extends android.text.method.ReplacementTransformationMethod {
+    ctor public HideReturnsTransformationMethod();
+    method public static android.text.method.HideReturnsTransformationMethod getInstance();
+    method protected char[] getOriginal();
+    method protected char[] getReplacement();
+  }
+
+  public interface KeyListener {
+    method public void clearMetaKeyState(android.view.View, android.text.Editable, int);
+    method public int getInputType();
+    method public boolean onKeyDown(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.view.View, android.text.Editable, android.view.KeyEvent);
+    method public boolean onKeyUp(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+  }
+
+  public class LinkMovementMethod extends android.text.method.ScrollingMovementMethod {
+    ctor public LinkMovementMethod();
+    method public static android.text.method.MovementMethod getInstance();
+  }
+
+  public abstract class MetaKeyKeyListener {
+    ctor public MetaKeyKeyListener();
+    method public static void adjustMetaAfterKeypress(android.text.Spannable);
+    method public static long adjustMetaAfterKeypress(long);
+    method public void clearMetaKeyState(android.view.View, android.text.Editable, int);
+    method public static void clearMetaKeyState(android.text.Editable, int);
+    method public long clearMetaKeyState(long, int);
+    method public static final int getMetaState(CharSequence);
+    method public static final int getMetaState(CharSequence, android.view.KeyEvent);
+    method public static final int getMetaState(CharSequence, int);
+    method public static final int getMetaState(CharSequence, int, android.view.KeyEvent);
+    method public static final int getMetaState(long);
+    method public static final int getMetaState(long, int);
+    method public static long handleKeyDown(long, int, android.view.KeyEvent);
+    method public static long handleKeyUp(long, int, android.view.KeyEvent);
+    method public static boolean isMetaTracker(CharSequence, Object);
+    method public static boolean isSelectingMetaTracker(CharSequence, Object);
+    method public boolean onKeyDown(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method public boolean onKeyUp(android.view.View, android.text.Editable, int, android.view.KeyEvent);
+    method protected static void resetLockedMeta(android.text.Spannable);
+    method public static long resetLockedMeta(long);
+    method public static void resetMetaState(android.text.Spannable);
+    field public static final int META_ALT_LOCKED = 512; // 0x200
+    field public static final int META_ALT_ON = 2; // 0x2
+    field public static final int META_CAP_LOCKED = 256; // 0x100
+    field public static final int META_SHIFT_ON = 1; // 0x1
+    field public static final int META_SYM_LOCKED = 1024; // 0x400
+    field public static final int META_SYM_ON = 4; // 0x4
+  }
+
+  public interface MovementMethod {
+    method public boolean canSelectArbitrarily();
+    method public void initialize(android.widget.TextView, android.text.Spannable);
+    method public boolean onGenericMotionEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onKeyDown(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public boolean onKeyOther(android.widget.TextView, android.text.Spannable, android.view.KeyEvent);
+    method public boolean onKeyUp(android.widget.TextView, android.text.Spannable, int, android.view.KeyEvent);
+    method public void onTakeFocus(android.widget.TextView, android.text.Spannable, int);
+    method public boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+  }
+
+  public class MultiTapKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher {
+    ctor public MultiTapKeyListener(android.text.method.TextKeyListener.Capitalize, boolean);
+    method public int getInputType();
+    method public static android.text.method.MultiTapKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize);
+    method public void onSpanAdded(android.text.Spannable, Object, int, int);
+    method public void onSpanChanged(android.text.Spannable, Object, int, int, int, int);
+    method public void onSpanRemoved(android.text.Spannable, Object, int, int);
+  }
+
+  public abstract class NumberKeyListener extends android.text.method.BaseKeyListener implements android.text.InputFilter {
+    ctor public NumberKeyListener();
+    method public CharSequence filter(CharSequence, int, int, android.text.Spanned, int, int);
+    method @NonNull protected abstract char[] getAcceptedChars();
+    method protected int lookup(android.view.KeyEvent, android.text.Spannable);
+    method protected static boolean ok(char[], char);
+  }
+
+  public class PasswordTransformationMethod implements android.text.TextWatcher android.text.method.TransformationMethod {
+    ctor public PasswordTransformationMethod();
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public static android.text.method.PasswordTransformationMethod getInstance();
+    method public CharSequence getTransformation(CharSequence, android.view.View);
+    method public void onFocusChanged(android.view.View, CharSequence, boolean, int, android.graphics.Rect);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+  public class QwertyKeyListener extends android.text.method.BaseKeyListener {
+    ctor public QwertyKeyListener(android.text.method.TextKeyListener.Capitalize, boolean);
+    method public int getInputType();
+    method public static android.text.method.QwertyKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize);
+    method public static android.text.method.QwertyKeyListener getInstanceForFullKeyboard();
+    method public static void markAsReplaced(android.text.Spannable, int, int, String);
+  }
+
+  public abstract class ReplacementTransformationMethod implements android.text.method.TransformationMethod {
+    ctor public ReplacementTransformationMethod();
+    method protected abstract char[] getOriginal();
+    method protected abstract char[] getReplacement();
+    method public CharSequence getTransformation(CharSequence, android.view.View);
+    method public void onFocusChanged(android.view.View, CharSequence, boolean, int, android.graphics.Rect);
+  }
+
+  public class ScrollingMovementMethod extends android.text.method.BaseMovementMethod implements android.text.method.MovementMethod {
+    ctor public ScrollingMovementMethod();
+    method public static android.text.method.MovementMethod getInstance();
+  }
+
+  public class SingleLineTransformationMethod extends android.text.method.ReplacementTransformationMethod {
+    ctor public SingleLineTransformationMethod();
+    method public static android.text.method.SingleLineTransformationMethod getInstance();
+    method protected char[] getOriginal();
+    method protected char[] getReplacement();
+  }
+
+  public class TextKeyListener extends android.text.method.BaseKeyListener implements android.text.SpanWatcher {
+    ctor public TextKeyListener(android.text.method.TextKeyListener.Capitalize, boolean);
+    method public static void clear(android.text.Editable);
+    method public int getInputType();
+    method public static android.text.method.TextKeyListener getInstance(boolean, android.text.method.TextKeyListener.Capitalize);
+    method public static android.text.method.TextKeyListener getInstance();
+    method public void onSpanAdded(android.text.Spannable, Object, int, int);
+    method public void onSpanChanged(android.text.Spannable, Object, int, int, int, int);
+    method public void onSpanRemoved(android.text.Spannable, Object, int, int);
+    method public void release();
+    method public static boolean shouldCap(android.text.method.TextKeyListener.Capitalize, CharSequence, int);
+  }
+
+  public enum TextKeyListener.Capitalize {
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize CHARACTERS;
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize NONE;
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize SENTENCES;
+    enum_constant public static final android.text.method.TextKeyListener.Capitalize WORDS;
+  }
+
+  public class TimeKeyListener extends android.text.method.NumberKeyListener {
+    ctor @Deprecated public TimeKeyListener();
+    ctor public TimeKeyListener(@Nullable java.util.Locale);
+    method @NonNull protected char[] getAcceptedChars();
+    method public int getInputType();
+    method @Deprecated @NonNull public static android.text.method.TimeKeyListener getInstance();
+    method @NonNull public static android.text.method.TimeKeyListener getInstance(@Nullable java.util.Locale);
+    field @Deprecated public static final char[] CHARACTERS;
+  }
+
+  public class Touch {
+    method public static int getInitialScrollX(android.widget.TextView, android.text.Spannable);
+    method public static int getInitialScrollY(android.widget.TextView, android.text.Spannable);
+    method public static boolean onTouchEvent(android.widget.TextView, android.text.Spannable, android.view.MotionEvent);
+    method public static void scrollTo(android.widget.TextView, android.text.Layout, int, int);
+  }
+
+  public interface TransformationMethod {
+    method public CharSequence getTransformation(CharSequence, android.view.View);
+    method public void onFocusChanged(android.view.View, CharSequence, boolean, int, android.graphics.Rect);
+  }
+
+}
+
+package android.text.style {
+
+  public class AbsoluteSizeSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public AbsoluteSizeSpan(int);
+    ctor public AbsoluteSizeSpan(int, boolean);
+    ctor public AbsoluteSizeSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public boolean getDip();
+    method public int getSize();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface AlignmentSpan extends android.text.style.ParagraphStyle {
+    method public android.text.Layout.Alignment getAlignment();
+  }
+
+  public static class AlignmentSpan.Standard implements android.text.style.AlignmentSpan android.text.ParcelableSpan {
+    ctor public AlignmentSpan.Standard(@NonNull android.text.Layout.Alignment);
+    ctor public AlignmentSpan.Standard(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public android.text.Layout.Alignment getAlignment();
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class BackgroundColorSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public BackgroundColorSpan(@ColorInt int);
+    ctor public BackgroundColorSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method @ColorInt public int getBackgroundColor();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class BulletSpan implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan {
+    ctor public BulletSpan();
+    ctor public BulletSpan(int);
+    ctor public BulletSpan(int, @ColorInt int);
+    ctor public BulletSpan(int, @ColorInt int, @IntRange(from=0) int);
+    ctor public BulletSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public void drawLeadingMargin(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, int, int, int, int, int, @NonNull CharSequence, int, int, boolean, @Nullable android.text.Layout);
+    method public int getBulletRadius();
+    method public int getColor();
+    method public int getGapWidth();
+    method public int getLeadingMargin(boolean);
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int STANDARD_GAP_WIDTH = 2; // 0x2
+  }
+
+  public abstract class CharacterStyle {
+    ctor public CharacterStyle();
+    method public android.text.style.CharacterStyle getUnderlying();
+    method public abstract void updateDrawState(android.text.TextPaint);
+    method public static android.text.style.CharacterStyle wrap(android.text.style.CharacterStyle);
+  }
+
+  public abstract class ClickableSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance {
+    ctor public ClickableSpan();
+    method public abstract void onClick(@NonNull android.view.View);
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+  }
+
+  public class DrawableMarginSpan implements android.text.style.LeadingMarginSpan android.text.style.LineHeightSpan {
+    ctor public DrawableMarginSpan(@NonNull android.graphics.drawable.Drawable);
+    ctor public DrawableMarginSpan(@NonNull android.graphics.drawable.Drawable, int);
+    method public void chooseHeight(@NonNull CharSequence, int, int, int, int, @NonNull android.graphics.Paint.FontMetricsInt);
+    method public void drawLeadingMargin(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, int, int, int, int, int, @NonNull CharSequence, int, int, boolean, @NonNull android.text.Layout);
+    method public int getLeadingMargin(boolean);
+  }
+
+  public abstract class DynamicDrawableSpan extends android.text.style.ReplacementSpan {
+    ctor public DynamicDrawableSpan();
+    ctor protected DynamicDrawableSpan(int);
+    method public void draw(@NonNull android.graphics.Canvas, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, float, int, int, int, @NonNull android.graphics.Paint);
+    method public abstract android.graphics.drawable.Drawable getDrawable();
+    method public int getSize(@NonNull android.graphics.Paint, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.graphics.Paint.FontMetricsInt);
+    method public int getVerticalAlignment();
+    field public static final int ALIGN_BASELINE = 1; // 0x1
+    field public static final int ALIGN_BOTTOM = 0; // 0x0
+    field public static final int ALIGN_CENTER = 2; // 0x2
+    field protected final int mVerticalAlignment;
+  }
+
+  public class EasyEditSpan implements android.text.ParcelableSpan {
+    ctor public EasyEditSpan();
+    ctor public EasyEditSpan(android.app.PendingIntent);
+    ctor public EasyEditSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final String EXTRA_TEXT_CHANGED_TYPE = "android.text.style.EXTRA_TEXT_CHANGED_TYPE";
+    field public static final int TEXT_DELETED = 1; // 0x1
+    field public static final int TEXT_MODIFIED = 2; // 0x2
+  }
+
+  public class ForegroundColorSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public ForegroundColorSpan(@ColorInt int);
+    ctor public ForegroundColorSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method @ColorInt public int getForegroundColor();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class IconMarginSpan implements android.text.style.LeadingMarginSpan android.text.style.LineHeightSpan {
+    ctor public IconMarginSpan(@NonNull android.graphics.Bitmap);
+    ctor public IconMarginSpan(@NonNull android.graphics.Bitmap, @IntRange(from=0) int);
+    method public void chooseHeight(CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt);
+    method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, CharSequence, int, int, boolean, android.text.Layout);
+    method public int getLeadingMargin(boolean);
+  }
+
+  public class ImageSpan extends android.text.style.DynamicDrawableSpan {
+    ctor @Deprecated public ImageSpan(@NonNull android.graphics.Bitmap);
+    ctor @Deprecated public ImageSpan(@NonNull android.graphics.Bitmap, int);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.graphics.Bitmap);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.graphics.Bitmap, int);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable, int);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable, @NonNull String);
+    ctor public ImageSpan(@NonNull android.graphics.drawable.Drawable, @NonNull String, int);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.net.Uri);
+    ctor public ImageSpan(@NonNull android.content.Context, @NonNull android.net.Uri, int);
+    ctor public ImageSpan(@NonNull android.content.Context, @DrawableRes int);
+    ctor public ImageSpan(@NonNull android.content.Context, @DrawableRes int, int);
+    method public android.graphics.drawable.Drawable getDrawable();
+    method @Nullable public String getSource();
+  }
+
+  public interface LeadingMarginSpan extends android.text.style.ParagraphStyle {
+    method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, CharSequence, int, int, boolean, android.text.Layout);
+    method public int getLeadingMargin(boolean);
+  }
+
+  public static interface LeadingMarginSpan.LeadingMarginSpan2 extends android.text.style.LeadingMarginSpan android.text.style.WrapTogetherSpan {
+    method public int getLeadingMarginLineCount();
+  }
+
+  public static class LeadingMarginSpan.Standard implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan {
+    ctor public LeadingMarginSpan.Standard(int, int);
+    ctor public LeadingMarginSpan.Standard(int);
+    ctor public LeadingMarginSpan.Standard(android.os.Parcel);
+    method public int describeContents();
+    method public void drawLeadingMargin(android.graphics.Canvas, android.graphics.Paint, int, int, int, int, int, CharSequence, int, int, boolean, android.text.Layout);
+    method public int getLeadingMargin(boolean);
+    method public int getSpanTypeId();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public interface LineBackgroundSpan extends android.text.style.ParagraphStyle {
+    method public void drawBackground(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, @Px int, @Px int, @Px int, @Px int, @Px int, @NonNull CharSequence, int, int, int);
+  }
+
+  public static class LineBackgroundSpan.Standard implements android.text.style.LineBackgroundSpan android.text.ParcelableSpan {
+    ctor public LineBackgroundSpan.Standard(@ColorInt int);
+    ctor public LineBackgroundSpan.Standard(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public void drawBackground(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, @Px int, @Px int, @Px int, @Px int, @Px int, @NonNull CharSequence, int, int, int);
+    method @ColorInt public final int getColor();
+    method public int getSpanTypeId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface LineHeightSpan extends android.text.style.ParagraphStyle android.text.style.WrapTogetherSpan {
+    method public void chooseHeight(CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt);
+  }
+
+  public static class LineHeightSpan.Standard implements android.text.style.LineHeightSpan android.text.ParcelableSpan {
+    ctor public LineHeightSpan.Standard(@IntRange(from=1) @Px int);
+    ctor public LineHeightSpan.Standard(@NonNull android.os.Parcel);
+    method public void chooseHeight(@NonNull CharSequence, int, int, int, int, @NonNull android.graphics.Paint.FontMetricsInt);
+    method public int describeContents();
+    method @Px public int getHeight();
+    method public int getSpanTypeId();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public static interface LineHeightSpan.WithDensity extends android.text.style.LineHeightSpan {
+    method public void chooseHeight(CharSequence, int, int, int, int, android.graphics.Paint.FontMetricsInt, android.text.TextPaint);
+  }
+
+  public class LocaleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public LocaleSpan(@Nullable java.util.Locale);
+    ctor public LocaleSpan(@NonNull android.os.LocaleList);
+    ctor public LocaleSpan(android.os.Parcel);
+    method public int describeContents();
+    method @Nullable public java.util.Locale getLocale();
+    method @NonNull public android.os.LocaleList getLocales();
+    method public int getSpanTypeId();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class MaskFilterSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance {
+    ctor public MaskFilterSpan(android.graphics.MaskFilter);
+    method public android.graphics.MaskFilter getMaskFilter();
+    method public void updateDrawState(android.text.TextPaint);
+  }
+
+  public abstract class MetricAffectingSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateLayout {
+    ctor public MetricAffectingSpan();
+    method public android.text.style.MetricAffectingSpan getUnderlying();
+    method public abstract void updateMeasureState(@NonNull android.text.TextPaint);
+  }
+
+  public interface ParagraphStyle {
+  }
+
+  public class QuoteSpan implements android.text.style.LeadingMarginSpan android.text.ParcelableSpan {
+    ctor public QuoteSpan();
+    ctor public QuoteSpan(@ColorInt int);
+    ctor public QuoteSpan(@ColorInt int, @IntRange(from=0) int, @IntRange(from=0) int);
+    ctor public QuoteSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public void drawLeadingMargin(@NonNull android.graphics.Canvas, @NonNull android.graphics.Paint, int, int, int, int, int, @NonNull CharSequence, int, int, boolean, @NonNull android.text.Layout);
+    method @ColorInt public int getColor();
+    method public int getGapWidth();
+    method public int getLeadingMargin(boolean);
+    method public int getSpanTypeId();
+    method public int getStripeWidth();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @ColorInt public static final int STANDARD_COLOR = -16776961; // 0xff0000ff
+    field public static final int STANDARD_GAP_WIDTH_PX = 2; // 0x2
+    field public static final int STANDARD_STRIPE_WIDTH_PX = 2; // 0x2
+  }
+
+  public class RelativeSizeSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public RelativeSizeSpan(@FloatRange(from=0) float);
+    ctor public RelativeSizeSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public float getSizeChange();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public abstract class ReplacementSpan extends android.text.style.MetricAffectingSpan {
+    ctor public ReplacementSpan();
+    method public abstract void draw(@NonNull android.graphics.Canvas, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, float, int, int, int, @NonNull android.graphics.Paint);
+    method @Nullable public CharSequence getContentDescription();
+    method public abstract int getSize(@NonNull android.graphics.Paint, CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.graphics.Paint.FontMetricsInt);
+    method public void setContentDescription(@Nullable CharSequence);
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+  }
+
+  public class ScaleXSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public ScaleXSpan(@FloatRange(from=0) float);
+    ctor public ScaleXSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public float getScaleX();
+    method public int getSpanTypeId();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class StrikethroughSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public StrikethroughSpan();
+    ctor public StrikethroughSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class StyleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public StyleSpan(int);
+    ctor public StyleSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public int getStyle();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class SubscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public SubscriptSpan();
+    ctor public SubscriptSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class SuggestionSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan {
+    ctor public SuggestionSpan(android.content.Context, String[], int);
+    ctor public SuggestionSpan(java.util.Locale, String[], int);
+    ctor public SuggestionSpan(android.content.Context, java.util.Locale, String[], int, Class<?>);
+    ctor public SuggestionSpan(android.os.Parcel);
+    method public int describeContents();
+    method public int getFlags();
+    method @Deprecated @NonNull public String getLocale();
+    method @Nullable public java.util.Locale getLocaleObject();
+    method public int getSpanTypeId();
+    method public String[] getSuggestions();
+    method @ColorInt public int getUnderlineColor();
+    method public void setFlags(int);
+    method public void updateDrawState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final String ACTION_SUGGESTION_PICKED = "android.text.style.SUGGESTION_PICKED";
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.style.SuggestionSpan> CREATOR;
+    field public static final int FLAG_AUTO_CORRECTION = 4; // 0x4
+    field public static final int FLAG_EASY_CORRECT = 1; // 0x1
+    field public static final int FLAG_GRAMMAR_ERROR = 8; // 0x8
+    field public static final int FLAG_MISSPELLED = 2; // 0x2
+    field public static final int SUGGESTIONS_MAX_SIZE = 5; // 0x5
+    field @Deprecated public static final String SUGGESTION_SPAN_PICKED_AFTER = "after";
+    field @Deprecated public static final String SUGGESTION_SPAN_PICKED_BEFORE = "before";
+    field @Deprecated public static final String SUGGESTION_SPAN_PICKED_HASHCODE = "hashcode";
+  }
+
+  public class SuperscriptSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public SuperscriptSpan();
+    ctor public SuperscriptSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface TabStopSpan extends android.text.style.ParagraphStyle {
+    method public int getTabStop();
+  }
+
+  public static class TabStopSpan.Standard implements android.text.style.TabStopSpan {
+    ctor public TabStopSpan.Standard(@IntRange(from=0) int);
+    method public int getTabStop();
+  }
+
+  public class TextAppearanceSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public TextAppearanceSpan(android.content.Context, int);
+    ctor public TextAppearanceSpan(android.content.Context, int, int);
+    ctor public TextAppearanceSpan(String, int, int, android.content.res.ColorStateList, android.content.res.ColorStateList);
+    ctor public TextAppearanceSpan(android.os.Parcel);
+    method public int describeContents();
+    method public String getFamily();
+    method @Nullable public String getFontFeatureSettings();
+    method @Nullable public String getFontVariationSettings();
+    method public android.content.res.ColorStateList getLinkTextColor();
+    method public int getShadowColor();
+    method public float getShadowDx();
+    method public float getShadowDy();
+    method public float getShadowRadius();
+    method public int getSpanTypeId();
+    method public android.content.res.ColorStateList getTextColor();
+    method public int getTextFontWeight();
+    method @Nullable public android.os.LocaleList getTextLocales();
+    method public int getTextSize();
+    method public int getTextStyle();
+    method @Nullable public android.graphics.Typeface getTypeface();
+    method public boolean isElegantTextHeight();
+    method public void updateDrawState(android.text.TextPaint);
+    method public void updateMeasureState(android.text.TextPaint);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class TtsSpan implements android.text.ParcelableSpan {
+    ctor public TtsSpan(String, android.os.PersistableBundle);
+    ctor public TtsSpan(android.os.Parcel);
+    method public int describeContents();
+    method public android.os.PersistableBundle getArgs();
+    method public int getSpanTypeId();
+    method public String getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String ANIMACY_ANIMATE = "android.animate";
+    field public static final String ANIMACY_INANIMATE = "android.inanimate";
+    field public static final String ARG_ANIMACY = "android.arg.animacy";
+    field public static final String ARG_CASE = "android.arg.case";
+    field public static final String ARG_COUNTRY_CODE = "android.arg.country_code";
+    field public static final String ARG_CURRENCY = "android.arg.money";
+    field public static final String ARG_DAY = "android.arg.day";
+    field public static final String ARG_DENOMINATOR = "android.arg.denominator";
+    field public static final String ARG_DIGITS = "android.arg.digits";
+    field public static final String ARG_DOMAIN = "android.arg.domain";
+    field public static final String ARG_EXTENSION = "android.arg.extension";
+    field public static final String ARG_FRACTIONAL_PART = "android.arg.fractional_part";
+    field public static final String ARG_FRAGMENT_ID = "android.arg.fragment_id";
+    field public static final String ARG_GENDER = "android.arg.gender";
+    field public static final String ARG_HOURS = "android.arg.hours";
+    field public static final String ARG_INTEGER_PART = "android.arg.integer_part";
+    field public static final String ARG_MINUTES = "android.arg.minutes";
+    field public static final String ARG_MONTH = "android.arg.month";
+    field public static final String ARG_MULTIPLICITY = "android.arg.multiplicity";
+    field public static final String ARG_NUMBER = "android.arg.number";
+    field public static final String ARG_NUMBER_PARTS = "android.arg.number_parts";
+    field public static final String ARG_NUMERATOR = "android.arg.numerator";
+    field public static final String ARG_PASSWORD = "android.arg.password";
+    field public static final String ARG_PATH = "android.arg.path";
+    field public static final String ARG_PORT = "android.arg.port";
+    field public static final String ARG_PROTOCOL = "android.arg.protocol";
+    field public static final String ARG_QUANTITY = "android.arg.quantity";
+    field public static final String ARG_QUERY_STRING = "android.arg.query_string";
+    field public static final String ARG_TEXT = "android.arg.text";
+    field public static final String ARG_UNIT = "android.arg.unit";
+    field public static final String ARG_USERNAME = "android.arg.username";
+    field public static final String ARG_VERBATIM = "android.arg.verbatim";
+    field public static final String ARG_WEEKDAY = "android.arg.weekday";
+    field public static final String ARG_YEAR = "android.arg.year";
+    field public static final String CASE_ABLATIVE = "android.ablative";
+    field public static final String CASE_ACCUSATIVE = "android.accusative";
+    field public static final String CASE_DATIVE = "android.dative";
+    field public static final String CASE_GENITIVE = "android.genitive";
+    field public static final String CASE_INSTRUMENTAL = "android.instrumental";
+    field public static final String CASE_LOCATIVE = "android.locative";
+    field public static final String CASE_NOMINATIVE = "android.nominative";
+    field public static final String CASE_VOCATIVE = "android.vocative";
+    field public static final String GENDER_FEMALE = "android.female";
+    field public static final String GENDER_MALE = "android.male";
+    field public static final String GENDER_NEUTRAL = "android.neutral";
+    field public static final int MONTH_APRIL = 3; // 0x3
+    field public static final int MONTH_AUGUST = 7; // 0x7
+    field public static final int MONTH_DECEMBER = 11; // 0xb
+    field public static final int MONTH_FEBRUARY = 1; // 0x1
+    field public static final int MONTH_JANUARY = 0; // 0x0
+    field public static final int MONTH_JULY = 6; // 0x6
+    field public static final int MONTH_JUNE = 5; // 0x5
+    field public static final int MONTH_MARCH = 2; // 0x2
+    field public static final int MONTH_MAY = 4; // 0x4
+    field public static final int MONTH_NOVEMBER = 10; // 0xa
+    field public static final int MONTH_OCTOBER = 9; // 0x9
+    field public static final int MONTH_SEPTEMBER = 8; // 0x8
+    field public static final String MULTIPLICITY_DUAL = "android.dual";
+    field public static final String MULTIPLICITY_PLURAL = "android.plural";
+    field public static final String MULTIPLICITY_SINGLE = "android.single";
+    field public static final String TYPE_CARDINAL = "android.type.cardinal";
+    field public static final String TYPE_DATE = "android.type.date";
+    field public static final String TYPE_DECIMAL = "android.type.decimal";
+    field public static final String TYPE_DIGITS = "android.type.digits";
+    field public static final String TYPE_ELECTRONIC = "android.type.electronic";
+    field public static final String TYPE_FRACTION = "android.type.fraction";
+    field public static final String TYPE_MEASURE = "android.type.measure";
+    field public static final String TYPE_MONEY = "android.type.money";
+    field public static final String TYPE_ORDINAL = "android.type.ordinal";
+    field public static final String TYPE_TELEPHONE = "android.type.telephone";
+    field public static final String TYPE_TEXT = "android.type.text";
+    field public static final String TYPE_TIME = "android.type.time";
+    field public static final String TYPE_VERBATIM = "android.type.verbatim";
+    field public static final int WEEKDAY_FRIDAY = 6; // 0x6
+    field public static final int WEEKDAY_MONDAY = 2; // 0x2
+    field public static final int WEEKDAY_SATURDAY = 7; // 0x7
+    field public static final int WEEKDAY_SUNDAY = 1; // 0x1
+    field public static final int WEEKDAY_THURSDAY = 5; // 0x5
+    field public static final int WEEKDAY_TUESDAY = 3; // 0x3
+    field public static final int WEEKDAY_WEDNESDAY = 4; // 0x4
+  }
+
+  public static class TtsSpan.Builder<C extends android.text.style.TtsSpan.Builder<?>> {
+    ctor public TtsSpan.Builder(String);
+    method public android.text.style.TtsSpan build();
+    method public C setIntArgument(String, int);
+    method public C setLongArgument(String, long);
+    method public C setStringArgument(String, String);
+  }
+
+  public static class TtsSpan.CardinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.CardinalBuilder> {
+    ctor public TtsSpan.CardinalBuilder();
+    ctor public TtsSpan.CardinalBuilder(long);
+    ctor public TtsSpan.CardinalBuilder(String);
+    method public android.text.style.TtsSpan.CardinalBuilder setNumber(long);
+    method public android.text.style.TtsSpan.CardinalBuilder setNumber(String);
+  }
+
+  public static class TtsSpan.DateBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.DateBuilder> {
+    ctor public TtsSpan.DateBuilder();
+    ctor public TtsSpan.DateBuilder(Integer, Integer, Integer, Integer);
+    method public android.text.style.TtsSpan.DateBuilder setDay(int);
+    method public android.text.style.TtsSpan.DateBuilder setMonth(int);
+    method public android.text.style.TtsSpan.DateBuilder setWeekday(int);
+    method public android.text.style.TtsSpan.DateBuilder setYear(int);
+  }
+
+  public static class TtsSpan.DecimalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.DecimalBuilder> {
+    ctor public TtsSpan.DecimalBuilder();
+    ctor public TtsSpan.DecimalBuilder(double, int, int);
+    ctor public TtsSpan.DecimalBuilder(String, String);
+    method public android.text.style.TtsSpan.DecimalBuilder setArgumentsFromDouble(double, int, int);
+    method public android.text.style.TtsSpan.DecimalBuilder setFractionalPart(String);
+    method public android.text.style.TtsSpan.DecimalBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.DecimalBuilder setIntegerPart(String);
+  }
+
+  public static class TtsSpan.DigitsBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.DigitsBuilder> {
+    ctor public TtsSpan.DigitsBuilder();
+    ctor public TtsSpan.DigitsBuilder(String);
+    method public android.text.style.TtsSpan.DigitsBuilder setDigits(String);
+  }
+
+  public static class TtsSpan.ElectronicBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.ElectronicBuilder> {
+    ctor public TtsSpan.ElectronicBuilder();
+    method public android.text.style.TtsSpan.ElectronicBuilder setDomain(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setEmailArguments(String, String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setFragmentId(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setPassword(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setPath(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setPort(int);
+    method public android.text.style.TtsSpan.ElectronicBuilder setProtocol(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setQueryString(String);
+    method public android.text.style.TtsSpan.ElectronicBuilder setUsername(String);
+  }
+
+  public static class TtsSpan.FractionBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.FractionBuilder> {
+    ctor public TtsSpan.FractionBuilder();
+    ctor public TtsSpan.FractionBuilder(long, long, long);
+    method public android.text.style.TtsSpan.FractionBuilder setDenominator(long);
+    method public android.text.style.TtsSpan.FractionBuilder setDenominator(String);
+    method public android.text.style.TtsSpan.FractionBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.FractionBuilder setIntegerPart(String);
+    method public android.text.style.TtsSpan.FractionBuilder setNumerator(long);
+    method public android.text.style.TtsSpan.FractionBuilder setNumerator(String);
+  }
+
+  public static class TtsSpan.MeasureBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.MeasureBuilder> {
+    ctor public TtsSpan.MeasureBuilder();
+    method public android.text.style.TtsSpan.MeasureBuilder setDenominator(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setDenominator(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setFractionalPart(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setIntegerPart(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumber(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumber(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumerator(long);
+    method public android.text.style.TtsSpan.MeasureBuilder setNumerator(String);
+    method public android.text.style.TtsSpan.MeasureBuilder setUnit(String);
+  }
+
+  public static class TtsSpan.MoneyBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.MoneyBuilder> {
+    ctor public TtsSpan.MoneyBuilder();
+    method public android.text.style.TtsSpan.MoneyBuilder setCurrency(String);
+    method public android.text.style.TtsSpan.MoneyBuilder setFractionalPart(String);
+    method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(long);
+    method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(String);
+    method public android.text.style.TtsSpan.MoneyBuilder setQuantity(String);
+  }
+
+  public static class TtsSpan.OrdinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.OrdinalBuilder> {
+    ctor public TtsSpan.OrdinalBuilder();
+    ctor public TtsSpan.OrdinalBuilder(long);
+    ctor public TtsSpan.OrdinalBuilder(String);
+    method public android.text.style.TtsSpan.OrdinalBuilder setNumber(long);
+    method public android.text.style.TtsSpan.OrdinalBuilder setNumber(String);
+  }
+
+  public static class TtsSpan.SemioticClassBuilder<C extends android.text.style.TtsSpan.SemioticClassBuilder<?>> extends android.text.style.TtsSpan.Builder<C> {
+    ctor public TtsSpan.SemioticClassBuilder(String);
+    method public C setAnimacy(String);
+    method public C setCase(String);
+    method public C setGender(String);
+    method public C setMultiplicity(String);
+  }
+
+  public static class TtsSpan.TelephoneBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.TelephoneBuilder> {
+    ctor public TtsSpan.TelephoneBuilder();
+    ctor public TtsSpan.TelephoneBuilder(String);
+    method public android.text.style.TtsSpan.TelephoneBuilder setCountryCode(String);
+    method public android.text.style.TtsSpan.TelephoneBuilder setExtension(String);
+    method public android.text.style.TtsSpan.TelephoneBuilder setNumberParts(String);
+  }
+
+  public static class TtsSpan.TextBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.TextBuilder> {
+    ctor public TtsSpan.TextBuilder();
+    ctor public TtsSpan.TextBuilder(String);
+    method public android.text.style.TtsSpan.TextBuilder setText(String);
+  }
+
+  public static class TtsSpan.TimeBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.TimeBuilder> {
+    ctor public TtsSpan.TimeBuilder();
+    ctor public TtsSpan.TimeBuilder(int, int);
+    method public android.text.style.TtsSpan.TimeBuilder setHours(int);
+    method public android.text.style.TtsSpan.TimeBuilder setMinutes(int);
+  }
+
+  public static class TtsSpan.VerbatimBuilder extends android.text.style.TtsSpan.SemioticClassBuilder<android.text.style.TtsSpan.VerbatimBuilder> {
+    ctor public TtsSpan.VerbatimBuilder();
+    ctor public TtsSpan.VerbatimBuilder(String);
+    method public android.text.style.TtsSpan.VerbatimBuilder setVerbatim(String);
+  }
+
+  public class TypefaceSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
+    ctor public TypefaceSpan(@Nullable String);
+    ctor public TypefaceSpan(@NonNull android.graphics.Typeface);
+    ctor public TypefaceSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method @Nullable public String getFamily();
+    method public int getSpanTypeId();
+    method @Nullable public android.graphics.Typeface getTypeface();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void updateMeasureState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class URLSpan extends android.text.style.ClickableSpan implements android.text.ParcelableSpan {
+    ctor public URLSpan(String);
+    ctor public URLSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public String getURL();
+    method public void onClick(android.view.View);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public class UnderlineSpan extends android.text.style.CharacterStyle implements android.text.ParcelableSpan android.text.style.UpdateAppearance {
+    ctor public UnderlineSpan();
+    ctor public UnderlineSpan(@NonNull android.os.Parcel);
+    method public int describeContents();
+    method public int getSpanTypeId();
+    method public void updateDrawState(@NonNull android.text.TextPaint);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+  public interface UpdateAppearance {
+  }
+
+  public interface UpdateLayout extends android.text.style.UpdateAppearance {
+  }
+
+  public interface WrapTogetherSpan extends android.text.style.ParagraphStyle {
+  }
+
+}
+
+package android.text.util {
+
+  public class Linkify {
+    ctor public Linkify();
+    method public static final boolean addLinks(@NonNull android.text.Spannable, int);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, int, @Nullable java.util.function.Function<java.lang.String,android.text.style.URLSpan>);
+    method public static final boolean addLinks(@NonNull android.widget.TextView, int);
+    method public static final void addLinks(@NonNull android.widget.TextView, @NonNull java.util.regex.Pattern, @Nullable String);
+    method public static final void addLinks(@NonNull android.widget.TextView, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final void addLinks(@NonNull android.widget.TextView, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable String[], @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable String[], @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter);
+    method public static final boolean addLinks(@NonNull android.text.Spannable, @NonNull java.util.regex.Pattern, @Nullable String, @Nullable String[], @Nullable android.text.util.Linkify.MatchFilter, @Nullable android.text.util.Linkify.TransformFilter, @Nullable java.util.function.Function<java.lang.String,android.text.style.URLSpan>);
+    field public static final int ALL = 15; // 0xf
+    field public static final int EMAIL_ADDRESSES = 2; // 0x2
+    field @Deprecated public static final int MAP_ADDRESSES = 8; // 0x8
+    field public static final int PHONE_NUMBERS = 4; // 0x4
+    field public static final int WEB_URLS = 1; // 0x1
+    field public static final android.text.util.Linkify.MatchFilter sPhoneNumberMatchFilter;
+    field public static final android.text.util.Linkify.TransformFilter sPhoneNumberTransformFilter;
+    field public static final android.text.util.Linkify.MatchFilter sUrlMatchFilter;
+  }
+
+  public static interface Linkify.MatchFilter {
+    method public boolean acceptMatch(CharSequence, int, int);
+  }
+
+  public static interface Linkify.TransformFilter {
+    method public String transformUrl(java.util.regex.Matcher, String);
+  }
+
+  public class Rfc822Token {
+    ctor public Rfc822Token(@Nullable String, @Nullable String, @Nullable String);
+    method @Nullable public String getAddress();
+    method @Nullable public String getComment();
+    method @Nullable public String getName();
+    method public static String quoteComment(String);
+    method public static String quoteName(String);
+    method public static String quoteNameIfNecessary(String);
+    method public void setAddress(@Nullable String);
+    method public void setComment(@Nullable String);
+    method public void setName(@Nullable String);
+  }
+
+  public class Rfc822Tokenizer implements android.widget.MultiAutoCompleteTextView.Tokenizer {
+    ctor public Rfc822Tokenizer();
+    method public int findTokenEnd(CharSequence, int);
+    method public int findTokenStart(CharSequence, int);
+    method public CharSequence terminateToken(CharSequence);
+    method public static void tokenize(CharSequence, java.util.Collection<android.text.util.Rfc822Token>);
+    method public static android.text.util.Rfc822Token[] tokenize(CharSequence);
+  }
+
+}
+
+package android.transition {
+
+  public class ArcMotion extends android.transition.PathMotion {
+    ctor public ArcMotion();
+    ctor public ArcMotion(android.content.Context, android.util.AttributeSet);
+    method public float getMaximumAngle();
+    method public float getMinimumHorizontalAngle();
+    method public float getMinimumVerticalAngle();
+    method public android.graphics.Path getPath(float, float, float, float);
+    method public void setMaximumAngle(float);
+    method public void setMinimumHorizontalAngle(float);
+    method public void setMinimumVerticalAngle(float);
+  }
+
+  public class AutoTransition extends android.transition.TransitionSet {
+    ctor public AutoTransition();
+    ctor public AutoTransition(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class ChangeBounds extends android.transition.Transition {
+    ctor public ChangeBounds();
+    ctor public ChangeBounds(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public boolean getResizeClip();
+    method @Deprecated public void setReparent(boolean);
+    method public void setResizeClip(boolean);
+  }
+
+  public class ChangeClipBounds extends android.transition.Transition {
+    ctor public ChangeClipBounds();
+    ctor public ChangeClipBounds(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class ChangeImageTransform extends android.transition.Transition {
+    ctor public ChangeImageTransform();
+    ctor public ChangeImageTransform(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class ChangeScroll extends android.transition.Transition {
+    ctor public ChangeScroll();
+    ctor public ChangeScroll(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class ChangeTransform extends android.transition.Transition {
+    ctor public ChangeTransform();
+    ctor public ChangeTransform(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public boolean getReparent();
+    method public boolean getReparentWithOverlay();
+    method public void setReparent(boolean);
+    method public void setReparentWithOverlay(boolean);
+  }
+
+  public class CircularPropagation extends android.transition.VisibilityPropagation {
+    ctor public CircularPropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+  }
+
+  public class Explode extends android.transition.Visibility {
+    ctor public Explode();
+    ctor public Explode(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class Fade extends android.transition.Visibility {
+    ctor public Fade();
+    ctor public Fade(int);
+    ctor public Fade(android.content.Context, android.util.AttributeSet);
+    field public static final int IN = 1; // 0x1
+    field public static final int OUT = 2; // 0x2
+  }
+
+  public abstract class PathMotion {
+    ctor public PathMotion();
+    ctor public PathMotion(android.content.Context, android.util.AttributeSet);
+    method public abstract android.graphics.Path getPath(float, float, float, float);
+  }
+
+  public class PatternPathMotion extends android.transition.PathMotion {
+    ctor public PatternPathMotion();
+    ctor public PatternPathMotion(android.content.Context, android.util.AttributeSet);
+    ctor public PatternPathMotion(android.graphics.Path);
+    method public android.graphics.Path getPath(float, float, float, float);
+    method public android.graphics.Path getPatternPath();
+    method public void setPatternPath(android.graphics.Path);
+  }
+
+  public final class Scene {
+    ctor public Scene(android.view.ViewGroup);
+    ctor public Scene(android.view.ViewGroup, android.view.View);
+    ctor @Deprecated public Scene(android.view.ViewGroup, android.view.ViewGroup);
+    method public void enter();
+    method public void exit();
+    method @Nullable public static android.transition.Scene getCurrentScene(@NonNull android.view.ViewGroup);
+    method public static android.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
+    method public android.view.ViewGroup getSceneRoot();
+    method public void setEnterAction(Runnable);
+    method public void setExitAction(Runnable);
+  }
+
+  public class SidePropagation extends android.transition.VisibilityPropagation {
+    ctor public SidePropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+    method public void setSide(int);
+  }
+
+  public class Slide extends android.transition.Visibility {
+    ctor public Slide();
+    ctor public Slide(int);
+    ctor public Slide(android.content.Context, android.util.AttributeSet);
+    method public int getSlideEdge();
+    method public void setSlideEdge(int);
+  }
+
+  public abstract class Transition implements java.lang.Cloneable {
+    ctor public Transition();
+    ctor public Transition(android.content.Context, android.util.AttributeSet);
+    method public android.transition.Transition addListener(android.transition.Transition.TransitionListener);
+    method public android.transition.Transition addTarget(int);
+    method public android.transition.Transition addTarget(String);
+    method public android.transition.Transition addTarget(Class);
+    method public android.transition.Transition addTarget(android.view.View);
+    method public boolean canRemoveViews();
+    method public abstract void captureEndValues(android.transition.TransitionValues);
+    method public abstract void captureStartValues(android.transition.TransitionValues);
+    method public android.transition.Transition clone();
+    method public android.animation.Animator createAnimator(android.view.ViewGroup, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public android.transition.Transition excludeChildren(int, boolean);
+    method public android.transition.Transition excludeChildren(android.view.View, boolean);
+    method public android.transition.Transition excludeChildren(Class, boolean);
+    method public android.transition.Transition excludeTarget(int, boolean);
+    method public android.transition.Transition excludeTarget(String, boolean);
+    method public android.transition.Transition excludeTarget(android.view.View, boolean);
+    method public android.transition.Transition excludeTarget(Class, boolean);
+    method public long getDuration();
+    method public android.graphics.Rect getEpicenter();
+    method public android.transition.Transition.EpicenterCallback getEpicenterCallback();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public String getName();
+    method public android.transition.PathMotion getPathMotion();
+    method public android.transition.TransitionPropagation getPropagation();
+    method public long getStartDelay();
+    method public java.util.List<java.lang.Integer> getTargetIds();
+    method public java.util.List<java.lang.String> getTargetNames();
+    method public java.util.List<java.lang.Class> getTargetTypes();
+    method public java.util.List<android.view.View> getTargets();
+    method public String[] getTransitionProperties();
+    method public android.transition.TransitionValues getTransitionValues(android.view.View, boolean);
+    method public boolean isTransitionRequired(@Nullable android.transition.TransitionValues, @Nullable android.transition.TransitionValues);
+    method public android.transition.Transition removeListener(android.transition.Transition.TransitionListener);
+    method public android.transition.Transition removeTarget(int);
+    method public android.transition.Transition removeTarget(String);
+    method public android.transition.Transition removeTarget(android.view.View);
+    method public android.transition.Transition removeTarget(Class);
+    method public android.transition.Transition setDuration(long);
+    method public void setEpicenterCallback(android.transition.Transition.EpicenterCallback);
+    method public android.transition.Transition setInterpolator(android.animation.TimeInterpolator);
+    method public void setMatchOrder(int...);
+    method public void setPathMotion(android.transition.PathMotion);
+    method public void setPropagation(android.transition.TransitionPropagation);
+    method public android.transition.Transition setStartDelay(long);
+    field public static final int MATCH_ID = 3; // 0x3
+    field public static final int MATCH_INSTANCE = 1; // 0x1
+    field public static final int MATCH_ITEM_ID = 4; // 0x4
+    field public static final int MATCH_NAME = 2; // 0x2
+  }
+
+  public abstract static class Transition.EpicenterCallback {
+    ctor public Transition.EpicenterCallback();
+    method public abstract android.graphics.Rect onGetEpicenter(android.transition.Transition);
+  }
+
+  public static interface Transition.TransitionListener {
+    method public void onTransitionCancel(android.transition.Transition);
+    method public void onTransitionEnd(android.transition.Transition);
+    method public void onTransitionPause(android.transition.Transition);
+    method public void onTransitionResume(android.transition.Transition);
+    method public void onTransitionStart(android.transition.Transition);
+  }
+
+  public class TransitionInflater {
+    method public static android.transition.TransitionInflater from(android.content.Context);
+    method public android.transition.Transition inflateTransition(@TransitionRes int);
+    method public android.transition.TransitionManager inflateTransitionManager(@TransitionRes int, android.view.ViewGroup);
+  }
+
+  public abstract class TransitionListenerAdapter implements android.transition.Transition.TransitionListener {
+    ctor public TransitionListenerAdapter();
+    method public void onTransitionCancel(android.transition.Transition);
+    method public void onTransitionEnd(android.transition.Transition);
+    method public void onTransitionPause(android.transition.Transition);
+    method public void onTransitionResume(android.transition.Transition);
+    method public void onTransitionStart(android.transition.Transition);
+  }
+
+  public class TransitionManager {
+    ctor public TransitionManager();
+    method public static void beginDelayedTransition(android.view.ViewGroup);
+    method public static void beginDelayedTransition(android.view.ViewGroup, android.transition.Transition);
+    method public static void endTransitions(android.view.ViewGroup);
+    method public static void go(android.transition.Scene);
+    method public static void go(android.transition.Scene, android.transition.Transition);
+    method public void setTransition(android.transition.Scene, android.transition.Transition);
+    method public void setTransition(android.transition.Scene, android.transition.Scene, android.transition.Transition);
+    method public void transitionTo(android.transition.Scene);
+  }
+
+  public abstract class TransitionPropagation {
+    ctor public TransitionPropagation();
+    method public abstract void captureValues(android.transition.TransitionValues);
+    method public abstract String[] getPropagationProperties();
+    method public abstract long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+  }
+
+  public class TransitionSet extends android.transition.Transition {
+    ctor public TransitionSet();
+    ctor public TransitionSet(android.content.Context, android.util.AttributeSet);
+    method public android.transition.TransitionSet addListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet addTarget(android.view.View);
+    method public android.transition.TransitionSet addTarget(int);
+    method public android.transition.TransitionSet addTarget(String);
+    method public android.transition.TransitionSet addTarget(Class);
+    method public android.transition.TransitionSet addTransition(android.transition.Transition);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public android.transition.TransitionSet clone();
+    method public int getOrdering();
+    method public android.transition.Transition getTransitionAt(int);
+    method public int getTransitionCount();
+    method public android.transition.TransitionSet removeListener(android.transition.Transition.TransitionListener);
+    method public android.transition.TransitionSet removeTarget(int);
+    method public android.transition.TransitionSet removeTarget(android.view.View);
+    method public android.transition.TransitionSet removeTarget(Class);
+    method public android.transition.TransitionSet removeTarget(String);
+    method public android.transition.TransitionSet removeTransition(android.transition.Transition);
+    method public android.transition.TransitionSet setDuration(long);
+    method public android.transition.TransitionSet setInterpolator(android.animation.TimeInterpolator);
+    method public android.transition.TransitionSet setOrdering(int);
+    method public android.transition.TransitionSet setStartDelay(long);
+    field public static final int ORDERING_SEQUENTIAL = 1; // 0x1
+    field public static final int ORDERING_TOGETHER = 0; // 0x0
+  }
+
+  public class TransitionValues {
+    ctor @Deprecated public TransitionValues();
+    ctor public TransitionValues(@NonNull android.view.View);
+    field @NonNull public final java.util.Map<java.lang.String,java.lang.Object> values;
+    field @NonNull public android.view.View view;
+  }
+
+  public abstract class Visibility extends android.transition.Transition {
+    ctor public Visibility();
+    ctor public Visibility(android.content.Context, android.util.AttributeSet);
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+    method public int getMode();
+    method public boolean isVisible(android.transition.TransitionValues);
+    method public android.animation.Animator onAppear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int);
+    method public android.animation.Animator onAppear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public android.animation.Animator onDisappear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int);
+    method public android.animation.Animator onDisappear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setMode(int);
+    field public static final int MODE_IN = 1; // 0x1
+    field public static final int MODE_OUT = 2; // 0x2
+  }
+
+  public abstract class VisibilityPropagation extends android.transition.TransitionPropagation {
+    ctor public VisibilityPropagation();
+    method public void captureValues(android.transition.TransitionValues);
+    method public String[] getPropagationProperties();
+    method public int getViewVisibility(android.transition.TransitionValues);
+    method public int getViewX(android.transition.TransitionValues);
+    method public int getViewY(android.transition.TransitionValues);
+  }
+
+}
+
+package android.util {
+
+  public class AndroidException extends java.lang.Exception {
+    ctor public AndroidException();
+    ctor public AndroidException(String);
+    ctor public AndroidException(String, Throwable);
+    ctor public AndroidException(Exception);
+  }
+
+  public class AndroidRuntimeException extends java.lang.RuntimeException {
+    ctor public AndroidRuntimeException();
+    ctor public AndroidRuntimeException(String);
+    ctor public AndroidRuntimeException(String, Throwable);
+    ctor public AndroidRuntimeException(Exception);
+  }
+
+  public final class ArrayMap<K, V> implements java.util.Map<K,V> {
+    ctor public ArrayMap();
+    ctor public ArrayMap(int);
+    ctor public ArrayMap(android.util.ArrayMap<K,V>);
+    method public void clear();
+    method public boolean containsAll(java.util.Collection<?>);
+    method public boolean containsKey(Object);
+    method public boolean containsValue(Object);
+    method public void ensureCapacity(int);
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public V get(Object);
+    method public int indexOfKey(Object);
+    method public int indexOfValue(Object);
+    method public boolean isEmpty();
+    method public K keyAt(int);
+    method public java.util.Set<K> keySet();
+    method public V put(K, V);
+    method public void putAll(android.util.ArrayMap<? extends K,? extends V>);
+    method public void putAll(java.util.Map<? extends K,? extends V>);
+    method public V remove(Object);
+    method public boolean removeAll(java.util.Collection<?>);
+    method public V removeAt(int);
+    method public boolean retainAll(java.util.Collection<?>);
+    method public V setValueAt(int, V);
+    method public int size();
+    method public V valueAt(int);
+    method public java.util.Collection<V> values();
+  }
+
+  public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
+    ctor public ArraySet();
+    ctor public ArraySet(int);
+    ctor public ArraySet(android.util.ArraySet<E>);
+    ctor public ArraySet(java.util.Collection<? extends E>);
+    ctor public ArraySet(@Nullable E[]);
+    method public boolean add(E);
+    method public void addAll(android.util.ArraySet<? extends E>);
+    method public boolean addAll(java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(Object);
+    method public boolean containsAll(java.util.Collection<?>);
+    method public void ensureCapacity(int);
+    method public int indexOf(Object);
+    method public boolean isEmpty();
+    method public java.util.Iterator<E> iterator();
+    method public boolean remove(Object);
+    method public boolean removeAll(android.util.ArraySet<? extends E>);
+    method public boolean removeAll(java.util.Collection<?>);
+    method public E removeAt(int);
+    method public boolean retainAll(java.util.Collection<?>);
+    method public int size();
+    method public Object[] toArray();
+    method public <T> T[] toArray(T[]);
+    method public E valueAt(int);
+  }
+
+  public class AtomicFile {
+    ctor public AtomicFile(java.io.File);
+    method public void delete();
+    method public void failWrite(java.io.FileOutputStream);
+    method public void finishWrite(java.io.FileOutputStream);
+    method public java.io.File getBaseFile();
+    method public long getLastModifiedTime();
+    method public java.io.FileInputStream openRead() throws java.io.FileNotFoundException;
+    method public byte[] readFully() throws java.io.IOException;
+    method public java.io.FileOutputStream startWrite() throws java.io.IOException;
+  }
+
+  public interface AttributeSet {
+    method public boolean getAttributeBooleanValue(String, String, boolean);
+    method public boolean getAttributeBooleanValue(int, boolean);
+    method public int getAttributeCount();
+    method public float getAttributeFloatValue(String, String, float);
+    method public float getAttributeFloatValue(int, float);
+    method public int getAttributeIntValue(String, String, int);
+    method public int getAttributeIntValue(int, int);
+    method public int getAttributeListValue(String, String, String[], int);
+    method public int getAttributeListValue(int, String[], int);
+    method public String getAttributeName(int);
+    method public int getAttributeNameResource(int);
+    method public default String getAttributeNamespace(int);
+    method public int getAttributeResourceValue(String, String, int);
+    method public int getAttributeResourceValue(int, int);
+    method public int getAttributeUnsignedIntValue(String, String, int);
+    method public int getAttributeUnsignedIntValue(int, int);
+    method public String getAttributeValue(int);
+    method public String getAttributeValue(String, String);
+    method public String getClassAttribute();
+    method public String getIdAttribute();
+    method public int getIdAttributeResourceValue(int);
+    method public String getPositionDescription();
+    method public int getStyleAttribute();
+  }
+
+  public class Base64 {
+    method public static byte[] decode(String, int);
+    method public static byte[] decode(byte[], int);
+    method public static byte[] decode(byte[], int, int, int);
+    method public static byte[] encode(byte[], int);
+    method public static byte[] encode(byte[], int, int, int);
+    method public static String encodeToString(byte[], int);
+    method public static String encodeToString(byte[], int, int, int);
+    field public static final int CRLF = 4; // 0x4
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int NO_CLOSE = 16; // 0x10
+    field public static final int NO_PADDING = 1; // 0x1
+    field public static final int NO_WRAP = 2; // 0x2
+    field public static final int URL_SAFE = 8; // 0x8
+  }
+
+  public class Base64DataException extends java.io.IOException {
+    ctor public Base64DataException(String);
+  }
+
+  public class Base64InputStream extends java.io.FilterInputStream {
+    ctor public Base64InputStream(java.io.InputStream, int);
+    method public int available();
+    method public void reset();
+  }
+
+  public class Base64OutputStream extends java.io.FilterOutputStream {
+    ctor public Base64OutputStream(java.io.OutputStream, int);
+  }
+
+  public final class CloseGuard {
+    ctor public CloseGuard();
+    method public void close();
+    method public void open(@NonNull String);
+    method public void warnIfOpen();
+  }
+
+  @Deprecated public final class Config {
+    field @Deprecated public static final boolean DEBUG = false;
+    field @Deprecated public static final boolean LOGD = true;
+    field @Deprecated public static final boolean LOGV = false;
+    field @Deprecated public static final boolean PROFILE = false;
+    field @Deprecated public static final boolean RELEASE = true;
+  }
+
+  public class DebugUtils {
+    method public static boolean isObjectSelected(Object);
+  }
+
+  public class DisplayMetrics {
+    ctor public DisplayMetrics();
+    method public boolean equals(android.util.DisplayMetrics);
+    method public void setTo(android.util.DisplayMetrics);
+    method public void setToDefaults();
+    field public static final int DENSITY_140 = 140; // 0x8c
+    field public static final int DENSITY_180 = 180; // 0xb4
+    field public static final int DENSITY_200 = 200; // 0xc8
+    field public static final int DENSITY_220 = 220; // 0xdc
+    field public static final int DENSITY_260 = 260; // 0x104
+    field public static final int DENSITY_280 = 280; // 0x118
+    field public static final int DENSITY_300 = 300; // 0x12c
+    field public static final int DENSITY_340 = 340; // 0x154
+    field public static final int DENSITY_360 = 360; // 0x168
+    field public static final int DENSITY_400 = 400; // 0x190
+    field public static final int DENSITY_420 = 420; // 0x1a4
+    field public static final int DENSITY_440 = 440; // 0x1b8
+    field public static final int DENSITY_450 = 450; // 0x1c2
+    field public static final int DENSITY_560 = 560; // 0x230
+    field public static final int DENSITY_600 = 600; // 0x258
+    field public static final int DENSITY_DEFAULT = 160; // 0xa0
+    field public static final int DENSITY_DEVICE_STABLE;
+    field public static final int DENSITY_HIGH = 240; // 0xf0
+    field public static final int DENSITY_LOW = 120; // 0x78
+    field public static final int DENSITY_MEDIUM = 160; // 0xa0
+    field public static final int DENSITY_TV = 213; // 0xd5
+    field public static final int DENSITY_XHIGH = 320; // 0x140
+    field public static final int DENSITY_XXHIGH = 480; // 0x1e0
+    field public static final int DENSITY_XXXHIGH = 640; // 0x280
+    field public float density;
+    field public int densityDpi;
+    field public int heightPixels;
+    field public float scaledDensity;
+    field public int widthPixels;
+    field public float xdpi;
+    field public float ydpi;
+  }
+
+  public class EventLog {
+    method public static int getTagCode(String);
+    method public static String getTagName(int);
+    method public static void readEvents(int[], java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException;
+    method public static int writeEvent(int, int);
+    method public static int writeEvent(int, long);
+    method public static int writeEvent(int, float);
+    method public static int writeEvent(int, String);
+    method public static int writeEvent(int, java.lang.Object...);
+  }
+
+  public static final class EventLog.Event {
+    method public Object getData();
+    method public int getProcessId();
+    method public int getTag();
+    method public int getThreadId();
+    method public long getTimeNanos();
+  }
+
+  @Deprecated public class EventLogTags {
+    ctor @Deprecated public EventLogTags() throws java.io.IOException;
+    ctor @Deprecated public EventLogTags(java.io.BufferedReader) throws java.io.IOException;
+    method @Deprecated public android.util.EventLogTags.Description get(String);
+    method @Deprecated public android.util.EventLogTags.Description get(int);
+  }
+
+  @Deprecated public static class EventLogTags.Description {
+    field @Deprecated public final String mName;
+    field @Deprecated public final int mTag;
+  }
+
+  @Deprecated public class FloatMath {
+  }
+
+  public abstract class FloatProperty<T> extends android.util.Property<T,java.lang.Float> {
+    ctor public FloatProperty(String);
+    method public final void set(T, Float);
+    method public abstract void setValue(T, float);
+  }
+
+  public final class Half extends java.lang.Number implements java.lang.Comparable<android.util.Half> {
+    ctor public Half(@HalfFloat short);
+    ctor public Half(float);
+    ctor public Half(double);
+    ctor public Half(@NonNull String) throws java.lang.NumberFormatException;
+    method @HalfFloat public static short abs(@HalfFloat short);
+    method @HalfFloat public static short ceil(@HalfFloat short);
+    method public static int compare(@HalfFloat short, @HalfFloat short);
+    method public int compareTo(@NonNull android.util.Half);
+    method @HalfFloat public static short copySign(@HalfFloat short, @HalfFloat short);
+    method public double doubleValue();
+    method public static boolean equals(@HalfFloat short, @HalfFloat short);
+    method public float floatValue();
+    method @HalfFloat public static short floor(@HalfFloat short);
+    method public static int getExponent(@HalfFloat short);
+    method public static int getSign(@HalfFloat short);
+    method public static int getSignificand(@HalfFloat short);
+    method public static boolean greater(@HalfFloat short, @HalfFloat short);
+    method public static boolean greaterEquals(@HalfFloat short, @HalfFloat short);
+    method public static int halfToIntBits(@HalfFloat short);
+    method public static int halfToRawIntBits(@HalfFloat short);
+    method @HalfFloat public static short halfToShortBits(@HalfFloat short);
+    method @HalfFloat public short halfValue();
+    method public static int hashCode(@HalfFloat short);
+    method @HalfFloat public static short intBitsToHalf(int);
+    method public int intValue();
+    method public static boolean isInfinite(@HalfFloat short);
+    method public boolean isNaN();
+    method public static boolean isNaN(@HalfFloat short);
+    method public static boolean isNormalized(@HalfFloat short);
+    method public static boolean less(@HalfFloat short, @HalfFloat short);
+    method public static boolean lessEquals(@HalfFloat short, @HalfFloat short);
+    method public long longValue();
+    method @HalfFloat public static short max(@HalfFloat short, @HalfFloat short);
+    method @HalfFloat public static short min(@HalfFloat short, @HalfFloat short);
+    method @HalfFloat public static short parseHalf(@NonNull String) throws java.lang.NumberFormatException;
+    method @HalfFloat public static short round(@HalfFloat short);
+    method public static float toFloat(@HalfFloat short);
+    method @HalfFloat public static short toHalf(float);
+    method @NonNull public static String toHexString(@HalfFloat short);
+    method @NonNull public static String toString(@HalfFloat short);
+    method @HalfFloat public static short trunc(@HalfFloat short);
+    method @NonNull public static android.util.Half valueOf(@HalfFloat short);
+    method @NonNull public static android.util.Half valueOf(float);
+    method @NonNull public static android.util.Half valueOf(@NonNull String);
+    field @HalfFloat public static final short EPSILON = 5120; // 0x1400
+    field @HalfFloat public static final short LOWEST_VALUE = -1025; // 0xfffffbff
+    field public static final int MAX_EXPONENT = 15; // 0xf
+    field @HalfFloat public static final short MAX_VALUE = 31743; // 0x7bff
+    field public static final int MIN_EXPONENT = -14; // 0xfffffff2
+    field @HalfFloat public static final short MIN_NORMAL = 1024; // 0x400
+    field @HalfFloat public static final short MIN_VALUE = 1; // 0x1
+    field @HalfFloat public static final short NEGATIVE_INFINITY = -1024; // 0xfffffc00
+    field @HalfFloat public static final short NEGATIVE_ZERO = -32768; // 0xffff8000
+    field @HalfFloat public static final short NaN = 32256; // 0x7e00
+    field @HalfFloat public static final short POSITIVE_INFINITY = 31744; // 0x7c00
+    field @HalfFloat public static final short POSITIVE_ZERO = 0; // 0x0
+    field public static final int SIZE = 16; // 0x10
+  }
+
+  public abstract class IntProperty<T> extends android.util.Property<T,java.lang.Integer> {
+    ctor public IntProperty(String);
+    method public final void set(T, Integer);
+    method public abstract void setValue(T, int);
+  }
+
+  public final class JsonReader implements java.io.Closeable {
+    ctor public JsonReader(java.io.Reader);
+    method public void beginArray() throws java.io.IOException;
+    method public void beginObject() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void endArray() throws java.io.IOException;
+    method public void endObject() throws java.io.IOException;
+    method public boolean hasNext() throws java.io.IOException;
+    method public boolean isLenient();
+    method public boolean nextBoolean() throws java.io.IOException;
+    method public double nextDouble() throws java.io.IOException;
+    method public int nextInt() throws java.io.IOException;
+    method public long nextLong() throws java.io.IOException;
+    method public String nextName() throws java.io.IOException;
+    method public void nextNull() throws java.io.IOException;
+    method public String nextString() throws java.io.IOException;
+    method public android.util.JsonToken peek() throws java.io.IOException;
+    method public void setLenient(boolean);
+    method public void skipValue() throws java.io.IOException;
+  }
+
+  public enum JsonToken {
+    enum_constant public static final android.util.JsonToken BEGIN_ARRAY;
+    enum_constant public static final android.util.JsonToken BEGIN_OBJECT;
+    enum_constant public static final android.util.JsonToken BOOLEAN;
+    enum_constant public static final android.util.JsonToken END_ARRAY;
+    enum_constant public static final android.util.JsonToken END_DOCUMENT;
+    enum_constant public static final android.util.JsonToken END_OBJECT;
+    enum_constant public static final android.util.JsonToken NAME;
+    enum_constant public static final android.util.JsonToken NULL;
+    enum_constant public static final android.util.JsonToken NUMBER;
+    enum_constant public static final android.util.JsonToken STRING;
+  }
+
+  public final class JsonWriter implements java.io.Closeable {
+    ctor public JsonWriter(java.io.Writer);
+    method public android.util.JsonWriter beginArray() throws java.io.IOException;
+    method public android.util.JsonWriter beginObject() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public android.util.JsonWriter endArray() throws java.io.IOException;
+    method public android.util.JsonWriter endObject() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public boolean isLenient();
+    method public android.util.JsonWriter name(String) throws java.io.IOException;
+    method public android.util.JsonWriter nullValue() throws java.io.IOException;
+    method public void setIndent(String);
+    method public void setLenient(boolean);
+    method public android.util.JsonWriter value(String) throws java.io.IOException;
+    method public android.util.JsonWriter value(boolean) throws java.io.IOException;
+    method public android.util.JsonWriter value(double) throws java.io.IOException;
+    method public android.util.JsonWriter value(long) throws java.io.IOException;
+    method public android.util.JsonWriter value(Number) throws java.io.IOException;
+  }
+
+  public final class LayoutDirection {
+    field public static final int INHERIT = 2; // 0x2
+    field public static final int LOCALE = 3; // 0x3
+    field public static final int LTR = 0; // 0x0
+    field public static final int RTL = 1; // 0x1
+  }
+
+  public final class Log {
+    method public static int d(@Nullable String, @NonNull String);
+    method public static int d(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static int e(@Nullable String, @NonNull String);
+    method public static int e(@Nullable String, @Nullable String, @Nullable Throwable);
+    method @NonNull public static String getStackTraceString(@Nullable Throwable);
+    method public static int i(@Nullable String, @NonNull String);
+    method public static int i(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static boolean isLoggable(@Nullable @Size(max=23, apis="..23") String, int);
+    method public static int println(int, @Nullable String, @NonNull String);
+    method public static int v(@Nullable String, @NonNull String);
+    method public static int v(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static int w(@Nullable String, @NonNull String);
+    method public static int w(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public static int w(@Nullable String, @Nullable Throwable);
+    method public static int wtf(@Nullable String, @Nullable String);
+    method public static int wtf(@Nullable String, @NonNull Throwable);
+    method public static int wtf(@Nullable String, @Nullable String, @Nullable Throwable);
+    field public static final int ASSERT = 7; // 0x7
+    field public static final int DEBUG = 3; // 0x3
+    field public static final int ERROR = 6; // 0x6
+    field public static final int INFO = 4; // 0x4
+    field public static final int VERBOSE = 2; // 0x2
+    field public static final int WARN = 5; // 0x5
+  }
+
+  public class LogPrinter implements android.util.Printer {
+    ctor public LogPrinter(int, String);
+    method public void println(String);
+  }
+
+  public class LongSparseArray<E> implements java.lang.Cloneable {
+    ctor public LongSparseArray();
+    ctor public LongSparseArray(int);
+    method public void append(long, E);
+    method public void clear();
+    method public android.util.LongSparseArray<E> clone();
+    method public void delete(long);
+    method public E get(long);
+    method public E get(long, E);
+    method public int indexOfKey(long);
+    method public int indexOfValue(E);
+    method public long keyAt(int);
+    method public void put(long, E);
+    method public void remove(long);
+    method public void removeAt(int);
+    method public void setValueAt(int, E);
+    method public int size();
+    method public E valueAt(int);
+  }
+
+  public class LruCache<K, V> {
+    ctor public LruCache(int);
+    method protected V create(K);
+    method public final int createCount();
+    method protected void entryRemoved(boolean, K, V, V);
+    method public final void evictAll();
+    method public final int evictionCount();
+    method public final V get(K);
+    method public final int hitCount();
+    method public final int maxSize();
+    method public final int missCount();
+    method public final V put(K, V);
+    method public final int putCount();
+    method public final V remove(K);
+    method public void resize(int);
+    method public final int size();
+    method protected int sizeOf(K, V);
+    method public final java.util.Map<K,V> snapshot();
+    method public final String toString();
+    method public void trimToSize(int);
+  }
+
+  public final class MalformedJsonException extends java.io.IOException {
+    ctor public MalformedJsonException(String);
+  }
+
+  public class MonthDisplayHelper {
+    ctor public MonthDisplayHelper(int, int, int);
+    ctor public MonthDisplayHelper(int, int);
+    method public int getColumnOf(int);
+    method public int getDayAt(int, int);
+    method public int[] getDigitsForRow(int);
+    method public int getFirstDayOfMonth();
+    method public int getMonth();
+    method public int getNumberOfDaysInMonth();
+    method public int getOffset();
+    method public int getRowOf(int);
+    method public int getWeekStartDay();
+    method public int getYear();
+    method public boolean isWithinCurrentMonth(int, int);
+    method public void nextMonth();
+    method public void previousMonth();
+  }
+
+  @Deprecated public final class MutableBoolean {
+    ctor @Deprecated public MutableBoolean(boolean);
+    field @Deprecated public boolean value;
+  }
+
+  @Deprecated public final class MutableByte {
+    ctor @Deprecated public MutableByte(byte);
+    field @Deprecated public byte value;
+  }
+
+  @Deprecated public final class MutableChar {
+    ctor @Deprecated public MutableChar(char);
+    field @Deprecated public char value;
+  }
+
+  @Deprecated public final class MutableDouble {
+    ctor @Deprecated public MutableDouble(double);
+    field @Deprecated public double value;
+  }
+
+  @Deprecated public final class MutableFloat {
+    ctor @Deprecated public MutableFloat(float);
+    field @Deprecated public float value;
+  }
+
+  @Deprecated public final class MutableInt {
+    ctor @Deprecated public MutableInt(int);
+    field @Deprecated public int value;
+  }
+
+  @Deprecated public final class MutableLong {
+    ctor @Deprecated public MutableLong(long);
+    field @Deprecated public long value;
+  }
+
+  @Deprecated public final class MutableShort {
+    ctor @Deprecated public MutableShort(short);
+    field @Deprecated public short value;
+  }
+
+  public class NoSuchPropertyException extends java.lang.RuntimeException {
+    ctor public NoSuchPropertyException(String);
+  }
+
+  public class Pair<F, S> {
+    ctor public Pair(F, S);
+    method public static <A, B> android.util.Pair<A,B> create(A, B);
+    field public final F first;
+    field public final S second;
+  }
+
+  public class Patterns {
+    method public static final String concatGroups(java.util.regex.Matcher);
+    method public static final String digitsAndPlusOnly(java.util.regex.Matcher);
+    field public static final java.util.regex.Pattern DOMAIN_NAME;
+    field public static final java.util.regex.Pattern EMAIL_ADDRESS;
+    field @Deprecated public static final String GOOD_IRI_CHAR = "a-zA-Z0-9\u00a0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef";
+    field @Deprecated public static final java.util.regex.Pattern IP_ADDRESS;
+    field public static final java.util.regex.Pattern PHONE;
+    field @Deprecated public static final java.util.regex.Pattern TOP_LEVEL_DOMAIN;
+    field @Deprecated public static final String TOP_LEVEL_DOMAIN_STR = "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(biz|b[abdefghijmnorstvwyz])|(cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(edu|e[cegrstu])|f[ijkmor]|(gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(info|int|i[delmnoqrst])|(jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(name|net|n[acefgilopruz])|(org|om)|(pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw])";
+    field @Deprecated public static final String TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL = "(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw]))";
+    field public static final java.util.regex.Pattern WEB_URL;
+  }
+
+  public class PrintStreamPrinter implements android.util.Printer {
+    ctor public PrintStreamPrinter(java.io.PrintStream);
+    method public void println(String);
+  }
+
+  public class PrintWriterPrinter implements android.util.Printer {
+    ctor public PrintWriterPrinter(java.io.PrintWriter);
+    method public void println(String);
+  }
+
+  public interface Printer {
+    method public void println(String);
+  }
+
+  public abstract class Property<T, V> {
+    ctor public Property(Class<V>, String);
+    method public abstract V get(T);
+    method public String getName();
+    method public Class<V> getType();
+    method public boolean isReadOnly();
+    method public static <T, V> android.util.Property<T,V> of(Class<T>, Class<V>, String);
+    method public void set(T, V);
+  }
+
+  public final class Range<T extends java.lang.Comparable<? super T>> {
+    ctor public Range(T, T);
+    method public T clamp(T);
+    method public boolean contains(T);
+    method public boolean contains(android.util.Range<T>);
+    method public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> create(T, T);
+    method public android.util.Range<T> extend(android.util.Range<T>);
+    method public android.util.Range<T> extend(T, T);
+    method public android.util.Range<T> extend(T);
+    method public T getLower();
+    method public T getUpper();
+    method public android.util.Range<T> intersect(android.util.Range<T>);
+    method public android.util.Range<T> intersect(T, T);
+  }
+
+  public final class Rational extends java.lang.Number implements java.lang.Comparable<android.util.Rational> {
+    ctor public Rational(int, int);
+    method public int compareTo(android.util.Rational);
+    method public double doubleValue();
+    method public float floatValue();
+    method public int getDenominator();
+    method public int getNumerator();
+    method public int intValue();
+    method public boolean isFinite();
+    method public boolean isInfinite();
+    method public boolean isNaN();
+    method public boolean isZero();
+    method public long longValue();
+    method public static android.util.Rational parseRational(String) throws java.lang.NumberFormatException;
+    field public static final android.util.Rational NEGATIVE_INFINITY;
+    field public static final android.util.Rational NaN;
+    field public static final android.util.Rational POSITIVE_INFINITY;
+    field public static final android.util.Rational ZERO;
+  }
+
+  public final class Size {
+    ctor public Size(int, int);
+    method public int getHeight();
+    method public int getWidth();
+    method public static android.util.Size parseSize(String) throws java.lang.NumberFormatException;
+  }
+
+  public final class SizeF implements android.os.Parcelable {
+    ctor public SizeF(float, float);
+    method public int describeContents();
+    method public float getHeight();
+    method public float getWidth();
+    method public static android.util.SizeF parseSizeF(String) throws java.lang.NumberFormatException;
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.util.SizeF> CREATOR;
+  }
+
+  public class SparseArray<E> implements java.lang.Cloneable {
+    ctor public SparseArray();
+    ctor public SparseArray(int);
+    method public void append(int, E);
+    method public void clear();
+    method public android.util.SparseArray<E> clone();
+    method public boolean contains(int);
+    method public boolean contentEquals(@Nullable android.util.SparseArray<?>);
+    method public int contentHashCode();
+    method public void delete(int);
+    method public E get(int);
+    method public E get(int, E);
+    method public int indexOfKey(int);
+    method public int indexOfValue(E);
+    method public int keyAt(int);
+    method public void put(int, E);
+    method public void remove(int);
+    method public void removeAt(int);
+    method public void removeAtRange(int, int);
+    method public void set(int, E);
+    method public void setValueAt(int, E);
+    method public int size();
+    method public E valueAt(int);
+  }
+
+  public class SparseBooleanArray implements java.lang.Cloneable {
+    ctor public SparseBooleanArray();
+    ctor public SparseBooleanArray(int);
+    method public void append(int, boolean);
+    method public void clear();
+    method public android.util.SparseBooleanArray clone();
+    method public void delete(int);
+    method public boolean get(int);
+    method public boolean get(int, boolean);
+    method public int indexOfKey(int);
+    method public int indexOfValue(boolean);
+    method public int keyAt(int);
+    method public void put(int, boolean);
+    method public void removeAt(int);
+    method public void setValueAt(int, boolean);
+    method public int size();
+    method public boolean valueAt(int);
+  }
+
+  public class SparseIntArray implements java.lang.Cloneable {
+    ctor public SparseIntArray();
+    ctor public SparseIntArray(int);
+    method public void append(int, int);
+    method public void clear();
+    method public android.util.SparseIntArray clone();
+    method public void delete(int);
+    method public int get(int);
+    method public int get(int, int);
+    method public int indexOfKey(int);
+    method public int indexOfValue(int);
+    method public int keyAt(int);
+    method public void put(int, int);
+    method public void removeAt(int);
+    method public void setValueAt(int, int);
+    method public int size();
+    method public int valueAt(int);
+  }
+
+  public class SparseLongArray implements java.lang.Cloneable {
+    ctor public SparseLongArray();
+    ctor public SparseLongArray(int);
+    method public void append(int, long);
+    method public void clear();
+    method public android.util.SparseLongArray clone();
+    method public void delete(int);
+    method public long get(int);
+    method public long get(int, long);
+    method public int indexOfKey(int);
+    method public int indexOfValue(long);
+    method public int keyAt(int);
+    method public void put(int, long);
+    method public void removeAt(int);
+    method public int size();
+    method public long valueAt(int);
+  }
+
+  public class StateSet {
+    method public static String dump(int[]);
+    method public static boolean isWildCard(int[]);
+    method public static boolean stateSetMatches(int[], int[]);
+    method public static boolean stateSetMatches(int[], int);
+    method public static int[] trimStateSet(int[], int);
+    field public static final int[] NOTHING;
+    field public static final int[] WILD_CARD;
+  }
+
+  public final class StatsLog {
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public static boolean logBinaryPushStateChanged(@NonNull String, long, int, int, @NonNull long[]);
+    method public static boolean logEvent(int);
+    method public static boolean logStart(int);
+    method public static boolean logStop(int);
+  }
+
+  public class StringBuilderPrinter implements android.util.Printer {
+    ctor public StringBuilderPrinter(StringBuilder);
+    method public void println(String);
+  }
+
+  public class TimeFormatException extends java.lang.RuntimeException {
+  }
+
+  public class TimeUtils {
+    method public static java.util.TimeZone getTimeZone(int, boolean, long, String);
+    method public static String getTimeZoneDatabaseVersion();
+    method @Nullable public static java.util.List<java.lang.String> getTimeZoneIdsForCountryCode(@NonNull String);
+    method public static boolean isTimeBetween(@NonNull java.time.LocalTime, @NonNull java.time.LocalTime, @NonNull java.time.LocalTime);
+  }
+
+  @Deprecated public class TimingLogger {
+    ctor @Deprecated public TimingLogger(String, String);
+    method @Deprecated public void addSplit(String);
+    method @Deprecated public void dumpToLog();
+    method @Deprecated public void reset(String, String);
+    method @Deprecated public void reset();
+  }
+
+  public class TypedValue {
+    ctor public TypedValue();
+    method public static float applyDimension(int, float, android.util.DisplayMetrics);
+    method public final CharSequence coerceToString();
+    method public static final String coerceToString(int, int);
+    method public static float complexToDimension(int, android.util.DisplayMetrics);
+    method public static int complexToDimensionPixelOffset(int, android.util.DisplayMetrics);
+    method public static int complexToDimensionPixelSize(int, android.util.DisplayMetrics);
+    method public static float complexToFloat(int);
+    method public static float complexToFraction(int, float, float);
+    method public int getComplexUnit();
+    method public float getDimension(android.util.DisplayMetrics);
+    method public final float getFloat();
+    method public float getFraction(float, float);
+    method public boolean isColorType();
+    method public void setTo(android.util.TypedValue);
+    field public static final int COMPLEX_MANTISSA_MASK = 16777215; // 0xffffff
+    field public static final int COMPLEX_MANTISSA_SHIFT = 8; // 0x8
+    field public static final int COMPLEX_RADIX_0p23 = 3; // 0x3
+    field public static final int COMPLEX_RADIX_16p7 = 1; // 0x1
+    field public static final int COMPLEX_RADIX_23p0 = 0; // 0x0
+    field public static final int COMPLEX_RADIX_8p15 = 2; // 0x2
+    field public static final int COMPLEX_RADIX_MASK = 3; // 0x3
+    field public static final int COMPLEX_RADIX_SHIFT = 4; // 0x4
+    field public static final int COMPLEX_UNIT_DIP = 1; // 0x1
+    field public static final int COMPLEX_UNIT_FRACTION = 0; // 0x0
+    field public static final int COMPLEX_UNIT_FRACTION_PARENT = 1; // 0x1
+    field public static final int COMPLEX_UNIT_IN = 4; // 0x4
+    field public static final int COMPLEX_UNIT_MASK = 15; // 0xf
+    field public static final int COMPLEX_UNIT_MM = 5; // 0x5
+    field public static final int COMPLEX_UNIT_PT = 3; // 0x3
+    field public static final int COMPLEX_UNIT_PX = 0; // 0x0
+    field public static final int COMPLEX_UNIT_SHIFT = 0; // 0x0
+    field public static final int COMPLEX_UNIT_SP = 2; // 0x2
+    field public static final int DATA_NULL_EMPTY = 1; // 0x1
+    field public static final int DATA_NULL_UNDEFINED = 0; // 0x0
+    field public static final int DENSITY_DEFAULT = 0; // 0x0
+    field public static final int DENSITY_NONE = 65535; // 0xffff
+    field public static final int TYPE_ATTRIBUTE = 2; // 0x2
+    field public static final int TYPE_DIMENSION = 5; // 0x5
+    field public static final int TYPE_FIRST_COLOR_INT = 28; // 0x1c
+    field public static final int TYPE_FIRST_INT = 16; // 0x10
+    field public static final int TYPE_FLOAT = 4; // 0x4
+    field public static final int TYPE_FRACTION = 6; // 0x6
+    field public static final int TYPE_INT_BOOLEAN = 18; // 0x12
+    field public static final int TYPE_INT_COLOR_ARGB4 = 30; // 0x1e
+    field public static final int TYPE_INT_COLOR_ARGB8 = 28; // 0x1c
+    field public static final int TYPE_INT_COLOR_RGB4 = 31; // 0x1f
+    field public static final int TYPE_INT_COLOR_RGB8 = 29; // 0x1d
+    field public static final int TYPE_INT_DEC = 16; // 0x10
+    field public static final int TYPE_INT_HEX = 17; // 0x11
+    field public static final int TYPE_LAST_COLOR_INT = 31; // 0x1f
+    field public static final int TYPE_LAST_INT = 31; // 0x1f
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_REFERENCE = 1; // 0x1
+    field public static final int TYPE_STRING = 3; // 0x3
+    field public int assetCookie;
+    field public int changingConfigurations;
+    field public int data;
+    field public int density;
+    field @AnyRes public int resourceId;
+    field public int sourceResourceId;
+    field public CharSequence string;
+    field public int type;
+  }
+
+  public class Xml {
+    method public static android.util.AttributeSet asAttributeSet(org.xmlpull.v1.XmlPullParser);
+    method public static android.util.Xml.Encoding findEncodingByName(String) throws java.io.UnsupportedEncodingException;
+    method public static org.xmlpull.v1.XmlPullParser newPullParser();
+    method public static org.xmlpull.v1.XmlSerializer newSerializer();
+    method public static void parse(String, org.xml.sax.ContentHandler) throws org.xml.sax.SAXException;
+    method public static void parse(java.io.Reader, org.xml.sax.ContentHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public static void parse(java.io.InputStream, android.util.Xml.Encoding, org.xml.sax.ContentHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    field public static String FEATURE_RELAXED;
+  }
+
+  public enum Xml.Encoding {
+    enum_constant public static final android.util.Xml.Encoding ISO_8859_1;
+    enum_constant public static final android.util.Xml.Encoding US_ASCII;
+    enum_constant public static final android.util.Xml.Encoding UTF_16;
+    enum_constant public static final android.util.Xml.Encoding UTF_8;
+  }
+
+}
+
+package android.util.proto {
+
+  public final class ProtoOutputStream {
+    ctor public ProtoOutputStream();
+    ctor public ProtoOutputStream(int);
+    ctor public ProtoOutputStream(@NonNull java.io.OutputStream);
+    method public static int checkFieldId(long, long);
+    method public void dump(@NonNull String);
+    method public void end(long);
+    method public void flush();
+    method @NonNull public byte[] getBytes();
+    method @Nullable public static String getFieldCountString(long);
+    method @NonNull public static String getFieldIdString(long);
+    method @Nullable public static String getFieldTypeString(long);
+    method public int getRawSize();
+    method @Nullable public static String getWireTypeString(int);
+    method public static long makeFieldId(int, long);
+    method public static long makeToken(int, boolean, int, int, int);
+    method public long start(long);
+    method @NonNull public static String token2String(long);
+    method public void write(long, double);
+    method public void write(long, float);
+    method public void write(long, int);
+    method public void write(long, long);
+    method public void write(long, boolean);
+    method public void write(long, @Nullable String);
+    method public void write(long, @Nullable byte[]);
+    method public void writeTag(int, int);
+    field public static final long FIELD_COUNT_MASK = 16492674416640L; // 0xf0000000000L
+    field public static final long FIELD_COUNT_PACKED = 5497558138880L; // 0x50000000000L
+    field public static final long FIELD_COUNT_REPEATED = 2199023255552L; // 0x20000000000L
+    field public static final int FIELD_COUNT_SHIFT = 40; // 0x28
+    field public static final long FIELD_COUNT_SINGLE = 1099511627776L; // 0x10000000000L
+    field public static final long FIELD_COUNT_UNKNOWN = 0L; // 0x0L
+    field public static final int FIELD_ID_SHIFT = 3; // 0x3
+    field public static final long FIELD_TYPE_BOOL = 34359738368L; // 0x800000000L
+    field public static final long FIELD_TYPE_BYTES = 51539607552L; // 0xc00000000L
+    field public static final long FIELD_TYPE_DOUBLE = 4294967296L; // 0x100000000L
+    field public static final long FIELD_TYPE_ENUM = 60129542144L; // 0xe00000000L
+    field public static final long FIELD_TYPE_FIXED32 = 30064771072L; // 0x700000000L
+    field public static final long FIELD_TYPE_FIXED64 = 25769803776L; // 0x600000000L
+    field public static final long FIELD_TYPE_FLOAT = 8589934592L; // 0x200000000L
+    field public static final long FIELD_TYPE_INT32 = 21474836480L; // 0x500000000L
+    field public static final long FIELD_TYPE_INT64 = 12884901888L; // 0x300000000L
+    field public static final long FIELD_TYPE_MASK = 1095216660480L; // 0xff00000000L
+    field public static final long FIELD_TYPE_MESSAGE = 47244640256L; // 0xb00000000L
+    field public static final long FIELD_TYPE_SFIXED32 = 64424509440L; // 0xf00000000L
+    field public static final long FIELD_TYPE_SFIXED64 = 68719476736L; // 0x1000000000L
+    field public static final int FIELD_TYPE_SHIFT = 32; // 0x20
+    field public static final long FIELD_TYPE_SINT32 = 73014444032L; // 0x1100000000L
+    field public static final long FIELD_TYPE_SINT64 = 77309411328L; // 0x1200000000L
+    field public static final long FIELD_TYPE_STRING = 38654705664L; // 0x900000000L
+    field public static final long FIELD_TYPE_UINT32 = 55834574848L; // 0xd00000000L
+    field public static final long FIELD_TYPE_UINT64 = 17179869184L; // 0x400000000L
+    field public static final int WIRE_TYPE_END_GROUP = 4; // 0x4
+    field public static final int WIRE_TYPE_FIXED32 = 5; // 0x5
+    field public static final int WIRE_TYPE_FIXED64 = 1; // 0x1
+    field public static final int WIRE_TYPE_LENGTH_DELIMITED = 2; // 0x2
+    field public static final int WIRE_TYPE_MASK = 7; // 0x7
+    field public static final int WIRE_TYPE_START_GROUP = 3; // 0x3
+    field public static final int WIRE_TYPE_VARINT = 0; // 0x0
+  }
+
+}
+
+package android.view {
+
+  public abstract class AbsSavedState implements android.os.Parcelable {
+    ctor protected AbsSavedState(android.os.Parcelable);
+    ctor protected AbsSavedState(android.os.Parcel);
+    ctor protected AbsSavedState(android.os.Parcel, ClassLoader);
+    method public int describeContents();
+    method public final android.os.Parcelable getSuperState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.AbsSavedState> CREATOR;
+    field public static final android.view.AbsSavedState EMPTY_STATE;
+  }
+
+  public abstract class ActionMode {
+    ctor public ActionMode();
+    method public abstract void finish();
+    method public abstract android.view.View getCustomView();
+    method public abstract android.view.Menu getMenu();
+    method public abstract android.view.MenuInflater getMenuInflater();
+    method public abstract CharSequence getSubtitle();
+    method public Object getTag();
+    method public abstract CharSequence getTitle();
+    method public boolean getTitleOptionalHint();
+    method public int getType();
+    method public void hide(long);
+    method public abstract void invalidate();
+    method public void invalidateContentRect();
+    method public boolean isTitleOptional();
+    method public void onWindowFocusChanged(boolean);
+    method public abstract void setCustomView(android.view.View);
+    method public abstract void setSubtitle(CharSequence);
+    method public abstract void setSubtitle(@StringRes int);
+    method public void setTag(Object);
+    method public abstract void setTitle(CharSequence);
+    method public abstract void setTitle(@StringRes int);
+    method public void setTitleOptionalHint(boolean);
+    method public void setType(int);
+    field public static final int DEFAULT_HIDE_DURATION = -1; // 0xffffffff
+    field public static final int TYPE_FLOATING = 1; // 0x1
+    field public static final int TYPE_PRIMARY = 0; // 0x0
+  }
+
+  public static interface ActionMode.Callback {
+    method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem);
+    method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onDestroyActionMode(android.view.ActionMode);
+    method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
+  }
+
+  public abstract static class ActionMode.Callback2 implements android.view.ActionMode.Callback {
+    ctor public ActionMode.Callback2();
+    method public void onGetContentRect(android.view.ActionMode, android.view.View, android.graphics.Rect);
+  }
+
+  public abstract class ActionProvider {
+    ctor public ActionProvider(android.content.Context);
+    method public boolean hasSubMenu();
+    method public boolean isVisible();
+    method @Deprecated public abstract android.view.View onCreateActionView();
+    method public android.view.View onCreateActionView(android.view.MenuItem);
+    method public boolean onPerformDefaultAction();
+    method public void onPrepareSubMenu(android.view.SubMenu);
+    method public boolean overridesItemVisibility();
+    method public void refreshVisibility();
+    method public void setVisibilityListener(android.view.ActionProvider.VisibilityListener);
+  }
+
+  public static interface ActionProvider.VisibilityListener {
+    method public void onActionProviderVisibilityChanged(boolean);
+  }
+
+  @UiThread public interface AttachedSurfaceControl {
+    method public default void addOnBufferTransformHintChangedListener(@NonNull android.view.AttachedSurfaceControl.OnBufferTransformHintChangedListener);
+    method public boolean applyTransactionOnDraw(@NonNull android.view.SurfaceControl.Transaction);
+    method @Nullable public android.view.SurfaceControl.Transaction buildReparentTransaction(@NonNull android.view.SurfaceControl);
+    method public default int getBufferTransformHint();
+    method public default void removeOnBufferTransformHintChangedListener(@NonNull android.view.AttachedSurfaceControl.OnBufferTransformHintChangedListener);
+  }
+
+  @UiThread public static interface AttachedSurfaceControl.OnBufferTransformHintChangedListener {
+    method public void onBufferTransformHintChanged(int);
+  }
+
+  public final class Choreographer {
+    method public static android.view.Choreographer getInstance();
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback);
+    method public void postFrameCallbackDelayed(android.view.Choreographer.FrameCallback, long);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback);
+  }
+
+  public static interface Choreographer.FrameCallback {
+    method public void doFrame(long);
+  }
+
+  public interface CollapsibleActionView {
+    method public void onActionViewCollapsed();
+    method public void onActionViewExpanded();
+  }
+
+  public final class ContentInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.ClipData getClip();
+    method @Nullable public android.os.Bundle getExtras();
+    method public int getFlags();
+    method @Nullable public android.net.Uri getLinkUri();
+    method public int getSource();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.ContentInfo> CREATOR;
+    field public static final int FLAG_CONVERT_TO_PLAIN_TEXT = 1; // 0x1
+    field public static final int SOURCE_APP = 0; // 0x0
+    field public static final int SOURCE_AUTOFILL = 4; // 0x4
+    field public static final int SOURCE_CLIPBOARD = 1; // 0x1
+    field public static final int SOURCE_DRAG_AND_DROP = 3; // 0x3
+    field public static final int SOURCE_INPUT_METHOD = 2; // 0x2
+    field public static final int SOURCE_PROCESS_TEXT = 5; // 0x5
+  }
+
+  public static final class ContentInfo.Builder {
+    ctor public ContentInfo.Builder(@NonNull android.view.ContentInfo);
+    ctor public ContentInfo.Builder(@NonNull android.content.ClipData, int);
+    method @NonNull public android.view.ContentInfo build();
+    method @NonNull public android.view.ContentInfo.Builder setClip(@NonNull android.content.ClipData);
+    method @NonNull public android.view.ContentInfo.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.ContentInfo.Builder setFlags(int);
+    method @NonNull public android.view.ContentInfo.Builder setLinkUri(@Nullable android.net.Uri);
+    method @NonNull public android.view.ContentInfo.Builder setSource(int);
+  }
+
+  public interface ContextMenu extends android.view.Menu {
+    method public void clearHeader();
+    method public android.view.ContextMenu setHeaderIcon(@DrawableRes int);
+    method public android.view.ContextMenu setHeaderIcon(android.graphics.drawable.Drawable);
+    method public android.view.ContextMenu setHeaderTitle(@StringRes int);
+    method public android.view.ContextMenu setHeaderTitle(CharSequence);
+    method public android.view.ContextMenu setHeaderView(android.view.View);
+  }
+
+  public static interface ContextMenu.ContextMenuInfo {
+  }
+
+  public class ContextThemeWrapper extends android.content.ContextWrapper {
+    ctor public ContextThemeWrapper();
+    ctor public ContextThemeWrapper(android.content.Context, @StyleRes int);
+    ctor public ContextThemeWrapper(android.content.Context, android.content.res.Resources.Theme);
+    method public void applyOverrideConfiguration(android.content.res.Configuration);
+    method protected void onApplyThemeResource(android.content.res.Resources.Theme, int, boolean);
+    method public void setTheme(@Nullable android.content.res.Resources.Theme);
+  }
+
+  public final class Display {
+    method public long getAppVsyncOffsetNanos();
+    method public void getCurrentSizeRange(android.graphics.Point, android.graphics.Point);
+    method @Nullable public android.view.DisplayCutout getCutout();
+    method @Nullable public android.hardware.display.DeviceProductInfo getDeviceProductInfo();
+    method public int getDisplayId();
+    method public int getFlags();
+    method public android.view.Display.HdrCapabilities getHdrCapabilities();
+    method @Deprecated public int getHeight();
+    method @Deprecated public void getMetrics(android.util.DisplayMetrics);
+    method public android.view.Display.Mode getMode();
+    method public String getName();
+    method @Deprecated public int getOrientation();
+    method @Deprecated public int getPixelFormat();
+    method @Nullable public android.graphics.ColorSpace getPreferredWideGamutColorSpace();
+    method public long getPresentationDeadlineNanos();
+    method @Deprecated public void getRealMetrics(android.util.DisplayMetrics);
+    method @Deprecated public void getRealSize(android.graphics.Point);
+    method @Deprecated public void getRectSize(android.graphics.Rect);
+    method public float getRefreshRate();
+    method public int getRotation();
+    method @Nullable public android.view.RoundedCorner getRoundedCorner(int);
+    method @Deprecated public void getSize(android.graphics.Point);
+    method public int getState();
+    method public android.view.Display.Mode[] getSupportedModes();
+    method @Deprecated public float[] getSupportedRefreshRates();
+    method @Deprecated public int getWidth();
+    method public boolean isHdr();
+    method public boolean isMinimalPostProcessingSupported();
+    method public boolean isValid();
+    method public boolean isWideColorGamut();
+    field public static final int DEFAULT_DISPLAY = 0; // 0x0
+    field public static final int FLAG_PRESENTATION = 8; // 0x8
+    field public static final int FLAG_PRIVATE = 4; // 0x4
+    field public static final int FLAG_ROUND = 16; // 0x10
+    field public static final int FLAG_SECURE = 2; // 0x2
+    field public static final int FLAG_SUPPORTS_PROTECTED_BUFFERS = 1; // 0x1
+    field public static final int INVALID_DISPLAY = -1; // 0xffffffff
+    field public static final int STATE_DOZE = 3; // 0x3
+    field public static final int STATE_DOZE_SUSPEND = 4; // 0x4
+    field public static final int STATE_OFF = 1; // 0x1
+    field public static final int STATE_ON = 2; // 0x2
+    field public static final int STATE_ON_SUSPEND = 6; // 0x6
+    field public static final int STATE_UNKNOWN = 0; // 0x0
+    field public static final int STATE_VR = 5; // 0x5
+  }
+
+  public static final class Display.HdrCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getDesiredMaxAverageLuminance();
+    method public float getDesiredMaxLuminance();
+    method public float getDesiredMinLuminance();
+    method public int[] getSupportedHdrTypes();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.Display.HdrCapabilities> CREATOR;
+    field public static final int HDR_TYPE_DOLBY_VISION = 1; // 0x1
+    field public static final int HDR_TYPE_HDR10 = 2; // 0x2
+    field public static final int HDR_TYPE_HDR10_PLUS = 4; // 0x4
+    field public static final int HDR_TYPE_HLG = 3; // 0x3
+    field public static final float INVALID_LUMINANCE = -1.0f;
+  }
+
+  public static final class Display.Mode implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public float[] getAlternativeRefreshRates();
+    method public int getModeId();
+    method public int getPhysicalHeight();
+    method public int getPhysicalWidth();
+    method public float getRefreshRate();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
+  }
+
+  public final class DisplayCutout {
+    ctor public DisplayCutout(@NonNull android.graphics.Insets, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect);
+    ctor public DisplayCutout(@NonNull android.graphics.Insets, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, @NonNull android.graphics.Insets);
+    ctor @Deprecated public DisplayCutout(@Nullable android.graphics.Rect, @Nullable java.util.List<android.graphics.Rect>);
+    method @NonNull public android.graphics.Rect getBoundingRectBottom();
+    method @NonNull public android.graphics.Rect getBoundingRectLeft();
+    method @NonNull public android.graphics.Rect getBoundingRectRight();
+    method @NonNull public android.graphics.Rect getBoundingRectTop();
+    method @NonNull public java.util.List<android.graphics.Rect> getBoundingRects();
+    method @Nullable public android.graphics.Path getCutoutPath();
+    method public int getSafeInsetBottom();
+    method public int getSafeInsetLeft();
+    method public int getSafeInsetRight();
+    method public int getSafeInsetTop();
+    method @NonNull public android.graphics.Insets getWaterfallInsets();
+  }
+
+  public final class DragAndDropPermissions implements android.os.Parcelable {
+    method public int describeContents();
+    method public void release();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
+  }
+
+  public class DragEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAction();
+    method public android.content.ClipData getClipData();
+    method public android.content.ClipDescription getClipDescription();
+    method public Object getLocalState();
+    method public boolean getResult();
+    method public float getX();
+    method public float getY();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_DRAG_ENDED = 4; // 0x4
+    field public static final int ACTION_DRAG_ENTERED = 5; // 0x5
+    field public static final int ACTION_DRAG_EXITED = 6; // 0x6
+    field public static final int ACTION_DRAG_LOCATION = 2; // 0x2
+    field public static final int ACTION_DRAG_STARTED = 1; // 0x1
+    field public static final int ACTION_DROP = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.DragEvent> CREATOR;
+  }
+
+  public class FocusFinder {
+    method public android.view.View findNearestTouchable(android.view.ViewGroup, int, int, int, int[]);
+    method public final android.view.View findNextFocus(android.view.ViewGroup, android.view.View, int);
+    method public android.view.View findNextFocusFromRect(android.view.ViewGroup, android.graphics.Rect, int);
+    method public android.view.View findNextKeyboardNavigationCluster(@NonNull android.view.View, @Nullable android.view.View, int);
+    method public static android.view.FocusFinder getInstance();
+  }
+
+  public final class FrameMetrics {
+    ctor public FrameMetrics(android.view.FrameMetrics);
+    method public long getMetric(int);
+    field public static final int ANIMATION_DURATION = 2; // 0x2
+    field public static final int COMMAND_ISSUE_DURATION = 6; // 0x6
+    field public static final int DEADLINE = 13; // 0xd
+    field public static final int DRAW_DURATION = 4; // 0x4
+    field public static final int FIRST_DRAW_FRAME = 9; // 0x9
+    field public static final int GPU_DURATION = 12; // 0xc
+    field public static final int INPUT_HANDLING_DURATION = 1; // 0x1
+    field public static final int INTENDED_VSYNC_TIMESTAMP = 10; // 0xa
+    field public static final int LAYOUT_MEASURE_DURATION = 3; // 0x3
+    field public static final int SWAP_BUFFERS_DURATION = 7; // 0x7
+    field public static final int SYNC_DURATION = 5; // 0x5
+    field public static final int TOTAL_DURATION = 8; // 0x8
+    field public static final int UNKNOWN_DELAY_DURATION = 0; // 0x0
+    field public static final int VSYNC_TIMESTAMP = 11; // 0xb
+  }
+
+  public abstract class FrameStats {
+    ctor public FrameStats();
+    method public final long getEndTimeNano();
+    method public final int getFrameCount();
+    method public final long getFramePresentedTimeNano(int);
+    method public final long getRefreshPeriodNano();
+    method public final long getStartTimeNano();
+    field public static final long UNDEFINED_TIME_NANO = -1L; // 0xffffffffffffffffL
+  }
+
+  public class GestureDetector {
+    ctor @Deprecated public GestureDetector(android.view.GestureDetector.OnGestureListener, android.os.Handler);
+    ctor @Deprecated public GestureDetector(android.view.GestureDetector.OnGestureListener);
+    ctor public GestureDetector(@UiContext android.content.Context, android.view.GestureDetector.OnGestureListener);
+    ctor public GestureDetector(@UiContext android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler);
+    ctor public GestureDetector(@UiContext android.content.Context, android.view.GestureDetector.OnGestureListener, android.os.Handler, boolean);
+    method public boolean isLongpressEnabled();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public void setContextClickListener(android.view.GestureDetector.OnContextClickListener);
+    method public void setIsLongpressEnabled(boolean);
+    method public void setOnDoubleTapListener(android.view.GestureDetector.OnDoubleTapListener);
+  }
+
+  public static interface GestureDetector.OnContextClickListener {
+    method public boolean onContextClick(android.view.MotionEvent);
+  }
+
+  public static interface GestureDetector.OnDoubleTapListener {
+    method public boolean onDoubleTap(android.view.MotionEvent);
+    method public boolean onDoubleTapEvent(android.view.MotionEvent);
+    method public boolean onSingleTapConfirmed(android.view.MotionEvent);
+  }
+
+  public static interface GestureDetector.OnGestureListener {
+    method public boolean onDown(android.view.MotionEvent);
+    method public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onLongPress(android.view.MotionEvent);
+    method public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onShowPress(android.view.MotionEvent);
+    method public boolean onSingleTapUp(android.view.MotionEvent);
+  }
+
+  public static class GestureDetector.SimpleOnGestureListener implements android.view.GestureDetector.OnContextClickListener android.view.GestureDetector.OnDoubleTapListener android.view.GestureDetector.OnGestureListener {
+    ctor public GestureDetector.SimpleOnGestureListener();
+    method public boolean onContextClick(android.view.MotionEvent);
+    method public boolean onDoubleTap(android.view.MotionEvent);
+    method public boolean onDoubleTapEvent(android.view.MotionEvent);
+    method public boolean onDown(android.view.MotionEvent);
+    method public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onLongPress(android.view.MotionEvent);
+    method public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method public void onShowPress(android.view.MotionEvent);
+    method public boolean onSingleTapConfirmed(android.view.MotionEvent);
+    method public boolean onSingleTapUp(android.view.MotionEvent);
+  }
+
+  public class Gravity {
+    ctor public Gravity();
+    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect);
+    method public static void apply(int, int, int, android.graphics.Rect, android.graphics.Rect, int);
+    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect);
+    method public static void apply(int, int, int, android.graphics.Rect, int, int, android.graphics.Rect, int);
+    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect);
+    method public static void applyDisplay(int, android.graphics.Rect, android.graphics.Rect, int);
+    method public static int getAbsoluteGravity(int, int);
+    method public static boolean isHorizontal(int);
+    method public static boolean isVertical(int);
+    field public static final int AXIS_CLIP = 8; // 0x8
+    field public static final int AXIS_PULL_AFTER = 4; // 0x4
+    field public static final int AXIS_PULL_BEFORE = 2; // 0x2
+    field public static final int AXIS_SPECIFIED = 1; // 0x1
+    field public static final int AXIS_X_SHIFT = 0; // 0x0
+    field public static final int AXIS_Y_SHIFT = 4; // 0x4
+    field public static final int BOTTOM = 80; // 0x50
+    field public static final int CENTER = 17; // 0x11
+    field public static final int CENTER_HORIZONTAL = 1; // 0x1
+    field public static final int CENTER_VERTICAL = 16; // 0x10
+    field public static final int CLIP_HORIZONTAL = 8; // 0x8
+    field public static final int CLIP_VERTICAL = 128; // 0x80
+    field public static final int DISPLAY_CLIP_HORIZONTAL = 16777216; // 0x1000000
+    field public static final int DISPLAY_CLIP_VERTICAL = 268435456; // 0x10000000
+    field public static final int END = 8388613; // 0x800005
+    field public static final int FILL = 119; // 0x77
+    field public static final int FILL_HORIZONTAL = 7; // 0x7
+    field public static final int FILL_VERTICAL = 112; // 0x70
+    field public static final int HORIZONTAL_GRAVITY_MASK = 7; // 0x7
+    field public static final int LEFT = 3; // 0x3
+    field public static final int NO_GRAVITY = 0; // 0x0
+    field public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = 8388615; // 0x800007
+    field public static final int RELATIVE_LAYOUT_DIRECTION = 8388608; // 0x800000
+    field public static final int RIGHT = 5; // 0x5
+    field public static final int START = 8388611; // 0x800003
+    field public static final int TOP = 48; // 0x30
+    field public static final int VERTICAL_GRAVITY_MASK = 112; // 0x70
+  }
+
+  public class HapticFeedbackConstants {
+    field public static final int CLOCK_TICK = 4; // 0x4
+    field public static final int CONFIRM = 16; // 0x10
+    field public static final int CONTEXT_CLICK = 6; // 0x6
+    field public static final int FLAG_IGNORE_GLOBAL_SETTING = 2; // 0x2
+    field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
+    field public static final int GESTURE_END = 13; // 0xd
+    field public static final int GESTURE_START = 12; // 0xc
+    field public static final int KEYBOARD_PRESS = 3; // 0x3
+    field public static final int KEYBOARD_RELEASE = 7; // 0x7
+    field public static final int KEYBOARD_TAP = 3; // 0x3
+    field public static final int LONG_PRESS = 0; // 0x0
+    field public static final int REJECT = 17; // 0x11
+    field public static final int TEXT_HANDLE_MOVE = 9; // 0x9
+    field public static final int VIRTUAL_KEY = 1; // 0x1
+    field public static final int VIRTUAL_KEY_RELEASE = 8; // 0x8
+  }
+
+  public class InflateException extends java.lang.RuntimeException {
+    ctor public InflateException();
+    ctor public InflateException(String, Throwable);
+    ctor public InflateException(String);
+    ctor public InflateException(Throwable);
+  }
+
+  public final class InputDevice implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.hardware.BatteryState getBatteryState();
+    method public int getControllerNumber();
+    method public String getDescriptor();
+    method public static android.view.InputDevice getDevice(int);
+    method public static int[] getDeviceIds();
+    method public int getId();
+    method public android.view.KeyCharacterMap getKeyCharacterMap();
+    method public int getKeyboardType();
+    method @NonNull public android.hardware.lights.LightsManager getLightsManager();
+    method public android.view.InputDevice.MotionRange getMotionRange(int);
+    method public android.view.InputDevice.MotionRange getMotionRange(int, int);
+    method public java.util.List<android.view.InputDevice.MotionRange> getMotionRanges();
+    method public String getName();
+    method public int getProductId();
+    method @NonNull public android.hardware.SensorManager getSensorManager();
+    method public int getSources();
+    method public int getVendorId();
+    method @Deprecated public android.os.Vibrator getVibrator();
+    method @NonNull public android.os.VibratorManager getVibratorManager();
+    method public boolean[] hasKeys(int...);
+    method public boolean hasMicrophone();
+    method public boolean isEnabled();
+    method public boolean isExternal();
+    method public boolean isVirtual();
+    method public boolean supportsSource(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.InputDevice> CREATOR;
+    field public static final int KEYBOARD_TYPE_ALPHABETIC = 2; // 0x2
+    field public static final int KEYBOARD_TYPE_NONE = 0; // 0x0
+    field public static final int KEYBOARD_TYPE_NON_ALPHABETIC = 1; // 0x1
+    field @Deprecated public static final int MOTION_RANGE_ORIENTATION = 8; // 0x8
+    field @Deprecated public static final int MOTION_RANGE_PRESSURE = 2; // 0x2
+    field @Deprecated public static final int MOTION_RANGE_SIZE = 3; // 0x3
+    field @Deprecated public static final int MOTION_RANGE_TOOL_MAJOR = 6; // 0x6
+    field @Deprecated public static final int MOTION_RANGE_TOOL_MINOR = 7; // 0x7
+    field @Deprecated public static final int MOTION_RANGE_TOUCH_MAJOR = 4; // 0x4
+    field @Deprecated public static final int MOTION_RANGE_TOUCH_MINOR = 5; // 0x5
+    field @Deprecated public static final int MOTION_RANGE_X = 0; // 0x0
+    field @Deprecated public static final int MOTION_RANGE_Y = 1; // 0x1
+    field public static final int SOURCE_ANY = -256; // 0xffffff00
+    field public static final int SOURCE_BLUETOOTH_STYLUS = 49154; // 0xc002
+    field public static final int SOURCE_CLASS_BUTTON = 1; // 0x1
+    field public static final int SOURCE_CLASS_JOYSTICK = 16; // 0x10
+    field public static final int SOURCE_CLASS_MASK = 255; // 0xff
+    field public static final int SOURCE_CLASS_NONE = 0; // 0x0
+    field public static final int SOURCE_CLASS_POINTER = 2; // 0x2
+    field public static final int SOURCE_CLASS_POSITION = 8; // 0x8
+    field public static final int SOURCE_CLASS_TRACKBALL = 4; // 0x4
+    field public static final int SOURCE_DPAD = 513; // 0x201
+    field public static final int SOURCE_GAMEPAD = 1025; // 0x401
+    field public static final int SOURCE_HDMI = 33554433; // 0x2000001
+    field public static final int SOURCE_JOYSTICK = 16777232; // 0x1000010
+    field public static final int SOURCE_KEYBOARD = 257; // 0x101
+    field public static final int SOURCE_MOUSE = 8194; // 0x2002
+    field public static final int SOURCE_MOUSE_RELATIVE = 131076; // 0x20004
+    field public static final int SOURCE_ROTARY_ENCODER = 4194304; // 0x400000
+    field public static final int SOURCE_SENSOR = 67108864; // 0x4000000
+    field public static final int SOURCE_STYLUS = 16386; // 0x4002
+    field public static final int SOURCE_TOUCHPAD = 1048584; // 0x100008
+    field public static final int SOURCE_TOUCHSCREEN = 4098; // 0x1002
+    field public static final int SOURCE_TOUCH_NAVIGATION = 2097152; // 0x200000
+    field public static final int SOURCE_TRACKBALL = 65540; // 0x10004
+    field public static final int SOURCE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class InputDevice.MotionRange {
+    method public int getAxis();
+    method public float getFlat();
+    method public float getFuzz();
+    method public float getMax();
+    method public float getMin();
+    method public float getRange();
+    method public float getResolution();
+    method public int getSource();
+    method public boolean isFromSource(int);
+  }
+
+  public abstract class InputEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public final android.view.InputDevice getDevice();
+    method public abstract int getDeviceId();
+    method public abstract long getEventTime();
+    method public abstract int getSource();
+    method public boolean isFromSource(int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.InputEvent> CREATOR;
+  }
+
+  public final class InputQueue {
+  }
+
+  public static interface InputQueue.Callback {
+    method public void onInputQueueCreated(android.view.InputQueue);
+    method public void onInputQueueDestroyed(android.view.InputQueue);
+  }
+
+  public class KeyCharacterMap implements android.os.Parcelable {
+    method public int describeContents();
+    method public static boolean deviceHasKey(int);
+    method public static boolean[] deviceHasKeys(int[]);
+    method public int get(int, int);
+    method public static int getDeadChar(int, int);
+    method public char getDisplayLabel(int);
+    method public android.view.KeyEvent[] getEvents(char[]);
+    method @Deprecated public boolean getKeyData(int, android.view.KeyCharacterMap.KeyData);
+    method public int getKeyboardType();
+    method public char getMatch(int, char[]);
+    method public char getMatch(int, char[], int);
+    method public int getModifierBehavior();
+    method public char getNumber(int);
+    method public boolean isPrintingKey(int);
+    method public static android.view.KeyCharacterMap load(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALPHA = 3; // 0x3
+    field @Deprecated public static final int BUILT_IN_KEYBOARD = 0; // 0x0
+    field public static final int COMBINING_ACCENT = -2147483648; // 0x80000000
+    field public static final int COMBINING_ACCENT_MASK = 2147483647; // 0x7fffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyCharacterMap> CREATOR;
+    field public static final int FULL = 4; // 0x4
+    field public static final char HEX_INPUT = 61184; // 0xef00 '\uef00'
+    field public static final int MODIFIER_BEHAVIOR_CHORDED = 0; // 0x0
+    field public static final int MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED = 1; // 0x1
+    field public static final int NUMERIC = 1; // 0x1
+    field public static final char PICKER_DIALOG_INPUT = 61185; // 0xef01 '\uef01'
+    field public static final int PREDICTIVE = 2; // 0x2
+    field public static final int SPECIAL_FUNCTION = 5; // 0x5
+    field public static final int VIRTUAL_KEYBOARD = -1; // 0xffffffff
+  }
+
+  @Deprecated public static class KeyCharacterMap.KeyData {
+    ctor @Deprecated public KeyCharacterMap.KeyData();
+    field @Deprecated public static final int META_LENGTH = 4; // 0x4
+    field @Deprecated public char displayLabel;
+    field @Deprecated public char[] meta;
+    field @Deprecated public char number;
+  }
+
+  public static class KeyCharacterMap.UnavailableException extends android.util.AndroidRuntimeException {
+    ctor public KeyCharacterMap.UnavailableException(String);
+  }
+
+  public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable {
+    ctor public KeyEvent(int, int);
+    ctor public KeyEvent(long, long, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int, int, int, int);
+    ctor public KeyEvent(long, long, int, int, int, int, int, int, int, int);
+    ctor public KeyEvent(long, String, int, int);
+    ctor public KeyEvent(android.view.KeyEvent);
+    ctor @Deprecated public KeyEvent(android.view.KeyEvent, long, int);
+    method public static android.view.KeyEvent changeAction(android.view.KeyEvent, int);
+    method public static android.view.KeyEvent changeFlags(android.view.KeyEvent, int);
+    method public static android.view.KeyEvent changeTimeRepeat(android.view.KeyEvent, long, int);
+    method public static android.view.KeyEvent changeTimeRepeat(android.view.KeyEvent, long, int, int);
+    method @Deprecated public final boolean dispatch(android.view.KeyEvent.Callback);
+    method public final boolean dispatch(android.view.KeyEvent.Callback, android.view.KeyEvent.DispatcherState, Object);
+    method public final int getAction();
+    method @Deprecated public final String getCharacters();
+    method public static int getDeadChar(int, int);
+    method public final int getDeviceId();
+    method public char getDisplayLabel();
+    method public final long getDownTime();
+    method public final long getEventTime();
+    method public final int getFlags();
+    method public final android.view.KeyCharacterMap getKeyCharacterMap();
+    method public final int getKeyCode();
+    method @Deprecated public boolean getKeyData(android.view.KeyCharacterMap.KeyData);
+    method public char getMatch(char[]);
+    method public char getMatch(char[], int);
+    method public static int getMaxKeyCode();
+    method public final int getMetaState();
+    method public static int getModifierMetaStateMask();
+    method public final int getModifiers();
+    method public char getNumber();
+    method public final int getRepeatCount();
+    method public final int getScanCode();
+    method public final int getSource();
+    method public int getUnicodeChar();
+    method public int getUnicodeChar(int);
+    method public final boolean hasModifiers(int);
+    method public final boolean hasNoModifiers();
+    method public final boolean isAltPressed();
+    method public final boolean isCanceled();
+    method public final boolean isCapsLockOn();
+    method public final boolean isCtrlPressed();
+    method public final boolean isFunctionPressed();
+    method public static final boolean isGamepadButton(int);
+    method public final boolean isLongPress();
+    method public static final boolean isMediaSessionKey(int);
+    method public final boolean isMetaPressed();
+    method public static boolean isModifierKey(int);
+    method public final boolean isNumLockOn();
+    method public boolean isPrintingKey();
+    method public final boolean isScrollLockOn();
+    method public final boolean isShiftPressed();
+    method public final boolean isSymPressed();
+    method public final boolean isSystem();
+    method public final boolean isTracking();
+    method public static int keyCodeFromString(@NonNull String);
+    method public static String keyCodeToString(int);
+    method public static boolean metaStateHasModifiers(int, int);
+    method public static boolean metaStateHasNoModifiers(int);
+    method public static int normalizeMetaState(int);
+    method public final void setSource(int);
+    method public final void startTracking();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_DOWN = 0; // 0x0
+    field @Deprecated public static final int ACTION_MULTIPLE = 2; // 0x2
+    field public static final int ACTION_UP = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyEvent> CREATOR;
+    field public static final int FLAG_CANCELED = 32; // 0x20
+    field public static final int FLAG_CANCELED_LONG_PRESS = 256; // 0x100
+    field public static final int FLAG_EDITOR_ACTION = 16; // 0x10
+    field public static final int FLAG_FALLBACK = 1024; // 0x400
+    field public static final int FLAG_FROM_SYSTEM = 8; // 0x8
+    field public static final int FLAG_KEEP_TOUCH_MODE = 4; // 0x4
+    field public static final int FLAG_LONG_PRESS = 128; // 0x80
+    field public static final int FLAG_SOFT_KEYBOARD = 2; // 0x2
+    field public static final int FLAG_TRACKING = 512; // 0x200
+    field public static final int FLAG_VIRTUAL_HARD_KEY = 64; // 0x40
+    field @Deprecated public static final int FLAG_WOKE_HERE = 1; // 0x1
+    field public static final int KEYCODE_0 = 7; // 0x7
+    field public static final int KEYCODE_1 = 8; // 0x8
+    field public static final int KEYCODE_11 = 227; // 0xe3
+    field public static final int KEYCODE_12 = 228; // 0xe4
+    field public static final int KEYCODE_2 = 9; // 0x9
+    field public static final int KEYCODE_3 = 10; // 0xa
+    field public static final int KEYCODE_3D_MODE = 206; // 0xce
+    field public static final int KEYCODE_4 = 11; // 0xb
+    field public static final int KEYCODE_5 = 12; // 0xc
+    field public static final int KEYCODE_6 = 13; // 0xd
+    field public static final int KEYCODE_7 = 14; // 0xe
+    field public static final int KEYCODE_8 = 15; // 0xf
+    field public static final int KEYCODE_9 = 16; // 0x10
+    field public static final int KEYCODE_A = 29; // 0x1d
+    field public static final int KEYCODE_ALL_APPS = 284; // 0x11c
+    field public static final int KEYCODE_ALT_LEFT = 57; // 0x39
+    field public static final int KEYCODE_ALT_RIGHT = 58; // 0x3a
+    field public static final int KEYCODE_APOSTROPHE = 75; // 0x4b
+    field public static final int KEYCODE_APP_SWITCH = 187; // 0xbb
+    field public static final int KEYCODE_ASSIST = 219; // 0xdb
+    field public static final int KEYCODE_AT = 77; // 0x4d
+    field public static final int KEYCODE_AVR_INPUT = 182; // 0xb6
+    field public static final int KEYCODE_AVR_POWER = 181; // 0xb5
+    field public static final int KEYCODE_B = 30; // 0x1e
+    field public static final int KEYCODE_BACK = 4; // 0x4
+    field public static final int KEYCODE_BACKSLASH = 73; // 0x49
+    field public static final int KEYCODE_BOOKMARK = 174; // 0xae
+    field public static final int KEYCODE_BREAK = 121; // 0x79
+    field public static final int KEYCODE_BRIGHTNESS_DOWN = 220; // 0xdc
+    field public static final int KEYCODE_BRIGHTNESS_UP = 221; // 0xdd
+    field public static final int KEYCODE_BUTTON_1 = 188; // 0xbc
+    field public static final int KEYCODE_BUTTON_10 = 197; // 0xc5
+    field public static final int KEYCODE_BUTTON_11 = 198; // 0xc6
+    field public static final int KEYCODE_BUTTON_12 = 199; // 0xc7
+    field public static final int KEYCODE_BUTTON_13 = 200; // 0xc8
+    field public static final int KEYCODE_BUTTON_14 = 201; // 0xc9
+    field public static final int KEYCODE_BUTTON_15 = 202; // 0xca
+    field public static final int KEYCODE_BUTTON_16 = 203; // 0xcb
+    field public static final int KEYCODE_BUTTON_2 = 189; // 0xbd
+    field public static final int KEYCODE_BUTTON_3 = 190; // 0xbe
+    field public static final int KEYCODE_BUTTON_4 = 191; // 0xbf
+    field public static final int KEYCODE_BUTTON_5 = 192; // 0xc0
+    field public static final int KEYCODE_BUTTON_6 = 193; // 0xc1
+    field public static final int KEYCODE_BUTTON_7 = 194; // 0xc2
+    field public static final int KEYCODE_BUTTON_8 = 195; // 0xc3
+    field public static final int KEYCODE_BUTTON_9 = 196; // 0xc4
+    field public static final int KEYCODE_BUTTON_A = 96; // 0x60
+    field public static final int KEYCODE_BUTTON_B = 97; // 0x61
+    field public static final int KEYCODE_BUTTON_C = 98; // 0x62
+    field public static final int KEYCODE_BUTTON_L1 = 102; // 0x66
+    field public static final int KEYCODE_BUTTON_L2 = 104; // 0x68
+    field public static final int KEYCODE_BUTTON_MODE = 110; // 0x6e
+    field public static final int KEYCODE_BUTTON_R1 = 103; // 0x67
+    field public static final int KEYCODE_BUTTON_R2 = 105; // 0x69
+    field public static final int KEYCODE_BUTTON_SELECT = 109; // 0x6d
+    field public static final int KEYCODE_BUTTON_START = 108; // 0x6c
+    field public static final int KEYCODE_BUTTON_THUMBL = 106; // 0x6a
+    field public static final int KEYCODE_BUTTON_THUMBR = 107; // 0x6b
+    field public static final int KEYCODE_BUTTON_X = 99; // 0x63
+    field public static final int KEYCODE_BUTTON_Y = 100; // 0x64
+    field public static final int KEYCODE_BUTTON_Z = 101; // 0x65
+    field public static final int KEYCODE_C = 31; // 0x1f
+    field public static final int KEYCODE_CALCULATOR = 210; // 0xd2
+    field public static final int KEYCODE_CALENDAR = 208; // 0xd0
+    field public static final int KEYCODE_CALL = 5; // 0x5
+    field public static final int KEYCODE_CAMERA = 27; // 0x1b
+    field public static final int KEYCODE_CAPS_LOCK = 115; // 0x73
+    field public static final int KEYCODE_CAPTIONS = 175; // 0xaf
+    field public static final int KEYCODE_CHANNEL_DOWN = 167; // 0xa7
+    field public static final int KEYCODE_CHANNEL_UP = 166; // 0xa6
+    field public static final int KEYCODE_CLEAR = 28; // 0x1c
+    field public static final int KEYCODE_COMMA = 55; // 0x37
+    field public static final int KEYCODE_CONTACTS = 207; // 0xcf
+    field public static final int KEYCODE_COPY = 278; // 0x116
+    field public static final int KEYCODE_CTRL_LEFT = 113; // 0x71
+    field public static final int KEYCODE_CTRL_RIGHT = 114; // 0x72
+    field public static final int KEYCODE_CUT = 277; // 0x115
+    field public static final int KEYCODE_D = 32; // 0x20
+    field public static final int KEYCODE_DEL = 67; // 0x43
+    field public static final int KEYCODE_DPAD_CENTER = 23; // 0x17
+    field public static final int KEYCODE_DPAD_DOWN = 20; // 0x14
+    field public static final int KEYCODE_DPAD_DOWN_LEFT = 269; // 0x10d
+    field public static final int KEYCODE_DPAD_DOWN_RIGHT = 271; // 0x10f
+    field public static final int KEYCODE_DPAD_LEFT = 21; // 0x15
+    field public static final int KEYCODE_DPAD_RIGHT = 22; // 0x16
+    field public static final int KEYCODE_DPAD_UP = 19; // 0x13
+    field public static final int KEYCODE_DPAD_UP_LEFT = 268; // 0x10c
+    field public static final int KEYCODE_DPAD_UP_RIGHT = 270; // 0x10e
+    field public static final int KEYCODE_DVR = 173; // 0xad
+    field public static final int KEYCODE_E = 33; // 0x21
+    field public static final int KEYCODE_EISU = 212; // 0xd4
+    field public static final int KEYCODE_ENDCALL = 6; // 0x6
+    field public static final int KEYCODE_ENTER = 66; // 0x42
+    field public static final int KEYCODE_ENVELOPE = 65; // 0x41
+    field public static final int KEYCODE_EQUALS = 70; // 0x46
+    field public static final int KEYCODE_ESCAPE = 111; // 0x6f
+    field public static final int KEYCODE_EXPLORER = 64; // 0x40
+    field public static final int KEYCODE_F = 34; // 0x22
+    field public static final int KEYCODE_F1 = 131; // 0x83
+    field public static final int KEYCODE_F10 = 140; // 0x8c
+    field public static final int KEYCODE_F11 = 141; // 0x8d
+    field public static final int KEYCODE_F12 = 142; // 0x8e
+    field public static final int KEYCODE_F2 = 132; // 0x84
+    field public static final int KEYCODE_F3 = 133; // 0x85
+    field public static final int KEYCODE_F4 = 134; // 0x86
+    field public static final int KEYCODE_F5 = 135; // 0x87
+    field public static final int KEYCODE_F6 = 136; // 0x88
+    field public static final int KEYCODE_F7 = 137; // 0x89
+    field public static final int KEYCODE_F8 = 138; // 0x8a
+    field public static final int KEYCODE_F9 = 139; // 0x8b
+    field public static final int KEYCODE_FOCUS = 80; // 0x50
+    field public static final int KEYCODE_FORWARD = 125; // 0x7d
+    field public static final int KEYCODE_FORWARD_DEL = 112; // 0x70
+    field public static final int KEYCODE_FUNCTION = 119; // 0x77
+    field public static final int KEYCODE_G = 35; // 0x23
+    field public static final int KEYCODE_GRAVE = 68; // 0x44
+    field public static final int KEYCODE_GUIDE = 172; // 0xac
+    field public static final int KEYCODE_H = 36; // 0x24
+    field public static final int KEYCODE_HEADSETHOOK = 79; // 0x4f
+    field public static final int KEYCODE_HELP = 259; // 0x103
+    field public static final int KEYCODE_HENKAN = 214; // 0xd6
+    field public static final int KEYCODE_HOME = 3; // 0x3
+    field public static final int KEYCODE_I = 37; // 0x25
+    field public static final int KEYCODE_INFO = 165; // 0xa5
+    field public static final int KEYCODE_INSERT = 124; // 0x7c
+    field public static final int KEYCODE_J = 38; // 0x26
+    field public static final int KEYCODE_K = 39; // 0x27
+    field public static final int KEYCODE_KANA = 218; // 0xda
+    field public static final int KEYCODE_KATAKANA_HIRAGANA = 215; // 0xd7
+    field public static final int KEYCODE_L = 40; // 0x28
+    field public static final int KEYCODE_LANGUAGE_SWITCH = 204; // 0xcc
+    field public static final int KEYCODE_LAST_CHANNEL = 229; // 0xe5
+    field public static final int KEYCODE_LEFT_BRACKET = 71; // 0x47
+    field public static final int KEYCODE_M = 41; // 0x29
+    field public static final int KEYCODE_MANNER_MODE = 205; // 0xcd
+    field public static final int KEYCODE_MEDIA_AUDIO_TRACK = 222; // 0xde
+    field public static final int KEYCODE_MEDIA_CLOSE = 128; // 0x80
+    field public static final int KEYCODE_MEDIA_EJECT = 129; // 0x81
+    field public static final int KEYCODE_MEDIA_FAST_FORWARD = 90; // 0x5a
+    field public static final int KEYCODE_MEDIA_NEXT = 87; // 0x57
+    field public static final int KEYCODE_MEDIA_PAUSE = 127; // 0x7f
+    field public static final int KEYCODE_MEDIA_PLAY = 126; // 0x7e
+    field public static final int KEYCODE_MEDIA_PLAY_PAUSE = 85; // 0x55
+    field public static final int KEYCODE_MEDIA_PREVIOUS = 88; // 0x58
+    field public static final int KEYCODE_MEDIA_RECORD = 130; // 0x82
+    field public static final int KEYCODE_MEDIA_REWIND = 89; // 0x59
+    field public static final int KEYCODE_MEDIA_SKIP_BACKWARD = 273; // 0x111
+    field public static final int KEYCODE_MEDIA_SKIP_FORWARD = 272; // 0x110
+    field public static final int KEYCODE_MEDIA_STEP_BACKWARD = 275; // 0x113
+    field public static final int KEYCODE_MEDIA_STEP_FORWARD = 274; // 0x112
+    field public static final int KEYCODE_MEDIA_STOP = 86; // 0x56
+    field public static final int KEYCODE_MEDIA_TOP_MENU = 226; // 0xe2
+    field public static final int KEYCODE_MENU = 82; // 0x52
+    field public static final int KEYCODE_META_LEFT = 117; // 0x75
+    field public static final int KEYCODE_META_RIGHT = 118; // 0x76
+    field public static final int KEYCODE_MINUS = 69; // 0x45
+    field public static final int KEYCODE_MOVE_END = 123; // 0x7b
+    field public static final int KEYCODE_MOVE_HOME = 122; // 0x7a
+    field public static final int KEYCODE_MUHENKAN = 213; // 0xd5
+    field public static final int KEYCODE_MUSIC = 209; // 0xd1
+    field public static final int KEYCODE_MUTE = 91; // 0x5b
+    field public static final int KEYCODE_N = 42; // 0x2a
+    field public static final int KEYCODE_NAVIGATE_IN = 262; // 0x106
+    field public static final int KEYCODE_NAVIGATE_NEXT = 261; // 0x105
+    field public static final int KEYCODE_NAVIGATE_OUT = 263; // 0x107
+    field public static final int KEYCODE_NAVIGATE_PREVIOUS = 260; // 0x104
+    field public static final int KEYCODE_NOTIFICATION = 83; // 0x53
+    field public static final int KEYCODE_NUM = 78; // 0x4e
+    field public static final int KEYCODE_NUMPAD_0 = 144; // 0x90
+    field public static final int KEYCODE_NUMPAD_1 = 145; // 0x91
+    field public static final int KEYCODE_NUMPAD_2 = 146; // 0x92
+    field public static final int KEYCODE_NUMPAD_3 = 147; // 0x93
+    field public static final int KEYCODE_NUMPAD_4 = 148; // 0x94
+    field public static final int KEYCODE_NUMPAD_5 = 149; // 0x95
+    field public static final int KEYCODE_NUMPAD_6 = 150; // 0x96
+    field public static final int KEYCODE_NUMPAD_7 = 151; // 0x97
+    field public static final int KEYCODE_NUMPAD_8 = 152; // 0x98
+    field public static final int KEYCODE_NUMPAD_9 = 153; // 0x99
+    field public static final int KEYCODE_NUMPAD_ADD = 157; // 0x9d
+    field public static final int KEYCODE_NUMPAD_COMMA = 159; // 0x9f
+    field public static final int KEYCODE_NUMPAD_DIVIDE = 154; // 0x9a
+    field public static final int KEYCODE_NUMPAD_DOT = 158; // 0x9e
+    field public static final int KEYCODE_NUMPAD_ENTER = 160; // 0xa0
+    field public static final int KEYCODE_NUMPAD_EQUALS = 161; // 0xa1
+    field public static final int KEYCODE_NUMPAD_LEFT_PAREN = 162; // 0xa2
+    field public static final int KEYCODE_NUMPAD_MULTIPLY = 155; // 0x9b
+    field public static final int KEYCODE_NUMPAD_RIGHT_PAREN = 163; // 0xa3
+    field public static final int KEYCODE_NUMPAD_SUBTRACT = 156; // 0x9c
+    field public static final int KEYCODE_NUM_LOCK = 143; // 0x8f
+    field public static final int KEYCODE_O = 43; // 0x2b
+    field public static final int KEYCODE_P = 44; // 0x2c
+    field public static final int KEYCODE_PAGE_DOWN = 93; // 0x5d
+    field public static final int KEYCODE_PAGE_UP = 92; // 0x5c
+    field public static final int KEYCODE_PAIRING = 225; // 0xe1
+    field public static final int KEYCODE_PASTE = 279; // 0x117
+    field public static final int KEYCODE_PERIOD = 56; // 0x38
+    field public static final int KEYCODE_PICTSYMBOLS = 94; // 0x5e
+    field public static final int KEYCODE_PLUS = 81; // 0x51
+    field public static final int KEYCODE_POUND = 18; // 0x12
+    field public static final int KEYCODE_POWER = 26; // 0x1a
+    field public static final int KEYCODE_PROFILE_SWITCH = 288; // 0x120
+    field public static final int KEYCODE_PROG_BLUE = 186; // 0xba
+    field public static final int KEYCODE_PROG_GREEN = 184; // 0xb8
+    field public static final int KEYCODE_PROG_RED = 183; // 0xb7
+    field public static final int KEYCODE_PROG_YELLOW = 185; // 0xb9
+    field public static final int KEYCODE_Q = 45; // 0x2d
+    field public static final int KEYCODE_R = 46; // 0x2e
+    field public static final int KEYCODE_REFRESH = 285; // 0x11d
+    field public static final int KEYCODE_RIGHT_BRACKET = 72; // 0x48
+    field public static final int KEYCODE_RO = 217; // 0xd9
+    field public static final int KEYCODE_S = 47; // 0x2f
+    field public static final int KEYCODE_SCROLL_LOCK = 116; // 0x74
+    field public static final int KEYCODE_SEARCH = 84; // 0x54
+    field public static final int KEYCODE_SEMICOLON = 74; // 0x4a
+    field public static final int KEYCODE_SETTINGS = 176; // 0xb0
+    field public static final int KEYCODE_SHIFT_LEFT = 59; // 0x3b
+    field public static final int KEYCODE_SHIFT_RIGHT = 60; // 0x3c
+    field public static final int KEYCODE_SLASH = 76; // 0x4c
+    field public static final int KEYCODE_SLEEP = 223; // 0xdf
+    field public static final int KEYCODE_SOFT_LEFT = 1; // 0x1
+    field public static final int KEYCODE_SOFT_RIGHT = 2; // 0x2
+    field public static final int KEYCODE_SOFT_SLEEP = 276; // 0x114
+    field public static final int KEYCODE_SPACE = 62; // 0x3e
+    field public static final int KEYCODE_STAR = 17; // 0x11
+    field public static final int KEYCODE_STB_INPUT = 180; // 0xb4
+    field public static final int KEYCODE_STB_POWER = 179; // 0xb3
+    field public static final int KEYCODE_STEM_1 = 265; // 0x109
+    field public static final int KEYCODE_STEM_2 = 266; // 0x10a
+    field public static final int KEYCODE_STEM_3 = 267; // 0x10b
+    field public static final int KEYCODE_STEM_PRIMARY = 264; // 0x108
+    field public static final int KEYCODE_SWITCH_CHARSET = 95; // 0x5f
+    field public static final int KEYCODE_SYM = 63; // 0x3f
+    field public static final int KEYCODE_SYSRQ = 120; // 0x78
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_DOWN = 281; // 0x119
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_LEFT = 282; // 0x11a
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283; // 0x11b
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_UP = 280; // 0x118
+    field public static final int KEYCODE_T = 48; // 0x30
+    field public static final int KEYCODE_TAB = 61; // 0x3d
+    field public static final int KEYCODE_THUMBS_DOWN = 287; // 0x11f
+    field public static final int KEYCODE_THUMBS_UP = 286; // 0x11e
+    field public static final int KEYCODE_TV = 170; // 0xaa
+    field public static final int KEYCODE_TV_ANTENNA_CABLE = 242; // 0xf2
+    field public static final int KEYCODE_TV_AUDIO_DESCRIPTION = 252; // 0xfc
+    field public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN = 254; // 0xfe
+    field public static final int KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP = 253; // 0xfd
+    field public static final int KEYCODE_TV_CONTENTS_MENU = 256; // 0x100
+    field public static final int KEYCODE_TV_DATA_SERVICE = 230; // 0xe6
+    field public static final int KEYCODE_TV_INPUT = 178; // 0xb2
+    field public static final int KEYCODE_TV_INPUT_COMPONENT_1 = 249; // 0xf9
+    field public static final int KEYCODE_TV_INPUT_COMPONENT_2 = 250; // 0xfa
+    field public static final int KEYCODE_TV_INPUT_COMPOSITE_1 = 247; // 0xf7
+    field public static final int KEYCODE_TV_INPUT_COMPOSITE_2 = 248; // 0xf8
+    field public static final int KEYCODE_TV_INPUT_HDMI_1 = 243; // 0xf3
+    field public static final int KEYCODE_TV_INPUT_HDMI_2 = 244; // 0xf4
+    field public static final int KEYCODE_TV_INPUT_HDMI_3 = 245; // 0xf5
+    field public static final int KEYCODE_TV_INPUT_HDMI_4 = 246; // 0xf6
+    field public static final int KEYCODE_TV_INPUT_VGA_1 = 251; // 0xfb
+    field public static final int KEYCODE_TV_MEDIA_CONTEXT_MENU = 257; // 0x101
+    field public static final int KEYCODE_TV_NETWORK = 241; // 0xf1
+    field public static final int KEYCODE_TV_NUMBER_ENTRY = 234; // 0xea
+    field public static final int KEYCODE_TV_POWER = 177; // 0xb1
+    field public static final int KEYCODE_TV_RADIO_SERVICE = 232; // 0xe8
+    field public static final int KEYCODE_TV_SATELLITE = 237; // 0xed
+    field public static final int KEYCODE_TV_SATELLITE_BS = 238; // 0xee
+    field public static final int KEYCODE_TV_SATELLITE_CS = 239; // 0xef
+    field public static final int KEYCODE_TV_SATELLITE_SERVICE = 240; // 0xf0
+    field public static final int KEYCODE_TV_TELETEXT = 233; // 0xe9
+    field public static final int KEYCODE_TV_TERRESTRIAL_ANALOG = 235; // 0xeb
+    field public static final int KEYCODE_TV_TERRESTRIAL_DIGITAL = 236; // 0xec
+    field public static final int KEYCODE_TV_TIMER_PROGRAMMING = 258; // 0x102
+    field public static final int KEYCODE_TV_ZOOM_MODE = 255; // 0xff
+    field public static final int KEYCODE_U = 49; // 0x31
+    field public static final int KEYCODE_UNKNOWN = 0; // 0x0
+    field public static final int KEYCODE_V = 50; // 0x32
+    field public static final int KEYCODE_VOICE_ASSIST = 231; // 0xe7
+    field public static final int KEYCODE_VOLUME_DOWN = 25; // 0x19
+    field public static final int KEYCODE_VOLUME_MUTE = 164; // 0xa4
+    field public static final int KEYCODE_VOLUME_UP = 24; // 0x18
+    field public static final int KEYCODE_W = 51; // 0x33
+    field public static final int KEYCODE_WAKEUP = 224; // 0xe0
+    field public static final int KEYCODE_WINDOW = 171; // 0xab
+    field public static final int KEYCODE_X = 52; // 0x34
+    field public static final int KEYCODE_Y = 53; // 0x35
+    field public static final int KEYCODE_YEN = 216; // 0xd8
+    field public static final int KEYCODE_Z = 54; // 0x36
+    field public static final int KEYCODE_ZENKAKU_HANKAKU = 211; // 0xd3
+    field public static final int KEYCODE_ZOOM_IN = 168; // 0xa8
+    field public static final int KEYCODE_ZOOM_OUT = 169; // 0xa9
+    field @Deprecated public static final int MAX_KEYCODE = 84; // 0x54
+    field public static final int META_ALT_LEFT_ON = 16; // 0x10
+    field public static final int META_ALT_MASK = 50; // 0x32
+    field public static final int META_ALT_ON = 2; // 0x2
+    field public static final int META_ALT_RIGHT_ON = 32; // 0x20
+    field public static final int META_CAPS_LOCK_ON = 1048576; // 0x100000
+    field public static final int META_CTRL_LEFT_ON = 8192; // 0x2000
+    field public static final int META_CTRL_MASK = 28672; // 0x7000
+    field public static final int META_CTRL_ON = 4096; // 0x1000
+    field public static final int META_CTRL_RIGHT_ON = 16384; // 0x4000
+    field public static final int META_FUNCTION_ON = 8; // 0x8
+    field public static final int META_META_LEFT_ON = 131072; // 0x20000
+    field public static final int META_META_MASK = 458752; // 0x70000
+    field public static final int META_META_ON = 65536; // 0x10000
+    field public static final int META_META_RIGHT_ON = 262144; // 0x40000
+    field public static final int META_NUM_LOCK_ON = 2097152; // 0x200000
+    field public static final int META_SCROLL_LOCK_ON = 4194304; // 0x400000
+    field public static final int META_SHIFT_LEFT_ON = 64; // 0x40
+    field public static final int META_SHIFT_MASK = 193; // 0xc1
+    field public static final int META_SHIFT_ON = 1; // 0x1
+    field public static final int META_SHIFT_RIGHT_ON = 128; // 0x80
+    field public static final int META_SYM_ON = 4; // 0x4
+  }
+
+  public static interface KeyEvent.Callback {
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+  }
+
+  public static class KeyEvent.DispatcherState {
+    ctor public KeyEvent.DispatcherState();
+    method public void handleUpEvent(android.view.KeyEvent);
+    method public boolean isTracking(android.view.KeyEvent);
+    method public void performedLongPress(android.view.KeyEvent);
+    method public void reset();
+    method public void reset(Object);
+    method public void startTracking(android.view.KeyEvent, Object);
+  }
+
+  public final class KeyboardShortcutGroup implements android.os.Parcelable {
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence, @NonNull java.util.List<android.view.KeyboardShortcutInfo>);
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence);
+    method public void addItem(android.view.KeyboardShortcutInfo);
+    method public int describeContents();
+    method public java.util.List<android.view.KeyboardShortcutInfo> getItems();
+    method public CharSequence getLabel();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyboardShortcutGroup> CREATOR;
+  }
+
+  public final class KeyboardShortcutInfo implements android.os.Parcelable {
+    ctor public KeyboardShortcutInfo(CharSequence, int, int);
+    ctor public KeyboardShortcutInfo(CharSequence, char, int);
+    method public int describeContents();
+    method public char getBaseCharacter();
+    method public int getKeycode();
+    method @Nullable public CharSequence getLabel();
+    method public int getModifiers();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.KeyboardShortcutInfo> CREATOR;
+  }
+
+  public abstract class LayoutInflater {
+    ctor protected LayoutInflater(android.content.Context);
+    ctor protected LayoutInflater(android.view.LayoutInflater, android.content.Context);
+    method public abstract android.view.LayoutInflater cloneInContext(android.content.Context);
+    method public final android.view.View createView(String, String, android.util.AttributeSet) throws java.lang.ClassNotFoundException, android.view.InflateException;
+    method @Nullable public final android.view.View createView(@NonNull android.content.Context, @NonNull String, @Nullable String, @Nullable android.util.AttributeSet) throws java.lang.ClassNotFoundException, android.view.InflateException;
+    method public static android.view.LayoutInflater from(@UiContext android.content.Context);
+    method public android.content.Context getContext();
+    method public final android.view.LayoutInflater.Factory getFactory();
+    method public final android.view.LayoutInflater.Factory2 getFactory2();
+    method public android.view.LayoutInflater.Filter getFilter();
+    method public android.view.View inflate(@LayoutRes int, @Nullable android.view.ViewGroup);
+    method public android.view.View inflate(org.xmlpull.v1.XmlPullParser, @Nullable android.view.ViewGroup);
+    method public android.view.View inflate(@LayoutRes int, @Nullable android.view.ViewGroup, boolean);
+    method public android.view.View inflate(org.xmlpull.v1.XmlPullParser, @Nullable android.view.ViewGroup, boolean);
+    method protected android.view.View onCreateView(String, android.util.AttributeSet) throws java.lang.ClassNotFoundException;
+    method protected android.view.View onCreateView(android.view.View, String, android.util.AttributeSet) throws java.lang.ClassNotFoundException;
+    method @Nullable public android.view.View onCreateView(@NonNull android.content.Context, @Nullable android.view.View, @NonNull String, @Nullable android.util.AttributeSet) throws java.lang.ClassNotFoundException;
+    method public void setFactory(android.view.LayoutInflater.Factory);
+    method public void setFactory2(android.view.LayoutInflater.Factory2);
+    method public void setFilter(android.view.LayoutInflater.Filter);
+  }
+
+  public static interface LayoutInflater.Factory {
+    method @Nullable public android.view.View onCreateView(@NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+  }
+
+  public static interface LayoutInflater.Factory2 extends android.view.LayoutInflater.Factory {
+    method @Nullable public android.view.View onCreateView(@Nullable android.view.View, @NonNull String, @NonNull android.content.Context, @NonNull android.util.AttributeSet);
+  }
+
+  public static interface LayoutInflater.Filter {
+    method public boolean onLoadClass(Class);
+  }
+
+  public interface Menu {
+    method public android.view.MenuItem add(CharSequence);
+    method public android.view.MenuItem add(@StringRes int);
+    method public android.view.MenuItem add(int, int, int, CharSequence);
+    method public android.view.MenuItem add(int, int, int, @StringRes int);
+    method public int addIntentOptions(int, int, int, android.content.ComponentName, android.content.Intent[], android.content.Intent, int, android.view.MenuItem[]);
+    method public android.view.SubMenu addSubMenu(CharSequence);
+    method public android.view.SubMenu addSubMenu(@StringRes int);
+    method public android.view.SubMenu addSubMenu(int, int, int, CharSequence);
+    method public android.view.SubMenu addSubMenu(int, int, int, @StringRes int);
+    method public void clear();
+    method public void close();
+    method public android.view.MenuItem findItem(int);
+    method public android.view.MenuItem getItem(int);
+    method public boolean hasVisibleItems();
+    method public boolean isShortcutKey(int, android.view.KeyEvent);
+    method public boolean performIdentifierAction(int, int);
+    method public boolean performShortcut(int, android.view.KeyEvent, int);
+    method public void removeGroup(int);
+    method public void removeItem(int);
+    method public void setGroupCheckable(int, boolean, boolean);
+    method public default void setGroupDividerEnabled(boolean);
+    method public void setGroupEnabled(int, boolean);
+    method public void setGroupVisible(int, boolean);
+    method public void setQwertyMode(boolean);
+    method public int size();
+    field public static final int CATEGORY_ALTERNATIVE = 262144; // 0x40000
+    field public static final int CATEGORY_CONTAINER = 65536; // 0x10000
+    field public static final int CATEGORY_SECONDARY = 196608; // 0x30000
+    field public static final int CATEGORY_SYSTEM = 131072; // 0x20000
+    field public static final int FIRST = 1; // 0x1
+    field public static final int FLAG_ALWAYS_PERFORM_CLOSE = 2; // 0x2
+    field public static final int FLAG_APPEND_TO_GROUP = 1; // 0x1
+    field public static final int FLAG_PERFORM_NO_CLOSE = 1; // 0x1
+    field public static final int NONE = 0; // 0x0
+    field public static final int SUPPORTED_MODIFIERS_MASK = 69647; // 0x1100f
+  }
+
+  public class MenuInflater {
+    ctor public MenuInflater(android.content.Context);
+    method public void inflate(@MenuRes int, android.view.Menu);
+  }
+
+  public interface MenuItem {
+    method public boolean collapseActionView();
+    method public boolean expandActionView();
+    method public android.view.ActionProvider getActionProvider();
+    method public android.view.View getActionView();
+    method public default int getAlphabeticModifiers();
+    method public char getAlphabeticShortcut();
+    method public default CharSequence getContentDescription();
+    method public int getGroupId();
+    method public android.graphics.drawable.Drawable getIcon();
+    method @Nullable public default android.graphics.BlendMode getIconTintBlendMode();
+    method @Nullable public default android.content.res.ColorStateList getIconTintList();
+    method @Nullable public default android.graphics.PorterDuff.Mode getIconTintMode();
+    method public android.content.Intent getIntent();
+    method public int getItemId();
+    method public android.view.ContextMenu.ContextMenuInfo getMenuInfo();
+    method public default int getNumericModifiers();
+    method public char getNumericShortcut();
+    method public int getOrder();
+    method public android.view.SubMenu getSubMenu();
+    method public CharSequence getTitle();
+    method public CharSequence getTitleCondensed();
+    method public default CharSequence getTooltipText();
+    method public boolean hasSubMenu();
+    method public boolean isActionViewExpanded();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isEnabled();
+    method public boolean isVisible();
+    method public android.view.MenuItem setActionProvider(android.view.ActionProvider);
+    method public android.view.MenuItem setActionView(android.view.View);
+    method public android.view.MenuItem setActionView(@LayoutRes int);
+    method public android.view.MenuItem setAlphabeticShortcut(char);
+    method public default android.view.MenuItem setAlphabeticShortcut(char, int);
+    method public android.view.MenuItem setCheckable(boolean);
+    method public android.view.MenuItem setChecked(boolean);
+    method public default android.view.MenuItem setContentDescription(CharSequence);
+    method public android.view.MenuItem setEnabled(boolean);
+    method public android.view.MenuItem setIcon(android.graphics.drawable.Drawable);
+    method public android.view.MenuItem setIcon(@DrawableRes int);
+    method @NonNull public default android.view.MenuItem setIconTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public default android.view.MenuItem setIconTintList(@Nullable android.content.res.ColorStateList);
+    method @NonNull public default android.view.MenuItem setIconTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public android.view.MenuItem setIntent(android.content.Intent);
+    method public android.view.MenuItem setNumericShortcut(char);
+    method public default android.view.MenuItem setNumericShortcut(char, int);
+    method public android.view.MenuItem setOnActionExpandListener(android.view.MenuItem.OnActionExpandListener);
+    method public android.view.MenuItem setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener);
+    method public android.view.MenuItem setShortcut(char, char);
+    method public default android.view.MenuItem setShortcut(char, char, int, int);
+    method public void setShowAsAction(int);
+    method public android.view.MenuItem setShowAsActionFlags(int);
+    method public android.view.MenuItem setTitle(CharSequence);
+    method public android.view.MenuItem setTitle(@StringRes int);
+    method public android.view.MenuItem setTitleCondensed(CharSequence);
+    method public default android.view.MenuItem setTooltipText(CharSequence);
+    method public android.view.MenuItem setVisible(boolean);
+    field public static final int SHOW_AS_ACTION_ALWAYS = 2; // 0x2
+    field public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8; // 0x8
+    field public static final int SHOW_AS_ACTION_IF_ROOM = 1; // 0x1
+    field public static final int SHOW_AS_ACTION_NEVER = 0; // 0x0
+    field public static final int SHOW_AS_ACTION_WITH_TEXT = 4; // 0x4
+  }
+
+  public static interface MenuItem.OnActionExpandListener {
+    method public boolean onMenuItemActionCollapse(android.view.MenuItem);
+    method public boolean onMenuItemActionExpand(android.view.MenuItem);
+  }
+
+  public static interface MenuItem.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public final class MotionEvent extends android.view.InputEvent implements android.os.Parcelable {
+    method public static String actionToString(int);
+    method public void addBatch(long, float, float, float, float, int);
+    method public void addBatch(long, android.view.MotionEvent.PointerCoords[], int);
+    method public static int axisFromString(String);
+    method public static String axisToString(int);
+    method public int findPointerIndex(int);
+    method public int getAction();
+    method public int getActionButton();
+    method public int getActionIndex();
+    method public int getActionMasked();
+    method public float getAxisValue(int);
+    method public float getAxisValue(int, int);
+    method public int getButtonState();
+    method public int getClassification();
+    method public int getDeviceId();
+    method public long getDownTime();
+    method public int getEdgeFlags();
+    method public long getEventTime();
+    method public int getFlags();
+    method public float getHistoricalAxisValue(int, int);
+    method public float getHistoricalAxisValue(int, int, int);
+    method public long getHistoricalEventTime(int);
+    method public float getHistoricalOrientation(int);
+    method public float getHistoricalOrientation(int, int);
+    method public void getHistoricalPointerCoords(int, int, android.view.MotionEvent.PointerCoords);
+    method public float getHistoricalPressure(int);
+    method public float getHistoricalPressure(int, int);
+    method public float getHistoricalSize(int);
+    method public float getHistoricalSize(int, int);
+    method public float getHistoricalToolMajor(int);
+    method public float getHistoricalToolMajor(int, int);
+    method public float getHistoricalToolMinor(int);
+    method public float getHistoricalToolMinor(int, int);
+    method public float getHistoricalTouchMajor(int);
+    method public float getHistoricalTouchMajor(int, int);
+    method public float getHistoricalTouchMinor(int);
+    method public float getHistoricalTouchMinor(int, int);
+    method public float getHistoricalX(int);
+    method public float getHistoricalX(int, int);
+    method public float getHistoricalY(int);
+    method public float getHistoricalY(int, int);
+    method public int getHistorySize();
+    method public int getMetaState();
+    method public float getOrientation();
+    method public float getOrientation(int);
+    method public void getPointerCoords(int, android.view.MotionEvent.PointerCoords);
+    method public int getPointerCount();
+    method public int getPointerId(int);
+    method public void getPointerProperties(int, android.view.MotionEvent.PointerProperties);
+    method public float getPressure();
+    method public float getPressure(int);
+    method public float getRawX();
+    method public float getRawX(int);
+    method public float getRawY();
+    method public float getRawY(int);
+    method public float getSize();
+    method public float getSize(int);
+    method public int getSource();
+    method public float getToolMajor();
+    method public float getToolMajor(int);
+    method public float getToolMinor();
+    method public float getToolMinor(int);
+    method public int getToolType(int);
+    method public float getTouchMajor();
+    method public float getTouchMajor(int);
+    method public float getTouchMinor();
+    method public float getTouchMinor(int);
+    method public float getX();
+    method public float getX(int);
+    method public float getXPrecision();
+    method public float getY();
+    method public float getY(int);
+    method public float getYPrecision();
+    method public boolean isButtonPressed(int);
+    method public static android.view.MotionEvent obtain(long, long, int, int, android.view.MotionEvent.PointerProperties[], android.view.MotionEvent.PointerCoords[], int, int, float, float, int, int, int, int);
+    method @Deprecated public static android.view.MotionEvent obtain(long, long, int, int, int[], android.view.MotionEvent.PointerCoords[], int, float, float, int, int, int, int);
+    method public static android.view.MotionEvent obtain(long, long, int, float, float, float, float, int, float, float, int, int);
+    method @Deprecated public static android.view.MotionEvent obtain(long, long, int, int, float, float, float, float, int, float, float, int, int);
+    method public static android.view.MotionEvent obtain(long, long, int, float, float, int);
+    method public static android.view.MotionEvent obtain(android.view.MotionEvent);
+    method public static android.view.MotionEvent obtainNoHistory(android.view.MotionEvent);
+    method public void offsetLocation(float, float);
+    method public void recycle();
+    method public void setAction(int);
+    method public void setEdgeFlags(int);
+    method public void setLocation(float, float);
+    method public void setSource(int);
+    method public void transform(android.graphics.Matrix);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_BUTTON_PRESS = 11; // 0xb
+    field public static final int ACTION_BUTTON_RELEASE = 12; // 0xc
+    field public static final int ACTION_CANCEL = 3; // 0x3
+    field public static final int ACTION_DOWN = 0; // 0x0
+    field public static final int ACTION_HOVER_ENTER = 9; // 0x9
+    field public static final int ACTION_HOVER_EXIT = 10; // 0xa
+    field public static final int ACTION_HOVER_MOVE = 7; // 0x7
+    field public static final int ACTION_MASK = 255; // 0xff
+    field public static final int ACTION_MOVE = 2; // 0x2
+    field public static final int ACTION_OUTSIDE = 4; // 0x4
+    field @Deprecated public static final int ACTION_POINTER_1_DOWN = 5; // 0x5
+    field @Deprecated public static final int ACTION_POINTER_1_UP = 6; // 0x6
+    field @Deprecated public static final int ACTION_POINTER_2_DOWN = 261; // 0x105
+    field @Deprecated public static final int ACTION_POINTER_2_UP = 262; // 0x106
+    field @Deprecated public static final int ACTION_POINTER_3_DOWN = 517; // 0x205
+    field @Deprecated public static final int ACTION_POINTER_3_UP = 518; // 0x206
+    field public static final int ACTION_POINTER_DOWN = 5; // 0x5
+    field @Deprecated public static final int ACTION_POINTER_ID_MASK = 65280; // 0xff00
+    field @Deprecated public static final int ACTION_POINTER_ID_SHIFT = 8; // 0x8
+    field public static final int ACTION_POINTER_INDEX_MASK = 65280; // 0xff00
+    field public static final int ACTION_POINTER_INDEX_SHIFT = 8; // 0x8
+    field public static final int ACTION_POINTER_UP = 6; // 0x6
+    field public static final int ACTION_SCROLL = 8; // 0x8
+    field public static final int ACTION_UP = 1; // 0x1
+    field public static final int AXIS_BRAKE = 23; // 0x17
+    field public static final int AXIS_DISTANCE = 24; // 0x18
+    field public static final int AXIS_GAS = 22; // 0x16
+    field public static final int AXIS_GENERIC_1 = 32; // 0x20
+    field public static final int AXIS_GENERIC_10 = 41; // 0x29
+    field public static final int AXIS_GENERIC_11 = 42; // 0x2a
+    field public static final int AXIS_GENERIC_12 = 43; // 0x2b
+    field public static final int AXIS_GENERIC_13 = 44; // 0x2c
+    field public static final int AXIS_GENERIC_14 = 45; // 0x2d
+    field public static final int AXIS_GENERIC_15 = 46; // 0x2e
+    field public static final int AXIS_GENERIC_16 = 47; // 0x2f
+    field public static final int AXIS_GENERIC_2 = 33; // 0x21
+    field public static final int AXIS_GENERIC_3 = 34; // 0x22
+    field public static final int AXIS_GENERIC_4 = 35; // 0x23
+    field public static final int AXIS_GENERIC_5 = 36; // 0x24
+    field public static final int AXIS_GENERIC_6 = 37; // 0x25
+    field public static final int AXIS_GENERIC_7 = 38; // 0x26
+    field public static final int AXIS_GENERIC_8 = 39; // 0x27
+    field public static final int AXIS_GENERIC_9 = 40; // 0x28
+    field public static final int AXIS_HAT_X = 15; // 0xf
+    field public static final int AXIS_HAT_Y = 16; // 0x10
+    field public static final int AXIS_HSCROLL = 10; // 0xa
+    field public static final int AXIS_LTRIGGER = 17; // 0x11
+    field public static final int AXIS_ORIENTATION = 8; // 0x8
+    field public static final int AXIS_PRESSURE = 2; // 0x2
+    field public static final int AXIS_RELATIVE_X = 27; // 0x1b
+    field public static final int AXIS_RELATIVE_Y = 28; // 0x1c
+    field public static final int AXIS_RTRIGGER = 18; // 0x12
+    field public static final int AXIS_RUDDER = 20; // 0x14
+    field public static final int AXIS_RX = 12; // 0xc
+    field public static final int AXIS_RY = 13; // 0xd
+    field public static final int AXIS_RZ = 14; // 0xe
+    field public static final int AXIS_SCROLL = 26; // 0x1a
+    field public static final int AXIS_SIZE = 3; // 0x3
+    field public static final int AXIS_THROTTLE = 19; // 0x13
+    field public static final int AXIS_TILT = 25; // 0x19
+    field public static final int AXIS_TOOL_MAJOR = 6; // 0x6
+    field public static final int AXIS_TOOL_MINOR = 7; // 0x7
+    field public static final int AXIS_TOUCH_MAJOR = 4; // 0x4
+    field public static final int AXIS_TOUCH_MINOR = 5; // 0x5
+    field public static final int AXIS_VSCROLL = 9; // 0x9
+    field public static final int AXIS_WHEEL = 21; // 0x15
+    field public static final int AXIS_X = 0; // 0x0
+    field public static final int AXIS_Y = 1; // 0x1
+    field public static final int AXIS_Z = 11; // 0xb
+    field public static final int BUTTON_BACK = 8; // 0x8
+    field public static final int BUTTON_FORWARD = 16; // 0x10
+    field public static final int BUTTON_PRIMARY = 1; // 0x1
+    field public static final int BUTTON_SECONDARY = 2; // 0x2
+    field public static final int BUTTON_STYLUS_PRIMARY = 32; // 0x20
+    field public static final int BUTTON_STYLUS_SECONDARY = 64; // 0x40
+    field public static final int BUTTON_TERTIARY = 4; // 0x4
+    field public static final int CLASSIFICATION_AMBIGUOUS_GESTURE = 1; // 0x1
+    field public static final int CLASSIFICATION_DEEP_PRESS = 2; // 0x2
+    field public static final int CLASSIFICATION_NONE = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.MotionEvent> CREATOR;
+    field public static final int EDGE_BOTTOM = 2; // 0x2
+    field public static final int EDGE_LEFT = 4; // 0x4
+    field public static final int EDGE_RIGHT = 8; // 0x8
+    field public static final int EDGE_TOP = 1; // 0x1
+    field public static final int FLAG_WINDOW_IS_OBSCURED = 1; // 0x1
+    field public static final int FLAG_WINDOW_IS_PARTIALLY_OBSCURED = 2; // 0x2
+    field public static final int INVALID_POINTER_ID = -1; // 0xffffffff
+    field public static final int TOOL_TYPE_ERASER = 4; // 0x4
+    field public static final int TOOL_TYPE_FINGER = 1; // 0x1
+    field public static final int TOOL_TYPE_MOUSE = 3; // 0x3
+    field public static final int TOOL_TYPE_STYLUS = 2; // 0x2
+    field public static final int TOOL_TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  public static final class MotionEvent.PointerCoords {
+    ctor public MotionEvent.PointerCoords();
+    ctor public MotionEvent.PointerCoords(android.view.MotionEvent.PointerCoords);
+    method public void clear();
+    method public void copyFrom(android.view.MotionEvent.PointerCoords);
+    method public float getAxisValue(int);
+    method public void setAxisValue(int, float);
+    field public float orientation;
+    field public float pressure;
+    field public float size;
+    field public float toolMajor;
+    field public float toolMinor;
+    field public float touchMajor;
+    field public float touchMinor;
+    field public float x;
+    field public float y;
+  }
+
+  public static final class MotionEvent.PointerProperties {
+    ctor public MotionEvent.PointerProperties();
+    ctor public MotionEvent.PointerProperties(android.view.MotionEvent.PointerProperties);
+    method public void clear();
+    method public void copyFrom(android.view.MotionEvent.PointerProperties);
+    field public int id;
+    field public int toolType;
+  }
+
+  public interface OnReceiveContentListener {
+    method @Nullable public android.view.ContentInfo onReceiveContent(@NonNull android.view.View, @NonNull android.view.ContentInfo);
+  }
+
+  public abstract class OrientationEventListener {
+    ctor public OrientationEventListener(android.content.Context);
+    ctor public OrientationEventListener(android.content.Context, int);
+    method public boolean canDetectOrientation();
+    method public void disable();
+    method public void enable();
+    method public abstract void onOrientationChanged(int);
+    field public static final int ORIENTATION_UNKNOWN = -1; // 0xffffffff
+  }
+
+  @Deprecated public abstract class OrientationListener implements android.hardware.SensorListener {
+    ctor @Deprecated public OrientationListener(android.content.Context);
+    ctor @Deprecated public OrientationListener(android.content.Context, int);
+    method @Deprecated public void disable();
+    method @Deprecated public void enable();
+    method @Deprecated public void onAccuracyChanged(int, int);
+    method @Deprecated public abstract void onOrientationChanged(int);
+    method @Deprecated public void onSensorChanged(int, float[]);
+    field @Deprecated public static final int ORIENTATION_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class PixelCopy {
+    method public static void request(@NonNull android.view.SurfaceView, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.SurfaceView, @Nullable android.graphics.Rect, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Surface, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Surface, @Nullable android.graphics.Rect, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Window, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    method public static void request(@NonNull android.view.Window, @Nullable android.graphics.Rect, @NonNull android.graphics.Bitmap, @NonNull android.view.PixelCopy.OnPixelCopyFinishedListener, @NonNull android.os.Handler);
+    field public static final int ERROR_DESTINATION_INVALID = 5; // 0x5
+    field public static final int ERROR_SOURCE_INVALID = 4; // 0x4
+    field public static final int ERROR_SOURCE_NO_DATA = 3; // 0x3
+    field public static final int ERROR_TIMEOUT = 2; // 0x2
+    field public static final int ERROR_UNKNOWN = 1; // 0x1
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static interface PixelCopy.OnPixelCopyFinishedListener {
+    method public void onPixelCopyFinished(int);
+  }
+
+  public final class PointerIcon implements android.os.Parcelable {
+    method public static android.view.PointerIcon create(@NonNull android.graphics.Bitmap, float, float);
+    method public int describeContents();
+    method public static android.view.PointerIcon getSystemIcon(@NonNull android.content.Context, int);
+    method public static android.view.PointerIcon load(@NonNull android.content.res.Resources, @XmlRes int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.PointerIcon> CREATOR;
+    field public static final int TYPE_ALIAS = 1010; // 0x3f2
+    field public static final int TYPE_ALL_SCROLL = 1013; // 0x3f5
+    field public static final int TYPE_ARROW = 1000; // 0x3e8
+    field public static final int TYPE_CELL = 1006; // 0x3ee
+    field public static final int TYPE_CONTEXT_MENU = 1001; // 0x3e9
+    field public static final int TYPE_COPY = 1011; // 0x3f3
+    field public static final int TYPE_CROSSHAIR = 1007; // 0x3ef
+    field public static final int TYPE_DEFAULT = 1000; // 0x3e8
+    field public static final int TYPE_GRAB = 1020; // 0x3fc
+    field public static final int TYPE_GRABBING = 1021; // 0x3fd
+    field public static final int TYPE_HAND = 1002; // 0x3ea
+    field public static final int TYPE_HELP = 1003; // 0x3eb
+    field public static final int TYPE_HORIZONTAL_DOUBLE_ARROW = 1014; // 0x3f6
+    field public static final int TYPE_NO_DROP = 1012; // 0x3f4
+    field public static final int TYPE_NULL = 0; // 0x0
+    field public static final int TYPE_TEXT = 1008; // 0x3f0
+    field public static final int TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW = 1017; // 0x3f9
+    field public static final int TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW = 1016; // 0x3f8
+    field public static final int TYPE_VERTICAL_DOUBLE_ARROW = 1015; // 0x3f7
+    field public static final int TYPE_VERTICAL_TEXT = 1009; // 0x3f1
+    field public static final int TYPE_WAIT = 1004; // 0x3ec
+    field public static final int TYPE_ZOOM_IN = 1018; // 0x3fa
+    field public static final int TYPE_ZOOM_OUT = 1019; // 0x3fb
+  }
+
+  public final class RoundedCorner implements android.os.Parcelable {
+    ctor public RoundedCorner(int, int, int, int);
+    method public int describeContents();
+    method @NonNull public android.graphics.Point getCenter();
+    method public int getPosition();
+    method public int getRadius();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.RoundedCorner> CREATOR;
+    field public static final int POSITION_BOTTOM_LEFT = 3; // 0x3
+    field public static final int POSITION_BOTTOM_RIGHT = 2; // 0x2
+    field public static final int POSITION_TOP_LEFT = 0; // 0x0
+    field public static final int POSITION_TOP_RIGHT = 1; // 0x1
+  }
+
+  public class ScaleGestureDetector {
+    ctor public ScaleGestureDetector(android.content.Context, android.view.ScaleGestureDetector.OnScaleGestureListener);
+    ctor public ScaleGestureDetector(android.content.Context, android.view.ScaleGestureDetector.OnScaleGestureListener, android.os.Handler);
+    method public float getCurrentSpan();
+    method public float getCurrentSpanX();
+    method public float getCurrentSpanY();
+    method public long getEventTime();
+    method public float getFocusX();
+    method public float getFocusY();
+    method public float getPreviousSpan();
+    method public float getPreviousSpanX();
+    method public float getPreviousSpanY();
+    method public float getScaleFactor();
+    method public long getTimeDelta();
+    method public boolean isInProgress();
+    method public boolean isQuickScaleEnabled();
+    method public boolean isStylusScaleEnabled();
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public void setQuickScaleEnabled(boolean);
+    method public void setStylusScaleEnabled(boolean);
+  }
+
+  public static interface ScaleGestureDetector.OnScaleGestureListener {
+    method public boolean onScale(android.view.ScaleGestureDetector);
+    method public boolean onScaleBegin(android.view.ScaleGestureDetector);
+    method public void onScaleEnd(android.view.ScaleGestureDetector);
+  }
+
+  public static class ScaleGestureDetector.SimpleOnScaleGestureListener implements android.view.ScaleGestureDetector.OnScaleGestureListener {
+    ctor public ScaleGestureDetector.SimpleOnScaleGestureListener();
+    method public boolean onScale(android.view.ScaleGestureDetector);
+    method public boolean onScaleBegin(android.view.ScaleGestureDetector);
+    method public void onScaleEnd(android.view.ScaleGestureDetector);
+  }
+
+  @UiThread public interface ScrollCaptureCallback {
+    method public void onScrollCaptureEnd(@NonNull Runnable);
+    method public void onScrollCaptureImageRequest(@NonNull android.view.ScrollCaptureSession, @NonNull android.os.CancellationSignal, @NonNull android.graphics.Rect, @NonNull java.util.function.Consumer<android.graphics.Rect>);
+    method public void onScrollCaptureSearch(@NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<android.graphics.Rect>);
+    method public void onScrollCaptureStart(@NonNull android.view.ScrollCaptureSession, @NonNull android.os.CancellationSignal, @NonNull Runnable);
+  }
+
+  public class ScrollCaptureSession {
+    ctor public ScrollCaptureSession(@NonNull android.view.Surface, @NonNull android.graphics.Rect, @NonNull android.graphics.Point);
+    method @NonNull public android.graphics.Point getPositionInWindow();
+    method @NonNull public android.graphics.Rect getScrollBounds();
+    method @NonNull public android.view.Surface getSurface();
+  }
+
+  public final class ScrollCaptureTarget {
+    ctor public ScrollCaptureTarget(@NonNull android.view.View, @NonNull android.graphics.Rect, @NonNull android.graphics.Point, @NonNull android.view.ScrollCaptureCallback);
+    method @NonNull public android.view.ScrollCaptureCallback getCallback();
+    method @NonNull public android.view.View getContainingView();
+    method public int getHint();
+    method @NonNull public android.graphics.Rect getLocalVisibleRect();
+    method @NonNull public android.graphics.Point getPositionInWindow();
+    method @Nullable public android.graphics.Rect getScrollBounds();
+    method public void setScrollBounds(@Nullable android.graphics.Rect);
+    method @UiThread public void updatePositionInWindow();
+  }
+
+  public class SearchEvent {
+    ctor public SearchEvent(android.view.InputDevice);
+    method public android.view.InputDevice getInputDevice();
+  }
+
+  public class SoundEffectConstants {
+    method public static int getConstantForFocusDirection(int, boolean);
+    method public static int getContantForFocusDirection(int);
+    field public static final int CLICK = 0; // 0x0
+    field public static final int NAVIGATION_DOWN = 4; // 0x4
+    field public static final int NAVIGATION_LEFT = 1; // 0x1
+    field public static final int NAVIGATION_REPEAT_DOWN = 8; // 0x8
+    field public static final int NAVIGATION_REPEAT_LEFT = 5; // 0x5
+    field public static final int NAVIGATION_REPEAT_RIGHT = 7; // 0x7
+    field public static final int NAVIGATION_REPEAT_UP = 6; // 0x6
+    field public static final int NAVIGATION_RIGHT = 3; // 0x3
+    field public static final int NAVIGATION_UP = 2; // 0x2
+  }
+
+  public interface SubMenu extends android.view.Menu {
+    method public void clearHeader();
+    method public android.view.MenuItem getItem();
+    method public android.view.SubMenu setHeaderIcon(@DrawableRes int);
+    method public android.view.SubMenu setHeaderIcon(android.graphics.drawable.Drawable);
+    method public android.view.SubMenu setHeaderTitle(@StringRes int);
+    method public android.view.SubMenu setHeaderTitle(CharSequence);
+    method public android.view.SubMenu setHeaderView(android.view.View);
+    method public android.view.SubMenu setIcon(@DrawableRes int);
+    method public android.view.SubMenu setIcon(android.graphics.drawable.Drawable);
+  }
+
+  public class Surface implements android.os.Parcelable {
+    ctor public Surface(@NonNull android.view.SurfaceControl);
+    ctor public Surface(android.graphics.SurfaceTexture);
+    method public int describeContents();
+    method public boolean isValid();
+    method public android.graphics.Canvas lockCanvas(android.graphics.Rect) throws java.lang.IllegalArgumentException, android.view.Surface.OutOfResourcesException;
+    method public android.graphics.Canvas lockHardwareCanvas();
+    method public void readFromParcel(android.os.Parcel);
+    method public void release();
+    method public void setFrameRate(@FloatRange(from=0.0) float, int, int);
+    method public void setFrameRate(@FloatRange(from=0.0) float, int);
+    method @Deprecated public void unlockCanvas(android.graphics.Canvas);
+    method public void unlockCanvasAndPost(android.graphics.Canvas);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CHANGE_FRAME_RATE_ALWAYS = 1; // 0x1
+    field public static final int CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.Surface> CREATOR;
+    field public static final int FRAME_RATE_COMPATIBILITY_DEFAULT = 0; // 0x0
+    field public static final int FRAME_RATE_COMPATIBILITY_FIXED_SOURCE = 1; // 0x1
+    field public static final int ROTATION_0 = 0; // 0x0
+    field public static final int ROTATION_180 = 2; // 0x2
+    field public static final int ROTATION_270 = 3; // 0x3
+    field public static final int ROTATION_90 = 1; // 0x1
+  }
+
+  public static class Surface.OutOfResourcesException extends java.lang.RuntimeException {
+    ctor public Surface.OutOfResourcesException();
+    ctor public Surface.OutOfResourcesException(String);
+  }
+
+  public final class SurfaceControl implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isValid();
+    method public void readFromParcel(android.os.Parcel);
+    method public void release();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BUFFER_TRANSFORM_IDENTITY = 0; // 0x0
+    field public static final int BUFFER_TRANSFORM_MIRROR_HORIZONTAL = 1; // 0x1
+    field public static final int BUFFER_TRANSFORM_MIRROR_VERTICAL = 2; // 0x2
+    field public static final int BUFFER_TRANSFORM_ROTATE_180 = 3; // 0x3
+    field public static final int BUFFER_TRANSFORM_ROTATE_270 = 7; // 0x7
+    field public static final int BUFFER_TRANSFORM_ROTATE_90 = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControl> CREATOR;
+  }
+
+  public static class SurfaceControl.Builder {
+    ctor public SurfaceControl.Builder();
+    method @NonNull public android.view.SurfaceControl build();
+    method @NonNull public android.view.SurfaceControl.Builder setBufferSize(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.SurfaceControl.Builder setFormat(int);
+    method @NonNull public android.view.SurfaceControl.Builder setName(@NonNull String);
+    method @NonNull public android.view.SurfaceControl.Builder setOpaque(boolean);
+    method @NonNull public android.view.SurfaceControl.Builder setParent(@Nullable android.view.SurfaceControl);
+  }
+
+  public static class SurfaceControl.Transaction implements java.io.Closeable android.os.Parcelable {
+    ctor public SurfaceControl.Transaction();
+    method public void apply();
+    method public void close();
+    method public int describeContents();
+    method @NonNull public android.view.SurfaceControl.Transaction merge(@NonNull android.view.SurfaceControl.Transaction);
+    method @NonNull public android.view.SurfaceControl.Transaction reparent(@NonNull android.view.SurfaceControl, @Nullable android.view.SurfaceControl);
+    method @NonNull public android.view.SurfaceControl.Transaction setAlpha(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.SurfaceControl.Transaction setBufferSize(@NonNull android.view.SurfaceControl, @IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float, int);
+    method @NonNull public android.view.SurfaceControl.Transaction setFrameRate(@NonNull android.view.SurfaceControl, @FloatRange(from=0.0) float, int, int);
+    method @NonNull public android.view.SurfaceControl.Transaction setGeometry(@NonNull android.view.SurfaceControl, @Nullable android.graphics.Rect, @Nullable android.graphics.Rect, int);
+    method @NonNull public android.view.SurfaceControl.Transaction setLayer(@NonNull android.view.SurfaceControl, @IntRange(from=java.lang.Integer.MIN_VALUE, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public android.view.SurfaceControl.Transaction setVisibility(@NonNull android.view.SurfaceControl, boolean);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControl.Transaction> CREATOR;
+  }
+
+  public class SurfaceControlViewHost {
+    ctor public SurfaceControlViewHost(@NonNull android.content.Context, @NonNull android.view.Display, @Nullable android.os.IBinder);
+    method @Nullable public android.view.SurfaceControlViewHost.SurfacePackage getSurfacePackage();
+    method @Nullable public android.view.View getView();
+    method public void relayout(int, int);
+    method public void release();
+    method public void setView(@NonNull android.view.View, int, int);
+  }
+
+  public static final class SurfaceControlViewHost.SurfacePackage implements android.os.Parcelable {
+    ctor public SurfaceControlViewHost.SurfacePackage(@NonNull android.view.SurfaceControlViewHost.SurfacePackage);
+    method public int describeContents();
+    method public void release();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControlViewHost.SurfacePackage> CREATOR;
+  }
+
+  public interface SurfaceHolder {
+    method public void addCallback(android.view.SurfaceHolder.Callback);
+    method public android.view.Surface getSurface();
+    method public android.graphics.Rect getSurfaceFrame();
+    method public boolean isCreating();
+    method public android.graphics.Canvas lockCanvas();
+    method public android.graphics.Canvas lockCanvas(android.graphics.Rect);
+    method public default android.graphics.Canvas lockHardwareCanvas();
+    method public void removeCallback(android.view.SurfaceHolder.Callback);
+    method public void setFixedSize(int, int);
+    method public void setFormat(int);
+    method public void setKeepScreenOn(boolean);
+    method public void setSizeFromLayout();
+    method @Deprecated public void setType(int);
+    method public void unlockCanvasAndPost(android.graphics.Canvas);
+    field @Deprecated public static final int SURFACE_TYPE_GPU = 2; // 0x2
+    field @Deprecated public static final int SURFACE_TYPE_HARDWARE = 1; // 0x1
+    field @Deprecated public static final int SURFACE_TYPE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int SURFACE_TYPE_PUSH_BUFFERS = 3; // 0x3
+  }
+
+  public static class SurfaceHolder.BadSurfaceTypeException extends java.lang.RuntimeException {
+    ctor public SurfaceHolder.BadSurfaceTypeException();
+    ctor public SurfaceHolder.BadSurfaceTypeException(String);
+  }
+
+  public static interface SurfaceHolder.Callback {
+    method public void surfaceChanged(@NonNull android.view.SurfaceHolder, int, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public void surfaceCreated(@NonNull android.view.SurfaceHolder);
+    method public void surfaceDestroyed(@NonNull android.view.SurfaceHolder);
+  }
+
+  public static interface SurfaceHolder.Callback2 extends android.view.SurfaceHolder.Callback {
+    method public void surfaceRedrawNeeded(@NonNull android.view.SurfaceHolder);
+    method public default void surfaceRedrawNeededAsync(@NonNull android.view.SurfaceHolder, @NonNull Runnable);
+  }
+
+  public class SurfaceView extends android.view.View {
+    ctor public SurfaceView(android.content.Context);
+    ctor public SurfaceView(android.content.Context, android.util.AttributeSet);
+    ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.view.SurfaceHolder getHolder();
+    method @Nullable public android.os.IBinder getHostToken();
+    method public android.view.SurfaceControl getSurfaceControl();
+    method public void setChildSurfacePackage(@NonNull android.view.SurfaceControlViewHost.SurfacePackage);
+    method public void setSecure(boolean);
+    method public void setZOrderMediaOverlay(boolean);
+    method public void setZOrderOnTop(boolean);
+  }
+
+  public class TextureView extends android.view.View {
+    ctor public TextureView(@NonNull android.content.Context);
+    ctor public TextureView(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public TextureView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public TextureView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public final void draw(android.graphics.Canvas);
+    method @Nullable public android.graphics.Bitmap getBitmap();
+    method @Nullable public android.graphics.Bitmap getBitmap(int, int);
+    method @NonNull public android.graphics.Bitmap getBitmap(@NonNull android.graphics.Bitmap);
+    method @Nullable public android.graphics.SurfaceTexture getSurfaceTexture();
+    method @Nullable public android.view.TextureView.SurfaceTextureListener getSurfaceTextureListener();
+    method @NonNull public android.graphics.Matrix getTransform(@Nullable android.graphics.Matrix);
+    method public boolean isAvailable();
+    method @Nullable public android.graphics.Canvas lockCanvas();
+    method @Nullable public android.graphics.Canvas lockCanvas(@Nullable android.graphics.Rect);
+    method protected final void onDraw(android.graphics.Canvas);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setOpaque(boolean);
+    method public void setSurfaceTexture(@NonNull android.graphics.SurfaceTexture);
+    method public void setSurfaceTextureListener(@Nullable android.view.TextureView.SurfaceTextureListener);
+    method public void setTransform(@Nullable android.graphics.Matrix);
+    method public void unlockCanvasAndPost(@NonNull android.graphics.Canvas);
+  }
+
+  public static interface TextureView.SurfaceTextureListener {
+    method public void onSurfaceTextureAvailable(@NonNull android.graphics.SurfaceTexture, int, int);
+    method public boolean onSurfaceTextureDestroyed(@NonNull android.graphics.SurfaceTexture);
+    method public void onSurfaceTextureSizeChanged(@NonNull android.graphics.SurfaceTexture, int, int);
+    method public void onSurfaceTextureUpdated(@NonNull android.graphics.SurfaceTexture);
+  }
+
+  public class TouchDelegate {
+    ctor public TouchDelegate(android.graphics.Rect, android.view.View);
+    method @NonNull public android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo getTouchDelegateInfo();
+    method public boolean onTouchEvent(@NonNull android.view.MotionEvent);
+    method public boolean onTouchExplorationHoverEvent(@NonNull android.view.MotionEvent);
+    field public static final int ABOVE = 1; // 0x1
+    field public static final int BELOW = 2; // 0x2
+    field public static final int TO_LEFT = 4; // 0x4
+    field public static final int TO_RIGHT = 8; // 0x8
+  }
+
+  public final class VelocityTracker {
+    method public void addMovement(android.view.MotionEvent);
+    method public void clear();
+    method public void computeCurrentVelocity(int);
+    method public void computeCurrentVelocity(int, float);
+    method public float getXVelocity();
+    method public float getXVelocity(int);
+    method public float getYVelocity();
+    method public float getYVelocity(int);
+    method public static android.view.VelocityTracker obtain();
+    method public void recycle();
+  }
+
+  public abstract class VerifiedInputEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDeviceId();
+    method public int getDisplayId();
+    method public long getEventTimeNanos();
+    method public int getSource();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedInputEvent> CREATOR;
+  }
+
+  public final class VerifiedKeyEvent extends android.view.VerifiedInputEvent implements android.os.Parcelable {
+    method public int getAction();
+    method public long getDownTimeNanos();
+    method @Nullable public Boolean getFlag(int);
+    method public int getKeyCode();
+    method public int getMetaState();
+    method public int getRepeatCount();
+    method public int getScanCode();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedKeyEvent> CREATOR;
+  }
+
+  public final class VerifiedMotionEvent extends android.view.VerifiedInputEvent implements android.os.Parcelable {
+    method public int getActionMasked();
+    method public int getButtonState();
+    method public long getDownTimeNanos();
+    method @Nullable public Boolean getFlag(int);
+    method public int getMetaState();
+    method public float getRawX();
+    method public float getRawY();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.VerifiedMotionEvent> CREATOR;
+  }
+
+  @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
+    ctor public View(android.content.Context);
+    ctor public View(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public View(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public View(android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public void addChildrenForAccessibility(java.util.ArrayList<android.view.View>);
+    method public void addExtraDataToAccessibilityNodeInfo(@NonNull android.view.accessibility.AccessibilityNodeInfo, @NonNull String, @Nullable android.os.Bundle);
+    method public void addFocusables(java.util.ArrayList<android.view.View>, int);
+    method public void addFocusables(java.util.ArrayList<android.view.View>, int, int);
+    method public void addKeyboardNavigationClusters(@NonNull java.util.Collection<android.view.View>, int);
+    method public void addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener);
+    method public void addOnLayoutChangeListener(android.view.View.OnLayoutChangeListener);
+    method public void addOnUnhandledKeyEventListener(android.view.View.OnUnhandledKeyEventListener);
+    method public void addTouchables(java.util.ArrayList<android.view.View>);
+    method public android.view.ViewPropertyAnimator animate();
+    method public void announceForAccessibility(CharSequence);
+    method public void autofill(android.view.autofill.AutofillValue);
+    method public void autofill(@NonNull android.util.SparseArray<android.view.autofill.AutofillValue>);
+    method protected boolean awakenScrollBars();
+    method protected boolean awakenScrollBars(int);
+    method protected boolean awakenScrollBars(int, boolean);
+    method public void bringToFront();
+    method @Deprecated public void buildDrawingCache();
+    method @Deprecated public void buildDrawingCache(boolean);
+    method public void buildLayer();
+    method public boolean callOnClick();
+    method public boolean canResolveLayoutDirection();
+    method public boolean canResolveTextAlignment();
+    method public boolean canResolveTextDirection();
+    method public boolean canScrollHorizontally(int);
+    method public boolean canScrollVertically(int);
+    method public final void cancelDragAndDrop();
+    method public void cancelLongPress();
+    method public final void cancelPendingInputEvents();
+    method public boolean checkInputConnectionProxy(android.view.View);
+    method public void clearAnimation();
+    method public void clearFocus();
+    method public void clearViewTranslationCallback();
+    method public static int combineMeasuredStates(int, int);
+    method protected int computeHorizontalScrollExtent();
+    method protected int computeHorizontalScrollOffset();
+    method protected int computeHorizontalScrollRange();
+    method public void computeScroll();
+    method public android.view.WindowInsets computeSystemWindowInsets(android.view.WindowInsets, android.graphics.Rect);
+    method protected int computeVerticalScrollExtent();
+    method protected int computeVerticalScrollOffset();
+    method protected int computeVerticalScrollRange();
+    method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
+    method public void createContextMenu(android.view.ContextMenu);
+    method @Deprecated public void destroyDrawingCache();
+    method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets);
+    method public boolean dispatchCapturedPointerEvent(android.view.MotionEvent);
+    method public void dispatchConfigurationChanged(android.content.res.Configuration);
+    method public void dispatchCreateViewTranslationRequest(@NonNull java.util.Map<android.view.autofill.AutofillId,long[]>, @NonNull int[], @NonNull android.view.translation.TranslationCapability, @NonNull java.util.List<android.view.translation.ViewTranslationRequest>);
+    method public void dispatchDisplayHint(int);
+    method public boolean dispatchDragEvent(android.view.DragEvent);
+    method protected void dispatchDraw(android.graphics.Canvas);
+    method public void dispatchDrawableHotspotChanged(float, float);
+    method @CallSuper public void dispatchFinishTemporaryDetach();
+    method protected boolean dispatchGenericFocusedEvent(android.view.MotionEvent);
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method protected boolean dispatchGenericPointerEvent(android.view.MotionEvent);
+    method protected boolean dispatchHoverEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyEventPreIme(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchNestedFling(float, float, boolean);
+    method public boolean dispatchNestedPreFling(float, float);
+    method public boolean dispatchNestedPrePerformAccessibilityAction(int, android.os.Bundle);
+    method public boolean dispatchNestedPreScroll(int, int, @Nullable @Size(2) int[], @Nullable @Size(2) int[]);
+    method public boolean dispatchNestedScroll(int, int, int, int, @Nullable @Size(2) int[]);
+    method public void dispatchPointerCaptureChanged(boolean);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void dispatchProvideAutofillStructure(@NonNull android.view.ViewStructure, int);
+    method public void dispatchProvideStructure(android.view.ViewStructure);
+    method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
+    method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
+    method public void dispatchScrollCaptureSearch(@NonNull android.graphics.Rect, @NonNull android.graphics.Point, @NonNull java.util.function.Consumer<android.view.ScrollCaptureTarget>);
+    method protected void dispatchSetActivated(boolean);
+    method protected void dispatchSetPressed(boolean);
+    method protected void dispatchSetSelected(boolean);
+    method @CallSuper public void dispatchStartTemporaryDetach();
+    method @Deprecated public void dispatchSystemUiVisibilityChanged(int);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public boolean dispatchUnhandledMove(android.view.View, int);
+    method protected void dispatchVisibilityChanged(@NonNull android.view.View, int);
+    method public void dispatchWindowFocusChanged(boolean);
+    method public void dispatchWindowInsetsAnimationEnd(@NonNull android.view.WindowInsetsAnimation);
+    method public void dispatchWindowInsetsAnimationPrepare(@NonNull android.view.WindowInsetsAnimation);
+    method @NonNull public android.view.WindowInsets dispatchWindowInsetsAnimationProgress(@NonNull android.view.WindowInsets, @NonNull java.util.List<android.view.WindowInsetsAnimation>);
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds dispatchWindowInsetsAnimationStart(@NonNull android.view.WindowInsetsAnimation, @NonNull android.view.WindowInsetsAnimation.Bounds);
+    method @Deprecated public void dispatchWindowSystemUiVisiblityChanged(int);
+    method public void dispatchWindowVisibilityChanged(int);
+    method @CallSuper public void draw(android.graphics.Canvas);
+    method @CallSuper public void drawableHotspotChanged(float, float);
+    method @CallSuper protected void drawableStateChanged();
+    method public android.view.View findFocus();
+    method public final <T extends android.view.View> T findViewById(@IdRes int);
+    method public final <T extends android.view.View> T findViewWithTag(Object);
+    method public void findViewsWithText(java.util.ArrayList<android.view.View>, CharSequence, int);
+    method @Deprecated protected boolean fitSystemWindows(android.graphics.Rect);
+    method public android.view.View focusSearch(int);
+    method public void forceHasOverlappingRendering(boolean);
+    method public void forceLayout();
+    method public boolean gatherTransparentRegion(@Nullable android.graphics.Region);
+    method public void generateDisplayHash(@NonNull String, @Nullable android.graphics.Rect, @NonNull java.util.concurrent.Executor, @NonNull android.view.displayhash.DisplayHashResultCallback);
+    method public static int generateViewId();
+    method public CharSequence getAccessibilityClassName();
+    method public android.view.View.AccessibilityDelegate getAccessibilityDelegate();
+    method public int getAccessibilityLiveRegion();
+    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider();
+    method @Nullable public CharSequence getAccessibilityPaneTitle();
+    method @IdRes public int getAccessibilityTraversalAfter();
+    method @IdRes public int getAccessibilityTraversalBefore();
+    method public float getAlpha();
+    method public android.view.animation.Animation getAnimation();
+    method @Nullable public android.graphics.Matrix getAnimationMatrix();
+    method public android.os.IBinder getApplicationWindowToken();
+    method @NonNull public int[] getAttributeResolutionStack(@AttrRes int);
+    method @NonNull public java.util.Map<java.lang.Integer,java.lang.Integer> getAttributeSourceResourceMap();
+    method @Nullable public String[] getAutofillHints();
+    method public final android.view.autofill.AutofillId getAutofillId();
+    method public int getAutofillType();
+    method @Nullable public android.view.autofill.AutofillValue getAutofillValue();
+    method public android.graphics.drawable.Drawable getBackground();
+    method @Nullable public android.graphics.BlendMode getBackgroundTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getBackgroundTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getBackgroundTintMode();
+    method public int getBaseline();
+    method public final int getBottom();
+    method protected float getBottomFadingEdgeStrength();
+    method protected int getBottomPaddingOffset();
+    method public float getCameraDistance();
+    method public android.graphics.Rect getClipBounds();
+    method public boolean getClipBounds(android.graphics.Rect);
+    method public final boolean getClipToOutline();
+    method @Nullable public final android.view.contentcapture.ContentCaptureSession getContentCaptureSession();
+    method public CharSequence getContentDescription();
+    method @UiContext public final android.content.Context getContext();
+    method protected android.view.ContextMenu.ContextMenuInfo getContextMenuInfo();
+    method public final boolean getDefaultFocusHighlightEnabled();
+    method public static int getDefaultSize(int, int);
+    method public android.view.Display getDisplay();
+    method public final int[] getDrawableState();
+    method @Deprecated public android.graphics.Bitmap getDrawingCache();
+    method @Deprecated public android.graphics.Bitmap getDrawingCache(boolean);
+    method @Deprecated @ColorInt public int getDrawingCacheBackgroundColor();
+    method @Deprecated public int getDrawingCacheQuality();
+    method public void getDrawingRect(android.graphics.Rect);
+    method public long getDrawingTime();
+    method public float getElevation();
+    method @StyleRes public int getExplicitStyle();
+    method public boolean getFilterTouchesWhenObscured();
+    method public boolean getFitsSystemWindows();
+    method public int getFocusable();
+    method public java.util.ArrayList<android.view.View> getFocusables(int);
+    method public void getFocusedRect(android.graphics.Rect);
+    method public android.graphics.drawable.Drawable getForeground();
+    method public int getForegroundGravity();
+    method @Nullable public android.graphics.BlendMode getForegroundTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getForegroundTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getForegroundTintMode();
+    method public boolean getGlobalVisibleRect(android.graphics.Rect, android.graphics.Point);
+    method public final boolean getGlobalVisibleRect(android.graphics.Rect);
+    method public android.os.Handler getHandler();
+    method public final boolean getHasOverlappingRendering();
+    method public final int getHeight();
+    method public void getHitRect(android.graphics.Rect);
+    method public int getHorizontalFadingEdgeLength();
+    method protected int getHorizontalScrollbarHeight();
+    method @Nullable public android.graphics.drawable.Drawable getHorizontalScrollbarThumbDrawable();
+    method @Nullable public android.graphics.drawable.Drawable getHorizontalScrollbarTrackDrawable();
+    method @IdRes public int getId();
+    method public int getImportantForAccessibility();
+    method public int getImportantForAutofill();
+    method public int getImportantForContentCapture();
+    method public boolean getKeepScreenOn();
+    method public android.view.KeyEvent.DispatcherState getKeyDispatcherState();
+    method @IdRes public int getLabelFor();
+    method public int getLayerType();
+    method public int getLayoutDirection();
+    method public android.view.ViewGroup.LayoutParams getLayoutParams();
+    method public final int getLeft();
+    method protected float getLeftFadingEdgeStrength();
+    method protected int getLeftPaddingOffset();
+    method public final boolean getLocalVisibleRect(android.graphics.Rect);
+    method public void getLocationInSurface(@NonNull @Size(2) int[]);
+    method public void getLocationInWindow(@Size(2) int[]);
+    method public void getLocationOnScreen(@Size(2) int[]);
+    method public android.graphics.Matrix getMatrix();
+    method public final int getMeasuredHeight();
+    method public final int getMeasuredHeightAndState();
+    method public final int getMeasuredState();
+    method public final int getMeasuredWidth();
+    method public final int getMeasuredWidthAndState();
+    method public int getMinimumHeight();
+    method public int getMinimumWidth();
+    method @IdRes public int getNextClusterForwardId();
+    method @IdRes public int getNextFocusDownId();
+    method @IdRes public int getNextFocusForwardId();
+    method @IdRes public int getNextFocusLeftId();
+    method @IdRes public int getNextFocusRightId();
+    method @IdRes public int getNextFocusUpId();
+    method public android.view.View.OnFocusChangeListener getOnFocusChangeListener();
+    method @ColorInt public int getOutlineAmbientShadowColor();
+    method public android.view.ViewOutlineProvider getOutlineProvider();
+    method @ColorInt public int getOutlineSpotShadowColor();
+    method public int getOverScrollMode();
+    method public android.view.ViewOverlay getOverlay();
+    method public int getPaddingBottom();
+    method public int getPaddingEnd();
+    method public int getPaddingLeft();
+    method public int getPaddingRight();
+    method public int getPaddingStart();
+    method public int getPaddingTop();
+    method public final android.view.ViewParent getParent();
+    method public android.view.ViewParent getParentForAccessibility();
+    method public float getPivotX();
+    method public float getPivotY();
+    method public android.view.PointerIcon getPointerIcon();
+    method @Nullable public String[] getReceiveContentMimeTypes();
+    method public android.content.res.Resources getResources();
+    method public final boolean getRevealOnFocusHint();
+    method public final int getRight();
+    method protected float getRightFadingEdgeStrength();
+    method protected int getRightPaddingOffset();
+    method @Nullable public android.view.AttachedSurfaceControl getRootSurfaceControl();
+    method public android.view.View getRootView();
+    method public android.view.WindowInsets getRootWindowInsets();
+    method public float getRotation();
+    method public float getRotationX();
+    method public float getRotationY();
+    method public float getScaleX();
+    method public float getScaleY();
+    method public int getScrollBarDefaultDelayBeforeFade();
+    method public int getScrollBarFadeDuration();
+    method public int getScrollBarSize();
+    method public int getScrollBarStyle();
+    method public int getScrollCaptureHint();
+    method public int getScrollIndicators();
+    method public final int getScrollX();
+    method public final int getScrollY();
+    method @ColorInt public int getSolidColor();
+    method @LayoutRes public int getSourceLayoutResId();
+    method @Nullable public final CharSequence getStateDescription();
+    method public android.animation.StateListAnimator getStateListAnimator();
+    method protected int getSuggestedMinimumHeight();
+    method protected int getSuggestedMinimumWidth();
+    method @NonNull public java.util.List<android.graphics.Rect> getSystemGestureExclusionRects();
+    method @Deprecated public int getSystemUiVisibility();
+    method public Object getTag();
+    method public Object getTag(int);
+    method public int getTextAlignment();
+    method public int getTextDirection();
+    method @Nullable public CharSequence getTooltipText();
+    method public final int getTop();
+    method protected float getTopFadingEdgeStrength();
+    method protected int getTopPaddingOffset();
+    method public android.view.TouchDelegate getTouchDelegate();
+    method public java.util.ArrayList<android.view.View> getTouchables();
+    method public float getTransitionAlpha();
+    method public String getTransitionName();
+    method public float getTranslationX();
+    method public float getTranslationY();
+    method public float getTranslationZ();
+    method public long getUniqueDrawingId();
+    method public int getVerticalFadingEdgeLength();
+    method public int getVerticalScrollbarPosition();
+    method @Nullable public android.graphics.drawable.Drawable getVerticalScrollbarThumbDrawable();
+    method @Nullable public android.graphics.drawable.Drawable getVerticalScrollbarTrackDrawable();
+    method public int getVerticalScrollbarWidth();
+    method @Nullable public android.view.translation.ViewTranslationResponse getViewTranslationResponse();
+    method public android.view.ViewTreeObserver getViewTreeObserver();
+    method public int getVisibility();
+    method public final int getWidth();
+    method protected int getWindowAttachCount();
+    method public android.view.WindowId getWindowId();
+    method @Nullable public android.view.WindowInsetsController getWindowInsetsController();
+    method @Deprecated public int getWindowSystemUiVisibility();
+    method public android.os.IBinder getWindowToken();
+    method public int getWindowVisibility();
+    method public void getWindowVisibleDisplayFrame(android.graphics.Rect);
+    method public float getX();
+    method public float getY();
+    method public float getZ();
+    method public boolean hasExplicitFocusable();
+    method public boolean hasFocus();
+    method public boolean hasFocusable();
+    method public boolean hasNestedScrollingParent();
+    method public boolean hasOnClickListeners();
+    method public boolean hasOnLongClickListeners();
+    method public boolean hasOverlappingRendering();
+    method public boolean hasPointerCapture();
+    method public boolean hasTransientState();
+    method public boolean hasWindowFocus();
+    method public static android.view.View inflate(android.content.Context, @LayoutRes int, android.view.ViewGroup);
+    method @Deprecated public void invalidate(android.graphics.Rect);
+    method @Deprecated public void invalidate(int, int, int, int);
+    method public void invalidate();
+    method public void invalidateDrawable(@NonNull android.graphics.drawable.Drawable);
+    method public void invalidateOutline();
+    method public boolean isAccessibilityFocused();
+    method public boolean isAccessibilityHeading();
+    method public boolean isActivated();
+    method public boolean isAttachedToWindow();
+    method public boolean isClickable();
+    method public boolean isContextClickable();
+    method public boolean isDirty();
+    method @Deprecated public boolean isDrawingCacheEnabled();
+    method public boolean isDuplicateParentStateEnabled();
+    method public boolean isEnabled();
+    method public final boolean isFocusable();
+    method public final boolean isFocusableInTouchMode();
+    method public boolean isFocused();
+    method public final boolean isFocusedByDefault();
+    method public boolean isForceDarkAllowed();
+    method public boolean isHapticFeedbackEnabled();
+    method public boolean isHardwareAccelerated();
+    method public boolean isHorizontalFadingEdgeEnabled();
+    method public boolean isHorizontalScrollBarEnabled();
+    method public boolean isHovered();
+    method public boolean isImportantForAccessibility();
+    method public final boolean isImportantForAutofill();
+    method public final boolean isImportantForContentCapture();
+    method public boolean isInEditMode();
+    method public boolean isInLayout();
+    method public boolean isInTouchMode();
+    method public final boolean isKeyboardNavigationCluster();
+    method public boolean isLaidOut();
+    method public boolean isLayoutDirectionResolved();
+    method public boolean isLayoutRequested();
+    method public boolean isLongClickable();
+    method public boolean isNestedScrollingEnabled();
+    method public boolean isOpaque();
+    method protected boolean isPaddingOffsetRequired();
+    method public boolean isPaddingRelative();
+    method public boolean isPivotSet();
+    method public boolean isPressed();
+    method public boolean isSaveEnabled();
+    method public boolean isSaveFromParentEnabled();
+    method public boolean isScreenReaderFocusable();
+    method public boolean isScrollContainer();
+    method public boolean isScrollbarFadingEnabled();
+    method public boolean isSelected();
+    method public final boolean isShowingLayoutBounds();
+    method public boolean isShown();
+    method public boolean isSoundEffectsEnabled();
+    method public final boolean isTemporarilyDetached();
+    method public boolean isTextAlignmentResolved();
+    method public boolean isTextDirectionResolved();
+    method public boolean isVerticalFadingEdgeEnabled();
+    method public boolean isVerticalScrollBarEnabled();
+    method public boolean isVisibleToUserForAutofill(int);
+    method @CallSuper public void jumpDrawablesToCurrentState();
+    method public android.view.View keyboardNavigationClusterSearch(android.view.View, int);
+    method public void layout(int, int, int, int);
+    method public final void measure(int, int);
+    method protected static int[] mergeDrawableStates(int[], int[]);
+    method public void offsetLeftAndRight(int);
+    method public void offsetTopAndBottom(int);
+    method @CallSuper protected void onAnimationEnd();
+    method @CallSuper protected void onAnimationStart();
+    method public android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets);
+    method @CallSuper protected void onAttachedToWindow();
+    method public void onCancelPendingInputEvents();
+    method public boolean onCapturedPointerEvent(android.view.MotionEvent);
+    method public boolean onCheckIsTextEditor();
+    method protected void onConfigurationChanged(android.content.res.Configuration);
+    method protected void onCreateContextMenu(android.view.ContextMenu);
+    method protected int[] onCreateDrawableState(int);
+    method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo);
+    method public void onCreateViewTranslationRequest(@NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
+    method public void onCreateVirtualViewTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
+    method @CallSuper protected void onDetachedFromWindow();
+    method protected void onDisplayHint(int);
+    method public boolean onDragEvent(android.view.DragEvent);
+    method protected void onDraw(android.graphics.Canvas);
+    method public void onDrawForeground(android.graphics.Canvas);
+    method protected final void onDrawScrollBars(android.graphics.Canvas);
+    method public boolean onFilterTouchEventForSecurity(android.view.MotionEvent);
+    method @CallSuper protected void onFinishInflate();
+    method public void onFinishTemporaryDetach();
+    method @CallSuper protected void onFocusChanged(boolean, int, @Nullable android.graphics.Rect);
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public void onHoverChanged(boolean);
+    method public boolean onHoverEvent(android.view.MotionEvent);
+    method @CallSuper public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method @CallSuper public void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyPreIme(int, android.view.KeyEvent);
+    method public boolean onKeyShortcut(int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method protected void onLayout(boolean, int, int, int, int);
+    method protected void onMeasure(int, int);
+    method protected void onOverScrolled(int, int, boolean, boolean);
+    method @CallSuper public void onPointerCaptureChange(boolean);
+    method @CallSuper public void onPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void onProvideAutofillStructure(android.view.ViewStructure, int);
+    method public void onProvideAutofillVirtualStructure(android.view.ViewStructure, int);
+    method public void onProvideContentCaptureStructure(@NonNull android.view.ViewStructure, int);
+    method public void onProvideStructure(android.view.ViewStructure);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
+    method @Nullable public android.view.ContentInfo onReceiveContent(@NonNull android.view.ContentInfo);
+    method public android.view.PointerIcon onResolvePointerIcon(android.view.MotionEvent, int);
+    method @CallSuper protected void onRestoreInstanceState(android.os.Parcelable);
+    method public void onRtlPropertiesChanged(int);
+    method @CallSuper @Nullable protected android.os.Parcelable onSaveInstanceState();
+    method public void onScreenStateChanged(int);
+    method public void onScrollCaptureSearch(@NonNull android.graphics.Rect, @NonNull android.graphics.Point, @NonNull java.util.function.Consumer<android.view.ScrollCaptureTarget>);
+    method protected void onScrollChanged(int, int, int, int);
+    method protected boolean onSetAlpha(int);
+    method protected void onSizeChanged(int, int, int, int);
+    method public void onStartTemporaryDetach();
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public void onViewTranslationResponse(@NonNull android.view.translation.ViewTranslationResponse);
+    method public void onVirtualViewTranslationResponses(@NonNull android.util.LongSparseArray<android.view.translation.ViewTranslationResponse>);
+    method @CallSuper public void onVisibilityAggregated(boolean);
+    method protected void onVisibilityChanged(@NonNull android.view.View, int);
+    method public void onWindowFocusChanged(boolean);
+    method @Deprecated public void onWindowSystemUiVisibilityChanged(int);
+    method protected void onWindowVisibilityChanged(int);
+    method protected boolean overScrollBy(int, int, int, int, int, int, int, int, boolean);
+    method public boolean performAccessibilityAction(int, android.os.Bundle);
+    method public boolean performClick();
+    method public boolean performContextClick(float, float);
+    method public boolean performContextClick();
+    method public boolean performHapticFeedback(int);
+    method public boolean performHapticFeedback(int, int);
+    method public boolean performLongClick();
+    method public boolean performLongClick(float, float);
+    method @Nullable public android.view.ContentInfo performReceiveContent(@NonNull android.view.ContentInfo);
+    method public void playSoundEffect(int);
+    method public boolean post(Runnable);
+    method public boolean postDelayed(Runnable, long);
+    method public void postInvalidate();
+    method public void postInvalidate(int, int, int, int);
+    method public void postInvalidateDelayed(long);
+    method public void postInvalidateDelayed(long, int, int, int, int);
+    method public void postInvalidateOnAnimation();
+    method public void postInvalidateOnAnimation(int, int, int, int);
+    method public void postOnAnimation(Runnable);
+    method public void postOnAnimationDelayed(Runnable, long);
+    method public void refreshDrawableState();
+    method public void releasePointerCapture();
+    method public boolean removeCallbacks(Runnable);
+    method public void removeOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener);
+    method public void removeOnLayoutChangeListener(android.view.View.OnLayoutChangeListener);
+    method public void removeOnUnhandledKeyEventListener(android.view.View.OnUnhandledKeyEventListener);
+    method public void requestApplyInsets();
+    method @Deprecated public void requestFitSystemWindows();
+    method public final boolean requestFocus();
+    method public final boolean requestFocus(int);
+    method public boolean requestFocus(int, android.graphics.Rect);
+    method public final boolean requestFocusFromTouch();
+    method @CallSuper public void requestLayout();
+    method public void requestPointerCapture();
+    method public boolean requestRectangleOnScreen(android.graphics.Rect);
+    method public boolean requestRectangleOnScreen(android.graphics.Rect, boolean);
+    method public final void requestUnbufferedDispatch(android.view.MotionEvent);
+    method public final void requestUnbufferedDispatch(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public void resetPivot();
+    method public static int resolveSize(int, int);
+    method public static int resolveSizeAndState(int, int, int);
+    method public boolean restoreDefaultFocus();
+    method public void restoreHierarchyState(android.util.SparseArray<android.os.Parcelable>);
+    method public final void saveAttributeDataForStyleable(@NonNull android.content.Context, @NonNull int[], @Nullable android.util.AttributeSet, @NonNull android.content.res.TypedArray, int, int);
+    method public void saveHierarchyState(android.util.SparseArray<android.os.Parcelable>);
+    method public void scheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable, long);
+    method public void scrollBy(int, int);
+    method public void scrollTo(int, int);
+    method public void sendAccessibilityEvent(int);
+    method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent);
+    method public void setAccessibilityDelegate(@Nullable android.view.View.AccessibilityDelegate);
+    method public void setAccessibilityHeading(boolean);
+    method public void setAccessibilityLiveRegion(int);
+    method public void setAccessibilityPaneTitle(@Nullable CharSequence);
+    method public void setAccessibilityTraversalAfter(@IdRes int);
+    method public void setAccessibilityTraversalBefore(@IdRes int);
+    method public void setActivated(boolean);
+    method public void setAllowClickWhenDisabled(boolean);
+    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
+    method public void setAnimation(android.view.animation.Animation);
+    method public void setAnimationMatrix(@Nullable android.graphics.Matrix);
+    method public void setAutofillHints(@Nullable java.lang.String...);
+    method public void setAutofillId(@Nullable android.view.autofill.AutofillId);
+    method public void setBackground(android.graphics.drawable.Drawable);
+    method public void setBackgroundColor(@ColorInt int);
+    method @Deprecated public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setBackgroundResource(@DrawableRes int);
+    method public void setBackgroundTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setBackgroundTintList(@Nullable android.content.res.ColorStateList);
+    method public void setBackgroundTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public final void setBottom(int);
+    method public void setCameraDistance(float);
+    method public void setClickable(boolean);
+    method public void setClipBounds(android.graphics.Rect);
+    method public void setClipToOutline(boolean);
+    method public void setContentCaptureSession(@Nullable android.view.contentcapture.ContentCaptureSession);
+    method public void setContentDescription(CharSequence);
+    method public void setContextClickable(boolean);
+    method public void setDefaultFocusHighlightEnabled(boolean);
+    method @Deprecated public void setDrawingCacheBackgroundColor(@ColorInt int);
+    method @Deprecated public void setDrawingCacheEnabled(boolean);
+    method @Deprecated public void setDrawingCacheQuality(int);
+    method public void setDuplicateParentStateEnabled(boolean);
+    method public void setElevation(float);
+    method public void setEnabled(boolean);
+    method public void setFadingEdgeLength(int);
+    method public void setFilterTouchesWhenObscured(boolean);
+    method public void setFitsSystemWindows(boolean);
+    method public void setFocusable(boolean);
+    method public void setFocusable(int);
+    method public void setFocusableInTouchMode(boolean);
+    method public void setFocusedByDefault(boolean);
+    method public void setForceDarkAllowed(boolean);
+    method public void setForeground(android.graphics.drawable.Drawable);
+    method public void setForegroundGravity(int);
+    method public void setForegroundTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setForegroundTintList(@Nullable android.content.res.ColorStateList);
+    method public void setForegroundTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setHapticFeedbackEnabled(boolean);
+    method public void setHasTransientState(boolean);
+    method public void setHorizontalFadingEdgeEnabled(boolean);
+    method public void setHorizontalScrollBarEnabled(boolean);
+    method public void setHorizontalScrollbarThumbDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setHorizontalScrollbarTrackDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setHovered(boolean);
+    method public void setId(@IdRes int);
+    method public void setImportantForAccessibility(int);
+    method public void setImportantForAutofill(int);
+    method public void setImportantForContentCapture(int);
+    method public void setKeepScreenOn(boolean);
+    method public void setKeyboardNavigationCluster(boolean);
+    method public void setLabelFor(@IdRes int);
+    method public void setLayerPaint(@Nullable android.graphics.Paint);
+    method public void setLayerType(int, @Nullable android.graphics.Paint);
+    method public void setLayoutDirection(int);
+    method public void setLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public final void setLeft(int);
+    method public final void setLeftTopRightBottom(int, int, int, int);
+    method public void setLongClickable(boolean);
+    method protected final void setMeasuredDimension(int, int);
+    method public void setMinimumHeight(int);
+    method public void setMinimumWidth(int);
+    method public void setNestedScrollingEnabled(boolean);
+    method public void setNextClusterForwardId(@IdRes int);
+    method public void setNextFocusDownId(@IdRes int);
+    method public void setNextFocusForwardId(@IdRes int);
+    method public void setNextFocusLeftId(@IdRes int);
+    method public void setNextFocusRightId(@IdRes int);
+    method public void setNextFocusUpId(@IdRes int);
+    method public void setOnApplyWindowInsetsListener(android.view.View.OnApplyWindowInsetsListener);
+    method public void setOnCapturedPointerListener(android.view.View.OnCapturedPointerListener);
+    method public void setOnClickListener(@Nullable android.view.View.OnClickListener);
+    method public void setOnContextClickListener(@Nullable android.view.View.OnContextClickListener);
+    method public void setOnCreateContextMenuListener(android.view.View.OnCreateContextMenuListener);
+    method public void setOnDragListener(android.view.View.OnDragListener);
+    method public void setOnFocusChangeListener(android.view.View.OnFocusChangeListener);
+    method public void setOnGenericMotionListener(android.view.View.OnGenericMotionListener);
+    method public void setOnHoverListener(android.view.View.OnHoverListener);
+    method public void setOnKeyListener(android.view.View.OnKeyListener);
+    method public void setOnLongClickListener(@Nullable android.view.View.OnLongClickListener);
+    method public void setOnReceiveContentListener(@Nullable String[], @Nullable android.view.OnReceiveContentListener);
+    method public void setOnScrollChangeListener(android.view.View.OnScrollChangeListener);
+    method @Deprecated public void setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener);
+    method public void setOnTouchListener(android.view.View.OnTouchListener);
+    method public void setOutlineAmbientShadowColor(@ColorInt int);
+    method public void setOutlineProvider(android.view.ViewOutlineProvider);
+    method public void setOutlineSpotShadowColor(@ColorInt int);
+    method public void setOverScrollMode(int);
+    method public void setPadding(int, int, int, int);
+    method public void setPaddingRelative(int, int, int, int);
+    method public void setPivotX(float);
+    method public void setPivotY(float);
+    method public void setPointerIcon(android.view.PointerIcon);
+    method public void setPressed(boolean);
+    method public void setRenderEffect(@Nullable android.graphics.RenderEffect);
+    method public final void setRevealOnFocusHint(boolean);
+    method public final void setRight(int);
+    method public void setRotation(float);
+    method public void setRotationX(float);
+    method public void setRotationY(float);
+    method public void setSaveEnabled(boolean);
+    method public void setSaveFromParentEnabled(boolean);
+    method public void setScaleX(float);
+    method public void setScaleY(float);
+    method public void setScreenReaderFocusable(boolean);
+    method public void setScrollBarDefaultDelayBeforeFade(int);
+    method public void setScrollBarFadeDuration(int);
+    method public void setScrollBarSize(int);
+    method public void setScrollBarStyle(int);
+    method public final void setScrollCaptureCallback(@Nullable android.view.ScrollCaptureCallback);
+    method public void setScrollCaptureHint(int);
+    method public void setScrollContainer(boolean);
+    method public void setScrollIndicators(int);
+    method public void setScrollIndicators(int, int);
+    method public void setScrollX(int);
+    method public void setScrollY(int);
+    method public void setScrollbarFadingEnabled(boolean);
+    method public void setSelected(boolean);
+    method public void setSoundEffectsEnabled(boolean);
+    method public void setStateDescription(@Nullable CharSequence);
+    method public void setStateListAnimator(android.animation.StateListAnimator);
+    method public void setSystemGestureExclusionRects(@NonNull java.util.List<android.graphics.Rect>);
+    method @Deprecated public void setSystemUiVisibility(int);
+    method public void setTag(Object);
+    method public void setTag(int, Object);
+    method public void setTextAlignment(int);
+    method public void setTextDirection(int);
+    method public void setTooltipText(@Nullable CharSequence);
+    method public final void setTop(int);
+    method public void setTouchDelegate(android.view.TouchDelegate);
+    method public void setTransitionAlpha(float);
+    method public final void setTransitionName(String);
+    method public void setTransitionVisibility(int);
+    method public void setTranslationX(float);
+    method public void setTranslationY(float);
+    method public void setTranslationZ(float);
+    method public void setVerticalFadingEdgeEnabled(boolean);
+    method public void setVerticalScrollBarEnabled(boolean);
+    method public void setVerticalScrollbarPosition(int);
+    method public void setVerticalScrollbarThumbDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setVerticalScrollbarTrackDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setViewTranslationCallback(@NonNull android.view.translation.ViewTranslationCallback);
+    method public void setVisibility(int);
+    method @Deprecated public void setWillNotCacheDrawing(boolean);
+    method public void setWillNotDraw(boolean);
+    method public void setWindowInsetsAnimationCallback(@Nullable android.view.WindowInsetsAnimation.Callback);
+    method public void setX(float);
+    method public void setY(float);
+    method public void setZ(float);
+    method public boolean showContextMenu();
+    method public boolean showContextMenu(float, float);
+    method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
+    method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int);
+    method public void startAnimation(android.view.animation.Animation);
+    method @Deprecated public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, Object, int);
+    method public final boolean startDragAndDrop(android.content.ClipData, android.view.View.DragShadowBuilder, Object, int);
+    method public boolean startNestedScroll(int);
+    method public void stopNestedScroll();
+    method public void transformMatrixToGlobal(@NonNull android.graphics.Matrix);
+    method public void transformMatrixToLocal(@NonNull android.graphics.Matrix);
+    method public void unscheduleDrawable(@NonNull android.graphics.drawable.Drawable, @NonNull Runnable);
+    method public void unscheduleDrawable(android.graphics.drawable.Drawable);
+    method public final void updateDragShadow(android.view.View.DragShadowBuilder);
+    method @CallSuper protected boolean verifyDrawable(@NonNull android.graphics.drawable.Drawable);
+    method @Deprecated public boolean willNotCacheDrawing();
+    method public boolean willNotDraw();
+    field public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE = 2; // 0x2
+    field public static final int ACCESSIBILITY_LIVE_REGION_NONE = 0; // 0x0
+    field public static final int ACCESSIBILITY_LIVE_REGION_POLITE = 1; // 0x1
+    field public static final android.util.Property<android.view.View,java.lang.Float> ALPHA;
+    field public static final int AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS = 1; // 0x1
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE = "creditCardExpirationDate";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY = "creditCardExpirationDay";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH = "creditCardExpirationMonth";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR = "creditCardExpirationYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_NUMBER = "creditCardNumber";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE = "creditCardSecurityCode";
+    field public static final String AUTOFILL_HINT_EMAIL_ADDRESS = "emailAddress";
+    field public static final String AUTOFILL_HINT_NAME = "name";
+    field public static final String AUTOFILL_HINT_PASSWORD = "password";
+    field public static final String AUTOFILL_HINT_PHONE = "phone";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS = "postalAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
+    field public static final String AUTOFILL_HINT_USERNAME = "username";
+    field public static final int AUTOFILL_TYPE_DATE = 4; // 0x4
+    field public static final int AUTOFILL_TYPE_LIST = 3; // 0x3
+    field public static final int AUTOFILL_TYPE_NONE = 0; // 0x0
+    field public static final int AUTOFILL_TYPE_TEXT = 1; // 0x1
+    field public static final int AUTOFILL_TYPE_TOGGLE = 2; // 0x2
+    field public static final int DRAG_FLAG_ACCESSIBILITY_ACTION = 1024; // 0x400
+    field public static final int DRAG_FLAG_GLOBAL = 256; // 0x100
+    field public static final int DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION = 64; // 0x40
+    field public static final int DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION = 128; // 0x80
+    field public static final int DRAG_FLAG_GLOBAL_URI_READ = 1; // 0x1
+    field public static final int DRAG_FLAG_GLOBAL_URI_WRITE = 2; // 0x2
+    field public static final int DRAG_FLAG_OPAQUE = 512; // 0x200
+    field @Deprecated public static final int DRAWING_CACHE_QUALITY_AUTO = 0; // 0x0
+    field @Deprecated public static final int DRAWING_CACHE_QUALITY_HIGH = 1048576; // 0x100000
+    field @Deprecated public static final int DRAWING_CACHE_QUALITY_LOW = 524288; // 0x80000
+    field protected static final int[] EMPTY_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_SELECTED_STATE_SET;
+    field protected static final int[] ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] ENABLED_STATE_SET;
+    field protected static final int[] ENABLED_WINDOW_FOCUSED_STATE_SET;
+    field public static final int FIND_VIEWS_WITH_CONTENT_DESCRIPTION = 2; // 0x2
+    field public static final int FIND_VIEWS_WITH_TEXT = 1; // 0x1
+    field public static final int FOCUSABLE = 1; // 0x1
+    field public static final int FOCUSABLES_ALL = 0; // 0x0
+    field public static final int FOCUSABLES_TOUCH_MODE = 1; // 0x1
+    field public static final int FOCUSABLE_AUTO = 16; // 0x10
+    field protected static final int[] FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] FOCUSED_STATE_SET;
+    field protected static final int[] FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field public static final int FOCUS_BACKWARD = 1; // 0x1
+    field public static final int FOCUS_DOWN = 130; // 0x82
+    field public static final int FOCUS_FORWARD = 2; // 0x2
+    field public static final int FOCUS_LEFT = 17; // 0x11
+    field public static final int FOCUS_RIGHT = 66; // 0x42
+    field public static final int FOCUS_UP = 33; // 0x21
+    field public static final int GONE = 8; // 0x8
+    field public static final int HAPTIC_FEEDBACK_ENABLED = 268435456; // 0x10000000
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_AUTO = 0; // 0x0
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO = 2; // 0x2
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS = 4; // 0x4
+    field public static final int IMPORTANT_FOR_ACCESSIBILITY_YES = 1; // 0x1
+    field public static final int IMPORTANT_FOR_AUTOFILL_AUTO = 0; // 0x0
+    field public static final int IMPORTANT_FOR_AUTOFILL_NO = 2; // 0x2
+    field public static final int IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS = 8; // 0x8
+    field public static final int IMPORTANT_FOR_AUTOFILL_YES = 1; // 0x1
+    field public static final int IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS = 4; // 0x4
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_AUTO = 0; // 0x0
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_NO = 2; // 0x2
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_NO_EXCLUDE_DESCENDANTS = 8; // 0x8
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_YES = 1; // 0x1
+    field public static final int IMPORTANT_FOR_CONTENT_CAPTURE_YES_EXCLUDE_DESCENDANTS = 4; // 0x4
+    field public static final int INVISIBLE = 4; // 0x4
+    field public static final int KEEP_SCREEN_ON = 67108864; // 0x4000000
+    field public static final int LAYER_TYPE_HARDWARE = 2; // 0x2
+    field public static final int LAYER_TYPE_NONE = 0; // 0x0
+    field public static final int LAYER_TYPE_SOFTWARE = 1; // 0x1
+    field public static final int LAYOUT_DIRECTION_INHERIT = 2; // 0x2
+    field public static final int LAYOUT_DIRECTION_LOCALE = 3; // 0x3
+    field public static final int LAYOUT_DIRECTION_LTR = 0; // 0x0
+    field public static final int LAYOUT_DIRECTION_RTL = 1; // 0x1
+    field public static final int MEASURED_HEIGHT_STATE_SHIFT = 16; // 0x10
+    field public static final int MEASURED_SIZE_MASK = 16777215; // 0xffffff
+    field public static final int MEASURED_STATE_MASK = -16777216; // 0xff000000
+    field public static final int MEASURED_STATE_TOO_SMALL = 16777216; // 0x1000000
+    field public static final int NOT_FOCUSABLE = 0; // 0x0
+    field public static final int NO_ID = -1; // 0xffffffff
+    field public static final int OVER_SCROLL_ALWAYS = 0; // 0x0
+    field public static final int OVER_SCROLL_IF_CONTENT_SCROLLS = 1; // 0x1
+    field public static final int OVER_SCROLL_NEVER = 2; // 0x2
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_STATE_SET;
+    field protected static final int[] PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_SELECTED_STATE_SET;
+    field protected static final int[] PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field protected static final int[] PRESSED_STATE_SET;
+    field protected static final int[] PRESSED_WINDOW_FOCUSED_STATE_SET;
+    field public static final android.util.Property<android.view.View,java.lang.Float> ROTATION;
+    field public static final android.util.Property<android.view.View,java.lang.Float> ROTATION_X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> ROTATION_Y;
+    field public static final android.util.Property<android.view.View,java.lang.Float> SCALE_X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> SCALE_Y;
+    field public static final int SCREEN_STATE_OFF = 0; // 0x0
+    field public static final int SCREEN_STATE_ON = 1; // 0x1
+    field public static final int SCROLLBARS_INSIDE_INSET = 16777216; // 0x1000000
+    field public static final int SCROLLBARS_INSIDE_OVERLAY = 0; // 0x0
+    field public static final int SCROLLBARS_OUTSIDE_INSET = 50331648; // 0x3000000
+    field public static final int SCROLLBARS_OUTSIDE_OVERLAY = 33554432; // 0x2000000
+    field public static final int SCROLLBAR_POSITION_DEFAULT = 0; // 0x0
+    field public static final int SCROLLBAR_POSITION_LEFT = 1; // 0x1
+    field public static final int SCROLLBAR_POSITION_RIGHT = 2; // 0x2
+    field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+    field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+    field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
+    field public static final int SCROLL_CAPTURE_HINT_AUTO = 0; // 0x0
+    field public static final int SCROLL_CAPTURE_HINT_EXCLUDE = 1; // 0x1
+    field public static final int SCROLL_CAPTURE_HINT_EXCLUDE_DESCENDANTS = 4; // 0x4
+    field public static final int SCROLL_CAPTURE_HINT_INCLUDE = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_BOTTOM = 2; // 0x2
+    field public static final int SCROLL_INDICATOR_END = 32; // 0x20
+    field public static final int SCROLL_INDICATOR_LEFT = 4; // 0x4
+    field public static final int SCROLL_INDICATOR_RIGHT = 8; // 0x8
+    field public static final int SCROLL_INDICATOR_START = 16; // 0x10
+    field public static final int SCROLL_INDICATOR_TOP = 1; // 0x1
+    field protected static final int[] SELECTED_STATE_SET;
+    field protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET;
+    field public static final int SOUND_EFFECTS_ENABLED = 134217728; // 0x8000000
+    field @Deprecated public static final int STATUS_BAR_HIDDEN = 1; // 0x1
+    field @Deprecated public static final int STATUS_BAR_VISIBLE = 0; // 0x0
+    field @Deprecated public static final int SYSTEM_UI_FLAG_FULLSCREEN = 4; // 0x4
+    field @Deprecated public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 2; // 0x2
+    field @Deprecated public static final int SYSTEM_UI_FLAG_IMMERSIVE = 2048; // 0x800
+    field @Deprecated public static final int SYSTEM_UI_FLAG_IMMERSIVE_STICKY = 4096; // 0x1000
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN = 1024; // 0x400
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION = 512; // 0x200
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LAYOUT_STABLE = 256; // 0x100
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR = 16; // 0x10
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LIGHT_STATUS_BAR = 8192; // 0x2000
+    field @Deprecated public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 1; // 0x1
+    field @Deprecated public static final int SYSTEM_UI_FLAG_VISIBLE = 0; // 0x0
+    field @Deprecated public static final int SYSTEM_UI_LAYOUT_FLAGS = 1536; // 0x600
+    field public static final int TEXT_ALIGNMENT_CENTER = 4; // 0x4
+    field public static final int TEXT_ALIGNMENT_GRAVITY = 1; // 0x1
+    field public static final int TEXT_ALIGNMENT_INHERIT = 0; // 0x0
+    field public static final int TEXT_ALIGNMENT_TEXT_END = 3; // 0x3
+    field public static final int TEXT_ALIGNMENT_TEXT_START = 2; // 0x2
+    field public static final int TEXT_ALIGNMENT_VIEW_END = 6; // 0x6
+    field public static final int TEXT_ALIGNMENT_VIEW_START = 5; // 0x5
+    field public static final int TEXT_DIRECTION_ANY_RTL = 2; // 0x2
+    field public static final int TEXT_DIRECTION_FIRST_STRONG = 1; // 0x1
+    field public static final int TEXT_DIRECTION_FIRST_STRONG_LTR = 6; // 0x6
+    field public static final int TEXT_DIRECTION_FIRST_STRONG_RTL = 7; // 0x7
+    field public static final int TEXT_DIRECTION_INHERIT = 0; // 0x0
+    field public static final int TEXT_DIRECTION_LOCALE = 5; // 0x5
+    field public static final int TEXT_DIRECTION_LTR = 3; // 0x3
+    field public static final int TEXT_DIRECTION_RTL = 4; // 0x4
+    field public static final android.util.Property<android.view.View,java.lang.Float> TRANSLATION_X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> TRANSLATION_Y;
+    field public static final android.util.Property<android.view.View,java.lang.Float> TRANSLATION_Z;
+    field protected static final String VIEW_LOG_TAG = "View";
+    field public static final int VISIBLE = 0; // 0x0
+    field protected static final int[] WINDOW_FOCUSED_STATE_SET;
+    field public static final android.util.Property<android.view.View,java.lang.Float> X;
+    field public static final android.util.Property<android.view.View,java.lang.Float> Y;
+    field public static final android.util.Property<android.view.View,java.lang.Float> Z;
+  }
+
+  public static class View.AccessibilityDelegate {
+    ctor public View.AccessibilityDelegate();
+    method public void addExtraDataToAccessibilityNodeInfo(@NonNull android.view.View, @NonNull android.view.accessibility.AccessibilityNodeInfo, @NonNull String, @Nullable android.os.Bundle);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider(android.view.View);
+    method public void onInitializeAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityNodeInfo(android.view.View, android.view.accessibility.AccessibilityNodeInfo);
+    method public void onPopulateAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean onRequestSendAccessibilityEvent(android.view.ViewGroup, android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean performAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public void sendAccessibilityEvent(android.view.View, int);
+    method public void sendAccessibilityEventUnchecked(android.view.View, android.view.accessibility.AccessibilityEvent);
+  }
+
+  public static class View.BaseSavedState extends android.view.AbsSavedState {
+    ctor public View.BaseSavedState(android.os.Parcel);
+    ctor public View.BaseSavedState(android.os.Parcel, ClassLoader);
+    ctor public View.BaseSavedState(android.os.Parcelable);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.View.BaseSavedState> CREATOR;
+  }
+
+  public static class View.DragShadowBuilder {
+    ctor public View.DragShadowBuilder(android.view.View);
+    ctor public View.DragShadowBuilder();
+    method public final android.view.View getView();
+    method public void onDrawShadow(android.graphics.Canvas);
+    method public void onProvideShadowMetrics(android.graphics.Point, android.graphics.Point);
+  }
+
+  public static class View.MeasureSpec {
+    ctor public View.MeasureSpec();
+    method public static int getMode(int);
+    method public static int getSize(int);
+    method public static int makeMeasureSpec(@IntRange(from=0, to=0x40000000 - 1) int, int);
+    method public static String toString(int);
+    field public static final int AT_MOST = -2147483648; // 0x80000000
+    field public static final int EXACTLY = 1073741824; // 0x40000000
+    field public static final int UNSPECIFIED = 0; // 0x0
+  }
+
+  public static interface View.OnApplyWindowInsetsListener {
+    method public android.view.WindowInsets onApplyWindowInsets(android.view.View, android.view.WindowInsets);
+  }
+
+  public static interface View.OnAttachStateChangeListener {
+    method public void onViewAttachedToWindow(android.view.View);
+    method public void onViewDetachedFromWindow(android.view.View);
+  }
+
+  public static interface View.OnCapturedPointerListener {
+    method public boolean onCapturedPointer(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnClickListener {
+    method public void onClick(android.view.View);
+  }
+
+  public static interface View.OnContextClickListener {
+    method public boolean onContextClick(android.view.View);
+  }
+
+  public static interface View.OnCreateContextMenuListener {
+    method public void onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo);
+  }
+
+  public static interface View.OnDragListener {
+    method public boolean onDrag(android.view.View, android.view.DragEvent);
+  }
+
+  public static interface View.OnFocusChangeListener {
+    method public void onFocusChange(android.view.View, boolean);
+  }
+
+  public static interface View.OnGenericMotionListener {
+    method public boolean onGenericMotion(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnHoverListener {
+    method public boolean onHover(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnKeyListener {
+    method public boolean onKey(android.view.View, int, android.view.KeyEvent);
+  }
+
+  public static interface View.OnLayoutChangeListener {
+    method public void onLayoutChange(android.view.View, int, int, int, int, int, int, int, int);
+  }
+
+  public static interface View.OnLongClickListener {
+    method public boolean onLongClick(android.view.View);
+  }
+
+  public static interface View.OnScrollChangeListener {
+    method public void onScrollChange(android.view.View, int, int, int, int);
+  }
+
+  @Deprecated public static interface View.OnSystemUiVisibilityChangeListener {
+    method @Deprecated public void onSystemUiVisibilityChange(int);
+  }
+
+  public static interface View.OnTouchListener {
+    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+  }
+
+  public static interface View.OnUnhandledKeyEventListener {
+    method public boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent);
+  }
+
+  public final class ViewAnimationUtils {
+    method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float);
+  }
+
+  public class ViewConfiguration {
+    ctor @Deprecated public ViewConfiguration();
+    method public static android.view.ViewConfiguration get(@UiContext android.content.Context);
+    method @Deprecated @FloatRange(from=1.0) public static float getAmbiguousGestureMultiplier();
+    method public static long getDefaultActionModeHideDuration();
+    method public static int getDoubleTapTimeout();
+    method @Deprecated public static int getEdgeSlop();
+    method @Deprecated public static int getFadingEdgeLength();
+    method @Deprecated public static long getGlobalActionKeyTimeout();
+    method public static int getJumpTapTimeout();
+    method public static int getKeyRepeatDelay();
+    method public static int getKeyRepeatTimeout();
+    method public static int getLongPressTimeout();
+    method @Deprecated public static int getMaximumDrawingCacheSize();
+    method @Deprecated public static int getMaximumFlingVelocity();
+    method @Deprecated public static int getMinimumFlingVelocity();
+    method public static int getMultiPressTimeout();
+    method public static int getPressedStateDuration();
+    method @FloatRange(from=1.0) public float getScaledAmbiguousGestureMultiplier();
+    method public int getScaledDoubleTapSlop();
+    method public int getScaledEdgeSlop();
+    method public int getScaledFadingEdgeLength();
+    method public float getScaledHorizontalScrollFactor();
+    method public int getScaledHoverSlop();
+    method public int getScaledMaximumDrawingCacheSize();
+    method public int getScaledMaximumFlingVelocity();
+    method public int getScaledMinimumFlingVelocity();
+    method public int getScaledMinimumScalingSpan();
+    method public int getScaledOverflingDistance();
+    method public int getScaledOverscrollDistance();
+    method public int getScaledPagingTouchSlop();
+    method public int getScaledScrollBarSize();
+    method public int getScaledTouchSlop();
+    method public float getScaledVerticalScrollFactor();
+    method public int getScaledWindowTouchSlop();
+    method public static int getScrollBarFadeDuration();
+    method @Deprecated public static int getScrollBarSize();
+    method public static int getScrollDefaultDelay();
+    method public static float getScrollFriction();
+    method public static int getTapTimeout();
+    method @Deprecated public static int getTouchSlop();
+    method @Deprecated public static int getWindowTouchSlop();
+    method public static long getZoomControlsTimeout();
+    method public boolean hasPermanentMenuKey();
+    method public boolean shouldShowMenuShortcutsWhenKeyboardPresent();
+  }
+
+  public class ViewDebug {
+    ctor public ViewDebug();
+    method public static void dumpCapturedView(String, Object);
+    method @Deprecated public static void startHierarchyTracing(String, android.view.View);
+    method @Deprecated public static void startRecyclerTracing(String, android.view.View);
+    method @Deprecated public static void stopHierarchyTracing();
+    method @Deprecated public static void stopRecyclerTracing();
+    method @Deprecated public static void trace(android.view.View, android.view.ViewDebug.RecyclerTraceType, int...);
+    method @Deprecated public static void trace(android.view.View, android.view.ViewDebug.HierarchyTraceType);
+    field @Deprecated public static final boolean TRACE_HIERARCHY = false;
+    field @Deprecated public static final boolean TRACE_RECYCLER = false;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public static @interface ViewDebug.CapturedViewProperty {
+    method public abstract boolean retrieveReturn() default false;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD}) public static @interface ViewDebug.ExportedProperty {
+    method public abstract String category() default "";
+    method public abstract boolean deepExport() default false;
+    method public abstract android.view.ViewDebug.FlagToString[] flagMapping() default {};
+    method public abstract boolean formatToHexString() default false;
+    method public abstract boolean hasAdjacentMapping() default false;
+    method public abstract android.view.ViewDebug.IntToString[] indexMapping() default {};
+    method public abstract android.view.ViewDebug.IntToString[] mapping() default {};
+    method public abstract String prefix() default "";
+    method public abstract boolean resolveId() default false;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface ViewDebug.FlagToString {
+    method public abstract int equals();
+    method public abstract int mask();
+    method public abstract String name();
+    method public abstract boolean outputIf() default true;
+  }
+
+  @Deprecated public enum ViewDebug.HierarchyTraceType {
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType BUILD_CACHE;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType DRAW;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType INVALIDATE_CHILD_IN_PARENT;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType ON_LAYOUT;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType ON_MEASURE;
+    enum_constant @Deprecated public static final android.view.ViewDebug.HierarchyTraceType REQUEST_LAYOUT;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface ViewDebug.IntToString {
+    method public abstract int from();
+    method public abstract String to();
+  }
+
+  @Deprecated public enum ViewDebug.RecyclerTraceType {
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType BIND_VIEW;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType MOVE_FROM_ACTIVE_TO_SCRAP_HEAP;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType MOVE_TO_SCRAP_HEAP;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType NEW_VIEW;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_ACTIVE_HEAP;
+    enum_constant @Deprecated public static final android.view.ViewDebug.RecyclerTraceType RECYCLE_FROM_SCRAP_HEAP;
+  }
+
+  @UiThread public abstract class ViewGroup extends android.view.View implements android.view.ViewManager android.view.ViewParent {
+    ctor public ViewGroup(android.content.Context);
+    ctor public ViewGroup(android.content.Context, android.util.AttributeSet);
+    ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int);
+    ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean addStatesFromChildren();
+    method public void addView(android.view.View);
+    method public void addView(android.view.View, int);
+    method public void addView(android.view.View, int, int);
+    method public void addView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void addView(android.view.View, int, android.view.ViewGroup.LayoutParams);
+    method protected boolean addViewInLayout(android.view.View, int, android.view.ViewGroup.LayoutParams);
+    method protected boolean addViewInLayout(android.view.View, int, android.view.ViewGroup.LayoutParams, boolean);
+    method protected void attachLayoutAnimationParameters(android.view.View, android.view.ViewGroup.LayoutParams, int, int);
+    method protected void attachViewToParent(android.view.View, int, android.view.ViewGroup.LayoutParams);
+    method public void bringChildToFront(android.view.View);
+    method protected boolean canAnimate();
+    method protected boolean checkLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void childDrawableStateChanged(android.view.View);
+    method public void childHasTransientStateChanged(android.view.View, boolean);
+    method protected void cleanupLayoutState(android.view.View);
+    method public void clearChildFocus(android.view.View);
+    method public void clearDisappearingChildren();
+    method protected void debug(int);
+    method protected void detachAllViewsFromParent();
+    method protected void detachViewFromParent(android.view.View);
+    method protected void detachViewFromParent(int);
+    method protected void detachViewsFromParent(int, int);
+    method protected void dispatchFreezeSelfOnly(android.util.SparseArray<android.os.Parcelable>);
+    method public void dispatchSetActivated(boolean);
+    method public void dispatchSetSelected(boolean);
+    method protected void dispatchThawSelfOnly(android.util.SparseArray<android.os.Parcelable>);
+    method protected boolean drawChild(android.graphics.Canvas, android.view.View, long);
+    method public void endViewTransition(android.view.View);
+    method public android.view.View focusSearch(android.view.View, int);
+    method public void focusableViewAvailable(android.view.View);
+    method protected android.view.ViewGroup.LayoutParams generateDefaultLayoutParams();
+    method public android.view.ViewGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.view.ViewGroup.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public android.view.View getChildAt(int);
+    method public int getChildCount();
+    method protected int getChildDrawingOrder(int, int);
+    method public final int getChildDrawingOrder(int);
+    method public static int getChildMeasureSpec(int, int, int);
+    method protected boolean getChildStaticTransformation(android.view.View, android.view.animation.Transformation);
+    method public boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point);
+    method public boolean getClipChildren();
+    method public boolean getClipToPadding();
+    method public int getDescendantFocusability();
+    method public android.view.View getFocusedChild();
+    method public android.view.animation.LayoutAnimationController getLayoutAnimation();
+    method public android.view.animation.Animation.AnimationListener getLayoutAnimationListener();
+    method public int getLayoutMode();
+    method public android.animation.LayoutTransition getLayoutTransition();
+    method public int getNestedScrollAxes();
+    method public android.view.ViewGroupOverlay getOverlay();
+    method @Deprecated public int getPersistentDrawingCache();
+    method public boolean getTouchscreenBlocksFocus();
+    method public int indexOfChild(android.view.View);
+    method @Deprecated public final void invalidateChild(android.view.View, android.graphics.Rect);
+    method @Deprecated public android.view.ViewParent invalidateChildInParent(int[], android.graphics.Rect);
+    method @Deprecated public boolean isAlwaysDrawnWithCacheEnabled();
+    method @Deprecated public boolean isAnimationCacheEnabled();
+    method protected boolean isChildrenDrawingOrderEnabled();
+    method @Deprecated protected boolean isChildrenDrawnWithCacheEnabled();
+    method public boolean isLayoutSuppressed();
+    method public boolean isMotionEventSplittingEnabled();
+    method public boolean isTransitionGroup();
+    method public final void layout(int, int, int, int);
+    method protected void measureChild(android.view.View, int, int);
+    method protected void measureChildWithMargins(android.view.View, int, int, int, int);
+    method protected void measureChildren(int, int);
+    method public void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int);
+    method public final void offsetDescendantRectToMyCoords(android.view.View, android.graphics.Rect);
+    method public final void offsetRectIntoDescendantCoords(android.view.View, android.graphics.Rect);
+    method public boolean onInterceptHoverEvent(android.view.MotionEvent);
+    method public boolean onInterceptTouchEvent(android.view.MotionEvent);
+    method protected abstract void onLayout(boolean, int, int, int, int);
+    method public boolean onNestedFling(android.view.View, float, float, boolean);
+    method public boolean onNestedPreFling(android.view.View, float, float);
+    method public boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public void onNestedScroll(android.view.View, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method protected boolean onRequestFocusInDescendants(int, android.graphics.Rect);
+    method public boolean onRequestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public void onStopNestedScroll(android.view.View);
+    method public void onViewAdded(android.view.View);
+    method public void onViewRemoved(android.view.View);
+    method public void recomputeViewAttributes(android.view.View);
+    method public void removeAllViews();
+    method public void removeAllViewsInLayout();
+    method protected void removeDetachedView(android.view.View, boolean);
+    method public void removeView(android.view.View);
+    method public void removeViewAt(int);
+    method public void removeViewInLayout(android.view.View);
+    method public void removeViews(int, int);
+    method public void removeViewsInLayout(int, int);
+    method public void requestChildFocus(android.view.View, android.view.View);
+    method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
+    method public void requestDisallowInterceptTouchEvent(boolean);
+    method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public void requestTransparentRegion(android.view.View);
+    method public void scheduleLayoutAnimation();
+    method public void setAddStatesFromChildren(boolean);
+    method @Deprecated public void setAlwaysDrawnWithCacheEnabled(boolean);
+    method @Deprecated public void setAnimationCacheEnabled(boolean);
+    method @Deprecated protected void setChildrenDrawingCacheEnabled(boolean);
+    method protected void setChildrenDrawingOrderEnabled(boolean);
+    method @Deprecated protected void setChildrenDrawnWithCacheEnabled(boolean);
+    method public void setClipChildren(boolean);
+    method public void setClipToPadding(boolean);
+    method public void setDescendantFocusability(int);
+    method public void setLayoutAnimation(android.view.animation.LayoutAnimationController);
+    method public void setLayoutAnimationListener(android.view.animation.Animation.AnimationListener);
+    method public void setLayoutMode(int);
+    method public void setLayoutTransition(android.animation.LayoutTransition);
+    method public void setMotionEventSplittingEnabled(boolean);
+    method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener);
+    method @Deprecated public void setPersistentDrawingCache(int);
+    method protected void setStaticTransformationsEnabled(boolean);
+    method public void setTouchscreenBlocksFocus(boolean);
+    method public void setTransitionGroup(boolean);
+    method public boolean shouldDelayChildPressedState();
+    method public boolean showContextMenuForChild(android.view.View);
+    method public boolean showContextMenuForChild(android.view.View, float, float);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback, int);
+    method public void startLayoutAnimation();
+    method public void startViewTransition(android.view.View);
+    method public void suppressLayout(boolean);
+    method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams);
+    field protected static final int CLIP_TO_PADDING_MASK = 34; // 0x22
+    field public static final int FOCUS_AFTER_DESCENDANTS = 262144; // 0x40000
+    field public static final int FOCUS_BEFORE_DESCENDANTS = 131072; // 0x20000
+    field public static final int FOCUS_BLOCK_DESCENDANTS = 393216; // 0x60000
+    field public static final int LAYOUT_MODE_CLIP_BOUNDS = 0; // 0x0
+    field public static final int LAYOUT_MODE_OPTICAL_BOUNDS = 1; // 0x1
+    field @Deprecated public static final int PERSISTENT_ALL_CACHES = 3; // 0x3
+    field @Deprecated public static final int PERSISTENT_ANIMATION_CACHE = 1; // 0x1
+    field @Deprecated public static final int PERSISTENT_NO_CACHE = 0; // 0x0
+    field @Deprecated public static final int PERSISTENT_SCROLLING_CACHE = 2; // 0x2
+  }
+
+  public static class ViewGroup.LayoutParams {
+    ctor public ViewGroup.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ViewGroup.LayoutParams(int, int);
+    ctor public ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void resolveLayoutDirection(int);
+    method protected void setBaseAttributes(android.content.res.TypedArray, int, int);
+    field @Deprecated public static final int FILL_PARENT = -1; // 0xffffffff
+    field public static final int MATCH_PARENT = -1; // 0xffffffff
+    field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+    field public int height;
+    field public android.view.animation.LayoutAnimationController.AnimationParameters layoutAnimationParameters;
+    field public int width;
+  }
+
+  public static class ViewGroup.MarginLayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor public ViewGroup.MarginLayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ViewGroup.MarginLayoutParams(int, int);
+    ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public ViewGroup.MarginLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getLayoutDirection();
+    method public int getMarginEnd();
+    method public int getMarginStart();
+    method public boolean isMarginRelative();
+    method public void setLayoutDirection(int);
+    method public void setMarginEnd(int);
+    method public void setMarginStart(int);
+    method public void setMargins(int, int, int, int);
+    field public int bottomMargin;
+    field public int leftMargin;
+    field public int rightMargin;
+    field public int topMargin;
+  }
+
+  public static interface ViewGroup.OnHierarchyChangeListener {
+    method public void onChildViewAdded(android.view.View, android.view.View);
+    method public void onChildViewRemoved(android.view.View, android.view.View);
+  }
+
+  public class ViewGroupOverlay extends android.view.ViewOverlay {
+    method public void add(@NonNull android.view.View);
+    method public void remove(@NonNull android.view.View);
+  }
+
+  public interface ViewManager {
+    method public void addView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void removeView(android.view.View);
+    method public void updateViewLayout(android.view.View, android.view.ViewGroup.LayoutParams);
+  }
+
+  public abstract class ViewOutlineProvider {
+    ctor public ViewOutlineProvider();
+    method public abstract void getOutline(android.view.View, android.graphics.Outline);
+    field public static final android.view.ViewOutlineProvider BACKGROUND;
+    field public static final android.view.ViewOutlineProvider BOUNDS;
+    field public static final android.view.ViewOutlineProvider PADDED_BOUNDS;
+  }
+
+  public class ViewOverlay {
+    method public void add(@NonNull android.graphics.drawable.Drawable);
+    method public void clear();
+    method public void remove(@NonNull android.graphics.drawable.Drawable);
+  }
+
+  public interface ViewParent {
+    method public void bringChildToFront(android.view.View);
+    method public boolean canResolveLayoutDirection();
+    method public boolean canResolveTextAlignment();
+    method public boolean canResolveTextDirection();
+    method public void childDrawableStateChanged(android.view.View);
+    method public void childHasTransientStateChanged(android.view.View, boolean);
+    method public void clearChildFocus(android.view.View);
+    method public void createContextMenu(android.view.ContextMenu);
+    method public android.view.View focusSearch(android.view.View, int);
+    method public void focusableViewAvailable(android.view.View);
+    method public boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point);
+    method public int getLayoutDirection();
+    method public android.view.ViewParent getParent();
+    method public android.view.ViewParent getParentForAccessibility();
+    method public int getTextAlignment();
+    method public int getTextDirection();
+    method @Deprecated public void invalidateChild(android.view.View, android.graphics.Rect);
+    method @Deprecated public android.view.ViewParent invalidateChildInParent(int[], android.graphics.Rect);
+    method public boolean isLayoutDirectionResolved();
+    method public boolean isLayoutRequested();
+    method public boolean isTextAlignmentResolved();
+    method public boolean isTextDirectionResolved();
+    method public android.view.View keyboardNavigationClusterSearch(android.view.View, int);
+    method public void notifySubtreeAccessibilityStateChanged(android.view.View, @NonNull android.view.View, int);
+    method public default void onDescendantInvalidated(@NonNull android.view.View, @NonNull android.view.View);
+    method public boolean onNestedFling(android.view.View, float, float, boolean);
+    method public boolean onNestedPreFling(android.view.View, float, float);
+    method public boolean onNestedPrePerformAccessibilityAction(android.view.View, int, android.os.Bundle);
+    method public void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public void onNestedScroll(android.view.View, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public void onStopNestedScroll(android.view.View);
+    method public void recomputeViewAttributes(android.view.View);
+    method public void requestChildFocus(android.view.View, android.view.View);
+    method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
+    method public void requestDisallowInterceptTouchEvent(boolean);
+    method public void requestFitSystemWindows();
+    method public void requestLayout();
+    method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public void requestTransparentRegion(android.view.View);
+    method public boolean showContextMenuForChild(android.view.View);
+    method public boolean showContextMenuForChild(android.view.View, float, float);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
+    method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback, int);
+  }
+
+  public class ViewPropertyAnimator {
+    method public android.view.ViewPropertyAnimator alpha(@FloatRange(from=0.0f, to=1.0f) float);
+    method public android.view.ViewPropertyAnimator alphaBy(float);
+    method public void cancel();
+    method public long getDuration();
+    method public android.animation.TimeInterpolator getInterpolator();
+    method public long getStartDelay();
+    method public android.view.ViewPropertyAnimator rotation(float);
+    method public android.view.ViewPropertyAnimator rotationBy(float);
+    method public android.view.ViewPropertyAnimator rotationX(float);
+    method public android.view.ViewPropertyAnimator rotationXBy(float);
+    method public android.view.ViewPropertyAnimator rotationY(float);
+    method public android.view.ViewPropertyAnimator rotationYBy(float);
+    method public android.view.ViewPropertyAnimator scaleX(float);
+    method public android.view.ViewPropertyAnimator scaleXBy(float);
+    method public android.view.ViewPropertyAnimator scaleY(float);
+    method public android.view.ViewPropertyAnimator scaleYBy(float);
+    method public android.view.ViewPropertyAnimator setDuration(long);
+    method public android.view.ViewPropertyAnimator setInterpolator(android.animation.TimeInterpolator);
+    method public android.view.ViewPropertyAnimator setListener(android.animation.Animator.AnimatorListener);
+    method public android.view.ViewPropertyAnimator setStartDelay(long);
+    method public android.view.ViewPropertyAnimator setUpdateListener(android.animation.ValueAnimator.AnimatorUpdateListener);
+    method public void start();
+    method public android.view.ViewPropertyAnimator translationX(float);
+    method public android.view.ViewPropertyAnimator translationXBy(float);
+    method public android.view.ViewPropertyAnimator translationY(float);
+    method public android.view.ViewPropertyAnimator translationYBy(float);
+    method public android.view.ViewPropertyAnimator translationZ(float);
+    method public android.view.ViewPropertyAnimator translationZBy(float);
+    method public android.view.ViewPropertyAnimator withEndAction(Runnable);
+    method public android.view.ViewPropertyAnimator withLayer();
+    method public android.view.ViewPropertyAnimator withStartAction(Runnable);
+    method public android.view.ViewPropertyAnimator x(float);
+    method public android.view.ViewPropertyAnimator xBy(float);
+    method public android.view.ViewPropertyAnimator y(float);
+    method public android.view.ViewPropertyAnimator yBy(float);
+    method public android.view.ViewPropertyAnimator z(float);
+    method public android.view.ViewPropertyAnimator zBy(float);
+  }
+
+  public abstract class ViewStructure {
+    ctor public ViewStructure();
+    method public abstract int addChildCount(int);
+    method public abstract void asyncCommit();
+    method public abstract android.view.ViewStructure asyncNewChild(int);
+    method @Nullable public abstract android.view.autofill.AutofillId getAutofillId();
+    method public abstract int getChildCount();
+    method public abstract android.os.Bundle getExtras();
+    method public abstract CharSequence getHint();
+    method public abstract CharSequence getText();
+    method public abstract int getTextSelectionEnd();
+    method public abstract int getTextSelectionStart();
+    method public abstract boolean hasExtras();
+    method public abstract android.view.ViewStructure newChild(int);
+    method public abstract android.view.ViewStructure.HtmlInfo.Builder newHtmlInfoBuilder(@NonNull String);
+    method public abstract void setAccessibilityFocused(boolean);
+    method public abstract void setActivated(boolean);
+    method public abstract void setAlpha(float);
+    method public abstract void setAutofillHints(@Nullable String[]);
+    method public abstract void setAutofillId(@NonNull android.view.autofill.AutofillId);
+    method public abstract void setAutofillId(@NonNull android.view.autofill.AutofillId, int);
+    method public abstract void setAutofillOptions(CharSequence[]);
+    method public abstract void setAutofillType(int);
+    method public abstract void setAutofillValue(android.view.autofill.AutofillValue);
+    method public abstract void setCheckable(boolean);
+    method public abstract void setChecked(boolean);
+    method public abstract void setChildCount(int);
+    method public abstract void setClassName(String);
+    method public abstract void setClickable(boolean);
+    method public abstract void setContentDescription(CharSequence);
+    method public abstract void setContextClickable(boolean);
+    method public abstract void setDataIsSensitive(boolean);
+    method public abstract void setDimens(int, int, int, int, int, int);
+    method public abstract void setElevation(float);
+    method public abstract void setEnabled(boolean);
+    method public abstract void setFocusable(boolean);
+    method public abstract void setFocused(boolean);
+    method public abstract void setHint(CharSequence);
+    method public void setHintIdEntry(@NonNull String);
+    method public abstract void setHtmlInfo(@NonNull android.view.ViewStructure.HtmlInfo);
+    method public abstract void setId(int, String, String, String);
+    method public void setImportantForAutofill(int);
+    method public abstract void setInputType(int);
+    method public abstract void setLocaleList(android.os.LocaleList);
+    method public abstract void setLongClickable(boolean);
+    method public void setMaxTextEms(int);
+    method public void setMaxTextLength(int);
+    method public void setMinTextEms(int);
+    method public abstract void setOpaque(boolean);
+    method public void setReceiveContentMimeTypes(@Nullable String[]);
+    method public abstract void setSelected(boolean);
+    method public abstract void setText(CharSequence);
+    method public abstract void setText(CharSequence, int, int);
+    method public void setTextIdEntry(@NonNull String);
+    method public abstract void setTextLines(int[], int[]);
+    method public abstract void setTextStyle(float, int, int, int);
+    method public abstract void setTransformation(android.graphics.Matrix);
+    method public abstract void setVisibility(int);
+    method public abstract void setWebDomain(@Nullable String);
+  }
+
+  public abstract static class ViewStructure.HtmlInfo {
+    ctor public ViewStructure.HtmlInfo();
+    method @Nullable public abstract java.util.List<android.util.Pair<java.lang.String,java.lang.String>> getAttributes();
+    method @NonNull public abstract String getTag();
+  }
+
+  public abstract static class ViewStructure.HtmlInfo.Builder {
+    ctor public ViewStructure.HtmlInfo.Builder();
+    method public abstract android.view.ViewStructure.HtmlInfo.Builder addAttribute(@NonNull String, @NonNull String);
+    method public abstract android.view.ViewStructure.HtmlInfo build();
+  }
+
+  @android.widget.RemoteViews.RemoteView public final class ViewStub extends android.view.View {
+    ctor public ViewStub(android.content.Context);
+    ctor public ViewStub(android.content.Context, @LayoutRes int);
+    ctor public ViewStub(android.content.Context, android.util.AttributeSet);
+    ctor public ViewStub(android.content.Context, android.util.AttributeSet, int);
+    ctor public ViewStub(android.content.Context, android.util.AttributeSet, int, int);
+    method @IdRes public int getInflatedId();
+    method public android.view.LayoutInflater getLayoutInflater();
+    method @LayoutRes public int getLayoutResource();
+    method public android.view.View inflate();
+    method public void setInflatedId(@IdRes int);
+    method public void setLayoutInflater(android.view.LayoutInflater);
+    method public void setLayoutResource(@LayoutRes int);
+    method public void setOnInflateListener(android.view.ViewStub.OnInflateListener);
+  }
+
+  public static interface ViewStub.OnInflateListener {
+    method public void onInflate(android.view.ViewStub, android.view.View);
+  }
+
+  public final class ViewTreeObserver {
+    method public void addOnDrawListener(android.view.ViewTreeObserver.OnDrawListener);
+    method public void addOnGlobalFocusChangeListener(android.view.ViewTreeObserver.OnGlobalFocusChangeListener);
+    method public void addOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
+    method public void addOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
+    method public void addOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+    method public void addOnSystemGestureExclusionRectsChangedListener(@NonNull java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
+    method public void addOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
+    method public void addOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
+    method public void addOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
+    method public void dispatchOnDraw();
+    method public void dispatchOnGlobalLayout();
+    method public boolean dispatchOnPreDraw();
+    method public boolean isAlive();
+    method public void registerFrameCommitCallback(@NonNull Runnable);
+    method @Deprecated public void removeGlobalOnLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
+    method public void removeOnDrawListener(android.view.ViewTreeObserver.OnDrawListener);
+    method public void removeOnGlobalFocusChangeListener(android.view.ViewTreeObserver.OnGlobalFocusChangeListener);
+    method public void removeOnGlobalLayoutListener(android.view.ViewTreeObserver.OnGlobalLayoutListener);
+    method public void removeOnPreDrawListener(android.view.ViewTreeObserver.OnPreDrawListener);
+    method public void removeOnScrollChangedListener(android.view.ViewTreeObserver.OnScrollChangedListener);
+    method public void removeOnSystemGestureExclusionRectsChangedListener(@NonNull java.util.function.Consumer<java.util.List<android.graphics.Rect>>);
+    method public void removeOnTouchModeChangeListener(android.view.ViewTreeObserver.OnTouchModeChangeListener);
+    method public void removeOnWindowAttachListener(android.view.ViewTreeObserver.OnWindowAttachListener);
+    method public void removeOnWindowFocusChangeListener(android.view.ViewTreeObserver.OnWindowFocusChangeListener);
+    method public boolean unregisterFrameCommitCallback(@NonNull Runnable);
+  }
+
+  public static interface ViewTreeObserver.OnDrawListener {
+    method public void onDraw();
+  }
+
+  public static interface ViewTreeObserver.OnGlobalFocusChangeListener {
+    method public void onGlobalFocusChanged(android.view.View, android.view.View);
+  }
+
+  public static interface ViewTreeObserver.OnGlobalLayoutListener {
+    method public void onGlobalLayout();
+  }
+
+  public static interface ViewTreeObserver.OnPreDrawListener {
+    method public boolean onPreDraw();
+  }
+
+  public static interface ViewTreeObserver.OnScrollChangedListener {
+    method public void onScrollChanged();
+  }
+
+  public static interface ViewTreeObserver.OnTouchModeChangeListener {
+    method public void onTouchModeChanged(boolean);
+  }
+
+  public static interface ViewTreeObserver.OnWindowAttachListener {
+    method public void onWindowAttached();
+    method public void onWindowDetached();
+  }
+
+  public static interface ViewTreeObserver.OnWindowFocusChangeListener {
+    method public void onWindowFocusChanged(boolean);
+  }
+
+  public abstract class Window {
+    ctor public Window(@UiContext android.content.Context);
+    method public abstract void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public void addFlags(int);
+    method public final void addOnFrameMetricsAvailableListener(@NonNull android.view.Window.OnFrameMetricsAvailableListener, android.os.Handler);
+    method public void clearFlags(int);
+    method public abstract void closeAllPanels();
+    method public abstract void closePanel(int);
+    method public <T extends android.view.View> T findViewById(@IdRes int);
+    method public boolean getAllowEnterTransitionOverlap();
+    method public boolean getAllowReturnTransitionOverlap();
+    method public final android.view.WindowManager.LayoutParams getAttributes();
+    method public final android.view.Window.Callback getCallback();
+    method public int getColorMode();
+    method public final android.view.Window getContainer();
+    method public android.transition.Scene getContentScene();
+    method @UiContext public final android.content.Context getContext();
+    method @Nullable public abstract android.view.View getCurrentFocus();
+    method @NonNull public abstract android.view.View getDecorView();
+    method public static int getDefaultFeatures(android.content.Context);
+    method public android.transition.Transition getEnterTransition();
+    method public android.transition.Transition getExitTransition();
+    method protected final int getFeatures();
+    method protected final int getForcedWindowFlags();
+    method @Nullable public android.view.WindowInsetsController getInsetsController();
+    method @NonNull public abstract android.view.LayoutInflater getLayoutInflater();
+    method protected final int getLocalFeatures();
+    method public android.media.session.MediaController getMediaController();
+    method @ColorInt public abstract int getNavigationBarColor();
+    method @ColorInt public int getNavigationBarDividerColor();
+    method public android.transition.Transition getReenterTransition();
+    method public android.transition.Transition getReturnTransition();
+    method @Nullable public android.view.AttachedSurfaceControl getRootSurfaceControl();
+    method public android.transition.Transition getSharedElementEnterTransition();
+    method public android.transition.Transition getSharedElementExitTransition();
+    method public android.transition.Transition getSharedElementReenterTransition();
+    method public android.transition.Transition getSharedElementReturnTransition();
+    method public boolean getSharedElementsUseOverlay();
+    method @ColorInt public abstract int getStatusBarColor();
+    method @NonNull public java.util.List<android.graphics.Rect> getSystemGestureExclusionRects();
+    method public long getTransitionBackgroundFadeDuration();
+    method public android.transition.TransitionManager getTransitionManager();
+    method public abstract int getVolumeControlStream();
+    method public android.view.WindowManager getWindowManager();
+    method public final android.content.res.TypedArray getWindowStyle();
+    method public final boolean hasChildren();
+    method public boolean hasFeature(int);
+    method protected final boolean hasSoftInputMode();
+    method public void injectInputEvent(android.view.InputEvent);
+    method public abstract void invalidatePanelMenu(int);
+    method public final boolean isActive();
+    method public abstract boolean isFloating();
+    method public boolean isNavigationBarContrastEnforced();
+    method public abstract boolean isShortcutKey(int, android.view.KeyEvent);
+    method public boolean isStatusBarContrastEnforced();
+    method public boolean isWideColorGamut();
+    method public final void makeActive();
+    method protected abstract void onActive();
+    method public abstract void onConfigurationChanged(android.content.res.Configuration);
+    method public abstract void openPanel(int, android.view.KeyEvent);
+    method public abstract android.view.View peekDecorView();
+    method public abstract boolean performContextMenuIdentifierAction(int, int);
+    method public abstract boolean performPanelIdentifierAction(int, int, int);
+    method public abstract boolean performPanelShortcut(int, int, android.view.KeyEvent, int);
+    method public void registerScrollCaptureCallback(@NonNull android.view.ScrollCaptureCallback);
+    method public final void removeOnFrameMetricsAvailableListener(android.view.Window.OnFrameMetricsAvailableListener);
+    method public boolean requestFeature(int);
+    method @NonNull public final <T extends android.view.View> T requireViewById(@IdRes int);
+    method public abstract void restoreHierarchyState(android.os.Bundle);
+    method public abstract android.os.Bundle saveHierarchyState();
+    method public void setAllowEnterTransitionOverlap(boolean);
+    method public void setAllowReturnTransitionOverlap(boolean);
+    method public void setAttributes(android.view.WindowManager.LayoutParams);
+    method public void setBackgroundBlurRadius(int);
+    method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setBackgroundDrawableResource(@DrawableRes int);
+    method public void setCallback(android.view.Window.Callback);
+    method public abstract void setChildDrawable(int, android.graphics.drawable.Drawable);
+    method public abstract void setChildInt(int, int);
+    method public void setClipToOutline(boolean);
+    method public void setColorMode(int);
+    method public void setContainer(android.view.Window);
+    method public abstract void setContentView(@LayoutRes int);
+    method public abstract void setContentView(android.view.View);
+    method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
+    method public abstract void setDecorCaptionShade(int);
+    method public void setDecorFitsSystemWindows(boolean);
+    method protected void setDefaultWindowFormat(int);
+    method public void setDimAmount(float);
+    method public void setElevation(float);
+    method public void setEnterTransition(android.transition.Transition);
+    method public void setExitTransition(android.transition.Transition);
+    method public abstract void setFeatureDrawable(int, android.graphics.drawable.Drawable);
+    method public abstract void setFeatureDrawableAlpha(int, int);
+    method public abstract void setFeatureDrawableResource(int, @DrawableRes int);
+    method public abstract void setFeatureDrawableUri(int, android.net.Uri);
+    method public abstract void setFeatureInt(int, int);
+    method public void setFlags(int, int);
+    method public void setFormat(int);
+    method public void setGravity(int);
+    method @RequiresPermission(android.Manifest.permission.HIDE_OVERLAY_WINDOWS) public final void setHideOverlayWindows(boolean);
+    method public void setIcon(@DrawableRes int);
+    method public void setLayout(int, int);
+    method public void setLocalFocus(boolean, boolean);
+    method public void setLogo(@DrawableRes int);
+    method public void setMediaController(android.media.session.MediaController);
+    method public abstract void setNavigationBarColor(@ColorInt int);
+    method public void setNavigationBarContrastEnforced(boolean);
+    method public void setNavigationBarDividerColor(@ColorInt int);
+    method public void setPreferMinimalPostProcessing(boolean);
+    method public void setReenterTransition(android.transition.Transition);
+    method public abstract void setResizingCaptionDrawable(android.graphics.drawable.Drawable);
+    method public final void setRestrictedCaptionAreaListener(android.view.Window.OnRestrictedCaptionAreaChangedListener);
+    method public void setReturnTransition(android.transition.Transition);
+    method public void setSharedElementEnterTransition(android.transition.Transition);
+    method public void setSharedElementExitTransition(android.transition.Transition);
+    method public void setSharedElementReenterTransition(android.transition.Transition);
+    method public void setSharedElementReturnTransition(android.transition.Transition);
+    method public void setSharedElementsUseOverlay(boolean);
+    method public void setSoftInputMode(int);
+    method public abstract void setStatusBarColor(@ColorInt int);
+    method public void setStatusBarContrastEnforced(boolean);
+    method public void setSustainedPerformanceMode(boolean);
+    method public void setSystemGestureExclusionRects(@NonNull java.util.List<android.graphics.Rect>);
+    method public abstract void setTitle(CharSequence);
+    method @Deprecated public abstract void setTitleColor(@ColorInt int);
+    method public void setTransitionBackgroundFadeDuration(long);
+    method public void setTransitionManager(android.transition.TransitionManager);
+    method public void setType(int);
+    method public void setUiOptions(int);
+    method public void setUiOptions(int, int);
+    method public abstract void setVolumeControlStream(int);
+    method public void setWindowAnimations(@StyleRes int);
+    method public void setWindowManager(android.view.WindowManager, android.os.IBinder, String);
+    method public void setWindowManager(android.view.WindowManager, android.os.IBinder, String, boolean);
+    method public abstract boolean superDispatchGenericMotionEvent(android.view.MotionEvent);
+    method public abstract boolean superDispatchKeyEvent(android.view.KeyEvent);
+    method public abstract boolean superDispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public abstract boolean superDispatchTouchEvent(android.view.MotionEvent);
+    method public abstract boolean superDispatchTrackballEvent(android.view.MotionEvent);
+    method public abstract void takeInputQueue(android.view.InputQueue.Callback);
+    method public abstract void takeKeyEvents(boolean);
+    method public abstract void takeSurface(android.view.SurfaceHolder.Callback2);
+    method public abstract void togglePanel(int, android.view.KeyEvent);
+    method public void unregisterScrollCaptureCallback(@NonNull android.view.ScrollCaptureCallback);
+    field public static final int DECOR_CAPTION_SHADE_AUTO = 0; // 0x0
+    field public static final int DECOR_CAPTION_SHADE_DARK = 2; // 0x2
+    field public static final int DECOR_CAPTION_SHADE_LIGHT = 1; // 0x1
+    field @Deprecated protected static final int DEFAULT_FEATURES = 65; // 0x41
+    field public static final int FEATURE_ACTION_BAR = 8; // 0x8
+    field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
+    field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+    field public static final int FEATURE_ACTIVITY_TRANSITIONS = 13; // 0xd
+    field public static final int FEATURE_CONTENT_TRANSITIONS = 12; // 0xc
+    field public static final int FEATURE_CONTEXT_MENU = 6; // 0x6
+    field public static final int FEATURE_CUSTOM_TITLE = 7; // 0x7
+    field @Deprecated public static final int FEATURE_INDETERMINATE_PROGRESS = 5; // 0x5
+    field public static final int FEATURE_LEFT_ICON = 3; // 0x3
+    field public static final int FEATURE_NO_TITLE = 1; // 0x1
+    field public static final int FEATURE_OPTIONS_PANEL = 0; // 0x0
+    field @Deprecated public static final int FEATURE_PROGRESS = 2; // 0x2
+    field public static final int FEATURE_RIGHT_ICON = 4; // 0x4
+    field @Deprecated public static final int FEATURE_SWIPE_TO_DISMISS = 11; // 0xb
+    field public static final int ID_ANDROID_CONTENT = 16908290; // 0x1020002
+    field public static final String NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME = "android:navigation:background";
+    field @Deprecated public static final int PROGRESS_END = 10000; // 0x2710
+    field @Deprecated public static final int PROGRESS_INDETERMINATE_OFF = -4; // 0xfffffffc
+    field @Deprecated public static final int PROGRESS_INDETERMINATE_ON = -3; // 0xfffffffd
+    field @Deprecated public static final int PROGRESS_SECONDARY_END = 30000; // 0x7530
+    field @Deprecated public static final int PROGRESS_SECONDARY_START = 20000; // 0x4e20
+    field @Deprecated public static final int PROGRESS_START = 0; // 0x0
+    field @Deprecated public static final int PROGRESS_VISIBILITY_OFF = -2; // 0xfffffffe
+    field @Deprecated public static final int PROGRESS_VISIBILITY_ON = -1; // 0xffffffff
+    field public static final String STATUS_BAR_BACKGROUND_TRANSITION_NAME = "android:status:background";
+  }
+
+  public static interface Window.Callback {
+    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public boolean dispatchTouchEvent(android.view.MotionEvent);
+    method public boolean dispatchTrackballEvent(android.view.MotionEvent);
+    method public void onActionModeFinished(android.view.ActionMode);
+    method public void onActionModeStarted(android.view.ActionMode);
+    method public void onAttachedToWindow();
+    method public void onContentChanged();
+    method public boolean onCreatePanelMenu(int, @NonNull android.view.Menu);
+    method @Nullable public android.view.View onCreatePanelView(int);
+    method public void onDetachedFromWindow();
+    method public boolean onMenuItemSelected(int, @NonNull android.view.MenuItem);
+    method public boolean onMenuOpened(int, @NonNull android.view.Menu);
+    method public void onPanelClosed(int, @NonNull android.view.Menu);
+    method public default void onPointerCaptureChanged(boolean);
+    method public boolean onPreparePanel(int, @Nullable android.view.View, @NonNull android.view.Menu);
+    method public default void onProvideKeyboardShortcuts(java.util.List<android.view.KeyboardShortcutGroup>, @Nullable android.view.Menu, int);
+    method public boolean onSearchRequested();
+    method public boolean onSearchRequested(android.view.SearchEvent);
+    method public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams);
+    method public void onWindowFocusChanged(boolean);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
+    method @Nullable public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
+  }
+
+  public static interface Window.OnFrameMetricsAvailableListener {
+    method public void onFrameMetricsAvailable(android.view.Window, android.view.FrameMetrics, int);
+  }
+
+  public static interface Window.OnRestrictedCaptionAreaChangedListener {
+    method public void onRestrictedCaptionAreaChanged(android.graphics.Rect);
+  }
+
+  public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowAnimationFrameStats> CREATOR;
+  }
+
+  public final class WindowContentFrameStats extends android.view.FrameStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getFramePostedTimeNano(int);
+    method public long getFrameReadyTimeNano(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowContentFrameStats> CREATOR;
+  }
+
+  public class WindowId implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isFocused();
+    method public void registerFocusObserver(android.view.WindowId.FocusObserver);
+    method public void unregisterFocusObserver(android.view.WindowId.FocusObserver);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowId> CREATOR;
+  }
+
+  public abstract static class WindowId.FocusObserver {
+    ctor public WindowId.FocusObserver();
+    method public abstract void onFocusGained(android.view.WindowId);
+    method public abstract void onFocusLost(android.view.WindowId);
+  }
+
+  public final class WindowInsets {
+    ctor public WindowInsets(android.view.WindowInsets);
+    method @Deprecated @NonNull public android.view.WindowInsets consumeDisplayCutout();
+    method @Deprecated @NonNull public android.view.WindowInsets consumeStableInsets();
+    method @Deprecated @NonNull public android.view.WindowInsets consumeSystemWindowInsets();
+    method @Nullable public android.view.DisplayCutout getDisplayCutout();
+    method @NonNull public android.graphics.Insets getInsets(int);
+    method @NonNull public android.graphics.Insets getInsetsIgnoringVisibility(int);
+    method @Deprecated @NonNull public android.graphics.Insets getMandatorySystemGestureInsets();
+    method @Nullable public android.graphics.Rect getPrivacyIndicatorBounds();
+    method @Nullable public android.view.RoundedCorner getRoundedCorner(int);
+    method @Deprecated public int getStableInsetBottom();
+    method @Deprecated public int getStableInsetLeft();
+    method @Deprecated public int getStableInsetRight();
+    method @Deprecated public int getStableInsetTop();
+    method @Deprecated @NonNull public android.graphics.Insets getStableInsets();
+    method @Deprecated @NonNull public android.graphics.Insets getSystemGestureInsets();
+    method @Deprecated public int getSystemWindowInsetBottom();
+    method @Deprecated public int getSystemWindowInsetLeft();
+    method @Deprecated public int getSystemWindowInsetRight();
+    method @Deprecated public int getSystemWindowInsetTop();
+    method @Deprecated @NonNull public android.graphics.Insets getSystemWindowInsets();
+    method @Deprecated @NonNull public android.graphics.Insets getTappableElementInsets();
+    method public boolean hasInsets();
+    method @Deprecated public boolean hasStableInsets();
+    method @Deprecated public boolean hasSystemWindowInsets();
+    method @NonNull public android.view.WindowInsets inset(@NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets inset(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public boolean isConsumed();
+    method public boolean isRound();
+    method public boolean isVisible(int);
+    method @Deprecated @NonNull public android.view.WindowInsets replaceSystemWindowInsets(int, int, int, int);
+    method @Deprecated @NonNull public android.view.WindowInsets replaceSystemWindowInsets(android.graphics.Rect);
+    field @NonNull public static final android.view.WindowInsets CONSUMED;
+  }
+
+  public static final class WindowInsets.Builder {
+    ctor public WindowInsets.Builder();
+    ctor public WindowInsets.Builder(@NonNull android.view.WindowInsets);
+    method @NonNull public android.view.WindowInsets build();
+    method @NonNull public android.view.WindowInsets.Builder setDisplayCutout(@Nullable android.view.DisplayCutout);
+    method @NonNull public android.view.WindowInsets.Builder setInsets(int, @NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets.Builder setInsetsIgnoringVisibility(int, @NonNull android.graphics.Insets) throws java.lang.IllegalArgumentException;
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setMandatorySystemGestureInsets(@NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets.Builder setPrivacyIndicatorBounds(@Nullable android.graphics.Rect);
+    method @NonNull public android.view.WindowInsets.Builder setRoundedCorner(int, @Nullable android.view.RoundedCorner);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setStableInsets(@NonNull android.graphics.Insets);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setSystemGestureInsets(@NonNull android.graphics.Insets);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setSystemWindowInsets(@NonNull android.graphics.Insets);
+    method @Deprecated @NonNull public android.view.WindowInsets.Builder setTappableElementInsets(@NonNull android.graphics.Insets);
+    method @NonNull public android.view.WindowInsets.Builder setVisible(int, boolean);
+  }
+
+  public static final class WindowInsets.Side {
+    method public static int all();
+    field public static final int BOTTOM = 8; // 0x8
+    field public static final int LEFT = 1; // 0x1
+    field public static final int RIGHT = 4; // 0x4
+    field public static final int TOP = 2; // 0x2
+  }
+
+  public static final class WindowInsets.Type {
+    method public static int captionBar();
+    method public static int displayCutout();
+    method public static int ime();
+    method public static int mandatorySystemGestures();
+    method public static int navigationBars();
+    method public static int statusBars();
+    method public static int systemBars();
+    method public static int systemGestures();
+    method public static int tappableElement();
+  }
+
+  public final class WindowInsetsAnimation {
+    ctor public WindowInsetsAnimation(int, @Nullable android.view.animation.Interpolator, long);
+    method @FloatRange(from=0.0f, to=1.0f) public float getAlpha();
+    method public long getDurationMillis();
+    method @FloatRange(from=0.0f, to=1.0f) public float getFraction();
+    method public float getInterpolatedFraction();
+    method @Nullable public android.view.animation.Interpolator getInterpolator();
+    method public int getTypeMask();
+    method public void setAlpha(@FloatRange(from=0.0f, to=1.0f) float);
+    method public void setFraction(@FloatRange(from=0.0f, to=1.0f) float);
+  }
+
+  public static final class WindowInsetsAnimation.Bounds {
+    ctor public WindowInsetsAnimation.Bounds(@NonNull android.graphics.Insets, @NonNull android.graphics.Insets);
+    method @NonNull public android.graphics.Insets getLowerBound();
+    method @NonNull public android.graphics.Insets getUpperBound();
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds inset(@NonNull android.graphics.Insets);
+  }
+
+  public abstract static class WindowInsetsAnimation.Callback {
+    ctor public WindowInsetsAnimation.Callback(int);
+    method public final int getDispatchMode();
+    method public void onEnd(@NonNull android.view.WindowInsetsAnimation);
+    method public void onPrepare(@NonNull android.view.WindowInsetsAnimation);
+    method @NonNull public abstract android.view.WindowInsets onProgress(@NonNull android.view.WindowInsets, @NonNull java.util.List<android.view.WindowInsetsAnimation>);
+    method @NonNull public android.view.WindowInsetsAnimation.Bounds onStart(@NonNull android.view.WindowInsetsAnimation, @NonNull android.view.WindowInsetsAnimation.Bounds);
+    field public static final int DISPATCH_MODE_CONTINUE_ON_SUBTREE = 1; // 0x1
+    field public static final int DISPATCH_MODE_STOP = 0; // 0x0
+  }
+
+  public interface WindowInsetsAnimationControlListener {
+    method public void onCancelled(@Nullable android.view.WindowInsetsAnimationController);
+    method public void onFinished(@NonNull android.view.WindowInsetsAnimationController);
+    method public void onReady(@NonNull android.view.WindowInsetsAnimationController, int);
+  }
+
+  public interface WindowInsetsAnimationController {
+    method public void finish(boolean);
+    method public float getCurrentAlpha();
+    method @FloatRange(from=0.0f, to=1.0f) public float getCurrentFraction();
+    method @NonNull public android.graphics.Insets getCurrentInsets();
+    method @NonNull public android.graphics.Insets getHiddenStateInsets();
+    method @NonNull public android.graphics.Insets getShownStateInsets();
+    method public int getTypes();
+    method public boolean isCancelled();
+    method public boolean isFinished();
+    method public default boolean isReady();
+    method public void setInsetsAndAlpha(@Nullable android.graphics.Insets, @FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=0.0f, to=1.0f) float);
+  }
+
+  public interface WindowInsetsController {
+    method public void addOnControllableInsetsChangedListener(@NonNull android.view.WindowInsetsController.OnControllableInsetsChangedListener);
+    method public void controlWindowInsetsAnimation(int, long, @Nullable android.view.animation.Interpolator, @Nullable android.os.CancellationSignal, @NonNull android.view.WindowInsetsAnimationControlListener);
+    method public int getSystemBarsAppearance();
+    method public int getSystemBarsBehavior();
+    method public void hide(int);
+    method public void removeOnControllableInsetsChangedListener(@NonNull android.view.WindowInsetsController.OnControllableInsetsChangedListener);
+    method public void setSystemBarsAppearance(int, int);
+    method public void setSystemBarsBehavior(int);
+    method public void show(int);
+    field public static final int APPEARANCE_LIGHT_NAVIGATION_BARS = 16; // 0x10
+    field public static final int APPEARANCE_LIGHT_STATUS_BARS = 8; // 0x8
+    field public static final int BEHAVIOR_DEFAULT = 1; // 0x1
+    field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_SWIPE = 1; // 0x1
+    field @Deprecated public static final int BEHAVIOR_SHOW_BARS_BY_TOUCH = 0; // 0x0
+    field public static final int BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE = 2; // 0x2
+  }
+
+  public static interface WindowInsetsController.OnControllableInsetsChangedListener {
+    method public void onControllableInsetsChanged(@NonNull android.view.WindowInsetsController, int);
+  }
+
+  public interface WindowManager extends android.view.ViewManager {
+    method public default void addCrossWindowBlurEnabledListener(@NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method public default void addCrossWindowBlurEnabledListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @NonNull public default android.view.WindowMetrics getCurrentWindowMetrics();
+    method @Deprecated public android.view.Display getDefaultDisplay();
+    method @NonNull public default android.view.WindowMetrics getMaximumWindowMetrics();
+    method public default boolean isCrossWindowBlurEnabled();
+    method public default void removeCrossWindowBlurEnabledListener(@NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method public void removeViewImmediate(android.view.View);
+  }
+
+  public static class WindowManager.BadTokenException extends java.lang.RuntimeException {
+    ctor public WindowManager.BadTokenException();
+    ctor public WindowManager.BadTokenException(String);
+  }
+
+  public static class WindowManager.InvalidDisplayException extends java.lang.RuntimeException {
+    ctor public WindowManager.InvalidDisplayException();
+    ctor public WindowManager.InvalidDisplayException(String);
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    ctor public WindowManager.LayoutParams();
+    ctor public WindowManager.LayoutParams(int);
+    ctor public WindowManager.LayoutParams(int, int);
+    ctor public WindowManager.LayoutParams(int, int, int);
+    ctor public WindowManager.LayoutParams(int, int, int, int, int);
+    ctor public WindowManager.LayoutParams(int, int, int, int, int, int, int);
+    ctor public WindowManager.LayoutParams(android.os.Parcel);
+    method public final int copyFrom(android.view.WindowManager.LayoutParams);
+    method public String debug(String);
+    method public int describeContents();
+    method public int getBlurBehindRadius();
+    method public int getColorMode();
+    method public int getFitInsetsSides();
+    method public int getFitInsetsTypes();
+    method public final CharSequence getTitle();
+    method public boolean isFitInsetsIgnoringVisibility();
+    method public static boolean mayUseInputMethod(int);
+    method public void setBlurBehindRadius(@IntRange(from=0) int);
+    method public void setColorMode(int);
+    method public void setFitInsetsIgnoringVisibility(boolean);
+    method public void setFitInsetsSides(int);
+    method public void setFitInsetsTypes(int);
+    method public final void setTitle(CharSequence);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALPHA_CHANGED = 128; // 0x80
+    field public static final int ANIMATION_CHANGED = 16; // 0x10
+    field public static final float BRIGHTNESS_OVERRIDE_FULL = 1.0f;
+    field public static final float BRIGHTNESS_OVERRIDE_NONE = -1.0f;
+    field public static final float BRIGHTNESS_OVERRIDE_OFF = 0.0f;
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.WindowManager.LayoutParams> CREATOR;
+    field public static final int DIM_AMOUNT_CHANGED = 32; // 0x20
+    field public static final int FIRST_APPLICATION_WINDOW = 1; // 0x1
+    field public static final int FIRST_SUB_WINDOW = 1000; // 0x3e8
+    field public static final int FIRST_SYSTEM_WINDOW = 2000; // 0x7d0
+    field public static final int FLAGS_CHANGED = 4; // 0x4
+    field public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 1; // 0x1
+    field public static final int FLAG_ALT_FOCUSABLE_IM = 131072; // 0x20000
+    field public static final int FLAG_BLUR_BEHIND = 4; // 0x4
+    field public static final int FLAG_DIM_BEHIND = 2; // 0x2
+    field @Deprecated public static final int FLAG_DISMISS_KEYGUARD = 4194304; // 0x400000
+    field @Deprecated public static final int FLAG_DITHER = 4096; // 0x1000
+    field public static final int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = -2147483648; // 0x80000000
+    field @Deprecated public static final int FLAG_FORCE_NOT_FULLSCREEN = 2048; // 0x800
+    field @Deprecated public static final int FLAG_FULLSCREEN = 1024; // 0x400
+    field public static final int FLAG_HARDWARE_ACCELERATED = 16777216; // 0x1000000
+    field public static final int FLAG_IGNORE_CHEEK_PRESSES = 32768; // 0x8000
+    field public static final int FLAG_KEEP_SCREEN_ON = 128; // 0x80
+    field @Deprecated public static final int FLAG_LAYOUT_ATTACHED_IN_DECOR = 1073741824; // 0x40000000
+    field @Deprecated public static final int FLAG_LAYOUT_INSET_DECOR = 65536; // 0x10000
+    field @Deprecated public static final int FLAG_LAYOUT_IN_OVERSCAN = 33554432; // 0x2000000
+    field public static final int FLAG_LAYOUT_IN_SCREEN = 256; // 0x100
+    field public static final int FLAG_LAYOUT_NO_LIMITS = 512; // 0x200
+    field public static final int FLAG_LOCAL_FOCUS_MODE = 268435456; // 0x10000000
+    field public static final int FLAG_NOT_FOCUSABLE = 8; // 0x8
+    field public static final int FLAG_NOT_TOUCHABLE = 16; // 0x10
+    field public static final int FLAG_NOT_TOUCH_MODAL = 32; // 0x20
+    field public static final int FLAG_SCALED = 16384; // 0x4000
+    field public static final int FLAG_SECURE = 8192; // 0x2000
+    field public static final int FLAG_SHOW_WALLPAPER = 1048576; // 0x100000
+    field @Deprecated public static final int FLAG_SHOW_WHEN_LOCKED = 524288; // 0x80000
+    field public static final int FLAG_SPLIT_TOUCH = 8388608; // 0x800000
+    field @Deprecated public static final int FLAG_TOUCHABLE_WHEN_WAKING = 64; // 0x40
+    field @Deprecated public static final int FLAG_TRANSLUCENT_NAVIGATION = 134217728; // 0x8000000
+    field @Deprecated public static final int FLAG_TRANSLUCENT_STATUS = 67108864; // 0x4000000
+    field @Deprecated public static final int FLAG_TURN_SCREEN_ON = 2097152; // 0x200000
+    field public static final int FLAG_WATCH_OUTSIDE_TOUCH = 262144; // 0x40000
+    field public static final int FORMAT_CHANGED = 8; // 0x8
+    field public static final int LAST_APPLICATION_WINDOW = 99; // 0x63
+    field public static final int LAST_SUB_WINDOW = 1999; // 0x7cf
+    field public static final int LAST_SYSTEM_WINDOW = 2999; // 0xbb7
+    field public static final int LAYOUT_CHANGED = 1; // 0x1
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS = 3; // 0x3
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT = 0; // 0x0
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER = 2; // 0x2
+    field public static final int LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES = 1; // 0x1
+    field public static final int MEMORY_TYPE_CHANGED = 256; // 0x100
+    field @Deprecated public static final int MEMORY_TYPE_GPU = 2; // 0x2
+    field @Deprecated public static final int MEMORY_TYPE_HARDWARE = 1; // 0x1
+    field @Deprecated public static final int MEMORY_TYPE_NORMAL = 0; // 0x0
+    field @Deprecated public static final int MEMORY_TYPE_PUSH_BUFFERS = 3; // 0x3
+    field public static final int ROTATION_ANIMATION_CHANGED = 4096; // 0x1000
+    field public static final int ROTATION_ANIMATION_CROSSFADE = 1; // 0x1
+    field public static final int ROTATION_ANIMATION_JUMPCUT = 2; // 0x2
+    field public static final int ROTATION_ANIMATION_ROTATE = 0; // 0x0
+    field public static final int ROTATION_ANIMATION_SEAMLESS = 3; // 0x3
+    field public static final int SCREEN_BRIGHTNESS_CHANGED = 2048; // 0x800
+    field public static final int SCREEN_ORIENTATION_CHANGED = 1024; // 0x400
+    field public static final int SOFT_INPUT_ADJUST_NOTHING = 48; // 0x30
+    field public static final int SOFT_INPUT_ADJUST_PAN = 32; // 0x20
+    field @Deprecated public static final int SOFT_INPUT_ADJUST_RESIZE = 16; // 0x10
+    field public static final int SOFT_INPUT_ADJUST_UNSPECIFIED = 0; // 0x0
+    field public static final int SOFT_INPUT_IS_FORWARD_NAVIGATION = 256; // 0x100
+    field public static final int SOFT_INPUT_MASK_ADJUST = 240; // 0xf0
+    field public static final int SOFT_INPUT_MASK_STATE = 15; // 0xf
+    field public static final int SOFT_INPUT_MODE_CHANGED = 512; // 0x200
+    field public static final int SOFT_INPUT_STATE_ALWAYS_HIDDEN = 3; // 0x3
+    field public static final int SOFT_INPUT_STATE_ALWAYS_VISIBLE = 5; // 0x5
+    field public static final int SOFT_INPUT_STATE_HIDDEN = 2; // 0x2
+    field public static final int SOFT_INPUT_STATE_UNCHANGED = 1; // 0x1
+    field public static final int SOFT_INPUT_STATE_UNSPECIFIED = 0; // 0x0
+    field public static final int SOFT_INPUT_STATE_VISIBLE = 4; // 0x4
+    field public static final int TITLE_CHANGED = 64; // 0x40
+    field public static final int TYPE_ACCESSIBILITY_OVERLAY = 2032; // 0x7f0
+    field public static final int TYPE_APPLICATION = 2; // 0x2
+    field public static final int TYPE_APPLICATION_ATTACHED_DIALOG = 1003; // 0x3eb
+    field public static final int TYPE_APPLICATION_MEDIA = 1001; // 0x3e9
+    field public static final int TYPE_APPLICATION_OVERLAY = 2038; // 0x7f6
+    field public static final int TYPE_APPLICATION_PANEL = 1000; // 0x3e8
+    field public static final int TYPE_APPLICATION_STARTING = 3; // 0x3
+    field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
+    field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
+    field public static final int TYPE_CHANGED = 2; // 0x2
+    field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
+    field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
+    field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
+    field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
+    field @Deprecated public static final int TYPE_PHONE = 2002; // 0x7d2
+    field @Deprecated public static final int TYPE_PRIORITY_PHONE = 2007; // 0x7d7
+    field public static final int TYPE_PRIVATE_PRESENTATION = 2030; // 0x7ee
+    field public static final int TYPE_SEARCH_BAR = 2001; // 0x7d1
+    field public static final int TYPE_STATUS_BAR = 2000; // 0x7d0
+    field @Deprecated public static final int TYPE_SYSTEM_ALERT = 2003; // 0x7d3
+    field public static final int TYPE_SYSTEM_DIALOG = 2008; // 0x7d8
+    field @Deprecated public static final int TYPE_SYSTEM_ERROR = 2010; // 0x7da
+    field @Deprecated public static final int TYPE_SYSTEM_OVERLAY = 2006; // 0x7d6
+    field @Deprecated public static final int TYPE_TOAST = 2005; // 0x7d5
+    field public static final int TYPE_WALLPAPER = 2013; // 0x7dd
+    field public float alpha;
+    field public float buttonBrightness;
+    field public float dimAmount;
+    field public int flags;
+    field public int format;
+    field public int gravity;
+    field public float horizontalMargin;
+    field public float horizontalWeight;
+    field public int layoutInDisplayCutoutMode;
+    field @Deprecated public int memoryType;
+    field public String packageName;
+    field public boolean preferMinimalPostProcessing;
+    field public int preferredDisplayModeId;
+    field @Deprecated public float preferredRefreshRate;
+    field public int rotationAnimation;
+    field public float screenBrightness;
+    field public int screenOrientation;
+    field public int softInputMode;
+    field @Deprecated public int systemUiVisibility;
+    field public android.os.IBinder token;
+    field public int type;
+    field public float verticalMargin;
+    field public float verticalWeight;
+    field public int windowAnimations;
+    field public int x;
+    field public int y;
+  }
+
+  public final class WindowMetrics {
+    ctor public WindowMetrics(@NonNull android.graphics.Rect, @NonNull android.view.WindowInsets);
+    method @NonNull public android.graphics.Rect getBounds();
+    method @NonNull public android.view.WindowInsets getWindowInsets();
+  }
+
+}
+
+package android.view.accessibility {
+
+  public final class AccessibilityEvent extends android.view.accessibility.AccessibilityRecord implements android.os.Parcelable {
+    ctor public AccessibilityEvent();
+    ctor public AccessibilityEvent(int);
+    ctor public AccessibilityEvent(@NonNull android.view.accessibility.AccessibilityEvent);
+    method public void appendRecord(android.view.accessibility.AccessibilityRecord);
+    method public int describeContents();
+    method public static String eventTypeToString(int);
+    method public int getAction();
+    method public int getContentChangeTypes();
+    method public long getEventTime();
+    method public int getEventType();
+    method public int getMovementGranularity();
+    method public CharSequence getPackageName();
+    method public android.view.accessibility.AccessibilityRecord getRecord(int);
+    method public int getRecordCount();
+    method public int getWindowChanges();
+    method public void initFromParcel(android.os.Parcel);
+    method public static android.view.accessibility.AccessibilityEvent obtain(int);
+    method public static android.view.accessibility.AccessibilityEvent obtain(android.view.accessibility.AccessibilityEvent);
+    method public static android.view.accessibility.AccessibilityEvent obtain();
+    method public void setAction(int);
+    method public void setContentChangeTypes(int);
+    method public void setEventTime(long);
+    method public void setEventType(int);
+    method public void setMovementGranularity(int);
+    method public void setPackageName(CharSequence);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION = 4; // 0x4
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_CANCELLED = 512; // 0x200
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_DROPPED = 256; // 0x100
+    field public static final int CONTENT_CHANGE_TYPE_DRAG_STARTED = 128; // 0x80
+    field public static final int CONTENT_CHANGE_TYPE_PANE_APPEARED = 16; // 0x10
+    field public static final int CONTENT_CHANGE_TYPE_PANE_DISAPPEARED = 32; // 0x20
+    field public static final int CONTENT_CHANGE_TYPE_PANE_TITLE = 8; // 0x8
+    field public static final int CONTENT_CHANGE_TYPE_STATE_DESCRIPTION = 64; // 0x40
+    field public static final int CONTENT_CHANGE_TYPE_SUBTREE = 1; // 0x1
+    field public static final int CONTENT_CHANGE_TYPE_TEXT = 2; // 0x2
+    field public static final int CONTENT_CHANGE_TYPE_UNDEFINED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityEvent> CREATOR;
+    field public static final int INVALID_POSITION = -1; // 0xffffffff
+    field @Deprecated public static final int MAX_TEXT_LENGTH = 500; // 0x1f4
+    field public static final int TYPES_ALL_MASK = -1; // 0xffffffff
+    field public static final int TYPE_ANNOUNCEMENT = 16384; // 0x4000
+    field public static final int TYPE_ASSIST_READING_CONTEXT = 16777216; // 0x1000000
+    field public static final int TYPE_GESTURE_DETECTION_END = 524288; // 0x80000
+    field public static final int TYPE_GESTURE_DETECTION_START = 262144; // 0x40000
+    field public static final int TYPE_NOTIFICATION_STATE_CHANGED = 64; // 0x40
+    field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_END = 1024; // 0x400
+    field public static final int TYPE_TOUCH_EXPLORATION_GESTURE_START = 512; // 0x200
+    field public static final int TYPE_TOUCH_INTERACTION_END = 2097152; // 0x200000
+    field public static final int TYPE_TOUCH_INTERACTION_START = 1048576; // 0x100000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUSED = 32768; // 0x8000
+    field public static final int TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED = 65536; // 0x10000
+    field public static final int TYPE_VIEW_CLICKED = 1; // 0x1
+    field public static final int TYPE_VIEW_CONTEXT_CLICKED = 8388608; // 0x800000
+    field public static final int TYPE_VIEW_FOCUSED = 8; // 0x8
+    field public static final int TYPE_VIEW_HOVER_ENTER = 128; // 0x80
+    field public static final int TYPE_VIEW_HOVER_EXIT = 256; // 0x100
+    field public static final int TYPE_VIEW_LONG_CLICKED = 2; // 0x2
+    field public static final int TYPE_VIEW_SCROLLED = 4096; // 0x1000
+    field public static final int TYPE_VIEW_SELECTED = 4; // 0x4
+    field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10
+    field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
+    field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+    field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
+    field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
+    field public static final int TYPE_WINDOW_STATE_CHANGED = 32; // 0x20
+    field public static final int WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED = 128; // 0x80
+    field public static final int WINDOWS_CHANGE_ACTIVE = 32; // 0x20
+    field public static final int WINDOWS_CHANGE_ADDED = 1; // 0x1
+    field public static final int WINDOWS_CHANGE_BOUNDS = 8; // 0x8
+    field public static final int WINDOWS_CHANGE_CHILDREN = 512; // 0x200
+    field public static final int WINDOWS_CHANGE_FOCUSED = 64; // 0x40
+    field public static final int WINDOWS_CHANGE_LAYER = 16; // 0x10
+    field public static final int WINDOWS_CHANGE_PARENT = 256; // 0x100
+    field public static final int WINDOWS_CHANGE_PIP = 1024; // 0x400
+    field public static final int WINDOWS_CHANGE_REMOVED = 2; // 0x2
+    field public static final int WINDOWS_CHANGE_TITLE = 4; // 0x4
+  }
+
+  public interface AccessibilityEventSource {
+    method public void sendAccessibilityEvent(int);
+    method public void sendAccessibilityEventUnchecked(android.view.accessibility.AccessibilityEvent);
+  }
+
+  public final class AccessibilityManager {
+    method public void addAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
+    method public boolean addAccessibilityStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+    method public void addAccessibilityStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener, @Nullable android.os.Handler);
+    method public boolean addTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
+    method public void addTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener, @Nullable android.os.Handler);
+    method @ColorInt public int getAccessibilityFocusColor();
+    method public int getAccessibilityFocusStrokeWidth();
+    method @Deprecated public java.util.List<android.content.pm.ServiceInfo> getAccessibilityServiceList();
+    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int);
+    method public java.util.List<android.accessibilityservice.AccessibilityServiceInfo> getInstalledAccessibilityServiceList();
+    method public int getRecommendedTimeoutMillis(int, int);
+    method public void interrupt();
+    method public static boolean isAccessibilityButtonSupported();
+    method public boolean isEnabled();
+    method public boolean isTouchExplorationEnabled();
+    method public void removeAccessibilityRequestPreparer(android.view.accessibility.AccessibilityRequestPreparer);
+    method public boolean removeAccessibilityStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener);
+    method public boolean removeTouchExplorationStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener);
+    method public void sendAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    field public static final int FLAG_CONTENT_CONTROLS = 4; // 0x4
+    field public static final int FLAG_CONTENT_ICONS = 1; // 0x1
+    field public static final int FLAG_CONTENT_TEXT = 2; // 0x2
+  }
+
+  public static interface AccessibilityManager.AccessibilityStateChangeListener {
+    method public void onAccessibilityStateChanged(boolean);
+  }
+
+  public static interface AccessibilityManager.TouchExplorationStateChangeListener {
+    method public void onTouchExplorationStateChanged(boolean);
+  }
+
+  public class AccessibilityNodeInfo implements android.os.Parcelable {
+    ctor public AccessibilityNodeInfo();
+    ctor public AccessibilityNodeInfo(@NonNull android.view.View);
+    ctor public AccessibilityNodeInfo(@NonNull android.view.View, int);
+    ctor public AccessibilityNodeInfo(@NonNull android.view.accessibility.AccessibilityNodeInfo);
+    method public void addAction(android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction);
+    method @Deprecated public void addAction(int);
+    method public void addChild(android.view.View);
+    method public void addChild(android.view.View, int);
+    method public boolean canOpenPopup();
+    method public int describeContents();
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(String);
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId(@NonNull String);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method public android.view.accessibility.AccessibilityNodeInfo focusSearch(int);
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction> getActionList();
+    method @Deprecated public int getActions();
+    method public java.util.List<java.lang.String> getAvailableExtraData();
+    method @Deprecated public void getBoundsInParent(android.graphics.Rect);
+    method public void getBoundsInScreen(android.graphics.Rect);
+    method public android.view.accessibility.AccessibilityNodeInfo getChild(int);
+    method public int getChildCount();
+    method public CharSequence getClassName();
+    method public android.view.accessibility.AccessibilityNodeInfo.CollectionInfo getCollectionInfo();
+    method public android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo getCollectionItemInfo();
+    method public CharSequence getContentDescription();
+    method public int getDrawingOrder();
+    method public CharSequence getError();
+    method @Nullable public android.view.accessibility.AccessibilityNodeInfo.ExtraRenderingInfo getExtraRenderingInfo();
+    method public android.os.Bundle getExtras();
+    method public CharSequence getHintText();
+    method public int getInputType();
+    method public android.view.accessibility.AccessibilityNodeInfo getLabelFor();
+    method public android.view.accessibility.AccessibilityNodeInfo getLabeledBy();
+    method public int getLiveRegion();
+    method public int getMaxTextLength();
+    method public int getMovementGranularities();
+    method public CharSequence getPackageName();
+    method @Nullable public CharSequence getPaneTitle();
+    method public android.view.accessibility.AccessibilityNodeInfo getParent();
+    method public android.view.accessibility.AccessibilityNodeInfo.RangeInfo getRangeInfo();
+    method @Nullable public CharSequence getStateDescription();
+    method public CharSequence getText();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method @Nullable public CharSequence getTooltipText();
+    method @Nullable public android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo getTouchDelegateInfo();
+    method public android.view.accessibility.AccessibilityNodeInfo getTraversalAfter();
+    method public android.view.accessibility.AccessibilityNodeInfo getTraversalBefore();
+    method public String getViewIdResourceName();
+    method public android.view.accessibility.AccessibilityWindowInfo getWindow();
+    method public int getWindowId();
+    method public boolean isAccessibilityFocused();
+    method public boolean isCheckable();
+    method public boolean isChecked();
+    method public boolean isClickable();
+    method public boolean isContentInvalid();
+    method public boolean isContextClickable();
+    method public boolean isDismissable();
+    method public boolean isEditable();
+    method public boolean isEnabled();
+    method public boolean isFocusable();
+    method public boolean isFocused();
+    method public boolean isHeading();
+    method public boolean isImportantForAccessibility();
+    method public boolean isLongClickable();
+    method public boolean isMultiLine();
+    method public boolean isPassword();
+    method public boolean isScreenReaderFocusable();
+    method public boolean isScrollable();
+    method public boolean isSelected();
+    method public boolean isShowingHintText();
+    method public boolean isTextEntryKey();
+    method public boolean isVisibleToUser();
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View);
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.View, int);
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain();
+    method public static android.view.accessibility.AccessibilityNodeInfo obtain(android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean performAction(int);
+    method public boolean performAction(int, android.os.Bundle);
+    method public void recycle();
+    method public boolean refresh();
+    method public boolean refreshWithExtraData(String, android.os.Bundle);
+    method @Deprecated public void removeAction(int);
+    method public boolean removeAction(android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction);
+    method public boolean removeChild(android.view.View);
+    method public boolean removeChild(android.view.View, int);
+    method public void setAccessibilityFocused(boolean);
+    method public void setAvailableExtraData(java.util.List<java.lang.String>);
+    method @Deprecated public void setBoundsInParent(android.graphics.Rect);
+    method public void setBoundsInScreen(android.graphics.Rect);
+    method public void setCanOpenPopup(boolean);
+    method public void setCheckable(boolean);
+    method public void setChecked(boolean);
+    method public void setClassName(CharSequence);
+    method public void setClickable(boolean);
+    method public void setCollectionInfo(android.view.accessibility.AccessibilityNodeInfo.CollectionInfo);
+    method public void setCollectionItemInfo(android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo);
+    method public void setContentDescription(CharSequence);
+    method public void setContentInvalid(boolean);
+    method public void setContextClickable(boolean);
+    method public void setDismissable(boolean);
+    method public void setDrawingOrder(int);
+    method public void setEditable(boolean);
+    method public void setEnabled(boolean);
+    method public void setError(CharSequence);
+    method public void setFocusable(boolean);
+    method public void setFocused(boolean);
+    method public void setHeading(boolean);
+    method public void setHintText(CharSequence);
+    method public void setImportantForAccessibility(boolean);
+    method public void setInputType(int);
+    method public void setLabelFor(android.view.View);
+    method public void setLabelFor(android.view.View, int);
+    method public void setLabeledBy(android.view.View);
+    method public void setLabeledBy(android.view.View, int);
+    method public void setLiveRegion(int);
+    method public void setLongClickable(boolean);
+    method public void setMaxTextLength(int);
+    method public void setMovementGranularities(int);
+    method public void setMultiLine(boolean);
+    method public void setPackageName(CharSequence);
+    method public void setPaneTitle(@Nullable CharSequence);
+    method public void setParent(android.view.View);
+    method public void setParent(android.view.View, int);
+    method public void setPassword(boolean);
+    method public void setRangeInfo(android.view.accessibility.AccessibilityNodeInfo.RangeInfo);
+    method public void setScreenReaderFocusable(boolean);
+    method public void setScrollable(boolean);
+    method public void setSelected(boolean);
+    method public void setShowingHintText(boolean);
+    method public void setSource(android.view.View);
+    method public void setSource(android.view.View, int);
+    method public void setStateDescription(@Nullable CharSequence);
+    method public void setText(CharSequence);
+    method public void setTextEntryKey(boolean);
+    method public void setTextSelection(int, int);
+    method public void setTooltipText(@Nullable CharSequence);
+    method public void setTouchDelegateInfo(@NonNull android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo);
+    method public void setTraversalAfter(android.view.View);
+    method public void setTraversalAfter(android.view.View, int);
+    method public void setTraversalBefore(android.view.View);
+    method public void setTraversalBefore(android.view.View, int);
+    method public void setViewIdResourceName(String);
+    method public void setVisibleToUser(boolean);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_ACCESSIBILITY_FOCUS = 64; // 0x40
+    field public static final String ACTION_ARGUMENT_COLUMN_INT = "android.view.accessibility.action.ARGUMENT_COLUMN_INT";
+    field public static final String ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN = "ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN";
+    field public static final String ACTION_ARGUMENT_HTML_ELEMENT_STRING = "ACTION_ARGUMENT_HTML_ELEMENT_STRING";
+    field public static final String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_X = "ACTION_ARGUMENT_MOVE_WINDOW_X";
+    field public static final String ACTION_ARGUMENT_MOVE_WINDOW_Y = "ACTION_ARGUMENT_MOVE_WINDOW_Y";
+    field public static final String ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT = "android.view.accessibility.action.ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT";
+    field public static final String ACTION_ARGUMENT_PROGRESS_VALUE = "android.view.accessibility.action.ARGUMENT_PROGRESS_VALUE";
+    field public static final String ACTION_ARGUMENT_ROW_INT = "android.view.accessibility.action.ARGUMENT_ROW_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
+    field public static final String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+    field public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+    field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
+    field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
+    field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
+    field public static final int ACTION_CLICK = 16; // 0x10
+    field public static final int ACTION_COLLAPSE = 524288; // 0x80000
+    field public static final int ACTION_COPY = 16384; // 0x4000
+    field public static final int ACTION_CUT = 65536; // 0x10000
+    field public static final int ACTION_DISMISS = 1048576; // 0x100000
+    field public static final int ACTION_EXPAND = 262144; // 0x40000
+    field public static final int ACTION_FOCUS = 1; // 0x1
+    field public static final int ACTION_LONG_CLICK = 32; // 0x20
+    field public static final int ACTION_NEXT_AT_MOVEMENT_GRANULARITY = 256; // 0x100
+    field public static final int ACTION_NEXT_HTML_ELEMENT = 1024; // 0x400
+    field public static final int ACTION_PASTE = 32768; // 0x8000
+    field public static final int ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY = 512; // 0x200
+    field public static final int ACTION_PREVIOUS_HTML_ELEMENT = 2048; // 0x800
+    field public static final int ACTION_SCROLL_BACKWARD = 8192; // 0x2000
+    field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
+    field public static final int ACTION_SELECT = 4; // 0x4
+    field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+    field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo> CREATOR;
+    field public static final String EXTRA_DATA_RENDERING_INFO_KEY = "android.view.accessibility.extra.DATA_RENDERING_INFO_KEY";
+    field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH";
+    field public static final int EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH = 20000; // 0x4e20
+    field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX";
+    field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY";
+    field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
+    field public static final int FOCUS_INPUT = 1; // 0x1
+    field public static final int MOVEMENT_GRANULARITY_CHARACTER = 1; // 0x1
+    field public static final int MOVEMENT_GRANULARITY_LINE = 4; // 0x4
+    field public static final int MOVEMENT_GRANULARITY_PAGE = 16; // 0x10
+    field public static final int MOVEMENT_GRANULARITY_PARAGRAPH = 8; // 0x8
+    field public static final int MOVEMENT_GRANULARITY_WORD = 2; // 0x2
+  }
+
+  public static final class AccessibilityNodeInfo.AccessibilityAction implements android.os.Parcelable {
+    ctor public AccessibilityNodeInfo.AccessibilityAction(int, @Nullable CharSequence);
+    method public int describeContents();
+    method public int getId();
+    method public CharSequence getLabel();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_ACCESSIBILITY_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLEAR_SELECTION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CLICK;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_COLLAPSE;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CONTEXT_CLICK;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_COPY;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_CUT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DISMISS;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_CANCEL;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_DROP;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_DRAG_START;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_EXPAND;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_FOCUS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_HIDE_TOOLTIP;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_IME_ENTER;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_LONG_CLICK;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_MOVE_WINDOW;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_AT_MOVEMENT_GRANULARITY;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_NEXT_HTML_ELEMENT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_DOWN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_LEFT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_RIGHT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PAGE_UP;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PASTE;
+    field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PRESS_AND_HOLD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_PREVIOUS_HTML_ELEMENT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_BACKWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_DOWN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_FORWARD;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_LEFT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_RIGHT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_TO_POSITION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SCROLL_UP;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SELECT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_PROGRESS;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_SELECTION;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_TEXT;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_ON_SCREEN;
+    field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_TOOLTIP;
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction> CREATOR;
+  }
+
+  public static final class AccessibilityNodeInfo.CollectionInfo {
+    ctor public AccessibilityNodeInfo.CollectionInfo(int, int, boolean);
+    ctor public AccessibilityNodeInfo.CollectionInfo(int, int, boolean, int);
+    method public int getColumnCount();
+    method public int getRowCount();
+    method public int getSelectionMode();
+    method public boolean isHierarchical();
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean);
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean, int);
+    field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+    field public static final int SELECTION_MODE_NONE = 0; // 0x0
+    field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
+  }
+
+  public static final class AccessibilityNodeInfo.CollectionItemInfo {
+    ctor public AccessibilityNodeInfo.CollectionItemInfo(int, int, int, int, boolean);
+    ctor public AccessibilityNodeInfo.CollectionItemInfo(int, int, int, int, boolean, boolean);
+    method public int getColumnIndex();
+    method public int getColumnSpan();
+    method public int getRowIndex();
+    method public int getRowSpan();
+    method @Deprecated public boolean isHeading();
+    method public boolean isSelected();
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean);
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean, boolean);
+  }
+
+  public static final class AccessibilityNodeInfo.ExtraRenderingInfo {
+    method @Nullable public android.util.Size getLayoutSize();
+    method public float getTextSizeInPx();
+    method public int getTextSizeUnit();
+  }
+
+  public static final class AccessibilityNodeInfo.RangeInfo {
+    ctor public AccessibilityNodeInfo.RangeInfo(int, float, float, float);
+    method public float getCurrent();
+    method public float getMax();
+    method public float getMin();
+    method public int getType();
+    method public static android.view.accessibility.AccessibilityNodeInfo.RangeInfo obtain(int, float, float, float);
+    field public static final int RANGE_TYPE_FLOAT = 1; // 0x1
+    field public static final int RANGE_TYPE_INT = 0; // 0x0
+    field public static final int RANGE_TYPE_PERCENT = 2; // 0x2
+  }
+
+  public static final class AccessibilityNodeInfo.TouchDelegateInfo implements android.os.Parcelable {
+    ctor public AccessibilityNodeInfo.TouchDelegateInfo(@NonNull java.util.Map<android.graphics.Region,android.view.View>);
+    method public int describeContents();
+    method @NonNull public android.graphics.Region getRegionAt(int);
+    method public int getRegionCount();
+    method @Nullable public android.view.accessibility.AccessibilityNodeInfo getTargetForRegion(@NonNull android.graphics.Region);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo> CREATOR;
+  }
+
+  public abstract class AccessibilityNodeProvider {
+    ctor public AccessibilityNodeProvider();
+    method public void addExtraDataToAccessibilityNodeInfo(int, android.view.accessibility.AccessibilityNodeInfo, String, android.os.Bundle);
+    method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int);
+    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(String, int);
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
+    method public boolean performAction(int, int, android.os.Bundle);
+    field public static final int HOST_VIEW_ID = -1; // 0xffffffff
+  }
+
+  public class AccessibilityRecord {
+    ctor public AccessibilityRecord();
+    ctor public AccessibilityRecord(@NonNull android.view.accessibility.AccessibilityRecord);
+    method public int getAddedCount();
+    method public CharSequence getBeforeText();
+    method public CharSequence getClassName();
+    method public CharSequence getContentDescription();
+    method public int getCurrentItemIndex();
+    method public int getFromIndex();
+    method public int getItemCount();
+    method public int getMaxScrollX();
+    method public int getMaxScrollY();
+    method public android.os.Parcelable getParcelableData();
+    method public int getRemovedCount();
+    method public int getScrollDeltaX();
+    method public int getScrollDeltaY();
+    method public int getScrollX();
+    method public int getScrollY();
+    method public android.view.accessibility.AccessibilityNodeInfo getSource();
+    method public java.util.List<java.lang.CharSequence> getText();
+    method public int getToIndex();
+    method public int getWindowId();
+    method public boolean isChecked();
+    method public boolean isEnabled();
+    method public boolean isFullScreen();
+    method public boolean isPassword();
+    method public boolean isScrollable();
+    method public static android.view.accessibility.AccessibilityRecord obtain(android.view.accessibility.AccessibilityRecord);
+    method public static android.view.accessibility.AccessibilityRecord obtain();
+    method public void recycle();
+    method public void setAddedCount(int);
+    method public void setBeforeText(CharSequence);
+    method public void setChecked(boolean);
+    method public void setClassName(CharSequence);
+    method public void setContentDescription(CharSequence);
+    method public void setCurrentItemIndex(int);
+    method public void setEnabled(boolean);
+    method public void setFromIndex(int);
+    method public void setFullScreen(boolean);
+    method public void setItemCount(int);
+    method public void setMaxScrollX(int);
+    method public void setMaxScrollY(int);
+    method public void setParcelableData(android.os.Parcelable);
+    method public void setPassword(boolean);
+    method public void setRemovedCount(int);
+    method public void setScrollDeltaX(int);
+    method public void setScrollDeltaY(int);
+    method public void setScrollX(int);
+    method public void setScrollY(int);
+    method public void setScrollable(boolean);
+    method public void setSource(android.view.View);
+    method public void setSource(@Nullable android.view.View, int);
+    method public void setToIndex(int);
+  }
+
+  public abstract class AccessibilityRequestPreparer {
+    ctor public AccessibilityRequestPreparer(android.view.View, int);
+    method @Nullable public android.view.View getView();
+    method public abstract void onPrepareExtraData(int, String, android.os.Bundle, android.os.Message);
+    field public static final int REQUEST_TYPE_EXTRA_DATA = 1; // 0x1
+  }
+
+  public final class AccessibilityWindowInfo implements android.os.Parcelable {
+    ctor public AccessibilityWindowInfo();
+    ctor public AccessibilityWindowInfo(@NonNull android.view.accessibility.AccessibilityWindowInfo);
+    method public int describeContents();
+    method public android.view.accessibility.AccessibilityNodeInfo getAnchor();
+    method public void getBoundsInScreen(android.graphics.Rect);
+    method public android.view.accessibility.AccessibilityWindowInfo getChild(int);
+    method public int getChildCount();
+    method public int getDisplayId();
+    method public int getId();
+    method public int getLayer();
+    method public android.view.accessibility.AccessibilityWindowInfo getParent();
+    method public void getRegionInScreen(@NonNull android.graphics.Region);
+    method public android.view.accessibility.AccessibilityNodeInfo getRoot();
+    method @Nullable public CharSequence getTitle();
+    method public int getType();
+    method public boolean isAccessibilityFocused();
+    method public boolean isActive();
+    method public boolean isFocused();
+    method public boolean isInPictureInPictureMode();
+    method public static android.view.accessibility.AccessibilityWindowInfo obtain();
+    method public static android.view.accessibility.AccessibilityWindowInfo obtain(android.view.accessibility.AccessibilityWindowInfo);
+    method public void recycle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityWindowInfo> CREATOR;
+    field public static final int TYPE_ACCESSIBILITY_OVERLAY = 4; // 0x4
+    field public static final int TYPE_APPLICATION = 1; // 0x1
+    field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+    field public static final int TYPE_SPLIT_SCREEN_DIVIDER = 5; // 0x5
+    field public static final int TYPE_SYSTEM = 3; // 0x3
+  }
+
+  public class CaptioningManager {
+    method public void addCaptioningChangeListener(@NonNull android.view.accessibility.CaptioningManager.CaptioningChangeListener);
+    method public final float getFontScale();
+    method @Nullable public final java.util.Locale getLocale();
+    method @NonNull public android.view.accessibility.CaptioningManager.CaptionStyle getUserStyle();
+    method public final boolean isEnabled();
+    method public void removeCaptioningChangeListener(@NonNull android.view.accessibility.CaptioningManager.CaptioningChangeListener);
+  }
+
+  public static final class CaptioningManager.CaptionStyle {
+    method @Nullable public android.graphics.Typeface getTypeface();
+    method public boolean hasBackgroundColor();
+    method public boolean hasEdgeColor();
+    method public boolean hasEdgeType();
+    method public boolean hasForegroundColor();
+    method public boolean hasWindowColor();
+    field public static final int EDGE_TYPE_DEPRESSED = 4; // 0x4
+    field public static final int EDGE_TYPE_DROP_SHADOW = 2; // 0x2
+    field public static final int EDGE_TYPE_NONE = 0; // 0x0
+    field public static final int EDGE_TYPE_OUTLINE = 1; // 0x1
+    field public static final int EDGE_TYPE_RAISED = 3; // 0x3
+    field public static final int EDGE_TYPE_UNSPECIFIED = -1; // 0xffffffff
+    field public final int backgroundColor;
+    field public final int edgeColor;
+    field public final int edgeType;
+    field public final int foregroundColor;
+    field public final int windowColor;
+  }
+
+  public abstract static class CaptioningManager.CaptioningChangeListener {
+    ctor public CaptioningManager.CaptioningChangeListener();
+    method public void onEnabledChanged(boolean);
+    method public void onFontScaleChanged(float);
+    method public void onLocaleChanged(@Nullable java.util.Locale);
+    method public void onUserStyleChanged(@NonNull android.view.accessibility.CaptioningManager.CaptionStyle);
+  }
+
+}
+
+package android.view.animation {
+
+  public class AccelerateDecelerateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AccelerateDecelerateInterpolator();
+    ctor public AccelerateDecelerateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class AccelerateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AccelerateInterpolator();
+    ctor public AccelerateInterpolator(float);
+    ctor public AccelerateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class AlphaAnimation extends android.view.animation.Animation {
+    ctor public AlphaAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public AlphaAnimation(float, float);
+  }
+
+  public abstract class Animation implements java.lang.Cloneable {
+    ctor public Animation();
+    ctor public Animation(android.content.Context, android.util.AttributeSet);
+    method protected void applyTransformation(float, android.view.animation.Transformation);
+    method public void cancel();
+    method protected android.view.animation.Animation clone() throws java.lang.CloneNotSupportedException;
+    method public long computeDurationHint();
+    method protected void ensureInterpolator();
+    method @Deprecated @ColorInt public int getBackgroundColor();
+    method @Deprecated public boolean getDetachWallpaper();
+    method public long getDuration();
+    method public boolean getFillAfter();
+    method public boolean getFillBefore();
+    method public android.view.animation.Interpolator getInterpolator();
+    method public int getRepeatCount();
+    method public int getRepeatMode();
+    method protected float getScaleFactor();
+    method public long getStartOffset();
+    method public long getStartTime();
+    method public boolean getTransformation(long, android.view.animation.Transformation);
+    method public boolean getTransformation(long, android.view.animation.Transformation, float);
+    method public int getZAdjustment();
+    method public boolean hasEnded();
+    method public boolean hasStarted();
+    method public void initialize(int, int, int, int);
+    method public boolean isFillEnabled();
+    method public boolean isInitialized();
+    method public void reset();
+    method protected float resolveSize(int, float, int, int);
+    method public void restrictDuration(long);
+    method public void scaleCurrentDuration(float);
+    method public void setAnimationListener(android.view.animation.Animation.AnimationListener);
+    method @Deprecated public void setBackgroundColor(@ColorInt int);
+    method @Deprecated public void setDetachWallpaper(boolean);
+    method public void setDuration(long);
+    method public void setFillAfter(boolean);
+    method public void setFillBefore(boolean);
+    method public void setFillEnabled(boolean);
+    method public void setInterpolator(android.content.Context, @AnimRes @InterpolatorRes int);
+    method public void setInterpolator(android.view.animation.Interpolator);
+    method public void setRepeatCount(int);
+    method public void setRepeatMode(int);
+    method public void setStartOffset(long);
+    method public void setStartTime(long);
+    method public void setZAdjustment(int);
+    method public void start();
+    method public void startNow();
+    method public boolean willChangeBounds();
+    method public boolean willChangeTransformationMatrix();
+    field public static final int ABSOLUTE = 0; // 0x0
+    field public static final int INFINITE = -1; // 0xffffffff
+    field public static final int RELATIVE_TO_PARENT = 2; // 0x2
+    field public static final int RELATIVE_TO_SELF = 1; // 0x1
+    field public static final int RESTART = 1; // 0x1
+    field public static final int REVERSE = 2; // 0x2
+    field public static final int START_ON_FIRST_FRAME = -1; // 0xffffffff
+    field public static final int ZORDER_BOTTOM = -1; // 0xffffffff
+    field public static final int ZORDER_NORMAL = 0; // 0x0
+    field public static final int ZORDER_TOP = 1; // 0x1
+  }
+
+  public static interface Animation.AnimationListener {
+    method public void onAnimationEnd(android.view.animation.Animation);
+    method public void onAnimationRepeat(android.view.animation.Animation);
+    method public void onAnimationStart(android.view.animation.Animation);
+  }
+
+  protected static class Animation.Description {
+    ctor protected Animation.Description();
+    field public int type;
+    field public float value;
+  }
+
+  public class AnimationSet extends android.view.animation.Animation {
+    ctor public AnimationSet(android.content.Context, android.util.AttributeSet);
+    ctor public AnimationSet(boolean);
+    method public void addAnimation(android.view.animation.Animation);
+    method protected android.view.animation.AnimationSet clone() throws java.lang.CloneNotSupportedException;
+    method public java.util.List<android.view.animation.Animation> getAnimations();
+  }
+
+  public class AnimationUtils {
+    ctor public AnimationUtils();
+    method public static long currentAnimationTimeMillis();
+    method public static android.view.animation.Animation loadAnimation(android.content.Context, @AnimRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.view.animation.Interpolator loadInterpolator(android.content.Context, @AnimRes @InterpolatorRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.view.animation.LayoutAnimationController loadLayoutAnimation(android.content.Context, @AnimRes int) throws android.content.res.Resources.NotFoundException;
+    method public static android.view.animation.Animation makeInAnimation(android.content.Context, boolean);
+    method public static android.view.animation.Animation makeInChildBottomAnimation(android.content.Context);
+    method public static android.view.animation.Animation makeOutAnimation(android.content.Context, boolean);
+  }
+
+  public class AnticipateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AnticipateInterpolator();
+    ctor public AnticipateInterpolator(float);
+    ctor public AnticipateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class AnticipateOvershootInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public AnticipateOvershootInterpolator();
+    ctor public AnticipateOvershootInterpolator(float);
+    ctor public AnticipateOvershootInterpolator(float, float);
+    ctor public AnticipateOvershootInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public abstract class BaseInterpolator implements android.view.animation.Interpolator {
+    ctor public BaseInterpolator();
+  }
+
+  public class BounceInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public BounceInterpolator();
+    ctor public BounceInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class CycleInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public CycleInterpolator(float);
+    ctor public CycleInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class DecelerateInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public DecelerateInterpolator();
+    ctor public DecelerateInterpolator(float);
+    ctor public DecelerateInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class GridLayoutAnimationController extends android.view.animation.LayoutAnimationController {
+    ctor public GridLayoutAnimationController(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayoutAnimationController(android.view.animation.Animation);
+    ctor public GridLayoutAnimationController(android.view.animation.Animation, float, float);
+    method public float getColumnDelay();
+    method public int getDirection();
+    method public int getDirectionPriority();
+    method public float getRowDelay();
+    method public void setColumnDelay(float);
+    method public void setDirection(int);
+    method public void setDirectionPriority(int);
+    method public void setRowDelay(float);
+    field public static final int DIRECTION_BOTTOM_TO_TOP = 2; // 0x2
+    field public static final int DIRECTION_HORIZONTAL_MASK = 1; // 0x1
+    field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final int DIRECTION_TOP_TO_BOTTOM = 0; // 0x0
+    field public static final int DIRECTION_VERTICAL_MASK = 2; // 0x2
+    field public static final int PRIORITY_COLUMN = 1; // 0x1
+    field public static final int PRIORITY_NONE = 0; // 0x0
+    field public static final int PRIORITY_ROW = 2; // 0x2
+  }
+
+  public static class GridLayoutAnimationController.AnimationParameters extends android.view.animation.LayoutAnimationController.AnimationParameters {
+    ctor public GridLayoutAnimationController.AnimationParameters();
+    field public int column;
+    field public int columnsCount;
+    field public int row;
+    field public int rowsCount;
+  }
+
+  public interface Interpolator extends android.animation.TimeInterpolator {
+  }
+
+  public class LayoutAnimationController {
+    ctor public LayoutAnimationController(android.content.Context, android.util.AttributeSet);
+    ctor public LayoutAnimationController(android.view.animation.Animation);
+    ctor public LayoutAnimationController(android.view.animation.Animation, float);
+    method public android.view.animation.Animation getAnimation();
+    method public final android.view.animation.Animation getAnimationForView(android.view.View);
+    method public float getDelay();
+    method protected long getDelayForView(android.view.View);
+    method public android.view.animation.Interpolator getInterpolator();
+    method public int getOrder();
+    method protected int getTransformedIndex(android.view.animation.LayoutAnimationController.AnimationParameters);
+    method public boolean isDone();
+    method public void setAnimation(android.content.Context, @AnimRes int);
+    method public void setAnimation(android.view.animation.Animation);
+    method public void setDelay(float);
+    method public void setInterpolator(android.content.Context, @InterpolatorRes int);
+    method public void setInterpolator(android.view.animation.Interpolator);
+    method public void setOrder(int);
+    method public void start();
+    method public boolean willOverlap();
+    field public static final int ORDER_NORMAL = 0; // 0x0
+    field public static final int ORDER_RANDOM = 2; // 0x2
+    field public static final int ORDER_REVERSE = 1; // 0x1
+    field protected android.view.animation.Animation mAnimation;
+    field protected android.view.animation.Interpolator mInterpolator;
+    field protected java.util.Random mRandomizer;
+  }
+
+  public static class LayoutAnimationController.AnimationParameters {
+    ctor public LayoutAnimationController.AnimationParameters();
+    field public int count;
+    field public int index;
+  }
+
+  public class LinearInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public LinearInterpolator();
+    ctor public LinearInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class OvershootInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public OvershootInterpolator();
+    ctor public OvershootInterpolator(float);
+    ctor public OvershootInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class PathInterpolator extends android.view.animation.BaseInterpolator {
+    ctor public PathInterpolator(android.graphics.Path);
+    ctor public PathInterpolator(float, float);
+    ctor public PathInterpolator(float, float, float, float);
+    ctor public PathInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
+  public class RotateAnimation extends android.view.animation.Animation {
+    ctor public RotateAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public RotateAnimation(float, float);
+    ctor public RotateAnimation(float, float, float, float);
+    ctor public RotateAnimation(float, float, int, float, int, float);
+  }
+
+  public class ScaleAnimation extends android.view.animation.Animation {
+    ctor public ScaleAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public ScaleAnimation(float, float, float, float);
+    ctor public ScaleAnimation(float, float, float, float, float, float);
+    ctor public ScaleAnimation(float, float, float, float, int, float, int, float);
+  }
+
+  public class Transformation {
+    ctor public Transformation();
+    method public void clear();
+    method public void compose(android.view.animation.Transformation);
+    method public float getAlpha();
+    method public android.graphics.Matrix getMatrix();
+    method public int getTransformationType();
+    method public void set(android.view.animation.Transformation);
+    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
+    method public void setTransformationType(int);
+    method public String toShortString();
+    field public static final int TYPE_ALPHA = 1; // 0x1
+    field public static final int TYPE_BOTH = 3; // 0x3
+    field public static final int TYPE_IDENTITY = 0; // 0x0
+    field public static final int TYPE_MATRIX = 2; // 0x2
+    field protected float mAlpha;
+    field protected android.graphics.Matrix mMatrix;
+    field protected int mTransformationType;
+  }
+
+  public class TranslateAnimation extends android.view.animation.Animation {
+    ctor public TranslateAnimation(android.content.Context, android.util.AttributeSet);
+    ctor public TranslateAnimation(float, float, float, float);
+    ctor public TranslateAnimation(int, float, int, float, int, float, int, float);
+  }
+
+}
+
+package android.view.autofill {
+
+  public final class AutofillId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.autofill.AutofillId> CREATOR;
+  }
+
+  public final class AutofillManager {
+    method public void cancel();
+    method public void commit();
+    method public void disableAutofillServices();
+    method @Nullable public android.content.ComponentName getAutofillServiceComponentName();
+    method @NonNull public java.util.List<java.lang.String> getAvailableFieldClassificationAlgorithms();
+    method @Nullable public String getDefaultFieldClassificationAlgorithm();
+    method @Nullable public android.view.autofill.AutofillId getNextAutofillId();
+    method @Nullable public android.service.autofill.UserData getUserData();
+    method @Nullable public String getUserDataId();
+    method public boolean hasEnabledAutofillServices();
+    method public boolean isAutofillSupported();
+    method public boolean isEnabled();
+    method public boolean isFieldClassificationEnabled();
+    method public void notifyValueChanged(android.view.View);
+    method public void notifyValueChanged(android.view.View, int, android.view.autofill.AutofillValue);
+    method public void notifyViewClicked(@NonNull android.view.View);
+    method public void notifyViewClicked(@NonNull android.view.View, int);
+    method public void notifyViewEntered(@NonNull android.view.View);
+    method public void notifyViewEntered(@NonNull android.view.View, int, @NonNull android.graphics.Rect);
+    method public void notifyViewExited(@NonNull android.view.View);
+    method public void notifyViewExited(@NonNull android.view.View, int);
+    method public void notifyViewVisibilityChanged(@NonNull android.view.View, boolean);
+    method public void notifyViewVisibilityChanged(@NonNull android.view.View, int, boolean);
+    method public void registerCallback(@Nullable android.view.autofill.AutofillManager.AutofillCallback);
+    method public void requestAutofill(@NonNull android.view.View);
+    method public void requestAutofill(@NonNull android.view.View, int, @NonNull android.graphics.Rect);
+    method public void setUserData(@Nullable android.service.autofill.UserData);
+    method public void unregisterCallback(@Nullable android.view.autofill.AutofillManager.AutofillCallback);
+    field public static final String EXTRA_ASSIST_STRUCTURE = "android.view.autofill.extra.ASSIST_STRUCTURE";
+    field public static final String EXTRA_AUTHENTICATION_RESULT = "android.view.autofill.extra.AUTHENTICATION_RESULT";
+    field public static final String EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET = "android.view.autofill.extra.AUTHENTICATION_RESULT_EPHEMERAL_DATASET";
+    field public static final String EXTRA_CLIENT_STATE = "android.view.autofill.extra.CLIENT_STATE";
+    field public static final String EXTRA_INLINE_SUGGESTIONS_REQUEST = "android.view.autofill.extra.INLINE_SUGGESTIONS_REQUEST";
+  }
+
+  public abstract static class AutofillManager.AutofillCallback {
+    ctor public AutofillManager.AutofillCallback();
+    method public void onAutofillEvent(@NonNull android.view.View, int);
+    method public void onAutofillEvent(@NonNull android.view.View, int, int);
+    field public static final int EVENT_INPUT_HIDDEN = 2; // 0x2
+    field public static final int EVENT_INPUT_SHOWN = 1; // 0x1
+    field public static final int EVENT_INPUT_UNAVAILABLE = 3; // 0x3
+  }
+
+  public final class AutofillValue implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.view.autofill.AutofillValue forDate(long);
+    method public static android.view.autofill.AutofillValue forList(int);
+    method public static android.view.autofill.AutofillValue forText(@Nullable CharSequence);
+    method public static android.view.autofill.AutofillValue forToggle(boolean);
+    method public long getDateValue();
+    method public int getListValue();
+    method @NonNull public CharSequence getTextValue();
+    method public boolean getToggleValue();
+    method public boolean isDate();
+    method public boolean isList();
+    method public boolean isText();
+    method public boolean isToggle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.autofill.AutofillValue> CREATOR;
+  }
+
+}
+
+package android.view.contentcapture {
+
+  public final class ContentCaptureCondition implements android.os.Parcelable {
+    ctor public ContentCaptureCondition(@NonNull android.content.LocusId, int);
+    method public int describeContents();
+    method public int getFlags();
+    method @NonNull public android.content.LocusId getLocusId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureCondition> CREATOR;
+    field public static final int FLAG_IS_REGEX = 2; // 0x2
+  }
+
+  public final class ContentCaptureContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.view.contentcapture.ContentCaptureContext forLocusId(@NonNull String);
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.content.LocusId getLocusId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureContext> CREATOR;
+  }
+
+  public static final class ContentCaptureContext.Builder {
+    ctor public ContentCaptureContext.Builder(@NonNull android.content.LocusId);
+    method @NonNull public android.view.contentcapture.ContentCaptureContext build();
+    method @NonNull public android.view.contentcapture.ContentCaptureContext.Builder setExtras(@NonNull android.os.Bundle);
+  }
+
+  public final class ContentCaptureManager {
+    method @Nullable public java.util.Set<android.view.contentcapture.ContentCaptureCondition> getContentCaptureConditions();
+    method @Nullable public android.content.ComponentName getServiceComponentName();
+    method public boolean isContentCaptureEnabled();
+    method public void removeData(@NonNull android.view.contentcapture.DataRemovalRequest);
+    method public void setContentCaptureEnabled(boolean);
+    method public void shareData(@NonNull android.view.contentcapture.DataShareRequest, @NonNull java.util.concurrent.Executor, @NonNull android.view.contentcapture.DataShareWriteAdapter);
+    field public static final int DATA_SHARE_ERROR_CONCURRENT_REQUEST = 2; // 0x2
+    field public static final int DATA_SHARE_ERROR_TIMEOUT_INTERRUPTED = 3; // 0x3
+    field public static final int DATA_SHARE_ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  public abstract class ContentCaptureSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public final android.view.contentcapture.ContentCaptureSession createContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext);
+    method public final void destroy();
+    method @Nullable public final android.view.contentcapture.ContentCaptureContext getContentCaptureContext();
+    method @NonNull public final android.view.contentcapture.ContentCaptureSessionId getContentCaptureSessionId();
+    method @NonNull public android.view.autofill.AutofillId newAutofillId(@NonNull android.view.autofill.AutofillId, long);
+    method @NonNull public final android.view.ViewStructure newViewStructure(@NonNull android.view.View);
+    method @NonNull public final android.view.ViewStructure newVirtualViewStructure(@NonNull android.view.autofill.AutofillId, long);
+    method public final void notifySessionPaused();
+    method public final void notifySessionResumed();
+    method public final void notifyViewAppeared(@NonNull android.view.ViewStructure);
+    method public final void notifyViewDisappeared(@NonNull android.view.autofill.AutofillId);
+    method public final void notifyViewInsetsChanged(@NonNull android.graphics.Insets);
+    method public final void notifyViewTextChanged(@NonNull android.view.autofill.AutofillId, @Nullable CharSequence);
+    method public final void notifyViewsDisappeared(@NonNull android.view.autofill.AutofillId, @NonNull long[]);
+    method public final void setContentCaptureContext(@Nullable android.view.contentcapture.ContentCaptureContext);
+  }
+
+  public final class ContentCaptureSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureSessionId> CREATOR;
+  }
+
+  public final class DataRemovalRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.view.contentcapture.DataRemovalRequest.LocusIdRequest> getLocusIdRequests();
+    method @NonNull public String getPackageName();
+    method public boolean isForEverything();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.DataRemovalRequest> CREATOR;
+    field public static final int FLAG_IS_PREFIX = 1; // 0x1
+  }
+
+  public static final class DataRemovalRequest.Builder {
+    ctor public DataRemovalRequest.Builder();
+    method @NonNull public android.view.contentcapture.DataRemovalRequest.Builder addLocusId(@NonNull android.content.LocusId, int);
+    method @NonNull public android.view.contentcapture.DataRemovalRequest build();
+    method @NonNull public android.view.contentcapture.DataRemovalRequest.Builder forEverything();
+  }
+
+  public final class DataRemovalRequest.LocusIdRequest {
+    method @NonNull public int getFlags();
+    method @NonNull public android.content.LocusId getLocusId();
+  }
+
+  public final class DataShareRequest implements android.os.Parcelable {
+    ctor public DataShareRequest(@Nullable android.content.LocusId, @NonNull String);
+    method public int describeContents();
+    method @Nullable public android.content.LocusId getLocusId();
+    method @NonNull public String getMimeType();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.DataShareRequest> CREATOR;
+  }
+
+  public interface DataShareWriteAdapter {
+    method public default void onError(int);
+    method public void onRejected();
+    method public void onWrite(@NonNull android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package android.view.displayhash {
+
+  public final class DisplayHash implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.displayhash.DisplayHash> CREATOR;
+  }
+
+  public final class DisplayHashManager {
+    method @NonNull public java.util.Set<java.lang.String> getSupportedHashAlgorithms();
+    method @Nullable public android.view.displayhash.VerifiedDisplayHash verifyDisplayHash(@NonNull android.view.displayhash.DisplayHash);
+  }
+
+  public interface DisplayHashResultCallback {
+    method public void onDisplayHashError(int);
+    method public void onDisplayHashResult(@NonNull android.view.displayhash.DisplayHash);
+    field public static final int DISPLAY_HASH_ERROR_INVALID_BOUNDS = -2; // 0xfffffffe
+    field public static final int DISPLAY_HASH_ERROR_INVALID_HASH_ALGORITHM = -5; // 0xfffffffb
+    field public static final int DISPLAY_HASH_ERROR_MISSING_WINDOW = -3; // 0xfffffffd
+    field public static final int DISPLAY_HASH_ERROR_NOT_VISIBLE_ON_SCREEN = -4; // 0xfffffffc
+    field public static final int DISPLAY_HASH_ERROR_TOO_MANY_REQUESTS = -6; // 0xfffffffa
+    field public static final int DISPLAY_HASH_ERROR_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class VerifiedDisplayHash implements android.os.Parcelable {
+    ctor public VerifiedDisplayHash(long, @NonNull android.graphics.Rect, @NonNull String, @NonNull byte[]);
+    method public int describeContents();
+    method @NonNull public android.graphics.Rect getBoundsInWindow();
+    method @NonNull public String getHashAlgorithm();
+    method @NonNull public byte[] getImageHash();
+    method public long getTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.displayhash.VerifiedDisplayHash> CREATOR;
+  }
+
+}
+
+package android.view.inputmethod {
+
+  public class BaseInputConnection implements android.view.inputmethod.InputConnection {
+    ctor public BaseInputConnection(android.view.View, boolean);
+    method public boolean beginBatchEdit();
+    method public boolean clearMetaKeyStates(int);
+    method @CallSuper public void closeConnection();
+    method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(android.view.inputmethod.InputContentInfo, int, android.os.Bundle);
+    method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public boolean commitText(CharSequence, int);
+    method public boolean deleteSurroundingText(int, int);
+    method public boolean deleteSurroundingTextInCodePoints(int, int);
+    method public boolean endBatchEdit();
+    method public boolean finishComposingText();
+    method public static int getComposingSpanEnd(android.text.Spannable);
+    method public static int getComposingSpanStart(android.text.Spannable);
+    method public int getCursorCapsMode(int);
+    method public android.text.Editable getEditable();
+    method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int);
+    method public android.os.Handler getHandler();
+    method public CharSequence getSelectedText(int);
+    method @Nullable public CharSequence getTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextBeforeCursor(@IntRange(from=0) int, int);
+    method public boolean performContextMenuAction(int);
+    method public boolean performEditorAction(int);
+    method public boolean performPrivateCommand(String, android.os.Bundle);
+    method public static final void removeComposingSpans(android.text.Spannable);
+    method public boolean reportFullscreenMode(boolean);
+    method public boolean requestCursorUpdates(int);
+    method public boolean sendKeyEvent(android.view.KeyEvent);
+    method public boolean setComposingRegion(int, int);
+    method public static void setComposingSpans(android.text.Spannable);
+    method public boolean setComposingText(CharSequence, int);
+    method public boolean setSelection(int, int);
+  }
+
+  public final class CompletionInfo implements android.os.Parcelable {
+    ctor public CompletionInfo(long, int, CharSequence);
+    ctor public CompletionInfo(long, int, CharSequence, CharSequence);
+    method public int describeContents();
+    method public long getId();
+    method public CharSequence getLabel();
+    method public int getPosition();
+    method public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CompletionInfo> CREATOR;
+  }
+
+  public final class CorrectionInfo implements android.os.Parcelable {
+    ctor public CorrectionInfo(int, CharSequence, CharSequence);
+    method public int describeContents();
+    method public CharSequence getNewText();
+    method public int getOffset();
+    method public CharSequence getOldText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CorrectionInfo> CREATOR;
+  }
+
+  public final class CursorAnchorInfo implements android.os.Parcelable {
+    ctor public CursorAnchorInfo(android.os.Parcel);
+    method public int describeContents();
+    method public android.graphics.RectF getCharacterBounds(int);
+    method public int getCharacterBoundsFlags(int);
+    method public CharSequence getComposingText();
+    method public int getComposingTextStart();
+    method public float getInsertionMarkerBaseline();
+    method public float getInsertionMarkerBottom();
+    method public int getInsertionMarkerFlags();
+    method public float getInsertionMarkerHorizontal();
+    method public float getInsertionMarkerTop();
+    method public android.graphics.Matrix getMatrix();
+    method public int getSelectionEnd();
+    method public int getSelectionStart();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.CursorAnchorInfo> CREATOR;
+    field public static final int FLAG_HAS_INVISIBLE_REGION = 2; // 0x2
+    field public static final int FLAG_HAS_VISIBLE_REGION = 1; // 0x1
+    field public static final int FLAG_IS_RTL = 4; // 0x4
+  }
+
+  public static final class CursorAnchorInfo.Builder {
+    ctor public CursorAnchorInfo.Builder();
+    method public android.view.inputmethod.CursorAnchorInfo.Builder addCharacterBounds(int, float, float, float, float, int);
+    method public android.view.inputmethod.CursorAnchorInfo build();
+    method public void reset();
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setComposingText(int, CharSequence);
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setInsertionMarkerLocation(float, float, float, float, int);
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setMatrix(android.graphics.Matrix);
+    method public android.view.inputmethod.CursorAnchorInfo.Builder setSelectionRange(int, int);
+  }
+
+  public class EditorInfo implements android.text.InputType android.os.Parcelable {
+    ctor public EditorInfo();
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method @Nullable public CharSequence getInitialSelectedText(int);
+    method @Nullable public android.view.inputmethod.SurroundingText getInitialSurroundingText(@IntRange(from=0) int, @IntRange(from=0) int, int);
+    method @Nullable public CharSequence getInitialTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getInitialTextBeforeCursor(@IntRange(from=0) int, int);
+    method public final void makeCompatible(int);
+    method public void setInitialSurroundingSubText(@NonNull CharSequence, int);
+    method public void setInitialSurroundingText(@NonNull CharSequence);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.EditorInfo> CREATOR;
+    field public static final int IME_ACTION_DONE = 6; // 0x6
+    field public static final int IME_ACTION_GO = 2; // 0x2
+    field public static final int IME_ACTION_NEXT = 5; // 0x5
+    field public static final int IME_ACTION_NONE = 1; // 0x1
+    field public static final int IME_ACTION_PREVIOUS = 7; // 0x7
+    field public static final int IME_ACTION_SEARCH = 3; // 0x3
+    field public static final int IME_ACTION_SEND = 4; // 0x4
+    field public static final int IME_ACTION_UNSPECIFIED = 0; // 0x0
+    field public static final int IME_FLAG_FORCE_ASCII = -2147483648; // 0x80000000
+    field public static final int IME_FLAG_NAVIGATE_NEXT = 134217728; // 0x8000000
+    field public static final int IME_FLAG_NAVIGATE_PREVIOUS = 67108864; // 0x4000000
+    field public static final int IME_FLAG_NO_ACCESSORY_ACTION = 536870912; // 0x20000000
+    field public static final int IME_FLAG_NO_ENTER_ACTION = 1073741824; // 0x40000000
+    field public static final int IME_FLAG_NO_EXTRACT_UI = 268435456; // 0x10000000
+    field public static final int IME_FLAG_NO_FULLSCREEN = 33554432; // 0x2000000
+    field public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216; // 0x1000000
+    field public static final int IME_MASK_ACTION = 255; // 0xff
+    field public static final int IME_NULL = 0; // 0x0
+    field public int actionId;
+    field public CharSequence actionLabel;
+    field @Nullable public String[] contentMimeTypes;
+    field public android.os.Bundle extras;
+    field public int fieldId;
+    field public String fieldName;
+    field @Nullable public android.os.LocaleList hintLocales;
+    field public CharSequence hintText;
+    field public int imeOptions;
+    field public int initialCapsMode;
+    field public int initialSelEnd;
+    field public int initialSelStart;
+    field public int inputType;
+    field public CharSequence label;
+    field public String packageName;
+    field public String privateImeOptions;
+  }
+
+  public class ExtractedText implements android.os.Parcelable {
+    ctor public ExtractedText();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedText> CREATOR;
+    field public static final int FLAG_SELECTING = 2; // 0x2
+    field public static final int FLAG_SINGLE_LINE = 1; // 0x1
+    field public int flags;
+    field public CharSequence hint;
+    field public int partialEndOffset;
+    field public int partialStartOffset;
+    field public int selectionEnd;
+    field public int selectionStart;
+    field public int startOffset;
+    field public CharSequence text;
+  }
+
+  public class ExtractedTextRequest implements android.os.Parcelable {
+    ctor public ExtractedTextRequest();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.ExtractedTextRequest> CREATOR;
+    field public int flags;
+    field public int hintMaxChars;
+    field public int hintMaxLines;
+    field public int token;
+  }
+
+  public final class InlineSuggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.inputmethod.InlineSuggestionInfo getInfo();
+    method public void inflate(@NonNull android.content.Context, @NonNull android.util.Size, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.widget.inline.InlineContentView>);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestion> CREATOR;
+  }
+
+  public final class InlineSuggestionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String[] getAutofillHints();
+    method @NonNull public android.widget.inline.InlinePresentationSpec getInlinePresentationSpec();
+    method @NonNull public String getSource();
+    method @NonNull public String getType();
+    method public boolean isPinned();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestionInfo> CREATOR;
+    field public static final String SOURCE_AUTOFILL = "android:autofill";
+    field public static final String SOURCE_PLATFORM = "android:platform";
+    field public static final String TYPE_ACTION = "android:autofill:action";
+    field public static final String TYPE_SUGGESTION = "android:autofill:suggestion";
+  }
+
+  public final class InlineSuggestionsRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getHostPackageName();
+    method @NonNull public java.util.List<android.widget.inline.InlinePresentationSpec> getInlinePresentationSpecs();
+    method @Nullable public android.widget.inline.InlinePresentationSpec getInlineTooltipPresentationSpec();
+    method public int getMaxSuggestionCount();
+    method @NonNull public android.os.LocaleList getSupportedLocales();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestionsRequest> CREATOR;
+    field public static final int SUGGESTION_COUNT_UNLIMITED = 2147483647; // 0x7fffffff
+  }
+
+  public static final class InlineSuggestionsRequest.Builder {
+    ctor public InlineSuggestionsRequest.Builder(@NonNull java.util.List<android.widget.inline.InlinePresentationSpec>);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder addInlinePresentationSpecs(@NonNull android.widget.inline.InlinePresentationSpec);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest build();
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setInlinePresentationSpecs(@NonNull java.util.List<android.widget.inline.InlinePresentationSpec>);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setInlineTooltipPresentationSpec(@NonNull android.widget.inline.InlinePresentationSpec);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setMaxSuggestionCount(int);
+    method @NonNull public android.view.inputmethod.InlineSuggestionsRequest.Builder setSupportedLocales(@NonNull android.os.LocaleList);
+  }
+
+  public final class InlineSuggestionsResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.view.inputmethod.InlineSuggestion> getInlineSuggestions();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InlineSuggestionsResponse> CREATOR;
+  }
+
+  public final class InputBinding implements android.os.Parcelable {
+    ctor public InputBinding(android.view.inputmethod.InputConnection, android.os.IBinder, int, int);
+    ctor public InputBinding(android.view.inputmethod.InputConnection, android.view.inputmethod.InputBinding);
+    method public int describeContents();
+    method public android.view.inputmethod.InputConnection getConnection();
+    method public android.os.IBinder getConnectionToken();
+    method public int getPid();
+    method public int getUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputBinding> CREATOR;
+  }
+
+  public interface InputConnection {
+    method public boolean beginBatchEdit();
+    method public boolean clearMetaKeyStates(int);
+    method public void closeConnection();
+    method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(@NonNull android.view.inputmethod.InputContentInfo, int, @Nullable android.os.Bundle);
+    method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public boolean commitText(CharSequence, int);
+    method public boolean deleteSurroundingText(int, int);
+    method public boolean deleteSurroundingTextInCodePoints(int, int);
+    method public boolean endBatchEdit();
+    method public boolean finishComposingText();
+    method public int getCursorCapsMode(int);
+    method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int);
+    method public android.os.Handler getHandler();
+    method public CharSequence getSelectedText(int);
+    method @Nullable public default android.view.inputmethod.SurroundingText getSurroundingText(@IntRange(from=0) int, @IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextBeforeCursor(@IntRange(from=0) int, int);
+    method public boolean performContextMenuAction(int);
+    method public boolean performEditorAction(int);
+    method public boolean performPrivateCommand(String, android.os.Bundle);
+    method public default boolean performSpellCheck();
+    method public boolean reportFullscreenMode(boolean);
+    method public boolean requestCursorUpdates(int);
+    method public boolean sendKeyEvent(android.view.KeyEvent);
+    method public boolean setComposingRegion(int, int);
+    method public boolean setComposingText(CharSequence, int);
+    method public default boolean setImeConsumesInput(boolean);
+    method public boolean setSelection(int, int);
+    field public static final int CURSOR_UPDATE_IMMEDIATE = 1; // 0x1
+    field public static final int CURSOR_UPDATE_MONITOR = 2; // 0x2
+    field public static final int GET_EXTRACTED_TEXT_MONITOR = 1; // 0x1
+    field public static final int GET_TEXT_WITH_STYLES = 1; // 0x1
+    field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
+  }
+
+  public class InputConnectionWrapper implements android.view.inputmethod.InputConnection {
+    ctor public InputConnectionWrapper(android.view.inputmethod.InputConnection, boolean);
+    method public boolean beginBatchEdit();
+    method public boolean clearMetaKeyStates(int);
+    method public void closeConnection();
+    method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(android.view.inputmethod.InputContentInfo, int, android.os.Bundle);
+    method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public boolean commitText(CharSequence, int);
+    method public boolean deleteSurroundingText(int, int);
+    method public boolean deleteSurroundingTextInCodePoints(int, int);
+    method public boolean endBatchEdit();
+    method public boolean finishComposingText();
+    method public int getCursorCapsMode(int);
+    method public android.view.inputmethod.ExtractedText getExtractedText(android.view.inputmethod.ExtractedTextRequest, int);
+    method public android.os.Handler getHandler();
+    method public CharSequence getSelectedText(int);
+    method @Nullable public CharSequence getTextAfterCursor(@IntRange(from=0) int, int);
+    method @Nullable public CharSequence getTextBeforeCursor(@IntRange(from=0) int, int);
+    method public boolean performContextMenuAction(int);
+    method public boolean performEditorAction(int);
+    method public boolean performPrivateCommand(String, android.os.Bundle);
+    method public boolean reportFullscreenMode(boolean);
+    method public boolean requestCursorUpdates(int);
+    method public boolean sendKeyEvent(android.view.KeyEvent);
+    method public boolean setComposingRegion(int, int);
+    method public boolean setComposingText(CharSequence, int);
+    method public boolean setSelection(int, int);
+    method public void setTarget(android.view.inputmethod.InputConnection);
+  }
+
+  public final class InputContentInfo implements android.os.Parcelable {
+    ctor public InputContentInfo(@NonNull android.net.Uri, @NonNull android.content.ClipDescription);
+    ctor public InputContentInfo(@NonNull android.net.Uri, @NonNull android.content.ClipDescription, @Nullable android.net.Uri);
+    method public int describeContents();
+    method @NonNull public android.net.Uri getContentUri();
+    method @NonNull public android.content.ClipDescription getDescription();
+    method @Nullable public android.net.Uri getLinkUri();
+    method public void releasePermission();
+    method public void requestPermission();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputContentInfo> CREATOR;
+  }
+
+  public interface InputMethod {
+    method @MainThread public void attachToken(android.os.IBinder);
+    method @MainThread public void bindInput(android.view.inputmethod.InputBinding);
+    method @MainThread public void changeInputMethodSubtype(android.view.inputmethod.InputMethodSubtype);
+    method @MainThread public void createSession(android.view.inputmethod.InputMethod.SessionCallback);
+    method @MainThread public void hideSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void restartInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void revokeSession(android.view.inputmethod.InputMethodSession);
+    method @MainThread public void setSessionEnabled(android.view.inputmethod.InputMethodSession, boolean);
+    method @MainThread public void showSoftInput(int, android.os.ResultReceiver);
+    method @MainThread public void startInput(android.view.inputmethod.InputConnection, android.view.inputmethod.EditorInfo);
+    method @MainThread public void unbindInput();
+    field public static final String SERVICE_INTERFACE = "android.view.InputMethod";
+    field public static final String SERVICE_META_DATA = "android.view.im";
+    field public static final int SHOW_EXPLICIT = 1; // 0x1
+    field public static final int SHOW_FORCED = 2; // 0x2
+  }
+
+  public static interface InputMethod.SessionCallback {
+    method public void sessionCreated(android.view.inputmethod.InputMethodSession);
+  }
+
+  public final class InputMethodInfo implements android.os.Parcelable {
+    ctor public InputMethodInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    ctor public InputMethodInfo(String, String, CharSequence, String);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public android.content.ComponentName getComponent();
+    method public int getConfigChanges();
+    method public String getId();
+    method public int getIsDefaultResourceId();
+    method public String getPackageName();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public String getServiceName();
+    method public String getSettingsActivity();
+    method public android.view.inputmethod.InputMethodSubtype getSubtypeAt(int);
+    method public int getSubtypeCount();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public boolean shouldShowInInputMethodPicker();
+    method public boolean suppressesSpellChecker();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputMethodInfo> CREATOR;
+  }
+
+  public final class InputMethodManager {
+    method public void dispatchKeyEventFromInputMethod(@Nullable android.view.View, @NonNull android.view.KeyEvent);
+    method public void displayCompletions(android.view.View, android.view.inputmethod.CompletionInfo[]);
+    method public android.view.inputmethod.InputMethodSubtype getCurrentInputMethodSubtype();
+    method public java.util.List<android.view.inputmethod.InputMethodInfo> getEnabledInputMethodList();
+    method public java.util.List<android.view.inputmethod.InputMethodSubtype> getEnabledInputMethodSubtypeList(android.view.inputmethod.InputMethodInfo, boolean);
+    method public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodList();
+    method public android.view.inputmethod.InputMethodSubtype getLastInputMethodSubtype();
+    method public java.util.Map<android.view.inputmethod.InputMethodInfo,java.util.List<android.view.inputmethod.InputMethodSubtype>> getShortcutInputMethodsAndSubtypes();
+    method @Deprecated public void hideSoftInputFromInputMethod(android.os.IBinder, int);
+    method public boolean hideSoftInputFromWindow(android.os.IBinder, int);
+    method public boolean hideSoftInputFromWindow(android.os.IBinder, int, android.os.ResultReceiver);
+    method @Deprecated public void hideStatusIcon(android.os.IBinder);
+    method public boolean isAcceptingText();
+    method public boolean isActive(android.view.View);
+    method public boolean isActive();
+    method public boolean isFullscreenMode();
+    method public boolean isInputMethodSuppressingSpellChecker();
+    method @Deprecated public boolean isWatchingCursor(android.view.View);
+    method public void restartInput(android.view.View);
+    method public void sendAppPrivateCommand(android.view.View, String, android.os.Bundle);
+    method @Deprecated public void setAdditionalInputMethodSubtypes(String, android.view.inputmethod.InputMethodSubtype[]);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean setCurrentInputMethodSubtype(android.view.inputmethod.InputMethodSubtype);
+    method @Deprecated public void setInputMethod(android.os.IBinder, String);
+    method @Deprecated public void setInputMethodAndSubtype(@NonNull android.os.IBinder, String, android.view.inputmethod.InputMethodSubtype);
+    method @Deprecated public boolean shouldOfferSwitchingToNextInputMethod(android.os.IBinder);
+    method public void showInputMethodAndSubtypeEnabler(String);
+    method public void showInputMethodPicker();
+    method public boolean showSoftInput(android.view.View, int);
+    method public boolean showSoftInput(android.view.View, int, android.os.ResultReceiver);
+    method @Deprecated public void showSoftInputFromInputMethod(android.os.IBinder, int);
+    method @Deprecated public void showStatusIcon(android.os.IBinder, String, @DrawableRes int);
+    method @Deprecated public boolean switchToLastInputMethod(android.os.IBinder);
+    method @Deprecated public boolean switchToNextInputMethod(android.os.IBinder, boolean);
+    method @Deprecated public void toggleSoftInput(int, int);
+    method @Deprecated public void toggleSoftInputFromWindow(android.os.IBinder, int, int);
+    method @Deprecated public void updateCursor(android.view.View, int, int, int, int);
+    method public void updateCursorAnchorInfo(android.view.View, android.view.inputmethod.CursorAnchorInfo);
+    method public void updateExtractedText(android.view.View, int, android.view.inputmethod.ExtractedText);
+    method public void updateSelection(android.view.View, int, int, int, int);
+    method @Deprecated public void viewClicked(android.view.View);
+    field public static final int HIDE_IMPLICIT_ONLY = 1; // 0x1
+    field public static final int HIDE_NOT_ALWAYS = 2; // 0x2
+    field public static final int RESULT_HIDDEN = 3; // 0x3
+    field public static final int RESULT_SHOWN = 2; // 0x2
+    field public static final int RESULT_UNCHANGED_HIDDEN = 1; // 0x1
+    field public static final int RESULT_UNCHANGED_SHOWN = 0; // 0x0
+    field public static final int SHOW_FORCED = 2; // 0x2
+    field public static final int SHOW_IMPLICIT = 1; // 0x1
+  }
+
+  public interface InputMethodSession {
+    method public void appPrivateCommand(String, android.os.Bundle);
+    method public void dispatchGenericMotionEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchKeyEvent(int, android.view.KeyEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void dispatchTrackballEvent(int, android.view.MotionEvent, android.view.inputmethod.InputMethodSession.EventCallback);
+    method public void displayCompletions(android.view.inputmethod.CompletionInfo[]);
+    method public void finishInput();
+    method @Deprecated public void toggleSoftInput(int, int);
+    method public void updateCursor(android.graphics.Rect);
+    method public void updateCursorAnchorInfo(android.view.inputmethod.CursorAnchorInfo);
+    method public void updateExtractedText(int, android.view.inputmethod.ExtractedText);
+    method public void updateSelection(int, int, int, int, int, int);
+    method public void viewClicked(boolean);
+  }
+
+  public static interface InputMethodSession.EventCallback {
+    method public void finishedEvent(int, boolean);
+  }
+
+  public final class InputMethodSubtype implements android.os.Parcelable {
+    ctor @Deprecated public InputMethodSubtype(int, int, String, String, String, boolean, boolean);
+    ctor @Deprecated public InputMethodSubtype(int, int, String, String, String, boolean, boolean, int);
+    method public boolean containsExtraValueKey(String);
+    method public int describeContents();
+    method @NonNull public CharSequence getDisplayName(android.content.Context, String, android.content.pm.ApplicationInfo);
+    method public String getExtraValue();
+    method public String getExtraValueOf(String);
+    method public int getIconResId();
+    method @NonNull public String getLanguageTag();
+    method @Deprecated @NonNull public String getLocale();
+    method public String getMode();
+    method public int getNameResId();
+    method public boolean isAsciiCapable();
+    method public boolean isAuxiliary();
+    method public boolean overridesImplicitlyEnabledSubtype();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.InputMethodSubtype> CREATOR;
+  }
+
+  public static class InputMethodSubtype.InputMethodSubtypeBuilder {
+    ctor public InputMethodSubtype.InputMethodSubtypeBuilder();
+    method public android.view.inputmethod.InputMethodSubtype build();
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setIsAsciiCapable(boolean);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setIsAuxiliary(boolean);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setLanguageTag(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setOverridesImplicitlyEnabledSubtype(boolean);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeExtraValue(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeIconResId(int);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeId(int);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeLocale(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeMode(String);
+    method public android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder setSubtypeNameResId(int);
+  }
+
+  public final class SurroundingText implements android.os.Parcelable {
+    ctor public SurroundingText(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0xffffffff) int);
+    method public int describeContents();
+    method @IntRange(from=0xffffffff) public int getOffset();
+    method @IntRange(from=0) public int getSelectionEnd();
+    method @IntRange(from=0) public int getSelectionStart();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.inputmethod.SurroundingText> CREATOR;
+  }
+
+}
+
+package android.view.inspector {
+
+  public interface InspectionCompanion<T> {
+    method public void mapProperties(@NonNull android.view.inspector.PropertyMapper);
+    method public void readProperties(@NonNull T, @NonNull android.view.inspector.PropertyReader);
+  }
+
+  public static class InspectionCompanion.UninitializedPropertyMapException extends java.lang.RuntimeException {
+    ctor public InspectionCompanion.UninitializedPropertyMapException();
+  }
+
+  public interface InspectionCompanionProvider {
+    method @Nullable public <T> android.view.inspector.InspectionCompanion<T> provide(@NonNull Class<T>);
+  }
+
+  public final class IntFlagMapping {
+    ctor public IntFlagMapping();
+    method public void add(int, int, @NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> get(int);
+  }
+
+  public interface PropertyMapper {
+    method public int mapBoolean(@NonNull String, @AttrRes int);
+    method public int mapByte(@NonNull String, @AttrRes int);
+    method public int mapChar(@NonNull String, @AttrRes int);
+    method public int mapColor(@NonNull String, @AttrRes int);
+    method public int mapDouble(@NonNull String, @AttrRes int);
+    method public int mapFloat(@NonNull String, @AttrRes int);
+    method public int mapGravity(@NonNull String, @AttrRes int);
+    method public int mapInt(@NonNull String, @AttrRes int);
+    method public int mapIntEnum(@NonNull String, @AttrRes int, @NonNull java.util.function.IntFunction<java.lang.String>);
+    method public int mapIntFlag(@NonNull String, @AttrRes int, @NonNull java.util.function.IntFunction<java.util.Set<java.lang.String>>);
+    method public int mapLong(@NonNull String, @AttrRes int);
+    method public int mapObject(@NonNull String, @AttrRes int);
+    method public int mapResourceId(@NonNull String, @AttrRes int);
+    method public int mapShort(@NonNull String, @AttrRes int);
+  }
+
+  public static class PropertyMapper.PropertyConflictException extends java.lang.RuntimeException {
+    ctor public PropertyMapper.PropertyConflictException(@NonNull String, @NonNull String, @NonNull String);
+  }
+
+  public interface PropertyReader {
+    method public void readBoolean(int, boolean);
+    method public void readByte(int, byte);
+    method public void readChar(int, char);
+    method public void readColor(int, @ColorInt int);
+    method public void readColor(int, @ColorLong long);
+    method public void readColor(int, @Nullable android.graphics.Color);
+    method public void readDouble(int, double);
+    method public void readFloat(int, float);
+    method public void readGravity(int, int);
+    method public void readInt(int, int);
+    method public void readIntEnum(int, int);
+    method public void readIntFlag(int, int);
+    method public void readLong(int, long);
+    method public void readObject(int, @Nullable Object);
+    method public void readResourceId(int, @AnyRes int);
+    method public void readShort(int, short);
+  }
+
+  public static class PropertyReader.PropertyTypeMismatchException extends java.lang.RuntimeException {
+    ctor public PropertyReader.PropertyTypeMismatchException(int, @NonNull String, @NonNull String, @Nullable String);
+    ctor public PropertyReader.PropertyTypeMismatchException(int, @NonNull String, @NonNull String);
+  }
+
+  public class StaticInspectionCompanionProvider implements android.view.inspector.InspectionCompanionProvider {
+    ctor public StaticInspectionCompanionProvider();
+    method @Nullable public <T> android.view.inspector.InspectionCompanion<T> provide(@NonNull Class<T>);
+  }
+
+  public final class WindowInspector {
+    method @NonNull public static java.util.List<android.view.View> getGlobalWindowViews();
+  }
+
+}
+
+package android.view.textclassifier {
+
+  public final class ConversationAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.RemoteAction getAction();
+    method @FloatRange(from=0, to=1) public float getConfidenceScore();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public CharSequence getTextReply();
+    method @NonNull public String getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationAction> CREATOR;
+    field public static final String TYPE_CALL_PHONE = "call_phone";
+    field public static final String TYPE_CREATE_REMINDER = "create_reminder";
+    field public static final String TYPE_OPEN_URL = "open_url";
+    field public static final String TYPE_SEND_EMAIL = "send_email";
+    field public static final String TYPE_SEND_SMS = "send_sms";
+    field public static final String TYPE_SHARE_LOCATION = "share_location";
+    field public static final String TYPE_TEXT_REPLY = "text_reply";
+    field public static final String TYPE_TRACK_FLIGHT = "track_flight";
+    field public static final String TYPE_VIEW_CALENDAR = "view_calendar";
+    field public static final String TYPE_VIEW_MAP = "view_map";
+  }
+
+  public static final class ConversationAction.Builder {
+    ctor public ConversationAction.Builder(@NonNull String);
+    method @NonNull public android.view.textclassifier.ConversationAction build();
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setAction(@Nullable android.app.RemoteAction);
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setConfidenceScore(@FloatRange(from=0, to=1) float);
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.ConversationAction.Builder setTextReply(@Nullable CharSequence);
+  }
+
+  public final class ConversationActions implements android.os.Parcelable {
+    ctor public ConversationActions(@NonNull java.util.List<android.view.textclassifier.ConversationAction>, @Nullable String);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.view.textclassifier.ConversationAction> getConversationActions();
+    method @Nullable public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions> CREATOR;
+  }
+
+  public static final class ConversationActions.Message implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.app.Person getAuthor();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.time.ZonedDateTime getReferenceTime();
+    method @Nullable public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions.Message> CREATOR;
+    field @NonNull public static final android.app.Person PERSON_USER_OTHERS;
+    field @NonNull public static final android.app.Person PERSON_USER_SELF;
+  }
+
+  public static final class ConversationActions.Message.Builder {
+    ctor public ConversationActions.Message.Builder(@NonNull android.app.Person);
+    method @NonNull public android.view.textclassifier.ConversationActions.Message build();
+    method @NonNull public android.view.textclassifier.ConversationActions.Message.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.ConversationActions.Message.Builder setReferenceTime(@Nullable java.time.ZonedDateTime);
+    method @NonNull public android.view.textclassifier.ConversationActions.Message.Builder setText(@Nullable CharSequence);
+  }
+
+  public static final class ConversationActions.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @NonNull public java.util.List<android.view.textclassifier.ConversationActions.Message> getConversation();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public java.util.List<java.lang.String> getHints();
+    method @IntRange(from=0xffffffff) public int getMaxSuggestions();
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig getTypeConfig();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.ConversationActions.Request> CREATOR;
+    field public static final String HINT_FOR_IN_APP = "in_app";
+    field public static final String HINT_FOR_NOTIFICATION = "notification";
+  }
+
+  public static final class ConversationActions.Request.Builder {
+    ctor public ConversationActions.Request.Builder(@NonNull java.util.List<android.view.textclassifier.ConversationActions.Message>);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request build();
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setHints(@Nullable java.util.List<java.lang.String>);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setMaxSuggestions(@IntRange(from=0xffffffff) int);
+    method @NonNull public android.view.textclassifier.ConversationActions.Request.Builder setTypeConfig(@Nullable android.view.textclassifier.TextClassifier.EntityConfig);
+  }
+
+  public final class SelectionEvent implements android.os.Parcelable {
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionActionEvent(int, int, int);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionActionEvent(int, int, int, @NonNull android.view.textclassifier.TextClassification);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionModifiedEvent(int, int);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionModifiedEvent(int, int, @NonNull android.view.textclassifier.TextClassification);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionModifiedEvent(int, int, @NonNull android.view.textclassifier.TextSelection);
+    method @NonNull public static android.view.textclassifier.SelectionEvent createSelectionStartedEvent(int, int);
+    method public int describeContents();
+    method public long getDurationSincePreviousEvent();
+    method public long getDurationSinceSessionStart();
+    method public int getEnd();
+    method @NonNull public String getEntityType();
+    method public int getEventIndex();
+    method public long getEventTime();
+    method public int getEventType();
+    method public int getInvocationMethod();
+    method @NonNull public String getPackageName();
+    method @Nullable public String getResultId();
+    method @Nullable public android.view.textclassifier.TextClassificationSessionId getSessionId();
+    method public int getSmartEnd();
+    method public int getSmartStart();
+    method public int getStart();
+    method @NonNull public String getWidgetType();
+    method @Nullable public String getWidgetVersion();
+    method public static boolean isTerminal(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_ABANDON = 107; // 0x6b
+    field public static final int ACTION_COPY = 101; // 0x65
+    field public static final int ACTION_CUT = 103; // 0x67
+    field public static final int ACTION_DRAG = 106; // 0x6a
+    field public static final int ACTION_OTHER = 108; // 0x6c
+    field public static final int ACTION_OVERTYPE = 100; // 0x64
+    field public static final int ACTION_PASTE = 102; // 0x66
+    field public static final int ACTION_RESET = 201; // 0xc9
+    field public static final int ACTION_SELECT_ALL = 200; // 0xc8
+    field public static final int ACTION_SHARE = 104; // 0x68
+    field public static final int ACTION_SMART_SHARE = 105; // 0x69
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.SelectionEvent> CREATOR;
+    field public static final int EVENT_AUTO_SELECTION = 5; // 0x5
+    field public static final int EVENT_SELECTION_MODIFIED = 2; // 0x2
+    field public static final int EVENT_SELECTION_STARTED = 1; // 0x1
+    field public static final int EVENT_SMART_SELECTION_MULTI = 4; // 0x4
+    field public static final int EVENT_SMART_SELECTION_SINGLE = 3; // 0x3
+    field public static final int INVOCATION_LINK = 2; // 0x2
+    field public static final int INVOCATION_MANUAL = 1; // 0x1
+    field public static final int INVOCATION_UNKNOWN = 0; // 0x0
+  }
+
+  public final class TextClassification implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.List<android.app.RemoteAction> getActions();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String);
+    method @NonNull public String getEntity(int);
+    method @IntRange(from=0) public int getEntityCount();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getIcon();
+    method @Nullable public String getId();
+    method @Deprecated @Nullable public android.content.Intent getIntent();
+    method @Deprecated @Nullable public CharSequence getLabel();
+    method @Deprecated @Nullable public android.view.View.OnClickListener getOnClickListener();
+    method @Nullable public String getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassification> CREATOR;
+  }
+
+  public static final class TextClassification.Builder {
+    ctor public TextClassification.Builder();
+    method @NonNull public android.view.textclassifier.TextClassification.Builder addAction(@NonNull android.app.RemoteAction);
+    method @NonNull public android.view.textclassifier.TextClassification build();
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setEntityType(@NonNull String, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setExtras(@Nullable android.os.Bundle);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setIcon(@Nullable android.graphics.drawable.Drawable);
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setId(@Nullable String);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setIntent(@Nullable android.content.Intent);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setLabel(@Nullable String);
+    method @Deprecated @NonNull public android.view.textclassifier.TextClassification.Builder setOnClickListener(@Nullable android.view.View.OnClickListener);
+    method @NonNull public android.view.textclassifier.TextClassification.Builder setText(@Nullable String);
+  }
+
+  public static final class TextClassification.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @Nullable public android.os.LocaleList getDefaultLocales();
+    method @IntRange(from=0) public int getEndIndex();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.time.ZonedDateTime getReferenceTime();
+    method @IntRange(from=0) public int getStartIndex();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassification.Request> CREATOR;
+  }
+
+  public static final class TextClassification.Request.Builder {
+    ctor public TextClassification.Request.Builder(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.textclassifier.TextClassification.Request build();
+    method @NonNull public android.view.textclassifier.TextClassification.Request.Builder setDefaultLocales(@Nullable android.os.LocaleList);
+    method @NonNull public android.view.textclassifier.TextClassification.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextClassification.Request.Builder setReferenceTime(@Nullable java.time.ZonedDateTime);
+  }
+
+  public final class TextClassificationContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getPackageName();
+    method @NonNull public String getWidgetType();
+    method @Nullable public String getWidgetVersion();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassificationContext> CREATOR;
+  }
+
+  public static final class TextClassificationContext.Builder {
+    ctor public TextClassificationContext.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.view.textclassifier.TextClassificationContext build();
+    method public android.view.textclassifier.TextClassificationContext.Builder setWidgetVersion(@Nullable String);
+  }
+
+  public final class TextClassificationManager {
+    method @NonNull public android.view.textclassifier.TextClassifier createTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext);
+    method @NonNull public android.view.textclassifier.TextClassifier getTextClassifier();
+    method public void setTextClassificationSessionFactory(@Nullable android.view.textclassifier.TextClassificationSessionFactory);
+    method public void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+  }
+
+  public interface TextClassificationSessionFactory {
+    method @NonNull public android.view.textclassifier.TextClassifier createTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext);
+  }
+
+  public final class TextClassificationSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getValue();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassificationSessionId> CREATOR;
+  }
+
+  public interface TextClassifier {
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextClassification classifyText(@NonNull android.view.textclassifier.TextClassification.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextClassification classifyText(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.os.LocaleList);
+    method public default void destroy();
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextLanguage detectLanguage(@NonNull android.view.textclassifier.TextLanguage.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextLinks generateLinks(@NonNull android.view.textclassifier.TextLinks.Request);
+    method @WorkerThread public default int getMaxGenerateLinksTextLength();
+    method public default boolean isDestroyed();
+    method public default void onSelectionEvent(@NonNull android.view.textclassifier.SelectionEvent);
+    method public default void onTextClassifierEvent(@NonNull android.view.textclassifier.TextClassifierEvent);
+    method @NonNull @WorkerThread public default android.view.textclassifier.ConversationActions suggestConversationActions(@NonNull android.view.textclassifier.ConversationActions.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextSelection suggestSelection(@NonNull android.view.textclassifier.TextSelection.Request);
+    method @NonNull @WorkerThread public default android.view.textclassifier.TextSelection suggestSelection(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int, @Nullable android.os.LocaleList);
+    field public static final String EXTRA_FROM_TEXT_CLASSIFIER = "android.view.textclassifier.extra.FROM_TEXT_CLASSIFIER";
+    field public static final String HINT_TEXT_IS_EDITABLE = "android.text_is_editable";
+    field public static final String HINT_TEXT_IS_NOT_EDITABLE = "android.text_is_not_editable";
+    field public static final android.view.textclassifier.TextClassifier NO_OP;
+    field public static final String TYPE_ADDRESS = "address";
+    field public static final String TYPE_DATE = "date";
+    field public static final String TYPE_DATE_TIME = "datetime";
+    field public static final String TYPE_EMAIL = "email";
+    field public static final String TYPE_FLIGHT_NUMBER = "flight";
+    field public static final String TYPE_OTHER = "other";
+    field public static final String TYPE_PHONE = "phone";
+    field public static final String TYPE_UNKNOWN = "";
+    field public static final String TYPE_URL = "url";
+    field public static final String WIDGET_TYPE_CLIPBOARD = "clipboard";
+    field public static final String WIDGET_TYPE_CUSTOM_EDITTEXT = "customedit";
+    field public static final String WIDGET_TYPE_CUSTOM_TEXTVIEW = "customview";
+    field public static final String WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW = "nosel-customview";
+    field public static final String WIDGET_TYPE_EDITTEXT = "edittext";
+    field public static final String WIDGET_TYPE_EDIT_WEBVIEW = "edit-webview";
+    field public static final String WIDGET_TYPE_NOTIFICATION = "notification";
+    field public static final String WIDGET_TYPE_TEXTVIEW = "textview";
+    field public static final String WIDGET_TYPE_UNKNOWN = "unknown";
+    field public static final String WIDGET_TYPE_UNSELECTABLE_TEXTVIEW = "nosel-textview";
+    field public static final String WIDGET_TYPE_WEBVIEW = "webview";
+  }
+
+  public static final class TextClassifier.EntityConfig implements android.os.Parcelable {
+    method @Deprecated public static android.view.textclassifier.TextClassifier.EntityConfig create(@Nullable java.util.Collection<java.lang.String>, @Nullable java.util.Collection<java.lang.String>, @Nullable java.util.Collection<java.lang.String>);
+    method @Deprecated public static android.view.textclassifier.TextClassifier.EntityConfig createWithExplicitEntityList(@Nullable java.util.Collection<java.lang.String>);
+    method @Deprecated public static android.view.textclassifier.TextClassifier.EntityConfig createWithHints(@Nullable java.util.Collection<java.lang.String>);
+    method public int describeContents();
+    method public java.util.Collection<java.lang.String> getHints();
+    method public java.util.Collection<java.lang.String> resolveEntityListModifications(@NonNull java.util.Collection<java.lang.String>);
+    method public boolean shouldIncludeTypesFromTextClassifier();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifier.EntityConfig> CREATOR;
+  }
+
+  public static final class TextClassifier.EntityConfig.Builder {
+    ctor public TextClassifier.EntityConfig.Builder();
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig build();
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder includeTypesFromTextClassifier(boolean);
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder setExcludedTypes(@Nullable java.util.Collection<java.lang.String>);
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder setHints(@Nullable java.util.Collection<java.lang.String>);
+    method @NonNull public android.view.textclassifier.TextClassifier.EntityConfig.Builder setIncludedTypes(@Nullable java.util.Collection<java.lang.String>);
+  }
+
+  public abstract class TextClassifierEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public int[] getActionIndices();
+    method @NonNull public String[] getEntityTypes();
+    method public int getEventCategory();
+    method @Nullable public android.view.textclassifier.TextClassificationContext getEventContext();
+    method public int getEventIndex();
+    method public int getEventType();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public android.icu.util.ULocale getLocale();
+    method @Nullable public String getModelName();
+    method @Nullable public String getResultId();
+    method @NonNull public float[] getScores();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CATEGORY_CONVERSATION_ACTIONS = 3; // 0x3
+    field public static final int CATEGORY_LANGUAGE_DETECTION = 4; // 0x4
+    field public static final int CATEGORY_LINKIFY = 2; // 0x2
+    field public static final int CATEGORY_SELECTION = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent> CREATOR;
+    field public static final int TYPE_ACTIONS_GENERATED = 20; // 0x14
+    field public static final int TYPE_ACTIONS_SHOWN = 6; // 0x6
+    field public static final int TYPE_AUTO_SELECTION = 5; // 0x5
+    field public static final int TYPE_COPY_ACTION = 9; // 0x9
+    field public static final int TYPE_CUT_ACTION = 11; // 0xb
+    field public static final int TYPE_LINKS_GENERATED = 21; // 0x15
+    field public static final int TYPE_LINK_CLICKED = 7; // 0x7
+    field public static final int TYPE_MANUAL_REPLY = 19; // 0x13
+    field public static final int TYPE_OTHER_ACTION = 16; // 0x10
+    field public static final int TYPE_OVERTYPE = 8; // 0x8
+    field public static final int TYPE_PASTE_ACTION = 10; // 0xa
+    field public static final int TYPE_SELECTION_DESTROYED = 15; // 0xf
+    field public static final int TYPE_SELECTION_DRAG = 14; // 0xe
+    field public static final int TYPE_SELECTION_MODIFIED = 2; // 0x2
+    field public static final int TYPE_SELECTION_RESET = 18; // 0x12
+    field public static final int TYPE_SELECTION_STARTED = 1; // 0x1
+    field public static final int TYPE_SELECT_ALL = 17; // 0x11
+    field public static final int TYPE_SHARE_ACTION = 12; // 0xc
+    field public static final int TYPE_SMART_ACTION = 13; // 0xd
+    field public static final int TYPE_SMART_SELECTION_MULTI = 4; // 0x4
+    field public static final int TYPE_SMART_SELECTION_SINGLE = 3; // 0x3
+  }
+
+  public abstract static class TextClassifierEvent.Builder<T extends android.view.textclassifier.TextClassifierEvent.Builder<T>> {
+    method @NonNull public T setActionIndices(@NonNull int...);
+    method @NonNull public T setEntityTypes(@NonNull java.lang.String...);
+    method @NonNull public T setEventContext(@Nullable android.view.textclassifier.TextClassificationContext);
+    method @NonNull public T setEventIndex(int);
+    method @NonNull public T setExtras(@NonNull android.os.Bundle);
+    method @NonNull public T setLocale(@Nullable android.icu.util.ULocale);
+    method @NonNull public T setModelName(@Nullable String);
+    method @NonNull public T setResultId(@Nullable String);
+    method @NonNull public T setScores(@NonNull float...);
+  }
+
+  public static final class TextClassifierEvent.ConversationActionsEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.ConversationActionsEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent.Builder> {
+    ctor public TextClassifierEvent.ConversationActionsEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent build();
+  }
+
+  public static final class TextClassifierEvent.LanguageDetectionEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.LanguageDetectionEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent.Builder> {
+    ctor public TextClassifierEvent.LanguageDetectionEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent build();
+  }
+
+  public static final class TextClassifierEvent.TextLinkifyEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.TextLinkifyEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent.Builder> {
+    ctor public TextClassifierEvent.TextLinkifyEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent build();
+  }
+
+  public static final class TextClassifierEvent.TextSelectionEvent extends android.view.textclassifier.TextClassifierEvent implements android.os.Parcelable {
+    method public int getRelativeSuggestedWordEndIndex();
+    method public int getRelativeSuggestedWordStartIndex();
+    method public int getRelativeWordEndIndex();
+    method public int getRelativeWordStartIndex();
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextClassifierEvent.TextSelectionEvent> CREATOR;
+  }
+
+  public static final class TextClassifierEvent.TextSelectionEvent.Builder extends android.view.textclassifier.TextClassifierEvent.Builder<android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder> {
+    ctor public TextClassifierEvent.TextSelectionEvent.Builder(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent build();
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeSuggestedWordEndIndex(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeSuggestedWordStartIndex(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeWordEndIndex(int);
+    method @NonNull public android.view.textclassifier.TextClassifierEvent.TextSelectionEvent.Builder setRelativeWordStartIndex(int);
+  }
+
+  public final class TextLanguage implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(@NonNull android.icu.util.ULocale);
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public String getId();
+    method @NonNull public android.icu.util.ULocale getLocale(int);
+    method @IntRange(from=0) public int getLocaleHypothesisCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLanguage> CREATOR;
+  }
+
+  public static final class TextLanguage.Builder {
+    ctor public TextLanguage.Builder();
+    method @NonNull public android.view.textclassifier.TextLanguage build();
+    method @NonNull public android.view.textclassifier.TextLanguage.Builder putLocale(@NonNull android.icu.util.ULocale, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.textclassifier.TextLanguage.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextLanguage.Builder setId(@Nullable String);
+  }
+
+  public static final class TextLanguage.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLanguage.Request> CREATOR;
+  }
+
+  public static final class TextLanguage.Request.Builder {
+    ctor public TextLanguage.Request.Builder(@NonNull CharSequence);
+    method @NonNull public android.view.textclassifier.TextLanguage.Request build();
+    method @NonNull public android.view.textclassifier.TextLanguage.Request.Builder setExtras(@NonNull android.os.Bundle);
+  }
+
+  public final class TextLinks implements android.os.Parcelable {
+    method public int apply(@NonNull android.text.Spannable, int, @Nullable java.util.function.Function<android.view.textclassifier.TextLinks.TextLink,android.view.textclassifier.TextLinks.TextLinkSpan>);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public java.util.Collection<android.view.textclassifier.TextLinks.TextLink> getLinks();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int APPLY_STRATEGY_IGNORE = 0; // 0x0
+    field public static final int APPLY_STRATEGY_REPLACE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks> CREATOR;
+    field public static final int STATUS_DIFFERENT_TEXT = 3; // 0x3
+    field public static final int STATUS_LINKS_APPLIED = 0; // 0x0
+    field public static final int STATUS_NO_LINKS_APPLIED = 2; // 0x2
+    field public static final int STATUS_NO_LINKS_FOUND = 1; // 0x1
+    field public static final int STATUS_UNSUPPORTED_CHARACTER = 4; // 0x4
+  }
+
+  public static final class TextLinks.Builder {
+    ctor public TextLinks.Builder(@NonNull String);
+    method @NonNull public android.view.textclassifier.TextLinks.Builder addLink(int, int, @NonNull java.util.Map<java.lang.String,java.lang.Float>);
+    method @NonNull public android.view.textclassifier.TextLinks.Builder addLink(int, int, @NonNull java.util.Map<java.lang.String,java.lang.Float>, @NonNull android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextLinks build();
+    method @NonNull public android.view.textclassifier.TextLinks.Builder clearTextLinks();
+    method @NonNull public android.view.textclassifier.TextLinks.Builder setExtras(@Nullable android.os.Bundle);
+  }
+
+  public static final class TextLinks.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @Nullable public android.os.LocaleList getDefaultLocales();
+    method @Nullable public android.view.textclassifier.TextClassifier.EntityConfig getEntityConfig();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.time.ZonedDateTime getReferenceTime();
+    method @NonNull public CharSequence getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.Request> CREATOR;
+  }
+
+  public static final class TextLinks.Request.Builder {
+    ctor public TextLinks.Request.Builder(@NonNull CharSequence);
+    method @NonNull public android.view.textclassifier.TextLinks.Request build();
+    method @NonNull public android.view.textclassifier.TextLinks.Request.Builder setDefaultLocales(@Nullable android.os.LocaleList);
+    method @NonNull public android.view.textclassifier.TextLinks.Request.Builder setEntityConfig(@Nullable android.view.textclassifier.TextClassifier.EntityConfig);
+    method public android.view.textclassifier.TextLinks.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextLinks.Request.Builder setReferenceTime(@Nullable java.time.ZonedDateTime);
+  }
+
+  public static final class TextLinks.TextLink implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String);
+    method public int getEnd();
+    method @NonNull public String getEntity(int);
+    method public int getEntityCount();
+    method @NonNull public android.os.Bundle getExtras();
+    method public int getStart();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextLinks.TextLink> CREATOR;
+  }
+
+  public static class TextLinks.TextLinkSpan extends android.text.style.ClickableSpan {
+    ctor public TextLinks.TextLinkSpan(@NonNull android.view.textclassifier.TextLinks.TextLink);
+    method public final android.view.textclassifier.TextLinks.TextLink getTextLink();
+    method public void onClick(android.view.View);
+  }
+
+  public final class TextSelection implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public float getConfidenceScore(String);
+    method @NonNull public String getEntity(int);
+    method @IntRange(from=0) public int getEntityCount();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public String getId();
+    method public int getSelectionEndIndex();
+    method public int getSelectionStartIndex();
+    method @Nullable public android.view.textclassifier.TextClassification getTextClassification();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection> CREATOR;
+  }
+
+  public static final class TextSelection.Builder {
+    ctor public TextSelection.Builder(@IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.textclassifier.TextSelection build();
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setEntityType(@NonNull String, @FloatRange(from=0.0, to=1.0) float);
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setId(@Nullable String);
+    method @NonNull public android.view.textclassifier.TextSelection.Builder setTextClassification(@Nullable android.view.textclassifier.TextClassification);
+  }
+
+  public static final class TextSelection.Request implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCallingPackageName();
+    method @Nullable public android.os.LocaleList getDefaultLocales();
+    method @IntRange(from=0) public int getEndIndex();
+    method @NonNull public android.os.Bundle getExtras();
+    method @IntRange(from=0) public int getStartIndex();
+    method @NonNull public CharSequence getText();
+    method public boolean shouldIncludeTextClassification();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textclassifier.TextSelection.Request> CREATOR;
+  }
+
+  public static final class TextSelection.Request.Builder {
+    ctor public TextSelection.Request.Builder(@NonNull CharSequence, @IntRange(from=0) int, @IntRange(from=0) int);
+    method @NonNull public android.view.textclassifier.TextSelection.Request build();
+    method @NonNull public android.view.textclassifier.TextSelection.Request.Builder setDefaultLocales(@Nullable android.os.LocaleList);
+    method @NonNull public android.view.textclassifier.TextSelection.Request.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.view.textclassifier.TextSelection.Request.Builder setIncludeTextClassification(boolean);
+  }
+
+}
+
+package android.view.textservice {
+
+  public final class SentenceSuggestionsInfo implements android.os.Parcelable {
+    ctor public SentenceSuggestionsInfo(android.view.textservice.SuggestionsInfo[], int[], int[]);
+    ctor public SentenceSuggestionsInfo(android.os.Parcel);
+    method public int describeContents();
+    method public int getLengthAt(int);
+    method public int getOffsetAt(int);
+    method public int getSuggestionsCount();
+    method public android.view.textservice.SuggestionsInfo getSuggestionsInfoAt(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SentenceSuggestionsInfo> CREATOR;
+  }
+
+  public final class SpellCheckerInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.content.ComponentName getComponent();
+    method public String getId();
+    method public String getPackageName();
+    method public android.content.pm.ServiceInfo getServiceInfo();
+    method public String getSettingsActivity();
+    method public android.view.textservice.SpellCheckerSubtype getSubtypeAt(int);
+    method public int getSubtypeCount();
+    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
+    method public CharSequence loadLabel(android.content.pm.PackageManager);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SpellCheckerInfo> CREATOR;
+  }
+
+  public class SpellCheckerSession {
+    method public void cancel();
+    method public void close();
+    method public void getSentenceSuggestions(android.view.textservice.TextInfo[], int);
+    method public android.view.textservice.SpellCheckerInfo getSpellChecker();
+    method @Deprecated public void getSuggestions(android.view.textservice.TextInfo, int);
+    method @Deprecated public void getSuggestions(android.view.textservice.TextInfo[], int, boolean);
+    method public boolean isSessionDisconnected();
+    field public static final String SERVICE_META_DATA = "android.view.textservice.scs";
+  }
+
+  public static interface SpellCheckerSession.SpellCheckerSessionListener {
+    method public void onGetSentenceSuggestions(android.view.textservice.SentenceSuggestionsInfo[]);
+    method public void onGetSuggestions(android.view.textservice.SuggestionsInfo[]);
+  }
+
+  public static class SpellCheckerSession.SpellCheckerSessionParams {
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public java.util.Locale getLocale();
+    method public int getSupportedAttributes();
+    method public boolean shouldReferToSpellCheckerLanguageSettings();
+  }
+
+  public static final class SpellCheckerSession.SpellCheckerSessionParams.Builder {
+    ctor public SpellCheckerSession.SpellCheckerSessionParams.Builder();
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams build();
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setLocale(@Nullable java.util.Locale);
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setShouldReferToSpellCheckerLanguageSettings(boolean);
+    method @NonNull public android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams.Builder setSupportedAttributes(int);
+  }
+
+  public final class SpellCheckerSubtype implements android.os.Parcelable {
+    ctor @Deprecated public SpellCheckerSubtype(int, String, String);
+    method public boolean containsExtraValueKey(String);
+    method public int describeContents();
+    method public CharSequence getDisplayName(android.content.Context, String, android.content.pm.ApplicationInfo);
+    method public String getExtraValue();
+    method public String getExtraValueOf(String);
+    method @NonNull public String getLanguageTag();
+    method @Deprecated @NonNull public String getLocale();
+    method public int getNameResId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SpellCheckerSubtype> CREATOR;
+  }
+
+  public final class SuggestionsInfo implements android.os.Parcelable {
+    ctor public SuggestionsInfo(int, String[]);
+    ctor public SuggestionsInfo(int, String[], int, int);
+    ctor public SuggestionsInfo(android.os.Parcel);
+    method public int describeContents();
+    method public int getCookie();
+    method public int getSequence();
+    method public String getSuggestionAt(int);
+    method public int getSuggestionsAttributes();
+    method public int getSuggestionsCount();
+    method public void setCookieAndSequence(int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.SuggestionsInfo> CREATOR;
+    field public static final int RESULT_ATTR_DONT_SHOW_UI_FOR_SUGGESTIONS = 16; // 0x10
+    field public static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = 4; // 0x4
+    field public static final int RESULT_ATTR_IN_THE_DICTIONARY = 1; // 0x1
+    field public static final int RESULT_ATTR_LOOKS_LIKE_GRAMMAR_ERROR = 8; // 0x8
+    field public static final int RESULT_ATTR_LOOKS_LIKE_TYPO = 2; // 0x2
+  }
+
+  public final class TextInfo implements android.os.Parcelable {
+    ctor public TextInfo(String);
+    ctor public TextInfo(String, int, int);
+    ctor public TextInfo(CharSequence, int, int, int, int);
+    ctor public TextInfo(android.os.Parcel);
+    method public int describeContents();
+    method public CharSequence getCharSequence();
+    method public int getCookie();
+    method public int getSequence();
+    method public String getText();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.textservice.TextInfo> CREATOR;
+  }
+
+  public final class TextServicesManager {
+    method @Nullable public android.view.textservice.SpellCheckerInfo getCurrentSpellCheckerInfo();
+    method @NonNull public java.util.List<android.view.textservice.SpellCheckerInfo> getEnabledSpellCheckerInfos();
+    method public boolean isSpellCheckerEnabled();
+    method @Nullable public android.view.textservice.SpellCheckerSession newSpellCheckerSession(@Nullable android.os.Bundle, @Nullable java.util.Locale, @NonNull android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener, boolean);
+    method @Nullable public android.view.textservice.SpellCheckerSession newSpellCheckerSession(@NonNull android.view.textservice.SpellCheckerSession.SpellCheckerSessionParams, @NonNull java.util.concurrent.Executor, @NonNull android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener);
+  }
+
+}
+
+package android.view.translation {
+
+  public final class TranslationCapability implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.translation.TranslationSpec getSourceSpec();
+    method public int getState();
+    method public int getSupportedTranslationFlags();
+    method @NonNull public android.view.translation.TranslationSpec getTargetSpec();
+    method public boolean isUiTranslationEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationCapability> CREATOR;
+    field public static final int STATE_AVAILABLE_TO_DOWNLOAD = 1; // 0x1
+    field public static final int STATE_DOWNLOADING = 2; // 0x2
+    field public static final int STATE_NOT_AVAILABLE = 4; // 0x4
+    field public static final int STATE_ON_DEVICE = 3; // 0x3
+  }
+
+  public final class TranslationContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.translation.TranslationSpec getSourceSpec();
+    method @NonNull public android.view.translation.TranslationSpec getTargetSpec();
+    method public int getTranslationFlags();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationContext> CREATOR;
+    field public static final int FLAG_DEFINITIONS = 4; // 0x4
+    field public static final int FLAG_LOW_LATENCY = 1; // 0x1
+    field public static final int FLAG_TRANSLITERATION = 2; // 0x2
+  }
+
+  public static final class TranslationContext.Builder {
+    ctor public TranslationContext.Builder(@NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec);
+    method @NonNull public android.view.translation.TranslationContext build();
+    method @NonNull public android.view.translation.TranslationContext.Builder setTranslationFlags(int);
+  }
+
+  public final class TranslationManager {
+    method public void addOnDeviceTranslationCapabilityUpdateListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationCapability>);
+    method public void createOnDeviceTranslator(@NonNull android.view.translation.TranslationContext, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.Translator>);
+    method @NonNull @WorkerThread public java.util.Set<android.view.translation.TranslationCapability> getOnDeviceTranslationCapabilities(int, int);
+    method @Nullable public android.app.PendingIntent getOnDeviceTranslationSettingsActivityIntent();
+    method public void removeOnDeviceTranslationCapabilityUpdateListener(@NonNull java.util.function.Consumer<android.view.translation.TranslationCapability>);
+  }
+
+  public final class TranslationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getFlags();
+    method @NonNull public java.util.List<android.view.translation.TranslationRequestValue> getTranslationRequestValues();
+    method @NonNull public java.util.List<android.view.translation.ViewTranslationRequest> getViewTranslationRequests();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationRequest> CREATOR;
+    field public static final int FLAG_DICTIONARY_RESULT = 2; // 0x2
+    field public static final int FLAG_PARTIAL_RESPONSES = 8; // 0x8
+    field public static final int FLAG_TRANSLATION_RESULT = 1; // 0x1
+    field public static final int FLAG_TRANSLITERATION_RESULT = 4; // 0x4
+  }
+
+  public static final class TranslationRequest.Builder {
+    ctor public TranslationRequest.Builder();
+    method @NonNull public android.view.translation.TranslationRequest build();
+    method @NonNull public android.view.translation.TranslationRequest.Builder setFlags(int);
+    method @NonNull public android.view.translation.TranslationRequest.Builder setTranslationRequestValues(@NonNull java.util.List<android.view.translation.TranslationRequestValue>);
+    method @NonNull public android.view.translation.TranslationRequest.Builder setViewTranslationRequests(@NonNull java.util.List<android.view.translation.ViewTranslationRequest>);
+  }
+
+  public final class TranslationRequestValue implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.view.translation.TranslationRequestValue forText(@NonNull CharSequence);
+    method @Nullable public CharSequence getText();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationRequestValue> CREATOR;
+  }
+
+  public final class TranslationResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.util.SparseArray<android.view.translation.TranslationResponseValue> getTranslationResponseValues();
+    method public int getTranslationStatus();
+    method @NonNull public android.util.SparseArray<android.view.translation.ViewTranslationResponse> getViewTranslationResponses();
+    method public boolean isFinalResponse();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationResponse> CREATOR;
+    field public static final int TRANSLATION_STATUS_CONTEXT_UNSUPPORTED = 2; // 0x2
+    field public static final int TRANSLATION_STATUS_SUCCESS = 0; // 0x0
+    field public static final int TRANSLATION_STATUS_UNKNOWN_ERROR = 1; // 0x1
+  }
+
+  public static final class TranslationResponse.Builder {
+    ctor public TranslationResponse.Builder(int);
+    method @NonNull public android.view.translation.TranslationResponse build();
+    method @NonNull public android.view.translation.TranslationResponse.Builder setFinalResponse(boolean);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setTranslationResponseValue(int, @NonNull android.view.translation.TranslationResponseValue);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setTranslationResponseValues(@NonNull android.util.SparseArray<android.view.translation.TranslationResponseValue>);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setViewTranslationResponse(int, @NonNull android.view.translation.ViewTranslationResponse);
+    method @NonNull public android.view.translation.TranslationResponse.Builder setViewTranslationResponses(@NonNull android.util.SparseArray<android.view.translation.ViewTranslationResponse>);
+  }
+
+  public final class TranslationResponseValue implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.view.translation.TranslationResponseValue forError();
+    method @NonNull public android.os.Bundle getExtras();
+    method public int getStatusCode();
+    method @Nullable public CharSequence getText();
+    method @Nullable public CharSequence getTransliteration();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationResponseValue> CREATOR;
+    field public static final String EXTRA_DEFINITIONS = "android.view.translation.extra.DEFINITIONS";
+    field public static final int STATUS_ERROR = 1; // 0x1
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public static final class TranslationResponseValue.Builder {
+    ctor public TranslationResponseValue.Builder(int);
+    method @NonNull public android.view.translation.TranslationResponseValue build();
+    method @NonNull public android.view.translation.TranslationResponseValue.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.view.translation.TranslationResponseValue.Builder setText(@NonNull CharSequence);
+    method @NonNull public android.view.translation.TranslationResponseValue.Builder setTransliteration(@NonNull CharSequence);
+  }
+
+  public final class TranslationSpec implements android.os.Parcelable {
+    ctor public TranslationSpec(@NonNull android.icu.util.ULocale, int);
+    method public int describeContents();
+    method public int getDataFormat();
+    method @NonNull public android.icu.util.ULocale getLocale();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.TranslationSpec> CREATOR;
+    field public static final int DATA_FORMAT_TEXT = 1; // 0x1
+  }
+
+  public class Translator {
+    method public void destroy();
+    method public boolean isDestroyed();
+    method @Nullable public void translate(@NonNull android.view.translation.TranslationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
+  }
+
+  public final class UiTranslationManager {
+    method public void registerUiTranslationStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.view.translation.UiTranslationStateCallback);
+    method public void unregisterUiTranslationStateCallback(@NonNull android.view.translation.UiTranslationStateCallback);
+  }
+
+  public interface UiTranslationStateCallback {
+    method public void onFinished();
+    method public void onPaused();
+    method public default void onResumed(@NonNull android.icu.util.ULocale, @NonNull android.icu.util.ULocale);
+    method public default void onStarted(@NonNull android.icu.util.ULocale, @NonNull android.icu.util.ULocale);
+  }
+
+  @UiThread public interface ViewTranslationCallback {
+    method public boolean onClearTranslation(@NonNull android.view.View);
+    method public boolean onHideTranslation(@NonNull android.view.View);
+    method public boolean onShowTranslation(@NonNull android.view.View);
+  }
+
+  public final class ViewTranslationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.autofill.AutofillId getAutofillId();
+    method @NonNull public java.util.Set<java.lang.String> getKeys();
+    method @NonNull public android.view.translation.TranslationRequestValue getValue(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.ViewTranslationRequest> CREATOR;
+    field public static final String ID_TEXT = "android:text";
+  }
+
+  public static final class ViewTranslationRequest.Builder {
+    ctor public ViewTranslationRequest.Builder(@NonNull android.view.autofill.AutofillId);
+    ctor public ViewTranslationRequest.Builder(@NonNull android.view.autofill.AutofillId, long);
+    method @NonNull public android.view.translation.ViewTranslationRequest build();
+    method @NonNull public android.view.translation.ViewTranslationRequest.Builder setValue(@NonNull String, @NonNull android.view.translation.TranslationRequestValue);
+  }
+
+  public final class ViewTranslationResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.view.autofill.AutofillId getAutofillId();
+    method @NonNull public java.util.Set<java.lang.String> getKeys();
+    method @NonNull public android.view.translation.TranslationResponseValue getValue(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.ViewTranslationResponse> CREATOR;
+  }
+
+  public static final class ViewTranslationResponse.Builder {
+    ctor public ViewTranslationResponse.Builder(@NonNull android.view.autofill.AutofillId);
+    method @NonNull public android.view.translation.ViewTranslationResponse build();
+    method public android.view.translation.ViewTranslationResponse.Builder setValue(String, android.view.translation.TranslationResponseValue);
+  }
+
+}
+
+package android.webkit {
+
+  public abstract class ClientCertRequest {
+    ctor public ClientCertRequest();
+    method public abstract void cancel();
+    method public abstract String getHost();
+    method @Nullable public abstract String[] getKeyTypes();
+    method public abstract int getPort();
+    method @Nullable public abstract java.security.Principal[] getPrincipals();
+    method public abstract void ignore();
+    method public abstract void proceed(java.security.PrivateKey, java.security.cert.X509Certificate[]);
+  }
+
+  public class ConsoleMessage {
+    ctor public ConsoleMessage(String, String, int, android.webkit.ConsoleMessage.MessageLevel);
+    method public int lineNumber();
+    method public String message();
+    method public android.webkit.ConsoleMessage.MessageLevel messageLevel();
+    method public String sourceId();
+  }
+
+  public enum ConsoleMessage.MessageLevel {
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel DEBUG;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel ERROR;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel LOG;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel TIP;
+    enum_constant public static final android.webkit.ConsoleMessage.MessageLevel WARNING;
+  }
+
+  public abstract class CookieManager {
+    ctor @Deprecated public CookieManager();
+    method public abstract boolean acceptCookie();
+    method public abstract boolean acceptThirdPartyCookies(android.webkit.WebView);
+    method public static boolean allowFileSchemeCookies();
+    method public abstract void flush();
+    method public abstract String getCookie(String);
+    method public static android.webkit.CookieManager getInstance();
+    method public abstract boolean hasCookies();
+    method @Deprecated public abstract void removeAllCookie();
+    method public abstract void removeAllCookies(@Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method @Deprecated public abstract void removeExpiredCookie();
+    method @Deprecated public abstract void removeSessionCookie();
+    method public abstract void removeSessionCookies(@Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method public abstract void setAcceptCookie(boolean);
+    method @Deprecated public static void setAcceptFileSchemeCookies(boolean);
+    method public abstract void setAcceptThirdPartyCookies(android.webkit.WebView, boolean);
+    method public abstract void setCookie(String, String);
+    method public abstract void setCookie(String, String, @Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+  }
+
+  @Deprecated public final class CookieSyncManager implements java.lang.Runnable {
+    method @Deprecated public static android.webkit.CookieSyncManager createInstance(android.content.Context);
+    method @Deprecated public static android.webkit.CookieSyncManager getInstance();
+    method @Deprecated public void resetSync();
+    method @Deprecated public void run();
+    method @Deprecated public void startSync();
+    method @Deprecated public void stopSync();
+    method @Deprecated public void sync();
+    method @Deprecated protected void syncFromRamToFlash();
+  }
+
+  public class DateSorter {
+    ctor public DateSorter(android.content.Context);
+    method public long getBoundary(int);
+    method public int getIndex(long);
+    method public String getLabel(int);
+    field public static final int DAY_COUNT = 5; // 0x5
+  }
+
+  public interface DownloadListener {
+    method public void onDownloadStart(String, String, String, String, long);
+  }
+
+  public class GeolocationPermissions {
+    method public void allow(String);
+    method public void clear(String);
+    method public void clearAll();
+    method public void getAllowed(String, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public static android.webkit.GeolocationPermissions getInstance();
+    method public void getOrigins(android.webkit.ValueCallback<java.util.Set<java.lang.String>>);
+  }
+
+  public static interface GeolocationPermissions.Callback {
+    method public void invoke(String, boolean, boolean);
+  }
+
+  public class HttpAuthHandler extends android.os.Handler {
+    method public void cancel();
+    method public void proceed(String, String);
+    method public boolean useHttpAuthUsernamePassword();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface JavascriptInterface {
+  }
+
+  public class JsPromptResult extends android.webkit.JsResult {
+    method public void confirm(String);
+  }
+
+  public class JsResult {
+    method public final void cancel();
+    method public final void confirm();
+  }
+
+  public class MimeTypeMap {
+    method @Nullable public String getExtensionFromMimeType(String);
+    method public static String getFileExtensionFromUrl(String);
+    method @Nullable public String getMimeTypeFromExtension(String);
+    method public static android.webkit.MimeTypeMap getSingleton();
+    method public boolean hasExtension(String);
+    method public boolean hasMimeType(String);
+  }
+
+  public abstract class PermissionRequest {
+    ctor public PermissionRequest();
+    method public abstract void deny();
+    method public abstract android.net.Uri getOrigin();
+    method public abstract String[] getResources();
+    method public abstract void grant(String[]);
+    field public static final String RESOURCE_AUDIO_CAPTURE = "android.webkit.resource.AUDIO_CAPTURE";
+    field public static final String RESOURCE_MIDI_SYSEX = "android.webkit.resource.MIDI_SYSEX";
+    field public static final String RESOURCE_PROTECTED_MEDIA_ID = "android.webkit.resource.PROTECTED_MEDIA_ID";
+    field public static final String RESOURCE_VIDEO_CAPTURE = "android.webkit.resource.VIDEO_CAPTURE";
+  }
+
+  public interface PluginStub {
+    method public android.view.View getEmbeddedView(int, android.content.Context);
+    method public android.view.View getFullScreenView(int, android.content.Context);
+  }
+
+  public abstract class RenderProcessGoneDetail {
+    ctor @Deprecated public RenderProcessGoneDetail();
+    method public abstract boolean didCrash();
+    method public abstract int rendererPriorityAtExit();
+  }
+
+  public abstract class SafeBrowsingResponse {
+    ctor @Deprecated public SafeBrowsingResponse();
+    method public abstract void backToSafety(boolean);
+    method public abstract void proceed(boolean);
+    method public abstract void showInterstitial(boolean);
+  }
+
+  public class ServiceWorkerClient {
+    ctor public ServiceWorkerClient();
+    method @Nullable public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebResourceRequest);
+  }
+
+  public abstract class ServiceWorkerController {
+    ctor @Deprecated public ServiceWorkerController();
+    method @NonNull public static android.webkit.ServiceWorkerController getInstance();
+    method @NonNull public abstract android.webkit.ServiceWorkerWebSettings getServiceWorkerWebSettings();
+    method public abstract void setServiceWorkerClient(@Nullable android.webkit.ServiceWorkerClient);
+  }
+
+  public abstract class ServiceWorkerWebSettings {
+    ctor public ServiceWorkerWebSettings();
+    method public abstract boolean getAllowContentAccess();
+    method public abstract boolean getAllowFileAccess();
+    method public abstract boolean getBlockNetworkLoads();
+    method public abstract int getCacheMode();
+    method public abstract void setAllowContentAccess(boolean);
+    method public abstract void setAllowFileAccess(boolean);
+    method public abstract void setBlockNetworkLoads(boolean);
+    method public abstract void setCacheMode(int);
+  }
+
+  public class SslErrorHandler extends android.os.Handler {
+    method public void cancel();
+    method public void proceed();
+  }
+
+  public class TracingConfig {
+    method @NonNull public java.util.List<java.lang.String> getCustomIncludedCategories();
+    method public int getPredefinedCategories();
+    method public int getTracingMode();
+    field public static final int CATEGORIES_ALL = 1; // 0x1
+    field public static final int CATEGORIES_ANDROID_WEBVIEW = 2; // 0x2
+    field public static final int CATEGORIES_FRAME_VIEWER = 64; // 0x40
+    field public static final int CATEGORIES_INPUT_LATENCY = 8; // 0x8
+    field public static final int CATEGORIES_JAVASCRIPT_AND_RENDERING = 32; // 0x20
+    field public static final int CATEGORIES_NONE = 0; // 0x0
+    field public static final int CATEGORIES_RENDERING = 16; // 0x10
+    field public static final int CATEGORIES_WEB_DEVELOPER = 4; // 0x4
+    field public static final int RECORD_CONTINUOUSLY = 1; // 0x1
+    field public static final int RECORD_UNTIL_FULL = 0; // 0x0
+  }
+
+  public static class TracingConfig.Builder {
+    ctor public TracingConfig.Builder();
+    method public android.webkit.TracingConfig.Builder addCategories(int...);
+    method public android.webkit.TracingConfig.Builder addCategories(java.lang.String...);
+    method public android.webkit.TracingConfig.Builder addCategories(java.util.Collection<java.lang.String>);
+    method public android.webkit.TracingConfig build();
+    method public android.webkit.TracingConfig.Builder setTracingMode(int);
+  }
+
+  public abstract class TracingController {
+    ctor @Deprecated public TracingController();
+    method @NonNull public static android.webkit.TracingController getInstance();
+    method public abstract boolean isTracing();
+    method public abstract void start(@NonNull android.webkit.TracingConfig);
+    method public abstract boolean stop(@Nullable java.io.OutputStream, @NonNull java.util.concurrent.Executor);
+  }
+
+  public final class URLUtil {
+    ctor public URLUtil();
+    method public static String composeSearchUrl(String, String, String);
+    method public static byte[] decode(byte[]) throws java.lang.IllegalArgumentException;
+    method public static String guessFileName(String, @Nullable String, @Nullable String);
+    method public static String guessUrl(String);
+    method public static boolean isAboutUrl(String);
+    method public static boolean isAssetUrl(String);
+    method public static boolean isContentUrl(String);
+    method @Deprecated public static boolean isCookielessProxyUrl(String);
+    method public static boolean isDataUrl(String);
+    method public static boolean isFileUrl(String);
+    method public static boolean isHttpUrl(String);
+    method public static boolean isHttpsUrl(String);
+    method public static boolean isJavaScriptUrl(String);
+    method public static boolean isNetworkUrl(String);
+    method public static boolean isValidUrl(String);
+    method public static String stripAnchor(String);
+  }
+
+  public interface ValueCallback<T> {
+    method public void onReceiveValue(T);
+  }
+
+  public abstract class WebBackForwardList implements java.lang.Cloneable java.io.Serializable {
+    ctor public WebBackForwardList();
+    method protected abstract android.webkit.WebBackForwardList clone();
+    method public abstract int getCurrentIndex();
+    method @Nullable public abstract android.webkit.WebHistoryItem getCurrentItem();
+    method public abstract android.webkit.WebHistoryItem getItemAtIndex(int);
+    method public abstract int getSize();
+  }
+
+  public class WebChromeClient {
+    ctor public WebChromeClient();
+    method @Nullable public android.graphics.Bitmap getDefaultVideoPoster();
+    method @Nullable public android.view.View getVideoLoadingProgressView();
+    method public void getVisitedHistory(android.webkit.ValueCallback<java.lang.String[]>);
+    method public void onCloseWindow(android.webkit.WebView);
+    method @Deprecated public void onConsoleMessage(String, int, String);
+    method public boolean onConsoleMessage(android.webkit.ConsoleMessage);
+    method public boolean onCreateWindow(android.webkit.WebView, boolean, boolean, android.os.Message);
+    method @Deprecated public void onExceededDatabaseQuota(String, String, long, long, long, android.webkit.WebStorage.QuotaUpdater);
+    method public void onGeolocationPermissionsHidePrompt();
+    method public void onGeolocationPermissionsShowPrompt(String, android.webkit.GeolocationPermissions.Callback);
+    method public void onHideCustomView();
+    method public boolean onJsAlert(android.webkit.WebView, String, String, android.webkit.JsResult);
+    method public boolean onJsBeforeUnload(android.webkit.WebView, String, String, android.webkit.JsResult);
+    method public boolean onJsConfirm(android.webkit.WebView, String, String, android.webkit.JsResult);
+    method public boolean onJsPrompt(android.webkit.WebView, String, String, String, android.webkit.JsPromptResult);
+    method @Deprecated public boolean onJsTimeout();
+    method public void onPermissionRequest(android.webkit.PermissionRequest);
+    method public void onPermissionRequestCanceled(android.webkit.PermissionRequest);
+    method public void onProgressChanged(android.webkit.WebView, int);
+    method @Deprecated public void onReachedMaxAppCacheSize(long, long, android.webkit.WebStorage.QuotaUpdater);
+    method public void onReceivedIcon(android.webkit.WebView, android.graphics.Bitmap);
+    method public void onReceivedTitle(android.webkit.WebView, String);
+    method public void onReceivedTouchIconUrl(android.webkit.WebView, String, boolean);
+    method public void onRequestFocus(android.webkit.WebView);
+    method public void onShowCustomView(android.view.View, android.webkit.WebChromeClient.CustomViewCallback);
+    method @Deprecated public void onShowCustomView(android.view.View, int, android.webkit.WebChromeClient.CustomViewCallback);
+    method public boolean onShowFileChooser(android.webkit.WebView, android.webkit.ValueCallback<android.net.Uri[]>, android.webkit.WebChromeClient.FileChooserParams);
+  }
+
+  public static interface WebChromeClient.CustomViewCallback {
+    method public void onCustomViewHidden();
+  }
+
+  public abstract static class WebChromeClient.FileChooserParams {
+    ctor public WebChromeClient.FileChooserParams();
+    method public abstract android.content.Intent createIntent();
+    method public abstract String[] getAcceptTypes();
+    method @Nullable public abstract String getFilenameHint();
+    method public abstract int getMode();
+    method @Nullable public abstract CharSequence getTitle();
+    method public abstract boolean isCaptureEnabled();
+    method @Nullable public static android.net.Uri[] parseResult(int, android.content.Intent);
+    field public static final int MODE_OPEN = 0; // 0x0
+    field public static final int MODE_OPEN_MULTIPLE = 1; // 0x1
+    field public static final int MODE_SAVE = 3; // 0x3
+  }
+
+  public abstract class WebHistoryItem implements java.lang.Cloneable {
+    ctor public WebHistoryItem();
+    method protected abstract android.webkit.WebHistoryItem clone();
+    method @Nullable public abstract android.graphics.Bitmap getFavicon();
+    method public abstract String getOriginalUrl();
+    method public abstract String getTitle();
+    method public abstract String getUrl();
+  }
+
+  @Deprecated public abstract class WebIconDatabase {
+    ctor @Deprecated public WebIconDatabase();
+    method @Deprecated public abstract void close();
+    method @Deprecated public static android.webkit.WebIconDatabase getInstance();
+    method @Deprecated public abstract void open(String);
+    method @Deprecated public abstract void releaseIconForPageUrl(String);
+    method @Deprecated public abstract void removeAllIcons();
+    method @Deprecated public abstract void requestIconForPageUrl(String, android.webkit.WebIconDatabase.IconListener);
+    method @Deprecated public abstract void retainIconForPageUrl(String);
+  }
+
+  @Deprecated public static interface WebIconDatabase.IconListener {
+    method @Deprecated public void onReceivedIcon(String, android.graphics.Bitmap);
+  }
+
+  public class WebMessage {
+    ctor public WebMessage(String);
+    ctor public WebMessage(String, android.webkit.WebMessagePort[]);
+    method public String getData();
+    method @Nullable public android.webkit.WebMessagePort[] getPorts();
+  }
+
+  public abstract class WebMessagePort {
+    method public abstract void close();
+    method public abstract void postMessage(android.webkit.WebMessage);
+    method public abstract void setWebMessageCallback(android.webkit.WebMessagePort.WebMessageCallback);
+    method public abstract void setWebMessageCallback(android.webkit.WebMessagePort.WebMessageCallback, android.os.Handler);
+  }
+
+  public abstract static class WebMessagePort.WebMessageCallback {
+    ctor public WebMessagePort.WebMessageCallback();
+    method public void onMessage(android.webkit.WebMessagePort, android.webkit.WebMessage);
+  }
+
+  public abstract class WebResourceError {
+    method public abstract CharSequence getDescription();
+    method public abstract int getErrorCode();
+  }
+
+  public interface WebResourceRequest {
+    method public String getMethod();
+    method public java.util.Map<java.lang.String,java.lang.String> getRequestHeaders();
+    method public android.net.Uri getUrl();
+    method public boolean hasGesture();
+    method public boolean isForMainFrame();
+    method public boolean isRedirect();
+  }
+
+  public class WebResourceResponse {
+    ctor public WebResourceResponse(String, String, java.io.InputStream);
+    ctor public WebResourceResponse(String, String, int, @NonNull String, java.util.Map<java.lang.String,java.lang.String>, java.io.InputStream);
+    method public java.io.InputStream getData();
+    method public String getEncoding();
+    method public String getMimeType();
+    method public String getReasonPhrase();
+    method public java.util.Map<java.lang.String,java.lang.String> getResponseHeaders();
+    method public int getStatusCode();
+    method public void setData(java.io.InputStream);
+    method public void setEncoding(String);
+    method public void setMimeType(String);
+    method public void setResponseHeaders(java.util.Map<java.lang.String,java.lang.String>);
+    method public void setStatusCodeAndReasonPhrase(int, @NonNull String);
+  }
+
+  public abstract class WebSettings {
+    ctor public WebSettings();
+    method @Deprecated public abstract boolean enableSmoothTransition();
+    method public abstract boolean getAllowContentAccess();
+    method public abstract boolean getAllowFileAccess();
+    method public abstract boolean getAllowFileAccessFromFileURLs();
+    method public abstract boolean getAllowUniversalAccessFromFileURLs();
+    method public abstract boolean getBlockNetworkImage();
+    method public abstract boolean getBlockNetworkLoads();
+    method public abstract boolean getBuiltInZoomControls();
+    method public abstract int getCacheMode();
+    method public abstract String getCursiveFontFamily();
+    method public abstract boolean getDatabaseEnabled();
+    method @Deprecated public abstract String getDatabasePath();
+    method public abstract int getDefaultFixedFontSize();
+    method public abstract int getDefaultFontSize();
+    method public abstract String getDefaultTextEncodingName();
+    method public static String getDefaultUserAgent(android.content.Context);
+    method @Deprecated public abstract android.webkit.WebSettings.ZoomDensity getDefaultZoom();
+    method public abstract int getDisabledActionModeMenuItems();
+    method public abstract boolean getDisplayZoomControls();
+    method public abstract boolean getDomStorageEnabled();
+    method public abstract String getFantasyFontFamily();
+    method public abstract String getFixedFontFamily();
+    method public int getForceDark();
+    method public abstract boolean getJavaScriptCanOpenWindowsAutomatically();
+    method public abstract boolean getJavaScriptEnabled();
+    method public abstract android.webkit.WebSettings.LayoutAlgorithm getLayoutAlgorithm();
+    method @Deprecated public abstract boolean getLightTouchEnabled();
+    method public abstract boolean getLoadWithOverviewMode();
+    method public abstract boolean getLoadsImagesAutomatically();
+    method public abstract boolean getMediaPlaybackRequiresUserGesture();
+    method public abstract int getMinimumFontSize();
+    method public abstract int getMinimumLogicalFontSize();
+    method public abstract int getMixedContentMode();
+    method public abstract boolean getOffscreenPreRaster();
+    method @Deprecated public abstract android.webkit.WebSettings.PluginState getPluginState();
+    method public abstract boolean getSafeBrowsingEnabled();
+    method public abstract String getSansSerifFontFamily();
+    method @Deprecated public abstract boolean getSaveFormData();
+    method @Deprecated public abstract boolean getSavePassword();
+    method public abstract String getSerifFontFamily();
+    method public abstract String getStandardFontFamily();
+    method @Deprecated public android.webkit.WebSettings.TextSize getTextSize();
+    method public abstract int getTextZoom();
+    method public abstract boolean getUseWideViewPort();
+    method public abstract String getUserAgentString();
+    method public abstract void setAllowContentAccess(boolean);
+    method public abstract void setAllowFileAccess(boolean);
+    method @Deprecated public abstract void setAllowFileAccessFromFileURLs(boolean);
+    method @Deprecated public abstract void setAllowUniversalAccessFromFileURLs(boolean);
+    method @Deprecated public abstract void setAppCacheEnabled(boolean);
+    method @Deprecated public abstract void setAppCacheMaxSize(long);
+    method @Deprecated public abstract void setAppCachePath(String);
+    method public abstract void setBlockNetworkImage(boolean);
+    method public abstract void setBlockNetworkLoads(boolean);
+    method public abstract void setBuiltInZoomControls(boolean);
+    method public abstract void setCacheMode(int);
+    method public abstract void setCursiveFontFamily(String);
+    method public abstract void setDatabaseEnabled(boolean);
+    method @Deprecated public abstract void setDatabasePath(String);
+    method public abstract void setDefaultFixedFontSize(int);
+    method public abstract void setDefaultFontSize(int);
+    method public abstract void setDefaultTextEncodingName(String);
+    method @Deprecated public abstract void setDefaultZoom(android.webkit.WebSettings.ZoomDensity);
+    method public abstract void setDisabledActionModeMenuItems(int);
+    method public abstract void setDisplayZoomControls(boolean);
+    method public abstract void setDomStorageEnabled(boolean);
+    method @Deprecated public abstract void setEnableSmoothTransition(boolean);
+    method public abstract void setFantasyFontFamily(String);
+    method public abstract void setFixedFontFamily(String);
+    method public void setForceDark(int);
+    method @Deprecated public abstract void setGeolocationDatabasePath(String);
+    method public abstract void setGeolocationEnabled(boolean);
+    method public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean);
+    method public abstract void setJavaScriptEnabled(boolean);
+    method public abstract void setLayoutAlgorithm(android.webkit.WebSettings.LayoutAlgorithm);
+    method @Deprecated public abstract void setLightTouchEnabled(boolean);
+    method public abstract void setLoadWithOverviewMode(boolean);
+    method public abstract void setLoadsImagesAutomatically(boolean);
+    method public abstract void setMediaPlaybackRequiresUserGesture(boolean);
+    method public abstract void setMinimumFontSize(int);
+    method public abstract void setMinimumLogicalFontSize(int);
+    method public abstract void setMixedContentMode(int);
+    method public abstract void setNeedInitialFocus(boolean);
+    method public abstract void setOffscreenPreRaster(boolean);
+    method @Deprecated public abstract void setPluginState(android.webkit.WebSettings.PluginState);
+    method @Deprecated public abstract void setRenderPriority(android.webkit.WebSettings.RenderPriority);
+    method public abstract void setSafeBrowsingEnabled(boolean);
+    method public abstract void setSansSerifFontFamily(String);
+    method @Deprecated public abstract void setSaveFormData(boolean);
+    method @Deprecated public abstract void setSavePassword(boolean);
+    method public abstract void setSerifFontFamily(String);
+    method public abstract void setStandardFontFamily(String);
+    method public abstract void setSupportMultipleWindows(boolean);
+    method public abstract void setSupportZoom(boolean);
+    method @Deprecated public void setTextSize(android.webkit.WebSettings.TextSize);
+    method public abstract void setTextZoom(int);
+    method public abstract void setUseWideViewPort(boolean);
+    method public abstract void setUserAgentString(@Nullable String);
+    method public abstract boolean supportMultipleWindows();
+    method public abstract boolean supportZoom();
+    field public static final int FORCE_DARK_AUTO = 1; // 0x1
+    field public static final int FORCE_DARK_OFF = 0; // 0x0
+    field public static final int FORCE_DARK_ON = 2; // 0x2
+    field public static final int LOAD_CACHE_ELSE_NETWORK = 1; // 0x1
+    field public static final int LOAD_CACHE_ONLY = 3; // 0x3
+    field public static final int LOAD_DEFAULT = -1; // 0xffffffff
+    field @Deprecated public static final int LOAD_NORMAL = 0; // 0x0
+    field public static final int LOAD_NO_CACHE = 2; // 0x2
+    field public static final int MENU_ITEM_NONE = 0; // 0x0
+    field public static final int MENU_ITEM_PROCESS_TEXT = 4; // 0x4
+    field public static final int MENU_ITEM_SHARE = 1; // 0x1
+    field public static final int MENU_ITEM_WEB_SEARCH = 2; // 0x2
+    field public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0; // 0x0
+    field public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; // 0x2
+    field public static final int MIXED_CONTENT_NEVER_ALLOW = 1; // 0x1
+  }
+
+  public enum WebSettings.LayoutAlgorithm {
+    enum_constant @Deprecated public static final android.webkit.WebSettings.LayoutAlgorithm NARROW_COLUMNS;
+    enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm NORMAL;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.LayoutAlgorithm SINGLE_COLUMN;
+    enum_constant public static final android.webkit.WebSettings.LayoutAlgorithm TEXT_AUTOSIZING;
+  }
+
+  public enum WebSettings.PluginState {
+    enum_constant public static final android.webkit.WebSettings.PluginState OFF;
+    enum_constant public static final android.webkit.WebSettings.PluginState ON;
+    enum_constant public static final android.webkit.WebSettings.PluginState ON_DEMAND;
+  }
+
+  public enum WebSettings.RenderPriority {
+    enum_constant public static final android.webkit.WebSettings.RenderPriority HIGH;
+    enum_constant public static final android.webkit.WebSettings.RenderPriority LOW;
+    enum_constant public static final android.webkit.WebSettings.RenderPriority NORMAL;
+  }
+
+  @Deprecated public enum WebSettings.TextSize {
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize LARGER;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize LARGEST;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize NORMAL;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize SMALLER;
+    enum_constant @Deprecated public static final android.webkit.WebSettings.TextSize SMALLEST;
+  }
+
+  public enum WebSettings.ZoomDensity {
+    enum_constant public static final android.webkit.WebSettings.ZoomDensity CLOSE;
+    enum_constant public static final android.webkit.WebSettings.ZoomDensity FAR;
+    enum_constant public static final android.webkit.WebSettings.ZoomDensity MEDIUM;
+  }
+
+  public class WebStorage {
+    method public void deleteAllData();
+    method public void deleteOrigin(String);
+    method public static android.webkit.WebStorage getInstance();
+    method public void getOrigins(android.webkit.ValueCallback<java.util.Map>);
+    method public void getQuotaForOrigin(String, android.webkit.ValueCallback<java.lang.Long>);
+    method public void getUsageForOrigin(String, android.webkit.ValueCallback<java.lang.Long>);
+    method @Deprecated public void setQuotaForOrigin(String, long);
+  }
+
+  public static class WebStorage.Origin {
+    method public String getOrigin();
+    method public long getQuota();
+    method public long getUsage();
+  }
+
+  @Deprecated public static interface WebStorage.QuotaUpdater {
+    method @Deprecated public void updateQuota(long);
+  }
+
+  public class WebView extends android.widget.AbsoluteLayout implements android.view.ViewGroup.OnHierarchyChangeListener android.view.ViewTreeObserver.OnGlobalFocusChangeListener {
+    ctor public WebView(@NonNull android.content.Context);
+    ctor public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    ctor @Deprecated public WebView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, int, boolean);
+    method public void addJavascriptInterface(@NonNull Object, @NonNull String);
+    method public boolean canGoBack();
+    method public boolean canGoBackOrForward(int);
+    method public boolean canGoForward();
+    method @Deprecated public boolean canZoomIn();
+    method @Deprecated public boolean canZoomOut();
+    method @Deprecated public android.graphics.Picture capturePicture();
+    method public void clearCache(boolean);
+    method public static void clearClientCertPreferences(@Nullable Runnable);
+    method public void clearFormData();
+    method public void clearHistory();
+    method public void clearMatches();
+    method public void clearSslPreferences();
+    method @Deprecated public void clearView();
+    method @NonNull public android.webkit.WebBackForwardList copyBackForwardList();
+    method @Deprecated public android.print.PrintDocumentAdapter createPrintDocumentAdapter();
+    method @NonNull public android.print.PrintDocumentAdapter createPrintDocumentAdapter(@NonNull String);
+    method @NonNull public android.webkit.WebMessagePort[] createWebMessageChannel();
+    method public void destroy();
+    method public static void disableWebView();
+    method public void documentHasImages(@NonNull android.os.Message);
+    method public static void enableSlowWholeDocumentDraw();
+    method public void evaluateJavascript(@NonNull String, @Nullable android.webkit.ValueCallback<java.lang.String>);
+    method @Deprecated @Nullable public static String findAddress(String);
+    method @Deprecated public int findAll(String);
+    method public void findAllAsync(@NonNull String);
+    method public void findNext(boolean);
+    method public void flingScroll(int, int);
+    method @Deprecated public void freeMemory();
+    method @Nullable public android.net.http.SslCertificate getCertificate();
+    method public int getContentHeight();
+    method @Nullable public static android.content.pm.PackageInfo getCurrentWebViewPackage();
+    method @Nullable public android.graphics.Bitmap getFavicon();
+    method @NonNull public android.webkit.WebView.HitTestResult getHitTestResult();
+    method @Deprecated @Nullable public String[] getHttpAuthUsernamePassword(String, String);
+    method @Nullable public String getOriginalUrl();
+    method public int getProgress();
+    method public boolean getRendererPriorityWaivedWhenNotVisible();
+    method public int getRendererRequestedPriority();
+    method @NonNull public static android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
+    method @Deprecated public float getScale();
+    method @NonNull public android.webkit.WebSettings getSettings();
+    method @NonNull public android.view.textclassifier.TextClassifier getTextClassifier();
+    method @Nullable public String getTitle();
+    method @Nullable public String getUrl();
+    method @Nullable public android.webkit.WebChromeClient getWebChromeClient();
+    method @NonNull public static ClassLoader getWebViewClassLoader();
+    method @NonNull public android.webkit.WebViewClient getWebViewClient();
+    method @NonNull public android.os.Looper getWebViewLooper();
+    method @Nullable public android.webkit.WebViewRenderProcess getWebViewRenderProcess();
+    method @Nullable public android.webkit.WebViewRenderProcessClient getWebViewRenderProcessClient();
+    method public void goBack();
+    method public void goBackOrForward(int);
+    method public void goForward();
+    method public void invokeZoomPicker();
+    method public boolean isPrivateBrowsingEnabled();
+    method public void loadData(@NonNull String, @Nullable String, @Nullable String);
+    method public void loadDataWithBaseURL(@Nullable String, @NonNull String, @Nullable String, @Nullable String, @Nullable String);
+    method public void loadUrl(@NonNull String, @NonNull java.util.Map<java.lang.String,java.lang.String>);
+    method public void loadUrl(@NonNull String);
+    method @Deprecated public void onChildViewAdded(android.view.View, android.view.View);
+    method @Deprecated public void onChildViewRemoved(android.view.View, android.view.View);
+    method @Deprecated public void onGlobalFocusChanged(android.view.View, android.view.View);
+    method public void onPause();
+    method public void onResume();
+    method @Deprecated public boolean overlayHorizontalScrollbar();
+    method @Deprecated public boolean overlayVerticalScrollbar();
+    method public boolean pageDown(boolean);
+    method public boolean pageUp(boolean);
+    method public void pauseTimers();
+    method public void postUrl(@NonNull String, @NonNull byte[]);
+    method public void postVisualStateCallback(long, @NonNull android.webkit.WebView.VisualStateCallback);
+    method public void postWebMessage(@NonNull android.webkit.WebMessage, @NonNull android.net.Uri);
+    method public void reload();
+    method public void removeJavascriptInterface(@NonNull String);
+    method public void requestFocusNodeHref(@Nullable android.os.Message);
+    method public void requestImageRef(@NonNull android.os.Message);
+    method @Nullable public android.webkit.WebBackForwardList restoreState(@NonNull android.os.Bundle);
+    method public void resumeTimers();
+    method @Deprecated public void savePassword(String, String, String);
+    method @Nullable public android.webkit.WebBackForwardList saveState(@NonNull android.os.Bundle);
+    method public void saveWebArchive(@NonNull String);
+    method public void saveWebArchive(@NonNull String, boolean, @Nullable android.webkit.ValueCallback<java.lang.String>);
+    method @Deprecated public void setCertificate(android.net.http.SslCertificate);
+    method public static void setDataDirectorySuffix(@NonNull String);
+    method public void setDownloadListener(@Nullable android.webkit.DownloadListener);
+    method public void setFindListener(@Nullable android.webkit.WebView.FindListener);
+    method @Deprecated public void setHorizontalScrollbarOverlay(boolean);
+    method @Deprecated public void setHttpAuthUsernamePassword(String, String, String, String);
+    method public void setInitialScale(int);
+    method @Deprecated public void setMapTrackballToArrowKeys(boolean);
+    method public void setNetworkAvailable(boolean);
+    method @Deprecated public void setPictureListener(android.webkit.WebView.PictureListener);
+    method public void setRendererPriorityPolicy(int, boolean);
+    method public static void setSafeBrowsingWhitelist(@NonNull java.util.List<java.lang.String>, @Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+    method @Deprecated public void setVerticalScrollbarOverlay(boolean);
+    method public void setWebChromeClient(@Nullable android.webkit.WebChromeClient);
+    method public static void setWebContentsDebuggingEnabled(boolean);
+    method public void setWebViewClient(@NonNull android.webkit.WebViewClient);
+    method public void setWebViewRenderProcessClient(@NonNull java.util.concurrent.Executor, @NonNull android.webkit.WebViewRenderProcessClient);
+    method public void setWebViewRenderProcessClient(@Nullable android.webkit.WebViewRenderProcessClient);
+    method @Deprecated public boolean shouldDelayChildPressedState();
+    method @Deprecated public boolean showFindDialog(@Nullable String, boolean);
+    method public static void startSafeBrowsing(@NonNull android.content.Context, @Nullable android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void stopLoading();
+    method public void zoomBy(float);
+    method public boolean zoomIn();
+    method public boolean zoomOut();
+    field public static final int RENDERER_PRIORITY_BOUND = 1; // 0x1
+    field public static final int RENDERER_PRIORITY_IMPORTANT = 2; // 0x2
+    field public static final int RENDERER_PRIORITY_WAIVED = 0; // 0x0
+    field public static final String SCHEME_GEO = "geo:0,0?q=";
+    field public static final String SCHEME_MAILTO = "mailto:";
+    field public static final String SCHEME_TEL = "tel:";
+  }
+
+  public static interface WebView.FindListener {
+    method public void onFindResultReceived(int, int, boolean);
+  }
+
+  public static class WebView.HitTestResult {
+    method @Nullable public String getExtra();
+    method public int getType();
+    field @Deprecated public static final int ANCHOR_TYPE = 1; // 0x1
+    field public static final int EDIT_TEXT_TYPE = 9; // 0x9
+    field public static final int EMAIL_TYPE = 4; // 0x4
+    field public static final int GEO_TYPE = 3; // 0x3
+    field @Deprecated public static final int IMAGE_ANCHOR_TYPE = 6; // 0x6
+    field public static final int IMAGE_TYPE = 5; // 0x5
+    field public static final int PHONE_TYPE = 2; // 0x2
+    field public static final int SRC_ANCHOR_TYPE = 7; // 0x7
+    field public static final int SRC_IMAGE_ANCHOR_TYPE = 8; // 0x8
+    field public static final int UNKNOWN_TYPE = 0; // 0x0
+  }
+
+  @Deprecated public static interface WebView.PictureListener {
+    method @Deprecated public void onNewPicture(android.webkit.WebView, @Nullable android.graphics.Picture);
+  }
+
+  public abstract static class WebView.VisualStateCallback {
+    ctor public WebView.VisualStateCallback();
+    method public abstract void onComplete(long);
+  }
+
+  public class WebView.WebViewTransport {
+    ctor public WebView.WebViewTransport();
+    method @Nullable public android.webkit.WebView getWebView();
+    method public void setWebView(@Nullable android.webkit.WebView);
+  }
+
+  public class WebViewClient {
+    ctor public WebViewClient();
+    method public void doUpdateVisitedHistory(android.webkit.WebView, String, boolean);
+    method public void onFormResubmission(android.webkit.WebView, android.os.Message, android.os.Message);
+    method public void onLoadResource(android.webkit.WebView, String);
+    method public void onPageCommitVisible(android.webkit.WebView, String);
+    method public void onPageFinished(android.webkit.WebView, String);
+    method public void onPageStarted(android.webkit.WebView, String, android.graphics.Bitmap);
+    method public void onReceivedClientCertRequest(android.webkit.WebView, android.webkit.ClientCertRequest);
+    method @Deprecated public void onReceivedError(android.webkit.WebView, int, String, String);
+    method public void onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError);
+    method public void onReceivedHttpAuthRequest(android.webkit.WebView, android.webkit.HttpAuthHandler, String, String);
+    method public void onReceivedHttpError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceResponse);
+    method public void onReceivedLoginRequest(android.webkit.WebView, String, @Nullable String, String);
+    method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
+    method public boolean onRenderProcessGone(android.webkit.WebView, android.webkit.RenderProcessGoneDetail);
+    method public void onSafeBrowsingHit(android.webkit.WebView, android.webkit.WebResourceRequest, int, android.webkit.SafeBrowsingResponse);
+    method public void onScaleChanged(android.webkit.WebView, float, float);
+    method @Deprecated public void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
+    method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method @Deprecated @Nullable public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, String);
+    method @Nullable public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
+    method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method @Deprecated public boolean shouldOverrideUrlLoading(android.webkit.WebView, String);
+    method public boolean shouldOverrideUrlLoading(android.webkit.WebView, android.webkit.WebResourceRequest);
+    field public static final int ERROR_AUTHENTICATION = -4; // 0xfffffffc
+    field public static final int ERROR_BAD_URL = -12; // 0xfffffff4
+    field public static final int ERROR_CONNECT = -6; // 0xfffffffa
+    field public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; // 0xfffffff5
+    field public static final int ERROR_FILE = -13; // 0xfffffff3
+    field public static final int ERROR_FILE_NOT_FOUND = -14; // 0xfffffff2
+    field public static final int ERROR_HOST_LOOKUP = -2; // 0xfffffffe
+    field public static final int ERROR_IO = -7; // 0xfffffff9
+    field public static final int ERROR_PROXY_AUTHENTICATION = -5; // 0xfffffffb
+    field public static final int ERROR_REDIRECT_LOOP = -9; // 0xfffffff7
+    field public static final int ERROR_TIMEOUT = -8; // 0xfffffff8
+    field public static final int ERROR_TOO_MANY_REQUESTS = -15; // 0xfffffff1
+    field public static final int ERROR_UNKNOWN = -1; // 0xffffffff
+    field public static final int ERROR_UNSAFE_RESOURCE = -16; // 0xfffffff0
+    field public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; // 0xfffffffd
+    field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6
+    field public static final int SAFE_BROWSING_THREAT_BILLING = 4; // 0x4
+    field public static final int SAFE_BROWSING_THREAT_MALWARE = 1; // 0x1
+    field public static final int SAFE_BROWSING_THREAT_PHISHING = 2; // 0x2
+    field public static final int SAFE_BROWSING_THREAT_UNKNOWN = 0; // 0x0
+    field public static final int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 3; // 0x3
+  }
+
+  public abstract class WebViewDatabase {
+    ctor @Deprecated public WebViewDatabase();
+    method @Deprecated public abstract void clearFormData();
+    method public abstract void clearHttpAuthUsernamePassword();
+    method @Deprecated public abstract void clearUsernamePassword();
+    method @Nullable public abstract String[] getHttpAuthUsernamePassword(String, String);
+    method public static android.webkit.WebViewDatabase getInstance(android.content.Context);
+    method @Deprecated public abstract boolean hasFormData();
+    method public abstract boolean hasHttpAuthUsernamePassword();
+    method @Deprecated public abstract boolean hasUsernamePassword();
+    method public abstract void setHttpAuthUsernamePassword(String, String, String, String);
+  }
+
+  @Deprecated public class WebViewFragment extends android.app.Fragment {
+    ctor @Deprecated public WebViewFragment();
+    method @Deprecated public android.webkit.WebView getWebView();
+  }
+
+  public abstract class WebViewRenderProcess {
+    ctor public WebViewRenderProcess();
+    method public abstract boolean terminate();
+  }
+
+  public abstract class WebViewRenderProcessClient {
+    ctor public WebViewRenderProcessClient();
+    method public abstract void onRenderProcessResponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderProcess);
+    method public abstract void onRenderProcessUnresponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderProcess);
+  }
+
+}
+
+package android.widget {
+
+  public abstract class AbsListView extends android.widget.AdapterView<android.widget.ListAdapter> implements android.widget.Filter.FilterListener android.text.TextWatcher android.view.ViewTreeObserver.OnGlobalLayoutListener android.view.ViewTreeObserver.OnTouchModeChangeListener {
+    ctor public AbsListView(android.content.Context);
+    ctor public AbsListView(android.content.Context, android.util.AttributeSet);
+    ctor public AbsListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsListView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public boolean canScrollList(int);
+    method public void clearChoices();
+    method public void clearTextFilter();
+    method public void deferNotifyDataSetChanged();
+    method public void fling(int);
+    method public android.widget.AbsListView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method @ColorInt public int getBottomEdgeEffectColor();
+    method @ColorInt public int getCacheColorHint();
+    method public int getCheckedItemCount();
+    method public long[] getCheckedItemIds();
+    method public int getCheckedItemPosition();
+    method public android.util.SparseBooleanArray getCheckedItemPositions();
+    method public int getChoiceMode();
+    method public int getListPaddingBottom();
+    method public int getListPaddingLeft();
+    method public int getListPaddingRight();
+    method public int getListPaddingTop();
+    method public android.view.View getSelectedView();
+    method public android.graphics.drawable.Drawable getSelector();
+    method public CharSequence getTextFilter();
+    method @ColorInt public int getTopEdgeEffectColor();
+    method public int getTranscriptMode();
+    method protected void handleDataChanged();
+    method public boolean hasTextFilter();
+    method public void invalidateViews();
+    method public boolean isDrawSelectorOnTop();
+    method public boolean isFastScrollAlwaysVisible();
+    method public boolean isFastScrollEnabled();
+    method protected boolean isInFilterMode();
+    method public boolean isItemChecked(int);
+    method public boolean isScrollingCacheEnabled();
+    method public boolean isSmoothScrollbarEnabled();
+    method public boolean isStackFromBottom();
+    method public boolean isTextFilterEnabled();
+    method protected void layoutChildren();
+    method public void onFilterComplete(int);
+    method public void onGlobalLayout();
+    method public void onInitializeAccessibilityNodeInfoForItem(android.view.View, int, android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean onRemoteAdapterConnected();
+    method public void onRemoteAdapterDisconnected();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void onTextChanged(CharSequence, int, int, int);
+    method public void onTouchModeChanged(boolean);
+    method public int pointToPosition(int, int);
+    method public long pointToRowId(int, int);
+    method public void reclaimViews(java.util.List<android.view.View>);
+    method public void scrollListBy(int);
+    method public void setAdapter(android.widget.ListAdapter);
+    method public void setBottomEdgeEffectColor(@ColorInt int);
+    method public void setCacheColorHint(@ColorInt int);
+    method public void setChoiceMode(int);
+    method public void setDrawSelectorOnTop(boolean);
+    method public void setEdgeEffectColor(@ColorInt int);
+    method public void setFastScrollAlwaysVisible(boolean);
+    method public void setFastScrollEnabled(boolean);
+    method public void setFastScrollStyle(int);
+    method public void setFilterText(String);
+    method public void setFriction(float);
+    method public void setItemChecked(int, boolean);
+    method public void setMultiChoiceModeListener(android.widget.AbsListView.MultiChoiceModeListener);
+    method public void setOnScrollListener(android.widget.AbsListView.OnScrollListener);
+    method public void setRecyclerListener(android.widget.AbsListView.RecyclerListener);
+    method public void setRemoteViewsAdapter(android.content.Intent);
+    method public void setScrollIndicators(android.view.View, android.view.View);
+    method public void setScrollingCacheEnabled(boolean);
+    method public void setSelectionFromTop(int, int);
+    method public void setSelector(@DrawableRes int);
+    method public void setSelector(android.graphics.drawable.Drawable);
+    method public void setSmoothScrollbarEnabled(boolean);
+    method public void setStackFromBottom(boolean);
+    method public void setTextFilterEnabled(boolean);
+    method public void setTopEdgeEffectColor(@ColorInt int);
+    method public void setTranscriptMode(int);
+    method public void setVelocityScale(float);
+    method public void smoothScrollBy(int, int);
+    method public void smoothScrollToPosition(int);
+    method public void smoothScrollToPosition(int, int);
+    method public void smoothScrollToPositionFromTop(int, int, int);
+    method public void smoothScrollToPositionFromTop(int, int);
+    method public boolean verifyDrawable(@NonNull android.graphics.drawable.Drawable);
+    field public static final int CHOICE_MODE_MULTIPLE = 2; // 0x2
+    field public static final int CHOICE_MODE_MULTIPLE_MODAL = 3; // 0x3
+    field public static final int CHOICE_MODE_NONE = 0; // 0x0
+    field public static final int CHOICE_MODE_SINGLE = 1; // 0x1
+    field public static final int TRANSCRIPT_MODE_ALWAYS_SCROLL = 2; // 0x2
+    field public static final int TRANSCRIPT_MODE_DISABLED = 0; // 0x0
+    field public static final int TRANSCRIPT_MODE_NORMAL = 1; // 0x1
+  }
+
+  public static class AbsListView.LayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor public AbsListView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public AbsListView.LayoutParams(int, int);
+    ctor public AbsListView.LayoutParams(int, int, int);
+    ctor public AbsListView.LayoutParams(android.view.ViewGroup.LayoutParams);
+  }
+
+  public static interface AbsListView.MultiChoiceModeListener extends android.view.ActionMode.Callback {
+    method public void onItemCheckedStateChanged(android.view.ActionMode, int, long, boolean);
+  }
+
+  public static interface AbsListView.OnScrollListener {
+    method public void onScroll(android.widget.AbsListView, int, int, int);
+    method public void onScrollStateChanged(android.widget.AbsListView, int);
+    field public static final int SCROLL_STATE_FLING = 2; // 0x2
+    field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+    field public static final int SCROLL_STATE_TOUCH_SCROLL = 1; // 0x1
+  }
+
+  public static interface AbsListView.RecyclerListener {
+    method public void onMovedToScrapHeap(android.view.View);
+  }
+
+  public static interface AbsListView.SelectionBoundsAdjuster {
+    method public void adjustListItemSelectionBounds(android.graphics.Rect);
+  }
+
+  public abstract class AbsSeekBar extends android.widget.ProgressBar {
+    ctor public AbsSeekBar(android.content.Context);
+    ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet);
+    ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getKeyProgressIncrement();
+    method public boolean getSplitTrack();
+    method public android.graphics.drawable.Drawable getThumb();
+    method public int getThumbOffset();
+    method @Nullable public android.graphics.BlendMode getThumbTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getThumbTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getThumbTintMode();
+    method public android.graphics.drawable.Drawable getTickMark();
+    method @Nullable public android.graphics.BlendMode getTickMarkTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getTickMarkTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getTickMarkTintMode();
+    method public void setKeyProgressIncrement(int);
+    method public void setSplitTrack(boolean);
+    method public void setThumb(android.graphics.drawable.Drawable);
+    method public void setThumbOffset(int);
+    method public void setThumbTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setThumbTintList(@Nullable android.content.res.ColorStateList);
+    method public void setThumbTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setTickMark(android.graphics.drawable.Drawable);
+    method public void setTickMarkTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setTickMarkTintList(@Nullable android.content.res.ColorStateList);
+    method public void setTickMarkTintMode(@Nullable android.graphics.PorterDuff.Mode);
+  }
+
+  public abstract class AbsSpinner extends android.widget.AdapterView<android.widget.SpinnerAdapter> {
+    ctor public AbsSpinner(android.content.Context);
+    ctor public AbsSpinner(android.content.Context, android.util.AttributeSet);
+    ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.SpinnerAdapter getAdapter();
+    method public android.view.View getSelectedView();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public int pointToPosition(int, int);
+    method public void setAdapter(android.widget.SpinnerAdapter);
+    method public void setSelection(int, boolean);
+    method public void setSelection(int);
+  }
+
+  @Deprecated @android.widget.RemoteViews.RemoteView public class AbsoluteLayout extends android.view.ViewGroup {
+    ctor @Deprecated public AbsoluteLayout(android.content.Context);
+    ctor @Deprecated public AbsoluteLayout(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  @Deprecated public static class AbsoluteLayout.LayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor @Deprecated public AbsoluteLayout.LayoutParams(int, int, int, int);
+    ctor @Deprecated public AbsoluteLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public AbsoluteLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    method @Deprecated public String debug(String);
+    field @Deprecated public int x;
+    field @Deprecated public int y;
+  }
+
+  public class ActionMenuView extends android.widget.LinearLayout {
+    ctor public ActionMenuView(android.content.Context);
+    ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+    method public void dismissPopupMenus();
+    method protected android.widget.ActionMenuView.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.ActionMenuView.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public android.view.Menu getMenu();
+    method @Nullable public android.graphics.drawable.Drawable getOverflowIcon();
+    method public int getPopupTheme();
+    method public boolean hideOverflowMenu();
+    method public boolean isOverflowMenuShowing();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onDetachedFromWindow();
+    method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener);
+    method public void setOverflowIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setPopupTheme(@StyleRes int);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class ActionMenuView.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(android.widget.ActionMenuView.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(int, int);
+  }
+
+  public static interface ActionMenuView.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public interface Adapter {
+    method @Nullable public default CharSequence[] getAutofillOptions();
+    method public int getCount();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public int getItemViewType(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public boolean isEmpty();
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+    field public static final int IGNORE_ITEM_VIEW_TYPE = -1; // 0xffffffff
+    field public static final int NO_SELECTION = -2147483648; // 0x80000000
+  }
+
+  public abstract class AdapterView<T extends android.widget.Adapter> extends android.view.ViewGroup {
+    ctor public AdapterView(android.content.Context);
+    ctor public AdapterView(android.content.Context, android.util.AttributeSet);
+    ctor public AdapterView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterView(android.content.Context, android.util.AttributeSet, int, int);
+    method public abstract T getAdapter();
+    method public int getCount();
+    method public android.view.View getEmptyView();
+    method public int getFirstVisiblePosition();
+    method public Object getItemAtPosition(int);
+    method public long getItemIdAtPosition(int);
+    method public int getLastVisiblePosition();
+    method @Nullable public final android.widget.AdapterView.OnItemClickListener getOnItemClickListener();
+    method public final android.widget.AdapterView.OnItemLongClickListener getOnItemLongClickListener();
+    method @Nullable public final android.widget.AdapterView.OnItemSelectedListener getOnItemSelectedListener();
+    method public int getPositionForView(android.view.View);
+    method public Object getSelectedItem();
+    method public long getSelectedItemId();
+    method public int getSelectedItemPosition();
+    method public abstract android.view.View getSelectedView();
+    method public boolean performItemClick(android.view.View, int, long);
+    method public abstract void setAdapter(T);
+    method public void setEmptyView(android.view.View);
+    method public void setOnItemClickListener(@Nullable android.widget.AdapterView.OnItemClickListener);
+    method public void setOnItemLongClickListener(android.widget.AdapterView.OnItemLongClickListener);
+    method public void setOnItemSelectedListener(@Nullable android.widget.AdapterView.OnItemSelectedListener);
+    method public abstract void setSelection(int);
+    field public static final int INVALID_POSITION = -1; // 0xffffffff
+    field public static final long INVALID_ROW_ID = -9223372036854775808L; // 0x8000000000000000L
+    field public static final int ITEM_VIEW_TYPE_HEADER_OR_FOOTER = -2; // 0xfffffffe
+    field public static final int ITEM_VIEW_TYPE_IGNORE = -1; // 0xffffffff
+  }
+
+  public static class AdapterView.AdapterContextMenuInfo implements android.view.ContextMenu.ContextMenuInfo {
+    ctor public AdapterView.AdapterContextMenuInfo(android.view.View, int, long);
+    field public long id;
+    field public int position;
+    field public android.view.View targetView;
+  }
+
+  public static interface AdapterView.OnItemClickListener {
+    method public void onItemClick(android.widget.AdapterView<?>, android.view.View, int, long);
+  }
+
+  public static interface AdapterView.OnItemLongClickListener {
+    method public boolean onItemLongClick(android.widget.AdapterView<?>, android.view.View, int, long);
+  }
+
+  public static interface AdapterView.OnItemSelectedListener {
+    method public void onItemSelected(android.widget.AdapterView<?>, android.view.View, int, long);
+    method public void onNothingSelected(android.widget.AdapterView<?>);
+  }
+
+  public abstract class AdapterViewAnimator extends android.widget.AdapterView<android.widget.Adapter> implements android.widget.Advanceable {
+    ctor public AdapterViewAnimator(android.content.Context);
+    ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet);
+    ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int, int);
+    method public void advance();
+    method public void deferNotifyDataSetChanged();
+    method public void fyiWillBeAdvancedByHostKThx();
+    method public android.widget.Adapter getAdapter();
+    method public android.view.View getCurrentView();
+    method public int getDisplayedChild();
+    method public android.animation.ObjectAnimator getInAnimation();
+    method public android.animation.ObjectAnimator getOutAnimation();
+    method public android.view.View getSelectedView();
+    method public boolean onRemoteAdapterConnected();
+    method public void onRemoteAdapterDisconnected();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void setAdapter(android.widget.Adapter);
+    method public void setAnimateFirstView(boolean);
+    method public void setDisplayedChild(int);
+    method public void setInAnimation(android.animation.ObjectAnimator);
+    method public void setInAnimation(android.content.Context, int);
+    method public void setOutAnimation(android.animation.ObjectAnimator);
+    method public void setOutAnimation(android.content.Context, int);
+    method public void setRemoteViewsAdapter(android.content.Intent);
+    method public void setSelection(int);
+    method public void showNext();
+    method public void showPrevious();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class AdapterViewFlipper extends android.widget.AdapterViewAnimator {
+    ctor public AdapterViewFlipper(android.content.Context);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getFlipInterval();
+    method public boolean isAutoStart();
+    method public boolean isFlipping();
+    method public void setAutoStart(boolean);
+    method public void setFlipInterval(int);
+    method public void startFlipping();
+    method public void stopFlipping();
+  }
+
+  public interface Advanceable {
+    method public void advance();
+    method public void fyiWillBeAdvancedByHostKThx();
+  }
+
+  public class AlphabetIndexer extends android.database.DataSetObserver implements android.widget.SectionIndexer {
+    ctor public AlphabetIndexer(android.database.Cursor, int, CharSequence);
+    method protected int compare(String, String);
+    method public int getPositionForSection(int);
+    method public int getSectionForPosition(int);
+    method public Object[] getSections();
+    method public void setCursor(android.database.Cursor);
+    field protected CharSequence mAlphabet;
+    field protected int mColumnIndex;
+    field protected android.database.Cursor mDataCursor;
+  }
+
+  @Deprecated @android.widget.RemoteViews.RemoteView public class AnalogClock extends android.view.View {
+    ctor @Deprecated public AnalogClock(android.content.Context);
+    ctor @Deprecated public AnalogClock(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public AnalogClock(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public AnalogClock(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated @Nullable public android.graphics.BlendMode getDialTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getDialTintList();
+    method @Deprecated @Nullable public android.graphics.BlendMode getHourHandTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getHourHandTintList();
+    method @Deprecated @Nullable public android.graphics.BlendMode getMinuteHandTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getMinuteHandTintList();
+    method @Deprecated @Nullable public android.graphics.BlendMode getSecondHandTintBlendMode();
+    method @Deprecated @Nullable public android.content.res.ColorStateList getSecondHandTintList();
+    method @Deprecated @Nullable public String getTimeZone();
+    method @Deprecated public void setDial(@NonNull android.graphics.drawable.Icon);
+    method @Deprecated public void setDialTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setDialTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setHourHand(@NonNull android.graphics.drawable.Icon);
+    method @Deprecated public void setHourHandTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setHourHandTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setMinuteHand(@NonNull android.graphics.drawable.Icon);
+    method @Deprecated public void setMinuteHandTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setMinuteHandTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setSecondHand(@Nullable android.graphics.drawable.Icon);
+    method @Deprecated public void setSecondHandTintBlendMode(@Nullable android.graphics.BlendMode);
+    method @Deprecated public void setSecondHandTintList(@Nullable android.content.res.ColorStateList);
+    method @Deprecated public void setTimeZone(@Nullable String);
+  }
+
+  public class ArrayAdapter<T> extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @IdRes int);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @NonNull T[]);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @IdRes int, @NonNull T[]);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @NonNull java.util.List<T>);
+    ctor public ArrayAdapter(@NonNull android.content.Context, @LayoutRes int, @IdRes int, @NonNull java.util.List<T>);
+    method public void add(@Nullable T);
+    method public void addAll(@NonNull java.util.Collection<? extends T>);
+    method public void addAll(T...);
+    method public void clear();
+    method @NonNull public static android.widget.ArrayAdapter<java.lang.CharSequence> createFromResource(@NonNull android.content.Context, @ArrayRes int, @LayoutRes int);
+    method @NonNull public android.content.Context getContext();
+    method public int getCount();
+    method @Nullable public android.content.res.Resources.Theme getDropDownViewTheme();
+    method @NonNull public android.widget.Filter getFilter();
+    method @Nullable public T getItem(int);
+    method public long getItemId(int);
+    method public int getPosition(@Nullable T);
+    method @NonNull public android.view.View getView(int, @Nullable android.view.View, @NonNull android.view.ViewGroup);
+    method public void insert(@Nullable T, int);
+    method public void remove(@Nullable T);
+    method public void setDropDownViewResource(@LayoutRes int);
+    method public void setDropDownViewTheme(@Nullable android.content.res.Resources.Theme);
+    method public void setNotifyOnChange(boolean);
+    method public void sort(@NonNull java.util.Comparator<? super T>);
+  }
+
+  public class AutoCompleteTextView extends android.widget.EditText implements android.widget.Filter.FilterListener {
+    ctor public AutoCompleteTextView(android.content.Context);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int, android.content.res.Resources.Theme);
+    method public void clearListSelection();
+    method protected CharSequence convertSelectionToString(Object);
+    method public void dismissDropDown();
+    method public boolean enoughToFilter();
+    method public android.widget.ListAdapter getAdapter();
+    method public CharSequence getCompletionHint();
+    method public int getDropDownAnchor();
+    method public android.graphics.drawable.Drawable getDropDownBackground();
+    method public int getDropDownHeight();
+    method public int getDropDownHorizontalOffset();
+    method public int getDropDownVerticalOffset();
+    method public int getDropDownWidth();
+    method protected android.widget.Filter getFilter();
+    method public int getInputMethodMode();
+    method @Deprecated public android.widget.AdapterView.OnItemClickListener getItemClickListener();
+    method @Deprecated public android.widget.AdapterView.OnItemSelectedListener getItemSelectedListener();
+    method public int getListSelection();
+    method public android.widget.AdapterView.OnItemClickListener getOnItemClickListener();
+    method public android.widget.AdapterView.OnItemSelectedListener getOnItemSelectedListener();
+    method public int getThreshold();
+    method public android.widget.AutoCompleteTextView.Validator getValidator();
+    method public boolean isPerformingCompletion();
+    method public boolean isPopupShowing();
+    method public void onFilterComplete(int);
+    method public void performCompletion();
+    method protected void performFiltering(CharSequence, int);
+    method public void performValidation();
+    method public final void refreshAutoCompleteResults();
+    method protected void replaceText(CharSequence);
+    method public <T extends android.widget.ListAdapter & android.widget.Filterable> void setAdapter(T);
+    method public void setCompletionHint(CharSequence);
+    method public void setDropDownAnchor(int);
+    method public void setDropDownBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setDropDownBackgroundResource(@DrawableRes int);
+    method public void setDropDownHeight(int);
+    method public void setDropDownHorizontalOffset(int);
+    method public void setDropDownVerticalOffset(int);
+    method public void setDropDownWidth(int);
+    method public void setInputMethodMode(int);
+    method public void setListSelection(int);
+    method public void setOnDismissListener(android.widget.AutoCompleteTextView.OnDismissListener);
+    method public void setOnItemClickListener(android.widget.AdapterView.OnItemClickListener);
+    method public void setOnItemSelectedListener(android.widget.AdapterView.OnItemSelectedListener);
+    method public void setText(CharSequence, boolean);
+    method public void setThreshold(int);
+    method public void setValidator(android.widget.AutoCompleteTextView.Validator);
+    method public void showDropDown();
+  }
+
+  public static interface AutoCompleteTextView.OnDismissListener {
+    method public void onDismiss();
+  }
+
+  public static interface AutoCompleteTextView.Validator {
+    method public CharSequence fixText(CharSequence);
+    method public boolean isValid(CharSequence);
+  }
+
+  public abstract class BaseAdapter implements android.widget.ListAdapter android.widget.SpinnerAdapter {
+    ctor public BaseAdapter();
+    method public boolean areAllItemsEnabled();
+    method public android.view.View getDropDownView(int, android.view.View, android.view.ViewGroup);
+    method public int getItemViewType(int);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public boolean isEmpty();
+    method public boolean isEnabled(int);
+    method public void notifyDataSetChanged();
+    method public void notifyDataSetInvalidated();
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void setAutofillOptions(@Nullable java.lang.CharSequence...);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public abstract class BaseExpandableListAdapter implements android.widget.ExpandableListAdapter android.widget.HeterogeneousExpandableList {
+    ctor public BaseExpandableListAdapter();
+    method public boolean areAllItemsEnabled();
+    method public int getChildType(int, int);
+    method public int getChildTypeCount();
+    method public long getCombinedChildId(long, long);
+    method public long getCombinedGroupId(long);
+    method public int getGroupType(int);
+    method public int getGroupTypeCount();
+    method public boolean isEmpty();
+    method public void notifyDataSetChanged();
+    method public void notifyDataSetInvalidated();
+    method public void onGroupCollapsed(int);
+    method public void onGroupExpanded(int);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class Button extends android.widget.TextView {
+    ctor public Button(android.content.Context);
+    ctor public Button(android.content.Context, android.util.AttributeSet);
+    ctor public Button(android.content.Context, android.util.AttributeSet, int);
+    ctor public Button(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public class CalendarView extends android.widget.FrameLayout {
+    ctor public CalendarView(@NonNull android.content.Context);
+    ctor public CalendarView(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public CalendarView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int);
+    ctor public CalendarView(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int, @StyleRes int);
+    method public long getDate();
+    method @StyleRes public int getDateTextAppearance();
+    method public int getFirstDayOfWeek();
+    method @Deprecated @ColorInt public int getFocusedMonthDateColor();
+    method public long getMaxDate();
+    method public long getMinDate();
+    method @Deprecated public android.graphics.drawable.Drawable getSelectedDateVerticalBar();
+    method @Deprecated @ColorInt public int getSelectedWeekBackgroundColor();
+    method @Deprecated public boolean getShowWeekNumber();
+    method @Deprecated public int getShownWeekCount();
+    method @Deprecated @ColorInt public int getUnfocusedMonthDateColor();
+    method @StyleRes public int getWeekDayTextAppearance();
+    method @Deprecated @ColorInt public int getWeekNumberColor();
+    method @Deprecated @ColorInt public int getWeekSeparatorLineColor();
+    method public void setDate(long);
+    method public void setDate(long, boolean, boolean);
+    method public void setDateTextAppearance(@StyleRes int);
+    method public void setFirstDayOfWeek(int);
+    method @Deprecated public void setFocusedMonthDateColor(@ColorInt int);
+    method public void setMaxDate(long);
+    method public void setMinDate(long);
+    method public void setOnDateChangeListener(android.widget.CalendarView.OnDateChangeListener);
+    method @Deprecated public void setSelectedDateVerticalBar(@DrawableRes int);
+    method @Deprecated public void setSelectedDateVerticalBar(android.graphics.drawable.Drawable);
+    method @Deprecated public void setSelectedWeekBackgroundColor(@ColorInt int);
+    method @Deprecated public void setShowWeekNumber(boolean);
+    method @Deprecated public void setShownWeekCount(int);
+    method @Deprecated public void setUnfocusedMonthDateColor(@ColorInt int);
+    method public void setWeekDayTextAppearance(@StyleRes int);
+    method @Deprecated public void setWeekNumberColor(@ColorInt int);
+    method @Deprecated public void setWeekSeparatorLineColor(@ColorInt int);
+  }
+
+  public static interface CalendarView.OnDateChangeListener {
+    method public void onSelectedDayChange(@NonNull android.widget.CalendarView, int, int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class CheckBox extends android.widget.CompoundButton {
+    ctor public CheckBox(android.content.Context);
+    ctor public CheckBox(android.content.Context, android.util.AttributeSet);
+    ctor public CheckBox(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckBox(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public interface Checkable {
+    method public boolean isChecked();
+    method public void setChecked(boolean);
+    method public void toggle();
+  }
+
+  public class CheckedTextView extends android.widget.TextView implements android.widget.Checkable {
+    ctor public CheckedTextView(android.content.Context);
+    ctor public CheckedTextView(android.content.Context, android.util.AttributeSet);
+    ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.graphics.drawable.Drawable getCheckMarkDrawable();
+    method @Nullable public android.graphics.BlendMode getCheckMarkTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getCheckMarkTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getCheckMarkTintMode();
+    method public boolean isChecked();
+    method public void setCheckMarkDrawable(@DrawableRes int);
+    method public void setCheckMarkDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setCheckMarkTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setCheckMarkTintList(@Nullable android.content.res.ColorStateList);
+    method public void setCheckMarkTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setChecked(boolean);
+    method public void toggle();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class Chronometer extends android.widget.TextView {
+    ctor public Chronometer(android.content.Context);
+    ctor public Chronometer(android.content.Context, android.util.AttributeSet);
+    ctor public Chronometer(android.content.Context, android.util.AttributeSet, int);
+    ctor public Chronometer(android.content.Context, android.util.AttributeSet, int, int);
+    method public long getBase();
+    method public String getFormat();
+    method public android.widget.Chronometer.OnChronometerTickListener getOnChronometerTickListener();
+    method public boolean isCountDown();
+    method public boolean isTheFinalCountDown();
+    method public void setBase(long);
+    method public void setCountDown(boolean);
+    method public void setFormat(String);
+    method public void setOnChronometerTickListener(android.widget.Chronometer.OnChronometerTickListener);
+    method public void start();
+    method public void stop();
+  }
+
+  public static interface Chronometer.OnChronometerTickListener {
+    method public void onChronometerTick(android.widget.Chronometer);
+  }
+
+  public abstract class CompoundButton extends android.widget.Button implements android.widget.Checkable {
+    ctor public CompoundButton(android.content.Context);
+    ctor public CompoundButton(android.content.Context, android.util.AttributeSet);
+    ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int, int);
+    method @Nullable public android.graphics.drawable.Drawable getButtonDrawable();
+    method @Nullable public android.graphics.BlendMode getButtonTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getButtonTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getButtonTintMode();
+    method public boolean isChecked();
+    method public void setButtonDrawable(@DrawableRes int);
+    method public void setButtonDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setButtonIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setButtonTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setButtonTintList(@Nullable android.content.res.ColorStateList);
+    method public void setButtonTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setChecked(boolean);
+    method public void setOnCheckedChangeListener(@Nullable android.widget.CompoundButton.OnCheckedChangeListener);
+    method public void toggle();
+  }
+
+  public static interface CompoundButton.OnCheckedChangeListener {
+    method public void onCheckedChanged(android.widget.CompoundButton, boolean);
+  }
+
+  public abstract class CursorAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+    ctor @Deprecated public CursorAdapter(android.content.Context, android.database.Cursor);
+    ctor public CursorAdapter(android.content.Context, android.database.Cursor, boolean);
+    ctor public CursorAdapter(android.content.Context, android.database.Cursor, int);
+    method public abstract void bindView(android.view.View, android.content.Context, android.database.Cursor);
+    method public void changeCursor(android.database.Cursor);
+    method public CharSequence convertToString(android.database.Cursor);
+    method public int getCount();
+    method public android.database.Cursor getCursor();
+    method public android.content.res.Resources.Theme getDropDownViewTheme();
+    method public android.widget.Filter getFilter();
+    method public android.widget.FilterQueryProvider getFilterQueryProvider();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method @Deprecated protected void init(android.content.Context, android.database.Cursor, boolean);
+    method public android.view.View newDropDownView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method public abstract android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method protected void onContentChanged();
+    method @WorkerThread public android.database.Cursor runQueryOnBackgroundThread(CharSequence);
+    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+    method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+    method public android.database.Cursor swapCursor(android.database.Cursor);
+    field @Deprecated public static final int FLAG_AUTO_REQUERY = 1; // 0x1
+    field public static final int FLAG_REGISTER_CONTENT_OBSERVER = 2; // 0x2
+  }
+
+  public abstract class CursorTreeAdapter extends android.widget.BaseExpandableListAdapter implements android.widget.Filterable {
+    ctor public CursorTreeAdapter(android.database.Cursor, android.content.Context);
+    ctor public CursorTreeAdapter(android.database.Cursor, android.content.Context, boolean);
+    method protected abstract void bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method protected abstract void bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method public void changeCursor(android.database.Cursor);
+    method public String convertToString(android.database.Cursor);
+    method public android.database.Cursor getChild(int, int);
+    method public long getChildId(int, int);
+    method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup);
+    method public int getChildrenCount(int);
+    method protected abstract android.database.Cursor getChildrenCursor(android.database.Cursor);
+    method public android.database.Cursor getCursor();
+    method public android.widget.Filter getFilter();
+    method public android.widget.FilterQueryProvider getFilterQueryProvider();
+    method public android.database.Cursor getGroup(int);
+    method public int getGroupCount();
+    method public long getGroupId(int);
+    method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup);
+    method public boolean hasStableIds();
+    method public boolean isChildSelectable(int, int);
+    method protected abstract android.view.View newChildView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+    method protected abstract android.view.View newGroupView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+    method public void notifyDataSetChanged(boolean);
+    method public android.database.Cursor runQueryOnBackgroundThread(CharSequence);
+    method public void setChildrenCursor(int, android.database.Cursor);
+    method public void setFilterQueryProvider(android.widget.FilterQueryProvider);
+    method public void setGroupCursor(android.database.Cursor);
+  }
+
+  public class DatePicker extends android.widget.FrameLayout {
+    ctor public DatePicker(android.content.Context);
+    ctor public DatePicker(android.content.Context, android.util.AttributeSet);
+    ctor public DatePicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public DatePicker(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public android.widget.CalendarView getCalendarView();
+    method @Deprecated public boolean getCalendarViewShown();
+    method public int getDayOfMonth();
+    method public int getFirstDayOfWeek();
+    method public long getMaxDate();
+    method public long getMinDate();
+    method public int getMonth();
+    method @Deprecated public boolean getSpinnersShown();
+    method public int getYear();
+    method public void init(int, int, int, android.widget.DatePicker.OnDateChangedListener);
+    method @Deprecated public void setCalendarViewShown(boolean);
+    method public void setFirstDayOfWeek(int);
+    method public void setMaxDate(long);
+    method public void setMinDate(long);
+    method public void setOnDateChangedListener(android.widget.DatePicker.OnDateChangedListener);
+    method @Deprecated public void setSpinnersShown(boolean);
+    method public void updateDate(int, int, int);
+  }
+
+  public static interface DatePicker.OnDateChangedListener {
+    method public void onDateChanged(android.widget.DatePicker, int, int, int);
+  }
+
+  @Deprecated public class DialerFilter extends android.widget.RelativeLayout {
+    ctor @Deprecated public DialerFilter(android.content.Context);
+    ctor @Deprecated public DialerFilter(android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void append(String);
+    method @Deprecated public void clearText();
+    method @Deprecated public CharSequence getDigits();
+    method @Deprecated public CharSequence getFilterText();
+    method @Deprecated public CharSequence getLetters();
+    method @Deprecated public int getMode();
+    method @Deprecated public boolean isQwertyKeyboard();
+    method @Deprecated protected void onModeChange(int, int);
+    method @Deprecated public void removeFilterWatcher(android.text.TextWatcher);
+    method @Deprecated public void setDigitsWatcher(android.text.TextWatcher);
+    method @Deprecated public void setFilterWatcher(android.text.TextWatcher);
+    method @Deprecated public void setLettersWatcher(android.text.TextWatcher);
+    method @Deprecated public void setMode(int);
+    field @Deprecated public static final int DIGITS_AND_LETTERS = 1; // 0x1
+    field @Deprecated public static final int DIGITS_AND_LETTERS_NO_DIGITS = 2; // 0x2
+    field @Deprecated public static final int DIGITS_AND_LETTERS_NO_LETTERS = 3; // 0x3
+    field @Deprecated public static final int DIGITS_ONLY = 4; // 0x4
+    field @Deprecated public static final int LETTERS_ONLY = 5; // 0x5
+  }
+
+  @Deprecated public class DigitalClock extends android.widget.TextView {
+    ctor @Deprecated public DigitalClock(android.content.Context);
+    ctor @Deprecated public DigitalClock(android.content.Context, android.util.AttributeSet);
+  }
+
+  public class EdgeEffect {
+    ctor public EdgeEffect(android.content.Context);
+    ctor public EdgeEffect(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    method public boolean draw(android.graphics.Canvas);
+    method public void finish();
+    method @Nullable public android.graphics.BlendMode getBlendMode();
+    method @ColorInt public int getColor();
+    method public float getDistance();
+    method public int getMaxHeight();
+    method public boolean isFinished();
+    method public void onAbsorb(int);
+    method public void onPull(float);
+    method public void onPull(float, float);
+    method public float onPullDistance(float, float);
+    method public void onRelease();
+    method public void setBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setColor(@ColorInt int);
+    method public void setSize(int, int);
+    field public static final android.graphics.BlendMode DEFAULT_BLEND_MODE;
+  }
+
+  public class EditText extends android.widget.TextView {
+    ctor public EditText(android.content.Context);
+    ctor public EditText(android.content.Context, android.util.AttributeSet);
+    ctor public EditText(android.content.Context, android.util.AttributeSet, int);
+    ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
+    method public void extendSelection(int);
+    method public android.text.Editable getText();
+    method public void selectAll();
+    method public void setSelection(int, int);
+    method public void setSelection(int);
+  }
+
+  public interface ExpandableListAdapter {
+    method public boolean areAllItemsEnabled();
+    method public Object getChild(int, int);
+    method public long getChildId(int, int);
+    method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup);
+    method public int getChildrenCount(int);
+    method public long getCombinedChildId(long, long);
+    method public long getCombinedGroupId(long);
+    method public Object getGroup(int);
+    method public int getGroupCount();
+    method public long getGroupId(int);
+    method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup);
+    method public boolean hasStableIds();
+    method public boolean isChildSelectable(int, int);
+    method public boolean isEmpty();
+    method public void onGroupCollapsed(int);
+    method public void onGroupExpanded(int);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public class ExpandableListView extends android.widget.ListView {
+    ctor public ExpandableListView(android.content.Context);
+    ctor public ExpandableListView(android.content.Context, android.util.AttributeSet);
+    ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean collapseGroup(int);
+    method public boolean expandGroup(int);
+    method public boolean expandGroup(int, boolean);
+    method public android.widget.ExpandableListAdapter getExpandableListAdapter();
+    method public long getExpandableListPosition(int);
+    method public int getFlatListPosition(long);
+    method public static int getPackedPositionChild(long);
+    method public static long getPackedPositionForChild(int, int);
+    method public static long getPackedPositionForGroup(int);
+    method public static int getPackedPositionGroup(long);
+    method public static int getPackedPositionType(long);
+    method public long getSelectedId();
+    method public long getSelectedPosition();
+    method public boolean isGroupExpanded(int);
+    method public void setAdapter(android.widget.ExpandableListAdapter);
+    method public void setChildDivider(android.graphics.drawable.Drawable);
+    method public void setChildIndicator(android.graphics.drawable.Drawable);
+    method public void setChildIndicatorBounds(int, int);
+    method public void setChildIndicatorBoundsRelative(int, int);
+    method public void setGroupIndicator(android.graphics.drawable.Drawable);
+    method public void setIndicatorBounds(int, int);
+    method public void setIndicatorBoundsRelative(int, int);
+    method public void setOnChildClickListener(android.widget.ExpandableListView.OnChildClickListener);
+    method public void setOnGroupClickListener(android.widget.ExpandableListView.OnGroupClickListener);
+    method public void setOnGroupCollapseListener(android.widget.ExpandableListView.OnGroupCollapseListener);
+    method public void setOnGroupExpandListener(android.widget.ExpandableListView.OnGroupExpandListener);
+    method public boolean setSelectedChild(int, int, boolean);
+    method public void setSelectedGroup(int);
+    field public static final int CHILD_INDICATOR_INHERIT = -1; // 0xffffffff
+    field public static final int PACKED_POSITION_TYPE_CHILD = 1; // 0x1
+    field public static final int PACKED_POSITION_TYPE_GROUP = 0; // 0x0
+    field public static final int PACKED_POSITION_TYPE_NULL = 2; // 0x2
+    field public static final long PACKED_POSITION_VALUE_NULL = 4294967295L; // 0xffffffffL
+  }
+
+  public static class ExpandableListView.ExpandableListContextMenuInfo implements android.view.ContextMenu.ContextMenuInfo {
+    ctor public ExpandableListView.ExpandableListContextMenuInfo(android.view.View, long, long);
+    field public long id;
+    field public long packedPosition;
+    field public android.view.View targetView;
+  }
+
+  public static interface ExpandableListView.OnChildClickListener {
+    method public boolean onChildClick(android.widget.ExpandableListView, android.view.View, int, int, long);
+  }
+
+  public static interface ExpandableListView.OnGroupClickListener {
+    method public boolean onGroupClick(android.widget.ExpandableListView, android.view.View, int, long);
+  }
+
+  public static interface ExpandableListView.OnGroupCollapseListener {
+    method public void onGroupCollapse(int);
+  }
+
+  public static interface ExpandableListView.OnGroupExpandListener {
+    method public void onGroupExpand(int);
+  }
+
+  public abstract class Filter {
+    ctor public Filter();
+    method public CharSequence convertResultToString(Object);
+    method public final void filter(CharSequence);
+    method public final void filter(CharSequence, android.widget.Filter.FilterListener);
+    method protected abstract android.widget.Filter.FilterResults performFiltering(CharSequence);
+    method protected abstract void publishResults(CharSequence, android.widget.Filter.FilterResults);
+  }
+
+  public static interface Filter.FilterListener {
+    method public void onFilterComplete(int);
+  }
+
+  protected static class Filter.FilterResults {
+    ctor public Filter.FilterResults();
+    field public int count;
+    field public Object values;
+  }
+
+  public interface FilterQueryProvider {
+    method public android.database.Cursor runQuery(CharSequence);
+  }
+
+  public interface Filterable {
+    method public android.widget.Filter getFilter();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class FrameLayout extends android.view.ViewGroup {
+    ctor public FrameLayout(@NonNull android.content.Context);
+    ctor public FrameLayout(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public FrameLayout(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int);
+    ctor public FrameLayout(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int, @StyleRes int);
+    method protected android.widget.FrameLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.FrameLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method @Deprecated public boolean getConsiderGoneChildrenWhenMeasuring();
+    method public boolean getMeasureAllChildren();
+    method public void setMeasureAllChildren(boolean);
+  }
+
+  public static class FrameLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public FrameLayout.LayoutParams(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public FrameLayout.LayoutParams(int, int);
+    ctor public FrameLayout.LayoutParams(int, int, int);
+    ctor public FrameLayout.LayoutParams(@NonNull android.view.ViewGroup.LayoutParams);
+    ctor public FrameLayout.LayoutParams(@NonNull android.view.ViewGroup.MarginLayoutParams);
+    ctor public FrameLayout.LayoutParams(@NonNull android.widget.FrameLayout.LayoutParams);
+    field public static final int UNSPECIFIED_GRAVITY = -1; // 0xffffffff
+    field public int gravity;
+  }
+
+  @Deprecated public class Gallery extends android.widget.AbsSpinner implements android.view.GestureDetector.OnGestureListener {
+    ctor @Deprecated public Gallery(android.content.Context);
+    ctor @Deprecated public Gallery(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public Gallery(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public Gallery(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public boolean onDown(android.view.MotionEvent);
+    method @Deprecated public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method @Deprecated public void onLongPress(@NonNull android.view.MotionEvent);
+    method @Deprecated public boolean onScroll(android.view.MotionEvent, android.view.MotionEvent, float, float);
+    method @Deprecated public void onShowPress(android.view.MotionEvent);
+    method @Deprecated public boolean onSingleTapUp(android.view.MotionEvent);
+    method @Deprecated public void setAnimationDuration(int);
+    method @Deprecated public void setCallbackDuringFling(boolean);
+    method @Deprecated public void setGravity(int);
+    method @Deprecated public void setSpacing(int);
+    method @Deprecated public void setUnselectedAlpha(float);
+  }
+
+  @Deprecated public static class Gallery.LayoutParams extends android.view.ViewGroup.LayoutParams {
+    ctor @Deprecated public Gallery.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public Gallery.LayoutParams(int, int);
+    ctor @Deprecated public Gallery.LayoutParams(android.view.ViewGroup.LayoutParams);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class GridLayout extends android.view.ViewGroup {
+    ctor public GridLayout(android.content.Context);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.GridLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.GridLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.GridLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getAlignmentMode();
+    method public int getColumnCount();
+    method public int getOrientation();
+    method public int getRowCount();
+    method public boolean getUseDefaultMargins();
+    method public boolean isColumnOrderPreserved();
+    method public boolean isRowOrderPreserved();
+    method public void setAlignmentMode(int);
+    method public void setColumnCount(int);
+    method public void setColumnOrderPreserved(boolean);
+    method public void setOrientation(int);
+    method public void setRowCount(int);
+    method public void setRowOrderPreserved(boolean);
+    method public void setUseDefaultMargins(boolean);
+    method public static android.widget.GridLayout.Spec spec(int, int, android.widget.GridLayout.Alignment, float);
+    method public static android.widget.GridLayout.Spec spec(int, android.widget.GridLayout.Alignment, float);
+    method public static android.widget.GridLayout.Spec spec(int, int, float);
+    method public static android.widget.GridLayout.Spec spec(int, float);
+    method public static android.widget.GridLayout.Spec spec(int, int, android.widget.GridLayout.Alignment);
+    method public static android.widget.GridLayout.Spec spec(int, android.widget.GridLayout.Alignment);
+    method public static android.widget.GridLayout.Spec spec(int, int);
+    method public static android.widget.GridLayout.Spec spec(int);
+    field public static final int ALIGN_BOUNDS = 0; // 0x0
+    field public static final int ALIGN_MARGINS = 1; // 0x1
+    field public static final android.widget.GridLayout.Alignment BASELINE;
+    field public static final android.widget.GridLayout.Alignment BOTTOM;
+    field public static final android.widget.GridLayout.Alignment CENTER;
+    field public static final android.widget.GridLayout.Alignment END;
+    field public static final android.widget.GridLayout.Alignment FILL;
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final android.widget.GridLayout.Alignment LEFT;
+    field public static final android.widget.GridLayout.Alignment RIGHT;
+    field public static final android.widget.GridLayout.Alignment START;
+    field public static final android.widget.GridLayout.Alignment TOP;
+    field public static final int UNDEFINED = -2147483648; // 0x80000000
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public abstract static class GridLayout.Alignment {
+  }
+
+  public static class GridLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public GridLayout.LayoutParams(android.widget.GridLayout.Spec, android.widget.GridLayout.Spec);
+    ctor public GridLayout.LayoutParams();
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public GridLayout.LayoutParams(android.widget.GridLayout.LayoutParams);
+    ctor public GridLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    method public void setGravity(int);
+    field public android.widget.GridLayout.Spec columnSpec;
+    field public android.widget.GridLayout.Spec rowSpec;
+  }
+
+  public static class GridLayout.Spec {
+  }
+
+  @android.widget.RemoteViews.RemoteView public class GridView extends android.widget.AbsListView {
+    ctor public GridView(android.content.Context);
+    ctor public GridView(android.content.Context, android.util.AttributeSet);
+    ctor public GridView(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridView(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.ListAdapter getAdapter();
+    method public int getColumnWidth();
+    method public int getGravity();
+    method public int getHorizontalSpacing();
+    method public int getNumColumns();
+    method public int getRequestedColumnWidth();
+    method public int getRequestedHorizontalSpacing();
+    method public int getStretchMode();
+    method public int getVerticalSpacing();
+    method public void setColumnWidth(int);
+    method public void setGravity(int);
+    method public void setHorizontalSpacing(int);
+    method public void setNumColumns(int);
+    method public void setSelection(int);
+    method public void setStretchMode(int);
+    method public void setVerticalSpacing(int);
+    method public void smoothScrollByOffset(int);
+    field public static final int AUTO_FIT = -1; // 0xffffffff
+    field public static final int NO_STRETCH = 0; // 0x0
+    field public static final int STRETCH_COLUMN_WIDTH = 2; // 0x2
+    field public static final int STRETCH_SPACING = 1; // 0x1
+    field public static final int STRETCH_SPACING_UNIFORM = 3; // 0x3
+  }
+
+  public class HeaderViewListAdapter implements android.widget.Filterable android.widget.WrapperListAdapter {
+    ctor public HeaderViewListAdapter(java.util.ArrayList<android.widget.ListView.FixedViewInfo>, java.util.ArrayList<android.widget.ListView.FixedViewInfo>, android.widget.ListAdapter);
+    method public boolean areAllItemsEnabled();
+    method public int getCount();
+    method public android.widget.Filter getFilter();
+    method public int getFootersCount();
+    method public int getHeadersCount();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public int getItemViewType(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method public int getViewTypeCount();
+    method public android.widget.ListAdapter getWrappedAdapter();
+    method public boolean hasStableIds();
+    method public boolean isEmpty();
+    method public boolean isEnabled(int);
+    method public void registerDataSetObserver(android.database.DataSetObserver);
+    method public boolean removeFooter(android.view.View);
+    method public boolean removeHeader(android.view.View);
+    method public void unregisterDataSetObserver(android.database.DataSetObserver);
+  }
+
+  public interface HeterogeneousExpandableList {
+    method public int getChildType(int, int);
+    method public int getChildTypeCount();
+    method public int getGroupType(int);
+    method public int getGroupTypeCount();
+  }
+
+  public class HorizontalScrollView extends android.widget.FrameLayout {
+    ctor public HorizontalScrollView(android.content.Context);
+    ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet);
+    ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int);
+    ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean arrowScroll(int);
+    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+    method public boolean executeKeyEvent(android.view.KeyEvent);
+    method public void fling(int);
+    method public boolean fullScroll(int);
+    method @ColorInt public int getLeftEdgeEffectColor();
+    method public int getMaxScrollAmount();
+    method @ColorInt public int getRightEdgeEffectColor();
+    method public boolean isFillViewport();
+    method public boolean isSmoothScrollingEnabled();
+    method public boolean pageScroll(int);
+    method public void setEdgeEffectColor(@ColorInt int);
+    method public void setFillViewport(boolean);
+    method public void setLeftEdgeEffectColor(@ColorInt int);
+    method public void setRightEdgeEffectColor(@ColorInt int);
+    method public void setSmoothScrollingEnabled(boolean);
+    method public final void smoothScrollBy(int, int);
+    method public final void smoothScrollTo(int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ImageButton extends android.widget.ImageView {
+    ctor public ImageButton(android.content.Context);
+    ctor public ImageButton(android.content.Context, android.util.AttributeSet);
+    ctor public ImageButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public ImageButton(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  public class ImageSwitcher extends android.widget.ViewSwitcher {
+    ctor public ImageSwitcher(android.content.Context);
+    ctor public ImageSwitcher(android.content.Context, android.util.AttributeSet);
+    method public void setImageDrawable(android.graphics.drawable.Drawable);
+    method public void setImageResource(@DrawableRes int);
+    method public void setImageURI(android.net.Uri);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ImageView extends android.view.View {
+    ctor public ImageView(android.content.Context);
+    ctor public ImageView(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public ImageView(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public ImageView(android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public void animateTransform(@Nullable android.graphics.Matrix);
+    method public final void clearColorFilter();
+    method public boolean getAdjustViewBounds();
+    method public boolean getBaselineAlignBottom();
+    method public android.graphics.ColorFilter getColorFilter();
+    method public boolean getCropToPadding();
+    method public android.graphics.drawable.Drawable getDrawable();
+    method public int getImageAlpha();
+    method public android.graphics.Matrix getImageMatrix();
+    method @Nullable public android.graphics.BlendMode getImageTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getImageTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getImageTintMode();
+    method public int getMaxHeight();
+    method public int getMaxWidth();
+    method public android.widget.ImageView.ScaleType getScaleType();
+    method public int[] onCreateDrawableState(int);
+    method public void setAdjustViewBounds(boolean);
+    method @Deprecated public void setAlpha(int);
+    method public void setBaseline(int);
+    method public void setBaselineAlignBottom(boolean);
+    method public final void setColorFilter(int, android.graphics.PorterDuff.Mode);
+    method public final void setColorFilter(int);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setCropToPadding(boolean);
+    method protected boolean setFrame(int, int, int, int);
+    method public void setImageAlpha(int);
+    method public void setImageBitmap(android.graphics.Bitmap);
+    method public void setImageDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setImageIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setImageLevel(int);
+    method public void setImageMatrix(android.graphics.Matrix);
+    method public void setImageResource(@DrawableRes int);
+    method public void setImageState(int[], boolean);
+    method public void setImageTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setImageTintList(@Nullable android.content.res.ColorStateList);
+    method public void setImageTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setImageURI(@Nullable android.net.Uri);
+    method public void setMaxHeight(int);
+    method public void setMaxWidth(int);
+    method public void setScaleType(android.widget.ImageView.ScaleType);
+  }
+
+  public enum ImageView.ScaleType {
+    enum_constant public static final android.widget.ImageView.ScaleType CENTER;
+    enum_constant public static final android.widget.ImageView.ScaleType CENTER_CROP;
+    enum_constant public static final android.widget.ImageView.ScaleType CENTER_INSIDE;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_CENTER;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_END;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_START;
+    enum_constant public static final android.widget.ImageView.ScaleType FIT_XY;
+    enum_constant public static final android.widget.ImageView.ScaleType MATRIX;
+  }
+
+  @android.widget.RemoteViews.RemoteView public class LinearLayout extends android.view.ViewGroup {
+    ctor public LinearLayout(android.content.Context);
+    ctor public LinearLayout(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public LinearLayout(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method protected android.widget.LinearLayout.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.LinearLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.LinearLayout.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public int getBaselineAlignedChildIndex();
+    method public android.graphics.drawable.Drawable getDividerDrawable();
+    method public int getDividerPadding();
+    method public int getGravity();
+    method public int getOrientation();
+    method public int getShowDividers();
+    method public float getWeightSum();
+    method public boolean isBaselineAligned();
+    method public boolean isMeasureWithLargestChildEnabled();
+    method public void setBaselineAligned(boolean);
+    method public void setBaselineAlignedChildIndex(int);
+    method public void setDividerDrawable(android.graphics.drawable.Drawable);
+    method public void setDividerPadding(int);
+    method public void setGravity(int);
+    method public void setHorizontalGravity(int);
+    method public void setMeasureWithLargestChildEnabled(boolean);
+    method public void setOrientation(int);
+    method public void setShowDividers(int);
+    method public void setVerticalGravity(int);
+    method public void setWeightSum(float);
+    field public static final int HORIZONTAL = 0; // 0x0
+    field public static final int SHOW_DIVIDER_BEGINNING = 1; // 0x1
+    field public static final int SHOW_DIVIDER_END = 4; // 0x4
+    field public static final int SHOW_DIVIDER_MIDDLE = 2; // 0x2
+    field public static final int SHOW_DIVIDER_NONE = 0; // 0x0
+    field public static final int VERTICAL = 1; // 0x1
+  }
+
+  public static class LinearLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public LinearLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public LinearLayout.LayoutParams(int, int);
+    ctor public LinearLayout.LayoutParams(int, int, float);
+    ctor public LinearLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public LinearLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams);
+    method public String debug(String);
+    field public int gravity;
+    field public float weight;
+  }
+
+  public interface ListAdapter extends android.widget.Adapter {
+    method public boolean areAllItemsEnabled();
+    method public boolean isEnabled(int);
+  }
+
+  public class ListPopupWindow {
+    ctor public ListPopupWindow(@NonNull android.content.Context);
+    ctor public ListPopupWindow(@NonNull android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public ListPopupWindow(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int);
+    ctor public ListPopupWindow(@NonNull android.content.Context, @Nullable android.util.AttributeSet, @AttrRes int, @StyleRes int);
+    method public void clearListSelection();
+    method public android.view.View.OnTouchListener createDragToOpenListener(android.view.View);
+    method public void dismiss();
+    method @Nullable public android.view.View getAnchorView();
+    method @StyleRes public int getAnimationStyle();
+    method @Nullable public android.graphics.drawable.Drawable getBackground();
+    method @Nullable public android.graphics.Rect getEpicenterBounds();
+    method public int getHeight();
+    method public int getHorizontalOffset();
+    method public int getInputMethodMode();
+    method @Nullable public android.widget.ListView getListView();
+    method public int getPromptPosition();
+    method @Nullable public Object getSelectedItem();
+    method public long getSelectedItemId();
+    method public int getSelectedItemPosition();
+    method @Nullable public android.view.View getSelectedView();
+    method public int getSoftInputMode();
+    method public int getVerticalOffset();
+    method public int getWidth();
+    method public boolean isInputMethodNotNeeded();
+    method public boolean isModal();
+    method public boolean isShowing();
+    method public boolean onKeyDown(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyPreIme(int, @NonNull android.view.KeyEvent);
+    method public boolean onKeyUp(int, @NonNull android.view.KeyEvent);
+    method public boolean performItemClick(int);
+    method public void postShow();
+    method public void setAdapter(@Nullable android.widget.ListAdapter);
+    method public void setAnchorView(@Nullable android.view.View);
+    method public void setAnimationStyle(@StyleRes int);
+    method public void setBackgroundDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setContentWidth(int);
+    method public void setDropDownGravity(int);
+    method public void setEpicenterBounds(@Nullable android.graphics.Rect);
+    method public void setHeight(int);
+    method public void setHorizontalOffset(int);
+    method public void setInputMethodMode(int);
+    method public void setListSelector(android.graphics.drawable.Drawable);
+    method public void setModal(boolean);
+    method public void setOnDismissListener(@Nullable android.widget.PopupWindow.OnDismissListener);
+    method public void setOnItemClickListener(@Nullable android.widget.AdapterView.OnItemClickListener);
+    method public void setOnItemSelectedListener(@Nullable android.widget.AdapterView.OnItemSelectedListener);
+    method public void setPromptPosition(int);
+    method public void setPromptView(@Nullable android.view.View);
+    method public void setSelection(int);
+    method public void setSoftInputMode(int);
+    method public void setVerticalOffset(int);
+    method public void setWidth(int);
+    method public void setWindowLayoutType(int);
+    method public void show();
+    field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+    field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+    field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+    field public static final int MATCH_PARENT = -1; // 0xffffffff
+    field public static final int POSITION_PROMPT_ABOVE = 0; // 0x0
+    field public static final int POSITION_PROMPT_BELOW = 1; // 0x1
+    field public static final int WRAP_CONTENT = -2; // 0xfffffffe
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ListView extends android.widget.AbsListView {
+    ctor public ListView(android.content.Context);
+    ctor public ListView(android.content.Context, android.util.AttributeSet);
+    ctor public ListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ListView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addFooterView(android.view.View, Object, boolean);
+    method public void addFooterView(android.view.View);
+    method public void addHeaderView(android.view.View, Object, boolean);
+    method public void addHeaderView(android.view.View);
+    method public boolean areFooterDividersEnabled();
+    method public boolean areHeaderDividersEnabled();
+    method public android.widget.ListAdapter getAdapter();
+    method @Deprecated public long[] getCheckItemIds();
+    method @Nullable public android.graphics.drawable.Drawable getDivider();
+    method public int getDividerHeight();
+    method public int getFooterViewsCount();
+    method public int getHeaderViewsCount();
+    method public boolean getItemsCanFocus();
+    method public int getMaxScrollAmount();
+    method public android.graphics.drawable.Drawable getOverscrollFooter();
+    method public android.graphics.drawable.Drawable getOverscrollHeader();
+    method public boolean removeFooterView(android.view.View);
+    method public boolean removeHeaderView(android.view.View);
+    method public void setDivider(@Nullable android.graphics.drawable.Drawable);
+    method public void setDividerHeight(int);
+    method public void setFooterDividersEnabled(boolean);
+    method public void setHeaderDividersEnabled(boolean);
+    method public void setItemsCanFocus(boolean);
+    method public void setOverscrollFooter(android.graphics.drawable.Drawable);
+    method public void setOverscrollHeader(android.graphics.drawable.Drawable);
+    method public void setSelection(int);
+    method public void setSelectionAfterHeaderView();
+    method public void smoothScrollByOffset(int);
+  }
+
+  public class ListView.FixedViewInfo {
+    ctor public ListView.FixedViewInfo();
+    field public Object data;
+    field public boolean isSelectable;
+    field public android.view.View view;
+  }
+
+  @UiThread public final class Magnifier {
+    ctor @Deprecated public Magnifier(@NonNull android.view.View);
+    method public void dismiss();
+    method @Px public float getCornerRadius();
+    method @Px public int getDefaultHorizontalSourceToMagnifierOffset();
+    method @Px public int getDefaultVerticalSourceToMagnifierOffset();
+    method @Px public float getElevation();
+    method @Px public int getHeight();
+    method @Nullable public android.graphics.drawable.Drawable getOverlay();
+    method @Nullable public android.graphics.Point getPosition();
+    method @Px public int getSourceHeight();
+    method @Nullable public android.graphics.Point getSourcePosition();
+    method @Px public int getSourceWidth();
+    method @Px public int getWidth();
+    method public float getZoom();
+    method public boolean isClippingEnabled();
+    method public void setZoom(@FloatRange(from=0.0f) float);
+    method public void show(@FloatRange(from=0) float, @FloatRange(from=0) float);
+    method public void show(@FloatRange(from=0) float, @FloatRange(from=0) float, float, float);
+    method public void update();
+    field public static final int SOURCE_BOUND_MAX_IN_SURFACE = 0; // 0x0
+    field public static final int SOURCE_BOUND_MAX_VISIBLE = 1; // 0x1
+  }
+
+  public static final class Magnifier.Builder {
+    ctor public Magnifier.Builder(@NonNull android.view.View);
+    method @NonNull public android.widget.Magnifier build();
+    method @NonNull public android.widget.Magnifier.Builder setClippingEnabled(boolean);
+    method @NonNull public android.widget.Magnifier.Builder setCornerRadius(@FloatRange(from=0) @Px float);
+    method @NonNull public android.widget.Magnifier.Builder setDefaultSourceToMagnifierOffset(@Px int, @Px int);
+    method @NonNull public android.widget.Magnifier.Builder setElevation(@FloatRange(from=0) @Px float);
+    method @NonNull public android.widget.Magnifier.Builder setInitialZoom(@FloatRange(from=0.0f) float);
+    method @NonNull public android.widget.Magnifier.Builder setOverlay(@Nullable android.graphics.drawable.Drawable);
+    method @NonNull public android.widget.Magnifier.Builder setSize(@IntRange(from=0) @Px int, @IntRange(from=0) @Px int);
+    method @NonNull public android.widget.Magnifier.Builder setSourceBounds(int, int, int, int);
+  }
+
+  public class MediaController extends android.widget.FrameLayout {
+    ctor public MediaController(android.content.Context, android.util.AttributeSet);
+    ctor public MediaController(android.content.Context, boolean);
+    ctor public MediaController(android.content.Context);
+    method public void hide();
+    method public boolean isShowing();
+    method public void onFinishInflate();
+    method public void setAnchorView(android.view.View);
+    method public void setMediaPlayer(android.widget.MediaController.MediaPlayerControl);
+    method public void setPrevNextListeners(android.view.View.OnClickListener, android.view.View.OnClickListener);
+    method public void show();
+    method public void show(int);
+  }
+
+  public static interface MediaController.MediaPlayerControl {
+    method public boolean canPause();
+    method public boolean canSeekBackward();
+    method public boolean canSeekForward();
+    method public int getAudioSessionId();
+    method public int getBufferPercentage();
+    method public int getCurrentPosition();
+    method public int getDuration();
+    method public boolean isPlaying();
+    method public void pause();
+    method public void seekTo(int);
+    method public void start();
+  }
+
+  public class MultiAutoCompleteTextView extends android.widget.AutoCompleteTextView {
+    ctor public MultiAutoCompleteTextView(android.content.Context);
+    ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
+    ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int);
+    method protected void performFiltering(CharSequence, int, int, int);
+    method public void setTokenizer(android.widget.MultiAutoCompleteTextView.Tokenizer);
+  }
+
+  public static class MultiAutoCompleteTextView.CommaTokenizer implements android.widget.MultiAutoCompleteTextView.Tokenizer {
+    ctor public MultiAutoCompleteTextView.CommaTokenizer();
+    method public int findTokenEnd(CharSequence, int);
+    method public int findTokenStart(CharSequence, int);
+    method public CharSequence terminateToken(CharSequence);
+  }
+
+  public static interface MultiAutoCompleteTextView.Tokenizer {
+    method public int findTokenEnd(CharSequence, int);
+    method public int findTokenStart(CharSequence, int);
+    method public CharSequence terminateToken(CharSequence);
+  }
+
+  public class NumberPicker extends android.widget.LinearLayout {
+    ctor public NumberPicker(android.content.Context);
+    ctor public NumberPicker(android.content.Context, android.util.AttributeSet);
+    ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int, int);
+    method public String[] getDisplayedValues();
+    method public int getMaxValue();
+    method public int getMinValue();
+    method @Px public int getSelectionDividerHeight();
+    method @ColorInt public int getTextColor();
+    method @FloatRange(from=0.0, fromInclusive=false) public float getTextSize();
+    method public int getValue();
+    method public boolean getWrapSelectorWheel();
+    method public void setDisplayedValues(String[]);
+    method public void setFormatter(android.widget.NumberPicker.Formatter);
+    method public void setMaxValue(int);
+    method public void setMinValue(int);
+    method public void setOnLongPressUpdateInterval(long);
+    method public void setOnScrollListener(android.widget.NumberPicker.OnScrollListener);
+    method public void setOnValueChangedListener(android.widget.NumberPicker.OnValueChangeListener);
+    method public void setSelectionDividerHeight(@IntRange(from=0) @Px int);
+    method public void setTextColor(@ColorInt int);
+    method public void setTextSize(@FloatRange(from=0.0, fromInclusive=false) float);
+    method public void setValue(int);
+    method public void setWrapSelectorWheel(boolean);
+  }
+
+  public static interface NumberPicker.Formatter {
+    method public String format(int);
+  }
+
+  public static interface NumberPicker.OnScrollListener {
+    method public void onScrollStateChange(android.widget.NumberPicker, int);
+    field public static final int SCROLL_STATE_FLING = 2; // 0x2
+    field public static final int SCROLL_STATE_IDLE = 0; // 0x0
+    field public static final int SCROLL_STATE_TOUCH_SCROLL = 1; // 0x1
+  }
+
+  public static interface NumberPicker.OnValueChangeListener {
+    method public void onValueChange(android.widget.NumberPicker, int, int);
+  }
+
+  public class OverScroller {
+    ctor public OverScroller(android.content.Context);
+    ctor public OverScroller(android.content.Context, android.view.animation.Interpolator);
+    ctor @Deprecated public OverScroller(android.content.Context, android.view.animation.Interpolator, float, float);
+    ctor @Deprecated public OverScroller(android.content.Context, android.view.animation.Interpolator, float, float, boolean);
+    method public void abortAnimation();
+    method public boolean computeScrollOffset();
+    method public void fling(int, int, int, int, int, int, int, int);
+    method public void fling(int, int, int, int, int, int, int, int, int, int);
+    method public final void forceFinished(boolean);
+    method public float getCurrVelocity();
+    method public final int getCurrX();
+    method public final int getCurrY();
+    method public final int getFinalX();
+    method public final int getFinalY();
+    method public final int getStartX();
+    method public final int getStartY();
+    method public final boolean isFinished();
+    method public boolean isOverScrolled();
+    method public void notifyHorizontalEdgeReached(int, int, int);
+    method public void notifyVerticalEdgeReached(int, int, int);
+    method public final void setFriction(float);
+    method public boolean springBack(int, int, int, int, int, int);
+    method public void startScroll(int, int, int, int);
+    method public void startScroll(int, int, int, int, int);
+  }
+
+  public class PopupMenu {
+    ctor public PopupMenu(android.content.Context, android.view.View);
+    ctor public PopupMenu(android.content.Context, android.view.View, int);
+    ctor public PopupMenu(android.content.Context, android.view.View, int, int, int);
+    method public void dismiss();
+    method public android.view.View.OnTouchListener getDragToOpenListener();
+    method public int getGravity();
+    method public android.view.Menu getMenu();
+    method public android.view.MenuInflater getMenuInflater();
+    method public void inflate(@MenuRes int);
+    method public void setForceShowIcon(boolean);
+    method public void setGravity(int);
+    method public void setOnDismissListener(android.widget.PopupMenu.OnDismissListener);
+    method public void setOnMenuItemClickListener(android.widget.PopupMenu.OnMenuItemClickListener);
+    method public void show();
+  }
+
+  public static interface PopupMenu.OnDismissListener {
+    method public void onDismiss(android.widget.PopupMenu);
+  }
+
+  public static interface PopupMenu.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  public class PopupWindow {
+    ctor public PopupWindow(android.content.Context);
+    ctor public PopupWindow(android.content.Context, android.util.AttributeSet);
+    ctor public PopupWindow(android.content.Context, android.util.AttributeSet, int);
+    ctor public PopupWindow(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public PopupWindow();
+    ctor public PopupWindow(android.view.View);
+    ctor public PopupWindow(int, int);
+    ctor public PopupWindow(android.view.View, int, int);
+    ctor public PopupWindow(android.view.View, int, int, boolean);
+    method public void dismiss();
+    method public int getAnimationStyle();
+    method public android.graphics.drawable.Drawable getBackground();
+    method public android.view.View getContentView();
+    method public float getElevation();
+    method @Nullable public android.transition.Transition getEnterTransition();
+    method @Nullable public android.graphics.Rect getEpicenterBounds();
+    method @Nullable public android.transition.Transition getExitTransition();
+    method public int getHeight();
+    method public int getInputMethodMode();
+    method public int getMaxAvailableHeight(@NonNull android.view.View);
+    method public int getMaxAvailableHeight(@NonNull android.view.View, int);
+    method public int getMaxAvailableHeight(@NonNull android.view.View, int, boolean);
+    method public boolean getOverlapAnchor();
+    method public int getSoftInputMode();
+    method public int getWidth();
+    method public int getWindowLayoutType();
+    method public boolean isAboveAnchor();
+    method public boolean isAttachedInDecor();
+    method public boolean isClippedToScreen();
+    method public boolean isClippingEnabled();
+    method public boolean isFocusable();
+    method public boolean isLaidOutInScreen();
+    method public boolean isOutsideTouchable();
+    method public boolean isShowing();
+    method public boolean isSplitTouchEnabled();
+    method public boolean isTouchModal();
+    method public boolean isTouchable();
+    method public void setAnimationStyle(int);
+    method public void setAttachedInDecor(boolean);
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setClippingEnabled(boolean);
+    method public void setContentView(android.view.View);
+    method public void setElevation(float);
+    method public void setEnterTransition(@Nullable android.transition.Transition);
+    method public void setEpicenterBounds(@Nullable android.graphics.Rect);
+    method public void setExitTransition(@Nullable android.transition.Transition);
+    method public void setFocusable(boolean);
+    method public void setHeight(int);
+    method public void setIgnoreCheekPress();
+    method public void setInputMethodMode(int);
+    method public void setIsClippedToScreen(boolean);
+    method public void setIsLaidOutInScreen(boolean);
+    method public void setOnDismissListener(android.widget.PopupWindow.OnDismissListener);
+    method public void setOutsideTouchable(boolean);
+    method public void setOverlapAnchor(boolean);
+    method public void setSoftInputMode(int);
+    method public void setSplitTouchEnabled(boolean);
+    method public void setTouchInterceptor(android.view.View.OnTouchListener);
+    method public void setTouchModal(boolean);
+    method public void setTouchable(boolean);
+    method public void setWidth(int);
+    method @Deprecated public void setWindowLayoutMode(int, int);
+    method public void setWindowLayoutType(int);
+    method public void showAsDropDown(android.view.View);
+    method public void showAsDropDown(android.view.View, int, int);
+    method public void showAsDropDown(android.view.View, int, int, int);
+    method public void showAtLocation(android.view.View, int, int, int);
+    method public void update();
+    method public void update(int, int);
+    method public void update(int, int, int, int);
+    method public void update(int, int, int, int, boolean);
+    method public void update(android.view.View, int, int);
+    method public void update(android.view.View, int, int, int, int);
+    field public static final int INPUT_METHOD_FROM_FOCUSABLE = 0; // 0x0
+    field public static final int INPUT_METHOD_NEEDED = 1; // 0x1
+    field public static final int INPUT_METHOD_NOT_NEEDED = 2; // 0x2
+  }
+
+  public static interface PopupWindow.OnDismissListener {
+    method public void onDismiss();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ProgressBar extends android.view.View {
+    ctor public ProgressBar(android.content.Context);
+    ctor public ProgressBar(android.content.Context, android.util.AttributeSet);
+    ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int, int);
+    method @Nullable public android.graphics.drawable.Drawable getCurrentDrawable();
+    method public android.graphics.drawable.Drawable getIndeterminateDrawable();
+    method @Nullable public android.graphics.BlendMode getIndeterminateTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getIndeterminateTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getIndeterminateTintMode();
+    method public android.view.animation.Interpolator getInterpolator();
+    method public int getMax();
+    method @Px public int getMaxHeight();
+    method @Px public int getMaxWidth();
+    method public int getMin();
+    method @Px public int getMinHeight();
+    method @Px public int getMinWidth();
+    method public int getProgress();
+    method @Nullable public android.graphics.BlendMode getProgressBackgroundTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getProgressBackgroundTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getProgressBackgroundTintMode();
+    method public android.graphics.drawable.Drawable getProgressDrawable();
+    method @Nullable public android.graphics.BlendMode getProgressTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getProgressTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getProgressTintMode();
+    method public int getSecondaryProgress();
+    method @Nullable public android.graphics.BlendMode getSecondaryProgressTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getSecondaryProgressTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getSecondaryProgressTintMode();
+    method public final void incrementProgressBy(int);
+    method public final void incrementSecondaryProgressBy(int);
+    method public boolean isAnimating();
+    method public boolean isIndeterminate();
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method public void setIndeterminate(boolean);
+    method public void setIndeterminateDrawable(android.graphics.drawable.Drawable);
+    method public void setIndeterminateDrawableTiled(android.graphics.drawable.Drawable);
+    method public void setIndeterminateTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setIndeterminateTintList(@Nullable android.content.res.ColorStateList);
+    method public void setIndeterminateTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setInterpolator(android.content.Context, @InterpolatorRes int);
+    method public void setInterpolator(android.view.animation.Interpolator);
+    method public void setMax(int);
+    method public void setMaxHeight(@Px int);
+    method public void setMaxWidth(@Px int);
+    method public void setMin(int);
+    method public void setMinHeight(@Px int);
+    method public void setMinWidth(@Px int);
+    method public void setProgress(int);
+    method public void setProgress(int, boolean);
+    method public void setProgressBackgroundTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setProgressBackgroundTintList(@Nullable android.content.res.ColorStateList);
+    method public void setProgressBackgroundTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setProgressDrawable(android.graphics.drawable.Drawable);
+    method public void setProgressDrawableTiled(android.graphics.drawable.Drawable);
+    method public void setProgressTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setProgressTintList(@Nullable android.content.res.ColorStateList);
+    method public void setProgressTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setSecondaryProgress(int);
+    method public void setSecondaryProgressTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setSecondaryProgressTintList(@Nullable android.content.res.ColorStateList);
+    method public void setSecondaryProgressTintMode(@Nullable android.graphics.PorterDuff.Mode);
+  }
+
+  public class QuickContactBadge extends android.widget.ImageView implements android.view.View.OnClickListener {
+    ctor public QuickContactBadge(android.content.Context);
+    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet);
+    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int);
+    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int, int);
+    method public void assignContactFromEmail(String, boolean);
+    method public void assignContactFromEmail(String, boolean, android.os.Bundle);
+    method public void assignContactFromPhone(String, boolean);
+    method public void assignContactFromPhone(String, boolean, android.os.Bundle);
+    method public void assignContactUri(android.net.Uri);
+    method public void onClick(android.view.View);
+    method public void setExcludeMimes(String[]);
+    method public void setImageToDefault();
+    method public void setMode(int);
+    method public void setOverlay(android.graphics.drawable.Drawable);
+    method public void setPrioritizedMimeType(String);
+    field protected String[] mExcludeMimes;
+  }
+
+  @android.widget.RemoteViews.RemoteView public class RadioButton extends android.widget.CompoundButton {
+    ctor public RadioButton(android.content.Context);
+    ctor public RadioButton(android.content.Context, android.util.AttributeSet);
+    ctor public RadioButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public RadioButton(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class RadioGroup extends android.widget.LinearLayout {
+    ctor public RadioGroup(android.content.Context);
+    ctor public RadioGroup(android.content.Context, android.util.AttributeSet);
+    method public void check(@IdRes int);
+    method public void clearCheck();
+    method public android.widget.RadioGroup.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method @IdRes public int getCheckedRadioButtonId();
+    method public void setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener);
+  }
+
+  public static class RadioGroup.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public RadioGroup.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public RadioGroup.LayoutParams(int, int);
+    ctor public RadioGroup.LayoutParams(int, int, float);
+    ctor public RadioGroup.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public RadioGroup.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+  }
+
+  public static interface RadioGroup.OnCheckedChangeListener {
+    method public void onCheckedChanged(android.widget.RadioGroup, @IdRes int);
+  }
+
+  public class RatingBar extends android.widget.AbsSeekBar {
+    ctor public RatingBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public RatingBar(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public RatingBar(android.content.Context, android.util.AttributeSet);
+    ctor public RatingBar(android.content.Context);
+    method public int getNumStars();
+    method public android.widget.RatingBar.OnRatingBarChangeListener getOnRatingBarChangeListener();
+    method public float getRating();
+    method public float getStepSize();
+    method public boolean isIndicator();
+    method public void setIsIndicator(boolean);
+    method public void setNumStars(int);
+    method public void setOnRatingBarChangeListener(android.widget.RatingBar.OnRatingBarChangeListener);
+    method public void setRating(float);
+    method public void setStepSize(float);
+  }
+
+  public static interface RatingBar.OnRatingBarChangeListener {
+    method public void onRatingChanged(android.widget.RatingBar, float, boolean);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class RelativeLayout extends android.view.ViewGroup {
+    ctor public RelativeLayout(android.content.Context);
+    ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
+    ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.widget.RelativeLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method public int getGravity();
+    method public int getIgnoreGravity();
+    method public void setGravity(int);
+    method public void setHorizontalGravity(int);
+    method public void setIgnoreGravity(int);
+    method public void setVerticalGravity(int);
+    field public static final int ABOVE = 2; // 0x2
+    field public static final int ALIGN_BASELINE = 4; // 0x4
+    field public static final int ALIGN_BOTTOM = 8; // 0x8
+    field public static final int ALIGN_END = 19; // 0x13
+    field public static final int ALIGN_LEFT = 5; // 0x5
+    field public static final int ALIGN_PARENT_BOTTOM = 12; // 0xc
+    field public static final int ALIGN_PARENT_END = 21; // 0x15
+    field public static final int ALIGN_PARENT_LEFT = 9; // 0x9
+    field public static final int ALIGN_PARENT_RIGHT = 11; // 0xb
+    field public static final int ALIGN_PARENT_START = 20; // 0x14
+    field public static final int ALIGN_PARENT_TOP = 10; // 0xa
+    field public static final int ALIGN_RIGHT = 7; // 0x7
+    field public static final int ALIGN_START = 18; // 0x12
+    field public static final int ALIGN_TOP = 6; // 0x6
+    field public static final int BELOW = 3; // 0x3
+    field public static final int CENTER_HORIZONTAL = 14; // 0xe
+    field public static final int CENTER_IN_PARENT = 13; // 0xd
+    field public static final int CENTER_VERTICAL = 15; // 0xf
+    field public static final int END_OF = 17; // 0x11
+    field public static final int LEFT_OF = 0; // 0x0
+    field public static final int RIGHT_OF = 1; // 0x1
+    field public static final int START_OF = 16; // 0x10
+    field public static final int TRUE = -1; // 0xffffffff
+  }
+
+  public static class RelativeLayout.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public RelativeLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public RelativeLayout.LayoutParams(int, int);
+    ctor public RelativeLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public RelativeLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public RelativeLayout.LayoutParams(android.widget.RelativeLayout.LayoutParams);
+    method public void addRule(int);
+    method public void addRule(int, int);
+    method public String debug(String);
+    method public int getRule(int);
+    method public int[] getRules();
+    method public void removeRule(int);
+    field public boolean alignWithParent;
+  }
+
+  public class RemoteViews implements android.view.LayoutInflater.Filter android.os.Parcelable {
+    ctor public RemoteViews(String, int);
+    ctor public RemoteViews(@NonNull String, @LayoutRes int, @IdRes int);
+    ctor public RemoteViews(android.widget.RemoteViews, android.widget.RemoteViews);
+    ctor public RemoteViews(@NonNull java.util.Map<android.util.SizeF,android.widget.RemoteViews>);
+    ctor public RemoteViews(android.widget.RemoteViews);
+    ctor public RemoteViews(android.os.Parcel);
+    method public void addStableView(@IdRes int, @NonNull android.widget.RemoteViews, int);
+    method public void addView(@IdRes int, android.widget.RemoteViews);
+    method public android.view.View apply(android.content.Context, android.view.ViewGroup);
+    method @Deprecated public android.widget.RemoteViews clone();
+    method public int describeContents();
+    method public int getLayoutId();
+    method public String getPackage();
+    method @IdRes public int getViewId();
+    method @Deprecated public boolean onLoadClass(Class);
+    method public void reapply(android.content.Context, android.view.View);
+    method public void removeAllViews(@IdRes int);
+    method public void setAccessibilityTraversalAfter(@IdRes int, @IdRes int);
+    method public void setAccessibilityTraversalBefore(@IdRes int, @IdRes int);
+    method public void setBitmap(@IdRes int, String, android.graphics.Bitmap);
+    method public void setBlendMode(@IdRes int, @NonNull String, @Nullable android.graphics.BlendMode);
+    method public void setBoolean(@IdRes int, String, boolean);
+    method public void setBundle(@IdRes int, String, android.os.Bundle);
+    method public void setByte(@IdRes int, String, byte);
+    method public void setChar(@IdRes int, String, char);
+    method public void setCharSequence(@IdRes int, String, CharSequence);
+    method public void setCharSequence(@IdRes int, @NonNull String, @StringRes int);
+    method public void setCharSequenceAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setChronometer(@IdRes int, long, String, boolean);
+    method public void setChronometerCountDown(@IdRes int, boolean);
+    method public void setColor(@IdRes int, @NonNull String, @ColorRes int);
+    method public void setColorAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setColorInt(@IdRes int, @NonNull String, @ColorInt int, @ColorInt int);
+    method public void setColorStateList(@IdRes int, @NonNull String, @Nullable android.content.res.ColorStateList);
+    method public void setColorStateList(@IdRes int, @NonNull String, @Nullable android.content.res.ColorStateList, @Nullable android.content.res.ColorStateList);
+    method public void setColorStateList(@IdRes int, @NonNull String, @ColorRes int);
+    method public void setColorStateListAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setCompoundButtonChecked(@IdRes int, boolean);
+    method public void setContentDescription(@IdRes int, CharSequence);
+    method public void setDisplayedChild(@IdRes int, int);
+    method public void setDouble(@IdRes int, String, double);
+    method public void setEmptyView(@IdRes int, @IdRes int);
+    method public void setFloat(@IdRes int, String, float);
+    method public void setFloatDimen(@IdRes int, @NonNull String, @DimenRes int);
+    method public void setFloatDimen(@IdRes int, @NonNull String, float, int);
+    method public void setFloatDimenAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setIcon(@IdRes int, String, android.graphics.drawable.Icon);
+    method public void setIcon(@IdRes int, @NonNull String, @Nullable android.graphics.drawable.Icon, @Nullable android.graphics.drawable.Icon);
+    method public void setImageViewBitmap(@IdRes int, android.graphics.Bitmap);
+    method public void setImageViewIcon(@IdRes int, android.graphics.drawable.Icon);
+    method public void setImageViewResource(@IdRes int, @DrawableRes int);
+    method public void setImageViewUri(@IdRes int, android.net.Uri);
+    method public void setInt(@IdRes int, String, int);
+    method public void setIntDimen(@IdRes int, @NonNull String, @DimenRes int);
+    method public void setIntDimen(@IdRes int, @NonNull String, float, int);
+    method public void setIntDimenAttr(@IdRes int, @NonNull String, @AttrRes int);
+    method public void setIntent(@IdRes int, String, android.content.Intent);
+    method public void setLabelFor(@IdRes int, @IdRes int);
+    method public void setLightBackgroundLayoutId(@LayoutRes int);
+    method public void setLong(@IdRes int, String, long);
+    method public void setOnCheckedChangeResponse(@IdRes int, @NonNull android.widget.RemoteViews.RemoteResponse);
+    method public void setOnClickFillInIntent(@IdRes int, android.content.Intent);
+    method public void setOnClickPendingIntent(@IdRes int, android.app.PendingIntent);
+    method public void setOnClickResponse(@IdRes int, @NonNull android.widget.RemoteViews.RemoteResponse);
+    method public void setPendingIntentTemplate(@IdRes int, android.app.PendingIntent);
+    method public void setProgressBar(@IdRes int, int, int, boolean);
+    method public void setRadioGroupChecked(@IdRes int, @IdRes int);
+    method public void setRelativeScrollPosition(@IdRes int, int);
+    method @Deprecated public void setRemoteAdapter(int, @IdRes int, android.content.Intent);
+    method public void setRemoteAdapter(@IdRes int, android.content.Intent);
+    method public void setRemoteAdapter(@IdRes int, @NonNull android.widget.RemoteViews.RemoteCollectionItems);
+    method public void setScrollPosition(@IdRes int, int);
+    method public void setShort(@IdRes int, String, short);
+    method public void setString(@IdRes int, String, String);
+    method public void setTextColor(@IdRes int, @ColorInt int);
+    method public void setTextViewCompoundDrawables(@IdRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setTextViewCompoundDrawablesRelative(@IdRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setTextViewText(@IdRes int, CharSequence);
+    method public void setTextViewTextSize(@IdRes int, int, float);
+    method public void setUri(@IdRes int, String, android.net.Uri);
+    method public void setViewLayoutHeight(@IdRes int, float, int);
+    method public void setViewLayoutHeightAttr(@IdRes int, @AttrRes int);
+    method public void setViewLayoutHeightDimen(@IdRes int, @DimenRes int);
+    method public void setViewLayoutMargin(@IdRes int, int, float, int);
+    method public void setViewLayoutMarginAttr(@IdRes int, int, @AttrRes int);
+    method public void setViewLayoutMarginDimen(@IdRes int, int, @DimenRes int);
+    method public void setViewLayoutWidth(@IdRes int, float, int);
+    method public void setViewLayoutWidthAttr(@IdRes int, @AttrRes int);
+    method public void setViewLayoutWidthDimen(@IdRes int, @DimenRes int);
+    method public void setViewOutlinePreferredRadius(@IdRes int, float, int);
+    method public void setViewOutlinePreferredRadiusAttr(@IdRes int, @AttrRes int);
+    method public void setViewOutlinePreferredRadiusDimen(@IdRes int, @DimenRes int);
+    method public void setViewPadding(@IdRes int, @Px int, @Px int, @Px int, @Px int);
+    method public void setViewVisibility(@IdRes int, int);
+    method public void showNext(@IdRes int);
+    method public void showPrevious(@IdRes int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.RemoteViews> CREATOR;
+    field public static final String EXTRA_CHECKED = "android.widget.extra.CHECKED";
+    field public static final String EXTRA_SHARED_ELEMENT_BOUNDS = "android.widget.extra.SHARED_ELEMENT_BOUNDS";
+    field public static final int MARGIN_BOTTOM = 3; // 0x3
+    field public static final int MARGIN_END = 5; // 0x5
+    field public static final int MARGIN_LEFT = 0; // 0x0
+    field public static final int MARGIN_RIGHT = 2; // 0x2
+    field public static final int MARGIN_START = 4; // 0x4
+    field public static final int MARGIN_TOP = 1; // 0x1
+  }
+
+  public static class RemoteViews.ActionException extends java.lang.RuntimeException {
+    ctor public RemoteViews.ActionException(Exception);
+    ctor public RemoteViews.ActionException(String);
+  }
+
+  public static final class RemoteViews.RemoteCollectionItems implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getItemCount();
+    method public long getItemId(int);
+    method @NonNull public android.widget.RemoteViews getItemView(int);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.RemoteViews.RemoteCollectionItems> CREATOR;
+  }
+
+  public static final class RemoteViews.RemoteCollectionItems.Builder {
+    ctor public RemoteViews.RemoteCollectionItems.Builder();
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems.Builder addItem(long, @NonNull android.widget.RemoteViews);
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems build();
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems.Builder setHasStableIds(boolean);
+    method @NonNull public android.widget.RemoteViews.RemoteCollectionItems.Builder setViewTypeCount(int);
+  }
+
+  public static class RemoteViews.RemoteResponse {
+    ctor public RemoteViews.RemoteResponse();
+    method @NonNull public android.widget.RemoteViews.RemoteResponse addSharedElement(@IdRes int, @NonNull String);
+    method @NonNull public static android.widget.RemoteViews.RemoteResponse fromFillInIntent(@NonNull android.content.Intent);
+    method @NonNull public static android.widget.RemoteViews.RemoteResponse fromPendingIntent(@NonNull android.app.PendingIntent);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface RemoteViews.RemoteView {
+  }
+
+  public static final class RemoteViews.RemoteViewOutlineProvider extends android.view.ViewOutlineProvider {
+    ctor public RemoteViews.RemoteViewOutlineProvider(float);
+    method public void getOutline(@NonNull android.view.View, @NonNull android.graphics.Outline);
+    method public float getRadius();
+  }
+
+  public abstract class RemoteViewsService extends android.app.Service {
+    ctor public RemoteViewsService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.widget.RemoteViewsService.RemoteViewsFactory onGetViewFactory(android.content.Intent);
+  }
+
+  public static interface RemoteViewsService.RemoteViewsFactory {
+    method public int getCount();
+    method public long getItemId(int);
+    method public android.widget.RemoteViews getLoadingView();
+    method public android.widget.RemoteViews getViewAt(int);
+    method public int getViewTypeCount();
+    method public boolean hasStableIds();
+    method public void onCreate();
+    method public void onDataSetChanged();
+    method public void onDestroy();
+  }
+
+  public abstract class ResourceCursorAdapter extends android.widget.CursorAdapter {
+    ctor @Deprecated public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor);
+    ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, boolean);
+    ctor public ResourceCursorAdapter(android.content.Context, int, android.database.Cursor, int);
+    method public android.view.View newView(android.content.Context, android.database.Cursor, android.view.ViewGroup);
+    method public void setDropDownViewResource(int);
+    method public void setViewResource(int);
+  }
+
+  public abstract class ResourceCursorTreeAdapter extends android.widget.CursorTreeAdapter {
+    ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, int, int);
+    ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, int);
+    ctor public ResourceCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int);
+    method public android.view.View newChildView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+    method public android.view.View newGroupView(android.content.Context, android.database.Cursor, boolean, android.view.ViewGroup);
+  }
+
+  public class ScrollView extends android.widget.FrameLayout {
+    ctor public ScrollView(android.content.Context);
+    ctor public ScrollView(android.content.Context, android.util.AttributeSet);
+    ctor public ScrollView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ScrollView(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean arrowScroll(int);
+    method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
+    method public boolean executeKeyEvent(android.view.KeyEvent);
+    method public void fling(int);
+    method public boolean fullScroll(int);
+    method @ColorInt public int getBottomEdgeEffectColor();
+    method public int getMaxScrollAmount();
+    method @ColorInt public int getTopEdgeEffectColor();
+    method public boolean isFillViewport();
+    method public boolean isSmoothScrollingEnabled();
+    method public boolean pageScroll(int);
+    method public void scrollToDescendant(@NonNull android.view.View);
+    method public void setBottomEdgeEffectColor(@ColorInt int);
+    method public void setEdgeEffectColor(@ColorInt int);
+    method public void setFillViewport(boolean);
+    method public void setSmoothScrollingEnabled(boolean);
+    method public void setTopEdgeEffectColor(@ColorInt int);
+    method public final void smoothScrollBy(int, int);
+    method public final void smoothScrollTo(int, int);
+  }
+
+  public class Scroller {
+    ctor public Scroller(android.content.Context);
+    ctor public Scroller(android.content.Context, android.view.animation.Interpolator);
+    ctor public Scroller(android.content.Context, android.view.animation.Interpolator, boolean);
+    method public void abortAnimation();
+    method public boolean computeScrollOffset();
+    method public void extendDuration(int);
+    method public void fling(int, int, int, int, int, int, int, int);
+    method public final void forceFinished(boolean);
+    method public float getCurrVelocity();
+    method public final int getCurrX();
+    method public final int getCurrY();
+    method public final int getDuration();
+    method public final int getFinalX();
+    method public final int getFinalY();
+    method public final int getStartX();
+    method public final int getStartY();
+    method public final boolean isFinished();
+    method public void setFinalX(int);
+    method public void setFinalY(int);
+    method public final void setFriction(float);
+    method public void startScroll(int, int, int, int);
+    method public void startScroll(int, int, int, int, int);
+    method public int timePassed();
+  }
+
+  public class SearchView extends android.widget.LinearLayout implements android.view.CollapsibleActionView {
+    ctor public SearchView(android.content.Context);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet, int, int);
+    method public int getImeOptions();
+    method public int getInputType();
+    method public int getMaxWidth();
+    method public CharSequence getQuery();
+    method @Nullable public CharSequence getQueryHint();
+    method public android.widget.CursorAdapter getSuggestionsAdapter();
+    method @Deprecated public boolean isIconfiedByDefault();
+    method public boolean isIconified();
+    method public boolean isIconifiedByDefault();
+    method public boolean isQueryRefinementEnabled();
+    method public boolean isSubmitButtonEnabled();
+    method public void onActionViewCollapsed();
+    method public void onActionViewExpanded();
+    method public void setIconified(boolean);
+    method public void setIconifiedByDefault(boolean);
+    method public void setImeOptions(int);
+    method public void setInputType(int);
+    method public void setMaxWidth(int);
+    method public void setOnCloseListener(android.widget.SearchView.OnCloseListener);
+    method public void setOnQueryTextFocusChangeListener(android.view.View.OnFocusChangeListener);
+    method public void setOnQueryTextListener(android.widget.SearchView.OnQueryTextListener);
+    method public void setOnSearchClickListener(android.view.View.OnClickListener);
+    method public void setOnSuggestionListener(android.widget.SearchView.OnSuggestionListener);
+    method public void setQuery(CharSequence, boolean);
+    method public void setQueryHint(@Nullable CharSequence);
+    method public void setQueryRefinementEnabled(boolean);
+    method public void setSearchableInfo(android.app.SearchableInfo);
+    method public void setSubmitButtonEnabled(boolean);
+    method public void setSuggestionsAdapter(android.widget.CursorAdapter);
+  }
+
+  public static interface SearchView.OnCloseListener {
+    method public boolean onClose();
+  }
+
+  public static interface SearchView.OnQueryTextListener {
+    method public boolean onQueryTextChange(String);
+    method public boolean onQueryTextSubmit(String);
+  }
+
+  public static interface SearchView.OnSuggestionListener {
+    method public boolean onSuggestionClick(int);
+    method public boolean onSuggestionSelect(int);
+  }
+
+  public interface SectionIndexer {
+    method public int getPositionForSection(int);
+    method public int getSectionForPosition(int);
+    method public Object[] getSections();
+  }
+
+  public class SeekBar extends android.widget.AbsSeekBar {
+    ctor public SeekBar(android.content.Context);
+    ctor public SeekBar(android.content.Context, android.util.AttributeSet);
+    ctor public SeekBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public SeekBar(android.content.Context, android.util.AttributeSet, int, int);
+    method public void setOnSeekBarChangeListener(android.widget.SeekBar.OnSeekBarChangeListener);
+  }
+
+  public static interface SeekBar.OnSeekBarChangeListener {
+    method public void onProgressChanged(android.widget.SeekBar, int, boolean);
+    method public void onStartTrackingTouch(android.widget.SeekBar);
+    method public void onStopTrackingTouch(android.widget.SeekBar);
+  }
+
+  public class ShareActionProvider extends android.view.ActionProvider {
+    ctor public ShareActionProvider(android.content.Context);
+    method public android.view.View onCreateActionView();
+    method public void setOnShareTargetSelectedListener(android.widget.ShareActionProvider.OnShareTargetSelectedListener);
+    method public void setShareHistoryFileName(String);
+    method public void setShareIntent(android.content.Intent);
+    field public static final String DEFAULT_SHARE_HISTORY_FILE_NAME = "share_history.xml";
+  }
+
+  public static interface ShareActionProvider.OnShareTargetSelectedListener {
+    method public boolean onShareTargetSelected(android.widget.ShareActionProvider, android.content.Intent);
+  }
+
+  public class SimpleAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+    ctor public SimpleAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, @LayoutRes int, String[], @IdRes int[]);
+    method public int getCount();
+    method public android.content.res.Resources.Theme getDropDownViewTheme();
+    method public android.widget.Filter getFilter();
+    method public Object getItem(int);
+    method public long getItemId(int);
+    method public android.view.View getView(int, android.view.View, android.view.ViewGroup);
+    method public android.widget.SimpleAdapter.ViewBinder getViewBinder();
+    method public void setDropDownViewResource(int);
+    method public void setDropDownViewTheme(android.content.res.Resources.Theme);
+    method public void setViewBinder(android.widget.SimpleAdapter.ViewBinder);
+    method public void setViewImage(android.widget.ImageView, int);
+    method public void setViewImage(android.widget.ImageView, String);
+    method public void setViewText(android.widget.TextView, String);
+  }
+
+  public static interface SimpleAdapter.ViewBinder {
+    method public boolean setViewValue(android.view.View, Object, String);
+  }
+
+  public class SimpleCursorAdapter extends android.widget.ResourceCursorAdapter {
+    ctor @Deprecated public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[]);
+    ctor public SimpleCursorAdapter(android.content.Context, int, android.database.Cursor, String[], int[], int);
+    method public void bindView(android.view.View, android.content.Context, android.database.Cursor);
+    method public void changeCursorAndColumns(android.database.Cursor, String[], int[]);
+    method public android.widget.SimpleCursorAdapter.CursorToStringConverter getCursorToStringConverter();
+    method public int getStringConversionColumn();
+    method public android.widget.SimpleCursorAdapter.ViewBinder getViewBinder();
+    method public void setCursorToStringConverter(android.widget.SimpleCursorAdapter.CursorToStringConverter);
+    method public void setStringConversionColumn(int);
+    method public void setViewBinder(android.widget.SimpleCursorAdapter.ViewBinder);
+    method public void setViewImage(android.widget.ImageView, String);
+    method public void setViewText(android.widget.TextView, String);
+  }
+
+  public static interface SimpleCursorAdapter.CursorToStringConverter {
+    method public CharSequence convertToString(android.database.Cursor);
+  }
+
+  public static interface SimpleCursorAdapter.ViewBinder {
+    method public boolean setViewValue(android.view.View, android.database.Cursor, int);
+  }
+
+  public abstract class SimpleCursorTreeAdapter extends android.widget.ResourceCursorTreeAdapter {
+    ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, String[], int[], int, int, String[], int[]);
+    ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, int, String[], int[], int, String[], int[]);
+    ctor public SimpleCursorTreeAdapter(android.content.Context, android.database.Cursor, int, String[], int[], int, String[], int[]);
+    method protected void bindChildView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method protected void bindGroupView(android.view.View, android.content.Context, android.database.Cursor, boolean);
+    method public android.widget.SimpleCursorTreeAdapter.ViewBinder getViewBinder();
+    method public void setViewBinder(android.widget.SimpleCursorTreeAdapter.ViewBinder);
+    method protected void setViewImage(android.widget.ImageView, String);
+    method public void setViewText(android.widget.TextView, String);
+  }
+
+  public static interface SimpleCursorTreeAdapter.ViewBinder {
+    method public boolean setViewValue(android.view.View, android.database.Cursor, int);
+  }
+
+  public class SimpleExpandableListAdapter extends android.widget.BaseExpandableListAdapter {
+    ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, int, String[], int[], java.util.List<? extends java.util.List<? extends java.util.Map<java.lang.String,?>>>, int, String[], int[]);
+    ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, int, int, String[], int[], java.util.List<? extends java.util.List<? extends java.util.Map<java.lang.String,?>>>, int, String[], int[]);
+    ctor public SimpleExpandableListAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, int, int, String[], int[], java.util.List<? extends java.util.List<? extends java.util.Map<java.lang.String,?>>>, int, int, String[], int[]);
+    method public Object getChild(int, int);
+    method public long getChildId(int, int);
+    method public android.view.View getChildView(int, int, boolean, android.view.View, android.view.ViewGroup);
+    method public int getChildrenCount(int);
+    method public Object getGroup(int);
+    method public int getGroupCount();
+    method public long getGroupId(int);
+    method public android.view.View getGroupView(int, boolean, android.view.View, android.view.ViewGroup);
+    method public boolean hasStableIds();
+    method public boolean isChildSelectable(int, int);
+    method public android.view.View newChildView(boolean, android.view.ViewGroup);
+    method public android.view.View newGroupView(boolean, android.view.ViewGroup);
+  }
+
+  @Deprecated public class SlidingDrawer extends android.view.ViewGroup {
+    ctor @Deprecated public SlidingDrawer(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public SlidingDrawer(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public SlidingDrawer(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void animateClose();
+    method @Deprecated public void animateOpen();
+    method @Deprecated public void animateToggle();
+    method @Deprecated public void close();
+    method @Deprecated public android.view.View getContent();
+    method @Deprecated public android.view.View getHandle();
+    method @Deprecated public boolean isMoving();
+    method @Deprecated public boolean isOpened();
+    method @Deprecated public void lock();
+    method @Deprecated public void open();
+    method @Deprecated public void setOnDrawerCloseListener(android.widget.SlidingDrawer.OnDrawerCloseListener);
+    method @Deprecated public void setOnDrawerOpenListener(android.widget.SlidingDrawer.OnDrawerOpenListener);
+    method @Deprecated public void setOnDrawerScrollListener(android.widget.SlidingDrawer.OnDrawerScrollListener);
+    method @Deprecated public void toggle();
+    method @Deprecated public void unlock();
+    field @Deprecated public static final int ORIENTATION_HORIZONTAL = 0; // 0x0
+    field @Deprecated public static final int ORIENTATION_VERTICAL = 1; // 0x1
+  }
+
+  @Deprecated public static interface SlidingDrawer.OnDrawerCloseListener {
+    method @Deprecated public void onDrawerClosed();
+  }
+
+  @Deprecated public static interface SlidingDrawer.OnDrawerOpenListener {
+    method @Deprecated public void onDrawerOpened();
+  }
+
+  @Deprecated public static interface SlidingDrawer.OnDrawerScrollListener {
+    method @Deprecated public void onScrollEnded();
+    method @Deprecated public void onScrollStarted();
+  }
+
+  public final class Space extends android.view.View {
+    ctor public Space(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public Space(android.content.Context, android.util.AttributeSet, int);
+    ctor public Space(android.content.Context, android.util.AttributeSet);
+    ctor public Space(android.content.Context);
+  }
+
+  public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener {
+    ctor public Spinner(android.content.Context);
+    ctor public Spinner(android.content.Context, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int, int, android.content.res.Resources.Theme);
+    method public int getDropDownHorizontalOffset();
+    method public int getDropDownVerticalOffset();
+    method public int getDropDownWidth();
+    method public int getGravity();
+    method public android.graphics.drawable.Drawable getPopupBackground();
+    method public android.content.Context getPopupContext();
+    method public CharSequence getPrompt();
+    method public void onClick(android.content.DialogInterface, int);
+    method public void setDropDownHorizontalOffset(int);
+    method public void setDropDownVerticalOffset(int);
+    method public void setDropDownWidth(int);
+    method public void setGravity(int);
+    method public void setPopupBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setPopupBackgroundResource(@DrawableRes int);
+    method public void setPrompt(CharSequence);
+    method public void setPromptId(int);
+    field public static final int MODE_DIALOG = 0; // 0x0
+    field public static final int MODE_DROPDOWN = 1; // 0x1
+  }
+
+  public interface SpinnerAdapter extends android.widget.Adapter {
+    method public android.view.View getDropDownView(int, android.view.View, android.view.ViewGroup);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class StackView extends android.widget.AdapterViewAnimator {
+    ctor public StackView(android.content.Context);
+    ctor public StackView(android.content.Context, android.util.AttributeSet);
+    ctor public StackView(android.content.Context, android.util.AttributeSet, int);
+    ctor public StackView(android.content.Context, android.util.AttributeSet, int, int);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class Switch extends android.widget.CompoundButton {
+    ctor public Switch(android.content.Context);
+    ctor public Switch(android.content.Context, android.util.AttributeSet);
+    ctor public Switch(android.content.Context, android.util.AttributeSet, int);
+    ctor public Switch(android.content.Context, android.util.AttributeSet, int, int);
+    method public boolean getShowText();
+    method public boolean getSplitTrack();
+    method public int getSwitchMinWidth();
+    method public int getSwitchPadding();
+    method public CharSequence getTextOff();
+    method public CharSequence getTextOn();
+    method public android.graphics.drawable.Drawable getThumbDrawable();
+    method public int getThumbTextPadding();
+    method @Nullable public android.graphics.BlendMode getThumbTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getThumbTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getThumbTintMode();
+    method public android.graphics.drawable.Drawable getTrackDrawable();
+    method @Nullable public android.graphics.BlendMode getTrackTintBlendMode();
+    method @Nullable public android.content.res.ColorStateList getTrackTintList();
+    method @Nullable public android.graphics.PorterDuff.Mode getTrackTintMode();
+    method public void onMeasure(int, int);
+    method public void setShowText(boolean);
+    method public void setSplitTrack(boolean);
+    method public void setSwitchMinWidth(int);
+    method public void setSwitchPadding(int);
+    method public void setSwitchTextAppearance(android.content.Context, @StyleRes int);
+    method public void setSwitchTypeface(android.graphics.Typeface, int);
+    method public void setSwitchTypeface(android.graphics.Typeface);
+    method public void setTextOff(CharSequence);
+    method public void setTextOn(CharSequence);
+    method public void setThumbDrawable(android.graphics.drawable.Drawable);
+    method public void setThumbIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setThumbResource(@DrawableRes int);
+    method public void setThumbTextPadding(int);
+    method public void setThumbTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setThumbTintList(@Nullable android.content.res.ColorStateList);
+    method public void setThumbTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setTrackDrawable(android.graphics.drawable.Drawable);
+    method public void setTrackIcon(@Nullable android.graphics.drawable.Icon);
+    method public void setTrackResource(@DrawableRes int);
+    method public void setTrackTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setTrackTintList(@Nullable android.content.res.ColorStateList);
+    method public void setTrackTintMode(@Nullable android.graphics.PorterDuff.Mode);
+  }
+
+  @Deprecated public class TabHost extends android.widget.FrameLayout implements android.view.ViewTreeObserver.OnTouchModeChangeListener {
+    ctor @Deprecated public TabHost(android.content.Context);
+    ctor @Deprecated public TabHost(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TabHost(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TabHost(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void addTab(android.widget.TabHost.TabSpec);
+    method @Deprecated public void clearAllTabs();
+    method @Deprecated @Nullable public int getCurrentTab();
+    method @Deprecated @Nullable public String getCurrentTabTag();
+    method @Deprecated @Nullable public android.view.View getCurrentTabView();
+    method @Deprecated public android.view.View getCurrentView();
+    method @Deprecated public android.widget.FrameLayout getTabContentView();
+    method @Deprecated public android.widget.TabWidget getTabWidget();
+    method @Deprecated @NonNull public android.widget.TabHost.TabSpec newTabSpec(@NonNull String);
+    method @Deprecated public void onTouchModeChanged(boolean);
+    method @Deprecated public void setCurrentTab(int);
+    method @Deprecated public void setCurrentTabByTag(String);
+    method @Deprecated public void setOnTabChangedListener(android.widget.TabHost.OnTabChangeListener);
+    method @Deprecated public void setup();
+    method @Deprecated public void setup(android.app.LocalActivityManager);
+  }
+
+  @Deprecated public static interface TabHost.OnTabChangeListener {
+    method @Deprecated public void onTabChanged(String);
+  }
+
+  @Deprecated public static interface TabHost.TabContentFactory {
+    method @Deprecated public android.view.View createTabContent(String);
+  }
+
+  @Deprecated public class TabHost.TabSpec {
+    method @Deprecated @NonNull public String getTag();
+    method @Deprecated public android.widget.TabHost.TabSpec setContent(int);
+    method @Deprecated public android.widget.TabHost.TabSpec setContent(android.widget.TabHost.TabContentFactory);
+    method @Deprecated public android.widget.TabHost.TabSpec setContent(android.content.Intent);
+    method @Deprecated public android.widget.TabHost.TabSpec setIndicator(CharSequence);
+    method @Deprecated public android.widget.TabHost.TabSpec setIndicator(CharSequence, android.graphics.drawable.Drawable);
+    method @Deprecated public android.widget.TabHost.TabSpec setIndicator(android.view.View);
+  }
+
+  @Deprecated public class TabWidget extends android.widget.LinearLayout implements android.view.View.OnFocusChangeListener {
+    ctor @Deprecated public TabWidget(android.content.Context);
+    ctor @Deprecated public TabWidget(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TabWidget(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TabWidget(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public void dispatchDraw(android.graphics.Canvas);
+    method @Deprecated public void focusCurrentTab(int);
+    method @Deprecated public android.view.View getChildTabViewAt(int);
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getLeftStripDrawable();
+    method @Deprecated @Nullable public android.graphics.drawable.Drawable getRightStripDrawable();
+    method @Deprecated public int getTabCount();
+    method @Deprecated public boolean isStripEnabled();
+    method @Deprecated public void onFocusChange(android.view.View, boolean);
+    method @Deprecated public void setCurrentTab(int);
+    method @Deprecated public void setDividerDrawable(@DrawableRes int);
+    method @Deprecated public void setLeftStripDrawable(@Nullable android.graphics.drawable.Drawable);
+    method @Deprecated public void setLeftStripDrawable(@DrawableRes int);
+    method @Deprecated public void setRightStripDrawable(@Nullable android.graphics.drawable.Drawable);
+    method @Deprecated public void setRightStripDrawable(@DrawableRes int);
+    method @Deprecated public void setStripEnabled(boolean);
+  }
+
+  public class TableLayout extends android.widget.LinearLayout {
+    ctor public TableLayout(android.content.Context);
+    ctor public TableLayout(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableLayout.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method public boolean isColumnCollapsed(int);
+    method public boolean isColumnShrinkable(int);
+    method public boolean isColumnStretchable(int);
+    method public boolean isShrinkAllColumns();
+    method public boolean isStretchAllColumns();
+    method public void setColumnCollapsed(int, boolean);
+    method public void setColumnShrinkable(int, boolean);
+    method public void setColumnStretchable(int, boolean);
+    method public void setShrinkAllColumns(boolean);
+    method public void setStretchAllColumns(boolean);
+  }
+
+  public static class TableLayout.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public TableLayout.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public TableLayout.LayoutParams(int, int);
+    ctor public TableLayout.LayoutParams(int, int, float);
+    ctor public TableLayout.LayoutParams();
+    ctor public TableLayout.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public TableLayout.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+  }
+
+  public class TableRow extends android.widget.LinearLayout {
+    ctor public TableRow(android.content.Context);
+    ctor public TableRow(android.content.Context, android.util.AttributeSet);
+    method public android.widget.TableRow.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method public android.view.View getVirtualChildAt(int);
+    method public int getVirtualChildCount();
+  }
+
+  public static class TableRow.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public TableRow.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public TableRow.LayoutParams(int, int);
+    ctor public TableRow.LayoutParams(int, int, float);
+    ctor public TableRow.LayoutParams();
+    ctor public TableRow.LayoutParams(int);
+    ctor public TableRow.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public TableRow.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    field public int column;
+    field public int span;
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextClock extends android.widget.TextView {
+    ctor public TextClock(android.content.Context);
+    ctor public TextClock(android.content.Context, android.util.AttributeSet);
+    ctor public TextClock(android.content.Context, android.util.AttributeSet, int);
+    ctor public TextClock(android.content.Context, android.util.AttributeSet, int, int);
+    method public CharSequence getFormat12Hour();
+    method public CharSequence getFormat24Hour();
+    method public String getTimeZone();
+    method public boolean is24HourModeEnabled();
+    method public void refreshTime();
+    method public void setFormat12Hour(CharSequence);
+    method public void setFormat24Hour(CharSequence);
+    method public void setTimeZone(String);
+    field @Deprecated public static final CharSequence DEFAULT_FORMAT_12_HOUR;
+    field @Deprecated public static final CharSequence DEFAULT_FORMAT_24_HOUR;
+  }
+
+  public class TextSwitcher extends android.widget.ViewSwitcher {
+    ctor public TextSwitcher(android.content.Context);
+    ctor public TextSwitcher(android.content.Context, android.util.AttributeSet);
+    method public void setCurrentText(CharSequence);
+    method public void setText(CharSequence);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
+    ctor public TextView(android.content.Context);
+    ctor public TextView(android.content.Context, @Nullable android.util.AttributeSet);
+    ctor public TextView(android.content.Context, @Nullable android.util.AttributeSet, int);
+    ctor public TextView(android.content.Context, @Nullable android.util.AttributeSet, int, int);
+    method public void addTextChangedListener(android.text.TextWatcher);
+    method public final void append(CharSequence);
+    method public void append(CharSequence, int, int);
+    method public void beginBatchEdit();
+    method public boolean bringPointIntoView(int);
+    method public void clearComposingText();
+    method public void debug(int);
+    method public boolean didTouchFocusSelect();
+    method public void endBatchEdit();
+    method public boolean extractText(android.view.inputmethod.ExtractedTextRequest, android.view.inputmethod.ExtractedText);
+    method public final int getAutoLinkMask();
+    method public int getAutoSizeMaxTextSize();
+    method public int getAutoSizeMinTextSize();
+    method public int getAutoSizeStepGranularity();
+    method public int[] getAutoSizeTextAvailableSizes();
+    method public int getAutoSizeTextType();
+    method public int getBreakStrategy();
+    method public int getCompoundDrawablePadding();
+    method @Nullable public android.graphics.BlendMode getCompoundDrawableTintBlendMode();
+    method public android.content.res.ColorStateList getCompoundDrawableTintList();
+    method public android.graphics.PorterDuff.Mode getCompoundDrawableTintMode();
+    method @NonNull public android.graphics.drawable.Drawable[] getCompoundDrawables();
+    method @NonNull public android.graphics.drawable.Drawable[] getCompoundDrawablesRelative();
+    method public int getCompoundPaddingBottom();
+    method public int getCompoundPaddingEnd();
+    method public int getCompoundPaddingLeft();
+    method public int getCompoundPaddingRight();
+    method public int getCompoundPaddingStart();
+    method public int getCompoundPaddingTop();
+    method @ColorInt public final int getCurrentHintTextColor();
+    method @ColorInt public final int getCurrentTextColor();
+    method public android.view.ActionMode.Callback getCustomInsertionActionModeCallback();
+    method public android.view.ActionMode.Callback getCustomSelectionActionModeCallback();
+    method protected boolean getDefaultEditable();
+    method protected android.text.method.MovementMethod getDefaultMovementMethod();
+    method public android.text.Editable getEditableText();
+    method public android.text.TextUtils.TruncateAt getEllipsize();
+    method public CharSequence getError();
+    method public int getExtendedPaddingBottom();
+    method public int getExtendedPaddingTop();
+    method public android.text.InputFilter[] getFilters();
+    method public int getFirstBaselineToTopHeight();
+    method @Nullable public String getFontFeatureSettings();
+    method @Nullable public String getFontVariationSettings();
+    method public boolean getFreezesText();
+    method public int getGravity();
+    method @ColorInt public int getHighlightColor();
+    method public CharSequence getHint();
+    method public final android.content.res.ColorStateList getHintTextColors();
+    method public int getHyphenationFrequency();
+    method public int getImeActionId();
+    method public CharSequence getImeActionLabel();
+    method @Nullable public android.os.LocaleList getImeHintLocales();
+    method public int getImeOptions();
+    method public boolean getIncludeFontPadding();
+    method public android.os.Bundle getInputExtras(boolean);
+    method public int getInputType();
+    method public int getJustificationMode();
+    method public final android.text.method.KeyListener getKeyListener();
+    method public int getLastBaselineToBottomHeight();
+    method public final android.text.Layout getLayout();
+    method public float getLetterSpacing();
+    method public int getLineBounds(int, android.graphics.Rect);
+    method public int getLineCount();
+    method public int getLineHeight();
+    method public float getLineSpacingExtra();
+    method public float getLineSpacingMultiplier();
+    method public final android.content.res.ColorStateList getLinkTextColors();
+    method public final boolean getLinksClickable();
+    method public int getMarqueeRepeatLimit();
+    method public int getMaxEms();
+    method public int getMaxHeight();
+    method public int getMaxLines();
+    method public int getMaxWidth();
+    method public int getMinEms();
+    method public int getMinHeight();
+    method public int getMinLines();
+    method public int getMinWidth();
+    method public final android.text.method.MovementMethod getMovementMethod();
+    method public int getOffsetForPosition(float, float);
+    method public android.text.TextPaint getPaint();
+    method public int getPaintFlags();
+    method public String getPrivateImeOptions();
+    method public int getSelectionEnd();
+    method public int getSelectionStart();
+    method @ColorInt public int getShadowColor();
+    method public float getShadowDx();
+    method public float getShadowDy();
+    method public float getShadowRadius();
+    method public final boolean getShowSoftInputOnFocus();
+    method public CharSequence getText();
+    method @NonNull public android.view.textclassifier.TextClassifier getTextClassifier();
+    method public final android.content.res.ColorStateList getTextColors();
+    method @Nullable public android.graphics.drawable.Drawable getTextCursorDrawable();
+    method @NonNull public android.text.TextDirectionHeuristic getTextDirectionHeuristic();
+    method @NonNull public java.util.Locale getTextLocale();
+    method @NonNull @Size(min=1) public android.os.LocaleList getTextLocales();
+    method @NonNull public android.text.PrecomputedText.Params getTextMetricsParams();
+    method public float getTextScaleX();
+    method @Nullable public android.graphics.drawable.Drawable getTextSelectHandle();
+    method @Nullable public android.graphics.drawable.Drawable getTextSelectHandleLeft();
+    method @Nullable public android.graphics.drawable.Drawable getTextSelectHandleRight();
+    method public float getTextSize();
+    method public int getTextSizeUnit();
+    method public int getTotalPaddingBottom();
+    method public int getTotalPaddingEnd();
+    method public int getTotalPaddingLeft();
+    method public int getTotalPaddingRight();
+    method public int getTotalPaddingStart();
+    method public int getTotalPaddingTop();
+    method public final android.text.method.TransformationMethod getTransformationMethod();
+    method public android.graphics.Typeface getTypeface();
+    method public android.text.style.URLSpan[] getUrls();
+    method public boolean hasSelection();
+    method public boolean isAllCaps();
+    method public boolean isCursorVisible();
+    method public boolean isElegantTextHeight();
+    method public boolean isFallbackLineSpacing();
+    method public final boolean isHorizontallyScrollable();
+    method public boolean isInputMethodTarget();
+    method public boolean isSingleLine();
+    method public boolean isSuggestionsEnabled();
+    method public boolean isTextSelectable();
+    method public int length();
+    method public boolean moveCursorToVisibleOffset();
+    method public void onBeginBatchEdit();
+    method public void onCommitCompletion(android.view.inputmethod.CompletionInfo);
+    method public void onCommitCorrection(android.view.inputmethod.CorrectionInfo);
+    method public void onEditorAction(int);
+    method public void onEndBatchEdit();
+    method public boolean onPreDraw();
+    method public boolean onPrivateIMECommand(String, android.os.Bundle);
+    method public void onRestoreInstanceState(android.os.Parcelable);
+    method public android.os.Parcelable onSaveInstanceState();
+    method @CallSuper protected void onSelectionChanged(int, int);
+    method protected void onTextChanged(CharSequence, int, int, int);
+    method public boolean onTextContextMenuItem(int);
+    method public void removeTextChangedListener(android.text.TextWatcher);
+    method public void setAllCaps(boolean);
+    method public final void setAutoLinkMask(int);
+    method public void setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int);
+    method public void setAutoSizeTextTypeUniformWithPresetSizes(@NonNull int[], int);
+    method public void setAutoSizeTextTypeWithDefaults(int);
+    method public void setBreakStrategy(int);
+    method public void setCompoundDrawablePadding(int);
+    method public void setCompoundDrawableTintBlendMode(@Nullable android.graphics.BlendMode);
+    method public void setCompoundDrawableTintList(@Nullable android.content.res.ColorStateList);
+    method public void setCompoundDrawableTintMode(@Nullable android.graphics.PorterDuff.Mode);
+    method public void setCompoundDrawables(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCompoundDrawablesRelative(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCompoundDrawablesRelativeWithIntrinsicBounds(@DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setCompoundDrawablesRelativeWithIntrinsicBounds(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCompoundDrawablesWithIntrinsicBounds(@DrawableRes int, @DrawableRes int, @DrawableRes int, @DrawableRes int);
+    method public void setCompoundDrawablesWithIntrinsicBounds(@Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable, @Nullable android.graphics.drawable.Drawable);
+    method public void setCursorVisible(boolean);
+    method public void setCustomInsertionActionModeCallback(android.view.ActionMode.Callback);
+    method public void setCustomSelectionActionModeCallback(android.view.ActionMode.Callback);
+    method public final void setEditableFactory(android.text.Editable.Factory);
+    method public void setElegantTextHeight(boolean);
+    method public void setEllipsize(android.text.TextUtils.TruncateAt);
+    method public void setEms(int);
+    method public void setError(CharSequence);
+    method public void setError(CharSequence, android.graphics.drawable.Drawable);
+    method public void setExtractedText(android.view.inputmethod.ExtractedText);
+    method public void setFallbackLineSpacing(boolean);
+    method public void setFilters(android.text.InputFilter[]);
+    method public void setFirstBaselineToTopHeight(@IntRange(from=0) @Px int);
+    method public void setFontFeatureSettings(@Nullable String);
+    method public boolean setFontVariationSettings(@Nullable String);
+    method protected boolean setFrame(int, int, int, int);
+    method public void setFreezesText(boolean);
+    method public void setGravity(int);
+    method public void setHeight(int);
+    method public void setHighlightColor(@ColorInt int);
+    method public final void setHint(CharSequence);
+    method public final void setHint(@StringRes int);
+    method public final void setHintTextColor(@ColorInt int);
+    method public final void setHintTextColor(android.content.res.ColorStateList);
+    method public void setHorizontallyScrolling(boolean);
+    method public void setHyphenationFrequency(int);
+    method public void setImeActionLabel(CharSequence, int);
+    method public void setImeHintLocales(@Nullable android.os.LocaleList);
+    method public void setImeOptions(int);
+    method public void setIncludeFontPadding(boolean);
+    method public void setInputExtras(@XmlRes int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void setInputType(int);
+    method public void setJustificationMode(int);
+    method public void setKeyListener(android.text.method.KeyListener);
+    method public void setLastBaselineToBottomHeight(@IntRange(from=0) @Px int);
+    method public void setLetterSpacing(float);
+    method public void setLineHeight(@IntRange(from=0) @Px int);
+    method public void setLineSpacing(float, float);
+    method public void setLines(int);
+    method public final void setLinkTextColor(@ColorInt int);
+    method public final void setLinkTextColor(android.content.res.ColorStateList);
+    method public final void setLinksClickable(boolean);
+    method public void setMarqueeRepeatLimit(int);
+    method public void setMaxEms(int);
+    method public void setMaxHeight(int);
+    method public void setMaxLines(int);
+    method public void setMaxWidth(int);
+    method public void setMinEms(int);
+    method public void setMinHeight(int);
+    method public void setMinLines(int);
+    method public void setMinWidth(int);
+    method public final void setMovementMethod(android.text.method.MovementMethod);
+    method public void setOnEditorActionListener(android.widget.TextView.OnEditorActionListener);
+    method public void setPaintFlags(int);
+    method public void setPrivateImeOptions(String);
+    method public void setRawInputType(int);
+    method public void setScroller(android.widget.Scroller);
+    method public void setSelectAllOnFocus(boolean);
+    method public void setShadowLayer(float, float, float, int);
+    method public final void setShowSoftInputOnFocus(boolean);
+    method public void setSingleLine();
+    method public void setSingleLine(boolean);
+    method public final void setSpannableFactory(android.text.Spannable.Factory);
+    method public final void setText(CharSequence);
+    method public void setText(CharSequence, android.widget.TextView.BufferType);
+    method public final void setText(char[], int, int);
+    method public final void setText(@StringRes int);
+    method public final void setText(@StringRes int, android.widget.TextView.BufferType);
+    method public void setTextAppearance(@StyleRes int);
+    method @Deprecated public void setTextAppearance(android.content.Context, @StyleRes int);
+    method public void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+    method public void setTextColor(@ColorInt int);
+    method public void setTextColor(android.content.res.ColorStateList);
+    method public void setTextCursorDrawable(@Nullable android.graphics.drawable.Drawable);
+    method public void setTextCursorDrawable(@DrawableRes int);
+    method public void setTextIsSelectable(boolean);
+    method public final void setTextKeepState(CharSequence);
+    method public final void setTextKeepState(CharSequence, android.widget.TextView.BufferType);
+    method public void setTextLocale(@NonNull java.util.Locale);
+    method public void setTextLocales(@NonNull @Size(min=1) android.os.LocaleList);
+    method public void setTextMetricsParams(@NonNull android.text.PrecomputedText.Params);
+    method public void setTextScaleX(float);
+    method public void setTextSelectHandle(@NonNull android.graphics.drawable.Drawable);
+    method public void setTextSelectHandle(@DrawableRes int);
+    method public void setTextSelectHandleLeft(@NonNull android.graphics.drawable.Drawable);
+    method public void setTextSelectHandleLeft(@DrawableRes int);
+    method public void setTextSelectHandleRight(@NonNull android.graphics.drawable.Drawable);
+    method public void setTextSelectHandleRight(@DrawableRes int);
+    method public void setTextSize(float);
+    method public void setTextSize(int, float);
+    method public final void setTransformationMethod(android.text.method.TransformationMethod);
+    method public void setTypeface(@Nullable android.graphics.Typeface, int);
+    method public void setTypeface(@Nullable android.graphics.Typeface);
+    method public void setWidth(int);
+    field public static final int AUTO_SIZE_TEXT_TYPE_NONE = 0; // 0x0
+    field public static final int AUTO_SIZE_TEXT_TYPE_UNIFORM = 1; // 0x1
+  }
+
+  public enum TextView.BufferType {
+    enum_constant public static final android.widget.TextView.BufferType EDITABLE;
+    enum_constant public static final android.widget.TextView.BufferType NORMAL;
+    enum_constant public static final android.widget.TextView.BufferType SPANNABLE;
+  }
+
+  public static interface TextView.OnEditorActionListener {
+    method public boolean onEditorAction(android.widget.TextView, int, android.view.KeyEvent);
+  }
+
+  public static class TextView.SavedState extends android.view.View.BaseSavedState {
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.TextView.SavedState> CREATOR;
+  }
+
+  public interface ThemedSpinnerAdapter extends android.widget.SpinnerAdapter {
+    method @Nullable public android.content.res.Resources.Theme getDropDownViewTheme();
+    method public void setDropDownViewTheme(@Nullable android.content.res.Resources.Theme);
+  }
+
+  public class TimePicker extends android.widget.FrameLayout {
+    ctor public TimePicker(android.content.Context);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated @NonNull public Integer getCurrentHour();
+    method @Deprecated @NonNull public Integer getCurrentMinute();
+    method public int getHour();
+    method public int getMinute();
+    method public boolean is24HourView();
+    method @Deprecated public void setCurrentHour(@NonNull Integer);
+    method @Deprecated public void setCurrentMinute(@NonNull Integer);
+    method public void setHour(@IntRange(from=0, to=23) int);
+    method public void setIs24HourView(@NonNull Boolean);
+    method public void setMinute(@IntRange(from=0, to=59) int);
+    method public void setOnTimeChangedListener(android.widget.TimePicker.OnTimeChangedListener);
+    method public boolean validateInput();
+  }
+
+  public static interface TimePicker.OnTimeChangedListener {
+    method public void onTimeChanged(android.widget.TimePicker, int, int);
+  }
+
+  public class Toast {
+    ctor public Toast(android.content.Context);
+    method public void addCallback(@NonNull android.widget.Toast.Callback);
+    method public void cancel();
+    method public int getDuration();
+    method public int getGravity();
+    method public float getHorizontalMargin();
+    method public float getVerticalMargin();
+    method @Deprecated @Nullable public android.view.View getView();
+    method public int getXOffset();
+    method public int getYOffset();
+    method public static android.widget.Toast makeText(android.content.Context, CharSequence, int);
+    method public static android.widget.Toast makeText(android.content.Context, @StringRes int, int) throws android.content.res.Resources.NotFoundException;
+    method public void removeCallback(@NonNull android.widget.Toast.Callback);
+    method public void setDuration(int);
+    method public void setGravity(int, int, int);
+    method public void setMargin(float, float);
+    method public void setText(@StringRes int);
+    method public void setText(CharSequence);
+    method @Deprecated public void setView(android.view.View);
+    method public void show();
+    field public static final int LENGTH_LONG = 1; // 0x1
+    field public static final int LENGTH_SHORT = 0; // 0x0
+  }
+
+  public abstract static class Toast.Callback {
+    ctor public Toast.Callback();
+    method public void onToastHidden();
+    method public void onToastShown();
+  }
+
+  public class ToggleButton extends android.widget.CompoundButton {
+    ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public ToggleButton(android.content.Context, android.util.AttributeSet);
+    ctor public ToggleButton(android.content.Context);
+    method @FloatRange(from=0.0, to=1.0) public float getDisabledAlpha();
+    method public CharSequence getTextOff();
+    method public CharSequence getTextOn();
+    method public void setBackgroundDrawable(android.graphics.drawable.Drawable);
+    method public void setTextOff(CharSequence);
+    method public void setTextOn(CharSequence);
+  }
+
+  public class Toolbar extends android.view.ViewGroup {
+    ctor public Toolbar(android.content.Context);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
+    method public void collapseActionView();
+    method public void dismissPopupMenus();
+    method protected android.widget.Toolbar.LayoutParams generateDefaultLayoutParams();
+    method public android.widget.Toolbar.LayoutParams generateLayoutParams(android.util.AttributeSet);
+    method protected android.widget.Toolbar.LayoutParams generateLayoutParams(android.view.ViewGroup.LayoutParams);
+    method @Nullable public CharSequence getCollapseContentDescription();
+    method @Nullable public android.graphics.drawable.Drawable getCollapseIcon();
+    method public int getContentInsetEnd();
+    method public int getContentInsetEndWithActions();
+    method public int getContentInsetLeft();
+    method public int getContentInsetRight();
+    method public int getContentInsetStart();
+    method public int getContentInsetStartWithNavigation();
+    method public int getCurrentContentInsetEnd();
+    method public int getCurrentContentInsetLeft();
+    method public int getCurrentContentInsetRight();
+    method public int getCurrentContentInsetStart();
+    method public android.graphics.drawable.Drawable getLogo();
+    method public CharSequence getLogoDescription();
+    method public android.view.Menu getMenu();
+    method @Nullable public CharSequence getNavigationContentDescription();
+    method @Nullable public android.graphics.drawable.Drawable getNavigationIcon();
+    method @Nullable public android.graphics.drawable.Drawable getOverflowIcon();
+    method public int getPopupTheme();
+    method public CharSequence getSubtitle();
+    method public CharSequence getTitle();
+    method public int getTitleMarginBottom();
+    method public int getTitleMarginEnd();
+    method public int getTitleMarginStart();
+    method public int getTitleMarginTop();
+    method public boolean hasExpandedActionView();
+    method public boolean hideOverflowMenu();
+    method public void inflateMenu(@MenuRes int);
+    method public boolean isOverflowMenuShowing();
+    method public void setCollapseContentDescription(@StringRes int);
+    method public void setCollapseContentDescription(@Nullable CharSequence);
+    method public void setCollapseIcon(@DrawableRes int);
+    method public void setCollapseIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setContentInsetEndWithActions(int);
+    method public void setContentInsetStartWithNavigation(int);
+    method public void setContentInsetsAbsolute(int, int);
+    method public void setContentInsetsRelative(int, int);
+    method public void setLogo(@DrawableRes int);
+    method public void setLogo(android.graphics.drawable.Drawable);
+    method public void setLogoDescription(@StringRes int);
+    method public void setLogoDescription(CharSequence);
+    method public void setNavigationContentDescription(@StringRes int);
+    method public void setNavigationContentDescription(@Nullable CharSequence);
+    method public void setNavigationIcon(@DrawableRes int);
+    method public void setNavigationIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+    method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener);
+    method public void setOverflowIcon(@Nullable android.graphics.drawable.Drawable);
+    method public void setPopupTheme(@StyleRes int);
+    method public void setSubtitle(@StringRes int);
+    method public void setSubtitle(CharSequence);
+    method public void setSubtitleTextAppearance(android.content.Context, @StyleRes int);
+    method public void setSubtitleTextColor(@ColorInt int);
+    method public void setTitle(@StringRes int);
+    method public void setTitle(CharSequence);
+    method public void setTitleMargin(int, int, int, int);
+    method public void setTitleMarginBottom(int);
+    method public void setTitleMarginEnd(int);
+    method public void setTitleMarginStart(int);
+    method public void setTitleMarginTop(int);
+    method public void setTitleTextAppearance(android.content.Context, @StyleRes int);
+    method public void setTitleTextColor(@ColorInt int);
+    method public boolean showOverflowMenu();
+  }
+
+  public static class Toolbar.LayoutParams extends android.app.ActionBar.LayoutParams {
+    ctor public Toolbar.LayoutParams(@NonNull android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar.LayoutParams(int, int);
+    ctor public Toolbar.LayoutParams(int, int, int);
+    ctor public Toolbar.LayoutParams(int);
+    ctor public Toolbar.LayoutParams(android.widget.Toolbar.LayoutParams);
+    ctor public Toolbar.LayoutParams(android.app.ActionBar.LayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+  }
+
+  public static interface Toolbar.OnMenuItemClickListener {
+    method public boolean onMenuItemClick(android.view.MenuItem);
+  }
+
+  @Deprecated public class TwoLineListItem extends android.widget.RelativeLayout {
+    ctor @Deprecated public TwoLineListItem(android.content.Context);
+    ctor @Deprecated public TwoLineListItem(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public TwoLineListItem(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public TwoLineListItem(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public android.widget.TextView getText1();
+    method @Deprecated public android.widget.TextView getText2();
+  }
+
+  public class VideoView extends android.view.SurfaceView implements android.widget.MediaController.MediaPlayerControl {
+    ctor public VideoView(android.content.Context);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet, int);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet, int, int);
+    method public void addSubtitleSource(java.io.InputStream, android.media.MediaFormat);
+    method public boolean canPause();
+    method public boolean canSeekBackward();
+    method public boolean canSeekForward();
+    method public int getAudioSessionId();
+    method public int getBufferPercentage();
+    method public int getCurrentPosition();
+    method public int getDuration();
+    method public boolean isPlaying();
+    method public void pause();
+    method public int resolveAdjustedSize(int, int);
+    method public void resume();
+    method public void seekTo(int);
+    method public void setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method public void setAudioFocusRequest(int);
+    method public void setMediaController(android.widget.MediaController);
+    method public void setOnCompletionListener(android.media.MediaPlayer.OnCompletionListener);
+    method public void setOnErrorListener(android.media.MediaPlayer.OnErrorListener);
+    method public void setOnInfoListener(android.media.MediaPlayer.OnInfoListener);
+    method public void setOnPreparedListener(android.media.MediaPlayer.OnPreparedListener);
+    method public void setVideoPath(String);
+    method public void setVideoURI(android.net.Uri);
+    method public void setVideoURI(android.net.Uri, java.util.Map<java.lang.String,java.lang.String>);
+    method public void start();
+    method public void stopPlayback();
+    method public void suspend();
+  }
+
+  public class ViewAnimator extends android.widget.FrameLayout {
+    ctor public ViewAnimator(android.content.Context);
+    ctor public ViewAnimator(android.content.Context, android.util.AttributeSet);
+    method public boolean getAnimateFirstView();
+    method public android.view.View getCurrentView();
+    method public int getDisplayedChild();
+    method public android.view.animation.Animation getInAnimation();
+    method public android.view.animation.Animation getOutAnimation();
+    method public void setAnimateFirstView(boolean);
+    method public void setDisplayedChild(int);
+    method public void setInAnimation(android.view.animation.Animation);
+    method public void setInAnimation(android.content.Context, @AnimRes int);
+    method public void setOutAnimation(android.view.animation.Animation);
+    method public void setOutAnimation(android.content.Context, @AnimRes int);
+    method public void showNext();
+    method public void showPrevious();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class ViewFlipper extends android.widget.ViewAnimator {
+    ctor public ViewFlipper(android.content.Context);
+    ctor public ViewFlipper(android.content.Context, android.util.AttributeSet);
+    method @IntRange(from=0) public int getFlipInterval();
+    method public boolean isAutoStart();
+    method public boolean isFlipping();
+    method public void setAutoStart(boolean);
+    method public void setFlipInterval(@IntRange(from=0) int);
+    method public void startFlipping();
+    method public void stopFlipping();
+  }
+
+  public class ViewSwitcher extends android.widget.ViewAnimator {
+    ctor public ViewSwitcher(android.content.Context);
+    ctor public ViewSwitcher(android.content.Context, android.util.AttributeSet);
+    method public android.view.View getNextView();
+    method public void reset();
+    method public void setFactory(android.widget.ViewSwitcher.ViewFactory);
+  }
+
+  public static interface ViewSwitcher.ViewFactory {
+    method public android.view.View makeView();
+  }
+
+  public interface WrapperListAdapter extends android.widget.ListAdapter {
+    method public android.widget.ListAdapter getWrappedAdapter();
+  }
+
+  @Deprecated public class ZoomButton extends android.widget.ImageButton implements android.view.View.OnLongClickListener {
+    ctor @Deprecated public ZoomButton(android.content.Context);
+    ctor @Deprecated public ZoomButton(android.content.Context, android.util.AttributeSet);
+    ctor @Deprecated public ZoomButton(android.content.Context, android.util.AttributeSet, int);
+    ctor @Deprecated public ZoomButton(android.content.Context, android.util.AttributeSet, int, int);
+    method @Deprecated public boolean onLongClick(android.view.View);
+    method @Deprecated public void setZoomSpeed(long);
+  }
+
+  @Deprecated public class ZoomButtonsController implements android.view.View.OnTouchListener {
+    ctor @Deprecated public ZoomButtonsController(android.view.View);
+    method @Deprecated public android.view.ViewGroup getContainer();
+    method @Deprecated public android.view.View getZoomControls();
+    method @Deprecated public boolean isAutoDismissed();
+    method @Deprecated public boolean isVisible();
+    method public boolean onTouch(android.view.View, android.view.MotionEvent);
+    method @Deprecated public void setAutoDismissed(boolean);
+    method @Deprecated public void setFocusable(boolean);
+    method @Deprecated public void setOnZoomListener(android.widget.ZoomButtonsController.OnZoomListener);
+    method @Deprecated public void setVisible(boolean);
+    method @Deprecated public void setZoomInEnabled(boolean);
+    method @Deprecated public void setZoomOutEnabled(boolean);
+    method @Deprecated public void setZoomSpeed(long);
+  }
+
+  @Deprecated public static interface ZoomButtonsController.OnZoomListener {
+    method @Deprecated public void onVisibilityChanged(boolean);
+    method @Deprecated public void onZoom(boolean);
+  }
+
+  @Deprecated public class ZoomControls extends android.widget.LinearLayout {
+    ctor @Deprecated public ZoomControls(android.content.Context);
+    ctor @Deprecated public ZoomControls(android.content.Context, android.util.AttributeSet);
+    method @Deprecated public void hide();
+    method @Deprecated public void setIsZoomInEnabled(boolean);
+    method @Deprecated public void setIsZoomOutEnabled(boolean);
+    method @Deprecated public void setOnZoomInClickListener(android.view.View.OnClickListener);
+    method @Deprecated public void setOnZoomOutClickListener(android.view.View.OnClickListener);
+    method @Deprecated public void setZoomSpeed(long);
+    method @Deprecated public void show();
+  }
+
+}
+
+package android.widget.inline {
+
+  public class InlineContentView extends android.view.ViewGroup {
+    method @Nullable public android.view.SurfaceControl getSurfaceControl();
+    method public boolean isZOrderedOnTop();
+    method public void onLayout(boolean, int, int, int, int);
+    method public void setSurfaceControlCallback(@Nullable android.widget.inline.InlineContentView.SurfaceControlCallback);
+    method public boolean setZOrderedOnTop(boolean);
+  }
+
+  public static interface InlineContentView.SurfaceControlCallback {
+    method public void onCreated(@NonNull android.view.SurfaceControl);
+    method public void onDestroyed(@NonNull android.view.SurfaceControl);
+  }
+
+  public final class InlinePresentationSpec implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.util.Size getMaxSize();
+    method @NonNull public android.util.Size getMinSize();
+    method @NonNull public android.os.Bundle getStyle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.widget.inline.InlinePresentationSpec> CREATOR;
+  }
+
+  public static final class InlinePresentationSpec.Builder {
+    ctor public InlinePresentationSpec.Builder(@NonNull android.util.Size, @NonNull android.util.Size);
+    method @NonNull public android.widget.inline.InlinePresentationSpec build();
+    method @NonNull public android.widget.inline.InlinePresentationSpec.Builder setStyle(@NonNull android.os.Bundle);
+  }
+
+}
+
+package android.window {
+
+  public interface SplashScreen {
+    method public void clearOnExitAnimationListener();
+    method public void setOnExitAnimationListener(@NonNull android.window.SplashScreen.OnExitAnimationListener);
+    method public void setSplashScreenTheme(@StyleRes int);
+  }
+
+  public static interface SplashScreen.OnExitAnimationListener {
+    method @UiThread public void onSplashScreenExit(@NonNull android.window.SplashScreenView);
+  }
+
+  public final class SplashScreenView extends android.widget.FrameLayout {
+    method @Nullable public java.time.Duration getIconAnimationDuration();
+    method @Nullable public java.time.Instant getIconAnimationStart();
+    method @Nullable public android.view.View getIconView();
+    method @UiThread public void remove();
+  }
+
+}
+
+package dalvik.annotation {
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface TestTarget {
+    method @Deprecated public abstract String conceptName() default "";
+    method @Deprecated public abstract Class<?>[] methodArgs() default {};
+    method @Deprecated public abstract String methodName() default "";
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public @interface TestTargetClass {
+    method @Deprecated public abstract Class<?> value();
+  }
+
+}
+
+package dalvik.bytecode {
+
+  public final class OpcodeInfo {
+    field public static final int MAXIMUM_PACKED_VALUE;
+    field public static final int MAXIMUM_VALUE;
+  }
+
+  public interface Opcodes {
+    field public static final int OP_ADD_DOUBLE = 171; // 0xab
+    field public static final int OP_ADD_DOUBLE_2ADDR = 203; // 0xcb
+    field public static final int OP_ADD_FLOAT = 166; // 0xa6
+    field public static final int OP_ADD_FLOAT_2ADDR = 198; // 0xc6
+    field public static final int OP_ADD_INT = 144; // 0x90
+    field public static final int OP_ADD_INT_2ADDR = 176; // 0xb0
+    field public static final int OP_ADD_INT_LIT16 = 208; // 0xd0
+    field public static final int OP_ADD_INT_LIT8 = 216; // 0xd8
+    field public static final int OP_ADD_LONG = 155; // 0x9b
+    field public static final int OP_ADD_LONG_2ADDR = 187; // 0xbb
+    field public static final int OP_AGET = 68; // 0x44
+    field public static final int OP_AGET_BOOLEAN = 71; // 0x47
+    field public static final int OP_AGET_BYTE = 72; // 0x48
+    field public static final int OP_AGET_CHAR = 73; // 0x49
+    field public static final int OP_AGET_OBJECT = 70; // 0x46
+    field public static final int OP_AGET_SHORT = 74; // 0x4a
+    field public static final int OP_AGET_WIDE = 69; // 0x45
+    field public static final int OP_AND_INT = 149; // 0x95
+    field public static final int OP_AND_INT_2ADDR = 181; // 0xb5
+    field public static final int OP_AND_INT_LIT16 = 213; // 0xd5
+    field public static final int OP_AND_INT_LIT8 = 221; // 0xdd
+    field public static final int OP_AND_LONG = 160; // 0xa0
+    field public static final int OP_AND_LONG_2ADDR = 192; // 0xc0
+    field public static final int OP_APUT = 75; // 0x4b
+    field public static final int OP_APUT_BOOLEAN = 78; // 0x4e
+    field public static final int OP_APUT_BYTE = 79; // 0x4f
+    field public static final int OP_APUT_CHAR = 80; // 0x50
+    field public static final int OP_APUT_OBJECT = 77; // 0x4d
+    field public static final int OP_APUT_SHORT = 81; // 0x51
+    field public static final int OP_APUT_WIDE = 76; // 0x4c
+    field public static final int OP_ARRAY_LENGTH = 33; // 0x21
+    field @Deprecated public static final int OP_BREAKPOINT = 236; // 0xec
+    field public static final int OP_CHECK_CAST = 31; // 0x1f
+    field public static final int OP_CHECK_CAST_JUMBO = 511; // 0x1ff
+    field public static final int OP_CMPG_DOUBLE = 48; // 0x30
+    field public static final int OP_CMPG_FLOAT = 46; // 0x2e
+    field public static final int OP_CMPL_DOUBLE = 47; // 0x2f
+    field public static final int OP_CMPL_FLOAT = 45; // 0x2d
+    field public static final int OP_CMP_LONG = 49; // 0x31
+    field public static final int OP_CONST = 20; // 0x14
+    field public static final int OP_CONST_16 = 19; // 0x13
+    field public static final int OP_CONST_4 = 18; // 0x12
+    field public static final int OP_CONST_CLASS = 28; // 0x1c
+    field public static final int OP_CONST_CLASS_JUMBO = 255; // 0xff
+    field public static final int OP_CONST_HIGH16 = 21; // 0x15
+    field public static final int OP_CONST_METHOD_HANDLE = 254; // 0xfe
+    field public static final int OP_CONST_METHOD_TYPE = 255; // 0xff
+    field public static final int OP_CONST_STRING = 26; // 0x1a
+    field public static final int OP_CONST_STRING_JUMBO = 27; // 0x1b
+    field public static final int OP_CONST_WIDE = 24; // 0x18
+    field public static final int OP_CONST_WIDE_16 = 22; // 0x16
+    field public static final int OP_CONST_WIDE_32 = 23; // 0x17
+    field public static final int OP_CONST_WIDE_HIGH16 = 25; // 0x19
+    field public static final int OP_DIV_DOUBLE = 174; // 0xae
+    field public static final int OP_DIV_DOUBLE_2ADDR = 206; // 0xce
+    field public static final int OP_DIV_FLOAT = 169; // 0xa9
+    field public static final int OP_DIV_FLOAT_2ADDR = 201; // 0xc9
+    field public static final int OP_DIV_INT = 147; // 0x93
+    field public static final int OP_DIV_INT_2ADDR = 179; // 0xb3
+    field public static final int OP_DIV_INT_LIT16 = 211; // 0xd3
+    field public static final int OP_DIV_INT_LIT8 = 219; // 0xdb
+    field public static final int OP_DIV_LONG = 158; // 0x9e
+    field public static final int OP_DIV_LONG_2ADDR = 190; // 0xbe
+    field public static final int OP_DOUBLE_TO_FLOAT = 140; // 0x8c
+    field public static final int OP_DOUBLE_TO_INT = 138; // 0x8a
+    field public static final int OP_DOUBLE_TO_LONG = 139; // 0x8b
+    field @Deprecated public static final int OP_EXECUTE_INLINE = 238; // 0xee
+    field @Deprecated public static final int OP_EXECUTE_INLINE_RANGE = 239; // 0xef
+    field public static final int OP_FILLED_NEW_ARRAY = 36; // 0x24
+    field public static final int OP_FILLED_NEW_ARRAY_JUMBO = 1535; // 0x5ff
+    field public static final int OP_FILLED_NEW_ARRAY_RANGE = 37; // 0x25
+    field public static final int OP_FILL_ARRAY_DATA = 38; // 0x26
+    field public static final int OP_FLOAT_TO_DOUBLE = 137; // 0x89
+    field public static final int OP_FLOAT_TO_INT = 135; // 0x87
+    field public static final int OP_FLOAT_TO_LONG = 136; // 0x88
+    field public static final int OP_GOTO = 40; // 0x28
+    field public static final int OP_GOTO_16 = 41; // 0x29
+    field public static final int OP_GOTO_32 = 42; // 0x2a
+    field public static final int OP_IF_EQ = 50; // 0x32
+    field public static final int OP_IF_EQZ = 56; // 0x38
+    field public static final int OP_IF_GE = 53; // 0x35
+    field public static final int OP_IF_GEZ = 59; // 0x3b
+    field public static final int OP_IF_GT = 54; // 0x36
+    field public static final int OP_IF_GTZ = 60; // 0x3c
+    field public static final int OP_IF_LE = 55; // 0x37
+    field public static final int OP_IF_LEZ = 61; // 0x3d
+    field public static final int OP_IF_LT = 52; // 0x34
+    field public static final int OP_IF_LTZ = 58; // 0x3a
+    field public static final int OP_IF_NE = 51; // 0x33
+    field public static final int OP_IF_NEZ = 57; // 0x39
+    field public static final int OP_IGET = 82; // 0x52
+    field public static final int OP_IGET_BOOLEAN = 85; // 0x55
+    field public static final int OP_IGET_BOOLEAN_JUMBO = 2559; // 0x9ff
+    field public static final int OP_IGET_BYTE = 86; // 0x56
+    field public static final int OP_IGET_BYTE_JUMBO = 2815; // 0xaff
+    field public static final int OP_IGET_CHAR = 87; // 0x57
+    field public static final int OP_IGET_CHAR_JUMBO = 3071; // 0xbff
+    field public static final int OP_IGET_JUMBO = 1791; // 0x6ff
+    field public static final int OP_IGET_OBJECT = 84; // 0x54
+    field public static final int OP_IGET_OBJECT_JUMBO = 2303; // 0x8ff
+    field @Deprecated public static final int OP_IGET_OBJECT_QUICK = 244; // 0xf4
+    field @Deprecated public static final int OP_IGET_QUICK = 242; // 0xf2
+    field public static final int OP_IGET_SHORT = 88; // 0x58
+    field public static final int OP_IGET_SHORT_JUMBO = 3327; // 0xcff
+    field public static final int OP_IGET_WIDE = 83; // 0x53
+    field public static final int OP_IGET_WIDE_JUMBO = 2047; // 0x7ff
+    field @Deprecated public static final int OP_IGET_WIDE_QUICK = 243; // 0xf3
+    field @Deprecated public static final int OP_IGET_WIDE_VOLATILE = 232; // 0xe8
+    field public static final int OP_INSTANCE_OF = 32; // 0x20
+    field public static final int OP_INSTANCE_OF_JUMBO = 767; // 0x2ff
+    field public static final int OP_INT_TO_BYTE = 141; // 0x8d
+    field public static final int OP_INT_TO_CHAR = 142; // 0x8e
+    field public static final int OP_INT_TO_DOUBLE = 131; // 0x83
+    field public static final int OP_INT_TO_FLOAT = 130; // 0x82
+    field public static final int OP_INT_TO_LONG = 129; // 0x81
+    field public static final int OP_INT_TO_SHORT = 143; // 0x8f
+    field public static final int OP_INVOKE_CUSTOM = 252; // 0xfc
+    field public static final int OP_INVOKE_CUSTOM_RANGE = 253; // 0xfd
+    field public static final int OP_INVOKE_DIRECT = 112; // 0x70
+    field @Deprecated public static final int OP_INVOKE_DIRECT_EMPTY = 240; // 0xf0
+    field public static final int OP_INVOKE_DIRECT_JUMBO = 9471; // 0x24ff
+    field public static final int OP_INVOKE_DIRECT_RANGE = 118; // 0x76
+    field public static final int OP_INVOKE_INTERFACE = 114; // 0x72
+    field public static final int OP_INVOKE_INTERFACE_JUMBO = 9983; // 0x26ff
+    field public static final int OP_INVOKE_INTERFACE_RANGE = 120; // 0x78
+    field public static final int OP_INVOKE_POLYMORPHIC = 250; // 0xfa
+    field public static final int OP_INVOKE_POLYMORPHIC_RANGE = 251; // 0xfb
+    field public static final int OP_INVOKE_STATIC = 113; // 0x71
+    field public static final int OP_INVOKE_STATIC_JUMBO = 9727; // 0x25ff
+    field public static final int OP_INVOKE_STATIC_RANGE = 119; // 0x77
+    field public static final int OP_INVOKE_SUPER = 111; // 0x6f
+    field public static final int OP_INVOKE_SUPER_JUMBO = 9215; // 0x23ff
+    field @Deprecated public static final int OP_INVOKE_SUPER_QUICK = 250; // 0xfa
+    field @Deprecated public static final int OP_INVOKE_SUPER_QUICK_RANGE = 251; // 0xfb
+    field public static final int OP_INVOKE_SUPER_RANGE = 117; // 0x75
+    field public static final int OP_INVOKE_VIRTUAL = 110; // 0x6e
+    field public static final int OP_INVOKE_VIRTUAL_JUMBO = 8959; // 0x22ff
+    field @Deprecated public static final int OP_INVOKE_VIRTUAL_QUICK = 248; // 0xf8
+    field @Deprecated public static final int OP_INVOKE_VIRTUAL_QUICK_RANGE = 249; // 0xf9
+    field public static final int OP_INVOKE_VIRTUAL_RANGE = 116; // 0x74
+    field public static final int OP_IPUT = 89; // 0x59
+    field public static final int OP_IPUT_BOOLEAN = 92; // 0x5c
+    field public static final int OP_IPUT_BOOLEAN_JUMBO = 4351; // 0x10ff
+    field public static final int OP_IPUT_BYTE = 93; // 0x5d
+    field public static final int OP_IPUT_BYTE_JUMBO = 4607; // 0x11ff
+    field public static final int OP_IPUT_CHAR = 94; // 0x5e
+    field public static final int OP_IPUT_CHAR_JUMBO = 4863; // 0x12ff
+    field public static final int OP_IPUT_JUMBO = 3583; // 0xdff
+    field public static final int OP_IPUT_OBJECT = 91; // 0x5b
+    field public static final int OP_IPUT_OBJECT_JUMBO = 4095; // 0xfff
+    field @Deprecated public static final int OP_IPUT_OBJECT_QUICK = 247; // 0xf7
+    field @Deprecated public static final int OP_IPUT_QUICK = 245; // 0xf5
+    field public static final int OP_IPUT_SHORT = 95; // 0x5f
+    field public static final int OP_IPUT_SHORT_JUMBO = 5119; // 0x13ff
+    field public static final int OP_IPUT_WIDE = 90; // 0x5a
+    field public static final int OP_IPUT_WIDE_JUMBO = 3839; // 0xeff
+    field @Deprecated public static final int OP_IPUT_WIDE_QUICK = 246; // 0xf6
+    field @Deprecated public static final int OP_IPUT_WIDE_VOLATILE = 233; // 0xe9
+    field public static final int OP_LONG_TO_DOUBLE = 134; // 0x86
+    field public static final int OP_LONG_TO_FLOAT = 133; // 0x85
+    field public static final int OP_LONG_TO_INT = 132; // 0x84
+    field public static final int OP_MONITOR_ENTER = 29; // 0x1d
+    field public static final int OP_MONITOR_EXIT = 30; // 0x1e
+    field public static final int OP_MOVE = 1; // 0x1
+    field public static final int OP_MOVE_16 = 3; // 0x3
+    field public static final int OP_MOVE_EXCEPTION = 13; // 0xd
+    field public static final int OP_MOVE_FROM16 = 2; // 0x2
+    field public static final int OP_MOVE_OBJECT = 7; // 0x7
+    field public static final int OP_MOVE_OBJECT_16 = 9; // 0x9
+    field public static final int OP_MOVE_OBJECT_FROM16 = 8; // 0x8
+    field public static final int OP_MOVE_RESULT = 10; // 0xa
+    field public static final int OP_MOVE_RESULT_OBJECT = 12; // 0xc
+    field public static final int OP_MOVE_RESULT_WIDE = 11; // 0xb
+    field public static final int OP_MOVE_WIDE = 4; // 0x4
+    field public static final int OP_MOVE_WIDE_16 = 6; // 0x6
+    field public static final int OP_MOVE_WIDE_FROM16 = 5; // 0x5
+    field public static final int OP_MUL_DOUBLE = 173; // 0xad
+    field public static final int OP_MUL_DOUBLE_2ADDR = 205; // 0xcd
+    field public static final int OP_MUL_FLOAT = 168; // 0xa8
+    field public static final int OP_MUL_FLOAT_2ADDR = 200; // 0xc8
+    field public static final int OP_MUL_INT = 146; // 0x92
+    field public static final int OP_MUL_INT_2ADDR = 178; // 0xb2
+    field public static final int OP_MUL_INT_LIT16 = 210; // 0xd2
+    field public static final int OP_MUL_INT_LIT8 = 218; // 0xda
+    field public static final int OP_MUL_LONG = 157; // 0x9d
+    field public static final int OP_MUL_LONG_2ADDR = 189; // 0xbd
+    field public static final int OP_NEG_DOUBLE = 128; // 0x80
+    field public static final int OP_NEG_FLOAT = 127; // 0x7f
+    field public static final int OP_NEG_INT = 123; // 0x7b
+    field public static final int OP_NEG_LONG = 125; // 0x7d
+    field public static final int OP_NEW_ARRAY = 35; // 0x23
+    field public static final int OP_NEW_ARRAY_JUMBO = 1279; // 0x4ff
+    field public static final int OP_NEW_INSTANCE = 34; // 0x22
+    field public static final int OP_NEW_INSTANCE_JUMBO = 1023; // 0x3ff
+    field public static final int OP_NOP = 0; // 0x0
+    field public static final int OP_NOT_INT = 124; // 0x7c
+    field public static final int OP_NOT_LONG = 126; // 0x7e
+    field public static final int OP_OR_INT = 150; // 0x96
+    field public static final int OP_OR_INT_2ADDR = 182; // 0xb6
+    field public static final int OP_OR_INT_LIT16 = 214; // 0xd6
+    field public static final int OP_OR_INT_LIT8 = 222; // 0xde
+    field public static final int OP_OR_LONG = 161; // 0xa1
+    field public static final int OP_OR_LONG_2ADDR = 193; // 0xc1
+    field public static final int OP_PACKED_SWITCH = 43; // 0x2b
+    field public static final int OP_REM_DOUBLE = 175; // 0xaf
+    field public static final int OP_REM_DOUBLE_2ADDR = 207; // 0xcf
+    field public static final int OP_REM_FLOAT = 170; // 0xaa
+    field public static final int OP_REM_FLOAT_2ADDR = 202; // 0xca
+    field public static final int OP_REM_INT = 148; // 0x94
+    field public static final int OP_REM_INT_2ADDR = 180; // 0xb4
+    field public static final int OP_REM_INT_LIT16 = 212; // 0xd4
+    field public static final int OP_REM_INT_LIT8 = 220; // 0xdc
+    field public static final int OP_REM_LONG = 159; // 0x9f
+    field public static final int OP_REM_LONG_2ADDR = 191; // 0xbf
+    field public static final int OP_RETURN = 15; // 0xf
+    field public static final int OP_RETURN_OBJECT = 17; // 0x11
+    field public static final int OP_RETURN_VOID = 14; // 0xe
+    field public static final int OP_RETURN_WIDE = 16; // 0x10
+    field public static final int OP_RSUB_INT = 209; // 0xd1
+    field public static final int OP_RSUB_INT_LIT8 = 217; // 0xd9
+    field public static final int OP_SGET = 96; // 0x60
+    field public static final int OP_SGET_BOOLEAN = 99; // 0x63
+    field public static final int OP_SGET_BOOLEAN_JUMBO = 6143; // 0x17ff
+    field public static final int OP_SGET_BYTE = 100; // 0x64
+    field public static final int OP_SGET_BYTE_JUMBO = 6399; // 0x18ff
+    field public static final int OP_SGET_CHAR = 101; // 0x65
+    field public static final int OP_SGET_CHAR_JUMBO = 6655; // 0x19ff
+    field public static final int OP_SGET_JUMBO = 5375; // 0x14ff
+    field public static final int OP_SGET_OBJECT = 98; // 0x62
+    field public static final int OP_SGET_OBJECT_JUMBO = 5887; // 0x16ff
+    field public static final int OP_SGET_SHORT = 102; // 0x66
+    field public static final int OP_SGET_SHORT_JUMBO = 6911; // 0x1aff
+    field public static final int OP_SGET_WIDE = 97; // 0x61
+    field public static final int OP_SGET_WIDE_JUMBO = 5631; // 0x15ff
+    field @Deprecated public static final int OP_SGET_WIDE_VOLATILE = 234; // 0xea
+    field public static final int OP_SHL_INT = 152; // 0x98
+    field public static final int OP_SHL_INT_2ADDR = 184; // 0xb8
+    field public static final int OP_SHL_INT_LIT8 = 224; // 0xe0
+    field public static final int OP_SHL_LONG = 163; // 0xa3
+    field public static final int OP_SHL_LONG_2ADDR = 195; // 0xc3
+    field public static final int OP_SHR_INT = 153; // 0x99
+    field public static final int OP_SHR_INT_2ADDR = 185; // 0xb9
+    field public static final int OP_SHR_INT_LIT8 = 225; // 0xe1
+    field public static final int OP_SHR_LONG = 164; // 0xa4
+    field public static final int OP_SHR_LONG_2ADDR = 196; // 0xc4
+    field public static final int OP_SPARSE_SWITCH = 44; // 0x2c
+    field public static final int OP_SPUT = 103; // 0x67
+    field public static final int OP_SPUT_BOOLEAN = 106; // 0x6a
+    field public static final int OP_SPUT_BOOLEAN_JUMBO = 7935; // 0x1eff
+    field public static final int OP_SPUT_BYTE = 107; // 0x6b
+    field public static final int OP_SPUT_BYTE_JUMBO = 8191; // 0x1fff
+    field public static final int OP_SPUT_CHAR = 108; // 0x6c
+    field public static final int OP_SPUT_CHAR_JUMBO = 8447; // 0x20ff
+    field public static final int OP_SPUT_JUMBO = 7167; // 0x1bff
+    field public static final int OP_SPUT_OBJECT = 105; // 0x69
+    field public static final int OP_SPUT_OBJECT_JUMBO = 7679; // 0x1dff
+    field public static final int OP_SPUT_SHORT = 109; // 0x6d
+    field public static final int OP_SPUT_SHORT_JUMBO = 8703; // 0x21ff
+    field public static final int OP_SPUT_WIDE = 104; // 0x68
+    field public static final int OP_SPUT_WIDE_JUMBO = 7423; // 0x1cff
+    field @Deprecated public static final int OP_SPUT_WIDE_VOLATILE = 235; // 0xeb
+    field public static final int OP_SUB_DOUBLE = 172; // 0xac
+    field public static final int OP_SUB_DOUBLE_2ADDR = 204; // 0xcc
+    field public static final int OP_SUB_FLOAT = 167; // 0xa7
+    field public static final int OP_SUB_FLOAT_2ADDR = 199; // 0xc7
+    field public static final int OP_SUB_INT = 145; // 0x91
+    field public static final int OP_SUB_INT_2ADDR = 177; // 0xb1
+    field public static final int OP_SUB_LONG = 156; // 0x9c
+    field public static final int OP_SUB_LONG_2ADDR = 188; // 0xbc
+    field public static final int OP_THROW = 39; // 0x27
+    field @Deprecated public static final int OP_THROW_VERIFICATION_ERROR = 237; // 0xed
+    field public static final int OP_USHR_INT = 154; // 0x9a
+    field public static final int OP_USHR_INT_2ADDR = 186; // 0xba
+    field public static final int OP_USHR_INT_LIT8 = 226; // 0xe2
+    field public static final int OP_USHR_LONG = 165; // 0xa5
+    field public static final int OP_USHR_LONG_2ADDR = 197; // 0xc5
+    field public static final int OP_XOR_INT = 151; // 0x97
+    field public static final int OP_XOR_INT_2ADDR = 183; // 0xb7
+    field public static final int OP_XOR_INT_LIT16 = 215; // 0xd7
+    field public static final int OP_XOR_INT_LIT8 = 223; // 0xdf
+    field public static final int OP_XOR_LONG = 162; // 0xa2
+    field public static final int OP_XOR_LONG_2ADDR = 194; // 0xc2
+  }
+
+}
+
+package dalvik.system {
+
+  public class BaseDexClassLoader extends java.lang.ClassLoader {
+    ctor public BaseDexClassLoader(String, java.io.File, String, ClassLoader);
+    method public String findLibrary(String);
+    method protected java.util.Enumeration<java.net.URL> findResources(String);
+  }
+
+  public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader {
+    ctor public DelegateLastClassLoader(String, ClassLoader);
+    ctor public DelegateLastClassLoader(String, String, ClassLoader);
+    ctor public DelegateLastClassLoader(@NonNull String, @Nullable String, @Nullable ClassLoader, boolean);
+  }
+
+  public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public DexClassLoader(String, String, String, ClassLoader);
+  }
+
+  @Deprecated public final class DexFile {
+    ctor @Deprecated public DexFile(java.io.File) throws java.io.IOException;
+    ctor @Deprecated public DexFile(String) throws java.io.IOException;
+    method @Deprecated public void close() throws java.io.IOException;
+    method @Deprecated public java.util.Enumeration<java.lang.String> entries();
+    method @Deprecated public String getName();
+    method @Deprecated public static boolean isDexOptNeeded(String) throws java.io.FileNotFoundException, java.io.IOException;
+    method @Deprecated public Class loadClass(String, ClassLoader);
+    method @Deprecated public static dalvik.system.DexFile loadDex(String, String, int) throws java.io.IOException;
+  }
+
+  public final class InMemoryDexClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public InMemoryDexClassLoader(@NonNull java.nio.ByteBuffer[], @Nullable String, @Nullable ClassLoader);
+    ctor public InMemoryDexClassLoader(@NonNull java.nio.ByteBuffer[], @Nullable ClassLoader);
+    ctor public InMemoryDexClassLoader(@NonNull java.nio.ByteBuffer, @Nullable ClassLoader);
+  }
+
+  public class PathClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public PathClassLoader(String, ClassLoader);
+    ctor public PathClassLoader(String, String, ClassLoader);
+  }
+
+}
+
+package java.awt.font {
+
+  public final class NumericShaper implements java.io.Serializable {
+    method public static java.awt.font.NumericShaper getContextualShaper(int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>);
+    method public static java.awt.font.NumericShaper getContextualShaper(int, int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>, java.awt.font.NumericShaper.Range);
+    method public java.util.Set<java.awt.font.NumericShaper.Range> getRangeSet();
+    method public int getRanges();
+    method public static java.awt.font.NumericShaper getShaper(int);
+    method public static java.awt.font.NumericShaper getShaper(java.awt.font.NumericShaper.Range);
+    method public boolean isContextual();
+    method public void shape(char[], int, int);
+    method public void shape(char[], int, int, int);
+    method public void shape(char[], int, int, java.awt.font.NumericShaper.Range);
+    field public static final int ALL_RANGES = 524287; // 0x7ffff
+    field public static final int ARABIC = 2; // 0x2
+    field public static final int BENGALI = 16; // 0x10
+    field public static final int DEVANAGARI = 8; // 0x8
+    field public static final int EASTERN_ARABIC = 4; // 0x4
+    field public static final int ETHIOPIC = 65536; // 0x10000
+    field public static final int EUROPEAN = 1; // 0x1
+    field public static final int GUJARATI = 64; // 0x40
+    field public static final int GURMUKHI = 32; // 0x20
+    field public static final int KANNADA = 1024; // 0x400
+    field public static final int KHMER = 131072; // 0x20000
+    field public static final int LAO = 8192; // 0x2000
+    field public static final int MALAYALAM = 2048; // 0x800
+    field public static final int MONGOLIAN = 262144; // 0x40000
+    field public static final int MYANMAR = 32768; // 0x8000
+    field public static final int ORIYA = 128; // 0x80
+    field public static final int TAMIL = 256; // 0x100
+    field public static final int TELUGU = 512; // 0x200
+    field public static final int THAI = 4096; // 0x1000
+    field public static final int TIBETAN = 16384; // 0x4000
+  }
+
+  public enum NumericShaper.Range {
+    enum_constant public static final java.awt.font.NumericShaper.Range ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range BALINESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range BENGALI;
+    enum_constant public static final java.awt.font.NumericShaper.Range CHAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range DEVANAGARI;
+    enum_constant public static final java.awt.font.NumericShaper.Range EASTERN_ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range ETHIOPIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range EUROPEAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range GUJARATI;
+    enum_constant public static final java.awt.font.NumericShaper.Range GURMUKHI;
+    enum_constant public static final java.awt.font.NumericShaper.Range JAVANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range KANNADA;
+    enum_constant public static final java.awt.font.NumericShaper.Range KAYAH_LI;
+    enum_constant public static final java.awt.font.NumericShaper.Range KHMER;
+    enum_constant public static final java.awt.font.NumericShaper.Range LAO;
+    enum_constant public static final java.awt.font.NumericShaper.Range LEPCHA;
+    enum_constant public static final java.awt.font.NumericShaper.Range LIMBU;
+    enum_constant public static final java.awt.font.NumericShaper.Range MALAYALAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range MEETEI_MAYEK;
+    enum_constant public static final java.awt.font.NumericShaper.Range MONGOLIAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR_SHAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range NEW_TAI_LUE;
+    enum_constant public static final java.awt.font.NumericShaper.Range NKO;
+    enum_constant public static final java.awt.font.NumericShaper.Range OL_CHIKI;
+    enum_constant public static final java.awt.font.NumericShaper.Range ORIYA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SAURASHTRA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SUNDANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_HORA;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_THAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAMIL;
+    enum_constant public static final java.awt.font.NumericShaper.Range TELUGU;
+    enum_constant public static final java.awt.font.NumericShaper.Range THAI;
+    enum_constant public static final java.awt.font.NumericShaper.Range TIBETAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range VAI;
+  }
+
+  public final class TextAttribute extends java.text.AttributedCharacterIterator.Attribute {
+    ctor protected TextAttribute(String);
+    field public static final java.awt.font.TextAttribute BACKGROUND;
+    field public static final java.awt.font.TextAttribute BIDI_EMBEDDING;
+    field public static final java.awt.font.TextAttribute CHAR_REPLACEMENT;
+    field public static final java.awt.font.TextAttribute FAMILY;
+    field public static final java.awt.font.TextAttribute FONT;
+    field public static final java.awt.font.TextAttribute FOREGROUND;
+    field public static final java.awt.font.TextAttribute INPUT_METHOD_HIGHLIGHT;
+    field public static final java.awt.font.TextAttribute INPUT_METHOD_UNDERLINE;
+    field public static final java.awt.font.TextAttribute JUSTIFICATION;
+    field public static final Float JUSTIFICATION_FULL;
+    field public static final Float JUSTIFICATION_NONE;
+    field public static final java.awt.font.TextAttribute KERNING;
+    field public static final Integer KERNING_ON;
+    field public static final java.awt.font.TextAttribute LIGATURES;
+    field public static final Integer LIGATURES_ON;
+    field public static final java.awt.font.TextAttribute NUMERIC_SHAPING;
+    field public static final java.awt.font.TextAttribute POSTURE;
+    field public static final Float POSTURE_OBLIQUE;
+    field public static final Float POSTURE_REGULAR;
+    field public static final java.awt.font.TextAttribute RUN_DIRECTION;
+    field public static final Boolean RUN_DIRECTION_LTR;
+    field public static final Boolean RUN_DIRECTION_RTL;
+    field public static final java.awt.font.TextAttribute SIZE;
+    field public static final java.awt.font.TextAttribute STRIKETHROUGH;
+    field public static final Boolean STRIKETHROUGH_ON;
+    field public static final java.awt.font.TextAttribute SUPERSCRIPT;
+    field public static final Integer SUPERSCRIPT_SUB;
+    field public static final Integer SUPERSCRIPT_SUPER;
+    field public static final java.awt.font.TextAttribute SWAP_COLORS;
+    field public static final Boolean SWAP_COLORS_ON;
+    field public static final java.awt.font.TextAttribute TRACKING;
+    field public static final Float TRACKING_LOOSE;
+    field public static final Float TRACKING_TIGHT;
+    field public static final java.awt.font.TextAttribute TRANSFORM;
+    field public static final java.awt.font.TextAttribute UNDERLINE;
+    field public static final Integer UNDERLINE_LOW_DASHED;
+    field public static final Integer UNDERLINE_LOW_DOTTED;
+    field public static final Integer UNDERLINE_LOW_GRAY;
+    field public static final Integer UNDERLINE_LOW_ONE_PIXEL;
+    field public static final Integer UNDERLINE_LOW_TWO_PIXEL;
+    field public static final Integer UNDERLINE_ON;
+    field public static final java.awt.font.TextAttribute WEIGHT;
+    field public static final Float WEIGHT_BOLD;
+    field public static final Float WEIGHT_DEMIBOLD;
+    field public static final Float WEIGHT_DEMILIGHT;
+    field public static final Float WEIGHT_EXTRABOLD;
+    field public static final Float WEIGHT_EXTRA_LIGHT;
+    field public static final Float WEIGHT_HEAVY;
+    field public static final Float WEIGHT_LIGHT;
+    field public static final Float WEIGHT_MEDIUM;
+    field public static final Float WEIGHT_REGULAR;
+    field public static final Float WEIGHT_SEMIBOLD;
+    field public static final Float WEIGHT_ULTRABOLD;
+    field public static final java.awt.font.TextAttribute WIDTH;
+    field public static final Float WIDTH_CONDENSED;
+    field public static final Float WIDTH_EXTENDED;
+    field public static final Float WIDTH_REGULAR;
+    field public static final Float WIDTH_SEMI_CONDENSED;
+    field public static final Float WIDTH_SEMI_EXTENDED;
+  }
+
+}
+
+package java.beans {
+
+  public class IndexedPropertyChangeEvent extends java.beans.PropertyChangeEvent {
+    ctor public IndexedPropertyChangeEvent(Object, String, Object, Object, int);
+    method public int getIndex();
+  }
+
+  public class PropertyChangeEvent extends java.util.EventObject {
+    ctor public PropertyChangeEvent(Object, String, Object, Object);
+    method public Object getNewValue();
+    method public Object getOldValue();
+    method public Object getPropagationId();
+    method public String getPropertyName();
+    method public void setPropagationId(Object);
+  }
+
+  public interface PropertyChangeListener extends java.util.EventListener {
+    method public void propertyChange(java.beans.PropertyChangeEvent);
+  }
+
+  public class PropertyChangeListenerProxy extends java.util.EventListenerProxy<java.beans.PropertyChangeListener> implements java.beans.PropertyChangeListener {
+    ctor public PropertyChangeListenerProxy(String, java.beans.PropertyChangeListener);
+    method public String getPropertyName();
+    method public void propertyChange(java.beans.PropertyChangeEvent);
+  }
+
+  public class PropertyChangeSupport implements java.io.Serializable {
+    ctor public PropertyChangeSupport(Object);
+    method public void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void addPropertyChangeListener(String, java.beans.PropertyChangeListener);
+    method public void fireIndexedPropertyChange(String, int, Object, Object);
+    method public void fireIndexedPropertyChange(String, int, int, int);
+    method public void fireIndexedPropertyChange(String, int, boolean, boolean);
+    method public void firePropertyChange(String, Object, Object);
+    method public void firePropertyChange(String, int, int);
+    method public void firePropertyChange(String, boolean, boolean);
+    method public void firePropertyChange(java.beans.PropertyChangeEvent);
+    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners();
+    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(String);
+    method public boolean hasListeners(String);
+    method public void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void removePropertyChangeListener(String, java.beans.PropertyChangeListener);
+  }
+
+}
+
+package java.io {
+
+  public class BufferedInputStream extends java.io.FilterInputStream {
+    ctor public BufferedInputStream(java.io.InputStream);
+    ctor public BufferedInputStream(java.io.InputStream, int);
+    field protected volatile byte[] buf;
+    field protected int count;
+    field protected int marklimit;
+    field protected int markpos;
+    field protected int pos;
+  }
+
+  public class BufferedOutputStream extends java.io.FilterOutputStream {
+    ctor public BufferedOutputStream(java.io.OutputStream);
+    ctor public BufferedOutputStream(java.io.OutputStream, int);
+    field protected byte[] buf;
+    field protected int count;
+  }
+
+  public class BufferedReader extends java.io.Reader {
+    ctor public BufferedReader(java.io.Reader, int);
+    ctor public BufferedReader(java.io.Reader);
+    method public void close() throws java.io.IOException;
+    method public java.util.stream.Stream<java.lang.String> lines();
+    method public int read(char[], int, int) throws java.io.IOException;
+    method public String readLine() throws java.io.IOException;
+  }
+
+  public class BufferedWriter extends java.io.Writer {
+    ctor public BufferedWriter(java.io.Writer);
+    ctor public BufferedWriter(java.io.Writer, int);
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void newLine() throws java.io.IOException;
+    method public void write(char[], int, int) throws java.io.IOException;
+  }
+
+  public class ByteArrayInputStream extends java.io.InputStream {
+    ctor public ByteArrayInputStream(byte[]);
+    ctor public ByteArrayInputStream(byte[], int, int);
+    method public int available();
+    method public int read();
+    method public int read(byte[], int, int);
+    method public void reset();
+    method public long skip(long);
+    field protected byte[] buf;
+    field protected int count;
+    field protected int mark;
+    field protected int pos;
+  }
+
+  public class ByteArrayOutputStream extends java.io.OutputStream {
+    ctor public ByteArrayOutputStream();
+    ctor public ByteArrayOutputStream(int);
+    method public void reset();
+    method public int size();
+    method @NonNull public byte[] toByteArray();
+    method @NonNull public String toString(@NonNull String) throws java.io.UnsupportedEncodingException;
+    method @Deprecated @NonNull public String toString(int);
+    method public void write(int);
+    method public void write(@NonNull byte[], int, int);
+    method public void writeTo(@NonNull java.io.OutputStream) throws java.io.IOException;
+    field @NonNull protected byte[] buf;
+    field protected int count;
+  }
+
+  public class CharArrayReader extends java.io.Reader {
+    ctor public CharArrayReader(char[]);
+    ctor public CharArrayReader(char[], int, int);
+    method public void close();
+    method public int read(char[], int, int) throws java.io.IOException;
+    field protected char[] buf;
+    field protected int count;
+    field protected int markedPos;
+    field protected int pos;
+  }
+
+  public class CharArrayWriter extends java.io.Writer {
+    ctor public CharArrayWriter();
+    ctor public CharArrayWriter(int);
+    method public java.io.CharArrayWriter append(CharSequence);
+    method public java.io.CharArrayWriter append(CharSequence, int, int);
+    method public java.io.CharArrayWriter append(char);
+    method public void close();
+    method public void flush();
+    method public void reset();
+    method public int size();
+    method public char[] toCharArray();
+    method public void write(int);
+    method public void write(char[], int, int);
+    method public void write(String, int, int);
+    method public void writeTo(java.io.Writer) throws java.io.IOException;
+    field protected char[] buf;
+    field protected int count;
+  }
+
+  public class CharConversionException extends java.io.IOException {
+    ctor public CharConversionException();
+    ctor public CharConversionException(String);
+  }
+
+  public interface Closeable extends java.lang.AutoCloseable {
+    method public void close() throws java.io.IOException;
+  }
+
+  public final class Console implements java.io.Flushable {
+    method public void flush();
+    method public java.io.Console format(String, java.lang.Object...);
+    method public java.io.Console printf(String, java.lang.Object...);
+    method public String readLine(String, java.lang.Object...);
+    method public String readLine();
+    method public char[] readPassword(String, java.lang.Object...);
+    method public char[] readPassword();
+    method public java.io.Reader reader();
+    method public java.io.PrintWriter writer();
+  }
+
+  public interface DataInput {
+    method public boolean readBoolean() throws java.io.IOException;
+    method public byte readByte() throws java.io.IOException;
+    method public char readChar() throws java.io.IOException;
+    method public double readDouble() throws java.io.IOException;
+    method public float readFloat() throws java.io.IOException;
+    method public void readFully(byte[]) throws java.io.IOException;
+    method public void readFully(byte[], int, int) throws java.io.IOException;
+    method public int readInt() throws java.io.IOException;
+    method public String readLine() throws java.io.IOException;
+    method public long readLong() throws java.io.IOException;
+    method public short readShort() throws java.io.IOException;
+    method public String readUTF() throws java.io.IOException;
+    method public int readUnsignedByte() throws java.io.IOException;
+    method public int readUnsignedShort() throws java.io.IOException;
+    method public int skipBytes(int) throws java.io.IOException;
+  }
+
+  public class DataInputStream extends java.io.FilterInputStream implements java.io.DataInput {
+    ctor public DataInputStream(java.io.InputStream);
+    method public final int read(byte[]) throws java.io.IOException;
+    method public final int read(byte[], int, int) throws java.io.IOException;
+    method public final boolean readBoolean() throws java.io.IOException;
+    method public final byte readByte() throws java.io.IOException;
+    method public final char readChar() throws java.io.IOException;
+    method public final double readDouble() throws java.io.IOException;
+    method public final float readFloat() throws java.io.IOException;
+    method public final void readFully(byte[]) throws java.io.IOException;
+    method public final void readFully(byte[], int, int) throws java.io.IOException;
+    method public final int readInt() throws java.io.IOException;
+    method @Deprecated public final String readLine() throws java.io.IOException;
+    method public final long readLong() throws java.io.IOException;
+    method public final short readShort() throws java.io.IOException;
+    method public final String readUTF() throws java.io.IOException;
+    method public static final String readUTF(java.io.DataInput) throws java.io.IOException;
+    method public final int readUnsignedByte() throws java.io.IOException;
+    method public final int readUnsignedShort() throws java.io.IOException;
+    method public final int skipBytes(int) throws java.io.IOException;
+  }
+
+  public interface DataOutput {
+    method public void write(int) throws java.io.IOException;
+    method public void write(byte[]) throws java.io.IOException;
+    method public void write(byte[], int, int) throws java.io.IOException;
+    method public void writeBoolean(boolean) throws java.io.IOException;
+    method public void writeByte(int) throws java.io.IOException;
+    method public void writeBytes(String) throws java.io.IOException;
+    method public void writeChar(int) throws java.io.IOException;
+    method public void writeChars(String) throws java.io.IOException;
+    method public void writeDouble(double) throws java.io.IOException;
+    method public void writeFloat(float) throws java.io.IOException;
+    method public void writeInt(int) throws java.io.IOException;
+    method public void writeLong(long) throws java.io.IOException;
+    method public void writeShort(int) throws java.io.IOException;
+    method public void writeUTF(String) throws java.io.IOException;
+  }
+
+  public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
+    ctor public DataOutputStream(java.io.OutputStream);
+    method public final int size();
+    method public final void writeBoolean(boolean) throws java.io.IOException;
+    method public final void writeByte(int) throws java.io.IOException;
+    method public final void writeBytes(String) throws java.io.IOException;
+    method public final void writeChar(int) throws java.io.IOException;
+    method public final void writeChars(String) throws java.io.IOException;
+    method public final void writeDouble(double) throws java.io.IOException;
+    method public final void writeFloat(float) throws java.io.IOException;
+    method public final void writeInt(int) throws java.io.IOException;
+    method public final void writeLong(long) throws java.io.IOException;
+    method public final void writeShort(int) throws java.io.IOException;
+    method public final void writeUTF(String) throws java.io.IOException;
+    field protected int written;
+  }
+
+  public class EOFException extends java.io.IOException {
+    ctor public EOFException();
+    ctor public EOFException(String);
+  }
+
+  public interface Externalizable extends java.io.Serializable {
+    method public void readExternal(java.io.ObjectInput) throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public void writeExternal(java.io.ObjectOutput) throws java.io.IOException;
+  }
+
+  public class File implements java.lang.Comparable<java.io.File> java.io.Serializable {
+    ctor public File(@NonNull String);
+    ctor public File(@Nullable String, @NonNull String);
+    ctor public File(@Nullable java.io.File, @NonNull String);
+    ctor public File(@NonNull java.net.URI);
+    method public boolean canExecute();
+    method public boolean canRead();
+    method public boolean canWrite();
+    method public int compareTo(@NonNull java.io.File);
+    method public boolean createNewFile() throws java.io.IOException;
+    method @NonNull public static java.io.File createTempFile(@NonNull String, @Nullable String, @Nullable java.io.File) throws java.io.IOException;
+    method @NonNull public static java.io.File createTempFile(@NonNull String, @Nullable String) throws java.io.IOException;
+    method public boolean delete();
+    method public void deleteOnExit();
+    method public boolean exists();
+    method @NonNull public java.io.File getAbsoluteFile();
+    method @NonNull public String getAbsolutePath();
+    method @NonNull public java.io.File getCanonicalFile() throws java.io.IOException;
+    method @NonNull public String getCanonicalPath() throws java.io.IOException;
+    method public long getFreeSpace();
+    method @NonNull public String getName();
+    method @Nullable public String getParent();
+    method @Nullable public java.io.File getParentFile();
+    method @NonNull public String getPath();
+    method public long getTotalSpace();
+    method public long getUsableSpace();
+    method public boolean isAbsolute();
+    method public boolean isDirectory();
+    method public boolean isFile();
+    method public boolean isHidden();
+    method public long lastModified();
+    method public long length();
+    method @Nullable public String[] list();
+    method @Nullable public String[] list(@Nullable java.io.FilenameFilter);
+    method @Nullable public java.io.File[] listFiles();
+    method @Nullable public java.io.File[] listFiles(@Nullable java.io.FilenameFilter);
+    method @Nullable public java.io.File[] listFiles(@Nullable java.io.FileFilter);
+    method @NonNull public static java.io.File[] listRoots();
+    method public boolean mkdir();
+    method public boolean mkdirs();
+    method public boolean renameTo(@NonNull java.io.File);
+    method public boolean setExecutable(boolean, boolean);
+    method public boolean setExecutable(boolean);
+    method public boolean setLastModified(long);
+    method public boolean setReadOnly();
+    method public boolean setReadable(boolean, boolean);
+    method public boolean setReadable(boolean);
+    method public boolean setWritable(boolean, boolean);
+    method public boolean setWritable(boolean);
+    method @NonNull public java.nio.file.Path toPath();
+    method @NonNull public java.net.URI toURI();
+    method @Deprecated @NonNull public java.net.URL toURL() throws java.net.MalformedURLException;
+    field @NonNull public static final String pathSeparator;
+    field public static final char pathSeparatorChar;
+    field @NonNull public static final String separator;
+    field public static final char separatorChar;
+  }
+
+  public final class FileDescriptor {
+    ctor public FileDescriptor();
+    method public void sync() throws java.io.SyncFailedException;
+    method public boolean valid();
+    field public static final java.io.FileDescriptor err;
+    field public static final java.io.FileDescriptor in;
+    field public static final java.io.FileDescriptor out;
+  }
+
+  @java.lang.FunctionalInterface public interface FileFilter {
+    method public boolean accept(java.io.File);
+  }
+
+  public class FileInputStream extends java.io.InputStream {
+    ctor public FileInputStream(String) throws java.io.FileNotFoundException;
+    ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public FileInputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
+    method public java.nio.channels.FileChannel getChannel();
+    method public final java.io.FileDescriptor getFD() throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+  }
+
+  public class FileNotFoundException extends java.io.IOException {
+    ctor public FileNotFoundException();
+    ctor public FileNotFoundException(String);
+  }
+
+  public class FileOutputStream extends java.io.OutputStream {
+    ctor public FileOutputStream(String) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(String, boolean) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
+    method public java.nio.channels.FileChannel getChannel();
+    method public final java.io.FileDescriptor getFD() throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+  }
+
+  public final class FilePermission extends java.security.Permission implements java.io.Serializable {
+    ctor public FilePermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public class FileReader extends java.io.InputStreamReader {
+    ctor public FileReader(String) throws java.io.FileNotFoundException;
+    ctor public FileReader(java.io.File) throws java.io.FileNotFoundException;
+    ctor public FileReader(java.io.FileDescriptor);
+  }
+
+  public class FileWriter extends java.io.OutputStreamWriter {
+    ctor public FileWriter(String) throws java.io.IOException;
+    ctor public FileWriter(String, boolean) throws java.io.IOException;
+    ctor public FileWriter(java.io.File) throws java.io.IOException;
+    ctor public FileWriter(java.io.File, boolean) throws java.io.IOException;
+    ctor public FileWriter(java.io.FileDescriptor);
+  }
+
+  @java.lang.FunctionalInterface public interface FilenameFilter {
+    method public boolean accept(java.io.File, String);
+  }
+
+  public class FilterInputStream extends java.io.InputStream {
+    ctor protected FilterInputStream(java.io.InputStream);
+    method public int read() throws java.io.IOException;
+    field protected volatile java.io.InputStream in;
+  }
+
+  public class FilterOutputStream extends java.io.OutputStream {
+    ctor public FilterOutputStream(java.io.OutputStream);
+    method public void write(int) throws java.io.IOException;
+    field protected java.io.OutputStream out;
+  }
+
+  public abstract class FilterReader extends java.io.Reader {
+    ctor protected FilterReader(java.io.Reader);
+    method public void close() throws java.io.IOException;
+    method public int read(char[], int, int) throws java.io.IOException;
+    field protected java.io.Reader in;
+  }
+
+  public abstract class FilterWriter extends java.io.Writer {
+    ctor protected FilterWriter(java.io.Writer);
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void write(char[], int, int) throws java.io.IOException;
+    field protected java.io.Writer out;
+  }
+
+  public interface Flushable {
+    method public void flush() throws java.io.IOException;
+  }
+
+  public class IOError extends java.lang.Error {
+    ctor public IOError(Throwable);
+  }
+
+  public class IOException extends java.lang.Exception {
+    ctor public IOException();
+    ctor public IOException(String);
+    ctor public IOException(String, Throwable);
+    ctor public IOException(Throwable);
+  }
+
+  public abstract class InputStream implements java.io.Closeable {
+    ctor public InputStream();
+    method public int available() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void mark(int);
+    method public boolean markSupported();
+    method public abstract int read() throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
+    method public int read(byte[], int, int) throws java.io.IOException;
+    method public void reset() throws java.io.IOException;
+    method public long skip(long) throws java.io.IOException;
+  }
+
+  public class InputStreamReader extends java.io.Reader {
+    ctor public InputStreamReader(java.io.InputStream);
+    ctor public InputStreamReader(java.io.InputStream, String) throws java.io.UnsupportedEncodingException;
+    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.Charset);
+    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder);
+    method public void close() throws java.io.IOException;
+    method public String getEncoding();
+    method public int read(char[], int, int) throws java.io.IOException;
+  }
+
+  public class InterruptedIOException extends java.io.IOException {
+    ctor public InterruptedIOException();
+    ctor public InterruptedIOException(String);
+    field public int bytesTransferred;
+  }
+
+  public class InvalidClassException extends java.io.ObjectStreamException {
+    ctor public InvalidClassException(String);
+    ctor public InvalidClassException(String, String);
+    field public String classname;
+  }
+
+  public class InvalidObjectException extends java.io.ObjectStreamException {
+    ctor public InvalidObjectException(String);
+  }
+
+  @Deprecated public class LineNumberInputStream extends java.io.FilterInputStream {
+    ctor @Deprecated public LineNumberInputStream(java.io.InputStream);
+    method @Deprecated public int getLineNumber();
+    method @Deprecated public void setLineNumber(int);
+  }
+
+  public class LineNumberReader extends java.io.BufferedReader {
+    ctor public LineNumberReader(java.io.Reader);
+    ctor public LineNumberReader(java.io.Reader, int);
+    method public int getLineNumber();
+    method public void setLineNumber(int);
+  }
+
+  public class NotActiveException extends java.io.ObjectStreamException {
+    ctor public NotActiveException(String);
+    ctor public NotActiveException();
+  }
+
+  public class NotSerializableException extends java.io.ObjectStreamException {
+    ctor public NotSerializableException(String);
+    ctor public NotSerializableException();
+  }
+
+  public interface ObjectInput extends java.io.DataInput java.lang.AutoCloseable {
+    method public int available() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
+    method public int read(byte[], int, int) throws java.io.IOException;
+    method public Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public long skip(long) throws java.io.IOException;
+  }
+
+  public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants {
+    ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor protected ObjectInputStream() throws java.io.IOException, java.lang.SecurityException;
+    method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected boolean enableResolveObject(boolean) throws java.lang.SecurityException;
+    method public int read() throws java.io.IOException;
+    method public boolean readBoolean() throws java.io.IOException;
+    method public byte readByte() throws java.io.IOException;
+    method public char readChar() throws java.io.IOException;
+    method protected java.io.ObjectStreamClass readClassDescriptor() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public double readDouble() throws java.io.IOException;
+    method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public float readFloat() throws java.io.IOException;
+    method public void readFully(byte[]) throws java.io.IOException;
+    method public void readFully(byte[], int, int) throws java.io.IOException;
+    method public int readInt() throws java.io.IOException;
+    method @Deprecated public String readLine() throws java.io.IOException;
+    method public long readLong() throws java.io.IOException;
+    method public final Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public short readShort() throws java.io.IOException;
+    method protected void readStreamHeader() throws java.io.IOException, java.io.StreamCorruptedException;
+    method public String readUTF() throws java.io.IOException;
+    method public Object readUnshared() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public int readUnsignedByte() throws java.io.IOException;
+    method public int readUnsignedShort() throws java.io.IOException;
+    method public void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException;
+    method protected Class<?> resolveClass(java.io.ObjectStreamClass) throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected Object resolveObject(Object) throws java.io.IOException;
+    method protected Class<?> resolveProxyClass(String[]) throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public int skipBytes(int) throws java.io.IOException;
+  }
+
+  public abstract static class ObjectInputStream.GetField {
+    ctor public ObjectInputStream.GetField();
+    method public abstract boolean defaulted(String) throws java.io.IOException;
+    method public abstract boolean get(String, boolean) throws java.io.IOException;
+    method public abstract byte get(String, byte) throws java.io.IOException;
+    method public abstract char get(String, char) throws java.io.IOException;
+    method public abstract short get(String, short) throws java.io.IOException;
+    method public abstract int get(String, int) throws java.io.IOException;
+    method public abstract long get(String, long) throws java.io.IOException;
+    method public abstract float get(String, float) throws java.io.IOException;
+    method public abstract double get(String, double) throws java.io.IOException;
+    method public abstract Object get(String, Object) throws java.io.IOException;
+    method public abstract java.io.ObjectStreamClass getObjectStreamClass();
+  }
+
+  public interface ObjectInputValidation {
+    method public void validateObject() throws java.io.InvalidObjectException;
+  }
+
+  public interface ObjectOutput extends java.io.DataOutput java.lang.AutoCloseable {
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void writeObject(Object) throws java.io.IOException;
+  }
+
+  public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants {
+    ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor protected ObjectOutputStream() throws java.io.IOException, java.lang.SecurityException;
+    method protected void annotateClass(Class<?>) throws java.io.IOException;
+    method protected void annotateProxyClass(Class<?>) throws java.io.IOException;
+    method public void defaultWriteObject() throws java.io.IOException;
+    method protected void drain() throws java.io.IOException;
+    method protected boolean enableReplaceObject(boolean) throws java.lang.SecurityException;
+    method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException;
+    method protected Object replaceObject(Object) throws java.io.IOException;
+    method public void reset() throws java.io.IOException;
+    method public void useProtocolVersion(int) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+    method public void writeBoolean(boolean) throws java.io.IOException;
+    method public void writeByte(int) throws java.io.IOException;
+    method public void writeBytes(String) throws java.io.IOException;
+    method public void writeChar(int) throws java.io.IOException;
+    method public void writeChars(String) throws java.io.IOException;
+    method protected void writeClassDescriptor(java.io.ObjectStreamClass) throws java.io.IOException;
+    method public void writeDouble(double) throws java.io.IOException;
+    method public void writeFields() throws java.io.IOException;
+    method public void writeFloat(float) throws java.io.IOException;
+    method public void writeInt(int) throws java.io.IOException;
+    method public void writeLong(long) throws java.io.IOException;
+    method public final void writeObject(Object) throws java.io.IOException;
+    method protected void writeObjectOverride(Object) throws java.io.IOException;
+    method public void writeShort(int) throws java.io.IOException;
+    method protected void writeStreamHeader() throws java.io.IOException;
+    method public void writeUTF(String) throws java.io.IOException;
+    method public void writeUnshared(Object) throws java.io.IOException;
+  }
+
+  public abstract static class ObjectOutputStream.PutField {
+    ctor public ObjectOutputStream.PutField();
+    method public abstract void put(String, boolean);
+    method public abstract void put(String, byte);
+    method public abstract void put(String, char);
+    method public abstract void put(String, short);
+    method public abstract void put(String, int);
+    method public abstract void put(String, long);
+    method public abstract void put(String, float);
+    method public abstract void put(String, double);
+    method public abstract void put(String, Object);
+    method @Deprecated public abstract void write(java.io.ObjectOutput) throws java.io.IOException;
+  }
+
+  public class ObjectStreamClass implements java.io.Serializable {
+    method public Class<?> forClass();
+    method public java.io.ObjectStreamField getField(String);
+    method public java.io.ObjectStreamField[] getFields();
+    method public String getName();
+    method public long getSerialVersionUID();
+    method public static java.io.ObjectStreamClass lookup(Class<?>);
+    method public static java.io.ObjectStreamClass lookupAny(Class<?>);
+    field public static final java.io.ObjectStreamField[] NO_FIELDS;
+  }
+
+  public interface ObjectStreamConstants {
+    field public static final int PROTOCOL_VERSION_1 = 1; // 0x1
+    field public static final int PROTOCOL_VERSION_2 = 2; // 0x2
+    field public static final byte SC_BLOCK_DATA = 8; // 0x8
+    field public static final byte SC_ENUM = 16; // 0x10
+    field public static final byte SC_EXTERNALIZABLE = 4; // 0x4
+    field public static final byte SC_SERIALIZABLE = 2; // 0x2
+    field public static final byte SC_WRITE_METHOD = 1; // 0x1
+    field public static final short STREAM_MAGIC = -21267; // 0xffffaced
+    field public static final short STREAM_VERSION = 5; // 0x5
+    field public static final java.io.SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION;
+    field public static final java.io.SerializablePermission SUBSTITUTION_PERMISSION;
+    field public static final byte TC_ARRAY = 117; // 0x75
+    field public static final byte TC_BASE = 112; // 0x70
+    field public static final byte TC_BLOCKDATA = 119; // 0x77
+    field public static final byte TC_BLOCKDATALONG = 122; // 0x7a
+    field public static final byte TC_CLASS = 118; // 0x76
+    field public static final byte TC_CLASSDESC = 114; // 0x72
+    field public static final byte TC_ENDBLOCKDATA = 120; // 0x78
+    field public static final byte TC_ENUM = 126; // 0x7e
+    field public static final byte TC_EXCEPTION = 123; // 0x7b
+    field public static final byte TC_LONGSTRING = 124; // 0x7c
+    field public static final byte TC_MAX = 126; // 0x7e
+    field public static final byte TC_NULL = 112; // 0x70
+    field public static final byte TC_OBJECT = 115; // 0x73
+    field public static final byte TC_PROXYCLASSDESC = 125; // 0x7d
+    field public static final byte TC_REFERENCE = 113; // 0x71
+    field public static final byte TC_RESET = 121; // 0x79
+    field public static final byte TC_STRING = 116; // 0x74
+    field public static final int baseWireHandle = 8257536; // 0x7e0000
+  }
+
+  public abstract class ObjectStreamException extends java.io.IOException {
+    ctor protected ObjectStreamException(String);
+    ctor protected ObjectStreamException();
+  }
+
+  public class ObjectStreamField implements java.lang.Comparable<java.lang.Object> {
+    ctor public ObjectStreamField(String, Class<?>);
+    ctor public ObjectStreamField(String, Class<?>, boolean);
+    method public int compareTo(Object);
+    method public String getName();
+    method public int getOffset();
+    method public Class<?> getType();
+    method public char getTypeCode();
+    method public String getTypeString();
+    method public boolean isPrimitive();
+    method public boolean isUnshared();
+    method protected void setOffset(int);
+  }
+
+  public class OptionalDataException extends java.io.ObjectStreamException {
+    field public boolean eof;
+    field public int length;
+  }
+
+  public abstract class OutputStream implements java.io.Closeable java.io.Flushable {
+    ctor public OutputStream();
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public abstract void write(int) throws java.io.IOException;
+    method public void write(byte[]) throws java.io.IOException;
+    method public void write(byte[], int, int) throws java.io.IOException;
+  }
+
+  public class OutputStreamWriter extends java.io.Writer {
+    ctor public OutputStreamWriter(java.io.OutputStream, String) throws java.io.UnsupportedEncodingException;
+    ctor public OutputStreamWriter(java.io.OutputStream);
+    ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.Charset);
+    ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.CharsetEncoder);
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public String getEncoding();
+    method public void write(char[], int, int) throws java.io.IOException;
+  }
+
+  public class PipedInputStream extends java.io.InputStream {
+    ctor public PipedInputStream(java.io.PipedOutputStream) throws java.io.IOException;
+    ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
+    ctor public PipedInputStream();
+    ctor public PipedInputStream(int);
+    method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method protected void receive(int) throws java.io.IOException;
+    field protected static final int PIPE_SIZE = 1024; // 0x400
+    field protected byte[] buffer;
+    field protected int in;
+    field protected int out;
+  }
+
+  public class PipedOutputStream extends java.io.OutputStream {
+    ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
+    ctor public PipedOutputStream();
+    method public void connect(java.io.PipedInputStream) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+  }
+
+  public class PipedReader extends java.io.Reader {
+    ctor public PipedReader(java.io.PipedWriter) throws java.io.IOException;
+    ctor public PipedReader(java.io.PipedWriter, int) throws java.io.IOException;
+    ctor public PipedReader();
+    ctor public PipedReader(int);
+    method public void close() throws java.io.IOException;
+    method public void connect(java.io.PipedWriter) throws java.io.IOException;
+    method public int read(char[], int, int) throws java.io.IOException;
+  }
+
+  public class PipedWriter extends java.io.Writer {
+    ctor public PipedWriter(java.io.PipedReader) throws java.io.IOException;
+    ctor public PipedWriter();
+    method public void close() throws java.io.IOException;
+    method public void connect(java.io.PipedReader) throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void write(char[], int, int) throws java.io.IOException;
+  }
+
+  public class PrintStream extends java.io.FilterOutputStream implements java.lang.Appendable java.io.Closeable {
+    ctor public PrintStream(java.io.OutputStream);
+    ctor public PrintStream(java.io.OutputStream, boolean);
+    ctor public PrintStream(java.io.OutputStream, boolean, String) throws java.io.UnsupportedEncodingException;
+    ctor public PrintStream(String) throws java.io.FileNotFoundException;
+    ctor public PrintStream(String, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintStream(java.io.File, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    method public java.io.PrintStream append(CharSequence);
+    method public java.io.PrintStream append(CharSequence, int, int);
+    method public java.io.PrintStream append(char);
+    method public boolean checkError();
+    method protected void clearError();
+    method public void close();
+    method public void flush();
+    method public java.io.PrintStream format(String, java.lang.Object...);
+    method public java.io.PrintStream format(java.util.Locale, String, java.lang.Object...);
+    method public void print(boolean);
+    method public void print(char);
+    method public void print(int);
+    method public void print(long);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
+    method public void print(String);
+    method public void print(Object);
+    method public java.io.PrintStream printf(String, java.lang.Object...);
+    method public java.io.PrintStream printf(java.util.Locale, String, java.lang.Object...);
+    method public void println();
+    method public void println(boolean);
+    method public void println(char);
+    method public void println(int);
+    method public void println(long);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
+    method public void println(String);
+    method public void println(Object);
+    method protected void setError();
+    method public void write(int);
+    method public void write(byte[], int, int);
+  }
+
+  public class PrintWriter extends java.io.Writer {
+    ctor public PrintWriter(@NonNull java.io.Writer);
+    ctor public PrintWriter(@NonNull java.io.Writer, boolean);
+    ctor public PrintWriter(@NonNull java.io.OutputStream);
+    ctor public PrintWriter(@NonNull java.io.OutputStream, boolean);
+    ctor public PrintWriter(@NonNull String) throws java.io.FileNotFoundException;
+    ctor public PrintWriter(@NonNull String, @NonNull String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintWriter(@NonNull java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintWriter(@NonNull java.io.File, @NonNull String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    method @NonNull public java.io.PrintWriter append(@Nullable CharSequence);
+    method @NonNull public java.io.PrintWriter append(@Nullable CharSequence, int, int);
+    method @NonNull public java.io.PrintWriter append(char);
+    method public boolean checkError();
+    method protected void clearError();
+    method public void close();
+    method public void flush();
+    method @NonNull public java.io.PrintWriter format(@NonNull String, @NonNull java.lang.Object...);
+    method @NonNull public java.io.PrintWriter format(@Nullable java.util.Locale, @NonNull String, @NonNull java.lang.Object...);
+    method public void print(boolean);
+    method public void print(char);
+    method public void print(int);
+    method public void print(long);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
+    method public void print(@Nullable String);
+    method public void print(@Nullable Object);
+    method @NonNull public java.io.PrintWriter printf(@NonNull String, @NonNull java.lang.Object...);
+    method @NonNull public java.io.PrintWriter printf(@Nullable java.util.Locale, @NonNull String, @NonNull java.lang.Object...);
+    method public void println();
+    method public void println(boolean);
+    method public void println(char);
+    method public void println(int);
+    method public void println(long);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
+    method public void println(@Nullable String);
+    method public void println(@Nullable Object);
+    method protected void setError();
+    method public void write(int);
+    method public void write(char[], int, int);
+    method public void write(char[]);
+    method public void write(@NonNull String, int, int);
+    method public void write(@NonNull String);
+    field protected java.io.Writer out;
+  }
+
+  public class PushbackInputStream extends java.io.FilterInputStream {
+    ctor public PushbackInputStream(java.io.InputStream, int);
+    ctor public PushbackInputStream(java.io.InputStream);
+    method public void unread(int) throws java.io.IOException;
+    method public void unread(byte[], int, int) throws java.io.IOException;
+    method public void unread(byte[]) throws java.io.IOException;
+    field protected byte[] buf;
+    field protected int pos;
+  }
+
+  public class PushbackReader extends java.io.FilterReader {
+    ctor public PushbackReader(java.io.Reader, int);
+    ctor public PushbackReader(java.io.Reader);
+    method public void unread(int) throws java.io.IOException;
+    method public void unread(char[], int, int) throws java.io.IOException;
+    method public void unread(char[]) throws java.io.IOException;
+  }
+
+  public class RandomAccessFile implements java.io.Closeable java.io.DataInput java.io.DataOutput {
+    ctor public RandomAccessFile(String, String) throws java.io.FileNotFoundException;
+    ctor public RandomAccessFile(java.io.File, String) throws java.io.FileNotFoundException;
+    method public void close() throws java.io.IOException;
+    method public final java.nio.channels.FileChannel getChannel();
+    method public final java.io.FileDescriptor getFD() throws java.io.IOException;
+    method public long getFilePointer() throws java.io.IOException;
+    method public long length() throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method public int read(byte[], int, int) throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
+    method public final boolean readBoolean() throws java.io.IOException;
+    method public final byte readByte() throws java.io.IOException;
+    method public final char readChar() throws java.io.IOException;
+    method public final double readDouble() throws java.io.IOException;
+    method public final float readFloat() throws java.io.IOException;
+    method public final void readFully(byte[]) throws java.io.IOException;
+    method public final void readFully(byte[], int, int) throws java.io.IOException;
+    method public final int readInt() throws java.io.IOException;
+    method public final String readLine() throws java.io.IOException;
+    method public final long readLong() throws java.io.IOException;
+    method public final short readShort() throws java.io.IOException;
+    method public final String readUTF() throws java.io.IOException;
+    method public final int readUnsignedByte() throws java.io.IOException;
+    method public final int readUnsignedShort() throws java.io.IOException;
+    method public void seek(long) throws java.io.IOException;
+    method public void setLength(long) throws java.io.IOException;
+    method public int skipBytes(int) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+    method public void write(byte[]) throws java.io.IOException;
+    method public void write(byte[], int, int) throws java.io.IOException;
+    method public final void writeBoolean(boolean) throws java.io.IOException;
+    method public final void writeByte(int) throws java.io.IOException;
+    method public final void writeBytes(String) throws java.io.IOException;
+    method public final void writeChar(int) throws java.io.IOException;
+    method public final void writeChars(String) throws java.io.IOException;
+    method public final void writeDouble(double) throws java.io.IOException;
+    method public final void writeFloat(float) throws java.io.IOException;
+    method public final void writeInt(int) throws java.io.IOException;
+    method public final void writeLong(long) throws java.io.IOException;
+    method public final void writeShort(int) throws java.io.IOException;
+    method public final void writeUTF(String) throws java.io.IOException;
+  }
+
+  public abstract class Reader implements java.io.Closeable java.lang.Readable {
+    ctor protected Reader();
+    ctor protected Reader(Object);
+    method public void mark(int) throws java.io.IOException;
+    method public boolean markSupported();
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method public int read(char[]) throws java.io.IOException;
+    method public abstract int read(char[], int, int) throws java.io.IOException;
+    method public boolean ready() throws java.io.IOException;
+    method public void reset() throws java.io.IOException;
+    method public long skip(long) throws java.io.IOException;
+    field protected Object lock;
+  }
+
+  public class SequenceInputStream extends java.io.InputStream {
+    ctor public SequenceInputStream(java.util.Enumeration<? extends java.io.InputStream>);
+    ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream);
+    method public int read() throws java.io.IOException;
+  }
+
+  public interface Serializable {
+  }
+
+  public final class SerializablePermission extends java.security.BasicPermission {
+    ctor public SerializablePermission(String);
+    ctor public SerializablePermission(String, String);
+  }
+
+  public class StreamCorruptedException extends java.io.ObjectStreamException {
+    ctor public StreamCorruptedException(String);
+    ctor public StreamCorruptedException();
+  }
+
+  public class StreamTokenizer {
+    ctor @Deprecated public StreamTokenizer(java.io.InputStream);
+    ctor public StreamTokenizer(java.io.Reader);
+    method public void commentChar(int);
+    method public void eolIsSignificant(boolean);
+    method public int lineno();
+    method public void lowerCaseMode(boolean);
+    method public int nextToken() throws java.io.IOException;
+    method public void ordinaryChar(int);
+    method public void ordinaryChars(int, int);
+    method public void parseNumbers();
+    method public void pushBack();
+    method public void quoteChar(int);
+    method public void resetSyntax();
+    method public void slashSlashComments(boolean);
+    method public void slashStarComments(boolean);
+    method public void whitespaceChars(int, int);
+    method public void wordChars(int, int);
+    field public static final int TT_EOF = -1; // 0xffffffff
+    field public static final int TT_EOL = 10; // 0xa
+    field public static final int TT_NUMBER = -2; // 0xfffffffe
+    field public static final int TT_WORD = -3; // 0xfffffffd
+    field public double nval;
+    field public String sval;
+    field public int ttype;
+  }
+
+  @Deprecated public class StringBufferInputStream extends java.io.InputStream {
+    ctor @Deprecated public StringBufferInputStream(String);
+    method @Deprecated public int available();
+    method @Deprecated public int read();
+    method @Deprecated public int read(byte[], int, int);
+    method @Deprecated public void reset();
+    method @Deprecated public long skip(long);
+    field @Deprecated protected String buffer;
+    field @Deprecated protected int count;
+    field @Deprecated protected int pos;
+  }
+
+  public class StringReader extends java.io.Reader {
+    ctor public StringReader(String);
+    method public void close();
+    method public int read(char[], int, int) throws java.io.IOException;
+  }
+
+  public class StringWriter extends java.io.Writer {
+    ctor public StringWriter();
+    ctor public StringWriter(int);
+    method public java.io.StringWriter append(CharSequence);
+    method public java.io.StringWriter append(CharSequence, int, int);
+    method public java.io.StringWriter append(char);
+    method public void close() throws java.io.IOException;
+    method public void flush();
+    method public StringBuffer getBuffer();
+    method public void write(int);
+    method public void write(char[], int, int);
+    method public void write(String);
+    method public void write(String, int, int);
+  }
+
+  public class SyncFailedException extends java.io.IOException {
+    ctor public SyncFailedException(String);
+  }
+
+  public class UTFDataFormatException extends java.io.IOException {
+    ctor public UTFDataFormatException();
+    ctor public UTFDataFormatException(String);
+  }
+
+  public class UncheckedIOException extends java.lang.RuntimeException {
+    ctor public UncheckedIOException(String, java.io.IOException);
+    ctor public UncheckedIOException(java.io.IOException);
+    method public java.io.IOException getCause();
+  }
+
+  public class UnsupportedEncodingException extends java.io.IOException {
+    ctor public UnsupportedEncodingException();
+    ctor public UnsupportedEncodingException(String);
+  }
+
+  public class WriteAbortedException extends java.io.ObjectStreamException {
+    ctor public WriteAbortedException(String, Exception);
+    field public Exception detail;
+  }
+
+  public abstract class Writer implements java.lang.Appendable java.io.Closeable java.io.Flushable {
+    ctor protected Writer();
+    ctor protected Writer(Object);
+    method public java.io.Writer append(CharSequence) throws java.io.IOException;
+    method public java.io.Writer append(CharSequence, int, int) throws java.io.IOException;
+    method public java.io.Writer append(char) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+    method public void write(char[]) throws java.io.IOException;
+    method public abstract void write(char[], int, int) throws java.io.IOException;
+    method public void write(String) throws java.io.IOException;
+    method public void write(String, int, int) throws java.io.IOException;
+    field protected Object lock;
+  }
+
+}
+
+package java.lang {
+
+  public class AbstractMethodError extends java.lang.IncompatibleClassChangeError {
+    ctor public AbstractMethodError();
+    ctor public AbstractMethodError(String);
+  }
+
+  public interface Appendable {
+    method @NonNull public Appendable append(@Nullable CharSequence) throws java.io.IOException;
+    method @NonNull public Appendable append(@Nullable CharSequence, int, int) throws java.io.IOException;
+    method @NonNull public Appendable append(char) throws java.io.IOException;
+  }
+
+  public class ArithmeticException extends java.lang.RuntimeException {
+    ctor public ArithmeticException();
+    ctor public ArithmeticException(String);
+  }
+
+  public class ArrayIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
+    ctor public ArrayIndexOutOfBoundsException();
+    ctor public ArrayIndexOutOfBoundsException(int);
+    ctor public ArrayIndexOutOfBoundsException(String);
+  }
+
+  public class ArrayStoreException extends java.lang.RuntimeException {
+    ctor public ArrayStoreException();
+    ctor public ArrayStoreException(String);
+  }
+
+  public class AssertionError extends java.lang.Error {
+    ctor public AssertionError();
+    ctor public AssertionError(Object);
+    ctor public AssertionError(boolean);
+    ctor public AssertionError(char);
+    ctor public AssertionError(int);
+    ctor public AssertionError(long);
+    ctor public AssertionError(float);
+    ctor public AssertionError(double);
+    ctor public AssertionError(String, Throwable);
+  }
+
+  public interface AutoCloseable {
+    method public void close() throws java.lang.Exception;
+  }
+
+  public final class Boolean implements java.lang.Comparable<java.lang.Boolean> java.io.Serializable {
+    ctor public Boolean(boolean);
+    ctor public Boolean(@Nullable String);
+    method public boolean booleanValue();
+    method public static int compare(boolean, boolean);
+    method public int compareTo(@NonNull Boolean);
+    method public static boolean getBoolean(@NonNull String);
+    method public static int hashCode(boolean);
+    method public static boolean logicalAnd(boolean, boolean);
+    method public static boolean logicalOr(boolean, boolean);
+    method public static boolean logicalXor(boolean, boolean);
+    method public static boolean parseBoolean(@Nullable String);
+    method @NonNull public static String toString(boolean);
+    method @NonNull public static Boolean valueOf(boolean);
+    method @NonNull public static Boolean valueOf(@Nullable String);
+    field public static final Boolean FALSE;
+    field public static final Boolean TRUE;
+    field public static final Class<java.lang.Boolean> TYPE;
+  }
+
+  public class BootstrapMethodError extends java.lang.LinkageError {
+    ctor public BootstrapMethodError();
+    ctor public BootstrapMethodError(String);
+    ctor public BootstrapMethodError(String, Throwable);
+    ctor public BootstrapMethodError(Throwable);
+  }
+
+  public final class Byte extends java.lang.Number implements java.lang.Comparable<java.lang.Byte> {
+    ctor @Deprecated public Byte(byte);
+    ctor @Deprecated public Byte(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int compare(byte, byte);
+    method public int compareTo(@NonNull Byte);
+    method public static int compareUnsigned(byte, byte);
+    method @NonNull public static Byte decode(@NonNull String) throws java.lang.NumberFormatException;
+    method public double doubleValue();
+    method public float floatValue();
+    method public static int hashCode(byte);
+    method public int intValue();
+    method public long longValue();
+    method public static byte parseByte(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static byte parseByte(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static String toString(byte);
+    method public static int toUnsignedInt(byte);
+    method public static long toUnsignedLong(byte);
+    method @NonNull public static Byte valueOf(byte);
+    method @NonNull public static Byte valueOf(@NonNull String, int) throws java.lang.NumberFormatException;
+    method @NonNull public static Byte valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    field public static final int BYTES = 1; // 0x1
+    field public static final byte MAX_VALUE = 127; // 0x7f
+    field public static final byte MIN_VALUE = -128; // 0xffffff80
+    field public static final int SIZE = 8; // 0x8
+    field public static final Class<java.lang.Byte> TYPE;
+  }
+
+  public interface CharSequence {
+    method public char charAt(int);
+    method @NonNull public default java.util.stream.IntStream chars();
+    method @NonNull public default java.util.stream.IntStream codePoints();
+    method public int length();
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String toString();
+  }
+
+  public final class Character implements java.lang.Comparable<java.lang.Character> java.io.Serializable {
+    ctor public Character(char);
+    method public static int charCount(int);
+    method public char charValue();
+    method public static int codePointAt(@NonNull CharSequence, int);
+    method public static int codePointAt(char[], int);
+    method public static int codePointAt(char[], int, int);
+    method public static int codePointBefore(@NonNull CharSequence, int);
+    method public static int codePointBefore(char[], int);
+    method public static int codePointBefore(char[], int, int);
+    method public static int codePointCount(@NonNull CharSequence, int, int);
+    method public static int codePointCount(char[], int, int);
+    method public static int compare(char, char);
+    method public int compareTo(@NonNull Character);
+    method public static int digit(char, int);
+    method public static int digit(int, int);
+    method public static char forDigit(int, int);
+    method public static byte getDirectionality(char);
+    method public static byte getDirectionality(int);
+    method @Nullable public static String getName(int);
+    method public static int getNumericValue(char);
+    method public static int getNumericValue(int);
+    method public static int getType(char);
+    method public static int getType(int);
+    method public static int hashCode(char);
+    method public static char highSurrogate(int);
+    method public static boolean isAlphabetic(int);
+    method public static boolean isBmpCodePoint(int);
+    method public static boolean isDefined(char);
+    method public static boolean isDefined(int);
+    method public static boolean isDigit(char);
+    method public static boolean isDigit(int);
+    method public static boolean isHighSurrogate(char);
+    method public static boolean isISOControl(char);
+    method public static boolean isISOControl(int);
+    method public static boolean isIdentifierIgnorable(char);
+    method public static boolean isIdentifierIgnorable(int);
+    method public static boolean isIdeographic(int);
+    method public static boolean isJavaIdentifierPart(char);
+    method public static boolean isJavaIdentifierPart(int);
+    method public static boolean isJavaIdentifierStart(char);
+    method public static boolean isJavaIdentifierStart(int);
+    method @Deprecated public static boolean isJavaLetter(char);
+    method @Deprecated public static boolean isJavaLetterOrDigit(char);
+    method public static boolean isLetter(char);
+    method public static boolean isLetter(int);
+    method public static boolean isLetterOrDigit(char);
+    method public static boolean isLetterOrDigit(int);
+    method public static boolean isLowSurrogate(char);
+    method public static boolean isLowerCase(char);
+    method public static boolean isLowerCase(int);
+    method public static boolean isMirrored(char);
+    method public static boolean isMirrored(int);
+    method @Deprecated public static boolean isSpace(char);
+    method public static boolean isSpaceChar(char);
+    method public static boolean isSpaceChar(int);
+    method public static boolean isSupplementaryCodePoint(int);
+    method public static boolean isSurrogate(char);
+    method public static boolean isSurrogatePair(char, char);
+    method public static boolean isTitleCase(char);
+    method public static boolean isTitleCase(int);
+    method public static boolean isUnicodeIdentifierPart(char);
+    method public static boolean isUnicodeIdentifierPart(int);
+    method public static boolean isUnicodeIdentifierStart(char);
+    method public static boolean isUnicodeIdentifierStart(int);
+    method public static boolean isUpperCase(char);
+    method public static boolean isUpperCase(int);
+    method public static boolean isValidCodePoint(int);
+    method public static boolean isWhitespace(char);
+    method public static boolean isWhitespace(int);
+    method public static char lowSurrogate(int);
+    method public static int offsetByCodePoints(@NonNull CharSequence, int, int);
+    method public static int offsetByCodePoints(char[], int, int, int, int);
+    method public static char reverseBytes(char);
+    method public static int toChars(int, char[], int);
+    method public static char[] toChars(int);
+    method public static int toCodePoint(char, char);
+    method public static char toLowerCase(char);
+    method public static int toLowerCase(int);
+    method @NonNull public static String toString(char);
+    method public static char toTitleCase(char);
+    method public static int toTitleCase(int);
+    method public static char toUpperCase(char);
+    method public static int toUpperCase(int);
+    method @NonNull public static Character valueOf(char);
+    field public static final int BYTES = 2; // 0x2
+    field public static final byte COMBINING_SPACING_MARK = 8; // 0x8
+    field public static final byte CONNECTOR_PUNCTUATION = 23; // 0x17
+    field public static final byte CONTROL = 15; // 0xf
+    field public static final byte CURRENCY_SYMBOL = 26; // 0x1a
+    field public static final byte DASH_PUNCTUATION = 20; // 0x14
+    field public static final byte DECIMAL_DIGIT_NUMBER = 9; // 0x9
+    field public static final byte DIRECTIONALITY_ARABIC_NUMBER = 6; // 0x6
+    field public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 9; // 0x9
+    field public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 7; // 0x7
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3; // 0x3
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4; // 0x4
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 5; // 0x5
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 14; // 0xe
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 15; // 0xf
+    field public static final byte DIRECTIONALITY_NONSPACING_MARK = 8; // 0x8
+    field public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 13; // 0xd
+    field public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 10; // 0xa
+    field public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 18; // 0x12
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2; // 0x2
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 16; // 0x10
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 17; // 0x11
+    field public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 11; // 0xb
+    field public static final byte DIRECTIONALITY_UNDEFINED = -1; // 0xffffffff
+    field public static final byte DIRECTIONALITY_WHITESPACE = 12; // 0xc
+    field public static final byte ENCLOSING_MARK = 7; // 0x7
+    field public static final byte END_PUNCTUATION = 22; // 0x16
+    field public static final byte FINAL_QUOTE_PUNCTUATION = 30; // 0x1e
+    field public static final byte FORMAT = 16; // 0x10
+    field public static final byte INITIAL_QUOTE_PUNCTUATION = 29; // 0x1d
+    field public static final byte LETTER_NUMBER = 10; // 0xa
+    field public static final byte LINE_SEPARATOR = 13; // 0xd
+    field public static final byte LOWERCASE_LETTER = 2; // 0x2
+    field public static final byte MATH_SYMBOL = 25; // 0x19
+    field public static final int MAX_CODE_POINT = 1114111; // 0x10ffff
+    field public static final char MAX_HIGH_SURROGATE = 56319; // 0xdbff '\udbff'
+    field public static final char MAX_LOW_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final int MAX_RADIX = 36; // 0x24
+    field public static final char MAX_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final char MAX_VALUE = 65535; // 0xffff '\uffff'
+    field public static final int MIN_CODE_POINT = 0; // 0x0
+    field public static final char MIN_HIGH_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final char MIN_LOW_SURROGATE = 56320; // 0xdc00 '\udc00'
+    field public static final int MIN_RADIX = 2; // 0x2
+    field public static final int MIN_SUPPLEMENTARY_CODE_POINT = 65536; // 0x10000
+    field public static final char MIN_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final char MIN_VALUE = 0; // 0x0000 '\u0000'
+    field public static final byte MODIFIER_LETTER = 4; // 0x4
+    field public static final byte MODIFIER_SYMBOL = 27; // 0x1b
+    field public static final byte NON_SPACING_MARK = 6; // 0x6
+    field public static final byte OTHER_LETTER = 5; // 0x5
+    field public static final byte OTHER_NUMBER = 11; // 0xb
+    field public static final byte OTHER_PUNCTUATION = 24; // 0x18
+    field public static final byte OTHER_SYMBOL = 28; // 0x1c
+    field public static final byte PARAGRAPH_SEPARATOR = 14; // 0xe
+    field public static final byte PRIVATE_USE = 18; // 0x12
+    field public static final int SIZE = 16; // 0x10
+    field public static final byte SPACE_SEPARATOR = 12; // 0xc
+    field public static final byte START_PUNCTUATION = 21; // 0x15
+    field public static final byte SURROGATE = 19; // 0x13
+    field public static final byte TITLECASE_LETTER = 3; // 0x3
+    field public static final Class<java.lang.Character> TYPE;
+    field public static final byte UNASSIGNED = 0; // 0x0
+    field public static final byte UPPERCASE_LETTER = 1; // 0x1
+  }
+
+  public static class Character.Subset {
+    ctor protected Character.Subset(@NonNull String);
+    method public final boolean equals(@Nullable Object);
+    method public final int hashCode();
+    method @NonNull public final String toString();
+  }
+
+  public static final class Character.UnicodeBlock extends java.lang.Character.Subset {
+    method @NonNull public static java.lang.Character.UnicodeBlock forName(@NonNull String);
+    method @Nullable public static java.lang.Character.UnicodeBlock of(char);
+    method @Nullable public static java.lang.Character.UnicodeBlock of(int);
+    field public static final java.lang.Character.UnicodeBlock AEGEAN_NUMBERS;
+    field public static final java.lang.Character.UnicodeBlock ALCHEMICAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock ALPHABETIC_PRESENTATION_FORMS;
+    field public static final java.lang.Character.UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION;
+    field public static final java.lang.Character.UnicodeBlock ANCIENT_GREEK_NUMBERS;
+    field public static final java.lang.Character.UnicodeBlock ANCIENT_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock ARABIC;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_PRESENTATION_FORMS_A;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_PRESENTATION_FORMS_B;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock ARMENIAN;
+    field public static final java.lang.Character.UnicodeBlock ARROWS;
+    field public static final java.lang.Character.UnicodeBlock AVESTAN;
+    field public static final java.lang.Character.UnicodeBlock BALINESE;
+    field public static final java.lang.Character.UnicodeBlock BAMUM;
+    field public static final java.lang.Character.UnicodeBlock BAMUM_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock BASIC_LATIN;
+    field public static final java.lang.Character.UnicodeBlock BATAK;
+    field public static final java.lang.Character.UnicodeBlock BENGALI;
+    field public static final java.lang.Character.UnicodeBlock BLOCK_ELEMENTS;
+    field public static final java.lang.Character.UnicodeBlock BOPOMOFO;
+    field public static final java.lang.Character.UnicodeBlock BOPOMOFO_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock BOX_DRAWING;
+    field public static final java.lang.Character.UnicodeBlock BRAHMI;
+    field public static final java.lang.Character.UnicodeBlock BRAILLE_PATTERNS;
+    field public static final java.lang.Character.UnicodeBlock BUGINESE;
+    field public static final java.lang.Character.UnicodeBlock BUHID;
+    field public static final java.lang.Character.UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock CARIAN;
+    field public static final java.lang.Character.UnicodeBlock CHAKMA;
+    field public static final java.lang.Character.UnicodeBlock CHAM;
+    field public static final java.lang.Character.UnicodeBlock CHEROKEE;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_FORMS;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock CJK_RADICALS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock CJK_STROKES;
+    field public static final java.lang.Character.UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_DIACRITICAL_MARKS;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_HALF_MARKS;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock COMMON_INDIC_NUMBER_FORMS;
+    field public static final java.lang.Character.UnicodeBlock CONTROL_PICTURES;
+    field public static final java.lang.Character.UnicodeBlock COPTIC;
+    field public static final java.lang.Character.UnicodeBlock COUNTING_ROD_NUMERALS;
+    field public static final java.lang.Character.UnicodeBlock CUNEIFORM;
+    field public static final java.lang.Character.UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock CURRENCY_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock CYPRIOT_SYLLABARY;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC_EXTENDED_B;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC_SUPPLEMENTARY;
+    field public static final java.lang.Character.UnicodeBlock DESERET;
+    field public static final java.lang.Character.UnicodeBlock DEVANAGARI;
+    field public static final java.lang.Character.UnicodeBlock DEVANAGARI_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock DINGBATS;
+    field public static final java.lang.Character.UnicodeBlock DOMINO_TILES;
+    field public static final java.lang.Character.UnicodeBlock EGYPTIAN_HIEROGLYPHS;
+    field public static final java.lang.Character.UnicodeBlock EMOTICONS;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_ALPHANUMERICS;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock GENERAL_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock GEOMETRIC_SHAPES;
+    field public static final java.lang.Character.UnicodeBlock GEORGIAN;
+    field public static final java.lang.Character.UnicodeBlock GEORGIAN_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock GLAGOLITIC;
+    field public static final java.lang.Character.UnicodeBlock GOTHIC;
+    field public static final java.lang.Character.UnicodeBlock GREEK;
+    field public static final java.lang.Character.UnicodeBlock GREEK_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock GUJARATI;
+    field public static final java.lang.Character.UnicodeBlock GURMUKHI;
+    field public static final java.lang.Character.UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_COMPATIBILITY_JAMO;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO_EXTENDED_B;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_SYLLABLES;
+    field public static final java.lang.Character.UnicodeBlock HANUNOO;
+    field public static final java.lang.Character.UnicodeBlock HEBREW;
+    field public static final java.lang.Character.UnicodeBlock HIGH_PRIVATE_USE_SURROGATES;
+    field public static final java.lang.Character.UnicodeBlock HIGH_SURROGATES;
+    field public static final java.lang.Character.UnicodeBlock HIRAGANA;
+    field public static final java.lang.Character.UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS;
+    field public static final java.lang.Character.UnicodeBlock IMPERIAL_ARAMAIC;
+    field public static final java.lang.Character.UnicodeBlock INSCRIPTIONAL_PAHLAVI;
+    field public static final java.lang.Character.UnicodeBlock INSCRIPTIONAL_PARTHIAN;
+    field public static final java.lang.Character.UnicodeBlock IPA_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock JAVANESE;
+    field public static final java.lang.Character.UnicodeBlock KAITHI;
+    field public static final java.lang.Character.UnicodeBlock KANA_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock KANBUN;
+    field public static final java.lang.Character.UnicodeBlock KANGXI_RADICALS;
+    field public static final java.lang.Character.UnicodeBlock KANNADA;
+    field public static final java.lang.Character.UnicodeBlock KATAKANA;
+    field public static final java.lang.Character.UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock KAYAH_LI;
+    field public static final java.lang.Character.UnicodeBlock KHAROSHTHI;
+    field public static final java.lang.Character.UnicodeBlock KHMER;
+    field public static final java.lang.Character.UnicodeBlock KHMER_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock LAO;
+    field public static final java.lang.Character.UnicodeBlock LATIN_1_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_ADDITIONAL;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_B;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_C;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_D;
+    field public static final java.lang.Character.UnicodeBlock LEPCHA;
+    field public static final java.lang.Character.UnicodeBlock LETTERLIKE_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock LIMBU;
+    field public static final java.lang.Character.UnicodeBlock LINEAR_B_IDEOGRAMS;
+    field public static final java.lang.Character.UnicodeBlock LINEAR_B_SYLLABARY;
+    field public static final java.lang.Character.UnicodeBlock LISU;
+    field public static final java.lang.Character.UnicodeBlock LOW_SURROGATES;
+    field public static final java.lang.Character.UnicodeBlock LYCIAN;
+    field public static final java.lang.Character.UnicodeBlock LYDIAN;
+    field public static final java.lang.Character.UnicodeBlock MAHJONG_TILES;
+    field public static final java.lang.Character.UnicodeBlock MALAYALAM;
+    field public static final java.lang.Character.UnicodeBlock MANDAIC;
+    field public static final java.lang.Character.UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock MATHEMATICAL_OPERATORS;
+    field public static final java.lang.Character.UnicodeBlock MEETEI_MAYEK;
+    field public static final java.lang.Character.UnicodeBlock MEETEI_MAYEK_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock MEROITIC_CURSIVE;
+    field public static final java.lang.Character.UnicodeBlock MEROITIC_HIEROGLYPHS;
+    field public static final java.lang.Character.UnicodeBlock MIAO;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_TECHNICAL;
+    field public static final java.lang.Character.UnicodeBlock MODIFIER_TONE_LETTERS;
+    field public static final java.lang.Character.UnicodeBlock MONGOLIAN;
+    field public static final java.lang.Character.UnicodeBlock MUSICAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock MYANMAR;
+    field public static final java.lang.Character.UnicodeBlock MYANMAR_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock NEW_TAI_LUE;
+    field public static final java.lang.Character.UnicodeBlock NKO;
+    field public static final java.lang.Character.UnicodeBlock NUMBER_FORMS;
+    field public static final java.lang.Character.UnicodeBlock OGHAM;
+    field public static final java.lang.Character.UnicodeBlock OLD_ITALIC;
+    field public static final java.lang.Character.UnicodeBlock OLD_PERSIAN;
+    field public static final java.lang.Character.UnicodeBlock OLD_SOUTH_ARABIAN;
+    field public static final java.lang.Character.UnicodeBlock OLD_TURKIC;
+    field public static final java.lang.Character.UnicodeBlock OL_CHIKI;
+    field public static final java.lang.Character.UnicodeBlock OPTICAL_CHARACTER_RECOGNITION;
+    field public static final java.lang.Character.UnicodeBlock ORIYA;
+    field public static final java.lang.Character.UnicodeBlock OSMANYA;
+    field public static final java.lang.Character.UnicodeBlock PHAGS_PA;
+    field public static final java.lang.Character.UnicodeBlock PHAISTOS_DISC;
+    field public static final java.lang.Character.UnicodeBlock PHOENICIAN;
+    field public static final java.lang.Character.UnicodeBlock PHONETIC_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock PLAYING_CARDS;
+    field public static final java.lang.Character.UnicodeBlock PRIVATE_USE_AREA;
+    field public static final java.lang.Character.UnicodeBlock REJANG;
+    field public static final java.lang.Character.UnicodeBlock RUMI_NUMERAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock RUNIC;
+    field public static final java.lang.Character.UnicodeBlock SAMARITAN;
+    field public static final java.lang.Character.UnicodeBlock SAURASHTRA;
+    field public static final java.lang.Character.UnicodeBlock SHARADA;
+    field public static final java.lang.Character.UnicodeBlock SHAVIAN;
+    field public static final java.lang.Character.UnicodeBlock SINHALA;
+    field public static final java.lang.Character.UnicodeBlock SMALL_FORM_VARIANTS;
+    field public static final java.lang.Character.UnicodeBlock SORA_SOMPENG;
+    field public static final java.lang.Character.UnicodeBlock SPACING_MODIFIER_LETTERS;
+    field public static final java.lang.Character.UnicodeBlock SPECIALS;
+    field public static final java.lang.Character.UnicodeBlock SUNDANESE;
+    field public static final java.lang.Character.UnicodeBlock SUNDANESE_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_ARROWS_A;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_ARROWS_B;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B;
+    field @Deprecated public static final java.lang.Character.UnicodeBlock SURROGATES_AREA;
+    field public static final java.lang.Character.UnicodeBlock SYLOTI_NAGRI;
+    field public static final java.lang.Character.UnicodeBlock SYRIAC;
+    field public static final java.lang.Character.UnicodeBlock TAGALOG;
+    field public static final java.lang.Character.UnicodeBlock TAGBANWA;
+    field public static final java.lang.Character.UnicodeBlock TAGS;
+    field public static final java.lang.Character.UnicodeBlock TAI_LE;
+    field public static final java.lang.Character.UnicodeBlock TAI_THAM;
+    field public static final java.lang.Character.UnicodeBlock TAI_VIET;
+    field public static final java.lang.Character.UnicodeBlock TAI_XUAN_JING_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock TAKRI;
+    field public static final java.lang.Character.UnicodeBlock TAMIL;
+    field public static final java.lang.Character.UnicodeBlock TELUGU;
+    field public static final java.lang.Character.UnicodeBlock THAANA;
+    field public static final java.lang.Character.UnicodeBlock THAI;
+    field public static final java.lang.Character.UnicodeBlock TIBETAN;
+    field public static final java.lang.Character.UnicodeBlock TIFINAGH;
+    field public static final java.lang.Character.UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock UGARITIC;
+    field public static final java.lang.Character.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS;
+    field public static final java.lang.Character.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock VAI;
+    field public static final java.lang.Character.UnicodeBlock VARIATION_SELECTORS;
+    field public static final java.lang.Character.UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock VEDIC_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock VERTICAL_FORMS;
+    field public static final java.lang.Character.UnicodeBlock YIJING_HEXAGRAM_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock YI_RADICALS;
+    field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES;
+  }
+
+  public enum Character.UnicodeScript {
+    method @NonNull public static java.lang.Character.UnicodeScript forName(@NonNull String);
+    method @NonNull public static java.lang.Character.UnicodeScript of(int);
+    enum_constant public static final java.lang.Character.UnicodeScript ARABIC;
+    enum_constant public static final java.lang.Character.UnicodeScript ARMENIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript AVESTAN;
+    enum_constant public static final java.lang.Character.UnicodeScript BALINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BAMUM;
+    enum_constant public static final java.lang.Character.UnicodeScript BATAK;
+    enum_constant public static final java.lang.Character.UnicodeScript BENGALI;
+    enum_constant public static final java.lang.Character.UnicodeScript BOPOMOFO;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAHMI;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAILLE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUGINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUHID;
+    enum_constant public static final java.lang.Character.UnicodeScript CANADIAN_ABORIGINAL;
+    enum_constant public static final java.lang.Character.UnicodeScript CARIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript CHAKMA;
+    enum_constant public static final java.lang.Character.UnicodeScript CHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript CHEROKEE;
+    enum_constant public static final java.lang.Character.UnicodeScript COMMON;
+    enum_constant public static final java.lang.Character.UnicodeScript COPTIC;
+    enum_constant public static final java.lang.Character.UnicodeScript CUNEIFORM;
+    enum_constant public static final java.lang.Character.UnicodeScript CYPRIOT;
+    enum_constant public static final java.lang.Character.UnicodeScript CYRILLIC;
+    enum_constant public static final java.lang.Character.UnicodeScript DESERET;
+    enum_constant public static final java.lang.Character.UnicodeScript DEVANAGARI;
+    enum_constant public static final java.lang.Character.UnicodeScript EGYPTIAN_HIEROGLYPHS;
+    enum_constant public static final java.lang.Character.UnicodeScript ETHIOPIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GEORGIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript GLAGOLITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GOTHIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GREEK;
+    enum_constant public static final java.lang.Character.UnicodeScript GUJARATI;
+    enum_constant public static final java.lang.Character.UnicodeScript GURMUKHI;
+    enum_constant public static final java.lang.Character.UnicodeScript HAN;
+    enum_constant public static final java.lang.Character.UnicodeScript HANGUL;
+    enum_constant public static final java.lang.Character.UnicodeScript HANUNOO;
+    enum_constant public static final java.lang.Character.UnicodeScript HEBREW;
+    enum_constant public static final java.lang.Character.UnicodeScript HIRAGANA;
+    enum_constant public static final java.lang.Character.UnicodeScript IMPERIAL_ARAMAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript INHERITED;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PAHLAVI;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PARTHIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript JAVANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript KAITHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KANNADA;
+    enum_constant public static final java.lang.Character.UnicodeScript KATAKANA;
+    enum_constant public static final java.lang.Character.UnicodeScript KAYAH_LI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHAROSHTHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHMER;
+    enum_constant public static final java.lang.Character.UnicodeScript LAO;
+    enum_constant public static final java.lang.Character.UnicodeScript LATIN;
+    enum_constant public static final java.lang.Character.UnicodeScript LEPCHA;
+    enum_constant public static final java.lang.Character.UnicodeScript LIMBU;
+    enum_constant public static final java.lang.Character.UnicodeScript LINEAR_B;
+    enum_constant public static final java.lang.Character.UnicodeScript LISU;
+    enum_constant public static final java.lang.Character.UnicodeScript LYCIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript LYDIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MALAYALAM;
+    enum_constant public static final java.lang.Character.UnicodeScript MANDAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript MEETEI_MAYEK;
+    enum_constant public static final java.lang.Character.UnicodeScript MEROITIC_CURSIVE;
+    enum_constant public static final java.lang.Character.UnicodeScript MEROITIC_HIEROGLYPHS;
+    enum_constant public static final java.lang.Character.UnicodeScript MIAO;
+    enum_constant public static final java.lang.Character.UnicodeScript MONGOLIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MYANMAR;
+    enum_constant public static final java.lang.Character.UnicodeScript NEW_TAI_LUE;
+    enum_constant public static final java.lang.Character.UnicodeScript NKO;
+    enum_constant public static final java.lang.Character.UnicodeScript OGHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_ITALIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_PERSIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_SOUTH_ARABIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_TURKIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OL_CHIKI;
+    enum_constant public static final java.lang.Character.UnicodeScript ORIYA;
+    enum_constant public static final java.lang.Character.UnicodeScript OSMANYA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHAGS_PA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHOENICIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript REJANG;
+    enum_constant public static final java.lang.Character.UnicodeScript RUNIC;
+    enum_constant public static final java.lang.Character.UnicodeScript SAMARITAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SAURASHTRA;
+    enum_constant public static final java.lang.Character.UnicodeScript SHARADA;
+    enum_constant public static final java.lang.Character.UnicodeScript SHAVIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SINHALA;
+    enum_constant public static final java.lang.Character.UnicodeScript SORA_SOMPENG;
+    enum_constant public static final java.lang.Character.UnicodeScript SUNDANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript SYLOTI_NAGRI;
+    enum_constant public static final java.lang.Character.UnicodeScript SYRIAC;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGALOG;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGBANWA;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_LE;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_THAM;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_VIET;
+    enum_constant public static final java.lang.Character.UnicodeScript TAKRI;
+    enum_constant public static final java.lang.Character.UnicodeScript TAMIL;
+    enum_constant public static final java.lang.Character.UnicodeScript TELUGU;
+    enum_constant public static final java.lang.Character.UnicodeScript THAANA;
+    enum_constant public static final java.lang.Character.UnicodeScript THAI;
+    enum_constant public static final java.lang.Character.UnicodeScript TIBETAN;
+    enum_constant public static final java.lang.Character.UnicodeScript TIFINAGH;
+    enum_constant public static final java.lang.Character.UnicodeScript UGARITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript UNKNOWN;
+    enum_constant public static final java.lang.Character.UnicodeScript VAI;
+    enum_constant public static final java.lang.Character.UnicodeScript YI;
+  }
+
+  public final class Class<T> implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
+    method @NonNull public <U> Class<? extends U> asSubclass(@NonNull Class<U>);
+    method @Nullable public T cast(@Nullable Object);
+    method public boolean desiredAssertionStatus();
+    method @NonNull public static Class<?> forName(@NonNull String) throws java.lang.ClassNotFoundException;
+    method @NonNull public static Class<?> forName(@NonNull String, boolean, @Nullable ClassLoader) throws java.lang.ClassNotFoundException;
+    method @Nullable public <A extends java.lang.annotation.Annotation> A getAnnotation(@NonNull Class<A>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method @NonNull public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(@NonNull Class<A>);
+    method @Nullable public String getCanonicalName();
+    method @Nullable public ClassLoader getClassLoader();
+    method @NonNull public Class<?>[] getClasses();
+    method @Nullable public Class<?> getComponentType();
+    method @NonNull public java.lang.reflect.Constructor<T> getConstructor(@Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
+    method @Nullable public <A extends java.lang.annotation.Annotation> A getDeclaredAnnotation(@NonNull Class<A>);
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method @NonNull public Class<?>[] getDeclaredClasses();
+    method @NonNull public java.lang.reflect.Constructor<T> getDeclaredConstructor(@Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Constructor<?>[] getDeclaredConstructors() throws java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Field getDeclaredField(@NonNull String) throws java.lang.NoSuchFieldException;
+    method @NonNull public java.lang.reflect.Field[] getDeclaredFields();
+    method @NonNull public java.lang.reflect.Method getDeclaredMethod(@NonNull String, @Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Method[] getDeclaredMethods() throws java.lang.SecurityException;
+    method @Nullable public Class<?> getDeclaringClass();
+    method @Nullable public Class<?> getEnclosingClass();
+    method @Nullable public java.lang.reflect.Constructor<?> getEnclosingConstructor();
+    method @Nullable public java.lang.reflect.Method getEnclosingMethod();
+    method @Nullable public T[] getEnumConstants();
+    method @NonNull public java.lang.reflect.Field getField(@NonNull String) throws java.lang.NoSuchFieldException;
+    method @NonNull public java.lang.reflect.Field[] getFields() throws java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Type[] getGenericInterfaces();
+    method @Nullable public java.lang.reflect.Type getGenericSuperclass();
+    method @NonNull public Class<?>[] getInterfaces();
+    method @NonNull public java.lang.reflect.Method getMethod(@NonNull String, @Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Method[] getMethods() throws java.lang.SecurityException;
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method @Nullable public Package getPackage();
+    method @NonNull public String getPackageName();
+    method @Nullable public java.security.ProtectionDomain getProtectionDomain();
+    method @Nullable public java.net.URL getResource(@NonNull String);
+    method @Nullable public java.io.InputStream getResourceAsStream(@NonNull String);
+    method @Nullable public Object[] getSigners();
+    method @NonNull public String getSimpleName();
+    method @Nullable public Class<? super T> getSuperclass();
+    method @NonNull public java.lang.reflect.TypeVariable<java.lang.Class<T>>[] getTypeParameters();
+    method public boolean isAnnotation();
+    method public boolean isAnonymousClass();
+    method public boolean isArray();
+    method public boolean isAssignableFrom(@NonNull Class<?>);
+    method public boolean isEnum();
+    method public boolean isInstance(@Nullable Object);
+    method public boolean isInterface();
+    method public boolean isLocalClass();
+    method public boolean isMemberClass();
+    method public boolean isPrimitive();
+    method public boolean isSynthetic();
+    method @NonNull public T newInstance() throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public String toGenericString();
+  }
+
+  public class ClassCastException extends java.lang.RuntimeException {
+    ctor public ClassCastException();
+    ctor public ClassCastException(String);
+  }
+
+  public class ClassCircularityError extends java.lang.LinkageError {
+    ctor public ClassCircularityError();
+    ctor public ClassCircularityError(String);
+  }
+
+  public class ClassFormatError extends java.lang.LinkageError {
+    ctor public ClassFormatError();
+    ctor public ClassFormatError(String);
+  }
+
+  public abstract class ClassLoader {
+    ctor protected ClassLoader(ClassLoader);
+    ctor protected ClassLoader();
+    method public void clearAssertionStatus();
+    method @Deprecated protected final Class<?> defineClass(byte[], int, int) throws java.lang.ClassFormatError;
+    method protected final Class<?> defineClass(String, byte[], int, int) throws java.lang.ClassFormatError;
+    method protected final Class<?> defineClass(String, byte[], int, int, java.security.ProtectionDomain) throws java.lang.ClassFormatError;
+    method protected final Class<?> defineClass(String, java.nio.ByteBuffer, java.security.ProtectionDomain) throws java.lang.ClassFormatError;
+    method protected Package definePackage(String, String, String, String, String, String, String, java.net.URL) throws java.lang.IllegalArgumentException;
+    method protected Class<?> findClass(String) throws java.lang.ClassNotFoundException;
+    method protected String findLibrary(String);
+    method protected final Class<?> findLoadedClass(String);
+    method protected java.net.URL findResource(String);
+    method protected java.util.Enumeration<java.net.URL> findResources(String) throws java.io.IOException;
+    method protected final Class<?> findSystemClass(String) throws java.lang.ClassNotFoundException;
+    method protected Package getPackage(String);
+    method protected Package[] getPackages();
+    method public final ClassLoader getParent();
+    method public java.net.URL getResource(String);
+    method public java.io.InputStream getResourceAsStream(String);
+    method public java.util.Enumeration<java.net.URL> getResources(String) throws java.io.IOException;
+    method public static ClassLoader getSystemClassLoader();
+    method public static java.net.URL getSystemResource(String);
+    method public static java.io.InputStream getSystemResourceAsStream(String);
+    method public static java.util.Enumeration<java.net.URL> getSystemResources(String) throws java.io.IOException;
+    method public Class<?> loadClass(String) throws java.lang.ClassNotFoundException;
+    method protected Class<?> loadClass(String, boolean) throws java.lang.ClassNotFoundException;
+    method protected static boolean registerAsParallelCapable();
+    method protected final void resolveClass(Class<?>);
+    method public void setClassAssertionStatus(String, boolean);
+    method public void setDefaultAssertionStatus(boolean);
+    method public void setPackageAssertionStatus(String, boolean);
+    method protected final void setSigners(Class<?>, Object[]);
+  }
+
+  public class ClassNotFoundException extends java.lang.ReflectiveOperationException {
+    ctor public ClassNotFoundException();
+    ctor public ClassNotFoundException(String);
+    ctor public ClassNotFoundException(String, Throwable);
+    method public Throwable getException();
+  }
+
+  public class CloneNotSupportedException extends java.lang.Exception {
+    ctor public CloneNotSupportedException();
+    ctor public CloneNotSupportedException(String);
+  }
+
+  public interface Cloneable {
+  }
+
+  public interface Comparable<T> {
+    method public int compareTo(T);
+  }
+
+  public final class Compiler {
+    method public static Object command(Object);
+    method public static boolean compileClass(Class<?>);
+    method public static boolean compileClasses(String);
+    method public static void disable();
+    method public static void enable();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PACKAGE, java.lang.annotation.ElementType.MODULE, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE}) public @interface Deprecated {
+    method public abstract boolean forRemoval() default false;
+    method public abstract String since() default "";
+  }
+
+  public final class Double extends java.lang.Number implements java.lang.Comparable<java.lang.Double> {
+    ctor public Double(double);
+    ctor public Double(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int compare(double, double);
+    method public int compareTo(@NonNull Double);
+    method public static long doubleToLongBits(double);
+    method public static long doubleToRawLongBits(double);
+    method public double doubleValue();
+    method public float floatValue();
+    method public static int hashCode(double);
+    method public int intValue();
+    method public static boolean isFinite(double);
+    method public static boolean isInfinite(double);
+    method public boolean isInfinite();
+    method public static boolean isNaN(double);
+    method public boolean isNaN();
+    method public static double longBitsToDouble(long);
+    method public long longValue();
+    method public static double max(double, double);
+    method public static double min(double, double);
+    method public static double parseDouble(@NonNull String) throws java.lang.NumberFormatException;
+    method public static double sum(double, double);
+    method @NonNull public static String toHexString(double);
+    method @NonNull public static String toString(double);
+    method @NonNull public static Double valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Double valueOf(double);
+    field public static final int BYTES = 8; // 0x8
+    field public static final int MAX_EXPONENT = 1023; // 0x3ff
+    field public static final double MAX_VALUE = 1.7976931348623157E308;
+    field public static final int MIN_EXPONENT = -1022; // 0xfffffc02
+    field public static final double MIN_NORMAL = 2.2250738585072014E-308;
+    field public static final double MIN_VALUE = 4.9E-324;
+    field public static final double NEGATIVE_INFINITY = (-1.0/0.0);
+    field public static final double NaN = (0.0/0.0);
+    field public static final double POSITIVE_INFINITY = (1.0/0.0);
+    field public static final int SIZE = 64; // 0x40
+    field public static final Class<java.lang.Double> TYPE;
+  }
+
+  public abstract class Enum<E extends java.lang.Enum<E>> implements java.lang.Comparable<E> java.io.Serializable {
+    ctor protected Enum(@NonNull String, int);
+    method @NonNull protected final Object clone() throws java.lang.CloneNotSupportedException;
+    method public final int compareTo(E);
+    method public final boolean equals(@Nullable Object);
+    method protected final void finalize();
+    method @NonNull public final Class<E> getDeclaringClass();
+    method public final int hashCode();
+    method @NonNull public final String name();
+    method public final int ordinal();
+    method @NonNull public static <T extends java.lang.Enum<T>> T valueOf(@NonNull Class<T>, @NonNull String);
+  }
+
+  public class EnumConstantNotPresentException extends java.lang.RuntimeException {
+    ctor public EnumConstantNotPresentException(Class<? extends java.lang.Enum>, String);
+    method public String constantName();
+    method public Class<? extends java.lang.Enum> enumType();
+  }
+
+  public class Error extends java.lang.Throwable {
+    ctor public Error();
+    ctor public Error(String);
+    ctor public Error(String, Throwable);
+    ctor public Error(Throwable);
+    ctor protected Error(String, Throwable, boolean, boolean);
+  }
+
+  public class Exception extends java.lang.Throwable {
+    ctor public Exception();
+    ctor public Exception(String);
+    ctor public Exception(String, Throwable);
+    ctor public Exception(Throwable);
+    ctor protected Exception(String, Throwable, boolean, boolean);
+  }
+
+  public class ExceptionInInitializerError extends java.lang.LinkageError {
+    ctor public ExceptionInInitializerError();
+    ctor public ExceptionInInitializerError(Throwable);
+    ctor public ExceptionInInitializerError(String);
+    method public Throwable getException();
+  }
+
+  public final class Float extends java.lang.Number implements java.lang.Comparable<java.lang.Float> {
+    ctor public Float(float);
+    ctor public Float(double);
+    ctor public Float(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int compare(float, float);
+    method public int compareTo(@NonNull Float);
+    method public double doubleValue();
+    method public static int floatToIntBits(float);
+    method public static int floatToRawIntBits(float);
+    method public float floatValue();
+    method public static int hashCode(float);
+    method public static float intBitsToFloat(int);
+    method public int intValue();
+    method public static boolean isFinite(float);
+    method public static boolean isInfinite(float);
+    method public boolean isInfinite();
+    method public static boolean isNaN(float);
+    method public boolean isNaN();
+    method public long longValue();
+    method public static float max(float, float);
+    method public static float min(float, float);
+    method public static float parseFloat(@NonNull String) throws java.lang.NumberFormatException;
+    method public static float sum(float, float);
+    method @NonNull public static String toHexString(float);
+    method @NonNull public static String toString(float);
+    method @NonNull public static Float valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Float valueOf(float);
+    field public static final int BYTES = 4; // 0x4
+    field public static final int MAX_EXPONENT = 127; // 0x7f
+    field public static final float MAX_VALUE = 3.4028235E38f;
+    field public static final int MIN_EXPONENT = -126; // 0xffffff82
+    field public static final float MIN_NORMAL = 1.17549435E-38f;
+    field public static final float MIN_VALUE = 1.4E-45f;
+    field public static final float NEGATIVE_INFINITY = (-1.0f/0.0f);
+    field public static final float NaN = (0.0f/0.0f);
+    field public static final float POSITIVE_INFINITY = (1.0f/0.0f);
+    field public static final int SIZE = 32; // 0x20
+    field public static final Class<java.lang.Float> TYPE;
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface FunctionalInterface {
+  }
+
+  public class IllegalAccessError extends java.lang.IncompatibleClassChangeError {
+    ctor public IllegalAccessError();
+    ctor public IllegalAccessError(String);
+  }
+
+  public class IllegalAccessException extends java.lang.ReflectiveOperationException {
+    ctor public IllegalAccessException();
+    ctor public IllegalAccessException(String);
+  }
+
+  public class IllegalArgumentException extends java.lang.RuntimeException {
+    ctor public IllegalArgumentException();
+    ctor public IllegalArgumentException(String);
+    ctor public IllegalArgumentException(String, Throwable);
+    ctor public IllegalArgumentException(Throwable);
+  }
+
+  public class IllegalMonitorStateException extends java.lang.RuntimeException {
+    ctor public IllegalMonitorStateException();
+    ctor public IllegalMonitorStateException(String);
+  }
+
+  public class IllegalStateException extends java.lang.RuntimeException {
+    ctor public IllegalStateException();
+    ctor public IllegalStateException(String);
+    ctor public IllegalStateException(String, Throwable);
+    ctor public IllegalStateException(Throwable);
+  }
+
+  public class IllegalThreadStateException extends java.lang.IllegalArgumentException {
+    ctor public IllegalThreadStateException();
+    ctor public IllegalThreadStateException(String);
+  }
+
+  public class IncompatibleClassChangeError extends java.lang.LinkageError {
+    ctor public IncompatibleClassChangeError();
+    ctor public IncompatibleClassChangeError(String);
+  }
+
+  public class IndexOutOfBoundsException extends java.lang.RuntimeException {
+    ctor public IndexOutOfBoundsException();
+    ctor public IndexOutOfBoundsException(String);
+  }
+
+  public class InheritableThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public InheritableThreadLocal();
+    method protected T childValue(T);
+  }
+
+  public class InstantiationError extends java.lang.IncompatibleClassChangeError {
+    ctor public InstantiationError();
+    ctor public InstantiationError(String);
+  }
+
+  public class InstantiationException extends java.lang.ReflectiveOperationException {
+    ctor public InstantiationException();
+    ctor public InstantiationException(String);
+  }
+
+  public final class Integer extends java.lang.Number implements java.lang.Comparable<java.lang.Integer> {
+    ctor public Integer(int);
+    ctor public Integer(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int bitCount(int);
+    method public static int compare(int, int);
+    method public int compareTo(@NonNull Integer);
+    method public static int compareUnsigned(int, int);
+    method @NonNull public static Integer decode(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int divideUnsigned(int, int);
+    method public double doubleValue();
+    method public float floatValue();
+    method @Nullable public static Integer getInteger(@NonNull String);
+    method @Nullable public static Integer getInteger(@NonNull String, int);
+    method @Nullable public static Integer getInteger(@NonNull String, @Nullable Integer);
+    method public static int hashCode(int);
+    method public static int highestOneBit(int);
+    method public int intValue();
+    method public long longValue();
+    method public static int lowestOneBit(int);
+    method public static int max(int, int);
+    method public static int min(int, int);
+    method public static int numberOfLeadingZeros(int);
+    method public static int numberOfTrailingZeros(int);
+    method public static int parseInt(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static int parseInt(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int parseUnsignedInt(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static int parseUnsignedInt(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int remainderUnsigned(int, int);
+    method public static int reverse(int);
+    method public static int reverseBytes(int);
+    method public static int rotateLeft(int, int);
+    method public static int rotateRight(int, int);
+    method public static int signum(int);
+    method public static int sum(int, int);
+    method @NonNull public static String toBinaryString(int);
+    method @NonNull public static String toHexString(int);
+    method @NonNull public static String toOctalString(int);
+    method @NonNull public static String toString(int, int);
+    method @NonNull public static String toString(int);
+    method public static long toUnsignedLong(int);
+    method @NonNull public static String toUnsignedString(int, int);
+    method @NonNull public static String toUnsignedString(int);
+    method @NonNull public static Integer valueOf(@NonNull String, int) throws java.lang.NumberFormatException;
+    method @NonNull public static Integer valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Integer valueOf(int);
+    field public static final int BYTES = 4; // 0x4
+    field public static final int MAX_VALUE = 2147483647; // 0x7fffffff
+    field public static final int MIN_VALUE = -2147483648; // 0x80000000
+    field public static final int SIZE = 32; // 0x20
+    field public static final Class<java.lang.Integer> TYPE;
+  }
+
+  public class InternalError extends java.lang.VirtualMachineError {
+    ctor public InternalError();
+    ctor public InternalError(String);
+    ctor public InternalError(String, Throwable);
+    ctor public InternalError(Throwable);
+  }
+
+  public class InterruptedException extends java.lang.Exception {
+    ctor public InterruptedException();
+    ctor public InterruptedException(String);
+  }
+
+  public interface Iterable<T> {
+    method public default void forEach(@NonNull java.util.function.Consumer<? super T>);
+    method @NonNull public java.util.Iterator<T> iterator();
+    method @NonNull public default java.util.Spliterator<T> spliterator();
+  }
+
+  public class LinkageError extends java.lang.Error {
+    ctor public LinkageError();
+    ctor public LinkageError(String);
+    ctor public LinkageError(String, Throwable);
+  }
+
+  public final class Long extends java.lang.Number implements java.lang.Comparable<java.lang.Long> {
+    ctor public Long(long);
+    ctor public Long(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int bitCount(long);
+    method public static int compare(long, long);
+    method public int compareTo(@NonNull Long);
+    method public static int compareUnsigned(long, long);
+    method @NonNull public static Long decode(@NonNull String) throws java.lang.NumberFormatException;
+    method public static long divideUnsigned(long, long);
+    method public double doubleValue();
+    method public float floatValue();
+    method @Nullable public static Long getLong(@NonNull String);
+    method @Nullable public static Long getLong(@NonNull String, long);
+    method @Nullable public static Long getLong(@NonNull String, @Nullable Long);
+    method public static int hashCode(long);
+    method public static long highestOneBit(long);
+    method public int intValue();
+    method public long longValue();
+    method public static long lowestOneBit(long);
+    method public static long max(long, long);
+    method public static long min(long, long);
+    method public static int numberOfLeadingZeros(long);
+    method public static int numberOfTrailingZeros(long);
+    method public static long parseLong(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static long parseLong(@NonNull String) throws java.lang.NumberFormatException;
+    method public static long parseUnsignedLong(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static long parseUnsignedLong(@NonNull String) throws java.lang.NumberFormatException;
+    method public static long remainderUnsigned(long, long);
+    method public static long reverse(long);
+    method public static long reverseBytes(long);
+    method public static long rotateLeft(long, int);
+    method public static long rotateRight(long, int);
+    method public static int signum(long);
+    method public static long sum(long, long);
+    method @NonNull public static String toBinaryString(long);
+    method @NonNull public static String toHexString(long);
+    method @NonNull public static String toOctalString(long);
+    method @NonNull public static String toString(long, int);
+    method @NonNull public static String toString(long);
+    method @NonNull public static String toUnsignedString(long, int);
+    method @NonNull public static String toUnsignedString(long);
+    method @NonNull public static Long valueOf(@NonNull String, int) throws java.lang.NumberFormatException;
+    method @NonNull public static Long valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Long valueOf(long);
+    field public static final int BYTES = 8; // 0x8
+    field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL
+    field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L
+    field public static final int SIZE = 64; // 0x40
+    field public static final Class<java.lang.Long> TYPE;
+  }
+
+  public final class Math {
+    method public static double IEEEremainder(double, double);
+    method public static int abs(int);
+    method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
+    method public static double acos(double);
+    method public static int addExact(int, int);
+    method public static long addExact(long, long);
+    method public static double asin(double);
+    method public static double atan(double);
+    method public static double atan2(double, double);
+    method public static double cbrt(double);
+    method public static double ceil(double);
+    method public static double copySign(double, double);
+    method public static float copySign(float, float);
+    method public static double cos(double);
+    method public static double cosh(double);
+    method public static int decrementExact(int);
+    method public static long decrementExact(long);
+    method public static double exp(double);
+    method public static double expm1(double);
+    method public static double floor(double);
+    method public static int floorDiv(int, int);
+    method public static long floorDiv(long, int);
+    method public static long floorDiv(long, long);
+    method public static int floorMod(int, int);
+    method public static int floorMod(long, int);
+    method public static long floorMod(long, long);
+    method public static int getExponent(float);
+    method public static int getExponent(double);
+    method public static double hypot(double, double);
+    method public static int incrementExact(int);
+    method public static long incrementExact(long);
+    method public static double log(double);
+    method public static double log10(double);
+    method public static double log1p(double);
+    method public static int max(int, int);
+    method public static long max(long, long);
+    method public static float max(float, float);
+    method public static double max(double, double);
+    method public static int min(int, int);
+    method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
+    method public static int multiplyExact(int, int);
+    method public static long multiplyExact(long, int);
+    method public static long multiplyExact(long, long);
+    method public static long multiplyFull(int, int);
+    method public static long multiplyHigh(long, long);
+    method public static int negateExact(int);
+    method public static long negateExact(long);
+    method public static double nextAfter(double, double);
+    method public static float nextAfter(float, double);
+    method public static double nextDown(double);
+    method public static float nextDown(float);
+    method public static double nextUp(double);
+    method public static float nextUp(float);
+    method public static double pow(double, double);
+    method public static double random();
+    method public static double rint(double);
+    method public static int round(float);
+    method public static long round(double);
+    method public static double scalb(double, int);
+    method public static float scalb(float, int);
+    method public static double signum(double);
+    method public static float signum(float);
+    method public static double sin(double);
+    method public static double sinh(double);
+    method public static double sqrt(double);
+    method public static int subtractExact(int, int);
+    method public static long subtractExact(long, long);
+    method public static double tan(double);
+    method public static double tanh(double);
+    method public static double toDegrees(double);
+    method public static int toIntExact(long);
+    method public static double toRadians(double);
+    method public static double ulp(double);
+    method public static float ulp(float);
+    field public static final double E = 2.718281828459045;
+    field public static final double PI = 3.141592653589793;
+  }
+
+  public class NegativeArraySizeException extends java.lang.RuntimeException {
+    ctor public NegativeArraySizeException();
+    ctor public NegativeArraySizeException(String);
+  }
+
+  public class NoClassDefFoundError extends java.lang.LinkageError {
+    ctor public NoClassDefFoundError();
+    ctor public NoClassDefFoundError(String);
+  }
+
+  public class NoSuchFieldError extends java.lang.IncompatibleClassChangeError {
+    ctor public NoSuchFieldError();
+    ctor public NoSuchFieldError(String);
+  }
+
+  public class NoSuchFieldException extends java.lang.ReflectiveOperationException {
+    ctor public NoSuchFieldException();
+    ctor public NoSuchFieldException(String);
+  }
+
+  public class NoSuchMethodError extends java.lang.IncompatibleClassChangeError {
+    ctor public NoSuchMethodError();
+    ctor public NoSuchMethodError(String);
+  }
+
+  public class NoSuchMethodException extends java.lang.ReflectiveOperationException {
+    ctor public NoSuchMethodException();
+    ctor public NoSuchMethodException(String);
+  }
+
+  public class NullPointerException extends java.lang.RuntimeException {
+    ctor public NullPointerException();
+    ctor public NullPointerException(String);
+  }
+
+  public abstract class Number implements java.io.Serializable {
+    ctor public Number();
+    method public byte byteValue();
+    method public abstract double doubleValue();
+    method public abstract float floatValue();
+    method public abstract int intValue();
+    method public abstract long longValue();
+    method public short shortValue();
+  }
+
+  public class NumberFormatException extends java.lang.IllegalArgumentException {
+    ctor public NumberFormatException();
+    ctor public NumberFormatException(String);
+  }
+
+  public class Object {
+    ctor public Object();
+    method @NonNull protected Object clone() throws java.lang.CloneNotSupportedException;
+    method public boolean equals(@Nullable Object);
+    method protected void finalize() throws java.lang.Throwable;
+    method @NonNull public final Class<?> getClass();
+    method public int hashCode();
+    method public final void notify();
+    method public final void notifyAll();
+    method @NonNull public String toString();
+    method public final void wait(long) throws java.lang.InterruptedException;
+    method public final void wait(long, int) throws java.lang.InterruptedException;
+    method public final void wait() throws java.lang.InterruptedException;
+  }
+
+  public class OutOfMemoryError extends java.lang.VirtualMachineError {
+    ctor public OutOfMemoryError();
+    ctor public OutOfMemoryError(String);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface Override {
+  }
+
+  public class Package implements java.lang.reflect.AnnotatedElement {
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(Class<A>);
+    method public java.lang.annotation.Annotation[] getAnnotations();
+    method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getDeclaredAnnotation(Class<A>);
+    method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method public <A extends java.lang.annotation.Annotation> A[] getDeclaredAnnotationsByType(Class<A>);
+    method public String getImplementationTitle();
+    method public String getImplementationVendor();
+    method public String getImplementationVersion();
+    method public String getName();
+    method public static Package getPackage(String);
+    method public static Package[] getPackages();
+    method public String getSpecificationTitle();
+    method public String getSpecificationVendor();
+    method public String getSpecificationVersion();
+    method public boolean isCompatibleWith(String) throws java.lang.NumberFormatException;
+    method public boolean isSealed();
+    method public boolean isSealed(java.net.URL);
+  }
+
+  public abstract class Process {
+    ctor public Process();
+    method public abstract void destroy();
+    method public Process destroyForcibly();
+    method public abstract int exitValue();
+    method public abstract java.io.InputStream getErrorStream();
+    method public abstract java.io.InputStream getInputStream();
+    method public abstract java.io.OutputStream getOutputStream();
+    method public boolean isAlive();
+    method public abstract int waitFor() throws java.lang.InterruptedException;
+    method public boolean waitFor(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+  public final class ProcessBuilder {
+    ctor public ProcessBuilder(java.util.List<java.lang.String>);
+    ctor public ProcessBuilder(java.lang.String...);
+    method public ProcessBuilder command(java.util.List<java.lang.String>);
+    method public ProcessBuilder command(java.lang.String...);
+    method public java.util.List<java.lang.String> command();
+    method public java.io.File directory();
+    method public ProcessBuilder directory(java.io.File);
+    method public java.util.Map<java.lang.String,java.lang.String> environment();
+    method public ProcessBuilder inheritIO();
+    method public ProcessBuilder redirectError(java.lang.ProcessBuilder.Redirect);
+    method public ProcessBuilder redirectError(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectError();
+    method public boolean redirectErrorStream();
+    method public ProcessBuilder redirectErrorStream(boolean);
+    method public ProcessBuilder redirectInput(java.lang.ProcessBuilder.Redirect);
+    method public ProcessBuilder redirectInput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectInput();
+    method public ProcessBuilder redirectOutput(java.lang.ProcessBuilder.Redirect);
+    method public ProcessBuilder redirectOutput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectOutput();
+    method public Process start() throws java.io.IOException;
+  }
+
+  public abstract static class ProcessBuilder.Redirect {
+    method public static java.lang.ProcessBuilder.Redirect appendTo(java.io.File);
+    method public java.io.File file();
+    method public static java.lang.ProcessBuilder.Redirect from(java.io.File);
+    method public static java.lang.ProcessBuilder.Redirect to(java.io.File);
+    method public abstract java.lang.ProcessBuilder.Redirect.Type type();
+    field public static final java.lang.ProcessBuilder.Redirect INHERIT;
+    field public static final java.lang.ProcessBuilder.Redirect PIPE;
+  }
+
+  public enum ProcessBuilder.Redirect.Type {
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type APPEND;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type INHERIT;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type PIPE;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type READ;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type WRITE;
+  }
+
+  public interface Readable {
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
+  }
+
+  public class ReflectiveOperationException extends java.lang.Exception {
+    ctor public ReflectiveOperationException();
+    ctor public ReflectiveOperationException(String);
+    ctor public ReflectiveOperationException(String, Throwable);
+    ctor public ReflectiveOperationException(Throwable);
+  }
+
+  @java.lang.FunctionalInterface public interface Runnable {
+    method public void run();
+  }
+
+  public class Runtime {
+    method public void addShutdownHook(Thread);
+    method public int availableProcessors();
+    method public Process exec(String) throws java.io.IOException;
+    method public Process exec(String, String[]) throws java.io.IOException;
+    method public Process exec(String, String[], java.io.File) throws java.io.IOException;
+    method public Process exec(String[]) throws java.io.IOException;
+    method public Process exec(String[], String[]) throws java.io.IOException;
+    method public Process exec(String[], String[], java.io.File) throws java.io.IOException;
+    method public void exit(int);
+    method public long freeMemory();
+    method public void gc();
+    method @Deprecated public java.io.InputStream getLocalizedInputStream(java.io.InputStream);
+    method @Deprecated public java.io.OutputStream getLocalizedOutputStream(java.io.OutputStream);
+    method public static Runtime getRuntime();
+    method public void halt(int);
+    method public void load(String);
+    method public void loadLibrary(String);
+    method public long maxMemory();
+    method public boolean removeShutdownHook(Thread);
+    method public void runFinalization();
+    method @Deprecated public static void runFinalizersOnExit(boolean);
+    method public long totalMemory();
+    method public void traceInstructions(boolean);
+    method public void traceMethodCalls(boolean);
+  }
+
+  public class RuntimeException extends java.lang.Exception {
+    ctor public RuntimeException();
+    ctor public RuntimeException(String);
+    ctor public RuntimeException(String, Throwable);
+    ctor public RuntimeException(Throwable);
+    ctor protected RuntimeException(String, Throwable, boolean, boolean);
+  }
+
+  public final class RuntimePermission extends java.security.BasicPermission {
+    ctor public RuntimePermission(String);
+    ctor public RuntimePermission(String, String);
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.METHOD}) public @interface SafeVarargs {
+  }
+
+  public class SecurityException extends java.lang.RuntimeException {
+    ctor public SecurityException();
+    ctor public SecurityException(String);
+    ctor public SecurityException(String, Throwable);
+    ctor public SecurityException(Throwable);
+  }
+
+  public class SecurityManager {
+    ctor public SecurityManager();
+    method public void checkAccept(String, int);
+    method public void checkAccess(Thread);
+    method public void checkAccess(ThreadGroup);
+    method public void checkAwtEventQueueAccess();
+    method public void checkConnect(String, int);
+    method public void checkConnect(String, int, Object);
+    method public void checkCreateClassLoader();
+    method public void checkDelete(String);
+    method public void checkExec(String);
+    method public void checkExit(int);
+    method public void checkLink(String);
+    method public void checkListen(int);
+    method public void checkMemberAccess(Class<?>, int);
+    method public void checkMulticast(java.net.InetAddress);
+    method @Deprecated public void checkMulticast(java.net.InetAddress, byte);
+    method public void checkPackageAccess(String);
+    method public void checkPackageDefinition(String);
+    method public void checkPermission(java.security.Permission);
+    method public void checkPermission(java.security.Permission, Object);
+    method public void checkPrintJobAccess();
+    method public void checkPropertiesAccess();
+    method public void checkPropertyAccess(String);
+    method public void checkRead(java.io.FileDescriptor);
+    method public void checkRead(String);
+    method public void checkRead(String, Object);
+    method public void checkSecurityAccess(String);
+    method public void checkSetFactory();
+    method public void checkSystemClipboardAccess();
+    method public boolean checkTopLevelWindow(Object);
+    method public void checkWrite(java.io.FileDescriptor);
+    method public void checkWrite(String);
+    method @Deprecated protected int classDepth(String);
+    method @Deprecated protected int classLoaderDepth();
+    method @Deprecated protected ClassLoader currentClassLoader();
+    method @Deprecated protected Class<?> currentLoadedClass();
+    method protected Class[] getClassContext();
+    method @Deprecated public boolean getInCheck();
+    method public Object getSecurityContext();
+    method public ThreadGroup getThreadGroup();
+    method @Deprecated protected boolean inClass(String);
+    method @Deprecated protected boolean inClassLoader();
+    field @Deprecated protected boolean inCheck;
+  }
+
+  public final class Short extends java.lang.Number implements java.lang.Comparable<java.lang.Short> {
+    ctor @Deprecated public Short(short);
+    ctor @Deprecated public Short(String) throws java.lang.NumberFormatException;
+    method public static int compare(short, short);
+    method public int compareTo(Short);
+    method public static int compareUnsigned(short, short);
+    method public static Short decode(String) throws java.lang.NumberFormatException;
+    method public double doubleValue();
+    method public float floatValue();
+    method public static int hashCode(short);
+    method public int intValue();
+    method public long longValue();
+    method public static short parseShort(String, int) throws java.lang.NumberFormatException;
+    method public static short parseShort(String) throws java.lang.NumberFormatException;
+    method public static short reverseBytes(short);
+    method public static String toString(short);
+    method public static int toUnsignedInt(short);
+    method public static long toUnsignedLong(short);
+    method public static Short valueOf(String, int) throws java.lang.NumberFormatException;
+    method public static Short valueOf(String) throws java.lang.NumberFormatException;
+    method public static Short valueOf(short);
+    field public static final int BYTES = 2; // 0x2
+    field public static final short MAX_VALUE = 32767; // 0x7fff
+    field public static final short MIN_VALUE = -32768; // 0xffff8000
+    field public static final int SIZE = 16; // 0x10
+    field public static final Class<java.lang.Short> TYPE;
+  }
+
+  public class StackOverflowError extends java.lang.VirtualMachineError {
+    ctor public StackOverflowError();
+    ctor public StackOverflowError(String);
+  }
+
+  public final class StackTraceElement implements java.io.Serializable {
+    ctor public StackTraceElement(String, String, String, int);
+    method public String getClassName();
+    method public String getFileName();
+    method public int getLineNumber();
+    method public String getMethodName();
+    method public boolean isNativeMethod();
+  }
+
+  public final class StrictMath {
+    method public static double IEEEremainder(double, double);
+    method public static int abs(int);
+    method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
+    method public static double acos(double);
+    method public static int addExact(int, int);
+    method public static long addExact(long, long);
+    method public static double asin(double);
+    method public static double atan(double);
+    method public static double atan2(double, double);
+    method public static double cbrt(double);
+    method public static double ceil(double);
+    method public static double copySign(double, double);
+    method public static float copySign(float, float);
+    method public static double cos(double);
+    method public static double cosh(double);
+    method public static double exp(double);
+    method public static double expm1(double);
+    method public static double floor(double);
+    method public static int floorDiv(int, int);
+    method public static long floorDiv(long, int);
+    method public static long floorDiv(long, long);
+    method public static int floorMod(int, int);
+    method public static int floorMod(long, int);
+    method public static long floorMod(long, long);
+    method public static int getExponent(float);
+    method public static int getExponent(double);
+    method public static double hypot(double, double);
+    method public static double log(double);
+    method public static double log10(double);
+    method public static double log1p(double);
+    method public static int max(int, int);
+    method public static long max(long, long);
+    method public static float max(float, float);
+    method public static double max(double, double);
+    method public static int min(int, int);
+    method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
+    method public static int multiplyExact(int, int);
+    method public static long multiplyExact(long, int);
+    method public static long multiplyExact(long, long);
+    method public static long multiplyFull(int, int);
+    method public static long multiplyHigh(long, long);
+    method public static double nextAfter(double, double);
+    method public static float nextAfter(float, double);
+    method public static double nextDown(double);
+    method public static float nextDown(float);
+    method public static double nextUp(double);
+    method public static float nextUp(float);
+    method public static double pow(double, double);
+    method public static double random();
+    method public static double rint(double);
+    method public static int round(float);
+    method public static long round(double);
+    method public static double scalb(double, int);
+    method public static float scalb(float, int);
+    method public static double signum(double);
+    method public static float signum(float);
+    method public static double sin(double);
+    method public static double sinh(double);
+    method public static double sqrt(double);
+    method public static int subtractExact(int, int);
+    method public static long subtractExact(long, long);
+    method public static double tan(double);
+    method public static double tanh(double);
+    method public static double toDegrees(double);
+    method public static int toIntExact(long);
+    method public static double toRadians(double);
+    method public static double ulp(double);
+    method public static float ulp(float);
+    field public static final double E = 2.718281828459045;
+    field public static final double PI = 3.141592653589793;
+  }
+
+  public final class String implements java.lang.CharSequence java.lang.Comparable<java.lang.String> java.io.Serializable {
+    ctor public String();
+    ctor public String(@NonNull String);
+    ctor public String(char[]);
+    ctor public String(char[], int, int);
+    ctor public String(int[], int, int);
+    ctor @Deprecated public String(byte[], int, int, int);
+    ctor @Deprecated public String(byte[], int);
+    ctor public String(byte[], int, int, @NonNull String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], int, int, @NonNull java.nio.charset.Charset);
+    ctor public String(byte[], @NonNull String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], @NonNull java.nio.charset.Charset);
+    ctor public String(byte[], int, int);
+    ctor public String(byte[]);
+    ctor public String(@NonNull StringBuffer);
+    ctor public String(@NonNull StringBuilder);
+    method public char charAt(int);
+    method public int codePointAt(int);
+    method public int codePointBefore(int);
+    method public int codePointCount(int, int);
+    method public int compareTo(@NonNull String);
+    method public int compareToIgnoreCase(@NonNull String);
+    method @NonNull public String concat(@NonNull String);
+    method public boolean contains(@NonNull CharSequence);
+    method public boolean contentEquals(@NonNull StringBuffer);
+    method public boolean contentEquals(@NonNull CharSequence);
+    method @NonNull public static String copyValueOf(char[], int, int);
+    method @NonNull public static String copyValueOf(char[]);
+    method public boolean endsWith(@NonNull String);
+    method public boolean equalsIgnoreCase(@Nullable String);
+    method @NonNull public static String format(@NonNull String, @NonNull java.lang.Object...);
+    method @NonNull public static String format(@NonNull java.util.Locale, @NonNull String, @NonNull java.lang.Object...);
+    method @Deprecated public void getBytes(int, int, byte[], int);
+    method public byte[] getBytes(@NonNull String) throws java.io.UnsupportedEncodingException;
+    method public byte[] getBytes(@NonNull java.nio.charset.Charset);
+    method public byte[] getBytes();
+    method public void getChars(int, int, char[], int);
+    method public int indexOf(int);
+    method public int indexOf(int, int);
+    method public int indexOf(@NonNull String);
+    method public int indexOf(@NonNull String, int);
+    method @NonNull public String intern();
+    method public boolean isEmpty();
+    method @NonNull public static String join(@NonNull CharSequence, @Nullable java.lang.CharSequence...);
+    method @NonNull public static String join(@NonNull CharSequence, @NonNull Iterable<? extends java.lang.CharSequence>);
+    method public int lastIndexOf(int);
+    method public int lastIndexOf(int, int);
+    method public int lastIndexOf(@NonNull String);
+    method public int lastIndexOf(@NonNull String, int);
+    method public int length();
+    method public boolean matches(@NonNull String);
+    method public int offsetByCodePoints(int, int);
+    method public boolean regionMatches(int, @NonNull String, int, int);
+    method public boolean regionMatches(boolean, int, @NonNull String, int, int);
+    method @NonNull public String replace(char, char);
+    method @NonNull public String replace(@NonNull CharSequence, @NonNull CharSequence);
+    method @NonNull public String replaceAll(@NonNull String, @NonNull String);
+    method @NonNull public String replaceFirst(@NonNull String, @NonNull String);
+    method @NonNull public String[] split(@NonNull String, int);
+    method @NonNull public String[] split(@NonNull String);
+    method public boolean startsWith(@NonNull String, int);
+    method public boolean startsWith(@NonNull String);
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String substring(int);
+    method @NonNull public String substring(int, int);
+    method public char[] toCharArray();
+    method @NonNull public String toLowerCase(@NonNull java.util.Locale);
+    method @NonNull public String toLowerCase();
+    method @NonNull public String toUpperCase(@NonNull java.util.Locale);
+    method @NonNull public String toUpperCase();
+    method @NonNull public String trim();
+    method @NonNull public static String valueOf(@Nullable Object);
+    method @NonNull public static String valueOf(char[]);
+    method @NonNull public static String valueOf(char[], int, int);
+    method @NonNull public static String valueOf(boolean);
+    method @NonNull public static String valueOf(char);
+    method @NonNull public static String valueOf(int);
+    method @NonNull public static String valueOf(long);
+    method @NonNull public static String valueOf(float);
+    method @NonNull public static String valueOf(double);
+    field public static final java.util.Comparator<java.lang.String> CASE_INSENSITIVE_ORDER;
+  }
+
+  public final class StringBuffer implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+    ctor public StringBuffer();
+    ctor public StringBuffer(int);
+    ctor public StringBuffer(@NonNull String);
+    ctor public StringBuffer(@NonNull CharSequence);
+    method @NonNull public StringBuffer append(@Nullable Object);
+    method @NonNull public StringBuffer append(@Nullable String);
+    method @NonNull public StringBuffer append(@Nullable StringBuffer);
+    method @NonNull public StringBuffer append(@Nullable CharSequence);
+    method @NonNull public StringBuffer append(@Nullable CharSequence, int, int);
+    method @NonNull public StringBuffer append(char[]);
+    method @NonNull public StringBuffer append(char[], int, int);
+    method @NonNull public StringBuffer append(boolean);
+    method @NonNull public StringBuffer append(char);
+    method @NonNull public StringBuffer append(int);
+    method @NonNull public StringBuffer append(long);
+    method @NonNull public StringBuffer append(float);
+    method @NonNull public StringBuffer append(double);
+    method @NonNull public StringBuffer appendCodePoint(int);
+    method public int capacity();
+    method public char charAt(int);
+    method public int codePointAt(int);
+    method public int codePointBefore(int);
+    method public int codePointCount(int, int);
+    method @NonNull public StringBuffer delete(int, int);
+    method @NonNull public StringBuffer deleteCharAt(int);
+    method public void ensureCapacity(int);
+    method public void getChars(int, int, char[], int);
+    method public int indexOf(@NonNull String);
+    method public int indexOf(@NonNull String, int);
+    method @NonNull public StringBuffer insert(int, char[], int, int);
+    method @NonNull public StringBuffer insert(int, @Nullable Object);
+    method @NonNull public StringBuffer insert(int, @Nullable String);
+    method @NonNull public StringBuffer insert(int, char[]);
+    method @NonNull public StringBuffer insert(int, @Nullable CharSequence);
+    method @NonNull public StringBuffer insert(int, @Nullable CharSequence, int, int);
+    method @NonNull public StringBuffer insert(int, boolean);
+    method @NonNull public StringBuffer insert(int, char);
+    method @NonNull public StringBuffer insert(int, int);
+    method @NonNull public StringBuffer insert(int, long);
+    method @NonNull public StringBuffer insert(int, float);
+    method @NonNull public StringBuffer insert(int, double);
+    method public int lastIndexOf(@NonNull String);
+    method public int lastIndexOf(@NonNull String, int);
+    method public int length();
+    method public int offsetByCodePoints(int, int);
+    method @NonNull public StringBuffer replace(int, int, @NonNull String);
+    method @NonNull public StringBuffer reverse();
+    method public void setCharAt(int, char);
+    method public void setLength(int);
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String substring(int);
+    method @NonNull public String substring(int, int);
+    method public void trimToSize();
+  }
+
+  public final class StringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+    ctor public StringBuilder();
+    ctor public StringBuilder(int);
+    ctor public StringBuilder(@NonNull String);
+    ctor public StringBuilder(@NonNull CharSequence);
+    method @NonNull public StringBuilder append(@Nullable Object);
+    method @NonNull public StringBuilder append(@Nullable String);
+    method @NonNull public StringBuilder append(@Nullable StringBuffer);
+    method @NonNull public StringBuilder append(@Nullable CharSequence);
+    method @NonNull public StringBuilder append(@Nullable CharSequence, int, int);
+    method @NonNull public StringBuilder append(char[]);
+    method @NonNull public StringBuilder append(char[], int, int);
+    method @NonNull public StringBuilder append(boolean);
+    method @NonNull public StringBuilder append(char);
+    method @NonNull public StringBuilder append(int);
+    method @NonNull public StringBuilder append(long);
+    method @NonNull public StringBuilder append(float);
+    method @NonNull public StringBuilder append(double);
+    method @NonNull public StringBuilder appendCodePoint(int);
+    method public int capacity();
+    method public char charAt(int);
+    method public int codePointAt(int);
+    method public int codePointBefore(int);
+    method public int codePointCount(int, int);
+    method @NonNull public StringBuilder delete(int, int);
+    method @NonNull public StringBuilder deleteCharAt(int);
+    method public void ensureCapacity(int);
+    method public void getChars(int, int, char[], int);
+    method public int indexOf(@NonNull String);
+    method public int indexOf(@NonNull String, int);
+    method @NonNull public StringBuilder insert(int, char[], int, int);
+    method @NonNull public StringBuilder insert(int, @Nullable Object);
+    method @NonNull public StringBuilder insert(int, @Nullable String);
+    method @NonNull public StringBuilder insert(int, char[]);
+    method @NonNull public StringBuilder insert(int, @Nullable CharSequence);
+    method @NonNull public StringBuilder insert(int, @Nullable CharSequence, int, int);
+    method @NonNull public StringBuilder insert(int, boolean);
+    method @NonNull public StringBuilder insert(int, char);
+    method @NonNull public StringBuilder insert(int, int);
+    method @NonNull public StringBuilder insert(int, long);
+    method @NonNull public StringBuilder insert(int, float);
+    method @NonNull public StringBuilder insert(int, double);
+    method public int lastIndexOf(@NonNull String);
+    method public int lastIndexOf(@NonNull String, int);
+    method public int length();
+    method public int offsetByCodePoints(int, int);
+    method @NonNull public StringBuilder replace(int, int, @NonNull String);
+    method @NonNull public StringBuilder reverse();
+    method public void setCharAt(int, char);
+    method public void setLength(int);
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String substring(int);
+    method @NonNull public String substring(int, int);
+    method public void trimToSize();
+  }
+
+  public class StringIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
+    ctor public StringIndexOutOfBoundsException();
+    ctor public StringIndexOutOfBoundsException(String);
+    ctor public StringIndexOutOfBoundsException(int);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface SuppressWarnings {
+    method public abstract String[] value();
+  }
+
+  public final class System {
+    method public static void arraycopy(@NonNull Object, int, @NonNull Object, int, int);
+    method @Nullable public static String clearProperty(@NonNull String);
+    method @Nullable public static java.io.Console console();
+    method public static long currentTimeMillis();
+    method public static void exit(int);
+    method public static void gc();
+    method @NonNull public static java.util.Properties getProperties();
+    method @Nullable public static String getProperty(@NonNull String);
+    method @Nullable public static String getProperty(@NonNull String, @Nullable String);
+    method @Nullable public static SecurityManager getSecurityManager();
+    method @Nullable public static String getenv(@NonNull String);
+    method @NonNull public static java.util.Map<java.lang.String,java.lang.String> getenv();
+    method public static int identityHashCode(@Nullable Object);
+    method @Nullable public static java.nio.channels.Channel inheritedChannel() throws java.io.IOException;
+    method @NonNull public static String lineSeparator();
+    method public static void load(@NonNull String);
+    method public static void loadLibrary(@NonNull String);
+    method @NonNull public static String mapLibraryName(@NonNull String);
+    method public static long nanoTime();
+    method public static void runFinalization();
+    method @Deprecated public static void runFinalizersOnExit(boolean);
+    method public static void setErr(@Nullable java.io.PrintStream);
+    method public static void setIn(@Nullable java.io.InputStream);
+    method public static void setOut(@Nullable java.io.PrintStream);
+    method public static void setProperties(@Nullable java.util.Properties);
+    method @Nullable public static String setProperty(@NonNull String, @Nullable String);
+    method public static void setSecurityManager(@Nullable SecurityManager);
+    field public static final java.io.PrintStream err;
+    field public static final java.io.InputStream in;
+    field public static final java.io.PrintStream out;
+  }
+
+  public class Thread implements java.lang.Runnable {
+    ctor public Thread();
+    ctor public Thread(@Nullable Runnable);
+    ctor public Thread(@Nullable ThreadGroup, @Nullable Runnable);
+    ctor public Thread(@NonNull String);
+    ctor public Thread(@Nullable ThreadGroup, @NonNull String);
+    ctor public Thread(@Nullable Runnable, @NonNull String);
+    ctor public Thread(@Nullable ThreadGroup, @Nullable Runnable, @NonNull String);
+    ctor public Thread(@Nullable ThreadGroup, @Nullable Runnable, @NonNull String, long);
+    method public static int activeCount();
+    method public final void checkAccess();
+    method @Deprecated public int countStackFrames();
+    method @NonNull public static Thread currentThread();
+    method @Deprecated public void destroy();
+    method public static void dumpStack();
+    method public static int enumerate(Thread[]);
+    method @NonNull public static java.util.Map<java.lang.Thread,java.lang.StackTraceElement[]> getAllStackTraces();
+    method @Nullable public ClassLoader getContextClassLoader();
+    method @Nullable public static java.lang.Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler();
+    method public long getId();
+    method @NonNull public final String getName();
+    method public final int getPriority();
+    method @NonNull public StackTraceElement[] getStackTrace();
+    method @NonNull public java.lang.Thread.State getState();
+    method @Nullable public final ThreadGroup getThreadGroup();
+    method @Nullable public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
+    method public static boolean holdsLock(@NonNull Object);
+    method public void interrupt();
+    method public static boolean interrupted();
+    method public final boolean isAlive();
+    method public final boolean isDaemon();
+    method public boolean isInterrupted();
+    method public final void join(long) throws java.lang.InterruptedException;
+    method public final void join(long, int) throws java.lang.InterruptedException;
+    method public final void join() throws java.lang.InterruptedException;
+    method @Deprecated public final void resume();
+    method public void run();
+    method public void setContextClassLoader(@Nullable ClassLoader);
+    method public final void setDaemon(boolean);
+    method public static void setDefaultUncaughtExceptionHandler(@Nullable java.lang.Thread.UncaughtExceptionHandler);
+    method public final void setName(@NonNull String);
+    method public final void setPriority(int);
+    method public void setUncaughtExceptionHandler(@Nullable java.lang.Thread.UncaughtExceptionHandler);
+    method public static void sleep(long) throws java.lang.InterruptedException;
+    method public static void sleep(long, int) throws java.lang.InterruptedException;
+    method public void start();
+    method @Deprecated public final void stop();
+    method @Deprecated public final void stop(@Nullable Throwable);
+    method @Deprecated public final void suspend();
+    method public static void yield();
+    field public static final int MAX_PRIORITY = 10; // 0xa
+    field public static final int MIN_PRIORITY = 1; // 0x1
+    field public static final int NORM_PRIORITY = 5; // 0x5
+  }
+
+  public enum Thread.State {
+    enum_constant public static final java.lang.Thread.State BLOCKED;
+    enum_constant public static final java.lang.Thread.State NEW;
+    enum_constant public static final java.lang.Thread.State RUNNABLE;
+    enum_constant public static final java.lang.Thread.State TERMINATED;
+    enum_constant public static final java.lang.Thread.State TIMED_WAITING;
+    enum_constant public static final java.lang.Thread.State WAITING;
+  }
+
+  @java.lang.FunctionalInterface public static interface Thread.UncaughtExceptionHandler {
+    method public void uncaughtException(@NonNull Thread, @NonNull Throwable);
+  }
+
+  public class ThreadDeath extends java.lang.Error {
+    ctor public ThreadDeath();
+  }
+
+  public class ThreadGroup implements java.lang.Thread.UncaughtExceptionHandler {
+    ctor public ThreadGroup(String);
+    ctor public ThreadGroup(ThreadGroup, String);
+    method public int activeCount();
+    method public int activeGroupCount();
+    method @Deprecated public boolean allowThreadSuspension(boolean);
+    method public final void checkAccess();
+    method public final void destroy();
+    method public int enumerate(Thread[]);
+    method public int enumerate(Thread[], boolean);
+    method public int enumerate(ThreadGroup[]);
+    method public int enumerate(ThreadGroup[], boolean);
+    method public final int getMaxPriority();
+    method public final String getName();
+    method public final ThreadGroup getParent();
+    method public final void interrupt();
+    method public final boolean isDaemon();
+    method public boolean isDestroyed();
+    method public void list();
+    method public final boolean parentOf(ThreadGroup);
+    method @Deprecated public final void resume();
+    method public final void setDaemon(boolean);
+    method public final void setMaxPriority(int);
+    method @Deprecated public final void stop();
+    method @Deprecated public final void suspend();
+    method public void uncaughtException(Thread, Throwable);
+  }
+
+  public class ThreadLocal<T> {
+    ctor public ThreadLocal();
+    method @Nullable public T get();
+    method @Nullable protected T initialValue();
+    method public void remove();
+    method public void set(T);
+    method @NonNull public static <S> ThreadLocal<S> withInitial(@NonNull java.util.function.Supplier<? extends S>);
+  }
+
+  public class Throwable implements java.io.Serializable {
+    ctor public Throwable();
+    ctor public Throwable(@Nullable String);
+    ctor public Throwable(@Nullable String, @Nullable Throwable);
+    ctor public Throwable(@Nullable Throwable);
+    ctor protected Throwable(@Nullable String, @Nullable Throwable, boolean, boolean);
+    method public final void addSuppressed(@NonNull Throwable);
+    method @NonNull public Throwable fillInStackTrace();
+    method @Nullable public Throwable getCause();
+    method @Nullable public String getLocalizedMessage();
+    method @Nullable public String getMessage();
+    method @NonNull public StackTraceElement[] getStackTrace();
+    method @NonNull public final Throwable[] getSuppressed();
+    method @NonNull public Throwable initCause(@Nullable Throwable);
+    method public void printStackTrace();
+    method public void printStackTrace(@NonNull java.io.PrintStream);
+    method public void printStackTrace(@NonNull java.io.PrintWriter);
+    method public void setStackTrace(@NonNull StackTraceElement[]);
+  }
+
+  public class TypeNotPresentException extends java.lang.RuntimeException {
+    ctor public TypeNotPresentException(String, Throwable);
+    method public String typeName();
+  }
+
+  public class UnknownError extends java.lang.VirtualMachineError {
+    ctor public UnknownError();
+    ctor public UnknownError(String);
+  }
+
+  public class UnsatisfiedLinkError extends java.lang.LinkageError {
+    ctor public UnsatisfiedLinkError();
+    ctor public UnsatisfiedLinkError(String);
+  }
+
+  public class UnsupportedClassVersionError extends java.lang.ClassFormatError {
+    ctor public UnsupportedClassVersionError();
+    ctor public UnsupportedClassVersionError(String);
+  }
+
+  public class UnsupportedOperationException extends java.lang.RuntimeException {
+    ctor public UnsupportedOperationException();
+    ctor public UnsupportedOperationException(String);
+    ctor public UnsupportedOperationException(String, Throwable);
+    ctor public UnsupportedOperationException(Throwable);
+  }
+
+  public class VerifyError extends java.lang.LinkageError {
+    ctor public VerifyError();
+    ctor public VerifyError(String);
+  }
+
+  public abstract class VirtualMachineError extends java.lang.Error {
+    ctor public VirtualMachineError();
+    ctor public VirtualMachineError(String);
+    ctor public VirtualMachineError(String, Throwable);
+    ctor public VirtualMachineError(Throwable);
+  }
+
+  public final class Void {
+    field public static final Class<java.lang.Void> TYPE;
+  }
+
+}
+
+package java.lang.annotation {
+
+  public interface Annotation {
+    method public Class<? extends java.lang.annotation.Annotation> annotationType();
+    method public boolean equals(Object);
+    method public int hashCode();
+    method public String toString();
+  }
+
+  public class AnnotationFormatError extends java.lang.Error {
+    ctor public AnnotationFormatError(String);
+    ctor public AnnotationFormatError(String, Throwable);
+    ctor public AnnotationFormatError(Throwable);
+  }
+
+  public class AnnotationTypeMismatchException extends java.lang.RuntimeException {
+    ctor public AnnotationTypeMismatchException(java.lang.reflect.Method, String);
+    method public java.lang.reflect.Method element();
+    method public String foundType();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Documented {
+  }
+
+  public enum ElementType {
+    enum_constant public static final java.lang.annotation.ElementType ANNOTATION_TYPE;
+    enum_constant public static final java.lang.annotation.ElementType CONSTRUCTOR;
+    enum_constant public static final java.lang.annotation.ElementType FIELD;
+    enum_constant public static final java.lang.annotation.ElementType LOCAL_VARIABLE;
+    enum_constant public static final java.lang.annotation.ElementType METHOD;
+    enum_constant public static final java.lang.annotation.ElementType MODULE;
+    enum_constant public static final java.lang.annotation.ElementType PACKAGE;
+    enum_constant public static final java.lang.annotation.ElementType PARAMETER;
+    enum_constant public static final java.lang.annotation.ElementType TYPE;
+    enum_constant public static final java.lang.annotation.ElementType TYPE_PARAMETER;
+    enum_constant public static final java.lang.annotation.ElementType TYPE_USE;
+  }
+
+  public class IncompleteAnnotationException extends java.lang.RuntimeException {
+    ctor public IncompleteAnnotationException(Class<? extends java.lang.annotation.Annotation>, String);
+    method public Class<? extends java.lang.annotation.Annotation> annotationType();
+    method public String elementName();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Inherited {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.FIELD) public @interface Native {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Repeatable {
+    method public abstract Class<? extends java.lang.annotation.Annotation> value();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Retention {
+    method public abstract java.lang.annotation.RetentionPolicy value();
+  }
+
+  public enum RetentionPolicy {
+    enum_constant public static final java.lang.annotation.RetentionPolicy CLASS;
+    enum_constant public static final java.lang.annotation.RetentionPolicy RUNTIME;
+    enum_constant public static final java.lang.annotation.RetentionPolicy SOURCE;
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Target {
+    method public abstract java.lang.annotation.ElementType[] value();
+  }
+
+}
+
+package java.lang.invoke {
+
+  public abstract class CallSite {
+    method public abstract java.lang.invoke.MethodHandle dynamicInvoker();
+    method public abstract java.lang.invoke.MethodHandle getTarget();
+    method public abstract void setTarget(java.lang.invoke.MethodHandle);
+    method public java.lang.invoke.MethodType type();
+  }
+
+  public class ConstantCallSite extends java.lang.invoke.CallSite {
+    ctor public ConstantCallSite(java.lang.invoke.MethodHandle);
+    ctor protected ConstantCallSite(java.lang.invoke.MethodType, java.lang.invoke.MethodHandle) throws java.lang.Throwable;
+    method public final java.lang.invoke.MethodHandle dynamicInvoker();
+    method public final java.lang.invoke.MethodHandle getTarget();
+    method public final void setTarget(java.lang.invoke.MethodHandle);
+  }
+
+  public class LambdaConversionException extends java.lang.Exception {
+    ctor public LambdaConversionException();
+    ctor public LambdaConversionException(String);
+    ctor public LambdaConversionException(String, Throwable);
+    ctor public LambdaConversionException(Throwable);
+    ctor public LambdaConversionException(String, Throwable, boolean, boolean);
+  }
+
+  public abstract class MethodHandle {
+    method public java.lang.invoke.MethodHandle asCollector(Class<?>, int);
+    method public java.lang.invoke.MethodHandle asFixedArity();
+    method public java.lang.invoke.MethodHandle asSpreader(Class<?>, int);
+    method public java.lang.invoke.MethodHandle asType(java.lang.invoke.MethodType);
+    method public java.lang.invoke.MethodHandle asVarargsCollector(Class<?>);
+    method public java.lang.invoke.MethodHandle bindTo(Object);
+    method public final Object invoke(java.lang.Object...) throws java.lang.Throwable;
+    method public final Object invokeExact(java.lang.Object...) throws java.lang.Throwable;
+    method public Object invokeWithArguments(java.lang.Object...) throws java.lang.Throwable;
+    method public Object invokeWithArguments(java.util.List<?>) throws java.lang.Throwable;
+    method public boolean isVarargsCollector();
+    method public java.lang.invoke.MethodType type();
+  }
+
+  public interface MethodHandleInfo {
+    method public Class<?> getDeclaringClass();
+    method public java.lang.invoke.MethodType getMethodType();
+    method public int getModifiers();
+    method public String getName();
+    method public int getReferenceKind();
+    method public default boolean isVarArgs();
+    method @Deprecated public static boolean refKindIsField(int);
+    method @Deprecated public static boolean refKindIsValid(int);
+    method @Deprecated public static String refKindName(int);
+    method public static String referenceKindToString(int);
+    method public <T extends java.lang.reflect.Member> T reflectAs(Class<T>, java.lang.invoke.MethodHandles.Lookup);
+    method public static String toString(int, Class<?>, String, java.lang.invoke.MethodType);
+    field public static final int REF_getField = 1; // 0x1
+    field public static final int REF_getStatic = 2; // 0x2
+    field public static final int REF_invokeInterface = 9; // 0x9
+    field public static final int REF_invokeSpecial = 7; // 0x7
+    field public static final int REF_invokeStatic = 6; // 0x6
+    field public static final int REF_invokeVirtual = 5; // 0x5
+    field public static final int REF_newInvokeSpecial = 8; // 0x8
+    field public static final int REF_putField = 3; // 0x3
+    field public static final int REF_putStatic = 4; // 0x4
+  }
+
+  public class MethodHandles {
+    method public static java.lang.invoke.MethodHandle arrayElementGetter(Class<?>) throws java.lang.IllegalArgumentException;
+    method public static java.lang.invoke.MethodHandle arrayElementSetter(Class<?>) throws java.lang.IllegalArgumentException;
+    method public static java.lang.invoke.MethodHandle catchException(java.lang.invoke.MethodHandle, Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle collectArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle constant(Class<?>, Object);
+    method public static java.lang.invoke.MethodHandle dropArguments(java.lang.invoke.MethodHandle, int, java.util.List<java.lang.Class<?>>);
+    method public static java.lang.invoke.MethodHandle dropArguments(java.lang.invoke.MethodHandle, int, Class<?>...);
+    method public static java.lang.invoke.MethodHandle exactInvoker(java.lang.invoke.MethodType);
+    method public static java.lang.invoke.MethodHandle explicitCastArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType);
+    method public static java.lang.invoke.MethodHandle filterArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle...);
+    method public static java.lang.invoke.MethodHandle filterReturnValue(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle foldArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle guardWithTest(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle identity(Class<?>);
+    method public static java.lang.invoke.MethodHandle insertArguments(java.lang.invoke.MethodHandle, int, java.lang.Object...);
+    method public static java.lang.invoke.MethodHandle invoker(java.lang.invoke.MethodType);
+    method public static java.lang.invoke.MethodHandles.Lookup lookup();
+    method public static java.lang.invoke.MethodHandle permuteArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, int...);
+    method public static java.lang.invoke.MethodHandles.Lookup publicLookup();
+    method public static <T extends java.lang.reflect.Member> T reflectAs(Class<T>, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle spreadInvoker(java.lang.invoke.MethodType, int);
+    method public static java.lang.invoke.MethodHandle throwException(Class<?>, Class<? extends java.lang.Throwable>);
+  }
+
+  public static final class MethodHandles.Lookup {
+    method public java.lang.invoke.MethodHandle bind(Object, String, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findConstructor(Class<?>, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findGetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findSetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findSpecial(Class<?>, String, java.lang.invoke.MethodType, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findStatic(Class<?>, String, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findStaticGetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findStaticSetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findVirtual(Class<?>, String, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandles.Lookup in(Class<?>);
+    method public Class<?> lookupClass();
+    method public int lookupModes();
+    method public java.lang.invoke.MethodHandleInfo revealDirect(java.lang.invoke.MethodHandle);
+    method public java.lang.invoke.MethodHandle unreflect(java.lang.reflect.Method) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectConstructor(java.lang.reflect.Constructor<?>) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectGetter(java.lang.reflect.Field) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectSetter(java.lang.reflect.Field) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectSpecial(java.lang.reflect.Method, Class<?>) throws java.lang.IllegalAccessException;
+    field public static final int PACKAGE = 8; // 0x8
+    field public static final int PRIVATE = 2; // 0x2
+    field public static final int PROTECTED = 4; // 0x4
+    field public static final int PUBLIC = 1; // 0x1
+  }
+
+  public final class MethodType implements java.io.Serializable {
+    method public java.lang.invoke.MethodType appendParameterTypes(Class<?>...);
+    method public java.lang.invoke.MethodType appendParameterTypes(java.util.List<java.lang.Class<?>>);
+    method public java.lang.invoke.MethodType changeParameterType(int, Class<?>);
+    method public java.lang.invoke.MethodType changeReturnType(Class<?>);
+    method public java.lang.invoke.MethodType dropParameterTypes(int, int);
+    method public java.lang.invoke.MethodType erase();
+    method public static java.lang.invoke.MethodType fromMethodDescriptorString(String, ClassLoader) throws java.lang.IllegalArgumentException, java.lang.TypeNotPresentException;
+    method public java.lang.invoke.MethodType generic();
+    method public static java.lang.invoke.MethodType genericMethodType(int, boolean);
+    method public static java.lang.invoke.MethodType genericMethodType(int);
+    method public boolean hasPrimitives();
+    method public boolean hasWrappers();
+    method public java.lang.invoke.MethodType insertParameterTypes(int, Class<?>...);
+    method public java.lang.invoke.MethodType insertParameterTypes(int, java.util.List<java.lang.Class<?>>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, Class<?>[]);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, java.util.List<java.lang.Class<?>>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, Class<?>, Class<?>...);
+    method public static java.lang.invoke.MethodType methodType(Class<?>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, Class<?>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, java.lang.invoke.MethodType);
+    method public Class<?>[] parameterArray();
+    method public int parameterCount();
+    method public java.util.List<java.lang.Class<?>> parameterList();
+    method public Class<?> parameterType(int);
+    method public Class<?> returnType();
+    method public String toMethodDescriptorString();
+    method public java.lang.invoke.MethodType unwrap();
+    method public java.lang.invoke.MethodType wrap();
+  }
+
+  public class MutableCallSite extends java.lang.invoke.CallSite {
+    ctor public MutableCallSite(java.lang.invoke.MethodType);
+    ctor public MutableCallSite(java.lang.invoke.MethodHandle);
+    method public final java.lang.invoke.MethodHandle dynamicInvoker();
+    method public final java.lang.invoke.MethodHandle getTarget();
+    method public void setTarget(java.lang.invoke.MethodHandle);
+  }
+
+  public class VolatileCallSite extends java.lang.invoke.CallSite {
+    ctor public VolatileCallSite(java.lang.invoke.MethodType);
+    ctor public VolatileCallSite(java.lang.invoke.MethodHandle);
+    method public final java.lang.invoke.MethodHandle dynamicInvoker();
+    method public final java.lang.invoke.MethodHandle getTarget();
+    method public void setTarget(java.lang.invoke.MethodHandle);
+  }
+
+  public class WrongMethodTypeException extends java.lang.RuntimeException {
+    ctor public WrongMethodTypeException();
+    ctor public WrongMethodTypeException(String);
+  }
+
+}
+
+package java.lang.ref {
+
+  public class PhantomReference<T> extends java.lang.ref.Reference<T> {
+    ctor public PhantomReference(T, java.lang.ref.ReferenceQueue<? super T>);
+  }
+
+  public abstract class Reference<T> {
+    method public void clear();
+    method public boolean enqueue();
+    method public T get();
+    method @Deprecated public boolean isEnqueued();
+    method public static void reachabilityFence(Object);
+  }
+
+  public class ReferenceQueue<T> {
+    ctor public ReferenceQueue();
+    method public java.lang.ref.Reference<? extends T> poll();
+    method public java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
+    method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
+  }
+
+  public class SoftReference<T> extends java.lang.ref.Reference<T> {
+    ctor public SoftReference(T);
+    ctor public SoftReference(T, java.lang.ref.ReferenceQueue<? super T>);
+  }
+
+  public class WeakReference<T> extends java.lang.ref.Reference<T> {
+    ctor public WeakReference(T);
+    ctor public WeakReference(T, java.lang.ref.ReferenceQueue<? super T>);
+  }
+
+}
+
+package java.lang.reflect {
+
+  public class AccessibleObject implements java.lang.reflect.AnnotatedElement {
+    ctor protected AccessibleObject();
+    method @Nullable public <T extends java.lang.annotation.Annotation> T getAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method public boolean isAccessible();
+    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean) throws java.lang.SecurityException;
+    method public void setAccessible(boolean) throws java.lang.SecurityException;
+  }
+
+  public interface AnnotatedElement {
+    method @Nullable public <T extends java.lang.annotation.Annotation> T getAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method public default <T extends java.lang.annotation.Annotation> T[] getAnnotationsByType(@NonNull Class<T>);
+    method @Nullable public default <T extends java.lang.annotation.Annotation> T getDeclaredAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method public default <T extends java.lang.annotation.Annotation> T[] getDeclaredAnnotationsByType(@NonNull Class<T>);
+    method public default boolean isAnnotationPresent(@NonNull Class<? extends java.lang.annotation.Annotation>);
+  }
+
+  public final class Array {
+    method @Nullable public static Object get(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static boolean getBoolean(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static byte getByte(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static char getChar(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static double getDouble(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static float getFloat(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static int getInt(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static int getLength(@NonNull Object);
+    method public static long getLong(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static short getShort(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method @NonNull public static Object newInstance(@NonNull Class<?>, int) throws java.lang.NegativeArraySizeException;
+    method @NonNull public static Object newInstance(@NonNull Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException;
+    method public static void set(@NonNull Object, int, @Nullable Object) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setBoolean(@NonNull Object, int, boolean);
+    method public static void setByte(@NonNull Object, int, byte) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setChar(@NonNull Object, int, char) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setDouble(@NonNull Object, int, double) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setFloat(@NonNull Object, int, float) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setInt(@NonNull Object, int, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setLong(@NonNull Object, int, long) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setShort(@NonNull Object, int, short) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+  }
+
+  public final class Constructor<T> extends java.lang.reflect.Executable {
+    method @NonNull public Class<T> getDeclaringClass();
+    method public Class<?>[] getExceptionTypes();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method public java.lang.annotation.Annotation[][] getParameterAnnotations();
+    method @NonNull public Class<?>[] getParameterTypes();
+    method public java.lang.reflect.TypeVariable<java.lang.reflect.Constructor<T>>[] getTypeParameters();
+    method @NonNull public T newInstance(java.lang.Object...) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException;
+    method @NonNull public String toGenericString();
+  }
+
+  public abstract class Executable extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
+    method @NonNull public abstract Class<?>[] getExceptionTypes();
+    method @NonNull public java.lang.reflect.Type[] getGenericExceptionTypes();
+    method @NonNull public java.lang.reflect.Type[] getGenericParameterTypes();
+    method @NonNull public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
+    method public int getParameterCount();
+    method @NonNull public abstract Class<?>[] getParameterTypes();
+    method @NonNull public java.lang.reflect.Parameter[] getParameters();
+    method public final boolean isAnnotationPresent(@NonNull Class<? extends java.lang.annotation.Annotation>);
+    method public boolean isSynthetic();
+    method public boolean isVarArgs();
+    method @NonNull public abstract String toGenericString();
+  }
+
+  public final class Field extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member {
+    method @Nullable public Object get(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public boolean getBoolean(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public byte getByte(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public char getChar(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public Class<?> getDeclaringClass();
+    method public double getDouble(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public float getFloat(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public java.lang.reflect.Type getGenericType();
+    method public int getInt(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public long getLong(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method public short getShort(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public Class<?> getType();
+    method public boolean isEnumConstant();
+    method public boolean isSynthetic();
+    method public void set(@Nullable Object, @Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setBoolean(@Nullable Object, boolean) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setByte(@Nullable Object, byte) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setChar(@Nullable Object, char) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setDouble(@Nullable Object, double) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setFloat(@Nullable Object, float) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setInt(@Nullable Object, int) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setLong(@Nullable Object, long) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setShort(@Nullable Object, short) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public String toGenericString();
+  }
+
+  public interface GenericArrayType extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type getGenericComponentType();
+  }
+
+  public interface GenericDeclaration extends java.lang.reflect.AnnotatedElement {
+    method @NonNull public java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+  }
+
+  public class GenericSignatureFormatError extends java.lang.ClassFormatError {
+    ctor public GenericSignatureFormatError();
+    ctor public GenericSignatureFormatError(String);
+  }
+
+  public interface InvocationHandler {
+    method public Object invoke(Object, java.lang.reflect.Method, Object[]) throws java.lang.Throwable;
+  }
+
+  public class InvocationTargetException extends java.lang.ReflectiveOperationException {
+    ctor protected InvocationTargetException();
+    ctor public InvocationTargetException(Throwable);
+    ctor public InvocationTargetException(Throwable, String);
+    method public Throwable getTargetException();
+  }
+
+  public class MalformedParameterizedTypeException extends java.lang.RuntimeException {
+    ctor public MalformedParameterizedTypeException();
+  }
+
+  public class MalformedParametersException extends java.lang.RuntimeException {
+    ctor public MalformedParametersException();
+    ctor public MalformedParametersException(String);
+  }
+
+  public interface Member {
+    method @NonNull public Class<?> getDeclaringClass();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method public boolean isSynthetic();
+    field public static final int DECLARED = 1; // 0x1
+    field public static final int PUBLIC = 0; // 0x0
+  }
+
+  public final class Method extends java.lang.reflect.Executable {
+    method @NonNull public Class<?> getDeclaringClass();
+    method @Nullable public Object getDefaultValue();
+    method @NonNull public Class<?>[] getExceptionTypes();
+    method @NonNull public java.lang.reflect.Type getGenericReturnType();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method @NonNull public java.lang.annotation.Annotation[][] getParameterAnnotations();
+    method @NonNull public Class<?>[] getParameterTypes();
+    method @NonNull public Class<?> getReturnType();
+    method @NonNull public java.lang.reflect.TypeVariable<java.lang.reflect.Method>[] getTypeParameters();
+    method @Nullable public Object invoke(@Nullable Object, @Nullable java.lang.Object...) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException, java.lang.reflect.InvocationTargetException;
+    method public boolean isBridge();
+    method public boolean isDefault();
+    method @NonNull public String toGenericString();
+  }
+
+  public class Modifier {
+    ctor public Modifier();
+    method public static int classModifiers();
+    method public static int constructorModifiers();
+    method public static int fieldModifiers();
+    method public static int interfaceModifiers();
+    method public static boolean isAbstract(int);
+    method public static boolean isFinal(int);
+    method public static boolean isInterface(int);
+    method public static boolean isNative(int);
+    method public static boolean isPrivate(int);
+    method public static boolean isProtected(int);
+    method public static boolean isPublic(int);
+    method public static boolean isStatic(int);
+    method public static boolean isStrict(int);
+    method public static boolean isSynchronized(int);
+    method public static boolean isTransient(int);
+    method public static boolean isVolatile(int);
+    method public static int methodModifiers();
+    method public static int parameterModifiers();
+    method public static String toString(int);
+    field public static final int ABSTRACT = 1024; // 0x400
+    field public static final int FINAL = 16; // 0x10
+    field public static final int INTERFACE = 512; // 0x200
+    field public static final int NATIVE = 256; // 0x100
+    field public static final int PRIVATE = 2; // 0x2
+    field public static final int PROTECTED = 4; // 0x4
+    field public static final int PUBLIC = 1; // 0x1
+    field public static final int STATIC = 8; // 0x8
+    field public static final int STRICT = 2048; // 0x800
+    field public static final int SYNCHRONIZED = 32; // 0x20
+    field public static final int TRANSIENT = 128; // 0x80
+    field public static final int VOLATILE = 64; // 0x40
+  }
+
+  public final class Parameter implements java.lang.reflect.AnnotatedElement {
+    method @Nullable public <T extends java.lang.annotation.Annotation> T getAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method @NonNull public java.lang.reflect.Executable getDeclaringExecutable();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method @NonNull public java.lang.reflect.Type getParameterizedType();
+    method @NonNull public Class<?> getType();
+    method public boolean isImplicit();
+    method public boolean isNamePresent();
+    method public boolean isSynthetic();
+    method public boolean isVarArgs();
+  }
+
+  public interface ParameterizedType extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type[] getActualTypeArguments();
+    method @Nullable public java.lang.reflect.Type getOwnerType();
+    method @NonNull public java.lang.reflect.Type getRawType();
+  }
+
+  public class Proxy implements java.io.Serializable {
+    ctor protected Proxy(@NonNull java.lang.reflect.InvocationHandler);
+    method @NonNull public static java.lang.reflect.InvocationHandler getInvocationHandler(@NonNull Object) throws java.lang.IllegalArgumentException;
+    method @NonNull public static Class<?> getProxyClass(@Nullable ClassLoader, @NonNull Class<?>...) throws java.lang.IllegalArgumentException;
+    method public static boolean isProxyClass(@NonNull Class<?>);
+    method @NonNull public static Object newProxyInstance(@Nullable ClassLoader, @NonNull Class<?>[], @NonNull java.lang.reflect.InvocationHandler) throws java.lang.IllegalArgumentException;
+    field protected java.lang.reflect.InvocationHandler h;
+  }
+
+  public final class ReflectPermission extends java.security.BasicPermission {
+    ctor public ReflectPermission(String);
+    ctor public ReflectPermission(String, String);
+  }
+
+  public interface Type {
+    method @NonNull public default String getTypeName();
+  }
+
+  public interface TypeVariable<D extends java.lang.reflect.GenericDeclaration> extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type[] getBounds();
+    method @NonNull public D getGenericDeclaration();
+    method @NonNull public String getName();
+  }
+
+  public class UndeclaredThrowableException extends java.lang.RuntimeException {
+    ctor public UndeclaredThrowableException(Throwable);
+    ctor public UndeclaredThrowableException(Throwable, String);
+    method public Throwable getUndeclaredThrowable();
+  }
+
+  public interface WildcardType extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type[] getLowerBounds();
+    method @NonNull public java.lang.reflect.Type[] getUpperBounds();
+  }
+
+}
+
+package java.math {
+
+  public class BigDecimal extends java.lang.Number implements java.lang.Comparable<java.math.BigDecimal> {
+    ctor public BigDecimal(char[], int, int);
+    ctor public BigDecimal(char[], int, int, java.math.MathContext);
+    ctor public BigDecimal(char[]);
+    ctor public BigDecimal(char[], java.math.MathContext);
+    ctor public BigDecimal(String);
+    ctor public BigDecimal(String, java.math.MathContext);
+    ctor public BigDecimal(double);
+    ctor public BigDecimal(double, java.math.MathContext);
+    ctor public BigDecimal(java.math.BigInteger);
+    ctor public BigDecimal(java.math.BigInteger, java.math.MathContext);
+    ctor public BigDecimal(java.math.BigInteger, int);
+    ctor public BigDecimal(java.math.BigInteger, int, java.math.MathContext);
+    ctor public BigDecimal(int);
+    ctor public BigDecimal(int, java.math.MathContext);
+    ctor public BigDecimal(long);
+    ctor public BigDecimal(long, java.math.MathContext);
+    method public java.math.BigDecimal abs();
+    method public java.math.BigDecimal abs(java.math.MathContext);
+    method public java.math.BigDecimal add(java.math.BigDecimal);
+    method public java.math.BigDecimal add(java.math.BigDecimal, java.math.MathContext);
+    method public byte byteValueExact();
+    method public int compareTo(java.math.BigDecimal);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, int, int);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, int, java.math.RoundingMode);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, int);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, java.math.RoundingMode);
+    method public java.math.BigDecimal divide(java.math.BigDecimal);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal[] divideAndRemainder(java.math.BigDecimal);
+    method public java.math.BigDecimal[] divideAndRemainder(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal divideToIntegralValue(java.math.BigDecimal);
+    method public java.math.BigDecimal divideToIntegralValue(java.math.BigDecimal, java.math.MathContext);
+    method public double doubleValue();
+    method public float floatValue();
+    method public int intValue();
+    method public int intValueExact();
+    method public long longValue();
+    method public long longValueExact();
+    method public java.math.BigDecimal max(java.math.BigDecimal);
+    method public java.math.BigDecimal min(java.math.BigDecimal);
+    method public java.math.BigDecimal movePointLeft(int);
+    method public java.math.BigDecimal movePointRight(int);
+    method public java.math.BigDecimal multiply(java.math.BigDecimal);
+    method public java.math.BigDecimal multiply(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal negate();
+    method public java.math.BigDecimal negate(java.math.MathContext);
+    method public java.math.BigDecimal plus();
+    method public java.math.BigDecimal plus(java.math.MathContext);
+    method public java.math.BigDecimal pow(int);
+    method public java.math.BigDecimal pow(int, java.math.MathContext);
+    method public int precision();
+    method public java.math.BigDecimal remainder(java.math.BigDecimal);
+    method public java.math.BigDecimal remainder(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal round(java.math.MathContext);
+    method public int scale();
+    method public java.math.BigDecimal scaleByPowerOfTen(int);
+    method public java.math.BigDecimal setScale(int, java.math.RoundingMode);
+    method public java.math.BigDecimal setScale(int, int);
+    method public java.math.BigDecimal setScale(int);
+    method public short shortValueExact();
+    method public int signum();
+    method public java.math.BigDecimal stripTrailingZeros();
+    method public java.math.BigDecimal subtract(java.math.BigDecimal);
+    method public java.math.BigDecimal subtract(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigInteger toBigInteger();
+    method public java.math.BigInteger toBigIntegerExact();
+    method public String toEngineeringString();
+    method public String toPlainString();
+    method public java.math.BigDecimal ulp();
+    method public java.math.BigInteger unscaledValue();
+    method public static java.math.BigDecimal valueOf(long, int);
+    method public static java.math.BigDecimal valueOf(long);
+    method public static java.math.BigDecimal valueOf(double);
+    field public static final java.math.BigDecimal ONE;
+    field public static final int ROUND_CEILING = 2; // 0x2
+    field public static final int ROUND_DOWN = 1; // 0x1
+    field public static final int ROUND_FLOOR = 3; // 0x3
+    field public static final int ROUND_HALF_DOWN = 5; // 0x5
+    field public static final int ROUND_HALF_EVEN = 6; // 0x6
+    field public static final int ROUND_HALF_UP = 4; // 0x4
+    field public static final int ROUND_UNNECESSARY = 7; // 0x7
+    field public static final int ROUND_UP = 0; // 0x0
+    field public static final java.math.BigDecimal TEN;
+    field public static final java.math.BigDecimal ZERO;
+  }
+
+  public class BigInteger extends java.lang.Number implements java.lang.Comparable<java.math.BigInteger> {
+    ctor public BigInteger(byte[]);
+    ctor public BigInteger(int, byte[]);
+    ctor public BigInteger(@NonNull String, int);
+    ctor public BigInteger(@NonNull String);
+    ctor public BigInteger(int, @NonNull java.util.Random);
+    ctor public BigInteger(int, int, @NonNull java.util.Random);
+    method @NonNull public java.math.BigInteger abs();
+    method @NonNull public java.math.BigInteger add(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger and(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger andNot(@NonNull java.math.BigInteger);
+    method public int bitCount();
+    method public int bitLength();
+    method public byte byteValueExact();
+    method @NonNull public java.math.BigInteger clearBit(int);
+    method public int compareTo(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger divide(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger[] divideAndRemainder(@NonNull java.math.BigInteger);
+    method public double doubleValue();
+    method @NonNull public java.math.BigInteger flipBit(int);
+    method public float floatValue();
+    method @NonNull public java.math.BigInteger gcd(@NonNull java.math.BigInteger);
+    method public int getLowestSetBit();
+    method public int intValue();
+    method public int intValueExact();
+    method public boolean isProbablePrime(int);
+    method public long longValue();
+    method public long longValueExact();
+    method @NonNull public java.math.BigInteger max(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger min(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger mod(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger modInverse(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger modPow(@NonNull java.math.BigInteger, @NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger multiply(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger negate();
+    method @NonNull public java.math.BigInteger nextProbablePrime();
+    method @NonNull public java.math.BigInteger not();
+    method @NonNull public java.math.BigInteger or(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger pow(int);
+    method @NonNull public static java.math.BigInteger probablePrime(int, @NonNull java.util.Random);
+    method @NonNull public java.math.BigInteger remainder(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger setBit(int);
+    method @NonNull public java.math.BigInteger shiftLeft(int);
+    method @NonNull public java.math.BigInteger shiftRight(int);
+    method public short shortValueExact();
+    method public int signum();
+    method @NonNull public java.math.BigInteger subtract(@NonNull java.math.BigInteger);
+    method public boolean testBit(int);
+    method public byte[] toByteArray();
+    method @NonNull public String toString(int);
+    method @NonNull public static java.math.BigInteger valueOf(long);
+    method @NonNull public java.math.BigInteger xor(@NonNull java.math.BigInteger);
+    field @NonNull public static final java.math.BigInteger ONE;
+    field @NonNull public static final java.math.BigInteger TEN;
+    field @NonNull public static final java.math.BigInteger ZERO;
+  }
+
+  public final class MathContext implements java.io.Serializable {
+    ctor public MathContext(int);
+    ctor public MathContext(int, java.math.RoundingMode);
+    ctor public MathContext(String);
+    method public int getPrecision();
+    method public java.math.RoundingMode getRoundingMode();
+    field public static final java.math.MathContext DECIMAL128;
+    field public static final java.math.MathContext DECIMAL32;
+    field public static final java.math.MathContext DECIMAL64;
+    field public static final java.math.MathContext UNLIMITED;
+  }
+
+  public enum RoundingMode {
+    method public static java.math.RoundingMode valueOf(int);
+    enum_constant public static final java.math.RoundingMode CEILING;
+    enum_constant public static final java.math.RoundingMode DOWN;
+    enum_constant public static final java.math.RoundingMode FLOOR;
+    enum_constant public static final java.math.RoundingMode HALF_DOWN;
+    enum_constant public static final java.math.RoundingMode HALF_EVEN;
+    enum_constant public static final java.math.RoundingMode HALF_UP;
+    enum_constant public static final java.math.RoundingMode UNNECESSARY;
+    enum_constant public static final java.math.RoundingMode UP;
+  }
+
+}
+
+package java.net {
+
+  public abstract class Authenticator {
+    ctor public Authenticator();
+    method protected java.net.PasswordAuthentication getPasswordAuthentication();
+    method protected final String getRequestingHost();
+    method protected final int getRequestingPort();
+    method protected final String getRequestingPrompt();
+    method protected final String getRequestingProtocol();
+    method protected final String getRequestingScheme();
+    method protected final java.net.InetAddress getRequestingSite();
+    method protected java.net.URL getRequestingURL();
+    method protected java.net.Authenticator.RequestorType getRequestorType();
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, String, String, String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(String, java.net.InetAddress, int, String, String, String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(String, java.net.InetAddress, int, String, String, String, java.net.URL, java.net.Authenticator.RequestorType);
+    method public static void setDefault(java.net.Authenticator);
+  }
+
+  public enum Authenticator.RequestorType {
+    enum_constant public static final java.net.Authenticator.RequestorType PROXY;
+    enum_constant public static final java.net.Authenticator.RequestorType SERVER;
+  }
+
+  public class BindException extends java.net.SocketException {
+    ctor public BindException(String);
+    ctor public BindException();
+  }
+
+  public abstract class CacheRequest {
+    ctor public CacheRequest();
+    method public abstract void abort();
+    method public abstract java.io.OutputStream getBody() throws java.io.IOException;
+  }
+
+  public abstract class CacheResponse {
+    ctor public CacheResponse();
+    method public abstract java.io.InputStream getBody() throws java.io.IOException;
+    method public abstract java.util.Map<java.lang.String,java.util.List<java.lang.String>> getHeaders() throws java.io.IOException;
+  }
+
+  public class ConnectException extends java.net.SocketException {
+    ctor public ConnectException(String);
+    ctor public ConnectException();
+  }
+
+  public abstract class ContentHandler {
+    ctor public ContentHandler();
+    method public abstract Object getContent(java.net.URLConnection) throws java.io.IOException;
+    method public Object getContent(java.net.URLConnection, Class[]) throws java.io.IOException;
+  }
+
+  public interface ContentHandlerFactory {
+    method public java.net.ContentHandler createContentHandler(String);
+  }
+
+  public abstract class CookieHandler {
+    ctor public CookieHandler();
+    method public abstract java.util.Map<java.lang.String,java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public static java.net.CookieHandler getDefault();
+    method public abstract void put(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public static void setDefault(java.net.CookieHandler);
+  }
+
+  public class CookieManager extends java.net.CookieHandler {
+    ctor public CookieManager();
+    ctor public CookieManager(java.net.CookieStore, java.net.CookiePolicy);
+    method public java.util.Map<java.lang.String,java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public java.net.CookieStore getCookieStore();
+    method public void put(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public void setCookiePolicy(java.net.CookiePolicy);
+  }
+
+  public interface CookiePolicy {
+    method public boolean shouldAccept(java.net.URI, java.net.HttpCookie);
+    field public static final java.net.CookiePolicy ACCEPT_ALL;
+    field public static final java.net.CookiePolicy ACCEPT_NONE;
+    field public static final java.net.CookiePolicy ACCEPT_ORIGINAL_SERVER;
+  }
+
+  public interface CookieStore {
+    method public void add(java.net.URI, java.net.HttpCookie);
+    method public java.util.List<java.net.HttpCookie> get(java.net.URI);
+    method public java.util.List<java.net.HttpCookie> getCookies();
+    method public java.util.List<java.net.URI> getURIs();
+    method public boolean remove(java.net.URI, java.net.HttpCookie);
+    method public boolean removeAll();
+  }
+
+  public final class DatagramPacket {
+    ctor public DatagramPacket(byte[], int, int);
+    ctor public DatagramPacket(byte[], int);
+    ctor public DatagramPacket(byte[], int, int, java.net.InetAddress, int);
+    ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress);
+    ctor public DatagramPacket(byte[], int, java.net.InetAddress, int);
+    ctor public DatagramPacket(byte[], int, java.net.SocketAddress);
+    method public java.net.InetAddress getAddress();
+    method public byte[] getData();
+    method public int getLength();
+    method public int getOffset();
+    method public int getPort();
+    method public java.net.SocketAddress getSocketAddress();
+    method public void setAddress(java.net.InetAddress);
+    method public void setData(byte[], int, int);
+    method public void setData(byte[]);
+    method public void setLength(int);
+    method public void setPort(int);
+    method public void setSocketAddress(java.net.SocketAddress);
+  }
+
+  public class DatagramSocket implements java.io.Closeable {
+    ctor public DatagramSocket() throws java.net.SocketException;
+    ctor protected DatagramSocket(java.net.DatagramSocketImpl);
+    ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException;
+    ctor public DatagramSocket(int) throws java.net.SocketException;
+    ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException;
+    method public void bind(java.net.SocketAddress) throws java.net.SocketException;
+    method public void close();
+    method public void connect(java.net.InetAddress, int);
+    method public void connect(java.net.SocketAddress) throws java.net.SocketException;
+    method public void disconnect();
+    method public boolean getBroadcast() throws java.net.SocketException;
+    method public java.nio.channels.DatagramChannel getChannel();
+    method public java.net.InetAddress getInetAddress();
+    method public java.net.InetAddress getLocalAddress();
+    method public int getLocalPort();
+    method public java.net.SocketAddress getLocalSocketAddress();
+    method public int getPort();
+    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public java.net.SocketAddress getRemoteSocketAddress();
+    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public int getSendBufferSize() throws java.net.SocketException;
+    method public int getSoTimeout() throws java.net.SocketException;
+    method public int getTrafficClass() throws java.net.SocketException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public boolean isConnected();
+    method public void receive(java.net.DatagramPacket) throws java.io.IOException;
+    method public void send(java.net.DatagramPacket) throws java.io.IOException;
+    method public void setBroadcast(boolean) throws java.net.SocketException;
+    method public static void setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) throws java.io.IOException;
+    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public void setSendBufferSize(int) throws java.net.SocketException;
+    method public void setSoTimeout(int) throws java.net.SocketException;
+    method public void setTrafficClass(int) throws java.net.SocketException;
+  }
+
+  public abstract class DatagramSocketImpl implements java.net.SocketOptions {
+    ctor public DatagramSocketImpl();
+    method protected abstract void bind(int, java.net.InetAddress) throws java.net.SocketException;
+    method protected abstract void close();
+    method protected void connect(java.net.InetAddress, int) throws java.net.SocketException;
+    method protected abstract void create() throws java.net.SocketException;
+    method protected void disconnect();
+    method protected java.io.FileDescriptor getFileDescriptor();
+    method protected int getLocalPort();
+    method @Deprecated protected abstract byte getTTL() throws java.io.IOException;
+    method protected abstract int getTimeToLive() throws java.io.IOException;
+    method protected abstract void join(java.net.InetAddress) throws java.io.IOException;
+    method protected abstract void joinGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method protected abstract void leave(java.net.InetAddress) throws java.io.IOException;
+    method protected abstract void leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method protected abstract int peek(java.net.InetAddress) throws java.io.IOException;
+    method protected abstract int peekData(java.net.DatagramPacket) throws java.io.IOException;
+    method protected abstract void receive(java.net.DatagramPacket) throws java.io.IOException;
+    method protected abstract void send(java.net.DatagramPacket) throws java.io.IOException;
+    method @Deprecated protected abstract void setTTL(byte) throws java.io.IOException;
+    method protected abstract void setTimeToLive(int) throws java.io.IOException;
+    field protected java.io.FileDescriptor fd;
+    field protected int localPort;
+  }
+
+  public interface DatagramSocketImplFactory {
+    method public java.net.DatagramSocketImpl createDatagramSocketImpl();
+  }
+
+  public interface FileNameMap {
+    method public String getContentTypeFor(String);
+  }
+
+  public final class HttpCookie implements java.lang.Cloneable {
+    ctor public HttpCookie(String, String);
+    method public Object clone();
+    method public static boolean domainMatches(String, String);
+    method public String getComment();
+    method public String getCommentURL();
+    method public boolean getDiscard();
+    method public String getDomain();
+    method public long getMaxAge();
+    method public String getName();
+    method public String getPath();
+    method public String getPortlist();
+    method public boolean getSecure();
+    method public String getValue();
+    method public int getVersion();
+    method public boolean hasExpired();
+    method public boolean isHttpOnly();
+    method public static java.util.List<java.net.HttpCookie> parse(String);
+    method public void setComment(String);
+    method public void setCommentURL(String);
+    method public void setDiscard(boolean);
+    method public void setDomain(String);
+    method public void setHttpOnly(boolean);
+    method public void setMaxAge(long);
+    method public void setPath(String);
+    method public void setPortlist(String);
+    method public void setSecure(boolean);
+    method public void setValue(String);
+    method public void setVersion(int);
+  }
+
+  public class HttpRetryException extends java.io.IOException {
+    ctor public HttpRetryException(String, int);
+    ctor public HttpRetryException(String, int, String);
+    method public String getLocation();
+    method public String getReason();
+    method public int responseCode();
+  }
+
+  public abstract class HttpURLConnection extends java.net.URLConnection {
+    ctor protected HttpURLConnection(java.net.URL);
+    method public abstract void disconnect();
+    method public java.io.InputStream getErrorStream();
+    method public static boolean getFollowRedirects();
+    method public boolean getInstanceFollowRedirects();
+    method public String getRequestMethod();
+    method public int getResponseCode() throws java.io.IOException;
+    method public String getResponseMessage() throws java.io.IOException;
+    method public void setChunkedStreamingMode(int);
+    method public void setFixedLengthStreamingMode(int);
+    method public void setFixedLengthStreamingMode(long);
+    method public static void setFollowRedirects(boolean);
+    method public void setInstanceFollowRedirects(boolean);
+    method public void setRequestMethod(String) throws java.net.ProtocolException;
+    method public abstract boolean usingProxy();
+    field public static final int HTTP_ACCEPTED = 202; // 0xca
+    field public static final int HTTP_BAD_GATEWAY = 502; // 0x1f6
+    field public static final int HTTP_BAD_METHOD = 405; // 0x195
+    field public static final int HTTP_BAD_REQUEST = 400; // 0x190
+    field public static final int HTTP_CLIENT_TIMEOUT = 408; // 0x198
+    field public static final int HTTP_CONFLICT = 409; // 0x199
+    field public static final int HTTP_CREATED = 201; // 0xc9
+    field public static final int HTTP_ENTITY_TOO_LARGE = 413; // 0x19d
+    field public static final int HTTP_FORBIDDEN = 403; // 0x193
+    field public static final int HTTP_GATEWAY_TIMEOUT = 504; // 0x1f8
+    field public static final int HTTP_GONE = 410; // 0x19a
+    field public static final int HTTP_INTERNAL_ERROR = 500; // 0x1f4
+    field public static final int HTTP_LENGTH_REQUIRED = 411; // 0x19b
+    field public static final int HTTP_MOVED_PERM = 301; // 0x12d
+    field public static final int HTTP_MOVED_TEMP = 302; // 0x12e
+    field public static final int HTTP_MULT_CHOICE = 300; // 0x12c
+    field public static final int HTTP_NOT_ACCEPTABLE = 406; // 0x196
+    field public static final int HTTP_NOT_AUTHORITATIVE = 203; // 0xcb
+    field public static final int HTTP_NOT_FOUND = 404; // 0x194
+    field public static final int HTTP_NOT_IMPLEMENTED = 501; // 0x1f5
+    field public static final int HTTP_NOT_MODIFIED = 304; // 0x130
+    field public static final int HTTP_NO_CONTENT = 204; // 0xcc
+    field public static final int HTTP_OK = 200; // 0xc8
+    field public static final int HTTP_PARTIAL = 206; // 0xce
+    field public static final int HTTP_PAYMENT_REQUIRED = 402; // 0x192
+    field public static final int HTTP_PRECON_FAILED = 412; // 0x19c
+    field public static final int HTTP_PROXY_AUTH = 407; // 0x197
+    field public static final int HTTP_REQ_TOO_LONG = 414; // 0x19e
+    field public static final int HTTP_RESET = 205; // 0xcd
+    field public static final int HTTP_SEE_OTHER = 303; // 0x12f
+    field @Deprecated public static final int HTTP_SERVER_ERROR = 500; // 0x1f4
+    field public static final int HTTP_UNAUTHORIZED = 401; // 0x191
+    field public static final int HTTP_UNAVAILABLE = 503; // 0x1f7
+    field public static final int HTTP_UNSUPPORTED_TYPE = 415; // 0x19f
+    field public static final int HTTP_USE_PROXY = 305; // 0x131
+    field public static final int HTTP_VERSION = 505; // 0x1f9
+    field protected int chunkLength;
+    field protected int fixedContentLength;
+    field protected long fixedContentLengthLong;
+    field protected boolean instanceFollowRedirects;
+    field protected String method;
+    field protected int responseCode;
+    field protected String responseMessage;
+  }
+
+  public final class IDN {
+    method public static String toASCII(String, int);
+    method public static String toASCII(String);
+    method public static String toUnicode(String, int);
+    method public static String toUnicode(String);
+    field public static final int ALLOW_UNASSIGNED = 1; // 0x1
+    field public static final int USE_STD3_ASCII_RULES = 2; // 0x2
+  }
+
+  public final class Inet4Address extends java.net.InetAddress {
+  }
+
+  public final class Inet6Address extends java.net.InetAddress {
+    method public static java.net.Inet6Address getByAddress(String, byte[], java.net.NetworkInterface) throws java.net.UnknownHostException;
+    method public static java.net.Inet6Address getByAddress(String, byte[], int) throws java.net.UnknownHostException;
+    method public int getScopeId();
+    method public java.net.NetworkInterface getScopedInterface();
+    method public boolean isIPv4CompatibleAddress();
+  }
+
+  public class InetAddress implements java.io.Serializable {
+    method public byte[] getAddress();
+    method public static java.net.InetAddress[] getAllByName(@Nullable String) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByAddress(@Nullable String, byte[]) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByName(@Nullable String) throws java.net.UnknownHostException;
+    method @NonNull public String getCanonicalHostName();
+    method @Nullable public String getHostAddress();
+    method @NonNull public String getHostName();
+    method @NonNull public static java.net.InetAddress getLocalHost() throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getLoopbackAddress();
+    method public boolean isAnyLocalAddress();
+    method public boolean isLinkLocalAddress();
+    method public boolean isLoopbackAddress();
+    method public boolean isMCGlobal();
+    method public boolean isMCLinkLocal();
+    method public boolean isMCNodeLocal();
+    method public boolean isMCOrgLocal();
+    method public boolean isMCSiteLocal();
+    method public boolean isMulticastAddress();
+    method public boolean isReachable(int) throws java.io.IOException;
+    method public boolean isReachable(@Nullable java.net.NetworkInterface, int, int) throws java.io.IOException;
+    method public boolean isSiteLocalAddress();
+  }
+
+  public class InetSocketAddress extends java.net.SocketAddress {
+    ctor public InetSocketAddress(int);
+    ctor public InetSocketAddress(java.net.InetAddress, int);
+    ctor public InetSocketAddress(String, int);
+    method public static java.net.InetSocketAddress createUnresolved(String, int);
+    method public final boolean equals(Object);
+    method public final java.net.InetAddress getAddress();
+    method public final String getHostName();
+    method public final String getHostString();
+    method public final int getPort();
+    method public final int hashCode();
+    method public final boolean isUnresolved();
+  }
+
+  public class InterfaceAddress {
+    method public java.net.InetAddress getAddress();
+    method public java.net.InetAddress getBroadcast();
+    method public short getNetworkPrefixLength();
+  }
+
+  public abstract class JarURLConnection extends java.net.URLConnection {
+    ctor protected JarURLConnection(java.net.URL) throws java.net.MalformedURLException;
+    method public java.util.jar.Attributes getAttributes() throws java.io.IOException;
+    method public java.security.cert.Certificate[] getCertificates() throws java.io.IOException;
+    method public String getEntryName();
+    method public java.util.jar.JarEntry getJarEntry() throws java.io.IOException;
+    method public abstract java.util.jar.JarFile getJarFile() throws java.io.IOException;
+    method public java.net.URL getJarFileURL();
+    method public java.util.jar.Attributes getMainAttributes() throws java.io.IOException;
+    method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    field protected java.net.URLConnection jarFileURLConnection;
+  }
+
+  public class MalformedURLException extends java.io.IOException {
+    ctor public MalformedURLException();
+    ctor public MalformedURLException(String);
+  }
+
+  public class MulticastSocket extends java.net.DatagramSocket {
+    ctor public MulticastSocket() throws java.io.IOException;
+    ctor public MulticastSocket(int) throws java.io.IOException;
+    ctor public MulticastSocket(java.net.SocketAddress) throws java.io.IOException;
+    method public java.net.InetAddress getInterface() throws java.net.SocketException;
+    method public boolean getLoopbackMode() throws java.net.SocketException;
+    method public java.net.NetworkInterface getNetworkInterface() throws java.net.SocketException;
+    method @Deprecated public byte getTTL() throws java.io.IOException;
+    method public int getTimeToLive() throws java.io.IOException;
+    method public void joinGroup(java.net.InetAddress) throws java.io.IOException;
+    method public void joinGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method public void leaveGroup(java.net.InetAddress) throws java.io.IOException;
+    method public void leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method @Deprecated public void send(java.net.DatagramPacket, byte) throws java.io.IOException;
+    method public void setInterface(java.net.InetAddress) throws java.net.SocketException;
+    method public void setLoopbackMode(boolean) throws java.net.SocketException;
+    method public void setNetworkInterface(java.net.NetworkInterface) throws java.net.SocketException;
+    method @Deprecated public void setTTL(byte) throws java.io.IOException;
+    method public void setTimeToLive(int) throws java.io.IOException;
+  }
+
+  public final class NetPermission extends java.security.BasicPermission {
+    ctor public NetPermission(String);
+    ctor public NetPermission(String, String);
+  }
+
+  public final class NetworkInterface {
+    method public static java.net.NetworkInterface getByIndex(int) throws java.net.SocketException;
+    method public static java.net.NetworkInterface getByInetAddress(java.net.InetAddress) throws java.net.SocketException;
+    method public static java.net.NetworkInterface getByName(String) throws java.net.SocketException;
+    method public String getDisplayName();
+    method public byte[] getHardwareAddress() throws java.net.SocketException;
+    method public int getIndex();
+    method public java.util.Enumeration<java.net.InetAddress> getInetAddresses();
+    method public java.util.List<java.net.InterfaceAddress> getInterfaceAddresses();
+    method public int getMTU() throws java.net.SocketException;
+    method public String getName();
+    method public static java.util.Enumeration<java.net.NetworkInterface> getNetworkInterfaces() throws java.net.SocketException;
+    method public java.net.NetworkInterface getParent();
+    method public java.util.Enumeration<java.net.NetworkInterface> getSubInterfaces();
+    method public boolean isLoopback() throws java.net.SocketException;
+    method public boolean isPointToPoint() throws java.net.SocketException;
+    method public boolean isUp() throws java.net.SocketException;
+    method public boolean isVirtual();
+    method public boolean supportsMulticast() throws java.net.SocketException;
+  }
+
+  public class NoRouteToHostException extends java.net.SocketException {
+    ctor public NoRouteToHostException(String);
+    ctor public NoRouteToHostException();
+  }
+
+  public final class PasswordAuthentication {
+    ctor public PasswordAuthentication(String, char[]);
+    method public char[] getPassword();
+    method public String getUserName();
+  }
+
+  public class PortUnreachableException extends java.net.SocketException {
+    ctor public PortUnreachableException(String);
+    ctor public PortUnreachableException();
+  }
+
+  public class ProtocolException extends java.io.IOException {
+    ctor public ProtocolException(String);
+    ctor public ProtocolException();
+  }
+
+  public interface ProtocolFamily {
+    method public String name();
+  }
+
+  public class Proxy {
+    ctor public Proxy(java.net.Proxy.Type, java.net.SocketAddress);
+    method public java.net.SocketAddress address();
+    method public final boolean equals(Object);
+    method public final int hashCode();
+    method public java.net.Proxy.Type type();
+    field public static final java.net.Proxy NO_PROXY;
+  }
+
+  public enum Proxy.Type {
+    enum_constant public static final java.net.Proxy.Type DIRECT;
+    enum_constant public static final java.net.Proxy.Type HTTP;
+    enum_constant public static final java.net.Proxy.Type SOCKS;
+  }
+
+  public abstract class ProxySelector {
+    ctor public ProxySelector();
+    method public abstract void connectFailed(java.net.URI, java.net.SocketAddress, java.io.IOException);
+    method public static java.net.ProxySelector getDefault();
+    method public abstract java.util.List<java.net.Proxy> select(java.net.URI);
+    method public static void setDefault(java.net.ProxySelector);
+  }
+
+  public abstract class ResponseCache {
+    ctor public ResponseCache();
+    method public abstract java.net.CacheResponse get(java.net.URI, String, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public static java.net.ResponseCache getDefault();
+    method public abstract java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
+    method public static void setDefault(java.net.ResponseCache);
+  }
+
+  public abstract class SecureCacheResponse extends java.net.CacheResponse {
+    ctor public SecureCacheResponse();
+    method public abstract String getCipherSuite();
+    method public abstract java.util.List<java.security.cert.Certificate> getLocalCertificateChain();
+    method public abstract java.security.Principal getLocalPrincipal();
+    method public abstract java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public abstract java.util.List<java.security.cert.Certificate> getServerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException;
+  }
+
+  public class ServerSocket implements java.io.Closeable {
+    ctor public ServerSocket() throws java.io.IOException;
+    ctor public ServerSocket(int) throws java.io.IOException;
+    ctor public ServerSocket(int, int) throws java.io.IOException;
+    ctor public ServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
+    method public java.net.Socket accept() throws java.io.IOException;
+    method public void bind(java.net.SocketAddress) throws java.io.IOException;
+    method public void bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public java.nio.channels.ServerSocketChannel getChannel();
+    method public java.net.InetAddress getInetAddress();
+    method public int getLocalPort();
+    method public java.net.SocketAddress getLocalSocketAddress();
+    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public int getSoTimeout() throws java.io.IOException;
+    method protected final void implAccept(java.net.Socket) throws java.io.IOException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public void setPerformancePreferences(int, int, int);
+    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public void setSoTimeout(int) throws java.net.SocketException;
+    method public static void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException;
+  }
+
+  public class Socket implements java.io.Closeable {
+    ctor public Socket();
+    ctor public Socket(java.net.Proxy);
+    ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException;
+    ctor public Socket(String, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor public Socket(java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(String, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor @Deprecated public Socket(String, int, boolean) throws java.io.IOException;
+    ctor @Deprecated public Socket(java.net.InetAddress, int, boolean) throws java.io.IOException;
+    method public void bind(java.net.SocketAddress) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void connect(java.net.SocketAddress) throws java.io.IOException;
+    method public void connect(java.net.SocketAddress, int) throws java.io.IOException;
+    method public java.nio.channels.SocketChannel getChannel();
+    method public java.net.InetAddress getInetAddress();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public boolean getKeepAlive() throws java.net.SocketException;
+    method public java.net.InetAddress getLocalAddress();
+    method public int getLocalPort();
+    method public java.net.SocketAddress getLocalSocketAddress();
+    method public boolean getOOBInline() throws java.net.SocketException;
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public int getPort();
+    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public java.net.SocketAddress getRemoteSocketAddress();
+    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public int getSendBufferSize() throws java.net.SocketException;
+    method public int getSoLinger() throws java.net.SocketException;
+    method public int getSoTimeout() throws java.net.SocketException;
+    method public boolean getTcpNoDelay() throws java.net.SocketException;
+    method public int getTrafficClass() throws java.net.SocketException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public boolean isConnected();
+    method public boolean isInputShutdown();
+    method public boolean isOutputShutdown();
+    method public void sendUrgentData(int) throws java.io.IOException;
+    method public void setKeepAlive(boolean) throws java.net.SocketException;
+    method public void setOOBInline(boolean) throws java.net.SocketException;
+    method public void setPerformancePreferences(int, int, int);
+    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public void setSendBufferSize(int) throws java.net.SocketException;
+    method public void setSoLinger(boolean, int) throws java.net.SocketException;
+    method public void setSoTimeout(int) throws java.net.SocketException;
+    method public static void setSocketImplFactory(java.net.SocketImplFactory) throws java.io.IOException;
+    method public void setTcpNoDelay(boolean) throws java.net.SocketException;
+    method public void setTrafficClass(int) throws java.net.SocketException;
+    method public void shutdownInput() throws java.io.IOException;
+    method public void shutdownOutput() throws java.io.IOException;
+  }
+
+  public abstract class SocketAddress implements java.io.Serializable {
+    ctor public SocketAddress();
+  }
+
+  public class SocketException extends java.io.IOException {
+    ctor public SocketException(String);
+    ctor public SocketException();
+  }
+
+  public abstract class SocketImpl implements java.net.SocketOptions {
+    ctor public SocketImpl();
+    method protected abstract void accept(java.net.SocketImpl) throws java.io.IOException;
+    method protected abstract int available() throws java.io.IOException;
+    method protected abstract void bind(java.net.InetAddress, int) throws java.io.IOException;
+    method protected abstract void close() throws java.io.IOException;
+    method protected abstract void connect(String, int) throws java.io.IOException;
+    method protected abstract void connect(java.net.InetAddress, int) throws java.io.IOException;
+    method protected abstract void connect(java.net.SocketAddress, int) throws java.io.IOException;
+    method protected abstract void create(boolean) throws java.io.IOException;
+    method protected java.io.FileDescriptor getFileDescriptor();
+    method protected java.net.InetAddress getInetAddress();
+    method protected abstract java.io.InputStream getInputStream() throws java.io.IOException;
+    method protected int getLocalPort();
+    method protected abstract java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method protected int getPort();
+    method protected abstract void listen(int) throws java.io.IOException;
+    method protected abstract void sendUrgentData(int) throws java.io.IOException;
+    method protected void setPerformancePreferences(int, int, int);
+    method protected void shutdownInput() throws java.io.IOException;
+    method protected void shutdownOutput() throws java.io.IOException;
+    method protected boolean supportsUrgentData();
+    field protected java.net.InetAddress address;
+    field protected java.io.FileDescriptor fd;
+    field protected int localport;
+    field protected int port;
+  }
+
+  public interface SocketImplFactory {
+    method public java.net.SocketImpl createSocketImpl();
+  }
+
+  public interface SocketOption<T> {
+    method public String name();
+    method public Class<T> type();
+  }
+
+  public interface SocketOptions {
+    method public Object getOption(int) throws java.net.SocketException;
+    method public void setOption(int, Object) throws java.net.SocketException;
+    field public static final int IP_MULTICAST_IF = 16; // 0x10
+    field public static final int IP_MULTICAST_IF2 = 31; // 0x1f
+    field public static final int IP_MULTICAST_LOOP = 18; // 0x12
+    field public static final int IP_TOS = 3; // 0x3
+    field public static final int SO_BINDADDR = 15; // 0xf
+    field public static final int SO_BROADCAST = 32; // 0x20
+    field public static final int SO_KEEPALIVE = 8; // 0x8
+    field public static final int SO_LINGER = 128; // 0x80
+    field public static final int SO_OOBINLINE = 4099; // 0x1003
+    field public static final int SO_RCVBUF = 4098; // 0x1002
+    field public static final int SO_REUSEADDR = 4; // 0x4
+    field public static final int SO_SNDBUF = 4097; // 0x1001
+    field public static final int SO_TIMEOUT = 4102; // 0x1006
+    field public static final int TCP_NODELAY = 1; // 0x1
+  }
+
+  public final class SocketPermission extends java.security.Permission implements java.io.Serializable {
+    ctor public SocketPermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public class SocketTimeoutException extends java.io.InterruptedIOException {
+    ctor public SocketTimeoutException(String);
+    ctor public SocketTimeoutException();
+  }
+
+  public enum StandardProtocolFamily implements java.net.ProtocolFamily {
+    enum_constant public static final java.net.StandardProtocolFamily INET;
+    enum_constant public static final java.net.StandardProtocolFamily INET6;
+  }
+
+  public final class StandardSocketOptions {
+    field public static final java.net.SocketOption<java.net.NetworkInterface> IP_MULTICAST_IF;
+    field public static final java.net.SocketOption<java.lang.Boolean> IP_MULTICAST_LOOP;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_MULTICAST_TTL;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_TOS;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_BROADCAST;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_KEEPALIVE;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_LINGER;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_RCVBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_REUSEADDR;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_SNDBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> TCP_NODELAY;
+  }
+
+  public final class URI implements java.lang.Comparable<java.net.URI> java.io.Serializable {
+    ctor public URI(String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String, int, String, String, String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String, String, String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String, String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String) throws java.net.URISyntaxException;
+    method public int compareTo(java.net.URI);
+    method public static java.net.URI create(String);
+    method public String getAuthority();
+    method public String getFragment();
+    method public String getHost();
+    method public String getPath();
+    method public int getPort();
+    method public String getQuery();
+    method public String getRawAuthority();
+    method public String getRawFragment();
+    method public String getRawPath();
+    method public String getRawQuery();
+    method public String getRawSchemeSpecificPart();
+    method public String getRawUserInfo();
+    method public String getScheme();
+    method public String getSchemeSpecificPart();
+    method public String getUserInfo();
+    method public boolean isAbsolute();
+    method public boolean isOpaque();
+    method public java.net.URI normalize();
+    method public java.net.URI parseServerAuthority() throws java.net.URISyntaxException;
+    method public java.net.URI relativize(java.net.URI);
+    method public java.net.URI resolve(java.net.URI);
+    method public java.net.URI resolve(String);
+    method public String toASCIIString();
+    method public java.net.URL toURL() throws java.net.MalformedURLException;
+  }
+
+  public class URISyntaxException extends java.lang.Exception {
+    ctor public URISyntaxException(String, String, int);
+    ctor public URISyntaxException(String, String);
+    method public int getIndex();
+    method public String getInput();
+    method public String getReason();
+  }
+
+  public final class URL implements java.io.Serializable {
+    ctor public URL(String, String, int, String) throws java.net.MalformedURLException;
+    ctor public URL(String, String, String) throws java.net.MalformedURLException;
+    ctor public URL(String, String, int, String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
+    ctor public URL(String) throws java.net.MalformedURLException;
+    ctor public URL(java.net.URL, String) throws java.net.MalformedURLException;
+    ctor public URL(java.net.URL, String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
+    method public String getAuthority();
+    method public Object getContent() throws java.io.IOException;
+    method public Object getContent(Class[]) throws java.io.IOException;
+    method public int getDefaultPort();
+    method public String getFile();
+    method public String getHost();
+    method public String getPath();
+    method public int getPort();
+    method public String getProtocol();
+    method public String getQuery();
+    method public String getRef();
+    method public String getUserInfo();
+    method public java.net.URLConnection openConnection() throws java.io.IOException;
+    method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
+    method public java.io.InputStream openStream() throws java.io.IOException;
+    method public boolean sameFile(java.net.URL);
+    method public static void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory);
+    method public String toExternalForm();
+    method public java.net.URI toURI() throws java.net.URISyntaxException;
+  }
+
+  public class URLClassLoader extends java.security.SecureClassLoader implements java.io.Closeable {
+    ctor public URLClassLoader(java.net.URL[], ClassLoader);
+    ctor public URLClassLoader(java.net.URL[]);
+    ctor public URLClassLoader(java.net.URL[], ClassLoader, java.net.URLStreamHandlerFactory);
+    method protected void addURL(java.net.URL);
+    method public void close() throws java.io.IOException;
+    method protected Package definePackage(String, java.util.jar.Manifest, java.net.URL) throws java.lang.IllegalArgumentException;
+    method public java.net.URL findResource(String);
+    method public java.util.Enumeration<java.net.URL> findResources(String) throws java.io.IOException;
+    method public java.net.URL[] getURLs();
+    method public static java.net.URLClassLoader newInstance(java.net.URL[], ClassLoader);
+    method public static java.net.URLClassLoader newInstance(java.net.URL[]);
+  }
+
+  public abstract class URLConnection {
+    ctor protected URLConnection(java.net.URL);
+    method public void addRequestProperty(String, String);
+    method public abstract void connect() throws java.io.IOException;
+    method public boolean getAllowUserInteraction();
+    method public int getConnectTimeout();
+    method public Object getContent() throws java.io.IOException;
+    method public Object getContent(Class[]) throws java.io.IOException;
+    method public String getContentEncoding();
+    method public int getContentLength();
+    method public long getContentLengthLong();
+    method public String getContentType();
+    method public long getDate();
+    method public static boolean getDefaultAllowUserInteraction();
+    method @Deprecated public static String getDefaultRequestProperty(String);
+    method public boolean getDefaultUseCaches();
+    method public boolean getDoInput();
+    method public boolean getDoOutput();
+    method public long getExpiration();
+    method public static java.net.FileNameMap getFileNameMap();
+    method public String getHeaderField(String);
+    method public String getHeaderField(int);
+    method public long getHeaderFieldDate(String, long);
+    method public int getHeaderFieldInt(String, int);
+    method public String getHeaderFieldKey(int);
+    method public long getHeaderFieldLong(String, long);
+    method public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getHeaderFields();
+    method public long getIfModifiedSince();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public long getLastModified();
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public java.security.Permission getPermission() throws java.io.IOException;
+    method public int getReadTimeout();
+    method public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getRequestProperties();
+    method public String getRequestProperty(String);
+    method public java.net.URL getURL();
+    method public boolean getUseCaches();
+    method public static String guessContentTypeFromName(String);
+    method public static String guessContentTypeFromStream(java.io.InputStream) throws java.io.IOException;
+    method public void setAllowUserInteraction(boolean);
+    method public void setConnectTimeout(int);
+    method public static void setContentHandlerFactory(java.net.ContentHandlerFactory);
+    method public static void setDefaultAllowUserInteraction(boolean);
+    method @Deprecated public static void setDefaultRequestProperty(String, String);
+    method public void setDefaultUseCaches(boolean);
+    method public void setDoInput(boolean);
+    method public void setDoOutput(boolean);
+    method public static void setFileNameMap(java.net.FileNameMap);
+    method public void setIfModifiedSince(long);
+    method public void setReadTimeout(int);
+    method public void setRequestProperty(String, String);
+    method public void setUseCaches(boolean);
+    field protected boolean allowUserInteraction;
+    field protected boolean connected;
+    field protected boolean doInput;
+    field protected boolean doOutput;
+    field protected long ifModifiedSince;
+    field protected java.net.URL url;
+    field protected boolean useCaches;
+  }
+
+  public class URLDecoder {
+    ctor public URLDecoder();
+    method @Deprecated public static String decode(String);
+    method public static String decode(String, String) throws java.io.UnsupportedEncodingException;
+  }
+
+  public class URLEncoder {
+    method @Deprecated public static String encode(String);
+    method public static String encode(String, String) throws java.io.UnsupportedEncodingException;
+  }
+
+  public abstract class URLStreamHandler {
+    ctor public URLStreamHandler();
+    method protected boolean equals(java.net.URL, java.net.URL);
+    method protected int getDefaultPort();
+    method protected java.net.InetAddress getHostAddress(java.net.URL);
+    method protected int hashCode(java.net.URL);
+    method protected boolean hostsEqual(java.net.URL, java.net.URL);
+    method protected abstract java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException;
+    method protected java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException;
+    method protected void parseURL(java.net.URL, String, int, int);
+    method protected boolean sameFile(java.net.URL, java.net.URL);
+    method protected void setURL(java.net.URL, String, String, int, String, String, String, String, String);
+    method @Deprecated protected void setURL(java.net.URL, String, String, int, String, String);
+    method protected String toExternalForm(java.net.URL);
+  }
+
+  public interface URLStreamHandlerFactory {
+    method public java.net.URLStreamHandler createURLStreamHandler(String);
+  }
+
+  public class UnknownHostException extends java.io.IOException {
+    ctor public UnknownHostException(String);
+    ctor public UnknownHostException();
+  }
+
+  public class UnknownServiceException extends java.io.IOException {
+    ctor public UnknownServiceException();
+    ctor public UnknownServiceException(String);
+  }
+
+}
+
+package java.nio {
+
+  public abstract class Buffer {
+    method public abstract Object array();
+    method public abstract int arrayOffset();
+    method public final int capacity();
+    method public java.nio.Buffer clear();
+    method public java.nio.Buffer flip();
+    method public abstract boolean hasArray();
+    method public final boolean hasRemaining();
+    method public abstract boolean isDirect();
+    method public abstract boolean isReadOnly();
+    method public final int limit();
+    method public java.nio.Buffer limit(int);
+    method public java.nio.Buffer mark();
+    method public final int position();
+    method public java.nio.Buffer position(int);
+    method public final int remaining();
+    method public java.nio.Buffer reset();
+    method public java.nio.Buffer rewind();
+  }
+
+  public class BufferOverflowException extends java.lang.RuntimeException {
+    ctor public BufferOverflowException();
+  }
+
+  public class BufferUnderflowException extends java.lang.RuntimeException {
+    ctor public BufferUnderflowException();
+  }
+
+  public abstract class ByteBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.ByteBuffer> {
+    method @NonNull public static java.nio.ByteBuffer allocate(int);
+    method @NonNull public static java.nio.ByteBuffer allocateDirect(int);
+    method @NonNull public final byte[] array();
+    method public final int arrayOffset();
+    method @NonNull public abstract java.nio.CharBuffer asCharBuffer();
+    method @NonNull public abstract java.nio.DoubleBuffer asDoubleBuffer();
+    method @NonNull public abstract java.nio.FloatBuffer asFloatBuffer();
+    method @NonNull public abstract java.nio.IntBuffer asIntBuffer();
+    method @NonNull public abstract java.nio.LongBuffer asLongBuffer();
+    method @NonNull public abstract java.nio.ByteBuffer asReadOnlyBuffer();
+    method @NonNull public abstract java.nio.ShortBuffer asShortBuffer();
+    method @NonNull public abstract java.nio.ByteBuffer compact();
+    method public int compareTo(@NonNull java.nio.ByteBuffer);
+    method @NonNull public abstract java.nio.ByteBuffer duplicate();
+    method public abstract byte get();
+    method public abstract byte get(int);
+    method @NonNull public java.nio.ByteBuffer get(@NonNull byte[], int, int);
+    method @NonNull public java.nio.ByteBuffer get(@NonNull byte[]);
+    method public abstract char getChar();
+    method public abstract char getChar(int);
+    method public abstract double getDouble();
+    method public abstract double getDouble(int);
+    method public abstract float getFloat();
+    method public abstract float getFloat(int);
+    method public abstract int getInt();
+    method public abstract int getInt(int);
+    method public abstract long getLong();
+    method public abstract long getLong(int);
+    method public abstract short getShort();
+    method public abstract short getShort(int);
+    method public final boolean hasArray();
+    method @NonNull public final java.nio.ByteOrder order();
+    method @NonNull public final java.nio.ByteBuffer order(@NonNull java.nio.ByteOrder);
+    method @NonNull public abstract java.nio.ByteBuffer put(byte);
+    method @NonNull public abstract java.nio.ByteBuffer put(int, byte);
+    method @NonNull public java.nio.ByteBuffer put(@NonNull java.nio.ByteBuffer);
+    method @NonNull public java.nio.ByteBuffer put(@NonNull byte[], int, int);
+    method @NonNull public final java.nio.ByteBuffer put(@NonNull byte[]);
+    method @NonNull public abstract java.nio.ByteBuffer putChar(char);
+    method @NonNull public abstract java.nio.ByteBuffer putChar(int, char);
+    method @NonNull public abstract java.nio.ByteBuffer putDouble(double);
+    method @NonNull public abstract java.nio.ByteBuffer putDouble(int, double);
+    method @NonNull public abstract java.nio.ByteBuffer putFloat(float);
+    method @NonNull public abstract java.nio.ByteBuffer putFloat(int, float);
+    method @NonNull public abstract java.nio.ByteBuffer putInt(int);
+    method @NonNull public abstract java.nio.ByteBuffer putInt(int, int);
+    method @NonNull public abstract java.nio.ByteBuffer putLong(long);
+    method @NonNull public abstract java.nio.ByteBuffer putLong(int, long);
+    method @NonNull public abstract java.nio.ByteBuffer putShort(short);
+    method @NonNull public abstract java.nio.ByteBuffer putShort(int, short);
+    method @NonNull public abstract java.nio.ByteBuffer slice();
+    method @NonNull public static java.nio.ByteBuffer wrap(@NonNull byte[], int, int);
+    method @NonNull public static java.nio.ByteBuffer wrap(@NonNull byte[]);
+  }
+
+  public final class ByteOrder {
+    method public static java.nio.ByteOrder nativeOrder();
+    field public static final java.nio.ByteOrder BIG_ENDIAN;
+    field public static final java.nio.ByteOrder LITTLE_ENDIAN;
+  }
+
+  public abstract class CharBuffer extends java.nio.Buffer implements java.lang.Appendable java.lang.CharSequence java.lang.Comparable<java.nio.CharBuffer> java.lang.Readable {
+    method public static java.nio.CharBuffer allocate(int);
+    method public java.nio.CharBuffer append(CharSequence);
+    method public java.nio.CharBuffer append(CharSequence, int, int);
+    method public java.nio.CharBuffer append(char);
+    method public final char[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.CharBuffer asReadOnlyBuffer();
+    method public final char charAt(int);
+    method public abstract java.nio.CharBuffer compact();
+    method public int compareTo(java.nio.CharBuffer);
+    method public abstract java.nio.CharBuffer duplicate();
+    method public abstract char get();
+    method public abstract char get(int);
+    method public java.nio.CharBuffer get(char[], int, int);
+    method public java.nio.CharBuffer get(char[]);
+    method public final boolean hasArray();
+    method public final int length();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.CharBuffer put(char);
+    method public abstract java.nio.CharBuffer put(int, char);
+    method public java.nio.CharBuffer put(java.nio.CharBuffer);
+    method public java.nio.CharBuffer put(char[], int, int);
+    method public final java.nio.CharBuffer put(char[]);
+    method public java.nio.CharBuffer put(String, int, int);
+    method public final java.nio.CharBuffer put(String);
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
+    method public abstract java.nio.CharBuffer slice();
+    method public abstract java.nio.CharBuffer subSequence(int, int);
+    method public static java.nio.CharBuffer wrap(char[], int, int);
+    method public static java.nio.CharBuffer wrap(char[]);
+    method public static java.nio.CharBuffer wrap(CharSequence, int, int);
+    method public static java.nio.CharBuffer wrap(CharSequence);
+  }
+
+  public abstract class DoubleBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.DoubleBuffer> {
+    method public static java.nio.DoubleBuffer allocate(int);
+    method public final double[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.DoubleBuffer asReadOnlyBuffer();
+    method public abstract java.nio.DoubleBuffer compact();
+    method public int compareTo(java.nio.DoubleBuffer);
+    method public abstract java.nio.DoubleBuffer duplicate();
+    method public abstract double get();
+    method public abstract double get(int);
+    method public java.nio.DoubleBuffer get(double[], int, int);
+    method public java.nio.DoubleBuffer get(double[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.DoubleBuffer put(double);
+    method public abstract java.nio.DoubleBuffer put(int, double);
+    method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer);
+    method public java.nio.DoubleBuffer put(double[], int, int);
+    method public final java.nio.DoubleBuffer put(double[]);
+    method public abstract java.nio.DoubleBuffer slice();
+    method public static java.nio.DoubleBuffer wrap(double[], int, int);
+    method public static java.nio.DoubleBuffer wrap(double[]);
+  }
+
+  public abstract class FloatBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.FloatBuffer> {
+    method public static java.nio.FloatBuffer allocate(int);
+    method public final float[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.FloatBuffer asReadOnlyBuffer();
+    method public abstract java.nio.FloatBuffer compact();
+    method public int compareTo(java.nio.FloatBuffer);
+    method public abstract java.nio.FloatBuffer duplicate();
+    method public abstract float get();
+    method public abstract float get(int);
+    method public java.nio.FloatBuffer get(float[], int, int);
+    method public java.nio.FloatBuffer get(float[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.FloatBuffer put(float);
+    method public abstract java.nio.FloatBuffer put(int, float);
+    method public java.nio.FloatBuffer put(java.nio.FloatBuffer);
+    method public java.nio.FloatBuffer put(float[], int, int);
+    method public final java.nio.FloatBuffer put(float[]);
+    method public abstract java.nio.FloatBuffer slice();
+    method public static java.nio.FloatBuffer wrap(float[], int, int);
+    method public static java.nio.FloatBuffer wrap(float[]);
+  }
+
+  public abstract class IntBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.IntBuffer> {
+    method public static java.nio.IntBuffer allocate(int);
+    method public final int[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.IntBuffer asReadOnlyBuffer();
+    method public abstract java.nio.IntBuffer compact();
+    method public int compareTo(java.nio.IntBuffer);
+    method public abstract java.nio.IntBuffer duplicate();
+    method public abstract int get();
+    method public abstract int get(int);
+    method public java.nio.IntBuffer get(int[], int, int);
+    method public java.nio.IntBuffer get(int[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.IntBuffer put(int);
+    method public abstract java.nio.IntBuffer put(int, int);
+    method public java.nio.IntBuffer put(java.nio.IntBuffer);
+    method public java.nio.IntBuffer put(int[], int, int);
+    method public final java.nio.IntBuffer put(int[]);
+    method public abstract java.nio.IntBuffer slice();
+    method public static java.nio.IntBuffer wrap(int[], int, int);
+    method public static java.nio.IntBuffer wrap(int[]);
+  }
+
+  public class InvalidMarkException extends java.lang.IllegalStateException {
+    ctor public InvalidMarkException();
+  }
+
+  public abstract class LongBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.LongBuffer> {
+    method public static java.nio.LongBuffer allocate(int);
+    method public final long[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.LongBuffer asReadOnlyBuffer();
+    method public abstract java.nio.LongBuffer compact();
+    method public int compareTo(java.nio.LongBuffer);
+    method public abstract java.nio.LongBuffer duplicate();
+    method public abstract long get();
+    method public abstract long get(int);
+    method public java.nio.LongBuffer get(long[], int, int);
+    method public java.nio.LongBuffer get(long[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.LongBuffer put(long);
+    method public abstract java.nio.LongBuffer put(int, long);
+    method public java.nio.LongBuffer put(java.nio.LongBuffer);
+    method public java.nio.LongBuffer put(long[], int, int);
+    method public final java.nio.LongBuffer put(long[]);
+    method public abstract java.nio.LongBuffer slice();
+    method public static java.nio.LongBuffer wrap(long[], int, int);
+    method public static java.nio.LongBuffer wrap(long[]);
+  }
+
+  public abstract class MappedByteBuffer extends java.nio.ByteBuffer {
+    method public final java.nio.MappedByteBuffer force();
+    method public final boolean isLoaded();
+    method public final java.nio.MappedByteBuffer load();
+  }
+
+  public class ReadOnlyBufferException extends java.lang.UnsupportedOperationException {
+    ctor public ReadOnlyBufferException();
+  }
+
+  public abstract class ShortBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.ShortBuffer> {
+    method public static java.nio.ShortBuffer allocate(int);
+    method public final short[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.ShortBuffer asReadOnlyBuffer();
+    method public abstract java.nio.ShortBuffer compact();
+    method public int compareTo(java.nio.ShortBuffer);
+    method public abstract java.nio.ShortBuffer duplicate();
+    method public abstract short get();
+    method public abstract short get(int);
+    method public java.nio.ShortBuffer get(short[], int, int);
+    method public java.nio.ShortBuffer get(short[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.ShortBuffer put(short);
+    method public abstract java.nio.ShortBuffer put(int, short);
+    method public java.nio.ShortBuffer put(java.nio.ShortBuffer);
+    method public java.nio.ShortBuffer put(short[], int, int);
+    method public final java.nio.ShortBuffer put(short[]);
+    method public abstract java.nio.ShortBuffer slice();
+    method public static java.nio.ShortBuffer wrap(short[], int, int);
+    method public static java.nio.ShortBuffer wrap(short[]);
+  }
+
+}
+
+package java.nio.channels {
+
+  public class AcceptPendingException extends java.lang.IllegalStateException {
+    ctor public AcceptPendingException();
+  }
+
+  public class AlreadyBoundException extends java.lang.IllegalStateException {
+    ctor public AlreadyBoundException();
+  }
+
+  public class AlreadyConnectedException extends java.lang.IllegalStateException {
+    ctor public AlreadyConnectedException();
+  }
+
+  public interface AsynchronousByteChannel extends java.nio.channels.AsynchronousChannel {
+    method public <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
+    method public <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
+  }
+
+  public interface AsynchronousChannel extends java.nio.channels.Channel {
+  }
+
+  public abstract class AsynchronousChannelGroup {
+    ctor protected AsynchronousChannelGroup(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract boolean isShutdown();
+    method public abstract boolean isTerminated();
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract void shutdown();
+    method public abstract void shutdownNow() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withCachedThreadPool(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withFixedThreadPool(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withThreadPool(java.util.concurrent.ExecutorService) throws java.io.IOException;
+  }
+
+  public class AsynchronousCloseException extends java.nio.channels.ClosedChannelException {
+    ctor public AsynchronousCloseException();
+  }
+
+  public abstract class AsynchronousFileChannel implements java.nio.channels.AsynchronousChannel {
+    ctor protected AsynchronousFileChannel();
+    method public abstract void force(boolean) throws java.io.IOException;
+    method public abstract <A> void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock,? super A>);
+    method public final <A> void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock,? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.FileLock> lock(long, long, boolean);
+    method public final java.util.concurrent.Future<java.nio.channels.FileLock> lock();
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract <A> void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer, long);
+    method public abstract long size() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousFileChannel truncate(long) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
+    method public abstract <A> void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer, long);
+  }
+
+  public abstract class AsynchronousServerSocketChannel implements java.nio.channels.AsynchronousChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousServerSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract <A> void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel,? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.AsynchronousSocketChannel> accept();
+    method public final java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract <T> java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+  }
+
+  public abstract class AsynchronousSocketChannel implements java.nio.channels.AsynchronousByteChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract java.nio.channels.AsynchronousSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract <A> void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void,? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress);
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract <A> void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public final <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract <A> void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long,? super A>);
+    method public abstract <T> java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownOutput() throws java.io.IOException;
+    method public abstract <A> void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public final <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract <A> void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long,? super A>);
+  }
+
+  public interface ByteChannel extends java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel {
+  }
+
+  public class CancelledKeyException extends java.lang.IllegalStateException {
+    ctor public CancelledKeyException();
+  }
+
+  public interface Channel extends java.io.Closeable {
+    method public boolean isOpen();
+  }
+
+  public final class Channels {
+    method public static java.nio.channels.ReadableByteChannel newChannel(java.io.InputStream);
+    method public static java.nio.channels.WritableByteChannel newChannel(java.io.OutputStream);
+    method public static java.io.InputStream newInputStream(java.nio.channels.ReadableByteChannel);
+    method public static java.io.InputStream newInputStream(java.nio.channels.AsynchronousByteChannel);
+    method public static java.io.OutputStream newOutputStream(java.nio.channels.WritableByteChannel);
+    method public static java.io.OutputStream newOutputStream(java.nio.channels.AsynchronousByteChannel);
+    method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int);
+    method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, String);
+    method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int);
+    method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, String);
+  }
+
+  public class ClosedByInterruptException extends java.nio.channels.AsynchronousCloseException {
+    ctor public ClosedByInterruptException();
+  }
+
+  public class ClosedChannelException extends java.io.IOException {
+    ctor public ClosedChannelException();
+  }
+
+  public class ClosedSelectorException extends java.lang.IllegalStateException {
+    ctor public ClosedSelectorException();
+  }
+
+  public interface CompletionHandler<V, A> {
+    method public void completed(V, A);
+    method public void failed(Throwable, A);
+  }
+
+  public class ConnectionPendingException extends java.lang.IllegalStateException {
+    ctor public ConnectionPendingException();
+  }
+
+  public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.MulticastChannel java.nio.channels.ScatteringByteChannel {
+    ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.DatagramChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public abstract boolean isConnected();
+    method public static java.nio.channels.DatagramChannel open() throws java.io.IOException;
+    method public static java.nio.channels.DatagramChannel open(java.net.ProtocolFamily) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
+    method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.net.DatagramSocket socket();
+    method public final int validOps();
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel {
+    ctor protected FileChannel();
+    method public abstract void force(boolean) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock lock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock lock() throws java.io.IOException;
+    method public abstract java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode, long, long) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract java.nio.channels.FileChannel position(long) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException;
+    method public abstract long transferFrom(java.nio.channels.ReadableByteChannel, long, long) throws java.io.IOException;
+    method public abstract long transferTo(long, long, java.nio.channels.WritableByteChannel) throws java.io.IOException;
+    method public abstract java.nio.channels.FileChannel truncate(long) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException;
+  }
+
+  public static class FileChannel.MapMode {
+    field public static final java.nio.channels.FileChannel.MapMode PRIVATE;
+    field public static final java.nio.channels.FileChannel.MapMode READ_ONLY;
+    field public static final java.nio.channels.FileChannel.MapMode READ_WRITE;
+  }
+
+  public abstract class FileLock implements java.lang.AutoCloseable {
+    ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean);
+    ctor protected FileLock(java.nio.channels.AsynchronousFileChannel, long, long, boolean);
+    method public java.nio.channels.Channel acquiredBy();
+    method public final java.nio.channels.FileChannel channel();
+    method public final void close() throws java.io.IOException;
+    method public final boolean isShared();
+    method public abstract boolean isValid();
+    method public final boolean overlaps(long, long);
+    method public final long position();
+    method public abstract void release() throws java.io.IOException;
+    method public final long size();
+    method public final String toString();
+  }
+
+  public class FileLockInterruptionException extends java.io.IOException {
+    ctor public FileLockInterruptionException();
+  }
+
+  public interface GatheringByteChannel extends java.nio.channels.WritableByteChannel {
+    method public long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public class IllegalBlockingModeException extends java.lang.IllegalStateException {
+    ctor public IllegalBlockingModeException();
+  }
+
+  public class IllegalChannelGroupException extends java.lang.IllegalArgumentException {
+    ctor public IllegalChannelGroupException();
+  }
+
+  public class IllegalSelectorException extends java.lang.IllegalArgumentException {
+    ctor public IllegalSelectorException();
+  }
+
+  public class InterruptedByTimeoutException extends java.io.IOException {
+    ctor public InterruptedByTimeoutException();
+  }
+
+  public interface InterruptibleChannel extends java.nio.channels.Channel {
+  }
+
+  public abstract class MembershipKey {
+    ctor protected MembershipKey();
+    method public abstract java.nio.channels.MembershipKey block(java.net.InetAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.MulticastChannel channel();
+    method public abstract void drop();
+    method public abstract java.net.InetAddress group();
+    method public abstract boolean isValid();
+    method public abstract java.net.NetworkInterface networkInterface();
+    method public abstract java.net.InetAddress sourceAddress();
+    method public abstract java.nio.channels.MembershipKey unblock(java.net.InetAddress);
+  }
+
+  public interface MulticastChannel extends java.nio.channels.NetworkChannel {
+    method public java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method public java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface, java.net.InetAddress) throws java.io.IOException;
+  }
+
+  public interface NetworkChannel extends java.nio.channels.Channel {
+    method public java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public <T> T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public <T> java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public java.util.Set<java.net.SocketOption<?>> supportedOptions();
+  }
+
+  public class NoConnectionPendingException extends java.lang.IllegalStateException {
+    ctor public NoConnectionPendingException();
+  }
+
+  public class NonReadableChannelException extends java.lang.IllegalStateException {
+    ctor public NonReadableChannelException();
+  }
+
+  public class NonWritableChannelException extends java.lang.IllegalStateException {
+    ctor public NonWritableChannelException();
+  }
+
+  public class NotYetBoundException extends java.lang.IllegalStateException {
+    ctor public NotYetBoundException();
+  }
+
+  public class NotYetConnectedException extends java.lang.IllegalStateException {
+    ctor public NotYetConnectedException();
+  }
+
+  public class OverlappingFileLockException extends java.lang.IllegalStateException {
+    ctor public OverlappingFileLockException();
+  }
+
+  public abstract class Pipe {
+    ctor protected Pipe();
+    method public static java.nio.channels.Pipe open() throws java.io.IOException;
+    method public abstract java.nio.channels.Pipe.SinkChannel sink();
+    method public abstract java.nio.channels.Pipe.SourceChannel source();
+  }
+
+  public abstract static class Pipe.SinkChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.WritableByteChannel {
+    ctor protected Pipe.SinkChannel(java.nio.channels.spi.SelectorProvider);
+    method public final int validOps();
+  }
+
+  public abstract static class Pipe.SourceChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.ScatteringByteChannel {
+    ctor protected Pipe.SourceChannel(java.nio.channels.spi.SelectorProvider);
+    method public final int validOps();
+  }
+
+  public class ReadPendingException extends java.lang.IllegalStateException {
+    ctor public ReadPendingException();
+  }
+
+  public interface ReadableByteChannel extends java.nio.channels.Channel {
+    method public int read(java.nio.ByteBuffer) throws java.io.IOException;
+  }
+
+  public interface ScatteringByteChannel extends java.nio.channels.ReadableByteChannel {
+    method public long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public interface SeekableByteChannel extends java.nio.channels.ByteChannel {
+    method public long position() throws java.io.IOException;
+    method public java.nio.channels.SeekableByteChannel position(long) throws java.io.IOException;
+    method public long size() throws java.io.IOException;
+    method public java.nio.channels.SeekableByteChannel truncate(long) throws java.io.IOException;
+  }
+
+  public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel {
+    ctor protected SelectableChannel();
+    method public abstract Object blockingLock();
+    method public abstract java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException;
+    method public abstract boolean isBlocking();
+    method public abstract boolean isRegistered();
+    method public abstract java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
+    method public abstract java.nio.channels.spi.SelectorProvider provider();
+    method public abstract java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, Object) throws java.nio.channels.ClosedChannelException;
+    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException;
+    method public abstract int validOps();
+  }
+
+  public abstract class SelectionKey {
+    ctor protected SelectionKey();
+    method public final Object attach(Object);
+    method public final Object attachment();
+    method public abstract void cancel();
+    method public abstract java.nio.channels.SelectableChannel channel();
+    method public abstract int interestOps();
+    method public abstract java.nio.channels.SelectionKey interestOps(int);
+    method public final boolean isAcceptable();
+    method public final boolean isConnectable();
+    method public final boolean isReadable();
+    method public abstract boolean isValid();
+    method public final boolean isWritable();
+    method public abstract int readyOps();
+    method public abstract java.nio.channels.Selector selector();
+    field public static final int OP_ACCEPT = 16; // 0x10
+    field public static final int OP_CONNECT = 8; // 0x8
+    field public static final int OP_READ = 1; // 0x1
+    field public static final int OP_WRITE = 4; // 0x4
+  }
+
+  public abstract class Selector implements java.io.Closeable {
+    ctor protected Selector();
+    method public abstract boolean isOpen();
+    method public abstract java.util.Set<java.nio.channels.SelectionKey> keys();
+    method public static java.nio.channels.Selector open() throws java.io.IOException;
+    method public abstract java.nio.channels.spi.SelectorProvider provider();
+    method public abstract int select(long) throws java.io.IOException;
+    method public abstract int select() throws java.io.IOException;
+    method public abstract int selectNow() throws java.io.IOException;
+    method public abstract java.util.Set<java.nio.channels.SelectionKey> selectedKeys();
+    method public abstract java.nio.channels.Selector wakeup();
+  }
+
+  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.NetworkChannel {
+    ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException;
+    method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
+    method public abstract <T> java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.net.ServerSocket socket();
+    method public final int validOps();
+  }
+
+  public class ShutdownChannelGroupException extends java.lang.IllegalStateException {
+    ctor public ShutdownChannelGroupException();
+  }
+
+  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.NetworkChannel java.nio.channels.ScatteringByteChannel {
+    ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.SocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract boolean finishConnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public abstract boolean isConnected();
+    method public abstract boolean isConnectionPending();
+    method public static java.nio.channels.SocketChannel open() throws java.io.IOException;
+    method public static java.nio.channels.SocketChannel open(java.net.SocketAddress) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownOutput() throws java.io.IOException;
+    method public abstract java.net.Socket socket();
+    method public final int validOps();
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public class UnresolvedAddressException extends java.lang.IllegalArgumentException {
+    ctor public UnresolvedAddressException();
+  }
+
+  public class UnsupportedAddressTypeException extends java.lang.IllegalArgumentException {
+    ctor public UnsupportedAddressTypeException();
+  }
+
+  public interface WritableByteChannel extends java.nio.channels.Channel {
+    method public int write(java.nio.ByteBuffer) throws java.io.IOException;
+  }
+
+  public class WritePendingException extends java.lang.IllegalStateException {
+    ctor public WritePendingException();
+  }
+
+}
+
+package java.nio.channels.spi {
+
+  public abstract class AbstractInterruptibleChannel implements java.nio.channels.Channel java.nio.channels.InterruptibleChannel {
+    ctor protected AbstractInterruptibleChannel();
+    method protected final void begin();
+    method public final void close() throws java.io.IOException;
+    method protected final void end(boolean) throws java.nio.channels.AsynchronousCloseException;
+    method protected abstract void implCloseChannel() throws java.io.IOException;
+    method public final boolean isOpen();
+  }
+
+  public abstract class AbstractSelectableChannel extends java.nio.channels.SelectableChannel {
+    ctor protected AbstractSelectableChannel(java.nio.channels.spi.SelectorProvider);
+    method public final Object blockingLock();
+    method public final java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException;
+    method protected final void implCloseChannel() throws java.io.IOException;
+    method protected abstract void implCloseSelectableChannel() throws java.io.IOException;
+    method protected abstract void implConfigureBlocking(boolean) throws java.io.IOException;
+    method public final boolean isBlocking();
+    method public final boolean isRegistered();
+    method public final java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
+    method public final java.nio.channels.spi.SelectorProvider provider();
+    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, Object) throws java.nio.channels.ClosedChannelException;
+  }
+
+  public abstract class AbstractSelectionKey extends java.nio.channels.SelectionKey {
+    ctor protected AbstractSelectionKey();
+    method public final void cancel();
+    method public final boolean isValid();
+  }
+
+  public abstract class AbstractSelector extends java.nio.channels.Selector {
+    ctor protected AbstractSelector(java.nio.channels.spi.SelectorProvider);
+    method protected final void begin();
+    method protected final java.util.Set<java.nio.channels.SelectionKey> cancelledKeys();
+    method public final void close() throws java.io.IOException;
+    method protected final void deregister(java.nio.channels.spi.AbstractSelectionKey);
+    method protected final void end();
+    method protected abstract void implCloseSelector() throws java.io.IOException;
+    method public final boolean isOpen();
+    method public final java.nio.channels.spi.SelectorProvider provider();
+    method protected abstract java.nio.channels.SelectionKey register(java.nio.channels.spi.AbstractSelectableChannel, int, Object);
+  }
+
+  public abstract class AsynchronousChannelProvider {
+    ctor protected AsynchronousChannelProvider();
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel openAsynchronousSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.spi.AsynchronousChannelProvider provider();
+  }
+
+  public abstract class SelectorProvider {
+    ctor protected SelectorProvider();
+    method public java.nio.channels.Channel inheritedChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel openDatagramChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel openDatagramChannel(java.net.ProtocolFamily) throws java.io.IOException;
+    method public abstract java.nio.channels.Pipe openPipe() throws java.io.IOException;
+    method public abstract java.nio.channels.spi.AbstractSelector openSelector() throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel openServerSocketChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel openSocketChannel() throws java.io.IOException;
+    method public static java.nio.channels.spi.SelectorProvider provider();
+  }
+
+}
+
+package java.nio.charset {
+
+  public class CharacterCodingException extends java.io.IOException {
+    ctor public CharacterCodingException();
+  }
+
+  public abstract class Charset implements java.lang.Comparable<java.nio.charset.Charset> {
+    ctor protected Charset(String, String[]);
+    method public final java.util.Set<java.lang.String> aliases();
+    method public static java.util.SortedMap<java.lang.String,java.nio.charset.Charset> availableCharsets();
+    method public boolean canEncode();
+    method public final int compareTo(java.nio.charset.Charset);
+    method public abstract boolean contains(java.nio.charset.Charset);
+    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer);
+    method public static java.nio.charset.Charset defaultCharset();
+    method public String displayName();
+    method public String displayName(java.util.Locale);
+    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer);
+    method public final java.nio.ByteBuffer encode(String);
+    method public final boolean equals(Object);
+    method public static java.nio.charset.Charset forName(String);
+    method public final int hashCode();
+    method public final boolean isRegistered();
+    method public static boolean isSupported(String);
+    method public final String name();
+    method public abstract java.nio.charset.CharsetDecoder newDecoder();
+    method public abstract java.nio.charset.CharsetEncoder newEncoder();
+    method public final String toString();
+  }
+
+  public abstract class CharsetDecoder {
+    ctor protected CharsetDecoder(java.nio.charset.Charset, float, float);
+    method public final float averageCharsPerByte();
+    method public final java.nio.charset.Charset charset();
+    method public final java.nio.charset.CoderResult decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean);
+    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException;
+    method protected abstract java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer, java.nio.CharBuffer);
+    method public java.nio.charset.Charset detectedCharset();
+    method public final java.nio.charset.CoderResult flush(java.nio.CharBuffer);
+    method protected java.nio.charset.CoderResult implFlush(java.nio.CharBuffer);
+    method protected void implOnMalformedInput(java.nio.charset.CodingErrorAction);
+    method protected void implOnUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method protected void implReplaceWith(String);
+    method protected void implReset();
+    method public boolean isAutoDetecting();
+    method public boolean isCharsetDetected();
+    method public java.nio.charset.CodingErrorAction malformedInputAction();
+    method public final float maxCharsPerByte();
+    method public final java.nio.charset.CharsetDecoder onMalformedInput(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetDecoder onUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetDecoder replaceWith(String);
+    method public final String replacement();
+    method public final java.nio.charset.CharsetDecoder reset();
+    method public java.nio.charset.CodingErrorAction unmappableCharacterAction();
+  }
+
+  public abstract class CharsetEncoder {
+    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float, byte[]);
+    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float);
+    method public final float averageBytesPerChar();
+    method public boolean canEncode(char);
+    method public boolean canEncode(CharSequence);
+    method public final java.nio.charset.Charset charset();
+    method public final java.nio.charset.CoderResult encode(java.nio.CharBuffer, java.nio.ByteBuffer, boolean);
+    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException;
+    method protected abstract java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer, java.nio.ByteBuffer);
+    method public final java.nio.charset.CoderResult flush(java.nio.ByteBuffer);
+    method protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer);
+    method protected void implOnMalformedInput(java.nio.charset.CodingErrorAction);
+    method protected void implOnUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method protected void implReplaceWith(byte[]);
+    method protected void implReset();
+    method public boolean isLegalReplacement(byte[]);
+    method public java.nio.charset.CodingErrorAction malformedInputAction();
+    method public final float maxBytesPerChar();
+    method public final java.nio.charset.CharsetEncoder onMalformedInput(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetEncoder onUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetEncoder replaceWith(byte[]);
+    method public final byte[] replacement();
+    method public final java.nio.charset.CharsetEncoder reset();
+    method public java.nio.charset.CodingErrorAction unmappableCharacterAction();
+  }
+
+  public class CoderMalfunctionError extends java.lang.Error {
+    ctor public CoderMalfunctionError(Exception);
+  }
+
+  public class CoderResult {
+    method public boolean isError();
+    method public boolean isMalformed();
+    method public boolean isOverflow();
+    method public boolean isUnderflow();
+    method public boolean isUnmappable();
+    method public int length();
+    method public static java.nio.charset.CoderResult malformedForLength(int);
+    method public void throwException() throws java.nio.charset.CharacterCodingException;
+    method public static java.nio.charset.CoderResult unmappableForLength(int);
+    field public static final java.nio.charset.CoderResult OVERFLOW;
+    field public static final java.nio.charset.CoderResult UNDERFLOW;
+  }
+
+  public class CodingErrorAction {
+    field public static final java.nio.charset.CodingErrorAction IGNORE;
+    field public static final java.nio.charset.CodingErrorAction REPLACE;
+    field public static final java.nio.charset.CodingErrorAction REPORT;
+  }
+
+  public class IllegalCharsetNameException extends java.lang.IllegalArgumentException {
+    ctor public IllegalCharsetNameException(String);
+    method public String getCharsetName();
+  }
+
+  public class MalformedInputException extends java.nio.charset.CharacterCodingException {
+    ctor public MalformedInputException(int);
+    method public int getInputLength();
+  }
+
+  public final class StandardCharsets {
+    field public static final java.nio.charset.Charset ISO_8859_1;
+    field public static final java.nio.charset.Charset US_ASCII;
+    field public static final java.nio.charset.Charset UTF_16;
+    field public static final java.nio.charset.Charset UTF_16BE;
+    field public static final java.nio.charset.Charset UTF_16LE;
+    field public static final java.nio.charset.Charset UTF_8;
+  }
+
+  public class UnmappableCharacterException extends java.nio.charset.CharacterCodingException {
+    ctor public UnmappableCharacterException(int);
+    method public int getInputLength();
+  }
+
+  public class UnsupportedCharsetException extends java.lang.IllegalArgumentException {
+    ctor public UnsupportedCharsetException(String);
+    method public String getCharsetName();
+  }
+
+}
+
+package java.nio.charset.spi {
+
+  public abstract class CharsetProvider {
+    ctor protected CharsetProvider();
+    method public abstract java.nio.charset.Charset charsetForName(String);
+    method public abstract java.util.Iterator<java.nio.charset.Charset> charsets();
+  }
+
+}
+
+package java.nio.file {
+
+  public class AccessDeniedException extends java.nio.file.FileSystemException {
+    ctor public AccessDeniedException(String);
+    ctor public AccessDeniedException(String, String, String);
+  }
+
+  public enum AccessMode {
+    enum_constant public static final java.nio.file.AccessMode EXECUTE;
+    enum_constant public static final java.nio.file.AccessMode READ;
+    enum_constant public static final java.nio.file.AccessMode WRITE;
+  }
+
+  public class AtomicMoveNotSupportedException extends java.nio.file.FileSystemException {
+    ctor public AtomicMoveNotSupportedException(String, String, String);
+  }
+
+  public class ClosedDirectoryStreamException extends java.lang.IllegalStateException {
+    ctor public ClosedDirectoryStreamException();
+  }
+
+  public class ClosedFileSystemException extends java.lang.IllegalStateException {
+    ctor public ClosedFileSystemException();
+  }
+
+  public class ClosedWatchServiceException extends java.lang.IllegalStateException {
+    ctor public ClosedWatchServiceException();
+  }
+
+  public interface CopyOption {
+  }
+
+  public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
+    ctor public DirectoryIteratorException(java.io.IOException);
+    method public java.io.IOException getCause();
+  }
+
+  public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
+    ctor public DirectoryNotEmptyException(String);
+  }
+
+  public interface DirectoryStream<T> extends java.io.Closeable java.lang.Iterable<T> {
+  }
+
+  @java.lang.FunctionalInterface public static interface DirectoryStream.Filter<T> {
+    method public boolean accept(T) throws java.io.IOException;
+  }
+
+  public class FileAlreadyExistsException extends java.nio.file.FileSystemException {
+    ctor public FileAlreadyExistsException(String);
+    ctor public FileAlreadyExistsException(String, String, String);
+  }
+
+  public abstract class FileStore {
+    ctor protected FileStore();
+    method public abstract Object getAttribute(String) throws java.io.IOException;
+    method public abstract <V extends java.nio.file.attribute.FileStoreAttributeView> V getFileStoreAttributeView(Class<V>);
+    method public abstract long getTotalSpace() throws java.io.IOException;
+    method public abstract long getUnallocatedSpace() throws java.io.IOException;
+    method public abstract long getUsableSpace() throws java.io.IOException;
+    method public abstract boolean isReadOnly();
+    method public abstract String name();
+    method public abstract boolean supportsFileAttributeView(Class<? extends java.nio.file.attribute.FileAttributeView>);
+    method public abstract boolean supportsFileAttributeView(String);
+    method public abstract String type();
+  }
+
+  public abstract class FileSystem implements java.io.Closeable {
+    ctor protected FileSystem();
+    method public abstract Iterable<java.nio.file.FileStore> getFileStores();
+    method public abstract java.nio.file.Path getPath(String, java.lang.String...);
+    method public abstract java.nio.file.PathMatcher getPathMatcher(String);
+    method public abstract Iterable<java.nio.file.Path> getRootDirectories();
+    method public abstract String getSeparator();
+    method public abstract java.nio.file.attribute.UserPrincipalLookupService getUserPrincipalLookupService();
+    method public abstract boolean isOpen();
+    method public abstract boolean isReadOnly();
+    method public abstract java.nio.file.WatchService newWatchService() throws java.io.IOException;
+    method public abstract java.nio.file.spi.FileSystemProvider provider();
+    method public abstract java.util.Set<java.lang.String> supportedFileAttributeViews();
+  }
+
+  public class FileSystemAlreadyExistsException extends java.lang.RuntimeException {
+    ctor public FileSystemAlreadyExistsException();
+    ctor public FileSystemAlreadyExistsException(String);
+  }
+
+  public class FileSystemException extends java.io.IOException {
+    ctor public FileSystemException(String);
+    ctor public FileSystemException(String, String, String);
+    method public String getFile();
+    method public String getOtherFile();
+    method public String getReason();
+  }
+
+  public class FileSystemLoopException extends java.nio.file.FileSystemException {
+    ctor public FileSystemLoopException(String);
+  }
+
+  public class FileSystemNotFoundException extends java.lang.RuntimeException {
+    ctor public FileSystemNotFoundException();
+    ctor public FileSystemNotFoundException(String);
+  }
+
+  public final class FileSystems {
+    method public static java.nio.file.FileSystem getDefault();
+    method public static java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String,?>) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String,?>, ClassLoader) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.nio.file.Path, ClassLoader) throws java.io.IOException;
+  }
+
+  public enum FileVisitOption {
+    enum_constant public static final java.nio.file.FileVisitOption FOLLOW_LINKS;
+  }
+
+  public enum FileVisitResult {
+    enum_constant public static final java.nio.file.FileVisitResult CONTINUE;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SIBLINGS;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SUBTREE;
+    enum_constant public static final java.nio.file.FileVisitResult TERMINATE;
+  }
+
+  public interface FileVisitor<T> {
+    method public java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException;
+  }
+
+  public final class Files {
+    method public static java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.nio.file.Path, java.io.OutputStream) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(java.nio.file.Path, String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(java.nio.file.Path, String, String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(String, String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static void delete(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static java.util.stream.Stream<java.nio.file.Path> find(java.nio.file.Path, int, java.util.function.BiPredicate<java.nio.file.Path,java.nio.file.attribute.BasicFileAttributes>, java.nio.file.FileVisitOption...) throws java.io.IOException;
+    method public static Object getAttribute(java.nio.file.Path, String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, Class<V>, java.nio.file.LinkOption...);
+    method public static java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isExecutable(java.nio.file.Path);
+    method public static boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isReadable(java.nio.file.Path);
+    method public static boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isSymbolicLink(java.nio.file.Path);
+    method public static boolean isWritable(java.nio.file.Path);
+    method public static java.util.stream.Stream<java.lang.String> lines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.lang.String> lines(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.nio.file.Path> list(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path) throws java.io.IOException;
+    method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, String) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static String probeContentType(java.nio.file.Path) throws java.io.IOException;
+    method public static byte[] readAllBytes(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path) throws java.io.IOException;
+    method public static <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Map<java.lang.String,java.lang.Object> readAttributes(java.nio.file.Path, String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path setAttribute(java.nio.file.Path, String, Object, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime) throws java.io.IOException;
+    method public static java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+    method public static java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+    method public static long size(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.nio.file.Path> walk(java.nio.file.Path, int, java.nio.file.FileVisitOption...) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.nio.file.Path> walk(java.nio.file.Path, java.nio.file.FileVisitOption...) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.util.Set<java.nio.file.FileVisitOption>, int, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, Iterable<? extends java.lang.CharSequence>, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, Iterable<? extends java.lang.CharSequence>, java.nio.file.OpenOption...) throws java.io.IOException;
+  }
+
+  public class InvalidPathException extends java.lang.IllegalArgumentException {
+    ctor public InvalidPathException(String, String, int);
+    ctor public InvalidPathException(String, String);
+    method public int getIndex();
+    method public String getInput();
+    method public String getReason();
+  }
+
+  public enum LinkOption implements java.nio.file.CopyOption java.nio.file.OpenOption {
+    enum_constant public static final java.nio.file.LinkOption NOFOLLOW_LINKS;
+  }
+
+  public final class LinkPermission extends java.security.BasicPermission {
+    ctor public LinkPermission(String);
+    ctor public LinkPermission(String, String);
+  }
+
+  public class NoSuchFileException extends java.nio.file.FileSystemException {
+    ctor public NoSuchFileException(String);
+    ctor public NoSuchFileException(String, String, String);
+  }
+
+  public class NotDirectoryException extends java.nio.file.FileSystemException {
+    ctor public NotDirectoryException(String);
+  }
+
+  public class NotLinkException extends java.nio.file.FileSystemException {
+    ctor public NotLinkException(String);
+    ctor public NotLinkException(String, String, String);
+  }
+
+  public interface OpenOption {
+  }
+
+  public interface Path extends java.lang.Comparable<java.nio.file.Path> java.lang.Iterable<java.nio.file.Path> java.nio.file.Watchable {
+    method public int compareTo(java.nio.file.Path);
+    method public boolean endsWith(java.nio.file.Path);
+    method public boolean endsWith(String);
+    method public boolean equals(Object);
+    method public java.nio.file.Path getFileName();
+    method public java.nio.file.FileSystem getFileSystem();
+    method public java.nio.file.Path getName(int);
+    method public int getNameCount();
+    method public java.nio.file.Path getParent();
+    method public java.nio.file.Path getRoot();
+    method public int hashCode();
+    method public boolean isAbsolute();
+    method public java.util.Iterator<java.nio.file.Path> iterator();
+    method public java.nio.file.Path normalize();
+    method public java.nio.file.Path relativize(java.nio.file.Path);
+    method public java.nio.file.Path resolve(java.nio.file.Path);
+    method public java.nio.file.Path resolve(String);
+    method public java.nio.file.Path resolveSibling(java.nio.file.Path);
+    method public java.nio.file.Path resolveSibling(String);
+    method public boolean startsWith(java.nio.file.Path);
+    method public boolean startsWith(String);
+    method public java.nio.file.Path subpath(int, int);
+    method public java.nio.file.Path toAbsolutePath();
+    method public java.io.File toFile();
+    method public java.nio.file.Path toRealPath(java.nio.file.LinkOption...) throws java.io.IOException;
+    method public String toString();
+    method public java.net.URI toUri();
+  }
+
+  @java.lang.FunctionalInterface public interface PathMatcher {
+    method public boolean matches(java.nio.file.Path);
+  }
+
+  public final class Paths {
+    method public static java.nio.file.Path get(String, java.lang.String...);
+    method public static java.nio.file.Path get(java.net.URI);
+  }
+
+  public class ProviderMismatchException extends java.lang.IllegalArgumentException {
+    ctor public ProviderMismatchException();
+    ctor public ProviderMismatchException(String);
+  }
+
+  public class ProviderNotFoundException extends java.lang.RuntimeException {
+    ctor public ProviderNotFoundException();
+    ctor public ProviderNotFoundException(String);
+  }
+
+  public class ReadOnlyFileSystemException extends java.lang.UnsupportedOperationException {
+    ctor public ReadOnlyFileSystemException();
+  }
+
+  public interface SecureDirectoryStream<T> extends java.nio.file.DirectoryStream<T> {
+    method public void deleteDirectory(T) throws java.io.IOException;
+    method public void deleteFile(T) throws java.io.IOException;
+    method public <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(Class<V>);
+    method public <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(T, Class<V>, java.nio.file.LinkOption...);
+    method public void move(T, java.nio.file.SecureDirectoryStream<T>, T) throws java.io.IOException;
+    method public java.nio.channels.SeekableByteChannel newByteChannel(T, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public java.nio.file.SecureDirectoryStream<T> newDirectoryStream(T, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public class SimpleFileVisitor<T> implements java.nio.file.FileVisitor<T> {
+    ctor protected SimpleFileVisitor();
+    method public java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException;
+  }
+
+  public enum StandardCopyOption implements java.nio.file.CopyOption {
+    enum_constant public static final java.nio.file.StandardCopyOption ATOMIC_MOVE;
+    enum_constant public static final java.nio.file.StandardCopyOption COPY_ATTRIBUTES;
+    enum_constant public static final java.nio.file.StandardCopyOption REPLACE_EXISTING;
+  }
+
+  public enum StandardOpenOption implements java.nio.file.OpenOption {
+    enum_constant public static final java.nio.file.StandardOpenOption APPEND;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE_NEW;
+    enum_constant public static final java.nio.file.StandardOpenOption DELETE_ON_CLOSE;
+    enum_constant public static final java.nio.file.StandardOpenOption DSYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption READ;
+    enum_constant public static final java.nio.file.StandardOpenOption SPARSE;
+    enum_constant public static final java.nio.file.StandardOpenOption SYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption TRUNCATE_EXISTING;
+    enum_constant public static final java.nio.file.StandardOpenOption WRITE;
+  }
+
+  public final class StandardWatchEventKinds {
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_CREATE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_DELETE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_MODIFY;
+    field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW;
+  }
+
+  public interface WatchEvent<T> {
+    method public T context();
+    method public int count();
+    method public java.nio.file.WatchEvent.Kind<T> kind();
+  }
+
+  public static interface WatchEvent.Kind<T> {
+    method public String name();
+    method public Class<T> type();
+  }
+
+  public static interface WatchEvent.Modifier {
+    method public String name();
+  }
+
+  public interface WatchKey {
+    method public void cancel();
+    method public boolean isValid();
+    method public java.util.List<java.nio.file.WatchEvent<?>> pollEvents();
+    method public boolean reset();
+    method public java.nio.file.Watchable watchable();
+  }
+
+  public interface WatchService extends java.io.Closeable {
+    method public java.nio.file.WatchKey poll();
+    method public java.nio.file.WatchKey poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public java.nio.file.WatchKey take() throws java.lang.InterruptedException;
+  }
+
+  public interface Watchable {
+    method public java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException;
+    method public java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException;
+  }
+
+}
+
+package java.nio.file.attribute {
+
+  public final class AclEntry {
+    method public java.util.Set<java.nio.file.attribute.AclEntryFlag> flags();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder(java.nio.file.attribute.AclEntry);
+    method public java.util.Set<java.nio.file.attribute.AclEntryPermission> permissions();
+    method public java.nio.file.attribute.UserPrincipal principal();
+    method public java.nio.file.attribute.AclEntryType type();
+  }
+
+  public static final class AclEntry.Builder {
+    method public java.nio.file.attribute.AclEntry build();
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.util.Set<java.nio.file.attribute.AclEntryFlag>);
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.nio.file.attribute.AclEntryFlag...);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.util.Set<java.nio.file.attribute.AclEntryPermission>);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.nio.file.attribute.AclEntryPermission...);
+    method public java.nio.file.attribute.AclEntry.Builder setPrincipal(java.nio.file.attribute.UserPrincipal);
+    method public java.nio.file.attribute.AclEntry.Builder setType(java.nio.file.attribute.AclEntryType);
+  }
+
+  public enum AclEntryFlag {
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag DIRECTORY_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag FILE_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag INHERIT_ONLY;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag NO_PROPAGATE_INHERIT;
+  }
+
+  public enum AclEntryPermission {
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission APPEND_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE_CHILD;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission EXECUTE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission SYNCHRONIZE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_OWNER;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_FILE;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_SUBDIRECTORY;
+    field public static final java.nio.file.attribute.AclEntryPermission LIST_DIRECTORY;
+  }
+
+  public enum AclEntryType {
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALARM;
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALLOW;
+    enum_constant public static final java.nio.file.attribute.AclEntryType AUDIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryType DENY;
+  }
+
+  public interface AclFileAttributeView extends java.nio.file.attribute.FileOwnerAttributeView {
+    method public java.util.List<java.nio.file.attribute.AclEntry> getAcl() throws java.io.IOException;
+    method public void setAcl(java.util.List<java.nio.file.attribute.AclEntry>) throws java.io.IOException;
+  }
+
+  public interface AttributeView {
+    method public String name();
+  }
+
+  public interface BasicFileAttributeView extends java.nio.file.attribute.FileAttributeView {
+    method public java.nio.file.attribute.BasicFileAttributes readAttributes() throws java.io.IOException;
+    method public void setTimes(java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime) throws java.io.IOException;
+  }
+
+  public interface BasicFileAttributes {
+    method public java.nio.file.attribute.FileTime creationTime();
+    method public Object fileKey();
+    method public boolean isDirectory();
+    method public boolean isOther();
+    method public boolean isRegularFile();
+    method public boolean isSymbolicLink();
+    method public java.nio.file.attribute.FileTime lastAccessTime();
+    method public java.nio.file.attribute.FileTime lastModifiedTime();
+    method public long size();
+  }
+
+  public interface DosFileAttributeView extends java.nio.file.attribute.BasicFileAttributeView {
+    method public java.nio.file.attribute.DosFileAttributes readAttributes() throws java.io.IOException;
+    method public void setArchive(boolean) throws java.io.IOException;
+    method public void setHidden(boolean) throws java.io.IOException;
+    method public void setReadOnly(boolean) throws java.io.IOException;
+    method public void setSystem(boolean) throws java.io.IOException;
+  }
+
+  public interface DosFileAttributes extends java.nio.file.attribute.BasicFileAttributes {
+    method public boolean isArchive();
+    method public boolean isHidden();
+    method public boolean isReadOnly();
+    method public boolean isSystem();
+  }
+
+  public interface FileAttribute<T> {
+    method public String name();
+    method public T value();
+  }
+
+  public interface FileAttributeView extends java.nio.file.attribute.AttributeView {
+  }
+
+  public interface FileOwnerAttributeView extends java.nio.file.attribute.FileAttributeView {
+    method public java.nio.file.attribute.UserPrincipal getOwner() throws java.io.IOException;
+    method public void setOwner(java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+  }
+
+  public interface FileStoreAttributeView extends java.nio.file.attribute.AttributeView {
+  }
+
+  public final class FileTime implements java.lang.Comparable<java.nio.file.attribute.FileTime> {
+    method public int compareTo(java.nio.file.attribute.FileTime);
+    method public static java.nio.file.attribute.FileTime from(long, java.util.concurrent.TimeUnit);
+    method public static java.nio.file.attribute.FileTime from(java.time.Instant);
+    method public static java.nio.file.attribute.FileTime fromMillis(long);
+    method public long to(java.util.concurrent.TimeUnit);
+    method public java.time.Instant toInstant();
+    method public long toMillis();
+  }
+
+  public interface GroupPrincipal extends java.nio.file.attribute.UserPrincipal {
+  }
+
+  public interface PosixFileAttributeView extends java.nio.file.attribute.BasicFileAttributeView java.nio.file.attribute.FileOwnerAttributeView {
+    method public java.nio.file.attribute.PosixFileAttributes readAttributes() throws java.io.IOException;
+    method public void setGroup(java.nio.file.attribute.GroupPrincipal) throws java.io.IOException;
+    method public void setPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+  }
+
+  public interface PosixFileAttributes extends java.nio.file.attribute.BasicFileAttributes {
+    method public java.nio.file.attribute.GroupPrincipal group();
+    method public java.nio.file.attribute.UserPrincipal owner();
+    method public java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions();
+  }
+
+  public enum PosixFilePermission {
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_WRITE;
+  }
+
+  public final class PosixFilePermissions {
+    method public static java.nio.file.attribute.FileAttribute<java.util.Set<java.nio.file.attribute.PosixFilePermission>> asFileAttribute(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> fromString(String);
+    method public static String toString(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+  }
+
+  public interface UserDefinedFileAttributeView extends java.nio.file.attribute.FileAttributeView {
+    method public void delete(String) throws java.io.IOException;
+    method public java.util.List<java.lang.String> list() throws java.io.IOException;
+    method public int read(String, java.nio.ByteBuffer) throws java.io.IOException;
+    method public int size(String) throws java.io.IOException;
+    method public int write(String, java.nio.ByteBuffer) throws java.io.IOException;
+  }
+
+  public interface UserPrincipal extends java.security.Principal {
+  }
+
+  public abstract class UserPrincipalLookupService {
+    ctor protected UserPrincipalLookupService();
+    method public abstract java.nio.file.attribute.GroupPrincipal lookupPrincipalByGroupName(String) throws java.io.IOException;
+    method public abstract java.nio.file.attribute.UserPrincipal lookupPrincipalByName(String) throws java.io.IOException;
+  }
+
+  public class UserPrincipalNotFoundException extends java.io.IOException {
+    ctor public UserPrincipalNotFoundException(String);
+    method public String getName();
+  }
+
+}
+
+package java.nio.file.spi {
+
+  public abstract class FileSystemProvider {
+    ctor protected FileSystemProvider();
+    method public abstract void checkAccess(java.nio.file.Path, java.nio.file.AccessMode...) throws java.io.IOException;
+    method public abstract void copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public abstract void createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public void createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public void createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract void delete(java.nio.file.Path) throws java.io.IOException;
+    method public boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, Class<V>, java.nio.file.LinkOption...);
+    method public abstract java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public abstract java.nio.file.Path getPath(java.net.URI);
+    method public abstract String getScheme();
+    method public static java.util.List<java.nio.file.spi.FileSystemProvider> installedProviders();
+    method public abstract boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public abstract boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public abstract void move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public java.nio.channels.AsynchronousFileChannel newAsynchronousFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public java.nio.channels.FileChannel newFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String,?>) throws java.io.IOException;
+    method public java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.util.Map<java.lang.String,?>) throws java.io.IOException;
+    method public java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public abstract java.util.Map<java.lang.String,java.lang.Object> readAttributes(java.nio.file.Path, String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public abstract void setAttribute(java.nio.file.Path, String, Object, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public abstract class FileTypeDetector {
+    ctor protected FileTypeDetector();
+    method public abstract String probeContentType(java.nio.file.Path) throws java.io.IOException;
+  }
+
+}
+
+package java.security {
+
+  public final class AccessControlContext {
+    ctor public AccessControlContext(java.security.ProtectionDomain[]);
+    ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner);
+    method public void checkPermission(java.security.Permission) throws java.security.AccessControlException;
+    method public java.security.DomainCombiner getDomainCombiner();
+  }
+
+  public class AccessControlException extends java.lang.SecurityException {
+    ctor public AccessControlException(String);
+    ctor public AccessControlException(String, java.security.Permission);
+    method public java.security.Permission getPermission();
+  }
+
+  public final class AccessController {
+    method public static void checkPermission(java.security.Permission) throws java.security.AccessControlException;
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static java.security.AccessControlContext getContext();
+  }
+
+  public interface AlgorithmConstraints {
+    method public boolean permits(java.util.Set<java.security.CryptoPrimitive>, String, java.security.AlgorithmParameters);
+    method public boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.security.Key);
+    method public boolean permits(java.util.Set<java.security.CryptoPrimitive>, String, java.security.Key, java.security.AlgorithmParameters);
+  }
+
+  public class AlgorithmParameterGenerator {
+    ctor protected AlgorithmParameterGenerator(java.security.AlgorithmParameterGeneratorSpi, java.security.Provider, String);
+    method public final java.security.AlgorithmParameters generateParameters();
+    method public final String getAlgorithm();
+    method public static java.security.AlgorithmParameterGenerator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.AlgorithmParameterGenerator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.AlgorithmParameterGenerator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final void init(int);
+    method public final void init(int, java.security.SecureRandom);
+    method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class AlgorithmParameterGeneratorSpi {
+    ctor public AlgorithmParameterGeneratorSpi();
+    method protected abstract java.security.AlgorithmParameters engineGenerateParameters();
+    method protected abstract void engineInit(int, java.security.SecureRandom);
+    method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class AlgorithmParameters {
+    ctor protected AlgorithmParameters(java.security.AlgorithmParametersSpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public final byte[] getEncoded() throws java.io.IOException;
+    method public final byte[] getEncoded(String) throws java.io.IOException;
+    method public static java.security.AlgorithmParameters getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.AlgorithmParameters getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.AlgorithmParameters getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final <T extends java.security.spec.AlgorithmParameterSpec> T getParameterSpec(Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
+    method public final void init(byte[]) throws java.io.IOException;
+    method public final void init(byte[], String) throws java.io.IOException;
+    method public final String toString();
+  }
+
+  public abstract class AlgorithmParametersSpi {
+    ctor public AlgorithmParametersSpi();
+    method protected abstract byte[] engineGetEncoded() throws java.io.IOException;
+    method protected abstract byte[] engineGetEncoded(String) throws java.io.IOException;
+    method protected abstract <T extends java.security.spec.AlgorithmParameterSpec> T engineGetParameterSpec(Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
+    method protected abstract void engineInit(byte[]) throws java.io.IOException;
+    method protected abstract void engineInit(byte[], String) throws java.io.IOException;
+    method protected abstract String engineToString();
+  }
+
+  public final class AllPermission extends java.security.Permission {
+    ctor public AllPermission();
+    ctor public AllPermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public abstract class AuthProvider extends java.security.Provider {
+    ctor protected AuthProvider(String, double, String);
+    method public abstract void login(javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler) throws javax.security.auth.login.LoginException;
+    method public abstract void logout() throws javax.security.auth.login.LoginException;
+    method public abstract void setCallbackHandler(javax.security.auth.callback.CallbackHandler);
+  }
+
+  public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable {
+    ctor public BasicPermission(String);
+    ctor public BasicPermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  @Deprecated public interface Certificate {
+    method @Deprecated public void decode(java.io.InputStream) throws java.io.IOException, java.security.KeyException;
+    method @Deprecated public void encode(java.io.OutputStream) throws java.io.IOException, java.security.KeyException;
+    method @Deprecated public String getFormat();
+    method @Deprecated public java.security.Principal getGuarantor();
+    method @Deprecated public java.security.Principal getPrincipal();
+    method @Deprecated public java.security.PublicKey getPublicKey();
+    method @Deprecated public String toString(boolean);
+  }
+
+  public final class CodeSigner implements java.io.Serializable {
+    ctor public CodeSigner(java.security.cert.CertPath, java.security.Timestamp);
+    method public java.security.cert.CertPath getSignerCertPath();
+    method public java.security.Timestamp getTimestamp();
+  }
+
+  public class CodeSource implements java.io.Serializable {
+    ctor public CodeSource(java.net.URL, java.security.cert.Certificate[]);
+    ctor public CodeSource(java.net.URL, java.security.CodeSigner[]);
+    method public final java.security.cert.Certificate[] getCertificates();
+    method public final java.security.CodeSigner[] getCodeSigners();
+    method public final java.net.URL getLocation();
+    method public boolean implies(java.security.CodeSource);
+  }
+
+  public enum CryptoPrimitive {
+    enum_constant public static final java.security.CryptoPrimitive BLOCK_CIPHER;
+    enum_constant public static final java.security.CryptoPrimitive KEY_AGREEMENT;
+    enum_constant public static final java.security.CryptoPrimitive KEY_ENCAPSULATION;
+    enum_constant public static final java.security.CryptoPrimitive KEY_WRAP;
+    enum_constant public static final java.security.CryptoPrimitive MAC;
+    enum_constant public static final java.security.CryptoPrimitive MESSAGE_DIGEST;
+    enum_constant public static final java.security.CryptoPrimitive PUBLIC_KEY_ENCRYPTION;
+    enum_constant public static final java.security.CryptoPrimitive SECURE_RANDOM;
+    enum_constant public static final java.security.CryptoPrimitive SIGNATURE;
+    enum_constant public static final java.security.CryptoPrimitive STREAM_CIPHER;
+  }
+
+  public class DigestException extends java.security.GeneralSecurityException {
+    ctor public DigestException();
+    ctor public DigestException(String);
+    ctor public DigestException(String, Throwable);
+    ctor public DigestException(Throwable);
+  }
+
+  public class DigestInputStream extends java.io.FilterInputStream {
+    ctor public DigestInputStream(java.io.InputStream, java.security.MessageDigest);
+    method public java.security.MessageDigest getMessageDigest();
+    method public void on(boolean);
+    method public void setMessageDigest(java.security.MessageDigest);
+    field protected java.security.MessageDigest digest;
+  }
+
+  public class DigestOutputStream extends java.io.FilterOutputStream {
+    ctor public DigestOutputStream(java.io.OutputStream, java.security.MessageDigest);
+    method public java.security.MessageDigest getMessageDigest();
+    method public void on(boolean);
+    method public void setMessageDigest(java.security.MessageDigest);
+    field protected java.security.MessageDigest digest;
+  }
+
+  public interface DomainCombiner {
+    method public java.security.ProtectionDomain[] combine(java.security.ProtectionDomain[], java.security.ProtectionDomain[]);
+  }
+
+  public final class DomainLoadStoreParameter implements java.security.KeyStore.LoadStoreParameter {
+    ctor public DomainLoadStoreParameter(java.net.URI, java.util.Map<java.lang.String,java.security.KeyStore.ProtectionParameter>);
+    method public java.net.URI getConfiguration();
+    method public java.security.KeyStore.ProtectionParameter getProtectionParameter();
+    method public java.util.Map<java.lang.String,java.security.KeyStore.ProtectionParameter> getProtectionParams();
+  }
+
+  public class GeneralSecurityException extends java.lang.Exception {
+    ctor public GeneralSecurityException();
+    ctor public GeneralSecurityException(String);
+    ctor public GeneralSecurityException(String, Throwable);
+    ctor public GeneralSecurityException(Throwable);
+  }
+
+  public interface Guard {
+    method public void checkGuard(Object) throws java.lang.SecurityException;
+  }
+
+  public class GuardedObject implements java.io.Serializable {
+    ctor public GuardedObject(Object, java.security.Guard);
+    method public Object getObject() throws java.lang.SecurityException;
+  }
+
+  @Deprecated public abstract class Identity implements java.security.Principal java.io.Serializable {
+    ctor @Deprecated protected Identity();
+    ctor @Deprecated public Identity(String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    ctor @Deprecated public Identity(String);
+    method @Deprecated public void addCertificate(java.security.Certificate) throws java.security.KeyManagementException;
+    method @Deprecated public java.security.Certificate[] certificates();
+    method @Deprecated public final boolean equals(Object);
+    method @Deprecated public String getInfo();
+    method @Deprecated public final String getName();
+    method @Deprecated public java.security.PublicKey getPublicKey();
+    method @Deprecated public final java.security.IdentityScope getScope();
+    method @Deprecated protected boolean identityEquals(java.security.Identity);
+    method @Deprecated public void removeCertificate(java.security.Certificate) throws java.security.KeyManagementException;
+    method @Deprecated public void setInfo(String);
+    method @Deprecated public void setPublicKey(java.security.PublicKey) throws java.security.KeyManagementException;
+    method @Deprecated public String toString(boolean);
+  }
+
+  @Deprecated public abstract class IdentityScope extends java.security.Identity {
+    ctor @Deprecated protected IdentityScope();
+    ctor @Deprecated public IdentityScope(String);
+    ctor @Deprecated public IdentityScope(String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    method @Deprecated public abstract void addIdentity(java.security.Identity) throws java.security.KeyManagementException;
+    method @Deprecated public abstract java.security.Identity getIdentity(String);
+    method @Deprecated public java.security.Identity getIdentity(java.security.Principal);
+    method @Deprecated public abstract java.security.Identity getIdentity(java.security.PublicKey);
+    method @Deprecated public static java.security.IdentityScope getSystemScope();
+    method @Deprecated public abstract java.util.Enumeration<java.security.Identity> identities();
+    method @Deprecated public abstract void removeIdentity(java.security.Identity) throws java.security.KeyManagementException;
+    method @Deprecated protected static void setSystemScope(java.security.IdentityScope);
+    method @Deprecated public abstract int size();
+  }
+
+  public class InvalidAlgorithmParameterException extends java.security.GeneralSecurityException {
+    ctor public InvalidAlgorithmParameterException();
+    ctor public InvalidAlgorithmParameterException(String);
+    ctor public InvalidAlgorithmParameterException(String, Throwable);
+    ctor public InvalidAlgorithmParameterException(Throwable);
+  }
+
+  public class InvalidKeyException extends java.security.KeyException {
+    ctor public InvalidKeyException();
+    ctor public InvalidKeyException(String);
+    ctor public InvalidKeyException(String, Throwable);
+    ctor public InvalidKeyException(Throwable);
+  }
+
+  public class InvalidParameterException extends java.lang.IllegalArgumentException {
+    ctor public InvalidParameterException();
+    ctor public InvalidParameterException(String);
+  }
+
+  public interface Key extends java.io.Serializable {
+    method public String getAlgorithm();
+    method public byte[] getEncoded();
+    method public String getFormat();
+    field public static final long serialVersionUID = 6603384152749567654L; // 0x5ba3eee69414eea6L
+  }
+
+  public class KeyException extends java.security.GeneralSecurityException {
+    ctor public KeyException();
+    ctor public KeyException(String);
+    ctor public KeyException(String, Throwable);
+    ctor public KeyException(Throwable);
+  }
+
+  public class KeyFactory {
+    ctor protected KeyFactory(java.security.KeyFactorySpi, java.security.Provider, String);
+    method public final java.security.PrivateKey generatePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method public final java.security.PublicKey generatePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method public final String getAlgorithm();
+    method public static java.security.KeyFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.KeyFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.KeyFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final <T extends java.security.spec.KeySpec> T getKeySpec(java.security.Key, Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method public final java.security.Provider getProvider();
+    method public final java.security.Key translateKey(java.security.Key) throws java.security.InvalidKeyException;
+  }
+
+  public abstract class KeyFactorySpi {
+    ctor public KeyFactorySpi();
+    method protected abstract java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract <T extends java.security.spec.KeySpec> T engineGetKeySpec(java.security.Key, Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract java.security.Key engineTranslateKey(java.security.Key) throws java.security.InvalidKeyException;
+  }
+
+  public class KeyManagementException extends java.security.KeyException {
+    ctor public KeyManagementException();
+    ctor public KeyManagementException(String);
+    ctor public KeyManagementException(String, Throwable);
+    ctor public KeyManagementException(Throwable);
+  }
+
+  public final class KeyPair implements java.io.Serializable {
+    ctor public KeyPair(java.security.PublicKey, java.security.PrivateKey);
+    method public java.security.PrivateKey getPrivate();
+    method public java.security.PublicKey getPublic();
+  }
+
+  public abstract class KeyPairGenerator extends java.security.KeyPairGeneratorSpi {
+    ctor protected KeyPairGenerator(String);
+    method public final java.security.KeyPair genKeyPair();
+    method public java.security.KeyPair generateKeyPair();
+    method public String getAlgorithm();
+    method public static java.security.KeyPairGenerator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.KeyPairGenerator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.KeyPairGenerator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public void initialize(int);
+    method public void initialize(int, java.security.SecureRandom);
+    method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class KeyPairGeneratorSpi {
+    ctor public KeyPairGeneratorSpi();
+    method public abstract java.security.KeyPair generateKeyPair();
+    method public abstract void initialize(int, java.security.SecureRandom);
+    method public void initialize(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class KeyRep implements java.io.Serializable {
+    ctor public KeyRep(java.security.KeyRep.Type, String, String, byte[]);
+    method protected Object readResolve() throws java.io.ObjectStreamException;
+  }
+
+  public enum KeyRep.Type {
+    enum_constant public static final java.security.KeyRep.Type PRIVATE;
+    enum_constant public static final java.security.KeyRep.Type PUBLIC;
+    enum_constant public static final java.security.KeyRep.Type SECRET;
+  }
+
+  public class KeyStore {
+    ctor protected KeyStore(java.security.KeyStoreSpi, java.security.Provider, String);
+    method public final java.util.Enumeration<java.lang.String> aliases() throws java.security.KeyStoreException;
+    method public final boolean containsAlias(String) throws java.security.KeyStoreException;
+    method public final void deleteEntry(String) throws java.security.KeyStoreException;
+    method public final boolean entryInstanceOf(String, Class<? extends java.security.KeyStore.Entry>) throws java.security.KeyStoreException;
+    method public final java.security.cert.Certificate getCertificate(String) throws java.security.KeyStoreException;
+    method public final String getCertificateAlias(java.security.cert.Certificate) throws java.security.KeyStoreException;
+    method public final java.security.cert.Certificate[] getCertificateChain(String) throws java.security.KeyStoreException;
+    method public final java.util.Date getCreationDate(String) throws java.security.KeyStoreException;
+    method public static final String getDefaultType();
+    method public final java.security.KeyStore.Entry getEntry(String, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableEntryException;
+    method public static java.security.KeyStore getInstance(String) throws java.security.KeyStoreException;
+    method public static java.security.KeyStore getInstance(String, String) throws java.security.KeyStoreException, java.security.NoSuchProviderException;
+    method public static java.security.KeyStore getInstance(String, java.security.Provider) throws java.security.KeyStoreException;
+    method public final java.security.Key getKey(String, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+    method public final boolean isCertificateEntry(String) throws java.security.KeyStoreException;
+    method public final boolean isKeyEntry(String) throws java.security.KeyStoreException;
+    method public final void load(java.io.InputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public final void load(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public final void setCertificateEntry(String, java.security.cert.Certificate) throws java.security.KeyStoreException;
+    method public final void setEntry(String, java.security.KeyStore.Entry, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException;
+    method public final void setKeyEntry(String, java.security.Key, char[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public final void setKeyEntry(String, byte[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public final int size() throws java.security.KeyStoreException;
+    method public final void store(java.io.OutputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException;
+    method public final void store(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException;
+  }
+
+  public abstract static class KeyStore.Builder {
+    ctor protected KeyStore.Builder();
+    method public abstract java.security.KeyStore getKeyStore() throws java.security.KeyStoreException;
+    method public abstract java.security.KeyStore.ProtectionParameter getProtectionParameter(String) throws java.security.KeyStoreException;
+    method public static java.security.KeyStore.Builder newInstance(java.security.KeyStore, java.security.KeyStore.ProtectionParameter);
+    method public static java.security.KeyStore.Builder newInstance(String, java.security.Provider, java.io.File, java.security.KeyStore.ProtectionParameter);
+    method public static java.security.KeyStore.Builder newInstance(String, java.security.Provider, java.security.KeyStore.ProtectionParameter);
+  }
+
+  public static class KeyStore.CallbackHandlerProtection implements java.security.KeyStore.ProtectionParameter {
+    ctor public KeyStore.CallbackHandlerProtection(javax.security.auth.callback.CallbackHandler);
+    method public javax.security.auth.callback.CallbackHandler getCallbackHandler();
+  }
+
+  public static interface KeyStore.Entry {
+    method public default java.util.Set<java.security.KeyStore.Entry.Attribute> getAttributes();
+  }
+
+  public static interface KeyStore.Entry.Attribute {
+    method public String getName();
+    method public String getValue();
+  }
+
+  public static interface KeyStore.LoadStoreParameter {
+    method public java.security.KeyStore.ProtectionParameter getProtectionParameter();
+  }
+
+  public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
+    ctor public KeyStore.PasswordProtection(char[]);
+    ctor public KeyStore.PasswordProtection(char[], String, java.security.spec.AlgorithmParameterSpec);
+    method public char[] getPassword();
+    method public String getProtectionAlgorithm();
+    method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+  }
+
+  public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
+    ctor public KeyStore.PrivateKeyEntry(java.security.PrivateKey, java.security.cert.Certificate[]);
+    ctor public KeyStore.PrivateKeyEntry(java.security.PrivateKey, java.security.cert.Certificate[], java.util.Set<java.security.KeyStore.Entry.Attribute>);
+    method public java.security.cert.Certificate getCertificate();
+    method public java.security.cert.Certificate[] getCertificateChain();
+    method public java.security.PrivateKey getPrivateKey();
+  }
+
+  public static interface KeyStore.ProtectionParameter {
+  }
+
+  public static final class KeyStore.SecretKeyEntry implements java.security.KeyStore.Entry {
+    ctor public KeyStore.SecretKeyEntry(javax.crypto.SecretKey);
+    ctor public KeyStore.SecretKeyEntry(javax.crypto.SecretKey, java.util.Set<java.security.KeyStore.Entry.Attribute>);
+    method public javax.crypto.SecretKey getSecretKey();
+  }
+
+  public static final class KeyStore.TrustedCertificateEntry implements java.security.KeyStore.Entry {
+    ctor public KeyStore.TrustedCertificateEntry(java.security.cert.Certificate);
+    ctor public KeyStore.TrustedCertificateEntry(java.security.cert.Certificate, java.util.Set<java.security.KeyStore.Entry.Attribute>);
+    method public java.security.cert.Certificate getTrustedCertificate();
+  }
+
+  public class KeyStoreException extends java.security.GeneralSecurityException {
+    ctor public KeyStoreException();
+    ctor public KeyStoreException(String);
+    ctor public KeyStoreException(String, Throwable);
+    ctor public KeyStoreException(Throwable);
+  }
+
+  public abstract class KeyStoreSpi {
+    ctor public KeyStoreSpi();
+    method public abstract java.util.Enumeration<java.lang.String> engineAliases();
+    method public abstract boolean engineContainsAlias(String);
+    method public abstract void engineDeleteEntry(String) throws java.security.KeyStoreException;
+    method public boolean engineEntryInstanceOf(String, Class<? extends java.security.KeyStore.Entry>);
+    method public abstract java.security.cert.Certificate engineGetCertificate(String);
+    method public abstract String engineGetCertificateAlias(java.security.cert.Certificate);
+    method public abstract java.security.cert.Certificate[] engineGetCertificateChain(String);
+    method public abstract java.util.Date engineGetCreationDate(String);
+    method public java.security.KeyStore.Entry engineGetEntry(String, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableEntryException;
+    method public abstract java.security.Key engineGetKey(String, char[]) throws java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method public abstract boolean engineIsCertificateEntry(String);
+    method public abstract boolean engineIsKeyEntry(String);
+    method public abstract void engineLoad(java.io.InputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public void engineLoad(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public abstract void engineSetCertificateEntry(String, java.security.cert.Certificate) throws java.security.KeyStoreException;
+    method public void engineSetEntry(String, java.security.KeyStore.Entry, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException;
+    method public abstract void engineSetKeyEntry(String, java.security.Key, char[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public abstract void engineSetKeyEntry(String, byte[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public abstract int engineSize();
+    method public abstract void engineStore(java.io.OutputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public void engineStore(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+  }
+
+  public abstract class MessageDigest extends java.security.MessageDigestSpi {
+    ctor protected MessageDigest(@NonNull String);
+    method @NonNull public byte[] digest();
+    method public int digest(@NonNull byte[], int, int) throws java.security.DigestException;
+    method @NonNull public byte[] digest(@NonNull byte[]);
+    method @NonNull public final String getAlgorithm();
+    method public final int getDigestLength();
+    method @NonNull public static java.security.MessageDigest getInstance(@NonNull String) throws java.security.NoSuchAlgorithmException;
+    method @NonNull public static java.security.MessageDigest getInstance(@NonNull String, @NonNull String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method @NonNull public static java.security.MessageDigest getInstance(@NonNull String, @NonNull java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method @NonNull public final java.security.Provider getProvider();
+    method public static boolean isEqual(@Nullable byte[], @Nullable byte[]);
+    method public void reset();
+    method public void update(byte);
+    method public void update(@NonNull byte[], int, int);
+    method public void update(@NonNull byte[]);
+    method public final void update(@NonNull java.nio.ByteBuffer);
+  }
+
+  public abstract class MessageDigestSpi {
+    ctor public MessageDigestSpi();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method protected abstract byte[] engineDigest();
+    method protected int engineDigest(byte[], int, int) throws java.security.DigestException;
+    method protected int engineGetDigestLength();
+    method protected abstract void engineReset();
+    method protected abstract void engineUpdate(byte);
+    method protected abstract void engineUpdate(byte[], int, int);
+    method protected void engineUpdate(java.nio.ByteBuffer);
+  }
+
+  public class NoSuchAlgorithmException extends java.security.GeneralSecurityException {
+    ctor public NoSuchAlgorithmException();
+    ctor public NoSuchAlgorithmException(String);
+    ctor public NoSuchAlgorithmException(String, Throwable);
+    ctor public NoSuchAlgorithmException(Throwable);
+  }
+
+  public class NoSuchProviderException extends java.security.GeneralSecurityException {
+    ctor public NoSuchProviderException();
+    ctor public NoSuchProviderException(String);
+  }
+
+  public final class PKCS12Attribute implements java.security.KeyStore.Entry.Attribute {
+    ctor public PKCS12Attribute(String, String);
+    ctor public PKCS12Attribute(byte[]);
+    method public byte[] getEncoded();
+    method public String getName();
+    method public String getValue();
+  }
+
+  public abstract class Permission implements java.security.Guard java.io.Serializable {
+    ctor public Permission(String);
+    method public void checkGuard(Object) throws java.lang.SecurityException;
+    method public abstract String getActions();
+    method public final String getName();
+    method public abstract boolean implies(java.security.Permission);
+    method public java.security.PermissionCollection newPermissionCollection();
+  }
+
+  public abstract class PermissionCollection implements java.io.Serializable {
+    ctor public PermissionCollection();
+    method public abstract void add(java.security.Permission);
+    method public abstract java.util.Enumeration<java.security.Permission> elements();
+    method public abstract boolean implies(java.security.Permission);
+    method public boolean isReadOnly();
+    method public void setReadOnly();
+  }
+
+  public final class Permissions extends java.security.PermissionCollection implements java.io.Serializable {
+    ctor public Permissions();
+    method public void add(java.security.Permission);
+    method public java.util.Enumeration<java.security.Permission> elements();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public abstract class Policy {
+    ctor public Policy();
+    method public static java.security.Policy getInstance(String, java.security.Policy.Parameters) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.Policy getInstance(String, java.security.Policy.Parameters, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.Policy getInstance(String, java.security.Policy.Parameters, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public java.security.Policy.Parameters getParameters();
+    method public java.security.PermissionCollection getPermissions(java.security.CodeSource);
+    method public java.security.PermissionCollection getPermissions(java.security.ProtectionDomain);
+    method public static java.security.Policy getPolicy();
+    method public java.security.Provider getProvider();
+    method public String getType();
+    method public boolean implies(java.security.ProtectionDomain, java.security.Permission);
+    method public void refresh();
+    method public static void setPolicy(java.security.Policy);
+    field public static final java.security.PermissionCollection UNSUPPORTED_EMPTY_COLLECTION;
+  }
+
+  public static interface Policy.Parameters {
+  }
+
+  public abstract class PolicySpi {
+    ctor public PolicySpi();
+    method protected java.security.PermissionCollection engineGetPermissions(java.security.CodeSource);
+    method protected java.security.PermissionCollection engineGetPermissions(java.security.ProtectionDomain);
+    method protected abstract boolean engineImplies(java.security.ProtectionDomain, java.security.Permission);
+    method protected void engineRefresh();
+  }
+
+  public interface Principal {
+    method public boolean equals(Object);
+    method public String getName();
+    method public int hashCode();
+    method public default boolean implies(javax.security.auth.Subject);
+    method public String toString();
+  }
+
+  public interface PrivateKey extends java.security.Key javax.security.auth.Destroyable {
+    field public static final long serialVersionUID = 6034044314589513430L; // 0x53bd3b559a12c6d6L
+  }
+
+  public interface PrivilegedAction<T> {
+    method public T run();
+  }
+
+  public class PrivilegedActionException extends java.lang.Exception {
+    ctor public PrivilegedActionException(Exception);
+    method public Exception getException();
+  }
+
+  public interface PrivilegedExceptionAction<T> {
+    method public T run() throws java.lang.Exception;
+  }
+
+  public class ProtectionDomain {
+    ctor public ProtectionDomain(java.security.CodeSource, java.security.PermissionCollection);
+    ctor public ProtectionDomain(java.security.CodeSource, java.security.PermissionCollection, ClassLoader, java.security.Principal[]);
+    method public final ClassLoader getClassLoader();
+    method public final java.security.CodeSource getCodeSource();
+    method public final java.security.PermissionCollection getPermissions();
+    method public final java.security.Principal[] getPrincipals();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public abstract class Provider extends java.util.Properties {
+    ctor protected Provider(String, double, String);
+    method public Object compute(Object, java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public Object computeIfAbsent(Object, java.util.function.Function<? super java.lang.Object,?>);
+    method public Object computeIfPresent(Object, java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public java.util.Enumeration<java.lang.Object> elements();
+    method public java.util.Set<java.util.Map.Entry<java.lang.Object,java.lang.Object>> entrySet();
+    method public void forEach(java.util.function.BiConsumer<? super java.lang.Object,? super java.lang.Object>);
+    method public Object get(Object);
+    method public String getInfo();
+    method public String getName();
+    method public Object getOrDefault(Object, Object);
+    method public java.security.Provider.Service getService(String, String);
+    method public java.util.Set<java.security.Provider.Service> getServices();
+    method public double getVersion();
+    method public java.util.Set<java.lang.Object> keySet();
+    method public java.util.Enumeration<java.lang.Object> keys();
+    method public Object merge(Object, Object, java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public Object put(Object, Object);
+    method public void putAll(java.util.Map<?,?>);
+    method public Object putIfAbsent(Object, Object);
+    method protected void putService(java.security.Provider.Service);
+    method public Object remove(Object);
+    method protected void removeService(java.security.Provider.Service);
+    method public boolean replace(Object, Object, Object);
+    method public Object replace(Object, Object);
+    method public void replaceAll(java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public java.util.Collection<java.lang.Object> values();
+  }
+
+  public static class Provider.Service {
+    ctor public Provider.Service(java.security.Provider, String, String, String, java.util.List<java.lang.String>, java.util.Map<java.lang.String,java.lang.String>);
+    method public final String getAlgorithm();
+    method public final String getAttribute(String);
+    method public final String getClassName();
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+    method public Object newInstance(Object) throws java.security.NoSuchAlgorithmException;
+    method public boolean supportsParameter(Object);
+  }
+
+  public class ProviderException extends java.lang.RuntimeException {
+    ctor public ProviderException();
+    ctor public ProviderException(String);
+    ctor public ProviderException(String, Throwable);
+    ctor public ProviderException(Throwable);
+  }
+
+  public interface PublicKey extends java.security.Key {
+    field public static final long serialVersionUID = 7187392471159151072L; // 0x63bebf5f40c219e0L
+  }
+
+  public class SecureClassLoader extends java.lang.ClassLoader {
+    ctor protected SecureClassLoader(ClassLoader);
+    ctor protected SecureClassLoader();
+    method protected final Class<?> defineClass(String, byte[], int, int, java.security.CodeSource);
+    method protected final Class<?> defineClass(String, java.nio.ByteBuffer, java.security.CodeSource);
+    method protected java.security.PermissionCollection getPermissions(java.security.CodeSource);
+  }
+
+  public class SecureRandom extends java.util.Random {
+    ctor public SecureRandom();
+    ctor public SecureRandom(byte[]);
+    ctor protected SecureRandom(java.security.SecureRandomSpi, java.security.Provider);
+    method public byte[] generateSeed(int);
+    method public String getAlgorithm();
+    method public static java.security.SecureRandom getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.SecureRandom getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.SecureRandom getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.SecureRandom getInstanceStrong() throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public static byte[] getSeed(int);
+    method protected final int next(int);
+    method public void setSeed(byte[]);
+  }
+
+  public abstract class SecureRandomSpi implements java.io.Serializable {
+    ctor public SecureRandomSpi();
+    method protected abstract byte[] engineGenerateSeed(int);
+    method protected abstract void engineNextBytes(byte[]);
+    method protected abstract void engineSetSeed(byte[]);
+  }
+
+  public final class Security {
+    method public static int addProvider(java.security.Provider);
+    method @Deprecated public static String getAlgorithmProperty(String, String);
+    method public static java.util.Set<java.lang.String> getAlgorithms(String);
+    method public static String getProperty(String);
+    method public static java.security.Provider getProvider(String);
+    method public static java.security.Provider[] getProviders();
+    method public static java.security.Provider[] getProviders(String);
+    method public static java.security.Provider[] getProviders(java.util.Map<java.lang.String,java.lang.String>);
+    method public static int insertProviderAt(java.security.Provider, int);
+    method public static void removeProvider(String);
+    method public static void setProperty(String, String);
+  }
+
+  public final class SecurityPermission extends java.security.BasicPermission {
+    ctor public SecurityPermission(String);
+    ctor public SecurityPermission(String, String);
+  }
+
+  public abstract class Signature extends java.security.SignatureSpi {
+    ctor protected Signature(String);
+    method public final String getAlgorithm();
+    method public static java.security.Signature getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.Signature getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.Signature getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method @Deprecated public final Object getParameter(String) throws java.security.InvalidParameterException;
+    method public final java.security.AlgorithmParameters getParameters();
+    method public final java.security.Provider getProvider();
+    method public final void initSign(java.security.PrivateKey) throws java.security.InvalidKeyException;
+    method public final void initSign(java.security.PrivateKey, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final void initVerify(java.security.PublicKey) throws java.security.InvalidKeyException;
+    method public final void initVerify(java.security.cert.Certificate) throws java.security.InvalidKeyException;
+    method @Deprecated public final void setParameter(String, Object) throws java.security.InvalidParameterException;
+    method public final void setParameter(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method public final byte[] sign() throws java.security.SignatureException;
+    method public final int sign(byte[], int, int) throws java.security.SignatureException;
+    method public final void update(byte) throws java.security.SignatureException;
+    method public final void update(byte[]) throws java.security.SignatureException;
+    method public final void update(byte[], int, int) throws java.security.SignatureException;
+    method public final void update(java.nio.ByteBuffer) throws java.security.SignatureException;
+    method public final boolean verify(byte[]) throws java.security.SignatureException;
+    method public final boolean verify(byte[], int, int) throws java.security.SignatureException;
+    field protected static final int SIGN = 2; // 0x2
+    field protected static final int UNINITIALIZED = 0; // 0x0
+    field protected static final int VERIFY = 3; // 0x3
+    field protected int state;
+  }
+
+  public class SignatureException extends java.security.GeneralSecurityException {
+    ctor public SignatureException();
+    ctor public SignatureException(String);
+    ctor public SignatureException(String, Throwable);
+    ctor public SignatureException(Throwable);
+  }
+
+  public abstract class SignatureSpi {
+    ctor public SignatureSpi();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated protected abstract Object engineGetParameter(String) throws java.security.InvalidParameterException;
+    method protected java.security.AlgorithmParameters engineGetParameters();
+    method protected abstract void engineInitSign(java.security.PrivateKey) throws java.security.InvalidKeyException;
+    method protected void engineInitSign(java.security.PrivateKey, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method protected abstract void engineInitVerify(java.security.PublicKey) throws java.security.InvalidKeyException;
+    method @Deprecated protected abstract void engineSetParameter(String, Object) throws java.security.InvalidParameterException;
+    method protected void engineSetParameter(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method protected abstract byte[] engineSign() throws java.security.SignatureException;
+    method protected int engineSign(byte[], int, int) throws java.security.SignatureException;
+    method protected abstract void engineUpdate(byte) throws java.security.SignatureException;
+    method protected abstract void engineUpdate(byte[], int, int) throws java.security.SignatureException;
+    method protected void engineUpdate(java.nio.ByteBuffer);
+    method protected abstract boolean engineVerify(byte[]) throws java.security.SignatureException;
+    method protected boolean engineVerify(byte[], int, int) throws java.security.SignatureException;
+    field protected java.security.SecureRandom appRandom;
+  }
+
+  public final class SignedObject implements java.io.Serializable {
+    ctor public SignedObject(java.io.Serializable, java.security.PrivateKey, java.security.Signature) throws java.io.IOException, java.security.InvalidKeyException, java.security.SignatureException;
+    method public String getAlgorithm();
+    method public Object getObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public byte[] getSignature();
+    method public boolean verify(java.security.PublicKey, java.security.Signature) throws java.security.InvalidKeyException, java.security.SignatureException;
+  }
+
+  @Deprecated public abstract class Signer extends java.security.Identity {
+    ctor @Deprecated protected Signer();
+    ctor @Deprecated public Signer(String);
+    ctor @Deprecated public Signer(String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    method @Deprecated public java.security.PrivateKey getPrivateKey();
+    method @Deprecated public final void setKeyPair(java.security.KeyPair) throws java.security.InvalidParameterException, java.security.KeyException;
+  }
+
+  public final class Timestamp implements java.io.Serializable {
+    ctor public Timestamp(java.util.Date, java.security.cert.CertPath);
+    method public java.security.cert.CertPath getSignerCertPath();
+    method public java.util.Date getTimestamp();
+  }
+
+  public class UnrecoverableEntryException extends java.security.GeneralSecurityException {
+    ctor public UnrecoverableEntryException();
+    ctor public UnrecoverableEntryException(String);
+  }
+
+  public class UnrecoverableKeyException extends java.security.UnrecoverableEntryException {
+    ctor public UnrecoverableKeyException();
+    ctor public UnrecoverableKeyException(String);
+  }
+
+  public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable {
+    ctor public UnresolvedPermission(String, String, String, java.security.cert.Certificate[]);
+    method public String getActions();
+    method public String getUnresolvedActions();
+    method public java.security.cert.Certificate[] getUnresolvedCerts();
+    method public String getUnresolvedName();
+    method public String getUnresolvedType();
+    method public boolean implies(java.security.Permission);
+  }
+
+}
+
+package java.security.acl {
+
+  public interface Acl extends java.security.acl.Owner {
+    method public boolean addEntry(java.security.Principal, java.security.acl.AclEntry) throws java.security.acl.NotOwnerException;
+    method public boolean checkPermission(java.security.Principal, java.security.acl.Permission);
+    method public java.util.Enumeration<java.security.acl.AclEntry> entries();
+    method public String getName();
+    method public java.util.Enumeration<java.security.acl.Permission> getPermissions(java.security.Principal);
+    method public boolean removeEntry(java.security.Principal, java.security.acl.AclEntry) throws java.security.acl.NotOwnerException;
+    method public void setName(java.security.Principal, String) throws java.security.acl.NotOwnerException;
+    method public String toString();
+  }
+
+  public interface AclEntry extends java.lang.Cloneable {
+    method public boolean addPermission(java.security.acl.Permission);
+    method public boolean checkPermission(java.security.acl.Permission);
+    method public Object clone();
+    method public java.security.Principal getPrincipal();
+    method public boolean isNegative();
+    method public java.util.Enumeration<java.security.acl.Permission> permissions();
+    method public boolean removePermission(java.security.acl.Permission);
+    method public void setNegativePermissions();
+    method public boolean setPrincipal(java.security.Principal);
+    method public String toString();
+  }
+
+  public class AclNotFoundException extends java.lang.Exception {
+    ctor public AclNotFoundException();
+  }
+
+  public interface Group extends java.security.Principal {
+    method public boolean addMember(java.security.Principal);
+    method public boolean isMember(java.security.Principal);
+    method public java.util.Enumeration<? extends java.security.Principal> members();
+    method public boolean removeMember(java.security.Principal);
+  }
+
+  public class LastOwnerException extends java.lang.Exception {
+    ctor public LastOwnerException();
+  }
+
+  public class NotOwnerException extends java.lang.Exception {
+    ctor public NotOwnerException();
+  }
+
+  public interface Owner {
+    method public boolean addOwner(java.security.Principal, java.security.Principal) throws java.security.acl.NotOwnerException;
+    method public boolean deleteOwner(java.security.Principal, java.security.Principal) throws java.security.acl.LastOwnerException, java.security.acl.NotOwnerException;
+    method public boolean isOwner(java.security.Principal);
+  }
+
+  public interface Permission {
+  }
+
+}
+
+package java.security.cert {
+
+  public abstract class CRL {
+    ctor protected CRL(String);
+    method public final String getType();
+    method public abstract boolean isRevoked(java.security.cert.Certificate);
+    method public abstract String toString();
+  }
+
+  public class CRLException extends java.security.GeneralSecurityException {
+    ctor public CRLException();
+    ctor public CRLException(String);
+    ctor public CRLException(String, Throwable);
+    ctor public CRLException(Throwable);
+  }
+
+  public enum CRLReason {
+    enum_constant public static final java.security.cert.CRLReason AA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason AFFILIATION_CHANGED;
+    enum_constant public static final java.security.cert.CRLReason CA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason CERTIFICATE_HOLD;
+    enum_constant public static final java.security.cert.CRLReason CESSATION_OF_OPERATION;
+    enum_constant public static final java.security.cert.CRLReason KEY_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason PRIVILEGE_WITHDRAWN;
+    enum_constant public static final java.security.cert.CRLReason REMOVE_FROM_CRL;
+    enum_constant public static final java.security.cert.CRLReason SUPERSEDED;
+    enum_constant public static final java.security.cert.CRLReason UNSPECIFIED;
+    enum_constant public static final java.security.cert.CRLReason UNUSED;
+  }
+
+  public interface CRLSelector extends java.lang.Cloneable {
+    method public Object clone();
+    method public boolean match(java.security.cert.CRL);
+  }
+
+  public abstract class CertPath implements java.io.Serializable {
+    ctor protected CertPath(String);
+    method public abstract java.util.List<? extends java.security.cert.Certificate> getCertificates();
+    method public abstract byte[] getEncoded() throws java.security.cert.CertificateEncodingException;
+    method public abstract byte[] getEncoded(String) throws java.security.cert.CertificateEncodingException;
+    method public abstract java.util.Iterator<java.lang.String> getEncodings();
+    method public String getType();
+    method protected Object writeReplace() throws java.io.ObjectStreamException;
+  }
+
+  protected static class CertPath.CertPathRep implements java.io.Serializable {
+    ctor protected CertPath.CertPathRep(String, byte[]);
+    method protected Object readResolve() throws java.io.ObjectStreamException;
+  }
+
+  public class CertPathBuilder {
+    ctor protected CertPathBuilder(java.security.cert.CertPathBuilderSpi, java.security.Provider, String);
+    method public final java.security.cert.CertPathBuilderResult build(java.security.cert.CertPathParameters) throws java.security.cert.CertPathBuilderException, java.security.InvalidAlgorithmParameterException;
+    method public final String getAlgorithm();
+    method public static final String getDefaultType();
+    method public static java.security.cert.CertPathBuilder getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.cert.CertPathBuilder getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.cert.CertPathBuilder getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final java.security.cert.CertPathChecker getRevocationChecker();
+  }
+
+  public class CertPathBuilderException extends java.security.GeneralSecurityException {
+    ctor public CertPathBuilderException();
+    ctor public CertPathBuilderException(String);
+    ctor public CertPathBuilderException(Throwable);
+    ctor public CertPathBuilderException(String, Throwable);
+  }
+
+  public interface CertPathBuilderResult extends java.lang.Cloneable {
+    method public Object clone();
+    method public java.security.cert.CertPath getCertPath();
+  }
+
+  public abstract class CertPathBuilderSpi {
+    ctor public CertPathBuilderSpi();
+    method public abstract java.security.cert.CertPathBuilderResult engineBuild(java.security.cert.CertPathParameters) throws java.security.cert.CertPathBuilderException, java.security.InvalidAlgorithmParameterException;
+    method public java.security.cert.CertPathChecker engineGetRevocationChecker();
+  }
+
+  public interface CertPathChecker {
+    method public void check(java.security.cert.Certificate) throws java.security.cert.CertPathValidatorException;
+    method public void init(boolean) throws java.security.cert.CertPathValidatorException;
+    method public boolean isForwardCheckingSupported();
+  }
+
+  public interface CertPathParameters extends java.lang.Cloneable {
+    method public Object clone();
+  }
+
+  public class CertPathValidator {
+    ctor protected CertPathValidator(java.security.cert.CertPathValidatorSpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public static final String getDefaultType();
+    method public static java.security.cert.CertPathValidator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.cert.CertPathValidator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.cert.CertPathValidator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final java.security.cert.CertPathChecker getRevocationChecker();
+    method public final java.security.cert.CertPathValidatorResult validate(java.security.cert.CertPath, java.security.cert.CertPathParameters) throws java.security.cert.CertPathValidatorException, java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class CertPathValidatorException extends java.security.GeneralSecurityException {
+    ctor public CertPathValidatorException();
+    ctor public CertPathValidatorException(String);
+    ctor public CertPathValidatorException(Throwable);
+    ctor public CertPathValidatorException(String, Throwable);
+    ctor public CertPathValidatorException(String, Throwable, java.security.cert.CertPath, int);
+    ctor public CertPathValidatorException(String, Throwable, java.security.cert.CertPath, int, java.security.cert.CertPathValidatorException.Reason);
+    method public java.security.cert.CertPath getCertPath();
+    method public int getIndex();
+    method public java.security.cert.CertPathValidatorException.Reason getReason();
+  }
+
+  public enum CertPathValidatorException.BasicReason implements java.security.cert.CertPathValidatorException.Reason {
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason ALGORITHM_CONSTRAINED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason EXPIRED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason INVALID_SIGNATURE;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason NOT_YET_VALID;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason REVOKED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNDETERMINED_REVOCATION_STATUS;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNSPECIFIED;
+  }
+
+  public static interface CertPathValidatorException.Reason extends java.io.Serializable {
+  }
+
+  public interface CertPathValidatorResult extends java.lang.Cloneable {
+    method public Object clone();
+  }
+
+  public abstract class CertPathValidatorSpi {
+    ctor public CertPathValidatorSpi();
+    method public java.security.cert.CertPathChecker engineGetRevocationChecker();
+    method public abstract java.security.cert.CertPathValidatorResult engineValidate(java.security.cert.CertPath, java.security.cert.CertPathParameters) throws java.security.cert.CertPathValidatorException, java.security.InvalidAlgorithmParameterException;
+  }
+
+  public interface CertSelector extends java.lang.Cloneable {
+    method public Object clone();
+    method public boolean match(java.security.cert.Certificate);
+  }
+
+  public class CertStore {
+    ctor protected CertStore(java.security.cert.CertStoreSpi, java.security.Provider, String, java.security.cert.CertStoreParameters);
+    method public final java.util.Collection<? extends java.security.cert.CRL> getCRLs(java.security.cert.CRLSelector) throws java.security.cert.CertStoreException;
+    method public final java.security.cert.CertStoreParameters getCertStoreParameters();
+    method public final java.util.Collection<? extends java.security.cert.Certificate> getCertificates(java.security.cert.CertSelector) throws java.security.cert.CertStoreException;
+    method public static final String getDefaultType();
+    method public static java.security.cert.CertStore getInstance(String, java.security.cert.CertStoreParameters) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException;
+    method public static java.security.cert.CertStore getInstance(String, java.security.cert.CertStoreParameters, String) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.cert.CertStore getInstance(String, java.security.cert.CertStoreParameters, java.security.Provider) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+  }
+
+  public class CertStoreException extends java.security.GeneralSecurityException {
+    ctor public CertStoreException();
+    ctor public CertStoreException(String);
+    ctor public CertStoreException(Throwable);
+    ctor public CertStoreException(String, Throwable);
+  }
+
+  public interface CertStoreParameters extends java.lang.Cloneable {
+    method public Object clone();
+  }
+
+  public abstract class CertStoreSpi {
+    ctor public CertStoreSpi(java.security.cert.CertStoreParameters) throws java.security.InvalidAlgorithmParameterException;
+    method public abstract java.util.Collection<? extends java.security.cert.CRL> engineGetCRLs(java.security.cert.CRLSelector) throws java.security.cert.CertStoreException;
+    method public abstract java.util.Collection<? extends java.security.cert.Certificate> engineGetCertificates(java.security.cert.CertSelector) throws java.security.cert.CertStoreException;
+  }
+
+  public abstract class Certificate implements java.io.Serializable {
+    ctor protected Certificate(String);
+    method public abstract byte[] getEncoded() throws java.security.cert.CertificateEncodingException;
+    method public abstract java.security.PublicKey getPublicKey();
+    method public final String getType();
+    method public abstract String toString();
+    method public abstract void verify(java.security.PublicKey) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public abstract void verify(java.security.PublicKey, String) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public void verify(java.security.PublicKey, java.security.Provider) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
+    method protected Object writeReplace() throws java.io.ObjectStreamException;
+  }
+
+  protected static class Certificate.CertificateRep implements java.io.Serializable {
+    ctor protected Certificate.CertificateRep(String, byte[]);
+    method protected Object readResolve() throws java.io.ObjectStreamException;
+  }
+
+  public class CertificateEncodingException extends java.security.cert.CertificateException {
+    ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(String);
+    ctor public CertificateEncodingException(String, Throwable);
+    ctor public CertificateEncodingException(Throwable);
+  }
+
+  public class CertificateException extends java.security.GeneralSecurityException {
+    ctor public CertificateException();
+    ctor public CertificateException(String);
+    ctor public CertificateException(String, Throwable);
+    ctor public CertificateException(Throwable);
+  }
+
+  public class CertificateExpiredException extends java.security.cert.CertificateException {
+    ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(String);
+  }
+
+  public class CertificateFactory {
+    ctor protected CertificateFactory(java.security.cert.CertificateFactorySpi, java.security.Provider, String);
+    method public final java.security.cert.CRL generateCRL(java.io.InputStream) throws java.security.cert.CRLException;
+    method public final java.util.Collection<? extends java.security.cert.CRL> generateCRLs(java.io.InputStream) throws java.security.cert.CRLException;
+    method public final java.security.cert.CertPath generateCertPath(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public final java.security.cert.CertPath generateCertPath(java.io.InputStream, String) throws java.security.cert.CertificateException;
+    method public final java.security.cert.CertPath generateCertPath(java.util.List<? extends java.security.cert.Certificate>) throws java.security.cert.CertificateException;
+    method public final java.security.cert.Certificate generateCertificate(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public final java.util.Collection<? extends java.security.cert.Certificate> generateCertificates(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public final java.util.Iterator<java.lang.String> getCertPathEncodings();
+    method public static final java.security.cert.CertificateFactory getInstance(String) throws java.security.cert.CertificateException;
+    method public static final java.security.cert.CertificateFactory getInstance(String, String) throws java.security.cert.CertificateException, java.security.NoSuchProviderException;
+    method public static final java.security.cert.CertificateFactory getInstance(String, java.security.Provider) throws java.security.cert.CertificateException;
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+  }
+
+  public abstract class CertificateFactorySpi {
+    ctor public CertificateFactorySpi();
+    method public abstract java.security.cert.CRL engineGenerateCRL(java.io.InputStream) throws java.security.cert.CRLException;
+    method public abstract java.util.Collection<? extends java.security.cert.CRL> engineGenerateCRLs(java.io.InputStream) throws java.security.cert.CRLException;
+    method public java.security.cert.CertPath engineGenerateCertPath(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public java.security.cert.CertPath engineGenerateCertPath(java.io.InputStream, String) throws java.security.cert.CertificateException;
+    method public java.security.cert.CertPath engineGenerateCertPath(java.util.List<? extends java.security.cert.Certificate>) throws java.security.cert.CertificateException;
+    method public abstract java.security.cert.Certificate engineGenerateCertificate(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public abstract java.util.Collection<? extends java.security.cert.Certificate> engineGenerateCertificates(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public java.util.Iterator<java.lang.String> engineGetCertPathEncodings();
+  }
+
+  public class CertificateNotYetValidException extends java.security.cert.CertificateException {
+    ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(String);
+  }
+
+  public class CertificateParsingException extends java.security.cert.CertificateException {
+    ctor public CertificateParsingException();
+    ctor public CertificateParsingException(String);
+    ctor public CertificateParsingException(String, Throwable);
+    ctor public CertificateParsingException(Throwable);
+  }
+
+  public class CertificateRevokedException extends java.security.cert.CertificateException {
+    ctor public CertificateRevokedException(java.util.Date, java.security.cert.CRLReason, javax.security.auth.x500.X500Principal, java.util.Map<java.lang.String,java.security.cert.Extension>);
+    method public javax.security.auth.x500.X500Principal getAuthorityName();
+    method public java.util.Map<java.lang.String,java.security.cert.Extension> getExtensions();
+    method public java.util.Date getInvalidityDate();
+    method public java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
+  }
+
+  public class CollectionCertStoreParameters implements java.security.cert.CertStoreParameters {
+    ctor public CollectionCertStoreParameters(java.util.Collection<?>);
+    ctor public CollectionCertStoreParameters();
+    method public Object clone();
+    method public java.util.Collection<?> getCollection();
+  }
+
+  public interface Extension {
+    method public void encode(java.io.OutputStream) throws java.io.IOException;
+    method public String getId();
+    method public byte[] getValue();
+    method public boolean isCritical();
+  }
+
+  public class LDAPCertStoreParameters implements java.security.cert.CertStoreParameters {
+    ctor public LDAPCertStoreParameters(String, int);
+    ctor public LDAPCertStoreParameters(String);
+    ctor public LDAPCertStoreParameters();
+    method public Object clone();
+    method public int getPort();
+    method public String getServerName();
+  }
+
+  public class PKIXBuilderParameters extends java.security.cert.PKIXParameters {
+    ctor public PKIXBuilderParameters(java.util.Set<java.security.cert.TrustAnchor>, java.security.cert.CertSelector) throws java.security.InvalidAlgorithmParameterException;
+    ctor public PKIXBuilderParameters(java.security.KeyStore, java.security.cert.CertSelector) throws java.security.InvalidAlgorithmParameterException, java.security.KeyStoreException;
+    method public int getMaxPathLength();
+    method public void setMaxPathLength(int);
+  }
+
+  public class PKIXCertPathBuilderResult extends java.security.cert.PKIXCertPathValidatorResult implements java.security.cert.CertPathBuilderResult {
+    ctor public PKIXCertPathBuilderResult(java.security.cert.CertPath, java.security.cert.TrustAnchor, java.security.cert.PolicyNode, java.security.PublicKey);
+    method public java.security.cert.CertPath getCertPath();
+  }
+
+  public abstract class PKIXCertPathChecker implements java.security.cert.CertPathChecker java.lang.Cloneable {
+    ctor protected PKIXCertPathChecker();
+    method public abstract void check(java.security.cert.Certificate, java.util.Collection<java.lang.String>) throws java.security.cert.CertPathValidatorException;
+    method public void check(java.security.cert.Certificate) throws java.security.cert.CertPathValidatorException;
+    method public Object clone();
+    method public abstract java.util.Set<java.lang.String> getSupportedExtensions();
+  }
+
+  public class PKIXCertPathValidatorResult implements java.security.cert.CertPathValidatorResult {
+    ctor public PKIXCertPathValidatorResult(java.security.cert.TrustAnchor, java.security.cert.PolicyNode, java.security.PublicKey);
+    method public Object clone();
+    method public java.security.cert.PolicyNode getPolicyTree();
+    method public java.security.PublicKey getPublicKey();
+    method public java.security.cert.TrustAnchor getTrustAnchor();
+  }
+
+  public class PKIXParameters implements java.security.cert.CertPathParameters {
+    ctor public PKIXParameters(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException;
+    ctor public PKIXParameters(java.security.KeyStore) throws java.security.InvalidAlgorithmParameterException, java.security.KeyStoreException;
+    method public void addCertPathChecker(java.security.cert.PKIXCertPathChecker);
+    method public void addCertStore(java.security.cert.CertStore);
+    method public Object clone();
+    method public java.util.List<java.security.cert.PKIXCertPathChecker> getCertPathCheckers();
+    method public java.util.List<java.security.cert.CertStore> getCertStores();
+    method public java.util.Date getDate();
+    method public java.util.Set<java.lang.String> getInitialPolicies();
+    method public boolean getPolicyQualifiersRejected();
+    method public String getSigProvider();
+    method public java.security.cert.CertSelector getTargetCertConstraints();
+    method public java.util.Set<java.security.cert.TrustAnchor> getTrustAnchors();
+    method public boolean isAnyPolicyInhibited();
+    method public boolean isExplicitPolicyRequired();
+    method public boolean isPolicyMappingInhibited();
+    method public boolean isRevocationEnabled();
+    method public void setAnyPolicyInhibited(boolean);
+    method public void setCertPathCheckers(java.util.List<java.security.cert.PKIXCertPathChecker>);
+    method public void setCertStores(java.util.List<java.security.cert.CertStore>);
+    method public void setDate(java.util.Date);
+    method public void setExplicitPolicyRequired(boolean);
+    method public void setInitialPolicies(java.util.Set<java.lang.String>);
+    method public void setPolicyMappingInhibited(boolean);
+    method public void setPolicyQualifiersRejected(boolean);
+    method public void setRevocationEnabled(boolean);
+    method public void setSigProvider(String);
+    method public void setTargetCertConstraints(java.security.cert.CertSelector);
+    method public void setTrustAnchors(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public enum PKIXReason implements java.security.cert.CertPathValidatorException.Reason {
+    enum_constant public static final java.security.cert.PKIXReason INVALID_KEY_USAGE;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_NAME;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_POLICY;
+    enum_constant public static final java.security.cert.PKIXReason NAME_CHAINING;
+    enum_constant public static final java.security.cert.PKIXReason NOT_CA_CERT;
+    enum_constant public static final java.security.cert.PKIXReason NO_TRUST_ANCHOR;
+    enum_constant public static final java.security.cert.PKIXReason PATH_TOO_LONG;
+    enum_constant public static final java.security.cert.PKIXReason UNRECOGNIZED_CRIT_EXT;
+  }
+
+  public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
+    ctor protected PKIXRevocationChecker();
+    method public java.security.cert.PKIXRevocationChecker clone();
+    method public java.util.List<java.security.cert.Extension> getOcspExtensions();
+    method public java.net.URI getOcspResponder();
+    method public java.security.cert.X509Certificate getOcspResponderCert();
+    method public java.util.Map<java.security.cert.X509Certificate,byte[]> getOcspResponses();
+    method public java.util.Set<java.security.cert.PKIXRevocationChecker.Option> getOptions();
+    method public abstract java.util.List<java.security.cert.CertPathValidatorException> getSoftFailExceptions();
+    method public void setOcspExtensions(java.util.List<java.security.cert.Extension>);
+    method public void setOcspResponder(java.net.URI);
+    method public void setOcspResponderCert(java.security.cert.X509Certificate);
+    method public void setOcspResponses(java.util.Map<java.security.cert.X509Certificate,byte[]>);
+    method public void setOptions(java.util.Set<java.security.cert.PKIXRevocationChecker.Option>);
+  }
+
+  public enum PKIXRevocationChecker.Option {
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option NO_FALLBACK;
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option ONLY_END_ENTITY;
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option PREFER_CRLS;
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option SOFT_FAIL;
+  }
+
+  public interface PolicyNode {
+    method public java.util.Iterator<? extends java.security.cert.PolicyNode> getChildren();
+    method public int getDepth();
+    method public java.util.Set<java.lang.String> getExpectedPolicies();
+    method public java.security.cert.PolicyNode getParent();
+    method public java.util.Set<? extends java.security.cert.PolicyQualifierInfo> getPolicyQualifiers();
+    method public String getValidPolicy();
+    method public boolean isCritical();
+  }
+
+  public class PolicyQualifierInfo {
+    ctor public PolicyQualifierInfo(byte[]) throws java.io.IOException;
+    method public final byte[] getEncoded();
+    method public final byte[] getPolicyQualifier();
+    method public final String getPolicyQualifierId();
+  }
+
+  public class TrustAnchor {
+    ctor public TrustAnchor(java.security.cert.X509Certificate, byte[]);
+    ctor public TrustAnchor(javax.security.auth.x500.X500Principal, java.security.PublicKey, byte[]);
+    ctor public TrustAnchor(String, java.security.PublicKey, byte[]);
+    method public final javax.security.auth.x500.X500Principal getCA();
+    method public final String getCAName();
+    method public final java.security.PublicKey getCAPublicKey();
+    method public final byte[] getNameConstraints();
+    method public final java.security.cert.X509Certificate getTrustedCert();
+  }
+
+  public abstract class X509CRL extends java.security.cert.CRL implements java.security.cert.X509Extension {
+    ctor protected X509CRL();
+    method public abstract byte[] getEncoded() throws java.security.cert.CRLException;
+    method public abstract java.security.Principal getIssuerDN();
+    method public javax.security.auth.x500.X500Principal getIssuerX500Principal();
+    method public abstract java.util.Date getNextUpdate();
+    method public abstract java.security.cert.X509CRLEntry getRevokedCertificate(java.math.BigInteger);
+    method public java.security.cert.X509CRLEntry getRevokedCertificate(java.security.cert.X509Certificate);
+    method public abstract java.util.Set<? extends java.security.cert.X509CRLEntry> getRevokedCertificates();
+    method public abstract String getSigAlgName();
+    method public abstract String getSigAlgOID();
+    method public abstract byte[] getSigAlgParams();
+    method public abstract byte[] getSignature();
+    method public abstract byte[] getTBSCertList() throws java.security.cert.CRLException;
+    method public abstract java.util.Date getThisUpdate();
+    method public abstract int getVersion();
+    method public abstract void verify(java.security.PublicKey) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public abstract void verify(java.security.PublicKey, String) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public void verify(java.security.PublicKey, java.security.Provider) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
+  }
+
+  public abstract class X509CRLEntry implements java.security.cert.X509Extension {
+    ctor public X509CRLEntry();
+    method public javax.security.auth.x500.X500Principal getCertificateIssuer();
+    method public abstract byte[] getEncoded() throws java.security.cert.CRLException;
+    method public abstract java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
+    method public abstract java.math.BigInteger getSerialNumber();
+    method public abstract boolean hasExtensions();
+    method public abstract String toString();
+  }
+
+  public class X509CRLSelector implements java.security.cert.CRLSelector {
+    ctor public X509CRLSelector();
+    method public void addIssuer(javax.security.auth.x500.X500Principal);
+    method public void addIssuerName(String) throws java.io.IOException;
+    method public void addIssuerName(byte[]) throws java.io.IOException;
+    method public Object clone();
+    method public java.security.cert.X509Certificate getCertificateChecking();
+    method public java.util.Date getDateAndTime();
+    method public java.util.Collection<java.lang.Object> getIssuerNames();
+    method public java.util.Collection<javax.security.auth.x500.X500Principal> getIssuers();
+    method public java.math.BigInteger getMaxCRL();
+    method public java.math.BigInteger getMinCRL();
+    method public boolean match(java.security.cert.CRL);
+    method public void setCertificateChecking(java.security.cert.X509Certificate);
+    method public void setDateAndTime(java.util.Date);
+    method public void setIssuerNames(java.util.Collection<?>) throws java.io.IOException;
+    method public void setIssuers(java.util.Collection<javax.security.auth.x500.X500Principal>);
+    method public void setMaxCRLNumber(java.math.BigInteger);
+    method public void setMinCRLNumber(java.math.BigInteger);
+  }
+
+  public class X509CertSelector implements java.security.cert.CertSelector {
+    ctor public X509CertSelector();
+    method public void addPathToName(int, String) throws java.io.IOException;
+    method public void addPathToName(int, byte[]) throws java.io.IOException;
+    method public void addSubjectAlternativeName(int, String) throws java.io.IOException;
+    method public void addSubjectAlternativeName(int, byte[]) throws java.io.IOException;
+    method public Object clone();
+    method public byte[] getAuthorityKeyIdentifier();
+    method public int getBasicConstraints();
+    method public java.security.cert.X509Certificate getCertificate();
+    method public java.util.Date getCertificateValid();
+    method public java.util.Set<java.lang.String> getExtendedKeyUsage();
+    method public javax.security.auth.x500.X500Principal getIssuer();
+    method public byte[] getIssuerAsBytes() throws java.io.IOException;
+    method public String getIssuerAsString();
+    method public boolean[] getKeyUsage();
+    method public boolean getMatchAllSubjectAltNames();
+    method public byte[] getNameConstraints();
+    method public java.util.Collection<java.util.List<?>> getPathToNames();
+    method public java.util.Set<java.lang.String> getPolicy();
+    method public java.util.Date getPrivateKeyValid();
+    method public java.math.BigInteger getSerialNumber();
+    method public javax.security.auth.x500.X500Principal getSubject();
+    method public java.util.Collection<java.util.List<?>> getSubjectAlternativeNames();
+    method public byte[] getSubjectAsBytes() throws java.io.IOException;
+    method public String getSubjectAsString();
+    method public byte[] getSubjectKeyIdentifier();
+    method public java.security.PublicKey getSubjectPublicKey();
+    method public String getSubjectPublicKeyAlgID();
+    method public boolean match(java.security.cert.Certificate);
+    method public void setAuthorityKeyIdentifier(byte[]);
+    method public void setBasicConstraints(int);
+    method public void setCertificate(java.security.cert.X509Certificate);
+    method public void setCertificateValid(java.util.Date);
+    method public void setExtendedKeyUsage(java.util.Set<java.lang.String>) throws java.io.IOException;
+    method public void setIssuer(javax.security.auth.x500.X500Principal);
+    method public void setIssuer(String) throws java.io.IOException;
+    method public void setIssuer(byte[]) throws java.io.IOException;
+    method public void setKeyUsage(boolean[]);
+    method public void setMatchAllSubjectAltNames(boolean);
+    method public void setNameConstraints(byte[]) throws java.io.IOException;
+    method public void setPathToNames(java.util.Collection<java.util.List<?>>) throws java.io.IOException;
+    method public void setPolicy(java.util.Set<java.lang.String>) throws java.io.IOException;
+    method public void setPrivateKeyValid(java.util.Date);
+    method public void setSerialNumber(java.math.BigInteger);
+    method public void setSubject(javax.security.auth.x500.X500Principal);
+    method public void setSubject(String) throws java.io.IOException;
+    method public void setSubject(byte[]) throws java.io.IOException;
+    method public void setSubjectAlternativeNames(java.util.Collection<java.util.List<?>>) throws java.io.IOException;
+    method public void setSubjectKeyIdentifier(byte[]);
+    method public void setSubjectPublicKey(java.security.PublicKey);
+    method public void setSubjectPublicKey(byte[]) throws java.io.IOException;
+    method public void setSubjectPublicKeyAlgID(String) throws java.io.IOException;
+  }
+
+  public abstract class X509Certificate extends java.security.cert.Certificate implements java.security.cert.X509Extension {
+    ctor protected X509Certificate();
+    method public abstract void checkValidity() throws java.security.cert.CertificateExpiredException, java.security.cert.CertificateNotYetValidException;
+    method public abstract void checkValidity(java.util.Date) throws java.security.cert.CertificateExpiredException, java.security.cert.CertificateNotYetValidException;
+    method public abstract int getBasicConstraints();
+    method public java.util.List<java.lang.String> getExtendedKeyUsage() throws java.security.cert.CertificateParsingException;
+    method public java.util.Collection<java.util.List<?>> getIssuerAlternativeNames() throws java.security.cert.CertificateParsingException;
+    method public abstract java.security.Principal getIssuerDN();
+    method public abstract boolean[] getIssuerUniqueID();
+    method public javax.security.auth.x500.X500Principal getIssuerX500Principal();
+    method public abstract boolean[] getKeyUsage();
+    method public abstract java.util.Date getNotAfter();
+    method public abstract java.util.Date getNotBefore();
+    method public abstract java.math.BigInteger getSerialNumber();
+    method public abstract String getSigAlgName();
+    method public abstract String getSigAlgOID();
+    method public abstract byte[] getSigAlgParams();
+    method public abstract byte[] getSignature();
+    method public java.util.Collection<java.util.List<?>> getSubjectAlternativeNames() throws java.security.cert.CertificateParsingException;
+    method public abstract java.security.Principal getSubjectDN();
+    method public abstract boolean[] getSubjectUniqueID();
+    method public javax.security.auth.x500.X500Principal getSubjectX500Principal();
+    method public abstract byte[] getTBSCertificate() throws java.security.cert.CertificateEncodingException;
+    method public abstract int getVersion();
+  }
+
+  public interface X509Extension {
+    method public java.util.Set<java.lang.String> getCriticalExtensionOIDs();
+    method public byte[] getExtensionValue(String);
+    method public java.util.Set<java.lang.String> getNonCriticalExtensionOIDs();
+    method public boolean hasUnsupportedCriticalExtension();
+  }
+
+}
+
+package java.security.interfaces {
+
+  public interface DSAKey {
+    method public java.security.interfaces.DSAParams getParams();
+  }
+
+  public interface DSAKeyPairGenerator {
+    method public void initialize(java.security.interfaces.DSAParams, java.security.SecureRandom) throws java.security.InvalidParameterException;
+    method public void initialize(int, boolean, java.security.SecureRandom) throws java.security.InvalidParameterException;
+  }
+
+  public interface DSAParams {
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+  }
+
+  public interface DSAPrivateKey extends java.security.interfaces.DSAKey java.security.PrivateKey {
+    method public java.math.BigInteger getX();
+    field public static final long serialVersionUID = 7776497482533790279L; // 0x6bebab423b256247L
+  }
+
+  public interface DSAPublicKey extends java.security.interfaces.DSAKey java.security.PublicKey {
+    method public java.math.BigInteger getY();
+    field public static final long serialVersionUID = 1234526332779022332L; // 0x1121eb28ab28c7fcL
+  }
+
+  public interface ECKey {
+    method public java.security.spec.ECParameterSpec getParams();
+  }
+
+  public interface ECPrivateKey extends java.security.PrivateKey java.security.interfaces.ECKey {
+    method public java.math.BigInteger getS();
+    field public static final long serialVersionUID = -7896394956925609184L; // 0x926a5e9fa2435b20L
+  }
+
+  public interface ECPublicKey extends java.security.PublicKey java.security.interfaces.ECKey {
+    method public java.security.spec.ECPoint getW();
+    field public static final long serialVersionUID = -3314988629879632826L; // 0xd1fecb679990cc46L
+  }
+
+  public interface RSAKey {
+    method public java.math.BigInteger getModulus();
+  }
+
+  public interface RSAMultiPrimePrivateCrtKey extends java.security.interfaces.RSAPrivateKey {
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.security.spec.RSAOtherPrimeInfo[] getOtherPrimeInfo();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+    field public static final long serialVersionUID = 618058533534628008L; // 0x893c8f62dbaf8a8L
+  }
+
+  public interface RSAPrivateCrtKey extends java.security.interfaces.RSAPrivateKey {
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+    field public static final long serialVersionUID = -5682214253527700368L; // 0xb124b83df8d1ec70L
+  }
+
+  public interface RSAPrivateKey extends java.security.PrivateKey java.security.interfaces.RSAKey {
+    method public java.math.BigInteger getPrivateExponent();
+    field public static final long serialVersionUID = 5187144804936595022L; // 0x47fc70b7a8c2364eL
+  }
+
+  public interface RSAPublicKey extends java.security.PublicKey java.security.interfaces.RSAKey {
+    method public java.math.BigInteger getPublicExponent();
+    field public static final long serialVersionUID = -8727434096241101194L; // 0x86e1ecedeceab676L
+  }
+
+}
+
+package java.security.spec {
+
+  public interface AlgorithmParameterSpec {
+  }
+
+  public class DSAParameterSpec implements java.security.spec.AlgorithmParameterSpec java.security.interfaces.DSAParams {
+    ctor public DSAParameterSpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+  }
+
+  public class DSAPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public DSAPrivateKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+    method public java.math.BigInteger getX();
+  }
+
+  public class DSAPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public DSAPublicKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+    method public java.math.BigInteger getY();
+  }
+
+  public interface ECField {
+    method public int getFieldSize();
+  }
+
+  public class ECFieldF2m implements java.security.spec.ECField {
+    ctor public ECFieldF2m(int);
+    ctor public ECFieldF2m(int, java.math.BigInteger);
+    ctor public ECFieldF2m(int, int[]);
+    method public int getFieldSize();
+    method public int getM();
+    method public int[] getMidTermsOfReductionPolynomial();
+    method public java.math.BigInteger getReductionPolynomial();
+  }
+
+  public class ECFieldFp implements java.security.spec.ECField {
+    ctor public ECFieldFp(java.math.BigInteger);
+    method public int getFieldSize();
+    method public java.math.BigInteger getP();
+  }
+
+  public class ECGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public ECGenParameterSpec(String);
+    method public String getName();
+  }
+
+  public class ECParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public ECParameterSpec(java.security.spec.EllipticCurve, java.security.spec.ECPoint, java.math.BigInteger, int);
+    method public int getCofactor();
+    method public java.security.spec.EllipticCurve getCurve();
+    method public java.security.spec.ECPoint getGenerator();
+    method public java.math.BigInteger getOrder();
+  }
+
+  public class ECPoint {
+    ctor public ECPoint(java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getAffineX();
+    method public java.math.BigInteger getAffineY();
+    field public static final java.security.spec.ECPoint POINT_INFINITY;
+  }
+
+  public class ECPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public ECPrivateKeySpec(java.math.BigInteger, java.security.spec.ECParameterSpec);
+    method public java.security.spec.ECParameterSpec getParams();
+    method public java.math.BigInteger getS();
+  }
+
+  public class ECPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public ECPublicKeySpec(java.security.spec.ECPoint, java.security.spec.ECParameterSpec);
+    method public java.security.spec.ECParameterSpec getParams();
+    method public java.security.spec.ECPoint getW();
+  }
+
+  public class EllipticCurve {
+    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger);
+    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]);
+    method public java.math.BigInteger getA();
+    method public java.math.BigInteger getB();
+    method public java.security.spec.ECField getField();
+    method public byte[] getSeed();
+  }
+
+  public abstract class EncodedKeySpec implements java.security.spec.KeySpec {
+    ctor public EncodedKeySpec(byte[]);
+    method public byte[] getEncoded();
+    method public abstract String getFormat();
+  }
+
+  public class InvalidKeySpecException extends java.security.GeneralSecurityException {
+    ctor public InvalidKeySpecException();
+    ctor public InvalidKeySpecException(String);
+    ctor public InvalidKeySpecException(String, Throwable);
+    ctor public InvalidKeySpecException(Throwable);
+  }
+
+  public class InvalidParameterSpecException extends java.security.GeneralSecurityException {
+    ctor public InvalidParameterSpecException();
+    ctor public InvalidParameterSpecException(String);
+  }
+
+  public interface KeySpec {
+  }
+
+  public class MGF1ParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public MGF1ParameterSpec(String);
+    method public String getDigestAlgorithm();
+    field public static final java.security.spec.MGF1ParameterSpec SHA1;
+    field public static final java.security.spec.MGF1ParameterSpec SHA224;
+    field public static final java.security.spec.MGF1ParameterSpec SHA256;
+    field public static final java.security.spec.MGF1ParameterSpec SHA384;
+    field public static final java.security.spec.MGF1ParameterSpec SHA512;
+  }
+
+  public class PKCS8EncodedKeySpec extends java.security.spec.EncodedKeySpec {
+    ctor public PKCS8EncodedKeySpec(byte[]);
+    method public final String getFormat();
+  }
+
+  public class PSSParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public PSSParameterSpec(String, String, java.security.spec.AlgorithmParameterSpec, int, int);
+    ctor public PSSParameterSpec(int);
+    method public String getDigestAlgorithm();
+    method public String getMGFAlgorithm();
+    method public java.security.spec.AlgorithmParameterSpec getMGFParameters();
+    method public int getSaltLength();
+    method public int getTrailerField();
+    field public static final java.security.spec.PSSParameterSpec DEFAULT;
+  }
+
+  public class RSAKeyGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public RSAKeyGenParameterSpec(int, java.math.BigInteger);
+    method public int getKeysize();
+    method public java.math.BigInteger getPublicExponent();
+    field public static final java.math.BigInteger F0;
+    field public static final java.math.BigInteger F4;
+  }
+
+  public class RSAMultiPrimePrivateCrtKeySpec extends java.security.spec.RSAPrivateKeySpec {
+    ctor public RSAMultiPrimePrivateCrtKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.security.spec.RSAOtherPrimeInfo[]);
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.security.spec.RSAOtherPrimeInfo[] getOtherPrimeInfo();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+  }
+
+  public class RSAOtherPrimeInfo {
+    ctor public RSAOtherPrimeInfo(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public final java.math.BigInteger getCrtCoefficient();
+    method public final java.math.BigInteger getExponent();
+    method public final java.math.BigInteger getPrime();
+  }
+
+  public class RSAPrivateCrtKeySpec extends java.security.spec.RSAPrivateKeySpec {
+    ctor public RSAPrivateCrtKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+  }
+
+  public class RSAPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public RSAPrivateKeySpec(java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getModulus();
+    method public java.math.BigInteger getPrivateExponent();
+  }
+
+  public class RSAPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public RSAPublicKeySpec(java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getModulus();
+    method public java.math.BigInteger getPublicExponent();
+  }
+
+  public class X509EncodedKeySpec extends java.security.spec.EncodedKeySpec {
+    ctor public X509EncodedKeySpec(byte[]);
+    method public final String getFormat();
+  }
+
+}
+
+package java.sql {
+
+  public interface Array {
+    method public void free() throws java.sql.SQLException;
+    method public Object getArray() throws java.sql.SQLException;
+    method public Object getArray(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getArray(long, int) throws java.sql.SQLException;
+    method public Object getArray(long, int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public int getBaseType() throws java.sql.SQLException;
+    method public String getBaseTypeName() throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet() throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet(long, int) throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet(long, int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+  }
+
+  public class BatchUpdateException extends java.sql.SQLException {
+    ctor public BatchUpdateException(String, String, int, int[]);
+    ctor public BatchUpdateException(String, String, int[]);
+    ctor public BatchUpdateException(String, int[]);
+    ctor public BatchUpdateException(int[]);
+    ctor public BatchUpdateException();
+    ctor public BatchUpdateException(Throwable);
+    ctor public BatchUpdateException(int[], Throwable);
+    ctor public BatchUpdateException(String, int[], Throwable);
+    ctor public BatchUpdateException(String, String, int[], Throwable);
+    ctor public BatchUpdateException(String, String, int, int[], Throwable);
+    method public int[] getUpdateCounts();
+  }
+
+  public interface Blob {
+    method public void free() throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream() throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream(long, long) throws java.sql.SQLException;
+    method public byte[] getBytes(long, int) throws java.sql.SQLException;
+    method public long length() throws java.sql.SQLException;
+    method public long position(byte[], long) throws java.sql.SQLException;
+    method public long position(java.sql.Blob, long) throws java.sql.SQLException;
+    method public java.io.OutputStream setBinaryStream(long) throws java.sql.SQLException;
+    method public int setBytes(long, byte[]) throws java.sql.SQLException;
+    method public int setBytes(long, byte[], int, int) throws java.sql.SQLException;
+    method public void truncate(long) throws java.sql.SQLException;
+  }
+
+  public interface CallableStatement extends java.sql.PreparedStatement {
+    method public java.sql.Array getArray(int) throws java.sql.SQLException;
+    method public java.sql.Array getArray(String) throws java.sql.SQLException;
+    method @Deprecated public java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(String) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(int) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(String) throws java.sql.SQLException;
+    method public boolean getBoolean(int) throws java.sql.SQLException;
+    method public boolean getBoolean(String) throws java.sql.SQLException;
+    method public byte getByte(int) throws java.sql.SQLException;
+    method public byte getByte(String) throws java.sql.SQLException;
+    method public byte[] getBytes(int) throws java.sql.SQLException;
+    method public byte[] getBytes(String) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(int) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(String) throws java.sql.SQLException;
+    method public java.sql.Date getDate(int) throws java.sql.SQLException;
+    method public java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String, java.util.Calendar) throws java.sql.SQLException;
+    method public double getDouble(int) throws java.sql.SQLException;
+    method public double getDouble(String) throws java.sql.SQLException;
+    method public float getFloat(int) throws java.sql.SQLException;
+    method public float getFloat(String) throws java.sql.SQLException;
+    method public int getInt(int) throws java.sql.SQLException;
+    method public int getInt(String) throws java.sql.SQLException;
+    method public long getLong(int) throws java.sql.SQLException;
+    method public long getLong(String) throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(int) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(String) throws java.sql.SQLException;
+    method public String getNString(int) throws java.sql.SQLException;
+    method public String getNString(String) throws java.sql.SQLException;
+    method public Object getObject(int) throws java.sql.SQLException;
+    method public Object getObject(int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getObject(String) throws java.sql.SQLException;
+    method public Object getObject(String, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(int) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(String) throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(int) throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(String) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(int) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(String) throws java.sql.SQLException;
+    method public short getShort(int) throws java.sql.SQLException;
+    method public short getShort(String) throws java.sql.SQLException;
+    method public String getString(int) throws java.sql.SQLException;
+    method public String getString(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String, java.util.Calendar) throws java.sql.SQLException;
+    method public java.net.URL getURL(int) throws java.sql.SQLException;
+    method public java.net.URL getURL(String) throws java.sql.SQLException;
+    method public void registerOutParameter(int, int) throws java.sql.SQLException;
+    method public void registerOutParameter(int, int, int) throws java.sql.SQLException;
+    method public void registerOutParameter(int, int, String) throws java.sql.SQLException;
+    method public void registerOutParameter(String, int) throws java.sql.SQLException;
+    method public void registerOutParameter(String, int, int) throws java.sql.SQLException;
+    method public void registerOutParameter(String, int, String) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBigDecimal(String, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(String, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBoolean(String, boolean) throws java.sql.SQLException;
+    method public void setByte(String, byte) throws java.sql.SQLException;
+    method public void setBytes(String, byte[]) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(String, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDouble(String, double) throws java.sql.SQLException;
+    method public void setFloat(String, float) throws java.sql.SQLException;
+    method public void setInt(String, int) throws java.sql.SQLException;
+    method public void setLong(String, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(String, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNString(String, String) throws java.sql.SQLException;
+    method public void setNull(String, int) throws java.sql.SQLException;
+    method public void setNull(String, int, String) throws java.sql.SQLException;
+    method public void setObject(String, Object, int, int) throws java.sql.SQLException;
+    method public void setObject(String, Object, int) throws java.sql.SQLException;
+    method public void setObject(String, Object) throws java.sql.SQLException;
+    method public void setRowId(String, java.sql.RowId) throws java.sql.SQLException;
+    method public void setSQLXML(String, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setShort(String, short) throws java.sql.SQLException;
+    method public void setString(String, String) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setURL(String, java.net.URL) throws java.sql.SQLException;
+    method public boolean wasNull() throws java.sql.SQLException;
+  }
+
+  public enum ClientInfoStatus {
+    enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN;
+    enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN_PROPERTY;
+    enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_INVALID;
+    enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_TRUNCATED;
+  }
+
+  public interface Clob {
+    method public void free() throws java.sql.SQLException;
+    method public java.io.InputStream getAsciiStream() throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream() throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(long, long) throws java.sql.SQLException;
+    method public String getSubString(long, int) throws java.sql.SQLException;
+    method public long length() throws java.sql.SQLException;
+    method public long position(String, long) throws java.sql.SQLException;
+    method public long position(java.sql.Clob, long) throws java.sql.SQLException;
+    method public java.io.OutputStream setAsciiStream(long) throws java.sql.SQLException;
+    method public java.io.Writer setCharacterStream(long) throws java.sql.SQLException;
+    method public int setString(long, String) throws java.sql.SQLException;
+    method public int setString(long, String, int, int) throws java.sql.SQLException;
+    method public void truncate(long) throws java.sql.SQLException;
+  }
+
+  public interface Connection extends java.sql.Wrapper java.lang.AutoCloseable {
+    method public void clearWarnings() throws java.sql.SQLException;
+    method public void close() throws java.sql.SQLException;
+    method public void commit() throws java.sql.SQLException;
+    method public java.sql.Array createArrayOf(String, Object[]) throws java.sql.SQLException;
+    method public java.sql.Blob createBlob() throws java.sql.SQLException;
+    method public java.sql.Clob createClob() throws java.sql.SQLException;
+    method public java.sql.NClob createNClob() throws java.sql.SQLException;
+    method public java.sql.SQLXML createSQLXML() throws java.sql.SQLException;
+    method public java.sql.Statement createStatement() throws java.sql.SQLException;
+    method public java.sql.Statement createStatement(int, int) throws java.sql.SQLException;
+    method public java.sql.Statement createStatement(int, int, int) throws java.sql.SQLException;
+    method public java.sql.Struct createStruct(String, Object[]) throws java.sql.SQLException;
+    method public boolean getAutoCommit() throws java.sql.SQLException;
+    method public String getCatalog() throws java.sql.SQLException;
+    method public String getClientInfo(String) throws java.sql.SQLException;
+    method public java.util.Properties getClientInfo() throws java.sql.SQLException;
+    method public int getHoldability() throws java.sql.SQLException;
+    method public java.sql.DatabaseMetaData getMetaData() throws java.sql.SQLException;
+    method public int getTransactionIsolation() throws java.sql.SQLException;
+    method public java.util.Map<java.lang.String,java.lang.Class<?>> getTypeMap() throws java.sql.SQLException;
+    method public java.sql.SQLWarning getWarnings() throws java.sql.SQLException;
+    method public boolean isClosed() throws java.sql.SQLException;
+    method public boolean isReadOnly() throws java.sql.SQLException;
+    method public boolean isValid(int) throws java.sql.SQLException;
+    method public String nativeSQL(String) throws java.sql.SQLException;
+    method public java.sql.CallableStatement prepareCall(String) throws java.sql.SQLException;
+    method public java.sql.CallableStatement prepareCall(String, int, int) throws java.sql.SQLException;
+    method public java.sql.CallableStatement prepareCall(String, int, int, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int, int, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int[]) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, String[]) throws java.sql.SQLException;
+    method public void releaseSavepoint(java.sql.Savepoint) throws java.sql.SQLException;
+    method public void rollback() throws java.sql.SQLException;
+    method public void rollback(java.sql.Savepoint) throws java.sql.SQLException;
+    method public void setAutoCommit(boolean) throws java.sql.SQLException;
+    method public void setCatalog(String) throws java.sql.SQLException;
+    method public void setClientInfo(String, String) throws java.sql.SQLClientInfoException;
+    method public void setClientInfo(java.util.Properties) throws java.sql.SQLClientInfoException;
+    method public void setHoldability(int) throws java.sql.SQLException;
+    method public void setReadOnly(boolean) throws java.sql.SQLException;
+    method public java.sql.Savepoint setSavepoint() throws java.sql.SQLException;
+    method public java.sql.Savepoint setSavepoint(String) throws java.sql.SQLException;
+    method public void setTransactionIsolation(int) throws java.sql.SQLException;
+    method public void setTypeMap(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    field public static final int TRANSACTION_NONE = 0; // 0x0
+    field public static final int TRANSACTION_READ_COMMITTED = 2; // 0x2
+    field public static final int TRANSACTION_READ_UNCOMMITTED = 1; // 0x1
+    field public static final int TRANSACTION_REPEATABLE_READ = 4; // 0x4
+    field public static final int TRANSACTION_SERIALIZABLE = 8; // 0x8
+  }
+
+  public class DataTruncation extends java.sql.SQLWarning {
+    ctor public DataTruncation(int, boolean, boolean, int, int);
+    ctor public DataTruncation(int, boolean, boolean, int, int, Throwable);
+    method public int getDataSize();
+    method public int getIndex();
+    method public boolean getParameter();
+    method public boolean getRead();
+    method public int getTransferSize();
+  }
+
+  public interface DatabaseMetaData extends java.sql.Wrapper {
+    method public boolean allProceduresAreCallable() throws java.sql.SQLException;
+    method public boolean allTablesAreSelectable() throws java.sql.SQLException;
+    method public boolean autoCommitFailureClosesAllResultSets() throws java.sql.SQLException;
+    method public boolean dataDefinitionCausesTransactionCommit() throws java.sql.SQLException;
+    method public boolean dataDefinitionIgnoredInTransactions() throws java.sql.SQLException;
+    method public boolean deletesAreDetected(int) throws java.sql.SQLException;
+    method public boolean doesMaxRowSizeIncludeBlobs() throws java.sql.SQLException;
+    method public java.sql.ResultSet getAttributes(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getBestRowIdentifier(String, String, String, int, boolean) throws java.sql.SQLException;
+    method public String getCatalogSeparator() throws java.sql.SQLException;
+    method public String getCatalogTerm() throws java.sql.SQLException;
+    method public java.sql.ResultSet getCatalogs() throws java.sql.SQLException;
+    method public java.sql.ResultSet getClientInfoProperties() throws java.sql.SQLException;
+    method public java.sql.ResultSet getColumnPrivileges(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getColumns(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public java.sql.ResultSet getCrossReference(String, String, String, String, String, String) throws java.sql.SQLException;
+    method public int getDatabaseMajorVersion() throws java.sql.SQLException;
+    method public int getDatabaseMinorVersion() throws java.sql.SQLException;
+    method public String getDatabaseProductName() throws java.sql.SQLException;
+    method public String getDatabaseProductVersion() throws java.sql.SQLException;
+    method public int getDefaultTransactionIsolation() throws java.sql.SQLException;
+    method public int getDriverMajorVersion();
+    method public int getDriverMinorVersion();
+    method public String getDriverName() throws java.sql.SQLException;
+    method public String getDriverVersion() throws java.sql.SQLException;
+    method public java.sql.ResultSet getExportedKeys(String, String, String) throws java.sql.SQLException;
+    method public String getExtraNameCharacters() throws java.sql.SQLException;
+    method public java.sql.ResultSet getFunctionColumns(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getFunctions(String, String, String) throws java.sql.SQLException;
+    method public String getIdentifierQuoteString() throws java.sql.SQLException;
+    method public java.sql.ResultSet getImportedKeys(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getIndexInfo(String, String, String, boolean, boolean) throws java.sql.SQLException;
+    method public int getJDBCMajorVersion() throws java.sql.SQLException;
+    method public int getJDBCMinorVersion() throws java.sql.SQLException;
+    method public int getMaxBinaryLiteralLength() throws java.sql.SQLException;
+    method public int getMaxCatalogNameLength() throws java.sql.SQLException;
+    method public int getMaxCharLiteralLength() throws java.sql.SQLException;
+    method public int getMaxColumnNameLength() throws java.sql.SQLException;
+    method public int getMaxColumnsInGroupBy() throws java.sql.SQLException;
+    method public int getMaxColumnsInIndex() throws java.sql.SQLException;
+    method public int getMaxColumnsInOrderBy() throws java.sql.SQLException;
+    method public int getMaxColumnsInSelect() throws java.sql.SQLException;
+    method public int getMaxColumnsInTable() throws java.sql.SQLException;
+    method public int getMaxConnections() throws java.sql.SQLException;
+    method public int getMaxCursorNameLength() throws java.sql.SQLException;
+    method public int getMaxIndexLength() throws java.sql.SQLException;
+    method public int getMaxProcedureNameLength() throws java.sql.SQLException;
+    method public int getMaxRowSize() throws java.sql.SQLException;
+    method public int getMaxSchemaNameLength() throws java.sql.SQLException;
+    method public int getMaxStatementLength() throws java.sql.SQLException;
+    method public int getMaxStatements() throws java.sql.SQLException;
+    method public int getMaxTableNameLength() throws java.sql.SQLException;
+    method public int getMaxTablesInSelect() throws java.sql.SQLException;
+    method public int getMaxUserNameLength() throws java.sql.SQLException;
+    method public String getNumericFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getPrimaryKeys(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getProcedureColumns(String, String, String, String) throws java.sql.SQLException;
+    method public String getProcedureTerm() throws java.sql.SQLException;
+    method public java.sql.ResultSet getProcedures(String, String, String) throws java.sql.SQLException;
+    method public int getResultSetHoldability() throws java.sql.SQLException;
+    method public java.sql.RowIdLifetime getRowIdLifetime() throws java.sql.SQLException;
+    method public String getSQLKeywords() throws java.sql.SQLException;
+    method public int getSQLStateType() throws java.sql.SQLException;
+    method public String getSchemaTerm() throws java.sql.SQLException;
+    method public java.sql.ResultSet getSchemas() throws java.sql.SQLException;
+    method public java.sql.ResultSet getSchemas(String, String) throws java.sql.SQLException;
+    method public String getSearchStringEscape() throws java.sql.SQLException;
+    method public String getStringFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getSuperTables(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getSuperTypes(String, String, String) throws java.sql.SQLException;
+    method public String getSystemFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getTablePrivileges(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getTableTypes() throws java.sql.SQLException;
+    method public java.sql.ResultSet getTables(String, String, String, String[]) throws java.sql.SQLException;
+    method public String getTimeDateFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getTypeInfo() throws java.sql.SQLException;
+    method public java.sql.ResultSet getUDTs(String, String, String, int[]) throws java.sql.SQLException;
+    method public String getURL() throws java.sql.SQLException;
+    method public String getUserName() throws java.sql.SQLException;
+    method public java.sql.ResultSet getVersionColumns(String, String, String) throws java.sql.SQLException;
+    method public boolean insertsAreDetected(int) throws java.sql.SQLException;
+    method public boolean isCatalogAtStart() throws java.sql.SQLException;
+    method public boolean isReadOnly() throws java.sql.SQLException;
+    method public boolean locatorsUpdateCopy() throws java.sql.SQLException;
+    method public boolean nullPlusNonNullIsNull() throws java.sql.SQLException;
+    method public boolean nullsAreSortedAtEnd() throws java.sql.SQLException;
+    method public boolean nullsAreSortedAtStart() throws java.sql.SQLException;
+    method public boolean nullsAreSortedHigh() throws java.sql.SQLException;
+    method public boolean nullsAreSortedLow() throws java.sql.SQLException;
+    method public boolean othersDeletesAreVisible(int) throws java.sql.SQLException;
+    method public boolean othersInsertsAreVisible(int) throws java.sql.SQLException;
+    method public boolean othersUpdatesAreVisible(int) throws java.sql.SQLException;
+    method public boolean ownDeletesAreVisible(int) throws java.sql.SQLException;
+    method public boolean ownInsertsAreVisible(int) throws java.sql.SQLException;
+    method public boolean ownUpdatesAreVisible(int) throws java.sql.SQLException;
+    method public boolean storesLowerCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean storesLowerCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean storesMixedCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean storesMixedCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean storesUpperCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean storesUpperCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean supportsANSI92EntryLevelSQL() throws java.sql.SQLException;
+    method public boolean supportsANSI92FullSQL() throws java.sql.SQLException;
+    method public boolean supportsANSI92IntermediateSQL() throws java.sql.SQLException;
+    method public boolean supportsAlterTableWithAddColumn() throws java.sql.SQLException;
+    method public boolean supportsAlterTableWithDropColumn() throws java.sql.SQLException;
+    method public boolean supportsBatchUpdates() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInDataManipulation() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInIndexDefinitions() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInPrivilegeDefinitions() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInProcedureCalls() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInTableDefinitions() throws java.sql.SQLException;
+    method public boolean supportsColumnAliasing() throws java.sql.SQLException;
+    method public boolean supportsConvert() throws java.sql.SQLException;
+    method public boolean supportsConvert(int, int) throws java.sql.SQLException;
+    method public boolean supportsCoreSQLGrammar() throws java.sql.SQLException;
+    method public boolean supportsCorrelatedSubqueries() throws java.sql.SQLException;
+    method public boolean supportsDataDefinitionAndDataManipulationTransactions() throws java.sql.SQLException;
+    method public boolean supportsDataManipulationTransactionsOnly() throws java.sql.SQLException;
+    method public boolean supportsDifferentTableCorrelationNames() throws java.sql.SQLException;
+    method public boolean supportsExpressionsInOrderBy() throws java.sql.SQLException;
+    method public boolean supportsExtendedSQLGrammar() throws java.sql.SQLException;
+    method public boolean supportsFullOuterJoins() throws java.sql.SQLException;
+    method public boolean supportsGetGeneratedKeys() throws java.sql.SQLException;
+    method public boolean supportsGroupBy() throws java.sql.SQLException;
+    method public boolean supportsGroupByBeyondSelect() throws java.sql.SQLException;
+    method public boolean supportsGroupByUnrelated() throws java.sql.SQLException;
+    method public boolean supportsIntegrityEnhancementFacility() throws java.sql.SQLException;
+    method public boolean supportsLikeEscapeClause() throws java.sql.SQLException;
+    method public boolean supportsLimitedOuterJoins() throws java.sql.SQLException;
+    method public boolean supportsMinimumSQLGrammar() throws java.sql.SQLException;
+    method public boolean supportsMixedCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean supportsMixedCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean supportsMultipleOpenResults() throws java.sql.SQLException;
+    method public boolean supportsMultipleResultSets() throws java.sql.SQLException;
+    method public boolean supportsMultipleTransactions() throws java.sql.SQLException;
+    method public boolean supportsNamedParameters() throws java.sql.SQLException;
+    method public boolean supportsNonNullableColumns() throws java.sql.SQLException;
+    method public boolean supportsOpenCursorsAcrossCommit() throws java.sql.SQLException;
+    method public boolean supportsOpenCursorsAcrossRollback() throws java.sql.SQLException;
+    method public boolean supportsOpenStatementsAcrossCommit() throws java.sql.SQLException;
+    method public boolean supportsOpenStatementsAcrossRollback() throws java.sql.SQLException;
+    method public boolean supportsOrderByUnrelated() throws java.sql.SQLException;
+    method public boolean supportsOuterJoins() throws java.sql.SQLException;
+    method public boolean supportsPositionedDelete() throws java.sql.SQLException;
+    method public boolean supportsPositionedUpdate() throws java.sql.SQLException;
+    method public boolean supportsResultSetConcurrency(int, int) throws java.sql.SQLException;
+    method public boolean supportsResultSetHoldability(int) throws java.sql.SQLException;
+    method public boolean supportsResultSetType(int) throws java.sql.SQLException;
+    method public boolean supportsSavepoints() throws java.sql.SQLException;
+    method public boolean supportsSchemasInDataManipulation() throws java.sql.SQLException;
+    method public boolean supportsSchemasInIndexDefinitions() throws java.sql.SQLException;
+    method public boolean supportsSchemasInPrivilegeDefinitions() throws java.sql.SQLException;
+    method public boolean supportsSchemasInProcedureCalls() throws java.sql.SQLException;
+    method public boolean supportsSchemasInTableDefinitions() throws java.sql.SQLException;
+    method public boolean supportsSelectForUpdate() throws java.sql.SQLException;
+    method public boolean supportsStatementPooling() throws java.sql.SQLException;
+    method public boolean supportsStoredFunctionsUsingCallSyntax() throws java.sql.SQLException;
+    method public boolean supportsStoredProcedures() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInComparisons() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInExists() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInIns() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInQuantifieds() throws java.sql.SQLException;
+    method public boolean supportsTableCorrelationNames() throws java.sql.SQLException;
+    method public boolean supportsTransactionIsolationLevel(int) throws java.sql.SQLException;
+    method public boolean supportsTransactions() throws java.sql.SQLException;
+    method public boolean supportsUnion() throws java.sql.SQLException;
+    method public boolean supportsUnionAll() throws java.sql.SQLException;
+    method public boolean updatesAreDetected(int) throws java.sql.SQLException;
+    method public boolean usesLocalFilePerTable() throws java.sql.SQLException;
+    method public boolean usesLocalFiles() throws java.sql.SQLException;
+    field public static final short attributeNoNulls = 0; // 0x0
+    field public static final short attributeNullable = 1; // 0x1
+    field public static final short attributeNullableUnknown = 2; // 0x2
+    field public static final int bestRowNotPseudo = 1; // 0x1
+    field public static final int bestRowPseudo = 2; // 0x2
+    field public static final int bestRowSession = 2; // 0x2
+    field public static final int bestRowTemporary = 0; // 0x0
+    field public static final int bestRowTransaction = 1; // 0x1
+    field public static final int bestRowUnknown = 0; // 0x0
+    field public static final int columnNoNulls = 0; // 0x0
+    field public static final int columnNullable = 1; // 0x1
+    field public static final int columnNullableUnknown = 2; // 0x2
+    field public static final int functionColumnIn = 1; // 0x1
+    field public static final int functionColumnInOut = 2; // 0x2
+    field public static final int functionColumnOut = 3; // 0x3
+    field public static final int functionColumnResult = 5; // 0x5
+    field public static final int functionColumnUnknown = 0; // 0x0
+    field public static final int functionNoNulls = 0; // 0x0
+    field public static final int functionNoTable = 1; // 0x1
+    field public static final int functionNullable = 1; // 0x1
+    field public static final int functionNullableUnknown = 2; // 0x2
+    field public static final int functionResultUnknown = 0; // 0x0
+    field public static final int functionReturn = 4; // 0x4
+    field public static final int functionReturnsTable = 2; // 0x2
+    field public static final int importedKeyCascade = 0; // 0x0
+    field public static final int importedKeyInitiallyDeferred = 5; // 0x5
+    field public static final int importedKeyInitiallyImmediate = 6; // 0x6
+    field public static final int importedKeyNoAction = 3; // 0x3
+    field public static final int importedKeyNotDeferrable = 7; // 0x7
+    field public static final int importedKeyRestrict = 1; // 0x1
+    field public static final int importedKeySetDefault = 4; // 0x4
+    field public static final int importedKeySetNull = 2; // 0x2
+    field public static final int procedureColumnIn = 1; // 0x1
+    field public static final int procedureColumnInOut = 2; // 0x2
+    field public static final int procedureColumnOut = 4; // 0x4
+    field public static final int procedureColumnResult = 3; // 0x3
+    field public static final int procedureColumnReturn = 5; // 0x5
+    field public static final int procedureColumnUnknown = 0; // 0x0
+    field public static final int procedureNoNulls = 0; // 0x0
+    field public static final int procedureNoResult = 1; // 0x1
+    field public static final int procedureNullable = 1; // 0x1
+    field public static final int procedureNullableUnknown = 2; // 0x2
+    field public static final int procedureResultUnknown = 0; // 0x0
+    field public static final int procedureReturnsResult = 2; // 0x2
+    field public static final int sqlStateSQL = 2; // 0x2
+    field public static final int sqlStateSQL99 = 2; // 0x2
+    field public static final int sqlStateXOpen = 1; // 0x1
+    field public static final short tableIndexClustered = 1; // 0x1
+    field public static final short tableIndexHashed = 2; // 0x2
+    field public static final short tableIndexOther = 3; // 0x3
+    field public static final short tableIndexStatistic = 0; // 0x0
+    field public static final int typeNoNulls = 0; // 0x0
+    field public static final int typeNullable = 1; // 0x1
+    field public static final int typeNullableUnknown = 2; // 0x2
+    field public static final int typePredBasic = 2; // 0x2
+    field public static final int typePredChar = 1; // 0x1
+    field public static final int typePredNone = 0; // 0x0
+    field public static final int typeSearchable = 3; // 0x3
+    field public static final int versionColumnNotPseudo = 1; // 0x1
+    field public static final int versionColumnPseudo = 2; // 0x2
+    field public static final int versionColumnUnknown = 0; // 0x0
+  }
+
+  public class Date extends java.util.Date {
+    ctor @Deprecated public Date(int, int, int);
+    ctor public Date(long);
+    method public static java.sql.Date valueOf(String);
+  }
+
+  public interface Driver {
+    method public boolean acceptsURL(String) throws java.sql.SQLException;
+    method public java.sql.Connection connect(String, java.util.Properties) throws java.sql.SQLException;
+    method public int getMajorVersion();
+    method public int getMinorVersion();
+    method public java.sql.DriverPropertyInfo[] getPropertyInfo(String, java.util.Properties) throws java.sql.SQLException;
+    method public boolean jdbcCompliant();
+  }
+
+  public class DriverManager {
+    method public static void deregisterDriver(java.sql.Driver) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(String, java.util.Properties) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(String, String, String) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(String) throws java.sql.SQLException;
+    method public static java.sql.Driver getDriver(String) throws java.sql.SQLException;
+    method public static java.util.Enumeration<java.sql.Driver> getDrivers();
+    method @Deprecated public static java.io.PrintStream getLogStream();
+    method public static java.io.PrintWriter getLogWriter();
+    method public static int getLoginTimeout();
+    method public static void println(String);
+    method public static void registerDriver(java.sql.Driver) throws java.sql.SQLException;
+    method @Deprecated public static void setLogStream(java.io.PrintStream);
+    method public static void setLogWriter(java.io.PrintWriter);
+    method public static void setLoginTimeout(int);
+  }
+
+  public class DriverPropertyInfo {
+    ctor public DriverPropertyInfo(String, String);
+    field public String[] choices;
+    field public String description;
+    field public String name;
+    field public boolean required;
+    field public String value;
+  }
+
+  public interface NClob extends java.sql.Clob {
+  }
+
+  public interface ParameterMetaData extends java.sql.Wrapper {
+    method public String getParameterClassName(int) throws java.sql.SQLException;
+    method public int getParameterCount() throws java.sql.SQLException;
+    method public int getParameterMode(int) throws java.sql.SQLException;
+    method public int getParameterType(int) throws java.sql.SQLException;
+    method public String getParameterTypeName(int) throws java.sql.SQLException;
+    method public int getPrecision(int) throws java.sql.SQLException;
+    method public int getScale(int) throws java.sql.SQLException;
+    method public int isNullable(int) throws java.sql.SQLException;
+    method public boolean isSigned(int) throws java.sql.SQLException;
+    field public static final int parameterModeIn = 1; // 0x1
+    field public static final int parameterModeInOut = 2; // 0x2
+    field public static final int parameterModeOut = 4; // 0x4
+    field public static final int parameterModeUnknown = 0; // 0x0
+    field public static final int parameterNoNulls = 0; // 0x0
+    field public static final int parameterNullable = 1; // 0x1
+    field public static final int parameterNullableUnknown = 2; // 0x2
+  }
+
+  public interface PreparedStatement extends java.sql.Statement {
+    method public void addBatch() throws java.sql.SQLException;
+    method public void clearParameters() throws java.sql.SQLException;
+    method public boolean execute() throws java.sql.SQLException;
+    method public java.sql.ResultSet executeQuery() throws java.sql.SQLException;
+    method public int executeUpdate() throws java.sql.SQLException;
+    method public java.sql.ResultSetMetaData getMetaData() throws java.sql.SQLException;
+    method public java.sql.ParameterMetaData getParameterMetaData() throws java.sql.SQLException;
+    method public void setArray(int, java.sql.Array) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(int, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBoolean(int, boolean) throws java.sql.SQLException;
+    method public void setByte(int, byte) throws java.sql.SQLException;
+    method public void setBytes(int, byte[]) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(int, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDouble(int, double) throws java.sql.SQLException;
+    method public void setFloat(int, float) throws java.sql.SQLException;
+    method public void setInt(int, int) throws java.sql.SQLException;
+    method public void setLong(int, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(int, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNString(int, String) throws java.sql.SQLException;
+    method public void setNull(int, int) throws java.sql.SQLException;
+    method public void setNull(int, int, String) throws java.sql.SQLException;
+    method public void setObject(int, Object, int) throws java.sql.SQLException;
+    method public void setObject(int, Object) throws java.sql.SQLException;
+    method public void setObject(int, Object, int, int) throws java.sql.SQLException;
+    method public void setRef(int, java.sql.Ref) throws java.sql.SQLException;
+    method public void setRowId(int, java.sql.RowId) throws java.sql.SQLException;
+    method public void setSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setShort(int, short) throws java.sql.SQLException;
+    method public void setString(int, String) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setURL(int, java.net.URL) throws java.sql.SQLException;
+    method @Deprecated public void setUnicodeStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+  }
+
+  public interface Ref {
+    method public String getBaseTypeName() throws java.sql.SQLException;
+    method public Object getObject(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getObject() throws java.sql.SQLException;
+    method public void setObject(Object) throws java.sql.SQLException;
+  }
+
+  public interface ResultSet extends java.sql.Wrapper java.lang.AutoCloseable {
+    method public boolean absolute(int) throws java.sql.SQLException;
+    method public void afterLast() throws java.sql.SQLException;
+    method public void beforeFirst() throws java.sql.SQLException;
+    method public void cancelRowUpdates() throws java.sql.SQLException;
+    method public void clearWarnings() throws java.sql.SQLException;
+    method public void close() throws java.sql.SQLException;
+    method public void deleteRow() throws java.sql.SQLException;
+    method public int findColumn(String) throws java.sql.SQLException;
+    method public boolean first() throws java.sql.SQLException;
+    method public java.sql.Array getArray(int) throws java.sql.SQLException;
+    method public java.sql.Array getArray(String) throws java.sql.SQLException;
+    method public java.io.InputStream getAsciiStream(int) throws java.sql.SQLException;
+    method public java.io.InputStream getAsciiStream(String) throws java.sql.SQLException;
+    method @Deprecated public java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
+    method @Deprecated public java.math.BigDecimal getBigDecimal(String, int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(String) throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream(int) throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream(String) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(int) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(String) throws java.sql.SQLException;
+    method public boolean getBoolean(int) throws java.sql.SQLException;
+    method public boolean getBoolean(String) throws java.sql.SQLException;
+    method public byte getByte(int) throws java.sql.SQLException;
+    method public byte getByte(String) throws java.sql.SQLException;
+    method public byte[] getBytes(int) throws java.sql.SQLException;
+    method public byte[] getBytes(String) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(int) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(String) throws java.sql.SQLException;
+    method public int getConcurrency() throws java.sql.SQLException;
+    method public String getCursorName() throws java.sql.SQLException;
+    method public java.sql.Date getDate(int) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String) throws java.sql.SQLException;
+    method public java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String, java.util.Calendar) throws java.sql.SQLException;
+    method public double getDouble(int) throws java.sql.SQLException;
+    method public double getDouble(String) throws java.sql.SQLException;
+    method public int getFetchDirection() throws java.sql.SQLException;
+    method public int getFetchSize() throws java.sql.SQLException;
+    method public float getFloat(int) throws java.sql.SQLException;
+    method public float getFloat(String) throws java.sql.SQLException;
+    method public int getHoldability() throws java.sql.SQLException;
+    method public int getInt(int) throws java.sql.SQLException;
+    method public int getInt(String) throws java.sql.SQLException;
+    method public long getLong(int) throws java.sql.SQLException;
+    method public long getLong(String) throws java.sql.SQLException;
+    method public java.sql.ResultSetMetaData getMetaData() throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(int) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(String) throws java.sql.SQLException;
+    method public String getNString(int) throws java.sql.SQLException;
+    method public String getNString(String) throws java.sql.SQLException;
+    method public Object getObject(int) throws java.sql.SQLException;
+    method public Object getObject(String) throws java.sql.SQLException;
+    method public Object getObject(int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getObject(String, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(int) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(String) throws java.sql.SQLException;
+    method public int getRow() throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(int) throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(String) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(int) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(String) throws java.sql.SQLException;
+    method public short getShort(int) throws java.sql.SQLException;
+    method public short getShort(String) throws java.sql.SQLException;
+    method public java.sql.Statement getStatement() throws java.sql.SQLException;
+    method public String getString(int) throws java.sql.SQLException;
+    method public String getString(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String, java.util.Calendar) throws java.sql.SQLException;
+    method public int getType() throws java.sql.SQLException;
+    method public java.net.URL getURL(int) throws java.sql.SQLException;
+    method public java.net.URL getURL(String) throws java.sql.SQLException;
+    method @Deprecated public java.io.InputStream getUnicodeStream(int) throws java.sql.SQLException;
+    method @Deprecated public java.io.InputStream getUnicodeStream(String) throws java.sql.SQLException;
+    method public java.sql.SQLWarning getWarnings() throws java.sql.SQLException;
+    method public void insertRow() throws java.sql.SQLException;
+    method public boolean isAfterLast() throws java.sql.SQLException;
+    method public boolean isBeforeFirst() throws java.sql.SQLException;
+    method public boolean isClosed() throws java.sql.SQLException;
+    method public boolean isFirst() throws java.sql.SQLException;
+    method public boolean isLast() throws java.sql.SQLException;
+    method public boolean last() throws java.sql.SQLException;
+    method public void moveToCurrentRow() throws java.sql.SQLException;
+    method public void moveToInsertRow() throws java.sql.SQLException;
+    method public boolean next() throws java.sql.SQLException;
+    method public boolean previous() throws java.sql.SQLException;
+    method public void refreshRow() throws java.sql.SQLException;
+    method public boolean relative(int) throws java.sql.SQLException;
+    method public boolean rowDeleted() throws java.sql.SQLException;
+    method public boolean rowInserted() throws java.sql.SQLException;
+    method public boolean rowUpdated() throws java.sql.SQLException;
+    method public void setFetchDirection(int) throws java.sql.SQLException;
+    method public void setFetchSize(int) throws java.sql.SQLException;
+    method public void updateArray(int, java.sql.Array) throws java.sql.SQLException;
+    method public void updateArray(String, java.sql.Array) throws java.sql.SQLException;
+    method public void updateAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateAsciiStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateAsciiStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateAsciiStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateAsciiStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void updateBigDecimal(String, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void updateBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateBinaryStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateBinaryStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBinaryStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBinaryStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBlob(int, java.sql.Blob) throws java.sql.SQLException;
+    method public void updateBlob(String, java.sql.Blob) throws java.sql.SQLException;
+    method public void updateBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBlob(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBlob(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBlob(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBoolean(int, boolean) throws java.sql.SQLException;
+    method public void updateBoolean(String, boolean) throws java.sql.SQLException;
+    method public void updateByte(int, byte) throws java.sql.SQLException;
+    method public void updateByte(String, byte) throws java.sql.SQLException;
+    method public void updateBytes(int, byte[]) throws java.sql.SQLException;
+    method public void updateBytes(String, byte[]) throws java.sql.SQLException;
+    method public void updateCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public void updateCharacterStream(String, java.io.Reader, int) throws java.sql.SQLException;
+    method public void updateCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateClob(int, java.sql.Clob) throws java.sql.SQLException;
+    method public void updateClob(String, java.sql.Clob) throws java.sql.SQLException;
+    method public void updateClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateDate(int, java.sql.Date) throws java.sql.SQLException;
+    method public void updateDate(String, java.sql.Date) throws java.sql.SQLException;
+    method public void updateDouble(int, double) throws java.sql.SQLException;
+    method public void updateDouble(String, double) throws java.sql.SQLException;
+    method public void updateFloat(int, float) throws java.sql.SQLException;
+    method public void updateFloat(String, float) throws java.sql.SQLException;
+    method public void updateInt(int, int) throws java.sql.SQLException;
+    method public void updateInt(String, int) throws java.sql.SQLException;
+    method public void updateLong(int, long) throws java.sql.SQLException;
+    method public void updateLong(String, long) throws java.sql.SQLException;
+    method public void updateNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNClob(int, java.sql.NClob) throws java.sql.SQLException;
+    method public void updateNClob(String, java.sql.NClob) throws java.sql.SQLException;
+    method public void updateNClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNString(int, String) throws java.sql.SQLException;
+    method public void updateNString(String, String) throws java.sql.SQLException;
+    method public void updateNull(int) throws java.sql.SQLException;
+    method public void updateNull(String) throws java.sql.SQLException;
+    method public void updateObject(int, Object, int) throws java.sql.SQLException;
+    method public void updateObject(int, Object) throws java.sql.SQLException;
+    method public void updateObject(String, Object, int) throws java.sql.SQLException;
+    method public void updateObject(String, Object) throws java.sql.SQLException;
+    method public void updateRef(int, java.sql.Ref) throws java.sql.SQLException;
+    method public void updateRef(String, java.sql.Ref) throws java.sql.SQLException;
+    method public void updateRow() throws java.sql.SQLException;
+    method public void updateRowId(int, java.sql.RowId) throws java.sql.SQLException;
+    method public void updateRowId(String, java.sql.RowId) throws java.sql.SQLException;
+    method public void updateSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void updateSQLXML(String, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void updateShort(int, short) throws java.sql.SQLException;
+    method public void updateShort(String, short) throws java.sql.SQLException;
+    method public void updateString(int, String) throws java.sql.SQLException;
+    method public void updateString(String, String) throws java.sql.SQLException;
+    method public void updateTime(int, java.sql.Time) throws java.sql.SQLException;
+    method public void updateTime(String, java.sql.Time) throws java.sql.SQLException;
+    method public void updateTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void updateTimestamp(String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public boolean wasNull() throws java.sql.SQLException;
+    field public static final int CLOSE_CURSORS_AT_COMMIT = 2; // 0x2
+    field public static final int CONCUR_READ_ONLY = 1007; // 0x3ef
+    field public static final int CONCUR_UPDATABLE = 1008; // 0x3f0
+    field public static final int FETCH_FORWARD = 1000; // 0x3e8
+    field public static final int FETCH_REVERSE = 1001; // 0x3e9
+    field public static final int FETCH_UNKNOWN = 1002; // 0x3ea
+    field public static final int HOLD_CURSORS_OVER_COMMIT = 1; // 0x1
+    field public static final int TYPE_FORWARD_ONLY = 1003; // 0x3eb
+    field public static final int TYPE_SCROLL_INSENSITIVE = 1004; // 0x3ec
+    field public static final int TYPE_SCROLL_SENSITIVE = 1005; // 0x3ed
+  }
+
+  public interface ResultSetMetaData extends java.sql.Wrapper {
+    method public String getCatalogName(int) throws java.sql.SQLException;
+    method public String getColumnClassName(int) throws java.sql.SQLException;
+    method public int getColumnCount() throws java.sql.SQLException;
+    method public int getColumnDisplaySize(int) throws java.sql.SQLException;
+    method public String getColumnLabel(int) throws java.sql.SQLException;
+    method public String getColumnName(int) throws java.sql.SQLException;
+    method public int getColumnType(int) throws java.sql.SQLException;
+    method public String getColumnTypeName(int) throws java.sql.SQLException;
+    method public int getPrecision(int) throws java.sql.SQLException;
+    method public int getScale(int) throws java.sql.SQLException;
+    method public String getSchemaName(int) throws java.sql.SQLException;
+    method public String getTableName(int) throws java.sql.SQLException;
+    method public boolean isAutoIncrement(int) throws java.sql.SQLException;
+    method public boolean isCaseSensitive(int) throws java.sql.SQLException;
+    method public boolean isCurrency(int) throws java.sql.SQLException;
+    method public boolean isDefinitelyWritable(int) throws java.sql.SQLException;
+    method public int isNullable(int) throws java.sql.SQLException;
+    method public boolean isReadOnly(int) throws java.sql.SQLException;
+    method public boolean isSearchable(int) throws java.sql.SQLException;
+    method public boolean isSigned(int) throws java.sql.SQLException;
+    method public boolean isWritable(int) throws java.sql.SQLException;
+    field public static final int columnNoNulls = 0; // 0x0
+    field public static final int columnNullable = 1; // 0x1
+    field public static final int columnNullableUnknown = 2; // 0x2
+  }
+
+  public interface RowId {
+    method public boolean equals(Object);
+    method public byte[] getBytes();
+    method public int hashCode();
+    method public String toString();
+  }
+
+  public enum RowIdLifetime {
+    enum_constant public static final java.sql.RowIdLifetime ROWID_UNSUPPORTED;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_FOREVER;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_OTHER;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_SESSION;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_TRANSACTION;
+  }
+
+  public class SQLClientInfoException extends java.sql.SQLException {
+    ctor public SQLClientInfoException();
+    ctor public SQLClientInfoException(java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    ctor public SQLClientInfoException(String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    ctor public SQLClientInfoException(String, String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(String, String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    ctor public SQLClientInfoException(String, String, int, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(String, String, int, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    method public java.util.Map<java.lang.String,java.sql.ClientInfoStatus> getFailedProperties();
+  }
+
+  public interface SQLData {
+    method public String getSQLTypeName() throws java.sql.SQLException;
+    method public void readSQL(java.sql.SQLInput, String) throws java.sql.SQLException;
+    method public void writeSQL(java.sql.SQLOutput) throws java.sql.SQLException;
+  }
+
+  public class SQLDataException extends java.sql.SQLNonTransientException {
+    ctor public SQLDataException();
+    ctor public SQLDataException(String);
+    ctor public SQLDataException(String, String);
+    ctor public SQLDataException(String, String, int);
+    ctor public SQLDataException(Throwable);
+    ctor public SQLDataException(String, Throwable);
+    ctor public SQLDataException(String, String, Throwable);
+    ctor public SQLDataException(String, String, int, Throwable);
+  }
+
+  public class SQLException extends java.lang.Exception implements java.lang.Iterable<java.lang.Throwable> {
+    ctor public SQLException(String, String, int);
+    ctor public SQLException(String, String);
+    ctor public SQLException(String);
+    ctor public SQLException();
+    ctor public SQLException(Throwable);
+    ctor public SQLException(String, Throwable);
+    ctor public SQLException(String, String, Throwable);
+    ctor public SQLException(String, String, int, Throwable);
+    method public int getErrorCode();
+    method public java.sql.SQLException getNextException();
+    method public String getSQLState();
+    method public java.util.Iterator<java.lang.Throwable> iterator();
+    method public void setNextException(java.sql.SQLException);
+  }
+
+  public class SQLFeatureNotSupportedException extends java.sql.SQLNonTransientException {
+    ctor public SQLFeatureNotSupportedException();
+    ctor public SQLFeatureNotSupportedException(String);
+    ctor public SQLFeatureNotSupportedException(String, String);
+    ctor public SQLFeatureNotSupportedException(String, String, int);
+    ctor public SQLFeatureNotSupportedException(Throwable);
+    ctor public SQLFeatureNotSupportedException(String, Throwable);
+    ctor public SQLFeatureNotSupportedException(String, String, Throwable);
+    ctor public SQLFeatureNotSupportedException(String, String, int, Throwable);
+  }
+
+  public interface SQLInput {
+    method public java.sql.Array readArray() throws java.sql.SQLException;
+    method public java.io.InputStream readAsciiStream() throws java.sql.SQLException;
+    method public java.math.BigDecimal readBigDecimal() throws java.sql.SQLException;
+    method public java.io.InputStream readBinaryStream() throws java.sql.SQLException;
+    method public java.sql.Blob readBlob() throws java.sql.SQLException;
+    method public boolean readBoolean() throws java.sql.SQLException;
+    method public byte readByte() throws java.sql.SQLException;
+    method public byte[] readBytes() throws java.sql.SQLException;
+    method public java.io.Reader readCharacterStream() throws java.sql.SQLException;
+    method public java.sql.Clob readClob() throws java.sql.SQLException;
+    method public java.sql.Date readDate() throws java.sql.SQLException;
+    method public double readDouble() throws java.sql.SQLException;
+    method public float readFloat() throws java.sql.SQLException;
+    method public int readInt() throws java.sql.SQLException;
+    method public long readLong() throws java.sql.SQLException;
+    method public java.sql.NClob readNClob() throws java.sql.SQLException;
+    method public String readNString() throws java.sql.SQLException;
+    method public Object readObject() throws java.sql.SQLException;
+    method public java.sql.Ref readRef() throws java.sql.SQLException;
+    method public java.sql.RowId readRowId() throws java.sql.SQLException;
+    method public java.sql.SQLXML readSQLXML() throws java.sql.SQLException;
+    method public short readShort() throws java.sql.SQLException;
+    method public String readString() throws java.sql.SQLException;
+    method public java.sql.Time readTime() throws java.sql.SQLException;
+    method public java.sql.Timestamp readTimestamp() throws java.sql.SQLException;
+    method public java.net.URL readURL() throws java.sql.SQLException;
+    method public boolean wasNull() throws java.sql.SQLException;
+  }
+
+  public class SQLIntegrityConstraintViolationException extends java.sql.SQLNonTransientException {
+    ctor public SQLIntegrityConstraintViolationException();
+    ctor public SQLIntegrityConstraintViolationException(String);
+    ctor public SQLIntegrityConstraintViolationException(String, String);
+    ctor public SQLIntegrityConstraintViolationException(String, String, int);
+    ctor public SQLIntegrityConstraintViolationException(Throwable);
+    ctor public SQLIntegrityConstraintViolationException(String, Throwable);
+    ctor public SQLIntegrityConstraintViolationException(String, String, Throwable);
+    ctor public SQLIntegrityConstraintViolationException(String, String, int, Throwable);
+  }
+
+  public class SQLInvalidAuthorizationSpecException extends java.sql.SQLNonTransientException {
+    ctor public SQLInvalidAuthorizationSpecException();
+    ctor public SQLInvalidAuthorizationSpecException(String);
+    ctor public SQLInvalidAuthorizationSpecException(String, String);
+    ctor public SQLInvalidAuthorizationSpecException(String, String, int);
+    ctor public SQLInvalidAuthorizationSpecException(Throwable);
+    ctor public SQLInvalidAuthorizationSpecException(String, Throwable);
+    ctor public SQLInvalidAuthorizationSpecException(String, String, Throwable);
+    ctor public SQLInvalidAuthorizationSpecException(String, String, int, Throwable);
+  }
+
+  public class SQLNonTransientConnectionException extends java.sql.SQLNonTransientException {
+    ctor public SQLNonTransientConnectionException();
+    ctor public SQLNonTransientConnectionException(String);
+    ctor public SQLNonTransientConnectionException(String, String);
+    ctor public SQLNonTransientConnectionException(String, String, int);
+    ctor public SQLNonTransientConnectionException(Throwable);
+    ctor public SQLNonTransientConnectionException(String, Throwable);
+    ctor public SQLNonTransientConnectionException(String, String, Throwable);
+    ctor public SQLNonTransientConnectionException(String, String, int, Throwable);
+  }
+
+  public class SQLNonTransientException extends java.sql.SQLException {
+    ctor public SQLNonTransientException();
+    ctor public SQLNonTransientException(String);
+    ctor public SQLNonTransientException(String, String);
+    ctor public SQLNonTransientException(String, String, int);
+    ctor public SQLNonTransientException(Throwable);
+    ctor public SQLNonTransientException(String, Throwable);
+    ctor public SQLNonTransientException(String, String, Throwable);
+    ctor public SQLNonTransientException(String, String, int, Throwable);
+  }
+
+  public interface SQLOutput {
+    method public void writeArray(java.sql.Array) throws java.sql.SQLException;
+    method public void writeAsciiStream(java.io.InputStream) throws java.sql.SQLException;
+    method public void writeBigDecimal(java.math.BigDecimal) throws java.sql.SQLException;
+    method public void writeBinaryStream(java.io.InputStream) throws java.sql.SQLException;
+    method public void writeBlob(java.sql.Blob) throws java.sql.SQLException;
+    method public void writeBoolean(boolean) throws java.sql.SQLException;
+    method public void writeByte(byte) throws java.sql.SQLException;
+    method public void writeBytes(byte[]) throws java.sql.SQLException;
+    method public void writeCharacterStream(java.io.Reader) throws java.sql.SQLException;
+    method public void writeClob(java.sql.Clob) throws java.sql.SQLException;
+    method public void writeDate(java.sql.Date) throws java.sql.SQLException;
+    method public void writeDouble(double) throws java.sql.SQLException;
+    method public void writeFloat(float) throws java.sql.SQLException;
+    method public void writeInt(int) throws java.sql.SQLException;
+    method public void writeLong(long) throws java.sql.SQLException;
+    method public void writeNClob(java.sql.NClob) throws java.sql.SQLException;
+    method public void writeNString(String) throws java.sql.SQLException;
+    method public void writeObject(java.sql.SQLData) throws java.sql.SQLException;
+    method public void writeRef(java.sql.Ref) throws java.sql.SQLException;
+    method public void writeRowId(java.sql.RowId) throws java.sql.SQLException;
+    method public void writeSQLXML(java.sql.SQLXML) throws java.sql.SQLException;
+    method public void writeShort(short) throws java.sql.SQLException;
+    method public void writeString(String) throws java.sql.SQLException;
+    method public void writeStruct(java.sql.Struct) throws java.sql.SQLException;
+    method public void writeTime(java.sql.Time) throws java.sql.SQLException;
+    method public void writeTimestamp(java.sql.Timestamp) throws java.sql.SQLException;
+    method public void writeURL(java.net.URL) throws java.sql.SQLException;
+  }
+
+  public final class SQLPermission extends java.security.BasicPermission {
+    ctor public SQLPermission(String);
+    ctor public SQLPermission(String, String);
+  }
+
+  public class SQLRecoverableException extends java.sql.SQLException {
+    ctor public SQLRecoverableException();
+    ctor public SQLRecoverableException(String);
+    ctor public SQLRecoverableException(String, String);
+    ctor public SQLRecoverableException(String, String, int);
+    ctor public SQLRecoverableException(Throwable);
+    ctor public SQLRecoverableException(String, Throwable);
+    ctor public SQLRecoverableException(String, String, Throwable);
+    ctor public SQLRecoverableException(String, String, int, Throwable);
+  }
+
+  public class SQLSyntaxErrorException extends java.sql.SQLNonTransientException {
+    ctor public SQLSyntaxErrorException();
+    ctor public SQLSyntaxErrorException(String);
+    ctor public SQLSyntaxErrorException(String, String);
+    ctor public SQLSyntaxErrorException(String, String, int);
+    ctor public SQLSyntaxErrorException(Throwable);
+    ctor public SQLSyntaxErrorException(String, Throwable);
+    ctor public SQLSyntaxErrorException(String, String, Throwable);
+    ctor public SQLSyntaxErrorException(String, String, int, Throwable);
+  }
+
+  public class SQLTimeoutException extends java.sql.SQLTransientException {
+    ctor public SQLTimeoutException();
+    ctor public SQLTimeoutException(String);
+    ctor public SQLTimeoutException(String, String);
+    ctor public SQLTimeoutException(String, String, int);
+    ctor public SQLTimeoutException(Throwable);
+    ctor public SQLTimeoutException(String, Throwable);
+    ctor public SQLTimeoutException(String, String, Throwable);
+    ctor public SQLTimeoutException(String, String, int, Throwable);
+  }
+
+  public class SQLTransactionRollbackException extends java.sql.SQLTransientException {
+    ctor public SQLTransactionRollbackException();
+    ctor public SQLTransactionRollbackException(String);
+    ctor public SQLTransactionRollbackException(String, String);
+    ctor public SQLTransactionRollbackException(String, String, int);
+    ctor public SQLTransactionRollbackException(Throwable);
+    ctor public SQLTransactionRollbackException(String, Throwable);
+    ctor public SQLTransactionRollbackException(String, String, Throwable);
+    ctor public SQLTransactionRollbackException(String, String, int, Throwable);
+  }
+
+  public class SQLTransientConnectionException extends java.sql.SQLTransientException {
+    ctor public SQLTransientConnectionException();
+    ctor public SQLTransientConnectionException(String);
+    ctor public SQLTransientConnectionException(String, String);
+    ctor public SQLTransientConnectionException(String, String, int);
+    ctor public SQLTransientConnectionException(Throwable);
+    ctor public SQLTransientConnectionException(String, Throwable);
+    ctor public SQLTransientConnectionException(String, String, Throwable);
+    ctor public SQLTransientConnectionException(String, String, int, Throwable);
+  }
+
+  public class SQLTransientException extends java.sql.SQLException {
+    ctor public SQLTransientException();
+    ctor public SQLTransientException(String);
+    ctor public SQLTransientException(String, String);
+    ctor public SQLTransientException(String, String, int);
+    ctor public SQLTransientException(Throwable);
+    ctor public SQLTransientException(String, Throwable);
+    ctor public SQLTransientException(String, String, Throwable);
+    ctor public SQLTransientException(String, String, int, Throwable);
+  }
+
+  public class SQLWarning extends java.sql.SQLException {
+    ctor public SQLWarning(String, String, int);
+    ctor public SQLWarning(String, String);
+    ctor public SQLWarning(String);
+    ctor public SQLWarning();
+    ctor public SQLWarning(Throwable);
+    ctor public SQLWarning(String, Throwable);
+    ctor public SQLWarning(String, String, Throwable);
+    ctor public SQLWarning(String, String, int, Throwable);
+    method public java.sql.SQLWarning getNextWarning();
+    method public void setNextWarning(java.sql.SQLWarning);
+  }
+
+  public interface SQLXML {
+    method public void free() throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream() throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream() throws java.sql.SQLException;
+    method public <T extends javax.xml.transform.Source> T getSource(Class<T>) throws java.sql.SQLException;
+    method public String getString() throws java.sql.SQLException;
+    method public java.io.OutputStream setBinaryStream() throws java.sql.SQLException;
+    method public java.io.Writer setCharacterStream() throws java.sql.SQLException;
+    method public <T extends javax.xml.transform.Result> T setResult(Class<T>) throws java.sql.SQLException;
+    method public void setString(String) throws java.sql.SQLException;
+  }
+
+  public interface Savepoint {
+    method public int getSavepointId() throws java.sql.SQLException;
+    method public String getSavepointName() throws java.sql.SQLException;
+  }
+
+  public interface Statement extends java.sql.Wrapper java.lang.AutoCloseable {
+    method public void addBatch(String) throws java.sql.SQLException;
+    method public void cancel() throws java.sql.SQLException;
+    method public void clearBatch() throws java.sql.SQLException;
+    method public void clearWarnings() throws java.sql.SQLException;
+    method public void close() throws java.sql.SQLException;
+    method public boolean execute(String) throws java.sql.SQLException;
+    method public boolean execute(String, int) throws java.sql.SQLException;
+    method public boolean execute(String, int[]) throws java.sql.SQLException;
+    method public boolean execute(String, String[]) throws java.sql.SQLException;
+    method public int[] executeBatch() throws java.sql.SQLException;
+    method public java.sql.ResultSet executeQuery(String) throws java.sql.SQLException;
+    method public int executeUpdate(String) throws java.sql.SQLException;
+    method public int executeUpdate(String, int) throws java.sql.SQLException;
+    method public int executeUpdate(String, int[]) throws java.sql.SQLException;
+    method public int executeUpdate(String, String[]) throws java.sql.SQLException;
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public int getFetchDirection() throws java.sql.SQLException;
+    method public int getFetchSize() throws java.sql.SQLException;
+    method public java.sql.ResultSet getGeneratedKeys() throws java.sql.SQLException;
+    method public int getMaxFieldSize() throws java.sql.SQLException;
+    method public int getMaxRows() throws java.sql.SQLException;
+    method public boolean getMoreResults() throws java.sql.SQLException;
+    method public boolean getMoreResults(int) throws java.sql.SQLException;
+    method public int getQueryTimeout() throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet() throws java.sql.SQLException;
+    method public int getResultSetConcurrency() throws java.sql.SQLException;
+    method public int getResultSetHoldability() throws java.sql.SQLException;
+    method public int getResultSetType() throws java.sql.SQLException;
+    method public int getUpdateCount() throws java.sql.SQLException;
+    method public java.sql.SQLWarning getWarnings() throws java.sql.SQLException;
+    method public boolean isClosed() throws java.sql.SQLException;
+    method public boolean isPoolable() throws java.sql.SQLException;
+    method public void setCursorName(String) throws java.sql.SQLException;
+    method public void setEscapeProcessing(boolean) throws java.sql.SQLException;
+    method public void setFetchDirection(int) throws java.sql.SQLException;
+    method public void setFetchSize(int) throws java.sql.SQLException;
+    method public void setMaxFieldSize(int) throws java.sql.SQLException;
+    method public void setMaxRows(int) throws java.sql.SQLException;
+    method public void setPoolable(boolean) throws java.sql.SQLException;
+    method public void setQueryTimeout(int) throws java.sql.SQLException;
+    field public static final int CLOSE_ALL_RESULTS = 3; // 0x3
+    field public static final int CLOSE_CURRENT_RESULT = 1; // 0x1
+    field public static final int EXECUTE_FAILED = -3; // 0xfffffffd
+    field public static final int KEEP_CURRENT_RESULT = 2; // 0x2
+    field public static final int NO_GENERATED_KEYS = 2; // 0x2
+    field public static final int RETURN_GENERATED_KEYS = 1; // 0x1
+    field public static final int SUCCESS_NO_INFO = -2; // 0xfffffffe
+  }
+
+  public interface Struct {
+    method public Object[] getAttributes() throws java.sql.SQLException;
+    method public Object[] getAttributes(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public String getSQLTypeName() throws java.sql.SQLException;
+  }
+
+  public class Time extends java.util.Date {
+    ctor @Deprecated public Time(int, int, int);
+    ctor public Time(long);
+    method public static java.sql.Time valueOf(String);
+  }
+
+  public class Timestamp extends java.util.Date {
+    ctor @Deprecated public Timestamp(int, int, int, int, int, int, int);
+    ctor public Timestamp(long);
+    method public boolean after(java.sql.Timestamp);
+    method public boolean before(java.sql.Timestamp);
+    method public int compareTo(java.sql.Timestamp);
+    method public boolean equals(java.sql.Timestamp);
+    method public int getNanos();
+    method public void setNanos(int);
+    method public static java.sql.Timestamp valueOf(String);
+  }
+
+  public class Types {
+    field public static final int ARRAY = 2003; // 0x7d3
+    field public static final int BIGINT = -5; // 0xfffffffb
+    field public static final int BINARY = -2; // 0xfffffffe
+    field public static final int BIT = -7; // 0xfffffff9
+    field public static final int BLOB = 2004; // 0x7d4
+    field public static final int BOOLEAN = 16; // 0x10
+    field public static final int CHAR = 1; // 0x1
+    field public static final int CLOB = 2005; // 0x7d5
+    field public static final int DATALINK = 70; // 0x46
+    field public static final int DATE = 91; // 0x5b
+    field public static final int DECIMAL = 3; // 0x3
+    field public static final int DISTINCT = 2001; // 0x7d1
+    field public static final int DOUBLE = 8; // 0x8
+    field public static final int FLOAT = 6; // 0x6
+    field public static final int INTEGER = 4; // 0x4
+    field public static final int JAVA_OBJECT = 2000; // 0x7d0
+    field public static final int LONGNVARCHAR = -16; // 0xfffffff0
+    field public static final int LONGVARBINARY = -4; // 0xfffffffc
+    field public static final int LONGVARCHAR = -1; // 0xffffffff
+    field public static final int NCHAR = -15; // 0xfffffff1
+    field public static final int NCLOB = 2011; // 0x7db
+    field public static final int NULL = 0; // 0x0
+    field public static final int NUMERIC = 2; // 0x2
+    field public static final int NVARCHAR = -9; // 0xfffffff7
+    field public static final int OTHER = 1111; // 0x457
+    field public static final int REAL = 7; // 0x7
+    field public static final int REF = 2006; // 0x7d6
+    field public static final int ROWID = -8; // 0xfffffff8
+    field public static final int SMALLINT = 5; // 0x5
+    field public static final int SQLXML = 2009; // 0x7d9
+    field public static final int STRUCT = 2002; // 0x7d2
+    field public static final int TIME = 92; // 0x5c
+    field public static final int TIMESTAMP = 93; // 0x5d
+    field public static final int TINYINT = -6; // 0xfffffffa
+    field public static final int VARBINARY = -3; // 0xfffffffd
+    field public static final int VARCHAR = 12; // 0xc
+  }
+
+  public interface Wrapper {
+    method public boolean isWrapperFor(Class<?>) throws java.sql.SQLException;
+    method public <T> T unwrap(Class<T>) throws java.sql.SQLException;
+  }
+
+}
+
+package java.text {
+
+  public class Annotation {
+    ctor public Annotation(Object);
+    method public Object getValue();
+  }
+
+  public interface AttributedCharacterIterator extends java.text.CharacterIterator {
+    method public java.util.Set<java.text.AttributedCharacterIterator.Attribute> getAllAttributeKeys();
+    method public Object getAttribute(java.text.AttributedCharacterIterator.Attribute);
+    method public java.util.Map<java.text.AttributedCharacterIterator.Attribute,java.lang.Object> getAttributes();
+    method public int getRunLimit();
+    method public int getRunLimit(java.text.AttributedCharacterIterator.Attribute);
+    method public int getRunLimit(java.util.Set<? extends java.text.AttributedCharacterIterator.Attribute>);
+    method public int getRunStart();
+    method public int getRunStart(java.text.AttributedCharacterIterator.Attribute);
+    method public int getRunStart(java.util.Set<? extends java.text.AttributedCharacterIterator.Attribute>);
+  }
+
+  public static class AttributedCharacterIterator.Attribute implements java.io.Serializable {
+    ctor protected AttributedCharacterIterator.Attribute(String);
+    method public final boolean equals(Object);
+    method protected String getName();
+    method public final int hashCode();
+    method protected Object readResolve() throws java.io.InvalidObjectException;
+    field public static final java.text.AttributedCharacterIterator.Attribute INPUT_METHOD_SEGMENT;
+    field public static final java.text.AttributedCharacterIterator.Attribute LANGUAGE;
+    field public static final java.text.AttributedCharacterIterator.Attribute READING;
+  }
+
+  public class AttributedString {
+    ctor public AttributedString(String);
+    ctor public AttributedString(String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute,?>);
+    ctor public AttributedString(java.text.AttributedCharacterIterator);
+    ctor public AttributedString(java.text.AttributedCharacterIterator, int, int);
+    ctor public AttributedString(java.text.AttributedCharacterIterator, int, int, java.text.AttributedCharacterIterator.Attribute[]);
+    method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, Object);
+    method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, Object, int, int);
+    method public void addAttributes(java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute,?>, int, int);
+    method public java.text.AttributedCharacterIterator getIterator();
+    method public java.text.AttributedCharacterIterator getIterator(java.text.AttributedCharacterIterator.Attribute[]);
+    method public java.text.AttributedCharacterIterator getIterator(java.text.AttributedCharacterIterator.Attribute[], int, int);
+  }
+
+  public final class Bidi {
+    ctor public Bidi(String, int);
+    ctor public Bidi(java.text.AttributedCharacterIterator);
+    ctor public Bidi(char[], int, byte[], int, int, int);
+    method public boolean baseIsLeftToRight();
+    method public java.text.Bidi createLineBidi(int, int);
+    method public int getBaseLevel();
+    method public int getLength();
+    method public int getLevelAt(int);
+    method public int getRunCount();
+    method public int getRunLevel(int);
+    method public int getRunLimit(int);
+    method public int getRunStart(int);
+    method public boolean isLeftToRight();
+    method public boolean isMixed();
+    method public boolean isRightToLeft();
+    method public static void reorderVisually(byte[], int, Object[], int, int);
+    method public static boolean requiresBidi(char[], int, int);
+    field public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = -2; // 0xfffffffe
+    field public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = -1; // 0xffffffff
+    field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+  }
+
+  public abstract class BreakIterator implements java.lang.Cloneable {
+    ctor protected BreakIterator();
+    method public Object clone();
+    method public abstract int current();
+    method public abstract int first();
+    method public abstract int following(int);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static java.text.BreakIterator getCharacterInstance();
+    method public static java.text.BreakIterator getCharacterInstance(java.util.Locale);
+    method public static java.text.BreakIterator getLineInstance();
+    method public static java.text.BreakIterator getLineInstance(java.util.Locale);
+    method public static java.text.BreakIterator getSentenceInstance();
+    method public static java.text.BreakIterator getSentenceInstance(java.util.Locale);
+    method public abstract java.text.CharacterIterator getText();
+    method public static java.text.BreakIterator getWordInstance();
+    method public static java.text.BreakIterator getWordInstance(java.util.Locale);
+    method public boolean isBoundary(int);
+    method public abstract int last();
+    method public abstract int next(int);
+    method public abstract int next();
+    method public int preceding(int);
+    method public abstract int previous();
+    method public void setText(String);
+    method public abstract void setText(java.text.CharacterIterator);
+    field public static final int DONE = -1; // 0xffffffff
+  }
+
+  public interface CharacterIterator extends java.lang.Cloneable {
+    method public Object clone();
+    method public char current();
+    method public char first();
+    method public int getBeginIndex();
+    method public int getEndIndex();
+    method public int getIndex();
+    method public char last();
+    method public char next();
+    method public char previous();
+    method public char setIndex(int);
+    field public static final char DONE = 65535; // 0xffff '\uffff'
+  }
+
+  public class ChoiceFormat extends java.text.NumberFormat {
+    ctor public ChoiceFormat(String);
+    ctor public ChoiceFormat(double[], String[]);
+    method public void applyPattern(String);
+    method public StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public Object[] getFormats();
+    method public double[] getLimits();
+    method public static final double nextDouble(double);
+    method public static double nextDouble(double, boolean);
+    method public Number parse(String, java.text.ParsePosition);
+    method public static final double previousDouble(double);
+    method public void setChoices(double[], String[]);
+    method public String toPattern();
+  }
+
+  public final class CollationElementIterator {
+    method public int getMaxExpansion(int);
+    method public int getOffset();
+    method public int next();
+    method public int previous();
+    method public static int primaryOrder(int);
+    method public void reset();
+    method public static short secondaryOrder(int);
+    method public void setOffset(int);
+    method public void setText(String);
+    method public void setText(java.text.CharacterIterator);
+    method public static short tertiaryOrder(int);
+    field public static final int NULLORDER = -1; // 0xffffffff
+  }
+
+  public abstract class CollationKey implements java.lang.Comparable<java.text.CollationKey> {
+    ctor protected CollationKey(String);
+    method public abstract int compareTo(java.text.CollationKey);
+    method public String getSourceString();
+    method public abstract byte[] toByteArray();
+  }
+
+  public abstract class Collator implements java.lang.Cloneable java.util.Comparator<java.lang.Object> {
+    ctor protected Collator();
+    method public Object clone();
+    method public abstract int compare(String, String);
+    method public int compare(Object, Object);
+    method public boolean equals(String, String);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public abstract java.text.CollationKey getCollationKey(String);
+    method public int getDecomposition();
+    method public static java.text.Collator getInstance();
+    method public static java.text.Collator getInstance(java.util.Locale);
+    method public int getStrength();
+    method public abstract int hashCode();
+    method public void setDecomposition(int);
+    method public void setStrength(int);
+    field public static final int CANONICAL_DECOMPOSITION = 1; // 0x1
+    field public static final int FULL_DECOMPOSITION = 2; // 0x2
+    field public static final int IDENTICAL = 3; // 0x3
+    field public static final int NO_DECOMPOSITION = 0; // 0x0
+    field public static final int PRIMARY = 0; // 0x0
+    field public static final int SECONDARY = 1; // 0x1
+    field public static final int TERTIARY = 2; // 0x2
+  }
+
+  public abstract class DateFormat extends java.text.Format {
+    ctor protected DateFormat();
+    method @NonNull public final StringBuffer format(@NonNull Object, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public abstract StringBuffer format(@NonNull java.util.Date, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public final String format(@NonNull java.util.Date);
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @NonNull public java.util.Calendar getCalendar();
+    method @NonNull public static final java.text.DateFormat getDateInstance();
+    method @NonNull public static final java.text.DateFormat getDateInstance(int);
+    method @NonNull public static final java.text.DateFormat getDateInstance(int, @NonNull java.util.Locale);
+    method @NonNull public static final java.text.DateFormat getDateTimeInstance();
+    method @NonNull public static final java.text.DateFormat getDateTimeInstance(int, int);
+    method @NonNull public static final java.text.DateFormat getDateTimeInstance(int, int, @NonNull java.util.Locale);
+    method @NonNull public static final java.text.DateFormat getInstance();
+    method @NonNull public java.text.NumberFormat getNumberFormat();
+    method @NonNull public static final java.text.DateFormat getTimeInstance();
+    method @NonNull public static final java.text.DateFormat getTimeInstance(int);
+    method @NonNull public static final java.text.DateFormat getTimeInstance(int, @NonNull java.util.Locale);
+    method @NonNull public java.util.TimeZone getTimeZone();
+    method public boolean isLenient();
+    method @Nullable public java.util.Date parse(@NonNull String) throws java.text.ParseException;
+    method @Nullable public abstract java.util.Date parse(@NonNull String, @NonNull java.text.ParsePosition);
+    method @Nullable public Object parseObject(@NonNull String, @NonNull java.text.ParsePosition);
+    method public void setCalendar(@NonNull java.util.Calendar);
+    method public void setLenient(boolean);
+    method public void setNumberFormat(@NonNull java.text.NumberFormat);
+    method public void setTimeZone(@NonNull java.util.TimeZone);
+    field public static final int AM_PM_FIELD = 14; // 0xe
+    field public static final int DATE_FIELD = 3; // 0x3
+    field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
+    field public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; // 0xb
+    field public static final int DAY_OF_YEAR_FIELD = 10; // 0xa
+    field public static final int DEFAULT = 2; // 0x2
+    field public static final int ERA_FIELD = 0; // 0x0
+    field public static final int FULL = 0; // 0x0
+    field public static final int HOUR0_FIELD = 16; // 0x10
+    field public static final int HOUR1_FIELD = 15; // 0xf
+    field public static final int HOUR_OF_DAY0_FIELD = 5; // 0x5
+    field public static final int HOUR_OF_DAY1_FIELD = 4; // 0x4
+    field public static final int LONG = 1; // 0x1
+    field public static final int MEDIUM = 2; // 0x2
+    field public static final int MILLISECOND_FIELD = 8; // 0x8
+    field public static final int MINUTE_FIELD = 6; // 0x6
+    field public static final int MONTH_FIELD = 2; // 0x2
+    field public static final int SECOND_FIELD = 7; // 0x7
+    field public static final int SHORT = 3; // 0x3
+    field public static final int TIMEZONE_FIELD = 17; // 0x11
+    field public static final int WEEK_OF_MONTH_FIELD = 13; // 0xd
+    field public static final int WEEK_OF_YEAR_FIELD = 12; // 0xc
+    field public static final int YEAR_FIELD = 1; // 0x1
+    field @NonNull protected java.util.Calendar calendar;
+    field @NonNull protected java.text.NumberFormat numberFormat;
+  }
+
+  public static class DateFormat.Field extends java.text.Format.Field {
+    ctor protected DateFormat.Field(@NonNull String, int);
+    method public int getCalendarField();
+    method @NonNull public static java.text.DateFormat.Field ofCalendarField(int);
+    field @NonNull public static final java.text.DateFormat.Field AM_PM;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_MONTH;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_WEEK;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_YEAR;
+    field @NonNull public static final java.text.DateFormat.Field ERA;
+    field @NonNull public static final java.text.DateFormat.Field HOUR0;
+    field @NonNull public static final java.text.DateFormat.Field HOUR1;
+    field @NonNull public static final java.text.DateFormat.Field HOUR_OF_DAY0;
+    field @NonNull public static final java.text.DateFormat.Field HOUR_OF_DAY1;
+    field @NonNull public static final java.text.DateFormat.Field MILLISECOND;
+    field @NonNull public static final java.text.DateFormat.Field MINUTE;
+    field @NonNull public static final java.text.DateFormat.Field MONTH;
+    field @NonNull public static final java.text.DateFormat.Field SECOND;
+    field @NonNull public static final java.text.DateFormat.Field TIME_ZONE;
+    field @NonNull public static final java.text.DateFormat.Field WEEK_OF_MONTH;
+    field @NonNull public static final java.text.DateFormat.Field WEEK_OF_YEAR;
+    field @NonNull public static final java.text.DateFormat.Field YEAR;
+  }
+
+  public class DateFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DateFormatSymbols();
+    ctor public DateFormatSymbols(java.util.Locale);
+    method public Object clone();
+    method public String[] getAmPmStrings();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public String[] getEras();
+    method public static final java.text.DateFormatSymbols getInstance();
+    method public static final java.text.DateFormatSymbols getInstance(java.util.Locale);
+    method public String getLocalPatternChars();
+    method public String[] getMonths();
+    method public String[] getShortMonths();
+    method public String[] getShortWeekdays();
+    method public String[] getWeekdays();
+    method public String[][] getZoneStrings();
+    method public void setAmPmStrings(String[]);
+    method public void setEras(String[]);
+    method public void setLocalPatternChars(String);
+    method public void setMonths(String[]);
+    method public void setShortMonths(String[]);
+    method public void setShortWeekdays(String[]);
+    method public void setWeekdays(String[]);
+    method public void setZoneStrings(String[][]);
+  }
+
+  public class DecimalFormat extends java.text.NumberFormat {
+    ctor public DecimalFormat();
+    ctor public DecimalFormat(String);
+    ctor public DecimalFormat(String, java.text.DecimalFormatSymbols);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public java.text.DecimalFormatSymbols getDecimalFormatSymbols();
+    method public int getGroupingSize();
+    method public int getMultiplier();
+    method public String getNegativePrefix();
+    method public String getNegativeSuffix();
+    method public String getPositivePrefix();
+    method public String getPositiveSuffix();
+    method public boolean isDecimalSeparatorAlwaysShown();
+    method public boolean isParseBigDecimal();
+    method public Number parse(String, java.text.ParsePosition);
+    method public void setDecimalFormatSymbols(java.text.DecimalFormatSymbols);
+    method public void setDecimalSeparatorAlwaysShown(boolean);
+    method public void setGroupingSize(int);
+    method public void setMultiplier(int);
+    method public void setNegativePrefix(String);
+    method public void setNegativeSuffix(String);
+    method public void setParseBigDecimal(boolean);
+    method public void setPositivePrefix(String);
+    method public void setPositiveSuffix(String);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+  }
+
+  public class DecimalFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DecimalFormatSymbols();
+    ctor public DecimalFormatSymbols(java.util.Locale);
+    method public Object clone();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public java.util.Currency getCurrency();
+    method public String getCurrencySymbol();
+    method public char getDecimalSeparator();
+    method public char getDigit();
+    method public String getExponentSeparator();
+    method public char getGroupingSeparator();
+    method public String getInfinity();
+    method public static final java.text.DecimalFormatSymbols getInstance();
+    method public static final java.text.DecimalFormatSymbols getInstance(java.util.Locale);
+    method public String getInternationalCurrencySymbol();
+    method public char getMinusSign();
+    method public char getMonetaryDecimalSeparator();
+    method public String getNaN();
+    method public char getPatternSeparator();
+    method public char getPerMill();
+    method public char getPercent();
+    method public char getZeroDigit();
+    method public void setCurrency(java.util.Currency);
+    method public void setCurrencySymbol(String);
+    method public void setDecimalSeparator(char);
+    method public void setDigit(char);
+    method public void setExponentSeparator(String);
+    method public void setGroupingSeparator(char);
+    method public void setInfinity(String);
+    method public void setInternationalCurrencySymbol(String);
+    method public void setMinusSign(char);
+    method public void setMonetaryDecimalSeparator(char);
+    method public void setNaN(String);
+    method public void setPatternSeparator(char);
+    method public void setPerMill(char);
+    method public void setPercent(char);
+    method public void setZeroDigit(char);
+  }
+
+  public class FieldPosition {
+    ctor public FieldPosition(int);
+    ctor public FieldPosition(java.text.Format.Field);
+    ctor public FieldPosition(java.text.Format.Field, int);
+    method public int getBeginIndex();
+    method public int getEndIndex();
+    method public int getField();
+    method public java.text.Format.Field getFieldAttribute();
+    method public void setBeginIndex(int);
+    method public void setEndIndex(int);
+  }
+
+  public abstract class Format implements java.lang.Cloneable java.io.Serializable {
+    ctor protected Format();
+    method public Object clone();
+    method public final String format(Object);
+    method public abstract StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public java.text.AttributedCharacterIterator formatToCharacterIterator(Object);
+    method public abstract Object parseObject(String, java.text.ParsePosition);
+    method public Object parseObject(String) throws java.text.ParseException;
+  }
+
+  public static class Format.Field extends java.text.AttributedCharacterIterator.Attribute {
+    ctor protected Format.Field(String);
+  }
+
+  public class MessageFormat extends java.text.Format {
+    ctor public MessageFormat(String);
+    ctor public MessageFormat(String, java.util.Locale);
+    method public void applyPattern(String);
+    method public final StringBuffer format(Object[], StringBuffer, java.text.FieldPosition);
+    method public static String format(String, java.lang.Object...);
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public java.text.Format[] getFormats();
+    method public java.text.Format[] getFormatsByArgumentIndex();
+    method public java.util.Locale getLocale();
+    method public Object[] parse(String, java.text.ParsePosition);
+    method public Object[] parse(String) throws java.text.ParseException;
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public void setFormat(int, java.text.Format);
+    method public void setFormatByArgumentIndex(int, java.text.Format);
+    method public void setFormats(java.text.Format[]);
+    method public void setFormatsByArgumentIndex(java.text.Format[]);
+    method public void setLocale(java.util.Locale);
+    method public String toPattern();
+  }
+
+  public static class MessageFormat.Field extends java.text.Format.Field {
+    ctor protected MessageFormat.Field(String);
+    field public static final java.text.MessageFormat.Field ARGUMENT;
+  }
+
+  public final class Normalizer {
+    method public static boolean isNormalized(CharSequence, java.text.Normalizer.Form);
+    method public static String normalize(CharSequence, java.text.Normalizer.Form);
+  }
+
+  public enum Normalizer.Form {
+    enum_constant public static final java.text.Normalizer.Form NFC;
+    enum_constant public static final java.text.Normalizer.Form NFD;
+    enum_constant public static final java.text.Normalizer.Form NFKC;
+    enum_constant public static final java.text.Normalizer.Form NFKD;
+  }
+
+  public abstract class NumberFormat extends java.text.Format {
+    ctor protected NumberFormat();
+    method @NonNull public StringBuffer format(@NonNull Object, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public final String format(double);
+    method @NonNull public final String format(long);
+    method @NonNull public abstract StringBuffer format(double, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public abstract StringBuffer format(long, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @Nullable public java.util.Currency getCurrency();
+    method @NonNull public static final java.text.NumberFormat getCurrencyInstance();
+    method @NonNull public static java.text.NumberFormat getCurrencyInstance(@NonNull java.util.Locale);
+    method @NonNull public static final java.text.NumberFormat getInstance();
+    method @NonNull public static java.text.NumberFormat getInstance(@NonNull java.util.Locale);
+    method @NonNull public static final java.text.NumberFormat getIntegerInstance();
+    method @NonNull public static java.text.NumberFormat getIntegerInstance(@NonNull java.util.Locale);
+    method public int getMaximumFractionDigits();
+    method public int getMaximumIntegerDigits();
+    method public int getMinimumFractionDigits();
+    method public int getMinimumIntegerDigits();
+    method @NonNull public static final java.text.NumberFormat getNumberInstance();
+    method @NonNull public static java.text.NumberFormat getNumberInstance(@NonNull java.util.Locale);
+    method @NonNull public static final java.text.NumberFormat getPercentInstance();
+    method @NonNull public static java.text.NumberFormat getPercentInstance(@NonNull java.util.Locale);
+    method @NonNull public java.math.RoundingMode getRoundingMode();
+    method public boolean isGroupingUsed();
+    method public boolean isParseIntegerOnly();
+    method @Nullable public abstract Number parse(@NonNull String, @NonNull java.text.ParsePosition);
+    method @Nullable public Number parse(@NonNull String) throws java.text.ParseException;
+    method @Nullable public final Object parseObject(@NonNull String, @NonNull java.text.ParsePosition);
+    method public void setCurrency(@NonNull java.util.Currency);
+    method public void setGroupingUsed(boolean);
+    method public void setMaximumFractionDigits(int);
+    method public void setMaximumIntegerDigits(int);
+    method public void setMinimumFractionDigits(int);
+    method public void setMinimumIntegerDigits(int);
+    method public void setParseIntegerOnly(boolean);
+    method public void setRoundingMode(@Nullable java.math.RoundingMode);
+    field public static final int FRACTION_FIELD = 1; // 0x1
+    field public static final int INTEGER_FIELD = 0; // 0x0
+  }
+
+  public static class NumberFormat.Field extends java.text.Format.Field {
+    ctor protected NumberFormat.Field(@NonNull String);
+    field @NonNull public static final java.text.NumberFormat.Field CURRENCY;
+    field @NonNull public static final java.text.NumberFormat.Field DECIMAL_SEPARATOR;
+    field @NonNull public static final java.text.NumberFormat.Field EXPONENT;
+    field @NonNull public static final java.text.NumberFormat.Field EXPONENT_SIGN;
+    field @NonNull public static final java.text.NumberFormat.Field EXPONENT_SYMBOL;
+    field @NonNull public static final java.text.NumberFormat.Field FRACTION;
+    field @NonNull public static final java.text.NumberFormat.Field GROUPING_SEPARATOR;
+    field @NonNull public static final java.text.NumberFormat.Field INTEGER;
+    field @NonNull public static final java.text.NumberFormat.Field PERCENT;
+    field @NonNull public static final java.text.NumberFormat.Field PERMILLE;
+    field @NonNull public static final java.text.NumberFormat.Field SIGN;
+  }
+
+  public class ParseException extends java.lang.Exception {
+    ctor public ParseException(String, int);
+    method public int getErrorOffset();
+  }
+
+  public class ParsePosition {
+    ctor public ParsePosition(int);
+    method public int getErrorIndex();
+    method public int getIndex();
+    method public void setErrorIndex(int);
+    method public void setIndex(int);
+  }
+
+  public class RuleBasedCollator extends java.text.Collator {
+    ctor public RuleBasedCollator(String) throws java.text.ParseException;
+    method public int compare(String, String);
+    method public java.text.CollationElementIterator getCollationElementIterator(String);
+    method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public java.text.CollationKey getCollationKey(String);
+    method public String getRules();
+  }
+
+  public class SimpleDateFormat extends java.text.DateFormat {
+    ctor public SimpleDateFormat();
+    ctor public SimpleDateFormat(String);
+    ctor public SimpleDateFormat(String, java.util.Locale);
+    ctor public SimpleDateFormat(String, java.text.DateFormatSymbols);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public StringBuffer format(java.util.Date, StringBuffer, java.text.FieldPosition);
+    method public java.util.Date get2DigitYearStart();
+    method public java.text.DateFormatSymbols getDateFormatSymbols();
+    method public java.util.Date parse(String, java.text.ParsePosition);
+    method public void set2DigitYearStart(java.util.Date);
+    method public void setDateFormatSymbols(java.text.DateFormatSymbols);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+  }
+
+  public final class StringCharacterIterator implements java.text.CharacterIterator {
+    ctor public StringCharacterIterator(String);
+    ctor public StringCharacterIterator(String, int);
+    ctor public StringCharacterIterator(String, int, int, int);
+    method public Object clone();
+    method public char current();
+    method public char first();
+    method public int getBeginIndex();
+    method public int getEndIndex();
+    method public int getIndex();
+    method public char last();
+    method public char next();
+    method public char previous();
+    method public char setIndex(int);
+    method public void setText(String);
+  }
+
+}
+
+package java.time {
+
+  public abstract class Clock {
+    ctor protected Clock();
+    method public static java.time.Clock fixed(java.time.Instant, java.time.ZoneId);
+    method public abstract java.time.ZoneId getZone();
+    method public abstract java.time.Instant instant();
+    method public long millis();
+    method public static java.time.Clock offset(java.time.Clock, java.time.Duration);
+    method public static java.time.Clock system(java.time.ZoneId);
+    method public static java.time.Clock systemDefaultZone();
+    method public static java.time.Clock systemUTC();
+    method public static java.time.Clock tick(java.time.Clock, java.time.Duration);
+    method public static java.time.Clock tickMinutes(java.time.ZoneId);
+    method public static java.time.Clock tickSeconds(java.time.ZoneId);
+    method public abstract java.time.Clock withZone(java.time.ZoneId);
+  }
+
+  public class DateTimeException extends java.lang.RuntimeException {
+    ctor public DateTimeException(String);
+    ctor public DateTimeException(String, Throwable);
+  }
+
+  public enum DayOfWeek implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
+    method public String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.DayOfWeek minus(long);
+    method public static java.time.DayOfWeek of(int);
+    method public java.time.DayOfWeek plus(long);
+    enum_constant public static final java.time.DayOfWeek FRIDAY;
+    enum_constant public static final java.time.DayOfWeek MONDAY;
+    enum_constant public static final java.time.DayOfWeek SATURDAY;
+    enum_constant public static final java.time.DayOfWeek SUNDAY;
+    enum_constant public static final java.time.DayOfWeek THURSDAY;
+    enum_constant public static final java.time.DayOfWeek TUESDAY;
+    enum_constant public static final java.time.DayOfWeek WEDNESDAY;
+  }
+
+  public final class Duration implements java.lang.Comparable<java.time.Duration> java.io.Serializable java.time.temporal.TemporalAmount {
+    method public java.time.Duration abs();
+    method public java.time.temporal.Temporal addTo(java.time.temporal.Temporal);
+    method public static java.time.Duration between(java.time.temporal.Temporal, java.time.temporal.Temporal);
+    method public int compareTo(java.time.Duration);
+    method public java.time.Duration dividedBy(long);
+    method public long dividedBy(java.time.Duration);
+    method public static java.time.Duration from(java.time.temporal.TemporalAmount);
+    method public long get(java.time.temporal.TemporalUnit);
+    method public int getNano();
+    method public long getSeconds();
+    method public java.util.List<java.time.temporal.TemporalUnit> getUnits();
+    method public boolean isNegative();
+    method public boolean isZero();
+    method public java.time.Duration minus(java.time.Duration);
+    method public java.time.Duration minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Duration minusDays(long);
+    method public java.time.Duration minusHours(long);
+    method public java.time.Duration minusMillis(long);
+    method public java.time.Duration minusMinutes(long);
+    method public java.time.Duration minusNanos(long);
+    method public java.time.Duration minusSeconds(long);
+    method public java.time.Duration multipliedBy(long);
+    method public java.time.Duration negated();
+    method public static java.time.Duration of(long, java.time.temporal.TemporalUnit);
+    method public static java.time.Duration ofDays(long);
+    method public static java.time.Duration ofHours(long);
+    method public static java.time.Duration ofMillis(long);
+    method public static java.time.Duration ofMinutes(long);
+    method public static java.time.Duration ofNanos(long);
+    method public static java.time.Duration ofSeconds(long);
+    method public static java.time.Duration ofSeconds(long, long);
+    method public static java.time.Duration parse(CharSequence);
+    method public java.time.Duration plus(java.time.Duration);
+    method public java.time.Duration plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Duration plusDays(long);
+    method public java.time.Duration plusHours(long);
+    method public java.time.Duration plusMillis(long);
+    method public java.time.Duration plusMinutes(long);
+    method public java.time.Duration plusNanos(long);
+    method public java.time.Duration plusSeconds(long);
+    method public java.time.temporal.Temporal subtractFrom(java.time.temporal.Temporal);
+    method public long toDays();
+    method public long toDaysPart();
+    method public long toHours();
+    method public int toHoursPart();
+    method public long toMillis();
+    method public int toMillisPart();
+    method public long toMinutes();
+    method public int toMinutesPart();
+    method public long toNanos();
+    method public int toNanosPart();
+    method public long toSeconds();
+    method public int toSecondsPart();
+    method public java.time.Duration truncatedTo(java.time.temporal.TemporalUnit);
+    method public java.time.Duration withNanos(int);
+    method public java.time.Duration withSeconds(long);
+    field public static final java.time.Duration ZERO;
+  }
+
+  public final class Instant implements java.lang.Comparable<java.time.Instant> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.OffsetDateTime atOffset(java.time.ZoneOffset);
+    method public java.time.ZonedDateTime atZone(java.time.ZoneId);
+    method public int compareTo(java.time.Instant);
+    method public static java.time.Instant from(java.time.temporal.TemporalAccessor);
+    method public long getEpochSecond();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getNano();
+    method public boolean isAfter(java.time.Instant);
+    method public boolean isBefore(java.time.Instant);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+    method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Instant minusMillis(long);
+    method public java.time.Instant minusNanos(long);
+    method public java.time.Instant minusSeconds(long);
+    method public static java.time.Instant now();
+    method public static java.time.Instant now(java.time.Clock);
+    method public static java.time.Instant ofEpochMilli(long);
+    method public static java.time.Instant ofEpochSecond(long);
+    method public static java.time.Instant ofEpochSecond(long, long);
+    method public static java.time.Instant parse(CharSequence);
+    method public java.time.Instant plus(java.time.temporal.TemporalAmount);
+    method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Instant plusMillis(long);
+    method public java.time.Instant plusNanos(long);
+    method public java.time.Instant plusSeconds(long);
+    method public long toEpochMilli();
+    method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
+    method public java.time.Instant with(java.time.temporal.TemporalField, long);
+    field public static final java.time.Instant EPOCH;
+    field public static final java.time.Instant MAX;
+    field public static final java.time.Instant MIN;
+  }
+
+  public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.LocalDateTime atStartOfDay();
+    method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+    method public java.time.LocalDateTime atTime(java.time.LocalTime);
+    method public java.time.LocalDateTime atTime(int, int);
+    method public java.time.LocalDateTime atTime(int, int, int);
+    method public java.time.LocalDateTime atTime(int, int, int, int);
+    method public java.time.OffsetDateTime atTime(java.time.OffsetTime);
+    method public static java.time.LocalDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.IsoChronology getChronology();
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getYear();
+    method public int lengthOfMonth();
+    method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDate minusDays(long);
+    method public java.time.LocalDate minusMonths(long);
+    method public java.time.LocalDate minusWeeks(long);
+    method public java.time.LocalDate minusYears(long);
+    method public static java.time.LocalDate now();
+    method public static java.time.LocalDate now(java.time.ZoneId);
+    method public static java.time.LocalDate now(java.time.Clock);
+    method public static java.time.LocalDate of(int, java.time.Month, int);
+    method public static java.time.LocalDate of(int, int, int);
+    method public static java.time.LocalDate ofEpochDay(long);
+    method public static java.time.LocalDate ofYearDay(int, int);
+    method public static java.time.LocalDate parse(CharSequence);
+    method public static java.time.LocalDate parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDate plusDays(long);
+    method public java.time.LocalDate plusMonths(long);
+    method public java.time.LocalDate plusWeeks(long);
+    method public java.time.LocalDate plusYears(long);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+    method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
+    method public java.time.LocalDate withDayOfMonth(int);
+    method public java.time.LocalDate withDayOfYear(int);
+    method public java.time.LocalDate withMonth(int);
+    method public java.time.LocalDate withYear(int);
+    field public static final java.time.LocalDate MAX;
+    field public static final java.time.LocalDate MIN;
+  }
+
+  public final class LocalDateTime implements java.time.chrono.ChronoLocalDateTime<java.time.LocalDate> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.OffsetDateTime atOffset(java.time.ZoneOffset);
+    method public java.time.ZonedDateTime atZone(java.time.ZoneId);
+    method public static java.time.LocalDateTime from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getNano();
+    method public int getSecond();
+    method public int getYear();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime minusDays(long);
+    method public java.time.LocalDateTime minusHours(long);
+    method public java.time.LocalDateTime minusMinutes(long);
+    method public java.time.LocalDateTime minusMonths(long);
+    method public java.time.LocalDateTime minusNanos(long);
+    method public java.time.LocalDateTime minusSeconds(long);
+    method public java.time.LocalDateTime minusWeeks(long);
+    method public java.time.LocalDateTime minusYears(long);
+    method public static java.time.LocalDateTime now();
+    method public static java.time.LocalDateTime now(java.time.ZoneId);
+    method public static java.time.LocalDateTime now(java.time.Clock);
+    method public static java.time.LocalDateTime of(int, java.time.Month, int, int, int);
+    method public static java.time.LocalDateTime of(int, java.time.Month, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, java.time.Month, int, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, int, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, int, int, int, int, int, int);
+    method public static java.time.LocalDateTime of(java.time.LocalDate, java.time.LocalTime);
+    method public static java.time.LocalDateTime ofEpochSecond(long, int, java.time.ZoneOffset);
+    method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.LocalDateTime parse(CharSequence);
+    method public static java.time.LocalDateTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime plusDays(long);
+    method public java.time.LocalDateTime plusHours(long);
+    method public java.time.LocalDateTime plusMinutes(long);
+    method public java.time.LocalDateTime plusMonths(long);
+    method public java.time.LocalDateTime plusNanos(long);
+    method public java.time.LocalDateTime plusSeconds(long);
+    method public java.time.LocalDateTime plusWeeks(long);
+    method public java.time.LocalDateTime plusYears(long);
+    method public java.time.LocalDate toLocalDate();
+    method public java.time.LocalTime toLocalTime();
+    method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
+    method public java.time.LocalDateTime withDayOfMonth(int);
+    method public java.time.LocalDateTime withDayOfYear(int);
+    method public java.time.LocalDateTime withHour(int);
+    method public java.time.LocalDateTime withMinute(int);
+    method public java.time.LocalDateTime withMonth(int);
+    method public java.time.LocalDateTime withNano(int);
+    method public java.time.LocalDateTime withSecond(int);
+    method public java.time.LocalDateTime withYear(int);
+    field public static final java.time.LocalDateTime MAX;
+    field public static final java.time.LocalDateTime MIN;
+  }
+
+  public final class LocalTime implements java.lang.Comparable<java.time.LocalTime> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDateTime atDate(java.time.LocalDate);
+    method public java.time.OffsetTime atOffset(java.time.ZoneOffset);
+    method public int compareTo(java.time.LocalTime);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.LocalTime from(java.time.temporal.TemporalAccessor);
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public int getNano();
+    method public int getSecond();
+    method public boolean isAfter(java.time.LocalTime);
+    method public boolean isBefore(java.time.LocalTime);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime minusHours(long);
+    method public java.time.LocalTime minusMinutes(long);
+    method public java.time.LocalTime minusNanos(long);
+    method public java.time.LocalTime minusSeconds(long);
+    method public static java.time.LocalTime now();
+    method public static java.time.LocalTime now(java.time.ZoneId);
+    method public static java.time.LocalTime now(java.time.Clock);
+    method public static java.time.LocalTime of(int, int);
+    method public static java.time.LocalTime of(int, int, int);
+    method public static java.time.LocalTime of(int, int, int, int);
+    method public static java.time.LocalTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.LocalTime ofNanoOfDay(long);
+    method public static java.time.LocalTime ofSecondOfDay(long);
+    method public static java.time.LocalTime parse(CharSequence);
+    method public static java.time.LocalTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime plusHours(long);
+    method public java.time.LocalTime plusMinutes(long);
+    method public java.time.LocalTime plusNanos(long);
+    method public java.time.LocalTime plusSeconds(long);
+    method public long toEpochSecond(java.time.LocalDate, java.time.ZoneOffset);
+    method public long toNanoOfDay();
+    method public int toSecondOfDay();
+    method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
+    method public java.time.LocalTime withHour(int);
+    method public java.time.LocalTime withMinute(int);
+    method public java.time.LocalTime withNano(int);
+    method public java.time.LocalTime withSecond(int);
+    field public static final java.time.LocalTime MAX;
+    field public static final java.time.LocalTime MIDNIGHT;
+    field public static final java.time.LocalTime MIN;
+    field public static final java.time.LocalTime NOON;
+  }
+
+  public enum Month implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public int firstDayOfYear(boolean);
+    method public java.time.Month firstMonthOfQuarter();
+    method public static java.time.Month from(java.time.temporal.TemporalAccessor);
+    method public String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public int length(boolean);
+    method public int maxLength();
+    method public int minLength();
+    method public java.time.Month minus(long);
+    method public static java.time.Month of(int);
+    method public java.time.Month plus(long);
+    enum_constant public static final java.time.Month APRIL;
+    enum_constant public static final java.time.Month AUGUST;
+    enum_constant public static final java.time.Month DECEMBER;
+    enum_constant public static final java.time.Month FEBRUARY;
+    enum_constant public static final java.time.Month JANUARY;
+    enum_constant public static final java.time.Month JULY;
+    enum_constant public static final java.time.Month JUNE;
+    enum_constant public static final java.time.Month MARCH;
+    enum_constant public static final java.time.Month MAY;
+    enum_constant public static final java.time.Month NOVEMBER;
+    enum_constant public static final java.time.Month OCTOBER;
+    enum_constant public static final java.time.Month SEPTEMBER;
+  }
+
+  public final class MonthDay implements java.lang.Comparable<java.time.MonthDay> java.io.Serializable java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDate atYear(int);
+    method public int compareTo(java.time.MonthDay);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.MonthDay from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public boolean isAfter(java.time.MonthDay);
+    method public boolean isBefore(java.time.MonthDay);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isValidYear(int);
+    method public static java.time.MonthDay now();
+    method public static java.time.MonthDay now(java.time.ZoneId);
+    method public static java.time.MonthDay now(java.time.Clock);
+    method public static java.time.MonthDay of(java.time.Month, int);
+    method public static java.time.MonthDay of(int, int);
+    method public static java.time.MonthDay parse(CharSequence);
+    method public static java.time.MonthDay parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.MonthDay with(java.time.Month);
+    method public java.time.MonthDay withDayOfMonth(int);
+    method public java.time.MonthDay withMonth(int);
+  }
+
+  public final class OffsetDateTime implements java.lang.Comparable<java.time.OffsetDateTime> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.ZonedDateTime atZoneSameInstant(java.time.ZoneId);
+    method public java.time.ZonedDateTime atZoneSimilarLocal(java.time.ZoneId);
+    method public int compareTo(java.time.OffsetDateTime);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.OffsetDateTime from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getNano();
+    method public java.time.ZoneOffset getOffset();
+    method public int getSecond();
+    method public int getYear();
+    method public boolean isAfter(java.time.OffsetDateTime);
+    method public boolean isBefore(java.time.OffsetDateTime);
+    method public boolean isEqual(java.time.OffsetDateTime);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime minusDays(long);
+    method public java.time.OffsetDateTime minusHours(long);
+    method public java.time.OffsetDateTime minusMinutes(long);
+    method public java.time.OffsetDateTime minusMonths(long);
+    method public java.time.OffsetDateTime minusNanos(long);
+    method public java.time.OffsetDateTime minusSeconds(long);
+    method public java.time.OffsetDateTime minusWeeks(long);
+    method public java.time.OffsetDateTime minusYears(long);
+    method public static java.time.OffsetDateTime now();
+    method public static java.time.OffsetDateTime now(java.time.ZoneId);
+    method public static java.time.OffsetDateTime now(java.time.Clock);
+    method public static java.time.OffsetDateTime of(java.time.LocalDate, java.time.LocalTime, java.time.ZoneOffset);
+    method public static java.time.OffsetDateTime of(java.time.LocalDateTime, java.time.ZoneOffset);
+    method public static java.time.OffsetDateTime of(int, int, int, int, int, int, int, java.time.ZoneOffset);
+    method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.OffsetDateTime parse(CharSequence);
+    method public static java.time.OffsetDateTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime plusDays(long);
+    method public java.time.OffsetDateTime plusHours(long);
+    method public java.time.OffsetDateTime plusMinutes(long);
+    method public java.time.OffsetDateTime plusMonths(long);
+    method public java.time.OffsetDateTime plusNanos(long);
+    method public java.time.OffsetDateTime plusSeconds(long);
+    method public java.time.OffsetDateTime plusWeeks(long);
+    method public java.time.OffsetDateTime plusYears(long);
+    method public static java.util.Comparator<java.time.OffsetDateTime> timeLineOrder();
+    method public long toEpochSecond();
+    method public java.time.Instant toInstant();
+    method public java.time.LocalDate toLocalDate();
+    method public java.time.LocalDateTime toLocalDateTime();
+    method public java.time.LocalTime toLocalTime();
+    method public java.time.OffsetTime toOffsetTime();
+    method public java.time.ZonedDateTime toZonedDateTime();
+    method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
+    method public java.time.OffsetDateTime withDayOfMonth(int);
+    method public java.time.OffsetDateTime withDayOfYear(int);
+    method public java.time.OffsetDateTime withHour(int);
+    method public java.time.OffsetDateTime withMinute(int);
+    method public java.time.OffsetDateTime withMonth(int);
+    method public java.time.OffsetDateTime withNano(int);
+    method public java.time.OffsetDateTime withOffsetSameInstant(java.time.ZoneOffset);
+    method public java.time.OffsetDateTime withOffsetSameLocal(java.time.ZoneOffset);
+    method public java.time.OffsetDateTime withSecond(int);
+    method public java.time.OffsetDateTime withYear(int);
+    field public static final java.time.OffsetDateTime MAX;
+    field public static final java.time.OffsetDateTime MIN;
+  }
+
+  public final class OffsetTime implements java.lang.Comparable<java.time.OffsetTime> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.OffsetDateTime atDate(java.time.LocalDate);
+    method public int compareTo(java.time.OffsetTime);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.OffsetTime from(java.time.temporal.TemporalAccessor);
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public int getNano();
+    method public java.time.ZoneOffset getOffset();
+    method public int getSecond();
+    method public boolean isAfter(java.time.OffsetTime);
+    method public boolean isBefore(java.time.OffsetTime);
+    method public boolean isEqual(java.time.OffsetTime);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime minusHours(long);
+    method public java.time.OffsetTime minusMinutes(long);
+    method public java.time.OffsetTime minusNanos(long);
+    method public java.time.OffsetTime minusSeconds(long);
+    method public static java.time.OffsetTime now();
+    method public static java.time.OffsetTime now(java.time.ZoneId);
+    method public static java.time.OffsetTime now(java.time.Clock);
+    method public static java.time.OffsetTime of(java.time.LocalTime, java.time.ZoneOffset);
+    method public static java.time.OffsetTime of(int, int, int, int, java.time.ZoneOffset);
+    method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.OffsetTime parse(CharSequence);
+    method public static java.time.OffsetTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime plusHours(long);
+    method public java.time.OffsetTime plusMinutes(long);
+    method public java.time.OffsetTime plusNanos(long);
+    method public java.time.OffsetTime plusSeconds(long);
+    method public java.time.LocalTime toLocalTime();
+    method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
+    method public java.time.OffsetTime withHour(int);
+    method public java.time.OffsetTime withMinute(int);
+    method public java.time.OffsetTime withNano(int);
+    method public java.time.OffsetTime withOffsetSameInstant(java.time.ZoneOffset);
+    method public java.time.OffsetTime withOffsetSameLocal(java.time.ZoneOffset);
+    method public java.time.OffsetTime withSecond(int);
+    field public static final java.time.OffsetTime MAX;
+    field public static final java.time.OffsetTime MIN;
+  }
+
+  public final class Period implements java.time.chrono.ChronoPeriod java.io.Serializable {
+    method public java.time.temporal.Temporal addTo(java.time.temporal.Temporal);
+    method public static java.time.Period between(java.time.LocalDate, java.time.LocalDate);
+    method public static java.time.Period from(java.time.temporal.TemporalAmount);
+    method public long get(java.time.temporal.TemporalUnit);
+    method public java.time.chrono.IsoChronology getChronology();
+    method public int getDays();
+    method public int getMonths();
+    method public java.util.List<java.time.temporal.TemporalUnit> getUnits();
+    method public int getYears();
+    method public java.time.Period minus(java.time.temporal.TemporalAmount);
+    method public java.time.Period minusDays(long);
+    method public java.time.Period minusMonths(long);
+    method public java.time.Period minusYears(long);
+    method public java.time.Period multipliedBy(int);
+    method public java.time.Period negated();
+    method public java.time.Period normalized();
+    method public static java.time.Period of(int, int, int);
+    method public static java.time.Period ofDays(int);
+    method public static java.time.Period ofMonths(int);
+    method public static java.time.Period ofWeeks(int);
+    method public static java.time.Period ofYears(int);
+    method public static java.time.Period parse(CharSequence);
+    method public java.time.Period plus(java.time.temporal.TemporalAmount);
+    method public java.time.Period plusDays(long);
+    method public java.time.Period plusMonths(long);
+    method public java.time.Period plusYears(long);
+    method public java.time.temporal.Temporal subtractFrom(java.time.temporal.Temporal);
+    method public long toTotalMonths();
+    method public java.time.Period withDays(int);
+    method public java.time.Period withMonths(int);
+    method public java.time.Period withYears(int);
+    field public static final java.time.Period ZERO;
+  }
+
+  public final class Year implements java.lang.Comparable<java.time.Year> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDate atDay(int);
+    method public java.time.YearMonth atMonth(java.time.Month);
+    method public java.time.YearMonth atMonth(int);
+    method public java.time.LocalDate atMonthDay(java.time.MonthDay);
+    method public int compareTo(java.time.Year);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.Year from(java.time.temporal.TemporalAccessor);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public boolean isAfter(java.time.Year);
+    method public boolean isBefore(java.time.Year);
+    method public static boolean isLeap(long);
+    method public boolean isLeap();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public boolean isValidMonthDay(java.time.MonthDay);
+    method public int length();
+    method public java.time.Year minus(java.time.temporal.TemporalAmount);
+    method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Year minusYears(long);
+    method public static java.time.Year now();
+    method public static java.time.Year now(java.time.ZoneId);
+    method public static java.time.Year now(java.time.Clock);
+    method public static java.time.Year of(int);
+    method public static java.time.Year parse(CharSequence);
+    method public static java.time.Year parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.Year plus(java.time.temporal.TemporalAmount);
+    method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Year plusYears(long);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Year with(java.time.temporal.TemporalAdjuster);
+    method public java.time.Year with(java.time.temporal.TemporalField, long);
+    field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
+    field public static final int MIN_VALUE = -999999999; // 0xc4653601
+  }
+
+  public final class YearMonth implements java.lang.Comparable<java.time.YearMonth> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDate atDay(int);
+    method public java.time.LocalDate atEndOfMonth();
+    method public int compareTo(java.time.YearMonth);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.YearMonth from(java.time.temporal.TemporalAccessor);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getYear();
+    method public boolean isAfter(java.time.YearMonth);
+    method public boolean isBefore(java.time.YearMonth);
+    method public boolean isLeapYear();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public boolean isValidDay(int);
+    method public int lengthOfMonth();
+    method public int lengthOfYear();
+    method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+    method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth minusMonths(long);
+    method public java.time.YearMonth minusYears(long);
+    method public static java.time.YearMonth now();
+    method public static java.time.YearMonth now(java.time.ZoneId);
+    method public static java.time.YearMonth now(java.time.Clock);
+    method public static java.time.YearMonth of(int, java.time.Month);
+    method public static java.time.YearMonth of(int, int);
+    method public static java.time.YearMonth parse(CharSequence);
+    method public static java.time.YearMonth parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
+    method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth plusMonths(long);
+    method public java.time.YearMonth plusYears(long);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
+    method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
+    method public java.time.YearMonth withMonth(int);
+    method public java.time.YearMonth withYear(int);
+  }
+
+  public abstract class ZoneId implements java.io.Serializable {
+    method public static java.time.ZoneId from(java.time.temporal.TemporalAccessor);
+    method public static java.util.Set<java.lang.String> getAvailableZoneIds();
+    method public String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public abstract String getId();
+    method public abstract java.time.zone.ZoneRules getRules();
+    method public java.time.ZoneId normalized();
+    method public static java.time.ZoneId of(String, java.util.Map<java.lang.String,java.lang.String>);
+    method public static java.time.ZoneId of(String);
+    method public static java.time.ZoneId ofOffset(String, java.time.ZoneOffset);
+    method public static java.time.ZoneId systemDefault();
+    field public static final java.util.Map<java.lang.String,java.lang.String> SHORT_IDS;
+  }
+
+  public final class ZoneOffset extends java.time.ZoneId implements java.lang.Comparable<java.time.ZoneOffset> java.io.Serializable java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public int compareTo(java.time.ZoneOffset);
+    method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
+    method public String getId();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.zone.ZoneRules getRules();
+    method public int getTotalSeconds();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public static java.time.ZoneOffset of(String);
+    method public static java.time.ZoneOffset ofHours(int);
+    method public static java.time.ZoneOffset ofHoursMinutes(int, int);
+    method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
+    method public static java.time.ZoneOffset ofTotalSeconds(int);
+    field public static final java.time.ZoneOffset MAX;
+    field public static final java.time.ZoneOffset MIN;
+    field public static final java.time.ZoneOffset UTC;
+  }
+
+  public final class ZonedDateTime implements java.time.chrono.ChronoZonedDateTime<java.time.LocalDate> java.io.Serializable java.time.temporal.Temporal {
+    method public static java.time.ZonedDateTime from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public int getHour();
+    method public int getMinute();
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getNano();
+    method public java.time.ZoneOffset getOffset();
+    method public int getSecond();
+    method public int getYear();
+    method public java.time.ZoneId getZone();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime minusDays(long);
+    method public java.time.ZonedDateTime minusHours(long);
+    method public java.time.ZonedDateTime minusMinutes(long);
+    method public java.time.ZonedDateTime minusMonths(long);
+    method public java.time.ZonedDateTime minusNanos(long);
+    method public java.time.ZonedDateTime minusSeconds(long);
+    method public java.time.ZonedDateTime minusWeeks(long);
+    method public java.time.ZonedDateTime minusYears(long);
+    method public static java.time.ZonedDateTime now();
+    method public static java.time.ZonedDateTime now(java.time.ZoneId);
+    method public static java.time.ZonedDateTime now(java.time.Clock);
+    method public static java.time.ZonedDateTime of(java.time.LocalDate, java.time.LocalTime, java.time.ZoneId);
+    method public static java.time.ZonedDateTime of(java.time.LocalDateTime, java.time.ZoneId);
+    method public static java.time.ZonedDateTime of(int, int, int, int, int, int, int, java.time.ZoneId);
+    method public static java.time.ZonedDateTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.ZonedDateTime ofInstant(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
+    method public static java.time.ZonedDateTime ofLocal(java.time.LocalDateTime, java.time.ZoneId, java.time.ZoneOffset);
+    method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
+    method public static java.time.ZonedDateTime parse(CharSequence);
+    method public static java.time.ZonedDateTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime plusDays(long);
+    method public java.time.ZonedDateTime plusHours(long);
+    method public java.time.ZonedDateTime plusMinutes(long);
+    method public java.time.ZonedDateTime plusMonths(long);
+    method public java.time.ZonedDateTime plusNanos(long);
+    method public java.time.ZonedDateTime plusSeconds(long);
+    method public java.time.ZonedDateTime plusWeeks(long);
+    method public java.time.ZonedDateTime plusYears(long);
+    method public java.time.LocalDate toLocalDate();
+    method public java.time.LocalDateTime toLocalDateTime();
+    method public java.time.OffsetDateTime toOffsetDateTime();
+    method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
+    method public java.time.ZonedDateTime withDayOfMonth(int);
+    method public java.time.ZonedDateTime withDayOfYear(int);
+    method public java.time.ZonedDateTime withEarlierOffsetAtOverlap();
+    method public java.time.ZonedDateTime withFixedOffsetZone();
+    method public java.time.ZonedDateTime withHour(int);
+    method public java.time.ZonedDateTime withLaterOffsetAtOverlap();
+    method public java.time.ZonedDateTime withMinute(int);
+    method public java.time.ZonedDateTime withMonth(int);
+    method public java.time.ZonedDateTime withNano(int);
+    method public java.time.ZonedDateTime withSecond(int);
+    method public java.time.ZonedDateTime withYear(int);
+    method public java.time.ZonedDateTime withZoneSameInstant(java.time.ZoneId);
+    method public java.time.ZonedDateTime withZoneSameLocal(java.time.ZoneId);
+  }
+
+}
+
+package java.time.chrono {
+
+  public abstract class AbstractChronology implements java.time.chrono.Chronology {
+    ctor protected AbstractChronology();
+    method public int compareTo(java.time.chrono.Chronology);
+    method public java.time.chrono.ChronoLocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+  }
+
+  public interface ChronoLocalDate extends java.time.temporal.Temporal java.lang.Comparable<java.time.chrono.ChronoLocalDate> java.time.temporal.TemporalAdjuster {
+    method public default java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public default java.time.chrono.ChronoLocalDateTime<?> atTime(java.time.LocalTime);
+    method public default int compareTo(java.time.chrono.ChronoLocalDate);
+    method public boolean equals(Object);
+    method public default String format(java.time.format.DateTimeFormatter);
+    method public static java.time.chrono.ChronoLocalDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.Chronology getChronology();
+    method public default java.time.chrono.Era getEra();
+    method public int hashCode();
+    method public default boolean isAfter(java.time.chrono.ChronoLocalDate);
+    method public default boolean isBefore(java.time.chrono.ChronoLocalDate);
+    method public default boolean isEqual(java.time.chrono.ChronoLocalDate);
+    method public default boolean isLeapYear();
+    method public default boolean isSupported(java.time.temporal.TemporalField);
+    method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public int lengthOfMonth();
+    method public default int lengthOfYear();
+    method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
+    method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
+    method public default long toEpochDay();
+    method public String toString();
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
+    method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
+  }
+
+  public interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> extends java.time.temporal.Temporal java.lang.Comparable<java.time.chrono.ChronoLocalDateTime<?>> java.time.temporal.TemporalAdjuster {
+    method public default java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.chrono.ChronoZonedDateTime<D> atZone(java.time.ZoneId);
+    method public default int compareTo(java.time.chrono.ChronoLocalDateTime<?>);
+    method public boolean equals(Object);
+    method public default String format(java.time.format.DateTimeFormatter);
+    method public static java.time.chrono.ChronoLocalDateTime<?> from(java.time.temporal.TemporalAccessor);
+    method public default java.time.chrono.Chronology getChronology();
+    method public int hashCode();
+    method public default boolean isAfter(java.time.chrono.ChronoLocalDateTime<?>);
+    method public default boolean isBefore(java.time.chrono.ChronoLocalDateTime<?>);
+    method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
+    method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
+    method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
+    method public default long toEpochSecond(java.time.ZoneOffset);
+    method public default java.time.Instant toInstant(java.time.ZoneOffset);
+    method public D toLocalDate();
+    method public java.time.LocalTime toLocalTime();
+    method public String toString();
+    method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
+    method public java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
+  }
+
+  public interface ChronoPeriod extends java.time.temporal.TemporalAmount {
+    method public static java.time.chrono.ChronoPeriod between(java.time.chrono.ChronoLocalDate, java.time.chrono.ChronoLocalDate);
+    method public boolean equals(Object);
+    method public java.time.chrono.Chronology getChronology();
+    method public int hashCode();
+    method public default boolean isNegative();
+    method public default boolean isZero();
+    method public java.time.chrono.ChronoPeriod minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ChronoPeriod multipliedBy(int);
+    method public default java.time.chrono.ChronoPeriod negated();
+    method public java.time.chrono.ChronoPeriod normalized();
+    method public java.time.chrono.ChronoPeriod plus(java.time.temporal.TemporalAmount);
+    method public String toString();
+  }
+
+  public interface ChronoZonedDateTime<D extends java.time.chrono.ChronoLocalDate> extends java.time.temporal.Temporal java.lang.Comparable<java.time.chrono.ChronoZonedDateTime<?>> {
+    method public default int compareTo(java.time.chrono.ChronoZonedDateTime<?>);
+    method public boolean equals(Object);
+    method public default String format(java.time.format.DateTimeFormatter);
+    method public static java.time.chrono.ChronoZonedDateTime<?> from(java.time.temporal.TemporalAccessor);
+    method public default java.time.chrono.Chronology getChronology();
+    method public default long getLong(java.time.temporal.TemporalField);
+    method public java.time.ZoneOffset getOffset();
+    method public java.time.ZoneId getZone();
+    method public int hashCode();
+    method public default boolean isAfter(java.time.chrono.ChronoZonedDateTime<?>);
+    method public default boolean isBefore(java.time.chrono.ChronoZonedDateTime<?>);
+    method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
+    method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
+    method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
+    method public default long toEpochSecond();
+    method public default java.time.Instant toInstant();
+    method public default D toLocalDate();
+    method public java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
+    method public default java.time.LocalTime toLocalTime();
+    method public String toString();
+    method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
+    method public java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
+    method public java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
+    method public java.time.chrono.ChronoZonedDateTime<D> withZoneSameInstant(java.time.ZoneId);
+    method public java.time.chrono.ChronoZonedDateTime<D> withZoneSameLocal(java.time.ZoneId);
+  }
+
+  public interface Chronology extends java.lang.Comparable<java.time.chrono.Chronology> {
+    method public int compareTo(java.time.chrono.Chronology);
+    method public default java.time.chrono.ChronoLocalDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.ChronoLocalDate date(int, int, int);
+    method public java.time.chrono.ChronoLocalDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoLocalDate dateEpochDay(long);
+    method public default java.time.chrono.ChronoLocalDate dateNow();
+    method public default java.time.chrono.ChronoLocalDate dateNow(java.time.ZoneId);
+    method public default java.time.chrono.ChronoLocalDate dateNow(java.time.Clock);
+    method public default java.time.chrono.ChronoLocalDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.ChronoLocalDate dateYearDay(int, int);
+    method public boolean equals(Object);
+    method public java.time.chrono.Era eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public static java.time.chrono.Chronology from(java.time.temporal.TemporalAccessor);
+    method public static java.util.Set<java.time.chrono.Chronology> getAvailableChronologies();
+    method public String getCalendarType();
+    method public default String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public String getId();
+    method public int hashCode();
+    method public boolean isLeapYear(long);
+    method public default java.time.chrono.ChronoLocalDateTime<? extends java.time.chrono.ChronoLocalDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public static java.time.chrono.Chronology of(String);
+    method public static java.time.chrono.Chronology ofLocale(java.util.Locale);
+    method public default java.time.chrono.ChronoPeriod period(int, int, int);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.ChronoLocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public String toString();
+    method public default java.time.chrono.ChronoZonedDateTime<? extends java.time.chrono.ChronoLocalDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public default java.time.chrono.ChronoZonedDateTime<? extends java.time.chrono.ChronoLocalDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+  }
+
+  public interface Era extends java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public default java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public default String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public default long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public default boolean isSupported(java.time.temporal.TemporalField);
+  }
+
+  public final class HijrahChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.HijrahDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.HijrahDate date(int, int, int);
+    method public java.time.chrono.HijrahDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.HijrahDate dateEpochDay(long);
+    method public java.time.chrono.HijrahDate dateNow();
+    method public java.time.chrono.HijrahDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.HijrahDate dateNow(java.time.Clock);
+    method public java.time.chrono.HijrahDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.HijrahDate dateYearDay(int, int);
+    method public java.time.chrono.HijrahEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.HijrahChronology INSTANCE;
+  }
+
+  public final class HijrahDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.HijrahDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.HijrahChronology getChronology();
+    method public java.time.chrono.HijrahEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.HijrahDate now();
+    method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
+    method public static java.time.chrono.HijrahDate now(java.time.Clock);
+    method public static java.time.chrono.HijrahDate of(int, int, int);
+    method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
+    method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
+  }
+
+  public enum HijrahEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.HijrahEra of(int);
+    enum_constant public static final java.time.chrono.HijrahEra AH;
+  }
+
+  public final class IsoChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.LocalDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.LocalDate date(int, int, int);
+    method public java.time.LocalDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.LocalDate dateEpochDay(long);
+    method public java.time.LocalDate dateNow();
+    method public java.time.LocalDate dateNow(java.time.ZoneId);
+    method public java.time.LocalDate dateNow(java.time.Clock);
+    method public java.time.LocalDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.LocalDate dateYearDay(int, int);
+    method public java.time.chrono.IsoEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.LocalDateTime localDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.Period period(int, int, int);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.IsoChronology INSTANCE;
+  }
+
+  public enum IsoEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.IsoEra of(int);
+    enum_constant public static final java.time.chrono.IsoEra BCE;
+    enum_constant public static final java.time.chrono.IsoEra CE;
+  }
+
+  public final class JapaneseChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.JapaneseDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.JapaneseDate date(int, int, int);
+    method public java.time.chrono.JapaneseDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.JapaneseDate dateEpochDay(long);
+    method public java.time.chrono.JapaneseDate dateNow();
+    method public java.time.chrono.JapaneseDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.JapaneseDate dateNow(java.time.Clock);
+    method public java.time.chrono.JapaneseDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.JapaneseDate dateYearDay(int, int);
+    method public java.time.chrono.JapaneseEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.JapaneseChronology INSTANCE;
+  }
+
+  public final class JapaneseDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.JapaneseDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.JapaneseChronology getChronology();
+    method public java.time.chrono.JapaneseEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.JapaneseDate now();
+    method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
+    method public static java.time.chrono.JapaneseDate now(java.time.Clock);
+    method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
+    method public static java.time.chrono.JapaneseDate of(int, int, int);
+    method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
+  }
+
+  public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
+    method public int getValue();
+    method public static java.time.chrono.JapaneseEra of(int);
+    method public static java.time.chrono.JapaneseEra valueOf(String);
+    method public static java.time.chrono.JapaneseEra[] values();
+    field public static final java.time.chrono.JapaneseEra HEISEI;
+    field public static final java.time.chrono.JapaneseEra MEIJI;
+    field public static final java.time.chrono.JapaneseEra REIWA;
+    field public static final java.time.chrono.JapaneseEra SHOWA;
+    field public static final java.time.chrono.JapaneseEra TAISHO;
+  }
+
+  public final class MinguoChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.MinguoDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.MinguoDate date(int, int, int);
+    method public java.time.chrono.MinguoDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.MinguoDate dateEpochDay(long);
+    method public java.time.chrono.MinguoDate dateNow();
+    method public java.time.chrono.MinguoDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.MinguoDate dateNow(java.time.Clock);
+    method public java.time.chrono.MinguoDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.MinguoDate dateYearDay(int, int);
+    method public java.time.chrono.MinguoEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.MinguoChronology INSTANCE;
+  }
+
+  public final class MinguoDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.MinguoDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.MinguoChronology getChronology();
+    method public java.time.chrono.MinguoEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.MinguoDate now();
+    method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
+    method public static java.time.chrono.MinguoDate now(java.time.Clock);
+    method public static java.time.chrono.MinguoDate of(int, int, int);
+    method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
+  }
+
+  public enum MinguoEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.MinguoEra of(int);
+    enum_constant public static final java.time.chrono.MinguoEra BEFORE_ROC;
+    enum_constant public static final java.time.chrono.MinguoEra ROC;
+  }
+
+  public final class ThaiBuddhistChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.ThaiBuddhistDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.ThaiBuddhistDate date(int, int, int);
+    method public java.time.chrono.ThaiBuddhistDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ThaiBuddhistDate dateEpochDay(long);
+    method public java.time.chrono.ThaiBuddhistDate dateNow();
+    method public java.time.chrono.ThaiBuddhistDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.ThaiBuddhistDate dateNow(java.time.Clock);
+    method public java.time.chrono.ThaiBuddhistDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.ThaiBuddhistDate dateYearDay(int, int);
+    method public java.time.chrono.ThaiBuddhistEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
+  }
+
+  public final class ThaiBuddhistDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.ThaiBuddhistDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ThaiBuddhistChronology getChronology();
+    method public java.time.chrono.ThaiBuddhistEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.ThaiBuddhistDate now();
+    method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
+    method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
+    method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
+    method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
+  }
+
+  public enum ThaiBuddhistEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.ThaiBuddhistEra of(int);
+    enum_constant public static final java.time.chrono.ThaiBuddhistEra BE;
+    enum_constant public static final java.time.chrono.ThaiBuddhistEra BEFORE_BE;
+  }
+
+}
+
+package java.time.format {
+
+  public final class DateTimeFormatter {
+    method public String format(java.time.temporal.TemporalAccessor);
+    method public void formatTo(java.time.temporal.TemporalAccessor, Appendable);
+    method public java.time.chrono.Chronology getChronology();
+    method public java.time.format.DecimalStyle getDecimalStyle();
+    method public java.util.Locale getLocale();
+    method public java.util.Set<java.time.temporal.TemporalField> getResolverFields();
+    method public java.time.format.ResolverStyle getResolverStyle();
+    method public java.time.ZoneId getZone();
+    method public static java.time.format.DateTimeFormatter ofLocalizedDate(java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofLocalizedDateTime(java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofLocalizedDateTime(java.time.format.FormatStyle, java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofLocalizedTime(java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofPattern(String);
+    method public static java.time.format.DateTimeFormatter ofPattern(String, java.util.Locale);
+    method public java.time.temporal.TemporalAccessor parse(CharSequence);
+    method public java.time.temporal.TemporalAccessor parse(CharSequence, java.text.ParsePosition);
+    method public <T> T parse(CharSequence, java.time.temporal.TemporalQuery<T>);
+    method public java.time.temporal.TemporalAccessor parseBest(CharSequence, java.time.temporal.TemporalQuery<?>...);
+    method public java.time.temporal.TemporalAccessor parseUnresolved(CharSequence, java.text.ParsePosition);
+    method public static java.time.temporal.TemporalQuery<java.time.Period> parsedExcessDays();
+    method public static java.time.temporal.TemporalQuery<java.lang.Boolean> parsedLeapSecond();
+    method public java.text.Format toFormat();
+    method public java.text.Format toFormat(java.time.temporal.TemporalQuery<?>);
+    method public java.time.format.DateTimeFormatter withChronology(java.time.chrono.Chronology);
+    method public java.time.format.DateTimeFormatter withDecimalStyle(java.time.format.DecimalStyle);
+    method public java.time.format.DateTimeFormatter withLocale(java.util.Locale);
+    method public java.time.format.DateTimeFormatter withResolverFields(java.time.temporal.TemporalField...);
+    method public java.time.format.DateTimeFormatter withResolverFields(java.util.Set<java.time.temporal.TemporalField>);
+    method public java.time.format.DateTimeFormatter withResolverStyle(java.time.format.ResolverStyle);
+    method public java.time.format.DateTimeFormatter withZone(java.time.ZoneId);
+    field public static final java.time.format.DateTimeFormatter BASIC_ISO_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_INSTANT;
+    field public static final java.time.format.DateTimeFormatter ISO_LOCAL_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_LOCAL_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_LOCAL_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_OFFSET_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_OFFSET_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_OFFSET_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_ORDINAL_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_WEEK_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_ZONED_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter RFC_1123_DATE_TIME;
+  }
+
+  public final class DateTimeFormatterBuilder {
+    ctor public DateTimeFormatterBuilder();
+    method public java.time.format.DateTimeFormatterBuilder append(java.time.format.DateTimeFormatter);
+    method public java.time.format.DateTimeFormatterBuilder appendChronologyId();
+    method public java.time.format.DateTimeFormatterBuilder appendChronologyText(java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendFraction(java.time.temporal.TemporalField, int, int, boolean);
+    method public java.time.format.DateTimeFormatterBuilder appendInstant();
+    method public java.time.format.DateTimeFormatterBuilder appendInstant(int);
+    method public java.time.format.DateTimeFormatterBuilder appendLiteral(char);
+    method public java.time.format.DateTimeFormatterBuilder appendLiteral(String);
+    method public java.time.format.DateTimeFormatterBuilder appendLocalized(java.time.format.FormatStyle, java.time.format.FormatStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendLocalizedOffset(java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendOffset(String, String);
+    method public java.time.format.DateTimeFormatterBuilder appendOffsetId();
+    method public java.time.format.DateTimeFormatterBuilder appendOptional(java.time.format.DateTimeFormatter);
+    method public java.time.format.DateTimeFormatterBuilder appendPattern(String);
+    method public java.time.format.DateTimeFormatterBuilder appendText(java.time.temporal.TemporalField);
+    method public java.time.format.DateTimeFormatterBuilder appendText(java.time.temporal.TemporalField, java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendText(java.time.temporal.TemporalField, java.util.Map<java.lang.Long,java.lang.String>);
+    method public java.time.format.DateTimeFormatterBuilder appendValue(java.time.temporal.TemporalField);
+    method public java.time.format.DateTimeFormatterBuilder appendValue(java.time.temporal.TemporalField, int);
+    method public java.time.format.DateTimeFormatterBuilder appendValue(java.time.temporal.TemporalField, int, int, java.time.format.SignStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendValueReduced(java.time.temporal.TemporalField, int, int, int);
+    method public java.time.format.DateTimeFormatterBuilder appendValueReduced(java.time.temporal.TemporalField, int, int, java.time.chrono.ChronoLocalDate);
+    method public java.time.format.DateTimeFormatterBuilder appendZoneId();
+    method public java.time.format.DateTimeFormatterBuilder appendZoneOrOffsetId();
+    method public java.time.format.DateTimeFormatterBuilder appendZoneRegionId();
+    method public java.time.format.DateTimeFormatterBuilder appendZoneText(java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendZoneText(java.time.format.TextStyle, java.util.Set<java.time.ZoneId>);
+    method public static String getLocalizedDateTimePattern(java.time.format.FormatStyle, java.time.format.FormatStyle, java.time.chrono.Chronology, java.util.Locale);
+    method public java.time.format.DateTimeFormatterBuilder optionalEnd();
+    method public java.time.format.DateTimeFormatterBuilder optionalStart();
+    method public java.time.format.DateTimeFormatterBuilder padNext(int);
+    method public java.time.format.DateTimeFormatterBuilder padNext(int, char);
+    method public java.time.format.DateTimeFormatterBuilder parseCaseInsensitive();
+    method public java.time.format.DateTimeFormatterBuilder parseCaseSensitive();
+    method public java.time.format.DateTimeFormatterBuilder parseDefaulting(java.time.temporal.TemporalField, long);
+    method public java.time.format.DateTimeFormatterBuilder parseLenient();
+    method public java.time.format.DateTimeFormatterBuilder parseStrict();
+    method public java.time.format.DateTimeFormatter toFormatter();
+    method public java.time.format.DateTimeFormatter toFormatter(java.util.Locale);
+  }
+
+  public class DateTimeParseException extends java.time.DateTimeException {
+    ctor public DateTimeParseException(String, CharSequence, int);
+    ctor public DateTimeParseException(String, CharSequence, int, Throwable);
+    method public int getErrorIndex();
+    method public String getParsedString();
+  }
+
+  public final class DecimalStyle {
+    method public static java.util.Set<java.util.Locale> getAvailableLocales();
+    method public char getDecimalSeparator();
+    method public char getNegativeSign();
+    method public char getPositiveSign();
+    method public char getZeroDigit();
+    method public static java.time.format.DecimalStyle of(java.util.Locale);
+    method public static java.time.format.DecimalStyle ofDefaultLocale();
+    method public java.time.format.DecimalStyle withDecimalSeparator(char);
+    method public java.time.format.DecimalStyle withNegativeSign(char);
+    method public java.time.format.DecimalStyle withPositiveSign(char);
+    method public java.time.format.DecimalStyle withZeroDigit(char);
+    field public static final java.time.format.DecimalStyle STANDARD;
+  }
+
+  public enum FormatStyle {
+    enum_constant public static final java.time.format.FormatStyle FULL;
+    enum_constant public static final java.time.format.FormatStyle LONG;
+    enum_constant public static final java.time.format.FormatStyle MEDIUM;
+    enum_constant public static final java.time.format.FormatStyle SHORT;
+  }
+
+  public enum ResolverStyle {
+    enum_constant public static final java.time.format.ResolverStyle LENIENT;
+    enum_constant public static final java.time.format.ResolverStyle SMART;
+    enum_constant public static final java.time.format.ResolverStyle STRICT;
+  }
+
+  public enum SignStyle {
+    enum_constant public static final java.time.format.SignStyle ALWAYS;
+    enum_constant public static final java.time.format.SignStyle EXCEEDS_PAD;
+    enum_constant public static final java.time.format.SignStyle NEVER;
+    enum_constant public static final java.time.format.SignStyle NORMAL;
+    enum_constant public static final java.time.format.SignStyle NOT_NEGATIVE;
+  }
+
+  public enum TextStyle {
+    method public java.time.format.TextStyle asNormal();
+    method public java.time.format.TextStyle asStandalone();
+    method public boolean isStandalone();
+    enum_constant public static final java.time.format.TextStyle FULL;
+    enum_constant public static final java.time.format.TextStyle FULL_STANDALONE;
+    enum_constant public static final java.time.format.TextStyle NARROW;
+    enum_constant public static final java.time.format.TextStyle NARROW_STANDALONE;
+    enum_constant public static final java.time.format.TextStyle SHORT;
+    enum_constant public static final java.time.format.TextStyle SHORT_STANDALONE;
+  }
+
+}
+
+package java.time.temporal {
+
+  public enum ChronoField implements java.time.temporal.TemporalField {
+    method public <R extends java.time.temporal.Temporal> R adjustInto(R, long);
+    method public int checkValidIntValue(long);
+    method public long checkValidValue(long);
+    method public java.time.temporal.TemporalUnit getBaseUnit();
+    method public long getFrom(java.time.temporal.TemporalAccessor);
+    method public java.time.temporal.TemporalUnit getRangeUnit();
+    method public boolean isDateBased();
+    method public boolean isSupportedBy(java.time.temporal.TemporalAccessor);
+    method public boolean isTimeBased();
+    method public java.time.temporal.ValueRange range();
+    method public java.time.temporal.ValueRange rangeRefinedBy(java.time.temporal.TemporalAccessor);
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_DAY_OF_WEEK_IN_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_DAY_OF_WEEK_IN_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_WEEK_OF_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_WEEK_OF_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField AMPM_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField CLOCK_HOUR_OF_AMPM;
+    enum_constant public static final java.time.temporal.ChronoField CLOCK_HOUR_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField DAY_OF_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField DAY_OF_WEEK;
+    enum_constant public static final java.time.temporal.ChronoField DAY_OF_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField EPOCH_DAY;
+    enum_constant public static final java.time.temporal.ChronoField ERA;
+    enum_constant public static final java.time.temporal.ChronoField HOUR_OF_AMPM;
+    enum_constant public static final java.time.temporal.ChronoField HOUR_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField INSTANT_SECONDS;
+    enum_constant public static final java.time.temporal.ChronoField MICRO_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField MICRO_OF_SECOND;
+    enum_constant public static final java.time.temporal.ChronoField MILLI_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField MILLI_OF_SECOND;
+    enum_constant public static final java.time.temporal.ChronoField MINUTE_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField MINUTE_OF_HOUR;
+    enum_constant public static final java.time.temporal.ChronoField MONTH_OF_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField NANO_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField NANO_OF_SECOND;
+    enum_constant public static final java.time.temporal.ChronoField OFFSET_SECONDS;
+    enum_constant public static final java.time.temporal.ChronoField PROLEPTIC_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField SECOND_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField SECOND_OF_MINUTE;
+    enum_constant public static final java.time.temporal.ChronoField YEAR;
+    enum_constant public static final java.time.temporal.ChronoField YEAR_OF_ERA;
+  }
+
+  public enum ChronoUnit implements java.time.temporal.TemporalUnit {
+    method public <R extends java.time.temporal.Temporal> R addTo(R, long);
+    method public long between(java.time.temporal.Temporal, java.time.temporal.Temporal);
+    method public java.time.Duration getDuration();
+    method public boolean isDateBased();
+    method public boolean isDurationEstimated();
+    method public boolean isTimeBased();
+    enum_constant public static final java.time.temporal.ChronoUnit CENTURIES;
+    enum_constant public static final java.time.temporal.ChronoUnit DAYS;
+    enum_constant public static final java.time.temporal.ChronoUnit DECADES;
+    enum_constant public static final java.time.temporal.ChronoUnit ERAS;
+    enum_constant public static final java.time.temporal.ChronoUnit FOREVER;
+    enum_constant public static final java.time.temporal.ChronoUnit HALF_DAYS;
+    enum_constant public static final java.time.temporal.ChronoUnit HOURS;
+    enum_constant public static final java.time.temporal.ChronoUnit MICROS;
+    enum_constant public static final java.time.temporal.ChronoUnit MILLENNIA;
+    enum_constant public static final java.time.temporal.ChronoUnit MILLIS;
+    enum_constant public static final java.time.temporal.ChronoUnit MINUTES;
+    enum_constant public static final java.time.temporal.ChronoUnit MONTHS;
+    enum_constant public static final java.time.temporal.ChronoUnit NANOS;
+    enum_constant public static final java.time.temporal.ChronoUnit SECONDS;
+    enum_constant public static final java.time.temporal.ChronoUnit WEEKS;
+    enum_constant public static final java.time.temporal.ChronoUnit YEARS;
+  }
+
+  public final class IsoFields {
+    field public static final java.time.temporal.TemporalField DAY_OF_QUARTER;
+    field public static final java.time.temporal.TemporalField QUARTER_OF_YEAR;
+    field public static final java.time.temporal.TemporalUnit QUARTER_YEARS;
+    field public static final java.time.temporal.TemporalField WEEK_BASED_YEAR;
+    field public static final java.time.temporal.TemporalUnit WEEK_BASED_YEARS;
+    field public static final java.time.temporal.TemporalField WEEK_OF_WEEK_BASED_YEAR;
+  }
+
+  public final class JulianFields {
+    field public static final java.time.temporal.TemporalField JULIAN_DAY;
+    field public static final java.time.temporal.TemporalField MODIFIED_JULIAN_DAY;
+    field public static final java.time.temporal.TemporalField RATA_DIE;
+  }
+
+  public interface Temporal extends java.time.temporal.TemporalAccessor {
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.temporal.Temporal minus(java.time.temporal.TemporalAmount);
+    method public default java.time.temporal.Temporal minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.temporal.Temporal plus(java.time.temporal.TemporalAmount);
+    method public java.time.temporal.Temporal plus(long, java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public default java.time.temporal.Temporal with(java.time.temporal.TemporalAdjuster);
+    method public java.time.temporal.Temporal with(java.time.temporal.TemporalField, long);
+  }
+
+  public interface TemporalAccessor {
+    method public default int get(java.time.temporal.TemporalField);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public default <R> R query(java.time.temporal.TemporalQuery<R>);
+    method public default java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
+  }
+
+  @java.lang.FunctionalInterface public interface TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+  }
+
+  public final class TemporalAdjusters {
+    method public static java.time.temporal.TemporalAdjuster dayOfWeekInMonth(int, java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster firstDayOfMonth();
+    method public static java.time.temporal.TemporalAdjuster firstDayOfNextMonth();
+    method public static java.time.temporal.TemporalAdjuster firstDayOfNextYear();
+    method public static java.time.temporal.TemporalAdjuster firstDayOfYear();
+    method public static java.time.temporal.TemporalAdjuster firstInMonth(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster lastDayOfMonth();
+    method public static java.time.temporal.TemporalAdjuster lastDayOfYear();
+    method public static java.time.temporal.TemporalAdjuster lastInMonth(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster next(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster nextOrSame(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster ofDateAdjuster(java.util.function.UnaryOperator<java.time.LocalDate>);
+    method public static java.time.temporal.TemporalAdjuster previous(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster previousOrSame(java.time.DayOfWeek);
+  }
+
+  public interface TemporalAmount {
+    method public java.time.temporal.Temporal addTo(java.time.temporal.Temporal);
+    method public long get(java.time.temporal.TemporalUnit);
+    method public java.util.List<java.time.temporal.TemporalUnit> getUnits();
+    method public java.time.temporal.Temporal subtractFrom(java.time.temporal.Temporal);
+  }
+
+  public interface TemporalField {
+    method public <R extends java.time.temporal.Temporal> R adjustInto(R, long);
+    method public java.time.temporal.TemporalUnit getBaseUnit();
+    method public default String getDisplayName(java.util.Locale);
+    method public long getFrom(java.time.temporal.TemporalAccessor);
+    method public java.time.temporal.TemporalUnit getRangeUnit();
+    method public boolean isDateBased();
+    method public boolean isSupportedBy(java.time.temporal.TemporalAccessor);
+    method public boolean isTimeBased();
+    method public java.time.temporal.ValueRange range();
+    method public java.time.temporal.ValueRange rangeRefinedBy(java.time.temporal.TemporalAccessor);
+    method public default java.time.temporal.TemporalAccessor resolve(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.temporal.TemporalAccessor, java.time.format.ResolverStyle);
+    method public String toString();
+  }
+
+  public final class TemporalQueries {
+    method public static java.time.temporal.TemporalQuery<java.time.chrono.Chronology> chronology();
+    method public static java.time.temporal.TemporalQuery<java.time.LocalDate> localDate();
+    method public static java.time.temporal.TemporalQuery<java.time.LocalTime> localTime();
+    method public static java.time.temporal.TemporalQuery<java.time.ZoneOffset> offset();
+    method public static java.time.temporal.TemporalQuery<java.time.temporal.TemporalUnit> precision();
+    method public static java.time.temporal.TemporalQuery<java.time.ZoneId> zone();
+    method public static java.time.temporal.TemporalQuery<java.time.ZoneId> zoneId();
+  }
+
+  @java.lang.FunctionalInterface public interface TemporalQuery<R> {
+    method public R queryFrom(java.time.temporal.TemporalAccessor);
+  }
+
+  public interface TemporalUnit {
+    method public <R extends java.time.temporal.Temporal> R addTo(R, long);
+    method public long between(java.time.temporal.Temporal, java.time.temporal.Temporal);
+    method public java.time.Duration getDuration();
+    method public boolean isDateBased();
+    method public boolean isDurationEstimated();
+    method public default boolean isSupportedBy(java.time.temporal.Temporal);
+    method public boolean isTimeBased();
+    method public String toString();
+  }
+
+  public class UnsupportedTemporalTypeException extends java.time.DateTimeException {
+    ctor public UnsupportedTemporalTypeException(String);
+    ctor public UnsupportedTemporalTypeException(String, Throwable);
+  }
+
+  public final class ValueRange implements java.io.Serializable {
+    method public int checkValidIntValue(long, java.time.temporal.TemporalField);
+    method public long checkValidValue(long, java.time.temporal.TemporalField);
+    method public long getLargestMinimum();
+    method public long getMaximum();
+    method public long getMinimum();
+    method public long getSmallestMaximum();
+    method public boolean isFixed();
+    method public boolean isIntValue();
+    method public boolean isValidIntValue(long);
+    method public boolean isValidValue(long);
+    method public static java.time.temporal.ValueRange of(long, long);
+    method public static java.time.temporal.ValueRange of(long, long, long);
+    method public static java.time.temporal.ValueRange of(long, long, long, long);
+  }
+
+  public final class WeekFields implements java.io.Serializable {
+    method public java.time.temporal.TemporalField dayOfWeek();
+    method public java.time.DayOfWeek getFirstDayOfWeek();
+    method public int getMinimalDaysInFirstWeek();
+    method public static java.time.temporal.WeekFields of(java.util.Locale);
+    method public static java.time.temporal.WeekFields of(java.time.DayOfWeek, int);
+    method public java.time.temporal.TemporalField weekBasedYear();
+    method public java.time.temporal.TemporalField weekOfMonth();
+    method public java.time.temporal.TemporalField weekOfWeekBasedYear();
+    method public java.time.temporal.TemporalField weekOfYear();
+    field public static final java.time.temporal.WeekFields ISO;
+    field public static final java.time.temporal.WeekFields SUNDAY_START;
+    field public static final java.time.temporal.TemporalUnit WEEK_BASED_YEARS;
+  }
+
+}
+
+package java.time.zone {
+
+  public final class ZoneOffsetTransition implements java.lang.Comparable<java.time.zone.ZoneOffsetTransition> java.io.Serializable {
+    method public int compareTo(java.time.zone.ZoneOffsetTransition);
+    method public java.time.LocalDateTime getDateTimeAfter();
+    method public java.time.LocalDateTime getDateTimeBefore();
+    method public java.time.Duration getDuration();
+    method public java.time.Instant getInstant();
+    method public java.time.ZoneOffset getOffsetAfter();
+    method public java.time.ZoneOffset getOffsetBefore();
+    method public boolean isGap();
+    method public boolean isOverlap();
+    method public boolean isValidOffset(java.time.ZoneOffset);
+    method public static java.time.zone.ZoneOffsetTransition of(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneOffset);
+    method public long toEpochSecond();
+  }
+
+  public final class ZoneOffsetTransitionRule implements java.io.Serializable {
+    method public java.time.zone.ZoneOffsetTransition createTransition(int);
+    method public int getDayOfMonthIndicator();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public java.time.LocalTime getLocalTime();
+    method public java.time.Month getMonth();
+    method public java.time.ZoneOffset getOffsetAfter();
+    method public java.time.ZoneOffset getOffsetBefore();
+    method public java.time.ZoneOffset getStandardOffset();
+    method public java.time.zone.ZoneOffsetTransitionRule.TimeDefinition getTimeDefinition();
+    method public boolean isMidnightEndOfDay();
+    method public static java.time.zone.ZoneOffsetTransitionRule of(java.time.Month, int, java.time.DayOfWeek, java.time.LocalTime, boolean, java.time.zone.ZoneOffsetTransitionRule.TimeDefinition, java.time.ZoneOffset, java.time.ZoneOffset, java.time.ZoneOffset);
+  }
+
+  public enum ZoneOffsetTransitionRule.TimeDefinition {
+    method public java.time.LocalDateTime createDateTime(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneOffset);
+    enum_constant public static final java.time.zone.ZoneOffsetTransitionRule.TimeDefinition STANDARD;
+    enum_constant public static final java.time.zone.ZoneOffsetTransitionRule.TimeDefinition UTC;
+    enum_constant public static final java.time.zone.ZoneOffsetTransitionRule.TimeDefinition WALL;
+  }
+
+  public final class ZoneRules implements java.io.Serializable {
+    method public java.time.Duration getDaylightSavings(java.time.Instant);
+    method public java.time.ZoneOffset getOffset(java.time.Instant);
+    method public java.time.ZoneOffset getOffset(java.time.LocalDateTime);
+    method public java.time.ZoneOffset getStandardOffset(java.time.Instant);
+    method public java.time.zone.ZoneOffsetTransition getTransition(java.time.LocalDateTime);
+    method public java.util.List<java.time.zone.ZoneOffsetTransitionRule> getTransitionRules();
+    method public java.util.List<java.time.zone.ZoneOffsetTransition> getTransitions();
+    method public java.util.List<java.time.ZoneOffset> getValidOffsets(java.time.LocalDateTime);
+    method public boolean isDaylightSavings(java.time.Instant);
+    method public boolean isFixedOffset();
+    method public boolean isValidOffset(java.time.LocalDateTime, java.time.ZoneOffset);
+    method public java.time.zone.ZoneOffsetTransition nextTransition(java.time.Instant);
+    method public static java.time.zone.ZoneRules of(java.time.ZoneOffset, java.time.ZoneOffset, java.util.List<java.time.zone.ZoneOffsetTransition>, java.util.List<java.time.zone.ZoneOffsetTransition>, java.util.List<java.time.zone.ZoneOffsetTransitionRule>);
+    method public static java.time.zone.ZoneRules of(java.time.ZoneOffset);
+    method public java.time.zone.ZoneOffsetTransition previousTransition(java.time.Instant);
+  }
+
+  public class ZoneRulesException extends java.time.DateTimeException {
+    ctor public ZoneRulesException(String);
+    ctor public ZoneRulesException(String, Throwable);
+  }
+
+}
+
+package java.util {
+
+  public abstract class AbstractCollection<E> implements java.util.Collection<E> {
+    ctor protected AbstractCollection();
+    method public boolean add(E);
+    method public boolean addAll(@NonNull java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(@Nullable Object);
+    method public boolean containsAll(@NonNull java.util.Collection<?>);
+    method public boolean isEmpty();
+    method public boolean remove(@Nullable Object);
+    method public boolean removeAll(@NonNull java.util.Collection<?>);
+    method public boolean retainAll(@NonNull java.util.Collection<?>);
+    method @NonNull public Object[] toArray();
+    method @NonNull public <T> T[] toArray(@NonNull T[]);
+  }
+
+  public abstract class AbstractList<E> extends java.util.AbstractCollection<E> implements java.util.List<E> {
+    ctor protected AbstractList();
+    method public void add(int, E);
+    method public boolean addAll(int, @NonNull java.util.Collection<? extends E>);
+    method public int indexOf(@Nullable Object);
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public int lastIndexOf(@Nullable Object);
+    method @NonNull public java.util.ListIterator<E> listIterator();
+    method @NonNull public java.util.ListIterator<E> listIterator(int);
+    method public E remove(int);
+    method protected void removeRange(int, int);
+    method public E set(int, E);
+    method @NonNull public java.util.List<E> subList(int, int);
+    field protected transient int modCount;
+  }
+
+  public abstract class AbstractMap<K, V> implements java.util.Map<K,V> {
+    ctor protected AbstractMap();
+    method public void clear();
+    method public boolean containsKey(@Nullable Object);
+    method public boolean containsValue(@Nullable Object);
+    method @Nullable public V get(@Nullable Object);
+    method public boolean isEmpty();
+    method @NonNull public java.util.Set<K> keySet();
+    method @Nullable public V put(K, V);
+    method public void putAll(@NonNull java.util.Map<? extends K,? extends V>);
+    method @Nullable public V remove(@Nullable Object);
+    method public int size();
+    method @NonNull public java.util.Collection<V> values();
+  }
+
+  public static class AbstractMap.SimpleEntry<K, V> implements java.util.Map.Entry<K,V> java.io.Serializable {
+    ctor public AbstractMap.SimpleEntry(K, V);
+    ctor public AbstractMap.SimpleEntry(@NonNull java.util.Map.Entry<? extends K,? extends V>);
+    method public K getKey();
+    method public V getValue();
+    method public V setValue(V);
+  }
+
+  public static class AbstractMap.SimpleImmutableEntry<K, V> implements java.util.Map.Entry<K,V> java.io.Serializable {
+    ctor public AbstractMap.SimpleImmutableEntry(K, V);
+    ctor public AbstractMap.SimpleImmutableEntry(@NonNull java.util.Map.Entry<? extends K,? extends V>);
+    method public K getKey();
+    method public V getValue();
+    method public V setValue(V);
+  }
+
+  public abstract class AbstractQueue<E> extends java.util.AbstractCollection<E> implements java.util.Queue<E> {
+    ctor protected AbstractQueue();
+    method public E element();
+    method public E remove();
+  }
+
+  public abstract class AbstractSequentialList<E> extends java.util.AbstractList<E> {
+    ctor protected AbstractSequentialList();
+    method public E get(int);
+  }
+
+  public abstract class AbstractSet<E> extends java.util.AbstractCollection<E> implements java.util.Set<E> {
+    ctor protected AbstractSet();
+  }
+
+  public class ArrayDeque<E> extends java.util.AbstractCollection<E> implements java.lang.Cloneable java.util.Deque<E> java.io.Serializable {
+    ctor public ArrayDeque();
+    ctor public ArrayDeque(int);
+    ctor public ArrayDeque(@NonNull java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method @NonNull public java.util.ArrayDeque<E> clone();
+    method @NonNull public java.util.Iterator<E> descendingIterator();
+    method public E element();
+    method public E getFirst();
+    method public E getLast();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method @Nullable public E peek();
+    method @Nullable public E peekFirst();
+    method @Nullable public E peekLast();
+    method @Nullable public E poll();
+    method @Nullable public E pollFirst();
+    method @Nullable public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E remove();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(@Nullable Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(@Nullable Object);
+    method public int size();
+  }
+
+  public class ArrayList<E> extends java.util.AbstractList<E> implements java.lang.Cloneable java.util.List<E> java.util.RandomAccess java.io.Serializable {
+    ctor public ArrayList(int);
+    ctor public ArrayList();
+    ctor public ArrayList(@NonNull java.util.Collection<? extends E>);
+    method @NonNull public Object clone();
+    method public void ensureCapacity(int);
+    method public void forEach(@NonNull java.util.function.Consumer<? super E>);
+    method public E get(int);
+    method public int size();
+    method public void trimToSize();
+  }
+
+  public class Arrays {
+    method @NonNull @java.lang.SafeVarargs public static <T> java.util.List<T> asList(@NonNull T...);
+    method public static int binarySearch(@NonNull long[], long);
+    method public static int binarySearch(@NonNull long[], int, int, long);
+    method public static int binarySearch(@NonNull int[], int);
+    method public static int binarySearch(@NonNull int[], int, int, int);
+    method public static int binarySearch(@NonNull short[], short);
+    method public static int binarySearch(@NonNull short[], int, int, short);
+    method public static int binarySearch(@NonNull char[], char);
+    method public static int binarySearch(@NonNull char[], int, int, char);
+    method public static int binarySearch(@NonNull byte[], byte);
+    method public static int binarySearch(@NonNull byte[], int, int, byte);
+    method public static int binarySearch(@NonNull double[], double);
+    method public static int binarySearch(@NonNull double[], int, int, double);
+    method public static int binarySearch(@NonNull float[], float);
+    method public static int binarySearch(@NonNull float[], int, int, float);
+    method public static int binarySearch(@NonNull Object[], @NonNull Object);
+    method public static int binarySearch(@NonNull Object[], int, int, @NonNull Object);
+    method public static <T> int binarySearch(@NonNull T[], T, @Nullable java.util.Comparator<? super T>);
+    method public static <T> int binarySearch(@NonNull T[], int, int, T, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T> T[] copyOf(@NonNull T[], int);
+    method @NonNull public static <T, U> T[] copyOf(@NonNull U[], int, @NonNull Class<? extends T[]>);
+    method @NonNull public static byte[] copyOf(@NonNull byte[], int);
+    method @NonNull public static short[] copyOf(@NonNull short[], int);
+    method @NonNull public static int[] copyOf(@NonNull int[], int);
+    method @NonNull public static long[] copyOf(@NonNull long[], int);
+    method @NonNull public static char[] copyOf(@NonNull char[], int);
+    method @NonNull public static float[] copyOf(@NonNull float[], int);
+    method @NonNull public static double[] copyOf(@NonNull double[], int);
+    method @NonNull public static boolean[] copyOf(@NonNull boolean[], int);
+    method @NonNull public static <T> T[] copyOfRange(@NonNull T[], int, int);
+    method @NonNull public static <T, U> T[] copyOfRange(@NonNull U[], int, int, @NonNull Class<? extends T[]>);
+    method @NonNull public static byte[] copyOfRange(@NonNull byte[], int, int);
+    method @NonNull public static short[] copyOfRange(@NonNull short[], int, int);
+    method @NonNull public static int[] copyOfRange(@NonNull int[], int, int);
+    method @NonNull public static long[] copyOfRange(@NonNull long[], int, int);
+    method @NonNull public static char[] copyOfRange(@NonNull char[], int, int);
+    method @NonNull public static float[] copyOfRange(@NonNull float[], int, int);
+    method @NonNull public static double[] copyOfRange(@NonNull double[], int, int);
+    method @NonNull public static boolean[] copyOfRange(@NonNull boolean[], int, int);
+    method public static boolean deepEquals(@Nullable Object[], @Nullable Object[]);
+    method public static int deepHashCode(@Nullable Object[]);
+    method @NonNull public static String deepToString(@Nullable Object[]);
+    method public static boolean equals(@Nullable long[], @Nullable long[]);
+    method public static boolean equals(@Nullable int[], @Nullable int[]);
+    method public static boolean equals(@Nullable short[], @Nullable short[]);
+    method public static boolean equals(@Nullable char[], @Nullable char[]);
+    method public static boolean equals(@Nullable byte[], @Nullable byte[]);
+    method public static boolean equals(@Nullable boolean[], @Nullable boolean[]);
+    method public static boolean equals(@Nullable double[], @Nullable double[]);
+    method public static boolean equals(@Nullable float[], @Nullable float[]);
+    method public static boolean equals(@Nullable Object[], @Nullable Object[]);
+    method public static void fill(@NonNull long[], long);
+    method public static void fill(@NonNull long[], int, int, long);
+    method public static void fill(@NonNull int[], int);
+    method public static void fill(@NonNull int[], int, int, int);
+    method public static void fill(@NonNull short[], short);
+    method public static void fill(@NonNull short[], int, int, short);
+    method public static void fill(@NonNull char[], char);
+    method public static void fill(@NonNull char[], int, int, char);
+    method public static void fill(@NonNull byte[], byte);
+    method public static void fill(@NonNull byte[], int, int, byte);
+    method public static void fill(@NonNull boolean[], boolean);
+    method public static void fill(@NonNull boolean[], int, int, boolean);
+    method public static void fill(@NonNull double[], double);
+    method public static void fill(@NonNull double[], int, int, double);
+    method public static void fill(@NonNull float[], float);
+    method public static void fill(@NonNull float[], int, int, float);
+    method public static void fill(@NonNull Object[], @Nullable Object);
+    method public static void fill(@NonNull Object[], int, int, @Nullable Object);
+    method public static int hashCode(@Nullable long[]);
+    method public static int hashCode(@Nullable int[]);
+    method public static int hashCode(@Nullable short[]);
+    method public static int hashCode(@Nullable char[]);
+    method public static int hashCode(@Nullable byte[]);
+    method public static int hashCode(@Nullable boolean[]);
+    method public static int hashCode(@Nullable float[]);
+    method public static int hashCode(@Nullable double[]);
+    method public static int hashCode(@Nullable Object[]);
+    method public static <T> void parallelPrefix(@NonNull T[], @NonNull java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(@NonNull T[], int, int, @NonNull java.util.function.BinaryOperator<T>);
+    method public static void parallelPrefix(@NonNull long[], @NonNull java.util.function.LongBinaryOperator);
+    method public static void parallelPrefix(@NonNull long[], int, int, @NonNull java.util.function.LongBinaryOperator);
+    method public static void parallelPrefix(@NonNull double[], @NonNull java.util.function.DoubleBinaryOperator);
+    method public static void parallelPrefix(@NonNull double[], int, int, @NonNull java.util.function.DoubleBinaryOperator);
+    method public static void parallelPrefix(@NonNull int[], @NonNull java.util.function.IntBinaryOperator);
+    method public static void parallelPrefix(@NonNull int[], int, int, @NonNull java.util.function.IntBinaryOperator);
+    method public static <T> void parallelSetAll(@NonNull T[], @NonNull java.util.function.IntFunction<? extends T>);
+    method public static void parallelSetAll(@NonNull int[], @NonNull java.util.function.IntUnaryOperator);
+    method public static void parallelSetAll(@NonNull long[], @NonNull java.util.function.IntToLongFunction);
+    method public static void parallelSetAll(@NonNull double[], @NonNull java.util.function.IntToDoubleFunction);
+    method public static void parallelSort(@NonNull byte[]);
+    method public static void parallelSort(@NonNull byte[], int, int);
+    method public static void parallelSort(@NonNull char[]);
+    method public static void parallelSort(@NonNull char[], int, int);
+    method public static void parallelSort(@NonNull short[]);
+    method public static void parallelSort(@NonNull short[], int, int);
+    method public static void parallelSort(@NonNull int[]);
+    method public static void parallelSort(@NonNull int[], int, int);
+    method public static void parallelSort(@NonNull long[]);
+    method public static void parallelSort(@NonNull long[], int, int);
+    method public static void parallelSort(@NonNull float[]);
+    method public static void parallelSort(@NonNull float[], int, int);
+    method public static void parallelSort(@NonNull double[]);
+    method public static void parallelSort(@NonNull double[], int, int);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(@NonNull T[]);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(@NonNull T[], int, int);
+    method public static <T> void parallelSort(@NonNull T[], @Nullable java.util.Comparator<? super T>);
+    method public static <T> void parallelSort(@NonNull T[], int, int, @Nullable java.util.Comparator<? super T>);
+    method public static <T> void setAll(@NonNull T[], @NonNull java.util.function.IntFunction<? extends T>);
+    method public static void setAll(@NonNull int[], @NonNull java.util.function.IntUnaryOperator);
+    method public static void setAll(@NonNull long[], @NonNull java.util.function.IntToLongFunction);
+    method public static void setAll(@NonNull double[], @NonNull java.util.function.IntToDoubleFunction);
+    method public static void sort(@NonNull int[]);
+    method public static void sort(@NonNull int[], int, int);
+    method public static void sort(@NonNull long[]);
+    method public static void sort(@NonNull long[], int, int);
+    method public static void sort(@NonNull short[]);
+    method public static void sort(@NonNull short[], int, int);
+    method public static void sort(@NonNull char[]);
+    method public static void sort(@NonNull char[], int, int);
+    method public static void sort(@NonNull byte[]);
+    method public static void sort(@NonNull byte[], int, int);
+    method public static void sort(@NonNull float[]);
+    method public static void sort(@NonNull float[], int, int);
+    method public static void sort(@NonNull double[]);
+    method public static void sort(@NonNull double[], int, int);
+    method public static void sort(@NonNull Object[]);
+    method public static void sort(@NonNull Object[], int, int);
+    method public static <T> void sort(@NonNull T[], @Nullable java.util.Comparator<? super T>);
+    method public static <T> void sort(@NonNull T[], int, int, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T> java.util.Spliterator<T> spliterator(@NonNull T[]);
+    method @NonNull public static <T> java.util.Spliterator<T> spliterator(@NonNull T[], int, int);
+    method @NonNull public static java.util.Spliterator.OfInt spliterator(@NonNull int[]);
+    method @NonNull public static java.util.Spliterator.OfInt spliterator(@NonNull int[], int, int);
+    method @NonNull public static java.util.Spliterator.OfLong spliterator(@NonNull long[]);
+    method @NonNull public static java.util.Spliterator.OfLong spliterator(@NonNull long[], int, int);
+    method @NonNull public static java.util.Spliterator.OfDouble spliterator(@NonNull double[]);
+    method @NonNull public static java.util.Spliterator.OfDouble spliterator(@NonNull double[], int, int);
+    method @NonNull public static <T> java.util.stream.Stream<T> stream(@NonNull T[]);
+    method @NonNull public static <T> java.util.stream.Stream<T> stream(@NonNull T[], int, int);
+    method @NonNull public static java.util.stream.IntStream stream(@NonNull int[]);
+    method @NonNull public static java.util.stream.IntStream stream(@NonNull int[], int, int);
+    method @NonNull public static java.util.stream.LongStream stream(@NonNull long[]);
+    method @NonNull public static java.util.stream.LongStream stream(@NonNull long[], int, int);
+    method @NonNull public static java.util.stream.DoubleStream stream(@NonNull double[]);
+    method @NonNull public static java.util.stream.DoubleStream stream(@NonNull double[], int, int);
+    method @NonNull public static String toString(@Nullable long[]);
+    method @NonNull public static String toString(@Nullable int[]);
+    method @NonNull public static String toString(@Nullable short[]);
+    method @NonNull public static String toString(@Nullable char[]);
+    method @NonNull public static String toString(@Nullable byte[]);
+    method @NonNull public static String toString(@Nullable boolean[]);
+    method @NonNull public static String toString(@Nullable float[]);
+    method @NonNull public static String toString(@Nullable double[]);
+    method @NonNull public static String toString(@Nullable Object[]);
+  }
+
+  public class Base64 {
+    method public static java.util.Base64.Decoder getDecoder();
+    method public static java.util.Base64.Encoder getEncoder();
+    method public static java.util.Base64.Decoder getMimeDecoder();
+    method public static java.util.Base64.Encoder getMimeEncoder();
+    method public static java.util.Base64.Encoder getMimeEncoder(int, byte[]);
+    method public static java.util.Base64.Decoder getUrlDecoder();
+    method public static java.util.Base64.Encoder getUrlEncoder();
+  }
+
+  public static class Base64.Decoder {
+    method public byte[] decode(byte[]);
+    method public byte[] decode(String);
+    method public int decode(byte[], byte[]);
+    method public java.nio.ByteBuffer decode(java.nio.ByteBuffer);
+    method public java.io.InputStream wrap(java.io.InputStream);
+  }
+
+  public static class Base64.Encoder {
+    method public byte[] encode(byte[]);
+    method public int encode(byte[], byte[]);
+    method public java.nio.ByteBuffer encode(java.nio.ByteBuffer);
+    method public String encodeToString(byte[]);
+    method public java.util.Base64.Encoder withoutPadding();
+    method public java.io.OutputStream wrap(java.io.OutputStream);
+  }
+
+  public class BitSet implements java.lang.Cloneable java.io.Serializable {
+    ctor public BitSet();
+    ctor public BitSet(int);
+    method public void and(java.util.BitSet);
+    method public void andNot(java.util.BitSet);
+    method public int cardinality();
+    method public void clear(int);
+    method public void clear(int, int);
+    method public void clear();
+    method public Object clone();
+    method public void flip(int);
+    method public void flip(int, int);
+    method public boolean get(int);
+    method public java.util.BitSet get(int, int);
+    method public boolean intersects(java.util.BitSet);
+    method public boolean isEmpty();
+    method public int length();
+    method public int nextClearBit(int);
+    method public int nextSetBit(int);
+    method public void or(java.util.BitSet);
+    method public int previousClearBit(int);
+    method public int previousSetBit(int);
+    method public void set(int);
+    method public void set(int, boolean);
+    method public void set(int, int);
+    method public void set(int, int, boolean);
+    method public int size();
+    method public java.util.stream.IntStream stream();
+    method public byte[] toByteArray();
+    method public long[] toLongArray();
+    method public static java.util.BitSet valueOf(long[]);
+    method public static java.util.BitSet valueOf(java.nio.LongBuffer);
+    method public static java.util.BitSet valueOf(byte[]);
+    method public static java.util.BitSet valueOf(java.nio.ByteBuffer);
+    method public void xor(java.util.BitSet);
+  }
+
+  public abstract class Calendar implements java.lang.Cloneable java.lang.Comparable<java.util.Calendar> java.io.Serializable {
+    ctor protected Calendar();
+    ctor protected Calendar(@NonNull java.util.TimeZone, @NonNull java.util.Locale);
+    method public abstract void add(int, int);
+    method public boolean after(@Nullable Object);
+    method public boolean before(@Nullable Object);
+    method public final void clear();
+    method public final void clear(int);
+    method @NonNull public Object clone();
+    method public int compareTo(@NonNull java.util.Calendar);
+    method protected void complete();
+    method protected abstract void computeFields();
+    method protected abstract void computeTime();
+    method public int get(int);
+    method public int getActualMaximum(int);
+    method public int getActualMinimum(int);
+    method @NonNull public static java.util.Set<java.lang.String> getAvailableCalendarTypes();
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @NonNull public String getCalendarType();
+    method @Nullable public String getDisplayName(int, int, @NonNull java.util.Locale);
+    method @Nullable public java.util.Map<java.lang.String,java.lang.Integer> getDisplayNames(int, int, @NonNull java.util.Locale);
+    method public int getFirstDayOfWeek();
+    method public abstract int getGreatestMinimum(int);
+    method @NonNull public static java.util.Calendar getInstance();
+    method @NonNull public static java.util.Calendar getInstance(@NonNull java.util.TimeZone);
+    method @NonNull public static java.util.Calendar getInstance(@NonNull java.util.Locale);
+    method @NonNull public static java.util.Calendar getInstance(@NonNull java.util.TimeZone, @NonNull java.util.Locale);
+    method public abstract int getLeastMaximum(int);
+    method public abstract int getMaximum(int);
+    method public int getMinimalDaysInFirstWeek();
+    method public abstract int getMinimum(int);
+    method @NonNull public final java.util.Date getTime();
+    method public long getTimeInMillis();
+    method @NonNull public java.util.TimeZone getTimeZone();
+    method public int getWeekYear();
+    method public int getWeeksInWeekYear();
+    method protected final int internalGet(int);
+    method public boolean isLenient();
+    method public final boolean isSet(int);
+    method public boolean isWeekDateSupported();
+    method public abstract void roll(int, boolean);
+    method public void roll(int, int);
+    method public void set(int, int);
+    method public final void set(int, int, int);
+    method public final void set(int, int, int, int, int);
+    method public final void set(int, int, int, int, int, int);
+    method public void setFirstDayOfWeek(int);
+    method public void setLenient(boolean);
+    method public void setMinimalDaysInFirstWeek(int);
+    method public final void setTime(@NonNull java.util.Date);
+    method public void setTimeInMillis(long);
+    method public void setTimeZone(@NonNull java.util.TimeZone);
+    method public void setWeekDate(int, int, int);
+    method @NonNull public final java.time.Instant toInstant();
+    field public static final int ALL_STYLES = 0; // 0x0
+    field public static final int AM = 0; // 0x0
+    field public static final int AM_PM = 9; // 0x9
+    field public static final int APRIL = 3; // 0x3
+    field public static final int AUGUST = 7; // 0x7
+    field public static final int DATE = 5; // 0x5
+    field public static final int DAY_OF_MONTH = 5; // 0x5
+    field public static final int DAY_OF_WEEK = 7; // 0x7
+    field public static final int DAY_OF_WEEK_IN_MONTH = 8; // 0x8
+    field public static final int DAY_OF_YEAR = 6; // 0x6
+    field public static final int DECEMBER = 11; // 0xb
+    field public static final int DST_OFFSET = 16; // 0x10
+    field public static final int ERA = 0; // 0x0
+    field public static final int FEBRUARY = 1; // 0x1
+    field public static final int FIELD_COUNT = 17; // 0x11
+    field public static final int FRIDAY = 6; // 0x6
+    field public static final int HOUR = 10; // 0xa
+    field public static final int HOUR_OF_DAY = 11; // 0xb
+    field public static final int JANUARY = 0; // 0x0
+    field public static final int JULY = 6; // 0x6
+    field public static final int JUNE = 5; // 0x5
+    field public static final int LONG = 2; // 0x2
+    field public static final int LONG_FORMAT = 2; // 0x2
+    field public static final int LONG_STANDALONE = 32770; // 0x8002
+    field public static final int MARCH = 2; // 0x2
+    field public static final int MAY = 4; // 0x4
+    field public static final int MILLISECOND = 14; // 0xe
+    field public static final int MINUTE = 12; // 0xc
+    field public static final int MONDAY = 2; // 0x2
+    field public static final int MONTH = 2; // 0x2
+    field public static final int NARROW_FORMAT = 4; // 0x4
+    field public static final int NARROW_STANDALONE = 32772; // 0x8004
+    field public static final int NOVEMBER = 10; // 0xa
+    field public static final int OCTOBER = 9; // 0x9
+    field public static final int PM = 1; // 0x1
+    field public static final int SATURDAY = 7; // 0x7
+    field public static final int SECOND = 13; // 0xd
+    field public static final int SEPTEMBER = 8; // 0x8
+    field public static final int SHORT = 1; // 0x1
+    field public static final int SHORT_FORMAT = 1; // 0x1
+    field public static final int SHORT_STANDALONE = 32769; // 0x8001
+    field public static final int SUNDAY = 1; // 0x1
+    field public static final int THURSDAY = 5; // 0x5
+    field public static final int TUESDAY = 3; // 0x3
+    field public static final int UNDECIMBER = 12; // 0xc
+    field public static final int WEDNESDAY = 4; // 0x4
+    field public static final int WEEK_OF_MONTH = 4; // 0x4
+    field public static final int WEEK_OF_YEAR = 3; // 0x3
+    field public static final int YEAR = 1; // 0x1
+    field public static final int ZONE_OFFSET = 15; // 0xf
+    field protected boolean areFieldsSet;
+    field @NonNull protected int[] fields;
+    field @NonNull protected boolean[] isSet;
+    field protected boolean isTimeSet;
+    field protected long time;
+  }
+
+  public static class Calendar.Builder {
+    ctor public Calendar.Builder();
+    method @NonNull public java.util.Calendar build();
+    method @NonNull public java.util.Calendar.Builder set(int, int);
+    method @NonNull public java.util.Calendar.Builder setCalendarType(@NonNull String);
+    method @NonNull public java.util.Calendar.Builder setDate(int, int, int);
+    method @NonNull public java.util.Calendar.Builder setFields(@NonNull int...);
+    method @NonNull public java.util.Calendar.Builder setInstant(long);
+    method @NonNull public java.util.Calendar.Builder setInstant(@NonNull java.util.Date);
+    method @NonNull public java.util.Calendar.Builder setLenient(boolean);
+    method @NonNull public java.util.Calendar.Builder setLocale(@NonNull java.util.Locale);
+    method @NonNull public java.util.Calendar.Builder setTimeOfDay(int, int, int);
+    method @NonNull public java.util.Calendar.Builder setTimeOfDay(int, int, int, int);
+    method @NonNull public java.util.Calendar.Builder setTimeZone(@NonNull java.util.TimeZone);
+    method @NonNull public java.util.Calendar.Builder setWeekDate(int, int, int);
+    method @NonNull public java.util.Calendar.Builder setWeekDefinition(int, int);
+  }
+
+  public interface Collection<E> extends java.lang.Iterable<E> {
+    method public boolean add(E);
+    method public boolean addAll(@NonNull java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(@Nullable Object);
+    method public boolean containsAll(@NonNull java.util.Collection<?>);
+    method public boolean equals(@Nullable Object);
+    method public int hashCode();
+    method public boolean isEmpty();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method @NonNull public default java.util.stream.Stream<E> parallelStream();
+    method public boolean remove(@Nullable Object);
+    method public boolean removeAll(@NonNull java.util.Collection<?>);
+    method public default boolean removeIf(@NonNull java.util.function.Predicate<? super E>);
+    method public boolean retainAll(@NonNull java.util.Collection<?>);
+    method public int size();
+    method @NonNull public default java.util.Spliterator<E> spliterator();
+    method @NonNull public default java.util.stream.Stream<E> stream();
+    method @NonNull public Object[] toArray();
+    method @NonNull public <T> T[] toArray(@NonNull T[]);
+  }
+
+  public class Collections {
+    method @java.lang.SafeVarargs public static <T> boolean addAll(@NonNull java.util.Collection<? super T>, @NonNull T...);
+    method @NonNull public static <T> java.util.Queue<T> asLifoQueue(@NonNull java.util.Deque<T>);
+    method public static <T> int binarySearch(@NonNull java.util.List<? extends java.lang.Comparable<? super T>>, @NonNull T);
+    method public static <T> int binarySearch(@NonNull java.util.List<? extends T>, T, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <E> java.util.Collection<E> checkedCollection(@NonNull java.util.Collection<E>, @NonNull Class<E>);
+    method @NonNull public static <E> java.util.List<E> checkedList(@NonNull java.util.List<E>, @NonNull Class<E>);
+    method @NonNull public static <K, V> java.util.Map<K,V> checkedMap(@NonNull java.util.Map<K,V>, @NonNull Class<K>, @NonNull Class<V>);
+    method @NonNull public static <K, V> java.util.NavigableMap<K,V> checkedNavigableMap(@NonNull java.util.NavigableMap<K,V>, @NonNull Class<K>, @NonNull Class<V>);
+    method @NonNull public static <E> java.util.NavigableSet<E> checkedNavigableSet(@NonNull java.util.NavigableSet<E>, @NonNull Class<E>);
+    method @NonNull public static <E> java.util.Queue<E> checkedQueue(@NonNull java.util.Queue<E>, @NonNull Class<E>);
+    method @NonNull public static <E> java.util.Set<E> checkedSet(@NonNull java.util.Set<E>, @NonNull Class<E>);
+    method @NonNull public static <K, V> java.util.SortedMap<K,V> checkedSortedMap(@NonNull java.util.SortedMap<K,V>, @NonNull Class<K>, @NonNull Class<V>);
+    method @NonNull public static <E> java.util.SortedSet<E> checkedSortedSet(@NonNull java.util.SortedSet<E>, @NonNull Class<E>);
+    method public static <T> void copy(@NonNull java.util.List<? super T>, @NonNull java.util.List<? extends T>);
+    method public static boolean disjoint(@NonNull java.util.Collection<?>, @NonNull java.util.Collection<?>);
+    method @NonNull public static <T> java.util.Enumeration<T> emptyEnumeration();
+    method @NonNull public static <T> java.util.Iterator<T> emptyIterator();
+    method @NonNull public static final <T> java.util.List<T> emptyList();
+    method @NonNull public static <T> java.util.ListIterator<T> emptyListIterator();
+    method @NonNull public static final <K, V> java.util.Map<K,V> emptyMap();
+    method @NonNull public static final <K, V> java.util.NavigableMap<K,V> emptyNavigableMap();
+    method @NonNull public static <E> java.util.NavigableSet<E> emptyNavigableSet();
+    method @NonNull public static final <T> java.util.Set<T> emptySet();
+    method @NonNull public static final <K, V> java.util.SortedMap<K,V> emptySortedMap();
+    method @NonNull public static <E> java.util.SortedSet<E> emptySortedSet();
+    method @NonNull public static <T> java.util.Enumeration<T> enumeration(@NonNull java.util.Collection<T>);
+    method public static <T> void fill(@NonNull java.util.List<? super T>, T);
+    method public static int frequency(@NonNull java.util.Collection<?>, @Nullable Object);
+    method public static int indexOfSubList(@NonNull java.util.List<?>, @NonNull java.util.List<?>);
+    method public static int lastIndexOfSubList(@NonNull java.util.List<?>, @NonNull java.util.List<?>);
+    method @NonNull public static <T> java.util.ArrayList<T> list(@NonNull java.util.Enumeration<T>);
+    method @NonNull public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T max(@NonNull java.util.Collection<? extends T>);
+    method public static <T> T max(@NonNull java.util.Collection<? extends T>, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T min(@NonNull java.util.Collection<? extends T>);
+    method public static <T> T min(@NonNull java.util.Collection<? extends T>, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T> java.util.List<T> nCopies(int, T);
+    method @NonNull public static <E> java.util.Set<E> newSetFromMap(@NonNull java.util.Map<E,java.lang.Boolean>);
+    method public static <T> boolean replaceAll(@NonNull java.util.List<T>, T, T);
+    method public static void reverse(@NonNull java.util.List<?>);
+    method @NonNull public static <T> java.util.Comparator<T> reverseOrder();
+    method @NonNull public static <T> java.util.Comparator<T> reverseOrder(@Nullable java.util.Comparator<T>);
+    method public static void rotate(@NonNull java.util.List<?>, int);
+    method public static void shuffle(@NonNull java.util.List<?>);
+    method public static void shuffle(@NonNull java.util.List<?>, @NonNull java.util.Random);
+    method @NonNull public static <T> java.util.Set<T> singleton(T);
+    method @NonNull public static <T> java.util.List<T> singletonList(T);
+    method @NonNull public static <K, V> java.util.Map<K,V> singletonMap(K, V);
+    method public static <T extends java.lang.Comparable<? super T>> void sort(@NonNull java.util.List<T>);
+    method public static <T> void sort(@NonNull java.util.List<T>, @Nullable java.util.Comparator<? super T>);
+    method public static void swap(@NonNull java.util.List<?>, int, int);
+    method @NonNull public static <T> java.util.Collection<T> synchronizedCollection(@NonNull java.util.Collection<T>);
+    method @NonNull public static <T> java.util.List<T> synchronizedList(@NonNull java.util.List<T>);
+    method @NonNull public static <K, V> java.util.Map<K,V> synchronizedMap(@NonNull java.util.Map<K,V>);
+    method @NonNull public static <K, V> java.util.NavigableMap<K,V> synchronizedNavigableMap(@NonNull java.util.NavigableMap<K,V>);
+    method @NonNull public static <T> java.util.NavigableSet<T> synchronizedNavigableSet(@NonNull java.util.NavigableSet<T>);
+    method @NonNull public static <T> java.util.Set<T> synchronizedSet(@NonNull java.util.Set<T>);
+    method @NonNull public static <K, V> java.util.SortedMap<K,V> synchronizedSortedMap(@NonNull java.util.SortedMap<K,V>);
+    method @NonNull public static <T> java.util.SortedSet<T> synchronizedSortedSet(@NonNull java.util.SortedSet<T>);
+    method @NonNull public static <T> java.util.Collection<T> unmodifiableCollection(@NonNull java.util.Collection<? extends T>);
+    method @NonNull public static <T> java.util.List<T> unmodifiableList(@NonNull java.util.List<? extends T>);
+    method @NonNull public static <K, V> java.util.Map<K,V> unmodifiableMap(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public static <K, V> java.util.NavigableMap<K,V> unmodifiableNavigableMap(@NonNull java.util.NavigableMap<K,? extends V>);
+    method @NonNull public static <T> java.util.NavigableSet<T> unmodifiableNavigableSet(@NonNull java.util.NavigableSet<T>);
+    method @NonNull public static <T> java.util.Set<T> unmodifiableSet(@NonNull java.util.Set<? extends T>);
+    method @NonNull public static <K, V> java.util.SortedMap<K,V> unmodifiableSortedMap(@NonNull java.util.SortedMap<K,? extends V>);
+    method @NonNull public static <T> java.util.SortedSet<T> unmodifiableSortedSet(@NonNull java.util.SortedSet<T>);
+    field @NonNull public static final java.util.List EMPTY_LIST;
+    field @NonNull public static final java.util.Map EMPTY_MAP;
+    field @NonNull public static final java.util.Set EMPTY_SET;
+  }
+
+  @java.lang.FunctionalInterface public interface Comparator<T> {
+    method public int compare(T, T);
+    method public static <T, U> java.util.Comparator<T> comparing(java.util.function.Function<? super T,? extends U>, java.util.Comparator<? super U>);
+    method public static <T, U extends java.lang.Comparable<? super U>> java.util.Comparator<T> comparing(java.util.function.Function<? super T,? extends U>);
+    method public static <T> java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
+    method public boolean equals(Object);
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> naturalOrder();
+    method public static <T> java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
+    method public static <T> java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> reverseOrder();
+    method public default java.util.Comparator<T> reversed();
+    method public default java.util.Comparator<T> thenComparing(java.util.Comparator<? super T>);
+    method public default <U> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T,? extends U>, java.util.Comparator<? super U>);
+    method public default <U extends java.lang.Comparable<? super U>> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T,? extends U>);
+    method public default java.util.Comparator<T> thenComparingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public default java.util.Comparator<T> thenComparingInt(java.util.function.ToIntFunction<? super T>);
+    method public default java.util.Comparator<T> thenComparingLong(java.util.function.ToLongFunction<? super T>);
+  }
+
+  public class ConcurrentModificationException extends java.lang.RuntimeException {
+    ctor public ConcurrentModificationException();
+    ctor public ConcurrentModificationException(String);
+    ctor public ConcurrentModificationException(Throwable);
+    ctor public ConcurrentModificationException(String, Throwable);
+  }
+
+  public final class Currency implements java.io.Serializable {
+    method public static java.util.Set<java.util.Currency> getAvailableCurrencies();
+    method public String getCurrencyCode();
+    method public int getDefaultFractionDigits();
+    method public String getDisplayName();
+    method public String getDisplayName(java.util.Locale);
+    method public static java.util.Currency getInstance(String);
+    method public static java.util.Currency getInstance(java.util.Locale);
+    method public int getNumericCode();
+    method public String getSymbol();
+    method public String getSymbol(java.util.Locale);
+  }
+
+  public class Date implements java.lang.Cloneable java.lang.Comparable<java.util.Date> java.io.Serializable {
+    ctor public Date();
+    ctor public Date(long);
+    ctor @Deprecated public Date(int, int, int);
+    ctor @Deprecated public Date(int, int, int, int, int);
+    ctor @Deprecated public Date(int, int, int, int, int, int);
+    ctor @Deprecated public Date(String);
+    method @Deprecated public static long UTC(int, int, int, int, int, int);
+    method public boolean after(java.util.Date);
+    method public boolean before(java.util.Date);
+    method public Object clone();
+    method public int compareTo(java.util.Date);
+    method public static java.util.Date from(java.time.Instant);
+    method @Deprecated public int getDate();
+    method @Deprecated public int getDay();
+    method @Deprecated public int getHours();
+    method @Deprecated public int getMinutes();
+    method @Deprecated public int getMonth();
+    method @Deprecated public int getSeconds();
+    method public long getTime();
+    method @Deprecated public int getTimezoneOffset();
+    method @Deprecated public int getYear();
+    method @Deprecated public static long parse(String);
+    method @Deprecated public void setDate(int);
+    method @Deprecated public void setHours(int);
+    method @Deprecated public void setMinutes(int);
+    method @Deprecated public void setMonth(int);
+    method @Deprecated public void setSeconds(int);
+    method public void setTime(long);
+    method @Deprecated public void setYear(int);
+    method @Deprecated public String toGMTString();
+    method public java.time.Instant toInstant();
+    method @Deprecated public String toLocaleString();
+  }
+
+  public interface Deque<E> extends java.util.Queue<E> {
+    method public void addFirst(E);
+    method public void addLast(E);
+    method @NonNull public java.util.Iterator<E> descendingIterator();
+    method public E getFirst();
+    method public E getLast();
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method @Nullable public E peekFirst();
+    method @Nullable public E peekLast();
+    method @Nullable public E pollFirst();
+    method @Nullable public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(@Nullable Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(@Nullable Object);
+  }
+
+  public abstract class Dictionary<K, V> {
+    ctor public Dictionary();
+    method public abstract java.util.Enumeration<V> elements();
+    method public abstract V get(Object);
+    method public abstract boolean isEmpty();
+    method public abstract java.util.Enumeration<K> keys();
+    method public abstract V put(K, V);
+    method public abstract V remove(Object);
+    method public abstract int size();
+  }
+
+  public class DoubleSummaryStatistics implements java.util.function.DoubleConsumer {
+    ctor public DoubleSummaryStatistics();
+    method public void accept(double);
+    method public void combine(java.util.DoubleSummaryStatistics);
+    method public final double getAverage();
+    method public final long getCount();
+    method public final double getMax();
+    method public final double getMin();
+    method public final double getSum();
+  }
+
+  public class DuplicateFormatFlagsException extends java.util.IllegalFormatException {
+    ctor public DuplicateFormatFlagsException(String);
+    method public String getFlags();
+  }
+
+  public class EmptyStackException extends java.lang.RuntimeException {
+    ctor public EmptyStackException();
+  }
+
+  public class EnumMap<K extends java.lang.Enum<K>, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.io.Serializable {
+    ctor public EnumMap(Class<K>);
+    ctor public EnumMap(java.util.EnumMap<K,? extends V>);
+    ctor public EnumMap(java.util.Map<K,? extends V>);
+    method public java.util.EnumMap<K,V> clone();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+  public abstract class EnumSet<E extends java.lang.Enum<E>> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.io.Serializable {
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> allOf(Class<E>);
+    method public java.util.EnumSet<E> clone();
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.Collection<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> noneOf(Class<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E, E);
+    method @java.lang.SafeVarargs public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E...);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> range(E, E);
+  }
+
+  public interface Enumeration<E> {
+    method public boolean hasMoreElements();
+    method public E nextElement();
+  }
+
+  public interface EventListener {
+  }
+
+  public abstract class EventListenerProxy<T extends java.util.EventListener> implements java.util.EventListener {
+    ctor public EventListenerProxy(T);
+    method public T getListener();
+  }
+
+  public class EventObject implements java.io.Serializable {
+    ctor public EventObject(Object);
+    method public Object getSource();
+    field protected transient Object source;
+  }
+
+  public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException {
+    ctor public FormatFlagsConversionMismatchException(String, char);
+    method public char getConversion();
+    method public String getFlags();
+  }
+
+  public interface Formattable {
+    method public void formatTo(java.util.Formatter, int, int, int);
+  }
+
+  public class FormattableFlags {
+    field public static final int ALTERNATE = 4; // 0x4
+    field public static final int LEFT_JUSTIFY = 1; // 0x1
+    field public static final int UPPERCASE = 2; // 0x2
+  }
+
+  public final class Formatter implements java.io.Closeable java.io.Flushable {
+    ctor public Formatter();
+    ctor public Formatter(Appendable);
+    ctor public Formatter(java.util.Locale);
+    ctor public Formatter(Appendable, java.util.Locale);
+    ctor public Formatter(String) throws java.io.FileNotFoundException;
+    ctor public Formatter(String, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(String, String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.File) throws java.io.FileNotFoundException;
+    ctor public Formatter(java.io.File, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.File, String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.PrintStream);
+    ctor public Formatter(java.io.OutputStream);
+    ctor public Formatter(java.io.OutputStream, String) throws java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.OutputStream, String, java.util.Locale) throws java.io.UnsupportedEncodingException;
+    method public void close();
+    method public void flush();
+    method public java.util.Formatter format(String, java.lang.Object...);
+    method public java.util.Formatter format(java.util.Locale, String, java.lang.Object...);
+    method public java.io.IOException ioException();
+    method public java.util.Locale locale();
+    method public Appendable out();
+  }
+
+  public enum Formatter.BigDecimalLayoutForm {
+    enum_constant public static final java.util.Formatter.BigDecimalLayoutForm DECIMAL_FLOAT;
+    enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC;
+  }
+
+  public class FormatterClosedException extends java.lang.IllegalStateException {
+    ctor public FormatterClosedException();
+  }
+
+  public class GregorianCalendar extends java.util.Calendar {
+    ctor public GregorianCalendar();
+    ctor public GregorianCalendar(java.util.TimeZone);
+    ctor public GregorianCalendar(java.util.Locale);
+    ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale);
+    ctor public GregorianCalendar(int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int, int);
+    method public void add(int, int);
+    method protected void computeFields();
+    method protected void computeTime();
+    method public static java.util.GregorianCalendar from(java.time.ZonedDateTime);
+    method public int getGreatestMinimum(int);
+    method public final java.util.Date getGregorianChange();
+    method public int getLeastMaximum(int);
+    method public int getMaximum(int);
+    method public int getMinimum(int);
+    method public boolean isLeapYear(int);
+    method public final boolean isWeekDateSupported();
+    method public void roll(int, boolean);
+    method public void setGregorianChange(java.util.Date);
+    method public java.time.ZonedDateTime toZonedDateTime();
+    field public static final int AD = 1; // 0x1
+    field public static final int BC = 0; // 0x0
+  }
+
+  public class HashMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.Map<K,V> java.io.Serializable {
+    ctor public HashMap(int, float);
+    ctor public HashMap(int);
+    ctor public HashMap();
+    ctor public HashMap(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public Object clone();
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+  public class HashSet<E> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.io.Serializable java.util.Set<E> {
+    ctor public HashSet();
+    ctor public HashSet(@NonNull java.util.Collection<? extends E>);
+    ctor public HashSet(int, float);
+    ctor public HashSet(int);
+    method @NonNull public Object clone();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public int size();
+  }
+
+  public class Hashtable<K, V> extends java.util.Dictionary<K,V> implements java.lang.Cloneable java.util.Map<K,V> java.io.Serializable {
+    ctor public Hashtable(int, float);
+    ctor public Hashtable(int);
+    ctor public Hashtable();
+    ctor public Hashtable(java.util.Map<? extends K,? extends V>);
+    method public void clear();
+    method public Object clone();
+    method public boolean contains(Object);
+    method public boolean containsKey(Object);
+    method public boolean containsValue(Object);
+    method public java.util.Enumeration<V> elements();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public V get(Object);
+    method public boolean isEmpty();
+    method public java.util.Set<K> keySet();
+    method public java.util.Enumeration<K> keys();
+    method public V put(K, V);
+    method public void putAll(java.util.Map<? extends K,? extends V>);
+    method protected void rehash();
+    method public V remove(Object);
+    method public int size();
+    method public java.util.Collection<V> values();
+  }
+
+  public class IdentityHashMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.Map<K,V> java.io.Serializable {
+    ctor public IdentityHashMap();
+    ctor public IdentityHashMap(int);
+    ctor public IdentityHashMap(java.util.Map<? extends K,? extends V>);
+    method public Object clone();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+  public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatCodePointException(int);
+    method public int getCodePoint();
+  }
+
+  public class IllegalFormatConversionException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatConversionException(char, Class<?>);
+    method public Class<?> getArgumentClass();
+    method public char getConversion();
+  }
+
+  public class IllegalFormatException extends java.lang.IllegalArgumentException {
+  }
+
+  public class IllegalFormatFlagsException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatFlagsException(String);
+    method public String getFlags();
+  }
+
+  public class IllegalFormatPrecisionException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatPrecisionException(int);
+    method public int getPrecision();
+  }
+
+  public class IllegalFormatWidthException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatWidthException(int);
+    method public int getWidth();
+  }
+
+  public class IllformedLocaleException extends java.lang.RuntimeException {
+    ctor public IllformedLocaleException();
+    ctor public IllformedLocaleException(String);
+    ctor public IllformedLocaleException(String, int);
+    method public int getErrorIndex();
+  }
+
+  public class InputMismatchException extends java.util.NoSuchElementException {
+    ctor public InputMismatchException();
+    ctor public InputMismatchException(String);
+  }
+
+  public class IntSummaryStatistics implements java.util.function.IntConsumer {
+    ctor public IntSummaryStatistics();
+    method public void accept(int);
+    method public void combine(java.util.IntSummaryStatistics);
+    method public final double getAverage();
+    method public final long getCount();
+    method public final int getMax();
+    method public final int getMin();
+    method public final long getSum();
+  }
+
+  public class InvalidPropertiesFormatException extends java.io.IOException {
+    ctor public InvalidPropertiesFormatException(Throwable);
+    ctor public InvalidPropertiesFormatException(String);
+  }
+
+  public interface Iterator<E> {
+    method public default void forEachRemaining(@NonNull java.util.function.Consumer<? super E>);
+    method public boolean hasNext();
+    method public E next();
+    method public default void remove();
+  }
+
+  public class LinkedHashMap<K, V> extends java.util.HashMap<K,V> implements java.util.Map<K,V> {
+    ctor public LinkedHashMap(int, float);
+    ctor public LinkedHashMap(int);
+    ctor public LinkedHashMap();
+    ctor public LinkedHashMap(java.util.Map<? extends K,? extends V>);
+    ctor public LinkedHashMap(int, float, boolean);
+    method protected boolean removeEldestEntry(java.util.Map.Entry<K,V>);
+  }
+
+  public class LinkedHashSet<E> extends java.util.HashSet<E> implements java.lang.Cloneable java.io.Serializable java.util.Set<E> {
+    ctor public LinkedHashSet(int, float);
+    ctor public LinkedHashSet(int);
+    ctor public LinkedHashSet();
+    ctor public LinkedHashSet(java.util.Collection<? extends E>);
+  }
+
+  public class LinkedList<E> extends java.util.AbstractSequentialList<E> implements java.lang.Cloneable java.util.Deque<E> java.util.List<E> java.io.Serializable {
+    ctor public LinkedList();
+    ctor public LinkedList(@NonNull java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method @NonNull public Object clone();
+    method @NonNull public java.util.Iterator<E> descendingIterator();
+    method public E element();
+    method public E getFirst();
+    method public E getLast();
+    method public boolean offer(E);
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method @Nullable public E peek();
+    method @Nullable public E peekFirst();
+    method @Nullable public E peekLast();
+    method @Nullable public E poll();
+    method @Nullable public E pollFirst();
+    method @Nullable public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E remove();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(@Nullable Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(@Nullable Object);
+    method public int size();
+  }
+
+  public interface List<E> extends java.util.Collection<E> {
+    method public void add(int, E);
+    method public boolean addAll(int, @NonNull java.util.Collection<? extends E>);
+    method @NonNull public static <E> java.util.List<E> copyOf(@NonNull java.util.Collection<? extends E>);
+    method public E get(int);
+    method public int indexOf(@Nullable Object);
+    method public int lastIndexOf(@Nullable Object);
+    method @NonNull public java.util.ListIterator<E> listIterator();
+    method @NonNull public java.util.ListIterator<E> listIterator(int);
+    method @NonNull public static <E> java.util.List<E> of();
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull @java.lang.SafeVarargs public static <E> java.util.List<E> of(@NonNull E...);
+    method public E remove(int);
+    method public default void replaceAll(@NonNull java.util.function.UnaryOperator<E>);
+    method public E set(int, E);
+    method public default void sort(@Nullable java.util.Comparator<? super E>);
+    method @NonNull public java.util.List<E> subList(int, int);
+  }
+
+  public interface ListIterator<E> extends java.util.Iterator<E> {
+    method public void add(E);
+    method public boolean hasPrevious();
+    method public int nextIndex();
+    method public E previous();
+    method public int previousIndex();
+    method public void remove();
+    method public void set(E);
+  }
+
+  public abstract class ListResourceBundle extends java.util.ResourceBundle {
+    ctor public ListResourceBundle();
+    method protected abstract Object[][] getContents();
+    method public java.util.Enumeration<java.lang.String> getKeys();
+    method public final Object handleGetObject(String);
+  }
+
+  public final class Locale implements java.lang.Cloneable java.io.Serializable {
+    ctor public Locale(@NonNull String, @NonNull String, @NonNull String);
+    ctor public Locale(@NonNull String, @NonNull String);
+    ctor public Locale(@NonNull String);
+    method @NonNull public Object clone();
+    method @NonNull public static java.util.List<java.util.Locale> filter(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.util.Locale>, @NonNull java.util.Locale.FilteringMode);
+    method @NonNull public static java.util.List<java.util.Locale> filter(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.util.Locale>);
+    method @NonNull public static java.util.List<java.lang.String> filterTags(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.lang.String>, @NonNull java.util.Locale.FilteringMode);
+    method @NonNull public static java.util.List<java.lang.String> filterTags(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public static java.util.Locale forLanguageTag(@NonNull String);
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @NonNull public String getCountry();
+    method @NonNull public static java.util.Locale getDefault();
+    method @NonNull public static java.util.Locale getDefault(@NonNull java.util.Locale.Category);
+    method @NonNull public String getDisplayCountry();
+    method @NonNull public String getDisplayCountry(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayLanguage();
+    method @NonNull public String getDisplayLanguage(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayName();
+    method @NonNull public String getDisplayName(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayScript();
+    method @NonNull public String getDisplayScript(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayVariant();
+    method @NonNull public String getDisplayVariant(@NonNull java.util.Locale);
+    method @Nullable public String getExtension(char);
+    method @NonNull public java.util.Set<java.lang.Character> getExtensionKeys();
+    method @NonNull public String getISO3Country() throws java.util.MissingResourceException;
+    method @NonNull public String getISO3Language() throws java.util.MissingResourceException;
+    method @NonNull public static String[] getISOCountries();
+    method @NonNull public static String[] getISOLanguages();
+    method @NonNull public String getLanguage();
+    method @NonNull public String getScript();
+    method @NonNull public java.util.Set<java.lang.String> getUnicodeLocaleAttributes();
+    method @NonNull public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
+    method @Nullable public String getUnicodeLocaleType(@NonNull String);
+    method @NonNull public String getVariant();
+    method public boolean hasExtensions();
+    method @Nullable public static java.util.Locale lookup(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.util.Locale>);
+    method @Nullable public static String lookupTag(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.lang.String>);
+    method public static void setDefault(@NonNull java.util.Locale);
+    method public static void setDefault(@NonNull java.util.Locale.Category, @NonNull java.util.Locale);
+    method @NonNull public java.util.Locale stripExtensions();
+    method @NonNull public String toLanguageTag();
+    field @NonNull public static final java.util.Locale CANADA;
+    field @NonNull public static final java.util.Locale CANADA_FRENCH;
+    field @NonNull public static final java.util.Locale CHINA;
+    field @NonNull public static final java.util.Locale CHINESE;
+    field @NonNull public static final java.util.Locale ENGLISH;
+    field @NonNull public static final java.util.Locale FRANCE;
+    field @NonNull public static final java.util.Locale FRENCH;
+    field @NonNull public static final java.util.Locale GERMAN;
+    field @NonNull public static final java.util.Locale GERMANY;
+    field @NonNull public static final java.util.Locale ITALIAN;
+    field @NonNull public static final java.util.Locale ITALY;
+    field @NonNull public static final java.util.Locale JAPAN;
+    field @NonNull public static final java.util.Locale JAPANESE;
+    field @NonNull public static final java.util.Locale KOREA;
+    field @NonNull public static final java.util.Locale KOREAN;
+    field @NonNull public static final java.util.Locale PRC;
+    field public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x'
+    field @NonNull public static final java.util.Locale ROOT;
+    field @NonNull public static final java.util.Locale SIMPLIFIED_CHINESE;
+    field @NonNull public static final java.util.Locale TAIWAN;
+    field @NonNull public static final java.util.Locale TRADITIONAL_CHINESE;
+    field @NonNull public static final java.util.Locale UK;
+    field public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u'
+    field @NonNull public static final java.util.Locale US;
+  }
+
+  public static final class Locale.Builder {
+    ctor public Locale.Builder();
+    method @NonNull public java.util.Locale.Builder addUnicodeLocaleAttribute(@NonNull String);
+    method @NonNull public java.util.Locale build();
+    method @NonNull public java.util.Locale.Builder clear();
+    method @NonNull public java.util.Locale.Builder clearExtensions();
+    method @NonNull public java.util.Locale.Builder removeUnicodeLocaleAttribute(@NonNull String);
+    method @NonNull public java.util.Locale.Builder setExtension(char, @Nullable String);
+    method @NonNull public java.util.Locale.Builder setLanguage(@Nullable String);
+    method @NonNull public java.util.Locale.Builder setLanguageTag(@NonNull String);
+    method @NonNull public java.util.Locale.Builder setLocale(@NonNull java.util.Locale);
+    method @NonNull public java.util.Locale.Builder setRegion(@Nullable String);
+    method @NonNull public java.util.Locale.Builder setScript(@Nullable String);
+    method @NonNull public java.util.Locale.Builder setUnicodeLocaleKeyword(@NonNull String, @Nullable String);
+    method @NonNull public java.util.Locale.Builder setVariant(@Nullable String);
+  }
+
+  public enum Locale.Category {
+    enum_constant public static final java.util.Locale.Category DISPLAY;
+    enum_constant public static final java.util.Locale.Category FORMAT;
+  }
+
+  public enum Locale.FilteringMode {
+    enum_constant public static final java.util.Locale.FilteringMode AUTOSELECT_FILTERING;
+    enum_constant public static final java.util.Locale.FilteringMode EXTENDED_FILTERING;
+    enum_constant public static final java.util.Locale.FilteringMode IGNORE_EXTENDED_RANGES;
+    enum_constant public static final java.util.Locale.FilteringMode MAP_EXTENDED_RANGES;
+    enum_constant public static final java.util.Locale.FilteringMode REJECT_EXTENDED_RANGES;
+  }
+
+  public static final class Locale.LanguageRange {
+    ctor public Locale.LanguageRange(@NonNull String);
+    ctor public Locale.LanguageRange(@NonNull String, double);
+    method @NonNull public String getRange();
+    method public double getWeight();
+    method @NonNull public static java.util.List<java.util.Locale.LanguageRange> mapEquivalents(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>);
+    method @NonNull public static java.util.List<java.util.Locale.LanguageRange> parse(@NonNull String);
+    method @NonNull public static java.util.List<java.util.Locale.LanguageRange> parse(@NonNull String, @NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>);
+    field public static final double MAX_WEIGHT = 1.0;
+    field public static final double MIN_WEIGHT = 0.0;
+  }
+
+  public class LongSummaryStatistics implements java.util.function.IntConsumer java.util.function.LongConsumer {
+    ctor public LongSummaryStatistics();
+    method public void accept(int);
+    method public void accept(long);
+    method public void combine(java.util.LongSummaryStatistics);
+    method public final double getAverage();
+    method public final long getCount();
+    method public final long getMax();
+    method public final long getMin();
+    method public final long getSum();
+  }
+
+  public interface Map<K, V> {
+    method public void clear();
+    method @Nullable public default V compute(K, @NonNull java.util.function.BiFunction<? super K,? super V,? extends V>);
+    method @Nullable public default V computeIfAbsent(K, @NonNull java.util.function.Function<? super K,? extends V>);
+    method @Nullable public default V computeIfPresent(K, @NonNull java.util.function.BiFunction<? super K,? super V,? extends V>);
+    method public boolean containsKey(@Nullable Object);
+    method public boolean containsValue(@Nullable Object);
+    method @NonNull public static <K, V> java.util.Map<K,V> copyOf(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public static <K, V> java.util.Map.Entry<K,V> entry(@NonNull K, @NonNull V);
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public boolean equals(@Nullable Object);
+    method public default void forEach(@NonNull java.util.function.BiConsumer<? super K,? super V>);
+    method @Nullable public V get(@Nullable Object);
+    method @Nullable public default V getOrDefault(@Nullable Object, @Nullable V);
+    method public int hashCode();
+    method public boolean isEmpty();
+    method @NonNull public java.util.Set<K> keySet();
+    method @Nullable public default V merge(K, @NonNull V, @NonNull java.util.function.BiFunction<? super V,? super V,? extends V>);
+    method @NonNull public static <K, V> java.util.Map<K,V> of();
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull @java.lang.SafeVarargs public static <K, V> java.util.Map<K,V> ofEntries(@NonNull java.util.Map.Entry<? extends K,? extends V>...);
+    method @Nullable public V put(K, V);
+    method public void putAll(@NonNull java.util.Map<? extends K,? extends V>);
+    method @Nullable public default V putIfAbsent(K, V);
+    method @Nullable public V remove(@Nullable Object);
+    method public default boolean remove(@Nullable Object, @Nullable Object);
+    method public default boolean replace(K, @Nullable V, V);
+    method @Nullable public default V replace(K, V);
+    method public default void replaceAll(@NonNull java.util.function.BiFunction<? super K,? super V,? extends V>);
+    method public int size();
+    method @NonNull public java.util.Collection<V> values();
+  }
+
+  public static interface Map.Entry<K, V> {
+    method @NonNull public static <K extends java.lang.Comparable<? super K>, V> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByKey();
+    method @NonNull public static <K, V> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByKey(@NonNull java.util.Comparator<? super K>);
+    method @NonNull public static <K, V extends java.lang.Comparable<? super V>> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByValue();
+    method @NonNull public static <K, V> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByValue(@NonNull java.util.Comparator<? super V>);
+    method public boolean equals(@Nullable Object);
+    method public K getKey();
+    method public V getValue();
+    method public int hashCode();
+    method public V setValue(V);
+  }
+
+  public class MissingFormatArgumentException extends java.util.IllegalFormatException {
+    ctor public MissingFormatArgumentException(String);
+    method public String getFormatSpecifier();
+  }
+
+  public class MissingFormatWidthException extends java.util.IllegalFormatException {
+    ctor public MissingFormatWidthException(String);
+    method public String getFormatSpecifier();
+  }
+
+  public class MissingResourceException extends java.lang.RuntimeException {
+    ctor public MissingResourceException(String, String, String);
+    method public String getClassName();
+    method public String getKey();
+  }
+
+  public interface NavigableMap<K, V> extends java.util.SortedMap<K,V> {
+    method @Nullable public java.util.Map.Entry<K,V> ceilingEntry(K);
+    method @Nullable public K ceilingKey(K);
+    method @NonNull public java.util.NavigableSet<K> descendingKeySet();
+    method @NonNull public java.util.NavigableMap<K,V> descendingMap();
+    method @Nullable public java.util.Map.Entry<K,V> firstEntry();
+    method @Nullable public java.util.Map.Entry<K,V> floorEntry(K);
+    method @Nullable public K floorKey(K);
+    method @NonNull public java.util.NavigableMap<K,V> headMap(K, boolean);
+    method @Nullable public java.util.Map.Entry<K,V> higherEntry(K);
+    method @Nullable public K higherKey(K);
+    method @Nullable public java.util.Map.Entry<K,V> lastEntry();
+    method @Nullable public java.util.Map.Entry<K,V> lowerEntry(K);
+    method @Nullable public K lowerKey(K);
+    method @NonNull public java.util.NavigableSet<K> navigableKeySet();
+    method @Nullable public java.util.Map.Entry<K,V> pollFirstEntry();
+    method @Nullable public java.util.Map.Entry<K,V> pollLastEntry();
+    method @NonNull public java.util.NavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method @NonNull public java.util.NavigableMap<K,V> tailMap(K, boolean);
+  }
+
+  public interface NavigableSet<E> extends java.util.SortedSet<E> {
+    method public E ceiling(E);
+    method public java.util.Iterator<E> descendingIterator();
+    method public java.util.NavigableSet<E> descendingSet();
+    method public E floor(E);
+    method public java.util.NavigableSet<E> headSet(E, boolean);
+    method public E higher(E);
+    method public E lower(E);
+    method public E pollFirst();
+    method public E pollLast();
+    method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
+    method public java.util.NavigableSet<E> tailSet(E, boolean);
+  }
+
+  public class NoSuchElementException extends java.lang.RuntimeException {
+    ctor public NoSuchElementException();
+    ctor public NoSuchElementException(String);
+  }
+
+  public final class Objects {
+    method public static int checkFromIndexSize(int, int, int);
+    method public static int checkFromToIndex(int, int, int);
+    method public static int checkIndex(int, int);
+    method public static <T> int compare(T, T, @NonNull java.util.Comparator<? super T>);
+    method public static boolean deepEquals(@Nullable Object, @Nullable Object);
+    method public static boolean equals(@Nullable Object, @Nullable Object);
+    method public static int hash(@Nullable java.lang.Object...);
+    method public static int hashCode(@Nullable Object);
+    method public static boolean isNull(@Nullable Object);
+    method public static boolean nonNull(@Nullable Object);
+    method @NonNull public static <T> T requireNonNull(@Nullable T);
+    method @NonNull public static <T> T requireNonNull(@Nullable T, @NonNull String);
+    method @NonNull public static <T> T requireNonNull(@Nullable T, @NonNull java.util.function.Supplier<java.lang.String>);
+    method @NonNull public static <T> T requireNonNullElse(@Nullable T, @NonNull T);
+    method @NonNull public static <T> T requireNonNullElseGet(@Nullable T, @NonNull java.util.function.Supplier<? extends T>);
+    method @NonNull public static String toString(@Nullable Object);
+    method @NonNull public static String toString(@Nullable Object, @NonNull String);
+  }
+
+  public class Observable {
+    ctor public Observable();
+    method public void addObserver(java.util.Observer);
+    method protected void clearChanged();
+    method public int countObservers();
+    method public void deleteObserver(java.util.Observer);
+    method public void deleteObservers();
+    method public boolean hasChanged();
+    method public void notifyObservers();
+    method public void notifyObservers(Object);
+    method protected void setChanged();
+  }
+
+  public interface Observer {
+    method public void update(java.util.Observable, Object);
+  }
+
+  public final class Optional<T> {
+    method public static <T> java.util.Optional<T> empty();
+    method public java.util.Optional<T> filter(java.util.function.Predicate<? super T>);
+    method public <U> java.util.Optional<U> flatMap(java.util.function.Function<? super T,java.util.Optional<U>>);
+    method public T get();
+    method public void ifPresent(java.util.function.Consumer<? super T>);
+    method public boolean isPresent();
+    method public <U> java.util.Optional<U> map(java.util.function.Function<? super T,? extends U>);
+    method public static <T> java.util.Optional<T> of(T);
+    method public static <T> java.util.Optional<T> ofNullable(T);
+    method public T orElse(T);
+    method public T orElseGet(java.util.function.Supplier<? extends T>);
+    method public <X extends java.lang.Throwable> T orElseThrow(java.util.function.Supplier<? extends X>) throws X;
+  }
+
+  public final class OptionalDouble {
+    method public static java.util.OptionalDouble empty();
+    method public double getAsDouble();
+    method public void ifPresent(java.util.function.DoubleConsumer);
+    method public boolean isPresent();
+    method public static java.util.OptionalDouble of(double);
+    method public double orElse(double);
+    method public double orElseGet(java.util.function.DoubleSupplier);
+    method public <X extends java.lang.Throwable> double orElseThrow(java.util.function.Supplier<X>) throws X;
+  }
+
+  public final class OptionalInt {
+    method public static java.util.OptionalInt empty();
+    method public int getAsInt();
+    method public void ifPresent(java.util.function.IntConsumer);
+    method public boolean isPresent();
+    method public static java.util.OptionalInt of(int);
+    method public int orElse(int);
+    method public int orElseGet(java.util.function.IntSupplier);
+    method public <X extends java.lang.Throwable> int orElseThrow(java.util.function.Supplier<X>) throws X;
+  }
+
+  public final class OptionalLong {
+    method public static java.util.OptionalLong empty();
+    method public long getAsLong();
+    method public void ifPresent(java.util.function.LongConsumer);
+    method public boolean isPresent();
+    method public static java.util.OptionalLong of(long);
+    method public long orElse(long);
+    method public long orElseGet(java.util.function.LongSupplier);
+    method public <X extends java.lang.Throwable> long orElseThrow(java.util.function.Supplier<X>) throws X;
+  }
+
+  public interface PrimitiveIterator<T, T_CONS> extends java.util.Iterator<T> {
+    method public void forEachRemaining(T_CONS);
+  }
+
+  public static interface PrimitiveIterator.OfDouble extends java.util.PrimitiveIterator<java.lang.Double,java.util.function.DoubleConsumer> {
+    method public default void forEachRemaining(java.util.function.DoubleConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Double>);
+    method public default Double next();
+    method public double nextDouble();
+  }
+
+  public static interface PrimitiveIterator.OfInt extends java.util.PrimitiveIterator<java.lang.Integer,java.util.function.IntConsumer> {
+    method public default void forEachRemaining(java.util.function.IntConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Integer>);
+    method public default Integer next();
+    method public int nextInt();
+  }
+
+  public static interface PrimitiveIterator.OfLong extends java.util.PrimitiveIterator<java.lang.Long,java.util.function.LongConsumer> {
+    method public default void forEachRemaining(java.util.function.LongConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Long>);
+    method public default Long next();
+    method public long nextLong();
+  }
+
+  public class PriorityQueue<E> extends java.util.AbstractQueue<E> implements java.io.Serializable {
+    ctor public PriorityQueue();
+    ctor public PriorityQueue(int);
+    ctor public PriorityQueue(java.util.Comparator<? super E>);
+    ctor public PriorityQueue(int, java.util.Comparator<? super E>);
+    ctor public PriorityQueue(java.util.Collection<? extends E>);
+    ctor public PriorityQueue(java.util.PriorityQueue<? extends E>);
+    ctor public PriorityQueue(java.util.SortedSet<? extends E>);
+    method public java.util.Comparator<? super E> comparator();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll();
+    method public int size();
+    method public final java.util.Spliterator<E> spliterator();
+  }
+
+  public class Properties extends java.util.Hashtable<java.lang.Object,java.lang.Object> {
+    ctor public Properties();
+    ctor public Properties(java.util.Properties);
+    method public String getProperty(String);
+    method public String getProperty(String, String);
+    method public void list(java.io.PrintStream);
+    method public void list(java.io.PrintWriter);
+    method public void load(java.io.Reader) throws java.io.IOException;
+    method public void load(java.io.InputStream) throws java.io.IOException;
+    method public void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException;
+    method public java.util.Enumeration<?> propertyNames();
+    method @Deprecated public void save(java.io.OutputStream, String);
+    method public Object setProperty(String, String);
+    method public void store(java.io.Writer, String) throws java.io.IOException;
+    method public void store(java.io.OutputStream, String) throws java.io.IOException;
+    method public void storeToXML(java.io.OutputStream, String) throws java.io.IOException;
+    method public void storeToXML(java.io.OutputStream, String, String) throws java.io.IOException;
+    method public java.util.Set<java.lang.String> stringPropertyNames();
+    field protected java.util.Properties defaults;
+  }
+
+  public final class PropertyPermission extends java.security.BasicPermission {
+    ctor public PropertyPermission(String, String);
+  }
+
+  public class PropertyResourceBundle extends java.util.ResourceBundle {
+    ctor public PropertyResourceBundle(java.io.InputStream) throws java.io.IOException;
+    ctor public PropertyResourceBundle(java.io.Reader) throws java.io.IOException;
+    method public java.util.Enumeration<java.lang.String> getKeys();
+    method public Object handleGetObject(String);
+  }
+
+  public interface Queue<E> extends java.util.Collection<E> {
+    method public E element();
+    method public boolean offer(E);
+    method @Nullable public E peek();
+    method @Nullable public E poll();
+    method public E remove();
+  }
+
+  public class Random implements java.io.Serializable {
+    ctor public Random();
+    ctor public Random(long);
+    method public java.util.stream.DoubleStream doubles(long);
+    method public java.util.stream.DoubleStream doubles();
+    method public java.util.stream.DoubleStream doubles(long, double, double);
+    method public java.util.stream.DoubleStream doubles(double, double);
+    method public java.util.stream.IntStream ints(long);
+    method public java.util.stream.IntStream ints();
+    method public java.util.stream.IntStream ints(long, int, int);
+    method public java.util.stream.IntStream ints(int, int);
+    method public java.util.stream.LongStream longs(long);
+    method public java.util.stream.LongStream longs();
+    method public java.util.stream.LongStream longs(long, long, long);
+    method public java.util.stream.LongStream longs(long, long);
+    method protected int next(int);
+    method public boolean nextBoolean();
+    method public void nextBytes(byte[]);
+    method public double nextDouble();
+    method public float nextFloat();
+    method public double nextGaussian();
+    method public int nextInt();
+    method public int nextInt(int);
+    method public long nextLong();
+    method public void setSeed(long);
+  }
+
+  public interface RandomAccess {
+  }
+
+  public abstract class ResourceBundle {
+    ctor public ResourceBundle();
+    method public static final void clearCache();
+    method public static final void clearCache(ClassLoader);
+    method public boolean containsKey(String);
+    method public String getBaseBundleName();
+    method public static final java.util.ResourceBundle getBundle(String);
+    method public static final java.util.ResourceBundle getBundle(String, java.util.ResourceBundle.Control);
+    method public static final java.util.ResourceBundle getBundle(String, java.util.Locale);
+    method public static final java.util.ResourceBundle getBundle(String, java.util.Locale, java.util.ResourceBundle.Control);
+    method public static java.util.ResourceBundle getBundle(String, java.util.Locale, ClassLoader);
+    method public static java.util.ResourceBundle getBundle(String, java.util.Locale, ClassLoader, java.util.ResourceBundle.Control);
+    method public abstract java.util.Enumeration<java.lang.String> getKeys();
+    method public java.util.Locale getLocale();
+    method public final Object getObject(String);
+    method public final String getString(String);
+    method public final String[] getStringArray(String);
+    method protected abstract Object handleGetObject(String);
+    method protected java.util.Set<java.lang.String> handleKeySet();
+    method public java.util.Set<java.lang.String> keySet();
+    method protected void setParent(java.util.ResourceBundle);
+    field protected java.util.ResourceBundle parent;
+  }
+
+  public static class ResourceBundle.Control {
+    ctor protected ResourceBundle.Control();
+    method public java.util.List<java.util.Locale> getCandidateLocales(String, java.util.Locale);
+    method public static final java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>);
+    method public java.util.Locale getFallbackLocale(String, java.util.Locale);
+    method public java.util.List<java.lang.String> getFormats(String);
+    method public static final java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>);
+    method public long getTimeToLive(String, java.util.Locale);
+    method public boolean needsReload(String, java.util.Locale, String, ClassLoader, java.util.ResourceBundle, long);
+    method public java.util.ResourceBundle newBundle(String, java.util.Locale, String, ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public String toBundleName(String, java.util.Locale);
+    method public final String toResourceName(String, String);
+    field public static final java.util.List<java.lang.String> FORMAT_CLASS;
+    field public static final java.util.List<java.lang.String> FORMAT_DEFAULT;
+    field public static final java.util.List<java.lang.String> FORMAT_PROPERTIES;
+    field public static final long TTL_DONT_CACHE = -1L; // 0xffffffffffffffffL
+    field public static final long TTL_NO_EXPIRATION_CONTROL = -2L; // 0xfffffffffffffffeL
+  }
+
+  public final class Scanner implements java.io.Closeable java.util.Iterator<java.lang.String> {
+    ctor public Scanner(Readable);
+    ctor public Scanner(java.io.InputStream);
+    ctor public Scanner(java.io.InputStream, String);
+    ctor public Scanner(java.io.File) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.io.File, String) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.nio.file.Path) throws java.io.IOException;
+    ctor public Scanner(java.nio.file.Path, String) throws java.io.IOException;
+    ctor public Scanner(String);
+    ctor public Scanner(java.nio.channels.ReadableByteChannel);
+    ctor public Scanner(java.nio.channels.ReadableByteChannel, String);
+    method public void close();
+    method public java.util.regex.Pattern delimiter();
+    method public String findInLine(String);
+    method public String findInLine(java.util.regex.Pattern);
+    method public String findWithinHorizon(String, int);
+    method public String findWithinHorizon(java.util.regex.Pattern, int);
+    method public boolean hasNext();
+    method public boolean hasNext(String);
+    method public boolean hasNext(java.util.regex.Pattern);
+    method public boolean hasNextBigDecimal();
+    method public boolean hasNextBigInteger();
+    method public boolean hasNextBigInteger(int);
+    method public boolean hasNextBoolean();
+    method public boolean hasNextByte();
+    method public boolean hasNextByte(int);
+    method public boolean hasNextDouble();
+    method public boolean hasNextFloat();
+    method public boolean hasNextInt();
+    method public boolean hasNextInt(int);
+    method public boolean hasNextLine();
+    method public boolean hasNextLong();
+    method public boolean hasNextLong(int);
+    method public boolean hasNextShort();
+    method public boolean hasNextShort(int);
+    method public java.io.IOException ioException();
+    method public java.util.Locale locale();
+    method public java.util.regex.MatchResult match();
+    method public String next();
+    method public String next(String);
+    method public String next(java.util.regex.Pattern);
+    method public java.math.BigDecimal nextBigDecimal();
+    method public java.math.BigInteger nextBigInteger();
+    method public java.math.BigInteger nextBigInteger(int);
+    method public boolean nextBoolean();
+    method public byte nextByte();
+    method public byte nextByte(int);
+    method public double nextDouble();
+    method public float nextFloat();
+    method public int nextInt();
+    method public int nextInt(int);
+    method public String nextLine();
+    method public long nextLong();
+    method public long nextLong(int);
+    method public short nextShort();
+    method public short nextShort(int);
+    method public int radix();
+    method public java.util.Scanner reset();
+    method public java.util.Scanner skip(java.util.regex.Pattern);
+    method public java.util.Scanner skip(String);
+    method public java.util.Scanner useDelimiter(java.util.regex.Pattern);
+    method public java.util.Scanner useDelimiter(String);
+    method public java.util.Scanner useLocale(java.util.Locale);
+    method public java.util.Scanner useRadix(int);
+  }
+
+  public class ServiceConfigurationError extends java.lang.Error {
+    ctor public ServiceConfigurationError(String);
+    ctor public ServiceConfigurationError(String, Throwable);
+  }
+
+  public final class ServiceLoader<S> implements java.lang.Iterable<S> {
+    method public java.util.Iterator<S> iterator();
+    method public static <S> java.util.ServiceLoader<S> load(Class<S>, ClassLoader);
+    method public static <S> java.util.ServiceLoader<S> load(Class<S>);
+    method public static <S> java.util.ServiceLoader<S> loadInstalled(Class<S>);
+    method public void reload();
+  }
+
+  public interface Set<E> extends java.util.Collection<E> {
+    method @NonNull public static <E> java.util.Set<E> copyOf(@NonNull java.util.Collection<? extends E>);
+    method @NonNull public static <E> java.util.Set<E> of();
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull @java.lang.SafeVarargs public static <E> java.util.Set<E> of(@NonNull E...);
+  }
+
+  public class SimpleTimeZone extends java.util.TimeZone {
+    ctor public SimpleTimeZone(int, String);
+    ctor public SimpleTimeZone(int, String, int, int, int, int, int, int, int, int);
+    ctor public SimpleTimeZone(int, String, int, int, int, int, int, int, int, int, int);
+    ctor public SimpleTimeZone(int, String, int, int, int, int, int, int, int, int, int, int, int);
+    method public int getOffset(int, int, int, int, int, int);
+    method public int getRawOffset();
+    method public boolean inDaylightTime(java.util.Date);
+    method public void setDSTSavings(int);
+    method public void setEndRule(int, int, int, int);
+    method public void setEndRule(int, int, int);
+    method public void setEndRule(int, int, int, int, boolean);
+    method public void setRawOffset(int);
+    method public void setStartRule(int, int, int, int);
+    method public void setStartRule(int, int, int);
+    method public void setStartRule(int, int, int, int, boolean);
+    method public void setStartYear(int);
+    method public boolean useDaylightTime();
+    field public static final int STANDARD_TIME = 1; // 0x1
+    field public static final int UTC_TIME = 2; // 0x2
+    field public static final int WALL_TIME = 0; // 0x0
+  }
+
+  public interface SortedMap<K, V> extends java.util.Map<K,V> {
+    method @Nullable public java.util.Comparator<? super K> comparator();
+    method public K firstKey();
+    method @NonNull public java.util.SortedMap<K,V> headMap(K);
+    method public K lastKey();
+    method @NonNull public java.util.SortedMap<K,V> subMap(K, K);
+    method @NonNull public java.util.SortedMap<K,V> tailMap(K);
+  }
+
+  public interface SortedSet<E> extends java.util.Set<E> {
+    method public java.util.Comparator<? super E> comparator();
+    method public E first();
+    method public java.util.SortedSet<E> headSet(E);
+    method public E last();
+    method public java.util.SortedSet<E> subSet(E, E);
+    method public java.util.SortedSet<E> tailSet(E);
+  }
+
+  public interface Spliterator<T> {
+    method public int characteristics();
+    method public long estimateSize();
+    method public default void forEachRemaining(java.util.function.Consumer<? super T>);
+    method public default java.util.Comparator<? super T> getComparator();
+    method public default long getExactSizeIfKnown();
+    method public default boolean hasCharacteristics(int);
+    method public boolean tryAdvance(java.util.function.Consumer<? super T>);
+    method public java.util.Spliterator<T> trySplit();
+    field public static final int CONCURRENT = 4096; // 0x1000
+    field public static final int DISTINCT = 1; // 0x1
+    field public static final int IMMUTABLE = 1024; // 0x400
+    field public static final int NONNULL = 256; // 0x100
+    field public static final int ORDERED = 16; // 0x10
+    field public static final int SIZED = 64; // 0x40
+    field public static final int SORTED = 4; // 0x4
+    field public static final int SUBSIZED = 16384; // 0x4000
+  }
+
+  public static interface Spliterator.OfDouble extends java.util.Spliterator.OfPrimitive<java.lang.Double,java.util.function.DoubleConsumer,java.util.Spliterator.OfDouble> {
+    method public default void forEachRemaining(java.util.function.DoubleConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Double>);
+    method public boolean tryAdvance(java.util.function.DoubleConsumer);
+    method public default boolean tryAdvance(java.util.function.Consumer<? super java.lang.Double>);
+    method public java.util.Spliterator.OfDouble trySplit();
+  }
+
+  public static interface Spliterator.OfInt extends java.util.Spliterator.OfPrimitive<java.lang.Integer,java.util.function.IntConsumer,java.util.Spliterator.OfInt> {
+    method public default void forEachRemaining(java.util.function.IntConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Integer>);
+    method public boolean tryAdvance(java.util.function.IntConsumer);
+    method public default boolean tryAdvance(java.util.function.Consumer<? super java.lang.Integer>);
+    method public java.util.Spliterator.OfInt trySplit();
+  }
+
+  public static interface Spliterator.OfLong extends java.util.Spliterator.OfPrimitive<java.lang.Long,java.util.function.LongConsumer,java.util.Spliterator.OfLong> {
+    method public default void forEachRemaining(java.util.function.LongConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Long>);
+    method public boolean tryAdvance(java.util.function.LongConsumer);
+    method public default boolean tryAdvance(java.util.function.Consumer<? super java.lang.Long>);
+    method public java.util.Spliterator.OfLong trySplit();
+  }
+
+  public static interface Spliterator.OfPrimitive<T, T_CONS, T_SPLITR extends java.util.Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>> extends java.util.Spliterator<T> {
+    method public default void forEachRemaining(T_CONS);
+    method public boolean tryAdvance(T_CONS);
+    method public T_SPLITR trySplit();
+  }
+
+  public final class Spliterators {
+    method public static java.util.Spliterator.OfDouble emptyDoubleSpliterator();
+    method public static java.util.Spliterator.OfInt emptyIntSpliterator();
+    method public static java.util.Spliterator.OfLong emptyLongSpliterator();
+    method public static <T> java.util.Spliterator<T> emptySpliterator();
+    method public static <T> java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
+    method public static java.util.PrimitiveIterator.OfInt iterator(java.util.Spliterator.OfInt);
+    method public static java.util.PrimitiveIterator.OfLong iterator(java.util.Spliterator.OfLong);
+    method public static java.util.PrimitiveIterator.OfDouble iterator(java.util.Spliterator.OfDouble);
+    method public static <T> java.util.Spliterator<T> spliterator(Object[], int);
+    method public static <T> java.util.Spliterator<T> spliterator(Object[], int, int, int);
+    method public static java.util.Spliterator.OfInt spliterator(int[], int);
+    method public static java.util.Spliterator.OfInt spliterator(int[], int, int, int);
+    method public static java.util.Spliterator.OfLong spliterator(long[], int);
+    method public static java.util.Spliterator.OfLong spliterator(long[], int, int, int);
+    method public static java.util.Spliterator.OfDouble spliterator(double[], int);
+    method public static java.util.Spliterator.OfDouble spliterator(double[], int, int, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
+    method public static java.util.Spliterator.OfInt spliterator(java.util.PrimitiveIterator.OfInt, long, int);
+    method public static java.util.Spliterator.OfLong spliterator(java.util.PrimitiveIterator.OfLong, long, int);
+    method public static java.util.Spliterator.OfDouble spliterator(java.util.PrimitiveIterator.OfDouble, long, int);
+    method public static <T> java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
+    method public static java.util.Spliterator.OfInt spliteratorUnknownSize(java.util.PrimitiveIterator.OfInt, int);
+    method public static java.util.Spliterator.OfLong spliteratorUnknownSize(java.util.PrimitiveIterator.OfLong, int);
+    method public static java.util.Spliterator.OfDouble spliteratorUnknownSize(java.util.PrimitiveIterator.OfDouble, int);
+  }
+
+  public abstract static class Spliterators.AbstractDoubleSpliterator implements java.util.Spliterator.OfDouble {
+    ctor protected Spliterators.AbstractDoubleSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator.OfDouble trySplit();
+  }
+
+  public abstract static class Spliterators.AbstractIntSpliterator implements java.util.Spliterator.OfInt {
+    ctor protected Spliterators.AbstractIntSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator.OfInt trySplit();
+  }
+
+  public abstract static class Spliterators.AbstractLongSpliterator implements java.util.Spliterator.OfLong {
+    ctor protected Spliterators.AbstractLongSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator.OfLong trySplit();
+  }
+
+  public abstract static class Spliterators.AbstractSpliterator<T> implements java.util.Spliterator<T> {
+    ctor protected Spliterators.AbstractSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator<T> trySplit();
+  }
+
+  public final class SplittableRandom {
+    ctor public SplittableRandom(long);
+    ctor public SplittableRandom();
+    method public java.util.stream.DoubleStream doubles(long);
+    method public java.util.stream.DoubleStream doubles();
+    method public java.util.stream.DoubleStream doubles(long, double, double);
+    method public java.util.stream.DoubleStream doubles(double, double);
+    method public java.util.stream.IntStream ints(long);
+    method public java.util.stream.IntStream ints();
+    method public java.util.stream.IntStream ints(long, int, int);
+    method public java.util.stream.IntStream ints(int, int);
+    method public java.util.stream.LongStream longs(long);
+    method public java.util.stream.LongStream longs();
+    method public java.util.stream.LongStream longs(long, long, long);
+    method public java.util.stream.LongStream longs(long, long);
+    method public boolean nextBoolean();
+    method public double nextDouble();
+    method public double nextDouble(double);
+    method public double nextDouble(double, double);
+    method public int nextInt();
+    method public int nextInt(int);
+    method public int nextInt(int, int);
+    method public long nextLong();
+    method public long nextLong(long);
+    method public long nextLong(long, long);
+    method public java.util.SplittableRandom split();
+  }
+
+  public class Stack<E> extends java.util.Vector<E> {
+    ctor public Stack();
+    method public boolean empty();
+    method public E peek();
+    method public E pop();
+    method public E push(E);
+    method public int search(Object);
+  }
+
+  public final class StringJoiner {
+    ctor public StringJoiner(CharSequence);
+    ctor public StringJoiner(CharSequence, CharSequence, CharSequence);
+    method public java.util.StringJoiner add(CharSequence);
+    method public int length();
+    method public java.util.StringJoiner merge(java.util.StringJoiner);
+    method public java.util.StringJoiner setEmptyValue(CharSequence);
+  }
+
+  public class StringTokenizer implements java.util.Enumeration<java.lang.Object> {
+    ctor public StringTokenizer(String, String, boolean);
+    ctor public StringTokenizer(String, String);
+    ctor public StringTokenizer(String);
+    method public int countTokens();
+    method public boolean hasMoreElements();
+    method public boolean hasMoreTokens();
+    method public Object nextElement();
+    method public String nextToken();
+    method public String nextToken(String);
+  }
+
+  public abstract class TimeZone implements java.lang.Cloneable java.io.Serializable {
+    ctor public TimeZone();
+    method public Object clone();
+    method public static String[] getAvailableIDs(int);
+    method public static String[] getAvailableIDs();
+    method public int getDSTSavings();
+    method public static java.util.TimeZone getDefault();
+    method public final String getDisplayName();
+    method public final String getDisplayName(java.util.Locale);
+    method public final String getDisplayName(boolean, int);
+    method public String getDisplayName(boolean, int, java.util.Locale);
+    method public String getID();
+    method public abstract int getOffset(int, int, int, int, int, int);
+    method public int getOffset(long);
+    method public abstract int getRawOffset();
+    method public static java.util.TimeZone getTimeZone(String);
+    method public static java.util.TimeZone getTimeZone(java.time.ZoneId);
+    method public boolean hasSameRules(java.util.TimeZone);
+    method public abstract boolean inDaylightTime(java.util.Date);
+    method public boolean observesDaylightTime();
+    method public static void setDefault(java.util.TimeZone);
+    method public void setID(String);
+    method public abstract void setRawOffset(int);
+    method public java.time.ZoneId toZoneId();
+    method public abstract boolean useDaylightTime();
+    field public static final int LONG = 1; // 0x1
+    field public static final int SHORT = 0; // 0x0
+  }
+
+  public class Timer {
+    ctor public Timer();
+    ctor public Timer(boolean);
+    ctor public Timer(String);
+    ctor public Timer(String, boolean);
+    method public void cancel();
+    method public int purge();
+    method public void schedule(java.util.TimerTask, long);
+    method public void schedule(java.util.TimerTask, java.util.Date);
+    method public void schedule(java.util.TimerTask, long, long);
+    method public void schedule(java.util.TimerTask, java.util.Date, long);
+    method public void scheduleAtFixedRate(java.util.TimerTask, long, long);
+    method public void scheduleAtFixedRate(java.util.TimerTask, java.util.Date, long);
+  }
+
+  public abstract class TimerTask implements java.lang.Runnable {
+    ctor protected TimerTask();
+    method public boolean cancel();
+    method public long scheduledExecutionTime();
+  }
+
+  public class TooManyListenersException extends java.lang.Exception {
+    ctor public TooManyListenersException();
+    ctor public TooManyListenersException(String);
+  }
+
+  public class TreeMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.NavigableMap<K,V> java.io.Serializable {
+    ctor public TreeMap();
+    ctor public TreeMap(@Nullable java.util.Comparator<? super K>);
+    ctor public TreeMap(@NonNull java.util.Map<? extends K,? extends V>);
+    ctor public TreeMap(@NonNull java.util.SortedMap<K,? extends V>);
+    method @Nullable public java.util.Map.Entry<K,V> ceilingEntry(K);
+    method @Nullable public K ceilingKey(K);
+    method @NonNull public Object clone();
+    method @Nullable public java.util.Comparator<? super K> comparator();
+    method @NonNull public java.util.NavigableSet<K> descendingKeySet();
+    method @NonNull public java.util.NavigableMap<K,V> descendingMap();
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method @Nullable public java.util.Map.Entry<K,V> firstEntry();
+    method public K firstKey();
+    method @Nullable public java.util.Map.Entry<K,V> floorEntry(K);
+    method @Nullable public K floorKey(K);
+    method @NonNull public java.util.NavigableMap<K,V> headMap(K, boolean);
+    method @NonNull public java.util.SortedMap<K,V> headMap(K);
+    method @Nullable public java.util.Map.Entry<K,V> higherEntry(K);
+    method @Nullable public K higherKey(K);
+    method @Nullable public java.util.Map.Entry<K,V> lastEntry();
+    method public K lastKey();
+    method @Nullable public java.util.Map.Entry<K,V> lowerEntry(K);
+    method @Nullable public K lowerKey(K);
+    method @NonNull public java.util.NavigableSet<K> navigableKeySet();
+    method @Nullable public java.util.Map.Entry<K,V> pollFirstEntry();
+    method @Nullable public java.util.Map.Entry<K,V> pollLastEntry();
+    method @NonNull public java.util.NavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method @NonNull public java.util.SortedMap<K,V> subMap(K, K);
+    method @NonNull public java.util.NavigableMap<K,V> tailMap(K, boolean);
+    method @NonNull public java.util.SortedMap<K,V> tailMap(K);
+  }
+
+  public class TreeSet<E> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.util.NavigableSet<E> java.io.Serializable {
+    ctor public TreeSet();
+    ctor public TreeSet(java.util.Comparator<? super E>);
+    ctor public TreeSet(java.util.Collection<? extends E>);
+    ctor public TreeSet(java.util.SortedSet<E>);
+    method public E ceiling(E);
+    method public Object clone();
+    method public java.util.Comparator<? super E> comparator();
+    method public java.util.Iterator<E> descendingIterator();
+    method public java.util.NavigableSet<E> descendingSet();
+    method public E first();
+    method public E floor(E);
+    method public java.util.NavigableSet<E> headSet(E, boolean);
+    method public java.util.SortedSet<E> headSet(E);
+    method public E higher(E);
+    method public java.util.Iterator<E> iterator();
+    method public E last();
+    method public E lower(E);
+    method public E pollFirst();
+    method public E pollLast();
+    method public int size();
+    method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
+    method public java.util.SortedSet<E> subSet(E, E);
+    method public java.util.NavigableSet<E> tailSet(E, boolean);
+    method public java.util.SortedSet<E> tailSet(E);
+  }
+
+  public final class UUID implements java.lang.Comparable<java.util.UUID> java.io.Serializable {
+    ctor public UUID(long, long);
+    method public int clockSequence();
+    method public int compareTo(java.util.UUID);
+    method public static java.util.UUID fromString(String);
+    method public long getLeastSignificantBits();
+    method public long getMostSignificantBits();
+    method public static java.util.UUID nameUUIDFromBytes(byte[]);
+    method public long node();
+    method public static java.util.UUID randomUUID();
+    method public long timestamp();
+    method public int variant();
+    method public int version();
+  }
+
+  public class UnknownFormatConversionException extends java.util.IllegalFormatException {
+    ctor public UnknownFormatConversionException(String);
+    method public String getConversion();
+  }
+
+  public class UnknownFormatFlagsException extends java.util.IllegalFormatException {
+    ctor public UnknownFormatFlagsException(String);
+    method public String getFlags();
+  }
+
+  public class Vector<E> extends java.util.AbstractList<E> implements java.lang.Cloneable java.util.List<E> java.util.RandomAccess java.io.Serializable {
+    ctor public Vector(int, int);
+    ctor public Vector(int);
+    ctor public Vector();
+    ctor public Vector(@NonNull java.util.Collection<? extends E>);
+    method public void addElement(E);
+    method public int capacity();
+    method @NonNull public Object clone();
+    method public void copyInto(@NonNull Object[]);
+    method public E elementAt(int);
+    method @NonNull public java.util.Enumeration<E> elements();
+    method public void ensureCapacity(int);
+    method public E firstElement();
+    method public void forEach(@NonNull java.util.function.Consumer<? super E>);
+    method public E get(int);
+    method public int indexOf(@Nullable Object, int);
+    method public void insertElementAt(E, int);
+    method public E lastElement();
+    method public int lastIndexOf(@Nullable Object, int);
+    method public void removeAllElements();
+    method public boolean removeElement(@Nullable Object);
+    method public void removeElementAt(int);
+    method public void setElementAt(E, int);
+    method public void setSize(int);
+    method public int size();
+    method public void trimToSize();
+    field protected int capacityIncrement;
+    field protected int elementCount;
+    field @NonNull protected Object[] elementData;
+  }
+
+  public class WeakHashMap<K, V> extends java.util.AbstractMap<K,V> implements java.util.Map<K,V> {
+    ctor public WeakHashMap(int, float);
+    ctor public WeakHashMap(int);
+    ctor public WeakHashMap();
+    ctor public WeakHashMap(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+}
+
+package java.util.concurrent {
+
+  public abstract class AbstractExecutorService implements java.util.concurrent.ExecutorService {
+    ctor public AbstractExecutorService();
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(Runnable, T);
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
+    method public java.util.concurrent.Future<?> submit(Runnable);
+    method public <T> java.util.concurrent.Future<T> submit(Runnable, T);
+    method public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+  }
+
+  public class ArrayBlockingQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public ArrayBlockingQueue(int);
+    ctor public ArrayBlockingQueue(int, boolean);
+    ctor public ArrayBlockingQueue(int, boolean, java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E peek();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public interface BlockingDeque<E> extends java.util.concurrent.BlockingQueue<E> java.util.Deque<E> {
+    method public boolean offerFirst(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offerLast(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollFirst(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollLast(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void putFirst(E) throws java.lang.InterruptedException;
+    method public void putLast(E) throws java.lang.InterruptedException;
+    method public E takeFirst() throws java.lang.InterruptedException;
+    method public E takeLast() throws java.lang.InterruptedException;
+  }
+
+  public interface BlockingQueue<E> extends java.util.Queue<E> {
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public class BrokenBarrierException extends java.lang.Exception {
+    ctor public BrokenBarrierException();
+    ctor public BrokenBarrierException(String);
+  }
+
+  @java.lang.FunctionalInterface public interface Callable<V> {
+    method public V call() throws java.lang.Exception;
+  }
+
+  public class CancellationException extends java.lang.IllegalStateException {
+    ctor public CancellationException();
+    ctor public CancellationException(String);
+  }
+
+  public class CompletableFuture<T> implements java.util.concurrent.CompletionStage<T> java.util.concurrent.Future<T> {
+    ctor public CompletableFuture();
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Void> allOf(java.util.concurrent.CompletableFuture<?>...);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Object> anyOf(java.util.concurrent.CompletableFuture<?>...);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>, java.util.concurrent.Executor);
+    method public boolean cancel(boolean);
+    method public boolean complete(T);
+    method public java.util.concurrent.CompletableFuture<T> completeAsync(java.util.function.Supplier<? extends T>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<T> completeAsync(java.util.function.Supplier<? extends T>);
+    method public boolean completeExceptionally(Throwable);
+    method public java.util.concurrent.CompletableFuture<T> completeOnTimeout(T, long, java.util.concurrent.TimeUnit);
+    method public static <U> java.util.concurrent.CompletableFuture<U> completedFuture(U);
+    method public static <U> java.util.concurrent.CompletionStage<U> completedStage(U);
+    method public java.util.concurrent.CompletableFuture<T> copy();
+    method public java.util.concurrent.Executor defaultExecutor();
+    method public static java.util.concurrent.Executor delayedExecutor(long, java.util.concurrent.TimeUnit, java.util.concurrent.Executor);
+    method public static java.util.concurrent.Executor delayedExecutor(long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.CompletableFuture<T> exceptionally(java.util.function.Function<java.lang.Throwable,? extends T>);
+    method public static <U> java.util.concurrent.CompletableFuture<U> failedFuture(Throwable);
+    method public static <U> java.util.concurrent.CompletionStage<U> failedStage(Throwable);
+    method public T get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public T get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public T getNow(T);
+    method public int getNumberOfDependents();
+    method public <U> java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>, java.util.concurrent.Executor);
+    method public boolean isCancelled();
+    method public boolean isCompletedExceptionally();
+    method public boolean isDone();
+    method public T join();
+    method public java.util.concurrent.CompletionStage<T> minimalCompletionStage();
+    method public <U> java.util.concurrent.CompletableFuture<U> newIncompleteFuture();
+    method public void obtrudeException(Throwable);
+    method public void obtrudeValue(T);
+    method public java.util.concurrent.CompletableFuture<T> orTimeout(long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEither(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(Runnable);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(Runnable, java.util.concurrent.Executor);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>, java.util.concurrent.Executor);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRun(Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<T> toCompletableFuture();
+    method public java.util.concurrent.CompletableFuture<T> whenComplete(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletableFuture<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletableFuture<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>, java.util.concurrent.Executor);
+  }
+
+  public static interface CompletableFuture.AsynchronousCompletionTask {
+  }
+
+  public class CompletionException extends java.lang.RuntimeException {
+    ctor protected CompletionException();
+    ctor protected CompletionException(String);
+    ctor public CompletionException(String, Throwable);
+    ctor public CompletionException(Throwable);
+  }
+
+  public interface CompletionService<V> {
+    method public java.util.concurrent.Future<V> poll();
+    method public java.util.concurrent.Future<V> poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public java.util.concurrent.Future<V> submit(java.util.concurrent.Callable<V>);
+    method public java.util.concurrent.Future<V> submit(Runnable, V);
+    method public java.util.concurrent.Future<V> take() throws java.lang.InterruptedException;
+  }
+
+  public interface CompletionStage<T> {
+    method public java.util.concurrent.CompletionStage<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<T> exceptionally(java.util.function.Function<java.lang.Throwable,? extends T>);
+    method public <U> java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEither(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>, java.util.concurrent.Executor);
+    method public <U, V> java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenRun(Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<T> toCompletableFuture();
+    method public java.util.concurrent.CompletionStage<T> whenComplete(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletionStage<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletionStage<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>, java.util.concurrent.Executor);
+  }
+
+  public class ConcurrentHashMap<K, V> extends java.util.AbstractMap<K,V> implements java.util.concurrent.ConcurrentMap<K,V> java.io.Serializable {
+    ctor public ConcurrentHashMap();
+    ctor public ConcurrentHashMap(int);
+    ctor public ConcurrentHashMap(@NonNull java.util.Map<? extends K,? extends V>);
+    ctor public ConcurrentHashMap(int, float);
+    ctor public ConcurrentHashMap(int, float, int);
+    method public boolean contains(@NonNull Object);
+    method @NonNull public java.util.Enumeration<V> elements();
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public void forEach(long, @NonNull java.util.function.BiConsumer<? super K,? super V>);
+    method public <U> void forEach(long, @NonNull java.util.function.BiFunction<? super K,? super V,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method public void forEachEntry(long, @NonNull java.util.function.Consumer<? super java.util.Map.Entry<K,V>>);
+    method public <U> void forEachEntry(long, @NonNull java.util.function.Function<java.util.Map.Entry<K,V>,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method public void forEachKey(long, @NonNull java.util.function.Consumer<? super K>);
+    method public <U> void forEachKey(long, @NonNull java.util.function.Function<? super K,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method public void forEachValue(long, @NonNull java.util.function.Consumer<? super V>);
+    method public <U> void forEachValue(long, @NonNull java.util.function.Function<? super V,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method @NonNull public java.util.concurrent.ConcurrentHashMap.KeySetView<K,V> keySet(@NonNull V);
+    method @NonNull public java.util.Enumeration<K> keys();
+    method public long mappingCount();
+    method @NonNull public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K,java.lang.Boolean> newKeySet();
+    method @NonNull public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K,java.lang.Boolean> newKeySet(int);
+    method @Nullable public <U> U reduce(long, @NonNull java.util.function.BiFunction<? super K,? super V,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method @Nullable public java.util.Map.Entry<K,V> reduceEntries(long, @NonNull java.util.function.BiFunction<java.util.Map.Entry<K,V>,java.util.Map.Entry<K,V>,? extends java.util.Map.Entry<K,V>>);
+    method @Nullable public <U> U reduceEntries(long, @NonNull java.util.function.Function<java.util.Map.Entry<K,V>,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method public double reduceEntriesToDouble(long, @NonNull java.util.function.ToDoubleFunction<java.util.Map.Entry<K,V>>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceEntriesToInt(long, @NonNull java.util.function.ToIntFunction<java.util.Map.Entry<K,V>>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceEntriesToLong(long, @NonNull java.util.function.ToLongFunction<java.util.Map.Entry<K,V>>, long, @NonNull java.util.function.LongBinaryOperator);
+    method @Nullable public K reduceKeys(long, @NonNull java.util.function.BiFunction<? super K,? super K,? extends K>);
+    method @Nullable public <U> U reduceKeys(long, @NonNull java.util.function.Function<? super K,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method public double reduceKeysToDouble(long, @NonNull java.util.function.ToDoubleFunction<? super K>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceKeysToInt(long, @NonNull java.util.function.ToIntFunction<? super K>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceKeysToLong(long, @NonNull java.util.function.ToLongFunction<? super K>, long, @NonNull java.util.function.LongBinaryOperator);
+    method public double reduceToDouble(long, @NonNull java.util.function.ToDoubleBiFunction<? super K,? super V>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceToInt(long, @NonNull java.util.function.ToIntBiFunction<? super K,? super V>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceToLong(long, @NonNull java.util.function.ToLongBiFunction<? super K,? super V>, long, @NonNull java.util.function.LongBinaryOperator);
+    method @Nullable public V reduceValues(long, @NonNull java.util.function.BiFunction<? super V,? super V,? extends V>);
+    method @Nullable public <U> U reduceValues(long, @NonNull java.util.function.Function<? super V,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method public double reduceValuesToDouble(long, @NonNull java.util.function.ToDoubleFunction<? super V>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceValuesToInt(long, @NonNull java.util.function.ToIntFunction<? super V>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceValuesToLong(long, @NonNull java.util.function.ToLongFunction<? super V>, long, @NonNull java.util.function.LongBinaryOperator);
+    method @Nullable public <U> U search(long, @NonNull java.util.function.BiFunction<? super K,? super V,? extends U>);
+    method @Nullable public <U> U searchEntries(long, @NonNull java.util.function.Function<java.util.Map.Entry<K,V>,? extends U>);
+    method @Nullable public <U> U searchKeys(long, @NonNull java.util.function.Function<? super K,? extends U>);
+    method @Nullable public <U> U searchValues(long, @NonNull java.util.function.Function<? super V,? extends U>);
+  }
+
+  public static class ConcurrentHashMap.KeySetView<K, V> implements java.util.Collection<K> java.io.Serializable java.util.Set<K> {
+    method public boolean add(@NonNull K);
+    method public boolean addAll(@NonNull java.util.Collection<? extends K>);
+    method public final void clear();
+    method public boolean contains(@NonNull Object);
+    method public final boolean containsAll(@NonNull java.util.Collection<?>);
+    method public void forEach(@NonNull java.util.function.Consumer<? super K>);
+    method @NonNull public java.util.concurrent.ConcurrentHashMap<K,V> getMap();
+    method @Nullable public V getMappedValue();
+    method public final boolean isEmpty();
+    method @NonNull public java.util.Iterator<K> iterator();
+    method public boolean remove(@NonNull Object);
+    method public final boolean removeAll(@NonNull java.util.Collection<?>);
+    method public final boolean retainAll(@NonNull java.util.Collection<?>);
+    method public final int size();
+    method @NonNull public java.util.Spliterator<K> spliterator();
+    method @NonNull public final Object[] toArray();
+    method @NonNull public final <T> T[] toArray(@NonNull T[]);
+    method @NonNull public final String toString();
+  }
+
+  public class ConcurrentLinkedDeque<E> extends java.util.AbstractCollection<E> implements java.util.Deque<E> java.io.Serializable {
+    ctor public ConcurrentLinkedDeque();
+    ctor public ConcurrentLinkedDeque(java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method public java.util.Iterator<E> descendingIterator();
+    method public E element();
+    method public E getFirst();
+    method public E getLast();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method public E peek();
+    method public E peekFirst();
+    method public E peekLast();
+    method public E poll();
+    method public E pollFirst();
+    method public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E remove();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(Object);
+    method public int size();
+  }
+
+  public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue<E> implements java.util.Queue<E> java.io.Serializable {
+    ctor public ConcurrentLinkedQueue();
+    ctor public ConcurrentLinkedQueue(java.util.Collection<? extends E>);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll();
+    method public int size();
+  }
+
+  public interface ConcurrentMap<K, V> extends java.util.Map<K,V> {
+    method public V putIfAbsent(K, V);
+    method public boolean remove(Object, Object);
+    method public boolean replace(K, V, V);
+    method public V replace(K, V);
+  }
+
+  public interface ConcurrentNavigableMap<K, V> extends java.util.concurrent.ConcurrentMap<K,V> java.util.NavigableMap<K,V> {
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> descendingMap();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K);
+    method public java.util.NavigableSet<K> keySet();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, K);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K);
+  }
+
+  public class ConcurrentSkipListMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap<K,V> java.io.Serializable {
+    ctor public ConcurrentSkipListMap();
+    ctor public ConcurrentSkipListMap(java.util.Comparator<? super K>);
+    ctor public ConcurrentSkipListMap(java.util.Map<? extends K,? extends V>);
+    ctor public ConcurrentSkipListMap(java.util.SortedMap<K,? extends V>);
+    method public java.util.Map.Entry<K,V> ceilingEntry(K);
+    method public K ceilingKey(K);
+    method public java.util.concurrent.ConcurrentSkipListMap<K,V> clone();
+    method public java.util.Comparator<? super K> comparator();
+    method public java.util.NavigableSet<K> descendingKeySet();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> descendingMap();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public java.util.Map.Entry<K,V> firstEntry();
+    method public K firstKey();
+    method public java.util.Map.Entry<K,V> floorEntry(K);
+    method public K floorKey(K);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K);
+    method public java.util.Map.Entry<K,V> higherEntry(K);
+    method public K higherKey(K);
+    method public java.util.NavigableSet<K> keySet();
+    method public java.util.Map.Entry<K,V> lastEntry();
+    method public K lastKey();
+    method public java.util.Map.Entry<K,V> lowerEntry(K);
+    method public K lowerKey(K);
+    method public java.util.NavigableSet<K> navigableKeySet();
+    method public java.util.Map.Entry<K,V> pollFirstEntry();
+    method public java.util.Map.Entry<K,V> pollLastEntry();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, K);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K);
+  }
+
+  public class ConcurrentSkipListSet<E> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.util.NavigableSet<E> java.io.Serializable {
+    ctor public ConcurrentSkipListSet();
+    ctor public ConcurrentSkipListSet(java.util.Comparator<? super E>);
+    ctor public ConcurrentSkipListSet(java.util.Collection<? extends E>);
+    ctor public ConcurrentSkipListSet(java.util.SortedSet<E>);
+    method public E ceiling(E);
+    method public java.util.concurrent.ConcurrentSkipListSet<E> clone();
+    method public java.util.Comparator<? super E> comparator();
+    method public java.util.Iterator<E> descendingIterator();
+    method public java.util.NavigableSet<E> descendingSet();
+    method public E first();
+    method public E floor(E);
+    method public java.util.NavigableSet<E> headSet(E, boolean);
+    method public java.util.NavigableSet<E> headSet(E);
+    method public E higher(E);
+    method public java.util.Iterator<E> iterator();
+    method public E last();
+    method public E lower(E);
+    method public E pollFirst();
+    method public E pollLast();
+    method public int size();
+    method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
+    method public java.util.NavigableSet<E> subSet(E, E);
+    method public java.util.NavigableSet<E> tailSet(E, boolean);
+    method public java.util.NavigableSet<E> tailSet(E);
+  }
+
+  public class CopyOnWriteArrayList<E> implements java.lang.Cloneable java.util.List<E> java.util.RandomAccess java.io.Serializable {
+    ctor public CopyOnWriteArrayList();
+    ctor public CopyOnWriteArrayList(@NonNull java.util.Collection<? extends E>);
+    ctor public CopyOnWriteArrayList(@NonNull E[]);
+    method public boolean add(E);
+    method public void add(int, E);
+    method public boolean addAll(@NonNull java.util.Collection<? extends E>);
+    method public boolean addAll(int, @NonNull java.util.Collection<? extends E>);
+    method public int addAllAbsent(@NonNull java.util.Collection<? extends E>);
+    method public boolean addIfAbsent(E);
+    method public void clear();
+    method @NonNull public Object clone();
+    method public boolean contains(@Nullable Object);
+    method public boolean containsAll(@NonNull java.util.Collection<?>);
+    method public void forEach(@NonNull java.util.function.Consumer<? super E>);
+    method public E get(int);
+    method public int indexOf(@Nullable Object);
+    method public int indexOf(@Nullable E, int);
+    method public boolean isEmpty();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public int lastIndexOf(@Nullable Object);
+    method public int lastIndexOf(@Nullable E, int);
+    method @NonNull public java.util.ListIterator<E> listIterator();
+    method @NonNull public java.util.ListIterator<E> listIterator(int);
+    method public E remove(int);
+    method public boolean remove(@Nullable Object);
+    method public boolean removeAll(@NonNull java.util.Collection<?>);
+    method public boolean retainAll(@NonNull java.util.Collection<?>);
+    method public E set(int, E);
+    method public int size();
+    method @NonNull public java.util.List<E> subList(int, int);
+    method @NonNull public Object[] toArray();
+    method @NonNull public <T> T[] toArray(@NonNull T[]);
+  }
+
+  public class CopyOnWriteArraySet<E> extends java.util.AbstractSet<E> implements java.io.Serializable {
+    ctor public CopyOnWriteArraySet();
+    ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
+    method public void forEach(java.util.function.Consumer<? super E>);
+    method public java.util.Iterator<E> iterator();
+    method public int size();
+  }
+
+  public class CountDownLatch {
+    ctor public CountDownLatch(int);
+    method public void await() throws java.lang.InterruptedException;
+    method public boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void countDown();
+    method public long getCount();
+  }
+
+  public abstract class CountedCompleter<T> extends java.util.concurrent.ForkJoinTask<T> {
+    ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>, int);
+    ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>);
+    ctor protected CountedCompleter();
+    method public final void addToPendingCount(int);
+    method public final boolean compareAndSetPendingCount(int, int);
+    method public void complete(T);
+    method public abstract void compute();
+    method public final int decrementPendingCountUnlessZero();
+    method protected final boolean exec();
+    method public final java.util.concurrent.CountedCompleter<?> firstComplete();
+    method public final java.util.concurrent.CountedCompleter<?> getCompleter();
+    method public final int getPendingCount();
+    method public T getRawResult();
+    method public final java.util.concurrent.CountedCompleter<?> getRoot();
+    method public final void helpComplete(int);
+    method public final java.util.concurrent.CountedCompleter<?> nextComplete();
+    method public void onCompletion(java.util.concurrent.CountedCompleter<?>);
+    method public boolean onExceptionalCompletion(Throwable, java.util.concurrent.CountedCompleter<?>);
+    method public final void propagateCompletion();
+    method public final void quietlyCompleteRoot();
+    method public final void setPendingCount(int);
+    method protected void setRawResult(T);
+    method public final void tryComplete();
+  }
+
+  public class CyclicBarrier {
+    ctor public CyclicBarrier(int, Runnable);
+    ctor public CyclicBarrier(int);
+    method public int await() throws java.util.concurrent.BrokenBarrierException, java.lang.InterruptedException;
+    method public int await(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.BrokenBarrierException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public int getNumberWaiting();
+    method public int getParties();
+    method public boolean isBroken();
+    method public void reset();
+  }
+
+  public class DelayQueue<E extends java.util.concurrent.Delayed> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> {
+    ctor public DelayQueue();
+    ctor public DelayQueue(java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit);
+    method public E peek();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E);
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public interface Delayed extends java.lang.Comparable<java.util.concurrent.Delayed> {
+    method public long getDelay(java.util.concurrent.TimeUnit);
+  }
+
+  public class Exchanger<V> {
+    ctor public Exchanger();
+    method public V exchange(V) throws java.lang.InterruptedException;
+    method public V exchange(V, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+  }
+
+  public class ExecutionException extends java.lang.Exception {
+    ctor protected ExecutionException();
+    ctor protected ExecutionException(String);
+    ctor public ExecutionException(String, Throwable);
+    ctor public ExecutionException(Throwable);
+  }
+
+  public interface Executor {
+    method public void execute(Runnable);
+  }
+
+  public class ExecutorCompletionService<V> implements java.util.concurrent.CompletionService<V> {
+    ctor public ExecutorCompletionService(java.util.concurrent.Executor);
+    ctor public ExecutorCompletionService(java.util.concurrent.Executor, java.util.concurrent.BlockingQueue<java.util.concurrent.Future<V>>);
+    method public java.util.concurrent.Future<V> poll();
+    method public java.util.concurrent.Future<V> poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public java.util.concurrent.Future<V> submit(java.util.concurrent.Callable<V>);
+    method public java.util.concurrent.Future<V> submit(Runnable, V);
+    method public java.util.concurrent.Future<V> take() throws java.lang.InterruptedException;
+  }
+
+  public interface ExecutorService extends java.util.concurrent.Executor {
+    method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isShutdown();
+    method public boolean isTerminated();
+    method public void shutdown();
+    method public java.util.List<java.lang.Runnable> shutdownNow();
+    method public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.Future<T> submit(Runnable, T);
+    method public java.util.concurrent.Future<?> submit(Runnable);
+  }
+
+  public class Executors {
+    method public static <T> java.util.concurrent.Callable<T> callable(Runnable, T);
+    method public static java.util.concurrent.Callable<java.lang.Object> callable(Runnable);
+    method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedAction<?>);
+    method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedExceptionAction<?>);
+    method public static java.util.concurrent.ThreadFactory defaultThreadFactory();
+    method public static java.util.concurrent.ExecutorService newCachedThreadPool();
+    method public static java.util.concurrent.ExecutorService newCachedThreadPool(java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ExecutorService newFixedThreadPool(int);
+    method public static java.util.concurrent.ExecutorService newFixedThreadPool(int, java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ScheduledExecutorService newScheduledThreadPool(int);
+    method public static java.util.concurrent.ScheduledExecutorService newScheduledThreadPool(int, java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ExecutorService newSingleThreadExecutor();
+    method public static java.util.concurrent.ExecutorService newSingleThreadExecutor(java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor();
+    method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor(java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ExecutorService newWorkStealingPool(int);
+    method public static java.util.concurrent.ExecutorService newWorkStealingPool();
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
+    method public static java.util.concurrent.ThreadFactory privilegedThreadFactory();
+    method public static java.util.concurrent.ExecutorService unconfigurableExecutorService(java.util.concurrent.ExecutorService);
+    method public static java.util.concurrent.ScheduledExecutorService unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService);
+  }
+
+  public final class Flow {
+    method public static int defaultBufferSize();
+  }
+
+  public static interface Flow.Processor<T, R> extends java.util.concurrent.Flow.Subscriber<T> java.util.concurrent.Flow.Publisher<R> {
+  }
+
+  @java.lang.FunctionalInterface public static interface Flow.Publisher<T> {
+    method public void subscribe(java.util.concurrent.Flow.Subscriber<? super T>);
+  }
+
+  public static interface Flow.Subscriber<T> {
+    method public void onComplete();
+    method public void onError(Throwable);
+    method public void onNext(T);
+    method public void onSubscribe(java.util.concurrent.Flow.Subscription);
+  }
+
+  public static interface Flow.Subscription {
+    method public void cancel();
+    method public void request(long);
+  }
+
+  public class ForkJoinPool extends java.util.concurrent.AbstractExecutorService {
+    ctor public ForkJoinPool();
+    ctor public ForkJoinPool(int);
+    ctor public ForkJoinPool(int, java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory, java.lang.Thread.UncaughtExceptionHandler, boolean);
+    method public boolean awaitQuiescence(long, java.util.concurrent.TimeUnit);
+    method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public static java.util.concurrent.ForkJoinPool commonPool();
+    method protected int drainTasksTo(java.util.Collection<? super java.util.concurrent.ForkJoinTask<?>>);
+    method public void execute(java.util.concurrent.ForkJoinTask<?>);
+    method public void execute(Runnable);
+    method public int getActiveThreadCount();
+    method public boolean getAsyncMode();
+    method public static int getCommonPoolParallelism();
+    method public java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory getFactory();
+    method public int getParallelism();
+    method public int getPoolSize();
+    method public int getQueuedSubmissionCount();
+    method public long getQueuedTaskCount();
+    method public int getRunningThreadCount();
+    method public long getStealCount();
+    method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
+    method public boolean hasQueuedSubmissions();
+    method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
+    method public boolean isQuiescent();
+    method public boolean isShutdown();
+    method public boolean isTerminated();
+    method public boolean isTerminating();
+    method public static void managedBlock(java.util.concurrent.ForkJoinPool.ManagedBlocker) throws java.lang.InterruptedException;
+    method protected java.util.concurrent.ForkJoinTask<?> pollSubmission();
+    method public void shutdown();
+    method public java.util.List<java.lang.Runnable> shutdownNow();
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(Runnable, T);
+    method public java.util.concurrent.ForkJoinTask<?> submit(Runnable);
+    field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
+  }
+
+  public static interface ForkJoinPool.ForkJoinWorkerThreadFactory {
+    method public java.util.concurrent.ForkJoinWorkerThread newThread(java.util.concurrent.ForkJoinPool);
+  }
+
+  public static interface ForkJoinPool.ManagedBlocker {
+    method public boolean block() throws java.lang.InterruptedException;
+    method public boolean isReleasable();
+  }
+
+  public abstract class ForkJoinTask<V> implements java.util.concurrent.Future<V> java.io.Serializable {
+    ctor public ForkJoinTask();
+    method public static java.util.concurrent.ForkJoinTask<?> adapt(Runnable);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(Runnable, T);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
+    method public boolean cancel(boolean);
+    method public final boolean compareAndSetForkJoinTaskTag(short, short);
+    method public void complete(V);
+    method public void completeExceptionally(Throwable);
+    method protected abstract boolean exec();
+    method public final java.util.concurrent.ForkJoinTask<V> fork();
+    method public final V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public final V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public final Throwable getException();
+    method public final short getForkJoinTaskTag();
+    method public static java.util.concurrent.ForkJoinPool getPool();
+    method public static int getQueuedTaskCount();
+    method public abstract V getRawResult();
+    method public static int getSurplusQueuedTaskCount();
+    method public static void helpQuiesce();
+    method public static boolean inForkJoinPool();
+    method public final V invoke();
+    method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>, java.util.concurrent.ForkJoinTask<?>);
+    method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>...);
+    method public static <T extends java.util.concurrent.ForkJoinTask<?>> java.util.Collection<T> invokeAll(java.util.Collection<T>);
+    method public final boolean isCancelled();
+    method public final boolean isCompletedAbnormally();
+    method public final boolean isCompletedNormally();
+    method public final boolean isDone();
+    method public final V join();
+    method protected static java.util.concurrent.ForkJoinTask<?> peekNextLocalTask();
+    method protected static java.util.concurrent.ForkJoinTask<?> pollNextLocalTask();
+    method protected static java.util.concurrent.ForkJoinTask<?> pollTask();
+    method public final void quietlyComplete();
+    method public final void quietlyInvoke();
+    method public final void quietlyJoin();
+    method public void reinitialize();
+    method public final short setForkJoinTaskTag(short);
+    method protected abstract void setRawResult(V);
+    method public boolean tryUnfork();
+  }
+
+  public class ForkJoinWorkerThread extends java.lang.Thread {
+    ctor protected ForkJoinWorkerThread(java.util.concurrent.ForkJoinPool);
+    method public java.util.concurrent.ForkJoinPool getPool();
+    method public int getPoolIndex();
+    method protected void onStart();
+    method protected void onTermination(Throwable);
+  }
+
+  public interface Future<V> {
+    method public boolean cancel(boolean);
+    method public V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+  }
+
+  public class FutureTask<V> implements java.util.concurrent.RunnableFuture<V> {
+    ctor public FutureTask(java.util.concurrent.Callable<V>);
+    ctor public FutureTask(Runnable, V);
+    method public boolean cancel(boolean);
+    method protected void done();
+    method public V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+    method public void run();
+    method protected boolean runAndReset();
+    method protected void set(V);
+    method protected void setException(Throwable);
+  }
+
+  public class LinkedBlockingDeque<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingDeque<E> java.io.Serializable {
+    ctor public LinkedBlockingDeque();
+    ctor public LinkedBlockingDeque(int);
+    ctor public LinkedBlockingDeque(java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method public java.util.Iterator<E> descendingIterator();
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public E getFirst();
+    method public E getLast();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offerFirst(E);
+    method public boolean offerFirst(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offerLast(E);
+    method public boolean offerLast(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E peek();
+    method public E peekFirst();
+    method public E peekLast();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollFirst();
+    method public E pollFirst(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollLast();
+    method public E pollLast(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pop();
+    method public void push(E);
+    method public void put(E) throws java.lang.InterruptedException;
+    method public void putFirst(E) throws java.lang.InterruptedException;
+    method public void putLast(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(Object);
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+    method public E takeFirst() throws java.lang.InterruptedException;
+    method public E takeLast() throws java.lang.InterruptedException;
+  }
+
+  public class LinkedBlockingQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public LinkedBlockingQueue();
+    ctor public LinkedBlockingQueue(int);
+    ctor public LinkedBlockingQueue(java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll();
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public class LinkedTransferQueue<E> extends java.util.AbstractQueue<E> implements java.io.Serializable java.util.concurrent.TransferQueue<E> {
+    ctor public LinkedTransferQueue();
+    ctor public LinkedTransferQueue(java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public int getWaitingConsumerCount();
+    method public boolean hasWaitingConsumer();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit);
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll();
+    method public void put(E);
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+    method public void transfer(E) throws java.lang.InterruptedException;
+    method public boolean tryTransfer(E);
+    method public boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+  public class Phaser {
+    ctor public Phaser();
+    ctor public Phaser(int);
+    ctor public Phaser(java.util.concurrent.Phaser);
+    ctor public Phaser(java.util.concurrent.Phaser, int);
+    method public int arrive();
+    method public int arriveAndAwaitAdvance();
+    method public int arriveAndDeregister();
+    method public int awaitAdvance(int);
+    method public int awaitAdvanceInterruptibly(int) throws java.lang.InterruptedException;
+    method public int awaitAdvanceInterruptibly(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public int bulkRegister(int);
+    method public void forceTermination();
+    method public int getArrivedParties();
+    method public java.util.concurrent.Phaser getParent();
+    method public final int getPhase();
+    method public int getRegisteredParties();
+    method public java.util.concurrent.Phaser getRoot();
+    method public int getUnarrivedParties();
+    method public boolean isTerminated();
+    method protected boolean onAdvance(int, int);
+    method public int register();
+  }
+
+  public class PriorityBlockingQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public PriorityBlockingQueue();
+    ctor public PriorityBlockingQueue(int);
+    ctor public PriorityBlockingQueue(int, java.util.Comparator<? super E>);
+    ctor public PriorityBlockingQueue(java.util.Collection<? extends E>);
+    method public java.util.Comparator<? super E> comparator();
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit);
+    method public E peek();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E);
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public abstract class RecursiveAction extends java.util.concurrent.ForkJoinTask<java.lang.Void> {
+    ctor public RecursiveAction();
+    method protected abstract void compute();
+    method protected final boolean exec();
+    method public final Void getRawResult();
+    method protected final void setRawResult(Void);
+  }
+
+  public abstract class RecursiveTask<V> extends java.util.concurrent.ForkJoinTask<V> {
+    ctor public RecursiveTask();
+    method protected abstract V compute();
+    method protected final boolean exec();
+    method public final V getRawResult();
+    method protected final void setRawResult(V);
+  }
+
+  public class RejectedExecutionException extends java.lang.RuntimeException {
+    ctor public RejectedExecutionException();
+    ctor public RejectedExecutionException(String);
+    ctor public RejectedExecutionException(String, Throwable);
+    ctor public RejectedExecutionException(Throwable);
+  }
+
+  public interface RejectedExecutionHandler {
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public interface RunnableFuture<V> extends java.lang.Runnable java.util.concurrent.Future<V> {
+  }
+
+  public interface RunnableScheduledFuture<V> extends java.util.concurrent.RunnableFuture<V> java.util.concurrent.ScheduledFuture<V> {
+    method public boolean isPeriodic();
+  }
+
+  public interface ScheduledExecutorService extends java.util.concurrent.ExecutorService {
+    method public java.util.concurrent.ScheduledFuture<?> schedule(Runnable, long, java.util.concurrent.TimeUnit);
+    method public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(Runnable, long, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(Runnable, long, long, java.util.concurrent.TimeUnit);
+  }
+
+  public interface ScheduledFuture<V> extends java.util.concurrent.Delayed java.util.concurrent.Future<V> {
+  }
+
+  public class ScheduledThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor implements java.util.concurrent.ScheduledExecutorService {
+    ctor public ScheduledThreadPoolExecutor(int);
+    ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory);
+    ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.RejectedExecutionHandler);
+    ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
+    method public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy();
+    method public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy();
+    method public boolean getRemoveOnCancelPolicy();
+    method public java.util.concurrent.ScheduledFuture<?> schedule(Runnable, long, java.util.concurrent.TimeUnit);
+    method public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(Runnable, long, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(Runnable, long, long, java.util.concurrent.TimeUnit);
+    method public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean);
+    method public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean);
+    method public void setRemoveOnCancelPolicy(boolean);
+  }
+
+  public class Semaphore implements java.io.Serializable {
+    ctor public Semaphore(int);
+    ctor public Semaphore(int, boolean);
+    method public void acquire() throws java.lang.InterruptedException;
+    method public void acquire(int) throws java.lang.InterruptedException;
+    method public void acquireUninterruptibly();
+    method public void acquireUninterruptibly(int);
+    method public int availablePermits();
+    method public int drainPermits();
+    method public final int getQueueLength();
+    method protected java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public final boolean hasQueuedThreads();
+    method public boolean isFair();
+    method protected void reducePermits(int);
+    method public void release();
+    method public void release(int);
+    method public boolean tryAcquire();
+    method public boolean tryAcquire(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean tryAcquire(int);
+    method public boolean tryAcquire(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+  public class SynchronousQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public SynchronousQueue();
+    ctor public SynchronousQueue(boolean);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll();
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public interface ThreadFactory {
+    method public Thread newThread(Runnable);
+  }
+
+  public class ThreadLocalRandom extends java.util.Random {
+    method public static java.util.concurrent.ThreadLocalRandom current();
+    method public double nextDouble(double);
+    method public double nextDouble(double, double);
+    method public int nextInt(int, int);
+    method public long nextLong(long);
+    method public long nextLong(long, long);
+  }
+
+  public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>);
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>, java.util.concurrent.ThreadFactory);
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>, java.util.concurrent.RejectedExecutionHandler);
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler);
+    method protected void afterExecute(Runnable, Throwable);
+    method public void allowCoreThreadTimeOut(boolean);
+    method public boolean allowsCoreThreadTimeOut();
+    method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method protected void beforeExecute(Thread, Runnable);
+    method public void execute(Runnable);
+    method protected void finalize();
+    method public int getActiveCount();
+    method public long getCompletedTaskCount();
+    method public int getCorePoolSize();
+    method public long getKeepAliveTime(java.util.concurrent.TimeUnit);
+    method public int getLargestPoolSize();
+    method public int getMaximumPoolSize();
+    method public int getPoolSize();
+    method public java.util.concurrent.BlockingQueue<java.lang.Runnable> getQueue();
+    method public java.util.concurrent.RejectedExecutionHandler getRejectedExecutionHandler();
+    method public long getTaskCount();
+    method public java.util.concurrent.ThreadFactory getThreadFactory();
+    method public boolean isShutdown();
+    method public boolean isTerminated();
+    method public boolean isTerminating();
+    method public int prestartAllCoreThreads();
+    method public boolean prestartCoreThread();
+    method public void purge();
+    method public boolean remove(Runnable);
+    method public void setCorePoolSize(int);
+    method public void setKeepAliveTime(long, java.util.concurrent.TimeUnit);
+    method public void setMaximumPoolSize(int);
+    method public void setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler);
+    method public void setThreadFactory(java.util.concurrent.ThreadFactory);
+    method public void shutdown();
+    method public java.util.List<java.lang.Runnable> shutdownNow();
+    method protected void terminated();
+  }
+
+  public static class ThreadPoolExecutor.AbortPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.AbortPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public static class ThreadPoolExecutor.CallerRunsPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.CallerRunsPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public static class ThreadPoolExecutor.DiscardOldestPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.DiscardOldestPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public static class ThreadPoolExecutor.DiscardPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.DiscardPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public enum TimeUnit {
+    method public long convert(long, java.util.concurrent.TimeUnit);
+    method public void sleep(long) throws java.lang.InterruptedException;
+    method public void timedJoin(Thread, long) throws java.lang.InterruptedException;
+    method public void timedWait(Object, long) throws java.lang.InterruptedException;
+    method public long toDays(long);
+    method public long toHours(long);
+    method public long toMicros(long);
+    method public long toMillis(long);
+    method public long toMinutes(long);
+    method public long toNanos(long);
+    method public long toSeconds(long);
+    enum_constant public static final java.util.concurrent.TimeUnit DAYS;
+    enum_constant public static final java.util.concurrent.TimeUnit HOURS;
+    enum_constant public static final java.util.concurrent.TimeUnit MICROSECONDS;
+    enum_constant public static final java.util.concurrent.TimeUnit MILLISECONDS;
+    enum_constant public static final java.util.concurrent.TimeUnit MINUTES;
+    enum_constant public static final java.util.concurrent.TimeUnit NANOSECONDS;
+    enum_constant public static final java.util.concurrent.TimeUnit SECONDS;
+  }
+
+  public class TimeoutException extends java.lang.Exception {
+    ctor public TimeoutException();
+    ctor public TimeoutException(String);
+  }
+
+  public interface TransferQueue<E> extends java.util.concurrent.BlockingQueue<E> {
+    method public int getWaitingConsumerCount();
+    method public boolean hasWaitingConsumer();
+    method public void transfer(E) throws java.lang.InterruptedException;
+    method public boolean tryTransfer(E);
+    method public boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+}
+
+package java.util.concurrent.atomic {
+
+  public class AtomicBoolean implements java.io.Serializable {
+    ctor public AtomicBoolean(boolean);
+    ctor public AtomicBoolean();
+    method public final boolean compareAndSet(boolean, boolean);
+    method public final boolean get();
+    method public final boolean getAndSet(boolean);
+    method public final void lazySet(boolean);
+    method public final void set(boolean);
+    method public boolean weakCompareAndSet(boolean, boolean);
+  }
+
+  public class AtomicInteger extends java.lang.Number implements java.io.Serializable {
+    ctor public AtomicInteger(int);
+    ctor public AtomicInteger();
+    method public final int accumulateAndGet(int, java.util.function.IntBinaryOperator);
+    method public final int addAndGet(int);
+    method public final boolean compareAndSet(int, int);
+    method public final int decrementAndGet();
+    method public double doubleValue();
+    method public float floatValue();
+    method public final int get();
+    method public final int getAndAccumulate(int, java.util.function.IntBinaryOperator);
+    method public final int getAndAdd(int);
+    method public final int getAndDecrement();
+    method public final int getAndIncrement();
+    method public final int getAndSet(int);
+    method public final int getAndUpdate(java.util.function.IntUnaryOperator);
+    method public final int incrementAndGet();
+    method public int intValue();
+    method public final void lazySet(int);
+    method public long longValue();
+    method public final void set(int);
+    method public final int updateAndGet(java.util.function.IntUnaryOperator);
+    method public final boolean weakCompareAndSet(int, int);
+  }
+
+  public class AtomicIntegerArray implements java.io.Serializable {
+    ctor public AtomicIntegerArray(int);
+    ctor public AtomicIntegerArray(int[]);
+    method public final int accumulateAndGet(int, int, java.util.function.IntBinaryOperator);
+    method public final int addAndGet(int, int);
+    method public final boolean compareAndSet(int, int, int);
+    method public final int decrementAndGet(int);
+    method public final int get(int);
+    method public final int getAndAccumulate(int, int, java.util.function.IntBinaryOperator);
+    method public final int getAndAdd(int, int);
+    method public final int getAndDecrement(int);
+    method public final int getAndIncrement(int);
+    method public final int getAndSet(int, int);
+    method public final int getAndUpdate(int, java.util.function.IntUnaryOperator);
+    method public final int incrementAndGet(int);
+    method public final void lazySet(int, int);
+    method public final int length();
+    method public final void set(int, int);
+    method public final int updateAndGet(int, java.util.function.IntUnaryOperator);
+    method public final boolean weakCompareAndSet(int, int, int);
+  }
+
+  public abstract class AtomicIntegerFieldUpdater<T> {
+    ctor protected AtomicIntegerFieldUpdater();
+    method public final int accumulateAndGet(T, int, java.util.function.IntBinaryOperator);
+    method public int addAndGet(T, int);
+    method public abstract boolean compareAndSet(T, int, int);
+    method public int decrementAndGet(T);
+    method public abstract int get(T);
+    method public final int getAndAccumulate(T, int, java.util.function.IntBinaryOperator);
+    method public int getAndAdd(T, int);
+    method public int getAndDecrement(T);
+    method public int getAndIncrement(T);
+    method public int getAndSet(T, int);
+    method public final int getAndUpdate(T, java.util.function.IntUnaryOperator);
+    method public int incrementAndGet(T);
+    method public abstract void lazySet(T, int);
+    method public static <U> java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(Class<U>, String);
+    method public abstract void set(T, int);
+    method public final int updateAndGet(T, java.util.function.IntUnaryOperator);
+    method public abstract boolean weakCompareAndSet(T, int, int);
+  }
+
+  public class AtomicLong extends java.lang.Number implements java.io.Serializable {
+    ctor public AtomicLong(long);
+    ctor public AtomicLong();
+    method public final long accumulateAndGet(long, java.util.function.LongBinaryOperator);
+    method public final long addAndGet(long);
+    method public final boolean compareAndSet(long, long);
+    method public final long decrementAndGet();
+    method public double doubleValue();
+    method public float floatValue();
+    method public final long get();
+    method public final long getAndAccumulate(long, java.util.function.LongBinaryOperator);
+    method public final long getAndAdd(long);
+    method public final long getAndDecrement();
+    method public final long getAndIncrement();
+    method public final long getAndSet(long);
+    method public final long getAndUpdate(java.util.function.LongUnaryOperator);
+    method public final long incrementAndGet();
+    method public int intValue();
+    method public final void lazySet(long);
+    method public long longValue();
+    method public final void set(long);
+    method public final long updateAndGet(java.util.function.LongUnaryOperator);
+    method public final boolean weakCompareAndSet(long, long);
+  }
+
+  public class AtomicLongArray implements java.io.Serializable {
+    ctor public AtomicLongArray(int);
+    ctor public AtomicLongArray(long[]);
+    method public final long accumulateAndGet(int, long, java.util.function.LongBinaryOperator);
+    method public long addAndGet(int, long);
+    method public final boolean compareAndSet(int, long, long);
+    method public final long decrementAndGet(int);
+    method public final long get(int);
+    method public final long getAndAccumulate(int, long, java.util.function.LongBinaryOperator);
+    method public final long getAndAdd(int, long);
+    method public final long getAndDecrement(int);
+    method public final long getAndIncrement(int);
+    method public final long getAndSet(int, long);
+    method public final long getAndUpdate(int, java.util.function.LongUnaryOperator);
+    method public final long incrementAndGet(int);
+    method public final void lazySet(int, long);
+    method public final int length();
+    method public final void set(int, long);
+    method public final long updateAndGet(int, java.util.function.LongUnaryOperator);
+    method public final boolean weakCompareAndSet(int, long, long);
+  }
+
+  public abstract class AtomicLongFieldUpdater<T> {
+    ctor protected AtomicLongFieldUpdater();
+    method public final long accumulateAndGet(T, long, java.util.function.LongBinaryOperator);
+    method public long addAndGet(T, long);
+    method public abstract boolean compareAndSet(T, long, long);
+    method public long decrementAndGet(T);
+    method public abstract long get(T);
+    method public final long getAndAccumulate(T, long, java.util.function.LongBinaryOperator);
+    method public long getAndAdd(T, long);
+    method public long getAndDecrement(T);
+    method public long getAndIncrement(T);
+    method public long getAndSet(T, long);
+    method public final long getAndUpdate(T, java.util.function.LongUnaryOperator);
+    method public long incrementAndGet(T);
+    method public abstract void lazySet(T, long);
+    method public static <U> java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(Class<U>, String);
+    method public abstract void set(T, long);
+    method public final long updateAndGet(T, java.util.function.LongUnaryOperator);
+    method public abstract boolean weakCompareAndSet(T, long, long);
+  }
+
+  public class AtomicMarkableReference<V> {
+    ctor public AtomicMarkableReference(V, boolean);
+    method public boolean attemptMark(V, boolean);
+    method public boolean compareAndSet(V, V, boolean, boolean);
+    method public V get(boolean[]);
+    method public V getReference();
+    method public boolean isMarked();
+    method public void set(V, boolean);
+    method public boolean weakCompareAndSet(V, V, boolean, boolean);
+  }
+
+  public class AtomicReference<V> implements java.io.Serializable {
+    ctor public AtomicReference(V);
+    ctor public AtomicReference();
+    method public final V accumulateAndGet(V, java.util.function.BinaryOperator<V>);
+    method public final boolean compareAndSet(V, V);
+    method public final V get();
+    method public final V getAndAccumulate(V, java.util.function.BinaryOperator<V>);
+    method public final V getAndSet(V);
+    method public final V getAndUpdate(java.util.function.UnaryOperator<V>);
+    method public final void lazySet(V);
+    method public final void set(V);
+    method public final V updateAndGet(java.util.function.UnaryOperator<V>);
+    method public final boolean weakCompareAndSet(V, V);
+  }
+
+  public class AtomicReferenceArray<E> implements java.io.Serializable {
+    ctor public AtomicReferenceArray(int);
+    ctor public AtomicReferenceArray(E[]);
+    method public final E accumulateAndGet(int, E, java.util.function.BinaryOperator<E>);
+    method public final boolean compareAndSet(int, E, E);
+    method public final E get(int);
+    method public final E getAndAccumulate(int, E, java.util.function.BinaryOperator<E>);
+    method public final E getAndSet(int, E);
+    method public final E getAndUpdate(int, java.util.function.UnaryOperator<E>);
+    method public final void lazySet(int, E);
+    method public final int length();
+    method public final void set(int, E);
+    method public final E updateAndGet(int, java.util.function.UnaryOperator<E>);
+    method public final boolean weakCompareAndSet(int, E, E);
+  }
+
+  public abstract class AtomicReferenceFieldUpdater<T, V> {
+    ctor protected AtomicReferenceFieldUpdater();
+    method public final V accumulateAndGet(T, V, java.util.function.BinaryOperator<V>);
+    method public abstract boolean compareAndSet(T, V, V);
+    method public abstract V get(T);
+    method public final V getAndAccumulate(T, V, java.util.function.BinaryOperator<V>);
+    method public V getAndSet(T, V);
+    method public final V getAndUpdate(T, java.util.function.UnaryOperator<V>);
+    method public abstract void lazySet(T, V);
+    method public static <U, W> java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U>, Class<W>, String);
+    method public abstract void set(T, V);
+    method public final V updateAndGet(T, java.util.function.UnaryOperator<V>);
+    method public abstract boolean weakCompareAndSet(T, V, V);
+  }
+
+  public class AtomicStampedReference<V> {
+    ctor public AtomicStampedReference(V, int);
+    method public boolean attemptStamp(V, int);
+    method public boolean compareAndSet(V, V, int, int);
+    method public V get(int[]);
+    method public V getReference();
+    method public int getStamp();
+    method public void set(V, int);
+    method public boolean weakCompareAndSet(V, V, int, int);
+  }
+
+  public class DoubleAccumulator extends java.lang.Number implements java.io.Serializable {
+    ctor public DoubleAccumulator(java.util.function.DoubleBinaryOperator, double);
+    method public void accumulate(double);
+    method public double doubleValue();
+    method public float floatValue();
+    method public double get();
+    method public double getThenReset();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+  }
+
+  public class DoubleAdder extends java.lang.Number implements java.io.Serializable {
+    ctor public DoubleAdder();
+    method public void add(double);
+    method public double doubleValue();
+    method public float floatValue();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+    method public double sum();
+    method public double sumThenReset();
+  }
+
+  public class LongAccumulator extends java.lang.Number implements java.io.Serializable {
+    ctor public LongAccumulator(java.util.function.LongBinaryOperator, long);
+    method public void accumulate(long);
+    method public double doubleValue();
+    method public float floatValue();
+    method public long get();
+    method public long getThenReset();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+  }
+
+  public class LongAdder extends java.lang.Number implements java.io.Serializable {
+    ctor public LongAdder();
+    method public void add(long);
+    method public void decrement();
+    method public double doubleValue();
+    method public float floatValue();
+    method public void increment();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+    method public long sum();
+    method public long sumThenReset();
+  }
+
+}
+
+package java.util.concurrent.locks {
+
+  public abstract class AbstractOwnableSynchronizer implements java.io.Serializable {
+    ctor protected AbstractOwnableSynchronizer();
+    method protected final Thread getExclusiveOwnerThread();
+    method protected final void setExclusiveOwnerThread(Thread);
+  }
+
+  public abstract class AbstractQueuedLongSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable {
+    ctor protected AbstractQueuedLongSynchronizer();
+    method public final void acquire(long);
+    method public final void acquireInterruptibly(long) throws java.lang.InterruptedException;
+    method public final void acquireShared(long);
+    method public final void acquireSharedInterruptibly(long) throws java.lang.InterruptedException;
+    method protected final boolean compareAndSetState(long, long);
+    method public final java.util.Collection<java.lang.Thread> getExclusiveQueuedThreads();
+    method public final Thread getFirstQueuedThread();
+    method public final int getQueueLength();
+    method public final java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public final java.util.Collection<java.lang.Thread> getSharedQueuedThreads();
+    method protected final long getState();
+    method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method public final java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method public final boolean hasContended();
+    method public final boolean hasQueuedPredecessors();
+    method public final boolean hasQueuedThreads();
+    method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method protected boolean isHeldExclusively();
+    method public final boolean isQueued(Thread);
+    method public final boolean owns(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method public final boolean release(long);
+    method public final boolean releaseShared(long);
+    method protected final void setState(long);
+    method protected boolean tryAcquire(long);
+    method public final boolean tryAcquireNanos(long, long) throws java.lang.InterruptedException;
+    method protected long tryAcquireShared(long);
+    method public final boolean tryAcquireSharedNanos(long, long) throws java.lang.InterruptedException;
+    method protected boolean tryRelease(long);
+    method protected boolean tryReleaseShared(long);
+  }
+
+  public class AbstractQueuedLongSynchronizer.ConditionObject implements java.util.concurrent.locks.Condition java.io.Serializable {
+    ctor public AbstractQueuedLongSynchronizer.ConditionObject();
+    method public final void await() throws java.lang.InterruptedException;
+    method public final boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public final long awaitNanos(long) throws java.lang.InterruptedException;
+    method public final void awaitUninterruptibly();
+    method public final boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException;
+    method protected final int getWaitQueueLength();
+    method protected final java.util.Collection<java.lang.Thread> getWaitingThreads();
+    method protected final boolean hasWaiters();
+    method public final void signal();
+    method public final void signalAll();
+  }
+
+  public abstract class AbstractQueuedSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable {
+    ctor protected AbstractQueuedSynchronizer();
+    method public final void acquire(int);
+    method public final void acquireInterruptibly(int) throws java.lang.InterruptedException;
+    method public final void acquireShared(int);
+    method public final void acquireSharedInterruptibly(int) throws java.lang.InterruptedException;
+    method protected final boolean compareAndSetState(int, int);
+    method public final java.util.Collection<java.lang.Thread> getExclusiveQueuedThreads();
+    method public final Thread getFirstQueuedThread();
+    method public final int getQueueLength();
+    method public final java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public final java.util.Collection<java.lang.Thread> getSharedQueuedThreads();
+    method protected final int getState();
+    method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method public final java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method public final boolean hasContended();
+    method public final boolean hasQueuedPredecessors();
+    method public final boolean hasQueuedThreads();
+    method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method protected boolean isHeldExclusively();
+    method public final boolean isQueued(Thread);
+    method public final boolean owns(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method public final boolean release(int);
+    method public final boolean releaseShared(int);
+    method protected final void setState(int);
+    method protected boolean tryAcquire(int);
+    method public final boolean tryAcquireNanos(int, long) throws java.lang.InterruptedException;
+    method protected int tryAcquireShared(int);
+    method public final boolean tryAcquireSharedNanos(int, long) throws java.lang.InterruptedException;
+    method protected boolean tryRelease(int);
+    method protected boolean tryReleaseShared(int);
+  }
+
+  public class AbstractQueuedSynchronizer.ConditionObject implements java.util.concurrent.locks.Condition java.io.Serializable {
+    ctor public AbstractQueuedSynchronizer.ConditionObject();
+    method public final void await() throws java.lang.InterruptedException;
+    method public final boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public final long awaitNanos(long) throws java.lang.InterruptedException;
+    method public final void awaitUninterruptibly();
+    method public final boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException;
+    method protected final int getWaitQueueLength();
+    method protected final java.util.Collection<java.lang.Thread> getWaitingThreads();
+    method protected final boolean hasWaiters();
+    method public final void signal();
+    method public final void signalAll();
+  }
+
+  public interface Condition {
+    method public void await() throws java.lang.InterruptedException;
+    method public boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public long awaitNanos(long) throws java.lang.InterruptedException;
+    method public void awaitUninterruptibly();
+    method public boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException;
+    method public void signal();
+    method public void signalAll();
+  }
+
+  public interface Lock {
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public class LockSupport {
+    method public static Object getBlocker(Thread);
+    method public static void park(Object);
+    method public static void park();
+    method public static void parkNanos(Object, long);
+    method public static void parkNanos(long);
+    method public static void parkUntil(Object, long);
+    method public static void parkUntil(long);
+    method public static void unpark(Thread);
+  }
+
+  public interface ReadWriteLock {
+    method public java.util.concurrent.locks.Lock readLock();
+    method public java.util.concurrent.locks.Lock writeLock();
+  }
+
+  public class ReentrantLock implements java.util.concurrent.locks.Lock java.io.Serializable {
+    ctor public ReentrantLock();
+    ctor public ReentrantLock(boolean);
+    method public int getHoldCount();
+    method protected Thread getOwner();
+    method public final int getQueueLength();
+    method protected java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public int getWaitQueueLength(java.util.concurrent.locks.Condition);
+    method protected java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.Condition);
+    method public final boolean hasQueuedThread(Thread);
+    method public final boolean hasQueuedThreads();
+    method public boolean hasWaiters(java.util.concurrent.locks.Condition);
+    method public final boolean isFair();
+    method public boolean isHeldByCurrentThread();
+    method public boolean isLocked();
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public class ReentrantReadWriteLock implements java.util.concurrent.locks.ReadWriteLock java.io.Serializable {
+    ctor public ReentrantReadWriteLock();
+    ctor public ReentrantReadWriteLock(boolean);
+    method protected Thread getOwner();
+    method public final int getQueueLength();
+    method protected java.util.Collection<java.lang.Thread> getQueuedReaderThreads();
+    method protected java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method protected java.util.Collection<java.lang.Thread> getQueuedWriterThreads();
+    method public int getReadHoldCount();
+    method public int getReadLockCount();
+    method public int getWaitQueueLength(java.util.concurrent.locks.Condition);
+    method protected java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.Condition);
+    method public int getWriteHoldCount();
+    method public final boolean hasQueuedThread(Thread);
+    method public final boolean hasQueuedThreads();
+    method public boolean hasWaiters(java.util.concurrent.locks.Condition);
+    method public final boolean isFair();
+    method public boolean isWriteLocked();
+    method public boolean isWriteLockedByCurrentThread();
+    method public java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock readLock();
+    method public java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock writeLock();
+  }
+
+  public static class ReentrantReadWriteLock.ReadLock implements java.util.concurrent.locks.Lock java.io.Serializable {
+    ctor protected ReentrantReadWriteLock.ReadLock(java.util.concurrent.locks.ReentrantReadWriteLock);
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public static class ReentrantReadWriteLock.WriteLock implements java.util.concurrent.locks.Lock java.io.Serializable {
+    ctor protected ReentrantReadWriteLock.WriteLock(java.util.concurrent.locks.ReentrantReadWriteLock);
+    method public int getHoldCount();
+    method public boolean isHeldByCurrentThread();
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public class StampedLock implements java.io.Serializable {
+    ctor public StampedLock();
+    method public java.util.concurrent.locks.Lock asReadLock();
+    method public java.util.concurrent.locks.ReadWriteLock asReadWriteLock();
+    method public java.util.concurrent.locks.Lock asWriteLock();
+    method public int getReadLockCount();
+    method public boolean isReadLocked();
+    method public boolean isWriteLocked();
+    method public long readLock();
+    method public long readLockInterruptibly() throws java.lang.InterruptedException;
+    method public long tryConvertToOptimisticRead(long);
+    method public long tryConvertToReadLock(long);
+    method public long tryConvertToWriteLock(long);
+    method public long tryOptimisticRead();
+    method public long tryReadLock();
+    method public long tryReadLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean tryUnlockRead();
+    method public boolean tryUnlockWrite();
+    method public long tryWriteLock();
+    method public long tryWriteLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock(long);
+    method public void unlockRead(long);
+    method public void unlockWrite(long);
+    method public boolean validate(long);
+    method public long writeLock();
+    method public long writeLockInterruptibly() throws java.lang.InterruptedException;
+  }
+
+}
+
+package java.util.function {
+
+  @java.lang.FunctionalInterface public interface BiConsumer<T, U> {
+    method public void accept(T, U);
+    method public default java.util.function.BiConsumer<T,U> andThen(java.util.function.BiConsumer<? super T,? super U>);
+  }
+
+  @java.lang.FunctionalInterface public interface BiFunction<T, U, R> {
+    method public default <V> java.util.function.BiFunction<T,U,V> andThen(java.util.function.Function<? super R,? extends V>);
+    method public R apply(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface BiPredicate<T, U> {
+    method public default java.util.function.BiPredicate<T,U> and(java.util.function.BiPredicate<? super T,? super U>);
+    method public default java.util.function.BiPredicate<T,U> negate();
+    method public default java.util.function.BiPredicate<T,U> or(java.util.function.BiPredicate<? super T,? super U>);
+    method public boolean test(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface BinaryOperator<T> extends java.util.function.BiFunction<T,T,T> {
+    method public static <T> java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
+  }
+
+  @java.lang.FunctionalInterface public interface BooleanSupplier {
+    method public boolean getAsBoolean();
+  }
+
+  @java.lang.FunctionalInterface public interface Consumer<T> {
+    method public void accept(T);
+    method public default java.util.function.Consumer<T> andThen(java.util.function.Consumer<? super T>);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleBinaryOperator {
+    method public double applyAsDouble(double, double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleConsumer {
+    method public void accept(double);
+    method public default java.util.function.DoubleConsumer andThen(java.util.function.DoubleConsumer);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleFunction<R> {
+    method public R apply(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoublePredicate {
+    method public default java.util.function.DoublePredicate and(java.util.function.DoublePredicate);
+    method public default java.util.function.DoublePredicate negate();
+    method public default java.util.function.DoublePredicate or(java.util.function.DoublePredicate);
+    method public boolean test(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleSupplier {
+    method public double getAsDouble();
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleToIntFunction {
+    method public int applyAsInt(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleToLongFunction {
+    method public long applyAsLong(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleUnaryOperator {
+    method public default java.util.function.DoubleUnaryOperator andThen(java.util.function.DoubleUnaryOperator);
+    method public double applyAsDouble(double);
+    method public default java.util.function.DoubleUnaryOperator compose(java.util.function.DoubleUnaryOperator);
+    method public static java.util.function.DoubleUnaryOperator identity();
+  }
+
+  @java.lang.FunctionalInterface public interface Function<T, R> {
+    method public default <V> java.util.function.Function<T,V> andThen(java.util.function.Function<? super R,? extends V>);
+    method public R apply(T);
+    method public default <V> java.util.function.Function<V,R> compose(java.util.function.Function<? super V,? extends T>);
+    method public static <T> java.util.function.Function<T,T> identity();
+  }
+
+  @java.lang.FunctionalInterface public interface IntBinaryOperator {
+    method public int applyAsInt(int, int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntConsumer {
+    method public void accept(int);
+    method public default java.util.function.IntConsumer andThen(java.util.function.IntConsumer);
+  }
+
+  @java.lang.FunctionalInterface public interface IntFunction<R> {
+    method public R apply(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntPredicate {
+    method public default java.util.function.IntPredicate and(java.util.function.IntPredicate);
+    method public default java.util.function.IntPredicate negate();
+    method public default java.util.function.IntPredicate or(java.util.function.IntPredicate);
+    method public boolean test(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntSupplier {
+    method public int getAsInt();
+  }
+
+  @java.lang.FunctionalInterface public interface IntToDoubleFunction {
+    method public double applyAsDouble(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntToLongFunction {
+    method public long applyAsLong(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntUnaryOperator {
+    method public default java.util.function.IntUnaryOperator andThen(java.util.function.IntUnaryOperator);
+    method public int applyAsInt(int);
+    method public default java.util.function.IntUnaryOperator compose(java.util.function.IntUnaryOperator);
+    method public static java.util.function.IntUnaryOperator identity();
+  }
+
+  @java.lang.FunctionalInterface public interface LongBinaryOperator {
+    method public long applyAsLong(long, long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongConsumer {
+    method public void accept(long);
+    method public default java.util.function.LongConsumer andThen(java.util.function.LongConsumer);
+  }
+
+  @java.lang.FunctionalInterface public interface LongFunction<R> {
+    method public R apply(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongPredicate {
+    method public default java.util.function.LongPredicate and(java.util.function.LongPredicate);
+    method public default java.util.function.LongPredicate negate();
+    method public default java.util.function.LongPredicate or(java.util.function.LongPredicate);
+    method public boolean test(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongSupplier {
+    method public long getAsLong();
+  }
+
+  @java.lang.FunctionalInterface public interface LongToDoubleFunction {
+    method public double applyAsDouble(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongToIntFunction {
+    method public int applyAsInt(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongUnaryOperator {
+    method public default java.util.function.LongUnaryOperator andThen(java.util.function.LongUnaryOperator);
+    method public long applyAsLong(long);
+    method public default java.util.function.LongUnaryOperator compose(java.util.function.LongUnaryOperator);
+    method public static java.util.function.LongUnaryOperator identity();
+  }
+
+  @java.lang.FunctionalInterface public interface ObjDoubleConsumer<T> {
+    method public void accept(T, double);
+  }
+
+  @java.lang.FunctionalInterface public interface ObjIntConsumer<T> {
+    method public void accept(T, int);
+  }
+
+  @java.lang.FunctionalInterface public interface ObjLongConsumer<T> {
+    method public void accept(T, long);
+  }
+
+  @java.lang.FunctionalInterface public interface Predicate<T> {
+    method public default java.util.function.Predicate<T> and(java.util.function.Predicate<? super T>);
+    method public static <T> java.util.function.Predicate<T> isEqual(Object);
+    method public default java.util.function.Predicate<T> negate();
+    method public default java.util.function.Predicate<T> or(java.util.function.Predicate<? super T>);
+    method public boolean test(T);
+  }
+
+  @java.lang.FunctionalInterface public interface Supplier<T> {
+    method public T get();
+  }
+
+  @java.lang.FunctionalInterface public interface ToDoubleBiFunction<T, U> {
+    method public double applyAsDouble(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface ToDoubleFunction<T> {
+    method public double applyAsDouble(T);
+  }
+
+  @java.lang.FunctionalInterface public interface ToIntBiFunction<T, U> {
+    method public int applyAsInt(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface ToIntFunction<T> {
+    method public int applyAsInt(T);
+  }
+
+  @java.lang.FunctionalInterface public interface ToLongBiFunction<T, U> {
+    method public long applyAsLong(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface ToLongFunction<T> {
+    method public long applyAsLong(T);
+  }
+
+  @java.lang.FunctionalInterface public interface UnaryOperator<T> extends java.util.function.Function<T,T> {
+    method public static <T> java.util.function.UnaryOperator<T> identity();
+  }
+
+}
+
+package java.util.jar {
+
+  public class Attributes implements java.lang.Cloneable java.util.Map<java.lang.Object,java.lang.Object> {
+    ctor public Attributes();
+    ctor public Attributes(int);
+    ctor public Attributes(java.util.jar.Attributes);
+    method public void clear();
+    method public Object clone();
+    method public boolean containsKey(Object);
+    method public boolean containsValue(Object);
+    method public java.util.Set<java.util.Map.Entry<java.lang.Object,java.lang.Object>> entrySet();
+    method public Object get(Object);
+    method public String getValue(String);
+    method public String getValue(java.util.jar.Attributes.Name);
+    method public boolean isEmpty();
+    method public java.util.Set<java.lang.Object> keySet();
+    method public Object put(Object, Object);
+    method public void putAll(java.util.Map<?,?>);
+    method public String putValue(String, String);
+    method public Object remove(Object);
+    method public int size();
+    method public java.util.Collection<java.lang.Object> values();
+    field protected java.util.Map<java.lang.Object,java.lang.Object> map;
+  }
+
+  public static class Attributes.Name {
+    ctor public Attributes.Name(String);
+    field public static final java.util.jar.Attributes.Name CLASS_PATH;
+    field public static final java.util.jar.Attributes.Name CONTENT_TYPE;
+    field @Deprecated public static final java.util.jar.Attributes.Name EXTENSION_INSTALLATION;
+    field public static final java.util.jar.Attributes.Name EXTENSION_LIST;
+    field public static final java.util.jar.Attributes.Name EXTENSION_NAME;
+    field public static final java.util.jar.Attributes.Name IMPLEMENTATION_TITLE;
+    field @Deprecated public static final java.util.jar.Attributes.Name IMPLEMENTATION_URL;
+    field public static final java.util.jar.Attributes.Name IMPLEMENTATION_VENDOR;
+    field @Deprecated public static final java.util.jar.Attributes.Name IMPLEMENTATION_VENDOR_ID;
+    field public static final java.util.jar.Attributes.Name IMPLEMENTATION_VERSION;
+    field public static final java.util.jar.Attributes.Name MAIN_CLASS;
+    field public static final java.util.jar.Attributes.Name MANIFEST_VERSION;
+    field public static final java.util.jar.Attributes.Name SEALED;
+    field public static final java.util.jar.Attributes.Name SIGNATURE_VERSION;
+    field public static final java.util.jar.Attributes.Name SPECIFICATION_TITLE;
+    field public static final java.util.jar.Attributes.Name SPECIFICATION_VENDOR;
+    field public static final java.util.jar.Attributes.Name SPECIFICATION_VERSION;
+  }
+
+  public class JarEntry extends java.util.zip.ZipEntry {
+    ctor public JarEntry(String);
+    ctor public JarEntry(java.util.zip.ZipEntry);
+    ctor public JarEntry(java.util.jar.JarEntry);
+    method public java.util.jar.Attributes getAttributes() throws java.io.IOException;
+    method public java.security.cert.Certificate[] getCertificates();
+    method public java.security.CodeSigner[] getCodeSigners();
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class JarException extends java.util.zip.ZipException {
+    ctor public JarException();
+    ctor public JarException(String);
+  }
+
+  public class JarFile extends java.util.zip.ZipFile {
+    ctor public JarFile(String) throws java.io.IOException;
+    ctor public JarFile(String, boolean) throws java.io.IOException;
+    ctor public JarFile(java.io.File) throws java.io.IOException;
+    ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
+    ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+    method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+    method public java.util.jar.JarEntry getJarEntry(String);
+    method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final String MANIFEST_NAME = "META-INF/MANIFEST.MF";
+  }
+
+  public class JarInputStream extends java.util.zip.ZipInputStream {
+    ctor public JarInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException;
+    method public java.util.jar.Manifest getManifest();
+    method public java.util.jar.JarEntry getNextJarEntry() throws java.io.IOException;
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class JarOutputStream extends java.util.zip.ZipOutputStream {
+    ctor public JarOutputStream(java.io.OutputStream, java.util.jar.Manifest) throws java.io.IOException;
+    ctor public JarOutputStream(java.io.OutputStream) throws java.io.IOException;
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class Manifest implements java.lang.Cloneable {
+    ctor public Manifest();
+    ctor public Manifest(java.io.InputStream) throws java.io.IOException;
+    ctor public Manifest(java.util.jar.Manifest);
+    method public void clear();
+    method public Object clone();
+    method public java.util.jar.Attributes getAttributes(String);
+    method public java.util.Map<java.lang.String,java.util.jar.Attributes> getEntries();
+    method public java.util.jar.Attributes getMainAttributes();
+    method public void read(java.io.InputStream) throws java.io.IOException;
+    method public void write(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  public abstract class Pack200 {
+    method public static java.util.jar.Pack200.Packer newPacker();
+    method public static java.util.jar.Pack200.Unpacker newUnpacker();
+  }
+
+  public static interface Pack200.Packer {
+    method @Deprecated public default void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void pack(java.util.jar.JarFile, java.io.OutputStream) throws java.io.IOException;
+    method public void pack(java.util.jar.JarInputStream, java.io.OutputStream) throws java.io.IOException;
+    method public java.util.SortedMap<java.lang.String,java.lang.String> properties();
+    method @Deprecated public default void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    field public static final String CLASS_ATTRIBUTE_PFX = "pack.class.attribute.";
+    field public static final String CODE_ATTRIBUTE_PFX = "pack.code.attribute.";
+    field public static final String DEFLATE_HINT = "pack.deflate.hint";
+    field public static final String EFFORT = "pack.effort";
+    field public static final String ERROR = "error";
+    field public static final String FALSE = "false";
+    field public static final String FIELD_ATTRIBUTE_PFX = "pack.field.attribute.";
+    field public static final String KEEP = "keep";
+    field public static final String KEEP_FILE_ORDER = "pack.keep.file.order";
+    field public static final String LATEST = "latest";
+    field public static final String METHOD_ATTRIBUTE_PFX = "pack.method.attribute.";
+    field public static final String MODIFICATION_TIME = "pack.modification.time";
+    field public static final String PASS = "pass";
+    field public static final String PASS_FILE_PFX = "pack.pass.file.";
+    field public static final String PROGRESS = "pack.progress";
+    field public static final String SEGMENT_LIMIT = "pack.segment.limit";
+    field public static final String STRIP = "strip";
+    field public static final String TRUE = "true";
+    field public static final String UNKNOWN_ATTRIBUTE = "pack.unknown.attribute";
+  }
+
+  public static interface Pack200.Unpacker {
+    method @Deprecated public default void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public java.util.SortedMap<java.lang.String,java.lang.String> properties();
+    method @Deprecated public default void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void unpack(java.io.InputStream, java.util.jar.JarOutputStream) throws java.io.IOException;
+    method public void unpack(java.io.File, java.util.jar.JarOutputStream) throws java.io.IOException;
+    field public static final String DEFLATE_HINT = "unpack.deflate.hint";
+    field public static final String FALSE = "false";
+    field public static final String KEEP = "keep";
+    field public static final String PROGRESS = "unpack.progress";
+    field public static final String TRUE = "true";
+  }
+
+}
+
+package java.util.logging {
+
+  public class ConsoleHandler extends java.util.logging.StreamHandler {
+    ctor public ConsoleHandler();
+    method public void close();
+  }
+
+  public class ErrorManager {
+    ctor public ErrorManager();
+    method public void error(String, Exception, int);
+    field public static final int CLOSE_FAILURE = 3; // 0x3
+    field public static final int FLUSH_FAILURE = 2; // 0x2
+    field public static final int FORMAT_FAILURE = 5; // 0x5
+    field public static final int GENERIC_FAILURE = 0; // 0x0
+    field public static final int OPEN_FAILURE = 4; // 0x4
+    field public static final int WRITE_FAILURE = 1; // 0x1
+  }
+
+  public class FileHandler extends java.util.logging.StreamHandler {
+    ctor public FileHandler() throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String, boolean) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String, int, int) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String, int, int, boolean) throws java.io.IOException, java.lang.SecurityException;
+  }
+
+  @java.lang.FunctionalInterface public interface Filter {
+    method public boolean isLoggable(java.util.logging.LogRecord);
+  }
+
+  public abstract class Formatter {
+    ctor protected Formatter();
+    method public abstract String format(java.util.logging.LogRecord);
+    method public String formatMessage(java.util.logging.LogRecord);
+    method public String getHead(java.util.logging.Handler);
+    method public String getTail(java.util.logging.Handler);
+  }
+
+  public abstract class Handler {
+    ctor protected Handler();
+    method public abstract void close() throws java.lang.SecurityException;
+    method public abstract void flush();
+    method public String getEncoding();
+    method public java.util.logging.ErrorManager getErrorManager();
+    method public java.util.logging.Filter getFilter();
+    method public java.util.logging.Formatter getFormatter();
+    method public java.util.logging.Level getLevel();
+    method public boolean isLoggable(java.util.logging.LogRecord);
+    method public abstract void publish(java.util.logging.LogRecord);
+    method protected void reportError(String, Exception, int);
+    method public void setEncoding(String) throws java.lang.SecurityException, java.io.UnsupportedEncodingException;
+    method public void setErrorManager(java.util.logging.ErrorManager);
+    method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setFormatter(java.util.logging.Formatter) throws java.lang.SecurityException;
+    method public void setLevel(java.util.logging.Level) throws java.lang.SecurityException;
+  }
+
+  public class Level implements java.io.Serializable {
+    ctor protected Level(@NonNull String, int);
+    ctor protected Level(@NonNull String, int, @Nullable String);
+    method @NonNull public String getLocalizedName();
+    method @NonNull public String getName();
+    method @Nullable public String getResourceBundleName();
+    method public final int intValue();
+    method @NonNull public static java.util.logging.Level parse(@NonNull String) throws java.lang.IllegalArgumentException;
+    method @NonNull public final String toString();
+    field @NonNull public static final java.util.logging.Level ALL;
+    field @NonNull public static final java.util.logging.Level CONFIG;
+    field @NonNull public static final java.util.logging.Level FINE;
+    field @NonNull public static final java.util.logging.Level FINER;
+    field @NonNull public static final java.util.logging.Level FINEST;
+    field @NonNull public static final java.util.logging.Level INFO;
+    field @NonNull public static final java.util.logging.Level OFF;
+    field @NonNull public static final java.util.logging.Level SEVERE;
+    field @NonNull public static final java.util.logging.Level WARNING;
+  }
+
+  public class LogManager {
+    ctor protected LogManager();
+    method public boolean addLogger(java.util.logging.Logger);
+    method @Deprecated public void addPropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void checkAccess() throws java.lang.SecurityException;
+    method public static java.util.logging.LogManager getLogManager();
+    method public java.util.logging.Logger getLogger(String);
+    method public java.util.Enumeration<java.lang.String> getLoggerNames();
+    method public static java.util.logging.LoggingMXBean getLoggingMXBean();
+    method public String getProperty(String);
+    method public void readConfiguration() throws java.io.IOException, java.lang.SecurityException;
+    method public void readConfiguration(java.io.InputStream) throws java.io.IOException, java.lang.SecurityException;
+    method @Deprecated public void removePropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void reset() throws java.lang.SecurityException;
+    field public static final String LOGGING_MXBEAN_NAME = "java.util.logging:type=Logging";
+  }
+
+  public class LogRecord implements java.io.Serializable {
+    ctor public LogRecord(java.util.logging.Level, String);
+    method public java.util.logging.Level getLevel();
+    method public String getLoggerName();
+    method public String getMessage();
+    method public long getMillis();
+    method public Object[] getParameters();
+    method public java.util.ResourceBundle getResourceBundle();
+    method public String getResourceBundleName();
+    method public long getSequenceNumber();
+    method public String getSourceClassName();
+    method public String getSourceMethodName();
+    method public int getThreadID();
+    method public Throwable getThrown();
+    method public void setLevel(java.util.logging.Level);
+    method public void setLoggerName(String);
+    method public void setMessage(String);
+    method public void setMillis(long);
+    method public void setParameters(Object[]);
+    method public void setResourceBundle(java.util.ResourceBundle);
+    method public void setResourceBundleName(String);
+    method public void setSequenceNumber(long);
+    method public void setSourceClassName(String);
+    method public void setSourceMethodName(String);
+    method public void setThreadID(int);
+    method public void setThrown(Throwable);
+  }
+
+  public class Logger {
+    ctor protected Logger(@Nullable String, @Nullable String);
+    method public void addHandler(@NonNull java.util.logging.Handler) throws java.lang.SecurityException;
+    method public void config(@Nullable String);
+    method public void config(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void entering(@Nullable String, @Nullable String);
+    method public void entering(@Nullable String, @Nullable String, @Nullable Object);
+    method public void entering(@Nullable String, @Nullable String, @Nullable Object[]);
+    method public void exiting(@Nullable String, @Nullable String);
+    method public void exiting(@Nullable String, @Nullable String, @Nullable Object);
+    method public void fine(@Nullable String);
+    method public void fine(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void finer(@Nullable String);
+    method public void finer(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void finest(@Nullable String);
+    method public void finest(@NonNull java.util.function.Supplier<java.lang.String>);
+    method @NonNull public static java.util.logging.Logger getAnonymousLogger();
+    method @NonNull public static java.util.logging.Logger getAnonymousLogger(@Nullable String);
+    method @Nullable public java.util.logging.Filter getFilter();
+    method @NonNull public static final java.util.logging.Logger getGlobal();
+    method @NonNull public java.util.logging.Handler[] getHandlers();
+    method @Nullable public java.util.logging.Level getLevel();
+    method @NonNull public static java.util.logging.Logger getLogger(@NonNull String);
+    method @NonNull public static java.util.logging.Logger getLogger(@NonNull String, @Nullable String);
+    method @Nullable public String getName();
+    method @Nullable public java.util.logging.Logger getParent();
+    method @Nullable public java.util.ResourceBundle getResourceBundle();
+    method @Nullable public String getResourceBundleName();
+    method public boolean getUseParentHandlers();
+    method public void info(@Nullable String);
+    method public void info(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public boolean isLoggable(@NonNull java.util.logging.Level);
+    method public void log(@NonNull java.util.logging.LogRecord);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String);
+    method public void log(@NonNull java.util.logging.Level, @NonNull java.util.function.Supplier<java.lang.String>);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String, @Nullable Object);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String, @Nullable Object[]);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String, @Nullable Throwable);
+    method public void log(@NonNull java.util.logging.Level, @Nullable Throwable, @NonNull java.util.function.Supplier<java.lang.String>);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @NonNull java.util.function.Supplier<java.lang.String>);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable Object);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable Object[]);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable Throwable);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable Throwable, @NonNull java.util.function.Supplier<java.lang.String>);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String, @Nullable Object);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String, @Nullable Object[]);
+    method public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable java.util.ResourceBundle, @Nullable String, @Nullable java.lang.Object...);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String, @Nullable Throwable);
+    method public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable java.util.ResourceBundle, @Nullable String, @Nullable Throwable);
+    method public void removeHandler(@Nullable java.util.logging.Handler) throws java.lang.SecurityException;
+    method public void setFilter(@Nullable java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setLevel(@Nullable java.util.logging.Level) throws java.lang.SecurityException;
+    method public void setParent(@NonNull java.util.logging.Logger);
+    method public void setResourceBundle(@NonNull java.util.ResourceBundle);
+    method public void setUseParentHandlers(boolean);
+    method public void severe(@Nullable String);
+    method public void severe(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void throwing(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public void warning(@Nullable String);
+    method public void warning(@NonNull java.util.function.Supplier<java.lang.String>);
+    field @NonNull public static final String GLOBAL_LOGGER_NAME = "global";
+    field @Deprecated @NonNull public static final java.util.logging.Logger global;
+  }
+
+  public interface LoggingMXBean {
+    method public String getLoggerLevel(String);
+    method public java.util.List<java.lang.String> getLoggerNames();
+    method public String getParentLoggerName(String);
+    method public void setLoggerLevel(String, String);
+  }
+
+  public final class LoggingPermission extends java.security.BasicPermission {
+    ctor public LoggingPermission(String, String) throws java.lang.IllegalArgumentException;
+  }
+
+  public class MemoryHandler extends java.util.logging.Handler {
+    ctor public MemoryHandler();
+    ctor public MemoryHandler(java.util.logging.Handler, int, java.util.logging.Level);
+    method public void close() throws java.lang.SecurityException;
+    method public void flush();
+    method public java.util.logging.Level getPushLevel();
+    method public void publish(java.util.logging.LogRecord);
+    method public void push();
+    method public void setPushLevel(java.util.logging.Level) throws java.lang.SecurityException;
+  }
+
+  public class SimpleFormatter extends java.util.logging.Formatter {
+    ctor public SimpleFormatter();
+    method public String format(java.util.logging.LogRecord);
+  }
+
+  public class SocketHandler extends java.util.logging.StreamHandler {
+    ctor public SocketHandler() throws java.io.IOException;
+    ctor public SocketHandler(String, int) throws java.io.IOException;
+  }
+
+  public class StreamHandler extends java.util.logging.Handler {
+    ctor public StreamHandler();
+    ctor public StreamHandler(java.io.OutputStream, java.util.logging.Formatter);
+    method public void close() throws java.lang.SecurityException;
+    method public void flush();
+    method public void publish(java.util.logging.LogRecord);
+    method protected void setOutputStream(java.io.OutputStream) throws java.lang.SecurityException;
+  }
+
+  public class XMLFormatter extends java.util.logging.Formatter {
+    ctor public XMLFormatter();
+    method public String format(java.util.logging.LogRecord);
+  }
+
+}
+
+package java.util.prefs {
+
+  public abstract class AbstractPreferences extends java.util.prefs.Preferences {
+    ctor protected AbstractPreferences(java.util.prefs.AbstractPreferences, String);
+    method public String absolutePath();
+    method public void addNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method public void addPreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method protected final java.util.prefs.AbstractPreferences[] cachedChildren();
+    method protected abstract java.util.prefs.AbstractPreferences childSpi(String);
+    method public String[] childrenNames() throws java.util.prefs.BackingStoreException;
+    method protected abstract String[] childrenNamesSpi() throws java.util.prefs.BackingStoreException;
+    method public void clear() throws java.util.prefs.BackingStoreException;
+    method public void exportNode(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public void exportSubtree(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public void flush() throws java.util.prefs.BackingStoreException;
+    method protected abstract void flushSpi() throws java.util.prefs.BackingStoreException;
+    method public String get(String, String);
+    method public boolean getBoolean(String, boolean);
+    method public byte[] getByteArray(String, byte[]);
+    method protected java.util.prefs.AbstractPreferences getChild(String) throws java.util.prefs.BackingStoreException;
+    method public double getDouble(String, double);
+    method public float getFloat(String, float);
+    method public int getInt(String, int);
+    method public long getLong(String, long);
+    method protected abstract String getSpi(String);
+    method protected boolean isRemoved();
+    method public boolean isUserNode();
+    method public String[] keys() throws java.util.prefs.BackingStoreException;
+    method protected abstract String[] keysSpi() throws java.util.prefs.BackingStoreException;
+    method public String name();
+    method public java.util.prefs.Preferences node(String);
+    method public boolean nodeExists(String) throws java.util.prefs.BackingStoreException;
+    method public java.util.prefs.Preferences parent();
+    method public void put(String, String);
+    method public void putBoolean(String, boolean);
+    method public void putByteArray(String, byte[]);
+    method public void putDouble(String, double);
+    method public void putFloat(String, float);
+    method public void putInt(String, int);
+    method public void putLong(String, long);
+    method protected abstract void putSpi(String, String);
+    method public void remove(String);
+    method public void removeNode() throws java.util.prefs.BackingStoreException;
+    method public void removeNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method protected abstract void removeNodeSpi() throws java.util.prefs.BackingStoreException;
+    method public void removePreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method protected abstract void removeSpi(String);
+    method public void sync() throws java.util.prefs.BackingStoreException;
+    method protected abstract void syncSpi() throws java.util.prefs.BackingStoreException;
+    field protected final Object lock;
+    field protected boolean newNode;
+  }
+
+  public class BackingStoreException extends java.lang.Exception {
+    ctor public BackingStoreException(String);
+    ctor public BackingStoreException(Throwable);
+  }
+
+  public class InvalidPreferencesFormatException extends java.lang.Exception {
+    ctor public InvalidPreferencesFormatException(Throwable);
+    ctor public InvalidPreferencesFormatException(String);
+    ctor public InvalidPreferencesFormatException(String, Throwable);
+  }
+
+  public class NodeChangeEvent extends java.util.EventObject {
+    ctor public NodeChangeEvent(java.util.prefs.Preferences, java.util.prefs.Preferences);
+    method public java.util.prefs.Preferences getChild();
+    method public java.util.prefs.Preferences getParent();
+  }
+
+  public interface NodeChangeListener extends java.util.EventListener {
+    method public void childAdded(java.util.prefs.NodeChangeEvent);
+    method public void childRemoved(java.util.prefs.NodeChangeEvent);
+  }
+
+  public class PreferenceChangeEvent extends java.util.EventObject {
+    ctor public PreferenceChangeEvent(java.util.prefs.Preferences, String, String);
+    method public String getKey();
+    method public String getNewValue();
+    method public java.util.prefs.Preferences getNode();
+  }
+
+  @java.lang.FunctionalInterface public interface PreferenceChangeListener extends java.util.EventListener {
+    method public void preferenceChange(java.util.prefs.PreferenceChangeEvent);
+  }
+
+  public abstract class Preferences {
+    ctor protected Preferences();
+    method public abstract String absolutePath();
+    method public abstract void addNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method public abstract void addPreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method public abstract String[] childrenNames() throws java.util.prefs.BackingStoreException;
+    method public abstract void clear() throws java.util.prefs.BackingStoreException;
+    method public abstract void exportNode(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public abstract void exportSubtree(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public abstract void flush() throws java.util.prefs.BackingStoreException;
+    method public abstract String get(String, String);
+    method public abstract boolean getBoolean(String, boolean);
+    method public abstract byte[] getByteArray(String, byte[]);
+    method public abstract double getDouble(String, double);
+    method public abstract float getFloat(String, float);
+    method public abstract int getInt(String, int);
+    method public abstract long getLong(String, long);
+    method public static void importPreferences(java.io.InputStream) throws java.io.IOException, java.util.prefs.InvalidPreferencesFormatException;
+    method public abstract boolean isUserNode();
+    method public abstract String[] keys() throws java.util.prefs.BackingStoreException;
+    method public abstract String name();
+    method public abstract java.util.prefs.Preferences node(String);
+    method public abstract boolean nodeExists(String) throws java.util.prefs.BackingStoreException;
+    method public abstract java.util.prefs.Preferences parent();
+    method public abstract void put(String, String);
+    method public abstract void putBoolean(String, boolean);
+    method public abstract void putByteArray(String, byte[]);
+    method public abstract void putDouble(String, double);
+    method public abstract void putFloat(String, float);
+    method public abstract void putInt(String, int);
+    method public abstract void putLong(String, long);
+    method public abstract void remove(String);
+    method public abstract void removeNode() throws java.util.prefs.BackingStoreException;
+    method public abstract void removeNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method public abstract void removePreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method public abstract void sync() throws java.util.prefs.BackingStoreException;
+    method public static java.util.prefs.Preferences systemNodeForPackage(Class<?>);
+    method public static java.util.prefs.Preferences systemRoot();
+    method public abstract String toString();
+    method public static java.util.prefs.Preferences userNodeForPackage(Class<?>);
+    method public static java.util.prefs.Preferences userRoot();
+    field public static final int MAX_KEY_LENGTH = 80; // 0x50
+    field public static final int MAX_NAME_LENGTH = 80; // 0x50
+    field public static final int MAX_VALUE_LENGTH = 8192; // 0x2000
+  }
+
+  public interface PreferencesFactory {
+    method public java.util.prefs.Preferences systemRoot();
+    method public java.util.prefs.Preferences userRoot();
+  }
+
+}
+
+package java.util.regex {
+
+  public interface MatchResult {
+    method public int end();
+    method public int end(int);
+    method public String group();
+    method public String group(int);
+    method public int groupCount();
+    method public int start();
+    method public int start(int);
+  }
+
+  public final class Matcher implements java.util.regex.MatchResult {
+    method @NonNull public java.util.regex.Matcher appendReplacement(@NonNull StringBuffer, @NonNull String);
+    method @NonNull public StringBuffer appendTail(@NonNull StringBuffer);
+    method public int end();
+    method public int end(int);
+    method public int end(@NonNull String);
+    method public boolean find();
+    method public boolean find(int);
+    method @NonNull public String group();
+    method @Nullable public String group(int);
+    method @Nullable public String group(@NonNull String);
+    method public int groupCount();
+    method public boolean hasAnchoringBounds();
+    method public boolean hasTransparentBounds();
+    method public boolean hitEnd();
+    method public boolean lookingAt();
+    method public boolean matches();
+    method @NonNull public java.util.regex.Pattern pattern();
+    method @NonNull public static String quoteReplacement(@NonNull String);
+    method @NonNull public java.util.regex.Matcher region(int, int);
+    method public int regionEnd();
+    method public int regionStart();
+    method @NonNull public String replaceAll(@NonNull String);
+    method @NonNull public String replaceFirst(@NonNull String);
+    method public boolean requireEnd();
+    method @NonNull public java.util.regex.Matcher reset();
+    method @NonNull public java.util.regex.Matcher reset(@NonNull CharSequence);
+    method public int start();
+    method public int start(int);
+    method public int start(@NonNull String);
+    method @NonNull public java.util.regex.MatchResult toMatchResult();
+    method @NonNull public java.util.regex.Matcher useAnchoringBounds(boolean);
+    method @NonNull public java.util.regex.Matcher usePattern(@NonNull java.util.regex.Pattern);
+    method @NonNull public java.util.regex.Matcher useTransparentBounds(boolean);
+  }
+
+  public final class Pattern implements java.io.Serializable {
+    method @NonNull public java.util.function.Predicate<java.lang.String> asPredicate();
+    method @NonNull public static java.util.regex.Pattern compile(@NonNull String);
+    method @NonNull public static java.util.regex.Pattern compile(@NonNull String, int);
+    method public int flags();
+    method @NonNull public java.util.regex.Matcher matcher(@NonNull CharSequence);
+    method public static boolean matches(@NonNull String, @NonNull CharSequence);
+    method @NonNull public String pattern();
+    method @NonNull public static String quote(@NonNull String);
+    method @NonNull public String[] split(@NonNull CharSequence, int);
+    method @NonNull public String[] split(@NonNull CharSequence);
+    method @NonNull public java.util.stream.Stream<java.lang.String> splitAsStream(@NonNull CharSequence);
+    field public static final int CANON_EQ = 128; // 0x80
+    field public static final int CASE_INSENSITIVE = 2; // 0x2
+    field public static final int COMMENTS = 4; // 0x4
+    field public static final int DOTALL = 32; // 0x20
+    field public static final int LITERAL = 16; // 0x10
+    field public static final int MULTILINE = 8; // 0x8
+    field public static final int UNICODE_CASE = 64; // 0x40
+    field public static final int UNICODE_CHARACTER_CLASS = 256; // 0x100
+    field public static final int UNIX_LINES = 1; // 0x1
+  }
+
+  public class PatternSyntaxException extends java.lang.IllegalArgumentException {
+    ctor public PatternSyntaxException(String, String, int);
+    method public String getDescription();
+    method public int getIndex();
+    method public String getPattern();
+  }
+
+}
+
+package java.util.stream {
+
+  public interface BaseStream<T, S extends java.util.stream.BaseStream<T, S>> extends java.lang.AutoCloseable {
+    method public void close();
+    method public boolean isParallel();
+    method public java.util.Iterator<T> iterator();
+    method public S onClose(Runnable);
+    method public S parallel();
+    method public S sequential();
+    method public java.util.Spliterator<T> spliterator();
+    method public S unordered();
+  }
+
+  public interface Collector<T, A, R> {
+    method public java.util.function.BiConsumer<A,T> accumulator();
+    method public java.util.Set<java.util.stream.Collector.Characteristics> characteristics();
+    method public java.util.function.BinaryOperator<A> combiner();
+    method public java.util.function.Function<A,R> finisher();
+    method public static <T, R> java.util.stream.Collector<T,R,R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R,T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, A, R> java.util.stream.Collector<T,A,R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A,T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A,R>, java.util.stream.Collector.Characteristics...);
+    method public java.util.function.Supplier<A> supplier();
+  }
+
+  public enum Collector.Characteristics {
+    enum_constant public static final java.util.stream.Collector.Characteristics CONCURRENT;
+    enum_constant public static final java.util.stream.Collector.Characteristics IDENTITY_FINISH;
+    enum_constant public static final java.util.stream.Collector.Characteristics UNORDERED;
+  }
+
+  public final class Collectors {
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, A, R, RR> java.util.stream.Collector<T,A,RR> collectingAndThen(java.util.stream.Collector<T,A,R>, java.util.function.Function<R,RR>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Long> counting();
+    method public static <T, K> java.util.stream.Collector<T,?,java.util.Map<K,java.util.List<T>>> groupingBy(java.util.function.Function<? super T,? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T,?,java.util.Map<K,D>> groupingBy(java.util.function.Function<? super T,? extends K>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T, K, D, A, M extends java.util.Map<K, D>> java.util.stream.Collector<T,?,M> groupingBy(java.util.function.Function<? super T,? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T, K> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T,? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,D>> groupingByConcurrent(java.util.function.Function<? super T,? extends K>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T, K, A, D, M extends java.util.concurrent.ConcurrentMap<K, D>> java.util.stream.Collector<T,?,M> groupingByConcurrent(java.util.function.Function<? super T,? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T,A,D>);
+    method public static java.util.stream.Collector<java.lang.CharSequence,?,java.lang.String> joining();
+    method public static java.util.stream.Collector<java.lang.CharSequence,?,java.lang.String> joining(CharSequence);
+    method public static java.util.stream.Collector<java.lang.CharSequence,?,java.lang.String> joining(CharSequence, CharSequence, CharSequence);
+    method public static <T, U, A, R> java.util.stream.Collector<T,?,R> mapping(java.util.function.Function<? super T,? extends U>, java.util.stream.Collector<? super U,A,R>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Map<java.lang.Boolean,java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
+    method public static <T, D, A> java.util.stream.Collector<T,?,java.util.Map<java.lang.Boolean,D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T> java.util.stream.Collector<T,?,T> reducing(T, java.util.function.BinaryOperator<T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
+    method public static <T, U> java.util.stream.Collector<T,?,U> reducing(U, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, C extends java.util.Collection<T>> java.util.stream.Collector<T,?,C> toCollection(java.util.function.Supplier<C>);
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,U>> toConcurrentMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,U>> toConcurrentMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.concurrent.ConcurrentMap<K, U>> java.util.stream.Collector<T,?,M> toConcurrentMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.List<T>> toList();
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.Map<K,U>> toMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.Map<K,U>> toMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.Map<K, U>> java.util.stream.Collector<T,?,M> toMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Set<T>> toSet();
+  }
+
+  public interface DoubleStream extends java.util.stream.BaseStream<java.lang.Double,java.util.stream.DoubleStream> {
+    method public boolean allMatch(java.util.function.DoublePredicate);
+    method public boolean anyMatch(java.util.function.DoublePredicate);
+    method public java.util.OptionalDouble average();
+    method public java.util.stream.Stream<java.lang.Double> boxed();
+    method public static java.util.stream.DoubleStream.Builder builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R,R>);
+    method public static java.util.stream.DoubleStream concat(java.util.stream.DoubleStream, java.util.stream.DoubleStream);
+    method public long count();
+    method public java.util.stream.DoubleStream distinct();
+    method public static java.util.stream.DoubleStream empty();
+    method public java.util.stream.DoubleStream filter(java.util.function.DoublePredicate);
+    method public java.util.OptionalDouble findAny();
+    method public java.util.OptionalDouble findFirst();
+    method public java.util.stream.DoubleStream flatMap(java.util.function.DoubleFunction<? extends java.util.stream.DoubleStream>);
+    method public void forEach(java.util.function.DoubleConsumer);
+    method public void forEachOrdered(java.util.function.DoubleConsumer);
+    method public static java.util.stream.DoubleStream generate(java.util.function.DoubleSupplier);
+    method public static java.util.stream.DoubleStream iterate(double, java.util.function.DoubleUnaryOperator);
+    method public java.util.PrimitiveIterator.OfDouble iterator();
+    method public java.util.stream.DoubleStream limit(long);
+    method public java.util.stream.DoubleStream map(java.util.function.DoubleUnaryOperator);
+    method public java.util.stream.IntStream mapToInt(java.util.function.DoubleToIntFunction);
+    method public java.util.stream.LongStream mapToLong(java.util.function.DoubleToLongFunction);
+    method public <U> java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
+    method public java.util.OptionalDouble max();
+    method public java.util.OptionalDouble min();
+    method public boolean noneMatch(java.util.function.DoublePredicate);
+    method public static java.util.stream.DoubleStream of(double);
+    method public static java.util.stream.DoubleStream of(double...);
+    method public java.util.stream.DoubleStream parallel();
+    method public java.util.stream.DoubleStream peek(java.util.function.DoubleConsumer);
+    method public double reduce(double, java.util.function.DoubleBinaryOperator);
+    method public java.util.OptionalDouble reduce(java.util.function.DoubleBinaryOperator);
+    method public java.util.stream.DoubleStream sequential();
+    method public java.util.stream.DoubleStream skip(long);
+    method public java.util.stream.DoubleStream sorted();
+    method public java.util.Spliterator.OfDouble spliterator();
+    method public double sum();
+    method public java.util.DoubleSummaryStatistics summaryStatistics();
+    method public double[] toArray();
+  }
+
+  public static interface DoubleStream.Builder extends java.util.function.DoubleConsumer {
+    method public default java.util.stream.DoubleStream.Builder add(double);
+    method public java.util.stream.DoubleStream build();
+  }
+
+  public interface IntStream extends java.util.stream.BaseStream<java.lang.Integer,java.util.stream.IntStream> {
+    method public boolean allMatch(java.util.function.IntPredicate);
+    method public boolean anyMatch(java.util.function.IntPredicate);
+    method public java.util.stream.DoubleStream asDoubleStream();
+    method public java.util.stream.LongStream asLongStream();
+    method public java.util.OptionalDouble average();
+    method public java.util.stream.Stream<java.lang.Integer> boxed();
+    method public static java.util.stream.IntStream.Builder builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R,R>);
+    method public static java.util.stream.IntStream concat(java.util.stream.IntStream, java.util.stream.IntStream);
+    method public long count();
+    method public java.util.stream.IntStream distinct();
+    method public static java.util.stream.IntStream empty();
+    method public java.util.stream.IntStream filter(java.util.function.IntPredicate);
+    method public java.util.OptionalInt findAny();
+    method public java.util.OptionalInt findFirst();
+    method public java.util.stream.IntStream flatMap(java.util.function.IntFunction<? extends java.util.stream.IntStream>);
+    method public void forEach(java.util.function.IntConsumer);
+    method public void forEachOrdered(java.util.function.IntConsumer);
+    method public static java.util.stream.IntStream generate(java.util.function.IntSupplier);
+    method public static java.util.stream.IntStream iterate(int, java.util.function.IntUnaryOperator);
+    method public java.util.PrimitiveIterator.OfInt iterator();
+    method public java.util.stream.IntStream limit(long);
+    method public java.util.stream.IntStream map(java.util.function.IntUnaryOperator);
+    method public java.util.stream.DoubleStream mapToDouble(java.util.function.IntToDoubleFunction);
+    method public java.util.stream.LongStream mapToLong(java.util.function.IntToLongFunction);
+    method public <U> java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
+    method public java.util.OptionalInt max();
+    method public java.util.OptionalInt min();
+    method public boolean noneMatch(java.util.function.IntPredicate);
+    method public static java.util.stream.IntStream of(int);
+    method public static java.util.stream.IntStream of(int...);
+    method public java.util.stream.IntStream parallel();
+    method public java.util.stream.IntStream peek(java.util.function.IntConsumer);
+    method public static java.util.stream.IntStream range(int, int);
+    method public static java.util.stream.IntStream rangeClosed(int, int);
+    method public int reduce(int, java.util.function.IntBinaryOperator);
+    method public java.util.OptionalInt reduce(java.util.function.IntBinaryOperator);
+    method public java.util.stream.IntStream sequential();
+    method public java.util.stream.IntStream skip(long);
+    method public java.util.stream.IntStream sorted();
+    method public java.util.Spliterator.OfInt spliterator();
+    method public int sum();
+    method public java.util.IntSummaryStatistics summaryStatistics();
+    method public int[] toArray();
+  }
+
+  public static interface IntStream.Builder extends java.util.function.IntConsumer {
+    method public default java.util.stream.IntStream.Builder add(int);
+    method public java.util.stream.IntStream build();
+  }
+
+  public interface LongStream extends java.util.stream.BaseStream<java.lang.Long,java.util.stream.LongStream> {
+    method public boolean allMatch(java.util.function.LongPredicate);
+    method public boolean anyMatch(java.util.function.LongPredicate);
+    method public java.util.stream.DoubleStream asDoubleStream();
+    method public java.util.OptionalDouble average();
+    method public java.util.stream.Stream<java.lang.Long> boxed();
+    method public static java.util.stream.LongStream.Builder builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R,R>);
+    method public static java.util.stream.LongStream concat(java.util.stream.LongStream, java.util.stream.LongStream);
+    method public long count();
+    method public java.util.stream.LongStream distinct();
+    method public static java.util.stream.LongStream empty();
+    method public java.util.stream.LongStream filter(java.util.function.LongPredicate);
+    method public java.util.OptionalLong findAny();
+    method public java.util.OptionalLong findFirst();
+    method public java.util.stream.LongStream flatMap(java.util.function.LongFunction<? extends java.util.stream.LongStream>);
+    method public void forEach(java.util.function.LongConsumer);
+    method public void forEachOrdered(java.util.function.LongConsumer);
+    method public static java.util.stream.LongStream generate(java.util.function.LongSupplier);
+    method public static java.util.stream.LongStream iterate(long, java.util.function.LongUnaryOperator);
+    method public java.util.PrimitiveIterator.OfLong iterator();
+    method public java.util.stream.LongStream limit(long);
+    method public java.util.stream.LongStream map(java.util.function.LongUnaryOperator);
+    method public java.util.stream.DoubleStream mapToDouble(java.util.function.LongToDoubleFunction);
+    method public java.util.stream.IntStream mapToInt(java.util.function.LongToIntFunction);
+    method public <U> java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
+    method public java.util.OptionalLong max();
+    method public java.util.OptionalLong min();
+    method public boolean noneMatch(java.util.function.LongPredicate);
+    method public static java.util.stream.LongStream of(long);
+    method public static java.util.stream.LongStream of(long...);
+    method public java.util.stream.LongStream parallel();
+    method public java.util.stream.LongStream peek(java.util.function.LongConsumer);
+    method public static java.util.stream.LongStream range(long, long);
+    method public static java.util.stream.LongStream rangeClosed(long, long);
+    method public long reduce(long, java.util.function.LongBinaryOperator);
+    method public java.util.OptionalLong reduce(java.util.function.LongBinaryOperator);
+    method public java.util.stream.LongStream sequential();
+    method public java.util.stream.LongStream skip(long);
+    method public java.util.stream.LongStream sorted();
+    method public java.util.Spliterator.OfLong spliterator();
+    method public long sum();
+    method public java.util.LongSummaryStatistics summaryStatistics();
+    method public long[] toArray();
+  }
+
+  public static interface LongStream.Builder extends java.util.function.LongConsumer {
+    method public default java.util.stream.LongStream.Builder add(long);
+    method public java.util.stream.LongStream build();
+  }
+
+  public interface Stream<T> extends java.util.stream.BaseStream<T,java.util.stream.Stream<T>> {
+    method public boolean allMatch(java.util.function.Predicate<? super T>);
+    method public boolean anyMatch(java.util.function.Predicate<? super T>);
+    method public static <T> java.util.stream.Stream.Builder<T> builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R,? super T>, java.util.function.BiConsumer<R,R>);
+    method public <R, A> R collect(java.util.stream.Collector<? super T,A,R>);
+    method public static <T> java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
+    method public long count();
+    method public java.util.stream.Stream<T> distinct();
+    method public static <T> java.util.stream.Stream<T> empty();
+    method public java.util.stream.Stream<T> filter(java.util.function.Predicate<? super T>);
+    method public java.util.Optional<T> findAny();
+    method public java.util.Optional<T> findFirst();
+    method public <R> java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T,? extends java.util.stream.Stream<? extends R>>);
+    method public java.util.stream.DoubleStream flatMapToDouble(java.util.function.Function<? super T,? extends java.util.stream.DoubleStream>);
+    method public java.util.stream.IntStream flatMapToInt(java.util.function.Function<? super T,? extends java.util.stream.IntStream>);
+    method public java.util.stream.LongStream flatMapToLong(java.util.function.Function<? super T,? extends java.util.stream.LongStream>);
+    method public void forEach(java.util.function.Consumer<? super T>);
+    method public void forEachOrdered(java.util.function.Consumer<? super T>);
+    method public static <T> java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
+    method public static <T> java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
+    method public java.util.stream.Stream<T> limit(long);
+    method public <R> java.util.stream.Stream<R> map(java.util.function.Function<? super T,? extends R>);
+    method public java.util.stream.DoubleStream mapToDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public java.util.stream.IntStream mapToInt(java.util.function.ToIntFunction<? super T>);
+    method public java.util.stream.LongStream mapToLong(java.util.function.ToLongFunction<? super T>);
+    method public java.util.Optional<T> max(java.util.Comparator<? super T>);
+    method public java.util.Optional<T> min(java.util.Comparator<? super T>);
+    method public boolean noneMatch(java.util.function.Predicate<? super T>);
+    method public static <T> java.util.stream.Stream<T> of(T);
+    method @java.lang.SafeVarargs public static <T> java.util.stream.Stream<T> of(T...);
+    method public java.util.stream.Stream<T> peek(java.util.function.Consumer<? super T>);
+    method public T reduce(T, java.util.function.BinaryOperator<T>);
+    method public java.util.Optional<T> reduce(java.util.function.BinaryOperator<T>);
+    method public <U> U reduce(U, java.util.function.BiFunction<U,? super T,U>, java.util.function.BinaryOperator<U>);
+    method public java.util.stream.Stream<T> skip(long);
+    method public java.util.stream.Stream<T> sorted();
+    method public java.util.stream.Stream<T> sorted(java.util.Comparator<? super T>);
+    method public Object[] toArray();
+    method public <A> A[] toArray(java.util.function.IntFunction<A[]>);
+  }
+
+  public static interface Stream.Builder<T> extends java.util.function.Consumer<T> {
+    method public default java.util.stream.Stream.Builder<T> add(T);
+    method public java.util.stream.Stream<T> build();
+  }
+
+  public final class StreamSupport {
+    method public static java.util.stream.DoubleStream doubleStream(java.util.Spliterator.OfDouble, boolean);
+    method public static java.util.stream.DoubleStream doubleStream(java.util.function.Supplier<? extends java.util.Spliterator.OfDouble>, int, boolean);
+    method public static java.util.stream.IntStream intStream(java.util.Spliterator.OfInt, boolean);
+    method public static java.util.stream.IntStream intStream(java.util.function.Supplier<? extends java.util.Spliterator.OfInt>, int, boolean);
+    method public static java.util.stream.LongStream longStream(java.util.Spliterator.OfLong, boolean);
+    method public static java.util.stream.LongStream longStream(java.util.function.Supplier<? extends java.util.Spliterator.OfLong>, int, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
+  }
+
+}
+
+package java.util.zip {
+
+  public class Adler32 implements java.util.zip.Checksum {
+    ctor public Adler32();
+    method public long getValue();
+    method public void reset();
+    method public void update(int);
+    method public void update(byte[], int, int);
+    method public void update(byte[]);
+    method public void update(java.nio.ByteBuffer);
+  }
+
+  public class CRC32 implements java.util.zip.Checksum {
+    ctor public CRC32();
+    method public long getValue();
+    method public void reset();
+    method public void update(int);
+    method public void update(byte[], int, int);
+    method public void update(byte[]);
+    method public void update(java.nio.ByteBuffer);
+  }
+
+  public class CheckedInputStream extends java.io.FilterInputStream {
+    ctor public CheckedInputStream(java.io.InputStream, java.util.zip.Checksum);
+    method public java.util.zip.Checksum getChecksum();
+  }
+
+  public class CheckedOutputStream extends java.io.FilterOutputStream {
+    ctor public CheckedOutputStream(java.io.OutputStream, java.util.zip.Checksum);
+    method public java.util.zip.Checksum getChecksum();
+  }
+
+  public interface Checksum {
+    method public long getValue();
+    method public void reset();
+    method public void update(int);
+    method public void update(byte[], int, int);
+  }
+
+  public class DataFormatException extends java.lang.Exception {
+    ctor public DataFormatException();
+    ctor public DataFormatException(String);
+  }
+
+  public class Deflater {
+    ctor public Deflater(int, boolean);
+    ctor public Deflater(int);
+    ctor public Deflater();
+    method public int deflate(byte[], int, int);
+    method public int deflate(byte[]);
+    method public int deflate(byte[], int, int, int);
+    method public void end();
+    method protected void finalize();
+    method public void finish();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
+    method public void setDictionary(byte[]);
+    method public void setInput(byte[], int, int);
+    method public void setInput(byte[]);
+    method public void setLevel(int);
+    method public void setStrategy(int);
+    field public static final int BEST_COMPRESSION = 9; // 0x9
+    field public static final int BEST_SPEED = 1; // 0x1
+    field public static final int DEFAULT_COMPRESSION = -1; // 0xffffffff
+    field public static final int DEFAULT_STRATEGY = 0; // 0x0
+    field public static final int DEFLATED = 8; // 0x8
+    field public static final int FILTERED = 1; // 0x1
+    field public static final int FULL_FLUSH = 3; // 0x3
+    field public static final int HUFFMAN_ONLY = 2; // 0x2
+    field public static final int NO_COMPRESSION = 0; // 0x0
+    field public static final int NO_FLUSH = 0; // 0x0
+    field public static final int SYNC_FLUSH = 2; // 0x2
+  }
+
+  public class DeflaterInputStream extends java.io.FilterInputStream {
+    ctor public DeflaterInputStream(java.io.InputStream);
+    ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
+    ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+    field protected final byte[] buf;
+    field protected final java.util.zip.Deflater def;
+  }
+
+  public class DeflaterOutputStream extends java.io.FilterOutputStream {
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater);
+    ctor public DeflaterOutputStream(java.io.OutputStream, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream);
+    method protected void deflate() throws java.io.IOException;
+    method public void finish() throws java.io.IOException;
+    field protected byte[] buf;
+    field protected java.util.zip.Deflater def;
+  }
+
+  public class GZIPInputStream extends java.util.zip.InflaterInputStream {
+    ctor public GZIPInputStream(java.io.InputStream, int) throws java.io.IOException;
+    ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException;
+    field public static final int GZIP_MAGIC = 35615; // 0x8b1f
+    field protected java.util.zip.CRC32 crc;
+    field protected boolean eos;
+  }
+
+  public class GZIPOutputStream extends java.util.zip.DeflaterOutputStream {
+    ctor public GZIPOutputStream(java.io.OutputStream, int) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+    field protected java.util.zip.CRC32 crc;
+  }
+
+  public class Inflater {
+    ctor public Inflater(boolean);
+    ctor public Inflater();
+    method public void end();
+    method protected void finalize();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getRemaining();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public int inflate(byte[], int, int) throws java.util.zip.DataFormatException;
+    method public int inflate(byte[]) throws java.util.zip.DataFormatException;
+    method public boolean needsDictionary();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
+    method public void setDictionary(byte[]);
+    method public void setInput(byte[], int, int);
+    method public void setInput(byte[]);
+  }
+
+  public class InflaterInputStream extends java.io.FilterInputStream {
+    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater, int);
+    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater);
+    ctor public InflaterInputStream(java.io.InputStream);
+    method protected void fill() throws java.io.IOException;
+    field protected byte[] buf;
+    field @Deprecated protected boolean closed;
+    field protected java.util.zip.Inflater inf;
+    field protected int len;
+  }
+
+  public class InflaterOutputStream extends java.io.FilterOutputStream {
+    ctor public InflaterOutputStream(java.io.OutputStream);
+    ctor public InflaterOutputStream(java.io.OutputStream, java.util.zip.Inflater);
+    ctor public InflaterOutputStream(java.io.OutputStream, java.util.zip.Inflater, int);
+    method public void finish() throws java.io.IOException;
+    field protected final byte[] buf;
+    field protected final java.util.zip.Inflater inf;
+  }
+
+  public class ZipEntry implements java.lang.Cloneable {
+    ctor public ZipEntry(String);
+    ctor public ZipEntry(java.util.zip.ZipEntry);
+    method public Object clone();
+    method public String getComment();
+    method public long getCompressedSize();
+    method public long getCrc();
+    method public java.nio.file.attribute.FileTime getCreationTime();
+    method public byte[] getExtra();
+    method public java.nio.file.attribute.FileTime getLastAccessTime();
+    method public java.nio.file.attribute.FileTime getLastModifiedTime();
+    method public int getMethod();
+    method public String getName();
+    method public long getSize();
+    method public long getTime();
+    method public boolean isDirectory();
+    method public void setComment(String);
+    method public void setCompressedSize(long);
+    method public void setCrc(long);
+    method public java.util.zip.ZipEntry setCreationTime(java.nio.file.attribute.FileTime);
+    method public void setExtra(byte[]);
+    method public java.util.zip.ZipEntry setLastAccessTime(java.nio.file.attribute.FileTime);
+    method public java.util.zip.ZipEntry setLastModifiedTime(java.nio.file.attribute.FileTime);
+    method public void setMethod(int);
+    method public void setSize(long);
+    method public void setTime(long);
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int DEFLATED = 8; // 0x8
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final int STORED = 0; // 0x0
+  }
+
+  public class ZipError extends java.lang.InternalError {
+    ctor public ZipError(String);
+  }
+
+  public class ZipException extends java.io.IOException {
+    ctor public ZipException();
+    ctor public ZipException(String);
+  }
+
+  public class ZipFile implements java.io.Closeable {
+    ctor public ZipFile(String) throws java.io.IOException;
+    ctor public ZipFile(java.io.File, int) throws java.io.IOException;
+    ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException;
+    ctor public ZipFile(java.io.File, int, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(String, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+    method protected void finalize() throws java.io.IOException;
+    method public String getComment();
+    method public java.util.zip.ZipEntry getEntry(String);
+    method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
+    method public String getName();
+    method public int size();
+    method public java.util.stream.Stream<? extends java.util.zip.ZipEntry> stream();
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final int OPEN_DELETE = 4; // 0x4
+    field public static final int OPEN_READ = 1; // 0x1
+  }
+
+  public class ZipInputStream extends java.util.zip.InflaterInputStream {
+    ctor public ZipInputStream(java.io.InputStream);
+    ctor public ZipInputStream(java.io.InputStream, java.nio.charset.Charset);
+    method public void closeEntry() throws java.io.IOException;
+    method protected java.util.zip.ZipEntry createZipEntry(String);
+    method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException;
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class ZipOutputStream extends java.util.zip.DeflaterOutputStream {
+    ctor public ZipOutputStream(java.io.OutputStream);
+    ctor public ZipOutputStream(java.io.OutputStream, java.nio.charset.Charset);
+    method public void closeEntry() throws java.io.IOException;
+    method public void putNextEntry(java.util.zip.ZipEntry) throws java.io.IOException;
+    method public void setComment(String);
+    method public void setLevel(int);
+    method public void setMethod(int);
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int DEFLATED = 8; // 0x8
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final int STORED = 0; // 0x0
+  }
+
+}
+
+package javax.crypto {
+
+  public class AEADBadTagException extends javax.crypto.BadPaddingException {
+    ctor public AEADBadTagException();
+    ctor public AEADBadTagException(String);
+  }
+
+  public class BadPaddingException extends java.security.GeneralSecurityException {
+    ctor public BadPaddingException();
+    ctor public BadPaddingException(String);
+  }
+
+  public class Cipher {
+    ctor protected Cipher(javax.crypto.CipherSpi, java.security.Provider, String);
+    method public final byte[] doFinal() throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method public final int doFinal(byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final byte[] doFinal(byte[]) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method public final byte[] doFinal(byte[], int, int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method public final int doFinal(byte[], int, int, byte[]) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final int doFinal(byte[], int, int, byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final int doFinal(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final String getAlgorithm();
+    method public final int getBlockSize();
+    method public final javax.crypto.ExemptionMechanism getExemptionMechanism();
+    method public final byte[] getIV();
+    method public static final javax.crypto.Cipher getInstance(String) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException;
+    method public static final javax.crypto.Cipher getInstance(String, String) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.Cipher getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException;
+    method public static final int getMaxAllowedKeyLength(String) throws java.security.NoSuchAlgorithmException;
+    method public static final java.security.spec.AlgorithmParameterSpec getMaxAllowedParameterSpec(String) throws java.security.NoSuchAlgorithmException;
+    method public final int getOutputSize(int);
+    method public final java.security.AlgorithmParameters getParameters();
+    method public final java.security.Provider getProvider();
+    method public final void init(int, java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.AlgorithmParameters) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.cert.Certificate) throws java.security.InvalidKeyException;
+    method public final void init(int, java.security.cert.Certificate, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final java.security.Key unwrap(byte[], String, int) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public final byte[] update(byte[]);
+    method public final byte[] update(byte[], int, int);
+    method public final int update(byte[], int, int, byte[]) throws javax.crypto.ShortBufferException;
+    method public final int update(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException;
+    method public final int update(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException;
+    method public final void updateAAD(byte[]);
+    method public final void updateAAD(byte[], int, int);
+    method public final void updateAAD(java.nio.ByteBuffer);
+    method public final byte[] wrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException;
+    field public static final int DECRYPT_MODE = 2; // 0x2
+    field public static final int ENCRYPT_MODE = 1; // 0x1
+    field public static final int PRIVATE_KEY = 2; // 0x2
+    field public static final int PUBLIC_KEY = 1; // 0x1
+    field public static final int SECRET_KEY = 3; // 0x3
+    field public static final int UNWRAP_MODE = 4; // 0x4
+    field public static final int WRAP_MODE = 3; // 0x3
+  }
+
+  public class CipherInputStream extends java.io.FilterInputStream {
+    ctor public CipherInputStream(java.io.InputStream, javax.crypto.Cipher);
+    ctor protected CipherInputStream(java.io.InputStream);
+  }
+
+  public class CipherOutputStream extends java.io.FilterOutputStream {
+    ctor public CipherOutputStream(java.io.OutputStream, javax.crypto.Cipher);
+    ctor protected CipherOutputStream(java.io.OutputStream);
+  }
+
+  public abstract class CipherSpi {
+    ctor public CipherSpi();
+    method protected abstract byte[] engineDoFinal(byte[], int, int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method protected abstract int engineDoFinal(byte[], int, int, byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method protected int engineDoFinal(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method protected abstract int engineGetBlockSize();
+    method protected abstract byte[] engineGetIV();
+    method protected int engineGetKeySize(java.security.Key) throws java.security.InvalidKeyException;
+    method protected abstract int engineGetOutputSize(int);
+    method protected abstract java.security.AlgorithmParameters engineGetParameters();
+    method protected abstract void engineInit(int, java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method protected abstract void engineInit(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineSetMode(String) throws java.security.NoSuchAlgorithmException;
+    method protected abstract void engineSetPadding(String) throws javax.crypto.NoSuchPaddingException;
+    method protected java.security.Key engineUnwrap(byte[], String, int) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method protected abstract byte[] engineUpdate(byte[], int, int);
+    method protected abstract int engineUpdate(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException;
+    method protected int engineUpdate(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException;
+    method protected void engineUpdateAAD(byte[], int, int);
+    method protected void engineUpdateAAD(java.nio.ByteBuffer);
+    method protected byte[] engineWrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException;
+  }
+
+  public class EncryptedPrivateKeyInfo {
+    ctor public EncryptedPrivateKeyInfo(byte[]) throws java.io.IOException;
+    ctor public EncryptedPrivateKeyInfo(String, byte[]) throws java.security.NoSuchAlgorithmException;
+    ctor public EncryptedPrivateKeyInfo(java.security.AlgorithmParameters, byte[]) throws java.security.NoSuchAlgorithmException;
+    method public String getAlgName();
+    method public java.security.AlgorithmParameters getAlgParameters();
+    method public byte[] getEncoded() throws java.io.IOException;
+    method public byte[] getEncryptedData();
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(javax.crypto.Cipher) throws java.security.spec.InvalidKeySpecException;
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key, String) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key, java.security.Provider) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+  }
+
+  public class ExemptionMechanism {
+    ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, String);
+    method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
+    method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public static final javax.crypto.ExemptionMechanism getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.ExemptionMechanism getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.ExemptionMechanism getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final String getName();
+    method public final int getOutputSize(int) throws java.lang.IllegalStateException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final boolean isCryptoAllowed(java.security.Key) throws javax.crypto.ExemptionMechanismException;
+  }
+
+  public class ExemptionMechanismException extends java.security.GeneralSecurityException {
+    ctor public ExemptionMechanismException();
+    ctor public ExemptionMechanismException(String);
+  }
+
+  public abstract class ExemptionMechanismSpi {
+    ctor public ExemptionMechanismSpi();
+    method protected abstract byte[] engineGenExemptionBlob() throws javax.crypto.ExemptionMechanismException;
+    method protected abstract int engineGenExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, javax.crypto.ShortBufferException;
+    method protected abstract int engineGetOutputSize(int);
+    method protected abstract void engineInit(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+  }
+
+  public class IllegalBlockSizeException extends java.security.GeneralSecurityException {
+    ctor public IllegalBlockSizeException();
+    ctor public IllegalBlockSizeException(String);
+  }
+
+  public class KeyAgreement {
+    ctor protected KeyAgreement(javax.crypto.KeyAgreementSpi, java.security.Provider, String);
+    method public final java.security.Key doPhase(java.security.Key, boolean) throws java.lang.IllegalStateException, java.security.InvalidKeyException;
+    method public final byte[] generateSecret() throws java.lang.IllegalStateException;
+    method public final int generateSecret(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public final javax.crypto.SecretKey generateSecret(String) throws java.lang.IllegalStateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public final String getAlgorithm();
+    method public static final javax.crypto.KeyAgreement getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.KeyAgreement getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.KeyAgreement getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+  }
+
+  public abstract class KeyAgreementSpi {
+    ctor public KeyAgreementSpi();
+    method protected abstract java.security.Key engineDoPhase(java.security.Key, boolean) throws java.lang.IllegalStateException, java.security.InvalidKeyException;
+    method protected abstract byte[] engineGenerateSecret() throws java.lang.IllegalStateException;
+    method protected abstract int engineGenerateSecret(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method protected abstract javax.crypto.SecretKey engineGenerateSecret(String) throws java.lang.IllegalStateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method protected abstract void engineInit(java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+  }
+
+  public class KeyGenerator {
+    ctor protected KeyGenerator(javax.crypto.KeyGeneratorSpi, java.security.Provider, String);
+    method public final javax.crypto.SecretKey generateKey();
+    method public final String getAlgorithm();
+    method public static final javax.crypto.KeyGenerator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.KeyGenerator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.KeyGenerator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.SecureRandom);
+    method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+    method public final void init(int);
+    method public final void init(int, java.security.SecureRandom);
+  }
+
+  public abstract class KeyGeneratorSpi {
+    ctor public KeyGeneratorSpi();
+    method protected abstract javax.crypto.SecretKey engineGenerateKey();
+    method protected abstract void engineInit(java.security.SecureRandom);
+    method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+    method protected abstract void engineInit(int, java.security.SecureRandom);
+  }
+
+  public class Mac implements java.lang.Cloneable {
+    ctor protected Mac(javax.crypto.MacSpi, java.security.Provider, String);
+    method public final Object clone() throws java.lang.CloneNotSupportedException;
+    method public final byte[] doFinal() throws java.lang.IllegalStateException;
+    method public final void doFinal(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public final byte[] doFinal(byte[]) throws java.lang.IllegalStateException;
+    method public final String getAlgorithm();
+    method public static final javax.crypto.Mac getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.Mac getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.Mac getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final int getMacLength();
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void reset();
+    method public final void update(byte) throws java.lang.IllegalStateException;
+    method public final void update(byte[]) throws java.lang.IllegalStateException;
+    method public final void update(byte[], int, int) throws java.lang.IllegalStateException;
+    method public final void update(java.nio.ByteBuffer);
+  }
+
+  public abstract class MacSpi {
+    ctor public MacSpi();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method protected abstract byte[] engineDoFinal();
+    method protected abstract int engineGetMacLength();
+    method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineReset();
+    method protected abstract void engineUpdate(byte);
+    method protected abstract void engineUpdate(byte[], int, int);
+    method protected void engineUpdate(java.nio.ByteBuffer);
+  }
+
+  public class NoSuchPaddingException extends java.security.GeneralSecurityException {
+    ctor public NoSuchPaddingException();
+    ctor public NoSuchPaddingException(String);
+  }
+
+  public class NullCipher extends javax.crypto.Cipher {
+    ctor public NullCipher();
+  }
+
+  public class SealedObject implements java.io.Serializable {
+    ctor public SealedObject(java.io.Serializable, javax.crypto.Cipher) throws java.io.IOException, javax.crypto.IllegalBlockSizeException;
+    ctor protected SealedObject(javax.crypto.SealedObject);
+    method public final String getAlgorithm();
+    method public final Object getObject(java.security.Key) throws java.lang.ClassNotFoundException, java.io.IOException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public final Object getObject(javax.crypto.Cipher) throws javax.crypto.BadPaddingException, java.lang.ClassNotFoundException, java.io.IOException, javax.crypto.IllegalBlockSizeException;
+    method public final Object getObject(java.security.Key, String) throws java.lang.ClassNotFoundException, java.io.IOException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    field protected byte[] encodedParams;
+  }
+
+  public interface SecretKey extends java.security.Key javax.security.auth.Destroyable {
+    field public static final long serialVersionUID = -4795878709595146952L; // 0xbd719db928b8f538L
+  }
+
+  public class SecretKeyFactory {
+    ctor protected SecretKeyFactory(javax.crypto.SecretKeyFactorySpi, java.security.Provider, String);
+    method public final javax.crypto.SecretKey generateSecret(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method public final String getAlgorithm();
+    method public static final javax.crypto.SecretKeyFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.SecretKeyFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.SecretKeyFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.spec.KeySpec getKeySpec(javax.crypto.SecretKey, Class<?>) throws java.security.spec.InvalidKeySpecException;
+    method public final java.security.Provider getProvider();
+    method public final javax.crypto.SecretKey translateKey(javax.crypto.SecretKey) throws java.security.InvalidKeyException;
+  }
+
+  public abstract class SecretKeyFactorySpi {
+    ctor public SecretKeyFactorySpi();
+    method protected abstract javax.crypto.SecretKey engineGenerateSecret(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract java.security.spec.KeySpec engineGetKeySpec(javax.crypto.SecretKey, Class<?>) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract javax.crypto.SecretKey engineTranslateKey(javax.crypto.SecretKey) throws java.security.InvalidKeyException;
+  }
+
+  public class ShortBufferException extends java.security.GeneralSecurityException {
+    ctor public ShortBufferException();
+    ctor public ShortBufferException(String);
+  }
+
+}
+
+package javax.crypto.interfaces {
+
+  public interface DHKey {
+    method public javax.crypto.spec.DHParameterSpec getParams();
+  }
+
+  public interface DHPrivateKey extends javax.crypto.interfaces.DHKey java.security.PrivateKey {
+    method public java.math.BigInteger getX();
+    field public static final long serialVersionUID = 2211791113380396553L; // 0x1eb1dc4c8e677e09L
+  }
+
+  public interface DHPublicKey extends javax.crypto.interfaces.DHKey java.security.PublicKey {
+    method public java.math.BigInteger getY();
+    field public static final long serialVersionUID = -6628103563352519193L; // 0xa4043eed23df4de7L
+  }
+
+  public interface PBEKey extends javax.crypto.SecretKey {
+    method public int getIterationCount();
+    method public char[] getPassword();
+    method public byte[] getSalt();
+    field public static final long serialVersionUID = -1430015993304333921L; // 0xec279007d7f7c19fL
+  }
+
+}
+
+package javax.crypto.spec {
+
+  public class DESKeySpec implements java.security.spec.KeySpec {
+    ctor public DESKeySpec(byte[]) throws java.security.InvalidKeyException;
+    ctor public DESKeySpec(byte[], int) throws java.security.InvalidKeyException;
+    method public byte[] getKey();
+    method public static boolean isParityAdjusted(byte[], int) throws java.security.InvalidKeyException;
+    method public static boolean isWeak(byte[], int) throws java.security.InvalidKeyException;
+    field public static final int DES_KEY_LEN = 8; // 0x8
+  }
+
+  public class DESedeKeySpec implements java.security.spec.KeySpec {
+    ctor public DESedeKeySpec(byte[]) throws java.security.InvalidKeyException;
+    ctor public DESedeKeySpec(byte[], int) throws java.security.InvalidKeyException;
+    method public byte[] getKey();
+    method public static boolean isParityAdjusted(byte[], int) throws java.security.InvalidKeyException;
+    field public static final int DES_EDE_KEY_LEN = 24; // 0x18
+  }
+
+  public class DHGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public DHGenParameterSpec(int, int);
+    method public int getExponentSize();
+    method public int getPrimeSize();
+  }
+
+  public class DHParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public DHParameterSpec(java.math.BigInteger, java.math.BigInteger);
+    ctor public DHParameterSpec(java.math.BigInteger, java.math.BigInteger, int);
+    method public java.math.BigInteger getG();
+    method public int getL();
+    method public java.math.BigInteger getP();
+  }
+
+  public class DHPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public DHPrivateKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getX();
+  }
+
+  public class DHPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public DHPublicKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getY();
+  }
+
+  public class GCMParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public GCMParameterSpec(int, byte[]);
+    ctor public GCMParameterSpec(int, byte[], int, int);
+    method public byte[] getIV();
+    method public int getTLen();
+  }
+
+  public class IvParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public IvParameterSpec(byte[]);
+    ctor public IvParameterSpec(byte[], int, int);
+    method public byte[] getIV();
+  }
+
+  public class OAEPParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public OAEPParameterSpec(String, String, java.security.spec.AlgorithmParameterSpec, javax.crypto.spec.PSource);
+    method public String getDigestAlgorithm();
+    method public String getMGFAlgorithm();
+    method public java.security.spec.AlgorithmParameterSpec getMGFParameters();
+    method public javax.crypto.spec.PSource getPSource();
+    field public static final javax.crypto.spec.OAEPParameterSpec DEFAULT;
+  }
+
+  public class PBEKeySpec implements java.security.spec.KeySpec {
+    ctor public PBEKeySpec(char[]);
+    ctor public PBEKeySpec(char[], byte[], int, int);
+    ctor public PBEKeySpec(char[], byte[], int);
+    method public final void clearPassword();
+    method public final int getIterationCount();
+    method public final int getKeyLength();
+    method public final char[] getPassword();
+    method public final byte[] getSalt();
+  }
+
+  public class PBEParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public PBEParameterSpec(byte[], int);
+    ctor public PBEParameterSpec(byte[], int, java.security.spec.AlgorithmParameterSpec);
+    method public int getIterationCount();
+    method public java.security.spec.AlgorithmParameterSpec getParameterSpec();
+    method public byte[] getSalt();
+  }
+
+  public class PSource {
+    ctor protected PSource(String);
+    method public String getAlgorithm();
+  }
+
+  public static final class PSource.PSpecified extends javax.crypto.spec.PSource {
+    ctor public PSource.PSpecified(byte[]);
+    method public byte[] getValue();
+    field public static final javax.crypto.spec.PSource.PSpecified DEFAULT;
+  }
+
+  public class RC2ParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public RC2ParameterSpec(int);
+    ctor public RC2ParameterSpec(int, byte[]);
+    ctor public RC2ParameterSpec(int, byte[], int);
+    method public int getEffectiveKeyBits();
+    method public byte[] getIV();
+  }
+
+  public class RC5ParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public RC5ParameterSpec(int, int, int);
+    ctor public RC5ParameterSpec(int, int, int, byte[]);
+    ctor public RC5ParameterSpec(int, int, int, byte[], int);
+    method public byte[] getIV();
+    method public int getRounds();
+    method public int getVersion();
+    method public int getWordSize();
+  }
+
+  public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey {
+    ctor public SecretKeySpec(byte[], String);
+    ctor public SecretKeySpec(byte[], int, int, String);
+    method public String getAlgorithm();
+    method public byte[] getEncoded();
+    method public String getFormat();
+  }
+
+}
+
+package javax.microedition.khronos.egl {
+
+  public interface EGL {
+  }
+
+  public interface EGL10 extends javax.microedition.khronos.egl.EGL {
+    method public boolean eglChooseConfig(javax.microedition.khronos.egl.EGLDisplay, int[], javax.microedition.khronos.egl.EGLConfig[], int, int[]);
+    method public boolean eglCopyBuffers(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, Object);
+    method public javax.microedition.khronos.egl.EGLContext eglCreateContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, javax.microedition.khronos.egl.EGLContext, int[]);
+    method public javax.microedition.khronos.egl.EGLSurface eglCreatePbufferSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, int[]);
+    method @Deprecated public javax.microedition.khronos.egl.EGLSurface eglCreatePixmapSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, Object, int[]);
+    method public javax.microedition.khronos.egl.EGLSurface eglCreateWindowSurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, Object, int[]);
+    method public boolean eglDestroyContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext);
+    method public boolean eglDestroySurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface);
+    method public boolean eglGetConfigAttrib(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig, int, int[]);
+    method public boolean eglGetConfigs(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLConfig[], int, int[]);
+    method public javax.microedition.khronos.egl.EGLContext eglGetCurrentContext();
+    method public javax.microedition.khronos.egl.EGLDisplay eglGetCurrentDisplay();
+    method public javax.microedition.khronos.egl.EGLSurface eglGetCurrentSurface(int);
+    method public javax.microedition.khronos.egl.EGLDisplay eglGetDisplay(Object);
+    method public int eglGetError();
+    method public boolean eglInitialize(javax.microedition.khronos.egl.EGLDisplay, int[]);
+    method public boolean eglMakeCurrent(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, javax.microedition.khronos.egl.EGLSurface, javax.microedition.khronos.egl.EGLContext);
+    method public boolean eglQueryContext(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLContext, int, int[]);
+    method public String eglQueryString(javax.microedition.khronos.egl.EGLDisplay, int);
+    method public boolean eglQuerySurface(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface, int, int[]);
+    method public boolean eglSwapBuffers(javax.microedition.khronos.egl.EGLDisplay, javax.microedition.khronos.egl.EGLSurface);
+    method public boolean eglTerminate(javax.microedition.khronos.egl.EGLDisplay);
+    method public boolean eglWaitGL();
+    method public boolean eglWaitNative(int, Object);
+    field public static final int EGL_ALPHA_FORMAT = 12424; // 0x3088
+    field public static final int EGL_ALPHA_MASK_SIZE = 12350; // 0x303e
+    field public static final int EGL_ALPHA_SIZE = 12321; // 0x3021
+    field public static final int EGL_BAD_ACCESS = 12290; // 0x3002
+    field public static final int EGL_BAD_ALLOC = 12291; // 0x3003
+    field public static final int EGL_BAD_ATTRIBUTE = 12292; // 0x3004
+    field public static final int EGL_BAD_CONFIG = 12293; // 0x3005
+    field public static final int EGL_BAD_CONTEXT = 12294; // 0x3006
+    field public static final int EGL_BAD_CURRENT_SURFACE = 12295; // 0x3007
+    field public static final int EGL_BAD_DISPLAY = 12296; // 0x3008
+    field public static final int EGL_BAD_MATCH = 12297; // 0x3009
+    field public static final int EGL_BAD_NATIVE_PIXMAP = 12298; // 0x300a
+    field public static final int EGL_BAD_NATIVE_WINDOW = 12299; // 0x300b
+    field public static final int EGL_BAD_PARAMETER = 12300; // 0x300c
+    field public static final int EGL_BAD_SURFACE = 12301; // 0x300d
+    field public static final int EGL_BLUE_SIZE = 12322; // 0x3022
+    field public static final int EGL_BUFFER_SIZE = 12320; // 0x3020
+    field public static final int EGL_COLORSPACE = 12423; // 0x3087
+    field public static final int EGL_COLOR_BUFFER_TYPE = 12351; // 0x303f
+    field public static final int EGL_CONFIG_CAVEAT = 12327; // 0x3027
+    field public static final int EGL_CONFIG_ID = 12328; // 0x3028
+    field public static final int EGL_CORE_NATIVE_ENGINE = 12379; // 0x305b
+    field public static final Object EGL_DEFAULT_DISPLAY;
+    field public static final int EGL_DEPTH_SIZE = 12325; // 0x3025
+    field public static final int EGL_DONT_CARE = -1; // 0xffffffff
+    field public static final int EGL_DRAW = 12377; // 0x3059
+    field public static final int EGL_EXTENSIONS = 12373; // 0x3055
+    field public static final int EGL_GREEN_SIZE = 12323; // 0x3023
+    field public static final int EGL_HEIGHT = 12374; // 0x3056
+    field public static final int EGL_HORIZONTAL_RESOLUTION = 12432; // 0x3090
+    field public static final int EGL_LARGEST_PBUFFER = 12376; // 0x3058
+    field public static final int EGL_LEVEL = 12329; // 0x3029
+    field public static final int EGL_LUMINANCE_BUFFER = 12431; // 0x308f
+    field public static final int EGL_LUMINANCE_SIZE = 12349; // 0x303d
+    field public static final int EGL_MAX_PBUFFER_HEIGHT = 12330; // 0x302a
+    field public static final int EGL_MAX_PBUFFER_PIXELS = 12331; // 0x302b
+    field public static final int EGL_MAX_PBUFFER_WIDTH = 12332; // 0x302c
+    field public static final int EGL_NATIVE_RENDERABLE = 12333; // 0x302d
+    field public static final int EGL_NATIVE_VISUAL_ID = 12334; // 0x302e
+    field public static final int EGL_NATIVE_VISUAL_TYPE = 12335; // 0x302f
+    field public static final int EGL_NONE = 12344; // 0x3038
+    field public static final int EGL_NON_CONFORMANT_CONFIG = 12369; // 0x3051
+    field public static final int EGL_NOT_INITIALIZED = 12289; // 0x3001
+    field public static final javax.microedition.khronos.egl.EGLContext EGL_NO_CONTEXT;
+    field public static final javax.microedition.khronos.egl.EGLDisplay EGL_NO_DISPLAY;
+    field public static final javax.microedition.khronos.egl.EGLSurface EGL_NO_SURFACE;
+    field public static final int EGL_PBUFFER_BIT = 1; // 0x1
+    field public static final int EGL_PIXEL_ASPECT_RATIO = 12434; // 0x3092
+    field public static final int EGL_PIXMAP_BIT = 2; // 0x2
+    field public static final int EGL_READ = 12378; // 0x305a
+    field public static final int EGL_RED_SIZE = 12324; // 0x3024
+    field public static final int EGL_RENDERABLE_TYPE = 12352; // 0x3040
+    field public static final int EGL_RENDER_BUFFER = 12422; // 0x3086
+    field public static final int EGL_RGB_BUFFER = 12430; // 0x308e
+    field public static final int EGL_SAMPLES = 12337; // 0x3031
+    field public static final int EGL_SAMPLE_BUFFERS = 12338; // 0x3032
+    field public static final int EGL_SINGLE_BUFFER = 12421; // 0x3085
+    field public static final int EGL_SLOW_CONFIG = 12368; // 0x3050
+    field public static final int EGL_STENCIL_SIZE = 12326; // 0x3026
+    field public static final int EGL_SUCCESS = 12288; // 0x3000
+    field public static final int EGL_SURFACE_TYPE = 12339; // 0x3033
+    field public static final int EGL_TRANSPARENT_BLUE_VALUE = 12341; // 0x3035
+    field public static final int EGL_TRANSPARENT_GREEN_VALUE = 12342; // 0x3036
+    field public static final int EGL_TRANSPARENT_RED_VALUE = 12343; // 0x3037
+    field public static final int EGL_TRANSPARENT_RGB = 12370; // 0x3052
+    field public static final int EGL_TRANSPARENT_TYPE = 12340; // 0x3034
+    field public static final int EGL_VENDOR = 12371; // 0x3053
+    field public static final int EGL_VERSION = 12372; // 0x3054
+    field public static final int EGL_VERTICAL_RESOLUTION = 12433; // 0x3091
+    field public static final int EGL_WIDTH = 12375; // 0x3057
+    field public static final int EGL_WINDOW_BIT = 4; // 0x4
+  }
+
+  public interface EGL11 extends javax.microedition.khronos.egl.EGL10 {
+    field public static final int EGL_CONTEXT_LOST = 12302; // 0x300e
+  }
+
+  public abstract class EGLConfig {
+    ctor public EGLConfig();
+  }
+
+  public abstract class EGLContext {
+    ctor public EGLContext();
+    method public static javax.microedition.khronos.egl.EGL getEGL();
+    method public abstract javax.microedition.khronos.opengles.GL getGL();
+  }
+
+  public abstract class EGLDisplay {
+    ctor public EGLDisplay();
+  }
+
+  public abstract class EGLSurface {
+    ctor public EGLSurface();
+  }
+
+}
+
+package javax.microedition.khronos.opengles {
+
+  public interface GL {
+  }
+
+  public interface GL10 extends javax.microedition.khronos.opengles.GL {
+    method public void glActiveTexture(int);
+    method public void glAlphaFunc(int, float);
+    method public void glAlphaFuncx(int, int);
+    method public void glBindTexture(int, int);
+    method public void glBlendFunc(int, int);
+    method public void glClear(int);
+    method public void glClearColor(float, float, float, float);
+    method public void glClearColorx(int, int, int, int);
+    method public void glClearDepthf(float);
+    method public void glClearDepthx(int);
+    method public void glClearStencil(int);
+    method public void glClientActiveTexture(int);
+    method public void glColor4f(float, float, float, float);
+    method public void glColor4x(int, int, int, int);
+    method public void glColorMask(boolean, boolean, boolean, boolean);
+    method public void glColorPointer(int, int, int, java.nio.Buffer);
+    method public void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glCompressedTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public void glCopyTexSubImage2D(int, int, int, int, int, int, int, int);
+    method public void glCullFace(int);
+    method public void glDeleteTextures(int, int[], int);
+    method public void glDeleteTextures(int, java.nio.IntBuffer);
+    method public void glDepthFunc(int);
+    method public void glDepthMask(boolean);
+    method public void glDepthRangef(float, float);
+    method public void glDepthRangex(int, int);
+    method public void glDisable(int);
+    method public void glDisableClientState(int);
+    method public void glDrawArrays(int, int, int);
+    method public void glDrawElements(int, int, int, java.nio.Buffer);
+    method public void glEnable(int);
+    method public void glEnableClientState(int);
+    method public void glFinish();
+    method public void glFlush();
+    method public void glFogf(int, float);
+    method public void glFogfv(int, float[], int);
+    method public void glFogfv(int, java.nio.FloatBuffer);
+    method public void glFogx(int, int);
+    method public void glFogxv(int, int[], int);
+    method public void glFogxv(int, java.nio.IntBuffer);
+    method public void glFrontFace(int);
+    method public void glFrustumf(float, float, float, float, float, float);
+    method public void glFrustumx(int, int, int, int, int, int);
+    method public void glGenTextures(int, int[], int);
+    method public void glGenTextures(int, java.nio.IntBuffer);
+    method public int glGetError();
+    method public void glGetIntegerv(int, int[], int);
+    method public void glGetIntegerv(int, java.nio.IntBuffer);
+    method public String glGetString(int);
+    method public void glHint(int, int);
+    method public void glLightModelf(int, float);
+    method public void glLightModelfv(int, float[], int);
+    method public void glLightModelfv(int, java.nio.FloatBuffer);
+    method public void glLightModelx(int, int);
+    method public void glLightModelxv(int, int[], int);
+    method public void glLightModelxv(int, java.nio.IntBuffer);
+    method public void glLightf(int, int, float);
+    method public void glLightfv(int, int, float[], int);
+    method public void glLightfv(int, int, java.nio.FloatBuffer);
+    method public void glLightx(int, int, int);
+    method public void glLightxv(int, int, int[], int);
+    method public void glLightxv(int, int, java.nio.IntBuffer);
+    method public void glLineWidth(float);
+    method public void glLineWidthx(int);
+    method public void glLoadIdentity();
+    method public void glLoadMatrixf(float[], int);
+    method public void glLoadMatrixf(java.nio.FloatBuffer);
+    method public void glLoadMatrixx(int[], int);
+    method public void glLoadMatrixx(java.nio.IntBuffer);
+    method public void glLogicOp(int);
+    method public void glMaterialf(int, int, float);
+    method public void glMaterialfv(int, int, float[], int);
+    method public void glMaterialfv(int, int, java.nio.FloatBuffer);
+    method public void glMaterialx(int, int, int);
+    method public void glMaterialxv(int, int, int[], int);
+    method public void glMaterialxv(int, int, java.nio.IntBuffer);
+    method public void glMatrixMode(int);
+    method public void glMultMatrixf(float[], int);
+    method public void glMultMatrixf(java.nio.FloatBuffer);
+    method public void glMultMatrixx(int[], int);
+    method public void glMultMatrixx(java.nio.IntBuffer);
+    method public void glMultiTexCoord4f(int, float, float, float, float);
+    method public void glMultiTexCoord4x(int, int, int, int, int);
+    method public void glNormal3f(float, float, float);
+    method public void glNormal3x(int, int, int);
+    method public void glNormalPointer(int, int, java.nio.Buffer);
+    method public void glOrthof(float, float, float, float, float, float);
+    method public void glOrthox(int, int, int, int, int, int);
+    method public void glPixelStorei(int, int);
+    method public void glPointSize(float);
+    method public void glPointSizex(int);
+    method public void glPolygonOffset(float, float);
+    method public void glPolygonOffsetx(int, int);
+    method public void glPopMatrix();
+    method public void glPushMatrix();
+    method public void glReadPixels(int, int, int, int, int, int, java.nio.Buffer);
+    method public void glRotatef(float, float, float, float);
+    method public void glRotatex(int, int, int, int);
+    method public void glSampleCoverage(float, boolean);
+    method public void glSampleCoveragex(int, boolean);
+    method public void glScalef(float, float, float);
+    method public void glScalex(int, int, int);
+    method public void glScissor(int, int, int, int);
+    method public void glShadeModel(int);
+    method public void glStencilFunc(int, int, int);
+    method public void glStencilMask(int);
+    method public void glStencilOp(int, int, int);
+    method public void glTexCoordPointer(int, int, int, java.nio.Buffer);
+    method public void glTexEnvf(int, int, float);
+    method public void glTexEnvfv(int, int, float[], int);
+    method public void glTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public void glTexEnvx(int, int, int);
+    method public void glTexEnvxv(int, int, int[], int);
+    method public void glTexEnvxv(int, int, java.nio.IntBuffer);
+    method public void glTexImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glTexParameterf(int, int, float);
+    method public void glTexParameterx(int, int, int);
+    method public void glTexSubImage2D(int, int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glTranslatef(float, float, float);
+    method public void glTranslatex(int, int, int);
+    method public void glVertexPointer(int, int, int, java.nio.Buffer);
+    method public void glViewport(int, int, int, int);
+    field public static final int GL_ADD = 260; // 0x104
+    field public static final int GL_ALIASED_LINE_WIDTH_RANGE = 33902; // 0x846e
+    field public static final int GL_ALIASED_POINT_SIZE_RANGE = 33901; // 0x846d
+    field public static final int GL_ALPHA = 6406; // 0x1906
+    field public static final int GL_ALPHA_BITS = 3413; // 0xd55
+    field public static final int GL_ALPHA_TEST = 3008; // 0xbc0
+    field public static final int GL_ALWAYS = 519; // 0x207
+    field public static final int GL_AMBIENT = 4608; // 0x1200
+    field public static final int GL_AMBIENT_AND_DIFFUSE = 5634; // 0x1602
+    field public static final int GL_AND = 5377; // 0x1501
+    field public static final int GL_AND_INVERTED = 5380; // 0x1504
+    field public static final int GL_AND_REVERSE = 5378; // 0x1502
+    field public static final int GL_BACK = 1029; // 0x405
+    field public static final int GL_BLEND = 3042; // 0xbe2
+    field public static final int GL_BLUE_BITS = 3412; // 0xd54
+    field public static final int GL_BYTE = 5120; // 0x1400
+    field public static final int GL_CCW = 2305; // 0x901
+    field public static final int GL_CLAMP_TO_EDGE = 33071; // 0x812f
+    field public static final int GL_CLEAR = 5376; // 0x1500
+    field public static final int GL_COLOR_ARRAY = 32886; // 0x8076
+    field public static final int GL_COLOR_BUFFER_BIT = 16384; // 0x4000
+    field public static final int GL_COLOR_LOGIC_OP = 3058; // 0xbf2
+    field public static final int GL_COLOR_MATERIAL = 2903; // 0xb57
+    field public static final int GL_COMPRESSED_TEXTURE_FORMATS = 34467; // 0x86a3
+    field public static final int GL_CONSTANT_ATTENUATION = 4615; // 0x1207
+    field public static final int GL_COPY = 5379; // 0x1503
+    field public static final int GL_COPY_INVERTED = 5388; // 0x150c
+    field public static final int GL_CULL_FACE = 2884; // 0xb44
+    field public static final int GL_CW = 2304; // 0x900
+    field public static final int GL_DECAL = 8449; // 0x2101
+    field public static final int GL_DECR = 7683; // 0x1e03
+    field public static final int GL_DEPTH_BITS = 3414; // 0xd56
+    field public static final int GL_DEPTH_BUFFER_BIT = 256; // 0x100
+    field public static final int GL_DEPTH_TEST = 2929; // 0xb71
+    field public static final int GL_DIFFUSE = 4609; // 0x1201
+    field public static final int GL_DITHER = 3024; // 0xbd0
+    field public static final int GL_DONT_CARE = 4352; // 0x1100
+    field public static final int GL_DST_ALPHA = 772; // 0x304
+    field public static final int GL_DST_COLOR = 774; // 0x306
+    field public static final int GL_EMISSION = 5632; // 0x1600
+    field public static final int GL_EQUAL = 514; // 0x202
+    field public static final int GL_EQUIV = 5385; // 0x1509
+    field public static final int GL_EXP = 2048; // 0x800
+    field public static final int GL_EXP2 = 2049; // 0x801
+    field public static final int GL_EXTENSIONS = 7939; // 0x1f03
+    field public static final int GL_FALSE = 0; // 0x0
+    field public static final int GL_FASTEST = 4353; // 0x1101
+    field public static final int GL_FIXED = 5132; // 0x140c
+    field public static final int GL_FLAT = 7424; // 0x1d00
+    field public static final int GL_FLOAT = 5126; // 0x1406
+    field public static final int GL_FOG = 2912; // 0xb60
+    field public static final int GL_FOG_COLOR = 2918; // 0xb66
+    field public static final int GL_FOG_DENSITY = 2914; // 0xb62
+    field public static final int GL_FOG_END = 2916; // 0xb64
+    field public static final int GL_FOG_HINT = 3156; // 0xc54
+    field public static final int GL_FOG_MODE = 2917; // 0xb65
+    field public static final int GL_FOG_START = 2915; // 0xb63
+    field public static final int GL_FRONT = 1028; // 0x404
+    field public static final int GL_FRONT_AND_BACK = 1032; // 0x408
+    field public static final int GL_GEQUAL = 518; // 0x206
+    field public static final int GL_GREATER = 516; // 0x204
+    field public static final int GL_GREEN_BITS = 3411; // 0xd53
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739; // 0x8b9b
+    field public static final int GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738; // 0x8b9a
+    field public static final int GL_INCR = 7682; // 0x1e02
+    field public static final int GL_INVALID_ENUM = 1280; // 0x500
+    field public static final int GL_INVALID_OPERATION = 1282; // 0x502
+    field public static final int GL_INVALID_VALUE = 1281; // 0x501
+    field public static final int GL_INVERT = 5386; // 0x150a
+    field public static final int GL_KEEP = 7680; // 0x1e00
+    field public static final int GL_LEQUAL = 515; // 0x203
+    field public static final int GL_LESS = 513; // 0x201
+    field public static final int GL_LIGHT0 = 16384; // 0x4000
+    field public static final int GL_LIGHT1 = 16385; // 0x4001
+    field public static final int GL_LIGHT2 = 16386; // 0x4002
+    field public static final int GL_LIGHT3 = 16387; // 0x4003
+    field public static final int GL_LIGHT4 = 16388; // 0x4004
+    field public static final int GL_LIGHT5 = 16389; // 0x4005
+    field public static final int GL_LIGHT6 = 16390; // 0x4006
+    field public static final int GL_LIGHT7 = 16391; // 0x4007
+    field public static final int GL_LIGHTING = 2896; // 0xb50
+    field public static final int GL_LIGHT_MODEL_AMBIENT = 2899; // 0xb53
+    field public static final int GL_LIGHT_MODEL_TWO_SIDE = 2898; // 0xb52
+    field public static final int GL_LINEAR = 9729; // 0x2601
+    field public static final int GL_LINEAR_ATTENUATION = 4616; // 0x1208
+    field public static final int GL_LINEAR_MIPMAP_LINEAR = 9987; // 0x2703
+    field public static final int GL_LINEAR_MIPMAP_NEAREST = 9985; // 0x2701
+    field public static final int GL_LINES = 1; // 0x1
+    field public static final int GL_LINE_LOOP = 2; // 0x2
+    field public static final int GL_LINE_SMOOTH = 2848; // 0xb20
+    field public static final int GL_LINE_SMOOTH_HINT = 3154; // 0xc52
+    field public static final int GL_LINE_STRIP = 3; // 0x3
+    field public static final int GL_LUMINANCE = 6409; // 0x1909
+    field public static final int GL_LUMINANCE_ALPHA = 6410; // 0x190a
+    field public static final int GL_MAX_ELEMENTS_INDICES = 33001; // 0x80e9
+    field public static final int GL_MAX_ELEMENTS_VERTICES = 33000; // 0x80e8
+    field public static final int GL_MAX_LIGHTS = 3377; // 0xd31
+    field public static final int GL_MAX_MODELVIEW_STACK_DEPTH = 3382; // 0xd36
+    field public static final int GL_MAX_PROJECTION_STACK_DEPTH = 3384; // 0xd38
+    field public static final int GL_MAX_TEXTURE_SIZE = 3379; // 0xd33
+    field public static final int GL_MAX_TEXTURE_STACK_DEPTH = 3385; // 0xd39
+    field public static final int GL_MAX_TEXTURE_UNITS = 34018; // 0x84e2
+    field public static final int GL_MAX_VIEWPORT_DIMS = 3386; // 0xd3a
+    field public static final int GL_MODELVIEW = 5888; // 0x1700
+    field public static final int GL_MODULATE = 8448; // 0x2100
+    field public static final int GL_MULTISAMPLE = 32925; // 0x809d
+    field public static final int GL_NAND = 5390; // 0x150e
+    field public static final int GL_NEAREST = 9728; // 0x2600
+    field public static final int GL_NEAREST_MIPMAP_LINEAR = 9986; // 0x2702
+    field public static final int GL_NEAREST_MIPMAP_NEAREST = 9984; // 0x2700
+    field public static final int GL_NEVER = 512; // 0x200
+    field public static final int GL_NICEST = 4354; // 0x1102
+    field public static final int GL_NOOP = 5381; // 0x1505
+    field public static final int GL_NOR = 5384; // 0x1508
+    field public static final int GL_NORMALIZE = 2977; // 0xba1
+    field public static final int GL_NORMAL_ARRAY = 32885; // 0x8075
+    field public static final int GL_NOTEQUAL = 517; // 0x205
+    field public static final int GL_NO_ERROR = 0; // 0x0
+    field public static final int GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466; // 0x86a2
+    field public static final int GL_ONE = 1; // 0x1
+    field public static final int GL_ONE_MINUS_DST_ALPHA = 773; // 0x305
+    field public static final int GL_ONE_MINUS_DST_COLOR = 775; // 0x307
+    field public static final int GL_ONE_MINUS_SRC_ALPHA = 771; // 0x303
+    field public static final int GL_ONE_MINUS_SRC_COLOR = 769; // 0x301
+    field public static final int GL_OR = 5383; // 0x1507
+    field public static final int GL_OR_INVERTED = 5389; // 0x150d
+    field public static final int GL_OR_REVERSE = 5387; // 0x150b
+    field public static final int GL_OUT_OF_MEMORY = 1285; // 0x505
+    field public static final int GL_PACK_ALIGNMENT = 3333; // 0xd05
+    field public static final int GL_PALETTE4_R5_G6_B5_OES = 35730; // 0x8b92
+    field public static final int GL_PALETTE4_RGB5_A1_OES = 35732; // 0x8b94
+    field public static final int GL_PALETTE4_RGB8_OES = 35728; // 0x8b90
+    field public static final int GL_PALETTE4_RGBA4_OES = 35731; // 0x8b93
+    field public static final int GL_PALETTE4_RGBA8_OES = 35729; // 0x8b91
+    field public static final int GL_PALETTE8_R5_G6_B5_OES = 35735; // 0x8b97
+    field public static final int GL_PALETTE8_RGB5_A1_OES = 35737; // 0x8b99
+    field public static final int GL_PALETTE8_RGB8_OES = 35733; // 0x8b95
+    field public static final int GL_PALETTE8_RGBA4_OES = 35736; // 0x8b98
+    field public static final int GL_PALETTE8_RGBA8_OES = 35734; // 0x8b96
+    field public static final int GL_PERSPECTIVE_CORRECTION_HINT = 3152; // 0xc50
+    field public static final int GL_POINTS = 0; // 0x0
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SMOOTH = 2832; // 0xb10
+    field public static final int GL_POINT_SMOOTH_HINT = 3153; // 0xc51
+    field public static final int GL_POLYGON_OFFSET_FILL = 32823; // 0x8037
+    field public static final int GL_POLYGON_SMOOTH_HINT = 3155; // 0xc53
+    field public static final int GL_POSITION = 4611; // 0x1203
+    field public static final int GL_PROJECTION = 5889; // 0x1701
+    field public static final int GL_QUADRATIC_ATTENUATION = 4617; // 0x1209
+    field public static final int GL_RED_BITS = 3410; // 0xd52
+    field public static final int GL_RENDERER = 7937; // 0x1f01
+    field public static final int GL_REPEAT = 10497; // 0x2901
+    field public static final int GL_REPLACE = 7681; // 0x1e01
+    field public static final int GL_RESCALE_NORMAL = 32826; // 0x803a
+    field public static final int GL_RGB = 6407; // 0x1907
+    field public static final int GL_RGBA = 6408; // 0x1908
+    field public static final int GL_SAMPLE_ALPHA_TO_COVERAGE = 32926; // 0x809e
+    field public static final int GL_SAMPLE_ALPHA_TO_ONE = 32927; // 0x809f
+    field public static final int GL_SAMPLE_COVERAGE = 32928; // 0x80a0
+    field public static final int GL_SCISSOR_TEST = 3089; // 0xc11
+    field public static final int GL_SET = 5391; // 0x150f
+    field public static final int GL_SHININESS = 5633; // 0x1601
+    field public static final int GL_SHORT = 5122; // 0x1402
+    field public static final int GL_SMOOTH = 7425; // 0x1d01
+    field public static final int GL_SMOOTH_LINE_WIDTH_RANGE = 2850; // 0xb22
+    field public static final int GL_SMOOTH_POINT_SIZE_RANGE = 2834; // 0xb12
+    field public static final int GL_SPECULAR = 4610; // 0x1202
+    field public static final int GL_SPOT_CUTOFF = 4614; // 0x1206
+    field public static final int GL_SPOT_DIRECTION = 4612; // 0x1204
+    field public static final int GL_SPOT_EXPONENT = 4613; // 0x1205
+    field public static final int GL_SRC_ALPHA = 770; // 0x302
+    field public static final int GL_SRC_ALPHA_SATURATE = 776; // 0x308
+    field public static final int GL_SRC_COLOR = 768; // 0x300
+    field public static final int GL_STACK_OVERFLOW = 1283; // 0x503
+    field public static final int GL_STACK_UNDERFLOW = 1284; // 0x504
+    field public static final int GL_STENCIL_BITS = 3415; // 0xd57
+    field public static final int GL_STENCIL_BUFFER_BIT = 1024; // 0x400
+    field public static final int GL_STENCIL_TEST = 2960; // 0xb90
+    field public static final int GL_SUBPIXEL_BITS = 3408; // 0xd50
+    field public static final int GL_TEXTURE = 5890; // 0x1702
+    field public static final int GL_TEXTURE0 = 33984; // 0x84c0
+    field public static final int GL_TEXTURE1 = 33985; // 0x84c1
+    field public static final int GL_TEXTURE10 = 33994; // 0x84ca
+    field public static final int GL_TEXTURE11 = 33995; // 0x84cb
+    field public static final int GL_TEXTURE12 = 33996; // 0x84cc
+    field public static final int GL_TEXTURE13 = 33997; // 0x84cd
+    field public static final int GL_TEXTURE14 = 33998; // 0x84ce
+    field public static final int GL_TEXTURE15 = 33999; // 0x84cf
+    field public static final int GL_TEXTURE16 = 34000; // 0x84d0
+    field public static final int GL_TEXTURE17 = 34001; // 0x84d1
+    field public static final int GL_TEXTURE18 = 34002; // 0x84d2
+    field public static final int GL_TEXTURE19 = 34003; // 0x84d3
+    field public static final int GL_TEXTURE2 = 33986; // 0x84c2
+    field public static final int GL_TEXTURE20 = 34004; // 0x84d4
+    field public static final int GL_TEXTURE21 = 34005; // 0x84d5
+    field public static final int GL_TEXTURE22 = 34006; // 0x84d6
+    field public static final int GL_TEXTURE23 = 34007; // 0x84d7
+    field public static final int GL_TEXTURE24 = 34008; // 0x84d8
+    field public static final int GL_TEXTURE25 = 34009; // 0x84d9
+    field public static final int GL_TEXTURE26 = 34010; // 0x84da
+    field public static final int GL_TEXTURE27 = 34011; // 0x84db
+    field public static final int GL_TEXTURE28 = 34012; // 0x84dc
+    field public static final int GL_TEXTURE29 = 34013; // 0x84dd
+    field public static final int GL_TEXTURE3 = 33987; // 0x84c3
+    field public static final int GL_TEXTURE30 = 34014; // 0x84de
+    field public static final int GL_TEXTURE31 = 34015; // 0x84df
+    field public static final int GL_TEXTURE4 = 33988; // 0x84c4
+    field public static final int GL_TEXTURE5 = 33989; // 0x84c5
+    field public static final int GL_TEXTURE6 = 33990; // 0x84c6
+    field public static final int GL_TEXTURE7 = 33991; // 0x84c7
+    field public static final int GL_TEXTURE8 = 33992; // 0x84c8
+    field public static final int GL_TEXTURE9 = 33993; // 0x84c9
+    field public static final int GL_TEXTURE_2D = 3553; // 0xde1
+    field public static final int GL_TEXTURE_COORD_ARRAY = 32888; // 0x8078
+    field public static final int GL_TEXTURE_ENV = 8960; // 0x2300
+    field public static final int GL_TEXTURE_ENV_COLOR = 8705; // 0x2201
+    field public static final int GL_TEXTURE_ENV_MODE = 8704; // 0x2200
+    field public static final int GL_TEXTURE_MAG_FILTER = 10240; // 0x2800
+    field public static final int GL_TEXTURE_MIN_FILTER = 10241; // 0x2801
+    field public static final int GL_TEXTURE_WRAP_S = 10242; // 0x2802
+    field public static final int GL_TEXTURE_WRAP_T = 10243; // 0x2803
+    field public static final int GL_TRIANGLES = 4; // 0x4
+    field public static final int GL_TRIANGLE_FAN = 6; // 0x6
+    field public static final int GL_TRIANGLE_STRIP = 5; // 0x5
+    field public static final int GL_TRUE = 1; // 0x1
+    field public static final int GL_UNPACK_ALIGNMENT = 3317; // 0xcf5
+    field public static final int GL_UNSIGNED_BYTE = 5121; // 0x1401
+    field public static final int GL_UNSIGNED_SHORT = 5123; // 0x1403
+    field public static final int GL_UNSIGNED_SHORT_4_4_4_4 = 32819; // 0x8033
+    field public static final int GL_UNSIGNED_SHORT_5_5_5_1 = 32820; // 0x8034
+    field public static final int GL_UNSIGNED_SHORT_5_6_5 = 33635; // 0x8363
+    field public static final int GL_VENDOR = 7936; // 0x1f00
+    field public static final int GL_VERSION = 7938; // 0x1f02
+    field public static final int GL_VERTEX_ARRAY = 32884; // 0x8074
+    field public static final int GL_XOR = 5382; // 0x1506
+    field public static final int GL_ZERO = 0; // 0x0
+  }
+
+  public interface GL10Ext extends javax.microedition.khronos.opengles.GL {
+    method public int glQueryMatrixxOES(int[], int, int[], int);
+    method public int glQueryMatrixxOES(java.nio.IntBuffer, java.nio.IntBuffer);
+  }
+
+  public interface GL11 extends javax.microedition.khronos.opengles.GL10 {
+    method public void glBindBuffer(int, int);
+    method public void glBufferData(int, int, java.nio.Buffer, int);
+    method public void glBufferSubData(int, int, int, java.nio.Buffer);
+    method public void glClipPlanef(int, float[], int);
+    method public void glClipPlanef(int, java.nio.FloatBuffer);
+    method public void glClipPlanex(int, int[], int);
+    method public void glClipPlanex(int, java.nio.IntBuffer);
+    method public void glColor4ub(byte, byte, byte, byte);
+    method public void glColorPointer(int, int, int, int);
+    method public void glDeleteBuffers(int, int[], int);
+    method public void glDeleteBuffers(int, java.nio.IntBuffer);
+    method public void glDrawElements(int, int, int, int);
+    method public void glGenBuffers(int, int[], int);
+    method public void glGenBuffers(int, java.nio.IntBuffer);
+    method public void glGetBooleanv(int, boolean[], int);
+    method public void glGetBooleanv(int, java.nio.IntBuffer);
+    method public void glGetBufferParameteriv(int, int, int[], int);
+    method public void glGetBufferParameteriv(int, int, java.nio.IntBuffer);
+    method public void glGetClipPlanef(int, float[], int);
+    method public void glGetClipPlanef(int, java.nio.FloatBuffer);
+    method public void glGetClipPlanex(int, int[], int);
+    method public void glGetClipPlanex(int, java.nio.IntBuffer);
+    method public void glGetFixedv(int, int[], int);
+    method public void glGetFixedv(int, java.nio.IntBuffer);
+    method public void glGetFloatv(int, float[], int);
+    method public void glGetFloatv(int, java.nio.FloatBuffer);
+    method public void glGetLightfv(int, int, float[], int);
+    method public void glGetLightfv(int, int, java.nio.FloatBuffer);
+    method public void glGetLightxv(int, int, int[], int);
+    method public void glGetLightxv(int, int, java.nio.IntBuffer);
+    method public void glGetMaterialfv(int, int, float[], int);
+    method public void glGetMaterialfv(int, int, java.nio.FloatBuffer);
+    method public void glGetMaterialxv(int, int, int[], int);
+    method public void glGetMaterialxv(int, int, java.nio.IntBuffer);
+    method public void glGetPointerv(int, java.nio.Buffer[]);
+    method public void glGetTexEnviv(int, int, int[], int);
+    method public void glGetTexEnviv(int, int, java.nio.IntBuffer);
+    method public void glGetTexEnvxv(int, int, int[], int);
+    method public void glGetTexEnvxv(int, int, java.nio.IntBuffer);
+    method public void glGetTexParameterfv(int, int, float[], int);
+    method public void glGetTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public void glGetTexParameteriv(int, int, int[], int);
+    method public void glGetTexParameteriv(int, int, java.nio.IntBuffer);
+    method public void glGetTexParameterxv(int, int, int[], int);
+    method public void glGetTexParameterxv(int, int, java.nio.IntBuffer);
+    method public boolean glIsBuffer(int);
+    method public boolean glIsEnabled(int);
+    method public boolean glIsTexture(int);
+    method public void glNormalPointer(int, int, int);
+    method public void glPointParameterf(int, float);
+    method public void glPointParameterfv(int, float[], int);
+    method public void glPointParameterfv(int, java.nio.FloatBuffer);
+    method public void glPointParameterx(int, int);
+    method public void glPointParameterxv(int, int[], int);
+    method public void glPointParameterxv(int, java.nio.IntBuffer);
+    method public void glPointSizePointerOES(int, int, java.nio.Buffer);
+    method public void glTexCoordPointer(int, int, int, int);
+    method public void glTexEnvi(int, int, int);
+    method public void glTexEnviv(int, int, int[], int);
+    method public void glTexEnviv(int, int, java.nio.IntBuffer);
+    method public void glTexParameterfv(int, int, float[], int);
+    method public void glTexParameterfv(int, int, java.nio.FloatBuffer);
+    method public void glTexParameteri(int, int, int);
+    method public void glTexParameteriv(int, int, int[], int);
+    method public void glTexParameteriv(int, int, java.nio.IntBuffer);
+    method public void glTexParameterxv(int, int, int[], int);
+    method public void glTexParameterxv(int, int, java.nio.IntBuffer);
+    method public void glVertexPointer(int, int, int, int);
+    field public static final int GL_ACTIVE_TEXTURE = 34016; // 0x84e0
+    field public static final int GL_ADD_SIGNED = 34164; // 0x8574
+    field public static final int GL_ALPHA_SCALE = 3356; // 0xd1c
+    field public static final int GL_ALPHA_TEST_FUNC = 3009; // 0xbc1
+    field public static final int GL_ALPHA_TEST_REF = 3010; // 0xbc2
+    field public static final int GL_ARRAY_BUFFER = 34962; // 0x8892
+    field public static final int GL_ARRAY_BUFFER_BINDING = 34964; // 0x8894
+    field public static final int GL_BLEND_DST = 3040; // 0xbe0
+    field public static final int GL_BLEND_SRC = 3041; // 0xbe1
+    field public static final int GL_BUFFER_ACCESS = 35003; // 0x88bb
+    field public static final int GL_BUFFER_SIZE = 34660; // 0x8764
+    field public static final int GL_BUFFER_USAGE = 34661; // 0x8765
+    field public static final int GL_CLIENT_ACTIVE_TEXTURE = 34017; // 0x84e1
+    field public static final int GL_CLIP_PLANE0 = 12288; // 0x3000
+    field public static final int GL_CLIP_PLANE1 = 12289; // 0x3001
+    field public static final int GL_CLIP_PLANE2 = 12290; // 0x3002
+    field public static final int GL_CLIP_PLANE3 = 12291; // 0x3003
+    field public static final int GL_CLIP_PLANE4 = 12292; // 0x3004
+    field public static final int GL_CLIP_PLANE5 = 12293; // 0x3005
+    field public static final int GL_COLOR_ARRAY_BUFFER_BINDING = 34968; // 0x8898
+    field public static final int GL_COLOR_ARRAY_POINTER = 32912; // 0x8090
+    field public static final int GL_COLOR_ARRAY_SIZE = 32897; // 0x8081
+    field public static final int GL_COLOR_ARRAY_STRIDE = 32899; // 0x8083
+    field public static final int GL_COLOR_ARRAY_TYPE = 32898; // 0x8082
+    field public static final int GL_COLOR_CLEAR_VALUE = 3106; // 0xc22
+    field public static final int GL_COLOR_WRITEMASK = 3107; // 0xc23
+    field public static final int GL_COMBINE = 34160; // 0x8570
+    field public static final int GL_COMBINE_ALPHA = 34162; // 0x8572
+    field public static final int GL_COMBINE_RGB = 34161; // 0x8571
+    field public static final int GL_CONSTANT = 34166; // 0x8576
+    field public static final int GL_COORD_REPLACE_OES = 34914; // 0x8862
+    field public static final int GL_CULL_FACE_MODE = 2885; // 0xb45
+    field public static final int GL_CURRENT_COLOR = 2816; // 0xb00
+    field public static final int GL_CURRENT_NORMAL = 2818; // 0xb02
+    field public static final int GL_CURRENT_TEXTURE_COORDS = 2819; // 0xb03
+    field public static final int GL_DEPTH_CLEAR_VALUE = 2931; // 0xb73
+    field public static final int GL_DEPTH_FUNC = 2932; // 0xb74
+    field public static final int GL_DEPTH_RANGE = 2928; // 0xb70
+    field public static final int GL_DEPTH_WRITEMASK = 2930; // 0xb72
+    field public static final int GL_DOT3_RGB = 34478; // 0x86ae
+    field public static final int GL_DOT3_RGBA = 34479; // 0x86af
+    field public static final int GL_DYNAMIC_DRAW = 35048; // 0x88e8
+    field public static final int GL_ELEMENT_ARRAY_BUFFER = 34963; // 0x8893
+    field public static final int GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965; // 0x8895
+    field public static final int GL_FRONT_FACE = 2886; // 0xb46
+    field public static final int GL_GENERATE_MIPMAP = 33169; // 0x8191
+    field public static final int GL_GENERATE_MIPMAP_HINT = 33170; // 0x8192
+    field public static final int GL_INTERPOLATE = 34165; // 0x8575
+    field public static final int GL_LINE_WIDTH = 2849; // 0xb21
+    field public static final int GL_LOGIC_OP_MODE = 3056; // 0xbf0
+    field public static final int GL_MATRIX_MODE = 2976; // 0xba0
+    field public static final int GL_MAX_CLIP_PLANES = 3378; // 0xd32
+    field public static final int GL_MODELVIEW_MATRIX = 2982; // 0xba6
+    field public static final int GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES = 35213; // 0x898d
+    field public static final int GL_MODELVIEW_STACK_DEPTH = 2979; // 0xba3
+    field public static final int GL_NORMAL_ARRAY_BUFFER_BINDING = 34967; // 0x8897
+    field public static final int GL_NORMAL_ARRAY_POINTER = 32911; // 0x808f
+    field public static final int GL_NORMAL_ARRAY_STRIDE = 32895; // 0x807f
+    field public static final int GL_NORMAL_ARRAY_TYPE = 32894; // 0x807e
+    field public static final int GL_OPERAND0_ALPHA = 34200; // 0x8598
+    field public static final int GL_OPERAND0_RGB = 34192; // 0x8590
+    field public static final int GL_OPERAND1_ALPHA = 34201; // 0x8599
+    field public static final int GL_OPERAND1_RGB = 34193; // 0x8591
+    field public static final int GL_OPERAND2_ALPHA = 34202; // 0x859a
+    field public static final int GL_OPERAND2_RGB = 34194; // 0x8592
+    field public static final int GL_POINT_DISTANCE_ATTENUATION = 33065; // 0x8129
+    field public static final int GL_POINT_FADE_THRESHOLD_SIZE = 33064; // 0x8128
+    field public static final int GL_POINT_SIZE = 2833; // 0xb11
+    field public static final int GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES = 35743; // 0x8b9f
+    field public static final int GL_POINT_SIZE_ARRAY_OES = 35740; // 0x8b9c
+    field public static final int GL_POINT_SIZE_ARRAY_POINTER_OES = 35212; // 0x898c
+    field public static final int GL_POINT_SIZE_ARRAY_STRIDE_OES = 35211; // 0x898b
+    field public static final int GL_POINT_SIZE_ARRAY_TYPE_OES = 35210; // 0x898a
+    field public static final int GL_POINT_SIZE_MAX = 33063; // 0x8127
+    field public static final int GL_POINT_SIZE_MIN = 33062; // 0x8126
+    field public static final int GL_POINT_SPRITE_OES = 34913; // 0x8861
+    field public static final int GL_POLYGON_OFFSET_FACTOR = 32824; // 0x8038
+    field public static final int GL_POLYGON_OFFSET_UNITS = 10752; // 0x2a00
+    field public static final int GL_PREVIOUS = 34168; // 0x8578
+    field public static final int GL_PRIMARY_COLOR = 34167; // 0x8577
+    field public static final int GL_PROJECTION_MATRIX = 2983; // 0xba7
+    field public static final int GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES = 35214; // 0x898e
+    field public static final int GL_PROJECTION_STACK_DEPTH = 2980; // 0xba4
+    field public static final int GL_RGB_SCALE = 34163; // 0x8573
+    field public static final int GL_SAMPLES = 32937; // 0x80a9
+    field public static final int GL_SAMPLE_BUFFERS = 32936; // 0x80a8
+    field public static final int GL_SAMPLE_COVERAGE_INVERT = 32939; // 0x80ab
+    field public static final int GL_SAMPLE_COVERAGE_VALUE = 32938; // 0x80aa
+    field public static final int GL_SCISSOR_BOX = 3088; // 0xc10
+    field public static final int GL_SHADE_MODEL = 2900; // 0xb54
+    field public static final int GL_SRC0_ALPHA = 34184; // 0x8588
+    field public static final int GL_SRC0_RGB = 34176; // 0x8580
+    field public static final int GL_SRC1_ALPHA = 34185; // 0x8589
+    field public static final int GL_SRC1_RGB = 34177; // 0x8581
+    field public static final int GL_SRC2_ALPHA = 34186; // 0x858a
+    field public static final int GL_SRC2_RGB = 34178; // 0x8582
+    field public static final int GL_STATIC_DRAW = 35044; // 0x88e4
+    field public static final int GL_STENCIL_CLEAR_VALUE = 2961; // 0xb91
+    field public static final int GL_STENCIL_FAIL = 2964; // 0xb94
+    field public static final int GL_STENCIL_FUNC = 2962; // 0xb92
+    field public static final int GL_STENCIL_PASS_DEPTH_FAIL = 2965; // 0xb95
+    field public static final int GL_STENCIL_PASS_DEPTH_PASS = 2966; // 0xb96
+    field public static final int GL_STENCIL_REF = 2967; // 0xb97
+    field public static final int GL_STENCIL_VALUE_MASK = 2963; // 0xb93
+    field public static final int GL_STENCIL_WRITEMASK = 2968; // 0xb98
+    field public static final int GL_SUBTRACT = 34023; // 0x84e7
+    field public static final int GL_TEXTURE_BINDING_2D = 32873; // 0x8069
+    field public static final int GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970; // 0x889a
+    field public static final int GL_TEXTURE_COORD_ARRAY_POINTER = 32914; // 0x8092
+    field public static final int GL_TEXTURE_COORD_ARRAY_SIZE = 32904; // 0x8088
+    field public static final int GL_TEXTURE_COORD_ARRAY_STRIDE = 32906; // 0x808a
+    field public static final int GL_TEXTURE_COORD_ARRAY_TYPE = 32905; // 0x8089
+    field public static final int GL_TEXTURE_MATRIX = 2984; // 0xba8
+    field public static final int GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES = 35215; // 0x898f
+    field public static final int GL_TEXTURE_STACK_DEPTH = 2981; // 0xba5
+    field public static final int GL_VERTEX_ARRAY_BUFFER_BINDING = 34966; // 0x8896
+    field public static final int GL_VERTEX_ARRAY_POINTER = 32910; // 0x808e
+    field public static final int GL_VERTEX_ARRAY_SIZE = 32890; // 0x807a
+    field public static final int GL_VERTEX_ARRAY_STRIDE = 32892; // 0x807c
+    field public static final int GL_VERTEX_ARRAY_TYPE = 32891; // 0x807b
+    field public static final int GL_VIEWPORT = 2978; // 0xba2
+    field public static final int GL_WRITE_ONLY = 35001; // 0x88b9
+  }
+
+  public interface GL11Ext extends javax.microedition.khronos.opengles.GL {
+    method public void glCurrentPaletteMatrixOES(int);
+    method public void glDrawTexfOES(float, float, float, float, float);
+    method public void glDrawTexfvOES(float[], int);
+    method public void glDrawTexfvOES(java.nio.FloatBuffer);
+    method public void glDrawTexiOES(int, int, int, int, int);
+    method public void glDrawTexivOES(int[], int);
+    method public void glDrawTexivOES(java.nio.IntBuffer);
+    method public void glDrawTexsOES(short, short, short, short, short);
+    method public void glDrawTexsvOES(short[], int);
+    method public void glDrawTexsvOES(java.nio.ShortBuffer);
+    method public void glDrawTexxOES(int, int, int, int, int);
+    method public void glDrawTexxvOES(int[], int);
+    method public void glDrawTexxvOES(java.nio.IntBuffer);
+    method public void glEnable(int);
+    method public void glEnableClientState(int);
+    method public void glLoadPaletteFromModelViewMatrixOES();
+    method public void glMatrixIndexPointerOES(int, int, int, java.nio.Buffer);
+    method public void glMatrixIndexPointerOES(int, int, int, int);
+    method public void glTexParameterfv(int, int, float[], int);
+    method public void glWeightPointerOES(int, int, int, java.nio.Buffer);
+    method public void glWeightPointerOES(int, int, int, int);
+    field public static final int GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES = 35742; // 0x8b9e
+    field public static final int GL_MATRIX_INDEX_ARRAY_OES = 34884; // 0x8844
+    field public static final int GL_MATRIX_INDEX_ARRAY_POINTER_OES = 34889; // 0x8849
+    field public static final int GL_MATRIX_INDEX_ARRAY_SIZE_OES = 34886; // 0x8846
+    field public static final int GL_MATRIX_INDEX_ARRAY_STRIDE_OES = 34888; // 0x8848
+    field public static final int GL_MATRIX_INDEX_ARRAY_TYPE_OES = 34887; // 0x8847
+    field public static final int GL_MATRIX_PALETTE_OES = 34880; // 0x8840
+    field public static final int GL_MAX_PALETTE_MATRICES_OES = 34882; // 0x8842
+    field public static final int GL_MAX_VERTEX_UNITS_OES = 34468; // 0x86a4
+    field public static final int GL_TEXTURE_CROP_RECT_OES = 35741; // 0x8b9d
+    field public static final int GL_WEIGHT_ARRAY_BUFFER_BINDING_OES = 34974; // 0x889e
+    field public static final int GL_WEIGHT_ARRAY_OES = 34477; // 0x86ad
+    field public static final int GL_WEIGHT_ARRAY_POINTER_OES = 34476; // 0x86ac
+    field public static final int GL_WEIGHT_ARRAY_SIZE_OES = 34475; // 0x86ab
+    field public static final int GL_WEIGHT_ARRAY_STRIDE_OES = 34474; // 0x86aa
+    field public static final int GL_WEIGHT_ARRAY_TYPE_OES = 34473; // 0x86a9
+  }
+
+  public interface GL11ExtensionPack extends javax.microedition.khronos.opengles.GL {
+    method public void glBindFramebufferOES(int, int);
+    method public void glBindRenderbufferOES(int, int);
+    method public void glBindTexture(int, int);
+    method public void glBlendEquation(int);
+    method public void glBlendEquationSeparate(int, int);
+    method public void glBlendFuncSeparate(int, int, int, int);
+    method public int glCheckFramebufferStatusOES(int);
+    method public void glCompressedTexImage2D(int, int, int, int, int, int, int, java.nio.Buffer);
+    method public void glCopyTexImage2D(int, int, int, int, int, int, int, int);
+    method public void glDeleteFramebuffersOES(int, int[], int);
+    method public void glDeleteFramebuffersOES(int, java.nio.IntBuffer);
+    method public void glDeleteRenderbuffersOES(int, int[], int);
+    method public void glDeleteRenderbuffersOES(int, java.nio.IntBuffer);
+    method public void glEnable(int);
+    method public void glFramebufferRenderbufferOES(int, int, int, int);
+    method public void glFramebufferTexture2DOES(int, int, int, int, int);
+    method public void glGenFramebuffersOES(int, int[], int);
+    method public void glGenFramebuffersOES(int, java.nio.IntBuffer);
+    method public void glGenRenderbuffersOES(int, int[], int);
+    method public void glGenRenderbuffersOES(int, java.nio.IntBuffer);
+    method public void glGenerateMipmapOES(int);
+    method public void glGetFramebufferAttachmentParameterivOES(int, int, int, int[], int);
+    method public void glGetFramebufferAttachmentParameterivOES(int, int, int, java.nio.IntBuffer);
+    method public void glGetIntegerv(int, int[], int);
+    method public void glGetIntegerv(int, java.nio.IntBuffer);
+    method public void glGetRenderbufferParameterivOES(int, int, int[], int);
+    method public void glGetRenderbufferParameterivOES(int, int, java.nio.IntBuffer);
+    method public void glGetTexGenfv(int, int, float[], int);
+    method public void glGetTexGenfv(int, int, java.nio.FloatBuffer);
+    method public void glGetTexGeniv(int, int, int[], int);
+    method public void glGetTexGeniv(int, int, java.nio.IntBuffer);
+    method public void glGetTexGenxv(int, int, int[], int);
+    method public void glGetTexGenxv(int, int, java.nio.IntBuffer);
+    method public boolean glIsFramebufferOES(int);
+    method public boolean glIsRenderbufferOES(int);
+    method public void glRenderbufferStorageOES(int, int, int, int);
+    method public void glStencilOp(int, int, int);
+    method public void glTexEnvf(int, int, float);
+    method public void glTexEnvfv(int, int, float[], int);
+    method public void glTexEnvfv(int, int, java.nio.FloatBuffer);
+    method public void glTexEnvx(int, int, int);
+    method public void glTexEnvxv(int, int, int[], int);
+    method public void glTexEnvxv(int, int, java.nio.IntBuffer);
+    method public void glTexGenf(int, int, float);
+    method public void glTexGenfv(int, int, float[], int);
+    method public void glTexGenfv(int, int, java.nio.FloatBuffer);
+    method public void glTexGeni(int, int, int);
+    method public void glTexGeniv(int, int, int[], int);
+    method public void glTexGeniv(int, int, java.nio.IntBuffer);
+    method public void glTexGenx(int, int, int);
+    method public void glTexGenxv(int, int, int[], int);
+    method public void glTexGenxv(int, int, java.nio.IntBuffer);
+    method public void glTexParameterf(int, int, float);
+    field public static final int GL_BLEND_DST_ALPHA = 32970; // 0x80ca
+    field public static final int GL_BLEND_DST_RGB = 32968; // 0x80c8
+    field public static final int GL_BLEND_EQUATION = 32777; // 0x8009
+    field public static final int GL_BLEND_EQUATION_ALPHA = 34877; // 0x883d
+    field public static final int GL_BLEND_EQUATION_RGB = 32777; // 0x8009
+    field public static final int GL_BLEND_SRC_ALPHA = 32971; // 0x80cb
+    field public static final int GL_BLEND_SRC_RGB = 32969; // 0x80c9
+    field public static final int GL_COLOR_ATTACHMENT0_OES = 36064; // 0x8ce0
+    field public static final int GL_COLOR_ATTACHMENT10_OES = 36074; // 0x8cea
+    field public static final int GL_COLOR_ATTACHMENT11_OES = 36075; // 0x8ceb
+    field public static final int GL_COLOR_ATTACHMENT12_OES = 36076; // 0x8cec
+    field public static final int GL_COLOR_ATTACHMENT13_OES = 36077; // 0x8ced
+    field public static final int GL_COLOR_ATTACHMENT14_OES = 36078; // 0x8cee
+    field public static final int GL_COLOR_ATTACHMENT15_OES = 36079; // 0x8cef
+    field public static final int GL_COLOR_ATTACHMENT1_OES = 36065; // 0x8ce1
+    field public static final int GL_COLOR_ATTACHMENT2_OES = 36066; // 0x8ce2
+    field public static final int GL_COLOR_ATTACHMENT3_OES = 36067; // 0x8ce3
+    field public static final int GL_COLOR_ATTACHMENT4_OES = 36068; // 0x8ce4
+    field public static final int GL_COLOR_ATTACHMENT5_OES = 36069; // 0x8ce5
+    field public static final int GL_COLOR_ATTACHMENT6_OES = 36070; // 0x8ce6
+    field public static final int GL_COLOR_ATTACHMENT7_OES = 36071; // 0x8ce7
+    field public static final int GL_COLOR_ATTACHMENT8_OES = 36072; // 0x8ce8
+    field public static final int GL_COLOR_ATTACHMENT9_OES = 36073; // 0x8ce9
+    field public static final int GL_DECR_WRAP = 34056; // 0x8508
+    field public static final int GL_DEPTH_ATTACHMENT_OES = 36096; // 0x8d00
+    field public static final int GL_DEPTH_COMPONENT = 6402; // 0x1902
+    field public static final int GL_DEPTH_COMPONENT16 = 33189; // 0x81a5
+    field public static final int GL_DEPTH_COMPONENT24 = 33190; // 0x81a6
+    field public static final int GL_DEPTH_COMPONENT32 = 33191; // 0x81a7
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES = 36049; // 0x8cd1
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES = 36048; // 0x8cd0
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES = 36051; // 0x8cd3
+    field public static final int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES = 36050; // 0x8cd2
+    field public static final int GL_FRAMEBUFFER_BINDING_OES = 36006; // 0x8ca6
+    field public static final int GL_FRAMEBUFFER_COMPLETE_OES = 36053; // 0x8cd5
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES = 36054; // 0x8cd6
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES = 36057; // 0x8cd9
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES = 36059; // 0x8cdb
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES = 36058; // 0x8cda
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES = 36055; // 0x8cd7
+    field public static final int GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES = 36060; // 0x8cdc
+    field public static final int GL_FRAMEBUFFER_OES = 36160; // 0x8d40
+    field public static final int GL_FRAMEBUFFER_UNSUPPORTED_OES = 36061; // 0x8cdd
+    field public static final int GL_FUNC_ADD = 32774; // 0x8006
+    field public static final int GL_FUNC_REVERSE_SUBTRACT = 32779; // 0x800b
+    field public static final int GL_FUNC_SUBTRACT = 32778; // 0x800a
+    field public static final int GL_INCR_WRAP = 34055; // 0x8507
+    field public static final int GL_INVALID_FRAMEBUFFER_OPERATION_OES = 1286; // 0x506
+    field public static final int GL_MAX_COLOR_ATTACHMENTS_OES = 36063; // 0x8cdf
+    field public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076; // 0x851c
+    field public static final int GL_MAX_RENDERBUFFER_SIZE_OES = 34024; // 0x84e8
+    field public static final int GL_MIRRORED_REPEAT = 33648; // 0x8370
+    field public static final int GL_NORMAL_MAP = 34065; // 0x8511
+    field public static final int GL_REFLECTION_MAP = 34066; // 0x8512
+    field public static final int GL_RENDERBUFFER_ALPHA_SIZE_OES = 36179; // 0x8d53
+    field public static final int GL_RENDERBUFFER_BINDING_OES = 36007; // 0x8ca7
+    field public static final int GL_RENDERBUFFER_BLUE_SIZE_OES = 36178; // 0x8d52
+    field public static final int GL_RENDERBUFFER_DEPTH_SIZE_OES = 36180; // 0x8d54
+    field public static final int GL_RENDERBUFFER_GREEN_SIZE_OES = 36177; // 0x8d51
+    field public static final int GL_RENDERBUFFER_HEIGHT_OES = 36163; // 0x8d43
+    field public static final int GL_RENDERBUFFER_INTERNAL_FORMAT_OES = 36164; // 0x8d44
+    field public static final int GL_RENDERBUFFER_OES = 36161; // 0x8d41
+    field public static final int GL_RENDERBUFFER_RED_SIZE_OES = 36176; // 0x8d50
+    field public static final int GL_RENDERBUFFER_STENCIL_SIZE_OES = 36181; // 0x8d55
+    field public static final int GL_RENDERBUFFER_WIDTH_OES = 36162; // 0x8d42
+    field public static final int GL_RGB565_OES = 36194; // 0x8d62
+    field public static final int GL_RGB5_A1 = 32855; // 0x8057
+    field public static final int GL_RGB8 = 32849; // 0x8051
+    field public static final int GL_RGBA4 = 32854; // 0x8056
+    field public static final int GL_RGBA8 = 32856; // 0x8058
+    field public static final int GL_STENCIL_ATTACHMENT_OES = 36128; // 0x8d20
+    field public static final int GL_STENCIL_INDEX = 6401; // 0x1901
+    field public static final int GL_STENCIL_INDEX1_OES = 36166; // 0x8d46
+    field public static final int GL_STENCIL_INDEX4_OES = 36167; // 0x8d47
+    field public static final int GL_STENCIL_INDEX8_OES = 36168; // 0x8d48
+    field public static final int GL_STR = -1; // 0xffffffff
+    field public static final int GL_TEXTURE_BINDING_CUBE_MAP = 34068; // 0x8514
+    field public static final int GL_TEXTURE_CUBE_MAP = 34067; // 0x8513
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070; // 0x8516
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072; // 0x8518
+    field public static final int GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074; // 0x851a
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069; // 0x8515
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071; // 0x8517
+    field public static final int GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073; // 0x8519
+    field public static final int GL_TEXTURE_GEN_MODE = 9472; // 0x2500
+    field public static final int GL_TEXTURE_GEN_STR = 36192; // 0x8d60
+  }
+
+}
+
+package javax.net {
+
+  public abstract class ServerSocketFactory {
+    ctor protected ServerSocketFactory();
+    method public java.net.ServerSocket createServerSocket() throws java.io.IOException;
+    method public abstract java.net.ServerSocket createServerSocket(int) throws java.io.IOException;
+    method public abstract java.net.ServerSocket createServerSocket(int, int) throws java.io.IOException;
+    method public abstract java.net.ServerSocket createServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
+    method public static javax.net.ServerSocketFactory getDefault();
+  }
+
+  public abstract class SocketFactory {
+    ctor protected SocketFactory();
+    method public java.net.Socket createSocket() throws java.io.IOException;
+    method public abstract java.net.Socket createSocket(String, int) throws java.io.IOException, java.net.UnknownHostException;
+    method public abstract java.net.Socket createSocket(String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException;
+    method public abstract java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException;
+    method public abstract java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    method public static javax.net.SocketFactory getDefault();
+  }
+
+}
+
+package javax.net.ssl {
+
+  public class CertPathTrustManagerParameters implements javax.net.ssl.ManagerFactoryParameters {
+    ctor public CertPathTrustManagerParameters(java.security.cert.CertPathParameters);
+    method public java.security.cert.CertPathParameters getParameters();
+  }
+
+  public abstract class ExtendedSSLSession implements javax.net.ssl.SSLSession {
+    ctor public ExtendedSSLSession();
+    method public abstract String[] getLocalSupportedSignatureAlgorithms();
+    method public abstract String[] getPeerSupportedSignatureAlgorithms();
+    method public java.util.List<javax.net.ssl.SNIServerName> getRequestedServerNames();
+  }
+
+  public class HandshakeCompletedEvent extends java.util.EventObject {
+    ctor public HandshakeCompletedEvent(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession);
+    method public String getCipherSuite();
+    method public java.security.cert.Certificate[] getLocalCertificates();
+    method public java.security.Principal getLocalPrincipal();
+    method public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public java.security.cert.Certificate[] getPeerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public javax.net.ssl.SSLSession getSession();
+    method public javax.net.ssl.SSLSocket getSocket();
+  }
+
+  public interface HandshakeCompletedListener extends java.util.EventListener {
+    method public void handshakeCompleted(javax.net.ssl.HandshakeCompletedEvent);
+  }
+
+  public interface HostnameVerifier {
+    method public boolean verify(String, javax.net.ssl.SSLSession);
+  }
+
+  public abstract class HttpsURLConnection extends java.net.HttpURLConnection {
+    ctor protected HttpsURLConnection(java.net.URL);
+    method public abstract String getCipherSuite();
+    method public static javax.net.ssl.HostnameVerifier getDefaultHostnameVerifier();
+    method public static javax.net.ssl.SSLSocketFactory getDefaultSSLSocketFactory();
+    method public javax.net.ssl.HostnameVerifier getHostnameVerifier();
+    method public abstract java.security.cert.Certificate[] getLocalCertificates();
+    method public java.security.Principal getLocalPrincipal();
+    method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public javax.net.ssl.SSLSocketFactory getSSLSocketFactory();
+    method public abstract java.security.cert.Certificate[] getServerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public static void setDefaultHostnameVerifier(javax.net.ssl.HostnameVerifier);
+    method public static void setDefaultSSLSocketFactory(javax.net.ssl.SSLSocketFactory);
+    method public void setHostnameVerifier(javax.net.ssl.HostnameVerifier);
+    method public void setSSLSocketFactory(javax.net.ssl.SSLSocketFactory);
+    field protected javax.net.ssl.HostnameVerifier hostnameVerifier;
+  }
+
+  public interface KeyManager {
+  }
+
+  public class KeyManagerFactory {
+    ctor protected KeyManagerFactory(javax.net.ssl.KeyManagerFactorySpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public static final String getDefaultAlgorithm();
+    method public static final javax.net.ssl.KeyManagerFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.net.ssl.KeyManagerFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.net.ssl.KeyManagerFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final javax.net.ssl.KeyManager[] getKeyManagers();
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.KeyStore, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method public final void init(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class KeyManagerFactorySpi {
+    ctor public KeyManagerFactorySpi();
+    method protected abstract javax.net.ssl.KeyManager[] engineGetKeyManagers();
+    method protected abstract void engineInit(java.security.KeyStore, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method protected abstract void engineInit(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class KeyStoreBuilderParameters implements javax.net.ssl.ManagerFactoryParameters {
+    ctor public KeyStoreBuilderParameters(java.security.KeyStore.Builder);
+    ctor public KeyStoreBuilderParameters(java.util.List<java.security.KeyStore.Builder>);
+    method public java.util.List<java.security.KeyStore.Builder> getParameters();
+  }
+
+  public interface ManagerFactoryParameters {
+  }
+
+  public final class SNIHostName extends javax.net.ssl.SNIServerName {
+    ctor public SNIHostName(String);
+    ctor public SNIHostName(byte[]);
+    method public static javax.net.ssl.SNIMatcher createSNIMatcher(String);
+    method public String getAsciiName();
+  }
+
+  public abstract class SNIMatcher {
+    ctor protected SNIMatcher(int);
+    method public final int getType();
+    method public abstract boolean matches(javax.net.ssl.SNIServerName);
+  }
+
+  public abstract class SNIServerName {
+    ctor protected SNIServerName(int, byte[]);
+    method public final byte[] getEncoded();
+    method public final int getType();
+  }
+
+  public class SSLContext {
+    ctor protected SSLContext(javax.net.ssl.SSLContextSpi, java.security.Provider, String);
+    method public final javax.net.ssl.SSLEngine createSSLEngine();
+    method public final javax.net.ssl.SSLEngine createSSLEngine(String, int);
+    method public final javax.net.ssl.SSLSessionContext getClientSessionContext();
+    method public static javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException;
+    method public final javax.net.ssl.SSLParameters getDefaultSSLParameters();
+    method public static javax.net.ssl.SSLContext getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static javax.net.ssl.SSLContext getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static javax.net.ssl.SSLContext getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final String getProtocol();
+    method public final java.security.Provider getProvider();
+    method public final javax.net.ssl.SSLSessionContext getServerSessionContext();
+    method public final javax.net.ssl.SSLServerSocketFactory getServerSocketFactory();
+    method public final javax.net.ssl.SSLSocketFactory getSocketFactory();
+    method public final javax.net.ssl.SSLParameters getSupportedSSLParameters();
+    method public final void init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException;
+    method public static void setDefault(javax.net.ssl.SSLContext);
+  }
+
+  public abstract class SSLContextSpi {
+    ctor public SSLContextSpi();
+    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine();
+    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(String, int);
+    method protected abstract javax.net.ssl.SSLSessionContext engineGetClientSessionContext();
+    method protected javax.net.ssl.SSLParameters engineGetDefaultSSLParameters();
+    method protected abstract javax.net.ssl.SSLSessionContext engineGetServerSessionContext();
+    method protected abstract javax.net.ssl.SSLServerSocketFactory engineGetServerSocketFactory();
+    method protected abstract javax.net.ssl.SSLSocketFactory engineGetSocketFactory();
+    method protected javax.net.ssl.SSLParameters engineGetSupportedSSLParameters();
+    method protected abstract void engineInit(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException;
+  }
+
+  public abstract class SSLEngine {
+    ctor protected SSLEngine();
+    ctor protected SSLEngine(String, int);
+    method public abstract void beginHandshake() throws javax.net.ssl.SSLException;
+    method public abstract void closeInbound() throws javax.net.ssl.SSLException;
+    method public abstract void closeOutbound();
+    method public String getApplicationProtocol();
+    method public abstract Runnable getDelegatedTask();
+    method public abstract boolean getEnableSessionCreation();
+    method public abstract String[] getEnabledCipherSuites();
+    method public abstract String[] getEnabledProtocols();
+    method public String getHandshakeApplicationProtocol();
+    method public java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> getHandshakeApplicationProtocolSelector();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
+    method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus();
+    method public abstract boolean getNeedClientAuth();
+    method public String getPeerHost();
+    method public int getPeerPort();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
+    method public abstract javax.net.ssl.SSLSession getSession();
+    method public abstract String[] getSupportedCipherSuites();
+    method public abstract String[] getSupportedProtocols();
+    method public abstract boolean getUseClientMode();
+    method public abstract boolean getWantClientAuth();
+    method public abstract boolean isInboundDone();
+    method public abstract boolean isOutboundDone();
+    method public abstract void setEnableSessionCreation(boolean);
+    method public abstract void setEnabledCipherSuites(String[]);
+    method public abstract void setEnabledProtocols(String[]);
+    method public void setHandshakeApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String>);
+    method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
+    method public abstract void setUseClientMode(boolean);
+    method public abstract void setWantClientAuth(boolean);
+    method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[]) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+  }
+
+  public class SSLEngineResult {
+    ctor public SSLEngineResult(javax.net.ssl.SSLEngineResult.Status, javax.net.ssl.SSLEngineResult.HandshakeStatus, int, int);
+    method public final int bytesConsumed();
+    method public final int bytesProduced();
+    method public final javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus();
+    method public final javax.net.ssl.SSLEngineResult.Status getStatus();
+  }
+
+  public enum SSLEngineResult.HandshakeStatus {
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus FINISHED;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_TASK;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_UNWRAP;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_WRAP;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NOT_HANDSHAKING;
+  }
+
+  public enum SSLEngineResult.Status {
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_OVERFLOW;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_UNDERFLOW;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status CLOSED;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status OK;
+  }
+
+  public class SSLException extends java.io.IOException {
+    ctor public SSLException(String);
+    ctor public SSLException(String, Throwable);
+    ctor public SSLException(Throwable);
+  }
+
+  public class SSLHandshakeException extends javax.net.ssl.SSLException {
+    ctor public SSLHandshakeException(String);
+  }
+
+  public class SSLKeyException extends javax.net.ssl.SSLException {
+    ctor public SSLKeyException(String);
+  }
+
+  public class SSLParameters {
+    ctor public SSLParameters();
+    ctor public SSLParameters(String[]);
+    ctor public SSLParameters(String[], String[]);
+    method public java.security.AlgorithmConstraints getAlgorithmConstraints();
+    method public String[] getApplicationProtocols();
+    method public String[] getCipherSuites();
+    method public String getEndpointIdentificationAlgorithm();
+    method public boolean getNeedClientAuth();
+    method public String[] getProtocols();
+    method public final java.util.Collection<javax.net.ssl.SNIMatcher> getSNIMatchers();
+    method public final java.util.List<javax.net.ssl.SNIServerName> getServerNames();
+    method public final boolean getUseCipherSuitesOrder();
+    method public boolean getWantClientAuth();
+    method public void setAlgorithmConstraints(java.security.AlgorithmConstraints);
+    method public void setApplicationProtocols(String[]);
+    method public void setCipherSuites(String[]);
+    method public void setEndpointIdentificationAlgorithm(String);
+    method public void setNeedClientAuth(boolean);
+    method public void setProtocols(String[]);
+    method public final void setSNIMatchers(java.util.Collection<javax.net.ssl.SNIMatcher>);
+    method public final void setServerNames(java.util.List<javax.net.ssl.SNIServerName>);
+    method public final void setUseCipherSuitesOrder(boolean);
+    method public void setWantClientAuth(boolean);
+  }
+
+  public class SSLPeerUnverifiedException extends javax.net.ssl.SSLException {
+    ctor public SSLPeerUnverifiedException(String);
+  }
+
+  public final class SSLPermission extends java.security.BasicPermission {
+    ctor public SSLPermission(String);
+    ctor public SSLPermission(String, String);
+  }
+
+  public class SSLProtocolException extends javax.net.ssl.SSLException {
+    ctor public SSLProtocolException(String);
+  }
+
+  public abstract class SSLServerSocket extends java.net.ServerSocket {
+    ctor protected SSLServerSocket() throws java.io.IOException;
+    ctor protected SSLServerSocket(int) throws java.io.IOException;
+    ctor protected SSLServerSocket(int, int) throws java.io.IOException;
+    ctor protected SSLServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
+    method public abstract boolean getEnableSessionCreation();
+    method public abstract String[] getEnabledCipherSuites();
+    method public abstract String[] getEnabledProtocols();
+    method public abstract boolean getNeedClientAuth();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
+    method public abstract String[] getSupportedCipherSuites();
+    method public abstract String[] getSupportedProtocols();
+    method public abstract boolean getUseClientMode();
+    method public abstract boolean getWantClientAuth();
+    method public abstract void setEnableSessionCreation(boolean);
+    method public abstract void setEnabledCipherSuites(String[]);
+    method public abstract void setEnabledProtocols(String[]);
+    method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
+    method public abstract void setUseClientMode(boolean);
+    method public abstract void setWantClientAuth(boolean);
+  }
+
+  public abstract class SSLServerSocketFactory extends javax.net.ServerSocketFactory {
+    ctor protected SSLServerSocketFactory();
+    method public static javax.net.ServerSocketFactory getDefault();
+    method public abstract String[] getDefaultCipherSuites();
+    method public abstract String[] getSupportedCipherSuites();
+  }
+
+  public interface SSLSession {
+    method public int getApplicationBufferSize();
+    method public String getCipherSuite();
+    method public long getCreationTime();
+    method public byte[] getId();
+    method public long getLastAccessedTime();
+    method public java.security.cert.Certificate[] getLocalCertificates();
+    method public java.security.Principal getLocalPrincipal();
+    method public int getPacketBufferSize();
+    method public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public java.security.cert.Certificate[] getPeerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public String getPeerHost();
+    method public int getPeerPort();
+    method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public String getProtocol();
+    method public javax.net.ssl.SSLSessionContext getSessionContext();
+    method public Object getValue(String);
+    method public String[] getValueNames();
+    method public void invalidate();
+    method public boolean isValid();
+    method public void putValue(String, Object);
+    method public void removeValue(String);
+  }
+
+  public class SSLSessionBindingEvent extends java.util.EventObject {
+    ctor public SSLSessionBindingEvent(javax.net.ssl.SSLSession, String);
+    method public String getName();
+    method public javax.net.ssl.SSLSession getSession();
+  }
+
+  public interface SSLSessionBindingListener extends java.util.EventListener {
+    method public void valueBound(javax.net.ssl.SSLSessionBindingEvent);
+    method public void valueUnbound(javax.net.ssl.SSLSessionBindingEvent);
+  }
+
+  public interface SSLSessionContext {
+    method public java.util.Enumeration<byte[]> getIds();
+    method public javax.net.ssl.SSLSession getSession(byte[]);
+    method public int getSessionCacheSize();
+    method public int getSessionTimeout();
+    method public void setSessionCacheSize(int) throws java.lang.IllegalArgumentException;
+    method public void setSessionTimeout(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public abstract class SSLSocket extends java.net.Socket {
+    ctor protected SSLSocket();
+    ctor protected SSLSocket(String, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor protected SSLSocket(java.net.InetAddress, int) throws java.io.IOException;
+    ctor protected SSLSocket(String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor protected SSLSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    method public abstract void addHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
+    method public String getApplicationProtocol();
+    method public abstract boolean getEnableSessionCreation();
+    method public abstract String[] getEnabledCipherSuites();
+    method public abstract String[] getEnabledProtocols();
+    method public String getHandshakeApplicationProtocol();
+    method public java.util.function.BiFunction<javax.net.ssl.SSLSocket,java.util.List<java.lang.String>,java.lang.String> getHandshakeApplicationProtocolSelector();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
+    method public abstract boolean getNeedClientAuth();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
+    method public abstract javax.net.ssl.SSLSession getSession();
+    method public abstract String[] getSupportedCipherSuites();
+    method public abstract String[] getSupportedProtocols();
+    method public abstract boolean getUseClientMode();
+    method public abstract boolean getWantClientAuth();
+    method public abstract void removeHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
+    method public abstract void setEnableSessionCreation(boolean);
+    method public abstract void setEnabledCipherSuites(String[]);
+    method public abstract void setEnabledProtocols(String[]);
+    method public void setHandshakeApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLSocket,java.util.List<java.lang.String>,java.lang.String>);
+    method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
+    method public abstract void setUseClientMode(boolean);
+    method public abstract void setWantClientAuth(boolean);
+    method public abstract void startHandshake() throws java.io.IOException;
+  }
+
+  public abstract class SSLSocketFactory extends javax.net.SocketFactory {
+    ctor public SSLSocketFactory();
+    method public abstract java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException;
+    method public static javax.net.SocketFactory getDefault();
+    method public abstract String[] getDefaultCipherSuites();
+    method public abstract String[] getSupportedCipherSuites();
+  }
+
+  public final class StandardConstants {
+    field public static final int SNI_HOST_NAME = 0; // 0x0
+  }
+
+  public interface TrustManager {
+  }
+
+  public class TrustManagerFactory {
+    ctor protected TrustManagerFactory(javax.net.ssl.TrustManagerFactorySpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public static final String getDefaultAlgorithm();
+    method public static final javax.net.ssl.TrustManagerFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.net.ssl.TrustManagerFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.net.ssl.TrustManagerFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final javax.net.ssl.TrustManager[] getTrustManagers();
+    method public final void init(java.security.KeyStore) throws java.security.KeyStoreException;
+    method public final void init(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class TrustManagerFactorySpi {
+    ctor public TrustManagerFactorySpi();
+    method protected abstract javax.net.ssl.TrustManager[] engineGetTrustManagers();
+    method protected abstract void engineInit(java.security.KeyStore) throws java.security.KeyStoreException;
+    method protected abstract void engineInit(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class X509ExtendedKeyManager implements javax.net.ssl.X509KeyManager {
+    ctor protected X509ExtendedKeyManager();
+    method public String chooseEngineClientAlias(String[], java.security.Principal[], javax.net.ssl.SSLEngine);
+    method public String chooseEngineServerAlias(String, java.security.Principal[], javax.net.ssl.SSLEngine);
+  }
+
+  public abstract class X509ExtendedTrustManager implements javax.net.ssl.X509TrustManager {
+    ctor public X509ExtendedTrustManager();
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+  }
+
+  public interface X509KeyManager extends javax.net.ssl.KeyManager {
+    method public String chooseClientAlias(String[], java.security.Principal[], java.net.Socket);
+    method public String chooseServerAlias(String, java.security.Principal[], java.net.Socket);
+    method public java.security.cert.X509Certificate[] getCertificateChain(String);
+    method public String[] getClientAliases(String, java.security.Principal[]);
+    method public java.security.PrivateKey getPrivateKey(String);
+    method public String[] getServerAliases(String, java.security.Principal[]);
+  }
+
+  public interface X509TrustManager extends javax.net.ssl.TrustManager {
+    method public void checkClientTrusted(java.security.cert.X509Certificate[], String) throws java.security.cert.CertificateException;
+    method public void checkServerTrusted(java.security.cert.X509Certificate[], String) throws java.security.cert.CertificateException;
+    method public java.security.cert.X509Certificate[] getAcceptedIssuers();
+  }
+
+}
+
+package javax.security.auth {
+
+  public final class AuthPermission extends java.security.BasicPermission {
+    ctor public AuthPermission(String);
+    ctor public AuthPermission(String, String);
+  }
+
+  public class DestroyFailedException extends java.lang.Exception {
+    ctor public DestroyFailedException();
+    ctor public DestroyFailedException(String);
+  }
+
+  public interface Destroyable {
+    method public default void destroy() throws javax.security.auth.DestroyFailedException;
+    method public default boolean isDestroyed();
+  }
+
+  public final class PrivateCredentialPermission extends java.security.Permission {
+    ctor public PrivateCredentialPermission(String, String);
+    method public String getActions();
+    method public String getCredentialClass();
+    method public String[][] getPrincipals();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public final class Subject implements java.io.Serializable {
+    ctor public Subject();
+    ctor public Subject(boolean, java.util.Set<? extends java.security.Principal>, java.util.Set<?>, java.util.Set<?>);
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public java.util.Set<java.security.Principal> getPrincipals();
+    method public <T extends java.security.Principal> java.util.Set<T> getPrincipals(Class<T>);
+    method public java.util.Set<java.lang.Object> getPrivateCredentials();
+    method public <T> java.util.Set<T> getPrivateCredentials(Class<T>);
+    method public java.util.Set<java.lang.Object> getPublicCredentials();
+    method public <T> java.util.Set<T> getPublicCredentials(Class<T>);
+    method public static javax.security.auth.Subject getSubject(java.security.AccessControlContext);
+    method public boolean isReadOnly();
+    method public void setReadOnly();
+  }
+
+  public class SubjectDomainCombiner implements java.security.DomainCombiner {
+    ctor public SubjectDomainCombiner(javax.security.auth.Subject);
+    method public java.security.ProtectionDomain[] combine(java.security.ProtectionDomain[], java.security.ProtectionDomain[]);
+    method public javax.security.auth.Subject getSubject();
+  }
+
+}
+
+package javax.security.auth.callback {
+
+  public interface Callback {
+  }
+
+  public interface CallbackHandler {
+    method public void handle(javax.security.auth.callback.Callback[]) throws java.io.IOException, javax.security.auth.callback.UnsupportedCallbackException;
+  }
+
+  public class PasswordCallback implements javax.security.auth.callback.Callback java.io.Serializable {
+    ctor public PasswordCallback(String, boolean);
+    method public void clearPassword();
+    method public char[] getPassword();
+    method public String getPrompt();
+    method public boolean isEchoOn();
+    method public void setPassword(char[]);
+  }
+
+  public class UnsupportedCallbackException extends java.lang.Exception {
+    ctor public UnsupportedCallbackException(javax.security.auth.callback.Callback);
+    ctor public UnsupportedCallbackException(javax.security.auth.callback.Callback, String);
+    method public javax.security.auth.callback.Callback getCallback();
+  }
+
+}
+
+package javax.security.auth.login {
+
+  public class LoginException extends java.security.GeneralSecurityException {
+    ctor public LoginException();
+    ctor public LoginException(String);
+  }
+
+}
+
+package javax.security.auth.x500 {
+
+  public final class X500Principal implements java.security.Principal java.io.Serializable {
+    ctor public X500Principal(String);
+    ctor public X500Principal(String, java.util.Map<java.lang.String,java.lang.String>);
+    ctor public X500Principal(byte[]);
+    ctor public X500Principal(java.io.InputStream);
+    method public byte[] getEncoded();
+    method public String getName();
+    method public String getName(String);
+    method public String getName(String, java.util.Map<java.lang.String,java.lang.String>);
+    field public static final String CANONICAL = "CANONICAL";
+    field public static final String RFC1779 = "RFC1779";
+    field public static final String RFC2253 = "RFC2253";
+  }
+
+}
+
+package javax.security.cert {
+
+  public abstract class Certificate {
+    ctor public Certificate();
+    method public abstract byte[] getEncoded() throws javax.security.cert.CertificateEncodingException;
+    method public abstract java.security.PublicKey getPublicKey();
+    method public abstract String toString();
+    method public abstract void verify(java.security.PublicKey) throws javax.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public abstract void verify(java.security.PublicKey, String) throws javax.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+  }
+
+  public class CertificateEncodingException extends javax.security.cert.CertificateException {
+    ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(String);
+  }
+
+  public class CertificateException extends java.lang.Exception {
+    ctor public CertificateException();
+    ctor public CertificateException(String);
+  }
+
+  public class CertificateExpiredException extends javax.security.cert.CertificateException {
+    ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(String);
+  }
+
+  public class CertificateNotYetValidException extends javax.security.cert.CertificateException {
+    ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(String);
+  }
+
+  public class CertificateParsingException extends javax.security.cert.CertificateException {
+    ctor public CertificateParsingException();
+    ctor public CertificateParsingException(String);
+  }
+
+  public abstract class X509Certificate extends javax.security.cert.Certificate {
+    ctor public X509Certificate();
+    method public abstract void checkValidity() throws javax.security.cert.CertificateExpiredException, javax.security.cert.CertificateNotYetValidException;
+    method public abstract void checkValidity(java.util.Date) throws javax.security.cert.CertificateExpiredException, javax.security.cert.CertificateNotYetValidException;
+    method public static final javax.security.cert.X509Certificate getInstance(java.io.InputStream) throws javax.security.cert.CertificateException;
+    method public static final javax.security.cert.X509Certificate getInstance(byte[]) throws javax.security.cert.CertificateException;
+    method public abstract java.security.Principal getIssuerDN();
+    method public abstract java.util.Date getNotAfter();
+    method public abstract java.util.Date getNotBefore();
+    method public abstract java.math.BigInteger getSerialNumber();
+    method public abstract String getSigAlgName();
+    method public abstract String getSigAlgOID();
+    method public abstract byte[] getSigAlgParams();
+    method public abstract java.security.Principal getSubjectDN();
+    method public abstract int getVersion();
+  }
+
+}
+
+package javax.sql {
+
+  public interface CommonDataSource {
+    method public java.io.PrintWriter getLogWriter() throws java.sql.SQLException;
+    method public int getLoginTimeout() throws java.sql.SQLException;
+    method public java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException;
+    method public void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException;
+    method public void setLoginTimeout(int) throws java.sql.SQLException;
+  }
+
+  public class ConnectionEvent extends java.util.EventObject {
+    ctor public ConnectionEvent(javax.sql.PooledConnection);
+    ctor public ConnectionEvent(javax.sql.PooledConnection, java.sql.SQLException);
+    method public java.sql.SQLException getSQLException();
+  }
+
+  public interface ConnectionEventListener extends java.util.EventListener {
+    method public void connectionClosed(javax.sql.ConnectionEvent);
+    method public void connectionErrorOccurred(javax.sql.ConnectionEvent);
+  }
+
+  public interface ConnectionPoolDataSource extends javax.sql.CommonDataSource {
+    method public javax.sql.PooledConnection getPooledConnection() throws java.sql.SQLException;
+    method public javax.sql.PooledConnection getPooledConnection(String, String) throws java.sql.SQLException;
+  }
+
+  public interface DataSource extends javax.sql.CommonDataSource java.sql.Wrapper {
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public java.sql.Connection getConnection(String, String) throws java.sql.SQLException;
+  }
+
+  public interface PooledConnection {
+    method public void addConnectionEventListener(javax.sql.ConnectionEventListener);
+    method public void addStatementEventListener(javax.sql.StatementEventListener);
+    method public void close() throws java.sql.SQLException;
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public void removeConnectionEventListener(javax.sql.ConnectionEventListener);
+    method public void removeStatementEventListener(javax.sql.StatementEventListener);
+  }
+
+  public interface RowSet extends java.sql.ResultSet {
+    method public void addRowSetListener(javax.sql.RowSetListener);
+    method public void clearParameters() throws java.sql.SQLException;
+    method public void execute() throws java.sql.SQLException;
+    method public String getCommand();
+    method public String getDataSourceName();
+    method public boolean getEscapeProcessing() throws java.sql.SQLException;
+    method public int getMaxFieldSize() throws java.sql.SQLException;
+    method public int getMaxRows() throws java.sql.SQLException;
+    method public String getPassword();
+    method public int getQueryTimeout() throws java.sql.SQLException;
+    method public int getTransactionIsolation();
+    method public java.util.Map<java.lang.String,java.lang.Class<?>> getTypeMap() throws java.sql.SQLException;
+    method public String getUrl() throws java.sql.SQLException;
+    method public String getUsername();
+    method public boolean isReadOnly();
+    method public void removeRowSetListener(javax.sql.RowSetListener);
+    method public void setArray(int, java.sql.Array) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBigDecimal(String, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(int, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(String, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBoolean(int, boolean) throws java.sql.SQLException;
+    method public void setBoolean(String, boolean) throws java.sql.SQLException;
+    method public void setByte(int, byte) throws java.sql.SQLException;
+    method public void setByte(String, byte) throws java.sql.SQLException;
+    method public void setBytes(int, byte[]) throws java.sql.SQLException;
+    method public void setBytes(String, byte[]) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(int, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(String, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setCommand(String) throws java.sql.SQLException;
+    method public void setConcurrency(int) throws java.sql.SQLException;
+    method public void setDataSourceName(String) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDouble(int, double) throws java.sql.SQLException;
+    method public void setDouble(String, double) throws java.sql.SQLException;
+    method public void setEscapeProcessing(boolean) throws java.sql.SQLException;
+    method public void setFloat(int, float) throws java.sql.SQLException;
+    method public void setFloat(String, float) throws java.sql.SQLException;
+    method public void setInt(int, int) throws java.sql.SQLException;
+    method public void setInt(String, int) throws java.sql.SQLException;
+    method public void setLong(int, long) throws java.sql.SQLException;
+    method public void setLong(String, long) throws java.sql.SQLException;
+    method public void setMaxFieldSize(int) throws java.sql.SQLException;
+    method public void setMaxRows(int) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(String, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(int, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNString(int, String) throws java.sql.SQLException;
+    method public void setNString(String, String) throws java.sql.SQLException;
+    method public void setNull(int, int) throws java.sql.SQLException;
+    method public void setNull(String, int) throws java.sql.SQLException;
+    method public void setNull(int, int, String) throws java.sql.SQLException;
+    method public void setNull(String, int, String) throws java.sql.SQLException;
+    method public void setObject(int, Object, int, int) throws java.sql.SQLException;
+    method public void setObject(String, Object, int, int) throws java.sql.SQLException;
+    method public void setObject(int, Object, int) throws java.sql.SQLException;
+    method public void setObject(String, Object, int) throws java.sql.SQLException;
+    method public void setObject(String, Object) throws java.sql.SQLException;
+    method public void setObject(int, Object) throws java.sql.SQLException;
+    method public void setPassword(String) throws java.sql.SQLException;
+    method public void setQueryTimeout(int) throws java.sql.SQLException;
+    method public void setReadOnly(boolean) throws java.sql.SQLException;
+    method public void setRef(int, java.sql.Ref) throws java.sql.SQLException;
+    method public void setRowId(int, java.sql.RowId) throws java.sql.SQLException;
+    method public void setRowId(String, java.sql.RowId) throws java.sql.SQLException;
+    method public void setSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setSQLXML(String, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setShort(int, short) throws java.sql.SQLException;
+    method public void setShort(String, short) throws java.sql.SQLException;
+    method public void setString(int, String) throws java.sql.SQLException;
+    method public void setString(String, String) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTransactionIsolation(int) throws java.sql.SQLException;
+    method public void setType(int) throws java.sql.SQLException;
+    method public void setTypeMap(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public void setURL(int, java.net.URL) throws java.sql.SQLException;
+    method public void setUrl(String) throws java.sql.SQLException;
+    method public void setUsername(String) throws java.sql.SQLException;
+  }
+
+  public class RowSetEvent extends java.util.EventObject {
+    ctor public RowSetEvent(javax.sql.RowSet);
+  }
+
+  public interface RowSetInternal {
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public java.sql.ResultSet getOriginal() throws java.sql.SQLException;
+    method public java.sql.ResultSet getOriginalRow() throws java.sql.SQLException;
+    method public Object[] getParams() throws java.sql.SQLException;
+    method public void setMetaData(javax.sql.RowSetMetaData) throws java.sql.SQLException;
+  }
+
+  public interface RowSetListener extends java.util.EventListener {
+    method public void cursorMoved(javax.sql.RowSetEvent);
+    method public void rowChanged(javax.sql.RowSetEvent);
+    method public void rowSetChanged(javax.sql.RowSetEvent);
+  }
+
+  public interface RowSetMetaData extends java.sql.ResultSetMetaData {
+    method public void setAutoIncrement(int, boolean) throws java.sql.SQLException;
+    method public void setCaseSensitive(int, boolean) throws java.sql.SQLException;
+    method public void setCatalogName(int, String) throws java.sql.SQLException;
+    method public void setColumnCount(int) throws java.sql.SQLException;
+    method public void setColumnDisplaySize(int, int) throws java.sql.SQLException;
+    method public void setColumnLabel(int, String) throws java.sql.SQLException;
+    method public void setColumnName(int, String) throws java.sql.SQLException;
+    method public void setColumnType(int, int) throws java.sql.SQLException;
+    method public void setColumnTypeName(int, String) throws java.sql.SQLException;
+    method public void setCurrency(int, boolean) throws java.sql.SQLException;
+    method public void setNullable(int, int) throws java.sql.SQLException;
+    method public void setPrecision(int, int) throws java.sql.SQLException;
+    method public void setScale(int, int) throws java.sql.SQLException;
+    method public void setSchemaName(int, String) throws java.sql.SQLException;
+    method public void setSearchable(int, boolean) throws java.sql.SQLException;
+    method public void setSigned(int, boolean) throws java.sql.SQLException;
+    method public void setTableName(int, String) throws java.sql.SQLException;
+  }
+
+  public interface RowSetReader {
+    method public void readData(javax.sql.RowSetInternal) throws java.sql.SQLException;
+  }
+
+  public interface RowSetWriter {
+    method public boolean writeData(javax.sql.RowSetInternal) throws java.sql.SQLException;
+  }
+
+  public class StatementEvent extends java.util.EventObject {
+    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement);
+    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException);
+    method public java.sql.SQLException getSQLException();
+    method public java.sql.PreparedStatement getStatement();
+  }
+
+  public interface StatementEventListener extends java.util.EventListener {
+    method public void statementClosed(javax.sql.StatementEvent);
+    method public void statementErrorOccurred(javax.sql.StatementEvent);
+  }
+
+}
+
+package javax.xml {
+
+  public final class XMLConstants {
+    field public static final String DEFAULT_NS_PREFIX = "";
+    field public static final String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing";
+    field public static final String NULL_NS_URI = "";
+    field public static final String RELAXNG_NS_URI = "http://relaxng.org/ns/structure/1.0";
+    field public static final String W3C_XML_SCHEMA_INSTANCE_NS_URI = "http://www.w3.org/2001/XMLSchema-instance";
+    field public static final String W3C_XML_SCHEMA_NS_URI = "http://www.w3.org/2001/XMLSchema";
+    field public static final String W3C_XPATH_DATATYPE_NS_URI = "http://www.w3.org/2003/11/xpath-datatypes";
+    field public static final String XMLNS_ATTRIBUTE = "xmlns";
+    field public static final String XMLNS_ATTRIBUTE_NS_URI = "http://www.w3.org/2000/xmlns/";
+    field public static final String XML_DTD_NS_URI = "http://www.w3.org/TR/REC-xml";
+    field public static final String XML_NS_PREFIX = "xml";
+    field public static final String XML_NS_URI = "http://www.w3.org/XML/1998/namespace";
+  }
+
+}
+
+package javax.xml.datatype {
+
+  public class DatatypeConfigurationException extends java.lang.Exception {
+    ctor public DatatypeConfigurationException();
+    ctor public DatatypeConfigurationException(String);
+    ctor public DatatypeConfigurationException(String, Throwable);
+    ctor public DatatypeConfigurationException(Throwable);
+  }
+
+  public final class DatatypeConstants {
+    field public static final int APRIL = 4; // 0x4
+    field public static final int AUGUST = 8; // 0x8
+    field public static final javax.xml.namespace.QName DATE;
+    field public static final javax.xml.namespace.QName DATETIME;
+    field public static final javax.xml.datatype.DatatypeConstants.Field DAYS;
+    field public static final int DECEMBER = 12; // 0xc
+    field public static final javax.xml.namespace.QName DURATION;
+    field public static final javax.xml.namespace.QName DURATION_DAYTIME;
+    field public static final javax.xml.namespace.QName DURATION_YEARMONTH;
+    field public static final int EQUAL = 0; // 0x0
+    field public static final int FEBRUARY = 2; // 0x2
+    field public static final int FIELD_UNDEFINED = -2147483648; // 0x80000000
+    field public static final javax.xml.namespace.QName GDAY;
+    field public static final javax.xml.namespace.QName GMONTH;
+    field public static final javax.xml.namespace.QName GMONTHDAY;
+    field public static final int GREATER = 1; // 0x1
+    field public static final javax.xml.namespace.QName GYEAR;
+    field public static final javax.xml.namespace.QName GYEARMONTH;
+    field public static final javax.xml.datatype.DatatypeConstants.Field HOURS;
+    field public static final int INDETERMINATE = 2; // 0x2
+    field public static final int JANUARY = 1; // 0x1
+    field public static final int JULY = 7; // 0x7
+    field public static final int JUNE = 6; // 0x6
+    field public static final int LESSER = -1; // 0xffffffff
+    field public static final int MARCH = 3; // 0x3
+    field public static final int MAX_TIMEZONE_OFFSET = -840; // 0xfffffcb8
+    field public static final int MAY = 5; // 0x5
+    field public static final javax.xml.datatype.DatatypeConstants.Field MINUTES;
+    field public static final int MIN_TIMEZONE_OFFSET = 840; // 0x348
+    field public static final javax.xml.datatype.DatatypeConstants.Field MONTHS;
+    field public static final int NOVEMBER = 11; // 0xb
+    field public static final int OCTOBER = 10; // 0xa
+    field public static final javax.xml.datatype.DatatypeConstants.Field SECONDS;
+    field public static final int SEPTEMBER = 9; // 0x9
+    field public static final javax.xml.namespace.QName TIME;
+    field public static final javax.xml.datatype.DatatypeConstants.Field YEARS;
+  }
+
+  public static final class DatatypeConstants.Field {
+    method public int getId();
+  }
+
+  public abstract class DatatypeFactory {
+    ctor protected DatatypeFactory();
+    method public abstract javax.xml.datatype.Duration newDuration(String);
+    method public abstract javax.xml.datatype.Duration newDuration(long);
+    method public abstract javax.xml.datatype.Duration newDuration(boolean, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigDecimal);
+    method public javax.xml.datatype.Duration newDuration(boolean, int, int, int, int, int, int);
+    method public javax.xml.datatype.Duration newDurationDayTime(String);
+    method public javax.xml.datatype.Duration newDurationDayTime(long);
+    method public javax.xml.datatype.Duration newDurationDayTime(boolean, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public javax.xml.datatype.Duration newDurationDayTime(boolean, int, int, int, int);
+    method public javax.xml.datatype.Duration newDurationYearMonth(String);
+    method public javax.xml.datatype.Duration newDurationYearMonth(long);
+    method public javax.xml.datatype.Duration newDurationYearMonth(boolean, java.math.BigInteger, java.math.BigInteger);
+    method public javax.xml.datatype.Duration newDurationYearMonth(boolean, int, int);
+    method public static javax.xml.datatype.DatatypeFactory newInstance() throws javax.xml.datatype.DatatypeConfigurationException;
+    method public static javax.xml.datatype.DatatypeFactory newInstance(String, ClassLoader) throws javax.xml.datatype.DatatypeConfigurationException;
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar();
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(String);
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.util.GregorianCalendar);
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.math.BigInteger, int, int, int, int, int, java.math.BigDecimal, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(int, int, int, int, int, int, int, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarDate(int, int, int, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, java.math.BigDecimal, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, int, int);
+    field public static final String DATATYPEFACTORY_IMPLEMENTATION_CLASS;
+    field public static final String DATATYPEFACTORY_PROPERTY = "javax.xml.datatype.DatatypeFactory";
+  }
+
+  public abstract class Duration {
+    ctor public Duration();
+    method public abstract javax.xml.datatype.Duration add(javax.xml.datatype.Duration);
+    method public abstract void addTo(java.util.Calendar);
+    method public void addTo(java.util.Date);
+    method public abstract int compare(javax.xml.datatype.Duration);
+    method public int getDays();
+    method public abstract Number getField(javax.xml.datatype.DatatypeConstants.Field);
+    method public int getHours();
+    method public int getMinutes();
+    method public int getMonths();
+    method public int getSeconds();
+    method public abstract int getSign();
+    method public long getTimeInMillis(java.util.Calendar);
+    method public long getTimeInMillis(java.util.Date);
+    method public javax.xml.namespace.QName getXMLSchemaType();
+    method public int getYears();
+    method public abstract int hashCode();
+    method public boolean isLongerThan(javax.xml.datatype.Duration);
+    method public abstract boolean isSet(javax.xml.datatype.DatatypeConstants.Field);
+    method public boolean isShorterThan(javax.xml.datatype.Duration);
+    method public javax.xml.datatype.Duration multiply(int);
+    method public abstract javax.xml.datatype.Duration multiply(java.math.BigDecimal);
+    method public abstract javax.xml.datatype.Duration negate();
+    method public abstract javax.xml.datatype.Duration normalizeWith(java.util.Calendar);
+    method public javax.xml.datatype.Duration subtract(javax.xml.datatype.Duration);
+  }
+
+  public abstract class XMLGregorianCalendar implements java.lang.Cloneable {
+    ctor public XMLGregorianCalendar();
+    method public abstract void add(javax.xml.datatype.Duration);
+    method public abstract void clear();
+    method public abstract Object clone();
+    method public abstract int compare(javax.xml.datatype.XMLGregorianCalendar);
+    method public abstract int getDay();
+    method public abstract java.math.BigInteger getEon();
+    method public abstract java.math.BigInteger getEonAndYear();
+    method public abstract java.math.BigDecimal getFractionalSecond();
+    method public abstract int getHour();
+    method public int getMillisecond();
+    method public abstract int getMinute();
+    method public abstract int getMonth();
+    method public abstract int getSecond();
+    method public abstract java.util.TimeZone getTimeZone(int);
+    method public abstract int getTimezone();
+    method public abstract javax.xml.namespace.QName getXMLSchemaType();
+    method public abstract int getYear();
+    method public abstract boolean isValid();
+    method public abstract javax.xml.datatype.XMLGregorianCalendar normalize();
+    method public abstract void reset();
+    method public abstract void setDay(int);
+    method public abstract void setFractionalSecond(java.math.BigDecimal);
+    method public abstract void setHour(int);
+    method public abstract void setMillisecond(int);
+    method public abstract void setMinute(int);
+    method public abstract void setMonth(int);
+    method public abstract void setSecond(int);
+    method public void setTime(int, int, int);
+    method public void setTime(int, int, int, java.math.BigDecimal);
+    method public void setTime(int, int, int, int);
+    method public abstract void setTimezone(int);
+    method public abstract void setYear(java.math.BigInteger);
+    method public abstract void setYear(int);
+    method public abstract java.util.GregorianCalendar toGregorianCalendar();
+    method public abstract java.util.GregorianCalendar toGregorianCalendar(java.util.TimeZone, java.util.Locale, javax.xml.datatype.XMLGregorianCalendar);
+    method public abstract String toXMLFormat();
+  }
+
+}
+
+package javax.xml.namespace {
+
+  public interface NamespaceContext {
+    method public String getNamespaceURI(String);
+    method public String getPrefix(String);
+    method public java.util.Iterator getPrefixes(String);
+  }
+
+  public class QName implements java.io.Serializable {
+    ctor public QName(String, String);
+    ctor public QName(String, String, String);
+    ctor public QName(String);
+    method public final boolean equals(Object);
+    method public String getLocalPart();
+    method public String getNamespaceURI();
+    method public String getPrefix();
+    method public final int hashCode();
+    method public static javax.xml.namespace.QName valueOf(String);
+  }
+
+}
+
+package javax.xml.parsers {
+
+  public abstract class DocumentBuilder {
+    ctor protected DocumentBuilder();
+    method public abstract org.w3c.dom.DOMImplementation getDOMImplementation();
+    method public javax.xml.validation.Schema getSchema();
+    method public abstract boolean isNamespaceAware();
+    method public abstract boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public abstract org.w3c.dom.Document newDocument();
+    method public org.w3c.dom.Document parse(java.io.InputStream) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.w3c.dom.Document parse(java.io.InputStream, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.w3c.dom.Document parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.w3c.dom.Document parse(java.io.File) throws java.io.IOException, org.xml.sax.SAXException;
+    method public abstract org.w3c.dom.Document parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void reset();
+    method public abstract void setEntityResolver(org.xml.sax.EntityResolver);
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+  }
+
+  public abstract class DocumentBuilderFactory {
+    ctor protected DocumentBuilderFactory();
+    method public abstract Object getAttribute(String) throws java.lang.IllegalArgumentException;
+    method public abstract boolean getFeature(String) throws javax.xml.parsers.ParserConfigurationException;
+    method public javax.xml.validation.Schema getSchema();
+    method public boolean isCoalescing();
+    method public boolean isExpandEntityReferences();
+    method public boolean isIgnoringComments();
+    method public boolean isIgnoringElementContentWhitespace();
+    method public boolean isNamespaceAware();
+    method public boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public abstract javax.xml.parsers.DocumentBuilder newDocumentBuilder() throws javax.xml.parsers.ParserConfigurationException;
+    method public static javax.xml.parsers.DocumentBuilderFactory newInstance();
+    method public static javax.xml.parsers.DocumentBuilderFactory newInstance(String, ClassLoader);
+    method public abstract void setAttribute(String, Object) throws java.lang.IllegalArgumentException;
+    method public void setCoalescing(boolean);
+    method public void setExpandEntityReferences(boolean);
+    method public abstract void setFeature(String, boolean) throws javax.xml.parsers.ParserConfigurationException;
+    method public void setIgnoringComments(boolean);
+    method public void setIgnoringElementContentWhitespace(boolean);
+    method public void setNamespaceAware(boolean);
+    method public void setSchema(javax.xml.validation.Schema);
+    method public void setValidating(boolean);
+    method public void setXIncludeAware(boolean);
+  }
+
+  public class FactoryConfigurationError extends java.lang.Error {
+    ctor public FactoryConfigurationError();
+    ctor public FactoryConfigurationError(String);
+    ctor public FactoryConfigurationError(Exception);
+    ctor public FactoryConfigurationError(Exception, String);
+    method public Exception getException();
+  }
+
+  public class ParserConfigurationException extends java.lang.Exception {
+    ctor public ParserConfigurationException();
+    ctor public ParserConfigurationException(String);
+  }
+
+  public abstract class SAXParser {
+    ctor protected SAXParser();
+    method public abstract org.xml.sax.Parser getParser() throws org.xml.sax.SAXException;
+    method public abstract Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public javax.xml.validation.Schema getSchema();
+    method public abstract org.xml.sax.XMLReader getXMLReader() throws org.xml.sax.SAXException;
+    method public abstract boolean isNamespaceAware();
+    method public abstract boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public void parse(java.io.InputStream, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.InputStream, org.xml.sax.HandlerBase, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.InputStream, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.InputStream, org.xml.sax.helpers.DefaultHandler, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.File, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.File, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void reset();
+    method public abstract void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+  }
+
+  public abstract class SAXParserFactory {
+    ctor protected SAXParserFactory();
+    method public abstract boolean getFeature(String) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public javax.xml.validation.Schema getSchema();
+    method public boolean isNamespaceAware();
+    method public boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public static javax.xml.parsers.SAXParserFactory newInstance();
+    method public static javax.xml.parsers.SAXParserFactory newInstance(String, ClassLoader);
+    method public abstract javax.xml.parsers.SAXParser newSAXParser() throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException;
+    method public abstract void setFeature(String, boolean) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setNamespaceAware(boolean);
+    method public void setSchema(javax.xml.validation.Schema);
+    method public void setValidating(boolean);
+    method public void setXIncludeAware(boolean);
+  }
+
+}
+
+package javax.xml.transform {
+
+  public interface ErrorListener {
+    method public void error(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException;
+    method public void fatalError(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException;
+    method public void warning(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException;
+  }
+
+  public class OutputKeys {
+    field public static final String CDATA_SECTION_ELEMENTS = "cdata-section-elements";
+    field public static final String DOCTYPE_PUBLIC = "doctype-public";
+    field public static final String DOCTYPE_SYSTEM = "doctype-system";
+    field public static final String ENCODING = "encoding";
+    field public static final String INDENT = "indent";
+    field public static final String MEDIA_TYPE = "media-type";
+    field public static final String METHOD = "method";
+    field public static final String OMIT_XML_DECLARATION = "omit-xml-declaration";
+    field public static final String STANDALONE = "standalone";
+    field public static final String VERSION = "version";
+  }
+
+  public interface Result {
+    method public String getSystemId();
+    method public void setSystemId(String);
+    field public static final String PI_DISABLE_OUTPUT_ESCAPING = "javax.xml.transform.disable-output-escaping";
+    field public static final String PI_ENABLE_OUTPUT_ESCAPING = "javax.xml.transform.enable-output-escaping";
+  }
+
+  public interface Source {
+    method public String getSystemId();
+    method public void setSystemId(String);
+  }
+
+  public interface SourceLocator {
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface Templates {
+    method public java.util.Properties getOutputProperties();
+    method public javax.xml.transform.Transformer newTransformer() throws javax.xml.transform.TransformerConfigurationException;
+  }
+
+  public abstract class Transformer {
+    ctor protected Transformer();
+    method public abstract void clearParameters();
+    method public abstract javax.xml.transform.ErrorListener getErrorListener();
+    method public abstract java.util.Properties getOutputProperties();
+    method public abstract String getOutputProperty(String) throws java.lang.IllegalArgumentException;
+    method public abstract Object getParameter(String);
+    method public abstract javax.xml.transform.URIResolver getURIResolver();
+    method public void reset();
+    method public abstract void setErrorListener(javax.xml.transform.ErrorListener) throws java.lang.IllegalArgumentException;
+    method public abstract void setOutputProperties(java.util.Properties);
+    method public abstract void setOutputProperty(String, String) throws java.lang.IllegalArgumentException;
+    method public abstract void setParameter(String, Object);
+    method public abstract void setURIResolver(javax.xml.transform.URIResolver);
+    method public abstract void transform(javax.xml.transform.Source, javax.xml.transform.Result) throws javax.xml.transform.TransformerException;
+  }
+
+  public class TransformerConfigurationException extends javax.xml.transform.TransformerException {
+    ctor public TransformerConfigurationException();
+    ctor public TransformerConfigurationException(String);
+    ctor public TransformerConfigurationException(Throwable);
+    ctor public TransformerConfigurationException(String, Throwable);
+    ctor public TransformerConfigurationException(String, javax.xml.transform.SourceLocator);
+    ctor public TransformerConfigurationException(String, javax.xml.transform.SourceLocator, Throwable);
+  }
+
+  public class TransformerException extends java.lang.Exception {
+    ctor public TransformerException(String);
+    ctor public TransformerException(Throwable);
+    ctor public TransformerException(String, Throwable);
+    ctor public TransformerException(String, javax.xml.transform.SourceLocator);
+    ctor public TransformerException(String, javax.xml.transform.SourceLocator, Throwable);
+    method public Throwable getException();
+    method public String getLocationAsString();
+    method public javax.xml.transform.SourceLocator getLocator();
+    method public String getMessageAndLocation();
+    method public void setLocator(javax.xml.transform.SourceLocator);
+  }
+
+  public abstract class TransformerFactory {
+    ctor protected TransformerFactory();
+    method public abstract javax.xml.transform.Source getAssociatedStylesheet(javax.xml.transform.Source, String, String, String) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract Object getAttribute(String);
+    method public abstract javax.xml.transform.ErrorListener getErrorListener();
+    method public abstract boolean getFeature(String);
+    method public abstract javax.xml.transform.URIResolver getURIResolver();
+    method public static javax.xml.transform.TransformerFactory newInstance() throws javax.xml.transform.TransformerFactoryConfigurationError;
+    method public static javax.xml.transform.TransformerFactory newInstance(String, ClassLoader) throws javax.xml.transform.TransformerFactoryConfigurationError;
+    method public abstract javax.xml.transform.Templates newTemplates(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.Transformer newTransformer(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.Transformer newTransformer() throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract void setAttribute(String, Object);
+    method public abstract void setErrorListener(javax.xml.transform.ErrorListener);
+    method public abstract void setFeature(String, boolean) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract void setURIResolver(javax.xml.transform.URIResolver);
+  }
+
+  public class TransformerFactoryConfigurationError extends java.lang.Error {
+    ctor public TransformerFactoryConfigurationError();
+    ctor public TransformerFactoryConfigurationError(String);
+    ctor public TransformerFactoryConfigurationError(Exception);
+    ctor public TransformerFactoryConfigurationError(Exception, String);
+    method public Exception getException();
+  }
+
+  public interface URIResolver {
+    method public javax.xml.transform.Source resolve(String, String) throws javax.xml.transform.TransformerException;
+  }
+
+}
+
+package javax.xml.transform.dom {
+
+  public interface DOMLocator extends javax.xml.transform.SourceLocator {
+    method public org.w3c.dom.Node getOriginatingNode();
+  }
+
+  public class DOMResult implements javax.xml.transform.Result {
+    ctor public DOMResult();
+    ctor public DOMResult(org.w3c.dom.Node);
+    ctor public DOMResult(org.w3c.dom.Node, String);
+    ctor public DOMResult(org.w3c.dom.Node, org.w3c.dom.Node);
+    ctor public DOMResult(org.w3c.dom.Node, org.w3c.dom.Node, String);
+    method public org.w3c.dom.Node getNextSibling();
+    method public org.w3c.dom.Node getNode();
+    method public String getSystemId();
+    method public void setNextSibling(org.w3c.dom.Node);
+    method public void setNode(org.w3c.dom.Node);
+    method public void setSystemId(String);
+    field public static final String FEATURE = "http://javax.xml.transform.dom.DOMResult/feature";
+  }
+
+  public class DOMSource implements javax.xml.transform.Source {
+    ctor public DOMSource();
+    ctor public DOMSource(org.w3c.dom.Node);
+    ctor public DOMSource(org.w3c.dom.Node, String);
+    method public org.w3c.dom.Node getNode();
+    method public String getSystemId();
+    method public void setNode(org.w3c.dom.Node);
+    method public void setSystemId(String);
+    field public static final String FEATURE = "http://javax.xml.transform.dom.DOMSource/feature";
+  }
+
+}
+
+package javax.xml.transform.sax {
+
+  public class SAXResult implements javax.xml.transform.Result {
+    ctor public SAXResult();
+    ctor public SAXResult(org.xml.sax.ContentHandler);
+    method public org.xml.sax.ContentHandler getHandler();
+    method public org.xml.sax.ext.LexicalHandler getLexicalHandler();
+    method public String getSystemId();
+    method public void setHandler(org.xml.sax.ContentHandler);
+    method public void setLexicalHandler(org.xml.sax.ext.LexicalHandler);
+    method public void setSystemId(String);
+    field public static final String FEATURE = "http://javax.xml.transform.sax.SAXResult/feature";
+  }
+
+  public class SAXSource implements javax.xml.transform.Source {
+    ctor public SAXSource();
+    ctor public SAXSource(org.xml.sax.XMLReader, org.xml.sax.InputSource);
+    ctor public SAXSource(org.xml.sax.InputSource);
+    method public org.xml.sax.InputSource getInputSource();
+    method public String getSystemId();
+    method public org.xml.sax.XMLReader getXMLReader();
+    method public void setInputSource(org.xml.sax.InputSource);
+    method public void setSystemId(String);
+    method public void setXMLReader(org.xml.sax.XMLReader);
+    method public static org.xml.sax.InputSource sourceToInputSource(javax.xml.transform.Source);
+    field public static final String FEATURE = "http://javax.xml.transform.sax.SAXSource/feature";
+  }
+
+  public abstract class SAXTransformerFactory extends javax.xml.transform.TransformerFactory {
+    ctor protected SAXTransformerFactory();
+    method public abstract javax.xml.transform.sax.TemplatesHandler newTemplatesHandler() throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler(javax.xml.transform.Templates) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler() throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract org.xml.sax.XMLFilter newXMLFilter(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract org.xml.sax.XMLFilter newXMLFilter(javax.xml.transform.Templates) throws javax.xml.transform.TransformerConfigurationException;
+    field public static final String FEATURE = "http://javax.xml.transform.sax.SAXTransformerFactory/feature";
+    field public static final String FEATURE_XMLFILTER = "http://javax.xml.transform.sax.SAXTransformerFactory/feature/xmlfilter";
+  }
+
+  public interface TemplatesHandler extends org.xml.sax.ContentHandler {
+    method public String getSystemId();
+    method public javax.xml.transform.Templates getTemplates();
+    method public void setSystemId(String);
+  }
+
+  public interface TransformerHandler extends org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.ext.LexicalHandler {
+    method public String getSystemId();
+    method public javax.xml.transform.Transformer getTransformer();
+    method public void setResult(javax.xml.transform.Result) throws java.lang.IllegalArgumentException;
+    method public void setSystemId(String);
+  }
+
+}
+
+package javax.xml.transform.stream {
+
+  public class StreamResult implements javax.xml.transform.Result {
+    ctor public StreamResult();
+    ctor public StreamResult(java.io.OutputStream);
+    ctor public StreamResult(java.io.Writer);
+    ctor public StreamResult(String);
+    ctor public StreamResult(java.io.File);
+    method public java.io.OutputStream getOutputStream();
+    method public String getSystemId();
+    method public java.io.Writer getWriter();
+    method public void setOutputStream(java.io.OutputStream);
+    method public void setSystemId(String);
+    method public void setSystemId(java.io.File);
+    method public void setWriter(java.io.Writer);
+    field public static final String FEATURE = "http://javax.xml.transform.stream.StreamResult/feature";
+  }
+
+  public class StreamSource implements javax.xml.transform.Source {
+    ctor public StreamSource();
+    ctor public StreamSource(java.io.InputStream);
+    ctor public StreamSource(java.io.InputStream, String);
+    ctor public StreamSource(java.io.Reader);
+    ctor public StreamSource(java.io.Reader, String);
+    ctor public StreamSource(String);
+    ctor public StreamSource(java.io.File);
+    method public java.io.InputStream getInputStream();
+    method public String getPublicId();
+    method public java.io.Reader getReader();
+    method public String getSystemId();
+    method public void setInputStream(java.io.InputStream);
+    method public void setPublicId(String);
+    method public void setReader(java.io.Reader);
+    method public void setSystemId(String);
+    method public void setSystemId(java.io.File);
+    field public static final String FEATURE = "http://javax.xml.transform.stream.StreamSource/feature";
+  }
+
+}
+
+package javax.xml.validation {
+
+  public abstract class Schema {
+    ctor protected Schema();
+    method public abstract javax.xml.validation.Validator newValidator();
+    method public abstract javax.xml.validation.ValidatorHandler newValidatorHandler();
+  }
+
+  public abstract class SchemaFactory {
+    ctor protected SchemaFactory();
+    method public abstract org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver();
+    method public abstract boolean isSchemaLanguageSupported(String);
+    method public static javax.xml.validation.SchemaFactory newInstance(String);
+    method public static javax.xml.validation.SchemaFactory newInstance(String, String, ClassLoader);
+    method public javax.xml.validation.Schema newSchema(javax.xml.transform.Source) throws org.xml.sax.SAXException;
+    method public javax.xml.validation.Schema newSchema(java.io.File) throws org.xml.sax.SAXException;
+    method public javax.xml.validation.Schema newSchema(java.net.URL) throws org.xml.sax.SAXException;
+    method public abstract javax.xml.validation.Schema newSchema(javax.xml.transform.Source[]) throws org.xml.sax.SAXException;
+    method public abstract javax.xml.validation.Schema newSchema() throws org.xml.sax.SAXException;
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver);
+  }
+
+  public abstract class SchemaFactoryLoader {
+    ctor protected SchemaFactoryLoader();
+    method public abstract javax.xml.validation.SchemaFactory newFactory(String);
+  }
+
+  public abstract class TypeInfoProvider {
+    ctor protected TypeInfoProvider();
+    method public abstract org.w3c.dom.TypeInfo getAttributeTypeInfo(int);
+    method public abstract org.w3c.dom.TypeInfo getElementTypeInfo();
+    method public abstract boolean isIdAttribute(int);
+    method public abstract boolean isSpecified(int);
+  }
+
+  public abstract class Validator {
+    ctor protected Validator();
+    method public abstract org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver();
+    method public abstract void reset();
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver);
+    method public void validate(javax.xml.transform.Source) throws java.io.IOException, org.xml.sax.SAXException;
+    method public abstract void validate(javax.xml.transform.Source, javax.xml.transform.Result) throws java.io.IOException, org.xml.sax.SAXException;
+  }
+
+  public abstract class ValidatorHandler implements org.xml.sax.ContentHandler {
+    ctor protected ValidatorHandler();
+    method public abstract org.xml.sax.ContentHandler getContentHandler();
+    method public abstract org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver();
+    method public abstract javax.xml.validation.TypeInfoProvider getTypeInfoProvider();
+    method public abstract void setContentHandler(org.xml.sax.ContentHandler);
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver);
+  }
+
+}
+
+package javax.xml.xpath {
+
+  public interface XPath {
+    method public javax.xml.xpath.XPathExpression compile(String) throws javax.xml.xpath.XPathExpressionException;
+    method public Object evaluate(String, Object, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(String, Object) throws javax.xml.xpath.XPathExpressionException;
+    method public Object evaluate(String, org.xml.sax.InputSource, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(String, org.xml.sax.InputSource) throws javax.xml.xpath.XPathExpressionException;
+    method public javax.xml.namespace.NamespaceContext getNamespaceContext();
+    method public javax.xml.xpath.XPathFunctionResolver getXPathFunctionResolver();
+    method public javax.xml.xpath.XPathVariableResolver getXPathVariableResolver();
+    method public void reset();
+    method public void setNamespaceContext(javax.xml.namespace.NamespaceContext);
+    method public void setXPathFunctionResolver(javax.xml.xpath.XPathFunctionResolver);
+    method public void setXPathVariableResolver(javax.xml.xpath.XPathVariableResolver);
+  }
+
+  public class XPathConstants {
+    field public static final javax.xml.namespace.QName BOOLEAN;
+    field public static final String DOM_OBJECT_MODEL = "http://java.sun.com/jaxp/xpath/dom";
+    field public static final javax.xml.namespace.QName NODE;
+    field public static final javax.xml.namespace.QName NODESET;
+    field public static final javax.xml.namespace.QName NUMBER;
+    field public static final javax.xml.namespace.QName STRING;
+  }
+
+  public class XPathException extends java.lang.Exception {
+    ctor public XPathException(String);
+    ctor public XPathException(Throwable);
+  }
+
+  public interface XPathExpression {
+    method public Object evaluate(Object, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(Object) throws javax.xml.xpath.XPathExpressionException;
+    method public Object evaluate(org.xml.sax.InputSource, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(org.xml.sax.InputSource) throws javax.xml.xpath.XPathExpressionException;
+  }
+
+  public class XPathExpressionException extends javax.xml.xpath.XPathException {
+    ctor public XPathExpressionException(String);
+    ctor public XPathExpressionException(Throwable);
+  }
+
+  public abstract class XPathFactory {
+    ctor protected XPathFactory();
+    method public abstract boolean getFeature(String) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public abstract boolean isObjectModelSupported(String);
+    method public static final javax.xml.xpath.XPathFactory newInstance();
+    method public static final javax.xml.xpath.XPathFactory newInstance(String) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public static javax.xml.xpath.XPathFactory newInstance(String, String, ClassLoader) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public abstract javax.xml.xpath.XPath newXPath();
+    method public abstract void setFeature(String, boolean) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public abstract void setXPathFunctionResolver(javax.xml.xpath.XPathFunctionResolver);
+    method public abstract void setXPathVariableResolver(javax.xml.xpath.XPathVariableResolver);
+    field public static final String DEFAULT_OBJECT_MODEL_URI = "http://java.sun.com/jaxp/xpath/dom";
+    field public static final String DEFAULT_PROPERTY_NAME = "javax.xml.xpath.XPathFactory";
+  }
+
+  public class XPathFactoryConfigurationException extends javax.xml.xpath.XPathException {
+    ctor public XPathFactoryConfigurationException(String);
+    ctor public XPathFactoryConfigurationException(Throwable);
+  }
+
+  public interface XPathFunction {
+    method public Object evaluate(java.util.List) throws javax.xml.xpath.XPathFunctionException;
+  }
+
+  public class XPathFunctionException extends javax.xml.xpath.XPathExpressionException {
+    ctor public XPathFunctionException(String);
+    ctor public XPathFunctionException(Throwable);
+  }
+
+  public interface XPathFunctionResolver {
+    method public javax.xml.xpath.XPathFunction resolveFunction(javax.xml.namespace.QName, int);
+  }
+
+  public interface XPathVariableResolver {
+    method public Object resolveVariable(javax.xml.namespace.QName);
+  }
+
+}
+
+package org.apache.http.conn {
+
+  @Deprecated public class ConnectTimeoutException extends java.io.InterruptedIOException {
+    ctor @Deprecated public ConnectTimeoutException();
+    ctor @Deprecated public ConnectTimeoutException(String);
+  }
+
+}
+
+package org.apache.http.conn.scheme {
+
+  @Deprecated public interface HostNameResolver {
+    method @Deprecated public java.net.InetAddress resolve(String) throws java.io.IOException;
+  }
+
+  @Deprecated public interface LayeredSocketFactory extends org.apache.http.conn.scheme.SocketFactory {
+    method @Deprecated public java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException, java.net.UnknownHostException;
+  }
+
+  @Deprecated public interface SocketFactory {
+    method @Deprecated public java.net.Socket connectSocket(java.net.Socket, String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws org.apache.http.conn.ConnectTimeoutException, java.io.IOException, java.net.UnknownHostException;
+    method @Deprecated public java.net.Socket createSocket() throws java.io.IOException;
+    method @Deprecated public boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException;
+  }
+
+}
+
+package org.apache.http.conn.ssl {
+
+  @Deprecated public abstract class AbstractVerifier implements org.apache.http.conn.ssl.X509HostnameVerifier {
+    ctor @Deprecated public AbstractVerifier();
+    method @Deprecated public static boolean acceptableCountryWildcard(String);
+    method @Deprecated public static int countDots(String);
+    method @Deprecated public static String[] getCNs(java.security.cert.X509Certificate);
+    method @Deprecated public static String[] getDNSSubjectAlts(java.security.cert.X509Certificate);
+    method @Deprecated public final void verify(String, javax.net.ssl.SSLSocket) throws java.io.IOException;
+    method @Deprecated public final boolean verify(String, javax.net.ssl.SSLSession);
+    method @Deprecated public final void verify(String, java.security.cert.X509Certificate) throws javax.net.ssl.SSLException;
+    method @Deprecated public final void verify(String, String[], String[], boolean) throws javax.net.ssl.SSLException;
+  }
+
+  @Deprecated public class AllowAllHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier {
+    ctor @Deprecated public AllowAllHostnameVerifier();
+    method @Deprecated public final String toString();
+    method @Deprecated public final void verify(String, String[], String[]);
+  }
+
+  @Deprecated public class BrowserCompatHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier {
+    ctor @Deprecated public BrowserCompatHostnameVerifier();
+    method @Deprecated public final String toString();
+    method @Deprecated public final void verify(String, String[], String[]) throws javax.net.ssl.SSLException;
+  }
+
+  @Deprecated public class SSLSocketFactory implements org.apache.http.conn.scheme.LayeredSocketFactory {
+    ctor @Deprecated public SSLSocketFactory(String, java.security.KeyStore, String, java.security.KeyStore, java.security.SecureRandom, org.apache.http.conn.scheme.HostNameResolver) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    ctor @Deprecated public SSLSocketFactory(java.security.KeyStore, String, java.security.KeyStore) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    ctor @Deprecated public SSLSocketFactory(java.security.KeyStore, String) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    ctor @Deprecated public SSLSocketFactory(java.security.KeyStore) throws java.security.KeyManagementException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method @Deprecated public java.net.Socket connectSocket(java.net.Socket, String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket() throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException, java.net.UnknownHostException;
+    method @Deprecated public org.apache.http.conn.ssl.X509HostnameVerifier getHostnameVerifier();
+    method @Deprecated public static org.apache.http.conn.ssl.SSLSocketFactory getSocketFactory();
+    method @Deprecated public boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException;
+    method @Deprecated public void setHostnameVerifier(org.apache.http.conn.ssl.X509HostnameVerifier);
+    field @Deprecated public static final org.apache.http.conn.ssl.X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER;
+    field @Deprecated public static final org.apache.http.conn.ssl.X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
+    field @Deprecated public static final String SSL = "SSL";
+    field @Deprecated public static final String SSLV2 = "SSLv2";
+    field @Deprecated public static final org.apache.http.conn.ssl.X509HostnameVerifier STRICT_HOSTNAME_VERIFIER;
+    field @Deprecated public static final String TLS = "TLS";
+  }
+
+  @Deprecated public class StrictHostnameVerifier extends org.apache.http.conn.ssl.AbstractVerifier {
+    ctor @Deprecated public StrictHostnameVerifier();
+    method @Deprecated public final String toString();
+    method @Deprecated public final void verify(String, String[], String[]) throws javax.net.ssl.SSLException;
+  }
+
+  @Deprecated public interface X509HostnameVerifier extends javax.net.ssl.HostnameVerifier {
+    method @Deprecated public void verify(String, javax.net.ssl.SSLSocket) throws java.io.IOException;
+    method @Deprecated public void verify(String, java.security.cert.X509Certificate) throws javax.net.ssl.SSLException;
+    method @Deprecated public void verify(String, String[], String[]) throws javax.net.ssl.SSLException;
+  }
+
+}
+
+package org.apache.http.params {
+
+  @Deprecated public interface CoreConnectionPNames {
+    field @Deprecated public static final String CONNECTION_TIMEOUT = "http.connection.timeout";
+    field @Deprecated public static final String MAX_HEADER_COUNT = "http.connection.max-header-count";
+    field @Deprecated public static final String MAX_LINE_LENGTH = "http.connection.max-line-length";
+    field @Deprecated public static final String SOCKET_BUFFER_SIZE = "http.socket.buffer-size";
+    field @Deprecated public static final String SO_LINGER = "http.socket.linger";
+    field @Deprecated public static final String SO_TIMEOUT = "http.socket.timeout";
+    field @Deprecated public static final String STALE_CONNECTION_CHECK = "http.connection.stalecheck";
+    field @Deprecated public static final String TCP_NODELAY = "http.tcp.nodelay";
+  }
+
+  @Deprecated public final class HttpConnectionParams implements org.apache.http.params.CoreConnectionPNames {
+    method @Deprecated public static int getConnectionTimeout(org.apache.http.params.HttpParams);
+    method @Deprecated public static int getLinger(org.apache.http.params.HttpParams);
+    method @Deprecated public static int getSoTimeout(org.apache.http.params.HttpParams);
+    method @Deprecated public static int getSocketBufferSize(org.apache.http.params.HttpParams);
+    method @Deprecated public static boolean getTcpNoDelay(org.apache.http.params.HttpParams);
+    method @Deprecated public static boolean isStaleCheckingEnabled(org.apache.http.params.HttpParams);
+    method @Deprecated public static void setConnectionTimeout(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setLinger(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setSoTimeout(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setSocketBufferSize(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setStaleCheckingEnabled(org.apache.http.params.HttpParams, boolean);
+    method @Deprecated public static void setTcpNoDelay(org.apache.http.params.HttpParams, boolean);
+  }
+
+  @Deprecated public interface HttpParams {
+    method @Deprecated public org.apache.http.params.HttpParams copy();
+    method @Deprecated public boolean getBooleanParameter(String, boolean);
+    method @Deprecated public double getDoubleParameter(String, double);
+    method @Deprecated public int getIntParameter(String, int);
+    method @Deprecated public long getLongParameter(String, long);
+    method @Deprecated public Object getParameter(String);
+    method @Deprecated public boolean isParameterFalse(String);
+    method @Deprecated public boolean isParameterTrue(String);
+    method @Deprecated public boolean removeParameter(String);
+    method @Deprecated public org.apache.http.params.HttpParams setBooleanParameter(String, boolean);
+    method @Deprecated public org.apache.http.params.HttpParams setDoubleParameter(String, double);
+    method @Deprecated public org.apache.http.params.HttpParams setIntParameter(String, int);
+    method @Deprecated public org.apache.http.params.HttpParams setLongParameter(String, long);
+    method @Deprecated public org.apache.http.params.HttpParams setParameter(String, Object);
+  }
+
+}
+
+package org.json {
+
+  public class JSONArray {
+    ctor public JSONArray();
+    ctor public JSONArray(java.util.Collection);
+    ctor public JSONArray(org.json.JSONTokener) throws org.json.JSONException;
+    ctor public JSONArray(String) throws org.json.JSONException;
+    ctor public JSONArray(Object) throws org.json.JSONException;
+    method public Object get(int) throws org.json.JSONException;
+    method public boolean getBoolean(int) throws org.json.JSONException;
+    method public double getDouble(int) throws org.json.JSONException;
+    method public int getInt(int) throws org.json.JSONException;
+    method public org.json.JSONArray getJSONArray(int) throws org.json.JSONException;
+    method public org.json.JSONObject getJSONObject(int) throws org.json.JSONException;
+    method public long getLong(int) throws org.json.JSONException;
+    method public String getString(int) throws org.json.JSONException;
+    method public boolean isNull(int);
+    method public String join(String) throws org.json.JSONException;
+    method public int length();
+    method public Object opt(int);
+    method public boolean optBoolean(int);
+    method public boolean optBoolean(int, boolean);
+    method public double optDouble(int);
+    method public double optDouble(int, double);
+    method public int optInt(int);
+    method public int optInt(int, int);
+    method public org.json.JSONArray optJSONArray(int);
+    method public org.json.JSONObject optJSONObject(int);
+    method public long optLong(int);
+    method public long optLong(int, long);
+    method public String optString(int);
+    method public String optString(int, String);
+    method public org.json.JSONArray put(boolean);
+    method public org.json.JSONArray put(double) throws org.json.JSONException;
+    method public org.json.JSONArray put(int);
+    method public org.json.JSONArray put(long);
+    method public org.json.JSONArray put(Object);
+    method public org.json.JSONArray put(int, boolean) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, double) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, int) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, long) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, Object) throws org.json.JSONException;
+    method public Object remove(int);
+    method public org.json.JSONObject toJSONObject(org.json.JSONArray) throws org.json.JSONException;
+    method public String toString(int) throws org.json.JSONException;
+  }
+
+  public class JSONException extends java.lang.Exception {
+    ctor public JSONException(String);
+    ctor public JSONException(String, Throwable);
+    ctor public JSONException(Throwable);
+  }
+
+  public class JSONObject {
+    ctor public JSONObject();
+    ctor public JSONObject(@NonNull java.util.Map);
+    ctor public JSONObject(@NonNull org.json.JSONTokener) throws org.json.JSONException;
+    ctor public JSONObject(@NonNull String) throws org.json.JSONException;
+    ctor public JSONObject(@NonNull org.json.JSONObject, @NonNull String[]) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject accumulate(@NonNull String, @Nullable Object) throws org.json.JSONException;
+    method @NonNull public Object get(@NonNull String) throws org.json.JSONException;
+    method public boolean getBoolean(@NonNull String) throws org.json.JSONException;
+    method public double getDouble(@NonNull String) throws org.json.JSONException;
+    method public int getInt(@NonNull String) throws org.json.JSONException;
+    method @NonNull public org.json.JSONArray getJSONArray(@NonNull String) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject getJSONObject(@NonNull String) throws org.json.JSONException;
+    method public long getLong(@NonNull String) throws org.json.JSONException;
+    method @NonNull public String getString(@NonNull String) throws org.json.JSONException;
+    method public boolean has(@Nullable String);
+    method public boolean isNull(@Nullable String);
+    method @NonNull public java.util.Iterator<java.lang.String> keys();
+    method public int length();
+    method @Nullable public org.json.JSONArray names();
+    method @NonNull public static String numberToString(@NonNull Number) throws org.json.JSONException;
+    method @Nullable public Object opt(@Nullable String);
+    method public boolean optBoolean(@Nullable String);
+    method public boolean optBoolean(@Nullable String, boolean);
+    method public double optDouble(@Nullable String);
+    method public double optDouble(@Nullable String, double);
+    method public int optInt(@Nullable String);
+    method public int optInt(@Nullable String, int);
+    method @Nullable public org.json.JSONArray optJSONArray(@Nullable String);
+    method @Nullable public org.json.JSONObject optJSONObject(@Nullable String);
+    method public long optLong(@Nullable String);
+    method public long optLong(@Nullable String, long);
+    method @NonNull public String optString(@Nullable String);
+    method @NonNull public String optString(@Nullable String, @NonNull String);
+    method @NonNull public org.json.JSONObject put(@NonNull String, boolean) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, double) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, int) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, long) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, @Nullable Object) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject putOpt(@Nullable String, @Nullable Object) throws org.json.JSONException;
+    method @NonNull public static String quote(@Nullable String);
+    method @Nullable public Object remove(@Nullable String);
+    method @Nullable public org.json.JSONArray toJSONArray(@Nullable org.json.JSONArray) throws org.json.JSONException;
+    method @NonNull public String toString(int) throws org.json.JSONException;
+    method @Nullable public static Object wrap(@Nullable Object);
+    field @NonNull public static final Object NULL;
+  }
+
+  public class JSONStringer {
+    ctor public JSONStringer();
+    method public org.json.JSONStringer array() throws org.json.JSONException;
+    method public org.json.JSONStringer endArray() throws org.json.JSONException;
+    method public org.json.JSONStringer endObject() throws org.json.JSONException;
+    method public org.json.JSONStringer key(String) throws org.json.JSONException;
+    method public org.json.JSONStringer object() throws org.json.JSONException;
+    method public org.json.JSONStringer value(Object) throws org.json.JSONException;
+    method public org.json.JSONStringer value(boolean) throws org.json.JSONException;
+    method public org.json.JSONStringer value(double) throws org.json.JSONException;
+    method public org.json.JSONStringer value(long) throws org.json.JSONException;
+  }
+
+  public class JSONTokener {
+    ctor public JSONTokener(String);
+    method public void back();
+    method public static int dehexchar(char);
+    method public boolean more();
+    method public char next();
+    method public char next(char) throws org.json.JSONException;
+    method public String next(int) throws org.json.JSONException;
+    method public char nextClean() throws org.json.JSONException;
+    method public String nextString(char) throws org.json.JSONException;
+    method public String nextTo(String);
+    method public String nextTo(char);
+    method public Object nextValue() throws org.json.JSONException;
+    method public void skipPast(String);
+    method public char skipTo(char);
+    method public org.json.JSONException syntaxError(String);
+  }
+
+}
+
+package org.w3c.dom {
+
+  public interface Attr extends org.w3c.dom.Node {
+    method public String getName();
+    method public org.w3c.dom.Element getOwnerElement();
+    method public org.w3c.dom.TypeInfo getSchemaTypeInfo();
+    method public boolean getSpecified();
+    method public String getValue();
+    method public boolean isId();
+    method public void setValue(String) throws org.w3c.dom.DOMException;
+  }
+
+  public interface CDATASection extends org.w3c.dom.Text {
+  }
+
+  public interface CharacterData extends org.w3c.dom.Node {
+    method public void appendData(String) throws org.w3c.dom.DOMException;
+    method public void deleteData(int, int) throws org.w3c.dom.DOMException;
+    method public String getData() throws org.w3c.dom.DOMException;
+    method public int getLength();
+    method public void insertData(int, String) throws org.w3c.dom.DOMException;
+    method public void replaceData(int, int, String) throws org.w3c.dom.DOMException;
+    method public void setData(String) throws org.w3c.dom.DOMException;
+    method public String substringData(int, int) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Comment extends org.w3c.dom.CharacterData {
+  }
+
+  public interface DOMConfiguration {
+    method public boolean canSetParameter(String, Object);
+    method public Object getParameter(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.DOMStringList getParameterNames();
+    method public void setParameter(String, Object) throws org.w3c.dom.DOMException;
+  }
+
+  public interface DOMError {
+    method public org.w3c.dom.DOMLocator getLocation();
+    method public String getMessage();
+    method public Object getRelatedData();
+    method public Object getRelatedException();
+    method public short getSeverity();
+    method public String getType();
+    field public static final short SEVERITY_ERROR = 2; // 0x2
+    field public static final short SEVERITY_FATAL_ERROR = 3; // 0x3
+    field public static final short SEVERITY_WARNING = 1; // 0x1
+  }
+
+  public interface DOMErrorHandler {
+    method public boolean handleError(org.w3c.dom.DOMError);
+  }
+
+  public class DOMException extends java.lang.RuntimeException {
+    ctor public DOMException(short, String);
+    field public static final short DOMSTRING_SIZE_ERR = 2; // 0x2
+    field public static final short HIERARCHY_REQUEST_ERR = 3; // 0x3
+    field public static final short INDEX_SIZE_ERR = 1; // 0x1
+    field public static final short INUSE_ATTRIBUTE_ERR = 10; // 0xa
+    field public static final short INVALID_ACCESS_ERR = 15; // 0xf
+    field public static final short INVALID_CHARACTER_ERR = 5; // 0x5
+    field public static final short INVALID_MODIFICATION_ERR = 13; // 0xd
+    field public static final short INVALID_STATE_ERR = 11; // 0xb
+    field public static final short NAMESPACE_ERR = 14; // 0xe
+    field public static final short NOT_FOUND_ERR = 8; // 0x8
+    field public static final short NOT_SUPPORTED_ERR = 9; // 0x9
+    field public static final short NO_DATA_ALLOWED_ERR = 6; // 0x6
+    field public static final short NO_MODIFICATION_ALLOWED_ERR = 7; // 0x7
+    field public static final short SYNTAX_ERR = 12; // 0xc
+    field public static final short TYPE_MISMATCH_ERR = 17; // 0x11
+    field public static final short VALIDATION_ERR = 16; // 0x10
+    field public static final short WRONG_DOCUMENT_ERR = 4; // 0x4
+    field public short code;
+  }
+
+  public interface DOMImplementation {
+    method public org.w3c.dom.Document createDocument(String, String, org.w3c.dom.DocumentType) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.DocumentType createDocumentType(String, String, String) throws org.w3c.dom.DOMException;
+    method public Object getFeature(String, String);
+    method public boolean hasFeature(String, String);
+  }
+
+  public interface DOMImplementationList {
+    method public int getLength();
+    method public org.w3c.dom.DOMImplementation item(int);
+  }
+
+  public interface DOMImplementationSource {
+    method public org.w3c.dom.DOMImplementation getDOMImplementation(String);
+    method public org.w3c.dom.DOMImplementationList getDOMImplementationList(String);
+  }
+
+  public interface DOMLocator {
+    method public int getByteOffset();
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public org.w3c.dom.Node getRelatedNode();
+    method public String getUri();
+    method public int getUtf16Offset();
+  }
+
+  public interface DOMStringList {
+    method public boolean contains(String);
+    method public int getLength();
+    method public String item(int);
+  }
+
+  public interface Document extends org.w3c.dom.Node {
+    method public org.w3c.dom.Node adoptNode(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr createAttribute(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr createAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.CDATASection createCDATASection(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Comment createComment(String);
+    method public org.w3c.dom.DocumentFragment createDocumentFragment();
+    method public org.w3c.dom.Element createElement(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Element createElementNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.EntityReference createEntityReference(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.ProcessingInstruction createProcessingInstruction(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Text createTextNode(String);
+    method public org.w3c.dom.DocumentType getDoctype();
+    method public org.w3c.dom.Element getDocumentElement();
+    method public String getDocumentURI();
+    method public org.w3c.dom.DOMConfiguration getDomConfig();
+    method public org.w3c.dom.Element getElementById(String);
+    method public org.w3c.dom.NodeList getElementsByTagName(String);
+    method public org.w3c.dom.NodeList getElementsByTagNameNS(String, String);
+    method public org.w3c.dom.DOMImplementation getImplementation();
+    method public String getInputEncoding();
+    method public boolean getStrictErrorChecking();
+    method public String getXmlEncoding();
+    method public boolean getXmlStandalone();
+    method public String getXmlVersion();
+    method public org.w3c.dom.Node importNode(org.w3c.dom.Node, boolean) throws org.w3c.dom.DOMException;
+    method public void normalizeDocument();
+    method public org.w3c.dom.Node renameNode(org.w3c.dom.Node, String, String) throws org.w3c.dom.DOMException;
+    method public void setDocumentURI(String);
+    method public void setStrictErrorChecking(boolean);
+    method public void setXmlStandalone(boolean) throws org.w3c.dom.DOMException;
+    method public void setXmlVersion(String) throws org.w3c.dom.DOMException;
+  }
+
+  public interface DocumentFragment extends org.w3c.dom.Node {
+  }
+
+  public interface DocumentType extends org.w3c.dom.Node {
+    method public org.w3c.dom.NamedNodeMap getEntities();
+    method public String getInternalSubset();
+    method public String getName();
+    method public org.w3c.dom.NamedNodeMap getNotations();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface Element extends org.w3c.dom.Node {
+    method public String getAttribute(String);
+    method public String getAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr getAttributeNode(String);
+    method public org.w3c.dom.Attr getAttributeNodeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.NodeList getElementsByTagName(String);
+    method public org.w3c.dom.NodeList getElementsByTagNameNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.TypeInfo getSchemaTypeInfo();
+    method public String getTagName();
+    method public boolean hasAttribute(String);
+    method public boolean hasAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public void removeAttribute(String) throws org.w3c.dom.DOMException;
+    method public void removeAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr removeAttributeNode(org.w3c.dom.Attr) throws org.w3c.dom.DOMException;
+    method public void setAttribute(String, String) throws org.w3c.dom.DOMException;
+    method public void setAttributeNS(String, String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr setAttributeNode(org.w3c.dom.Attr) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr setAttributeNodeNS(org.w3c.dom.Attr) throws org.w3c.dom.DOMException;
+    method public void setIdAttribute(String, boolean) throws org.w3c.dom.DOMException;
+    method public void setIdAttributeNS(String, String, boolean) throws org.w3c.dom.DOMException;
+    method public void setIdAttributeNode(org.w3c.dom.Attr, boolean) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Entity extends org.w3c.dom.Node {
+    method public String getInputEncoding();
+    method public String getNotationName();
+    method public String getPublicId();
+    method public String getSystemId();
+    method public String getXmlEncoding();
+    method public String getXmlVersion();
+  }
+
+  public interface EntityReference extends org.w3c.dom.Node {
+  }
+
+  public interface NameList {
+    method public boolean contains(String);
+    method public boolean containsNS(String, String);
+    method public int getLength();
+    method public String getName(int);
+    method public String getNamespaceURI(int);
+  }
+
+  public interface NamedNodeMap {
+    method public int getLength();
+    method public org.w3c.dom.Node getNamedItem(String);
+    method public org.w3c.dom.Node getNamedItemNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node item(int);
+    method public org.w3c.dom.Node removeNamedItem(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node removeNamedItemNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node setNamedItem(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node setNamedItemNS(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Node {
+    method public org.w3c.dom.Node appendChild(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node cloneNode(boolean);
+    method public short compareDocumentPosition(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.NamedNodeMap getAttributes();
+    method public String getBaseURI();
+    method public org.w3c.dom.NodeList getChildNodes();
+    method public Object getFeature(String, String);
+    method public org.w3c.dom.Node getFirstChild();
+    method public org.w3c.dom.Node getLastChild();
+    method public String getLocalName();
+    method public String getNamespaceURI();
+    method public org.w3c.dom.Node getNextSibling();
+    method public String getNodeName();
+    method public short getNodeType();
+    method public String getNodeValue() throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Document getOwnerDocument();
+    method public org.w3c.dom.Node getParentNode();
+    method public String getPrefix();
+    method public org.w3c.dom.Node getPreviousSibling();
+    method public String getTextContent() throws org.w3c.dom.DOMException;
+    method public Object getUserData(String);
+    method public boolean hasAttributes();
+    method public boolean hasChildNodes();
+    method public org.w3c.dom.Node insertBefore(org.w3c.dom.Node, org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public boolean isDefaultNamespace(String);
+    method public boolean isEqualNode(org.w3c.dom.Node);
+    method public boolean isSameNode(org.w3c.dom.Node);
+    method public boolean isSupported(String, String);
+    method public String lookupNamespaceURI(String);
+    method public String lookupPrefix(String);
+    method public void normalize();
+    method public org.w3c.dom.Node removeChild(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node replaceChild(org.w3c.dom.Node, org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public void setNodeValue(String) throws org.w3c.dom.DOMException;
+    method public void setPrefix(String) throws org.w3c.dom.DOMException;
+    method public void setTextContent(String) throws org.w3c.dom.DOMException;
+    method public Object setUserData(String, Object, org.w3c.dom.UserDataHandler);
+    field public static final short ATTRIBUTE_NODE = 2; // 0x2
+    field public static final short CDATA_SECTION_NODE = 4; // 0x4
+    field public static final short COMMENT_NODE = 8; // 0x8
+    field public static final short DOCUMENT_FRAGMENT_NODE = 11; // 0xb
+    field public static final short DOCUMENT_NODE = 9; // 0x9
+    field public static final short DOCUMENT_POSITION_CONTAINED_BY = 16; // 0x10
+    field public static final short DOCUMENT_POSITION_CONTAINS = 8; // 0x8
+    field public static final short DOCUMENT_POSITION_DISCONNECTED = 1; // 0x1
+    field public static final short DOCUMENT_POSITION_FOLLOWING = 4; // 0x4
+    field public static final short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32; // 0x20
+    field public static final short DOCUMENT_POSITION_PRECEDING = 2; // 0x2
+    field public static final short DOCUMENT_TYPE_NODE = 10; // 0xa
+    field public static final short ELEMENT_NODE = 1; // 0x1
+    field public static final short ENTITY_NODE = 6; // 0x6
+    field public static final short ENTITY_REFERENCE_NODE = 5; // 0x5
+    field public static final short NOTATION_NODE = 12; // 0xc
+    field public static final short PROCESSING_INSTRUCTION_NODE = 7; // 0x7
+    field public static final short TEXT_NODE = 3; // 0x3
+  }
+
+  public interface NodeList {
+    method public int getLength();
+    method public org.w3c.dom.Node item(int);
+  }
+
+  public interface Notation extends org.w3c.dom.Node {
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface ProcessingInstruction extends org.w3c.dom.Node {
+    method public String getData();
+    method public String getTarget();
+    method public void setData(String) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Text extends org.w3c.dom.CharacterData {
+    method public String getWholeText();
+    method public boolean isElementContentWhitespace();
+    method public org.w3c.dom.Text replaceWholeText(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Text splitText(int) throws org.w3c.dom.DOMException;
+  }
+
+  public interface TypeInfo {
+    method public String getTypeName();
+    method public String getTypeNamespace();
+    method public boolean isDerivedFrom(String, String, int);
+    field public static final int DERIVATION_EXTENSION = 2; // 0x2
+    field public static final int DERIVATION_LIST = 8; // 0x8
+    field public static final int DERIVATION_RESTRICTION = 1; // 0x1
+    field public static final int DERIVATION_UNION = 4; // 0x4
+  }
+
+  public interface UserDataHandler {
+    method public void handle(short, String, Object, org.w3c.dom.Node, org.w3c.dom.Node);
+    field public static final short NODE_ADOPTED = 5; // 0x5
+    field public static final short NODE_CLONED = 1; // 0x1
+    field public static final short NODE_DELETED = 3; // 0x3
+    field public static final short NODE_IMPORTED = 2; // 0x2
+    field public static final short NODE_RENAMED = 4; // 0x4
+  }
+
+}
+
+package org.w3c.dom.ls {
+
+  public interface DOMImplementationLS {
+    method public org.w3c.dom.ls.LSInput createLSInput();
+    method public org.w3c.dom.ls.LSOutput createLSOutput();
+    method public org.w3c.dom.ls.LSParser createLSParser(short, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.ls.LSSerializer createLSSerializer();
+    field public static final short MODE_ASYNCHRONOUS = 2; // 0x2
+    field public static final short MODE_SYNCHRONOUS = 1; // 0x1
+  }
+
+  public class LSException extends java.lang.RuntimeException {
+    ctor public LSException(short, String);
+    field public static final short PARSE_ERR = 81; // 0x51
+    field public static final short SERIALIZE_ERR = 82; // 0x52
+    field public short code;
+  }
+
+  public interface LSInput {
+    method public String getBaseURI();
+    method public java.io.InputStream getByteStream();
+    method public boolean getCertifiedText();
+    method public java.io.Reader getCharacterStream();
+    method public String getEncoding();
+    method public String getPublicId();
+    method public String getStringData();
+    method public String getSystemId();
+    method public void setBaseURI(String);
+    method public void setByteStream(java.io.InputStream);
+    method public void setCertifiedText(boolean);
+    method public void setCharacterStream(java.io.Reader);
+    method public void setEncoding(String);
+    method public void setPublicId(String);
+    method public void setStringData(String);
+    method public void setSystemId(String);
+  }
+
+  public interface LSOutput {
+    method public java.io.OutputStream getByteStream();
+    method public java.io.Writer getCharacterStream();
+    method public String getEncoding();
+    method public String getSystemId();
+    method public void setByteStream(java.io.OutputStream);
+    method public void setCharacterStream(java.io.Writer);
+    method public void setEncoding(String);
+    method public void setSystemId(String);
+  }
+
+  public interface LSParser {
+    method public void abort();
+    method public boolean getAsync();
+    method public boolean getBusy();
+    method public org.w3c.dom.DOMConfiguration getDomConfig();
+    method public org.w3c.dom.ls.LSParserFilter getFilter();
+    method public org.w3c.dom.Document parse(org.w3c.dom.ls.LSInput) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public org.w3c.dom.Document parseURI(String) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public org.w3c.dom.Node parseWithContext(org.w3c.dom.ls.LSInput, org.w3c.dom.Node, short) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public void setFilter(org.w3c.dom.ls.LSParserFilter);
+    field public static final short ACTION_APPEND_AS_CHILDREN = 1; // 0x1
+    field public static final short ACTION_INSERT_AFTER = 4; // 0x4
+    field public static final short ACTION_INSERT_BEFORE = 3; // 0x3
+    field public static final short ACTION_REPLACE = 5; // 0x5
+    field public static final short ACTION_REPLACE_CHILDREN = 2; // 0x2
+  }
+
+  public interface LSParserFilter {
+    method public short acceptNode(org.w3c.dom.Node);
+    method public int getWhatToShow();
+    method public short startElement(org.w3c.dom.Element);
+    field public static final short FILTER_ACCEPT = 1; // 0x1
+    field public static final short FILTER_INTERRUPT = 4; // 0x4
+    field public static final short FILTER_REJECT = 2; // 0x2
+    field public static final short FILTER_SKIP = 3; // 0x3
+  }
+
+  public interface LSResourceResolver {
+    method public org.w3c.dom.ls.LSInput resolveResource(String, String, String, String, String);
+  }
+
+  public interface LSSerializer {
+    method public org.w3c.dom.DOMConfiguration getDomConfig();
+    method public String getNewLine();
+    method public void setNewLine(String);
+    method public boolean write(org.w3c.dom.Node, org.w3c.dom.ls.LSOutput) throws org.w3c.dom.ls.LSException;
+    method public String writeToString(org.w3c.dom.Node) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public boolean writeToURI(org.w3c.dom.Node, String) throws org.w3c.dom.ls.LSException;
+  }
+
+}
+
+package org.xml.sax {
+
+  @Deprecated public interface AttributeList {
+    method @Deprecated public int getLength();
+    method @Deprecated public String getName(int);
+    method @Deprecated public String getType(int);
+    method @Deprecated public String getType(String);
+    method @Deprecated public String getValue(int);
+    method @Deprecated public String getValue(String);
+  }
+
+  public interface Attributes {
+    method public int getIndex(String, String);
+    method public int getIndex(String);
+    method public int getLength();
+    method public String getLocalName(int);
+    method public String getQName(int);
+    method public String getType(int);
+    method public String getType(String, String);
+    method public String getType(String);
+    method public String getURI(int);
+    method public String getValue(int);
+    method public String getValue(String, String);
+    method public String getValue(String);
+  }
+
+  public interface ContentHandler {
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String) throws org.xml.sax.SAXException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String) throws org.xml.sax.SAXException;
+  }
+
+  public interface DTDHandler {
+    method public void notationDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void unparsedEntityDecl(String, String, String, String) throws org.xml.sax.SAXException;
+  }
+
+  @Deprecated public interface DocumentHandler {
+    method @Deprecated public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void endDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void endElement(String) throws org.xml.sax.SAXException;
+    method @Deprecated public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method @Deprecated public void setDocumentLocator(org.xml.sax.Locator);
+    method @Deprecated public void startDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void startElement(String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException;
+  }
+
+  public interface EntityResolver {
+    method public org.xml.sax.InputSource resolveEntity(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+  }
+
+  public interface ErrorHandler {
+    method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  @Deprecated public class HandlerBase implements org.xml.sax.DTDHandler org.xml.sax.DocumentHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler {
+    ctor @Deprecated public HandlerBase();
+    method @Deprecated public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void endDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void endElement(String) throws org.xml.sax.SAXException;
+    method @Deprecated public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method @Deprecated public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method @Deprecated public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void notationDecl(String, String, String);
+    method @Deprecated public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method @Deprecated public org.xml.sax.InputSource resolveEntity(String, String) throws org.xml.sax.SAXException;
+    method @Deprecated public void setDocumentLocator(org.xml.sax.Locator);
+    method @Deprecated public void startDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void startElement(String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException;
+    method @Deprecated public void unparsedEntityDecl(String, String, String, String);
+    method @Deprecated public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  public class InputSource {
+    ctor public InputSource();
+    ctor public InputSource(String);
+    ctor public InputSource(java.io.InputStream);
+    ctor public InputSource(java.io.Reader);
+    method public java.io.InputStream getByteStream();
+    method public java.io.Reader getCharacterStream();
+    method public String getEncoding();
+    method public String getPublicId();
+    method public String getSystemId();
+    method public void setByteStream(java.io.InputStream);
+    method public void setCharacterStream(java.io.Reader);
+    method public void setEncoding(String);
+    method public void setPublicId(String);
+    method public void setSystemId(String);
+  }
+
+  public interface Locator {
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  @Deprecated public interface Parser {
+    method @Deprecated public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method @Deprecated public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method @Deprecated public void setDTDHandler(org.xml.sax.DTDHandler);
+    method @Deprecated public void setDocumentHandler(org.xml.sax.DocumentHandler);
+    method @Deprecated public void setEntityResolver(org.xml.sax.EntityResolver);
+    method @Deprecated public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method @Deprecated public void setLocale(java.util.Locale) throws org.xml.sax.SAXException;
+  }
+
+  public class SAXException extends java.lang.Exception {
+    ctor public SAXException();
+    ctor public SAXException(String);
+    ctor public SAXException(Exception);
+    ctor public SAXException(String, Exception);
+    method public Exception getException();
+  }
+
+  public class SAXNotRecognizedException extends org.xml.sax.SAXException {
+    ctor public SAXNotRecognizedException();
+    ctor public SAXNotRecognizedException(String);
+  }
+
+  public class SAXNotSupportedException extends org.xml.sax.SAXException {
+    ctor public SAXNotSupportedException();
+    ctor public SAXNotSupportedException(String);
+  }
+
+  public class SAXParseException extends org.xml.sax.SAXException {
+    ctor public SAXParseException(String, org.xml.sax.Locator);
+    ctor public SAXParseException(String, org.xml.sax.Locator, Exception);
+    ctor public SAXParseException(String, String, String, int, int);
+    ctor public SAXParseException(String, String, String, int, int, Exception);
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface XMLFilter extends org.xml.sax.XMLReader {
+    method public org.xml.sax.XMLReader getParent();
+    method public void setParent(org.xml.sax.XMLReader);
+  }
+
+  public interface XMLReader {
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+  }
+
+}
+
+package org.xml.sax.ext {
+
+  public interface Attributes2 extends org.xml.sax.Attributes {
+    method public boolean isDeclared(int);
+    method public boolean isDeclared(String);
+    method public boolean isDeclared(String, String);
+    method public boolean isSpecified(int);
+    method public boolean isSpecified(String, String);
+    method public boolean isSpecified(String);
+  }
+
+  public class Attributes2Impl extends org.xml.sax.helpers.AttributesImpl implements org.xml.sax.ext.Attributes2 {
+    ctor public Attributes2Impl();
+    ctor public Attributes2Impl(org.xml.sax.Attributes);
+    method public boolean isDeclared(int);
+    method public boolean isDeclared(String, String);
+    method public boolean isDeclared(String);
+    method public boolean isSpecified(int);
+    method public boolean isSpecified(String, String);
+    method public boolean isSpecified(String);
+    method public void setDeclared(int, boolean);
+    method public void setSpecified(int, boolean);
+  }
+
+  public interface DeclHandler {
+    method public void attributeDecl(String, String, String, String, String) throws org.xml.sax.SAXException;
+    method public void elementDecl(String, String) throws org.xml.sax.SAXException;
+    method public void externalEntityDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void internalEntityDecl(String, String) throws org.xml.sax.SAXException;
+  }
+
+  public class DefaultHandler2 extends org.xml.sax.helpers.DefaultHandler implements org.xml.sax.ext.DeclHandler org.xml.sax.ext.EntityResolver2 org.xml.sax.ext.LexicalHandler {
+    ctor public DefaultHandler2();
+    method public void attributeDecl(String, String, String, String, String) throws org.xml.sax.SAXException;
+    method public void comment(char[], int, int) throws org.xml.sax.SAXException;
+    method public void elementDecl(String, String) throws org.xml.sax.SAXException;
+    method public void endCDATA() throws org.xml.sax.SAXException;
+    method public void endDTD() throws org.xml.sax.SAXException;
+    method public void endEntity(String) throws org.xml.sax.SAXException;
+    method public void externalEntityDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource getExternalSubset(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void internalEntityDecl(String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String, String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void startCDATA() throws org.xml.sax.SAXException;
+    method public void startDTD(String, String, String) throws org.xml.sax.SAXException;
+    method public void startEntity(String) throws org.xml.sax.SAXException;
+  }
+
+  public interface EntityResolver2 extends org.xml.sax.EntityResolver {
+    method public org.xml.sax.InputSource getExternalSubset(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String, String, String) throws java.io.IOException, org.xml.sax.SAXException;
+  }
+
+  public interface LexicalHandler {
+    method public void comment(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endCDATA() throws org.xml.sax.SAXException;
+    method public void endDTD() throws org.xml.sax.SAXException;
+    method public void endEntity(String) throws org.xml.sax.SAXException;
+    method public void startCDATA() throws org.xml.sax.SAXException;
+    method public void startDTD(String, String, String) throws org.xml.sax.SAXException;
+    method public void startEntity(String) throws org.xml.sax.SAXException;
+  }
+
+  public interface Locator2 extends org.xml.sax.Locator {
+    method public String getEncoding();
+    method public String getXMLVersion();
+  }
+
+  public class Locator2Impl extends org.xml.sax.helpers.LocatorImpl implements org.xml.sax.ext.Locator2 {
+    ctor public Locator2Impl();
+    ctor public Locator2Impl(org.xml.sax.Locator);
+    method public String getEncoding();
+    method public String getXMLVersion();
+    method public void setEncoding(String);
+    method public void setXMLVersion(String);
+  }
+
+}
+
+package org.xml.sax.helpers {
+
+  @Deprecated public class AttributeListImpl implements org.xml.sax.AttributeList {
+    ctor @Deprecated public AttributeListImpl();
+    ctor @Deprecated public AttributeListImpl(org.xml.sax.AttributeList);
+    method @Deprecated public void addAttribute(String, String, String);
+    method @Deprecated public void clear();
+    method @Deprecated public int getLength();
+    method @Deprecated public String getName(int);
+    method @Deprecated public String getType(int);
+    method @Deprecated public String getType(String);
+    method @Deprecated public String getValue(int);
+    method @Deprecated public String getValue(String);
+    method @Deprecated public void removeAttribute(String);
+    method @Deprecated public void setAttributeList(org.xml.sax.AttributeList);
+  }
+
+  public class AttributesImpl implements org.xml.sax.Attributes {
+    ctor public AttributesImpl();
+    ctor public AttributesImpl(org.xml.sax.Attributes);
+    method public void addAttribute(String, String, String, String, String);
+    method public void clear();
+    method public int getIndex(String, String);
+    method public int getIndex(String);
+    method public int getLength();
+    method public String getLocalName(int);
+    method public String getQName(int);
+    method public String getType(int);
+    method public String getType(String, String);
+    method public String getType(String);
+    method public String getURI(int);
+    method public String getValue(int);
+    method public String getValue(String, String);
+    method public String getValue(String);
+    method public void removeAttribute(int);
+    method public void setAttribute(int, String, String, String, String, String);
+    method public void setAttributes(org.xml.sax.Attributes);
+    method public void setLocalName(int, String);
+    method public void setQName(int, String);
+    method public void setType(int, String);
+    method public void setURI(int, String);
+    method public void setValue(int, String);
+  }
+
+  public class DefaultHandler implements org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler {
+    ctor public DefaultHandler();
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String) throws org.xml.sax.SAXException;
+    method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void notationDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String) throws org.xml.sax.SAXException;
+    method public void unparsedEntityDecl(String, String, String, String) throws org.xml.sax.SAXException;
+    method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  public class LocatorImpl implements org.xml.sax.Locator {
+    ctor public LocatorImpl();
+    ctor public LocatorImpl(org.xml.sax.Locator);
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+    method public void setColumnNumber(int);
+    method public void setLineNumber(int);
+    method public void setPublicId(String);
+    method public void setSystemId(String);
+  }
+
+  public class NamespaceSupport {
+    ctor public NamespaceSupport();
+    method public boolean declarePrefix(String, String);
+    method public java.util.Enumeration getDeclaredPrefixes();
+    method public String getPrefix(String);
+    method public java.util.Enumeration getPrefixes();
+    method public java.util.Enumeration getPrefixes(String);
+    method public String getURI(String);
+    method public boolean isNamespaceDeclUris();
+    method public void popContext();
+    method public String[] processName(String, String[], boolean);
+    method public void pushContext();
+    method public void reset();
+    method public void setNamespaceDeclUris(boolean);
+    field public static final String NSDECL = "http://www.w3.org/xmlns/2000/";
+    field public static final String XMLNS = "http://www.w3.org/XML/1998/namespace";
+  }
+
+  public class ParserAdapter implements org.xml.sax.DocumentHandler org.xml.sax.XMLReader {
+    ctor public ParserAdapter() throws org.xml.sax.SAXException;
+    ctor public ParserAdapter(org.xml.sax.Parser);
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException;
+  }
+
+  @Deprecated public class ParserFactory {
+    method @Deprecated public static org.xml.sax.Parser makeParser() throws java.lang.ClassCastException, java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.NullPointerException;
+    method @Deprecated public static org.xml.sax.Parser makeParser(String) throws java.lang.ClassCastException, java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public class XMLFilterImpl implements org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler org.xml.sax.XMLFilter {
+    ctor public XMLFilterImpl();
+    ctor public XMLFilterImpl(org.xml.sax.XMLReader);
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String) throws org.xml.sax.SAXException;
+    method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public org.xml.sax.XMLReader getParent();
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void notationDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setParent(org.xml.sax.XMLReader);
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String) throws org.xml.sax.SAXException;
+    method public void unparsedEntityDecl(String, String, String, String) throws org.xml.sax.SAXException;
+    method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  public class XMLReaderAdapter implements org.xml.sax.ContentHandler org.xml.sax.Parser {
+    ctor public XMLReaderAdapter() throws org.xml.sax.SAXException;
+    ctor public XMLReaderAdapter(org.xml.sax.XMLReader);
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String);
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setDocumentHandler(org.xml.sax.DocumentHandler);
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setLocale(java.util.Locale) throws org.xml.sax.SAXException;
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String);
+  }
+
+  public final class XMLReaderFactory {
+    method public static org.xml.sax.XMLReader createXMLReader() throws org.xml.sax.SAXException;
+    method public static org.xml.sax.XMLReader createXMLReader(String) throws org.xml.sax.SAXException;
+  }
+
+}
+
+package org.xmlpull.v1 {
+
+  public interface XmlPullParser {
+    method public void defineEntityReplacementText(String, String) throws org.xmlpull.v1.XmlPullParserException;
+    method public int getAttributeCount();
+    method public String getAttributeName(int);
+    method public String getAttributeNamespace(int);
+    method public String getAttributePrefix(int);
+    method public String getAttributeType(int);
+    method public String getAttributeValue(int);
+    method public String getAttributeValue(String, String);
+    method public int getColumnNumber();
+    method public int getDepth();
+    method public int getEventType() throws org.xmlpull.v1.XmlPullParserException;
+    method public boolean getFeature(String);
+    method public String getInputEncoding();
+    method public int getLineNumber();
+    method public String getName();
+    method public String getNamespace(String);
+    method public String getNamespace();
+    method public int getNamespaceCount(int) throws org.xmlpull.v1.XmlPullParserException;
+    method public String getNamespacePrefix(int) throws org.xmlpull.v1.XmlPullParserException;
+    method public String getNamespaceUri(int) throws org.xmlpull.v1.XmlPullParserException;
+    method public String getPositionDescription();
+    method public String getPrefix();
+    method public Object getProperty(String);
+    method public String getText();
+    method public char[] getTextCharacters(int[]);
+    method public boolean isAttributeDefault(int);
+    method public boolean isEmptyElementTag() throws org.xmlpull.v1.XmlPullParserException;
+    method public boolean isWhitespace() throws org.xmlpull.v1.XmlPullParserException;
+    method public int next() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int nextTag() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public String nextText() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int nextToken() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void require(int, String, String) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void setFeature(String, boolean) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setInput(java.io.Reader) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setInput(java.io.InputStream, String) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setProperty(String, Object) throws org.xmlpull.v1.XmlPullParserException;
+    field public static final int CDSECT = 5; // 0x5
+    field public static final int COMMENT = 9; // 0x9
+    field public static final int DOCDECL = 10; // 0xa
+    field public static final int END_DOCUMENT = 1; // 0x1
+    field public static final int END_TAG = 3; // 0x3
+    field public static final int ENTITY_REF = 6; // 0x6
+    field public static final String FEATURE_PROCESS_DOCDECL = "http://xmlpull.org/v1/doc/features.html#process-docdecl";
+    field public static final String FEATURE_PROCESS_NAMESPACES = "http://xmlpull.org/v1/doc/features.html#process-namespaces";
+    field public static final String FEATURE_REPORT_NAMESPACE_ATTRIBUTES = "http://xmlpull.org/v1/doc/features.html#report-namespace-prefixes";
+    field public static final String FEATURE_VALIDATION = "http://xmlpull.org/v1/doc/features.html#validation";
+    field public static final int IGNORABLE_WHITESPACE = 7; // 0x7
+    field public static final String NO_NAMESPACE = "";
+    field public static final int PROCESSING_INSTRUCTION = 8; // 0x8
+    field public static final int START_DOCUMENT = 0; // 0x0
+    field public static final int START_TAG = 2; // 0x2
+    field public static final int TEXT = 4; // 0x4
+    field public static final String[] TYPES;
+  }
+
+  public class XmlPullParserException extends java.lang.Exception {
+    ctor public XmlPullParserException(String);
+    ctor public XmlPullParserException(String, org.xmlpull.v1.XmlPullParser, Throwable);
+    method public int getColumnNumber();
+    method public Throwable getDetail();
+    method public int getLineNumber();
+    field protected int column;
+    field protected Throwable detail;
+    field protected int row;
+  }
+
+  public class XmlPullParserFactory {
+    ctor protected XmlPullParserFactory();
+    method public boolean getFeature(String);
+    method public boolean isNamespaceAware();
+    method public boolean isValidating();
+    method public static org.xmlpull.v1.XmlPullParserFactory newInstance() throws org.xmlpull.v1.XmlPullParserException;
+    method public static org.xmlpull.v1.XmlPullParserFactory newInstance(String, Class) throws org.xmlpull.v1.XmlPullParserException;
+    method public org.xmlpull.v1.XmlPullParser newPullParser() throws org.xmlpull.v1.XmlPullParserException;
+    method public org.xmlpull.v1.XmlSerializer newSerializer() throws org.xmlpull.v1.XmlPullParserException;
+    method public void setFeature(String, boolean) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setNamespaceAware(boolean);
+    method public void setValidating(boolean);
+    field public static final String PROPERTY_NAME = "org.xmlpull.v1.XmlPullParserFactory";
+    field protected String classNamesLocation;
+    field protected java.util.HashMap<java.lang.String,java.lang.Boolean> features;
+    field protected java.util.ArrayList parserClasses;
+    field protected java.util.ArrayList serializerClasses;
+  }
+
+  public interface XmlSerializer {
+    method public org.xmlpull.v1.XmlSerializer attribute(String, String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void cdsect(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void comment(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void docdecl(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void endDocument() throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer endTag(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void entityRef(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void flush() throws java.io.IOException;
+    method public int getDepth();
+    method public boolean getFeature(String);
+    method public String getName();
+    method public String getNamespace();
+    method public String getPrefix(String, boolean) throws java.lang.IllegalArgumentException;
+    method public Object getProperty(String);
+    method public void ignorableWhitespace(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void processingInstruction(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setFeature(String, boolean) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setOutput(java.io.OutputStream, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setOutput(java.io.Writer) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setPrefix(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setProperty(String, Object) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void startDocument(String, Boolean) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer startTag(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer text(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer text(char[], int, int) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+  }
+
+}
+
+package org.xmlpull.v1.sax2 {
+
+  public class Driver implements org.xml.sax.Attributes org.xml.sax.Locator org.xml.sax.XMLReader {
+    ctor public Driver() throws org.xmlpull.v1.XmlPullParserException;
+    ctor public Driver(org.xmlpull.v1.XmlPullParser) throws org.xmlpull.v1.XmlPullParserException;
+    method public int getColumnNumber();
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public int getIndex(String, String);
+    method public int getIndex(String);
+    method public int getLength();
+    method public int getLineNumber();
+    method public String getLocalName(int);
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public String getPublicId();
+    method public String getQName(int);
+    method public String getSystemId();
+    method public String getType(int);
+    method public String getType(String, String);
+    method public String getType(String);
+    method public String getURI(int);
+    method public String getValue(int);
+    method public String getValue(String, String);
+    method public String getValue(String);
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parseSubTree(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method protected void startElement(String, String, String) throws org.xml.sax.SAXException;
+    field protected static final String APACHE_DYNAMIC_VALIDATION_FEATURE = "http://apache.org/xml/features/validation/dynamic";
+    field protected static final String APACHE_SCHEMA_VALIDATION_FEATURE = "http://apache.org/xml/features/validation/schema";
+    field protected static final String DECLARATION_HANDLER_PROPERTY = "http://xml.org/sax/properties/declaration-handler";
+    field protected static final String LEXICAL_HANDLER_PROPERTY = "http://xml.org/sax/properties/lexical-handler";
+    field protected static final String NAMESPACES_FEATURE = "http://xml.org/sax/features/namespaces";
+    field protected static final String NAMESPACE_PREFIXES_FEATURE = "http://xml.org/sax/features/namespace-prefixes";
+    field protected static final String VALIDATION_FEATURE = "http://xml.org/sax/features/validation";
+    field protected org.xml.sax.ContentHandler contentHandler;
+    field protected org.xml.sax.ErrorHandler errorHandler;
+    field protected org.xmlpull.v1.XmlPullParser pp;
+    field protected String systemId;
+  }
+
+}
+
diff --git a/32/public/api/art-removed.txt b/32/public/api/art-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/art-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/art.txt b/32/public/api/art.txt
new file mode 100644
index 0000000..5276996
--- /dev/null
+++ b/32/public/api/art.txt
@@ -0,0 +1,20388 @@
+// Signature format: 2.0
+package android.system {
+
+  public final class ErrnoException extends java.lang.Exception {
+    ctor public ErrnoException(String, int);
+    ctor public ErrnoException(String, int, Throwable);
+    method @NonNull public java.io.IOException rethrowAsIOException() throws java.io.IOException;
+    method @NonNull public java.net.SocketException rethrowAsSocketException() throws java.net.SocketException;
+    field public final int errno;
+  }
+
+  public class Int64Ref {
+    ctor public Int64Ref(long);
+    field public long value;
+  }
+
+  public final class Os {
+    method public static java.io.FileDescriptor accept(java.io.FileDescriptor, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static boolean access(String, int) throws android.system.ErrnoException;
+    method public static void bind(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void bind(@NonNull java.io.FileDescriptor, @NonNull java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void chmod(String, int) throws android.system.ErrnoException;
+    method public static void chown(String, int, int) throws android.system.ErrnoException;
+    method public static void close(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void connect(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void connect(@NonNull java.io.FileDescriptor, @NonNull java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static java.io.FileDescriptor dup(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor dup2(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static String[] environ();
+    method public static void execv(String, String[]) throws android.system.ErrnoException;
+    method public static void execve(String, String[], String[]) throws android.system.ErrnoException;
+    method public static void fchmod(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static void fchown(java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static int fcntlInt(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static void fdatasync(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static android.system.StructStat fstat(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static android.system.StructStatVfs fstatvfs(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void fsync(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void ftruncate(java.io.FileDescriptor, long) throws android.system.ErrnoException;
+    method public static String gai_strerror(int);
+    method public static int getegid();
+    method public static String getenv(String);
+    method public static int geteuid();
+    method public static int getgid();
+    method public static java.net.SocketAddress getpeername(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static int getpid();
+    method public static int getppid();
+    method public static java.net.SocketAddress getsockname(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method @NonNull public static android.system.StructTimeval getsockoptTimeval(@NonNull java.io.FileDescriptor, int, int) throws android.system.ErrnoException;
+    method public static int gettid();
+    method public static int getuid();
+    method public static byte[] getxattr(String, String) throws android.system.ErrnoException;
+    method public static String if_indextoname(int);
+    method public static int if_nametoindex(String);
+    method public static java.net.InetAddress inet_pton(int, String);
+    method public static boolean isatty(java.io.FileDescriptor);
+    method public static void kill(int, int) throws android.system.ErrnoException;
+    method public static void lchown(String, int, int) throws android.system.ErrnoException;
+    method public static void link(String, String) throws android.system.ErrnoException;
+    method public static void listen(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static String[] listxattr(String) throws android.system.ErrnoException;
+    method public static long lseek(java.io.FileDescriptor, long, int) throws android.system.ErrnoException;
+    method public static android.system.StructStat lstat(String) throws android.system.ErrnoException;
+    method @NonNull public static java.io.FileDescriptor memfd_create(@NonNull String, int) throws android.system.ErrnoException;
+    method public static void mincore(long, long, byte[]) throws android.system.ErrnoException;
+    method public static void mkdir(String, int) throws android.system.ErrnoException;
+    method public static void mkfifo(String, int) throws android.system.ErrnoException;
+    method public static void mlock(long, long) throws android.system.ErrnoException;
+    method public static long mmap(long, long, int, int, java.io.FileDescriptor, long) throws android.system.ErrnoException;
+    method public static void msync(long, long, int) throws android.system.ErrnoException;
+    method public static void munlock(long, long) throws android.system.ErrnoException;
+    method public static void munmap(long, long) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor open(String, int, int) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor[] pipe() throws android.system.ErrnoException;
+    method public static int poll(android.system.StructPollfd[], int) throws android.system.ErrnoException;
+    method public static void posix_fallocate(java.io.FileDescriptor, long, long) throws android.system.ErrnoException;
+    method public static int prctl(int, long, long, long, long) throws android.system.ErrnoException;
+    method public static int pread(java.io.FileDescriptor, java.nio.ByteBuffer, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int pread(java.io.FileDescriptor, byte[], int, int, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int pwrite(java.io.FileDescriptor, java.nio.ByteBuffer, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int pwrite(java.io.FileDescriptor, byte[], int, int, long) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int read(java.io.FileDescriptor, java.nio.ByteBuffer) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int read(java.io.FileDescriptor, byte[], int, int) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static String readlink(String) throws android.system.ErrnoException;
+    method public static int readv(java.io.FileDescriptor, Object[], int[], int[]) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int recvfrom(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int recvfrom(java.io.FileDescriptor, byte[], int, int, int, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int recvmsg(@NonNull java.io.FileDescriptor, @NonNull android.system.StructMsghdr, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static void remove(String) throws android.system.ErrnoException;
+    method public static void removexattr(String, String) throws android.system.ErrnoException;
+    method public static void rename(String, String) throws android.system.ErrnoException;
+    method public static long sendfile(java.io.FileDescriptor, java.io.FileDescriptor, android.system.Int64Ref, long) throws android.system.ErrnoException;
+    method public static int sendmsg(@NonNull java.io.FileDescriptor, @NonNull android.system.StructMsghdr, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int sendto(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+    method public static int sendto(@NonNull java.io.FileDescriptor, @NonNull byte[], int, int, int, @Nullable java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
+    method @Deprecated public static void setegid(int) throws android.system.ErrnoException;
+    method public static void setenv(String, String, boolean) throws android.system.ErrnoException;
+    method @Deprecated public static void seteuid(int) throws android.system.ErrnoException;
+    method @Deprecated public static void setgid(int) throws android.system.ErrnoException;
+    method public static int setsid() throws android.system.ErrnoException;
+    method public static void setsockoptInt(java.io.FileDescriptor, int, int, int) throws android.system.ErrnoException;
+    method public static void setsockoptTimeval(@NonNull java.io.FileDescriptor, int, int, @NonNull android.system.StructTimeval) throws android.system.ErrnoException;
+    method @Deprecated public static void setuid(int) throws android.system.ErrnoException;
+    method public static void setxattr(String, String, byte[], int) throws android.system.ErrnoException;
+    method public static void shutdown(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static java.io.FileDescriptor socket(int, int, int) throws android.system.ErrnoException;
+    method public static void socketpair(int, int, int, java.io.FileDescriptor, java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static android.system.StructStat stat(String) throws android.system.ErrnoException;
+    method public static android.system.StructStatVfs statvfs(String) throws android.system.ErrnoException;
+    method public static String strerror(int);
+    method public static String strsignal(int);
+    method public static void symlink(String, String) throws android.system.ErrnoException;
+    method public static long sysconf(int);
+    method public static void tcdrain(java.io.FileDescriptor) throws android.system.ErrnoException;
+    method public static void tcsendbreak(java.io.FileDescriptor, int) throws android.system.ErrnoException;
+    method public static int umask(int);
+    method public static android.system.StructUtsname uname();
+    method public static void unsetenv(String) throws android.system.ErrnoException;
+    method public static int write(java.io.FileDescriptor, java.nio.ByteBuffer) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int write(java.io.FileDescriptor, byte[], int, int) throws android.system.ErrnoException, java.io.InterruptedIOException;
+    method public static int writev(java.io.FileDescriptor, Object[], int[], int[]) throws android.system.ErrnoException, java.io.InterruptedIOException;
+  }
+
+  public final class OsConstants {
+    method public static boolean S_ISBLK(int);
+    method public static boolean S_ISCHR(int);
+    method public static boolean S_ISDIR(int);
+    method public static boolean S_ISFIFO(int);
+    method public static boolean S_ISLNK(int);
+    method public static boolean S_ISREG(int);
+    method public static boolean S_ISSOCK(int);
+    method public static boolean WCOREDUMP(int);
+    method public static int WEXITSTATUS(int);
+    method public static boolean WIFEXITED(int);
+    method public static boolean WIFSIGNALED(int);
+    method public static boolean WIFSTOPPED(int);
+    method public static int WSTOPSIG(int);
+    method public static int WTERMSIG(int);
+    method public static String errnoName(int);
+    method public static String gaiName(int);
+    field public static final int AF_INET;
+    field public static final int AF_INET6;
+    field public static final int AF_NETLINK;
+    field public static final int AF_PACKET;
+    field public static final int AF_UNIX;
+    field public static final int AF_UNSPEC;
+    field public static final int AF_VSOCK;
+    field public static final int AI_ADDRCONFIG;
+    field public static final int AI_ALL;
+    field public static final int AI_CANONNAME;
+    field public static final int AI_NUMERICHOST;
+    field public static final int AI_NUMERICSERV;
+    field public static final int AI_PASSIVE;
+    field public static final int AI_V4MAPPED;
+    field public static final int ARPHRD_ETHER;
+    field public static final int CAP_AUDIT_CONTROL;
+    field public static final int CAP_AUDIT_WRITE;
+    field public static final int CAP_BLOCK_SUSPEND;
+    field public static final int CAP_CHOWN;
+    field public static final int CAP_DAC_OVERRIDE;
+    field public static final int CAP_DAC_READ_SEARCH;
+    field public static final int CAP_FOWNER;
+    field public static final int CAP_FSETID;
+    field public static final int CAP_IPC_LOCK;
+    field public static final int CAP_IPC_OWNER;
+    field public static final int CAP_KILL;
+    field public static final int CAP_LAST_CAP;
+    field public static final int CAP_LEASE;
+    field public static final int CAP_LINUX_IMMUTABLE;
+    field public static final int CAP_MAC_ADMIN;
+    field public static final int CAP_MAC_OVERRIDE;
+    field public static final int CAP_MKNOD;
+    field public static final int CAP_NET_ADMIN;
+    field public static final int CAP_NET_BIND_SERVICE;
+    field public static final int CAP_NET_BROADCAST;
+    field public static final int CAP_NET_RAW;
+    field public static final int CAP_SETFCAP;
+    field public static final int CAP_SETGID;
+    field public static final int CAP_SETPCAP;
+    field public static final int CAP_SETUID;
+    field public static final int CAP_SYSLOG;
+    field public static final int CAP_SYS_ADMIN;
+    field public static final int CAP_SYS_BOOT;
+    field public static final int CAP_SYS_CHROOT;
+    field public static final int CAP_SYS_MODULE;
+    field public static final int CAP_SYS_NICE;
+    field public static final int CAP_SYS_PACCT;
+    field public static final int CAP_SYS_PTRACE;
+    field public static final int CAP_SYS_RAWIO;
+    field public static final int CAP_SYS_RESOURCE;
+    field public static final int CAP_SYS_TIME;
+    field public static final int CAP_SYS_TTY_CONFIG;
+    field public static final int CAP_WAKE_ALARM;
+    field public static final int E2BIG;
+    field public static final int EACCES;
+    field public static final int EADDRINUSE;
+    field public static final int EADDRNOTAVAIL;
+    field public static final int EAFNOSUPPORT;
+    field public static final int EAGAIN;
+    field public static final int EAI_AGAIN;
+    field public static final int EAI_BADFLAGS;
+    field public static final int EAI_FAIL;
+    field public static final int EAI_FAMILY;
+    field public static final int EAI_MEMORY;
+    field public static final int EAI_NODATA;
+    field public static final int EAI_NONAME;
+    field public static final int EAI_OVERFLOW;
+    field public static final int EAI_SERVICE;
+    field public static final int EAI_SOCKTYPE;
+    field public static final int EAI_SYSTEM;
+    field public static final int EALREADY;
+    field public static final int EBADF;
+    field public static final int EBADMSG;
+    field public static final int EBUSY;
+    field public static final int ECANCELED;
+    field public static final int ECHILD;
+    field public static final int ECONNABORTED;
+    field public static final int ECONNREFUSED;
+    field public static final int ECONNRESET;
+    field public static final int EDEADLK;
+    field public static final int EDESTADDRREQ;
+    field public static final int EDOM;
+    field public static final int EDQUOT;
+    field public static final int EEXIST;
+    field public static final int EFAULT;
+    field public static final int EFBIG;
+    field public static final int EHOSTUNREACH;
+    field public static final int EIDRM;
+    field public static final int EILSEQ;
+    field public static final int EINPROGRESS;
+    field public static final int EINTR;
+    field public static final int EINVAL;
+    field public static final int EIO;
+    field public static final int EISCONN;
+    field public static final int EISDIR;
+    field public static final int ELOOP;
+    field public static final int EMFILE;
+    field public static final int EMLINK;
+    field public static final int EMSGSIZE;
+    field public static final int EMULTIHOP;
+    field public static final int ENAMETOOLONG;
+    field public static final int ENETDOWN;
+    field public static final int ENETRESET;
+    field public static final int ENETUNREACH;
+    field public static final int ENFILE;
+    field public static final int ENOBUFS;
+    field public static final int ENODATA;
+    field public static final int ENODEV;
+    field public static final int ENOENT;
+    field public static final int ENOEXEC;
+    field public static final int ENOLCK;
+    field public static final int ENOLINK;
+    field public static final int ENOMEM;
+    field public static final int ENOMSG;
+    field public static final int ENONET;
+    field public static final int ENOPROTOOPT;
+    field public static final int ENOSPC;
+    field public static final int ENOSR;
+    field public static final int ENOSTR;
+    field public static final int ENOSYS;
+    field public static final int ENOTCONN;
+    field public static final int ENOTDIR;
+    field public static final int ENOTEMPTY;
+    field public static final int ENOTSOCK;
+    field public static final int ENOTSUP;
+    field public static final int ENOTTY;
+    field public static final int ENXIO;
+    field public static final int EOPNOTSUPP;
+    field public static final int EOVERFLOW;
+    field public static final int EPERM;
+    field public static final int EPIPE;
+    field public static final int EPROTO;
+    field public static final int EPROTONOSUPPORT;
+    field public static final int EPROTOTYPE;
+    field public static final int ERANGE;
+    field public static final int EROFS;
+    field public static final int ESPIPE;
+    field public static final int ESRCH;
+    field public static final int ESTALE;
+    field public static final int ETH_P_ALL;
+    field public static final int ETH_P_ARP;
+    field public static final int ETH_P_IP;
+    field public static final int ETH_P_IPV6;
+    field public static final int ETIME;
+    field public static final int ETIMEDOUT;
+    field public static final int ETXTBSY;
+    field public static final int EXDEV;
+    field public static final int EXIT_FAILURE;
+    field public static final int EXIT_SUCCESS;
+    field public static final int FD_CLOEXEC;
+    field public static final int FIONREAD;
+    field public static final int F_DUPFD;
+    field public static final int F_DUPFD_CLOEXEC;
+    field public static final int F_GETFD;
+    field public static final int F_GETFL;
+    field public static final int F_GETLK;
+    field public static final int F_GETLK64;
+    field public static final int F_GETOWN;
+    field public static final int F_OK;
+    field public static final int F_RDLCK;
+    field public static final int F_SETFD;
+    field public static final int F_SETFL;
+    field public static final int F_SETLK;
+    field public static final int F_SETLK64;
+    field public static final int F_SETLKW;
+    field public static final int F_SETLKW64;
+    field public static final int F_SETOWN;
+    field public static final int F_UNLCK;
+    field public static final int F_WRLCK;
+    field public static final int ICMP6_ECHO_REPLY;
+    field public static final int ICMP6_ECHO_REQUEST;
+    field public static final int ICMP_ECHO;
+    field public static final int ICMP_ECHOREPLY;
+    field public static final int IFA_F_DADFAILED;
+    field public static final int IFA_F_DEPRECATED;
+    field public static final int IFA_F_HOMEADDRESS;
+    field public static final int IFA_F_NODAD;
+    field public static final int IFA_F_OPTIMISTIC;
+    field public static final int IFA_F_PERMANENT;
+    field public static final int IFA_F_SECONDARY;
+    field public static final int IFA_F_TEMPORARY;
+    field public static final int IFA_F_TENTATIVE;
+    field public static final int IFF_ALLMULTI;
+    field public static final int IFF_AUTOMEDIA;
+    field public static final int IFF_BROADCAST;
+    field public static final int IFF_DEBUG;
+    field public static final int IFF_DYNAMIC;
+    field public static final int IFF_LOOPBACK;
+    field public static final int IFF_MASTER;
+    field public static final int IFF_MULTICAST;
+    field public static final int IFF_NOARP;
+    field public static final int IFF_NOTRAILERS;
+    field public static final int IFF_POINTOPOINT;
+    field public static final int IFF_PORTSEL;
+    field public static final int IFF_PROMISC;
+    field public static final int IFF_RUNNING;
+    field public static final int IFF_SLAVE;
+    field public static final int IFF_UP;
+    field public static final int IPPROTO_ICMP;
+    field public static final int IPPROTO_ICMPV6;
+    field public static final int IPPROTO_IP;
+    field public static final int IPPROTO_IPV6;
+    field public static final int IPPROTO_RAW;
+    field public static final int IPPROTO_TCP;
+    field public static final int IPPROTO_UDP;
+    field public static final int IPV6_CHECKSUM;
+    field public static final int IPV6_MULTICAST_HOPS;
+    field public static final int IPV6_MULTICAST_IF;
+    field public static final int IPV6_MULTICAST_LOOP;
+    field public static final int IPV6_RECVDSTOPTS;
+    field public static final int IPV6_RECVHOPLIMIT;
+    field public static final int IPV6_RECVHOPOPTS;
+    field public static final int IPV6_RECVPKTINFO;
+    field public static final int IPV6_RECVRTHDR;
+    field public static final int IPV6_RECVTCLASS;
+    field public static final int IPV6_TCLASS;
+    field public static final int IPV6_UNICAST_HOPS;
+    field public static final int IPV6_V6ONLY;
+    field public static final int IP_MULTICAST_IF;
+    field public static final int IP_MULTICAST_LOOP;
+    field public static final int IP_MULTICAST_TTL;
+    field public static final int IP_TOS;
+    field public static final int IP_TTL;
+    field public static final int MAP_ANONYMOUS;
+    field public static final int MAP_FIXED;
+    field public static final int MAP_PRIVATE;
+    field public static final int MAP_SHARED;
+    field public static final int MCAST_BLOCK_SOURCE;
+    field public static final int MCAST_JOIN_GROUP;
+    field public static final int MCAST_JOIN_SOURCE_GROUP;
+    field public static final int MCAST_LEAVE_GROUP;
+    field public static final int MCAST_LEAVE_SOURCE_GROUP;
+    field public static final int MCAST_UNBLOCK_SOURCE;
+    field public static final int MCL_CURRENT;
+    field public static final int MCL_FUTURE;
+    field public static final int MFD_CLOEXEC;
+    field public static final int MSG_CTRUNC;
+    field public static final int MSG_DONTROUTE;
+    field public static final int MSG_EOR;
+    field public static final int MSG_OOB;
+    field public static final int MSG_PEEK;
+    field public static final int MSG_TRUNC;
+    field public static final int MSG_WAITALL;
+    field public static final int MS_ASYNC;
+    field public static final int MS_INVALIDATE;
+    field public static final int MS_SYNC;
+    field public static final int NETLINK_INET_DIAG;
+    field public static final int NETLINK_NETFILTER;
+    field public static final int NETLINK_ROUTE;
+    field public static final int NI_DGRAM;
+    field public static final int NI_NAMEREQD;
+    field public static final int NI_NOFQDN;
+    field public static final int NI_NUMERICHOST;
+    field public static final int NI_NUMERICSERV;
+    field public static final int O_ACCMODE;
+    field public static final int O_APPEND;
+    field public static final int O_CLOEXEC;
+    field public static final int O_CREAT;
+    field public static final int O_DSYNC;
+    field public static final int O_EXCL;
+    field public static final int O_NOCTTY;
+    field public static final int O_NOFOLLOW;
+    field public static final int O_NONBLOCK;
+    field public static final int O_RDONLY;
+    field public static final int O_RDWR;
+    field public static final int O_SYNC;
+    field public static final int O_TRUNC;
+    field public static final int O_WRONLY;
+    field public static final int POLLERR;
+    field public static final int POLLHUP;
+    field public static final int POLLIN;
+    field public static final int POLLNVAL;
+    field public static final int POLLOUT;
+    field public static final int POLLPRI;
+    field public static final int POLLRDBAND;
+    field public static final int POLLRDNORM;
+    field public static final int POLLWRBAND;
+    field public static final int POLLWRNORM;
+    field public static final int PROT_EXEC;
+    field public static final int PROT_NONE;
+    field public static final int PROT_READ;
+    field public static final int PROT_WRITE;
+    field public static final int PR_GET_DUMPABLE;
+    field public static final int PR_SET_DUMPABLE;
+    field public static final int PR_SET_NO_NEW_PRIVS;
+    field public static final int RTMGRP_NEIGH;
+    field public static final int RT_SCOPE_HOST;
+    field public static final int RT_SCOPE_LINK;
+    field public static final int RT_SCOPE_NOWHERE;
+    field public static final int RT_SCOPE_SITE;
+    field public static final int RT_SCOPE_UNIVERSE;
+    field public static final int R_OK;
+    field public static final int SEEK_CUR;
+    field public static final int SEEK_END;
+    field public static final int SEEK_SET;
+    field public static final int SHUT_RD;
+    field public static final int SHUT_RDWR;
+    field public static final int SHUT_WR;
+    field public static final int SIGABRT;
+    field public static final int SIGALRM;
+    field public static final int SIGBUS;
+    field public static final int SIGCHLD;
+    field public static final int SIGCONT;
+    field public static final int SIGFPE;
+    field public static final int SIGHUP;
+    field public static final int SIGILL;
+    field public static final int SIGINT;
+    field public static final int SIGIO;
+    field public static final int SIGKILL;
+    field public static final int SIGPIPE;
+    field public static final int SIGPROF;
+    field public static final int SIGPWR;
+    field public static final int SIGQUIT;
+    field public static final int SIGRTMAX;
+    field public static final int SIGRTMIN;
+    field public static final int SIGSEGV;
+    field public static final int SIGSTKFLT;
+    field public static final int SIGSTOP;
+    field public static final int SIGSYS;
+    field public static final int SIGTERM;
+    field public static final int SIGTRAP;
+    field public static final int SIGTSTP;
+    field public static final int SIGTTIN;
+    field public static final int SIGTTOU;
+    field public static final int SIGURG;
+    field public static final int SIGUSR1;
+    field public static final int SIGUSR2;
+    field public static final int SIGVTALRM;
+    field public static final int SIGWINCH;
+    field public static final int SIGXCPU;
+    field public static final int SIGXFSZ;
+    field public static final int SIOCGIFADDR;
+    field public static final int SIOCGIFBRDADDR;
+    field public static final int SIOCGIFDSTADDR;
+    field public static final int SIOCGIFNETMASK;
+    field public static final int SOCK_CLOEXEC;
+    field public static final int SOCK_DGRAM;
+    field public static final int SOCK_NONBLOCK;
+    field public static final int SOCK_RAW;
+    field public static final int SOCK_SEQPACKET;
+    field public static final int SOCK_STREAM;
+    field public static final int SOL_SOCKET;
+    field public static final int SOL_UDP;
+    field public static final int SO_BINDTODEVICE;
+    field public static final int SO_BROADCAST;
+    field public static final int SO_DEBUG;
+    field public static final int SO_DONTROUTE;
+    field public static final int SO_ERROR;
+    field public static final int SO_KEEPALIVE;
+    field public static final int SO_LINGER;
+    field public static final int SO_OOBINLINE;
+    field public static final int SO_PASSCRED;
+    field public static final int SO_PEERCRED;
+    field public static final int SO_RCVBUF;
+    field public static final int SO_RCVLOWAT;
+    field public static final int SO_RCVTIMEO;
+    field public static final int SO_REUSEADDR;
+    field public static final int SO_SNDBUF;
+    field public static final int SO_SNDLOWAT;
+    field public static final int SO_SNDTIMEO;
+    field public static final int SO_TYPE;
+    field public static final int STDERR_FILENO;
+    field public static final int STDIN_FILENO;
+    field public static final int STDOUT_FILENO;
+    field public static final int ST_MANDLOCK;
+    field public static final int ST_NOATIME;
+    field public static final int ST_NODEV;
+    field public static final int ST_NODIRATIME;
+    field public static final int ST_NOEXEC;
+    field public static final int ST_NOSUID;
+    field public static final int ST_RDONLY;
+    field public static final int ST_RELATIME;
+    field public static final int ST_SYNCHRONOUS;
+    field public static final int S_IFBLK;
+    field public static final int S_IFCHR;
+    field public static final int S_IFDIR;
+    field public static final int S_IFIFO;
+    field public static final int S_IFLNK;
+    field public static final int S_IFMT;
+    field public static final int S_IFREG;
+    field public static final int S_IFSOCK;
+    field public static final int S_IRGRP;
+    field public static final int S_IROTH;
+    field public static final int S_IRUSR;
+    field public static final int S_IRWXG;
+    field public static final int S_IRWXO;
+    field public static final int S_IRWXU;
+    field public static final int S_ISGID;
+    field public static final int S_ISUID;
+    field public static final int S_ISVTX;
+    field public static final int S_IWGRP;
+    field public static final int S_IWOTH;
+    field public static final int S_IWUSR;
+    field public static final int S_IXGRP;
+    field public static final int S_IXOTH;
+    field public static final int S_IXUSR;
+    field public static final int TCP_NODELAY;
+    field public static final int TCP_USER_TIMEOUT;
+    field public static final int UDP_GRO;
+    field public static final int UDP_SEGMENT;
+    field public static final int VMADDR_CID_ANY;
+    field public static final int VMADDR_CID_HOST;
+    field public static final int VMADDR_CID_LOCAL;
+    field public static final int VMADDR_PORT_ANY;
+    field public static final int WCONTINUED;
+    field public static final int WEXITED;
+    field public static final int WNOHANG;
+    field public static final int WNOWAIT;
+    field public static final int WSTOPPED;
+    field public static final int WUNTRACED;
+    field public static final int W_OK;
+    field public static final int X_OK;
+    field public static final int _SC_2_CHAR_TERM;
+    field public static final int _SC_2_C_BIND;
+    field public static final int _SC_2_C_DEV;
+    field public static final int _SC_2_C_VERSION;
+    field public static final int _SC_2_FORT_DEV;
+    field public static final int _SC_2_FORT_RUN;
+    field public static final int _SC_2_LOCALEDEF;
+    field public static final int _SC_2_SW_DEV;
+    field public static final int _SC_2_UPE;
+    field public static final int _SC_2_VERSION;
+    field public static final int _SC_AIO_LISTIO_MAX;
+    field public static final int _SC_AIO_MAX;
+    field public static final int _SC_AIO_PRIO_DELTA_MAX;
+    field public static final int _SC_ARG_MAX;
+    field public static final int _SC_ASYNCHRONOUS_IO;
+    field public static final int _SC_ATEXIT_MAX;
+    field public static final int _SC_AVPHYS_PAGES;
+    field public static final int _SC_BC_BASE_MAX;
+    field public static final int _SC_BC_DIM_MAX;
+    field public static final int _SC_BC_SCALE_MAX;
+    field public static final int _SC_BC_STRING_MAX;
+    field public static final int _SC_CHILD_MAX;
+    field public static final int _SC_CLK_TCK;
+    field public static final int _SC_COLL_WEIGHTS_MAX;
+    field public static final int _SC_DELAYTIMER_MAX;
+    field public static final int _SC_EXPR_NEST_MAX;
+    field public static final int _SC_FSYNC;
+    field public static final int _SC_GETGR_R_SIZE_MAX;
+    field public static final int _SC_GETPW_R_SIZE_MAX;
+    field public static final int _SC_IOV_MAX;
+    field public static final int _SC_JOB_CONTROL;
+    field public static final int _SC_LINE_MAX;
+    field public static final int _SC_LOGIN_NAME_MAX;
+    field public static final int _SC_MAPPED_FILES;
+    field public static final int _SC_MEMLOCK;
+    field public static final int _SC_MEMLOCK_RANGE;
+    field public static final int _SC_MEMORY_PROTECTION;
+    field public static final int _SC_MESSAGE_PASSING;
+    field public static final int _SC_MQ_OPEN_MAX;
+    field public static final int _SC_MQ_PRIO_MAX;
+    field public static final int _SC_NGROUPS_MAX;
+    field public static final int _SC_NPROCESSORS_CONF;
+    field public static final int _SC_NPROCESSORS_ONLN;
+    field public static final int _SC_OPEN_MAX;
+    field public static final int _SC_PAGESIZE;
+    field public static final int _SC_PAGE_SIZE;
+    field public static final int _SC_PASS_MAX;
+    field public static final int _SC_PHYS_PAGES;
+    field public static final int _SC_PRIORITIZED_IO;
+    field public static final int _SC_PRIORITY_SCHEDULING;
+    field public static final int _SC_REALTIME_SIGNALS;
+    field public static final int _SC_RE_DUP_MAX;
+    field public static final int _SC_RTSIG_MAX;
+    field public static final int _SC_SAVED_IDS;
+    field public static final int _SC_SEMAPHORES;
+    field public static final int _SC_SEM_NSEMS_MAX;
+    field public static final int _SC_SEM_VALUE_MAX;
+    field public static final int _SC_SHARED_MEMORY_OBJECTS;
+    field public static final int _SC_SIGQUEUE_MAX;
+    field public static final int _SC_STREAM_MAX;
+    field public static final int _SC_SYNCHRONIZED_IO;
+    field public static final int _SC_THREADS;
+    field public static final int _SC_THREAD_ATTR_STACKADDR;
+    field public static final int _SC_THREAD_ATTR_STACKSIZE;
+    field public static final int _SC_THREAD_DESTRUCTOR_ITERATIONS;
+    field public static final int _SC_THREAD_KEYS_MAX;
+    field public static final int _SC_THREAD_PRIORITY_SCHEDULING;
+    field public static final int _SC_THREAD_PRIO_INHERIT;
+    field public static final int _SC_THREAD_PRIO_PROTECT;
+    field public static final int _SC_THREAD_SAFE_FUNCTIONS;
+    field public static final int _SC_THREAD_STACK_MIN;
+    field public static final int _SC_THREAD_THREADS_MAX;
+    field public static final int _SC_TIMERS;
+    field public static final int _SC_TIMER_MAX;
+    field public static final int _SC_TTY_NAME_MAX;
+    field public static final int _SC_TZNAME_MAX;
+    field public static final int _SC_VERSION;
+    field public static final int _SC_XBS5_ILP32_OFF32;
+    field public static final int _SC_XBS5_ILP32_OFFBIG;
+    field public static final int _SC_XBS5_LP64_OFF64;
+    field public static final int _SC_XBS5_LPBIG_OFFBIG;
+    field public static final int _SC_XOPEN_CRYPT;
+    field public static final int _SC_XOPEN_ENH_I18N;
+    field public static final int _SC_XOPEN_LEGACY;
+    field public static final int _SC_XOPEN_REALTIME;
+    field public static final int _SC_XOPEN_REALTIME_THREADS;
+    field public static final int _SC_XOPEN_SHM;
+    field public static final int _SC_XOPEN_UNIX;
+    field public static final int _SC_XOPEN_VERSION;
+    field public static final int _SC_XOPEN_XCU_VERSION;
+  }
+
+  public final class StructCmsghdr {
+    ctor public StructCmsghdr(int, int, short);
+    ctor public StructCmsghdr(int, int, @NonNull byte[]);
+    field @NonNull public final byte[] cmsg_data;
+    field public final int cmsg_level;
+    field public final int cmsg_type;
+  }
+
+  public final class StructMsghdr {
+    ctor public StructMsghdr(@Nullable java.net.SocketAddress, @NonNull java.nio.ByteBuffer[], @Nullable android.system.StructCmsghdr[], int);
+    field @Nullable public android.system.StructCmsghdr[] msg_control;
+    field public int msg_flags;
+    field @NonNull public final java.nio.ByteBuffer[] msg_iov;
+    field @Nullable public java.net.SocketAddress msg_name;
+  }
+
+  public final class StructPollfd {
+    ctor public StructPollfd();
+    field public short events;
+    field public java.io.FileDescriptor fd;
+    field public short revents;
+    field public Object userData;
+  }
+
+  public final class StructStat {
+    ctor public StructStat(long, long, int, long, int, int, long, long, long, long, long, long, long);
+    ctor public StructStat(long, long, int, long, int, int, long, long, android.system.StructTimespec, android.system.StructTimespec, android.system.StructTimespec, long, long);
+    field public final android.system.StructTimespec st_atim;
+    field public final long st_atime;
+    field public final long st_blksize;
+    field public final long st_blocks;
+    field public final android.system.StructTimespec st_ctim;
+    field public final long st_ctime;
+    field public final long st_dev;
+    field public final int st_gid;
+    field public final long st_ino;
+    field public final int st_mode;
+    field public final android.system.StructTimespec st_mtim;
+    field public final long st_mtime;
+    field public final long st_nlink;
+    field public final long st_rdev;
+    field public final long st_size;
+    field public final int st_uid;
+  }
+
+  public final class StructStatVfs {
+    ctor public StructStatVfs(long, long, long, long, long, long, long, long, long, long, long);
+    field public final long f_bavail;
+    field public final long f_bfree;
+    field public final long f_blocks;
+    field public final long f_bsize;
+    field public final long f_favail;
+    field public final long f_ffree;
+    field public final long f_files;
+    field public final long f_flag;
+    field public final long f_frsize;
+    field public final long f_fsid;
+    field public final long f_namemax;
+  }
+
+  public final class StructTimespec implements java.lang.Comparable<android.system.StructTimespec> {
+    ctor public StructTimespec(long, long);
+    method public int compareTo(android.system.StructTimespec);
+    field public final long tv_nsec;
+    field public final long tv_sec;
+  }
+
+  public final class StructTimeval {
+    method @NonNull public static android.system.StructTimeval fromMillis(long);
+    method public long toMillis();
+    field public final long tv_sec;
+    field public final long tv_usec;
+  }
+
+  public final class StructUtsname {
+    ctor public StructUtsname(String, String, String, String, String);
+    field public final String machine;
+    field public final String nodename;
+    field public final String release;
+    field public final String sysname;
+    field public final String version;
+  }
+
+}
+
+package dalvik.annotation {
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.ANNOTATION_TYPE}) public @interface TestTarget {
+    method @Deprecated public abstract String conceptName() default "";
+    method @Deprecated public abstract Class<?>[] methodArgs() default {};
+    method @Deprecated public abstract String methodName() default "";
+  }
+
+  @Deprecated @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public @interface TestTargetClass {
+    method @Deprecated public abstract Class<?> value();
+  }
+
+}
+
+package dalvik.bytecode {
+
+  public final class OpcodeInfo {
+    field public static final int MAXIMUM_PACKED_VALUE;
+    field public static final int MAXIMUM_VALUE;
+  }
+
+  public interface Opcodes {
+    field public static final int OP_ADD_DOUBLE = 171; // 0xab
+    field public static final int OP_ADD_DOUBLE_2ADDR = 203; // 0xcb
+    field public static final int OP_ADD_FLOAT = 166; // 0xa6
+    field public static final int OP_ADD_FLOAT_2ADDR = 198; // 0xc6
+    field public static final int OP_ADD_INT = 144; // 0x90
+    field public static final int OP_ADD_INT_2ADDR = 176; // 0xb0
+    field public static final int OP_ADD_INT_LIT16 = 208; // 0xd0
+    field public static final int OP_ADD_INT_LIT8 = 216; // 0xd8
+    field public static final int OP_ADD_LONG = 155; // 0x9b
+    field public static final int OP_ADD_LONG_2ADDR = 187; // 0xbb
+    field public static final int OP_AGET = 68; // 0x44
+    field public static final int OP_AGET_BOOLEAN = 71; // 0x47
+    field public static final int OP_AGET_BYTE = 72; // 0x48
+    field public static final int OP_AGET_CHAR = 73; // 0x49
+    field public static final int OP_AGET_OBJECT = 70; // 0x46
+    field public static final int OP_AGET_SHORT = 74; // 0x4a
+    field public static final int OP_AGET_WIDE = 69; // 0x45
+    field public static final int OP_AND_INT = 149; // 0x95
+    field public static final int OP_AND_INT_2ADDR = 181; // 0xb5
+    field public static final int OP_AND_INT_LIT16 = 213; // 0xd5
+    field public static final int OP_AND_INT_LIT8 = 221; // 0xdd
+    field public static final int OP_AND_LONG = 160; // 0xa0
+    field public static final int OP_AND_LONG_2ADDR = 192; // 0xc0
+    field public static final int OP_APUT = 75; // 0x4b
+    field public static final int OP_APUT_BOOLEAN = 78; // 0x4e
+    field public static final int OP_APUT_BYTE = 79; // 0x4f
+    field public static final int OP_APUT_CHAR = 80; // 0x50
+    field public static final int OP_APUT_OBJECT = 77; // 0x4d
+    field public static final int OP_APUT_SHORT = 81; // 0x51
+    field public static final int OP_APUT_WIDE = 76; // 0x4c
+    field public static final int OP_ARRAY_LENGTH = 33; // 0x21
+    field @Deprecated public static final int OP_BREAKPOINT = 236; // 0xec
+    field public static final int OP_CHECK_CAST = 31; // 0x1f
+    field public static final int OP_CHECK_CAST_JUMBO = 511; // 0x1ff
+    field public static final int OP_CMPG_DOUBLE = 48; // 0x30
+    field public static final int OP_CMPG_FLOAT = 46; // 0x2e
+    field public static final int OP_CMPL_DOUBLE = 47; // 0x2f
+    field public static final int OP_CMPL_FLOAT = 45; // 0x2d
+    field public static final int OP_CMP_LONG = 49; // 0x31
+    field public static final int OP_CONST = 20; // 0x14
+    field public static final int OP_CONST_16 = 19; // 0x13
+    field public static final int OP_CONST_4 = 18; // 0x12
+    field public static final int OP_CONST_CLASS = 28; // 0x1c
+    field public static final int OP_CONST_CLASS_JUMBO = 255; // 0xff
+    field public static final int OP_CONST_HIGH16 = 21; // 0x15
+    field public static final int OP_CONST_METHOD_HANDLE = 254; // 0xfe
+    field public static final int OP_CONST_METHOD_TYPE = 255; // 0xff
+    field public static final int OP_CONST_STRING = 26; // 0x1a
+    field public static final int OP_CONST_STRING_JUMBO = 27; // 0x1b
+    field public static final int OP_CONST_WIDE = 24; // 0x18
+    field public static final int OP_CONST_WIDE_16 = 22; // 0x16
+    field public static final int OP_CONST_WIDE_32 = 23; // 0x17
+    field public static final int OP_CONST_WIDE_HIGH16 = 25; // 0x19
+    field public static final int OP_DIV_DOUBLE = 174; // 0xae
+    field public static final int OP_DIV_DOUBLE_2ADDR = 206; // 0xce
+    field public static final int OP_DIV_FLOAT = 169; // 0xa9
+    field public static final int OP_DIV_FLOAT_2ADDR = 201; // 0xc9
+    field public static final int OP_DIV_INT = 147; // 0x93
+    field public static final int OP_DIV_INT_2ADDR = 179; // 0xb3
+    field public static final int OP_DIV_INT_LIT16 = 211; // 0xd3
+    field public static final int OP_DIV_INT_LIT8 = 219; // 0xdb
+    field public static final int OP_DIV_LONG = 158; // 0x9e
+    field public static final int OP_DIV_LONG_2ADDR = 190; // 0xbe
+    field public static final int OP_DOUBLE_TO_FLOAT = 140; // 0x8c
+    field public static final int OP_DOUBLE_TO_INT = 138; // 0x8a
+    field public static final int OP_DOUBLE_TO_LONG = 139; // 0x8b
+    field @Deprecated public static final int OP_EXECUTE_INLINE = 238; // 0xee
+    field @Deprecated public static final int OP_EXECUTE_INLINE_RANGE = 239; // 0xef
+    field public static final int OP_FILLED_NEW_ARRAY = 36; // 0x24
+    field public static final int OP_FILLED_NEW_ARRAY_JUMBO = 1535; // 0x5ff
+    field public static final int OP_FILLED_NEW_ARRAY_RANGE = 37; // 0x25
+    field public static final int OP_FILL_ARRAY_DATA = 38; // 0x26
+    field public static final int OP_FLOAT_TO_DOUBLE = 137; // 0x89
+    field public static final int OP_FLOAT_TO_INT = 135; // 0x87
+    field public static final int OP_FLOAT_TO_LONG = 136; // 0x88
+    field public static final int OP_GOTO = 40; // 0x28
+    field public static final int OP_GOTO_16 = 41; // 0x29
+    field public static final int OP_GOTO_32 = 42; // 0x2a
+    field public static final int OP_IF_EQ = 50; // 0x32
+    field public static final int OP_IF_EQZ = 56; // 0x38
+    field public static final int OP_IF_GE = 53; // 0x35
+    field public static final int OP_IF_GEZ = 59; // 0x3b
+    field public static final int OP_IF_GT = 54; // 0x36
+    field public static final int OP_IF_GTZ = 60; // 0x3c
+    field public static final int OP_IF_LE = 55; // 0x37
+    field public static final int OP_IF_LEZ = 61; // 0x3d
+    field public static final int OP_IF_LT = 52; // 0x34
+    field public static final int OP_IF_LTZ = 58; // 0x3a
+    field public static final int OP_IF_NE = 51; // 0x33
+    field public static final int OP_IF_NEZ = 57; // 0x39
+    field public static final int OP_IGET = 82; // 0x52
+    field public static final int OP_IGET_BOOLEAN = 85; // 0x55
+    field public static final int OP_IGET_BOOLEAN_JUMBO = 2559; // 0x9ff
+    field public static final int OP_IGET_BYTE = 86; // 0x56
+    field public static final int OP_IGET_BYTE_JUMBO = 2815; // 0xaff
+    field public static final int OP_IGET_CHAR = 87; // 0x57
+    field public static final int OP_IGET_CHAR_JUMBO = 3071; // 0xbff
+    field public static final int OP_IGET_JUMBO = 1791; // 0x6ff
+    field public static final int OP_IGET_OBJECT = 84; // 0x54
+    field public static final int OP_IGET_OBJECT_JUMBO = 2303; // 0x8ff
+    field @Deprecated public static final int OP_IGET_OBJECT_QUICK = 244; // 0xf4
+    field @Deprecated public static final int OP_IGET_QUICK = 242; // 0xf2
+    field public static final int OP_IGET_SHORT = 88; // 0x58
+    field public static final int OP_IGET_SHORT_JUMBO = 3327; // 0xcff
+    field public static final int OP_IGET_WIDE = 83; // 0x53
+    field public static final int OP_IGET_WIDE_JUMBO = 2047; // 0x7ff
+    field @Deprecated public static final int OP_IGET_WIDE_QUICK = 243; // 0xf3
+    field @Deprecated public static final int OP_IGET_WIDE_VOLATILE = 232; // 0xe8
+    field public static final int OP_INSTANCE_OF = 32; // 0x20
+    field public static final int OP_INSTANCE_OF_JUMBO = 767; // 0x2ff
+    field public static final int OP_INT_TO_BYTE = 141; // 0x8d
+    field public static final int OP_INT_TO_CHAR = 142; // 0x8e
+    field public static final int OP_INT_TO_DOUBLE = 131; // 0x83
+    field public static final int OP_INT_TO_FLOAT = 130; // 0x82
+    field public static final int OP_INT_TO_LONG = 129; // 0x81
+    field public static final int OP_INT_TO_SHORT = 143; // 0x8f
+    field public static final int OP_INVOKE_CUSTOM = 252; // 0xfc
+    field public static final int OP_INVOKE_CUSTOM_RANGE = 253; // 0xfd
+    field public static final int OP_INVOKE_DIRECT = 112; // 0x70
+    field @Deprecated public static final int OP_INVOKE_DIRECT_EMPTY = 240; // 0xf0
+    field public static final int OP_INVOKE_DIRECT_JUMBO = 9471; // 0x24ff
+    field public static final int OP_INVOKE_DIRECT_RANGE = 118; // 0x76
+    field public static final int OP_INVOKE_INTERFACE = 114; // 0x72
+    field public static final int OP_INVOKE_INTERFACE_JUMBO = 9983; // 0x26ff
+    field public static final int OP_INVOKE_INTERFACE_RANGE = 120; // 0x78
+    field public static final int OP_INVOKE_POLYMORPHIC = 250; // 0xfa
+    field public static final int OP_INVOKE_POLYMORPHIC_RANGE = 251; // 0xfb
+    field public static final int OP_INVOKE_STATIC = 113; // 0x71
+    field public static final int OP_INVOKE_STATIC_JUMBO = 9727; // 0x25ff
+    field public static final int OP_INVOKE_STATIC_RANGE = 119; // 0x77
+    field public static final int OP_INVOKE_SUPER = 111; // 0x6f
+    field public static final int OP_INVOKE_SUPER_JUMBO = 9215; // 0x23ff
+    field @Deprecated public static final int OP_INVOKE_SUPER_QUICK = 250; // 0xfa
+    field @Deprecated public static final int OP_INVOKE_SUPER_QUICK_RANGE = 251; // 0xfb
+    field public static final int OP_INVOKE_SUPER_RANGE = 117; // 0x75
+    field public static final int OP_INVOKE_VIRTUAL = 110; // 0x6e
+    field public static final int OP_INVOKE_VIRTUAL_JUMBO = 8959; // 0x22ff
+    field @Deprecated public static final int OP_INVOKE_VIRTUAL_QUICK = 248; // 0xf8
+    field @Deprecated public static final int OP_INVOKE_VIRTUAL_QUICK_RANGE = 249; // 0xf9
+    field public static final int OP_INVOKE_VIRTUAL_RANGE = 116; // 0x74
+    field public static final int OP_IPUT = 89; // 0x59
+    field public static final int OP_IPUT_BOOLEAN = 92; // 0x5c
+    field public static final int OP_IPUT_BOOLEAN_JUMBO = 4351; // 0x10ff
+    field public static final int OP_IPUT_BYTE = 93; // 0x5d
+    field public static final int OP_IPUT_BYTE_JUMBO = 4607; // 0x11ff
+    field public static final int OP_IPUT_CHAR = 94; // 0x5e
+    field public static final int OP_IPUT_CHAR_JUMBO = 4863; // 0x12ff
+    field public static final int OP_IPUT_JUMBO = 3583; // 0xdff
+    field public static final int OP_IPUT_OBJECT = 91; // 0x5b
+    field public static final int OP_IPUT_OBJECT_JUMBO = 4095; // 0xfff
+    field @Deprecated public static final int OP_IPUT_OBJECT_QUICK = 247; // 0xf7
+    field @Deprecated public static final int OP_IPUT_QUICK = 245; // 0xf5
+    field public static final int OP_IPUT_SHORT = 95; // 0x5f
+    field public static final int OP_IPUT_SHORT_JUMBO = 5119; // 0x13ff
+    field public static final int OP_IPUT_WIDE = 90; // 0x5a
+    field public static final int OP_IPUT_WIDE_JUMBO = 3839; // 0xeff
+    field @Deprecated public static final int OP_IPUT_WIDE_QUICK = 246; // 0xf6
+    field @Deprecated public static final int OP_IPUT_WIDE_VOLATILE = 233; // 0xe9
+    field public static final int OP_LONG_TO_DOUBLE = 134; // 0x86
+    field public static final int OP_LONG_TO_FLOAT = 133; // 0x85
+    field public static final int OP_LONG_TO_INT = 132; // 0x84
+    field public static final int OP_MONITOR_ENTER = 29; // 0x1d
+    field public static final int OP_MONITOR_EXIT = 30; // 0x1e
+    field public static final int OP_MOVE = 1; // 0x1
+    field public static final int OP_MOVE_16 = 3; // 0x3
+    field public static final int OP_MOVE_EXCEPTION = 13; // 0xd
+    field public static final int OP_MOVE_FROM16 = 2; // 0x2
+    field public static final int OP_MOVE_OBJECT = 7; // 0x7
+    field public static final int OP_MOVE_OBJECT_16 = 9; // 0x9
+    field public static final int OP_MOVE_OBJECT_FROM16 = 8; // 0x8
+    field public static final int OP_MOVE_RESULT = 10; // 0xa
+    field public static final int OP_MOVE_RESULT_OBJECT = 12; // 0xc
+    field public static final int OP_MOVE_RESULT_WIDE = 11; // 0xb
+    field public static final int OP_MOVE_WIDE = 4; // 0x4
+    field public static final int OP_MOVE_WIDE_16 = 6; // 0x6
+    field public static final int OP_MOVE_WIDE_FROM16 = 5; // 0x5
+    field public static final int OP_MUL_DOUBLE = 173; // 0xad
+    field public static final int OP_MUL_DOUBLE_2ADDR = 205; // 0xcd
+    field public static final int OP_MUL_FLOAT = 168; // 0xa8
+    field public static final int OP_MUL_FLOAT_2ADDR = 200; // 0xc8
+    field public static final int OP_MUL_INT = 146; // 0x92
+    field public static final int OP_MUL_INT_2ADDR = 178; // 0xb2
+    field public static final int OP_MUL_INT_LIT16 = 210; // 0xd2
+    field public static final int OP_MUL_INT_LIT8 = 218; // 0xda
+    field public static final int OP_MUL_LONG = 157; // 0x9d
+    field public static final int OP_MUL_LONG_2ADDR = 189; // 0xbd
+    field public static final int OP_NEG_DOUBLE = 128; // 0x80
+    field public static final int OP_NEG_FLOAT = 127; // 0x7f
+    field public static final int OP_NEG_INT = 123; // 0x7b
+    field public static final int OP_NEG_LONG = 125; // 0x7d
+    field public static final int OP_NEW_ARRAY = 35; // 0x23
+    field public static final int OP_NEW_ARRAY_JUMBO = 1279; // 0x4ff
+    field public static final int OP_NEW_INSTANCE = 34; // 0x22
+    field public static final int OP_NEW_INSTANCE_JUMBO = 1023; // 0x3ff
+    field public static final int OP_NOP = 0; // 0x0
+    field public static final int OP_NOT_INT = 124; // 0x7c
+    field public static final int OP_NOT_LONG = 126; // 0x7e
+    field public static final int OP_OR_INT = 150; // 0x96
+    field public static final int OP_OR_INT_2ADDR = 182; // 0xb6
+    field public static final int OP_OR_INT_LIT16 = 214; // 0xd6
+    field public static final int OP_OR_INT_LIT8 = 222; // 0xde
+    field public static final int OP_OR_LONG = 161; // 0xa1
+    field public static final int OP_OR_LONG_2ADDR = 193; // 0xc1
+    field public static final int OP_PACKED_SWITCH = 43; // 0x2b
+    field public static final int OP_REM_DOUBLE = 175; // 0xaf
+    field public static final int OP_REM_DOUBLE_2ADDR = 207; // 0xcf
+    field public static final int OP_REM_FLOAT = 170; // 0xaa
+    field public static final int OP_REM_FLOAT_2ADDR = 202; // 0xca
+    field public static final int OP_REM_INT = 148; // 0x94
+    field public static final int OP_REM_INT_2ADDR = 180; // 0xb4
+    field public static final int OP_REM_INT_LIT16 = 212; // 0xd4
+    field public static final int OP_REM_INT_LIT8 = 220; // 0xdc
+    field public static final int OP_REM_LONG = 159; // 0x9f
+    field public static final int OP_REM_LONG_2ADDR = 191; // 0xbf
+    field public static final int OP_RETURN = 15; // 0xf
+    field public static final int OP_RETURN_OBJECT = 17; // 0x11
+    field public static final int OP_RETURN_VOID = 14; // 0xe
+    field public static final int OP_RETURN_WIDE = 16; // 0x10
+    field public static final int OP_RSUB_INT = 209; // 0xd1
+    field public static final int OP_RSUB_INT_LIT8 = 217; // 0xd9
+    field public static final int OP_SGET = 96; // 0x60
+    field public static final int OP_SGET_BOOLEAN = 99; // 0x63
+    field public static final int OP_SGET_BOOLEAN_JUMBO = 6143; // 0x17ff
+    field public static final int OP_SGET_BYTE = 100; // 0x64
+    field public static final int OP_SGET_BYTE_JUMBO = 6399; // 0x18ff
+    field public static final int OP_SGET_CHAR = 101; // 0x65
+    field public static final int OP_SGET_CHAR_JUMBO = 6655; // 0x19ff
+    field public static final int OP_SGET_JUMBO = 5375; // 0x14ff
+    field public static final int OP_SGET_OBJECT = 98; // 0x62
+    field public static final int OP_SGET_OBJECT_JUMBO = 5887; // 0x16ff
+    field public static final int OP_SGET_SHORT = 102; // 0x66
+    field public static final int OP_SGET_SHORT_JUMBO = 6911; // 0x1aff
+    field public static final int OP_SGET_WIDE = 97; // 0x61
+    field public static final int OP_SGET_WIDE_JUMBO = 5631; // 0x15ff
+    field @Deprecated public static final int OP_SGET_WIDE_VOLATILE = 234; // 0xea
+    field public static final int OP_SHL_INT = 152; // 0x98
+    field public static final int OP_SHL_INT_2ADDR = 184; // 0xb8
+    field public static final int OP_SHL_INT_LIT8 = 224; // 0xe0
+    field public static final int OP_SHL_LONG = 163; // 0xa3
+    field public static final int OP_SHL_LONG_2ADDR = 195; // 0xc3
+    field public static final int OP_SHR_INT = 153; // 0x99
+    field public static final int OP_SHR_INT_2ADDR = 185; // 0xb9
+    field public static final int OP_SHR_INT_LIT8 = 225; // 0xe1
+    field public static final int OP_SHR_LONG = 164; // 0xa4
+    field public static final int OP_SHR_LONG_2ADDR = 196; // 0xc4
+    field public static final int OP_SPARSE_SWITCH = 44; // 0x2c
+    field public static final int OP_SPUT = 103; // 0x67
+    field public static final int OP_SPUT_BOOLEAN = 106; // 0x6a
+    field public static final int OP_SPUT_BOOLEAN_JUMBO = 7935; // 0x1eff
+    field public static final int OP_SPUT_BYTE = 107; // 0x6b
+    field public static final int OP_SPUT_BYTE_JUMBO = 8191; // 0x1fff
+    field public static final int OP_SPUT_CHAR = 108; // 0x6c
+    field public static final int OP_SPUT_CHAR_JUMBO = 8447; // 0x20ff
+    field public static final int OP_SPUT_JUMBO = 7167; // 0x1bff
+    field public static final int OP_SPUT_OBJECT = 105; // 0x69
+    field public static final int OP_SPUT_OBJECT_JUMBO = 7679; // 0x1dff
+    field public static final int OP_SPUT_SHORT = 109; // 0x6d
+    field public static final int OP_SPUT_SHORT_JUMBO = 8703; // 0x21ff
+    field public static final int OP_SPUT_WIDE = 104; // 0x68
+    field public static final int OP_SPUT_WIDE_JUMBO = 7423; // 0x1cff
+    field @Deprecated public static final int OP_SPUT_WIDE_VOLATILE = 235; // 0xeb
+    field public static final int OP_SUB_DOUBLE = 172; // 0xac
+    field public static final int OP_SUB_DOUBLE_2ADDR = 204; // 0xcc
+    field public static final int OP_SUB_FLOAT = 167; // 0xa7
+    field public static final int OP_SUB_FLOAT_2ADDR = 199; // 0xc7
+    field public static final int OP_SUB_INT = 145; // 0x91
+    field public static final int OP_SUB_INT_2ADDR = 177; // 0xb1
+    field public static final int OP_SUB_LONG = 156; // 0x9c
+    field public static final int OP_SUB_LONG_2ADDR = 188; // 0xbc
+    field public static final int OP_THROW = 39; // 0x27
+    field @Deprecated public static final int OP_THROW_VERIFICATION_ERROR = 237; // 0xed
+    field public static final int OP_USHR_INT = 154; // 0x9a
+    field public static final int OP_USHR_INT_2ADDR = 186; // 0xba
+    field public static final int OP_USHR_INT_LIT8 = 226; // 0xe2
+    field public static final int OP_USHR_LONG = 165; // 0xa5
+    field public static final int OP_USHR_LONG_2ADDR = 197; // 0xc5
+    field public static final int OP_XOR_INT = 151; // 0x97
+    field public static final int OP_XOR_INT_2ADDR = 183; // 0xb7
+    field public static final int OP_XOR_INT_LIT16 = 215; // 0xd7
+    field public static final int OP_XOR_INT_LIT8 = 223; // 0xdf
+    field public static final int OP_XOR_LONG = 162; // 0xa2
+    field public static final int OP_XOR_LONG_2ADDR = 194; // 0xc2
+  }
+
+}
+
+package dalvik.system {
+
+  public class BaseDexClassLoader extends java.lang.ClassLoader {
+    ctor public BaseDexClassLoader(String, java.io.File, String, ClassLoader);
+    method public String findLibrary(String);
+    method protected java.util.Enumeration<java.net.URL> findResources(String);
+  }
+
+  public final class DelegateLastClassLoader extends dalvik.system.PathClassLoader {
+    ctor public DelegateLastClassLoader(String, ClassLoader);
+    ctor public DelegateLastClassLoader(String, String, ClassLoader);
+    ctor public DelegateLastClassLoader(@NonNull String, @Nullable String, @Nullable ClassLoader, boolean);
+  }
+
+  public class DexClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public DexClassLoader(String, String, String, ClassLoader);
+  }
+
+  @Deprecated public final class DexFile {
+    ctor @Deprecated public DexFile(java.io.File) throws java.io.IOException;
+    ctor @Deprecated public DexFile(String) throws java.io.IOException;
+    method @Deprecated public void close() throws java.io.IOException;
+    method @Deprecated public java.util.Enumeration<java.lang.String> entries();
+    method @Deprecated public String getName();
+    method @Deprecated public static boolean isDexOptNeeded(String) throws java.io.FileNotFoundException, java.io.IOException;
+    method @Deprecated public Class loadClass(String, ClassLoader);
+    method @Deprecated public static dalvik.system.DexFile loadDex(String, String, int) throws java.io.IOException;
+  }
+
+  public final class InMemoryDexClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public InMemoryDexClassLoader(@NonNull java.nio.ByteBuffer[], @Nullable String, @Nullable ClassLoader);
+    ctor public InMemoryDexClassLoader(@NonNull java.nio.ByteBuffer[], @Nullable ClassLoader);
+    ctor public InMemoryDexClassLoader(@NonNull java.nio.ByteBuffer, @Nullable ClassLoader);
+  }
+
+  public class PathClassLoader extends dalvik.system.BaseDexClassLoader {
+    ctor public PathClassLoader(String, ClassLoader);
+    ctor public PathClassLoader(String, String, ClassLoader);
+  }
+
+}
+
+package java.awt.font {
+
+  public final class NumericShaper implements java.io.Serializable {
+    method public static java.awt.font.NumericShaper getContextualShaper(int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>);
+    method public static java.awt.font.NumericShaper getContextualShaper(int, int);
+    method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>, java.awt.font.NumericShaper.Range);
+    method public java.util.Set<java.awt.font.NumericShaper.Range> getRangeSet();
+    method public int getRanges();
+    method public static java.awt.font.NumericShaper getShaper(int);
+    method public static java.awt.font.NumericShaper getShaper(java.awt.font.NumericShaper.Range);
+    method public boolean isContextual();
+    method public void shape(char[], int, int);
+    method public void shape(char[], int, int, int);
+    method public void shape(char[], int, int, java.awt.font.NumericShaper.Range);
+    field public static final int ALL_RANGES = 524287; // 0x7ffff
+    field public static final int ARABIC = 2; // 0x2
+    field public static final int BENGALI = 16; // 0x10
+    field public static final int DEVANAGARI = 8; // 0x8
+    field public static final int EASTERN_ARABIC = 4; // 0x4
+    field public static final int ETHIOPIC = 65536; // 0x10000
+    field public static final int EUROPEAN = 1; // 0x1
+    field public static final int GUJARATI = 64; // 0x40
+    field public static final int GURMUKHI = 32; // 0x20
+    field public static final int KANNADA = 1024; // 0x400
+    field public static final int KHMER = 131072; // 0x20000
+    field public static final int LAO = 8192; // 0x2000
+    field public static final int MALAYALAM = 2048; // 0x800
+    field public static final int MONGOLIAN = 262144; // 0x40000
+    field public static final int MYANMAR = 32768; // 0x8000
+    field public static final int ORIYA = 128; // 0x80
+    field public static final int TAMIL = 256; // 0x100
+    field public static final int TELUGU = 512; // 0x200
+    field public static final int THAI = 4096; // 0x1000
+    field public static final int TIBETAN = 16384; // 0x4000
+  }
+
+  public enum NumericShaper.Range {
+    enum_constant public static final java.awt.font.NumericShaper.Range ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range BALINESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range BENGALI;
+    enum_constant public static final java.awt.font.NumericShaper.Range CHAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range DEVANAGARI;
+    enum_constant public static final java.awt.font.NumericShaper.Range EASTERN_ARABIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range ETHIOPIC;
+    enum_constant public static final java.awt.font.NumericShaper.Range EUROPEAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range GUJARATI;
+    enum_constant public static final java.awt.font.NumericShaper.Range GURMUKHI;
+    enum_constant public static final java.awt.font.NumericShaper.Range JAVANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range KANNADA;
+    enum_constant public static final java.awt.font.NumericShaper.Range KAYAH_LI;
+    enum_constant public static final java.awt.font.NumericShaper.Range KHMER;
+    enum_constant public static final java.awt.font.NumericShaper.Range LAO;
+    enum_constant public static final java.awt.font.NumericShaper.Range LEPCHA;
+    enum_constant public static final java.awt.font.NumericShaper.Range LIMBU;
+    enum_constant public static final java.awt.font.NumericShaper.Range MALAYALAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range MEETEI_MAYEK;
+    enum_constant public static final java.awt.font.NumericShaper.Range MONGOLIAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR;
+    enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR_SHAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range NEW_TAI_LUE;
+    enum_constant public static final java.awt.font.NumericShaper.Range NKO;
+    enum_constant public static final java.awt.font.NumericShaper.Range OL_CHIKI;
+    enum_constant public static final java.awt.font.NumericShaper.Range ORIYA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SAURASHTRA;
+    enum_constant public static final java.awt.font.NumericShaper.Range SUNDANESE;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_HORA;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_THAM;
+    enum_constant public static final java.awt.font.NumericShaper.Range TAMIL;
+    enum_constant public static final java.awt.font.NumericShaper.Range TELUGU;
+    enum_constant public static final java.awt.font.NumericShaper.Range THAI;
+    enum_constant public static final java.awt.font.NumericShaper.Range TIBETAN;
+    enum_constant public static final java.awt.font.NumericShaper.Range VAI;
+  }
+
+  public final class TextAttribute extends java.text.AttributedCharacterIterator.Attribute {
+    ctor protected TextAttribute(String);
+    field public static final java.awt.font.TextAttribute BACKGROUND;
+    field public static final java.awt.font.TextAttribute BIDI_EMBEDDING;
+    field public static final java.awt.font.TextAttribute CHAR_REPLACEMENT;
+    field public static final java.awt.font.TextAttribute FAMILY;
+    field public static final java.awt.font.TextAttribute FONT;
+    field public static final java.awt.font.TextAttribute FOREGROUND;
+    field public static final java.awt.font.TextAttribute INPUT_METHOD_HIGHLIGHT;
+    field public static final java.awt.font.TextAttribute INPUT_METHOD_UNDERLINE;
+    field public static final java.awt.font.TextAttribute JUSTIFICATION;
+    field public static final Float JUSTIFICATION_FULL;
+    field public static final Float JUSTIFICATION_NONE;
+    field public static final java.awt.font.TextAttribute KERNING;
+    field public static final Integer KERNING_ON;
+    field public static final java.awt.font.TextAttribute LIGATURES;
+    field public static final Integer LIGATURES_ON;
+    field public static final java.awt.font.TextAttribute NUMERIC_SHAPING;
+    field public static final java.awt.font.TextAttribute POSTURE;
+    field public static final Float POSTURE_OBLIQUE;
+    field public static final Float POSTURE_REGULAR;
+    field public static final java.awt.font.TextAttribute RUN_DIRECTION;
+    field public static final Boolean RUN_DIRECTION_LTR;
+    field public static final Boolean RUN_DIRECTION_RTL;
+    field public static final java.awt.font.TextAttribute SIZE;
+    field public static final java.awt.font.TextAttribute STRIKETHROUGH;
+    field public static final Boolean STRIKETHROUGH_ON;
+    field public static final java.awt.font.TextAttribute SUPERSCRIPT;
+    field public static final Integer SUPERSCRIPT_SUB;
+    field public static final Integer SUPERSCRIPT_SUPER;
+    field public static final java.awt.font.TextAttribute SWAP_COLORS;
+    field public static final Boolean SWAP_COLORS_ON;
+    field public static final java.awt.font.TextAttribute TRACKING;
+    field public static final Float TRACKING_LOOSE;
+    field public static final Float TRACKING_TIGHT;
+    field public static final java.awt.font.TextAttribute TRANSFORM;
+    field public static final java.awt.font.TextAttribute UNDERLINE;
+    field public static final Integer UNDERLINE_LOW_DASHED;
+    field public static final Integer UNDERLINE_LOW_DOTTED;
+    field public static final Integer UNDERLINE_LOW_GRAY;
+    field public static final Integer UNDERLINE_LOW_ONE_PIXEL;
+    field public static final Integer UNDERLINE_LOW_TWO_PIXEL;
+    field public static final Integer UNDERLINE_ON;
+    field public static final java.awt.font.TextAttribute WEIGHT;
+    field public static final Float WEIGHT_BOLD;
+    field public static final Float WEIGHT_DEMIBOLD;
+    field public static final Float WEIGHT_DEMILIGHT;
+    field public static final Float WEIGHT_EXTRABOLD;
+    field public static final Float WEIGHT_EXTRA_LIGHT;
+    field public static final Float WEIGHT_HEAVY;
+    field public static final Float WEIGHT_LIGHT;
+    field public static final Float WEIGHT_MEDIUM;
+    field public static final Float WEIGHT_REGULAR;
+    field public static final Float WEIGHT_SEMIBOLD;
+    field public static final Float WEIGHT_ULTRABOLD;
+    field public static final java.awt.font.TextAttribute WIDTH;
+    field public static final Float WIDTH_CONDENSED;
+    field public static final Float WIDTH_EXTENDED;
+    field public static final Float WIDTH_REGULAR;
+    field public static final Float WIDTH_SEMI_CONDENSED;
+    field public static final Float WIDTH_SEMI_EXTENDED;
+  }
+
+}
+
+package java.beans {
+
+  public class IndexedPropertyChangeEvent extends java.beans.PropertyChangeEvent {
+    ctor public IndexedPropertyChangeEvent(Object, String, Object, Object, int);
+    method public int getIndex();
+  }
+
+  public class PropertyChangeEvent extends java.util.EventObject {
+    ctor public PropertyChangeEvent(Object, String, Object, Object);
+    method public Object getNewValue();
+    method public Object getOldValue();
+    method public Object getPropagationId();
+    method public String getPropertyName();
+    method public void setPropagationId(Object);
+  }
+
+  public interface PropertyChangeListener extends java.util.EventListener {
+    method public void propertyChange(java.beans.PropertyChangeEvent);
+  }
+
+  public class PropertyChangeListenerProxy extends java.util.EventListenerProxy<java.beans.PropertyChangeListener> implements java.beans.PropertyChangeListener {
+    ctor public PropertyChangeListenerProxy(String, java.beans.PropertyChangeListener);
+    method public String getPropertyName();
+    method public void propertyChange(java.beans.PropertyChangeEvent);
+  }
+
+  public class PropertyChangeSupport implements java.io.Serializable {
+    ctor public PropertyChangeSupport(Object);
+    method public void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void addPropertyChangeListener(String, java.beans.PropertyChangeListener);
+    method public void fireIndexedPropertyChange(String, int, Object, Object);
+    method public void fireIndexedPropertyChange(String, int, int, int);
+    method public void fireIndexedPropertyChange(String, int, boolean, boolean);
+    method public void firePropertyChange(String, Object, Object);
+    method public void firePropertyChange(String, int, int);
+    method public void firePropertyChange(String, boolean, boolean);
+    method public void firePropertyChange(java.beans.PropertyChangeEvent);
+    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners();
+    method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(String);
+    method public boolean hasListeners(String);
+    method public void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void removePropertyChangeListener(String, java.beans.PropertyChangeListener);
+  }
+
+}
+
+package java.io {
+
+  public class BufferedInputStream extends java.io.FilterInputStream {
+    ctor public BufferedInputStream(java.io.InputStream);
+    ctor public BufferedInputStream(java.io.InputStream, int);
+    field protected volatile byte[] buf;
+    field protected int count;
+    field protected int marklimit;
+    field protected int markpos;
+    field protected int pos;
+  }
+
+  public class BufferedOutputStream extends java.io.FilterOutputStream {
+    ctor public BufferedOutputStream(java.io.OutputStream);
+    ctor public BufferedOutputStream(java.io.OutputStream, int);
+    field protected byte[] buf;
+    field protected int count;
+  }
+
+  public class BufferedReader extends java.io.Reader {
+    ctor public BufferedReader(java.io.Reader, int);
+    ctor public BufferedReader(java.io.Reader);
+    method public void close() throws java.io.IOException;
+    method public java.util.stream.Stream<java.lang.String> lines();
+    method public int read(char[], int, int) throws java.io.IOException;
+    method public String readLine() throws java.io.IOException;
+  }
+
+  public class BufferedWriter extends java.io.Writer {
+    ctor public BufferedWriter(java.io.Writer);
+    ctor public BufferedWriter(java.io.Writer, int);
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void newLine() throws java.io.IOException;
+    method public void write(char[], int, int) throws java.io.IOException;
+  }
+
+  public class ByteArrayInputStream extends java.io.InputStream {
+    ctor public ByteArrayInputStream(byte[]);
+    ctor public ByteArrayInputStream(byte[], int, int);
+    method public int available();
+    method public int read();
+    method public int read(byte[], int, int);
+    method public void reset();
+    method public long skip(long);
+    field protected byte[] buf;
+    field protected int count;
+    field protected int mark;
+    field protected int pos;
+  }
+
+  public class ByteArrayOutputStream extends java.io.OutputStream {
+    ctor public ByteArrayOutputStream();
+    ctor public ByteArrayOutputStream(int);
+    method public void reset();
+    method public int size();
+    method @NonNull public byte[] toByteArray();
+    method @NonNull public String toString(@NonNull String) throws java.io.UnsupportedEncodingException;
+    method @Deprecated @NonNull public String toString(int);
+    method public void write(int);
+    method public void write(@NonNull byte[], int, int);
+    method public void writeTo(@NonNull java.io.OutputStream) throws java.io.IOException;
+    field @NonNull protected byte[] buf;
+    field protected int count;
+  }
+
+  public class CharArrayReader extends java.io.Reader {
+    ctor public CharArrayReader(char[]);
+    ctor public CharArrayReader(char[], int, int);
+    method public void close();
+    method public int read(char[], int, int) throws java.io.IOException;
+    field protected char[] buf;
+    field protected int count;
+    field protected int markedPos;
+    field protected int pos;
+  }
+
+  public class CharArrayWriter extends java.io.Writer {
+    ctor public CharArrayWriter();
+    ctor public CharArrayWriter(int);
+    method public java.io.CharArrayWriter append(CharSequence);
+    method public java.io.CharArrayWriter append(CharSequence, int, int);
+    method public java.io.CharArrayWriter append(char);
+    method public void close();
+    method public void flush();
+    method public void reset();
+    method public int size();
+    method public char[] toCharArray();
+    method public void write(int);
+    method public void write(char[], int, int);
+    method public void write(String, int, int);
+    method public void writeTo(java.io.Writer) throws java.io.IOException;
+    field protected char[] buf;
+    field protected int count;
+  }
+
+  public class CharConversionException extends java.io.IOException {
+    ctor public CharConversionException();
+    ctor public CharConversionException(String);
+  }
+
+  public interface Closeable extends java.lang.AutoCloseable {
+    method public void close() throws java.io.IOException;
+  }
+
+  public final class Console implements java.io.Flushable {
+    method public void flush();
+    method public java.io.Console format(String, java.lang.Object...);
+    method public java.io.Console printf(String, java.lang.Object...);
+    method public String readLine(String, java.lang.Object...);
+    method public String readLine();
+    method public char[] readPassword(String, java.lang.Object...);
+    method public char[] readPassword();
+    method public java.io.Reader reader();
+    method public java.io.PrintWriter writer();
+  }
+
+  public interface DataInput {
+    method public boolean readBoolean() throws java.io.IOException;
+    method public byte readByte() throws java.io.IOException;
+    method public char readChar() throws java.io.IOException;
+    method public double readDouble() throws java.io.IOException;
+    method public float readFloat() throws java.io.IOException;
+    method public void readFully(byte[]) throws java.io.IOException;
+    method public void readFully(byte[], int, int) throws java.io.IOException;
+    method public int readInt() throws java.io.IOException;
+    method public String readLine() throws java.io.IOException;
+    method public long readLong() throws java.io.IOException;
+    method public short readShort() throws java.io.IOException;
+    method public String readUTF() throws java.io.IOException;
+    method public int readUnsignedByte() throws java.io.IOException;
+    method public int readUnsignedShort() throws java.io.IOException;
+    method public int skipBytes(int) throws java.io.IOException;
+  }
+
+  public class DataInputStream extends java.io.FilterInputStream implements java.io.DataInput {
+    ctor public DataInputStream(java.io.InputStream);
+    method public final int read(byte[]) throws java.io.IOException;
+    method public final int read(byte[], int, int) throws java.io.IOException;
+    method public final boolean readBoolean() throws java.io.IOException;
+    method public final byte readByte() throws java.io.IOException;
+    method public final char readChar() throws java.io.IOException;
+    method public final double readDouble() throws java.io.IOException;
+    method public final float readFloat() throws java.io.IOException;
+    method public final void readFully(byte[]) throws java.io.IOException;
+    method public final void readFully(byte[], int, int) throws java.io.IOException;
+    method public final int readInt() throws java.io.IOException;
+    method @Deprecated public final String readLine() throws java.io.IOException;
+    method public final long readLong() throws java.io.IOException;
+    method public final short readShort() throws java.io.IOException;
+    method public final String readUTF() throws java.io.IOException;
+    method public static final String readUTF(java.io.DataInput) throws java.io.IOException;
+    method public final int readUnsignedByte() throws java.io.IOException;
+    method public final int readUnsignedShort() throws java.io.IOException;
+    method public final int skipBytes(int) throws java.io.IOException;
+  }
+
+  public interface DataOutput {
+    method public void write(int) throws java.io.IOException;
+    method public void write(byte[]) throws java.io.IOException;
+    method public void write(byte[], int, int) throws java.io.IOException;
+    method public void writeBoolean(boolean) throws java.io.IOException;
+    method public void writeByte(int) throws java.io.IOException;
+    method public void writeBytes(String) throws java.io.IOException;
+    method public void writeChar(int) throws java.io.IOException;
+    method public void writeChars(String) throws java.io.IOException;
+    method public void writeDouble(double) throws java.io.IOException;
+    method public void writeFloat(float) throws java.io.IOException;
+    method public void writeInt(int) throws java.io.IOException;
+    method public void writeLong(long) throws java.io.IOException;
+    method public void writeShort(int) throws java.io.IOException;
+    method public void writeUTF(String) throws java.io.IOException;
+  }
+
+  public class DataOutputStream extends java.io.FilterOutputStream implements java.io.DataOutput {
+    ctor public DataOutputStream(java.io.OutputStream);
+    method public final int size();
+    method public final void writeBoolean(boolean) throws java.io.IOException;
+    method public final void writeByte(int) throws java.io.IOException;
+    method public final void writeBytes(String) throws java.io.IOException;
+    method public final void writeChar(int) throws java.io.IOException;
+    method public final void writeChars(String) throws java.io.IOException;
+    method public final void writeDouble(double) throws java.io.IOException;
+    method public final void writeFloat(float) throws java.io.IOException;
+    method public final void writeInt(int) throws java.io.IOException;
+    method public final void writeLong(long) throws java.io.IOException;
+    method public final void writeShort(int) throws java.io.IOException;
+    method public final void writeUTF(String) throws java.io.IOException;
+    field protected int written;
+  }
+
+  public class EOFException extends java.io.IOException {
+    ctor public EOFException();
+    ctor public EOFException(String);
+  }
+
+  public interface Externalizable extends java.io.Serializable {
+    method public void readExternal(java.io.ObjectInput) throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public void writeExternal(java.io.ObjectOutput) throws java.io.IOException;
+  }
+
+  public class File implements java.lang.Comparable<java.io.File> java.io.Serializable {
+    ctor public File(@NonNull String);
+    ctor public File(@Nullable String, @NonNull String);
+    ctor public File(@Nullable java.io.File, @NonNull String);
+    ctor public File(@NonNull java.net.URI);
+    method public boolean canExecute();
+    method public boolean canRead();
+    method public boolean canWrite();
+    method public int compareTo(@NonNull java.io.File);
+    method public boolean createNewFile() throws java.io.IOException;
+    method @NonNull public static java.io.File createTempFile(@NonNull String, @Nullable String, @Nullable java.io.File) throws java.io.IOException;
+    method @NonNull public static java.io.File createTempFile(@NonNull String, @Nullable String) throws java.io.IOException;
+    method public boolean delete();
+    method public void deleteOnExit();
+    method public boolean exists();
+    method @NonNull public java.io.File getAbsoluteFile();
+    method @NonNull public String getAbsolutePath();
+    method @NonNull public java.io.File getCanonicalFile() throws java.io.IOException;
+    method @NonNull public String getCanonicalPath() throws java.io.IOException;
+    method public long getFreeSpace();
+    method @NonNull public String getName();
+    method @Nullable public String getParent();
+    method @Nullable public java.io.File getParentFile();
+    method @NonNull public String getPath();
+    method public long getTotalSpace();
+    method public long getUsableSpace();
+    method public boolean isAbsolute();
+    method public boolean isDirectory();
+    method public boolean isFile();
+    method public boolean isHidden();
+    method public long lastModified();
+    method public long length();
+    method @Nullable public String[] list();
+    method @Nullable public String[] list(@Nullable java.io.FilenameFilter);
+    method @Nullable public java.io.File[] listFiles();
+    method @Nullable public java.io.File[] listFiles(@Nullable java.io.FilenameFilter);
+    method @Nullable public java.io.File[] listFiles(@Nullable java.io.FileFilter);
+    method @NonNull public static java.io.File[] listRoots();
+    method public boolean mkdir();
+    method public boolean mkdirs();
+    method public boolean renameTo(@NonNull java.io.File);
+    method public boolean setExecutable(boolean, boolean);
+    method public boolean setExecutable(boolean);
+    method public boolean setLastModified(long);
+    method public boolean setReadOnly();
+    method public boolean setReadable(boolean, boolean);
+    method public boolean setReadable(boolean);
+    method public boolean setWritable(boolean, boolean);
+    method public boolean setWritable(boolean);
+    method @NonNull public java.nio.file.Path toPath();
+    method @NonNull public java.net.URI toURI();
+    method @Deprecated @NonNull public java.net.URL toURL() throws java.net.MalformedURLException;
+    field @NonNull public static final String pathSeparator;
+    field public static final char pathSeparatorChar;
+    field @NonNull public static final String separator;
+    field public static final char separatorChar;
+  }
+
+  public final class FileDescriptor {
+    ctor public FileDescriptor();
+    method public void sync() throws java.io.SyncFailedException;
+    method public boolean valid();
+    field public static final java.io.FileDescriptor err;
+    field public static final java.io.FileDescriptor in;
+    field public static final java.io.FileDescriptor out;
+  }
+
+  @java.lang.FunctionalInterface public interface FileFilter {
+    method public boolean accept(java.io.File);
+  }
+
+  public class FileInputStream extends java.io.InputStream {
+    ctor public FileInputStream(String) throws java.io.FileNotFoundException;
+    ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public FileInputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
+    method public java.nio.channels.FileChannel getChannel();
+    method public final java.io.FileDescriptor getFD() throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+  }
+
+  public class FileNotFoundException extends java.io.IOException {
+    ctor public FileNotFoundException();
+    ctor public FileNotFoundException(String);
+  }
+
+  public class FileOutputStream extends java.io.OutputStream {
+    ctor public FileOutputStream(String) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(String, boolean) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException;
+    ctor public FileOutputStream(java.io.FileDescriptor);
+    method protected void finalize() throws java.io.IOException;
+    method public java.nio.channels.FileChannel getChannel();
+    method public final java.io.FileDescriptor getFD() throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+  }
+
+  public final class FilePermission extends java.security.Permission implements java.io.Serializable {
+    ctor public FilePermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public class FileReader extends java.io.InputStreamReader {
+    ctor public FileReader(String) throws java.io.FileNotFoundException;
+    ctor public FileReader(java.io.File) throws java.io.FileNotFoundException;
+    ctor public FileReader(java.io.FileDescriptor);
+  }
+
+  public class FileWriter extends java.io.OutputStreamWriter {
+    ctor public FileWriter(String) throws java.io.IOException;
+    ctor public FileWriter(String, boolean) throws java.io.IOException;
+    ctor public FileWriter(java.io.File) throws java.io.IOException;
+    ctor public FileWriter(java.io.File, boolean) throws java.io.IOException;
+    ctor public FileWriter(java.io.FileDescriptor);
+  }
+
+  @java.lang.FunctionalInterface public interface FilenameFilter {
+    method public boolean accept(java.io.File, String);
+  }
+
+  public class FilterInputStream extends java.io.InputStream {
+    ctor protected FilterInputStream(java.io.InputStream);
+    method public int read() throws java.io.IOException;
+    field protected volatile java.io.InputStream in;
+  }
+
+  public class FilterOutputStream extends java.io.OutputStream {
+    ctor public FilterOutputStream(java.io.OutputStream);
+    method public void write(int) throws java.io.IOException;
+    field protected java.io.OutputStream out;
+  }
+
+  public abstract class FilterReader extends java.io.Reader {
+    ctor protected FilterReader(java.io.Reader);
+    method public void close() throws java.io.IOException;
+    method public int read(char[], int, int) throws java.io.IOException;
+    field protected java.io.Reader in;
+  }
+
+  public abstract class FilterWriter extends java.io.Writer {
+    ctor protected FilterWriter(java.io.Writer);
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void write(char[], int, int) throws java.io.IOException;
+    field protected java.io.Writer out;
+  }
+
+  public interface Flushable {
+    method public void flush() throws java.io.IOException;
+  }
+
+  public class IOError extends java.lang.Error {
+    ctor public IOError(Throwable);
+  }
+
+  public class IOException extends java.lang.Exception {
+    ctor public IOException();
+    ctor public IOException(String);
+    ctor public IOException(String, Throwable);
+    ctor public IOException(Throwable);
+  }
+
+  public abstract class InputStream implements java.io.Closeable {
+    ctor public InputStream();
+    method public int available() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void mark(int);
+    method public boolean markSupported();
+    method public abstract int read() throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
+    method public int read(byte[], int, int) throws java.io.IOException;
+    method public void reset() throws java.io.IOException;
+    method public long skip(long) throws java.io.IOException;
+  }
+
+  public class InputStreamReader extends java.io.Reader {
+    ctor public InputStreamReader(java.io.InputStream);
+    ctor public InputStreamReader(java.io.InputStream, String) throws java.io.UnsupportedEncodingException;
+    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.Charset);
+    ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder);
+    method public void close() throws java.io.IOException;
+    method public String getEncoding();
+    method public int read(char[], int, int) throws java.io.IOException;
+  }
+
+  public class InterruptedIOException extends java.io.IOException {
+    ctor public InterruptedIOException();
+    ctor public InterruptedIOException(String);
+    field public int bytesTransferred;
+  }
+
+  public class InvalidClassException extends java.io.ObjectStreamException {
+    ctor public InvalidClassException(String);
+    ctor public InvalidClassException(String, String);
+    field public String classname;
+  }
+
+  public class InvalidObjectException extends java.io.ObjectStreamException {
+    ctor public InvalidObjectException(String);
+  }
+
+  @Deprecated public class LineNumberInputStream extends java.io.FilterInputStream {
+    ctor @Deprecated public LineNumberInputStream(java.io.InputStream);
+    method @Deprecated public int getLineNumber();
+    method @Deprecated public void setLineNumber(int);
+  }
+
+  public class LineNumberReader extends java.io.BufferedReader {
+    ctor public LineNumberReader(java.io.Reader);
+    ctor public LineNumberReader(java.io.Reader, int);
+    method public int getLineNumber();
+    method public void setLineNumber(int);
+  }
+
+  public class NotActiveException extends java.io.ObjectStreamException {
+    ctor public NotActiveException(String);
+    ctor public NotActiveException();
+  }
+
+  public class NotSerializableException extends java.io.ObjectStreamException {
+    ctor public NotSerializableException(String);
+    ctor public NotSerializableException();
+  }
+
+  public interface ObjectInput extends java.io.DataInput java.lang.AutoCloseable {
+    method public int available() throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
+    method public int read(byte[], int, int) throws java.io.IOException;
+    method public Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public long skip(long) throws java.io.IOException;
+  }
+
+  public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants {
+    ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor protected ObjectInputStream() throws java.io.IOException, java.lang.SecurityException;
+    method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected boolean enableResolveObject(boolean) throws java.lang.SecurityException;
+    method public int read() throws java.io.IOException;
+    method public boolean readBoolean() throws java.io.IOException;
+    method public byte readByte() throws java.io.IOException;
+    method public char readChar() throws java.io.IOException;
+    method protected java.io.ObjectStreamClass readClassDescriptor() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public double readDouble() throws java.io.IOException;
+    method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public float readFloat() throws java.io.IOException;
+    method public void readFully(byte[]) throws java.io.IOException;
+    method public void readFully(byte[], int, int) throws java.io.IOException;
+    method public int readInt() throws java.io.IOException;
+    method @Deprecated public String readLine() throws java.io.IOException;
+    method public long readLong() throws java.io.IOException;
+    method public final Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public short readShort() throws java.io.IOException;
+    method protected void readStreamHeader() throws java.io.IOException, java.io.StreamCorruptedException;
+    method public String readUTF() throws java.io.IOException;
+    method public Object readUnshared() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public int readUnsignedByte() throws java.io.IOException;
+    method public int readUnsignedShort() throws java.io.IOException;
+    method public void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException;
+    method protected Class<?> resolveClass(java.io.ObjectStreamClass) throws java.lang.ClassNotFoundException, java.io.IOException;
+    method protected Object resolveObject(Object) throws java.io.IOException;
+    method protected Class<?> resolveProxyClass(String[]) throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public int skipBytes(int) throws java.io.IOException;
+  }
+
+  public abstract static class ObjectInputStream.GetField {
+    ctor public ObjectInputStream.GetField();
+    method public abstract boolean defaulted(String) throws java.io.IOException;
+    method public abstract boolean get(String, boolean) throws java.io.IOException;
+    method public abstract byte get(String, byte) throws java.io.IOException;
+    method public abstract char get(String, char) throws java.io.IOException;
+    method public abstract short get(String, short) throws java.io.IOException;
+    method public abstract int get(String, int) throws java.io.IOException;
+    method public abstract long get(String, long) throws java.io.IOException;
+    method public abstract float get(String, float) throws java.io.IOException;
+    method public abstract double get(String, double) throws java.io.IOException;
+    method public abstract Object get(String, Object) throws java.io.IOException;
+    method public abstract java.io.ObjectStreamClass getObjectStreamClass();
+  }
+
+  public interface ObjectInputValidation {
+    method public void validateObject() throws java.io.InvalidObjectException;
+  }
+
+  public interface ObjectOutput extends java.io.DataOutput java.lang.AutoCloseable {
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void writeObject(Object) throws java.io.IOException;
+  }
+
+  public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants {
+    ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor protected ObjectOutputStream() throws java.io.IOException, java.lang.SecurityException;
+    method protected void annotateClass(Class<?>) throws java.io.IOException;
+    method protected void annotateProxyClass(Class<?>) throws java.io.IOException;
+    method public void defaultWriteObject() throws java.io.IOException;
+    method protected void drain() throws java.io.IOException;
+    method protected boolean enableReplaceObject(boolean) throws java.lang.SecurityException;
+    method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException;
+    method protected Object replaceObject(Object) throws java.io.IOException;
+    method public void reset() throws java.io.IOException;
+    method public void useProtocolVersion(int) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+    method public void writeBoolean(boolean) throws java.io.IOException;
+    method public void writeByte(int) throws java.io.IOException;
+    method public void writeBytes(String) throws java.io.IOException;
+    method public void writeChar(int) throws java.io.IOException;
+    method public void writeChars(String) throws java.io.IOException;
+    method protected void writeClassDescriptor(java.io.ObjectStreamClass) throws java.io.IOException;
+    method public void writeDouble(double) throws java.io.IOException;
+    method public void writeFields() throws java.io.IOException;
+    method public void writeFloat(float) throws java.io.IOException;
+    method public void writeInt(int) throws java.io.IOException;
+    method public void writeLong(long) throws java.io.IOException;
+    method public final void writeObject(Object) throws java.io.IOException;
+    method protected void writeObjectOverride(Object) throws java.io.IOException;
+    method public void writeShort(int) throws java.io.IOException;
+    method protected void writeStreamHeader() throws java.io.IOException;
+    method public void writeUTF(String) throws java.io.IOException;
+    method public void writeUnshared(Object) throws java.io.IOException;
+  }
+
+  public abstract static class ObjectOutputStream.PutField {
+    ctor public ObjectOutputStream.PutField();
+    method public abstract void put(String, boolean);
+    method public abstract void put(String, byte);
+    method public abstract void put(String, char);
+    method public abstract void put(String, short);
+    method public abstract void put(String, int);
+    method public abstract void put(String, long);
+    method public abstract void put(String, float);
+    method public abstract void put(String, double);
+    method public abstract void put(String, Object);
+    method @Deprecated public abstract void write(java.io.ObjectOutput) throws java.io.IOException;
+  }
+
+  public class ObjectStreamClass implements java.io.Serializable {
+    method public Class<?> forClass();
+    method public java.io.ObjectStreamField getField(String);
+    method public java.io.ObjectStreamField[] getFields();
+    method public String getName();
+    method public long getSerialVersionUID();
+    method public static java.io.ObjectStreamClass lookup(Class<?>);
+    method public static java.io.ObjectStreamClass lookupAny(Class<?>);
+    field public static final java.io.ObjectStreamField[] NO_FIELDS;
+  }
+
+  public interface ObjectStreamConstants {
+    field public static final int PROTOCOL_VERSION_1 = 1; // 0x1
+    field public static final int PROTOCOL_VERSION_2 = 2; // 0x2
+    field public static final byte SC_BLOCK_DATA = 8; // 0x8
+    field public static final byte SC_ENUM = 16; // 0x10
+    field public static final byte SC_EXTERNALIZABLE = 4; // 0x4
+    field public static final byte SC_SERIALIZABLE = 2; // 0x2
+    field public static final byte SC_WRITE_METHOD = 1; // 0x1
+    field public static final short STREAM_MAGIC = -21267; // 0xffffaced
+    field public static final short STREAM_VERSION = 5; // 0x5
+    field public static final java.io.SerializablePermission SUBCLASS_IMPLEMENTATION_PERMISSION;
+    field public static final java.io.SerializablePermission SUBSTITUTION_PERMISSION;
+    field public static final byte TC_ARRAY = 117; // 0x75
+    field public static final byte TC_BASE = 112; // 0x70
+    field public static final byte TC_BLOCKDATA = 119; // 0x77
+    field public static final byte TC_BLOCKDATALONG = 122; // 0x7a
+    field public static final byte TC_CLASS = 118; // 0x76
+    field public static final byte TC_CLASSDESC = 114; // 0x72
+    field public static final byte TC_ENDBLOCKDATA = 120; // 0x78
+    field public static final byte TC_ENUM = 126; // 0x7e
+    field public static final byte TC_EXCEPTION = 123; // 0x7b
+    field public static final byte TC_LONGSTRING = 124; // 0x7c
+    field public static final byte TC_MAX = 126; // 0x7e
+    field public static final byte TC_NULL = 112; // 0x70
+    field public static final byte TC_OBJECT = 115; // 0x73
+    field public static final byte TC_PROXYCLASSDESC = 125; // 0x7d
+    field public static final byte TC_REFERENCE = 113; // 0x71
+    field public static final byte TC_RESET = 121; // 0x79
+    field public static final byte TC_STRING = 116; // 0x74
+    field public static final int baseWireHandle = 8257536; // 0x7e0000
+  }
+
+  public abstract class ObjectStreamException extends java.io.IOException {
+    ctor protected ObjectStreamException(String);
+    ctor protected ObjectStreamException();
+  }
+
+  public class ObjectStreamField implements java.lang.Comparable<java.lang.Object> {
+    ctor public ObjectStreamField(String, Class<?>);
+    ctor public ObjectStreamField(String, Class<?>, boolean);
+    method public int compareTo(Object);
+    method public String getName();
+    method public int getOffset();
+    method public Class<?> getType();
+    method public char getTypeCode();
+    method public String getTypeString();
+    method public boolean isPrimitive();
+    method public boolean isUnshared();
+    method protected void setOffset(int);
+  }
+
+  public class OptionalDataException extends java.io.ObjectStreamException {
+    field public boolean eof;
+    field public int length;
+  }
+
+  public abstract class OutputStream implements java.io.Closeable java.io.Flushable {
+    ctor public OutputStream();
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public abstract void write(int) throws java.io.IOException;
+    method public void write(byte[]) throws java.io.IOException;
+    method public void write(byte[], int, int) throws java.io.IOException;
+  }
+
+  public class OutputStreamWriter extends java.io.Writer {
+    ctor public OutputStreamWriter(java.io.OutputStream, String) throws java.io.UnsupportedEncodingException;
+    ctor public OutputStreamWriter(java.io.OutputStream);
+    ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.Charset);
+    ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.CharsetEncoder);
+    method public void close() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public String getEncoding();
+    method public void write(char[], int, int) throws java.io.IOException;
+  }
+
+  public class PipedInputStream extends java.io.InputStream {
+    ctor public PipedInputStream(java.io.PipedOutputStream) throws java.io.IOException;
+    ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException;
+    ctor public PipedInputStream();
+    ctor public PipedInputStream(int);
+    method public void connect(java.io.PipedOutputStream) throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method protected void receive(int) throws java.io.IOException;
+    field protected static final int PIPE_SIZE = 1024; // 0x400
+    field protected byte[] buffer;
+    field protected int in;
+    field protected int out;
+  }
+
+  public class PipedOutputStream extends java.io.OutputStream {
+    ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException;
+    ctor public PipedOutputStream();
+    method public void connect(java.io.PipedInputStream) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+  }
+
+  public class PipedReader extends java.io.Reader {
+    ctor public PipedReader(java.io.PipedWriter) throws java.io.IOException;
+    ctor public PipedReader(java.io.PipedWriter, int) throws java.io.IOException;
+    ctor public PipedReader();
+    ctor public PipedReader(int);
+    method public void close() throws java.io.IOException;
+    method public void connect(java.io.PipedWriter) throws java.io.IOException;
+    method public int read(char[], int, int) throws java.io.IOException;
+  }
+
+  public class PipedWriter extends java.io.Writer {
+    ctor public PipedWriter(java.io.PipedReader) throws java.io.IOException;
+    ctor public PipedWriter();
+    method public void close() throws java.io.IOException;
+    method public void connect(java.io.PipedReader) throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public void write(char[], int, int) throws java.io.IOException;
+  }
+
+  public class PrintStream extends java.io.FilterOutputStream implements java.lang.Appendable java.io.Closeable {
+    ctor public PrintStream(java.io.OutputStream);
+    ctor public PrintStream(java.io.OutputStream, boolean);
+    ctor public PrintStream(java.io.OutputStream, boolean, String) throws java.io.UnsupportedEncodingException;
+    ctor public PrintStream(String) throws java.io.FileNotFoundException;
+    ctor public PrintStream(String, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintStream(java.io.File, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    method public java.io.PrintStream append(CharSequence);
+    method public java.io.PrintStream append(CharSequence, int, int);
+    method public java.io.PrintStream append(char);
+    method public boolean checkError();
+    method protected void clearError();
+    method public void close();
+    method public void flush();
+    method public java.io.PrintStream format(String, java.lang.Object...);
+    method public java.io.PrintStream format(java.util.Locale, String, java.lang.Object...);
+    method public void print(boolean);
+    method public void print(char);
+    method public void print(int);
+    method public void print(long);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
+    method public void print(String);
+    method public void print(Object);
+    method public java.io.PrintStream printf(String, java.lang.Object...);
+    method public java.io.PrintStream printf(java.util.Locale, String, java.lang.Object...);
+    method public void println();
+    method public void println(boolean);
+    method public void println(char);
+    method public void println(int);
+    method public void println(long);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
+    method public void println(String);
+    method public void println(Object);
+    method protected void setError();
+    method public void write(int);
+    method public void write(byte[], int, int);
+  }
+
+  public class PrintWriter extends java.io.Writer {
+    ctor public PrintWriter(@NonNull java.io.Writer);
+    ctor public PrintWriter(@NonNull java.io.Writer, boolean);
+    ctor public PrintWriter(@NonNull java.io.OutputStream);
+    ctor public PrintWriter(@NonNull java.io.OutputStream, boolean);
+    ctor public PrintWriter(@NonNull String) throws java.io.FileNotFoundException;
+    ctor public PrintWriter(@NonNull String, @NonNull String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public PrintWriter(@NonNull java.io.File) throws java.io.FileNotFoundException;
+    ctor public PrintWriter(@NonNull java.io.File, @NonNull String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    method @NonNull public java.io.PrintWriter append(@Nullable CharSequence);
+    method @NonNull public java.io.PrintWriter append(@Nullable CharSequence, int, int);
+    method @NonNull public java.io.PrintWriter append(char);
+    method public boolean checkError();
+    method protected void clearError();
+    method public void close();
+    method public void flush();
+    method @NonNull public java.io.PrintWriter format(@NonNull String, @NonNull java.lang.Object...);
+    method @NonNull public java.io.PrintWriter format(@Nullable java.util.Locale, @NonNull String, @NonNull java.lang.Object...);
+    method public void print(boolean);
+    method public void print(char);
+    method public void print(int);
+    method public void print(long);
+    method public void print(float);
+    method public void print(double);
+    method public void print(char[]);
+    method public void print(@Nullable String);
+    method public void print(@Nullable Object);
+    method @NonNull public java.io.PrintWriter printf(@NonNull String, @NonNull java.lang.Object...);
+    method @NonNull public java.io.PrintWriter printf(@Nullable java.util.Locale, @NonNull String, @NonNull java.lang.Object...);
+    method public void println();
+    method public void println(boolean);
+    method public void println(char);
+    method public void println(int);
+    method public void println(long);
+    method public void println(float);
+    method public void println(double);
+    method public void println(char[]);
+    method public void println(@Nullable String);
+    method public void println(@Nullable Object);
+    method protected void setError();
+    method public void write(int);
+    method public void write(char[], int, int);
+    method public void write(char[]);
+    method public void write(@NonNull String, int, int);
+    method public void write(@NonNull String);
+    field protected java.io.Writer out;
+  }
+
+  public class PushbackInputStream extends java.io.FilterInputStream {
+    ctor public PushbackInputStream(java.io.InputStream, int);
+    ctor public PushbackInputStream(java.io.InputStream);
+    method public void unread(int) throws java.io.IOException;
+    method public void unread(byte[], int, int) throws java.io.IOException;
+    method public void unread(byte[]) throws java.io.IOException;
+    field protected byte[] buf;
+    field protected int pos;
+  }
+
+  public class PushbackReader extends java.io.FilterReader {
+    ctor public PushbackReader(java.io.Reader, int);
+    ctor public PushbackReader(java.io.Reader);
+    method public void unread(int) throws java.io.IOException;
+    method public void unread(char[], int, int) throws java.io.IOException;
+    method public void unread(char[]) throws java.io.IOException;
+  }
+
+  public class RandomAccessFile implements java.io.Closeable java.io.DataInput java.io.DataOutput {
+    ctor public RandomAccessFile(String, String) throws java.io.FileNotFoundException;
+    ctor public RandomAccessFile(java.io.File, String) throws java.io.FileNotFoundException;
+    method public void close() throws java.io.IOException;
+    method public final java.nio.channels.FileChannel getChannel();
+    method public final java.io.FileDescriptor getFD() throws java.io.IOException;
+    method public long getFilePointer() throws java.io.IOException;
+    method public long length() throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method public int read(byte[], int, int) throws java.io.IOException;
+    method public int read(byte[]) throws java.io.IOException;
+    method public final boolean readBoolean() throws java.io.IOException;
+    method public final byte readByte() throws java.io.IOException;
+    method public final char readChar() throws java.io.IOException;
+    method public final double readDouble() throws java.io.IOException;
+    method public final float readFloat() throws java.io.IOException;
+    method public final void readFully(byte[]) throws java.io.IOException;
+    method public final void readFully(byte[], int, int) throws java.io.IOException;
+    method public final int readInt() throws java.io.IOException;
+    method public final String readLine() throws java.io.IOException;
+    method public final long readLong() throws java.io.IOException;
+    method public final short readShort() throws java.io.IOException;
+    method public final String readUTF() throws java.io.IOException;
+    method public final int readUnsignedByte() throws java.io.IOException;
+    method public final int readUnsignedShort() throws java.io.IOException;
+    method public void seek(long) throws java.io.IOException;
+    method public void setLength(long) throws java.io.IOException;
+    method public int skipBytes(int) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+    method public void write(byte[]) throws java.io.IOException;
+    method public void write(byte[], int, int) throws java.io.IOException;
+    method public final void writeBoolean(boolean) throws java.io.IOException;
+    method public final void writeByte(int) throws java.io.IOException;
+    method public final void writeBytes(String) throws java.io.IOException;
+    method public final void writeChar(int) throws java.io.IOException;
+    method public final void writeChars(String) throws java.io.IOException;
+    method public final void writeDouble(double) throws java.io.IOException;
+    method public final void writeFloat(float) throws java.io.IOException;
+    method public final void writeInt(int) throws java.io.IOException;
+    method public final void writeLong(long) throws java.io.IOException;
+    method public final void writeShort(int) throws java.io.IOException;
+    method public final void writeUTF(String) throws java.io.IOException;
+  }
+
+  public abstract class Reader implements java.io.Closeable java.lang.Readable {
+    ctor protected Reader();
+    ctor protected Reader(Object);
+    method public void mark(int) throws java.io.IOException;
+    method public boolean markSupported();
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
+    method public int read() throws java.io.IOException;
+    method public int read(char[]) throws java.io.IOException;
+    method public abstract int read(char[], int, int) throws java.io.IOException;
+    method public boolean ready() throws java.io.IOException;
+    method public void reset() throws java.io.IOException;
+    method public long skip(long) throws java.io.IOException;
+    field protected Object lock;
+  }
+
+  public class SequenceInputStream extends java.io.InputStream {
+    ctor public SequenceInputStream(java.util.Enumeration<? extends java.io.InputStream>);
+    ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream);
+    method public int read() throws java.io.IOException;
+  }
+
+  public interface Serializable {
+  }
+
+  public final class SerializablePermission extends java.security.BasicPermission {
+    ctor public SerializablePermission(String);
+    ctor public SerializablePermission(String, String);
+  }
+
+  public class StreamCorruptedException extends java.io.ObjectStreamException {
+    ctor public StreamCorruptedException(String);
+    ctor public StreamCorruptedException();
+  }
+
+  public class StreamTokenizer {
+    ctor @Deprecated public StreamTokenizer(java.io.InputStream);
+    ctor public StreamTokenizer(java.io.Reader);
+    method public void commentChar(int);
+    method public void eolIsSignificant(boolean);
+    method public int lineno();
+    method public void lowerCaseMode(boolean);
+    method public int nextToken() throws java.io.IOException;
+    method public void ordinaryChar(int);
+    method public void ordinaryChars(int, int);
+    method public void parseNumbers();
+    method public void pushBack();
+    method public void quoteChar(int);
+    method public void resetSyntax();
+    method public void slashSlashComments(boolean);
+    method public void slashStarComments(boolean);
+    method public void whitespaceChars(int, int);
+    method public void wordChars(int, int);
+    field public static final int TT_EOF = -1; // 0xffffffff
+    field public static final int TT_EOL = 10; // 0xa
+    field public static final int TT_NUMBER = -2; // 0xfffffffe
+    field public static final int TT_WORD = -3; // 0xfffffffd
+    field public double nval;
+    field public String sval;
+    field public int ttype;
+  }
+
+  @Deprecated public class StringBufferInputStream extends java.io.InputStream {
+    ctor @Deprecated public StringBufferInputStream(String);
+    method @Deprecated public int available();
+    method @Deprecated public int read();
+    method @Deprecated public int read(byte[], int, int);
+    method @Deprecated public void reset();
+    method @Deprecated public long skip(long);
+    field @Deprecated protected String buffer;
+    field @Deprecated protected int count;
+    field @Deprecated protected int pos;
+  }
+
+  public class StringReader extends java.io.Reader {
+    ctor public StringReader(String);
+    method public void close();
+    method public int read(char[], int, int) throws java.io.IOException;
+  }
+
+  public class StringWriter extends java.io.Writer {
+    ctor public StringWriter();
+    ctor public StringWriter(int);
+    method public java.io.StringWriter append(CharSequence);
+    method public java.io.StringWriter append(CharSequence, int, int);
+    method public java.io.StringWriter append(char);
+    method public void close() throws java.io.IOException;
+    method public void flush();
+    method public StringBuffer getBuffer();
+    method public void write(int);
+    method public void write(char[], int, int);
+    method public void write(String);
+    method public void write(String, int, int);
+  }
+
+  public class SyncFailedException extends java.io.IOException {
+    ctor public SyncFailedException(String);
+  }
+
+  public class UTFDataFormatException extends java.io.IOException {
+    ctor public UTFDataFormatException();
+    ctor public UTFDataFormatException(String);
+  }
+
+  public class UncheckedIOException extends java.lang.RuntimeException {
+    ctor public UncheckedIOException(String, java.io.IOException);
+    ctor public UncheckedIOException(java.io.IOException);
+    method public java.io.IOException getCause();
+  }
+
+  public class UnsupportedEncodingException extends java.io.IOException {
+    ctor public UnsupportedEncodingException();
+    ctor public UnsupportedEncodingException(String);
+  }
+
+  public class WriteAbortedException extends java.io.ObjectStreamException {
+    ctor public WriteAbortedException(String, Exception);
+    field public Exception detail;
+  }
+
+  public abstract class Writer implements java.lang.Appendable java.io.Closeable java.io.Flushable {
+    ctor protected Writer();
+    ctor protected Writer(Object);
+    method public java.io.Writer append(CharSequence) throws java.io.IOException;
+    method public java.io.Writer append(CharSequence, int, int) throws java.io.IOException;
+    method public java.io.Writer append(char) throws java.io.IOException;
+    method public void write(int) throws java.io.IOException;
+    method public void write(char[]) throws java.io.IOException;
+    method public abstract void write(char[], int, int) throws java.io.IOException;
+    method public void write(String) throws java.io.IOException;
+    method public void write(String, int, int) throws java.io.IOException;
+    field protected Object lock;
+  }
+
+}
+
+package java.lang {
+
+  public class AbstractMethodError extends java.lang.IncompatibleClassChangeError {
+    ctor public AbstractMethodError();
+    ctor public AbstractMethodError(String);
+  }
+
+  public interface Appendable {
+    method @NonNull public Appendable append(@Nullable CharSequence) throws java.io.IOException;
+    method @NonNull public Appendable append(@Nullable CharSequence, int, int) throws java.io.IOException;
+    method @NonNull public Appendable append(char) throws java.io.IOException;
+  }
+
+  public class ArithmeticException extends java.lang.RuntimeException {
+    ctor public ArithmeticException();
+    ctor public ArithmeticException(String);
+  }
+
+  public class ArrayIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
+    ctor public ArrayIndexOutOfBoundsException();
+    ctor public ArrayIndexOutOfBoundsException(int);
+    ctor public ArrayIndexOutOfBoundsException(String);
+  }
+
+  public class ArrayStoreException extends java.lang.RuntimeException {
+    ctor public ArrayStoreException();
+    ctor public ArrayStoreException(String);
+  }
+
+  public class AssertionError extends java.lang.Error {
+    ctor public AssertionError();
+    ctor public AssertionError(Object);
+    ctor public AssertionError(boolean);
+    ctor public AssertionError(char);
+    ctor public AssertionError(int);
+    ctor public AssertionError(long);
+    ctor public AssertionError(float);
+    ctor public AssertionError(double);
+    ctor public AssertionError(String, Throwable);
+  }
+
+  public interface AutoCloseable {
+    method public void close() throws java.lang.Exception;
+  }
+
+  public final class Boolean implements java.lang.Comparable<java.lang.Boolean> java.io.Serializable {
+    ctor public Boolean(boolean);
+    ctor public Boolean(@Nullable String);
+    method public boolean booleanValue();
+    method public static int compare(boolean, boolean);
+    method public int compareTo(@NonNull Boolean);
+    method public static boolean getBoolean(@NonNull String);
+    method public static int hashCode(boolean);
+    method public static boolean logicalAnd(boolean, boolean);
+    method public static boolean logicalOr(boolean, boolean);
+    method public static boolean logicalXor(boolean, boolean);
+    method public static boolean parseBoolean(@Nullable String);
+    method @NonNull public static String toString(boolean);
+    method @NonNull public static Boolean valueOf(boolean);
+    method @NonNull public static Boolean valueOf(@Nullable String);
+    field public static final Boolean FALSE;
+    field public static final Boolean TRUE;
+    field public static final Class<java.lang.Boolean> TYPE;
+  }
+
+  public class BootstrapMethodError extends java.lang.LinkageError {
+    ctor public BootstrapMethodError();
+    ctor public BootstrapMethodError(String);
+    ctor public BootstrapMethodError(String, Throwable);
+    ctor public BootstrapMethodError(Throwable);
+  }
+
+  public final class Byte extends java.lang.Number implements java.lang.Comparable<java.lang.Byte> {
+    ctor @Deprecated public Byte(byte);
+    ctor @Deprecated public Byte(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int compare(byte, byte);
+    method public int compareTo(@NonNull Byte);
+    method public static int compareUnsigned(byte, byte);
+    method @NonNull public static Byte decode(@NonNull String) throws java.lang.NumberFormatException;
+    method public double doubleValue();
+    method public float floatValue();
+    method public static int hashCode(byte);
+    method public int intValue();
+    method public long longValue();
+    method public static byte parseByte(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static byte parseByte(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static String toString(byte);
+    method public static int toUnsignedInt(byte);
+    method public static long toUnsignedLong(byte);
+    method @NonNull public static Byte valueOf(byte);
+    method @NonNull public static Byte valueOf(@NonNull String, int) throws java.lang.NumberFormatException;
+    method @NonNull public static Byte valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    field public static final int BYTES = 1; // 0x1
+    field public static final byte MAX_VALUE = 127; // 0x7f
+    field public static final byte MIN_VALUE = -128; // 0xffffff80
+    field public static final int SIZE = 8; // 0x8
+    field public static final Class<java.lang.Byte> TYPE;
+  }
+
+  public interface CharSequence {
+    method public char charAt(int);
+    method @NonNull public default java.util.stream.IntStream chars();
+    method @NonNull public default java.util.stream.IntStream codePoints();
+    method public int length();
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String toString();
+  }
+
+  public final class Character implements java.lang.Comparable<java.lang.Character> java.io.Serializable {
+    ctor public Character(char);
+    method public static int charCount(int);
+    method public char charValue();
+    method public static int codePointAt(@NonNull CharSequence, int);
+    method public static int codePointAt(char[], int);
+    method public static int codePointAt(char[], int, int);
+    method public static int codePointBefore(@NonNull CharSequence, int);
+    method public static int codePointBefore(char[], int);
+    method public static int codePointBefore(char[], int, int);
+    method public static int codePointCount(@NonNull CharSequence, int, int);
+    method public static int codePointCount(char[], int, int);
+    method public static int compare(char, char);
+    method public int compareTo(@NonNull Character);
+    method public static int digit(char, int);
+    method public static int digit(int, int);
+    method public static char forDigit(int, int);
+    method public static byte getDirectionality(char);
+    method public static byte getDirectionality(int);
+    method @Nullable public static String getName(int);
+    method public static int getNumericValue(char);
+    method public static int getNumericValue(int);
+    method public static int getType(char);
+    method public static int getType(int);
+    method public static int hashCode(char);
+    method public static char highSurrogate(int);
+    method public static boolean isAlphabetic(int);
+    method public static boolean isBmpCodePoint(int);
+    method public static boolean isDefined(char);
+    method public static boolean isDefined(int);
+    method public static boolean isDigit(char);
+    method public static boolean isDigit(int);
+    method public static boolean isHighSurrogate(char);
+    method public static boolean isISOControl(char);
+    method public static boolean isISOControl(int);
+    method public static boolean isIdentifierIgnorable(char);
+    method public static boolean isIdentifierIgnorable(int);
+    method public static boolean isIdeographic(int);
+    method public static boolean isJavaIdentifierPart(char);
+    method public static boolean isJavaIdentifierPart(int);
+    method public static boolean isJavaIdentifierStart(char);
+    method public static boolean isJavaIdentifierStart(int);
+    method @Deprecated public static boolean isJavaLetter(char);
+    method @Deprecated public static boolean isJavaLetterOrDigit(char);
+    method public static boolean isLetter(char);
+    method public static boolean isLetter(int);
+    method public static boolean isLetterOrDigit(char);
+    method public static boolean isLetterOrDigit(int);
+    method public static boolean isLowSurrogate(char);
+    method public static boolean isLowerCase(char);
+    method public static boolean isLowerCase(int);
+    method public static boolean isMirrored(char);
+    method public static boolean isMirrored(int);
+    method @Deprecated public static boolean isSpace(char);
+    method public static boolean isSpaceChar(char);
+    method public static boolean isSpaceChar(int);
+    method public static boolean isSupplementaryCodePoint(int);
+    method public static boolean isSurrogate(char);
+    method public static boolean isSurrogatePair(char, char);
+    method public static boolean isTitleCase(char);
+    method public static boolean isTitleCase(int);
+    method public static boolean isUnicodeIdentifierPart(char);
+    method public static boolean isUnicodeIdentifierPart(int);
+    method public static boolean isUnicodeIdentifierStart(char);
+    method public static boolean isUnicodeIdentifierStart(int);
+    method public static boolean isUpperCase(char);
+    method public static boolean isUpperCase(int);
+    method public static boolean isValidCodePoint(int);
+    method public static boolean isWhitespace(char);
+    method public static boolean isWhitespace(int);
+    method public static char lowSurrogate(int);
+    method public static int offsetByCodePoints(@NonNull CharSequence, int, int);
+    method public static int offsetByCodePoints(char[], int, int, int, int);
+    method public static char reverseBytes(char);
+    method public static int toChars(int, char[], int);
+    method public static char[] toChars(int);
+    method public static int toCodePoint(char, char);
+    method public static char toLowerCase(char);
+    method public static int toLowerCase(int);
+    method @NonNull public static String toString(char);
+    method public static char toTitleCase(char);
+    method public static int toTitleCase(int);
+    method public static char toUpperCase(char);
+    method public static int toUpperCase(int);
+    method @NonNull public static Character valueOf(char);
+    field public static final int BYTES = 2; // 0x2
+    field public static final byte COMBINING_SPACING_MARK = 8; // 0x8
+    field public static final byte CONNECTOR_PUNCTUATION = 23; // 0x17
+    field public static final byte CONTROL = 15; // 0xf
+    field public static final byte CURRENCY_SYMBOL = 26; // 0x1a
+    field public static final byte DASH_PUNCTUATION = 20; // 0x14
+    field public static final byte DECIMAL_DIGIT_NUMBER = 9; // 0x9
+    field public static final byte DIRECTIONALITY_ARABIC_NUMBER = 6; // 0x6
+    field public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 9; // 0x9
+    field public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 7; // 0x7
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 3; // 0x3
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 4; // 0x4
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 5; // 0x5
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 14; // 0xe
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 15; // 0xf
+    field public static final byte DIRECTIONALITY_NONSPACING_MARK = 8; // 0x8
+    field public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 13; // 0xd
+    field public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 10; // 0xa
+    field public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 18; // 0x12
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 2; // 0x2
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 16; // 0x10
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 17; // 0x11
+    field public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 11; // 0xb
+    field public static final byte DIRECTIONALITY_UNDEFINED = -1; // 0xffffffff
+    field public static final byte DIRECTIONALITY_WHITESPACE = 12; // 0xc
+    field public static final byte ENCLOSING_MARK = 7; // 0x7
+    field public static final byte END_PUNCTUATION = 22; // 0x16
+    field public static final byte FINAL_QUOTE_PUNCTUATION = 30; // 0x1e
+    field public static final byte FORMAT = 16; // 0x10
+    field public static final byte INITIAL_QUOTE_PUNCTUATION = 29; // 0x1d
+    field public static final byte LETTER_NUMBER = 10; // 0xa
+    field public static final byte LINE_SEPARATOR = 13; // 0xd
+    field public static final byte LOWERCASE_LETTER = 2; // 0x2
+    field public static final byte MATH_SYMBOL = 25; // 0x19
+    field public static final int MAX_CODE_POINT = 1114111; // 0x10ffff
+    field public static final char MAX_HIGH_SURROGATE = 56319; // 0xdbff '\udbff'
+    field public static final char MAX_LOW_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final int MAX_RADIX = 36; // 0x24
+    field public static final char MAX_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final char MAX_VALUE = 65535; // 0xffff '\uffff'
+    field public static final int MIN_CODE_POINT = 0; // 0x0
+    field public static final char MIN_HIGH_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final char MIN_LOW_SURROGATE = 56320; // 0xdc00 '\udc00'
+    field public static final int MIN_RADIX = 2; // 0x2
+    field public static final int MIN_SUPPLEMENTARY_CODE_POINT = 65536; // 0x10000
+    field public static final char MIN_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final char MIN_VALUE = 0; // 0x0000 '\u0000'
+    field public static final byte MODIFIER_LETTER = 4; // 0x4
+    field public static final byte MODIFIER_SYMBOL = 27; // 0x1b
+    field public static final byte NON_SPACING_MARK = 6; // 0x6
+    field public static final byte OTHER_LETTER = 5; // 0x5
+    field public static final byte OTHER_NUMBER = 11; // 0xb
+    field public static final byte OTHER_PUNCTUATION = 24; // 0x18
+    field public static final byte OTHER_SYMBOL = 28; // 0x1c
+    field public static final byte PARAGRAPH_SEPARATOR = 14; // 0xe
+    field public static final byte PRIVATE_USE = 18; // 0x12
+    field public static final int SIZE = 16; // 0x10
+    field public static final byte SPACE_SEPARATOR = 12; // 0xc
+    field public static final byte START_PUNCTUATION = 21; // 0x15
+    field public static final byte SURROGATE = 19; // 0x13
+    field public static final byte TITLECASE_LETTER = 3; // 0x3
+    field public static final Class<java.lang.Character> TYPE;
+    field public static final byte UNASSIGNED = 0; // 0x0
+    field public static final byte UPPERCASE_LETTER = 1; // 0x1
+  }
+
+  public static class Character.Subset {
+    ctor protected Character.Subset(@NonNull String);
+    method public final boolean equals(@Nullable Object);
+    method public final int hashCode();
+    method @NonNull public final String toString();
+  }
+
+  public static final class Character.UnicodeBlock extends java.lang.Character.Subset {
+    method @NonNull public static java.lang.Character.UnicodeBlock forName(@NonNull String);
+    method @Nullable public static java.lang.Character.UnicodeBlock of(char);
+    method @Nullable public static java.lang.Character.UnicodeBlock of(int);
+    field public static final java.lang.Character.UnicodeBlock AEGEAN_NUMBERS;
+    field public static final java.lang.Character.UnicodeBlock ALCHEMICAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock ALPHABETIC_PRESENTATION_FORMS;
+    field public static final java.lang.Character.UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION;
+    field public static final java.lang.Character.UnicodeBlock ANCIENT_GREEK_NUMBERS;
+    field public static final java.lang.Character.UnicodeBlock ANCIENT_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock ARABIC;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_PRESENTATION_FORMS_A;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_PRESENTATION_FORMS_B;
+    field public static final java.lang.Character.UnicodeBlock ARABIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock ARMENIAN;
+    field public static final java.lang.Character.UnicodeBlock ARROWS;
+    field public static final java.lang.Character.UnicodeBlock AVESTAN;
+    field public static final java.lang.Character.UnicodeBlock BALINESE;
+    field public static final java.lang.Character.UnicodeBlock BAMUM;
+    field public static final java.lang.Character.UnicodeBlock BAMUM_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock BASIC_LATIN;
+    field public static final java.lang.Character.UnicodeBlock BATAK;
+    field public static final java.lang.Character.UnicodeBlock BENGALI;
+    field public static final java.lang.Character.UnicodeBlock BLOCK_ELEMENTS;
+    field public static final java.lang.Character.UnicodeBlock BOPOMOFO;
+    field public static final java.lang.Character.UnicodeBlock BOPOMOFO_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock BOX_DRAWING;
+    field public static final java.lang.Character.UnicodeBlock BRAHMI;
+    field public static final java.lang.Character.UnicodeBlock BRAILLE_PATTERNS;
+    field public static final java.lang.Character.UnicodeBlock BUGINESE;
+    field public static final java.lang.Character.UnicodeBlock BUHID;
+    field public static final java.lang.Character.UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock CARIAN;
+    field public static final java.lang.Character.UnicodeBlock CHAKMA;
+    field public static final java.lang.Character.UnicodeBlock CHAM;
+    field public static final java.lang.Character.UnicodeBlock CHEROKEE;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_FORMS;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS;
+    field public static final java.lang.Character.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock CJK_RADICALS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock CJK_STROKES;
+    field public static final java.lang.Character.UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C;
+    field public static final java.lang.Character.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_DIACRITICAL_MARKS;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_HALF_MARKS;
+    field public static final java.lang.Character.UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock COMMON_INDIC_NUMBER_FORMS;
+    field public static final java.lang.Character.UnicodeBlock CONTROL_PICTURES;
+    field public static final java.lang.Character.UnicodeBlock COPTIC;
+    field public static final java.lang.Character.UnicodeBlock COUNTING_ROD_NUMERALS;
+    field public static final java.lang.Character.UnicodeBlock CUNEIFORM;
+    field public static final java.lang.Character.UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock CURRENCY_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock CYPRIOT_SYLLABARY;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC_EXTENDED_B;
+    field public static final java.lang.Character.UnicodeBlock CYRILLIC_SUPPLEMENTARY;
+    field public static final java.lang.Character.UnicodeBlock DESERET;
+    field public static final java.lang.Character.UnicodeBlock DEVANAGARI;
+    field public static final java.lang.Character.UnicodeBlock DEVANAGARI_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock DINGBATS;
+    field public static final java.lang.Character.UnicodeBlock DOMINO_TILES;
+    field public static final java.lang.Character.UnicodeBlock EGYPTIAN_HIEROGLYPHS;
+    field public static final java.lang.Character.UnicodeBlock EMOTICONS;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_ALPHANUMERICS;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS;
+    field public static final java.lang.Character.UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock ETHIOPIC_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock GENERAL_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock GEOMETRIC_SHAPES;
+    field public static final java.lang.Character.UnicodeBlock GEORGIAN;
+    field public static final java.lang.Character.UnicodeBlock GEORGIAN_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock GLAGOLITIC;
+    field public static final java.lang.Character.UnicodeBlock GOTHIC;
+    field public static final java.lang.Character.UnicodeBlock GREEK;
+    field public static final java.lang.Character.UnicodeBlock GREEK_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock GUJARATI;
+    field public static final java.lang.Character.UnicodeBlock GURMUKHI;
+    field public static final java.lang.Character.UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_COMPATIBILITY_JAMO;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_JAMO_EXTENDED_B;
+    field public static final java.lang.Character.UnicodeBlock HANGUL_SYLLABLES;
+    field public static final java.lang.Character.UnicodeBlock HANUNOO;
+    field public static final java.lang.Character.UnicodeBlock HEBREW;
+    field public static final java.lang.Character.UnicodeBlock HIGH_PRIVATE_USE_SURROGATES;
+    field public static final java.lang.Character.UnicodeBlock HIGH_SURROGATES;
+    field public static final java.lang.Character.UnicodeBlock HIRAGANA;
+    field public static final java.lang.Character.UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS;
+    field public static final java.lang.Character.UnicodeBlock IMPERIAL_ARAMAIC;
+    field public static final java.lang.Character.UnicodeBlock INSCRIPTIONAL_PAHLAVI;
+    field public static final java.lang.Character.UnicodeBlock INSCRIPTIONAL_PARTHIAN;
+    field public static final java.lang.Character.UnicodeBlock IPA_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock JAVANESE;
+    field public static final java.lang.Character.UnicodeBlock KAITHI;
+    field public static final java.lang.Character.UnicodeBlock KANA_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock KANBUN;
+    field public static final java.lang.Character.UnicodeBlock KANGXI_RADICALS;
+    field public static final java.lang.Character.UnicodeBlock KANNADA;
+    field public static final java.lang.Character.UnicodeBlock KATAKANA;
+    field public static final java.lang.Character.UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock KAYAH_LI;
+    field public static final java.lang.Character.UnicodeBlock KHAROSHTHI;
+    field public static final java.lang.Character.UnicodeBlock KHMER;
+    field public static final java.lang.Character.UnicodeBlock KHMER_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock LAO;
+    field public static final java.lang.Character.UnicodeBlock LATIN_1_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_ADDITIONAL;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_B;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_C;
+    field public static final java.lang.Character.UnicodeBlock LATIN_EXTENDED_D;
+    field public static final java.lang.Character.UnicodeBlock LEPCHA;
+    field public static final java.lang.Character.UnicodeBlock LETTERLIKE_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock LIMBU;
+    field public static final java.lang.Character.UnicodeBlock LINEAR_B_IDEOGRAMS;
+    field public static final java.lang.Character.UnicodeBlock LINEAR_B_SYLLABARY;
+    field public static final java.lang.Character.UnicodeBlock LISU;
+    field public static final java.lang.Character.UnicodeBlock LOW_SURROGATES;
+    field public static final java.lang.Character.UnicodeBlock LYCIAN;
+    field public static final java.lang.Character.UnicodeBlock LYDIAN;
+    field public static final java.lang.Character.UnicodeBlock MAHJONG_TILES;
+    field public static final java.lang.Character.UnicodeBlock MALAYALAM;
+    field public static final java.lang.Character.UnicodeBlock MANDAIC;
+    field public static final java.lang.Character.UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock MATHEMATICAL_OPERATORS;
+    field public static final java.lang.Character.UnicodeBlock MEETEI_MAYEK;
+    field public static final java.lang.Character.UnicodeBlock MEETEI_MAYEK_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock MEROITIC_CURSIVE;
+    field public static final java.lang.Character.UnicodeBlock MEROITIC_HIEROGLYPHS;
+    field public static final java.lang.Character.UnicodeBlock MIAO;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS;
+    field public static final java.lang.Character.UnicodeBlock MISCELLANEOUS_TECHNICAL;
+    field public static final java.lang.Character.UnicodeBlock MODIFIER_TONE_LETTERS;
+    field public static final java.lang.Character.UnicodeBlock MONGOLIAN;
+    field public static final java.lang.Character.UnicodeBlock MUSICAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock MYANMAR;
+    field public static final java.lang.Character.UnicodeBlock MYANMAR_EXTENDED_A;
+    field public static final java.lang.Character.UnicodeBlock NEW_TAI_LUE;
+    field public static final java.lang.Character.UnicodeBlock NKO;
+    field public static final java.lang.Character.UnicodeBlock NUMBER_FORMS;
+    field public static final java.lang.Character.UnicodeBlock OGHAM;
+    field public static final java.lang.Character.UnicodeBlock OLD_ITALIC;
+    field public static final java.lang.Character.UnicodeBlock OLD_PERSIAN;
+    field public static final java.lang.Character.UnicodeBlock OLD_SOUTH_ARABIAN;
+    field public static final java.lang.Character.UnicodeBlock OLD_TURKIC;
+    field public static final java.lang.Character.UnicodeBlock OL_CHIKI;
+    field public static final java.lang.Character.UnicodeBlock OPTICAL_CHARACTER_RECOGNITION;
+    field public static final java.lang.Character.UnicodeBlock ORIYA;
+    field public static final java.lang.Character.UnicodeBlock OSMANYA;
+    field public static final java.lang.Character.UnicodeBlock PHAGS_PA;
+    field public static final java.lang.Character.UnicodeBlock PHAISTOS_DISC;
+    field public static final java.lang.Character.UnicodeBlock PHOENICIAN;
+    field public static final java.lang.Character.UnicodeBlock PHONETIC_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock PLAYING_CARDS;
+    field public static final java.lang.Character.UnicodeBlock PRIVATE_USE_AREA;
+    field public static final java.lang.Character.UnicodeBlock REJANG;
+    field public static final java.lang.Character.UnicodeBlock RUMI_NUMERAL_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock RUNIC;
+    field public static final java.lang.Character.UnicodeBlock SAMARITAN;
+    field public static final java.lang.Character.UnicodeBlock SAURASHTRA;
+    field public static final java.lang.Character.UnicodeBlock SHARADA;
+    field public static final java.lang.Character.UnicodeBlock SHAVIAN;
+    field public static final java.lang.Character.UnicodeBlock SINHALA;
+    field public static final java.lang.Character.UnicodeBlock SMALL_FORM_VARIANTS;
+    field public static final java.lang.Character.UnicodeBlock SORA_SOMPENG;
+    field public static final java.lang.Character.UnicodeBlock SPACING_MODIFIER_LETTERS;
+    field public static final java.lang.Character.UnicodeBlock SPECIALS;
+    field public static final java.lang.Character.UnicodeBlock SUNDANESE;
+    field public static final java.lang.Character.UnicodeBlock SUNDANESE_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_ARROWS_A;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_ARROWS_B;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTAL_PUNCTUATION;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A;
+    field public static final java.lang.Character.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B;
+    field @Deprecated public static final java.lang.Character.UnicodeBlock SURROGATES_AREA;
+    field public static final java.lang.Character.UnicodeBlock SYLOTI_NAGRI;
+    field public static final java.lang.Character.UnicodeBlock SYRIAC;
+    field public static final java.lang.Character.UnicodeBlock TAGALOG;
+    field public static final java.lang.Character.UnicodeBlock TAGBANWA;
+    field public static final java.lang.Character.UnicodeBlock TAGS;
+    field public static final java.lang.Character.UnicodeBlock TAI_LE;
+    field public static final java.lang.Character.UnicodeBlock TAI_THAM;
+    field public static final java.lang.Character.UnicodeBlock TAI_VIET;
+    field public static final java.lang.Character.UnicodeBlock TAI_XUAN_JING_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock TAKRI;
+    field public static final java.lang.Character.UnicodeBlock TAMIL;
+    field public static final java.lang.Character.UnicodeBlock TELUGU;
+    field public static final java.lang.Character.UnicodeBlock THAANA;
+    field public static final java.lang.Character.UnicodeBlock THAI;
+    field public static final java.lang.Character.UnicodeBlock TIBETAN;
+    field public static final java.lang.Character.UnicodeBlock TIFINAGH;
+    field public static final java.lang.Character.UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock UGARITIC;
+    field public static final java.lang.Character.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS;
+    field public static final java.lang.Character.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED;
+    field public static final java.lang.Character.UnicodeBlock VAI;
+    field public static final java.lang.Character.UnicodeBlock VARIATION_SELECTORS;
+    field public static final java.lang.Character.UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT;
+    field public static final java.lang.Character.UnicodeBlock VEDIC_EXTENSIONS;
+    field public static final java.lang.Character.UnicodeBlock VERTICAL_FORMS;
+    field public static final java.lang.Character.UnicodeBlock YIJING_HEXAGRAM_SYMBOLS;
+    field public static final java.lang.Character.UnicodeBlock YI_RADICALS;
+    field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES;
+  }
+
+  public enum Character.UnicodeScript {
+    method @NonNull public static java.lang.Character.UnicodeScript forName(@NonNull String);
+    method @NonNull public static java.lang.Character.UnicodeScript of(int);
+    enum_constant public static final java.lang.Character.UnicodeScript ARABIC;
+    enum_constant public static final java.lang.Character.UnicodeScript ARMENIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript AVESTAN;
+    enum_constant public static final java.lang.Character.UnicodeScript BALINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BAMUM;
+    enum_constant public static final java.lang.Character.UnicodeScript BATAK;
+    enum_constant public static final java.lang.Character.UnicodeScript BENGALI;
+    enum_constant public static final java.lang.Character.UnicodeScript BOPOMOFO;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAHMI;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAILLE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUGINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUHID;
+    enum_constant public static final java.lang.Character.UnicodeScript CANADIAN_ABORIGINAL;
+    enum_constant public static final java.lang.Character.UnicodeScript CARIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript CHAKMA;
+    enum_constant public static final java.lang.Character.UnicodeScript CHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript CHEROKEE;
+    enum_constant public static final java.lang.Character.UnicodeScript COMMON;
+    enum_constant public static final java.lang.Character.UnicodeScript COPTIC;
+    enum_constant public static final java.lang.Character.UnicodeScript CUNEIFORM;
+    enum_constant public static final java.lang.Character.UnicodeScript CYPRIOT;
+    enum_constant public static final java.lang.Character.UnicodeScript CYRILLIC;
+    enum_constant public static final java.lang.Character.UnicodeScript DESERET;
+    enum_constant public static final java.lang.Character.UnicodeScript DEVANAGARI;
+    enum_constant public static final java.lang.Character.UnicodeScript EGYPTIAN_HIEROGLYPHS;
+    enum_constant public static final java.lang.Character.UnicodeScript ETHIOPIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GEORGIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript GLAGOLITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GOTHIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GREEK;
+    enum_constant public static final java.lang.Character.UnicodeScript GUJARATI;
+    enum_constant public static final java.lang.Character.UnicodeScript GURMUKHI;
+    enum_constant public static final java.lang.Character.UnicodeScript HAN;
+    enum_constant public static final java.lang.Character.UnicodeScript HANGUL;
+    enum_constant public static final java.lang.Character.UnicodeScript HANUNOO;
+    enum_constant public static final java.lang.Character.UnicodeScript HEBREW;
+    enum_constant public static final java.lang.Character.UnicodeScript HIRAGANA;
+    enum_constant public static final java.lang.Character.UnicodeScript IMPERIAL_ARAMAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript INHERITED;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PAHLAVI;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PARTHIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript JAVANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript KAITHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KANNADA;
+    enum_constant public static final java.lang.Character.UnicodeScript KATAKANA;
+    enum_constant public static final java.lang.Character.UnicodeScript KAYAH_LI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHAROSHTHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHMER;
+    enum_constant public static final java.lang.Character.UnicodeScript LAO;
+    enum_constant public static final java.lang.Character.UnicodeScript LATIN;
+    enum_constant public static final java.lang.Character.UnicodeScript LEPCHA;
+    enum_constant public static final java.lang.Character.UnicodeScript LIMBU;
+    enum_constant public static final java.lang.Character.UnicodeScript LINEAR_B;
+    enum_constant public static final java.lang.Character.UnicodeScript LISU;
+    enum_constant public static final java.lang.Character.UnicodeScript LYCIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript LYDIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MALAYALAM;
+    enum_constant public static final java.lang.Character.UnicodeScript MANDAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript MEETEI_MAYEK;
+    enum_constant public static final java.lang.Character.UnicodeScript MEROITIC_CURSIVE;
+    enum_constant public static final java.lang.Character.UnicodeScript MEROITIC_HIEROGLYPHS;
+    enum_constant public static final java.lang.Character.UnicodeScript MIAO;
+    enum_constant public static final java.lang.Character.UnicodeScript MONGOLIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MYANMAR;
+    enum_constant public static final java.lang.Character.UnicodeScript NEW_TAI_LUE;
+    enum_constant public static final java.lang.Character.UnicodeScript NKO;
+    enum_constant public static final java.lang.Character.UnicodeScript OGHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_ITALIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_PERSIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_SOUTH_ARABIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_TURKIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OL_CHIKI;
+    enum_constant public static final java.lang.Character.UnicodeScript ORIYA;
+    enum_constant public static final java.lang.Character.UnicodeScript OSMANYA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHAGS_PA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHOENICIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript REJANG;
+    enum_constant public static final java.lang.Character.UnicodeScript RUNIC;
+    enum_constant public static final java.lang.Character.UnicodeScript SAMARITAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SAURASHTRA;
+    enum_constant public static final java.lang.Character.UnicodeScript SHARADA;
+    enum_constant public static final java.lang.Character.UnicodeScript SHAVIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SINHALA;
+    enum_constant public static final java.lang.Character.UnicodeScript SORA_SOMPENG;
+    enum_constant public static final java.lang.Character.UnicodeScript SUNDANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript SYLOTI_NAGRI;
+    enum_constant public static final java.lang.Character.UnicodeScript SYRIAC;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGALOG;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGBANWA;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_LE;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_THAM;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_VIET;
+    enum_constant public static final java.lang.Character.UnicodeScript TAKRI;
+    enum_constant public static final java.lang.Character.UnicodeScript TAMIL;
+    enum_constant public static final java.lang.Character.UnicodeScript TELUGU;
+    enum_constant public static final java.lang.Character.UnicodeScript THAANA;
+    enum_constant public static final java.lang.Character.UnicodeScript THAI;
+    enum_constant public static final java.lang.Character.UnicodeScript TIBETAN;
+    enum_constant public static final java.lang.Character.UnicodeScript TIFINAGH;
+    enum_constant public static final java.lang.Character.UnicodeScript UGARITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript UNKNOWN;
+    enum_constant public static final java.lang.Character.UnicodeScript VAI;
+    enum_constant public static final java.lang.Character.UnicodeScript YI;
+  }
+
+  public final class Class<T> implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
+    method @NonNull public <U> Class<? extends U> asSubclass(@NonNull Class<U>);
+    method @Nullable public T cast(@Nullable Object);
+    method public boolean desiredAssertionStatus();
+    method @NonNull public static Class<?> forName(@NonNull String) throws java.lang.ClassNotFoundException;
+    method @NonNull public static Class<?> forName(@NonNull String, boolean, @Nullable ClassLoader) throws java.lang.ClassNotFoundException;
+    method @Nullable public <A extends java.lang.annotation.Annotation> A getAnnotation(@NonNull Class<A>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method @NonNull public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(@NonNull Class<A>);
+    method @Nullable public String getCanonicalName();
+    method @Nullable public ClassLoader getClassLoader();
+    method @NonNull public Class<?>[] getClasses();
+    method @Nullable public Class<?> getComponentType();
+    method @NonNull public java.lang.reflect.Constructor<T> getConstructor(@Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
+    method @Nullable public <A extends java.lang.annotation.Annotation> A getDeclaredAnnotation(@NonNull Class<A>);
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method @NonNull public Class<?>[] getDeclaredClasses();
+    method @NonNull public java.lang.reflect.Constructor<T> getDeclaredConstructor(@Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Constructor<?>[] getDeclaredConstructors() throws java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Field getDeclaredField(@NonNull String) throws java.lang.NoSuchFieldException;
+    method @NonNull public java.lang.reflect.Field[] getDeclaredFields();
+    method @NonNull public java.lang.reflect.Method getDeclaredMethod(@NonNull String, @Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Method[] getDeclaredMethods() throws java.lang.SecurityException;
+    method @Nullable public Class<?> getDeclaringClass();
+    method @Nullable public Class<?> getEnclosingClass();
+    method @Nullable public java.lang.reflect.Constructor<?> getEnclosingConstructor();
+    method @Nullable public java.lang.reflect.Method getEnclosingMethod();
+    method @Nullable public T[] getEnumConstants();
+    method @NonNull public java.lang.reflect.Field getField(@NonNull String) throws java.lang.NoSuchFieldException;
+    method @NonNull public java.lang.reflect.Field[] getFields() throws java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Type[] getGenericInterfaces();
+    method @Nullable public java.lang.reflect.Type getGenericSuperclass();
+    method @NonNull public Class<?>[] getInterfaces();
+    method @NonNull public java.lang.reflect.Method getMethod(@NonNull String, @Nullable Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @NonNull public java.lang.reflect.Method[] getMethods() throws java.lang.SecurityException;
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method @Nullable public Package getPackage();
+    method @NonNull public String getPackageName();
+    method @Nullable public java.security.ProtectionDomain getProtectionDomain();
+    method @Nullable public java.net.URL getResource(@NonNull String);
+    method @Nullable public java.io.InputStream getResourceAsStream(@NonNull String);
+    method @Nullable public Object[] getSigners();
+    method @NonNull public String getSimpleName();
+    method @Nullable public Class<? super T> getSuperclass();
+    method @NonNull public java.lang.reflect.TypeVariable<java.lang.Class<T>>[] getTypeParameters();
+    method public boolean isAnnotation();
+    method public boolean isAnonymousClass();
+    method public boolean isArray();
+    method public boolean isAssignableFrom(@NonNull Class<?>);
+    method public boolean isEnum();
+    method public boolean isInstance(@Nullable Object);
+    method public boolean isInterface();
+    method public boolean isLocalClass();
+    method public boolean isMemberClass();
+    method public boolean isPrimitive();
+    method public boolean isSynthetic();
+    method @NonNull public T newInstance() throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method @NonNull public String toGenericString();
+  }
+
+  public class ClassCastException extends java.lang.RuntimeException {
+    ctor public ClassCastException();
+    ctor public ClassCastException(String);
+  }
+
+  public class ClassCircularityError extends java.lang.LinkageError {
+    ctor public ClassCircularityError();
+    ctor public ClassCircularityError(String);
+  }
+
+  public class ClassFormatError extends java.lang.LinkageError {
+    ctor public ClassFormatError();
+    ctor public ClassFormatError(String);
+  }
+
+  public abstract class ClassLoader {
+    ctor protected ClassLoader(ClassLoader);
+    ctor protected ClassLoader();
+    method public void clearAssertionStatus();
+    method @Deprecated protected final Class<?> defineClass(byte[], int, int) throws java.lang.ClassFormatError;
+    method protected final Class<?> defineClass(String, byte[], int, int) throws java.lang.ClassFormatError;
+    method protected final Class<?> defineClass(String, byte[], int, int, java.security.ProtectionDomain) throws java.lang.ClassFormatError;
+    method protected final Class<?> defineClass(String, java.nio.ByteBuffer, java.security.ProtectionDomain) throws java.lang.ClassFormatError;
+    method protected Package definePackage(String, String, String, String, String, String, String, java.net.URL) throws java.lang.IllegalArgumentException;
+    method protected Class<?> findClass(String) throws java.lang.ClassNotFoundException;
+    method protected String findLibrary(String);
+    method protected final Class<?> findLoadedClass(String);
+    method protected java.net.URL findResource(String);
+    method protected java.util.Enumeration<java.net.URL> findResources(String) throws java.io.IOException;
+    method protected final Class<?> findSystemClass(String) throws java.lang.ClassNotFoundException;
+    method protected Package getPackage(String);
+    method protected Package[] getPackages();
+    method public final ClassLoader getParent();
+    method public java.net.URL getResource(String);
+    method public java.io.InputStream getResourceAsStream(String);
+    method public java.util.Enumeration<java.net.URL> getResources(String) throws java.io.IOException;
+    method public static ClassLoader getSystemClassLoader();
+    method public static java.net.URL getSystemResource(String);
+    method public static java.io.InputStream getSystemResourceAsStream(String);
+    method public static java.util.Enumeration<java.net.URL> getSystemResources(String) throws java.io.IOException;
+    method public Class<?> loadClass(String) throws java.lang.ClassNotFoundException;
+    method protected Class<?> loadClass(String, boolean) throws java.lang.ClassNotFoundException;
+    method protected static boolean registerAsParallelCapable();
+    method protected final void resolveClass(Class<?>);
+    method public void setClassAssertionStatus(String, boolean);
+    method public void setDefaultAssertionStatus(boolean);
+    method public void setPackageAssertionStatus(String, boolean);
+    method protected final void setSigners(Class<?>, Object[]);
+  }
+
+  public class ClassNotFoundException extends java.lang.ReflectiveOperationException {
+    ctor public ClassNotFoundException();
+    ctor public ClassNotFoundException(String);
+    ctor public ClassNotFoundException(String, Throwable);
+    method public Throwable getException();
+  }
+
+  public class CloneNotSupportedException extends java.lang.Exception {
+    ctor public CloneNotSupportedException();
+    ctor public CloneNotSupportedException(String);
+  }
+
+  public interface Cloneable {
+  }
+
+  public interface Comparable<T> {
+    method public int compareTo(T);
+  }
+
+  public final class Compiler {
+    method public static Object command(Object);
+    method public static boolean compileClass(Class<?>);
+    method public static boolean compileClasses(String);
+    method public static void disable();
+    method public static void enable();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.LOCAL_VARIABLE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PACKAGE, java.lang.annotation.ElementType.MODULE, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.TYPE}) public @interface Deprecated {
+    method public abstract boolean forRemoval() default false;
+    method public abstract String since() default "";
+  }
+
+  public final class Double extends java.lang.Number implements java.lang.Comparable<java.lang.Double> {
+    ctor public Double(double);
+    ctor public Double(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int compare(double, double);
+    method public int compareTo(@NonNull Double);
+    method public static long doubleToLongBits(double);
+    method public static long doubleToRawLongBits(double);
+    method public double doubleValue();
+    method public float floatValue();
+    method public static int hashCode(double);
+    method public int intValue();
+    method public static boolean isFinite(double);
+    method public static boolean isInfinite(double);
+    method public boolean isInfinite();
+    method public static boolean isNaN(double);
+    method public boolean isNaN();
+    method public static double longBitsToDouble(long);
+    method public long longValue();
+    method public static double max(double, double);
+    method public static double min(double, double);
+    method public static double parseDouble(@NonNull String) throws java.lang.NumberFormatException;
+    method public static double sum(double, double);
+    method @NonNull public static String toHexString(double);
+    method @NonNull public static String toString(double);
+    method @NonNull public static Double valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Double valueOf(double);
+    field public static final int BYTES = 8; // 0x8
+    field public static final int MAX_EXPONENT = 1023; // 0x3ff
+    field public static final double MAX_VALUE = 1.7976931348623157E308;
+    field public static final int MIN_EXPONENT = -1022; // 0xfffffc02
+    field public static final double MIN_NORMAL = 2.2250738585072014E-308;
+    field public static final double MIN_VALUE = 4.9E-324;
+    field public static final double NEGATIVE_INFINITY = (-1.0/0.0);
+    field public static final double NaN = (0.0/0.0);
+    field public static final double POSITIVE_INFINITY = (1.0/0.0);
+    field public static final int SIZE = 64; // 0x40
+    field public static final Class<java.lang.Double> TYPE;
+  }
+
+  public abstract class Enum<E extends java.lang.Enum<E>> implements java.lang.Comparable<E> java.io.Serializable {
+    ctor protected Enum(@NonNull String, int);
+    method @NonNull protected final Object clone() throws java.lang.CloneNotSupportedException;
+    method public final int compareTo(E);
+    method public final boolean equals(@Nullable Object);
+    method protected final void finalize();
+    method @NonNull public final Class<E> getDeclaringClass();
+    method public final int hashCode();
+    method @NonNull public final String name();
+    method public final int ordinal();
+    method @NonNull public static <T extends java.lang.Enum<T>> T valueOf(@NonNull Class<T>, @NonNull String);
+  }
+
+  public class EnumConstantNotPresentException extends java.lang.RuntimeException {
+    ctor public EnumConstantNotPresentException(Class<? extends java.lang.Enum>, String);
+    method public String constantName();
+    method public Class<? extends java.lang.Enum> enumType();
+  }
+
+  public class Error extends java.lang.Throwable {
+    ctor public Error();
+    ctor public Error(String);
+    ctor public Error(String, Throwable);
+    ctor public Error(Throwable);
+    ctor protected Error(String, Throwable, boolean, boolean);
+  }
+
+  public class Exception extends java.lang.Throwable {
+    ctor public Exception();
+    ctor public Exception(String);
+    ctor public Exception(String, Throwable);
+    ctor public Exception(Throwable);
+    ctor protected Exception(String, Throwable, boolean, boolean);
+  }
+
+  public class ExceptionInInitializerError extends java.lang.LinkageError {
+    ctor public ExceptionInInitializerError();
+    ctor public ExceptionInInitializerError(Throwable);
+    ctor public ExceptionInInitializerError(String);
+    method public Throwable getException();
+  }
+
+  public final class Float extends java.lang.Number implements java.lang.Comparable<java.lang.Float> {
+    ctor public Float(float);
+    ctor public Float(double);
+    ctor public Float(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int compare(float, float);
+    method public int compareTo(@NonNull Float);
+    method public double doubleValue();
+    method public static int floatToIntBits(float);
+    method public static int floatToRawIntBits(float);
+    method public float floatValue();
+    method public static int hashCode(float);
+    method public static float intBitsToFloat(int);
+    method public int intValue();
+    method public static boolean isFinite(float);
+    method public static boolean isInfinite(float);
+    method public boolean isInfinite();
+    method public static boolean isNaN(float);
+    method public boolean isNaN();
+    method public long longValue();
+    method public static float max(float, float);
+    method public static float min(float, float);
+    method public static float parseFloat(@NonNull String) throws java.lang.NumberFormatException;
+    method public static float sum(float, float);
+    method @NonNull public static String toHexString(float);
+    method @NonNull public static String toString(float);
+    method @NonNull public static Float valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Float valueOf(float);
+    field public static final int BYTES = 4; // 0x4
+    field public static final int MAX_EXPONENT = 127; // 0x7f
+    field public static final float MAX_VALUE = 3.4028235E38f;
+    field public static final int MIN_EXPONENT = -126; // 0xffffff82
+    field public static final float MIN_NORMAL = 1.17549435E-38f;
+    field public static final float MIN_VALUE = 1.4E-45f;
+    field public static final float NEGATIVE_INFINITY = (-1.0f/0.0f);
+    field public static final float NaN = (0.0f/0.0f);
+    field public static final float POSITIVE_INFINITY = (1.0f/0.0f);
+    field public static final int SIZE = 32; // 0x20
+    field public static final Class<java.lang.Float> TYPE;
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE) public @interface FunctionalInterface {
+  }
+
+  public class IllegalAccessError extends java.lang.IncompatibleClassChangeError {
+    ctor public IllegalAccessError();
+    ctor public IllegalAccessError(String);
+  }
+
+  public class IllegalAccessException extends java.lang.ReflectiveOperationException {
+    ctor public IllegalAccessException();
+    ctor public IllegalAccessException(String);
+  }
+
+  public class IllegalArgumentException extends java.lang.RuntimeException {
+    ctor public IllegalArgumentException();
+    ctor public IllegalArgumentException(String);
+    ctor public IllegalArgumentException(String, Throwable);
+    ctor public IllegalArgumentException(Throwable);
+  }
+
+  public class IllegalMonitorStateException extends java.lang.RuntimeException {
+    ctor public IllegalMonitorStateException();
+    ctor public IllegalMonitorStateException(String);
+  }
+
+  public class IllegalStateException extends java.lang.RuntimeException {
+    ctor public IllegalStateException();
+    ctor public IllegalStateException(String);
+    ctor public IllegalStateException(String, Throwable);
+    ctor public IllegalStateException(Throwable);
+  }
+
+  public class IllegalThreadStateException extends java.lang.IllegalArgumentException {
+    ctor public IllegalThreadStateException();
+    ctor public IllegalThreadStateException(String);
+  }
+
+  public class IncompatibleClassChangeError extends java.lang.LinkageError {
+    ctor public IncompatibleClassChangeError();
+    ctor public IncompatibleClassChangeError(String);
+  }
+
+  public class IndexOutOfBoundsException extends java.lang.RuntimeException {
+    ctor public IndexOutOfBoundsException();
+    ctor public IndexOutOfBoundsException(String);
+  }
+
+  public class InheritableThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public InheritableThreadLocal();
+    method protected T childValue(T);
+  }
+
+  public class InstantiationError extends java.lang.IncompatibleClassChangeError {
+    ctor public InstantiationError();
+    ctor public InstantiationError(String);
+  }
+
+  public class InstantiationException extends java.lang.ReflectiveOperationException {
+    ctor public InstantiationException();
+    ctor public InstantiationException(String);
+  }
+
+  public final class Integer extends java.lang.Number implements java.lang.Comparable<java.lang.Integer> {
+    ctor public Integer(int);
+    ctor public Integer(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int bitCount(int);
+    method public static int compare(int, int);
+    method public int compareTo(@NonNull Integer);
+    method public static int compareUnsigned(int, int);
+    method @NonNull public static Integer decode(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int divideUnsigned(int, int);
+    method public double doubleValue();
+    method public float floatValue();
+    method @Nullable public static Integer getInteger(@NonNull String);
+    method @Nullable public static Integer getInteger(@NonNull String, int);
+    method @Nullable public static Integer getInteger(@NonNull String, @Nullable Integer);
+    method public static int hashCode(int);
+    method public static int highestOneBit(int);
+    method public int intValue();
+    method public long longValue();
+    method public static int lowestOneBit(int);
+    method public static int max(int, int);
+    method public static int min(int, int);
+    method public static int numberOfLeadingZeros(int);
+    method public static int numberOfTrailingZeros(int);
+    method public static int parseInt(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static int parseInt(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int parseUnsignedInt(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static int parseUnsignedInt(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int remainderUnsigned(int, int);
+    method public static int reverse(int);
+    method public static int reverseBytes(int);
+    method public static int rotateLeft(int, int);
+    method public static int rotateRight(int, int);
+    method public static int signum(int);
+    method public static int sum(int, int);
+    method @NonNull public static String toBinaryString(int);
+    method @NonNull public static String toHexString(int);
+    method @NonNull public static String toOctalString(int);
+    method @NonNull public static String toString(int, int);
+    method @NonNull public static String toString(int);
+    method public static long toUnsignedLong(int);
+    method @NonNull public static String toUnsignedString(int, int);
+    method @NonNull public static String toUnsignedString(int);
+    method @NonNull public static Integer valueOf(@NonNull String, int) throws java.lang.NumberFormatException;
+    method @NonNull public static Integer valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Integer valueOf(int);
+    field public static final int BYTES = 4; // 0x4
+    field public static final int MAX_VALUE = 2147483647; // 0x7fffffff
+    field public static final int MIN_VALUE = -2147483648; // 0x80000000
+    field public static final int SIZE = 32; // 0x20
+    field public static final Class<java.lang.Integer> TYPE;
+  }
+
+  public class InternalError extends java.lang.VirtualMachineError {
+    ctor public InternalError();
+    ctor public InternalError(String);
+    ctor public InternalError(String, Throwable);
+    ctor public InternalError(Throwable);
+  }
+
+  public class InterruptedException extends java.lang.Exception {
+    ctor public InterruptedException();
+    ctor public InterruptedException(String);
+  }
+
+  public interface Iterable<T> {
+    method public default void forEach(@NonNull java.util.function.Consumer<? super T>);
+    method @NonNull public java.util.Iterator<T> iterator();
+    method @NonNull public default java.util.Spliterator<T> spliterator();
+  }
+
+  public class LinkageError extends java.lang.Error {
+    ctor public LinkageError();
+    ctor public LinkageError(String);
+    ctor public LinkageError(String, Throwable);
+  }
+
+  public final class Long extends java.lang.Number implements java.lang.Comparable<java.lang.Long> {
+    ctor public Long(long);
+    ctor public Long(@NonNull String) throws java.lang.NumberFormatException;
+    method public static int bitCount(long);
+    method public static int compare(long, long);
+    method public int compareTo(@NonNull Long);
+    method public static int compareUnsigned(long, long);
+    method @NonNull public static Long decode(@NonNull String) throws java.lang.NumberFormatException;
+    method public static long divideUnsigned(long, long);
+    method public double doubleValue();
+    method public float floatValue();
+    method @Nullable public static Long getLong(@NonNull String);
+    method @Nullable public static Long getLong(@NonNull String, long);
+    method @Nullable public static Long getLong(@NonNull String, @Nullable Long);
+    method public static int hashCode(long);
+    method public static long highestOneBit(long);
+    method public int intValue();
+    method public long longValue();
+    method public static long lowestOneBit(long);
+    method public static long max(long, long);
+    method public static long min(long, long);
+    method public static int numberOfLeadingZeros(long);
+    method public static int numberOfTrailingZeros(long);
+    method public static long parseLong(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static long parseLong(@NonNull String) throws java.lang.NumberFormatException;
+    method public static long parseUnsignedLong(@NonNull String, int) throws java.lang.NumberFormatException;
+    method public static long parseUnsignedLong(@NonNull String) throws java.lang.NumberFormatException;
+    method public static long remainderUnsigned(long, long);
+    method public static long reverse(long);
+    method public static long reverseBytes(long);
+    method public static long rotateLeft(long, int);
+    method public static long rotateRight(long, int);
+    method public static int signum(long);
+    method public static long sum(long, long);
+    method @NonNull public static String toBinaryString(long);
+    method @NonNull public static String toHexString(long);
+    method @NonNull public static String toOctalString(long);
+    method @NonNull public static String toString(long, int);
+    method @NonNull public static String toString(long);
+    method @NonNull public static String toUnsignedString(long, int);
+    method @NonNull public static String toUnsignedString(long);
+    method @NonNull public static Long valueOf(@NonNull String, int) throws java.lang.NumberFormatException;
+    method @NonNull public static Long valueOf(@NonNull String) throws java.lang.NumberFormatException;
+    method @NonNull public static Long valueOf(long);
+    field public static final int BYTES = 8; // 0x8
+    field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL
+    field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L
+    field public static final int SIZE = 64; // 0x40
+    field public static final Class<java.lang.Long> TYPE;
+  }
+
+  public final class Math {
+    method public static double IEEEremainder(double, double);
+    method public static int abs(int);
+    method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
+    method public static double acos(double);
+    method public static int addExact(int, int);
+    method public static long addExact(long, long);
+    method public static double asin(double);
+    method public static double atan(double);
+    method public static double atan2(double, double);
+    method public static double cbrt(double);
+    method public static double ceil(double);
+    method public static double copySign(double, double);
+    method public static float copySign(float, float);
+    method public static double cos(double);
+    method public static double cosh(double);
+    method public static int decrementExact(int);
+    method public static long decrementExact(long);
+    method public static double exp(double);
+    method public static double expm1(double);
+    method public static double floor(double);
+    method public static int floorDiv(int, int);
+    method public static long floorDiv(long, int);
+    method public static long floorDiv(long, long);
+    method public static int floorMod(int, int);
+    method public static int floorMod(long, int);
+    method public static long floorMod(long, long);
+    method public static int getExponent(float);
+    method public static int getExponent(double);
+    method public static double hypot(double, double);
+    method public static int incrementExact(int);
+    method public static long incrementExact(long);
+    method public static double log(double);
+    method public static double log10(double);
+    method public static double log1p(double);
+    method public static int max(int, int);
+    method public static long max(long, long);
+    method public static float max(float, float);
+    method public static double max(double, double);
+    method public static int min(int, int);
+    method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
+    method public static int multiplyExact(int, int);
+    method public static long multiplyExact(long, int);
+    method public static long multiplyExact(long, long);
+    method public static long multiplyFull(int, int);
+    method public static long multiplyHigh(long, long);
+    method public static int negateExact(int);
+    method public static long negateExact(long);
+    method public static double nextAfter(double, double);
+    method public static float nextAfter(float, double);
+    method public static double nextDown(double);
+    method public static float nextDown(float);
+    method public static double nextUp(double);
+    method public static float nextUp(float);
+    method public static double pow(double, double);
+    method public static double random();
+    method public static double rint(double);
+    method public static int round(float);
+    method public static long round(double);
+    method public static double scalb(double, int);
+    method public static float scalb(float, int);
+    method public static double signum(double);
+    method public static float signum(float);
+    method public static double sin(double);
+    method public static double sinh(double);
+    method public static double sqrt(double);
+    method public static int subtractExact(int, int);
+    method public static long subtractExact(long, long);
+    method public static double tan(double);
+    method public static double tanh(double);
+    method public static double toDegrees(double);
+    method public static int toIntExact(long);
+    method public static double toRadians(double);
+    method public static double ulp(double);
+    method public static float ulp(float);
+    field public static final double E = 2.718281828459045;
+    field public static final double PI = 3.141592653589793;
+  }
+
+  public class NegativeArraySizeException extends java.lang.RuntimeException {
+    ctor public NegativeArraySizeException();
+    ctor public NegativeArraySizeException(String);
+  }
+
+  public class NoClassDefFoundError extends java.lang.LinkageError {
+    ctor public NoClassDefFoundError();
+    ctor public NoClassDefFoundError(String);
+  }
+
+  public class NoSuchFieldError extends java.lang.IncompatibleClassChangeError {
+    ctor public NoSuchFieldError();
+    ctor public NoSuchFieldError(String);
+  }
+
+  public class NoSuchFieldException extends java.lang.ReflectiveOperationException {
+    ctor public NoSuchFieldException();
+    ctor public NoSuchFieldException(String);
+  }
+
+  public class NoSuchMethodError extends java.lang.IncompatibleClassChangeError {
+    ctor public NoSuchMethodError();
+    ctor public NoSuchMethodError(String);
+  }
+
+  public class NoSuchMethodException extends java.lang.ReflectiveOperationException {
+    ctor public NoSuchMethodException();
+    ctor public NoSuchMethodException(String);
+  }
+
+  public class NullPointerException extends java.lang.RuntimeException {
+    ctor public NullPointerException();
+    ctor public NullPointerException(String);
+  }
+
+  public abstract class Number implements java.io.Serializable {
+    ctor public Number();
+    method public byte byteValue();
+    method public abstract double doubleValue();
+    method public abstract float floatValue();
+    method public abstract int intValue();
+    method public abstract long longValue();
+    method public short shortValue();
+  }
+
+  public class NumberFormatException extends java.lang.IllegalArgumentException {
+    ctor public NumberFormatException();
+    ctor public NumberFormatException(String);
+  }
+
+  public class Object {
+    ctor public Object();
+    method @NonNull protected Object clone() throws java.lang.CloneNotSupportedException;
+    method public boolean equals(@Nullable Object);
+    method protected void finalize() throws java.lang.Throwable;
+    method @NonNull public final Class<?> getClass();
+    method public int hashCode();
+    method public final void notify();
+    method public final void notifyAll();
+    method @NonNull public String toString();
+    method public final void wait(long) throws java.lang.InterruptedException;
+    method public final void wait(long, int) throws java.lang.InterruptedException;
+    method public final void wait() throws java.lang.InterruptedException;
+  }
+
+  public class OutOfMemoryError extends java.lang.VirtualMachineError {
+    ctor public OutOfMemoryError();
+    ctor public OutOfMemoryError(String);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface Override {
+  }
+
+  public class Package implements java.lang.reflect.AnnotatedElement {
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(Class<A>);
+    method public java.lang.annotation.Annotation[] getAnnotations();
+    method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getDeclaredAnnotation(Class<A>);
+    method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method public <A extends java.lang.annotation.Annotation> A[] getDeclaredAnnotationsByType(Class<A>);
+    method public String getImplementationTitle();
+    method public String getImplementationVendor();
+    method public String getImplementationVersion();
+    method public String getName();
+    method public static Package getPackage(String);
+    method public static Package[] getPackages();
+    method public String getSpecificationTitle();
+    method public String getSpecificationVendor();
+    method public String getSpecificationVersion();
+    method public boolean isCompatibleWith(String) throws java.lang.NumberFormatException;
+    method public boolean isSealed();
+    method public boolean isSealed(java.net.URL);
+  }
+
+  public abstract class Process {
+    ctor public Process();
+    method public abstract void destroy();
+    method public Process destroyForcibly();
+    method public abstract int exitValue();
+    method public abstract java.io.InputStream getErrorStream();
+    method public abstract java.io.InputStream getInputStream();
+    method public abstract java.io.OutputStream getOutputStream();
+    method public boolean isAlive();
+    method public abstract int waitFor() throws java.lang.InterruptedException;
+    method public boolean waitFor(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+  public final class ProcessBuilder {
+    ctor public ProcessBuilder(java.util.List<java.lang.String>);
+    ctor public ProcessBuilder(java.lang.String...);
+    method public ProcessBuilder command(java.util.List<java.lang.String>);
+    method public ProcessBuilder command(java.lang.String...);
+    method public java.util.List<java.lang.String> command();
+    method public java.io.File directory();
+    method public ProcessBuilder directory(java.io.File);
+    method public java.util.Map<java.lang.String,java.lang.String> environment();
+    method public ProcessBuilder inheritIO();
+    method public ProcessBuilder redirectError(java.lang.ProcessBuilder.Redirect);
+    method public ProcessBuilder redirectError(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectError();
+    method public boolean redirectErrorStream();
+    method public ProcessBuilder redirectErrorStream(boolean);
+    method public ProcessBuilder redirectInput(java.lang.ProcessBuilder.Redirect);
+    method public ProcessBuilder redirectInput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectInput();
+    method public ProcessBuilder redirectOutput(java.lang.ProcessBuilder.Redirect);
+    method public ProcessBuilder redirectOutput(java.io.File);
+    method public java.lang.ProcessBuilder.Redirect redirectOutput();
+    method public Process start() throws java.io.IOException;
+  }
+
+  public abstract static class ProcessBuilder.Redirect {
+    method public static java.lang.ProcessBuilder.Redirect appendTo(java.io.File);
+    method public java.io.File file();
+    method public static java.lang.ProcessBuilder.Redirect from(java.io.File);
+    method public static java.lang.ProcessBuilder.Redirect to(java.io.File);
+    method public abstract java.lang.ProcessBuilder.Redirect.Type type();
+    field public static final java.lang.ProcessBuilder.Redirect INHERIT;
+    field public static final java.lang.ProcessBuilder.Redirect PIPE;
+  }
+
+  public enum ProcessBuilder.Redirect.Type {
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type APPEND;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type INHERIT;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type PIPE;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type READ;
+    enum_constant public static final java.lang.ProcessBuilder.Redirect.Type WRITE;
+  }
+
+  public interface Readable {
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
+  }
+
+  public class ReflectiveOperationException extends java.lang.Exception {
+    ctor public ReflectiveOperationException();
+    ctor public ReflectiveOperationException(String);
+    ctor public ReflectiveOperationException(String, Throwable);
+    ctor public ReflectiveOperationException(Throwable);
+  }
+
+  @java.lang.FunctionalInterface public interface Runnable {
+    method public void run();
+  }
+
+  public class Runtime {
+    method public void addShutdownHook(Thread);
+    method public int availableProcessors();
+    method public Process exec(String) throws java.io.IOException;
+    method public Process exec(String, String[]) throws java.io.IOException;
+    method public Process exec(String, String[], java.io.File) throws java.io.IOException;
+    method public Process exec(String[]) throws java.io.IOException;
+    method public Process exec(String[], String[]) throws java.io.IOException;
+    method public Process exec(String[], String[], java.io.File) throws java.io.IOException;
+    method public void exit(int);
+    method public long freeMemory();
+    method public void gc();
+    method @Deprecated public java.io.InputStream getLocalizedInputStream(java.io.InputStream);
+    method @Deprecated public java.io.OutputStream getLocalizedOutputStream(java.io.OutputStream);
+    method public static Runtime getRuntime();
+    method public void halt(int);
+    method public void load(String);
+    method public void loadLibrary(String);
+    method public long maxMemory();
+    method public boolean removeShutdownHook(Thread);
+    method public void runFinalization();
+    method @Deprecated public static void runFinalizersOnExit(boolean);
+    method public long totalMemory();
+    method public void traceInstructions(boolean);
+    method public void traceMethodCalls(boolean);
+  }
+
+  public class RuntimeException extends java.lang.Exception {
+    ctor public RuntimeException();
+    ctor public RuntimeException(String);
+    ctor public RuntimeException(String, Throwable);
+    ctor public RuntimeException(Throwable);
+    ctor protected RuntimeException(String, Throwable, boolean, boolean);
+  }
+
+  public final class RuntimePermission extends java.security.BasicPermission {
+    ctor public RuntimePermission(String);
+    ctor public RuntimePermission(String, String);
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.METHOD}) public @interface SafeVarargs {
+  }
+
+  public class SecurityException extends java.lang.RuntimeException {
+    ctor public SecurityException();
+    ctor public SecurityException(String);
+    ctor public SecurityException(String, Throwable);
+    ctor public SecurityException(Throwable);
+  }
+
+  public class SecurityManager {
+    ctor public SecurityManager();
+    method public void checkAccept(String, int);
+    method public void checkAccess(Thread);
+    method public void checkAccess(ThreadGroup);
+    method public void checkAwtEventQueueAccess();
+    method public void checkConnect(String, int);
+    method public void checkConnect(String, int, Object);
+    method public void checkCreateClassLoader();
+    method public void checkDelete(String);
+    method public void checkExec(String);
+    method public void checkExit(int);
+    method public void checkLink(String);
+    method public void checkListen(int);
+    method public void checkMemberAccess(Class<?>, int);
+    method public void checkMulticast(java.net.InetAddress);
+    method @Deprecated public void checkMulticast(java.net.InetAddress, byte);
+    method public void checkPackageAccess(String);
+    method public void checkPackageDefinition(String);
+    method public void checkPermission(java.security.Permission);
+    method public void checkPermission(java.security.Permission, Object);
+    method public void checkPrintJobAccess();
+    method public void checkPropertiesAccess();
+    method public void checkPropertyAccess(String);
+    method public void checkRead(java.io.FileDescriptor);
+    method public void checkRead(String);
+    method public void checkRead(String, Object);
+    method public void checkSecurityAccess(String);
+    method public void checkSetFactory();
+    method public void checkSystemClipboardAccess();
+    method public boolean checkTopLevelWindow(Object);
+    method public void checkWrite(java.io.FileDescriptor);
+    method public void checkWrite(String);
+    method @Deprecated protected int classDepth(String);
+    method @Deprecated protected int classLoaderDepth();
+    method @Deprecated protected ClassLoader currentClassLoader();
+    method @Deprecated protected Class<?> currentLoadedClass();
+    method protected Class[] getClassContext();
+    method @Deprecated public boolean getInCheck();
+    method public Object getSecurityContext();
+    method public ThreadGroup getThreadGroup();
+    method @Deprecated protected boolean inClass(String);
+    method @Deprecated protected boolean inClassLoader();
+    field @Deprecated protected boolean inCheck;
+  }
+
+  public final class Short extends java.lang.Number implements java.lang.Comparable<java.lang.Short> {
+    ctor @Deprecated public Short(short);
+    ctor @Deprecated public Short(String) throws java.lang.NumberFormatException;
+    method public static int compare(short, short);
+    method public int compareTo(Short);
+    method public static int compareUnsigned(short, short);
+    method public static Short decode(String) throws java.lang.NumberFormatException;
+    method public double doubleValue();
+    method public float floatValue();
+    method public static int hashCode(short);
+    method public int intValue();
+    method public long longValue();
+    method public static short parseShort(String, int) throws java.lang.NumberFormatException;
+    method public static short parseShort(String) throws java.lang.NumberFormatException;
+    method public static short reverseBytes(short);
+    method public static String toString(short);
+    method public static int toUnsignedInt(short);
+    method public static long toUnsignedLong(short);
+    method public static Short valueOf(String, int) throws java.lang.NumberFormatException;
+    method public static Short valueOf(String) throws java.lang.NumberFormatException;
+    method public static Short valueOf(short);
+    field public static final int BYTES = 2; // 0x2
+    field public static final short MAX_VALUE = 32767; // 0x7fff
+    field public static final short MIN_VALUE = -32768; // 0xffff8000
+    field public static final int SIZE = 16; // 0x10
+    field public static final Class<java.lang.Short> TYPE;
+  }
+
+  public class StackOverflowError extends java.lang.VirtualMachineError {
+    ctor public StackOverflowError();
+    ctor public StackOverflowError(String);
+  }
+
+  public final class StackTraceElement implements java.io.Serializable {
+    ctor public StackTraceElement(String, String, String, int);
+    method public String getClassName();
+    method public String getFileName();
+    method public int getLineNumber();
+    method public String getMethodName();
+    method public boolean isNativeMethod();
+  }
+
+  public final class StrictMath {
+    method public static double IEEEremainder(double, double);
+    method public static int abs(int);
+    method public static long abs(long);
+    method public static float abs(float);
+    method public static double abs(double);
+    method public static double acos(double);
+    method public static int addExact(int, int);
+    method public static long addExact(long, long);
+    method public static double asin(double);
+    method public static double atan(double);
+    method public static double atan2(double, double);
+    method public static double cbrt(double);
+    method public static double ceil(double);
+    method public static double copySign(double, double);
+    method public static float copySign(float, float);
+    method public static double cos(double);
+    method public static double cosh(double);
+    method public static double exp(double);
+    method public static double expm1(double);
+    method public static double floor(double);
+    method public static int floorDiv(int, int);
+    method public static long floorDiv(long, int);
+    method public static long floorDiv(long, long);
+    method public static int floorMod(int, int);
+    method public static int floorMod(long, int);
+    method public static long floorMod(long, long);
+    method public static int getExponent(float);
+    method public static int getExponent(double);
+    method public static double hypot(double, double);
+    method public static double log(double);
+    method public static double log10(double);
+    method public static double log1p(double);
+    method public static int max(int, int);
+    method public static long max(long, long);
+    method public static float max(float, float);
+    method public static double max(double, double);
+    method public static int min(int, int);
+    method public static long min(long, long);
+    method public static float min(float, float);
+    method public static double min(double, double);
+    method public static int multiplyExact(int, int);
+    method public static long multiplyExact(long, int);
+    method public static long multiplyExact(long, long);
+    method public static long multiplyFull(int, int);
+    method public static long multiplyHigh(long, long);
+    method public static double nextAfter(double, double);
+    method public static float nextAfter(float, double);
+    method public static double nextDown(double);
+    method public static float nextDown(float);
+    method public static double nextUp(double);
+    method public static float nextUp(float);
+    method public static double pow(double, double);
+    method public static double random();
+    method public static double rint(double);
+    method public static int round(float);
+    method public static long round(double);
+    method public static double scalb(double, int);
+    method public static float scalb(float, int);
+    method public static double signum(double);
+    method public static float signum(float);
+    method public static double sin(double);
+    method public static double sinh(double);
+    method public static double sqrt(double);
+    method public static int subtractExact(int, int);
+    method public static long subtractExact(long, long);
+    method public static double tan(double);
+    method public static double tanh(double);
+    method public static double toDegrees(double);
+    method public static int toIntExact(long);
+    method public static double toRadians(double);
+    method public static double ulp(double);
+    method public static float ulp(float);
+    field public static final double E = 2.718281828459045;
+    field public static final double PI = 3.141592653589793;
+  }
+
+  public final class String implements java.lang.CharSequence java.lang.Comparable<java.lang.String> java.io.Serializable {
+    ctor public String();
+    ctor public String(@NonNull String);
+    ctor public String(char[]);
+    ctor public String(char[], int, int);
+    ctor public String(int[], int, int);
+    ctor @Deprecated public String(byte[], int, int, int);
+    ctor @Deprecated public String(byte[], int);
+    ctor public String(byte[], int, int, @NonNull String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], int, int, @NonNull java.nio.charset.Charset);
+    ctor public String(byte[], @NonNull String) throws java.io.UnsupportedEncodingException;
+    ctor public String(byte[], @NonNull java.nio.charset.Charset);
+    ctor public String(byte[], int, int);
+    ctor public String(byte[]);
+    ctor public String(@NonNull StringBuffer);
+    ctor public String(@NonNull StringBuilder);
+    method public char charAt(int);
+    method public int codePointAt(int);
+    method public int codePointBefore(int);
+    method public int codePointCount(int, int);
+    method public int compareTo(@NonNull String);
+    method public int compareToIgnoreCase(@NonNull String);
+    method @NonNull public String concat(@NonNull String);
+    method public boolean contains(@NonNull CharSequence);
+    method public boolean contentEquals(@NonNull StringBuffer);
+    method public boolean contentEquals(@NonNull CharSequence);
+    method @NonNull public static String copyValueOf(char[], int, int);
+    method @NonNull public static String copyValueOf(char[]);
+    method public boolean endsWith(@NonNull String);
+    method public boolean equalsIgnoreCase(@Nullable String);
+    method @NonNull public static String format(@NonNull String, @NonNull java.lang.Object...);
+    method @NonNull public static String format(@NonNull java.util.Locale, @NonNull String, @NonNull java.lang.Object...);
+    method @Deprecated public void getBytes(int, int, byte[], int);
+    method public byte[] getBytes(@NonNull String) throws java.io.UnsupportedEncodingException;
+    method public byte[] getBytes(@NonNull java.nio.charset.Charset);
+    method public byte[] getBytes();
+    method public void getChars(int, int, char[], int);
+    method public int indexOf(int);
+    method public int indexOf(int, int);
+    method public int indexOf(@NonNull String);
+    method public int indexOf(@NonNull String, int);
+    method @NonNull public String intern();
+    method public boolean isEmpty();
+    method @NonNull public static String join(@NonNull CharSequence, @Nullable java.lang.CharSequence...);
+    method @NonNull public static String join(@NonNull CharSequence, @NonNull Iterable<? extends java.lang.CharSequence>);
+    method public int lastIndexOf(int);
+    method public int lastIndexOf(int, int);
+    method public int lastIndexOf(@NonNull String);
+    method public int lastIndexOf(@NonNull String, int);
+    method public int length();
+    method public boolean matches(@NonNull String);
+    method public int offsetByCodePoints(int, int);
+    method public boolean regionMatches(int, @NonNull String, int, int);
+    method public boolean regionMatches(boolean, int, @NonNull String, int, int);
+    method @NonNull public String replace(char, char);
+    method @NonNull public String replace(@NonNull CharSequence, @NonNull CharSequence);
+    method @NonNull public String replaceAll(@NonNull String, @NonNull String);
+    method @NonNull public String replaceFirst(@NonNull String, @NonNull String);
+    method @NonNull public String[] split(@NonNull String, int);
+    method @NonNull public String[] split(@NonNull String);
+    method public boolean startsWith(@NonNull String, int);
+    method public boolean startsWith(@NonNull String);
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String substring(int);
+    method @NonNull public String substring(int, int);
+    method public char[] toCharArray();
+    method @NonNull public String toLowerCase(@NonNull java.util.Locale);
+    method @NonNull public String toLowerCase();
+    method @NonNull public String toUpperCase(@NonNull java.util.Locale);
+    method @NonNull public String toUpperCase();
+    method @NonNull public String trim();
+    method @NonNull public static String valueOf(@Nullable Object);
+    method @NonNull public static String valueOf(char[]);
+    method @NonNull public static String valueOf(char[], int, int);
+    method @NonNull public static String valueOf(boolean);
+    method @NonNull public static String valueOf(char);
+    method @NonNull public static String valueOf(int);
+    method @NonNull public static String valueOf(long);
+    method @NonNull public static String valueOf(float);
+    method @NonNull public static String valueOf(double);
+    field public static final java.util.Comparator<java.lang.String> CASE_INSENSITIVE_ORDER;
+  }
+
+  public final class StringBuffer implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+    ctor public StringBuffer();
+    ctor public StringBuffer(int);
+    ctor public StringBuffer(@NonNull String);
+    ctor public StringBuffer(@NonNull CharSequence);
+    method @NonNull public StringBuffer append(@Nullable Object);
+    method @NonNull public StringBuffer append(@Nullable String);
+    method @NonNull public StringBuffer append(@Nullable StringBuffer);
+    method @NonNull public StringBuffer append(@Nullable CharSequence);
+    method @NonNull public StringBuffer append(@Nullable CharSequence, int, int);
+    method @NonNull public StringBuffer append(char[]);
+    method @NonNull public StringBuffer append(char[], int, int);
+    method @NonNull public StringBuffer append(boolean);
+    method @NonNull public StringBuffer append(char);
+    method @NonNull public StringBuffer append(int);
+    method @NonNull public StringBuffer append(long);
+    method @NonNull public StringBuffer append(float);
+    method @NonNull public StringBuffer append(double);
+    method @NonNull public StringBuffer appendCodePoint(int);
+    method public int capacity();
+    method public char charAt(int);
+    method public int codePointAt(int);
+    method public int codePointBefore(int);
+    method public int codePointCount(int, int);
+    method @NonNull public StringBuffer delete(int, int);
+    method @NonNull public StringBuffer deleteCharAt(int);
+    method public void ensureCapacity(int);
+    method public void getChars(int, int, char[], int);
+    method public int indexOf(@NonNull String);
+    method public int indexOf(@NonNull String, int);
+    method @NonNull public StringBuffer insert(int, char[], int, int);
+    method @NonNull public StringBuffer insert(int, @Nullable Object);
+    method @NonNull public StringBuffer insert(int, @Nullable String);
+    method @NonNull public StringBuffer insert(int, char[]);
+    method @NonNull public StringBuffer insert(int, @Nullable CharSequence);
+    method @NonNull public StringBuffer insert(int, @Nullable CharSequence, int, int);
+    method @NonNull public StringBuffer insert(int, boolean);
+    method @NonNull public StringBuffer insert(int, char);
+    method @NonNull public StringBuffer insert(int, int);
+    method @NonNull public StringBuffer insert(int, long);
+    method @NonNull public StringBuffer insert(int, float);
+    method @NonNull public StringBuffer insert(int, double);
+    method public int lastIndexOf(@NonNull String);
+    method public int lastIndexOf(@NonNull String, int);
+    method public int length();
+    method public int offsetByCodePoints(int, int);
+    method @NonNull public StringBuffer replace(int, int, @NonNull String);
+    method @NonNull public StringBuffer reverse();
+    method public void setCharAt(int, char);
+    method public void setLength(int);
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String substring(int);
+    method @NonNull public String substring(int, int);
+    method public void trimToSize();
+  }
+
+  public final class StringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable {
+    ctor public StringBuilder();
+    ctor public StringBuilder(int);
+    ctor public StringBuilder(@NonNull String);
+    ctor public StringBuilder(@NonNull CharSequence);
+    method @NonNull public StringBuilder append(@Nullable Object);
+    method @NonNull public StringBuilder append(@Nullable String);
+    method @NonNull public StringBuilder append(@Nullable StringBuffer);
+    method @NonNull public StringBuilder append(@Nullable CharSequence);
+    method @NonNull public StringBuilder append(@Nullable CharSequence, int, int);
+    method @NonNull public StringBuilder append(char[]);
+    method @NonNull public StringBuilder append(char[], int, int);
+    method @NonNull public StringBuilder append(boolean);
+    method @NonNull public StringBuilder append(char);
+    method @NonNull public StringBuilder append(int);
+    method @NonNull public StringBuilder append(long);
+    method @NonNull public StringBuilder append(float);
+    method @NonNull public StringBuilder append(double);
+    method @NonNull public StringBuilder appendCodePoint(int);
+    method public int capacity();
+    method public char charAt(int);
+    method public int codePointAt(int);
+    method public int codePointBefore(int);
+    method public int codePointCount(int, int);
+    method @NonNull public StringBuilder delete(int, int);
+    method @NonNull public StringBuilder deleteCharAt(int);
+    method public void ensureCapacity(int);
+    method public void getChars(int, int, char[], int);
+    method public int indexOf(@NonNull String);
+    method public int indexOf(@NonNull String, int);
+    method @NonNull public StringBuilder insert(int, char[], int, int);
+    method @NonNull public StringBuilder insert(int, @Nullable Object);
+    method @NonNull public StringBuilder insert(int, @Nullable String);
+    method @NonNull public StringBuilder insert(int, char[]);
+    method @NonNull public StringBuilder insert(int, @Nullable CharSequence);
+    method @NonNull public StringBuilder insert(int, @Nullable CharSequence, int, int);
+    method @NonNull public StringBuilder insert(int, boolean);
+    method @NonNull public StringBuilder insert(int, char);
+    method @NonNull public StringBuilder insert(int, int);
+    method @NonNull public StringBuilder insert(int, long);
+    method @NonNull public StringBuilder insert(int, float);
+    method @NonNull public StringBuilder insert(int, double);
+    method public int lastIndexOf(@NonNull String);
+    method public int lastIndexOf(@NonNull String, int);
+    method public int length();
+    method public int offsetByCodePoints(int, int);
+    method @NonNull public StringBuilder replace(int, int, @NonNull String);
+    method @NonNull public StringBuilder reverse();
+    method public void setCharAt(int, char);
+    method public void setLength(int);
+    method @NonNull public CharSequence subSequence(int, int);
+    method @NonNull public String substring(int);
+    method @NonNull public String substring(int, int);
+    method public void trimToSize();
+  }
+
+  public class StringIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException {
+    ctor public StringIndexOutOfBoundsException();
+    ctor public StringIndexOutOfBoundsException(String);
+    ctor public StringIndexOutOfBoundsException(int);
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.CONSTRUCTOR, java.lang.annotation.ElementType.LOCAL_VARIABLE}) public @interface SuppressWarnings {
+    method public abstract String[] value();
+  }
+
+  public final class System {
+    method public static void arraycopy(@NonNull Object, int, @NonNull Object, int, int);
+    method @Nullable public static String clearProperty(@NonNull String);
+    method @Nullable public static java.io.Console console();
+    method public static long currentTimeMillis();
+    method public static void exit(int);
+    method public static void gc();
+    method @NonNull public static java.util.Properties getProperties();
+    method @Nullable public static String getProperty(@NonNull String);
+    method @Nullable public static String getProperty(@NonNull String, @Nullable String);
+    method @Nullable public static SecurityManager getSecurityManager();
+    method @Nullable public static String getenv(@NonNull String);
+    method @NonNull public static java.util.Map<java.lang.String,java.lang.String> getenv();
+    method public static int identityHashCode(@Nullable Object);
+    method @Nullable public static java.nio.channels.Channel inheritedChannel() throws java.io.IOException;
+    method @NonNull public static String lineSeparator();
+    method public static void load(@NonNull String);
+    method public static void loadLibrary(@NonNull String);
+    method @NonNull public static String mapLibraryName(@NonNull String);
+    method public static long nanoTime();
+    method public static void runFinalization();
+    method @Deprecated public static void runFinalizersOnExit(boolean);
+    method public static void setErr(@Nullable java.io.PrintStream);
+    method public static void setIn(@Nullable java.io.InputStream);
+    method public static void setOut(@Nullable java.io.PrintStream);
+    method public static void setProperties(@Nullable java.util.Properties);
+    method @Nullable public static String setProperty(@NonNull String, @Nullable String);
+    method public static void setSecurityManager(@Nullable SecurityManager);
+    field public static final java.io.PrintStream err;
+    field public static final java.io.InputStream in;
+    field public static final java.io.PrintStream out;
+  }
+
+  public class Thread implements java.lang.Runnable {
+    ctor public Thread();
+    ctor public Thread(@Nullable Runnable);
+    ctor public Thread(@Nullable ThreadGroup, @Nullable Runnable);
+    ctor public Thread(@NonNull String);
+    ctor public Thread(@Nullable ThreadGroup, @NonNull String);
+    ctor public Thread(@Nullable Runnable, @NonNull String);
+    ctor public Thread(@Nullable ThreadGroup, @Nullable Runnable, @NonNull String);
+    ctor public Thread(@Nullable ThreadGroup, @Nullable Runnable, @NonNull String, long);
+    method public static int activeCount();
+    method public final void checkAccess();
+    method @Deprecated public int countStackFrames();
+    method @NonNull public static Thread currentThread();
+    method @Deprecated public void destroy();
+    method public static void dumpStack();
+    method public static int enumerate(Thread[]);
+    method @NonNull public static java.util.Map<java.lang.Thread,java.lang.StackTraceElement[]> getAllStackTraces();
+    method @Nullable public ClassLoader getContextClassLoader();
+    method @Nullable public static java.lang.Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler();
+    method public long getId();
+    method @NonNull public final String getName();
+    method public final int getPriority();
+    method @NonNull public StackTraceElement[] getStackTrace();
+    method @NonNull public java.lang.Thread.State getState();
+    method @Nullable public final ThreadGroup getThreadGroup();
+    method @Nullable public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
+    method public static boolean holdsLock(@NonNull Object);
+    method public void interrupt();
+    method public static boolean interrupted();
+    method public final boolean isAlive();
+    method public final boolean isDaemon();
+    method public boolean isInterrupted();
+    method public final void join(long) throws java.lang.InterruptedException;
+    method public final void join(long, int) throws java.lang.InterruptedException;
+    method public final void join() throws java.lang.InterruptedException;
+    method @Deprecated public final void resume();
+    method public void run();
+    method public void setContextClassLoader(@Nullable ClassLoader);
+    method public final void setDaemon(boolean);
+    method public static void setDefaultUncaughtExceptionHandler(@Nullable java.lang.Thread.UncaughtExceptionHandler);
+    method public final void setName(@NonNull String);
+    method public final void setPriority(int);
+    method public void setUncaughtExceptionHandler(@Nullable java.lang.Thread.UncaughtExceptionHandler);
+    method public static void sleep(long) throws java.lang.InterruptedException;
+    method public static void sleep(long, int) throws java.lang.InterruptedException;
+    method public void start();
+    method @Deprecated public final void stop();
+    method @Deprecated public final void stop(@Nullable Throwable);
+    method @Deprecated public final void suspend();
+    method public static void yield();
+    field public static final int MAX_PRIORITY = 10; // 0xa
+    field public static final int MIN_PRIORITY = 1; // 0x1
+    field public static final int NORM_PRIORITY = 5; // 0x5
+  }
+
+  public enum Thread.State {
+    enum_constant public static final java.lang.Thread.State BLOCKED;
+    enum_constant public static final java.lang.Thread.State NEW;
+    enum_constant public static final java.lang.Thread.State RUNNABLE;
+    enum_constant public static final java.lang.Thread.State TERMINATED;
+    enum_constant public static final java.lang.Thread.State TIMED_WAITING;
+    enum_constant public static final java.lang.Thread.State WAITING;
+  }
+
+  @java.lang.FunctionalInterface public static interface Thread.UncaughtExceptionHandler {
+    method public void uncaughtException(@NonNull Thread, @NonNull Throwable);
+  }
+
+  public class ThreadDeath extends java.lang.Error {
+    ctor public ThreadDeath();
+  }
+
+  public class ThreadGroup implements java.lang.Thread.UncaughtExceptionHandler {
+    ctor public ThreadGroup(String);
+    ctor public ThreadGroup(ThreadGroup, String);
+    method public int activeCount();
+    method public int activeGroupCount();
+    method @Deprecated public boolean allowThreadSuspension(boolean);
+    method public final void checkAccess();
+    method public final void destroy();
+    method public int enumerate(Thread[]);
+    method public int enumerate(Thread[], boolean);
+    method public int enumerate(ThreadGroup[]);
+    method public int enumerate(ThreadGroup[], boolean);
+    method public final int getMaxPriority();
+    method public final String getName();
+    method public final ThreadGroup getParent();
+    method public final void interrupt();
+    method public final boolean isDaemon();
+    method public boolean isDestroyed();
+    method public void list();
+    method public final boolean parentOf(ThreadGroup);
+    method @Deprecated public final void resume();
+    method public final void setDaemon(boolean);
+    method public final void setMaxPriority(int);
+    method @Deprecated public final void stop();
+    method @Deprecated public final void suspend();
+    method public void uncaughtException(Thread, Throwable);
+  }
+
+  public class ThreadLocal<T> {
+    ctor public ThreadLocal();
+    method @Nullable public T get();
+    method @Nullable protected T initialValue();
+    method public void remove();
+    method public void set(T);
+    method @NonNull public static <S> ThreadLocal<S> withInitial(@NonNull java.util.function.Supplier<? extends S>);
+  }
+
+  public class Throwable implements java.io.Serializable {
+    ctor public Throwable();
+    ctor public Throwable(@Nullable String);
+    ctor public Throwable(@Nullable String, @Nullable Throwable);
+    ctor public Throwable(@Nullable Throwable);
+    ctor protected Throwable(@Nullable String, @Nullable Throwable, boolean, boolean);
+    method public final void addSuppressed(@NonNull Throwable);
+    method @NonNull public Throwable fillInStackTrace();
+    method @Nullable public Throwable getCause();
+    method @Nullable public String getLocalizedMessage();
+    method @Nullable public String getMessage();
+    method @NonNull public StackTraceElement[] getStackTrace();
+    method @NonNull public final Throwable[] getSuppressed();
+    method @NonNull public Throwable initCause(@Nullable Throwable);
+    method public void printStackTrace();
+    method public void printStackTrace(@NonNull java.io.PrintStream);
+    method public void printStackTrace(@NonNull java.io.PrintWriter);
+    method public void setStackTrace(@NonNull StackTraceElement[]);
+  }
+
+  public class TypeNotPresentException extends java.lang.RuntimeException {
+    ctor public TypeNotPresentException(String, Throwable);
+    method public String typeName();
+  }
+
+  public class UnknownError extends java.lang.VirtualMachineError {
+    ctor public UnknownError();
+    ctor public UnknownError(String);
+  }
+
+  public class UnsatisfiedLinkError extends java.lang.LinkageError {
+    ctor public UnsatisfiedLinkError();
+    ctor public UnsatisfiedLinkError(String);
+  }
+
+  public class UnsupportedClassVersionError extends java.lang.ClassFormatError {
+    ctor public UnsupportedClassVersionError();
+    ctor public UnsupportedClassVersionError(String);
+  }
+
+  public class UnsupportedOperationException extends java.lang.RuntimeException {
+    ctor public UnsupportedOperationException();
+    ctor public UnsupportedOperationException(String);
+    ctor public UnsupportedOperationException(String, Throwable);
+    ctor public UnsupportedOperationException(Throwable);
+  }
+
+  public class VerifyError extends java.lang.LinkageError {
+    ctor public VerifyError();
+    ctor public VerifyError(String);
+  }
+
+  public abstract class VirtualMachineError extends java.lang.Error {
+    ctor public VirtualMachineError();
+    ctor public VirtualMachineError(String);
+    ctor public VirtualMachineError(String, Throwable);
+    ctor public VirtualMachineError(Throwable);
+  }
+
+  public final class Void {
+    field public static final Class<java.lang.Void> TYPE;
+  }
+
+}
+
+package java.lang.annotation {
+
+  public interface Annotation {
+    method public Class<? extends java.lang.annotation.Annotation> annotationType();
+    method public boolean equals(Object);
+    method public int hashCode();
+    method public String toString();
+  }
+
+  public class AnnotationFormatError extends java.lang.Error {
+    ctor public AnnotationFormatError(String);
+    ctor public AnnotationFormatError(String, Throwable);
+    ctor public AnnotationFormatError(Throwable);
+  }
+
+  public class AnnotationTypeMismatchException extends java.lang.RuntimeException {
+    ctor public AnnotationTypeMismatchException(java.lang.reflect.Method, String);
+    method public java.lang.reflect.Method element();
+    method public String foundType();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Documented {
+  }
+
+  public enum ElementType {
+    enum_constant public static final java.lang.annotation.ElementType ANNOTATION_TYPE;
+    enum_constant public static final java.lang.annotation.ElementType CONSTRUCTOR;
+    enum_constant public static final java.lang.annotation.ElementType FIELD;
+    enum_constant public static final java.lang.annotation.ElementType LOCAL_VARIABLE;
+    enum_constant public static final java.lang.annotation.ElementType METHOD;
+    enum_constant public static final java.lang.annotation.ElementType MODULE;
+    enum_constant public static final java.lang.annotation.ElementType PACKAGE;
+    enum_constant public static final java.lang.annotation.ElementType PARAMETER;
+    enum_constant public static final java.lang.annotation.ElementType TYPE;
+    enum_constant public static final java.lang.annotation.ElementType TYPE_PARAMETER;
+    enum_constant public static final java.lang.annotation.ElementType TYPE_USE;
+  }
+
+  public class IncompleteAnnotationException extends java.lang.RuntimeException {
+    ctor public IncompleteAnnotationException(Class<? extends java.lang.annotation.Annotation>, String);
+    method public Class<? extends java.lang.annotation.Annotation> annotationType();
+    method public String elementName();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Inherited {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.FIELD) public @interface Native {
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Repeatable {
+    method public abstract Class<? extends java.lang.annotation.Annotation> value();
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Retention {
+    method public abstract java.lang.annotation.RetentionPolicy value();
+  }
+
+  public enum RetentionPolicy {
+    enum_constant public static final java.lang.annotation.RetentionPolicy CLASS;
+    enum_constant public static final java.lang.annotation.RetentionPolicy RUNTIME;
+    enum_constant public static final java.lang.annotation.RetentionPolicy SOURCE;
+  }
+
+  @java.lang.annotation.Documented @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.ANNOTATION_TYPE) public @interface Target {
+    method public abstract java.lang.annotation.ElementType[] value();
+  }
+
+}
+
+package java.lang.invoke {
+
+  public abstract class CallSite {
+    method public abstract java.lang.invoke.MethodHandle dynamicInvoker();
+    method public abstract java.lang.invoke.MethodHandle getTarget();
+    method public abstract void setTarget(java.lang.invoke.MethodHandle);
+    method public java.lang.invoke.MethodType type();
+  }
+
+  public class ConstantCallSite extends java.lang.invoke.CallSite {
+    ctor public ConstantCallSite(java.lang.invoke.MethodHandle);
+    ctor protected ConstantCallSite(java.lang.invoke.MethodType, java.lang.invoke.MethodHandle) throws java.lang.Throwable;
+    method public final java.lang.invoke.MethodHandle dynamicInvoker();
+    method public final java.lang.invoke.MethodHandle getTarget();
+    method public final void setTarget(java.lang.invoke.MethodHandle);
+  }
+
+  public class LambdaConversionException extends java.lang.Exception {
+    ctor public LambdaConversionException();
+    ctor public LambdaConversionException(String);
+    ctor public LambdaConversionException(String, Throwable);
+    ctor public LambdaConversionException(Throwable);
+    ctor public LambdaConversionException(String, Throwable, boolean, boolean);
+  }
+
+  public abstract class MethodHandle {
+    method public java.lang.invoke.MethodHandle asCollector(Class<?>, int);
+    method public java.lang.invoke.MethodHandle asFixedArity();
+    method public java.lang.invoke.MethodHandle asSpreader(Class<?>, int);
+    method public java.lang.invoke.MethodHandle asType(java.lang.invoke.MethodType);
+    method public java.lang.invoke.MethodHandle asVarargsCollector(Class<?>);
+    method public java.lang.invoke.MethodHandle bindTo(Object);
+    method public final Object invoke(java.lang.Object...) throws java.lang.Throwable;
+    method public final Object invokeExact(java.lang.Object...) throws java.lang.Throwable;
+    method public Object invokeWithArguments(java.lang.Object...) throws java.lang.Throwable;
+    method public Object invokeWithArguments(java.util.List<?>) throws java.lang.Throwable;
+    method public boolean isVarargsCollector();
+    method public java.lang.invoke.MethodType type();
+  }
+
+  public interface MethodHandleInfo {
+    method public Class<?> getDeclaringClass();
+    method public java.lang.invoke.MethodType getMethodType();
+    method public int getModifiers();
+    method public String getName();
+    method public int getReferenceKind();
+    method public default boolean isVarArgs();
+    method @Deprecated public static boolean refKindIsField(int);
+    method @Deprecated public static boolean refKindIsValid(int);
+    method @Deprecated public static String refKindName(int);
+    method public static String referenceKindToString(int);
+    method public <T extends java.lang.reflect.Member> T reflectAs(Class<T>, java.lang.invoke.MethodHandles.Lookup);
+    method public static String toString(int, Class<?>, String, java.lang.invoke.MethodType);
+    field public static final int REF_getField = 1; // 0x1
+    field public static final int REF_getStatic = 2; // 0x2
+    field public static final int REF_invokeInterface = 9; // 0x9
+    field public static final int REF_invokeSpecial = 7; // 0x7
+    field public static final int REF_invokeStatic = 6; // 0x6
+    field public static final int REF_invokeVirtual = 5; // 0x5
+    field public static final int REF_newInvokeSpecial = 8; // 0x8
+    field public static final int REF_putField = 3; // 0x3
+    field public static final int REF_putStatic = 4; // 0x4
+  }
+
+  public class MethodHandles {
+    method public static java.lang.invoke.MethodHandle arrayElementGetter(Class<?>) throws java.lang.IllegalArgumentException;
+    method public static java.lang.invoke.MethodHandle arrayElementSetter(Class<?>) throws java.lang.IllegalArgumentException;
+    method public static java.lang.invoke.MethodHandle catchException(java.lang.invoke.MethodHandle, Class<? extends java.lang.Throwable>, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle collectArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle constant(Class<?>, Object);
+    method public static java.lang.invoke.MethodHandle dropArguments(java.lang.invoke.MethodHandle, int, java.util.List<java.lang.Class<?>>);
+    method public static java.lang.invoke.MethodHandle dropArguments(java.lang.invoke.MethodHandle, int, Class<?>...);
+    method public static java.lang.invoke.MethodHandle exactInvoker(java.lang.invoke.MethodType);
+    method public static java.lang.invoke.MethodHandle explicitCastArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType);
+    method public static java.lang.invoke.MethodHandle filterArguments(java.lang.invoke.MethodHandle, int, java.lang.invoke.MethodHandle...);
+    method public static java.lang.invoke.MethodHandle filterReturnValue(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle foldArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle guardWithTest(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle identity(Class<?>);
+    method public static java.lang.invoke.MethodHandle insertArguments(java.lang.invoke.MethodHandle, int, java.lang.Object...);
+    method public static java.lang.invoke.MethodHandle invoker(java.lang.invoke.MethodType);
+    method public static java.lang.invoke.MethodHandles.Lookup lookup();
+    method public static java.lang.invoke.MethodHandle permuteArguments(java.lang.invoke.MethodHandle, java.lang.invoke.MethodType, int...);
+    method public static java.lang.invoke.MethodHandles.Lookup publicLookup();
+    method public static <T extends java.lang.reflect.Member> T reflectAs(Class<T>, java.lang.invoke.MethodHandle);
+    method public static java.lang.invoke.MethodHandle spreadInvoker(java.lang.invoke.MethodType, int);
+    method public static java.lang.invoke.MethodHandle throwException(Class<?>, Class<? extends java.lang.Throwable>);
+  }
+
+  public static final class MethodHandles.Lookup {
+    method public java.lang.invoke.MethodHandle bind(Object, String, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findConstructor(Class<?>, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findGetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findSetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findSpecial(Class<?>, String, java.lang.invoke.MethodType, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findStatic(Class<?>, String, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandle findStaticGetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findStaticSetter(Class<?>, String, Class<?>) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException;
+    method public java.lang.invoke.MethodHandle findVirtual(Class<?>, String, java.lang.invoke.MethodType) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException;
+    method public java.lang.invoke.MethodHandles.Lookup in(Class<?>);
+    method public Class<?> lookupClass();
+    method public int lookupModes();
+    method public java.lang.invoke.MethodHandleInfo revealDirect(java.lang.invoke.MethodHandle);
+    method public java.lang.invoke.MethodHandle unreflect(java.lang.reflect.Method) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectConstructor(java.lang.reflect.Constructor<?>) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectGetter(java.lang.reflect.Field) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectSetter(java.lang.reflect.Field) throws java.lang.IllegalAccessException;
+    method public java.lang.invoke.MethodHandle unreflectSpecial(java.lang.reflect.Method, Class<?>) throws java.lang.IllegalAccessException;
+    field public static final int PACKAGE = 8; // 0x8
+    field public static final int PRIVATE = 2; // 0x2
+    field public static final int PROTECTED = 4; // 0x4
+    field public static final int PUBLIC = 1; // 0x1
+  }
+
+  public final class MethodType implements java.io.Serializable {
+    method public java.lang.invoke.MethodType appendParameterTypes(Class<?>...);
+    method public java.lang.invoke.MethodType appendParameterTypes(java.util.List<java.lang.Class<?>>);
+    method public java.lang.invoke.MethodType changeParameterType(int, Class<?>);
+    method public java.lang.invoke.MethodType changeReturnType(Class<?>);
+    method public java.lang.invoke.MethodType dropParameterTypes(int, int);
+    method public java.lang.invoke.MethodType erase();
+    method public static java.lang.invoke.MethodType fromMethodDescriptorString(String, ClassLoader) throws java.lang.IllegalArgumentException, java.lang.TypeNotPresentException;
+    method public java.lang.invoke.MethodType generic();
+    method public static java.lang.invoke.MethodType genericMethodType(int, boolean);
+    method public static java.lang.invoke.MethodType genericMethodType(int);
+    method public boolean hasPrimitives();
+    method public boolean hasWrappers();
+    method public java.lang.invoke.MethodType insertParameterTypes(int, Class<?>...);
+    method public java.lang.invoke.MethodType insertParameterTypes(int, java.util.List<java.lang.Class<?>>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, Class<?>[]);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, java.util.List<java.lang.Class<?>>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, Class<?>, Class<?>...);
+    method public static java.lang.invoke.MethodType methodType(Class<?>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, Class<?>);
+    method public static java.lang.invoke.MethodType methodType(Class<?>, java.lang.invoke.MethodType);
+    method public Class<?>[] parameterArray();
+    method public int parameterCount();
+    method public java.util.List<java.lang.Class<?>> parameterList();
+    method public Class<?> parameterType(int);
+    method public Class<?> returnType();
+    method public String toMethodDescriptorString();
+    method public java.lang.invoke.MethodType unwrap();
+    method public java.lang.invoke.MethodType wrap();
+  }
+
+  public class MutableCallSite extends java.lang.invoke.CallSite {
+    ctor public MutableCallSite(java.lang.invoke.MethodType);
+    ctor public MutableCallSite(java.lang.invoke.MethodHandle);
+    method public final java.lang.invoke.MethodHandle dynamicInvoker();
+    method public final java.lang.invoke.MethodHandle getTarget();
+    method public void setTarget(java.lang.invoke.MethodHandle);
+  }
+
+  public class VolatileCallSite extends java.lang.invoke.CallSite {
+    ctor public VolatileCallSite(java.lang.invoke.MethodType);
+    ctor public VolatileCallSite(java.lang.invoke.MethodHandle);
+    method public final java.lang.invoke.MethodHandle dynamicInvoker();
+    method public final java.lang.invoke.MethodHandle getTarget();
+    method public void setTarget(java.lang.invoke.MethodHandle);
+  }
+
+  public class WrongMethodTypeException extends java.lang.RuntimeException {
+    ctor public WrongMethodTypeException();
+    ctor public WrongMethodTypeException(String);
+  }
+
+}
+
+package java.lang.ref {
+
+  public class PhantomReference<T> extends java.lang.ref.Reference<T> {
+    ctor public PhantomReference(T, java.lang.ref.ReferenceQueue<? super T>);
+  }
+
+  public abstract class Reference<T> {
+    method public void clear();
+    method public boolean enqueue();
+    method public T get();
+    method @Deprecated public boolean isEnqueued();
+    method public static void reachabilityFence(Object);
+  }
+
+  public class ReferenceQueue<T> {
+    ctor public ReferenceQueue();
+    method public java.lang.ref.Reference<? extends T> poll();
+    method public java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
+    method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
+  }
+
+  public class SoftReference<T> extends java.lang.ref.Reference<T> {
+    ctor public SoftReference(T);
+    ctor public SoftReference(T, java.lang.ref.ReferenceQueue<? super T>);
+  }
+
+  public class WeakReference<T> extends java.lang.ref.Reference<T> {
+    ctor public WeakReference(T);
+    ctor public WeakReference(T, java.lang.ref.ReferenceQueue<? super T>);
+  }
+
+}
+
+package java.lang.reflect {
+
+  public class AccessibleObject implements java.lang.reflect.AnnotatedElement {
+    ctor protected AccessibleObject();
+    method @Nullable public <T extends java.lang.annotation.Annotation> T getAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method public boolean isAccessible();
+    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean) throws java.lang.SecurityException;
+    method public void setAccessible(boolean) throws java.lang.SecurityException;
+  }
+
+  public interface AnnotatedElement {
+    method @Nullable public <T extends java.lang.annotation.Annotation> T getAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method public default <T extends java.lang.annotation.Annotation> T[] getAnnotationsByType(@NonNull Class<T>);
+    method @Nullable public default <T extends java.lang.annotation.Annotation> T getDeclaredAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method public default <T extends java.lang.annotation.Annotation> T[] getDeclaredAnnotationsByType(@NonNull Class<T>);
+    method public default boolean isAnnotationPresent(@NonNull Class<? extends java.lang.annotation.Annotation>);
+  }
+
+  public final class Array {
+    method @Nullable public static Object get(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static boolean getBoolean(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static byte getByte(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static char getChar(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static double getDouble(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static float getFloat(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static int getInt(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static int getLength(@NonNull Object);
+    method public static long getLong(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static short getShort(@NonNull Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method @NonNull public static Object newInstance(@NonNull Class<?>, int) throws java.lang.NegativeArraySizeException;
+    method @NonNull public static Object newInstance(@NonNull Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException;
+    method public static void set(@NonNull Object, int, @Nullable Object) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setBoolean(@NonNull Object, int, boolean);
+    method public static void setByte(@NonNull Object, int, byte) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setChar(@NonNull Object, int, char) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setDouble(@NonNull Object, int, double) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setFloat(@NonNull Object, int, float) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setInt(@NonNull Object, int, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setLong(@NonNull Object, int, long) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+    method public static void setShort(@NonNull Object, int, short) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
+  }
+
+  public final class Constructor<T> extends java.lang.reflect.Executable {
+    method @NonNull public Class<T> getDeclaringClass();
+    method public Class<?>[] getExceptionTypes();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method public java.lang.annotation.Annotation[][] getParameterAnnotations();
+    method @NonNull public Class<?>[] getParameterTypes();
+    method public java.lang.reflect.TypeVariable<java.lang.reflect.Constructor<T>>[] getTypeParameters();
+    method @NonNull public T newInstance(java.lang.Object...) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException;
+    method @NonNull public String toGenericString();
+  }
+
+  public abstract class Executable extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
+    method @NonNull public abstract Class<?>[] getExceptionTypes();
+    method @NonNull public java.lang.reflect.Type[] getGenericExceptionTypes();
+    method @NonNull public java.lang.reflect.Type[] getGenericParameterTypes();
+    method @NonNull public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
+    method public int getParameterCount();
+    method @NonNull public abstract Class<?>[] getParameterTypes();
+    method @NonNull public java.lang.reflect.Parameter[] getParameters();
+    method public final boolean isAnnotationPresent(@NonNull Class<? extends java.lang.annotation.Annotation>);
+    method public boolean isSynthetic();
+    method public boolean isVarArgs();
+    method @NonNull public abstract String toGenericString();
+  }
+
+  public final class Field extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member {
+    method @Nullable public Object get(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public boolean getBoolean(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public byte getByte(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public char getChar(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public Class<?> getDeclaringClass();
+    method public double getDouble(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public float getFloat(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public java.lang.reflect.Type getGenericType();
+    method public int getInt(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public long getLong(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method public short getShort(@Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public Class<?> getType();
+    method public boolean isEnumConstant();
+    method public boolean isSynthetic();
+    method public void set(@Nullable Object, @Nullable Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setBoolean(@Nullable Object, boolean) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setByte(@Nullable Object, byte) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setChar(@Nullable Object, char) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setDouble(@Nullable Object, double) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setFloat(@Nullable Object, float) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setInt(@Nullable Object, int) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setLong(@Nullable Object, long) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method public void setShort(@Nullable Object, short) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
+    method @NonNull public String toGenericString();
+  }
+
+  public interface GenericArrayType extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type getGenericComponentType();
+  }
+
+  public interface GenericDeclaration extends java.lang.reflect.AnnotatedElement {
+    method @NonNull public java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+  }
+
+  public class GenericSignatureFormatError extends java.lang.ClassFormatError {
+    ctor public GenericSignatureFormatError();
+    ctor public GenericSignatureFormatError(String);
+  }
+
+  public interface InvocationHandler {
+    method public Object invoke(Object, java.lang.reflect.Method, Object[]) throws java.lang.Throwable;
+  }
+
+  public class InvocationTargetException extends java.lang.ReflectiveOperationException {
+    ctor protected InvocationTargetException();
+    ctor public InvocationTargetException(Throwable);
+    ctor public InvocationTargetException(Throwable, String);
+    method public Throwable getTargetException();
+  }
+
+  public class MalformedParameterizedTypeException extends java.lang.RuntimeException {
+    ctor public MalformedParameterizedTypeException();
+  }
+
+  public class MalformedParametersException extends java.lang.RuntimeException {
+    ctor public MalformedParametersException();
+    ctor public MalformedParametersException(String);
+  }
+
+  public interface Member {
+    method @NonNull public Class<?> getDeclaringClass();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method public boolean isSynthetic();
+    field public static final int DECLARED = 1; // 0x1
+    field public static final int PUBLIC = 0; // 0x0
+  }
+
+  public final class Method extends java.lang.reflect.Executable {
+    method @NonNull public Class<?> getDeclaringClass();
+    method @Nullable public Object getDefaultValue();
+    method @NonNull public Class<?>[] getExceptionTypes();
+    method @NonNull public java.lang.reflect.Type getGenericReturnType();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method @NonNull public java.lang.annotation.Annotation[][] getParameterAnnotations();
+    method @NonNull public Class<?>[] getParameterTypes();
+    method @NonNull public Class<?> getReturnType();
+    method @NonNull public java.lang.reflect.TypeVariable<java.lang.reflect.Method>[] getTypeParameters();
+    method @Nullable public Object invoke(@Nullable Object, @Nullable java.lang.Object...) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException, java.lang.reflect.InvocationTargetException;
+    method public boolean isBridge();
+    method public boolean isDefault();
+    method @NonNull public String toGenericString();
+  }
+
+  public class Modifier {
+    ctor public Modifier();
+    method public static int classModifiers();
+    method public static int constructorModifiers();
+    method public static int fieldModifiers();
+    method public static int interfaceModifiers();
+    method public static boolean isAbstract(int);
+    method public static boolean isFinal(int);
+    method public static boolean isInterface(int);
+    method public static boolean isNative(int);
+    method public static boolean isPrivate(int);
+    method public static boolean isProtected(int);
+    method public static boolean isPublic(int);
+    method public static boolean isStatic(int);
+    method public static boolean isStrict(int);
+    method public static boolean isSynchronized(int);
+    method public static boolean isTransient(int);
+    method public static boolean isVolatile(int);
+    method public static int methodModifiers();
+    method public static int parameterModifiers();
+    method public static String toString(int);
+    field public static final int ABSTRACT = 1024; // 0x400
+    field public static final int FINAL = 16; // 0x10
+    field public static final int INTERFACE = 512; // 0x200
+    field public static final int NATIVE = 256; // 0x100
+    field public static final int PRIVATE = 2; // 0x2
+    field public static final int PROTECTED = 4; // 0x4
+    field public static final int PUBLIC = 1; // 0x1
+    field public static final int STATIC = 8; // 0x8
+    field public static final int STRICT = 2048; // 0x800
+    field public static final int SYNCHRONIZED = 32; // 0x20
+    field public static final int TRANSIENT = 128; // 0x80
+    field public static final int VOLATILE = 64; // 0x40
+  }
+
+  public final class Parameter implements java.lang.reflect.AnnotatedElement {
+    method @Nullable public <T extends java.lang.annotation.Annotation> T getAnnotation(@NonNull Class<T>);
+    method @NonNull public java.lang.annotation.Annotation[] getAnnotations();
+    method @NonNull public java.lang.annotation.Annotation[] getDeclaredAnnotations();
+    method @NonNull public java.lang.reflect.Executable getDeclaringExecutable();
+    method public int getModifiers();
+    method @NonNull public String getName();
+    method @NonNull public java.lang.reflect.Type getParameterizedType();
+    method @NonNull public Class<?> getType();
+    method public boolean isImplicit();
+    method public boolean isNamePresent();
+    method public boolean isSynthetic();
+    method public boolean isVarArgs();
+  }
+
+  public interface ParameterizedType extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type[] getActualTypeArguments();
+    method @Nullable public java.lang.reflect.Type getOwnerType();
+    method @NonNull public java.lang.reflect.Type getRawType();
+  }
+
+  public class Proxy implements java.io.Serializable {
+    ctor protected Proxy(@NonNull java.lang.reflect.InvocationHandler);
+    method @NonNull public static java.lang.reflect.InvocationHandler getInvocationHandler(@NonNull Object) throws java.lang.IllegalArgumentException;
+    method @NonNull public static Class<?> getProxyClass(@Nullable ClassLoader, @NonNull Class<?>...) throws java.lang.IllegalArgumentException;
+    method public static boolean isProxyClass(@NonNull Class<?>);
+    method @NonNull public static Object newProxyInstance(@Nullable ClassLoader, @NonNull Class<?>[], @NonNull java.lang.reflect.InvocationHandler) throws java.lang.IllegalArgumentException;
+    field protected java.lang.reflect.InvocationHandler h;
+  }
+
+  public final class ReflectPermission extends java.security.BasicPermission {
+    ctor public ReflectPermission(String);
+    ctor public ReflectPermission(String, String);
+  }
+
+  public interface Type {
+    method @NonNull public default String getTypeName();
+  }
+
+  public interface TypeVariable<D extends java.lang.reflect.GenericDeclaration> extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type[] getBounds();
+    method @NonNull public D getGenericDeclaration();
+    method @NonNull public String getName();
+  }
+
+  public class UndeclaredThrowableException extends java.lang.RuntimeException {
+    ctor public UndeclaredThrowableException(Throwable);
+    ctor public UndeclaredThrowableException(Throwable, String);
+    method public Throwable getUndeclaredThrowable();
+  }
+
+  public interface WildcardType extends java.lang.reflect.Type {
+    method @NonNull public java.lang.reflect.Type[] getLowerBounds();
+    method @NonNull public java.lang.reflect.Type[] getUpperBounds();
+  }
+
+}
+
+package java.math {
+
+  public class BigDecimal extends java.lang.Number implements java.lang.Comparable<java.math.BigDecimal> {
+    ctor public BigDecimal(char[], int, int);
+    ctor public BigDecimal(char[], int, int, java.math.MathContext);
+    ctor public BigDecimal(char[]);
+    ctor public BigDecimal(char[], java.math.MathContext);
+    ctor public BigDecimal(String);
+    ctor public BigDecimal(String, java.math.MathContext);
+    ctor public BigDecimal(double);
+    ctor public BigDecimal(double, java.math.MathContext);
+    ctor public BigDecimal(java.math.BigInteger);
+    ctor public BigDecimal(java.math.BigInteger, java.math.MathContext);
+    ctor public BigDecimal(java.math.BigInteger, int);
+    ctor public BigDecimal(java.math.BigInteger, int, java.math.MathContext);
+    ctor public BigDecimal(int);
+    ctor public BigDecimal(int, java.math.MathContext);
+    ctor public BigDecimal(long);
+    ctor public BigDecimal(long, java.math.MathContext);
+    method public java.math.BigDecimal abs();
+    method public java.math.BigDecimal abs(java.math.MathContext);
+    method public java.math.BigDecimal add(java.math.BigDecimal);
+    method public java.math.BigDecimal add(java.math.BigDecimal, java.math.MathContext);
+    method public byte byteValueExact();
+    method public int compareTo(java.math.BigDecimal);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, int, int);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, int, java.math.RoundingMode);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, int);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, java.math.RoundingMode);
+    method public java.math.BigDecimal divide(java.math.BigDecimal);
+    method public java.math.BigDecimal divide(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal[] divideAndRemainder(java.math.BigDecimal);
+    method public java.math.BigDecimal[] divideAndRemainder(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal divideToIntegralValue(java.math.BigDecimal);
+    method public java.math.BigDecimal divideToIntegralValue(java.math.BigDecimal, java.math.MathContext);
+    method public double doubleValue();
+    method public float floatValue();
+    method public int intValue();
+    method public int intValueExact();
+    method public long longValue();
+    method public long longValueExact();
+    method public java.math.BigDecimal max(java.math.BigDecimal);
+    method public java.math.BigDecimal min(java.math.BigDecimal);
+    method public java.math.BigDecimal movePointLeft(int);
+    method public java.math.BigDecimal movePointRight(int);
+    method public java.math.BigDecimal multiply(java.math.BigDecimal);
+    method public java.math.BigDecimal multiply(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal negate();
+    method public java.math.BigDecimal negate(java.math.MathContext);
+    method public java.math.BigDecimal plus();
+    method public java.math.BigDecimal plus(java.math.MathContext);
+    method public java.math.BigDecimal pow(int);
+    method public java.math.BigDecimal pow(int, java.math.MathContext);
+    method public int precision();
+    method public java.math.BigDecimal remainder(java.math.BigDecimal);
+    method public java.math.BigDecimal remainder(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigDecimal round(java.math.MathContext);
+    method public int scale();
+    method public java.math.BigDecimal scaleByPowerOfTen(int);
+    method public java.math.BigDecimal setScale(int, java.math.RoundingMode);
+    method public java.math.BigDecimal setScale(int, int);
+    method public java.math.BigDecimal setScale(int);
+    method public short shortValueExact();
+    method public int signum();
+    method public java.math.BigDecimal stripTrailingZeros();
+    method public java.math.BigDecimal subtract(java.math.BigDecimal);
+    method public java.math.BigDecimal subtract(java.math.BigDecimal, java.math.MathContext);
+    method public java.math.BigInteger toBigInteger();
+    method public java.math.BigInteger toBigIntegerExact();
+    method public String toEngineeringString();
+    method public String toPlainString();
+    method public java.math.BigDecimal ulp();
+    method public java.math.BigInteger unscaledValue();
+    method public static java.math.BigDecimal valueOf(long, int);
+    method public static java.math.BigDecimal valueOf(long);
+    method public static java.math.BigDecimal valueOf(double);
+    field public static final java.math.BigDecimal ONE;
+    field public static final int ROUND_CEILING = 2; // 0x2
+    field public static final int ROUND_DOWN = 1; // 0x1
+    field public static final int ROUND_FLOOR = 3; // 0x3
+    field public static final int ROUND_HALF_DOWN = 5; // 0x5
+    field public static final int ROUND_HALF_EVEN = 6; // 0x6
+    field public static final int ROUND_HALF_UP = 4; // 0x4
+    field public static final int ROUND_UNNECESSARY = 7; // 0x7
+    field public static final int ROUND_UP = 0; // 0x0
+    field public static final java.math.BigDecimal TEN;
+    field public static final java.math.BigDecimal ZERO;
+  }
+
+  public class BigInteger extends java.lang.Number implements java.lang.Comparable<java.math.BigInteger> {
+    ctor public BigInteger(byte[]);
+    ctor public BigInteger(int, byte[]);
+    ctor public BigInteger(@NonNull String, int);
+    ctor public BigInteger(@NonNull String);
+    ctor public BigInteger(int, @NonNull java.util.Random);
+    ctor public BigInteger(int, int, @NonNull java.util.Random);
+    method @NonNull public java.math.BigInteger abs();
+    method @NonNull public java.math.BigInteger add(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger and(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger andNot(@NonNull java.math.BigInteger);
+    method public int bitCount();
+    method public int bitLength();
+    method public byte byteValueExact();
+    method @NonNull public java.math.BigInteger clearBit(int);
+    method public int compareTo(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger divide(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger[] divideAndRemainder(@NonNull java.math.BigInteger);
+    method public double doubleValue();
+    method @NonNull public java.math.BigInteger flipBit(int);
+    method public float floatValue();
+    method @NonNull public java.math.BigInteger gcd(@NonNull java.math.BigInteger);
+    method public int getLowestSetBit();
+    method public int intValue();
+    method public int intValueExact();
+    method public boolean isProbablePrime(int);
+    method public long longValue();
+    method public long longValueExact();
+    method @NonNull public java.math.BigInteger max(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger min(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger mod(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger modInverse(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger modPow(@NonNull java.math.BigInteger, @NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger multiply(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger negate();
+    method @NonNull public java.math.BigInteger nextProbablePrime();
+    method @NonNull public java.math.BigInteger not();
+    method @NonNull public java.math.BigInteger or(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger pow(int);
+    method @NonNull public static java.math.BigInteger probablePrime(int, @NonNull java.util.Random);
+    method @NonNull public java.math.BigInteger remainder(@NonNull java.math.BigInteger);
+    method @NonNull public java.math.BigInteger setBit(int);
+    method @NonNull public java.math.BigInteger shiftLeft(int);
+    method @NonNull public java.math.BigInteger shiftRight(int);
+    method public short shortValueExact();
+    method public int signum();
+    method @NonNull public java.math.BigInteger subtract(@NonNull java.math.BigInteger);
+    method public boolean testBit(int);
+    method public byte[] toByteArray();
+    method @NonNull public String toString(int);
+    method @NonNull public static java.math.BigInteger valueOf(long);
+    method @NonNull public java.math.BigInteger xor(@NonNull java.math.BigInteger);
+    field @NonNull public static final java.math.BigInteger ONE;
+    field @NonNull public static final java.math.BigInteger TEN;
+    field @NonNull public static final java.math.BigInteger ZERO;
+  }
+
+  public final class MathContext implements java.io.Serializable {
+    ctor public MathContext(int);
+    ctor public MathContext(int, java.math.RoundingMode);
+    ctor public MathContext(String);
+    method public int getPrecision();
+    method public java.math.RoundingMode getRoundingMode();
+    field public static final java.math.MathContext DECIMAL128;
+    field public static final java.math.MathContext DECIMAL32;
+    field public static final java.math.MathContext DECIMAL64;
+    field public static final java.math.MathContext UNLIMITED;
+  }
+
+  public enum RoundingMode {
+    method public static java.math.RoundingMode valueOf(int);
+    enum_constant public static final java.math.RoundingMode CEILING;
+    enum_constant public static final java.math.RoundingMode DOWN;
+    enum_constant public static final java.math.RoundingMode FLOOR;
+    enum_constant public static final java.math.RoundingMode HALF_DOWN;
+    enum_constant public static final java.math.RoundingMode HALF_EVEN;
+    enum_constant public static final java.math.RoundingMode HALF_UP;
+    enum_constant public static final java.math.RoundingMode UNNECESSARY;
+    enum_constant public static final java.math.RoundingMode UP;
+  }
+
+}
+
+package java.net {
+
+  public abstract class Authenticator {
+    ctor public Authenticator();
+    method protected java.net.PasswordAuthentication getPasswordAuthentication();
+    method protected final String getRequestingHost();
+    method protected final int getRequestingPort();
+    method protected final String getRequestingPrompt();
+    method protected final String getRequestingProtocol();
+    method protected final String getRequestingScheme();
+    method protected final java.net.InetAddress getRequestingSite();
+    method protected java.net.URL getRequestingURL();
+    method protected java.net.Authenticator.RequestorType getRequestorType();
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, String, String, String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(String, java.net.InetAddress, int, String, String, String);
+    method public static java.net.PasswordAuthentication requestPasswordAuthentication(String, java.net.InetAddress, int, String, String, String, java.net.URL, java.net.Authenticator.RequestorType);
+    method public static void setDefault(java.net.Authenticator);
+  }
+
+  public enum Authenticator.RequestorType {
+    enum_constant public static final java.net.Authenticator.RequestorType PROXY;
+    enum_constant public static final java.net.Authenticator.RequestorType SERVER;
+  }
+
+  public class BindException extends java.net.SocketException {
+    ctor public BindException(String);
+    ctor public BindException();
+  }
+
+  public abstract class CacheRequest {
+    ctor public CacheRequest();
+    method public abstract void abort();
+    method public abstract java.io.OutputStream getBody() throws java.io.IOException;
+  }
+
+  public abstract class CacheResponse {
+    ctor public CacheResponse();
+    method public abstract java.io.InputStream getBody() throws java.io.IOException;
+    method public abstract java.util.Map<java.lang.String,java.util.List<java.lang.String>> getHeaders() throws java.io.IOException;
+  }
+
+  public class ConnectException extends java.net.SocketException {
+    ctor public ConnectException(String);
+    ctor public ConnectException();
+  }
+
+  public abstract class ContentHandler {
+    ctor public ContentHandler();
+    method public abstract Object getContent(java.net.URLConnection) throws java.io.IOException;
+    method public Object getContent(java.net.URLConnection, Class[]) throws java.io.IOException;
+  }
+
+  public interface ContentHandlerFactory {
+    method public java.net.ContentHandler createContentHandler(String);
+  }
+
+  public abstract class CookieHandler {
+    ctor public CookieHandler();
+    method public abstract java.util.Map<java.lang.String,java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public static java.net.CookieHandler getDefault();
+    method public abstract void put(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public static void setDefault(java.net.CookieHandler);
+  }
+
+  public class CookieManager extends java.net.CookieHandler {
+    ctor public CookieManager();
+    ctor public CookieManager(java.net.CookieStore, java.net.CookiePolicy);
+    method public java.util.Map<java.lang.String,java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public java.net.CookieStore getCookieStore();
+    method public void put(java.net.URI, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public void setCookiePolicy(java.net.CookiePolicy);
+  }
+
+  public interface CookiePolicy {
+    method public boolean shouldAccept(java.net.URI, java.net.HttpCookie);
+    field public static final java.net.CookiePolicy ACCEPT_ALL;
+    field public static final java.net.CookiePolicy ACCEPT_NONE;
+    field public static final java.net.CookiePolicy ACCEPT_ORIGINAL_SERVER;
+  }
+
+  public interface CookieStore {
+    method public void add(java.net.URI, java.net.HttpCookie);
+    method public java.util.List<java.net.HttpCookie> get(java.net.URI);
+    method public java.util.List<java.net.HttpCookie> getCookies();
+    method public java.util.List<java.net.URI> getURIs();
+    method public boolean remove(java.net.URI, java.net.HttpCookie);
+    method public boolean removeAll();
+  }
+
+  public final class DatagramPacket {
+    ctor public DatagramPacket(byte[], int, int);
+    ctor public DatagramPacket(byte[], int);
+    ctor public DatagramPacket(byte[], int, int, java.net.InetAddress, int);
+    ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress);
+    ctor public DatagramPacket(byte[], int, java.net.InetAddress, int);
+    ctor public DatagramPacket(byte[], int, java.net.SocketAddress);
+    method public java.net.InetAddress getAddress();
+    method public byte[] getData();
+    method public int getLength();
+    method public int getOffset();
+    method public int getPort();
+    method public java.net.SocketAddress getSocketAddress();
+    method public void setAddress(java.net.InetAddress);
+    method public void setData(byte[], int, int);
+    method public void setData(byte[]);
+    method public void setLength(int);
+    method public void setPort(int);
+    method public void setSocketAddress(java.net.SocketAddress);
+  }
+
+  public class DatagramSocket implements java.io.Closeable {
+    ctor public DatagramSocket() throws java.net.SocketException;
+    ctor protected DatagramSocket(java.net.DatagramSocketImpl);
+    ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException;
+    ctor public DatagramSocket(int) throws java.net.SocketException;
+    ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException;
+    method public void bind(java.net.SocketAddress) throws java.net.SocketException;
+    method public void close();
+    method public void connect(java.net.InetAddress, int);
+    method public void connect(java.net.SocketAddress) throws java.net.SocketException;
+    method public void disconnect();
+    method public boolean getBroadcast() throws java.net.SocketException;
+    method public java.nio.channels.DatagramChannel getChannel();
+    method public java.net.InetAddress getInetAddress();
+    method public java.net.InetAddress getLocalAddress();
+    method public int getLocalPort();
+    method public java.net.SocketAddress getLocalSocketAddress();
+    method public int getPort();
+    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public java.net.SocketAddress getRemoteSocketAddress();
+    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public int getSendBufferSize() throws java.net.SocketException;
+    method public int getSoTimeout() throws java.net.SocketException;
+    method public int getTrafficClass() throws java.net.SocketException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public boolean isConnected();
+    method public void receive(java.net.DatagramPacket) throws java.io.IOException;
+    method public void send(java.net.DatagramPacket) throws java.io.IOException;
+    method public void setBroadcast(boolean) throws java.net.SocketException;
+    method public static void setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) throws java.io.IOException;
+    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public void setSendBufferSize(int) throws java.net.SocketException;
+    method public void setSoTimeout(int) throws java.net.SocketException;
+    method public void setTrafficClass(int) throws java.net.SocketException;
+  }
+
+  public abstract class DatagramSocketImpl implements java.net.SocketOptions {
+    ctor public DatagramSocketImpl();
+    method protected abstract void bind(int, java.net.InetAddress) throws java.net.SocketException;
+    method protected abstract void close();
+    method protected void connect(java.net.InetAddress, int) throws java.net.SocketException;
+    method protected abstract void create() throws java.net.SocketException;
+    method protected void disconnect();
+    method protected java.io.FileDescriptor getFileDescriptor();
+    method protected int getLocalPort();
+    method @Deprecated protected abstract byte getTTL() throws java.io.IOException;
+    method protected abstract int getTimeToLive() throws java.io.IOException;
+    method protected abstract void join(java.net.InetAddress) throws java.io.IOException;
+    method protected abstract void joinGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method protected abstract void leave(java.net.InetAddress) throws java.io.IOException;
+    method protected abstract void leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method protected abstract int peek(java.net.InetAddress) throws java.io.IOException;
+    method protected abstract int peekData(java.net.DatagramPacket) throws java.io.IOException;
+    method protected abstract void receive(java.net.DatagramPacket) throws java.io.IOException;
+    method protected abstract void send(java.net.DatagramPacket) throws java.io.IOException;
+    method @Deprecated protected abstract void setTTL(byte) throws java.io.IOException;
+    method protected abstract void setTimeToLive(int) throws java.io.IOException;
+    field protected java.io.FileDescriptor fd;
+    field protected int localPort;
+  }
+
+  public interface DatagramSocketImplFactory {
+    method public java.net.DatagramSocketImpl createDatagramSocketImpl();
+  }
+
+  public interface FileNameMap {
+    method public String getContentTypeFor(String);
+  }
+
+  public final class HttpCookie implements java.lang.Cloneable {
+    ctor public HttpCookie(String, String);
+    method public Object clone();
+    method public static boolean domainMatches(String, String);
+    method public String getComment();
+    method public String getCommentURL();
+    method public boolean getDiscard();
+    method public String getDomain();
+    method public long getMaxAge();
+    method public String getName();
+    method public String getPath();
+    method public String getPortlist();
+    method public boolean getSecure();
+    method public String getValue();
+    method public int getVersion();
+    method public boolean hasExpired();
+    method public boolean isHttpOnly();
+    method public static java.util.List<java.net.HttpCookie> parse(String);
+    method public void setComment(String);
+    method public void setCommentURL(String);
+    method public void setDiscard(boolean);
+    method public void setDomain(String);
+    method public void setHttpOnly(boolean);
+    method public void setMaxAge(long);
+    method public void setPath(String);
+    method public void setPortlist(String);
+    method public void setSecure(boolean);
+    method public void setValue(String);
+    method public void setVersion(int);
+  }
+
+  public class HttpRetryException extends java.io.IOException {
+    ctor public HttpRetryException(String, int);
+    ctor public HttpRetryException(String, int, String);
+    method public String getLocation();
+    method public String getReason();
+    method public int responseCode();
+  }
+
+  public abstract class HttpURLConnection extends java.net.URLConnection {
+    ctor protected HttpURLConnection(java.net.URL);
+    method public abstract void disconnect();
+    method public java.io.InputStream getErrorStream();
+    method public static boolean getFollowRedirects();
+    method public boolean getInstanceFollowRedirects();
+    method public String getRequestMethod();
+    method public int getResponseCode() throws java.io.IOException;
+    method public String getResponseMessage() throws java.io.IOException;
+    method public void setChunkedStreamingMode(int);
+    method public void setFixedLengthStreamingMode(int);
+    method public void setFixedLengthStreamingMode(long);
+    method public static void setFollowRedirects(boolean);
+    method public void setInstanceFollowRedirects(boolean);
+    method public void setRequestMethod(String) throws java.net.ProtocolException;
+    method public abstract boolean usingProxy();
+    field public static final int HTTP_ACCEPTED = 202; // 0xca
+    field public static final int HTTP_BAD_GATEWAY = 502; // 0x1f6
+    field public static final int HTTP_BAD_METHOD = 405; // 0x195
+    field public static final int HTTP_BAD_REQUEST = 400; // 0x190
+    field public static final int HTTP_CLIENT_TIMEOUT = 408; // 0x198
+    field public static final int HTTP_CONFLICT = 409; // 0x199
+    field public static final int HTTP_CREATED = 201; // 0xc9
+    field public static final int HTTP_ENTITY_TOO_LARGE = 413; // 0x19d
+    field public static final int HTTP_FORBIDDEN = 403; // 0x193
+    field public static final int HTTP_GATEWAY_TIMEOUT = 504; // 0x1f8
+    field public static final int HTTP_GONE = 410; // 0x19a
+    field public static final int HTTP_INTERNAL_ERROR = 500; // 0x1f4
+    field public static final int HTTP_LENGTH_REQUIRED = 411; // 0x19b
+    field public static final int HTTP_MOVED_PERM = 301; // 0x12d
+    field public static final int HTTP_MOVED_TEMP = 302; // 0x12e
+    field public static final int HTTP_MULT_CHOICE = 300; // 0x12c
+    field public static final int HTTP_NOT_ACCEPTABLE = 406; // 0x196
+    field public static final int HTTP_NOT_AUTHORITATIVE = 203; // 0xcb
+    field public static final int HTTP_NOT_FOUND = 404; // 0x194
+    field public static final int HTTP_NOT_IMPLEMENTED = 501; // 0x1f5
+    field public static final int HTTP_NOT_MODIFIED = 304; // 0x130
+    field public static final int HTTP_NO_CONTENT = 204; // 0xcc
+    field public static final int HTTP_OK = 200; // 0xc8
+    field public static final int HTTP_PARTIAL = 206; // 0xce
+    field public static final int HTTP_PAYMENT_REQUIRED = 402; // 0x192
+    field public static final int HTTP_PRECON_FAILED = 412; // 0x19c
+    field public static final int HTTP_PROXY_AUTH = 407; // 0x197
+    field public static final int HTTP_REQ_TOO_LONG = 414; // 0x19e
+    field public static final int HTTP_RESET = 205; // 0xcd
+    field public static final int HTTP_SEE_OTHER = 303; // 0x12f
+    field @Deprecated public static final int HTTP_SERVER_ERROR = 500; // 0x1f4
+    field public static final int HTTP_UNAUTHORIZED = 401; // 0x191
+    field public static final int HTTP_UNAVAILABLE = 503; // 0x1f7
+    field public static final int HTTP_UNSUPPORTED_TYPE = 415; // 0x19f
+    field public static final int HTTP_USE_PROXY = 305; // 0x131
+    field public static final int HTTP_VERSION = 505; // 0x1f9
+    field protected int chunkLength;
+    field protected int fixedContentLength;
+    field protected long fixedContentLengthLong;
+    field protected boolean instanceFollowRedirects;
+    field protected String method;
+    field protected int responseCode;
+    field protected String responseMessage;
+  }
+
+  public final class IDN {
+    method public static String toASCII(String, int);
+    method public static String toASCII(String);
+    method public static String toUnicode(String, int);
+    method public static String toUnicode(String);
+    field public static final int ALLOW_UNASSIGNED = 1; // 0x1
+    field public static final int USE_STD3_ASCII_RULES = 2; // 0x2
+  }
+
+  public final class Inet4Address extends java.net.InetAddress {
+  }
+
+  public final class Inet6Address extends java.net.InetAddress {
+    method public static java.net.Inet6Address getByAddress(String, byte[], java.net.NetworkInterface) throws java.net.UnknownHostException;
+    method public static java.net.Inet6Address getByAddress(String, byte[], int) throws java.net.UnknownHostException;
+    method public int getScopeId();
+    method public java.net.NetworkInterface getScopedInterface();
+    method public boolean isIPv4CompatibleAddress();
+  }
+
+  public class InetAddress implements java.io.Serializable {
+    method public byte[] getAddress();
+    method public static java.net.InetAddress[] getAllByName(@Nullable String) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByAddress(@Nullable String, byte[]) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getByName(@Nullable String) throws java.net.UnknownHostException;
+    method @NonNull public String getCanonicalHostName();
+    method @Nullable public String getHostAddress();
+    method @NonNull public String getHostName();
+    method @NonNull public static java.net.InetAddress getLocalHost() throws java.net.UnknownHostException;
+    method @NonNull public static java.net.InetAddress getLoopbackAddress();
+    method public boolean isAnyLocalAddress();
+    method public boolean isLinkLocalAddress();
+    method public boolean isLoopbackAddress();
+    method public boolean isMCGlobal();
+    method public boolean isMCLinkLocal();
+    method public boolean isMCNodeLocal();
+    method public boolean isMCOrgLocal();
+    method public boolean isMCSiteLocal();
+    method public boolean isMulticastAddress();
+    method public boolean isReachable(int) throws java.io.IOException;
+    method public boolean isReachable(@Nullable java.net.NetworkInterface, int, int) throws java.io.IOException;
+    method public boolean isSiteLocalAddress();
+  }
+
+  public class InetSocketAddress extends java.net.SocketAddress {
+    ctor public InetSocketAddress(int);
+    ctor public InetSocketAddress(java.net.InetAddress, int);
+    ctor public InetSocketAddress(String, int);
+    method public static java.net.InetSocketAddress createUnresolved(String, int);
+    method public final boolean equals(Object);
+    method public final java.net.InetAddress getAddress();
+    method public final String getHostName();
+    method public final String getHostString();
+    method public final int getPort();
+    method public final int hashCode();
+    method public final boolean isUnresolved();
+  }
+
+  public class InterfaceAddress {
+    method public java.net.InetAddress getAddress();
+    method public java.net.InetAddress getBroadcast();
+    method public short getNetworkPrefixLength();
+  }
+
+  public abstract class JarURLConnection extends java.net.URLConnection {
+    ctor protected JarURLConnection(java.net.URL) throws java.net.MalformedURLException;
+    method public java.util.jar.Attributes getAttributes() throws java.io.IOException;
+    method public java.security.cert.Certificate[] getCertificates() throws java.io.IOException;
+    method public String getEntryName();
+    method public java.util.jar.JarEntry getJarEntry() throws java.io.IOException;
+    method public abstract java.util.jar.JarFile getJarFile() throws java.io.IOException;
+    method public java.net.URL getJarFileURL();
+    method public java.util.jar.Attributes getMainAttributes() throws java.io.IOException;
+    method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    field protected java.net.URLConnection jarFileURLConnection;
+  }
+
+  public class MalformedURLException extends java.io.IOException {
+    ctor public MalformedURLException();
+    ctor public MalformedURLException(String);
+  }
+
+  public class MulticastSocket extends java.net.DatagramSocket {
+    ctor public MulticastSocket() throws java.io.IOException;
+    ctor public MulticastSocket(int) throws java.io.IOException;
+    ctor public MulticastSocket(java.net.SocketAddress) throws java.io.IOException;
+    method public java.net.InetAddress getInterface() throws java.net.SocketException;
+    method public boolean getLoopbackMode() throws java.net.SocketException;
+    method public java.net.NetworkInterface getNetworkInterface() throws java.net.SocketException;
+    method @Deprecated public byte getTTL() throws java.io.IOException;
+    method public int getTimeToLive() throws java.io.IOException;
+    method public void joinGroup(java.net.InetAddress) throws java.io.IOException;
+    method public void joinGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method public void leaveGroup(java.net.InetAddress) throws java.io.IOException;
+    method public void leaveGroup(java.net.SocketAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method @Deprecated public void send(java.net.DatagramPacket, byte) throws java.io.IOException;
+    method public void setInterface(java.net.InetAddress) throws java.net.SocketException;
+    method public void setLoopbackMode(boolean) throws java.net.SocketException;
+    method public void setNetworkInterface(java.net.NetworkInterface) throws java.net.SocketException;
+    method @Deprecated public void setTTL(byte) throws java.io.IOException;
+    method public void setTimeToLive(int) throws java.io.IOException;
+  }
+
+  public final class NetPermission extends java.security.BasicPermission {
+    ctor public NetPermission(String);
+    ctor public NetPermission(String, String);
+  }
+
+  public final class NetworkInterface {
+    method public static java.net.NetworkInterface getByIndex(int) throws java.net.SocketException;
+    method public static java.net.NetworkInterface getByInetAddress(java.net.InetAddress) throws java.net.SocketException;
+    method public static java.net.NetworkInterface getByName(String) throws java.net.SocketException;
+    method public String getDisplayName();
+    method public byte[] getHardwareAddress() throws java.net.SocketException;
+    method public int getIndex();
+    method public java.util.Enumeration<java.net.InetAddress> getInetAddresses();
+    method public java.util.List<java.net.InterfaceAddress> getInterfaceAddresses();
+    method public int getMTU() throws java.net.SocketException;
+    method public String getName();
+    method public static java.util.Enumeration<java.net.NetworkInterface> getNetworkInterfaces() throws java.net.SocketException;
+    method public java.net.NetworkInterface getParent();
+    method public java.util.Enumeration<java.net.NetworkInterface> getSubInterfaces();
+    method public boolean isLoopback() throws java.net.SocketException;
+    method public boolean isPointToPoint() throws java.net.SocketException;
+    method public boolean isUp() throws java.net.SocketException;
+    method public boolean isVirtual();
+    method public boolean supportsMulticast() throws java.net.SocketException;
+  }
+
+  public class NoRouteToHostException extends java.net.SocketException {
+    ctor public NoRouteToHostException(String);
+    ctor public NoRouteToHostException();
+  }
+
+  public final class PasswordAuthentication {
+    ctor public PasswordAuthentication(String, char[]);
+    method public char[] getPassword();
+    method public String getUserName();
+  }
+
+  public class PortUnreachableException extends java.net.SocketException {
+    ctor public PortUnreachableException(String);
+    ctor public PortUnreachableException();
+  }
+
+  public class ProtocolException extends java.io.IOException {
+    ctor public ProtocolException(String);
+    ctor public ProtocolException();
+  }
+
+  public interface ProtocolFamily {
+    method public String name();
+  }
+
+  public class Proxy {
+    ctor public Proxy(java.net.Proxy.Type, java.net.SocketAddress);
+    method public java.net.SocketAddress address();
+    method public final boolean equals(Object);
+    method public final int hashCode();
+    method public java.net.Proxy.Type type();
+    field public static final java.net.Proxy NO_PROXY;
+  }
+
+  public enum Proxy.Type {
+    enum_constant public static final java.net.Proxy.Type DIRECT;
+    enum_constant public static final java.net.Proxy.Type HTTP;
+    enum_constant public static final java.net.Proxy.Type SOCKS;
+  }
+
+  public abstract class ProxySelector {
+    ctor public ProxySelector();
+    method public abstract void connectFailed(java.net.URI, java.net.SocketAddress, java.io.IOException);
+    method public static java.net.ProxySelector getDefault();
+    method public abstract java.util.List<java.net.Proxy> select(java.net.URI);
+    method public static void setDefault(java.net.ProxySelector);
+  }
+
+  public abstract class ResponseCache {
+    ctor public ResponseCache();
+    method public abstract java.net.CacheResponse get(java.net.URI, String, java.util.Map<java.lang.String,java.util.List<java.lang.String>>) throws java.io.IOException;
+    method public static java.net.ResponseCache getDefault();
+    method public abstract java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException;
+    method public static void setDefault(java.net.ResponseCache);
+  }
+
+  public abstract class SecureCacheResponse extends java.net.CacheResponse {
+    ctor public SecureCacheResponse();
+    method public abstract String getCipherSuite();
+    method public abstract java.util.List<java.security.cert.Certificate> getLocalCertificateChain();
+    method public abstract java.security.Principal getLocalPrincipal();
+    method public abstract java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public abstract java.util.List<java.security.cert.Certificate> getServerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException;
+  }
+
+  public class ServerSocket implements java.io.Closeable {
+    ctor public ServerSocket() throws java.io.IOException;
+    ctor public ServerSocket(int) throws java.io.IOException;
+    ctor public ServerSocket(int, int) throws java.io.IOException;
+    ctor public ServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
+    method public java.net.Socket accept() throws java.io.IOException;
+    method public void bind(java.net.SocketAddress) throws java.io.IOException;
+    method public void bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public java.nio.channels.ServerSocketChannel getChannel();
+    method public java.net.InetAddress getInetAddress();
+    method public int getLocalPort();
+    method public java.net.SocketAddress getLocalSocketAddress();
+    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public int getSoTimeout() throws java.io.IOException;
+    method protected final void implAccept(java.net.Socket) throws java.io.IOException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public void setPerformancePreferences(int, int, int);
+    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public void setSoTimeout(int) throws java.net.SocketException;
+    method public static void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException;
+  }
+
+  public class Socket implements java.io.Closeable {
+    ctor public Socket();
+    ctor public Socket(java.net.Proxy);
+    ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException;
+    ctor public Socket(String, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor public Socket(java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(String, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    ctor @Deprecated public Socket(String, int, boolean) throws java.io.IOException;
+    ctor @Deprecated public Socket(java.net.InetAddress, int, boolean) throws java.io.IOException;
+    method public void bind(java.net.SocketAddress) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public void connect(java.net.SocketAddress) throws java.io.IOException;
+    method public void connect(java.net.SocketAddress, int) throws java.io.IOException;
+    method public java.nio.channels.SocketChannel getChannel();
+    method public java.net.InetAddress getInetAddress();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public boolean getKeepAlive() throws java.net.SocketException;
+    method public java.net.InetAddress getLocalAddress();
+    method public int getLocalPort();
+    method public java.net.SocketAddress getLocalSocketAddress();
+    method public boolean getOOBInline() throws java.net.SocketException;
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public int getPort();
+    method public int getReceiveBufferSize() throws java.net.SocketException;
+    method public java.net.SocketAddress getRemoteSocketAddress();
+    method public boolean getReuseAddress() throws java.net.SocketException;
+    method public int getSendBufferSize() throws java.net.SocketException;
+    method public int getSoLinger() throws java.net.SocketException;
+    method public int getSoTimeout() throws java.net.SocketException;
+    method public boolean getTcpNoDelay() throws java.net.SocketException;
+    method public int getTrafficClass() throws java.net.SocketException;
+    method public boolean isBound();
+    method public boolean isClosed();
+    method public boolean isConnected();
+    method public boolean isInputShutdown();
+    method public boolean isOutputShutdown();
+    method public void sendUrgentData(int) throws java.io.IOException;
+    method public void setKeepAlive(boolean) throws java.net.SocketException;
+    method public void setOOBInline(boolean) throws java.net.SocketException;
+    method public void setPerformancePreferences(int, int, int);
+    method public void setReceiveBufferSize(int) throws java.net.SocketException;
+    method public void setReuseAddress(boolean) throws java.net.SocketException;
+    method public void setSendBufferSize(int) throws java.net.SocketException;
+    method public void setSoLinger(boolean, int) throws java.net.SocketException;
+    method public void setSoTimeout(int) throws java.net.SocketException;
+    method public static void setSocketImplFactory(java.net.SocketImplFactory) throws java.io.IOException;
+    method public void setTcpNoDelay(boolean) throws java.net.SocketException;
+    method public void setTrafficClass(int) throws java.net.SocketException;
+    method public void shutdownInput() throws java.io.IOException;
+    method public void shutdownOutput() throws java.io.IOException;
+  }
+
+  public abstract class SocketAddress implements java.io.Serializable {
+    ctor public SocketAddress();
+  }
+
+  public class SocketException extends java.io.IOException {
+    ctor public SocketException(String);
+    ctor public SocketException();
+  }
+
+  public abstract class SocketImpl implements java.net.SocketOptions {
+    ctor public SocketImpl();
+    method protected abstract void accept(java.net.SocketImpl) throws java.io.IOException;
+    method protected abstract int available() throws java.io.IOException;
+    method protected abstract void bind(java.net.InetAddress, int) throws java.io.IOException;
+    method protected abstract void close() throws java.io.IOException;
+    method protected abstract void connect(String, int) throws java.io.IOException;
+    method protected abstract void connect(java.net.InetAddress, int) throws java.io.IOException;
+    method protected abstract void connect(java.net.SocketAddress, int) throws java.io.IOException;
+    method protected abstract void create(boolean) throws java.io.IOException;
+    method protected java.io.FileDescriptor getFileDescriptor();
+    method protected java.net.InetAddress getInetAddress();
+    method protected abstract java.io.InputStream getInputStream() throws java.io.IOException;
+    method protected int getLocalPort();
+    method protected abstract java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method protected int getPort();
+    method protected abstract void listen(int) throws java.io.IOException;
+    method protected abstract void sendUrgentData(int) throws java.io.IOException;
+    method protected void setPerformancePreferences(int, int, int);
+    method protected void shutdownInput() throws java.io.IOException;
+    method protected void shutdownOutput() throws java.io.IOException;
+    method protected boolean supportsUrgentData();
+    field protected java.net.InetAddress address;
+    field protected java.io.FileDescriptor fd;
+    field protected int localport;
+    field protected int port;
+  }
+
+  public interface SocketImplFactory {
+    method public java.net.SocketImpl createSocketImpl();
+  }
+
+  public interface SocketOption<T> {
+    method public String name();
+    method public Class<T> type();
+  }
+
+  public interface SocketOptions {
+    method public Object getOption(int) throws java.net.SocketException;
+    method public void setOption(int, Object) throws java.net.SocketException;
+    field public static final int IP_MULTICAST_IF = 16; // 0x10
+    field public static final int IP_MULTICAST_IF2 = 31; // 0x1f
+    field public static final int IP_MULTICAST_LOOP = 18; // 0x12
+    field public static final int IP_TOS = 3; // 0x3
+    field public static final int SO_BINDADDR = 15; // 0xf
+    field public static final int SO_BROADCAST = 32; // 0x20
+    field public static final int SO_KEEPALIVE = 8; // 0x8
+    field public static final int SO_LINGER = 128; // 0x80
+    field public static final int SO_OOBINLINE = 4099; // 0x1003
+    field public static final int SO_RCVBUF = 4098; // 0x1002
+    field public static final int SO_REUSEADDR = 4; // 0x4
+    field public static final int SO_SNDBUF = 4097; // 0x1001
+    field public static final int SO_TIMEOUT = 4102; // 0x1006
+    field public static final int TCP_NODELAY = 1; // 0x1
+  }
+
+  public final class SocketPermission extends java.security.Permission implements java.io.Serializable {
+    ctor public SocketPermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public class SocketTimeoutException extends java.io.InterruptedIOException {
+    ctor public SocketTimeoutException(String);
+    ctor public SocketTimeoutException();
+  }
+
+  public enum StandardProtocolFamily implements java.net.ProtocolFamily {
+    enum_constant public static final java.net.StandardProtocolFamily INET;
+    enum_constant public static final java.net.StandardProtocolFamily INET6;
+  }
+
+  public final class StandardSocketOptions {
+    field public static final java.net.SocketOption<java.net.NetworkInterface> IP_MULTICAST_IF;
+    field public static final java.net.SocketOption<java.lang.Boolean> IP_MULTICAST_LOOP;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_MULTICAST_TTL;
+    field public static final java.net.SocketOption<java.lang.Integer> IP_TOS;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_BROADCAST;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_KEEPALIVE;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_LINGER;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_RCVBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> SO_REUSEADDR;
+    field public static final java.net.SocketOption<java.lang.Integer> SO_SNDBUF;
+    field public static final java.net.SocketOption<java.lang.Boolean> TCP_NODELAY;
+  }
+
+  public final class URI implements java.lang.Comparable<java.net.URI> java.io.Serializable {
+    ctor public URI(String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String, int, String, String, String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String, String, String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String, String) throws java.net.URISyntaxException;
+    ctor public URI(String, String, String) throws java.net.URISyntaxException;
+    method public int compareTo(java.net.URI);
+    method public static java.net.URI create(String);
+    method public String getAuthority();
+    method public String getFragment();
+    method public String getHost();
+    method public String getPath();
+    method public int getPort();
+    method public String getQuery();
+    method public String getRawAuthority();
+    method public String getRawFragment();
+    method public String getRawPath();
+    method public String getRawQuery();
+    method public String getRawSchemeSpecificPart();
+    method public String getRawUserInfo();
+    method public String getScheme();
+    method public String getSchemeSpecificPart();
+    method public String getUserInfo();
+    method public boolean isAbsolute();
+    method public boolean isOpaque();
+    method public java.net.URI normalize();
+    method public java.net.URI parseServerAuthority() throws java.net.URISyntaxException;
+    method public java.net.URI relativize(java.net.URI);
+    method public java.net.URI resolve(java.net.URI);
+    method public java.net.URI resolve(String);
+    method public String toASCIIString();
+    method public java.net.URL toURL() throws java.net.MalformedURLException;
+  }
+
+  public class URISyntaxException extends java.lang.Exception {
+    ctor public URISyntaxException(String, String, int);
+    ctor public URISyntaxException(String, String);
+    method public int getIndex();
+    method public String getInput();
+    method public String getReason();
+  }
+
+  public final class URL implements java.io.Serializable {
+    ctor public URL(String, String, int, String) throws java.net.MalformedURLException;
+    ctor public URL(String, String, String) throws java.net.MalformedURLException;
+    ctor public URL(String, String, int, String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
+    ctor public URL(String) throws java.net.MalformedURLException;
+    ctor public URL(java.net.URL, String) throws java.net.MalformedURLException;
+    ctor public URL(java.net.URL, String, java.net.URLStreamHandler) throws java.net.MalformedURLException;
+    method public String getAuthority();
+    method public Object getContent() throws java.io.IOException;
+    method public Object getContent(Class[]) throws java.io.IOException;
+    method public int getDefaultPort();
+    method public String getFile();
+    method public String getHost();
+    method public String getPath();
+    method public int getPort();
+    method public String getProtocol();
+    method public String getQuery();
+    method public String getRef();
+    method public String getUserInfo();
+    method public java.net.URLConnection openConnection() throws java.io.IOException;
+    method public java.net.URLConnection openConnection(java.net.Proxy) throws java.io.IOException;
+    method public java.io.InputStream openStream() throws java.io.IOException;
+    method public boolean sameFile(java.net.URL);
+    method public static void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory);
+    method public String toExternalForm();
+    method public java.net.URI toURI() throws java.net.URISyntaxException;
+  }
+
+  public class URLClassLoader extends java.security.SecureClassLoader implements java.io.Closeable {
+    ctor public URLClassLoader(java.net.URL[], ClassLoader);
+    ctor public URLClassLoader(java.net.URL[]);
+    ctor public URLClassLoader(java.net.URL[], ClassLoader, java.net.URLStreamHandlerFactory);
+    method protected void addURL(java.net.URL);
+    method public void close() throws java.io.IOException;
+    method protected Package definePackage(String, java.util.jar.Manifest, java.net.URL) throws java.lang.IllegalArgumentException;
+    method public java.net.URL findResource(String);
+    method public java.util.Enumeration<java.net.URL> findResources(String) throws java.io.IOException;
+    method public java.net.URL[] getURLs();
+    method public static java.net.URLClassLoader newInstance(java.net.URL[], ClassLoader);
+    method public static java.net.URLClassLoader newInstance(java.net.URL[]);
+  }
+
+  public abstract class URLConnection {
+    ctor protected URLConnection(java.net.URL);
+    method public void addRequestProperty(String, String);
+    method public abstract void connect() throws java.io.IOException;
+    method public boolean getAllowUserInteraction();
+    method public int getConnectTimeout();
+    method public Object getContent() throws java.io.IOException;
+    method public Object getContent(Class[]) throws java.io.IOException;
+    method public String getContentEncoding();
+    method public int getContentLength();
+    method public long getContentLengthLong();
+    method public String getContentType();
+    method public long getDate();
+    method public static boolean getDefaultAllowUserInteraction();
+    method @Deprecated public static String getDefaultRequestProperty(String);
+    method public boolean getDefaultUseCaches();
+    method public boolean getDoInput();
+    method public boolean getDoOutput();
+    method public long getExpiration();
+    method public static java.net.FileNameMap getFileNameMap();
+    method public String getHeaderField(String);
+    method public String getHeaderField(int);
+    method public long getHeaderFieldDate(String, long);
+    method public int getHeaderFieldInt(String, int);
+    method public String getHeaderFieldKey(int);
+    method public long getHeaderFieldLong(String, long);
+    method public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getHeaderFields();
+    method public long getIfModifiedSince();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public long getLastModified();
+    method public java.io.OutputStream getOutputStream() throws java.io.IOException;
+    method public java.security.Permission getPermission() throws java.io.IOException;
+    method public int getReadTimeout();
+    method public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getRequestProperties();
+    method public String getRequestProperty(String);
+    method public java.net.URL getURL();
+    method public boolean getUseCaches();
+    method public static String guessContentTypeFromName(String);
+    method public static String guessContentTypeFromStream(java.io.InputStream) throws java.io.IOException;
+    method public void setAllowUserInteraction(boolean);
+    method public void setConnectTimeout(int);
+    method public static void setContentHandlerFactory(java.net.ContentHandlerFactory);
+    method public static void setDefaultAllowUserInteraction(boolean);
+    method @Deprecated public static void setDefaultRequestProperty(String, String);
+    method public void setDefaultUseCaches(boolean);
+    method public void setDoInput(boolean);
+    method public void setDoOutput(boolean);
+    method public static void setFileNameMap(java.net.FileNameMap);
+    method public void setIfModifiedSince(long);
+    method public void setReadTimeout(int);
+    method public void setRequestProperty(String, String);
+    method public void setUseCaches(boolean);
+    field protected boolean allowUserInteraction;
+    field protected boolean connected;
+    field protected boolean doInput;
+    field protected boolean doOutput;
+    field protected long ifModifiedSince;
+    field protected java.net.URL url;
+    field protected boolean useCaches;
+  }
+
+  public class URLDecoder {
+    ctor public URLDecoder();
+    method @Deprecated public static String decode(String);
+    method public static String decode(String, String) throws java.io.UnsupportedEncodingException;
+  }
+
+  public class URLEncoder {
+    method @Deprecated public static String encode(String);
+    method public static String encode(String, String) throws java.io.UnsupportedEncodingException;
+  }
+
+  public abstract class URLStreamHandler {
+    ctor public URLStreamHandler();
+    method protected boolean equals(java.net.URL, java.net.URL);
+    method protected int getDefaultPort();
+    method protected java.net.InetAddress getHostAddress(java.net.URL);
+    method protected int hashCode(java.net.URL);
+    method protected boolean hostsEqual(java.net.URL, java.net.URL);
+    method protected abstract java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException;
+    method protected java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException;
+    method protected void parseURL(java.net.URL, String, int, int);
+    method protected boolean sameFile(java.net.URL, java.net.URL);
+    method protected void setURL(java.net.URL, String, String, int, String, String, String, String, String);
+    method @Deprecated protected void setURL(java.net.URL, String, String, int, String, String);
+    method protected String toExternalForm(java.net.URL);
+  }
+
+  public interface URLStreamHandlerFactory {
+    method public java.net.URLStreamHandler createURLStreamHandler(String);
+  }
+
+  public class UnknownHostException extends java.io.IOException {
+    ctor public UnknownHostException(String);
+    ctor public UnknownHostException();
+  }
+
+  public class UnknownServiceException extends java.io.IOException {
+    ctor public UnknownServiceException();
+    ctor public UnknownServiceException(String);
+  }
+
+}
+
+package java.nio {
+
+  public abstract class Buffer {
+    method public abstract Object array();
+    method public abstract int arrayOffset();
+    method public final int capacity();
+    method public java.nio.Buffer clear();
+    method public java.nio.Buffer flip();
+    method public abstract boolean hasArray();
+    method public final boolean hasRemaining();
+    method public abstract boolean isDirect();
+    method public abstract boolean isReadOnly();
+    method public final int limit();
+    method public java.nio.Buffer limit(int);
+    method public java.nio.Buffer mark();
+    method public final int position();
+    method public java.nio.Buffer position(int);
+    method public final int remaining();
+    method public java.nio.Buffer reset();
+    method public java.nio.Buffer rewind();
+  }
+
+  public class BufferOverflowException extends java.lang.RuntimeException {
+    ctor public BufferOverflowException();
+  }
+
+  public class BufferUnderflowException extends java.lang.RuntimeException {
+    ctor public BufferUnderflowException();
+  }
+
+  public abstract class ByteBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.ByteBuffer> {
+    method @NonNull public static java.nio.ByteBuffer allocate(int);
+    method @NonNull public static java.nio.ByteBuffer allocateDirect(int);
+    method @NonNull public final byte[] array();
+    method public final int arrayOffset();
+    method @NonNull public abstract java.nio.CharBuffer asCharBuffer();
+    method @NonNull public abstract java.nio.DoubleBuffer asDoubleBuffer();
+    method @NonNull public abstract java.nio.FloatBuffer asFloatBuffer();
+    method @NonNull public abstract java.nio.IntBuffer asIntBuffer();
+    method @NonNull public abstract java.nio.LongBuffer asLongBuffer();
+    method @NonNull public abstract java.nio.ByteBuffer asReadOnlyBuffer();
+    method @NonNull public abstract java.nio.ShortBuffer asShortBuffer();
+    method @NonNull public abstract java.nio.ByteBuffer compact();
+    method public int compareTo(@NonNull java.nio.ByteBuffer);
+    method @NonNull public abstract java.nio.ByteBuffer duplicate();
+    method public abstract byte get();
+    method public abstract byte get(int);
+    method @NonNull public java.nio.ByteBuffer get(@NonNull byte[], int, int);
+    method @NonNull public java.nio.ByteBuffer get(@NonNull byte[]);
+    method public abstract char getChar();
+    method public abstract char getChar(int);
+    method public abstract double getDouble();
+    method public abstract double getDouble(int);
+    method public abstract float getFloat();
+    method public abstract float getFloat(int);
+    method public abstract int getInt();
+    method public abstract int getInt(int);
+    method public abstract long getLong();
+    method public abstract long getLong(int);
+    method public abstract short getShort();
+    method public abstract short getShort(int);
+    method public final boolean hasArray();
+    method @NonNull public final java.nio.ByteOrder order();
+    method @NonNull public final java.nio.ByteBuffer order(@NonNull java.nio.ByteOrder);
+    method @NonNull public abstract java.nio.ByteBuffer put(byte);
+    method @NonNull public abstract java.nio.ByteBuffer put(int, byte);
+    method @NonNull public java.nio.ByteBuffer put(@NonNull java.nio.ByteBuffer);
+    method @NonNull public java.nio.ByteBuffer put(@NonNull byte[], int, int);
+    method @NonNull public final java.nio.ByteBuffer put(@NonNull byte[]);
+    method @NonNull public abstract java.nio.ByteBuffer putChar(char);
+    method @NonNull public abstract java.nio.ByteBuffer putChar(int, char);
+    method @NonNull public abstract java.nio.ByteBuffer putDouble(double);
+    method @NonNull public abstract java.nio.ByteBuffer putDouble(int, double);
+    method @NonNull public abstract java.nio.ByteBuffer putFloat(float);
+    method @NonNull public abstract java.nio.ByteBuffer putFloat(int, float);
+    method @NonNull public abstract java.nio.ByteBuffer putInt(int);
+    method @NonNull public abstract java.nio.ByteBuffer putInt(int, int);
+    method @NonNull public abstract java.nio.ByteBuffer putLong(long);
+    method @NonNull public abstract java.nio.ByteBuffer putLong(int, long);
+    method @NonNull public abstract java.nio.ByteBuffer putShort(short);
+    method @NonNull public abstract java.nio.ByteBuffer putShort(int, short);
+    method @NonNull public abstract java.nio.ByteBuffer slice();
+    method @NonNull public static java.nio.ByteBuffer wrap(@NonNull byte[], int, int);
+    method @NonNull public static java.nio.ByteBuffer wrap(@NonNull byte[]);
+  }
+
+  public final class ByteOrder {
+    method public static java.nio.ByteOrder nativeOrder();
+    field public static final java.nio.ByteOrder BIG_ENDIAN;
+    field public static final java.nio.ByteOrder LITTLE_ENDIAN;
+  }
+
+  public abstract class CharBuffer extends java.nio.Buffer implements java.lang.Appendable java.lang.CharSequence java.lang.Comparable<java.nio.CharBuffer> java.lang.Readable {
+    method public static java.nio.CharBuffer allocate(int);
+    method public java.nio.CharBuffer append(CharSequence);
+    method public java.nio.CharBuffer append(CharSequence, int, int);
+    method public java.nio.CharBuffer append(char);
+    method public final char[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.CharBuffer asReadOnlyBuffer();
+    method public final char charAt(int);
+    method public abstract java.nio.CharBuffer compact();
+    method public int compareTo(java.nio.CharBuffer);
+    method public abstract java.nio.CharBuffer duplicate();
+    method public abstract char get();
+    method public abstract char get(int);
+    method public java.nio.CharBuffer get(char[], int, int);
+    method public java.nio.CharBuffer get(char[]);
+    method public final boolean hasArray();
+    method public final int length();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.CharBuffer put(char);
+    method public abstract java.nio.CharBuffer put(int, char);
+    method public java.nio.CharBuffer put(java.nio.CharBuffer);
+    method public java.nio.CharBuffer put(char[], int, int);
+    method public final java.nio.CharBuffer put(char[]);
+    method public java.nio.CharBuffer put(String, int, int);
+    method public final java.nio.CharBuffer put(String);
+    method public int read(java.nio.CharBuffer) throws java.io.IOException;
+    method public abstract java.nio.CharBuffer slice();
+    method public abstract java.nio.CharBuffer subSequence(int, int);
+    method public static java.nio.CharBuffer wrap(char[], int, int);
+    method public static java.nio.CharBuffer wrap(char[]);
+    method public static java.nio.CharBuffer wrap(CharSequence, int, int);
+    method public static java.nio.CharBuffer wrap(CharSequence);
+  }
+
+  public abstract class DoubleBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.DoubleBuffer> {
+    method public static java.nio.DoubleBuffer allocate(int);
+    method public final double[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.DoubleBuffer asReadOnlyBuffer();
+    method public abstract java.nio.DoubleBuffer compact();
+    method public int compareTo(java.nio.DoubleBuffer);
+    method public abstract java.nio.DoubleBuffer duplicate();
+    method public abstract double get();
+    method public abstract double get(int);
+    method public java.nio.DoubleBuffer get(double[], int, int);
+    method public java.nio.DoubleBuffer get(double[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.DoubleBuffer put(double);
+    method public abstract java.nio.DoubleBuffer put(int, double);
+    method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer);
+    method public java.nio.DoubleBuffer put(double[], int, int);
+    method public final java.nio.DoubleBuffer put(double[]);
+    method public abstract java.nio.DoubleBuffer slice();
+    method public static java.nio.DoubleBuffer wrap(double[], int, int);
+    method public static java.nio.DoubleBuffer wrap(double[]);
+  }
+
+  public abstract class FloatBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.FloatBuffer> {
+    method public static java.nio.FloatBuffer allocate(int);
+    method public final float[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.FloatBuffer asReadOnlyBuffer();
+    method public abstract java.nio.FloatBuffer compact();
+    method public int compareTo(java.nio.FloatBuffer);
+    method public abstract java.nio.FloatBuffer duplicate();
+    method public abstract float get();
+    method public abstract float get(int);
+    method public java.nio.FloatBuffer get(float[], int, int);
+    method public java.nio.FloatBuffer get(float[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.FloatBuffer put(float);
+    method public abstract java.nio.FloatBuffer put(int, float);
+    method public java.nio.FloatBuffer put(java.nio.FloatBuffer);
+    method public java.nio.FloatBuffer put(float[], int, int);
+    method public final java.nio.FloatBuffer put(float[]);
+    method public abstract java.nio.FloatBuffer slice();
+    method public static java.nio.FloatBuffer wrap(float[], int, int);
+    method public static java.nio.FloatBuffer wrap(float[]);
+  }
+
+  public abstract class IntBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.IntBuffer> {
+    method public static java.nio.IntBuffer allocate(int);
+    method public final int[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.IntBuffer asReadOnlyBuffer();
+    method public abstract java.nio.IntBuffer compact();
+    method public int compareTo(java.nio.IntBuffer);
+    method public abstract java.nio.IntBuffer duplicate();
+    method public abstract int get();
+    method public abstract int get(int);
+    method public java.nio.IntBuffer get(int[], int, int);
+    method public java.nio.IntBuffer get(int[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.IntBuffer put(int);
+    method public abstract java.nio.IntBuffer put(int, int);
+    method public java.nio.IntBuffer put(java.nio.IntBuffer);
+    method public java.nio.IntBuffer put(int[], int, int);
+    method public final java.nio.IntBuffer put(int[]);
+    method public abstract java.nio.IntBuffer slice();
+    method public static java.nio.IntBuffer wrap(int[], int, int);
+    method public static java.nio.IntBuffer wrap(int[]);
+  }
+
+  public class InvalidMarkException extends java.lang.IllegalStateException {
+    ctor public InvalidMarkException();
+  }
+
+  public abstract class LongBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.LongBuffer> {
+    method public static java.nio.LongBuffer allocate(int);
+    method public final long[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.LongBuffer asReadOnlyBuffer();
+    method public abstract java.nio.LongBuffer compact();
+    method public int compareTo(java.nio.LongBuffer);
+    method public abstract java.nio.LongBuffer duplicate();
+    method public abstract long get();
+    method public abstract long get(int);
+    method public java.nio.LongBuffer get(long[], int, int);
+    method public java.nio.LongBuffer get(long[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.LongBuffer put(long);
+    method public abstract java.nio.LongBuffer put(int, long);
+    method public java.nio.LongBuffer put(java.nio.LongBuffer);
+    method public java.nio.LongBuffer put(long[], int, int);
+    method public final java.nio.LongBuffer put(long[]);
+    method public abstract java.nio.LongBuffer slice();
+    method public static java.nio.LongBuffer wrap(long[], int, int);
+    method public static java.nio.LongBuffer wrap(long[]);
+  }
+
+  public abstract class MappedByteBuffer extends java.nio.ByteBuffer {
+    method public final java.nio.MappedByteBuffer force();
+    method public final boolean isLoaded();
+    method public final java.nio.MappedByteBuffer load();
+  }
+
+  public class ReadOnlyBufferException extends java.lang.UnsupportedOperationException {
+    ctor public ReadOnlyBufferException();
+  }
+
+  public abstract class ShortBuffer extends java.nio.Buffer implements java.lang.Comparable<java.nio.ShortBuffer> {
+    method public static java.nio.ShortBuffer allocate(int);
+    method public final short[] array();
+    method public final int arrayOffset();
+    method public abstract java.nio.ShortBuffer asReadOnlyBuffer();
+    method public abstract java.nio.ShortBuffer compact();
+    method public int compareTo(java.nio.ShortBuffer);
+    method public abstract java.nio.ShortBuffer duplicate();
+    method public abstract short get();
+    method public abstract short get(int);
+    method public java.nio.ShortBuffer get(short[], int, int);
+    method public java.nio.ShortBuffer get(short[]);
+    method public final boolean hasArray();
+    method public abstract java.nio.ByteOrder order();
+    method public abstract java.nio.ShortBuffer put(short);
+    method public abstract java.nio.ShortBuffer put(int, short);
+    method public java.nio.ShortBuffer put(java.nio.ShortBuffer);
+    method public java.nio.ShortBuffer put(short[], int, int);
+    method public final java.nio.ShortBuffer put(short[]);
+    method public abstract java.nio.ShortBuffer slice();
+    method public static java.nio.ShortBuffer wrap(short[], int, int);
+    method public static java.nio.ShortBuffer wrap(short[]);
+  }
+
+}
+
+package java.nio.channels {
+
+  public class AcceptPendingException extends java.lang.IllegalStateException {
+    ctor public AcceptPendingException();
+  }
+
+  public class AlreadyBoundException extends java.lang.IllegalStateException {
+    ctor public AlreadyBoundException();
+  }
+
+  public class AlreadyConnectedException extends java.lang.IllegalStateException {
+    ctor public AlreadyConnectedException();
+  }
+
+  public interface AsynchronousByteChannel extends java.nio.channels.AsynchronousChannel {
+    method public <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
+    method public <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
+  }
+
+  public interface AsynchronousChannel extends java.nio.channels.Channel {
+  }
+
+  public abstract class AsynchronousChannelGroup {
+    ctor protected AsynchronousChannelGroup(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract boolean isShutdown();
+    method public abstract boolean isTerminated();
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract void shutdown();
+    method public abstract void shutdownNow() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withCachedThreadPool(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withFixedThreadPool(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousChannelGroup withThreadPool(java.util.concurrent.ExecutorService) throws java.io.IOException;
+  }
+
+  public class AsynchronousCloseException extends java.nio.channels.ClosedChannelException {
+    ctor public AsynchronousCloseException();
+  }
+
+  public abstract class AsynchronousFileChannel implements java.nio.channels.AsynchronousChannel {
+    ctor protected AsynchronousFileChannel();
+    method public abstract void force(boolean) throws java.io.IOException;
+    method public abstract <A> void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock,? super A>);
+    method public final <A> void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock,? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.FileLock> lock(long, long, boolean);
+    method public final java.util.concurrent.Future<java.nio.channels.FileLock> lock();
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract <A> void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer, long);
+    method public abstract long size() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousFileChannel truncate(long) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
+    method public abstract <A> void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer, long);
+  }
+
+  public abstract class AsynchronousServerSocketChannel implements java.nio.channels.AsynchronousChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousServerSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract <A> void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel,? super A>);
+    method public abstract java.util.concurrent.Future<java.nio.channels.AsynchronousSocketChannel> accept();
+    method public final java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousServerSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract <T> java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+  }
+
+  public abstract class AsynchronousSocketChannel implements java.nio.channels.AsynchronousByteChannel java.nio.channels.NetworkChannel {
+    ctor protected AsynchronousSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
+    method public abstract java.nio.channels.AsynchronousSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract <A> void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void,? super A>);
+    method public abstract java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress);
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.AsynchronousSocketChannel open() throws java.io.IOException;
+    method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
+    method public abstract <A> void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public final <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract <A> void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long,? super A>);
+    method public abstract <T> java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel shutdownOutput() throws java.io.IOException;
+    method public abstract <A> void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public final <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer,? super A>);
+    method public abstract <A> void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long,? super A>);
+  }
+
+  public interface ByteChannel extends java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel {
+  }
+
+  public class CancelledKeyException extends java.lang.IllegalStateException {
+    ctor public CancelledKeyException();
+  }
+
+  public interface Channel extends java.io.Closeable {
+    method public boolean isOpen();
+  }
+
+  public final class Channels {
+    method public static java.nio.channels.ReadableByteChannel newChannel(java.io.InputStream);
+    method public static java.nio.channels.WritableByteChannel newChannel(java.io.OutputStream);
+    method public static java.io.InputStream newInputStream(java.nio.channels.ReadableByteChannel);
+    method public static java.io.InputStream newInputStream(java.nio.channels.AsynchronousByteChannel);
+    method public static java.io.OutputStream newOutputStream(java.nio.channels.WritableByteChannel);
+    method public static java.io.OutputStream newOutputStream(java.nio.channels.AsynchronousByteChannel);
+    method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int);
+    method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, String);
+    method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int);
+    method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, String);
+  }
+
+  public class ClosedByInterruptException extends java.nio.channels.AsynchronousCloseException {
+    ctor public ClosedByInterruptException();
+  }
+
+  public class ClosedChannelException extends java.io.IOException {
+    ctor public ClosedChannelException();
+  }
+
+  public class ClosedSelectorException extends java.lang.IllegalStateException {
+    ctor public ClosedSelectorException();
+  }
+
+  public interface CompletionHandler<V, A> {
+    method public void completed(V, A);
+    method public void failed(Throwable, A);
+  }
+
+  public class ConnectionPendingException extends java.lang.IllegalStateException {
+    ctor public ConnectionPendingException();
+  }
+
+  public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.MulticastChannel java.nio.channels.ScatteringByteChannel {
+    ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.DatagramChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public abstract boolean isConnected();
+    method public static java.nio.channels.DatagramChannel open() throws java.io.IOException;
+    method public static java.nio.channels.DatagramChannel open(java.net.ProtocolFamily) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
+    method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.net.DatagramSocket socket();
+    method public final int validOps();
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel {
+    ctor protected FileChannel();
+    method public abstract void force(boolean) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock lock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock lock() throws java.io.IOException;
+    method public abstract java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode, long, long) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract java.nio.channels.FileChannel position(long) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException;
+    method public abstract long transferFrom(java.nio.channels.ReadableByteChannel, long, long) throws java.io.IOException;
+    method public abstract long transferTo(long, long, java.nio.channels.WritableByteChannel) throws java.io.IOException;
+    method public abstract java.nio.channels.FileChannel truncate(long) throws java.io.IOException;
+    method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
+    method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException;
+  }
+
+  public static class FileChannel.MapMode {
+    field public static final java.nio.channels.FileChannel.MapMode PRIVATE;
+    field public static final java.nio.channels.FileChannel.MapMode READ_ONLY;
+    field public static final java.nio.channels.FileChannel.MapMode READ_WRITE;
+  }
+
+  public abstract class FileLock implements java.lang.AutoCloseable {
+    ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean);
+    ctor protected FileLock(java.nio.channels.AsynchronousFileChannel, long, long, boolean);
+    method public java.nio.channels.Channel acquiredBy();
+    method public final java.nio.channels.FileChannel channel();
+    method public final void close() throws java.io.IOException;
+    method public final boolean isShared();
+    method public abstract boolean isValid();
+    method public final boolean overlaps(long, long);
+    method public final long position();
+    method public abstract void release() throws java.io.IOException;
+    method public final long size();
+    method public final String toString();
+  }
+
+  public class FileLockInterruptionException extends java.io.IOException {
+    ctor public FileLockInterruptionException();
+  }
+
+  public interface GatheringByteChannel extends java.nio.channels.WritableByteChannel {
+    method public long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public class IllegalBlockingModeException extends java.lang.IllegalStateException {
+    ctor public IllegalBlockingModeException();
+  }
+
+  public class IllegalChannelGroupException extends java.lang.IllegalArgumentException {
+    ctor public IllegalChannelGroupException();
+  }
+
+  public class IllegalSelectorException extends java.lang.IllegalArgumentException {
+    ctor public IllegalSelectorException();
+  }
+
+  public class InterruptedByTimeoutException extends java.io.IOException {
+    ctor public InterruptedByTimeoutException();
+  }
+
+  public interface InterruptibleChannel extends java.nio.channels.Channel {
+  }
+
+  public abstract class MembershipKey {
+    ctor protected MembershipKey();
+    method public abstract java.nio.channels.MembershipKey block(java.net.InetAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.MulticastChannel channel();
+    method public abstract void drop();
+    method public abstract java.net.InetAddress group();
+    method public abstract boolean isValid();
+    method public abstract java.net.NetworkInterface networkInterface();
+    method public abstract java.net.InetAddress sourceAddress();
+    method public abstract java.nio.channels.MembershipKey unblock(java.net.InetAddress);
+  }
+
+  public interface MulticastChannel extends java.nio.channels.NetworkChannel {
+    method public java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface) throws java.io.IOException;
+    method public java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface, java.net.InetAddress) throws java.io.IOException;
+  }
+
+  public interface NetworkChannel extends java.nio.channels.Channel {
+    method public java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public <T> T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public <T> java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public java.util.Set<java.net.SocketOption<?>> supportedOptions();
+  }
+
+  public class NoConnectionPendingException extends java.lang.IllegalStateException {
+    ctor public NoConnectionPendingException();
+  }
+
+  public class NonReadableChannelException extends java.lang.IllegalStateException {
+    ctor public NonReadableChannelException();
+  }
+
+  public class NonWritableChannelException extends java.lang.IllegalStateException {
+    ctor public NonWritableChannelException();
+  }
+
+  public class NotYetBoundException extends java.lang.IllegalStateException {
+    ctor public NotYetBoundException();
+  }
+
+  public class NotYetConnectedException extends java.lang.IllegalStateException {
+    ctor public NotYetConnectedException();
+  }
+
+  public class OverlappingFileLockException extends java.lang.IllegalStateException {
+    ctor public OverlappingFileLockException();
+  }
+
+  public abstract class Pipe {
+    ctor protected Pipe();
+    method public static java.nio.channels.Pipe open() throws java.io.IOException;
+    method public abstract java.nio.channels.Pipe.SinkChannel sink();
+    method public abstract java.nio.channels.Pipe.SourceChannel source();
+  }
+
+  public abstract static class Pipe.SinkChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.WritableByteChannel {
+    ctor protected Pipe.SinkChannel(java.nio.channels.spi.SelectorProvider);
+    method public final int validOps();
+  }
+
+  public abstract static class Pipe.SourceChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.ScatteringByteChannel {
+    ctor protected Pipe.SourceChannel(java.nio.channels.spi.SelectorProvider);
+    method public final int validOps();
+  }
+
+  public class ReadPendingException extends java.lang.IllegalStateException {
+    ctor public ReadPendingException();
+  }
+
+  public interface ReadableByteChannel extends java.nio.channels.Channel {
+    method public int read(java.nio.ByteBuffer) throws java.io.IOException;
+  }
+
+  public interface ScatteringByteChannel extends java.nio.channels.ReadableByteChannel {
+    method public long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
+    method public long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public interface SeekableByteChannel extends java.nio.channels.ByteChannel {
+    method public long position() throws java.io.IOException;
+    method public java.nio.channels.SeekableByteChannel position(long) throws java.io.IOException;
+    method public long size() throws java.io.IOException;
+    method public java.nio.channels.SeekableByteChannel truncate(long) throws java.io.IOException;
+  }
+
+  public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel {
+    ctor protected SelectableChannel();
+    method public abstract Object blockingLock();
+    method public abstract java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException;
+    method public abstract boolean isBlocking();
+    method public abstract boolean isRegistered();
+    method public abstract java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
+    method public abstract java.nio.channels.spi.SelectorProvider provider();
+    method public abstract java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, Object) throws java.nio.channels.ClosedChannelException;
+    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException;
+    method public abstract int validOps();
+  }
+
+  public abstract class SelectionKey {
+    ctor protected SelectionKey();
+    method public final Object attach(Object);
+    method public final Object attachment();
+    method public abstract void cancel();
+    method public abstract java.nio.channels.SelectableChannel channel();
+    method public abstract int interestOps();
+    method public abstract java.nio.channels.SelectionKey interestOps(int);
+    method public final boolean isAcceptable();
+    method public final boolean isConnectable();
+    method public final boolean isReadable();
+    method public abstract boolean isValid();
+    method public final boolean isWritable();
+    method public abstract int readyOps();
+    method public abstract java.nio.channels.Selector selector();
+    field public static final int OP_ACCEPT = 16; // 0x10
+    field public static final int OP_CONNECT = 8; // 0x8
+    field public static final int OP_READ = 1; // 0x1
+    field public static final int OP_WRITE = 4; // 0x4
+  }
+
+  public abstract class Selector implements java.io.Closeable {
+    ctor protected Selector();
+    method public abstract boolean isOpen();
+    method public abstract java.util.Set<java.nio.channels.SelectionKey> keys();
+    method public static java.nio.channels.Selector open() throws java.io.IOException;
+    method public abstract java.nio.channels.spi.SelectorProvider provider();
+    method public abstract int select(long) throws java.io.IOException;
+    method public abstract int select() throws java.io.IOException;
+    method public abstract int selectNow() throws java.io.IOException;
+    method public abstract java.util.Set<java.nio.channels.SelectionKey> selectedKeys();
+    method public abstract java.nio.channels.Selector wakeup();
+  }
+
+  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.NetworkChannel {
+    ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException;
+    method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
+    method public abstract <T> java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.net.ServerSocket socket();
+    method public final int validOps();
+  }
+
+  public class ShutdownChannelGroupException extends java.lang.IllegalStateException {
+    ctor public ShutdownChannelGroupException();
+  }
+
+  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.NetworkChannel java.nio.channels.ScatteringByteChannel {
+    ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider);
+    method public abstract java.nio.channels.SocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract boolean finishConnect() throws java.io.IOException;
+    method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
+    method public abstract boolean isConnected();
+    method public abstract boolean isConnectionPending();
+    method public static java.nio.channels.SocketChannel open() throws java.io.IOException;
+    method public static java.nio.channels.SocketChannel open(java.net.SocketAddress) throws java.io.IOException;
+    method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownInput() throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel shutdownOutput() throws java.io.IOException;
+    method public abstract java.net.Socket socket();
+    method public final int validOps();
+    method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException;
+  }
+
+  public class UnresolvedAddressException extends java.lang.IllegalArgumentException {
+    ctor public UnresolvedAddressException();
+  }
+
+  public class UnsupportedAddressTypeException extends java.lang.IllegalArgumentException {
+    ctor public UnsupportedAddressTypeException();
+  }
+
+  public interface WritableByteChannel extends java.nio.channels.Channel {
+    method public int write(java.nio.ByteBuffer) throws java.io.IOException;
+  }
+
+  public class WritePendingException extends java.lang.IllegalStateException {
+    ctor public WritePendingException();
+  }
+
+}
+
+package java.nio.channels.spi {
+
+  public abstract class AbstractInterruptibleChannel implements java.nio.channels.Channel java.nio.channels.InterruptibleChannel {
+    ctor protected AbstractInterruptibleChannel();
+    method protected final void begin();
+    method public final void close() throws java.io.IOException;
+    method protected final void end(boolean) throws java.nio.channels.AsynchronousCloseException;
+    method protected abstract void implCloseChannel() throws java.io.IOException;
+    method public final boolean isOpen();
+  }
+
+  public abstract class AbstractSelectableChannel extends java.nio.channels.SelectableChannel {
+    ctor protected AbstractSelectableChannel(java.nio.channels.spi.SelectorProvider);
+    method public final Object blockingLock();
+    method public final java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException;
+    method protected final void implCloseChannel() throws java.io.IOException;
+    method protected abstract void implCloseSelectableChannel() throws java.io.IOException;
+    method protected abstract void implConfigureBlocking(boolean) throws java.io.IOException;
+    method public final boolean isBlocking();
+    method public final boolean isRegistered();
+    method public final java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector);
+    method public final java.nio.channels.spi.SelectorProvider provider();
+    method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, Object) throws java.nio.channels.ClosedChannelException;
+  }
+
+  public abstract class AbstractSelectionKey extends java.nio.channels.SelectionKey {
+    ctor protected AbstractSelectionKey();
+    method public final void cancel();
+    method public final boolean isValid();
+  }
+
+  public abstract class AbstractSelector extends java.nio.channels.Selector {
+    ctor protected AbstractSelector(java.nio.channels.spi.SelectorProvider);
+    method protected final void begin();
+    method protected final java.util.Set<java.nio.channels.SelectionKey> cancelledKeys();
+    method public final void close() throws java.io.IOException;
+    method protected final void deregister(java.nio.channels.spi.AbstractSelectionKey);
+    method protected final void end();
+    method protected abstract void implCloseSelector() throws java.io.IOException;
+    method public final boolean isOpen();
+    method public final java.nio.channels.spi.SelectorProvider provider();
+    method protected abstract java.nio.channels.SelectionKey register(java.nio.channels.spi.AbstractSelectableChannel, int, Object);
+  }
+
+  public abstract class AsynchronousChannelProvider {
+    ctor protected AsynchronousChannelProvider();
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(int, java.util.concurrent.ThreadFactory) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(java.util.concurrent.ExecutorService, int) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public abstract java.nio.channels.AsynchronousSocketChannel openAsynchronousSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
+    method public static java.nio.channels.spi.AsynchronousChannelProvider provider();
+  }
+
+  public abstract class SelectorProvider {
+    ctor protected SelectorProvider();
+    method public java.nio.channels.Channel inheritedChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel openDatagramChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.DatagramChannel openDatagramChannel(java.net.ProtocolFamily) throws java.io.IOException;
+    method public abstract java.nio.channels.Pipe openPipe() throws java.io.IOException;
+    method public abstract java.nio.channels.spi.AbstractSelector openSelector() throws java.io.IOException;
+    method public abstract java.nio.channels.ServerSocketChannel openServerSocketChannel() throws java.io.IOException;
+    method public abstract java.nio.channels.SocketChannel openSocketChannel() throws java.io.IOException;
+    method public static java.nio.channels.spi.SelectorProvider provider();
+  }
+
+}
+
+package java.nio.charset {
+
+  public class CharacterCodingException extends java.io.IOException {
+    ctor public CharacterCodingException();
+  }
+
+  public abstract class Charset implements java.lang.Comparable<java.nio.charset.Charset> {
+    ctor protected Charset(String, String[]);
+    method public final java.util.Set<java.lang.String> aliases();
+    method public static java.util.SortedMap<java.lang.String,java.nio.charset.Charset> availableCharsets();
+    method public boolean canEncode();
+    method public final int compareTo(java.nio.charset.Charset);
+    method public abstract boolean contains(java.nio.charset.Charset);
+    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer);
+    method public static java.nio.charset.Charset defaultCharset();
+    method public String displayName();
+    method public String displayName(java.util.Locale);
+    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer);
+    method public final java.nio.ByteBuffer encode(String);
+    method public final boolean equals(Object);
+    method public static java.nio.charset.Charset forName(String);
+    method public final int hashCode();
+    method public final boolean isRegistered();
+    method public static boolean isSupported(String);
+    method public final String name();
+    method public abstract java.nio.charset.CharsetDecoder newDecoder();
+    method public abstract java.nio.charset.CharsetEncoder newEncoder();
+    method public final String toString();
+  }
+
+  public abstract class CharsetDecoder {
+    ctor protected CharsetDecoder(java.nio.charset.Charset, float, float);
+    method public final float averageCharsPerByte();
+    method public final java.nio.charset.Charset charset();
+    method public final java.nio.charset.CoderResult decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean);
+    method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException;
+    method protected abstract java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer, java.nio.CharBuffer);
+    method public java.nio.charset.Charset detectedCharset();
+    method public final java.nio.charset.CoderResult flush(java.nio.CharBuffer);
+    method protected java.nio.charset.CoderResult implFlush(java.nio.CharBuffer);
+    method protected void implOnMalformedInput(java.nio.charset.CodingErrorAction);
+    method protected void implOnUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method protected void implReplaceWith(String);
+    method protected void implReset();
+    method public boolean isAutoDetecting();
+    method public boolean isCharsetDetected();
+    method public java.nio.charset.CodingErrorAction malformedInputAction();
+    method public final float maxCharsPerByte();
+    method public final java.nio.charset.CharsetDecoder onMalformedInput(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetDecoder onUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetDecoder replaceWith(String);
+    method public final String replacement();
+    method public final java.nio.charset.CharsetDecoder reset();
+    method public java.nio.charset.CodingErrorAction unmappableCharacterAction();
+  }
+
+  public abstract class CharsetEncoder {
+    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float, byte[]);
+    ctor protected CharsetEncoder(java.nio.charset.Charset, float, float);
+    method public final float averageBytesPerChar();
+    method public boolean canEncode(char);
+    method public boolean canEncode(CharSequence);
+    method public final java.nio.charset.Charset charset();
+    method public final java.nio.charset.CoderResult encode(java.nio.CharBuffer, java.nio.ByteBuffer, boolean);
+    method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException;
+    method protected abstract java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer, java.nio.ByteBuffer);
+    method public final java.nio.charset.CoderResult flush(java.nio.ByteBuffer);
+    method protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer);
+    method protected void implOnMalformedInput(java.nio.charset.CodingErrorAction);
+    method protected void implOnUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method protected void implReplaceWith(byte[]);
+    method protected void implReset();
+    method public boolean isLegalReplacement(byte[]);
+    method public java.nio.charset.CodingErrorAction malformedInputAction();
+    method public final float maxBytesPerChar();
+    method public final java.nio.charset.CharsetEncoder onMalformedInput(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetEncoder onUnmappableCharacter(java.nio.charset.CodingErrorAction);
+    method public final java.nio.charset.CharsetEncoder replaceWith(byte[]);
+    method public final byte[] replacement();
+    method public final java.nio.charset.CharsetEncoder reset();
+    method public java.nio.charset.CodingErrorAction unmappableCharacterAction();
+  }
+
+  public class CoderMalfunctionError extends java.lang.Error {
+    ctor public CoderMalfunctionError(Exception);
+  }
+
+  public class CoderResult {
+    method public boolean isError();
+    method public boolean isMalformed();
+    method public boolean isOverflow();
+    method public boolean isUnderflow();
+    method public boolean isUnmappable();
+    method public int length();
+    method public static java.nio.charset.CoderResult malformedForLength(int);
+    method public void throwException() throws java.nio.charset.CharacterCodingException;
+    method public static java.nio.charset.CoderResult unmappableForLength(int);
+    field public static final java.nio.charset.CoderResult OVERFLOW;
+    field public static final java.nio.charset.CoderResult UNDERFLOW;
+  }
+
+  public class CodingErrorAction {
+    field public static final java.nio.charset.CodingErrorAction IGNORE;
+    field public static final java.nio.charset.CodingErrorAction REPLACE;
+    field public static final java.nio.charset.CodingErrorAction REPORT;
+  }
+
+  public class IllegalCharsetNameException extends java.lang.IllegalArgumentException {
+    ctor public IllegalCharsetNameException(String);
+    method public String getCharsetName();
+  }
+
+  public class MalformedInputException extends java.nio.charset.CharacterCodingException {
+    ctor public MalformedInputException(int);
+    method public int getInputLength();
+  }
+
+  public final class StandardCharsets {
+    field public static final java.nio.charset.Charset ISO_8859_1;
+    field public static final java.nio.charset.Charset US_ASCII;
+    field public static final java.nio.charset.Charset UTF_16;
+    field public static final java.nio.charset.Charset UTF_16BE;
+    field public static final java.nio.charset.Charset UTF_16LE;
+    field public static final java.nio.charset.Charset UTF_8;
+  }
+
+  public class UnmappableCharacterException extends java.nio.charset.CharacterCodingException {
+    ctor public UnmappableCharacterException(int);
+    method public int getInputLength();
+  }
+
+  public class UnsupportedCharsetException extends java.lang.IllegalArgumentException {
+    ctor public UnsupportedCharsetException(String);
+    method public String getCharsetName();
+  }
+
+}
+
+package java.nio.charset.spi {
+
+  public abstract class CharsetProvider {
+    ctor protected CharsetProvider();
+    method public abstract java.nio.charset.Charset charsetForName(String);
+    method public abstract java.util.Iterator<java.nio.charset.Charset> charsets();
+  }
+
+}
+
+package java.nio.file {
+
+  public class AccessDeniedException extends java.nio.file.FileSystemException {
+    ctor public AccessDeniedException(String);
+    ctor public AccessDeniedException(String, String, String);
+  }
+
+  public enum AccessMode {
+    enum_constant public static final java.nio.file.AccessMode EXECUTE;
+    enum_constant public static final java.nio.file.AccessMode READ;
+    enum_constant public static final java.nio.file.AccessMode WRITE;
+  }
+
+  public class AtomicMoveNotSupportedException extends java.nio.file.FileSystemException {
+    ctor public AtomicMoveNotSupportedException(String, String, String);
+  }
+
+  public class ClosedDirectoryStreamException extends java.lang.IllegalStateException {
+    ctor public ClosedDirectoryStreamException();
+  }
+
+  public class ClosedFileSystemException extends java.lang.IllegalStateException {
+    ctor public ClosedFileSystemException();
+  }
+
+  public class ClosedWatchServiceException extends java.lang.IllegalStateException {
+    ctor public ClosedWatchServiceException();
+  }
+
+  public interface CopyOption {
+  }
+
+  public final class DirectoryIteratorException extends java.util.ConcurrentModificationException {
+    ctor public DirectoryIteratorException(java.io.IOException);
+    method public java.io.IOException getCause();
+  }
+
+  public class DirectoryNotEmptyException extends java.nio.file.FileSystemException {
+    ctor public DirectoryNotEmptyException(String);
+  }
+
+  public interface DirectoryStream<T> extends java.io.Closeable java.lang.Iterable<T> {
+  }
+
+  @java.lang.FunctionalInterface public static interface DirectoryStream.Filter<T> {
+    method public boolean accept(T) throws java.io.IOException;
+  }
+
+  public class FileAlreadyExistsException extends java.nio.file.FileSystemException {
+    ctor public FileAlreadyExistsException(String);
+    ctor public FileAlreadyExistsException(String, String, String);
+  }
+
+  public abstract class FileStore {
+    ctor protected FileStore();
+    method public abstract Object getAttribute(String) throws java.io.IOException;
+    method public abstract <V extends java.nio.file.attribute.FileStoreAttributeView> V getFileStoreAttributeView(Class<V>);
+    method public abstract long getTotalSpace() throws java.io.IOException;
+    method public abstract long getUnallocatedSpace() throws java.io.IOException;
+    method public abstract long getUsableSpace() throws java.io.IOException;
+    method public abstract boolean isReadOnly();
+    method public abstract String name();
+    method public abstract boolean supportsFileAttributeView(Class<? extends java.nio.file.attribute.FileAttributeView>);
+    method public abstract boolean supportsFileAttributeView(String);
+    method public abstract String type();
+  }
+
+  public abstract class FileSystem implements java.io.Closeable {
+    ctor protected FileSystem();
+    method public abstract Iterable<java.nio.file.FileStore> getFileStores();
+    method public abstract java.nio.file.Path getPath(String, java.lang.String...);
+    method public abstract java.nio.file.PathMatcher getPathMatcher(String);
+    method public abstract Iterable<java.nio.file.Path> getRootDirectories();
+    method public abstract String getSeparator();
+    method public abstract java.nio.file.attribute.UserPrincipalLookupService getUserPrincipalLookupService();
+    method public abstract boolean isOpen();
+    method public abstract boolean isReadOnly();
+    method public abstract java.nio.file.WatchService newWatchService() throws java.io.IOException;
+    method public abstract java.nio.file.spi.FileSystemProvider provider();
+    method public abstract java.util.Set<java.lang.String> supportedFileAttributeViews();
+  }
+
+  public class FileSystemAlreadyExistsException extends java.lang.RuntimeException {
+    ctor public FileSystemAlreadyExistsException();
+    ctor public FileSystemAlreadyExistsException(String);
+  }
+
+  public class FileSystemException extends java.io.IOException {
+    ctor public FileSystemException(String);
+    ctor public FileSystemException(String, String, String);
+    method public String getFile();
+    method public String getOtherFile();
+    method public String getReason();
+  }
+
+  public class FileSystemLoopException extends java.nio.file.FileSystemException {
+    ctor public FileSystemLoopException(String);
+  }
+
+  public class FileSystemNotFoundException extends java.lang.RuntimeException {
+    ctor public FileSystemNotFoundException();
+    ctor public FileSystemNotFoundException(String);
+  }
+
+  public final class FileSystems {
+    method public static java.nio.file.FileSystem getDefault();
+    method public static java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String,?>) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String,?>, ClassLoader) throws java.io.IOException;
+    method public static java.nio.file.FileSystem newFileSystem(java.nio.file.Path, ClassLoader) throws java.io.IOException;
+  }
+
+  public enum FileVisitOption {
+    enum_constant public static final java.nio.file.FileVisitOption FOLLOW_LINKS;
+  }
+
+  public enum FileVisitResult {
+    enum_constant public static final java.nio.file.FileVisitResult CONTINUE;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SIBLINGS;
+    enum_constant public static final java.nio.file.FileVisitResult SKIP_SUBTREE;
+    enum_constant public static final java.nio.file.FileVisitResult TERMINATE;
+  }
+
+  public interface FileVisitor<T> {
+    method public java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException;
+  }
+
+  public final class Files {
+    method public static java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static long copy(java.nio.file.Path, java.io.OutputStream) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(java.nio.file.Path, String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempDirectory(String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(java.nio.file.Path, String, String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.file.Path createTempFile(String, String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static void delete(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static java.util.stream.Stream<java.nio.file.Path> find(java.nio.file.Path, int, java.util.function.BiPredicate<java.nio.file.Path,java.nio.file.attribute.BasicFileAttributes>, java.nio.file.FileVisitOption...) throws java.io.IOException;
+    method public static Object getAttribute(java.nio.file.Path, String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, Class<V>, java.nio.file.LinkOption...);
+    method public static java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isExecutable(java.nio.file.Path);
+    method public static boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isReadable(java.nio.file.Path);
+    method public static boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public static boolean isSymbolicLink(java.nio.file.Path);
+    method public static boolean isWritable(java.nio.file.Path);
+    method public static java.util.stream.Stream<java.lang.String> lines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.lang.String> lines(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.nio.file.Path> list(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path) throws java.io.IOException;
+    method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, String) throws java.io.IOException;
+    method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...);
+    method public static String probeContentType(java.nio.file.Path) throws java.io.IOException;
+    method public static byte[] readAllBytes(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
+    method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path) throws java.io.IOException;
+    method public static <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.util.Map<java.lang.String,java.lang.Object> readAttributes(java.nio.file.Path, String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public static java.nio.file.Path setAttribute(java.nio.file.Path, String, Object, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public static java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime) throws java.io.IOException;
+    method public static java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+    method public static java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+    method public static long size(java.nio.file.Path) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.nio.file.Path> walk(java.nio.file.Path, int, java.nio.file.FileVisitOption...) throws java.io.IOException;
+    method public static java.util.stream.Stream<java.nio.file.Path> walk(java.nio.file.Path, java.nio.file.FileVisitOption...) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.util.Set<java.nio.file.FileVisitOption>, int, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, Iterable<? extends java.lang.CharSequence>, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public static java.nio.file.Path write(java.nio.file.Path, Iterable<? extends java.lang.CharSequence>, java.nio.file.OpenOption...) throws java.io.IOException;
+  }
+
+  public class InvalidPathException extends java.lang.IllegalArgumentException {
+    ctor public InvalidPathException(String, String, int);
+    ctor public InvalidPathException(String, String);
+    method public int getIndex();
+    method public String getInput();
+    method public String getReason();
+  }
+
+  public enum LinkOption implements java.nio.file.CopyOption java.nio.file.OpenOption {
+    enum_constant public static final java.nio.file.LinkOption NOFOLLOW_LINKS;
+  }
+
+  public final class LinkPermission extends java.security.BasicPermission {
+    ctor public LinkPermission(String);
+    ctor public LinkPermission(String, String);
+  }
+
+  public class NoSuchFileException extends java.nio.file.FileSystemException {
+    ctor public NoSuchFileException(String);
+    ctor public NoSuchFileException(String, String, String);
+  }
+
+  public class NotDirectoryException extends java.nio.file.FileSystemException {
+    ctor public NotDirectoryException(String);
+  }
+
+  public class NotLinkException extends java.nio.file.FileSystemException {
+    ctor public NotLinkException(String);
+    ctor public NotLinkException(String, String, String);
+  }
+
+  public interface OpenOption {
+  }
+
+  public interface Path extends java.lang.Comparable<java.nio.file.Path> java.lang.Iterable<java.nio.file.Path> java.nio.file.Watchable {
+    method public int compareTo(java.nio.file.Path);
+    method public boolean endsWith(java.nio.file.Path);
+    method public boolean endsWith(String);
+    method public boolean equals(Object);
+    method public java.nio.file.Path getFileName();
+    method public java.nio.file.FileSystem getFileSystem();
+    method public java.nio.file.Path getName(int);
+    method public int getNameCount();
+    method public java.nio.file.Path getParent();
+    method public java.nio.file.Path getRoot();
+    method public int hashCode();
+    method public boolean isAbsolute();
+    method public java.util.Iterator<java.nio.file.Path> iterator();
+    method public java.nio.file.Path normalize();
+    method public java.nio.file.Path relativize(java.nio.file.Path);
+    method public java.nio.file.Path resolve(java.nio.file.Path);
+    method public java.nio.file.Path resolve(String);
+    method public java.nio.file.Path resolveSibling(java.nio.file.Path);
+    method public java.nio.file.Path resolveSibling(String);
+    method public boolean startsWith(java.nio.file.Path);
+    method public boolean startsWith(String);
+    method public java.nio.file.Path subpath(int, int);
+    method public java.nio.file.Path toAbsolutePath();
+    method public java.io.File toFile();
+    method public java.nio.file.Path toRealPath(java.nio.file.LinkOption...) throws java.io.IOException;
+    method public String toString();
+    method public java.net.URI toUri();
+  }
+
+  @java.lang.FunctionalInterface public interface PathMatcher {
+    method public boolean matches(java.nio.file.Path);
+  }
+
+  public final class Paths {
+    method public static java.nio.file.Path get(String, java.lang.String...);
+    method public static java.nio.file.Path get(java.net.URI);
+  }
+
+  public class ProviderMismatchException extends java.lang.IllegalArgumentException {
+    ctor public ProviderMismatchException();
+    ctor public ProviderMismatchException(String);
+  }
+
+  public class ProviderNotFoundException extends java.lang.RuntimeException {
+    ctor public ProviderNotFoundException();
+    ctor public ProviderNotFoundException(String);
+  }
+
+  public class ReadOnlyFileSystemException extends java.lang.UnsupportedOperationException {
+    ctor public ReadOnlyFileSystemException();
+  }
+
+  public interface SecureDirectoryStream<T> extends java.nio.file.DirectoryStream<T> {
+    method public void deleteDirectory(T) throws java.io.IOException;
+    method public void deleteFile(T) throws java.io.IOException;
+    method public <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(Class<V>);
+    method public <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(T, Class<V>, java.nio.file.LinkOption...);
+    method public void move(T, java.nio.file.SecureDirectoryStream<T>, T) throws java.io.IOException;
+    method public java.nio.channels.SeekableByteChannel newByteChannel(T, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public java.nio.file.SecureDirectoryStream<T> newDirectoryStream(T, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public class SimpleFileVisitor<T> implements java.nio.file.FileVisitor<T> {
+    ctor protected SimpleFileVisitor();
+    method public java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
+    method public java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException;
+  }
+
+  public enum StandardCopyOption implements java.nio.file.CopyOption {
+    enum_constant public static final java.nio.file.StandardCopyOption ATOMIC_MOVE;
+    enum_constant public static final java.nio.file.StandardCopyOption COPY_ATTRIBUTES;
+    enum_constant public static final java.nio.file.StandardCopyOption REPLACE_EXISTING;
+  }
+
+  public enum StandardOpenOption implements java.nio.file.OpenOption {
+    enum_constant public static final java.nio.file.StandardOpenOption APPEND;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE;
+    enum_constant public static final java.nio.file.StandardOpenOption CREATE_NEW;
+    enum_constant public static final java.nio.file.StandardOpenOption DELETE_ON_CLOSE;
+    enum_constant public static final java.nio.file.StandardOpenOption DSYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption READ;
+    enum_constant public static final java.nio.file.StandardOpenOption SPARSE;
+    enum_constant public static final java.nio.file.StandardOpenOption SYNC;
+    enum_constant public static final java.nio.file.StandardOpenOption TRUNCATE_EXISTING;
+    enum_constant public static final java.nio.file.StandardOpenOption WRITE;
+  }
+
+  public final class StandardWatchEventKinds {
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_CREATE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_DELETE;
+    field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_MODIFY;
+    field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW;
+  }
+
+  public interface WatchEvent<T> {
+    method public T context();
+    method public int count();
+    method public java.nio.file.WatchEvent.Kind<T> kind();
+  }
+
+  public static interface WatchEvent.Kind<T> {
+    method public String name();
+    method public Class<T> type();
+  }
+
+  public static interface WatchEvent.Modifier {
+    method public String name();
+  }
+
+  public interface WatchKey {
+    method public void cancel();
+    method public boolean isValid();
+    method public java.util.List<java.nio.file.WatchEvent<?>> pollEvents();
+    method public boolean reset();
+    method public java.nio.file.Watchable watchable();
+  }
+
+  public interface WatchService extends java.io.Closeable {
+    method public java.nio.file.WatchKey poll();
+    method public java.nio.file.WatchKey poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public java.nio.file.WatchKey take() throws java.lang.InterruptedException;
+  }
+
+  public interface Watchable {
+    method public java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException;
+    method public java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException;
+  }
+
+}
+
+package java.nio.file.attribute {
+
+  public final class AclEntry {
+    method public java.util.Set<java.nio.file.attribute.AclEntryFlag> flags();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder();
+    method public static java.nio.file.attribute.AclEntry.Builder newBuilder(java.nio.file.attribute.AclEntry);
+    method public java.util.Set<java.nio.file.attribute.AclEntryPermission> permissions();
+    method public java.nio.file.attribute.UserPrincipal principal();
+    method public java.nio.file.attribute.AclEntryType type();
+  }
+
+  public static final class AclEntry.Builder {
+    method public java.nio.file.attribute.AclEntry build();
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.util.Set<java.nio.file.attribute.AclEntryFlag>);
+    method public java.nio.file.attribute.AclEntry.Builder setFlags(java.nio.file.attribute.AclEntryFlag...);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.util.Set<java.nio.file.attribute.AclEntryPermission>);
+    method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.nio.file.attribute.AclEntryPermission...);
+    method public java.nio.file.attribute.AclEntry.Builder setPrincipal(java.nio.file.attribute.UserPrincipal);
+    method public java.nio.file.attribute.AclEntry.Builder setType(java.nio.file.attribute.AclEntryType);
+  }
+
+  public enum AclEntryFlag {
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag DIRECTORY_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag FILE_INHERIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag INHERIT_ONLY;
+    enum_constant public static final java.nio.file.attribute.AclEntryFlag NO_PROPAGATE_INHERIT;
+  }
+
+  public enum AclEntryPermission {
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission APPEND_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE_CHILD;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission EXECUTE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission SYNCHRONIZE;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ACL;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ATTRIBUTES;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_DATA;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_NAMED_ATTRS;
+    enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_OWNER;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_FILE;
+    field public static final java.nio.file.attribute.AclEntryPermission ADD_SUBDIRECTORY;
+    field public static final java.nio.file.attribute.AclEntryPermission LIST_DIRECTORY;
+  }
+
+  public enum AclEntryType {
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALARM;
+    enum_constant public static final java.nio.file.attribute.AclEntryType ALLOW;
+    enum_constant public static final java.nio.file.attribute.AclEntryType AUDIT;
+    enum_constant public static final java.nio.file.attribute.AclEntryType DENY;
+  }
+
+  public interface AclFileAttributeView extends java.nio.file.attribute.FileOwnerAttributeView {
+    method public java.util.List<java.nio.file.attribute.AclEntry> getAcl() throws java.io.IOException;
+    method public void setAcl(java.util.List<java.nio.file.attribute.AclEntry>) throws java.io.IOException;
+  }
+
+  public interface AttributeView {
+    method public String name();
+  }
+
+  public interface BasicFileAttributeView extends java.nio.file.attribute.FileAttributeView {
+    method public java.nio.file.attribute.BasicFileAttributes readAttributes() throws java.io.IOException;
+    method public void setTimes(java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime) throws java.io.IOException;
+  }
+
+  public interface BasicFileAttributes {
+    method public java.nio.file.attribute.FileTime creationTime();
+    method public Object fileKey();
+    method public boolean isDirectory();
+    method public boolean isOther();
+    method public boolean isRegularFile();
+    method public boolean isSymbolicLink();
+    method public java.nio.file.attribute.FileTime lastAccessTime();
+    method public java.nio.file.attribute.FileTime lastModifiedTime();
+    method public long size();
+  }
+
+  public interface DosFileAttributeView extends java.nio.file.attribute.BasicFileAttributeView {
+    method public java.nio.file.attribute.DosFileAttributes readAttributes() throws java.io.IOException;
+    method public void setArchive(boolean) throws java.io.IOException;
+    method public void setHidden(boolean) throws java.io.IOException;
+    method public void setReadOnly(boolean) throws java.io.IOException;
+    method public void setSystem(boolean) throws java.io.IOException;
+  }
+
+  public interface DosFileAttributes extends java.nio.file.attribute.BasicFileAttributes {
+    method public boolean isArchive();
+    method public boolean isHidden();
+    method public boolean isReadOnly();
+    method public boolean isSystem();
+  }
+
+  public interface FileAttribute<T> {
+    method public String name();
+    method public T value();
+  }
+
+  public interface FileAttributeView extends java.nio.file.attribute.AttributeView {
+  }
+
+  public interface FileOwnerAttributeView extends java.nio.file.attribute.FileAttributeView {
+    method public java.nio.file.attribute.UserPrincipal getOwner() throws java.io.IOException;
+    method public void setOwner(java.nio.file.attribute.UserPrincipal) throws java.io.IOException;
+  }
+
+  public interface FileStoreAttributeView extends java.nio.file.attribute.AttributeView {
+  }
+
+  public final class FileTime implements java.lang.Comparable<java.nio.file.attribute.FileTime> {
+    method public int compareTo(java.nio.file.attribute.FileTime);
+    method public static java.nio.file.attribute.FileTime from(long, java.util.concurrent.TimeUnit);
+    method public static java.nio.file.attribute.FileTime from(java.time.Instant);
+    method public static java.nio.file.attribute.FileTime fromMillis(long);
+    method public long to(java.util.concurrent.TimeUnit);
+    method public java.time.Instant toInstant();
+    method public long toMillis();
+  }
+
+  public interface GroupPrincipal extends java.nio.file.attribute.UserPrincipal {
+  }
+
+  public interface PosixFileAttributeView extends java.nio.file.attribute.BasicFileAttributeView java.nio.file.attribute.FileOwnerAttributeView {
+    method public java.nio.file.attribute.PosixFileAttributes readAttributes() throws java.io.IOException;
+    method public void setGroup(java.nio.file.attribute.GroupPrincipal) throws java.io.IOException;
+    method public void setPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException;
+  }
+
+  public interface PosixFileAttributes extends java.nio.file.attribute.BasicFileAttributes {
+    method public java.nio.file.attribute.GroupPrincipal group();
+    method public java.nio.file.attribute.UserPrincipal owner();
+    method public java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions();
+  }
+
+  public enum PosixFilePermission {
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_WRITE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_EXECUTE;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_READ;
+    enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_WRITE;
+  }
+
+  public final class PosixFilePermissions {
+    method public static java.nio.file.attribute.FileAttribute<java.util.Set<java.nio.file.attribute.PosixFilePermission>> asFileAttribute(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+    method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> fromString(String);
+    method public static String toString(java.util.Set<java.nio.file.attribute.PosixFilePermission>);
+  }
+
+  public interface UserDefinedFileAttributeView extends java.nio.file.attribute.FileAttributeView {
+    method public void delete(String) throws java.io.IOException;
+    method public java.util.List<java.lang.String> list() throws java.io.IOException;
+    method public int read(String, java.nio.ByteBuffer) throws java.io.IOException;
+    method public int size(String) throws java.io.IOException;
+    method public int write(String, java.nio.ByteBuffer) throws java.io.IOException;
+  }
+
+  public interface UserPrincipal extends java.security.Principal {
+  }
+
+  public abstract class UserPrincipalLookupService {
+    ctor protected UserPrincipalLookupService();
+    method public abstract java.nio.file.attribute.GroupPrincipal lookupPrincipalByGroupName(String) throws java.io.IOException;
+    method public abstract java.nio.file.attribute.UserPrincipal lookupPrincipalByName(String) throws java.io.IOException;
+  }
+
+  public class UserPrincipalNotFoundException extends java.io.IOException {
+    ctor public UserPrincipalNotFoundException(String);
+    method public String getName();
+  }
+
+}
+
+package java.nio.file.spi {
+
+  public abstract class FileSystemProvider {
+    ctor protected FileSystemProvider();
+    method public abstract void checkAccess(java.nio.file.Path, java.nio.file.AccessMode...) throws java.io.IOException;
+    method public abstract void copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public abstract void createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public void createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public void createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract void delete(java.nio.file.Path) throws java.io.IOException;
+    method public boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
+    method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, Class<V>, java.nio.file.LinkOption...);
+    method public abstract java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem getFileSystem(java.net.URI);
+    method public abstract java.nio.file.Path getPath(java.net.URI);
+    method public abstract String getScheme();
+    method public static java.util.List<java.nio.file.spi.FileSystemProvider> installedProviders();
+    method public abstract boolean isHidden(java.nio.file.Path) throws java.io.IOException;
+    method public abstract boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException;
+    method public abstract void move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException;
+    method public java.nio.channels.AsynchronousFileChannel newAsynchronousFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException;
+    method public java.nio.channels.FileChannel newFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
+    method public abstract java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String,?>) throws java.io.IOException;
+    method public java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.util.Map<java.lang.String,?>) throws java.io.IOException;
+    method public java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
+    method public abstract <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public abstract java.util.Map<java.lang.String,java.lang.Object> readAttributes(java.nio.file.Path, String, java.nio.file.LinkOption...) throws java.io.IOException;
+    method public java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
+    method public abstract void setAttribute(java.nio.file.Path, String, Object, java.nio.file.LinkOption...) throws java.io.IOException;
+  }
+
+  public abstract class FileTypeDetector {
+    ctor protected FileTypeDetector();
+    method public abstract String probeContentType(java.nio.file.Path) throws java.io.IOException;
+  }
+
+}
+
+package java.security {
+
+  public final class AccessControlContext {
+    ctor public AccessControlContext(java.security.ProtectionDomain[]);
+    ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner);
+    method public void checkPermission(java.security.Permission) throws java.security.AccessControlException;
+    method public java.security.DomainCombiner getDomainCombiner();
+  }
+
+  public class AccessControlException extends java.lang.SecurityException {
+    ctor public AccessControlException(String);
+    ctor public AccessControlException(String, java.security.Permission);
+    method public java.security.Permission getPermission();
+  }
+
+  public final class AccessController {
+    method public static void checkPermission(java.security.Permission) throws java.security.AccessControlException;
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static java.security.AccessControlContext getContext();
+  }
+
+  public interface AlgorithmConstraints {
+    method public boolean permits(java.util.Set<java.security.CryptoPrimitive>, String, java.security.AlgorithmParameters);
+    method public boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.security.Key);
+    method public boolean permits(java.util.Set<java.security.CryptoPrimitive>, String, java.security.Key, java.security.AlgorithmParameters);
+  }
+
+  public class AlgorithmParameterGenerator {
+    ctor protected AlgorithmParameterGenerator(java.security.AlgorithmParameterGeneratorSpi, java.security.Provider, String);
+    method public final java.security.AlgorithmParameters generateParameters();
+    method public final String getAlgorithm();
+    method public static java.security.AlgorithmParameterGenerator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.AlgorithmParameterGenerator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.AlgorithmParameterGenerator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final void init(int);
+    method public final void init(int, java.security.SecureRandom);
+    method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class AlgorithmParameterGeneratorSpi {
+    ctor public AlgorithmParameterGeneratorSpi();
+    method protected abstract java.security.AlgorithmParameters engineGenerateParameters();
+    method protected abstract void engineInit(int, java.security.SecureRandom);
+    method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class AlgorithmParameters {
+    ctor protected AlgorithmParameters(java.security.AlgorithmParametersSpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public final byte[] getEncoded() throws java.io.IOException;
+    method public final byte[] getEncoded(String) throws java.io.IOException;
+    method public static java.security.AlgorithmParameters getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.AlgorithmParameters getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.AlgorithmParameters getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final <T extends java.security.spec.AlgorithmParameterSpec> T getParameterSpec(Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
+    method public final void init(byte[]) throws java.io.IOException;
+    method public final void init(byte[], String) throws java.io.IOException;
+    method public final String toString();
+  }
+
+  public abstract class AlgorithmParametersSpi {
+    ctor public AlgorithmParametersSpi();
+    method protected abstract byte[] engineGetEncoded() throws java.io.IOException;
+    method protected abstract byte[] engineGetEncoded(String) throws java.io.IOException;
+    method protected abstract <T extends java.security.spec.AlgorithmParameterSpec> T engineGetParameterSpec(Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
+    method protected abstract void engineInit(byte[]) throws java.io.IOException;
+    method protected abstract void engineInit(byte[], String) throws java.io.IOException;
+    method protected abstract String engineToString();
+  }
+
+  public final class AllPermission extends java.security.Permission {
+    ctor public AllPermission();
+    ctor public AllPermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public abstract class AuthProvider extends java.security.Provider {
+    ctor protected AuthProvider(String, double, String);
+    method public abstract void login(javax.security.auth.Subject, javax.security.auth.callback.CallbackHandler) throws javax.security.auth.login.LoginException;
+    method public abstract void logout() throws javax.security.auth.login.LoginException;
+    method public abstract void setCallbackHandler(javax.security.auth.callback.CallbackHandler);
+  }
+
+  public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable {
+    ctor public BasicPermission(String);
+    ctor public BasicPermission(String, String);
+    method public String getActions();
+    method public boolean implies(java.security.Permission);
+  }
+
+  @Deprecated public interface Certificate {
+    method @Deprecated public void decode(java.io.InputStream) throws java.io.IOException, java.security.KeyException;
+    method @Deprecated public void encode(java.io.OutputStream) throws java.io.IOException, java.security.KeyException;
+    method @Deprecated public String getFormat();
+    method @Deprecated public java.security.Principal getGuarantor();
+    method @Deprecated public java.security.Principal getPrincipal();
+    method @Deprecated public java.security.PublicKey getPublicKey();
+    method @Deprecated public String toString(boolean);
+  }
+
+  public final class CodeSigner implements java.io.Serializable {
+    ctor public CodeSigner(java.security.cert.CertPath, java.security.Timestamp);
+    method public java.security.cert.CertPath getSignerCertPath();
+    method public java.security.Timestamp getTimestamp();
+  }
+
+  public class CodeSource implements java.io.Serializable {
+    ctor public CodeSource(java.net.URL, java.security.cert.Certificate[]);
+    ctor public CodeSource(java.net.URL, java.security.CodeSigner[]);
+    method public final java.security.cert.Certificate[] getCertificates();
+    method public final java.security.CodeSigner[] getCodeSigners();
+    method public final java.net.URL getLocation();
+    method public boolean implies(java.security.CodeSource);
+  }
+
+  public enum CryptoPrimitive {
+    enum_constant public static final java.security.CryptoPrimitive BLOCK_CIPHER;
+    enum_constant public static final java.security.CryptoPrimitive KEY_AGREEMENT;
+    enum_constant public static final java.security.CryptoPrimitive KEY_ENCAPSULATION;
+    enum_constant public static final java.security.CryptoPrimitive KEY_WRAP;
+    enum_constant public static final java.security.CryptoPrimitive MAC;
+    enum_constant public static final java.security.CryptoPrimitive MESSAGE_DIGEST;
+    enum_constant public static final java.security.CryptoPrimitive PUBLIC_KEY_ENCRYPTION;
+    enum_constant public static final java.security.CryptoPrimitive SECURE_RANDOM;
+    enum_constant public static final java.security.CryptoPrimitive SIGNATURE;
+    enum_constant public static final java.security.CryptoPrimitive STREAM_CIPHER;
+  }
+
+  public class DigestException extends java.security.GeneralSecurityException {
+    ctor public DigestException();
+    ctor public DigestException(String);
+    ctor public DigestException(String, Throwable);
+    ctor public DigestException(Throwable);
+  }
+
+  public class DigestInputStream extends java.io.FilterInputStream {
+    ctor public DigestInputStream(java.io.InputStream, java.security.MessageDigest);
+    method public java.security.MessageDigest getMessageDigest();
+    method public void on(boolean);
+    method public void setMessageDigest(java.security.MessageDigest);
+    field protected java.security.MessageDigest digest;
+  }
+
+  public class DigestOutputStream extends java.io.FilterOutputStream {
+    ctor public DigestOutputStream(java.io.OutputStream, java.security.MessageDigest);
+    method public java.security.MessageDigest getMessageDigest();
+    method public void on(boolean);
+    method public void setMessageDigest(java.security.MessageDigest);
+    field protected java.security.MessageDigest digest;
+  }
+
+  public interface DomainCombiner {
+    method public java.security.ProtectionDomain[] combine(java.security.ProtectionDomain[], java.security.ProtectionDomain[]);
+  }
+
+  public final class DomainLoadStoreParameter implements java.security.KeyStore.LoadStoreParameter {
+    ctor public DomainLoadStoreParameter(java.net.URI, java.util.Map<java.lang.String,java.security.KeyStore.ProtectionParameter>);
+    method public java.net.URI getConfiguration();
+    method public java.security.KeyStore.ProtectionParameter getProtectionParameter();
+    method public java.util.Map<java.lang.String,java.security.KeyStore.ProtectionParameter> getProtectionParams();
+  }
+
+  public class GeneralSecurityException extends java.lang.Exception {
+    ctor public GeneralSecurityException();
+    ctor public GeneralSecurityException(String);
+    ctor public GeneralSecurityException(String, Throwable);
+    ctor public GeneralSecurityException(Throwable);
+  }
+
+  public interface Guard {
+    method public void checkGuard(Object) throws java.lang.SecurityException;
+  }
+
+  public class GuardedObject implements java.io.Serializable {
+    ctor public GuardedObject(Object, java.security.Guard);
+    method public Object getObject() throws java.lang.SecurityException;
+  }
+
+  @Deprecated public abstract class Identity implements java.security.Principal java.io.Serializable {
+    ctor @Deprecated protected Identity();
+    ctor @Deprecated public Identity(String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    ctor @Deprecated public Identity(String);
+    method @Deprecated public void addCertificate(java.security.Certificate) throws java.security.KeyManagementException;
+    method @Deprecated public java.security.Certificate[] certificates();
+    method @Deprecated public final boolean equals(Object);
+    method @Deprecated public String getInfo();
+    method @Deprecated public final String getName();
+    method @Deprecated public java.security.PublicKey getPublicKey();
+    method @Deprecated public final java.security.IdentityScope getScope();
+    method @Deprecated protected boolean identityEquals(java.security.Identity);
+    method @Deprecated public void removeCertificate(java.security.Certificate) throws java.security.KeyManagementException;
+    method @Deprecated public void setInfo(String);
+    method @Deprecated public void setPublicKey(java.security.PublicKey) throws java.security.KeyManagementException;
+    method @Deprecated public String toString(boolean);
+  }
+
+  @Deprecated public abstract class IdentityScope extends java.security.Identity {
+    ctor @Deprecated protected IdentityScope();
+    ctor @Deprecated public IdentityScope(String);
+    ctor @Deprecated public IdentityScope(String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    method @Deprecated public abstract void addIdentity(java.security.Identity) throws java.security.KeyManagementException;
+    method @Deprecated public abstract java.security.Identity getIdentity(String);
+    method @Deprecated public java.security.Identity getIdentity(java.security.Principal);
+    method @Deprecated public abstract java.security.Identity getIdentity(java.security.PublicKey);
+    method @Deprecated public static java.security.IdentityScope getSystemScope();
+    method @Deprecated public abstract java.util.Enumeration<java.security.Identity> identities();
+    method @Deprecated public abstract void removeIdentity(java.security.Identity) throws java.security.KeyManagementException;
+    method @Deprecated protected static void setSystemScope(java.security.IdentityScope);
+    method @Deprecated public abstract int size();
+  }
+
+  public class InvalidAlgorithmParameterException extends java.security.GeneralSecurityException {
+    ctor public InvalidAlgorithmParameterException();
+    ctor public InvalidAlgorithmParameterException(String);
+    ctor public InvalidAlgorithmParameterException(String, Throwable);
+    ctor public InvalidAlgorithmParameterException(Throwable);
+  }
+
+  public class InvalidKeyException extends java.security.KeyException {
+    ctor public InvalidKeyException();
+    ctor public InvalidKeyException(String);
+    ctor public InvalidKeyException(String, Throwable);
+    ctor public InvalidKeyException(Throwable);
+  }
+
+  public class InvalidParameterException extends java.lang.IllegalArgumentException {
+    ctor public InvalidParameterException();
+    ctor public InvalidParameterException(String);
+  }
+
+  public interface Key extends java.io.Serializable {
+    method public String getAlgorithm();
+    method public byte[] getEncoded();
+    method public String getFormat();
+    field public static final long serialVersionUID = 6603384152749567654L; // 0x5ba3eee69414eea6L
+  }
+
+  public class KeyException extends java.security.GeneralSecurityException {
+    ctor public KeyException();
+    ctor public KeyException(String);
+    ctor public KeyException(String, Throwable);
+    ctor public KeyException(Throwable);
+  }
+
+  public class KeyFactory {
+    ctor protected KeyFactory(java.security.KeyFactorySpi, java.security.Provider, String);
+    method public final java.security.PrivateKey generatePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method public final java.security.PublicKey generatePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method public final String getAlgorithm();
+    method public static java.security.KeyFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.KeyFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.KeyFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final <T extends java.security.spec.KeySpec> T getKeySpec(java.security.Key, Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method public final java.security.Provider getProvider();
+    method public final java.security.Key translateKey(java.security.Key) throws java.security.InvalidKeyException;
+  }
+
+  public abstract class KeyFactorySpi {
+    ctor public KeyFactorySpi();
+    method protected abstract java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract <T extends java.security.spec.KeySpec> T engineGetKeySpec(java.security.Key, Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract java.security.Key engineTranslateKey(java.security.Key) throws java.security.InvalidKeyException;
+  }
+
+  public class KeyManagementException extends java.security.KeyException {
+    ctor public KeyManagementException();
+    ctor public KeyManagementException(String);
+    ctor public KeyManagementException(String, Throwable);
+    ctor public KeyManagementException(Throwable);
+  }
+
+  public final class KeyPair implements java.io.Serializable {
+    ctor public KeyPair(java.security.PublicKey, java.security.PrivateKey);
+    method public java.security.PrivateKey getPrivate();
+    method public java.security.PublicKey getPublic();
+  }
+
+  public abstract class KeyPairGenerator extends java.security.KeyPairGeneratorSpi {
+    ctor protected KeyPairGenerator(String);
+    method public final java.security.KeyPair genKeyPair();
+    method public java.security.KeyPair generateKeyPair();
+    method public String getAlgorithm();
+    method public static java.security.KeyPairGenerator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.KeyPairGenerator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.KeyPairGenerator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public void initialize(int);
+    method public void initialize(int, java.security.SecureRandom);
+    method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class KeyPairGeneratorSpi {
+    ctor public KeyPairGeneratorSpi();
+    method public abstract java.security.KeyPair generateKeyPair();
+    method public abstract void initialize(int, java.security.SecureRandom);
+    method public void initialize(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class KeyRep implements java.io.Serializable {
+    ctor public KeyRep(java.security.KeyRep.Type, String, String, byte[]);
+    method protected Object readResolve() throws java.io.ObjectStreamException;
+  }
+
+  public enum KeyRep.Type {
+    enum_constant public static final java.security.KeyRep.Type PRIVATE;
+    enum_constant public static final java.security.KeyRep.Type PUBLIC;
+    enum_constant public static final java.security.KeyRep.Type SECRET;
+  }
+
+  public class KeyStore {
+    ctor protected KeyStore(java.security.KeyStoreSpi, java.security.Provider, String);
+    method public final java.util.Enumeration<java.lang.String> aliases() throws java.security.KeyStoreException;
+    method public final boolean containsAlias(String) throws java.security.KeyStoreException;
+    method public final void deleteEntry(String) throws java.security.KeyStoreException;
+    method public final boolean entryInstanceOf(String, Class<? extends java.security.KeyStore.Entry>) throws java.security.KeyStoreException;
+    method public final java.security.cert.Certificate getCertificate(String) throws java.security.KeyStoreException;
+    method public final String getCertificateAlias(java.security.cert.Certificate) throws java.security.KeyStoreException;
+    method public final java.security.cert.Certificate[] getCertificateChain(String) throws java.security.KeyStoreException;
+    method public final java.util.Date getCreationDate(String) throws java.security.KeyStoreException;
+    method public static final String getDefaultType();
+    method public final java.security.KeyStore.Entry getEntry(String, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableEntryException;
+    method public static java.security.KeyStore getInstance(String) throws java.security.KeyStoreException;
+    method public static java.security.KeyStore getInstance(String, String) throws java.security.KeyStoreException, java.security.NoSuchProviderException;
+    method public static java.security.KeyStore getInstance(String, java.security.Provider) throws java.security.KeyStoreException;
+    method public final java.security.Key getKey(String, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+    method public final boolean isCertificateEntry(String) throws java.security.KeyStoreException;
+    method public final boolean isKeyEntry(String) throws java.security.KeyStoreException;
+    method public final void load(java.io.InputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public final void load(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public final void setCertificateEntry(String, java.security.cert.Certificate) throws java.security.KeyStoreException;
+    method public final void setEntry(String, java.security.KeyStore.Entry, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException;
+    method public final void setKeyEntry(String, java.security.Key, char[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public final void setKeyEntry(String, byte[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public final int size() throws java.security.KeyStoreException;
+    method public final void store(java.io.OutputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException;
+    method public final void store(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.KeyStoreException, java.security.NoSuchAlgorithmException;
+  }
+
+  public abstract static class KeyStore.Builder {
+    ctor protected KeyStore.Builder();
+    method public abstract java.security.KeyStore getKeyStore() throws java.security.KeyStoreException;
+    method public abstract java.security.KeyStore.ProtectionParameter getProtectionParameter(String) throws java.security.KeyStoreException;
+    method public static java.security.KeyStore.Builder newInstance(java.security.KeyStore, java.security.KeyStore.ProtectionParameter);
+    method public static java.security.KeyStore.Builder newInstance(String, java.security.Provider, java.io.File, java.security.KeyStore.ProtectionParameter);
+    method public static java.security.KeyStore.Builder newInstance(String, java.security.Provider, java.security.KeyStore.ProtectionParameter);
+  }
+
+  public static class KeyStore.CallbackHandlerProtection implements java.security.KeyStore.ProtectionParameter {
+    ctor public KeyStore.CallbackHandlerProtection(javax.security.auth.callback.CallbackHandler);
+    method public javax.security.auth.callback.CallbackHandler getCallbackHandler();
+  }
+
+  public static interface KeyStore.Entry {
+    method public default java.util.Set<java.security.KeyStore.Entry.Attribute> getAttributes();
+  }
+
+  public static interface KeyStore.Entry.Attribute {
+    method public String getName();
+    method public String getValue();
+  }
+
+  public static interface KeyStore.LoadStoreParameter {
+    method public java.security.KeyStore.ProtectionParameter getProtectionParameter();
+  }
+
+  public static class KeyStore.PasswordProtection implements javax.security.auth.Destroyable java.security.KeyStore.ProtectionParameter {
+    ctor public KeyStore.PasswordProtection(char[]);
+    ctor public KeyStore.PasswordProtection(char[], String, java.security.spec.AlgorithmParameterSpec);
+    method public char[] getPassword();
+    method public String getProtectionAlgorithm();
+    method public java.security.spec.AlgorithmParameterSpec getProtectionParameters();
+  }
+
+  public static final class KeyStore.PrivateKeyEntry implements java.security.KeyStore.Entry {
+    ctor public KeyStore.PrivateKeyEntry(java.security.PrivateKey, java.security.cert.Certificate[]);
+    ctor public KeyStore.PrivateKeyEntry(java.security.PrivateKey, java.security.cert.Certificate[], java.util.Set<java.security.KeyStore.Entry.Attribute>);
+    method public java.security.cert.Certificate getCertificate();
+    method public java.security.cert.Certificate[] getCertificateChain();
+    method public java.security.PrivateKey getPrivateKey();
+  }
+
+  public static interface KeyStore.ProtectionParameter {
+  }
+
+  public static final class KeyStore.SecretKeyEntry implements java.security.KeyStore.Entry {
+    ctor public KeyStore.SecretKeyEntry(javax.crypto.SecretKey);
+    ctor public KeyStore.SecretKeyEntry(javax.crypto.SecretKey, java.util.Set<java.security.KeyStore.Entry.Attribute>);
+    method public javax.crypto.SecretKey getSecretKey();
+  }
+
+  public static final class KeyStore.TrustedCertificateEntry implements java.security.KeyStore.Entry {
+    ctor public KeyStore.TrustedCertificateEntry(java.security.cert.Certificate);
+    ctor public KeyStore.TrustedCertificateEntry(java.security.cert.Certificate, java.util.Set<java.security.KeyStore.Entry.Attribute>);
+    method public java.security.cert.Certificate getTrustedCertificate();
+  }
+
+  public class KeyStoreException extends java.security.GeneralSecurityException {
+    ctor public KeyStoreException();
+    ctor public KeyStoreException(String);
+    ctor public KeyStoreException(String, Throwable);
+    ctor public KeyStoreException(Throwable);
+  }
+
+  public abstract class KeyStoreSpi {
+    ctor public KeyStoreSpi();
+    method public abstract java.util.Enumeration<java.lang.String> engineAliases();
+    method public abstract boolean engineContainsAlias(String);
+    method public abstract void engineDeleteEntry(String) throws java.security.KeyStoreException;
+    method public boolean engineEntryInstanceOf(String, Class<? extends java.security.KeyStore.Entry>);
+    method public abstract java.security.cert.Certificate engineGetCertificate(String);
+    method public abstract String engineGetCertificateAlias(java.security.cert.Certificate);
+    method public abstract java.security.cert.Certificate[] engineGetCertificateChain(String);
+    method public abstract java.util.Date engineGetCreationDate(String);
+    method public java.security.KeyStore.Entry engineGetEntry(String, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableEntryException;
+    method public abstract java.security.Key engineGetKey(String, char[]) throws java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method public abstract boolean engineIsCertificateEntry(String);
+    method public abstract boolean engineIsKeyEntry(String);
+    method public abstract void engineLoad(java.io.InputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public void engineLoad(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public abstract void engineSetCertificateEntry(String, java.security.cert.Certificate) throws java.security.KeyStoreException;
+    method public void engineSetEntry(String, java.security.KeyStore.Entry, java.security.KeyStore.ProtectionParameter) throws java.security.KeyStoreException;
+    method public abstract void engineSetKeyEntry(String, java.security.Key, char[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public abstract void engineSetKeyEntry(String, byte[], java.security.cert.Certificate[]) throws java.security.KeyStoreException;
+    method public abstract int engineSize();
+    method public abstract void engineStore(java.io.OutputStream, char[]) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+    method public void engineStore(java.security.KeyStore.LoadStoreParameter) throws java.security.cert.CertificateException, java.io.IOException, java.security.NoSuchAlgorithmException;
+  }
+
+  public abstract class MessageDigest extends java.security.MessageDigestSpi {
+    ctor protected MessageDigest(@NonNull String);
+    method @NonNull public byte[] digest();
+    method public int digest(@NonNull byte[], int, int) throws java.security.DigestException;
+    method @NonNull public byte[] digest(@NonNull byte[]);
+    method @NonNull public final String getAlgorithm();
+    method public final int getDigestLength();
+    method @NonNull public static java.security.MessageDigest getInstance(@NonNull String) throws java.security.NoSuchAlgorithmException;
+    method @NonNull public static java.security.MessageDigest getInstance(@NonNull String, @NonNull String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method @NonNull public static java.security.MessageDigest getInstance(@NonNull String, @NonNull java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method @NonNull public final java.security.Provider getProvider();
+    method public static boolean isEqual(@Nullable byte[], @Nullable byte[]);
+    method public void reset();
+    method public void update(byte);
+    method public void update(@NonNull byte[], int, int);
+    method public void update(@NonNull byte[]);
+    method public final void update(@NonNull java.nio.ByteBuffer);
+  }
+
+  public abstract class MessageDigestSpi {
+    ctor public MessageDigestSpi();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method protected abstract byte[] engineDigest();
+    method protected int engineDigest(byte[], int, int) throws java.security.DigestException;
+    method protected int engineGetDigestLength();
+    method protected abstract void engineReset();
+    method protected abstract void engineUpdate(byte);
+    method protected abstract void engineUpdate(byte[], int, int);
+    method protected void engineUpdate(java.nio.ByteBuffer);
+  }
+
+  public class NoSuchAlgorithmException extends java.security.GeneralSecurityException {
+    ctor public NoSuchAlgorithmException();
+    ctor public NoSuchAlgorithmException(String);
+    ctor public NoSuchAlgorithmException(String, Throwable);
+    ctor public NoSuchAlgorithmException(Throwable);
+  }
+
+  public class NoSuchProviderException extends java.security.GeneralSecurityException {
+    ctor public NoSuchProviderException();
+    ctor public NoSuchProviderException(String);
+  }
+
+  public final class PKCS12Attribute implements java.security.KeyStore.Entry.Attribute {
+    ctor public PKCS12Attribute(String, String);
+    ctor public PKCS12Attribute(byte[]);
+    method public byte[] getEncoded();
+    method public String getName();
+    method public String getValue();
+  }
+
+  public abstract class Permission implements java.security.Guard java.io.Serializable {
+    ctor public Permission(String);
+    method public void checkGuard(Object) throws java.lang.SecurityException;
+    method public abstract String getActions();
+    method public final String getName();
+    method public abstract boolean implies(java.security.Permission);
+    method public java.security.PermissionCollection newPermissionCollection();
+  }
+
+  public abstract class PermissionCollection implements java.io.Serializable {
+    ctor public PermissionCollection();
+    method public abstract void add(java.security.Permission);
+    method public abstract java.util.Enumeration<java.security.Permission> elements();
+    method public abstract boolean implies(java.security.Permission);
+    method public boolean isReadOnly();
+    method public void setReadOnly();
+  }
+
+  public final class Permissions extends java.security.PermissionCollection implements java.io.Serializable {
+    ctor public Permissions();
+    method public void add(java.security.Permission);
+    method public java.util.Enumeration<java.security.Permission> elements();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public abstract class Policy {
+    ctor public Policy();
+    method public static java.security.Policy getInstance(String, java.security.Policy.Parameters) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.Policy getInstance(String, java.security.Policy.Parameters, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.Policy getInstance(String, java.security.Policy.Parameters, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public java.security.Policy.Parameters getParameters();
+    method public java.security.PermissionCollection getPermissions(java.security.CodeSource);
+    method public java.security.PermissionCollection getPermissions(java.security.ProtectionDomain);
+    method public static java.security.Policy getPolicy();
+    method public java.security.Provider getProvider();
+    method public String getType();
+    method public boolean implies(java.security.ProtectionDomain, java.security.Permission);
+    method public void refresh();
+    method public static void setPolicy(java.security.Policy);
+    field public static final java.security.PermissionCollection UNSUPPORTED_EMPTY_COLLECTION;
+  }
+
+  public static interface Policy.Parameters {
+  }
+
+  public abstract class PolicySpi {
+    ctor public PolicySpi();
+    method protected java.security.PermissionCollection engineGetPermissions(java.security.CodeSource);
+    method protected java.security.PermissionCollection engineGetPermissions(java.security.ProtectionDomain);
+    method protected abstract boolean engineImplies(java.security.ProtectionDomain, java.security.Permission);
+    method protected void engineRefresh();
+  }
+
+  public interface Principal {
+    method public boolean equals(Object);
+    method public String getName();
+    method public int hashCode();
+    method public default boolean implies(javax.security.auth.Subject);
+    method public String toString();
+  }
+
+  public interface PrivateKey extends java.security.Key javax.security.auth.Destroyable {
+    field public static final long serialVersionUID = 6034044314589513430L; // 0x53bd3b559a12c6d6L
+  }
+
+  public interface PrivilegedAction<T> {
+    method public T run();
+  }
+
+  public class PrivilegedActionException extends java.lang.Exception {
+    ctor public PrivilegedActionException(Exception);
+    method public Exception getException();
+  }
+
+  public interface PrivilegedExceptionAction<T> {
+    method public T run() throws java.lang.Exception;
+  }
+
+  public class ProtectionDomain {
+    ctor public ProtectionDomain(java.security.CodeSource, java.security.PermissionCollection);
+    ctor public ProtectionDomain(java.security.CodeSource, java.security.PermissionCollection, ClassLoader, java.security.Principal[]);
+    method public final ClassLoader getClassLoader();
+    method public final java.security.CodeSource getCodeSource();
+    method public final java.security.PermissionCollection getPermissions();
+    method public final java.security.Principal[] getPrincipals();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public abstract class Provider extends java.util.Properties {
+    ctor protected Provider(String, double, String);
+    method public Object compute(Object, java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public Object computeIfAbsent(Object, java.util.function.Function<? super java.lang.Object,?>);
+    method public Object computeIfPresent(Object, java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public java.util.Enumeration<java.lang.Object> elements();
+    method public java.util.Set<java.util.Map.Entry<java.lang.Object,java.lang.Object>> entrySet();
+    method public void forEach(java.util.function.BiConsumer<? super java.lang.Object,? super java.lang.Object>);
+    method public Object get(Object);
+    method public String getInfo();
+    method public String getName();
+    method public Object getOrDefault(Object, Object);
+    method public java.security.Provider.Service getService(String, String);
+    method public java.util.Set<java.security.Provider.Service> getServices();
+    method public double getVersion();
+    method public java.util.Set<java.lang.Object> keySet();
+    method public java.util.Enumeration<java.lang.Object> keys();
+    method public Object merge(Object, Object, java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public Object put(Object, Object);
+    method public void putAll(java.util.Map<?,?>);
+    method public Object putIfAbsent(Object, Object);
+    method protected void putService(java.security.Provider.Service);
+    method public Object remove(Object);
+    method protected void removeService(java.security.Provider.Service);
+    method public boolean replace(Object, Object, Object);
+    method public Object replace(Object, Object);
+    method public void replaceAll(java.util.function.BiFunction<? super java.lang.Object,? super java.lang.Object,?>);
+    method public java.util.Collection<java.lang.Object> values();
+  }
+
+  public static class Provider.Service {
+    ctor public Provider.Service(java.security.Provider, String, String, String, java.util.List<java.lang.String>, java.util.Map<java.lang.String,java.lang.String>);
+    method public final String getAlgorithm();
+    method public final String getAttribute(String);
+    method public final String getClassName();
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+    method public Object newInstance(Object) throws java.security.NoSuchAlgorithmException;
+    method public boolean supportsParameter(Object);
+  }
+
+  public class ProviderException extends java.lang.RuntimeException {
+    ctor public ProviderException();
+    ctor public ProviderException(String);
+    ctor public ProviderException(String, Throwable);
+    ctor public ProviderException(Throwable);
+  }
+
+  public interface PublicKey extends java.security.Key {
+    field public static final long serialVersionUID = 7187392471159151072L; // 0x63bebf5f40c219e0L
+  }
+
+  public class SecureClassLoader extends java.lang.ClassLoader {
+    ctor protected SecureClassLoader(ClassLoader);
+    ctor protected SecureClassLoader();
+    method protected final Class<?> defineClass(String, byte[], int, int, java.security.CodeSource);
+    method protected final Class<?> defineClass(String, java.nio.ByteBuffer, java.security.CodeSource);
+    method protected java.security.PermissionCollection getPermissions(java.security.CodeSource);
+  }
+
+  public class SecureRandom extends java.util.Random {
+    ctor public SecureRandom();
+    ctor public SecureRandom(byte[]);
+    ctor protected SecureRandom(java.security.SecureRandomSpi, java.security.Provider);
+    method public byte[] generateSeed(int);
+    method public String getAlgorithm();
+    method public static java.security.SecureRandom getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.SecureRandom getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.SecureRandom getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.SecureRandom getInstanceStrong() throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public static byte[] getSeed(int);
+    method protected final int next(int);
+    method public void setSeed(byte[]);
+  }
+
+  public abstract class SecureRandomSpi implements java.io.Serializable {
+    ctor public SecureRandomSpi();
+    method protected abstract byte[] engineGenerateSeed(int);
+    method protected abstract void engineNextBytes(byte[]);
+    method protected abstract void engineSetSeed(byte[]);
+  }
+
+  public final class Security {
+    method public static int addProvider(java.security.Provider);
+    method @Deprecated public static String getAlgorithmProperty(String, String);
+    method public static java.util.Set<java.lang.String> getAlgorithms(String);
+    method public static String getProperty(String);
+    method public static java.security.Provider getProvider(String);
+    method public static java.security.Provider[] getProviders();
+    method public static java.security.Provider[] getProviders(String);
+    method public static java.security.Provider[] getProviders(java.util.Map<java.lang.String,java.lang.String>);
+    method public static int insertProviderAt(java.security.Provider, int);
+    method public static void removeProvider(String);
+    method public static void setProperty(String, String);
+  }
+
+  public final class SecurityPermission extends java.security.BasicPermission {
+    ctor public SecurityPermission(String);
+    ctor public SecurityPermission(String, String);
+  }
+
+  public abstract class Signature extends java.security.SignatureSpi {
+    ctor protected Signature(String);
+    method public final String getAlgorithm();
+    method public static java.security.Signature getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.Signature getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.Signature getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method @Deprecated public final Object getParameter(String) throws java.security.InvalidParameterException;
+    method public final java.security.AlgorithmParameters getParameters();
+    method public final java.security.Provider getProvider();
+    method public final void initSign(java.security.PrivateKey) throws java.security.InvalidKeyException;
+    method public final void initSign(java.security.PrivateKey, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final void initVerify(java.security.PublicKey) throws java.security.InvalidKeyException;
+    method public final void initVerify(java.security.cert.Certificate) throws java.security.InvalidKeyException;
+    method @Deprecated public final void setParameter(String, Object) throws java.security.InvalidParameterException;
+    method public final void setParameter(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method public final byte[] sign() throws java.security.SignatureException;
+    method public final int sign(byte[], int, int) throws java.security.SignatureException;
+    method public final void update(byte) throws java.security.SignatureException;
+    method public final void update(byte[]) throws java.security.SignatureException;
+    method public final void update(byte[], int, int) throws java.security.SignatureException;
+    method public final void update(java.nio.ByteBuffer) throws java.security.SignatureException;
+    method public final boolean verify(byte[]) throws java.security.SignatureException;
+    method public final boolean verify(byte[], int, int) throws java.security.SignatureException;
+    field protected static final int SIGN = 2; // 0x2
+    field protected static final int UNINITIALIZED = 0; // 0x0
+    field protected static final int VERIFY = 3; // 0x3
+    field protected int state;
+  }
+
+  public class SignatureException extends java.security.GeneralSecurityException {
+    ctor public SignatureException();
+    ctor public SignatureException(String);
+    ctor public SignatureException(String, Throwable);
+    ctor public SignatureException(Throwable);
+  }
+
+  public abstract class SignatureSpi {
+    ctor public SignatureSpi();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated protected abstract Object engineGetParameter(String) throws java.security.InvalidParameterException;
+    method protected java.security.AlgorithmParameters engineGetParameters();
+    method protected abstract void engineInitSign(java.security.PrivateKey) throws java.security.InvalidKeyException;
+    method protected void engineInitSign(java.security.PrivateKey, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method protected abstract void engineInitVerify(java.security.PublicKey) throws java.security.InvalidKeyException;
+    method @Deprecated protected abstract void engineSetParameter(String, Object) throws java.security.InvalidParameterException;
+    method protected void engineSetParameter(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method protected abstract byte[] engineSign() throws java.security.SignatureException;
+    method protected int engineSign(byte[], int, int) throws java.security.SignatureException;
+    method protected abstract void engineUpdate(byte) throws java.security.SignatureException;
+    method protected abstract void engineUpdate(byte[], int, int) throws java.security.SignatureException;
+    method protected void engineUpdate(java.nio.ByteBuffer);
+    method protected abstract boolean engineVerify(byte[]) throws java.security.SignatureException;
+    method protected boolean engineVerify(byte[], int, int) throws java.security.SignatureException;
+    field protected java.security.SecureRandom appRandom;
+  }
+
+  public final class SignedObject implements java.io.Serializable {
+    ctor public SignedObject(java.io.Serializable, java.security.PrivateKey, java.security.Signature) throws java.io.IOException, java.security.InvalidKeyException, java.security.SignatureException;
+    method public String getAlgorithm();
+    method public Object getObject() throws java.lang.ClassNotFoundException, java.io.IOException;
+    method public byte[] getSignature();
+    method public boolean verify(java.security.PublicKey, java.security.Signature) throws java.security.InvalidKeyException, java.security.SignatureException;
+  }
+
+  @Deprecated public abstract class Signer extends java.security.Identity {
+    ctor @Deprecated protected Signer();
+    ctor @Deprecated public Signer(String);
+    ctor @Deprecated public Signer(String, java.security.IdentityScope) throws java.security.KeyManagementException;
+    method @Deprecated public java.security.PrivateKey getPrivateKey();
+    method @Deprecated public final void setKeyPair(java.security.KeyPair) throws java.security.InvalidParameterException, java.security.KeyException;
+  }
+
+  public final class Timestamp implements java.io.Serializable {
+    ctor public Timestamp(java.util.Date, java.security.cert.CertPath);
+    method public java.security.cert.CertPath getSignerCertPath();
+    method public java.util.Date getTimestamp();
+  }
+
+  public class UnrecoverableEntryException extends java.security.GeneralSecurityException {
+    ctor public UnrecoverableEntryException();
+    ctor public UnrecoverableEntryException(String);
+  }
+
+  public class UnrecoverableKeyException extends java.security.UnrecoverableEntryException {
+    ctor public UnrecoverableKeyException();
+    ctor public UnrecoverableKeyException(String);
+  }
+
+  public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable {
+    ctor public UnresolvedPermission(String, String, String, java.security.cert.Certificate[]);
+    method public String getActions();
+    method public String getUnresolvedActions();
+    method public java.security.cert.Certificate[] getUnresolvedCerts();
+    method public String getUnresolvedName();
+    method public String getUnresolvedType();
+    method public boolean implies(java.security.Permission);
+  }
+
+}
+
+package java.security.acl {
+
+  public interface Acl extends java.security.acl.Owner {
+    method public boolean addEntry(java.security.Principal, java.security.acl.AclEntry) throws java.security.acl.NotOwnerException;
+    method public boolean checkPermission(java.security.Principal, java.security.acl.Permission);
+    method public java.util.Enumeration<java.security.acl.AclEntry> entries();
+    method public String getName();
+    method public java.util.Enumeration<java.security.acl.Permission> getPermissions(java.security.Principal);
+    method public boolean removeEntry(java.security.Principal, java.security.acl.AclEntry) throws java.security.acl.NotOwnerException;
+    method public void setName(java.security.Principal, String) throws java.security.acl.NotOwnerException;
+    method public String toString();
+  }
+
+  public interface AclEntry extends java.lang.Cloneable {
+    method public boolean addPermission(java.security.acl.Permission);
+    method public boolean checkPermission(java.security.acl.Permission);
+    method public Object clone();
+    method public java.security.Principal getPrincipal();
+    method public boolean isNegative();
+    method public java.util.Enumeration<java.security.acl.Permission> permissions();
+    method public boolean removePermission(java.security.acl.Permission);
+    method public void setNegativePermissions();
+    method public boolean setPrincipal(java.security.Principal);
+    method public String toString();
+  }
+
+  public class AclNotFoundException extends java.lang.Exception {
+    ctor public AclNotFoundException();
+  }
+
+  public interface Group extends java.security.Principal {
+    method public boolean addMember(java.security.Principal);
+    method public boolean isMember(java.security.Principal);
+    method public java.util.Enumeration<? extends java.security.Principal> members();
+    method public boolean removeMember(java.security.Principal);
+  }
+
+  public class LastOwnerException extends java.lang.Exception {
+    ctor public LastOwnerException();
+  }
+
+  public class NotOwnerException extends java.lang.Exception {
+    ctor public NotOwnerException();
+  }
+
+  public interface Owner {
+    method public boolean addOwner(java.security.Principal, java.security.Principal) throws java.security.acl.NotOwnerException;
+    method public boolean deleteOwner(java.security.Principal, java.security.Principal) throws java.security.acl.LastOwnerException, java.security.acl.NotOwnerException;
+    method public boolean isOwner(java.security.Principal);
+  }
+
+  public interface Permission {
+  }
+
+}
+
+package java.security.cert {
+
+  public abstract class CRL {
+    ctor protected CRL(String);
+    method public final String getType();
+    method public abstract boolean isRevoked(java.security.cert.Certificate);
+    method public abstract String toString();
+  }
+
+  public class CRLException extends java.security.GeneralSecurityException {
+    ctor public CRLException();
+    ctor public CRLException(String);
+    ctor public CRLException(String, Throwable);
+    ctor public CRLException(Throwable);
+  }
+
+  public enum CRLReason {
+    enum_constant public static final java.security.cert.CRLReason AA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason AFFILIATION_CHANGED;
+    enum_constant public static final java.security.cert.CRLReason CA_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason CERTIFICATE_HOLD;
+    enum_constant public static final java.security.cert.CRLReason CESSATION_OF_OPERATION;
+    enum_constant public static final java.security.cert.CRLReason KEY_COMPROMISE;
+    enum_constant public static final java.security.cert.CRLReason PRIVILEGE_WITHDRAWN;
+    enum_constant public static final java.security.cert.CRLReason REMOVE_FROM_CRL;
+    enum_constant public static final java.security.cert.CRLReason SUPERSEDED;
+    enum_constant public static final java.security.cert.CRLReason UNSPECIFIED;
+    enum_constant public static final java.security.cert.CRLReason UNUSED;
+  }
+
+  public interface CRLSelector extends java.lang.Cloneable {
+    method public Object clone();
+    method public boolean match(java.security.cert.CRL);
+  }
+
+  public abstract class CertPath implements java.io.Serializable {
+    ctor protected CertPath(String);
+    method public abstract java.util.List<? extends java.security.cert.Certificate> getCertificates();
+    method public abstract byte[] getEncoded() throws java.security.cert.CertificateEncodingException;
+    method public abstract byte[] getEncoded(String) throws java.security.cert.CertificateEncodingException;
+    method public abstract java.util.Iterator<java.lang.String> getEncodings();
+    method public String getType();
+    method protected Object writeReplace() throws java.io.ObjectStreamException;
+  }
+
+  protected static class CertPath.CertPathRep implements java.io.Serializable {
+    ctor protected CertPath.CertPathRep(String, byte[]);
+    method protected Object readResolve() throws java.io.ObjectStreamException;
+  }
+
+  public class CertPathBuilder {
+    ctor protected CertPathBuilder(java.security.cert.CertPathBuilderSpi, java.security.Provider, String);
+    method public final java.security.cert.CertPathBuilderResult build(java.security.cert.CertPathParameters) throws java.security.cert.CertPathBuilderException, java.security.InvalidAlgorithmParameterException;
+    method public final String getAlgorithm();
+    method public static final String getDefaultType();
+    method public static java.security.cert.CertPathBuilder getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.cert.CertPathBuilder getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.cert.CertPathBuilder getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final java.security.cert.CertPathChecker getRevocationChecker();
+  }
+
+  public class CertPathBuilderException extends java.security.GeneralSecurityException {
+    ctor public CertPathBuilderException();
+    ctor public CertPathBuilderException(String);
+    ctor public CertPathBuilderException(Throwable);
+    ctor public CertPathBuilderException(String, Throwable);
+  }
+
+  public interface CertPathBuilderResult extends java.lang.Cloneable {
+    method public Object clone();
+    method public java.security.cert.CertPath getCertPath();
+  }
+
+  public abstract class CertPathBuilderSpi {
+    ctor public CertPathBuilderSpi();
+    method public abstract java.security.cert.CertPathBuilderResult engineBuild(java.security.cert.CertPathParameters) throws java.security.cert.CertPathBuilderException, java.security.InvalidAlgorithmParameterException;
+    method public java.security.cert.CertPathChecker engineGetRevocationChecker();
+  }
+
+  public interface CertPathChecker {
+    method public void check(java.security.cert.Certificate) throws java.security.cert.CertPathValidatorException;
+    method public void init(boolean) throws java.security.cert.CertPathValidatorException;
+    method public boolean isForwardCheckingSupported();
+  }
+
+  public interface CertPathParameters extends java.lang.Cloneable {
+    method public Object clone();
+  }
+
+  public class CertPathValidator {
+    ctor protected CertPathValidator(java.security.cert.CertPathValidatorSpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public static final String getDefaultType();
+    method public static java.security.cert.CertPathValidator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static java.security.cert.CertPathValidator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.cert.CertPathValidator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final java.security.cert.CertPathChecker getRevocationChecker();
+    method public final java.security.cert.CertPathValidatorResult validate(java.security.cert.CertPath, java.security.cert.CertPathParameters) throws java.security.cert.CertPathValidatorException, java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class CertPathValidatorException extends java.security.GeneralSecurityException {
+    ctor public CertPathValidatorException();
+    ctor public CertPathValidatorException(String);
+    ctor public CertPathValidatorException(Throwable);
+    ctor public CertPathValidatorException(String, Throwable);
+    ctor public CertPathValidatorException(String, Throwable, java.security.cert.CertPath, int);
+    ctor public CertPathValidatorException(String, Throwable, java.security.cert.CertPath, int, java.security.cert.CertPathValidatorException.Reason);
+    method public java.security.cert.CertPath getCertPath();
+    method public int getIndex();
+    method public java.security.cert.CertPathValidatorException.Reason getReason();
+  }
+
+  public enum CertPathValidatorException.BasicReason implements java.security.cert.CertPathValidatorException.Reason {
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason ALGORITHM_CONSTRAINED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason EXPIRED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason INVALID_SIGNATURE;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason NOT_YET_VALID;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason REVOKED;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNDETERMINED_REVOCATION_STATUS;
+    enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNSPECIFIED;
+  }
+
+  public static interface CertPathValidatorException.Reason extends java.io.Serializable {
+  }
+
+  public interface CertPathValidatorResult extends java.lang.Cloneable {
+    method public Object clone();
+  }
+
+  public abstract class CertPathValidatorSpi {
+    ctor public CertPathValidatorSpi();
+    method public java.security.cert.CertPathChecker engineGetRevocationChecker();
+    method public abstract java.security.cert.CertPathValidatorResult engineValidate(java.security.cert.CertPath, java.security.cert.CertPathParameters) throws java.security.cert.CertPathValidatorException, java.security.InvalidAlgorithmParameterException;
+  }
+
+  public interface CertSelector extends java.lang.Cloneable {
+    method public Object clone();
+    method public boolean match(java.security.cert.Certificate);
+  }
+
+  public class CertStore {
+    ctor protected CertStore(java.security.cert.CertStoreSpi, java.security.Provider, String, java.security.cert.CertStoreParameters);
+    method public final java.util.Collection<? extends java.security.cert.CRL> getCRLs(java.security.cert.CRLSelector) throws java.security.cert.CertStoreException;
+    method public final java.security.cert.CertStoreParameters getCertStoreParameters();
+    method public final java.util.Collection<? extends java.security.cert.Certificate> getCertificates(java.security.cert.CertSelector) throws java.security.cert.CertStoreException;
+    method public static final String getDefaultType();
+    method public static java.security.cert.CertStore getInstance(String, java.security.cert.CertStoreParameters) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException;
+    method public static java.security.cert.CertStore getInstance(String, java.security.cert.CertStoreParameters, String) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static java.security.cert.CertStore getInstance(String, java.security.cert.CertStoreParameters, java.security.Provider) throws java.security.InvalidAlgorithmParameterException, java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+  }
+
+  public class CertStoreException extends java.security.GeneralSecurityException {
+    ctor public CertStoreException();
+    ctor public CertStoreException(String);
+    ctor public CertStoreException(Throwable);
+    ctor public CertStoreException(String, Throwable);
+  }
+
+  public interface CertStoreParameters extends java.lang.Cloneable {
+    method public Object clone();
+  }
+
+  public abstract class CertStoreSpi {
+    ctor public CertStoreSpi(java.security.cert.CertStoreParameters) throws java.security.InvalidAlgorithmParameterException;
+    method public abstract java.util.Collection<? extends java.security.cert.CRL> engineGetCRLs(java.security.cert.CRLSelector) throws java.security.cert.CertStoreException;
+    method public abstract java.util.Collection<? extends java.security.cert.Certificate> engineGetCertificates(java.security.cert.CertSelector) throws java.security.cert.CertStoreException;
+  }
+
+  public abstract class Certificate implements java.io.Serializable {
+    ctor protected Certificate(String);
+    method public abstract byte[] getEncoded() throws java.security.cert.CertificateEncodingException;
+    method public abstract java.security.PublicKey getPublicKey();
+    method public final String getType();
+    method public abstract String toString();
+    method public abstract void verify(java.security.PublicKey) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public abstract void verify(java.security.PublicKey, String) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public void verify(java.security.PublicKey, java.security.Provider) throws java.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
+    method protected Object writeReplace() throws java.io.ObjectStreamException;
+  }
+
+  protected static class Certificate.CertificateRep implements java.io.Serializable {
+    ctor protected Certificate.CertificateRep(String, byte[]);
+    method protected Object readResolve() throws java.io.ObjectStreamException;
+  }
+
+  public class CertificateEncodingException extends java.security.cert.CertificateException {
+    ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(String);
+    ctor public CertificateEncodingException(String, Throwable);
+    ctor public CertificateEncodingException(Throwable);
+  }
+
+  public class CertificateException extends java.security.GeneralSecurityException {
+    ctor public CertificateException();
+    ctor public CertificateException(String);
+    ctor public CertificateException(String, Throwable);
+    ctor public CertificateException(Throwable);
+  }
+
+  public class CertificateExpiredException extends java.security.cert.CertificateException {
+    ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(String);
+  }
+
+  public class CertificateFactory {
+    ctor protected CertificateFactory(java.security.cert.CertificateFactorySpi, java.security.Provider, String);
+    method public final java.security.cert.CRL generateCRL(java.io.InputStream) throws java.security.cert.CRLException;
+    method public final java.util.Collection<? extends java.security.cert.CRL> generateCRLs(java.io.InputStream) throws java.security.cert.CRLException;
+    method public final java.security.cert.CertPath generateCertPath(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public final java.security.cert.CertPath generateCertPath(java.io.InputStream, String) throws java.security.cert.CertificateException;
+    method public final java.security.cert.CertPath generateCertPath(java.util.List<? extends java.security.cert.Certificate>) throws java.security.cert.CertificateException;
+    method public final java.security.cert.Certificate generateCertificate(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public final java.util.Collection<? extends java.security.cert.Certificate> generateCertificates(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public final java.util.Iterator<java.lang.String> getCertPathEncodings();
+    method public static final java.security.cert.CertificateFactory getInstance(String) throws java.security.cert.CertificateException;
+    method public static final java.security.cert.CertificateFactory getInstance(String, String) throws java.security.cert.CertificateException, java.security.NoSuchProviderException;
+    method public static final java.security.cert.CertificateFactory getInstance(String, java.security.Provider) throws java.security.cert.CertificateException;
+    method public final java.security.Provider getProvider();
+    method public final String getType();
+  }
+
+  public abstract class CertificateFactorySpi {
+    ctor public CertificateFactorySpi();
+    method public abstract java.security.cert.CRL engineGenerateCRL(java.io.InputStream) throws java.security.cert.CRLException;
+    method public abstract java.util.Collection<? extends java.security.cert.CRL> engineGenerateCRLs(java.io.InputStream) throws java.security.cert.CRLException;
+    method public java.security.cert.CertPath engineGenerateCertPath(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public java.security.cert.CertPath engineGenerateCertPath(java.io.InputStream, String) throws java.security.cert.CertificateException;
+    method public java.security.cert.CertPath engineGenerateCertPath(java.util.List<? extends java.security.cert.Certificate>) throws java.security.cert.CertificateException;
+    method public abstract java.security.cert.Certificate engineGenerateCertificate(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public abstract java.util.Collection<? extends java.security.cert.Certificate> engineGenerateCertificates(java.io.InputStream) throws java.security.cert.CertificateException;
+    method public java.util.Iterator<java.lang.String> engineGetCertPathEncodings();
+  }
+
+  public class CertificateNotYetValidException extends java.security.cert.CertificateException {
+    ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(String);
+  }
+
+  public class CertificateParsingException extends java.security.cert.CertificateException {
+    ctor public CertificateParsingException();
+    ctor public CertificateParsingException(String);
+    ctor public CertificateParsingException(String, Throwable);
+    ctor public CertificateParsingException(Throwable);
+  }
+
+  public class CertificateRevokedException extends java.security.cert.CertificateException {
+    ctor public CertificateRevokedException(java.util.Date, java.security.cert.CRLReason, javax.security.auth.x500.X500Principal, java.util.Map<java.lang.String,java.security.cert.Extension>);
+    method public javax.security.auth.x500.X500Principal getAuthorityName();
+    method public java.util.Map<java.lang.String,java.security.cert.Extension> getExtensions();
+    method public java.util.Date getInvalidityDate();
+    method public java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
+  }
+
+  public class CollectionCertStoreParameters implements java.security.cert.CertStoreParameters {
+    ctor public CollectionCertStoreParameters(java.util.Collection<?>);
+    ctor public CollectionCertStoreParameters();
+    method public Object clone();
+    method public java.util.Collection<?> getCollection();
+  }
+
+  public interface Extension {
+    method public void encode(java.io.OutputStream) throws java.io.IOException;
+    method public String getId();
+    method public byte[] getValue();
+    method public boolean isCritical();
+  }
+
+  public class LDAPCertStoreParameters implements java.security.cert.CertStoreParameters {
+    ctor public LDAPCertStoreParameters(String, int);
+    ctor public LDAPCertStoreParameters(String);
+    ctor public LDAPCertStoreParameters();
+    method public Object clone();
+    method public int getPort();
+    method public String getServerName();
+  }
+
+  public class PKIXBuilderParameters extends java.security.cert.PKIXParameters {
+    ctor public PKIXBuilderParameters(java.util.Set<java.security.cert.TrustAnchor>, java.security.cert.CertSelector) throws java.security.InvalidAlgorithmParameterException;
+    ctor public PKIXBuilderParameters(java.security.KeyStore, java.security.cert.CertSelector) throws java.security.InvalidAlgorithmParameterException, java.security.KeyStoreException;
+    method public int getMaxPathLength();
+    method public void setMaxPathLength(int);
+  }
+
+  public class PKIXCertPathBuilderResult extends java.security.cert.PKIXCertPathValidatorResult implements java.security.cert.CertPathBuilderResult {
+    ctor public PKIXCertPathBuilderResult(java.security.cert.CertPath, java.security.cert.TrustAnchor, java.security.cert.PolicyNode, java.security.PublicKey);
+    method public java.security.cert.CertPath getCertPath();
+  }
+
+  public abstract class PKIXCertPathChecker implements java.security.cert.CertPathChecker java.lang.Cloneable {
+    ctor protected PKIXCertPathChecker();
+    method public abstract void check(java.security.cert.Certificate, java.util.Collection<java.lang.String>) throws java.security.cert.CertPathValidatorException;
+    method public void check(java.security.cert.Certificate) throws java.security.cert.CertPathValidatorException;
+    method public Object clone();
+    method public abstract java.util.Set<java.lang.String> getSupportedExtensions();
+  }
+
+  public class PKIXCertPathValidatorResult implements java.security.cert.CertPathValidatorResult {
+    ctor public PKIXCertPathValidatorResult(java.security.cert.TrustAnchor, java.security.cert.PolicyNode, java.security.PublicKey);
+    method public Object clone();
+    method public java.security.cert.PolicyNode getPolicyTree();
+    method public java.security.PublicKey getPublicKey();
+    method public java.security.cert.TrustAnchor getTrustAnchor();
+  }
+
+  public class PKIXParameters implements java.security.cert.CertPathParameters {
+    ctor public PKIXParameters(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException;
+    ctor public PKIXParameters(java.security.KeyStore) throws java.security.InvalidAlgorithmParameterException, java.security.KeyStoreException;
+    method public void addCertPathChecker(java.security.cert.PKIXCertPathChecker);
+    method public void addCertStore(java.security.cert.CertStore);
+    method public Object clone();
+    method public java.util.List<java.security.cert.PKIXCertPathChecker> getCertPathCheckers();
+    method public java.util.List<java.security.cert.CertStore> getCertStores();
+    method public java.util.Date getDate();
+    method public java.util.Set<java.lang.String> getInitialPolicies();
+    method public boolean getPolicyQualifiersRejected();
+    method public String getSigProvider();
+    method public java.security.cert.CertSelector getTargetCertConstraints();
+    method public java.util.Set<java.security.cert.TrustAnchor> getTrustAnchors();
+    method public boolean isAnyPolicyInhibited();
+    method public boolean isExplicitPolicyRequired();
+    method public boolean isPolicyMappingInhibited();
+    method public boolean isRevocationEnabled();
+    method public void setAnyPolicyInhibited(boolean);
+    method public void setCertPathCheckers(java.util.List<java.security.cert.PKIXCertPathChecker>);
+    method public void setCertStores(java.util.List<java.security.cert.CertStore>);
+    method public void setDate(java.util.Date);
+    method public void setExplicitPolicyRequired(boolean);
+    method public void setInitialPolicies(java.util.Set<java.lang.String>);
+    method public void setPolicyMappingInhibited(boolean);
+    method public void setPolicyQualifiersRejected(boolean);
+    method public void setRevocationEnabled(boolean);
+    method public void setSigProvider(String);
+    method public void setTargetCertConstraints(java.security.cert.CertSelector);
+    method public void setTrustAnchors(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public enum PKIXReason implements java.security.cert.CertPathValidatorException.Reason {
+    enum_constant public static final java.security.cert.PKIXReason INVALID_KEY_USAGE;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_NAME;
+    enum_constant public static final java.security.cert.PKIXReason INVALID_POLICY;
+    enum_constant public static final java.security.cert.PKIXReason NAME_CHAINING;
+    enum_constant public static final java.security.cert.PKIXReason NOT_CA_CERT;
+    enum_constant public static final java.security.cert.PKIXReason NO_TRUST_ANCHOR;
+    enum_constant public static final java.security.cert.PKIXReason PATH_TOO_LONG;
+    enum_constant public static final java.security.cert.PKIXReason UNRECOGNIZED_CRIT_EXT;
+  }
+
+  public abstract class PKIXRevocationChecker extends java.security.cert.PKIXCertPathChecker {
+    ctor protected PKIXRevocationChecker();
+    method public java.security.cert.PKIXRevocationChecker clone();
+    method public java.util.List<java.security.cert.Extension> getOcspExtensions();
+    method public java.net.URI getOcspResponder();
+    method public java.security.cert.X509Certificate getOcspResponderCert();
+    method public java.util.Map<java.security.cert.X509Certificate,byte[]> getOcspResponses();
+    method public java.util.Set<java.security.cert.PKIXRevocationChecker.Option> getOptions();
+    method public abstract java.util.List<java.security.cert.CertPathValidatorException> getSoftFailExceptions();
+    method public void setOcspExtensions(java.util.List<java.security.cert.Extension>);
+    method public void setOcspResponder(java.net.URI);
+    method public void setOcspResponderCert(java.security.cert.X509Certificate);
+    method public void setOcspResponses(java.util.Map<java.security.cert.X509Certificate,byte[]>);
+    method public void setOptions(java.util.Set<java.security.cert.PKIXRevocationChecker.Option>);
+  }
+
+  public enum PKIXRevocationChecker.Option {
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option NO_FALLBACK;
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option ONLY_END_ENTITY;
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option PREFER_CRLS;
+    enum_constant public static final java.security.cert.PKIXRevocationChecker.Option SOFT_FAIL;
+  }
+
+  public interface PolicyNode {
+    method public java.util.Iterator<? extends java.security.cert.PolicyNode> getChildren();
+    method public int getDepth();
+    method public java.util.Set<java.lang.String> getExpectedPolicies();
+    method public java.security.cert.PolicyNode getParent();
+    method public java.util.Set<? extends java.security.cert.PolicyQualifierInfo> getPolicyQualifiers();
+    method public String getValidPolicy();
+    method public boolean isCritical();
+  }
+
+  public class PolicyQualifierInfo {
+    ctor public PolicyQualifierInfo(byte[]) throws java.io.IOException;
+    method public final byte[] getEncoded();
+    method public final byte[] getPolicyQualifier();
+    method public final String getPolicyQualifierId();
+  }
+
+  public class TrustAnchor {
+    ctor public TrustAnchor(java.security.cert.X509Certificate, byte[]);
+    ctor public TrustAnchor(javax.security.auth.x500.X500Principal, java.security.PublicKey, byte[]);
+    ctor public TrustAnchor(String, java.security.PublicKey, byte[]);
+    method public final javax.security.auth.x500.X500Principal getCA();
+    method public final String getCAName();
+    method public final java.security.PublicKey getCAPublicKey();
+    method public final byte[] getNameConstraints();
+    method public final java.security.cert.X509Certificate getTrustedCert();
+  }
+
+  public abstract class X509CRL extends java.security.cert.CRL implements java.security.cert.X509Extension {
+    ctor protected X509CRL();
+    method public abstract byte[] getEncoded() throws java.security.cert.CRLException;
+    method public abstract java.security.Principal getIssuerDN();
+    method public javax.security.auth.x500.X500Principal getIssuerX500Principal();
+    method public abstract java.util.Date getNextUpdate();
+    method public abstract java.security.cert.X509CRLEntry getRevokedCertificate(java.math.BigInteger);
+    method public java.security.cert.X509CRLEntry getRevokedCertificate(java.security.cert.X509Certificate);
+    method public abstract java.util.Set<? extends java.security.cert.X509CRLEntry> getRevokedCertificates();
+    method public abstract String getSigAlgName();
+    method public abstract String getSigAlgOID();
+    method public abstract byte[] getSigAlgParams();
+    method public abstract byte[] getSignature();
+    method public abstract byte[] getTBSCertList() throws java.security.cert.CRLException;
+    method public abstract java.util.Date getThisUpdate();
+    method public abstract int getVersion();
+    method public abstract void verify(java.security.PublicKey) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public abstract void verify(java.security.PublicKey, String) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public void verify(java.security.PublicKey, java.security.Provider) throws java.security.cert.CRLException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.SignatureException;
+  }
+
+  public abstract class X509CRLEntry implements java.security.cert.X509Extension {
+    ctor public X509CRLEntry();
+    method public javax.security.auth.x500.X500Principal getCertificateIssuer();
+    method public abstract byte[] getEncoded() throws java.security.cert.CRLException;
+    method public abstract java.util.Date getRevocationDate();
+    method public java.security.cert.CRLReason getRevocationReason();
+    method public abstract java.math.BigInteger getSerialNumber();
+    method public abstract boolean hasExtensions();
+    method public abstract String toString();
+  }
+
+  public class X509CRLSelector implements java.security.cert.CRLSelector {
+    ctor public X509CRLSelector();
+    method public void addIssuer(javax.security.auth.x500.X500Principal);
+    method public void addIssuerName(String) throws java.io.IOException;
+    method public void addIssuerName(byte[]) throws java.io.IOException;
+    method public Object clone();
+    method public java.security.cert.X509Certificate getCertificateChecking();
+    method public java.util.Date getDateAndTime();
+    method public java.util.Collection<java.lang.Object> getIssuerNames();
+    method public java.util.Collection<javax.security.auth.x500.X500Principal> getIssuers();
+    method public java.math.BigInteger getMaxCRL();
+    method public java.math.BigInteger getMinCRL();
+    method public boolean match(java.security.cert.CRL);
+    method public void setCertificateChecking(java.security.cert.X509Certificate);
+    method public void setDateAndTime(java.util.Date);
+    method public void setIssuerNames(java.util.Collection<?>) throws java.io.IOException;
+    method public void setIssuers(java.util.Collection<javax.security.auth.x500.X500Principal>);
+    method public void setMaxCRLNumber(java.math.BigInteger);
+    method public void setMinCRLNumber(java.math.BigInteger);
+  }
+
+  public class X509CertSelector implements java.security.cert.CertSelector {
+    ctor public X509CertSelector();
+    method public void addPathToName(int, String) throws java.io.IOException;
+    method public void addPathToName(int, byte[]) throws java.io.IOException;
+    method public void addSubjectAlternativeName(int, String) throws java.io.IOException;
+    method public void addSubjectAlternativeName(int, byte[]) throws java.io.IOException;
+    method public Object clone();
+    method public byte[] getAuthorityKeyIdentifier();
+    method public int getBasicConstraints();
+    method public java.security.cert.X509Certificate getCertificate();
+    method public java.util.Date getCertificateValid();
+    method public java.util.Set<java.lang.String> getExtendedKeyUsage();
+    method public javax.security.auth.x500.X500Principal getIssuer();
+    method public byte[] getIssuerAsBytes() throws java.io.IOException;
+    method public String getIssuerAsString();
+    method public boolean[] getKeyUsage();
+    method public boolean getMatchAllSubjectAltNames();
+    method public byte[] getNameConstraints();
+    method public java.util.Collection<java.util.List<?>> getPathToNames();
+    method public java.util.Set<java.lang.String> getPolicy();
+    method public java.util.Date getPrivateKeyValid();
+    method public java.math.BigInteger getSerialNumber();
+    method public javax.security.auth.x500.X500Principal getSubject();
+    method public java.util.Collection<java.util.List<?>> getSubjectAlternativeNames();
+    method public byte[] getSubjectAsBytes() throws java.io.IOException;
+    method public String getSubjectAsString();
+    method public byte[] getSubjectKeyIdentifier();
+    method public java.security.PublicKey getSubjectPublicKey();
+    method public String getSubjectPublicKeyAlgID();
+    method public boolean match(java.security.cert.Certificate);
+    method public void setAuthorityKeyIdentifier(byte[]);
+    method public void setBasicConstraints(int);
+    method public void setCertificate(java.security.cert.X509Certificate);
+    method public void setCertificateValid(java.util.Date);
+    method public void setExtendedKeyUsage(java.util.Set<java.lang.String>) throws java.io.IOException;
+    method public void setIssuer(javax.security.auth.x500.X500Principal);
+    method public void setIssuer(String) throws java.io.IOException;
+    method public void setIssuer(byte[]) throws java.io.IOException;
+    method public void setKeyUsage(boolean[]);
+    method public void setMatchAllSubjectAltNames(boolean);
+    method public void setNameConstraints(byte[]) throws java.io.IOException;
+    method public void setPathToNames(java.util.Collection<java.util.List<?>>) throws java.io.IOException;
+    method public void setPolicy(java.util.Set<java.lang.String>) throws java.io.IOException;
+    method public void setPrivateKeyValid(java.util.Date);
+    method public void setSerialNumber(java.math.BigInteger);
+    method public void setSubject(javax.security.auth.x500.X500Principal);
+    method public void setSubject(String) throws java.io.IOException;
+    method public void setSubject(byte[]) throws java.io.IOException;
+    method public void setSubjectAlternativeNames(java.util.Collection<java.util.List<?>>) throws java.io.IOException;
+    method public void setSubjectKeyIdentifier(byte[]);
+    method public void setSubjectPublicKey(java.security.PublicKey);
+    method public void setSubjectPublicKey(byte[]) throws java.io.IOException;
+    method public void setSubjectPublicKeyAlgID(String) throws java.io.IOException;
+  }
+
+  public abstract class X509Certificate extends java.security.cert.Certificate implements java.security.cert.X509Extension {
+    ctor protected X509Certificate();
+    method public abstract void checkValidity() throws java.security.cert.CertificateExpiredException, java.security.cert.CertificateNotYetValidException;
+    method public abstract void checkValidity(java.util.Date) throws java.security.cert.CertificateExpiredException, java.security.cert.CertificateNotYetValidException;
+    method public abstract int getBasicConstraints();
+    method public java.util.List<java.lang.String> getExtendedKeyUsage() throws java.security.cert.CertificateParsingException;
+    method public java.util.Collection<java.util.List<?>> getIssuerAlternativeNames() throws java.security.cert.CertificateParsingException;
+    method public abstract java.security.Principal getIssuerDN();
+    method public abstract boolean[] getIssuerUniqueID();
+    method public javax.security.auth.x500.X500Principal getIssuerX500Principal();
+    method public abstract boolean[] getKeyUsage();
+    method public abstract java.util.Date getNotAfter();
+    method public abstract java.util.Date getNotBefore();
+    method public abstract java.math.BigInteger getSerialNumber();
+    method public abstract String getSigAlgName();
+    method public abstract String getSigAlgOID();
+    method public abstract byte[] getSigAlgParams();
+    method public abstract byte[] getSignature();
+    method public java.util.Collection<java.util.List<?>> getSubjectAlternativeNames() throws java.security.cert.CertificateParsingException;
+    method public abstract java.security.Principal getSubjectDN();
+    method public abstract boolean[] getSubjectUniqueID();
+    method public javax.security.auth.x500.X500Principal getSubjectX500Principal();
+    method public abstract byte[] getTBSCertificate() throws java.security.cert.CertificateEncodingException;
+    method public abstract int getVersion();
+  }
+
+  public interface X509Extension {
+    method public java.util.Set<java.lang.String> getCriticalExtensionOIDs();
+    method public byte[] getExtensionValue(String);
+    method public java.util.Set<java.lang.String> getNonCriticalExtensionOIDs();
+    method public boolean hasUnsupportedCriticalExtension();
+  }
+
+}
+
+package java.security.interfaces {
+
+  public interface DSAKey {
+    method public java.security.interfaces.DSAParams getParams();
+  }
+
+  public interface DSAKeyPairGenerator {
+    method public void initialize(java.security.interfaces.DSAParams, java.security.SecureRandom) throws java.security.InvalidParameterException;
+    method public void initialize(int, boolean, java.security.SecureRandom) throws java.security.InvalidParameterException;
+  }
+
+  public interface DSAParams {
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+  }
+
+  public interface DSAPrivateKey extends java.security.interfaces.DSAKey java.security.PrivateKey {
+    method public java.math.BigInteger getX();
+    field public static final long serialVersionUID = 7776497482533790279L; // 0x6bebab423b256247L
+  }
+
+  public interface DSAPublicKey extends java.security.interfaces.DSAKey java.security.PublicKey {
+    method public java.math.BigInteger getY();
+    field public static final long serialVersionUID = 1234526332779022332L; // 0x1121eb28ab28c7fcL
+  }
+
+  public interface ECKey {
+    method public java.security.spec.ECParameterSpec getParams();
+  }
+
+  public interface ECPrivateKey extends java.security.PrivateKey java.security.interfaces.ECKey {
+    method public java.math.BigInteger getS();
+    field public static final long serialVersionUID = -7896394956925609184L; // 0x926a5e9fa2435b20L
+  }
+
+  public interface ECPublicKey extends java.security.PublicKey java.security.interfaces.ECKey {
+    method public java.security.spec.ECPoint getW();
+    field public static final long serialVersionUID = -3314988629879632826L; // 0xd1fecb679990cc46L
+  }
+
+  public interface RSAKey {
+    method public java.math.BigInteger getModulus();
+  }
+
+  public interface RSAMultiPrimePrivateCrtKey extends java.security.interfaces.RSAPrivateKey {
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.security.spec.RSAOtherPrimeInfo[] getOtherPrimeInfo();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+    field public static final long serialVersionUID = 618058533534628008L; // 0x893c8f62dbaf8a8L
+  }
+
+  public interface RSAPrivateCrtKey extends java.security.interfaces.RSAPrivateKey {
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+    field public static final long serialVersionUID = -5682214253527700368L; // 0xb124b83df8d1ec70L
+  }
+
+  public interface RSAPrivateKey extends java.security.PrivateKey java.security.interfaces.RSAKey {
+    method public java.math.BigInteger getPrivateExponent();
+    field public static final long serialVersionUID = 5187144804936595022L; // 0x47fc70b7a8c2364eL
+  }
+
+  public interface RSAPublicKey extends java.security.PublicKey java.security.interfaces.RSAKey {
+    method public java.math.BigInteger getPublicExponent();
+    field public static final long serialVersionUID = -8727434096241101194L; // 0x86e1ecedeceab676L
+  }
+
+}
+
+package java.security.spec {
+
+  public interface AlgorithmParameterSpec {
+  }
+
+  public class DSAParameterSpec implements java.security.spec.AlgorithmParameterSpec java.security.interfaces.DSAParams {
+    ctor public DSAParameterSpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+  }
+
+  public class DSAPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public DSAPrivateKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+    method public java.math.BigInteger getX();
+  }
+
+  public class DSAPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public DSAPublicKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getQ();
+    method public java.math.BigInteger getY();
+  }
+
+  public interface ECField {
+    method public int getFieldSize();
+  }
+
+  public class ECFieldF2m implements java.security.spec.ECField {
+    ctor public ECFieldF2m(int);
+    ctor public ECFieldF2m(int, java.math.BigInteger);
+    ctor public ECFieldF2m(int, int[]);
+    method public int getFieldSize();
+    method public int getM();
+    method public int[] getMidTermsOfReductionPolynomial();
+    method public java.math.BigInteger getReductionPolynomial();
+  }
+
+  public class ECFieldFp implements java.security.spec.ECField {
+    ctor public ECFieldFp(java.math.BigInteger);
+    method public int getFieldSize();
+    method public java.math.BigInteger getP();
+  }
+
+  public class ECGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public ECGenParameterSpec(String);
+    method public String getName();
+  }
+
+  public class ECParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public ECParameterSpec(java.security.spec.EllipticCurve, java.security.spec.ECPoint, java.math.BigInteger, int);
+    method public int getCofactor();
+    method public java.security.spec.EllipticCurve getCurve();
+    method public java.security.spec.ECPoint getGenerator();
+    method public java.math.BigInteger getOrder();
+  }
+
+  public class ECPoint {
+    ctor public ECPoint(java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getAffineX();
+    method public java.math.BigInteger getAffineY();
+    field public static final java.security.spec.ECPoint POINT_INFINITY;
+  }
+
+  public class ECPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public ECPrivateKeySpec(java.math.BigInteger, java.security.spec.ECParameterSpec);
+    method public java.security.spec.ECParameterSpec getParams();
+    method public java.math.BigInteger getS();
+  }
+
+  public class ECPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public ECPublicKeySpec(java.security.spec.ECPoint, java.security.spec.ECParameterSpec);
+    method public java.security.spec.ECParameterSpec getParams();
+    method public java.security.spec.ECPoint getW();
+  }
+
+  public class EllipticCurve {
+    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger);
+    ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]);
+    method public java.math.BigInteger getA();
+    method public java.math.BigInteger getB();
+    method public java.security.spec.ECField getField();
+    method public byte[] getSeed();
+  }
+
+  public abstract class EncodedKeySpec implements java.security.spec.KeySpec {
+    ctor public EncodedKeySpec(byte[]);
+    method public byte[] getEncoded();
+    method public abstract String getFormat();
+  }
+
+  public class InvalidKeySpecException extends java.security.GeneralSecurityException {
+    ctor public InvalidKeySpecException();
+    ctor public InvalidKeySpecException(String);
+    ctor public InvalidKeySpecException(String, Throwable);
+    ctor public InvalidKeySpecException(Throwable);
+  }
+
+  public class InvalidParameterSpecException extends java.security.GeneralSecurityException {
+    ctor public InvalidParameterSpecException();
+    ctor public InvalidParameterSpecException(String);
+  }
+
+  public interface KeySpec {
+  }
+
+  public class MGF1ParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public MGF1ParameterSpec(String);
+    method public String getDigestAlgorithm();
+    field public static final java.security.spec.MGF1ParameterSpec SHA1;
+    field public static final java.security.spec.MGF1ParameterSpec SHA224;
+    field public static final java.security.spec.MGF1ParameterSpec SHA256;
+    field public static final java.security.spec.MGF1ParameterSpec SHA384;
+    field public static final java.security.spec.MGF1ParameterSpec SHA512;
+  }
+
+  public class PKCS8EncodedKeySpec extends java.security.spec.EncodedKeySpec {
+    ctor public PKCS8EncodedKeySpec(byte[]);
+    method public final String getFormat();
+  }
+
+  public class PSSParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public PSSParameterSpec(String, String, java.security.spec.AlgorithmParameterSpec, int, int);
+    ctor public PSSParameterSpec(int);
+    method public String getDigestAlgorithm();
+    method public String getMGFAlgorithm();
+    method public java.security.spec.AlgorithmParameterSpec getMGFParameters();
+    method public int getSaltLength();
+    method public int getTrailerField();
+    field public static final java.security.spec.PSSParameterSpec DEFAULT;
+  }
+
+  public class RSAKeyGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public RSAKeyGenParameterSpec(int, java.math.BigInteger);
+    method public int getKeysize();
+    method public java.math.BigInteger getPublicExponent();
+    field public static final java.math.BigInteger F0;
+    field public static final java.math.BigInteger F4;
+  }
+
+  public class RSAMultiPrimePrivateCrtKeySpec extends java.security.spec.RSAPrivateKeySpec {
+    ctor public RSAMultiPrimePrivateCrtKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.security.spec.RSAOtherPrimeInfo[]);
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.security.spec.RSAOtherPrimeInfo[] getOtherPrimeInfo();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+  }
+
+  public class RSAOtherPrimeInfo {
+    ctor public RSAOtherPrimeInfo(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public final java.math.BigInteger getCrtCoefficient();
+    method public final java.math.BigInteger getExponent();
+    method public final java.math.BigInteger getPrime();
+  }
+
+  public class RSAPrivateCrtKeySpec extends java.security.spec.RSAPrivateKeySpec {
+    ctor public RSAPrivateCrtKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getCrtCoefficient();
+    method public java.math.BigInteger getPrimeExponentP();
+    method public java.math.BigInteger getPrimeExponentQ();
+    method public java.math.BigInteger getPrimeP();
+    method public java.math.BigInteger getPrimeQ();
+    method public java.math.BigInteger getPublicExponent();
+  }
+
+  public class RSAPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public RSAPrivateKeySpec(java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getModulus();
+    method public java.math.BigInteger getPrivateExponent();
+  }
+
+  public class RSAPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public RSAPublicKeySpec(java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getModulus();
+    method public java.math.BigInteger getPublicExponent();
+  }
+
+  public class X509EncodedKeySpec extends java.security.spec.EncodedKeySpec {
+    ctor public X509EncodedKeySpec(byte[]);
+    method public final String getFormat();
+  }
+
+}
+
+package java.sql {
+
+  public interface Array {
+    method public void free() throws java.sql.SQLException;
+    method public Object getArray() throws java.sql.SQLException;
+    method public Object getArray(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getArray(long, int) throws java.sql.SQLException;
+    method public Object getArray(long, int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public int getBaseType() throws java.sql.SQLException;
+    method public String getBaseTypeName() throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet() throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet(long, int) throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet(long, int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+  }
+
+  public class BatchUpdateException extends java.sql.SQLException {
+    ctor public BatchUpdateException(String, String, int, int[]);
+    ctor public BatchUpdateException(String, String, int[]);
+    ctor public BatchUpdateException(String, int[]);
+    ctor public BatchUpdateException(int[]);
+    ctor public BatchUpdateException();
+    ctor public BatchUpdateException(Throwable);
+    ctor public BatchUpdateException(int[], Throwable);
+    ctor public BatchUpdateException(String, int[], Throwable);
+    ctor public BatchUpdateException(String, String, int[], Throwable);
+    ctor public BatchUpdateException(String, String, int, int[], Throwable);
+    method public int[] getUpdateCounts();
+  }
+
+  public interface Blob {
+    method public void free() throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream() throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream(long, long) throws java.sql.SQLException;
+    method public byte[] getBytes(long, int) throws java.sql.SQLException;
+    method public long length() throws java.sql.SQLException;
+    method public long position(byte[], long) throws java.sql.SQLException;
+    method public long position(java.sql.Blob, long) throws java.sql.SQLException;
+    method public java.io.OutputStream setBinaryStream(long) throws java.sql.SQLException;
+    method public int setBytes(long, byte[]) throws java.sql.SQLException;
+    method public int setBytes(long, byte[], int, int) throws java.sql.SQLException;
+    method public void truncate(long) throws java.sql.SQLException;
+  }
+
+  public interface CallableStatement extends java.sql.PreparedStatement {
+    method public java.sql.Array getArray(int) throws java.sql.SQLException;
+    method public java.sql.Array getArray(String) throws java.sql.SQLException;
+    method @Deprecated public java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(String) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(int) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(String) throws java.sql.SQLException;
+    method public boolean getBoolean(int) throws java.sql.SQLException;
+    method public boolean getBoolean(String) throws java.sql.SQLException;
+    method public byte getByte(int) throws java.sql.SQLException;
+    method public byte getByte(String) throws java.sql.SQLException;
+    method public byte[] getBytes(int) throws java.sql.SQLException;
+    method public byte[] getBytes(String) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(int) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(String) throws java.sql.SQLException;
+    method public java.sql.Date getDate(int) throws java.sql.SQLException;
+    method public java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String, java.util.Calendar) throws java.sql.SQLException;
+    method public double getDouble(int) throws java.sql.SQLException;
+    method public double getDouble(String) throws java.sql.SQLException;
+    method public float getFloat(int) throws java.sql.SQLException;
+    method public float getFloat(String) throws java.sql.SQLException;
+    method public int getInt(int) throws java.sql.SQLException;
+    method public int getInt(String) throws java.sql.SQLException;
+    method public long getLong(int) throws java.sql.SQLException;
+    method public long getLong(String) throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(int) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(String) throws java.sql.SQLException;
+    method public String getNString(int) throws java.sql.SQLException;
+    method public String getNString(String) throws java.sql.SQLException;
+    method public Object getObject(int) throws java.sql.SQLException;
+    method public Object getObject(int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getObject(String) throws java.sql.SQLException;
+    method public Object getObject(String, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(int) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(String) throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(int) throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(String) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(int) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(String) throws java.sql.SQLException;
+    method public short getShort(int) throws java.sql.SQLException;
+    method public short getShort(String) throws java.sql.SQLException;
+    method public String getString(int) throws java.sql.SQLException;
+    method public String getString(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String, java.util.Calendar) throws java.sql.SQLException;
+    method public java.net.URL getURL(int) throws java.sql.SQLException;
+    method public java.net.URL getURL(String) throws java.sql.SQLException;
+    method public void registerOutParameter(int, int) throws java.sql.SQLException;
+    method public void registerOutParameter(int, int, int) throws java.sql.SQLException;
+    method public void registerOutParameter(int, int, String) throws java.sql.SQLException;
+    method public void registerOutParameter(String, int) throws java.sql.SQLException;
+    method public void registerOutParameter(String, int, int) throws java.sql.SQLException;
+    method public void registerOutParameter(String, int, String) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBigDecimal(String, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(String, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBoolean(String, boolean) throws java.sql.SQLException;
+    method public void setByte(String, byte) throws java.sql.SQLException;
+    method public void setBytes(String, byte[]) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(String, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDouble(String, double) throws java.sql.SQLException;
+    method public void setFloat(String, float) throws java.sql.SQLException;
+    method public void setInt(String, int) throws java.sql.SQLException;
+    method public void setLong(String, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(String, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNString(String, String) throws java.sql.SQLException;
+    method public void setNull(String, int) throws java.sql.SQLException;
+    method public void setNull(String, int, String) throws java.sql.SQLException;
+    method public void setObject(String, Object, int, int) throws java.sql.SQLException;
+    method public void setObject(String, Object, int) throws java.sql.SQLException;
+    method public void setObject(String, Object) throws java.sql.SQLException;
+    method public void setRowId(String, java.sql.RowId) throws java.sql.SQLException;
+    method public void setSQLXML(String, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setShort(String, short) throws java.sql.SQLException;
+    method public void setString(String, String) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setURL(String, java.net.URL) throws java.sql.SQLException;
+    method public boolean wasNull() throws java.sql.SQLException;
+  }
+
+  public enum ClientInfoStatus {
+    enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN;
+    enum_constant public static final java.sql.ClientInfoStatus REASON_UNKNOWN_PROPERTY;
+    enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_INVALID;
+    enum_constant public static final java.sql.ClientInfoStatus REASON_VALUE_TRUNCATED;
+  }
+
+  public interface Clob {
+    method public void free() throws java.sql.SQLException;
+    method public java.io.InputStream getAsciiStream() throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream() throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(long, long) throws java.sql.SQLException;
+    method public String getSubString(long, int) throws java.sql.SQLException;
+    method public long length() throws java.sql.SQLException;
+    method public long position(String, long) throws java.sql.SQLException;
+    method public long position(java.sql.Clob, long) throws java.sql.SQLException;
+    method public java.io.OutputStream setAsciiStream(long) throws java.sql.SQLException;
+    method public java.io.Writer setCharacterStream(long) throws java.sql.SQLException;
+    method public int setString(long, String) throws java.sql.SQLException;
+    method public int setString(long, String, int, int) throws java.sql.SQLException;
+    method public void truncate(long) throws java.sql.SQLException;
+  }
+
+  public interface Connection extends java.sql.Wrapper java.lang.AutoCloseable {
+    method public void clearWarnings() throws java.sql.SQLException;
+    method public void close() throws java.sql.SQLException;
+    method public void commit() throws java.sql.SQLException;
+    method public java.sql.Array createArrayOf(String, Object[]) throws java.sql.SQLException;
+    method public java.sql.Blob createBlob() throws java.sql.SQLException;
+    method public java.sql.Clob createClob() throws java.sql.SQLException;
+    method public java.sql.NClob createNClob() throws java.sql.SQLException;
+    method public java.sql.SQLXML createSQLXML() throws java.sql.SQLException;
+    method public java.sql.Statement createStatement() throws java.sql.SQLException;
+    method public java.sql.Statement createStatement(int, int) throws java.sql.SQLException;
+    method public java.sql.Statement createStatement(int, int, int) throws java.sql.SQLException;
+    method public java.sql.Struct createStruct(String, Object[]) throws java.sql.SQLException;
+    method public boolean getAutoCommit() throws java.sql.SQLException;
+    method public String getCatalog() throws java.sql.SQLException;
+    method public String getClientInfo(String) throws java.sql.SQLException;
+    method public java.util.Properties getClientInfo() throws java.sql.SQLException;
+    method public int getHoldability() throws java.sql.SQLException;
+    method public java.sql.DatabaseMetaData getMetaData() throws java.sql.SQLException;
+    method public int getTransactionIsolation() throws java.sql.SQLException;
+    method public java.util.Map<java.lang.String,java.lang.Class<?>> getTypeMap() throws java.sql.SQLException;
+    method public java.sql.SQLWarning getWarnings() throws java.sql.SQLException;
+    method public boolean isClosed() throws java.sql.SQLException;
+    method public boolean isReadOnly() throws java.sql.SQLException;
+    method public boolean isValid(int) throws java.sql.SQLException;
+    method public String nativeSQL(String) throws java.sql.SQLException;
+    method public java.sql.CallableStatement prepareCall(String) throws java.sql.SQLException;
+    method public java.sql.CallableStatement prepareCall(String, int, int) throws java.sql.SQLException;
+    method public java.sql.CallableStatement prepareCall(String, int, int, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int, int, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, int[]) throws java.sql.SQLException;
+    method public java.sql.PreparedStatement prepareStatement(String, String[]) throws java.sql.SQLException;
+    method public void releaseSavepoint(java.sql.Savepoint) throws java.sql.SQLException;
+    method public void rollback() throws java.sql.SQLException;
+    method public void rollback(java.sql.Savepoint) throws java.sql.SQLException;
+    method public void setAutoCommit(boolean) throws java.sql.SQLException;
+    method public void setCatalog(String) throws java.sql.SQLException;
+    method public void setClientInfo(String, String) throws java.sql.SQLClientInfoException;
+    method public void setClientInfo(java.util.Properties) throws java.sql.SQLClientInfoException;
+    method public void setHoldability(int) throws java.sql.SQLException;
+    method public void setReadOnly(boolean) throws java.sql.SQLException;
+    method public java.sql.Savepoint setSavepoint() throws java.sql.SQLException;
+    method public java.sql.Savepoint setSavepoint(String) throws java.sql.SQLException;
+    method public void setTransactionIsolation(int) throws java.sql.SQLException;
+    method public void setTypeMap(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    field public static final int TRANSACTION_NONE = 0; // 0x0
+    field public static final int TRANSACTION_READ_COMMITTED = 2; // 0x2
+    field public static final int TRANSACTION_READ_UNCOMMITTED = 1; // 0x1
+    field public static final int TRANSACTION_REPEATABLE_READ = 4; // 0x4
+    field public static final int TRANSACTION_SERIALIZABLE = 8; // 0x8
+  }
+
+  public class DataTruncation extends java.sql.SQLWarning {
+    ctor public DataTruncation(int, boolean, boolean, int, int);
+    ctor public DataTruncation(int, boolean, boolean, int, int, Throwable);
+    method public int getDataSize();
+    method public int getIndex();
+    method public boolean getParameter();
+    method public boolean getRead();
+    method public int getTransferSize();
+  }
+
+  public interface DatabaseMetaData extends java.sql.Wrapper {
+    method public boolean allProceduresAreCallable() throws java.sql.SQLException;
+    method public boolean allTablesAreSelectable() throws java.sql.SQLException;
+    method public boolean autoCommitFailureClosesAllResultSets() throws java.sql.SQLException;
+    method public boolean dataDefinitionCausesTransactionCommit() throws java.sql.SQLException;
+    method public boolean dataDefinitionIgnoredInTransactions() throws java.sql.SQLException;
+    method public boolean deletesAreDetected(int) throws java.sql.SQLException;
+    method public boolean doesMaxRowSizeIncludeBlobs() throws java.sql.SQLException;
+    method public java.sql.ResultSet getAttributes(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getBestRowIdentifier(String, String, String, int, boolean) throws java.sql.SQLException;
+    method public String getCatalogSeparator() throws java.sql.SQLException;
+    method public String getCatalogTerm() throws java.sql.SQLException;
+    method public java.sql.ResultSet getCatalogs() throws java.sql.SQLException;
+    method public java.sql.ResultSet getClientInfoProperties() throws java.sql.SQLException;
+    method public java.sql.ResultSet getColumnPrivileges(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getColumns(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public java.sql.ResultSet getCrossReference(String, String, String, String, String, String) throws java.sql.SQLException;
+    method public int getDatabaseMajorVersion() throws java.sql.SQLException;
+    method public int getDatabaseMinorVersion() throws java.sql.SQLException;
+    method public String getDatabaseProductName() throws java.sql.SQLException;
+    method public String getDatabaseProductVersion() throws java.sql.SQLException;
+    method public int getDefaultTransactionIsolation() throws java.sql.SQLException;
+    method public int getDriverMajorVersion();
+    method public int getDriverMinorVersion();
+    method public String getDriverName() throws java.sql.SQLException;
+    method public String getDriverVersion() throws java.sql.SQLException;
+    method public java.sql.ResultSet getExportedKeys(String, String, String) throws java.sql.SQLException;
+    method public String getExtraNameCharacters() throws java.sql.SQLException;
+    method public java.sql.ResultSet getFunctionColumns(String, String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getFunctions(String, String, String) throws java.sql.SQLException;
+    method public String getIdentifierQuoteString() throws java.sql.SQLException;
+    method public java.sql.ResultSet getImportedKeys(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getIndexInfo(String, String, String, boolean, boolean) throws java.sql.SQLException;
+    method public int getJDBCMajorVersion() throws java.sql.SQLException;
+    method public int getJDBCMinorVersion() throws java.sql.SQLException;
+    method public int getMaxBinaryLiteralLength() throws java.sql.SQLException;
+    method public int getMaxCatalogNameLength() throws java.sql.SQLException;
+    method public int getMaxCharLiteralLength() throws java.sql.SQLException;
+    method public int getMaxColumnNameLength() throws java.sql.SQLException;
+    method public int getMaxColumnsInGroupBy() throws java.sql.SQLException;
+    method public int getMaxColumnsInIndex() throws java.sql.SQLException;
+    method public int getMaxColumnsInOrderBy() throws java.sql.SQLException;
+    method public int getMaxColumnsInSelect() throws java.sql.SQLException;
+    method public int getMaxColumnsInTable() throws java.sql.SQLException;
+    method public int getMaxConnections() throws java.sql.SQLException;
+    method public int getMaxCursorNameLength() throws java.sql.SQLException;
+    method public int getMaxIndexLength() throws java.sql.SQLException;
+    method public int getMaxProcedureNameLength() throws java.sql.SQLException;
+    method public int getMaxRowSize() throws java.sql.SQLException;
+    method public int getMaxSchemaNameLength() throws java.sql.SQLException;
+    method public int getMaxStatementLength() throws java.sql.SQLException;
+    method public int getMaxStatements() throws java.sql.SQLException;
+    method public int getMaxTableNameLength() throws java.sql.SQLException;
+    method public int getMaxTablesInSelect() throws java.sql.SQLException;
+    method public int getMaxUserNameLength() throws java.sql.SQLException;
+    method public String getNumericFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getPrimaryKeys(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getProcedureColumns(String, String, String, String) throws java.sql.SQLException;
+    method public String getProcedureTerm() throws java.sql.SQLException;
+    method public java.sql.ResultSet getProcedures(String, String, String) throws java.sql.SQLException;
+    method public int getResultSetHoldability() throws java.sql.SQLException;
+    method public java.sql.RowIdLifetime getRowIdLifetime() throws java.sql.SQLException;
+    method public String getSQLKeywords() throws java.sql.SQLException;
+    method public int getSQLStateType() throws java.sql.SQLException;
+    method public String getSchemaTerm() throws java.sql.SQLException;
+    method public java.sql.ResultSet getSchemas() throws java.sql.SQLException;
+    method public java.sql.ResultSet getSchemas(String, String) throws java.sql.SQLException;
+    method public String getSearchStringEscape() throws java.sql.SQLException;
+    method public String getStringFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getSuperTables(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getSuperTypes(String, String, String) throws java.sql.SQLException;
+    method public String getSystemFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getTablePrivileges(String, String, String) throws java.sql.SQLException;
+    method public java.sql.ResultSet getTableTypes() throws java.sql.SQLException;
+    method public java.sql.ResultSet getTables(String, String, String, String[]) throws java.sql.SQLException;
+    method public String getTimeDateFunctions() throws java.sql.SQLException;
+    method public java.sql.ResultSet getTypeInfo() throws java.sql.SQLException;
+    method public java.sql.ResultSet getUDTs(String, String, String, int[]) throws java.sql.SQLException;
+    method public String getURL() throws java.sql.SQLException;
+    method public String getUserName() throws java.sql.SQLException;
+    method public java.sql.ResultSet getVersionColumns(String, String, String) throws java.sql.SQLException;
+    method public boolean insertsAreDetected(int) throws java.sql.SQLException;
+    method public boolean isCatalogAtStart() throws java.sql.SQLException;
+    method public boolean isReadOnly() throws java.sql.SQLException;
+    method public boolean locatorsUpdateCopy() throws java.sql.SQLException;
+    method public boolean nullPlusNonNullIsNull() throws java.sql.SQLException;
+    method public boolean nullsAreSortedAtEnd() throws java.sql.SQLException;
+    method public boolean nullsAreSortedAtStart() throws java.sql.SQLException;
+    method public boolean nullsAreSortedHigh() throws java.sql.SQLException;
+    method public boolean nullsAreSortedLow() throws java.sql.SQLException;
+    method public boolean othersDeletesAreVisible(int) throws java.sql.SQLException;
+    method public boolean othersInsertsAreVisible(int) throws java.sql.SQLException;
+    method public boolean othersUpdatesAreVisible(int) throws java.sql.SQLException;
+    method public boolean ownDeletesAreVisible(int) throws java.sql.SQLException;
+    method public boolean ownInsertsAreVisible(int) throws java.sql.SQLException;
+    method public boolean ownUpdatesAreVisible(int) throws java.sql.SQLException;
+    method public boolean storesLowerCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean storesLowerCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean storesMixedCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean storesMixedCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean storesUpperCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean storesUpperCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean supportsANSI92EntryLevelSQL() throws java.sql.SQLException;
+    method public boolean supportsANSI92FullSQL() throws java.sql.SQLException;
+    method public boolean supportsANSI92IntermediateSQL() throws java.sql.SQLException;
+    method public boolean supportsAlterTableWithAddColumn() throws java.sql.SQLException;
+    method public boolean supportsAlterTableWithDropColumn() throws java.sql.SQLException;
+    method public boolean supportsBatchUpdates() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInDataManipulation() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInIndexDefinitions() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInPrivilegeDefinitions() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInProcedureCalls() throws java.sql.SQLException;
+    method public boolean supportsCatalogsInTableDefinitions() throws java.sql.SQLException;
+    method public boolean supportsColumnAliasing() throws java.sql.SQLException;
+    method public boolean supportsConvert() throws java.sql.SQLException;
+    method public boolean supportsConvert(int, int) throws java.sql.SQLException;
+    method public boolean supportsCoreSQLGrammar() throws java.sql.SQLException;
+    method public boolean supportsCorrelatedSubqueries() throws java.sql.SQLException;
+    method public boolean supportsDataDefinitionAndDataManipulationTransactions() throws java.sql.SQLException;
+    method public boolean supportsDataManipulationTransactionsOnly() throws java.sql.SQLException;
+    method public boolean supportsDifferentTableCorrelationNames() throws java.sql.SQLException;
+    method public boolean supportsExpressionsInOrderBy() throws java.sql.SQLException;
+    method public boolean supportsExtendedSQLGrammar() throws java.sql.SQLException;
+    method public boolean supportsFullOuterJoins() throws java.sql.SQLException;
+    method public boolean supportsGetGeneratedKeys() throws java.sql.SQLException;
+    method public boolean supportsGroupBy() throws java.sql.SQLException;
+    method public boolean supportsGroupByBeyondSelect() throws java.sql.SQLException;
+    method public boolean supportsGroupByUnrelated() throws java.sql.SQLException;
+    method public boolean supportsIntegrityEnhancementFacility() throws java.sql.SQLException;
+    method public boolean supportsLikeEscapeClause() throws java.sql.SQLException;
+    method public boolean supportsLimitedOuterJoins() throws java.sql.SQLException;
+    method public boolean supportsMinimumSQLGrammar() throws java.sql.SQLException;
+    method public boolean supportsMixedCaseIdentifiers() throws java.sql.SQLException;
+    method public boolean supportsMixedCaseQuotedIdentifiers() throws java.sql.SQLException;
+    method public boolean supportsMultipleOpenResults() throws java.sql.SQLException;
+    method public boolean supportsMultipleResultSets() throws java.sql.SQLException;
+    method public boolean supportsMultipleTransactions() throws java.sql.SQLException;
+    method public boolean supportsNamedParameters() throws java.sql.SQLException;
+    method public boolean supportsNonNullableColumns() throws java.sql.SQLException;
+    method public boolean supportsOpenCursorsAcrossCommit() throws java.sql.SQLException;
+    method public boolean supportsOpenCursorsAcrossRollback() throws java.sql.SQLException;
+    method public boolean supportsOpenStatementsAcrossCommit() throws java.sql.SQLException;
+    method public boolean supportsOpenStatementsAcrossRollback() throws java.sql.SQLException;
+    method public boolean supportsOrderByUnrelated() throws java.sql.SQLException;
+    method public boolean supportsOuterJoins() throws java.sql.SQLException;
+    method public boolean supportsPositionedDelete() throws java.sql.SQLException;
+    method public boolean supportsPositionedUpdate() throws java.sql.SQLException;
+    method public boolean supportsResultSetConcurrency(int, int) throws java.sql.SQLException;
+    method public boolean supportsResultSetHoldability(int) throws java.sql.SQLException;
+    method public boolean supportsResultSetType(int) throws java.sql.SQLException;
+    method public boolean supportsSavepoints() throws java.sql.SQLException;
+    method public boolean supportsSchemasInDataManipulation() throws java.sql.SQLException;
+    method public boolean supportsSchemasInIndexDefinitions() throws java.sql.SQLException;
+    method public boolean supportsSchemasInPrivilegeDefinitions() throws java.sql.SQLException;
+    method public boolean supportsSchemasInProcedureCalls() throws java.sql.SQLException;
+    method public boolean supportsSchemasInTableDefinitions() throws java.sql.SQLException;
+    method public boolean supportsSelectForUpdate() throws java.sql.SQLException;
+    method public boolean supportsStatementPooling() throws java.sql.SQLException;
+    method public boolean supportsStoredFunctionsUsingCallSyntax() throws java.sql.SQLException;
+    method public boolean supportsStoredProcedures() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInComparisons() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInExists() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInIns() throws java.sql.SQLException;
+    method public boolean supportsSubqueriesInQuantifieds() throws java.sql.SQLException;
+    method public boolean supportsTableCorrelationNames() throws java.sql.SQLException;
+    method public boolean supportsTransactionIsolationLevel(int) throws java.sql.SQLException;
+    method public boolean supportsTransactions() throws java.sql.SQLException;
+    method public boolean supportsUnion() throws java.sql.SQLException;
+    method public boolean supportsUnionAll() throws java.sql.SQLException;
+    method public boolean updatesAreDetected(int) throws java.sql.SQLException;
+    method public boolean usesLocalFilePerTable() throws java.sql.SQLException;
+    method public boolean usesLocalFiles() throws java.sql.SQLException;
+    field public static final short attributeNoNulls = 0; // 0x0
+    field public static final short attributeNullable = 1; // 0x1
+    field public static final short attributeNullableUnknown = 2; // 0x2
+    field public static final int bestRowNotPseudo = 1; // 0x1
+    field public static final int bestRowPseudo = 2; // 0x2
+    field public static final int bestRowSession = 2; // 0x2
+    field public static final int bestRowTemporary = 0; // 0x0
+    field public static final int bestRowTransaction = 1; // 0x1
+    field public static final int bestRowUnknown = 0; // 0x0
+    field public static final int columnNoNulls = 0; // 0x0
+    field public static final int columnNullable = 1; // 0x1
+    field public static final int columnNullableUnknown = 2; // 0x2
+    field public static final int functionColumnIn = 1; // 0x1
+    field public static final int functionColumnInOut = 2; // 0x2
+    field public static final int functionColumnOut = 3; // 0x3
+    field public static final int functionColumnResult = 5; // 0x5
+    field public static final int functionColumnUnknown = 0; // 0x0
+    field public static final int functionNoNulls = 0; // 0x0
+    field public static final int functionNoTable = 1; // 0x1
+    field public static final int functionNullable = 1; // 0x1
+    field public static final int functionNullableUnknown = 2; // 0x2
+    field public static final int functionResultUnknown = 0; // 0x0
+    field public static final int functionReturn = 4; // 0x4
+    field public static final int functionReturnsTable = 2; // 0x2
+    field public static final int importedKeyCascade = 0; // 0x0
+    field public static final int importedKeyInitiallyDeferred = 5; // 0x5
+    field public static final int importedKeyInitiallyImmediate = 6; // 0x6
+    field public static final int importedKeyNoAction = 3; // 0x3
+    field public static final int importedKeyNotDeferrable = 7; // 0x7
+    field public static final int importedKeyRestrict = 1; // 0x1
+    field public static final int importedKeySetDefault = 4; // 0x4
+    field public static final int importedKeySetNull = 2; // 0x2
+    field public static final int procedureColumnIn = 1; // 0x1
+    field public static final int procedureColumnInOut = 2; // 0x2
+    field public static final int procedureColumnOut = 4; // 0x4
+    field public static final int procedureColumnResult = 3; // 0x3
+    field public static final int procedureColumnReturn = 5; // 0x5
+    field public static final int procedureColumnUnknown = 0; // 0x0
+    field public static final int procedureNoNulls = 0; // 0x0
+    field public static final int procedureNoResult = 1; // 0x1
+    field public static final int procedureNullable = 1; // 0x1
+    field public static final int procedureNullableUnknown = 2; // 0x2
+    field public static final int procedureResultUnknown = 0; // 0x0
+    field public static final int procedureReturnsResult = 2; // 0x2
+    field public static final int sqlStateSQL = 2; // 0x2
+    field public static final int sqlStateSQL99 = 2; // 0x2
+    field public static final int sqlStateXOpen = 1; // 0x1
+    field public static final short tableIndexClustered = 1; // 0x1
+    field public static final short tableIndexHashed = 2; // 0x2
+    field public static final short tableIndexOther = 3; // 0x3
+    field public static final short tableIndexStatistic = 0; // 0x0
+    field public static final int typeNoNulls = 0; // 0x0
+    field public static final int typeNullable = 1; // 0x1
+    field public static final int typeNullableUnknown = 2; // 0x2
+    field public static final int typePredBasic = 2; // 0x2
+    field public static final int typePredChar = 1; // 0x1
+    field public static final int typePredNone = 0; // 0x0
+    field public static final int typeSearchable = 3; // 0x3
+    field public static final int versionColumnNotPseudo = 1; // 0x1
+    field public static final int versionColumnPseudo = 2; // 0x2
+    field public static final int versionColumnUnknown = 0; // 0x0
+  }
+
+  public class Date extends java.util.Date {
+    ctor @Deprecated public Date(int, int, int);
+    ctor public Date(long);
+    method public static java.sql.Date valueOf(String);
+  }
+
+  public interface Driver {
+    method public boolean acceptsURL(String) throws java.sql.SQLException;
+    method public java.sql.Connection connect(String, java.util.Properties) throws java.sql.SQLException;
+    method public int getMajorVersion();
+    method public int getMinorVersion();
+    method public java.sql.DriverPropertyInfo[] getPropertyInfo(String, java.util.Properties) throws java.sql.SQLException;
+    method public boolean jdbcCompliant();
+  }
+
+  public class DriverManager {
+    method public static void deregisterDriver(java.sql.Driver) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(String, java.util.Properties) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(String, String, String) throws java.sql.SQLException;
+    method public static java.sql.Connection getConnection(String) throws java.sql.SQLException;
+    method public static java.sql.Driver getDriver(String) throws java.sql.SQLException;
+    method public static java.util.Enumeration<java.sql.Driver> getDrivers();
+    method @Deprecated public static java.io.PrintStream getLogStream();
+    method public static java.io.PrintWriter getLogWriter();
+    method public static int getLoginTimeout();
+    method public static void println(String);
+    method public static void registerDriver(java.sql.Driver) throws java.sql.SQLException;
+    method @Deprecated public static void setLogStream(java.io.PrintStream);
+    method public static void setLogWriter(java.io.PrintWriter);
+    method public static void setLoginTimeout(int);
+  }
+
+  public class DriverPropertyInfo {
+    ctor public DriverPropertyInfo(String, String);
+    field public String[] choices;
+    field public String description;
+    field public String name;
+    field public boolean required;
+    field public String value;
+  }
+
+  public interface NClob extends java.sql.Clob {
+  }
+
+  public interface ParameterMetaData extends java.sql.Wrapper {
+    method public String getParameterClassName(int) throws java.sql.SQLException;
+    method public int getParameterCount() throws java.sql.SQLException;
+    method public int getParameterMode(int) throws java.sql.SQLException;
+    method public int getParameterType(int) throws java.sql.SQLException;
+    method public String getParameterTypeName(int) throws java.sql.SQLException;
+    method public int getPrecision(int) throws java.sql.SQLException;
+    method public int getScale(int) throws java.sql.SQLException;
+    method public int isNullable(int) throws java.sql.SQLException;
+    method public boolean isSigned(int) throws java.sql.SQLException;
+    field public static final int parameterModeIn = 1; // 0x1
+    field public static final int parameterModeInOut = 2; // 0x2
+    field public static final int parameterModeOut = 4; // 0x4
+    field public static final int parameterModeUnknown = 0; // 0x0
+    field public static final int parameterNoNulls = 0; // 0x0
+    field public static final int parameterNullable = 1; // 0x1
+    field public static final int parameterNullableUnknown = 2; // 0x2
+  }
+
+  public interface PreparedStatement extends java.sql.Statement {
+    method public void addBatch() throws java.sql.SQLException;
+    method public void clearParameters() throws java.sql.SQLException;
+    method public boolean execute() throws java.sql.SQLException;
+    method public java.sql.ResultSet executeQuery() throws java.sql.SQLException;
+    method public int executeUpdate() throws java.sql.SQLException;
+    method public java.sql.ResultSetMetaData getMetaData() throws java.sql.SQLException;
+    method public java.sql.ParameterMetaData getParameterMetaData() throws java.sql.SQLException;
+    method public void setArray(int, java.sql.Array) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(int, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBoolean(int, boolean) throws java.sql.SQLException;
+    method public void setByte(int, byte) throws java.sql.SQLException;
+    method public void setBytes(int, byte[]) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(int, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDouble(int, double) throws java.sql.SQLException;
+    method public void setFloat(int, float) throws java.sql.SQLException;
+    method public void setInt(int, int) throws java.sql.SQLException;
+    method public void setLong(int, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(int, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNString(int, String) throws java.sql.SQLException;
+    method public void setNull(int, int) throws java.sql.SQLException;
+    method public void setNull(int, int, String) throws java.sql.SQLException;
+    method public void setObject(int, Object, int) throws java.sql.SQLException;
+    method public void setObject(int, Object) throws java.sql.SQLException;
+    method public void setObject(int, Object, int, int) throws java.sql.SQLException;
+    method public void setRef(int, java.sql.Ref) throws java.sql.SQLException;
+    method public void setRowId(int, java.sql.RowId) throws java.sql.SQLException;
+    method public void setSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setShort(int, short) throws java.sql.SQLException;
+    method public void setString(int, String) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setURL(int, java.net.URL) throws java.sql.SQLException;
+    method @Deprecated public void setUnicodeStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+  }
+
+  public interface Ref {
+    method public String getBaseTypeName() throws java.sql.SQLException;
+    method public Object getObject(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getObject() throws java.sql.SQLException;
+    method public void setObject(Object) throws java.sql.SQLException;
+  }
+
+  public interface ResultSet extends java.sql.Wrapper java.lang.AutoCloseable {
+    method public boolean absolute(int) throws java.sql.SQLException;
+    method public void afterLast() throws java.sql.SQLException;
+    method public void beforeFirst() throws java.sql.SQLException;
+    method public void cancelRowUpdates() throws java.sql.SQLException;
+    method public void clearWarnings() throws java.sql.SQLException;
+    method public void close() throws java.sql.SQLException;
+    method public void deleteRow() throws java.sql.SQLException;
+    method public int findColumn(String) throws java.sql.SQLException;
+    method public boolean first() throws java.sql.SQLException;
+    method public java.sql.Array getArray(int) throws java.sql.SQLException;
+    method public java.sql.Array getArray(String) throws java.sql.SQLException;
+    method public java.io.InputStream getAsciiStream(int) throws java.sql.SQLException;
+    method public java.io.InputStream getAsciiStream(String) throws java.sql.SQLException;
+    method @Deprecated public java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException;
+    method @Deprecated public java.math.BigDecimal getBigDecimal(String, int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException;
+    method public java.math.BigDecimal getBigDecimal(String) throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream(int) throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream(String) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(int) throws java.sql.SQLException;
+    method public java.sql.Blob getBlob(String) throws java.sql.SQLException;
+    method public boolean getBoolean(int) throws java.sql.SQLException;
+    method public boolean getBoolean(String) throws java.sql.SQLException;
+    method public byte getByte(int) throws java.sql.SQLException;
+    method public byte getByte(String) throws java.sql.SQLException;
+    method public byte[] getBytes(int) throws java.sql.SQLException;
+    method public byte[] getBytes(String) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(int) throws java.sql.SQLException;
+    method public java.sql.Clob getClob(String) throws java.sql.SQLException;
+    method public int getConcurrency() throws java.sql.SQLException;
+    method public String getCursorName() throws java.sql.SQLException;
+    method public java.sql.Date getDate(int) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String) throws java.sql.SQLException;
+    method public java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Date getDate(String, java.util.Calendar) throws java.sql.SQLException;
+    method public double getDouble(int) throws java.sql.SQLException;
+    method public double getDouble(String) throws java.sql.SQLException;
+    method public int getFetchDirection() throws java.sql.SQLException;
+    method public int getFetchSize() throws java.sql.SQLException;
+    method public float getFloat(int) throws java.sql.SQLException;
+    method public float getFloat(String) throws java.sql.SQLException;
+    method public int getHoldability() throws java.sql.SQLException;
+    method public int getInt(int) throws java.sql.SQLException;
+    method public int getInt(String) throws java.sql.SQLException;
+    method public long getLong(int) throws java.sql.SQLException;
+    method public long getLong(String) throws java.sql.SQLException;
+    method public java.sql.ResultSetMetaData getMetaData() throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(int) throws java.sql.SQLException;
+    method public java.io.Reader getNCharacterStream(String) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(int) throws java.sql.SQLException;
+    method public java.sql.NClob getNClob(String) throws java.sql.SQLException;
+    method public String getNString(int) throws java.sql.SQLException;
+    method public String getNString(String) throws java.sql.SQLException;
+    method public Object getObject(int) throws java.sql.SQLException;
+    method public Object getObject(String) throws java.sql.SQLException;
+    method public Object getObject(int, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public Object getObject(String, java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(int) throws java.sql.SQLException;
+    method public java.sql.Ref getRef(String) throws java.sql.SQLException;
+    method public int getRow() throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(int) throws java.sql.SQLException;
+    method public java.sql.RowId getRowId(String) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(int) throws java.sql.SQLException;
+    method public java.sql.SQLXML getSQLXML(String) throws java.sql.SQLException;
+    method public short getShort(int) throws java.sql.SQLException;
+    method public short getShort(String) throws java.sql.SQLException;
+    method public java.sql.Statement getStatement() throws java.sql.SQLException;
+    method public String getString(int) throws java.sql.SQLException;
+    method public String getString(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String) throws java.sql.SQLException;
+    method public java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Time getTime(String, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException;
+    method public java.sql.Timestamp getTimestamp(String, java.util.Calendar) throws java.sql.SQLException;
+    method public int getType() throws java.sql.SQLException;
+    method public java.net.URL getURL(int) throws java.sql.SQLException;
+    method public java.net.URL getURL(String) throws java.sql.SQLException;
+    method @Deprecated public java.io.InputStream getUnicodeStream(int) throws java.sql.SQLException;
+    method @Deprecated public java.io.InputStream getUnicodeStream(String) throws java.sql.SQLException;
+    method public java.sql.SQLWarning getWarnings() throws java.sql.SQLException;
+    method public void insertRow() throws java.sql.SQLException;
+    method public boolean isAfterLast() throws java.sql.SQLException;
+    method public boolean isBeforeFirst() throws java.sql.SQLException;
+    method public boolean isClosed() throws java.sql.SQLException;
+    method public boolean isFirst() throws java.sql.SQLException;
+    method public boolean isLast() throws java.sql.SQLException;
+    method public boolean last() throws java.sql.SQLException;
+    method public void moveToCurrentRow() throws java.sql.SQLException;
+    method public void moveToInsertRow() throws java.sql.SQLException;
+    method public boolean next() throws java.sql.SQLException;
+    method public boolean previous() throws java.sql.SQLException;
+    method public void refreshRow() throws java.sql.SQLException;
+    method public boolean relative(int) throws java.sql.SQLException;
+    method public boolean rowDeleted() throws java.sql.SQLException;
+    method public boolean rowInserted() throws java.sql.SQLException;
+    method public boolean rowUpdated() throws java.sql.SQLException;
+    method public void setFetchDirection(int) throws java.sql.SQLException;
+    method public void setFetchSize(int) throws java.sql.SQLException;
+    method public void updateArray(int, java.sql.Array) throws java.sql.SQLException;
+    method public void updateArray(String, java.sql.Array) throws java.sql.SQLException;
+    method public void updateAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateAsciiStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateAsciiStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateAsciiStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateAsciiStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void updateBigDecimal(String, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void updateBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateBinaryStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void updateBinaryStream(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBinaryStream(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBinaryStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBlob(int, java.sql.Blob) throws java.sql.SQLException;
+    method public void updateBlob(String, java.sql.Blob) throws java.sql.SQLException;
+    method public void updateBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBlob(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void updateBlob(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBlob(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void updateBoolean(int, boolean) throws java.sql.SQLException;
+    method public void updateBoolean(String, boolean) throws java.sql.SQLException;
+    method public void updateByte(int, byte) throws java.sql.SQLException;
+    method public void updateByte(String, byte) throws java.sql.SQLException;
+    method public void updateBytes(int, byte[]) throws java.sql.SQLException;
+    method public void updateBytes(String, byte[]) throws java.sql.SQLException;
+    method public void updateCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public void updateCharacterStream(String, java.io.Reader, int) throws java.sql.SQLException;
+    method public void updateCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateClob(int, java.sql.Clob) throws java.sql.SQLException;
+    method public void updateClob(String, java.sql.Clob) throws java.sql.SQLException;
+    method public void updateClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateDate(int, java.sql.Date) throws java.sql.SQLException;
+    method public void updateDate(String, java.sql.Date) throws java.sql.SQLException;
+    method public void updateDouble(int, double) throws java.sql.SQLException;
+    method public void updateDouble(String, double) throws java.sql.SQLException;
+    method public void updateFloat(int, float) throws java.sql.SQLException;
+    method public void updateFloat(String, float) throws java.sql.SQLException;
+    method public void updateInt(int, int) throws java.sql.SQLException;
+    method public void updateInt(String, int) throws java.sql.SQLException;
+    method public void updateLong(int, long) throws java.sql.SQLException;
+    method public void updateLong(String, long) throws java.sql.SQLException;
+    method public void updateNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNClob(int, java.sql.NClob) throws java.sql.SQLException;
+    method public void updateNClob(String, java.sql.NClob) throws java.sql.SQLException;
+    method public void updateNClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void updateNClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void updateNString(int, String) throws java.sql.SQLException;
+    method public void updateNString(String, String) throws java.sql.SQLException;
+    method public void updateNull(int) throws java.sql.SQLException;
+    method public void updateNull(String) throws java.sql.SQLException;
+    method public void updateObject(int, Object, int) throws java.sql.SQLException;
+    method public void updateObject(int, Object) throws java.sql.SQLException;
+    method public void updateObject(String, Object, int) throws java.sql.SQLException;
+    method public void updateObject(String, Object) throws java.sql.SQLException;
+    method public void updateRef(int, java.sql.Ref) throws java.sql.SQLException;
+    method public void updateRef(String, java.sql.Ref) throws java.sql.SQLException;
+    method public void updateRow() throws java.sql.SQLException;
+    method public void updateRowId(int, java.sql.RowId) throws java.sql.SQLException;
+    method public void updateRowId(String, java.sql.RowId) throws java.sql.SQLException;
+    method public void updateSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void updateSQLXML(String, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void updateShort(int, short) throws java.sql.SQLException;
+    method public void updateShort(String, short) throws java.sql.SQLException;
+    method public void updateString(int, String) throws java.sql.SQLException;
+    method public void updateString(String, String) throws java.sql.SQLException;
+    method public void updateTime(int, java.sql.Time) throws java.sql.SQLException;
+    method public void updateTime(String, java.sql.Time) throws java.sql.SQLException;
+    method public void updateTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void updateTimestamp(String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public boolean wasNull() throws java.sql.SQLException;
+    field public static final int CLOSE_CURSORS_AT_COMMIT = 2; // 0x2
+    field public static final int CONCUR_READ_ONLY = 1007; // 0x3ef
+    field public static final int CONCUR_UPDATABLE = 1008; // 0x3f0
+    field public static final int FETCH_FORWARD = 1000; // 0x3e8
+    field public static final int FETCH_REVERSE = 1001; // 0x3e9
+    field public static final int FETCH_UNKNOWN = 1002; // 0x3ea
+    field public static final int HOLD_CURSORS_OVER_COMMIT = 1; // 0x1
+    field public static final int TYPE_FORWARD_ONLY = 1003; // 0x3eb
+    field public static final int TYPE_SCROLL_INSENSITIVE = 1004; // 0x3ec
+    field public static final int TYPE_SCROLL_SENSITIVE = 1005; // 0x3ed
+  }
+
+  public interface ResultSetMetaData extends java.sql.Wrapper {
+    method public String getCatalogName(int) throws java.sql.SQLException;
+    method public String getColumnClassName(int) throws java.sql.SQLException;
+    method public int getColumnCount() throws java.sql.SQLException;
+    method public int getColumnDisplaySize(int) throws java.sql.SQLException;
+    method public String getColumnLabel(int) throws java.sql.SQLException;
+    method public String getColumnName(int) throws java.sql.SQLException;
+    method public int getColumnType(int) throws java.sql.SQLException;
+    method public String getColumnTypeName(int) throws java.sql.SQLException;
+    method public int getPrecision(int) throws java.sql.SQLException;
+    method public int getScale(int) throws java.sql.SQLException;
+    method public String getSchemaName(int) throws java.sql.SQLException;
+    method public String getTableName(int) throws java.sql.SQLException;
+    method public boolean isAutoIncrement(int) throws java.sql.SQLException;
+    method public boolean isCaseSensitive(int) throws java.sql.SQLException;
+    method public boolean isCurrency(int) throws java.sql.SQLException;
+    method public boolean isDefinitelyWritable(int) throws java.sql.SQLException;
+    method public int isNullable(int) throws java.sql.SQLException;
+    method public boolean isReadOnly(int) throws java.sql.SQLException;
+    method public boolean isSearchable(int) throws java.sql.SQLException;
+    method public boolean isSigned(int) throws java.sql.SQLException;
+    method public boolean isWritable(int) throws java.sql.SQLException;
+    field public static final int columnNoNulls = 0; // 0x0
+    field public static final int columnNullable = 1; // 0x1
+    field public static final int columnNullableUnknown = 2; // 0x2
+  }
+
+  public interface RowId {
+    method public boolean equals(Object);
+    method public byte[] getBytes();
+    method public int hashCode();
+    method public String toString();
+  }
+
+  public enum RowIdLifetime {
+    enum_constant public static final java.sql.RowIdLifetime ROWID_UNSUPPORTED;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_FOREVER;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_OTHER;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_SESSION;
+    enum_constant public static final java.sql.RowIdLifetime ROWID_VALID_TRANSACTION;
+  }
+
+  public class SQLClientInfoException extends java.sql.SQLException {
+    ctor public SQLClientInfoException();
+    ctor public SQLClientInfoException(java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    ctor public SQLClientInfoException(String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    ctor public SQLClientInfoException(String, String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(String, String, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    ctor public SQLClientInfoException(String, String, int, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>);
+    ctor public SQLClientInfoException(String, String, int, java.util.Map<java.lang.String,java.sql.ClientInfoStatus>, Throwable);
+    method public java.util.Map<java.lang.String,java.sql.ClientInfoStatus> getFailedProperties();
+  }
+
+  public interface SQLData {
+    method public String getSQLTypeName() throws java.sql.SQLException;
+    method public void readSQL(java.sql.SQLInput, String) throws java.sql.SQLException;
+    method public void writeSQL(java.sql.SQLOutput) throws java.sql.SQLException;
+  }
+
+  public class SQLDataException extends java.sql.SQLNonTransientException {
+    ctor public SQLDataException();
+    ctor public SQLDataException(String);
+    ctor public SQLDataException(String, String);
+    ctor public SQLDataException(String, String, int);
+    ctor public SQLDataException(Throwable);
+    ctor public SQLDataException(String, Throwable);
+    ctor public SQLDataException(String, String, Throwable);
+    ctor public SQLDataException(String, String, int, Throwable);
+  }
+
+  public class SQLException extends java.lang.Exception implements java.lang.Iterable<java.lang.Throwable> {
+    ctor public SQLException(String, String, int);
+    ctor public SQLException(String, String);
+    ctor public SQLException(String);
+    ctor public SQLException();
+    ctor public SQLException(Throwable);
+    ctor public SQLException(String, Throwable);
+    ctor public SQLException(String, String, Throwable);
+    ctor public SQLException(String, String, int, Throwable);
+    method public int getErrorCode();
+    method public java.sql.SQLException getNextException();
+    method public String getSQLState();
+    method public java.util.Iterator<java.lang.Throwable> iterator();
+    method public void setNextException(java.sql.SQLException);
+  }
+
+  public class SQLFeatureNotSupportedException extends java.sql.SQLNonTransientException {
+    ctor public SQLFeatureNotSupportedException();
+    ctor public SQLFeatureNotSupportedException(String);
+    ctor public SQLFeatureNotSupportedException(String, String);
+    ctor public SQLFeatureNotSupportedException(String, String, int);
+    ctor public SQLFeatureNotSupportedException(Throwable);
+    ctor public SQLFeatureNotSupportedException(String, Throwable);
+    ctor public SQLFeatureNotSupportedException(String, String, Throwable);
+    ctor public SQLFeatureNotSupportedException(String, String, int, Throwable);
+  }
+
+  public interface SQLInput {
+    method public java.sql.Array readArray() throws java.sql.SQLException;
+    method public java.io.InputStream readAsciiStream() throws java.sql.SQLException;
+    method public java.math.BigDecimal readBigDecimal() throws java.sql.SQLException;
+    method public java.io.InputStream readBinaryStream() throws java.sql.SQLException;
+    method public java.sql.Blob readBlob() throws java.sql.SQLException;
+    method public boolean readBoolean() throws java.sql.SQLException;
+    method public byte readByte() throws java.sql.SQLException;
+    method public byte[] readBytes() throws java.sql.SQLException;
+    method public java.io.Reader readCharacterStream() throws java.sql.SQLException;
+    method public java.sql.Clob readClob() throws java.sql.SQLException;
+    method public java.sql.Date readDate() throws java.sql.SQLException;
+    method public double readDouble() throws java.sql.SQLException;
+    method public float readFloat() throws java.sql.SQLException;
+    method public int readInt() throws java.sql.SQLException;
+    method public long readLong() throws java.sql.SQLException;
+    method public java.sql.NClob readNClob() throws java.sql.SQLException;
+    method public String readNString() throws java.sql.SQLException;
+    method public Object readObject() throws java.sql.SQLException;
+    method public java.sql.Ref readRef() throws java.sql.SQLException;
+    method public java.sql.RowId readRowId() throws java.sql.SQLException;
+    method public java.sql.SQLXML readSQLXML() throws java.sql.SQLException;
+    method public short readShort() throws java.sql.SQLException;
+    method public String readString() throws java.sql.SQLException;
+    method public java.sql.Time readTime() throws java.sql.SQLException;
+    method public java.sql.Timestamp readTimestamp() throws java.sql.SQLException;
+    method public java.net.URL readURL() throws java.sql.SQLException;
+    method public boolean wasNull() throws java.sql.SQLException;
+  }
+
+  public class SQLIntegrityConstraintViolationException extends java.sql.SQLNonTransientException {
+    ctor public SQLIntegrityConstraintViolationException();
+    ctor public SQLIntegrityConstraintViolationException(String);
+    ctor public SQLIntegrityConstraintViolationException(String, String);
+    ctor public SQLIntegrityConstraintViolationException(String, String, int);
+    ctor public SQLIntegrityConstraintViolationException(Throwable);
+    ctor public SQLIntegrityConstraintViolationException(String, Throwable);
+    ctor public SQLIntegrityConstraintViolationException(String, String, Throwable);
+    ctor public SQLIntegrityConstraintViolationException(String, String, int, Throwable);
+  }
+
+  public class SQLInvalidAuthorizationSpecException extends java.sql.SQLNonTransientException {
+    ctor public SQLInvalidAuthorizationSpecException();
+    ctor public SQLInvalidAuthorizationSpecException(String);
+    ctor public SQLInvalidAuthorizationSpecException(String, String);
+    ctor public SQLInvalidAuthorizationSpecException(String, String, int);
+    ctor public SQLInvalidAuthorizationSpecException(Throwable);
+    ctor public SQLInvalidAuthorizationSpecException(String, Throwable);
+    ctor public SQLInvalidAuthorizationSpecException(String, String, Throwable);
+    ctor public SQLInvalidAuthorizationSpecException(String, String, int, Throwable);
+  }
+
+  public class SQLNonTransientConnectionException extends java.sql.SQLNonTransientException {
+    ctor public SQLNonTransientConnectionException();
+    ctor public SQLNonTransientConnectionException(String);
+    ctor public SQLNonTransientConnectionException(String, String);
+    ctor public SQLNonTransientConnectionException(String, String, int);
+    ctor public SQLNonTransientConnectionException(Throwable);
+    ctor public SQLNonTransientConnectionException(String, Throwable);
+    ctor public SQLNonTransientConnectionException(String, String, Throwable);
+    ctor public SQLNonTransientConnectionException(String, String, int, Throwable);
+  }
+
+  public class SQLNonTransientException extends java.sql.SQLException {
+    ctor public SQLNonTransientException();
+    ctor public SQLNonTransientException(String);
+    ctor public SQLNonTransientException(String, String);
+    ctor public SQLNonTransientException(String, String, int);
+    ctor public SQLNonTransientException(Throwable);
+    ctor public SQLNonTransientException(String, Throwable);
+    ctor public SQLNonTransientException(String, String, Throwable);
+    ctor public SQLNonTransientException(String, String, int, Throwable);
+  }
+
+  public interface SQLOutput {
+    method public void writeArray(java.sql.Array) throws java.sql.SQLException;
+    method public void writeAsciiStream(java.io.InputStream) throws java.sql.SQLException;
+    method public void writeBigDecimal(java.math.BigDecimal) throws java.sql.SQLException;
+    method public void writeBinaryStream(java.io.InputStream) throws java.sql.SQLException;
+    method public void writeBlob(java.sql.Blob) throws java.sql.SQLException;
+    method public void writeBoolean(boolean) throws java.sql.SQLException;
+    method public void writeByte(byte) throws java.sql.SQLException;
+    method public void writeBytes(byte[]) throws java.sql.SQLException;
+    method public void writeCharacterStream(java.io.Reader) throws java.sql.SQLException;
+    method public void writeClob(java.sql.Clob) throws java.sql.SQLException;
+    method public void writeDate(java.sql.Date) throws java.sql.SQLException;
+    method public void writeDouble(double) throws java.sql.SQLException;
+    method public void writeFloat(float) throws java.sql.SQLException;
+    method public void writeInt(int) throws java.sql.SQLException;
+    method public void writeLong(long) throws java.sql.SQLException;
+    method public void writeNClob(java.sql.NClob) throws java.sql.SQLException;
+    method public void writeNString(String) throws java.sql.SQLException;
+    method public void writeObject(java.sql.SQLData) throws java.sql.SQLException;
+    method public void writeRef(java.sql.Ref) throws java.sql.SQLException;
+    method public void writeRowId(java.sql.RowId) throws java.sql.SQLException;
+    method public void writeSQLXML(java.sql.SQLXML) throws java.sql.SQLException;
+    method public void writeShort(short) throws java.sql.SQLException;
+    method public void writeString(String) throws java.sql.SQLException;
+    method public void writeStruct(java.sql.Struct) throws java.sql.SQLException;
+    method public void writeTime(java.sql.Time) throws java.sql.SQLException;
+    method public void writeTimestamp(java.sql.Timestamp) throws java.sql.SQLException;
+    method public void writeURL(java.net.URL) throws java.sql.SQLException;
+  }
+
+  public final class SQLPermission extends java.security.BasicPermission {
+    ctor public SQLPermission(String);
+    ctor public SQLPermission(String, String);
+  }
+
+  public class SQLRecoverableException extends java.sql.SQLException {
+    ctor public SQLRecoverableException();
+    ctor public SQLRecoverableException(String);
+    ctor public SQLRecoverableException(String, String);
+    ctor public SQLRecoverableException(String, String, int);
+    ctor public SQLRecoverableException(Throwable);
+    ctor public SQLRecoverableException(String, Throwable);
+    ctor public SQLRecoverableException(String, String, Throwable);
+    ctor public SQLRecoverableException(String, String, int, Throwable);
+  }
+
+  public class SQLSyntaxErrorException extends java.sql.SQLNonTransientException {
+    ctor public SQLSyntaxErrorException();
+    ctor public SQLSyntaxErrorException(String);
+    ctor public SQLSyntaxErrorException(String, String);
+    ctor public SQLSyntaxErrorException(String, String, int);
+    ctor public SQLSyntaxErrorException(Throwable);
+    ctor public SQLSyntaxErrorException(String, Throwable);
+    ctor public SQLSyntaxErrorException(String, String, Throwable);
+    ctor public SQLSyntaxErrorException(String, String, int, Throwable);
+  }
+
+  public class SQLTimeoutException extends java.sql.SQLTransientException {
+    ctor public SQLTimeoutException();
+    ctor public SQLTimeoutException(String);
+    ctor public SQLTimeoutException(String, String);
+    ctor public SQLTimeoutException(String, String, int);
+    ctor public SQLTimeoutException(Throwable);
+    ctor public SQLTimeoutException(String, Throwable);
+    ctor public SQLTimeoutException(String, String, Throwable);
+    ctor public SQLTimeoutException(String, String, int, Throwable);
+  }
+
+  public class SQLTransactionRollbackException extends java.sql.SQLTransientException {
+    ctor public SQLTransactionRollbackException();
+    ctor public SQLTransactionRollbackException(String);
+    ctor public SQLTransactionRollbackException(String, String);
+    ctor public SQLTransactionRollbackException(String, String, int);
+    ctor public SQLTransactionRollbackException(Throwable);
+    ctor public SQLTransactionRollbackException(String, Throwable);
+    ctor public SQLTransactionRollbackException(String, String, Throwable);
+    ctor public SQLTransactionRollbackException(String, String, int, Throwable);
+  }
+
+  public class SQLTransientConnectionException extends java.sql.SQLTransientException {
+    ctor public SQLTransientConnectionException();
+    ctor public SQLTransientConnectionException(String);
+    ctor public SQLTransientConnectionException(String, String);
+    ctor public SQLTransientConnectionException(String, String, int);
+    ctor public SQLTransientConnectionException(Throwable);
+    ctor public SQLTransientConnectionException(String, Throwable);
+    ctor public SQLTransientConnectionException(String, String, Throwable);
+    ctor public SQLTransientConnectionException(String, String, int, Throwable);
+  }
+
+  public class SQLTransientException extends java.sql.SQLException {
+    ctor public SQLTransientException();
+    ctor public SQLTransientException(String);
+    ctor public SQLTransientException(String, String);
+    ctor public SQLTransientException(String, String, int);
+    ctor public SQLTransientException(Throwable);
+    ctor public SQLTransientException(String, Throwable);
+    ctor public SQLTransientException(String, String, Throwable);
+    ctor public SQLTransientException(String, String, int, Throwable);
+  }
+
+  public class SQLWarning extends java.sql.SQLException {
+    ctor public SQLWarning(String, String, int);
+    ctor public SQLWarning(String, String);
+    ctor public SQLWarning(String);
+    ctor public SQLWarning();
+    ctor public SQLWarning(Throwable);
+    ctor public SQLWarning(String, Throwable);
+    ctor public SQLWarning(String, String, Throwable);
+    ctor public SQLWarning(String, String, int, Throwable);
+    method public java.sql.SQLWarning getNextWarning();
+    method public void setNextWarning(java.sql.SQLWarning);
+  }
+
+  public interface SQLXML {
+    method public void free() throws java.sql.SQLException;
+    method public java.io.InputStream getBinaryStream() throws java.sql.SQLException;
+    method public java.io.Reader getCharacterStream() throws java.sql.SQLException;
+    method public <T extends javax.xml.transform.Source> T getSource(Class<T>) throws java.sql.SQLException;
+    method public String getString() throws java.sql.SQLException;
+    method public java.io.OutputStream setBinaryStream() throws java.sql.SQLException;
+    method public java.io.Writer setCharacterStream() throws java.sql.SQLException;
+    method public <T extends javax.xml.transform.Result> T setResult(Class<T>) throws java.sql.SQLException;
+    method public void setString(String) throws java.sql.SQLException;
+  }
+
+  public interface Savepoint {
+    method public int getSavepointId() throws java.sql.SQLException;
+    method public String getSavepointName() throws java.sql.SQLException;
+  }
+
+  public interface Statement extends java.sql.Wrapper java.lang.AutoCloseable {
+    method public void addBatch(String) throws java.sql.SQLException;
+    method public void cancel() throws java.sql.SQLException;
+    method public void clearBatch() throws java.sql.SQLException;
+    method public void clearWarnings() throws java.sql.SQLException;
+    method public void close() throws java.sql.SQLException;
+    method public boolean execute(String) throws java.sql.SQLException;
+    method public boolean execute(String, int) throws java.sql.SQLException;
+    method public boolean execute(String, int[]) throws java.sql.SQLException;
+    method public boolean execute(String, String[]) throws java.sql.SQLException;
+    method public int[] executeBatch() throws java.sql.SQLException;
+    method public java.sql.ResultSet executeQuery(String) throws java.sql.SQLException;
+    method public int executeUpdate(String) throws java.sql.SQLException;
+    method public int executeUpdate(String, int) throws java.sql.SQLException;
+    method public int executeUpdate(String, int[]) throws java.sql.SQLException;
+    method public int executeUpdate(String, String[]) throws java.sql.SQLException;
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public int getFetchDirection() throws java.sql.SQLException;
+    method public int getFetchSize() throws java.sql.SQLException;
+    method public java.sql.ResultSet getGeneratedKeys() throws java.sql.SQLException;
+    method public int getMaxFieldSize() throws java.sql.SQLException;
+    method public int getMaxRows() throws java.sql.SQLException;
+    method public boolean getMoreResults() throws java.sql.SQLException;
+    method public boolean getMoreResults(int) throws java.sql.SQLException;
+    method public int getQueryTimeout() throws java.sql.SQLException;
+    method public java.sql.ResultSet getResultSet() throws java.sql.SQLException;
+    method public int getResultSetConcurrency() throws java.sql.SQLException;
+    method public int getResultSetHoldability() throws java.sql.SQLException;
+    method public int getResultSetType() throws java.sql.SQLException;
+    method public int getUpdateCount() throws java.sql.SQLException;
+    method public java.sql.SQLWarning getWarnings() throws java.sql.SQLException;
+    method public boolean isClosed() throws java.sql.SQLException;
+    method public boolean isPoolable() throws java.sql.SQLException;
+    method public void setCursorName(String) throws java.sql.SQLException;
+    method public void setEscapeProcessing(boolean) throws java.sql.SQLException;
+    method public void setFetchDirection(int) throws java.sql.SQLException;
+    method public void setFetchSize(int) throws java.sql.SQLException;
+    method public void setMaxFieldSize(int) throws java.sql.SQLException;
+    method public void setMaxRows(int) throws java.sql.SQLException;
+    method public void setPoolable(boolean) throws java.sql.SQLException;
+    method public void setQueryTimeout(int) throws java.sql.SQLException;
+    field public static final int CLOSE_ALL_RESULTS = 3; // 0x3
+    field public static final int CLOSE_CURRENT_RESULT = 1; // 0x1
+    field public static final int EXECUTE_FAILED = -3; // 0xfffffffd
+    field public static final int KEEP_CURRENT_RESULT = 2; // 0x2
+    field public static final int NO_GENERATED_KEYS = 2; // 0x2
+    field public static final int RETURN_GENERATED_KEYS = 1; // 0x1
+    field public static final int SUCCESS_NO_INFO = -2; // 0xfffffffe
+  }
+
+  public interface Struct {
+    method public Object[] getAttributes() throws java.sql.SQLException;
+    method public Object[] getAttributes(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public String getSQLTypeName() throws java.sql.SQLException;
+  }
+
+  public class Time extends java.util.Date {
+    ctor @Deprecated public Time(int, int, int);
+    ctor public Time(long);
+    method public static java.sql.Time valueOf(String);
+  }
+
+  public class Timestamp extends java.util.Date {
+    ctor @Deprecated public Timestamp(int, int, int, int, int, int, int);
+    ctor public Timestamp(long);
+    method public boolean after(java.sql.Timestamp);
+    method public boolean before(java.sql.Timestamp);
+    method public int compareTo(java.sql.Timestamp);
+    method public boolean equals(java.sql.Timestamp);
+    method public int getNanos();
+    method public void setNanos(int);
+    method public static java.sql.Timestamp valueOf(String);
+  }
+
+  public class Types {
+    field public static final int ARRAY = 2003; // 0x7d3
+    field public static final int BIGINT = -5; // 0xfffffffb
+    field public static final int BINARY = -2; // 0xfffffffe
+    field public static final int BIT = -7; // 0xfffffff9
+    field public static final int BLOB = 2004; // 0x7d4
+    field public static final int BOOLEAN = 16; // 0x10
+    field public static final int CHAR = 1; // 0x1
+    field public static final int CLOB = 2005; // 0x7d5
+    field public static final int DATALINK = 70; // 0x46
+    field public static final int DATE = 91; // 0x5b
+    field public static final int DECIMAL = 3; // 0x3
+    field public static final int DISTINCT = 2001; // 0x7d1
+    field public static final int DOUBLE = 8; // 0x8
+    field public static final int FLOAT = 6; // 0x6
+    field public static final int INTEGER = 4; // 0x4
+    field public static final int JAVA_OBJECT = 2000; // 0x7d0
+    field public static final int LONGNVARCHAR = -16; // 0xfffffff0
+    field public static final int LONGVARBINARY = -4; // 0xfffffffc
+    field public static final int LONGVARCHAR = -1; // 0xffffffff
+    field public static final int NCHAR = -15; // 0xfffffff1
+    field public static final int NCLOB = 2011; // 0x7db
+    field public static final int NULL = 0; // 0x0
+    field public static final int NUMERIC = 2; // 0x2
+    field public static final int NVARCHAR = -9; // 0xfffffff7
+    field public static final int OTHER = 1111; // 0x457
+    field public static final int REAL = 7; // 0x7
+    field public static final int REF = 2006; // 0x7d6
+    field public static final int ROWID = -8; // 0xfffffff8
+    field public static final int SMALLINT = 5; // 0x5
+    field public static final int SQLXML = 2009; // 0x7d9
+    field public static final int STRUCT = 2002; // 0x7d2
+    field public static final int TIME = 92; // 0x5c
+    field public static final int TIMESTAMP = 93; // 0x5d
+    field public static final int TINYINT = -6; // 0xfffffffa
+    field public static final int VARBINARY = -3; // 0xfffffffd
+    field public static final int VARCHAR = 12; // 0xc
+  }
+
+  public interface Wrapper {
+    method public boolean isWrapperFor(Class<?>) throws java.sql.SQLException;
+    method public <T> T unwrap(Class<T>) throws java.sql.SQLException;
+  }
+
+}
+
+package java.text {
+
+  public class Annotation {
+    ctor public Annotation(Object);
+    method public Object getValue();
+  }
+
+  public interface AttributedCharacterIterator extends java.text.CharacterIterator {
+    method public java.util.Set<java.text.AttributedCharacterIterator.Attribute> getAllAttributeKeys();
+    method public Object getAttribute(java.text.AttributedCharacterIterator.Attribute);
+    method public java.util.Map<java.text.AttributedCharacterIterator.Attribute,java.lang.Object> getAttributes();
+    method public int getRunLimit();
+    method public int getRunLimit(java.text.AttributedCharacterIterator.Attribute);
+    method public int getRunLimit(java.util.Set<? extends java.text.AttributedCharacterIterator.Attribute>);
+    method public int getRunStart();
+    method public int getRunStart(java.text.AttributedCharacterIterator.Attribute);
+    method public int getRunStart(java.util.Set<? extends java.text.AttributedCharacterIterator.Attribute>);
+  }
+
+  public static class AttributedCharacterIterator.Attribute implements java.io.Serializable {
+    ctor protected AttributedCharacterIterator.Attribute(String);
+    method public final boolean equals(Object);
+    method protected String getName();
+    method public final int hashCode();
+    method protected Object readResolve() throws java.io.InvalidObjectException;
+    field public static final java.text.AttributedCharacterIterator.Attribute INPUT_METHOD_SEGMENT;
+    field public static final java.text.AttributedCharacterIterator.Attribute LANGUAGE;
+    field public static final java.text.AttributedCharacterIterator.Attribute READING;
+  }
+
+  public class AttributedString {
+    ctor public AttributedString(String);
+    ctor public AttributedString(String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute,?>);
+    ctor public AttributedString(java.text.AttributedCharacterIterator);
+    ctor public AttributedString(java.text.AttributedCharacterIterator, int, int);
+    ctor public AttributedString(java.text.AttributedCharacterIterator, int, int, java.text.AttributedCharacterIterator.Attribute[]);
+    method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, Object);
+    method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, Object, int, int);
+    method public void addAttributes(java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute,?>, int, int);
+    method public java.text.AttributedCharacterIterator getIterator();
+    method public java.text.AttributedCharacterIterator getIterator(java.text.AttributedCharacterIterator.Attribute[]);
+    method public java.text.AttributedCharacterIterator getIterator(java.text.AttributedCharacterIterator.Attribute[], int, int);
+  }
+
+  public final class Bidi {
+    ctor public Bidi(String, int);
+    ctor public Bidi(java.text.AttributedCharacterIterator);
+    ctor public Bidi(char[], int, byte[], int, int, int);
+    method public boolean baseIsLeftToRight();
+    method public java.text.Bidi createLineBidi(int, int);
+    method public int getBaseLevel();
+    method public int getLength();
+    method public int getLevelAt(int);
+    method public int getRunCount();
+    method public int getRunLevel(int);
+    method public int getRunLimit(int);
+    method public int getRunStart(int);
+    method public boolean isLeftToRight();
+    method public boolean isMixed();
+    method public boolean isRightToLeft();
+    method public static void reorderVisually(byte[], int, Object[], int, int);
+    method public static boolean requiresBidi(char[], int, int);
+    field public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = -2; // 0xfffffffe
+    field public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = -1; // 0xffffffff
+    field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+  }
+
+  public abstract class BreakIterator implements java.lang.Cloneable {
+    ctor protected BreakIterator();
+    method public Object clone();
+    method public abstract int current();
+    method public abstract int first();
+    method public abstract int following(int);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static java.text.BreakIterator getCharacterInstance();
+    method public static java.text.BreakIterator getCharacterInstance(java.util.Locale);
+    method public static java.text.BreakIterator getLineInstance();
+    method public static java.text.BreakIterator getLineInstance(java.util.Locale);
+    method public static java.text.BreakIterator getSentenceInstance();
+    method public static java.text.BreakIterator getSentenceInstance(java.util.Locale);
+    method public abstract java.text.CharacterIterator getText();
+    method public static java.text.BreakIterator getWordInstance();
+    method public static java.text.BreakIterator getWordInstance(java.util.Locale);
+    method public boolean isBoundary(int);
+    method public abstract int last();
+    method public abstract int next(int);
+    method public abstract int next();
+    method public int preceding(int);
+    method public abstract int previous();
+    method public void setText(String);
+    method public abstract void setText(java.text.CharacterIterator);
+    field public static final int DONE = -1; // 0xffffffff
+  }
+
+  public interface CharacterIterator extends java.lang.Cloneable {
+    method public Object clone();
+    method public char current();
+    method public char first();
+    method public int getBeginIndex();
+    method public int getEndIndex();
+    method public int getIndex();
+    method public char last();
+    method public char next();
+    method public char previous();
+    method public char setIndex(int);
+    field public static final char DONE = 65535; // 0xffff '\uffff'
+  }
+
+  public class ChoiceFormat extends java.text.NumberFormat {
+    ctor public ChoiceFormat(String);
+    ctor public ChoiceFormat(double[], String[]);
+    method public void applyPattern(String);
+    method public StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public Object[] getFormats();
+    method public double[] getLimits();
+    method public static final double nextDouble(double);
+    method public static double nextDouble(double, boolean);
+    method public Number parse(String, java.text.ParsePosition);
+    method public static final double previousDouble(double);
+    method public void setChoices(double[], String[]);
+    method public String toPattern();
+  }
+
+  public final class CollationElementIterator {
+    method public int getMaxExpansion(int);
+    method public int getOffset();
+    method public int next();
+    method public int previous();
+    method public static int primaryOrder(int);
+    method public void reset();
+    method public static short secondaryOrder(int);
+    method public void setOffset(int);
+    method public void setText(String);
+    method public void setText(java.text.CharacterIterator);
+    method public static short tertiaryOrder(int);
+    field public static final int NULLORDER = -1; // 0xffffffff
+  }
+
+  public abstract class CollationKey implements java.lang.Comparable<java.text.CollationKey> {
+    ctor protected CollationKey(String);
+    method public abstract int compareTo(java.text.CollationKey);
+    method public String getSourceString();
+    method public abstract byte[] toByteArray();
+  }
+
+  public abstract class Collator implements java.lang.Cloneable java.util.Comparator<java.lang.Object> {
+    ctor protected Collator();
+    method public Object clone();
+    method public abstract int compare(String, String);
+    method public int compare(Object, Object);
+    method public boolean equals(String, String);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public abstract java.text.CollationKey getCollationKey(String);
+    method public int getDecomposition();
+    method public static java.text.Collator getInstance();
+    method public static java.text.Collator getInstance(java.util.Locale);
+    method public int getStrength();
+    method public abstract int hashCode();
+    method public void setDecomposition(int);
+    method public void setStrength(int);
+    field public static final int CANONICAL_DECOMPOSITION = 1; // 0x1
+    field public static final int FULL_DECOMPOSITION = 2; // 0x2
+    field public static final int IDENTICAL = 3; // 0x3
+    field public static final int NO_DECOMPOSITION = 0; // 0x0
+    field public static final int PRIMARY = 0; // 0x0
+    field public static final int SECONDARY = 1; // 0x1
+    field public static final int TERTIARY = 2; // 0x2
+  }
+
+  public abstract class DateFormat extends java.text.Format {
+    ctor protected DateFormat();
+    method @NonNull public final StringBuffer format(@NonNull Object, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public abstract StringBuffer format(@NonNull java.util.Date, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public final String format(@NonNull java.util.Date);
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @NonNull public java.util.Calendar getCalendar();
+    method @NonNull public static final java.text.DateFormat getDateInstance();
+    method @NonNull public static final java.text.DateFormat getDateInstance(int);
+    method @NonNull public static final java.text.DateFormat getDateInstance(int, @NonNull java.util.Locale);
+    method @NonNull public static final java.text.DateFormat getDateTimeInstance();
+    method @NonNull public static final java.text.DateFormat getDateTimeInstance(int, int);
+    method @NonNull public static final java.text.DateFormat getDateTimeInstance(int, int, @NonNull java.util.Locale);
+    method @NonNull public static final java.text.DateFormat getInstance();
+    method @NonNull public java.text.NumberFormat getNumberFormat();
+    method @NonNull public static final java.text.DateFormat getTimeInstance();
+    method @NonNull public static final java.text.DateFormat getTimeInstance(int);
+    method @NonNull public static final java.text.DateFormat getTimeInstance(int, @NonNull java.util.Locale);
+    method @NonNull public java.util.TimeZone getTimeZone();
+    method public boolean isLenient();
+    method @Nullable public java.util.Date parse(@NonNull String) throws java.text.ParseException;
+    method @Nullable public abstract java.util.Date parse(@NonNull String, @NonNull java.text.ParsePosition);
+    method @Nullable public Object parseObject(@NonNull String, @NonNull java.text.ParsePosition);
+    method public void setCalendar(@NonNull java.util.Calendar);
+    method public void setLenient(boolean);
+    method public void setNumberFormat(@NonNull java.text.NumberFormat);
+    method public void setTimeZone(@NonNull java.util.TimeZone);
+    field public static final int AM_PM_FIELD = 14; // 0xe
+    field public static final int DATE_FIELD = 3; // 0x3
+    field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
+    field public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; // 0xb
+    field public static final int DAY_OF_YEAR_FIELD = 10; // 0xa
+    field public static final int DEFAULT = 2; // 0x2
+    field public static final int ERA_FIELD = 0; // 0x0
+    field public static final int FULL = 0; // 0x0
+    field public static final int HOUR0_FIELD = 16; // 0x10
+    field public static final int HOUR1_FIELD = 15; // 0xf
+    field public static final int HOUR_OF_DAY0_FIELD = 5; // 0x5
+    field public static final int HOUR_OF_DAY1_FIELD = 4; // 0x4
+    field public static final int LONG = 1; // 0x1
+    field public static final int MEDIUM = 2; // 0x2
+    field public static final int MILLISECOND_FIELD = 8; // 0x8
+    field public static final int MINUTE_FIELD = 6; // 0x6
+    field public static final int MONTH_FIELD = 2; // 0x2
+    field public static final int SECOND_FIELD = 7; // 0x7
+    field public static final int SHORT = 3; // 0x3
+    field public static final int TIMEZONE_FIELD = 17; // 0x11
+    field public static final int WEEK_OF_MONTH_FIELD = 13; // 0xd
+    field public static final int WEEK_OF_YEAR_FIELD = 12; // 0xc
+    field public static final int YEAR_FIELD = 1; // 0x1
+    field @NonNull protected java.util.Calendar calendar;
+    field @NonNull protected java.text.NumberFormat numberFormat;
+  }
+
+  public static class DateFormat.Field extends java.text.Format.Field {
+    ctor protected DateFormat.Field(@NonNull String, int);
+    method public int getCalendarField();
+    method @NonNull public static java.text.DateFormat.Field ofCalendarField(int);
+    field @NonNull public static final java.text.DateFormat.Field AM_PM;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_MONTH;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_WEEK;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
+    field @NonNull public static final java.text.DateFormat.Field DAY_OF_YEAR;
+    field @NonNull public static final java.text.DateFormat.Field ERA;
+    field @NonNull public static final java.text.DateFormat.Field HOUR0;
+    field @NonNull public static final java.text.DateFormat.Field HOUR1;
+    field @NonNull public static final java.text.DateFormat.Field HOUR_OF_DAY0;
+    field @NonNull public static final java.text.DateFormat.Field HOUR_OF_DAY1;
+    field @NonNull public static final java.text.DateFormat.Field MILLISECOND;
+    field @NonNull public static final java.text.DateFormat.Field MINUTE;
+    field @NonNull public static final java.text.DateFormat.Field MONTH;
+    field @NonNull public static final java.text.DateFormat.Field SECOND;
+    field @NonNull public static final java.text.DateFormat.Field TIME_ZONE;
+    field @NonNull public static final java.text.DateFormat.Field WEEK_OF_MONTH;
+    field @NonNull public static final java.text.DateFormat.Field WEEK_OF_YEAR;
+    field @NonNull public static final java.text.DateFormat.Field YEAR;
+  }
+
+  public class DateFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DateFormatSymbols();
+    ctor public DateFormatSymbols(java.util.Locale);
+    method public Object clone();
+    method public String[] getAmPmStrings();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public String[] getEras();
+    method public static final java.text.DateFormatSymbols getInstance();
+    method public static final java.text.DateFormatSymbols getInstance(java.util.Locale);
+    method public String getLocalPatternChars();
+    method public String[] getMonths();
+    method public String[] getShortMonths();
+    method public String[] getShortWeekdays();
+    method public String[] getWeekdays();
+    method public String[][] getZoneStrings();
+    method public void setAmPmStrings(String[]);
+    method public void setEras(String[]);
+    method public void setLocalPatternChars(String);
+    method public void setMonths(String[]);
+    method public void setShortMonths(String[]);
+    method public void setShortWeekdays(String[]);
+    method public void setWeekdays(String[]);
+    method public void setZoneStrings(String[][]);
+  }
+
+  public class DecimalFormat extends java.text.NumberFormat {
+    ctor public DecimalFormat();
+    ctor public DecimalFormat(String);
+    ctor public DecimalFormat(String, java.text.DecimalFormatSymbols);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public java.text.DecimalFormatSymbols getDecimalFormatSymbols();
+    method public int getGroupingSize();
+    method public int getMultiplier();
+    method public String getNegativePrefix();
+    method public String getNegativeSuffix();
+    method public String getPositivePrefix();
+    method public String getPositiveSuffix();
+    method public boolean isDecimalSeparatorAlwaysShown();
+    method public boolean isParseBigDecimal();
+    method public Number parse(String, java.text.ParsePosition);
+    method public void setDecimalFormatSymbols(java.text.DecimalFormatSymbols);
+    method public void setDecimalSeparatorAlwaysShown(boolean);
+    method public void setGroupingSize(int);
+    method public void setMultiplier(int);
+    method public void setNegativePrefix(String);
+    method public void setNegativeSuffix(String);
+    method public void setParseBigDecimal(boolean);
+    method public void setPositivePrefix(String);
+    method public void setPositiveSuffix(String);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+  }
+
+  public class DecimalFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DecimalFormatSymbols();
+    ctor public DecimalFormatSymbols(java.util.Locale);
+    method public Object clone();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public java.util.Currency getCurrency();
+    method public String getCurrencySymbol();
+    method public char getDecimalSeparator();
+    method public char getDigit();
+    method public String getExponentSeparator();
+    method public char getGroupingSeparator();
+    method public String getInfinity();
+    method public static final java.text.DecimalFormatSymbols getInstance();
+    method public static final java.text.DecimalFormatSymbols getInstance(java.util.Locale);
+    method public String getInternationalCurrencySymbol();
+    method public char getMinusSign();
+    method public char getMonetaryDecimalSeparator();
+    method public String getNaN();
+    method public char getPatternSeparator();
+    method public char getPerMill();
+    method public char getPercent();
+    method public char getZeroDigit();
+    method public void setCurrency(java.util.Currency);
+    method public void setCurrencySymbol(String);
+    method public void setDecimalSeparator(char);
+    method public void setDigit(char);
+    method public void setExponentSeparator(String);
+    method public void setGroupingSeparator(char);
+    method public void setInfinity(String);
+    method public void setInternationalCurrencySymbol(String);
+    method public void setMinusSign(char);
+    method public void setMonetaryDecimalSeparator(char);
+    method public void setNaN(String);
+    method public void setPatternSeparator(char);
+    method public void setPerMill(char);
+    method public void setPercent(char);
+    method public void setZeroDigit(char);
+  }
+
+  public class FieldPosition {
+    ctor public FieldPosition(int);
+    ctor public FieldPosition(java.text.Format.Field);
+    ctor public FieldPosition(java.text.Format.Field, int);
+    method public int getBeginIndex();
+    method public int getEndIndex();
+    method public int getField();
+    method public java.text.Format.Field getFieldAttribute();
+    method public void setBeginIndex(int);
+    method public void setEndIndex(int);
+  }
+
+  public abstract class Format implements java.lang.Cloneable java.io.Serializable {
+    ctor protected Format();
+    method public Object clone();
+    method public final String format(Object);
+    method public abstract StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public java.text.AttributedCharacterIterator formatToCharacterIterator(Object);
+    method public abstract Object parseObject(String, java.text.ParsePosition);
+    method public Object parseObject(String) throws java.text.ParseException;
+  }
+
+  public static class Format.Field extends java.text.AttributedCharacterIterator.Attribute {
+    ctor protected Format.Field(String);
+  }
+
+  public class MessageFormat extends java.text.Format {
+    ctor public MessageFormat(String);
+    ctor public MessageFormat(String, java.util.Locale);
+    method public void applyPattern(String);
+    method public final StringBuffer format(Object[], StringBuffer, java.text.FieldPosition);
+    method public static String format(String, java.lang.Object...);
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public java.text.Format[] getFormats();
+    method public java.text.Format[] getFormatsByArgumentIndex();
+    method public java.util.Locale getLocale();
+    method public Object[] parse(String, java.text.ParsePosition);
+    method public Object[] parse(String) throws java.text.ParseException;
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public void setFormat(int, java.text.Format);
+    method public void setFormatByArgumentIndex(int, java.text.Format);
+    method public void setFormats(java.text.Format[]);
+    method public void setFormatsByArgumentIndex(java.text.Format[]);
+    method public void setLocale(java.util.Locale);
+    method public String toPattern();
+  }
+
+  public static class MessageFormat.Field extends java.text.Format.Field {
+    ctor protected MessageFormat.Field(String);
+    field public static final java.text.MessageFormat.Field ARGUMENT;
+  }
+
+  public final class Normalizer {
+    method public static boolean isNormalized(CharSequence, java.text.Normalizer.Form);
+    method public static String normalize(CharSequence, java.text.Normalizer.Form);
+  }
+
+  public enum Normalizer.Form {
+    enum_constant public static final java.text.Normalizer.Form NFC;
+    enum_constant public static final java.text.Normalizer.Form NFD;
+    enum_constant public static final java.text.Normalizer.Form NFKC;
+    enum_constant public static final java.text.Normalizer.Form NFKD;
+  }
+
+  public abstract class NumberFormat extends java.text.Format {
+    ctor protected NumberFormat();
+    method @NonNull public StringBuffer format(@NonNull Object, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public final String format(double);
+    method @NonNull public final String format(long);
+    method @NonNull public abstract StringBuffer format(double, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public abstract StringBuffer format(long, @NonNull StringBuffer, @NonNull java.text.FieldPosition);
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @Nullable public java.util.Currency getCurrency();
+    method @NonNull public static final java.text.NumberFormat getCurrencyInstance();
+    method @NonNull public static java.text.NumberFormat getCurrencyInstance(@NonNull java.util.Locale);
+    method @NonNull public static final java.text.NumberFormat getInstance();
+    method @NonNull public static java.text.NumberFormat getInstance(@NonNull java.util.Locale);
+    method @NonNull public static final java.text.NumberFormat getIntegerInstance();
+    method @NonNull public static java.text.NumberFormat getIntegerInstance(@NonNull java.util.Locale);
+    method public int getMaximumFractionDigits();
+    method public int getMaximumIntegerDigits();
+    method public int getMinimumFractionDigits();
+    method public int getMinimumIntegerDigits();
+    method @NonNull public static final java.text.NumberFormat getNumberInstance();
+    method @NonNull public static java.text.NumberFormat getNumberInstance(@NonNull java.util.Locale);
+    method @NonNull public static final java.text.NumberFormat getPercentInstance();
+    method @NonNull public static java.text.NumberFormat getPercentInstance(@NonNull java.util.Locale);
+    method @NonNull public java.math.RoundingMode getRoundingMode();
+    method public boolean isGroupingUsed();
+    method public boolean isParseIntegerOnly();
+    method @Nullable public abstract Number parse(@NonNull String, @NonNull java.text.ParsePosition);
+    method @Nullable public Number parse(@NonNull String) throws java.text.ParseException;
+    method @Nullable public final Object parseObject(@NonNull String, @NonNull java.text.ParsePosition);
+    method public void setCurrency(@NonNull java.util.Currency);
+    method public void setGroupingUsed(boolean);
+    method public void setMaximumFractionDigits(int);
+    method public void setMaximumIntegerDigits(int);
+    method public void setMinimumFractionDigits(int);
+    method public void setMinimumIntegerDigits(int);
+    method public void setParseIntegerOnly(boolean);
+    method public void setRoundingMode(@Nullable java.math.RoundingMode);
+    field public static final int FRACTION_FIELD = 1; // 0x1
+    field public static final int INTEGER_FIELD = 0; // 0x0
+  }
+
+  public static class NumberFormat.Field extends java.text.Format.Field {
+    ctor protected NumberFormat.Field(@NonNull String);
+    field @NonNull public static final java.text.NumberFormat.Field CURRENCY;
+    field @NonNull public static final java.text.NumberFormat.Field DECIMAL_SEPARATOR;
+    field @NonNull public static final java.text.NumberFormat.Field EXPONENT;
+    field @NonNull public static final java.text.NumberFormat.Field EXPONENT_SIGN;
+    field @NonNull public static final java.text.NumberFormat.Field EXPONENT_SYMBOL;
+    field @NonNull public static final java.text.NumberFormat.Field FRACTION;
+    field @NonNull public static final java.text.NumberFormat.Field GROUPING_SEPARATOR;
+    field @NonNull public static final java.text.NumberFormat.Field INTEGER;
+    field @NonNull public static final java.text.NumberFormat.Field PERCENT;
+    field @NonNull public static final java.text.NumberFormat.Field PERMILLE;
+    field @NonNull public static final java.text.NumberFormat.Field SIGN;
+  }
+
+  public class ParseException extends java.lang.Exception {
+    ctor public ParseException(String, int);
+    method public int getErrorOffset();
+  }
+
+  public class ParsePosition {
+    ctor public ParsePosition(int);
+    method public int getErrorIndex();
+    method public int getIndex();
+    method public void setErrorIndex(int);
+    method public void setIndex(int);
+  }
+
+  public class RuleBasedCollator extends java.text.Collator {
+    ctor public RuleBasedCollator(String) throws java.text.ParseException;
+    method public int compare(String, String);
+    method public java.text.CollationElementIterator getCollationElementIterator(String);
+    method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public java.text.CollationKey getCollationKey(String);
+    method public String getRules();
+  }
+
+  public class SimpleDateFormat extends java.text.DateFormat {
+    ctor public SimpleDateFormat();
+    ctor public SimpleDateFormat(String);
+    ctor public SimpleDateFormat(String, java.util.Locale);
+    ctor public SimpleDateFormat(String, java.text.DateFormatSymbols);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public StringBuffer format(java.util.Date, StringBuffer, java.text.FieldPosition);
+    method public java.util.Date get2DigitYearStart();
+    method public java.text.DateFormatSymbols getDateFormatSymbols();
+    method public java.util.Date parse(String, java.text.ParsePosition);
+    method public void set2DigitYearStart(java.util.Date);
+    method public void setDateFormatSymbols(java.text.DateFormatSymbols);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+  }
+
+  public final class StringCharacterIterator implements java.text.CharacterIterator {
+    ctor public StringCharacterIterator(String);
+    ctor public StringCharacterIterator(String, int);
+    ctor public StringCharacterIterator(String, int, int, int);
+    method public Object clone();
+    method public char current();
+    method public char first();
+    method public int getBeginIndex();
+    method public int getEndIndex();
+    method public int getIndex();
+    method public char last();
+    method public char next();
+    method public char previous();
+    method public char setIndex(int);
+    method public void setText(String);
+  }
+
+}
+
+package java.time {
+
+  public abstract class Clock {
+    ctor protected Clock();
+    method public static java.time.Clock fixed(java.time.Instant, java.time.ZoneId);
+    method public abstract java.time.ZoneId getZone();
+    method public abstract java.time.Instant instant();
+    method public long millis();
+    method public static java.time.Clock offset(java.time.Clock, java.time.Duration);
+    method public static java.time.Clock system(java.time.ZoneId);
+    method public static java.time.Clock systemDefaultZone();
+    method public static java.time.Clock systemUTC();
+    method public static java.time.Clock tick(java.time.Clock, java.time.Duration);
+    method public static java.time.Clock tickMinutes(java.time.ZoneId);
+    method public static java.time.Clock tickSeconds(java.time.ZoneId);
+    method public abstract java.time.Clock withZone(java.time.ZoneId);
+  }
+
+  public class DateTimeException extends java.lang.RuntimeException {
+    ctor public DateTimeException(String);
+    ctor public DateTimeException(String, Throwable);
+  }
+
+  public enum DayOfWeek implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public static java.time.DayOfWeek from(java.time.temporal.TemporalAccessor);
+    method public String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.DayOfWeek minus(long);
+    method public static java.time.DayOfWeek of(int);
+    method public java.time.DayOfWeek plus(long);
+    enum_constant public static final java.time.DayOfWeek FRIDAY;
+    enum_constant public static final java.time.DayOfWeek MONDAY;
+    enum_constant public static final java.time.DayOfWeek SATURDAY;
+    enum_constant public static final java.time.DayOfWeek SUNDAY;
+    enum_constant public static final java.time.DayOfWeek THURSDAY;
+    enum_constant public static final java.time.DayOfWeek TUESDAY;
+    enum_constant public static final java.time.DayOfWeek WEDNESDAY;
+  }
+
+  public final class Duration implements java.lang.Comparable<java.time.Duration> java.io.Serializable java.time.temporal.TemporalAmount {
+    method public java.time.Duration abs();
+    method public java.time.temporal.Temporal addTo(java.time.temporal.Temporal);
+    method public static java.time.Duration between(java.time.temporal.Temporal, java.time.temporal.Temporal);
+    method public int compareTo(java.time.Duration);
+    method public java.time.Duration dividedBy(long);
+    method public long dividedBy(java.time.Duration);
+    method public static java.time.Duration from(java.time.temporal.TemporalAmount);
+    method public long get(java.time.temporal.TemporalUnit);
+    method public int getNano();
+    method public long getSeconds();
+    method public java.util.List<java.time.temporal.TemporalUnit> getUnits();
+    method public boolean isNegative();
+    method public boolean isZero();
+    method public java.time.Duration minus(java.time.Duration);
+    method public java.time.Duration minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Duration minusDays(long);
+    method public java.time.Duration minusHours(long);
+    method public java.time.Duration minusMillis(long);
+    method public java.time.Duration minusMinutes(long);
+    method public java.time.Duration minusNanos(long);
+    method public java.time.Duration minusSeconds(long);
+    method public java.time.Duration multipliedBy(long);
+    method public java.time.Duration negated();
+    method public static java.time.Duration of(long, java.time.temporal.TemporalUnit);
+    method public static java.time.Duration ofDays(long);
+    method public static java.time.Duration ofHours(long);
+    method public static java.time.Duration ofMillis(long);
+    method public static java.time.Duration ofMinutes(long);
+    method public static java.time.Duration ofNanos(long);
+    method public static java.time.Duration ofSeconds(long);
+    method public static java.time.Duration ofSeconds(long, long);
+    method public static java.time.Duration parse(CharSequence);
+    method public java.time.Duration plus(java.time.Duration);
+    method public java.time.Duration plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Duration plusDays(long);
+    method public java.time.Duration plusHours(long);
+    method public java.time.Duration plusMillis(long);
+    method public java.time.Duration plusMinutes(long);
+    method public java.time.Duration plusNanos(long);
+    method public java.time.Duration plusSeconds(long);
+    method public java.time.temporal.Temporal subtractFrom(java.time.temporal.Temporal);
+    method public long toDays();
+    method public long toDaysPart();
+    method public long toHours();
+    method public int toHoursPart();
+    method public long toMillis();
+    method public int toMillisPart();
+    method public long toMinutes();
+    method public int toMinutesPart();
+    method public long toNanos();
+    method public int toNanosPart();
+    method public long toSeconds();
+    method public int toSecondsPart();
+    method public java.time.Duration truncatedTo(java.time.temporal.TemporalUnit);
+    method public java.time.Duration withNanos(int);
+    method public java.time.Duration withSeconds(long);
+    field public static final java.time.Duration ZERO;
+  }
+
+  public final class Instant implements java.lang.Comparable<java.time.Instant> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.OffsetDateTime atOffset(java.time.ZoneOffset);
+    method public java.time.ZonedDateTime atZone(java.time.ZoneId);
+    method public int compareTo(java.time.Instant);
+    method public static java.time.Instant from(java.time.temporal.TemporalAccessor);
+    method public long getEpochSecond();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getNano();
+    method public boolean isAfter(java.time.Instant);
+    method public boolean isBefore(java.time.Instant);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.Instant minus(java.time.temporal.TemporalAmount);
+    method public java.time.Instant minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Instant minusMillis(long);
+    method public java.time.Instant minusNanos(long);
+    method public java.time.Instant minusSeconds(long);
+    method public static java.time.Instant now();
+    method public static java.time.Instant now(java.time.Clock);
+    method public static java.time.Instant ofEpochMilli(long);
+    method public static java.time.Instant ofEpochSecond(long);
+    method public static java.time.Instant ofEpochSecond(long, long);
+    method public static java.time.Instant parse(CharSequence);
+    method public java.time.Instant plus(java.time.temporal.TemporalAmount);
+    method public java.time.Instant plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Instant plusMillis(long);
+    method public java.time.Instant plusNanos(long);
+    method public java.time.Instant plusSeconds(long);
+    method public long toEpochMilli();
+    method public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Instant with(java.time.temporal.TemporalAdjuster);
+    method public java.time.Instant with(java.time.temporal.TemporalField, long);
+    field public static final java.time.Instant EPOCH;
+    field public static final java.time.Instant MAX;
+    field public static final java.time.Instant MIN;
+  }
+
+  public final class LocalDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.LocalDateTime atStartOfDay();
+    method public java.time.ZonedDateTime atStartOfDay(java.time.ZoneId);
+    method public java.time.LocalDateTime atTime(java.time.LocalTime);
+    method public java.time.LocalDateTime atTime(int, int);
+    method public java.time.LocalDateTime atTime(int, int, int);
+    method public java.time.LocalDateTime atTime(int, int, int, int);
+    method public java.time.OffsetDateTime atTime(java.time.OffsetTime);
+    method public static java.time.LocalDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.IsoChronology getChronology();
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getYear();
+    method public int lengthOfMonth();
+    method public java.time.LocalDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDate minusDays(long);
+    method public java.time.LocalDate minusMonths(long);
+    method public java.time.LocalDate minusWeeks(long);
+    method public java.time.LocalDate minusYears(long);
+    method public static java.time.LocalDate now();
+    method public static java.time.LocalDate now(java.time.ZoneId);
+    method public static java.time.LocalDate now(java.time.Clock);
+    method public static java.time.LocalDate of(int, java.time.Month, int);
+    method public static java.time.LocalDate of(int, int, int);
+    method public static java.time.LocalDate ofEpochDay(long);
+    method public static java.time.LocalDate ofYearDay(int, int);
+    method public static java.time.LocalDate parse(CharSequence);
+    method public static java.time.LocalDate parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDate plusDays(long);
+    method public java.time.LocalDate plusMonths(long);
+    method public java.time.LocalDate plusWeeks(long);
+    method public java.time.LocalDate plusYears(long);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Period until(java.time.chrono.ChronoLocalDate);
+    method public java.time.LocalDate with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalDate with(java.time.temporal.TemporalField, long);
+    method public java.time.LocalDate withDayOfMonth(int);
+    method public java.time.LocalDate withDayOfYear(int);
+    method public java.time.LocalDate withMonth(int);
+    method public java.time.LocalDate withYear(int);
+    field public static final java.time.LocalDate MAX;
+    field public static final java.time.LocalDate MIN;
+  }
+
+  public final class LocalDateTime implements java.time.chrono.ChronoLocalDateTime<java.time.LocalDate> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.OffsetDateTime atOffset(java.time.ZoneOffset);
+    method public java.time.ZonedDateTime atZone(java.time.ZoneId);
+    method public static java.time.LocalDateTime from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getNano();
+    method public int getSecond();
+    method public int getYear();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.LocalDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDateTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime minusDays(long);
+    method public java.time.LocalDateTime minusHours(long);
+    method public java.time.LocalDateTime minusMinutes(long);
+    method public java.time.LocalDateTime minusMonths(long);
+    method public java.time.LocalDateTime minusNanos(long);
+    method public java.time.LocalDateTime minusSeconds(long);
+    method public java.time.LocalDateTime minusWeeks(long);
+    method public java.time.LocalDateTime minusYears(long);
+    method public static java.time.LocalDateTime now();
+    method public static java.time.LocalDateTime now(java.time.ZoneId);
+    method public static java.time.LocalDateTime now(java.time.Clock);
+    method public static java.time.LocalDateTime of(int, java.time.Month, int, int, int);
+    method public static java.time.LocalDateTime of(int, java.time.Month, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, java.time.Month, int, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, int, int, int, int, int);
+    method public static java.time.LocalDateTime of(int, int, int, int, int, int, int);
+    method public static java.time.LocalDateTime of(java.time.LocalDate, java.time.LocalTime);
+    method public static java.time.LocalDateTime ofEpochSecond(long, int, java.time.ZoneOffset);
+    method public static java.time.LocalDateTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.LocalDateTime parse(CharSequence);
+    method public static java.time.LocalDateTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalDateTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalDateTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime plusDays(long);
+    method public java.time.LocalDateTime plusHours(long);
+    method public java.time.LocalDateTime plusMinutes(long);
+    method public java.time.LocalDateTime plusMonths(long);
+    method public java.time.LocalDateTime plusNanos(long);
+    method public java.time.LocalDateTime plusSeconds(long);
+    method public java.time.LocalDateTime plusWeeks(long);
+    method public java.time.LocalDateTime plusYears(long);
+    method public java.time.LocalDate toLocalDate();
+    method public java.time.LocalTime toLocalTime();
+    method public java.time.LocalDateTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalDateTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalDateTime with(java.time.temporal.TemporalField, long);
+    method public java.time.LocalDateTime withDayOfMonth(int);
+    method public java.time.LocalDateTime withDayOfYear(int);
+    method public java.time.LocalDateTime withHour(int);
+    method public java.time.LocalDateTime withMinute(int);
+    method public java.time.LocalDateTime withMonth(int);
+    method public java.time.LocalDateTime withNano(int);
+    method public java.time.LocalDateTime withSecond(int);
+    method public java.time.LocalDateTime withYear(int);
+    field public static final java.time.LocalDateTime MAX;
+    field public static final java.time.LocalDateTime MIN;
+  }
+
+  public final class LocalTime implements java.lang.Comparable<java.time.LocalTime> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDateTime atDate(java.time.LocalDate);
+    method public java.time.OffsetTime atOffset(java.time.ZoneOffset);
+    method public int compareTo(java.time.LocalTime);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.LocalTime from(java.time.temporal.TemporalAccessor);
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public int getNano();
+    method public int getSecond();
+    method public boolean isAfter(java.time.LocalTime);
+    method public boolean isBefore(java.time.LocalTime);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime minusHours(long);
+    method public java.time.LocalTime minusMinutes(long);
+    method public java.time.LocalTime minusNanos(long);
+    method public java.time.LocalTime minusSeconds(long);
+    method public static java.time.LocalTime now();
+    method public static java.time.LocalTime now(java.time.ZoneId);
+    method public static java.time.LocalTime now(java.time.Clock);
+    method public static java.time.LocalTime of(int, int);
+    method public static java.time.LocalTime of(int, int, int);
+    method public static java.time.LocalTime of(int, int, int, int);
+    method public static java.time.LocalTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.LocalTime ofNanoOfDay(long);
+    method public static java.time.LocalTime ofSecondOfDay(long);
+    method public static java.time.LocalTime parse(CharSequence);
+    method public static java.time.LocalTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.LocalTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.LocalTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime plusHours(long);
+    method public java.time.LocalTime plusMinutes(long);
+    method public java.time.LocalTime plusNanos(long);
+    method public java.time.LocalTime plusSeconds(long);
+    method public long toEpochSecond(java.time.LocalDate, java.time.ZoneOffset);
+    method public long toNanoOfDay();
+    method public int toSecondOfDay();
+    method public java.time.LocalTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.LocalTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.LocalTime with(java.time.temporal.TemporalField, long);
+    method public java.time.LocalTime withHour(int);
+    method public java.time.LocalTime withMinute(int);
+    method public java.time.LocalTime withNano(int);
+    method public java.time.LocalTime withSecond(int);
+    field public static final java.time.LocalTime MAX;
+    field public static final java.time.LocalTime MIDNIGHT;
+    field public static final java.time.LocalTime MIN;
+    field public static final java.time.LocalTime NOON;
+  }
+
+  public enum Month implements java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public int firstDayOfYear(boolean);
+    method public java.time.Month firstMonthOfQuarter();
+    method public static java.time.Month from(java.time.temporal.TemporalAccessor);
+    method public String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public int length(boolean);
+    method public int maxLength();
+    method public int minLength();
+    method public java.time.Month minus(long);
+    method public static java.time.Month of(int);
+    method public java.time.Month plus(long);
+    enum_constant public static final java.time.Month APRIL;
+    enum_constant public static final java.time.Month AUGUST;
+    enum_constant public static final java.time.Month DECEMBER;
+    enum_constant public static final java.time.Month FEBRUARY;
+    enum_constant public static final java.time.Month JANUARY;
+    enum_constant public static final java.time.Month JULY;
+    enum_constant public static final java.time.Month JUNE;
+    enum_constant public static final java.time.Month MARCH;
+    enum_constant public static final java.time.Month MAY;
+    enum_constant public static final java.time.Month NOVEMBER;
+    enum_constant public static final java.time.Month OCTOBER;
+    enum_constant public static final java.time.Month SEPTEMBER;
+  }
+
+  public final class MonthDay implements java.lang.Comparable<java.time.MonthDay> java.io.Serializable java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDate atYear(int);
+    method public int compareTo(java.time.MonthDay);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.MonthDay from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public boolean isAfter(java.time.MonthDay);
+    method public boolean isBefore(java.time.MonthDay);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isValidYear(int);
+    method public static java.time.MonthDay now();
+    method public static java.time.MonthDay now(java.time.ZoneId);
+    method public static java.time.MonthDay now(java.time.Clock);
+    method public static java.time.MonthDay of(java.time.Month, int);
+    method public static java.time.MonthDay of(int, int);
+    method public static java.time.MonthDay parse(CharSequence);
+    method public static java.time.MonthDay parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.MonthDay with(java.time.Month);
+    method public java.time.MonthDay withDayOfMonth(int);
+    method public java.time.MonthDay withMonth(int);
+  }
+
+  public final class OffsetDateTime implements java.lang.Comparable<java.time.OffsetDateTime> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.ZonedDateTime atZoneSameInstant(java.time.ZoneId);
+    method public java.time.ZonedDateTime atZoneSimilarLocal(java.time.ZoneId);
+    method public int compareTo(java.time.OffsetDateTime);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.OffsetDateTime from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getNano();
+    method public java.time.ZoneOffset getOffset();
+    method public int getSecond();
+    method public int getYear();
+    method public boolean isAfter(java.time.OffsetDateTime);
+    method public boolean isBefore(java.time.OffsetDateTime);
+    method public boolean isEqual(java.time.OffsetDateTime);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetDateTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime minusDays(long);
+    method public java.time.OffsetDateTime minusHours(long);
+    method public java.time.OffsetDateTime minusMinutes(long);
+    method public java.time.OffsetDateTime minusMonths(long);
+    method public java.time.OffsetDateTime minusNanos(long);
+    method public java.time.OffsetDateTime minusSeconds(long);
+    method public java.time.OffsetDateTime minusWeeks(long);
+    method public java.time.OffsetDateTime minusYears(long);
+    method public static java.time.OffsetDateTime now();
+    method public static java.time.OffsetDateTime now(java.time.ZoneId);
+    method public static java.time.OffsetDateTime now(java.time.Clock);
+    method public static java.time.OffsetDateTime of(java.time.LocalDate, java.time.LocalTime, java.time.ZoneOffset);
+    method public static java.time.OffsetDateTime of(java.time.LocalDateTime, java.time.ZoneOffset);
+    method public static java.time.OffsetDateTime of(int, int, int, int, int, int, int, java.time.ZoneOffset);
+    method public static java.time.OffsetDateTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.OffsetDateTime parse(CharSequence);
+    method public static java.time.OffsetDateTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetDateTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetDateTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime plusDays(long);
+    method public java.time.OffsetDateTime plusHours(long);
+    method public java.time.OffsetDateTime plusMinutes(long);
+    method public java.time.OffsetDateTime plusMonths(long);
+    method public java.time.OffsetDateTime plusNanos(long);
+    method public java.time.OffsetDateTime plusSeconds(long);
+    method public java.time.OffsetDateTime plusWeeks(long);
+    method public java.time.OffsetDateTime plusYears(long);
+    method public static java.util.Comparator<java.time.OffsetDateTime> timeLineOrder();
+    method public long toEpochSecond();
+    method public java.time.Instant toInstant();
+    method public java.time.LocalDate toLocalDate();
+    method public java.time.LocalDateTime toLocalDateTime();
+    method public java.time.LocalTime toLocalTime();
+    method public java.time.OffsetTime toOffsetTime();
+    method public java.time.ZonedDateTime toZonedDateTime();
+    method public java.time.OffsetDateTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetDateTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.OffsetDateTime with(java.time.temporal.TemporalField, long);
+    method public java.time.OffsetDateTime withDayOfMonth(int);
+    method public java.time.OffsetDateTime withDayOfYear(int);
+    method public java.time.OffsetDateTime withHour(int);
+    method public java.time.OffsetDateTime withMinute(int);
+    method public java.time.OffsetDateTime withMonth(int);
+    method public java.time.OffsetDateTime withNano(int);
+    method public java.time.OffsetDateTime withOffsetSameInstant(java.time.ZoneOffset);
+    method public java.time.OffsetDateTime withOffsetSameLocal(java.time.ZoneOffset);
+    method public java.time.OffsetDateTime withSecond(int);
+    method public java.time.OffsetDateTime withYear(int);
+    field public static final java.time.OffsetDateTime MAX;
+    field public static final java.time.OffsetDateTime MIN;
+  }
+
+  public final class OffsetTime implements java.lang.Comparable<java.time.OffsetTime> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.OffsetDateTime atDate(java.time.LocalDate);
+    method public int compareTo(java.time.OffsetTime);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.OffsetTime from(java.time.temporal.TemporalAccessor);
+    method public int getHour();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getMinute();
+    method public int getNano();
+    method public java.time.ZoneOffset getOffset();
+    method public int getSecond();
+    method public boolean isAfter(java.time.OffsetTime);
+    method public boolean isBefore(java.time.OffsetTime);
+    method public boolean isEqual(java.time.OffsetTime);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime minusHours(long);
+    method public java.time.OffsetTime minusMinutes(long);
+    method public java.time.OffsetTime minusNanos(long);
+    method public java.time.OffsetTime minusSeconds(long);
+    method public static java.time.OffsetTime now();
+    method public static java.time.OffsetTime now(java.time.ZoneId);
+    method public static java.time.OffsetTime now(java.time.Clock);
+    method public static java.time.OffsetTime of(java.time.LocalTime, java.time.ZoneOffset);
+    method public static java.time.OffsetTime of(int, int, int, int, java.time.ZoneOffset);
+    method public static java.time.OffsetTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.OffsetTime parse(CharSequence);
+    method public static java.time.OffsetTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.OffsetTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.OffsetTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime plusHours(long);
+    method public java.time.OffsetTime plusMinutes(long);
+    method public java.time.OffsetTime plusNanos(long);
+    method public java.time.OffsetTime plusSeconds(long);
+    method public java.time.LocalTime toLocalTime();
+    method public java.time.OffsetTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.OffsetTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.OffsetTime with(java.time.temporal.TemporalField, long);
+    method public java.time.OffsetTime withHour(int);
+    method public java.time.OffsetTime withMinute(int);
+    method public java.time.OffsetTime withNano(int);
+    method public java.time.OffsetTime withOffsetSameInstant(java.time.ZoneOffset);
+    method public java.time.OffsetTime withOffsetSameLocal(java.time.ZoneOffset);
+    method public java.time.OffsetTime withSecond(int);
+    field public static final java.time.OffsetTime MAX;
+    field public static final java.time.OffsetTime MIN;
+  }
+
+  public final class Period implements java.time.chrono.ChronoPeriod java.io.Serializable {
+    method public java.time.temporal.Temporal addTo(java.time.temporal.Temporal);
+    method public static java.time.Period between(java.time.LocalDate, java.time.LocalDate);
+    method public static java.time.Period from(java.time.temporal.TemporalAmount);
+    method public long get(java.time.temporal.TemporalUnit);
+    method public java.time.chrono.IsoChronology getChronology();
+    method public int getDays();
+    method public int getMonths();
+    method public java.util.List<java.time.temporal.TemporalUnit> getUnits();
+    method public int getYears();
+    method public java.time.Period minus(java.time.temporal.TemporalAmount);
+    method public java.time.Period minusDays(long);
+    method public java.time.Period minusMonths(long);
+    method public java.time.Period minusYears(long);
+    method public java.time.Period multipliedBy(int);
+    method public java.time.Period negated();
+    method public java.time.Period normalized();
+    method public static java.time.Period of(int, int, int);
+    method public static java.time.Period ofDays(int);
+    method public static java.time.Period ofMonths(int);
+    method public static java.time.Period ofWeeks(int);
+    method public static java.time.Period ofYears(int);
+    method public static java.time.Period parse(CharSequence);
+    method public java.time.Period plus(java.time.temporal.TemporalAmount);
+    method public java.time.Period plusDays(long);
+    method public java.time.Period plusMonths(long);
+    method public java.time.Period plusYears(long);
+    method public java.time.temporal.Temporal subtractFrom(java.time.temporal.Temporal);
+    method public long toTotalMonths();
+    method public java.time.Period withDays(int);
+    method public java.time.Period withMonths(int);
+    method public java.time.Period withYears(int);
+    field public static final java.time.Period ZERO;
+  }
+
+  public final class Year implements java.lang.Comparable<java.time.Year> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDate atDay(int);
+    method public java.time.YearMonth atMonth(java.time.Month);
+    method public java.time.YearMonth atMonth(int);
+    method public java.time.LocalDate atMonthDay(java.time.MonthDay);
+    method public int compareTo(java.time.Year);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.Year from(java.time.temporal.TemporalAccessor);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public boolean isAfter(java.time.Year);
+    method public boolean isBefore(java.time.Year);
+    method public static boolean isLeap(long);
+    method public boolean isLeap();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public boolean isValidMonthDay(java.time.MonthDay);
+    method public int length();
+    method public java.time.Year minus(java.time.temporal.TemporalAmount);
+    method public java.time.Year minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Year minusYears(long);
+    method public static java.time.Year now();
+    method public static java.time.Year now(java.time.ZoneId);
+    method public static java.time.Year now(java.time.Clock);
+    method public static java.time.Year of(int);
+    method public static java.time.Year parse(CharSequence);
+    method public static java.time.Year parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.Year plus(java.time.temporal.TemporalAmount);
+    method public java.time.Year plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.Year plusYears(long);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.Year with(java.time.temporal.TemporalAdjuster);
+    method public java.time.Year with(java.time.temporal.TemporalField, long);
+    field public static final int MAX_VALUE = 999999999; // 0x3b9ac9ff
+    field public static final int MIN_VALUE = -999999999; // 0xc4653601
+  }
+
+  public final class YearMonth implements java.lang.Comparable<java.time.YearMonth> java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.LocalDate atDay(int);
+    method public java.time.LocalDate atEndOfMonth();
+    method public int compareTo(java.time.YearMonth);
+    method public String format(java.time.format.DateTimeFormatter);
+    method public static java.time.YearMonth from(java.time.temporal.TemporalAccessor);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getYear();
+    method public boolean isAfter(java.time.YearMonth);
+    method public boolean isBefore(java.time.YearMonth);
+    method public boolean isLeapYear();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public boolean isValidDay(int);
+    method public int lengthOfMonth();
+    method public int lengthOfYear();
+    method public java.time.YearMonth minus(java.time.temporal.TemporalAmount);
+    method public java.time.YearMonth minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth minusMonths(long);
+    method public java.time.YearMonth minusYears(long);
+    method public static java.time.YearMonth now();
+    method public static java.time.YearMonth now(java.time.ZoneId);
+    method public static java.time.YearMonth now(java.time.Clock);
+    method public static java.time.YearMonth of(int, java.time.Month);
+    method public static java.time.YearMonth of(int, int);
+    method public static java.time.YearMonth parse(CharSequence);
+    method public static java.time.YearMonth parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.YearMonth plus(java.time.temporal.TemporalAmount);
+    method public java.time.YearMonth plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth plusMonths(long);
+    method public java.time.YearMonth plusYears(long);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.YearMonth with(java.time.temporal.TemporalAdjuster);
+    method public java.time.YearMonth with(java.time.temporal.TemporalField, long);
+    method public java.time.YearMonth withMonth(int);
+    method public java.time.YearMonth withYear(int);
+  }
+
+  public abstract class ZoneId implements java.io.Serializable {
+    method public static java.time.ZoneId from(java.time.temporal.TemporalAccessor);
+    method public static java.util.Set<java.lang.String> getAvailableZoneIds();
+    method public String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public abstract String getId();
+    method public abstract java.time.zone.ZoneRules getRules();
+    method public java.time.ZoneId normalized();
+    method public static java.time.ZoneId of(String, java.util.Map<java.lang.String,java.lang.String>);
+    method public static java.time.ZoneId of(String);
+    method public static java.time.ZoneId ofOffset(String, java.time.ZoneOffset);
+    method public static java.time.ZoneId systemDefault();
+    field public static final java.util.Map<java.lang.String,java.lang.String> SHORT_IDS;
+  }
+
+  public final class ZoneOffset extends java.time.ZoneId implements java.lang.Comparable<java.time.ZoneOffset> java.io.Serializable java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public int compareTo(java.time.ZoneOffset);
+    method public static java.time.ZoneOffset from(java.time.temporal.TemporalAccessor);
+    method public String getId();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public java.time.zone.ZoneRules getRules();
+    method public int getTotalSeconds();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public static java.time.ZoneOffset of(String);
+    method public static java.time.ZoneOffset ofHours(int);
+    method public static java.time.ZoneOffset ofHoursMinutes(int, int);
+    method public static java.time.ZoneOffset ofHoursMinutesSeconds(int, int, int);
+    method public static java.time.ZoneOffset ofTotalSeconds(int);
+    field public static final java.time.ZoneOffset MAX;
+    field public static final java.time.ZoneOffset MIN;
+    field public static final java.time.ZoneOffset UTC;
+  }
+
+  public final class ZonedDateTime implements java.time.chrono.ChronoZonedDateTime<java.time.LocalDate> java.io.Serializable java.time.temporal.Temporal {
+    method public static java.time.ZonedDateTime from(java.time.temporal.TemporalAccessor);
+    method public int getDayOfMonth();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public int getDayOfYear();
+    method public int getHour();
+    method public int getMinute();
+    method public java.time.Month getMonth();
+    method public int getMonthValue();
+    method public int getNano();
+    method public java.time.ZoneOffset getOffset();
+    method public int getSecond();
+    method public int getYear();
+    method public java.time.ZoneId getZone();
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public java.time.ZonedDateTime minus(java.time.temporal.TemporalAmount);
+    method public java.time.ZonedDateTime minus(long, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime minusDays(long);
+    method public java.time.ZonedDateTime minusHours(long);
+    method public java.time.ZonedDateTime minusMinutes(long);
+    method public java.time.ZonedDateTime minusMonths(long);
+    method public java.time.ZonedDateTime minusNanos(long);
+    method public java.time.ZonedDateTime minusSeconds(long);
+    method public java.time.ZonedDateTime minusWeeks(long);
+    method public java.time.ZonedDateTime minusYears(long);
+    method public static java.time.ZonedDateTime now();
+    method public static java.time.ZonedDateTime now(java.time.ZoneId);
+    method public static java.time.ZonedDateTime now(java.time.Clock);
+    method public static java.time.ZonedDateTime of(java.time.LocalDate, java.time.LocalTime, java.time.ZoneId);
+    method public static java.time.ZonedDateTime of(java.time.LocalDateTime, java.time.ZoneId);
+    method public static java.time.ZonedDateTime of(int, int, int, int, int, int, int, java.time.ZoneId);
+    method public static java.time.ZonedDateTime ofInstant(java.time.Instant, java.time.ZoneId);
+    method public static java.time.ZonedDateTime ofInstant(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
+    method public static java.time.ZonedDateTime ofLocal(java.time.LocalDateTime, java.time.ZoneId, java.time.ZoneOffset);
+    method public static java.time.ZonedDateTime ofStrict(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneId);
+    method public static java.time.ZonedDateTime parse(CharSequence);
+    method public static java.time.ZonedDateTime parse(CharSequence, java.time.format.DateTimeFormatter);
+    method public java.time.ZonedDateTime plus(java.time.temporal.TemporalAmount);
+    method public java.time.ZonedDateTime plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime plusDays(long);
+    method public java.time.ZonedDateTime plusHours(long);
+    method public java.time.ZonedDateTime plusMinutes(long);
+    method public java.time.ZonedDateTime plusMonths(long);
+    method public java.time.ZonedDateTime plusNanos(long);
+    method public java.time.ZonedDateTime plusSeconds(long);
+    method public java.time.ZonedDateTime plusWeeks(long);
+    method public java.time.ZonedDateTime plusYears(long);
+    method public java.time.LocalDate toLocalDate();
+    method public java.time.LocalDateTime toLocalDateTime();
+    method public java.time.OffsetDateTime toOffsetDateTime();
+    method public java.time.ZonedDateTime truncatedTo(java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.ZonedDateTime with(java.time.temporal.TemporalAdjuster);
+    method public java.time.ZonedDateTime with(java.time.temporal.TemporalField, long);
+    method public java.time.ZonedDateTime withDayOfMonth(int);
+    method public java.time.ZonedDateTime withDayOfYear(int);
+    method public java.time.ZonedDateTime withEarlierOffsetAtOverlap();
+    method public java.time.ZonedDateTime withFixedOffsetZone();
+    method public java.time.ZonedDateTime withHour(int);
+    method public java.time.ZonedDateTime withLaterOffsetAtOverlap();
+    method public java.time.ZonedDateTime withMinute(int);
+    method public java.time.ZonedDateTime withMonth(int);
+    method public java.time.ZonedDateTime withNano(int);
+    method public java.time.ZonedDateTime withSecond(int);
+    method public java.time.ZonedDateTime withYear(int);
+    method public java.time.ZonedDateTime withZoneSameInstant(java.time.ZoneId);
+    method public java.time.ZonedDateTime withZoneSameLocal(java.time.ZoneId);
+  }
+
+}
+
+package java.time.chrono {
+
+  public abstract class AbstractChronology implements java.time.chrono.Chronology {
+    ctor protected AbstractChronology();
+    method public int compareTo(java.time.chrono.Chronology);
+    method public java.time.chrono.ChronoLocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+  }
+
+  public interface ChronoLocalDate extends java.time.temporal.Temporal java.lang.Comparable<java.time.chrono.ChronoLocalDate> java.time.temporal.TemporalAdjuster {
+    method public default java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public default java.time.chrono.ChronoLocalDateTime<?> atTime(java.time.LocalTime);
+    method public default int compareTo(java.time.chrono.ChronoLocalDate);
+    method public boolean equals(Object);
+    method public default String format(java.time.format.DateTimeFormatter);
+    method public static java.time.chrono.ChronoLocalDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.Chronology getChronology();
+    method public default java.time.chrono.Era getEra();
+    method public int hashCode();
+    method public default boolean isAfter(java.time.chrono.ChronoLocalDate);
+    method public default boolean isBefore(java.time.chrono.ChronoLocalDate);
+    method public default boolean isEqual(java.time.chrono.ChronoLocalDate);
+    method public default boolean isLeapYear();
+    method public default boolean isSupported(java.time.temporal.TemporalField);
+    method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public int lengthOfMonth();
+    method public default int lengthOfYear();
+    method public default java.time.chrono.ChronoLocalDate minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDate minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDate plus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDate plus(long, java.time.temporal.TemporalUnit);
+    method public static java.util.Comparator<java.time.chrono.ChronoLocalDate> timeLineOrder();
+    method public default long toEpochDay();
+    method public String toString();
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalAdjuster);
+    method public default java.time.chrono.ChronoLocalDate with(java.time.temporal.TemporalField, long);
+  }
+
+  public interface ChronoLocalDateTime<D extends java.time.chrono.ChronoLocalDate> extends java.time.temporal.Temporal java.lang.Comparable<java.time.chrono.ChronoLocalDateTime<?>> java.time.temporal.TemporalAdjuster {
+    method public default java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public java.time.chrono.ChronoZonedDateTime<D> atZone(java.time.ZoneId);
+    method public default int compareTo(java.time.chrono.ChronoLocalDateTime<?>);
+    method public boolean equals(Object);
+    method public default String format(java.time.format.DateTimeFormatter);
+    method public static java.time.chrono.ChronoLocalDateTime<?> from(java.time.temporal.TemporalAccessor);
+    method public default java.time.chrono.Chronology getChronology();
+    method public int hashCode();
+    method public default boolean isAfter(java.time.chrono.ChronoLocalDateTime<?>);
+    method public default boolean isBefore(java.time.chrono.ChronoLocalDateTime<?>);
+    method public default boolean isEqual(java.time.chrono.ChronoLocalDateTime<?>);
+    method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoLocalDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoLocalDateTime<D> plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ChronoLocalDateTime<D> plus(long, java.time.temporal.TemporalUnit);
+    method public static java.util.Comparator<java.time.chrono.ChronoLocalDateTime<?>> timeLineOrder();
+    method public default long toEpochSecond(java.time.ZoneOffset);
+    method public default java.time.Instant toInstant(java.time.ZoneOffset);
+    method public D toLocalDate();
+    method public java.time.LocalTime toLocalTime();
+    method public String toString();
+    method public default java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalAdjuster);
+    method public java.time.chrono.ChronoLocalDateTime<D> with(java.time.temporal.TemporalField, long);
+  }
+
+  public interface ChronoPeriod extends java.time.temporal.TemporalAmount {
+    method public static java.time.chrono.ChronoPeriod between(java.time.chrono.ChronoLocalDate, java.time.chrono.ChronoLocalDate);
+    method public boolean equals(Object);
+    method public java.time.chrono.Chronology getChronology();
+    method public int hashCode();
+    method public default boolean isNegative();
+    method public default boolean isZero();
+    method public java.time.chrono.ChronoPeriod minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ChronoPeriod multipliedBy(int);
+    method public default java.time.chrono.ChronoPeriod negated();
+    method public java.time.chrono.ChronoPeriod normalized();
+    method public java.time.chrono.ChronoPeriod plus(java.time.temporal.TemporalAmount);
+    method public String toString();
+  }
+
+  public interface ChronoZonedDateTime<D extends java.time.chrono.ChronoLocalDate> extends java.time.temporal.Temporal java.lang.Comparable<java.time.chrono.ChronoZonedDateTime<?>> {
+    method public default int compareTo(java.time.chrono.ChronoZonedDateTime<?>);
+    method public boolean equals(Object);
+    method public default String format(java.time.format.DateTimeFormatter);
+    method public static java.time.chrono.ChronoZonedDateTime<?> from(java.time.temporal.TemporalAccessor);
+    method public default java.time.chrono.Chronology getChronology();
+    method public default long getLong(java.time.temporal.TemporalField);
+    method public java.time.ZoneOffset getOffset();
+    method public java.time.ZoneId getZone();
+    method public int hashCode();
+    method public default boolean isAfter(java.time.chrono.ChronoZonedDateTime<?>);
+    method public default boolean isBefore(java.time.chrono.ChronoZonedDateTime<?>);
+    method public default boolean isEqual(java.time.chrono.ChronoZonedDateTime<?>);
+    method public default boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(java.time.temporal.TemporalAmount);
+    method public default java.time.chrono.ChronoZonedDateTime<D> minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.chrono.ChronoZonedDateTime<D> plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ChronoZonedDateTime<D> plus(long, java.time.temporal.TemporalUnit);
+    method public static java.util.Comparator<java.time.chrono.ChronoZonedDateTime<?>> timeLineOrder();
+    method public default long toEpochSecond();
+    method public default java.time.Instant toInstant();
+    method public default D toLocalDate();
+    method public java.time.chrono.ChronoLocalDateTime<D> toLocalDateTime();
+    method public default java.time.LocalTime toLocalTime();
+    method public String toString();
+    method public default java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalAdjuster);
+    method public java.time.chrono.ChronoZonedDateTime<D> with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.ChronoZonedDateTime<D> withEarlierOffsetAtOverlap();
+    method public java.time.chrono.ChronoZonedDateTime<D> withLaterOffsetAtOverlap();
+    method public java.time.chrono.ChronoZonedDateTime<D> withZoneSameInstant(java.time.ZoneId);
+    method public java.time.chrono.ChronoZonedDateTime<D> withZoneSameLocal(java.time.ZoneId);
+  }
+
+  public interface Chronology extends java.lang.Comparable<java.time.chrono.Chronology> {
+    method public int compareTo(java.time.chrono.Chronology);
+    method public default java.time.chrono.ChronoLocalDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.ChronoLocalDate date(int, int, int);
+    method public java.time.chrono.ChronoLocalDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoLocalDate dateEpochDay(long);
+    method public default java.time.chrono.ChronoLocalDate dateNow();
+    method public default java.time.chrono.ChronoLocalDate dateNow(java.time.ZoneId);
+    method public default java.time.chrono.ChronoLocalDate dateNow(java.time.Clock);
+    method public default java.time.chrono.ChronoLocalDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.ChronoLocalDate dateYearDay(int, int);
+    method public boolean equals(Object);
+    method public java.time.chrono.Era eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public static java.time.chrono.Chronology from(java.time.temporal.TemporalAccessor);
+    method public static java.util.Set<java.time.chrono.Chronology> getAvailableChronologies();
+    method public String getCalendarType();
+    method public default String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public String getId();
+    method public int hashCode();
+    method public boolean isLeapYear(long);
+    method public default java.time.chrono.ChronoLocalDateTime<? extends java.time.chrono.ChronoLocalDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public static java.time.chrono.Chronology of(String);
+    method public static java.time.chrono.Chronology ofLocale(java.util.Locale);
+    method public default java.time.chrono.ChronoPeriod period(int, int, int);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.ChronoLocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public String toString();
+    method public default java.time.chrono.ChronoZonedDateTime<? extends java.time.chrono.ChronoLocalDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public default java.time.chrono.ChronoZonedDateTime<? extends java.time.chrono.ChronoLocalDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+  }
+
+  public interface Era extends java.time.temporal.TemporalAccessor java.time.temporal.TemporalAdjuster {
+    method public default java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+    method public default String getDisplayName(java.time.format.TextStyle, java.util.Locale);
+    method public default long getLong(java.time.temporal.TemporalField);
+    method public int getValue();
+    method public default boolean isSupported(java.time.temporal.TemporalField);
+  }
+
+  public final class HijrahChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.HijrahDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.HijrahDate date(int, int, int);
+    method public java.time.chrono.HijrahDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.HijrahDate dateEpochDay(long);
+    method public java.time.chrono.HijrahDate dateNow();
+    method public java.time.chrono.HijrahDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.HijrahDate dateNow(java.time.Clock);
+    method public java.time.chrono.HijrahDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.HijrahDate dateYearDay(int, int);
+    method public java.time.chrono.HijrahEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.HijrahDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.HijrahDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.HijrahChronology INSTANCE;
+  }
+
+  public final class HijrahDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.HijrahDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.HijrahDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.HijrahChronology getChronology();
+    method public java.time.chrono.HijrahEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.HijrahDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.HijrahDate now();
+    method public static java.time.chrono.HijrahDate now(java.time.ZoneId);
+    method public static java.time.chrono.HijrahDate now(java.time.Clock);
+    method public static java.time.chrono.HijrahDate of(int, int, int);
+    method public java.time.chrono.HijrahDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.HijrahDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.HijrahDate with(java.time.temporal.TemporalAdjuster);
+    method public java.time.chrono.HijrahDate withVariant(java.time.chrono.HijrahChronology);
+  }
+
+  public enum HijrahEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.HijrahEra of(int);
+    enum_constant public static final java.time.chrono.HijrahEra AH;
+  }
+
+  public final class IsoChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.LocalDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.LocalDate date(int, int, int);
+    method public java.time.LocalDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.LocalDate dateEpochDay(long);
+    method public java.time.LocalDate dateNow();
+    method public java.time.LocalDate dateNow(java.time.ZoneId);
+    method public java.time.LocalDate dateNow(java.time.Clock);
+    method public java.time.LocalDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.LocalDate dateYearDay(int, int);
+    method public java.time.chrono.IsoEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.LocalDateTime localDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.Period period(int, int, int);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.LocalDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.ZonedDateTime zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.ZonedDateTime zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.IsoChronology INSTANCE;
+  }
+
+  public enum IsoEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.IsoEra of(int);
+    enum_constant public static final java.time.chrono.IsoEra BCE;
+    enum_constant public static final java.time.chrono.IsoEra CE;
+  }
+
+  public final class JapaneseChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.JapaneseDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.JapaneseDate date(int, int, int);
+    method public java.time.chrono.JapaneseDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.JapaneseDate dateEpochDay(long);
+    method public java.time.chrono.JapaneseDate dateNow();
+    method public java.time.chrono.JapaneseDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.JapaneseDate dateNow(java.time.Clock);
+    method public java.time.chrono.JapaneseDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.JapaneseDate dateYearDay(int, int);
+    method public java.time.chrono.JapaneseEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.JapaneseDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.JapaneseDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.JapaneseChronology INSTANCE;
+  }
+
+  public final class JapaneseDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.JapaneseDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.JapaneseDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.JapaneseChronology getChronology();
+    method public java.time.chrono.JapaneseEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.JapaneseDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.JapaneseDate now();
+    method public static java.time.chrono.JapaneseDate now(java.time.ZoneId);
+    method public static java.time.chrono.JapaneseDate now(java.time.Clock);
+    method public static java.time.chrono.JapaneseDate of(java.time.chrono.JapaneseEra, int, int, int);
+    method public static java.time.chrono.JapaneseDate of(int, int, int);
+    method public java.time.chrono.JapaneseDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.JapaneseDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.JapaneseDate with(java.time.temporal.TemporalAdjuster);
+  }
+
+  public final class JapaneseEra implements java.time.chrono.Era java.io.Serializable {
+    method public int getValue();
+    method public static java.time.chrono.JapaneseEra of(int);
+    method public static java.time.chrono.JapaneseEra valueOf(String);
+    method public static java.time.chrono.JapaneseEra[] values();
+    field public static final java.time.chrono.JapaneseEra HEISEI;
+    field public static final java.time.chrono.JapaneseEra MEIJI;
+    field public static final java.time.chrono.JapaneseEra REIWA;
+    field public static final java.time.chrono.JapaneseEra SHOWA;
+    field public static final java.time.chrono.JapaneseEra TAISHO;
+  }
+
+  public final class MinguoChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.MinguoDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.MinguoDate date(int, int, int);
+    method public java.time.chrono.MinguoDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.MinguoDate dateEpochDay(long);
+    method public java.time.chrono.MinguoDate dateNow();
+    method public java.time.chrono.MinguoDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.MinguoDate dateNow(java.time.Clock);
+    method public java.time.chrono.MinguoDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.MinguoDate dateYearDay(int, int);
+    method public java.time.chrono.MinguoEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.MinguoDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.MinguoDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.MinguoChronology INSTANCE;
+  }
+
+  public final class MinguoDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.MinguoDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.MinguoDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.MinguoChronology getChronology();
+    method public java.time.chrono.MinguoEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.MinguoDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.MinguoDate now();
+    method public static java.time.chrono.MinguoDate now(java.time.ZoneId);
+    method public static java.time.chrono.MinguoDate now(java.time.Clock);
+    method public static java.time.chrono.MinguoDate of(int, int, int);
+    method public java.time.chrono.MinguoDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.MinguoDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.MinguoDate with(java.time.temporal.TemporalAdjuster);
+  }
+
+  public enum MinguoEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.MinguoEra of(int);
+    enum_constant public static final java.time.chrono.MinguoEra BEFORE_ROC;
+    enum_constant public static final java.time.chrono.MinguoEra ROC;
+  }
+
+  public final class ThaiBuddhistChronology extends java.time.chrono.AbstractChronology implements java.io.Serializable {
+    method public java.time.chrono.ThaiBuddhistDate date(java.time.chrono.Era, int, int, int);
+    method public java.time.chrono.ThaiBuddhistDate date(int, int, int);
+    method public java.time.chrono.ThaiBuddhistDate date(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ThaiBuddhistDate dateEpochDay(long);
+    method public java.time.chrono.ThaiBuddhistDate dateNow();
+    method public java.time.chrono.ThaiBuddhistDate dateNow(java.time.ZoneId);
+    method public java.time.chrono.ThaiBuddhistDate dateNow(java.time.Clock);
+    method public java.time.chrono.ThaiBuddhistDate dateYearDay(java.time.chrono.Era, int, int);
+    method public java.time.chrono.ThaiBuddhistDate dateYearDay(int, int);
+    method public java.time.chrono.ThaiBuddhistEra eraOf(int);
+    method public java.util.List<java.time.chrono.Era> eras();
+    method public String getCalendarType();
+    method public String getId();
+    method public boolean isLeapYear(long);
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> localDateTime(java.time.temporal.TemporalAccessor);
+    method public int prolepticYear(java.time.chrono.Era, int);
+    method public java.time.temporal.ValueRange range(java.time.temporal.ChronoField);
+    method public java.time.chrono.ThaiBuddhistDate resolveDate(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.format.ResolverStyle);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ChronoZonedDateTime<java.time.chrono.ThaiBuddhistDate> zonedDateTime(java.time.Instant, java.time.ZoneId);
+    field public static final java.time.chrono.ThaiBuddhistChronology INSTANCE;
+  }
+
+  public final class ThaiBuddhistDate implements java.time.chrono.ChronoLocalDate java.io.Serializable java.time.temporal.Temporal java.time.temporal.TemporalAdjuster {
+    method public java.time.chrono.ChronoLocalDateTime<java.time.chrono.ThaiBuddhistDate> atTime(java.time.LocalTime);
+    method public static java.time.chrono.ThaiBuddhistDate from(java.time.temporal.TemporalAccessor);
+    method public java.time.chrono.ThaiBuddhistChronology getChronology();
+    method public java.time.chrono.ThaiBuddhistEra getEra();
+    method public long getLong(java.time.temporal.TemporalField);
+    method public int lengthOfMonth();
+    method public java.time.chrono.ThaiBuddhistDate minus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate minus(long, java.time.temporal.TemporalUnit);
+    method public static java.time.chrono.ThaiBuddhistDate now();
+    method public static java.time.chrono.ThaiBuddhistDate now(java.time.ZoneId);
+    method public static java.time.chrono.ThaiBuddhistDate now(java.time.Clock);
+    method public static java.time.chrono.ThaiBuddhistDate of(int, int, int);
+    method public java.time.chrono.ThaiBuddhistDate plus(java.time.temporal.TemporalAmount);
+    method public java.time.chrono.ThaiBuddhistDate plus(long, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ChronoPeriod until(java.time.chrono.ChronoLocalDate);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalField, long);
+    method public java.time.chrono.ThaiBuddhistDate with(java.time.temporal.TemporalAdjuster);
+  }
+
+  public enum ThaiBuddhistEra implements java.time.chrono.Era {
+    method public int getValue();
+    method public static java.time.chrono.ThaiBuddhistEra of(int);
+    enum_constant public static final java.time.chrono.ThaiBuddhistEra BE;
+    enum_constant public static final java.time.chrono.ThaiBuddhistEra BEFORE_BE;
+  }
+
+}
+
+package java.time.format {
+
+  public final class DateTimeFormatter {
+    method public String format(java.time.temporal.TemporalAccessor);
+    method public void formatTo(java.time.temporal.TemporalAccessor, Appendable);
+    method public java.time.chrono.Chronology getChronology();
+    method public java.time.format.DecimalStyle getDecimalStyle();
+    method public java.util.Locale getLocale();
+    method public java.util.Set<java.time.temporal.TemporalField> getResolverFields();
+    method public java.time.format.ResolverStyle getResolverStyle();
+    method public java.time.ZoneId getZone();
+    method public static java.time.format.DateTimeFormatter ofLocalizedDate(java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofLocalizedDateTime(java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofLocalizedDateTime(java.time.format.FormatStyle, java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofLocalizedTime(java.time.format.FormatStyle);
+    method public static java.time.format.DateTimeFormatter ofPattern(String);
+    method public static java.time.format.DateTimeFormatter ofPattern(String, java.util.Locale);
+    method public java.time.temporal.TemporalAccessor parse(CharSequence);
+    method public java.time.temporal.TemporalAccessor parse(CharSequence, java.text.ParsePosition);
+    method public <T> T parse(CharSequence, java.time.temporal.TemporalQuery<T>);
+    method public java.time.temporal.TemporalAccessor parseBest(CharSequence, java.time.temporal.TemporalQuery<?>...);
+    method public java.time.temporal.TemporalAccessor parseUnresolved(CharSequence, java.text.ParsePosition);
+    method public static java.time.temporal.TemporalQuery<java.time.Period> parsedExcessDays();
+    method public static java.time.temporal.TemporalQuery<java.lang.Boolean> parsedLeapSecond();
+    method public java.text.Format toFormat();
+    method public java.text.Format toFormat(java.time.temporal.TemporalQuery<?>);
+    method public java.time.format.DateTimeFormatter withChronology(java.time.chrono.Chronology);
+    method public java.time.format.DateTimeFormatter withDecimalStyle(java.time.format.DecimalStyle);
+    method public java.time.format.DateTimeFormatter withLocale(java.util.Locale);
+    method public java.time.format.DateTimeFormatter withResolverFields(java.time.temporal.TemporalField...);
+    method public java.time.format.DateTimeFormatter withResolverFields(java.util.Set<java.time.temporal.TemporalField>);
+    method public java.time.format.DateTimeFormatter withResolverStyle(java.time.format.ResolverStyle);
+    method public java.time.format.DateTimeFormatter withZone(java.time.ZoneId);
+    field public static final java.time.format.DateTimeFormatter BASIC_ISO_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_INSTANT;
+    field public static final java.time.format.DateTimeFormatter ISO_LOCAL_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_LOCAL_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_LOCAL_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_OFFSET_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_OFFSET_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_OFFSET_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_ORDINAL_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_TIME;
+    field public static final java.time.format.DateTimeFormatter ISO_WEEK_DATE;
+    field public static final java.time.format.DateTimeFormatter ISO_ZONED_DATE_TIME;
+    field public static final java.time.format.DateTimeFormatter RFC_1123_DATE_TIME;
+  }
+
+  public final class DateTimeFormatterBuilder {
+    ctor public DateTimeFormatterBuilder();
+    method public java.time.format.DateTimeFormatterBuilder append(java.time.format.DateTimeFormatter);
+    method public java.time.format.DateTimeFormatterBuilder appendChronologyId();
+    method public java.time.format.DateTimeFormatterBuilder appendChronologyText(java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendFraction(java.time.temporal.TemporalField, int, int, boolean);
+    method public java.time.format.DateTimeFormatterBuilder appendInstant();
+    method public java.time.format.DateTimeFormatterBuilder appendInstant(int);
+    method public java.time.format.DateTimeFormatterBuilder appendLiteral(char);
+    method public java.time.format.DateTimeFormatterBuilder appendLiteral(String);
+    method public java.time.format.DateTimeFormatterBuilder appendLocalized(java.time.format.FormatStyle, java.time.format.FormatStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendLocalizedOffset(java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendOffset(String, String);
+    method public java.time.format.DateTimeFormatterBuilder appendOffsetId();
+    method public java.time.format.DateTimeFormatterBuilder appendOptional(java.time.format.DateTimeFormatter);
+    method public java.time.format.DateTimeFormatterBuilder appendPattern(String);
+    method public java.time.format.DateTimeFormatterBuilder appendText(java.time.temporal.TemporalField);
+    method public java.time.format.DateTimeFormatterBuilder appendText(java.time.temporal.TemporalField, java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendText(java.time.temporal.TemporalField, java.util.Map<java.lang.Long,java.lang.String>);
+    method public java.time.format.DateTimeFormatterBuilder appendValue(java.time.temporal.TemporalField);
+    method public java.time.format.DateTimeFormatterBuilder appendValue(java.time.temporal.TemporalField, int);
+    method public java.time.format.DateTimeFormatterBuilder appendValue(java.time.temporal.TemporalField, int, int, java.time.format.SignStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendValueReduced(java.time.temporal.TemporalField, int, int, int);
+    method public java.time.format.DateTimeFormatterBuilder appendValueReduced(java.time.temporal.TemporalField, int, int, java.time.chrono.ChronoLocalDate);
+    method public java.time.format.DateTimeFormatterBuilder appendZoneId();
+    method public java.time.format.DateTimeFormatterBuilder appendZoneOrOffsetId();
+    method public java.time.format.DateTimeFormatterBuilder appendZoneRegionId();
+    method public java.time.format.DateTimeFormatterBuilder appendZoneText(java.time.format.TextStyle);
+    method public java.time.format.DateTimeFormatterBuilder appendZoneText(java.time.format.TextStyle, java.util.Set<java.time.ZoneId>);
+    method public static String getLocalizedDateTimePattern(java.time.format.FormatStyle, java.time.format.FormatStyle, java.time.chrono.Chronology, java.util.Locale);
+    method public java.time.format.DateTimeFormatterBuilder optionalEnd();
+    method public java.time.format.DateTimeFormatterBuilder optionalStart();
+    method public java.time.format.DateTimeFormatterBuilder padNext(int);
+    method public java.time.format.DateTimeFormatterBuilder padNext(int, char);
+    method public java.time.format.DateTimeFormatterBuilder parseCaseInsensitive();
+    method public java.time.format.DateTimeFormatterBuilder parseCaseSensitive();
+    method public java.time.format.DateTimeFormatterBuilder parseDefaulting(java.time.temporal.TemporalField, long);
+    method public java.time.format.DateTimeFormatterBuilder parseLenient();
+    method public java.time.format.DateTimeFormatterBuilder parseStrict();
+    method public java.time.format.DateTimeFormatter toFormatter();
+    method public java.time.format.DateTimeFormatter toFormatter(java.util.Locale);
+  }
+
+  public class DateTimeParseException extends java.time.DateTimeException {
+    ctor public DateTimeParseException(String, CharSequence, int);
+    ctor public DateTimeParseException(String, CharSequence, int, Throwable);
+    method public int getErrorIndex();
+    method public String getParsedString();
+  }
+
+  public final class DecimalStyle {
+    method public static java.util.Set<java.util.Locale> getAvailableLocales();
+    method public char getDecimalSeparator();
+    method public char getNegativeSign();
+    method public char getPositiveSign();
+    method public char getZeroDigit();
+    method public static java.time.format.DecimalStyle of(java.util.Locale);
+    method public static java.time.format.DecimalStyle ofDefaultLocale();
+    method public java.time.format.DecimalStyle withDecimalSeparator(char);
+    method public java.time.format.DecimalStyle withNegativeSign(char);
+    method public java.time.format.DecimalStyle withPositiveSign(char);
+    method public java.time.format.DecimalStyle withZeroDigit(char);
+    field public static final java.time.format.DecimalStyle STANDARD;
+  }
+
+  public enum FormatStyle {
+    enum_constant public static final java.time.format.FormatStyle FULL;
+    enum_constant public static final java.time.format.FormatStyle LONG;
+    enum_constant public static final java.time.format.FormatStyle MEDIUM;
+    enum_constant public static final java.time.format.FormatStyle SHORT;
+  }
+
+  public enum ResolverStyle {
+    enum_constant public static final java.time.format.ResolverStyle LENIENT;
+    enum_constant public static final java.time.format.ResolverStyle SMART;
+    enum_constant public static final java.time.format.ResolverStyle STRICT;
+  }
+
+  public enum SignStyle {
+    enum_constant public static final java.time.format.SignStyle ALWAYS;
+    enum_constant public static final java.time.format.SignStyle EXCEEDS_PAD;
+    enum_constant public static final java.time.format.SignStyle NEVER;
+    enum_constant public static final java.time.format.SignStyle NORMAL;
+    enum_constant public static final java.time.format.SignStyle NOT_NEGATIVE;
+  }
+
+  public enum TextStyle {
+    method public java.time.format.TextStyle asNormal();
+    method public java.time.format.TextStyle asStandalone();
+    method public boolean isStandalone();
+    enum_constant public static final java.time.format.TextStyle FULL;
+    enum_constant public static final java.time.format.TextStyle FULL_STANDALONE;
+    enum_constant public static final java.time.format.TextStyle NARROW;
+    enum_constant public static final java.time.format.TextStyle NARROW_STANDALONE;
+    enum_constant public static final java.time.format.TextStyle SHORT;
+    enum_constant public static final java.time.format.TextStyle SHORT_STANDALONE;
+  }
+
+}
+
+package java.time.temporal {
+
+  public enum ChronoField implements java.time.temporal.TemporalField {
+    method public <R extends java.time.temporal.Temporal> R adjustInto(R, long);
+    method public int checkValidIntValue(long);
+    method public long checkValidValue(long);
+    method public java.time.temporal.TemporalUnit getBaseUnit();
+    method public long getFrom(java.time.temporal.TemporalAccessor);
+    method public java.time.temporal.TemporalUnit getRangeUnit();
+    method public boolean isDateBased();
+    method public boolean isSupportedBy(java.time.temporal.TemporalAccessor);
+    method public boolean isTimeBased();
+    method public java.time.temporal.ValueRange range();
+    method public java.time.temporal.ValueRange rangeRefinedBy(java.time.temporal.TemporalAccessor);
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_DAY_OF_WEEK_IN_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_DAY_OF_WEEK_IN_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_WEEK_OF_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField ALIGNED_WEEK_OF_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField AMPM_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField CLOCK_HOUR_OF_AMPM;
+    enum_constant public static final java.time.temporal.ChronoField CLOCK_HOUR_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField DAY_OF_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField DAY_OF_WEEK;
+    enum_constant public static final java.time.temporal.ChronoField DAY_OF_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField EPOCH_DAY;
+    enum_constant public static final java.time.temporal.ChronoField ERA;
+    enum_constant public static final java.time.temporal.ChronoField HOUR_OF_AMPM;
+    enum_constant public static final java.time.temporal.ChronoField HOUR_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField INSTANT_SECONDS;
+    enum_constant public static final java.time.temporal.ChronoField MICRO_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField MICRO_OF_SECOND;
+    enum_constant public static final java.time.temporal.ChronoField MILLI_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField MILLI_OF_SECOND;
+    enum_constant public static final java.time.temporal.ChronoField MINUTE_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField MINUTE_OF_HOUR;
+    enum_constant public static final java.time.temporal.ChronoField MONTH_OF_YEAR;
+    enum_constant public static final java.time.temporal.ChronoField NANO_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField NANO_OF_SECOND;
+    enum_constant public static final java.time.temporal.ChronoField OFFSET_SECONDS;
+    enum_constant public static final java.time.temporal.ChronoField PROLEPTIC_MONTH;
+    enum_constant public static final java.time.temporal.ChronoField SECOND_OF_DAY;
+    enum_constant public static final java.time.temporal.ChronoField SECOND_OF_MINUTE;
+    enum_constant public static final java.time.temporal.ChronoField YEAR;
+    enum_constant public static final java.time.temporal.ChronoField YEAR_OF_ERA;
+  }
+
+  public enum ChronoUnit implements java.time.temporal.TemporalUnit {
+    method public <R extends java.time.temporal.Temporal> R addTo(R, long);
+    method public long between(java.time.temporal.Temporal, java.time.temporal.Temporal);
+    method public java.time.Duration getDuration();
+    method public boolean isDateBased();
+    method public boolean isDurationEstimated();
+    method public boolean isTimeBased();
+    enum_constant public static final java.time.temporal.ChronoUnit CENTURIES;
+    enum_constant public static final java.time.temporal.ChronoUnit DAYS;
+    enum_constant public static final java.time.temporal.ChronoUnit DECADES;
+    enum_constant public static final java.time.temporal.ChronoUnit ERAS;
+    enum_constant public static final java.time.temporal.ChronoUnit FOREVER;
+    enum_constant public static final java.time.temporal.ChronoUnit HALF_DAYS;
+    enum_constant public static final java.time.temporal.ChronoUnit HOURS;
+    enum_constant public static final java.time.temporal.ChronoUnit MICROS;
+    enum_constant public static final java.time.temporal.ChronoUnit MILLENNIA;
+    enum_constant public static final java.time.temporal.ChronoUnit MILLIS;
+    enum_constant public static final java.time.temporal.ChronoUnit MINUTES;
+    enum_constant public static final java.time.temporal.ChronoUnit MONTHS;
+    enum_constant public static final java.time.temporal.ChronoUnit NANOS;
+    enum_constant public static final java.time.temporal.ChronoUnit SECONDS;
+    enum_constant public static final java.time.temporal.ChronoUnit WEEKS;
+    enum_constant public static final java.time.temporal.ChronoUnit YEARS;
+  }
+
+  public final class IsoFields {
+    field public static final java.time.temporal.TemporalField DAY_OF_QUARTER;
+    field public static final java.time.temporal.TemporalField QUARTER_OF_YEAR;
+    field public static final java.time.temporal.TemporalUnit QUARTER_YEARS;
+    field public static final java.time.temporal.TemporalField WEEK_BASED_YEAR;
+    field public static final java.time.temporal.TemporalUnit WEEK_BASED_YEARS;
+    field public static final java.time.temporal.TemporalField WEEK_OF_WEEK_BASED_YEAR;
+  }
+
+  public final class JulianFields {
+    field public static final java.time.temporal.TemporalField JULIAN_DAY;
+    field public static final java.time.temporal.TemporalField MODIFIED_JULIAN_DAY;
+    field public static final java.time.temporal.TemporalField RATA_DIE;
+  }
+
+  public interface Temporal extends java.time.temporal.TemporalAccessor {
+    method public boolean isSupported(java.time.temporal.TemporalUnit);
+    method public default java.time.temporal.Temporal minus(java.time.temporal.TemporalAmount);
+    method public default java.time.temporal.Temporal minus(long, java.time.temporal.TemporalUnit);
+    method public default java.time.temporal.Temporal plus(java.time.temporal.TemporalAmount);
+    method public java.time.temporal.Temporal plus(long, java.time.temporal.TemporalUnit);
+    method public long until(java.time.temporal.Temporal, java.time.temporal.TemporalUnit);
+    method public default java.time.temporal.Temporal with(java.time.temporal.TemporalAdjuster);
+    method public java.time.temporal.Temporal with(java.time.temporal.TemporalField, long);
+  }
+
+  public interface TemporalAccessor {
+    method public default int get(java.time.temporal.TemporalField);
+    method public long getLong(java.time.temporal.TemporalField);
+    method public boolean isSupported(java.time.temporal.TemporalField);
+    method public default <R> R query(java.time.temporal.TemporalQuery<R>);
+    method public default java.time.temporal.ValueRange range(java.time.temporal.TemporalField);
+  }
+
+  @java.lang.FunctionalInterface public interface TemporalAdjuster {
+    method public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal);
+  }
+
+  public final class TemporalAdjusters {
+    method public static java.time.temporal.TemporalAdjuster dayOfWeekInMonth(int, java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster firstDayOfMonth();
+    method public static java.time.temporal.TemporalAdjuster firstDayOfNextMonth();
+    method public static java.time.temporal.TemporalAdjuster firstDayOfNextYear();
+    method public static java.time.temporal.TemporalAdjuster firstDayOfYear();
+    method public static java.time.temporal.TemporalAdjuster firstInMonth(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster lastDayOfMonth();
+    method public static java.time.temporal.TemporalAdjuster lastDayOfYear();
+    method public static java.time.temporal.TemporalAdjuster lastInMonth(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster next(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster nextOrSame(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster ofDateAdjuster(java.util.function.UnaryOperator<java.time.LocalDate>);
+    method public static java.time.temporal.TemporalAdjuster previous(java.time.DayOfWeek);
+    method public static java.time.temporal.TemporalAdjuster previousOrSame(java.time.DayOfWeek);
+  }
+
+  public interface TemporalAmount {
+    method public java.time.temporal.Temporal addTo(java.time.temporal.Temporal);
+    method public long get(java.time.temporal.TemporalUnit);
+    method public java.util.List<java.time.temporal.TemporalUnit> getUnits();
+    method public java.time.temporal.Temporal subtractFrom(java.time.temporal.Temporal);
+  }
+
+  public interface TemporalField {
+    method public <R extends java.time.temporal.Temporal> R adjustInto(R, long);
+    method public java.time.temporal.TemporalUnit getBaseUnit();
+    method public default String getDisplayName(java.util.Locale);
+    method public long getFrom(java.time.temporal.TemporalAccessor);
+    method public java.time.temporal.TemporalUnit getRangeUnit();
+    method public boolean isDateBased();
+    method public boolean isSupportedBy(java.time.temporal.TemporalAccessor);
+    method public boolean isTimeBased();
+    method public java.time.temporal.ValueRange range();
+    method public java.time.temporal.ValueRange rangeRefinedBy(java.time.temporal.TemporalAccessor);
+    method public default java.time.temporal.TemporalAccessor resolve(java.util.Map<java.time.temporal.TemporalField,java.lang.Long>, java.time.temporal.TemporalAccessor, java.time.format.ResolverStyle);
+    method public String toString();
+  }
+
+  public final class TemporalQueries {
+    method public static java.time.temporal.TemporalQuery<java.time.chrono.Chronology> chronology();
+    method public static java.time.temporal.TemporalQuery<java.time.LocalDate> localDate();
+    method public static java.time.temporal.TemporalQuery<java.time.LocalTime> localTime();
+    method public static java.time.temporal.TemporalQuery<java.time.ZoneOffset> offset();
+    method public static java.time.temporal.TemporalQuery<java.time.temporal.TemporalUnit> precision();
+    method public static java.time.temporal.TemporalQuery<java.time.ZoneId> zone();
+    method public static java.time.temporal.TemporalQuery<java.time.ZoneId> zoneId();
+  }
+
+  @java.lang.FunctionalInterface public interface TemporalQuery<R> {
+    method public R queryFrom(java.time.temporal.TemporalAccessor);
+  }
+
+  public interface TemporalUnit {
+    method public <R extends java.time.temporal.Temporal> R addTo(R, long);
+    method public long between(java.time.temporal.Temporal, java.time.temporal.Temporal);
+    method public java.time.Duration getDuration();
+    method public boolean isDateBased();
+    method public boolean isDurationEstimated();
+    method public default boolean isSupportedBy(java.time.temporal.Temporal);
+    method public boolean isTimeBased();
+    method public String toString();
+  }
+
+  public class UnsupportedTemporalTypeException extends java.time.DateTimeException {
+    ctor public UnsupportedTemporalTypeException(String);
+    ctor public UnsupportedTemporalTypeException(String, Throwable);
+  }
+
+  public final class ValueRange implements java.io.Serializable {
+    method public int checkValidIntValue(long, java.time.temporal.TemporalField);
+    method public long checkValidValue(long, java.time.temporal.TemporalField);
+    method public long getLargestMinimum();
+    method public long getMaximum();
+    method public long getMinimum();
+    method public long getSmallestMaximum();
+    method public boolean isFixed();
+    method public boolean isIntValue();
+    method public boolean isValidIntValue(long);
+    method public boolean isValidValue(long);
+    method public static java.time.temporal.ValueRange of(long, long);
+    method public static java.time.temporal.ValueRange of(long, long, long);
+    method public static java.time.temporal.ValueRange of(long, long, long, long);
+  }
+
+  public final class WeekFields implements java.io.Serializable {
+    method public java.time.temporal.TemporalField dayOfWeek();
+    method public java.time.DayOfWeek getFirstDayOfWeek();
+    method public int getMinimalDaysInFirstWeek();
+    method public static java.time.temporal.WeekFields of(java.util.Locale);
+    method public static java.time.temporal.WeekFields of(java.time.DayOfWeek, int);
+    method public java.time.temporal.TemporalField weekBasedYear();
+    method public java.time.temporal.TemporalField weekOfMonth();
+    method public java.time.temporal.TemporalField weekOfWeekBasedYear();
+    method public java.time.temporal.TemporalField weekOfYear();
+    field public static final java.time.temporal.WeekFields ISO;
+    field public static final java.time.temporal.WeekFields SUNDAY_START;
+    field public static final java.time.temporal.TemporalUnit WEEK_BASED_YEARS;
+  }
+
+}
+
+package java.time.zone {
+
+  public final class ZoneOffsetTransition implements java.lang.Comparable<java.time.zone.ZoneOffsetTransition> java.io.Serializable {
+    method public int compareTo(java.time.zone.ZoneOffsetTransition);
+    method public java.time.LocalDateTime getDateTimeAfter();
+    method public java.time.LocalDateTime getDateTimeBefore();
+    method public java.time.Duration getDuration();
+    method public java.time.Instant getInstant();
+    method public java.time.ZoneOffset getOffsetAfter();
+    method public java.time.ZoneOffset getOffsetBefore();
+    method public boolean isGap();
+    method public boolean isOverlap();
+    method public boolean isValidOffset(java.time.ZoneOffset);
+    method public static java.time.zone.ZoneOffsetTransition of(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneOffset);
+    method public long toEpochSecond();
+  }
+
+  public final class ZoneOffsetTransitionRule implements java.io.Serializable {
+    method public java.time.zone.ZoneOffsetTransition createTransition(int);
+    method public int getDayOfMonthIndicator();
+    method public java.time.DayOfWeek getDayOfWeek();
+    method public java.time.LocalTime getLocalTime();
+    method public java.time.Month getMonth();
+    method public java.time.ZoneOffset getOffsetAfter();
+    method public java.time.ZoneOffset getOffsetBefore();
+    method public java.time.ZoneOffset getStandardOffset();
+    method public java.time.zone.ZoneOffsetTransitionRule.TimeDefinition getTimeDefinition();
+    method public boolean isMidnightEndOfDay();
+    method public static java.time.zone.ZoneOffsetTransitionRule of(java.time.Month, int, java.time.DayOfWeek, java.time.LocalTime, boolean, java.time.zone.ZoneOffsetTransitionRule.TimeDefinition, java.time.ZoneOffset, java.time.ZoneOffset, java.time.ZoneOffset);
+  }
+
+  public enum ZoneOffsetTransitionRule.TimeDefinition {
+    method public java.time.LocalDateTime createDateTime(java.time.LocalDateTime, java.time.ZoneOffset, java.time.ZoneOffset);
+    enum_constant public static final java.time.zone.ZoneOffsetTransitionRule.TimeDefinition STANDARD;
+    enum_constant public static final java.time.zone.ZoneOffsetTransitionRule.TimeDefinition UTC;
+    enum_constant public static final java.time.zone.ZoneOffsetTransitionRule.TimeDefinition WALL;
+  }
+
+  public final class ZoneRules implements java.io.Serializable {
+    method public java.time.Duration getDaylightSavings(java.time.Instant);
+    method public java.time.ZoneOffset getOffset(java.time.Instant);
+    method public java.time.ZoneOffset getOffset(java.time.LocalDateTime);
+    method public java.time.ZoneOffset getStandardOffset(java.time.Instant);
+    method public java.time.zone.ZoneOffsetTransition getTransition(java.time.LocalDateTime);
+    method public java.util.List<java.time.zone.ZoneOffsetTransitionRule> getTransitionRules();
+    method public java.util.List<java.time.zone.ZoneOffsetTransition> getTransitions();
+    method public java.util.List<java.time.ZoneOffset> getValidOffsets(java.time.LocalDateTime);
+    method public boolean isDaylightSavings(java.time.Instant);
+    method public boolean isFixedOffset();
+    method public boolean isValidOffset(java.time.LocalDateTime, java.time.ZoneOffset);
+    method public java.time.zone.ZoneOffsetTransition nextTransition(java.time.Instant);
+    method public static java.time.zone.ZoneRules of(java.time.ZoneOffset, java.time.ZoneOffset, java.util.List<java.time.zone.ZoneOffsetTransition>, java.util.List<java.time.zone.ZoneOffsetTransition>, java.util.List<java.time.zone.ZoneOffsetTransitionRule>);
+    method public static java.time.zone.ZoneRules of(java.time.ZoneOffset);
+    method public java.time.zone.ZoneOffsetTransition previousTransition(java.time.Instant);
+  }
+
+  public class ZoneRulesException extends java.time.DateTimeException {
+    ctor public ZoneRulesException(String);
+    ctor public ZoneRulesException(String, Throwable);
+  }
+
+}
+
+package java.util {
+
+  public abstract class AbstractCollection<E> implements java.util.Collection<E> {
+    ctor protected AbstractCollection();
+    method public boolean add(E);
+    method public boolean addAll(@NonNull java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(@Nullable Object);
+    method public boolean containsAll(@NonNull java.util.Collection<?>);
+    method public boolean isEmpty();
+    method public boolean remove(@Nullable Object);
+    method public boolean removeAll(@NonNull java.util.Collection<?>);
+    method public boolean retainAll(@NonNull java.util.Collection<?>);
+    method @NonNull public Object[] toArray();
+    method @NonNull public <T> T[] toArray(@NonNull T[]);
+  }
+
+  public abstract class AbstractList<E> extends java.util.AbstractCollection<E> implements java.util.List<E> {
+    ctor protected AbstractList();
+    method public void add(int, E);
+    method public boolean addAll(int, @NonNull java.util.Collection<? extends E>);
+    method public int indexOf(@Nullable Object);
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public int lastIndexOf(@Nullable Object);
+    method @NonNull public java.util.ListIterator<E> listIterator();
+    method @NonNull public java.util.ListIterator<E> listIterator(int);
+    method public E remove(int);
+    method protected void removeRange(int, int);
+    method public E set(int, E);
+    method @NonNull public java.util.List<E> subList(int, int);
+    field protected transient int modCount;
+  }
+
+  public abstract class AbstractMap<K, V> implements java.util.Map<K,V> {
+    ctor protected AbstractMap();
+    method public void clear();
+    method public boolean containsKey(@Nullable Object);
+    method public boolean containsValue(@Nullable Object);
+    method @Nullable public V get(@Nullable Object);
+    method public boolean isEmpty();
+    method @NonNull public java.util.Set<K> keySet();
+    method @Nullable public V put(K, V);
+    method public void putAll(@NonNull java.util.Map<? extends K,? extends V>);
+    method @Nullable public V remove(@Nullable Object);
+    method public int size();
+    method @NonNull public java.util.Collection<V> values();
+  }
+
+  public static class AbstractMap.SimpleEntry<K, V> implements java.util.Map.Entry<K,V> java.io.Serializable {
+    ctor public AbstractMap.SimpleEntry(K, V);
+    ctor public AbstractMap.SimpleEntry(@NonNull java.util.Map.Entry<? extends K,? extends V>);
+    method public K getKey();
+    method public V getValue();
+    method public V setValue(V);
+  }
+
+  public static class AbstractMap.SimpleImmutableEntry<K, V> implements java.util.Map.Entry<K,V> java.io.Serializable {
+    ctor public AbstractMap.SimpleImmutableEntry(K, V);
+    ctor public AbstractMap.SimpleImmutableEntry(@NonNull java.util.Map.Entry<? extends K,? extends V>);
+    method public K getKey();
+    method public V getValue();
+    method public V setValue(V);
+  }
+
+  public abstract class AbstractQueue<E> extends java.util.AbstractCollection<E> implements java.util.Queue<E> {
+    ctor protected AbstractQueue();
+    method public E element();
+    method public E remove();
+  }
+
+  public abstract class AbstractSequentialList<E> extends java.util.AbstractList<E> {
+    ctor protected AbstractSequentialList();
+    method public E get(int);
+  }
+
+  public abstract class AbstractSet<E> extends java.util.AbstractCollection<E> implements java.util.Set<E> {
+    ctor protected AbstractSet();
+  }
+
+  public class ArrayDeque<E> extends java.util.AbstractCollection<E> implements java.lang.Cloneable java.util.Deque<E> java.io.Serializable {
+    ctor public ArrayDeque();
+    ctor public ArrayDeque(int);
+    ctor public ArrayDeque(@NonNull java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method @NonNull public java.util.ArrayDeque<E> clone();
+    method @NonNull public java.util.Iterator<E> descendingIterator();
+    method public E element();
+    method public E getFirst();
+    method public E getLast();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method @Nullable public E peek();
+    method @Nullable public E peekFirst();
+    method @Nullable public E peekLast();
+    method @Nullable public E poll();
+    method @Nullable public E pollFirst();
+    method @Nullable public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E remove();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(@Nullable Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(@Nullable Object);
+    method public int size();
+  }
+
+  public class ArrayList<E> extends java.util.AbstractList<E> implements java.lang.Cloneable java.util.List<E> java.util.RandomAccess java.io.Serializable {
+    ctor public ArrayList(int);
+    ctor public ArrayList();
+    ctor public ArrayList(@NonNull java.util.Collection<? extends E>);
+    method @NonNull public Object clone();
+    method public void ensureCapacity(int);
+    method public void forEach(@NonNull java.util.function.Consumer<? super E>);
+    method public E get(int);
+    method public int size();
+    method public void trimToSize();
+  }
+
+  public class Arrays {
+    method @NonNull @java.lang.SafeVarargs public static <T> java.util.List<T> asList(@NonNull T...);
+    method public static int binarySearch(@NonNull long[], long);
+    method public static int binarySearch(@NonNull long[], int, int, long);
+    method public static int binarySearch(@NonNull int[], int);
+    method public static int binarySearch(@NonNull int[], int, int, int);
+    method public static int binarySearch(@NonNull short[], short);
+    method public static int binarySearch(@NonNull short[], int, int, short);
+    method public static int binarySearch(@NonNull char[], char);
+    method public static int binarySearch(@NonNull char[], int, int, char);
+    method public static int binarySearch(@NonNull byte[], byte);
+    method public static int binarySearch(@NonNull byte[], int, int, byte);
+    method public static int binarySearch(@NonNull double[], double);
+    method public static int binarySearch(@NonNull double[], int, int, double);
+    method public static int binarySearch(@NonNull float[], float);
+    method public static int binarySearch(@NonNull float[], int, int, float);
+    method public static int binarySearch(@NonNull Object[], @NonNull Object);
+    method public static int binarySearch(@NonNull Object[], int, int, @NonNull Object);
+    method public static <T> int binarySearch(@NonNull T[], T, @Nullable java.util.Comparator<? super T>);
+    method public static <T> int binarySearch(@NonNull T[], int, int, T, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T> T[] copyOf(@NonNull T[], int);
+    method @NonNull public static <T, U> T[] copyOf(@NonNull U[], int, @NonNull Class<? extends T[]>);
+    method @NonNull public static byte[] copyOf(@NonNull byte[], int);
+    method @NonNull public static short[] copyOf(@NonNull short[], int);
+    method @NonNull public static int[] copyOf(@NonNull int[], int);
+    method @NonNull public static long[] copyOf(@NonNull long[], int);
+    method @NonNull public static char[] copyOf(@NonNull char[], int);
+    method @NonNull public static float[] copyOf(@NonNull float[], int);
+    method @NonNull public static double[] copyOf(@NonNull double[], int);
+    method @NonNull public static boolean[] copyOf(@NonNull boolean[], int);
+    method @NonNull public static <T> T[] copyOfRange(@NonNull T[], int, int);
+    method @NonNull public static <T, U> T[] copyOfRange(@NonNull U[], int, int, @NonNull Class<? extends T[]>);
+    method @NonNull public static byte[] copyOfRange(@NonNull byte[], int, int);
+    method @NonNull public static short[] copyOfRange(@NonNull short[], int, int);
+    method @NonNull public static int[] copyOfRange(@NonNull int[], int, int);
+    method @NonNull public static long[] copyOfRange(@NonNull long[], int, int);
+    method @NonNull public static char[] copyOfRange(@NonNull char[], int, int);
+    method @NonNull public static float[] copyOfRange(@NonNull float[], int, int);
+    method @NonNull public static double[] copyOfRange(@NonNull double[], int, int);
+    method @NonNull public static boolean[] copyOfRange(@NonNull boolean[], int, int);
+    method public static boolean deepEquals(@Nullable Object[], @Nullable Object[]);
+    method public static int deepHashCode(@Nullable Object[]);
+    method @NonNull public static String deepToString(@Nullable Object[]);
+    method public static boolean equals(@Nullable long[], @Nullable long[]);
+    method public static boolean equals(@Nullable int[], @Nullable int[]);
+    method public static boolean equals(@Nullable short[], @Nullable short[]);
+    method public static boolean equals(@Nullable char[], @Nullable char[]);
+    method public static boolean equals(@Nullable byte[], @Nullable byte[]);
+    method public static boolean equals(@Nullable boolean[], @Nullable boolean[]);
+    method public static boolean equals(@Nullable double[], @Nullable double[]);
+    method public static boolean equals(@Nullable float[], @Nullable float[]);
+    method public static boolean equals(@Nullable Object[], @Nullable Object[]);
+    method public static void fill(@NonNull long[], long);
+    method public static void fill(@NonNull long[], int, int, long);
+    method public static void fill(@NonNull int[], int);
+    method public static void fill(@NonNull int[], int, int, int);
+    method public static void fill(@NonNull short[], short);
+    method public static void fill(@NonNull short[], int, int, short);
+    method public static void fill(@NonNull char[], char);
+    method public static void fill(@NonNull char[], int, int, char);
+    method public static void fill(@NonNull byte[], byte);
+    method public static void fill(@NonNull byte[], int, int, byte);
+    method public static void fill(@NonNull boolean[], boolean);
+    method public static void fill(@NonNull boolean[], int, int, boolean);
+    method public static void fill(@NonNull double[], double);
+    method public static void fill(@NonNull double[], int, int, double);
+    method public static void fill(@NonNull float[], float);
+    method public static void fill(@NonNull float[], int, int, float);
+    method public static void fill(@NonNull Object[], @Nullable Object);
+    method public static void fill(@NonNull Object[], int, int, @Nullable Object);
+    method public static int hashCode(@Nullable long[]);
+    method public static int hashCode(@Nullable int[]);
+    method public static int hashCode(@Nullable short[]);
+    method public static int hashCode(@Nullable char[]);
+    method public static int hashCode(@Nullable byte[]);
+    method public static int hashCode(@Nullable boolean[]);
+    method public static int hashCode(@Nullable float[]);
+    method public static int hashCode(@Nullable double[]);
+    method public static int hashCode(@Nullable Object[]);
+    method public static <T> void parallelPrefix(@NonNull T[], @NonNull java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(@NonNull T[], int, int, @NonNull java.util.function.BinaryOperator<T>);
+    method public static void parallelPrefix(@NonNull long[], @NonNull java.util.function.LongBinaryOperator);
+    method public static void parallelPrefix(@NonNull long[], int, int, @NonNull java.util.function.LongBinaryOperator);
+    method public static void parallelPrefix(@NonNull double[], @NonNull java.util.function.DoubleBinaryOperator);
+    method public static void parallelPrefix(@NonNull double[], int, int, @NonNull java.util.function.DoubleBinaryOperator);
+    method public static void parallelPrefix(@NonNull int[], @NonNull java.util.function.IntBinaryOperator);
+    method public static void parallelPrefix(@NonNull int[], int, int, @NonNull java.util.function.IntBinaryOperator);
+    method public static <T> void parallelSetAll(@NonNull T[], @NonNull java.util.function.IntFunction<? extends T>);
+    method public static void parallelSetAll(@NonNull int[], @NonNull java.util.function.IntUnaryOperator);
+    method public static void parallelSetAll(@NonNull long[], @NonNull java.util.function.IntToLongFunction);
+    method public static void parallelSetAll(@NonNull double[], @NonNull java.util.function.IntToDoubleFunction);
+    method public static void parallelSort(@NonNull byte[]);
+    method public static void parallelSort(@NonNull byte[], int, int);
+    method public static void parallelSort(@NonNull char[]);
+    method public static void parallelSort(@NonNull char[], int, int);
+    method public static void parallelSort(@NonNull short[]);
+    method public static void parallelSort(@NonNull short[], int, int);
+    method public static void parallelSort(@NonNull int[]);
+    method public static void parallelSort(@NonNull int[], int, int);
+    method public static void parallelSort(@NonNull long[]);
+    method public static void parallelSort(@NonNull long[], int, int);
+    method public static void parallelSort(@NonNull float[]);
+    method public static void parallelSort(@NonNull float[], int, int);
+    method public static void parallelSort(@NonNull double[]);
+    method public static void parallelSort(@NonNull double[], int, int);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(@NonNull T[]);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(@NonNull T[], int, int);
+    method public static <T> void parallelSort(@NonNull T[], @Nullable java.util.Comparator<? super T>);
+    method public static <T> void parallelSort(@NonNull T[], int, int, @Nullable java.util.Comparator<? super T>);
+    method public static <T> void setAll(@NonNull T[], @NonNull java.util.function.IntFunction<? extends T>);
+    method public static void setAll(@NonNull int[], @NonNull java.util.function.IntUnaryOperator);
+    method public static void setAll(@NonNull long[], @NonNull java.util.function.IntToLongFunction);
+    method public static void setAll(@NonNull double[], @NonNull java.util.function.IntToDoubleFunction);
+    method public static void sort(@NonNull int[]);
+    method public static void sort(@NonNull int[], int, int);
+    method public static void sort(@NonNull long[]);
+    method public static void sort(@NonNull long[], int, int);
+    method public static void sort(@NonNull short[]);
+    method public static void sort(@NonNull short[], int, int);
+    method public static void sort(@NonNull char[]);
+    method public static void sort(@NonNull char[], int, int);
+    method public static void sort(@NonNull byte[]);
+    method public static void sort(@NonNull byte[], int, int);
+    method public static void sort(@NonNull float[]);
+    method public static void sort(@NonNull float[], int, int);
+    method public static void sort(@NonNull double[]);
+    method public static void sort(@NonNull double[], int, int);
+    method public static void sort(@NonNull Object[]);
+    method public static void sort(@NonNull Object[], int, int);
+    method public static <T> void sort(@NonNull T[], @Nullable java.util.Comparator<? super T>);
+    method public static <T> void sort(@NonNull T[], int, int, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T> java.util.Spliterator<T> spliterator(@NonNull T[]);
+    method @NonNull public static <T> java.util.Spliterator<T> spliterator(@NonNull T[], int, int);
+    method @NonNull public static java.util.Spliterator.OfInt spliterator(@NonNull int[]);
+    method @NonNull public static java.util.Spliterator.OfInt spliterator(@NonNull int[], int, int);
+    method @NonNull public static java.util.Spliterator.OfLong spliterator(@NonNull long[]);
+    method @NonNull public static java.util.Spliterator.OfLong spliterator(@NonNull long[], int, int);
+    method @NonNull public static java.util.Spliterator.OfDouble spliterator(@NonNull double[]);
+    method @NonNull public static java.util.Spliterator.OfDouble spliterator(@NonNull double[], int, int);
+    method @NonNull public static <T> java.util.stream.Stream<T> stream(@NonNull T[]);
+    method @NonNull public static <T> java.util.stream.Stream<T> stream(@NonNull T[], int, int);
+    method @NonNull public static java.util.stream.IntStream stream(@NonNull int[]);
+    method @NonNull public static java.util.stream.IntStream stream(@NonNull int[], int, int);
+    method @NonNull public static java.util.stream.LongStream stream(@NonNull long[]);
+    method @NonNull public static java.util.stream.LongStream stream(@NonNull long[], int, int);
+    method @NonNull public static java.util.stream.DoubleStream stream(@NonNull double[]);
+    method @NonNull public static java.util.stream.DoubleStream stream(@NonNull double[], int, int);
+    method @NonNull public static String toString(@Nullable long[]);
+    method @NonNull public static String toString(@Nullable int[]);
+    method @NonNull public static String toString(@Nullable short[]);
+    method @NonNull public static String toString(@Nullable char[]);
+    method @NonNull public static String toString(@Nullable byte[]);
+    method @NonNull public static String toString(@Nullable boolean[]);
+    method @NonNull public static String toString(@Nullable float[]);
+    method @NonNull public static String toString(@Nullable double[]);
+    method @NonNull public static String toString(@Nullable Object[]);
+  }
+
+  public class Base64 {
+    method public static java.util.Base64.Decoder getDecoder();
+    method public static java.util.Base64.Encoder getEncoder();
+    method public static java.util.Base64.Decoder getMimeDecoder();
+    method public static java.util.Base64.Encoder getMimeEncoder();
+    method public static java.util.Base64.Encoder getMimeEncoder(int, byte[]);
+    method public static java.util.Base64.Decoder getUrlDecoder();
+    method public static java.util.Base64.Encoder getUrlEncoder();
+  }
+
+  public static class Base64.Decoder {
+    method public byte[] decode(byte[]);
+    method public byte[] decode(String);
+    method public int decode(byte[], byte[]);
+    method public java.nio.ByteBuffer decode(java.nio.ByteBuffer);
+    method public java.io.InputStream wrap(java.io.InputStream);
+  }
+
+  public static class Base64.Encoder {
+    method public byte[] encode(byte[]);
+    method public int encode(byte[], byte[]);
+    method public java.nio.ByteBuffer encode(java.nio.ByteBuffer);
+    method public String encodeToString(byte[]);
+    method public java.util.Base64.Encoder withoutPadding();
+    method public java.io.OutputStream wrap(java.io.OutputStream);
+  }
+
+  public class BitSet implements java.lang.Cloneable java.io.Serializable {
+    ctor public BitSet();
+    ctor public BitSet(int);
+    method public void and(java.util.BitSet);
+    method public void andNot(java.util.BitSet);
+    method public int cardinality();
+    method public void clear(int);
+    method public void clear(int, int);
+    method public void clear();
+    method public Object clone();
+    method public void flip(int);
+    method public void flip(int, int);
+    method public boolean get(int);
+    method public java.util.BitSet get(int, int);
+    method public boolean intersects(java.util.BitSet);
+    method public boolean isEmpty();
+    method public int length();
+    method public int nextClearBit(int);
+    method public int nextSetBit(int);
+    method public void or(java.util.BitSet);
+    method public int previousClearBit(int);
+    method public int previousSetBit(int);
+    method public void set(int);
+    method public void set(int, boolean);
+    method public void set(int, int);
+    method public void set(int, int, boolean);
+    method public int size();
+    method public java.util.stream.IntStream stream();
+    method public byte[] toByteArray();
+    method public long[] toLongArray();
+    method public static java.util.BitSet valueOf(long[]);
+    method public static java.util.BitSet valueOf(java.nio.LongBuffer);
+    method public static java.util.BitSet valueOf(byte[]);
+    method public static java.util.BitSet valueOf(java.nio.ByteBuffer);
+    method public void xor(java.util.BitSet);
+  }
+
+  public abstract class Calendar implements java.lang.Cloneable java.lang.Comparable<java.util.Calendar> java.io.Serializable {
+    ctor protected Calendar();
+    ctor protected Calendar(@NonNull java.util.TimeZone, @NonNull java.util.Locale);
+    method public abstract void add(int, int);
+    method public boolean after(@Nullable Object);
+    method public boolean before(@Nullable Object);
+    method public final void clear();
+    method public final void clear(int);
+    method @NonNull public Object clone();
+    method public int compareTo(@NonNull java.util.Calendar);
+    method protected void complete();
+    method protected abstract void computeFields();
+    method protected abstract void computeTime();
+    method public int get(int);
+    method public int getActualMaximum(int);
+    method public int getActualMinimum(int);
+    method @NonNull public static java.util.Set<java.lang.String> getAvailableCalendarTypes();
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @NonNull public String getCalendarType();
+    method @Nullable public String getDisplayName(int, int, @NonNull java.util.Locale);
+    method @Nullable public java.util.Map<java.lang.String,java.lang.Integer> getDisplayNames(int, int, @NonNull java.util.Locale);
+    method public int getFirstDayOfWeek();
+    method public abstract int getGreatestMinimum(int);
+    method @NonNull public static java.util.Calendar getInstance();
+    method @NonNull public static java.util.Calendar getInstance(@NonNull java.util.TimeZone);
+    method @NonNull public static java.util.Calendar getInstance(@NonNull java.util.Locale);
+    method @NonNull public static java.util.Calendar getInstance(@NonNull java.util.TimeZone, @NonNull java.util.Locale);
+    method public abstract int getLeastMaximum(int);
+    method public abstract int getMaximum(int);
+    method public int getMinimalDaysInFirstWeek();
+    method public abstract int getMinimum(int);
+    method @NonNull public final java.util.Date getTime();
+    method public long getTimeInMillis();
+    method @NonNull public java.util.TimeZone getTimeZone();
+    method public int getWeekYear();
+    method public int getWeeksInWeekYear();
+    method protected final int internalGet(int);
+    method public boolean isLenient();
+    method public final boolean isSet(int);
+    method public boolean isWeekDateSupported();
+    method public abstract void roll(int, boolean);
+    method public void roll(int, int);
+    method public void set(int, int);
+    method public final void set(int, int, int);
+    method public final void set(int, int, int, int, int);
+    method public final void set(int, int, int, int, int, int);
+    method public void setFirstDayOfWeek(int);
+    method public void setLenient(boolean);
+    method public void setMinimalDaysInFirstWeek(int);
+    method public final void setTime(@NonNull java.util.Date);
+    method public void setTimeInMillis(long);
+    method public void setTimeZone(@NonNull java.util.TimeZone);
+    method public void setWeekDate(int, int, int);
+    method @NonNull public final java.time.Instant toInstant();
+    field public static final int ALL_STYLES = 0; // 0x0
+    field public static final int AM = 0; // 0x0
+    field public static final int AM_PM = 9; // 0x9
+    field public static final int APRIL = 3; // 0x3
+    field public static final int AUGUST = 7; // 0x7
+    field public static final int DATE = 5; // 0x5
+    field public static final int DAY_OF_MONTH = 5; // 0x5
+    field public static final int DAY_OF_WEEK = 7; // 0x7
+    field public static final int DAY_OF_WEEK_IN_MONTH = 8; // 0x8
+    field public static final int DAY_OF_YEAR = 6; // 0x6
+    field public static final int DECEMBER = 11; // 0xb
+    field public static final int DST_OFFSET = 16; // 0x10
+    field public static final int ERA = 0; // 0x0
+    field public static final int FEBRUARY = 1; // 0x1
+    field public static final int FIELD_COUNT = 17; // 0x11
+    field public static final int FRIDAY = 6; // 0x6
+    field public static final int HOUR = 10; // 0xa
+    field public static final int HOUR_OF_DAY = 11; // 0xb
+    field public static final int JANUARY = 0; // 0x0
+    field public static final int JULY = 6; // 0x6
+    field public static final int JUNE = 5; // 0x5
+    field public static final int LONG = 2; // 0x2
+    field public static final int LONG_FORMAT = 2; // 0x2
+    field public static final int LONG_STANDALONE = 32770; // 0x8002
+    field public static final int MARCH = 2; // 0x2
+    field public static final int MAY = 4; // 0x4
+    field public static final int MILLISECOND = 14; // 0xe
+    field public static final int MINUTE = 12; // 0xc
+    field public static final int MONDAY = 2; // 0x2
+    field public static final int MONTH = 2; // 0x2
+    field public static final int NARROW_FORMAT = 4; // 0x4
+    field public static final int NARROW_STANDALONE = 32772; // 0x8004
+    field public static final int NOVEMBER = 10; // 0xa
+    field public static final int OCTOBER = 9; // 0x9
+    field public static final int PM = 1; // 0x1
+    field public static final int SATURDAY = 7; // 0x7
+    field public static final int SECOND = 13; // 0xd
+    field public static final int SEPTEMBER = 8; // 0x8
+    field public static final int SHORT = 1; // 0x1
+    field public static final int SHORT_FORMAT = 1; // 0x1
+    field public static final int SHORT_STANDALONE = 32769; // 0x8001
+    field public static final int SUNDAY = 1; // 0x1
+    field public static final int THURSDAY = 5; // 0x5
+    field public static final int TUESDAY = 3; // 0x3
+    field public static final int UNDECIMBER = 12; // 0xc
+    field public static final int WEDNESDAY = 4; // 0x4
+    field public static final int WEEK_OF_MONTH = 4; // 0x4
+    field public static final int WEEK_OF_YEAR = 3; // 0x3
+    field public static final int YEAR = 1; // 0x1
+    field public static final int ZONE_OFFSET = 15; // 0xf
+    field protected boolean areFieldsSet;
+    field @NonNull protected int[] fields;
+    field @NonNull protected boolean[] isSet;
+    field protected boolean isTimeSet;
+    field protected long time;
+  }
+
+  public static class Calendar.Builder {
+    ctor public Calendar.Builder();
+    method @NonNull public java.util.Calendar build();
+    method @NonNull public java.util.Calendar.Builder set(int, int);
+    method @NonNull public java.util.Calendar.Builder setCalendarType(@NonNull String);
+    method @NonNull public java.util.Calendar.Builder setDate(int, int, int);
+    method @NonNull public java.util.Calendar.Builder setFields(@NonNull int...);
+    method @NonNull public java.util.Calendar.Builder setInstant(long);
+    method @NonNull public java.util.Calendar.Builder setInstant(@NonNull java.util.Date);
+    method @NonNull public java.util.Calendar.Builder setLenient(boolean);
+    method @NonNull public java.util.Calendar.Builder setLocale(@NonNull java.util.Locale);
+    method @NonNull public java.util.Calendar.Builder setTimeOfDay(int, int, int);
+    method @NonNull public java.util.Calendar.Builder setTimeOfDay(int, int, int, int);
+    method @NonNull public java.util.Calendar.Builder setTimeZone(@NonNull java.util.TimeZone);
+    method @NonNull public java.util.Calendar.Builder setWeekDate(int, int, int);
+    method @NonNull public java.util.Calendar.Builder setWeekDefinition(int, int);
+  }
+
+  public interface Collection<E> extends java.lang.Iterable<E> {
+    method public boolean add(E);
+    method public boolean addAll(@NonNull java.util.Collection<? extends E>);
+    method public void clear();
+    method public boolean contains(@Nullable Object);
+    method public boolean containsAll(@NonNull java.util.Collection<?>);
+    method public boolean equals(@Nullable Object);
+    method public int hashCode();
+    method public boolean isEmpty();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method @NonNull public default java.util.stream.Stream<E> parallelStream();
+    method public boolean remove(@Nullable Object);
+    method public boolean removeAll(@NonNull java.util.Collection<?>);
+    method public default boolean removeIf(@NonNull java.util.function.Predicate<? super E>);
+    method public boolean retainAll(@NonNull java.util.Collection<?>);
+    method public int size();
+    method @NonNull public default java.util.Spliterator<E> spliterator();
+    method @NonNull public default java.util.stream.Stream<E> stream();
+    method @NonNull public Object[] toArray();
+    method @NonNull public <T> T[] toArray(@NonNull T[]);
+  }
+
+  public class Collections {
+    method @java.lang.SafeVarargs public static <T> boolean addAll(@NonNull java.util.Collection<? super T>, @NonNull T...);
+    method @NonNull public static <T> java.util.Queue<T> asLifoQueue(@NonNull java.util.Deque<T>);
+    method public static <T> int binarySearch(@NonNull java.util.List<? extends java.lang.Comparable<? super T>>, @NonNull T);
+    method public static <T> int binarySearch(@NonNull java.util.List<? extends T>, T, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <E> java.util.Collection<E> checkedCollection(@NonNull java.util.Collection<E>, @NonNull Class<E>);
+    method @NonNull public static <E> java.util.List<E> checkedList(@NonNull java.util.List<E>, @NonNull Class<E>);
+    method @NonNull public static <K, V> java.util.Map<K,V> checkedMap(@NonNull java.util.Map<K,V>, @NonNull Class<K>, @NonNull Class<V>);
+    method @NonNull public static <K, V> java.util.NavigableMap<K,V> checkedNavigableMap(@NonNull java.util.NavigableMap<K,V>, @NonNull Class<K>, @NonNull Class<V>);
+    method @NonNull public static <E> java.util.NavigableSet<E> checkedNavigableSet(@NonNull java.util.NavigableSet<E>, @NonNull Class<E>);
+    method @NonNull public static <E> java.util.Queue<E> checkedQueue(@NonNull java.util.Queue<E>, @NonNull Class<E>);
+    method @NonNull public static <E> java.util.Set<E> checkedSet(@NonNull java.util.Set<E>, @NonNull Class<E>);
+    method @NonNull public static <K, V> java.util.SortedMap<K,V> checkedSortedMap(@NonNull java.util.SortedMap<K,V>, @NonNull Class<K>, @NonNull Class<V>);
+    method @NonNull public static <E> java.util.SortedSet<E> checkedSortedSet(@NonNull java.util.SortedSet<E>, @NonNull Class<E>);
+    method public static <T> void copy(@NonNull java.util.List<? super T>, @NonNull java.util.List<? extends T>);
+    method public static boolean disjoint(@NonNull java.util.Collection<?>, @NonNull java.util.Collection<?>);
+    method @NonNull public static <T> java.util.Enumeration<T> emptyEnumeration();
+    method @NonNull public static <T> java.util.Iterator<T> emptyIterator();
+    method @NonNull public static final <T> java.util.List<T> emptyList();
+    method @NonNull public static <T> java.util.ListIterator<T> emptyListIterator();
+    method @NonNull public static final <K, V> java.util.Map<K,V> emptyMap();
+    method @NonNull public static final <K, V> java.util.NavigableMap<K,V> emptyNavigableMap();
+    method @NonNull public static <E> java.util.NavigableSet<E> emptyNavigableSet();
+    method @NonNull public static final <T> java.util.Set<T> emptySet();
+    method @NonNull public static final <K, V> java.util.SortedMap<K,V> emptySortedMap();
+    method @NonNull public static <E> java.util.SortedSet<E> emptySortedSet();
+    method @NonNull public static <T> java.util.Enumeration<T> enumeration(@NonNull java.util.Collection<T>);
+    method public static <T> void fill(@NonNull java.util.List<? super T>, T);
+    method public static int frequency(@NonNull java.util.Collection<?>, @Nullable Object);
+    method public static int indexOfSubList(@NonNull java.util.List<?>, @NonNull java.util.List<?>);
+    method public static int lastIndexOfSubList(@NonNull java.util.List<?>, @NonNull java.util.List<?>);
+    method @NonNull public static <T> java.util.ArrayList<T> list(@NonNull java.util.Enumeration<T>);
+    method @NonNull public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T max(@NonNull java.util.Collection<? extends T>);
+    method public static <T> T max(@NonNull java.util.Collection<? extends T>, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T min(@NonNull java.util.Collection<? extends T>);
+    method public static <T> T min(@NonNull java.util.Collection<? extends T>, @Nullable java.util.Comparator<? super T>);
+    method @NonNull public static <T> java.util.List<T> nCopies(int, T);
+    method @NonNull public static <E> java.util.Set<E> newSetFromMap(@NonNull java.util.Map<E,java.lang.Boolean>);
+    method public static <T> boolean replaceAll(@NonNull java.util.List<T>, T, T);
+    method public static void reverse(@NonNull java.util.List<?>);
+    method @NonNull public static <T> java.util.Comparator<T> reverseOrder();
+    method @NonNull public static <T> java.util.Comparator<T> reverseOrder(@Nullable java.util.Comparator<T>);
+    method public static void rotate(@NonNull java.util.List<?>, int);
+    method public static void shuffle(@NonNull java.util.List<?>);
+    method public static void shuffle(@NonNull java.util.List<?>, @NonNull java.util.Random);
+    method @NonNull public static <T> java.util.Set<T> singleton(T);
+    method @NonNull public static <T> java.util.List<T> singletonList(T);
+    method @NonNull public static <K, V> java.util.Map<K,V> singletonMap(K, V);
+    method public static <T extends java.lang.Comparable<? super T>> void sort(@NonNull java.util.List<T>);
+    method public static <T> void sort(@NonNull java.util.List<T>, @Nullable java.util.Comparator<? super T>);
+    method public static void swap(@NonNull java.util.List<?>, int, int);
+    method @NonNull public static <T> java.util.Collection<T> synchronizedCollection(@NonNull java.util.Collection<T>);
+    method @NonNull public static <T> java.util.List<T> synchronizedList(@NonNull java.util.List<T>);
+    method @NonNull public static <K, V> java.util.Map<K,V> synchronizedMap(@NonNull java.util.Map<K,V>);
+    method @NonNull public static <K, V> java.util.NavigableMap<K,V> synchronizedNavigableMap(@NonNull java.util.NavigableMap<K,V>);
+    method @NonNull public static <T> java.util.NavigableSet<T> synchronizedNavigableSet(@NonNull java.util.NavigableSet<T>);
+    method @NonNull public static <T> java.util.Set<T> synchronizedSet(@NonNull java.util.Set<T>);
+    method @NonNull public static <K, V> java.util.SortedMap<K,V> synchronizedSortedMap(@NonNull java.util.SortedMap<K,V>);
+    method @NonNull public static <T> java.util.SortedSet<T> synchronizedSortedSet(@NonNull java.util.SortedSet<T>);
+    method @NonNull public static <T> java.util.Collection<T> unmodifiableCollection(@NonNull java.util.Collection<? extends T>);
+    method @NonNull public static <T> java.util.List<T> unmodifiableList(@NonNull java.util.List<? extends T>);
+    method @NonNull public static <K, V> java.util.Map<K,V> unmodifiableMap(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public static <K, V> java.util.NavigableMap<K,V> unmodifiableNavigableMap(@NonNull java.util.NavigableMap<K,? extends V>);
+    method @NonNull public static <T> java.util.NavigableSet<T> unmodifiableNavigableSet(@NonNull java.util.NavigableSet<T>);
+    method @NonNull public static <T> java.util.Set<T> unmodifiableSet(@NonNull java.util.Set<? extends T>);
+    method @NonNull public static <K, V> java.util.SortedMap<K,V> unmodifiableSortedMap(@NonNull java.util.SortedMap<K,? extends V>);
+    method @NonNull public static <T> java.util.SortedSet<T> unmodifiableSortedSet(@NonNull java.util.SortedSet<T>);
+    field @NonNull public static final java.util.List EMPTY_LIST;
+    field @NonNull public static final java.util.Map EMPTY_MAP;
+    field @NonNull public static final java.util.Set EMPTY_SET;
+  }
+
+  @java.lang.FunctionalInterface public interface Comparator<T> {
+    method public int compare(T, T);
+    method public static <T, U> java.util.Comparator<T> comparing(java.util.function.Function<? super T,? extends U>, java.util.Comparator<? super U>);
+    method public static <T, U extends java.lang.Comparable<? super U>> java.util.Comparator<T> comparing(java.util.function.Function<? super T,? extends U>);
+    method public static <T> java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
+    method public boolean equals(Object);
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> naturalOrder();
+    method public static <T> java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
+    method public static <T> java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> reverseOrder();
+    method public default java.util.Comparator<T> reversed();
+    method public default java.util.Comparator<T> thenComparing(java.util.Comparator<? super T>);
+    method public default <U> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T,? extends U>, java.util.Comparator<? super U>);
+    method public default <U extends java.lang.Comparable<? super U>> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T,? extends U>);
+    method public default java.util.Comparator<T> thenComparingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public default java.util.Comparator<T> thenComparingInt(java.util.function.ToIntFunction<? super T>);
+    method public default java.util.Comparator<T> thenComparingLong(java.util.function.ToLongFunction<? super T>);
+  }
+
+  public class ConcurrentModificationException extends java.lang.RuntimeException {
+    ctor public ConcurrentModificationException();
+    ctor public ConcurrentModificationException(String);
+    ctor public ConcurrentModificationException(Throwable);
+    ctor public ConcurrentModificationException(String, Throwable);
+  }
+
+  public final class Currency implements java.io.Serializable {
+    method public static java.util.Set<java.util.Currency> getAvailableCurrencies();
+    method public String getCurrencyCode();
+    method public int getDefaultFractionDigits();
+    method public String getDisplayName();
+    method public String getDisplayName(java.util.Locale);
+    method public static java.util.Currency getInstance(String);
+    method public static java.util.Currency getInstance(java.util.Locale);
+    method public int getNumericCode();
+    method public String getSymbol();
+    method public String getSymbol(java.util.Locale);
+  }
+
+  public class Date implements java.lang.Cloneable java.lang.Comparable<java.util.Date> java.io.Serializable {
+    ctor public Date();
+    ctor public Date(long);
+    ctor @Deprecated public Date(int, int, int);
+    ctor @Deprecated public Date(int, int, int, int, int);
+    ctor @Deprecated public Date(int, int, int, int, int, int);
+    ctor @Deprecated public Date(String);
+    method @Deprecated public static long UTC(int, int, int, int, int, int);
+    method public boolean after(java.util.Date);
+    method public boolean before(java.util.Date);
+    method public Object clone();
+    method public int compareTo(java.util.Date);
+    method public static java.util.Date from(java.time.Instant);
+    method @Deprecated public int getDate();
+    method @Deprecated public int getDay();
+    method @Deprecated public int getHours();
+    method @Deprecated public int getMinutes();
+    method @Deprecated public int getMonth();
+    method @Deprecated public int getSeconds();
+    method public long getTime();
+    method @Deprecated public int getTimezoneOffset();
+    method @Deprecated public int getYear();
+    method @Deprecated public static long parse(String);
+    method @Deprecated public void setDate(int);
+    method @Deprecated public void setHours(int);
+    method @Deprecated public void setMinutes(int);
+    method @Deprecated public void setMonth(int);
+    method @Deprecated public void setSeconds(int);
+    method public void setTime(long);
+    method @Deprecated public void setYear(int);
+    method @Deprecated public String toGMTString();
+    method public java.time.Instant toInstant();
+    method @Deprecated public String toLocaleString();
+  }
+
+  public interface Deque<E> extends java.util.Queue<E> {
+    method public void addFirst(E);
+    method public void addLast(E);
+    method @NonNull public java.util.Iterator<E> descendingIterator();
+    method public E getFirst();
+    method public E getLast();
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method @Nullable public E peekFirst();
+    method @Nullable public E peekLast();
+    method @Nullable public E pollFirst();
+    method @Nullable public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(@Nullable Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(@Nullable Object);
+  }
+
+  public abstract class Dictionary<K, V> {
+    ctor public Dictionary();
+    method public abstract java.util.Enumeration<V> elements();
+    method public abstract V get(Object);
+    method public abstract boolean isEmpty();
+    method public abstract java.util.Enumeration<K> keys();
+    method public abstract V put(K, V);
+    method public abstract V remove(Object);
+    method public abstract int size();
+  }
+
+  public class DoubleSummaryStatistics implements java.util.function.DoubleConsumer {
+    ctor public DoubleSummaryStatistics();
+    method public void accept(double);
+    method public void combine(java.util.DoubleSummaryStatistics);
+    method public final double getAverage();
+    method public final long getCount();
+    method public final double getMax();
+    method public final double getMin();
+    method public final double getSum();
+  }
+
+  public class DuplicateFormatFlagsException extends java.util.IllegalFormatException {
+    ctor public DuplicateFormatFlagsException(String);
+    method public String getFlags();
+  }
+
+  public class EmptyStackException extends java.lang.RuntimeException {
+    ctor public EmptyStackException();
+  }
+
+  public class EnumMap<K extends java.lang.Enum<K>, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.io.Serializable {
+    ctor public EnumMap(Class<K>);
+    ctor public EnumMap(java.util.EnumMap<K,? extends V>);
+    ctor public EnumMap(java.util.Map<K,? extends V>);
+    method public java.util.EnumMap<K,V> clone();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+  public abstract class EnumSet<E extends java.lang.Enum<E>> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.io.Serializable {
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> allOf(Class<E>);
+    method public java.util.EnumSet<E> clone();
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.Collection<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> noneOf(Class<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E, E);
+    method @java.lang.SafeVarargs public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E...);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> range(E, E);
+  }
+
+  public interface Enumeration<E> {
+    method public boolean hasMoreElements();
+    method public E nextElement();
+  }
+
+  public interface EventListener {
+  }
+
+  public abstract class EventListenerProxy<T extends java.util.EventListener> implements java.util.EventListener {
+    ctor public EventListenerProxy(T);
+    method public T getListener();
+  }
+
+  public class EventObject implements java.io.Serializable {
+    ctor public EventObject(Object);
+    method public Object getSource();
+    field protected transient Object source;
+  }
+
+  public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException {
+    ctor public FormatFlagsConversionMismatchException(String, char);
+    method public char getConversion();
+    method public String getFlags();
+  }
+
+  public interface Formattable {
+    method public void formatTo(java.util.Formatter, int, int, int);
+  }
+
+  public class FormattableFlags {
+    field public static final int ALTERNATE = 4; // 0x4
+    field public static final int LEFT_JUSTIFY = 1; // 0x1
+    field public static final int UPPERCASE = 2; // 0x2
+  }
+
+  public final class Formatter implements java.io.Closeable java.io.Flushable {
+    ctor public Formatter();
+    ctor public Formatter(Appendable);
+    ctor public Formatter(java.util.Locale);
+    ctor public Formatter(Appendable, java.util.Locale);
+    ctor public Formatter(String) throws java.io.FileNotFoundException;
+    ctor public Formatter(String, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(String, String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.File) throws java.io.FileNotFoundException;
+    ctor public Formatter(java.io.File, String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.File, String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.PrintStream);
+    ctor public Formatter(java.io.OutputStream);
+    ctor public Formatter(java.io.OutputStream, String) throws java.io.UnsupportedEncodingException;
+    ctor public Formatter(java.io.OutputStream, String, java.util.Locale) throws java.io.UnsupportedEncodingException;
+    method public void close();
+    method public void flush();
+    method public java.util.Formatter format(String, java.lang.Object...);
+    method public java.util.Formatter format(java.util.Locale, String, java.lang.Object...);
+    method public java.io.IOException ioException();
+    method public java.util.Locale locale();
+    method public Appendable out();
+  }
+
+  public enum Formatter.BigDecimalLayoutForm {
+    enum_constant public static final java.util.Formatter.BigDecimalLayoutForm DECIMAL_FLOAT;
+    enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC;
+  }
+
+  public class FormatterClosedException extends java.lang.IllegalStateException {
+    ctor public FormatterClosedException();
+  }
+
+  public class GregorianCalendar extends java.util.Calendar {
+    ctor public GregorianCalendar();
+    ctor public GregorianCalendar(java.util.TimeZone);
+    ctor public GregorianCalendar(java.util.Locale);
+    ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale);
+    ctor public GregorianCalendar(int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int, int);
+    method public void add(int, int);
+    method protected void computeFields();
+    method protected void computeTime();
+    method public static java.util.GregorianCalendar from(java.time.ZonedDateTime);
+    method public int getGreatestMinimum(int);
+    method public final java.util.Date getGregorianChange();
+    method public int getLeastMaximum(int);
+    method public int getMaximum(int);
+    method public int getMinimum(int);
+    method public boolean isLeapYear(int);
+    method public final boolean isWeekDateSupported();
+    method public void roll(int, boolean);
+    method public void setGregorianChange(java.util.Date);
+    method public java.time.ZonedDateTime toZonedDateTime();
+    field public static final int AD = 1; // 0x1
+    field public static final int BC = 0; // 0x0
+  }
+
+  public class HashMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.Map<K,V> java.io.Serializable {
+    ctor public HashMap(int, float);
+    ctor public HashMap(int);
+    ctor public HashMap();
+    ctor public HashMap(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public Object clone();
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+  public class HashSet<E> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.io.Serializable java.util.Set<E> {
+    ctor public HashSet();
+    ctor public HashSet(@NonNull java.util.Collection<? extends E>);
+    ctor public HashSet(int, float);
+    ctor public HashSet(int);
+    method @NonNull public Object clone();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public int size();
+  }
+
+  public class Hashtable<K, V> extends java.util.Dictionary<K,V> implements java.lang.Cloneable java.util.Map<K,V> java.io.Serializable {
+    ctor public Hashtable(int, float);
+    ctor public Hashtable(int);
+    ctor public Hashtable();
+    ctor public Hashtable(java.util.Map<? extends K,? extends V>);
+    method public void clear();
+    method public Object clone();
+    method public boolean contains(Object);
+    method public boolean containsKey(Object);
+    method public boolean containsValue(Object);
+    method public java.util.Enumeration<V> elements();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public V get(Object);
+    method public boolean isEmpty();
+    method public java.util.Set<K> keySet();
+    method public java.util.Enumeration<K> keys();
+    method public V put(K, V);
+    method public void putAll(java.util.Map<? extends K,? extends V>);
+    method protected void rehash();
+    method public V remove(Object);
+    method public int size();
+    method public java.util.Collection<V> values();
+  }
+
+  public class IdentityHashMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.Map<K,V> java.io.Serializable {
+    ctor public IdentityHashMap();
+    ctor public IdentityHashMap(int);
+    ctor public IdentityHashMap(java.util.Map<? extends K,? extends V>);
+    method public Object clone();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+  public class IllegalFormatCodePointException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatCodePointException(int);
+    method public int getCodePoint();
+  }
+
+  public class IllegalFormatConversionException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatConversionException(char, Class<?>);
+    method public Class<?> getArgumentClass();
+    method public char getConversion();
+  }
+
+  public class IllegalFormatException extends java.lang.IllegalArgumentException {
+  }
+
+  public class IllegalFormatFlagsException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatFlagsException(String);
+    method public String getFlags();
+  }
+
+  public class IllegalFormatPrecisionException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatPrecisionException(int);
+    method public int getPrecision();
+  }
+
+  public class IllegalFormatWidthException extends java.util.IllegalFormatException {
+    ctor public IllegalFormatWidthException(int);
+    method public int getWidth();
+  }
+
+  public class IllformedLocaleException extends java.lang.RuntimeException {
+    ctor public IllformedLocaleException();
+    ctor public IllformedLocaleException(String);
+    ctor public IllformedLocaleException(String, int);
+    method public int getErrorIndex();
+  }
+
+  public class InputMismatchException extends java.util.NoSuchElementException {
+    ctor public InputMismatchException();
+    ctor public InputMismatchException(String);
+  }
+
+  public class IntSummaryStatistics implements java.util.function.IntConsumer {
+    ctor public IntSummaryStatistics();
+    method public void accept(int);
+    method public void combine(java.util.IntSummaryStatistics);
+    method public final double getAverage();
+    method public final long getCount();
+    method public final int getMax();
+    method public final int getMin();
+    method public final long getSum();
+  }
+
+  public class InvalidPropertiesFormatException extends java.io.IOException {
+    ctor public InvalidPropertiesFormatException(Throwable);
+    ctor public InvalidPropertiesFormatException(String);
+  }
+
+  public interface Iterator<E> {
+    method public default void forEachRemaining(@NonNull java.util.function.Consumer<? super E>);
+    method public boolean hasNext();
+    method public E next();
+    method public default void remove();
+  }
+
+  public class LinkedHashMap<K, V> extends java.util.HashMap<K,V> implements java.util.Map<K,V> {
+    ctor public LinkedHashMap(int, float);
+    ctor public LinkedHashMap(int);
+    ctor public LinkedHashMap();
+    ctor public LinkedHashMap(java.util.Map<? extends K,? extends V>);
+    ctor public LinkedHashMap(int, float, boolean);
+    method protected boolean removeEldestEntry(java.util.Map.Entry<K,V>);
+  }
+
+  public class LinkedHashSet<E> extends java.util.HashSet<E> implements java.lang.Cloneable java.io.Serializable java.util.Set<E> {
+    ctor public LinkedHashSet(int, float);
+    ctor public LinkedHashSet(int);
+    ctor public LinkedHashSet();
+    ctor public LinkedHashSet(java.util.Collection<? extends E>);
+  }
+
+  public class LinkedList<E> extends java.util.AbstractSequentialList<E> implements java.lang.Cloneable java.util.Deque<E> java.util.List<E> java.io.Serializable {
+    ctor public LinkedList();
+    ctor public LinkedList(@NonNull java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method @NonNull public Object clone();
+    method @NonNull public java.util.Iterator<E> descendingIterator();
+    method public E element();
+    method public E getFirst();
+    method public E getLast();
+    method public boolean offer(E);
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method @Nullable public E peek();
+    method @Nullable public E peekFirst();
+    method @Nullable public E peekLast();
+    method @Nullable public E poll();
+    method @Nullable public E pollFirst();
+    method @Nullable public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E remove();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(@Nullable Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(@Nullable Object);
+    method public int size();
+  }
+
+  public interface List<E> extends java.util.Collection<E> {
+    method public void add(int, E);
+    method public boolean addAll(int, @NonNull java.util.Collection<? extends E>);
+    method @NonNull public static <E> java.util.List<E> copyOf(@NonNull java.util.Collection<? extends E>);
+    method public E get(int);
+    method public int indexOf(@Nullable Object);
+    method public int lastIndexOf(@Nullable Object);
+    method @NonNull public java.util.ListIterator<E> listIterator();
+    method @NonNull public java.util.ListIterator<E> listIterator(int);
+    method @NonNull public static <E> java.util.List<E> of();
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.List<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull @java.lang.SafeVarargs public static <E> java.util.List<E> of(@NonNull E...);
+    method public E remove(int);
+    method public default void replaceAll(@NonNull java.util.function.UnaryOperator<E>);
+    method public E set(int, E);
+    method public default void sort(@Nullable java.util.Comparator<? super E>);
+    method @NonNull public java.util.List<E> subList(int, int);
+  }
+
+  public interface ListIterator<E> extends java.util.Iterator<E> {
+    method public void add(E);
+    method public boolean hasPrevious();
+    method public int nextIndex();
+    method public E previous();
+    method public int previousIndex();
+    method public void remove();
+    method public void set(E);
+  }
+
+  public abstract class ListResourceBundle extends java.util.ResourceBundle {
+    ctor public ListResourceBundle();
+    method protected abstract Object[][] getContents();
+    method public java.util.Enumeration<java.lang.String> getKeys();
+    method public final Object handleGetObject(String);
+  }
+
+  public final class Locale implements java.lang.Cloneable java.io.Serializable {
+    ctor public Locale(@NonNull String, @NonNull String, @NonNull String);
+    ctor public Locale(@NonNull String, @NonNull String);
+    ctor public Locale(@NonNull String);
+    method @NonNull public Object clone();
+    method @NonNull public static java.util.List<java.util.Locale> filter(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.util.Locale>, @NonNull java.util.Locale.FilteringMode);
+    method @NonNull public static java.util.List<java.util.Locale> filter(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.util.Locale>);
+    method @NonNull public static java.util.List<java.lang.String> filterTags(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.lang.String>, @NonNull java.util.Locale.FilteringMode);
+    method @NonNull public static java.util.List<java.lang.String> filterTags(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public static java.util.Locale forLanguageTag(@NonNull String);
+    method @NonNull public static java.util.Locale[] getAvailableLocales();
+    method @NonNull public String getCountry();
+    method @NonNull public static java.util.Locale getDefault();
+    method @NonNull public static java.util.Locale getDefault(@NonNull java.util.Locale.Category);
+    method @NonNull public String getDisplayCountry();
+    method @NonNull public String getDisplayCountry(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayLanguage();
+    method @NonNull public String getDisplayLanguage(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayName();
+    method @NonNull public String getDisplayName(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayScript();
+    method @NonNull public String getDisplayScript(@NonNull java.util.Locale);
+    method @NonNull public String getDisplayVariant();
+    method @NonNull public String getDisplayVariant(@NonNull java.util.Locale);
+    method @Nullable public String getExtension(char);
+    method @NonNull public java.util.Set<java.lang.Character> getExtensionKeys();
+    method @NonNull public String getISO3Country() throws java.util.MissingResourceException;
+    method @NonNull public String getISO3Language() throws java.util.MissingResourceException;
+    method @NonNull public static String[] getISOCountries();
+    method @NonNull public static String[] getISOLanguages();
+    method @NonNull public String getLanguage();
+    method @NonNull public String getScript();
+    method @NonNull public java.util.Set<java.lang.String> getUnicodeLocaleAttributes();
+    method @NonNull public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
+    method @Nullable public String getUnicodeLocaleType(@NonNull String);
+    method @NonNull public String getVariant();
+    method public boolean hasExtensions();
+    method @Nullable public static java.util.Locale lookup(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.util.Locale>);
+    method @Nullable public static String lookupTag(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Collection<java.lang.String>);
+    method public static void setDefault(@NonNull java.util.Locale);
+    method public static void setDefault(@NonNull java.util.Locale.Category, @NonNull java.util.Locale);
+    method @NonNull public java.util.Locale stripExtensions();
+    method @NonNull public String toLanguageTag();
+    field @NonNull public static final java.util.Locale CANADA;
+    field @NonNull public static final java.util.Locale CANADA_FRENCH;
+    field @NonNull public static final java.util.Locale CHINA;
+    field @NonNull public static final java.util.Locale CHINESE;
+    field @NonNull public static final java.util.Locale ENGLISH;
+    field @NonNull public static final java.util.Locale FRANCE;
+    field @NonNull public static final java.util.Locale FRENCH;
+    field @NonNull public static final java.util.Locale GERMAN;
+    field @NonNull public static final java.util.Locale GERMANY;
+    field @NonNull public static final java.util.Locale ITALIAN;
+    field @NonNull public static final java.util.Locale ITALY;
+    field @NonNull public static final java.util.Locale JAPAN;
+    field @NonNull public static final java.util.Locale JAPANESE;
+    field @NonNull public static final java.util.Locale KOREA;
+    field @NonNull public static final java.util.Locale KOREAN;
+    field @NonNull public static final java.util.Locale PRC;
+    field public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x'
+    field @NonNull public static final java.util.Locale ROOT;
+    field @NonNull public static final java.util.Locale SIMPLIFIED_CHINESE;
+    field @NonNull public static final java.util.Locale TAIWAN;
+    field @NonNull public static final java.util.Locale TRADITIONAL_CHINESE;
+    field @NonNull public static final java.util.Locale UK;
+    field public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u'
+    field @NonNull public static final java.util.Locale US;
+  }
+
+  public static final class Locale.Builder {
+    ctor public Locale.Builder();
+    method @NonNull public java.util.Locale.Builder addUnicodeLocaleAttribute(@NonNull String);
+    method @NonNull public java.util.Locale build();
+    method @NonNull public java.util.Locale.Builder clear();
+    method @NonNull public java.util.Locale.Builder clearExtensions();
+    method @NonNull public java.util.Locale.Builder removeUnicodeLocaleAttribute(@NonNull String);
+    method @NonNull public java.util.Locale.Builder setExtension(char, @Nullable String);
+    method @NonNull public java.util.Locale.Builder setLanguage(@Nullable String);
+    method @NonNull public java.util.Locale.Builder setLanguageTag(@NonNull String);
+    method @NonNull public java.util.Locale.Builder setLocale(@NonNull java.util.Locale);
+    method @NonNull public java.util.Locale.Builder setRegion(@Nullable String);
+    method @NonNull public java.util.Locale.Builder setScript(@Nullable String);
+    method @NonNull public java.util.Locale.Builder setUnicodeLocaleKeyword(@NonNull String, @Nullable String);
+    method @NonNull public java.util.Locale.Builder setVariant(@Nullable String);
+  }
+
+  public enum Locale.Category {
+    enum_constant public static final java.util.Locale.Category DISPLAY;
+    enum_constant public static final java.util.Locale.Category FORMAT;
+  }
+
+  public enum Locale.FilteringMode {
+    enum_constant public static final java.util.Locale.FilteringMode AUTOSELECT_FILTERING;
+    enum_constant public static final java.util.Locale.FilteringMode EXTENDED_FILTERING;
+    enum_constant public static final java.util.Locale.FilteringMode IGNORE_EXTENDED_RANGES;
+    enum_constant public static final java.util.Locale.FilteringMode MAP_EXTENDED_RANGES;
+    enum_constant public static final java.util.Locale.FilteringMode REJECT_EXTENDED_RANGES;
+  }
+
+  public static final class Locale.LanguageRange {
+    ctor public Locale.LanguageRange(@NonNull String);
+    ctor public Locale.LanguageRange(@NonNull String, double);
+    method @NonNull public String getRange();
+    method public double getWeight();
+    method @NonNull public static java.util.List<java.util.Locale.LanguageRange> mapEquivalents(@NonNull java.util.List<java.util.Locale.LanguageRange>, @NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>);
+    method @NonNull public static java.util.List<java.util.Locale.LanguageRange> parse(@NonNull String);
+    method @NonNull public static java.util.List<java.util.Locale.LanguageRange> parse(@NonNull String, @NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>);
+    field public static final double MAX_WEIGHT = 1.0;
+    field public static final double MIN_WEIGHT = 0.0;
+  }
+
+  public class LongSummaryStatistics implements java.util.function.IntConsumer java.util.function.LongConsumer {
+    ctor public LongSummaryStatistics();
+    method public void accept(int);
+    method public void accept(long);
+    method public void combine(java.util.LongSummaryStatistics);
+    method public final double getAverage();
+    method public final long getCount();
+    method public final long getMax();
+    method public final long getMin();
+    method public final long getSum();
+  }
+
+  public interface Map<K, V> {
+    method public void clear();
+    method @Nullable public default V compute(K, @NonNull java.util.function.BiFunction<? super K,? super V,? extends V>);
+    method @Nullable public default V computeIfAbsent(K, @NonNull java.util.function.Function<? super K,? extends V>);
+    method @Nullable public default V computeIfPresent(K, @NonNull java.util.function.BiFunction<? super K,? super V,? extends V>);
+    method public boolean containsKey(@Nullable Object);
+    method public boolean containsValue(@Nullable Object);
+    method @NonNull public static <K, V> java.util.Map<K,V> copyOf(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public static <K, V> java.util.Map.Entry<K,V> entry(@NonNull K, @NonNull V);
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public boolean equals(@Nullable Object);
+    method public default void forEach(@NonNull java.util.function.BiConsumer<? super K,? super V>);
+    method @Nullable public V get(@Nullable Object);
+    method @Nullable public default V getOrDefault(@Nullable Object, @Nullable V);
+    method public int hashCode();
+    method public boolean isEmpty();
+    method @NonNull public java.util.Set<K> keySet();
+    method @Nullable public default V merge(K, @NonNull V, @NonNull java.util.function.BiFunction<? super V,? super V,? extends V>);
+    method @NonNull public static <K, V> java.util.Map<K,V> of();
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull public static <K, V> java.util.Map<K,V> of(@NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V, @NonNull K, @NonNull V);
+    method @NonNull @java.lang.SafeVarargs public static <K, V> java.util.Map<K,V> ofEntries(@NonNull java.util.Map.Entry<? extends K,? extends V>...);
+    method @Nullable public V put(K, V);
+    method public void putAll(@NonNull java.util.Map<? extends K,? extends V>);
+    method @Nullable public default V putIfAbsent(K, V);
+    method @Nullable public V remove(@Nullable Object);
+    method public default boolean remove(@Nullable Object, @Nullable Object);
+    method public default boolean replace(K, @Nullable V, V);
+    method @Nullable public default V replace(K, V);
+    method public default void replaceAll(@NonNull java.util.function.BiFunction<? super K,? super V,? extends V>);
+    method public int size();
+    method @NonNull public java.util.Collection<V> values();
+  }
+
+  public static interface Map.Entry<K, V> {
+    method @NonNull public static <K extends java.lang.Comparable<? super K>, V> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByKey();
+    method @NonNull public static <K, V> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByKey(@NonNull java.util.Comparator<? super K>);
+    method @NonNull public static <K, V extends java.lang.Comparable<? super V>> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByValue();
+    method @NonNull public static <K, V> java.util.Comparator<java.util.Map.Entry<K,V>> comparingByValue(@NonNull java.util.Comparator<? super V>);
+    method public boolean equals(@Nullable Object);
+    method public K getKey();
+    method public V getValue();
+    method public int hashCode();
+    method public V setValue(V);
+  }
+
+  public class MissingFormatArgumentException extends java.util.IllegalFormatException {
+    ctor public MissingFormatArgumentException(String);
+    method public String getFormatSpecifier();
+  }
+
+  public class MissingFormatWidthException extends java.util.IllegalFormatException {
+    ctor public MissingFormatWidthException(String);
+    method public String getFormatSpecifier();
+  }
+
+  public class MissingResourceException extends java.lang.RuntimeException {
+    ctor public MissingResourceException(String, String, String);
+    method public String getClassName();
+    method public String getKey();
+  }
+
+  public interface NavigableMap<K, V> extends java.util.SortedMap<K,V> {
+    method @Nullable public java.util.Map.Entry<K,V> ceilingEntry(K);
+    method @Nullable public K ceilingKey(K);
+    method @NonNull public java.util.NavigableSet<K> descendingKeySet();
+    method @NonNull public java.util.NavigableMap<K,V> descendingMap();
+    method @Nullable public java.util.Map.Entry<K,V> firstEntry();
+    method @Nullable public java.util.Map.Entry<K,V> floorEntry(K);
+    method @Nullable public K floorKey(K);
+    method @NonNull public java.util.NavigableMap<K,V> headMap(K, boolean);
+    method @Nullable public java.util.Map.Entry<K,V> higherEntry(K);
+    method @Nullable public K higherKey(K);
+    method @Nullable public java.util.Map.Entry<K,V> lastEntry();
+    method @Nullable public java.util.Map.Entry<K,V> lowerEntry(K);
+    method @Nullable public K lowerKey(K);
+    method @NonNull public java.util.NavigableSet<K> navigableKeySet();
+    method @Nullable public java.util.Map.Entry<K,V> pollFirstEntry();
+    method @Nullable public java.util.Map.Entry<K,V> pollLastEntry();
+    method @NonNull public java.util.NavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method @NonNull public java.util.NavigableMap<K,V> tailMap(K, boolean);
+  }
+
+  public interface NavigableSet<E> extends java.util.SortedSet<E> {
+    method public E ceiling(E);
+    method public java.util.Iterator<E> descendingIterator();
+    method public java.util.NavigableSet<E> descendingSet();
+    method public E floor(E);
+    method public java.util.NavigableSet<E> headSet(E, boolean);
+    method public E higher(E);
+    method public E lower(E);
+    method public E pollFirst();
+    method public E pollLast();
+    method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
+    method public java.util.NavigableSet<E> tailSet(E, boolean);
+  }
+
+  public class NoSuchElementException extends java.lang.RuntimeException {
+    ctor public NoSuchElementException();
+    ctor public NoSuchElementException(String);
+  }
+
+  public final class Objects {
+    method public static int checkFromIndexSize(int, int, int);
+    method public static int checkFromToIndex(int, int, int);
+    method public static int checkIndex(int, int);
+    method public static <T> int compare(T, T, @NonNull java.util.Comparator<? super T>);
+    method public static boolean deepEquals(@Nullable Object, @Nullable Object);
+    method public static boolean equals(@Nullable Object, @Nullable Object);
+    method public static int hash(@Nullable java.lang.Object...);
+    method public static int hashCode(@Nullable Object);
+    method public static boolean isNull(@Nullable Object);
+    method public static boolean nonNull(@Nullable Object);
+    method @NonNull public static <T> T requireNonNull(@Nullable T);
+    method @NonNull public static <T> T requireNonNull(@Nullable T, @NonNull String);
+    method @NonNull public static <T> T requireNonNull(@Nullable T, @NonNull java.util.function.Supplier<java.lang.String>);
+    method @NonNull public static <T> T requireNonNullElse(@Nullable T, @NonNull T);
+    method @NonNull public static <T> T requireNonNullElseGet(@Nullable T, @NonNull java.util.function.Supplier<? extends T>);
+    method @NonNull public static String toString(@Nullable Object);
+    method @NonNull public static String toString(@Nullable Object, @NonNull String);
+  }
+
+  public class Observable {
+    ctor public Observable();
+    method public void addObserver(java.util.Observer);
+    method protected void clearChanged();
+    method public int countObservers();
+    method public void deleteObserver(java.util.Observer);
+    method public void deleteObservers();
+    method public boolean hasChanged();
+    method public void notifyObservers();
+    method public void notifyObservers(Object);
+    method protected void setChanged();
+  }
+
+  public interface Observer {
+    method public void update(java.util.Observable, Object);
+  }
+
+  public final class Optional<T> {
+    method public static <T> java.util.Optional<T> empty();
+    method public java.util.Optional<T> filter(java.util.function.Predicate<? super T>);
+    method public <U> java.util.Optional<U> flatMap(java.util.function.Function<? super T,java.util.Optional<U>>);
+    method public T get();
+    method public void ifPresent(java.util.function.Consumer<? super T>);
+    method public boolean isPresent();
+    method public <U> java.util.Optional<U> map(java.util.function.Function<? super T,? extends U>);
+    method public static <T> java.util.Optional<T> of(T);
+    method public static <T> java.util.Optional<T> ofNullable(T);
+    method public T orElse(T);
+    method public T orElseGet(java.util.function.Supplier<? extends T>);
+    method public <X extends java.lang.Throwable> T orElseThrow(java.util.function.Supplier<? extends X>) throws X;
+  }
+
+  public final class OptionalDouble {
+    method public static java.util.OptionalDouble empty();
+    method public double getAsDouble();
+    method public void ifPresent(java.util.function.DoubleConsumer);
+    method public boolean isPresent();
+    method public static java.util.OptionalDouble of(double);
+    method public double orElse(double);
+    method public double orElseGet(java.util.function.DoubleSupplier);
+    method public <X extends java.lang.Throwable> double orElseThrow(java.util.function.Supplier<X>) throws X;
+  }
+
+  public final class OptionalInt {
+    method public static java.util.OptionalInt empty();
+    method public int getAsInt();
+    method public void ifPresent(java.util.function.IntConsumer);
+    method public boolean isPresent();
+    method public static java.util.OptionalInt of(int);
+    method public int orElse(int);
+    method public int orElseGet(java.util.function.IntSupplier);
+    method public <X extends java.lang.Throwable> int orElseThrow(java.util.function.Supplier<X>) throws X;
+  }
+
+  public final class OptionalLong {
+    method public static java.util.OptionalLong empty();
+    method public long getAsLong();
+    method public void ifPresent(java.util.function.LongConsumer);
+    method public boolean isPresent();
+    method public static java.util.OptionalLong of(long);
+    method public long orElse(long);
+    method public long orElseGet(java.util.function.LongSupplier);
+    method public <X extends java.lang.Throwable> long orElseThrow(java.util.function.Supplier<X>) throws X;
+  }
+
+  public interface PrimitiveIterator<T, T_CONS> extends java.util.Iterator<T> {
+    method public void forEachRemaining(T_CONS);
+  }
+
+  public static interface PrimitiveIterator.OfDouble extends java.util.PrimitiveIterator<java.lang.Double,java.util.function.DoubleConsumer> {
+    method public default void forEachRemaining(java.util.function.DoubleConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Double>);
+    method public default Double next();
+    method public double nextDouble();
+  }
+
+  public static interface PrimitiveIterator.OfInt extends java.util.PrimitiveIterator<java.lang.Integer,java.util.function.IntConsumer> {
+    method public default void forEachRemaining(java.util.function.IntConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Integer>);
+    method public default Integer next();
+    method public int nextInt();
+  }
+
+  public static interface PrimitiveIterator.OfLong extends java.util.PrimitiveIterator<java.lang.Long,java.util.function.LongConsumer> {
+    method public default void forEachRemaining(java.util.function.LongConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Long>);
+    method public default Long next();
+    method public long nextLong();
+  }
+
+  public class PriorityQueue<E> extends java.util.AbstractQueue<E> implements java.io.Serializable {
+    ctor public PriorityQueue();
+    ctor public PriorityQueue(int);
+    ctor public PriorityQueue(java.util.Comparator<? super E>);
+    ctor public PriorityQueue(int, java.util.Comparator<? super E>);
+    ctor public PriorityQueue(java.util.Collection<? extends E>);
+    ctor public PriorityQueue(java.util.PriorityQueue<? extends E>);
+    ctor public PriorityQueue(java.util.SortedSet<? extends E>);
+    method public java.util.Comparator<? super E> comparator();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll();
+    method public int size();
+    method public final java.util.Spliterator<E> spliterator();
+  }
+
+  public class Properties extends java.util.Hashtable<java.lang.Object,java.lang.Object> {
+    ctor public Properties();
+    ctor public Properties(java.util.Properties);
+    method public String getProperty(String);
+    method public String getProperty(String, String);
+    method public void list(java.io.PrintStream);
+    method public void list(java.io.PrintWriter);
+    method public void load(java.io.Reader) throws java.io.IOException;
+    method public void load(java.io.InputStream) throws java.io.IOException;
+    method public void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException;
+    method public java.util.Enumeration<?> propertyNames();
+    method @Deprecated public void save(java.io.OutputStream, String);
+    method public Object setProperty(String, String);
+    method public void store(java.io.Writer, String) throws java.io.IOException;
+    method public void store(java.io.OutputStream, String) throws java.io.IOException;
+    method public void storeToXML(java.io.OutputStream, String) throws java.io.IOException;
+    method public void storeToXML(java.io.OutputStream, String, String) throws java.io.IOException;
+    method public java.util.Set<java.lang.String> stringPropertyNames();
+    field protected java.util.Properties defaults;
+  }
+
+  public final class PropertyPermission extends java.security.BasicPermission {
+    ctor public PropertyPermission(String, String);
+  }
+
+  public class PropertyResourceBundle extends java.util.ResourceBundle {
+    ctor public PropertyResourceBundle(java.io.InputStream) throws java.io.IOException;
+    ctor public PropertyResourceBundle(java.io.Reader) throws java.io.IOException;
+    method public java.util.Enumeration<java.lang.String> getKeys();
+    method public Object handleGetObject(String);
+  }
+
+  public interface Queue<E> extends java.util.Collection<E> {
+    method public E element();
+    method public boolean offer(E);
+    method @Nullable public E peek();
+    method @Nullable public E poll();
+    method public E remove();
+  }
+
+  public class Random implements java.io.Serializable {
+    ctor public Random();
+    ctor public Random(long);
+    method public java.util.stream.DoubleStream doubles(long);
+    method public java.util.stream.DoubleStream doubles();
+    method public java.util.stream.DoubleStream doubles(long, double, double);
+    method public java.util.stream.DoubleStream doubles(double, double);
+    method public java.util.stream.IntStream ints(long);
+    method public java.util.stream.IntStream ints();
+    method public java.util.stream.IntStream ints(long, int, int);
+    method public java.util.stream.IntStream ints(int, int);
+    method public java.util.stream.LongStream longs(long);
+    method public java.util.stream.LongStream longs();
+    method public java.util.stream.LongStream longs(long, long, long);
+    method public java.util.stream.LongStream longs(long, long);
+    method protected int next(int);
+    method public boolean nextBoolean();
+    method public void nextBytes(byte[]);
+    method public double nextDouble();
+    method public float nextFloat();
+    method public double nextGaussian();
+    method public int nextInt();
+    method public int nextInt(int);
+    method public long nextLong();
+    method public void setSeed(long);
+  }
+
+  public interface RandomAccess {
+  }
+
+  public abstract class ResourceBundle {
+    ctor public ResourceBundle();
+    method public static final void clearCache();
+    method public static final void clearCache(ClassLoader);
+    method public boolean containsKey(String);
+    method public String getBaseBundleName();
+    method public static final java.util.ResourceBundle getBundle(String);
+    method public static final java.util.ResourceBundle getBundle(String, java.util.ResourceBundle.Control);
+    method public static final java.util.ResourceBundle getBundle(String, java.util.Locale);
+    method public static final java.util.ResourceBundle getBundle(String, java.util.Locale, java.util.ResourceBundle.Control);
+    method public static java.util.ResourceBundle getBundle(String, java.util.Locale, ClassLoader);
+    method public static java.util.ResourceBundle getBundle(String, java.util.Locale, ClassLoader, java.util.ResourceBundle.Control);
+    method public abstract java.util.Enumeration<java.lang.String> getKeys();
+    method public java.util.Locale getLocale();
+    method public final Object getObject(String);
+    method public final String getString(String);
+    method public final String[] getStringArray(String);
+    method protected abstract Object handleGetObject(String);
+    method protected java.util.Set<java.lang.String> handleKeySet();
+    method public java.util.Set<java.lang.String> keySet();
+    method protected void setParent(java.util.ResourceBundle);
+    field protected java.util.ResourceBundle parent;
+  }
+
+  public static class ResourceBundle.Control {
+    ctor protected ResourceBundle.Control();
+    method public java.util.List<java.util.Locale> getCandidateLocales(String, java.util.Locale);
+    method public static final java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>);
+    method public java.util.Locale getFallbackLocale(String, java.util.Locale);
+    method public java.util.List<java.lang.String> getFormats(String);
+    method public static final java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>);
+    method public long getTimeToLive(String, java.util.Locale);
+    method public boolean needsReload(String, java.util.Locale, String, ClassLoader, java.util.ResourceBundle, long);
+    method public java.util.ResourceBundle newBundle(String, java.util.Locale, String, ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public String toBundleName(String, java.util.Locale);
+    method public final String toResourceName(String, String);
+    field public static final java.util.List<java.lang.String> FORMAT_CLASS;
+    field public static final java.util.List<java.lang.String> FORMAT_DEFAULT;
+    field public static final java.util.List<java.lang.String> FORMAT_PROPERTIES;
+    field public static final long TTL_DONT_CACHE = -1L; // 0xffffffffffffffffL
+    field public static final long TTL_NO_EXPIRATION_CONTROL = -2L; // 0xfffffffffffffffeL
+  }
+
+  public final class Scanner implements java.io.Closeable java.util.Iterator<java.lang.String> {
+    ctor public Scanner(Readable);
+    ctor public Scanner(java.io.InputStream);
+    ctor public Scanner(java.io.InputStream, String);
+    ctor public Scanner(java.io.File) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.io.File, String) throws java.io.FileNotFoundException;
+    ctor public Scanner(java.nio.file.Path) throws java.io.IOException;
+    ctor public Scanner(java.nio.file.Path, String) throws java.io.IOException;
+    ctor public Scanner(String);
+    ctor public Scanner(java.nio.channels.ReadableByteChannel);
+    ctor public Scanner(java.nio.channels.ReadableByteChannel, String);
+    method public void close();
+    method public java.util.regex.Pattern delimiter();
+    method public String findInLine(String);
+    method public String findInLine(java.util.regex.Pattern);
+    method public String findWithinHorizon(String, int);
+    method public String findWithinHorizon(java.util.regex.Pattern, int);
+    method public boolean hasNext();
+    method public boolean hasNext(String);
+    method public boolean hasNext(java.util.regex.Pattern);
+    method public boolean hasNextBigDecimal();
+    method public boolean hasNextBigInteger();
+    method public boolean hasNextBigInteger(int);
+    method public boolean hasNextBoolean();
+    method public boolean hasNextByte();
+    method public boolean hasNextByte(int);
+    method public boolean hasNextDouble();
+    method public boolean hasNextFloat();
+    method public boolean hasNextInt();
+    method public boolean hasNextInt(int);
+    method public boolean hasNextLine();
+    method public boolean hasNextLong();
+    method public boolean hasNextLong(int);
+    method public boolean hasNextShort();
+    method public boolean hasNextShort(int);
+    method public java.io.IOException ioException();
+    method public java.util.Locale locale();
+    method public java.util.regex.MatchResult match();
+    method public String next();
+    method public String next(String);
+    method public String next(java.util.regex.Pattern);
+    method public java.math.BigDecimal nextBigDecimal();
+    method public java.math.BigInteger nextBigInteger();
+    method public java.math.BigInteger nextBigInteger(int);
+    method public boolean nextBoolean();
+    method public byte nextByte();
+    method public byte nextByte(int);
+    method public double nextDouble();
+    method public float nextFloat();
+    method public int nextInt();
+    method public int nextInt(int);
+    method public String nextLine();
+    method public long nextLong();
+    method public long nextLong(int);
+    method public short nextShort();
+    method public short nextShort(int);
+    method public int radix();
+    method public java.util.Scanner reset();
+    method public java.util.Scanner skip(java.util.regex.Pattern);
+    method public java.util.Scanner skip(String);
+    method public java.util.Scanner useDelimiter(java.util.regex.Pattern);
+    method public java.util.Scanner useDelimiter(String);
+    method public java.util.Scanner useLocale(java.util.Locale);
+    method public java.util.Scanner useRadix(int);
+  }
+
+  public class ServiceConfigurationError extends java.lang.Error {
+    ctor public ServiceConfigurationError(String);
+    ctor public ServiceConfigurationError(String, Throwable);
+  }
+
+  public final class ServiceLoader<S> implements java.lang.Iterable<S> {
+    method public java.util.Iterator<S> iterator();
+    method public static <S> java.util.ServiceLoader<S> load(Class<S>, ClassLoader);
+    method public static <S> java.util.ServiceLoader<S> load(Class<S>);
+    method public static <S> java.util.ServiceLoader<S> loadInstalled(Class<S>);
+    method public void reload();
+  }
+
+  public interface Set<E> extends java.util.Collection<E> {
+    method @NonNull public static <E> java.util.Set<E> copyOf(@NonNull java.util.Collection<? extends E>);
+    method @NonNull public static <E> java.util.Set<E> of();
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull public static <E> java.util.Set<E> of(@NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E, @NonNull E);
+    method @NonNull @java.lang.SafeVarargs public static <E> java.util.Set<E> of(@NonNull E...);
+  }
+
+  public class SimpleTimeZone extends java.util.TimeZone {
+    ctor public SimpleTimeZone(int, String);
+    ctor public SimpleTimeZone(int, String, int, int, int, int, int, int, int, int);
+    ctor public SimpleTimeZone(int, String, int, int, int, int, int, int, int, int, int);
+    ctor public SimpleTimeZone(int, String, int, int, int, int, int, int, int, int, int, int, int);
+    method public int getOffset(int, int, int, int, int, int);
+    method public int getRawOffset();
+    method public boolean inDaylightTime(java.util.Date);
+    method public void setDSTSavings(int);
+    method public void setEndRule(int, int, int, int);
+    method public void setEndRule(int, int, int);
+    method public void setEndRule(int, int, int, int, boolean);
+    method public void setRawOffset(int);
+    method public void setStartRule(int, int, int, int);
+    method public void setStartRule(int, int, int);
+    method public void setStartRule(int, int, int, int, boolean);
+    method public void setStartYear(int);
+    method public boolean useDaylightTime();
+    field public static final int STANDARD_TIME = 1; // 0x1
+    field public static final int UTC_TIME = 2; // 0x2
+    field public static final int WALL_TIME = 0; // 0x0
+  }
+
+  public interface SortedMap<K, V> extends java.util.Map<K,V> {
+    method @Nullable public java.util.Comparator<? super K> comparator();
+    method public K firstKey();
+    method @NonNull public java.util.SortedMap<K,V> headMap(K);
+    method public K lastKey();
+    method @NonNull public java.util.SortedMap<K,V> subMap(K, K);
+    method @NonNull public java.util.SortedMap<K,V> tailMap(K);
+  }
+
+  public interface SortedSet<E> extends java.util.Set<E> {
+    method public java.util.Comparator<? super E> comparator();
+    method public E first();
+    method public java.util.SortedSet<E> headSet(E);
+    method public E last();
+    method public java.util.SortedSet<E> subSet(E, E);
+    method public java.util.SortedSet<E> tailSet(E);
+  }
+
+  public interface Spliterator<T> {
+    method public int characteristics();
+    method public long estimateSize();
+    method public default void forEachRemaining(java.util.function.Consumer<? super T>);
+    method public default java.util.Comparator<? super T> getComparator();
+    method public default long getExactSizeIfKnown();
+    method public default boolean hasCharacteristics(int);
+    method public boolean tryAdvance(java.util.function.Consumer<? super T>);
+    method public java.util.Spliterator<T> trySplit();
+    field public static final int CONCURRENT = 4096; // 0x1000
+    field public static final int DISTINCT = 1; // 0x1
+    field public static final int IMMUTABLE = 1024; // 0x400
+    field public static final int NONNULL = 256; // 0x100
+    field public static final int ORDERED = 16; // 0x10
+    field public static final int SIZED = 64; // 0x40
+    field public static final int SORTED = 4; // 0x4
+    field public static final int SUBSIZED = 16384; // 0x4000
+  }
+
+  public static interface Spliterator.OfDouble extends java.util.Spliterator.OfPrimitive<java.lang.Double,java.util.function.DoubleConsumer,java.util.Spliterator.OfDouble> {
+    method public default void forEachRemaining(java.util.function.DoubleConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Double>);
+    method public boolean tryAdvance(java.util.function.DoubleConsumer);
+    method public default boolean tryAdvance(java.util.function.Consumer<? super java.lang.Double>);
+    method public java.util.Spliterator.OfDouble trySplit();
+  }
+
+  public static interface Spliterator.OfInt extends java.util.Spliterator.OfPrimitive<java.lang.Integer,java.util.function.IntConsumer,java.util.Spliterator.OfInt> {
+    method public default void forEachRemaining(java.util.function.IntConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Integer>);
+    method public boolean tryAdvance(java.util.function.IntConsumer);
+    method public default boolean tryAdvance(java.util.function.Consumer<? super java.lang.Integer>);
+    method public java.util.Spliterator.OfInt trySplit();
+  }
+
+  public static interface Spliterator.OfLong extends java.util.Spliterator.OfPrimitive<java.lang.Long,java.util.function.LongConsumer,java.util.Spliterator.OfLong> {
+    method public default void forEachRemaining(java.util.function.LongConsumer);
+    method public default void forEachRemaining(java.util.function.Consumer<? super java.lang.Long>);
+    method public boolean tryAdvance(java.util.function.LongConsumer);
+    method public default boolean tryAdvance(java.util.function.Consumer<? super java.lang.Long>);
+    method public java.util.Spliterator.OfLong trySplit();
+  }
+
+  public static interface Spliterator.OfPrimitive<T, T_CONS, T_SPLITR extends java.util.Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>> extends java.util.Spliterator<T> {
+    method public default void forEachRemaining(T_CONS);
+    method public boolean tryAdvance(T_CONS);
+    method public T_SPLITR trySplit();
+  }
+
+  public final class Spliterators {
+    method public static java.util.Spliterator.OfDouble emptyDoubleSpliterator();
+    method public static java.util.Spliterator.OfInt emptyIntSpliterator();
+    method public static java.util.Spliterator.OfLong emptyLongSpliterator();
+    method public static <T> java.util.Spliterator<T> emptySpliterator();
+    method public static <T> java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
+    method public static java.util.PrimitiveIterator.OfInt iterator(java.util.Spliterator.OfInt);
+    method public static java.util.PrimitiveIterator.OfLong iterator(java.util.Spliterator.OfLong);
+    method public static java.util.PrimitiveIterator.OfDouble iterator(java.util.Spliterator.OfDouble);
+    method public static <T> java.util.Spliterator<T> spliterator(Object[], int);
+    method public static <T> java.util.Spliterator<T> spliterator(Object[], int, int, int);
+    method public static java.util.Spliterator.OfInt spliterator(int[], int);
+    method public static java.util.Spliterator.OfInt spliterator(int[], int, int, int);
+    method public static java.util.Spliterator.OfLong spliterator(long[], int);
+    method public static java.util.Spliterator.OfLong spliterator(long[], int, int, int);
+    method public static java.util.Spliterator.OfDouble spliterator(double[], int);
+    method public static java.util.Spliterator.OfDouble spliterator(double[], int, int, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
+    method public static java.util.Spliterator.OfInt spliterator(java.util.PrimitiveIterator.OfInt, long, int);
+    method public static java.util.Spliterator.OfLong spliterator(java.util.PrimitiveIterator.OfLong, long, int);
+    method public static java.util.Spliterator.OfDouble spliterator(java.util.PrimitiveIterator.OfDouble, long, int);
+    method public static <T> java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
+    method public static java.util.Spliterator.OfInt spliteratorUnknownSize(java.util.PrimitiveIterator.OfInt, int);
+    method public static java.util.Spliterator.OfLong spliteratorUnknownSize(java.util.PrimitiveIterator.OfLong, int);
+    method public static java.util.Spliterator.OfDouble spliteratorUnknownSize(java.util.PrimitiveIterator.OfDouble, int);
+  }
+
+  public abstract static class Spliterators.AbstractDoubleSpliterator implements java.util.Spliterator.OfDouble {
+    ctor protected Spliterators.AbstractDoubleSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator.OfDouble trySplit();
+  }
+
+  public abstract static class Spliterators.AbstractIntSpliterator implements java.util.Spliterator.OfInt {
+    ctor protected Spliterators.AbstractIntSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator.OfInt trySplit();
+  }
+
+  public abstract static class Spliterators.AbstractLongSpliterator implements java.util.Spliterator.OfLong {
+    ctor protected Spliterators.AbstractLongSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator.OfLong trySplit();
+  }
+
+  public abstract static class Spliterators.AbstractSpliterator<T> implements java.util.Spliterator<T> {
+    ctor protected Spliterators.AbstractSpliterator(long, int);
+    method public int characteristics();
+    method public long estimateSize();
+    method public java.util.Spliterator<T> trySplit();
+  }
+
+  public final class SplittableRandom {
+    ctor public SplittableRandom(long);
+    ctor public SplittableRandom();
+    method public java.util.stream.DoubleStream doubles(long);
+    method public java.util.stream.DoubleStream doubles();
+    method public java.util.stream.DoubleStream doubles(long, double, double);
+    method public java.util.stream.DoubleStream doubles(double, double);
+    method public java.util.stream.IntStream ints(long);
+    method public java.util.stream.IntStream ints();
+    method public java.util.stream.IntStream ints(long, int, int);
+    method public java.util.stream.IntStream ints(int, int);
+    method public java.util.stream.LongStream longs(long);
+    method public java.util.stream.LongStream longs();
+    method public java.util.stream.LongStream longs(long, long, long);
+    method public java.util.stream.LongStream longs(long, long);
+    method public boolean nextBoolean();
+    method public double nextDouble();
+    method public double nextDouble(double);
+    method public double nextDouble(double, double);
+    method public int nextInt();
+    method public int nextInt(int);
+    method public int nextInt(int, int);
+    method public long nextLong();
+    method public long nextLong(long);
+    method public long nextLong(long, long);
+    method public java.util.SplittableRandom split();
+  }
+
+  public class Stack<E> extends java.util.Vector<E> {
+    ctor public Stack();
+    method public boolean empty();
+    method public E peek();
+    method public E pop();
+    method public E push(E);
+    method public int search(Object);
+  }
+
+  public final class StringJoiner {
+    ctor public StringJoiner(CharSequence);
+    ctor public StringJoiner(CharSequence, CharSequence, CharSequence);
+    method public java.util.StringJoiner add(CharSequence);
+    method public int length();
+    method public java.util.StringJoiner merge(java.util.StringJoiner);
+    method public java.util.StringJoiner setEmptyValue(CharSequence);
+  }
+
+  public class StringTokenizer implements java.util.Enumeration<java.lang.Object> {
+    ctor public StringTokenizer(String, String, boolean);
+    ctor public StringTokenizer(String, String);
+    ctor public StringTokenizer(String);
+    method public int countTokens();
+    method public boolean hasMoreElements();
+    method public boolean hasMoreTokens();
+    method public Object nextElement();
+    method public String nextToken();
+    method public String nextToken(String);
+  }
+
+  public abstract class TimeZone implements java.lang.Cloneable java.io.Serializable {
+    ctor public TimeZone();
+    method public Object clone();
+    method public static String[] getAvailableIDs(int);
+    method public static String[] getAvailableIDs();
+    method public int getDSTSavings();
+    method public static java.util.TimeZone getDefault();
+    method public final String getDisplayName();
+    method public final String getDisplayName(java.util.Locale);
+    method public final String getDisplayName(boolean, int);
+    method public String getDisplayName(boolean, int, java.util.Locale);
+    method public String getID();
+    method public abstract int getOffset(int, int, int, int, int, int);
+    method public int getOffset(long);
+    method public abstract int getRawOffset();
+    method public static java.util.TimeZone getTimeZone(String);
+    method public static java.util.TimeZone getTimeZone(java.time.ZoneId);
+    method public boolean hasSameRules(java.util.TimeZone);
+    method public abstract boolean inDaylightTime(java.util.Date);
+    method public boolean observesDaylightTime();
+    method public static void setDefault(java.util.TimeZone);
+    method public void setID(String);
+    method public abstract void setRawOffset(int);
+    method public java.time.ZoneId toZoneId();
+    method public abstract boolean useDaylightTime();
+    field public static final int LONG = 1; // 0x1
+    field public static final int SHORT = 0; // 0x0
+  }
+
+  public class Timer {
+    ctor public Timer();
+    ctor public Timer(boolean);
+    ctor public Timer(String);
+    ctor public Timer(String, boolean);
+    method public void cancel();
+    method public int purge();
+    method public void schedule(java.util.TimerTask, long);
+    method public void schedule(java.util.TimerTask, java.util.Date);
+    method public void schedule(java.util.TimerTask, long, long);
+    method public void schedule(java.util.TimerTask, java.util.Date, long);
+    method public void scheduleAtFixedRate(java.util.TimerTask, long, long);
+    method public void scheduleAtFixedRate(java.util.TimerTask, java.util.Date, long);
+  }
+
+  public abstract class TimerTask implements java.lang.Runnable {
+    ctor protected TimerTask();
+    method public boolean cancel();
+    method public long scheduledExecutionTime();
+  }
+
+  public class TooManyListenersException extends java.lang.Exception {
+    ctor public TooManyListenersException();
+    ctor public TooManyListenersException(String);
+  }
+
+  public class TreeMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.NavigableMap<K,V> java.io.Serializable {
+    ctor public TreeMap();
+    ctor public TreeMap(@Nullable java.util.Comparator<? super K>);
+    ctor public TreeMap(@NonNull java.util.Map<? extends K,? extends V>);
+    ctor public TreeMap(@NonNull java.util.SortedMap<K,? extends V>);
+    method @Nullable public java.util.Map.Entry<K,V> ceilingEntry(K);
+    method @Nullable public K ceilingKey(K);
+    method @NonNull public Object clone();
+    method @Nullable public java.util.Comparator<? super K> comparator();
+    method @NonNull public java.util.NavigableSet<K> descendingKeySet();
+    method @NonNull public java.util.NavigableMap<K,V> descendingMap();
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method @Nullable public java.util.Map.Entry<K,V> firstEntry();
+    method public K firstKey();
+    method @Nullable public java.util.Map.Entry<K,V> floorEntry(K);
+    method @Nullable public K floorKey(K);
+    method @NonNull public java.util.NavigableMap<K,V> headMap(K, boolean);
+    method @NonNull public java.util.SortedMap<K,V> headMap(K);
+    method @Nullable public java.util.Map.Entry<K,V> higherEntry(K);
+    method @Nullable public K higherKey(K);
+    method @Nullable public java.util.Map.Entry<K,V> lastEntry();
+    method public K lastKey();
+    method @Nullable public java.util.Map.Entry<K,V> lowerEntry(K);
+    method @Nullable public K lowerKey(K);
+    method @NonNull public java.util.NavigableSet<K> navigableKeySet();
+    method @Nullable public java.util.Map.Entry<K,V> pollFirstEntry();
+    method @Nullable public java.util.Map.Entry<K,V> pollLastEntry();
+    method @NonNull public java.util.NavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method @NonNull public java.util.SortedMap<K,V> subMap(K, K);
+    method @NonNull public java.util.NavigableMap<K,V> tailMap(K, boolean);
+    method @NonNull public java.util.SortedMap<K,V> tailMap(K);
+  }
+
+  public class TreeSet<E> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.util.NavigableSet<E> java.io.Serializable {
+    ctor public TreeSet();
+    ctor public TreeSet(java.util.Comparator<? super E>);
+    ctor public TreeSet(java.util.Collection<? extends E>);
+    ctor public TreeSet(java.util.SortedSet<E>);
+    method public E ceiling(E);
+    method public Object clone();
+    method public java.util.Comparator<? super E> comparator();
+    method public java.util.Iterator<E> descendingIterator();
+    method public java.util.NavigableSet<E> descendingSet();
+    method public E first();
+    method public E floor(E);
+    method public java.util.NavigableSet<E> headSet(E, boolean);
+    method public java.util.SortedSet<E> headSet(E);
+    method public E higher(E);
+    method public java.util.Iterator<E> iterator();
+    method public E last();
+    method public E lower(E);
+    method public E pollFirst();
+    method public E pollLast();
+    method public int size();
+    method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
+    method public java.util.SortedSet<E> subSet(E, E);
+    method public java.util.NavigableSet<E> tailSet(E, boolean);
+    method public java.util.SortedSet<E> tailSet(E);
+  }
+
+  public final class UUID implements java.lang.Comparable<java.util.UUID> java.io.Serializable {
+    ctor public UUID(long, long);
+    method public int clockSequence();
+    method public int compareTo(java.util.UUID);
+    method public static java.util.UUID fromString(String);
+    method public long getLeastSignificantBits();
+    method public long getMostSignificantBits();
+    method public static java.util.UUID nameUUIDFromBytes(byte[]);
+    method public long node();
+    method public static java.util.UUID randomUUID();
+    method public long timestamp();
+    method public int variant();
+    method public int version();
+  }
+
+  public class UnknownFormatConversionException extends java.util.IllegalFormatException {
+    ctor public UnknownFormatConversionException(String);
+    method public String getConversion();
+  }
+
+  public class UnknownFormatFlagsException extends java.util.IllegalFormatException {
+    ctor public UnknownFormatFlagsException(String);
+    method public String getFlags();
+  }
+
+  public class Vector<E> extends java.util.AbstractList<E> implements java.lang.Cloneable java.util.List<E> java.util.RandomAccess java.io.Serializable {
+    ctor public Vector(int, int);
+    ctor public Vector(int);
+    ctor public Vector();
+    ctor public Vector(@NonNull java.util.Collection<? extends E>);
+    method public void addElement(E);
+    method public int capacity();
+    method @NonNull public Object clone();
+    method public void copyInto(@NonNull Object[]);
+    method public E elementAt(int);
+    method @NonNull public java.util.Enumeration<E> elements();
+    method public void ensureCapacity(int);
+    method public E firstElement();
+    method public void forEach(@NonNull java.util.function.Consumer<? super E>);
+    method public E get(int);
+    method public int indexOf(@Nullable Object, int);
+    method public void insertElementAt(E, int);
+    method public E lastElement();
+    method public int lastIndexOf(@Nullable Object, int);
+    method public void removeAllElements();
+    method public boolean removeElement(@Nullable Object);
+    method public void removeElementAt(int);
+    method public void setElementAt(E, int);
+    method public void setSize(int);
+    method public int size();
+    method public void trimToSize();
+    field protected int capacityIncrement;
+    field protected int elementCount;
+    field @NonNull protected Object[] elementData;
+  }
+
+  public class WeakHashMap<K, V> extends java.util.AbstractMap<K,V> implements java.util.Map<K,V> {
+    ctor public WeakHashMap(int, float);
+    ctor public WeakHashMap(int);
+    ctor public WeakHashMap();
+    ctor public WeakHashMap(@NonNull java.util.Map<? extends K,? extends V>);
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+  }
+
+}
+
+package java.util.concurrent {
+
+  public abstract class AbstractExecutorService implements java.util.concurrent.ExecutorService {
+    ctor public AbstractExecutorService();
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(Runnable, T);
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
+    method public java.util.concurrent.Future<?> submit(Runnable);
+    method public <T> java.util.concurrent.Future<T> submit(Runnable, T);
+    method public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+  }
+
+  public class ArrayBlockingQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public ArrayBlockingQueue(int);
+    ctor public ArrayBlockingQueue(int, boolean);
+    ctor public ArrayBlockingQueue(int, boolean, java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E peek();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public interface BlockingDeque<E> extends java.util.concurrent.BlockingQueue<E> java.util.Deque<E> {
+    method public boolean offerFirst(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offerLast(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollFirst(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollLast(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void putFirst(E) throws java.lang.InterruptedException;
+    method public void putLast(E) throws java.lang.InterruptedException;
+    method public E takeFirst() throws java.lang.InterruptedException;
+    method public E takeLast() throws java.lang.InterruptedException;
+  }
+
+  public interface BlockingQueue<E> extends java.util.Queue<E> {
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public class BrokenBarrierException extends java.lang.Exception {
+    ctor public BrokenBarrierException();
+    ctor public BrokenBarrierException(String);
+  }
+
+  @java.lang.FunctionalInterface public interface Callable<V> {
+    method public V call() throws java.lang.Exception;
+  }
+
+  public class CancellationException extends java.lang.IllegalStateException {
+    ctor public CancellationException();
+    ctor public CancellationException(String);
+  }
+
+  public class CompletableFuture<T> implements java.util.concurrent.CompletionStage<T> java.util.concurrent.Future<T> {
+    ctor public CompletableFuture();
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Void> allOf(java.util.concurrent.CompletableFuture<?>...);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Object> anyOf(java.util.concurrent.CompletableFuture<?>...);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>, java.util.concurrent.Executor);
+    method public boolean cancel(boolean);
+    method public boolean complete(T);
+    method public java.util.concurrent.CompletableFuture<T> completeAsync(java.util.function.Supplier<? extends T>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<T> completeAsync(java.util.function.Supplier<? extends T>);
+    method public boolean completeExceptionally(Throwable);
+    method public java.util.concurrent.CompletableFuture<T> completeOnTimeout(T, long, java.util.concurrent.TimeUnit);
+    method public static <U> java.util.concurrent.CompletableFuture<U> completedFuture(U);
+    method public static <U> java.util.concurrent.CompletionStage<U> completedStage(U);
+    method public java.util.concurrent.CompletableFuture<T> copy();
+    method public java.util.concurrent.Executor defaultExecutor();
+    method public static java.util.concurrent.Executor delayedExecutor(long, java.util.concurrent.TimeUnit, java.util.concurrent.Executor);
+    method public static java.util.concurrent.Executor delayedExecutor(long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.CompletableFuture<T> exceptionally(java.util.function.Function<java.lang.Throwable,? extends T>);
+    method public static <U> java.util.concurrent.CompletableFuture<U> failedFuture(Throwable);
+    method public static <U> java.util.concurrent.CompletionStage<U> failedStage(Throwable);
+    method public T get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public T get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public T getNow(T);
+    method public int getNumberOfDependents();
+    method public <U> java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>, java.util.concurrent.Executor);
+    method public boolean isCancelled();
+    method public boolean isCompletedExceptionally();
+    method public boolean isDone();
+    method public T join();
+    method public java.util.concurrent.CompletionStage<T> minimalCompletionStage();
+    method public <U> java.util.concurrent.CompletableFuture<U> newIncompleteFuture();
+    method public void obtrudeException(Throwable);
+    method public void obtrudeValue(T);
+    method public java.util.concurrent.CompletableFuture<T> orTimeout(long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEither(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(Runnable);
+    method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(Runnable, java.util.concurrent.Executor);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>, java.util.concurrent.Executor);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRun(Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(Runnable);
+    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<T> toCompletableFuture();
+    method public java.util.concurrent.CompletableFuture<T> whenComplete(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletableFuture<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletableFuture<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>, java.util.concurrent.Executor);
+  }
+
+  public static interface CompletableFuture.AsynchronousCompletionTask {
+  }
+
+  public class CompletionException extends java.lang.RuntimeException {
+    ctor protected CompletionException();
+    ctor protected CompletionException(String);
+    ctor public CompletionException(String, Throwable);
+    ctor public CompletionException(Throwable);
+  }
+
+  public interface CompletionService<V> {
+    method public java.util.concurrent.Future<V> poll();
+    method public java.util.concurrent.Future<V> poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public java.util.concurrent.Future<V> submit(java.util.concurrent.Callable<V>);
+    method public java.util.concurrent.Future<V> submit(Runnable, V);
+    method public java.util.concurrent.Future<V> take() throws java.lang.InterruptedException;
+  }
+
+  public interface CompletionStage<T> {
+    method public java.util.concurrent.CompletionStage<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>);
+    method public <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T,U>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<T> exceptionally(java.util.function.Function<java.lang.Throwable,? extends T>);
+    method public <U> java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T,java.lang.Throwable,? extends U>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEither(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>);
+    method public <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T,? super U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T,? extends U>, java.util.concurrent.Executor);
+    method public <U, V> java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>);
+    method public <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T,? super U,? extends V>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T,? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenRun(Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(Runnable);
+    method public java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(Runnable, java.util.concurrent.Executor);
+    method public java.util.concurrent.CompletableFuture<T> toCompletableFuture();
+    method public java.util.concurrent.CompletionStage<T> whenComplete(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletionStage<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>);
+    method public java.util.concurrent.CompletionStage<T> whenCompleteAsync(java.util.function.BiConsumer<? super T,? super java.lang.Throwable>, java.util.concurrent.Executor);
+  }
+
+  public class ConcurrentHashMap<K, V> extends java.util.AbstractMap<K,V> implements java.util.concurrent.ConcurrentMap<K,V> java.io.Serializable {
+    ctor public ConcurrentHashMap();
+    ctor public ConcurrentHashMap(int);
+    ctor public ConcurrentHashMap(@NonNull java.util.Map<? extends K,? extends V>);
+    ctor public ConcurrentHashMap(int, float);
+    ctor public ConcurrentHashMap(int, float, int);
+    method public boolean contains(@NonNull Object);
+    method @NonNull public java.util.Enumeration<V> elements();
+    method @NonNull public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public void forEach(long, @NonNull java.util.function.BiConsumer<? super K,? super V>);
+    method public <U> void forEach(long, @NonNull java.util.function.BiFunction<? super K,? super V,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method public void forEachEntry(long, @NonNull java.util.function.Consumer<? super java.util.Map.Entry<K,V>>);
+    method public <U> void forEachEntry(long, @NonNull java.util.function.Function<java.util.Map.Entry<K,V>,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method public void forEachKey(long, @NonNull java.util.function.Consumer<? super K>);
+    method public <U> void forEachKey(long, @NonNull java.util.function.Function<? super K,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method public void forEachValue(long, @NonNull java.util.function.Consumer<? super V>);
+    method public <U> void forEachValue(long, @NonNull java.util.function.Function<? super V,? extends U>, @NonNull java.util.function.Consumer<? super U>);
+    method @NonNull public java.util.concurrent.ConcurrentHashMap.KeySetView<K,V> keySet(@NonNull V);
+    method @NonNull public java.util.Enumeration<K> keys();
+    method public long mappingCount();
+    method @NonNull public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K,java.lang.Boolean> newKeySet();
+    method @NonNull public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K,java.lang.Boolean> newKeySet(int);
+    method @Nullable public <U> U reduce(long, @NonNull java.util.function.BiFunction<? super K,? super V,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method @Nullable public java.util.Map.Entry<K,V> reduceEntries(long, @NonNull java.util.function.BiFunction<java.util.Map.Entry<K,V>,java.util.Map.Entry<K,V>,? extends java.util.Map.Entry<K,V>>);
+    method @Nullable public <U> U reduceEntries(long, @NonNull java.util.function.Function<java.util.Map.Entry<K,V>,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method public double reduceEntriesToDouble(long, @NonNull java.util.function.ToDoubleFunction<java.util.Map.Entry<K,V>>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceEntriesToInt(long, @NonNull java.util.function.ToIntFunction<java.util.Map.Entry<K,V>>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceEntriesToLong(long, @NonNull java.util.function.ToLongFunction<java.util.Map.Entry<K,V>>, long, @NonNull java.util.function.LongBinaryOperator);
+    method @Nullable public K reduceKeys(long, @NonNull java.util.function.BiFunction<? super K,? super K,? extends K>);
+    method @Nullable public <U> U reduceKeys(long, @NonNull java.util.function.Function<? super K,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method public double reduceKeysToDouble(long, @NonNull java.util.function.ToDoubleFunction<? super K>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceKeysToInt(long, @NonNull java.util.function.ToIntFunction<? super K>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceKeysToLong(long, @NonNull java.util.function.ToLongFunction<? super K>, long, @NonNull java.util.function.LongBinaryOperator);
+    method public double reduceToDouble(long, @NonNull java.util.function.ToDoubleBiFunction<? super K,? super V>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceToInt(long, @NonNull java.util.function.ToIntBiFunction<? super K,? super V>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceToLong(long, @NonNull java.util.function.ToLongBiFunction<? super K,? super V>, long, @NonNull java.util.function.LongBinaryOperator);
+    method @Nullable public V reduceValues(long, @NonNull java.util.function.BiFunction<? super V,? super V,? extends V>);
+    method @Nullable public <U> U reduceValues(long, @NonNull java.util.function.Function<? super V,? extends U>, @NonNull java.util.function.BiFunction<? super U,? super U,? extends U>);
+    method public double reduceValuesToDouble(long, @NonNull java.util.function.ToDoubleFunction<? super V>, double, @NonNull java.util.function.DoubleBinaryOperator);
+    method public int reduceValuesToInt(long, @NonNull java.util.function.ToIntFunction<? super V>, int, @NonNull java.util.function.IntBinaryOperator);
+    method public long reduceValuesToLong(long, @NonNull java.util.function.ToLongFunction<? super V>, long, @NonNull java.util.function.LongBinaryOperator);
+    method @Nullable public <U> U search(long, @NonNull java.util.function.BiFunction<? super K,? super V,? extends U>);
+    method @Nullable public <U> U searchEntries(long, @NonNull java.util.function.Function<java.util.Map.Entry<K,V>,? extends U>);
+    method @Nullable public <U> U searchKeys(long, @NonNull java.util.function.Function<? super K,? extends U>);
+    method @Nullable public <U> U searchValues(long, @NonNull java.util.function.Function<? super V,? extends U>);
+  }
+
+  public static class ConcurrentHashMap.KeySetView<K, V> implements java.util.Collection<K> java.io.Serializable java.util.Set<K> {
+    method public boolean add(@NonNull K);
+    method public boolean addAll(@NonNull java.util.Collection<? extends K>);
+    method public final void clear();
+    method public boolean contains(@NonNull Object);
+    method public final boolean containsAll(@NonNull java.util.Collection<?>);
+    method public void forEach(@NonNull java.util.function.Consumer<? super K>);
+    method @NonNull public java.util.concurrent.ConcurrentHashMap<K,V> getMap();
+    method @Nullable public V getMappedValue();
+    method public final boolean isEmpty();
+    method @NonNull public java.util.Iterator<K> iterator();
+    method public boolean remove(@NonNull Object);
+    method public final boolean removeAll(@NonNull java.util.Collection<?>);
+    method public final boolean retainAll(@NonNull java.util.Collection<?>);
+    method public final int size();
+    method @NonNull public java.util.Spliterator<K> spliterator();
+    method @NonNull public final Object[] toArray();
+    method @NonNull public final <T> T[] toArray(@NonNull T[]);
+    method @NonNull public final String toString();
+  }
+
+  public class ConcurrentLinkedDeque<E> extends java.util.AbstractCollection<E> implements java.util.Deque<E> java.io.Serializable {
+    ctor public ConcurrentLinkedDeque();
+    ctor public ConcurrentLinkedDeque(java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method public java.util.Iterator<E> descendingIterator();
+    method public E element();
+    method public E getFirst();
+    method public E getLast();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method public E peek();
+    method public E peekFirst();
+    method public E peekLast();
+    method public E poll();
+    method public E pollFirst();
+    method public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E remove();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(Object);
+    method public int size();
+  }
+
+  public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue<E> implements java.util.Queue<E> java.io.Serializable {
+    ctor public ConcurrentLinkedQueue();
+    ctor public ConcurrentLinkedQueue(java.util.Collection<? extends E>);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll();
+    method public int size();
+  }
+
+  public interface ConcurrentMap<K, V> extends java.util.Map<K,V> {
+    method public V putIfAbsent(K, V);
+    method public boolean remove(Object, Object);
+    method public boolean replace(K, V, V);
+    method public V replace(K, V);
+  }
+
+  public interface ConcurrentNavigableMap<K, V> extends java.util.concurrent.ConcurrentMap<K,V> java.util.NavigableMap<K,V> {
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> descendingMap();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K);
+    method public java.util.NavigableSet<K> keySet();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, K);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K);
+  }
+
+  public class ConcurrentSkipListMap<K, V> extends java.util.AbstractMap<K,V> implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap<K,V> java.io.Serializable {
+    ctor public ConcurrentSkipListMap();
+    ctor public ConcurrentSkipListMap(java.util.Comparator<? super K>);
+    ctor public ConcurrentSkipListMap(java.util.Map<? extends K,? extends V>);
+    ctor public ConcurrentSkipListMap(java.util.SortedMap<K,? extends V>);
+    method public java.util.Map.Entry<K,V> ceilingEntry(K);
+    method public K ceilingKey(K);
+    method public java.util.concurrent.ConcurrentSkipListMap<K,V> clone();
+    method public java.util.Comparator<? super K> comparator();
+    method public java.util.NavigableSet<K> descendingKeySet();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> descendingMap();
+    method public java.util.Set<java.util.Map.Entry<K,V>> entrySet();
+    method public java.util.Map.Entry<K,V> firstEntry();
+    method public K firstKey();
+    method public java.util.Map.Entry<K,V> floorEntry(K);
+    method public K floorKey(K);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> headMap(K);
+    method public java.util.Map.Entry<K,V> higherEntry(K);
+    method public K higherKey(K);
+    method public java.util.NavigableSet<K> keySet();
+    method public java.util.Map.Entry<K,V> lastEntry();
+    method public K lastKey();
+    method public java.util.Map.Entry<K,V> lowerEntry(K);
+    method public K lowerKey(K);
+    method public java.util.NavigableSet<K> navigableKeySet();
+    method public java.util.Map.Entry<K,V> pollFirstEntry();
+    method public java.util.Map.Entry<K,V> pollLastEntry();
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, boolean, K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> subMap(K, K);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K, boolean);
+    method public java.util.concurrent.ConcurrentNavigableMap<K,V> tailMap(K);
+  }
+
+  public class ConcurrentSkipListSet<E> extends java.util.AbstractSet<E> implements java.lang.Cloneable java.util.NavigableSet<E> java.io.Serializable {
+    ctor public ConcurrentSkipListSet();
+    ctor public ConcurrentSkipListSet(java.util.Comparator<? super E>);
+    ctor public ConcurrentSkipListSet(java.util.Collection<? extends E>);
+    ctor public ConcurrentSkipListSet(java.util.SortedSet<E>);
+    method public E ceiling(E);
+    method public java.util.concurrent.ConcurrentSkipListSet<E> clone();
+    method public java.util.Comparator<? super E> comparator();
+    method public java.util.Iterator<E> descendingIterator();
+    method public java.util.NavigableSet<E> descendingSet();
+    method public E first();
+    method public E floor(E);
+    method public java.util.NavigableSet<E> headSet(E, boolean);
+    method public java.util.NavigableSet<E> headSet(E);
+    method public E higher(E);
+    method public java.util.Iterator<E> iterator();
+    method public E last();
+    method public E lower(E);
+    method public E pollFirst();
+    method public E pollLast();
+    method public int size();
+    method public java.util.NavigableSet<E> subSet(E, boolean, E, boolean);
+    method public java.util.NavigableSet<E> subSet(E, E);
+    method public java.util.NavigableSet<E> tailSet(E, boolean);
+    method public java.util.NavigableSet<E> tailSet(E);
+  }
+
+  public class CopyOnWriteArrayList<E> implements java.lang.Cloneable java.util.List<E> java.util.RandomAccess java.io.Serializable {
+    ctor public CopyOnWriteArrayList();
+    ctor public CopyOnWriteArrayList(@NonNull java.util.Collection<? extends E>);
+    ctor public CopyOnWriteArrayList(@NonNull E[]);
+    method public boolean add(E);
+    method public void add(int, E);
+    method public boolean addAll(@NonNull java.util.Collection<? extends E>);
+    method public boolean addAll(int, @NonNull java.util.Collection<? extends E>);
+    method public int addAllAbsent(@NonNull java.util.Collection<? extends E>);
+    method public boolean addIfAbsent(E);
+    method public void clear();
+    method @NonNull public Object clone();
+    method public boolean contains(@Nullable Object);
+    method public boolean containsAll(@NonNull java.util.Collection<?>);
+    method public void forEach(@NonNull java.util.function.Consumer<? super E>);
+    method public E get(int);
+    method public int indexOf(@Nullable Object);
+    method public int indexOf(@Nullable E, int);
+    method public boolean isEmpty();
+    method @NonNull public java.util.Iterator<E> iterator();
+    method public int lastIndexOf(@Nullable Object);
+    method public int lastIndexOf(@Nullable E, int);
+    method @NonNull public java.util.ListIterator<E> listIterator();
+    method @NonNull public java.util.ListIterator<E> listIterator(int);
+    method public E remove(int);
+    method public boolean remove(@Nullable Object);
+    method public boolean removeAll(@NonNull java.util.Collection<?>);
+    method public boolean retainAll(@NonNull java.util.Collection<?>);
+    method public E set(int, E);
+    method public int size();
+    method @NonNull public java.util.List<E> subList(int, int);
+    method @NonNull public Object[] toArray();
+    method @NonNull public <T> T[] toArray(@NonNull T[]);
+  }
+
+  public class CopyOnWriteArraySet<E> extends java.util.AbstractSet<E> implements java.io.Serializable {
+    ctor public CopyOnWriteArraySet();
+    ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
+    method public void forEach(java.util.function.Consumer<? super E>);
+    method public java.util.Iterator<E> iterator();
+    method public int size();
+  }
+
+  public class CountDownLatch {
+    ctor public CountDownLatch(int);
+    method public void await() throws java.lang.InterruptedException;
+    method public boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void countDown();
+    method public long getCount();
+  }
+
+  public abstract class CountedCompleter<T> extends java.util.concurrent.ForkJoinTask<T> {
+    ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>, int);
+    ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>);
+    ctor protected CountedCompleter();
+    method public final void addToPendingCount(int);
+    method public final boolean compareAndSetPendingCount(int, int);
+    method public void complete(T);
+    method public abstract void compute();
+    method public final int decrementPendingCountUnlessZero();
+    method protected final boolean exec();
+    method public final java.util.concurrent.CountedCompleter<?> firstComplete();
+    method public final java.util.concurrent.CountedCompleter<?> getCompleter();
+    method public final int getPendingCount();
+    method public T getRawResult();
+    method public final java.util.concurrent.CountedCompleter<?> getRoot();
+    method public final void helpComplete(int);
+    method public final java.util.concurrent.CountedCompleter<?> nextComplete();
+    method public void onCompletion(java.util.concurrent.CountedCompleter<?>);
+    method public boolean onExceptionalCompletion(Throwable, java.util.concurrent.CountedCompleter<?>);
+    method public final void propagateCompletion();
+    method public final void quietlyCompleteRoot();
+    method public final void setPendingCount(int);
+    method protected void setRawResult(T);
+    method public final void tryComplete();
+  }
+
+  public class CyclicBarrier {
+    ctor public CyclicBarrier(int, Runnable);
+    ctor public CyclicBarrier(int);
+    method public int await() throws java.util.concurrent.BrokenBarrierException, java.lang.InterruptedException;
+    method public int await(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.BrokenBarrierException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public int getNumberWaiting();
+    method public int getParties();
+    method public boolean isBroken();
+    method public void reset();
+  }
+
+  public class DelayQueue<E extends java.util.concurrent.Delayed> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> {
+    ctor public DelayQueue();
+    ctor public DelayQueue(java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit);
+    method public E peek();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E);
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public interface Delayed extends java.lang.Comparable<java.util.concurrent.Delayed> {
+    method public long getDelay(java.util.concurrent.TimeUnit);
+  }
+
+  public class Exchanger<V> {
+    ctor public Exchanger();
+    method public V exchange(V) throws java.lang.InterruptedException;
+    method public V exchange(V, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+  }
+
+  public class ExecutionException extends java.lang.Exception {
+    ctor protected ExecutionException();
+    ctor protected ExecutionException(String);
+    ctor public ExecutionException(String, Throwable);
+    ctor public ExecutionException(Throwable);
+  }
+
+  public interface Executor {
+    method public void execute(Runnable);
+  }
+
+  public class ExecutorCompletionService<V> implements java.util.concurrent.CompletionService<V> {
+    ctor public ExecutorCompletionService(java.util.concurrent.Executor);
+    ctor public ExecutorCompletionService(java.util.concurrent.Executor, java.util.concurrent.BlockingQueue<java.util.concurrent.Future<V>>);
+    method public java.util.concurrent.Future<V> poll();
+    method public java.util.concurrent.Future<V> poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public java.util.concurrent.Future<V> submit(java.util.concurrent.Callable<V>);
+    method public java.util.concurrent.Future<V> submit(Runnable, V);
+    method public java.util.concurrent.Future<V> take() throws java.lang.InterruptedException;
+  }
+
+  public interface ExecutorService extends java.util.concurrent.Executor {
+    method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isShutdown();
+    method public boolean isTerminated();
+    method public void shutdown();
+    method public java.util.List<java.lang.Runnable> shutdownNow();
+    method public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.Future<T> submit(Runnable, T);
+    method public java.util.concurrent.Future<?> submit(Runnable);
+  }
+
+  public class Executors {
+    method public static <T> java.util.concurrent.Callable<T> callable(Runnable, T);
+    method public static java.util.concurrent.Callable<java.lang.Object> callable(Runnable);
+    method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedAction<?>);
+    method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedExceptionAction<?>);
+    method public static java.util.concurrent.ThreadFactory defaultThreadFactory();
+    method public static java.util.concurrent.ExecutorService newCachedThreadPool();
+    method public static java.util.concurrent.ExecutorService newCachedThreadPool(java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ExecutorService newFixedThreadPool(int);
+    method public static java.util.concurrent.ExecutorService newFixedThreadPool(int, java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ScheduledExecutorService newScheduledThreadPool(int);
+    method public static java.util.concurrent.ScheduledExecutorService newScheduledThreadPool(int, java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ExecutorService newSingleThreadExecutor();
+    method public static java.util.concurrent.ExecutorService newSingleThreadExecutor(java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor();
+    method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor(java.util.concurrent.ThreadFactory);
+    method public static java.util.concurrent.ExecutorService newWorkStealingPool(int);
+    method public static java.util.concurrent.ExecutorService newWorkStealingPool();
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
+    method public static java.util.concurrent.ThreadFactory privilegedThreadFactory();
+    method public static java.util.concurrent.ExecutorService unconfigurableExecutorService(java.util.concurrent.ExecutorService);
+    method public static java.util.concurrent.ScheduledExecutorService unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService);
+  }
+
+  public final class Flow {
+    method public static int defaultBufferSize();
+  }
+
+  public static interface Flow.Processor<T, R> extends java.util.concurrent.Flow.Subscriber<T> java.util.concurrent.Flow.Publisher<R> {
+  }
+
+  @java.lang.FunctionalInterface public static interface Flow.Publisher<T> {
+    method public void subscribe(java.util.concurrent.Flow.Subscriber<? super T>);
+  }
+
+  public static interface Flow.Subscriber<T> {
+    method public void onComplete();
+    method public void onError(Throwable);
+    method public void onNext(T);
+    method public void onSubscribe(java.util.concurrent.Flow.Subscription);
+  }
+
+  public static interface Flow.Subscription {
+    method public void cancel();
+    method public void request(long);
+  }
+
+  public class ForkJoinPool extends java.util.concurrent.AbstractExecutorService {
+    ctor public ForkJoinPool();
+    ctor public ForkJoinPool(int);
+    ctor public ForkJoinPool(int, java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory, java.lang.Thread.UncaughtExceptionHandler, boolean);
+    method public boolean awaitQuiescence(long, java.util.concurrent.TimeUnit);
+    method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public static java.util.concurrent.ForkJoinPool commonPool();
+    method protected int drainTasksTo(java.util.Collection<? super java.util.concurrent.ForkJoinTask<?>>);
+    method public void execute(java.util.concurrent.ForkJoinTask<?>);
+    method public void execute(Runnable);
+    method public int getActiveThreadCount();
+    method public boolean getAsyncMode();
+    method public static int getCommonPoolParallelism();
+    method public java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory getFactory();
+    method public int getParallelism();
+    method public int getPoolSize();
+    method public int getQueuedSubmissionCount();
+    method public long getQueuedTaskCount();
+    method public int getRunningThreadCount();
+    method public long getStealCount();
+    method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
+    method public boolean hasQueuedSubmissions();
+    method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>);
+    method public boolean isQuiescent();
+    method public boolean isShutdown();
+    method public boolean isTerminated();
+    method public boolean isTerminating();
+    method public static void managedBlock(java.util.concurrent.ForkJoinPool.ManagedBlocker) throws java.lang.InterruptedException;
+    method protected java.util.concurrent.ForkJoinTask<?> pollSubmission();
+    method public void shutdown();
+    method public java.util.List<java.lang.Runnable> shutdownNow();
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(Runnable, T);
+    method public java.util.concurrent.ForkJoinTask<?> submit(Runnable);
+    field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
+  }
+
+  public static interface ForkJoinPool.ForkJoinWorkerThreadFactory {
+    method public java.util.concurrent.ForkJoinWorkerThread newThread(java.util.concurrent.ForkJoinPool);
+  }
+
+  public static interface ForkJoinPool.ManagedBlocker {
+    method public boolean block() throws java.lang.InterruptedException;
+    method public boolean isReleasable();
+  }
+
+  public abstract class ForkJoinTask<V> implements java.util.concurrent.Future<V> java.io.Serializable {
+    ctor public ForkJoinTask();
+    method public static java.util.concurrent.ForkJoinTask<?> adapt(Runnable);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(Runnable, T);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
+    method public boolean cancel(boolean);
+    method public final boolean compareAndSetForkJoinTaskTag(short, short);
+    method public void complete(V);
+    method public void completeExceptionally(Throwable);
+    method protected abstract boolean exec();
+    method public final java.util.concurrent.ForkJoinTask<V> fork();
+    method public final V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public final V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public final Throwable getException();
+    method public final short getForkJoinTaskTag();
+    method public static java.util.concurrent.ForkJoinPool getPool();
+    method public static int getQueuedTaskCount();
+    method public abstract V getRawResult();
+    method public static int getSurplusQueuedTaskCount();
+    method public static void helpQuiesce();
+    method public static boolean inForkJoinPool();
+    method public final V invoke();
+    method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>, java.util.concurrent.ForkJoinTask<?>);
+    method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>...);
+    method public static <T extends java.util.concurrent.ForkJoinTask<?>> java.util.Collection<T> invokeAll(java.util.Collection<T>);
+    method public final boolean isCancelled();
+    method public final boolean isCompletedAbnormally();
+    method public final boolean isCompletedNormally();
+    method public final boolean isDone();
+    method public final V join();
+    method protected static java.util.concurrent.ForkJoinTask<?> peekNextLocalTask();
+    method protected static java.util.concurrent.ForkJoinTask<?> pollNextLocalTask();
+    method protected static java.util.concurrent.ForkJoinTask<?> pollTask();
+    method public final void quietlyComplete();
+    method public final void quietlyInvoke();
+    method public final void quietlyJoin();
+    method public void reinitialize();
+    method public final short setForkJoinTaskTag(short);
+    method protected abstract void setRawResult(V);
+    method public boolean tryUnfork();
+  }
+
+  public class ForkJoinWorkerThread extends java.lang.Thread {
+    ctor protected ForkJoinWorkerThread(java.util.concurrent.ForkJoinPool);
+    method public java.util.concurrent.ForkJoinPool getPool();
+    method public int getPoolIndex();
+    method protected void onStart();
+    method protected void onTermination(Throwable);
+  }
+
+  public interface Future<V> {
+    method public boolean cancel(boolean);
+    method public V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+  }
+
+  public class FutureTask<V> implements java.util.concurrent.RunnableFuture<V> {
+    ctor public FutureTask(java.util.concurrent.Callable<V>);
+    ctor public FutureTask(Runnable, V);
+    method public boolean cancel(boolean);
+    method protected void done();
+    method public V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+    method public void run();
+    method protected boolean runAndReset();
+    method protected void set(V);
+    method protected void setException(Throwable);
+  }
+
+  public class LinkedBlockingDeque<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingDeque<E> java.io.Serializable {
+    ctor public LinkedBlockingDeque();
+    ctor public LinkedBlockingDeque(int);
+    ctor public LinkedBlockingDeque(java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method public java.util.Iterator<E> descendingIterator();
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public E getFirst();
+    method public E getLast();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offerFirst(E);
+    method public boolean offerFirst(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offerLast(E);
+    method public boolean offerLast(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E peek();
+    method public E peekFirst();
+    method public E peekLast();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollFirst();
+    method public E pollFirst(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pollLast();
+    method public E pollLast(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E pop();
+    method public void push(E);
+    method public void put(E) throws java.lang.InterruptedException;
+    method public void putFirst(E) throws java.lang.InterruptedException;
+    method public void putLast(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(Object);
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+    method public E takeFirst() throws java.lang.InterruptedException;
+    method public E takeLast() throws java.lang.InterruptedException;
+  }
+
+  public class LinkedBlockingQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public LinkedBlockingQueue();
+    ctor public LinkedBlockingQueue(int);
+    ctor public LinkedBlockingQueue(java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll();
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public class LinkedTransferQueue<E> extends java.util.AbstractQueue<E> implements java.io.Serializable java.util.concurrent.TransferQueue<E> {
+    ctor public LinkedTransferQueue();
+    ctor public LinkedTransferQueue(java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public int getWaitingConsumerCount();
+    method public boolean hasWaitingConsumer();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit);
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll();
+    method public void put(E);
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+    method public void transfer(E) throws java.lang.InterruptedException;
+    method public boolean tryTransfer(E);
+    method public boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+  public class Phaser {
+    ctor public Phaser();
+    ctor public Phaser(int);
+    ctor public Phaser(java.util.concurrent.Phaser);
+    ctor public Phaser(java.util.concurrent.Phaser, int);
+    method public int arrive();
+    method public int arriveAndAwaitAdvance();
+    method public int arriveAndDeregister();
+    method public int awaitAdvance(int);
+    method public int awaitAdvanceInterruptibly(int) throws java.lang.InterruptedException;
+    method public int awaitAdvanceInterruptibly(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public int bulkRegister(int);
+    method public void forceTermination();
+    method public int getArrivedParties();
+    method public java.util.concurrent.Phaser getParent();
+    method public final int getPhase();
+    method public int getRegisteredParties();
+    method public java.util.concurrent.Phaser getRoot();
+    method public int getUnarrivedParties();
+    method public boolean isTerminated();
+    method protected boolean onAdvance(int, int);
+    method public int register();
+  }
+
+  public class PriorityBlockingQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public PriorityBlockingQueue();
+    ctor public PriorityBlockingQueue(int);
+    ctor public PriorityBlockingQueue(int, java.util.Comparator<? super E>);
+    ctor public PriorityBlockingQueue(java.util.Collection<? extends E>);
+    method public java.util.Comparator<? super E> comparator();
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit);
+    method public E peek();
+    method public E poll();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void put(E);
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public abstract class RecursiveAction extends java.util.concurrent.ForkJoinTask<java.lang.Void> {
+    ctor public RecursiveAction();
+    method protected abstract void compute();
+    method protected final boolean exec();
+    method public final Void getRawResult();
+    method protected final void setRawResult(Void);
+  }
+
+  public abstract class RecursiveTask<V> extends java.util.concurrent.ForkJoinTask<V> {
+    ctor public RecursiveTask();
+    method protected abstract V compute();
+    method protected final boolean exec();
+    method public final V getRawResult();
+    method protected final void setRawResult(V);
+  }
+
+  public class RejectedExecutionException extends java.lang.RuntimeException {
+    ctor public RejectedExecutionException();
+    ctor public RejectedExecutionException(String);
+    ctor public RejectedExecutionException(String, Throwable);
+    ctor public RejectedExecutionException(Throwable);
+  }
+
+  public interface RejectedExecutionHandler {
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public interface RunnableFuture<V> extends java.lang.Runnable java.util.concurrent.Future<V> {
+  }
+
+  public interface RunnableScheduledFuture<V> extends java.util.concurrent.RunnableFuture<V> java.util.concurrent.ScheduledFuture<V> {
+    method public boolean isPeriodic();
+  }
+
+  public interface ScheduledExecutorService extends java.util.concurrent.ExecutorService {
+    method public java.util.concurrent.ScheduledFuture<?> schedule(Runnable, long, java.util.concurrent.TimeUnit);
+    method public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(Runnable, long, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(Runnable, long, long, java.util.concurrent.TimeUnit);
+  }
+
+  public interface ScheduledFuture<V> extends java.util.concurrent.Delayed java.util.concurrent.Future<V> {
+  }
+
+  public class ScheduledThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor implements java.util.concurrent.ScheduledExecutorService {
+    ctor public ScheduledThreadPoolExecutor(int);
+    ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory);
+    ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.RejectedExecutionHandler);
+    ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
+    method public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy();
+    method public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy();
+    method public boolean getRemoveOnCancelPolicy();
+    method public java.util.concurrent.ScheduledFuture<?> schedule(Runnable, long, java.util.concurrent.TimeUnit);
+    method public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(Runnable, long, long, java.util.concurrent.TimeUnit);
+    method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(Runnable, long, long, java.util.concurrent.TimeUnit);
+    method public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean);
+    method public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean);
+    method public void setRemoveOnCancelPolicy(boolean);
+  }
+
+  public class Semaphore implements java.io.Serializable {
+    ctor public Semaphore(int);
+    ctor public Semaphore(int, boolean);
+    method public void acquire() throws java.lang.InterruptedException;
+    method public void acquire(int) throws java.lang.InterruptedException;
+    method public void acquireUninterruptibly();
+    method public void acquireUninterruptibly(int);
+    method public int availablePermits();
+    method public int drainPermits();
+    method public final int getQueueLength();
+    method protected java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public final boolean hasQueuedThreads();
+    method public boolean isFair();
+    method protected void reducePermits(int);
+    method public void release();
+    method public void release(int);
+    method public boolean tryAcquire();
+    method public boolean tryAcquire(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean tryAcquire(int);
+    method public boolean tryAcquire(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+  public class SynchronousQueue<E> extends java.util.AbstractQueue<E> implements java.util.concurrent.BlockingQueue<E> java.io.Serializable {
+    ctor public SynchronousQueue();
+    ctor public SynchronousQueue(boolean);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll();
+    method public void put(E) throws java.lang.InterruptedException;
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+  }
+
+  public interface ThreadFactory {
+    method public Thread newThread(Runnable);
+  }
+
+  public class ThreadLocalRandom extends java.util.Random {
+    method public static java.util.concurrent.ThreadLocalRandom current();
+    method public double nextDouble(double);
+    method public double nextDouble(double, double);
+    method public int nextInt(int, int);
+    method public long nextLong(long);
+    method public long nextLong(long, long);
+  }
+
+  public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>);
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>, java.util.concurrent.ThreadFactory);
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>, java.util.concurrent.RejectedExecutionHandler);
+    ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler);
+    method protected void afterExecute(Runnable, Throwable);
+    method public void allowCoreThreadTimeOut(boolean);
+    method public boolean allowsCoreThreadTimeOut();
+    method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method protected void beforeExecute(Thread, Runnable);
+    method public void execute(Runnable);
+    method protected void finalize();
+    method public int getActiveCount();
+    method public long getCompletedTaskCount();
+    method public int getCorePoolSize();
+    method public long getKeepAliveTime(java.util.concurrent.TimeUnit);
+    method public int getLargestPoolSize();
+    method public int getMaximumPoolSize();
+    method public int getPoolSize();
+    method public java.util.concurrent.BlockingQueue<java.lang.Runnable> getQueue();
+    method public java.util.concurrent.RejectedExecutionHandler getRejectedExecutionHandler();
+    method public long getTaskCount();
+    method public java.util.concurrent.ThreadFactory getThreadFactory();
+    method public boolean isShutdown();
+    method public boolean isTerminated();
+    method public boolean isTerminating();
+    method public int prestartAllCoreThreads();
+    method public boolean prestartCoreThread();
+    method public void purge();
+    method public boolean remove(Runnable);
+    method public void setCorePoolSize(int);
+    method public void setKeepAliveTime(long, java.util.concurrent.TimeUnit);
+    method public void setMaximumPoolSize(int);
+    method public void setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler);
+    method public void setThreadFactory(java.util.concurrent.ThreadFactory);
+    method public void shutdown();
+    method public java.util.List<java.lang.Runnable> shutdownNow();
+    method protected void terminated();
+  }
+
+  public static class ThreadPoolExecutor.AbortPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.AbortPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public static class ThreadPoolExecutor.CallerRunsPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.CallerRunsPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public static class ThreadPoolExecutor.DiscardOldestPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.DiscardOldestPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public static class ThreadPoolExecutor.DiscardPolicy implements java.util.concurrent.RejectedExecutionHandler {
+    ctor public ThreadPoolExecutor.DiscardPolicy();
+    method public void rejectedExecution(Runnable, java.util.concurrent.ThreadPoolExecutor);
+  }
+
+  public enum TimeUnit {
+    method public long convert(long, java.util.concurrent.TimeUnit);
+    method public void sleep(long) throws java.lang.InterruptedException;
+    method public void timedJoin(Thread, long) throws java.lang.InterruptedException;
+    method public void timedWait(Object, long) throws java.lang.InterruptedException;
+    method public long toDays(long);
+    method public long toHours(long);
+    method public long toMicros(long);
+    method public long toMillis(long);
+    method public long toMinutes(long);
+    method public long toNanos(long);
+    method public long toSeconds(long);
+    enum_constant public static final java.util.concurrent.TimeUnit DAYS;
+    enum_constant public static final java.util.concurrent.TimeUnit HOURS;
+    enum_constant public static final java.util.concurrent.TimeUnit MICROSECONDS;
+    enum_constant public static final java.util.concurrent.TimeUnit MILLISECONDS;
+    enum_constant public static final java.util.concurrent.TimeUnit MINUTES;
+    enum_constant public static final java.util.concurrent.TimeUnit NANOSECONDS;
+    enum_constant public static final java.util.concurrent.TimeUnit SECONDS;
+  }
+
+  public class TimeoutException extends java.lang.Exception {
+    ctor public TimeoutException();
+    ctor public TimeoutException(String);
+  }
+
+  public interface TransferQueue<E> extends java.util.concurrent.BlockingQueue<E> {
+    method public int getWaitingConsumerCount();
+    method public boolean hasWaitingConsumer();
+    method public void transfer(E) throws java.lang.InterruptedException;
+    method public boolean tryTransfer(E);
+    method public boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+}
+
+package java.util.concurrent.atomic {
+
+  public class AtomicBoolean implements java.io.Serializable {
+    ctor public AtomicBoolean(boolean);
+    ctor public AtomicBoolean();
+    method public final boolean compareAndSet(boolean, boolean);
+    method public final boolean get();
+    method public final boolean getAndSet(boolean);
+    method public final void lazySet(boolean);
+    method public final void set(boolean);
+    method public boolean weakCompareAndSet(boolean, boolean);
+  }
+
+  public class AtomicInteger extends java.lang.Number implements java.io.Serializable {
+    ctor public AtomicInteger(int);
+    ctor public AtomicInteger();
+    method public final int accumulateAndGet(int, java.util.function.IntBinaryOperator);
+    method public final int addAndGet(int);
+    method public final boolean compareAndSet(int, int);
+    method public final int decrementAndGet();
+    method public double doubleValue();
+    method public float floatValue();
+    method public final int get();
+    method public final int getAndAccumulate(int, java.util.function.IntBinaryOperator);
+    method public final int getAndAdd(int);
+    method public final int getAndDecrement();
+    method public final int getAndIncrement();
+    method public final int getAndSet(int);
+    method public final int getAndUpdate(java.util.function.IntUnaryOperator);
+    method public final int incrementAndGet();
+    method public int intValue();
+    method public final void lazySet(int);
+    method public long longValue();
+    method public final void set(int);
+    method public final int updateAndGet(java.util.function.IntUnaryOperator);
+    method public final boolean weakCompareAndSet(int, int);
+  }
+
+  public class AtomicIntegerArray implements java.io.Serializable {
+    ctor public AtomicIntegerArray(int);
+    ctor public AtomicIntegerArray(int[]);
+    method public final int accumulateAndGet(int, int, java.util.function.IntBinaryOperator);
+    method public final int addAndGet(int, int);
+    method public final boolean compareAndSet(int, int, int);
+    method public final int decrementAndGet(int);
+    method public final int get(int);
+    method public final int getAndAccumulate(int, int, java.util.function.IntBinaryOperator);
+    method public final int getAndAdd(int, int);
+    method public final int getAndDecrement(int);
+    method public final int getAndIncrement(int);
+    method public final int getAndSet(int, int);
+    method public final int getAndUpdate(int, java.util.function.IntUnaryOperator);
+    method public final int incrementAndGet(int);
+    method public final void lazySet(int, int);
+    method public final int length();
+    method public final void set(int, int);
+    method public final int updateAndGet(int, java.util.function.IntUnaryOperator);
+    method public final boolean weakCompareAndSet(int, int, int);
+  }
+
+  public abstract class AtomicIntegerFieldUpdater<T> {
+    ctor protected AtomicIntegerFieldUpdater();
+    method public final int accumulateAndGet(T, int, java.util.function.IntBinaryOperator);
+    method public int addAndGet(T, int);
+    method public abstract boolean compareAndSet(T, int, int);
+    method public int decrementAndGet(T);
+    method public abstract int get(T);
+    method public final int getAndAccumulate(T, int, java.util.function.IntBinaryOperator);
+    method public int getAndAdd(T, int);
+    method public int getAndDecrement(T);
+    method public int getAndIncrement(T);
+    method public int getAndSet(T, int);
+    method public final int getAndUpdate(T, java.util.function.IntUnaryOperator);
+    method public int incrementAndGet(T);
+    method public abstract void lazySet(T, int);
+    method public static <U> java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(Class<U>, String);
+    method public abstract void set(T, int);
+    method public final int updateAndGet(T, java.util.function.IntUnaryOperator);
+    method public abstract boolean weakCompareAndSet(T, int, int);
+  }
+
+  public class AtomicLong extends java.lang.Number implements java.io.Serializable {
+    ctor public AtomicLong(long);
+    ctor public AtomicLong();
+    method public final long accumulateAndGet(long, java.util.function.LongBinaryOperator);
+    method public final long addAndGet(long);
+    method public final boolean compareAndSet(long, long);
+    method public final long decrementAndGet();
+    method public double doubleValue();
+    method public float floatValue();
+    method public final long get();
+    method public final long getAndAccumulate(long, java.util.function.LongBinaryOperator);
+    method public final long getAndAdd(long);
+    method public final long getAndDecrement();
+    method public final long getAndIncrement();
+    method public final long getAndSet(long);
+    method public final long getAndUpdate(java.util.function.LongUnaryOperator);
+    method public final long incrementAndGet();
+    method public int intValue();
+    method public final void lazySet(long);
+    method public long longValue();
+    method public final void set(long);
+    method public final long updateAndGet(java.util.function.LongUnaryOperator);
+    method public final boolean weakCompareAndSet(long, long);
+  }
+
+  public class AtomicLongArray implements java.io.Serializable {
+    ctor public AtomicLongArray(int);
+    ctor public AtomicLongArray(long[]);
+    method public final long accumulateAndGet(int, long, java.util.function.LongBinaryOperator);
+    method public long addAndGet(int, long);
+    method public final boolean compareAndSet(int, long, long);
+    method public final long decrementAndGet(int);
+    method public final long get(int);
+    method public final long getAndAccumulate(int, long, java.util.function.LongBinaryOperator);
+    method public final long getAndAdd(int, long);
+    method public final long getAndDecrement(int);
+    method public final long getAndIncrement(int);
+    method public final long getAndSet(int, long);
+    method public final long getAndUpdate(int, java.util.function.LongUnaryOperator);
+    method public final long incrementAndGet(int);
+    method public final void lazySet(int, long);
+    method public final int length();
+    method public final void set(int, long);
+    method public final long updateAndGet(int, java.util.function.LongUnaryOperator);
+    method public final boolean weakCompareAndSet(int, long, long);
+  }
+
+  public abstract class AtomicLongFieldUpdater<T> {
+    ctor protected AtomicLongFieldUpdater();
+    method public final long accumulateAndGet(T, long, java.util.function.LongBinaryOperator);
+    method public long addAndGet(T, long);
+    method public abstract boolean compareAndSet(T, long, long);
+    method public long decrementAndGet(T);
+    method public abstract long get(T);
+    method public final long getAndAccumulate(T, long, java.util.function.LongBinaryOperator);
+    method public long getAndAdd(T, long);
+    method public long getAndDecrement(T);
+    method public long getAndIncrement(T);
+    method public long getAndSet(T, long);
+    method public final long getAndUpdate(T, java.util.function.LongUnaryOperator);
+    method public long incrementAndGet(T);
+    method public abstract void lazySet(T, long);
+    method public static <U> java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(Class<U>, String);
+    method public abstract void set(T, long);
+    method public final long updateAndGet(T, java.util.function.LongUnaryOperator);
+    method public abstract boolean weakCompareAndSet(T, long, long);
+  }
+
+  public class AtomicMarkableReference<V> {
+    ctor public AtomicMarkableReference(V, boolean);
+    method public boolean attemptMark(V, boolean);
+    method public boolean compareAndSet(V, V, boolean, boolean);
+    method public V get(boolean[]);
+    method public V getReference();
+    method public boolean isMarked();
+    method public void set(V, boolean);
+    method public boolean weakCompareAndSet(V, V, boolean, boolean);
+  }
+
+  public class AtomicReference<V> implements java.io.Serializable {
+    ctor public AtomicReference(V);
+    ctor public AtomicReference();
+    method public final V accumulateAndGet(V, java.util.function.BinaryOperator<V>);
+    method public final boolean compareAndSet(V, V);
+    method public final V get();
+    method public final V getAndAccumulate(V, java.util.function.BinaryOperator<V>);
+    method public final V getAndSet(V);
+    method public final V getAndUpdate(java.util.function.UnaryOperator<V>);
+    method public final void lazySet(V);
+    method public final void set(V);
+    method public final V updateAndGet(java.util.function.UnaryOperator<V>);
+    method public final boolean weakCompareAndSet(V, V);
+  }
+
+  public class AtomicReferenceArray<E> implements java.io.Serializable {
+    ctor public AtomicReferenceArray(int);
+    ctor public AtomicReferenceArray(E[]);
+    method public final E accumulateAndGet(int, E, java.util.function.BinaryOperator<E>);
+    method public final boolean compareAndSet(int, E, E);
+    method public final E get(int);
+    method public final E getAndAccumulate(int, E, java.util.function.BinaryOperator<E>);
+    method public final E getAndSet(int, E);
+    method public final E getAndUpdate(int, java.util.function.UnaryOperator<E>);
+    method public final void lazySet(int, E);
+    method public final int length();
+    method public final void set(int, E);
+    method public final E updateAndGet(int, java.util.function.UnaryOperator<E>);
+    method public final boolean weakCompareAndSet(int, E, E);
+  }
+
+  public abstract class AtomicReferenceFieldUpdater<T, V> {
+    ctor protected AtomicReferenceFieldUpdater();
+    method public final V accumulateAndGet(T, V, java.util.function.BinaryOperator<V>);
+    method public abstract boolean compareAndSet(T, V, V);
+    method public abstract V get(T);
+    method public final V getAndAccumulate(T, V, java.util.function.BinaryOperator<V>);
+    method public V getAndSet(T, V);
+    method public final V getAndUpdate(T, java.util.function.UnaryOperator<V>);
+    method public abstract void lazySet(T, V);
+    method public static <U, W> java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U,W> newUpdater(Class<U>, Class<W>, String);
+    method public abstract void set(T, V);
+    method public final V updateAndGet(T, java.util.function.UnaryOperator<V>);
+    method public abstract boolean weakCompareAndSet(T, V, V);
+  }
+
+  public class AtomicStampedReference<V> {
+    ctor public AtomicStampedReference(V, int);
+    method public boolean attemptStamp(V, int);
+    method public boolean compareAndSet(V, V, int, int);
+    method public V get(int[]);
+    method public V getReference();
+    method public int getStamp();
+    method public void set(V, int);
+    method public boolean weakCompareAndSet(V, V, int, int);
+  }
+
+  public class DoubleAccumulator extends java.lang.Number implements java.io.Serializable {
+    ctor public DoubleAccumulator(java.util.function.DoubleBinaryOperator, double);
+    method public void accumulate(double);
+    method public double doubleValue();
+    method public float floatValue();
+    method public double get();
+    method public double getThenReset();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+  }
+
+  public class DoubleAdder extends java.lang.Number implements java.io.Serializable {
+    ctor public DoubleAdder();
+    method public void add(double);
+    method public double doubleValue();
+    method public float floatValue();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+    method public double sum();
+    method public double sumThenReset();
+  }
+
+  public class LongAccumulator extends java.lang.Number implements java.io.Serializable {
+    ctor public LongAccumulator(java.util.function.LongBinaryOperator, long);
+    method public void accumulate(long);
+    method public double doubleValue();
+    method public float floatValue();
+    method public long get();
+    method public long getThenReset();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+  }
+
+  public class LongAdder extends java.lang.Number implements java.io.Serializable {
+    ctor public LongAdder();
+    method public void add(long);
+    method public void decrement();
+    method public double doubleValue();
+    method public float floatValue();
+    method public void increment();
+    method public int intValue();
+    method public long longValue();
+    method public void reset();
+    method public long sum();
+    method public long sumThenReset();
+  }
+
+}
+
+package java.util.concurrent.locks {
+
+  public abstract class AbstractOwnableSynchronizer implements java.io.Serializable {
+    ctor protected AbstractOwnableSynchronizer();
+    method protected final Thread getExclusiveOwnerThread();
+    method protected final void setExclusiveOwnerThread(Thread);
+  }
+
+  public abstract class AbstractQueuedLongSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable {
+    ctor protected AbstractQueuedLongSynchronizer();
+    method public final void acquire(long);
+    method public final void acquireInterruptibly(long) throws java.lang.InterruptedException;
+    method public final void acquireShared(long);
+    method public final void acquireSharedInterruptibly(long) throws java.lang.InterruptedException;
+    method protected final boolean compareAndSetState(long, long);
+    method public final java.util.Collection<java.lang.Thread> getExclusiveQueuedThreads();
+    method public final Thread getFirstQueuedThread();
+    method public final int getQueueLength();
+    method public final java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public final java.util.Collection<java.lang.Thread> getSharedQueuedThreads();
+    method protected final long getState();
+    method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method public final java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method public final boolean hasContended();
+    method public final boolean hasQueuedPredecessors();
+    method public final boolean hasQueuedThreads();
+    method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method protected boolean isHeldExclusively();
+    method public final boolean isQueued(Thread);
+    method public final boolean owns(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
+    method public final boolean release(long);
+    method public final boolean releaseShared(long);
+    method protected final void setState(long);
+    method protected boolean tryAcquire(long);
+    method public final boolean tryAcquireNanos(long, long) throws java.lang.InterruptedException;
+    method protected long tryAcquireShared(long);
+    method public final boolean tryAcquireSharedNanos(long, long) throws java.lang.InterruptedException;
+    method protected boolean tryRelease(long);
+    method protected boolean tryReleaseShared(long);
+  }
+
+  public class AbstractQueuedLongSynchronizer.ConditionObject implements java.util.concurrent.locks.Condition java.io.Serializable {
+    ctor public AbstractQueuedLongSynchronizer.ConditionObject();
+    method public final void await() throws java.lang.InterruptedException;
+    method public final boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public final long awaitNanos(long) throws java.lang.InterruptedException;
+    method public final void awaitUninterruptibly();
+    method public final boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException;
+    method protected final int getWaitQueueLength();
+    method protected final java.util.Collection<java.lang.Thread> getWaitingThreads();
+    method protected final boolean hasWaiters();
+    method public final void signal();
+    method public final void signalAll();
+  }
+
+  public abstract class AbstractQueuedSynchronizer extends java.util.concurrent.locks.AbstractOwnableSynchronizer implements java.io.Serializable {
+    ctor protected AbstractQueuedSynchronizer();
+    method public final void acquire(int);
+    method public final void acquireInterruptibly(int) throws java.lang.InterruptedException;
+    method public final void acquireShared(int);
+    method public final void acquireSharedInterruptibly(int) throws java.lang.InterruptedException;
+    method protected final boolean compareAndSetState(int, int);
+    method public final java.util.Collection<java.lang.Thread> getExclusiveQueuedThreads();
+    method public final Thread getFirstQueuedThread();
+    method public final int getQueueLength();
+    method public final java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public final java.util.Collection<java.lang.Thread> getSharedQueuedThreads();
+    method protected final int getState();
+    method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method public final java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method public final boolean hasContended();
+    method public final boolean hasQueuedPredecessors();
+    method public final boolean hasQueuedThreads();
+    method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method protected boolean isHeldExclusively();
+    method public final boolean isQueued(Thread);
+    method public final boolean owns(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
+    method public final boolean release(int);
+    method public final boolean releaseShared(int);
+    method protected final void setState(int);
+    method protected boolean tryAcquire(int);
+    method public final boolean tryAcquireNanos(int, long) throws java.lang.InterruptedException;
+    method protected int tryAcquireShared(int);
+    method public final boolean tryAcquireSharedNanos(int, long) throws java.lang.InterruptedException;
+    method protected boolean tryRelease(int);
+    method protected boolean tryReleaseShared(int);
+  }
+
+  public class AbstractQueuedSynchronizer.ConditionObject implements java.util.concurrent.locks.Condition java.io.Serializable {
+    ctor public AbstractQueuedSynchronizer.ConditionObject();
+    method public final void await() throws java.lang.InterruptedException;
+    method public final boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public final long awaitNanos(long) throws java.lang.InterruptedException;
+    method public final void awaitUninterruptibly();
+    method public final boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException;
+    method protected final int getWaitQueueLength();
+    method protected final java.util.Collection<java.lang.Thread> getWaitingThreads();
+    method protected final boolean hasWaiters();
+    method public final void signal();
+    method public final void signalAll();
+  }
+
+  public interface Condition {
+    method public void await() throws java.lang.InterruptedException;
+    method public boolean await(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public long awaitNanos(long) throws java.lang.InterruptedException;
+    method public void awaitUninterruptibly();
+    method public boolean awaitUntil(java.util.Date) throws java.lang.InterruptedException;
+    method public void signal();
+    method public void signalAll();
+  }
+
+  public interface Lock {
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public class LockSupport {
+    method public static Object getBlocker(Thread);
+    method public static void park(Object);
+    method public static void park();
+    method public static void parkNanos(Object, long);
+    method public static void parkNanos(long);
+    method public static void parkUntil(Object, long);
+    method public static void parkUntil(long);
+    method public static void unpark(Thread);
+  }
+
+  public interface ReadWriteLock {
+    method public java.util.concurrent.locks.Lock readLock();
+    method public java.util.concurrent.locks.Lock writeLock();
+  }
+
+  public class ReentrantLock implements java.util.concurrent.locks.Lock java.io.Serializable {
+    ctor public ReentrantLock();
+    ctor public ReentrantLock(boolean);
+    method public int getHoldCount();
+    method protected Thread getOwner();
+    method public final int getQueueLength();
+    method protected java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method public int getWaitQueueLength(java.util.concurrent.locks.Condition);
+    method protected java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.Condition);
+    method public final boolean hasQueuedThread(Thread);
+    method public final boolean hasQueuedThreads();
+    method public boolean hasWaiters(java.util.concurrent.locks.Condition);
+    method public final boolean isFair();
+    method public boolean isHeldByCurrentThread();
+    method public boolean isLocked();
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public class ReentrantReadWriteLock implements java.util.concurrent.locks.ReadWriteLock java.io.Serializable {
+    ctor public ReentrantReadWriteLock();
+    ctor public ReentrantReadWriteLock(boolean);
+    method protected Thread getOwner();
+    method public final int getQueueLength();
+    method protected java.util.Collection<java.lang.Thread> getQueuedReaderThreads();
+    method protected java.util.Collection<java.lang.Thread> getQueuedThreads();
+    method protected java.util.Collection<java.lang.Thread> getQueuedWriterThreads();
+    method public int getReadHoldCount();
+    method public int getReadLockCount();
+    method public int getWaitQueueLength(java.util.concurrent.locks.Condition);
+    method protected java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.Condition);
+    method public int getWriteHoldCount();
+    method public final boolean hasQueuedThread(Thread);
+    method public final boolean hasQueuedThreads();
+    method public boolean hasWaiters(java.util.concurrent.locks.Condition);
+    method public final boolean isFair();
+    method public boolean isWriteLocked();
+    method public boolean isWriteLockedByCurrentThread();
+    method public java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock readLock();
+    method public java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock writeLock();
+  }
+
+  public static class ReentrantReadWriteLock.ReadLock implements java.util.concurrent.locks.Lock java.io.Serializable {
+    ctor protected ReentrantReadWriteLock.ReadLock(java.util.concurrent.locks.ReentrantReadWriteLock);
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public static class ReentrantReadWriteLock.WriteLock implements java.util.concurrent.locks.Lock java.io.Serializable {
+    ctor protected ReentrantReadWriteLock.WriteLock(java.util.concurrent.locks.ReentrantReadWriteLock);
+    method public int getHoldCount();
+    method public boolean isHeldByCurrentThread();
+    method public void lock();
+    method public void lockInterruptibly() throws java.lang.InterruptedException;
+    method public java.util.concurrent.locks.Condition newCondition();
+    method public boolean tryLock();
+    method public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock();
+  }
+
+  public class StampedLock implements java.io.Serializable {
+    ctor public StampedLock();
+    method public java.util.concurrent.locks.Lock asReadLock();
+    method public java.util.concurrent.locks.ReadWriteLock asReadWriteLock();
+    method public java.util.concurrent.locks.Lock asWriteLock();
+    method public int getReadLockCount();
+    method public boolean isReadLocked();
+    method public boolean isWriteLocked();
+    method public long readLock();
+    method public long readLockInterruptibly() throws java.lang.InterruptedException;
+    method public long tryConvertToOptimisticRead(long);
+    method public long tryConvertToReadLock(long);
+    method public long tryConvertToWriteLock(long);
+    method public long tryOptimisticRead();
+    method public long tryReadLock();
+    method public long tryReadLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public boolean tryUnlockRead();
+    method public boolean tryUnlockWrite();
+    method public long tryWriteLock();
+    method public long tryWriteLock(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public void unlock(long);
+    method public void unlockRead(long);
+    method public void unlockWrite(long);
+    method public boolean validate(long);
+    method public long writeLock();
+    method public long writeLockInterruptibly() throws java.lang.InterruptedException;
+  }
+
+}
+
+package java.util.function {
+
+  @java.lang.FunctionalInterface public interface BiConsumer<T, U> {
+    method public void accept(T, U);
+    method public default java.util.function.BiConsumer<T,U> andThen(java.util.function.BiConsumer<? super T,? super U>);
+  }
+
+  @java.lang.FunctionalInterface public interface BiFunction<T, U, R> {
+    method public default <V> java.util.function.BiFunction<T,U,V> andThen(java.util.function.Function<? super R,? extends V>);
+    method public R apply(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface BiPredicate<T, U> {
+    method public default java.util.function.BiPredicate<T,U> and(java.util.function.BiPredicate<? super T,? super U>);
+    method public default java.util.function.BiPredicate<T,U> negate();
+    method public default java.util.function.BiPredicate<T,U> or(java.util.function.BiPredicate<? super T,? super U>);
+    method public boolean test(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface BinaryOperator<T> extends java.util.function.BiFunction<T,T,T> {
+    method public static <T> java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
+  }
+
+  @java.lang.FunctionalInterface public interface BooleanSupplier {
+    method public boolean getAsBoolean();
+  }
+
+  @java.lang.FunctionalInterface public interface Consumer<T> {
+    method public void accept(T);
+    method public default java.util.function.Consumer<T> andThen(java.util.function.Consumer<? super T>);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleBinaryOperator {
+    method public double applyAsDouble(double, double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleConsumer {
+    method public void accept(double);
+    method public default java.util.function.DoubleConsumer andThen(java.util.function.DoubleConsumer);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleFunction<R> {
+    method public R apply(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoublePredicate {
+    method public default java.util.function.DoublePredicate and(java.util.function.DoublePredicate);
+    method public default java.util.function.DoublePredicate negate();
+    method public default java.util.function.DoublePredicate or(java.util.function.DoublePredicate);
+    method public boolean test(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleSupplier {
+    method public double getAsDouble();
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleToIntFunction {
+    method public int applyAsInt(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleToLongFunction {
+    method public long applyAsLong(double);
+  }
+
+  @java.lang.FunctionalInterface public interface DoubleUnaryOperator {
+    method public default java.util.function.DoubleUnaryOperator andThen(java.util.function.DoubleUnaryOperator);
+    method public double applyAsDouble(double);
+    method public default java.util.function.DoubleUnaryOperator compose(java.util.function.DoubleUnaryOperator);
+    method public static java.util.function.DoubleUnaryOperator identity();
+  }
+
+  @java.lang.FunctionalInterface public interface Function<T, R> {
+    method public default <V> java.util.function.Function<T,V> andThen(java.util.function.Function<? super R,? extends V>);
+    method public R apply(T);
+    method public default <V> java.util.function.Function<V,R> compose(java.util.function.Function<? super V,? extends T>);
+    method public static <T> java.util.function.Function<T,T> identity();
+  }
+
+  @java.lang.FunctionalInterface public interface IntBinaryOperator {
+    method public int applyAsInt(int, int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntConsumer {
+    method public void accept(int);
+    method public default java.util.function.IntConsumer andThen(java.util.function.IntConsumer);
+  }
+
+  @java.lang.FunctionalInterface public interface IntFunction<R> {
+    method public R apply(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntPredicate {
+    method public default java.util.function.IntPredicate and(java.util.function.IntPredicate);
+    method public default java.util.function.IntPredicate negate();
+    method public default java.util.function.IntPredicate or(java.util.function.IntPredicate);
+    method public boolean test(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntSupplier {
+    method public int getAsInt();
+  }
+
+  @java.lang.FunctionalInterface public interface IntToDoubleFunction {
+    method public double applyAsDouble(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntToLongFunction {
+    method public long applyAsLong(int);
+  }
+
+  @java.lang.FunctionalInterface public interface IntUnaryOperator {
+    method public default java.util.function.IntUnaryOperator andThen(java.util.function.IntUnaryOperator);
+    method public int applyAsInt(int);
+    method public default java.util.function.IntUnaryOperator compose(java.util.function.IntUnaryOperator);
+    method public static java.util.function.IntUnaryOperator identity();
+  }
+
+  @java.lang.FunctionalInterface public interface LongBinaryOperator {
+    method public long applyAsLong(long, long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongConsumer {
+    method public void accept(long);
+    method public default java.util.function.LongConsumer andThen(java.util.function.LongConsumer);
+  }
+
+  @java.lang.FunctionalInterface public interface LongFunction<R> {
+    method public R apply(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongPredicate {
+    method public default java.util.function.LongPredicate and(java.util.function.LongPredicate);
+    method public default java.util.function.LongPredicate negate();
+    method public default java.util.function.LongPredicate or(java.util.function.LongPredicate);
+    method public boolean test(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongSupplier {
+    method public long getAsLong();
+  }
+
+  @java.lang.FunctionalInterface public interface LongToDoubleFunction {
+    method public double applyAsDouble(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongToIntFunction {
+    method public int applyAsInt(long);
+  }
+
+  @java.lang.FunctionalInterface public interface LongUnaryOperator {
+    method public default java.util.function.LongUnaryOperator andThen(java.util.function.LongUnaryOperator);
+    method public long applyAsLong(long);
+    method public default java.util.function.LongUnaryOperator compose(java.util.function.LongUnaryOperator);
+    method public static java.util.function.LongUnaryOperator identity();
+  }
+
+  @java.lang.FunctionalInterface public interface ObjDoubleConsumer<T> {
+    method public void accept(T, double);
+  }
+
+  @java.lang.FunctionalInterface public interface ObjIntConsumer<T> {
+    method public void accept(T, int);
+  }
+
+  @java.lang.FunctionalInterface public interface ObjLongConsumer<T> {
+    method public void accept(T, long);
+  }
+
+  @java.lang.FunctionalInterface public interface Predicate<T> {
+    method public default java.util.function.Predicate<T> and(java.util.function.Predicate<? super T>);
+    method public static <T> java.util.function.Predicate<T> isEqual(Object);
+    method public default java.util.function.Predicate<T> negate();
+    method public default java.util.function.Predicate<T> or(java.util.function.Predicate<? super T>);
+    method public boolean test(T);
+  }
+
+  @java.lang.FunctionalInterface public interface Supplier<T> {
+    method public T get();
+  }
+
+  @java.lang.FunctionalInterface public interface ToDoubleBiFunction<T, U> {
+    method public double applyAsDouble(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface ToDoubleFunction<T> {
+    method public double applyAsDouble(T);
+  }
+
+  @java.lang.FunctionalInterface public interface ToIntBiFunction<T, U> {
+    method public int applyAsInt(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface ToIntFunction<T> {
+    method public int applyAsInt(T);
+  }
+
+  @java.lang.FunctionalInterface public interface ToLongBiFunction<T, U> {
+    method public long applyAsLong(T, U);
+  }
+
+  @java.lang.FunctionalInterface public interface ToLongFunction<T> {
+    method public long applyAsLong(T);
+  }
+
+  @java.lang.FunctionalInterface public interface UnaryOperator<T> extends java.util.function.Function<T,T> {
+    method public static <T> java.util.function.UnaryOperator<T> identity();
+  }
+
+}
+
+package java.util.jar {
+
+  public class Attributes implements java.lang.Cloneable java.util.Map<java.lang.Object,java.lang.Object> {
+    ctor public Attributes();
+    ctor public Attributes(int);
+    ctor public Attributes(java.util.jar.Attributes);
+    method public void clear();
+    method public Object clone();
+    method public boolean containsKey(Object);
+    method public boolean containsValue(Object);
+    method public java.util.Set<java.util.Map.Entry<java.lang.Object,java.lang.Object>> entrySet();
+    method public Object get(Object);
+    method public String getValue(String);
+    method public String getValue(java.util.jar.Attributes.Name);
+    method public boolean isEmpty();
+    method public java.util.Set<java.lang.Object> keySet();
+    method public Object put(Object, Object);
+    method public void putAll(java.util.Map<?,?>);
+    method public String putValue(String, String);
+    method public Object remove(Object);
+    method public int size();
+    method public java.util.Collection<java.lang.Object> values();
+    field protected java.util.Map<java.lang.Object,java.lang.Object> map;
+  }
+
+  public static class Attributes.Name {
+    ctor public Attributes.Name(String);
+    field public static final java.util.jar.Attributes.Name CLASS_PATH;
+    field public static final java.util.jar.Attributes.Name CONTENT_TYPE;
+    field @Deprecated public static final java.util.jar.Attributes.Name EXTENSION_INSTALLATION;
+    field public static final java.util.jar.Attributes.Name EXTENSION_LIST;
+    field public static final java.util.jar.Attributes.Name EXTENSION_NAME;
+    field public static final java.util.jar.Attributes.Name IMPLEMENTATION_TITLE;
+    field @Deprecated public static final java.util.jar.Attributes.Name IMPLEMENTATION_URL;
+    field public static final java.util.jar.Attributes.Name IMPLEMENTATION_VENDOR;
+    field @Deprecated public static final java.util.jar.Attributes.Name IMPLEMENTATION_VENDOR_ID;
+    field public static final java.util.jar.Attributes.Name IMPLEMENTATION_VERSION;
+    field public static final java.util.jar.Attributes.Name MAIN_CLASS;
+    field public static final java.util.jar.Attributes.Name MANIFEST_VERSION;
+    field public static final java.util.jar.Attributes.Name SEALED;
+    field public static final java.util.jar.Attributes.Name SIGNATURE_VERSION;
+    field public static final java.util.jar.Attributes.Name SPECIFICATION_TITLE;
+    field public static final java.util.jar.Attributes.Name SPECIFICATION_VENDOR;
+    field public static final java.util.jar.Attributes.Name SPECIFICATION_VERSION;
+  }
+
+  public class JarEntry extends java.util.zip.ZipEntry {
+    ctor public JarEntry(String);
+    ctor public JarEntry(java.util.zip.ZipEntry);
+    ctor public JarEntry(java.util.jar.JarEntry);
+    method public java.util.jar.Attributes getAttributes() throws java.io.IOException;
+    method public java.security.cert.Certificate[] getCertificates();
+    method public java.security.CodeSigner[] getCodeSigners();
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class JarException extends java.util.zip.ZipException {
+    ctor public JarException();
+    ctor public JarException(String);
+  }
+
+  public class JarFile extends java.util.zip.ZipFile {
+    ctor public JarFile(String) throws java.io.IOException;
+    ctor public JarFile(String, boolean) throws java.io.IOException;
+    ctor public JarFile(java.io.File) throws java.io.IOException;
+    ctor public JarFile(java.io.File, boolean) throws java.io.IOException;
+    ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException;
+    method public java.util.Enumeration<java.util.jar.JarEntry> entries();
+    method public java.util.jar.JarEntry getJarEntry(String);
+    method public java.util.jar.Manifest getManifest() throws java.io.IOException;
+    method public java.util.stream.Stream<java.util.jar.JarEntry> stream();
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final String MANIFEST_NAME = "META-INF/MANIFEST.MF";
+  }
+
+  public class JarInputStream extends java.util.zip.ZipInputStream {
+    ctor public JarInputStream(java.io.InputStream) throws java.io.IOException;
+    ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException;
+    method public java.util.jar.Manifest getManifest();
+    method public java.util.jar.JarEntry getNextJarEntry() throws java.io.IOException;
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class JarOutputStream extends java.util.zip.ZipOutputStream {
+    ctor public JarOutputStream(java.io.OutputStream, java.util.jar.Manifest) throws java.io.IOException;
+    ctor public JarOutputStream(java.io.OutputStream) throws java.io.IOException;
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class Manifest implements java.lang.Cloneable {
+    ctor public Manifest();
+    ctor public Manifest(java.io.InputStream) throws java.io.IOException;
+    ctor public Manifest(java.util.jar.Manifest);
+    method public void clear();
+    method public Object clone();
+    method public java.util.jar.Attributes getAttributes(String);
+    method public java.util.Map<java.lang.String,java.util.jar.Attributes> getEntries();
+    method public java.util.jar.Attributes getMainAttributes();
+    method public void read(java.io.InputStream) throws java.io.IOException;
+    method public void write(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  public abstract class Pack200 {
+    method public static java.util.jar.Pack200.Packer newPacker();
+    method public static java.util.jar.Pack200.Unpacker newUnpacker();
+  }
+
+  public static interface Pack200.Packer {
+    method @Deprecated public default void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void pack(java.util.jar.JarFile, java.io.OutputStream) throws java.io.IOException;
+    method public void pack(java.util.jar.JarInputStream, java.io.OutputStream) throws java.io.IOException;
+    method public java.util.SortedMap<java.lang.String,java.lang.String> properties();
+    method @Deprecated public default void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    field public static final String CLASS_ATTRIBUTE_PFX = "pack.class.attribute.";
+    field public static final String CODE_ATTRIBUTE_PFX = "pack.code.attribute.";
+    field public static final String DEFLATE_HINT = "pack.deflate.hint";
+    field public static final String EFFORT = "pack.effort";
+    field public static final String ERROR = "error";
+    field public static final String FALSE = "false";
+    field public static final String FIELD_ATTRIBUTE_PFX = "pack.field.attribute.";
+    field public static final String KEEP = "keep";
+    field public static final String KEEP_FILE_ORDER = "pack.keep.file.order";
+    field public static final String LATEST = "latest";
+    field public static final String METHOD_ATTRIBUTE_PFX = "pack.method.attribute.";
+    field public static final String MODIFICATION_TIME = "pack.modification.time";
+    field public static final String PASS = "pass";
+    field public static final String PASS_FILE_PFX = "pack.pass.file.";
+    field public static final String PROGRESS = "pack.progress";
+    field public static final String SEGMENT_LIMIT = "pack.segment.limit";
+    field public static final String STRIP = "strip";
+    field public static final String TRUE = "true";
+    field public static final String UNKNOWN_ATTRIBUTE = "pack.unknown.attribute";
+  }
+
+  public static interface Pack200.Unpacker {
+    method @Deprecated public default void addPropertyChangeListener(java.beans.PropertyChangeListener);
+    method public java.util.SortedMap<java.lang.String,java.lang.String> properties();
+    method @Deprecated public default void removePropertyChangeListener(java.beans.PropertyChangeListener);
+    method public void unpack(java.io.InputStream, java.util.jar.JarOutputStream) throws java.io.IOException;
+    method public void unpack(java.io.File, java.util.jar.JarOutputStream) throws java.io.IOException;
+    field public static final String DEFLATE_HINT = "unpack.deflate.hint";
+    field public static final String FALSE = "false";
+    field public static final String KEEP = "keep";
+    field public static final String PROGRESS = "unpack.progress";
+    field public static final String TRUE = "true";
+  }
+
+}
+
+package java.util.logging {
+
+  public class ConsoleHandler extends java.util.logging.StreamHandler {
+    ctor public ConsoleHandler();
+    method public void close();
+  }
+
+  public class ErrorManager {
+    ctor public ErrorManager();
+    method public void error(String, Exception, int);
+    field public static final int CLOSE_FAILURE = 3; // 0x3
+    field public static final int FLUSH_FAILURE = 2; // 0x2
+    field public static final int FORMAT_FAILURE = 5; // 0x5
+    field public static final int GENERIC_FAILURE = 0; // 0x0
+    field public static final int OPEN_FAILURE = 4; // 0x4
+    field public static final int WRITE_FAILURE = 1; // 0x1
+  }
+
+  public class FileHandler extends java.util.logging.StreamHandler {
+    ctor public FileHandler() throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String, boolean) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String, int, int) throws java.io.IOException, java.lang.SecurityException;
+    ctor public FileHandler(String, int, int, boolean) throws java.io.IOException, java.lang.SecurityException;
+  }
+
+  @java.lang.FunctionalInterface public interface Filter {
+    method public boolean isLoggable(java.util.logging.LogRecord);
+  }
+
+  public abstract class Formatter {
+    ctor protected Formatter();
+    method public abstract String format(java.util.logging.LogRecord);
+    method public String formatMessage(java.util.logging.LogRecord);
+    method public String getHead(java.util.logging.Handler);
+    method public String getTail(java.util.logging.Handler);
+  }
+
+  public abstract class Handler {
+    ctor protected Handler();
+    method public abstract void close() throws java.lang.SecurityException;
+    method public abstract void flush();
+    method public String getEncoding();
+    method public java.util.logging.ErrorManager getErrorManager();
+    method public java.util.logging.Filter getFilter();
+    method public java.util.logging.Formatter getFormatter();
+    method public java.util.logging.Level getLevel();
+    method public boolean isLoggable(java.util.logging.LogRecord);
+    method public abstract void publish(java.util.logging.LogRecord);
+    method protected void reportError(String, Exception, int);
+    method public void setEncoding(String) throws java.lang.SecurityException, java.io.UnsupportedEncodingException;
+    method public void setErrorManager(java.util.logging.ErrorManager);
+    method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setFormatter(java.util.logging.Formatter) throws java.lang.SecurityException;
+    method public void setLevel(java.util.logging.Level) throws java.lang.SecurityException;
+  }
+
+  public class Level implements java.io.Serializable {
+    ctor protected Level(@NonNull String, int);
+    ctor protected Level(@NonNull String, int, @Nullable String);
+    method @NonNull public String getLocalizedName();
+    method @NonNull public String getName();
+    method @Nullable public String getResourceBundleName();
+    method public final int intValue();
+    method @NonNull public static java.util.logging.Level parse(@NonNull String) throws java.lang.IllegalArgumentException;
+    method @NonNull public final String toString();
+    field @NonNull public static final java.util.logging.Level ALL;
+    field @NonNull public static final java.util.logging.Level CONFIG;
+    field @NonNull public static final java.util.logging.Level FINE;
+    field @NonNull public static final java.util.logging.Level FINER;
+    field @NonNull public static final java.util.logging.Level FINEST;
+    field @NonNull public static final java.util.logging.Level INFO;
+    field @NonNull public static final java.util.logging.Level OFF;
+    field @NonNull public static final java.util.logging.Level SEVERE;
+    field @NonNull public static final java.util.logging.Level WARNING;
+  }
+
+  public class LogManager {
+    ctor protected LogManager();
+    method public boolean addLogger(java.util.logging.Logger);
+    method @Deprecated public void addPropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void checkAccess() throws java.lang.SecurityException;
+    method public static java.util.logging.LogManager getLogManager();
+    method public java.util.logging.Logger getLogger(String);
+    method public java.util.Enumeration<java.lang.String> getLoggerNames();
+    method public static java.util.logging.LoggingMXBean getLoggingMXBean();
+    method public String getProperty(String);
+    method public void readConfiguration() throws java.io.IOException, java.lang.SecurityException;
+    method public void readConfiguration(java.io.InputStream) throws java.io.IOException, java.lang.SecurityException;
+    method @Deprecated public void removePropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException;
+    method public void reset() throws java.lang.SecurityException;
+    field public static final String LOGGING_MXBEAN_NAME = "java.util.logging:type=Logging";
+  }
+
+  public class LogRecord implements java.io.Serializable {
+    ctor public LogRecord(java.util.logging.Level, String);
+    method public java.util.logging.Level getLevel();
+    method public String getLoggerName();
+    method public String getMessage();
+    method public long getMillis();
+    method public Object[] getParameters();
+    method public java.util.ResourceBundle getResourceBundle();
+    method public String getResourceBundleName();
+    method public long getSequenceNumber();
+    method public String getSourceClassName();
+    method public String getSourceMethodName();
+    method public int getThreadID();
+    method public Throwable getThrown();
+    method public void setLevel(java.util.logging.Level);
+    method public void setLoggerName(String);
+    method public void setMessage(String);
+    method public void setMillis(long);
+    method public void setParameters(Object[]);
+    method public void setResourceBundle(java.util.ResourceBundle);
+    method public void setResourceBundleName(String);
+    method public void setSequenceNumber(long);
+    method public void setSourceClassName(String);
+    method public void setSourceMethodName(String);
+    method public void setThreadID(int);
+    method public void setThrown(Throwable);
+  }
+
+  public class Logger {
+    ctor protected Logger(@Nullable String, @Nullable String);
+    method public void addHandler(@NonNull java.util.logging.Handler) throws java.lang.SecurityException;
+    method public void config(@Nullable String);
+    method public void config(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void entering(@Nullable String, @Nullable String);
+    method public void entering(@Nullable String, @Nullable String, @Nullable Object);
+    method public void entering(@Nullable String, @Nullable String, @Nullable Object[]);
+    method public void exiting(@Nullable String, @Nullable String);
+    method public void exiting(@Nullable String, @Nullable String, @Nullable Object);
+    method public void fine(@Nullable String);
+    method public void fine(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void finer(@Nullable String);
+    method public void finer(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void finest(@Nullable String);
+    method public void finest(@NonNull java.util.function.Supplier<java.lang.String>);
+    method @NonNull public static java.util.logging.Logger getAnonymousLogger();
+    method @NonNull public static java.util.logging.Logger getAnonymousLogger(@Nullable String);
+    method @Nullable public java.util.logging.Filter getFilter();
+    method @NonNull public static final java.util.logging.Logger getGlobal();
+    method @NonNull public java.util.logging.Handler[] getHandlers();
+    method @Nullable public java.util.logging.Level getLevel();
+    method @NonNull public static java.util.logging.Logger getLogger(@NonNull String);
+    method @NonNull public static java.util.logging.Logger getLogger(@NonNull String, @Nullable String);
+    method @Nullable public String getName();
+    method @Nullable public java.util.logging.Logger getParent();
+    method @Nullable public java.util.ResourceBundle getResourceBundle();
+    method @Nullable public String getResourceBundleName();
+    method public boolean getUseParentHandlers();
+    method public void info(@Nullable String);
+    method public void info(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public boolean isLoggable(@NonNull java.util.logging.Level);
+    method public void log(@NonNull java.util.logging.LogRecord);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String);
+    method public void log(@NonNull java.util.logging.Level, @NonNull java.util.function.Supplier<java.lang.String>);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String, @Nullable Object);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String, @Nullable Object[]);
+    method public void log(@NonNull java.util.logging.Level, @Nullable String, @Nullable Throwable);
+    method public void log(@NonNull java.util.logging.Level, @Nullable Throwable, @NonNull java.util.function.Supplier<java.lang.String>);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @NonNull java.util.function.Supplier<java.lang.String>);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable Object);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable Object[]);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable Throwable);
+    method public void logp(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable Throwable, @NonNull java.util.function.Supplier<java.lang.String>);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String, @Nullable Object);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String, @Nullable Object[]);
+    method public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable java.util.ResourceBundle, @Nullable String, @Nullable java.lang.Object...);
+    method @Deprecated public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable String, @Nullable String, @Nullable Throwable);
+    method public void logrb(@NonNull java.util.logging.Level, @Nullable String, @Nullable String, @Nullable java.util.ResourceBundle, @Nullable String, @Nullable Throwable);
+    method public void removeHandler(@Nullable java.util.logging.Handler) throws java.lang.SecurityException;
+    method public void setFilter(@Nullable java.util.logging.Filter) throws java.lang.SecurityException;
+    method public void setLevel(@Nullable java.util.logging.Level) throws java.lang.SecurityException;
+    method public void setParent(@NonNull java.util.logging.Logger);
+    method public void setResourceBundle(@NonNull java.util.ResourceBundle);
+    method public void setUseParentHandlers(boolean);
+    method public void severe(@Nullable String);
+    method public void severe(@NonNull java.util.function.Supplier<java.lang.String>);
+    method public void throwing(@Nullable String, @Nullable String, @Nullable Throwable);
+    method public void warning(@Nullable String);
+    method public void warning(@NonNull java.util.function.Supplier<java.lang.String>);
+    field @NonNull public static final String GLOBAL_LOGGER_NAME = "global";
+    field @Deprecated @NonNull public static final java.util.logging.Logger global;
+  }
+
+  public interface LoggingMXBean {
+    method public String getLoggerLevel(String);
+    method public java.util.List<java.lang.String> getLoggerNames();
+    method public String getParentLoggerName(String);
+    method public void setLoggerLevel(String, String);
+  }
+
+  public final class LoggingPermission extends java.security.BasicPermission {
+    ctor public LoggingPermission(String, String) throws java.lang.IllegalArgumentException;
+  }
+
+  public class MemoryHandler extends java.util.logging.Handler {
+    ctor public MemoryHandler();
+    ctor public MemoryHandler(java.util.logging.Handler, int, java.util.logging.Level);
+    method public void close() throws java.lang.SecurityException;
+    method public void flush();
+    method public java.util.logging.Level getPushLevel();
+    method public void publish(java.util.logging.LogRecord);
+    method public void push();
+    method public void setPushLevel(java.util.logging.Level) throws java.lang.SecurityException;
+  }
+
+  public class SimpleFormatter extends java.util.logging.Formatter {
+    ctor public SimpleFormatter();
+    method public String format(java.util.logging.LogRecord);
+  }
+
+  public class SocketHandler extends java.util.logging.StreamHandler {
+    ctor public SocketHandler() throws java.io.IOException;
+    ctor public SocketHandler(String, int) throws java.io.IOException;
+  }
+
+  public class StreamHandler extends java.util.logging.Handler {
+    ctor public StreamHandler();
+    ctor public StreamHandler(java.io.OutputStream, java.util.logging.Formatter);
+    method public void close() throws java.lang.SecurityException;
+    method public void flush();
+    method public void publish(java.util.logging.LogRecord);
+    method protected void setOutputStream(java.io.OutputStream) throws java.lang.SecurityException;
+  }
+
+  public class XMLFormatter extends java.util.logging.Formatter {
+    ctor public XMLFormatter();
+    method public String format(java.util.logging.LogRecord);
+  }
+
+}
+
+package java.util.prefs {
+
+  public abstract class AbstractPreferences extends java.util.prefs.Preferences {
+    ctor protected AbstractPreferences(java.util.prefs.AbstractPreferences, String);
+    method public String absolutePath();
+    method public void addNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method public void addPreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method protected final java.util.prefs.AbstractPreferences[] cachedChildren();
+    method protected abstract java.util.prefs.AbstractPreferences childSpi(String);
+    method public String[] childrenNames() throws java.util.prefs.BackingStoreException;
+    method protected abstract String[] childrenNamesSpi() throws java.util.prefs.BackingStoreException;
+    method public void clear() throws java.util.prefs.BackingStoreException;
+    method public void exportNode(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public void exportSubtree(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public void flush() throws java.util.prefs.BackingStoreException;
+    method protected abstract void flushSpi() throws java.util.prefs.BackingStoreException;
+    method public String get(String, String);
+    method public boolean getBoolean(String, boolean);
+    method public byte[] getByteArray(String, byte[]);
+    method protected java.util.prefs.AbstractPreferences getChild(String) throws java.util.prefs.BackingStoreException;
+    method public double getDouble(String, double);
+    method public float getFloat(String, float);
+    method public int getInt(String, int);
+    method public long getLong(String, long);
+    method protected abstract String getSpi(String);
+    method protected boolean isRemoved();
+    method public boolean isUserNode();
+    method public String[] keys() throws java.util.prefs.BackingStoreException;
+    method protected abstract String[] keysSpi() throws java.util.prefs.BackingStoreException;
+    method public String name();
+    method public java.util.prefs.Preferences node(String);
+    method public boolean nodeExists(String) throws java.util.prefs.BackingStoreException;
+    method public java.util.prefs.Preferences parent();
+    method public void put(String, String);
+    method public void putBoolean(String, boolean);
+    method public void putByteArray(String, byte[]);
+    method public void putDouble(String, double);
+    method public void putFloat(String, float);
+    method public void putInt(String, int);
+    method public void putLong(String, long);
+    method protected abstract void putSpi(String, String);
+    method public void remove(String);
+    method public void removeNode() throws java.util.prefs.BackingStoreException;
+    method public void removeNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method protected abstract void removeNodeSpi() throws java.util.prefs.BackingStoreException;
+    method public void removePreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method protected abstract void removeSpi(String);
+    method public void sync() throws java.util.prefs.BackingStoreException;
+    method protected abstract void syncSpi() throws java.util.prefs.BackingStoreException;
+    field protected final Object lock;
+    field protected boolean newNode;
+  }
+
+  public class BackingStoreException extends java.lang.Exception {
+    ctor public BackingStoreException(String);
+    ctor public BackingStoreException(Throwable);
+  }
+
+  public class InvalidPreferencesFormatException extends java.lang.Exception {
+    ctor public InvalidPreferencesFormatException(Throwable);
+    ctor public InvalidPreferencesFormatException(String);
+    ctor public InvalidPreferencesFormatException(String, Throwable);
+  }
+
+  public class NodeChangeEvent extends java.util.EventObject {
+    ctor public NodeChangeEvent(java.util.prefs.Preferences, java.util.prefs.Preferences);
+    method public java.util.prefs.Preferences getChild();
+    method public java.util.prefs.Preferences getParent();
+  }
+
+  public interface NodeChangeListener extends java.util.EventListener {
+    method public void childAdded(java.util.prefs.NodeChangeEvent);
+    method public void childRemoved(java.util.prefs.NodeChangeEvent);
+  }
+
+  public class PreferenceChangeEvent extends java.util.EventObject {
+    ctor public PreferenceChangeEvent(java.util.prefs.Preferences, String, String);
+    method public String getKey();
+    method public String getNewValue();
+    method public java.util.prefs.Preferences getNode();
+  }
+
+  @java.lang.FunctionalInterface public interface PreferenceChangeListener extends java.util.EventListener {
+    method public void preferenceChange(java.util.prefs.PreferenceChangeEvent);
+  }
+
+  public abstract class Preferences {
+    ctor protected Preferences();
+    method public abstract String absolutePath();
+    method public abstract void addNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method public abstract void addPreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method public abstract String[] childrenNames() throws java.util.prefs.BackingStoreException;
+    method public abstract void clear() throws java.util.prefs.BackingStoreException;
+    method public abstract void exportNode(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public abstract void exportSubtree(java.io.OutputStream) throws java.util.prefs.BackingStoreException, java.io.IOException;
+    method public abstract void flush() throws java.util.prefs.BackingStoreException;
+    method public abstract String get(String, String);
+    method public abstract boolean getBoolean(String, boolean);
+    method public abstract byte[] getByteArray(String, byte[]);
+    method public abstract double getDouble(String, double);
+    method public abstract float getFloat(String, float);
+    method public abstract int getInt(String, int);
+    method public abstract long getLong(String, long);
+    method public static void importPreferences(java.io.InputStream) throws java.io.IOException, java.util.prefs.InvalidPreferencesFormatException;
+    method public abstract boolean isUserNode();
+    method public abstract String[] keys() throws java.util.prefs.BackingStoreException;
+    method public abstract String name();
+    method public abstract java.util.prefs.Preferences node(String);
+    method public abstract boolean nodeExists(String) throws java.util.prefs.BackingStoreException;
+    method public abstract java.util.prefs.Preferences parent();
+    method public abstract void put(String, String);
+    method public abstract void putBoolean(String, boolean);
+    method public abstract void putByteArray(String, byte[]);
+    method public abstract void putDouble(String, double);
+    method public abstract void putFloat(String, float);
+    method public abstract void putInt(String, int);
+    method public abstract void putLong(String, long);
+    method public abstract void remove(String);
+    method public abstract void removeNode() throws java.util.prefs.BackingStoreException;
+    method public abstract void removeNodeChangeListener(java.util.prefs.NodeChangeListener);
+    method public abstract void removePreferenceChangeListener(java.util.prefs.PreferenceChangeListener);
+    method public abstract void sync() throws java.util.prefs.BackingStoreException;
+    method public static java.util.prefs.Preferences systemNodeForPackage(Class<?>);
+    method public static java.util.prefs.Preferences systemRoot();
+    method public abstract String toString();
+    method public static java.util.prefs.Preferences userNodeForPackage(Class<?>);
+    method public static java.util.prefs.Preferences userRoot();
+    field public static final int MAX_KEY_LENGTH = 80; // 0x50
+    field public static final int MAX_NAME_LENGTH = 80; // 0x50
+    field public static final int MAX_VALUE_LENGTH = 8192; // 0x2000
+  }
+
+  public interface PreferencesFactory {
+    method public java.util.prefs.Preferences systemRoot();
+    method public java.util.prefs.Preferences userRoot();
+  }
+
+}
+
+package java.util.regex {
+
+  public interface MatchResult {
+    method public int end();
+    method public int end(int);
+    method public String group();
+    method public String group(int);
+    method public int groupCount();
+    method public int start();
+    method public int start(int);
+  }
+
+  public final class Matcher implements java.util.regex.MatchResult {
+    method @NonNull public java.util.regex.Matcher appendReplacement(@NonNull StringBuffer, @NonNull String);
+    method @NonNull public StringBuffer appendTail(@NonNull StringBuffer);
+    method public int end();
+    method public int end(int);
+    method public int end(@NonNull String);
+    method public boolean find();
+    method public boolean find(int);
+    method @NonNull public String group();
+    method @Nullable public String group(int);
+    method @Nullable public String group(@NonNull String);
+    method public int groupCount();
+    method public boolean hasAnchoringBounds();
+    method public boolean hasTransparentBounds();
+    method public boolean hitEnd();
+    method public boolean lookingAt();
+    method public boolean matches();
+    method @NonNull public java.util.regex.Pattern pattern();
+    method @NonNull public static String quoteReplacement(@NonNull String);
+    method @NonNull public java.util.regex.Matcher region(int, int);
+    method public int regionEnd();
+    method public int regionStart();
+    method @NonNull public String replaceAll(@NonNull String);
+    method @NonNull public String replaceFirst(@NonNull String);
+    method public boolean requireEnd();
+    method @NonNull public java.util.regex.Matcher reset();
+    method @NonNull public java.util.regex.Matcher reset(@NonNull CharSequence);
+    method public int start();
+    method public int start(int);
+    method public int start(@NonNull String);
+    method @NonNull public java.util.regex.MatchResult toMatchResult();
+    method @NonNull public java.util.regex.Matcher useAnchoringBounds(boolean);
+    method @NonNull public java.util.regex.Matcher usePattern(@NonNull java.util.regex.Pattern);
+    method @NonNull public java.util.regex.Matcher useTransparentBounds(boolean);
+  }
+
+  public final class Pattern implements java.io.Serializable {
+    method @NonNull public java.util.function.Predicate<java.lang.String> asPredicate();
+    method @NonNull public static java.util.regex.Pattern compile(@NonNull String);
+    method @NonNull public static java.util.regex.Pattern compile(@NonNull String, int);
+    method public int flags();
+    method @NonNull public java.util.regex.Matcher matcher(@NonNull CharSequence);
+    method public static boolean matches(@NonNull String, @NonNull CharSequence);
+    method @NonNull public String pattern();
+    method @NonNull public static String quote(@NonNull String);
+    method @NonNull public String[] split(@NonNull CharSequence, int);
+    method @NonNull public String[] split(@NonNull CharSequence);
+    method @NonNull public java.util.stream.Stream<java.lang.String> splitAsStream(@NonNull CharSequence);
+    field public static final int CANON_EQ = 128; // 0x80
+    field public static final int CASE_INSENSITIVE = 2; // 0x2
+    field public static final int COMMENTS = 4; // 0x4
+    field public static final int DOTALL = 32; // 0x20
+    field public static final int LITERAL = 16; // 0x10
+    field public static final int MULTILINE = 8; // 0x8
+    field public static final int UNICODE_CASE = 64; // 0x40
+    field public static final int UNICODE_CHARACTER_CLASS = 256; // 0x100
+    field public static final int UNIX_LINES = 1; // 0x1
+  }
+
+  public class PatternSyntaxException extends java.lang.IllegalArgumentException {
+    ctor public PatternSyntaxException(String, String, int);
+    method public String getDescription();
+    method public int getIndex();
+    method public String getPattern();
+  }
+
+}
+
+package java.util.stream {
+
+  public interface BaseStream<T, S extends java.util.stream.BaseStream<T, S>> extends java.lang.AutoCloseable {
+    method public void close();
+    method public boolean isParallel();
+    method public java.util.Iterator<T> iterator();
+    method public S onClose(Runnable);
+    method public S parallel();
+    method public S sequential();
+    method public java.util.Spliterator<T> spliterator();
+    method public S unordered();
+  }
+
+  public interface Collector<T, A, R> {
+    method public java.util.function.BiConsumer<A,T> accumulator();
+    method public java.util.Set<java.util.stream.Collector.Characteristics> characteristics();
+    method public java.util.function.BinaryOperator<A> combiner();
+    method public java.util.function.Function<A,R> finisher();
+    method public static <T, R> java.util.stream.Collector<T,R,R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R,T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, A, R> java.util.stream.Collector<T,A,R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A,T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A,R>, java.util.stream.Collector.Characteristics...);
+    method public java.util.function.Supplier<A> supplier();
+  }
+
+  public enum Collector.Characteristics {
+    enum_constant public static final java.util.stream.Collector.Characteristics CONCURRENT;
+    enum_constant public static final java.util.stream.Collector.Characteristics IDENTITY_FINISH;
+    enum_constant public static final java.util.stream.Collector.Characteristics UNORDERED;
+  }
+
+  public final class Collectors {
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, A, R, RR> java.util.stream.Collector<T,A,RR> collectingAndThen(java.util.stream.Collector<T,A,R>, java.util.function.Function<R,RR>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Long> counting();
+    method public static <T, K> java.util.stream.Collector<T,?,java.util.Map<K,java.util.List<T>>> groupingBy(java.util.function.Function<? super T,? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T,?,java.util.Map<K,D>> groupingBy(java.util.function.Function<? super T,? extends K>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T, K, D, A, M extends java.util.Map<K, D>> java.util.stream.Collector<T,?,M> groupingBy(java.util.function.Function<? super T,? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T, K> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T,? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,D>> groupingByConcurrent(java.util.function.Function<? super T,? extends K>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T, K, A, D, M extends java.util.concurrent.ConcurrentMap<K, D>> java.util.stream.Collector<T,?,M> groupingByConcurrent(java.util.function.Function<? super T,? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T,A,D>);
+    method public static java.util.stream.Collector<java.lang.CharSequence,?,java.lang.String> joining();
+    method public static java.util.stream.Collector<java.lang.CharSequence,?,java.lang.String> joining(CharSequence);
+    method public static java.util.stream.Collector<java.lang.CharSequence,?,java.lang.String> joining(CharSequence, CharSequence, CharSequence);
+    method public static <T, U, A, R> java.util.stream.Collector<T,?,R> mapping(java.util.function.Function<? super T,? extends U>, java.util.stream.Collector<? super U,A,R>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Map<java.lang.Boolean,java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
+    method public static <T, D, A> java.util.stream.Collector<T,?,java.util.Map<java.lang.Boolean,D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T,A,D>);
+    method public static <T> java.util.stream.Collector<T,?,T> reducing(T, java.util.function.BinaryOperator<T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
+    method public static <T, U> java.util.stream.Collector<T,?,U> reducing(U, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T,?,java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, C extends java.util.Collection<T>> java.util.stream.Collector<T,?,C> toCollection(java.util.function.Supplier<C>);
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,U>> toConcurrentMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.concurrent.ConcurrentMap<K,U>> toConcurrentMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.concurrent.ConcurrentMap<K, U>> java.util.stream.Collector<T,?,M> toConcurrentMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.List<T>> toList();
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.Map<K,U>> toMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T,?,java.util.Map<K,U>> toMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.Map<K, U>> java.util.stream.Collector<T,?,M> toMap(java.util.function.Function<? super T,? extends K>, java.util.function.Function<? super T,? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T,?,java.util.Set<T>> toSet();
+  }
+
+  public interface DoubleStream extends java.util.stream.BaseStream<java.lang.Double,java.util.stream.DoubleStream> {
+    method public boolean allMatch(java.util.function.DoublePredicate);
+    method public boolean anyMatch(java.util.function.DoublePredicate);
+    method public java.util.OptionalDouble average();
+    method public java.util.stream.Stream<java.lang.Double> boxed();
+    method public static java.util.stream.DoubleStream.Builder builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R,R>);
+    method public static java.util.stream.DoubleStream concat(java.util.stream.DoubleStream, java.util.stream.DoubleStream);
+    method public long count();
+    method public java.util.stream.DoubleStream distinct();
+    method public static java.util.stream.DoubleStream empty();
+    method public java.util.stream.DoubleStream filter(java.util.function.DoublePredicate);
+    method public java.util.OptionalDouble findAny();
+    method public java.util.OptionalDouble findFirst();
+    method public java.util.stream.DoubleStream flatMap(java.util.function.DoubleFunction<? extends java.util.stream.DoubleStream>);
+    method public void forEach(java.util.function.DoubleConsumer);
+    method public void forEachOrdered(java.util.function.DoubleConsumer);
+    method public static java.util.stream.DoubleStream generate(java.util.function.DoubleSupplier);
+    method public static java.util.stream.DoubleStream iterate(double, java.util.function.DoubleUnaryOperator);
+    method public java.util.PrimitiveIterator.OfDouble iterator();
+    method public java.util.stream.DoubleStream limit(long);
+    method public java.util.stream.DoubleStream map(java.util.function.DoubleUnaryOperator);
+    method public java.util.stream.IntStream mapToInt(java.util.function.DoubleToIntFunction);
+    method public java.util.stream.LongStream mapToLong(java.util.function.DoubleToLongFunction);
+    method public <U> java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
+    method public java.util.OptionalDouble max();
+    method public java.util.OptionalDouble min();
+    method public boolean noneMatch(java.util.function.DoublePredicate);
+    method public static java.util.stream.DoubleStream of(double);
+    method public static java.util.stream.DoubleStream of(double...);
+    method public java.util.stream.DoubleStream parallel();
+    method public java.util.stream.DoubleStream peek(java.util.function.DoubleConsumer);
+    method public double reduce(double, java.util.function.DoubleBinaryOperator);
+    method public java.util.OptionalDouble reduce(java.util.function.DoubleBinaryOperator);
+    method public java.util.stream.DoubleStream sequential();
+    method public java.util.stream.DoubleStream skip(long);
+    method public java.util.stream.DoubleStream sorted();
+    method public java.util.Spliterator.OfDouble spliterator();
+    method public double sum();
+    method public java.util.DoubleSummaryStatistics summaryStatistics();
+    method public double[] toArray();
+  }
+
+  public static interface DoubleStream.Builder extends java.util.function.DoubleConsumer {
+    method public default java.util.stream.DoubleStream.Builder add(double);
+    method public java.util.stream.DoubleStream build();
+  }
+
+  public interface IntStream extends java.util.stream.BaseStream<java.lang.Integer,java.util.stream.IntStream> {
+    method public boolean allMatch(java.util.function.IntPredicate);
+    method public boolean anyMatch(java.util.function.IntPredicate);
+    method public java.util.stream.DoubleStream asDoubleStream();
+    method public java.util.stream.LongStream asLongStream();
+    method public java.util.OptionalDouble average();
+    method public java.util.stream.Stream<java.lang.Integer> boxed();
+    method public static java.util.stream.IntStream.Builder builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R,R>);
+    method public static java.util.stream.IntStream concat(java.util.stream.IntStream, java.util.stream.IntStream);
+    method public long count();
+    method public java.util.stream.IntStream distinct();
+    method public static java.util.stream.IntStream empty();
+    method public java.util.stream.IntStream filter(java.util.function.IntPredicate);
+    method public java.util.OptionalInt findAny();
+    method public java.util.OptionalInt findFirst();
+    method public java.util.stream.IntStream flatMap(java.util.function.IntFunction<? extends java.util.stream.IntStream>);
+    method public void forEach(java.util.function.IntConsumer);
+    method public void forEachOrdered(java.util.function.IntConsumer);
+    method public static java.util.stream.IntStream generate(java.util.function.IntSupplier);
+    method public static java.util.stream.IntStream iterate(int, java.util.function.IntUnaryOperator);
+    method public java.util.PrimitiveIterator.OfInt iterator();
+    method public java.util.stream.IntStream limit(long);
+    method public java.util.stream.IntStream map(java.util.function.IntUnaryOperator);
+    method public java.util.stream.DoubleStream mapToDouble(java.util.function.IntToDoubleFunction);
+    method public java.util.stream.LongStream mapToLong(java.util.function.IntToLongFunction);
+    method public <U> java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
+    method public java.util.OptionalInt max();
+    method public java.util.OptionalInt min();
+    method public boolean noneMatch(java.util.function.IntPredicate);
+    method public static java.util.stream.IntStream of(int);
+    method public static java.util.stream.IntStream of(int...);
+    method public java.util.stream.IntStream parallel();
+    method public java.util.stream.IntStream peek(java.util.function.IntConsumer);
+    method public static java.util.stream.IntStream range(int, int);
+    method public static java.util.stream.IntStream rangeClosed(int, int);
+    method public int reduce(int, java.util.function.IntBinaryOperator);
+    method public java.util.OptionalInt reduce(java.util.function.IntBinaryOperator);
+    method public java.util.stream.IntStream sequential();
+    method public java.util.stream.IntStream skip(long);
+    method public java.util.stream.IntStream sorted();
+    method public java.util.Spliterator.OfInt spliterator();
+    method public int sum();
+    method public java.util.IntSummaryStatistics summaryStatistics();
+    method public int[] toArray();
+  }
+
+  public static interface IntStream.Builder extends java.util.function.IntConsumer {
+    method public default java.util.stream.IntStream.Builder add(int);
+    method public java.util.stream.IntStream build();
+  }
+
+  public interface LongStream extends java.util.stream.BaseStream<java.lang.Long,java.util.stream.LongStream> {
+    method public boolean allMatch(java.util.function.LongPredicate);
+    method public boolean anyMatch(java.util.function.LongPredicate);
+    method public java.util.stream.DoubleStream asDoubleStream();
+    method public java.util.OptionalDouble average();
+    method public java.util.stream.Stream<java.lang.Long> boxed();
+    method public static java.util.stream.LongStream.Builder builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R,R>);
+    method public static java.util.stream.LongStream concat(java.util.stream.LongStream, java.util.stream.LongStream);
+    method public long count();
+    method public java.util.stream.LongStream distinct();
+    method public static java.util.stream.LongStream empty();
+    method public java.util.stream.LongStream filter(java.util.function.LongPredicate);
+    method public java.util.OptionalLong findAny();
+    method public java.util.OptionalLong findFirst();
+    method public java.util.stream.LongStream flatMap(java.util.function.LongFunction<? extends java.util.stream.LongStream>);
+    method public void forEach(java.util.function.LongConsumer);
+    method public void forEachOrdered(java.util.function.LongConsumer);
+    method public static java.util.stream.LongStream generate(java.util.function.LongSupplier);
+    method public static java.util.stream.LongStream iterate(long, java.util.function.LongUnaryOperator);
+    method public java.util.PrimitiveIterator.OfLong iterator();
+    method public java.util.stream.LongStream limit(long);
+    method public java.util.stream.LongStream map(java.util.function.LongUnaryOperator);
+    method public java.util.stream.DoubleStream mapToDouble(java.util.function.LongToDoubleFunction);
+    method public java.util.stream.IntStream mapToInt(java.util.function.LongToIntFunction);
+    method public <U> java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
+    method public java.util.OptionalLong max();
+    method public java.util.OptionalLong min();
+    method public boolean noneMatch(java.util.function.LongPredicate);
+    method public static java.util.stream.LongStream of(long);
+    method public static java.util.stream.LongStream of(long...);
+    method public java.util.stream.LongStream parallel();
+    method public java.util.stream.LongStream peek(java.util.function.LongConsumer);
+    method public static java.util.stream.LongStream range(long, long);
+    method public static java.util.stream.LongStream rangeClosed(long, long);
+    method public long reduce(long, java.util.function.LongBinaryOperator);
+    method public java.util.OptionalLong reduce(java.util.function.LongBinaryOperator);
+    method public java.util.stream.LongStream sequential();
+    method public java.util.stream.LongStream skip(long);
+    method public java.util.stream.LongStream sorted();
+    method public java.util.Spliterator.OfLong spliterator();
+    method public long sum();
+    method public java.util.LongSummaryStatistics summaryStatistics();
+    method public long[] toArray();
+  }
+
+  public static interface LongStream.Builder extends java.util.function.LongConsumer {
+    method public default java.util.stream.LongStream.Builder add(long);
+    method public java.util.stream.LongStream build();
+  }
+
+  public interface Stream<T> extends java.util.stream.BaseStream<T,java.util.stream.Stream<T>> {
+    method public boolean allMatch(java.util.function.Predicate<? super T>);
+    method public boolean anyMatch(java.util.function.Predicate<? super T>);
+    method public static <T> java.util.stream.Stream.Builder<T> builder();
+    method public <R> R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R,? super T>, java.util.function.BiConsumer<R,R>);
+    method public <R, A> R collect(java.util.stream.Collector<? super T,A,R>);
+    method public static <T> java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
+    method public long count();
+    method public java.util.stream.Stream<T> distinct();
+    method public static <T> java.util.stream.Stream<T> empty();
+    method public java.util.stream.Stream<T> filter(java.util.function.Predicate<? super T>);
+    method public java.util.Optional<T> findAny();
+    method public java.util.Optional<T> findFirst();
+    method public <R> java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T,? extends java.util.stream.Stream<? extends R>>);
+    method public java.util.stream.DoubleStream flatMapToDouble(java.util.function.Function<? super T,? extends java.util.stream.DoubleStream>);
+    method public java.util.stream.IntStream flatMapToInt(java.util.function.Function<? super T,? extends java.util.stream.IntStream>);
+    method public java.util.stream.LongStream flatMapToLong(java.util.function.Function<? super T,? extends java.util.stream.LongStream>);
+    method public void forEach(java.util.function.Consumer<? super T>);
+    method public void forEachOrdered(java.util.function.Consumer<? super T>);
+    method public static <T> java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
+    method public static <T> java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
+    method public java.util.stream.Stream<T> limit(long);
+    method public <R> java.util.stream.Stream<R> map(java.util.function.Function<? super T,? extends R>);
+    method public java.util.stream.DoubleStream mapToDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public java.util.stream.IntStream mapToInt(java.util.function.ToIntFunction<? super T>);
+    method public java.util.stream.LongStream mapToLong(java.util.function.ToLongFunction<? super T>);
+    method public java.util.Optional<T> max(java.util.Comparator<? super T>);
+    method public java.util.Optional<T> min(java.util.Comparator<? super T>);
+    method public boolean noneMatch(java.util.function.Predicate<? super T>);
+    method public static <T> java.util.stream.Stream<T> of(T);
+    method @java.lang.SafeVarargs public static <T> java.util.stream.Stream<T> of(T...);
+    method public java.util.stream.Stream<T> peek(java.util.function.Consumer<? super T>);
+    method public T reduce(T, java.util.function.BinaryOperator<T>);
+    method public java.util.Optional<T> reduce(java.util.function.BinaryOperator<T>);
+    method public <U> U reduce(U, java.util.function.BiFunction<U,? super T,U>, java.util.function.BinaryOperator<U>);
+    method public java.util.stream.Stream<T> skip(long);
+    method public java.util.stream.Stream<T> sorted();
+    method public java.util.stream.Stream<T> sorted(java.util.Comparator<? super T>);
+    method public Object[] toArray();
+    method public <A> A[] toArray(java.util.function.IntFunction<A[]>);
+  }
+
+  public static interface Stream.Builder<T> extends java.util.function.Consumer<T> {
+    method public default java.util.stream.Stream.Builder<T> add(T);
+    method public java.util.stream.Stream<T> build();
+  }
+
+  public final class StreamSupport {
+    method public static java.util.stream.DoubleStream doubleStream(java.util.Spliterator.OfDouble, boolean);
+    method public static java.util.stream.DoubleStream doubleStream(java.util.function.Supplier<? extends java.util.Spliterator.OfDouble>, int, boolean);
+    method public static java.util.stream.IntStream intStream(java.util.Spliterator.OfInt, boolean);
+    method public static java.util.stream.IntStream intStream(java.util.function.Supplier<? extends java.util.Spliterator.OfInt>, int, boolean);
+    method public static java.util.stream.LongStream longStream(java.util.Spliterator.OfLong, boolean);
+    method public static java.util.stream.LongStream longStream(java.util.function.Supplier<? extends java.util.Spliterator.OfLong>, int, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
+  }
+
+}
+
+package java.util.zip {
+
+  public class Adler32 implements java.util.zip.Checksum {
+    ctor public Adler32();
+    method public long getValue();
+    method public void reset();
+    method public void update(int);
+    method public void update(byte[], int, int);
+    method public void update(byte[]);
+    method public void update(java.nio.ByteBuffer);
+  }
+
+  public class CRC32 implements java.util.zip.Checksum {
+    ctor public CRC32();
+    method public long getValue();
+    method public void reset();
+    method public void update(int);
+    method public void update(byte[], int, int);
+    method public void update(byte[]);
+    method public void update(java.nio.ByteBuffer);
+  }
+
+  public class CheckedInputStream extends java.io.FilterInputStream {
+    ctor public CheckedInputStream(java.io.InputStream, java.util.zip.Checksum);
+    method public java.util.zip.Checksum getChecksum();
+  }
+
+  public class CheckedOutputStream extends java.io.FilterOutputStream {
+    ctor public CheckedOutputStream(java.io.OutputStream, java.util.zip.Checksum);
+    method public java.util.zip.Checksum getChecksum();
+  }
+
+  public interface Checksum {
+    method public long getValue();
+    method public void reset();
+    method public void update(int);
+    method public void update(byte[], int, int);
+  }
+
+  public class DataFormatException extends java.lang.Exception {
+    ctor public DataFormatException();
+    ctor public DataFormatException(String);
+  }
+
+  public class Deflater {
+    ctor public Deflater(int, boolean);
+    ctor public Deflater(int);
+    ctor public Deflater();
+    method public int deflate(byte[], int, int);
+    method public int deflate(byte[]);
+    method public int deflate(byte[], int, int, int);
+    method public void end();
+    method protected void finalize();
+    method public void finish();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
+    method public void setDictionary(byte[]);
+    method public void setInput(byte[], int, int);
+    method public void setInput(byte[]);
+    method public void setLevel(int);
+    method public void setStrategy(int);
+    field public static final int BEST_COMPRESSION = 9; // 0x9
+    field public static final int BEST_SPEED = 1; // 0x1
+    field public static final int DEFAULT_COMPRESSION = -1; // 0xffffffff
+    field public static final int DEFAULT_STRATEGY = 0; // 0x0
+    field public static final int DEFLATED = 8; // 0x8
+    field public static final int FILTERED = 1; // 0x1
+    field public static final int FULL_FLUSH = 3; // 0x3
+    field public static final int HUFFMAN_ONLY = 2; // 0x2
+    field public static final int NO_COMPRESSION = 0; // 0x0
+    field public static final int NO_FLUSH = 0; // 0x0
+    field public static final int SYNC_FLUSH = 2; // 0x2
+  }
+
+  public class DeflaterInputStream extends java.io.FilterInputStream {
+    ctor public DeflaterInputStream(java.io.InputStream);
+    ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater);
+    ctor public DeflaterInputStream(java.io.InputStream, java.util.zip.Deflater, int);
+    field protected final byte[] buf;
+    field protected final java.util.zip.Deflater def;
+  }
+
+  public class DeflaterOutputStream extends java.io.FilterOutputStream {
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater);
+    ctor public DeflaterOutputStream(java.io.OutputStream, boolean);
+    ctor public DeflaterOutputStream(java.io.OutputStream);
+    method protected void deflate() throws java.io.IOException;
+    method public void finish() throws java.io.IOException;
+    field protected byte[] buf;
+    field protected java.util.zip.Deflater def;
+  }
+
+  public class GZIPInputStream extends java.util.zip.InflaterInputStream {
+    ctor public GZIPInputStream(java.io.InputStream, int) throws java.io.IOException;
+    ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException;
+    field public static final int GZIP_MAGIC = 35615; // 0x8b1f
+    field protected java.util.zip.CRC32 crc;
+    field protected boolean eos;
+  }
+
+  public class GZIPOutputStream extends java.util.zip.DeflaterOutputStream {
+    ctor public GZIPOutputStream(java.io.OutputStream, int) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException;
+    ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException;
+    field protected java.util.zip.CRC32 crc;
+  }
+
+  public class Inflater {
+    ctor public Inflater(boolean);
+    ctor public Inflater();
+    method public void end();
+    method protected void finalize();
+    method public boolean finished();
+    method public int getAdler();
+    method public long getBytesRead();
+    method public long getBytesWritten();
+    method public int getRemaining();
+    method public int getTotalIn();
+    method public int getTotalOut();
+    method public int inflate(byte[], int, int) throws java.util.zip.DataFormatException;
+    method public int inflate(byte[]) throws java.util.zip.DataFormatException;
+    method public boolean needsDictionary();
+    method public boolean needsInput();
+    method public void reset();
+    method public void setDictionary(byte[], int, int);
+    method public void setDictionary(byte[]);
+    method public void setInput(byte[], int, int);
+    method public void setInput(byte[]);
+  }
+
+  public class InflaterInputStream extends java.io.FilterInputStream {
+    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater, int);
+    ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater);
+    ctor public InflaterInputStream(java.io.InputStream);
+    method protected void fill() throws java.io.IOException;
+    field protected byte[] buf;
+    field @Deprecated protected boolean closed;
+    field protected java.util.zip.Inflater inf;
+    field protected int len;
+  }
+
+  public class InflaterOutputStream extends java.io.FilterOutputStream {
+    ctor public InflaterOutputStream(java.io.OutputStream);
+    ctor public InflaterOutputStream(java.io.OutputStream, java.util.zip.Inflater);
+    ctor public InflaterOutputStream(java.io.OutputStream, java.util.zip.Inflater, int);
+    method public void finish() throws java.io.IOException;
+    field protected final byte[] buf;
+    field protected final java.util.zip.Inflater inf;
+  }
+
+  public class ZipEntry implements java.lang.Cloneable {
+    ctor public ZipEntry(String);
+    ctor public ZipEntry(java.util.zip.ZipEntry);
+    method public Object clone();
+    method public String getComment();
+    method public long getCompressedSize();
+    method public long getCrc();
+    method public java.nio.file.attribute.FileTime getCreationTime();
+    method public byte[] getExtra();
+    method public java.nio.file.attribute.FileTime getLastAccessTime();
+    method public java.nio.file.attribute.FileTime getLastModifiedTime();
+    method public int getMethod();
+    method public String getName();
+    method public long getSize();
+    method public long getTime();
+    method public boolean isDirectory();
+    method public void setComment(String);
+    method public void setCompressedSize(long);
+    method public void setCrc(long);
+    method public java.util.zip.ZipEntry setCreationTime(java.nio.file.attribute.FileTime);
+    method public void setExtra(byte[]);
+    method public java.util.zip.ZipEntry setLastAccessTime(java.nio.file.attribute.FileTime);
+    method public java.util.zip.ZipEntry setLastModifiedTime(java.nio.file.attribute.FileTime);
+    method public void setMethod(int);
+    method public void setSize(long);
+    method public void setTime(long);
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int DEFLATED = 8; // 0x8
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final int STORED = 0; // 0x0
+  }
+
+  public class ZipError extends java.lang.InternalError {
+    ctor public ZipError(String);
+  }
+
+  public class ZipException extends java.io.IOException {
+    ctor public ZipException();
+    ctor public ZipException(String);
+  }
+
+  public class ZipFile implements java.io.Closeable {
+    ctor public ZipFile(String) throws java.io.IOException;
+    ctor public ZipFile(java.io.File, int) throws java.io.IOException;
+    ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException;
+    ctor public ZipFile(java.io.File, int, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(String, java.nio.charset.Charset) throws java.io.IOException;
+    ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries();
+    method protected void finalize() throws java.io.IOException;
+    method public String getComment();
+    method public java.util.zip.ZipEntry getEntry(String);
+    method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
+    method public String getName();
+    method public int size();
+    method public java.util.stream.Stream<? extends java.util.zip.ZipEntry> stream();
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final int OPEN_DELETE = 4; // 0x4
+    field public static final int OPEN_READ = 1; // 0x1
+  }
+
+  public class ZipInputStream extends java.util.zip.InflaterInputStream {
+    ctor public ZipInputStream(java.io.InputStream);
+    ctor public ZipInputStream(java.io.InputStream, java.nio.charset.Charset);
+    method public void closeEntry() throws java.io.IOException;
+    method protected java.util.zip.ZipEntry createZipEntry(String);
+    method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException;
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+  }
+
+  public class ZipOutputStream extends java.util.zip.DeflaterOutputStream {
+    ctor public ZipOutputStream(java.io.OutputStream);
+    ctor public ZipOutputStream(java.io.OutputStream, java.nio.charset.Charset);
+    method public void closeEntry() throws java.io.IOException;
+    method public void putNextEntry(java.util.zip.ZipEntry) throws java.io.IOException;
+    method public void setComment(String);
+    method public void setLevel(int);
+    method public void setMethod(int);
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int DEFLATED = 8; // 0x8
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
+    field public static final int STORED = 0; // 0x0
+  }
+
+}
+
+package javax.crypto {
+
+  public class AEADBadTagException extends javax.crypto.BadPaddingException {
+    ctor public AEADBadTagException();
+    ctor public AEADBadTagException(String);
+  }
+
+  public class BadPaddingException extends java.security.GeneralSecurityException {
+    ctor public BadPaddingException();
+    ctor public BadPaddingException(String);
+  }
+
+  public class Cipher {
+    ctor protected Cipher(javax.crypto.CipherSpi, java.security.Provider, String);
+    method public final byte[] doFinal() throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method public final int doFinal(byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final byte[] doFinal(byte[]) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method public final byte[] doFinal(byte[], int, int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method public final int doFinal(byte[], int, int, byte[]) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final int doFinal(byte[], int, int, byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final int doFinal(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method public final String getAlgorithm();
+    method public final int getBlockSize();
+    method public final javax.crypto.ExemptionMechanism getExemptionMechanism();
+    method public final byte[] getIV();
+    method public static final javax.crypto.Cipher getInstance(String) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException;
+    method public static final javax.crypto.Cipher getInstance(String, String) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.Cipher getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException, javax.crypto.NoSuchPaddingException;
+    method public static final int getMaxAllowedKeyLength(String) throws java.security.NoSuchAlgorithmException;
+    method public static final java.security.spec.AlgorithmParameterSpec getMaxAllowedParameterSpec(String) throws java.security.NoSuchAlgorithmException;
+    method public final int getOutputSize(int);
+    method public final java.security.AlgorithmParameters getParameters();
+    method public final java.security.Provider getProvider();
+    method public final void init(int, java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.AlgorithmParameters) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(int, java.security.cert.Certificate) throws java.security.InvalidKeyException;
+    method public final void init(int, java.security.cert.Certificate, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final java.security.Key unwrap(byte[], String, int) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public final byte[] update(byte[]);
+    method public final byte[] update(byte[], int, int);
+    method public final int update(byte[], int, int, byte[]) throws javax.crypto.ShortBufferException;
+    method public final int update(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException;
+    method public final int update(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException;
+    method public final void updateAAD(byte[]);
+    method public final void updateAAD(byte[], int, int);
+    method public final void updateAAD(java.nio.ByteBuffer);
+    method public final byte[] wrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException;
+    field public static final int DECRYPT_MODE = 2; // 0x2
+    field public static final int ENCRYPT_MODE = 1; // 0x1
+    field public static final int PRIVATE_KEY = 2; // 0x2
+    field public static final int PUBLIC_KEY = 1; // 0x1
+    field public static final int SECRET_KEY = 3; // 0x3
+    field public static final int UNWRAP_MODE = 4; // 0x4
+    field public static final int WRAP_MODE = 3; // 0x3
+  }
+
+  public class CipherInputStream extends java.io.FilterInputStream {
+    ctor public CipherInputStream(java.io.InputStream, javax.crypto.Cipher);
+    ctor protected CipherInputStream(java.io.InputStream);
+  }
+
+  public class CipherOutputStream extends java.io.FilterOutputStream {
+    ctor public CipherOutputStream(java.io.OutputStream, javax.crypto.Cipher);
+    ctor protected CipherOutputStream(java.io.OutputStream);
+  }
+
+  public abstract class CipherSpi {
+    ctor public CipherSpi();
+    method protected abstract byte[] engineDoFinal(byte[], int, int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException;
+    method protected abstract int engineDoFinal(byte[], int, int, byte[], int) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method protected int engineDoFinal(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.BadPaddingException, javax.crypto.IllegalBlockSizeException, javax.crypto.ShortBufferException;
+    method protected abstract int engineGetBlockSize();
+    method protected abstract byte[] engineGetIV();
+    method protected int engineGetKeySize(java.security.Key) throws java.security.InvalidKeyException;
+    method protected abstract int engineGetOutputSize(int);
+    method protected abstract java.security.AlgorithmParameters engineGetParameters();
+    method protected abstract void engineInit(int, java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method protected abstract void engineInit(int, java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(int, java.security.Key, java.security.AlgorithmParameters, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineSetMode(String) throws java.security.NoSuchAlgorithmException;
+    method protected abstract void engineSetPadding(String) throws javax.crypto.NoSuchPaddingException;
+    method protected java.security.Key engineUnwrap(byte[], String, int) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method protected abstract byte[] engineUpdate(byte[], int, int);
+    method protected abstract int engineUpdate(byte[], int, int, byte[], int) throws javax.crypto.ShortBufferException;
+    method protected int engineUpdate(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.crypto.ShortBufferException;
+    method protected void engineUpdateAAD(byte[], int, int);
+    method protected void engineUpdateAAD(java.nio.ByteBuffer);
+    method protected byte[] engineWrap(java.security.Key) throws javax.crypto.IllegalBlockSizeException, java.security.InvalidKeyException;
+  }
+
+  public class EncryptedPrivateKeyInfo {
+    ctor public EncryptedPrivateKeyInfo(byte[]) throws java.io.IOException;
+    ctor public EncryptedPrivateKeyInfo(String, byte[]) throws java.security.NoSuchAlgorithmException;
+    ctor public EncryptedPrivateKeyInfo(java.security.AlgorithmParameters, byte[]) throws java.security.NoSuchAlgorithmException;
+    method public String getAlgName();
+    method public java.security.AlgorithmParameters getAlgParameters();
+    method public byte[] getEncoded() throws java.io.IOException;
+    method public byte[] getEncryptedData();
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(javax.crypto.Cipher) throws java.security.spec.InvalidKeySpecException;
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key, String) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public java.security.spec.PKCS8EncodedKeySpec getKeySpec(java.security.Key, java.security.Provider) throws java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+  }
+
+  public class ExemptionMechanism {
+    ctor protected ExemptionMechanism(javax.crypto.ExemptionMechanismSpi, java.security.Provider, String);
+    method public final byte[] genExemptionBlob() throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException;
+    method public final int genExemptionBlob(byte[]) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public final int genExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public static final javax.crypto.ExemptionMechanism getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.ExemptionMechanism getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.ExemptionMechanism getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final String getName();
+    method public final int getOutputSize(int) throws java.lang.IllegalStateException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final boolean isCryptoAllowed(java.security.Key) throws javax.crypto.ExemptionMechanismException;
+  }
+
+  public class ExemptionMechanismException extends java.security.GeneralSecurityException {
+    ctor public ExemptionMechanismException();
+    ctor public ExemptionMechanismException(String);
+  }
+
+  public abstract class ExemptionMechanismSpi {
+    ctor public ExemptionMechanismSpi();
+    method protected abstract byte[] engineGenExemptionBlob() throws javax.crypto.ExemptionMechanismException;
+    method protected abstract int engineGenExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, javax.crypto.ShortBufferException;
+    method protected abstract int engineGetOutputSize(int);
+    method protected abstract void engineInit(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+  }
+
+  public class IllegalBlockSizeException extends java.security.GeneralSecurityException {
+    ctor public IllegalBlockSizeException();
+    ctor public IllegalBlockSizeException(String);
+  }
+
+  public class KeyAgreement {
+    ctor protected KeyAgreement(javax.crypto.KeyAgreementSpi, java.security.Provider, String);
+    method public final java.security.Key doPhase(java.security.Key, boolean) throws java.lang.IllegalStateException, java.security.InvalidKeyException;
+    method public final byte[] generateSecret() throws java.lang.IllegalStateException;
+    method public final int generateSecret(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public final javax.crypto.SecretKey generateSecret(String) throws java.lang.IllegalStateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public final String getAlgorithm();
+    method public static final javax.crypto.KeyAgreement getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.KeyAgreement getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.KeyAgreement getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+  }
+
+  public abstract class KeyAgreementSpi {
+    ctor public KeyAgreementSpi();
+    method protected abstract java.security.Key engineDoPhase(java.security.Key, boolean) throws java.lang.IllegalStateException, java.security.InvalidKeyException;
+    method protected abstract byte[] engineGenerateSecret() throws java.lang.IllegalStateException;
+    method protected abstract int engineGenerateSecret(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method protected abstract javax.crypto.SecretKey engineGenerateSecret(String) throws java.lang.IllegalStateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method protected abstract void engineInit(java.security.Key, java.security.SecureRandom) throws java.security.InvalidKeyException;
+    method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+  }
+
+  public class KeyGenerator {
+    ctor protected KeyGenerator(javax.crypto.KeyGeneratorSpi, java.security.Provider, String);
+    method public final javax.crypto.SecretKey generateKey();
+    method public final String getAlgorithm();
+    method public static final javax.crypto.KeyGenerator getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.KeyGenerator getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.KeyGenerator getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.SecureRandom);
+    method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException;
+    method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+    method public final void init(int);
+    method public final void init(int, java.security.SecureRandom);
+  }
+
+  public abstract class KeyGeneratorSpi {
+    ctor public KeyGeneratorSpi();
+    method protected abstract javax.crypto.SecretKey engineGenerateKey();
+    method protected abstract void engineInit(java.security.SecureRandom);
+    method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException;
+    method protected abstract void engineInit(int, java.security.SecureRandom);
+  }
+
+  public class Mac implements java.lang.Cloneable {
+    ctor protected Mac(javax.crypto.MacSpi, java.security.Provider, String);
+    method public final Object clone() throws java.lang.CloneNotSupportedException;
+    method public final byte[] doFinal() throws java.lang.IllegalStateException;
+    method public final void doFinal(byte[], int) throws java.lang.IllegalStateException, javax.crypto.ShortBufferException;
+    method public final byte[] doFinal(byte[]) throws java.lang.IllegalStateException;
+    method public final String getAlgorithm();
+    method public static final javax.crypto.Mac getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.Mac getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.Mac getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final int getMacLength();
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.Key) throws java.security.InvalidKeyException;
+    method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method public final void reset();
+    method public final void update(byte) throws java.lang.IllegalStateException;
+    method public final void update(byte[]) throws java.lang.IllegalStateException;
+    method public final void update(byte[], int, int) throws java.lang.IllegalStateException;
+    method public final void update(java.nio.ByteBuffer);
+  }
+
+  public abstract class MacSpi {
+    ctor public MacSpi();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method protected abstract byte[] engineDoFinal();
+    method protected abstract int engineGetMacLength();
+    method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException;
+    method protected abstract void engineReset();
+    method protected abstract void engineUpdate(byte);
+    method protected abstract void engineUpdate(byte[], int, int);
+    method protected void engineUpdate(java.nio.ByteBuffer);
+  }
+
+  public class NoSuchPaddingException extends java.security.GeneralSecurityException {
+    ctor public NoSuchPaddingException();
+    ctor public NoSuchPaddingException(String);
+  }
+
+  public class NullCipher extends javax.crypto.Cipher {
+    ctor public NullCipher();
+  }
+
+  public class SealedObject implements java.io.Serializable {
+    ctor public SealedObject(java.io.Serializable, javax.crypto.Cipher) throws java.io.IOException, javax.crypto.IllegalBlockSizeException;
+    ctor protected SealedObject(javax.crypto.SealedObject);
+    method public final String getAlgorithm();
+    method public final Object getObject(java.security.Key) throws java.lang.ClassNotFoundException, java.io.IOException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException;
+    method public final Object getObject(javax.crypto.Cipher) throws javax.crypto.BadPaddingException, java.lang.ClassNotFoundException, java.io.IOException, javax.crypto.IllegalBlockSizeException;
+    method public final Object getObject(java.security.Key, String) throws java.lang.ClassNotFoundException, java.io.IOException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    field protected byte[] encodedParams;
+  }
+
+  public interface SecretKey extends java.security.Key javax.security.auth.Destroyable {
+    field public static final long serialVersionUID = -4795878709595146952L; // 0xbd719db928b8f538L
+  }
+
+  public class SecretKeyFactory {
+    ctor protected SecretKeyFactory(javax.crypto.SecretKeyFactorySpi, java.security.Provider, String);
+    method public final javax.crypto.SecretKey generateSecret(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method public final String getAlgorithm();
+    method public static final javax.crypto.SecretKeyFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.crypto.SecretKeyFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.crypto.SecretKeyFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.spec.KeySpec getKeySpec(javax.crypto.SecretKey, Class<?>) throws java.security.spec.InvalidKeySpecException;
+    method public final java.security.Provider getProvider();
+    method public final javax.crypto.SecretKey translateKey(javax.crypto.SecretKey) throws java.security.InvalidKeyException;
+  }
+
+  public abstract class SecretKeyFactorySpi {
+    ctor public SecretKeyFactorySpi();
+    method protected abstract javax.crypto.SecretKey engineGenerateSecret(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract java.security.spec.KeySpec engineGetKeySpec(javax.crypto.SecretKey, Class<?>) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract javax.crypto.SecretKey engineTranslateKey(javax.crypto.SecretKey) throws java.security.InvalidKeyException;
+  }
+
+  public class ShortBufferException extends java.security.GeneralSecurityException {
+    ctor public ShortBufferException();
+    ctor public ShortBufferException(String);
+  }
+
+}
+
+package javax.crypto.interfaces {
+
+  public interface DHKey {
+    method public javax.crypto.spec.DHParameterSpec getParams();
+  }
+
+  public interface DHPrivateKey extends javax.crypto.interfaces.DHKey java.security.PrivateKey {
+    method public java.math.BigInteger getX();
+    field public static final long serialVersionUID = 2211791113380396553L; // 0x1eb1dc4c8e677e09L
+  }
+
+  public interface DHPublicKey extends javax.crypto.interfaces.DHKey java.security.PublicKey {
+    method public java.math.BigInteger getY();
+    field public static final long serialVersionUID = -6628103563352519193L; // 0xa4043eed23df4de7L
+  }
+
+  public interface PBEKey extends javax.crypto.SecretKey {
+    method public int getIterationCount();
+    method public char[] getPassword();
+    method public byte[] getSalt();
+    field public static final long serialVersionUID = -1430015993304333921L; // 0xec279007d7f7c19fL
+  }
+
+}
+
+package javax.crypto.spec {
+
+  public class DESKeySpec implements java.security.spec.KeySpec {
+    ctor public DESKeySpec(byte[]) throws java.security.InvalidKeyException;
+    ctor public DESKeySpec(byte[], int) throws java.security.InvalidKeyException;
+    method public byte[] getKey();
+    method public static boolean isParityAdjusted(byte[], int) throws java.security.InvalidKeyException;
+    method public static boolean isWeak(byte[], int) throws java.security.InvalidKeyException;
+    field public static final int DES_KEY_LEN = 8; // 0x8
+  }
+
+  public class DESedeKeySpec implements java.security.spec.KeySpec {
+    ctor public DESedeKeySpec(byte[]) throws java.security.InvalidKeyException;
+    ctor public DESedeKeySpec(byte[], int) throws java.security.InvalidKeyException;
+    method public byte[] getKey();
+    method public static boolean isParityAdjusted(byte[], int) throws java.security.InvalidKeyException;
+    field public static final int DES_EDE_KEY_LEN = 24; // 0x18
+  }
+
+  public class DHGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public DHGenParameterSpec(int, int);
+    method public int getExponentSize();
+    method public int getPrimeSize();
+  }
+
+  public class DHParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public DHParameterSpec(java.math.BigInteger, java.math.BigInteger);
+    ctor public DHParameterSpec(java.math.BigInteger, java.math.BigInteger, int);
+    method public java.math.BigInteger getG();
+    method public int getL();
+    method public java.math.BigInteger getP();
+  }
+
+  public class DHPrivateKeySpec implements java.security.spec.KeySpec {
+    ctor public DHPrivateKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getX();
+  }
+
+  public class DHPublicKeySpec implements java.security.spec.KeySpec {
+    ctor public DHPublicKeySpec(java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public java.math.BigInteger getG();
+    method public java.math.BigInteger getP();
+    method public java.math.BigInteger getY();
+  }
+
+  public class GCMParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public GCMParameterSpec(int, byte[]);
+    ctor public GCMParameterSpec(int, byte[], int, int);
+    method public byte[] getIV();
+    method public int getTLen();
+  }
+
+  public class IvParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public IvParameterSpec(byte[]);
+    ctor public IvParameterSpec(byte[], int, int);
+    method public byte[] getIV();
+  }
+
+  public class OAEPParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public OAEPParameterSpec(String, String, java.security.spec.AlgorithmParameterSpec, javax.crypto.spec.PSource);
+    method public String getDigestAlgorithm();
+    method public String getMGFAlgorithm();
+    method public java.security.spec.AlgorithmParameterSpec getMGFParameters();
+    method public javax.crypto.spec.PSource getPSource();
+    field public static final javax.crypto.spec.OAEPParameterSpec DEFAULT;
+  }
+
+  public class PBEKeySpec implements java.security.spec.KeySpec {
+    ctor public PBEKeySpec(char[]);
+    ctor public PBEKeySpec(char[], byte[], int, int);
+    ctor public PBEKeySpec(char[], byte[], int);
+    method public final void clearPassword();
+    method public final int getIterationCount();
+    method public final int getKeyLength();
+    method public final char[] getPassword();
+    method public final byte[] getSalt();
+  }
+
+  public class PBEParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public PBEParameterSpec(byte[], int);
+    ctor public PBEParameterSpec(byte[], int, java.security.spec.AlgorithmParameterSpec);
+    method public int getIterationCount();
+    method public java.security.spec.AlgorithmParameterSpec getParameterSpec();
+    method public byte[] getSalt();
+  }
+
+  public class PSource {
+    ctor protected PSource(String);
+    method public String getAlgorithm();
+  }
+
+  public static final class PSource.PSpecified extends javax.crypto.spec.PSource {
+    ctor public PSource.PSpecified(byte[]);
+    method public byte[] getValue();
+    field public static final javax.crypto.spec.PSource.PSpecified DEFAULT;
+  }
+
+  public class RC2ParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public RC2ParameterSpec(int);
+    ctor public RC2ParameterSpec(int, byte[]);
+    ctor public RC2ParameterSpec(int, byte[], int);
+    method public int getEffectiveKeyBits();
+    method public byte[] getIV();
+  }
+
+  public class RC5ParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    ctor public RC5ParameterSpec(int, int, int);
+    ctor public RC5ParameterSpec(int, int, int, byte[]);
+    ctor public RC5ParameterSpec(int, int, int, byte[], int);
+    method public byte[] getIV();
+    method public int getRounds();
+    method public int getVersion();
+    method public int getWordSize();
+  }
+
+  public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey {
+    ctor public SecretKeySpec(byte[], String);
+    ctor public SecretKeySpec(byte[], int, int, String);
+    method public String getAlgorithm();
+    method public byte[] getEncoded();
+    method public String getFormat();
+  }
+
+}
+
+package javax.net {
+
+  public abstract class ServerSocketFactory {
+    ctor protected ServerSocketFactory();
+    method public java.net.ServerSocket createServerSocket() throws java.io.IOException;
+    method public abstract java.net.ServerSocket createServerSocket(int) throws java.io.IOException;
+    method public abstract java.net.ServerSocket createServerSocket(int, int) throws java.io.IOException;
+    method public abstract java.net.ServerSocket createServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
+    method public static javax.net.ServerSocketFactory getDefault();
+  }
+
+  public abstract class SocketFactory {
+    ctor protected SocketFactory();
+    method public java.net.Socket createSocket() throws java.io.IOException;
+    method public abstract java.net.Socket createSocket(String, int) throws java.io.IOException, java.net.UnknownHostException;
+    method public abstract java.net.Socket createSocket(String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException;
+    method public abstract java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException;
+    method public abstract java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    method public static javax.net.SocketFactory getDefault();
+  }
+
+}
+
+package javax.net.ssl {
+
+  public class CertPathTrustManagerParameters implements javax.net.ssl.ManagerFactoryParameters {
+    ctor public CertPathTrustManagerParameters(java.security.cert.CertPathParameters);
+    method public java.security.cert.CertPathParameters getParameters();
+  }
+
+  public abstract class ExtendedSSLSession implements javax.net.ssl.SSLSession {
+    ctor public ExtendedSSLSession();
+    method public abstract String[] getLocalSupportedSignatureAlgorithms();
+    method public abstract String[] getPeerSupportedSignatureAlgorithms();
+    method public java.util.List<javax.net.ssl.SNIServerName> getRequestedServerNames();
+  }
+
+  public class HandshakeCompletedEvent extends java.util.EventObject {
+    ctor public HandshakeCompletedEvent(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession);
+    method public String getCipherSuite();
+    method public java.security.cert.Certificate[] getLocalCertificates();
+    method public java.security.Principal getLocalPrincipal();
+    method public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public java.security.cert.Certificate[] getPeerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public javax.net.ssl.SSLSession getSession();
+    method public javax.net.ssl.SSLSocket getSocket();
+  }
+
+  public interface HandshakeCompletedListener extends java.util.EventListener {
+    method public void handshakeCompleted(javax.net.ssl.HandshakeCompletedEvent);
+  }
+
+  public interface HostnameVerifier {
+    method public boolean verify(String, javax.net.ssl.SSLSession);
+  }
+
+  public abstract class HttpsURLConnection extends java.net.HttpURLConnection {
+    ctor protected HttpsURLConnection(java.net.URL);
+    method public abstract String getCipherSuite();
+    method public static javax.net.ssl.HostnameVerifier getDefaultHostnameVerifier();
+    method public static javax.net.ssl.SSLSocketFactory getDefaultSSLSocketFactory();
+    method public javax.net.ssl.HostnameVerifier getHostnameVerifier();
+    method public abstract java.security.cert.Certificate[] getLocalCertificates();
+    method public java.security.Principal getLocalPrincipal();
+    method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public javax.net.ssl.SSLSocketFactory getSSLSocketFactory();
+    method public abstract java.security.cert.Certificate[] getServerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public static void setDefaultHostnameVerifier(javax.net.ssl.HostnameVerifier);
+    method public static void setDefaultSSLSocketFactory(javax.net.ssl.SSLSocketFactory);
+    method public void setHostnameVerifier(javax.net.ssl.HostnameVerifier);
+    method public void setSSLSocketFactory(javax.net.ssl.SSLSocketFactory);
+    field protected javax.net.ssl.HostnameVerifier hostnameVerifier;
+  }
+
+  public interface KeyManager {
+  }
+
+  public class KeyManagerFactory {
+    ctor protected KeyManagerFactory(javax.net.ssl.KeyManagerFactorySpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public static final String getDefaultAlgorithm();
+    method public static final javax.net.ssl.KeyManagerFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.net.ssl.KeyManagerFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.net.ssl.KeyManagerFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final javax.net.ssl.KeyManager[] getKeyManagers();
+    method public final java.security.Provider getProvider();
+    method public final void init(java.security.KeyStore, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method public final void init(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class KeyManagerFactorySpi {
+    ctor public KeyManagerFactorySpi();
+    method protected abstract javax.net.ssl.KeyManager[] engineGetKeyManagers();
+    method protected abstract void engineInit(java.security.KeyStore, char[]) throws java.security.KeyStoreException, java.security.NoSuchAlgorithmException, java.security.UnrecoverableKeyException;
+    method protected abstract void engineInit(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public class KeyStoreBuilderParameters implements javax.net.ssl.ManagerFactoryParameters {
+    ctor public KeyStoreBuilderParameters(java.security.KeyStore.Builder);
+    ctor public KeyStoreBuilderParameters(java.util.List<java.security.KeyStore.Builder>);
+    method public java.util.List<java.security.KeyStore.Builder> getParameters();
+  }
+
+  public interface ManagerFactoryParameters {
+  }
+
+  public final class SNIHostName extends javax.net.ssl.SNIServerName {
+    ctor public SNIHostName(String);
+    ctor public SNIHostName(byte[]);
+    method public static javax.net.ssl.SNIMatcher createSNIMatcher(String);
+    method public String getAsciiName();
+  }
+
+  public abstract class SNIMatcher {
+    ctor protected SNIMatcher(int);
+    method public final int getType();
+    method public abstract boolean matches(javax.net.ssl.SNIServerName);
+  }
+
+  public abstract class SNIServerName {
+    ctor protected SNIServerName(int, byte[]);
+    method public final byte[] getEncoded();
+    method public final int getType();
+  }
+
+  public class SSLContext {
+    ctor protected SSLContext(javax.net.ssl.SSLContextSpi, java.security.Provider, String);
+    method public final javax.net.ssl.SSLEngine createSSLEngine();
+    method public final javax.net.ssl.SSLEngine createSSLEngine(String, int);
+    method public final javax.net.ssl.SSLSessionContext getClientSessionContext();
+    method public static javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException;
+    method public final javax.net.ssl.SSLParameters getDefaultSSLParameters();
+    method public static javax.net.ssl.SSLContext getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static javax.net.ssl.SSLContext getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static javax.net.ssl.SSLContext getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final String getProtocol();
+    method public final java.security.Provider getProvider();
+    method public final javax.net.ssl.SSLSessionContext getServerSessionContext();
+    method public final javax.net.ssl.SSLServerSocketFactory getServerSocketFactory();
+    method public final javax.net.ssl.SSLSocketFactory getSocketFactory();
+    method public final javax.net.ssl.SSLParameters getSupportedSSLParameters();
+    method public final void init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException;
+    method public static void setDefault(javax.net.ssl.SSLContext);
+  }
+
+  public abstract class SSLContextSpi {
+    ctor public SSLContextSpi();
+    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine();
+    method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(String, int);
+    method protected abstract javax.net.ssl.SSLSessionContext engineGetClientSessionContext();
+    method protected javax.net.ssl.SSLParameters engineGetDefaultSSLParameters();
+    method protected abstract javax.net.ssl.SSLSessionContext engineGetServerSessionContext();
+    method protected abstract javax.net.ssl.SSLServerSocketFactory engineGetServerSocketFactory();
+    method protected abstract javax.net.ssl.SSLSocketFactory engineGetSocketFactory();
+    method protected javax.net.ssl.SSLParameters engineGetSupportedSSLParameters();
+    method protected abstract void engineInit(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException;
+  }
+
+  public abstract class SSLEngine {
+    ctor protected SSLEngine();
+    ctor protected SSLEngine(String, int);
+    method public abstract void beginHandshake() throws javax.net.ssl.SSLException;
+    method public abstract void closeInbound() throws javax.net.ssl.SSLException;
+    method public abstract void closeOutbound();
+    method public String getApplicationProtocol();
+    method public abstract Runnable getDelegatedTask();
+    method public abstract boolean getEnableSessionCreation();
+    method public abstract String[] getEnabledCipherSuites();
+    method public abstract String[] getEnabledProtocols();
+    method public String getHandshakeApplicationProtocol();
+    method public java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> getHandshakeApplicationProtocolSelector();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
+    method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus();
+    method public abstract boolean getNeedClientAuth();
+    method public String getPeerHost();
+    method public int getPeerPort();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
+    method public abstract javax.net.ssl.SSLSession getSession();
+    method public abstract String[] getSupportedCipherSuites();
+    method public abstract String[] getSupportedProtocols();
+    method public abstract boolean getUseClientMode();
+    method public abstract boolean getWantClientAuth();
+    method public abstract boolean isInboundDone();
+    method public abstract boolean isOutboundDone();
+    method public abstract void setEnableSessionCreation(boolean);
+    method public abstract void setEnabledCipherSuites(String[]);
+    method public abstract void setEnabledProtocols(String[]);
+    method public void setHandshakeApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String>);
+    method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
+    method public abstract void setUseClientMode(boolean);
+    method public abstract void setWantClientAuth(boolean);
+    method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[]) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+    method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException;
+  }
+
+  public class SSLEngineResult {
+    ctor public SSLEngineResult(javax.net.ssl.SSLEngineResult.Status, javax.net.ssl.SSLEngineResult.HandshakeStatus, int, int);
+    method public final int bytesConsumed();
+    method public final int bytesProduced();
+    method public final javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus();
+    method public final javax.net.ssl.SSLEngineResult.Status getStatus();
+  }
+
+  public enum SSLEngineResult.HandshakeStatus {
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus FINISHED;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_TASK;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_UNWRAP;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NEED_WRAP;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.HandshakeStatus NOT_HANDSHAKING;
+  }
+
+  public enum SSLEngineResult.Status {
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_OVERFLOW;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status BUFFER_UNDERFLOW;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status CLOSED;
+    enum_constant public static final javax.net.ssl.SSLEngineResult.Status OK;
+  }
+
+  public class SSLException extends java.io.IOException {
+    ctor public SSLException(String);
+    ctor public SSLException(String, Throwable);
+    ctor public SSLException(Throwable);
+  }
+
+  public class SSLHandshakeException extends javax.net.ssl.SSLException {
+    ctor public SSLHandshakeException(String);
+  }
+
+  public class SSLKeyException extends javax.net.ssl.SSLException {
+    ctor public SSLKeyException(String);
+  }
+
+  public class SSLParameters {
+    ctor public SSLParameters();
+    ctor public SSLParameters(String[]);
+    ctor public SSLParameters(String[], String[]);
+    method public java.security.AlgorithmConstraints getAlgorithmConstraints();
+    method public String[] getApplicationProtocols();
+    method public String[] getCipherSuites();
+    method public String getEndpointIdentificationAlgorithm();
+    method public boolean getNeedClientAuth();
+    method public String[] getProtocols();
+    method public final java.util.Collection<javax.net.ssl.SNIMatcher> getSNIMatchers();
+    method public final java.util.List<javax.net.ssl.SNIServerName> getServerNames();
+    method public final boolean getUseCipherSuitesOrder();
+    method public boolean getWantClientAuth();
+    method public void setAlgorithmConstraints(java.security.AlgorithmConstraints);
+    method public void setApplicationProtocols(String[]);
+    method public void setCipherSuites(String[]);
+    method public void setEndpointIdentificationAlgorithm(String);
+    method public void setNeedClientAuth(boolean);
+    method public void setProtocols(String[]);
+    method public final void setSNIMatchers(java.util.Collection<javax.net.ssl.SNIMatcher>);
+    method public final void setServerNames(java.util.List<javax.net.ssl.SNIServerName>);
+    method public final void setUseCipherSuitesOrder(boolean);
+    method public void setWantClientAuth(boolean);
+  }
+
+  public class SSLPeerUnverifiedException extends javax.net.ssl.SSLException {
+    ctor public SSLPeerUnverifiedException(String);
+  }
+
+  public final class SSLPermission extends java.security.BasicPermission {
+    ctor public SSLPermission(String);
+    ctor public SSLPermission(String, String);
+  }
+
+  public class SSLProtocolException extends javax.net.ssl.SSLException {
+    ctor public SSLProtocolException(String);
+  }
+
+  public abstract class SSLServerSocket extends java.net.ServerSocket {
+    ctor protected SSLServerSocket() throws java.io.IOException;
+    ctor protected SSLServerSocket(int) throws java.io.IOException;
+    ctor protected SSLServerSocket(int, int) throws java.io.IOException;
+    ctor protected SSLServerSocket(int, int, java.net.InetAddress) throws java.io.IOException;
+    method public abstract boolean getEnableSessionCreation();
+    method public abstract String[] getEnabledCipherSuites();
+    method public abstract String[] getEnabledProtocols();
+    method public abstract boolean getNeedClientAuth();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
+    method public abstract String[] getSupportedCipherSuites();
+    method public abstract String[] getSupportedProtocols();
+    method public abstract boolean getUseClientMode();
+    method public abstract boolean getWantClientAuth();
+    method public abstract void setEnableSessionCreation(boolean);
+    method public abstract void setEnabledCipherSuites(String[]);
+    method public abstract void setEnabledProtocols(String[]);
+    method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
+    method public abstract void setUseClientMode(boolean);
+    method public abstract void setWantClientAuth(boolean);
+  }
+
+  public abstract class SSLServerSocketFactory extends javax.net.ServerSocketFactory {
+    ctor protected SSLServerSocketFactory();
+    method public static javax.net.ServerSocketFactory getDefault();
+    method public abstract String[] getDefaultCipherSuites();
+    method public abstract String[] getSupportedCipherSuites();
+  }
+
+  public interface SSLSession {
+    method public int getApplicationBufferSize();
+    method public String getCipherSuite();
+    method public long getCreationTime();
+    method public byte[] getId();
+    method public long getLastAccessedTime();
+    method public java.security.cert.Certificate[] getLocalCertificates();
+    method public java.security.Principal getLocalPrincipal();
+    method public int getPacketBufferSize();
+    method public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public java.security.cert.Certificate[] getPeerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public String getPeerHost();
+    method public int getPeerPort();
+    method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public String getProtocol();
+    method public javax.net.ssl.SSLSessionContext getSessionContext();
+    method public Object getValue(String);
+    method public String[] getValueNames();
+    method public void invalidate();
+    method public boolean isValid();
+    method public void putValue(String, Object);
+    method public void removeValue(String);
+  }
+
+  public class SSLSessionBindingEvent extends java.util.EventObject {
+    ctor public SSLSessionBindingEvent(javax.net.ssl.SSLSession, String);
+    method public String getName();
+    method public javax.net.ssl.SSLSession getSession();
+  }
+
+  public interface SSLSessionBindingListener extends java.util.EventListener {
+    method public void valueBound(javax.net.ssl.SSLSessionBindingEvent);
+    method public void valueUnbound(javax.net.ssl.SSLSessionBindingEvent);
+  }
+
+  public interface SSLSessionContext {
+    method public java.util.Enumeration<byte[]> getIds();
+    method public javax.net.ssl.SSLSession getSession(byte[]);
+    method public int getSessionCacheSize();
+    method public int getSessionTimeout();
+    method public void setSessionCacheSize(int) throws java.lang.IllegalArgumentException;
+    method public void setSessionTimeout(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public abstract class SSLSocket extends java.net.Socket {
+    ctor protected SSLSocket();
+    ctor protected SSLSocket(String, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor protected SSLSocket(java.net.InetAddress, int) throws java.io.IOException;
+    ctor protected SSLSocket(String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException;
+    ctor protected SSLSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException;
+    method public abstract void addHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
+    method public String getApplicationProtocol();
+    method public abstract boolean getEnableSessionCreation();
+    method public abstract String[] getEnabledCipherSuites();
+    method public abstract String[] getEnabledProtocols();
+    method public String getHandshakeApplicationProtocol();
+    method public java.util.function.BiFunction<javax.net.ssl.SSLSocket,java.util.List<java.lang.String>,java.lang.String> getHandshakeApplicationProtocolSelector();
+    method public javax.net.ssl.SSLSession getHandshakeSession();
+    method public abstract boolean getNeedClientAuth();
+    method public javax.net.ssl.SSLParameters getSSLParameters();
+    method public abstract javax.net.ssl.SSLSession getSession();
+    method public abstract String[] getSupportedCipherSuites();
+    method public abstract String[] getSupportedProtocols();
+    method public abstract boolean getUseClientMode();
+    method public abstract boolean getWantClientAuth();
+    method public abstract void removeHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
+    method public abstract void setEnableSessionCreation(boolean);
+    method public abstract void setEnabledCipherSuites(String[]);
+    method public abstract void setEnabledProtocols(String[]);
+    method public void setHandshakeApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLSocket,java.util.List<java.lang.String>,java.lang.String>);
+    method public abstract void setNeedClientAuth(boolean);
+    method public void setSSLParameters(javax.net.ssl.SSLParameters);
+    method public abstract void setUseClientMode(boolean);
+    method public abstract void setWantClientAuth(boolean);
+    method public abstract void startHandshake() throws java.io.IOException;
+  }
+
+  public abstract class SSLSocketFactory extends javax.net.SocketFactory {
+    ctor public SSLSocketFactory();
+    method public abstract java.net.Socket createSocket(java.net.Socket, String, int, boolean) throws java.io.IOException;
+    method public static javax.net.SocketFactory getDefault();
+    method public abstract String[] getDefaultCipherSuites();
+    method public abstract String[] getSupportedCipherSuites();
+  }
+
+  public final class StandardConstants {
+    field public static final int SNI_HOST_NAME = 0; // 0x0
+  }
+
+  public interface TrustManager {
+  }
+
+  public class TrustManagerFactory {
+    ctor protected TrustManagerFactory(javax.net.ssl.TrustManagerFactorySpi, java.security.Provider, String);
+    method public final String getAlgorithm();
+    method public static final String getDefaultAlgorithm();
+    method public static final javax.net.ssl.TrustManagerFactory getInstance(String) throws java.security.NoSuchAlgorithmException;
+    method public static final javax.net.ssl.TrustManagerFactory getInstance(String, String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
+    method public static final javax.net.ssl.TrustManagerFactory getInstance(String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
+    method public final java.security.Provider getProvider();
+    method public final javax.net.ssl.TrustManager[] getTrustManagers();
+    method public final void init(java.security.KeyStore) throws java.security.KeyStoreException;
+    method public final void init(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class TrustManagerFactorySpi {
+    ctor public TrustManagerFactorySpi();
+    method protected abstract javax.net.ssl.TrustManager[] engineGetTrustManagers();
+    method protected abstract void engineInit(java.security.KeyStore) throws java.security.KeyStoreException;
+    method protected abstract void engineInit(javax.net.ssl.ManagerFactoryParameters) throws java.security.InvalidAlgorithmParameterException;
+  }
+
+  public abstract class X509ExtendedKeyManager implements javax.net.ssl.X509KeyManager {
+    ctor protected X509ExtendedKeyManager();
+    method public String chooseEngineClientAlias(String[], java.security.Principal[], javax.net.ssl.SSLEngine);
+    method public String chooseEngineServerAlias(String, java.security.Principal[], javax.net.ssl.SSLEngine);
+  }
+
+  public abstract class X509ExtendedTrustManager implements javax.net.ssl.X509TrustManager {
+    ctor public X509ExtendedTrustManager();
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+  }
+
+  public interface X509KeyManager extends javax.net.ssl.KeyManager {
+    method public String chooseClientAlias(String[], java.security.Principal[], java.net.Socket);
+    method public String chooseServerAlias(String, java.security.Principal[], java.net.Socket);
+    method public java.security.cert.X509Certificate[] getCertificateChain(String);
+    method public String[] getClientAliases(String, java.security.Principal[]);
+    method public java.security.PrivateKey getPrivateKey(String);
+    method public String[] getServerAliases(String, java.security.Principal[]);
+  }
+
+  public interface X509TrustManager extends javax.net.ssl.TrustManager {
+    method public void checkClientTrusted(java.security.cert.X509Certificate[], String) throws java.security.cert.CertificateException;
+    method public void checkServerTrusted(java.security.cert.X509Certificate[], String) throws java.security.cert.CertificateException;
+    method public java.security.cert.X509Certificate[] getAcceptedIssuers();
+  }
+
+}
+
+package javax.security.auth {
+
+  public final class AuthPermission extends java.security.BasicPermission {
+    ctor public AuthPermission(String);
+    ctor public AuthPermission(String, String);
+  }
+
+  public class DestroyFailedException extends java.lang.Exception {
+    ctor public DestroyFailedException();
+    ctor public DestroyFailedException(String);
+  }
+
+  public interface Destroyable {
+    method public default void destroy() throws javax.security.auth.DestroyFailedException;
+    method public default boolean isDestroyed();
+  }
+
+  public final class PrivateCredentialPermission extends java.security.Permission {
+    ctor public PrivateCredentialPermission(String, String);
+    method public String getActions();
+    method public String getCredentialClass();
+    method public String[][] getPrincipals();
+    method public boolean implies(java.security.Permission);
+  }
+
+  public final class Subject implements java.io.Serializable {
+    ctor public Subject();
+    ctor public Subject(boolean, java.util.Set<? extends java.security.Principal>, java.util.Set<?>, java.util.Set<?>);
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public java.util.Set<java.security.Principal> getPrincipals();
+    method public <T extends java.security.Principal> java.util.Set<T> getPrincipals(Class<T>);
+    method public java.util.Set<java.lang.Object> getPrivateCredentials();
+    method public <T> java.util.Set<T> getPrivateCredentials(Class<T>);
+    method public java.util.Set<java.lang.Object> getPublicCredentials();
+    method public <T> java.util.Set<T> getPublicCredentials(Class<T>);
+    method public static javax.security.auth.Subject getSubject(java.security.AccessControlContext);
+    method public boolean isReadOnly();
+    method public void setReadOnly();
+  }
+
+  public class SubjectDomainCombiner implements java.security.DomainCombiner {
+    ctor public SubjectDomainCombiner(javax.security.auth.Subject);
+    method public java.security.ProtectionDomain[] combine(java.security.ProtectionDomain[], java.security.ProtectionDomain[]);
+    method public javax.security.auth.Subject getSubject();
+  }
+
+}
+
+package javax.security.auth.callback {
+
+  public interface Callback {
+  }
+
+  public interface CallbackHandler {
+    method public void handle(javax.security.auth.callback.Callback[]) throws java.io.IOException, javax.security.auth.callback.UnsupportedCallbackException;
+  }
+
+  public class PasswordCallback implements javax.security.auth.callback.Callback java.io.Serializable {
+    ctor public PasswordCallback(String, boolean);
+    method public void clearPassword();
+    method public char[] getPassword();
+    method public String getPrompt();
+    method public boolean isEchoOn();
+    method public void setPassword(char[]);
+  }
+
+  public class UnsupportedCallbackException extends java.lang.Exception {
+    ctor public UnsupportedCallbackException(javax.security.auth.callback.Callback);
+    ctor public UnsupportedCallbackException(javax.security.auth.callback.Callback, String);
+    method public javax.security.auth.callback.Callback getCallback();
+  }
+
+}
+
+package javax.security.auth.login {
+
+  public class LoginException extends java.security.GeneralSecurityException {
+    ctor public LoginException();
+    ctor public LoginException(String);
+  }
+
+}
+
+package javax.security.auth.x500 {
+
+  public final class X500Principal implements java.security.Principal java.io.Serializable {
+    ctor public X500Principal(String);
+    ctor public X500Principal(String, java.util.Map<java.lang.String,java.lang.String>);
+    ctor public X500Principal(byte[]);
+    ctor public X500Principal(java.io.InputStream);
+    method public byte[] getEncoded();
+    method public String getName();
+    method public String getName(String);
+    method public String getName(String, java.util.Map<java.lang.String,java.lang.String>);
+    field public static final String CANONICAL = "CANONICAL";
+    field public static final String RFC1779 = "RFC1779";
+    field public static final String RFC2253 = "RFC2253";
+  }
+
+}
+
+package javax.security.cert {
+
+  public abstract class Certificate {
+    ctor public Certificate();
+    method public abstract byte[] getEncoded() throws javax.security.cert.CertificateEncodingException;
+    method public abstract java.security.PublicKey getPublicKey();
+    method public abstract String toString();
+    method public abstract void verify(java.security.PublicKey) throws javax.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+    method public abstract void verify(java.security.PublicKey, String) throws javax.security.cert.CertificateException, java.security.InvalidKeyException, java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException, java.security.SignatureException;
+  }
+
+  public class CertificateEncodingException extends javax.security.cert.CertificateException {
+    ctor public CertificateEncodingException();
+    ctor public CertificateEncodingException(String);
+  }
+
+  public class CertificateException extends java.lang.Exception {
+    ctor public CertificateException();
+    ctor public CertificateException(String);
+  }
+
+  public class CertificateExpiredException extends javax.security.cert.CertificateException {
+    ctor public CertificateExpiredException();
+    ctor public CertificateExpiredException(String);
+  }
+
+  public class CertificateNotYetValidException extends javax.security.cert.CertificateException {
+    ctor public CertificateNotYetValidException();
+    ctor public CertificateNotYetValidException(String);
+  }
+
+  public class CertificateParsingException extends javax.security.cert.CertificateException {
+    ctor public CertificateParsingException();
+    ctor public CertificateParsingException(String);
+  }
+
+  public abstract class X509Certificate extends javax.security.cert.Certificate {
+    ctor public X509Certificate();
+    method public abstract void checkValidity() throws javax.security.cert.CertificateExpiredException, javax.security.cert.CertificateNotYetValidException;
+    method public abstract void checkValidity(java.util.Date) throws javax.security.cert.CertificateExpiredException, javax.security.cert.CertificateNotYetValidException;
+    method public static final javax.security.cert.X509Certificate getInstance(java.io.InputStream) throws javax.security.cert.CertificateException;
+    method public static final javax.security.cert.X509Certificate getInstance(byte[]) throws javax.security.cert.CertificateException;
+    method public abstract java.security.Principal getIssuerDN();
+    method public abstract java.util.Date getNotAfter();
+    method public abstract java.util.Date getNotBefore();
+    method public abstract java.math.BigInteger getSerialNumber();
+    method public abstract String getSigAlgName();
+    method public abstract String getSigAlgOID();
+    method public abstract byte[] getSigAlgParams();
+    method public abstract java.security.Principal getSubjectDN();
+    method public abstract int getVersion();
+  }
+
+}
+
+package javax.sql {
+
+  public interface CommonDataSource {
+    method public java.io.PrintWriter getLogWriter() throws java.sql.SQLException;
+    method public int getLoginTimeout() throws java.sql.SQLException;
+    method public java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException;
+    method public void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException;
+    method public void setLoginTimeout(int) throws java.sql.SQLException;
+  }
+
+  public class ConnectionEvent extends java.util.EventObject {
+    ctor public ConnectionEvent(javax.sql.PooledConnection);
+    ctor public ConnectionEvent(javax.sql.PooledConnection, java.sql.SQLException);
+    method public java.sql.SQLException getSQLException();
+  }
+
+  public interface ConnectionEventListener extends java.util.EventListener {
+    method public void connectionClosed(javax.sql.ConnectionEvent);
+    method public void connectionErrorOccurred(javax.sql.ConnectionEvent);
+  }
+
+  public interface ConnectionPoolDataSource extends javax.sql.CommonDataSource {
+    method public javax.sql.PooledConnection getPooledConnection() throws java.sql.SQLException;
+    method public javax.sql.PooledConnection getPooledConnection(String, String) throws java.sql.SQLException;
+  }
+
+  public interface DataSource extends javax.sql.CommonDataSource java.sql.Wrapper {
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public java.sql.Connection getConnection(String, String) throws java.sql.SQLException;
+  }
+
+  public interface PooledConnection {
+    method public void addConnectionEventListener(javax.sql.ConnectionEventListener);
+    method public void addStatementEventListener(javax.sql.StatementEventListener);
+    method public void close() throws java.sql.SQLException;
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public void removeConnectionEventListener(javax.sql.ConnectionEventListener);
+    method public void removeStatementEventListener(javax.sql.StatementEventListener);
+  }
+
+  public interface RowSet extends java.sql.ResultSet {
+    method public void addRowSetListener(javax.sql.RowSetListener);
+    method public void clearParameters() throws java.sql.SQLException;
+    method public void execute() throws java.sql.SQLException;
+    method public String getCommand();
+    method public String getDataSourceName();
+    method public boolean getEscapeProcessing() throws java.sql.SQLException;
+    method public int getMaxFieldSize() throws java.sql.SQLException;
+    method public int getMaxRows() throws java.sql.SQLException;
+    method public String getPassword();
+    method public int getQueryTimeout() throws java.sql.SQLException;
+    method public int getTransactionIsolation();
+    method public java.util.Map<java.lang.String,java.lang.Class<?>> getTypeMap() throws java.sql.SQLException;
+    method public String getUrl() throws java.sql.SQLException;
+    method public String getUsername();
+    method public boolean isReadOnly();
+    method public void removeRowSetListener(javax.sql.RowSetListener);
+    method public void setArray(int, java.sql.Array) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setAsciiStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBigDecimal(String, java.math.BigDecimal) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream, int) throws java.sql.SQLException;
+    method public void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBinaryStream(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(int, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(int, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream, long) throws java.sql.SQLException;
+    method public void setBlob(String, java.sql.Blob) throws java.sql.SQLException;
+    method public void setBlob(String, java.io.InputStream) throws java.sql.SQLException;
+    method public void setBoolean(int, boolean) throws java.sql.SQLException;
+    method public void setBoolean(String, boolean) throws java.sql.SQLException;
+    method public void setByte(int, byte) throws java.sql.SQLException;
+    method public void setByte(String, byte) throws java.sql.SQLException;
+    method public void setBytes(int, byte[]) throws java.sql.SQLException;
+    method public void setBytes(String, byte[]) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader, int) throws java.sql.SQLException;
+    method public void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(int, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setClob(String, java.sql.Clob) throws java.sql.SQLException;
+    method public void setClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setCommand(String) throws java.sql.SQLException;
+    method public void setConcurrency(int) throws java.sql.SQLException;
+    method public void setDataSourceName(String) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(int, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date) throws java.sql.SQLException;
+    method public void setDate(String, java.sql.Date, java.util.Calendar) throws java.sql.SQLException;
+    method public void setDouble(int, double) throws java.sql.SQLException;
+    method public void setDouble(String, double) throws java.sql.SQLException;
+    method public void setEscapeProcessing(boolean) throws java.sql.SQLException;
+    method public void setFloat(int, float) throws java.sql.SQLException;
+    method public void setFloat(String, float) throws java.sql.SQLException;
+    method public void setInt(int, int) throws java.sql.SQLException;
+    method public void setInt(String, int) throws java.sql.SQLException;
+    method public void setLong(int, long) throws java.sql.SQLException;
+    method public void setLong(String, long) throws java.sql.SQLException;
+    method public void setMaxFieldSize(int) throws java.sql.SQLException;
+    method public void setMaxRows(int) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNCharacterStream(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(String, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(String, java.io.Reader) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader, long) throws java.sql.SQLException;
+    method public void setNClob(int, java.sql.NClob) throws java.sql.SQLException;
+    method public void setNClob(int, java.io.Reader) throws java.sql.SQLException;
+    method public void setNString(int, String) throws java.sql.SQLException;
+    method public void setNString(String, String) throws java.sql.SQLException;
+    method public void setNull(int, int) throws java.sql.SQLException;
+    method public void setNull(String, int) throws java.sql.SQLException;
+    method public void setNull(int, int, String) throws java.sql.SQLException;
+    method public void setNull(String, int, String) throws java.sql.SQLException;
+    method public void setObject(int, Object, int, int) throws java.sql.SQLException;
+    method public void setObject(String, Object, int, int) throws java.sql.SQLException;
+    method public void setObject(int, Object, int) throws java.sql.SQLException;
+    method public void setObject(String, Object, int) throws java.sql.SQLException;
+    method public void setObject(String, Object) throws java.sql.SQLException;
+    method public void setObject(int, Object) throws java.sql.SQLException;
+    method public void setPassword(String) throws java.sql.SQLException;
+    method public void setQueryTimeout(int) throws java.sql.SQLException;
+    method public void setReadOnly(boolean) throws java.sql.SQLException;
+    method public void setRef(int, java.sql.Ref) throws java.sql.SQLException;
+    method public void setRowId(int, java.sql.RowId) throws java.sql.SQLException;
+    method public void setRowId(String, java.sql.RowId) throws java.sql.SQLException;
+    method public void setSQLXML(int, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setSQLXML(String, java.sql.SQLXML) throws java.sql.SQLException;
+    method public void setShort(int, short) throws java.sql.SQLException;
+    method public void setShort(String, short) throws java.sql.SQLException;
+    method public void setString(int, String) throws java.sql.SQLException;
+    method public void setString(String, String) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(int, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time) throws java.sql.SQLException;
+    method public void setTime(String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp) throws java.sql.SQLException;
+    method public void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTimestamp(String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException;
+    method public void setTransactionIsolation(int) throws java.sql.SQLException;
+    method public void setType(int) throws java.sql.SQLException;
+    method public void setTypeMap(java.util.Map<java.lang.String,java.lang.Class<?>>) throws java.sql.SQLException;
+    method public void setURL(int, java.net.URL) throws java.sql.SQLException;
+    method public void setUrl(String) throws java.sql.SQLException;
+    method public void setUsername(String) throws java.sql.SQLException;
+  }
+
+  public class RowSetEvent extends java.util.EventObject {
+    ctor public RowSetEvent(javax.sql.RowSet);
+  }
+
+  public interface RowSetInternal {
+    method public java.sql.Connection getConnection() throws java.sql.SQLException;
+    method public java.sql.ResultSet getOriginal() throws java.sql.SQLException;
+    method public java.sql.ResultSet getOriginalRow() throws java.sql.SQLException;
+    method public Object[] getParams() throws java.sql.SQLException;
+    method public void setMetaData(javax.sql.RowSetMetaData) throws java.sql.SQLException;
+  }
+
+  public interface RowSetListener extends java.util.EventListener {
+    method public void cursorMoved(javax.sql.RowSetEvent);
+    method public void rowChanged(javax.sql.RowSetEvent);
+    method public void rowSetChanged(javax.sql.RowSetEvent);
+  }
+
+  public interface RowSetMetaData extends java.sql.ResultSetMetaData {
+    method public void setAutoIncrement(int, boolean) throws java.sql.SQLException;
+    method public void setCaseSensitive(int, boolean) throws java.sql.SQLException;
+    method public void setCatalogName(int, String) throws java.sql.SQLException;
+    method public void setColumnCount(int) throws java.sql.SQLException;
+    method public void setColumnDisplaySize(int, int) throws java.sql.SQLException;
+    method public void setColumnLabel(int, String) throws java.sql.SQLException;
+    method public void setColumnName(int, String) throws java.sql.SQLException;
+    method public void setColumnType(int, int) throws java.sql.SQLException;
+    method public void setColumnTypeName(int, String) throws java.sql.SQLException;
+    method public void setCurrency(int, boolean) throws java.sql.SQLException;
+    method public void setNullable(int, int) throws java.sql.SQLException;
+    method public void setPrecision(int, int) throws java.sql.SQLException;
+    method public void setScale(int, int) throws java.sql.SQLException;
+    method public void setSchemaName(int, String) throws java.sql.SQLException;
+    method public void setSearchable(int, boolean) throws java.sql.SQLException;
+    method public void setSigned(int, boolean) throws java.sql.SQLException;
+    method public void setTableName(int, String) throws java.sql.SQLException;
+  }
+
+  public interface RowSetReader {
+    method public void readData(javax.sql.RowSetInternal) throws java.sql.SQLException;
+  }
+
+  public interface RowSetWriter {
+    method public boolean writeData(javax.sql.RowSetInternal) throws java.sql.SQLException;
+  }
+
+  public class StatementEvent extends java.util.EventObject {
+    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement);
+    ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException);
+    method public java.sql.SQLException getSQLException();
+    method public java.sql.PreparedStatement getStatement();
+  }
+
+  public interface StatementEventListener extends java.util.EventListener {
+    method public void statementClosed(javax.sql.StatementEvent);
+    method public void statementErrorOccurred(javax.sql.StatementEvent);
+  }
+
+}
+
+package javax.xml {
+
+  public final class XMLConstants {
+    field public static final String DEFAULT_NS_PREFIX = "";
+    field public static final String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing";
+    field public static final String NULL_NS_URI = "";
+    field public static final String RELAXNG_NS_URI = "http://relaxng.org/ns/structure/1.0";
+    field public static final String W3C_XML_SCHEMA_INSTANCE_NS_URI = "http://www.w3.org/2001/XMLSchema-instance";
+    field public static final String W3C_XML_SCHEMA_NS_URI = "http://www.w3.org/2001/XMLSchema";
+    field public static final String W3C_XPATH_DATATYPE_NS_URI = "http://www.w3.org/2003/11/xpath-datatypes";
+    field public static final String XMLNS_ATTRIBUTE = "xmlns";
+    field public static final String XMLNS_ATTRIBUTE_NS_URI = "http://www.w3.org/2000/xmlns/";
+    field public static final String XML_DTD_NS_URI = "http://www.w3.org/TR/REC-xml";
+    field public static final String XML_NS_PREFIX = "xml";
+    field public static final String XML_NS_URI = "http://www.w3.org/XML/1998/namespace";
+  }
+
+}
+
+package javax.xml.datatype {
+
+  public class DatatypeConfigurationException extends java.lang.Exception {
+    ctor public DatatypeConfigurationException();
+    ctor public DatatypeConfigurationException(String);
+    ctor public DatatypeConfigurationException(String, Throwable);
+    ctor public DatatypeConfigurationException(Throwable);
+  }
+
+  public final class DatatypeConstants {
+    field public static final int APRIL = 4; // 0x4
+    field public static final int AUGUST = 8; // 0x8
+    field public static final javax.xml.namespace.QName DATE;
+    field public static final javax.xml.namespace.QName DATETIME;
+    field public static final javax.xml.datatype.DatatypeConstants.Field DAYS;
+    field public static final int DECEMBER = 12; // 0xc
+    field public static final javax.xml.namespace.QName DURATION;
+    field public static final javax.xml.namespace.QName DURATION_DAYTIME;
+    field public static final javax.xml.namespace.QName DURATION_YEARMONTH;
+    field public static final int EQUAL = 0; // 0x0
+    field public static final int FEBRUARY = 2; // 0x2
+    field public static final int FIELD_UNDEFINED = -2147483648; // 0x80000000
+    field public static final javax.xml.namespace.QName GDAY;
+    field public static final javax.xml.namespace.QName GMONTH;
+    field public static final javax.xml.namespace.QName GMONTHDAY;
+    field public static final int GREATER = 1; // 0x1
+    field public static final javax.xml.namespace.QName GYEAR;
+    field public static final javax.xml.namespace.QName GYEARMONTH;
+    field public static final javax.xml.datatype.DatatypeConstants.Field HOURS;
+    field public static final int INDETERMINATE = 2; // 0x2
+    field public static final int JANUARY = 1; // 0x1
+    field public static final int JULY = 7; // 0x7
+    field public static final int JUNE = 6; // 0x6
+    field public static final int LESSER = -1; // 0xffffffff
+    field public static final int MARCH = 3; // 0x3
+    field public static final int MAX_TIMEZONE_OFFSET = -840; // 0xfffffcb8
+    field public static final int MAY = 5; // 0x5
+    field public static final javax.xml.datatype.DatatypeConstants.Field MINUTES;
+    field public static final int MIN_TIMEZONE_OFFSET = 840; // 0x348
+    field public static final javax.xml.datatype.DatatypeConstants.Field MONTHS;
+    field public static final int NOVEMBER = 11; // 0xb
+    field public static final int OCTOBER = 10; // 0xa
+    field public static final javax.xml.datatype.DatatypeConstants.Field SECONDS;
+    field public static final int SEPTEMBER = 9; // 0x9
+    field public static final javax.xml.namespace.QName TIME;
+    field public static final javax.xml.datatype.DatatypeConstants.Field YEARS;
+  }
+
+  public static final class DatatypeConstants.Field {
+    method public int getId();
+  }
+
+  public abstract class DatatypeFactory {
+    ctor protected DatatypeFactory();
+    method public abstract javax.xml.datatype.Duration newDuration(String);
+    method public abstract javax.xml.datatype.Duration newDuration(long);
+    method public abstract javax.xml.datatype.Duration newDuration(boolean, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigDecimal);
+    method public javax.xml.datatype.Duration newDuration(boolean, int, int, int, int, int, int);
+    method public javax.xml.datatype.Duration newDurationDayTime(String);
+    method public javax.xml.datatype.Duration newDurationDayTime(long);
+    method public javax.xml.datatype.Duration newDurationDayTime(boolean, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger, java.math.BigInteger);
+    method public javax.xml.datatype.Duration newDurationDayTime(boolean, int, int, int, int);
+    method public javax.xml.datatype.Duration newDurationYearMonth(String);
+    method public javax.xml.datatype.Duration newDurationYearMonth(long);
+    method public javax.xml.datatype.Duration newDurationYearMonth(boolean, java.math.BigInteger, java.math.BigInteger);
+    method public javax.xml.datatype.Duration newDurationYearMonth(boolean, int, int);
+    method public static javax.xml.datatype.DatatypeFactory newInstance() throws javax.xml.datatype.DatatypeConfigurationException;
+    method public static javax.xml.datatype.DatatypeFactory newInstance(String, ClassLoader) throws javax.xml.datatype.DatatypeConfigurationException;
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar();
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(String);
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.util.GregorianCalendar);
+    method public abstract javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(java.math.BigInteger, int, int, int, int, int, java.math.BigDecimal, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendar(int, int, int, int, int, int, int, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarDate(int, int, int, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, java.math.BigDecimal, int);
+    method public javax.xml.datatype.XMLGregorianCalendar newXMLGregorianCalendarTime(int, int, int, int, int);
+    field public static final String DATATYPEFACTORY_IMPLEMENTATION_CLASS;
+    field public static final String DATATYPEFACTORY_PROPERTY = "javax.xml.datatype.DatatypeFactory";
+  }
+
+  public abstract class Duration {
+    ctor public Duration();
+    method public abstract javax.xml.datatype.Duration add(javax.xml.datatype.Duration);
+    method public abstract void addTo(java.util.Calendar);
+    method public void addTo(java.util.Date);
+    method public abstract int compare(javax.xml.datatype.Duration);
+    method public int getDays();
+    method public abstract Number getField(javax.xml.datatype.DatatypeConstants.Field);
+    method public int getHours();
+    method public int getMinutes();
+    method public int getMonths();
+    method public int getSeconds();
+    method public abstract int getSign();
+    method public long getTimeInMillis(java.util.Calendar);
+    method public long getTimeInMillis(java.util.Date);
+    method public javax.xml.namespace.QName getXMLSchemaType();
+    method public int getYears();
+    method public abstract int hashCode();
+    method public boolean isLongerThan(javax.xml.datatype.Duration);
+    method public abstract boolean isSet(javax.xml.datatype.DatatypeConstants.Field);
+    method public boolean isShorterThan(javax.xml.datatype.Duration);
+    method public javax.xml.datatype.Duration multiply(int);
+    method public abstract javax.xml.datatype.Duration multiply(java.math.BigDecimal);
+    method public abstract javax.xml.datatype.Duration negate();
+    method public abstract javax.xml.datatype.Duration normalizeWith(java.util.Calendar);
+    method public javax.xml.datatype.Duration subtract(javax.xml.datatype.Duration);
+  }
+
+  public abstract class XMLGregorianCalendar implements java.lang.Cloneable {
+    ctor public XMLGregorianCalendar();
+    method public abstract void add(javax.xml.datatype.Duration);
+    method public abstract void clear();
+    method public abstract Object clone();
+    method public abstract int compare(javax.xml.datatype.XMLGregorianCalendar);
+    method public abstract int getDay();
+    method public abstract java.math.BigInteger getEon();
+    method public abstract java.math.BigInteger getEonAndYear();
+    method public abstract java.math.BigDecimal getFractionalSecond();
+    method public abstract int getHour();
+    method public int getMillisecond();
+    method public abstract int getMinute();
+    method public abstract int getMonth();
+    method public abstract int getSecond();
+    method public abstract java.util.TimeZone getTimeZone(int);
+    method public abstract int getTimezone();
+    method public abstract javax.xml.namespace.QName getXMLSchemaType();
+    method public abstract int getYear();
+    method public abstract boolean isValid();
+    method public abstract javax.xml.datatype.XMLGregorianCalendar normalize();
+    method public abstract void reset();
+    method public abstract void setDay(int);
+    method public abstract void setFractionalSecond(java.math.BigDecimal);
+    method public abstract void setHour(int);
+    method public abstract void setMillisecond(int);
+    method public abstract void setMinute(int);
+    method public abstract void setMonth(int);
+    method public abstract void setSecond(int);
+    method public void setTime(int, int, int);
+    method public void setTime(int, int, int, java.math.BigDecimal);
+    method public void setTime(int, int, int, int);
+    method public abstract void setTimezone(int);
+    method public abstract void setYear(java.math.BigInteger);
+    method public abstract void setYear(int);
+    method public abstract java.util.GregorianCalendar toGregorianCalendar();
+    method public abstract java.util.GregorianCalendar toGregorianCalendar(java.util.TimeZone, java.util.Locale, javax.xml.datatype.XMLGregorianCalendar);
+    method public abstract String toXMLFormat();
+  }
+
+}
+
+package javax.xml.namespace {
+
+  public interface NamespaceContext {
+    method public String getNamespaceURI(String);
+    method public String getPrefix(String);
+    method public java.util.Iterator getPrefixes(String);
+  }
+
+  public class QName implements java.io.Serializable {
+    ctor public QName(String, String);
+    ctor public QName(String, String, String);
+    ctor public QName(String);
+    method public final boolean equals(Object);
+    method public String getLocalPart();
+    method public String getNamespaceURI();
+    method public String getPrefix();
+    method public final int hashCode();
+    method public static javax.xml.namespace.QName valueOf(String);
+  }
+
+}
+
+package javax.xml.parsers {
+
+  public abstract class DocumentBuilder {
+    ctor protected DocumentBuilder();
+    method public abstract org.w3c.dom.DOMImplementation getDOMImplementation();
+    method public javax.xml.validation.Schema getSchema();
+    method public abstract boolean isNamespaceAware();
+    method public abstract boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public abstract org.w3c.dom.Document newDocument();
+    method public org.w3c.dom.Document parse(java.io.InputStream) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.w3c.dom.Document parse(java.io.InputStream, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.w3c.dom.Document parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.w3c.dom.Document parse(java.io.File) throws java.io.IOException, org.xml.sax.SAXException;
+    method public abstract org.w3c.dom.Document parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void reset();
+    method public abstract void setEntityResolver(org.xml.sax.EntityResolver);
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+  }
+
+  public abstract class DocumentBuilderFactory {
+    ctor protected DocumentBuilderFactory();
+    method public abstract Object getAttribute(String) throws java.lang.IllegalArgumentException;
+    method public abstract boolean getFeature(String) throws javax.xml.parsers.ParserConfigurationException;
+    method public javax.xml.validation.Schema getSchema();
+    method public boolean isCoalescing();
+    method public boolean isExpandEntityReferences();
+    method public boolean isIgnoringComments();
+    method public boolean isIgnoringElementContentWhitespace();
+    method public boolean isNamespaceAware();
+    method public boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public abstract javax.xml.parsers.DocumentBuilder newDocumentBuilder() throws javax.xml.parsers.ParserConfigurationException;
+    method public static javax.xml.parsers.DocumentBuilderFactory newInstance();
+    method public static javax.xml.parsers.DocumentBuilderFactory newInstance(String, ClassLoader);
+    method public abstract void setAttribute(String, Object) throws java.lang.IllegalArgumentException;
+    method public void setCoalescing(boolean);
+    method public void setExpandEntityReferences(boolean);
+    method public abstract void setFeature(String, boolean) throws javax.xml.parsers.ParserConfigurationException;
+    method public void setIgnoringComments(boolean);
+    method public void setIgnoringElementContentWhitespace(boolean);
+    method public void setNamespaceAware(boolean);
+    method public void setSchema(javax.xml.validation.Schema);
+    method public void setValidating(boolean);
+    method public void setXIncludeAware(boolean);
+  }
+
+  public class FactoryConfigurationError extends java.lang.Error {
+    ctor public FactoryConfigurationError();
+    ctor public FactoryConfigurationError(String);
+    ctor public FactoryConfigurationError(Exception);
+    ctor public FactoryConfigurationError(Exception, String);
+    method public Exception getException();
+  }
+
+  public class ParserConfigurationException extends java.lang.Exception {
+    ctor public ParserConfigurationException();
+    ctor public ParserConfigurationException(String);
+  }
+
+  public abstract class SAXParser {
+    ctor protected SAXParser();
+    method public abstract org.xml.sax.Parser getParser() throws org.xml.sax.SAXException;
+    method public abstract Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public javax.xml.validation.Schema getSchema();
+    method public abstract org.xml.sax.XMLReader getXMLReader() throws org.xml.sax.SAXException;
+    method public abstract boolean isNamespaceAware();
+    method public abstract boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public void parse(java.io.InputStream, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.InputStream, org.xml.sax.HandlerBase, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.InputStream, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.InputStream, org.xml.sax.helpers.DefaultHandler, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.File, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(java.io.File, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource, org.xml.sax.HandlerBase) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource, org.xml.sax.helpers.DefaultHandler) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void reset();
+    method public abstract void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+  }
+
+  public abstract class SAXParserFactory {
+    ctor protected SAXParserFactory();
+    method public abstract boolean getFeature(String) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public javax.xml.validation.Schema getSchema();
+    method public boolean isNamespaceAware();
+    method public boolean isValidating();
+    method public boolean isXIncludeAware();
+    method public static javax.xml.parsers.SAXParserFactory newInstance();
+    method public static javax.xml.parsers.SAXParserFactory newInstance(String, ClassLoader);
+    method public abstract javax.xml.parsers.SAXParser newSAXParser() throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXException;
+    method public abstract void setFeature(String, boolean) throws javax.xml.parsers.ParserConfigurationException, org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setNamespaceAware(boolean);
+    method public void setSchema(javax.xml.validation.Schema);
+    method public void setValidating(boolean);
+    method public void setXIncludeAware(boolean);
+  }
+
+}
+
+package javax.xml.transform {
+
+  public interface ErrorListener {
+    method public void error(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException;
+    method public void fatalError(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException;
+    method public void warning(javax.xml.transform.TransformerException) throws javax.xml.transform.TransformerException;
+  }
+
+  public class OutputKeys {
+    field public static final String CDATA_SECTION_ELEMENTS = "cdata-section-elements";
+    field public static final String DOCTYPE_PUBLIC = "doctype-public";
+    field public static final String DOCTYPE_SYSTEM = "doctype-system";
+    field public static final String ENCODING = "encoding";
+    field public static final String INDENT = "indent";
+    field public static final String MEDIA_TYPE = "media-type";
+    field public static final String METHOD = "method";
+    field public static final String OMIT_XML_DECLARATION = "omit-xml-declaration";
+    field public static final String STANDALONE = "standalone";
+    field public static final String VERSION = "version";
+  }
+
+  public interface Result {
+    method public String getSystemId();
+    method public void setSystemId(String);
+    field public static final String PI_DISABLE_OUTPUT_ESCAPING = "javax.xml.transform.disable-output-escaping";
+    field public static final String PI_ENABLE_OUTPUT_ESCAPING = "javax.xml.transform.enable-output-escaping";
+  }
+
+  public interface Source {
+    method public String getSystemId();
+    method public void setSystemId(String);
+  }
+
+  public interface SourceLocator {
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface Templates {
+    method public java.util.Properties getOutputProperties();
+    method public javax.xml.transform.Transformer newTransformer() throws javax.xml.transform.TransformerConfigurationException;
+  }
+
+  public abstract class Transformer {
+    ctor protected Transformer();
+    method public abstract void clearParameters();
+    method public abstract javax.xml.transform.ErrorListener getErrorListener();
+    method public abstract java.util.Properties getOutputProperties();
+    method public abstract String getOutputProperty(String) throws java.lang.IllegalArgumentException;
+    method public abstract Object getParameter(String);
+    method public abstract javax.xml.transform.URIResolver getURIResolver();
+    method public void reset();
+    method public abstract void setErrorListener(javax.xml.transform.ErrorListener) throws java.lang.IllegalArgumentException;
+    method public abstract void setOutputProperties(java.util.Properties);
+    method public abstract void setOutputProperty(String, String) throws java.lang.IllegalArgumentException;
+    method public abstract void setParameter(String, Object);
+    method public abstract void setURIResolver(javax.xml.transform.URIResolver);
+    method public abstract void transform(javax.xml.transform.Source, javax.xml.transform.Result) throws javax.xml.transform.TransformerException;
+  }
+
+  public class TransformerConfigurationException extends javax.xml.transform.TransformerException {
+    ctor public TransformerConfigurationException();
+    ctor public TransformerConfigurationException(String);
+    ctor public TransformerConfigurationException(Throwable);
+    ctor public TransformerConfigurationException(String, Throwable);
+    ctor public TransformerConfigurationException(String, javax.xml.transform.SourceLocator);
+    ctor public TransformerConfigurationException(String, javax.xml.transform.SourceLocator, Throwable);
+  }
+
+  public class TransformerException extends java.lang.Exception {
+    ctor public TransformerException(String);
+    ctor public TransformerException(Throwable);
+    ctor public TransformerException(String, Throwable);
+    ctor public TransformerException(String, javax.xml.transform.SourceLocator);
+    ctor public TransformerException(String, javax.xml.transform.SourceLocator, Throwable);
+    method public Throwable getException();
+    method public String getLocationAsString();
+    method public javax.xml.transform.SourceLocator getLocator();
+    method public String getMessageAndLocation();
+    method public void setLocator(javax.xml.transform.SourceLocator);
+  }
+
+  public abstract class TransformerFactory {
+    ctor protected TransformerFactory();
+    method public abstract javax.xml.transform.Source getAssociatedStylesheet(javax.xml.transform.Source, String, String, String) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract Object getAttribute(String);
+    method public abstract javax.xml.transform.ErrorListener getErrorListener();
+    method public abstract boolean getFeature(String);
+    method public abstract javax.xml.transform.URIResolver getURIResolver();
+    method public static javax.xml.transform.TransformerFactory newInstance() throws javax.xml.transform.TransformerFactoryConfigurationError;
+    method public static javax.xml.transform.TransformerFactory newInstance(String, ClassLoader) throws javax.xml.transform.TransformerFactoryConfigurationError;
+    method public abstract javax.xml.transform.Templates newTemplates(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.Transformer newTransformer(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.Transformer newTransformer() throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract void setAttribute(String, Object);
+    method public abstract void setErrorListener(javax.xml.transform.ErrorListener);
+    method public abstract void setFeature(String, boolean) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract void setURIResolver(javax.xml.transform.URIResolver);
+  }
+
+  public class TransformerFactoryConfigurationError extends java.lang.Error {
+    ctor public TransformerFactoryConfigurationError();
+    ctor public TransformerFactoryConfigurationError(String);
+    ctor public TransformerFactoryConfigurationError(Exception);
+    ctor public TransformerFactoryConfigurationError(Exception, String);
+    method public Exception getException();
+  }
+
+  public interface URIResolver {
+    method public javax.xml.transform.Source resolve(String, String) throws javax.xml.transform.TransformerException;
+  }
+
+}
+
+package javax.xml.transform.dom {
+
+  public interface DOMLocator extends javax.xml.transform.SourceLocator {
+    method public org.w3c.dom.Node getOriginatingNode();
+  }
+
+  public class DOMResult implements javax.xml.transform.Result {
+    ctor public DOMResult();
+    ctor public DOMResult(org.w3c.dom.Node);
+    ctor public DOMResult(org.w3c.dom.Node, String);
+    ctor public DOMResult(org.w3c.dom.Node, org.w3c.dom.Node);
+    ctor public DOMResult(org.w3c.dom.Node, org.w3c.dom.Node, String);
+    method public org.w3c.dom.Node getNextSibling();
+    method public org.w3c.dom.Node getNode();
+    method public String getSystemId();
+    method public void setNextSibling(org.w3c.dom.Node);
+    method public void setNode(org.w3c.dom.Node);
+    method public void setSystemId(String);
+    field public static final String FEATURE = "http://javax.xml.transform.dom.DOMResult/feature";
+  }
+
+  public class DOMSource implements javax.xml.transform.Source {
+    ctor public DOMSource();
+    ctor public DOMSource(org.w3c.dom.Node);
+    ctor public DOMSource(org.w3c.dom.Node, String);
+    method public org.w3c.dom.Node getNode();
+    method public String getSystemId();
+    method public void setNode(org.w3c.dom.Node);
+    method public void setSystemId(String);
+    field public static final String FEATURE = "http://javax.xml.transform.dom.DOMSource/feature";
+  }
+
+}
+
+package javax.xml.transform.sax {
+
+  public class SAXResult implements javax.xml.transform.Result {
+    ctor public SAXResult();
+    ctor public SAXResult(org.xml.sax.ContentHandler);
+    method public org.xml.sax.ContentHandler getHandler();
+    method public org.xml.sax.ext.LexicalHandler getLexicalHandler();
+    method public String getSystemId();
+    method public void setHandler(org.xml.sax.ContentHandler);
+    method public void setLexicalHandler(org.xml.sax.ext.LexicalHandler);
+    method public void setSystemId(String);
+    field public static final String FEATURE = "http://javax.xml.transform.sax.SAXResult/feature";
+  }
+
+  public class SAXSource implements javax.xml.transform.Source {
+    ctor public SAXSource();
+    ctor public SAXSource(org.xml.sax.XMLReader, org.xml.sax.InputSource);
+    ctor public SAXSource(org.xml.sax.InputSource);
+    method public org.xml.sax.InputSource getInputSource();
+    method public String getSystemId();
+    method public org.xml.sax.XMLReader getXMLReader();
+    method public void setInputSource(org.xml.sax.InputSource);
+    method public void setSystemId(String);
+    method public void setXMLReader(org.xml.sax.XMLReader);
+    method public static org.xml.sax.InputSource sourceToInputSource(javax.xml.transform.Source);
+    field public static final String FEATURE = "http://javax.xml.transform.sax.SAXSource/feature";
+  }
+
+  public abstract class SAXTransformerFactory extends javax.xml.transform.TransformerFactory {
+    ctor protected SAXTransformerFactory();
+    method public abstract javax.xml.transform.sax.TemplatesHandler newTemplatesHandler() throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler(javax.xml.transform.Templates) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract javax.xml.transform.sax.TransformerHandler newTransformerHandler() throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract org.xml.sax.XMLFilter newXMLFilter(javax.xml.transform.Source) throws javax.xml.transform.TransformerConfigurationException;
+    method public abstract org.xml.sax.XMLFilter newXMLFilter(javax.xml.transform.Templates) throws javax.xml.transform.TransformerConfigurationException;
+    field public static final String FEATURE = "http://javax.xml.transform.sax.SAXTransformerFactory/feature";
+    field public static final String FEATURE_XMLFILTER = "http://javax.xml.transform.sax.SAXTransformerFactory/feature/xmlfilter";
+  }
+
+  public interface TemplatesHandler extends org.xml.sax.ContentHandler {
+    method public String getSystemId();
+    method public javax.xml.transform.Templates getTemplates();
+    method public void setSystemId(String);
+  }
+
+  public interface TransformerHandler extends org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.ext.LexicalHandler {
+    method public String getSystemId();
+    method public javax.xml.transform.Transformer getTransformer();
+    method public void setResult(javax.xml.transform.Result) throws java.lang.IllegalArgumentException;
+    method public void setSystemId(String);
+  }
+
+}
+
+package javax.xml.transform.stream {
+
+  public class StreamResult implements javax.xml.transform.Result {
+    ctor public StreamResult();
+    ctor public StreamResult(java.io.OutputStream);
+    ctor public StreamResult(java.io.Writer);
+    ctor public StreamResult(String);
+    ctor public StreamResult(java.io.File);
+    method public java.io.OutputStream getOutputStream();
+    method public String getSystemId();
+    method public java.io.Writer getWriter();
+    method public void setOutputStream(java.io.OutputStream);
+    method public void setSystemId(String);
+    method public void setSystemId(java.io.File);
+    method public void setWriter(java.io.Writer);
+    field public static final String FEATURE = "http://javax.xml.transform.stream.StreamResult/feature";
+  }
+
+  public class StreamSource implements javax.xml.transform.Source {
+    ctor public StreamSource();
+    ctor public StreamSource(java.io.InputStream);
+    ctor public StreamSource(java.io.InputStream, String);
+    ctor public StreamSource(java.io.Reader);
+    ctor public StreamSource(java.io.Reader, String);
+    ctor public StreamSource(String);
+    ctor public StreamSource(java.io.File);
+    method public java.io.InputStream getInputStream();
+    method public String getPublicId();
+    method public java.io.Reader getReader();
+    method public String getSystemId();
+    method public void setInputStream(java.io.InputStream);
+    method public void setPublicId(String);
+    method public void setReader(java.io.Reader);
+    method public void setSystemId(String);
+    method public void setSystemId(java.io.File);
+    field public static final String FEATURE = "http://javax.xml.transform.stream.StreamSource/feature";
+  }
+
+}
+
+package javax.xml.validation {
+
+  public abstract class Schema {
+    ctor protected Schema();
+    method public abstract javax.xml.validation.Validator newValidator();
+    method public abstract javax.xml.validation.ValidatorHandler newValidatorHandler();
+  }
+
+  public abstract class SchemaFactory {
+    ctor protected SchemaFactory();
+    method public abstract org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver();
+    method public abstract boolean isSchemaLanguageSupported(String);
+    method public static javax.xml.validation.SchemaFactory newInstance(String);
+    method public static javax.xml.validation.SchemaFactory newInstance(String, String, ClassLoader);
+    method public javax.xml.validation.Schema newSchema(javax.xml.transform.Source) throws org.xml.sax.SAXException;
+    method public javax.xml.validation.Schema newSchema(java.io.File) throws org.xml.sax.SAXException;
+    method public javax.xml.validation.Schema newSchema(java.net.URL) throws org.xml.sax.SAXException;
+    method public abstract javax.xml.validation.Schema newSchema(javax.xml.transform.Source[]) throws org.xml.sax.SAXException;
+    method public abstract javax.xml.validation.Schema newSchema() throws org.xml.sax.SAXException;
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver);
+  }
+
+  public abstract class SchemaFactoryLoader {
+    ctor protected SchemaFactoryLoader();
+    method public abstract javax.xml.validation.SchemaFactory newFactory(String);
+  }
+
+  public abstract class TypeInfoProvider {
+    ctor protected TypeInfoProvider();
+    method public abstract org.w3c.dom.TypeInfo getAttributeTypeInfo(int);
+    method public abstract org.w3c.dom.TypeInfo getElementTypeInfo();
+    method public abstract boolean isIdAttribute(int);
+    method public abstract boolean isSpecified(int);
+  }
+
+  public abstract class Validator {
+    ctor protected Validator();
+    method public abstract org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver();
+    method public abstract void reset();
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver);
+    method public void validate(javax.xml.transform.Source) throws java.io.IOException, org.xml.sax.SAXException;
+    method public abstract void validate(javax.xml.transform.Source, javax.xml.transform.Result) throws java.io.IOException, org.xml.sax.SAXException;
+  }
+
+  public abstract class ValidatorHandler implements org.xml.sax.ContentHandler {
+    ctor protected ValidatorHandler();
+    method public abstract org.xml.sax.ContentHandler getContentHandler();
+    method public abstract org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract org.w3c.dom.ls.LSResourceResolver getResourceResolver();
+    method public abstract javax.xml.validation.TypeInfoProvider getTypeInfoProvider();
+    method public abstract void setContentHandler(org.xml.sax.ContentHandler);
+    method public abstract void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public abstract void setResourceResolver(org.w3c.dom.ls.LSResourceResolver);
+  }
+
+}
+
+package javax.xml.xpath {
+
+  public interface XPath {
+    method public javax.xml.xpath.XPathExpression compile(String) throws javax.xml.xpath.XPathExpressionException;
+    method public Object evaluate(String, Object, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(String, Object) throws javax.xml.xpath.XPathExpressionException;
+    method public Object evaluate(String, org.xml.sax.InputSource, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(String, org.xml.sax.InputSource) throws javax.xml.xpath.XPathExpressionException;
+    method public javax.xml.namespace.NamespaceContext getNamespaceContext();
+    method public javax.xml.xpath.XPathFunctionResolver getXPathFunctionResolver();
+    method public javax.xml.xpath.XPathVariableResolver getXPathVariableResolver();
+    method public void reset();
+    method public void setNamespaceContext(javax.xml.namespace.NamespaceContext);
+    method public void setXPathFunctionResolver(javax.xml.xpath.XPathFunctionResolver);
+    method public void setXPathVariableResolver(javax.xml.xpath.XPathVariableResolver);
+  }
+
+  public class XPathConstants {
+    field public static final javax.xml.namespace.QName BOOLEAN;
+    field public static final String DOM_OBJECT_MODEL = "http://java.sun.com/jaxp/xpath/dom";
+    field public static final javax.xml.namespace.QName NODE;
+    field public static final javax.xml.namespace.QName NODESET;
+    field public static final javax.xml.namespace.QName NUMBER;
+    field public static final javax.xml.namespace.QName STRING;
+  }
+
+  public class XPathException extends java.lang.Exception {
+    ctor public XPathException(String);
+    ctor public XPathException(Throwable);
+  }
+
+  public interface XPathExpression {
+    method public Object evaluate(Object, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(Object) throws javax.xml.xpath.XPathExpressionException;
+    method public Object evaluate(org.xml.sax.InputSource, javax.xml.namespace.QName) throws javax.xml.xpath.XPathExpressionException;
+    method public String evaluate(org.xml.sax.InputSource) throws javax.xml.xpath.XPathExpressionException;
+  }
+
+  public class XPathExpressionException extends javax.xml.xpath.XPathException {
+    ctor public XPathExpressionException(String);
+    ctor public XPathExpressionException(Throwable);
+  }
+
+  public abstract class XPathFactory {
+    ctor protected XPathFactory();
+    method public abstract boolean getFeature(String) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public abstract boolean isObjectModelSupported(String);
+    method public static final javax.xml.xpath.XPathFactory newInstance();
+    method public static final javax.xml.xpath.XPathFactory newInstance(String) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public static javax.xml.xpath.XPathFactory newInstance(String, String, ClassLoader) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public abstract javax.xml.xpath.XPath newXPath();
+    method public abstract void setFeature(String, boolean) throws javax.xml.xpath.XPathFactoryConfigurationException;
+    method public abstract void setXPathFunctionResolver(javax.xml.xpath.XPathFunctionResolver);
+    method public abstract void setXPathVariableResolver(javax.xml.xpath.XPathVariableResolver);
+    field public static final String DEFAULT_OBJECT_MODEL_URI = "http://java.sun.com/jaxp/xpath/dom";
+    field public static final String DEFAULT_PROPERTY_NAME = "javax.xml.xpath.XPathFactory";
+  }
+
+  public class XPathFactoryConfigurationException extends javax.xml.xpath.XPathException {
+    ctor public XPathFactoryConfigurationException(String);
+    ctor public XPathFactoryConfigurationException(Throwable);
+  }
+
+  public interface XPathFunction {
+    method public Object evaluate(java.util.List) throws javax.xml.xpath.XPathFunctionException;
+  }
+
+  public class XPathFunctionException extends javax.xml.xpath.XPathExpressionException {
+    ctor public XPathFunctionException(String);
+    ctor public XPathFunctionException(Throwable);
+  }
+
+  public interface XPathFunctionResolver {
+    method public javax.xml.xpath.XPathFunction resolveFunction(javax.xml.namespace.QName, int);
+  }
+
+  public interface XPathVariableResolver {
+    method public Object resolveVariable(javax.xml.namespace.QName);
+  }
+
+}
+
+package org.json {
+
+  public class JSONArray {
+    ctor public JSONArray();
+    ctor public JSONArray(java.util.Collection);
+    ctor public JSONArray(org.json.JSONTokener) throws org.json.JSONException;
+    ctor public JSONArray(String) throws org.json.JSONException;
+    ctor public JSONArray(Object) throws org.json.JSONException;
+    method public Object get(int) throws org.json.JSONException;
+    method public boolean getBoolean(int) throws org.json.JSONException;
+    method public double getDouble(int) throws org.json.JSONException;
+    method public int getInt(int) throws org.json.JSONException;
+    method public org.json.JSONArray getJSONArray(int) throws org.json.JSONException;
+    method public org.json.JSONObject getJSONObject(int) throws org.json.JSONException;
+    method public long getLong(int) throws org.json.JSONException;
+    method public String getString(int) throws org.json.JSONException;
+    method public boolean isNull(int);
+    method public String join(String) throws org.json.JSONException;
+    method public int length();
+    method public Object opt(int);
+    method public boolean optBoolean(int);
+    method public boolean optBoolean(int, boolean);
+    method public double optDouble(int);
+    method public double optDouble(int, double);
+    method public int optInt(int);
+    method public int optInt(int, int);
+    method public org.json.JSONArray optJSONArray(int);
+    method public org.json.JSONObject optJSONObject(int);
+    method public long optLong(int);
+    method public long optLong(int, long);
+    method public String optString(int);
+    method public String optString(int, String);
+    method public org.json.JSONArray put(boolean);
+    method public org.json.JSONArray put(double) throws org.json.JSONException;
+    method public org.json.JSONArray put(int);
+    method public org.json.JSONArray put(long);
+    method public org.json.JSONArray put(Object);
+    method public org.json.JSONArray put(int, boolean) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, double) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, int) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, long) throws org.json.JSONException;
+    method public org.json.JSONArray put(int, Object) throws org.json.JSONException;
+    method public Object remove(int);
+    method public org.json.JSONObject toJSONObject(org.json.JSONArray) throws org.json.JSONException;
+    method public String toString(int) throws org.json.JSONException;
+  }
+
+  public class JSONException extends java.lang.Exception {
+    ctor public JSONException(String);
+    ctor public JSONException(String, Throwable);
+    ctor public JSONException(Throwable);
+  }
+
+  public class JSONObject {
+    ctor public JSONObject();
+    ctor public JSONObject(@NonNull java.util.Map);
+    ctor public JSONObject(@NonNull org.json.JSONTokener) throws org.json.JSONException;
+    ctor public JSONObject(@NonNull String) throws org.json.JSONException;
+    ctor public JSONObject(@NonNull org.json.JSONObject, @NonNull String[]) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject accumulate(@NonNull String, @Nullable Object) throws org.json.JSONException;
+    method @NonNull public Object get(@NonNull String) throws org.json.JSONException;
+    method public boolean getBoolean(@NonNull String) throws org.json.JSONException;
+    method public double getDouble(@NonNull String) throws org.json.JSONException;
+    method public int getInt(@NonNull String) throws org.json.JSONException;
+    method @NonNull public org.json.JSONArray getJSONArray(@NonNull String) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject getJSONObject(@NonNull String) throws org.json.JSONException;
+    method public long getLong(@NonNull String) throws org.json.JSONException;
+    method @NonNull public String getString(@NonNull String) throws org.json.JSONException;
+    method public boolean has(@Nullable String);
+    method public boolean isNull(@Nullable String);
+    method @NonNull public java.util.Iterator<java.lang.String> keys();
+    method public int length();
+    method @Nullable public org.json.JSONArray names();
+    method @NonNull public static String numberToString(@NonNull Number) throws org.json.JSONException;
+    method @Nullable public Object opt(@Nullable String);
+    method public boolean optBoolean(@Nullable String);
+    method public boolean optBoolean(@Nullable String, boolean);
+    method public double optDouble(@Nullable String);
+    method public double optDouble(@Nullable String, double);
+    method public int optInt(@Nullable String);
+    method public int optInt(@Nullable String, int);
+    method @Nullable public org.json.JSONArray optJSONArray(@Nullable String);
+    method @Nullable public org.json.JSONObject optJSONObject(@Nullable String);
+    method public long optLong(@Nullable String);
+    method public long optLong(@Nullable String, long);
+    method @NonNull public String optString(@Nullable String);
+    method @NonNull public String optString(@Nullable String, @NonNull String);
+    method @NonNull public org.json.JSONObject put(@NonNull String, boolean) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, double) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, int) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, long) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject put(@NonNull String, @Nullable Object) throws org.json.JSONException;
+    method @NonNull public org.json.JSONObject putOpt(@Nullable String, @Nullable Object) throws org.json.JSONException;
+    method @NonNull public static String quote(@Nullable String);
+    method @Nullable public Object remove(@Nullable String);
+    method @Nullable public org.json.JSONArray toJSONArray(@Nullable org.json.JSONArray) throws org.json.JSONException;
+    method @NonNull public String toString(int) throws org.json.JSONException;
+    method @Nullable public static Object wrap(@Nullable Object);
+    field @NonNull public static final Object NULL;
+  }
+
+  public class JSONStringer {
+    ctor public JSONStringer();
+    method public org.json.JSONStringer array() throws org.json.JSONException;
+    method public org.json.JSONStringer endArray() throws org.json.JSONException;
+    method public org.json.JSONStringer endObject() throws org.json.JSONException;
+    method public org.json.JSONStringer key(String) throws org.json.JSONException;
+    method public org.json.JSONStringer object() throws org.json.JSONException;
+    method public org.json.JSONStringer value(Object) throws org.json.JSONException;
+    method public org.json.JSONStringer value(boolean) throws org.json.JSONException;
+    method public org.json.JSONStringer value(double) throws org.json.JSONException;
+    method public org.json.JSONStringer value(long) throws org.json.JSONException;
+  }
+
+  public class JSONTokener {
+    ctor public JSONTokener(String);
+    method public void back();
+    method public static int dehexchar(char);
+    method public boolean more();
+    method public char next();
+    method public char next(char) throws org.json.JSONException;
+    method public String next(int) throws org.json.JSONException;
+    method public char nextClean() throws org.json.JSONException;
+    method public String nextString(char) throws org.json.JSONException;
+    method public String nextTo(String);
+    method public String nextTo(char);
+    method public Object nextValue() throws org.json.JSONException;
+    method public void skipPast(String);
+    method public char skipTo(char);
+    method public org.json.JSONException syntaxError(String);
+  }
+
+}
+
+package org.w3c.dom {
+
+  public interface Attr extends org.w3c.dom.Node {
+    method public String getName();
+    method public org.w3c.dom.Element getOwnerElement();
+    method public org.w3c.dom.TypeInfo getSchemaTypeInfo();
+    method public boolean getSpecified();
+    method public String getValue();
+    method public boolean isId();
+    method public void setValue(String) throws org.w3c.dom.DOMException;
+  }
+
+  public interface CDATASection extends org.w3c.dom.Text {
+  }
+
+  public interface CharacterData extends org.w3c.dom.Node {
+    method public void appendData(String) throws org.w3c.dom.DOMException;
+    method public void deleteData(int, int) throws org.w3c.dom.DOMException;
+    method public String getData() throws org.w3c.dom.DOMException;
+    method public int getLength();
+    method public void insertData(int, String) throws org.w3c.dom.DOMException;
+    method public void replaceData(int, int, String) throws org.w3c.dom.DOMException;
+    method public void setData(String) throws org.w3c.dom.DOMException;
+    method public String substringData(int, int) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Comment extends org.w3c.dom.CharacterData {
+  }
+
+  public interface DOMConfiguration {
+    method public boolean canSetParameter(String, Object);
+    method public Object getParameter(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.DOMStringList getParameterNames();
+    method public void setParameter(String, Object) throws org.w3c.dom.DOMException;
+  }
+
+  public interface DOMError {
+    method public org.w3c.dom.DOMLocator getLocation();
+    method public String getMessage();
+    method public Object getRelatedData();
+    method public Object getRelatedException();
+    method public short getSeverity();
+    method public String getType();
+    field public static final short SEVERITY_ERROR = 2; // 0x2
+    field public static final short SEVERITY_FATAL_ERROR = 3; // 0x3
+    field public static final short SEVERITY_WARNING = 1; // 0x1
+  }
+
+  public interface DOMErrorHandler {
+    method public boolean handleError(org.w3c.dom.DOMError);
+  }
+
+  public class DOMException extends java.lang.RuntimeException {
+    ctor public DOMException(short, String);
+    field public static final short DOMSTRING_SIZE_ERR = 2; // 0x2
+    field public static final short HIERARCHY_REQUEST_ERR = 3; // 0x3
+    field public static final short INDEX_SIZE_ERR = 1; // 0x1
+    field public static final short INUSE_ATTRIBUTE_ERR = 10; // 0xa
+    field public static final short INVALID_ACCESS_ERR = 15; // 0xf
+    field public static final short INVALID_CHARACTER_ERR = 5; // 0x5
+    field public static final short INVALID_MODIFICATION_ERR = 13; // 0xd
+    field public static final short INVALID_STATE_ERR = 11; // 0xb
+    field public static final short NAMESPACE_ERR = 14; // 0xe
+    field public static final short NOT_FOUND_ERR = 8; // 0x8
+    field public static final short NOT_SUPPORTED_ERR = 9; // 0x9
+    field public static final short NO_DATA_ALLOWED_ERR = 6; // 0x6
+    field public static final short NO_MODIFICATION_ALLOWED_ERR = 7; // 0x7
+    field public static final short SYNTAX_ERR = 12; // 0xc
+    field public static final short TYPE_MISMATCH_ERR = 17; // 0x11
+    field public static final short VALIDATION_ERR = 16; // 0x10
+    field public static final short WRONG_DOCUMENT_ERR = 4; // 0x4
+    field public short code;
+  }
+
+  public interface DOMImplementation {
+    method public org.w3c.dom.Document createDocument(String, String, org.w3c.dom.DocumentType) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.DocumentType createDocumentType(String, String, String) throws org.w3c.dom.DOMException;
+    method public Object getFeature(String, String);
+    method public boolean hasFeature(String, String);
+  }
+
+  public interface DOMImplementationList {
+    method public int getLength();
+    method public org.w3c.dom.DOMImplementation item(int);
+  }
+
+  public interface DOMImplementationSource {
+    method public org.w3c.dom.DOMImplementation getDOMImplementation(String);
+    method public org.w3c.dom.DOMImplementationList getDOMImplementationList(String);
+  }
+
+  public interface DOMLocator {
+    method public int getByteOffset();
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public org.w3c.dom.Node getRelatedNode();
+    method public String getUri();
+    method public int getUtf16Offset();
+  }
+
+  public interface DOMStringList {
+    method public boolean contains(String);
+    method public int getLength();
+    method public String item(int);
+  }
+
+  public interface Document extends org.w3c.dom.Node {
+    method public org.w3c.dom.Node adoptNode(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr createAttribute(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr createAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.CDATASection createCDATASection(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Comment createComment(String);
+    method public org.w3c.dom.DocumentFragment createDocumentFragment();
+    method public org.w3c.dom.Element createElement(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Element createElementNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.EntityReference createEntityReference(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.ProcessingInstruction createProcessingInstruction(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Text createTextNode(String);
+    method public org.w3c.dom.DocumentType getDoctype();
+    method public org.w3c.dom.Element getDocumentElement();
+    method public String getDocumentURI();
+    method public org.w3c.dom.DOMConfiguration getDomConfig();
+    method public org.w3c.dom.Element getElementById(String);
+    method public org.w3c.dom.NodeList getElementsByTagName(String);
+    method public org.w3c.dom.NodeList getElementsByTagNameNS(String, String);
+    method public org.w3c.dom.DOMImplementation getImplementation();
+    method public String getInputEncoding();
+    method public boolean getStrictErrorChecking();
+    method public String getXmlEncoding();
+    method public boolean getXmlStandalone();
+    method public String getXmlVersion();
+    method public org.w3c.dom.Node importNode(org.w3c.dom.Node, boolean) throws org.w3c.dom.DOMException;
+    method public void normalizeDocument();
+    method public org.w3c.dom.Node renameNode(org.w3c.dom.Node, String, String) throws org.w3c.dom.DOMException;
+    method public void setDocumentURI(String);
+    method public void setStrictErrorChecking(boolean);
+    method public void setXmlStandalone(boolean) throws org.w3c.dom.DOMException;
+    method public void setXmlVersion(String) throws org.w3c.dom.DOMException;
+  }
+
+  public interface DocumentFragment extends org.w3c.dom.Node {
+  }
+
+  public interface DocumentType extends org.w3c.dom.Node {
+    method public org.w3c.dom.NamedNodeMap getEntities();
+    method public String getInternalSubset();
+    method public String getName();
+    method public org.w3c.dom.NamedNodeMap getNotations();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface Element extends org.w3c.dom.Node {
+    method public String getAttribute(String);
+    method public String getAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr getAttributeNode(String);
+    method public org.w3c.dom.Attr getAttributeNodeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.NodeList getElementsByTagName(String);
+    method public org.w3c.dom.NodeList getElementsByTagNameNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.TypeInfo getSchemaTypeInfo();
+    method public String getTagName();
+    method public boolean hasAttribute(String);
+    method public boolean hasAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public void removeAttribute(String) throws org.w3c.dom.DOMException;
+    method public void removeAttributeNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr removeAttributeNode(org.w3c.dom.Attr) throws org.w3c.dom.DOMException;
+    method public void setAttribute(String, String) throws org.w3c.dom.DOMException;
+    method public void setAttributeNS(String, String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr setAttributeNode(org.w3c.dom.Attr) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Attr setAttributeNodeNS(org.w3c.dom.Attr) throws org.w3c.dom.DOMException;
+    method public void setIdAttribute(String, boolean) throws org.w3c.dom.DOMException;
+    method public void setIdAttributeNS(String, String, boolean) throws org.w3c.dom.DOMException;
+    method public void setIdAttributeNode(org.w3c.dom.Attr, boolean) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Entity extends org.w3c.dom.Node {
+    method public String getInputEncoding();
+    method public String getNotationName();
+    method public String getPublicId();
+    method public String getSystemId();
+    method public String getXmlEncoding();
+    method public String getXmlVersion();
+  }
+
+  public interface EntityReference extends org.w3c.dom.Node {
+  }
+
+  public interface NameList {
+    method public boolean contains(String);
+    method public boolean containsNS(String, String);
+    method public int getLength();
+    method public String getName(int);
+    method public String getNamespaceURI(int);
+  }
+
+  public interface NamedNodeMap {
+    method public int getLength();
+    method public org.w3c.dom.Node getNamedItem(String);
+    method public org.w3c.dom.Node getNamedItemNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node item(int);
+    method public org.w3c.dom.Node removeNamedItem(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node removeNamedItemNS(String, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node setNamedItem(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node setNamedItemNS(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Node {
+    method public org.w3c.dom.Node appendChild(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node cloneNode(boolean);
+    method public short compareDocumentPosition(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.NamedNodeMap getAttributes();
+    method public String getBaseURI();
+    method public org.w3c.dom.NodeList getChildNodes();
+    method public Object getFeature(String, String);
+    method public org.w3c.dom.Node getFirstChild();
+    method public org.w3c.dom.Node getLastChild();
+    method public String getLocalName();
+    method public String getNamespaceURI();
+    method public org.w3c.dom.Node getNextSibling();
+    method public String getNodeName();
+    method public short getNodeType();
+    method public String getNodeValue() throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Document getOwnerDocument();
+    method public org.w3c.dom.Node getParentNode();
+    method public String getPrefix();
+    method public org.w3c.dom.Node getPreviousSibling();
+    method public String getTextContent() throws org.w3c.dom.DOMException;
+    method public Object getUserData(String);
+    method public boolean hasAttributes();
+    method public boolean hasChildNodes();
+    method public org.w3c.dom.Node insertBefore(org.w3c.dom.Node, org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public boolean isDefaultNamespace(String);
+    method public boolean isEqualNode(org.w3c.dom.Node);
+    method public boolean isSameNode(org.w3c.dom.Node);
+    method public boolean isSupported(String, String);
+    method public String lookupNamespaceURI(String);
+    method public String lookupPrefix(String);
+    method public void normalize();
+    method public org.w3c.dom.Node removeChild(org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Node replaceChild(org.w3c.dom.Node, org.w3c.dom.Node) throws org.w3c.dom.DOMException;
+    method public void setNodeValue(String) throws org.w3c.dom.DOMException;
+    method public void setPrefix(String) throws org.w3c.dom.DOMException;
+    method public void setTextContent(String) throws org.w3c.dom.DOMException;
+    method public Object setUserData(String, Object, org.w3c.dom.UserDataHandler);
+    field public static final short ATTRIBUTE_NODE = 2; // 0x2
+    field public static final short CDATA_SECTION_NODE = 4; // 0x4
+    field public static final short COMMENT_NODE = 8; // 0x8
+    field public static final short DOCUMENT_FRAGMENT_NODE = 11; // 0xb
+    field public static final short DOCUMENT_NODE = 9; // 0x9
+    field public static final short DOCUMENT_POSITION_CONTAINED_BY = 16; // 0x10
+    field public static final short DOCUMENT_POSITION_CONTAINS = 8; // 0x8
+    field public static final short DOCUMENT_POSITION_DISCONNECTED = 1; // 0x1
+    field public static final short DOCUMENT_POSITION_FOLLOWING = 4; // 0x4
+    field public static final short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 32; // 0x20
+    field public static final short DOCUMENT_POSITION_PRECEDING = 2; // 0x2
+    field public static final short DOCUMENT_TYPE_NODE = 10; // 0xa
+    field public static final short ELEMENT_NODE = 1; // 0x1
+    field public static final short ENTITY_NODE = 6; // 0x6
+    field public static final short ENTITY_REFERENCE_NODE = 5; // 0x5
+    field public static final short NOTATION_NODE = 12; // 0xc
+    field public static final short PROCESSING_INSTRUCTION_NODE = 7; // 0x7
+    field public static final short TEXT_NODE = 3; // 0x3
+  }
+
+  public interface NodeList {
+    method public int getLength();
+    method public org.w3c.dom.Node item(int);
+  }
+
+  public interface Notation extends org.w3c.dom.Node {
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface ProcessingInstruction extends org.w3c.dom.Node {
+    method public String getData();
+    method public String getTarget();
+    method public void setData(String) throws org.w3c.dom.DOMException;
+  }
+
+  public interface Text extends org.w3c.dom.CharacterData {
+    method public String getWholeText();
+    method public boolean isElementContentWhitespace();
+    method public org.w3c.dom.Text replaceWholeText(String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.Text splitText(int) throws org.w3c.dom.DOMException;
+  }
+
+  public interface TypeInfo {
+    method public String getTypeName();
+    method public String getTypeNamespace();
+    method public boolean isDerivedFrom(String, String, int);
+    field public static final int DERIVATION_EXTENSION = 2; // 0x2
+    field public static final int DERIVATION_LIST = 8; // 0x8
+    field public static final int DERIVATION_RESTRICTION = 1; // 0x1
+    field public static final int DERIVATION_UNION = 4; // 0x4
+  }
+
+  public interface UserDataHandler {
+    method public void handle(short, String, Object, org.w3c.dom.Node, org.w3c.dom.Node);
+    field public static final short NODE_ADOPTED = 5; // 0x5
+    field public static final short NODE_CLONED = 1; // 0x1
+    field public static final short NODE_DELETED = 3; // 0x3
+    field public static final short NODE_IMPORTED = 2; // 0x2
+    field public static final short NODE_RENAMED = 4; // 0x4
+  }
+
+}
+
+package org.w3c.dom.ls {
+
+  public interface DOMImplementationLS {
+    method public org.w3c.dom.ls.LSInput createLSInput();
+    method public org.w3c.dom.ls.LSOutput createLSOutput();
+    method public org.w3c.dom.ls.LSParser createLSParser(short, String) throws org.w3c.dom.DOMException;
+    method public org.w3c.dom.ls.LSSerializer createLSSerializer();
+    field public static final short MODE_ASYNCHRONOUS = 2; // 0x2
+    field public static final short MODE_SYNCHRONOUS = 1; // 0x1
+  }
+
+  public class LSException extends java.lang.RuntimeException {
+    ctor public LSException(short, String);
+    field public static final short PARSE_ERR = 81; // 0x51
+    field public static final short SERIALIZE_ERR = 82; // 0x52
+    field public short code;
+  }
+
+  public interface LSInput {
+    method public String getBaseURI();
+    method public java.io.InputStream getByteStream();
+    method public boolean getCertifiedText();
+    method public java.io.Reader getCharacterStream();
+    method public String getEncoding();
+    method public String getPublicId();
+    method public String getStringData();
+    method public String getSystemId();
+    method public void setBaseURI(String);
+    method public void setByteStream(java.io.InputStream);
+    method public void setCertifiedText(boolean);
+    method public void setCharacterStream(java.io.Reader);
+    method public void setEncoding(String);
+    method public void setPublicId(String);
+    method public void setStringData(String);
+    method public void setSystemId(String);
+  }
+
+  public interface LSOutput {
+    method public java.io.OutputStream getByteStream();
+    method public java.io.Writer getCharacterStream();
+    method public String getEncoding();
+    method public String getSystemId();
+    method public void setByteStream(java.io.OutputStream);
+    method public void setCharacterStream(java.io.Writer);
+    method public void setEncoding(String);
+    method public void setSystemId(String);
+  }
+
+  public interface LSParser {
+    method public void abort();
+    method public boolean getAsync();
+    method public boolean getBusy();
+    method public org.w3c.dom.DOMConfiguration getDomConfig();
+    method public org.w3c.dom.ls.LSParserFilter getFilter();
+    method public org.w3c.dom.Document parse(org.w3c.dom.ls.LSInput) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public org.w3c.dom.Document parseURI(String) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public org.w3c.dom.Node parseWithContext(org.w3c.dom.ls.LSInput, org.w3c.dom.Node, short) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public void setFilter(org.w3c.dom.ls.LSParserFilter);
+    field public static final short ACTION_APPEND_AS_CHILDREN = 1; // 0x1
+    field public static final short ACTION_INSERT_AFTER = 4; // 0x4
+    field public static final short ACTION_INSERT_BEFORE = 3; // 0x3
+    field public static final short ACTION_REPLACE = 5; // 0x5
+    field public static final short ACTION_REPLACE_CHILDREN = 2; // 0x2
+  }
+
+  public interface LSParserFilter {
+    method public short acceptNode(org.w3c.dom.Node);
+    method public int getWhatToShow();
+    method public short startElement(org.w3c.dom.Element);
+    field public static final short FILTER_ACCEPT = 1; // 0x1
+    field public static final short FILTER_INTERRUPT = 4; // 0x4
+    field public static final short FILTER_REJECT = 2; // 0x2
+    field public static final short FILTER_SKIP = 3; // 0x3
+  }
+
+  public interface LSResourceResolver {
+    method public org.w3c.dom.ls.LSInput resolveResource(String, String, String, String, String);
+  }
+
+  public interface LSSerializer {
+    method public org.w3c.dom.DOMConfiguration getDomConfig();
+    method public String getNewLine();
+    method public void setNewLine(String);
+    method public boolean write(org.w3c.dom.Node, org.w3c.dom.ls.LSOutput) throws org.w3c.dom.ls.LSException;
+    method public String writeToString(org.w3c.dom.Node) throws org.w3c.dom.DOMException, org.w3c.dom.ls.LSException;
+    method public boolean writeToURI(org.w3c.dom.Node, String) throws org.w3c.dom.ls.LSException;
+  }
+
+}
+
+package org.xml.sax {
+
+  @Deprecated public interface AttributeList {
+    method @Deprecated public int getLength();
+    method @Deprecated public String getName(int);
+    method @Deprecated public String getType(int);
+    method @Deprecated public String getType(String);
+    method @Deprecated public String getValue(int);
+    method @Deprecated public String getValue(String);
+  }
+
+  public interface Attributes {
+    method public int getIndex(String, String);
+    method public int getIndex(String);
+    method public int getLength();
+    method public String getLocalName(int);
+    method public String getQName(int);
+    method public String getType(int);
+    method public String getType(String, String);
+    method public String getType(String);
+    method public String getURI(int);
+    method public String getValue(int);
+    method public String getValue(String, String);
+    method public String getValue(String);
+  }
+
+  public interface ContentHandler {
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String) throws org.xml.sax.SAXException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String) throws org.xml.sax.SAXException;
+  }
+
+  public interface DTDHandler {
+    method public void notationDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void unparsedEntityDecl(String, String, String, String) throws org.xml.sax.SAXException;
+  }
+
+  @Deprecated public interface DocumentHandler {
+    method @Deprecated public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void endDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void endElement(String) throws org.xml.sax.SAXException;
+    method @Deprecated public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method @Deprecated public void setDocumentLocator(org.xml.sax.Locator);
+    method @Deprecated public void startDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void startElement(String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException;
+  }
+
+  public interface EntityResolver {
+    method public org.xml.sax.InputSource resolveEntity(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+  }
+
+  public interface ErrorHandler {
+    method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  @Deprecated public class HandlerBase implements org.xml.sax.DTDHandler org.xml.sax.DocumentHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler {
+    ctor @Deprecated public HandlerBase();
+    method @Deprecated public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void endDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void endElement(String) throws org.xml.sax.SAXException;
+    method @Deprecated public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method @Deprecated public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method @Deprecated public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method @Deprecated public void notationDecl(String, String, String);
+    method @Deprecated public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method @Deprecated public org.xml.sax.InputSource resolveEntity(String, String) throws org.xml.sax.SAXException;
+    method @Deprecated public void setDocumentLocator(org.xml.sax.Locator);
+    method @Deprecated public void startDocument() throws org.xml.sax.SAXException;
+    method @Deprecated public void startElement(String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException;
+    method @Deprecated public void unparsedEntityDecl(String, String, String, String);
+    method @Deprecated public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  public class InputSource {
+    ctor public InputSource();
+    ctor public InputSource(String);
+    ctor public InputSource(java.io.InputStream);
+    ctor public InputSource(java.io.Reader);
+    method public java.io.InputStream getByteStream();
+    method public java.io.Reader getCharacterStream();
+    method public String getEncoding();
+    method public String getPublicId();
+    method public String getSystemId();
+    method public void setByteStream(java.io.InputStream);
+    method public void setCharacterStream(java.io.Reader);
+    method public void setEncoding(String);
+    method public void setPublicId(String);
+    method public void setSystemId(String);
+  }
+
+  public interface Locator {
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  @Deprecated public interface Parser {
+    method @Deprecated public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method @Deprecated public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method @Deprecated public void setDTDHandler(org.xml.sax.DTDHandler);
+    method @Deprecated public void setDocumentHandler(org.xml.sax.DocumentHandler);
+    method @Deprecated public void setEntityResolver(org.xml.sax.EntityResolver);
+    method @Deprecated public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method @Deprecated public void setLocale(java.util.Locale) throws org.xml.sax.SAXException;
+  }
+
+  public class SAXException extends java.lang.Exception {
+    ctor public SAXException();
+    ctor public SAXException(String);
+    ctor public SAXException(Exception);
+    ctor public SAXException(String, Exception);
+    method public Exception getException();
+  }
+
+  public class SAXNotRecognizedException extends org.xml.sax.SAXException {
+    ctor public SAXNotRecognizedException();
+    ctor public SAXNotRecognizedException(String);
+  }
+
+  public class SAXNotSupportedException extends org.xml.sax.SAXException {
+    ctor public SAXNotSupportedException();
+    ctor public SAXNotSupportedException(String);
+  }
+
+  public class SAXParseException extends org.xml.sax.SAXException {
+    ctor public SAXParseException(String, org.xml.sax.Locator);
+    ctor public SAXParseException(String, org.xml.sax.Locator, Exception);
+    ctor public SAXParseException(String, String, String, int, int);
+    ctor public SAXParseException(String, String, String, int, int, Exception);
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+  }
+
+  public interface XMLFilter extends org.xml.sax.XMLReader {
+    method public org.xml.sax.XMLReader getParent();
+    method public void setParent(org.xml.sax.XMLReader);
+  }
+
+  public interface XMLReader {
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+  }
+
+}
+
+package org.xml.sax.ext {
+
+  public interface Attributes2 extends org.xml.sax.Attributes {
+    method public boolean isDeclared(int);
+    method public boolean isDeclared(String);
+    method public boolean isDeclared(String, String);
+    method public boolean isSpecified(int);
+    method public boolean isSpecified(String, String);
+    method public boolean isSpecified(String);
+  }
+
+  public class Attributes2Impl extends org.xml.sax.helpers.AttributesImpl implements org.xml.sax.ext.Attributes2 {
+    ctor public Attributes2Impl();
+    ctor public Attributes2Impl(org.xml.sax.Attributes);
+    method public boolean isDeclared(int);
+    method public boolean isDeclared(String, String);
+    method public boolean isDeclared(String);
+    method public boolean isSpecified(int);
+    method public boolean isSpecified(String, String);
+    method public boolean isSpecified(String);
+    method public void setDeclared(int, boolean);
+    method public void setSpecified(int, boolean);
+  }
+
+  public interface DeclHandler {
+    method public void attributeDecl(String, String, String, String, String) throws org.xml.sax.SAXException;
+    method public void elementDecl(String, String) throws org.xml.sax.SAXException;
+    method public void externalEntityDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void internalEntityDecl(String, String) throws org.xml.sax.SAXException;
+  }
+
+  public class DefaultHandler2 extends org.xml.sax.helpers.DefaultHandler implements org.xml.sax.ext.DeclHandler org.xml.sax.ext.EntityResolver2 org.xml.sax.ext.LexicalHandler {
+    ctor public DefaultHandler2();
+    method public void attributeDecl(String, String, String, String, String) throws org.xml.sax.SAXException;
+    method public void comment(char[], int, int) throws org.xml.sax.SAXException;
+    method public void elementDecl(String, String) throws org.xml.sax.SAXException;
+    method public void endCDATA() throws org.xml.sax.SAXException;
+    method public void endDTD() throws org.xml.sax.SAXException;
+    method public void endEntity(String) throws org.xml.sax.SAXException;
+    method public void externalEntityDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource getExternalSubset(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void internalEntityDecl(String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String, String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void startCDATA() throws org.xml.sax.SAXException;
+    method public void startDTD(String, String, String) throws org.xml.sax.SAXException;
+    method public void startEntity(String) throws org.xml.sax.SAXException;
+  }
+
+  public interface EntityResolver2 extends org.xml.sax.EntityResolver {
+    method public org.xml.sax.InputSource getExternalSubset(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String, String, String) throws java.io.IOException, org.xml.sax.SAXException;
+  }
+
+  public interface LexicalHandler {
+    method public void comment(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endCDATA() throws org.xml.sax.SAXException;
+    method public void endDTD() throws org.xml.sax.SAXException;
+    method public void endEntity(String) throws org.xml.sax.SAXException;
+    method public void startCDATA() throws org.xml.sax.SAXException;
+    method public void startDTD(String, String, String) throws org.xml.sax.SAXException;
+    method public void startEntity(String) throws org.xml.sax.SAXException;
+  }
+
+  public interface Locator2 extends org.xml.sax.Locator {
+    method public String getEncoding();
+    method public String getXMLVersion();
+  }
+
+  public class Locator2Impl extends org.xml.sax.helpers.LocatorImpl implements org.xml.sax.ext.Locator2 {
+    ctor public Locator2Impl();
+    ctor public Locator2Impl(org.xml.sax.Locator);
+    method public String getEncoding();
+    method public String getXMLVersion();
+    method public void setEncoding(String);
+    method public void setXMLVersion(String);
+  }
+
+}
+
+package org.xml.sax.helpers {
+
+  @Deprecated public class AttributeListImpl implements org.xml.sax.AttributeList {
+    ctor @Deprecated public AttributeListImpl();
+    ctor @Deprecated public AttributeListImpl(org.xml.sax.AttributeList);
+    method @Deprecated public void addAttribute(String, String, String);
+    method @Deprecated public void clear();
+    method @Deprecated public int getLength();
+    method @Deprecated public String getName(int);
+    method @Deprecated public String getType(int);
+    method @Deprecated public String getType(String);
+    method @Deprecated public String getValue(int);
+    method @Deprecated public String getValue(String);
+    method @Deprecated public void removeAttribute(String);
+    method @Deprecated public void setAttributeList(org.xml.sax.AttributeList);
+  }
+
+  public class AttributesImpl implements org.xml.sax.Attributes {
+    ctor public AttributesImpl();
+    ctor public AttributesImpl(org.xml.sax.Attributes);
+    method public void addAttribute(String, String, String, String, String);
+    method public void clear();
+    method public int getIndex(String, String);
+    method public int getIndex(String);
+    method public int getLength();
+    method public String getLocalName(int);
+    method public String getQName(int);
+    method public String getType(int);
+    method public String getType(String, String);
+    method public String getType(String);
+    method public String getURI(int);
+    method public String getValue(int);
+    method public String getValue(String, String);
+    method public String getValue(String);
+    method public void removeAttribute(int);
+    method public void setAttribute(int, String, String, String, String, String);
+    method public void setAttributes(org.xml.sax.Attributes);
+    method public void setLocalName(int, String);
+    method public void setQName(int, String);
+    method public void setType(int, String);
+    method public void setURI(int, String);
+    method public void setValue(int, String);
+  }
+
+  public class DefaultHandler implements org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler {
+    ctor public DefaultHandler();
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String) throws org.xml.sax.SAXException;
+    method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void notationDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String) throws org.xml.sax.SAXException;
+    method public void unparsedEntityDecl(String, String, String, String) throws org.xml.sax.SAXException;
+    method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  public class LocatorImpl implements org.xml.sax.Locator {
+    ctor public LocatorImpl();
+    ctor public LocatorImpl(org.xml.sax.Locator);
+    method public int getColumnNumber();
+    method public int getLineNumber();
+    method public String getPublicId();
+    method public String getSystemId();
+    method public void setColumnNumber(int);
+    method public void setLineNumber(int);
+    method public void setPublicId(String);
+    method public void setSystemId(String);
+  }
+
+  public class NamespaceSupport {
+    ctor public NamespaceSupport();
+    method public boolean declarePrefix(String, String);
+    method public java.util.Enumeration getDeclaredPrefixes();
+    method public String getPrefix(String);
+    method public java.util.Enumeration getPrefixes();
+    method public java.util.Enumeration getPrefixes(String);
+    method public String getURI(String);
+    method public boolean isNamespaceDeclUris();
+    method public void popContext();
+    method public String[] processName(String, String[], boolean);
+    method public void pushContext();
+    method public void reset();
+    method public void setNamespaceDeclUris(boolean);
+    field public static final String NSDECL = "http://www.w3.org/xmlns/2000/";
+    field public static final String XMLNS = "http://www.w3.org/XML/1998/namespace";
+  }
+
+  public class ParserAdapter implements org.xml.sax.DocumentHandler org.xml.sax.XMLReader {
+    ctor public ParserAdapter() throws org.xml.sax.SAXException;
+    ctor public ParserAdapter(org.xml.sax.Parser);
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, org.xml.sax.AttributeList) throws org.xml.sax.SAXException;
+  }
+
+  @Deprecated public class ParserFactory {
+    method @Deprecated public static org.xml.sax.Parser makeParser() throws java.lang.ClassCastException, java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.NullPointerException;
+    method @Deprecated public static org.xml.sax.Parser makeParser(String) throws java.lang.ClassCastException, java.lang.ClassNotFoundException, java.lang.IllegalAccessException, java.lang.InstantiationException;
+  }
+
+  public class XMLFilterImpl implements org.xml.sax.ContentHandler org.xml.sax.DTDHandler org.xml.sax.EntityResolver org.xml.sax.ErrorHandler org.xml.sax.XMLFilter {
+    ctor public XMLFilterImpl();
+    ctor public XMLFilterImpl(org.xml.sax.XMLReader);
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String) throws org.xml.sax.SAXException;
+    method public void error(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public void fatalError(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public org.xml.sax.XMLReader getParent();
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void notationDecl(String, String, String) throws org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public org.xml.sax.InputSource resolveEntity(String, String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setParent(org.xml.sax.XMLReader);
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String) throws org.xml.sax.SAXException;
+    method public void unparsedEntityDecl(String, String, String, String) throws org.xml.sax.SAXException;
+    method public void warning(org.xml.sax.SAXParseException) throws org.xml.sax.SAXException;
+  }
+
+  public class XMLReaderAdapter implements org.xml.sax.ContentHandler org.xml.sax.Parser {
+    ctor public XMLReaderAdapter() throws org.xml.sax.SAXException;
+    ctor public XMLReaderAdapter(org.xml.sax.XMLReader);
+    method public void characters(char[], int, int) throws org.xml.sax.SAXException;
+    method public void endDocument() throws org.xml.sax.SAXException;
+    method public void endElement(String, String, String) throws org.xml.sax.SAXException;
+    method public void endPrefixMapping(String);
+    method public void ignorableWhitespace(char[], int, int) throws org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void processingInstruction(String, String) throws org.xml.sax.SAXException;
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setDocumentHandler(org.xml.sax.DocumentHandler);
+    method public void setDocumentLocator(org.xml.sax.Locator);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setLocale(java.util.Locale) throws org.xml.sax.SAXException;
+    method public void skippedEntity(String) throws org.xml.sax.SAXException;
+    method public void startDocument() throws org.xml.sax.SAXException;
+    method public void startElement(String, String, String, org.xml.sax.Attributes) throws org.xml.sax.SAXException;
+    method public void startPrefixMapping(String, String);
+  }
+
+  public final class XMLReaderFactory {
+    method public static org.xml.sax.XMLReader createXMLReader() throws org.xml.sax.SAXException;
+    method public static org.xml.sax.XMLReader createXMLReader(String) throws org.xml.sax.SAXException;
+  }
+
+}
+
+package org.xmlpull.v1 {
+
+  public interface XmlPullParser {
+    method public void defineEntityReplacementText(String, String) throws org.xmlpull.v1.XmlPullParserException;
+    method public int getAttributeCount();
+    method public String getAttributeName(int);
+    method public String getAttributeNamespace(int);
+    method public String getAttributePrefix(int);
+    method public String getAttributeType(int);
+    method public String getAttributeValue(int);
+    method public String getAttributeValue(String, String);
+    method public int getColumnNumber();
+    method public int getDepth();
+    method public int getEventType() throws org.xmlpull.v1.XmlPullParserException;
+    method public boolean getFeature(String);
+    method public String getInputEncoding();
+    method public int getLineNumber();
+    method public String getName();
+    method public String getNamespace(String);
+    method public String getNamespace();
+    method public int getNamespaceCount(int) throws org.xmlpull.v1.XmlPullParserException;
+    method public String getNamespacePrefix(int) throws org.xmlpull.v1.XmlPullParserException;
+    method public String getNamespaceUri(int) throws org.xmlpull.v1.XmlPullParserException;
+    method public String getPositionDescription();
+    method public String getPrefix();
+    method public Object getProperty(String);
+    method public String getText();
+    method public char[] getTextCharacters(int[]);
+    method public boolean isAttributeDefault(int);
+    method public boolean isEmptyElementTag() throws org.xmlpull.v1.XmlPullParserException;
+    method public boolean isWhitespace() throws org.xmlpull.v1.XmlPullParserException;
+    method public int next() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int nextTag() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public String nextText() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public int nextToken() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void require(int, String, String) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void setFeature(String, boolean) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setInput(java.io.Reader) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setInput(java.io.InputStream, String) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setProperty(String, Object) throws org.xmlpull.v1.XmlPullParserException;
+    field public static final int CDSECT = 5; // 0x5
+    field public static final int COMMENT = 9; // 0x9
+    field public static final int DOCDECL = 10; // 0xa
+    field public static final int END_DOCUMENT = 1; // 0x1
+    field public static final int END_TAG = 3; // 0x3
+    field public static final int ENTITY_REF = 6; // 0x6
+    field public static final String FEATURE_PROCESS_DOCDECL = "http://xmlpull.org/v1/doc/features.html#process-docdecl";
+    field public static final String FEATURE_PROCESS_NAMESPACES = "http://xmlpull.org/v1/doc/features.html#process-namespaces";
+    field public static final String FEATURE_REPORT_NAMESPACE_ATTRIBUTES = "http://xmlpull.org/v1/doc/features.html#report-namespace-prefixes";
+    field public static final String FEATURE_VALIDATION = "http://xmlpull.org/v1/doc/features.html#validation";
+    field public static final int IGNORABLE_WHITESPACE = 7; // 0x7
+    field public static final String NO_NAMESPACE = "";
+    field public static final int PROCESSING_INSTRUCTION = 8; // 0x8
+    field public static final int START_DOCUMENT = 0; // 0x0
+    field public static final int START_TAG = 2; // 0x2
+    field public static final int TEXT = 4; // 0x4
+    field public static final String[] TYPES;
+  }
+
+  public class XmlPullParserException extends java.lang.Exception {
+    ctor public XmlPullParserException(String);
+    ctor public XmlPullParserException(String, org.xmlpull.v1.XmlPullParser, Throwable);
+    method public int getColumnNumber();
+    method public Throwable getDetail();
+    method public int getLineNumber();
+    field protected int column;
+    field protected Throwable detail;
+    field protected int row;
+  }
+
+  public class XmlPullParserFactory {
+    ctor protected XmlPullParserFactory();
+    method public boolean getFeature(String);
+    method public boolean isNamespaceAware();
+    method public boolean isValidating();
+    method public static org.xmlpull.v1.XmlPullParserFactory newInstance() throws org.xmlpull.v1.XmlPullParserException;
+    method public static org.xmlpull.v1.XmlPullParserFactory newInstance(String, Class) throws org.xmlpull.v1.XmlPullParserException;
+    method public org.xmlpull.v1.XmlPullParser newPullParser() throws org.xmlpull.v1.XmlPullParserException;
+    method public org.xmlpull.v1.XmlSerializer newSerializer() throws org.xmlpull.v1.XmlPullParserException;
+    method public void setFeature(String, boolean) throws org.xmlpull.v1.XmlPullParserException;
+    method public void setNamespaceAware(boolean);
+    method public void setValidating(boolean);
+    field public static final String PROPERTY_NAME = "org.xmlpull.v1.XmlPullParserFactory";
+    field protected String classNamesLocation;
+    field protected java.util.HashMap<java.lang.String,java.lang.Boolean> features;
+    field protected java.util.ArrayList parserClasses;
+    field protected java.util.ArrayList serializerClasses;
+  }
+
+  public interface XmlSerializer {
+    method public org.xmlpull.v1.XmlSerializer attribute(String, String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void cdsect(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void comment(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void docdecl(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void endDocument() throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer endTag(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void entityRef(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void flush() throws java.io.IOException;
+    method public int getDepth();
+    method public boolean getFeature(String);
+    method public String getName();
+    method public String getNamespace();
+    method public String getPrefix(String, boolean) throws java.lang.IllegalArgumentException;
+    method public Object getProperty(String);
+    method public void ignorableWhitespace(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void processingInstruction(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setFeature(String, boolean) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setOutput(java.io.OutputStream, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setOutput(java.io.Writer) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setPrefix(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setProperty(String, Object) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void startDocument(String, Boolean) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer startTag(String, String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer text(String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public org.xmlpull.v1.XmlSerializer text(char[], int, int) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+  }
+
+}
+
+package org.xmlpull.v1.sax2 {
+
+  public class Driver implements org.xml.sax.Attributes org.xml.sax.Locator org.xml.sax.XMLReader {
+    ctor public Driver() throws org.xmlpull.v1.XmlPullParserException;
+    ctor public Driver(org.xmlpull.v1.XmlPullParser) throws org.xmlpull.v1.XmlPullParserException;
+    method public int getColumnNumber();
+    method public org.xml.sax.ContentHandler getContentHandler();
+    method public org.xml.sax.DTDHandler getDTDHandler();
+    method public org.xml.sax.EntityResolver getEntityResolver();
+    method public org.xml.sax.ErrorHandler getErrorHandler();
+    method public boolean getFeature(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public int getIndex(String, String);
+    method public int getIndex(String);
+    method public int getLength();
+    method public int getLineNumber();
+    method public String getLocalName(int);
+    method public Object getProperty(String) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public String getPublicId();
+    method public String getQName(int);
+    method public String getSystemId();
+    method public String getType(int);
+    method public String getType(String, String);
+    method public String getType(String);
+    method public String getURI(int);
+    method public String getValue(int);
+    method public String getValue(String, String);
+    method public String getValue(String);
+    method public void parse(org.xml.sax.InputSource) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parse(String) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void parseSubTree(org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xml.sax.SAXException;
+    method public void setContentHandler(org.xml.sax.ContentHandler);
+    method public void setDTDHandler(org.xml.sax.DTDHandler);
+    method public void setEntityResolver(org.xml.sax.EntityResolver);
+    method public void setErrorHandler(org.xml.sax.ErrorHandler);
+    method public void setFeature(String, boolean) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method public void setProperty(String, Object) throws org.xml.sax.SAXNotRecognizedException, org.xml.sax.SAXNotSupportedException;
+    method protected void startElement(String, String, String) throws org.xml.sax.SAXException;
+    field protected static final String APACHE_DYNAMIC_VALIDATION_FEATURE = "http://apache.org/xml/features/validation/dynamic";
+    field protected static final String APACHE_SCHEMA_VALIDATION_FEATURE = "http://apache.org/xml/features/validation/schema";
+    field protected static final String DECLARATION_HANDLER_PROPERTY = "http://xml.org/sax/properties/declaration-handler";
+    field protected static final String LEXICAL_HANDLER_PROPERTY = "http://xml.org/sax/properties/lexical-handler";
+    field protected static final String NAMESPACES_FEATURE = "http://xml.org/sax/features/namespaces";
+    field protected static final String NAMESPACE_PREFIXES_FEATURE = "http://xml.org/sax/features/namespace-prefixes";
+    field protected static final String VALIDATION_FEATURE = "http://xml.org/sax/features/validation";
+    field protected org.xml.sax.ContentHandler contentHandler;
+    field protected org.xml.sax.ErrorHandler errorHandler;
+    field protected org.xmlpull.v1.XmlPullParser pp;
+    field protected String systemId;
+  }
+
+}
+
diff --git a/32/public/api/com.android.future.usb.accessory-removed.txt b/32/public/api/com.android.future.usb.accessory-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/com.android.future.usb.accessory-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/com.android.future.usb.accessory.txt b/32/public/api/com.android.future.usb.accessory.txt
new file mode 100644
index 0000000..f17b65a
--- /dev/null
+++ b/32/public/api/com.android.future.usb.accessory.txt
@@ -0,0 +1,26 @@
+// Signature format: 2.0
+package com.android.future.usb {
+
+  public class UsbAccessory {
+    method public String getDescription();
+    method public String getManufacturer();
+    method public String getModel();
+    method public String getSerial();
+    method public String getUri();
+    method public String getVersion();
+  }
+
+  public class UsbManager {
+    method public static com.android.future.usb.UsbAccessory getAccessory(android.content.Intent);
+    method public com.android.future.usb.UsbAccessory[] getAccessoryList();
+    method public static com.android.future.usb.UsbManager getInstance(android.content.Context);
+    method public boolean hasPermission(com.android.future.usb.UsbAccessory);
+    method public android.os.ParcelFileDescriptor openAccessory(com.android.future.usb.UsbAccessory);
+    method public void requestPermission(com.android.future.usb.UsbAccessory, android.app.PendingIntent);
+    field public static final String ACTION_USB_ACCESSORY_ATTACHED = "android.hardware.usb.action.USB_ACCESSORY_ATTACHED";
+    field public static final String ACTION_USB_ACCESSORY_DETACHED = "android.hardware.usb.action.USB_ACCESSORY_DETACHED";
+    field public static final String EXTRA_PERMISSION_GRANTED = "permission";
+  }
+
+}
+
diff --git a/32/public/api/com.android.location.provider-removed.txt b/32/public/api/com.android.location.provider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/com.android.location.provider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/com.android.location.provider.txt b/32/public/api/com.android.location.provider.txt
new file mode 100644
index 0000000..0d81f36
--- /dev/null
+++ b/32/public/api/com.android.location.provider.txt
@@ -0,0 +1,69 @@
+// Signature format: 2.0
+package com.android.location.provider {
+
+  @Deprecated public abstract class FusedProvider {
+    ctor @Deprecated public FusedProvider();
+    method @Deprecated public android.os.IBinder getBinder();
+  }
+
+  @Deprecated public abstract class LocationProviderBase {
+    ctor @Deprecated public LocationProviderBase(String, com.android.location.provider.ProviderPropertiesUnbundled);
+    ctor @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.R) public LocationProviderBase(android.content.Context, String, com.android.location.provider.ProviderPropertiesUnbundled);
+    method @Deprecated public android.os.IBinder getBinder();
+    method @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.R) public boolean isAllowed();
+    method @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.Q) public boolean isEnabled();
+    method @Deprecated protected void onDisable();
+    method @Deprecated protected void onDump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method @Deprecated protected void onEnable();
+    method @Deprecated protected void onFlush(com.android.location.provider.LocationProviderBase.OnFlushCompleteCallback);
+    method @Deprecated protected int onGetStatus(android.os.Bundle);
+    method @Deprecated protected long onGetStatusUpdateTime();
+    method @Deprecated protected void onInit();
+    method @Deprecated protected boolean onSendExtraCommand(@Nullable String, @Nullable android.os.Bundle);
+    method @Deprecated protected abstract void onSetRequest(com.android.location.provider.ProviderRequestUnbundled, android.os.WorkSource);
+    method @Deprecated public void reportLocation(@NonNull android.location.Location);
+    method @Deprecated public void reportLocations(@NonNull java.util.List<android.location.Location>);
+    method @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.Q) public void setAdditionalProviderPackages(java.util.List<java.lang.String>);
+    method @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.R) public void setAllowed(boolean);
+    method @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.Q) public void setEnabled(boolean);
+    method @Deprecated @RequiresApi(android.os.Build.VERSION_CODES.Q) public void setProperties(com.android.location.provider.ProviderPropertiesUnbundled);
+    field @Deprecated public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
+    field @Deprecated public static final String FUSED_PROVIDER = "fused";
+  }
+
+  @Deprecated protected static interface LocationProviderBase.OnFlushCompleteCallback {
+    method @Deprecated public void onFlushComplete();
+  }
+
+  @Deprecated public final class LocationRequestUnbundled {
+    method @Deprecated public long getFastestInterval();
+    method @Deprecated public long getInterval();
+    method @Deprecated @android.location.LocationRequest.Quality public int getQuality();
+    method @Deprecated public float getSmallestDisplacement();
+    method @Deprecated public boolean isLocationSettingsIgnored();
+    field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66
+    field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68
+    field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64
+    field @Deprecated public static final int POWER_HIGH = 203; // 0xcb
+    field @Deprecated public static final int POWER_LOW = 201; // 0xc9
+    field @Deprecated public static final int POWER_NONE = 200; // 0xc8
+  }
+
+  public final class ProviderPropertiesUnbundled {
+    method @NonNull public static com.android.location.provider.ProviderPropertiesUnbundled create(boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int);
+  }
+
+  public final class ProviderRequestUnbundled {
+    method public long getInterval();
+    method @Deprecated @NonNull public java.util.List<com.android.location.provider.LocationRequestUnbundled> getLocationRequests();
+    method @RequiresApi(android.os.Build.VERSION_CODES.S) public long getMaxUpdateDelayMillis();
+    method @android.location.LocationRequest.Quality @RequiresApi(android.os.Build.VERSION_CODES.S) public int getQuality();
+    method public boolean getReportLocation();
+    method @NonNull @RequiresApi(android.os.Build.VERSION_CODES.S) public android.os.WorkSource getWorkSource();
+    method @RequiresApi(android.os.Build.VERSION_CODES.Q) public boolean isLocationSettingsIgnored();
+    method @RequiresApi(android.os.Build.VERSION_CODES.S) public boolean isLowPower();
+    field public static final long INTERVAL_DISABLED = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+}
+
diff --git a/32/public/api/com.android.media.remotedisplay-removed.txt b/32/public/api/com.android.media.remotedisplay-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/com.android.media.remotedisplay-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/com.android.media.remotedisplay.txt b/32/public/api/com.android.media.remotedisplay.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/com.android.media.remotedisplay.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/com.android.media.tv.remoteprovider-removed.txt b/32/public/api/com.android.media.tv.remoteprovider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/com.android.media.tv.remoteprovider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/com.android.media.tv.remoteprovider.txt b/32/public/api/com.android.media.tv.remoteprovider.txt
new file mode 100644
index 0000000..d029f42
--- /dev/null
+++ b/32/public/api/com.android.media.tv.remoteprovider.txt
@@ -0,0 +1,26 @@
+// Signature format: 2.0
+package com.android.media.tv.remoteprovider {
+
+  public abstract class TvRemoteProvider {
+    ctor public TvRemoteProvider(android.content.Context);
+    method public void clearInputBridge(@NonNull android.os.IBinder) throws java.lang.RuntimeException;
+    method public void closeInputBridge(@NonNull android.os.IBinder) throws java.lang.RuntimeException;
+    method public android.os.IBinder getBinder();
+    method public final android.content.Context getContext();
+    method public void onInputBridgeConnected(@NonNull android.os.IBinder);
+    method public void openGamepadBridge(@NonNull android.os.IBinder, @NonNull String) throws java.lang.RuntimeException;
+    method public void openRemoteInputBridge(@NonNull android.os.IBinder, @NonNull String, int, int, int) throws java.lang.RuntimeException;
+    method public void sendGamepadAxisValue(@NonNull android.os.IBinder, int, @FloatRange(from=-1.0F, to=1.0f) float) throws java.lang.RuntimeException;
+    method public void sendGamepadKeyDown(@NonNull android.os.IBinder, int) throws java.lang.RuntimeException;
+    method public void sendGamepadKeyUp(@NonNull android.os.IBinder, int) throws java.lang.RuntimeException;
+    method public void sendKeyDown(@NonNull android.os.IBinder, int) throws java.lang.RuntimeException;
+    method public void sendKeyUp(@NonNull android.os.IBinder, int) throws java.lang.RuntimeException;
+    method public void sendPointerDown(@NonNull android.os.IBinder, int, int, int) throws java.lang.RuntimeException;
+    method public void sendPointerSync(@NonNull android.os.IBinder) throws java.lang.RuntimeException;
+    method public void sendPointerUp(@NonNull android.os.IBinder, int) throws java.lang.RuntimeException;
+    method public void sendTimestamp(@NonNull android.os.IBinder, long) throws java.lang.RuntimeException;
+    field public static final String SERVICE_INTERFACE = "com.android.media.tv.remoteprovider.TvRemoteProvider";
+  }
+
+}
+
diff --git a/32/public/api/com.android.mediadrm.signer-removed.txt b/32/public/api/com.android.mediadrm.signer-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/com.android.mediadrm.signer-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/com.android.mediadrm.signer.txt b/32/public/api/com.android.mediadrm.signer.txt
new file mode 100644
index 0000000..c9298dd
--- /dev/null
+++ b/32/public/api/com.android.mediadrm.signer.txt
@@ -0,0 +1,22 @@
+// Signature format: 2.0
+package com.android.mediadrm.signer {
+
+  public final class MediaDrmSigner {
+    method public static com.android.mediadrm.signer.MediaDrmSigner.CertificateRequest getCertificateRequest(android.media.MediaDrm, int, String);
+    method public static com.android.mediadrm.signer.MediaDrmSigner.Certificate provideCertificateResponse(android.media.MediaDrm, byte[]) throws android.media.DeniedByServerException;
+    method public static byte[] signRSA(android.media.MediaDrm, byte[], String, byte[], byte[]);
+    field public static final int CERTIFICATE_TYPE_X509 = 1; // 0x1
+  }
+
+  public static final class MediaDrmSigner.Certificate {
+    method public byte[] getContent();
+    method public byte[] getWrappedPrivateKey();
+  }
+
+  public static final class MediaDrmSigner.CertificateRequest {
+    method public byte[] getData();
+    method public String getDefaultUrl();
+  }
+
+}
+
diff --git a/32/public/api/com.android.nfc_extras-removed.txt b/32/public/api/com.android.nfc_extras-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/com.android.nfc_extras-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/com.android.nfc_extras.txt b/32/public/api/com.android.nfc_extras.txt
new file mode 100644
index 0000000..47ccddf
--- /dev/null
+++ b/32/public/api/com.android.nfc_extras.txt
@@ -0,0 +1,61 @@
+// Signature format: 2.0
+package com.android.nfc_extras {
+
+  public class EeAlreadyOpenException extends com.android.nfc_extras.EeIOException {
+    ctor public EeAlreadyOpenException();
+    ctor public EeAlreadyOpenException(String);
+  }
+
+  public class EeExternalFieldException extends com.android.nfc_extras.EeIOException {
+    ctor public EeExternalFieldException();
+    ctor public EeExternalFieldException(String);
+  }
+
+  public class EeIOException extends java.io.IOException {
+    ctor public EeIOException();
+    ctor public EeIOException(String);
+  }
+
+  public class EeInitializationException extends com.android.nfc_extras.EeIOException {
+    ctor public EeInitializationException();
+    ctor public EeInitializationException(String);
+  }
+
+  public class EeListenModeException extends com.android.nfc_extras.EeIOException {
+    ctor public EeListenModeException();
+    ctor public EeListenModeException(String);
+  }
+
+  public class EeNfcDisabledException extends com.android.nfc_extras.EeIOException {
+    ctor public EeNfcDisabledException();
+    ctor public EeNfcDisabledException(String);
+  }
+
+  public final class NfcAdapterExtras {
+    method public void authenticate(byte[]);
+    method public static com.android.nfc_extras.NfcAdapterExtras get(android.nfc.NfcAdapter);
+    method public com.android.nfc_extras.NfcAdapterExtras.CardEmulationRoute getCardEmulationRoute();
+    method public String getDriverName();
+    method public com.android.nfc_extras.NfcExecutionEnvironment getEmbeddedExecutionEnvironment();
+    method public void setCardEmulationRoute(com.android.nfc_extras.NfcAdapterExtras.CardEmulationRoute);
+    field public static final String ACTION_RF_FIELD_OFF_DETECTED = "com.android.nfc_extras.action.RF_FIELD_OFF_DETECTED";
+    field public static final String ACTION_RF_FIELD_ON_DETECTED = "com.android.nfc_extras.action.RF_FIELD_ON_DETECTED";
+  }
+
+  public static final class NfcAdapterExtras.CardEmulationRoute {
+    ctor public NfcAdapterExtras.CardEmulationRoute(int, com.android.nfc_extras.NfcExecutionEnvironment);
+    field public static final int ROUTE_OFF = 1; // 0x1
+    field public static final int ROUTE_ON_WHEN_SCREEN_ON = 2; // 0x2
+    field public final com.android.nfc_extras.NfcExecutionEnvironment nfcEe;
+    field public final int route;
+  }
+
+  public class NfcExecutionEnvironment {
+    method public void close() throws java.io.IOException;
+    method public void open() throws com.android.nfc_extras.EeIOException;
+    method public byte[] transceive(byte[]) throws java.io.IOException;
+    field public static final String ACTION_AID_SELECTED = "com.android.nfc_extras.action.AID_SELECTED";
+  }
+
+}
+
diff --git a/32/public/api/conscrypt-coreplatform-removed.txt b/32/public/api/conscrypt-coreplatform-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/conscrypt-coreplatform-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/conscrypt-coreplatform.txt b/32/public/api/conscrypt-coreplatform.txt
new file mode 100644
index 0000000..b645383
--- /dev/null
+++ b/32/public/api/conscrypt-coreplatform.txt
@@ -0,0 +1,100 @@
+// Signature format: 2.0
+package com.android.org.conscrypt {
+
+  public interface CertPinManager {
+  }
+
+  public final class ClientSessionContext implements javax.net.ssl.SSLSessionContext {
+    method public final java.util.Enumeration<byte[]> getIds();
+    method public final javax.net.ssl.SSLSession getSession(byte[]);
+    method public final int getSessionCacheSize();
+    method public final int getSessionTimeout();
+    method public void setPersistentCache(com.android.org.conscrypt.SSLClientSessionCache);
+    method public final void setSessionCacheSize(int) throws java.lang.IllegalArgumentException;
+    method public final void setSessionTimeout(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public final class Conscrypt {
+    method public static javax.net.ssl.X509TrustManager getDefaultX509TrustManager() throws java.security.KeyManagementException;
+  }
+
+  public interface ConscryptCertStore {
+  }
+
+  public final class FileClientSessionCache {
+    method public static com.android.org.conscrypt.SSLClientSessionCache usingDirectory(java.io.File) throws java.io.IOException;
+  }
+
+  public final class OpenSSLProvider extends java.security.Provider {
+    ctor public OpenSSLProvider();
+  }
+
+  public abstract class OpenSSLSocketImpl extends javax.net.ssl.SSLSocket {
+    method public void addHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
+    method public final void connect(java.net.SocketAddress) throws java.io.IOException;
+    method public final void connect(java.net.SocketAddress, int) throws java.io.IOException;
+    method @Deprecated public final byte[] getAlpnSelectedProtocol();
+    method @Deprecated public final byte[] getNpnSelectedProtocol();
+    method public final int getPort();
+    method public final int getSoTimeout() throws java.net.SocketException;
+    method public void removeHandshakeCompletedListener(javax.net.ssl.HandshakeCompletedListener);
+    method public final void sendUrgentData(int) throws java.io.IOException;
+    method @Deprecated public final void setAlpnProtocols(byte[]);
+    method public abstract void setChannelIdPrivateKey(java.security.PrivateKey);
+    method public void setHandshakeTimeout(int) throws java.net.SocketException;
+    method public void setHostname(String);
+    method @Deprecated public final void setNpnProtocols(byte[]);
+    method public final void setOOBInline(boolean) throws java.net.SocketException;
+    method public final void setSoTimeout(int) throws java.net.SocketException;
+    method public void setSoWriteTimeout(int) throws java.net.SocketException;
+    method public abstract void setUseSessionTickets(boolean);
+  }
+
+  public interface SSLClientSessionCache {
+  }
+
+  public final class TrustManagerImpl extends javax.net.ssl.X509ExtendedTrustManager {
+    ctor public TrustManagerImpl(java.security.KeyStore);
+    ctor public TrustManagerImpl(java.security.KeyStore, com.android.org.conscrypt.CertPinManager, com.android.org.conscrypt.ConscryptCertStore);
+    method public void checkClientTrusted(java.security.cert.X509Certificate[], String) throws java.security.cert.CertificateException;
+    method public void checkClientTrusted(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public void checkClientTrusted(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+    method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], String, String) throws java.security.cert.CertificateException;
+    method public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[], String, java.net.Socket) throws java.security.cert.CertificateException;
+    method public java.util.List<java.security.cert.X509Certificate> getTrustedChainForServer(java.security.cert.X509Certificate[], String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException;
+    method public void handleTrustStorageUpdate();
+  }
+
+  public final class TrustedCertificateIndex {
+    ctor public TrustedCertificateIndex();
+    method public java.util.Set<java.security.cert.TrustAnchor> findAllByIssuerAndSignature(java.security.cert.X509Certificate);
+    method public java.security.cert.TrustAnchor findByIssuerAndSignature(java.security.cert.X509Certificate);
+    method public java.security.cert.TrustAnchor findBySubjectAndPublicKey(java.security.cert.X509Certificate);
+    method public java.security.cert.TrustAnchor index(java.security.cert.X509Certificate);
+  }
+
+  public class TrustedCertificateStore implements com.android.org.conscrypt.ConscryptCertStore {
+    ctor public TrustedCertificateStore();
+    method public java.util.Set<java.lang.String> aliases();
+    method public java.util.Set<java.lang.String> allSystemAliases();
+    method public boolean containsAlias(String);
+    method public void deleteCertificateEntry(String) throws java.security.cert.CertificateException, java.io.IOException;
+    method public java.util.Set<java.security.cert.X509Certificate> findAllIssuers(java.security.cert.X509Certificate);
+    method public java.security.cert.X509Certificate findIssuer(java.security.cert.X509Certificate);
+    method public java.security.cert.Certificate getCertificate(String);
+    method public java.security.cert.Certificate getCertificate(String, boolean);
+    method public String getCertificateAlias(java.security.cert.Certificate);
+    method public String getCertificateAlias(java.security.cert.Certificate, boolean);
+    method public java.util.List<java.security.cert.X509Certificate> getCertificateChain(java.security.cert.X509Certificate) throws java.security.cert.CertificateException;
+    method public java.io.File getCertificateFile(java.io.File, java.security.cert.X509Certificate);
+    method public java.util.Date getCreationDate(String);
+    method public java.security.cert.X509Certificate getTrustAnchor(java.security.cert.X509Certificate);
+    method public void installCertificate(java.security.cert.X509Certificate) throws java.security.cert.CertificateException, java.io.IOException;
+    method public static final boolean isUser(String);
+    method public boolean isUserAddedCertificate(java.security.cert.X509Certificate);
+    method public static void setDefaultUserDirectory(java.io.File);
+    method public java.util.Set<java.lang.String> userAliases();
+  }
+
+}
+
diff --git a/32/public/api/conscrypt-removed.txt b/32/public/api/conscrypt-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/conscrypt-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/conscrypt.txt b/32/public/api/conscrypt.txt
new file mode 100644
index 0000000..809495c
--- /dev/null
+++ b/32/public/api/conscrypt.txt
@@ -0,0 +1,17 @@
+// Signature format: 2.0
+package android.net.ssl {
+
+  public class SSLEngines {
+    method @Nullable public static byte[] exportKeyingMaterial(@NonNull javax.net.ssl.SSLEngine, @NonNull String, @Nullable byte[], int) throws javax.net.ssl.SSLException;
+    method public static boolean isSupportedEngine(@NonNull javax.net.ssl.SSLEngine);
+    method public static void setUseSessionTickets(@NonNull javax.net.ssl.SSLEngine, boolean);
+  }
+
+  public class SSLSockets {
+    method @Nullable public static byte[] exportKeyingMaterial(@NonNull javax.net.ssl.SSLSocket, @NonNull String, @Nullable byte[], int) throws javax.net.ssl.SSLException;
+    method public static boolean isSupportedSocket(@NonNull javax.net.ssl.SSLSocket);
+    method public static void setUseSessionTickets(@NonNull javax.net.ssl.SSLSocket, boolean);
+  }
+
+}
+
diff --git a/32/public/api/framework-appsearch-removed.txt b/32/public/api/framework-appsearch-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-appsearch-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-appsearch.txt b/32/public/api/framework-appsearch.txt
new file mode 100644
index 0000000..761405c
--- /dev/null
+++ b/32/public/api/framework-appsearch.txt
@@ -0,0 +1,460 @@
+// Signature format: 2.0
+package android.app.appsearch {
+
+  public final class AppSearchBatchResult<KeyType, ValueType> {
+    method @NonNull public java.util.Map<KeyType,android.app.appsearch.AppSearchResult<ValueType>> getAll();
+    method @NonNull public java.util.Map<KeyType,android.app.appsearch.AppSearchResult<ValueType>> getFailures();
+    method @NonNull public java.util.Map<KeyType,ValueType> getSuccesses();
+    method public boolean isSuccess();
+  }
+
+  public static final class AppSearchBatchResult.Builder<KeyType, ValueType> {
+    ctor public AppSearchBatchResult.Builder();
+    method @NonNull public android.app.appsearch.AppSearchBatchResult<KeyType,ValueType> build();
+    method @NonNull public android.app.appsearch.AppSearchBatchResult.Builder<KeyType,ValueType> setFailure(@NonNull KeyType, int, @Nullable String);
+    method @NonNull public android.app.appsearch.AppSearchBatchResult.Builder<KeyType,ValueType> setResult(@NonNull KeyType, @NonNull android.app.appsearch.AppSearchResult<ValueType>);
+    method @NonNull public android.app.appsearch.AppSearchBatchResult.Builder<KeyType,ValueType> setSuccess(@NonNull KeyType, @Nullable ValueType);
+  }
+
+  public class AppSearchManager {
+    method public void createGlobalSearchSession(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.GlobalSearchSession>>);
+    method public void createSearchSession(@NonNull android.app.appsearch.AppSearchManager.SearchContext, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.AppSearchSession>>);
+  }
+
+  public static final class AppSearchManager.SearchContext {
+    method @NonNull public String getDatabaseName();
+  }
+
+  public static final class AppSearchManager.SearchContext.Builder {
+    ctor public AppSearchManager.SearchContext.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchManager.SearchContext build();
+  }
+
+  public final class AppSearchResult<ValueType> {
+    method @Nullable public String getErrorMessage();
+    method public int getResultCode();
+    method @Nullable public ValueType getResultValue();
+    method public boolean isSuccess();
+    method @NonNull public static <ValueType> android.app.appsearch.AppSearchResult<ValueType> newFailedResult(int, @Nullable String);
+    method @NonNull public static <ValueType> android.app.appsearch.AppSearchResult<ValueType> newSuccessfulResult(@Nullable ValueType);
+    field public static final int RESULT_INTERNAL_ERROR = 2; // 0x2
+    field public static final int RESULT_INVALID_ARGUMENT = 3; // 0x3
+    field public static final int RESULT_INVALID_SCHEMA = 7; // 0x7
+    field public static final int RESULT_IO_ERROR = 4; // 0x4
+    field public static final int RESULT_NOT_FOUND = 6; // 0x6
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_OUT_OF_SPACE = 5; // 0x5
+    field public static final int RESULT_SECURITY_ERROR = 8; // 0x8
+    field public static final int RESULT_UNKNOWN_ERROR = 1; // 0x1
+  }
+
+  public final class AppSearchSchema {
+    method @NonNull public java.util.List<android.app.appsearch.AppSearchSchema.PropertyConfig> getProperties();
+    method @NonNull public String getSchemaType();
+  }
+
+  public static final class AppSearchSchema.BooleanPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.BooleanPropertyConfig.Builder {
+    ctor public AppSearchSchema.BooleanPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.BooleanPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.BooleanPropertyConfig.Builder setCardinality(int);
+  }
+
+  public static final class AppSearchSchema.Builder {
+    ctor public AppSearchSchema.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.Builder addProperty(@NonNull android.app.appsearch.AppSearchSchema.PropertyConfig);
+    method @NonNull public android.app.appsearch.AppSearchSchema build();
+  }
+
+  public static final class AppSearchSchema.BytesPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.BytesPropertyConfig.Builder {
+    ctor public AppSearchSchema.BytesPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.BytesPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.BytesPropertyConfig.Builder setCardinality(int);
+  }
+
+  public static final class AppSearchSchema.DocumentPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+    method @NonNull public String getSchemaType();
+    method public boolean shouldIndexNestedProperties();
+  }
+
+  public static final class AppSearchSchema.DocumentPropertyConfig.Builder {
+    ctor public AppSearchSchema.DocumentPropertyConfig.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.DocumentPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.DocumentPropertyConfig.Builder setCardinality(int);
+    method @NonNull public android.app.appsearch.AppSearchSchema.DocumentPropertyConfig.Builder setShouldIndexNestedProperties(boolean);
+  }
+
+  public static final class AppSearchSchema.DoublePropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.DoublePropertyConfig.Builder {
+    ctor public AppSearchSchema.DoublePropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.DoublePropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.DoublePropertyConfig.Builder setCardinality(int);
+  }
+
+  public static final class AppSearchSchema.LongPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+  }
+
+  public static final class AppSearchSchema.LongPropertyConfig.Builder {
+    ctor public AppSearchSchema.LongPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.LongPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.LongPropertyConfig.Builder setCardinality(int);
+  }
+
+  public abstract static class AppSearchSchema.PropertyConfig {
+    method public int getCardinality();
+    method @NonNull public String getName();
+    field public static final int CARDINALITY_OPTIONAL = 2; // 0x2
+    field public static final int CARDINALITY_REPEATED = 1; // 0x1
+    field public static final int CARDINALITY_REQUIRED = 3; // 0x3
+  }
+
+  public static final class AppSearchSchema.StringPropertyConfig extends android.app.appsearch.AppSearchSchema.PropertyConfig {
+    method public int getIndexingType();
+    method public int getTokenizerType();
+    field public static final int INDEXING_TYPE_EXACT_TERMS = 1; // 0x1
+    field public static final int INDEXING_TYPE_NONE = 0; // 0x0
+    field public static final int INDEXING_TYPE_PREFIXES = 2; // 0x2
+    field public static final int TOKENIZER_TYPE_NONE = 0; // 0x0
+    field public static final int TOKENIZER_TYPE_PLAIN = 1; // 0x1
+  }
+
+  public static final class AppSearchSchema.StringPropertyConfig.Builder {
+    ctor public AppSearchSchema.StringPropertyConfig.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig build();
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig.Builder setCardinality(int);
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig.Builder setIndexingType(int);
+    method @NonNull public android.app.appsearch.AppSearchSchema.StringPropertyConfig.Builder setTokenizerType(int);
+  }
+
+  public final class AppSearchSession implements java.io.Closeable {
+    method public void close();
+    method public void getByDocumentId(@NonNull android.app.appsearch.GetByDocumentIdRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback<java.lang.String,android.app.appsearch.GenericDocument>);
+    method public void getNamespaces(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.util.Set<java.lang.String>>>);
+    method public void getSchema(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.GetSchemaResponse>>);
+    method public void getStorageInfo(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.StorageInfo>>);
+    method public void put(@NonNull android.app.appsearch.PutDocumentsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback<java.lang.String,java.lang.Void>);
+    method public void remove(@NonNull android.app.appsearch.RemoveByDocumentIdRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.appsearch.BatchResultCallback<java.lang.String,java.lang.Void>);
+    method public void remove(@NonNull String, @NonNull android.app.appsearch.SearchSpec, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.lang.Void>>);
+    method public void reportUsage(@NonNull android.app.appsearch.ReportUsageRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.lang.Void>>);
+    method @NonNull public android.app.appsearch.SearchResults search(@NonNull String, @NonNull android.app.appsearch.SearchSpec);
+    method public void setSchema(@NonNull android.app.appsearch.SetSchemaRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<android.app.appsearch.SetSchemaResponse>>);
+  }
+
+  public interface BatchResultCallback<KeyType, ValueType> {
+    method public void onResult(@NonNull android.app.appsearch.AppSearchBatchResult<KeyType,ValueType>);
+    method public default void onSystemError(@Nullable Throwable);
+  }
+
+  public class GenericDocument {
+    ctor protected GenericDocument(@NonNull android.app.appsearch.GenericDocument);
+    method public long getCreationTimestampMillis();
+    method @NonNull public String getId();
+    method public static int getMaxIndexedProperties();
+    method @NonNull public String getNamespace();
+    method @Nullable public Object getProperty(@NonNull String);
+    method public boolean getPropertyBoolean(@NonNull String);
+    method @Nullable public boolean[] getPropertyBooleanArray(@NonNull String);
+    method @Nullable public byte[] getPropertyBytes(@NonNull String);
+    method @Nullable public byte[][] getPropertyBytesArray(@NonNull String);
+    method @Nullable public android.app.appsearch.GenericDocument getPropertyDocument(@NonNull String);
+    method @Nullable public android.app.appsearch.GenericDocument[] getPropertyDocumentArray(@NonNull String);
+    method public double getPropertyDouble(@NonNull String);
+    method @Nullable public double[] getPropertyDoubleArray(@NonNull String);
+    method public long getPropertyLong(@NonNull String);
+    method @Nullable public long[] getPropertyLongArray(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getPropertyNames();
+    method @Nullable public String getPropertyString(@NonNull String);
+    method @Nullable public String[] getPropertyStringArray(@NonNull String);
+    method @NonNull public String getSchemaType();
+    method public int getScore();
+    method public long getTtlMillis();
+  }
+
+  public static class GenericDocument.Builder<BuilderType extends android.app.appsearch.GenericDocument.Builder> {
+    ctor public GenericDocument.Builder(@NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.GenericDocument build();
+    method @NonNull public BuilderType setCreationTimestampMillis(long);
+    method @NonNull public BuilderType setPropertyBoolean(@NonNull String, @NonNull boolean...);
+    method @NonNull public BuilderType setPropertyBytes(@NonNull String, @NonNull byte[]...);
+    method @NonNull public BuilderType setPropertyDocument(@NonNull String, @NonNull android.app.appsearch.GenericDocument...);
+    method @NonNull public BuilderType setPropertyDouble(@NonNull String, @NonNull double...);
+    method @NonNull public BuilderType setPropertyLong(@NonNull String, @NonNull long...);
+    method @NonNull public BuilderType setPropertyString(@NonNull String, @NonNull java.lang.String...);
+    method @NonNull public BuilderType setScore(@IntRange(from=0, to=java.lang.Integer.MAX_VALUE) int);
+    method @NonNull public BuilderType setTtlMillis(long);
+  }
+
+  public final class GetByDocumentIdRequest {
+    method @NonNull public java.util.Set<java.lang.String> getIds();
+    method @NonNull public String getNamespace();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getProjections();
+    field public static final String PROJECTION_SCHEMA_TYPE_WILDCARD = "*";
+  }
+
+  public static final class GetByDocumentIdRequest.Builder {
+    ctor public GetByDocumentIdRequest.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest.Builder addIds(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest.Builder addIds(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest.Builder addProjection(@NonNull String, @NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.GetByDocumentIdRequest build();
+  }
+
+  public final class GetSchemaResponse {
+    method @NonNull public java.util.Set<android.app.appsearch.AppSearchSchema> getSchemas();
+    method @IntRange(from=0) public int getVersion();
+  }
+
+  public static final class GetSchemaResponse.Builder {
+    ctor public GetSchemaResponse.Builder();
+    method @NonNull public android.app.appsearch.GetSchemaResponse.Builder addSchema(@NonNull android.app.appsearch.AppSearchSchema);
+    method @NonNull public android.app.appsearch.GetSchemaResponse build();
+    method @NonNull public android.app.appsearch.GetSchemaResponse.Builder setVersion(@IntRange(from=0) int);
+  }
+
+  public class GlobalSearchSession implements java.io.Closeable {
+    method public void close();
+    method public void reportSystemUsage(@NonNull android.app.appsearch.ReportSystemUsageRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.lang.Void>>);
+    method @NonNull public android.app.appsearch.SearchResults search(@NonNull String, @NonNull android.app.appsearch.SearchSpec);
+  }
+
+  public abstract class Migrator {
+    ctor public Migrator();
+    method @NonNull @WorkerThread public abstract android.app.appsearch.GenericDocument onDowngrade(int, int, @NonNull android.app.appsearch.GenericDocument);
+    method @NonNull @WorkerThread public abstract android.app.appsearch.GenericDocument onUpgrade(int, int, @NonNull android.app.appsearch.GenericDocument);
+    method public abstract boolean shouldMigrate(int, int);
+  }
+
+  public class PackageIdentifier {
+    ctor public PackageIdentifier(@NonNull String, @NonNull byte[]);
+    method @NonNull public String getPackageName();
+    method @NonNull public byte[] getSha256Certificate();
+  }
+
+  public final class PutDocumentsRequest {
+    method @NonNull public java.util.List<android.app.appsearch.GenericDocument> getGenericDocuments();
+  }
+
+  public static final class PutDocumentsRequest.Builder {
+    ctor public PutDocumentsRequest.Builder();
+    method @NonNull public android.app.appsearch.PutDocumentsRequest.Builder addGenericDocuments(@NonNull android.app.appsearch.GenericDocument...);
+    method @NonNull public android.app.appsearch.PutDocumentsRequest.Builder addGenericDocuments(@NonNull java.util.Collection<? extends android.app.appsearch.GenericDocument>);
+    method @NonNull public android.app.appsearch.PutDocumentsRequest build();
+  }
+
+  public final class RemoveByDocumentIdRequest {
+    method @NonNull public java.util.Set<java.lang.String> getIds();
+    method @NonNull public String getNamespace();
+  }
+
+  public static final class RemoveByDocumentIdRequest.Builder {
+    ctor public RemoveByDocumentIdRequest.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.RemoveByDocumentIdRequest.Builder addIds(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.RemoveByDocumentIdRequest.Builder addIds(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.RemoveByDocumentIdRequest build();
+  }
+
+  public final class ReportSystemUsageRequest {
+    method @NonNull public String getDatabaseName();
+    method @NonNull public String getDocumentId();
+    method @NonNull public String getNamespace();
+    method @NonNull public String getPackageName();
+    method public long getUsageTimestampMillis();
+  }
+
+  public static final class ReportSystemUsageRequest.Builder {
+    ctor public ReportSystemUsageRequest.Builder(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.ReportSystemUsageRequest build();
+    method @NonNull public android.app.appsearch.ReportSystemUsageRequest.Builder setUsageTimestampMillis(long);
+  }
+
+  public final class ReportUsageRequest {
+    method @NonNull public String getDocumentId();
+    method @NonNull public String getNamespace();
+    method public long getUsageTimestampMillis();
+  }
+
+  public static final class ReportUsageRequest.Builder {
+    ctor public ReportUsageRequest.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.ReportUsageRequest build();
+    method @NonNull public android.app.appsearch.ReportUsageRequest.Builder setUsageTimestampMillis(long);
+  }
+
+  public final class SearchResult {
+    method @NonNull public String getDatabaseName();
+    method @NonNull public android.app.appsearch.GenericDocument getGenericDocument();
+    method @NonNull public java.util.List<android.app.appsearch.SearchResult.MatchInfo> getMatchInfos();
+    method @NonNull public String getPackageName();
+    method public double getRankingSignal();
+  }
+
+  public static final class SearchResult.Builder {
+    ctor public SearchResult.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.appsearch.SearchResult.Builder addMatchInfo(@NonNull android.app.appsearch.SearchResult.MatchInfo);
+    method @NonNull public android.app.appsearch.SearchResult build();
+    method @NonNull public android.app.appsearch.SearchResult.Builder setGenericDocument(@NonNull android.app.appsearch.GenericDocument);
+    method @NonNull public android.app.appsearch.SearchResult.Builder setRankingSignal(double);
+  }
+
+  public static final class SearchResult.MatchInfo {
+    method @NonNull public CharSequence getExactMatch();
+    method @NonNull public android.app.appsearch.SearchResult.MatchRange getExactMatchRange();
+    method @NonNull public String getFullText();
+    method @NonNull public String getPropertyPath();
+    method @NonNull public CharSequence getSnippet();
+    method @NonNull public android.app.appsearch.SearchResult.MatchRange getSnippetRange();
+  }
+
+  public static final class SearchResult.MatchInfo.Builder {
+    ctor public SearchResult.MatchInfo.Builder(@NonNull String);
+    method @NonNull public android.app.appsearch.SearchResult.MatchInfo build();
+    method @NonNull public android.app.appsearch.SearchResult.MatchInfo.Builder setExactMatchRange(@NonNull android.app.appsearch.SearchResult.MatchRange);
+    method @NonNull public android.app.appsearch.SearchResult.MatchInfo.Builder setSnippetRange(@NonNull android.app.appsearch.SearchResult.MatchRange);
+  }
+
+  public static final class SearchResult.MatchRange {
+    ctor public SearchResult.MatchRange(int, int);
+    method public int getEnd();
+    method public int getStart();
+  }
+
+  public class SearchResults implements java.io.Closeable {
+    method public void close();
+    method public void getNextPage(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.appsearch.AppSearchResult<java.util.List<android.app.appsearch.SearchResult>>>);
+  }
+
+  public final class SearchSpec {
+    method @NonNull public java.util.List<java.lang.String> getFilterNamespaces();
+    method @NonNull public java.util.List<java.lang.String> getFilterPackageNames();
+    method @NonNull public java.util.List<java.lang.String> getFilterSchemas();
+    method public int getMaxSnippetSize();
+    method public int getOrder();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getProjections();
+    method public int getRankingStrategy();
+    method public int getResultCountPerPage();
+    method public int getResultGroupingLimit();
+    method public int getResultGroupingTypeFlags();
+    method public int getSnippetCount();
+    method public int getSnippetCountPerProperty();
+    method public int getTermMatch();
+    field public static final int GROUPING_TYPE_PER_NAMESPACE = 2; // 0x2
+    field public static final int GROUPING_TYPE_PER_PACKAGE = 1; // 0x1
+    field public static final int ORDER_ASCENDING = 1; // 0x1
+    field public static final int ORDER_DESCENDING = 0; // 0x0
+    field public static final String PROJECTION_SCHEMA_TYPE_WILDCARD = "*";
+    field public static final int RANKING_STRATEGY_CREATION_TIMESTAMP = 2; // 0x2
+    field public static final int RANKING_STRATEGY_DOCUMENT_SCORE = 1; // 0x1
+    field public static final int RANKING_STRATEGY_NONE = 0; // 0x0
+    field public static final int RANKING_STRATEGY_RELEVANCE_SCORE = 3; // 0x3
+    field public static final int RANKING_STRATEGY_SYSTEM_USAGE_COUNT = 6; // 0x6
+    field public static final int RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP = 7; // 0x7
+    field public static final int RANKING_STRATEGY_USAGE_COUNT = 4; // 0x4
+    field public static final int RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP = 5; // 0x5
+    field public static final int TERM_MATCH_EXACT_ONLY = 1; // 0x1
+    field public static final int TERM_MATCH_PREFIX = 2; // 0x2
+  }
+
+  public static final class SearchSpec.Builder {
+    ctor public SearchSpec.Builder();
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterNamespaces(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterNamespaces(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterPackageNames(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterPackageNames(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterSchemas(@NonNull java.lang.String...);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterSchemas(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder addProjection(@NonNull String, @NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SearchSpec build();
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setMaxSnippetSize(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setOrder(int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setRankingStrategy(int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setResultCountPerPage(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setResultGrouping(int, int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setSnippetCount(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setSnippetCountPerProperty(@IntRange(from=0, to=0x2710) int);
+    method @NonNull public android.app.appsearch.SearchSpec.Builder setTermMatch(int);
+  }
+
+  public final class SetSchemaRequest {
+    method @NonNull public java.util.Map<java.lang.String,android.app.appsearch.Migrator> getMigrators();
+    method @NonNull public java.util.Set<android.app.appsearch.AppSearchSchema> getSchemas();
+    method @NonNull public java.util.Set<java.lang.String> getSchemasNotDisplayedBySystem();
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<android.app.appsearch.PackageIdentifier>> getSchemasVisibleToPackages();
+    method @IntRange(from=1) public int getVersion();
+    method public boolean isForceOverride();
+  }
+
+  public static final class SetSchemaRequest.Builder {
+    ctor public SetSchemaRequest.Builder();
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder addSchemas(@NonNull android.app.appsearch.AppSearchSchema...);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder addSchemas(@NonNull java.util.Collection<android.app.appsearch.AppSearchSchema>);
+    method @NonNull public android.app.appsearch.SetSchemaRequest build();
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setForceOverride(boolean);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setMigrator(@NonNull String, @NonNull android.app.appsearch.Migrator);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setMigrators(@NonNull java.util.Map<java.lang.String,android.app.appsearch.Migrator>);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setSchemaTypeDisplayedBySystem(@NonNull String, boolean);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setSchemaTypeVisibilityForPackage(@NonNull String, boolean, @NonNull android.app.appsearch.PackageIdentifier);
+    method @NonNull public android.app.appsearch.SetSchemaRequest.Builder setVersion(@IntRange(from=1) int);
+  }
+
+  public class SetSchemaResponse {
+    method @NonNull public java.util.Set<java.lang.String> getDeletedTypes();
+    method @NonNull public java.util.Set<java.lang.String> getIncompatibleTypes();
+    method @NonNull public java.util.Set<java.lang.String> getMigratedTypes();
+    method @NonNull public java.util.List<android.app.appsearch.SetSchemaResponse.MigrationFailure> getMigrationFailures();
+  }
+
+  public static final class SetSchemaResponse.Builder {
+    ctor public SetSchemaResponse.Builder();
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addDeletedType(@NonNull String);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addDeletedTypes(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addIncompatibleType(@NonNull String);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addIncompatibleTypes(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigratedType(@NonNull String);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigratedTypes(@NonNull java.util.Collection<java.lang.String>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigrationFailure(@NonNull android.app.appsearch.SetSchemaResponse.MigrationFailure);
+    method @NonNull public android.app.appsearch.SetSchemaResponse.Builder addMigrationFailures(@NonNull java.util.Collection<android.app.appsearch.SetSchemaResponse.MigrationFailure>);
+    method @NonNull public android.app.appsearch.SetSchemaResponse build();
+  }
+
+  public static class SetSchemaResponse.MigrationFailure {
+    ctor public SetSchemaResponse.MigrationFailure(@NonNull String, @NonNull String, @NonNull String, @NonNull android.app.appsearch.AppSearchResult<?>);
+    method @NonNull public android.app.appsearch.AppSearchResult<java.lang.Void> getAppSearchResult();
+    method @NonNull public String getDocumentId();
+    method @NonNull public String getNamespace();
+    method @NonNull public String getSchemaType();
+  }
+
+  public class StorageInfo {
+    method public int getAliveDocumentsCount();
+    method public int getAliveNamespacesCount();
+    method public long getSizeBytes();
+  }
+
+  public static final class StorageInfo.Builder {
+    ctor public StorageInfo.Builder();
+    method @NonNull public android.app.appsearch.StorageInfo build();
+    method @NonNull public android.app.appsearch.StorageInfo.Builder setAliveDocumentsCount(int);
+    method @NonNull public android.app.appsearch.StorageInfo.Builder setAliveNamespacesCount(int);
+    method @NonNull public android.app.appsearch.StorageInfo.Builder setSizeBytes(long);
+  }
+
+}
+
+package android.app.appsearch.exceptions {
+
+  public class AppSearchException extends java.lang.Exception {
+    ctor public AppSearchException(int);
+    ctor public AppSearchException(int, @Nullable String);
+    ctor public AppSearchException(int, @Nullable String, @Nullable Throwable);
+    method public int getResultCode();
+    method @NonNull public <T> android.app.appsearch.AppSearchResult<T> toAppSearchResult();
+  }
+
+}
+
diff --git a/32/public/api/framework-connectivity-removed.txt b/32/public/api/framework-connectivity-removed.txt
new file mode 100644
index 0000000..303a1e6
--- /dev/null
+++ b/32/public/api/framework-connectivity-removed.txt
@@ -0,0 +1,11 @@
+// Signature format: 2.0
+package android.net {
+
+  public class ConnectivityManager {
+    method @Deprecated public boolean requestRouteToHost(int, int);
+    method @Deprecated public int startUsingNetworkFeature(int, String);
+    method @Deprecated public int stopUsingNetworkFeature(int, String);
+  }
+
+}
+
diff --git a/32/public/api/framework-connectivity.txt b/32/public/api/framework-connectivity.txt
new file mode 100644
index 0000000..33f4d14
--- /dev/null
+++ b/32/public/api/framework-connectivity.txt
@@ -0,0 +1,476 @@
+// Signature format: 2.0
+package android.net {
+
+  public class CaptivePortal implements android.os.Parcelable {
+    method public int describeContents();
+    method public void ignoreNetwork();
+    method public void reportCaptivePortalDismissed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.CaptivePortal> CREATOR;
+  }
+
+  public class ConnectivityDiagnosticsManager {
+    method public void registerConnectivityDiagnosticsCallback(@NonNull android.net.NetworkRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback);
+    method public void unregisterConnectivityDiagnosticsCallback(@NonNull android.net.ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback);
+  }
+
+  public abstract static class ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback {
+    ctor public ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback();
+    method public void onConnectivityReportAvailable(@NonNull android.net.ConnectivityDiagnosticsManager.ConnectivityReport);
+    method public void onDataStallSuspected(@NonNull android.net.ConnectivityDiagnosticsManager.DataStallReport);
+    method public void onNetworkConnectivityReported(@NonNull android.net.Network, boolean);
+  }
+
+  public static final class ConnectivityDiagnosticsManager.ConnectivityReport implements android.os.Parcelable {
+    ctor public ConnectivityDiagnosticsManager.ConnectivityReport(@NonNull android.net.Network, long, @NonNull android.net.LinkProperties, @NonNull android.net.NetworkCapabilities, @NonNull android.os.PersistableBundle);
+    method public int describeContents();
+    method @NonNull public android.os.PersistableBundle getAdditionalInfo();
+    method @NonNull public android.net.LinkProperties getLinkProperties();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method public long getReportTimestamp();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ConnectivityDiagnosticsManager.ConnectivityReport> CREATOR;
+    field public static final String KEY_NETWORK_PROBES_ATTEMPTED_BITMASK = "networkProbesAttempted";
+    field public static final String KEY_NETWORK_PROBES_SUCCEEDED_BITMASK = "networkProbesSucceeded";
+    field public static final String KEY_NETWORK_VALIDATION_RESULT = "networkValidationResult";
+    field public static final int NETWORK_PROBE_DNS = 4; // 0x4
+    field public static final int NETWORK_PROBE_FALLBACK = 32; // 0x20
+    field public static final int NETWORK_PROBE_HTTP = 8; // 0x8
+    field public static final int NETWORK_PROBE_HTTPS = 16; // 0x10
+    field public static final int NETWORK_PROBE_PRIVATE_DNS = 64; // 0x40
+    field public static final int NETWORK_VALIDATION_RESULT_INVALID = 0; // 0x0
+    field public static final int NETWORK_VALIDATION_RESULT_PARTIALLY_VALID = 2; // 0x2
+    field public static final int NETWORK_VALIDATION_RESULT_SKIPPED = 3; // 0x3
+    field public static final int NETWORK_VALIDATION_RESULT_VALID = 1; // 0x1
+  }
+
+  public static final class ConnectivityDiagnosticsManager.DataStallReport implements android.os.Parcelable {
+    ctor public ConnectivityDiagnosticsManager.DataStallReport(@NonNull android.net.Network, long, int, @NonNull android.net.LinkProperties, @NonNull android.net.NetworkCapabilities, @NonNull android.os.PersistableBundle);
+    method public int describeContents();
+    method public int getDetectionMethod();
+    method @NonNull public android.net.LinkProperties getLinkProperties();
+    method @NonNull public android.net.Network getNetwork();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method public long getReportTimestamp();
+    method @NonNull public android.os.PersistableBundle getStallDetails();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ConnectivityDiagnosticsManager.DataStallReport> CREATOR;
+    field public static final int DETECTION_METHOD_DNS_EVENTS = 1; // 0x1
+    field public static final int DETECTION_METHOD_TCP_METRICS = 2; // 0x2
+    field public static final String KEY_DNS_CONSECUTIVE_TIMEOUTS = "dnsConsecutiveTimeouts";
+    field public static final String KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS = "tcpMetricsCollectionPeriodMillis";
+    field public static final String KEY_TCP_PACKET_FAIL_RATE = "tcpPacketFailRate";
+  }
+
+  public class ConnectivityManager {
+    method public void addDefaultNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
+    method public boolean bindProcessToNetwork(@Nullable android.net.Network);
+    method @NonNull public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull android.net.IpSecManager.UdpEncapsulationSocket, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.Network getActiveNetwork();
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo getActiveNetworkInfo();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo[] getAllNetworkInfo();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.Network[] getAllNetworks();
+    method @Deprecated public boolean getBackgroundDataSetting();
+    method @Nullable public android.net.Network getBoundNetworkForProcess();
+    method public int getConnectionOwnerUid(int, @NonNull java.net.InetSocketAddress, @NonNull java.net.InetSocketAddress);
+    method @Nullable public android.net.ProxyInfo getDefaultProxy();
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.LinkProperties getLinkProperties(@Nullable android.net.Network);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public int getMultipathPreference(@Nullable android.net.Network);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkCapabilities getNetworkCapabilities(@Nullable android.net.Network);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo getNetworkInfo(int);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo getNetworkInfo(@Nullable android.net.Network);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public int getNetworkPreference();
+    method @Nullable public byte[] getNetworkWatchlistConfigHash();
+    method @Deprecated @Nullable public static android.net.Network getProcessDefaultNetwork();
+    method public int getRestrictBackgroundStatus();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public boolean isActiveNetworkMetered();
+    method public boolean isDefaultNetworkActive();
+    method @Deprecated public static boolean isNetworkTypeValid(int);
+    method public void registerBestMatchingNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerDefaultNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerNetworkCallback(@NonNull android.net.NetworkRequest, @NonNull android.app.PendingIntent);
+    method public void releaseNetworkRequest(@NonNull android.app.PendingIntent);
+    method public void removeDefaultNetworkActiveListener(@NonNull android.net.ConnectivityManager.OnNetworkActiveListener);
+    method @Deprecated public void reportBadNetwork(@Nullable android.net.Network);
+    method public void reportNetworkConnectivity(@Nullable android.net.Network, boolean);
+    method public boolean requestBandwidthUpdate(@NonNull android.net.Network);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, int);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.net.ConnectivityManager.NetworkCallback, @NonNull android.os.Handler, int);
+    method public void requestNetwork(@NonNull android.net.NetworkRequest, @NonNull android.app.PendingIntent);
+    method @Deprecated public void setNetworkPreference(int);
+    method @Deprecated public static boolean setProcessDefaultNetwork(@Nullable android.net.Network);
+    method public void unregisterNetworkCallback(@NonNull android.net.ConnectivityManager.NetworkCallback);
+    method public void unregisterNetworkCallback(@NonNull android.app.PendingIntent);
+    field @Deprecated public static final String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
+    field public static final String ACTION_CAPTIVE_PORTAL_SIGN_IN = "android.net.conn.CAPTIVE_PORTAL";
+    field public static final String ACTION_RESTRICT_BACKGROUND_CHANGED = "android.net.conn.RESTRICT_BACKGROUND_CHANGED";
+    field @Deprecated public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
+    field @Deprecated public static final int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1
+    field public static final String EXTRA_CAPTIVE_PORTAL = "android.net.extra.CAPTIVE_PORTAL";
+    field public static final String EXTRA_CAPTIVE_PORTAL_URL = "android.net.extra.CAPTIVE_PORTAL_URL";
+    field @Deprecated public static final String EXTRA_EXTRA_INFO = "extraInfo";
+    field @Deprecated public static final String EXTRA_IS_FAILOVER = "isFailover";
+    field public static final String EXTRA_NETWORK = "android.net.extra.NETWORK";
+    field @Deprecated public static final String EXTRA_NETWORK_INFO = "networkInfo";
+    field public static final String EXTRA_NETWORK_REQUEST = "android.net.extra.NETWORK_REQUEST";
+    field @Deprecated public static final String EXTRA_NETWORK_TYPE = "networkType";
+    field public static final String EXTRA_NO_CONNECTIVITY = "noConnectivity";
+    field @Deprecated public static final String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
+    field public static final String EXTRA_REASON = "reason";
+    field public static final int MULTIPATH_PREFERENCE_HANDOVER = 1; // 0x1
+    field public static final int MULTIPATH_PREFERENCE_PERFORMANCE = 4; // 0x4
+    field public static final int MULTIPATH_PREFERENCE_RELIABILITY = 2; // 0x2
+    field public static final int RESTRICT_BACKGROUND_STATUS_DISABLED = 1; // 0x1
+    field public static final int RESTRICT_BACKGROUND_STATUS_ENABLED = 3; // 0x3
+    field public static final int RESTRICT_BACKGROUND_STATUS_WHITELISTED = 2; // 0x2
+    field @Deprecated public static final int TYPE_BLUETOOTH = 7; // 0x7
+    field @Deprecated public static final int TYPE_DUMMY = 8; // 0x8
+    field @Deprecated public static final int TYPE_ETHERNET = 9; // 0x9
+    field @Deprecated public static final int TYPE_MOBILE = 0; // 0x0
+    field @Deprecated public static final int TYPE_MOBILE_DUN = 4; // 0x4
+    field @Deprecated public static final int TYPE_MOBILE_HIPRI = 5; // 0x5
+    field @Deprecated public static final int TYPE_MOBILE_MMS = 2; // 0x2
+    field @Deprecated public static final int TYPE_MOBILE_SUPL = 3; // 0x3
+    field @Deprecated public static final int TYPE_VPN = 17; // 0x11
+    field @Deprecated public static final int TYPE_WIFI = 1; // 0x1
+    field @Deprecated public static final int TYPE_WIMAX = 6; // 0x6
+  }
+
+  public static class ConnectivityManager.NetworkCallback {
+    ctor public ConnectivityManager.NetworkCallback();
+    ctor public ConnectivityManager.NetworkCallback(int);
+    method public void onAvailable(@NonNull android.net.Network);
+    method public void onBlockedStatusChanged(@NonNull android.net.Network, boolean);
+    method public void onCapabilitiesChanged(@NonNull android.net.Network, @NonNull android.net.NetworkCapabilities);
+    method public void onLinkPropertiesChanged(@NonNull android.net.Network, @NonNull android.net.LinkProperties);
+    method public void onLosing(@NonNull android.net.Network, int);
+    method public void onLost(@NonNull android.net.Network);
+    method public void onUnavailable();
+    field public static final int FLAG_INCLUDE_LOCATION_INFO = 1; // 0x1
+  }
+
+  public static interface ConnectivityManager.OnNetworkActiveListener {
+    method public void onNetworkActive();
+  }
+
+  public class DhcpInfo implements android.os.Parcelable {
+    ctor public DhcpInfo();
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.DhcpInfo> CREATOR;
+    field public int dns1;
+    field public int dns2;
+    field public int gateway;
+    field public int ipAddress;
+    field public int leaseDuration;
+    field public int netmask;
+    field public int serverAddress;
+  }
+
+  public final class DnsResolver {
+    method @NonNull public static android.net.DnsResolver getInstance();
+    method public void query(@Nullable android.net.Network, @NonNull String, int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super java.util.List<java.net.InetAddress>>);
+    method public void query(@Nullable android.net.Network, @NonNull String, int, int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super java.util.List<java.net.InetAddress>>);
+    method public void rawQuery(@Nullable android.net.Network, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super byte[]>);
+    method public void rawQuery(@Nullable android.net.Network, @NonNull String, int, int, int, @NonNull java.util.concurrent.Executor, @Nullable android.os.CancellationSignal, @NonNull android.net.DnsResolver.Callback<? super byte[]>);
+    field public static final int CLASS_IN = 1; // 0x1
+    field public static final int ERROR_PARSE = 0; // 0x0
+    field public static final int ERROR_SYSTEM = 1; // 0x1
+    field public static final int FLAG_EMPTY = 0; // 0x0
+    field public static final int FLAG_NO_CACHE_LOOKUP = 4; // 0x4
+    field public static final int FLAG_NO_CACHE_STORE = 2; // 0x2
+    field public static final int FLAG_NO_RETRY = 1; // 0x1
+    field public static final int TYPE_A = 1; // 0x1
+    field public static final int TYPE_AAAA = 28; // 0x1c
+  }
+
+  public static interface DnsResolver.Callback<T> {
+    method public void onAnswer(@NonNull T, int);
+    method public void onError(@NonNull android.net.DnsResolver.DnsException);
+  }
+
+  public static class DnsResolver.DnsException extends java.lang.Exception {
+    field public final int code;
+  }
+
+  public class InetAddresses {
+    method public static boolean isNumericAddress(@NonNull String);
+    method @NonNull public static java.net.InetAddress parseNumericAddress(@NonNull String);
+  }
+
+  public final class IpPrefix implements android.os.Parcelable {
+    method public boolean contains(@NonNull java.net.InetAddress);
+    method public int describeContents();
+    method @NonNull public java.net.InetAddress getAddress();
+    method @IntRange(from=0, to=128) public int getPrefixLength();
+    method @NonNull public byte[] getRawAddress();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpPrefix> CREATOR;
+  }
+
+  public class LinkAddress implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.net.InetAddress getAddress();
+    method public int getFlags();
+    method @IntRange(from=0, to=128) public int getPrefixLength();
+    method public int getScope();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.LinkAddress> CREATOR;
+  }
+
+  public final class LinkProperties implements android.os.Parcelable {
+    ctor public LinkProperties();
+    method public boolean addRoute(@NonNull android.net.RouteInfo);
+    method public void clear();
+    method public int describeContents();
+    method @Nullable public java.net.Inet4Address getDhcpServerAddress();
+    method @NonNull public java.util.List<java.net.InetAddress> getDnsServers();
+    method @Nullable public String getDomains();
+    method @Nullable public android.net.ProxyInfo getHttpProxy();
+    method @Nullable public String getInterfaceName();
+    method @NonNull public java.util.List<android.net.LinkAddress> getLinkAddresses();
+    method public int getMtu();
+    method @Nullable public android.net.IpPrefix getNat64Prefix();
+    method @Nullable public String getPrivateDnsServerName();
+    method @NonNull public java.util.List<android.net.RouteInfo> getRoutes();
+    method public boolean isPrivateDnsActive();
+    method public boolean isWakeOnLanSupported();
+    method public void setDhcpServerAddress(@Nullable java.net.Inet4Address);
+    method public void setDnsServers(@NonNull java.util.Collection<java.net.InetAddress>);
+    method public void setDomains(@Nullable String);
+    method public void setHttpProxy(@Nullable android.net.ProxyInfo);
+    method public void setInterfaceName(@Nullable String);
+    method public void setLinkAddresses(@NonNull java.util.Collection<android.net.LinkAddress>);
+    method public void setMtu(int);
+    method public void setNat64Prefix(@Nullable android.net.IpPrefix);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.LinkProperties> CREATOR;
+  }
+
+  public final class MacAddress implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.net.MacAddress fromBytes(@NonNull byte[]);
+    method @NonNull public static android.net.MacAddress fromString(@NonNull String);
+    method public int getAddressType();
+    method @Nullable public java.net.Inet6Address getLinkLocalIpv6FromEui48Mac();
+    method public boolean isLocallyAssigned();
+    method public boolean matches(@NonNull android.net.MacAddress, @NonNull android.net.MacAddress);
+    method @NonNull public byte[] toByteArray();
+    method @NonNull public String toOuiString();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.net.MacAddress BROADCAST_ADDRESS;
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.MacAddress> CREATOR;
+    field public static final int TYPE_BROADCAST = 3; // 0x3
+    field public static final int TYPE_MULTICAST = 2; // 0x2
+    field public static final int TYPE_UNICAST = 1; // 0x1
+  }
+
+  public class Network implements android.os.Parcelable {
+    method public void bindSocket(java.net.DatagramSocket) throws java.io.IOException;
+    method public void bindSocket(java.net.Socket) throws java.io.IOException;
+    method public void bindSocket(java.io.FileDescriptor) throws java.io.IOException;
+    method public int describeContents();
+    method public static android.net.Network fromNetworkHandle(long);
+    method public java.net.InetAddress[] getAllByName(String) throws java.net.UnknownHostException;
+    method public java.net.InetAddress getByName(String) throws java.net.UnknownHostException;
+    method public long getNetworkHandle();
+    method public javax.net.SocketFactory getSocketFactory();
+    method public java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException;
+    method public java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException;
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.Network> CREATOR;
+  }
+
+  public final class NetworkCapabilities implements android.os.Parcelable {
+    ctor public NetworkCapabilities();
+    ctor public NetworkCapabilities(android.net.NetworkCapabilities);
+    method public int describeContents();
+    method @NonNull public int[] getCapabilities();
+    method public int getLinkDownstreamBandwidthKbps();
+    method public int getLinkUpstreamBandwidthKbps();
+    method @Nullable public android.net.NetworkSpecifier getNetworkSpecifier();
+    method public int getOwnerUid();
+    method public int getSignalStrength();
+    method @Nullable public android.net.TransportInfo getTransportInfo();
+    method public boolean hasCapability(int);
+    method public boolean hasTransport(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkCapabilities> CREATOR;
+    field public static final int NET_CAPABILITY_CAPTIVE_PORTAL = 17; // 0x11
+    field public static final int NET_CAPABILITY_CBS = 5; // 0x5
+    field public static final int NET_CAPABILITY_DUN = 2; // 0x2
+    field public static final int NET_CAPABILITY_EIMS = 10; // 0xa
+    field public static final int NET_CAPABILITY_ENTERPRISE = 29; // 0x1d
+    field public static final int NET_CAPABILITY_FOREGROUND = 19; // 0x13
+    field public static final int NET_CAPABILITY_FOTA = 3; // 0x3
+    field public static final int NET_CAPABILITY_HEAD_UNIT = 32; // 0x20
+    field public static final int NET_CAPABILITY_IA = 7; // 0x7
+    field public static final int NET_CAPABILITY_IMS = 4; // 0x4
+    field public static final int NET_CAPABILITY_INTERNET = 12; // 0xc
+    field public static final int NET_CAPABILITY_MCX = 23; // 0x17
+    field public static final int NET_CAPABILITY_MMS = 0; // 0x0
+    field public static final int NET_CAPABILITY_NOT_CONGESTED = 20; // 0x14
+    field public static final int NET_CAPABILITY_NOT_METERED = 11; // 0xb
+    field public static final int NET_CAPABILITY_NOT_RESTRICTED = 13; // 0xd
+    field public static final int NET_CAPABILITY_NOT_ROAMING = 18; // 0x12
+    field public static final int NET_CAPABILITY_NOT_SUSPENDED = 21; // 0x15
+    field public static final int NET_CAPABILITY_NOT_VPN = 15; // 0xf
+    field public static final int NET_CAPABILITY_RCS = 8; // 0x8
+    field public static final int NET_CAPABILITY_SUPL = 1; // 0x1
+    field public static final int NET_CAPABILITY_TEMPORARILY_NOT_METERED = 25; // 0x19
+    field public static final int NET_CAPABILITY_TRUSTED = 14; // 0xe
+    field public static final int NET_CAPABILITY_VALIDATED = 16; // 0x10
+    field public static final int NET_CAPABILITY_WIFI_P2P = 6; // 0x6
+    field public static final int NET_CAPABILITY_XCAP = 9; // 0x9
+    field public static final int SIGNAL_STRENGTH_UNSPECIFIED = -2147483648; // 0x80000000
+    field public static final int TRANSPORT_BLUETOOTH = 2; // 0x2
+    field public static final int TRANSPORT_CELLULAR = 0; // 0x0
+    field public static final int TRANSPORT_ETHERNET = 3; // 0x3
+    field public static final int TRANSPORT_LOWPAN = 6; // 0x6
+    field public static final int TRANSPORT_USB = 8; // 0x8
+    field public static final int TRANSPORT_VPN = 4; // 0x4
+    field public static final int TRANSPORT_WIFI = 1; // 0x1
+    field public static final int TRANSPORT_WIFI_AWARE = 5; // 0x5
+  }
+
+  @Deprecated public class NetworkInfo implements android.os.Parcelable {
+    ctor @Deprecated public NetworkInfo(int, int, @Nullable String, @Nullable String);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.net.NetworkInfo.DetailedState getDetailedState();
+    method @Deprecated public String getExtraInfo();
+    method @Deprecated public String getReason();
+    method @Deprecated public android.net.NetworkInfo.State getState();
+    method @Deprecated public int getSubtype();
+    method @Deprecated public String getSubtypeName();
+    method @Deprecated public int getType();
+    method @Deprecated public String getTypeName();
+    method @Deprecated public boolean isAvailable();
+    method @Deprecated public boolean isConnected();
+    method @Deprecated public boolean isConnectedOrConnecting();
+    method @Deprecated public boolean isFailover();
+    method @Deprecated public boolean isRoaming();
+    method @Deprecated public void setDetailedState(@NonNull android.net.NetworkInfo.DetailedState, @Nullable String, @Nullable String);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkInfo> CREATOR;
+  }
+
+  @Deprecated public enum NetworkInfo.DetailedState {
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState AUTHENTICATING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState BLOCKED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState CAPTIVE_PORTAL_CHECK;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState CONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState CONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState DISCONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState DISCONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState FAILED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState IDLE;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState OBTAINING_IPADDR;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState SCANNING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState SUSPENDED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.DetailedState VERIFYING_POOR_LINK;
+  }
+
+  @Deprecated public enum NetworkInfo.State {
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State CONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State CONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State DISCONNECTED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State DISCONNECTING;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State SUSPENDED;
+    enum_constant @Deprecated public static final android.net.NetworkInfo.State UNKNOWN;
+  }
+
+  public class NetworkRequest implements android.os.Parcelable {
+    method public boolean canBeSatisfiedBy(@Nullable android.net.NetworkCapabilities);
+    method public int describeContents();
+    method @NonNull public int[] getCapabilities();
+    method @Nullable public android.net.NetworkSpecifier getNetworkSpecifier();
+    method @NonNull public int[] getTransportTypes();
+    method public boolean hasCapability(int);
+    method public boolean hasTransport(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkRequest> CREATOR;
+  }
+
+  public static class NetworkRequest.Builder {
+    ctor public NetworkRequest.Builder();
+    ctor public NetworkRequest.Builder(@NonNull android.net.NetworkRequest);
+    method public android.net.NetworkRequest.Builder addCapability(int);
+    method public android.net.NetworkRequest.Builder addTransportType(int);
+    method public android.net.NetworkRequest build();
+    method @NonNull public android.net.NetworkRequest.Builder clearCapabilities();
+    method public android.net.NetworkRequest.Builder removeCapability(int);
+    method public android.net.NetworkRequest.Builder removeTransportType(int);
+    method @NonNull public android.net.NetworkRequest.Builder setIncludeOtherUidNetworks(boolean);
+    method @Deprecated public android.net.NetworkRequest.Builder setNetworkSpecifier(String);
+    method public android.net.NetworkRequest.Builder setNetworkSpecifier(android.net.NetworkSpecifier);
+  }
+
+  public class ParseException extends java.lang.RuntimeException {
+    ctor public ParseException(@NonNull String);
+    ctor public ParseException(@NonNull String, @NonNull Throwable);
+    field public String response;
+  }
+
+  public class ProxyInfo implements android.os.Parcelable {
+    ctor public ProxyInfo(@Nullable android.net.ProxyInfo);
+    method public static android.net.ProxyInfo buildDirectProxy(String, int);
+    method public static android.net.ProxyInfo buildDirectProxy(String, int, java.util.List<java.lang.String>);
+    method public static android.net.ProxyInfo buildPacProxy(android.net.Uri);
+    method @NonNull public static android.net.ProxyInfo buildPacProxy(@NonNull android.net.Uri, int);
+    method public int describeContents();
+    method public String[] getExclusionList();
+    method public String getHost();
+    method public android.net.Uri getPacFileUrl();
+    method public int getPort();
+    method public boolean isValid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ProxyInfo> CREATOR;
+  }
+
+  public final class RouteInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.IpPrefix getDestination();
+    method @Nullable public java.net.InetAddress getGateway();
+    method @Nullable public String getInterface();
+    method public boolean hasGateway();
+    method public boolean isDefaultRoute();
+    method public boolean matches(java.net.InetAddress);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.RouteInfo> CREATOR;
+  }
+
+  public abstract class SocketKeepalive implements java.lang.AutoCloseable {
+    method public final void close();
+    method public final void start(@IntRange(from=0xa, to=0xe10) int);
+    method public final void stop();
+    field public static final int ERROR_HARDWARE_ERROR = -31; // 0xffffffe1
+    field public static final int ERROR_INSUFFICIENT_RESOURCES = -32; // 0xffffffe0
+    field public static final int ERROR_INVALID_INTERVAL = -24; // 0xffffffe8
+    field public static final int ERROR_INVALID_IP_ADDRESS = -21; // 0xffffffeb
+    field public static final int ERROR_INVALID_LENGTH = -23; // 0xffffffe9
+    field public static final int ERROR_INVALID_NETWORK = -20; // 0xffffffec
+    field public static final int ERROR_INVALID_PORT = -22; // 0xffffffea
+    field public static final int ERROR_INVALID_SOCKET = -25; // 0xffffffe7
+    field public static final int ERROR_SOCKET_NOT_IDLE = -26; // 0xffffffe6
+    field public static final int ERROR_UNSUPPORTED = -30; // 0xffffffe2
+  }
+
+  public static class SocketKeepalive.Callback {
+    ctor public SocketKeepalive.Callback();
+    method public void onDataReceived();
+    method public void onError(int);
+    method public void onStarted();
+    method public void onStopped();
+  }
+
+  public interface TransportInfo {
+  }
+
+}
+
diff --git a/32/public/api/framework-graphics-removed.txt b/32/public/api/framework-graphics-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-graphics-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-graphics.txt b/32/public/api/framework-graphics.txt
new file mode 100644
index 0000000..c396a20
--- /dev/null
+++ b/32/public/api/framework-graphics.txt
@@ -0,0 +1,23 @@
+// Signature format: 2.0
+package android.graphics {
+
+  public class ColorMatrix {
+    ctor public ColorMatrix();
+    ctor public ColorMatrix(float[]);
+    ctor public ColorMatrix(android.graphics.ColorMatrix);
+    method public final float[] getArray();
+    method public void postConcat(android.graphics.ColorMatrix);
+    method public void preConcat(android.graphics.ColorMatrix);
+    method public void reset();
+    method public void set(android.graphics.ColorMatrix);
+    method public void set(float[]);
+    method public void setConcat(android.graphics.ColorMatrix, android.graphics.ColorMatrix);
+    method public void setRGB2YUV();
+    method public void setRotate(int, float);
+    method public void setSaturation(float);
+    method public void setScale(float, float, float, float);
+    method public void setYUV2RGB();
+  }
+
+}
+
diff --git a/32/public/api/framework-media-removed.txt b/32/public/api/framework-media-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-media-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-media.txt b/32/public/api/framework-media.txt
new file mode 100644
index 0000000..b7d7ed8
--- /dev/null
+++ b/32/public/api/framework-media.txt
@@ -0,0 +1,267 @@
+// Signature format: 2.0
+package android.media {
+
+  public final class ApplicationMediaCapabilities implements android.os.Parcelable {
+    method @NonNull public static android.media.ApplicationMediaCapabilities createFromXml(@NonNull org.xmlpull.v1.XmlPullParser);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getSupportedHdrTypes();
+    method @NonNull public java.util.List<java.lang.String> getSupportedVideoMimeTypes();
+    method @NonNull public java.util.List<java.lang.String> getUnsupportedHdrTypes();
+    method @NonNull public java.util.List<java.lang.String> getUnsupportedVideoMimeTypes();
+    method public boolean isFormatSpecified(@NonNull String);
+    method public boolean isHdrTypeSupported(@NonNull String);
+    method public boolean isVideoMimeTypeSupported(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.ApplicationMediaCapabilities> CREATOR;
+  }
+
+  public static final class ApplicationMediaCapabilities.Builder {
+    ctor public ApplicationMediaCapabilities.Builder();
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedHdrType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedVideoMimeType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addUnsupportedHdrType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities.Builder addUnsupportedVideoMimeType(@NonNull String);
+    method @NonNull public android.media.ApplicationMediaCapabilities build();
+  }
+
+  public class MediaCommunicationManager {
+    method @NonNull public java.util.List<android.media.Session2Token> getSession2Tokens();
+    method @IntRange(from=1) public int getVersion();
+  }
+
+  public class MediaController2 implements java.lang.AutoCloseable {
+    method public void cancelSessionCommand(@NonNull Object);
+    method public void close();
+    method @Nullable public android.media.Session2Token getConnectedToken();
+    method public boolean isPlaybackActive();
+    method @NonNull public Object sendSessionCommand(@NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+  }
+
+  public static final class MediaController2.Builder {
+    ctor public MediaController2.Builder(@NonNull android.content.Context, @NonNull android.media.Session2Token);
+    method @NonNull public android.media.MediaController2 build();
+    method @NonNull public android.media.MediaController2.Builder setConnectionHints(@NonNull android.os.Bundle);
+    method @NonNull public android.media.MediaController2.Builder setControllerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaController2.ControllerCallback);
+  }
+
+  public abstract static class MediaController2.ControllerCallback {
+    ctor public MediaController2.ControllerCallback();
+    method public void onCommandResult(@NonNull android.media.MediaController2, @NonNull Object, @NonNull android.media.Session2Command, @NonNull android.media.Session2Command.Result);
+    method public void onConnected(@NonNull android.media.MediaController2, @NonNull android.media.Session2CommandGroup);
+    method public void onDisconnected(@NonNull android.media.MediaController2);
+    method public void onPlaybackActiveChanged(@NonNull android.media.MediaController2, boolean);
+    method @Nullable public android.media.Session2Command.Result onSessionCommand(@NonNull android.media.MediaController2, @NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+  }
+
+  public final class MediaFeature {
+    ctor public MediaFeature();
+  }
+
+  public static final class MediaFeature.HdrType {
+    field public static final String DOLBY_VISION = "android.media.feature.hdr.dolby_vision";
+    field public static final String HDR10 = "android.media.feature.hdr.hdr10";
+    field public static final String HDR10_PLUS = "android.media.feature.hdr.hdr10_plus";
+    field public static final String HLG = "android.media.feature.hdr.hlg";
+  }
+
+  public final class MediaParser {
+    method public boolean advance(@NonNull android.media.MediaParser.SeekableInputReader) throws java.io.IOException;
+    method @NonNull public static android.media.MediaParser create(@NonNull android.media.MediaParser.OutputConsumer, @NonNull java.lang.String...);
+    method @NonNull public static android.media.MediaParser createByName(@NonNull String, @NonNull android.media.MediaParser.OutputConsumer);
+    method @NonNull public android.media.metrics.LogSessionId getLogSessionId();
+    method @NonNull public String getParserName();
+    method @NonNull public static java.util.List<java.lang.String> getParserNames(@NonNull android.media.MediaFormat);
+    method public void release();
+    method public void seek(@NonNull android.media.MediaParser.SeekPoint);
+    method public void setLogSessionId(@NonNull android.media.metrics.LogSessionId);
+    method @NonNull public android.media.MediaParser setParameter(@NonNull String, @NonNull Object);
+    method public boolean supportsParameter(@NonNull String);
+    field public static final String PARAMETER_ADTS_ENABLE_CBR_SEEKING = "android.media.mediaparser.adts.enableCbrSeeking";
+    field public static final String PARAMETER_AMR_ENABLE_CBR_SEEKING = "android.media.mediaparser.amr.enableCbrSeeking";
+    field public static final String PARAMETER_FLAC_DISABLE_ID3 = "android.media.mediaparser.flac.disableId3";
+    field public static final String PARAMETER_MATROSKA_DISABLE_CUES_SEEKING = "android.media.mediaparser.matroska.disableCuesSeeking";
+    field public static final String PARAMETER_MP3_DISABLE_ID3 = "android.media.mediaparser.mp3.disableId3";
+    field public static final String PARAMETER_MP3_ENABLE_CBR_SEEKING = "android.media.mediaparser.mp3.enableCbrSeeking";
+    field public static final String PARAMETER_MP3_ENABLE_INDEX_SEEKING = "android.media.mediaparser.mp3.enableIndexSeeking";
+    field public static final String PARAMETER_MP4_IGNORE_EDIT_LISTS = "android.media.mediaparser.mp4.ignoreEditLists";
+    field public static final String PARAMETER_MP4_IGNORE_TFDT_BOX = "android.media.mediaparser.mp4.ignoreTfdtBox";
+    field public static final String PARAMETER_MP4_TREAT_VIDEO_FRAMES_AS_KEYFRAMES = "android.media.mediaparser.mp4.treatVideoFramesAsKeyframes";
+    field public static final String PARAMETER_TS_ALLOW_NON_IDR_AVC_KEYFRAMES = "android.media.mediaparser.ts.allowNonIdrAvcKeyframes";
+    field public static final String PARAMETER_TS_DETECT_ACCESS_UNITS = "android.media.mediaparser.ts.ignoreDetectAccessUnits";
+    field public static final String PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS = "android.media.mediaparser.ts.enableHdmvDtsAudioStreams";
+    field public static final String PARAMETER_TS_IGNORE_AAC_STREAM = "android.media.mediaparser.ts.ignoreAacStream";
+    field public static final String PARAMETER_TS_IGNORE_AVC_STREAM = "android.media.mediaparser.ts.ignoreAvcStream";
+    field public static final String PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM = "android.media.mediaparser.ts.ignoreSpliceInfoStream";
+    field public static final String PARAMETER_TS_MODE = "android.media.mediaparser.ts.mode";
+    field public static final String PARSER_NAME_AC3 = "android.media.mediaparser.Ac3Parser";
+    field public static final String PARSER_NAME_AC4 = "android.media.mediaparser.Ac4Parser";
+    field public static final String PARSER_NAME_ADTS = "android.media.mediaparser.AdtsParser";
+    field public static final String PARSER_NAME_AMR = "android.media.mediaparser.AmrParser";
+    field public static final String PARSER_NAME_FLAC = "android.media.mediaparser.FlacParser";
+    field public static final String PARSER_NAME_FLV = "android.media.mediaparser.FlvParser";
+    field public static final String PARSER_NAME_FMP4 = "android.media.mediaparser.FragmentedMp4Parser";
+    field public static final String PARSER_NAME_MATROSKA = "android.media.mediaparser.MatroskaParser";
+    field public static final String PARSER_NAME_MP3 = "android.media.mediaparser.Mp3Parser";
+    field public static final String PARSER_NAME_MP4 = "android.media.mediaparser.Mp4Parser";
+    field public static final String PARSER_NAME_OGG = "android.media.mediaparser.OggParser";
+    field public static final String PARSER_NAME_PS = "android.media.mediaparser.PsParser";
+    field public static final String PARSER_NAME_TS = "android.media.mediaparser.TsParser";
+    field public static final String PARSER_NAME_UNKNOWN = "android.media.mediaparser.UNKNOWN";
+    field public static final String PARSER_NAME_WAV = "android.media.mediaparser.WavParser";
+    field public static final int SAMPLE_FLAG_DECODE_ONLY = -2147483648; // 0x80000000
+    field public static final int SAMPLE_FLAG_ENCRYPTED = 1073741824; // 0x40000000
+    field public static final int SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA = 268435456; // 0x10000000
+    field public static final int SAMPLE_FLAG_KEY_FRAME = 1; // 0x1
+    field public static final int SAMPLE_FLAG_LAST_SAMPLE = 536870912; // 0x20000000
+  }
+
+  public static interface MediaParser.InputReader {
+    method public long getLength();
+    method public long getPosition();
+    method public int read(@NonNull byte[], int, int) throws java.io.IOException;
+  }
+
+  public static interface MediaParser.OutputConsumer {
+    method public void onSampleCompleted(int, long, int, int, int, @Nullable android.media.MediaCodec.CryptoInfo);
+    method public void onSampleDataFound(int, @NonNull android.media.MediaParser.InputReader) throws java.io.IOException;
+    method public void onSeekMapFound(@NonNull android.media.MediaParser.SeekMap);
+    method public void onTrackCountFound(int);
+    method public void onTrackDataFound(int, @NonNull android.media.MediaParser.TrackData);
+  }
+
+  public static final class MediaParser.ParsingException extends java.io.IOException {
+  }
+
+  public static final class MediaParser.SeekMap {
+    method public long getDurationMicros();
+    method @NonNull public android.util.Pair<android.media.MediaParser.SeekPoint,android.media.MediaParser.SeekPoint> getSeekPoints(long);
+    method public boolean isSeekable();
+    field public static final int UNKNOWN_DURATION = -2147483648; // 0x80000000
+  }
+
+  public static final class MediaParser.SeekPoint {
+    field @NonNull public static final android.media.MediaParser.SeekPoint START;
+    field public final long position;
+    field public final long timeMicros;
+  }
+
+  public static interface MediaParser.SeekableInputReader extends android.media.MediaParser.InputReader {
+    method public void seekToPosition(long);
+  }
+
+  public static final class MediaParser.TrackData {
+    field @Nullable public final android.media.DrmInitData drmInitData;
+    field @NonNull public final android.media.MediaFormat mediaFormat;
+  }
+
+  public static final class MediaParser.UnrecognizedInputFormatException extends java.io.IOException {
+  }
+
+  public class MediaSession2 implements java.lang.AutoCloseable {
+    method public void broadcastSessionCommand(@NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+    method public void cancelSessionCommand(@NonNull android.media.MediaSession2.ControllerInfo, @NonNull Object);
+    method public void close();
+    method @NonNull public java.util.List<android.media.MediaSession2.ControllerInfo> getConnectedControllers();
+    method @NonNull public String getId();
+    method @NonNull public android.media.Session2Token getToken();
+    method public boolean isPlaybackActive();
+    method @NonNull public Object sendSessionCommand(@NonNull android.media.MediaSession2.ControllerInfo, @NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+    method public void setPlaybackActive(boolean);
+  }
+
+  public static final class MediaSession2.Builder {
+    ctor public MediaSession2.Builder(@NonNull android.content.Context);
+    method @NonNull public android.media.MediaSession2 build();
+    method @NonNull public android.media.MediaSession2.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.media.MediaSession2.Builder setId(@NonNull String);
+    method @NonNull public android.media.MediaSession2.Builder setSessionActivity(@Nullable android.app.PendingIntent);
+    method @NonNull public android.media.MediaSession2.Builder setSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.MediaSession2.SessionCallback);
+  }
+
+  public static final class MediaSession2.ControllerInfo {
+    method @NonNull public android.os.Bundle getConnectionHints();
+    method @NonNull public String getPackageName();
+    method @NonNull public android.media.session.MediaSessionManager.RemoteUserInfo getRemoteUserInfo();
+    method public int getUid();
+  }
+
+  public abstract static class MediaSession2.SessionCallback {
+    ctor public MediaSession2.SessionCallback();
+    method public void onCommandResult(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo, @NonNull Object, @NonNull android.media.Session2Command, @NonNull android.media.Session2Command.Result);
+    method @Nullable public android.media.Session2CommandGroup onConnect(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo);
+    method public void onDisconnected(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo);
+    method public void onPostConnect(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo);
+    method @Nullable public android.media.Session2Command.Result onSessionCommand(@NonNull android.media.MediaSession2, @NonNull android.media.MediaSession2.ControllerInfo, @NonNull android.media.Session2Command, @Nullable android.os.Bundle);
+  }
+
+  public abstract class MediaSession2Service extends android.app.Service {
+    ctor public MediaSession2Service();
+    method public final void addSession(@NonNull android.media.MediaSession2);
+    method @NonNull public final java.util.List<android.media.MediaSession2> getSessions();
+    method @CallSuper @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @Nullable public abstract android.media.MediaSession2 onGetSession(@NonNull android.media.MediaSession2.ControllerInfo);
+    method @Nullable public abstract android.media.MediaSession2Service.MediaNotification onUpdateNotification(@NonNull android.media.MediaSession2);
+    method public final void removeSession(@NonNull android.media.MediaSession2);
+    field public static final String SERVICE_INTERFACE = "android.media.MediaSession2Service";
+  }
+
+  public static class MediaSession2Service.MediaNotification {
+    ctor public MediaSession2Service.MediaNotification(int, @NonNull android.app.Notification);
+    method @NonNull public android.app.Notification getNotification();
+    method public int getNotificationId();
+  }
+
+  public final class Session2Command implements android.os.Parcelable {
+    ctor public Session2Command(int);
+    ctor public Session2Command(@NonNull String, @Nullable android.os.Bundle);
+    method public int describeContents();
+    method public int getCommandCode();
+    method @Nullable public String getCustomAction();
+    method @Nullable public android.os.Bundle getCustomExtras();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int COMMAND_CODE_CUSTOM = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2Command> CREATOR;
+  }
+
+  public static final class Session2Command.Result {
+    ctor public Session2Command.Result(int, @Nullable android.os.Bundle);
+    method public int getResultCode();
+    method @Nullable public android.os.Bundle getResultData();
+    field public static final int RESULT_ERROR_UNKNOWN_ERROR = -1; // 0xffffffff
+    field public static final int RESULT_INFO_SKIPPED = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public final class Session2CommandGroup implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.media.Session2Command> getCommands();
+    method public boolean hasCommand(@NonNull android.media.Session2Command);
+    method public boolean hasCommand(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2CommandGroup> CREATOR;
+  }
+
+  public static final class Session2CommandGroup.Builder {
+    ctor public Session2CommandGroup.Builder();
+    ctor public Session2CommandGroup.Builder(@NonNull android.media.Session2CommandGroup);
+    method @NonNull public android.media.Session2CommandGroup.Builder addCommand(@NonNull android.media.Session2Command);
+    method @NonNull public android.media.Session2CommandGroup build();
+    method @NonNull public android.media.Session2CommandGroup.Builder removeCommand(@NonNull android.media.Session2Command);
+  }
+
+  public final class Session2Token implements android.os.Parcelable {
+    ctor public Session2Token(@NonNull android.content.Context, @NonNull android.content.ComponentName);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getPackageName();
+    method @Nullable public String getServiceName();
+    method public int getType();
+    method public int getUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.Session2Token> CREATOR;
+    field public static final int TYPE_SESSION = 0; // 0x0
+    field public static final int TYPE_SESSION_SERVICE = 1; // 0x1
+  }
+
+}
+
diff --git a/32/public/api/framework-mediaprovider-removed.txt b/32/public/api/framework-mediaprovider-removed.txt
new file mode 100644
index 0000000..183a7c9
--- /dev/null
+++ b/32/public/api/framework-mediaprovider-removed.txt
@@ -0,0 +1,43 @@
+// Signature format: 2.0
+package android.provider {
+
+  public static interface MediaStore.Audio.AudioColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String ALBUM = "album";
+    field public static final String ARTIST = "artist";
+    field public static final String COMPOSER = "composer";
+    field public static final String DURATION = "duration";
+  }
+
+  public static interface MediaStore.DownloadColumns extends android.provider.MediaStore.MediaColumns {
+    field @Deprecated public static final String DESCRIPTION = "description";
+  }
+
+  public static interface MediaStore.Files.FileColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String TITLE = "title";
+  }
+
+  public static interface MediaStore.Images.ImageColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String BUCKET_DISPLAY_NAME = "bucket_display_name";
+    field public static final String BUCKET_ID = "bucket_id";
+    field public static final String DATE_TAKEN = "datetaken";
+    field public static final String GROUP_ID = "group_id";
+    field public static final String ORIENTATION = "orientation";
+  }
+
+  public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
+    field @Deprecated public static final String GROUP_ID = "group_id";
+  }
+
+  public static interface MediaStore.Video.VideoColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String ALBUM = "album";
+    field public static final String ARTIST = "artist";
+    field public static final String BUCKET_DISPLAY_NAME = "bucket_display_name";
+    field public static final String BUCKET_ID = "bucket_id";
+    field public static final String DATE_TAKEN = "datetaken";
+    field public static final String DURATION = "duration";
+    field public static final String GROUP_ID = "group_id";
+    field public static final String RESOLUTION = "resolution";
+  }
+
+}
+
diff --git a/32/public/api/framework-mediaprovider.txt b/32/public/api/framework-mediaprovider.txt
new file mode 100644
index 0000000..0a53fb5
--- /dev/null
+++ b/32/public/api/framework-mediaprovider.txt
@@ -0,0 +1,414 @@
+// Signature format: 2.0
+package android.provider {
+
+  public final class MediaStore {
+    ctor public MediaStore();
+    method public static boolean canManageMedia(@NonNull android.content.Context);
+    method @NonNull public static android.app.PendingIntent createDeleteRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>);
+    method @NonNull public static android.app.PendingIntent createFavoriteRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>, boolean);
+    method @NonNull public static android.app.PendingIntent createTrashRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>, boolean);
+    method @NonNull public static android.app.PendingIntent createWriteRequest(@NonNull android.content.ContentResolver, @NonNull java.util.Collection<android.net.Uri>);
+    method @Nullable public static android.net.Uri getDocumentUri(@NonNull android.content.Context, @NonNull android.net.Uri);
+    method @NonNull public static java.util.Set<java.lang.String> getExternalVolumeNames(@NonNull android.content.Context);
+    method public static long getGeneration(@NonNull android.content.Context, @NonNull String);
+    method public static android.net.Uri getMediaScannerUri();
+    method @Nullable public static android.net.Uri getMediaUri(@NonNull android.content.Context, @NonNull android.net.Uri);
+    method @NonNull public static android.os.ParcelFileDescriptor getOriginalMediaFormatFileDescriptor(@NonNull android.content.Context, @NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+    method @NonNull public static java.util.Set<java.lang.String> getRecentExternalVolumeNames(@NonNull android.content.Context);
+    method @Nullable public static android.net.Uri getRedactedUri(@NonNull android.content.ContentResolver, @NonNull android.net.Uri);
+    method @NonNull public static java.util.List<android.net.Uri> getRedactedUri(@NonNull android.content.ContentResolver, @NonNull java.util.List<android.net.Uri>);
+    method public static boolean getRequireOriginal(@NonNull android.net.Uri);
+    method @NonNull public static String getVersion(@NonNull android.content.Context);
+    method @NonNull public static String getVersion(@NonNull android.content.Context, @NonNull String);
+    method @NonNull public static String getVolumeName(@NonNull android.net.Uri);
+    method public static boolean isCurrentSystemGallery(@NonNull android.content.ContentResolver, int, @NonNull String);
+    method @Deprecated @NonNull public static android.net.Uri setIncludePending(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri setRequireOriginal(@NonNull android.net.Uri);
+    field public static final String ACTION_IMAGE_CAPTURE = "android.media.action.IMAGE_CAPTURE";
+    field public static final String ACTION_IMAGE_CAPTURE_SECURE = "android.media.action.IMAGE_CAPTURE_SECURE";
+    field public static final String ACTION_REVIEW = "android.provider.action.REVIEW";
+    field public static final String ACTION_REVIEW_SECURE = "android.provider.action.REVIEW_SECURE";
+    field public static final String ACTION_VIDEO_CAPTURE = "android.media.action.VIDEO_CAPTURE";
+    field public static final String AUTHORITY = "media";
+    field @NonNull public static final android.net.Uri AUTHORITY_URI;
+    field public static final String EXTRA_ACCEPT_ORIGINAL_MEDIA_FORMAT = "android.provider.extra.ACCEPT_ORIGINAL_MEDIA_FORMAT";
+    field public static final String EXTRA_BRIGHTNESS = "android.provider.extra.BRIGHTNESS";
+    field public static final String EXTRA_DURATION_LIMIT = "android.intent.extra.durationLimit";
+    field public static final String EXTRA_FINISH_ON_COMPLETION = "android.intent.extra.finishOnCompletion";
+    field public static final String EXTRA_FULL_SCREEN = "android.intent.extra.fullScreen";
+    field public static final String EXTRA_MEDIA_ALBUM = "android.intent.extra.album";
+    field public static final String EXTRA_MEDIA_ARTIST = "android.intent.extra.artist";
+    field public static final String EXTRA_MEDIA_CAPABILITIES = "android.provider.extra.MEDIA_CAPABILITIES";
+    field public static final String EXTRA_MEDIA_CAPABILITIES_UID = "android.provider.extra.MEDIA_CAPABILITIES_UID";
+    field public static final String EXTRA_MEDIA_FOCUS = "android.intent.extra.focus";
+    field public static final String EXTRA_MEDIA_GENRE = "android.intent.extra.genre";
+    field @Deprecated public static final String EXTRA_MEDIA_PLAYLIST = "android.intent.extra.playlist";
+    field public static final String EXTRA_MEDIA_RADIO_CHANNEL = "android.intent.extra.radio_channel";
+    field public static final String EXTRA_MEDIA_TITLE = "android.intent.extra.title";
+    field public static final String EXTRA_OUTPUT = "output";
+    field public static final String EXTRA_SCREEN_ORIENTATION = "android.intent.extra.screenOrientation";
+    field public static final String EXTRA_SHOW_ACTION_ICONS = "android.intent.extra.showActionIcons";
+    field public static final String EXTRA_SIZE_LIMIT = "android.intent.extra.sizeLimit";
+    field public static final String EXTRA_VIDEO_QUALITY = "android.intent.extra.videoQuality";
+    field public static final String INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH = "android.media.action.MEDIA_PLAY_FROM_SEARCH";
+    field public static final String INTENT_ACTION_MEDIA_SEARCH = "android.intent.action.MEDIA_SEARCH";
+    field @Deprecated public static final String INTENT_ACTION_MUSIC_PLAYER = "android.intent.action.MUSIC_PLAYER";
+    field public static final String INTENT_ACTION_STILL_IMAGE_CAMERA = "android.media.action.STILL_IMAGE_CAMERA";
+    field public static final String INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE = "android.media.action.STILL_IMAGE_CAMERA_SECURE";
+    field public static final String INTENT_ACTION_TEXT_OPEN_FROM_SEARCH = "android.media.action.TEXT_OPEN_FROM_SEARCH";
+    field public static final String INTENT_ACTION_VIDEO_CAMERA = "android.media.action.VIDEO_CAMERA";
+    field public static final String INTENT_ACTION_VIDEO_PLAY_FROM_SEARCH = "android.media.action.VIDEO_PLAY_FROM_SEARCH";
+    field public static final int MATCH_DEFAULT = 0; // 0x0
+    field public static final int MATCH_EXCLUDE = 2; // 0x2
+    field public static final int MATCH_INCLUDE = 1; // 0x1
+    field public static final int MATCH_ONLY = 3; // 0x3
+    field public static final String MEDIA_IGNORE_FILENAME = ".nomedia";
+    field public static final String MEDIA_SCANNER_VOLUME = "volume";
+    field public static final String META_DATA_REVIEW_GALLERY_PREWARM_SERVICE = "android.media.review_gallery_prewarm_service";
+    field public static final String META_DATA_STILL_IMAGE_CAMERA_PREWARM_SERVICE = "android.media.still_image_camera_preview_service";
+    field public static final String QUERY_ARG_INCLUDE_RECENTLY_UNMOUNTED_VOLUMES = "android:query-arg-recently-unmounted-volumes";
+    field public static final String QUERY_ARG_MATCH_FAVORITE = "android:query-arg-match-favorite";
+    field public static final String QUERY_ARG_MATCH_PENDING = "android:query-arg-match-pending";
+    field public static final String QUERY_ARG_MATCH_TRASHED = "android:query-arg-match-trashed";
+    field public static final String QUERY_ARG_RELATED_URI = "android:query-arg-related-uri";
+    field public static final String UNKNOWN_STRING = "<unknown>";
+    field public static final String VOLUME_EXTERNAL = "external";
+    field public static final String VOLUME_EXTERNAL_PRIMARY = "external_primary";
+    field public static final String VOLUME_INTERNAL = "internal";
+  }
+
+  public static final class MediaStore.Audio {
+    ctor public MediaStore.Audio();
+    method @Deprecated @Nullable public static String keyFor(@Nullable String);
+  }
+
+  public static interface MediaStore.Audio.AlbumColumns {
+    field public static final String ALBUM = "album";
+    field @Deprecated public static final String ALBUM_ART = "album_art";
+    field public static final String ALBUM_ID = "album_id";
+    field @Deprecated public static final String ALBUM_KEY = "album_key";
+    field public static final String ARTIST = "artist";
+    field public static final String ARTIST_ID = "artist_id";
+    field @Deprecated public static final String ARTIST_KEY = "artist_key";
+    field public static final String FIRST_YEAR = "minyear";
+    field public static final String LAST_YEAR = "maxyear";
+    field public static final String NUMBER_OF_SONGS = "numsongs";
+    field public static final String NUMBER_OF_SONGS_FOR_ARTIST = "numsongs_by_artist";
+  }
+
+  public static final class MediaStore.Audio.Albums implements android.provider.BaseColumns android.provider.MediaStore.Audio.AlbumColumns {
+    ctor public MediaStore.Audio.Albums();
+    method public static android.net.Uri getContentUri(String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/albums";
+    field public static final String DEFAULT_SORT_ORDER = "album_key";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/album";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static interface MediaStore.Audio.ArtistColumns {
+    field public static final String ARTIST = "artist";
+    field @Deprecated public static final String ARTIST_KEY = "artist_key";
+    field public static final String NUMBER_OF_ALBUMS = "number_of_albums";
+    field public static final String NUMBER_OF_TRACKS = "number_of_tracks";
+  }
+
+  public static final class MediaStore.Audio.Artists implements android.provider.BaseColumns android.provider.MediaStore.Audio.ArtistColumns {
+    ctor public MediaStore.Audio.Artists();
+    method public static android.net.Uri getContentUri(String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/artists";
+    field public static final String DEFAULT_SORT_ORDER = "artist_key";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/artist";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static final class MediaStore.Audio.Artists.Albums implements android.provider.BaseColumns android.provider.MediaStore.Audio.AlbumColumns {
+    ctor public MediaStore.Audio.Artists.Albums();
+    method public static android.net.Uri getContentUri(String, long);
+  }
+
+  public static interface MediaStore.Audio.AudioColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String ALBUM_ID = "album_id";
+    field @Deprecated public static final String ALBUM_KEY = "album_key";
+    field public static final String ARTIST_ID = "artist_id";
+    field @Deprecated public static final String ARTIST_KEY = "artist_key";
+    field public static final String BOOKMARK = "bookmark";
+    field public static final String GENRE = "genre";
+    field public static final String GENRE_ID = "genre_id";
+    field @Deprecated public static final String GENRE_KEY = "genre_key";
+    field public static final String IS_ALARM = "is_alarm";
+    field public static final String IS_AUDIOBOOK = "is_audiobook";
+    field public static final String IS_MUSIC = "is_music";
+    field public static final String IS_NOTIFICATION = "is_notification";
+    field public static final String IS_PODCAST = "is_podcast";
+    field public static final String IS_RECORDING = "is_recording";
+    field public static final String IS_RINGTONE = "is_ringtone";
+    field @Deprecated public static final String TITLE_KEY = "title_key";
+    field public static final String TITLE_RESOURCE_URI = "title_resource_uri";
+    field public static final String TRACK = "track";
+    field public static final String YEAR = "year";
+  }
+
+  public static final class MediaStore.Audio.Genres implements android.provider.BaseColumns android.provider.MediaStore.Audio.GenresColumns {
+    ctor public MediaStore.Audio.Genres();
+    method public static android.net.Uri getContentUri(String);
+    method public static android.net.Uri getContentUriForAudioId(String, int);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/genre";
+    field public static final String DEFAULT_SORT_ORDER = "name";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/genre";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static final class MediaStore.Audio.Genres.Members implements android.provider.MediaStore.Audio.AudioColumns {
+    ctor public MediaStore.Audio.Genres.Members();
+    method public static android.net.Uri getContentUri(String, long);
+    field public static final String AUDIO_ID = "audio_id";
+    field public static final String CONTENT_DIRECTORY = "members";
+    field public static final String DEFAULT_SORT_ORDER = "title_key";
+    field public static final String GENRE_ID = "genre_id";
+  }
+
+  public static interface MediaStore.Audio.GenresColumns {
+    field public static final String NAME = "name";
+  }
+
+  public static final class MediaStore.Audio.Media implements android.provider.MediaStore.Audio.AudioColumns {
+    ctor public MediaStore.Audio.Media();
+    method public static android.net.Uri getContentUri(String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    method @Deprecated @Nullable public static android.net.Uri getContentUriForPath(@NonNull String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/audio";
+    field public static final String DEFAULT_SORT_ORDER = "title_key";
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/audio";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final String EXTRA_MAX_BYTES = "android.provider.MediaStore.extra.MAX_BYTES";
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+    field public static final String RECORD_SOUND_ACTION = "android.provider.MediaStore.RECORD_SOUND";
+  }
+
+  @Deprecated public static final class MediaStore.Audio.Playlists implements android.provider.BaseColumns android.provider.MediaStore.Audio.PlaylistsColumns {
+    ctor @Deprecated public MediaStore.Audio.Playlists();
+    method @Deprecated public static android.net.Uri getContentUri(String);
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/playlist";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "name";
+    field @Deprecated public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/playlist";
+    field @Deprecated public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @Deprecated public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  @Deprecated public static final class MediaStore.Audio.Playlists.Members implements android.provider.MediaStore.Audio.AudioColumns {
+    ctor @Deprecated public MediaStore.Audio.Playlists.Members();
+    method @Deprecated public static android.net.Uri getContentUri(String, long);
+    method @Deprecated public static boolean moveItem(android.content.ContentResolver, long, int, int);
+    field @Deprecated public static final String AUDIO_ID = "audio_id";
+    field @Deprecated public static final String CONTENT_DIRECTORY = "members";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "play_order";
+    field @Deprecated public static final String PLAYLIST_ID = "playlist_id";
+    field @Deprecated public static final String PLAY_ORDER = "play_order";
+    field @Deprecated public static final String _ID = "_id";
+  }
+
+  @Deprecated public static interface MediaStore.Audio.PlaylistsColumns extends android.provider.MediaStore.MediaColumns {
+    field @Deprecated public static final String DATA = "_data";
+    field @Deprecated public static final String DATE_ADDED = "date_added";
+    field @Deprecated public static final String DATE_MODIFIED = "date_modified";
+    field @Deprecated public static final String NAME = "name";
+  }
+
+  public static final class MediaStore.Audio.Radio {
+    field public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/radio";
+  }
+
+  public static interface MediaStore.DownloadColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String DOWNLOAD_URI = "download_uri";
+    field public static final String REFERER_URI = "referer_uri";
+  }
+
+  public static final class MediaStore.Downloads implements android.provider.MediaStore.DownloadColumns {
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/download";
+    field @NonNull public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @NonNull public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  public static final class MediaStore.Files {
+    ctor public MediaStore.Files();
+    method public static android.net.Uri getContentUri(String);
+    method public static android.net.Uri getContentUri(String, long);
+  }
+
+  public static interface MediaStore.Files.FileColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String MEDIA_TYPE = "media_type";
+    field public static final int MEDIA_TYPE_AUDIO = 2; // 0x2
+    field public static final int MEDIA_TYPE_DOCUMENT = 6; // 0x6
+    field public static final int MEDIA_TYPE_IMAGE = 1; // 0x1
+    field public static final int MEDIA_TYPE_NONE = 0; // 0x0
+    field @Deprecated public static final int MEDIA_TYPE_PLAYLIST = 4; // 0x4
+    field public static final int MEDIA_TYPE_SUBTITLE = 5; // 0x5
+    field public static final int MEDIA_TYPE_VIDEO = 3; // 0x3
+    field public static final String MIME_TYPE = "mime_type";
+    field public static final String PARENT = "parent";
+  }
+
+  public static final class MediaStore.Images {
+    ctor public MediaStore.Images();
+  }
+
+  public static interface MediaStore.Images.ImageColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String DESCRIPTION = "description";
+    field public static final String EXPOSURE_TIME = "exposure_time";
+    field public static final String F_NUMBER = "f_number";
+    field public static final String ISO = "iso";
+    field public static final String IS_PRIVATE = "isprivate";
+    field @Deprecated public static final String LATITUDE = "latitude";
+    field @Deprecated public static final String LONGITUDE = "longitude";
+    field @Deprecated public static final String MINI_THUMB_MAGIC = "mini_thumb_magic";
+    field @Deprecated public static final String PICASA_ID = "picasa_id";
+    field public static final String SCENE_CAPTURE_TYPE = "scene_capture_type";
+  }
+
+  public static final class MediaStore.Images.Media implements android.provider.MediaStore.Images.ImageColumns {
+    ctor public MediaStore.Images.Media();
+    method @Deprecated public static android.graphics.Bitmap getBitmap(android.content.ContentResolver, android.net.Uri) throws java.io.FileNotFoundException, java.io.IOException;
+    method public static android.net.Uri getContentUri(String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    method @Deprecated public static String insertImage(android.content.ContentResolver, String, String, String) throws java.io.FileNotFoundException;
+    method @Deprecated public static String insertImage(android.content.ContentResolver, android.graphics.Bitmap, String, String);
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[], String, String);
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[], String, String[], String);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/image";
+    field public static final String DEFAULT_SORT_ORDER = "bucket_display_name";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  @Deprecated public static class MediaStore.Images.Thumbnails implements android.provider.BaseColumns {
+    ctor @Deprecated public MediaStore.Images.Thumbnails();
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long);
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long, long);
+    method @Deprecated public static android.net.Uri getContentUri(String);
+    method @Deprecated @NonNull public static android.util.Size getKindSize(int);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, long, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static final android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
+    method @Deprecated public static final android.database.Cursor queryMiniThumbnail(android.content.ContentResolver, long, int, String[]);
+    method @Deprecated public static final android.database.Cursor queryMiniThumbnails(android.content.ContentResolver, android.net.Uri, int, String[]);
+    field @Deprecated public static final String DATA = "_data";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "image_id ASC";
+    field @Deprecated public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @Deprecated public static final int FULL_SCREEN_KIND = 2; // 0x2
+    field @Deprecated public static final String HEIGHT = "height";
+    field @Deprecated public static final String IMAGE_ID = "image_id";
+    field @Deprecated public static final android.net.Uri INTERNAL_CONTENT_URI;
+    field @Deprecated public static final String KIND = "kind";
+    field @Deprecated public static final int MICRO_KIND = 3; // 0x3
+    field @Deprecated public static final int MINI_KIND = 1; // 0x1
+    field @Deprecated public static final String THUMB_DATA = "thumb_data";
+    field @Deprecated public static final String WIDTH = "width";
+  }
+
+  public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
+    field public static final String ALBUM = "album";
+    field public static final String ALBUM_ARTIST = "album_artist";
+    field public static final String ARTIST = "artist";
+    field public static final String AUTHOR = "author";
+    field public static final String BITRATE = "bitrate";
+    field public static final String BUCKET_DISPLAY_NAME = "bucket_display_name";
+    field public static final String BUCKET_ID = "bucket_id";
+    field public static final String CAPTURE_FRAMERATE = "capture_framerate";
+    field public static final String CD_TRACK_NUMBER = "cd_track_number";
+    field public static final String COMPILATION = "compilation";
+    field public static final String COMPOSER = "composer";
+    field public static final String DATA = "_data";
+    field public static final String DATE_ADDED = "date_added";
+    field public static final String DATE_EXPIRES = "date_expires";
+    field public static final String DATE_MODIFIED = "date_modified";
+    field public static final String DATE_TAKEN = "datetaken";
+    field public static final String DISC_NUMBER = "disc_number";
+    field public static final String DISPLAY_NAME = "_display_name";
+    field public static final String DOCUMENT_ID = "document_id";
+    field public static final String DURATION = "duration";
+    field public static final String GENERATION_ADDED = "generation_added";
+    field public static final String GENERATION_MODIFIED = "generation_modified";
+    field public static final String GENRE = "genre";
+    field public static final String HEIGHT = "height";
+    field public static final String INSTANCE_ID = "instance_id";
+    field public static final String IS_DOWNLOAD = "is_download";
+    field public static final String IS_DRM = "is_drm";
+    field public static final String IS_FAVORITE = "is_favorite";
+    field public static final String IS_PENDING = "is_pending";
+    field public static final String IS_TRASHED = "is_trashed";
+    field public static final String MIME_TYPE = "mime_type";
+    field public static final String NUM_TRACKS = "num_tracks";
+    field public static final String ORIENTATION = "orientation";
+    field public static final String ORIGINAL_DOCUMENT_ID = "original_document_id";
+    field public static final String OWNER_PACKAGE_NAME = "owner_package_name";
+    field public static final String RELATIVE_PATH = "relative_path";
+    field public static final String RESOLUTION = "resolution";
+    field public static final String SIZE = "_size";
+    field public static final String TITLE = "title";
+    field public static final String VOLUME_NAME = "volume_name";
+    field public static final String WIDTH = "width";
+    field public static final String WRITER = "writer";
+    field public static final String XMP = "xmp";
+    field public static final String YEAR = "year";
+  }
+
+  public static final class MediaStore.Video {
+    ctor public MediaStore.Video();
+    method @Deprecated public static android.database.Cursor query(android.content.ContentResolver, android.net.Uri, String[]);
+    field public static final String DEFAULT_SORT_ORDER = "_display_name";
+  }
+
+  public static final class MediaStore.Video.Media implements android.provider.MediaStore.Video.VideoColumns {
+    ctor public MediaStore.Video.Media();
+    method public static android.net.Uri getContentUri(String);
+    method @NonNull public static android.net.Uri getContentUri(@NonNull String, long);
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/video";
+    field public static final String DEFAULT_SORT_ORDER = "title";
+    field public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field public static final android.net.Uri INTERNAL_CONTENT_URI;
+  }
+
+  @Deprecated public static class MediaStore.Video.Thumbnails implements android.provider.BaseColumns {
+    ctor @Deprecated public MediaStore.Video.Thumbnails();
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long);
+    method @Deprecated public static void cancelThumbnailRequest(android.content.ContentResolver, long, long);
+    method @Deprecated public static android.net.Uri getContentUri(String);
+    method @Deprecated @NonNull public static android.util.Size getKindSize(int);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, int, android.graphics.BitmapFactory.Options);
+    method @Deprecated public static android.graphics.Bitmap getThumbnail(android.content.ContentResolver, long, long, int, android.graphics.BitmapFactory.Options);
+    field @Deprecated public static final String DATA = "_data";
+    field @Deprecated public static final String DEFAULT_SORT_ORDER = "video_id ASC";
+    field @Deprecated public static final android.net.Uri EXTERNAL_CONTENT_URI;
+    field @Deprecated public static final int FULL_SCREEN_KIND = 2; // 0x2
+    field @Deprecated public static final String HEIGHT = "height";
+    field @Deprecated public static final android.net.Uri INTERNAL_CONTENT_URI;
+    field @Deprecated public static final String KIND = "kind";
+    field @Deprecated public static final int MICRO_KIND = 3; // 0x3
+    field @Deprecated public static final int MINI_KIND = 1; // 0x1
+    field @Deprecated public static final String VIDEO_ID = "video_id";
+    field @Deprecated public static final String WIDTH = "width";
+  }
+
+  public static interface MediaStore.Video.VideoColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String BOOKMARK = "bookmark";
+    field public static final String CATEGORY = "category";
+    field public static final String COLOR_RANGE = "color_range";
+    field public static final String COLOR_STANDARD = "color_standard";
+    field public static final String COLOR_TRANSFER = "color_transfer";
+    field public static final String DESCRIPTION = "description";
+    field public static final String IS_PRIVATE = "isprivate";
+    field public static final String LANGUAGE = "language";
+    field @Deprecated public static final String LATITUDE = "latitude";
+    field @Deprecated public static final String LONGITUDE = "longitude";
+    field @Deprecated public static final String MINI_THUMB_MAGIC = "mini_thumb_magic";
+    field public static final String TAGS = "tags";
+  }
+
+}
+
diff --git a/32/public/api/framework-permission-removed.txt b/32/public/api/framework-permission-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-permission-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-permission-s-removed.txt b/32/public/api/framework-permission-s-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-permission-s-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-permission-s.txt b/32/public/api/framework-permission-s.txt
new file mode 100644
index 0000000..4ecc989
--- /dev/null
+++ b/32/public/api/framework-permission-s.txt
@@ -0,0 +1,19 @@
+// Signature format: 2.0
+package android.app.role {
+
+  public final class RoleManager {
+    method @NonNull public android.content.Intent createRequestRoleIntent(@NonNull String);
+    method public boolean isRoleAvailable(@NonNull String);
+    method public boolean isRoleHeld(@NonNull String);
+    field public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";
+    field public static final String ROLE_BROWSER = "android.app.role.BROWSER";
+    field public static final String ROLE_CALL_REDIRECTION = "android.app.role.CALL_REDIRECTION";
+    field public static final String ROLE_CALL_SCREENING = "android.app.role.CALL_SCREENING";
+    field public static final String ROLE_DIALER = "android.app.role.DIALER";
+    field public static final String ROLE_EMERGENCY = "android.app.role.EMERGENCY";
+    field public static final String ROLE_HOME = "android.app.role.HOME";
+    field public static final String ROLE_SMS = "android.app.role.SMS";
+  }
+
+}
+
diff --git a/32/public/api/framework-permission.txt b/32/public/api/framework-permission.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-permission.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-scheduling-removed.txt b/32/public/api/framework-scheduling-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-scheduling-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-scheduling.txt b/32/public/api/framework-scheduling.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-scheduling.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-sdkextensions-removed.txt b/32/public/api/framework-sdkextensions-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-sdkextensions-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-sdkextensions.txt b/32/public/api/framework-sdkextensions.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-sdkextensions.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-statsd-removed.txt b/32/public/api/framework-statsd-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-statsd-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-statsd.txt b/32/public/api/framework-statsd.txt
new file mode 100644
index 0000000..a655693
--- /dev/null
+++ b/32/public/api/framework-statsd.txt
@@ -0,0 +1,12 @@
+// Signature format: 2.0
+package android.util {
+
+  public final class StatsLog {
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public static boolean logBinaryPushStateChanged(@NonNull String, long, int, int, @NonNull long[]);
+    method public static boolean logEvent(int);
+    method public static boolean logStart(int);
+    method public static boolean logStop(int);
+  }
+
+}
+
diff --git a/32/public/api/framework-tethering-removed.txt b/32/public/api/framework-tethering-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-tethering-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-tethering.txt b/32/public/api/framework-tethering.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-tethering.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-wifi-removed.txt b/32/public/api/framework-wifi-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/framework-wifi-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/framework-wifi.txt b/32/public/api/framework-wifi.txt
new file mode 100644
index 0000000..c5d9c2f
--- /dev/null
+++ b/32/public/api/framework-wifi.txt
@@ -0,0 +1,1370 @@
+// Signature format: 2.0
+package android.net.wifi {
+
+  public abstract class EasyConnectStatusCallback {
+    field public static final int EASY_CONNECT_EVENT_FAILURE_AUTHENTICATION = -2; // 0xfffffffe
+    field public static final int EASY_CONNECT_EVENT_FAILURE_BUSY = -5; // 0xfffffffb
+    field public static final int EASY_CONNECT_EVENT_FAILURE_CANNOT_FIND_NETWORK = -10; // 0xfffffff6
+    field public static final int EASY_CONNECT_EVENT_FAILURE_CONFIGURATION = -4; // 0xfffffffc
+    field public static final int EASY_CONNECT_EVENT_FAILURE_ENROLLEE_AUTHENTICATION = -11; // 0xfffffff5
+    field public static final int EASY_CONNECT_EVENT_FAILURE_ENROLLEE_FAILED_TO_SCAN_NETWORK_CHANNEL = -14; // 0xfffffff2
+    field public static final int EASY_CONNECT_EVENT_FAILURE_ENROLLEE_REJECTED_CONFIGURATION = -12; // 0xfffffff4
+    field public static final int EASY_CONNECT_EVENT_FAILURE_GENERIC = -7; // 0xfffffff9
+    field public static final int EASY_CONNECT_EVENT_FAILURE_INVALID_NETWORK = -9; // 0xfffffff7
+    field public static final int EASY_CONNECT_EVENT_FAILURE_INVALID_URI = -1; // 0xffffffff
+    field public static final int EASY_CONNECT_EVENT_FAILURE_NOT_COMPATIBLE = -3; // 0xfffffffd
+    field public static final int EASY_CONNECT_EVENT_FAILURE_NOT_SUPPORTED = -8; // 0xfffffff8
+    field public static final int EASY_CONNECT_EVENT_FAILURE_TIMEOUT = -6; // 0xfffffffa
+    field public static final int EASY_CONNECT_EVENT_FAILURE_URI_GENERATION = -13; // 0xfffffff3
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    ctor public ScanResult(@NonNull android.net.wifi.ScanResult);
+    ctor public ScanResult();
+    method public static int convertChannelToFrequencyMhzIfSupported(int, int);
+    method public static int convertFrequencyMhzToChannelIfSupported(int);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.wifi.ScanResult.InformationElement> getInformationElements();
+    method public int getWifiStandard();
+    method public boolean is80211mcResponder();
+    method public boolean isPasspointNetwork();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String BSSID;
+    field public static final int CHANNEL_WIDTH_160MHZ = 3; // 0x3
+    field public static final int CHANNEL_WIDTH_20MHZ = 0; // 0x0
+    field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1
+    field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2
+    field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.ScanResult> CREATOR;
+    field public String SSID;
+    field public static final int UNSPECIFIED = -1; // 0xffffffff
+    field public static final int WIFI_BAND_24_GHZ = 1; // 0x1
+    field public static final int WIFI_BAND_5_GHZ = 2; // 0x2
+    field public static final int WIFI_BAND_60_GHZ = 16; // 0x10
+    field public static final int WIFI_BAND_6_GHZ = 8; // 0x8
+    field public static final int WIFI_STANDARD_11AC = 5; // 0x5
+    field public static final int WIFI_STANDARD_11AD = 7; // 0x7
+    field public static final int WIFI_STANDARD_11AX = 6; // 0x6
+    field public static final int WIFI_STANDARD_11N = 4; // 0x4
+    field public static final int WIFI_STANDARD_LEGACY = 1; // 0x1
+    field public static final int WIFI_STANDARD_UNKNOWN = 0; // 0x0
+    field public String capabilities;
+    field public int centerFreq0;
+    field public int centerFreq1;
+    field public int channelWidth;
+    field public int frequency;
+    field public int level;
+    field @Deprecated public CharSequence operatorFriendlyName;
+    field public long timestamp;
+    field @Deprecated public CharSequence venueName;
+  }
+
+  public static class ScanResult.InformationElement implements android.os.Parcelable {
+    ctor public ScanResult.InformationElement(@NonNull android.net.wifi.ScanResult.InformationElement);
+    method public int describeContents();
+    method @NonNull public java.nio.ByteBuffer getBytes();
+    method public int getId();
+    method public int getIdExt();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.ScanResult.InformationElement> CREATOR;
+  }
+
+  public final class SoftApConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getBssid();
+    method @Nullable public String getPassphrase();
+    method public int getSecurityType();
+    method @Nullable public String getSsid();
+    method public boolean isHiddenSsid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.SoftApConfiguration> CREATOR;
+    field public static final int SECURITY_TYPE_OPEN = 0; // 0x0
+    field public static final int SECURITY_TYPE_WPA2_PSK = 1; // 0x1
+    field public static final int SECURITY_TYPE_WPA3_SAE = 3; // 0x3
+    field public static final int SECURITY_TYPE_WPA3_SAE_TRANSITION = 2; // 0x2
+  }
+
+  public enum SupplicantState implements android.os.Parcelable {
+    method public int describeContents();
+    method public static boolean isValidState(android.net.wifi.SupplicantState);
+    method public void writeToParcel(android.os.Parcel, int);
+    enum_constant public static final android.net.wifi.SupplicantState ASSOCIATED;
+    enum_constant public static final android.net.wifi.SupplicantState ASSOCIATING;
+    enum_constant public static final android.net.wifi.SupplicantState AUTHENTICATING;
+    enum_constant public static final android.net.wifi.SupplicantState COMPLETED;
+    enum_constant public static final android.net.wifi.SupplicantState DISCONNECTED;
+    enum_constant public static final android.net.wifi.SupplicantState DORMANT;
+    enum_constant public static final android.net.wifi.SupplicantState FOUR_WAY_HANDSHAKE;
+    enum_constant public static final android.net.wifi.SupplicantState GROUP_HANDSHAKE;
+    enum_constant public static final android.net.wifi.SupplicantState INACTIVE;
+    enum_constant public static final android.net.wifi.SupplicantState INTERFACE_DISABLED;
+    enum_constant public static final android.net.wifi.SupplicantState INVALID;
+    enum_constant public static final android.net.wifi.SupplicantState SCANNING;
+    enum_constant public static final android.net.wifi.SupplicantState UNINITIALIZED;
+  }
+
+  @Deprecated public class WifiConfiguration implements android.os.Parcelable {
+    ctor @Deprecated public WifiConfiguration();
+    ctor @Deprecated public WifiConfiguration(@NonNull android.net.wifi.WifiConfiguration);
+    method public int describeContents();
+    method @Deprecated public android.net.ProxyInfo getHttpProxy();
+    method @Deprecated @NonNull public String getKey();
+    method @Deprecated @NonNull public android.net.MacAddress getRandomizedMacAddress();
+    method @Deprecated public boolean isPasspoint();
+    method @Deprecated public void setHttpProxy(android.net.ProxyInfo);
+    method @Deprecated public void setSecurityParams(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public String BSSID;
+    field @Deprecated public String FQDN;
+    field @Deprecated public static final int SECURITY_TYPE_EAP = 3; // 0x3
+    field @Deprecated public static final int SECURITY_TYPE_EAP_SUITE_B = 5; // 0x5
+    field @Deprecated public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE = 9; // 0x9
+    field @Deprecated public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT = 5; // 0x5
+    field @Deprecated public static final int SECURITY_TYPE_OPEN = 0; // 0x0
+    field @Deprecated public static final int SECURITY_TYPE_OWE = 6; // 0x6
+    field @Deprecated public static final int SECURITY_TYPE_PSK = 2; // 0x2
+    field @Deprecated public static final int SECURITY_TYPE_SAE = 4; // 0x4
+    field @Deprecated public static final int SECURITY_TYPE_WAPI_CERT = 8; // 0x8
+    field @Deprecated public static final int SECURITY_TYPE_WAPI_PSK = 7; // 0x7
+    field @Deprecated public static final int SECURITY_TYPE_WEP = 1; // 0x1
+    field @Deprecated public String SSID;
+    field @Deprecated @NonNull public java.util.BitSet allowedAuthAlgorithms;
+    field @Deprecated @NonNull public java.util.BitSet allowedGroupCiphers;
+    field @Deprecated @NonNull public java.util.BitSet allowedGroupManagementCiphers;
+    field @Deprecated @NonNull public java.util.BitSet allowedKeyManagement;
+    field @Deprecated @NonNull public java.util.BitSet allowedPairwiseCiphers;
+    field @Deprecated @NonNull public java.util.BitSet allowedProtocols;
+    field @Deprecated @NonNull public java.util.BitSet allowedSuiteBCiphers;
+    field @Deprecated public android.net.wifi.WifiEnterpriseConfig enterpriseConfig;
+    field @Deprecated public boolean hiddenSSID;
+    field @Deprecated public boolean isHomeProviderNetwork;
+    field @Deprecated public int networkId;
+    field @Deprecated public String preSharedKey;
+    field @Deprecated public int priority;
+    field @Deprecated public String providerFriendlyName;
+    field @Deprecated public long[] roamingConsortiumIds;
+    field @Deprecated public int status;
+    field @Deprecated public String[] wepKeys;
+    field @Deprecated public int wepTxKeyIndex;
+  }
+
+  @Deprecated public static class WifiConfiguration.AuthAlgorithm {
+    field @Deprecated public static final int LEAP = 2; // 0x2
+    field @Deprecated public static final int OPEN = 0; // 0x0
+    field @Deprecated public static final int SAE = 3; // 0x3
+    field @Deprecated public static final int SHARED = 1; // 0x1
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "auth_alg";
+  }
+
+  @Deprecated public static class WifiConfiguration.GroupCipher {
+    field @Deprecated public static final int CCMP = 3; // 0x3
+    field @Deprecated public static final int GCMP_128 = 7; // 0x7
+    field @Deprecated public static final int GCMP_256 = 5; // 0x5
+    field @Deprecated public static final int SMS4 = 6; // 0x6
+    field @Deprecated public static final int TKIP = 2; // 0x2
+    field @Deprecated public static final int WEP104 = 1; // 0x1
+    field @Deprecated public static final int WEP40 = 0; // 0x0
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "group";
+  }
+
+  @Deprecated public static class WifiConfiguration.GroupMgmtCipher {
+    field @Deprecated public static final int BIP_CMAC_256 = 0; // 0x0
+    field @Deprecated public static final int BIP_GMAC_128 = 1; // 0x1
+    field @Deprecated public static final int BIP_GMAC_256 = 2; // 0x2
+  }
+
+  @Deprecated public static class WifiConfiguration.KeyMgmt {
+    field @Deprecated public static final int IEEE8021X = 3; // 0x3
+    field @Deprecated public static final int NONE = 0; // 0x0
+    field @Deprecated public static final int OWE = 9; // 0x9
+    field @Deprecated public static final int SAE = 8; // 0x8
+    field @Deprecated public static final int SUITE_B_192 = 10; // 0xa
+    field @Deprecated public static final int WPA_EAP = 2; // 0x2
+    field @Deprecated public static final int WPA_PSK = 1; // 0x1
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "key_mgmt";
+  }
+
+  @Deprecated public static class WifiConfiguration.PairwiseCipher {
+    field @Deprecated public static final int CCMP = 2; // 0x2
+    field @Deprecated public static final int GCMP_128 = 5; // 0x5
+    field @Deprecated public static final int GCMP_256 = 3; // 0x3
+    field @Deprecated public static final int NONE = 0; // 0x0
+    field @Deprecated public static final int SMS4 = 4; // 0x4
+    field @Deprecated public static final int TKIP = 1; // 0x1
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "pairwise";
+  }
+
+  @Deprecated public static class WifiConfiguration.Protocol {
+    field @Deprecated public static final int RSN = 1; // 0x1
+    field @Deprecated public static final int WAPI = 3; // 0x3
+    field @Deprecated public static final int WPA = 0; // 0x0
+    field @Deprecated public static final String[] strings;
+    field @Deprecated public static final String varName = "proto";
+  }
+
+  @Deprecated public static class WifiConfiguration.Status {
+    field @Deprecated public static final int CURRENT = 0; // 0x0
+    field @Deprecated public static final int DISABLED = 1; // 0x1
+    field @Deprecated public static final int ENABLED = 2; // 0x2
+    field @Deprecated public static final String[] strings;
+  }
+
+  public class WifiEnterpriseConfig implements android.os.Parcelable {
+    ctor public WifiEnterpriseConfig();
+    ctor public WifiEnterpriseConfig(android.net.wifi.WifiEnterpriseConfig);
+    method public int describeContents();
+    method public String getAltSubjectMatch();
+    method public String getAnonymousIdentity();
+    method @Nullable public java.security.cert.X509Certificate getCaCertificate();
+    method @Nullable public java.security.cert.X509Certificate[] getCaCertificates();
+    method public java.security.cert.X509Certificate getClientCertificate();
+    method @Nullable public java.security.cert.X509Certificate[] getClientCertificateChain();
+    method @Nullable public String getClientKeyPairAlias();
+    method @Nullable public java.security.PrivateKey getClientPrivateKey();
+    method @Nullable public String getDecoratedIdentityPrefix();
+    method public String getDomainSuffixMatch();
+    method public int getEapMethod();
+    method public String getIdentity();
+    method public String getPassword();
+    method public int getPhase2Method();
+    method public String getPlmn();
+    method public String getRealm();
+    method @Deprecated public String getSubjectMatch();
+    method public boolean isAuthenticationSimBased();
+    method public boolean isEapMethodServerCertUsed();
+    method public boolean isServerCertValidationEnabled();
+    method public void setAltSubjectMatch(String);
+    method public void setAnonymousIdentity(String);
+    method public void setCaCertificate(@Nullable java.security.cert.X509Certificate);
+    method public void setCaCertificates(@Nullable java.security.cert.X509Certificate[]);
+    method public void setClientKeyEntry(java.security.PrivateKey, java.security.cert.X509Certificate);
+    method public void setClientKeyEntryWithCertificateChain(java.security.PrivateKey, java.security.cert.X509Certificate[]);
+    method public void setClientKeyPairAlias(@NonNull String);
+    method public void setDecoratedIdentityPrefix(@Nullable String);
+    method public void setDomainSuffixMatch(String);
+    method public void setEapMethod(int);
+    method public void setIdentity(String);
+    method public void setPassword(String);
+    method public void setPhase2Method(int);
+    method public void setPlmn(String);
+    method public void setRealm(String);
+    method @Deprecated public void setSubjectMatch(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiEnterpriseConfig> CREATOR;
+    field public static final String EXTRA_WAPI_AS_CERTIFICATE_DATA = "android.net.wifi.extra.WAPI_AS_CERTIFICATE_DATA";
+    field public static final String EXTRA_WAPI_AS_CERTIFICATE_NAME = "android.net.wifi.extra.WAPI_AS_CERTIFICATE_NAME";
+    field public static final String EXTRA_WAPI_USER_CERTIFICATE_DATA = "android.net.wifi.extra.WAPI_USER_CERTIFICATE_DATA";
+    field public static final String EXTRA_WAPI_USER_CERTIFICATE_NAME = "android.net.wifi.extra.WAPI_USER_CERTIFICATE_NAME";
+    field public static final String WAPI_AS_CERTIFICATE = "WAPIAS_";
+    field public static final String WAPI_USER_CERTIFICATE = "WAPIUSR_";
+  }
+
+  public static final class WifiEnterpriseConfig.Eap {
+    field public static final int AKA = 5; // 0x5
+    field public static final int AKA_PRIME = 6; // 0x6
+    field public static final int NONE = -1; // 0xffffffff
+    field public static final int PEAP = 0; // 0x0
+    field public static final int PWD = 3; // 0x3
+    field public static final int SIM = 4; // 0x4
+    field public static final int TLS = 1; // 0x1
+    field public static final int TTLS = 2; // 0x2
+    field public static final int UNAUTH_TLS = 7; // 0x7
+    field public static final int WAPI_CERT = 8; // 0x8
+  }
+
+  public static final class WifiEnterpriseConfig.Phase2 {
+    field public static final int AKA = 6; // 0x6
+    field public static final int AKA_PRIME = 7; // 0x7
+    field public static final int GTC = 4; // 0x4
+    field public static final int MSCHAP = 2; // 0x2
+    field public static final int MSCHAPV2 = 3; // 0x3
+    field public static final int NONE = 0; // 0x0
+    field public static final int PAP = 1; // 0x1
+    field public static final int SIM = 5; // 0x5
+  }
+
+  public class WifiInfo implements android.os.Parcelable android.net.TransportInfo {
+    method public int describeContents();
+    method public String getBSSID();
+    method public int getCurrentSecurityType();
+    method public static android.net.NetworkInfo.DetailedState getDetailedStateOf(android.net.wifi.SupplicantState);
+    method public int getFrequency();
+    method public boolean getHiddenSSID();
+    method @Nullable public java.util.List<android.net.wifi.ScanResult.InformationElement> getInformationElements();
+    method @Deprecated public int getIpAddress();
+    method public int getLinkSpeed();
+    method @RequiresPermission(allOf={android.Manifest.permission.LOCAL_MAC_ADDRESS, android.Manifest.permission.ACCESS_FINE_LOCATION}) public String getMacAddress();
+    method public int getMaxSupportedRxLinkSpeedMbps();
+    method public int getMaxSupportedTxLinkSpeedMbps();
+    method public int getNetworkId();
+    method @Nullable public String getPasspointFqdn();
+    method @Nullable public String getPasspointProviderFriendlyName();
+    method public int getRssi();
+    method @IntRange(from=0xffffffff) public int getRxLinkSpeedMbps();
+    method public String getSSID();
+    method public int getSubscriptionId();
+    method public android.net.wifi.SupplicantState getSupplicantState();
+    method @IntRange(from=0xffffffff) public int getTxLinkSpeedMbps();
+    method public int getWifiStandard();
+    method @NonNull public android.net.wifi.WifiInfo makeCopy(long);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String FREQUENCY_UNITS = "MHz";
+    field public static final String LINK_SPEED_UNITS = "Mbps";
+    field public static final int LINK_SPEED_UNKNOWN = -1; // 0xffffffff
+    field public static final int SECURITY_TYPE_EAP = 3; // 0x3
+    field public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE = 9; // 0x9
+    field public static final int SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT = 5; // 0x5
+    field public static final int SECURITY_TYPE_OPEN = 0; // 0x0
+    field public static final int SECURITY_TYPE_OSEN = 10; // 0xa
+    field public static final int SECURITY_TYPE_OWE = 6; // 0x6
+    field public static final int SECURITY_TYPE_PASSPOINT_R1_R2 = 11; // 0xb
+    field public static final int SECURITY_TYPE_PASSPOINT_R3 = 12; // 0xc
+    field public static final int SECURITY_TYPE_PSK = 2; // 0x2
+    field public static final int SECURITY_TYPE_SAE = 4; // 0x4
+    field public static final int SECURITY_TYPE_UNKNOWN = -1; // 0xffffffff
+    field public static final int SECURITY_TYPE_WAPI_CERT = 8; // 0x8
+    field public static final int SECURITY_TYPE_WAPI_PSK = 7; // 0x7
+    field public static final int SECURITY_TYPE_WEP = 1; // 0x1
+  }
+
+  public static final class WifiInfo.Builder {
+    ctor public WifiInfo.Builder();
+    method @NonNull public android.net.wifi.WifiInfo build();
+    method @NonNull public android.net.wifi.WifiInfo.Builder setBssid(@NonNull String);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setCurrentSecurityType(int);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setNetworkId(int);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setRssi(int);
+    method @NonNull public android.net.wifi.WifiInfo.Builder setSsid(@NonNull byte[]);
+  }
+
+  public class WifiManager {
+    method @Deprecated public int addNetwork(android.net.wifi.WifiConfiguration);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_MANAGED_PROVISIONING}) public android.net.wifi.WifiManager.AddNetworkResult addNetworkPrivileged(@NonNull android.net.wifi.WifiConfiguration);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public int addNetworkSuggestions(@NonNull java.util.List<android.net.wifi.WifiNetworkSuggestion>);
+    method public void addOrUpdatePasspointConfiguration(android.net.wifi.hotspot2.PasspointConfiguration);
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public void addSuggestionConnectionStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SuggestionConnectionStatusListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void addSuggestionUserApprovalStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SuggestionUserApprovalStatusListener);
+    method @Deprecated public static int calculateSignalLevel(int, int);
+    method @IntRange(from=0) public int calculateSignalLevel(int);
+    method @Deprecated public void cancelWps(android.net.wifi.WifiManager.WpsCallback);
+    method public static int compareSignalLevel(int, int);
+    method public android.net.wifi.WifiManager.MulticastLock createMulticastLock(String);
+    method public android.net.wifi.WifiManager.WifiLock createWifiLock(int, String);
+    method @Deprecated public android.net.wifi.WifiManager.WifiLock createWifiLock(String);
+    method @Deprecated public boolean disableNetwork(int);
+    method @Deprecated public boolean disconnect();
+    method @Deprecated public boolean enableNetwork(int, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_MANAGED_PROVISIONING, android.Manifest.permission.NETWORK_CARRIER_PROVISIONING}) public void flushPasspointAnqpCache();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public java.util.List<android.net.wifi.WifiConfiguration> getCallerConfiguredNetworks();
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public java.util.List<android.net.wifi.WifiConfiguration> getConfiguredNetworks();
+    method @Deprecated public android.net.wifi.WifiInfo getConnectionInfo();
+    method @Deprecated public android.net.DhcpInfo getDhcpInfo();
+    method public int getMaxNumberOfNetworkSuggestionsPerApp();
+    method @IntRange(from=0) public int getMaxSignalLevel();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public java.util.List<android.net.wifi.WifiNetworkSuggestion> getNetworkSuggestions();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.net.wifi.hotspot2.PasspointConfiguration> getPasspointConfigurations();
+    method public java.util.List<android.net.wifi.ScanResult> getScanResults();
+    method public int getWifiState();
+    method public boolean is24GHzBandSupported();
+    method public boolean is5GHzBandSupported();
+    method public boolean is60GHzBandSupported();
+    method public boolean is6GHzBandSupported();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isAutoWakeupEnabled();
+    method public boolean isBridgedApConcurrencySupported();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isCarrierNetworkOffloadEnabled(int, boolean);
+    method public boolean isDecoratedIdentitySupported();
+    method @Deprecated public boolean isDeviceToApRttSupported();
+    method public boolean isEasyConnectEnrolleeResponderModeSupported();
+    method public boolean isEasyConnectSupported();
+    method public boolean isEnhancedOpenSupported();
+    method public boolean isEnhancedPowerReportingSupported();
+    method public boolean isMakeBeforeBreakWifiSwitchingSupported();
+    method public boolean isP2pSupported();
+    method public boolean isPasspointTermsAndConditionsSupported();
+    method public boolean isPreferredNetworkOffloadSupported();
+    method @Deprecated public boolean isScanAlwaysAvailable();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isScanThrottleEnabled();
+    method public boolean isStaApConcurrencySupported();
+    method public boolean isStaBridgedApConcurrencySupported();
+    method public boolean isStaConcurrencyForLocalOnlyConnectionsSupported();
+    method public boolean isTdlsSupported();
+    method public boolean isWapiSupported();
+    method public boolean isWifiDisplayR2Supported();
+    method public boolean isWifiEnabled();
+    method public boolean isWifiStandardSupported(int);
+    method public boolean isWpa3SaeH2eSupported();
+    method public boolean isWpa3SaePublicKeySupported();
+    method public boolean isWpa3SaeSupported();
+    method public boolean isWpa3SuiteBSupported();
+    method @Deprecated public boolean pingSupplicant();
+    method @Deprecated public boolean reassociate();
+    method @Deprecated public boolean reconnect();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void registerScanResultsCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.ScanResultsCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void registerSubsystemRestartTrackingCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SubsystemRestartTrackingCallback);
+    method @Deprecated public boolean removeNetwork(int);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public int removeNetworkSuggestions(@NonNull java.util.List<android.net.wifi.WifiNetworkSuggestion>);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean removeNonCallerConfiguredNetworks();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_CARRIER_PROVISIONING}) public void removePasspointConfiguration(String);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void removeSuggestionConnectionStatusListener(@NonNull android.net.wifi.WifiManager.SuggestionConnectionStatusListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void removeSuggestionUserApprovalStatusListener(@NonNull android.net.wifi.WifiManager.SuggestionUserApprovalStatusListener);
+    method @Deprecated public boolean saveConfiguration();
+    method public void setTdlsEnabled(java.net.InetAddress, boolean);
+    method public void setTdlsEnabledWithMacAddress(String, boolean);
+    method @Deprecated public boolean setWifiEnabled(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback, @Nullable android.os.Handler);
+    method @Deprecated public boolean startScan();
+    method @Deprecated public void startWps(android.net.wifi.WpsInfo, android.net.wifi.WifiManager.WpsCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void unregisterScanResultsCallback(@NonNull android.net.wifi.WifiManager.ScanResultsCallback);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void unregisterSubsystemRestartTrackingCallback(@NonNull android.net.wifi.WifiManager.SubsystemRestartTrackingCallback);
+    method @Deprecated public int updateNetwork(android.net.wifi.WifiConfiguration);
+    field public static final String ACTION_PICK_WIFI_NETWORK = "android.net.wifi.PICK_WIFI_NETWORK";
+    field public static final String ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE = "android.net.wifi.action.REQUEST_SCAN_ALWAYS_AVAILABLE";
+    field public static final String ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION = "android.net.wifi.action.WIFI_NETWORK_SUGGESTION_POST_CONNECTION";
+    field public static final String ACTION_WIFI_SCAN_AVAILABILITY_CHANGED = "android.net.wifi.action.WIFI_SCAN_AVAILABILITY_CHANGED";
+    field @Deprecated public static final int ERROR_AUTHENTICATING = 1; // 0x1
+    field @Deprecated public static final String EXTRA_BSSID = "bssid";
+    field public static final String EXTRA_NETWORK_INFO = "networkInfo";
+    field public static final String EXTRA_NETWORK_SUGGESTION = "android.net.wifi.extra.NETWORK_SUGGESTION";
+    field public static final String EXTRA_NEW_RSSI = "newRssi";
+    field @Deprecated public static final String EXTRA_NEW_STATE = "newState";
+    field public static final String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state";
+    field public static final String EXTRA_RESULTS_UPDATED = "resultsUpdated";
+    field public static final String EXTRA_SCAN_AVAILABLE = "android.net.wifi.extra.SCAN_AVAILABLE";
+    field @Deprecated public static final String EXTRA_SUPPLICANT_CONNECTED = "connected";
+    field @Deprecated public static final String EXTRA_SUPPLICANT_ERROR = "supplicantError";
+    field @Deprecated public static final String EXTRA_WIFI_INFO = "wifiInfo";
+    field public static final String EXTRA_WIFI_STATE = "wifi_state";
+    field public static final String NETWORK_IDS_CHANGED_ACTION = "android.net.wifi.NETWORK_IDS_CHANGED";
+    field public static final String NETWORK_STATE_CHANGED_ACTION = "android.net.wifi.STATE_CHANGE";
+    field public static final String RSSI_CHANGED_ACTION = "android.net.wifi.RSSI_CHANGED";
+    field public static final String SCAN_RESULTS_AVAILABLE_ACTION = "android.net.wifi.SCAN_RESULTS";
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE = 3; // 0x3
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_EXCEEDS_MAX_PER_APP = 4; // 0x4
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_INVALID = 7; // 0x7
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_NOT_ALLOWED = 6; // 0x6
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED = 2; // 0x2
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL = 1; // 0x1
+    field public static final int STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID = 5; // 0x5
+    field public static final int STATUS_NETWORK_SUGGESTIONS_SUCCESS = 0; // 0x0
+    field public static final int STATUS_SUGGESTION_APPROVAL_APPROVED_BY_CARRIER_PRIVILEGE = 4; // 0x4
+    field public static final int STATUS_SUGGESTION_APPROVAL_APPROVED_BY_USER = 2; // 0x2
+    field public static final int STATUS_SUGGESTION_APPROVAL_PENDING = 1; // 0x1
+    field public static final int STATUS_SUGGESTION_APPROVAL_REJECTED_BY_USER = 3; // 0x3
+    field public static final int STATUS_SUGGESTION_APPROVAL_UNKNOWN = 0; // 0x0
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_ASSOCIATION = 1; // 0x1
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_AUTHENTICATION = 2; // 0x2
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_IP_PROVISIONING = 3; // 0x3
+    field public static final int STATUS_SUGGESTION_CONNECTION_FAILURE_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final String SUPPLICANT_CONNECTION_CHANGE_ACTION = "android.net.wifi.supplicant.CONNECTION_CHANGE";
+    field @Deprecated public static final String SUPPLICANT_STATE_CHANGED_ACTION = "android.net.wifi.supplicant.STATE_CHANGE";
+    field public static final String UNKNOWN_SSID = "<unknown ssid>";
+    field @Deprecated public static final int WIFI_MODE_FULL = 1; // 0x1
+    field public static final int WIFI_MODE_FULL_HIGH_PERF = 3; // 0x3
+    field public static final int WIFI_MODE_FULL_LOW_LATENCY = 4; // 0x4
+    field @Deprecated public static final int WIFI_MODE_SCAN_ONLY = 2; // 0x2
+    field public static final String WIFI_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_STATE_CHANGED";
+    field public static final int WIFI_STATE_DISABLED = 1; // 0x1
+    field public static final int WIFI_STATE_DISABLING = 0; // 0x0
+    field public static final int WIFI_STATE_ENABLED = 3; // 0x3
+    field public static final int WIFI_STATE_ENABLING = 2; // 0x2
+    field public static final int WIFI_STATE_UNKNOWN = 4; // 0x4
+    field @Deprecated public static final int WPS_AUTH_FAILURE = 6; // 0x6
+    field @Deprecated public static final int WPS_OVERLAP_ERROR = 3; // 0x3
+    field @Deprecated public static final int WPS_TIMED_OUT = 7; // 0x7
+    field @Deprecated public static final int WPS_TKIP_ONLY_PROHIBITED = 5; // 0x5
+    field @Deprecated public static final int WPS_WEP_PROHIBITED = 4; // 0x4
+  }
+
+  public static final class WifiManager.AddNetworkResult implements android.os.Parcelable {
+    ctor public WifiManager.AddNetworkResult(int, int);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiManager.AddNetworkResult> CREATOR;
+    field public static final int STATUS_ADD_PASSPOINT_FAILURE = 3; // 0x3
+    field public static final int STATUS_ADD_WIFI_CONFIG_FAILURE = 4; // 0x4
+    field public static final int STATUS_FAILURE_UNKNOWN = 1; // 0x1
+    field public static final int STATUS_FAILURE_UPDATE_NETWORK_KEYS = 9; // 0x9
+    field public static final int STATUS_INVALID_CONFIGURATION = 5; // 0x5
+    field public static final int STATUS_INVALID_CONFIGURATION_ENTERPRISE = 10; // 0xa
+    field public static final int STATUS_NO_PERMISSION = 2; // 0x2
+    field public static final int STATUS_NO_PERMISSION_MODIFY_CONFIG = 6; // 0x6
+    field public static final int STATUS_NO_PERMISSION_MODIFY_MAC_RANDOMIZATION = 8; // 0x8
+    field public static final int STATUS_NO_PERMISSION_MODIFY_PROXY_SETTING = 7; // 0x7
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+    field public final int networkId;
+    field public final int statusCode;
+  }
+
+  public static class WifiManager.LocalOnlyHotspotCallback {
+    ctor public WifiManager.LocalOnlyHotspotCallback();
+    method public void onFailed(int);
+    method public void onStarted(android.net.wifi.WifiManager.LocalOnlyHotspotReservation);
+    method public void onStopped();
+    field public static final int ERROR_GENERIC = 2; // 0x2
+    field public static final int ERROR_INCOMPATIBLE_MODE = 3; // 0x3
+    field public static final int ERROR_NO_CHANNEL = 1; // 0x1
+    field public static final int ERROR_TETHERING_DISALLOWED = 4; // 0x4
+  }
+
+  public class WifiManager.LocalOnlyHotspotReservation implements java.lang.AutoCloseable {
+    method public void close();
+    method @NonNull public android.net.wifi.SoftApConfiguration getSoftApConfiguration();
+    method @Deprecated @Nullable public android.net.wifi.WifiConfiguration getWifiConfiguration();
+  }
+
+  public class WifiManager.MulticastLock {
+    method public void acquire();
+    method public boolean isHeld();
+    method public void release();
+    method public void setReferenceCounted(boolean);
+  }
+
+  public abstract static class WifiManager.ScanResultsCallback {
+    ctor public WifiManager.ScanResultsCallback();
+    method public abstract void onScanResultsAvailable();
+  }
+
+  public abstract static class WifiManager.SubsystemRestartTrackingCallback {
+    ctor public WifiManager.SubsystemRestartTrackingCallback();
+    method public abstract void onSubsystemRestarted();
+    method public abstract void onSubsystemRestarting();
+  }
+
+  public static interface WifiManager.SuggestionConnectionStatusListener {
+    method public void onConnectionStatus(@NonNull android.net.wifi.WifiNetworkSuggestion, int);
+  }
+
+  public static interface WifiManager.SuggestionUserApprovalStatusListener {
+    method public void onUserApprovalStatusChange(int);
+  }
+
+  public class WifiManager.WifiLock {
+    method public void acquire();
+    method public boolean isHeld();
+    method public void release();
+    method public void setReferenceCounted(boolean);
+    method public void setWorkSource(android.os.WorkSource);
+  }
+
+  @Deprecated public abstract static class WifiManager.WpsCallback {
+    ctor @Deprecated public WifiManager.WpsCallback();
+    method @Deprecated public abstract void onFailed(int);
+    method @Deprecated public abstract void onStarted(String);
+    method @Deprecated public abstract void onSucceeded();
+  }
+
+  public final class WifiNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getBand();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkSpecifier> CREATOR;
+  }
+
+  public static final class WifiNetworkSpecifier.Builder {
+    ctor public WifiNetworkSpecifier.Builder();
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier build();
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBand(int);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBssid(@NonNull android.net.MacAddress);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setBssidPattern(@NonNull android.net.MacAddress, @NonNull android.net.MacAddress);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setIsEnhancedOpen(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setIsHiddenSsid(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setSsid(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setSsidPattern(@NonNull android.os.PatternMatcher);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa2Passphrase(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3Enterprise192BitModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @Deprecated @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3EnterpriseStandardModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSpecifier.Builder setWpa3Passphrase(@NonNull String);
+  }
+
+  public final class WifiNetworkSuggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getBssid();
+    method @Nullable public android.net.wifi.WifiEnterpriseConfig getEnterpriseConfig();
+    method @Nullable public String getPassphrase();
+    method @Nullable public android.net.wifi.hotspot2.PasspointConfiguration getPasspointConfig();
+    method @IntRange(from=0) public int getPriority();
+    method @IntRange(from=0) public int getPriorityGroup();
+    method @Nullable public String getSsid();
+    method public int getSubscriptionId();
+    method public boolean isAppInteractionRequired();
+    method public boolean isCarrierMerged();
+    method public boolean isCredentialSharedWithUser();
+    method public boolean isEnhancedOpen();
+    method public boolean isHiddenSsid();
+    method public boolean isInitialAutojoinEnabled();
+    method public boolean isMetered();
+    method public boolean isUntrusted();
+    method public boolean isUserInteractionRequired();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkSuggestion> CREATOR;
+    field public static final int RANDOMIZATION_NON_PERSISTENT = 1; // 0x1
+    field public static final int RANDOMIZATION_PERSISTENT = 0; // 0x0
+  }
+
+  public static final class WifiNetworkSuggestion.Builder {
+    ctor public WifiNetworkSuggestion.Builder();
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion build();
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setBssid(@NonNull android.net.MacAddress);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setCarrierMerged(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setCredentialSharedWithUser(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsAppInteractionRequired(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsEnhancedOpen(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsHiddenSsid(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsInitialAutojoinEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsMetered(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsUserInteractionRequired(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setIsWpa3SaeH2eOnlyModeEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setMacRandomizationSetting(int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPasspointConfig(@NonNull android.net.wifi.hotspot2.PasspointConfiguration);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPriority(@IntRange(from=0) int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setPriorityGroup(@IntRange(from=0) int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setSsid(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setSubscriptionId(int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setUntrusted(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWapiEnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWapiPassphrase(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa2Passphrase(@NonNull String);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3Enterprise192BitModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @Deprecated @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3EnterpriseConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3EnterpriseStandardModeConfig(@NonNull android.net.wifi.WifiEnterpriseConfig);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setWpa3Passphrase(@NonNull String);
+  }
+
+  public class WpsInfo implements android.os.Parcelable {
+    ctor public WpsInfo();
+    ctor public WpsInfo(android.net.wifi.WpsInfo);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public String BSSID;
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WpsInfo> CREATOR;
+    field public static final int DISPLAY = 1; // 0x1
+    field public static final int INVALID = 4; // 0x4
+    field public static final int KEYPAD = 2; // 0x2
+    field public static final int LABEL = 3; // 0x3
+    field public static final int PBC = 0; // 0x0
+    field public String pin;
+    field public int setup;
+  }
+
+}
+
+package android.net.wifi.aware {
+
+  public class AttachCallback {
+    ctor public AttachCallback();
+    method public void onAttachFailed();
+    method public void onAttached(android.net.wifi.aware.WifiAwareSession);
+  }
+
+  public final class AwareResources implements android.os.Parcelable {
+    ctor public AwareResources(@IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0) int);
+    method public int describeContents();
+    method @IntRange(from=0) public int getAvailableDataPathsCount();
+    method @IntRange(from=0) public int getAvailablePublishSessionsCount();
+    method @IntRange(from=0) public int getAvailableSubscribeSessionsCount();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.AwareResources> CREATOR;
+  }
+
+  public final class Characteristics implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getMaxMatchFilterLength();
+    method public int getMaxServiceNameLength();
+    method public int getMaxServiceSpecificInfoLength();
+    method public int getSupportedCipherSuites();
+    method public boolean isInstantCommunicationModeSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.Characteristics> CREATOR;
+    field public static final int WIFI_AWARE_CIPHER_SUITE_NCS_SK_128 = 1; // 0x1
+    field public static final int WIFI_AWARE_CIPHER_SUITE_NCS_SK_256 = 2; // 0x2
+  }
+
+  public class DiscoverySession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierOpen(@NonNull android.net.wifi.aware.PeerHandle);
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(@NonNull android.net.wifi.aware.PeerHandle, @NonNull String);
+    method public void sendMessage(@NonNull android.net.wifi.aware.PeerHandle, int, @Nullable byte[]);
+  }
+
+  public class DiscoverySessionCallback {
+    ctor public DiscoverySessionCallback();
+    method public void onMessageReceived(android.net.wifi.aware.PeerHandle, byte[]);
+    method public void onMessageSendFailed(int);
+    method public void onMessageSendSucceeded(int);
+    method public void onPublishStarted(@NonNull android.net.wifi.aware.PublishDiscoverySession);
+    method public void onServiceDiscovered(android.net.wifi.aware.PeerHandle, byte[], java.util.List<byte[]>);
+    method public void onServiceDiscoveredWithinRange(android.net.wifi.aware.PeerHandle, byte[], java.util.List<byte[]>, int);
+    method public void onServiceLost(@NonNull android.net.wifi.aware.PeerHandle, int);
+    method public void onSessionConfigFailed();
+    method public void onSessionConfigUpdated();
+    method public void onSessionTerminated();
+    method public void onSubscribeStarted(@NonNull android.net.wifi.aware.SubscribeDiscoverySession);
+  }
+
+  public class IdentityChangedListener {
+    ctor public IdentityChangedListener();
+    method public void onIdentityChanged(byte[]);
+  }
+
+  public final class ParcelablePeerHandle extends android.net.wifi.aware.PeerHandle implements android.os.Parcelable {
+    ctor public ParcelablePeerHandle(@NonNull android.net.wifi.aware.PeerHandle);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.ParcelablePeerHandle> CREATOR;
+  }
+
+  public class PeerHandle {
+  }
+
+  public final class PublishConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.PublishConfig> CREATOR;
+    field public static final int PUBLISH_TYPE_SOLICITED = 1; // 0x1
+    field public static final int PUBLISH_TYPE_UNSOLICITED = 0; // 0x0
+  }
+
+  public static final class PublishConfig.Builder {
+    ctor public PublishConfig.Builder();
+    method public android.net.wifi.aware.PublishConfig build();
+    method public android.net.wifi.aware.PublishConfig.Builder setMatchFilter(@Nullable java.util.List<byte[]>);
+    method public android.net.wifi.aware.PublishConfig.Builder setPublishType(int);
+    method public android.net.wifi.aware.PublishConfig.Builder setRangingEnabled(boolean);
+    method public android.net.wifi.aware.PublishConfig.Builder setServiceName(@NonNull String);
+    method public android.net.wifi.aware.PublishConfig.Builder setServiceSpecificInfo(@Nullable byte[]);
+    method public android.net.wifi.aware.PublishConfig.Builder setTerminateNotificationEnabled(boolean);
+    method public android.net.wifi.aware.PublishConfig.Builder setTtlSec(int);
+  }
+
+  public class PublishDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+    method public void updatePublish(@NonNull android.net.wifi.aware.PublishConfig);
+  }
+
+  public final class SubscribeConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.SubscribeConfig> CREATOR;
+    field public static final int SUBSCRIBE_TYPE_ACTIVE = 1; // 0x1
+    field public static final int SUBSCRIBE_TYPE_PASSIVE = 0; // 0x0
+  }
+
+  public static final class SubscribeConfig.Builder {
+    ctor public SubscribeConfig.Builder();
+    method public android.net.wifi.aware.SubscribeConfig build();
+    method public android.net.wifi.aware.SubscribeConfig.Builder setMatchFilter(@Nullable java.util.List<byte[]>);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setMaxDistanceMm(int);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setMinDistanceMm(int);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setServiceName(@NonNull String);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setServiceSpecificInfo(@Nullable byte[]);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setSubscribeType(int);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setTerminateNotificationEnabled(boolean);
+    method public android.net.wifi.aware.SubscribeConfig.Builder setTtlSec(int);
+  }
+
+  public class SubscribeDiscoverySession extends android.net.wifi.aware.DiscoverySession {
+    method public void updateSubscribe(@NonNull android.net.wifi.aware.SubscribeConfig);
+  }
+
+  public class WifiAwareManager {
+    method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @Nullable android.os.Handler);
+    method public void attach(@NonNull android.net.wifi.aware.AttachCallback, @NonNull android.net.wifi.aware.IdentityChangedListener, @Nullable android.os.Handler);
+    method @Nullable public android.net.wifi.aware.AwareResources getAvailableAwareResources();
+    method @Nullable public android.net.wifi.aware.Characteristics getCharacteristics();
+    method public boolean isAvailable();
+    method public boolean isDeviceAttached();
+    method public boolean isInstantCommunicationModeEnabled();
+    field public static final String ACTION_WIFI_AWARE_STATE_CHANGED = "android.net.wifi.aware.action.WIFI_AWARE_STATE_CHANGED";
+    field public static final int WIFI_AWARE_DATA_PATH_ROLE_INITIATOR = 0; // 0x0
+    field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
+    field public static final int WIFI_AWARE_DISCOVERY_LOST_REASON_PEER_NOT_VISIBLE = 1; // 0x1
+    field public static final int WIFI_AWARE_DISCOVERY_LOST_REASON_UNKNOWN = 0; // 0x0
+  }
+
+  public final class WifiAwareNetworkInfo implements android.os.Parcelable android.net.TransportInfo {
+    method public int describeContents();
+    method @Nullable public java.net.Inet6Address getPeerIpv6Addr();
+    method public int getPort();
+    method public int getTransportProtocol();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.WifiAwareNetworkInfo> CREATOR;
+  }
+
+  public final class WifiAwareNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.aware.WifiAwareNetworkSpecifier> CREATOR;
+  }
+
+  public static final class WifiAwareNetworkSpecifier.Builder {
+    ctor public WifiAwareNetworkSpecifier.Builder(@NonNull android.net.wifi.aware.DiscoverySession, @NonNull android.net.wifi.aware.PeerHandle);
+    ctor public WifiAwareNetworkSpecifier.Builder(@NonNull android.net.wifi.aware.PublishDiscoverySession);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier build();
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setPmk(@NonNull byte[]);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setPort(@IntRange(from=0, to=65535) int);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setPskPassphrase(@NonNull String);
+    method @NonNull public android.net.wifi.aware.WifiAwareNetworkSpecifier.Builder setTransportProtocol(@IntRange(from=0, to=255) int);
+  }
+
+  public class WifiAwareSession implements java.lang.AutoCloseable {
+    method public void close();
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierOpen(int, @NonNull byte[]);
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(int, @NonNull byte[], @NonNull String);
+    method public void publish(@NonNull android.net.wifi.aware.PublishConfig, @NonNull android.net.wifi.aware.DiscoverySessionCallback, @Nullable android.os.Handler);
+    method public void subscribe(@NonNull android.net.wifi.aware.SubscribeConfig, @NonNull android.net.wifi.aware.DiscoverySessionCallback, @Nullable android.os.Handler);
+  }
+
+}
+
+package android.net.wifi.hotspot2 {
+
+  public final class ConfigParser {
+    method public static android.net.wifi.hotspot2.PasspointConfiguration parsePasspointConfig(String, byte[]);
+  }
+
+  public final class PasspointConfiguration implements android.os.Parcelable {
+    ctor public PasspointConfiguration();
+    ctor public PasspointConfiguration(android.net.wifi.hotspot2.PasspointConfiguration);
+    method public int describeContents();
+    method public android.net.wifi.hotspot2.pps.Credential getCredential();
+    method @Nullable public String getDecoratedIdentityPrefix();
+    method public android.net.wifi.hotspot2.pps.HomeSp getHomeSp();
+    method public long getSubscriptionExpirationTimeMillis();
+    method @NonNull public String getUniqueId();
+    method public boolean isOsuProvisioned();
+    method public void setCredential(android.net.wifi.hotspot2.pps.Credential);
+    method public void setDecoratedIdentityPrefix(@Nullable String);
+    method public void setHomeSp(android.net.wifi.hotspot2.pps.HomeSp);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.PasspointConfiguration> CREATOR;
+  }
+
+}
+
+package android.net.wifi.hotspot2.omadm {
+
+  public final class PpsMoParser {
+    method public static android.net.wifi.hotspot2.PasspointConfiguration parseMoText(String);
+  }
+
+}
+
+package android.net.wifi.hotspot2.pps {
+
+  public final class Credential implements android.os.Parcelable {
+    ctor public Credential();
+    ctor public Credential(android.net.wifi.hotspot2.pps.Credential);
+    method public int describeContents();
+    method public java.security.cert.X509Certificate getCaCertificate();
+    method public android.net.wifi.hotspot2.pps.Credential.CertificateCredential getCertCredential();
+    method public java.security.cert.X509Certificate[] getClientCertificateChain();
+    method public java.security.PrivateKey getClientPrivateKey();
+    method public String getRealm();
+    method public android.net.wifi.hotspot2.pps.Credential.SimCredential getSimCredential();
+    method public android.net.wifi.hotspot2.pps.Credential.UserCredential getUserCredential();
+    method public void setCaCertificate(java.security.cert.X509Certificate);
+    method public void setCertCredential(android.net.wifi.hotspot2.pps.Credential.CertificateCredential);
+    method public void setClientCertificateChain(java.security.cert.X509Certificate[]);
+    method public void setClientPrivateKey(java.security.PrivateKey);
+    method public void setRealm(String);
+    method public void setSimCredential(android.net.wifi.hotspot2.pps.Credential.SimCredential);
+    method public void setUserCredential(android.net.wifi.hotspot2.pps.Credential.UserCredential);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential> CREATOR;
+  }
+
+  public static final class Credential.CertificateCredential implements android.os.Parcelable {
+    ctor public Credential.CertificateCredential();
+    ctor public Credential.CertificateCredential(android.net.wifi.hotspot2.pps.Credential.CertificateCredential);
+    method public int describeContents();
+    method public byte[] getCertSha256Fingerprint();
+    method public String getCertType();
+    method public void setCertSha256Fingerprint(byte[]);
+    method public void setCertType(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.CertificateCredential> CREATOR;
+  }
+
+  public static final class Credential.SimCredential implements android.os.Parcelable {
+    ctor public Credential.SimCredential();
+    ctor public Credential.SimCredential(android.net.wifi.hotspot2.pps.Credential.SimCredential);
+    method public int describeContents();
+    method public int getEapType();
+    method public String getImsi();
+    method public void setEapType(int);
+    method public void setImsi(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.SimCredential> CREATOR;
+  }
+
+  public static final class Credential.UserCredential implements android.os.Parcelable {
+    ctor public Credential.UserCredential();
+    ctor public Credential.UserCredential(android.net.wifi.hotspot2.pps.Credential.UserCredential);
+    method public int describeContents();
+    method public int getEapType();
+    method public String getNonEapInnerMethod();
+    method public String getPassword();
+    method public String getUsername();
+    method public void setEapType(int);
+    method public void setNonEapInnerMethod(String);
+    method public void setPassword(String);
+    method public void setUsername(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.Credential.UserCredential> CREATOR;
+  }
+
+  public final class HomeSp implements android.os.Parcelable {
+    ctor public HomeSp();
+    ctor public HomeSp(android.net.wifi.hotspot2.pps.HomeSp);
+    method public int describeContents();
+    method public String getFqdn();
+    method public String getFriendlyName();
+    method @Nullable public long[] getMatchAllOis();
+    method @Nullable public long[] getMatchAnyOis();
+    method @NonNull public java.util.Collection<java.lang.String> getOtherHomePartnersList();
+    method public long[] getRoamingConsortiumOis();
+    method public void setFqdn(String);
+    method public void setFriendlyName(String);
+    method public void setMatchAllOis(@Nullable long[]);
+    method public void setMatchAnyOis(@Nullable long[]);
+    method public void setOtherHomePartnersList(@NonNull java.util.Collection<java.lang.String>);
+    method public void setRoamingConsortiumOis(long[]);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.pps.HomeSp> CREATOR;
+  }
+
+}
+
+package android.net.wifi.p2p {
+
+  public class WifiP2pConfig implements android.os.Parcelable {
+    ctor public WifiP2pConfig();
+    ctor public WifiP2pConfig(android.net.wifi.p2p.WifiP2pConfig);
+    method public int describeContents();
+    method public int getGroupOwnerBand();
+    method public int getNetworkId();
+    method @Nullable public String getNetworkName();
+    method @Nullable public String getPassphrase();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pConfig> CREATOR;
+    field public static final int GROUP_OWNER_BAND_2GHZ = 1; // 0x1
+    field public static final int GROUP_OWNER_BAND_5GHZ = 2; // 0x2
+    field public static final int GROUP_OWNER_BAND_AUTO = 0; // 0x0
+    field public static final int GROUP_OWNER_INTENT_AUTO = -1; // 0xffffffff
+    field public static final int GROUP_OWNER_INTENT_MAX = 15; // 0xf
+    field public static final int GROUP_OWNER_INTENT_MIN = 0; // 0x0
+    field public String deviceAddress;
+    field @IntRange(from=0, to=15) public int groupOwnerIntent;
+    field public android.net.wifi.WpsInfo wps;
+  }
+
+  public static final class WifiP2pConfig.Builder {
+    ctor public WifiP2pConfig.Builder();
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig build();
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder enablePersistentMode(boolean);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setDeviceAddress(@Nullable android.net.MacAddress);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setGroupOperatingBand(int);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setGroupOperatingFrequency(int);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setNetworkName(@NonNull String);
+    method @NonNull public android.net.wifi.p2p.WifiP2pConfig.Builder setPassphrase(@NonNull String);
+  }
+
+  public class WifiP2pDevice implements android.os.Parcelable {
+    ctor public WifiP2pDevice();
+    ctor public WifiP2pDevice(android.net.wifi.p2p.WifiP2pDevice);
+    method public int describeContents();
+    method @Nullable public android.net.wifi.p2p.WifiP2pWfdInfo getWfdInfo();
+    method public boolean isGroupOwner();
+    method public boolean isServiceDiscoveryCapable();
+    method public void update(@NonNull android.net.wifi.p2p.WifiP2pDevice);
+    method public boolean wpsDisplaySupported();
+    method public boolean wpsKeypadSupported();
+    method public boolean wpsPbcSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AVAILABLE = 3; // 0x3
+    field public static final int CONNECTED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pDevice> CREATOR;
+    field public static final int FAILED = 2; // 0x2
+    field public static final int INVITED = 1; // 0x1
+    field public static final int UNAVAILABLE = 4; // 0x4
+    field public String deviceAddress;
+    field public String deviceName;
+    field public String primaryDeviceType;
+    field public String secondaryDeviceType;
+    field public int status;
+  }
+
+  public class WifiP2pDeviceList implements android.os.Parcelable {
+    ctor public WifiP2pDeviceList();
+    ctor public WifiP2pDeviceList(android.net.wifi.p2p.WifiP2pDeviceList);
+    method public int describeContents();
+    method public android.net.wifi.p2p.WifiP2pDevice get(String);
+    method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getDeviceList();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pDeviceList> CREATOR;
+  }
+
+  public class WifiP2pGroup implements android.os.Parcelable {
+    ctor public WifiP2pGroup();
+    ctor public WifiP2pGroup(android.net.wifi.p2p.WifiP2pGroup);
+    method public int describeContents();
+    method public java.util.Collection<android.net.wifi.p2p.WifiP2pDevice> getClientList();
+    method public int getFrequency();
+    method public String getInterface();
+    method public int getNetworkId();
+    method public String getNetworkName();
+    method public android.net.wifi.p2p.WifiP2pDevice getOwner();
+    method public String getPassphrase();
+    method public boolean isGroupOwner();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroup> CREATOR;
+    field public static final int NETWORK_ID_PERSISTENT = -2; // 0xfffffffe
+    field public static final int NETWORK_ID_TEMPORARY = -1; // 0xffffffff
+  }
+
+  public class WifiP2pInfo implements android.os.Parcelable {
+    ctor public WifiP2pInfo();
+    ctor public WifiP2pInfo(android.net.wifi.p2p.WifiP2pInfo);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pInfo> CREATOR;
+    field public boolean groupFormed;
+    field public java.net.InetAddress groupOwnerAddress;
+    field public boolean isGroupOwner;
+  }
+
+  public class WifiP2pManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void addLocalService(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void addServiceRequest(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceRequest, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void cancelConnect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void clearLocalServices(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void clearServiceRequests(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void connect(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pConfig, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void createGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void createGroup(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pConfig, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void discoverPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void discoverServices(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public android.net.wifi.p2p.WifiP2pManager.Channel initialize(android.content.Context, android.os.Looper, android.net.wifi.p2p.WifiP2pManager.ChannelListener);
+    method public void removeGroup(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void removeLocalService(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceInfo, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void removeServiceRequest(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.nsd.WifiP2pServiceRequest, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method public void requestConnectionInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestDeviceInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.DeviceInfoListener);
+    method public void requestDiscoveryState(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.DiscoveryStateListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestGroupInfo(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.GroupInfoListener);
+    method public void requestNetworkInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.NetworkInfoListener);
+    method public void requestP2pState(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pManager.P2pStateListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void requestPeers(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.PeerListListener);
+    method public void setDnsSdResponseListeners(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.DnsSdServiceResponseListener, android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener);
+    method public void setServiceResponseListener(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ServiceResponseListener);
+    method public void setUpnpServiceResponseListener(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.UpnpServiceResponseListener);
+    method public void stopPeerDiscovery(android.net.wifi.p2p.WifiP2pManager.Channel, android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    field public static final int BUSY = 2; // 0x2
+    field public static final int ERROR = 0; // 0x0
+    field public static final String EXTRA_DISCOVERY_STATE = "discoveryState";
+    field public static final String EXTRA_NETWORK_INFO = "networkInfo";
+    field public static final String EXTRA_P2P_DEVICE_LIST = "wifiP2pDeviceList";
+    field public static final String EXTRA_WIFI_P2P_DEVICE = "wifiP2pDevice";
+    field public static final String EXTRA_WIFI_P2P_GROUP = "p2pGroupInfo";
+    field public static final String EXTRA_WIFI_P2P_INFO = "wifiP2pInfo";
+    field public static final String EXTRA_WIFI_STATE = "wifi_p2p_state";
+    field public static final int NO_SERVICE_REQUESTS = 3; // 0x3
+    field public static final int P2P_UNSUPPORTED = 1; // 0x1
+    field public static final String WIFI_P2P_CONNECTION_CHANGED_ACTION = "android.net.wifi.p2p.CONNECTION_STATE_CHANGE";
+    field public static final String WIFI_P2P_DISCOVERY_CHANGED_ACTION = "android.net.wifi.p2p.DISCOVERY_STATE_CHANGE";
+    field public static final int WIFI_P2P_DISCOVERY_STARTED = 2; // 0x2
+    field public static final int WIFI_P2P_DISCOVERY_STOPPED = 1; // 0x1
+    field public static final String WIFI_P2P_PEERS_CHANGED_ACTION = "android.net.wifi.p2p.PEERS_CHANGED";
+    field public static final String WIFI_P2P_STATE_CHANGED_ACTION = "android.net.wifi.p2p.STATE_CHANGED";
+    field public static final int WIFI_P2P_STATE_DISABLED = 1; // 0x1
+    field public static final int WIFI_P2P_STATE_ENABLED = 2; // 0x2
+    field public static final String WIFI_P2P_THIS_DEVICE_CHANGED_ACTION = "android.net.wifi.p2p.THIS_DEVICE_CHANGED";
+  }
+
+  public static interface WifiP2pManager.ActionListener {
+    method public void onFailure(int);
+    method public void onSuccess();
+  }
+
+  public static class WifiP2pManager.Channel implements java.lang.AutoCloseable {
+    method public void close();
+  }
+
+  public static interface WifiP2pManager.ChannelListener {
+    method public void onChannelDisconnected();
+  }
+
+  public static interface WifiP2pManager.ConnectionInfoListener {
+    method public void onConnectionInfoAvailable(android.net.wifi.p2p.WifiP2pInfo);
+  }
+
+  public static interface WifiP2pManager.DeviceInfoListener {
+    method public void onDeviceInfoAvailable(@Nullable android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.DiscoveryStateListener {
+    method public void onDiscoveryStateAvailable(int);
+  }
+
+  public static interface WifiP2pManager.DnsSdServiceResponseListener {
+    method public void onDnsSdServiceAvailable(String, String, android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.DnsSdTxtRecordListener {
+    method public void onDnsSdTxtRecordAvailable(String, java.util.Map<java.lang.String,java.lang.String>, android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.GroupInfoListener {
+    method public void onGroupInfoAvailable(android.net.wifi.p2p.WifiP2pGroup);
+  }
+
+  public static interface WifiP2pManager.NetworkInfoListener {
+    method public void onNetworkInfoAvailable(@NonNull android.net.NetworkInfo);
+  }
+
+  public static interface WifiP2pManager.P2pStateListener {
+    method public void onP2pStateAvailable(int);
+  }
+
+  public static interface WifiP2pManager.PeerListListener {
+    method public void onPeersAvailable(android.net.wifi.p2p.WifiP2pDeviceList);
+  }
+
+  public static interface WifiP2pManager.ServiceResponseListener {
+    method public void onServiceAvailable(int, byte[], android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public static interface WifiP2pManager.UpnpServiceResponseListener {
+    method public void onUpnpServiceAvailable(java.util.List<java.lang.String>, android.net.wifi.p2p.WifiP2pDevice);
+  }
+
+  public final class WifiP2pWfdInfo implements android.os.Parcelable {
+    ctor public WifiP2pWfdInfo();
+    ctor public WifiP2pWfdInfo(@Nullable android.net.wifi.p2p.WifiP2pWfdInfo);
+    method public int describeContents();
+    method public int getControlPort();
+    method public int getDeviceInfo();
+    method public int getDeviceType();
+    method public int getMaxThroughput();
+    method public int getR2DeviceInfo();
+    method public int getR2DeviceType();
+    method public boolean isContentProtectionSupported();
+    method public boolean isCoupledSinkSupportedAtSink();
+    method public boolean isCoupledSinkSupportedAtSource();
+    method public boolean isEnabled();
+    method public boolean isR2Supported();
+    method public boolean isSessionAvailable();
+    method public void setContentProtectionSupported(boolean);
+    method public void setControlPort(@IntRange(from=0) int);
+    method public void setCoupledSinkSupportAtSink(boolean);
+    method public void setCoupledSinkSupportAtSource(boolean);
+    method public boolean setDeviceType(int);
+    method public void setEnabled(boolean);
+    method public void setMaxThroughput(@IntRange(from=0) int);
+    method public boolean setR2DeviceType(int);
+    method public void setSessionAvailable(boolean);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pWfdInfo> CREATOR;
+    field public static final int DEVICE_INFO_AUDIO_ONLY_SUPPORT_AT_SOURCE = 2048; // 0x800
+    field public static final int DEVICE_INFO_AUDIO_UNSUPPORTED_AT_PRIMARY_SINK = 1024; // 0x400
+    field public static final int DEVICE_INFO_CONTENT_PROTECTION_SUPPORT = 256; // 0x100
+    field public static final int DEVICE_INFO_COUPLED_SINK_SUPPORT_AT_SINK = 8; // 0x8
+    field public static final int DEVICE_INFO_COUPLED_SINK_SUPPORT_AT_SOURCE = 4; // 0x4
+    field public static final int DEVICE_INFO_DEVICE_TYPE_MASK = 3; // 0x3
+    field public static final int DEVICE_INFO_PREFERRED_CONNECTIVITY_MASK = 128; // 0x80
+    field public static final int DEVICE_INFO_SESSION_AVAILABLE_MASK = 48; // 0x30
+    field public static final int DEVICE_INFO_TDLS_PERSISTENT_GROUP = 4096; // 0x1000
+    field public static final int DEVICE_INFO_TDLS_PERSISTENT_GROUP_REINVOKE = 8192; // 0x2000
+    field public static final int DEVICE_INFO_TIME_SYNCHRONIZATION_SUPPORT = 512; // 0x200
+    field public static final int DEVICE_INFO_WFD_SERVICE_DISCOVERY_SUPPORT = 64; // 0x40
+    field public static final int DEVICE_TYPE_PRIMARY_SINK = 1; // 0x1
+    field public static final int DEVICE_TYPE_SECONDARY_SINK = 2; // 0x2
+    field public static final int DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK = 3; // 0x3
+    field public static final int DEVICE_TYPE_WFD_SOURCE = 0; // 0x0
+    field public static final int PREFERRED_CONNECTIVITY_P2P = 0; // 0x0
+    field public static final int PREFERRED_CONNECTIVITY_TDLS = 1; // 0x1
+  }
+
+}
+
+package android.net.wifi.p2p.nsd {
+
+  public class WifiP2pDnsSdServiceInfo extends android.net.wifi.p2p.nsd.WifiP2pServiceInfo {
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo newInstance(String, String, java.util.Map<java.lang.String,java.lang.String>);
+  }
+
+  public class WifiP2pDnsSdServiceRequest extends android.net.wifi.p2p.nsd.WifiP2pServiceRequest {
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance();
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance(String);
+    method public static android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest newInstance(String, String);
+  }
+
+  public class WifiP2pServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int SERVICE_TYPE_ALL = 0; // 0x0
+    field public static final int SERVICE_TYPE_BONJOUR = 1; // 0x1
+    field public static final int SERVICE_TYPE_UPNP = 2; // 0x2
+    field public static final int SERVICE_TYPE_VENDOR_SPECIFIC = 255; // 0xff
+  }
+
+  public class WifiP2pServiceRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public static android.net.wifi.p2p.nsd.WifiP2pServiceRequest newInstance(int, String);
+    method public static android.net.wifi.p2p.nsd.WifiP2pServiceRequest newInstance(int);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public class WifiP2pUpnpServiceInfo extends android.net.wifi.p2p.nsd.WifiP2pServiceInfo {
+    method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo newInstance(String, String, java.util.List<java.lang.String>);
+  }
+
+  public class WifiP2pUpnpServiceRequest extends android.net.wifi.p2p.nsd.WifiP2pServiceRequest {
+    method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest newInstance();
+    method public static android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest newInstance(String);
+  }
+
+}
+
+package android.net.wifi.rtt {
+
+  public class CivicLocationKeys {
+    field public static final int ADDITIONAL_CODE = 32; // 0x20
+    field public static final int APT = 26; // 0x1a
+    field public static final int BOROUGH = 4; // 0x4
+    field public static final int BRANCH_ROAD_NAME = 36; // 0x24
+    field public static final int BUILDING = 25; // 0x19
+    field public static final int CITY = 3; // 0x3
+    field public static final int COUNTY = 2; // 0x2
+    field public static final int DESK = 33; // 0x21
+    field public static final int FLOOR = 27; // 0x1b
+    field public static final int GROUP_OF_STREETS = 6; // 0x6
+    field public static final int HNO = 19; // 0x13
+    field public static final int HNS = 20; // 0x14
+    field public static final int LANGUAGE = 0; // 0x0
+    field public static final int LMK = 21; // 0x15
+    field public static final int LOC = 22; // 0x16
+    field public static final int NAM = 23; // 0x17
+    field public static final int NEIGHBORHOOD = 5; // 0x5
+    field public static final int PCN = 30; // 0x1e
+    field public static final int POD = 17; // 0x11
+    field public static final int POSTAL_CODE = 24; // 0x18
+    field public static final int PO_BOX = 31; // 0x1f
+    field public static final int PRD = 16; // 0x10
+    field public static final int PRIMARY_ROAD_NAME = 34; // 0x22
+    field public static final int ROAD_SECTION = 35; // 0x23
+    field public static final int ROOM = 28; // 0x1c
+    field public static final int SCRIPT = 128; // 0x80
+    field public static final int STATE = 1; // 0x1
+    field public static final int STREET_NAME_POST_MODIFIER = 39; // 0x27
+    field public static final int STREET_NAME_PRE_MODIFIER = 38; // 0x26
+    field public static final int STS = 18; // 0x12
+    field public static final int SUBBRANCH_ROAD_NAME = 37; // 0x25
+    field public static final int TYPE_OF_PLACE = 29; // 0x1d
+  }
+
+  public final class RangingRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public static int getDefaultRttBurstSize();
+    method public static int getMaxPeers();
+    method public static int getMaxRttBurstSize();
+    method public static int getMinRttBurstSize();
+    method public int getRttBurstSize();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingRequest> CREATOR;
+  }
+
+  public static final class RangingRequest.Builder {
+    ctor public RangingRequest.Builder();
+    method public android.net.wifi.rtt.RangingRequest.Builder addAccessPoint(@NonNull android.net.wifi.ScanResult);
+    method public android.net.wifi.rtt.RangingRequest.Builder addAccessPoints(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method @NonNull public android.net.wifi.rtt.RangingRequest.Builder addNon80211mcCapableAccessPoint(@NonNull android.net.wifi.ScanResult);
+    method @NonNull public android.net.wifi.rtt.RangingRequest.Builder addNon80211mcCapableAccessPoints(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.MacAddress);
+    method public android.net.wifi.rtt.RangingRequest.Builder addWifiAwarePeer(@NonNull android.net.wifi.aware.PeerHandle);
+    method public android.net.wifi.rtt.RangingRequest build();
+    method @NonNull public android.net.wifi.rtt.RangingRequest.Builder setRttBurstSize(int);
+  }
+
+  public final class RangingResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDistanceMm();
+    method public int getDistanceStdDevMm();
+    method @Nullable public android.net.MacAddress getMacAddress();
+    method public int getNumAttemptedMeasurements();
+    method public int getNumSuccessfulMeasurements();
+    method @Nullable public android.net.wifi.aware.PeerHandle getPeerHandle();
+    method public long getRangingTimestampMillis();
+    method public int getRssi();
+    method public int getStatus();
+    method @Nullable public android.net.wifi.rtt.ResponderLocation getUnverifiedResponderLocation();
+    method public boolean is80211mcMeasurement();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.RangingResult> CREATOR;
+    field public static final int STATUS_FAIL = 1; // 0x1
+    field public static final int STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC = 2; // 0x2
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public abstract class RangingResultCallback {
+    ctor public RangingResultCallback();
+    method public abstract void onRangingFailure(int);
+    method public abstract void onRangingResults(@NonNull java.util.List<android.net.wifi.rtt.RangingResult>);
+    field public static final int STATUS_CODE_FAIL = 1; // 0x1
+    field public static final int STATUS_CODE_FAIL_RTT_NOT_AVAILABLE = 2; // 0x2
+  }
+
+  public final class ResponderLocation implements android.os.Parcelable {
+    method public int describeContents();
+    method public double getAltitude();
+    method public int getAltitudeType();
+    method public double getAltitudeUncertainty();
+    method public java.util.List<android.net.MacAddress> getColocatedBssids();
+    method public int getDatum();
+    method public int getExpectedToMove();
+    method public double getFloorNumber();
+    method public double getHeightAboveFloorMeters();
+    method public double getHeightAboveFloorUncertaintyMeters();
+    method public double getLatitude();
+    method public double getLatitudeUncertainty();
+    method public int getLciVersion();
+    method public double getLongitude();
+    method public double getLongitudeUncertainty();
+    method @Nullable public String getMapImageMimeType();
+    method @Nullable public android.net.Uri getMapImageUri();
+    method public boolean getRegisteredLocationAgreementIndication();
+    method public boolean isLciSubelementValid();
+    method public boolean isZaxisSubelementValid();
+    method @Nullable public android.location.Address toCivicLocationAddress();
+    method @Nullable public android.util.SparseArray<java.lang.String> toCivicLocationSparseArray();
+    method @NonNull public android.location.Location toLocation();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALTITUDE_FLOORS = 2; // 0x2
+    field public static final int ALTITUDE_METERS = 1; // 0x1
+    field public static final int ALTITUDE_UNDEFINED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.ResponderLocation> CREATOR;
+    field public static final int DATUM_NAD83_MLLW = 3; // 0x3
+    field public static final int DATUM_NAD83_NAV88 = 2; // 0x2
+    field public static final int DATUM_UNDEFINED = 0; // 0x0
+    field public static final int DATUM_WGS84 = 1; // 0x1
+    field public static final int LCI_VERSION_1 = 1; // 0x1
+    field public static final int LOCATION_FIXED = 0; // 0x0
+    field public static final int LOCATION_MOVEMENT_UNKNOWN = 2; // 0x2
+    field public static final int LOCATION_RESERVED = 3; // 0x3
+    field public static final int LOCATION_VARIABLE = 1; // 0x1
+  }
+
+  public class WifiRttManager {
+    method public boolean isAvailable();
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.ACCESS_WIFI_STATE}) public void startRanging(@NonNull android.net.wifi.rtt.RangingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.rtt.RangingResultCallback);
+    field public static final String ACTION_WIFI_RTT_STATE_CHANGED = "android.net.wifi.rtt.action.WIFI_RTT_STATE_CHANGED";
+  }
+
+}
+
diff --git a/32/public/api/javax.obex-removed.txt b/32/public/api/javax.obex-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/javax.obex-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/javax.obex.txt b/32/public/api/javax.obex.txt
new file mode 100644
index 0000000..f142bc8
--- /dev/null
+++ b/32/public/api/javax.obex.txt
@@ -0,0 +1,13 @@
+// Signature format: 2.0
+package javax.obex {
+
+  public class ObexPacket {
+    method public static javax.obex.ObexPacket read(java.io.InputStream) throws java.io.IOException;
+    method public static javax.obex.ObexPacket read(int, java.io.InputStream) throws java.io.IOException;
+    field public int mHeaderId;
+    field public int mLength;
+    field public byte[] mPayload;
+  }
+
+}
+
diff --git a/32/public/api/org.apache.http.legacy-removed.txt b/32/public/api/org.apache.http.legacy-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/org.apache.http.legacy-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/org.apache.http.legacy.txt b/32/public/api/org.apache.http.legacy.txt
new file mode 100644
index 0000000..9f1b879
--- /dev/null
+++ b/32/public/api/org.apache.http.legacy.txt
@@ -0,0 +1,4144 @@
+// Signature format: 2.0
+package android.net.compatibility {
+
+  public class WebAddress {
+    ctor public WebAddress(String) throws java.lang.IllegalArgumentException;
+    method public String getAuthInfo();
+    method public String getHost();
+    method public String getPath();
+    method public int getPort();
+    method public String getScheme();
+    method public void setAuthInfo(String);
+    method public void setHost(String);
+    method public void setPath(String);
+    method public void setPort(int);
+    method public void setScheme(String);
+  }
+
+}
+
+package android.net.http {
+
+  public final class AndroidHttpClient implements org.apache.http.client.HttpClient {
+    method public void close();
+    method public void disableCurlLogging();
+    method public void enableCurlLogging(String, int);
+    method public org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws java.io.IOException;
+    method public org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws java.io.IOException;
+    method public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest) throws java.io.IOException;
+    method public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws java.io.IOException;
+    method public <T> T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler<? extends T>) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method public <T> T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler<? extends T>, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method public <T> T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler<? extends T>) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method public <T> T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler<? extends T>, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method public static org.apache.http.entity.AbstractHttpEntity getCompressedEntity(byte[], android.content.ContentResolver) throws java.io.IOException;
+    method public org.apache.http.conn.ClientConnectionManager getConnectionManager();
+    method public static long getMinGzipSize(android.content.ContentResolver);
+    method public org.apache.http.params.HttpParams getParams();
+    method public static java.io.InputStream getUngzippedContent(org.apache.http.HttpEntity) throws java.io.IOException;
+    method public static void modifyRequestToAcceptGzipResponse(org.apache.http.HttpRequest);
+    method public static android.net.http.AndroidHttpClient newInstance(String, android.content.Context);
+    method public static android.net.http.AndroidHttpClient newInstance(String);
+    method public static long parseDate(String);
+    field public static long DEFAULT_SYNC_MIN_GZIP_BYTES;
+  }
+
+  public class AndroidHttpClientConnection implements org.apache.http.HttpConnection org.apache.http.HttpInetConnection {
+    ctor public AndroidHttpClientConnection();
+    method public void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method public void close() throws java.io.IOException;
+    method protected void doFlush() throws java.io.IOException;
+    method public void flush() throws java.io.IOException;
+    method public java.net.InetAddress getLocalAddress();
+    method public int getLocalPort();
+    method public org.apache.http.HttpConnectionMetrics getMetrics();
+    method public java.net.InetAddress getRemoteAddress();
+    method public int getRemotePort();
+    method public int getSocketTimeout();
+    method public boolean isOpen();
+    method public boolean isStale();
+    method public org.apache.http.StatusLine parseResponseHeader(android.net.http.Headers) throws java.io.IOException, org.apache.http.ParseException;
+    method public org.apache.http.HttpEntity receiveResponseEntity(android.net.http.Headers);
+    method public void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method public void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method public void setSocketTimeout(int);
+    method public void shutdown() throws java.io.IOException;
+  }
+
+  public class CertificateChainValidator {
+    method public android.net.http.SslError doHandshakeAndValidateServerCertificates(android.net.http.HttpsConnection, javax.net.ssl.SSLSocket, String) throws java.io.IOException;
+    method public static android.net.http.CertificateChainValidator getInstance();
+    method public static void handleTrustStorageUpdate();
+    method public static android.net.http.SslError verifyServerCertificates(byte[][], String, String) throws java.io.IOException;
+  }
+
+  public abstract class Connection {
+  }
+
+  public class DelegatingSSLSession implements javax.net.ssl.SSLSession {
+    ctor protected DelegatingSSLSession();
+    method public int getApplicationBufferSize();
+    method public String getCipherSuite();
+    method public long getCreationTime();
+    method public byte[] getId();
+    method public long getLastAccessedTime();
+    method public java.security.cert.Certificate[] getLocalCertificates();
+    method public java.security.Principal getLocalPrincipal();
+    method public int getPacketBufferSize();
+    method public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public java.security.cert.Certificate[] getPeerCertificates() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public String getPeerHost();
+    method public int getPeerPort();
+    method public java.security.Principal getPeerPrincipal() throws javax.net.ssl.SSLPeerUnverifiedException;
+    method public String getProtocol();
+    method public javax.net.ssl.SSLSessionContext getSessionContext();
+    method public Object getValue(String);
+    method public String[] getValueNames();
+    method public void invalidate();
+    method public boolean isValid();
+    method public void putValue(String, Object);
+    method public void removeValue(String);
+  }
+
+  public static class DelegatingSSLSession.CertificateWrap extends android.net.http.DelegatingSSLSession {
+    ctor public DelegatingSSLSession.CertificateWrap(java.security.cert.Certificate);
+  }
+
+  public interface EventHandler {
+    method public void certificate(android.net.http.SslCertificate);
+    method public void data(byte[], int);
+    method public void endData();
+    method public void error(int, String);
+    method public boolean handleSslErrorRequest(android.net.http.SslError);
+    method public void headers(android.net.http.Headers);
+    method public void status(int, int, int, String);
+    field public static final int ERROR = -1; // 0xffffffff
+    field public static final int ERROR_AUTH = -4; // 0xfffffffc
+    field public static final int ERROR_BAD_URL = -12; // 0xfffffff4
+    field public static final int ERROR_CONNECT = -6; // 0xfffffffa
+    field public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; // 0xfffffff5
+    field public static final int ERROR_IO = -7; // 0xfffffff9
+    field public static final int ERROR_LOOKUP = -2; // 0xfffffffe
+    field public static final int ERROR_PROXYAUTH = -5; // 0xfffffffb
+    field public static final int ERROR_REDIRECT_LOOP = -9; // 0xfffffff7
+    field public static final int ERROR_TIMEOUT = -8; // 0xfffffff8
+    field public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; // 0xfffffffd
+    field public static final int ERROR_UNSUPPORTED_SCHEME = -10; // 0xfffffff6
+    field public static final int FILE_ERROR = -13; // 0xfffffff3
+    field public static final int FILE_NOT_FOUND_ERROR = -14; // 0xfffffff2
+    field public static final int OK = 0; // 0x0
+    field public static final int TOO_MANY_REQUESTS_ERROR = -15; // 0xfffffff1
+  }
+
+  public final class Headers {
+    ctor public Headers();
+    method public String getAcceptRanges();
+    method public String getCacheControl();
+    method public int getConnectionType();
+    method public String getContentDisposition();
+    method public String getContentEncoding();
+    method public long getContentLength();
+    method public String getContentType();
+    method public String getEtag();
+    method public String getExpires();
+    method public void getHeaders(android.net.http.Headers.HeaderCallback);
+    method public String getLastModified();
+    method public String getLocation();
+    method public String getPragma();
+    method public String getProxyAuthenticate();
+    method public String getRefresh();
+    method public java.util.ArrayList<java.lang.String> getSetCookie();
+    method public long getTransferEncoding();
+    method public String getWwwAuthenticate();
+    method public String getXPermittedCrossDomainPolicies();
+    method public void parseHeader(org.apache.http.util.CharArrayBuffer);
+    method public void setAcceptRanges(String);
+    method public void setCacheControl(String);
+    method public void setContentDisposition(String);
+    method public void setContentEncoding(String);
+    method public void setContentLength(long);
+    method public void setContentType(String);
+    method public void setEtag(String);
+    method public void setExpires(String);
+    method public void setLastModified(String);
+    method public void setLocation(String);
+    method public void setProxyAuthenticate(String);
+    method public void setWwwAuthenticate(String);
+    method public void setXPermittedCrossDomainPolicies(String);
+    field public static final String ACCEPT_RANGES = "accept-ranges";
+    field public static final String CACHE_CONTROL = "cache-control";
+    field public static final int CONN_CLOSE = 1; // 0x1
+    field public static final String CONN_DIRECTIVE = "connection";
+    field public static final int CONN_KEEP_ALIVE = 2; // 0x2
+    field public static final String CONTENT_DISPOSITION = "content-disposition";
+    field public static final String CONTENT_ENCODING = "content-encoding";
+    field public static final String CONTENT_LEN = "content-length";
+    field public static final String CONTENT_TYPE = "content-type";
+    field public static final String ETAG = "etag";
+    field public static final String EXPIRES = "expires";
+    field public static final String LAST_MODIFIED = "last-modified";
+    field public static final String LOCATION = "location";
+    field public static final int NO_CONN_TYPE = 0; // 0x0
+    field public static final long NO_CONTENT_LENGTH = -1L; // 0xffffffffffffffffL
+    field public static final long NO_TRANSFER_ENCODING = 0L; // 0x0L
+    field public static final String PRAGMA = "pragma";
+    field public static final String PROXY_AUTHENTICATE = "proxy-authenticate";
+    field public static final String PROXY_CONNECTION = "proxy-connection";
+    field public static final String REFRESH = "refresh";
+    field public static final String SET_COOKIE = "set-cookie";
+    field public static final String TRANSFER_ENCODING = "transfer-encoding";
+    field public static final String WWW_AUTHENTICATE = "www-authenticate";
+    field public static final String X_PERMITTED_CROSS_DOMAIN_POLICIES = "x-permitted-cross-domain-policies";
+  }
+
+  public static interface Headers.HeaderCallback {
+    method public void header(String, String);
+  }
+
+  public class HttpAuthHeader {
+    ctor public HttpAuthHeader(String);
+    method public String getAlgorithm();
+    method public String getNonce();
+    method public String getOpaque();
+    method public String getPassword();
+    method public String getQop();
+    method public String getRealm();
+    method public int getScheme();
+    method public boolean getStale();
+    method public String getUsername();
+    method public boolean isBasic();
+    method public boolean isDigest();
+    method public boolean isProxy();
+    method public boolean isSupportedScheme();
+    method public void setPassword(String);
+    method public void setProxy();
+    method public void setUsername(String);
+    field public static final int BASIC = 1; // 0x1
+    field public static final String BASIC_TOKEN = "Basic";
+    field public static final int DIGEST = 2; // 0x2
+    field public static final String DIGEST_TOKEN = "Digest";
+    field public static final int UNKNOWN = 0; // 0x0
+  }
+
+  public class HttpsConnection extends android.net.http.Connection {
+    method public static void initializeEngine(java.io.File);
+  }
+
+  public class LoggingEventHandler implements android.net.http.EventHandler {
+    ctor public LoggingEventHandler();
+    method public void certificate(android.net.http.SslCertificate);
+    method public void data(byte[], int);
+    method public void endData();
+    method public void error(int, String);
+    method public boolean handleSslErrorRequest(android.net.http.SslError);
+    method public void headers(android.net.http.Headers);
+    method public void locationChanged(String, boolean);
+    method public void requestSent();
+    method public void status(int, int, int, String);
+  }
+
+  public class Request {
+  }
+
+  public class RequestHandle {
+    ctor public RequestHandle(android.net.http.RequestQueue, String, android.net.compatibility.WebAddress, String, java.util.Map<java.lang.String,java.lang.String>, java.io.InputStream, int, android.net.http.Request);
+    ctor public RequestHandle(android.net.http.RequestQueue, String, android.net.compatibility.WebAddress, String, java.util.Map<java.lang.String,java.lang.String>, java.io.InputStream, int, android.net.http.Request, android.net.http.Connection);
+    method public static String authorizationHeader(boolean);
+    method public void cancel();
+    method public static String computeBasicAuthResponse(String, String);
+    method public String getMethod();
+    method public int getRedirectCount();
+    method public void handleSslErrorResponse(boolean);
+    method public boolean isRedirectMax();
+    method public void pauseRequest(boolean);
+    method public void processRequest();
+    method public void setRedirectCount(int);
+    method public void setupBasicAuthResponse(boolean, String, String);
+    method public void setupDigestAuthResponse(boolean, String, String, String, String, String, String, String);
+    method public boolean setupRedirect(String, int, java.util.Map<java.lang.String,java.lang.String>);
+    method public void waitUntilComplete();
+    field public static final int MAX_REDIRECT_COUNT = 16; // 0x10
+  }
+
+  public class RequestQueue {
+    ctor public RequestQueue(android.content.Context);
+    ctor public RequestQueue(android.content.Context, int);
+    method public void disablePlatformNotifications();
+    method public void enablePlatformNotifications();
+    method public org.apache.http.HttpHost getProxyHost();
+    method public android.net.http.Request getRequest();
+    method public android.net.http.Request getRequest(org.apache.http.HttpHost);
+    method public boolean haveRequest(org.apache.http.HttpHost);
+    method public android.net.http.RequestHandle queueRequest(String, String, java.util.Map<java.lang.String,java.lang.String>, android.net.http.EventHandler, java.io.InputStream, int);
+    method public android.net.http.RequestHandle queueRequest(String, android.net.compatibility.WebAddress, String, java.util.Map<java.lang.String,java.lang.String>, android.net.http.EventHandler, java.io.InputStream, int);
+    method protected void queueRequest(android.net.http.Request, boolean);
+    method public android.net.http.RequestHandle queueSynchronousRequest(String, android.net.compatibility.WebAddress, String, java.util.Map<java.lang.String,java.lang.String>, android.net.http.EventHandler, java.io.InputStream, int);
+    method public void requeueRequest(android.net.http.Request);
+    method public void shutdown();
+    method public void startTiming();
+    method public void stopTiming();
+  }
+
+}
+
+package com.android.internal.http.multipart {
+
+  public class ByteArrayPartSource implements com.android.internal.http.multipart.PartSource {
+    ctor public ByteArrayPartSource(String, byte[]);
+    method public java.io.InputStream createInputStream();
+    method public String getFileName();
+    method public long getLength();
+  }
+
+  public class FilePart extends com.android.internal.http.multipart.PartBase {
+    ctor public FilePart(String, com.android.internal.http.multipart.PartSource, String, String);
+    ctor public FilePart(String, com.android.internal.http.multipart.PartSource);
+    ctor public FilePart(String, java.io.File) throws java.io.FileNotFoundException;
+    ctor public FilePart(String, java.io.File, String, String) throws java.io.FileNotFoundException;
+    ctor public FilePart(String, String, java.io.File) throws java.io.FileNotFoundException;
+    ctor public FilePart(String, String, java.io.File, String, String) throws java.io.FileNotFoundException;
+    method protected com.android.internal.http.multipart.PartSource getSource();
+    method protected long lengthOfData();
+    method protected void sendData(java.io.OutputStream) throws java.io.IOException;
+    field public static final String DEFAULT_CHARSET = "ISO-8859-1";
+    field public static final String DEFAULT_CONTENT_TYPE = "application/octet-stream";
+    field public static final String DEFAULT_TRANSFER_ENCODING = "binary";
+    field protected static final String FILE_NAME = "; filename=";
+  }
+
+  public class FilePartSource implements com.android.internal.http.multipart.PartSource {
+    ctor public FilePartSource(java.io.File) throws java.io.FileNotFoundException;
+    ctor public FilePartSource(String, java.io.File) throws java.io.FileNotFoundException;
+    method public java.io.InputStream createInputStream() throws java.io.IOException;
+    method public String getFileName();
+    method public long getLength();
+  }
+
+  public class MultipartEntity extends org.apache.http.entity.AbstractHttpEntity {
+    ctor public MultipartEntity(com.android.internal.http.multipart.Part[], org.apache.http.params.HttpParams);
+    ctor public MultipartEntity(com.android.internal.http.multipart.Part[]);
+    method public java.io.InputStream getContent() throws java.io.IOException, java.lang.IllegalStateException;
+    method public long getContentLength();
+    method public org.apache.http.Header getContentType();
+    method protected byte[] getMultipartBoundary();
+    method public boolean isRepeatable();
+    method public boolean isStreaming();
+    method public void writeTo(java.io.OutputStream) throws java.io.IOException;
+    field public static final String MULTIPART_BOUNDARY = "http.method.multipart.boundary";
+    field protected com.android.internal.http.multipart.Part[] parts;
+  }
+
+  public abstract class Part {
+    ctor public Part();
+    method @Deprecated public static String getBoundary();
+    method public abstract String getCharSet();
+    method public abstract String getContentType();
+    method public static long getLengthOfParts(com.android.internal.http.multipart.Part[]) throws java.io.IOException;
+    method public static long getLengthOfParts(com.android.internal.http.multipart.Part[], byte[]) throws java.io.IOException;
+    method public abstract String getName();
+    method protected byte[] getPartBoundary();
+    method public abstract String getTransferEncoding();
+    method public boolean isRepeatable();
+    method public long length() throws java.io.IOException;
+    method protected abstract long lengthOfData() throws java.io.IOException;
+    method public void send(java.io.OutputStream) throws java.io.IOException;
+    method protected void sendContentTypeHeader(java.io.OutputStream) throws java.io.IOException;
+    method protected abstract void sendData(java.io.OutputStream) throws java.io.IOException;
+    method protected void sendDispositionHeader(java.io.OutputStream) throws java.io.IOException;
+    method protected void sendEnd(java.io.OutputStream) throws java.io.IOException;
+    method protected void sendEndOfHeader(java.io.OutputStream) throws java.io.IOException;
+    method public static void sendParts(java.io.OutputStream, com.android.internal.http.multipart.Part[]) throws java.io.IOException;
+    method public static void sendParts(java.io.OutputStream, com.android.internal.http.multipart.Part[], byte[]) throws java.io.IOException;
+    method protected void sendStart(java.io.OutputStream) throws java.io.IOException;
+    method protected void sendTransferEncodingHeader(java.io.OutputStream) throws java.io.IOException;
+    field @Deprecated protected static final String BOUNDARY = "----------------314159265358979323846";
+    field @Deprecated protected static final byte[] BOUNDARY_BYTES;
+    field protected static final String CHARSET = "; charset=";
+    field protected static final byte[] CHARSET_BYTES;
+    field protected static final String CONTENT_DISPOSITION = "Content-Disposition: form-data; name=";
+    field protected static final byte[] CONTENT_DISPOSITION_BYTES;
+    field protected static final String CONTENT_TRANSFER_ENCODING = "Content-Transfer-Encoding: ";
+    field protected static final byte[] CONTENT_TRANSFER_ENCODING_BYTES;
+    field protected static final String CONTENT_TYPE = "Content-Type: ";
+    field protected static final byte[] CONTENT_TYPE_BYTES;
+    field protected static final String CRLF = "\r\n";
+    field protected static final byte[] CRLF_BYTES;
+    field protected static final String EXTRA = "--";
+    field protected static final byte[] EXTRA_BYTES;
+    field protected static final String QUOTE = "\"";
+    field protected static final byte[] QUOTE_BYTES;
+  }
+
+  public abstract class PartBase extends com.android.internal.http.multipart.Part {
+    ctor public PartBase(String, String, String, String);
+    method public String getCharSet();
+    method public String getContentType();
+    method public String getName();
+    method public String getTransferEncoding();
+    method public void setCharSet(String);
+    method public void setContentType(String);
+    method public void setName(String);
+    method public void setTransferEncoding(String);
+  }
+
+  public interface PartSource {
+    method public java.io.InputStream createInputStream() throws java.io.IOException;
+    method public String getFileName();
+    method public long getLength();
+  }
+
+  public class StringPart extends com.android.internal.http.multipart.PartBase {
+    ctor public StringPart(String, String, String);
+    ctor public StringPart(String, String);
+    method protected long lengthOfData();
+    method protected void sendData(java.io.OutputStream) throws java.io.IOException;
+    field public static final String DEFAULT_CHARSET = "US-ASCII";
+    field public static final String DEFAULT_CONTENT_TYPE = "text/plain";
+    field public static final String DEFAULT_TRANSFER_ENCODING = "8bit";
+  }
+
+}
+
+package org.apache.commons.codec {
+
+  @Deprecated public interface BinaryDecoder extends org.apache.commons.codec.Decoder {
+    method @Deprecated public byte[] decode(byte[]) throws org.apache.commons.codec.DecoderException;
+  }
+
+  @Deprecated public interface BinaryEncoder extends org.apache.commons.codec.Encoder {
+    method @Deprecated public byte[] encode(byte[]) throws org.apache.commons.codec.EncoderException;
+  }
+
+  @Deprecated public interface Decoder {
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+  }
+
+  @Deprecated public class DecoderException extends java.lang.Exception {
+    ctor @Deprecated public DecoderException(String);
+  }
+
+  @Deprecated public interface Encoder {
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+  }
+
+  @Deprecated public class EncoderException extends java.lang.Exception {
+    ctor @Deprecated public EncoderException(String);
+  }
+
+  @Deprecated public interface StringDecoder extends org.apache.commons.codec.Decoder {
+    method @Deprecated public String decode(String) throws org.apache.commons.codec.DecoderException;
+  }
+
+  @Deprecated public interface StringEncoder extends org.apache.commons.codec.Encoder {
+    method @Deprecated public String encode(String) throws org.apache.commons.codec.EncoderException;
+  }
+
+  @Deprecated public class StringEncoderComparator implements java.util.Comparator {
+    ctor @Deprecated public StringEncoderComparator();
+    ctor @Deprecated public StringEncoderComparator(org.apache.commons.codec.StringEncoder);
+    method @Deprecated public int compare(Object, Object);
+  }
+
+}
+
+package org.apache.commons.codec.binary {
+
+  @Deprecated public class Base64 implements org.apache.commons.codec.BinaryDecoder org.apache.commons.codec.BinaryEncoder {
+    ctor @Deprecated public Base64();
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public byte[] decode(byte[]);
+    method @Deprecated public static byte[] decodeBase64(byte[]);
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public byte[] encode(byte[]);
+    method @Deprecated public static byte[] encodeBase64(byte[]);
+    method @Deprecated public static byte[] encodeBase64(byte[], boolean);
+    method @Deprecated public static byte[] encodeBase64Chunked(byte[]);
+    method @Deprecated public static boolean isArrayByteBase64(byte[]);
+  }
+
+  @Deprecated public class BinaryCodec implements org.apache.commons.codec.BinaryDecoder org.apache.commons.codec.BinaryEncoder {
+    ctor @Deprecated public BinaryCodec();
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public byte[] decode(byte[]);
+    method @Deprecated public byte[] encode(byte[]);
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public static byte[] fromAscii(char[]);
+    method @Deprecated public static byte[] fromAscii(byte[]);
+    method @Deprecated public static byte[] toAsciiBytes(byte[]);
+    method @Deprecated public static char[] toAsciiChars(byte[]);
+    method @Deprecated public static String toAsciiString(byte[]);
+    method @Deprecated public byte[] toByteArray(String);
+  }
+
+  @Deprecated public class Hex implements org.apache.commons.codec.BinaryDecoder org.apache.commons.codec.BinaryEncoder {
+    ctor @Deprecated public Hex();
+    method @Deprecated public byte[] decode(byte[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public static byte[] decodeHex(char[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public byte[] encode(byte[]);
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public static char[] encodeHex(byte[]);
+    method @Deprecated protected static int toDigit(char, int) throws org.apache.commons.codec.DecoderException;
+  }
+
+}
+
+package org.apache.commons.codec.language {
+
+  @Deprecated public class DoubleMetaphone implements org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public DoubleMetaphone();
+    method @Deprecated protected char charAt(String, int);
+    method @Deprecated protected static boolean contains(String, int, int, String[]);
+    method @Deprecated public String doubleMetaphone(String);
+    method @Deprecated public String doubleMetaphone(String, boolean);
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String);
+    method @Deprecated public int getMaxCodeLen();
+    method @Deprecated public boolean isDoubleMetaphoneEqual(String, String);
+    method @Deprecated public boolean isDoubleMetaphoneEqual(String, String, boolean);
+    method @Deprecated public void setMaxCodeLen(int);
+    field @Deprecated protected int maxCodeLen;
+  }
+
+  @Deprecated public class DoubleMetaphone.DoubleMetaphoneResult {
+    ctor @Deprecated public DoubleMetaphone.DoubleMetaphoneResult(int);
+    method @Deprecated public void append(char);
+    method @Deprecated public void append(char, char);
+    method @Deprecated public void append(String);
+    method @Deprecated public void append(String, String);
+    method @Deprecated public void appendAlternate(char);
+    method @Deprecated public void appendAlternate(String);
+    method @Deprecated public void appendPrimary(char);
+    method @Deprecated public void appendPrimary(String);
+    method @Deprecated public String getAlternate();
+    method @Deprecated public String getPrimary();
+    method @Deprecated public boolean isComplete();
+  }
+
+  @Deprecated public class Metaphone implements org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public Metaphone();
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String);
+    method @Deprecated public int getMaxCodeLen();
+    method @Deprecated public boolean isMetaphoneEqual(String, String);
+    method @Deprecated public String metaphone(String);
+    method @Deprecated public void setMaxCodeLen(int);
+  }
+
+  @Deprecated public class RefinedSoundex implements org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public RefinedSoundex();
+    ctor @Deprecated public RefinedSoundex(char[]);
+    method @Deprecated public int difference(String, String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String);
+    method @Deprecated public String soundex(String);
+    field @Deprecated public static final org.apache.commons.codec.language.RefinedSoundex US_ENGLISH;
+    field @Deprecated public static final char[] US_ENGLISH_MAPPING;
+  }
+
+  @Deprecated public class Soundex implements org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public Soundex();
+    ctor @Deprecated public Soundex(char[]);
+    method @Deprecated public int difference(String, String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String);
+    method @Deprecated public int getMaxLength();
+    method @Deprecated public void setMaxLength(int);
+    method @Deprecated public String soundex(String);
+    field @Deprecated public static final org.apache.commons.codec.language.Soundex US_ENGLISH;
+    field @Deprecated public static final char[] US_ENGLISH_MAPPING;
+    field @Deprecated public static final String US_ENGLISH_MAPPING_STRING = "01230120022455012623010202";
+  }
+
+}
+
+package org.apache.commons.codec.net {
+
+  @Deprecated public class BCodec implements org.apache.commons.codec.StringDecoder org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public BCodec();
+    ctor @Deprecated public BCodec(String);
+    method @Deprecated public String decode(String) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated protected byte[] doDecoding(byte[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated protected byte[] doEncoding(byte[]) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String, String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String getDefaultCharset();
+    method @Deprecated protected String getEncoding();
+  }
+
+  @Deprecated public class QCodec implements org.apache.commons.codec.StringDecoder org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public QCodec();
+    ctor @Deprecated public QCodec(String);
+    method @Deprecated public String decode(String) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated protected byte[] doDecoding(byte[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated protected byte[] doEncoding(byte[]) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String, String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String getDefaultCharset();
+    method @Deprecated protected String getEncoding();
+    method @Deprecated public boolean isEncodeBlanks();
+    method @Deprecated public void setEncodeBlanks(boolean);
+  }
+
+  @Deprecated public class QuotedPrintableCodec implements org.apache.commons.codec.BinaryDecoder org.apache.commons.codec.BinaryEncoder org.apache.commons.codec.StringDecoder org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public QuotedPrintableCodec();
+    ctor @Deprecated public QuotedPrintableCodec(String);
+    method @Deprecated public byte[] decode(byte[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public String decode(String, String) throws org.apache.commons.codec.DecoderException, java.io.UnsupportedEncodingException;
+    method @Deprecated public String decode(String) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public static final byte[] decodeQuotedPrintable(byte[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public byte[] encode(byte[]);
+    method @Deprecated public String encode(String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public String encode(String, String) throws java.io.UnsupportedEncodingException;
+    method @Deprecated public static final byte[] encodeQuotedPrintable(java.util.BitSet, byte[]);
+    method @Deprecated public String getDefaultCharset();
+  }
+
+  @Deprecated public class URLCodec implements org.apache.commons.codec.BinaryDecoder org.apache.commons.codec.BinaryEncoder org.apache.commons.codec.StringDecoder org.apache.commons.codec.StringEncoder {
+    ctor @Deprecated public URLCodec();
+    ctor @Deprecated public URLCodec(String);
+    method @Deprecated public byte[] decode(byte[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public String decode(String, String) throws org.apache.commons.codec.DecoderException, java.io.UnsupportedEncodingException;
+    method @Deprecated public String decode(String) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public Object decode(Object) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public static final byte[] decodeUrl(byte[]) throws org.apache.commons.codec.DecoderException;
+    method @Deprecated public byte[] encode(byte[]);
+    method @Deprecated public String encode(String, String) throws java.io.UnsupportedEncodingException;
+    method @Deprecated public String encode(String) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public Object encode(Object) throws org.apache.commons.codec.EncoderException;
+    method @Deprecated public static final byte[] encodeUrl(java.util.BitSet, byte[]);
+    method @Deprecated public String getDefaultCharset();
+    method @Deprecated public String getEncoding();
+    field @Deprecated protected static byte ESCAPE_CHAR;
+    field @Deprecated protected static final java.util.BitSet WWW_FORM_URL;
+    field @Deprecated protected String charset;
+  }
+
+}
+
+package org.apache.commons.logging {
+
+  @Deprecated public interface Log {
+    method @Deprecated public void debug(Object);
+    method @Deprecated public void debug(Object, Throwable);
+    method @Deprecated public void error(Object);
+    method @Deprecated public void error(Object, Throwable);
+    method @Deprecated public void fatal(Object);
+    method @Deprecated public void fatal(Object, Throwable);
+    method @Deprecated public void info(Object);
+    method @Deprecated public void info(Object, Throwable);
+    method @Deprecated public boolean isDebugEnabled();
+    method @Deprecated public boolean isErrorEnabled();
+    method @Deprecated public boolean isFatalEnabled();
+    method @Deprecated public boolean isInfoEnabled();
+    method @Deprecated public boolean isTraceEnabled();
+    method @Deprecated public boolean isWarnEnabled();
+    method @Deprecated public void trace(Object);
+    method @Deprecated public void trace(Object, Throwable);
+    method @Deprecated public void warn(Object);
+    method @Deprecated public void warn(Object, Throwable);
+  }
+
+  @Deprecated public class LogConfigurationException extends java.lang.RuntimeException {
+    ctor @Deprecated public LogConfigurationException();
+    ctor @Deprecated public LogConfigurationException(String);
+    ctor @Deprecated public LogConfigurationException(Throwable);
+    ctor @Deprecated public LogConfigurationException(String, Throwable);
+    field @Deprecated protected Throwable cause;
+  }
+
+  @Deprecated public abstract class LogFactory {
+    ctor @Deprecated protected LogFactory();
+    method @Deprecated protected static Object createFactory(String, ClassLoader);
+    method @Deprecated protected static ClassLoader directGetContextClassLoader() throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public abstract Object getAttribute(String);
+    method @Deprecated public abstract String[] getAttributeNames();
+    method @Deprecated protected static ClassLoader getClassLoader(Class);
+    method @Deprecated protected static ClassLoader getContextClassLoader() throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public static org.apache.commons.logging.LogFactory getFactory() throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public abstract org.apache.commons.logging.Log getInstance(Class) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public abstract org.apache.commons.logging.Log getInstance(String) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public static org.apache.commons.logging.Log getLog(Class) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public static org.apache.commons.logging.Log getLog(String) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated protected static boolean isDiagnosticsEnabled();
+    method @Deprecated protected static final void logRawDiagnostic(String);
+    method @Deprecated protected static org.apache.commons.logging.LogFactory newFactory(String, ClassLoader, ClassLoader) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated protected static org.apache.commons.logging.LogFactory newFactory(String, ClassLoader);
+    method @Deprecated public static String objectId(Object);
+    method @Deprecated public abstract void release();
+    method @Deprecated public static void release(ClassLoader);
+    method @Deprecated public static void releaseAll();
+    method @Deprecated public abstract void removeAttribute(String);
+    method @Deprecated public abstract void setAttribute(String, Object);
+    field @Deprecated public static final String DIAGNOSTICS_DEST_PROPERTY = "org.apache.commons.logging.diagnostics.dest";
+    field @Deprecated public static final String FACTORY_DEFAULT = "org.apache.commons.logging.impl.LogFactoryImpl";
+    field @Deprecated public static final String FACTORY_PROPERTIES = "commons-logging.properties";
+    field @Deprecated public static final String FACTORY_PROPERTY = "org.apache.commons.logging.LogFactory";
+    field @Deprecated public static final String HASHTABLE_IMPLEMENTATION_PROPERTY = "org.apache.commons.logging.LogFactory.HashtableImpl";
+    field @Deprecated public static final String PRIORITY_KEY = "priority";
+    field @Deprecated protected static final String SERVICE_ID = "META-INF/services/org.apache.commons.logging.LogFactory";
+    field @Deprecated public static final String TCCL_KEY = "use_tccl";
+    field @Deprecated protected static java.util.Hashtable factories;
+    field @Deprecated protected static org.apache.commons.logging.LogFactory nullClassLoaderFactory;
+  }
+
+  @Deprecated public class LogSource {
+    method @Deprecated public static org.apache.commons.logging.Log getInstance(String);
+    method @Deprecated public static org.apache.commons.logging.Log getInstance(Class);
+    method @Deprecated public static String[] getLogNames();
+    method @Deprecated public static org.apache.commons.logging.Log makeNewLogInstance(String);
+    method @Deprecated public static void setLogImplementation(String) throws java.lang.ClassNotFoundException, java.lang.ExceptionInInitializerError, java.lang.LinkageError, java.lang.NoSuchMethodException, java.lang.SecurityException;
+    method @Deprecated public static void setLogImplementation(Class) throws java.lang.ExceptionInInitializerError, java.lang.LinkageError, java.lang.NoSuchMethodException, java.lang.SecurityException;
+    field @Deprecated protected static boolean jdk14IsAvailable;
+    field @Deprecated protected static boolean log4jIsAvailable;
+    field @Deprecated protected static java.lang.reflect.Constructor logImplctor;
+    field @Deprecated protected static java.util.Hashtable logs;
+  }
+
+}
+
+package org.apache.commons.logging.impl {
+
+  @Deprecated public class Jdk14Logger implements org.apache.commons.logging.Log java.io.Serializable {
+    ctor @Deprecated public Jdk14Logger(String);
+    method @Deprecated public void debug(Object);
+    method @Deprecated public void debug(Object, Throwable);
+    method @Deprecated public void error(Object);
+    method @Deprecated public void error(Object, Throwable);
+    method @Deprecated public void fatal(Object);
+    method @Deprecated public void fatal(Object, Throwable);
+    method @Deprecated public java.util.logging.Logger getLogger();
+    method @Deprecated public void info(Object);
+    method @Deprecated public void info(Object, Throwable);
+    method @Deprecated public boolean isDebugEnabled();
+    method @Deprecated public boolean isErrorEnabled();
+    method @Deprecated public boolean isFatalEnabled();
+    method @Deprecated public boolean isInfoEnabled();
+    method @Deprecated public boolean isTraceEnabled();
+    method @Deprecated public boolean isWarnEnabled();
+    method @Deprecated public void trace(Object);
+    method @Deprecated public void trace(Object, Throwable);
+    method @Deprecated public void warn(Object);
+    method @Deprecated public void warn(Object, Throwable);
+    field @Deprecated protected static final java.util.logging.Level dummyLevel;
+    field @Deprecated protected transient java.util.logging.Logger logger;
+    field @Deprecated protected String name;
+  }
+
+  @Deprecated public class LogFactoryImpl extends org.apache.commons.logging.LogFactory {
+    ctor @Deprecated public LogFactoryImpl();
+    method @Deprecated public Object getAttribute(String);
+    method @Deprecated public String[] getAttributeNames();
+    method @Deprecated protected static ClassLoader getClassLoader(Class);
+    method @Deprecated protected static ClassLoader getContextClassLoader() throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public org.apache.commons.logging.Log getInstance(Class) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public org.apache.commons.logging.Log getInstance(String) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated protected String getLogClassName();
+    method @Deprecated protected java.lang.reflect.Constructor getLogConstructor() throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated protected static boolean isDiagnosticsEnabled();
+    method @Deprecated protected boolean isJdk13LumberjackAvailable();
+    method @Deprecated protected boolean isJdk14Available();
+    method @Deprecated protected boolean isLog4JAvailable();
+    method @Deprecated protected void logDiagnostic(String);
+    method @Deprecated protected org.apache.commons.logging.Log newInstance(String) throws org.apache.commons.logging.LogConfigurationException;
+    method @Deprecated public void release();
+    method @Deprecated public void removeAttribute(String);
+    method @Deprecated public void setAttribute(String, Object);
+    field @Deprecated public static final String ALLOW_FLAWED_CONTEXT_PROPERTY = "org.apache.commons.logging.Log.allowFlawedContext";
+    field @Deprecated public static final String ALLOW_FLAWED_DISCOVERY_PROPERTY = "org.apache.commons.logging.Log.allowFlawedDiscovery";
+    field @Deprecated public static final String ALLOW_FLAWED_HIERARCHY_PROPERTY = "org.apache.commons.logging.Log.allowFlawedHierarchy";
+    field @Deprecated public static final String LOG_PROPERTY = "org.apache.commons.logging.Log";
+    field @Deprecated protected static final String LOG_PROPERTY_OLD = "org.apache.commons.logging.log";
+    field @Deprecated protected java.util.Hashtable attributes;
+    field @Deprecated protected java.util.Hashtable instances;
+    field @Deprecated protected java.lang.reflect.Constructor logConstructor;
+    field @Deprecated protected Class[] logConstructorSignature;
+    field @Deprecated protected java.lang.reflect.Method logMethod;
+    field @Deprecated protected Class[] logMethodSignature;
+  }
+
+  @Deprecated public class NoOpLog implements org.apache.commons.logging.Log java.io.Serializable {
+    ctor @Deprecated public NoOpLog();
+    ctor @Deprecated public NoOpLog(String);
+    method @Deprecated public void debug(Object);
+    method @Deprecated public void debug(Object, Throwable);
+    method @Deprecated public void error(Object);
+    method @Deprecated public void error(Object, Throwable);
+    method @Deprecated public void fatal(Object);
+    method @Deprecated public void fatal(Object, Throwable);
+    method @Deprecated public void info(Object);
+    method @Deprecated public void info(Object, Throwable);
+    method @Deprecated public final boolean isDebugEnabled();
+    method @Deprecated public final boolean isErrorEnabled();
+    method @Deprecated public final boolean isFatalEnabled();
+    method @Deprecated public final boolean isInfoEnabled();
+    method @Deprecated public final boolean isTraceEnabled();
+    method @Deprecated public final boolean isWarnEnabled();
+    method @Deprecated public void trace(Object);
+    method @Deprecated public void trace(Object, Throwable);
+    method @Deprecated public void warn(Object);
+    method @Deprecated public void warn(Object, Throwable);
+  }
+
+  @Deprecated public class SimpleLog implements org.apache.commons.logging.Log java.io.Serializable {
+    ctor @Deprecated public SimpleLog(String);
+    method @Deprecated public final void debug(Object);
+    method @Deprecated public final void debug(Object, Throwable);
+    method @Deprecated public final void error(Object);
+    method @Deprecated public final void error(Object, Throwable);
+    method @Deprecated public final void fatal(Object);
+    method @Deprecated public final void fatal(Object, Throwable);
+    method @Deprecated public int getLevel();
+    method @Deprecated public final void info(Object);
+    method @Deprecated public final void info(Object, Throwable);
+    method @Deprecated public final boolean isDebugEnabled();
+    method @Deprecated public final boolean isErrorEnabled();
+    method @Deprecated public final boolean isFatalEnabled();
+    method @Deprecated public final boolean isInfoEnabled();
+    method @Deprecated protected boolean isLevelEnabled(int);
+    method @Deprecated public final boolean isTraceEnabled();
+    method @Deprecated public final boolean isWarnEnabled();
+    method @Deprecated protected void log(int, Object, Throwable);
+    method @Deprecated public void setLevel(int);
+    method @Deprecated public final void trace(Object);
+    method @Deprecated public final void trace(Object, Throwable);
+    method @Deprecated public final void warn(Object);
+    method @Deprecated public final void warn(Object, Throwable);
+    method @Deprecated protected void write(StringBuffer);
+    field @Deprecated protected static final String DEFAULT_DATE_TIME_FORMAT = "yyyy/MM/dd HH:mm:ss:SSS zzz";
+    field @Deprecated public static final int LOG_LEVEL_ALL = 0; // 0x0
+    field @Deprecated public static final int LOG_LEVEL_DEBUG = 2; // 0x2
+    field @Deprecated public static final int LOG_LEVEL_ERROR = 5; // 0x5
+    field @Deprecated public static final int LOG_LEVEL_FATAL = 6; // 0x6
+    field @Deprecated public static final int LOG_LEVEL_INFO = 3; // 0x3
+    field @Deprecated public static final int LOG_LEVEL_OFF = 7; // 0x7
+    field @Deprecated public static final int LOG_LEVEL_TRACE = 1; // 0x1
+    field @Deprecated public static final int LOG_LEVEL_WARN = 4; // 0x4
+    field @Deprecated protected int currentLogLevel;
+    field @Deprecated protected static java.text.DateFormat dateFormatter;
+    field @Deprecated protected static String dateTimeFormat;
+    field @Deprecated protected String logName;
+    field @Deprecated protected static boolean showDateTime;
+    field @Deprecated protected static boolean showLogName;
+    field @Deprecated protected static boolean showShortName;
+    field @Deprecated protected static final java.util.Properties simpleLogProps;
+    field @Deprecated protected static final String systemPrefix = "org.apache.commons.logging.simplelog.";
+  }
+
+  @Deprecated public final class WeakHashtable extends java.util.Hashtable {
+    ctor @Deprecated public WeakHashtable();
+    method @Deprecated public java.util.Enumeration elements();
+    method @Deprecated public java.util.Set entrySet();
+    method @Deprecated public Object get(Object);
+    method @Deprecated public java.util.Set keySet();
+    method @Deprecated public java.util.Enumeration keys();
+    method @Deprecated public Object put(Object, Object);
+    method @Deprecated public void putAll(java.util.Map);
+    method @Deprecated public Object remove(Object);
+    method @Deprecated public java.util.Collection values();
+  }
+
+}
+
+package org.apache.http {
+
+  @Deprecated public class ConnectionClosedException extends java.io.IOException {
+    ctor @Deprecated public ConnectionClosedException(String);
+  }
+
+  @Deprecated public interface ConnectionReuseStrategy {
+    method @Deprecated public boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public interface FormattedHeader extends org.apache.http.Header {
+    method @Deprecated public org.apache.http.util.CharArrayBuffer getBuffer();
+    method @Deprecated public int getValuePos();
+  }
+
+  @Deprecated public interface Header {
+    method @Deprecated public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException;
+    method @Deprecated public String getName();
+    method @Deprecated public String getValue();
+  }
+
+  @Deprecated public interface HeaderElement {
+    method @Deprecated public String getName();
+    method @Deprecated public org.apache.http.NameValuePair getParameter(int);
+    method @Deprecated public org.apache.http.NameValuePair getParameterByName(String);
+    method @Deprecated public int getParameterCount();
+    method @Deprecated public org.apache.http.NameValuePair[] getParameters();
+    method @Deprecated public String getValue();
+  }
+
+  @Deprecated public interface HeaderElementIterator extends java.util.Iterator {
+    method @Deprecated public org.apache.http.HeaderElement nextElement();
+  }
+
+  @Deprecated public interface HeaderIterator extends java.util.Iterator {
+    method @Deprecated public org.apache.http.Header nextHeader();
+  }
+
+  @Deprecated public interface HttpClientConnection extends org.apache.http.HttpConnection {
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated public boolean isResponseAvailable(int) throws java.io.IOException;
+    method @Deprecated public void receiveResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface HttpConnection {
+    method @Deprecated public void close() throws java.io.IOException;
+    method @Deprecated public org.apache.http.HttpConnectionMetrics getMetrics();
+    method @Deprecated public int getSocketTimeout();
+    method @Deprecated public boolean isOpen();
+    method @Deprecated public boolean isStale();
+    method @Deprecated public void setSocketTimeout(int);
+    method @Deprecated public void shutdown() throws java.io.IOException;
+  }
+
+  @Deprecated public interface HttpConnectionMetrics {
+    method @Deprecated public Object getMetric(String);
+    method @Deprecated public long getReceivedBytesCount();
+    method @Deprecated public long getRequestCount();
+    method @Deprecated public long getResponseCount();
+    method @Deprecated public long getSentBytesCount();
+    method @Deprecated public void reset();
+  }
+
+  @Deprecated public interface HttpEntity {
+    method @Deprecated public void consumeContent() throws java.io.IOException;
+    method @Deprecated public java.io.InputStream getContent() throws java.io.IOException, java.lang.IllegalStateException;
+    method @Deprecated public org.apache.http.Header getContentEncoding();
+    method @Deprecated public long getContentLength();
+    method @Deprecated public org.apache.http.Header getContentType();
+    method @Deprecated public boolean isChunked();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  @Deprecated public interface HttpEntityEnclosingRequest extends org.apache.http.HttpRequest {
+    method @Deprecated public boolean expectContinue();
+    method @Deprecated public org.apache.http.HttpEntity getEntity();
+    method @Deprecated public void setEntity(org.apache.http.HttpEntity);
+  }
+
+  @Deprecated public class HttpException extends java.lang.Exception {
+    ctor @Deprecated public HttpException();
+    ctor @Deprecated public HttpException(String);
+    ctor @Deprecated public HttpException(String, Throwable);
+  }
+
+  @Deprecated public final class HttpHost implements java.lang.Cloneable {
+    ctor @Deprecated public HttpHost(String, int, String);
+    ctor @Deprecated public HttpHost(String, int);
+    ctor @Deprecated public HttpHost(String);
+    ctor @Deprecated public HttpHost(org.apache.http.HttpHost);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public String getHostName();
+    method @Deprecated public int getPort();
+    method @Deprecated public String getSchemeName();
+    method @Deprecated public String toHostString();
+    method @Deprecated public String toURI();
+    field @Deprecated public static final String DEFAULT_SCHEME_NAME = "http";
+    field @Deprecated protected final String hostname;
+    field @Deprecated protected final String lcHostname;
+    field @Deprecated protected final int port;
+    field @Deprecated protected final String schemeName;
+  }
+
+  @Deprecated public interface HttpInetConnection extends org.apache.http.HttpConnection {
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public int getLocalPort();
+    method @Deprecated public java.net.InetAddress getRemoteAddress();
+    method @Deprecated public int getRemotePort();
+  }
+
+  @Deprecated public interface HttpMessage {
+    method @Deprecated public void addHeader(org.apache.http.Header);
+    method @Deprecated public void addHeader(String, String);
+    method @Deprecated public boolean containsHeader(String);
+    method @Deprecated public org.apache.http.Header[] getAllHeaders();
+    method @Deprecated public org.apache.http.Header getFirstHeader(String);
+    method @Deprecated public org.apache.http.Header[] getHeaders(String);
+    method @Deprecated public org.apache.http.Header getLastHeader(String);
+    method @Deprecated public org.apache.http.params.HttpParams getParams();
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public org.apache.http.HeaderIterator headerIterator();
+    method @Deprecated public org.apache.http.HeaderIterator headerIterator(String);
+    method @Deprecated public void removeHeader(org.apache.http.Header);
+    method @Deprecated public void removeHeaders(String);
+    method @Deprecated public void setHeader(org.apache.http.Header);
+    method @Deprecated public void setHeader(String, String);
+    method @Deprecated public void setHeaders(org.apache.http.Header[]);
+    method @Deprecated public void setParams(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public interface HttpRequest extends org.apache.http.HttpMessage {
+    method @Deprecated public org.apache.http.RequestLine getRequestLine();
+  }
+
+  @Deprecated public interface HttpRequestFactory {
+    method @Deprecated public org.apache.http.HttpRequest newHttpRequest(org.apache.http.RequestLine) throws org.apache.http.MethodNotSupportedException;
+    method @Deprecated public org.apache.http.HttpRequest newHttpRequest(String, String) throws org.apache.http.MethodNotSupportedException;
+  }
+
+  @Deprecated public interface HttpRequestInterceptor {
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface HttpResponse extends org.apache.http.HttpMessage {
+    method @Deprecated public org.apache.http.HttpEntity getEntity();
+    method @Deprecated public java.util.Locale getLocale();
+    method @Deprecated public org.apache.http.StatusLine getStatusLine();
+    method @Deprecated public void setEntity(org.apache.http.HttpEntity);
+    method @Deprecated public void setLocale(java.util.Locale);
+    method @Deprecated public void setReasonPhrase(String) throws java.lang.IllegalStateException;
+    method @Deprecated public void setStatusCode(int) throws java.lang.IllegalStateException;
+    method @Deprecated public void setStatusLine(org.apache.http.StatusLine);
+    method @Deprecated public void setStatusLine(org.apache.http.ProtocolVersion, int);
+    method @Deprecated public void setStatusLine(org.apache.http.ProtocolVersion, int, String);
+  }
+
+  @Deprecated public interface HttpResponseFactory {
+    method @Deprecated public org.apache.http.HttpResponse newHttpResponse(org.apache.http.ProtocolVersion, int, org.apache.http.protocol.HttpContext);
+    method @Deprecated public org.apache.http.HttpResponse newHttpResponse(org.apache.http.StatusLine, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public interface HttpResponseInterceptor {
+    method @Deprecated public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface HttpServerConnection extends org.apache.http.HttpConnection {
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated public void receiveRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpRequest receiveRequestHeader() throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendResponseHeader(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface HttpStatus {
+    field @Deprecated public static final int SC_ACCEPTED = 202; // 0xca
+    field @Deprecated public static final int SC_BAD_GATEWAY = 502; // 0x1f6
+    field @Deprecated public static final int SC_BAD_REQUEST = 400; // 0x190
+    field @Deprecated public static final int SC_CONFLICT = 409; // 0x199
+    field @Deprecated public static final int SC_CONTINUE = 100; // 0x64
+    field @Deprecated public static final int SC_CREATED = 201; // 0xc9
+    field @Deprecated public static final int SC_EXPECTATION_FAILED = 417; // 0x1a1
+    field @Deprecated public static final int SC_FAILED_DEPENDENCY = 424; // 0x1a8
+    field @Deprecated public static final int SC_FORBIDDEN = 403; // 0x193
+    field @Deprecated public static final int SC_GATEWAY_TIMEOUT = 504; // 0x1f8
+    field @Deprecated public static final int SC_GONE = 410; // 0x19a
+    field @Deprecated public static final int SC_HTTP_VERSION_NOT_SUPPORTED = 505; // 0x1f9
+    field @Deprecated public static final int SC_INSUFFICIENT_SPACE_ON_RESOURCE = 419; // 0x1a3
+    field @Deprecated public static final int SC_INSUFFICIENT_STORAGE = 507; // 0x1fb
+    field @Deprecated public static final int SC_INTERNAL_SERVER_ERROR = 500; // 0x1f4
+    field @Deprecated public static final int SC_LENGTH_REQUIRED = 411; // 0x19b
+    field @Deprecated public static final int SC_LOCKED = 423; // 0x1a7
+    field @Deprecated public static final int SC_METHOD_FAILURE = 420; // 0x1a4
+    field @Deprecated public static final int SC_METHOD_NOT_ALLOWED = 405; // 0x195
+    field @Deprecated public static final int SC_MOVED_PERMANENTLY = 301; // 0x12d
+    field @Deprecated public static final int SC_MOVED_TEMPORARILY = 302; // 0x12e
+    field @Deprecated public static final int SC_MULTIPLE_CHOICES = 300; // 0x12c
+    field @Deprecated public static final int SC_MULTI_STATUS = 207; // 0xcf
+    field @Deprecated public static final int SC_NON_AUTHORITATIVE_INFORMATION = 203; // 0xcb
+    field @Deprecated public static final int SC_NOT_ACCEPTABLE = 406; // 0x196
+    field @Deprecated public static final int SC_NOT_FOUND = 404; // 0x194
+    field @Deprecated public static final int SC_NOT_IMPLEMENTED = 501; // 0x1f5
+    field @Deprecated public static final int SC_NOT_MODIFIED = 304; // 0x130
+    field @Deprecated public static final int SC_NO_CONTENT = 204; // 0xcc
+    field @Deprecated public static final int SC_OK = 200; // 0xc8
+    field @Deprecated public static final int SC_PARTIAL_CONTENT = 206; // 0xce
+    field @Deprecated public static final int SC_PAYMENT_REQUIRED = 402; // 0x192
+    field @Deprecated public static final int SC_PRECONDITION_FAILED = 412; // 0x19c
+    field @Deprecated public static final int SC_PROCESSING = 102; // 0x66
+    field @Deprecated public static final int SC_PROXY_AUTHENTICATION_REQUIRED = 407; // 0x197
+    field @Deprecated public static final int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416; // 0x1a0
+    field @Deprecated public static final int SC_REQUEST_TIMEOUT = 408; // 0x198
+    field @Deprecated public static final int SC_REQUEST_TOO_LONG = 413; // 0x19d
+    field @Deprecated public static final int SC_REQUEST_URI_TOO_LONG = 414; // 0x19e
+    field @Deprecated public static final int SC_RESET_CONTENT = 205; // 0xcd
+    field @Deprecated public static final int SC_SEE_OTHER = 303; // 0x12f
+    field @Deprecated public static final int SC_SERVICE_UNAVAILABLE = 503; // 0x1f7
+    field @Deprecated public static final int SC_SWITCHING_PROTOCOLS = 101; // 0x65
+    field @Deprecated public static final int SC_TEMPORARY_REDIRECT = 307; // 0x133
+    field @Deprecated public static final int SC_UNAUTHORIZED = 401; // 0x191
+    field @Deprecated public static final int SC_UNPROCESSABLE_ENTITY = 422; // 0x1a6
+    field @Deprecated public static final int SC_UNSUPPORTED_MEDIA_TYPE = 415; // 0x19f
+    field @Deprecated public static final int SC_USE_PROXY = 305; // 0x131
+  }
+
+  @Deprecated public final class HttpVersion extends org.apache.http.ProtocolVersion implements java.io.Serializable {
+    ctor @Deprecated public HttpVersion(int, int);
+    field @Deprecated public static final String HTTP = "HTTP";
+    field @Deprecated public static final org.apache.http.HttpVersion HTTP_0_9;
+    field @Deprecated public static final org.apache.http.HttpVersion HTTP_1_0;
+    field @Deprecated public static final org.apache.http.HttpVersion HTTP_1_1;
+  }
+
+  @Deprecated public class MalformedChunkCodingException extends java.io.IOException {
+    ctor @Deprecated public MalformedChunkCodingException();
+    ctor @Deprecated public MalformedChunkCodingException(String);
+  }
+
+  @Deprecated public class MethodNotSupportedException extends org.apache.http.HttpException {
+    ctor @Deprecated public MethodNotSupportedException(String);
+    ctor @Deprecated public MethodNotSupportedException(String, Throwable);
+  }
+
+  @Deprecated public interface NameValuePair {
+    method @Deprecated public String getName();
+    method @Deprecated public String getValue();
+  }
+
+  @Deprecated public class NoHttpResponseException extends java.io.IOException {
+    ctor @Deprecated public NoHttpResponseException(String);
+  }
+
+  @Deprecated public class ParseException extends java.lang.RuntimeException {
+    ctor @Deprecated public ParseException();
+    ctor @Deprecated public ParseException(String);
+  }
+
+  @Deprecated public class ProtocolException extends org.apache.http.HttpException {
+    ctor @Deprecated public ProtocolException();
+    ctor @Deprecated public ProtocolException(String);
+    ctor @Deprecated public ProtocolException(String, Throwable);
+  }
+
+  @Deprecated public class ProtocolVersion implements java.lang.Cloneable java.io.Serializable {
+    ctor @Deprecated public ProtocolVersion(String, int, int);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public int compareToVersion(org.apache.http.ProtocolVersion);
+    method @Deprecated public final boolean equals(Object);
+    method @Deprecated public org.apache.http.ProtocolVersion forVersion(int, int);
+    method @Deprecated public final int getMajor();
+    method @Deprecated public final int getMinor();
+    method @Deprecated public final String getProtocol();
+    method @Deprecated public final boolean greaterEquals(org.apache.http.ProtocolVersion);
+    method @Deprecated public final int hashCode();
+    method @Deprecated public boolean isComparable(org.apache.http.ProtocolVersion);
+    method @Deprecated public final boolean lessEquals(org.apache.http.ProtocolVersion);
+    field @Deprecated protected final int major;
+    field @Deprecated protected final int minor;
+    field @Deprecated protected final String protocol;
+  }
+
+  @Deprecated public interface ReasonPhraseCatalog {
+    method @Deprecated public String getReason(int, java.util.Locale);
+  }
+
+  @Deprecated public interface RequestLine {
+    method @Deprecated public String getMethod();
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public String getUri();
+  }
+
+  @Deprecated public interface StatusLine {
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public String getReasonPhrase();
+    method @Deprecated public int getStatusCode();
+  }
+
+  @Deprecated public interface TokenIterator extends java.util.Iterator {
+    method @Deprecated public String nextToken();
+  }
+
+  @Deprecated public class UnsupportedHttpVersionException extends org.apache.http.ProtocolException {
+    ctor @Deprecated public UnsupportedHttpVersionException();
+    ctor @Deprecated public UnsupportedHttpVersionException(String);
+  }
+
+}
+
+package org.apache.http.auth {
+
+  @Deprecated public final class AUTH {
+    field @Deprecated public static final String PROXY_AUTH = "Proxy-Authenticate";
+    field @Deprecated public static final String PROXY_AUTH_RESP = "Proxy-Authorization";
+    field @Deprecated public static final String WWW_AUTH = "WWW-Authenticate";
+    field @Deprecated public static final String WWW_AUTH_RESP = "Authorization";
+  }
+
+  @Deprecated public interface AuthScheme {
+    method @Deprecated public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException;
+    method @Deprecated public String getParameter(String);
+    method @Deprecated public String getRealm();
+    method @Deprecated public String getSchemeName();
+    method @Deprecated public boolean isComplete();
+    method @Deprecated public boolean isConnectionBased();
+    method @Deprecated public void processChallenge(org.apache.http.Header) throws org.apache.http.auth.MalformedChallengeException;
+  }
+
+  @Deprecated public interface AuthSchemeFactory {
+    method @Deprecated public org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public final class AuthSchemeRegistry {
+    ctor @Deprecated public AuthSchemeRegistry();
+    method @Deprecated public org.apache.http.auth.AuthScheme getAuthScheme(String, org.apache.http.params.HttpParams) throws java.lang.IllegalStateException;
+    method @Deprecated public java.util.List<java.lang.String> getSchemeNames();
+    method @Deprecated public void register(String, org.apache.http.auth.AuthSchemeFactory);
+    method @Deprecated public void setItems(java.util.Map<java.lang.String,org.apache.http.auth.AuthSchemeFactory>);
+    method @Deprecated public void unregister(String);
+  }
+
+  @Deprecated public class AuthScope {
+    ctor @Deprecated public AuthScope(String, int, String, String);
+    ctor @Deprecated public AuthScope(String, int, String);
+    ctor @Deprecated public AuthScope(String, int);
+    ctor @Deprecated public AuthScope(org.apache.http.auth.AuthScope);
+    method @Deprecated public String getHost();
+    method @Deprecated public int getPort();
+    method @Deprecated public String getRealm();
+    method @Deprecated public String getScheme();
+    method @Deprecated public int match(org.apache.http.auth.AuthScope);
+    field @Deprecated public static final org.apache.http.auth.AuthScope ANY;
+    field @Deprecated public static final String ANY_HOST;
+    field @Deprecated public static final int ANY_PORT = -1; // 0xffffffff
+    field @Deprecated public static final String ANY_REALM;
+    field @Deprecated public static final String ANY_SCHEME;
+  }
+
+  @Deprecated public class AuthState {
+    ctor @Deprecated public AuthState();
+    method @Deprecated public org.apache.http.auth.AuthScheme getAuthScheme();
+    method @Deprecated public org.apache.http.auth.AuthScope getAuthScope();
+    method @Deprecated public org.apache.http.auth.Credentials getCredentials();
+    method @Deprecated public void invalidate();
+    method @Deprecated public boolean isValid();
+    method @Deprecated public void setAuthScheme(org.apache.http.auth.AuthScheme);
+    method @Deprecated public void setAuthScope(org.apache.http.auth.AuthScope);
+    method @Deprecated public void setCredentials(org.apache.http.auth.Credentials);
+  }
+
+  @Deprecated public class AuthenticationException extends org.apache.http.ProtocolException {
+    ctor @Deprecated public AuthenticationException();
+    ctor @Deprecated public AuthenticationException(String);
+    ctor @Deprecated public AuthenticationException(String, Throwable);
+  }
+
+  @Deprecated public final class BasicUserPrincipal implements java.security.Principal {
+    ctor @Deprecated public BasicUserPrincipal(String);
+    method @Deprecated public String getName();
+  }
+
+  @Deprecated public interface Credentials {
+    method @Deprecated public String getPassword();
+    method @Deprecated public java.security.Principal getUserPrincipal();
+  }
+
+  @Deprecated public class InvalidCredentialsException extends org.apache.http.auth.AuthenticationException {
+    ctor @Deprecated public InvalidCredentialsException();
+    ctor @Deprecated public InvalidCredentialsException(String);
+    ctor @Deprecated public InvalidCredentialsException(String, Throwable);
+  }
+
+  @Deprecated public class MalformedChallengeException extends org.apache.http.ProtocolException {
+    ctor @Deprecated public MalformedChallengeException();
+    ctor @Deprecated public MalformedChallengeException(String);
+    ctor @Deprecated public MalformedChallengeException(String, Throwable);
+  }
+
+  @Deprecated public class NTCredentials implements org.apache.http.auth.Credentials {
+    ctor @Deprecated public NTCredentials(String);
+    ctor @Deprecated public NTCredentials(String, String, String, String);
+    method @Deprecated public String getDomain();
+    method @Deprecated public String getPassword();
+    method @Deprecated public String getUserName();
+    method @Deprecated public java.security.Principal getUserPrincipal();
+    method @Deprecated public String getWorkstation();
+  }
+
+  @Deprecated public class NTUserPrincipal implements java.security.Principal {
+    ctor @Deprecated public NTUserPrincipal(String, String);
+    method @Deprecated public String getDomain();
+    method @Deprecated public String getName();
+    method @Deprecated public String getUsername();
+  }
+
+  @Deprecated public class UsernamePasswordCredentials implements org.apache.http.auth.Credentials {
+    ctor @Deprecated public UsernamePasswordCredentials(String);
+    ctor @Deprecated public UsernamePasswordCredentials(String, String);
+    method @Deprecated public String getPassword();
+    method @Deprecated public String getUserName();
+    method @Deprecated public java.security.Principal getUserPrincipal();
+  }
+
+}
+
+package org.apache.http.auth.params {
+
+  @Deprecated public interface AuthPNames {
+    field @Deprecated public static final String CREDENTIAL_CHARSET = "http.auth.credential-charset";
+  }
+
+  @Deprecated public class AuthParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public AuthParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setCredentialCharset(String);
+  }
+
+  @Deprecated public final class AuthParams {
+    method @Deprecated public static String getCredentialCharset(org.apache.http.params.HttpParams);
+    method @Deprecated public static void setCredentialCharset(org.apache.http.params.HttpParams, String);
+  }
+
+}
+
+package org.apache.http.client {
+
+  @Deprecated public interface AuthenticationHandler {
+    method @Deprecated public java.util.Map<java.lang.String,org.apache.http.Header> getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException;
+    method @Deprecated public boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+    method @Deprecated public org.apache.http.auth.AuthScheme selectScheme(java.util.Map<java.lang.String,org.apache.http.Header>, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.AuthenticationException;
+  }
+
+  @Deprecated public class CircularRedirectException extends org.apache.http.client.RedirectException {
+    ctor @Deprecated public CircularRedirectException();
+    ctor @Deprecated public CircularRedirectException(String);
+    ctor @Deprecated public CircularRedirectException(String, Throwable);
+  }
+
+  @Deprecated public class ClientProtocolException extends java.io.IOException {
+    ctor @Deprecated public ClientProtocolException();
+    ctor @Deprecated public ClientProtocolException(String);
+    ctor @Deprecated public ClientProtocolException(Throwable);
+    ctor @Deprecated public ClientProtocolException(String, Throwable);
+  }
+
+  @Deprecated public interface CookieStore {
+    method @Deprecated public void addCookie(org.apache.http.cookie.Cookie);
+    method @Deprecated public void clear();
+    method @Deprecated public boolean clearExpired(java.util.Date);
+    method @Deprecated public java.util.List<org.apache.http.cookie.Cookie> getCookies();
+  }
+
+  @Deprecated public interface CredentialsProvider {
+    method @Deprecated public void clear();
+    method @Deprecated public org.apache.http.auth.Credentials getCredentials(org.apache.http.auth.AuthScope);
+    method @Deprecated public void setCredentials(org.apache.http.auth.AuthScope, org.apache.http.auth.Credentials);
+  }
+
+  @Deprecated public interface HttpClient {
+    method @Deprecated public org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler<? extends T>) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler<? extends T>, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler<? extends T>) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler<? extends T>, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public org.apache.http.conn.ClientConnectionManager getConnectionManager();
+    method @Deprecated public org.apache.http.params.HttpParams getParams();
+  }
+
+  @Deprecated public interface HttpRequestRetryHandler {
+    method @Deprecated public boolean retryRequest(java.io.IOException, int, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class HttpResponseException extends org.apache.http.client.ClientProtocolException {
+    ctor @Deprecated public HttpResponseException(int, String);
+    method @Deprecated public int getStatusCode();
+  }
+
+  @Deprecated public class NonRepeatableRequestException extends org.apache.http.ProtocolException {
+    ctor @Deprecated public NonRepeatableRequestException();
+    ctor @Deprecated public NonRepeatableRequestException(String);
+  }
+
+  @Deprecated public class RedirectException extends org.apache.http.ProtocolException {
+    ctor @Deprecated public RedirectException();
+    ctor @Deprecated public RedirectException(String);
+    ctor @Deprecated public RedirectException(String, Throwable);
+  }
+
+  @Deprecated public interface RedirectHandler {
+    method @Deprecated public java.net.URI getLocationURI(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.ProtocolException;
+    method @Deprecated public boolean isRedirectRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public interface RequestDirector {
+    method @Deprecated public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface ResponseHandler<T> {
+    method @Deprecated public T handleResponse(org.apache.http.HttpResponse) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+  }
+
+  @Deprecated public interface UserTokenHandler {
+    method @Deprecated public Object getUserToken(org.apache.http.protocol.HttpContext);
+  }
+
+}
+
+package org.apache.http.client.entity {
+
+  @Deprecated public class UrlEncodedFormEntity extends org.apache.http.entity.StringEntity {
+    ctor @Deprecated public UrlEncodedFormEntity(java.util.List<? extends org.apache.http.NameValuePair>, String) throws java.io.UnsupportedEncodingException;
+    ctor @Deprecated public UrlEncodedFormEntity(java.util.List<? extends org.apache.http.NameValuePair>) throws java.io.UnsupportedEncodingException;
+  }
+
+}
+
+package org.apache.http.client.methods {
+
+  @Deprecated public interface AbortableHttpRequest {
+    method @Deprecated public void abort();
+    method @Deprecated public void setConnectionRequest(org.apache.http.conn.ClientConnectionRequest) throws java.io.IOException;
+    method @Deprecated public void setReleaseTrigger(org.apache.http.conn.ConnectionReleaseTrigger) throws java.io.IOException;
+  }
+
+  @Deprecated public class HttpDelete extends org.apache.http.client.methods.HttpRequestBase {
+    ctor @Deprecated public HttpDelete();
+    ctor @Deprecated public HttpDelete(java.net.URI);
+    ctor @Deprecated public HttpDelete(String);
+    method @Deprecated public String getMethod();
+    field @Deprecated public static final String METHOD_NAME = "DELETE";
+  }
+
+  @Deprecated public abstract class HttpEntityEnclosingRequestBase extends org.apache.http.client.methods.HttpRequestBase implements org.apache.http.HttpEntityEnclosingRequest {
+    ctor @Deprecated public HttpEntityEnclosingRequestBase();
+    method @Deprecated public boolean expectContinue();
+    method @Deprecated public org.apache.http.HttpEntity getEntity();
+    method @Deprecated public void setEntity(org.apache.http.HttpEntity);
+  }
+
+  @Deprecated public class HttpGet extends org.apache.http.client.methods.HttpRequestBase {
+    ctor @Deprecated public HttpGet();
+    ctor @Deprecated public HttpGet(java.net.URI);
+    ctor @Deprecated public HttpGet(String);
+    method @Deprecated public String getMethod();
+    field @Deprecated public static final String METHOD_NAME = "GET";
+  }
+
+  @Deprecated public class HttpHead extends org.apache.http.client.methods.HttpRequestBase {
+    ctor @Deprecated public HttpHead();
+    ctor @Deprecated public HttpHead(java.net.URI);
+    ctor @Deprecated public HttpHead(String);
+    method @Deprecated public String getMethod();
+    field @Deprecated public static final String METHOD_NAME = "HEAD";
+  }
+
+  @Deprecated public class HttpOptions extends org.apache.http.client.methods.HttpRequestBase {
+    ctor @Deprecated public HttpOptions();
+    ctor @Deprecated public HttpOptions(java.net.URI);
+    ctor @Deprecated public HttpOptions(String);
+    method @Deprecated public java.util.Set<java.lang.String> getAllowedMethods(org.apache.http.HttpResponse);
+    method @Deprecated public String getMethod();
+    field @Deprecated public static final String METHOD_NAME = "OPTIONS";
+  }
+
+  @Deprecated public class HttpPost extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase {
+    ctor @Deprecated public HttpPost();
+    ctor @Deprecated public HttpPost(java.net.URI);
+    ctor @Deprecated public HttpPost(String);
+    method @Deprecated public String getMethod();
+    field @Deprecated public static final String METHOD_NAME = "POST";
+  }
+
+  @Deprecated public class HttpPut extends org.apache.http.client.methods.HttpEntityEnclosingRequestBase {
+    ctor @Deprecated public HttpPut();
+    ctor @Deprecated public HttpPut(java.net.URI);
+    ctor @Deprecated public HttpPut(String);
+    method @Deprecated public String getMethod();
+    field @Deprecated public static final String METHOD_NAME = "PUT";
+  }
+
+  @Deprecated public abstract class HttpRequestBase extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.AbortableHttpRequest java.lang.Cloneable org.apache.http.client.methods.HttpUriRequest {
+    ctor @Deprecated public HttpRequestBase();
+    method @Deprecated public void abort();
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public org.apache.http.RequestLine getRequestLine();
+    method @Deprecated public java.net.URI getURI();
+    method @Deprecated public boolean isAborted();
+    method @Deprecated public void setConnectionRequest(org.apache.http.conn.ClientConnectionRequest) throws java.io.IOException;
+    method @Deprecated public void setReleaseTrigger(org.apache.http.conn.ConnectionReleaseTrigger) throws java.io.IOException;
+    method @Deprecated public void setURI(java.net.URI);
+  }
+
+  @Deprecated public class HttpTrace extends org.apache.http.client.methods.HttpRequestBase {
+    ctor @Deprecated public HttpTrace();
+    ctor @Deprecated public HttpTrace(java.net.URI);
+    ctor @Deprecated public HttpTrace(String);
+    method @Deprecated public String getMethod();
+    field @Deprecated public static final String METHOD_NAME = "TRACE";
+  }
+
+  @Deprecated public interface HttpUriRequest extends org.apache.http.HttpRequest {
+    method @Deprecated public void abort() throws java.lang.UnsupportedOperationException;
+    method @Deprecated public String getMethod();
+    method @Deprecated public java.net.URI getURI();
+    method @Deprecated public boolean isAborted();
+  }
+
+}
+
+package org.apache.http.client.params {
+
+  @Deprecated public interface AllClientPNames extends org.apache.http.params.CoreConnectionPNames org.apache.http.auth.params.AuthPNames org.apache.http.client.params.ClientPNames org.apache.http.conn.params.ConnConnectionPNames org.apache.http.conn.params.ConnManagerPNames org.apache.http.conn.params.ConnRoutePNames org.apache.http.cookie.params.CookieSpecPNames org.apache.http.params.CoreProtocolPNames {
+  }
+
+  @Deprecated public final class AuthPolicy {
+    field @Deprecated public static final String BASIC = "Basic";
+    field @Deprecated public static final String DIGEST = "Digest";
+    field @Deprecated public static final String NTLM = "NTLM";
+  }
+
+  @Deprecated public interface ClientPNames {
+    field @Deprecated public static final String ALLOW_CIRCULAR_REDIRECTS = "http.protocol.allow-circular-redirects";
+    field @Deprecated public static final String CONNECTION_MANAGER_FACTORY = "http.connection-manager.factory-object";
+    field @Deprecated public static final String CONNECTION_MANAGER_FACTORY_CLASS_NAME = "http.connection-manager.factory-class-name";
+    field @Deprecated public static final String COOKIE_POLICY = "http.protocol.cookie-policy";
+    field @Deprecated public static final String DEFAULT_HEADERS = "http.default-headers";
+    field @Deprecated public static final String DEFAULT_HOST = "http.default-host";
+    field @Deprecated public static final String HANDLE_AUTHENTICATION = "http.protocol.handle-authentication";
+    field @Deprecated public static final String HANDLE_REDIRECTS = "http.protocol.handle-redirects";
+    field @Deprecated public static final String MAX_REDIRECTS = "http.protocol.max-redirects";
+    field @Deprecated public static final String REJECT_RELATIVE_REDIRECT = "http.protocol.reject-relative-redirect";
+    field @Deprecated public static final String VIRTUAL_HOST = "http.virtual-host";
+  }
+
+  @Deprecated public class ClientParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public ClientParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setAllowCircularRedirects(boolean);
+    method @Deprecated public void setConnectionManagerFactory(org.apache.http.conn.ClientConnectionManagerFactory);
+    method @Deprecated public void setConnectionManagerFactoryClassName(String);
+    method @Deprecated public void setCookiePolicy(String);
+    method @Deprecated public void setDefaultHeaders(java.util.Collection<org.apache.http.Header>);
+    method @Deprecated public void setDefaultHost(org.apache.http.HttpHost);
+    method @Deprecated public void setHandleAuthentication(boolean);
+    method @Deprecated public void setHandleRedirects(boolean);
+    method @Deprecated public void setMaxRedirects(int);
+    method @Deprecated public void setRejectRelativeRedirect(boolean);
+    method @Deprecated public void setVirtualHost(org.apache.http.HttpHost);
+  }
+
+  @Deprecated public final class CookiePolicy {
+    field @Deprecated public static final String BEST_MATCH = "best-match";
+    field @Deprecated public static final String BROWSER_COMPATIBILITY = "compatibility";
+    field @Deprecated public static final String NETSCAPE = "netscape";
+    field @Deprecated public static final String RFC_2109 = "rfc2109";
+    field @Deprecated public static final String RFC_2965 = "rfc2965";
+  }
+
+  @Deprecated public class HttpClientParams {
+    method @Deprecated public static String getCookiePolicy(org.apache.http.params.HttpParams);
+    method @Deprecated public static boolean isAuthenticating(org.apache.http.params.HttpParams);
+    method @Deprecated public static boolean isRedirecting(org.apache.http.params.HttpParams);
+    method @Deprecated public static void setAuthenticating(org.apache.http.params.HttpParams, boolean);
+    method @Deprecated public static void setCookiePolicy(org.apache.http.params.HttpParams, String);
+    method @Deprecated public static void setRedirecting(org.apache.http.params.HttpParams, boolean);
+  }
+
+}
+
+package org.apache.http.client.protocol {
+
+  @Deprecated public interface ClientContext {
+    field @Deprecated public static final String AUTHSCHEME_REGISTRY = "http.authscheme-registry";
+    field @Deprecated public static final String AUTH_SCHEME_PREF = "http.auth.scheme-pref";
+    field @Deprecated public static final String COOKIESPEC_REGISTRY = "http.cookiespec-registry";
+    field @Deprecated public static final String COOKIE_ORIGIN = "http.cookie-origin";
+    field @Deprecated public static final String COOKIE_SPEC = "http.cookie-spec";
+    field @Deprecated public static final String COOKIE_STORE = "http.cookie-store";
+    field @Deprecated public static final String CREDS_PROVIDER = "http.auth.credentials-provider";
+    field @Deprecated public static final String PROXY_AUTH_STATE = "http.auth.proxy-scope";
+    field @Deprecated public static final String TARGET_AUTH_STATE = "http.auth.target-scope";
+    field @Deprecated public static final String USER_TOKEN = "http.user-token";
+  }
+
+  @Deprecated public class ClientContextConfigurer implements org.apache.http.client.protocol.ClientContext {
+    ctor @Deprecated public ClientContextConfigurer(org.apache.http.protocol.HttpContext);
+    method @Deprecated public void setAuthSchemePref(java.util.List<java.lang.String>);
+    method @Deprecated public void setAuthSchemeRegistry(org.apache.http.auth.AuthSchemeRegistry);
+    method @Deprecated public void setCookieSpecRegistry(org.apache.http.cookie.CookieSpecRegistry);
+    method @Deprecated public void setCookieStore(org.apache.http.client.CookieStore);
+    method @Deprecated public void setCredentialsProvider(org.apache.http.client.CredentialsProvider);
+  }
+
+  @Deprecated public class RequestAddCookies implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestAddCookies();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestDefaultHeaders implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestDefaultHeaders();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestProxyAuthentication implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestProxyAuthentication();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestTargetAuthentication implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestTargetAuthentication();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class ResponseProcessCookies implements org.apache.http.HttpResponseInterceptor {
+    ctor @Deprecated public ResponseProcessCookies();
+    method @Deprecated public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+}
+
+package org.apache.http.client.utils {
+
+  @Deprecated public class CloneUtils {
+    method @Deprecated public static Object clone(Object) throws java.lang.CloneNotSupportedException;
+  }
+
+  @Deprecated public class URIUtils {
+    method @Deprecated public static java.net.URI createURI(String, String, int, String, String, String) throws java.net.URISyntaxException;
+    method @Deprecated public static java.net.URI resolve(java.net.URI, String);
+    method @Deprecated public static java.net.URI resolve(java.net.URI, java.net.URI);
+    method @Deprecated public static java.net.URI rewriteURI(java.net.URI, org.apache.http.HttpHost, boolean) throws java.net.URISyntaxException;
+    method @Deprecated public static java.net.URI rewriteURI(java.net.URI, org.apache.http.HttpHost) throws java.net.URISyntaxException;
+  }
+
+  @Deprecated public class URLEncodedUtils {
+    ctor @Deprecated public URLEncodedUtils();
+    method @Deprecated public static String format(java.util.List<? extends org.apache.http.NameValuePair>, String);
+    method @Deprecated public static boolean isEncoded(org.apache.http.HttpEntity);
+    method @Deprecated public static java.util.List<org.apache.http.NameValuePair> parse(java.net.URI, String);
+    method @Deprecated public static java.util.List<org.apache.http.NameValuePair> parse(org.apache.http.HttpEntity) throws java.io.IOException;
+    method @Deprecated public static void parse(java.util.List<org.apache.http.NameValuePair>, java.util.Scanner, String);
+    field @Deprecated public static final String CONTENT_TYPE = "application/x-www-form-urlencoded";
+  }
+
+}
+
+package org.apache.http.conn {
+
+  @Deprecated public class BasicEofSensorWatcher implements org.apache.http.conn.EofSensorWatcher {
+    ctor @Deprecated public BasicEofSensorWatcher(org.apache.http.conn.ManagedClientConnection, boolean);
+    method @Deprecated public boolean eofDetected(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public boolean streamAbort(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public boolean streamClosed(java.io.InputStream) throws java.io.IOException;
+    field @Deprecated protected boolean attemptReuse;
+    field @Deprecated protected org.apache.http.conn.ManagedClientConnection managedConn;
+  }
+
+  @Deprecated public class BasicManagedEntity extends org.apache.http.entity.HttpEntityWrapper implements org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.conn.EofSensorWatcher {
+    ctor @Deprecated public BasicManagedEntity(org.apache.http.HttpEntity, org.apache.http.conn.ManagedClientConnection, boolean);
+    method @Deprecated public void abortConnection() throws java.io.IOException;
+    method @Deprecated public boolean eofDetected(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public void releaseConnection() throws java.io.IOException;
+    method @Deprecated protected void releaseManagedConnection() throws java.io.IOException;
+    method @Deprecated public boolean streamAbort(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public boolean streamClosed(java.io.InputStream) throws java.io.IOException;
+    field @Deprecated protected final boolean attemptReuse;
+    field @Deprecated protected org.apache.http.conn.ManagedClientConnection managedConn;
+  }
+
+  @Deprecated public interface ClientConnectionManager {
+    method @Deprecated public void closeExpiredConnections();
+    method @Deprecated public void closeIdleConnections(long, java.util.concurrent.TimeUnit);
+    method @Deprecated public org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry();
+    method @Deprecated public void releaseConnection(org.apache.http.conn.ManagedClientConnection, long, java.util.concurrent.TimeUnit);
+    method @Deprecated public org.apache.http.conn.ClientConnectionRequest requestConnection(org.apache.http.conn.routing.HttpRoute, Object);
+    method @Deprecated public void shutdown();
+  }
+
+  @Deprecated public interface ClientConnectionManagerFactory {
+    method @Deprecated public org.apache.http.conn.ClientConnectionManager newInstance(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry);
+  }
+
+  @Deprecated public interface ClientConnectionOperator {
+    method @Deprecated public org.apache.http.conn.OperatedClientConnection createConnection();
+    method @Deprecated public void openConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void updateSecureConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+  }
+
+  @Deprecated public interface ClientConnectionRequest {
+    method @Deprecated public void abortRequest();
+    method @Deprecated public org.apache.http.conn.ManagedClientConnection getConnection(long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException;
+  }
+
+  @Deprecated public interface ConnectionKeepAliveStrategy {
+    method @Deprecated public long getKeepAliveDuration(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class ConnectionPoolTimeoutException extends org.apache.http.conn.ConnectTimeoutException {
+    ctor @Deprecated public ConnectionPoolTimeoutException();
+    ctor @Deprecated public ConnectionPoolTimeoutException(String);
+  }
+
+  @Deprecated public interface ConnectionReleaseTrigger {
+    method @Deprecated public void abortConnection() throws java.io.IOException;
+    method @Deprecated public void releaseConnection() throws java.io.IOException;
+  }
+
+  @Deprecated public class EofSensorInputStream extends java.io.InputStream implements org.apache.http.conn.ConnectionReleaseTrigger {
+    ctor @Deprecated public EofSensorInputStream(java.io.InputStream, org.apache.http.conn.EofSensorWatcher);
+    method @Deprecated public void abortConnection() throws java.io.IOException;
+    method @Deprecated protected void checkAbort() throws java.io.IOException;
+    method @Deprecated protected void checkClose() throws java.io.IOException;
+    method @Deprecated protected void checkEOF(int) throws java.io.IOException;
+    method @Deprecated protected boolean isReadAllowed() throws java.io.IOException;
+    method @Deprecated public int read() throws java.io.IOException;
+    method @Deprecated public void releaseConnection() throws java.io.IOException;
+    field @Deprecated protected java.io.InputStream wrappedStream;
+  }
+
+  @Deprecated public interface EofSensorWatcher {
+    method @Deprecated public boolean eofDetected(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public boolean streamAbort(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public boolean streamClosed(java.io.InputStream) throws java.io.IOException;
+  }
+
+  @Deprecated public class HttpHostConnectException extends java.net.ConnectException {
+    ctor @Deprecated public HttpHostConnectException(org.apache.http.HttpHost, java.net.ConnectException);
+    method @Deprecated public org.apache.http.HttpHost getHost();
+  }
+
+  @Deprecated public interface ManagedClientConnection extends org.apache.http.HttpClientConnection org.apache.http.conn.ConnectionReleaseTrigger org.apache.http.HttpInetConnection {
+    method @Deprecated public org.apache.http.conn.routing.HttpRoute getRoute();
+    method @Deprecated public javax.net.ssl.SSLSession getSSLSession();
+    method @Deprecated public Object getState();
+    method @Deprecated public boolean isMarkedReusable();
+    method @Deprecated public boolean isSecure();
+    method @Deprecated public void layerProtocol(org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void markReusable();
+    method @Deprecated public void open(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void setIdleDuration(long, java.util.concurrent.TimeUnit);
+    method @Deprecated public void setState(Object);
+    method @Deprecated public void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void unmarkReusable();
+  }
+
+  @Deprecated public final class MultihomePlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory {
+    method @Deprecated public java.net.Socket connectSocket(java.net.Socket, String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket();
+    method @Deprecated public static org.apache.http.conn.MultihomePlainSocketFactory getSocketFactory();
+    method @Deprecated public boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException;
+  }
+
+  @Deprecated public interface OperatedClientConnection extends org.apache.http.HttpClientConnection org.apache.http.HttpInetConnection {
+    method @Deprecated public java.net.Socket getSocket();
+    method @Deprecated public org.apache.http.HttpHost getTargetHost();
+    method @Deprecated public boolean isSecure();
+    method @Deprecated public void openCompleted(boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void opening(java.net.Socket, org.apache.http.HttpHost) throws java.io.IOException;
+    method @Deprecated public void update(java.net.Socket, org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+  }
+
+}
+
+package org.apache.http.conn.params {
+
+  @Deprecated public interface ConnConnectionPNames {
+    field @Deprecated public static final String MAX_STATUS_LINE_GARBAGE = "http.connection.max-status-line-garbage";
+  }
+
+  @Deprecated public class ConnConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public ConnConnectionParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setMaxStatusLineGarbage(int);
+  }
+
+  @Deprecated public interface ConnManagerPNames {
+    field @Deprecated public static final String MAX_CONNECTIONS_PER_ROUTE = "http.conn-manager.max-per-route";
+    field @Deprecated public static final String MAX_TOTAL_CONNECTIONS = "http.conn-manager.max-total";
+    field @Deprecated public static final String TIMEOUT = "http.conn-manager.timeout";
+  }
+
+  @Deprecated public class ConnManagerParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public ConnManagerParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setConnectionsPerRoute(org.apache.http.conn.params.ConnPerRouteBean);
+    method @Deprecated public void setMaxTotalConnections(int);
+    method @Deprecated public void setTimeout(long);
+  }
+
+  @Deprecated public final class ConnManagerParams implements org.apache.http.conn.params.ConnManagerPNames {
+    ctor @Deprecated public ConnManagerParams();
+    method @Deprecated public static org.apache.http.conn.params.ConnPerRoute getMaxConnectionsPerRoute(org.apache.http.params.HttpParams);
+    method @Deprecated public static int getMaxTotalConnections(org.apache.http.params.HttpParams);
+    method @Deprecated public static long getTimeout(org.apache.http.params.HttpParams);
+    method @Deprecated public static void setMaxConnectionsPerRoute(org.apache.http.params.HttpParams, org.apache.http.conn.params.ConnPerRoute);
+    method @Deprecated public static void setMaxTotalConnections(org.apache.http.params.HttpParams, int);
+    method @Deprecated public static void setTimeout(org.apache.http.params.HttpParams, long);
+    field @Deprecated public static final int DEFAULT_MAX_TOTAL_CONNECTIONS = 20; // 0x14
+  }
+
+  @Deprecated public interface ConnPerRoute {
+    method @Deprecated public int getMaxForRoute(org.apache.http.conn.routing.HttpRoute);
+  }
+
+  @Deprecated public final class ConnPerRouteBean implements org.apache.http.conn.params.ConnPerRoute {
+    ctor @Deprecated public ConnPerRouteBean(int);
+    ctor @Deprecated public ConnPerRouteBean();
+    method @Deprecated public int getDefaultMax();
+    method @Deprecated public int getMaxForRoute(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public void setDefaultMaxPerRoute(int);
+    method @Deprecated public void setMaxForRoute(org.apache.http.conn.routing.HttpRoute, int);
+    method @Deprecated public void setMaxForRoutes(java.util.Map<org.apache.http.conn.routing.HttpRoute,java.lang.Integer>);
+    field @Deprecated public static final int DEFAULT_MAX_CONNECTIONS_PER_ROUTE = 2; // 0x2
+  }
+
+  @Deprecated public interface ConnRoutePNames {
+    field @Deprecated public static final String DEFAULT_PROXY = "http.route.default-proxy";
+    field @Deprecated public static final String FORCED_ROUTE = "http.route.forced-route";
+    field @Deprecated public static final String LOCAL_ADDRESS = "http.route.local-address";
+  }
+
+  @Deprecated public class ConnRouteParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public ConnRouteParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setDefaultProxy(org.apache.http.HttpHost);
+    method @Deprecated public void setForcedRoute(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public void setLocalAddress(java.net.InetAddress);
+  }
+
+  @Deprecated public class ConnRouteParams implements org.apache.http.conn.params.ConnRoutePNames {
+    method @Deprecated public static org.apache.http.HttpHost getDefaultProxy(org.apache.http.params.HttpParams);
+    method @Deprecated public static org.apache.http.conn.routing.HttpRoute getForcedRoute(org.apache.http.params.HttpParams);
+    method @Deprecated public static java.net.InetAddress getLocalAddress(org.apache.http.params.HttpParams);
+    method @Deprecated public static void setDefaultProxy(org.apache.http.params.HttpParams, org.apache.http.HttpHost);
+    method @Deprecated public static void setForcedRoute(org.apache.http.params.HttpParams, org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public static void setLocalAddress(org.apache.http.params.HttpParams, java.net.InetAddress);
+    field @Deprecated public static final org.apache.http.HttpHost NO_HOST;
+    field @Deprecated public static final org.apache.http.conn.routing.HttpRoute NO_ROUTE;
+  }
+
+}
+
+package org.apache.http.conn.routing {
+
+  @Deprecated public class BasicRouteDirector implements org.apache.http.conn.routing.HttpRouteDirector {
+    ctor @Deprecated public BasicRouteDirector();
+    method @Deprecated protected int directStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo);
+    method @Deprecated protected int firstStep(org.apache.http.conn.routing.RouteInfo);
+    method @Deprecated public int nextStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo);
+    method @Deprecated protected int proxiedStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo);
+  }
+
+  @Deprecated public final class HttpRoute implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo {
+    ctor @Deprecated public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost[], boolean, org.apache.http.conn.routing.RouteInfo.TunnelType, org.apache.http.conn.routing.RouteInfo.LayerType);
+    ctor @Deprecated public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost, boolean, org.apache.http.conn.routing.RouteInfo.TunnelType, org.apache.http.conn.routing.RouteInfo.LayerType);
+    ctor @Deprecated public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, boolean);
+    ctor @Deprecated public HttpRoute(org.apache.http.HttpHost);
+    ctor @Deprecated public HttpRoute(org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.HttpHost, boolean);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public int getHopCount();
+    method @Deprecated public org.apache.http.HttpHost getHopTarget(int);
+    method @Deprecated public org.apache.http.conn.routing.RouteInfo.LayerType getLayerType();
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public org.apache.http.HttpHost getProxyHost();
+    method @Deprecated public org.apache.http.HttpHost getTargetHost();
+    method @Deprecated public org.apache.http.conn.routing.RouteInfo.TunnelType getTunnelType();
+    method @Deprecated public boolean isLayered();
+    method @Deprecated public boolean isSecure();
+    method @Deprecated public boolean isTunnelled();
+  }
+
+  @Deprecated public interface HttpRouteDirector {
+    method @Deprecated public int nextStep(org.apache.http.conn.routing.RouteInfo, org.apache.http.conn.routing.RouteInfo);
+    field @Deprecated public static final int COMPLETE = 0; // 0x0
+    field @Deprecated public static final int CONNECT_PROXY = 2; // 0x2
+    field @Deprecated public static final int CONNECT_TARGET = 1; // 0x1
+    field @Deprecated public static final int LAYER_PROTOCOL = 5; // 0x5
+    field @Deprecated public static final int TUNNEL_PROXY = 4; // 0x4
+    field @Deprecated public static final int TUNNEL_TARGET = 3; // 0x3
+    field @Deprecated public static final int UNREACHABLE = -1; // 0xffffffff
+  }
+
+  @Deprecated public interface HttpRoutePlanner {
+    method @Deprecated public org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException;
+  }
+
+  @Deprecated public interface RouteInfo {
+    method @Deprecated public int getHopCount();
+    method @Deprecated public org.apache.http.HttpHost getHopTarget(int);
+    method @Deprecated public org.apache.http.conn.routing.RouteInfo.LayerType getLayerType();
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public org.apache.http.HttpHost getProxyHost();
+    method @Deprecated public org.apache.http.HttpHost getTargetHost();
+    method @Deprecated public org.apache.http.conn.routing.RouteInfo.TunnelType getTunnelType();
+    method @Deprecated public boolean isLayered();
+    method @Deprecated public boolean isSecure();
+    method @Deprecated public boolean isTunnelled();
+  }
+
+  @Deprecated public enum RouteInfo.LayerType {
+    enum_constant @Deprecated public static final org.apache.http.conn.routing.RouteInfo.LayerType LAYERED;
+    enum_constant @Deprecated public static final org.apache.http.conn.routing.RouteInfo.LayerType PLAIN;
+  }
+
+  @Deprecated public enum RouteInfo.TunnelType {
+    enum_constant @Deprecated public static final org.apache.http.conn.routing.RouteInfo.TunnelType PLAIN;
+    enum_constant @Deprecated public static final org.apache.http.conn.routing.RouteInfo.TunnelType TUNNELLED;
+  }
+
+  @Deprecated public final class RouteTracker implements java.lang.Cloneable org.apache.http.conn.routing.RouteInfo {
+    ctor @Deprecated public RouteTracker(org.apache.http.HttpHost, java.net.InetAddress);
+    ctor @Deprecated public RouteTracker(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public void connectProxy(org.apache.http.HttpHost, boolean);
+    method @Deprecated public void connectTarget(boolean);
+    method @Deprecated public int getHopCount();
+    method @Deprecated public org.apache.http.HttpHost getHopTarget(int);
+    method @Deprecated public org.apache.http.conn.routing.RouteInfo.LayerType getLayerType();
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public org.apache.http.HttpHost getProxyHost();
+    method @Deprecated public org.apache.http.HttpHost getTargetHost();
+    method @Deprecated public org.apache.http.conn.routing.RouteInfo.TunnelType getTunnelType();
+    method @Deprecated public boolean isConnected();
+    method @Deprecated public boolean isLayered();
+    method @Deprecated public boolean isSecure();
+    method @Deprecated public boolean isTunnelled();
+    method @Deprecated public void layerProtocol(boolean);
+    method @Deprecated public org.apache.http.conn.routing.HttpRoute toRoute();
+    method @Deprecated public void tunnelProxy(org.apache.http.HttpHost, boolean);
+    method @Deprecated public void tunnelTarget(boolean);
+  }
+
+}
+
+package org.apache.http.conn.scheme {
+
+  @Deprecated public final class PlainSocketFactory implements org.apache.http.conn.scheme.SocketFactory {
+    ctor @Deprecated public PlainSocketFactory(org.apache.http.conn.scheme.HostNameResolver);
+    ctor @Deprecated public PlainSocketFactory();
+    method @Deprecated public java.net.Socket connectSocket(java.net.Socket, String, int, java.net.InetAddress, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public java.net.Socket createSocket();
+    method @Deprecated public static org.apache.http.conn.scheme.PlainSocketFactory getSocketFactory();
+    method @Deprecated public boolean isSecure(java.net.Socket) throws java.lang.IllegalArgumentException;
+  }
+
+  @Deprecated public final class Scheme {
+    ctor @Deprecated public Scheme(String, org.apache.http.conn.scheme.SocketFactory, int);
+    method @Deprecated public int getDefaultPort();
+    method @Deprecated public String getName();
+    method @Deprecated public org.apache.http.conn.scheme.SocketFactory getSocketFactory();
+    method @Deprecated public boolean isLayered();
+    method @Deprecated public int resolvePort(int);
+  }
+
+  @Deprecated public final class SchemeRegistry {
+    ctor @Deprecated public SchemeRegistry();
+    method @Deprecated public org.apache.http.conn.scheme.Scheme get(String);
+    method @Deprecated public org.apache.http.conn.scheme.Scheme getScheme(String);
+    method @Deprecated public org.apache.http.conn.scheme.Scheme getScheme(org.apache.http.HttpHost);
+    method @Deprecated public java.util.List<java.lang.String> getSchemeNames();
+    method @Deprecated public org.apache.http.conn.scheme.Scheme register(org.apache.http.conn.scheme.Scheme);
+    method @Deprecated public void setItems(java.util.Map<java.lang.String,org.apache.http.conn.scheme.Scheme>);
+    method @Deprecated public org.apache.http.conn.scheme.Scheme unregister(String);
+  }
+
+}
+
+package org.apache.http.conn.util {
+
+  @Deprecated public class InetAddressUtils {
+    method @Deprecated public static boolean isIPv4Address(String);
+    method @Deprecated public static boolean isIPv6Address(String);
+    method @Deprecated public static boolean isIPv6HexCompressedAddress(String);
+    method @Deprecated public static boolean isIPv6StdAddress(String);
+  }
+
+}
+
+package org.apache.http.cookie {
+
+  @Deprecated public interface ClientCookie extends org.apache.http.cookie.Cookie {
+    method @Deprecated public boolean containsAttribute(String);
+    method @Deprecated public String getAttribute(String);
+    field @Deprecated public static final String COMMENTURL_ATTR = "commenturl";
+    field @Deprecated public static final String COMMENT_ATTR = "comment";
+    field @Deprecated public static final String DISCARD_ATTR = "discard";
+    field @Deprecated public static final String DOMAIN_ATTR = "domain";
+    field @Deprecated public static final String EXPIRES_ATTR = "expires";
+    field @Deprecated public static final String MAX_AGE_ATTR = "max-age";
+    field @Deprecated public static final String PATH_ATTR = "path";
+    field @Deprecated public static final String PORT_ATTR = "port";
+    field @Deprecated public static final String SECURE_ATTR = "secure";
+    field @Deprecated public static final String VERSION_ATTR = "version";
+  }
+
+  @Deprecated public interface Cookie {
+    method @Deprecated public String getComment();
+    method @Deprecated public String getCommentURL();
+    method @Deprecated public String getDomain();
+    method @Deprecated public java.util.Date getExpiryDate();
+    method @Deprecated public String getName();
+    method @Deprecated public String getPath();
+    method @Deprecated public int[] getPorts();
+    method @Deprecated public String getValue();
+    method @Deprecated public int getVersion();
+    method @Deprecated public boolean isExpired(java.util.Date);
+    method @Deprecated public boolean isPersistent();
+    method @Deprecated public boolean isSecure();
+  }
+
+  @Deprecated public interface CookieAttributeHandler {
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class CookieIdentityComparator implements java.util.Comparator<org.apache.http.cookie.Cookie> java.io.Serializable {
+    ctor @Deprecated public CookieIdentityComparator();
+    method @Deprecated public int compare(org.apache.http.cookie.Cookie, org.apache.http.cookie.Cookie);
+  }
+
+  @Deprecated public final class CookieOrigin {
+    ctor @Deprecated public CookieOrigin(String, int, String, boolean);
+    method @Deprecated public String getHost();
+    method @Deprecated public String getPath();
+    method @Deprecated public int getPort();
+    method @Deprecated public boolean isSecure();
+  }
+
+  @Deprecated public class CookiePathComparator implements java.util.Comparator<org.apache.http.cookie.Cookie> java.io.Serializable {
+    ctor @Deprecated public CookiePathComparator();
+    method @Deprecated public int compare(org.apache.http.cookie.Cookie, org.apache.http.cookie.Cookie);
+  }
+
+  @Deprecated public interface CookieSpec {
+    method @Deprecated public java.util.List<org.apache.http.Header> formatCookies(java.util.List<org.apache.http.cookie.Cookie>);
+    method @Deprecated public int getVersion();
+    method @Deprecated public org.apache.http.Header getVersionHeader();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public java.util.List<org.apache.http.cookie.Cookie> parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public interface CookieSpecFactory {
+    method @Deprecated public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public final class CookieSpecRegistry {
+    ctor @Deprecated public CookieSpecRegistry();
+    method @Deprecated public org.apache.http.cookie.CookieSpec getCookieSpec(String, org.apache.http.params.HttpParams) throws java.lang.IllegalStateException;
+    method @Deprecated public org.apache.http.cookie.CookieSpec getCookieSpec(String) throws java.lang.IllegalStateException;
+    method @Deprecated public java.util.List<java.lang.String> getSpecNames();
+    method @Deprecated public void register(String, org.apache.http.cookie.CookieSpecFactory);
+    method @Deprecated public void setItems(java.util.Map<java.lang.String,org.apache.http.cookie.CookieSpecFactory>);
+    method @Deprecated public void unregister(String);
+  }
+
+  @Deprecated public class MalformedCookieException extends org.apache.http.ProtocolException {
+    ctor @Deprecated public MalformedCookieException();
+    ctor @Deprecated public MalformedCookieException(String);
+    ctor @Deprecated public MalformedCookieException(String, Throwable);
+  }
+
+  @Deprecated public interface SM {
+    field @Deprecated public static final String COOKIE = "Cookie";
+    field @Deprecated public static final String COOKIE2 = "Cookie2";
+    field @Deprecated public static final String SET_COOKIE = "Set-Cookie";
+    field @Deprecated public static final String SET_COOKIE2 = "Set-Cookie2";
+  }
+
+  @Deprecated public interface SetCookie extends org.apache.http.cookie.Cookie {
+    method @Deprecated public void setComment(String);
+    method @Deprecated public void setDomain(String);
+    method @Deprecated public void setExpiryDate(java.util.Date);
+    method @Deprecated public void setPath(String);
+    method @Deprecated public void setSecure(boolean);
+    method @Deprecated public void setValue(String);
+    method @Deprecated public void setVersion(int);
+  }
+
+  @Deprecated public interface SetCookie2 extends org.apache.http.cookie.SetCookie {
+    method @Deprecated public void setCommentURL(String);
+    method @Deprecated public void setDiscard(boolean);
+    method @Deprecated public void setPorts(int[]);
+  }
+
+}
+
+package org.apache.http.cookie.params {
+
+  @Deprecated public interface CookieSpecPNames {
+    field @Deprecated public static final String DATE_PATTERNS = "http.protocol.cookie-datepatterns";
+    field @Deprecated public static final String SINGLE_COOKIE_HEADER = "http.protocol.single-cookie-header";
+  }
+
+  @Deprecated public class CookieSpecParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public CookieSpecParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setDatePatterns(java.util.Collection<java.lang.String>);
+    method @Deprecated public void setSingleHeader(boolean);
+  }
+
+}
+
+package org.apache.http.entity {
+
+  @Deprecated public abstract class AbstractHttpEntity implements org.apache.http.HttpEntity {
+    ctor @Deprecated protected AbstractHttpEntity();
+    method @Deprecated public void consumeContent() throws java.io.IOException, java.lang.UnsupportedOperationException;
+    method @Deprecated public org.apache.http.Header getContentEncoding();
+    method @Deprecated public org.apache.http.Header getContentType();
+    method @Deprecated public boolean isChunked();
+    method @Deprecated public void setChunked(boolean);
+    method @Deprecated public void setContentEncoding(org.apache.http.Header);
+    method @Deprecated public void setContentEncoding(String);
+    method @Deprecated public void setContentType(org.apache.http.Header);
+    method @Deprecated public void setContentType(String);
+    field @Deprecated protected boolean chunked;
+    field @Deprecated protected org.apache.http.Header contentEncoding;
+    field @Deprecated protected org.apache.http.Header contentType;
+  }
+
+  @Deprecated public class BasicHttpEntity extends org.apache.http.entity.AbstractHttpEntity {
+    ctor @Deprecated public BasicHttpEntity();
+    method @Deprecated public void consumeContent() throws java.io.IOException;
+    method @Deprecated public java.io.InputStream getContent() throws java.lang.IllegalStateException;
+    method @Deprecated public long getContentLength();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void setContent(java.io.InputStream);
+    method @Deprecated public void setContentLength(long);
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  @Deprecated public class BufferedHttpEntity extends org.apache.http.entity.HttpEntityWrapper {
+    ctor @Deprecated public BufferedHttpEntity(org.apache.http.HttpEntity) throws java.io.IOException;
+  }
+
+  @Deprecated public class ByteArrayEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable {
+    ctor @Deprecated public ByteArrayEntity(byte[]);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public java.io.InputStream getContent();
+    method @Deprecated public long getContentLength();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+    field @Deprecated protected final byte[] content;
+  }
+
+  @Deprecated public interface ContentLengthStrategy {
+    method @Deprecated public long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException;
+    field @Deprecated public static final int CHUNKED = -2; // 0xfffffffe
+    field @Deprecated public static final int IDENTITY = -1; // 0xffffffff
+  }
+
+  @Deprecated public interface ContentProducer {
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  @Deprecated public class EntityTemplate extends org.apache.http.entity.AbstractHttpEntity {
+    ctor @Deprecated public EntityTemplate(org.apache.http.entity.ContentProducer);
+    method @Deprecated public void consumeContent() throws java.io.IOException;
+    method @Deprecated public java.io.InputStream getContent();
+    method @Deprecated public long getContentLength();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  @Deprecated public class FileEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable {
+    ctor @Deprecated public FileEntity(java.io.File, String);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public java.io.InputStream getContent() throws java.io.IOException;
+    method @Deprecated public long getContentLength();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+    field @Deprecated protected final java.io.File file;
+  }
+
+  @Deprecated public class HttpEntityWrapper implements org.apache.http.HttpEntity {
+    ctor @Deprecated public HttpEntityWrapper(org.apache.http.HttpEntity);
+    method @Deprecated public void consumeContent() throws java.io.IOException;
+    method @Deprecated public java.io.InputStream getContent() throws java.io.IOException;
+    method @Deprecated public org.apache.http.Header getContentEncoding();
+    method @Deprecated public long getContentLength();
+    method @Deprecated public org.apache.http.Header getContentType();
+    method @Deprecated public boolean isChunked();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+    field @Deprecated protected org.apache.http.HttpEntity wrappedEntity;
+  }
+
+  @Deprecated public class InputStreamEntity extends org.apache.http.entity.AbstractHttpEntity {
+    ctor @Deprecated public InputStreamEntity(java.io.InputStream, long);
+    method @Deprecated public void consumeContent() throws java.io.IOException;
+    method @Deprecated public java.io.InputStream getContent() throws java.io.IOException;
+    method @Deprecated public long getContentLength();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  @Deprecated public class SerializableEntity extends org.apache.http.entity.AbstractHttpEntity {
+    ctor @Deprecated public SerializableEntity(java.io.Serializable, boolean) throws java.io.IOException;
+    method @Deprecated public java.io.InputStream getContent() throws java.io.IOException, java.lang.IllegalStateException;
+    method @Deprecated public long getContentLength();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+  }
+
+  @Deprecated public class StringEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable {
+    ctor @Deprecated public StringEntity(String, String) throws java.io.UnsupportedEncodingException;
+    ctor @Deprecated public StringEntity(String) throws java.io.UnsupportedEncodingException;
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public java.io.InputStream getContent() throws java.io.IOException;
+    method @Deprecated public long getContentLength();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public boolean isStreaming();
+    method @Deprecated public void writeTo(java.io.OutputStream) throws java.io.IOException;
+    field @Deprecated protected final byte[] content;
+  }
+
+}
+
+package org.apache.http.impl {
+
+  @Deprecated public abstract class AbstractHttpClientConnection implements org.apache.http.HttpClientConnection {
+    ctor @Deprecated public AbstractHttpClientConnection();
+    method @Deprecated protected abstract void assertOpen() throws java.lang.IllegalStateException;
+    method @Deprecated protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer();
+    method @Deprecated protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer();
+    method @Deprecated protected org.apache.http.HttpResponseFactory createHttpResponseFactory();
+    method @Deprecated protected org.apache.http.io.HttpMessageWriter createRequestWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams);
+    method @Deprecated protected org.apache.http.io.HttpMessageParser createResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams);
+    method @Deprecated protected void doFlush() throws java.io.IOException;
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated public org.apache.http.HttpConnectionMetrics getMetrics();
+    method @Deprecated protected void init(org.apache.http.io.SessionInputBuffer, org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams);
+    method @Deprecated public boolean isResponseAvailable(int) throws java.io.IOException;
+    method @Deprecated public boolean isStale();
+    method @Deprecated public void receiveResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public abstract class AbstractHttpServerConnection implements org.apache.http.HttpServerConnection {
+    ctor @Deprecated public AbstractHttpServerConnection();
+    method @Deprecated protected abstract void assertOpen() throws java.lang.IllegalStateException;
+    method @Deprecated protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer();
+    method @Deprecated protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer();
+    method @Deprecated protected org.apache.http.HttpRequestFactory createHttpRequestFactory();
+    method @Deprecated protected org.apache.http.io.HttpMessageParser createRequestParser(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams);
+    method @Deprecated protected org.apache.http.io.HttpMessageWriter createResponseWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams);
+    method @Deprecated protected void doFlush() throws java.io.IOException;
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated public org.apache.http.HttpConnectionMetrics getMetrics();
+    method @Deprecated protected void init(org.apache.http.io.SessionInputBuffer, org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams);
+    method @Deprecated public boolean isStale();
+    method @Deprecated public void receiveRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpRequest receiveRequestHeader() throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendResponseHeader(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class DefaultConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy {
+    ctor @Deprecated public DefaultConnectionReuseStrategy();
+    method @Deprecated protected org.apache.http.TokenIterator createTokenIterator(org.apache.http.HeaderIterator);
+    method @Deprecated public boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class DefaultHttpClientConnection extends org.apache.http.impl.SocketHttpClientConnection {
+    ctor @Deprecated public DefaultHttpClientConnection();
+    method @Deprecated public void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException;
+  }
+
+  @Deprecated public class DefaultHttpRequestFactory implements org.apache.http.HttpRequestFactory {
+    ctor @Deprecated public DefaultHttpRequestFactory();
+    method @Deprecated public org.apache.http.HttpRequest newHttpRequest(org.apache.http.RequestLine) throws org.apache.http.MethodNotSupportedException;
+    method @Deprecated public org.apache.http.HttpRequest newHttpRequest(String, String) throws org.apache.http.MethodNotSupportedException;
+  }
+
+  @Deprecated public class DefaultHttpResponseFactory implements org.apache.http.HttpResponseFactory {
+    ctor @Deprecated public DefaultHttpResponseFactory(org.apache.http.ReasonPhraseCatalog);
+    ctor @Deprecated public DefaultHttpResponseFactory();
+    method @Deprecated protected java.util.Locale determineLocale(org.apache.http.protocol.HttpContext);
+    method @Deprecated public org.apache.http.HttpResponse newHttpResponse(org.apache.http.ProtocolVersion, int, org.apache.http.protocol.HttpContext);
+    method @Deprecated public org.apache.http.HttpResponse newHttpResponse(org.apache.http.StatusLine, org.apache.http.protocol.HttpContext);
+    field @Deprecated protected final org.apache.http.ReasonPhraseCatalog reasonCatalog;
+  }
+
+  @Deprecated public class DefaultHttpServerConnection extends org.apache.http.impl.SocketHttpServerConnection {
+    ctor @Deprecated public DefaultHttpServerConnection();
+    method @Deprecated public void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException;
+  }
+
+  @Deprecated public class EnglishReasonPhraseCatalog implements org.apache.http.ReasonPhraseCatalog {
+    ctor @Deprecated protected EnglishReasonPhraseCatalog();
+    method @Deprecated public String getReason(int, java.util.Locale);
+    field @Deprecated public static final org.apache.http.impl.EnglishReasonPhraseCatalog INSTANCE;
+  }
+
+  @Deprecated public class HttpConnectionMetricsImpl implements org.apache.http.HttpConnectionMetrics {
+    ctor @Deprecated public HttpConnectionMetricsImpl(org.apache.http.io.HttpTransportMetrics, org.apache.http.io.HttpTransportMetrics);
+    method @Deprecated public Object getMetric(String);
+    method @Deprecated public long getReceivedBytesCount();
+    method @Deprecated public long getRequestCount();
+    method @Deprecated public long getResponseCount();
+    method @Deprecated public long getSentBytesCount();
+    method @Deprecated public void incrementRequestCount();
+    method @Deprecated public void incrementResponseCount();
+    method @Deprecated public void reset();
+    method @Deprecated public void setMetric(String, Object);
+    field @Deprecated public static final String RECEIVED_BYTES_COUNT = "http.received-bytes-count";
+    field @Deprecated public static final String REQUEST_COUNT = "http.request-count";
+    field @Deprecated public static final String RESPONSE_COUNT = "http.response-count";
+    field @Deprecated public static final String SENT_BYTES_COUNT = "http.sent-bytes-count";
+  }
+
+  @Deprecated public class NoConnectionReuseStrategy implements org.apache.http.ConnectionReuseStrategy {
+    ctor @Deprecated public NoConnectionReuseStrategy();
+    method @Deprecated public boolean keepAlive(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class SocketHttpClientConnection extends org.apache.http.impl.AbstractHttpClientConnection implements org.apache.http.HttpInetConnection {
+    ctor @Deprecated public SocketHttpClientConnection();
+    method @Deprecated protected void assertNotOpen();
+    method @Deprecated protected void assertOpen();
+    method @Deprecated protected void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void close() throws java.io.IOException;
+    method @Deprecated protected org.apache.http.io.SessionInputBuffer createSessionInputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated protected org.apache.http.io.SessionOutputBuffer createSessionOutputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public int getLocalPort();
+    method @Deprecated public java.net.InetAddress getRemoteAddress();
+    method @Deprecated public int getRemotePort();
+    method @Deprecated protected java.net.Socket getSocket();
+    method @Deprecated public int getSocketTimeout();
+    method @Deprecated public boolean isOpen();
+    method @Deprecated public void setSocketTimeout(int);
+    method @Deprecated public void shutdown() throws java.io.IOException;
+  }
+
+  @Deprecated public class SocketHttpServerConnection extends org.apache.http.impl.AbstractHttpServerConnection implements org.apache.http.HttpInetConnection {
+    ctor @Deprecated public SocketHttpServerConnection();
+    method @Deprecated protected void assertNotOpen();
+    method @Deprecated protected void assertOpen();
+    method @Deprecated protected void bind(java.net.Socket, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void close() throws java.io.IOException;
+    method @Deprecated protected org.apache.http.io.SessionInputBuffer createHttpDataReceiver(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated protected org.apache.http.io.SessionOutputBuffer createHttpDataTransmitter(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public int getLocalPort();
+    method @Deprecated public java.net.InetAddress getRemoteAddress();
+    method @Deprecated public int getRemotePort();
+    method @Deprecated protected java.net.Socket getSocket();
+    method @Deprecated public int getSocketTimeout();
+    method @Deprecated public boolean isOpen();
+    method @Deprecated public void setSocketTimeout(int);
+    method @Deprecated public void shutdown() throws java.io.IOException;
+  }
+
+}
+
+package org.apache.http.impl.auth {
+
+  @Deprecated public abstract class AuthSchemeBase implements org.apache.http.auth.AuthScheme {
+    ctor @Deprecated public AuthSchemeBase();
+    method @Deprecated public boolean isProxy();
+    method @Deprecated protected abstract void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException;
+    method @Deprecated public void processChallenge(org.apache.http.Header) throws org.apache.http.auth.MalformedChallengeException;
+  }
+
+  @Deprecated public class BasicScheme extends org.apache.http.impl.auth.RFC2617Scheme {
+    ctor @Deprecated public BasicScheme();
+    method @Deprecated public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException;
+    method @Deprecated public static org.apache.http.Header authenticate(org.apache.http.auth.Credentials, String, boolean);
+    method @Deprecated public String getSchemeName();
+    method @Deprecated public boolean isComplete();
+    method @Deprecated public boolean isConnectionBased();
+  }
+
+  @Deprecated public class BasicSchemeFactory implements org.apache.http.auth.AuthSchemeFactory {
+    ctor @Deprecated public BasicSchemeFactory();
+    method @Deprecated public org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public class DigestScheme extends org.apache.http.impl.auth.RFC2617Scheme {
+    ctor @Deprecated public DigestScheme();
+    method @Deprecated public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException;
+    method @Deprecated public static String createCnonce();
+    method @Deprecated public String getSchemeName();
+    method @Deprecated public boolean isComplete();
+    method @Deprecated public boolean isConnectionBased();
+    method @Deprecated public void overrideParamter(String, String);
+  }
+
+  @Deprecated public class DigestSchemeFactory implements org.apache.http.auth.AuthSchemeFactory {
+    ctor @Deprecated public DigestSchemeFactory();
+    method @Deprecated public org.apache.http.auth.AuthScheme newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public interface NTLMEngine {
+    method @Deprecated public String generateType1Msg(String, String) throws org.apache.http.impl.auth.NTLMEngineException;
+    method @Deprecated public String generateType3Msg(String, String, String, String, String) throws org.apache.http.impl.auth.NTLMEngineException;
+  }
+
+  @Deprecated public class NTLMEngineException extends org.apache.http.auth.AuthenticationException {
+    ctor @Deprecated public NTLMEngineException();
+    ctor @Deprecated public NTLMEngineException(String);
+    ctor @Deprecated public NTLMEngineException(String, Throwable);
+  }
+
+  @Deprecated public class NTLMScheme extends org.apache.http.impl.auth.AuthSchemeBase {
+    ctor @Deprecated public NTLMScheme(org.apache.http.impl.auth.NTLMEngine);
+    method @Deprecated public org.apache.http.Header authenticate(org.apache.http.auth.Credentials, org.apache.http.HttpRequest) throws org.apache.http.auth.AuthenticationException;
+    method @Deprecated public String getParameter(String);
+    method @Deprecated public String getRealm();
+    method @Deprecated public String getSchemeName();
+    method @Deprecated public boolean isComplete();
+    method @Deprecated public boolean isConnectionBased();
+    method @Deprecated protected void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException;
+  }
+
+  @Deprecated public abstract class RFC2617Scheme extends org.apache.http.impl.auth.AuthSchemeBase {
+    ctor @Deprecated public RFC2617Scheme();
+    method @Deprecated public String getParameter(String);
+    method @Deprecated protected java.util.Map<java.lang.String,java.lang.String> getParameters();
+    method @Deprecated public String getRealm();
+    method @Deprecated protected void parseChallenge(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.auth.MalformedChallengeException;
+  }
+
+  @Deprecated public class UnsupportedDigestAlgorithmException extends java.lang.RuntimeException {
+    ctor @Deprecated public UnsupportedDigestAlgorithmException();
+    ctor @Deprecated public UnsupportedDigestAlgorithmException(String);
+    ctor @Deprecated public UnsupportedDigestAlgorithmException(String, Throwable);
+  }
+
+}
+
+package org.apache.http.impl.client {
+
+  @Deprecated public abstract class AbstractAuthenticationHandler implements org.apache.http.client.AuthenticationHandler {
+    ctor @Deprecated public AbstractAuthenticationHandler();
+    method @Deprecated protected java.util.List<java.lang.String> getAuthPreferences();
+    method @Deprecated protected java.util.Map<java.lang.String,org.apache.http.Header> parseChallenges(org.apache.http.Header[]) throws org.apache.http.auth.MalformedChallengeException;
+    method @Deprecated public org.apache.http.auth.AuthScheme selectScheme(java.util.Map<java.lang.String,org.apache.http.Header>, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.AuthenticationException;
+  }
+
+  @Deprecated public abstract class AbstractHttpClient implements org.apache.http.client.HttpClient {
+    ctor @Deprecated protected AbstractHttpClient(org.apache.http.conn.ClientConnectionManager, org.apache.http.params.HttpParams);
+    method @Deprecated public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor);
+    method @Deprecated public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int);
+    method @Deprecated public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor);
+    method @Deprecated public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int);
+    method @Deprecated public void clearRequestInterceptors();
+    method @Deprecated public void clearResponseInterceptors();
+    method @Deprecated protected abstract org.apache.http.auth.AuthSchemeRegistry createAuthSchemeRegistry();
+    method @Deprecated protected abstract org.apache.http.conn.ClientConnectionManager createClientConnectionManager();
+    method @Deprecated protected org.apache.http.client.RequestDirector createClientRequestDirector(org.apache.http.protocol.HttpRequestExecutor, org.apache.http.conn.ClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.conn.ConnectionKeepAliveStrategy, org.apache.http.conn.routing.HttpRoutePlanner, org.apache.http.protocol.HttpProcessor, org.apache.http.client.HttpRequestRetryHandler, org.apache.http.client.RedirectHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.UserTokenHandler, org.apache.http.params.HttpParams);
+    method @Deprecated protected abstract org.apache.http.conn.ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy();
+    method @Deprecated protected abstract org.apache.http.ConnectionReuseStrategy createConnectionReuseStrategy();
+    method @Deprecated protected abstract org.apache.http.cookie.CookieSpecRegistry createCookieSpecRegistry();
+    method @Deprecated protected abstract org.apache.http.client.CookieStore createCookieStore();
+    method @Deprecated protected abstract org.apache.http.client.CredentialsProvider createCredentialsProvider();
+    method @Deprecated protected abstract org.apache.http.protocol.HttpContext createHttpContext();
+    method @Deprecated protected abstract org.apache.http.params.HttpParams createHttpParams();
+    method @Deprecated protected abstract org.apache.http.protocol.BasicHttpProcessor createHttpProcessor();
+    method @Deprecated protected abstract org.apache.http.client.HttpRequestRetryHandler createHttpRequestRetryHandler();
+    method @Deprecated protected abstract org.apache.http.conn.routing.HttpRoutePlanner createHttpRoutePlanner();
+    method @Deprecated protected abstract org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler();
+    method @Deprecated protected abstract org.apache.http.client.RedirectHandler createRedirectHandler();
+    method @Deprecated protected abstract org.apache.http.protocol.HttpRequestExecutor createRequestExecutor();
+    method @Deprecated protected abstract org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler();
+    method @Deprecated protected abstract org.apache.http.client.UserTokenHandler createUserTokenHandler();
+    method @Deprecated protected org.apache.http.params.HttpParams determineParams(org.apache.http.HttpRequest);
+    method @Deprecated public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public final org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public final org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler<? extends T>) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler<? extends T>, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler<? extends T>) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public <T> T execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.client.ResponseHandler<? extends T>, org.apache.http.protocol.HttpContext) throws org.apache.http.client.ClientProtocolException, java.io.IOException;
+    method @Deprecated public final org.apache.http.auth.AuthSchemeRegistry getAuthSchemes();
+    method @Deprecated public final org.apache.http.conn.ConnectionKeepAliveStrategy getConnectionKeepAliveStrategy();
+    method @Deprecated public final org.apache.http.conn.ClientConnectionManager getConnectionManager();
+    method @Deprecated public final org.apache.http.ConnectionReuseStrategy getConnectionReuseStrategy();
+    method @Deprecated public final org.apache.http.cookie.CookieSpecRegistry getCookieSpecs();
+    method @Deprecated public final org.apache.http.client.CookieStore getCookieStore();
+    method @Deprecated public final org.apache.http.client.CredentialsProvider getCredentialsProvider();
+    method @Deprecated protected final org.apache.http.protocol.BasicHttpProcessor getHttpProcessor();
+    method @Deprecated public final org.apache.http.client.HttpRequestRetryHandler getHttpRequestRetryHandler();
+    method @Deprecated public final org.apache.http.params.HttpParams getParams();
+    method @Deprecated public final org.apache.http.client.AuthenticationHandler getProxyAuthenticationHandler();
+    method @Deprecated public final org.apache.http.client.RedirectHandler getRedirectHandler();
+    method @Deprecated public final org.apache.http.protocol.HttpRequestExecutor getRequestExecutor();
+    method @Deprecated public org.apache.http.HttpRequestInterceptor getRequestInterceptor(int);
+    method @Deprecated public int getRequestInterceptorCount();
+    method @Deprecated public org.apache.http.HttpResponseInterceptor getResponseInterceptor(int);
+    method @Deprecated public int getResponseInterceptorCount();
+    method @Deprecated public final org.apache.http.conn.routing.HttpRoutePlanner getRoutePlanner();
+    method @Deprecated public final org.apache.http.client.AuthenticationHandler getTargetAuthenticationHandler();
+    method @Deprecated public final org.apache.http.client.UserTokenHandler getUserTokenHandler();
+    method @Deprecated public void removeRequestInterceptorByClass(Class<? extends org.apache.http.HttpRequestInterceptor>);
+    method @Deprecated public void removeResponseInterceptorByClass(Class<? extends org.apache.http.HttpResponseInterceptor>);
+    method @Deprecated public void setAuthSchemes(org.apache.http.auth.AuthSchemeRegistry);
+    method @Deprecated public void setCookieSpecs(org.apache.http.cookie.CookieSpecRegistry);
+    method @Deprecated public void setCookieStore(org.apache.http.client.CookieStore);
+    method @Deprecated public void setCredentialsProvider(org.apache.http.client.CredentialsProvider);
+    method @Deprecated public void setHttpRequestRetryHandler(org.apache.http.client.HttpRequestRetryHandler);
+    method @Deprecated public void setKeepAliveStrategy(org.apache.http.conn.ConnectionKeepAliveStrategy);
+    method @Deprecated public void setParams(org.apache.http.params.HttpParams);
+    method @Deprecated public void setProxyAuthenticationHandler(org.apache.http.client.AuthenticationHandler);
+    method @Deprecated public void setRedirectHandler(org.apache.http.client.RedirectHandler);
+    method @Deprecated public void setReuseStrategy(org.apache.http.ConnectionReuseStrategy);
+    method @Deprecated public void setRoutePlanner(org.apache.http.conn.routing.HttpRoutePlanner);
+    method @Deprecated public void setTargetAuthenticationHandler(org.apache.http.client.AuthenticationHandler);
+    method @Deprecated public void setUserTokenHandler(org.apache.http.client.UserTokenHandler);
+  }
+
+  @Deprecated public class BasicCookieStore implements org.apache.http.client.CookieStore {
+    ctor @Deprecated public BasicCookieStore();
+    method @Deprecated public void addCookie(org.apache.http.cookie.Cookie);
+    method @Deprecated public void addCookies(org.apache.http.cookie.Cookie[]);
+    method @Deprecated public void clear();
+    method @Deprecated public boolean clearExpired(java.util.Date);
+    method @Deprecated public java.util.List<org.apache.http.cookie.Cookie> getCookies();
+  }
+
+  @Deprecated public class BasicCredentialsProvider implements org.apache.http.client.CredentialsProvider {
+    ctor @Deprecated public BasicCredentialsProvider();
+    method @Deprecated public void clear();
+    method @Deprecated public org.apache.http.auth.Credentials getCredentials(org.apache.http.auth.AuthScope);
+    method @Deprecated public void setCredentials(org.apache.http.auth.AuthScope, org.apache.http.auth.Credentials);
+  }
+
+  @Deprecated public class BasicResponseHandler implements org.apache.http.client.ResponseHandler<java.lang.String> {
+    ctor @Deprecated public BasicResponseHandler();
+    method @Deprecated public String handleResponse(org.apache.http.HttpResponse) throws org.apache.http.client.HttpResponseException, java.io.IOException;
+  }
+
+  @Deprecated public class ClientParamsStack extends org.apache.http.params.AbstractHttpParams {
+    ctor @Deprecated public ClientParamsStack(org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams);
+    ctor @Deprecated public ClientParamsStack(org.apache.http.impl.client.ClientParamsStack);
+    ctor @Deprecated public ClientParamsStack(org.apache.http.impl.client.ClientParamsStack, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams, org.apache.http.params.HttpParams);
+    method @Deprecated public org.apache.http.params.HttpParams copy();
+    method @Deprecated public final org.apache.http.params.HttpParams getApplicationParams();
+    method @Deprecated public final org.apache.http.params.HttpParams getClientParams();
+    method @Deprecated public final org.apache.http.params.HttpParams getOverrideParams();
+    method @Deprecated public Object getParameter(String);
+    method @Deprecated public final org.apache.http.params.HttpParams getRequestParams();
+    method @Deprecated public boolean removeParameter(String);
+    method @Deprecated public org.apache.http.params.HttpParams setParameter(String, Object) throws java.lang.UnsupportedOperationException;
+    field @Deprecated protected final org.apache.http.params.HttpParams applicationParams;
+    field @Deprecated protected final org.apache.http.params.HttpParams clientParams;
+    field @Deprecated protected final org.apache.http.params.HttpParams overrideParams;
+    field @Deprecated protected final org.apache.http.params.HttpParams requestParams;
+  }
+
+  @Deprecated public class DefaultConnectionKeepAliveStrategy implements org.apache.http.conn.ConnectionKeepAliveStrategy {
+    ctor @Deprecated public DefaultConnectionKeepAliveStrategy();
+    method @Deprecated public long getKeepAliveDuration(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class DefaultHttpClient extends org.apache.http.impl.client.AbstractHttpClient {
+    ctor @Deprecated public DefaultHttpClient(org.apache.http.conn.ClientConnectionManager, org.apache.http.params.HttpParams);
+    ctor @Deprecated public DefaultHttpClient(org.apache.http.params.HttpParams);
+    ctor @Deprecated public DefaultHttpClient();
+    method @Deprecated protected org.apache.http.auth.AuthSchemeRegistry createAuthSchemeRegistry();
+    method @Deprecated protected org.apache.http.conn.ClientConnectionManager createClientConnectionManager();
+    method @Deprecated protected org.apache.http.conn.ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy();
+    method @Deprecated protected org.apache.http.ConnectionReuseStrategy createConnectionReuseStrategy();
+    method @Deprecated protected org.apache.http.cookie.CookieSpecRegistry createCookieSpecRegistry();
+    method @Deprecated protected org.apache.http.client.CookieStore createCookieStore();
+    method @Deprecated protected org.apache.http.client.CredentialsProvider createCredentialsProvider();
+    method @Deprecated protected org.apache.http.protocol.HttpContext createHttpContext();
+    method @Deprecated protected org.apache.http.params.HttpParams createHttpParams();
+    method @Deprecated protected org.apache.http.protocol.BasicHttpProcessor createHttpProcessor();
+    method @Deprecated protected org.apache.http.client.HttpRequestRetryHandler createHttpRequestRetryHandler();
+    method @Deprecated protected org.apache.http.conn.routing.HttpRoutePlanner createHttpRoutePlanner();
+    method @Deprecated protected org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler();
+    method @Deprecated protected org.apache.http.client.RedirectHandler createRedirectHandler();
+    method @Deprecated protected org.apache.http.protocol.HttpRequestExecutor createRequestExecutor();
+    method @Deprecated protected org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler();
+    method @Deprecated protected org.apache.http.client.UserTokenHandler createUserTokenHandler();
+  }
+
+  @Deprecated public class DefaultHttpRequestRetryHandler implements org.apache.http.client.HttpRequestRetryHandler {
+    ctor @Deprecated public DefaultHttpRequestRetryHandler(int, boolean);
+    ctor @Deprecated public DefaultHttpRequestRetryHandler();
+    method @Deprecated public int getRetryCount();
+    method @Deprecated public boolean isRequestSentRetryEnabled();
+    method @Deprecated public boolean retryRequest(java.io.IOException, int, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class DefaultProxyAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler {
+    ctor @Deprecated public DefaultProxyAuthenticationHandler();
+    method @Deprecated public java.util.Map<java.lang.String,org.apache.http.Header> getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException;
+    method @Deprecated public boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class DefaultRedirectHandler implements org.apache.http.client.RedirectHandler {
+    ctor @Deprecated public DefaultRedirectHandler();
+    method @Deprecated public java.net.URI getLocationURI(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.ProtocolException;
+    method @Deprecated public boolean isRedirectRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class DefaultRequestDirector implements org.apache.http.client.RequestDirector {
+    ctor @Deprecated public DefaultRequestDirector(org.apache.http.protocol.HttpRequestExecutor, org.apache.http.conn.ClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.conn.ConnectionKeepAliveStrategy, org.apache.http.conn.routing.HttpRoutePlanner, org.apache.http.protocol.HttpProcessor, org.apache.http.client.HttpRequestRetryHandler, org.apache.http.client.RedirectHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.UserTokenHandler, org.apache.http.params.HttpParams);
+    method @Deprecated protected org.apache.http.HttpRequest createConnectRequest(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext);
+    method @Deprecated protected boolean createTunnelToProxy(org.apache.http.conn.routing.HttpRoute, int, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected boolean createTunnelToTarget(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException;
+    method @Deprecated protected void establishRoute(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse execute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected org.apache.http.impl.client.RoutedRequest handleResponse(org.apache.http.impl.client.RoutedRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected void releaseConnection();
+    method @Deprecated protected void rewriteRequestURI(org.apache.http.impl.client.RequestWrapper, org.apache.http.conn.routing.HttpRoute) throws org.apache.http.ProtocolException;
+    field @Deprecated protected final org.apache.http.conn.ClientConnectionManager connManager;
+    field @Deprecated protected final org.apache.http.protocol.HttpProcessor httpProcessor;
+    field @Deprecated protected final org.apache.http.conn.ConnectionKeepAliveStrategy keepAliveStrategy;
+    field @Deprecated protected org.apache.http.conn.ManagedClientConnection managedConn;
+    field @Deprecated protected final org.apache.http.params.HttpParams params;
+    field @Deprecated protected final org.apache.http.client.RedirectHandler redirectHandler;
+    field @Deprecated protected final org.apache.http.protocol.HttpRequestExecutor requestExec;
+    field @Deprecated protected final org.apache.http.client.HttpRequestRetryHandler retryHandler;
+    field @Deprecated protected final org.apache.http.ConnectionReuseStrategy reuseStrategy;
+    field @Deprecated protected final org.apache.http.conn.routing.HttpRoutePlanner routePlanner;
+  }
+
+  @Deprecated public class DefaultTargetAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler {
+    ctor @Deprecated public DefaultTargetAuthenticationHandler();
+    method @Deprecated public java.util.Map<java.lang.String,org.apache.http.Header> getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException;
+    method @Deprecated public boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class DefaultUserTokenHandler implements org.apache.http.client.UserTokenHandler {
+    ctor @Deprecated public DefaultUserTokenHandler();
+    method @Deprecated public Object getUserToken(org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class EntityEnclosingRequestWrapper extends org.apache.http.impl.client.RequestWrapper implements org.apache.http.HttpEntityEnclosingRequest {
+    ctor @Deprecated public EntityEnclosingRequestWrapper(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.ProtocolException;
+    method @Deprecated public boolean expectContinue();
+    method @Deprecated public org.apache.http.HttpEntity getEntity();
+    method @Deprecated public void setEntity(org.apache.http.HttpEntity);
+  }
+
+  @Deprecated public class RedirectLocations {
+    ctor @Deprecated public RedirectLocations();
+    method @Deprecated public void add(java.net.URI);
+    method @Deprecated public boolean contains(java.net.URI);
+    method @Deprecated public boolean remove(java.net.URI);
+  }
+
+  @Deprecated public class RequestWrapper extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.client.methods.HttpUriRequest {
+    ctor @Deprecated public RequestWrapper(org.apache.http.HttpRequest) throws org.apache.http.ProtocolException;
+    method @Deprecated public void abort() throws java.lang.UnsupportedOperationException;
+    method @Deprecated public int getExecCount();
+    method @Deprecated public String getMethod();
+    method @Deprecated public org.apache.http.HttpRequest getOriginal();
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public org.apache.http.RequestLine getRequestLine();
+    method @Deprecated public java.net.URI getURI();
+    method @Deprecated public void incrementExecCount();
+    method @Deprecated public boolean isAborted();
+    method @Deprecated public boolean isRepeatable();
+    method @Deprecated public void resetHeaders();
+    method @Deprecated public void setMethod(String);
+    method @Deprecated public void setProtocolVersion(org.apache.http.ProtocolVersion);
+    method @Deprecated public void setURI(java.net.URI);
+  }
+
+  @Deprecated public class RoutedRequest {
+    ctor @Deprecated public RoutedRequest(org.apache.http.impl.client.RequestWrapper, org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public final org.apache.http.impl.client.RequestWrapper getRequest();
+    method @Deprecated public final org.apache.http.conn.routing.HttpRoute getRoute();
+    field @Deprecated protected final org.apache.http.impl.client.RequestWrapper request;
+    field @Deprecated protected final org.apache.http.conn.routing.HttpRoute route;
+  }
+
+  @Deprecated public class TunnelRefusedException extends org.apache.http.HttpException {
+    ctor @Deprecated public TunnelRefusedException(String, org.apache.http.HttpResponse);
+    method @Deprecated public org.apache.http.HttpResponse getResponse();
+  }
+
+}
+
+package org.apache.http.impl.conn {
+
+  @Deprecated public abstract class AbstractClientConnAdapter implements org.apache.http.conn.ManagedClientConnection {
+    ctor @Deprecated protected AbstractClientConnAdapter(org.apache.http.conn.ClientConnectionManager, org.apache.http.conn.OperatedClientConnection);
+    method @Deprecated public void abortConnection();
+    method @Deprecated protected final void assertNotAborted() throws java.io.InterruptedIOException;
+    method @Deprecated protected final void assertValid(org.apache.http.conn.OperatedClientConnection);
+    method @Deprecated protected void detach();
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated public java.net.InetAddress getLocalAddress();
+    method @Deprecated public int getLocalPort();
+    method @Deprecated protected org.apache.http.conn.ClientConnectionManager getManager();
+    method @Deprecated public org.apache.http.HttpConnectionMetrics getMetrics();
+    method @Deprecated public java.net.InetAddress getRemoteAddress();
+    method @Deprecated public int getRemotePort();
+    method @Deprecated public javax.net.ssl.SSLSession getSSLSession();
+    method @Deprecated public int getSocketTimeout();
+    method @Deprecated protected org.apache.http.conn.OperatedClientConnection getWrappedConnection();
+    method @Deprecated public boolean isMarkedReusable();
+    method @Deprecated public boolean isOpen();
+    method @Deprecated public boolean isResponseAvailable(int) throws java.io.IOException;
+    method @Deprecated public boolean isSecure();
+    method @Deprecated public boolean isStale();
+    method @Deprecated public void markReusable();
+    method @Deprecated public void receiveResponseEntity(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void releaseConnection();
+    method @Deprecated public void sendRequestEntity(org.apache.http.HttpEntityEnclosingRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void sendRequestHeader(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void setIdleDuration(long, java.util.concurrent.TimeUnit);
+    method @Deprecated public void setSocketTimeout(int);
+    method @Deprecated public void unmarkReusable();
+  }
+
+  @Deprecated public abstract class AbstractPoolEntry {
+    ctor @Deprecated protected AbstractPoolEntry(org.apache.http.conn.ClientConnectionOperator, org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public Object getState();
+    method @Deprecated public void layerProtocol(org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void open(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void setState(Object);
+    method @Deprecated protected void shutdownEntry();
+    method @Deprecated public void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    field @Deprecated protected final org.apache.http.conn.ClientConnectionOperator connOperator;
+    field @Deprecated protected final org.apache.http.conn.OperatedClientConnection connection;
+    field @Deprecated protected volatile org.apache.http.conn.routing.HttpRoute route;
+    field @Deprecated protected volatile Object state;
+    field @Deprecated protected volatile org.apache.http.conn.routing.RouteTracker tracker;
+  }
+
+  @Deprecated public abstract class AbstractPooledConnAdapter extends org.apache.http.impl.conn.AbstractClientConnAdapter {
+    ctor @Deprecated protected AbstractPooledConnAdapter(org.apache.http.conn.ClientConnectionManager, org.apache.http.impl.conn.AbstractPoolEntry);
+    method @Deprecated protected final void assertAttached();
+    method @Deprecated public void close() throws java.io.IOException;
+    method @Deprecated public org.apache.http.conn.routing.HttpRoute getRoute();
+    method @Deprecated public Object getState();
+    method @Deprecated public void layerProtocol(org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void open(org.apache.http.conn.routing.HttpRoute, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void setState(Object);
+    method @Deprecated public void shutdown() throws java.io.IOException;
+    method @Deprecated public void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    field @Deprecated protected volatile org.apache.http.impl.conn.AbstractPoolEntry poolEntry;
+  }
+
+  @Deprecated public class DefaultClientConnection extends org.apache.http.impl.SocketHttpClientConnection implements org.apache.http.conn.OperatedClientConnection {
+    ctor @Deprecated public DefaultClientConnection();
+    method @Deprecated public final java.net.Socket getSocket();
+    method @Deprecated public final org.apache.http.HttpHost getTargetHost();
+    method @Deprecated public final boolean isSecure();
+    method @Deprecated public void openCompleted(boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void opening(java.net.Socket, org.apache.http.HttpHost) throws java.io.IOException;
+    method @Deprecated public void update(java.net.Socket, org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException;
+  }
+
+  @Deprecated public class DefaultClientConnectionOperator implements org.apache.http.conn.ClientConnectionOperator {
+    ctor @Deprecated public DefaultClientConnectionOperator(org.apache.http.conn.scheme.SchemeRegistry);
+    method @Deprecated public org.apache.http.conn.OperatedClientConnection createConnection();
+    method @Deprecated public void openConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, java.net.InetAddress, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated protected void prepareSocket(java.net.Socket, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public void updateSecureConnection(org.apache.http.conn.OperatedClientConnection, org.apache.http.HttpHost, org.apache.http.protocol.HttpContext, org.apache.http.params.HttpParams) throws java.io.IOException;
+    field @Deprecated protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry;
+  }
+
+  @Deprecated public class DefaultHttpRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner {
+    ctor @Deprecated public DefaultHttpRoutePlanner(org.apache.http.conn.scheme.SchemeRegistry);
+    method @Deprecated public org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException;
+    field @Deprecated protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry;
+  }
+
+  @Deprecated public class DefaultResponseParser extends org.apache.http.impl.io.AbstractMessageParser {
+    ctor @Deprecated public DefaultResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams);
+    method @Deprecated protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class IdleConnectionHandler {
+    ctor @Deprecated public IdleConnectionHandler();
+    method @Deprecated public void add(org.apache.http.HttpConnection, long, java.util.concurrent.TimeUnit);
+    method @Deprecated public void closeExpiredConnections();
+    method @Deprecated public void closeIdleConnections(long);
+    method @Deprecated public boolean remove(org.apache.http.HttpConnection);
+    method @Deprecated public void removeAll();
+  }
+
+  @Deprecated public class LoggingSessionInputBuffer implements org.apache.http.io.SessionInputBuffer {
+    ctor @Deprecated public LoggingSessionInputBuffer(org.apache.http.io.SessionInputBuffer, org.apache.http.impl.conn.Wire);
+    method @Deprecated public org.apache.http.io.HttpTransportMetrics getMetrics();
+    method @Deprecated public boolean isDataAvailable(int) throws java.io.IOException;
+    method @Deprecated public int read(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public int read() throws java.io.IOException;
+    method @Deprecated public int read(byte[]) throws java.io.IOException;
+    method @Deprecated public String readLine() throws java.io.IOException;
+    method @Deprecated public int readLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException;
+  }
+
+  @Deprecated public class LoggingSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer {
+    ctor @Deprecated public LoggingSessionOutputBuffer(org.apache.http.io.SessionOutputBuffer, org.apache.http.impl.conn.Wire);
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated public org.apache.http.io.HttpTransportMetrics getMetrics();
+    method @Deprecated public void write(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public void write(int) throws java.io.IOException;
+    method @Deprecated public void write(byte[]) throws java.io.IOException;
+    method @Deprecated public void writeLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException;
+    method @Deprecated public void writeLine(String) throws java.io.IOException;
+  }
+
+  @Deprecated public class ProxySelectorRoutePlanner implements org.apache.http.conn.routing.HttpRoutePlanner {
+    ctor @Deprecated public ProxySelectorRoutePlanner(org.apache.http.conn.scheme.SchemeRegistry, java.net.ProxySelector);
+    method @Deprecated protected java.net.Proxy chooseProxy(java.util.List<java.net.Proxy>, org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext);
+    method @Deprecated protected org.apache.http.HttpHost determineProxy(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException;
+    method @Deprecated public org.apache.http.conn.routing.HttpRoute determineRoute(org.apache.http.HttpHost, org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException;
+    method @Deprecated protected String getHost(java.net.InetSocketAddress);
+    method @Deprecated public java.net.ProxySelector getProxySelector();
+    method @Deprecated public void setProxySelector(java.net.ProxySelector);
+    field @Deprecated protected java.net.ProxySelector proxySelector;
+    field @Deprecated protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry;
+  }
+
+  @Deprecated public class SingleClientConnManager implements org.apache.http.conn.ClientConnectionManager {
+    ctor @Deprecated public SingleClientConnManager(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry);
+    method @Deprecated protected final void assertStillUp() throws java.lang.IllegalStateException;
+    method @Deprecated public void closeExpiredConnections();
+    method @Deprecated public void closeIdleConnections(long, java.util.concurrent.TimeUnit);
+    method @Deprecated protected org.apache.http.conn.ClientConnectionOperator createConnectionOperator(org.apache.http.conn.scheme.SchemeRegistry);
+    method @Deprecated public org.apache.http.conn.ManagedClientConnection getConnection(org.apache.http.conn.routing.HttpRoute, Object);
+    method @Deprecated public org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry();
+    method @Deprecated public void releaseConnection(org.apache.http.conn.ManagedClientConnection, long, java.util.concurrent.TimeUnit);
+    method @Deprecated public final org.apache.http.conn.ClientConnectionRequest requestConnection(org.apache.http.conn.routing.HttpRoute, Object);
+    method @Deprecated protected void revokeConnection();
+    method @Deprecated public void shutdown();
+    field @Deprecated public static final String MISUSE_MESSAGE = "Invalid use of SingleClientConnManager: connection still allocated.\nMake sure to release the connection before allocating another one.";
+    field @Deprecated protected boolean alwaysShutDown;
+    field @Deprecated protected org.apache.http.conn.ClientConnectionOperator connOperator;
+    field @Deprecated protected long connectionExpiresTime;
+    field @Deprecated protected volatile boolean isShutDown;
+    field @Deprecated protected long lastReleaseTime;
+    field @Deprecated protected org.apache.http.impl.conn.SingleClientConnManager.ConnAdapter managedConn;
+    field @Deprecated protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry;
+    field @Deprecated protected org.apache.http.impl.conn.SingleClientConnManager.PoolEntry uniquePoolEntry;
+  }
+
+  @Deprecated protected class SingleClientConnManager.ConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter {
+    ctor @Deprecated protected SingleClientConnManager.ConnAdapter(org.apache.http.impl.conn.SingleClientConnManager.PoolEntry, org.apache.http.conn.routing.HttpRoute);
+  }
+
+  @Deprecated protected class SingleClientConnManager.PoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry {
+    ctor @Deprecated protected SingleClientConnManager.PoolEntry();
+    method @Deprecated protected void close() throws java.io.IOException;
+    method @Deprecated protected void shutdown() throws java.io.IOException;
+  }
+
+  @Deprecated public class Wire {
+    ctor @Deprecated public Wire(org.apache.commons.logging.Log);
+    method @Deprecated public boolean enabled();
+    method @Deprecated public void input(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public void input(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public void input(byte[]) throws java.io.IOException;
+    method @Deprecated public void input(int) throws java.io.IOException;
+    method @Deprecated public void input(String) throws java.io.IOException;
+    method @Deprecated public void output(java.io.InputStream) throws java.io.IOException;
+    method @Deprecated public void output(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public void output(byte[]) throws java.io.IOException;
+    method @Deprecated public void output(int) throws java.io.IOException;
+    method @Deprecated public void output(String) throws java.io.IOException;
+  }
+
+}
+
+package org.apache.http.impl.conn.tsccm {
+
+  @Deprecated public abstract class AbstractConnPool implements org.apache.http.impl.conn.tsccm.RefQueueHandler {
+    ctor @Deprecated protected AbstractConnPool();
+    method @Deprecated protected void closeConnection(org.apache.http.conn.OperatedClientConnection);
+    method @Deprecated public void closeExpiredConnections();
+    method @Deprecated public void closeIdleConnections(long, java.util.concurrent.TimeUnit);
+    method @Deprecated public abstract void deleteClosedConnections();
+    method @Deprecated public void enableConnectionGC() throws java.lang.IllegalStateException;
+    method @Deprecated public abstract void freeEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry, boolean, long, java.util.concurrent.TimeUnit);
+    method @Deprecated public final org.apache.http.impl.conn.tsccm.BasicPoolEntry getEntry(org.apache.http.conn.routing.HttpRoute, Object, long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException;
+    method @Deprecated protected abstract void handleLostEntry(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public void handleReference(java.lang.ref.Reference);
+    method @Deprecated public abstract org.apache.http.impl.conn.tsccm.PoolEntryRequest requestPoolEntry(org.apache.http.conn.routing.HttpRoute, Object);
+    method @Deprecated public void shutdown();
+    field @Deprecated protected org.apache.http.impl.conn.IdleConnectionHandler idleConnHandler;
+    field @Deprecated protected volatile boolean isShutDown;
+    field @Deprecated protected java.util.Set<org.apache.http.impl.conn.tsccm.BasicPoolEntryRef> issuedConnections;
+    field @Deprecated protected int numConnections;
+    field @Deprecated protected final java.util.concurrent.locks.Lock poolLock;
+    field @Deprecated protected java.lang.ref.ReferenceQueue<java.lang.Object> refQueue;
+  }
+
+  @Deprecated public class BasicPoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry {
+    ctor @Deprecated public BasicPoolEntry(org.apache.http.conn.ClientConnectionOperator, org.apache.http.conn.routing.HttpRoute, java.lang.ref.ReferenceQueue<java.lang.Object>);
+    method @Deprecated protected final org.apache.http.conn.OperatedClientConnection getConnection();
+    method @Deprecated protected final org.apache.http.conn.routing.HttpRoute getPlannedRoute();
+    method @Deprecated protected final org.apache.http.impl.conn.tsccm.BasicPoolEntryRef getWeakRef();
+  }
+
+  @Deprecated public class BasicPoolEntryRef extends java.lang.ref.WeakReference<org.apache.http.impl.conn.tsccm.BasicPoolEntry> {
+    ctor @Deprecated public BasicPoolEntryRef(org.apache.http.impl.conn.tsccm.BasicPoolEntry, java.lang.ref.ReferenceQueue<java.lang.Object>);
+    method @Deprecated public final org.apache.http.conn.routing.HttpRoute getRoute();
+  }
+
+  @Deprecated public class BasicPooledConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter {
+    ctor @Deprecated protected BasicPooledConnAdapter(org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager, org.apache.http.impl.conn.AbstractPoolEntry);
+    method @Deprecated protected org.apache.http.impl.conn.AbstractPoolEntry getPoolEntry();
+  }
+
+  @Deprecated public class ConnPoolByRoute extends org.apache.http.impl.conn.tsccm.AbstractConnPool {
+    ctor @Deprecated public ConnPoolByRoute(org.apache.http.conn.ClientConnectionOperator, org.apache.http.params.HttpParams);
+    method @Deprecated protected org.apache.http.impl.conn.tsccm.BasicPoolEntry createEntry(org.apache.http.impl.conn.tsccm.RouteSpecificPool, org.apache.http.conn.ClientConnectionOperator);
+    method @Deprecated protected java.util.Queue<org.apache.http.impl.conn.tsccm.BasicPoolEntry> createFreeConnQueue();
+    method @Deprecated protected java.util.Map<org.apache.http.conn.routing.HttpRoute,org.apache.http.impl.conn.tsccm.RouteSpecificPool> createRouteToPoolMap();
+    method @Deprecated protected java.util.Queue<org.apache.http.impl.conn.tsccm.WaitingThread> createWaitingThreadQueue();
+    method @Deprecated public void deleteClosedConnections();
+    method @Deprecated protected void deleteEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry);
+    method @Deprecated protected void deleteLeastUsedEntry();
+    method @Deprecated public void freeEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry, boolean, long, java.util.concurrent.TimeUnit);
+    method @Deprecated public int getConnectionsInPool(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated protected org.apache.http.impl.conn.tsccm.BasicPoolEntry getEntryBlocking(org.apache.http.conn.routing.HttpRoute, Object, long, java.util.concurrent.TimeUnit, org.apache.http.impl.conn.tsccm.WaitingThreadAborter) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException;
+    method @Deprecated protected org.apache.http.impl.conn.tsccm.BasicPoolEntry getFreeEntry(org.apache.http.impl.conn.tsccm.RouteSpecificPool, Object);
+    method @Deprecated protected org.apache.http.impl.conn.tsccm.RouteSpecificPool getRoutePool(org.apache.http.conn.routing.HttpRoute, boolean);
+    method @Deprecated protected void handleLostEntry(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated protected org.apache.http.impl.conn.tsccm.RouteSpecificPool newRouteSpecificPool(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated protected org.apache.http.impl.conn.tsccm.WaitingThread newWaitingThread(java.util.concurrent.locks.Condition, org.apache.http.impl.conn.tsccm.RouteSpecificPool);
+    method @Deprecated protected void notifyWaitingThread(org.apache.http.impl.conn.tsccm.RouteSpecificPool);
+    method @Deprecated public org.apache.http.impl.conn.tsccm.PoolEntryRequest requestPoolEntry(org.apache.http.conn.routing.HttpRoute, Object);
+    field @Deprecated protected java.util.Queue<org.apache.http.impl.conn.tsccm.BasicPoolEntry> freeConnections;
+    field @Deprecated protected final int maxTotalConnections;
+    field @Deprecated protected final org.apache.http.conn.ClientConnectionOperator operator;
+    field @Deprecated protected final java.util.Map<org.apache.http.conn.routing.HttpRoute,org.apache.http.impl.conn.tsccm.RouteSpecificPool> routeToPool;
+    field @Deprecated protected java.util.Queue<org.apache.http.impl.conn.tsccm.WaitingThread> waitingThreads;
+  }
+
+  @Deprecated public interface PoolEntryRequest {
+    method @Deprecated public void abortRequest();
+    method @Deprecated public org.apache.http.impl.conn.tsccm.BasicPoolEntry getPoolEntry(long, java.util.concurrent.TimeUnit) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException;
+  }
+
+  @Deprecated public interface RefQueueHandler {
+    method @Deprecated public void handleReference(java.lang.ref.Reference<?>);
+  }
+
+  @Deprecated public class RefQueueWorker implements java.lang.Runnable {
+    ctor @Deprecated public RefQueueWorker(java.lang.ref.ReferenceQueue<?>, org.apache.http.impl.conn.tsccm.RefQueueHandler);
+    method @Deprecated public void run();
+    method @Deprecated public void shutdown();
+    field @Deprecated protected final org.apache.http.impl.conn.tsccm.RefQueueHandler refHandler;
+    field @Deprecated protected final java.lang.ref.ReferenceQueue<?> refQueue;
+    field @Deprecated protected volatile Thread workerThread;
+  }
+
+  @Deprecated public class RouteSpecificPool {
+    ctor @Deprecated public RouteSpecificPool(org.apache.http.conn.routing.HttpRoute, int);
+    method @Deprecated public org.apache.http.impl.conn.tsccm.BasicPoolEntry allocEntry(Object);
+    method @Deprecated public void createdEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry);
+    method @Deprecated public boolean deleteEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry);
+    method @Deprecated public void dropEntry();
+    method @Deprecated public void freeEntry(org.apache.http.impl.conn.tsccm.BasicPoolEntry);
+    method @Deprecated public int getCapacity();
+    method @Deprecated public final int getEntryCount();
+    method @Deprecated public final int getMaxEntries();
+    method @Deprecated public final org.apache.http.conn.routing.HttpRoute getRoute();
+    method @Deprecated public boolean hasThread();
+    method @Deprecated public boolean isUnused();
+    method @Deprecated public org.apache.http.impl.conn.tsccm.WaitingThread nextThread();
+    method @Deprecated public void queueThread(org.apache.http.impl.conn.tsccm.WaitingThread);
+    method @Deprecated public void removeThread(org.apache.http.impl.conn.tsccm.WaitingThread);
+    field @Deprecated protected final java.util.LinkedList<org.apache.http.impl.conn.tsccm.BasicPoolEntry> freeEntries;
+    field @Deprecated protected final int maxEntries;
+    field @Deprecated protected int numEntries;
+    field @Deprecated protected final org.apache.http.conn.routing.HttpRoute route;
+    field @Deprecated protected final java.util.Queue<org.apache.http.impl.conn.tsccm.WaitingThread> waitingThreads;
+  }
+
+  @Deprecated public class ThreadSafeClientConnManager implements org.apache.http.conn.ClientConnectionManager {
+    ctor @Deprecated public ThreadSafeClientConnManager(org.apache.http.params.HttpParams, org.apache.http.conn.scheme.SchemeRegistry);
+    method @Deprecated public void closeExpiredConnections();
+    method @Deprecated public void closeIdleConnections(long, java.util.concurrent.TimeUnit);
+    method @Deprecated protected org.apache.http.conn.ClientConnectionOperator createConnectionOperator(org.apache.http.conn.scheme.SchemeRegistry);
+    method @Deprecated protected org.apache.http.impl.conn.tsccm.AbstractConnPool createConnectionPool(org.apache.http.params.HttpParams);
+    method @Deprecated public int getConnectionsInPool(org.apache.http.conn.routing.HttpRoute);
+    method @Deprecated public int getConnectionsInPool();
+    method @Deprecated public org.apache.http.conn.scheme.SchemeRegistry getSchemeRegistry();
+    method @Deprecated public void releaseConnection(org.apache.http.conn.ManagedClientConnection, long, java.util.concurrent.TimeUnit);
+    method @Deprecated public org.apache.http.conn.ClientConnectionRequest requestConnection(org.apache.http.conn.routing.HttpRoute, Object);
+    method @Deprecated public void shutdown();
+    field @Deprecated protected org.apache.http.conn.ClientConnectionOperator connOperator;
+    field @Deprecated protected final org.apache.http.impl.conn.tsccm.AbstractConnPool connectionPool;
+    field @Deprecated protected org.apache.http.conn.scheme.SchemeRegistry schemeRegistry;
+  }
+
+  @Deprecated public class WaitingThread {
+    ctor @Deprecated public WaitingThread(java.util.concurrent.locks.Condition, org.apache.http.impl.conn.tsccm.RouteSpecificPool);
+    method @Deprecated public boolean await(java.util.Date) throws java.lang.InterruptedException;
+    method @Deprecated public final java.util.concurrent.locks.Condition getCondition();
+    method @Deprecated public final org.apache.http.impl.conn.tsccm.RouteSpecificPool getPool();
+    method @Deprecated public final Thread getThread();
+    method @Deprecated public void interrupt();
+    method @Deprecated public void wakeup();
+  }
+
+  @Deprecated public class WaitingThreadAborter {
+    ctor @Deprecated public WaitingThreadAborter();
+    method @Deprecated public void abort();
+    method @Deprecated public void setWaitingThread(org.apache.http.impl.conn.tsccm.WaitingThread);
+  }
+
+}
+
+package org.apache.http.impl.cookie {
+
+  @Deprecated public abstract class AbstractCookieAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public AbstractCookieAttributeHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public abstract class AbstractCookieSpec implements org.apache.http.cookie.CookieSpec {
+    ctor @Deprecated public AbstractCookieSpec();
+    method @Deprecated protected org.apache.http.cookie.CookieAttributeHandler findAttribHandler(String);
+    method @Deprecated protected org.apache.http.cookie.CookieAttributeHandler getAttribHandler(String);
+    method @Deprecated protected java.util.Collection<org.apache.http.cookie.CookieAttributeHandler> getAttribHandlers();
+    method @Deprecated public void registerAttribHandler(String, org.apache.http.cookie.CookieAttributeHandler);
+  }
+
+  @Deprecated public class BasicClientCookie implements org.apache.http.cookie.ClientCookie java.lang.Cloneable org.apache.http.cookie.SetCookie {
+    ctor @Deprecated public BasicClientCookie(String, String);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public boolean containsAttribute(String);
+    method @Deprecated public String getAttribute(String);
+    method @Deprecated public String getComment();
+    method @Deprecated public String getCommentURL();
+    method @Deprecated public String getDomain();
+    method @Deprecated public java.util.Date getExpiryDate();
+    method @Deprecated public String getName();
+    method @Deprecated public String getPath();
+    method @Deprecated public int[] getPorts();
+    method @Deprecated public String getValue();
+    method @Deprecated public int getVersion();
+    method @Deprecated public boolean isExpired(java.util.Date);
+    method @Deprecated public boolean isPersistent();
+    method @Deprecated public boolean isSecure();
+    method @Deprecated public void setAttribute(String, String);
+    method @Deprecated public void setComment(String);
+    method @Deprecated public void setDomain(String);
+    method @Deprecated public void setExpiryDate(java.util.Date);
+    method @Deprecated public void setPath(String);
+    method @Deprecated public void setSecure(boolean);
+    method @Deprecated public void setValue(String);
+    method @Deprecated public void setVersion(int);
+  }
+
+  @Deprecated public class BasicClientCookie2 extends org.apache.http.impl.cookie.BasicClientCookie implements org.apache.http.cookie.SetCookie2 {
+    ctor @Deprecated public BasicClientCookie2(String, String);
+    method @Deprecated public void setCommentURL(String);
+    method @Deprecated public void setDiscard(boolean);
+    method @Deprecated public void setPorts(int[]);
+  }
+
+  @Deprecated public class BasicCommentHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler {
+    ctor @Deprecated public BasicCommentHandler();
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class BasicDomainHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public BasicDomainHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class BasicExpiresHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler {
+    ctor @Deprecated public BasicExpiresHandler(String[]);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class BasicMaxAgeHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler {
+    ctor @Deprecated public BasicMaxAgeHandler();
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class BasicPathHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public BasicPathHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class BasicSecureHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler {
+    ctor @Deprecated public BasicSecureHandler();
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class BestMatchSpec implements org.apache.http.cookie.CookieSpec {
+    ctor @Deprecated public BestMatchSpec(String[], boolean);
+    ctor @Deprecated public BestMatchSpec();
+    method @Deprecated public java.util.List<org.apache.http.Header> formatCookies(java.util.List<org.apache.http.cookie.Cookie>);
+    method @Deprecated public int getVersion();
+    method @Deprecated public org.apache.http.Header getVersionHeader();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public java.util.List<org.apache.http.cookie.Cookie> parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class BestMatchSpecFactory implements org.apache.http.cookie.CookieSpecFactory {
+    ctor @Deprecated public BestMatchSpecFactory();
+    method @Deprecated public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public class BrowserCompatSpec extends org.apache.http.impl.cookie.CookieSpecBase {
+    ctor @Deprecated public BrowserCompatSpec(String[]);
+    ctor @Deprecated public BrowserCompatSpec();
+    method @Deprecated public java.util.List<org.apache.http.Header> formatCookies(java.util.List<org.apache.http.cookie.Cookie>);
+    method @Deprecated public int getVersion();
+    method @Deprecated public org.apache.http.Header getVersionHeader();
+    method @Deprecated public java.util.List<org.apache.http.cookie.Cookie> parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+    field @Deprecated protected static final String[] DATE_PATTERNS;
+  }
+
+  @Deprecated public class BrowserCompatSpecFactory implements org.apache.http.cookie.CookieSpecFactory {
+    ctor @Deprecated public BrowserCompatSpecFactory();
+    method @Deprecated public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public abstract class CookieSpecBase extends org.apache.http.impl.cookie.AbstractCookieSpec {
+    ctor @Deprecated public CookieSpecBase();
+    method @Deprecated protected static String getDefaultDomain(org.apache.http.cookie.CookieOrigin);
+    method @Deprecated protected static String getDefaultPath(org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated protected java.util.List<org.apache.http.cookie.Cookie> parse(org.apache.http.HeaderElement[], org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class DateParseException extends java.lang.Exception {
+    ctor @Deprecated public DateParseException();
+    ctor @Deprecated public DateParseException(String);
+  }
+
+  @Deprecated public final class DateUtils {
+    method @Deprecated public static String formatDate(java.util.Date);
+    method @Deprecated public static String formatDate(java.util.Date, String);
+    method @Deprecated public static java.util.Date parseDate(String) throws org.apache.http.impl.cookie.DateParseException;
+    method @Deprecated public static java.util.Date parseDate(String, String[]) throws org.apache.http.impl.cookie.DateParseException;
+    method @Deprecated public static java.util.Date parseDate(String, String[], java.util.Date) throws org.apache.http.impl.cookie.DateParseException;
+    field @Deprecated public static final java.util.TimeZone GMT;
+    field @Deprecated public static final String PATTERN_ASCTIME = "EEE MMM d HH:mm:ss yyyy";
+    field @Deprecated public static final String PATTERN_RFC1036 = "EEEE, dd-MMM-yy HH:mm:ss zzz";
+    field @Deprecated public static final String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz";
+  }
+
+  @Deprecated public class NetscapeDomainHandler extends org.apache.http.impl.cookie.BasicDomainHandler {
+    ctor @Deprecated public NetscapeDomainHandler();
+  }
+
+  @Deprecated public class NetscapeDraftHeaderParser {
+    ctor @Deprecated public NetscapeDraftHeaderParser();
+    method @Deprecated public org.apache.http.HeaderElement parseHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    field @Deprecated public static final org.apache.http.impl.cookie.NetscapeDraftHeaderParser DEFAULT;
+  }
+
+  @Deprecated public class NetscapeDraftSpec extends org.apache.http.impl.cookie.CookieSpecBase {
+    ctor @Deprecated public NetscapeDraftSpec(String[]);
+    ctor @Deprecated public NetscapeDraftSpec();
+    method @Deprecated public java.util.List<org.apache.http.Header> formatCookies(java.util.List<org.apache.http.cookie.Cookie>);
+    method @Deprecated public int getVersion();
+    method @Deprecated public org.apache.http.Header getVersionHeader();
+    method @Deprecated public java.util.List<org.apache.http.cookie.Cookie> parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+    field @Deprecated protected static final String EXPIRES_PATTERN = "EEE, dd-MMM-yyyy HH:mm:ss z";
+  }
+
+  @Deprecated public class NetscapeDraftSpecFactory implements org.apache.http.cookie.CookieSpecFactory {
+    ctor @Deprecated public NetscapeDraftSpecFactory();
+    method @Deprecated public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public class RFC2109DomainHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public RFC2109DomainHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class RFC2109Spec extends org.apache.http.impl.cookie.CookieSpecBase {
+    ctor @Deprecated public RFC2109Spec(String[], boolean);
+    ctor @Deprecated public RFC2109Spec();
+    method @Deprecated protected void formatCookieAsVer(org.apache.http.util.CharArrayBuffer, org.apache.http.cookie.Cookie, int);
+    method @Deprecated public java.util.List<org.apache.http.Header> formatCookies(java.util.List<org.apache.http.cookie.Cookie>);
+    method @Deprecated protected void formatParamAsVer(org.apache.http.util.CharArrayBuffer, String, String, int);
+    method @Deprecated public int getVersion();
+    method @Deprecated public org.apache.http.Header getVersionHeader();
+    method @Deprecated public java.util.List<org.apache.http.cookie.Cookie> parse(org.apache.http.Header, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class RFC2109SpecFactory implements org.apache.http.cookie.CookieSpecFactory {
+    ctor @Deprecated public RFC2109SpecFactory();
+    method @Deprecated public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public class RFC2109VersionHandler extends org.apache.http.impl.cookie.AbstractCookieAttributeHandler {
+    ctor @Deprecated public RFC2109VersionHandler();
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class RFC2965CommentUrlAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public RFC2965CommentUrlAttributeHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class RFC2965DiscardAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public RFC2965DiscardAttributeHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class RFC2965DomainAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public RFC2965DomainAttributeHandler();
+    method @Deprecated public boolean domainMatch(String, String);
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class RFC2965PortAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public RFC2965PortAttributeHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+  @Deprecated public class RFC2965Spec extends org.apache.http.impl.cookie.RFC2109Spec {
+    ctor @Deprecated public RFC2965Spec();
+    ctor @Deprecated public RFC2965Spec(String[], boolean);
+  }
+
+  @Deprecated public class RFC2965SpecFactory implements org.apache.http.cookie.CookieSpecFactory {
+    ctor @Deprecated public RFC2965SpecFactory();
+    method @Deprecated public org.apache.http.cookie.CookieSpec newInstance(org.apache.http.params.HttpParams);
+  }
+
+  @Deprecated public class RFC2965VersionAttributeHandler implements org.apache.http.cookie.CookieAttributeHandler {
+    ctor @Deprecated public RFC2965VersionAttributeHandler();
+    method @Deprecated public boolean match(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin);
+    method @Deprecated public void parse(org.apache.http.cookie.SetCookie, String) throws org.apache.http.cookie.MalformedCookieException;
+    method @Deprecated public void validate(org.apache.http.cookie.Cookie, org.apache.http.cookie.CookieOrigin) throws org.apache.http.cookie.MalformedCookieException;
+  }
+
+}
+
+package org.apache.http.impl.entity {
+
+  @Deprecated public class EntityDeserializer {
+    ctor @Deprecated public EntityDeserializer(org.apache.http.entity.ContentLengthStrategy);
+    method @Deprecated public org.apache.http.HttpEntity deserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected org.apache.http.entity.BasicHttpEntity doDeserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class EntitySerializer {
+    ctor @Deprecated public EntitySerializer(org.apache.http.entity.ContentLengthStrategy);
+    method @Deprecated protected java.io.OutputStream doSerialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void serialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage, org.apache.http.HttpEntity) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class LaxContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy {
+    ctor @Deprecated public LaxContentLengthStrategy();
+    method @Deprecated public long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException;
+  }
+
+  @Deprecated public class StrictContentLengthStrategy implements org.apache.http.entity.ContentLengthStrategy {
+    ctor @Deprecated public StrictContentLengthStrategy();
+    method @Deprecated public long determineLength(org.apache.http.HttpMessage) throws org.apache.http.HttpException;
+  }
+
+}
+
+package org.apache.http.impl.io {
+
+  @Deprecated public abstract class AbstractMessageParser implements org.apache.http.io.HttpMessageParser {
+    ctor @Deprecated public AbstractMessageParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.params.HttpParams);
+    method @Deprecated public org.apache.http.HttpMessage parse() throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected abstract org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException;
+    method @Deprecated public static org.apache.http.Header[] parseHeaders(org.apache.http.io.SessionInputBuffer, int, int, org.apache.http.message.LineParser) throws org.apache.http.HttpException, java.io.IOException;
+    field @Deprecated protected final org.apache.http.message.LineParser lineParser;
+  }
+
+  @Deprecated public abstract class AbstractMessageWriter implements org.apache.http.io.HttpMessageWriter {
+    ctor @Deprecated public AbstractMessageWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams);
+    method @Deprecated public void write(org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected abstract void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException;
+    field @Deprecated protected final org.apache.http.util.CharArrayBuffer lineBuf;
+    field @Deprecated protected final org.apache.http.message.LineFormatter lineFormatter;
+    field @Deprecated protected final org.apache.http.io.SessionOutputBuffer sessionBuffer;
+  }
+
+  @Deprecated public abstract class AbstractSessionInputBuffer implements org.apache.http.io.SessionInputBuffer {
+    ctor @Deprecated public AbstractSessionInputBuffer();
+    method @Deprecated protected int fillBuffer() throws java.io.IOException;
+    method @Deprecated public org.apache.http.io.HttpTransportMetrics getMetrics();
+    method @Deprecated protected boolean hasBufferedData();
+    method @Deprecated protected void init(java.io.InputStream, int, org.apache.http.params.HttpParams);
+    method @Deprecated public int read() throws java.io.IOException;
+    method @Deprecated public int read(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public int read(byte[]) throws java.io.IOException;
+    method @Deprecated public int readLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException;
+    method @Deprecated public String readLine() throws java.io.IOException;
+  }
+
+  @Deprecated public abstract class AbstractSessionOutputBuffer implements org.apache.http.io.SessionOutputBuffer {
+    ctor @Deprecated public AbstractSessionOutputBuffer();
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated protected void flushBuffer() throws java.io.IOException;
+    method @Deprecated public org.apache.http.io.HttpTransportMetrics getMetrics();
+    method @Deprecated protected void init(java.io.OutputStream, int, org.apache.http.params.HttpParams);
+    method @Deprecated public void write(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public void write(byte[]) throws java.io.IOException;
+    method @Deprecated public void write(int) throws java.io.IOException;
+    method @Deprecated public void writeLine(String) throws java.io.IOException;
+    method @Deprecated public void writeLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException;
+  }
+
+  @Deprecated public class ChunkedInputStream extends java.io.InputStream {
+    ctor @Deprecated public ChunkedInputStream(org.apache.http.io.SessionInputBuffer);
+    method @Deprecated public org.apache.http.Header[] getFooters();
+    method @Deprecated public int read() throws java.io.IOException;
+  }
+
+  @Deprecated public class ChunkedOutputStream extends java.io.OutputStream {
+    ctor @Deprecated public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer, int) throws java.io.IOException;
+    ctor @Deprecated public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer) throws java.io.IOException;
+    method @Deprecated public void finish() throws java.io.IOException;
+    method @Deprecated protected void flushCache() throws java.io.IOException;
+    method @Deprecated protected void flushCacheWithAppend(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public void write(int) throws java.io.IOException;
+    method @Deprecated protected void writeClosingChunk() throws java.io.IOException;
+  }
+
+  @Deprecated public class ContentLengthInputStream extends java.io.InputStream {
+    ctor @Deprecated public ContentLengthInputStream(org.apache.http.io.SessionInputBuffer, long);
+    method @Deprecated public int read() throws java.io.IOException;
+  }
+
+  @Deprecated public class ContentLengthOutputStream extends java.io.OutputStream {
+    ctor @Deprecated public ContentLengthOutputStream(org.apache.http.io.SessionOutputBuffer, long);
+    method @Deprecated public void write(int) throws java.io.IOException;
+  }
+
+  @Deprecated public class HttpRequestParser extends org.apache.http.impl.io.AbstractMessageParser {
+    ctor @Deprecated public HttpRequestParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams);
+    method @Deprecated protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException;
+  }
+
+  @Deprecated public class HttpRequestWriter extends org.apache.http.impl.io.AbstractMessageWriter {
+    ctor @Deprecated public HttpRequestWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams);
+    method @Deprecated protected void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException;
+  }
+
+  @Deprecated public class HttpResponseParser extends org.apache.http.impl.io.AbstractMessageParser {
+    ctor @Deprecated public HttpResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams);
+    method @Deprecated protected org.apache.http.HttpMessage parseHead(org.apache.http.io.SessionInputBuffer) throws org.apache.http.HttpException, java.io.IOException, org.apache.http.ParseException;
+  }
+
+  @Deprecated public class HttpResponseWriter extends org.apache.http.impl.io.AbstractMessageWriter {
+    ctor @Deprecated public HttpResponseWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.message.LineFormatter, org.apache.http.params.HttpParams);
+    method @Deprecated protected void writeHeadLine(org.apache.http.HttpMessage) throws java.io.IOException;
+  }
+
+  @Deprecated public class HttpTransportMetricsImpl implements org.apache.http.io.HttpTransportMetrics {
+    ctor @Deprecated public HttpTransportMetricsImpl();
+    method @Deprecated public long getBytesTransferred();
+    method @Deprecated public void incrementBytesTransferred(long);
+    method @Deprecated public void reset();
+    method @Deprecated public void setBytesTransferred(long);
+  }
+
+  @Deprecated public class IdentityInputStream extends java.io.InputStream {
+    ctor @Deprecated public IdentityInputStream(org.apache.http.io.SessionInputBuffer);
+    method @Deprecated public int read() throws java.io.IOException;
+  }
+
+  @Deprecated public class IdentityOutputStream extends java.io.OutputStream {
+    ctor @Deprecated public IdentityOutputStream(org.apache.http.io.SessionOutputBuffer);
+    method @Deprecated public void write(int) throws java.io.IOException;
+  }
+
+  @Deprecated public class SocketInputBuffer extends org.apache.http.impl.io.AbstractSessionInputBuffer {
+    ctor @Deprecated public SocketInputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+    method @Deprecated public boolean isDataAvailable(int) throws java.io.IOException;
+    method @Deprecated public boolean isStale() throws java.io.IOException;
+  }
+
+  @Deprecated public class SocketOutputBuffer extends org.apache.http.impl.io.AbstractSessionOutputBuffer {
+    ctor @Deprecated public SocketOutputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException;
+  }
+
+}
+
+package org.apache.http.io {
+
+  @Deprecated public interface HttpMessageParser {
+    method @Deprecated public org.apache.http.HttpMessage parse() throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface HttpMessageWriter {
+    method @Deprecated public void write(org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface HttpTransportMetrics {
+    method @Deprecated public long getBytesTransferred();
+    method @Deprecated public void reset();
+  }
+
+  @Deprecated public interface SessionInputBuffer {
+    method @Deprecated public org.apache.http.io.HttpTransportMetrics getMetrics();
+    method @Deprecated public boolean isDataAvailable(int) throws java.io.IOException;
+    method @Deprecated public int read(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public int read(byte[]) throws java.io.IOException;
+    method @Deprecated public int read() throws java.io.IOException;
+    method @Deprecated public int readLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException;
+    method @Deprecated public String readLine() throws java.io.IOException;
+  }
+
+  @Deprecated public interface SessionOutputBuffer {
+    method @Deprecated public void flush() throws java.io.IOException;
+    method @Deprecated public org.apache.http.io.HttpTransportMetrics getMetrics();
+    method @Deprecated public void write(byte[], int, int) throws java.io.IOException;
+    method @Deprecated public void write(byte[]) throws java.io.IOException;
+    method @Deprecated public void write(int) throws java.io.IOException;
+    method @Deprecated public void writeLine(String) throws java.io.IOException;
+    method @Deprecated public void writeLine(org.apache.http.util.CharArrayBuffer) throws java.io.IOException;
+  }
+
+}
+
+package org.apache.http.message {
+
+  @Deprecated public abstract class AbstractHttpMessage implements org.apache.http.HttpMessage {
+    ctor @Deprecated protected AbstractHttpMessage(org.apache.http.params.HttpParams);
+    ctor @Deprecated protected AbstractHttpMessage();
+    method @Deprecated public void addHeader(org.apache.http.Header);
+    method @Deprecated public void addHeader(String, String);
+    method @Deprecated public boolean containsHeader(String);
+    method @Deprecated public org.apache.http.Header[] getAllHeaders();
+    method @Deprecated public org.apache.http.Header getFirstHeader(String);
+    method @Deprecated public org.apache.http.Header[] getHeaders(String);
+    method @Deprecated public org.apache.http.Header getLastHeader(String);
+    method @Deprecated public org.apache.http.params.HttpParams getParams();
+    method @Deprecated public org.apache.http.HeaderIterator headerIterator();
+    method @Deprecated public org.apache.http.HeaderIterator headerIterator(String);
+    method @Deprecated public void removeHeader(org.apache.http.Header);
+    method @Deprecated public void removeHeaders(String);
+    method @Deprecated public void setHeader(org.apache.http.Header);
+    method @Deprecated public void setHeader(String, String);
+    method @Deprecated public void setHeaders(org.apache.http.Header[]);
+    method @Deprecated public void setParams(org.apache.http.params.HttpParams);
+    field @Deprecated protected org.apache.http.message.HeaderGroup headergroup;
+    field @Deprecated protected org.apache.http.params.HttpParams params;
+  }
+
+  @Deprecated public class BasicHeader implements java.lang.Cloneable org.apache.http.Header {
+    ctor @Deprecated public BasicHeader(String, String);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException;
+    method @Deprecated public String getName();
+    method @Deprecated public String getValue();
+  }
+
+  @Deprecated public class BasicHeaderElement implements java.lang.Cloneable org.apache.http.HeaderElement {
+    ctor @Deprecated public BasicHeaderElement(String, String, org.apache.http.NameValuePair[]);
+    ctor @Deprecated public BasicHeaderElement(String, String);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public String getName();
+    method @Deprecated public org.apache.http.NameValuePair getParameter(int);
+    method @Deprecated public org.apache.http.NameValuePair getParameterByName(String);
+    method @Deprecated public int getParameterCount();
+    method @Deprecated public org.apache.http.NameValuePair[] getParameters();
+    method @Deprecated public String getValue();
+  }
+
+  @Deprecated public class BasicHeaderElementIterator implements org.apache.http.HeaderElementIterator {
+    ctor @Deprecated public BasicHeaderElementIterator(org.apache.http.HeaderIterator, org.apache.http.message.HeaderValueParser);
+    ctor @Deprecated public BasicHeaderElementIterator(org.apache.http.HeaderIterator);
+    method @Deprecated public boolean hasNext();
+    method @Deprecated public final Object next() throws java.util.NoSuchElementException;
+    method @Deprecated public org.apache.http.HeaderElement nextElement() throws java.util.NoSuchElementException;
+    method @Deprecated public void remove() throws java.lang.UnsupportedOperationException;
+  }
+
+  @Deprecated public class BasicHeaderIterator implements org.apache.http.HeaderIterator {
+    ctor @Deprecated public BasicHeaderIterator(org.apache.http.Header[], String);
+    method @Deprecated protected boolean filterHeader(int);
+    method @Deprecated protected int findNext(int);
+    method @Deprecated public boolean hasNext();
+    method @Deprecated public final Object next() throws java.util.NoSuchElementException;
+    method @Deprecated public org.apache.http.Header nextHeader() throws java.util.NoSuchElementException;
+    method @Deprecated public void remove() throws java.lang.UnsupportedOperationException;
+    field @Deprecated protected final org.apache.http.Header[] allHeaders;
+    field @Deprecated protected int currentIndex;
+    field @Deprecated protected String headerName;
+  }
+
+  @Deprecated public class BasicHeaderValueFormatter implements org.apache.http.message.HeaderValueFormatter {
+    ctor @Deprecated public BasicHeaderValueFormatter();
+    method @Deprecated protected void doFormatValue(org.apache.http.util.CharArrayBuffer, String, boolean);
+    method @Deprecated protected int estimateElementsLen(org.apache.http.HeaderElement[]);
+    method @Deprecated protected int estimateHeaderElementLen(org.apache.http.HeaderElement);
+    method @Deprecated protected int estimateNameValuePairLen(org.apache.http.NameValuePair);
+    method @Deprecated protected int estimateParametersLen(org.apache.http.NameValuePair[]);
+    method @Deprecated public static final String formatElements(org.apache.http.HeaderElement[], boolean, org.apache.http.message.HeaderValueFormatter);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatElements(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement[], boolean);
+    method @Deprecated public static final String formatHeaderElement(org.apache.http.HeaderElement, boolean, org.apache.http.message.HeaderValueFormatter);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement, boolean);
+    method @Deprecated public static final String formatNameValuePair(org.apache.http.NameValuePair, boolean, org.apache.http.message.HeaderValueFormatter);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair, boolean);
+    method @Deprecated public static final String formatParameters(org.apache.http.NameValuePair[], boolean, org.apache.http.message.HeaderValueFormatter);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair[], boolean);
+    method @Deprecated protected boolean isSeparator(char);
+    method @Deprecated protected boolean isUnsafe(char);
+    field @Deprecated public static final org.apache.http.message.BasicHeaderValueFormatter DEFAULT;
+    field @Deprecated public static final String SEPARATORS = " ;,:@()<>\\\"/[]?={}\t";
+    field @Deprecated public static final String UNSAFE_CHARS = "\"\\";
+  }
+
+  @Deprecated public class BasicHeaderValueParser implements org.apache.http.message.HeaderValueParser {
+    ctor @Deprecated public BasicHeaderValueParser();
+    method @Deprecated protected org.apache.http.HeaderElement createHeaderElement(String, String, org.apache.http.NameValuePair[]);
+    method @Deprecated protected org.apache.http.NameValuePair createNameValuePair(String, String);
+    method @Deprecated public static final org.apache.http.HeaderElement[] parseElements(String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor);
+    method @Deprecated public static final org.apache.http.HeaderElement parseHeaderElement(String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor);
+    method @Deprecated public static final org.apache.http.NameValuePair parseNameValuePair(String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor);
+    method @Deprecated public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor, char[]);
+    method @Deprecated public static final org.apache.http.NameValuePair[] parseParameters(String, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor);
+    field @Deprecated public static final org.apache.http.message.BasicHeaderValueParser DEFAULT;
+  }
+
+  @Deprecated public class BasicHttpEntityEnclosingRequest extends org.apache.http.message.BasicHttpRequest implements org.apache.http.HttpEntityEnclosingRequest {
+    ctor @Deprecated public BasicHttpEntityEnclosingRequest(String, String);
+    ctor @Deprecated public BasicHttpEntityEnclosingRequest(String, String, org.apache.http.ProtocolVersion);
+    ctor @Deprecated public BasicHttpEntityEnclosingRequest(org.apache.http.RequestLine);
+    method @Deprecated public boolean expectContinue();
+    method @Deprecated public org.apache.http.HttpEntity getEntity();
+    method @Deprecated public void setEntity(org.apache.http.HttpEntity);
+  }
+
+  @Deprecated public class BasicHttpRequest extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpRequest {
+    ctor @Deprecated public BasicHttpRequest(String, String);
+    ctor @Deprecated public BasicHttpRequest(String, String, org.apache.http.ProtocolVersion);
+    ctor @Deprecated public BasicHttpRequest(org.apache.http.RequestLine);
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public org.apache.http.RequestLine getRequestLine();
+  }
+
+  @Deprecated public class BasicHttpResponse extends org.apache.http.message.AbstractHttpMessage implements org.apache.http.HttpResponse {
+    ctor @Deprecated public BasicHttpResponse(org.apache.http.StatusLine, org.apache.http.ReasonPhraseCatalog, java.util.Locale);
+    ctor @Deprecated public BasicHttpResponse(org.apache.http.StatusLine);
+    ctor @Deprecated public BasicHttpResponse(org.apache.http.ProtocolVersion, int, String);
+    method @Deprecated public org.apache.http.HttpEntity getEntity();
+    method @Deprecated public java.util.Locale getLocale();
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated protected String getReason(int);
+    method @Deprecated public org.apache.http.StatusLine getStatusLine();
+    method @Deprecated public void setEntity(org.apache.http.HttpEntity);
+    method @Deprecated public void setLocale(java.util.Locale);
+    method @Deprecated public void setReasonPhrase(String);
+    method @Deprecated public void setStatusCode(int);
+    method @Deprecated public void setStatusLine(org.apache.http.StatusLine);
+    method @Deprecated public void setStatusLine(org.apache.http.ProtocolVersion, int);
+    method @Deprecated public void setStatusLine(org.apache.http.ProtocolVersion, int, String);
+  }
+
+  @Deprecated public class BasicLineFormatter implements org.apache.http.message.LineFormatter {
+    ctor @Deprecated public BasicLineFormatter();
+    method @Deprecated public org.apache.http.util.CharArrayBuffer appendProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.ProtocolVersion);
+    method @Deprecated protected void doFormatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header);
+    method @Deprecated protected void doFormatRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine);
+    method @Deprecated protected void doFormatStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine);
+    method @Deprecated protected int estimateProtocolVersionLen(org.apache.http.ProtocolVersion);
+    method @Deprecated public static final String formatHeader(org.apache.http.Header, org.apache.http.message.LineFormatter);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header);
+    method @Deprecated public static final String formatProtocolVersion(org.apache.http.ProtocolVersion, org.apache.http.message.LineFormatter);
+    method @Deprecated public static final String formatRequestLine(org.apache.http.RequestLine, org.apache.http.message.LineFormatter);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine);
+    method @Deprecated public static final String formatStatusLine(org.apache.http.StatusLine, org.apache.http.message.LineFormatter);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine);
+    method @Deprecated protected org.apache.http.util.CharArrayBuffer initBuffer(org.apache.http.util.CharArrayBuffer);
+    field @Deprecated public static final org.apache.http.message.BasicLineFormatter DEFAULT;
+  }
+
+  @Deprecated public class BasicLineParser implements org.apache.http.message.LineParser {
+    ctor @Deprecated public BasicLineParser(org.apache.http.ProtocolVersion);
+    ctor @Deprecated public BasicLineParser();
+    method @Deprecated protected org.apache.http.ProtocolVersion createProtocolVersion(int, int);
+    method @Deprecated protected org.apache.http.RequestLine createRequestLine(String, String, org.apache.http.ProtocolVersion);
+    method @Deprecated protected org.apache.http.StatusLine createStatusLine(org.apache.http.ProtocolVersion, int, String);
+    method @Deprecated public boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor);
+    method @Deprecated public static final org.apache.http.Header parseHeader(String, org.apache.http.message.LineParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.Header parseHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException;
+    method @Deprecated public static final org.apache.http.ProtocolVersion parseProtocolVersion(String, org.apache.http.message.LineParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated public static final org.apache.http.RequestLine parseRequestLine(String, org.apache.http.message.LineParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated public static final org.apache.http.StatusLine parseStatusLine(String, org.apache.http.message.LineParser) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated protected void skipWhitespace(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor);
+    field @Deprecated public static final org.apache.http.message.BasicLineParser DEFAULT;
+    field @Deprecated protected final org.apache.http.ProtocolVersion protocol;
+  }
+
+  @Deprecated public class BasicListHeaderIterator implements org.apache.http.HeaderIterator {
+    ctor @Deprecated public BasicListHeaderIterator(java.util.List, String);
+    method @Deprecated protected boolean filterHeader(int);
+    method @Deprecated protected int findNext(int);
+    method @Deprecated public boolean hasNext();
+    method @Deprecated public final Object next() throws java.util.NoSuchElementException;
+    method @Deprecated public org.apache.http.Header nextHeader() throws java.util.NoSuchElementException;
+    method @Deprecated public void remove() throws java.lang.UnsupportedOperationException;
+    field @Deprecated protected final java.util.List allHeaders;
+    field @Deprecated protected int currentIndex;
+    field @Deprecated protected String headerName;
+    field @Deprecated protected int lastIndex;
+  }
+
+  @Deprecated public class BasicNameValuePair implements java.lang.Cloneable org.apache.http.NameValuePair {
+    ctor @Deprecated public BasicNameValuePair(String, String);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public String getName();
+    method @Deprecated public String getValue();
+  }
+
+  @Deprecated public class BasicRequestLine implements java.lang.Cloneable org.apache.http.RequestLine {
+    ctor @Deprecated public BasicRequestLine(String, String, org.apache.http.ProtocolVersion);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public String getMethod();
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public String getUri();
+  }
+
+  @Deprecated public class BasicStatusLine implements java.lang.Cloneable org.apache.http.StatusLine {
+    ctor @Deprecated public BasicStatusLine(org.apache.http.ProtocolVersion, int, String);
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public org.apache.http.ProtocolVersion getProtocolVersion();
+    method @Deprecated public String getReasonPhrase();
+    method @Deprecated public int getStatusCode();
+  }
+
+  @Deprecated public class BasicTokenIterator implements org.apache.http.TokenIterator {
+    ctor @Deprecated public BasicTokenIterator(org.apache.http.HeaderIterator);
+    method @Deprecated protected String createToken(String, int, int);
+    method @Deprecated protected int findNext(int) throws org.apache.http.ParseException;
+    method @Deprecated protected int findTokenEnd(int);
+    method @Deprecated protected int findTokenSeparator(int);
+    method @Deprecated protected int findTokenStart(int);
+    method @Deprecated public boolean hasNext();
+    method @Deprecated protected boolean isHttpSeparator(char);
+    method @Deprecated protected boolean isTokenChar(char);
+    method @Deprecated protected boolean isTokenSeparator(char);
+    method @Deprecated protected boolean isWhitespace(char);
+    method @Deprecated public final Object next() throws java.util.NoSuchElementException, org.apache.http.ParseException;
+    method @Deprecated public String nextToken() throws java.util.NoSuchElementException, org.apache.http.ParseException;
+    method @Deprecated public final void remove() throws java.lang.UnsupportedOperationException;
+    field @Deprecated public static final String HTTP_SEPARATORS = " ,;=()<>@:\\\"/[]?{}\t";
+    field @Deprecated protected String currentHeader;
+    field @Deprecated protected String currentToken;
+    field @Deprecated protected final org.apache.http.HeaderIterator headerIt;
+    field @Deprecated protected int searchPos;
+  }
+
+  @Deprecated public class BufferedHeader implements java.lang.Cloneable org.apache.http.FormattedHeader {
+    ctor @Deprecated public BufferedHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException;
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public org.apache.http.util.CharArrayBuffer getBuffer();
+    method @Deprecated public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException;
+    method @Deprecated public String getName();
+    method @Deprecated public String getValue();
+    method @Deprecated public int getValuePos();
+  }
+
+  @Deprecated public class HeaderGroup implements java.lang.Cloneable {
+    ctor @Deprecated public HeaderGroup();
+    method @Deprecated public void addHeader(org.apache.http.Header);
+    method @Deprecated public void clear();
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public boolean containsHeader(String);
+    method @Deprecated public org.apache.http.message.HeaderGroup copy();
+    method @Deprecated public org.apache.http.Header[] getAllHeaders();
+    method @Deprecated public org.apache.http.Header getCondensedHeader(String);
+    method @Deprecated public org.apache.http.Header getFirstHeader(String);
+    method @Deprecated public org.apache.http.Header[] getHeaders(String);
+    method @Deprecated public org.apache.http.Header getLastHeader(String);
+    method @Deprecated public org.apache.http.HeaderIterator iterator();
+    method @Deprecated public org.apache.http.HeaderIterator iterator(String);
+    method @Deprecated public void removeHeader(org.apache.http.Header);
+    method @Deprecated public void setHeaders(org.apache.http.Header[]);
+    method @Deprecated public void updateHeader(org.apache.http.Header);
+  }
+
+  @Deprecated public interface HeaderValueFormatter {
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatElements(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement[], boolean);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement, boolean);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair, boolean);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair[], boolean);
+  }
+
+  @Deprecated public interface HeaderValueParser {
+    method @Deprecated public org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+  }
+
+  @Deprecated public interface LineFormatter {
+    method @Deprecated public org.apache.http.util.CharArrayBuffer appendProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.ProtocolVersion);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.Header);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine);
+    method @Deprecated public org.apache.http.util.CharArrayBuffer formatStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine);
+  }
+
+  @Deprecated public interface LineParser {
+    method @Deprecated public boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor);
+    method @Deprecated public org.apache.http.Header parseHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+    method @Deprecated public org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException;
+  }
+
+  @Deprecated public class ParserCursor {
+    ctor @Deprecated public ParserCursor(int, int);
+    method @Deprecated public boolean atEnd();
+    method @Deprecated public int getLowerBound();
+    method @Deprecated public int getPos();
+    method @Deprecated public int getUpperBound();
+    method @Deprecated public void updatePos(int);
+  }
+
+}
+
+package org.apache.http.params {
+
+  @Deprecated public abstract class AbstractHttpParams implements org.apache.http.params.HttpParams {
+    ctor @Deprecated protected AbstractHttpParams();
+    method @Deprecated public boolean getBooleanParameter(String, boolean);
+    method @Deprecated public double getDoubleParameter(String, double);
+    method @Deprecated public int getIntParameter(String, int);
+    method @Deprecated public long getLongParameter(String, long);
+    method @Deprecated public boolean isParameterFalse(String);
+    method @Deprecated public boolean isParameterTrue(String);
+    method @Deprecated public org.apache.http.params.HttpParams setBooleanParameter(String, boolean);
+    method @Deprecated public org.apache.http.params.HttpParams setDoubleParameter(String, double);
+    method @Deprecated public org.apache.http.params.HttpParams setIntParameter(String, int);
+    method @Deprecated public org.apache.http.params.HttpParams setLongParameter(String, long);
+  }
+
+  @Deprecated public final class BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements java.lang.Cloneable java.io.Serializable {
+    ctor @Deprecated public BasicHttpParams();
+    method @Deprecated public void clear();
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public org.apache.http.params.HttpParams copy();
+    method @Deprecated protected void copyParams(org.apache.http.params.HttpParams);
+    method @Deprecated public Object getParameter(String);
+    method @Deprecated public boolean isParameterSet(String);
+    method @Deprecated public boolean isParameterSetLocally(String);
+    method @Deprecated public boolean removeParameter(String);
+    method @Deprecated public org.apache.http.params.HttpParams setParameter(String, Object);
+    method @Deprecated public void setParameters(String[], Object);
+  }
+
+  @Deprecated public interface CoreProtocolPNames {
+    field @Deprecated public static final String HTTP_CONTENT_CHARSET = "http.protocol.content-charset";
+    field @Deprecated public static final String HTTP_ELEMENT_CHARSET = "http.protocol.element-charset";
+    field @Deprecated public static final String ORIGIN_SERVER = "http.origin-server";
+    field @Deprecated public static final String PROTOCOL_VERSION = "http.protocol.version";
+    field @Deprecated public static final String STRICT_TRANSFER_ENCODING = "http.protocol.strict-transfer-encoding";
+    field @Deprecated public static final String USER_AGENT = "http.useragent";
+    field @Deprecated public static final String USE_EXPECT_CONTINUE = "http.protocol.expect-continue";
+    field @Deprecated public static final String WAIT_FOR_CONTINUE = "http.protocol.wait-for-continue";
+  }
+
+  @Deprecated public final class DefaultedHttpParams extends org.apache.http.params.AbstractHttpParams {
+    ctor @Deprecated public DefaultedHttpParams(org.apache.http.params.HttpParams, org.apache.http.params.HttpParams);
+    method @Deprecated public org.apache.http.params.HttpParams copy();
+    method @Deprecated public org.apache.http.params.HttpParams getDefaults();
+    method @Deprecated public Object getParameter(String);
+    method @Deprecated public boolean removeParameter(String);
+    method @Deprecated public org.apache.http.params.HttpParams setParameter(String, Object);
+  }
+
+  @Deprecated public abstract class HttpAbstractParamBean {
+    ctor @Deprecated public HttpAbstractParamBean(org.apache.http.params.HttpParams);
+    field @Deprecated protected final org.apache.http.params.HttpParams params;
+  }
+
+  @Deprecated public class HttpConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public HttpConnectionParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setConnectionTimeout(int);
+    method @Deprecated public void setLinger(int);
+    method @Deprecated public void setSoTimeout(int);
+    method @Deprecated public void setSocketBufferSize(int);
+    method @Deprecated public void setStaleCheckingEnabled(boolean);
+    method @Deprecated public void setTcpNoDelay(boolean);
+  }
+
+  @Deprecated public class HttpProtocolParamBean extends org.apache.http.params.HttpAbstractParamBean {
+    ctor @Deprecated public HttpProtocolParamBean(org.apache.http.params.HttpParams);
+    method @Deprecated public void setContentCharset(String);
+    method @Deprecated public void setHttpElementCharset(String);
+    method @Deprecated public void setUseExpectContinue(boolean);
+    method @Deprecated public void setUserAgent(String);
+    method @Deprecated public void setVersion(org.apache.http.HttpVersion);
+  }
+
+  @Deprecated public final class HttpProtocolParams implements org.apache.http.params.CoreProtocolPNames {
+    method @Deprecated public static String getContentCharset(org.apache.http.params.HttpParams);
+    method @Deprecated public static String getHttpElementCharset(org.apache.http.params.HttpParams);
+    method @Deprecated public static String getUserAgent(org.apache.http.params.HttpParams);
+    method @Deprecated public static org.apache.http.ProtocolVersion getVersion(org.apache.http.params.HttpParams);
+    method @Deprecated public static void setContentCharset(org.apache.http.params.HttpParams, String);
+    method @Deprecated public static void setHttpElementCharset(org.apache.http.params.HttpParams, String);
+    method @Deprecated public static void setUseExpectContinue(org.apache.http.params.HttpParams, boolean);
+    method @Deprecated public static void setUserAgent(org.apache.http.params.HttpParams, String);
+    method @Deprecated public static void setVersion(org.apache.http.params.HttpParams, org.apache.http.ProtocolVersion);
+    method @Deprecated public static boolean useExpectContinue(org.apache.http.params.HttpParams);
+  }
+
+}
+
+package org.apache.http.protocol {
+
+  @Deprecated public class BasicHttpContext implements org.apache.http.protocol.HttpContext {
+    ctor @Deprecated public BasicHttpContext();
+    ctor @Deprecated public BasicHttpContext(org.apache.http.protocol.HttpContext);
+    method @Deprecated public Object getAttribute(String);
+    method @Deprecated public Object removeAttribute(String);
+    method @Deprecated public void setAttribute(String, Object);
+  }
+
+  @Deprecated public final class BasicHttpProcessor implements java.lang.Cloneable org.apache.http.protocol.HttpProcessor org.apache.http.protocol.HttpRequestInterceptorList org.apache.http.protocol.HttpResponseInterceptorList {
+    ctor @Deprecated public BasicHttpProcessor();
+    method @Deprecated public void addInterceptor(org.apache.http.HttpRequestInterceptor);
+    method @Deprecated public void addInterceptor(org.apache.http.HttpRequestInterceptor, int);
+    method @Deprecated public void addInterceptor(org.apache.http.HttpResponseInterceptor);
+    method @Deprecated public void addInterceptor(org.apache.http.HttpResponseInterceptor, int);
+    method @Deprecated public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor);
+    method @Deprecated public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int);
+    method @Deprecated public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int);
+    method @Deprecated public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor);
+    method @Deprecated public void clearInterceptors();
+    method @Deprecated public void clearRequestInterceptors();
+    method @Deprecated public void clearResponseInterceptors();
+    method @Deprecated public Object clone() throws java.lang.CloneNotSupportedException;
+    method @Deprecated public org.apache.http.protocol.BasicHttpProcessor copy();
+    method @Deprecated protected void copyInterceptors(org.apache.http.protocol.BasicHttpProcessor);
+    method @Deprecated public org.apache.http.HttpRequestInterceptor getRequestInterceptor(int);
+    method @Deprecated public int getRequestInterceptorCount();
+    method @Deprecated public org.apache.http.HttpResponseInterceptor getResponseInterceptor(int);
+    method @Deprecated public int getResponseInterceptorCount();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void removeRequestInterceptorByClass(Class);
+    method @Deprecated public void removeResponseInterceptorByClass(Class);
+    method @Deprecated public void setInterceptors(java.util.List);
+    field @Deprecated protected java.util.List requestInterceptors;
+    field @Deprecated protected java.util.List responseInterceptors;
+  }
+
+  @Deprecated public final class DefaultedHttpContext implements org.apache.http.protocol.HttpContext {
+    ctor @Deprecated public DefaultedHttpContext(org.apache.http.protocol.HttpContext, org.apache.http.protocol.HttpContext);
+    method @Deprecated public Object getAttribute(String);
+    method @Deprecated public org.apache.http.protocol.HttpContext getDefaults();
+    method @Deprecated public Object removeAttribute(String);
+    method @Deprecated public void setAttribute(String, Object);
+  }
+
+  @Deprecated public interface ExecutionContext {
+    field @Deprecated public static final String HTTP_CONNECTION = "http.connection";
+    field @Deprecated public static final String HTTP_PROXY_HOST = "http.proxy_host";
+    field @Deprecated public static final String HTTP_REQUEST = "http.request";
+    field @Deprecated public static final String HTTP_REQ_SENT = "http.request_sent";
+    field @Deprecated public static final String HTTP_RESPONSE = "http.response";
+    field @Deprecated public static final String HTTP_TARGET_HOST = "http.target_host";
+  }
+
+  @Deprecated public final class HTTP {
+    method @Deprecated public static boolean isWhitespace(char);
+    field @Deprecated public static final String ASCII = "ASCII";
+    field @Deprecated public static final String CHARSET_PARAM = "; charset=";
+    field @Deprecated public static final String CHUNK_CODING = "chunked";
+    field @Deprecated public static final String CONN_CLOSE = "Close";
+    field @Deprecated public static final String CONN_DIRECTIVE = "Connection";
+    field @Deprecated public static final String CONN_KEEP_ALIVE = "Keep-Alive";
+    field @Deprecated public static final String CONTENT_ENCODING = "Content-Encoding";
+    field @Deprecated public static final String CONTENT_LEN = "Content-Length";
+    field @Deprecated public static final String CONTENT_TYPE = "Content-Type";
+    field @Deprecated public static final int CR = 13; // 0xd
+    field @Deprecated public static final String DATE_HEADER = "Date";
+    field @Deprecated public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1";
+    field @Deprecated public static final String DEFAULT_CONTENT_TYPE = "application/octet-stream";
+    field @Deprecated public static final String DEFAULT_PROTOCOL_CHARSET = "US-ASCII";
+    field @Deprecated public static final String EXPECT_CONTINUE = "100-continue";
+    field @Deprecated public static final String EXPECT_DIRECTIVE = "Expect";
+    field @Deprecated public static final int HT = 9; // 0x9
+    field @Deprecated public static final String IDENTITY_CODING = "identity";
+    field @Deprecated public static final String ISO_8859_1 = "ISO-8859-1";
+    field @Deprecated public static final int LF = 10; // 0xa
+    field @Deprecated public static final String OCTET_STREAM_TYPE = "application/octet-stream";
+    field @Deprecated public static final String PLAIN_TEXT_TYPE = "text/plain";
+    field @Deprecated public static final String SERVER_HEADER = "Server";
+    field @Deprecated public static final int SP = 32; // 0x20
+    field @Deprecated public static final String TARGET_HOST = "Host";
+    field @Deprecated public static final String TRANSFER_ENCODING = "Transfer-Encoding";
+    field @Deprecated public static final String USER_AGENT = "User-Agent";
+    field @Deprecated public static final String US_ASCII = "US-ASCII";
+    field @Deprecated public static final String UTF_16 = "UTF-16";
+    field @Deprecated public static final String UTF_8 = "UTF-8";
+  }
+
+  @Deprecated public interface HttpContext {
+    method @Deprecated public Object getAttribute(String);
+    method @Deprecated public Object removeAttribute(String);
+    method @Deprecated public void setAttribute(String, Object);
+    field @Deprecated public static final String RESERVED_PREFIX = "http.";
+  }
+
+  @Deprecated public class HttpDateGenerator {
+    ctor @Deprecated public HttpDateGenerator();
+    method @Deprecated public String getCurrentDate();
+    field @Deprecated public static final java.util.TimeZone GMT;
+    field @Deprecated public static final String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz";
+  }
+
+  @Deprecated public interface HttpExpectationVerifier {
+    method @Deprecated public void verify(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException;
+  }
+
+  @Deprecated public interface HttpProcessor extends org.apache.http.HttpRequestInterceptor org.apache.http.HttpResponseInterceptor {
+  }
+
+  @Deprecated public class HttpRequestExecutor {
+    ctor @Deprecated public HttpRequestExecutor();
+    method @Deprecated protected boolean canResponseHaveBody(org.apache.http.HttpRequest, org.apache.http.HttpResponse);
+    method @Deprecated protected org.apache.http.HttpResponse doReceiveResponse(org.apache.http.HttpRequest, org.apache.http.HttpClientConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated protected org.apache.http.HttpResponse doSendRequest(org.apache.http.HttpRequest, org.apache.http.HttpClientConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.HttpResponse execute(org.apache.http.HttpRequest, org.apache.http.HttpClientConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void postProcess(org.apache.http.HttpResponse, org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void preProcess(org.apache.http.HttpRequest, org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public interface HttpRequestHandler {
+    method @Deprecated public void handle(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class HttpRequestHandlerRegistry implements org.apache.http.protocol.HttpRequestHandlerResolver {
+    ctor @Deprecated public HttpRequestHandlerRegistry();
+    method @Deprecated public org.apache.http.protocol.HttpRequestHandler lookup(String);
+    method @Deprecated protected boolean matchUriRequestPattern(String, String);
+    method @Deprecated public void register(String, org.apache.http.protocol.HttpRequestHandler);
+    method @Deprecated public void setHandlers(java.util.Map);
+    method @Deprecated public void unregister(String);
+  }
+
+  @Deprecated public interface HttpRequestHandlerResolver {
+    method @Deprecated public org.apache.http.protocol.HttpRequestHandler lookup(String);
+  }
+
+  @Deprecated public interface HttpRequestInterceptorList {
+    method @Deprecated public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor);
+    method @Deprecated public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int);
+    method @Deprecated public void clearRequestInterceptors();
+    method @Deprecated public org.apache.http.HttpRequestInterceptor getRequestInterceptor(int);
+    method @Deprecated public int getRequestInterceptorCount();
+    method @Deprecated public void removeRequestInterceptorByClass(Class);
+    method @Deprecated public void setInterceptors(java.util.List);
+  }
+
+  @Deprecated public interface HttpResponseInterceptorList {
+    method @Deprecated public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor);
+    method @Deprecated public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int);
+    method @Deprecated public void clearResponseInterceptors();
+    method @Deprecated public org.apache.http.HttpResponseInterceptor getResponseInterceptor(int);
+    method @Deprecated public int getResponseInterceptorCount();
+    method @Deprecated public void removeResponseInterceptorByClass(Class);
+    method @Deprecated public void setInterceptors(java.util.List);
+  }
+
+  @Deprecated public class HttpService {
+    ctor @Deprecated public HttpService(org.apache.http.protocol.HttpProcessor, org.apache.http.ConnectionReuseStrategy, org.apache.http.HttpResponseFactory);
+    method @Deprecated protected void doService(org.apache.http.HttpRequest, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public org.apache.http.params.HttpParams getParams();
+    method @Deprecated protected void handleException(org.apache.http.HttpException, org.apache.http.HttpResponse);
+    method @Deprecated public void handleRequest(org.apache.http.HttpServerConnection, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+    method @Deprecated public void setConnReuseStrategy(org.apache.http.ConnectionReuseStrategy);
+    method @Deprecated public void setExpectationVerifier(org.apache.http.protocol.HttpExpectationVerifier);
+    method @Deprecated public void setHandlerResolver(org.apache.http.protocol.HttpRequestHandlerResolver);
+    method @Deprecated public void setHttpProcessor(org.apache.http.protocol.HttpProcessor);
+    method @Deprecated public void setParams(org.apache.http.params.HttpParams);
+    method @Deprecated public void setResponseFactory(org.apache.http.HttpResponseFactory);
+  }
+
+  @Deprecated public class RequestConnControl implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestConnControl();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestContent implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestContent();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestDate implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestDate();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestExpectContinue implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestExpectContinue();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestTargetHost implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestTargetHost();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class RequestUserAgent implements org.apache.http.HttpRequestInterceptor {
+    ctor @Deprecated public RequestUserAgent();
+    method @Deprecated public void process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class ResponseConnControl implements org.apache.http.HttpResponseInterceptor {
+    ctor @Deprecated public ResponseConnControl();
+    method @Deprecated public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class ResponseContent implements org.apache.http.HttpResponseInterceptor {
+    ctor @Deprecated public ResponseContent();
+    method @Deprecated public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class ResponseDate implements org.apache.http.HttpResponseInterceptor {
+    ctor @Deprecated public ResponseDate();
+    method @Deprecated public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class ResponseServer implements org.apache.http.HttpResponseInterceptor {
+    ctor @Deprecated public ResponseServer();
+    method @Deprecated public void process(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException;
+  }
+
+  @Deprecated public class SyncBasicHttpContext extends org.apache.http.protocol.BasicHttpContext {
+    ctor @Deprecated public SyncBasicHttpContext(org.apache.http.protocol.HttpContext);
+  }
+
+  @Deprecated public class UriPatternMatcher {
+    ctor @Deprecated public UriPatternMatcher();
+    method @Deprecated public Object lookup(String);
+    method @Deprecated protected boolean matchUriRequestPattern(String, String);
+    method @Deprecated public void register(String, Object);
+    method @Deprecated public void setHandlers(java.util.Map);
+    method @Deprecated public void unregister(String);
+  }
+
+}
+
+package org.apache.http.util {
+
+  @Deprecated public final class ByteArrayBuffer {
+    ctor @Deprecated public ByteArrayBuffer(int);
+    method @Deprecated public void append(byte[], int, int);
+    method @Deprecated public void append(int);
+    method @Deprecated public void append(char[], int, int);
+    method @Deprecated public void append(org.apache.http.util.CharArrayBuffer, int, int);
+    method @Deprecated public byte[] buffer();
+    method @Deprecated public int byteAt(int);
+    method @Deprecated public int capacity();
+    method @Deprecated public void clear();
+    method @Deprecated public boolean isEmpty();
+    method @Deprecated public boolean isFull();
+    method @Deprecated public int length();
+    method @Deprecated public void setLength(int);
+    method @Deprecated public byte[] toByteArray();
+  }
+
+  @Deprecated public final class CharArrayBuffer {
+    ctor @Deprecated public CharArrayBuffer(int);
+    method @Deprecated public void append(char[], int, int);
+    method @Deprecated public void append(String);
+    method @Deprecated public void append(org.apache.http.util.CharArrayBuffer, int, int);
+    method @Deprecated public void append(org.apache.http.util.CharArrayBuffer);
+    method @Deprecated public void append(char);
+    method @Deprecated public void append(byte[], int, int);
+    method @Deprecated public void append(org.apache.http.util.ByteArrayBuffer, int, int);
+    method @Deprecated public void append(Object);
+    method @Deprecated public char[] buffer();
+    method @Deprecated public int capacity();
+    method @Deprecated public char charAt(int);
+    method @Deprecated public void clear();
+    method @Deprecated public void ensureCapacity(int);
+    method @Deprecated public int indexOf(int, int, int);
+    method @Deprecated public int indexOf(int);
+    method @Deprecated public boolean isEmpty();
+    method @Deprecated public boolean isFull();
+    method @Deprecated public int length();
+    method @Deprecated public void setLength(int);
+    method @Deprecated public String substring(int, int);
+    method @Deprecated public String substringTrimmed(int, int);
+    method @Deprecated public char[] toCharArray();
+  }
+
+  @Deprecated public final class EncodingUtils {
+    method @Deprecated public static byte[] getAsciiBytes(String);
+    method @Deprecated public static String getAsciiString(byte[], int, int);
+    method @Deprecated public static String getAsciiString(byte[]);
+    method @Deprecated public static byte[] getBytes(String, String);
+    method @Deprecated public static String getString(byte[], int, int, String);
+    method @Deprecated public static String getString(byte[], String);
+  }
+
+  @Deprecated public final class EntityUtils {
+    method @Deprecated public static String getContentCharSet(org.apache.http.HttpEntity) throws org.apache.http.ParseException;
+    method @Deprecated public static byte[] toByteArray(org.apache.http.HttpEntity) throws java.io.IOException;
+    method @Deprecated public static String toString(org.apache.http.HttpEntity, String) throws java.io.IOException, org.apache.http.ParseException;
+    method @Deprecated public static String toString(org.apache.http.HttpEntity) throws java.io.IOException, org.apache.http.ParseException;
+  }
+
+  @Deprecated public final class ExceptionUtils {
+    method @Deprecated public static void initCause(Throwable, Throwable);
+  }
+
+  @Deprecated public final class LangUtils {
+    method @Deprecated public static boolean equals(Object, Object);
+    method @Deprecated public static boolean equals(Object[], Object[]);
+    method @Deprecated public static int hashCode(int, int);
+    method @Deprecated public static int hashCode(int, boolean);
+    method @Deprecated public static int hashCode(int, Object);
+    field @Deprecated public static final int HASH_OFFSET = 37; // 0x25
+    field @Deprecated public static final int HASH_SEED = 17; // 0x11
+  }
+
+  @Deprecated public class VersionInfo {
+    ctor @Deprecated protected VersionInfo(String, String, String, String, String);
+    method @Deprecated protected static final org.apache.http.util.VersionInfo fromMap(String, java.util.Map, ClassLoader);
+    method @Deprecated public final String getClassloader();
+    method @Deprecated public final String getModule();
+    method @Deprecated public final String getPackage();
+    method @Deprecated public final String getRelease();
+    method @Deprecated public final String getTimestamp();
+    method @Deprecated public static final org.apache.http.util.VersionInfo[] loadVersionInfo(String[], ClassLoader);
+    method @Deprecated public static final org.apache.http.util.VersionInfo loadVersionInfo(String, ClassLoader);
+    field @Deprecated public static final String PROPERTY_MODULE = "info.module";
+    field @Deprecated public static final String PROPERTY_RELEASE = "info.release";
+    field @Deprecated public static final String PROPERTY_TIMESTAMP = "info.timestamp";
+    field @Deprecated public static final String UNAVAILABLE = "UNAVAILABLE";
+    field @Deprecated public static final String VERSION_PROPERTY_FILE = "version.properties";
+  }
+
+}
+
diff --git a/32/public/api/removed.txt b/32/public/api/removed.txt
new file mode 100644
index 0000000..4abdb91
--- /dev/null
+++ b/32/public/api/removed.txt
@@ -0,0 +1,659 @@
+// Signature format: 2.0
+package android.app {
+
+  public class Notification implements android.os.Parcelable {
+    method @Deprecated public String getChannel();
+    method public static Class<? extends android.app.Notification.Style> getNotificationStyleClass(String);
+    method @Deprecated public long getTimeout();
+    method @Deprecated public void setLatestEventInfo(android.content.Context, CharSequence, CharSequence, android.app.PendingIntent);
+  }
+
+  public static final class Notification.BubbleMetadata implements android.os.Parcelable {
+    method @Deprecated @Nullable public android.graphics.drawable.Icon getBubbleIcon();
+    method @Deprecated @Nullable public android.app.PendingIntent getBubbleIntent();
+  }
+
+  public static final class Notification.BubbleMetadata.Builder {
+    method @Deprecated @NonNull public android.app.Notification.BubbleMetadata.Builder createIntentBubble(@NonNull android.app.PendingIntent, @NonNull android.graphics.drawable.Icon);
+    method @Deprecated @NonNull public android.app.Notification.BubbleMetadata.Builder createShortcutBubble(@NonNull String);
+  }
+
+  public static class Notification.Builder {
+    method @Deprecated public android.app.Notification.Builder setChannel(String);
+    method @Deprecated public android.app.Notification.Builder setTimeout(long);
+  }
+
+}
+
+package android.app.slice {
+
+  public final class Slice implements android.os.Parcelable {
+    field @Deprecated public static final String EXTRA_SLIDER_VALUE = "android.app.slice.extra.SLIDER_VALUE";
+    field @Deprecated public static final String SUBTYPE_SLIDER = "slider";
+  }
+
+  public static class Slice.Builder {
+    ctor @Deprecated public Slice.Builder(@NonNull android.net.Uri);
+    method @Deprecated public android.app.slice.Slice.Builder addTimestamp(long, @Nullable String, java.util.List<java.lang.String>);
+    method @Deprecated public android.app.slice.Slice.Builder setSpec(android.app.slice.SliceSpec);
+  }
+
+  public final class SliceItem implements android.os.Parcelable {
+    method @Deprecated public long getTimestamp();
+    field @Deprecated public static final String FORMAT_TIMESTAMP = "long";
+  }
+
+  public class SliceManager {
+    method @Deprecated @Nullable public android.app.slice.Slice bindSlice(@NonNull android.net.Uri, @NonNull java.util.List<android.app.slice.SliceSpec>);
+    method @Deprecated @Nullable public android.app.slice.Slice bindSlice(@NonNull android.content.Intent, @NonNull java.util.List<android.app.slice.SliceSpec>);
+    method @Deprecated public void pinSlice(@NonNull android.net.Uri, @NonNull java.util.List<android.app.slice.SliceSpec>);
+  }
+
+  public abstract class SliceProvider extends android.content.ContentProvider {
+    method @Deprecated public android.app.slice.Slice onBindSlice(android.net.Uri, java.util.List<android.app.slice.SliceSpec>);
+  }
+
+}
+
+package android.app.usage {
+
+  public class StorageStatsManager {
+    method @Deprecated public long getFreeBytes(String) throws java.io.IOException;
+    method @Deprecated public long getTotalBytes(String) throws java.io.IOException;
+    method @Deprecated public boolean isQuotaSupported(String);
+    method @Deprecated public android.app.usage.ExternalStorageStats queryExternalStatsForUser(String, android.os.UserHandle) throws java.io.IOException;
+    method @Deprecated public android.app.usage.StorageStats queryStatsForPackage(String, String, android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public android.app.usage.StorageStats queryStatsForUid(String, int) throws java.io.IOException;
+    method @Deprecated public android.app.usage.StorageStats queryStatsForUser(String, android.os.UserHandle) throws java.io.IOException;
+  }
+
+}
+
+package android.content {
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method @Deprecated @Nullable public final String getCallingFeatureId();
+  }
+
+  public abstract class ContentResolver {
+    method @Deprecated public void notifyChange(@NonNull Iterable<android.net.Uri>, @Nullable android.database.ContentObserver, int);
+  }
+
+  public abstract class Context {
+    method @Deprecated @NonNull public android.content.Context createFeatureContext(@Nullable String);
+    method @Deprecated @Nullable public String getFeatureId();
+    method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+    method public abstract java.io.File getSharedPreferencesPath(String);
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+    method public java.io.File getSharedPreferencesPath(String);
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field @Deprecated public static final String EXTRA_QUICK_VIEW_ADVANCED = "android.intent.extra.QUICK_VIEW_ADVANCED";
+  }
+
+}
+
+package android.content.pm {
+
+  public class PackageInfo implements android.os.Parcelable {
+    field public static final int REQUESTED_PERMISSION_REQUIRED = 1; // 0x1
+  }
+
+  public abstract class PackageManager {
+    method public abstract boolean setInstantAppCookie(@Nullable byte[]);
+  }
+
+  public final class SharedLibraryInfo implements android.os.Parcelable {
+    method public boolean isBuiltin();
+    method public boolean isDynamic();
+    method public boolean isStatic();
+  }
+
+}
+
+package android.database {
+
+  public abstract class AbstractCursor implements android.database.CrossProcessCursor {
+    field protected Long mCurrentRowID;
+    field protected int mRowIdColumnIndex;
+    field protected java.util.HashMap<java.lang.Long,java.util.Map<java.lang.String,java.lang.Object>> mUpdatedRows;
+  }
+
+}
+
+package android.graphics {
+
+  @Deprecated public class AvoidXfermode extends android.graphics.Xfermode {
+    ctor public AvoidXfermode(int, int, android.graphics.AvoidXfermode.Mode);
+  }
+
+  public enum AvoidXfermode.Mode {
+    enum_constant public static final android.graphics.AvoidXfermode.Mode AVOID;
+    enum_constant public static final android.graphics.AvoidXfermode.Mode TARGET;
+  }
+
+  public class Canvas {
+    method @Deprecated public boolean clipRegion(@NonNull android.graphics.Region, @NonNull android.graphics.Region.Op);
+    method @Deprecated public boolean clipRegion(@NonNull android.graphics.Region);
+    method @Deprecated public int save(int);
+    field @Deprecated public static final int CLIP_SAVE_FLAG = 2; // 0x2
+    field @Deprecated public static final int CLIP_TO_LAYER_SAVE_FLAG = 16; // 0x10
+    field @Deprecated public static final int FULL_COLOR_LAYER_SAVE_FLAG = 8; // 0x8
+    field @Deprecated public static final int HAS_ALPHA_LAYER_SAVE_FLAG = 4; // 0x4
+    field @Deprecated public static final int MATRIX_SAVE_FLAG = 1; // 0x1
+  }
+
+  public final class ImageDecoder implements java.lang.AutoCloseable {
+    method @Deprecated public boolean getAsAlphaMask();
+    method @Deprecated public boolean getConserveMemory();
+    method @Deprecated public boolean getDecodeAsAlphaMask();
+    method @Deprecated public boolean getMutable();
+    method @Deprecated public boolean getRequireUnpremultiplied();
+    method @Deprecated public android.graphics.ImageDecoder setAsAlphaMask(boolean);
+    method @Deprecated public void setConserveMemory(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setDecodeAsAlphaMask(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setMutable(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setRequireUnpremultiplied(boolean);
+    method @Deprecated public android.graphics.ImageDecoder setResize(int, int);
+    method @Deprecated public android.graphics.ImageDecoder setResize(int);
+    field @Deprecated public static final int ERROR_SOURCE_ERROR = 3; // 0x3
+    field @Deprecated public static final int ERROR_SOURCE_EXCEPTION = 1; // 0x1
+    field @Deprecated public static final int ERROR_SOURCE_INCOMPLETE = 2; // 0x2
+  }
+
+  @Deprecated public static class ImageDecoder.IncompleteException extends java.io.IOException {
+    ctor public ImageDecoder.IncompleteException();
+  }
+
+  @Deprecated public class LayerRasterizer extends android.graphics.Rasterizer {
+    ctor public LayerRasterizer();
+    method public void addLayer(android.graphics.Paint, float, float);
+    method public void addLayer(android.graphics.Paint);
+  }
+
+  public class Paint {
+    method @Deprecated public android.graphics.Rasterizer getRasterizer();
+    method @Deprecated public android.graphics.Rasterizer setRasterizer(android.graphics.Rasterizer);
+  }
+
+  public class Picture {
+    method @Deprecated public static android.graphics.Picture createFromStream(@NonNull java.io.InputStream);
+    method @Deprecated public void writeToStream(@NonNull java.io.OutputStream);
+  }
+
+  @Deprecated public class PixelXorXfermode extends android.graphics.Xfermode {
+    ctor public PixelXorXfermode(int);
+  }
+
+  public class Rasterizer {
+    ctor public Rasterizer();
+  }
+
+}
+
+package android.graphics.drawable {
+
+  public class AnimatedImageDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
+    method @Deprecated public int getLoopCount(int);
+    method @Deprecated public void setLoopCount(int);
+    field @Deprecated public static final int LOOP_INFINITE = -1; // 0xffffffff
+  }
+
+}
+
+package android.hardware {
+
+  public final class SensorDirectChannel implements java.nio.channels.Channel {
+    method @Deprecated public boolean isValid();
+  }
+
+}
+
+package android.icu.util {
+
+  public class JapaneseCalendar extends android.icu.util.GregorianCalendar {
+    field @Deprecated public static final int CURRENT_ERA;
+  }
+
+}
+
+package android.location {
+
+  public class Location implements android.os.Parcelable {
+    method @Deprecated public void removeBearingAccuracy();
+    method @Deprecated public void removeSpeedAccuracy();
+    method @Deprecated public void removeVerticalAccuracy();
+  }
+
+}
+
+package android.media {
+
+  public final class AudioFormat implements android.os.Parcelable {
+    ctor public AudioFormat();
+  }
+
+}
+
+package android.media.tv {
+
+  public class TvView extends android.view.ViewGroup {
+    method public void requestUnblockContent(android.media.tv.TvContentRating);
+  }
+
+}
+
+package android.net {
+
+  public class ConnectivityManager {
+    method @Deprecated public boolean requestRouteToHost(int, int);
+    method @Deprecated public int startUsingNetworkFeature(int, String);
+    method @Deprecated public int stopUsingNetworkFeature(int, String);
+  }
+
+  @Deprecated public class NetworkBadging {
+    method @NonNull public static android.graphics.drawable.Drawable getWifiIcon(@IntRange(from=0, to=4) int, int, @Nullable android.content.res.Resources.Theme);
+    field public static final int BADGING_4K = 30; // 0x1e
+    field public static final int BADGING_HD = 20; // 0x14
+    field public static final int BADGING_NONE = 0; // 0x0
+    field public static final int BADGING_SD = 10; // 0xa
+  }
+
+  @IntDef({0x0, 0xa, 0x14, 0x1e}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface NetworkBadging.Badging {
+  }
+
+  public final class Proxy {
+    field @Deprecated public static final String EXTRA_PROXY_INFO = "android.intent.extra.PROXY_INFO";
+  }
+
+  @Deprecated public class SSLCertificateSocketFactory extends javax.net.ssl.SSLSocketFactory {
+    method @Deprecated public static org.apache.http.conn.ssl.SSLSocketFactory getHttpSocketFactory(int, android.net.SSLSessionCache);
+  }
+
+  public class TrafficStats {
+    method @Deprecated public static void setThreadStatsUidSelf();
+  }
+
+}
+
+package android.os {
+
+  public class BatteryManager {
+    ctor public BatteryManager();
+  }
+
+  public final class PowerManager {
+    method public void goToSleep(long);
+    method @Deprecated public void userActivity(long, boolean);
+    method @Deprecated public void wakeUp(long);
+  }
+
+  public class RecoverySystem {
+    ctor public RecoverySystem();
+  }
+
+  public static final class StrictMode.ThreadPolicy.Builder {
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnThreadViolationListener, @NonNull java.util.concurrent.Executor);
+  }
+
+  public static final class StrictMode.VmPolicy.Builder {
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder penaltyListener(@NonNull android.os.StrictMode.OnVmViolationListener, @NonNull java.util.concurrent.Executor);
+  }
+
+  public final class SystemClock {
+    method @NonNull public static java.time.Clock elapsedRealtimeClock();
+    method @NonNull public static java.time.Clock uptimeClock();
+  }
+
+  public class TestLooperManager {
+    method @Deprecated public android.os.MessageQueue getQueue();
+  }
+
+  public class UserManager {
+    method public android.graphics.drawable.Drawable getBadgedDrawableForUser(android.graphics.drawable.Drawable, android.os.UserHandle, android.graphics.Rect, int);
+    method public android.graphics.drawable.Drawable getBadgedIconForUser(android.graphics.drawable.Drawable, android.os.UserHandle);
+    method public CharSequence getBadgedLabelForUser(CharSequence, android.os.UserHandle);
+  }
+
+}
+
+package android.os.storage {
+
+  public class StorageManager {
+    method @NonNull public android.os.storage.StorageVolume getPrimaryVolume();
+    method @NonNull public android.os.storage.StorageVolume[] getVolumeList();
+  }
+
+}
+
+package android.provider {
+
+  public class Browser {
+    method @RequiresPermission(allOf={"com.android.browser.permission.READ_HISTORY_BOOKMARKS", "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"}, apis="..22") public static final void addSearchUrl(android.content.ContentResolver, String);
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final boolean canClearHistory(android.content.ContentResolver);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void clearHistory(android.content.ContentResolver);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void clearSearches(android.content.ContentResolver);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void deleteFromHistory(android.content.ContentResolver, String);
+    method @RequiresPermission(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final void deleteHistoryTimeFrame(android.content.ContentResolver, long, long);
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final android.database.Cursor getAllBookmarks(android.content.ContentResolver) throws java.lang.IllegalStateException;
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final android.database.Cursor getAllVisitedUrls(android.content.ContentResolver) throws java.lang.IllegalStateException;
+    method @RequiresPermission(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") public static final void requestAllIcons(android.content.ContentResolver, String, android.webkit.WebIconDatabase.IconListener);
+    method public static final void saveBookmark(android.content.Context, String, String);
+    method @RequiresPermission(allOf={"com.android.browser.permission.READ_HISTORY_BOOKMARKS", "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"}, apis="..22") public static final void truncateHistory(android.content.ContentResolver);
+    method @RequiresPermission(allOf={"com.android.browser.permission.READ_HISTORY_BOOKMARKS", "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"}, apis="..22") public static final void updateVisitedHistory(android.content.ContentResolver, String, boolean);
+    field @RequiresPermission.Read(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") @RequiresPermission.Write(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final android.net.Uri BOOKMARKS_URI;
+    field public static final String[] HISTORY_PROJECTION;
+    field public static final int HISTORY_PROJECTION_BOOKMARK_INDEX = 4; // 0x4
+    field public static final int HISTORY_PROJECTION_DATE_INDEX = 3; // 0x3
+    field public static final int HISTORY_PROJECTION_FAVICON_INDEX = 6; // 0x6
+    field public static final int HISTORY_PROJECTION_ID_INDEX = 0; // 0x0
+    field public static final int HISTORY_PROJECTION_TITLE_INDEX = 5; // 0x5
+    field public static final int HISTORY_PROJECTION_URL_INDEX = 1; // 0x1
+    field public static final int HISTORY_PROJECTION_VISITS_INDEX = 2; // 0x2
+    field public static final String[] SEARCHES_PROJECTION;
+    field public static final int SEARCHES_PROJECTION_DATE_INDEX = 2; // 0x2
+    field public static final int SEARCHES_PROJECTION_SEARCH_INDEX = 1; // 0x1
+    field @RequiresPermission.Read(value="com.android.browser.permission.READ_HISTORY_BOOKMARKS", apis="..22") @RequiresPermission.Write(value="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS", apis="..22") public static final android.net.Uri SEARCHES_URI;
+    field public static final String[] TRUNCATE_HISTORY_PROJECTION;
+    field public static final int TRUNCATE_HISTORY_PROJECTION_ID_INDEX = 0; // 0x0
+    field public static final int TRUNCATE_N_OLDEST = 5; // 0x5
+  }
+
+  public static class Browser.BookmarkColumns implements android.provider.BaseColumns {
+    ctor public Browser.BookmarkColumns();
+    field public static final String BOOKMARK = "bookmark";
+    field public static final String CREATED = "created";
+    field public static final String DATE = "date";
+    field public static final String FAVICON = "favicon";
+    field public static final String TITLE = "title";
+    field public static final String URL = "url";
+    field public static final String VISITS = "visits";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  public static class Browser.SearchColumns implements android.provider.BaseColumns {
+    ctor public Browser.SearchColumns();
+    field public static final String DATE = "date";
+    field public static final String SEARCH = "search";
+    field @Deprecated public static final String URL = "url";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated public static final class ContactsContract.Contacts.StreamItems implements android.provider.ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "stream_items";
+  }
+
+  @Deprecated public static final class ContactsContract.RawContacts.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "stream_items";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated public static final class ContactsContract.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
+    field @Deprecated public static final String PHOTO = "photo";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated protected static interface ContactsContract.StreamItemPhotosColumns {
+    field @Deprecated public static final String PHOTO_FILE_ID = "photo_file_id";
+    field @Deprecated public static final String PHOTO_URI = "photo_uri";
+    field @Deprecated public static final String SORT_INDEX = "sort_index";
+    field @Deprecated public static final String STREAM_ITEM_ID = "stream_item_id";
+    field @Deprecated public static final String SYNC1 = "stream_item_photo_sync1";
+    field @Deprecated public static final String SYNC2 = "stream_item_photo_sync2";
+    field @Deprecated public static final String SYNC3 = "stream_item_photo_sync3";
+    field @Deprecated public static final String SYNC4 = "stream_item_photo_sync4";
+  }
+
+  @Deprecated public static final class ContactsContract.StreamItems implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item";
+    field @Deprecated public static final android.net.Uri CONTENT_LIMIT_URI;
+    field @Deprecated public static final android.net.Uri CONTENT_PHOTO_URI;
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String MAX_ITEMS = "max_items";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated public static final class ContactsContract.StreamItems.StreamItemPhotos implements android.provider.BaseColumns android.provider.ContactsContract.StreamItemPhotosColumns {
+    field @Deprecated public static final String CONTENT_DIRECTORY = "photo";
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/stream_item_photo";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/stream_item_photo";
+    field public static final String _COUNT = "_count";
+    field public static final String _ID = "_id";
+  }
+
+  @Deprecated protected static interface ContactsContract.StreamItemsColumns {
+    field @Deprecated public static final String ACCOUNT_NAME = "account_name";
+    field @Deprecated public static final String ACCOUNT_TYPE = "account_type";
+    field @Deprecated public static final String COMMENTS = "comments";
+    field @Deprecated public static final String CONTACT_ID = "contact_id";
+    field @Deprecated public static final String CONTACT_LOOKUP_KEY = "contact_lookup";
+    field @Deprecated public static final String DATA_SET = "data_set";
+    field @Deprecated public static final String RAW_CONTACT_ID = "raw_contact_id";
+    field @Deprecated public static final String RAW_CONTACT_SOURCE_ID = "raw_contact_source_id";
+    field @Deprecated public static final String RES_ICON = "icon";
+    field @Deprecated public static final String RES_LABEL = "label";
+    field @Deprecated public static final String RES_PACKAGE = "res_package";
+    field @Deprecated public static final String SYNC1 = "stream_item_sync1";
+    field @Deprecated public static final String SYNC2 = "stream_item_sync2";
+    field @Deprecated public static final String SYNC3 = "stream_item_sync3";
+    field @Deprecated public static final String SYNC4 = "stream_item_sync4";
+    field @Deprecated public static final String TEXT = "text";
+    field @Deprecated public static final String TIMESTAMP = "timestamp";
+  }
+
+  public static interface MediaStore.Audio.AudioColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String ALBUM = "album";
+    field public static final String ARTIST = "artist";
+    field public static final String COMPOSER = "composer";
+    field public static final String DURATION = "duration";
+  }
+
+  public static interface MediaStore.DownloadColumns extends android.provider.MediaStore.MediaColumns {
+    field @Deprecated public static final String DESCRIPTION = "description";
+  }
+
+  public static interface MediaStore.Files.FileColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String TITLE = "title";
+  }
+
+  public static interface MediaStore.Images.ImageColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String BUCKET_DISPLAY_NAME = "bucket_display_name";
+    field public static final String BUCKET_ID = "bucket_id";
+    field public static final String DATE_TAKEN = "datetaken";
+    field public static final String GROUP_ID = "group_id";
+    field public static final String ORIENTATION = "orientation";
+  }
+
+  public static interface MediaStore.MediaColumns extends android.provider.BaseColumns {
+    field @Deprecated public static final String GROUP_ID = "group_id";
+  }
+
+  public static interface MediaStore.Video.VideoColumns extends android.provider.MediaStore.MediaColumns {
+    field public static final String ALBUM = "album";
+    field public static final String ARTIST = "artist";
+    field public static final String BUCKET_DISPLAY_NAME = "bucket_display_name";
+    field public static final String BUCKET_ID = "bucket_id";
+    field public static final String DATE_TAKEN = "datetaken";
+    field public static final String DURATION = "duration";
+    field public static final String GROUP_ID = "group_id";
+    field public static final String RESOLUTION = "resolution";
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    field @Deprecated public static final String CONTACT_METADATA_SYNC = "contact_metadata_sync";
+  }
+
+  public static final class Settings.System extends android.provider.Settings.NameValueTable {
+    field public static final String APPEND_FOR_LAST_AUDIBLE = "_last_audible";
+    field public static final String VOLUME_ALARM = "volume_alarm";
+    field public static final String VOLUME_BLUETOOTH_SCO = "volume_bluetooth_sco";
+    field public static final String VOLUME_MUSIC = "volume_music";
+    field public static final String VOLUME_NOTIFICATION = "volume_notification";
+    field public static final String VOLUME_RING = "volume_ring";
+    field public static final String[] VOLUME_SETTINGS;
+    field public static final String VOLUME_SYSTEM = "volume_system";
+    field public static final String VOLUME_VOICE = "volume_voice";
+  }
+
+}
+
+package android.speech.tts {
+
+  public abstract class UtteranceProgressListener {
+    method @Deprecated public void onUtteranceRangeStart(String, int, int);
+  }
+
+}
+
+package android.telephony {
+
+  public class NetworkScan {
+    method @Deprecated public void stop() throws android.os.RemoteException;
+  }
+
+  public class TelephonyManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) public java.util.List<android.telephony.NeighboringCellInfo> getNeighboringCellInfo();
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, android.telephony.TelephonyScanManager.NetworkScanCallback);
+  }
+
+}
+
+package android.text.format {
+
+  public class DateFormat {
+    field @Deprecated public static final char AM_PM = 97; // 0x0061 'a'
+    field @Deprecated public static final char CAPITAL_AM_PM = 65; // 0x0041 'A'
+    field @Deprecated public static final char DATE = 100; // 0x0064 'd'
+    field @Deprecated public static final char DAY = 69; // 0x0045 'E'
+    field @Deprecated public static final char HOUR = 104; // 0x0068 'h'
+    field @Deprecated public static final char HOUR_OF_DAY = 107; // 0x006b 'k'
+    field @Deprecated public static final char MINUTE = 109; // 0x006d 'm'
+    field @Deprecated public static final char MONTH = 77; // 0x004d 'M'
+    field @Deprecated public static final char QUOTE = 39; // 0x0027 '\''
+    field @Deprecated public static final char SECONDS = 115; // 0x0073 's'
+    field @Deprecated public static final char STANDALONE_MONTH = 76; // 0x004c 'L'
+    field @Deprecated public static final char TIME_ZONE = 122; // 0x007a 'z'
+    field @Deprecated public static final char YEAR = 121; // 0x0079 'y'
+  }
+
+}
+
+package android.text.style {
+
+  public class RasterizerSpan extends android.text.style.CharacterStyle implements android.text.style.UpdateAppearance {
+    ctor public RasterizerSpan(android.graphics.Rasterizer);
+    method public android.graphics.Rasterizer getRasterizer();
+    method public void updateDrawState(android.text.TextPaint);
+  }
+
+}
+
+package android.util {
+
+  @Deprecated public class FloatMath {
+    method public static float ceil(float);
+    method public static float cos(float);
+    method public static float exp(float);
+    method public static float floor(float);
+    method public static float hypot(float, float);
+    method public static float pow(float, float);
+    method public static float sin(float);
+    method public static float sqrt(float);
+  }
+
+}
+
+package android.view {
+
+  @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
+    method protected void initializeFadingEdge(android.content.res.TypedArray);
+    method protected void initializeScrollbars(android.content.res.TypedArray);
+  }
+
+  public class ViewConfiguration {
+    method public int getScaledScrollFactor();
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    field public static final int TYPE_KEYGUARD = 2004; // 0x7d4
+    field public static final int TYPE_STATUS_BAR_PANEL = 2014; // 0x7de
+  }
+
+}
+
+package android.view.translation {
+
+  public final class TranslationManager {
+    method @Deprecated public void addOnDeviceTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+    method @Deprecated public void addTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+    method @Deprecated @Nullable @WorkerThread public android.view.translation.Translator createOnDeviceTranslator(@NonNull android.view.translation.TranslationContext);
+    method @Deprecated @Nullable @WorkerThread public android.view.translation.Translator createTranslator(@NonNull android.view.translation.TranslationContext);
+    method @Deprecated @NonNull @WorkerThread public java.util.Set<android.view.translation.TranslationCapability> getTranslationCapabilities(int, int);
+    method @Deprecated @Nullable public android.app.PendingIntent getTranslationSettingsActivityIntent();
+    method @Deprecated public void removeOnDeviceTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+    method @Deprecated public void removeTranslationCapabilityUpdateListener(int, int, @NonNull android.app.PendingIntent);
+  }
+
+  public static final class TranslationRequest.Builder {
+    method @Deprecated @NonNull public android.view.translation.TranslationRequest.Builder addTranslationRequestValue(@NonNull android.view.translation.TranslationRequestValue);
+    method @Deprecated @NonNull public android.view.translation.TranslationRequest.Builder addViewTranslationRequest(@NonNull android.view.translation.ViewTranslationRequest);
+  }
+
+  public static final class TranslationResponse.Builder {
+    method @Deprecated @NonNull public android.view.translation.TranslationResponse.Builder setTranslationStatus(int);
+  }
+
+  public final class TranslationSpec implements android.os.Parcelable {
+    ctor @Deprecated public TranslationSpec(@NonNull String, int);
+    method @Deprecated @NonNull public String getLanguage();
+  }
+
+  public class Translator {
+    method @Deprecated @Nullable public void translate(@NonNull android.view.translation.TranslationRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
+  }
+
+  public interface UiTranslationStateCallback {
+    method @Deprecated public default void onStarted(@NonNull String, @NonNull String);
+  }
+
+}
+
+package android.webkit {
+
+  public class WebViewClient {
+    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+  }
+
+}
+
+package android.widget {
+
+  @android.widget.RemoteViews.RemoteView public class ListView extends android.widget.AbsListView {
+    method protected <T extends android.view.View> T findViewTraversal(@IdRes int);
+    method protected <T extends android.view.View> T findViewWithTagTraversal(Object);
+  }
+
+  public class PopupWindow {
+    method @Deprecated public boolean isClipToScreenEnabled();
+    method @Deprecated public boolean isLayoutInScreenEnabled();
+    method @Deprecated public void setClipToScreenEnabled(boolean);
+    method @Deprecated public void setLayoutInScreenEnabled(boolean);
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
+    method public static int getTextColor(android.content.Context, android.content.res.TypedArray, int);
+    method public static android.content.res.ColorStateList getTextColors(android.content.Context, android.content.res.TypedArray);
+  }
+
+}
+
diff --git a/32/public/api/runtime-i18n-removed.txt b/32/public/api/runtime-i18n-removed.txt
new file mode 100644
index 0000000..e73b663
--- /dev/null
+++ b/32/public/api/runtime-i18n-removed.txt
@@ -0,0 +1,9 @@
+// Signature format: 2.0
+package android.icu.util {
+
+  public class JapaneseCalendar extends android.icu.util.GregorianCalendar {
+    field @Deprecated public static final int CURRENT_ERA;
+  }
+
+}
+
diff --git a/32/public/api/runtime-i18n.txt b/32/public/api/runtime-i18n.txt
new file mode 100644
index 0000000..5b3fc5c
--- /dev/null
+++ b/32/public/api/runtime-i18n.txt
@@ -0,0 +1,4887 @@
+// Signature format: 2.0
+package android.icu.lang {
+
+  public final class UCharacter implements android.icu.lang.UCharacterEnums.ECharacterCategory android.icu.lang.UCharacterEnums.ECharacterDirection {
+    method public static int charCount(int);
+    method public static int codePointAt(CharSequence, int);
+    method public static int codePointAt(char[], int);
+    method public static int codePointAt(char[], int, int);
+    method public static int codePointBefore(CharSequence, int);
+    method public static int codePointBefore(char[], int);
+    method public static int codePointBefore(char[], int, int);
+    method public static int codePointCount(CharSequence, int, int);
+    method public static int codePointCount(char[], int, int);
+    method public static int digit(int, int);
+    method public static int digit(int);
+    method public static int foldCase(int, boolean);
+    method public static String foldCase(String, boolean);
+    method public static int foldCase(int, int);
+    method public static String foldCase(String, int);
+    method public static char forDigit(int, int);
+    method public static android.icu.util.VersionInfo getAge(int);
+    method public static int getBidiPairedBracket(int);
+    method public static int getCharFromExtendedName(String);
+    method public static int getCharFromName(String);
+    method public static int getCharFromNameAlias(String);
+    method public static int getCodePoint(char, char);
+    method public static int getCodePoint(char);
+    method public static int getCombiningClass(int);
+    method public static int getDirection(int);
+    method public static byte getDirectionality(int);
+    method public static String getExtendedName(int);
+    method public static android.icu.util.ValueIterator getExtendedNameIterator();
+    method public static int getHanNumericValue(int);
+    method public static int getIntPropertyMaxValue(int);
+    method public static int getIntPropertyMinValue(int);
+    method public static int getIntPropertyValue(int, int);
+    method public static int getMirror(int);
+    method public static String getName(int);
+    method public static String getName(String, String);
+    method public static String getNameAlias(int);
+    method public static android.icu.util.ValueIterator getNameIterator();
+    method public static int getNumericValue(int);
+    method public static int getPropertyEnum(CharSequence);
+    method public static String getPropertyName(int, int);
+    method public static int getPropertyValueEnum(int, CharSequence);
+    method public static String getPropertyValueName(int, int, int);
+    method public static int getType(int);
+    method public static android.icu.util.RangeValueIterator getTypeIterator();
+    method public static double getUnicodeNumericValue(int);
+    method public static android.icu.util.VersionInfo getUnicodeVersion();
+    method public static boolean hasBinaryProperty(int, int);
+    method public static boolean isBMP(int);
+    method public static boolean isBaseForm(int);
+    method public static boolean isDefined(int);
+    method public static boolean isDigit(int);
+    method public static boolean isHighSurrogate(char);
+    method public static boolean isISOControl(int);
+    method public static boolean isIdentifierIgnorable(int);
+    method public static boolean isJavaIdentifierPart(int);
+    method public static boolean isJavaIdentifierStart(int);
+    method public static boolean isLegal(int);
+    method public static boolean isLegal(String);
+    method public static boolean isLetter(int);
+    method public static boolean isLetterOrDigit(int);
+    method public static boolean isLowSurrogate(char);
+    method public static boolean isLowerCase(int);
+    method public static boolean isMirrored(int);
+    method public static boolean isPrintable(int);
+    method public static boolean isSpaceChar(int);
+    method public static boolean isSupplementary(int);
+    method public static boolean isSupplementaryCodePoint(int);
+    method public static boolean isSurrogatePair(char, char);
+    method public static boolean isTitleCase(int);
+    method public static boolean isUAlphabetic(int);
+    method public static boolean isULowercase(int);
+    method public static boolean isUUppercase(int);
+    method public static boolean isUWhiteSpace(int);
+    method public static boolean isUnicodeIdentifierPart(int);
+    method public static boolean isUnicodeIdentifierStart(int);
+    method public static boolean isUpperCase(int);
+    method public static boolean isValidCodePoint(int);
+    method public static boolean isWhitespace(int);
+    method public static int offsetByCodePoints(CharSequence, int, int);
+    method public static int offsetByCodePoints(char[], int, int, int, int);
+    method public static int toChars(int, char[], int);
+    method public static char[] toChars(int);
+    method public static int toCodePoint(char, char);
+    method public static int toLowerCase(int);
+    method public static String toLowerCase(String);
+    method public static String toLowerCase(java.util.Locale, String);
+    method public static String toLowerCase(android.icu.util.ULocale, String);
+    method public static String toString(int);
+    method public static int toTitleCase(int);
+    method public static String toTitleCase(String, android.icu.text.BreakIterator);
+    method public static String toTitleCase(java.util.Locale, String, android.icu.text.BreakIterator);
+    method public static String toTitleCase(android.icu.util.ULocale, String, android.icu.text.BreakIterator);
+    method public static String toTitleCase(android.icu.util.ULocale, String, android.icu.text.BreakIterator, int);
+    method public static String toTitleCase(java.util.Locale, String, android.icu.text.BreakIterator, int);
+    method public static int toUpperCase(int);
+    method public static String toUpperCase(String);
+    method public static String toUpperCase(java.util.Locale, String);
+    method public static String toUpperCase(android.icu.util.ULocale, String);
+    field public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+    field public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+    field public static final int MAX_CODE_POINT = 1114111; // 0x10ffff
+    field public static final char MAX_HIGH_SURROGATE = 56319; // 0xdbff '\udbff'
+    field public static final char MAX_LOW_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final int MAX_RADIX = 36; // 0x24
+    field public static final char MAX_SURROGATE = 57343; // 0xdfff '\udfff'
+    field public static final int MAX_VALUE = 1114111; // 0x10ffff
+    field public static final int MIN_CODE_POINT = 0; // 0x0
+    field public static final char MIN_HIGH_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final char MIN_LOW_SURROGATE = 56320; // 0xdc00 '\udc00'
+    field public static final int MIN_RADIX = 2; // 0x2
+    field public static final int MIN_SUPPLEMENTARY_CODE_POINT = 65536; // 0x10000
+    field public static final char MIN_SURROGATE = 55296; // 0xd800 '\ud800'
+    field public static final int MIN_VALUE = 0; // 0x0
+    field public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+    field public static final int REPLACEMENT_CHAR = 65533; // 0xfffd
+    field public static final int SUPPLEMENTARY_MIN_VALUE = 65536; // 0x10000
+    field public static final int TITLECASE_NO_BREAK_ADJUSTMENT = 512; // 0x200
+    field public static final int TITLECASE_NO_LOWERCASE = 256; // 0x100
+  }
+
+  public static interface UCharacter.BidiPairedBracketType {
+    field public static final int CLOSE = 2; // 0x2
+    field public static final int NONE = 0; // 0x0
+    field public static final int OPEN = 1; // 0x1
+  }
+
+  public static interface UCharacter.DecompositionType {
+    field public static final int CANONICAL = 1; // 0x1
+    field public static final int CIRCLE = 3; // 0x3
+    field public static final int COMPAT = 2; // 0x2
+    field public static final int FINAL = 4; // 0x4
+    field public static final int FONT = 5; // 0x5
+    field public static final int FRACTION = 6; // 0x6
+    field public static final int INITIAL = 7; // 0x7
+    field public static final int ISOLATED = 8; // 0x8
+    field public static final int MEDIAL = 9; // 0x9
+    field public static final int NARROW = 10; // 0xa
+    field public static final int NOBREAK = 11; // 0xb
+    field public static final int NONE = 0; // 0x0
+    field public static final int SMALL = 12; // 0xc
+    field public static final int SQUARE = 13; // 0xd
+    field public static final int SUB = 14; // 0xe
+    field public static final int SUPER = 15; // 0xf
+    field public static final int VERTICAL = 16; // 0x10
+    field public static final int WIDE = 17; // 0x11
+  }
+
+  public static interface UCharacter.EastAsianWidth {
+    field public static final int AMBIGUOUS = 1; // 0x1
+    field public static final int FULLWIDTH = 3; // 0x3
+    field public static final int HALFWIDTH = 2; // 0x2
+    field public static final int NARROW = 4; // 0x4
+    field public static final int NEUTRAL = 0; // 0x0
+    field public static final int WIDE = 5; // 0x5
+  }
+
+  public static interface UCharacter.GraphemeClusterBreak {
+    field public static final int CONTROL = 1; // 0x1
+    field public static final int CR = 2; // 0x2
+    field public static final int EXTEND = 3; // 0x3
+    field public static final int E_BASE = 13; // 0xd
+    field public static final int E_BASE_GAZ = 14; // 0xe
+    field public static final int E_MODIFIER = 15; // 0xf
+    field public static final int GLUE_AFTER_ZWJ = 16; // 0x10
+    field public static final int L = 4; // 0x4
+    field public static final int LF = 5; // 0x5
+    field public static final int LV = 6; // 0x6
+    field public static final int LVT = 7; // 0x7
+    field public static final int OTHER = 0; // 0x0
+    field public static final int PREPEND = 11; // 0xb
+    field public static final int REGIONAL_INDICATOR = 12; // 0xc
+    field public static final int SPACING_MARK = 10; // 0xa
+    field public static final int T = 8; // 0x8
+    field public static final int V = 9; // 0x9
+    field public static final int ZWJ = 17; // 0x11
+  }
+
+  public static interface UCharacter.HangulSyllableType {
+    field public static final int LEADING_JAMO = 1; // 0x1
+    field public static final int LVT_SYLLABLE = 5; // 0x5
+    field public static final int LV_SYLLABLE = 4; // 0x4
+    field public static final int NOT_APPLICABLE = 0; // 0x0
+    field public static final int TRAILING_JAMO = 3; // 0x3
+    field public static final int VOWEL_JAMO = 2; // 0x2
+  }
+
+  public static interface UCharacter.IndicPositionalCategory {
+    field public static final int BOTTOM = 1; // 0x1
+    field public static final int BOTTOM_AND_LEFT = 2; // 0x2
+    field public static final int BOTTOM_AND_RIGHT = 3; // 0x3
+    field public static final int LEFT = 4; // 0x4
+    field public static final int LEFT_AND_RIGHT = 5; // 0x5
+    field public static final int NA = 0; // 0x0
+    field public static final int OVERSTRUCK = 6; // 0x6
+    field public static final int RIGHT = 7; // 0x7
+    field public static final int TOP = 8; // 0x8
+    field public static final int TOP_AND_BOTTOM = 9; // 0x9
+    field public static final int TOP_AND_BOTTOM_AND_LEFT = 15; // 0xf
+    field public static final int TOP_AND_BOTTOM_AND_RIGHT = 10; // 0xa
+    field public static final int TOP_AND_LEFT = 11; // 0xb
+    field public static final int TOP_AND_LEFT_AND_RIGHT = 12; // 0xc
+    field public static final int TOP_AND_RIGHT = 13; // 0xd
+    field public static final int VISUAL_ORDER_LEFT = 14; // 0xe
+  }
+
+  public static interface UCharacter.IndicSyllabicCategory {
+    field public static final int AVAGRAHA = 1; // 0x1
+    field public static final int BINDU = 2; // 0x2
+    field public static final int BRAHMI_JOINING_NUMBER = 3; // 0x3
+    field public static final int CANTILLATION_MARK = 4; // 0x4
+    field public static final int CONSONANT = 5; // 0x5
+    field public static final int CONSONANT_DEAD = 6; // 0x6
+    field public static final int CONSONANT_FINAL = 7; // 0x7
+    field public static final int CONSONANT_HEAD_LETTER = 8; // 0x8
+    field public static final int CONSONANT_INITIAL_POSTFIXED = 9; // 0x9
+    field public static final int CONSONANT_KILLER = 10; // 0xa
+    field public static final int CONSONANT_MEDIAL = 11; // 0xb
+    field public static final int CONSONANT_PLACEHOLDER = 12; // 0xc
+    field public static final int CONSONANT_PRECEDING_REPHA = 13; // 0xd
+    field public static final int CONSONANT_PREFIXED = 14; // 0xe
+    field public static final int CONSONANT_SUBJOINED = 15; // 0xf
+    field public static final int CONSONANT_SUCCEEDING_REPHA = 16; // 0x10
+    field public static final int CONSONANT_WITH_STACKER = 17; // 0x11
+    field public static final int GEMINATION_MARK = 18; // 0x12
+    field public static final int INVISIBLE_STACKER = 19; // 0x13
+    field public static final int JOINER = 20; // 0x14
+    field public static final int MODIFYING_LETTER = 21; // 0x15
+    field public static final int NON_JOINER = 22; // 0x16
+    field public static final int NUKTA = 23; // 0x17
+    field public static final int NUMBER = 24; // 0x18
+    field public static final int NUMBER_JOINER = 25; // 0x19
+    field public static final int OTHER = 0; // 0x0
+    field public static final int PURE_KILLER = 26; // 0x1a
+    field public static final int REGISTER_SHIFTER = 27; // 0x1b
+    field public static final int SYLLABLE_MODIFIER = 28; // 0x1c
+    field public static final int TONE_LETTER = 29; // 0x1d
+    field public static final int TONE_MARK = 30; // 0x1e
+    field public static final int VIRAMA = 31; // 0x1f
+    field public static final int VISARGA = 32; // 0x20
+    field public static final int VOWEL = 33; // 0x21
+    field public static final int VOWEL_DEPENDENT = 34; // 0x22
+    field public static final int VOWEL_INDEPENDENT = 35; // 0x23
+  }
+
+  public static interface UCharacter.JoiningGroup {
+    field public static final int AFRICAN_FEH = 86; // 0x56
+    field public static final int AFRICAN_NOON = 87; // 0x57
+    field public static final int AFRICAN_QAF = 88; // 0x58
+    field public static final int AIN = 1; // 0x1
+    field public static final int ALAPH = 2; // 0x2
+    field public static final int ALEF = 3; // 0x3
+    field public static final int BEH = 4; // 0x4
+    field public static final int BETH = 5; // 0x5
+    field public static final int BURUSHASKI_YEH_BARREE = 54; // 0x36
+    field public static final int DAL = 6; // 0x6
+    field public static final int DALATH_RISH = 7; // 0x7
+    field public static final int E = 8; // 0x8
+    field public static final int FARSI_YEH = 55; // 0x37
+    field public static final int FE = 51; // 0x33
+    field public static final int FEH = 9; // 0x9
+    field public static final int FINAL_SEMKATH = 10; // 0xa
+    field public static final int GAF = 11; // 0xb
+    field public static final int GAMAL = 12; // 0xc
+    field public static final int HAH = 13; // 0xd
+    field public static final int HAMZA_ON_HEH_GOAL = 14; // 0xe
+    field public static final int HANIFI_ROHINGYA_KINNA_YA = 100; // 0x64
+    field public static final int HANIFI_ROHINGYA_PA = 101; // 0x65
+    field public static final int HE = 15; // 0xf
+    field public static final int HEH = 16; // 0x10
+    field public static final int HEH_GOAL = 17; // 0x11
+    field public static final int HETH = 18; // 0x12
+    field public static final int KAF = 19; // 0x13
+    field public static final int KAPH = 20; // 0x14
+    field public static final int KHAPH = 52; // 0x34
+    field public static final int KNOTTED_HEH = 21; // 0x15
+    field public static final int LAM = 22; // 0x16
+    field public static final int LAMADH = 23; // 0x17
+    field public static final int MALAYALAM_BHA = 89; // 0x59
+    field public static final int MALAYALAM_JA = 90; // 0x5a
+    field public static final int MALAYALAM_LLA = 91; // 0x5b
+    field public static final int MALAYALAM_LLLA = 92; // 0x5c
+    field public static final int MALAYALAM_NGA = 93; // 0x5d
+    field public static final int MALAYALAM_NNA = 94; // 0x5e
+    field public static final int MALAYALAM_NNNA = 95; // 0x5f
+    field public static final int MALAYALAM_NYA = 96; // 0x60
+    field public static final int MALAYALAM_RA = 97; // 0x61
+    field public static final int MALAYALAM_SSA = 98; // 0x62
+    field public static final int MALAYALAM_TTA = 99; // 0x63
+    field public static final int MANICHAEAN_ALEPH = 58; // 0x3a
+    field public static final int MANICHAEAN_AYIN = 59; // 0x3b
+    field public static final int MANICHAEAN_BETH = 60; // 0x3c
+    field public static final int MANICHAEAN_DALETH = 61; // 0x3d
+    field public static final int MANICHAEAN_DHAMEDH = 62; // 0x3e
+    field public static final int MANICHAEAN_FIVE = 63; // 0x3f
+    field public static final int MANICHAEAN_GIMEL = 64; // 0x40
+    field public static final int MANICHAEAN_HETH = 65; // 0x41
+    field public static final int MANICHAEAN_HUNDRED = 66; // 0x42
+    field public static final int MANICHAEAN_KAPH = 67; // 0x43
+    field public static final int MANICHAEAN_LAMEDH = 68; // 0x44
+    field public static final int MANICHAEAN_MEM = 69; // 0x45
+    field public static final int MANICHAEAN_NUN = 70; // 0x46
+    field public static final int MANICHAEAN_ONE = 71; // 0x47
+    field public static final int MANICHAEAN_PE = 72; // 0x48
+    field public static final int MANICHAEAN_QOPH = 73; // 0x49
+    field public static final int MANICHAEAN_RESH = 74; // 0x4a
+    field public static final int MANICHAEAN_SADHE = 75; // 0x4b
+    field public static final int MANICHAEAN_SAMEKH = 76; // 0x4c
+    field public static final int MANICHAEAN_TAW = 77; // 0x4d
+    field public static final int MANICHAEAN_TEN = 78; // 0x4e
+    field public static final int MANICHAEAN_TETH = 79; // 0x4f
+    field public static final int MANICHAEAN_THAMEDH = 80; // 0x50
+    field public static final int MANICHAEAN_TWENTY = 81; // 0x51
+    field public static final int MANICHAEAN_WAW = 82; // 0x52
+    field public static final int MANICHAEAN_YODH = 83; // 0x53
+    field public static final int MANICHAEAN_ZAYIN = 84; // 0x54
+    field public static final int MEEM = 24; // 0x18
+    field public static final int MIM = 25; // 0x19
+    field public static final int NOON = 26; // 0x1a
+    field public static final int NO_JOINING_GROUP = 0; // 0x0
+    field public static final int NUN = 27; // 0x1b
+    field public static final int NYA = 56; // 0x38
+    field public static final int PE = 28; // 0x1c
+    field public static final int QAF = 29; // 0x1d
+    field public static final int QAPH = 30; // 0x1e
+    field public static final int REH = 31; // 0x1f
+    field public static final int REVERSED_PE = 32; // 0x20
+    field public static final int ROHINGYA_YEH = 57; // 0x39
+    field public static final int SAD = 33; // 0x21
+    field public static final int SADHE = 34; // 0x22
+    field public static final int SEEN = 35; // 0x23
+    field public static final int SEMKATH = 36; // 0x24
+    field public static final int SHIN = 37; // 0x25
+    field public static final int STRAIGHT_WAW = 85; // 0x55
+    field public static final int SWASH_KAF = 38; // 0x26
+    field public static final int SYRIAC_WAW = 39; // 0x27
+    field public static final int TAH = 40; // 0x28
+    field public static final int TAW = 41; // 0x29
+    field public static final int TEH_MARBUTA = 42; // 0x2a
+    field public static final int TEH_MARBUTA_GOAL = 14; // 0xe
+    field public static final int TETH = 43; // 0x2b
+    field public static final int WAW = 44; // 0x2c
+    field public static final int YEH = 45; // 0x2d
+    field public static final int YEH_BARREE = 46; // 0x2e
+    field public static final int YEH_WITH_TAIL = 47; // 0x2f
+    field public static final int YUDH = 48; // 0x30
+    field public static final int YUDH_HE = 49; // 0x31
+    field public static final int ZAIN = 50; // 0x32
+    field public static final int ZHAIN = 53; // 0x35
+  }
+
+  public static interface UCharacter.JoiningType {
+    field public static final int DUAL_JOINING = 2; // 0x2
+    field public static final int JOIN_CAUSING = 1; // 0x1
+    field public static final int LEFT_JOINING = 3; // 0x3
+    field public static final int NON_JOINING = 0; // 0x0
+    field public static final int RIGHT_JOINING = 4; // 0x4
+    field public static final int TRANSPARENT = 5; // 0x5
+  }
+
+  public static interface UCharacter.LineBreak {
+    field public static final int ALPHABETIC = 2; // 0x2
+    field public static final int AMBIGUOUS = 1; // 0x1
+    field public static final int BREAK_AFTER = 4; // 0x4
+    field public static final int BREAK_BEFORE = 5; // 0x5
+    field public static final int BREAK_BOTH = 3; // 0x3
+    field public static final int BREAK_SYMBOLS = 27; // 0x1b
+    field public static final int CARRIAGE_RETURN = 10; // 0xa
+    field public static final int CLOSE_PARENTHESIS = 36; // 0x24
+    field public static final int CLOSE_PUNCTUATION = 8; // 0x8
+    field public static final int COMBINING_MARK = 9; // 0x9
+    field public static final int COMPLEX_CONTEXT = 24; // 0x18
+    field public static final int CONDITIONAL_JAPANESE_STARTER = 37; // 0x25
+    field public static final int CONTINGENT_BREAK = 7; // 0x7
+    field public static final int EXCLAMATION = 11; // 0xb
+    field public static final int E_BASE = 40; // 0x28
+    field public static final int E_MODIFIER = 41; // 0x29
+    field public static final int GLUE = 12; // 0xc
+    field public static final int H2 = 31; // 0x1f
+    field public static final int H3 = 32; // 0x20
+    field public static final int HEBREW_LETTER = 38; // 0x26
+    field public static final int HYPHEN = 13; // 0xd
+    field public static final int IDEOGRAPHIC = 14; // 0xe
+    field public static final int INFIX_NUMERIC = 16; // 0x10
+    field public static final int INSEPARABLE = 15; // 0xf
+    field public static final int INSEPERABLE = 15; // 0xf
+    field public static final int JL = 33; // 0x21
+    field public static final int JT = 34; // 0x22
+    field public static final int JV = 35; // 0x23
+    field public static final int LINE_FEED = 17; // 0x11
+    field public static final int MANDATORY_BREAK = 6; // 0x6
+    field public static final int NEXT_LINE = 29; // 0x1d
+    field public static final int NONSTARTER = 18; // 0x12
+    field public static final int NUMERIC = 19; // 0x13
+    field public static final int OPEN_PUNCTUATION = 20; // 0x14
+    field public static final int POSTFIX_NUMERIC = 21; // 0x15
+    field public static final int PREFIX_NUMERIC = 22; // 0x16
+    field public static final int QUOTATION = 23; // 0x17
+    field public static final int REGIONAL_INDICATOR = 39; // 0x27
+    field public static final int SPACE = 26; // 0x1a
+    field public static final int SURROGATE = 25; // 0x19
+    field public static final int UNKNOWN = 0; // 0x0
+    field public static final int WORD_JOINER = 30; // 0x1e
+    field public static final int ZWJ = 42; // 0x2a
+    field public static final int ZWSPACE = 28; // 0x1c
+  }
+
+  public static interface UCharacter.NumericType {
+    field public static final int DECIMAL = 1; // 0x1
+    field public static final int DIGIT = 2; // 0x2
+    field public static final int NONE = 0; // 0x0
+    field public static final int NUMERIC = 3; // 0x3
+  }
+
+  public static interface UCharacter.SentenceBreak {
+    field public static final int ATERM = 1; // 0x1
+    field public static final int CLOSE = 2; // 0x2
+    field public static final int CR = 11; // 0xb
+    field public static final int EXTEND = 12; // 0xc
+    field public static final int FORMAT = 3; // 0x3
+    field public static final int LF = 13; // 0xd
+    field public static final int LOWER = 4; // 0x4
+    field public static final int NUMERIC = 5; // 0x5
+    field public static final int OLETTER = 6; // 0x6
+    field public static final int OTHER = 0; // 0x0
+    field public static final int SCONTINUE = 14; // 0xe
+    field public static final int SEP = 7; // 0x7
+    field public static final int SP = 8; // 0x8
+    field public static final int STERM = 9; // 0x9
+    field public static final int UPPER = 10; // 0xa
+  }
+
+  public static final class UCharacter.UnicodeBlock extends java.lang.Character.Subset {
+    method public static android.icu.lang.UCharacter.UnicodeBlock forName(String);
+    method public int getID();
+    method public static android.icu.lang.UCharacter.UnicodeBlock getInstance(int);
+    method public static android.icu.lang.UCharacter.UnicodeBlock of(int);
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ADLAM;
+    field public static final int ADLAM_ID = 263; // 0x107
+    field public static final android.icu.lang.UCharacter.UnicodeBlock AEGEAN_NUMBERS;
+    field public static final int AEGEAN_NUMBERS_ID = 119; // 0x77
+    field public static final android.icu.lang.UCharacter.UnicodeBlock AHOM;
+    field public static final int AHOM_ID = 253; // 0xfd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ALCHEMICAL_SYMBOLS;
+    field public static final int ALCHEMICAL_SYMBOLS_ID = 208; // 0xd0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ALPHABETIC_PRESENTATION_FORMS;
+    field public static final int ALPHABETIC_PRESENTATION_FORMS_ID = 80; // 0x50
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANATOLIAN_HIEROGLYPHS;
+    field public static final int ANATOLIAN_HIEROGLYPHS_ID = 254; // 0xfe
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION;
+    field public static final int ANCIENT_GREEK_MUSICAL_NOTATION_ID = 126; // 0x7e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_NUMBERS;
+    field public static final int ANCIENT_GREEK_NUMBERS_ID = 127; // 0x7f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_SYMBOLS;
+    field public static final int ANCIENT_SYMBOLS_ID = 165; // 0xa5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_EXTENDED_A;
+    field public static final int ARABIC_EXTENDED_A_ID = 210; // 0xd2
+    field public static final int ARABIC_ID = 12; // 0xc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS;
+    field public static final int ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS_ID = 211; // 0xd3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_A;
+    field public static final int ARABIC_PRESENTATION_FORMS_A_ID = 81; // 0x51
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_B;
+    field public static final int ARABIC_PRESENTATION_FORMS_B_ID = 85; // 0x55
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_SUPPLEMENT;
+    field public static final int ARABIC_SUPPLEMENT_ID = 128; // 0x80
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARMENIAN;
+    field public static final int ARMENIAN_ID = 10; // 0xa
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ARROWS;
+    field public static final int ARROWS_ID = 46; // 0x2e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock AVESTAN;
+    field public static final int AVESTAN_ID = 188; // 0xbc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BALINESE;
+    field public static final int BALINESE_ID = 147; // 0x93
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM;
+    field public static final int BAMUM_ID = 177; // 0xb1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM_SUPPLEMENT;
+    field public static final int BAMUM_SUPPLEMENT_ID = 202; // 0xca
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BASIC_LATIN;
+    field public static final int BASIC_LATIN_ID = 1; // 0x1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BASSA_VAH;
+    field public static final int BASSA_VAH_ID = 221; // 0xdd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BATAK;
+    field public static final int BATAK_ID = 199; // 0xc7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BENGALI;
+    field public static final int BENGALI_ID = 16; // 0x10
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BHAIKSUKI;
+    field public static final int BHAIKSUKI_ID = 264; // 0x108
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BLOCK_ELEMENTS;
+    field public static final int BLOCK_ELEMENTS_ID = 53; // 0x35
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO_EXTENDED;
+    field public static final int BOPOMOFO_EXTENDED_ID = 67; // 0x43
+    field public static final int BOPOMOFO_ID = 64; // 0x40
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BOX_DRAWING;
+    field public static final int BOX_DRAWING_ID = 52; // 0x34
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BRAHMI;
+    field public static final int BRAHMI_ID = 201; // 0xc9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BRAILLE_PATTERNS;
+    field public static final int BRAILLE_PATTERNS_ID = 57; // 0x39
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BUGINESE;
+    field public static final int BUGINESE_ID = 129; // 0x81
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BUHID;
+    field public static final int BUHID_ID = 100; // 0x64
+    field public static final android.icu.lang.UCharacter.UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS;
+    field public static final int BYZANTINE_MUSICAL_SYMBOLS_ID = 91; // 0x5b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CARIAN;
+    field public static final int CARIAN_ID = 168; // 0xa8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CAUCASIAN_ALBANIAN;
+    field public static final int CAUCASIAN_ALBANIAN_ID = 222; // 0xde
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHAKMA;
+    field public static final int CHAKMA_ID = 212; // 0xd4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHAM;
+    field public static final int CHAM_ID = 164; // 0xa4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE;
+    field public static final int CHEROKEE_ID = 32; // 0x20
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE_SUPPLEMENT;
+    field public static final int CHEROKEE_SUPPLEMENT_ID = 255; // 0xff
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHESS_SYMBOLS;
+    field public static final int CHESS_SYMBOLS_ID = 281; // 0x119
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CHORASMIAN;
+    field public static final int CHORASMIAN_ID = 301; // 0x12d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_FORMS;
+    field public static final int CJK_COMPATIBILITY_FORMS_ID = 83; // 0x53
+    field public static final int CJK_COMPATIBILITY_ID = 69; // 0x45
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS;
+    field public static final int CJK_COMPATIBILITY_IDEOGRAPHS_ID = 79; // 0x4f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT;
+    field public static final int CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT_ID = 95; // 0x5f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_RADICALS_SUPPLEMENT;
+    field public static final int CJK_RADICALS_SUPPLEMENT_ID = 58; // 0x3a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_STROKES;
+    field public static final int CJK_STROKES_ID = 130; // 0x82
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION;
+    field public static final int CJK_SYMBOLS_AND_PUNCTUATION_ID = 61; // 0x3d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A_ID = 70; // 0x46
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B_ID = 94; // 0x5e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C_ID = 197; // 0xc5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D_ID = 209; // 0xd1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E_ID = 256; // 0x100
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F_ID = 274; // 0x112
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G;
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G_ID = 302; // 0x12e
+    field public static final int CJK_UNIFIED_IDEOGRAPHS_ID = 71; // 0x47
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_EXTENDED;
+    field public static final int COMBINING_DIACRITICAL_MARKS_EXTENDED_ID = 224; // 0xe0
+    field public static final int COMBINING_DIACRITICAL_MARKS_ID = 7; // 0x7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT;
+    field public static final int COMBINING_DIACRITICAL_MARKS_SUPPLEMENT_ID = 131; // 0x83
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_HALF_MARKS;
+    field public static final int COMBINING_HALF_MARKS_ID = 82; // 0x52
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS;
+    field public static final int COMBINING_MARKS_FOR_SYMBOLS_ID = 43; // 0x2b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COMMON_INDIC_NUMBER_FORMS;
+    field public static final int COMMON_INDIC_NUMBER_FORMS_ID = 178; // 0xb2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CONTROL_PICTURES;
+    field public static final int CONTROL_PICTURES_ID = 49; // 0x31
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC_EPACT_NUMBERS;
+    field public static final int COPTIC_EPACT_NUMBERS_ID = 223; // 0xdf
+    field public static final int COPTIC_ID = 132; // 0x84
+    field public static final android.icu.lang.UCharacter.UnicodeBlock COUNTING_ROD_NUMERALS;
+    field public static final int COUNTING_ROD_NUMERALS_ID = 154; // 0x9a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM;
+    field public static final int CUNEIFORM_ID = 152; // 0x98
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION;
+    field public static final int CUNEIFORM_NUMBERS_AND_PUNCTUATION_ID = 153; // 0x99
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CURRENCY_SYMBOLS;
+    field public static final int CURRENCY_SYMBOLS_ID = 42; // 0x2a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYPRIOT_SYLLABARY;
+    field public static final int CYPRIOT_SYLLABARY_ID = 123; // 0x7b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_A;
+    field public static final int CYRILLIC_EXTENDED_A_ID = 158; // 0x9e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_B;
+    field public static final int CYRILLIC_EXTENDED_B_ID = 160; // 0xa0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_C;
+    field public static final int CYRILLIC_EXTENDED_C_ID = 265; // 0x109
+    field public static final int CYRILLIC_ID = 9; // 0x9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENT;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENTARY;
+    field public static final int CYRILLIC_SUPPLEMENTARY_ID = 97; // 0x61
+    field public static final int CYRILLIC_SUPPLEMENT_ID = 97; // 0x61
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DESERET;
+    field public static final int DESERET_ID = 90; // 0x5a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI_EXTENDED;
+    field public static final int DEVANAGARI_EXTENDED_ID = 179; // 0xb3
+    field public static final int DEVANAGARI_ID = 15; // 0xf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DINGBATS;
+    field public static final int DINGBATS_ID = 56; // 0x38
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DIVES_AKURU;
+    field public static final int DIVES_AKURU_ID = 303; // 0x12f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DOGRA;
+    field public static final int DOGRA_ID = 282; // 0x11a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DOMINO_TILES;
+    field public static final int DOMINO_TILES_ID = 171; // 0xab
+    field public static final android.icu.lang.UCharacter.UnicodeBlock DUPLOYAN;
+    field public static final int DUPLOYAN_ID = 225; // 0xe1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EARLY_DYNASTIC_CUNEIFORM;
+    field public static final int EARLY_DYNASTIC_CUNEIFORM_ID = 257; // 0x101
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPHS;
+    field public static final int EGYPTIAN_HIEROGLYPHS_ID = 194; // 0xc2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS;
+    field public static final int EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS_ID = 292; // 0x124
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ELBASAN;
+    field public static final int ELBASAN_ID = 226; // 0xe2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ELYMAIC;
+    field public static final int ELYMAIC_ID = 293; // 0x125
+    field public static final android.icu.lang.UCharacter.UnicodeBlock EMOTICONS;
+    field public static final int EMOTICONS_ID = 206; // 0xce
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERICS;
+    field public static final int ENCLOSED_ALPHANUMERICS_ID = 51; // 0x33
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT;
+    field public static final int ENCLOSED_ALPHANUMERIC_SUPPLEMENT_ID = 195; // 0xc3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS;
+    field public static final int ENCLOSED_CJK_LETTERS_AND_MONTHS_ID = 68; // 0x44
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT;
+    field public static final int ENCLOSED_IDEOGRAPHIC_SUPPLEMENT_ID = 196; // 0xc4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED_A;
+    field public static final int ETHIOPIC_EXTENDED_A_ID = 200; // 0xc8
+    field public static final int ETHIOPIC_EXTENDED_ID = 133; // 0x85
+    field public static final int ETHIOPIC_ID = 31; // 0x1f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_SUPPLEMENT;
+    field public static final int ETHIOPIC_SUPPLEMENT_ID = 134; // 0x86
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GENERAL_PUNCTUATION;
+    field public static final int GENERAL_PUNCTUATION_ID = 40; // 0x28
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES_EXTENDED;
+    field public static final int GEOMETRIC_SHAPES_EXTENDED_ID = 227; // 0xe3
+    field public static final int GEOMETRIC_SHAPES_ID = 54; // 0x36
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_EXTENDED;
+    field public static final int GEORGIAN_EXTENDED_ID = 283; // 0x11b
+    field public static final int GEORGIAN_ID = 29; // 0x1d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_SUPPLEMENT;
+    field public static final int GEORGIAN_SUPPLEMENT_ID = 135; // 0x87
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC;
+    field public static final int GLAGOLITIC_ID = 136; // 0x88
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC_SUPPLEMENT;
+    field public static final int GLAGOLITIC_SUPPLEMENT_ID = 266; // 0x10a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GOTHIC;
+    field public static final int GOTHIC_ID = 89; // 0x59
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GRANTHA;
+    field public static final int GRANTHA_ID = 228; // 0xe4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GREEK;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GREEK_EXTENDED;
+    field public static final int GREEK_EXTENDED_ID = 39; // 0x27
+    field public static final int GREEK_ID = 8; // 0x8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GUJARATI;
+    field public static final int GUJARATI_ID = 18; // 0x12
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GUNJALA_GONDI;
+    field public static final int GUNJALA_GONDI_ID = 284; // 0x11c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock GURMUKHI;
+    field public static final int GURMUKHI_ID = 17; // 0x11
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS;
+    field public static final int HALFWIDTH_AND_FULLWIDTH_FORMS_ID = 87; // 0x57
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_COMPATIBILITY_JAMO;
+    field public static final int HANGUL_COMPATIBILITY_JAMO_ID = 65; // 0x41
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_A;
+    field public static final int HANGUL_JAMO_EXTENDED_A_ID = 180; // 0xb4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_B;
+    field public static final int HANGUL_JAMO_EXTENDED_B_ID = 185; // 0xb9
+    field public static final int HANGUL_JAMO_ID = 30; // 0x1e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_SYLLABLES;
+    field public static final int HANGUL_SYLLABLES_ID = 74; // 0x4a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANIFI_ROHINGYA;
+    field public static final int HANIFI_ROHINGYA_ID = 285; // 0x11d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HANUNOO;
+    field public static final int HANUNOO_ID = 99; // 0x63
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HATRAN;
+    field public static final int HATRAN_ID = 258; // 0x102
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HEBREW;
+    field public static final int HEBREW_ID = 11; // 0xb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_PRIVATE_USE_SURROGATES;
+    field public static final int HIGH_PRIVATE_USE_SURROGATES_ID = 76; // 0x4c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_SURROGATES;
+    field public static final int HIGH_SURROGATES_ID = 75; // 0x4b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock HIRAGANA;
+    field public static final int HIRAGANA_ID = 62; // 0x3e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS;
+    field public static final int IDEOGRAPHIC_DESCRIPTION_CHARACTERS_ID = 60; // 0x3c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION;
+    field public static final int IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION_ID = 267; // 0x10b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IMPERIAL_ARAMAIC;
+    field public static final int IMPERIAL_ARAMAIC_ID = 186; // 0xba
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INDIC_SIYAQ_NUMBERS;
+    field public static final int INDIC_SIYAQ_NUMBERS_ID = 286; // 0x11e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PAHLAVI;
+    field public static final int INSCRIPTIONAL_PAHLAVI_ID = 190; // 0xbe
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PARTHIAN;
+    field public static final int INSCRIPTIONAL_PARTHIAN_ID = 189; // 0xbd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock INVALID_CODE;
+    field public static final int INVALID_CODE_ID = -1; // 0xffffffff
+    field public static final android.icu.lang.UCharacter.UnicodeBlock IPA_EXTENSIONS;
+    field public static final int IPA_EXTENSIONS_ID = 5; // 0x5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock JAVANESE;
+    field public static final int JAVANESE_ID = 181; // 0xb5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KAITHI;
+    field public static final int KAITHI_ID = 193; // 0xc1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANA_EXTENDED_A;
+    field public static final int KANA_EXTENDED_A_ID = 275; // 0x113
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANA_SUPPLEMENT;
+    field public static final int KANA_SUPPLEMENT_ID = 203; // 0xcb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANBUN;
+    field public static final int KANBUN_ID = 66; // 0x42
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANGXI_RADICALS;
+    field public static final int KANGXI_RADICALS_ID = 59; // 0x3b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KANNADA;
+    field public static final int KANNADA_ID = 22; // 0x16
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA;
+    field public static final int KATAKANA_ID = 63; // 0x3f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS;
+    field public static final int KATAKANA_PHONETIC_EXTENSIONS_ID = 107; // 0x6b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KAYAH_LI;
+    field public static final int KAYAH_LI_ID = 162; // 0xa2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHAROSHTHI;
+    field public static final int KHAROSHTHI_ID = 137; // 0x89
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHITAN_SMALL_SCRIPT;
+    field public static final int KHITAN_SMALL_SCRIPT_ID = 304; // 0x130
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHMER;
+    field public static final int KHMER_ID = 36; // 0x24
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHMER_SYMBOLS;
+    field public static final int KHMER_SYMBOLS_ID = 113; // 0x71
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHOJKI;
+    field public static final int KHOJKI_ID = 229; // 0xe5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock KHUDAWADI;
+    field public static final int KHUDAWADI_ID = 230; // 0xe6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LAO;
+    field public static final int LAO_ID = 26; // 0x1a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_1_SUPPLEMENT;
+    field public static final int LATIN_1_SUPPLEMENT_ID = 2; // 0x2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_A;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_ADDITIONAL;
+    field public static final int LATIN_EXTENDED_ADDITIONAL_ID = 38; // 0x26
+    field public static final int LATIN_EXTENDED_A_ID = 3; // 0x3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_B;
+    field public static final int LATIN_EXTENDED_B_ID = 4; // 0x4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_C;
+    field public static final int LATIN_EXTENDED_C_ID = 148; // 0x94
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_D;
+    field public static final int LATIN_EXTENDED_D_ID = 149; // 0x95
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_E;
+    field public static final int LATIN_EXTENDED_E_ID = 231; // 0xe7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LEPCHA;
+    field public static final int LEPCHA_ID = 156; // 0x9c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LETTERLIKE_SYMBOLS;
+    field public static final int LETTERLIKE_SYMBOLS_ID = 44; // 0x2c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LIMBU;
+    field public static final int LIMBU_ID = 111; // 0x6f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_A;
+    field public static final int LINEAR_A_ID = 232; // 0xe8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_IDEOGRAMS;
+    field public static final int LINEAR_B_IDEOGRAMS_ID = 118; // 0x76
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_SYLLABARY;
+    field public static final int LINEAR_B_SYLLABARY_ID = 117; // 0x75
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LISU;
+    field public static final int LISU_ID = 176; // 0xb0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LISU_SUPPLEMENT;
+    field public static final int LISU_SUPPLEMENT_ID = 305; // 0x131
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LOW_SURROGATES;
+    field public static final int LOW_SURROGATES_ID = 77; // 0x4d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LYCIAN;
+    field public static final int LYCIAN_ID = 167; // 0xa7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock LYDIAN;
+    field public static final int LYDIAN_ID = 169; // 0xa9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAHAJANI;
+    field public static final int MAHAJANI_ID = 233; // 0xe9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAHJONG_TILES;
+    field public static final int MAHJONG_TILES_ID = 170; // 0xaa
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAKASAR;
+    field public static final int MAKASAR_ID = 287; // 0x11f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MALAYALAM;
+    field public static final int MALAYALAM_ID = 23; // 0x17
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MANDAIC;
+    field public static final int MANDAIC_ID = 198; // 0xc6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MANICHAEAN;
+    field public static final int MANICHAEAN_ID = 234; // 0xea
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MARCHEN;
+    field public static final int MARCHEN_ID = 268; // 0x10c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MASARAM_GONDI;
+    field public static final int MASARAM_GONDI_ID = 276; // 0x114
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS;
+    field public static final int MATHEMATICAL_ALPHANUMERIC_SYMBOLS_ID = 93; // 0x5d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_OPERATORS;
+    field public static final int MATHEMATICAL_OPERATORS_ID = 47; // 0x2f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MAYAN_NUMERALS;
+    field public static final int MAYAN_NUMERALS_ID = 288; // 0x120
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEDEFAIDRIN;
+    field public static final int MEDEFAIDRIN_ID = 289; // 0x121
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK_EXTENSIONS;
+    field public static final int MEETEI_MAYEK_EXTENSIONS_ID = 213; // 0xd5
+    field public static final int MEETEI_MAYEK_ID = 184; // 0xb8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MENDE_KIKAKUI;
+    field public static final int MENDE_KIKAKUI_ID = 235; // 0xeb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_CURSIVE;
+    field public static final int MEROITIC_CURSIVE_ID = 214; // 0xd6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_HIEROGLYPHS;
+    field public static final int MEROITIC_HIEROGLYPHS_ID = 215; // 0xd7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MIAO;
+    field public static final int MIAO_ID = 216; // 0xd8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A;
+    field public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A_ID = 102; // 0x66
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B;
+    field public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B_ID = 105; // 0x69
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS;
+    field public static final int MISCELLANEOUS_SYMBOLS_AND_ARROWS_ID = 115; // 0x73
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS;
+    field public static final int MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS_ID = 205; // 0xcd
+    field public static final int MISCELLANEOUS_SYMBOLS_ID = 55; // 0x37
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_TECHNICAL;
+    field public static final int MISCELLANEOUS_TECHNICAL_ID = 48; // 0x30
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MODI;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MODIFIER_TONE_LETTERS;
+    field public static final int MODIFIER_TONE_LETTERS_ID = 138; // 0x8a
+    field public static final int MODI_ID = 236; // 0xec
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN;
+    field public static final int MONGOLIAN_ID = 37; // 0x25
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN_SUPPLEMENT;
+    field public static final int MONGOLIAN_SUPPLEMENT_ID = 269; // 0x10d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MRO;
+    field public static final int MRO_ID = 237; // 0xed
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MULTANI;
+    field public static final int MULTANI_ID = 259; // 0x103
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MUSICAL_SYMBOLS;
+    field public static final int MUSICAL_SYMBOLS_ID = 92; // 0x5c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_A;
+    field public static final int MYANMAR_EXTENDED_A_ID = 182; // 0xb6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_B;
+    field public static final int MYANMAR_EXTENDED_B_ID = 238; // 0xee
+    field public static final int MYANMAR_ID = 28; // 0x1c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NABATAEAN;
+    field public static final int NABATAEAN_ID = 239; // 0xef
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NANDINAGARI;
+    field public static final int NANDINAGARI_ID = 294; // 0x126
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NEWA;
+    field public static final int NEWA_ID = 270; // 0x10e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NEW_TAI_LUE;
+    field public static final int NEW_TAI_LUE_ID = 139; // 0x8b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NKO;
+    field public static final int NKO_ID = 146; // 0x92
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NO_BLOCK;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NUMBER_FORMS;
+    field public static final int NUMBER_FORMS_ID = 45; // 0x2d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NUSHU;
+    field public static final int NUSHU_ID = 277; // 0x115
+    field public static final android.icu.lang.UCharacter.UnicodeBlock NYIAKENG_PUACHUE_HMONG;
+    field public static final int NYIAKENG_PUACHUE_HMONG_ID = 295; // 0x127
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OGHAM;
+    field public static final int OGHAM_ID = 34; // 0x22
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_HUNGARIAN;
+    field public static final int OLD_HUNGARIAN_ID = 260; // 0x104
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_ITALIC;
+    field public static final int OLD_ITALIC_ID = 88; // 0x58
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_NORTH_ARABIAN;
+    field public static final int OLD_NORTH_ARABIAN_ID = 240; // 0xf0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERMIC;
+    field public static final int OLD_PERMIC_ID = 241; // 0xf1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERSIAN;
+    field public static final int OLD_PERSIAN_ID = 140; // 0x8c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOGDIAN;
+    field public static final int OLD_SOGDIAN_ID = 290; // 0x122
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOUTH_ARABIAN;
+    field public static final int OLD_SOUTH_ARABIAN_ID = 187; // 0xbb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OLD_TURKIC;
+    field public static final int OLD_TURKIC_ID = 191; // 0xbf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OL_CHIKI;
+    field public static final int OL_CHIKI_ID = 157; // 0x9d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OPTICAL_CHARACTER_RECOGNITION;
+    field public static final int OPTICAL_CHARACTER_RECOGNITION_ID = 50; // 0x32
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ORIYA;
+    field public static final int ORIYA_ID = 19; // 0x13
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ORNAMENTAL_DINGBATS;
+    field public static final int ORNAMENTAL_DINGBATS_ID = 242; // 0xf2
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OSAGE;
+    field public static final int OSAGE_ID = 271; // 0x10f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OSMANYA;
+    field public static final int OSMANYA_ID = 122; // 0x7a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock OTTOMAN_SIYAQ_NUMBERS;
+    field public static final int OTTOMAN_SIYAQ_NUMBERS_ID = 296; // 0x128
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PAHAWH_HMONG;
+    field public static final int PAHAWH_HMONG_ID = 243; // 0xf3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PALMYRENE;
+    field public static final int PALMYRENE_ID = 244; // 0xf4
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PAU_CIN_HAU;
+    field public static final int PAU_CIN_HAU_ID = 245; // 0xf5
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHAGS_PA;
+    field public static final int PHAGS_PA_ID = 150; // 0x96
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHAISTOS_DISC;
+    field public static final int PHAISTOS_DISC_ID = 166; // 0xa6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHOENICIAN;
+    field public static final int PHOENICIAN_ID = 151; // 0x97
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS;
+    field public static final int PHONETIC_EXTENSIONS_ID = 114; // 0x72
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT;
+    field public static final int PHONETIC_EXTENSIONS_SUPPLEMENT_ID = 141; // 0x8d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PLAYING_CARDS;
+    field public static final int PLAYING_CARDS_ID = 204; // 0xcc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE_AREA;
+    field public static final int PRIVATE_USE_AREA_ID = 78; // 0x4e
+    field public static final int PRIVATE_USE_ID = 78; // 0x4e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock PSALTER_PAHLAVI;
+    field public static final int PSALTER_PAHLAVI_ID = 246; // 0xf6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock REJANG;
+    field public static final int REJANG_ID = 163; // 0xa3
+    field public static final android.icu.lang.UCharacter.UnicodeBlock RUMI_NUMERAL_SYMBOLS;
+    field public static final int RUMI_NUMERAL_SYMBOLS_ID = 192; // 0xc0
+    field public static final android.icu.lang.UCharacter.UnicodeBlock RUNIC;
+    field public static final int RUNIC_ID = 35; // 0x23
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SAMARITAN;
+    field public static final int SAMARITAN_ID = 172; // 0xac
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SAURASHTRA;
+    field public static final int SAURASHTRA_ID = 161; // 0xa1
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SHARADA;
+    field public static final int SHARADA_ID = 217; // 0xd9
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SHAVIAN;
+    field public static final int SHAVIAN_ID = 121; // 0x79
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SHORTHAND_FORMAT_CONTROLS;
+    field public static final int SHORTHAND_FORMAT_CONTROLS_ID = 247; // 0xf7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SIDDHAM;
+    field public static final int SIDDHAM_ID = 248; // 0xf8
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA_ARCHAIC_NUMBERS;
+    field public static final int SINHALA_ARCHAIC_NUMBERS_ID = 249; // 0xf9
+    field public static final int SINHALA_ID = 24; // 0x18
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_FORM_VARIANTS;
+    field public static final int SMALL_FORM_VARIANTS_ID = 84; // 0x54
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_KANA_EXTENSION;
+    field public static final int SMALL_KANA_EXTENSION_ID = 297; // 0x129
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SOGDIAN;
+    field public static final int SOGDIAN_ID = 291; // 0x123
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SORA_SOMPENG;
+    field public static final int SORA_SOMPENG_ID = 218; // 0xda
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SOYOMBO;
+    field public static final int SOYOMBO_ID = 278; // 0x116
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SPACING_MODIFIER_LETTERS;
+    field public static final int SPACING_MODIFIER_LETTERS_ID = 6; // 0x6
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SPECIALS;
+    field public static final int SPECIALS_ID = 86; // 0x56
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE;
+    field public static final int SUNDANESE_ID = 155; // 0x9b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE_SUPPLEMENT;
+    field public static final int SUNDANESE_SUPPLEMENT_ID = 219; // 0xdb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS;
+    field public static final int SUPERSCRIPTS_AND_SUBSCRIPTS_ID = 41; // 0x29
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_A;
+    field public static final int SUPPLEMENTAL_ARROWS_A_ID = 103; // 0x67
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_B;
+    field public static final int SUPPLEMENTAL_ARROWS_B_ID = 104; // 0x68
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_C;
+    field public static final int SUPPLEMENTAL_ARROWS_C_ID = 250; // 0xfa
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS;
+    field public static final int SUPPLEMENTAL_MATHEMATICAL_OPERATORS_ID = 106; // 0x6a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_PUNCTUATION;
+    field public static final int SUPPLEMENTAL_PUNCTUATION_ID = 142; // 0x8e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS;
+    field public static final int SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS_ID = 261; // 0x105
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A;
+    field public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_A_ID = 109; // 0x6d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B;
+    field public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_B_ID = 110; // 0x6e
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SUTTON_SIGNWRITING;
+    field public static final int SUTTON_SIGNWRITING_ID = 262; // 0x106
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYLOTI_NAGRI;
+    field public static final int SYLOTI_NAGRI_ID = 143; // 0x8f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A;
+    field public static final int SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A_ID = 298; // 0x12a
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_FOR_LEGACY_COMPUTING;
+    field public static final int SYMBOLS_FOR_LEGACY_COMPUTING_ID = 306; // 0x132
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC;
+    field public static final int SYRIAC_ID = 13; // 0xd
+    field public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC_SUPPLEMENT;
+    field public static final int SYRIAC_SUPPLEMENT_ID = 279; // 0x117
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAGALOG;
+    field public static final int TAGALOG_ID = 98; // 0x62
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAGBANWA;
+    field public static final int TAGBANWA_ID = 101; // 0x65
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAGS;
+    field public static final int TAGS_ID = 96; // 0x60
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_LE;
+    field public static final int TAI_LE_ID = 112; // 0x70
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_THAM;
+    field public static final int TAI_THAM_ID = 174; // 0xae
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_VIET;
+    field public static final int TAI_VIET_ID = 183; // 0xb7
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAI_XUAN_JING_SYMBOLS;
+    field public static final int TAI_XUAN_JING_SYMBOLS_ID = 124; // 0x7c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAKRI;
+    field public static final int TAKRI_ID = 220; // 0xdc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL;
+    field public static final int TAMIL_ID = 20; // 0x14
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL_SUPPLEMENT;
+    field public static final int TAMIL_SUPPLEMENT_ID = 299; // 0x12b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_COMPONENTS;
+    field public static final int TANGUT_COMPONENTS_ID = 273; // 0x111
+    field public static final int TANGUT_ID = 272; // 0x110
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_SUPPLEMENT;
+    field public static final int TANGUT_SUPPLEMENT_ID = 307; // 0x133
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TELUGU;
+    field public static final int TELUGU_ID = 21; // 0x15
+    field public static final android.icu.lang.UCharacter.UnicodeBlock THAANA;
+    field public static final int THAANA_ID = 14; // 0xe
+    field public static final android.icu.lang.UCharacter.UnicodeBlock THAI;
+    field public static final int THAI_ID = 25; // 0x19
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TIBETAN;
+    field public static final int TIBETAN_ID = 27; // 0x1b
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TIFINAGH;
+    field public static final int TIFINAGH_ID = 144; // 0x90
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TIRHUTA;
+    field public static final int TIRHUTA_ID = 251; // 0xfb
+    field public static final android.icu.lang.UCharacter.UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS;
+    field public static final int TRANSPORT_AND_MAP_SYMBOLS_ID = 207; // 0xcf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock UGARITIC;
+    field public static final int UGARITIC_ID = 120; // 0x78
+    field public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS;
+    field public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED;
+    field public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_ID = 173; // 0xad
+    field public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_ID = 33; // 0x21
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VAI;
+    field public static final int VAI_ID = 159; // 0x9f
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS;
+    field public static final int VARIATION_SELECTORS_ID = 108; // 0x6c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT;
+    field public static final int VARIATION_SELECTORS_SUPPLEMENT_ID = 125; // 0x7d
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VEDIC_EXTENSIONS;
+    field public static final int VEDIC_EXTENSIONS_ID = 175; // 0xaf
+    field public static final android.icu.lang.UCharacter.UnicodeBlock VERTICAL_FORMS;
+    field public static final int VERTICAL_FORMS_ID = 145; // 0x91
+    field public static final android.icu.lang.UCharacter.UnicodeBlock WANCHO;
+    field public static final int WANCHO_ID = 300; // 0x12c
+    field public static final android.icu.lang.UCharacter.UnicodeBlock WARANG_CITI;
+    field public static final int WARANG_CITI_ID = 252; // 0xfc
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YEZIDI;
+    field public static final int YEZIDI_ID = 308; // 0x134
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YIJING_HEXAGRAM_SYMBOLS;
+    field public static final int YIJING_HEXAGRAM_SYMBOLS_ID = 116; // 0x74
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YI_RADICALS;
+    field public static final int YI_RADICALS_ID = 73; // 0x49
+    field public static final android.icu.lang.UCharacter.UnicodeBlock YI_SYLLABLES;
+    field public static final int YI_SYLLABLES_ID = 72; // 0x48
+    field public static final android.icu.lang.UCharacter.UnicodeBlock ZANABAZAR_SQUARE;
+    field public static final int ZANABAZAR_SQUARE_ID = 280; // 0x118
+  }
+
+  public static interface UCharacter.VerticalOrientation {
+    field public static final int ROTATED = 0; // 0x0
+    field public static final int TRANSFORMED_ROTATED = 1; // 0x1
+    field public static final int TRANSFORMED_UPRIGHT = 2; // 0x2
+    field public static final int UPRIGHT = 3; // 0x3
+  }
+
+  public static interface UCharacter.WordBreak {
+    field public static final int ALETTER = 1; // 0x1
+    field public static final int CR = 8; // 0x8
+    field public static final int DOUBLE_QUOTE = 16; // 0x10
+    field public static final int EXTEND = 9; // 0x9
+    field public static final int EXTENDNUMLET = 7; // 0x7
+    field public static final int E_BASE = 17; // 0x11
+    field public static final int E_BASE_GAZ = 18; // 0x12
+    field public static final int E_MODIFIER = 19; // 0x13
+    field public static final int FORMAT = 2; // 0x2
+    field public static final int GLUE_AFTER_ZWJ = 20; // 0x14
+    field public static final int HEBREW_LETTER = 14; // 0xe
+    field public static final int KATAKANA = 3; // 0x3
+    field public static final int LF = 10; // 0xa
+    field public static final int MIDLETTER = 4; // 0x4
+    field public static final int MIDNUM = 5; // 0x5
+    field public static final int MIDNUMLET = 11; // 0xb
+    field public static final int NEWLINE = 12; // 0xc
+    field public static final int NUMERIC = 6; // 0x6
+    field public static final int OTHER = 0; // 0x0
+    field public static final int REGIONAL_INDICATOR = 13; // 0xd
+    field public static final int SINGLE_QUOTE = 15; // 0xf
+    field public static final int WSEGSPACE = 22; // 0x16
+    field public static final int ZWJ = 21; // 0x15
+  }
+
+  public final class UCharacterCategory implements android.icu.lang.UCharacterEnums.ECharacterCategory {
+    method public static String toString(int);
+  }
+
+  public final class UCharacterDirection implements android.icu.lang.UCharacterEnums.ECharacterDirection {
+    method public static String toString(int);
+  }
+
+  public class UCharacterEnums {
+  }
+
+  public static interface UCharacterEnums.ECharacterCategory {
+    field public static final byte COMBINING_SPACING_MARK = 8; // 0x8
+    field public static final byte CONNECTOR_PUNCTUATION = 22; // 0x16
+    field public static final byte CONTROL = 15; // 0xf
+    field public static final byte CURRENCY_SYMBOL = 25; // 0x19
+    field public static final byte DASH_PUNCTUATION = 19; // 0x13
+    field public static final byte DECIMAL_DIGIT_NUMBER = 9; // 0x9
+    field public static final byte ENCLOSING_MARK = 7; // 0x7
+    field public static final byte END_PUNCTUATION = 21; // 0x15
+    field public static final byte FINAL_PUNCTUATION = 29; // 0x1d
+    field public static final byte FINAL_QUOTE_PUNCTUATION = 29; // 0x1d
+    field public static final byte FORMAT = 16; // 0x10
+    field public static final byte GENERAL_OTHER_TYPES = 0; // 0x0
+    field public static final byte INITIAL_PUNCTUATION = 28; // 0x1c
+    field public static final byte INITIAL_QUOTE_PUNCTUATION = 28; // 0x1c
+    field public static final byte LETTER_NUMBER = 10; // 0xa
+    field public static final byte LINE_SEPARATOR = 13; // 0xd
+    field public static final byte LOWERCASE_LETTER = 2; // 0x2
+    field public static final byte MATH_SYMBOL = 24; // 0x18
+    field public static final byte MODIFIER_LETTER = 4; // 0x4
+    field public static final byte MODIFIER_SYMBOL = 26; // 0x1a
+    field public static final byte NON_SPACING_MARK = 6; // 0x6
+    field public static final byte OTHER_LETTER = 5; // 0x5
+    field public static final byte OTHER_NUMBER = 11; // 0xb
+    field public static final byte OTHER_PUNCTUATION = 23; // 0x17
+    field public static final byte OTHER_SYMBOL = 27; // 0x1b
+    field public static final byte PARAGRAPH_SEPARATOR = 14; // 0xe
+    field public static final byte PRIVATE_USE = 17; // 0x11
+    field public static final byte SPACE_SEPARATOR = 12; // 0xc
+    field public static final byte START_PUNCTUATION = 20; // 0x14
+    field public static final byte SURROGATE = 18; // 0x12
+    field public static final byte TITLECASE_LETTER = 3; // 0x3
+    field public static final byte UNASSIGNED = 0; // 0x0
+    field public static final byte UPPERCASE_LETTER = 1; // 0x1
+  }
+
+  public static interface UCharacterEnums.ECharacterDirection {
+    field public static final int ARABIC_NUMBER = 5; // 0x5
+    field public static final int BLOCK_SEPARATOR = 7; // 0x7
+    field public static final int BOUNDARY_NEUTRAL = 18; // 0x12
+    field public static final int COMMON_NUMBER_SEPARATOR = 6; // 0x6
+    field public static final byte DIRECTIONALITY_ARABIC_NUMBER = 5; // 0x5
+    field public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 18; // 0x12
+    field public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 6; // 0x6
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 2; // 0x2
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+    field public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+    field public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+    field public static final byte DIRECTIONALITY_NONSPACING_MARK = 17; // 0x11
+    field public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 10; // 0xa
+    field public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 7; // 0x7
+    field public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 16; // 0x10
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+    field public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+    field public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 8; // 0x8
+    field public static final byte DIRECTIONALITY_UNDEFINED = -1; // 0xffffffff
+    field public static final byte DIRECTIONALITY_WHITESPACE = 9; // 0x9
+    field public static final int DIR_NON_SPACING_MARK = 17; // 0x11
+    field public static final int EUROPEAN_NUMBER = 2; // 0x2
+    field public static final int EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+    field public static final int EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+    field public static final byte FIRST_STRONG_ISOLATE = 19; // 0x13
+    field public static final int LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+    field public static final byte LEFT_TO_RIGHT_ISOLATE = 20; // 0x14
+    field public static final int LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+    field public static final int OTHER_NEUTRAL = 10; // 0xa
+    field public static final int POP_DIRECTIONAL_FORMAT = 16; // 0x10
+    field public static final byte POP_DIRECTIONAL_ISOLATE = 22; // 0x16
+    field public static final int RIGHT_TO_LEFT = 1; // 0x1
+    field public static final int RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+    field public static final int RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+    field public static final byte RIGHT_TO_LEFT_ISOLATE = 21; // 0x15
+    field public static final int RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+    field public static final int SEGMENT_SEPARATOR = 8; // 0x8
+    field public static final int WHITE_SPACE_NEUTRAL = 9; // 0x9
+  }
+
+  public interface UProperty {
+    field public static final int AGE = 16384; // 0x4000
+    field public static final int ALPHABETIC = 0; // 0x0
+    field public static final int ASCII_HEX_DIGIT = 1; // 0x1
+    field public static final int BIDI_CLASS = 4096; // 0x1000
+    field public static final int BIDI_CONTROL = 2; // 0x2
+    field public static final int BIDI_MIRRORED = 3; // 0x3
+    field public static final int BIDI_MIRRORING_GLYPH = 16385; // 0x4001
+    field public static final int BIDI_PAIRED_BRACKET = 16397; // 0x400d
+    field public static final int BIDI_PAIRED_BRACKET_TYPE = 4117; // 0x1015
+    field public static final int BINARY_START = 0; // 0x0
+    field public static final int BLOCK = 4097; // 0x1001
+    field public static final int CANONICAL_COMBINING_CLASS = 4098; // 0x1002
+    field public static final int CASED = 49; // 0x31
+    field public static final int CASE_FOLDING = 16386; // 0x4002
+    field public static final int CASE_IGNORABLE = 50; // 0x32
+    field public static final int CASE_SENSITIVE = 34; // 0x22
+    field public static final int CHANGES_WHEN_CASEFOLDED = 54; // 0x36
+    field public static final int CHANGES_WHEN_CASEMAPPED = 55; // 0x37
+    field public static final int CHANGES_WHEN_LOWERCASED = 51; // 0x33
+    field public static final int CHANGES_WHEN_NFKC_CASEFOLDED = 56; // 0x38
+    field public static final int CHANGES_WHEN_TITLECASED = 53; // 0x35
+    field public static final int CHANGES_WHEN_UPPERCASED = 52; // 0x34
+    field public static final int DASH = 4; // 0x4
+    field public static final int DECOMPOSITION_TYPE = 4099; // 0x1003
+    field public static final int DEFAULT_IGNORABLE_CODE_POINT = 5; // 0x5
+    field public static final int DEPRECATED = 6; // 0x6
+    field public static final int DIACRITIC = 7; // 0x7
+    field public static final int DOUBLE_START = 12288; // 0x3000
+    field public static final int EAST_ASIAN_WIDTH = 4100; // 0x1004
+    field public static final int EMOJI = 57; // 0x39
+    field public static final int EMOJI_COMPONENT = 61; // 0x3d
+    field public static final int EMOJI_MODIFIER = 59; // 0x3b
+    field public static final int EMOJI_MODIFIER_BASE = 60; // 0x3c
+    field public static final int EMOJI_PRESENTATION = 58; // 0x3a
+    field public static final int EXTENDED_PICTOGRAPHIC = 64; // 0x40
+    field public static final int EXTENDER = 8; // 0x8
+    field public static final int FULL_COMPOSITION_EXCLUSION = 9; // 0x9
+    field public static final int GENERAL_CATEGORY = 4101; // 0x1005
+    field public static final int GENERAL_CATEGORY_MASK = 8192; // 0x2000
+    field public static final int GRAPHEME_BASE = 10; // 0xa
+    field public static final int GRAPHEME_CLUSTER_BREAK = 4114; // 0x1012
+    field public static final int GRAPHEME_EXTEND = 11; // 0xb
+    field public static final int GRAPHEME_LINK = 12; // 0xc
+    field public static final int HANGUL_SYLLABLE_TYPE = 4107; // 0x100b
+    field public static final int HEX_DIGIT = 13; // 0xd
+    field public static final int HYPHEN = 14; // 0xe
+    field public static final int IDEOGRAPHIC = 17; // 0x11
+    field public static final int IDS_BINARY_OPERATOR = 18; // 0x12
+    field public static final int IDS_TRINARY_OPERATOR = 19; // 0x13
+    field public static final int ID_CONTINUE = 15; // 0xf
+    field public static final int ID_START = 16; // 0x10
+    field public static final int INDIC_POSITIONAL_CATEGORY = 4118; // 0x1016
+    field public static final int INDIC_SYLLABIC_CATEGORY = 4119; // 0x1017
+    field public static final int INT_START = 4096; // 0x1000
+    field public static final int JOINING_GROUP = 4102; // 0x1006
+    field public static final int JOINING_TYPE = 4103; // 0x1007
+    field public static final int JOIN_CONTROL = 20; // 0x14
+    field public static final int LEAD_CANONICAL_COMBINING_CLASS = 4112; // 0x1010
+    field public static final int LINE_BREAK = 4104; // 0x1008
+    field public static final int LOGICAL_ORDER_EXCEPTION = 21; // 0x15
+    field public static final int LOWERCASE = 22; // 0x16
+    field public static final int LOWERCASE_MAPPING = 16388; // 0x4004
+    field public static final int MASK_START = 8192; // 0x2000
+    field public static final int MATH = 23; // 0x17
+    field public static final int NAME = 16389; // 0x4005
+    field public static final int NFC_INERT = 39; // 0x27
+    field public static final int NFC_QUICK_CHECK = 4110; // 0x100e
+    field public static final int NFD_INERT = 37; // 0x25
+    field public static final int NFD_QUICK_CHECK = 4108; // 0x100c
+    field public static final int NFKC_INERT = 40; // 0x28
+    field public static final int NFKC_QUICK_CHECK = 4111; // 0x100f
+    field public static final int NFKD_INERT = 38; // 0x26
+    field public static final int NFKD_QUICK_CHECK = 4109; // 0x100d
+    field public static final int NONCHARACTER_CODE_POINT = 24; // 0x18
+    field public static final int NUMERIC_TYPE = 4105; // 0x1009
+    field public static final int NUMERIC_VALUE = 12288; // 0x3000
+    field public static final int OTHER_PROPERTY_START = 28672; // 0x7000
+    field public static final int PATTERN_SYNTAX = 42; // 0x2a
+    field public static final int PATTERN_WHITE_SPACE = 43; // 0x2b
+    field public static final int POSIX_ALNUM = 44; // 0x2c
+    field public static final int POSIX_BLANK = 45; // 0x2d
+    field public static final int POSIX_GRAPH = 46; // 0x2e
+    field public static final int POSIX_PRINT = 47; // 0x2f
+    field public static final int POSIX_XDIGIT = 48; // 0x30
+    field public static final int PREPENDED_CONCATENATION_MARK = 63; // 0x3f
+    field public static final int QUOTATION_MARK = 25; // 0x19
+    field public static final int RADICAL = 26; // 0x1a
+    field public static final int REGIONAL_INDICATOR = 62; // 0x3e
+    field public static final int SCRIPT = 4106; // 0x100a
+    field public static final int SCRIPT_EXTENSIONS = 28672; // 0x7000
+    field public static final int SEGMENT_STARTER = 41; // 0x29
+    field public static final int SENTENCE_BREAK = 4115; // 0x1013
+    field public static final int SIMPLE_CASE_FOLDING = 16390; // 0x4006
+    field public static final int SIMPLE_LOWERCASE_MAPPING = 16391; // 0x4007
+    field public static final int SIMPLE_TITLECASE_MAPPING = 16392; // 0x4008
+    field public static final int SIMPLE_UPPERCASE_MAPPING = 16393; // 0x4009
+    field public static final int SOFT_DOTTED = 27; // 0x1b
+    field public static final int STRING_START = 16384; // 0x4000
+    field public static final int S_TERM = 35; // 0x23
+    field public static final int TERMINAL_PUNCTUATION = 28; // 0x1c
+    field public static final int TITLECASE_MAPPING = 16394; // 0x400a
+    field public static final int TRAIL_CANONICAL_COMBINING_CLASS = 4113; // 0x1011
+    field public static final int UNIFIED_IDEOGRAPH = 29; // 0x1d
+    field public static final int UPPERCASE = 30; // 0x1e
+    field public static final int UPPERCASE_MAPPING = 16396; // 0x400c
+    field public static final int VARIATION_SELECTOR = 36; // 0x24
+    field public static final int VERTICAL_ORIENTATION = 4120; // 0x1018
+    field public static final int WHITE_SPACE = 31; // 0x1f
+    field public static final int WORD_BREAK = 4116; // 0x1014
+    field public static final int XID_CONTINUE = 32; // 0x20
+    field public static final int XID_START = 33; // 0x21
+  }
+
+  public static interface UProperty.NameChoice {
+    field public static final int LONG = 1; // 0x1
+    field public static final int SHORT = 0; // 0x0
+  }
+
+  public final class UScript {
+    method public static boolean breaksBetweenLetters(int);
+    method public static int[] getCode(java.util.Locale);
+    method public static int[] getCode(android.icu.util.ULocale);
+    method public static int[] getCode(String);
+    method public static int getCodeFromName(String);
+    method public static String getName(int);
+    method public static String getSampleString(int);
+    method public static int getScript(int);
+    method public static int getScriptExtensions(int, java.util.BitSet);
+    method public static String getShortName(int);
+    method public static android.icu.lang.UScript.ScriptUsage getUsage(int);
+    method public static boolean hasScript(int, int);
+    method public static boolean isCased(int);
+    method public static boolean isRightToLeft(int);
+    field public static final int ADLAM = 167; // 0xa7
+    field public static final int AFAKA = 147; // 0x93
+    field public static final int AHOM = 161; // 0xa1
+    field public static final int ANATOLIAN_HIEROGLYPHS = 156; // 0x9c
+    field public static final int ARABIC = 2; // 0x2
+    field public static final int ARMENIAN = 3; // 0x3
+    field public static final int AVESTAN = 117; // 0x75
+    field public static final int BALINESE = 62; // 0x3e
+    field public static final int BAMUM = 130; // 0x82
+    field public static final int BASSA_VAH = 134; // 0x86
+    field public static final int BATAK = 63; // 0x3f
+    field public static final int BENGALI = 4; // 0x4
+    field public static final int BHAIKSUKI = 168; // 0xa8
+    field public static final int BLISSYMBOLS = 64; // 0x40
+    field public static final int BOOK_PAHLAVI = 124; // 0x7c
+    field public static final int BOPOMOFO = 5; // 0x5
+    field public static final int BRAHMI = 65; // 0x41
+    field public static final int BRAILLE = 46; // 0x2e
+    field public static final int BUGINESE = 55; // 0x37
+    field public static final int BUHID = 44; // 0x2c
+    field public static final int CANADIAN_ABORIGINAL = 40; // 0x28
+    field public static final int CARIAN = 104; // 0x68
+    field public static final int CAUCASIAN_ALBANIAN = 159; // 0x9f
+    field public static final int CHAKMA = 118; // 0x76
+    field public static final int CHAM = 66; // 0x42
+    field public static final int CHEROKEE = 6; // 0x6
+    field public static final int CHORASMIAN = 189; // 0xbd
+    field public static final int CIRTH = 67; // 0x43
+    field public static final int COMMON = 0; // 0x0
+    field public static final int COPTIC = 7; // 0x7
+    field public static final int CUNEIFORM = 101; // 0x65
+    field public static final int CYPRIOT = 47; // 0x2f
+    field public static final int CYRILLIC = 8; // 0x8
+    field public static final int DEMOTIC_EGYPTIAN = 69; // 0x45
+    field public static final int DESERET = 9; // 0x9
+    field public static final int DEVANAGARI = 10; // 0xa
+    field public static final int DIVES_AKURU = 190; // 0xbe
+    field public static final int DOGRA = 178; // 0xb2
+    field public static final int DUPLOYAN = 135; // 0x87
+    field public static final int EASTERN_SYRIAC = 97; // 0x61
+    field public static final int EGYPTIAN_HIEROGLYPHS = 71; // 0x47
+    field public static final int ELBASAN = 136; // 0x88
+    field public static final int ELYMAIC = 185; // 0xb9
+    field public static final int ESTRANGELO_SYRIAC = 95; // 0x5f
+    field public static final int ETHIOPIC = 11; // 0xb
+    field public static final int GEORGIAN = 12; // 0xc
+    field public static final int GLAGOLITIC = 56; // 0x38
+    field public static final int GOTHIC = 13; // 0xd
+    field public static final int GRANTHA = 137; // 0x89
+    field public static final int GREEK = 14; // 0xe
+    field public static final int GUJARATI = 15; // 0xf
+    field public static final int GUNJALA_GONDI = 179; // 0xb3
+    field public static final int GURMUKHI = 16; // 0x10
+    field public static final int HAN = 17; // 0x11
+    field public static final int HANGUL = 18; // 0x12
+    field public static final int HANIFI_ROHINGYA = 182; // 0xb6
+    field public static final int HANUNOO = 43; // 0x2b
+    field public static final int HAN_WITH_BOPOMOFO = 172; // 0xac
+    field public static final int HARAPPAN_INDUS = 77; // 0x4d
+    field public static final int HATRAN = 162; // 0xa2
+    field public static final int HEBREW = 19; // 0x13
+    field public static final int HIERATIC_EGYPTIAN = 70; // 0x46
+    field public static final int HIRAGANA = 20; // 0x14
+    field public static final int IMPERIAL_ARAMAIC = 116; // 0x74
+    field public static final int INHERITED = 1; // 0x1
+    field public static final int INSCRIPTIONAL_PAHLAVI = 122; // 0x7a
+    field public static final int INSCRIPTIONAL_PARTHIAN = 125; // 0x7d
+    field public static final int INVALID_CODE = -1; // 0xffffffff
+    field public static final int JAMO = 173; // 0xad
+    field public static final int JAPANESE = 105; // 0x69
+    field public static final int JAVANESE = 78; // 0x4e
+    field public static final int JURCHEN = 148; // 0x94
+    field public static final int KAITHI = 120; // 0x78
+    field public static final int KANNADA = 21; // 0x15
+    field public static final int KATAKANA = 22; // 0x16
+    field public static final int KATAKANA_OR_HIRAGANA = 54; // 0x36
+    field public static final int KAYAH_LI = 79; // 0x4f
+    field public static final int KHAROSHTHI = 57; // 0x39
+    field public static final int KHITAN_SMALL_SCRIPT = 191; // 0xbf
+    field public static final int KHMER = 23; // 0x17
+    field public static final int KHOJKI = 157; // 0x9d
+    field public static final int KHUDAWADI = 145; // 0x91
+    field public static final int KHUTSURI = 72; // 0x48
+    field public static final int KOREAN = 119; // 0x77
+    field public static final int KPELLE = 138; // 0x8a
+    field public static final int LANNA = 106; // 0x6a
+    field public static final int LAO = 24; // 0x18
+    field public static final int LATIN = 25; // 0x19
+    field public static final int LATIN_FRAKTUR = 80; // 0x50
+    field public static final int LATIN_GAELIC = 81; // 0x51
+    field public static final int LEPCHA = 82; // 0x52
+    field public static final int LIMBU = 48; // 0x30
+    field public static final int LINEAR_A = 83; // 0x53
+    field public static final int LINEAR_B = 49; // 0x31
+    field public static final int LISU = 131; // 0x83
+    field public static final int LOMA = 139; // 0x8b
+    field public static final int LYCIAN = 107; // 0x6b
+    field public static final int LYDIAN = 108; // 0x6c
+    field public static final int MAHAJANI = 160; // 0xa0
+    field public static final int MAKASAR = 180; // 0xb4
+    field public static final int MALAYALAM = 26; // 0x1a
+    field public static final int MANDAEAN = 84; // 0x54
+    field public static final int MANDAIC = 84; // 0x54
+    field public static final int MANICHAEAN = 121; // 0x79
+    field public static final int MARCHEN = 169; // 0xa9
+    field public static final int MASARAM_GONDI = 175; // 0xaf
+    field public static final int MATHEMATICAL_NOTATION = 128; // 0x80
+    field public static final int MAYAN_HIEROGLYPHS = 85; // 0x55
+    field public static final int MEDEFAIDRIN = 181; // 0xb5
+    field public static final int MEITEI_MAYEK = 115; // 0x73
+    field public static final int MENDE = 140; // 0x8c
+    field public static final int MEROITIC = 86; // 0x56
+    field public static final int MEROITIC_CURSIVE = 141; // 0x8d
+    field public static final int MEROITIC_HIEROGLYPHS = 86; // 0x56
+    field public static final int MIAO = 92; // 0x5c
+    field public static final int MODI = 163; // 0xa3
+    field public static final int MONGOLIAN = 27; // 0x1b
+    field public static final int MOON = 114; // 0x72
+    field public static final int MRO = 149; // 0x95
+    field public static final int MULTANI = 164; // 0xa4
+    field public static final int MYANMAR = 28; // 0x1c
+    field public static final int NABATAEAN = 143; // 0x8f
+    field public static final int NAKHI_GEBA = 132; // 0x84
+    field public static final int NANDINAGARI = 187; // 0xbb
+    field public static final int NEWA = 170; // 0xaa
+    field public static final int NEW_TAI_LUE = 59; // 0x3b
+    field public static final int NKO = 87; // 0x57
+    field public static final int NUSHU = 150; // 0x96
+    field public static final int NYIAKENG_PUACHUE_HMONG = 186; // 0xba
+    field public static final int OGHAM = 29; // 0x1d
+    field public static final int OLD_CHURCH_SLAVONIC_CYRILLIC = 68; // 0x44
+    field public static final int OLD_HUNGARIAN = 76; // 0x4c
+    field public static final int OLD_ITALIC = 30; // 0x1e
+    field public static final int OLD_NORTH_ARABIAN = 142; // 0x8e
+    field public static final int OLD_PERMIC = 89; // 0x59
+    field public static final int OLD_PERSIAN = 61; // 0x3d
+    field public static final int OLD_SOGDIAN = 184; // 0xb8
+    field public static final int OLD_SOUTH_ARABIAN = 133; // 0x85
+    field public static final int OL_CHIKI = 109; // 0x6d
+    field public static final int ORIYA = 31; // 0x1f
+    field public static final int ORKHON = 88; // 0x58
+    field public static final int OSAGE = 171; // 0xab
+    field public static final int OSMANYA = 50; // 0x32
+    field public static final int PAHAWH_HMONG = 75; // 0x4b
+    field public static final int PALMYRENE = 144; // 0x90
+    field public static final int PAU_CIN_HAU = 165; // 0xa5
+    field public static final int PHAGS_PA = 90; // 0x5a
+    field public static final int PHOENICIAN = 91; // 0x5b
+    field public static final int PHONETIC_POLLARD = 92; // 0x5c
+    field public static final int PSALTER_PAHLAVI = 123; // 0x7b
+    field public static final int REJANG = 110; // 0x6e
+    field public static final int RONGORONGO = 93; // 0x5d
+    field public static final int RUNIC = 32; // 0x20
+    field public static final int SAMARITAN = 126; // 0x7e
+    field public static final int SARATI = 94; // 0x5e
+    field public static final int SAURASHTRA = 111; // 0x6f
+    field public static final int SHARADA = 151; // 0x97
+    field public static final int SHAVIAN = 51; // 0x33
+    field public static final int SIDDHAM = 166; // 0xa6
+    field public static final int SIGN_WRITING = 112; // 0x70
+    field public static final int SIMPLIFIED_HAN = 73; // 0x49
+    field public static final int SINDHI = 145; // 0x91
+    field public static final int SINHALA = 33; // 0x21
+    field public static final int SOGDIAN = 183; // 0xb7
+    field public static final int SORA_SOMPENG = 152; // 0x98
+    field public static final int SOYOMBO = 176; // 0xb0
+    field public static final int SUNDANESE = 113; // 0x71
+    field public static final int SYLOTI_NAGRI = 58; // 0x3a
+    field public static final int SYMBOLS = 129; // 0x81
+    field public static final int SYMBOLS_EMOJI = 174; // 0xae
+    field public static final int SYRIAC = 34; // 0x22
+    field public static final int TAGALOG = 42; // 0x2a
+    field public static final int TAGBANWA = 45; // 0x2d
+    field public static final int TAI_LE = 52; // 0x34
+    field public static final int TAI_VIET = 127; // 0x7f
+    field public static final int TAKRI = 153; // 0x99
+    field public static final int TAMIL = 35; // 0x23
+    field public static final int TANGUT = 154; // 0x9a
+    field public static final int TELUGU = 36; // 0x24
+    field public static final int TENGWAR = 98; // 0x62
+    field public static final int THAANA = 37; // 0x25
+    field public static final int THAI = 38; // 0x26
+    field public static final int TIBETAN = 39; // 0x27
+    field public static final int TIFINAGH = 60; // 0x3c
+    field public static final int TIRHUTA = 158; // 0x9e
+    field public static final int TRADITIONAL_HAN = 74; // 0x4a
+    field public static final int UCAS = 40; // 0x28
+    field public static final int UGARITIC = 53; // 0x35
+    field public static final int UNKNOWN = 103; // 0x67
+    field public static final int UNWRITTEN_LANGUAGES = 102; // 0x66
+    field public static final int VAI = 99; // 0x63
+    field public static final int VISIBLE_SPEECH = 100; // 0x64
+    field public static final int WANCHO = 188; // 0xbc
+    field public static final int WARANG_CITI = 146; // 0x92
+    field public static final int WESTERN_SYRIAC = 96; // 0x60
+    field public static final int WOLEAI = 155; // 0x9b
+    field public static final int YEZIDI = 192; // 0xc0
+    field public static final int YI = 41; // 0x29
+    field public static final int ZANABAZAR_SQUARE = 177; // 0xb1
+  }
+
+  public enum UScript.ScriptUsage {
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage ASPIRATIONAL;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage EXCLUDED;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage LIMITED_USE;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage NOT_ENCODED;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage RECOMMENDED;
+    enum_constant public static final android.icu.lang.UScript.ScriptUsage UNKNOWN;
+  }
+
+}
+
+package android.icu.math {
+
+  public class BigDecimal extends java.lang.Number implements java.lang.Comparable<android.icu.math.BigDecimal> java.io.Serializable {
+    ctor public BigDecimal(java.math.BigDecimal);
+    ctor public BigDecimal(java.math.BigInteger);
+    ctor public BigDecimal(java.math.BigInteger, int);
+    ctor public BigDecimal(char[]);
+    ctor public BigDecimal(char[], int, int);
+    ctor public BigDecimal(double);
+    ctor public BigDecimal(int);
+    ctor public BigDecimal(long);
+    ctor public BigDecimal(String);
+    method public android.icu.math.BigDecimal abs();
+    method public android.icu.math.BigDecimal abs(android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal add(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal add(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public byte byteValueExact();
+    method public int compareTo(android.icu.math.BigDecimal);
+    method public int compareTo(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal, int);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal, int, int);
+    method public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public double doubleValue();
+    method public float floatValue();
+    method public String format(int, int);
+    method public String format(int, int, int, int, int, int);
+    method public int intValue();
+    method public int intValueExact();
+    method public long longValue();
+    method public long longValueExact();
+    method public android.icu.math.BigDecimal max(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal max(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal min(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal min(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal movePointLeft(int);
+    method public android.icu.math.BigDecimal movePointRight(int);
+    method public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal negate();
+    method public android.icu.math.BigDecimal negate(android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal plus();
+    method public android.icu.math.BigDecimal plus(android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public int scale();
+    method public android.icu.math.BigDecimal setScale(int);
+    method public android.icu.math.BigDecimal setScale(int, int);
+    method public short shortValueExact();
+    method public int signum();
+    method public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal);
+    method public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal, android.icu.math.MathContext);
+    method public java.math.BigDecimal toBigDecimal();
+    method public java.math.BigInteger toBigInteger();
+    method public java.math.BigInteger toBigIntegerExact();
+    method public char[] toCharArray();
+    method public java.math.BigInteger unscaledValue();
+    method public static android.icu.math.BigDecimal valueOf(double);
+    method public static android.icu.math.BigDecimal valueOf(long);
+    method public static android.icu.math.BigDecimal valueOf(long, int);
+    field public static final android.icu.math.BigDecimal ONE;
+    field public static final int ROUND_CEILING = 2; // 0x2
+    field public static final int ROUND_DOWN = 1; // 0x1
+    field public static final int ROUND_FLOOR = 3; // 0x3
+    field public static final int ROUND_HALF_DOWN = 5; // 0x5
+    field public static final int ROUND_HALF_EVEN = 6; // 0x6
+    field public static final int ROUND_HALF_UP = 4; // 0x4
+    field public static final int ROUND_UNNECESSARY = 7; // 0x7
+    field public static final int ROUND_UP = 0; // 0x0
+    field public static final android.icu.math.BigDecimal TEN;
+    field public static final android.icu.math.BigDecimal ZERO;
+  }
+
+  public final class MathContext implements java.io.Serializable {
+    ctor public MathContext(int);
+    ctor public MathContext(int, int);
+    ctor public MathContext(int, int, boolean);
+    ctor public MathContext(int, int, boolean, int);
+    method public int getDigits();
+    method public int getForm();
+    method public boolean getLostDigits();
+    method public int getRoundingMode();
+    field public static final android.icu.math.MathContext DEFAULT;
+    field public static final int ENGINEERING = 2; // 0x2
+    field public static final int PLAIN = 0; // 0x0
+    field public static final int ROUND_CEILING = 2; // 0x2
+    field public static final int ROUND_DOWN = 1; // 0x1
+    field public static final int ROUND_FLOOR = 3; // 0x3
+    field public static final int ROUND_HALF_DOWN = 5; // 0x5
+    field public static final int ROUND_HALF_EVEN = 6; // 0x6
+    field public static final int ROUND_HALF_UP = 4; // 0x4
+    field public static final int ROUND_UNNECESSARY = 7; // 0x7
+    field public static final int ROUND_UP = 0; // 0x0
+    field public static final int SCIENTIFIC = 1; // 0x1
+  }
+
+}
+
+package android.icu.number {
+
+  public class CompactNotation extends android.icu.number.Notation {
+  }
+
+  public abstract class CurrencyPrecision extends android.icu.number.Precision {
+    method public android.icu.number.Precision withCurrency(android.icu.util.Currency);
+  }
+
+  public class FormattedNumber implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.math.BigDecimal toBigDecimal();
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public class FormattedNumberRange implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public java.math.BigDecimal getFirstBigDecimal();
+    method public android.icu.number.NumberRangeFormatter.RangeIdentityResult getIdentityResult();
+    method public java.math.BigDecimal getSecondBigDecimal();
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public abstract class FractionPrecision extends android.icu.number.Precision {
+    method public android.icu.number.Precision withMaxDigits(int);
+    method public android.icu.number.Precision withMinDigits(int);
+  }
+
+  public class IntegerWidth {
+    method public android.icu.number.IntegerWidth truncateAt(int);
+    method public static android.icu.number.IntegerWidth zeroFillTo(int);
+  }
+
+  public class LocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.LocalizedNumberFormatter> {
+    method public android.icu.number.FormattedNumber format(long);
+    method public android.icu.number.FormattedNumber format(double);
+    method public android.icu.number.FormattedNumber format(Number);
+    method public android.icu.number.FormattedNumber format(android.icu.util.Measure);
+    method public java.text.Format toFormat();
+  }
+
+  public class LocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.LocalizedNumberRangeFormatter> {
+    method public android.icu.number.FormattedNumberRange formatRange(int, int);
+    method public android.icu.number.FormattedNumberRange formatRange(double, double);
+    method public android.icu.number.FormattedNumberRange formatRange(Number, Number);
+  }
+
+  public class Notation {
+    method public static android.icu.number.CompactNotation compactLong();
+    method public static android.icu.number.CompactNotation compactShort();
+    method public static android.icu.number.ScientificNotation engineering();
+    method public static android.icu.number.ScientificNotation scientific();
+    method public static android.icu.number.SimpleNotation simple();
+  }
+
+  public final class NumberFormatter {
+    method public static android.icu.number.UnlocalizedNumberFormatter with();
+    method public static android.icu.number.LocalizedNumberFormatter withLocale(java.util.Locale);
+    method public static android.icu.number.LocalizedNumberFormatter withLocale(android.icu.util.ULocale);
+  }
+
+  public enum NumberFormatter.DecimalSeparatorDisplay {
+    enum_constant public static final android.icu.number.NumberFormatter.DecimalSeparatorDisplay ALWAYS;
+    enum_constant public static final android.icu.number.NumberFormatter.DecimalSeparatorDisplay AUTO;
+  }
+
+  public enum NumberFormatter.GroupingStrategy {
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy AUTO;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy MIN2;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy OFF;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy ON_ALIGNED;
+    enum_constant public static final android.icu.number.NumberFormatter.GroupingStrategy THOUSANDS;
+  }
+
+  public enum NumberFormatter.SignDisplay {
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ACCOUNTING;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ACCOUNTING_ALWAYS;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ACCOUNTING_EXCEPT_ZERO;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay ALWAYS;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay AUTO;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay EXCEPT_ZERO;
+    enum_constant public static final android.icu.number.NumberFormatter.SignDisplay NEVER;
+  }
+
+  public enum NumberFormatter.UnitWidth {
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth FULL_NAME;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth HIDDEN;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth ISO_CODE;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth NARROW;
+    enum_constant public static final android.icu.number.NumberFormatter.UnitWidth SHORT;
+  }
+
+  public abstract class NumberFormatterSettings<T extends android.icu.number.NumberFormatterSettings<?>> {
+    method public T decimal(android.icu.number.NumberFormatter.DecimalSeparatorDisplay);
+    method public T grouping(android.icu.number.NumberFormatter.GroupingStrategy);
+    method public T integerWidth(android.icu.number.IntegerWidth);
+    method public T notation(android.icu.number.Notation);
+    method public T perUnit(android.icu.util.MeasureUnit);
+    method public T precision(android.icu.number.Precision);
+    method public T roundingMode(java.math.RoundingMode);
+    method public T scale(android.icu.number.Scale);
+    method public T sign(android.icu.number.NumberFormatter.SignDisplay);
+    method public T symbols(android.icu.text.DecimalFormatSymbols);
+    method public T symbols(android.icu.text.NumberingSystem);
+    method public T unit(android.icu.util.MeasureUnit);
+    method public T unitWidth(android.icu.number.NumberFormatter.UnitWidth);
+  }
+
+  public abstract class NumberRangeFormatter {
+    method public static android.icu.number.UnlocalizedNumberRangeFormatter with();
+    method public static android.icu.number.LocalizedNumberRangeFormatter withLocale(java.util.Locale);
+    method public static android.icu.number.LocalizedNumberRangeFormatter withLocale(android.icu.util.ULocale);
+  }
+
+  public enum NumberRangeFormatter.RangeCollapse {
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse ALL;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse AUTO;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse NONE;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeCollapse UNIT;
+  }
+
+  public enum NumberRangeFormatter.RangeIdentityFallback {
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback APPROXIMATELY;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback APPROXIMATELY_OR_SINGLE_VALUE;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback RANGE;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityFallback SINGLE_VALUE;
+  }
+
+  public enum NumberRangeFormatter.RangeIdentityResult {
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityResult EQUAL_AFTER_ROUNDING;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityResult EQUAL_BEFORE_ROUNDING;
+    enum_constant public static final android.icu.number.NumberRangeFormatter.RangeIdentityResult NOT_EQUAL;
+  }
+
+  public abstract class NumberRangeFormatterSettings<T extends android.icu.number.NumberRangeFormatterSettings<?>> {
+    method public T collapse(android.icu.number.NumberRangeFormatter.RangeCollapse);
+    method public T identityFallback(android.icu.number.NumberRangeFormatter.RangeIdentityFallback);
+    method public T numberFormatterBoth(android.icu.number.UnlocalizedNumberFormatter);
+    method public T numberFormatterFirst(android.icu.number.UnlocalizedNumberFormatter);
+    method public T numberFormatterSecond(android.icu.number.UnlocalizedNumberFormatter);
+  }
+
+  public abstract class Precision {
+    method public static android.icu.number.CurrencyPrecision currency(android.icu.util.Currency.CurrencyUsage);
+    method public static android.icu.number.FractionPrecision fixedFraction(int);
+    method public static android.icu.number.Precision fixedSignificantDigits(int);
+    method public static android.icu.number.Precision increment(java.math.BigDecimal);
+    method public static android.icu.number.FractionPrecision integer();
+    method public static android.icu.number.FractionPrecision maxFraction(int);
+    method public static android.icu.number.Precision maxSignificantDigits(int);
+    method public static android.icu.number.FractionPrecision minFraction(int);
+    method public static android.icu.number.FractionPrecision minMaxFraction(int, int);
+    method public static android.icu.number.Precision minMaxSignificantDigits(int, int);
+    method public static android.icu.number.Precision minSignificantDigits(int);
+    method public static android.icu.number.Precision unlimited();
+  }
+
+  public class Scale {
+    method public static android.icu.number.Scale byBigDecimal(java.math.BigDecimal);
+    method public static android.icu.number.Scale byDouble(double);
+    method public static android.icu.number.Scale byDoubleAndPowerOfTen(double, int);
+    method public static android.icu.number.Scale none();
+    method public static android.icu.number.Scale powerOfTen(int);
+  }
+
+  public class ScientificNotation extends android.icu.number.Notation {
+    method public android.icu.number.ScientificNotation withExponentSignDisplay(android.icu.number.NumberFormatter.SignDisplay);
+    method public android.icu.number.ScientificNotation withMinExponentDigits(int);
+  }
+
+  public class SimpleNotation extends android.icu.number.Notation {
+  }
+
+  public class UnlocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.UnlocalizedNumberFormatter> {
+    method public android.icu.number.LocalizedNumberFormatter locale(java.util.Locale);
+    method public android.icu.number.LocalizedNumberFormatter locale(android.icu.util.ULocale);
+  }
+
+  public class UnlocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.UnlocalizedNumberRangeFormatter> {
+    method public android.icu.number.LocalizedNumberRangeFormatter locale(java.util.Locale);
+    method public android.icu.number.LocalizedNumberRangeFormatter locale(android.icu.util.ULocale);
+  }
+
+}
+
+package android.icu.text {
+
+  public final class AlphabeticIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+    ctor public AlphabeticIndex(android.icu.util.ULocale);
+    ctor public AlphabeticIndex(java.util.Locale);
+    ctor public AlphabeticIndex(android.icu.text.RuleBasedCollator);
+    method public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.text.UnicodeSet);
+    method public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.util.ULocale...);
+    method public android.icu.text.AlphabeticIndex<V> addLabels(java.util.Locale...);
+    method public android.icu.text.AlphabeticIndex<V> addRecord(CharSequence, V);
+    method public android.icu.text.AlphabeticIndex.ImmutableIndex<V> buildImmutableIndex();
+    method public android.icu.text.AlphabeticIndex<V> clearRecords();
+    method public int getBucketCount();
+    method public int getBucketIndex(CharSequence);
+    method public java.util.List<java.lang.String> getBucketLabels();
+    method public android.icu.text.RuleBasedCollator getCollator();
+    method public String getInflowLabel();
+    method public int getMaxLabelCount();
+    method public String getOverflowLabel();
+    method public int getRecordCount();
+    method public String getUnderflowLabel();
+    method public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator();
+    method public android.icu.text.AlphabeticIndex<V> setInflowLabel(String);
+    method public android.icu.text.AlphabeticIndex<V> setMaxLabelCount(int);
+    method public android.icu.text.AlphabeticIndex<V> setOverflowLabel(String);
+    method public android.icu.text.AlphabeticIndex<V> setUnderflowLabel(String);
+  }
+
+  public static class AlphabeticIndex.Bucket<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Record<V>> {
+    method public String getLabel();
+    method public android.icu.text.AlphabeticIndex.Bucket.LabelType getLabelType();
+    method public java.util.Iterator<android.icu.text.AlphabeticIndex.Record<V>> iterator();
+    method public int size();
+  }
+
+  public enum AlphabeticIndex.Bucket.LabelType {
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType INFLOW;
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType NORMAL;
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType OVERFLOW;
+    enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType UNDERFLOW;
+  }
+
+  public static final class AlphabeticIndex.ImmutableIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+    method public android.icu.text.AlphabeticIndex.Bucket<V> getBucket(int);
+    method public int getBucketCount();
+    method public int getBucketIndex(CharSequence);
+    method public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator();
+  }
+
+  public static class AlphabeticIndex.Record<V> {
+    method public V getData();
+    method public CharSequence getName();
+  }
+
+  public class Bidi {
+    ctor public Bidi();
+    ctor public Bidi(int, int);
+    ctor public Bidi(String, int);
+    ctor public Bidi(java.text.AttributedCharacterIterator);
+    ctor public Bidi(char[], int, byte[], int, int, int);
+    method public boolean baseIsLeftToRight();
+    method public int countParagraphs();
+    method public int countRuns();
+    method public android.icu.text.Bidi createLineBidi(int, int);
+    method public static byte getBaseDirection(CharSequence);
+    method public int getBaseLevel();
+    method public android.icu.text.BidiClassifier getCustomClassifier();
+    method public int getCustomizedClass(int);
+    method public byte getDirection();
+    method public int getLength();
+    method public byte getLevelAt(int);
+    method public byte[] getLevels();
+    method public int getLogicalIndex(int);
+    method public int[] getLogicalMap();
+    method public android.icu.text.BidiRun getLogicalRun(int);
+    method public byte getParaLevel();
+    method public android.icu.text.BidiRun getParagraph(int);
+    method public android.icu.text.BidiRun getParagraphByIndex(int);
+    method public int getParagraphIndex(int);
+    method public int getProcessedLength();
+    method public int getReorderingMode();
+    method public int getReorderingOptions();
+    method public int getResultLength();
+    method public int getRunCount();
+    method public int getRunLevel(int);
+    method public int getRunLimit(int);
+    method public int getRunStart(int);
+    method public char[] getText();
+    method public String getTextAsString();
+    method public int getVisualIndex(int);
+    method public int[] getVisualMap();
+    method public android.icu.text.BidiRun getVisualRun(int);
+    method public static int[] invertMap(int[]);
+    method public boolean isInverse();
+    method public boolean isLeftToRight();
+    method public boolean isMixed();
+    method public boolean isOrderParagraphsLTR();
+    method public boolean isRightToLeft();
+    method public void orderParagraphsLTR(boolean);
+    method public static int[] reorderLogical(byte[]);
+    method public static int[] reorderVisual(byte[]);
+    method public static void reorderVisually(byte[], int, Object[], int, int);
+    method public static boolean requiresBidi(char[], int, int);
+    method public void setContext(String, String);
+    method public void setCustomClassifier(android.icu.text.BidiClassifier);
+    method public void setInverse(boolean);
+    method public android.icu.text.Bidi setLine(int, int);
+    method public void setPara(String, byte, byte[]);
+    method public void setPara(char[], byte, byte[]);
+    method public void setPara(java.text.AttributedCharacterIterator);
+    method public void setReorderingMode(int);
+    method public void setReorderingOptions(int);
+    method public String writeReordered(int);
+    method public static String writeReverse(String, int);
+    field public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = 126; // 0x7e
+    field public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = 127; // 0x7f
+    field public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+    field public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+    field public static final short DO_MIRRORING = 2; // 0x2
+    field public static final short INSERT_LRM_FOR_NUMERIC = 4; // 0x4
+    field public static final short KEEP_BASE_COMBINING = 1; // 0x1
+    field public static final byte LEVEL_DEFAULT_LTR = 126; // 0x7e
+    field public static final byte LEVEL_DEFAULT_RTL = 127; // 0x7f
+    field public static final byte LEVEL_OVERRIDE = -128; // 0xffffff80
+    field public static final byte LTR = 0; // 0x0
+    field public static final int MAP_NOWHERE = -1; // 0xffffffff
+    field public static final byte MAX_EXPLICIT_LEVEL = 125; // 0x7d
+    field public static final byte MIXED = 2; // 0x2
+    field public static final byte NEUTRAL = 3; // 0x3
+    field public static final int OPTION_DEFAULT = 0; // 0x0
+    field public static final int OPTION_INSERT_MARKS = 1; // 0x1
+    field public static final int OPTION_REMOVE_CONTROLS = 2; // 0x2
+    field public static final int OPTION_STREAMING = 4; // 0x4
+    field public static final short OUTPUT_REVERSE = 16; // 0x10
+    field public static final short REMOVE_BIDI_CONTROLS = 8; // 0x8
+    field public static final short REORDER_DEFAULT = 0; // 0x0
+    field public static final short REORDER_GROUP_NUMBERS_WITH_R = 2; // 0x2
+    field public static final short REORDER_INVERSE_FOR_NUMBERS_SPECIAL = 6; // 0x6
+    field public static final short REORDER_INVERSE_LIKE_DIRECT = 5; // 0x5
+    field public static final short REORDER_INVERSE_NUMBERS_AS_L = 4; // 0x4
+    field public static final short REORDER_NUMBERS_SPECIAL = 1; // 0x1
+    field public static final short REORDER_RUNS_ONLY = 3; // 0x3
+    field public static final byte RTL = 1; // 0x1
+  }
+
+  public class BidiClassifier {
+    ctor public BidiClassifier(Object);
+    method public int classify(int);
+    method public Object getContext();
+    method public void setContext(Object);
+  }
+
+  public class BidiRun {
+    method public byte getDirection();
+    method public byte getEmbeddingLevel();
+    method public int getLength();
+    method public int getLimit();
+    method public int getStart();
+    method public boolean isEvenRun();
+    method public boolean isOddRun();
+  }
+
+  public abstract class BreakIterator implements java.lang.Cloneable {
+    ctor protected BreakIterator();
+    method public Object clone();
+    method public abstract int current();
+    method public abstract int first();
+    method public abstract int following(int);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static android.icu.text.BreakIterator getCharacterInstance();
+    method public static android.icu.text.BreakIterator getCharacterInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getCharacterInstance(android.icu.util.ULocale);
+    method public static android.icu.text.BreakIterator getLineInstance();
+    method public static android.icu.text.BreakIterator getLineInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getLineInstance(android.icu.util.ULocale);
+    method public int getRuleStatus();
+    method public int getRuleStatusVec(int[]);
+    method public static android.icu.text.BreakIterator getSentenceInstance();
+    method public static android.icu.text.BreakIterator getSentenceInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getSentenceInstance(android.icu.util.ULocale);
+    method public abstract java.text.CharacterIterator getText();
+    method @Deprecated public static android.icu.text.BreakIterator getTitleInstance();
+    method @Deprecated public static android.icu.text.BreakIterator getTitleInstance(java.util.Locale);
+    method @Deprecated public static android.icu.text.BreakIterator getTitleInstance(android.icu.util.ULocale);
+    method public static android.icu.text.BreakIterator getWordInstance();
+    method public static android.icu.text.BreakIterator getWordInstance(java.util.Locale);
+    method public static android.icu.text.BreakIterator getWordInstance(android.icu.util.ULocale);
+    method public boolean isBoundary(int);
+    method public abstract int last();
+    method public abstract int next(int);
+    method public abstract int next();
+    method public int preceding(int);
+    method public abstract int previous();
+    method public void setText(String);
+    method public void setText(CharSequence);
+    method public abstract void setText(java.text.CharacterIterator);
+    field public static final int DONE = -1; // 0xffffffff
+    field public static final int KIND_CHARACTER = 0; // 0x0
+    field public static final int KIND_LINE = 2; // 0x2
+    field public static final int KIND_SENTENCE = 3; // 0x3
+    field @Deprecated public static final int KIND_TITLE = 4; // 0x4
+    field public static final int KIND_WORD = 1; // 0x1
+    field public static final int WORD_IDEO = 400; // 0x190
+    field public static final int WORD_IDEO_LIMIT = 500; // 0x1f4
+    field public static final int WORD_KANA = 300; // 0x12c
+    field public static final int WORD_KANA_LIMIT = 400; // 0x190
+    field public static final int WORD_LETTER = 200; // 0xc8
+    field public static final int WORD_LETTER_LIMIT = 300; // 0x12c
+    field public static final int WORD_NONE = 0; // 0x0
+    field public static final int WORD_NONE_LIMIT = 100; // 0x64
+    field public static final int WORD_NUMBER = 100; // 0x64
+    field public static final int WORD_NUMBER_LIMIT = 200; // 0xc8
+  }
+
+  public abstract class CaseMap {
+    method public static android.icu.text.CaseMap.Fold fold();
+    method public abstract android.icu.text.CaseMap omitUnchangedText();
+    method public static android.icu.text.CaseMap.Lower toLower();
+    method public static android.icu.text.CaseMap.Title toTitle();
+    method public static android.icu.text.CaseMap.Upper toUpper();
+  }
+
+  public static final class CaseMap.Fold extends android.icu.text.CaseMap {
+    method public String apply(CharSequence);
+    method public <A extends java.lang.Appendable> A apply(CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Fold omitUnchangedText();
+    method public android.icu.text.CaseMap.Fold turkic();
+  }
+
+  public static final class CaseMap.Lower extends android.icu.text.CaseMap {
+    method public String apply(java.util.Locale, CharSequence);
+    method public <A extends java.lang.Appendable> A apply(java.util.Locale, CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Lower omitUnchangedText();
+  }
+
+  public static final class CaseMap.Title extends android.icu.text.CaseMap {
+    method public android.icu.text.CaseMap.Title adjustToCased();
+    method public String apply(java.util.Locale, android.icu.text.BreakIterator, CharSequence);
+    method public <A extends java.lang.Appendable> A apply(java.util.Locale, android.icu.text.BreakIterator, CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Title noBreakAdjustment();
+    method public android.icu.text.CaseMap.Title noLowercase();
+    method public android.icu.text.CaseMap.Title omitUnchangedText();
+    method public android.icu.text.CaseMap.Title sentences();
+    method public android.icu.text.CaseMap.Title wholeString();
+  }
+
+  public static final class CaseMap.Upper extends android.icu.text.CaseMap {
+    method public String apply(java.util.Locale, CharSequence);
+    method public <A extends java.lang.Appendable> A apply(java.util.Locale, CharSequence, A, android.icu.text.Edits);
+    method public android.icu.text.CaseMap.Upper omitUnchangedText();
+  }
+
+  public final class CollationElementIterator {
+    method public int getMaxExpansion(int);
+    method public int getOffset();
+    method public int next();
+    method public int previous();
+    method public static int primaryOrder(int);
+    method public void reset();
+    method public static int secondaryOrder(int);
+    method public void setOffset(int);
+    method public void setText(String);
+    method public void setText(android.icu.text.UCharacterIterator);
+    method public void setText(java.text.CharacterIterator);
+    method public static int tertiaryOrder(int);
+    field public static final int IGNORABLE = 0; // 0x0
+    field public static final int NULLORDER = -1; // 0xffffffff
+  }
+
+  public final class CollationKey implements java.lang.Comparable<android.icu.text.CollationKey> {
+    ctor public CollationKey(String, byte[]);
+    method public int compareTo(android.icu.text.CollationKey);
+    method public boolean equals(android.icu.text.CollationKey);
+    method public android.icu.text.CollationKey getBound(int, int);
+    method public String getSourceString();
+    method public android.icu.text.CollationKey merge(android.icu.text.CollationKey);
+    method public byte[] toByteArray();
+  }
+
+  public static final class CollationKey.BoundMode {
+    field public static final int LOWER = 0; // 0x0
+    field public static final int UPPER = 1; // 0x1
+    field public static final int UPPER_LONG = 2; // 0x2
+  }
+
+  public abstract class Collator implements java.lang.Cloneable java.util.Comparator<java.lang.Object> android.icu.util.Freezable<android.icu.text.Collator> {
+    ctor protected Collator();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method public android.icu.text.Collator cloneAsThawed();
+    method public abstract int compare(String, String);
+    method public int compare(Object, Object);
+    method public boolean equals(String, String);
+    method public android.icu.text.Collator freeze();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static final android.icu.util.ULocale[] getAvailableULocales();
+    method public abstract android.icu.text.CollationKey getCollationKey(String);
+    method public int getDecomposition();
+    method public static String getDisplayName(java.util.Locale, java.util.Locale);
+    method public static String getDisplayName(android.icu.util.ULocale, android.icu.util.ULocale);
+    method public static String getDisplayName(java.util.Locale);
+    method public static String getDisplayName(android.icu.util.ULocale);
+    method public static int[] getEquivalentReorderCodes(int);
+    method public static final android.icu.util.ULocale getFunctionalEquivalent(String, android.icu.util.ULocale, boolean[]);
+    method public static final android.icu.util.ULocale getFunctionalEquivalent(String, android.icu.util.ULocale);
+    method public static final android.icu.text.Collator getInstance();
+    method public static final android.icu.text.Collator getInstance(android.icu.util.ULocale);
+    method public static final android.icu.text.Collator getInstance(java.util.Locale);
+    method public static final String[] getKeywordValues(String);
+    method public static final String[] getKeywordValuesForLocale(String, android.icu.util.ULocale, boolean);
+    method public static final String[] getKeywords();
+    method public int getMaxVariable();
+    method public int[] getReorderCodes();
+    method public int getStrength();
+    method public android.icu.text.UnicodeSet getTailoredSet();
+    method public abstract android.icu.util.VersionInfo getUCAVersion();
+    method public abstract int getVariableTop();
+    method public abstract android.icu.util.VersionInfo getVersion();
+    method public boolean isFrozen();
+    method public void setDecomposition(int);
+    method public android.icu.text.Collator setMaxVariable(int);
+    method public void setReorderCodes(int...);
+    method public void setStrength(int);
+    field public static final int CANONICAL_DECOMPOSITION = 17; // 0x11
+    field public static final int FULL_DECOMPOSITION = 15; // 0xf
+    field public static final int IDENTICAL = 15; // 0xf
+    field public static final int NO_DECOMPOSITION = 16; // 0x10
+    field public static final int PRIMARY = 0; // 0x0
+    field public static final int QUATERNARY = 3; // 0x3
+    field public static final int SECONDARY = 1; // 0x1
+    field public static final int TERTIARY = 2; // 0x2
+  }
+
+  public static interface Collator.ReorderCodes {
+    field public static final int CURRENCY = 4099; // 0x1003
+    field public static final int DEFAULT = -1; // 0xffffffff
+    field public static final int DIGIT = 4100; // 0x1004
+    field public static final int FIRST = 4096; // 0x1000
+    field public static final int NONE = 103; // 0x67
+    field public static final int OTHERS = 103; // 0x67
+    field public static final int PUNCTUATION = 4097; // 0x1001
+    field public static final int SPACE = 4096; // 0x1000
+    field public static final int SYMBOL = 4098; // 0x1002
+  }
+
+  public class CompactDecimalFormat extends android.icu.text.DecimalFormat {
+    method public static android.icu.text.CompactDecimalFormat getInstance(android.icu.util.ULocale, android.icu.text.CompactDecimalFormat.CompactStyle);
+    method public static android.icu.text.CompactDecimalFormat getInstance(java.util.Locale, android.icu.text.CompactDecimalFormat.CompactStyle);
+  }
+
+  public enum CompactDecimalFormat.CompactStyle {
+    enum_constant public static final android.icu.text.CompactDecimalFormat.CompactStyle LONG;
+    enum_constant public static final android.icu.text.CompactDecimalFormat.CompactStyle SHORT;
+  }
+
+  public class ConstrainedFieldPosition {
+    ctor public ConstrainedFieldPosition();
+    method public void constrainClass(Class<?>);
+    method public void constrainField(java.text.Format.Field);
+    method public java.text.Format.Field getField();
+    method public Object getFieldValue();
+    method public long getInt64IterationContext();
+    method public int getLimit();
+    method public int getStart();
+    method public boolean matchesField(java.text.Format.Field, Object);
+    method public void reset();
+    method public void setInt64IterationContext(long);
+    method public void setState(java.text.Format.Field, Object, int, int);
+  }
+
+  public class CurrencyPluralInfo implements java.lang.Cloneable java.io.Serializable {
+    ctor public CurrencyPluralInfo();
+    ctor public CurrencyPluralInfo(java.util.Locale);
+    ctor public CurrencyPluralInfo(android.icu.util.ULocale);
+    method public Object clone();
+    method public String getCurrencyPluralPattern(String);
+    method public static android.icu.text.CurrencyPluralInfo getInstance();
+    method public static android.icu.text.CurrencyPluralInfo getInstance(java.util.Locale);
+    method public static android.icu.text.CurrencyPluralInfo getInstance(android.icu.util.ULocale);
+    method public android.icu.util.ULocale getLocale();
+    method public android.icu.text.PluralRules getPluralRules();
+    method public void setCurrencyPluralPattern(String, String);
+    method public void setLocale(android.icu.util.ULocale);
+    method public void setPluralRules(String);
+  }
+
+  public abstract class DateFormat extends android.icu.text.UFormat {
+    ctor protected DateFormat();
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(android.icu.util.Calendar, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(java.util.Date, StringBuffer, java.text.FieldPosition);
+    method public final String format(java.util.Date);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public boolean getBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute);
+    method public android.icu.util.Calendar getCalendar();
+    method public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type);
+    method public static final android.icu.text.DateFormat getDateInstance();
+    method public static final android.icu.text.DateFormat getDateInstance(int);
+    method public static final android.icu.text.DateFormat getDateInstance(int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateInstance(int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar, int);
+    method public static final android.icu.text.DateFormat getDateTimeInstance();
+    method public static final android.icu.text.DateFormat getDateTimeInstance(int, int);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(int, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(int, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar, int, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar, int, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar, int, int);
+    method public static final android.icu.text.DateFormat getInstance();
+    method public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar, java.util.Locale);
+    method public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(String);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar, String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar, String, android.icu.util.ULocale);
+    method public android.icu.text.NumberFormat getNumberFormat();
+    method public static final android.icu.text.DateFormat getPatternInstance(String);
+    method public static final android.icu.text.DateFormat getPatternInstance(String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getPatternInstance(String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar, String, java.util.Locale);
+    method public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar, String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getTimeInstance();
+    method public static final android.icu.text.DateFormat getTimeInstance(int);
+    method public static final android.icu.text.DateFormat getTimeInstance(int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getTimeInstance(int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar, int, java.util.Locale);
+    method public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar, int, android.icu.util.ULocale);
+    method public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar, int);
+    method public android.icu.util.TimeZone getTimeZone();
+    method public boolean isCalendarLenient();
+    method public boolean isLenient();
+    method public java.util.Date parse(String) throws java.text.ParseException;
+    method public abstract void parse(String, android.icu.util.Calendar, java.text.ParsePosition);
+    method public java.util.Date parse(String, java.text.ParsePosition);
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public android.icu.text.DateFormat setBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute, boolean);
+    method public void setCalendar(android.icu.util.Calendar);
+    method public void setCalendarLenient(boolean);
+    method public void setContext(android.icu.text.DisplayContext);
+    method public void setLenient(boolean);
+    method public void setNumberFormat(android.icu.text.NumberFormat);
+    method public void setTimeZone(android.icu.util.TimeZone);
+    field public static final String ABBR_GENERIC_TZ = "v";
+    field public static final String ABBR_MONTH = "MMM";
+    field public static final String ABBR_MONTH_DAY = "MMMd";
+    field public static final String ABBR_MONTH_WEEKDAY_DAY = "MMMEd";
+    field public static final String ABBR_QUARTER = "QQQ";
+    field public static final String ABBR_SPECIFIC_TZ = "z";
+    field public static final String ABBR_UTC_TZ = "ZZZZ";
+    field public static final String ABBR_WEEKDAY = "E";
+    field public static final int AM_PM_FIELD = 14; // 0xe
+    field public static final int AM_PM_MIDNIGHT_NOON_FIELD = 35; // 0x23
+    field public static final int DATE_FIELD = 3; // 0x3
+    field public static final String DAY = "d";
+    field public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
+    field public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; // 0xb
+    field public static final int DAY_OF_YEAR_FIELD = 10; // 0xa
+    field public static final int DEFAULT = 2; // 0x2
+    field public static final int DOW_LOCAL_FIELD = 19; // 0x13
+    field public static final int ERA_FIELD = 0; // 0x0
+    field public static final int EXTENDED_YEAR_FIELD = 20; // 0x14
+    field public static final int FLEXIBLE_DAY_PERIOD_FIELD = 36; // 0x24
+    field public static final int FRACTIONAL_SECOND_FIELD = 8; // 0x8
+    field public static final int FULL = 0; // 0x0
+    field public static final String GENERIC_TZ = "vvvv";
+    field public static final String HOUR = "j";
+    field public static final int HOUR0_FIELD = 16; // 0x10
+    field public static final int HOUR1_FIELD = 15; // 0xf
+    field public static final String HOUR24 = "H";
+    field public static final String HOUR24_MINUTE = "Hm";
+    field public static final String HOUR24_MINUTE_SECOND = "Hms";
+    field public static final String HOUR_MINUTE = "jm";
+    field public static final String HOUR_MINUTE_SECOND = "jms";
+    field public static final int HOUR_OF_DAY0_FIELD = 5; // 0x5
+    field public static final int HOUR_OF_DAY1_FIELD = 4; // 0x4
+    field public static final int JULIAN_DAY_FIELD = 21; // 0x15
+    field public static final String LOCATION_TZ = "VVVV";
+    field public static final int LONG = 1; // 0x1
+    field public static final int MEDIUM = 2; // 0x2
+    field public static final int MILLISECONDS_IN_DAY_FIELD = 22; // 0x16
+    field public static final int MILLISECOND_FIELD = 8; // 0x8
+    field public static final String MINUTE = "m";
+    field public static final int MINUTE_FIELD = 6; // 0x6
+    field public static final String MINUTE_SECOND = "ms";
+    field public static final String MONTH = "MMMM";
+    field public static final String MONTH_DAY = "MMMMd";
+    field public static final int MONTH_FIELD = 2; // 0x2
+    field public static final String MONTH_WEEKDAY_DAY = "MMMMEEEEd";
+    field public static final int NONE = -1; // 0xffffffff
+    field public static final String NUM_MONTH = "M";
+    field public static final String NUM_MONTH_DAY = "Md";
+    field public static final String NUM_MONTH_WEEKDAY_DAY = "MEd";
+    field public static final String QUARTER = "QQQQ";
+    field public static final int QUARTER_FIELD = 27; // 0x1b
+    field public static final int RELATIVE = 128; // 0x80
+    field public static final int RELATIVE_DEFAULT = 130; // 0x82
+    field public static final int RELATIVE_FULL = 128; // 0x80
+    field public static final int RELATIVE_LONG = 129; // 0x81
+    field public static final int RELATIVE_MEDIUM = 130; // 0x82
+    field public static final int RELATIVE_SHORT = 131; // 0x83
+    field public static final String SECOND = "s";
+    field public static final int SECOND_FIELD = 7; // 0x7
+    field public static final int SHORT = 3; // 0x3
+    field public static final String SPECIFIC_TZ = "zzzz";
+    field public static final int STANDALONE_DAY_FIELD = 25; // 0x19
+    field public static final int STANDALONE_MONTH_FIELD = 26; // 0x1a
+    field public static final int STANDALONE_QUARTER_FIELD = 28; // 0x1c
+    field public static final int TIMEZONE_FIELD = 17; // 0x11
+    field public static final int TIMEZONE_GENERIC_FIELD = 24; // 0x18
+    field public static final int TIMEZONE_ISO_FIELD = 32; // 0x20
+    field public static final int TIMEZONE_ISO_LOCAL_FIELD = 33; // 0x21
+    field public static final int TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31; // 0x1f
+    field public static final int TIMEZONE_RFC_FIELD = 23; // 0x17
+    field public static final int TIMEZONE_SPECIAL_FIELD = 29; // 0x1d
+    field public static final String WEEKDAY = "EEEE";
+    field public static final int WEEK_OF_MONTH_FIELD = 13; // 0xd
+    field public static final int WEEK_OF_YEAR_FIELD = 12; // 0xc
+    field public static final String YEAR = "y";
+    field public static final String YEAR_ABBR_MONTH = "yMMM";
+    field public static final String YEAR_ABBR_MONTH_DAY = "yMMMd";
+    field public static final String YEAR_ABBR_MONTH_WEEKDAY_DAY = "yMMMEd";
+    field public static final String YEAR_ABBR_QUARTER = "yQQQ";
+    field public static final int YEAR_FIELD = 1; // 0x1
+    field public static final String YEAR_MONTH = "yMMMM";
+    field public static final String YEAR_MONTH_DAY = "yMMMMd";
+    field public static final String YEAR_MONTH_WEEKDAY_DAY = "yMMMMEEEEd";
+    field public static final int YEAR_NAME_FIELD = 30; // 0x1e
+    field public static final String YEAR_NUM_MONTH = "yM";
+    field public static final String YEAR_NUM_MONTH_DAY = "yMd";
+    field public static final String YEAR_NUM_MONTH_WEEKDAY_DAY = "yMEd";
+    field public static final String YEAR_QUARTER = "yQQQQ";
+    field public static final int YEAR_WOY_FIELD = 18; // 0x12
+    field protected android.icu.util.Calendar calendar;
+    field protected android.icu.text.NumberFormat numberFormat;
+  }
+
+  public enum DateFormat.BooleanAttribute {
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_ALLOW_NUMERIC;
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_ALLOW_WHITESPACE;
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_MULTIPLE_PATTERNS_FOR_MATCH;
+    enum_constant public static final android.icu.text.DateFormat.BooleanAttribute PARSE_PARTIAL_LITERAL_MATCH;
+  }
+
+  public static class DateFormat.Field extends java.text.Format.Field {
+    ctor protected DateFormat.Field(String, int);
+    method public int getCalendarField();
+    method public static android.icu.text.DateFormat.Field ofCalendarField(int);
+    field public static final android.icu.text.DateFormat.Field AM_PM;
+    field public static final android.icu.text.DateFormat.Field AM_PM_MIDNIGHT_NOON;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_MONTH;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
+    field public static final android.icu.text.DateFormat.Field DAY_OF_YEAR;
+    field public static final android.icu.text.DateFormat.Field DOW_LOCAL;
+    field public static final android.icu.text.DateFormat.Field ERA;
+    field public static final android.icu.text.DateFormat.Field EXTENDED_YEAR;
+    field public static final android.icu.text.DateFormat.Field FLEXIBLE_DAY_PERIOD;
+    field public static final android.icu.text.DateFormat.Field HOUR0;
+    field public static final android.icu.text.DateFormat.Field HOUR1;
+    field public static final android.icu.text.DateFormat.Field HOUR_OF_DAY0;
+    field public static final android.icu.text.DateFormat.Field HOUR_OF_DAY1;
+    field public static final android.icu.text.DateFormat.Field JULIAN_DAY;
+    field public static final android.icu.text.DateFormat.Field MILLISECOND;
+    field public static final android.icu.text.DateFormat.Field MILLISECONDS_IN_DAY;
+    field public static final android.icu.text.DateFormat.Field MINUTE;
+    field public static final android.icu.text.DateFormat.Field MONTH;
+    field public static final android.icu.text.DateFormat.Field QUARTER;
+    field public static final android.icu.text.DateFormat.Field SECOND;
+    field public static final android.icu.text.DateFormat.Field TIME_ZONE;
+    field public static final android.icu.text.DateFormat.Field WEEK_OF_MONTH;
+    field public static final android.icu.text.DateFormat.Field WEEK_OF_YEAR;
+    field public static final android.icu.text.DateFormat.Field YEAR;
+    field public static final android.icu.text.DateFormat.Field YEAR_WOY;
+  }
+
+  public class DateFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DateFormatSymbols();
+    ctor public DateFormatSymbols(java.util.Locale);
+    ctor public DateFormatSymbols(android.icu.util.ULocale);
+    ctor public DateFormatSymbols(android.icu.util.Calendar, java.util.Locale);
+    ctor public DateFormatSymbols(android.icu.util.Calendar, android.icu.util.ULocale);
+    ctor public DateFormatSymbols(Class<? extends android.icu.util.Calendar>, java.util.Locale);
+    ctor public DateFormatSymbols(Class<? extends android.icu.util.Calendar>, android.icu.util.ULocale);
+    ctor public DateFormatSymbols(java.util.ResourceBundle, java.util.Locale);
+    ctor public DateFormatSymbols(java.util.ResourceBundle, android.icu.util.ULocale);
+    method public Object clone();
+    method public String[] getAmPmStrings();
+    method public static java.util.Locale[] getAvailableLocales();
+    method public String[] getEraNames();
+    method public String[] getEras();
+    method public static android.icu.text.DateFormatSymbols getInstance();
+    method public static android.icu.text.DateFormatSymbols getInstance(java.util.Locale);
+    method public static android.icu.text.DateFormatSymbols getInstance(android.icu.util.ULocale);
+    method public String getLocalPatternChars();
+    method public String[] getMonths();
+    method public String[] getMonths(int, int);
+    method public String[] getNarrowEras();
+    method public String[] getQuarters(int, int);
+    method public String[] getShortMonths();
+    method public String[] getShortWeekdays();
+    method public String[] getWeekdays();
+    method public String[] getWeekdays(int, int);
+    method public String[] getYearNames(int, int);
+    method public String[] getZodiacNames(int, int);
+    method public String[][] getZoneStrings();
+    method protected void initializeData(android.icu.util.ULocale, String);
+    method public void setAmPmStrings(String[]);
+    method public void setEraNames(String[]);
+    method public void setEras(String[]);
+    method public void setLocalPatternChars(String);
+    method public void setMonths(String[]);
+    method public void setMonths(String[], int, int);
+    method public void setNarrowEras(String[]);
+    method public void setQuarters(String[], int, int);
+    method public void setShortMonths(String[]);
+    method public void setShortWeekdays(String[]);
+    method public void setWeekdays(String[], int, int);
+    method public void setWeekdays(String[]);
+    method public void setYearNames(String[], int, int);
+    method public void setZodiacNames(String[], int, int);
+    method public void setZoneStrings(String[][]);
+    field public static final int ABBREVIATED = 0; // 0x0
+    field public static final int FORMAT = 0; // 0x0
+    field public static final int NARROW = 2; // 0x2
+    field public static final int SHORT = 3; // 0x3
+    field public static final int STANDALONE = 1; // 0x1
+    field public static final int WIDE = 1; // 0x1
+  }
+
+  public class DateIntervalFormat extends android.icu.text.UFormat {
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public final StringBuffer format(android.icu.util.DateInterval, StringBuffer, java.text.FieldPosition);
+    method public final StringBuffer format(android.icu.util.Calendar, android.icu.util.Calendar, StringBuffer, java.text.FieldPosition);
+    method public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.DateInterval);
+    method public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.Calendar, android.icu.util.Calendar);
+    method public android.icu.text.DateFormat getDateFormat();
+    method public android.icu.text.DateIntervalInfo getDateIntervalInfo();
+    method public static final android.icu.text.DateIntervalFormat getInstance(String);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, java.util.Locale);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, android.icu.util.ULocale);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, android.icu.text.DateIntervalInfo);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, java.util.Locale, android.icu.text.DateIntervalInfo);
+    method public static final android.icu.text.DateIntervalFormat getInstance(String, android.icu.util.ULocale, android.icu.text.DateIntervalInfo);
+    method public android.icu.util.TimeZone getTimeZone();
+    method @Deprecated public Object parseObject(String, java.text.ParsePosition);
+    method public void setDateIntervalInfo(android.icu.text.DateIntervalInfo);
+    method public void setTimeZone(android.icu.util.TimeZone);
+  }
+
+  public static final class DateIntervalFormat.FormattedDateInterval implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public class DateIntervalInfo implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.DateIntervalInfo> java.io.Serializable {
+    ctor public DateIntervalInfo(android.icu.util.ULocale);
+    ctor public DateIntervalInfo(java.util.Locale);
+    method public Object clone();
+    method public android.icu.text.DateIntervalInfo cloneAsThawed();
+    method public android.icu.text.DateIntervalInfo freeze();
+    method public boolean getDefaultOrder();
+    method public String getFallbackIntervalPattern();
+    method public android.icu.text.DateIntervalInfo.PatternInfo getIntervalPattern(String, int);
+    method public boolean isFrozen();
+    method public void setFallbackIntervalPattern(String);
+    method public void setIntervalPattern(String, int, String);
+  }
+
+  public static final class DateIntervalInfo.PatternInfo implements java.lang.Cloneable java.io.Serializable {
+    ctor public DateIntervalInfo.PatternInfo(String, String, boolean);
+    method public boolean firstDateInPtnIsLaterDate();
+    method public String getFirstPart();
+    method public String getSecondPart();
+  }
+
+  public class DateTimePatternGenerator implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.DateTimePatternGenerator> {
+    ctor protected DateTimePatternGenerator();
+    method public android.icu.text.DateTimePatternGenerator addPattern(String, boolean, android.icu.text.DateTimePatternGenerator.PatternInfo);
+    method public Object clone();
+    method public android.icu.text.DateTimePatternGenerator cloneAsThawed();
+    method public android.icu.text.DateTimePatternGenerator freeze();
+    method public String getAppendItemFormat(int);
+    method public String getAppendItemName(int);
+    method public String getBaseSkeleton(String);
+    method public java.util.Set<java.lang.String> getBaseSkeletons(java.util.Set<java.lang.String>);
+    method public String getBestPattern(String);
+    method public String getBestPattern(String, int);
+    method public String getDateTimeFormat();
+    method public String getDecimal();
+    method public static android.icu.text.DateTimePatternGenerator getEmptyInstance();
+    method public String getFieldDisplayName(int, android.icu.text.DateTimePatternGenerator.DisplayWidth);
+    method public static android.icu.text.DateTimePatternGenerator getInstance();
+    method public static android.icu.text.DateTimePatternGenerator getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.DateTimePatternGenerator getInstance(java.util.Locale);
+    method public String getSkeleton(String);
+    method public java.util.Map<java.lang.String,java.lang.String> getSkeletons(java.util.Map<java.lang.String,java.lang.String>);
+    method public boolean isFrozen();
+    method public String replaceFieldTypes(String, String);
+    method public String replaceFieldTypes(String, String, int);
+    method public void setAppendItemFormat(int, String);
+    method public void setAppendItemName(int, String);
+    method public void setDateTimeFormat(String);
+    method public void setDecimal(String);
+    field public static final int DAY = 7; // 0x7
+    field public static final int DAYPERIOD = 10; // 0xa
+    field public static final int DAY_OF_WEEK_IN_MONTH = 9; // 0x9
+    field public static final int DAY_OF_YEAR = 8; // 0x8
+    field public static final int ERA = 0; // 0x0
+    field public static final int FRACTIONAL_SECOND = 14; // 0xe
+    field public static final int HOUR = 11; // 0xb
+    field public static final int MATCH_ALL_FIELDS_LENGTH = 65535; // 0xffff
+    field public static final int MATCH_HOUR_FIELD_LENGTH = 2048; // 0x800
+    field public static final int MATCH_NO_OPTIONS = 0; // 0x0
+    field public static final int MINUTE = 12; // 0xc
+    field public static final int MONTH = 3; // 0x3
+    field public static final int QUARTER = 2; // 0x2
+    field public static final int SECOND = 13; // 0xd
+    field public static final int WEEKDAY = 6; // 0x6
+    field public static final int WEEK_OF_MONTH = 5; // 0x5
+    field public static final int WEEK_OF_YEAR = 4; // 0x4
+    field public static final int YEAR = 1; // 0x1
+    field public static final int ZONE = 15; // 0xf
+  }
+
+  public enum DateTimePatternGenerator.DisplayWidth {
+    enum_constant public static final android.icu.text.DateTimePatternGenerator.DisplayWidth ABBREVIATED;
+    enum_constant public static final android.icu.text.DateTimePatternGenerator.DisplayWidth NARROW;
+    enum_constant public static final android.icu.text.DateTimePatternGenerator.DisplayWidth WIDE;
+  }
+
+  public static final class DateTimePatternGenerator.PatternInfo {
+    ctor public DateTimePatternGenerator.PatternInfo();
+    field public static final int BASE_CONFLICT = 1; // 0x1
+    field public static final int CONFLICT = 2; // 0x2
+    field public static final int OK = 0; // 0x0
+    field public String conflictingPattern;
+    field public int status;
+  }
+
+  public class DecimalFormat extends android.icu.text.NumberFormat {
+    ctor public DecimalFormat();
+    ctor public DecimalFormat(String);
+    ctor public DecimalFormat(String, android.icu.text.DecimalFormatSymbols);
+    ctor public DecimalFormat(String, android.icu.text.DecimalFormatSymbols, android.icu.text.CurrencyPluralInfo, int);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public boolean areSignificantDigitsUsed();
+    method public StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(java.math.BigInteger, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(java.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(android.icu.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo();
+    method public android.icu.util.Currency.CurrencyUsage getCurrencyUsage();
+    method public android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols();
+    method public int getFormatWidth();
+    method public int getGroupingSize();
+    method public java.math.MathContext getMathContext();
+    method public android.icu.math.MathContext getMathContextICU();
+    method public int getMaximumSignificantDigits();
+    method public byte getMinimumExponentDigits();
+    method public int getMinimumGroupingDigits();
+    method public int getMinimumSignificantDigits();
+    method public int getMultiplier();
+    method public String getNegativePrefix();
+    method public String getNegativeSuffix();
+    method public char getPadCharacter();
+    method public int getPadPosition();
+    method @Deprecated public int getParseMaxDigits();
+    method public String getPositivePrefix();
+    method public String getPositiveSuffix();
+    method public java.math.BigDecimal getRoundingIncrement();
+    method public int getSecondaryGroupingSize();
+    method public boolean isDecimalPatternMatchRequired();
+    method public boolean isDecimalSeparatorAlwaysShown();
+    method public boolean isExponentSignAlwaysShown();
+    method public boolean isParseBigDecimal();
+    method public boolean isParseCaseSensitive();
+    method public boolean isParseNoExponent();
+    method public boolean isScientificNotation();
+    method public boolean isSignAlwaysShown();
+    method public Number parse(String, java.text.ParsePosition);
+    method public void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo);
+    method public void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage);
+    method public void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols);
+    method public void setDecimalPatternMatchRequired(boolean);
+    method public void setDecimalSeparatorAlwaysShown(boolean);
+    method public void setExponentSignAlwaysShown(boolean);
+    method public void setFormatWidth(int);
+    method public void setGroupingSize(int);
+    method public void setMathContext(java.math.MathContext);
+    method public void setMathContextICU(android.icu.math.MathContext);
+    method public void setMaximumSignificantDigits(int);
+    method public void setMinimumExponentDigits(byte);
+    method public void setMinimumGroupingDigits(int);
+    method public void setMinimumSignificantDigits(int);
+    method public void setMultiplier(int);
+    method public void setNegativePrefix(String);
+    method public void setNegativeSuffix(String);
+    method public void setPadCharacter(char);
+    method public void setPadPosition(int);
+    method public void setParseBigDecimal(boolean);
+    method public void setParseCaseSensitive(boolean);
+    method @Deprecated public void setParseMaxDigits(int);
+    method public void setParseNoExponent(boolean);
+    method public void setPositivePrefix(String);
+    method public void setPositiveSuffix(String);
+    method public void setRoundingIncrement(java.math.BigDecimal);
+    method public void setRoundingIncrement(android.icu.math.BigDecimal);
+    method public void setRoundingIncrement(double);
+    method public void setScientificNotation(boolean);
+    method public void setSecondaryGroupingSize(int);
+    method public void setSignAlwaysShown(boolean);
+    method public void setSignificantDigitsUsed(boolean);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+    field public static final int PAD_AFTER_PREFIX = 1; // 0x1
+    field public static final int PAD_AFTER_SUFFIX = 3; // 0x3
+    field public static final int PAD_BEFORE_PREFIX = 0; // 0x0
+    field public static final int PAD_BEFORE_SUFFIX = 2; // 0x2
+  }
+
+  public class DecimalFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor public DecimalFormatSymbols();
+    ctor public DecimalFormatSymbols(java.util.Locale);
+    ctor public DecimalFormatSymbols(android.icu.util.ULocale);
+    method public Object clone();
+    method public static android.icu.text.DecimalFormatSymbols forNumberingSystem(java.util.Locale, android.icu.text.NumberingSystem);
+    method public static android.icu.text.DecimalFormatSymbols forNumberingSystem(android.icu.util.ULocale, android.icu.text.NumberingSystem);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public android.icu.util.Currency getCurrency();
+    method public String getCurrencySymbol();
+    method public char getDecimalSeparator();
+    method public String getDecimalSeparatorString();
+    method public char getDigit();
+    method public String[] getDigitStrings();
+    method public char[] getDigits();
+    method public String getExponentMultiplicationSign();
+    method public String getExponentSeparator();
+    method public char getGroupingSeparator();
+    method public String getGroupingSeparatorString();
+    method public String getInfinity();
+    method public static android.icu.text.DecimalFormatSymbols getInstance();
+    method public static android.icu.text.DecimalFormatSymbols getInstance(java.util.Locale);
+    method public static android.icu.text.DecimalFormatSymbols getInstance(android.icu.util.ULocale);
+    method public String getInternationalCurrencySymbol();
+    method public java.util.Locale getLocale();
+    method public char getMinusSign();
+    method public String getMinusSignString();
+    method public char getMonetaryDecimalSeparator();
+    method public String getMonetaryDecimalSeparatorString();
+    method public char getMonetaryGroupingSeparator();
+    method public String getMonetaryGroupingSeparatorString();
+    method public String getNaN();
+    method public char getPadEscape();
+    method public String getPatternForCurrencySpacing(int, boolean);
+    method public char getPatternSeparator();
+    method public char getPerMill();
+    method public String getPerMillString();
+    method public char getPercent();
+    method public String getPercentString();
+    method public char getPlusSign();
+    method public String getPlusSignString();
+    method public char getSignificantDigit();
+    method public android.icu.util.ULocale getULocale();
+    method public char getZeroDigit();
+    method public void setCurrency(android.icu.util.Currency);
+    method public void setCurrencySymbol(String);
+    method public void setDecimalSeparator(char);
+    method public void setDecimalSeparatorString(String);
+    method public void setDigit(char);
+    method public void setDigitStrings(String[]);
+    method public void setExponentMultiplicationSign(String);
+    method public void setExponentSeparator(String);
+    method public void setGroupingSeparator(char);
+    method public void setGroupingSeparatorString(String);
+    method public void setInfinity(String);
+    method public void setInternationalCurrencySymbol(String);
+    method public void setMinusSign(char);
+    method public void setMinusSignString(String);
+    method public void setMonetaryDecimalSeparator(char);
+    method public void setMonetaryDecimalSeparatorString(String);
+    method public void setMonetaryGroupingSeparator(char);
+    method public void setMonetaryGroupingSeparatorString(String);
+    method public void setNaN(String);
+    method public void setPadEscape(char);
+    method public void setPatternForCurrencySpacing(int, boolean, String);
+    method public void setPatternSeparator(char);
+    method public void setPerMill(char);
+    method public void setPerMillString(String);
+    method public void setPercent(char);
+    method public void setPercentString(String);
+    method public void setPlusSign(char);
+    method public void setPlusSignString(String);
+    method public void setSignificantDigit(char);
+    method public void setZeroDigit(char);
+    field public static final int CURRENCY_SPC_CURRENCY_MATCH = 0; // 0x0
+    field public static final int CURRENCY_SPC_INSERT = 2; // 0x2
+    field public static final int CURRENCY_SPC_SURROUNDING_MATCH = 1; // 0x1
+  }
+
+  public enum DisplayContext {
+    method public android.icu.text.DisplayContext.Type type();
+    method public int value();
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_STANDALONE;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_FOR_UI_LIST_OR_MENU;
+    enum_constant public static final android.icu.text.DisplayContext CAPITALIZATION_NONE;
+    enum_constant public static final android.icu.text.DisplayContext DIALECT_NAMES;
+    enum_constant public static final android.icu.text.DisplayContext LENGTH_FULL;
+    enum_constant public static final android.icu.text.DisplayContext LENGTH_SHORT;
+    enum_constant public static final android.icu.text.DisplayContext NO_SUBSTITUTE;
+    enum_constant public static final android.icu.text.DisplayContext STANDARD_NAMES;
+    enum_constant public static final android.icu.text.DisplayContext SUBSTITUTE;
+  }
+
+  public enum DisplayContext.Type {
+    enum_constant public static final android.icu.text.DisplayContext.Type CAPITALIZATION;
+    enum_constant public static final android.icu.text.DisplayContext.Type DIALECT_HANDLING;
+    enum_constant public static final android.icu.text.DisplayContext.Type DISPLAY_LENGTH;
+    enum_constant public static final android.icu.text.DisplayContext.Type SUBSTITUTE_HANDLING;
+  }
+
+  public final class Edits {
+    ctor public Edits();
+    method public void addReplace(int, int);
+    method public void addUnchanged(int);
+    method public android.icu.text.Edits.Iterator getCoarseChangesIterator();
+    method public android.icu.text.Edits.Iterator getCoarseIterator();
+    method public android.icu.text.Edits.Iterator getFineChangesIterator();
+    method public android.icu.text.Edits.Iterator getFineIterator();
+    method public boolean hasChanges();
+    method public int lengthDelta();
+    method public android.icu.text.Edits mergeAndAppend(android.icu.text.Edits, android.icu.text.Edits);
+    method public int numberOfChanges();
+    method public void reset();
+  }
+
+  public static final class Edits.Iterator {
+    method public int destinationIndex();
+    method public int destinationIndexFromSourceIndex(int);
+    method public boolean findDestinationIndex(int);
+    method public boolean findSourceIndex(int);
+    method public boolean hasChange();
+    method public int newLength();
+    method public boolean next();
+    method public int oldLength();
+    method public int replacementIndex();
+    method public int sourceIndex();
+    method public int sourceIndexFromDestinationIndex(int);
+  }
+
+  public interface FormattedValue extends java.lang.CharSequence {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public abstract class IDNA {
+    method public static android.icu.text.IDNA getUTS46Instance(int);
+    method public abstract StringBuilder labelToASCII(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    method public abstract StringBuilder labelToUnicode(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    method public abstract StringBuilder nameToASCII(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    method public abstract StringBuilder nameToUnicode(CharSequence, StringBuilder, android.icu.text.IDNA.Info);
+    field public static final int CHECK_BIDI = 4; // 0x4
+    field public static final int CHECK_CONTEXTJ = 8; // 0x8
+    field public static final int CHECK_CONTEXTO = 64; // 0x40
+    field public static final int DEFAULT = 0; // 0x0
+    field public static final int NONTRANSITIONAL_TO_ASCII = 16; // 0x10
+    field public static final int NONTRANSITIONAL_TO_UNICODE = 32; // 0x20
+    field public static final int USE_STD3_RULES = 2; // 0x2
+  }
+
+  public enum IDNA.Error {
+    enum_constant public static final android.icu.text.IDNA.Error BIDI;
+    enum_constant public static final android.icu.text.IDNA.Error CONTEXTJ;
+    enum_constant public static final android.icu.text.IDNA.Error CONTEXTO_DIGITS;
+    enum_constant public static final android.icu.text.IDNA.Error CONTEXTO_PUNCTUATION;
+    enum_constant public static final android.icu.text.IDNA.Error DISALLOWED;
+    enum_constant public static final android.icu.text.IDNA.Error DOMAIN_NAME_TOO_LONG;
+    enum_constant public static final android.icu.text.IDNA.Error EMPTY_LABEL;
+    enum_constant public static final android.icu.text.IDNA.Error HYPHEN_3_4;
+    enum_constant public static final android.icu.text.IDNA.Error INVALID_ACE_LABEL;
+    enum_constant public static final android.icu.text.IDNA.Error LABEL_HAS_DOT;
+    enum_constant public static final android.icu.text.IDNA.Error LABEL_TOO_LONG;
+    enum_constant public static final android.icu.text.IDNA.Error LEADING_COMBINING_MARK;
+    enum_constant public static final android.icu.text.IDNA.Error LEADING_HYPHEN;
+    enum_constant public static final android.icu.text.IDNA.Error PUNYCODE;
+    enum_constant public static final android.icu.text.IDNA.Error TRAILING_HYPHEN;
+  }
+
+  public static final class IDNA.Info {
+    ctor public IDNA.Info();
+    method public java.util.Set<android.icu.text.IDNA.Error> getErrors();
+    method public boolean hasErrors();
+    method public boolean isTransitionalDifferent();
+  }
+
+  public final class ListFormatter {
+    method public String format(java.lang.Object...);
+    method public String format(java.util.Collection<?>);
+    method public static android.icu.text.ListFormatter getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.ListFormatter getInstance(java.util.Locale);
+    method public static android.icu.text.ListFormatter getInstance();
+    method public String getPatternForNumItems(int);
+  }
+
+  public abstract class LocaleDisplayNames {
+    method public abstract android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type);
+    method public abstract android.icu.text.LocaleDisplayNames.DialectHandling getDialectHandling();
+    method public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale);
+    method public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale, android.icu.text.LocaleDisplayNames.DialectHandling);
+    method public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale, android.icu.text.DisplayContext...);
+    method public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale, android.icu.text.DisplayContext...);
+    method public abstract android.icu.util.ULocale getLocale();
+    method public java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiList(java.util.Set<android.icu.util.ULocale>, boolean, java.util.Comparator<java.lang.Object>);
+    method public abstract java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiListCompareWholeItems(java.util.Set<android.icu.util.ULocale>, java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem>);
+    method public abstract String keyDisplayName(String);
+    method public abstract String keyValueDisplayName(String, String);
+    method public abstract String languageDisplayName(String);
+    method public abstract String localeDisplayName(android.icu.util.ULocale);
+    method public abstract String localeDisplayName(java.util.Locale);
+    method public abstract String localeDisplayName(String);
+    method public abstract String regionDisplayName(String);
+    method public abstract String scriptDisplayName(String);
+    method public abstract String scriptDisplayName(int);
+    method public abstract String variantDisplayName(String);
+  }
+
+  public enum LocaleDisplayNames.DialectHandling {
+    enum_constant public static final android.icu.text.LocaleDisplayNames.DialectHandling DIALECT_NAMES;
+    enum_constant public static final android.icu.text.LocaleDisplayNames.DialectHandling STANDARD_NAMES;
+  }
+
+  public static class LocaleDisplayNames.UiListItem {
+    ctor public LocaleDisplayNames.UiListItem(android.icu.util.ULocale, android.icu.util.ULocale, String, String);
+    method public static java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem> getComparator(java.util.Comparator<java.lang.Object>, boolean);
+    field public final android.icu.util.ULocale minimized;
+    field public final android.icu.util.ULocale modified;
+    field public final String nameInDisplayLocale;
+    field public final String nameInSelf;
+  }
+
+  public class MeasureFormat extends android.icu.text.UFormat {
+    method public final boolean equals(Object);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public StringBuilder formatMeasurePerUnit(android.icu.util.Measure, android.icu.util.MeasureUnit, StringBuilder, java.text.FieldPosition);
+    method public final String formatMeasures(android.icu.util.Measure...);
+    method public StringBuilder formatMeasures(StringBuilder, java.text.FieldPosition, android.icu.util.Measure...);
+    method public static android.icu.text.MeasureFormat getCurrencyFormat(android.icu.util.ULocale);
+    method public static android.icu.text.MeasureFormat getCurrencyFormat(java.util.Locale);
+    method public static android.icu.text.MeasureFormat getCurrencyFormat();
+    method public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale, android.icu.text.MeasureFormat.FormatWidth);
+    method public static android.icu.text.MeasureFormat getInstance(java.util.Locale, android.icu.text.MeasureFormat.FormatWidth);
+    method public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale, android.icu.text.MeasureFormat.FormatWidth, android.icu.text.NumberFormat);
+    method public static android.icu.text.MeasureFormat getInstance(java.util.Locale, android.icu.text.MeasureFormat.FormatWidth, android.icu.text.NumberFormat);
+    method public final android.icu.util.ULocale getLocale();
+    method public android.icu.text.NumberFormat getNumberFormat();
+    method public String getUnitDisplayName(android.icu.util.MeasureUnit);
+    method public android.icu.text.MeasureFormat.FormatWidth getWidth();
+    method public final int hashCode();
+    method public android.icu.util.Measure parseObject(String, java.text.ParsePosition);
+  }
+
+  public enum MeasureFormat.FormatWidth {
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth NARROW;
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth NUMERIC;
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth SHORT;
+    enum_constant public static final android.icu.text.MeasureFormat.FormatWidth WIDE;
+  }
+
+  public class MessageFormat extends android.icu.text.UFormat {
+    ctor public MessageFormat(String);
+    ctor public MessageFormat(String, java.util.Locale);
+    ctor public MessageFormat(String, android.icu.util.ULocale);
+    method public void applyPattern(String);
+    method public void applyPattern(String, android.icu.text.MessagePattern.ApostropheMode);
+    method public static String autoQuoteApostrophe(String);
+    method public final StringBuffer format(Object[], StringBuffer, java.text.FieldPosition);
+    method public final StringBuffer format(java.util.Map<java.lang.String,java.lang.Object>, StringBuffer, java.text.FieldPosition);
+    method public static String format(String, java.lang.Object...);
+    method public static String format(String, java.util.Map<java.lang.String,java.lang.Object>);
+    method public final StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public android.icu.text.MessagePattern.ApostropheMode getApostropheMode();
+    method public java.util.Set<java.lang.String> getArgumentNames();
+    method public java.text.Format getFormatByArgumentName(String);
+    method public java.text.Format[] getFormats();
+    method public java.text.Format[] getFormatsByArgumentIndex();
+    method public java.util.Locale getLocale();
+    method public android.icu.util.ULocale getULocale();
+    method public Object[] parse(String, java.text.ParsePosition);
+    method public Object[] parse(String) throws java.text.ParseException;
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public java.util.Map<java.lang.String,java.lang.Object> parseToMap(String, java.text.ParsePosition);
+    method public java.util.Map<java.lang.String,java.lang.Object> parseToMap(String) throws java.text.ParseException;
+    method public void setFormat(int, java.text.Format);
+    method public void setFormatByArgumentIndex(int, java.text.Format);
+    method public void setFormatByArgumentName(String, java.text.Format);
+    method public void setFormats(java.text.Format[]);
+    method public void setFormatsByArgumentIndex(java.text.Format[]);
+    method public void setFormatsByArgumentName(java.util.Map<java.lang.String,java.text.Format>);
+    method public void setLocale(java.util.Locale);
+    method public void setLocale(android.icu.util.ULocale);
+    method public String toPattern();
+    method public boolean usesNamedArguments();
+  }
+
+  public static class MessageFormat.Field extends java.text.Format.Field {
+    ctor protected MessageFormat.Field(String);
+    field public static final android.icu.text.MessageFormat.Field ARGUMENT;
+  }
+
+  public final class MessagePattern implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.MessagePattern> {
+    ctor public MessagePattern();
+    ctor public MessagePattern(android.icu.text.MessagePattern.ApostropheMode);
+    ctor public MessagePattern(String);
+    method public String autoQuoteApostropheDeep();
+    method public void clear();
+    method public void clearPatternAndSetApostropheMode(android.icu.text.MessagePattern.ApostropheMode);
+    method public Object clone();
+    method public android.icu.text.MessagePattern cloneAsThawed();
+    method public int countParts();
+    method public android.icu.text.MessagePattern freeze();
+    method public android.icu.text.MessagePattern.ApostropheMode getApostropheMode();
+    method public int getLimitPartIndex(int);
+    method public double getNumericValue(android.icu.text.MessagePattern.Part);
+    method public android.icu.text.MessagePattern.Part getPart(int);
+    method public android.icu.text.MessagePattern.Part.Type getPartType(int);
+    method public int getPatternIndex(int);
+    method public String getPatternString();
+    method public double getPluralOffset(int);
+    method public String getSubstring(android.icu.text.MessagePattern.Part);
+    method public boolean hasNamedArguments();
+    method public boolean hasNumberedArguments();
+    method public boolean isFrozen();
+    method public android.icu.text.MessagePattern parse(String);
+    method public android.icu.text.MessagePattern parseChoiceStyle(String);
+    method public android.icu.text.MessagePattern parsePluralStyle(String);
+    method public android.icu.text.MessagePattern parseSelectStyle(String);
+    method public boolean partSubstringMatches(android.icu.text.MessagePattern.Part, String);
+    method public static int validateArgumentName(String);
+    field public static final int ARG_NAME_NOT_NUMBER = -1; // 0xffffffff
+    field public static final int ARG_NAME_NOT_VALID = -2; // 0xfffffffe
+    field public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+  }
+
+  public enum MessagePattern.ApostropheMode {
+    enum_constant public static final android.icu.text.MessagePattern.ApostropheMode DOUBLE_OPTIONAL;
+    enum_constant public static final android.icu.text.MessagePattern.ApostropheMode DOUBLE_REQUIRED;
+  }
+
+  public enum MessagePattern.ArgType {
+    method public boolean hasPluralStyle();
+    enum_constant public static final android.icu.text.MessagePattern.ArgType CHOICE;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType NONE;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType PLURAL;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType SELECT;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType SELECTORDINAL;
+    enum_constant public static final android.icu.text.MessagePattern.ArgType SIMPLE;
+  }
+
+  public static final class MessagePattern.Part {
+    method public android.icu.text.MessagePattern.ArgType getArgType();
+    method public int getIndex();
+    method public int getLength();
+    method public int getLimit();
+    method public android.icu.text.MessagePattern.Part.Type getType();
+    method public int getValue();
+  }
+
+  public enum MessagePattern.Part.Type {
+    method public boolean hasNumericValue();
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_DOUBLE;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_INT;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_LIMIT;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_NAME;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_NUMBER;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_SELECTOR;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_START;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_STYLE;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type ARG_TYPE;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type INSERT_CHAR;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type MSG_LIMIT;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type MSG_START;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type REPLACE_NUMBER;
+    enum_constant public static final android.icu.text.MessagePattern.Part.Type SKIP_SYNTAX;
+  }
+
+  public final class Normalizer implements java.lang.Cloneable {
+    method @Deprecated public Object clone();
+    method public static int compare(char[], int, int, char[], int, int, int);
+    method public static int compare(String, String, int);
+    method public static int compare(char[], char[], int);
+    method public static int compare(int, int, int);
+    method public static int compare(int, String, int);
+    field public static final int COMPARE_CODE_POINT_ORDER = 32768; // 0x8000
+    field public static final int COMPARE_IGNORE_CASE = 65536; // 0x10000
+    field public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+    field public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+    field public static final int INPUT_IS_FCD = 131072; // 0x20000
+    field public static final android.icu.text.Normalizer.QuickCheckResult MAYBE;
+    field public static final android.icu.text.Normalizer.QuickCheckResult NO;
+    field public static final android.icu.text.Normalizer.QuickCheckResult YES;
+  }
+
+  public static final class Normalizer.QuickCheckResult {
+  }
+
+  public abstract class Normalizer2 {
+    method public abstract StringBuilder append(StringBuilder, CharSequence);
+    method public int composePair(int, int);
+    method public int getCombiningClass(int);
+    method public abstract String getDecomposition(int);
+    method @Deprecated public static android.icu.text.Normalizer2 getInstance(java.io.InputStream, String, android.icu.text.Normalizer2.Mode);
+    method public static android.icu.text.Normalizer2 getNFCInstance();
+    method public static android.icu.text.Normalizer2 getNFDInstance();
+    method public static android.icu.text.Normalizer2 getNFKCCasefoldInstance();
+    method public static android.icu.text.Normalizer2 getNFKCInstance();
+    method public static android.icu.text.Normalizer2 getNFKDInstance();
+    method public String getRawDecomposition(int);
+    method public abstract boolean hasBoundaryAfter(int);
+    method public abstract boolean hasBoundaryBefore(int);
+    method public abstract boolean isInert(int);
+    method public abstract boolean isNormalized(CharSequence);
+    method public String normalize(CharSequence);
+    method public abstract StringBuilder normalize(CharSequence, StringBuilder);
+    method public abstract Appendable normalize(CharSequence, Appendable);
+    method public abstract StringBuilder normalizeSecondAndAppend(StringBuilder, CharSequence);
+    method public abstract android.icu.text.Normalizer.QuickCheckResult quickCheck(CharSequence);
+    method public abstract int spanQuickCheckYes(CharSequence);
+  }
+
+  public enum Normalizer2.Mode {
+    enum_constant public static final android.icu.text.Normalizer2.Mode COMPOSE;
+    enum_constant public static final android.icu.text.Normalizer2.Mode COMPOSE_CONTIGUOUS;
+    enum_constant public static final android.icu.text.Normalizer2.Mode DECOMPOSE;
+    enum_constant public static final android.icu.text.Normalizer2.Mode FCD;
+  }
+
+  public abstract class NumberFormat extends android.icu.text.UFormat {
+    ctor public NumberFormat();
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public final String format(double);
+    method public final String format(long);
+    method public final String format(java.math.BigInteger);
+    method public final String format(java.math.BigDecimal);
+    method public final String format(android.icu.math.BigDecimal);
+    method public final String format(android.icu.util.CurrencyAmount);
+    method public abstract StringBuffer format(double, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(long, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(java.math.BigInteger, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(java.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public abstract StringBuffer format(android.icu.math.BigDecimal, StringBuffer, java.text.FieldPosition);
+    method public StringBuffer format(android.icu.util.CurrencyAmount, StringBuffer, java.text.FieldPosition);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type);
+    method public android.icu.util.Currency getCurrency();
+    method public static final android.icu.text.NumberFormat getCurrencyInstance();
+    method public static android.icu.text.NumberFormat getCurrencyInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getCurrencyInstance(android.icu.util.ULocale);
+    method public static final android.icu.text.NumberFormat getInstance();
+    method public static android.icu.text.NumberFormat getInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale);
+    method public static final android.icu.text.NumberFormat getInstance(int);
+    method public static android.icu.text.NumberFormat getInstance(java.util.Locale, int);
+    method public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale, int);
+    method public static final android.icu.text.NumberFormat getIntegerInstance();
+    method public static android.icu.text.NumberFormat getIntegerInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getIntegerInstance(android.icu.util.ULocale);
+    method public int getMaximumFractionDigits();
+    method public int getMaximumIntegerDigits();
+    method public int getMinimumFractionDigits();
+    method public int getMinimumIntegerDigits();
+    method public static final android.icu.text.NumberFormat getNumberInstance();
+    method public static android.icu.text.NumberFormat getNumberInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getNumberInstance(android.icu.util.ULocale);
+    method protected static String getPattern(android.icu.util.ULocale, int);
+    method public static final android.icu.text.NumberFormat getPercentInstance();
+    method public static android.icu.text.NumberFormat getPercentInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getPercentInstance(android.icu.util.ULocale);
+    method public int getRoundingMode();
+    method public static final android.icu.text.NumberFormat getScientificInstance();
+    method public static android.icu.text.NumberFormat getScientificInstance(java.util.Locale);
+    method public static android.icu.text.NumberFormat getScientificInstance(android.icu.util.ULocale);
+    method public boolean isGroupingUsed();
+    method public boolean isParseIntegerOnly();
+    method public boolean isParseStrict();
+    method public abstract Number parse(String, java.text.ParsePosition);
+    method public Number parse(String) throws java.text.ParseException;
+    method public android.icu.util.CurrencyAmount parseCurrency(CharSequence, java.text.ParsePosition);
+    method public final Object parseObject(String, java.text.ParsePosition);
+    method public void setContext(android.icu.text.DisplayContext);
+    method public void setCurrency(android.icu.util.Currency);
+    method public void setGroupingUsed(boolean);
+    method public void setMaximumFractionDigits(int);
+    method public void setMaximumIntegerDigits(int);
+    method public void setMinimumFractionDigits(int);
+    method public void setMinimumIntegerDigits(int);
+    method public void setParseIntegerOnly(boolean);
+    method public void setParseStrict(boolean);
+    method public void setRoundingMode(int);
+    field public static final int ACCOUNTINGCURRENCYSTYLE = 7; // 0x7
+    field public static final int CASHCURRENCYSTYLE = 8; // 0x8
+    field public static final int CURRENCYSTYLE = 1; // 0x1
+    field public static final int FRACTION_FIELD = 1; // 0x1
+    field public static final int INTEGERSTYLE = 4; // 0x4
+    field public static final int INTEGER_FIELD = 0; // 0x0
+    field public static final int ISOCURRENCYSTYLE = 5; // 0x5
+    field public static final int NUMBERSTYLE = 0; // 0x0
+    field public static final int PERCENTSTYLE = 2; // 0x2
+    field public static final int PLURALCURRENCYSTYLE = 6; // 0x6
+    field public static final int SCIENTIFICSTYLE = 3; // 0x3
+    field public static final int STANDARDCURRENCYSTYLE = 9; // 0x9
+  }
+
+  public static class NumberFormat.Field extends java.text.Format.Field {
+    ctor protected NumberFormat.Field(String);
+    field public static final android.icu.text.NumberFormat.Field COMPACT;
+    field public static final android.icu.text.NumberFormat.Field CURRENCY;
+    field public static final android.icu.text.NumberFormat.Field DECIMAL_SEPARATOR;
+    field public static final android.icu.text.NumberFormat.Field EXPONENT;
+    field public static final android.icu.text.NumberFormat.Field EXPONENT_SIGN;
+    field public static final android.icu.text.NumberFormat.Field EXPONENT_SYMBOL;
+    field public static final android.icu.text.NumberFormat.Field FRACTION;
+    field public static final android.icu.text.NumberFormat.Field GROUPING_SEPARATOR;
+    field public static final android.icu.text.NumberFormat.Field INTEGER;
+    field public static final android.icu.text.NumberFormat.Field MEASURE_UNIT;
+    field public static final android.icu.text.NumberFormat.Field PERCENT;
+    field public static final android.icu.text.NumberFormat.Field PERMILLE;
+    field public static final android.icu.text.NumberFormat.Field SIGN;
+  }
+
+  public class NumberingSystem {
+    ctor public NumberingSystem();
+    method public static String[] getAvailableNames();
+    method public String getDescription();
+    method public static android.icu.text.NumberingSystem getInstance(int, boolean, String);
+    method public static android.icu.text.NumberingSystem getInstance(java.util.Locale);
+    method public static android.icu.text.NumberingSystem getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.NumberingSystem getInstance();
+    method public static android.icu.text.NumberingSystem getInstanceByName(String);
+    method public String getName();
+    method public int getRadix();
+    method public boolean isAlgorithmic();
+    method public static boolean isValidDigitString(String);
+    field public static final android.icu.text.NumberingSystem LATIN;
+  }
+
+  public class PluralFormat extends android.icu.text.UFormat {
+    ctor public PluralFormat();
+    ctor public PluralFormat(android.icu.util.ULocale);
+    ctor public PluralFormat(java.util.Locale);
+    ctor public PluralFormat(android.icu.text.PluralRules);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules);
+    ctor public PluralFormat(java.util.Locale, android.icu.text.PluralRules);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules.PluralType);
+    ctor public PluralFormat(java.util.Locale, android.icu.text.PluralRules.PluralType);
+    ctor public PluralFormat(String);
+    ctor public PluralFormat(android.icu.util.ULocale, String);
+    ctor public PluralFormat(android.icu.text.PluralRules, String);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules, String);
+    ctor public PluralFormat(android.icu.util.ULocale, android.icu.text.PluralRules.PluralType, String);
+    method public void applyPattern(String);
+    method public boolean equals(android.icu.text.PluralFormat);
+    method public final String format(double);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public Number parse(String, java.text.ParsePosition);
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public void setNumberFormat(android.icu.text.NumberFormat);
+    method public String toPattern();
+  }
+
+  public class PluralRules implements java.io.Serializable {
+    method public static android.icu.text.PluralRules createRules(String);
+    method public boolean equals(android.icu.text.PluralRules);
+    method public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale);
+    method public static android.icu.text.PluralRules forLocale(java.util.Locale);
+    method public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale, android.icu.text.PluralRules.PluralType);
+    method public static android.icu.text.PluralRules forLocale(java.util.Locale, android.icu.text.PluralRules.PluralType);
+    method public java.util.Collection<java.lang.Double> getAllKeywordValues(String);
+    method public java.util.Set<java.lang.String> getKeywords();
+    method public java.util.Collection<java.lang.Double> getSamples(String);
+    method public double getUniqueKeywordValue(String);
+    method public static android.icu.text.PluralRules parseDescription(String) throws java.text.ParseException;
+    method public String select(double);
+    method public String select(android.icu.number.FormattedNumber);
+    field public static final android.icu.text.PluralRules DEFAULT;
+    field public static final String KEYWORD_FEW = "few";
+    field public static final String KEYWORD_MANY = "many";
+    field public static final String KEYWORD_ONE = "one";
+    field public static final String KEYWORD_OTHER = "other";
+    field public static final String KEYWORD_TWO = "two";
+    field public static final String KEYWORD_ZERO = "zero";
+    field public static final double NO_UNIQUE_VALUE = -0.00123456777;
+  }
+
+  public enum PluralRules.PluralType {
+    enum_constant public static final android.icu.text.PluralRules.PluralType CARDINAL;
+    enum_constant public static final android.icu.text.PluralRules.PluralType ORDINAL;
+  }
+
+  public final class RelativeDateTimeFormatter {
+    method public String combineDateAndTime(String, String);
+    method public String format(double, android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit);
+    method public String format(android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit);
+    method public String format(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public String formatNumeric(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatNumericToValue(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double, android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(android.icu.text.RelativeDateTimeFormatter.Direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit);
+    method public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit);
+    method public android.icu.text.DisplayContext getCapitalizationContext();
+    method public android.icu.text.RelativeDateTimeFormatter.Style getFormatStyle();
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance();
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale, android.icu.text.NumberFormat);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale, android.icu.text.NumberFormat, android.icu.text.RelativeDateTimeFormatter.Style, android.icu.text.DisplayContext);
+    method public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale, android.icu.text.NumberFormat);
+    method public android.icu.text.NumberFormat getNumberFormat();
+  }
+
+  public enum RelativeDateTimeFormatter.AbsoluteUnit {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit DAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit FRIDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit HOUR;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit MINUTE;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit MONDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit MONTH;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit NOW;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit QUARTER;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit SATURDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit SUNDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit THURSDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit TUESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit WEDNESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit WEEK;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit YEAR;
+  }
+
+  public enum RelativeDateTimeFormatter.Direction {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction LAST;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction LAST_2;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction NEXT;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction NEXT_2;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction PLAIN;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Direction THIS;
+  }
+
+  public static class RelativeDateTimeFormatter.FormattedRelativeDateTime implements android.icu.text.FormattedValue {
+    method public <A extends java.lang.Appendable> A appendTo(A);
+    method public char charAt(int);
+    method public int length();
+    method public boolean nextPosition(android.icu.text.ConstrainedFieldPosition);
+    method public CharSequence subSequence(int, int);
+    method public java.text.AttributedCharacterIterator toCharacterIterator();
+  }
+
+  public enum RelativeDateTimeFormatter.RelativeDateTimeUnit {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit DAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit FRIDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit HOUR;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MINUTE;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit MONTH;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit QUARTER;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SATURDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SECOND;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit SUNDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit THURSDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit TUESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEDNESDAY;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit WEEK;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit YEAR;
+  }
+
+  public enum RelativeDateTimeFormatter.RelativeUnit {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit DAYS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit HOURS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit MINUTES;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit MONTHS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit SECONDS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit WEEKS;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.RelativeUnit YEARS;
+  }
+
+  public enum RelativeDateTimeFormatter.Style {
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Style LONG;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Style NARROW;
+    enum_constant public static final android.icu.text.RelativeDateTimeFormatter.Style SHORT;
+  }
+
+  public interface Replaceable {
+    method public int char32At(int);
+    method public char charAt(int);
+    method public void copy(int, int, int);
+    method public void getChars(int, int, char[], int);
+    method public boolean hasMetaData();
+    method public int length();
+    method public void replace(int, int, String);
+    method public void replace(int, int, char[], int, int);
+  }
+
+  public final class RuleBasedCollator extends android.icu.text.Collator {
+    ctor public RuleBasedCollator(String) throws java.lang.Exception;
+    method public android.icu.text.RuleBasedCollator cloneAsThawed();
+    method public int compare(String, String);
+    method public android.icu.text.CollationElementIterator getCollationElementIterator(String);
+    method public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator);
+    method public android.icu.text.CollationElementIterator getCollationElementIterator(android.icu.text.UCharacterIterator);
+    method public android.icu.text.CollationKey getCollationKey(String);
+    method public void getContractionsAndExpansions(android.icu.text.UnicodeSet, android.icu.text.UnicodeSet, boolean) throws java.lang.Exception;
+    method public boolean getNumericCollation();
+    method public String getRules();
+    method public String getRules(boolean);
+    method public android.icu.util.VersionInfo getUCAVersion();
+    method public int getVariableTop();
+    method public android.icu.util.VersionInfo getVersion();
+    method public boolean isAlternateHandlingShifted();
+    method public boolean isCaseLevel();
+    method public boolean isFrenchCollation();
+    method public boolean isLowerCaseFirst();
+    method public boolean isUpperCaseFirst();
+    method public void setAlternateHandlingDefault();
+    method public void setAlternateHandlingShifted(boolean);
+    method public void setCaseFirstDefault();
+    method public void setCaseLevel(boolean);
+    method public void setCaseLevelDefault();
+    method public void setDecompositionDefault();
+    method public void setFrenchCollation(boolean);
+    method public void setFrenchCollationDefault();
+    method public void setLowerCaseFirst(boolean);
+    method public android.icu.text.RuleBasedCollator setMaxVariable(int);
+    method public void setNumericCollation(boolean);
+    method public void setNumericCollationDefault();
+    method public void setStrengthDefault();
+    method public void setUpperCaseFirst(boolean);
+  }
+
+  public final class ScientificNumberFormatter {
+    method public String format(Object);
+    method public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.util.ULocale, String, String);
+    method public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.text.DecimalFormat, String, String);
+    method public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.util.ULocale);
+    method public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.text.DecimalFormat);
+  }
+
+  public abstract class SearchIterator {
+    ctor protected SearchIterator(java.text.CharacterIterator, android.icu.text.BreakIterator);
+    method public final int first();
+    method public final int following(int);
+    method public android.icu.text.BreakIterator getBreakIterator();
+    method public android.icu.text.SearchIterator.ElementComparisonType getElementComparisonType();
+    method public abstract int getIndex();
+    method public int getMatchLength();
+    method public int getMatchStart();
+    method public String getMatchedText();
+    method public java.text.CharacterIterator getTarget();
+    method protected abstract int handleNext(int);
+    method protected abstract int handlePrevious(int);
+    method public boolean isOverlapping();
+    method public final int last();
+    method public int next();
+    method public final int preceding(int);
+    method public int previous();
+    method public void reset();
+    method public void setBreakIterator(android.icu.text.BreakIterator);
+    method public void setElementComparisonType(android.icu.text.SearchIterator.ElementComparisonType);
+    method public void setIndex(int);
+    method protected void setMatchLength(int);
+    method public void setOverlapping(boolean);
+    method public void setTarget(java.text.CharacterIterator);
+    field public static final int DONE = -1; // 0xffffffff
+    field protected android.icu.text.BreakIterator breakIterator;
+    field protected int matchLength;
+    field protected java.text.CharacterIterator targetText;
+  }
+
+  public enum SearchIterator.ElementComparisonType {
+    enum_constant public static final android.icu.text.SearchIterator.ElementComparisonType ANY_BASE_WEIGHT_IS_WILDCARD;
+    enum_constant public static final android.icu.text.SearchIterator.ElementComparisonType PATTERN_BASE_WEIGHT_IS_WILDCARD;
+    enum_constant public static final android.icu.text.SearchIterator.ElementComparisonType STANDARD_ELEMENT_COMPARISON;
+  }
+
+  public class SelectFormat extends java.text.Format {
+    ctor public SelectFormat(String);
+    method public void applyPattern(String);
+    method public final String format(String);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public String toPattern();
+  }
+
+  public class SimpleDateFormat extends android.icu.text.DateFormat {
+    ctor public SimpleDateFormat();
+    ctor public SimpleDateFormat(String);
+    ctor public SimpleDateFormat(String, java.util.Locale);
+    ctor public SimpleDateFormat(String, android.icu.util.ULocale);
+    ctor public SimpleDateFormat(String, String, android.icu.util.ULocale);
+    ctor public SimpleDateFormat(String, android.icu.text.DateFormatSymbols);
+    method public void applyLocalizedPattern(String);
+    method public void applyPattern(String);
+    method public StringBuffer format(android.icu.util.Calendar, StringBuffer, java.text.FieldPosition);
+    method public java.util.Date get2DigitYearStart();
+    method public android.icu.text.DateFormatSymbols getDateFormatSymbols();
+    method public android.icu.text.NumberFormat getNumberFormat(char);
+    method protected android.icu.text.DateFormatSymbols getSymbols();
+    method public android.icu.text.TimeZoneFormat getTimeZoneFormat();
+    method protected int matchQuarterString(String, int, int, String[], android.icu.util.Calendar);
+    method protected int matchString(String, int, int, String[], android.icu.util.Calendar);
+    method public void parse(String, android.icu.util.Calendar, java.text.ParsePosition);
+    method protected android.icu.text.DateFormat.Field patternCharToDateFormatField(char);
+    method public void set2DigitYearStart(java.util.Date);
+    method public void setDateFormatSymbols(android.icu.text.DateFormatSymbols);
+    method public void setNumberFormat(String, android.icu.text.NumberFormat);
+    method public void setTimeZoneFormat(android.icu.text.TimeZoneFormat);
+    method protected String subFormat(char, int, int, java.text.FieldPosition, android.icu.text.DateFormatSymbols, android.icu.util.Calendar) throws java.lang.IllegalArgumentException;
+    method protected int subParse(String, int, char, int, boolean, boolean, boolean[], android.icu.util.Calendar);
+    method public String toLocalizedPattern();
+    method public String toPattern();
+    method protected String zeroPaddingNumber(long, int, int);
+  }
+
+  public class StringPrepParseException extends java.text.ParseException {
+    ctor public StringPrepParseException(String, int);
+    ctor public StringPrepParseException(String, int, String, int);
+    ctor public StringPrepParseException(String, int, String, int, int);
+    method public int getError();
+    field public static final int ACE_PREFIX_ERROR = 6; // 0x6
+    field public static final int BUFFER_OVERFLOW_ERROR = 9; // 0x9
+    field public static final int CHECK_BIDI_ERROR = 4; // 0x4
+    field public static final int DOMAIN_NAME_TOO_LONG_ERROR = 11; // 0xb
+    field public static final int ILLEGAL_CHAR_FOUND = 1; // 0x1
+    field public static final int INVALID_CHAR_FOUND = 0; // 0x0
+    field public static final int LABEL_TOO_LONG_ERROR = 8; // 0x8
+    field public static final int PROHIBITED_ERROR = 2; // 0x2
+    field public static final int STD3_ASCII_RULES_ERROR = 5; // 0x5
+    field public static final int UNASSIGNED_ERROR = 3; // 0x3
+    field public static final int VERIFICATION_ERROR = 7; // 0x7
+    field public static final int ZERO_LENGTH_LABEL = 10; // 0xa
+  }
+
+  public final class StringSearch extends android.icu.text.SearchIterator {
+    ctor public StringSearch(String, java.text.CharacterIterator, android.icu.text.RuleBasedCollator, android.icu.text.BreakIterator);
+    ctor public StringSearch(String, java.text.CharacterIterator, android.icu.text.RuleBasedCollator);
+    ctor public StringSearch(String, java.text.CharacterIterator, java.util.Locale);
+    ctor public StringSearch(String, java.text.CharacterIterator, android.icu.util.ULocale);
+    ctor public StringSearch(String, String);
+    method public android.icu.text.RuleBasedCollator getCollator();
+    method public int getIndex();
+    method public String getPattern();
+    method protected int handleNext(int);
+    method protected int handlePrevious(int);
+    method public boolean isCanonical();
+    method public void setCanonical(boolean);
+    method public void setCollator(android.icu.text.RuleBasedCollator);
+    method public void setPattern(String);
+  }
+
+  public interface SymbolTable {
+    method public char[] lookup(String);
+    method public android.icu.text.UnicodeMatcher lookupMatcher(int);
+    method public String parseReference(String, java.text.ParsePosition, int);
+    field public static final char SYMBOL_REF = 36; // 0x0024 '$'
+  }
+
+  public class TimeZoneFormat extends android.icu.text.UFormat implements android.icu.util.Freezable<android.icu.text.TimeZoneFormat> java.io.Serializable {
+    ctor protected TimeZoneFormat(android.icu.util.ULocale);
+    method public android.icu.text.TimeZoneFormat cloneAsThawed();
+    method public final String format(android.icu.text.TimeZoneFormat.Style, android.icu.util.TimeZone, long);
+    method public String format(android.icu.text.TimeZoneFormat.Style, android.icu.util.TimeZone, long, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType>);
+    method public StringBuffer format(Object, StringBuffer, java.text.FieldPosition);
+    method public final String formatOffsetISO8601Basic(int, boolean, boolean, boolean);
+    method public final String formatOffsetISO8601Extended(int, boolean, boolean, boolean);
+    method public String formatOffsetLocalizedGMT(int);
+    method public String formatOffsetShortLocalizedGMT(int);
+    method public android.icu.text.TimeZoneFormat freeze();
+    method public java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> getDefaultParseOptions();
+    method public String getGMTOffsetDigits();
+    method public String getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType);
+    method public String getGMTPattern();
+    method public String getGMTZeroFormat();
+    method public static android.icu.text.TimeZoneFormat getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.TimeZoneFormat getInstance(java.util.Locale);
+    method public android.icu.text.TimeZoneNames getTimeZoneNames();
+    method public boolean isFrozen();
+    method public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style, String, java.text.ParsePosition, java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption>, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType>);
+    method public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style, String, java.text.ParsePosition, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType>);
+    method public final android.icu.util.TimeZone parse(String, java.text.ParsePosition);
+    method public final android.icu.util.TimeZone parse(String) throws java.text.ParseException;
+    method public Object parseObject(String, java.text.ParsePosition);
+    method public final int parseOffsetISO8601(String, java.text.ParsePosition);
+    method public int parseOffsetLocalizedGMT(String, java.text.ParsePosition);
+    method public int parseOffsetShortLocalizedGMT(String, java.text.ParsePosition);
+    method public android.icu.text.TimeZoneFormat setDefaultParseOptions(java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption>);
+    method public android.icu.text.TimeZoneFormat setGMTOffsetDigits(String);
+    method public android.icu.text.TimeZoneFormat setGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType, String);
+    method public android.icu.text.TimeZoneFormat setGMTPattern(String);
+    method public android.icu.text.TimeZoneFormat setGMTZeroFormat(String);
+    method public android.icu.text.TimeZoneFormat setTimeZoneNames(android.icu.text.TimeZoneNames);
+  }
+
+  public enum TimeZoneFormat.GMTOffsetPatternType {
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType NEGATIVE_H;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType NEGATIVE_HM;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType NEGATIVE_HMS;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType POSITIVE_H;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType POSITIVE_HM;
+    enum_constant public static final android.icu.text.TimeZoneFormat.GMTOffsetPatternType POSITIVE_HMS;
+  }
+
+  public enum TimeZoneFormat.ParseOption {
+    enum_constant public static final android.icu.text.TimeZoneFormat.ParseOption ALL_STYLES;
+    enum_constant public static final android.icu.text.TimeZoneFormat.ParseOption TZ_DATABASE_ABBREVIATIONS;
+  }
+
+  public enum TimeZoneFormat.Style {
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style EXEMPLAR_LOCATION;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style GENERIC_LOCATION;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style GENERIC_LONG;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style GENERIC_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_LOCAL_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_LOCAL_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_LOCAL_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_BASIC_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_LOCAL_FIXED;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ISO_EXTENDED_LOCAL_FULL;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style LOCALIZED_GMT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style LOCALIZED_GMT_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style SPECIFIC_LONG;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style SPECIFIC_SHORT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ZONE_ID;
+    enum_constant public static final android.icu.text.TimeZoneFormat.Style ZONE_ID_SHORT;
+  }
+
+  public enum TimeZoneFormat.TimeType {
+    enum_constant public static final android.icu.text.TimeZoneFormat.TimeType DAYLIGHT;
+    enum_constant public static final android.icu.text.TimeZoneFormat.TimeType STANDARD;
+    enum_constant public static final android.icu.text.TimeZoneFormat.TimeType UNKNOWN;
+  }
+
+  public abstract class TimeZoneNames implements java.io.Serializable {
+    method public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs();
+    method public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs(String);
+    method public final String getDisplayName(String, android.icu.text.TimeZoneNames.NameType, long);
+    method public String getExemplarLocationName(String);
+    method public static android.icu.text.TimeZoneNames getInstance(android.icu.util.ULocale);
+    method public static android.icu.text.TimeZoneNames getInstance(java.util.Locale);
+    method public abstract String getMetaZoneDisplayName(String, android.icu.text.TimeZoneNames.NameType);
+    method public abstract String getMetaZoneID(String, long);
+    method public abstract String getReferenceZoneID(String, String);
+    method public static android.icu.text.TimeZoneNames getTZDBInstance(android.icu.util.ULocale);
+    method public abstract String getTimeZoneDisplayName(String, android.icu.text.TimeZoneNames.NameType);
+  }
+
+  public enum TimeZoneNames.NameType {
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType EXEMPLAR_LOCATION;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType LONG_DAYLIGHT;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType LONG_GENERIC;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType LONG_STANDARD;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType SHORT_DAYLIGHT;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType SHORT_GENERIC;
+    enum_constant public static final android.icu.text.TimeZoneNames.NameType SHORT_STANDARD;
+  }
+
+  public abstract class Transliterator {
+    method public static final android.icu.text.Transliterator createFromRules(String, String, int);
+    method public void filteredTransliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, boolean);
+    method public final void finishTransliteration(android.icu.text.Replaceable, android.icu.text.Transliterator.Position);
+    method public static final java.util.Enumeration<java.lang.String> getAvailableIDs();
+    method public static final java.util.Enumeration<java.lang.String> getAvailableSources();
+    method public static final java.util.Enumeration<java.lang.String> getAvailableTargets(String);
+    method public static final java.util.Enumeration<java.lang.String> getAvailableVariants(String, String);
+    method public static final String getDisplayName(String);
+    method public static String getDisplayName(String, java.util.Locale);
+    method public static String getDisplayName(String, android.icu.util.ULocale);
+    method public android.icu.text.Transliterator[] getElements();
+    method public final android.icu.text.UnicodeFilter getFilter();
+    method public final String getID();
+    method public static final android.icu.text.Transliterator getInstance(String);
+    method public static android.icu.text.Transliterator getInstance(String, int);
+    method public final android.icu.text.Transliterator getInverse();
+    method public final int getMaximumContextLength();
+    method public final android.icu.text.UnicodeSet getSourceSet();
+    method public android.icu.text.UnicodeSet getTargetSet();
+    method public void setFilter(android.icu.text.UnicodeFilter);
+    method public String toRules(boolean);
+    method public final int transliterate(android.icu.text.Replaceable, int, int);
+    method public final void transliterate(android.icu.text.Replaceable);
+    method public final String transliterate(String);
+    method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, String);
+    method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position, int);
+    method public final void transliterate(android.icu.text.Replaceable, android.icu.text.Transliterator.Position);
+    field public static final int FORWARD = 0; // 0x0
+    field public static final int REVERSE = 1; // 0x1
+  }
+
+  public static class Transliterator.Position {
+    ctor public Transliterator.Position();
+    ctor public Transliterator.Position(int, int, int);
+    ctor public Transliterator.Position(int, int, int, int);
+    ctor public Transliterator.Position(android.icu.text.Transliterator.Position);
+    method public void set(android.icu.text.Transliterator.Position);
+    method public final void validate(int);
+    field public int contextLimit;
+    field public int contextStart;
+    field public int limit;
+    field public int start;
+  }
+
+  public abstract class UCharacterIterator implements java.lang.Cloneable {
+    ctor protected UCharacterIterator();
+    method public Object clone() throws java.lang.CloneNotSupportedException;
+    method public abstract int current();
+    method public int currentCodePoint();
+    method public java.text.CharacterIterator getCharacterIterator();
+    method public abstract int getIndex();
+    method public static final android.icu.text.UCharacterIterator getInstance(android.icu.text.Replaceable);
+    method public static final android.icu.text.UCharacterIterator getInstance(String);
+    method public static final android.icu.text.UCharacterIterator getInstance(char[]);
+    method public static final android.icu.text.UCharacterIterator getInstance(char[], int, int);
+    method public static final android.icu.text.UCharacterIterator getInstance(StringBuffer);
+    method public static final android.icu.text.UCharacterIterator getInstance(java.text.CharacterIterator);
+    method public abstract int getLength();
+    method public abstract int getText(char[], int);
+    method public final int getText(char[]);
+    method public String getText();
+    method public int moveCodePointIndex(int);
+    method public int moveIndex(int);
+    method public abstract int next();
+    method public int nextCodePoint();
+    method public abstract int previous();
+    method public int previousCodePoint();
+    method public abstract void setIndex(int);
+    method public void setToLimit();
+    method public void setToStart();
+    field public static final int DONE = -1; // 0xffffffff
+  }
+
+  public abstract class UFormat extends java.text.Format {
+    ctor public UFormat();
+  }
+
+  public abstract class UnicodeFilter implements android.icu.text.UnicodeMatcher {
+    method public abstract boolean contains(int);
+    method public int matches(android.icu.text.Replaceable, int[], int, boolean);
+  }
+
+  public interface UnicodeMatcher {
+    method public void addMatchSetTo(android.icu.text.UnicodeSet);
+    method public int matches(android.icu.text.Replaceable, int[], int, boolean);
+    method public boolean matchesIndexValue(int);
+    method public String toPattern(boolean);
+    field public static final char ETHER = 65535; // 0xffff '\uffff'
+    field public static final int U_MATCH = 2; // 0x2
+    field public static final int U_MISMATCH = 0; // 0x0
+    field public static final int U_PARTIAL_MATCH = 1; // 0x1
+  }
+
+  public class UnicodeSet extends android.icu.text.UnicodeFilter implements java.lang.Comparable<android.icu.text.UnicodeSet> android.icu.util.Freezable<android.icu.text.UnicodeSet> java.lang.Iterable<java.lang.String> {
+    ctor public UnicodeSet();
+    ctor public UnicodeSet(android.icu.text.UnicodeSet);
+    ctor public UnicodeSet(int, int);
+    ctor public UnicodeSet(int...);
+    ctor public UnicodeSet(String);
+    ctor public UnicodeSet(String, boolean);
+    ctor public UnicodeSet(String, int);
+    ctor public UnicodeSet(String, java.text.ParsePosition, android.icu.text.SymbolTable);
+    ctor public UnicodeSet(String, java.text.ParsePosition, android.icu.text.SymbolTable, int);
+    method public StringBuffer _generatePattern(StringBuffer, boolean);
+    method public StringBuffer _generatePattern(StringBuffer, boolean, boolean);
+    method public android.icu.text.UnicodeSet add(int, int);
+    method public final android.icu.text.UnicodeSet add(int);
+    method public final android.icu.text.UnicodeSet add(CharSequence);
+    method public android.icu.text.UnicodeSet add(Iterable<?>);
+    method public android.icu.text.UnicodeSet addAll(int, int);
+    method public final android.icu.text.UnicodeSet addAll(CharSequence);
+    method public android.icu.text.UnicodeSet addAll(android.icu.text.UnicodeSet);
+    method public android.icu.text.UnicodeSet addAll(Iterable<?>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet addAll(T...);
+    method public <T extends java.util.Collection<java.lang.String>> T addAllTo(T);
+    method public void addMatchSetTo(android.icu.text.UnicodeSet);
+    method public android.icu.text.UnicodeSet applyIntPropertyValue(int, int);
+    method public final android.icu.text.UnicodeSet applyPattern(String);
+    method public android.icu.text.UnicodeSet applyPattern(String, boolean);
+    method public android.icu.text.UnicodeSet applyPattern(String, int);
+    method public android.icu.text.UnicodeSet applyPropertyAlias(String, String);
+    method public android.icu.text.UnicodeSet applyPropertyAlias(String, String, android.icu.text.SymbolTable);
+    method public int charAt(int);
+    method public android.icu.text.UnicodeSet clear();
+    method public Object clone();
+    method public android.icu.text.UnicodeSet cloneAsThawed();
+    method public android.icu.text.UnicodeSet closeOver(int);
+    method public android.icu.text.UnicodeSet compact();
+    method public int compareTo(android.icu.text.UnicodeSet);
+    method public int compareTo(android.icu.text.UnicodeSet, android.icu.text.UnicodeSet.ComparisonStyle);
+    method public int compareTo(Iterable<java.lang.String>);
+    method public android.icu.text.UnicodeSet complement(int, int);
+    method public final android.icu.text.UnicodeSet complement(int);
+    method public android.icu.text.UnicodeSet complement();
+    method public final android.icu.text.UnicodeSet complement(CharSequence);
+    method public final android.icu.text.UnicodeSet complementAll(CharSequence);
+    method public android.icu.text.UnicodeSet complementAll(android.icu.text.UnicodeSet);
+    method public boolean contains(int);
+    method public boolean contains(int, int);
+    method public final boolean contains(CharSequence);
+    method public boolean containsAll(android.icu.text.UnicodeSet);
+    method public boolean containsAll(String);
+    method public <T extends java.lang.CharSequence> boolean containsAll(Iterable<T>);
+    method public boolean containsNone(int, int);
+    method public boolean containsNone(android.icu.text.UnicodeSet);
+    method public boolean containsNone(CharSequence);
+    method public <T extends java.lang.CharSequence> boolean containsNone(Iterable<T>);
+    method public final boolean containsSome(int, int);
+    method public final boolean containsSome(android.icu.text.UnicodeSet);
+    method public final boolean containsSome(CharSequence);
+    method public final <T extends java.lang.CharSequence> boolean containsSome(Iterable<T>);
+    method public android.icu.text.UnicodeSet freeze();
+    method public static android.icu.text.UnicodeSet from(CharSequence);
+    method public static android.icu.text.UnicodeSet fromAll(CharSequence);
+    method public int getRangeCount();
+    method public int getRangeEnd(int);
+    method public int getRangeStart(int);
+    method public int indexOf(int);
+    method public boolean isEmpty();
+    method public boolean isFrozen();
+    method public java.util.Iterator<java.lang.String> iterator();
+    method public boolean matchesIndexValue(int);
+    method public Iterable<android.icu.text.UnicodeSet.EntryRange> ranges();
+    method public android.icu.text.UnicodeSet remove(int, int);
+    method public final android.icu.text.UnicodeSet remove(int);
+    method public final android.icu.text.UnicodeSet remove(CharSequence);
+    method public final android.icu.text.UnicodeSet removeAll(CharSequence);
+    method public android.icu.text.UnicodeSet removeAll(android.icu.text.UnicodeSet);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet removeAll(Iterable<T>);
+    method public final android.icu.text.UnicodeSet removeAllStrings();
+    method public android.icu.text.UnicodeSet retain(int, int);
+    method public final android.icu.text.UnicodeSet retain(int);
+    method public final android.icu.text.UnicodeSet retain(CharSequence);
+    method public final android.icu.text.UnicodeSet retainAll(CharSequence);
+    method public android.icu.text.UnicodeSet retainAll(android.icu.text.UnicodeSet);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet retainAll(Iterable<T>);
+    method public android.icu.text.UnicodeSet set(int, int);
+    method public android.icu.text.UnicodeSet set(android.icu.text.UnicodeSet);
+    method public int size();
+    method public int span(CharSequence, android.icu.text.UnicodeSet.SpanCondition);
+    method public int span(CharSequence, int, android.icu.text.UnicodeSet.SpanCondition);
+    method public int spanBack(CharSequence, android.icu.text.UnicodeSet.SpanCondition);
+    method public int spanBack(CharSequence, int, android.icu.text.UnicodeSet.SpanCondition);
+    method public java.util.Collection<java.lang.String> strings();
+    method public String toPattern(boolean);
+    field public static final int ADD_CASE_MAPPINGS = 4; // 0x4
+    field public static final android.icu.text.UnicodeSet ALL_CODE_POINTS;
+    field public static final int CASE = 2; // 0x2
+    field public static final int CASE_INSENSITIVE = 2; // 0x2
+    field public static final android.icu.text.UnicodeSet EMPTY;
+    field public static final int IGNORE_SPACE = 1; // 0x1
+    field public static final int MAX_VALUE = 1114111; // 0x10ffff
+    field public static final int MIN_VALUE = 0; // 0x0
+  }
+
+  public enum UnicodeSet.ComparisonStyle {
+    enum_constant public static final android.icu.text.UnicodeSet.ComparisonStyle LEXICOGRAPHIC;
+    enum_constant public static final android.icu.text.UnicodeSet.ComparisonStyle LONGER_FIRST;
+    enum_constant public static final android.icu.text.UnicodeSet.ComparisonStyle SHORTER_FIRST;
+  }
+
+  public static class UnicodeSet.EntryRange {
+    field public int codepoint;
+    field public int codepointEnd;
+  }
+
+  public enum UnicodeSet.SpanCondition {
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition CONDITION_COUNT;
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition CONTAINED;
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition NOT_CONTAINED;
+    enum_constant public static final android.icu.text.UnicodeSet.SpanCondition SIMPLE;
+  }
+
+  public class UnicodeSetIterator {
+    ctor public UnicodeSetIterator(android.icu.text.UnicodeSet);
+    ctor public UnicodeSetIterator();
+    method public String getString();
+    method public boolean next();
+    method public boolean nextRange();
+    method public void reset(android.icu.text.UnicodeSet);
+    method public void reset();
+    field public static int IS_STRING;
+    field public int codepoint;
+    field public int codepointEnd;
+    field public String string;
+  }
+
+  public class UnicodeSetSpanner {
+    ctor public UnicodeSetSpanner(android.icu.text.UnicodeSet);
+    method public int countIn(CharSequence);
+    method public int countIn(CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod);
+    method public int countIn(CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod, android.icu.text.UnicodeSet.SpanCondition);
+    method public String deleteFrom(CharSequence);
+    method public String deleteFrom(CharSequence, android.icu.text.UnicodeSet.SpanCondition);
+    method public android.icu.text.UnicodeSet getUnicodeSet();
+    method public String replaceFrom(CharSequence, CharSequence);
+    method public String replaceFrom(CharSequence, CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod);
+    method public String replaceFrom(CharSequence, CharSequence, android.icu.text.UnicodeSetSpanner.CountMethod, android.icu.text.UnicodeSet.SpanCondition);
+    method public CharSequence trim(CharSequence);
+    method public CharSequence trim(CharSequence, android.icu.text.UnicodeSetSpanner.TrimOption);
+    method public CharSequence trim(CharSequence, android.icu.text.UnicodeSetSpanner.TrimOption, android.icu.text.UnicodeSet.SpanCondition);
+  }
+
+  public enum UnicodeSetSpanner.CountMethod {
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.CountMethod MIN_ELEMENTS;
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.CountMethod WHOLE_SPAN;
+  }
+
+  public enum UnicodeSetSpanner.TrimOption {
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.TrimOption BOTH;
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.TrimOption LEADING;
+    enum_constant public static final android.icu.text.UnicodeSetSpanner.TrimOption TRAILING;
+  }
+
+}
+
+package android.icu.util {
+
+  public class BuddhistCalendar extends android.icu.util.GregorianCalendar {
+    ctor public BuddhistCalendar();
+    ctor public BuddhistCalendar(android.icu.util.TimeZone);
+    ctor public BuddhistCalendar(java.util.Locale);
+    ctor public BuddhistCalendar(android.icu.util.ULocale);
+    ctor public BuddhistCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public BuddhistCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public BuddhistCalendar(java.util.Date);
+    ctor public BuddhistCalendar(int, int, int);
+    ctor public BuddhistCalendar(int, int, int, int, int, int);
+    field public static final int BE = 0; // 0x0
+  }
+
+  public abstract class Calendar implements java.lang.Cloneable java.lang.Comparable<android.icu.util.Calendar> java.io.Serializable {
+    ctor protected Calendar();
+    ctor protected Calendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor protected Calendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    method public void add(int, int);
+    method public boolean after(Object);
+    method public boolean before(Object);
+    method public final void clear();
+    method public final void clear(int);
+    method public Object clone();
+    method public int compareTo(android.icu.util.Calendar);
+    method protected void complete();
+    method protected void computeFields();
+    method protected final void computeGregorianFields(int);
+    method protected int computeGregorianMonthStart(int, int);
+    method protected int computeJulianDay();
+    method @Deprecated protected int computeMillisInDay();
+    method protected void computeTime();
+    method @Deprecated protected int computeZoneOffset(long, int);
+    method public int fieldDifference(java.util.Date, int);
+    method protected String fieldName(int);
+    method protected static final long floorDivide(long, long);
+    method protected static final int floorDivide(int, int);
+    method protected static final int floorDivide(int, int, int[]);
+    method protected static final int floorDivide(long, int, int[]);
+    method public final int get(int);
+    method public int getActualMaximum(int);
+    method public int getActualMinimum(int);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public android.icu.text.DateFormat getDateTimeFormat(int, int, java.util.Locale);
+    method public android.icu.text.DateFormat getDateTimeFormat(int, int, android.icu.util.ULocale);
+    method public String getDisplayName(java.util.Locale);
+    method public String getDisplayName(android.icu.util.ULocale);
+    method public final int getFieldCount();
+    method protected int[][][] getFieldResolutionTable();
+    method public int getFirstDayOfWeek();
+    method public final int getGreatestMinimum(int);
+    method protected final int getGregorianDayOfMonth();
+    method protected final int getGregorianDayOfYear();
+    method protected final int getGregorianMonth();
+    method protected final int getGregorianYear();
+    method public static android.icu.util.Calendar getInstance();
+    method public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone);
+    method public static android.icu.util.Calendar getInstance(java.util.Locale);
+    method public static android.icu.util.Calendar getInstance(android.icu.util.ULocale);
+    method public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone, java.util.Locale);
+    method public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone, android.icu.util.ULocale);
+    method public static final String[] getKeywordValuesForLocale(String, android.icu.util.ULocale, boolean);
+    method public final int getLeastMaximum(int);
+    method protected int getLimit(int, int);
+    method public final int getMaximum(int);
+    method public int getMinimalDaysInFirstWeek();
+    method public final int getMinimum(int);
+    method public int getRepeatedWallTimeOption();
+    method public int getSkippedWallTimeOption();
+    method protected final int getStamp(int);
+    method public final java.util.Date getTime();
+    method public long getTimeInMillis();
+    method public android.icu.util.TimeZone getTimeZone();
+    method public String getType();
+    method public android.icu.util.Calendar.WeekData getWeekData();
+    method public static android.icu.util.Calendar.WeekData getWeekDataForRegion(String);
+    method protected static final int gregorianMonthLength(int, int);
+    method protected static final int gregorianPreviousMonthLength(int, int);
+    method protected void handleComputeFields(int);
+    method protected int handleComputeJulianDay(int);
+    method protected abstract int handleComputeMonthStart(int, int, boolean);
+    method protected int[] handleCreateFields();
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, java.util.Locale);
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, String, java.util.Locale);
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, android.icu.util.ULocale);
+    method protected abstract int handleGetExtendedYear();
+    method protected abstract int handleGetLimit(int, int);
+    method protected int handleGetMonthLength(int, int);
+    method protected int handleGetYearLength(int);
+    method protected final int internalGet(int);
+    method protected final int internalGet(int, int);
+    method protected final long internalGetTimeInMillis();
+    method protected final void internalSet(int, int);
+    method public boolean isEquivalentTo(android.icu.util.Calendar);
+    method protected static final boolean isGregorianLeapYear(int);
+    method public boolean isLenient();
+    method public final boolean isSet(int);
+    method public boolean isWeekend(java.util.Date);
+    method public boolean isWeekend();
+    method protected static final int julianDayToDayOfWeek(int);
+    method protected static final long julianDayToMillis(int);
+    method protected static final int millisToJulianDay(long);
+    method protected int newerField(int, int);
+    method protected int newestStamp(int, int, int);
+    method protected void pinField(int);
+    method protected void prepareGetActual(int, boolean);
+    method protected int resolveFields(int[][][]);
+    method public final void roll(int, boolean);
+    method public void roll(int, int);
+    method public final void set(int, int);
+    method public final void set(int, int, int);
+    method public final void set(int, int, int, int, int);
+    method public final void set(int, int, int, int, int, int);
+    method public void setFirstDayOfWeek(int);
+    method public void setLenient(boolean);
+    method public void setMinimalDaysInFirstWeek(int);
+    method public void setRepeatedWallTimeOption(int);
+    method public void setSkippedWallTimeOption(int);
+    method public final void setTime(java.util.Date);
+    method public void setTimeInMillis(long);
+    method public void setTimeZone(android.icu.util.TimeZone);
+    method public android.icu.util.Calendar setWeekData(android.icu.util.Calendar.WeekData);
+    method protected void validateField(int);
+    method protected final void validateField(int, int, int);
+    method protected void validateFields();
+    method protected int weekNumber(int, int, int);
+    method protected final int weekNumber(int, int);
+    field public static final int AM = 0; // 0x0
+    field public static final int AM_PM = 9; // 0x9
+    field public static final int APRIL = 3; // 0x3
+    field public static final int AUGUST = 7; // 0x7
+    field @Deprecated protected static final int BASE_FIELD_COUNT = 23; // 0x17
+    field public static final int DATE = 5; // 0x5
+    field public static final int DAY_OF_MONTH = 5; // 0x5
+    field public static final int DAY_OF_WEEK = 7; // 0x7
+    field public static final int DAY_OF_WEEK_IN_MONTH = 8; // 0x8
+    field public static final int DAY_OF_YEAR = 6; // 0x6
+    field public static final int DECEMBER = 11; // 0xb
+    field public static final int DOW_LOCAL = 18; // 0x12
+    field public static final int DST_OFFSET = 16; // 0x10
+    field protected static final int EPOCH_JULIAN_DAY = 2440588; // 0x253d8c
+    field public static final int ERA = 0; // 0x0
+    field public static final int EXTENDED_YEAR = 19; // 0x13
+    field public static final int FEBRUARY = 1; // 0x1
+    field public static final int FRIDAY = 6; // 0x6
+    field protected static final int GREATEST_MINIMUM = 1; // 0x1
+    field public static final int HOUR = 10; // 0xa
+    field public static final int HOUR_OF_DAY = 11; // 0xb
+    field protected static final int INTERNALLY_SET = 1; // 0x1
+    field public static final int IS_LEAP_MONTH = 22; // 0x16
+    field public static final int JANUARY = 0; // 0x0
+    field protected static final int JAN_1_1_JULIAN_DAY = 1721426; // 0x1a4452
+    field public static final int JULIAN_DAY = 20; // 0x14
+    field public static final int JULY = 6; // 0x6
+    field public static final int JUNE = 5; // 0x5
+    field protected static final int LEAST_MAXIMUM = 2; // 0x2
+    field public static final int MARCH = 2; // 0x2
+    field protected static final int MAXIMUM = 3; // 0x3
+    field protected static final java.util.Date MAX_DATE;
+    field @Deprecated protected static final int MAX_FIELD_COUNT = 32; // 0x20
+    field protected static final int MAX_JULIAN = 2130706432; // 0x7f000000
+    field protected static final long MAX_MILLIS = 183882168921600000L; // 0x28d47dbbf19b000L
+    field public static final int MAY = 4; // 0x4
+    field public static final int MILLISECOND = 14; // 0xe
+    field public static final int MILLISECONDS_IN_DAY = 21; // 0x15
+    field protected static final int MINIMUM = 0; // 0x0
+    field protected static final int MINIMUM_USER_STAMP = 2; // 0x2
+    field public static final int MINUTE = 12; // 0xc
+    field protected static final java.util.Date MIN_DATE;
+    field protected static final int MIN_JULIAN = -2130706432; // 0x81000000
+    field protected static final long MIN_MILLIS = -184303902528000000L; // 0xfd713893bf19b000L
+    field public static final int MONDAY = 2; // 0x2
+    field public static final int MONTH = 2; // 0x2
+    field public static final int NOVEMBER = 10; // 0xa
+    field public static final int OCTOBER = 9; // 0x9
+    field protected static final long ONE_DAY = 86400000L; // 0x5265c00L
+    field protected static final int ONE_HOUR = 3600000; // 0x36ee80
+    field protected static final int ONE_MINUTE = 60000; // 0xea60
+    field protected static final int ONE_SECOND = 1000; // 0x3e8
+    field protected static final long ONE_WEEK = 604800000L; // 0x240c8400L
+    field public static final int PM = 1; // 0x1
+    field protected static final int RESOLVE_REMAP = 32; // 0x20
+    field public static final int SATURDAY = 7; // 0x7
+    field public static final int SECOND = 13; // 0xd
+    field public static final int SEPTEMBER = 8; // 0x8
+    field public static final int SUNDAY = 1; // 0x1
+    field public static final int THURSDAY = 5; // 0x5
+    field public static final int TUESDAY = 3; // 0x3
+    field public static final int UNDECIMBER = 12; // 0xc
+    field protected static final int UNSET = 0; // 0x0
+    field public static final int WALLTIME_FIRST = 1; // 0x1
+    field public static final int WALLTIME_LAST = 0; // 0x0
+    field public static final int WALLTIME_NEXT_VALID = 2; // 0x2
+    field public static final int WEDNESDAY = 4; // 0x4
+    field public static final int WEEK_OF_MONTH = 4; // 0x4
+    field public static final int WEEK_OF_YEAR = 3; // 0x3
+    field public static final int YEAR = 1; // 0x1
+    field public static final int YEAR_WOY = 17; // 0x11
+    field public static final int ZONE_OFFSET = 15; // 0xf
+  }
+
+  public static final class Calendar.WeekData {
+    ctor public Calendar.WeekData(int, int, int, int, int, int);
+    field public final int firstDayOfWeek;
+    field public final int minimalDaysInFirstWeek;
+    field public final int weekendCease;
+    field public final int weekendCeaseMillis;
+    field public final int weekendOnset;
+    field public final int weekendOnsetMillis;
+  }
+
+  public class ChineseCalendar extends android.icu.util.Calendar {
+    ctor public ChineseCalendar();
+    ctor public ChineseCalendar(java.util.Date);
+    ctor public ChineseCalendar(int, int, int, int);
+    ctor public ChineseCalendar(int, int, int, int, int, int, int);
+    ctor public ChineseCalendar(int, int, int, int, int);
+    ctor public ChineseCalendar(int, int, int, int, int, int, int, int);
+    ctor public ChineseCalendar(java.util.Locale);
+    ctor public ChineseCalendar(android.icu.util.TimeZone);
+    ctor public ChineseCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public ChineseCalendar(android.icu.util.ULocale);
+    ctor public ChineseCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected android.icu.text.DateFormat handleGetDateFormat(String, String, android.icu.util.ULocale);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+  }
+
+  public final class CopticCalendar extends android.icu.util.Calendar {
+    ctor public CopticCalendar();
+    ctor public CopticCalendar(android.icu.util.TimeZone);
+    ctor public CopticCalendar(java.util.Locale);
+    ctor public CopticCalendar(android.icu.util.ULocale);
+    ctor public CopticCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public CopticCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public CopticCalendar(int, int, int);
+    ctor public CopticCalendar(java.util.Date);
+    ctor public CopticCalendar(int, int, int, int, int, int);
+    method @Deprecated protected void handleComputeFields(int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method @Deprecated protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    field public static final int AMSHIR = 5; // 0x5
+    field public static final int BABA = 1; // 0x1
+    field public static final int BARAMHAT = 6; // 0x6
+    field public static final int BARAMOUDA = 7; // 0x7
+    field public static final int BASHANS = 8; // 0x8
+    field public static final int EPEP = 10; // 0xa
+    field public static final int HATOR = 2; // 0x2
+    field public static final int KIAHK = 3; // 0x3
+    field public static final int MESRA = 11; // 0xb
+    field public static final int NASIE = 12; // 0xc
+    field public static final int PAONA = 9; // 0x9
+    field public static final int TOBA = 4; // 0x4
+    field public static final int TOUT = 0; // 0x0
+  }
+
+  public class Currency extends android.icu.util.MeasureUnit {
+    ctor protected Currency(String);
+    method public static android.icu.util.Currency fromJavaCurrency(java.util.Currency);
+    method public static java.util.Set<android.icu.util.Currency> getAvailableCurrencies();
+    method public static String[] getAvailableCurrencyCodes(android.icu.util.ULocale, java.util.Date);
+    method public static String[] getAvailableCurrencyCodes(java.util.Locale, java.util.Date);
+    method public static java.util.Locale[] getAvailableLocales();
+    method public static android.icu.util.ULocale[] getAvailableULocales();
+    method public String getCurrencyCode();
+    method public int getDefaultFractionDigits();
+    method public int getDefaultFractionDigits(android.icu.util.Currency.CurrencyUsage);
+    method public String getDisplayName();
+    method public String getDisplayName(java.util.Locale);
+    method public static android.icu.util.Currency getInstance(java.util.Locale);
+    method public static android.icu.util.Currency getInstance(android.icu.util.ULocale);
+    method public static android.icu.util.Currency getInstance(String);
+    method public static final String[] getKeywordValuesForLocale(String, android.icu.util.ULocale, boolean);
+    method public String getName(java.util.Locale, int, boolean[]);
+    method public String getName(android.icu.util.ULocale, int, boolean[]);
+    method public String getName(java.util.Locale, int, String, boolean[]);
+    method public String getName(android.icu.util.ULocale, int, String, boolean[]);
+    method public int getNumericCode();
+    method public double getRoundingIncrement();
+    method public double getRoundingIncrement(android.icu.util.Currency.CurrencyUsage);
+    method public String getSymbol();
+    method public String getSymbol(java.util.Locale);
+    method public String getSymbol(android.icu.util.ULocale);
+    method public static boolean isAvailable(String, java.util.Date, java.util.Date);
+    method public java.util.Currency toJavaCurrency();
+    field public static final int LONG_NAME = 1; // 0x1
+    field public static final int NARROW_SYMBOL_NAME = 3; // 0x3
+    field public static final int PLURAL_LONG_NAME = 2; // 0x2
+    field public static final int SYMBOL_NAME = 0; // 0x0
+  }
+
+  public enum Currency.CurrencyUsage {
+    enum_constant public static final android.icu.util.Currency.CurrencyUsage CASH;
+    enum_constant public static final android.icu.util.Currency.CurrencyUsage STANDARD;
+  }
+
+  public class CurrencyAmount extends android.icu.util.Measure {
+    ctor public CurrencyAmount(Number, android.icu.util.Currency);
+    ctor public CurrencyAmount(double, android.icu.util.Currency);
+    ctor public CurrencyAmount(Number, java.util.Currency);
+    ctor public CurrencyAmount(double, java.util.Currency);
+    method public android.icu.util.Currency getCurrency();
+  }
+
+  public final class DateInterval implements java.io.Serializable {
+    ctor public DateInterval(long, long);
+    method public long getFromDate();
+    method public long getToDate();
+  }
+
+  public final class EthiopicCalendar extends android.icu.util.Calendar {
+    ctor public EthiopicCalendar();
+    ctor public EthiopicCalendar(android.icu.util.TimeZone);
+    ctor public EthiopicCalendar(java.util.Locale);
+    ctor public EthiopicCalendar(android.icu.util.ULocale);
+    ctor public EthiopicCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public EthiopicCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public EthiopicCalendar(int, int, int);
+    ctor public EthiopicCalendar(java.util.Date);
+    ctor public EthiopicCalendar(int, int, int, int, int, int);
+    method @Deprecated protected void handleComputeFields(int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method @Deprecated protected int handleGetExtendedYear();
+    method @Deprecated protected int handleGetLimit(int, int);
+    method public boolean isAmeteAlemEra();
+    method public void setAmeteAlemEra(boolean);
+    field public static final int GENBOT = 8; // 0x8
+    field public static final int HAMLE = 10; // 0xa
+    field public static final int HEDAR = 2; // 0x2
+    field public static final int MEGABIT = 6; // 0x6
+    field public static final int MESKEREM = 0; // 0x0
+    field public static final int MIAZIA = 7; // 0x7
+    field public static final int NEHASSE = 11; // 0xb
+    field public static final int PAGUMEN = 12; // 0xc
+    field public static final int SENE = 9; // 0x9
+    field public static final int TAHSAS = 3; // 0x3
+    field public static final int TEKEMT = 1; // 0x1
+    field public static final int TER = 4; // 0x4
+    field public static final int YEKATIT = 5; // 0x5
+  }
+
+  public interface Freezable<T> extends java.lang.Cloneable {
+    method public T cloneAsThawed();
+    method public T freeze();
+    method public boolean isFrozen();
+  }
+
+  public class GregorianCalendar extends android.icu.util.Calendar {
+    ctor public GregorianCalendar();
+    ctor public GregorianCalendar(android.icu.util.TimeZone);
+    ctor public GregorianCalendar(java.util.Locale);
+    ctor public GregorianCalendar(android.icu.util.ULocale);
+    ctor public GregorianCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public GregorianCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public GregorianCalendar(int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int);
+    ctor public GregorianCalendar(int, int, int, int, int, int);
+    method public final java.util.Date getGregorianChange();
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    method public boolean isLeapYear(int);
+    method public void setGregorianChange(java.util.Date);
+    field public static final int AD = 1; // 0x1
+    field public static final int BC = 0; // 0x0
+    field protected transient boolean invertGregorian;
+    field protected transient boolean isGregorian;
+  }
+
+  public class HebrewCalendar extends android.icu.util.Calendar {
+    ctor public HebrewCalendar();
+    ctor public HebrewCalendar(android.icu.util.TimeZone);
+    ctor public HebrewCalendar(java.util.Locale);
+    ctor public HebrewCalendar(android.icu.util.ULocale);
+    ctor public HebrewCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public HebrewCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public HebrewCalendar(int, int, int);
+    ctor public HebrewCalendar(java.util.Date);
+    ctor public HebrewCalendar(int, int, int, int, int, int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    method @Deprecated protected void validateField(int);
+    field public static final int ADAR = 6; // 0x6
+    field public static final int ADAR_1 = 5; // 0x5
+    field public static final int AV = 11; // 0xb
+    field public static final int ELUL = 12; // 0xc
+    field public static final int HESHVAN = 1; // 0x1
+    field public static final int IYAR = 8; // 0x8
+    field public static final int KISLEV = 2; // 0x2
+    field public static final int NISAN = 7; // 0x7
+    field public static final int SHEVAT = 4; // 0x4
+    field public static final int SIVAN = 9; // 0x9
+    field public static final int TAMUZ = 10; // 0xa
+    field public static final int TEVET = 3; // 0x3
+    field public static final int TISHRI = 0; // 0x0
+  }
+
+  public class ICUUncheckedIOException extends java.lang.RuntimeException {
+    ctor public ICUUncheckedIOException();
+    ctor public ICUUncheckedIOException(String);
+    ctor public ICUUncheckedIOException(Throwable);
+    ctor public ICUUncheckedIOException(String, Throwable);
+  }
+
+  public class IllformedLocaleException extends java.lang.RuntimeException {
+    ctor public IllformedLocaleException();
+    ctor public IllformedLocaleException(String);
+    ctor public IllformedLocaleException(String, int);
+    method public int getErrorIndex();
+  }
+
+  public class IndianCalendar extends android.icu.util.Calendar {
+    ctor public IndianCalendar();
+    ctor public IndianCalendar(android.icu.util.TimeZone);
+    ctor public IndianCalendar(java.util.Locale);
+    ctor public IndianCalendar(android.icu.util.ULocale);
+    ctor public IndianCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public IndianCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public IndianCalendar(java.util.Date);
+    ctor public IndianCalendar(int, int, int);
+    ctor public IndianCalendar(int, int, int, int, int, int);
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    field public static final int AGRAHAYANA = 8; // 0x8
+    field public static final int ASADHA = 3; // 0x3
+    field public static final int ASVINA = 6; // 0x6
+    field public static final int BHADRA = 5; // 0x5
+    field public static final int CHAITRA = 0; // 0x0
+    field public static final int IE = 0; // 0x0
+    field public static final int JYAISTHA = 2; // 0x2
+    field public static final int KARTIKA = 7; // 0x7
+    field public static final int MAGHA = 10; // 0xa
+    field public static final int PAUSA = 9; // 0x9
+    field public static final int PHALGUNA = 11; // 0xb
+    field public static final int SRAVANA = 4; // 0x4
+    field public static final int VAISAKHA = 1; // 0x1
+  }
+
+  public class IslamicCalendar extends android.icu.util.Calendar {
+    ctor public IslamicCalendar();
+    ctor public IslamicCalendar(android.icu.util.TimeZone);
+    ctor public IslamicCalendar(java.util.Locale);
+    ctor public IslamicCalendar(android.icu.util.ULocale);
+    ctor public IslamicCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public IslamicCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public IslamicCalendar(java.util.Date);
+    ctor public IslamicCalendar(int, int, int);
+    ctor public IslamicCalendar(int, int, int, int, int, int);
+    method public android.icu.util.IslamicCalendar.CalculationType getCalculationType();
+    method protected int handleComputeMonthStart(int, int, boolean);
+    method protected int handleGetExtendedYear();
+    method protected int handleGetLimit(int, int);
+    method public void setCalculationType(android.icu.util.IslamicCalendar.CalculationType);
+    field public static final int DHU_AL_HIJJAH = 11; // 0xb
+    field public static final int DHU_AL_QIDAH = 10; // 0xa
+    field public static final int JUMADA_1 = 4; // 0x4
+    field public static final int JUMADA_2 = 5; // 0x5
+    field public static final int MUHARRAM = 0; // 0x0
+    field public static final int RABI_1 = 2; // 0x2
+    field public static final int RABI_2 = 3; // 0x3
+    field public static final int RAJAB = 6; // 0x6
+    field public static final int RAMADAN = 8; // 0x8
+    field public static final int SAFAR = 1; // 0x1
+    field public static final int SHABAN = 7; // 0x7
+    field public static final int SHAWWAL = 9; // 0x9
+  }
+
+  public enum IslamicCalendar.CalculationType {
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC;
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC_CIVIL;
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC_TBLA;
+    enum_constant public static final android.icu.util.IslamicCalendar.CalculationType ISLAMIC_UMALQURA;
+  }
+
+  public class JapaneseCalendar extends android.icu.util.GregorianCalendar {
+    ctor public JapaneseCalendar();
+    ctor public JapaneseCalendar(android.icu.util.TimeZone);
+    ctor public JapaneseCalendar(java.util.Locale);
+    ctor public JapaneseCalendar(android.icu.util.ULocale);
+    ctor public JapaneseCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public JapaneseCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public JapaneseCalendar(java.util.Date);
+    ctor public JapaneseCalendar(int, int, int, int);
+    ctor public JapaneseCalendar(int, int, int);
+    ctor public JapaneseCalendar(int, int, int, int, int, int);
+    field public static final int HEISEI;
+    field public static final int MEIJI;
+    field public static final int REIWA;
+    field public static final int SHOWA;
+    field public static final int TAISHO;
+  }
+
+  public final class LocaleData {
+    method public static android.icu.util.VersionInfo getCLDRVersion();
+    method public String getDelimiter(int);
+    method public static android.icu.util.LocaleData getInstance(android.icu.util.ULocale);
+    method public static android.icu.util.LocaleData getInstance();
+    method public static android.icu.util.LocaleData.MeasurementSystem getMeasurementSystem(android.icu.util.ULocale);
+    method public boolean getNoSubstitute();
+    method public static android.icu.util.LocaleData.PaperSize getPaperSize(android.icu.util.ULocale);
+    method public void setNoSubstitute(boolean);
+    field public static final int ALT_QUOTATION_END = 3; // 0x3
+    field public static final int ALT_QUOTATION_START = 2; // 0x2
+    field public static final int QUOTATION_END = 1; // 0x1
+    field public static final int QUOTATION_START = 0; // 0x0
+  }
+
+  public static final class LocaleData.MeasurementSystem {
+    field public static final android.icu.util.LocaleData.MeasurementSystem SI;
+    field public static final android.icu.util.LocaleData.MeasurementSystem UK;
+    field public static final android.icu.util.LocaleData.MeasurementSystem US;
+  }
+
+  public static final class LocaleData.PaperSize {
+    method public int getHeight();
+    method public int getWidth();
+  }
+
+  public class Measure {
+    ctor public Measure(Number, android.icu.util.MeasureUnit);
+    method public Number getNumber();
+    method public android.icu.util.MeasureUnit getUnit();
+  }
+
+  public class MeasureUnit implements java.io.Serializable {
+    method public static java.util.Set<android.icu.util.MeasureUnit> getAvailable(String);
+    method public static java.util.Set<android.icu.util.MeasureUnit> getAvailable();
+    method public static java.util.Set<java.lang.String> getAvailableTypes();
+    method public String getSubtype();
+    method public String getType();
+    field public static final android.icu.util.MeasureUnit ACRE;
+    field public static final android.icu.util.MeasureUnit ACRE_FOOT;
+    field public static final android.icu.util.MeasureUnit AMPERE;
+    field public static final android.icu.util.MeasureUnit ARC_MINUTE;
+    field public static final android.icu.util.MeasureUnit ARC_SECOND;
+    field public static final android.icu.util.MeasureUnit ASTRONOMICAL_UNIT;
+    field public static final android.icu.util.MeasureUnit ATMOSPHERE;
+    field public static final android.icu.util.MeasureUnit BIT;
+    field public static final android.icu.util.MeasureUnit BUSHEL;
+    field public static final android.icu.util.MeasureUnit BYTE;
+    field public static final android.icu.util.MeasureUnit CALORIE;
+    field public static final android.icu.util.MeasureUnit CARAT;
+    field public static final android.icu.util.MeasureUnit CELSIUS;
+    field public static final android.icu.util.MeasureUnit CENTILITER;
+    field public static final android.icu.util.MeasureUnit CENTIMETER;
+    field public static final android.icu.util.MeasureUnit CENTURY;
+    field public static final android.icu.util.MeasureUnit CUBIC_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit CUBIC_FOOT;
+    field public static final android.icu.util.MeasureUnit CUBIC_INCH;
+    field public static final android.icu.util.MeasureUnit CUBIC_KILOMETER;
+    field public static final android.icu.util.MeasureUnit CUBIC_METER;
+    field public static final android.icu.util.MeasureUnit CUBIC_MILE;
+    field public static final android.icu.util.MeasureUnit CUBIC_YARD;
+    field public static final android.icu.util.MeasureUnit CUP;
+    field public static final android.icu.util.MeasureUnit CUP_METRIC;
+    field public static final android.icu.util.TimeUnit DAY;
+    field public static final android.icu.util.MeasureUnit DECADE;
+    field public static final android.icu.util.MeasureUnit DECILITER;
+    field public static final android.icu.util.MeasureUnit DECIMETER;
+    field public static final android.icu.util.MeasureUnit DEGREE;
+    field public static final android.icu.util.MeasureUnit DOT_PER_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit DOT_PER_INCH;
+    field public static final android.icu.util.MeasureUnit EM;
+    field public static final android.icu.util.MeasureUnit FAHRENHEIT;
+    field public static final android.icu.util.MeasureUnit FATHOM;
+    field public static final android.icu.util.MeasureUnit FLUID_OUNCE;
+    field public static final android.icu.util.MeasureUnit FOODCALORIE;
+    field public static final android.icu.util.MeasureUnit FOOT;
+    field public static final android.icu.util.MeasureUnit FURLONG;
+    field public static final android.icu.util.MeasureUnit GALLON;
+    field public static final android.icu.util.MeasureUnit GALLON_IMPERIAL;
+    field public static final android.icu.util.MeasureUnit GENERIC_TEMPERATURE;
+    field public static final android.icu.util.MeasureUnit GIGABIT;
+    field public static final android.icu.util.MeasureUnit GIGABYTE;
+    field public static final android.icu.util.MeasureUnit GIGAHERTZ;
+    field public static final android.icu.util.MeasureUnit GIGAWATT;
+    field public static final android.icu.util.MeasureUnit GRAM;
+    field public static final android.icu.util.MeasureUnit G_FORCE;
+    field public static final android.icu.util.MeasureUnit HECTARE;
+    field public static final android.icu.util.MeasureUnit HECTOLITER;
+    field public static final android.icu.util.MeasureUnit HECTOPASCAL;
+    field public static final android.icu.util.MeasureUnit HERTZ;
+    field public static final android.icu.util.MeasureUnit HORSEPOWER;
+    field public static final android.icu.util.TimeUnit HOUR;
+    field public static final android.icu.util.MeasureUnit INCH;
+    field public static final android.icu.util.MeasureUnit INCH_HG;
+    field public static final android.icu.util.MeasureUnit JOULE;
+    field public static final android.icu.util.MeasureUnit KARAT;
+    field public static final android.icu.util.MeasureUnit KELVIN;
+    field public static final android.icu.util.MeasureUnit KILOBIT;
+    field public static final android.icu.util.MeasureUnit KILOBYTE;
+    field public static final android.icu.util.MeasureUnit KILOCALORIE;
+    field public static final android.icu.util.MeasureUnit KILOGRAM;
+    field public static final android.icu.util.MeasureUnit KILOHERTZ;
+    field public static final android.icu.util.MeasureUnit KILOJOULE;
+    field public static final android.icu.util.MeasureUnit KILOMETER;
+    field public static final android.icu.util.MeasureUnit KILOMETER_PER_HOUR;
+    field public static final android.icu.util.MeasureUnit KILOWATT;
+    field public static final android.icu.util.MeasureUnit KILOWATT_HOUR;
+    field public static final android.icu.util.MeasureUnit KNOT;
+    field public static final android.icu.util.MeasureUnit LIGHT_YEAR;
+    field public static final android.icu.util.MeasureUnit LITER;
+    field public static final android.icu.util.MeasureUnit LITER_PER_100KILOMETERS;
+    field public static final android.icu.util.MeasureUnit LITER_PER_KILOMETER;
+    field public static final android.icu.util.MeasureUnit LUX;
+    field public static final android.icu.util.MeasureUnit MEGABIT;
+    field public static final android.icu.util.MeasureUnit MEGABYTE;
+    field public static final android.icu.util.MeasureUnit MEGAHERTZ;
+    field public static final android.icu.util.MeasureUnit MEGALITER;
+    field public static final android.icu.util.MeasureUnit MEGAPIXEL;
+    field public static final android.icu.util.MeasureUnit MEGAWATT;
+    field public static final android.icu.util.MeasureUnit METER;
+    field public static final android.icu.util.MeasureUnit METER_PER_SECOND;
+    field public static final android.icu.util.MeasureUnit METER_PER_SECOND_SQUARED;
+    field public static final android.icu.util.MeasureUnit METRIC_TON;
+    field public static final android.icu.util.MeasureUnit MICROGRAM;
+    field public static final android.icu.util.MeasureUnit MICROMETER;
+    field public static final android.icu.util.MeasureUnit MICROSECOND;
+    field public static final android.icu.util.MeasureUnit MILE;
+    field public static final android.icu.util.MeasureUnit MILE_PER_GALLON;
+    field public static final android.icu.util.MeasureUnit MILE_PER_GALLON_IMPERIAL;
+    field public static final android.icu.util.MeasureUnit MILE_PER_HOUR;
+    field public static final android.icu.util.MeasureUnit MILE_SCANDINAVIAN;
+    field public static final android.icu.util.MeasureUnit MILLIAMPERE;
+    field public static final android.icu.util.MeasureUnit MILLIBAR;
+    field public static final android.icu.util.MeasureUnit MILLIGRAM;
+    field public static final android.icu.util.MeasureUnit MILLIGRAM_PER_DECILITER;
+    field public static final android.icu.util.MeasureUnit MILLILITER;
+    field public static final android.icu.util.MeasureUnit MILLIMETER;
+    field public static final android.icu.util.MeasureUnit MILLIMETER_OF_MERCURY;
+    field public static final android.icu.util.MeasureUnit MILLIMOLE_PER_LITER;
+    field public static final android.icu.util.MeasureUnit MILLISECOND;
+    field public static final android.icu.util.MeasureUnit MILLIWATT;
+    field public static final android.icu.util.TimeUnit MINUTE;
+    field public static final android.icu.util.TimeUnit MONTH;
+    field public static final android.icu.util.MeasureUnit NANOMETER;
+    field public static final android.icu.util.MeasureUnit NANOSECOND;
+    field public static final android.icu.util.MeasureUnit NAUTICAL_MILE;
+    field public static final android.icu.util.MeasureUnit OHM;
+    field public static final android.icu.util.MeasureUnit OUNCE;
+    field public static final android.icu.util.MeasureUnit OUNCE_TROY;
+    field public static final android.icu.util.MeasureUnit PARSEC;
+    field public static final android.icu.util.MeasureUnit PART_PER_MILLION;
+    field public static final android.icu.util.MeasureUnit PERCENT;
+    field public static final android.icu.util.MeasureUnit PERMILLE;
+    field public static final android.icu.util.MeasureUnit PETABYTE;
+    field public static final android.icu.util.MeasureUnit PICOMETER;
+    field public static final android.icu.util.MeasureUnit PINT;
+    field public static final android.icu.util.MeasureUnit PINT_METRIC;
+    field public static final android.icu.util.MeasureUnit PIXEL;
+    field public static final android.icu.util.MeasureUnit PIXEL_PER_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit PIXEL_PER_INCH;
+    field public static final android.icu.util.MeasureUnit POINT;
+    field public static final android.icu.util.MeasureUnit POUND;
+    field public static final android.icu.util.MeasureUnit POUND_PER_SQUARE_INCH;
+    field public static final android.icu.util.MeasureUnit QUART;
+    field public static final android.icu.util.MeasureUnit RADIAN;
+    field public static final android.icu.util.MeasureUnit REVOLUTION_ANGLE;
+    field public static final android.icu.util.TimeUnit SECOND;
+    field public static final android.icu.util.MeasureUnit SQUARE_CENTIMETER;
+    field public static final android.icu.util.MeasureUnit SQUARE_FOOT;
+    field public static final android.icu.util.MeasureUnit SQUARE_INCH;
+    field public static final android.icu.util.MeasureUnit SQUARE_KILOMETER;
+    field public static final android.icu.util.MeasureUnit SQUARE_METER;
+    field public static final android.icu.util.MeasureUnit SQUARE_MILE;
+    field public static final android.icu.util.MeasureUnit SQUARE_YARD;
+    field public static final android.icu.util.MeasureUnit STONE;
+    field public static final android.icu.util.MeasureUnit TABLESPOON;
+    field public static final android.icu.util.MeasureUnit TEASPOON;
+    field public static final android.icu.util.MeasureUnit TERABIT;
+    field public static final android.icu.util.MeasureUnit TERABYTE;
+    field public static final android.icu.util.MeasureUnit TON;
+    field public static final android.icu.util.MeasureUnit VOLT;
+    field public static final android.icu.util.MeasureUnit WATT;
+    field public static final android.icu.util.TimeUnit WEEK;
+    field public static final android.icu.util.MeasureUnit YARD;
+    field public static final android.icu.util.TimeUnit YEAR;
+  }
+
+  public class Output<T> {
+    ctor public Output();
+    ctor public Output(T);
+    field public T value;
+  }
+
+  public interface RangeValueIterator {
+    method public boolean next(android.icu.util.RangeValueIterator.Element);
+    method public void reset();
+  }
+
+  public static class RangeValueIterator.Element {
+    ctor public RangeValueIterator.Element();
+    field public int limit;
+    field public int start;
+    field public int value;
+  }
+
+  public class TaiwanCalendar extends android.icu.util.GregorianCalendar {
+    ctor public TaiwanCalendar();
+    ctor public TaiwanCalendar(android.icu.util.TimeZone);
+    ctor public TaiwanCalendar(java.util.Locale);
+    ctor public TaiwanCalendar(android.icu.util.ULocale);
+    ctor public TaiwanCalendar(android.icu.util.TimeZone, java.util.Locale);
+    ctor public TaiwanCalendar(android.icu.util.TimeZone, android.icu.util.ULocale);
+    ctor public TaiwanCalendar(java.util.Date);
+    ctor public TaiwanCalendar(int, int, int);
+    ctor public TaiwanCalendar(int, int, int, int, int, int);
+    field public static final int BEFORE_MINGUO = 0; // 0x0
+    field public static final int MINGUO = 1; // 0x1
+  }
+
+  public class TimeUnit extends android.icu.util.MeasureUnit {
+    method public static android.icu.util.TimeUnit[] values();
+  }
+
+  public abstract class TimeZone implements java.lang.Cloneable android.icu.util.Freezable<android.icu.util.TimeZone> java.io.Serializable {
+    ctor public TimeZone();
+    method public Object clone();
+    method public android.icu.util.TimeZone cloneAsThawed();
+    method public static int countEquivalentIDs(String);
+    method public android.icu.util.TimeZone freeze();
+    method public static java.util.Set<java.lang.String> getAvailableIDs(android.icu.util.TimeZone.SystemTimeZoneType, String, Integer);
+    method public static String[] getAvailableIDs(int);
+    method public static String[] getAvailableIDs(String);
+    method public static String[] getAvailableIDs();
+    method public static String getCanonicalID(String);
+    method public static String getCanonicalID(String, boolean[]);
+    method public int getDSTSavings();
+    method public static android.icu.util.TimeZone getDefault();
+    method public final String getDisplayName();
+    method public final String getDisplayName(java.util.Locale);
+    method public final String getDisplayName(android.icu.util.ULocale);
+    method public final String getDisplayName(boolean, int);
+    method public String getDisplayName(boolean, int, java.util.Locale);
+    method public String getDisplayName(boolean, int, android.icu.util.ULocale);
+    method public static String getEquivalentID(String, int);
+    method public static android.icu.util.TimeZone getFrozenTimeZone(String);
+    method public String getID();
+    method public static String getIDForWindowsID(String, String);
+    method public abstract int getOffset(int, int, int, int, int, int);
+    method public int getOffset(long);
+    method public void getOffset(long, boolean, int[]);
+    method public abstract int getRawOffset();
+    method public static String getRegion(String);
+    method public static String getTZDataVersion();
+    method public static android.icu.util.TimeZone getTimeZone(String);
+    method public static android.icu.util.TimeZone getTimeZone(String, int);
+    method public static String getWindowsID(String);
+    method public boolean hasSameRules(android.icu.util.TimeZone);
+    method public abstract boolean inDaylightTime(java.util.Date);
+    method public boolean isFrozen();
+    method public boolean observesDaylightTime();
+    method public void setID(String);
+    method public abstract void setRawOffset(int);
+    method public abstract boolean useDaylightTime();
+    field public static final int GENERIC_LOCATION = 7; // 0x7
+    field public static final android.icu.util.TimeZone GMT_ZONE;
+    field public static final int LONG = 1; // 0x1
+    field public static final int LONG_GENERIC = 3; // 0x3
+    field public static final int LONG_GMT = 5; // 0x5
+    field public static final int SHORT = 0; // 0x0
+    field public static final int SHORT_COMMONLY_USED = 6; // 0x6
+    field public static final int SHORT_GENERIC = 2; // 0x2
+    field public static final int SHORT_GMT = 4; // 0x4
+    field public static final int TIMEZONE_ICU = 0; // 0x0
+    field public static final int TIMEZONE_JDK = 1; // 0x1
+    field public static final android.icu.util.TimeZone UNKNOWN_ZONE;
+    field public static final String UNKNOWN_ZONE_ID = "Etc/Unknown";
+  }
+
+  public enum TimeZone.SystemTimeZoneType {
+    enum_constant public static final android.icu.util.TimeZone.SystemTimeZoneType ANY;
+    enum_constant public static final android.icu.util.TimeZone.SystemTimeZoneType CANONICAL;
+    enum_constant public static final android.icu.util.TimeZone.SystemTimeZoneType CANONICAL_LOCATION;
+  }
+
+  public final class ULocale implements java.lang.Comparable<android.icu.util.ULocale> java.io.Serializable {
+    ctor public ULocale(String);
+    ctor public ULocale(String, String);
+    ctor public ULocale(String, String, String);
+    method public static android.icu.util.ULocale acceptLanguage(String, android.icu.util.ULocale[], boolean[]);
+    method public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[], android.icu.util.ULocale[], boolean[]);
+    method public static android.icu.util.ULocale acceptLanguage(String, boolean[]);
+    method public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[], boolean[]);
+    method public static android.icu.util.ULocale addLikelySubtags(android.icu.util.ULocale);
+    method public static String canonicalize(String);
+    method public Object clone();
+    method public int compareTo(android.icu.util.ULocale);
+    method public static android.icu.util.ULocale createCanonical(String);
+    method public static android.icu.util.ULocale forLanguageTag(String);
+    method public static android.icu.util.ULocale forLocale(java.util.Locale);
+    method public static android.icu.util.ULocale[] getAvailableLocales();
+    method public static java.util.Collection<android.icu.util.ULocale> getAvailableLocalesByType(android.icu.util.ULocale.AvailableType);
+    method public String getBaseName();
+    method public static String getBaseName(String);
+    method public String getCharacterOrientation();
+    method public String getCountry();
+    method public static String getCountry(String);
+    method public static android.icu.util.ULocale getDefault();
+    method public static android.icu.util.ULocale getDefault(android.icu.util.ULocale.Category);
+    method public String getDisplayCountry();
+    method public String getDisplayCountry(android.icu.util.ULocale);
+    method public static String getDisplayCountry(String, String);
+    method public static String getDisplayCountry(String, android.icu.util.ULocale);
+    method public static String getDisplayKeyword(String);
+    method public static String getDisplayKeyword(String, String);
+    method public static String getDisplayKeyword(String, android.icu.util.ULocale);
+    method public String getDisplayKeywordValue(String);
+    method public String getDisplayKeywordValue(String, android.icu.util.ULocale);
+    method public static String getDisplayKeywordValue(String, String, String);
+    method public static String getDisplayKeywordValue(String, String, android.icu.util.ULocale);
+    method public String getDisplayLanguage();
+    method public String getDisplayLanguage(android.icu.util.ULocale);
+    method public static String getDisplayLanguage(String, String);
+    method public static String getDisplayLanguage(String, android.icu.util.ULocale);
+    method public String getDisplayLanguageWithDialect();
+    method public String getDisplayLanguageWithDialect(android.icu.util.ULocale);
+    method public static String getDisplayLanguageWithDialect(String, String);
+    method public static String getDisplayLanguageWithDialect(String, android.icu.util.ULocale);
+    method public String getDisplayName();
+    method public String getDisplayName(android.icu.util.ULocale);
+    method public static String getDisplayName(String, String);
+    method public static String getDisplayName(String, android.icu.util.ULocale);
+    method public String getDisplayNameWithDialect();
+    method public String getDisplayNameWithDialect(android.icu.util.ULocale);
+    method public static String getDisplayNameWithDialect(String, String);
+    method public static String getDisplayNameWithDialect(String, android.icu.util.ULocale);
+    method public String getDisplayScript();
+    method public String getDisplayScript(android.icu.util.ULocale);
+    method public static String getDisplayScript(String, String);
+    method public static String getDisplayScript(String, android.icu.util.ULocale);
+    method public String getDisplayVariant();
+    method public String getDisplayVariant(android.icu.util.ULocale);
+    method public static String getDisplayVariant(String, String);
+    method public static String getDisplayVariant(String, android.icu.util.ULocale);
+    method public String getExtension(char);
+    method public java.util.Set<java.lang.Character> getExtensionKeys();
+    method public static String getFallback(String);
+    method public android.icu.util.ULocale getFallback();
+    method public String getISO3Country();
+    method public static String getISO3Country(String);
+    method public String getISO3Language();
+    method public static String getISO3Language(String);
+    method public static String[] getISOCountries();
+    method public static String[] getISOLanguages();
+    method public String getKeywordValue(String);
+    method public static String getKeywordValue(String, String);
+    method public java.util.Iterator<java.lang.String> getKeywords();
+    method public static java.util.Iterator<java.lang.String> getKeywords(String);
+    method public String getLanguage();
+    method public static String getLanguage(String);
+    method public String getLineOrientation();
+    method public String getName();
+    method public static String getName(String);
+    method public String getScript();
+    method public static String getScript(String);
+    method public java.util.Set<java.lang.String> getUnicodeLocaleAttributes();
+    method public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
+    method public String getUnicodeLocaleType(String);
+    method public String getVariant();
+    method public static String getVariant(String);
+    method public boolean isRightToLeft();
+    method public static android.icu.util.ULocale minimizeSubtags(android.icu.util.ULocale);
+    method public android.icu.util.ULocale setKeywordValue(String, String);
+    method public static String setKeywordValue(String, String, String);
+    method public String toLanguageTag();
+    method public static String toLegacyKey(String);
+    method public static String toLegacyType(String, String);
+    method public java.util.Locale toLocale();
+    method public static String toUnicodeLocaleKey(String);
+    method public static String toUnicodeLocaleType(String, String);
+    field public static final android.icu.util.ULocale CANADA;
+    field public static final android.icu.util.ULocale CANADA_FRENCH;
+    field public static final android.icu.util.ULocale CHINA;
+    field public static final android.icu.util.ULocale CHINESE;
+    field public static final android.icu.util.ULocale ENGLISH;
+    field public static final android.icu.util.ULocale FRANCE;
+    field public static final android.icu.util.ULocale FRENCH;
+    field public static final android.icu.util.ULocale GERMAN;
+    field public static final android.icu.util.ULocale GERMANY;
+    field public static final android.icu.util.ULocale ITALIAN;
+    field public static final android.icu.util.ULocale ITALY;
+    field public static final android.icu.util.ULocale JAPAN;
+    field public static final android.icu.util.ULocale JAPANESE;
+    field public static final android.icu.util.ULocale KOREA;
+    field public static final android.icu.util.ULocale KOREAN;
+    field public static final android.icu.util.ULocale PRC;
+    field public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x'
+    field public static final android.icu.util.ULocale ROOT;
+    field public static final android.icu.util.ULocale SIMPLIFIED_CHINESE;
+    field public static final android.icu.util.ULocale TAIWAN;
+    field public static final android.icu.util.ULocale TRADITIONAL_CHINESE;
+    field public static final android.icu.util.ULocale UK;
+    field public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u'
+    field public static final android.icu.util.ULocale US;
+  }
+
+  public enum ULocale.AvailableType {
+    enum_constant public static final android.icu.util.ULocale.AvailableType DEFAULT;
+    enum_constant public static final android.icu.util.ULocale.AvailableType ONLY_LEGACY_ALIASES;
+    enum_constant public static final android.icu.util.ULocale.AvailableType WITH_LEGACY_ALIASES;
+  }
+
+  public static final class ULocale.Builder {
+    ctor public ULocale.Builder();
+    method public android.icu.util.ULocale.Builder addUnicodeLocaleAttribute(String);
+    method public android.icu.util.ULocale build();
+    method public android.icu.util.ULocale.Builder clear();
+    method public android.icu.util.ULocale.Builder clearExtensions();
+    method public android.icu.util.ULocale.Builder removeUnicodeLocaleAttribute(String);
+    method public android.icu.util.ULocale.Builder setExtension(char, String);
+    method public android.icu.util.ULocale.Builder setLanguage(String);
+    method public android.icu.util.ULocale.Builder setLanguageTag(String);
+    method public android.icu.util.ULocale.Builder setLocale(android.icu.util.ULocale);
+    method public android.icu.util.ULocale.Builder setRegion(String);
+    method public android.icu.util.ULocale.Builder setScript(String);
+    method public android.icu.util.ULocale.Builder setUnicodeLocaleKeyword(String, String);
+    method public android.icu.util.ULocale.Builder setVariant(String);
+  }
+
+  public enum ULocale.Category {
+    enum_constant public static final android.icu.util.ULocale.Category DISPLAY;
+    enum_constant public static final android.icu.util.ULocale.Category FORMAT;
+  }
+
+  public final class UniversalTimeScale {
+    method public static android.icu.math.BigDecimal bigDecimalFrom(double, int);
+    method public static android.icu.math.BigDecimal bigDecimalFrom(long, int);
+    method public static android.icu.math.BigDecimal bigDecimalFrom(android.icu.math.BigDecimal, int);
+    method public static long from(long, int);
+    method public static long getTimeScaleValue(int, int);
+    method public static android.icu.math.BigDecimal toBigDecimal(long, int);
+    method public static android.icu.math.BigDecimal toBigDecimal(android.icu.math.BigDecimal, int);
+    method public static long toLong(long, int);
+    field public static final int DB2_TIME = 8; // 0x8
+    field public static final int DOTNET_DATE_TIME = 4; // 0x4
+    field public static final int EPOCH_OFFSET_PLUS_1_VALUE = 6; // 0x6
+    field public static final int EPOCH_OFFSET_VALUE = 1; // 0x1
+    field public static final int EXCEL_TIME = 7; // 0x7
+    field public static final int FROM_MAX_VALUE = 3; // 0x3
+    field public static final int FROM_MIN_VALUE = 2; // 0x2
+    field public static final int ICU4C_TIME = 2; // 0x2
+    field public static final int JAVA_TIME = 0; // 0x0
+    field public static final int MAC_OLD_TIME = 5; // 0x5
+    field public static final int MAC_TIME = 6; // 0x6
+    field @Deprecated public static final int MAX_SCALE = 10; // 0xa
+    field public static final int TO_MAX_VALUE = 5; // 0x5
+    field public static final int TO_MIN_VALUE = 4; // 0x4
+    field public static final int UNITS_VALUE = 0; // 0x0
+    field public static final int UNIX_MICROSECONDS_TIME = 9; // 0x9
+    field public static final int UNIX_TIME = 1; // 0x1
+    field public static final int WINDOWS_FILE_TIME = 3; // 0x3
+  }
+
+  public interface ValueIterator {
+    method public boolean next(android.icu.util.ValueIterator.Element);
+    method public void reset();
+    method public void setRange(int, int);
+  }
+
+  public static final class ValueIterator.Element {
+    ctor public ValueIterator.Element();
+    field public int integer;
+    field public Object value;
+  }
+
+  public final class VersionInfo implements java.lang.Comparable<android.icu.util.VersionInfo> {
+    method public int compareTo(android.icu.util.VersionInfo);
+    method public static android.icu.util.VersionInfo getInstance(String);
+    method public static android.icu.util.VersionInfo getInstance(int, int, int, int);
+    method public static android.icu.util.VersionInfo getInstance(int, int, int);
+    method public static android.icu.util.VersionInfo getInstance(int, int);
+    method public static android.icu.util.VersionInfo getInstance(int);
+    method public int getMajor();
+    method public int getMicro();
+    method public int getMilli();
+    method public int getMinor();
+    field public static final android.icu.util.VersionInfo ICU_VERSION;
+    field public static final android.icu.util.VersionInfo UCOL_BUILDER_VERSION;
+    field public static final android.icu.util.VersionInfo UCOL_RUNTIME_VERSION;
+    field public static final android.icu.util.VersionInfo UNICODE_10_0;
+    field public static final android.icu.util.VersionInfo UNICODE_11_0;
+    field public static final android.icu.util.VersionInfo UNICODE_12_0;
+    field public static final android.icu.util.VersionInfo UNICODE_12_1;
+    field public static final android.icu.util.VersionInfo UNICODE_13_0;
+    field public static final android.icu.util.VersionInfo UNICODE_1_0;
+    field public static final android.icu.util.VersionInfo UNICODE_1_0_1;
+    field public static final android.icu.util.VersionInfo UNICODE_1_1_0;
+    field public static final android.icu.util.VersionInfo UNICODE_1_1_5;
+    field public static final android.icu.util.VersionInfo UNICODE_2_0;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_2;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_5;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_8;
+    field public static final android.icu.util.VersionInfo UNICODE_2_1_9;
+    field public static final android.icu.util.VersionInfo UNICODE_3_0;
+    field public static final android.icu.util.VersionInfo UNICODE_3_0_1;
+    field public static final android.icu.util.VersionInfo UNICODE_3_1_0;
+    field public static final android.icu.util.VersionInfo UNICODE_3_1_1;
+    field public static final android.icu.util.VersionInfo UNICODE_3_2;
+    field public static final android.icu.util.VersionInfo UNICODE_4_0;
+    field public static final android.icu.util.VersionInfo UNICODE_4_0_1;
+    field public static final android.icu.util.VersionInfo UNICODE_4_1;
+    field public static final android.icu.util.VersionInfo UNICODE_5_0;
+    field public static final android.icu.util.VersionInfo UNICODE_5_1;
+    field public static final android.icu.util.VersionInfo UNICODE_5_2;
+    field public static final android.icu.util.VersionInfo UNICODE_6_0;
+    field public static final android.icu.util.VersionInfo UNICODE_6_1;
+    field public static final android.icu.util.VersionInfo UNICODE_6_2;
+    field public static final android.icu.util.VersionInfo UNICODE_6_3;
+    field public static final android.icu.util.VersionInfo UNICODE_7_0;
+    field public static final android.icu.util.VersionInfo UNICODE_8_0;
+    field public static final android.icu.util.VersionInfo UNICODE_9_0;
+  }
+
+}
+
diff --git a/32/public/api/service-media-s-removed.txt b/32/public/api/service-media-s-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/service-media-s-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/service-media-s.txt b/32/public/api/service-media-s.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/service-media-s.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/service-permission-removed.txt b/32/public/api/service-permission-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/service-permission-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/api/service-permission.txt b/32/public/api/service-permission.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/public/api/service-permission.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/public/art.jar b/32/public/art.jar
new file mode 100644
index 0000000..d3325b7
--- /dev/null
+++ b/32/public/art.jar
Binary files differ
diff --git a/32/public/com.android.future.usb.accessory.jar b/32/public/com.android.future.usb.accessory.jar
new file mode 100644
index 0000000..fd05f1b
--- /dev/null
+++ b/32/public/com.android.future.usb.accessory.jar
Binary files differ
diff --git a/32/public/com.android.location.provider.jar b/32/public/com.android.location.provider.jar
new file mode 100644
index 0000000..9b31788
--- /dev/null
+++ b/32/public/com.android.location.provider.jar
Binary files differ
diff --git a/32/public/com.android.media.remotedisplay.jar b/32/public/com.android.media.remotedisplay.jar
new file mode 100644
index 0000000..b62b671
--- /dev/null
+++ b/32/public/com.android.media.remotedisplay.jar
Binary files differ
diff --git a/32/public/com.android.media.tv.remoteprovider.jar b/32/public/com.android.media.tv.remoteprovider.jar
new file mode 100644
index 0000000..52d9000
--- /dev/null
+++ b/32/public/com.android.media.tv.remoteprovider.jar
Binary files differ
diff --git a/32/public/com.android.mediadrm.signer.jar b/32/public/com.android.mediadrm.signer.jar
new file mode 100644
index 0000000..52970f5
--- /dev/null
+++ b/32/public/com.android.mediadrm.signer.jar
Binary files differ
diff --git a/32/public/com.android.nfc_extras.jar b/32/public/com.android.nfc_extras.jar
new file mode 100644
index 0000000..d35f3b8
--- /dev/null
+++ b/32/public/com.android.nfc_extras.jar
Binary files differ
diff --git a/32/public/conscrypt-coreplatform.jar b/32/public/conscrypt-coreplatform.jar
new file mode 100644
index 0000000..5c9645a
--- /dev/null
+++ b/32/public/conscrypt-coreplatform.jar
Binary files differ
diff --git a/32/public/conscrypt.jar b/32/public/conscrypt.jar
new file mode 100644
index 0000000..e0e7117
--- /dev/null
+++ b/32/public/conscrypt.jar
Binary files differ
diff --git a/32/public/core-for-system-modules.jar b/32/public/core-for-system-modules.jar
new file mode 100644
index 0000000..8958111
--- /dev/null
+++ b/32/public/core-for-system-modules.jar
Binary files differ
diff --git a/32/public/data/annotations.zip b/32/public/data/annotations.zip
new file mode 100644
index 0000000..3d8a0bb
--- /dev/null
+++ b/32/public/data/annotations.zip
Binary files differ
diff --git a/32/public/data/api-versions-filtered.xml b/32/public/data/api-versions-filtered.xml
new file mode 100644
index 0000000..02d77f5
--- /dev/null
+++ b/32/public/data/api-versions-filtered.xml
@@ -0,0 +1,80544 @@
+<api version="2">
+	<class name="android/Manifest" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/Manifest$permission" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ACCEPT_HANDOVER" since="28" />
+		<field name="ACCESS_BACKGROUND_LOCATION" since="29" />
+		<field name="ACCESS_BLOBS_ACROSS_USERS" since="31" />
+		<field name="ACCESS_CHECKIN_PROPERTIES" />
+		<field name="ACCESS_COARSE_LOCATION" />
+		<field name="ACCESS_FINE_LOCATION" />
+		<field name="ACCESS_LOCATION_EXTRA_COMMANDS" />
+		<field name="ACCESS_MEDIA_LOCATION" since="29" />
+		<field name="ACCESS_MOCK_LOCATION" removed="23" />
+		<field name="ACCESS_NETWORK_STATE" />
+		<field name="ACCESS_NOTIFICATION_POLICY" since="23" />
+		<field name="ACCESS_SURFACE_FLINGER" removed="23" />
+		<field name="ACCESS_WIFI_STATE" />
+		<field name="ACCOUNT_MANAGER" since="5" />
+		<field name="ACTIVITY_RECOGNITION" since="29" />
+		<field name="ADD_SYSTEM_SERVICE" removed="4" />
+		<field name="ADD_VOICEMAIL" since="14" />
+		<field name="ANSWER_PHONE_CALLS" since="26" />
+		<field name="AUTHENTICATE_ACCOUNTS" since="5" removed="23" />
+		<field name="BATTERY_STATS" />
+		<field name="BIND_ACCESSIBILITY_SERVICE" since="16" />
+		<field name="BIND_APPWIDGET" since="3" />
+		<field name="BIND_AUTOFILL_SERVICE" since="26" />
+		<field name="BIND_CALL_REDIRECTION_SERVICE" since="29" />
+		<field name="BIND_CARRIER_MESSAGING_CLIENT_SERVICE" since="29" />
+		<field name="BIND_CARRIER_MESSAGING_SERVICE" since="22" deprecated="23" />
+		<field name="BIND_CARRIER_SERVICES" since="23" />
+		<field name="BIND_CHOOSER_TARGET_SERVICE" since="23" deprecated="30" />
+		<field name="BIND_COMPANION_DEVICE_SERVICE" since="31" />
+		<field name="BIND_CONDITION_PROVIDER_SERVICE" since="24" />
+		<field name="BIND_CONTROLS" since="30" />
+		<field name="BIND_DEVICE_ADMIN" since="8" />
+		<field name="BIND_DREAM_SERVICE" since="21" />
+		<field name="BIND_INCALL_SERVICE" since="23" />
+		<field name="BIND_INPUT_METHOD" since="3" />
+		<field name="BIND_MIDI_DEVICE_SERVICE" since="23" />
+		<field name="BIND_NFC_SERVICE" since="19" />
+		<field name="BIND_NOTIFICATION_LISTENER_SERVICE" since="18" />
+		<field name="BIND_PRINT_SERVICE" since="19" />
+		<field name="BIND_QUICK_ACCESS_WALLET_SERVICE" since="30" />
+		<field name="BIND_QUICK_SETTINGS_TILE" since="24" />
+		<field name="BIND_REMOTEVIEWS" since="11" />
+		<field name="BIND_SCREENING_SERVICE" since="24" />
+		<field name="BIND_TELECOM_CONNECTION_SERVICE" since="23" />
+		<field name="BIND_TEXT_SERVICE" since="14" />
+		<field name="BIND_TV_INPUT" since="21" />
+		<field name="BIND_VISUAL_VOICEMAIL_SERVICE" since="26" />
+		<field name="BIND_VOICE_INTERACTION" since="21" />
+		<field name="BIND_VPN_SERVICE" since="14" />
+		<field name="BIND_VR_LISTENER_SERVICE" since="24" />
+		<field name="BIND_WALLPAPER" since="8" />
+		<field name="BLUETOOTH" />
+		<field name="BLUETOOTH_ADMIN" />
+		<field name="BLUETOOTH_ADVERTISE" since="31" />
+		<field name="BLUETOOTH_CONNECT" since="31" />
+		<field name="BLUETOOTH_PRIVILEGED" since="19" />
+		<field name="BLUETOOTH_SCAN" since="31" />
+		<field name="BODY_SENSORS" since="20" />
+		<field name="BRICK" removed="23" />
+		<field name="BROADCAST_PACKAGE_REMOVED" />
+		<field name="BROADCAST_SMS" since="2" />
+		<field name="BROADCAST_STICKY" />
+		<field name="BROADCAST_WAP_PUSH" since="2" />
+		<field name="CALL_COMPANION_APP" since="29" />
+		<field name="CALL_PHONE" />
+		<field name="CALL_PRIVILEGED" />
+		<field name="CAMERA" />
+		<field name="CAPTURE_AUDIO_OUTPUT" since="19" />
+		<field name="CAPTURE_SECURE_VIDEO_OUTPUT" since="19" removed="29" />
+		<field name="CAPTURE_VIDEO_OUTPUT" since="19" removed="29" />
+		<field name="CHANGE_COMPONENT_ENABLED_STATE" />
+		<field name="CHANGE_CONFIGURATION" />
+		<field name="CHANGE_NETWORK_STATE" />
+		<field name="CHANGE_WIFI_MULTICAST_STATE" since="4" />
+		<field name="CHANGE_WIFI_STATE" />
+		<field name="CLEAR_APP_CACHE" />
+		<field name="CLEAR_APP_USER_DATA" removed="23" />
+		<field name="CONTROL_LOCATION_UPDATES" />
+		<field name="DELETE_CACHE_FILES" />
+		<field name="DELETE_PACKAGES" />
+		<field name="DEVICE_POWER" removed="23" />
+		<field name="DIAGNOSTIC" />
+		<field name="DISABLE_KEYGUARD" />
+		<field name="DUMP" />
+		<field name="EXPAND_STATUS_BAR" />
+		<field name="FACTORY_TEST" />
+		<field name="FLASHLIGHT" removed="24" />
+		<field name="FORCE_BACK" removed="23" />
+		<field name="FOREGROUND_SERVICE" since="28" />
+		<field name="FOTA_UPDATE" removed="4" />
+		<field name="GET_ACCOUNTS" />
+		<field name="GET_ACCOUNTS_PRIVILEGED" since="23" />
+		<field name="GET_PACKAGE_SIZE" />
+		<field name="GET_TASKS" deprecated="21" />
+		<field name="GET_TOP_ACTIVITY_INFO" since="18" removed="23" />
+		<field name="GLOBAL_SEARCH" since="4" />
+		<field name="HARDWARE_TEST" removed="23" />
+		<field name="HIDE_OVERLAY_WINDOWS" since="31" />
+		<field name="HIGH_SAMPLING_RATE_SENSORS" since="31" />
+		<field name="INJECT_EVENTS" removed="23" />
+		<field name="INSTALL_LOCATION_PROVIDER" since="4" />
+		<field name="INSTALL_PACKAGES" />
+		<field name="INSTALL_SHORTCUT" since="19" />
+		<field name="INSTANT_APP_FOREGROUND_SERVICE" since="26" />
+		<field name="INTERACT_ACROSS_PROFILES" since="30" />
+		<field name="INTERNAL_SYSTEM_WINDOW" removed="23" />
+		<field name="INTERNET" />
+		<field name="KILL_BACKGROUND_PROCESSES" since="8" />
+		<field name="LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" since="33" />
+		<field name="LOADER_USAGE_STATS" since="30" />
+		<field name="LOCATION_HARDWARE" since="18" />
+		<field name="MANAGE_ACCOUNTS" since="5" removed="23" />
+		<field name="MANAGE_APP_TOKENS" removed="23" />
+		<field name="MANAGE_DOCUMENTS" since="19" />
+		<field name="MANAGE_EXTERNAL_STORAGE" since="30" />
+		<field name="MANAGE_MEDIA" since="31" />
+		<field name="MANAGE_ONGOING_CALLS" since="31" />
+		<field name="MANAGE_OWN_CALLS" since="26" />
+		<field name="MASTER_CLEAR" />
+		<field name="MEDIA_CONTENT_CONTROL" since="19" />
+		<field name="MODIFY_AUDIO_SETTINGS" />
+		<field name="MODIFY_PHONE_STATE" />
+		<field name="MOUNT_FORMAT_FILESYSTEMS" since="3" />
+		<field name="MOUNT_UNMOUNT_FILESYSTEMS" />
+		<field name="NFC" since="9" />
+		<field name="NFC_PREFERRED_PAYMENT_INFO" since="30" />
+		<field name="NFC_TRANSACTION_EVENT" since="28" />
+		<field name="PACKAGE_USAGE_STATS" since="23" />
+		<field name="PERSISTENT_ACTIVITY" deprecated="15" />
+		<field name="PROCESS_OUTGOING_CALLS" deprecated="29" />
+		<field name="QUERY_ALL_PACKAGES" since="30" />
+		<field name="READ_CALENDAR" />
+		<field name="READ_CALL_LOG" since="16" />
+		<field name="READ_CONTACTS" />
+		<field name="READ_EXTERNAL_STORAGE" since="16" />
+		<field name="READ_FRAME_BUFFER" removed="29" />
+		<field name="READ_HISTORY_BOOKMARKS" since="4" removed="23" />
+		<field name="READ_INPUT_STATE" deprecated="16" />
+		<field name="READ_LOGS" />
+		<field name="READ_OWNER_DATA" removed="9" />
+		<field name="READ_PHONE_NUMBERS" since="26" />
+		<field name="READ_PHONE_STATE" />
+		<field name="READ_PRECISE_PHONE_STATE" since="30" />
+		<field name="READ_PROFILE" since="14" removed="23" />
+		<field name="READ_SMS" />
+		<field name="READ_SOCIAL_STREAM" since="15" deprecated="21" removed="23" />
+		<field name="READ_SYNC_SETTINGS" />
+		<field name="READ_SYNC_STATS" />
+		<field name="READ_USER_DICTIONARY" since="16" removed="23" />
+		<field name="READ_VOICEMAIL" since="21" />
+		<field name="REBOOT" />
+		<field name="RECEIVE_BOOT_COMPLETED" />
+		<field name="RECEIVE_MMS" />
+		<field name="RECEIVE_SMS" />
+		<field name="RECEIVE_WAP_PUSH" />
+		<field name="RECORD_AUDIO" />
+		<field name="REORDER_TASKS" />
+		<field name="REQUEST_COMPANION_PROFILE_WATCH" since="31" />
+		<field name="REQUEST_COMPANION_RUN_IN_BACKGROUND" since="26" />
+		<field name="REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND" since="31" />
+		<field name="REQUEST_COMPANION_USE_DATA_IN_BACKGROUND" since="26" />
+		<field name="REQUEST_DELETE_PACKAGES" since="26" />
+		<field name="REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23" />
+		<field name="REQUEST_INSTALL_PACKAGES" since="23" />
+		<field name="REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE" since="31" />
+		<field name="REQUEST_PASSWORD_COMPLEXITY" since="29" />
+		<field name="RESTART_PACKAGES" deprecated="15" />
+		<field name="SCHEDULE_EXACT_ALARM" since="31" />
+		<field name="SEND_RESPOND_VIA_MESSAGE" since="18" />
+		<field name="SEND_SMS" />
+		<field name="SET_ACTIVITY_WATCHER" removed="23" />
+		<field name="SET_ALARM" since="9" />
+		<field name="SET_ALWAYS_FINISH" />
+		<field name="SET_ANIMATION_SCALE" />
+		<field name="SET_DEBUG_APP" />
+		<field name="SET_ORIENTATION" removed="23" />
+		<field name="SET_POINTER_SPEED" since="13" removed="23" />
+		<field name="SET_PREFERRED_APPLICATIONS" deprecated="15" />
+		<field name="SET_PROCESS_FOREGROUND" removed="4" />
+		<field name="SET_PROCESS_LIMIT" />
+		<field name="SET_TIME" since="8" />
+		<field name="SET_TIME_ZONE" />
+		<field name="SET_WALLPAPER" />
+		<field name="SET_WALLPAPER_HINTS" />
+		<field name="SIGNAL_PERSISTENT_PROCESSES" />
+		<field name="SMS_FINANCIAL_TRANSACTIONS" since="29" deprecated="31" />
+		<field name="START_FOREGROUND_SERVICES_FROM_BACKGROUND" since="31" />
+		<field name="START_VIEW_PERMISSION_USAGE" since="29" />
+		<field name="STATUS_BAR" />
+		<field name="SUBSCRIBED_FEEDS_READ" removed="23" />
+		<field name="SUBSCRIBED_FEEDS_WRITE" removed="23" />
+		<field name="SYSTEM_ALERT_WINDOW" />
+		<field name="TRANSMIT_IR" since="19" />
+		<field name="UNINSTALL_SHORTCUT" since="19" />
+		<field name="UPDATE_DEVICE_STATS" since="3" />
+		<field name="UPDATE_PACKAGES_WITHOUT_USER_ACTION" since="31" />
+		<field name="USE_BIOMETRIC" since="28" />
+		<field name="USE_CREDENTIALS" since="5" removed="23" />
+		<field name="USE_FINGERPRINT" since="23" deprecated="28" />
+		<field name="USE_FULL_SCREEN_INTENT" since="29" />
+		<field name="USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER" since="31" />
+		<field name="USE_SIP" since="9" />
+		<field name="UWB_RANGING" since="31" />
+		<field name="VIBRATE" />
+		<field name="WAKE_LOCK" />
+		<field name="WRITE_APN_SETTINGS" />
+		<field name="WRITE_CALENDAR" />
+		<field name="WRITE_CALL_LOG" since="16" />
+		<field name="WRITE_CONTACTS" />
+		<field name="WRITE_EXTERNAL_STORAGE" since="4" />
+		<field name="WRITE_GSERVICES" />
+		<field name="WRITE_HISTORY_BOOKMARKS" since="4" removed="23" />
+		<field name="WRITE_OWNER_DATA" removed="9" />
+		<field name="WRITE_PROFILE" since="14" removed="23" />
+		<field name="WRITE_SECURE_SETTINGS" since="3" />
+		<field name="WRITE_SETTINGS" />
+		<field name="WRITE_SMS" removed="23" />
+		<field name="WRITE_SOCIAL_STREAM" since="15" deprecated="21" removed="23" />
+		<field name="WRITE_SYNC_SETTINGS" />
+		<field name="WRITE_USER_DICTIONARY" since="16" removed="23" />
+		<field name="WRITE_VOICEMAIL" since="21" />
+	</class>
+	<class name="android/Manifest$permission_group" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ACCESSIBILITY_FEATURES" since="18" removed="23" />
+		<field name="ACCOUNTS" removed="23" />
+		<field name="ACTIVITY_RECOGNITION" since="29" />
+		<field name="AFFECTS_BATTERY" since="17" removed="23" />
+		<field name="APP_INFO" since="17" removed="23" />
+		<field name="AUDIO_SETTINGS" since="17" removed="23" />
+		<field name="BLUETOOTH_NETWORK" since="17" removed="23" />
+		<field name="BOOKMARKS" since="17" removed="23" />
+		<field name="CALENDAR" since="17" />
+		<field name="CALL_LOG" since="28" />
+		<field name="CAMERA" since="17" />
+		<field name="CONTACTS" since="23" />
+		<field name="COST_MONEY" removed="23" />
+		<field name="DEVELOPMENT_TOOLS" removed="23" />
+		<field name="DEVICE_ALARMS" since="17" removed="23" />
+		<field name="DISPLAY" since="17" removed="23" />
+		<field name="HARDWARE_CONTROLS" removed="23" />
+		<field name="LOCATION" />
+		<field name="MESSAGES" removed="23" />
+		<field name="MICROPHONE" since="17" />
+		<field name="NEARBY_DEVICES" since="31" />
+		<field name="NETWORK" removed="23" />
+		<field name="PERSONAL_INFO" removed="23" />
+		<field name="PHONE" since="23" />
+		<field name="PHONE_CALLS" removed="23" />
+		<field name="SCREENLOCK" since="17" removed="23" />
+		<field name="SENSORS" since="23" />
+		<field name="SMS" since="23" />
+		<field name="SOCIAL_INFO" since="17" removed="23" />
+		<field name="STATUS_BAR" since="17" removed="23" />
+		<field name="STORAGE" since="4" />
+		<field name="SYNC_SETTINGS" since="17" removed="23" />
+		<field name="SYSTEM_CLOCK" since="17" removed="23" />
+		<field name="SYSTEM_TOOLS" removed="23" />
+		<field name="USER_DICTIONARY" since="17" removed="23" />
+		<field name="VOICEMAIL" since="17" removed="23" />
+		<field name="WALLPAPER" since="17" removed="23" />
+		<field name="WRITE_USER_DICTIONARY" since="17" removed="23" />
+	</class>
+	<class name="android/R" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/R$anim" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="accelerate_decelerate_interpolator" />
+		<field name="accelerate_interpolator" />
+		<field name="anticipate_interpolator" since="4" />
+		<field name="anticipate_overshoot_interpolator" since="4" />
+		<field name="bounce_interpolator" since="4" />
+		<field name="cycle_interpolator" since="8" />
+		<field name="decelerate_interpolator" />
+		<field name="fade_in" />
+		<field name="fade_out" />
+		<field name="linear_interpolator" since="4" />
+		<field name="overshoot_interpolator" since="4" />
+		<field name="slide_in_left" />
+		<field name="slide_out_right" />
+	</class>
+	<class name="android/R$animator" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="fade_in" />
+		<field name="fade_out" />
+	</class>
+	<class name="android/R$array" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="emailAddressTypes" />
+		<field name="imProtocols" />
+		<field name="organizationTypes" />
+		<field name="phoneTypes" />
+		<field name="postalAddressTypes" />
+	</class>
+	<class name="android/R$attr" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="absListViewStyle" />
+		<field name="accessibilityEventTypes" since="14" />
+		<field name="accessibilityFeedbackType" since="14" />
+		<field name="accessibilityFlags" since="14" />
+		<field name="accessibilityHeading" since="28" />
+		<field name="accessibilityLiveRegion" since="19" />
+		<field name="accessibilityPaneTitle" since="28" />
+		<field name="accessibilityTraversalAfter" since="22" />
+		<field name="accessibilityTraversalBefore" since="22" />
+		<field name="accountPreferences" since="5" />
+		<field name="accountType" since="5" />
+		<field name="action" />
+		<field name="actionBarDivider" since="14" />
+		<field name="actionBarItemBackground" since="14" />
+		<field name="actionBarPopupTheme" since="21" />
+		<field name="actionBarSize" since="11" />
+		<field name="actionBarSplitStyle" since="14" />
+		<field name="actionBarStyle" since="11" />
+		<field name="actionBarTabBarStyle" since="11" />
+		<field name="actionBarTabStyle" since="11" />
+		<field name="actionBarTabTextStyle" since="11" />
+		<field name="actionBarTheme" since="21" />
+		<field name="actionBarWidgetTheme" since="14" />
+		<field name="actionButtonStyle" since="11" />
+		<field name="actionDropDownStyle" since="11" />
+		<field name="actionLayout" since="11" />
+		<field name="actionMenuTextAppearance" since="11" />
+		<field name="actionMenuTextColor" since="11" />
+		<field name="actionModeBackground" since="11" />
+		<field name="actionModeCloseButtonStyle" since="11" />
+		<field name="actionModeCloseDrawable" since="11" />
+		<field name="actionModeCopyDrawable" since="11" />
+		<field name="actionModeCutDrawable" since="11" />
+		<field name="actionModeFindDrawable" since="21" />
+		<field name="actionModePasteDrawable" since="11" />
+		<field name="actionModeSelectAllDrawable" since="14" />
+		<field name="actionModeShareDrawable" since="21" />
+		<field name="actionModeSplitBackground" since="14" />
+		<field name="actionModeStyle" since="14" />
+		<field name="actionModeWebSearchDrawable" since="21" />
+		<field name="actionOverflowButtonStyle" since="11" />
+		<field name="actionOverflowMenuStyle" since="21" />
+		<field name="actionProviderClass" since="14" />
+		<field name="actionViewClass" since="11" />
+		<field name="activatedBackgroundIndicator" since="11" />
+		<field name="activityCloseEnterAnimation" />
+		<field name="activityCloseExitAnimation" />
+		<field name="activityOpenEnterAnimation" />
+		<field name="activityOpenExitAnimation" />
+		<field name="addPrintersActivity" since="19" />
+		<field name="addStatesFromChildren" />
+		<field name="adjustViewBounds" />
+		<field name="advancedPrintOptionsActivity" since="19" />
+		<field name="alertDialogIcon" since="11" />
+		<field name="alertDialogStyle" />
+		<field name="alertDialogTheme" since="11" />
+		<field name="alignmentMode" since="14" />
+		<field name="allContactsName" since="11" />
+		<field name="allowAudioPlaybackCapture" since="29" />
+		<field name="allowBackup" since="4" />
+		<field name="allowClearUserData" />
+		<field name="allowClickWhenDisabled" since="31" />
+		<field name="allowEmbedded" since="20" />
+		<field name="allowNativeHeapPointerTagging" since="30" />
+		<field name="allowParallelSyncs" since="11" />
+		<field name="allowSingleTap" since="3" />
+		<field name="allowTaskReparenting" />
+		<field name="allowUndo" since="23" />
+		<field name="alpha" since="11" />
+		<field name="alphabeticModifiers" since="26" />
+		<field name="alphabeticShortcut" />
+		<field name="alwaysDrawnWithCache" />
+		<field name="alwaysRetainTaskState" />
+		<field name="amPmBackgroundColor" since="21" deprecated="23" />
+		<field name="amPmTextColor" since="21" deprecated="23" />
+		<field name="ambientShadowAlpha" since="21" />
+		<field name="angle" />
+		<field name="animateFirstView" since="11" />
+		<field name="animateLayoutChanges" since="11" />
+		<field name="animateOnClick" since="3" />
+		<field name="animatedImageDrawable" since="30" />
+		<field name="animation" />
+		<field name="animationCache" />
+		<field name="animationDuration" />
+		<field name="animationOrder" />
+		<field name="animationResolution" since="11" deprecated="16" />
+		<field name="antialias" />
+		<field name="anyDensity" since="4" deprecated="30" />
+		<field name="apduServiceBanner" since="19" />
+		<field name="apiKey" />
+		<field name="appCategory" since="26" />
+		<field name="appComponentFactory" since="28" />
+		<field name="attributionTags" since="31" />
+		<field name="attributionsAreUserVisible" since="31" />
+		<field name="author" since="7" />
+		<field name="authorities" />
+		<field name="autoAdvanceViewId" since="11" />
+		<field name="autoCompleteTextViewStyle" />
+		<field name="autoLink" />
+		<field name="autoMirrored" since="19" />
+		<field name="autoRemoveFromRecents" since="21" />
+		<field name="autoRevokePermissions" since="30" />
+		<field name="autoSizeMaxTextSize" since="26" />
+		<field name="autoSizeMinTextSize" since="26" />
+		<field name="autoSizePresetSizes" since="26" />
+		<field name="autoSizeStepGranularity" since="26" />
+		<field name="autoSizeTextType" since="26" />
+		<field name="autoStart" since="7" />
+		<field name="autoText" deprecated="15" />
+		<field name="autoUrlDetect" since="4" />
+		<field name="autoVerify" since="23" />
+		<field name="autofillHints" since="26" />
+		<field name="autofilledHighlight" since="26" />
+		<field name="background" />
+		<field name="backgroundDimAmount" />
+		<field name="backgroundDimEnabled" since="3" />
+		<field name="backgroundSplit" since="14" />
+		<field name="backgroundStacked" since="14" />
+		<field name="backgroundTint" since="21" />
+		<field name="backgroundTintMode" since="21" />
+		<field name="backupAgent" since="4" />
+		<field name="backupInForeground" since="24" />
+		<field name="banner" since="21" />
+		<field name="baseline" since="11" />
+		<field name="baselineAlignBottom" />
+		<field name="baselineAligned" />
+		<field name="baselineAlignedChildIndex" />
+		<field name="bitmap" since="24" />
+		<field name="borderlessButtonStyle" since="11" />
+		<field name="bottom" />
+		<field name="bottomBright" />
+		<field name="bottomDark" />
+		<field name="bottomLeftRadius" />
+		<field name="bottomMedium" />
+		<field name="bottomOffset" since="3" />
+		<field name="bottomRightRadius" />
+		<field name="breadCrumbShortTitle" since="11" />
+		<field name="breadCrumbTitle" since="11" />
+		<field name="breakStrategy" since="23" />
+		<field name="bufferType" />
+		<field name="button" />
+		<field name="buttonBarButtonStyle" since="11" />
+		<field name="buttonBarNegativeButtonStyle" since="21" />
+		<field name="buttonBarNeutralButtonStyle" since="21" />
+		<field name="buttonBarPositiveButtonStyle" since="21" />
+		<field name="buttonBarStyle" since="11" />
+		<field name="buttonCornerRadius" since="28" />
+		<field name="buttonGravity" since="24" />
+		<field name="buttonStyle" />
+		<field name="buttonStyleInset" />
+		<field name="buttonStyleSmall" />
+		<field name="buttonStyleToggle" />
+		<field name="buttonTint" since="21" />
+		<field name="buttonTintMode" since="21" />
+		<field name="cacheColorHint" />
+		<field name="calendarTextColor" since="21" />
+		<field name="calendarViewShown" since="11" />
+		<field name="calendarViewStyle" since="11" />
+		<field name="canControlMagnification" since="24" />
+		<field name="canPauseRecording" since="31" />
+		<field name="canPerformGestures" since="24" />
+		<field name="canRecord" since="24" />
+		<field name="canRequestEnhancedWebAccessibility" since="18" deprecated="26" />
+		<field name="canRequestFilterKeyEvents" since="18" />
+		<field name="canRequestFingerprintGestures" since="26" />
+		<field name="canRequestTouchExplorationMode" since="18" />
+		<field name="canRetrieveWindowContent" since="14" />
+		<field name="canTakeScreenshot" since="30" />
+		<field name="candidatesTextStyleSpans" since="3" />
+		<field name="cantSaveState" since="28" />
+		<field name="capitalize" deprecated="15" />
+		<field name="category" since="19" />
+		<field name="centerBright" />
+		<field name="centerColor" />
+		<field name="centerDark" />
+		<field name="centerMedium" />
+		<field name="centerX" />
+		<field name="centerY" />
+		<field name="certDigest" since="26" />
+		<field name="checkBoxPreferenceStyle" />
+		<field name="checkMark" />
+		<field name="checkMarkTint" since="21" />
+		<field name="checkMarkTintMode" since="21" />
+		<field name="checkable" />
+		<field name="checkableBehavior" />
+		<field name="checkboxStyle" />
+		<field name="checked" />
+		<field name="checkedButton" />
+		<field name="checkedTextViewStyle" since="17" />
+		<field name="childDivider" />
+		<field name="childIndicator" />
+		<field name="childIndicatorEnd" since="18" />
+		<field name="childIndicatorLeft" />
+		<field name="childIndicatorRight" />
+		<field name="childIndicatorStart" since="18" />
+		<field name="choiceMode" />
+		<field name="classLoader" since="27" />
+		<field name="clearTaskOnLaunch" />
+		<field name="clickable" />
+		<field name="clipChildren" />
+		<field name="clipOrientation" />
+		<field name="clipToOutline" since="31" />
+		<field name="clipToPadding" />
+		<field name="closeIcon" since="21" />
+		<field name="codes" since="3" deprecated="29" />
+		<field name="collapseColumns" />
+		<field name="collapseContentDescription" since="22" />
+		<field name="collapseIcon" since="24" />
+		<field name="color" />
+		<field name="colorAccent" since="21" />
+		<field name="colorActivatedHighlight" since="14" />
+		<field name="colorBackground" />
+		<field name="colorBackgroundCacheHint" since="5" />
+		<field name="colorBackgroundFloating" since="23" />
+		<field name="colorButtonNormal" since="21" />
+		<field name="colorControlActivated" since="21" />
+		<field name="colorControlHighlight" since="21" />
+		<field name="colorControlNormal" since="21" />
+		<field name="colorEdgeEffect" since="21" />
+		<field name="colorError" since="26" />
+		<field name="colorFocusedHighlight" since="14" />
+		<field name="colorForeground" />
+		<field name="colorForegroundInverse" />
+		<field name="colorLongPressedHighlight" since="14" />
+		<field name="colorMode" since="26" />
+		<field name="colorMultiSelectHighlight" since="14" />
+		<field name="colorPressedHighlight" since="14" />
+		<field name="colorPrimary" since="21" />
+		<field name="colorPrimaryDark" since="21" />
+		<field name="colorSecondary" since="25" />
+		<field name="columnCount" since="14" />
+		<field name="columnDelay" />
+		<field name="columnOrderPreserved" since="14" />
+		<field name="columnWidth" />
+		<field name="commitIcon" since="21" />
+		<field name="compatibleWidthLimitDp" since="13" />
+		<field name="completionHint" />
+		<field name="completionHintView" />
+		<field name="completionThreshold" />
+		<field name="configChanges" />
+		<field name="configure" since="3" />
+		<field name="constantSize" />
+		<field name="content" since="3" />
+		<field name="contentAgeHint" since="21" />
+		<field name="contentAuthority" since="5" />
+		<field name="contentDescription" since="4" />
+		<field name="contentInsetEnd" since="21" />
+		<field name="contentInsetEndWithActions" since="24" />
+		<field name="contentInsetLeft" since="21" />
+		<field name="contentInsetRight" since="21" />
+		<field name="contentInsetStart" since="21" />
+		<field name="contentInsetStartWithNavigation" since="24" />
+		<field name="contextClickable" since="23" />
+		<field name="contextDescription" since="25" />
+		<field name="contextPopupMenuStyle" since="24" />
+		<field name="contextUri" since="25" />
+		<field name="controlX1" since="21" />
+		<field name="controlX2" since="21" />
+		<field name="controlY1" since="21" />
+		<field name="controlY2" since="21" />
+		<field name="countDown" since="24" />
+		<field name="country" since="21" />
+		<field name="cropToPadding" />
+		<field name="crossProfile" since="30" />
+		<field name="cursorVisible" />
+		<field name="customNavigationLayout" since="11" />
+		<field name="customTokens" since="11" />
+		<field name="cycles" />
+		<field name="dashGap" />
+		<field name="dashWidth" />
+		<field name="data" />
+		<field name="dataExtractionRules" since="31" />
+		<field name="datePickerDialogTheme" since="21" />
+		<field name="datePickerMode" since="21" />
+		<field name="datePickerStyle" since="11" />
+		<field name="dateTextAppearance" since="11" />
+		<field name="dayOfWeekBackground" since="21" deprecated="23" />
+		<field name="dayOfWeekTextAppearance" since="21" deprecated="23" />
+		<field name="debuggable" />
+		<field name="defaultFocusHighlightEnabled" since="26" />
+		<field name="defaultHeight" since="24" />
+		<field name="defaultToDeviceProtectedStorage" since="24" />
+		<field name="defaultValue" />
+		<field name="defaultWidth" since="24" />
+		<field name="delay" />
+		<field name="dependency" />
+		<field name="descendantFocusability" />
+		<field name="description" />
+		<field name="detachWallpaper" since="5" />
+		<field name="detailColumn" since="5" />
+		<field name="detailSocialSummary" since="5" />
+		<field name="detailsElementBackground" since="11" />
+		<field name="dial" />
+		<field name="dialTint" since="31" />
+		<field name="dialTintMode" since="31" />
+		<field name="dialogCornerRadius" since="28" />
+		<field name="dialogIcon" />
+		<field name="dialogLayout" />
+		<field name="dialogMessage" />
+		<field name="dialogPreferenceStyle" />
+		<field name="dialogPreferredPadding" since="22" />
+		<field name="dialogTheme" since="11" />
+		<field name="dialogTitle" />
+		<field name="digits" />
+		<field name="directBootAware" since="24" />
+		<field name="direction" />
+		<field name="directionDescriptions" since="14" deprecated="23" />
+		<field name="directionPriority" />
+		<field name="disableDependentsState" />
+		<field name="disabledAlpha" />
+		<field name="displayOptions" since="11" />
+		<field name="dither" />
+		<field name="divider" />
+		<field name="dividerHeight" />
+		<field name="dividerHorizontal" since="11" />
+		<field name="dividerPadding" since="11" />
+		<field name="dividerVertical" since="11" />
+		<field name="documentLaunchMode" since="21" />
+		<field name="drawSelectorOnTop" />
+		<field name="drawable" />
+		<field name="drawableBottom" />
+		<field name="drawableEnd" since="14" />
+		<field name="drawableLeft" />
+		<field name="drawablePadding" />
+		<field name="drawableRight" />
+		<field name="drawableStart" since="14" />
+		<field name="drawableTint" since="23" />
+		<field name="drawableTintMode" since="23" />
+		<field name="drawableTop" />
+		<field name="drawingCacheQuality" />
+		<field name="dropDownAnchor" since="3" />
+		<field name="dropDownHeight" since="4" />
+		<field name="dropDownHintAppearance" />
+		<field name="dropDownHorizontalOffset" since="5" />
+		<field name="dropDownItemStyle" />
+		<field name="dropDownListViewStyle" />
+		<field name="dropDownSelector" />
+		<field name="dropDownSpinnerStyle" since="11" />
+		<field name="dropDownVerticalOffset" since="5" />
+		<field name="dropDownWidth" since="3" />
+		<field name="duplicateParentState" />
+		<field name="duration" />
+		<field name="editTextBackground" since="11" />
+		<field name="editTextColor" since="11" />
+		<field name="editTextPreferenceStyle" />
+		<field name="editTextStyle" />
+		<field name="editable" deprecated="15" />
+		<field name="editorExtras" since="3" />
+		<field name="effectColor" since="31" />
+		<field name="elegantTextHeight" since="21" />
+		<field name="elevation" since="21" />
+		<field name="ellipsize" />
+		<field name="ems" />
+		<field name="enableVrMode" since="24" />
+		<field name="enabled" deprecated="15" />
+		<field name="end" since="23" />
+		<field name="endColor" />
+		<field name="endX" since="24" />
+		<field name="endY" since="24" />
+		<field name="endYear" deprecated="16" />
+		<field name="enforceNavigationBarContrast" since="29" />
+		<field name="enforceStatusBarContrast" since="29" />
+		<field name="enterFadeDuration" since="11" />
+		<field name="entries" />
+		<field name="entryValues" />
+		<field name="eventsInterceptionEnabled" since="4" />
+		<field name="excludeClass" since="21" />
+		<field name="excludeFromRecents" />
+		<field name="excludeId" since="21" />
+		<field name="excludeName" since="21" />
+		<field name="exitFadeDuration" since="11" />
+		<field name="expandableListPreferredChildIndicatorLeft" />
+		<field name="expandableListPreferredChildIndicatorRight" />
+		<field name="expandableListPreferredChildPaddingLeft" />
+		<field name="expandableListPreferredItemIndicatorLeft" />
+		<field name="expandableListPreferredItemIndicatorRight" />
+		<field name="expandableListPreferredItemPaddingLeft" />
+		<field name="expandableListViewStyle" />
+		<field name="expandableListViewWhiteStyle" since="8" />
+		<field name="exported" />
+		<field name="externalService" since="24" />
+		<field name="extraTension" since="4" />
+		<field name="extractNativeLibs" since="23" />
+		<field name="factor" />
+		<field name="fadeDuration" since="4" />
+		<field name="fadeEnabled" since="4" />
+		<field name="fadeOffset" since="4" />
+		<field name="fadeScrollbars" since="5" />
+		<field name="fadingEdge" deprecated="15" />
+		<field name="fadingEdgeLength" />
+		<field name="fadingMode" since="19" />
+		<field name="fallbackLineSpacing" since="28" />
+		<field name="fastScrollAlwaysVisible" since="11" />
+		<field name="fastScrollEnabled" since="3" />
+		<field name="fastScrollOverlayPosition" since="11" />
+		<field name="fastScrollPreviewBackgroundLeft" since="11" />
+		<field name="fastScrollPreviewBackgroundRight" since="11" />
+		<field name="fastScrollStyle" since="21" />
+		<field name="fastScrollTextColor" since="11" />
+		<field name="fastScrollThumbDrawable" since="11" />
+		<field name="fastScrollTrackDrawable" since="11" />
+		<field name="fillAfter" />
+		<field name="fillAlpha" since="21" />
+		<field name="fillBefore" />
+		<field name="fillColor" since="21" />
+		<field name="fillEnabled" since="3" />
+		<field name="fillType" since="24" />
+		<field name="fillViewport" />
+		<field name="filter" />
+		<field name="filterTouchesWhenObscured" since="9" />
+		<field name="fingerprintAuthDrawable" since="23" />
+		<field name="finishOnCloseSystemDialogs" since="5" />
+		<field name="finishOnTaskLaunch" />
+		<field name="firstBaselineToTopHeight" since="28" />
+		<field name="firstDayOfWeek" since="11" />
+		<field name="fitsSystemWindows" />
+		<field name="flipInterval" />
+		<field name="focusable" />
+		<field name="focusableInTouchMode" />
+		<field name="focusedByDefault" since="26" />
+		<field name="focusedMonthDateColor" since="11" deprecated="23" />
+		<field name="font" since="26" />
+		<field name="fontFamily" since="16" />
+		<field name="fontFeatureSettings" since="21" />
+		<field name="fontProviderAuthority" since="26" deprecated="31" />
+		<field name="fontProviderCerts" since="26" deprecated="31" />
+		<field name="fontProviderPackage" since="26" deprecated="31" />
+		<field name="fontProviderQuery" since="26" deprecated="31" />
+		<field name="fontProviderSystemFontFamily" since="31" />
+		<field name="fontStyle" since="26" />
+		<field name="fontVariationSettings" since="28" />
+		<field name="fontWeight" since="26" />
+		<field name="footerDividersEnabled" since="3" />
+		<field name="forceDarkAllowed" since="29" />
+		<field name="forceHasOverlappingRendering" since="24" />
+		<field name="forceQueryable" since="30" />
+		<field name="forceUriPermissions" since="29" />
+		<field name="foreground" />
+		<field name="foregroundGravity" />
+		<field name="foregroundServiceType" since="29" />
+		<field name="foregroundTint" since="21" />
+		<field name="foregroundTintMode" since="21" />
+		<field name="format" />
+		<field name="format12Hour" since="17" />
+		<field name="format24Hour" since="17" />
+		<field name="fraction" since="23" />
+		<field name="fragment" since="11" />
+		<field name="fragmentAllowEnterTransitionOverlap" since="21" />
+		<field name="fragmentAllowReturnTransitionOverlap" since="21" />
+		<field name="fragmentCloseEnterAnimation" since="11" />
+		<field name="fragmentCloseExitAnimation" since="11" />
+		<field name="fragmentEnterTransition" since="21" />
+		<field name="fragmentExitTransition" since="21" />
+		<field name="fragmentFadeEnterAnimation" since="11" />
+		<field name="fragmentFadeExitAnimation" since="11" />
+		<field name="fragmentOpenEnterAnimation" since="11" />
+		<field name="fragmentOpenExitAnimation" since="11" />
+		<field name="fragmentReenterTransition" since="21" />
+		<field name="fragmentReturnTransition" since="21" />
+		<field name="fragmentSharedElementEnterTransition" since="21" />
+		<field name="fragmentSharedElementReturnTransition" since="21" />
+		<field name="freezesText" />
+		<field name="fromAlpha" />
+		<field name="fromDegrees" />
+		<field name="fromId" since="21" />
+		<field name="fromScene" since="19" />
+		<field name="fromXDelta" />
+		<field name="fromXScale" />
+		<field name="fromYDelta" />
+		<field name="fromYScale" />
+		<field name="fullBackupContent" since="23" />
+		<field name="fullBackupOnly" since="21" />
+		<field name="fullBright" />
+		<field name="fullDark" />
+		<field name="functionalTest" />
+		<field name="galleryItemBackground" />
+		<field name="galleryStyle" />
+		<field name="gestureColor" since="4" />
+		<field name="gestureStrokeAngleThreshold" since="4" />
+		<field name="gestureStrokeLengthThreshold" since="4" />
+		<field name="gestureStrokeSquarenessThreshold" since="4" />
+		<field name="gestureStrokeType" since="4" />
+		<field name="gestureStrokeWidth" since="4" />
+		<field name="glEsVersion" since="4" />
+		<field name="goIcon" since="21" />
+		<field name="gradientRadius" />
+		<field name="grantUriPermissions" />
+		<field name="gravity" />
+		<field name="gridViewStyle" />
+		<field name="groupIndicator" />
+		<field name="gwpAsanMode" since="30" />
+		<field name="hand_hour" />
+		<field name="hand_hourTint" since="31" />
+		<field name="hand_hourTintMode" since="31" />
+		<field name="hand_minute" />
+		<field name="hand_minuteTint" since="31" />
+		<field name="hand_minuteTintMode" since="31" />
+		<field name="hand_second" since="31" />
+		<field name="hand_secondTint" since="31" />
+		<field name="hand_secondTintMode" since="31" />
+		<field name="handle" since="3" />
+		<field name="handleProfiling" />
+		<field name="hapticFeedbackEnabled" since="3" />
+		<field name="hardwareAccelerated" since="11" />
+		<field name="hasCode" />
+		<field name="hasFragileUserData" since="29" />
+		<field name="headerAmPmTextAppearance" since="21" deprecated="23" />
+		<field name="headerBackground" />
+		<field name="headerDayOfMonthTextAppearance" since="21" deprecated="23" />
+		<field name="headerDividersEnabled" since="3" />
+		<field name="headerMonthTextAppearance" since="21" deprecated="23" />
+		<field name="headerTimeTextAppearance" since="21" deprecated="23" />
+		<field name="headerYearTextAppearance" since="21" deprecated="23" />
+		<field name="height" />
+		<field name="hideOnContentScroll" since="21" />
+		<field name="hint" />
+		<field name="homeAsUpIndicator" since="11" />
+		<field name="homeLayout" since="11" />
+		<field name="horizontalDivider" />
+		<field name="horizontalGap" since="3" deprecated="29" />
+		<field name="horizontalScrollViewStyle" since="11" />
+		<field name="horizontalSpacing" />
+		<field name="host" />
+		<field name="hotSpotX" since="24" />
+		<field name="hotSpotY" since="24" />
+		<field name="htmlDescription" since="30" />
+		<field name="hyphenationFrequency" since="23" />
+		<field name="icon" />
+		<field name="iconPreview" since="3" deprecated="29" />
+		<field name="iconSpaceReserved" since="26" />
+		<field name="iconTint" since="26" />
+		<field name="iconTintMode" since="26" />
+		<field name="iconifiedByDefault" since="11" />
+		<field name="id" />
+		<field name="identifier" since="29" />
+		<field name="ignoreGravity" />
+		<field name="imageButtonStyle" />
+		<field name="imageWellStyle" />
+		<field name="imeActionId" since="3" />
+		<field name="imeActionLabel" since="3" />
+		<field name="imeExtractEnterAnimation" since="3" />
+		<field name="imeExtractExitAnimation" since="3" />
+		<field name="imeFullscreenBackground" since="3" />
+		<field name="imeOptions" since="3" />
+		<field name="imeSubtypeExtraValue" since="11" />
+		<field name="imeSubtypeLocale" since="11" />
+		<field name="imeSubtypeMode" since="11" />
+		<field name="immersive" since="11" />
+		<field name="importantForAccessibility" since="16" />
+		<field name="importantForAutofill" since="26" />
+		<field name="importantForContentCapture" since="30" />
+		<field name="inAnimation" />
+		<field name="includeFontPadding" />
+		<field name="includeInGlobalSearch" since="4" />
+		<field name="indeterminate" />
+		<field name="indeterminateBehavior" />
+		<field name="indeterminateDrawable" />
+		<field name="indeterminateDuration" />
+		<field name="indeterminateOnly" />
+		<field name="indeterminateProgressStyle" since="11" />
+		<field name="indeterminateTint" since="21" />
+		<field name="indeterminateTintMode" since="21" />
+		<field name="indicatorEnd" since="18" />
+		<field name="indicatorLeft" />
+		<field name="indicatorRight" />
+		<field name="indicatorStart" since="18" />
+		<field name="inflatedId" />
+		<field name="inheritShowWhenLocked" since="29" />
+		<field name="initOrder" />
+		<field name="initialKeyguardLayout" since="17" />
+		<field name="initialLayout" since="3" />
+		<field name="innerRadius" since="3" />
+		<field name="innerRadiusRatio" />
+		<field name="inputMethod" deprecated="15" />
+		<field name="inputType" since="3" />
+		<field name="inset" since="21" />
+		<field name="insetBottom" />
+		<field name="insetLeft" />
+		<field name="insetRight" />
+		<field name="insetTop" />
+		<field name="installLocation" since="8" />
+		<field name="interactiveUiTimeout" since="29" />
+		<field name="interpolator" />
+		<field name="isAccessibilityTool" since="31" />
+		<field name="isAlwaysSyncable" since="11" />
+		<field name="isAsciiCapable" since="19" />
+		<field name="isAuxiliary" since="14" />
+		<field name="isDefault" since="3" />
+		<field name="isFeatureSplit" since="26" />
+		<field name="isGame" since="21" />
+		<field name="isIndicator" />
+		<field name="isLightTheme" since="29" />
+		<field name="isModifier" since="3" deprecated="29" />
+		<field name="isRepeatable" since="3" deprecated="29" />
+		<field name="isScrollContainer" since="3" />
+		<field name="isSplitRequired" since="29" />
+		<field name="isStatic" since="26" />
+		<field name="isSticky" since="3" deprecated="29" />
+		<field name="isolatedProcess" since="16" />
+		<field name="isolatedSplits" since="26" />
+		<field name="itemBackground" />
+		<field name="itemIconDisabledAlpha" />
+		<field name="itemPadding" since="11" />
+		<field name="itemTextAppearance" />
+		<field name="justificationMode" since="26" />
+		<field name="keepScreenOn" />
+		<field name="key" />
+		<field name="keyBackground" since="3" deprecated="29" />
+		<field name="keyEdgeFlags" since="3" deprecated="29" />
+		<field name="keyHeight" since="3" deprecated="29" />
+		<field name="keyIcon" since="3" deprecated="29" />
+		<field name="keyLabel" since="3" deprecated="29" />
+		<field name="keyOutputText" since="3" deprecated="29" />
+		<field name="keyPreviewHeight" since="3" deprecated="29" />
+		<field name="keyPreviewLayout" since="3" deprecated="29" />
+		<field name="keyPreviewOffset" since="3" deprecated="29" />
+		<field name="keySet" since="19" />
+		<field name="keyTextColor" since="3" deprecated="29" />
+		<field name="keyTextSize" since="3" deprecated="29" />
+		<field name="keyWidth" since="3" deprecated="29" />
+		<field name="keyboardLayout" since="16" />
+		<field name="keyboardMode" since="3" deprecated="29" />
+		<field name="keyboardNavigationCluster" since="26" />
+		<field name="keycode" />
+		<field name="killAfterRestore" since="5" />
+		<field name="knownCerts" since="31" />
+		<field name="lStar" since="31" />
+		<field name="label" />
+		<field name="labelFor" since="17" />
+		<field name="labelTextSize" since="3" deprecated="29" />
+		<field name="languageTag" since="24" />
+		<field name="largeHeap" since="11" />
+		<field name="largeScreens" since="4" />
+		<field name="largestWidthLimitDp" since="13" />
+		<field name="lastBaselineToBottomHeight" since="28" />
+		<field name="launchMode" />
+		<field name="launchTaskBehindSourceAnimation" since="21" />
+		<field name="launchTaskBehindTargetAnimation" since="21" />
+		<field name="layerType" since="11" />
+		<field name="layout" />
+		<field name="layoutAnimation" />
+		<field name="layoutDirection" since="17" />
+		<field name="layoutMode" since="18" />
+		<field name="layout_above" />
+		<field name="layout_alignBaseline" />
+		<field name="layout_alignBottom" />
+		<field name="layout_alignEnd" since="17" />
+		<field name="layout_alignLeft" />
+		<field name="layout_alignParentBottom" />
+		<field name="layout_alignParentEnd" since="17" />
+		<field name="layout_alignParentLeft" />
+		<field name="layout_alignParentRight" />
+		<field name="layout_alignParentStart" since="17" />
+		<field name="layout_alignParentTop" />
+		<field name="layout_alignRight" />
+		<field name="layout_alignStart" since="17" />
+		<field name="layout_alignTop" />
+		<field name="layout_alignWithParentIfMissing" />
+		<field name="layout_below" />
+		<field name="layout_centerHorizontal" />
+		<field name="layout_centerInParent" />
+		<field name="layout_centerVertical" />
+		<field name="layout_column" />
+		<field name="layout_columnSpan" since="14" />
+		<field name="layout_columnWeight" since="21" />
+		<field name="layout_gravity" />
+		<field name="layout_height" />
+		<field name="layout_margin" />
+		<field name="layout_marginBottom" />
+		<field name="layout_marginEnd" since="17" />
+		<field name="layout_marginHorizontal" since="26" />
+		<field name="layout_marginLeft" />
+		<field name="layout_marginRight" />
+		<field name="layout_marginStart" since="17" />
+		<field name="layout_marginTop" />
+		<field name="layout_marginVertical" since="26" />
+		<field name="layout_row" since="14" />
+		<field name="layout_rowSpan" since="14" />
+		<field name="layout_rowWeight" since="21" />
+		<field name="layout_scale" />
+		<field name="layout_span" />
+		<field name="layout_toEndOf" since="17" />
+		<field name="layout_toLeftOf" />
+		<field name="layout_toRightOf" />
+		<field name="layout_toStartOf" since="17" />
+		<field name="layout_weight" />
+		<field name="layout_width" />
+		<field name="layout_x" />
+		<field name="layout_y" />
+		<field name="left" />
+		<field name="letterSpacing" since="21" />
+		<field name="level" since="24" />
+		<field name="lineHeight" since="28" />
+		<field name="lineSpacingExtra" />
+		<field name="lineSpacingMultiplier" />
+		<field name="lines" />
+		<field name="linksClickable" />
+		<field name="listChoiceBackgroundIndicator" since="11" />
+		<field name="listChoiceIndicatorMultiple" />
+		<field name="listChoiceIndicatorSingle" />
+		<field name="listDivider" />
+		<field name="listDividerAlertDialog" since="11" />
+		<field name="listMenuViewStyle" since="24" />
+		<field name="listPopupWindowStyle" since="11" />
+		<field name="listPreferredItemHeight" />
+		<field name="listPreferredItemHeightLarge" since="14" />
+		<field name="listPreferredItemHeightSmall" since="14" />
+		<field name="listPreferredItemPaddingEnd" since="17" />
+		<field name="listPreferredItemPaddingLeft" since="14" />
+		<field name="listPreferredItemPaddingRight" since="14" />
+		<field name="listPreferredItemPaddingStart" since="17" />
+		<field name="listSelector" />
+		<field name="listSeparatorTextViewStyle" />
+		<field name="listViewStyle" />
+		<field name="listViewWhiteStyle" />
+		<field name="lockTaskMode" since="23" />
+		<field name="logo" since="11" />
+		<field name="logoDescription" since="23" />
+		<field name="longClickable" />
+		<field name="loopViews" since="11" />
+		<field name="manageSpaceActivity" />
+		<field name="mapViewStyle" />
+		<field name="marqueeRepeatLimit" since="2" />
+		<field name="matchOrder" since="21" />
+		<field name="max" />
+		<field name="maxAspectRatio" since="26" />
+		<field name="maxButtonHeight" since="24" />
+		<field name="maxDate" since="11" />
+		<field name="maxEms" />
+		<field name="maxHeight" />
+		<field name="maxItemsPerRow" />
+		<field name="maxLength" />
+		<field name="maxLevel" />
+		<field name="maxLines" />
+		<field name="maxLongVersionCode" since="28" />
+		<field name="maxRecents" since="21" />
+		<field name="maxResizeHeight" since="31" />
+		<field name="maxResizeWidth" since="31" />
+		<field name="maxRows" />
+		<field name="maxSdkVersion" since="4" />
+		<field name="maxWidth" />
+		<field name="maximumAngle" since="21" />
+		<field name="measureAllChildren" />
+		<field name="measureWithLargestChild" since="11" />
+		<field name="mediaRouteButtonStyle" since="16" />
+		<field name="mediaRouteTypes" since="16" />
+		<field name="memtagMode" since="31" />
+		<field name="menuCategory" />
+		<field name="mimeGroup" since="30" />
+		<field name="mimeType" />
+		<field name="min" since="26" />
+		<field name="minAspectRatio" since="29" />
+		<field name="minDate" since="11" />
+		<field name="minEms" />
+		<field name="minHeight" />
+		<field name="minLevel" />
+		<field name="minLines" />
+		<field name="minResizeHeight" since="14" />
+		<field name="minResizeWidth" since="14" />
+		<field name="minSdkVersion" />
+		<field name="minWidth" />
+		<field name="minimumHorizontalAngle" since="21" />
+		<field name="minimumVerticalAngle" since="21" />
+		<field name="mipMap" since="18" />
+		<field name="mirrorForRtl" since="18" />
+		<field name="mode" />
+		<field name="moreIcon" />
+		<field name="multiArch" since="21" />
+		<field name="multiprocess" />
+		<field name="name" />
+		<field name="nativeHeapZeroInitialized" since="31" />
+		<field name="navigationBarColor" since="21" />
+		<field name="navigationBarDividerColor" since="27" />
+		<field name="navigationContentDescription" since="21" />
+		<field name="navigationIcon" since="21" />
+		<field name="navigationMode" since="11" />
+		<field name="negativeButtonText" />
+		<field name="nestedScrollingEnabled" since="21" />
+		<field name="networkSecurityConfig" since="24" />
+		<field name="nextClusterForward" since="26" />
+		<field name="nextFocusDown" />
+		<field name="nextFocusForward" since="11" />
+		<field name="nextFocusLeft" />
+		<field name="nextFocusRight" />
+		<field name="nextFocusUp" />
+		<field name="noHistory" since="3" />
+		<field name="nonInteractiveUiTimeout" since="29" />
+		<field name="normalScreens" since="4" />
+		<field name="notificationTimeout" since="14" />
+		<field name="numColumns" />
+		<field name="numStars" />
+		<field name="numberPickerStyle" since="24" />
+		<field name="numbersBackgroundColor" since="21" />
+		<field name="numbersInnerTextColor" since="23" />
+		<field name="numbersSelectorColor" since="21" />
+		<field name="numbersTextColor" since="21" />
+		<field name="numeric" deprecated="15" />
+		<field name="numericModifiers" since="26" />
+		<field name="numericShortcut" />
+		<field name="offset" since="24" />
+		<field name="onClick" since="4" deprecated="31" />
+		<field name="oneshot" />
+		<field name="opacity" since="11" />
+		<field name="opticalInsetBottom" since="29" />
+		<field name="opticalInsetLeft" since="29" />
+		<field name="opticalInsetRight" since="29" />
+		<field name="opticalInsetTop" since="29" />
+		<field name="order" />
+		<field name="orderInCategory" />
+		<field name="ordering" since="11" />
+		<field name="orderingFromXml" />
+		<field name="orientation" />
+		<field name="outAnimation" />
+		<field name="outlineAmbientShadowColor" since="28" />
+		<field name="outlineProvider" since="21" />
+		<field name="outlineSpotShadowColor" since="28" />
+		<field name="overScrollFooter" since="9" />
+		<field name="overScrollHeader" since="9" />
+		<field name="overScrollMode" since="9" />
+		<field name="overlapAnchor" since="21" />
+		<field name="overridesImplicitlyEnabledSubtype" since="14" />
+		<field name="packageNames" since="14" />
+		<field name="packageType" since="29" />
+		<field name="padding" />
+		<field name="paddingBottom" />
+		<field name="paddingEnd" since="17" />
+		<field name="paddingHorizontal" since="26" />
+		<field name="paddingLeft" />
+		<field name="paddingMode" since="21" />
+		<field name="paddingRight" />
+		<field name="paddingStart" since="17" />
+		<field name="paddingTop" />
+		<field name="paddingVertical" since="26" />
+		<field name="panelBackground" />
+		<field name="panelColorBackground" />
+		<field name="panelColorForeground" />
+		<field name="panelFullBackground" />
+		<field name="panelTextAppearance" />
+		<field name="parentActivityName" since="16" />
+		<field name="password" deprecated="15" />
+		<field name="passwordsActivity" since="31" />
+		<field name="path" />
+		<field name="pathAdvancedPattern" since="31" />
+		<field name="pathData" since="21" />
+		<field name="pathPattern" />
+		<field name="pathPrefix" />
+		<field name="pathSuffix" since="31" />
+		<field name="patternPathData" since="21" />
+		<field name="permission" />
+		<field name="permissionFlags" since="17" />
+		<field name="permissionGroup" />
+		<field name="permissionGroupFlags" since="17" />
+		<field name="persistableMode" since="21" />
+		<field name="persistent" />
+		<field name="persistentDrawingCache" />
+		<field name="persistentWhenFeatureAvailable" since="26" />
+		<field name="phoneNumber" deprecated="15" />
+		<field name="pivotX" />
+		<field name="pivotY" />
+		<field name="pointerIcon" since="24" />
+		<field name="popupAnimationStyle" since="9" />
+		<field name="popupBackground" />
+		<field name="popupCharacters" since="3" deprecated="29" />
+		<field name="popupElevation" since="21" />
+		<field name="popupEnterTransition" since="24" />
+		<field name="popupExitTransition" since="24" />
+		<field name="popupKeyboard" since="3" deprecated="29" />
+		<field name="popupLayout" since="3" deprecated="29" />
+		<field name="popupMenuStyle" since="11" />
+		<field name="popupTheme" since="21" />
+		<field name="popupWindowStyle" />
+		<field name="port" />
+		<field name="positiveButtonText" />
+		<field name="preferMinimalPostProcessing" since="30" />
+		<field name="preferenceCategoryStyle" />
+		<field name="preferenceFragmentStyle" since="24" />
+		<field name="preferenceInformationStyle" />
+		<field name="preferenceLayoutChild" />
+		<field name="preferenceScreenStyle" />
+		<field name="preferenceStyle" />
+		<field name="presentationTheme" since="17" />
+		<field name="preserveLegacyExternalStorage" since="30" />
+		<field name="previewImage" since="11" />
+		<field name="previewLayout" since="31" />
+		<field name="primaryContentAlpha" since="26" />
+		<field name="priority" />
+		<field name="privateImeOptions" since="3" />
+		<field name="process" />
+		<field name="progress" />
+		<field name="progressBackgroundTint" since="21" />
+		<field name="progressBackgroundTintMode" since="21" />
+		<field name="progressBarPadding" since="11" />
+		<field name="progressBarStyle" />
+		<field name="progressBarStyleHorizontal" />
+		<field name="progressBarStyleInverse" since="4" />
+		<field name="progressBarStyleLarge" />
+		<field name="progressBarStyleLargeInverse" since="4" />
+		<field name="progressBarStyleSmall" />
+		<field name="progressBarStyleSmallInverse" since="4" />
+		<field name="progressBarStyleSmallTitle" />
+		<field name="progressDrawable" />
+		<field name="progressTint" since="21" />
+		<field name="progressTintMode" since="21" />
+		<field name="prompt" />
+		<field name="propertyName" since="11" />
+		<field name="propertyXName" since="21" />
+		<field name="propertyYName" since="21" />
+		<field name="protectionLevel" />
+		<field name="publicKey" since="14" />
+		<field name="queryActionMsg" />
+		<field name="queryAfterZeroResults" since="4" />
+		<field name="queryBackground" since="21" />
+		<field name="queryHint" since="11" />
+		<field name="quickContactBadgeStyleSmallWindowLarge" since="6" />
+		<field name="quickContactBadgeStyleSmallWindowMedium" since="6" />
+		<field name="quickContactBadgeStyleSmallWindowSmall" since="6" />
+		<field name="quickContactBadgeStyleWindowLarge" since="6" />
+		<field name="quickContactBadgeStyleWindowMedium" since="6" />
+		<field name="quickContactBadgeStyleWindowSmall" since="6" />
+		<field name="radioButtonStyle" />
+		<field name="radius" />
+		<field name="rating" />
+		<field name="ratingBarStyle" />
+		<field name="ratingBarStyleIndicator" />
+		<field name="ratingBarStyleSmall" />
+		<field name="readPermission" />
+		<field name="recognitionService" since="21" />
+		<field name="recreateOnConfigChanges" since="26" />
+		<field name="recycleEnabled" since="26" />
+		<field name="relinquishTaskIdentity" since="21" />
+		<field name="reparent" since="21" />
+		<field name="reparentWithOverlay" since="21" />
+		<field name="repeatCount" />
+		<field name="repeatMode" />
+		<field name="reqFiveWayNav" since="3" />
+		<field name="reqHardKeyboard" since="3" />
+		<field name="reqKeyboardType" since="3" />
+		<field name="reqNavigation" since="3" />
+		<field name="reqTouchScreen" since="3" />
+		<field name="requestLegacyExternalStorage" since="29" />
+		<field name="requestRawExternalStorageAccess" since="31" />
+		<field name="requireDeviceScreenOn" since="31" />
+		<field name="requireDeviceUnlock" since="19" />
+		<field name="required" since="5" />
+		<field name="requiredAccountType" since="18" />
+		<field name="requiredFeature" since="26" />
+		<field name="requiredForAllUsers" since="18" />
+		<field name="requiredNotFeature" since="26" />
+		<field name="requiresFadingEdge" since="14" />
+		<field name="requiresSmallestWidthDp" since="13" />
+		<field name="resizeClip" since="22" />
+		<field name="resizeMode" since="12" />
+		<field name="resizeable" since="4" />
+		<field name="resizeableActivity" since="24" />
+		<field name="resource" />
+		<field name="resourcesMap" since="30" />
+		<field name="restoreAnyVersion" since="8" />
+		<field name="restoreNeedsApplication" since="5" deprecated="15" />
+		<field name="restrictedAccountType" since="18" />
+		<field name="restrictionType" since="21" />
+		<field name="resumeWhilePausing" since="21" />
+		<field name="reversible" since="21" />
+		<field name="revisionCode" since="22" />
+		<field name="right" />
+		<field name="ringtonePreferenceStyle" />
+		<field name="ringtoneType" />
+		<field name="rollbackDataPolicy" since="31" />
+		<field name="rotation" since="11" />
+		<field name="rotationAnimation" since="26" />
+		<field name="rotationX" since="11" />
+		<field name="rotationY" since="11" />
+		<field name="roundIcon" since="25" />
+		<field name="rowCount" since="14" />
+		<field name="rowDelay" />
+		<field name="rowEdgeFlags" since="3" deprecated="29" />
+		<field name="rowHeight" />
+		<field name="rowOrderPreserved" since="14" />
+		<field name="saveEnabled" />
+		<field name="scaleGravity" />
+		<field name="scaleHeight" />
+		<field name="scaleType" />
+		<field name="scaleWidth" />
+		<field name="scaleX" since="11" />
+		<field name="scaleY" since="11" />
+		<field name="scheme" />
+		<field name="screenDensity" since="9" />
+		<field name="screenOrientation" />
+		<field name="screenReaderFocusable" since="28" />
+		<field name="screenSize" since="9" />
+		<field name="scrollHorizontally" />
+		<field name="scrollIndicators" since="23" />
+		<field name="scrollViewStyle" />
+		<field name="scrollX" />
+		<field name="scrollY" />
+		<field name="scrollbarAlwaysDrawHorizontalTrack" />
+		<field name="scrollbarAlwaysDrawVerticalTrack" />
+		<field name="scrollbarDefaultDelayBeforeFade" since="5" />
+		<field name="scrollbarFadeDuration" since="5" />
+		<field name="scrollbarSize" />
+		<field name="scrollbarStyle" />
+		<field name="scrollbarThumbHorizontal" />
+		<field name="scrollbarThumbVertical" />
+		<field name="scrollbarTrackHorizontal" />
+		<field name="scrollbarTrackVertical" />
+		<field name="scrollbars" />
+		<field name="scrollingCache" />
+		<field name="searchButtonText" deprecated="15" />
+		<field name="searchHintIcon" since="22" />
+		<field name="searchIcon" since="21" />
+		<field name="searchMode" />
+		<field name="searchSettingsDescription" since="4" />
+		<field name="searchSuggestAuthority" />
+		<field name="searchSuggestIntentAction" />
+		<field name="searchSuggestIntentData" />
+		<field name="searchSuggestPath" />
+		<field name="searchSuggestSelection" />
+		<field name="searchSuggestThreshold" since="4" />
+		<field name="searchViewStyle" since="21" />
+		<field name="secondaryContentAlpha" since="26" />
+		<field name="secondaryProgress" />
+		<field name="secondaryProgressTint" since="21" />
+		<field name="secondaryProgressTintMode" since="21" />
+		<field name="secureElementName" since="29" />
+		<field name="seekBarStyle" />
+		<field name="segmentedButtonStyle" since="11" />
+		<field name="selectAllOnFocus" />
+		<field name="selectable" />
+		<field name="selectableAsDefault" since="31" />
+		<field name="selectableItemBackground" since="11" />
+		<field name="selectableItemBackgroundBorderless" since="21" />
+		<field name="selectedDateVerticalBar" since="11" deprecated="23" />
+		<field name="selectedWeekBackgroundColor" since="11" deprecated="23" />
+		<field name="selectionDividerHeight" since="29" />
+		<field name="sessionService" since="21" />
+		<field name="settingsActivity" since="3" />
+		<field name="settingsSliceUri" since="29" />
+		<field name="setupActivity" since="21" />
+		<field name="shadowColor" />
+		<field name="shadowDx" />
+		<field name="shadowDy" />
+		<field name="shadowRadius" />
+		<field name="shape" />
+		<field name="shareInterpolator" />
+		<field name="sharedUserId" deprecated="29" />
+		<field name="sharedUserLabel" since="3" deprecated="29" />
+		<field name="shell" since="29" />
+		<field name="shortcutDisabledMessage" since="25" />
+		<field name="shortcutId" since="25" />
+		<field name="shortcutLongLabel" since="25" />
+		<field name="shortcutShortLabel" since="25" />
+		<field name="shouldDisableView" />
+		<field name="shouldUseDefaultUnfoldTransition" since="33" />
+		<field name="showAsAction" since="11" />
+		<field name="showDefault" />
+		<field name="showDividers" since="11" />
+		<field name="showForAllUsers" since="23" />
+		<field name="showInInputMethodPicker" since="31" />
+		<field name="showMetadataInPreview" since="25" />
+		<field name="showOnLockScreen" since="17" deprecated="23" />
+		<field name="showSilent" />
+		<field name="showText" since="21" />
+		<field name="showWeekNumber" since="11" deprecated="23" />
+		<field name="showWhenLocked" since="27" />
+		<field name="shownWeekCount" since="11" deprecated="23" />
+		<field name="shrinkColumns" />
+		<field name="singleLine" deprecated="15" />
+		<field name="singleLineTitle" since="26" />
+		<field name="singleUser" since="17" />
+		<field name="slideEdge" since="21" />
+		<field name="smallIcon" since="5" />
+		<field name="smallScreens" since="4" />
+		<field name="smoothScrollbar" since="3" />
+		<field name="soundEffectsEnabled" />
+		<field name="spacing" />
+		<field name="spinnerDropDownItemStyle" />
+		<field name="spinnerItemStyle" />
+		<field name="spinnerMode" since="11" />
+		<field name="spinnerStyle" />
+		<field name="spinnersShown" since="11" />
+		<field name="splashScreenTheme" since="31" />
+		<field name="splitMotionEvents" since="11" />
+		<field name="splitName" since="26" />
+		<field name="splitTrack" since="21" />
+		<field name="spotShadowAlpha" since="21" />
+		<field name="src" />
+		<field name="ssp" since="19" />
+		<field name="sspAdvancedPattern" since="31" />
+		<field name="sspPattern" since="19" />
+		<field name="sspPrefix" since="19" />
+		<field name="sspSuffix" since="31" />
+		<field name="stackFromBottom" />
+		<field name="stackViewStyle" since="21" />
+		<field name="starStyle" />
+		<field name="start" since="23" />
+		<field name="startColor" />
+		<field name="startDelay" since="19" />
+		<field name="startOffset" />
+		<field name="startX" since="24" />
+		<field name="startY" since="24" />
+		<field name="startYear" deprecated="16" />
+		<field name="stateListAnimator" since="21" />
+		<field name="stateNotNeeded" />
+		<field name="state_above_anchor" />
+		<field name="state_accelerated" since="11" />
+		<field name="state_activated" since="11" />
+		<field name="state_active" />
+		<field name="state_checkable" />
+		<field name="state_checked" />
+		<field name="state_drag_can_accept" since="14" />
+		<field name="state_drag_hovered" since="14" />
+		<field name="state_empty" />
+		<field name="state_enabled" />
+		<field name="state_expanded" />
+		<field name="state_first" />
+		<field name="state_focused" />
+		<field name="state_hovered" since="14" />
+		<field name="state_last" />
+		<field name="state_long_pressable" since="3" deprecated="29" />
+		<field name="state_middle" />
+		<field name="state_multiline" since="11" />
+		<field name="state_pressed" />
+		<field name="state_selected" />
+		<field name="state_single" />
+		<field name="state_window_focused" />
+		<field name="staticWallpaperPreview" since="11" />
+		<field name="statusBarColor" since="21" />
+		<field name="stepSize" />
+		<field name="stopWithTask" since="14" />
+		<field name="streamType" />
+		<field name="stretchColumns" />
+		<field name="stretchMode" />
+		<field name="strokeAlpha" since="21" />
+		<field name="strokeColor" since="21" />
+		<field name="strokeLineCap" since="21" />
+		<field name="strokeLineJoin" since="21" />
+		<field name="strokeMiterLimit" since="21" />
+		<field name="strokeWidth" since="21" />
+		<field name="subMenuArrow" since="24" />
+		<field name="submitBackground" since="21" />
+		<field name="subtitle" since="11" />
+		<field name="subtitleTextAppearance" since="21" />
+		<field name="subtitleTextColor" since="23" />
+		<field name="subtitleTextStyle" since="11" />
+		<field name="subtypeExtraValue" since="14" />
+		<field name="subtypeId" since="17" />
+		<field name="subtypeLocale" since="14" />
+		<field name="suggestActionMsg" />
+		<field name="suggestActionMsgColumn" />
+		<field name="suggestionRowLayout" since="21" />
+		<field name="summary" />
+		<field name="summaryColumn" since="5" />
+		<field name="summaryOff" />
+		<field name="summaryOn" />
+		<field name="supportsAssist" since="23" />
+		<field name="supportsInlineSuggestions" since="30" />
+		<field name="supportsLaunchVoiceAssistFromKeyguard" since="23" />
+		<field name="supportsLocalInteraction" since="24" />
+		<field name="supportsMultipleDisplays" since="29" />
+		<field name="supportsPictureInPicture" since="24" />
+		<field name="supportsRtl" since="17" />
+		<field name="supportsSwitchingToNextInputMethod" since="19" />
+		<field name="supportsUploading" since="5" />
+		<field name="suppressesSpellChecker" since="31" />
+		<field name="switchMinWidth" since="14" />
+		<field name="switchPadding" since="14" />
+		<field name="switchPreferenceStyle" since="14" />
+		<field name="switchStyle" since="21" />
+		<field name="switchTextAppearance" since="14" />
+		<field name="switchTextOff" since="14" />
+		<field name="switchTextOn" since="14" />
+		<field name="syncable" />
+		<field name="tabStripEnabled" since="8" />
+		<field name="tabStripLeft" since="8" />
+		<field name="tabStripRight" since="8" />
+		<field name="tabWidgetStyle" />
+		<field name="tag" />
+		<field name="targetActivity" />
+		<field name="targetCellHeight" since="31" />
+		<field name="targetCellWidth" since="31" />
+		<field name="targetClass" />
+		<field name="targetDescriptions" since="14" deprecated="23" />
+		<field name="targetId" since="19" />
+		<field name="targetName" since="21" />
+		<field name="targetPackage" />
+		<field name="targetProcesses" since="26" />
+		<field name="targetSandboxVersion" since="26" deprecated="29" />
+		<field name="targetSdkVersion" since="4" />
+		<field name="taskAffinity" />
+		<field name="taskCloseEnterAnimation" />
+		<field name="taskCloseExitAnimation" />
+		<field name="taskOpenEnterAnimation" />
+		<field name="taskOpenExitAnimation" />
+		<field name="taskToBackEnterAnimation" />
+		<field name="taskToBackExitAnimation" />
+		<field name="taskToFrontEnterAnimation" />
+		<field name="taskToFrontExitAnimation" />
+		<field name="tension" since="4" />
+		<field name="testOnly" since="4" />
+		<field name="text" />
+		<field name="textAlignment" since="17" />
+		<field name="textAllCaps" since="14" />
+		<field name="textAppearance" />
+		<field name="textAppearanceButton" />
+		<field name="textAppearanceInverse" />
+		<field name="textAppearanceLarge" />
+		<field name="textAppearanceLargeInverse" />
+		<field name="textAppearanceLargePopupMenu" since="11" />
+		<field name="textAppearanceListItem" since="14" />
+		<field name="textAppearanceListItemSecondary" since="21" />
+		<field name="textAppearanceListItemSmall" since="14" />
+		<field name="textAppearanceMedium" />
+		<field name="textAppearanceMediumInverse" />
+		<field name="textAppearancePopupMenuHeader" since="24" />
+		<field name="textAppearanceSearchResultSubtitle" since="5" />
+		<field name="textAppearanceSearchResultTitle" since="5" />
+		<field name="textAppearanceSmall" />
+		<field name="textAppearanceSmallInverse" />
+		<field name="textAppearanceSmallPopupMenu" since="11" />
+		<field name="textCheckMark" />
+		<field name="textCheckMarkInverse" />
+		<field name="textColor" />
+		<field name="textColorAlertDialogListItem" since="11" />
+		<field name="textColorHighlight" />
+		<field name="textColorHighlightInverse" since="11" />
+		<field name="textColorHint" />
+		<field name="textColorHintInverse" />
+		<field name="textColorLink" />
+		<field name="textColorLinkInverse" since="11" />
+		<field name="textColorPrimary" />
+		<field name="textColorPrimaryDisableOnly" />
+		<field name="textColorPrimaryInverse" />
+		<field name="textColorPrimaryInverseDisableOnly" since="4" />
+		<field name="textColorPrimaryInverseNoDisable" />
+		<field name="textColorPrimaryNoDisable" />
+		<field name="textColorSecondary" />
+		<field name="textColorSecondaryInverse" />
+		<field name="textColorSecondaryInverseNoDisable" />
+		<field name="textColorSecondaryNoDisable" />
+		<field name="textColorTertiary" />
+		<field name="textColorTertiaryInverse" />
+		<field name="textCursorDrawable" since="12" />
+		<field name="textDirection" since="17" />
+		<field name="textEditNoPasteWindowLayout" since="11" />
+		<field name="textEditPasteWindowLayout" since="11" />
+		<field name="textEditSideNoPasteWindowLayout" since="11" />
+		<field name="textEditSidePasteWindowLayout" since="11" />
+		<field name="textEditSuggestionItemLayout" since="14" />
+		<field name="textFilterEnabled" />
+		<field name="textFontWeight" since="28" />
+		<field name="textIsSelectable" since="11" />
+		<field name="textLocale" since="29" />
+		<field name="textOff" />
+		<field name="textOn" />
+		<field name="textScaleX" />
+		<field name="textSelectHandle" since="9" />
+		<field name="textSelectHandleLeft" since="9" />
+		<field name="textSelectHandleRight" since="9" />
+		<field name="textSelectHandleWindowStyle" since="9" />
+		<field name="textSize" />
+		<field name="textStyle" />
+		<field name="textSuggestionsWindowStyle" since="14" />
+		<field name="textViewStyle" />
+		<field name="theme" />
+		<field name="thickness" since="3" />
+		<field name="thicknessRatio" />
+		<field name="thumb" />
+		<field name="thumbOffset" />
+		<field name="thumbPosition" since="23" />
+		<field name="thumbTextPadding" since="14" />
+		<field name="thumbTint" since="21" />
+		<field name="thumbTintMode" since="21" />
+		<field name="thumbnail" since="5" />
+		<field name="tickMark" since="24" />
+		<field name="tickMarkTint" since="24" />
+		<field name="tickMarkTintMode" since="24" />
+		<field name="tileMode" />
+		<field name="tileModeX" since="21" />
+		<field name="tileModeY" since="21" />
+		<field name="timePickerDialogTheme" since="21" />
+		<field name="timePickerMode" since="21" />
+		<field name="timePickerStyle" since="21" />
+		<field name="timeZone" since="17" />
+		<field name="tint" />
+		<field name="tintMode" since="21" />
+		<field name="title" />
+		<field name="titleCondensed" />
+		<field name="titleMargin" since="24" />
+		<field name="titleMarginBottom" since="24" />
+		<field name="titleMarginEnd" since="24" />
+		<field name="titleMarginStart" since="24" />
+		<field name="titleMarginTop" since="24" />
+		<field name="titleTextAppearance" since="21" />
+		<field name="titleTextColor" since="23" />
+		<field name="titleTextStyle" since="11" />
+		<field name="toAlpha" />
+		<field name="toDegrees" />
+		<field name="toId" since="21" />
+		<field name="toScene" since="19" />
+		<field name="toXDelta" />
+		<field name="toXScale" />
+		<field name="toYDelta" />
+		<field name="toYScale" />
+		<field name="toolbarStyle" since="21" />
+		<field name="tooltipText" since="26" />
+		<field name="top" />
+		<field name="topBright" />
+		<field name="topDark" />
+		<field name="topLeftRadius" />
+		<field name="topOffset" since="3" />
+		<field name="topRightRadius" />
+		<field name="touchscreenBlocksFocus" since="21" />
+		<field name="track" since="14" />
+		<field name="trackTint" since="23" />
+		<field name="trackTintMode" since="23" />
+		<field name="transcriptMode" />
+		<field name="transformPivotX" since="11" />
+		<field name="transformPivotY" since="11" />
+		<field name="transition" since="19" />
+		<field name="transitionGroup" since="21" />
+		<field name="transitionName" since="21" />
+		<field name="transitionOrdering" since="19" />
+		<field name="transitionVisibilityMode" since="21" />
+		<field name="translateX" since="21" />
+		<field name="translateY" since="21" />
+		<field name="translationX" since="11" />
+		<field name="translationY" since="11" />
+		<field name="translationZ" since="21" />
+		<field name="trimPathEnd" since="21" />
+		<field name="trimPathOffset" since="21" />
+		<field name="trimPathStart" since="21" />
+		<field name="ttcIndex" since="28" />
+		<field name="tunerCount" since="24" />
+		<field name="turnScreenOn" since="27" />
+		<field name="type" />
+		<field name="typeface" />
+		<field name="uiOptions" since="14" />
+		<field name="uncertainGestureColor" since="4" />
+		<field name="unfocusedMonthDateColor" since="11" deprecated="23" />
+		<field name="unselectedAlpha" />
+		<field name="updatePeriodMillis" since="3" />
+		<field name="use32bitAbi" since="24" />
+		<field name="useAppZygote" since="29" />
+		<field name="useDefaultMargins" since="14" />
+		<field name="useEmbeddedDex" since="29" />
+		<field name="useIntrinsicSizeAsMinimum" since="11" />
+		<field name="useLevel" />
+		<field name="userVisible" since="5" />
+		<field name="usesCleartextTraffic" since="23" />
+		<field name="usesPermissionFlags" since="31" />
+		<field name="value" />
+		<field name="valueFrom" since="11" />
+		<field name="valueTo" since="11" />
+		<field name="valueType" since="11" />
+		<field name="variablePadding" />
+		<field name="vendor" since="19" />
+		<field name="version" since="24" />
+		<field name="versionCode" />
+		<field name="versionCodeMajor" since="28" />
+		<field name="versionMajor" since="28" />
+		<field name="versionName" />
+		<field name="verticalCorrection" since="3" deprecated="29" />
+		<field name="verticalDivider" />
+		<field name="verticalGap" since="3" deprecated="29" />
+		<field name="verticalScrollbarPosition" since="11" />
+		<field name="verticalSpacing" />
+		<field name="viewportHeight" since="21" />
+		<field name="viewportWidth" since="21" />
+		<field name="visibility" />
+		<field name="visible" />
+		<field name="visibleToInstantApps" since="26" />
+		<field name="vmSafeMode" since="8" />
+		<field name="voiceIcon" since="21" />
+		<field name="voiceLanguage" since="3" />
+		<field name="voiceLanguageModel" since="3" />
+		<field name="voiceMaxResults" since="3" />
+		<field name="voicePromptText" since="3" />
+		<field name="voiceSearchMode" since="3" />
+		<field name="wallpaperCloseEnterAnimation" since="5" />
+		<field name="wallpaperCloseExitAnimation" since="5" />
+		<field name="wallpaperIntraCloseEnterAnimation" since="5" />
+		<field name="wallpaperIntraCloseExitAnimation" since="5" />
+		<field name="wallpaperIntraOpenEnterAnimation" since="5" />
+		<field name="wallpaperIntraOpenExitAnimation" since="5" />
+		<field name="wallpaperOpenEnterAnimation" since="5" />
+		<field name="wallpaperOpenExitAnimation" since="5" />
+		<field name="webTextViewStyle" since="8" />
+		<field name="webViewStyle" />
+		<field name="weekDayTextAppearance" since="11" />
+		<field name="weekNumberColor" since="11" deprecated="23" />
+		<field name="weekSeparatorLineColor" since="11" deprecated="23" />
+		<field name="weightSum" />
+		<field name="widgetCategory" since="17" />
+		<field name="widgetFeatures" since="28" />
+		<field name="widgetLayout" />
+		<field name="width" />
+		<field name="windowActionBar" since="11" />
+		<field name="windowActionBarOverlay" since="11" />
+		<field name="windowActionModeOverlay" since="11" />
+		<field name="windowActivityTransitions" since="21" />
+		<field name="windowAllowEnterTransitionOverlap" since="21" />
+		<field name="windowAllowReturnTransitionOverlap" since="21" />
+		<field name="windowAnimationStyle" />
+		<field name="windowBackground" />
+		<field name="windowBackgroundBlurRadius" since="31" />
+		<field name="windowBackgroundFallback" since="24" />
+		<field name="windowBlurBehindEnabled" since="31" />
+		<field name="windowBlurBehindRadius" since="31" />
+		<field name="windowClipToOutline" since="21" />
+		<field name="windowCloseOnTouchOutside" since="11" />
+		<field name="windowContentOverlay" />
+		<field name="windowContentTransitionManager" since="21" />
+		<field name="windowContentTransitions" since="21" />
+		<field name="windowDisablePreview" since="3" />
+		<field name="windowDrawsSystemBarBackgrounds" since="21" />
+		<field name="windowElevation" since="21" />
+		<field name="windowEnableSplitTouch" since="11" />
+		<field name="windowEnterAnimation" />
+		<field name="windowEnterTransition" since="21" />
+		<field name="windowExitAnimation" />
+		<field name="windowExitTransition" since="21" />
+		<field name="windowFrame" />
+		<field name="windowFullscreen" />
+		<field name="windowHideAnimation" />
+		<field name="windowIsFloating" />
+		<field name="windowIsTranslucent" />
+		<field name="windowLayoutAffinity" since="31" />
+		<field name="windowLayoutInDisplayCutoutMode" since="27" />
+		<field name="windowLightNavigationBar" since="27" />
+		<field name="windowLightStatusBar" since="23" />
+		<field name="windowMinWidthMajor" since="11" />
+		<field name="windowMinWidthMinor" since="11" />
+		<field name="windowNoDisplay" since="3" />
+		<field name="windowNoTitle" />
+		<field name="windowOverscan" since="18" deprecated="30" />
+		<field name="windowReenterTransition" since="21" />
+		<field name="windowReturnTransition" since="21" />
+		<field name="windowSharedElementEnterTransition" since="21" />
+		<field name="windowSharedElementExitTransition" since="21" />
+		<field name="windowSharedElementReenterTransition" since="21" />
+		<field name="windowSharedElementReturnTransition" since="21" />
+		<field name="windowSharedElementsUseOverlay" since="21" />
+		<field name="windowShowAnimation" />
+		<field name="windowShowWallpaper" since="5" />
+		<field name="windowSoftInputMode" since="3" />
+		<field name="windowSplashScreenAnimatedIcon" since="31" />
+		<field name="windowSplashScreenAnimationDuration" since="31" />
+		<field name="windowSplashScreenBackground" since="31" />
+		<field name="windowSplashScreenBrandingImage" since="31" />
+		<field name="windowSplashScreenIconBackgroundColor" since="31" />
+		<field name="windowSplashscreenContent" since="26" deprecated="31" />
+		<field name="windowSwipeToDismiss" since="20" deprecated="30" />
+		<field name="windowTitleBackgroundStyle" />
+		<field name="windowTitleSize" />
+		<field name="windowTitleStyle" />
+		<field name="windowTransitionBackgroundFadeDuration" since="21" />
+		<field name="windowTranslucentNavigation" since="19" />
+		<field name="windowTranslucentStatus" since="19" />
+		<field name="writePermission" />
+		<field name="x" />
+		<field name="xlargeScreens" since="9" />
+		<field name="y" />
+		<field name="yearListItemTextAppearance" since="21" deprecated="23" />
+		<field name="yearListSelectorColor" since="21" deprecated="23" />
+		<field name="yesNoPreferenceStyle" />
+		<field name="zAdjustment" />
+		<field name="zygotePreloadName" since="29" />
+	</class>
+	<class name="android/R$bool" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/R$color" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="background_dark" />
+		<field name="background_light" />
+		<field name="black" />
+		<field name="darker_gray" />
+		<field name="holo_blue_bright" since="14" />
+		<field name="holo_blue_dark" since="14" />
+		<field name="holo_blue_light" since="14" />
+		<field name="holo_green_dark" since="14" />
+		<field name="holo_green_light" since="14" />
+		<field name="holo_orange_dark" since="14" />
+		<field name="holo_orange_light" since="14" />
+		<field name="holo_purple" since="14" />
+		<field name="holo_red_dark" since="14" />
+		<field name="holo_red_light" since="14" />
+		<field name="primary_text_dark" deprecated="28" />
+		<field name="primary_text_dark_nodisable" deprecated="28" />
+		<field name="primary_text_light" deprecated="28" />
+		<field name="primary_text_light_nodisable" deprecated="28" />
+		<field name="secondary_text_dark" deprecated="28" />
+		<field name="secondary_text_dark_nodisable" deprecated="28" />
+		<field name="secondary_text_light" deprecated="28" />
+		<field name="secondary_text_light_nodisable" deprecated="28" />
+		<field name="system_accent1_0" since="31" />
+		<field name="system_accent1_10" since="31" />
+		<field name="system_accent1_100" since="31" />
+		<field name="system_accent1_1000" since="31" />
+		<field name="system_accent1_200" since="31" />
+		<field name="system_accent1_300" since="31" />
+		<field name="system_accent1_400" since="31" />
+		<field name="system_accent1_50" since="31" />
+		<field name="system_accent1_500" since="31" />
+		<field name="system_accent1_600" since="31" />
+		<field name="system_accent1_700" since="31" />
+		<field name="system_accent1_800" since="31" />
+		<field name="system_accent1_900" since="31" />
+		<field name="system_accent2_0" since="31" />
+		<field name="system_accent2_10" since="31" />
+		<field name="system_accent2_100" since="31" />
+		<field name="system_accent2_1000" since="31" />
+		<field name="system_accent2_200" since="31" />
+		<field name="system_accent2_300" since="31" />
+		<field name="system_accent2_400" since="31" />
+		<field name="system_accent2_50" since="31" />
+		<field name="system_accent2_500" since="31" />
+		<field name="system_accent2_600" since="31" />
+		<field name="system_accent2_700" since="31" />
+		<field name="system_accent2_800" since="31" />
+		<field name="system_accent2_900" since="31" />
+		<field name="system_accent3_0" since="31" />
+		<field name="system_accent3_10" since="31" />
+		<field name="system_accent3_100" since="31" />
+		<field name="system_accent3_1000" since="31" />
+		<field name="system_accent3_200" since="31" />
+		<field name="system_accent3_300" since="31" />
+		<field name="system_accent3_400" since="31" />
+		<field name="system_accent3_50" since="31" />
+		<field name="system_accent3_500" since="31" />
+		<field name="system_accent3_600" since="31" />
+		<field name="system_accent3_700" since="31" />
+		<field name="system_accent3_800" since="31" />
+		<field name="system_accent3_900" since="31" />
+		<field name="system_neutral1_0" since="31" />
+		<field name="system_neutral1_10" since="31" />
+		<field name="system_neutral1_100" since="31" />
+		<field name="system_neutral1_1000" since="31" />
+		<field name="system_neutral1_200" since="31" />
+		<field name="system_neutral1_300" since="31" />
+		<field name="system_neutral1_400" since="31" />
+		<field name="system_neutral1_50" since="31" />
+		<field name="system_neutral1_500" since="31" />
+		<field name="system_neutral1_600" since="31" />
+		<field name="system_neutral1_700" since="31" />
+		<field name="system_neutral1_800" since="31" />
+		<field name="system_neutral1_900" since="31" />
+		<field name="system_neutral2_0" since="31" />
+		<field name="system_neutral2_10" since="31" />
+		<field name="system_neutral2_100" since="31" />
+		<field name="system_neutral2_1000" since="31" />
+		<field name="system_neutral2_200" since="31" />
+		<field name="system_neutral2_300" since="31" />
+		<field name="system_neutral2_400" since="31" />
+		<field name="system_neutral2_50" since="31" />
+		<field name="system_neutral2_500" since="31" />
+		<field name="system_neutral2_600" since="31" />
+		<field name="system_neutral2_700" since="31" />
+		<field name="system_neutral2_800" since="31" />
+		<field name="system_neutral2_900" since="31" />
+		<field name="tab_indicator_text" />
+		<field name="tertiary_text_dark" deprecated="28" />
+		<field name="tertiary_text_light" deprecated="28" />
+		<field name="transparent" />
+		<field name="white" />
+		<field name="widget_edittext_dark" />
+	</class>
+	<class name="android/R$dimen" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="app_icon_size" />
+		<field name="dialog_min_width_major" since="11" />
+		<field name="dialog_min_width_minor" since="11" />
+		<field name="notification_large_icon_height" since="11" />
+		<field name="notification_large_icon_width" since="11" />
+		<field name="system_app_widget_background_radius" since="31" />
+		<field name="system_app_widget_inner_radius" since="31" />
+		<field name="thumbnail_height" />
+		<field name="thumbnail_width" />
+	</class>
+	<class name="android/R$drawable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="alert_dark_frame" />
+		<field name="alert_light_frame" />
+		<field name="arrow_down_float" />
+		<field name="arrow_up_float" />
+		<field name="bottom_bar" />
+		<field name="btn_default" />
+		<field name="btn_default_small" />
+		<field name="btn_dialog" />
+		<field name="btn_dropdown" />
+		<field name="btn_minus" />
+		<field name="btn_plus" />
+		<field name="btn_radio" />
+		<field name="btn_star" />
+		<field name="btn_star_big_off" />
+		<field name="btn_star_big_on" />
+		<field name="button_onoff_indicator_off" />
+		<field name="button_onoff_indicator_on" />
+		<field name="checkbox_off_background" />
+		<field name="checkbox_on_background" />
+		<field name="dark_header" since="3" />
+		<field name="dialog_frame" />
+		<field name="dialog_holo_dark_frame" since="11" />
+		<field name="dialog_holo_light_frame" since="11" />
+		<field name="divider_horizontal_bright" />
+		<field name="divider_horizontal_dark" />
+		<field name="divider_horizontal_dim_dark" />
+		<field name="divider_horizontal_textfield" />
+		<field name="edit_text" />
+		<field name="editbox_background" />
+		<field name="editbox_background_normal" />
+		<field name="editbox_dropdown_dark_frame" />
+		<field name="editbox_dropdown_light_frame" />
+		<field name="gallery_thumb" />
+		<field name="ic_btn_speak_now" since="3" />
+		<field name="ic_delete" />
+		<field name="ic_dialog_alert" />
+		<field name="ic_dialog_dialer" />
+		<field name="ic_dialog_email" />
+		<field name="ic_dialog_info" />
+		<field name="ic_dialog_map" />
+		<field name="ic_input_add" />
+		<field name="ic_input_delete" />
+		<field name="ic_input_get" />
+		<field name="ic_lock_idle_alarm" />
+		<field name="ic_lock_idle_charging" />
+		<field name="ic_lock_idle_lock" />
+		<field name="ic_lock_idle_low_battery" />
+		<field name="ic_lock_lock" />
+		<field name="ic_lock_power_off" />
+		<field name="ic_lock_silent_mode" />
+		<field name="ic_lock_silent_mode_off" />
+		<field name="ic_media_ff" />
+		<field name="ic_media_next" />
+		<field name="ic_media_pause" />
+		<field name="ic_media_play" />
+		<field name="ic_media_previous" />
+		<field name="ic_media_rew" />
+		<field name="ic_menu_add" />
+		<field name="ic_menu_agenda" />
+		<field name="ic_menu_always_landscape_portrait" />
+		<field name="ic_menu_call" />
+		<field name="ic_menu_camera" />
+		<field name="ic_menu_close_clear_cancel" />
+		<field name="ic_menu_compass" />
+		<field name="ic_menu_crop" />
+		<field name="ic_menu_day" />
+		<field name="ic_menu_delete" />
+		<field name="ic_menu_directions" />
+		<field name="ic_menu_edit" />
+		<field name="ic_menu_gallery" />
+		<field name="ic_menu_help" />
+		<field name="ic_menu_info_details" />
+		<field name="ic_menu_manage" />
+		<field name="ic_menu_mapmode" />
+		<field name="ic_menu_month" />
+		<field name="ic_menu_more" />
+		<field name="ic_menu_my_calendar" />
+		<field name="ic_menu_mylocation" />
+		<field name="ic_menu_myplaces" />
+		<field name="ic_menu_preferences" />
+		<field name="ic_menu_recent_history" />
+		<field name="ic_menu_report_image" />
+		<field name="ic_menu_revert" />
+		<field name="ic_menu_rotate" />
+		<field name="ic_menu_save" />
+		<field name="ic_menu_search" />
+		<field name="ic_menu_send" />
+		<field name="ic_menu_set_as" />
+		<field name="ic_menu_share" />
+		<field name="ic_menu_slideshow" />
+		<field name="ic_menu_sort_alphabetically" />
+		<field name="ic_menu_sort_by_size" />
+		<field name="ic_menu_today" />
+		<field name="ic_menu_upload" />
+		<field name="ic_menu_upload_you_tube" />
+		<field name="ic_menu_view" />
+		<field name="ic_menu_week" />
+		<field name="ic_menu_zoom" />
+		<field name="ic_notification_clear_all" />
+		<field name="ic_notification_overlay" />
+		<field name="ic_partial_secure" />
+		<field name="ic_popup_disk_full" />
+		<field name="ic_popup_reminder" />
+		<field name="ic_popup_sync" />
+		<field name="ic_search_category_default" />
+		<field name="ic_secure" />
+		<field name="list_selector_background" />
+		<field name="menu_frame" />
+		<field name="menu_full_frame" />
+		<field name="menuitem_background" />
+		<field name="picture_frame" />
+		<field name="presence_audio_away" since="9" />
+		<field name="presence_audio_busy" since="9" />
+		<field name="presence_audio_online" since="9" />
+		<field name="presence_away" />
+		<field name="presence_busy" />
+		<field name="presence_invisible" />
+		<field name="presence_offline" />
+		<field name="presence_online" />
+		<field name="presence_video_away" since="9" />
+		<field name="presence_video_busy" since="9" />
+		<field name="presence_video_online" since="9" />
+		<field name="progress_horizontal" />
+		<field name="progress_indeterminate_horizontal" />
+		<field name="radiobutton_off_background" />
+		<field name="radiobutton_on_background" />
+		<field name="screen_background_dark" />
+		<field name="screen_background_dark_transparent" since="5" />
+		<field name="screen_background_light" />
+		<field name="screen_background_light_transparent" since="5" />
+		<field name="spinner_background" />
+		<field name="spinner_dropdown_background" />
+		<field name="star_big_off" />
+		<field name="star_big_on" />
+		<field name="star_off" />
+		<field name="star_on" />
+		<field name="stat_notify_call_mute" />
+		<field name="stat_notify_chat" />
+		<field name="stat_notify_error" />
+		<field name="stat_notify_missed_call" />
+		<field name="stat_notify_more" />
+		<field name="stat_notify_sdcard" />
+		<field name="stat_notify_sdcard_prepare" since="5" />
+		<field name="stat_notify_sdcard_usb" />
+		<field name="stat_notify_sync" />
+		<field name="stat_notify_sync_noanim" />
+		<field name="stat_notify_voicemail" />
+		<field name="stat_sys_data_bluetooth" />
+		<field name="stat_sys_download" />
+		<field name="stat_sys_download_done" />
+		<field name="stat_sys_headset" />
+		<field name="stat_sys_phone_call" deprecated="15" />
+		<field name="stat_sys_phone_call_forward" deprecated="15" />
+		<field name="stat_sys_phone_call_on_hold" deprecated="15" />
+		<field name="stat_sys_speakerphone" />
+		<field name="stat_sys_upload" />
+		<field name="stat_sys_upload_done" />
+		<field name="stat_sys_vp_phone_call" since="4" deprecated="15" />
+		<field name="stat_sys_vp_phone_call_on_hold" since="4" deprecated="15" />
+		<field name="stat_sys_warning" />
+		<field name="status_bar_item_app_background" />
+		<field name="status_bar_item_background" />
+		<field name="sym_action_call" />
+		<field name="sym_action_chat" />
+		<field name="sym_action_email" />
+		<field name="sym_call_incoming" />
+		<field name="sym_call_missed" />
+		<field name="sym_call_outgoing" />
+		<field name="sym_contact_card" />
+		<field name="sym_def_app_icon" />
+		<field name="title_bar" />
+		<field name="title_bar_tall" since="3" />
+		<field name="toast_frame" />
+		<field name="zoom_plate" />
+	</class>
+	<class name="android/R$fraction" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/R$id" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="accessibilityActionContextClick" since="23" />
+		<field name="accessibilityActionDragCancel" since="33" />
+		<field name="accessibilityActionDragDrop" since="33" />
+		<field name="accessibilityActionDragStart" since="33" />
+		<field name="accessibilityActionHideTooltip" since="28" />
+		<field name="accessibilityActionImeEnter" since="30" />
+		<field name="accessibilityActionMoveWindow" since="26" />
+		<field name="accessibilityActionPageDown" since="29" />
+		<field name="accessibilityActionPageLeft" since="29" />
+		<field name="accessibilityActionPageRight" since="29" />
+		<field name="accessibilityActionPageUp" since="29" />
+		<field name="accessibilityActionPressAndHold" since="30" />
+		<field name="accessibilityActionScrollDown" since="23" />
+		<field name="accessibilityActionScrollLeft" since="23" />
+		<field name="accessibilityActionScrollRight" since="23" />
+		<field name="accessibilityActionScrollToPosition" since="23" />
+		<field name="accessibilityActionScrollUp" since="23" />
+		<field name="accessibilityActionSetProgress" since="24" />
+		<field name="accessibilityActionShowOnScreen" since="23" />
+		<field name="accessibilityActionShowTooltip" since="28" />
+		<field name="accessibilitySystemActionBack" since="30" />
+		<field name="accessibilitySystemActionHome" since="30" />
+		<field name="accessibilitySystemActionLockScreen" since="30" />
+		<field name="accessibilitySystemActionNotifications" since="30" />
+		<field name="accessibilitySystemActionPowerDialog" since="30" />
+		<field name="accessibilitySystemActionQuickSettings" since="30" />
+		<field name="accessibilitySystemActionRecents" since="30" />
+		<field name="accessibilitySystemActionTakeScreenshot" since="30" />
+		<field name="accessibilitySystemActionToggleSplitScreen" since="30" />
+		<field name="addToDictionary" since="3" />
+		<field name="autofill" since="26" />
+		<field name="background" />
+		<field name="button1" />
+		<field name="button2" />
+		<field name="button3" />
+		<field name="candidatesArea" since="3" />
+		<field name="checkbox" />
+		<field name="closeButton" since="3" />
+		<field name="content" />
+		<field name="copy" since="3" />
+		<field name="copyUrl" since="3" />
+		<field name="custom" since="8" />
+		<field name="cut" since="3" />
+		<field name="edit" />
+		<field name="empty" />
+		<field name="extractArea" since="3" />
+		<field name="hint" />
+		<field name="home" since="11" />
+		<field name="icon" />
+		<field name="icon1" />
+		<field name="icon2" />
+		<field name="icon_frame" since="24" />
+		<field name="input" />
+		<field name="inputArea" since="3" />
+		<field name="inputExtractEditText" since="3" />
+		<field name="keyboardView" since="3" deprecated="29" />
+		<field name="list" />
+		<field name="list_container" since="24" />
+		<field name="mask" since="21" />
+		<field name="message" />
+		<field name="navigationBarBackground" since="21" />
+		<field name="paste" since="3" />
+		<field name="pasteAsPlainText" since="23" />
+		<field name="primary" />
+		<field name="progress" />
+		<field name="redo" since="23" />
+		<field name="replaceText" since="23" />
+		<field name="secondaryProgress" />
+		<field name="selectAll" since="3" />
+		<field name="selectTextMode" since="11" />
+		<field name="selectedIcon" />
+		<field name="shareText" since="23" />
+		<field name="startSelectingText" since="3" />
+		<field name="statusBarBackground" since="21" />
+		<field name="stopSelectingText" since="3" />
+		<field name="summary" />
+		<field name="switchInputMethod" since="3" />
+		<field name="switch_widget" since="24" />
+		<field name="tabcontent" />
+		<field name="tabhost" />
+		<field name="tabs" />
+		<field name="text1" />
+		<field name="text2" />
+		<field name="textAssist" since="26" />
+		<field name="title" />
+		<field name="toggle" />
+		<field name="undo" since="23" />
+		<field name="widget_frame" />
+	</class>
+	<class name="android/R$integer" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="config_longAnimTime" />
+		<field name="config_mediumAnimTime" />
+		<field name="config_shortAnimTime" />
+		<field name="status_bar_notification_info_maxnum" since="14" />
+	</class>
+	<class name="android/R$interpolator" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="accelerate_cubic" />
+		<field name="accelerate_decelerate" />
+		<field name="accelerate_quad" />
+		<field name="accelerate_quint" />
+		<field name="anticipate" />
+		<field name="anticipate_overshoot" />
+		<field name="bounce" />
+		<field name="cycle" />
+		<field name="decelerate_cubic" />
+		<field name="decelerate_quad" />
+		<field name="decelerate_quint" />
+		<field name="fast_out_extra_slow_in" since="28" />
+		<field name="fast_out_linear_in" since="21" />
+		<field name="fast_out_slow_in" since="21" />
+		<field name="linear" />
+		<field name="linear_out_slow_in" since="21" />
+		<field name="overshoot" />
+	</class>
+	<class name="android/R$layout" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="activity_list_item" />
+		<field name="browser_link_context_header" />
+		<field name="expandable_list_content" />
+		<field name="list_content" since="11" />
+		<field name="preference_category" />
+		<field name="select_dialog_item" />
+		<field name="select_dialog_multichoice" />
+		<field name="select_dialog_singlechoice" />
+		<field name="simple_dropdown_item_1line" />
+		<field name="simple_expandable_list_item_1" />
+		<field name="simple_expandable_list_item_2" />
+		<field name="simple_gallery_item" />
+		<field name="simple_list_item_1" />
+		<field name="simple_list_item_2" />
+		<field name="simple_list_item_activated_1" since="11" />
+		<field name="simple_list_item_activated_2" since="11" />
+		<field name="simple_list_item_checked" />
+		<field name="simple_list_item_multiple_choice" />
+		<field name="simple_list_item_single_choice" />
+		<field name="simple_selectable_list_item" since="11" />
+		<field name="simple_spinner_dropdown_item" />
+		<field name="simple_spinner_item" />
+		<field name="test_list_item" />
+		<field name="two_line_list_item" />
+	</class>
+	<class name="android/R$menu" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/R$mipmap" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="sym_def_app_icon" />
+	</class>
+	<class name="android/R$plurals" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/R$raw" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/R$string" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="VideoView_error_button" />
+		<field name="VideoView_error_text_invalid_progressive_playback" since="3" />
+		<field name="VideoView_error_text_unknown" />
+		<field name="VideoView_error_title" />
+		<field name="autofill" since="27" />
+		<field name="cancel" />
+		<field name="copy" />
+		<field name="copyUrl" />
+		<field name="cut" />
+		<field name="defaultMsisdnAlphaTag" />
+		<field name="defaultVoiceMailAlphaTag" />
+		<field name="dialog_alert_title" since="3" />
+		<field name="emptyPhoneNumber" />
+		<field name="fingerprint_icon_content_description" since="23" />
+		<field name="httpErrorBadUrl" />
+		<field name="httpErrorUnsupportedScheme" />
+		<field name="no" deprecated="30" />
+		<field name="ok" />
+		<field name="paste" />
+		<field name="paste_as_plain_text" since="26" />
+		<field name="search_go" />
+		<field name="selectAll" />
+		<field name="selectTextMode" since="11" />
+		<field name="status_bar_notification_info_overflow" since="14" />
+		<field name="unknownName" />
+		<field name="untitled" />
+		<field name="yes" deprecated="30" />
+	</class>
+	<class name="android/R$style" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="Animation" />
+		<field name="Animation_Activity" />
+		<field name="Animation_Dialog" />
+		<field name="Animation_InputMethod" since="5" />
+		<field name="Animation_Toast" />
+		<field name="Animation_Translucent" />
+		<field name="DeviceDefault_ButtonBar" since="14" />
+		<field name="DeviceDefault_ButtonBar_AlertDialog" since="14" />
+		<field name="DeviceDefault_Light_ButtonBar" since="14" />
+		<field name="DeviceDefault_Light_ButtonBar_AlertDialog" since="14" />
+		<field name="DeviceDefault_Light_SegmentedButton" since="14" />
+		<field name="DeviceDefault_SegmentedButton" since="14" />
+		<field name="Holo_ButtonBar" since="11" />
+		<field name="Holo_ButtonBar_AlertDialog" since="11" />
+		<field name="Holo_Light_ButtonBar" since="11" />
+		<field name="Holo_Light_ButtonBar_AlertDialog" since="11" />
+		<field name="Holo_Light_SegmentedButton" since="11" />
+		<field name="Holo_SegmentedButton" since="11" />
+		<field name="MediaButton" />
+		<field name="MediaButton_Ffwd" />
+		<field name="MediaButton_Next" />
+		<field name="MediaButton_Pause" />
+		<field name="MediaButton_Play" />
+		<field name="MediaButton_Previous" />
+		<field name="MediaButton_Rew" />
+		<field name="TextAppearance" />
+		<field name="TextAppearance_DeviceDefault" since="14" />
+		<field name="TextAppearance_DeviceDefault_DialogWindowTitle" since="14" />
+		<field name="TextAppearance_DeviceDefault_Inverse" since="14" />
+		<field name="TextAppearance_DeviceDefault_Large" since="14" />
+		<field name="TextAppearance_DeviceDefault_Large_Inverse" since="14" />
+		<field name="TextAppearance_DeviceDefault_Medium" since="14" />
+		<field name="TextAppearance_DeviceDefault_Medium_Inverse" since="14" />
+		<field name="TextAppearance_DeviceDefault_SearchResult_Subtitle" since="14" />
+		<field name="TextAppearance_DeviceDefault_SearchResult_Title" since="14" />
+		<field name="TextAppearance_DeviceDefault_Small" since="14" />
+		<field name="TextAppearance_DeviceDefault_Small_Inverse" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Menu" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" since="14" deprecated="21" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Title" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" since="14" deprecated="21" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" since="14" deprecated="21" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Title" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" since="14" deprecated="21" />
+		<field name="TextAppearance_DeviceDefault_Widget_Button" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_DropDownHint" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_DropDownItem" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_EditText" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_IconMenu_Item" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu_Large" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu_Small" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_TabWidget" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_TextView" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" since="14" />
+		<field name="TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" since="14" />
+		<field name="TextAppearance_DeviceDefault_WindowTitle" since="14" />
+		<field name="TextAppearance_DialogWindowTitle" />
+		<field name="TextAppearance_Holo" since="13" />
+		<field name="TextAppearance_Holo_DialogWindowTitle" since="13" />
+		<field name="TextAppearance_Holo_Inverse" since="13" />
+		<field name="TextAppearance_Holo_Large" since="13" />
+		<field name="TextAppearance_Holo_Large_Inverse" since="13" />
+		<field name="TextAppearance_Holo_Medium" since="13" />
+		<field name="TextAppearance_Holo_Medium_Inverse" since="13" />
+		<field name="TextAppearance_Holo_SearchResult_Subtitle" since="13" />
+		<field name="TextAppearance_Holo_SearchResult_Title" since="13" />
+		<field name="TextAppearance_Holo_Small" since="13" />
+		<field name="TextAppearance_Holo_Small_Inverse" since="13" />
+		<field name="TextAppearance_Holo_Widget" since="13" />
+		<field name="TextAppearance_Holo_Widget_ActionBar_Menu" since="14" />
+		<field name="TextAppearance_Holo_Widget_ActionBar_Subtitle" since="13" />
+		<field name="TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" since="14" />
+		<field name="TextAppearance_Holo_Widget_ActionBar_Title" since="13" />
+		<field name="TextAppearance_Holo_Widget_ActionBar_Title_Inverse" since="14" />
+		<field name="TextAppearance_Holo_Widget_ActionMode_Subtitle" since="13" />
+		<field name="TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" since="14" />
+		<field name="TextAppearance_Holo_Widget_ActionMode_Title" since="13" />
+		<field name="TextAppearance_Holo_Widget_ActionMode_Title_Inverse" since="14" />
+		<field name="TextAppearance_Holo_Widget_Button" since="13" />
+		<field name="TextAppearance_Holo_Widget_DropDownHint" since="13" />
+		<field name="TextAppearance_Holo_Widget_DropDownItem" since="13" />
+		<field name="TextAppearance_Holo_Widget_EditText" since="13" />
+		<field name="TextAppearance_Holo_Widget_IconMenu_Item" since="13" />
+		<field name="TextAppearance_Holo_Widget_PopupMenu" since="13" />
+		<field name="TextAppearance_Holo_Widget_PopupMenu_Large" since="13" />
+		<field name="TextAppearance_Holo_Widget_PopupMenu_Small" since="13" />
+		<field name="TextAppearance_Holo_Widget_TabWidget" since="13" />
+		<field name="TextAppearance_Holo_Widget_TextView" since="13" />
+		<field name="TextAppearance_Holo_Widget_TextView_PopupMenu" since="13" />
+		<field name="TextAppearance_Holo_Widget_TextView_SpinnerItem" since="13" />
+		<field name="TextAppearance_Holo_WindowTitle" since="13" />
+		<field name="TextAppearance_Inverse" />
+		<field name="TextAppearance_Large" />
+		<field name="TextAppearance_Large_Inverse" />
+		<field name="TextAppearance_Material" since="21" />
+		<field name="TextAppearance_Material_Body1" since="21" />
+		<field name="TextAppearance_Material_Body2" since="21" />
+		<field name="TextAppearance_Material_Button" since="21" />
+		<field name="TextAppearance_Material_Caption" since="21" />
+		<field name="TextAppearance_Material_DialogWindowTitle" since="21" />
+		<field name="TextAppearance_Material_Display1" since="21" />
+		<field name="TextAppearance_Material_Display2" since="21" />
+		<field name="TextAppearance_Material_Display3" since="21" />
+		<field name="TextAppearance_Material_Display4" since="21" />
+		<field name="TextAppearance_Material_Headline" since="21" />
+		<field name="TextAppearance_Material_Inverse" since="21" />
+		<field name="TextAppearance_Material_Large" since="21" />
+		<field name="TextAppearance_Material_Large_Inverse" since="21" />
+		<field name="TextAppearance_Material_Medium" since="21" />
+		<field name="TextAppearance_Material_Medium_Inverse" since="21" />
+		<field name="TextAppearance_Material_Menu" since="21" />
+		<field name="TextAppearance_Material_Notification" since="21" />
+		<field name="TextAppearance_Material_Notification_Emphasis" since="21" />
+		<field name="TextAppearance_Material_Notification_Info" since="21" />
+		<field name="TextAppearance_Material_Notification_Line2" since="21" />
+		<field name="TextAppearance_Material_Notification_Time" since="21" />
+		<field name="TextAppearance_Material_Notification_Title" since="21" />
+		<field name="TextAppearance_Material_SearchResult_Subtitle" since="21" />
+		<field name="TextAppearance_Material_SearchResult_Title" since="21" />
+		<field name="TextAppearance_Material_Small" since="21" />
+		<field name="TextAppearance_Material_Small_Inverse" since="21" />
+		<field name="TextAppearance_Material_Subhead" since="21" />
+		<field name="TextAppearance_Material_Title" since="21" />
+		<field name="TextAppearance_Material_Widget" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionBar_Menu" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionBar_Subtitle" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionBar_Subtitle_Inverse" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionBar_Title" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionBar_Title_Inverse" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionMode_Subtitle" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionMode_Subtitle_Inverse" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionMode_Title" since="21" />
+		<field name="TextAppearance_Material_Widget_ActionMode_Title_Inverse" since="21" />
+		<field name="TextAppearance_Material_Widget_Button" since="21" />
+		<field name="TextAppearance_Material_Widget_Button_Borderless_Colored" since="24" />
+		<field name="TextAppearance_Material_Widget_Button_Colored" since="24" />
+		<field name="TextAppearance_Material_Widget_Button_Inverse" since="23" />
+		<field name="TextAppearance_Material_Widget_DropDownHint" since="21" />
+		<field name="TextAppearance_Material_Widget_DropDownItem" since="21" />
+		<field name="TextAppearance_Material_Widget_EditText" since="21" />
+		<field name="TextAppearance_Material_Widget_IconMenu_Item" since="21" />
+		<field name="TextAppearance_Material_Widget_PopupMenu" since="21" />
+		<field name="TextAppearance_Material_Widget_PopupMenu_Large" since="21" />
+		<field name="TextAppearance_Material_Widget_PopupMenu_Small" since="21" />
+		<field name="TextAppearance_Material_Widget_TabWidget" since="21" />
+		<field name="TextAppearance_Material_Widget_TextView" since="21" />
+		<field name="TextAppearance_Material_Widget_TextView_PopupMenu" since="21" />
+		<field name="TextAppearance_Material_Widget_TextView_SpinnerItem" since="21" />
+		<field name="TextAppearance_Material_Widget_Toolbar_Subtitle" since="21" />
+		<field name="TextAppearance_Material_Widget_Toolbar_Title" since="21" />
+		<field name="TextAppearance_Material_WindowTitle" since="21" />
+		<field name="TextAppearance_Medium" />
+		<field name="TextAppearance_Medium_Inverse" />
+		<field name="TextAppearance_Small" />
+		<field name="TextAppearance_Small_Inverse" />
+		<field name="TextAppearance_StatusBar_EventContent" since="9" />
+		<field name="TextAppearance_StatusBar_EventContent_Title" since="9" />
+		<field name="TextAppearance_StatusBar_Icon" since="9" />
+		<field name="TextAppearance_StatusBar_Title" since="9" />
+		<field name="TextAppearance_SuggestionHighlight" since="14" />
+		<field name="TextAppearance_Theme" />
+		<field name="TextAppearance_Theme_Dialog" />
+		<field name="TextAppearance_Widget" />
+		<field name="TextAppearance_Widget_Button" />
+		<field name="TextAppearance_Widget_DropDownHint" />
+		<field name="TextAppearance_Widget_DropDownItem" />
+		<field name="TextAppearance_Widget_EditText" />
+		<field name="TextAppearance_Widget_IconMenu_Item" />
+		<field name="TextAppearance_Widget_PopupMenu_Large" since="11" />
+		<field name="TextAppearance_Widget_PopupMenu_Small" since="11" />
+		<field name="TextAppearance_Widget_TabWidget" />
+		<field name="TextAppearance_Widget_TextView" />
+		<field name="TextAppearance_Widget_TextView_PopupMenu" />
+		<field name="TextAppearance_Widget_TextView_SpinnerItem" />
+		<field name="TextAppearance_WindowTitle" />
+		<field name="Theme" />
+		<field name="ThemeOverlay" since="21" />
+		<field name="ThemeOverlay_DeviceDefault_Accent_DayNight" since="29" />
+		<field name="ThemeOverlay_Material" since="21" />
+		<field name="ThemeOverlay_Material_ActionBar" since="21" />
+		<field name="ThemeOverlay_Material_Dark" since="21" />
+		<field name="ThemeOverlay_Material_Dark_ActionBar" since="21" />
+		<field name="ThemeOverlay_Material_Dialog" since="23" />
+		<field name="ThemeOverlay_Material_Dialog_Alert" since="23" />
+		<field name="ThemeOverlay_Material_Light" since="21" />
+		<field name="Theme_Black" />
+		<field name="Theme_Black_NoTitleBar" />
+		<field name="Theme_Black_NoTitleBar_Fullscreen" />
+		<field name="Theme_DeviceDefault" since="14" />
+		<field name="Theme_DeviceDefault_DayNight" since="29" />
+		<field name="Theme_DeviceDefault_Dialog" since="14" />
+		<field name="Theme_DeviceDefault_DialogWhenLarge" since="14" />
+		<field name="Theme_DeviceDefault_DialogWhenLarge_NoActionBar" since="14" />
+		<field name="Theme_DeviceDefault_Dialog_Alert" since="22" />
+		<field name="Theme_DeviceDefault_Dialog_MinWidth" since="14" />
+		<field name="Theme_DeviceDefault_Dialog_NoActionBar" since="14" />
+		<field name="Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" since="14" />
+		<field name="Theme_DeviceDefault_InputMethod" since="14" />
+		<field name="Theme_DeviceDefault_Light" since="14" />
+		<field name="Theme_DeviceDefault_Light_DarkActionBar" since="14" />
+		<field name="Theme_DeviceDefault_Light_Dialog" since="14" />
+		<field name="Theme_DeviceDefault_Light_DialogWhenLarge" since="14" />
+		<field name="Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" since="14" />
+		<field name="Theme_DeviceDefault_Light_Dialog_Alert" since="22" />
+		<field name="Theme_DeviceDefault_Light_Dialog_MinWidth" since="14" />
+		<field name="Theme_DeviceDefault_Light_Dialog_NoActionBar" since="14" />
+		<field name="Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" since="14" />
+		<field name="Theme_DeviceDefault_Light_NoActionBar" since="14" />
+		<field name="Theme_DeviceDefault_Light_NoActionBar_Fullscreen" since="14" />
+		<field name="Theme_DeviceDefault_Light_NoActionBar_Overscan" since="18" />
+		<field name="Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor" since="19" />
+		<field name="Theme_DeviceDefault_Light_Panel" since="14" />
+		<field name="Theme_DeviceDefault_NoActionBar" since="14" />
+		<field name="Theme_DeviceDefault_NoActionBar_Fullscreen" since="14" />
+		<field name="Theme_DeviceDefault_NoActionBar_Overscan" since="18" />
+		<field name="Theme_DeviceDefault_NoActionBar_TranslucentDecor" since="19" />
+		<field name="Theme_DeviceDefault_Panel" since="14" />
+		<field name="Theme_DeviceDefault_Settings" since="21" />
+		<field name="Theme_DeviceDefault_Wallpaper" since="14" />
+		<field name="Theme_DeviceDefault_Wallpaper_NoTitleBar" since="14" />
+		<field name="Theme_Dialog" />
+		<field name="Theme_Holo" since="11" deprecated="28" />
+		<field name="Theme_Holo_Dialog" since="11" deprecated="28" />
+		<field name="Theme_Holo_DialogWhenLarge" since="11" deprecated="28" />
+		<field name="Theme_Holo_DialogWhenLarge_NoActionBar" since="11" deprecated="28" />
+		<field name="Theme_Holo_Dialog_MinWidth" since="11" deprecated="28" />
+		<field name="Theme_Holo_Dialog_NoActionBar" since="11" deprecated="28" />
+		<field name="Theme_Holo_Dialog_NoActionBar_MinWidth" since="11" deprecated="28" />
+		<field name="Theme_Holo_InputMethod" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light_DarkActionBar" since="14" deprecated="28" />
+		<field name="Theme_Holo_Light_Dialog" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light_DialogWhenLarge" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light_DialogWhenLarge_NoActionBar" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light_Dialog_MinWidth" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light_Dialog_NoActionBar" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light_Dialog_NoActionBar_MinWidth" since="11" deprecated="28" />
+		<field name="Theme_Holo_Light_NoActionBar" since="13" deprecated="28" />
+		<field name="Theme_Holo_Light_NoActionBar_Fullscreen" since="13" deprecated="28" />
+		<field name="Theme_Holo_Light_NoActionBar_Overscan" since="18" deprecated="28" />
+		<field name="Theme_Holo_Light_NoActionBar_TranslucentDecor" since="19" deprecated="28" />
+		<field name="Theme_Holo_Light_Panel" since="11" deprecated="28" />
+		<field name="Theme_Holo_NoActionBar" since="11" deprecated="28" />
+		<field name="Theme_Holo_NoActionBar_Fullscreen" since="11" deprecated="28" />
+		<field name="Theme_Holo_NoActionBar_Overscan" since="18" deprecated="28" />
+		<field name="Theme_Holo_NoActionBar_TranslucentDecor" since="19" deprecated="28" />
+		<field name="Theme_Holo_Panel" since="11" deprecated="28" />
+		<field name="Theme_Holo_Wallpaper" since="11" deprecated="28" />
+		<field name="Theme_Holo_Wallpaper_NoTitleBar" since="11" deprecated="28" />
+		<field name="Theme_InputMethod" since="3" />
+		<field name="Theme_Light" />
+		<field name="Theme_Light_NoTitleBar" />
+		<field name="Theme_Light_NoTitleBar_Fullscreen" />
+		<field name="Theme_Light_Panel" since="3" />
+		<field name="Theme_Light_WallpaperSettings" since="5" />
+		<field name="Theme_Material" since="21" />
+		<field name="Theme_Material_Dialog" since="21" />
+		<field name="Theme_Material_DialogWhenLarge" since="21" />
+		<field name="Theme_Material_DialogWhenLarge_NoActionBar" since="21" />
+		<field name="Theme_Material_Dialog_Alert" since="21" />
+		<field name="Theme_Material_Dialog_MinWidth" since="21" />
+		<field name="Theme_Material_Dialog_NoActionBar" since="21" />
+		<field name="Theme_Material_Dialog_NoActionBar_MinWidth" since="21" />
+		<field name="Theme_Material_Dialog_Presentation" since="21" />
+		<field name="Theme_Material_InputMethod" since="21" />
+		<field name="Theme_Material_Light" since="21" />
+		<field name="Theme_Material_Light_DarkActionBar" since="21" />
+		<field name="Theme_Material_Light_Dialog" since="21" />
+		<field name="Theme_Material_Light_DialogWhenLarge" since="21" />
+		<field name="Theme_Material_Light_DialogWhenLarge_DarkActionBar" since="24" />
+		<field name="Theme_Material_Light_DialogWhenLarge_NoActionBar" since="21" />
+		<field name="Theme_Material_Light_Dialog_Alert" since="21" />
+		<field name="Theme_Material_Light_Dialog_MinWidth" since="21" />
+		<field name="Theme_Material_Light_Dialog_NoActionBar" since="21" />
+		<field name="Theme_Material_Light_Dialog_NoActionBar_MinWidth" since="21" />
+		<field name="Theme_Material_Light_Dialog_Presentation" since="21" />
+		<field name="Theme_Material_Light_LightStatusBar" since="23" />
+		<field name="Theme_Material_Light_NoActionBar" since="21" />
+		<field name="Theme_Material_Light_NoActionBar_Fullscreen" since="21" />
+		<field name="Theme_Material_Light_NoActionBar_Overscan" since="21" deprecated="30" />
+		<field name="Theme_Material_Light_NoActionBar_TranslucentDecor" since="21" />
+		<field name="Theme_Material_Light_Panel" since="21" />
+		<field name="Theme_Material_Light_Voice" since="21" />
+		<field name="Theme_Material_NoActionBar" since="21" />
+		<field name="Theme_Material_NoActionBar_Fullscreen" since="21" />
+		<field name="Theme_Material_NoActionBar_Overscan" since="21" deprecated="30" />
+		<field name="Theme_Material_NoActionBar_TranslucentDecor" since="21" />
+		<field name="Theme_Material_Panel" since="21" />
+		<field name="Theme_Material_Settings" since="21" />
+		<field name="Theme_Material_Voice" since="21" />
+		<field name="Theme_Material_Wallpaper" since="21" />
+		<field name="Theme_Material_Wallpaper_NoTitleBar" since="21" />
+		<field name="Theme_NoDisplay" since="3" />
+		<field name="Theme_NoTitleBar" />
+		<field name="Theme_NoTitleBar_Fullscreen" />
+		<field name="Theme_NoTitleBar_OverlayActionModes" since="11" />
+		<field name="Theme_Panel" since="3" />
+		<field name="Theme_Translucent" />
+		<field name="Theme_Translucent_NoTitleBar" />
+		<field name="Theme_Translucent_NoTitleBar_Fullscreen" />
+		<field name="Theme_Wallpaper" since="5" />
+		<field name="Theme_WallpaperSettings" since="5" />
+		<field name="Theme_Wallpaper_NoTitleBar" since="5" />
+		<field name="Theme_Wallpaper_NoTitleBar_Fullscreen" since="5" />
+		<field name="Theme_WithActionBar" since="11" />
+		<field name="Widget" />
+		<field name="Widget_AbsListView" />
+		<field name="Widget_ActionBar" since="11" />
+		<field name="Widget_ActionBar_TabBar" since="13" />
+		<field name="Widget_ActionBar_TabText" since="13" />
+		<field name="Widget_ActionBar_TabView" since="13" />
+		<field name="Widget_ActionButton" since="11" />
+		<field name="Widget_ActionButton_CloseMode" since="11" />
+		<field name="Widget_ActionButton_Overflow" since="11" />
+		<field name="Widget_AutoCompleteTextView" />
+		<field name="Widget_Button" />
+		<field name="Widget_Button_Inset" />
+		<field name="Widget_Button_Small" />
+		<field name="Widget_Button_Toggle" />
+		<field name="Widget_CalendarView" since="11" />
+		<field name="Widget_CompoundButton" />
+		<field name="Widget_CompoundButton_CheckBox" />
+		<field name="Widget_CompoundButton_RadioButton" />
+		<field name="Widget_CompoundButton_Star" />
+		<field name="Widget_DatePicker" since="11" />
+		<field name="Widget_DeviceDefault" since="14" />
+		<field name="Widget_DeviceDefault_ActionBar" since="14" />
+		<field name="Widget_DeviceDefault_ActionBar_Solid" since="14" />
+		<field name="Widget_DeviceDefault_ActionBar_TabBar" since="14" />
+		<field name="Widget_DeviceDefault_ActionBar_TabText" since="14" />
+		<field name="Widget_DeviceDefault_ActionBar_TabView" since="14" />
+		<field name="Widget_DeviceDefault_ActionButton" since="14" />
+		<field name="Widget_DeviceDefault_ActionButton_CloseMode" since="14" />
+		<field name="Widget_DeviceDefault_ActionButton_Overflow" since="14" />
+		<field name="Widget_DeviceDefault_ActionButton_TextButton" since="14" />
+		<field name="Widget_DeviceDefault_ActionMode" since="14" />
+		<field name="Widget_DeviceDefault_AutoCompleteTextView" since="14" />
+		<field name="Widget_DeviceDefault_Button" since="14" />
+		<field name="Widget_DeviceDefault_Button_Borderless" since="14" />
+		<field name="Widget_DeviceDefault_Button_Borderless_Colored" since="28" />
+		<field name="Widget_DeviceDefault_Button_Borderless_Small" since="14" />
+		<field name="Widget_DeviceDefault_Button_Colored" since="28" />
+		<field name="Widget_DeviceDefault_Button_Inset" since="14" />
+		<field name="Widget_DeviceDefault_Button_Small" since="14" />
+		<field name="Widget_DeviceDefault_Button_Toggle" since="14" />
+		<field name="Widget_DeviceDefault_CalendarView" since="14" />
+		<field name="Widget_DeviceDefault_CheckedTextView" since="17" />
+		<field name="Widget_DeviceDefault_CompoundButton_CheckBox" since="14" />
+		<field name="Widget_DeviceDefault_CompoundButton_RadioButton" since="14" />
+		<field name="Widget_DeviceDefault_CompoundButton_Star" since="14" />
+		<field name="Widget_DeviceDefault_DatePicker" since="14" />
+		<field name="Widget_DeviceDefault_DropDownItem" since="14" />
+		<field name="Widget_DeviceDefault_DropDownItem_Spinner" since="14" />
+		<field name="Widget_DeviceDefault_EditText" since="14" />
+		<field name="Widget_DeviceDefault_ExpandableListView" since="14" />
+		<field name="Widget_DeviceDefault_FastScroll" since="21" />
+		<field name="Widget_DeviceDefault_GridView" since="14" />
+		<field name="Widget_DeviceDefault_HorizontalScrollView" since="14" />
+		<field name="Widget_DeviceDefault_ImageButton" since="14" />
+		<field name="Widget_DeviceDefault_Light" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionBar" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_Solid" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" since="14" deprecated="21" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabBar" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" since="14" deprecated="21" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabText" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" since="14" deprecated="21" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabView" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" since="14" deprecated="21" />
+		<field name="Widget_DeviceDefault_Light_ActionButton" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionButton_CloseMode" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionButton_Overflow" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionMode" since="14" />
+		<field name="Widget_DeviceDefault_Light_ActionMode_Inverse" since="14" deprecated="21" />
+		<field name="Widget_DeviceDefault_Light_AutoCompleteTextView" since="14" />
+		<field name="Widget_DeviceDefault_Light_Button" since="14" />
+		<field name="Widget_DeviceDefault_Light_Button_Borderless_Small" since="14" />
+		<field name="Widget_DeviceDefault_Light_Button_Inset" since="14" />
+		<field name="Widget_DeviceDefault_Light_Button_Small" since="14" />
+		<field name="Widget_DeviceDefault_Light_Button_Toggle" since="14" />
+		<field name="Widget_DeviceDefault_Light_CalendarView" since="14" />
+		<field name="Widget_DeviceDefault_Light_CheckedTextView" since="17" />
+		<field name="Widget_DeviceDefault_Light_CompoundButton_CheckBox" since="14" />
+		<field name="Widget_DeviceDefault_Light_CompoundButton_RadioButton" since="14" />
+		<field name="Widget_DeviceDefault_Light_CompoundButton_Star" since="14" />
+		<field name="Widget_DeviceDefault_Light_DropDownItem" since="14" />
+		<field name="Widget_DeviceDefault_Light_DropDownItem_Spinner" since="14" />
+		<field name="Widget_DeviceDefault_Light_EditText" since="14" />
+		<field name="Widget_DeviceDefault_Light_ExpandableListView" since="14" />
+		<field name="Widget_DeviceDefault_Light_FastScroll" since="21" />
+		<field name="Widget_DeviceDefault_Light_GridView" since="14" />
+		<field name="Widget_DeviceDefault_Light_HorizontalScrollView" since="14" />
+		<field name="Widget_DeviceDefault_Light_ImageButton" since="14" />
+		<field name="Widget_DeviceDefault_Light_ListPopupWindow" since="14" />
+		<field name="Widget_DeviceDefault_Light_ListView" since="14" />
+		<field name="Widget_DeviceDefault_Light_ListView_DropDown" since="14" />
+		<field name="Widget_DeviceDefault_Light_MediaRouteButton" since="16" />
+		<field name="Widget_DeviceDefault_Light_PopupMenu" since="14" />
+		<field name="Widget_DeviceDefault_Light_PopupWindow" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Horizontal" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Inverse" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Large" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Small" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" since="14" />
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Small_Title" since="14" />
+		<field name="Widget_DeviceDefault_Light_RatingBar" since="14" />
+		<field name="Widget_DeviceDefault_Light_RatingBar_Indicator" since="14" />
+		<field name="Widget_DeviceDefault_Light_RatingBar_Small" since="14" />
+		<field name="Widget_DeviceDefault_Light_ScrollView" since="14" />
+		<field name="Widget_DeviceDefault_Light_SeekBar" since="14" />
+		<field name="Widget_DeviceDefault_Light_Spinner" since="14" />
+		<field name="Widget_DeviceDefault_Light_StackView" since="21" />
+		<field name="Widget_DeviceDefault_Light_Tab" since="14" />
+		<field name="Widget_DeviceDefault_Light_TabWidget" since="14" />
+		<field name="Widget_DeviceDefault_Light_TextView" since="14" />
+		<field name="Widget_DeviceDefault_Light_TextView_SpinnerItem" since="14" />
+		<field name="Widget_DeviceDefault_Light_WebTextView" since="14" />
+		<field name="Widget_DeviceDefault_Light_WebView" since="14" />
+		<field name="Widget_DeviceDefault_ListPopupWindow" since="14" />
+		<field name="Widget_DeviceDefault_ListView" since="14" />
+		<field name="Widget_DeviceDefault_ListView_DropDown" since="14" />
+		<field name="Widget_DeviceDefault_MediaRouteButton" since="16" />
+		<field name="Widget_DeviceDefault_PopupMenu" since="14" />
+		<field name="Widget_DeviceDefault_PopupWindow" since="14" />
+		<field name="Widget_DeviceDefault_ProgressBar" since="14" />
+		<field name="Widget_DeviceDefault_ProgressBar_Horizontal" since="14" />
+		<field name="Widget_DeviceDefault_ProgressBar_Large" since="14" />
+		<field name="Widget_DeviceDefault_ProgressBar_Small" since="14" />
+		<field name="Widget_DeviceDefault_ProgressBar_Small_Title" since="14" />
+		<field name="Widget_DeviceDefault_RatingBar" since="14" />
+		<field name="Widget_DeviceDefault_RatingBar_Indicator" since="14" />
+		<field name="Widget_DeviceDefault_RatingBar_Small" since="14" />
+		<field name="Widget_DeviceDefault_ScrollView" since="14" />
+		<field name="Widget_DeviceDefault_SeekBar" since="14" />
+		<field name="Widget_DeviceDefault_Spinner" since="14" />
+		<field name="Widget_DeviceDefault_StackView" since="21" />
+		<field name="Widget_DeviceDefault_Tab" since="14" />
+		<field name="Widget_DeviceDefault_TabWidget" since="14" />
+		<field name="Widget_DeviceDefault_TextView" since="14" />
+		<field name="Widget_DeviceDefault_TextView_SpinnerItem" since="14" />
+		<field name="Widget_DeviceDefault_WebTextView" since="14" />
+		<field name="Widget_DeviceDefault_WebView" since="14" />
+		<field name="Widget_DropDownItem" />
+		<field name="Widget_DropDownItem_Spinner" />
+		<field name="Widget_EditText" />
+		<field name="Widget_ExpandableListView" />
+		<field name="Widget_FastScroll" since="21" />
+		<field name="Widget_FragmentBreadCrumbs" since="11" />
+		<field name="Widget_Gallery" />
+		<field name="Widget_GridView" />
+		<field name="Widget_Holo" since="11" />
+		<field name="Widget_Holo_ActionBar" since="11" />
+		<field name="Widget_Holo_ActionBar_Solid" since="14" />
+		<field name="Widget_Holo_ActionBar_TabBar" since="13" />
+		<field name="Widget_Holo_ActionBar_TabText" since="13" />
+		<field name="Widget_Holo_ActionBar_TabView" since="13" />
+		<field name="Widget_Holo_ActionButton" since="11" />
+		<field name="Widget_Holo_ActionButton_CloseMode" since="11" />
+		<field name="Widget_Holo_ActionButton_Overflow" since="11" />
+		<field name="Widget_Holo_ActionButton_TextButton" since="11" />
+		<field name="Widget_Holo_ActionMode" since="11" />
+		<field name="Widget_Holo_AutoCompleteTextView" since="11" />
+		<field name="Widget_Holo_Button" since="11" />
+		<field name="Widget_Holo_Button_Borderless" since="11" />
+		<field name="Widget_Holo_Button_Borderless_Small" since="14" />
+		<field name="Widget_Holo_Button_Inset" since="11" />
+		<field name="Widget_Holo_Button_Small" since="11" />
+		<field name="Widget_Holo_Button_Toggle" since="11" />
+		<field name="Widget_Holo_CalendarView" since="11" />
+		<field name="Widget_Holo_CheckedTextView" since="17" />
+		<field name="Widget_Holo_CompoundButton_CheckBox" since="11" />
+		<field name="Widget_Holo_CompoundButton_RadioButton" since="11" />
+		<field name="Widget_Holo_CompoundButton_Star" since="11" />
+		<field name="Widget_Holo_DatePicker" since="11" />
+		<field name="Widget_Holo_DropDownItem" since="11" />
+		<field name="Widget_Holo_DropDownItem_Spinner" since="11" />
+		<field name="Widget_Holo_EditText" since="11" />
+		<field name="Widget_Holo_ExpandableListView" since="11" />
+		<field name="Widget_Holo_GridView" since="11" />
+		<field name="Widget_Holo_HorizontalScrollView" since="11" />
+		<field name="Widget_Holo_ImageButton" since="11" />
+		<field name="Widget_Holo_Light" since="11" />
+		<field name="Widget_Holo_Light_ActionBar" since="11" />
+		<field name="Widget_Holo_Light_ActionBar_Solid" since="14" />
+		<field name="Widget_Holo_Light_ActionBar_Solid_Inverse" since="14" />
+		<field name="Widget_Holo_Light_ActionBar_TabBar" since="13" />
+		<field name="Widget_Holo_Light_ActionBar_TabBar_Inverse" since="14" />
+		<field name="Widget_Holo_Light_ActionBar_TabText" since="13" />
+		<field name="Widget_Holo_Light_ActionBar_TabText_Inverse" since="14" />
+		<field name="Widget_Holo_Light_ActionBar_TabView" since="13" />
+		<field name="Widget_Holo_Light_ActionBar_TabView_Inverse" since="14" />
+		<field name="Widget_Holo_Light_ActionButton" since="11" />
+		<field name="Widget_Holo_Light_ActionButton_CloseMode" since="11" />
+		<field name="Widget_Holo_Light_ActionButton_Overflow" since="11" />
+		<field name="Widget_Holo_Light_ActionMode" since="11" />
+		<field name="Widget_Holo_Light_ActionMode_Inverse" since="14" />
+		<field name="Widget_Holo_Light_AutoCompleteTextView" since="11" />
+		<field name="Widget_Holo_Light_Button" since="11" />
+		<field name="Widget_Holo_Light_Button_Borderless_Small" since="14" />
+		<field name="Widget_Holo_Light_Button_Inset" since="11" />
+		<field name="Widget_Holo_Light_Button_Small" since="11" />
+		<field name="Widget_Holo_Light_Button_Toggle" since="11" />
+		<field name="Widget_Holo_Light_CalendarView" since="11" />
+		<field name="Widget_Holo_Light_CheckedTextView" since="17" />
+		<field name="Widget_Holo_Light_CompoundButton_CheckBox" since="11" />
+		<field name="Widget_Holo_Light_CompoundButton_RadioButton" since="11" />
+		<field name="Widget_Holo_Light_CompoundButton_Star" since="11" />
+		<field name="Widget_Holo_Light_DropDownItem" since="11" />
+		<field name="Widget_Holo_Light_DropDownItem_Spinner" since="11" />
+		<field name="Widget_Holo_Light_EditText" since="11" />
+		<field name="Widget_Holo_Light_ExpandableListView" since="11" />
+		<field name="Widget_Holo_Light_GridView" since="11" />
+		<field name="Widget_Holo_Light_HorizontalScrollView" since="11" />
+		<field name="Widget_Holo_Light_ImageButton" since="11" />
+		<field name="Widget_Holo_Light_ListPopupWindow" since="11" />
+		<field name="Widget_Holo_Light_ListView" since="11" />
+		<field name="Widget_Holo_Light_ListView_DropDown" since="11" />
+		<field name="Widget_Holo_Light_MediaRouteButton" since="16" />
+		<field name="Widget_Holo_Light_PopupMenu" since="11" />
+		<field name="Widget_Holo_Light_PopupWindow" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar_Horizontal" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar_Inverse" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar_Large" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar_Large_Inverse" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar_Small" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar_Small_Inverse" since="11" />
+		<field name="Widget_Holo_Light_ProgressBar_Small_Title" since="11" />
+		<field name="Widget_Holo_Light_RatingBar" since="11" />
+		<field name="Widget_Holo_Light_RatingBar_Indicator" since="11" />
+		<field name="Widget_Holo_Light_RatingBar_Small" since="11" />
+		<field name="Widget_Holo_Light_ScrollView" since="11" />
+		<field name="Widget_Holo_Light_SeekBar" since="11" />
+		<field name="Widget_Holo_Light_Spinner" since="11" />
+		<field name="Widget_Holo_Light_Tab" since="11" />
+		<field name="Widget_Holo_Light_TabWidget" since="11" />
+		<field name="Widget_Holo_Light_TextView" since="11" />
+		<field name="Widget_Holo_Light_TextView_SpinnerItem" since="11" />
+		<field name="Widget_Holo_Light_WebTextView" since="11" />
+		<field name="Widget_Holo_Light_WebView" since="11" />
+		<field name="Widget_Holo_ListPopupWindow" since="11" />
+		<field name="Widget_Holo_ListView" since="11" />
+		<field name="Widget_Holo_ListView_DropDown" since="11" />
+		<field name="Widget_Holo_MediaRouteButton" since="16" />
+		<field name="Widget_Holo_PopupMenu" since="11" />
+		<field name="Widget_Holo_PopupWindow" since="11" />
+		<field name="Widget_Holo_ProgressBar" since="11" />
+		<field name="Widget_Holo_ProgressBar_Horizontal" since="11" />
+		<field name="Widget_Holo_ProgressBar_Large" since="11" />
+		<field name="Widget_Holo_ProgressBar_Small" since="11" />
+		<field name="Widget_Holo_ProgressBar_Small_Title" since="11" />
+		<field name="Widget_Holo_RatingBar" since="11" />
+		<field name="Widget_Holo_RatingBar_Indicator" since="11" />
+		<field name="Widget_Holo_RatingBar_Small" since="11" />
+		<field name="Widget_Holo_ScrollView" since="11" />
+		<field name="Widget_Holo_SeekBar" since="11" />
+		<field name="Widget_Holo_Spinner" since="11" />
+		<field name="Widget_Holo_Tab" since="11" />
+		<field name="Widget_Holo_TabWidget" since="11" />
+		<field name="Widget_Holo_TextView" since="11" />
+		<field name="Widget_Holo_TextView_SpinnerItem" since="11" />
+		<field name="Widget_Holo_WebTextView" since="11" />
+		<field name="Widget_Holo_WebView" since="11" />
+		<field name="Widget_ImageButton" />
+		<field name="Widget_ImageWell" />
+		<field name="Widget_KeyboardView" since="3" deprecated="29" />
+		<field name="Widget_ListPopupWindow" since="11" />
+		<field name="Widget_ListView" />
+		<field name="Widget_ListView_DropDown" />
+		<field name="Widget_ListView_Menu" />
+		<field name="Widget_ListView_White" />
+		<field name="Widget_Material" since="21" />
+		<field name="Widget_Material_ActionBar" since="21" />
+		<field name="Widget_Material_ActionBar_Solid" since="21" />
+		<field name="Widget_Material_ActionBar_TabBar" since="21" />
+		<field name="Widget_Material_ActionBar_TabText" since="21" />
+		<field name="Widget_Material_ActionBar_TabView" since="21" />
+		<field name="Widget_Material_ActionButton" since="21" />
+		<field name="Widget_Material_ActionButton_CloseMode" since="21" />
+		<field name="Widget_Material_ActionButton_Overflow" since="21" />
+		<field name="Widget_Material_ActionMode" since="21" />
+		<field name="Widget_Material_AutoCompleteTextView" since="21" />
+		<field name="Widget_Material_Button" since="21" />
+		<field name="Widget_Material_ButtonBar" since="21" />
+		<field name="Widget_Material_ButtonBar_AlertDialog" since="21" />
+		<field name="Widget_Material_Button_Borderless" since="21" />
+		<field name="Widget_Material_Button_Borderless_Colored" since="21" />
+		<field name="Widget_Material_Button_Borderless_Small" since="21" />
+		<field name="Widget_Material_Button_Colored" since="23" />
+		<field name="Widget_Material_Button_Inset" since="21" />
+		<field name="Widget_Material_Button_Small" since="21" />
+		<field name="Widget_Material_Button_Toggle" since="21" />
+		<field name="Widget_Material_CalendarView" since="21" />
+		<field name="Widget_Material_CheckedTextView" since="21" />
+		<field name="Widget_Material_CompoundButton_CheckBox" since="21" />
+		<field name="Widget_Material_CompoundButton_RadioButton" since="21" />
+		<field name="Widget_Material_CompoundButton_Star" since="21" />
+		<field name="Widget_Material_CompoundButton_Switch" since="24" />
+		<field name="Widget_Material_DatePicker" since="21" />
+		<field name="Widget_Material_DropDownItem" since="21" />
+		<field name="Widget_Material_DropDownItem_Spinner" since="21" />
+		<field name="Widget_Material_EditText" since="21" />
+		<field name="Widget_Material_ExpandableListView" since="21" />
+		<field name="Widget_Material_FastScroll" since="21" />
+		<field name="Widget_Material_GridView" since="21" />
+		<field name="Widget_Material_HorizontalScrollView" since="21" />
+		<field name="Widget_Material_ImageButton" since="21" />
+		<field name="Widget_Material_Light" since="21" />
+		<field name="Widget_Material_Light_ActionBar" since="21" />
+		<field name="Widget_Material_Light_ActionBar_Solid" since="21" />
+		<field name="Widget_Material_Light_ActionBar_TabBar" since="21" />
+		<field name="Widget_Material_Light_ActionBar_TabText" since="21" />
+		<field name="Widget_Material_Light_ActionBar_TabView" since="21" />
+		<field name="Widget_Material_Light_ActionButton" since="21" />
+		<field name="Widget_Material_Light_ActionButton_CloseMode" since="21" />
+		<field name="Widget_Material_Light_ActionButton_Overflow" since="21" />
+		<field name="Widget_Material_Light_ActionMode" since="21" />
+		<field name="Widget_Material_Light_AutoCompleteTextView" since="21" />
+		<field name="Widget_Material_Light_Button" since="21" />
+		<field name="Widget_Material_Light_ButtonBar" since="21" />
+		<field name="Widget_Material_Light_ButtonBar_AlertDialog" since="21" />
+		<field name="Widget_Material_Light_Button_Borderless" since="21" />
+		<field name="Widget_Material_Light_Button_Borderless_Colored" since="21" />
+		<field name="Widget_Material_Light_Button_Borderless_Small" since="21" />
+		<field name="Widget_Material_Light_Button_Inset" since="21" />
+		<field name="Widget_Material_Light_Button_Small" since="21" />
+		<field name="Widget_Material_Light_Button_Toggle" since="21" />
+		<field name="Widget_Material_Light_CalendarView" since="21" />
+		<field name="Widget_Material_Light_CheckedTextView" since="21" />
+		<field name="Widget_Material_Light_CompoundButton_CheckBox" since="21" />
+		<field name="Widget_Material_Light_CompoundButton_RadioButton" since="21" />
+		<field name="Widget_Material_Light_CompoundButton_Star" since="21" />
+		<field name="Widget_Material_Light_CompoundButton_Switch" since="24" />
+		<field name="Widget_Material_Light_DatePicker" since="21" />
+		<field name="Widget_Material_Light_DropDownItem" since="21" />
+		<field name="Widget_Material_Light_DropDownItem_Spinner" since="21" />
+		<field name="Widget_Material_Light_EditText" since="21" />
+		<field name="Widget_Material_Light_ExpandableListView" since="21" />
+		<field name="Widget_Material_Light_FastScroll" since="21" />
+		<field name="Widget_Material_Light_GridView" since="21" />
+		<field name="Widget_Material_Light_HorizontalScrollView" since="21" />
+		<field name="Widget_Material_Light_ImageButton" since="21" />
+		<field name="Widget_Material_Light_ListPopupWindow" since="21" />
+		<field name="Widget_Material_Light_ListView" since="21" />
+		<field name="Widget_Material_Light_ListView_DropDown" since="21" />
+		<field name="Widget_Material_Light_MediaRouteButton" since="21" />
+		<field name="Widget_Material_Light_NumberPicker" since="24" />
+		<field name="Widget_Material_Light_PopupMenu" since="21" />
+		<field name="Widget_Material_Light_PopupMenu_Overflow" since="21" />
+		<field name="Widget_Material_Light_PopupWindow" since="21" />
+		<field name="Widget_Material_Light_ProgressBar" since="21" />
+		<field name="Widget_Material_Light_ProgressBar_Horizontal" since="21" />
+		<field name="Widget_Material_Light_ProgressBar_Inverse" since="21" />
+		<field name="Widget_Material_Light_ProgressBar_Large" since="21" />
+		<field name="Widget_Material_Light_ProgressBar_Large_Inverse" since="21" />
+		<field name="Widget_Material_Light_ProgressBar_Small" since="21" />
+		<field name="Widget_Material_Light_ProgressBar_Small_Inverse" since="21" />
+		<field name="Widget_Material_Light_ProgressBar_Small_Title" since="21" />
+		<field name="Widget_Material_Light_RatingBar" since="21" />
+		<field name="Widget_Material_Light_RatingBar_Indicator" since="21" />
+		<field name="Widget_Material_Light_RatingBar_Small" since="21" />
+		<field name="Widget_Material_Light_ScrollView" since="21" />
+		<field name="Widget_Material_Light_SearchView" since="21" />
+		<field name="Widget_Material_Light_SeekBar" since="21" />
+		<field name="Widget_Material_Light_SegmentedButton" since="21" />
+		<field name="Widget_Material_Light_Spinner" since="21" />
+		<field name="Widget_Material_Light_Spinner_Underlined" since="21" />
+		<field name="Widget_Material_Light_StackView" since="21" />
+		<field name="Widget_Material_Light_Tab" since="21" />
+		<field name="Widget_Material_Light_TabWidget" since="21" />
+		<field name="Widget_Material_Light_TextView" since="21" />
+		<field name="Widget_Material_Light_TextView_SpinnerItem" since="21" />
+		<field name="Widget_Material_Light_TimePicker" since="21" />
+		<field name="Widget_Material_Light_WebTextView" since="21" />
+		<field name="Widget_Material_Light_WebView" since="21" />
+		<field name="Widget_Material_ListPopupWindow" since="21" />
+		<field name="Widget_Material_ListView" since="21" />
+		<field name="Widget_Material_ListView_DropDown" since="21" />
+		<field name="Widget_Material_MediaRouteButton" since="21" />
+		<field name="Widget_Material_NumberPicker" since="24" />
+		<field name="Widget_Material_PopupMenu" since="21" />
+		<field name="Widget_Material_PopupMenu_Overflow" since="21" />
+		<field name="Widget_Material_PopupWindow" since="21" />
+		<field name="Widget_Material_ProgressBar" since="21" />
+		<field name="Widget_Material_ProgressBar_Horizontal" since="21" />
+		<field name="Widget_Material_ProgressBar_Large" since="21" />
+		<field name="Widget_Material_ProgressBar_Small" since="21" />
+		<field name="Widget_Material_ProgressBar_Small_Title" since="21" />
+		<field name="Widget_Material_RatingBar" since="21" />
+		<field name="Widget_Material_RatingBar_Indicator" since="21" />
+		<field name="Widget_Material_RatingBar_Small" since="21" />
+		<field name="Widget_Material_ScrollView" since="21" />
+		<field name="Widget_Material_SearchView" since="21" />
+		<field name="Widget_Material_SeekBar" since="21" />
+		<field name="Widget_Material_SeekBar_Discrete" since="24" />
+		<field name="Widget_Material_SegmentedButton" since="21" />
+		<field name="Widget_Material_Spinner" since="21" />
+		<field name="Widget_Material_Spinner_Underlined" since="21" />
+		<field name="Widget_Material_StackView" since="21" />
+		<field name="Widget_Material_Tab" since="21" />
+		<field name="Widget_Material_TabWidget" since="21" />
+		<field name="Widget_Material_TextView" since="21" />
+		<field name="Widget_Material_TextView_SpinnerItem" since="21" />
+		<field name="Widget_Material_TimePicker" since="21" />
+		<field name="Widget_Material_Toolbar" since="21" />
+		<field name="Widget_Material_Toolbar_Button_Navigation" since="21" />
+		<field name="Widget_Material_WebTextView" since="21" />
+		<field name="Widget_Material_WebView" since="21" />
+		<field name="Widget_PopupMenu" since="11" />
+		<field name="Widget_PopupWindow" />
+		<field name="Widget_ProgressBar" />
+		<field name="Widget_ProgressBar_Horizontal" />
+		<field name="Widget_ProgressBar_Inverse" since="4" />
+		<field name="Widget_ProgressBar_Large" />
+		<field name="Widget_ProgressBar_Large_Inverse" since="4" />
+		<field name="Widget_ProgressBar_Small" />
+		<field name="Widget_ProgressBar_Small_Inverse" since="4" />
+		<field name="Widget_RatingBar" />
+		<field name="Widget_ScrollView" />
+		<field name="Widget_SeekBar" />
+		<field name="Widget_Spinner" />
+		<field name="Widget_Spinner_DropDown" since="11" />
+		<field name="Widget_StackView" since="21" />
+		<field name="Widget_TabWidget" />
+		<field name="Widget_TextView" />
+		<field name="Widget_TextView_PopupMenu" />
+		<field name="Widget_TextView_SpinnerItem" />
+		<field name="Widget_Toolbar" since="21" />
+		<field name="Widget_Toolbar_Button_Navigation" since="21" />
+		<field name="Widget_WebView" />
+	</class>
+	<class name="android/R$transition" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="explode" />
+		<field name="fade" />
+		<field name="move" />
+		<field name="no_transition" />
+		<field name="slide_bottom" />
+		<field name="slide_left" />
+		<field name="slide_right" />
+		<field name="slide_top" />
+	</class>
+	<class name="android/R$xml" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityButtonController" since="26">
+		<extends name="java/lang/Object" />
+		<method name="isAccessibilityButtonAvailable()Z" />
+		<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;)V" />
+		<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;Landroid/os/Handler;)V" />
+		<method name="unregisterAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;)V" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAvailabilityChanged(Landroid/accessibilityservice/AccessibilityButtonController;Z)V" />
+		<method name="onClicked(Landroid/accessibilityservice/AccessibilityButtonController;)V" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityGestureEvent" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="gestureIdToString(I)Ljava/lang/String;" since="31" />
+		<method name="getDisplayId()I" />
+		<method name="getGestureId()I" />
+		<method name="getMotionEvents()Ljava/util/List;" since="31" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService" since="4">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="disableSelf()V" since="24" />
+		<method name="dispatchGesture(Landroid/accessibilityservice/GestureDescription;Landroid/accessibilityservice/AccessibilityService$GestureResultCallback;Landroid/os/Handler;)Z" since="24" />
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="21" />
+		<method name="getAccessibilityButtonController()Landroid/accessibilityservice/AccessibilityButtonController;" since="26" />
+		<method name="getAccessibilityButtonController(I)Landroid/accessibilityservice/AccessibilityButtonController;" since="30" />
+		<method name="getFingerprintGestureController()Landroid/accessibilityservice/FingerprintGestureController;" since="26" />
+		<method name="getMagnificationController()Landroid/accessibilityservice/AccessibilityService$MagnificationController;" since="24" />
+		<method name="getRootInActiveWindow()Landroid/view/accessibility/AccessibilityNodeInfo;" since="16" />
+		<method name="getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;" since="16" />
+		<method name="getSoftKeyboardController()Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController;" since="24" />
+		<method name="getSystemActions()Ljava/util/List;" since="30" />
+		<method name="getWindows()Ljava/util/List;" since="21" />
+		<method name="getWindowsOnAllDisplays()Landroid/util/SparseArray;" since="30" />
+		<method name="onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" />
+		<method name="onGesture(I)Z" since="16" deprecated="30" />
+		<method name="onGesture(Landroid/accessibilityservice/AccessibilityGestureEvent;)Z" since="30" />
+		<method name="onInterrupt()V" />
+		<method name="onKeyEvent(Landroid/view/KeyEvent;)Z" since="18" />
+		<method name="onServiceConnected()V" />
+		<method name="onSystemActionsChanged()V" since="30" />
+		<method name="performGlobalAction(I)Z" since="16" />
+		<method name="setAccessibilityFocusAppearance(II)V" since="31" />
+		<method name="setGestureDetectionPassthroughRegion(ILandroid/graphics/Region;)V" since="30" />
+		<method name="setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V" />
+		<method name="setTouchExplorationPassthroughRegion(ILandroid/graphics/Region;)V" since="30" />
+		<method name="takeScreenshot(ILjava/util/concurrent/Executor;Landroid/accessibilityservice/AccessibilityService$TakeScreenshotCallback;)V" since="30" />
+		<field name="ERROR_TAKE_SCREENSHOT_INTERNAL_ERROR" since="30" />
+		<field name="ERROR_TAKE_SCREENSHOT_INTERVAL_TIME_SHORT" since="30" />
+		<field name="ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY" since="30" />
+		<field name="ERROR_TAKE_SCREENSHOT_NO_ACCESSIBILITY_ACCESS" since="30" />
+		<field name="GESTURE_2_FINGER_DOUBLE_TAP" since="30" />
+		<field name="GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD" since="30" />
+		<field name="GESTURE_2_FINGER_SINGLE_TAP" since="30" />
+		<field name="GESTURE_2_FINGER_SWIPE_DOWN" since="30" />
+		<field name="GESTURE_2_FINGER_SWIPE_LEFT" since="30" />
+		<field name="GESTURE_2_FINGER_SWIPE_RIGHT" since="30" />
+		<field name="GESTURE_2_FINGER_SWIPE_UP" since="30" />
+		<field name="GESTURE_2_FINGER_TRIPLE_TAP" since="30" />
+		<field name="GESTURE_2_FINGER_TRIPLE_TAP_AND_HOLD" since="31" />
+		<field name="GESTURE_3_FINGER_DOUBLE_TAP" since="30" />
+		<field name="GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD" since="30" />
+		<field name="GESTURE_3_FINGER_SINGLE_TAP" since="30" />
+		<field name="GESTURE_3_FINGER_SINGLE_TAP_AND_HOLD" since="31" />
+		<field name="GESTURE_3_FINGER_SWIPE_DOWN" since="30" />
+		<field name="GESTURE_3_FINGER_SWIPE_LEFT" since="30" />
+		<field name="GESTURE_3_FINGER_SWIPE_RIGHT" since="30" />
+		<field name="GESTURE_3_FINGER_SWIPE_UP" since="30" />
+		<field name="GESTURE_3_FINGER_TRIPLE_TAP" since="30" />
+		<field name="GESTURE_3_FINGER_TRIPLE_TAP_AND_HOLD" since="31" />
+		<field name="GESTURE_4_FINGER_DOUBLE_TAP" since="30" />
+		<field name="GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD" since="30" />
+		<field name="GESTURE_4_FINGER_SINGLE_TAP" since="30" />
+		<field name="GESTURE_4_FINGER_SWIPE_DOWN" since="30" />
+		<field name="GESTURE_4_FINGER_SWIPE_LEFT" since="30" />
+		<field name="GESTURE_4_FINGER_SWIPE_RIGHT" since="30" />
+		<field name="GESTURE_4_FINGER_SWIPE_UP" since="30" />
+		<field name="GESTURE_4_FINGER_TRIPLE_TAP" since="30" />
+		<field name="GESTURE_DOUBLE_TAP" since="30" />
+		<field name="GESTURE_DOUBLE_TAP_AND_HOLD" since="30" />
+		<field name="GESTURE_SWIPE_DOWN" since="16" />
+		<field name="GESTURE_SWIPE_DOWN_AND_LEFT" since="16" />
+		<field name="GESTURE_SWIPE_DOWN_AND_RIGHT" since="16" />
+		<field name="GESTURE_SWIPE_DOWN_AND_UP" since="16" />
+		<field name="GESTURE_SWIPE_LEFT" since="16" />
+		<field name="GESTURE_SWIPE_LEFT_AND_DOWN" since="16" />
+		<field name="GESTURE_SWIPE_LEFT_AND_RIGHT" since="16" />
+		<field name="GESTURE_SWIPE_LEFT_AND_UP" since="16" />
+		<field name="GESTURE_SWIPE_RIGHT" since="16" />
+		<field name="GESTURE_SWIPE_RIGHT_AND_DOWN" since="16" />
+		<field name="GESTURE_SWIPE_RIGHT_AND_LEFT" since="16" />
+		<field name="GESTURE_SWIPE_RIGHT_AND_UP" since="16" />
+		<field name="GESTURE_SWIPE_UP" since="16" />
+		<field name="GESTURE_SWIPE_UP_AND_DOWN" since="16" />
+		<field name="GESTURE_SWIPE_UP_AND_LEFT" since="16" />
+		<field name="GESTURE_SWIPE_UP_AND_RIGHT" since="16" />
+		<field name="GESTURE_UNKNOWN" since="31" />
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_ALL_APPS" since="31" />
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_BUTTON" since="31" />
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_BUTTON_CHOOSER" since="31" />
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_SHORTCUT" since="31" />
+		<field name="GLOBAL_ACTION_BACK" since="16" />
+		<field name="GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE" since="31" />
+		<field name="GLOBAL_ACTION_HOME" since="16" />
+		<field name="GLOBAL_ACTION_KEYCODE_HEADSETHOOK" since="31" />
+		<field name="GLOBAL_ACTION_LOCK_SCREEN" since="28" />
+		<field name="GLOBAL_ACTION_NOTIFICATIONS" since="16" />
+		<field name="GLOBAL_ACTION_POWER_DIALOG" since="21" />
+		<field name="GLOBAL_ACTION_QUICK_SETTINGS" since="17" />
+		<field name="GLOBAL_ACTION_RECENTS" since="16" />
+		<field name="GLOBAL_ACTION_TAKE_SCREENSHOT" since="28" />
+		<field name="GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN" since="24" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" since="14" />
+		<field name="SHOW_MODE_AUTO" since="24" />
+		<field name="SHOW_MODE_HIDDEN" since="24" />
+		<field name="SHOW_MODE_IGNORE_HARD_KEYBOARD" since="29" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$GestureResultCallback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCancelled(Landroid/accessibilityservice/GestureDescription;)V" />
+		<method name="onCompleted(Landroid/accessibilityservice/GestureDescription;)V" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$MagnificationController" since="24">
+		<extends name="java/lang/Object" />
+		<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;)V" />
+		<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;Landroid/os/Handler;)V" />
+		<method name="getCenterX()F" />
+		<method name="getCenterY()F" />
+		<method name="getMagnificationRegion()Landroid/graphics/Region;" />
+		<method name="getScale()F" />
+		<method name="removeListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;)Z" />
+		<method name="reset(Z)Z" />
+		<method name="setCenter(FFZ)Z" />
+		<method name="setScale(FZ)Z" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onMagnificationChanged(Landroid/accessibilityservice/AccessibilityService$MagnificationController;Landroid/graphics/Region;FFF)V" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$ScreenshotResult" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;" />
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" />
+		<method name="getTimestamp()J" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$SoftKeyboardController" since="24">
+		<extends name="java/lang/Object" />
+		<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;)V" />
+		<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;Landroid/os/Handler;)V" />
+		<method name="getShowMode()I" />
+		<method name="removeOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;)Z" />
+		<method name="setShowMode(I)Z" />
+		<method name="switchToInputMethod(Ljava/lang/String;)Z" since="30" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onShowModeChanged(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController;I)V" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$TakeScreenshotCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onFailure(I)V" />
+		<method name="onSuccess(Landroid/accessibilityservice/AccessibilityService$ScreenshotResult;)V" />
+	</class>
+	<class name="android/accessibilityservice/AccessibilityServiceInfo" since="4">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="capabilityToString(I)Ljava/lang/String;" since="18" />
+		<method name="feedbackTypeToString(I)Ljava/lang/String;" since="14" />
+		<method name="flagToString(I)Ljava/lang/String;" since="14" />
+		<method name="getCanRetrieveWindowContent()Z" since="14" deprecated="18" />
+		<method name="getCapabilities()I" since="18" />
+		<method name="getDescription()Ljava/lang/String;" since="14" deprecated="16" />
+		<method name="getId()Ljava/lang/String;" since="14" />
+		<method name="getInteractiveUiTimeoutMillis()I" since="29" />
+		<method name="getNonInteractiveUiTimeoutMillis()I" since="29" />
+		<method name="getResolveInfo()Landroid/content/pm/ResolveInfo;" since="14" />
+		<method name="getSettingsActivityName()Ljava/lang/String;" since="14" />
+		<method name="isAccessibilityTool()Z" since="31" />
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/String;" since="16" />
+		<method name="loadSummary(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="26" />
+		<method name="setInteractiveUiTimeoutMillis(I)V" since="29" />
+		<method name="setNonInteractiveUiTimeoutMillis(I)V" since="29" />
+		<field name="CAPABILITY_CAN_CONTROL_MAGNIFICATION" since="24" />
+		<field name="CAPABILITY_CAN_PERFORM_GESTURES" since="24" />
+		<field name="CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26" />
+		<field name="CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS" since="18" />
+		<field name="CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES" since="26" />
+		<field name="CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION" since="18" />
+		<field name="CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT" since="18" />
+		<field name="CAPABILITY_CAN_TAKE_SCREENSHOT" since="30" />
+		<field name="CREATOR" />
+		<field name="DEFAULT" />
+		<field name="FEEDBACK_ALL_MASK" since="14" />
+		<field name="FEEDBACK_AUDIBLE" />
+		<field name="FEEDBACK_BRAILLE" since="17" />
+		<field name="FEEDBACK_GENERIC" />
+		<field name="FEEDBACK_HAPTIC" />
+		<field name="FEEDBACK_SPOKEN" />
+		<field name="FEEDBACK_VISUAL" />
+		<field name="FLAG_ENABLE_ACCESSIBILITY_VOLUME" since="26" />
+		<field name="FLAG_INCLUDE_NOT_IMPORTANT_VIEWS" since="16" />
+		<field name="FLAG_REPORT_VIEW_IDS" since="18" />
+		<field name="FLAG_REQUEST_2_FINGER_PASSTHROUGH" since="31" />
+		<field name="FLAG_REQUEST_ACCESSIBILITY_BUTTON" since="26" />
+		<field name="FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26" />
+		<field name="FLAG_REQUEST_FILTER_KEY_EVENTS" since="18" />
+		<field name="FLAG_REQUEST_FINGERPRINT_GESTURES" since="26" />
+		<field name="FLAG_REQUEST_MULTI_FINGER_GESTURES" since="30" />
+		<field name="FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK" since="29" />
+		<field name="FLAG_REQUEST_TOUCH_EXPLORATION_MODE" since="16" />
+		<field name="FLAG_RETRIEVE_INTERACTIVE_WINDOWS" since="21" />
+		<field name="FLAG_SEND_MOTION_EVENTS" since="31" />
+		<field name="FLAG_SERVICE_HANDLES_DOUBLE_TAP" since="30" />
+		<field name="eventTypes" />
+		<field name="feedbackType" />
+		<field name="flags" />
+		<field name="notificationTimeout" />
+		<field name="packageNames" />
+	</class>
+	<class name="android/accessibilityservice/FingerprintGestureController" since="26">
+		<extends name="java/lang/Object" />
+		<method name="isGestureDetectionAvailable()Z" />
+		<method name="registerFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;Landroid/os/Handler;)V" />
+		<method name="unregisterFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;)V" />
+		<field name="FINGERPRINT_GESTURE_SWIPE_DOWN" />
+		<field name="FINGERPRINT_GESTURE_SWIPE_LEFT" />
+		<field name="FINGERPRINT_GESTURE_SWIPE_RIGHT" />
+		<field name="FINGERPRINT_GESTURE_SWIPE_UP" />
+	</class>
+	<class name="android/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGestureDetected(I)V" />
+		<method name="onGestureDetectionAvailabilityChanged(Z)V" />
+	</class>
+	<class name="android/accessibilityservice/GestureDescription" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getDisplayId()I" since="30" />
+		<method name="getMaxGestureDuration()J" />
+		<method name="getMaxStrokeCount()I" />
+		<method name="getStroke(I)Landroid/accessibilityservice/GestureDescription$StrokeDescription;" />
+		<method name="getStrokeCount()I" />
+	</class>
+	<class name="android/accessibilityservice/GestureDescription$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addStroke(Landroid/accessibilityservice/GestureDescription$StrokeDescription;)Landroid/accessibilityservice/GestureDescription$Builder;" />
+		<method name="build()Landroid/accessibilityservice/GestureDescription;" />
+		<method name="setDisplayId(I)Landroid/accessibilityservice/GestureDescription$Builder;" since="30" />
+	</class>
+	<class name="android/accessibilityservice/GestureDescription$StrokeDescription" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;JJ)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;JJZ)V" since="26" />
+		<method name="continueStroke(Landroid/graphics/Path;JJZ)Landroid/accessibilityservice/GestureDescription$StrokeDescription;" since="26" />
+		<method name="getDuration()J" />
+		<method name="getPath()Landroid/graphics/Path;" />
+		<method name="getStartTime()J" />
+		<method name="willContinue()Z" since="26" />
+	</class>
+	<class name="android/accounts/AbstractAccountAuthenticator" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="addAccount(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" />
+		<method name="addAccountFromCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)Landroid/os/Bundle;" since="18" />
+		<method name="confirmCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)Landroid/os/Bundle;" />
+		<method name="editProperties(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;)Landroid/os/Bundle;" />
+		<method name="finishSession(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26" />
+		<method name="getAccountCredentialsForCloning(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;)Landroid/os/Bundle;" since="18" />
+		<method name="getAccountRemovalAllowed(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;)Landroid/os/Bundle;" />
+		<method name="getAuthToken(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" />
+		<method name="getAuthTokenLabel(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getIBinder()Landroid/os/IBinder;" />
+		<method name="hasFeatures(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)Landroid/os/Bundle;" />
+		<method name="isCredentialsUpdateSuggested(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;)Landroid/os/Bundle;" since="26" />
+		<method name="startAddAccountSession(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26" />
+		<method name="startUpdateCredentialsSession(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26" />
+		<method name="updateCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" />
+		<field name="KEY_CUSTOM_TOKEN_EXPIRY" since="23" />
+	</class>
+	<class name="android/accounts/Account" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="CREATOR" />
+		<field name="name" />
+		<field name="type" />
+	</class>
+	<class name="android/accounts/AccountAuthenticatorActivity" since="5" deprecated="30">
+		<extends name="android/app/Activity" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="setAccountAuthenticatorResult(Landroid/os/Bundle;)V" deprecated="30" />
+	</class>
+	<class name="android/accounts/AccountAuthenticatorResponse" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="onError(ILjava/lang/String;)V" />
+		<method name="onRequestContinued()V" />
+		<method name="onResult(Landroid/os/Bundle;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/accounts/AccountManager" since="5">
+		<extends name="java/lang/Object" />
+		<method name="addAccount(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" />
+		<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Z" />
+		<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/Map;)Z" since="26" />
+		<method name="addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z)V" />
+		<method name="addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z[Ljava/lang/String;)V" since="26" />
+		<method name="blockingGetAuthToken(Landroid/accounts/Account;Ljava/lang/String;Z)Ljava/lang/String;" />
+		<method name="clearPassword(Landroid/accounts/Account;)V" />
+		<method name="confirmCredentials(Landroid/accounts/Account;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" />
+		<method name="editProperties(Ljava/lang/String;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" />
+		<method name="finishSession(Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26" />
+		<method name="get(Landroid/content/Context;)Landroid/accounts/AccountManager;" />
+		<method name="getAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;)I" since="26" />
+		<method name="getAccounts()[Landroid/accounts/Account;" />
+		<method name="getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;" since="26" />
+		<method name="getAccountsByType(Ljava/lang/String;)[Landroid/accounts/Account;" />
+		<method name="getAccountsByTypeAndFeatures(Ljava/lang/String;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" />
+		<method name="getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;" since="18" />
+		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" />
+		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="14" />
+		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="15" />
+		<method name="getAuthTokenByFeatures(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/Bundle;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" />
+		<method name="getAuthenticatorTypes()[Landroid/accounts/AuthenticatorDescription;" />
+		<method name="getPackagesAndVisibilityForAccount(Landroid/accounts/Account;)Ljava/util/Map;" since="26" />
+		<method name="getPassword(Landroid/accounts/Account;)Ljava/lang/String;" />
+		<method name="getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;" since="21" />
+		<method name="getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="hasFeatures(Landroid/accounts/Account;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="8" />
+		<method name="invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="isCredentialsUpdateSuggested(Landroid/accounts/Account;Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26" />
+		<method name="newChooseAccountIntent(Landroid/accounts/Account;Ljava/util/ArrayList;[Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;" since="14" deprecated="23" />
+		<method name="newChooseAccountIntent(Landroid/accounts/Account;Ljava/util/List;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;" since="23" />
+		<method name="notifyAccountAuthenticated(Landroid/accounts/Account;)Z" since="23" />
+		<method name="peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="removeAccount(Landroid/accounts/Account;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="22" />
+		<method name="removeAccount(Landroid/accounts/Account;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="22" />
+		<method name="removeAccountExplicitly(Landroid/accounts/Account;)Z" since="22" />
+		<method name="removeOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;)V" />
+		<method name="renameAccount(Landroid/accounts/Account;Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="21" />
+		<method name="setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;I)Z" since="26" />
+		<method name="setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setPassword(Landroid/accounts/Account;Ljava/lang/String;)V" />
+		<method name="setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="startAddAccountSession(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26" />
+		<method name="startUpdateCredentialsSession(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26" />
+		<method name="updateCredentials(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" />
+		<field name="ACTION_ACCOUNT_REMOVED" since="26" />
+		<field name="ACTION_AUTHENTICATOR_INTENT" />
+		<field name="AUTHENTICATOR_ATTRIBUTES_NAME" />
+		<field name="AUTHENTICATOR_META_DATA_NAME" />
+		<field name="ERROR_CODE_BAD_ARGUMENTS" />
+		<field name="ERROR_CODE_BAD_AUTHENTICATION" since="18" />
+		<field name="ERROR_CODE_BAD_REQUEST" />
+		<field name="ERROR_CODE_CANCELED" />
+		<field name="ERROR_CODE_INVALID_RESPONSE" />
+		<field name="ERROR_CODE_NETWORK_ERROR" />
+		<field name="ERROR_CODE_REMOTE_EXCEPTION" />
+		<field name="ERROR_CODE_UNSUPPORTED_OPERATION" />
+		<field name="KEY_ACCOUNTS" />
+		<field name="KEY_ACCOUNT_AUTHENTICATOR_RESPONSE" />
+		<field name="KEY_ACCOUNT_MANAGER_RESPONSE" />
+		<field name="KEY_ACCOUNT_NAME" />
+		<field name="KEY_ACCOUNT_SESSION_BUNDLE" since="26" />
+		<field name="KEY_ACCOUNT_STATUS_TOKEN" since="26" />
+		<field name="KEY_ACCOUNT_TYPE" />
+		<field name="KEY_ANDROID_PACKAGE_NAME" since="14" />
+		<field name="KEY_AUTHENTICATOR_TYPES" />
+		<field name="KEY_AUTHTOKEN" />
+		<field name="KEY_AUTH_FAILED_MESSAGE" />
+		<field name="KEY_AUTH_TOKEN_LABEL" />
+		<field name="KEY_BOOLEAN_RESULT" />
+		<field name="KEY_CALLER_PID" since="11" />
+		<field name="KEY_CALLER_UID" since="11" />
+		<field name="KEY_ERROR_CODE" />
+		<field name="KEY_ERROR_MESSAGE" />
+		<field name="KEY_INTENT" />
+		<field name="KEY_LAST_AUTHENTICATED_TIME" since="23" />
+		<field name="KEY_PASSWORD" />
+		<field name="KEY_USERDATA" />
+		<field name="LOGIN_ACCOUNTS_CHANGED_ACTION" deprecated="26" />
+		<field name="PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE" since="26" />
+		<field name="PACKAGE_NAME_KEY_LEGACY_VISIBLE" since="26" />
+		<field name="VISIBILITY_NOT_VISIBLE" since="26" />
+		<field name="VISIBILITY_UNDEFINED" since="26" />
+		<field name="VISIBILITY_USER_MANAGED_NOT_VISIBLE" since="26" />
+		<field name="VISIBILITY_USER_MANAGED_VISIBLE" since="26" />
+		<field name="VISIBILITY_VISIBLE" since="26" />
+	</class>
+	<class name="android/accounts/AccountManagerCallback" since="5">
+		<extends name="java/lang/Object" />
+		<method name="run(Landroid/accounts/AccountManagerFuture;)V" />
+	</class>
+	<class name="android/accounts/AccountManagerFuture" since="5">
+		<extends name="java/lang/Object" />
+		<method name="cancel(Z)Z" />
+		<method name="getResult()Ljava/lang/Object;" />
+		<method name="getResult(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" />
+		<method name="isCancelled()Z" />
+		<method name="isDone()Z" />
+	</class>
+	<class name="android/accounts/AccountsException" since="5">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/accounts/AuthenticatorDescription" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;IIII)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;IIIIZ)V" since="11" />
+		<method name="newKey(Ljava/lang/String;)Landroid/accounts/AuthenticatorDescription;" />
+		<field name="CREATOR" />
+		<field name="accountPreferencesId" />
+		<field name="customTokens" since="11" />
+		<field name="iconId" />
+		<field name="labelId" />
+		<field name="packageName" />
+		<field name="smallIconId" />
+		<field name="type" />
+	</class>
+	<class name="android/accounts/AuthenticatorException" since="5">
+		<extends name="android/accounts/AccountsException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/accounts/NetworkErrorException" since="5">
+		<extends name="android/accounts/AccountsException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/accounts/OnAccountsUpdateListener" since="5">
+		<extends name="java/lang/Object" />
+		<method name="onAccountsUpdated([Landroid/accounts/Account;)V" />
+	</class>
+	<class name="android/accounts/OperationCanceledException" since="5">
+		<extends name="android/accounts/AccountsException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/animation/Animator" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addListener(Landroid/animation/Animator$AnimatorListener;)V" />
+		<method name="addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V" since="19" />
+		<method name="cancel()V" />
+		<method name="clone()Landroid/animation/Animator;" />
+		<method name="end()V" />
+		<method name="getDuration()J" />
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" since="18" />
+		<method name="getListeners()Ljava/util/ArrayList;" />
+		<method name="getStartDelay()J" />
+		<method name="getTotalDuration()J" since="24" />
+		<method name="isPaused()Z" since="19" />
+		<method name="isRunning()Z" />
+		<method name="isStarted()Z" since="14" />
+		<method name="pause()V" since="19" />
+		<method name="removeAllListeners()V" />
+		<method name="removeListener(Landroid/animation/Animator$AnimatorListener;)V" />
+		<method name="removePauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V" since="19" />
+		<method name="resume()V" since="19" />
+		<method name="setDuration(J)Landroid/animation/Animator;" />
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)V" />
+		<method name="setStartDelay(J)V" />
+		<method name="setTarget(Ljava/lang/Object;)V" />
+		<method name="setupEndValues()V" />
+		<method name="setupStartValues()V" />
+		<method name="start()V" />
+		<field name="DURATION_INFINITE" since="24" />
+	</class>
+	<class name="android/animation/Animator$AnimatorListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onAnimationCancel(Landroid/animation/Animator;)V" />
+		<method name="onAnimationEnd(Landroid/animation/Animator;)V" />
+		<method name="onAnimationEnd(Landroid/animation/Animator;Z)V" since="26" />
+		<method name="onAnimationRepeat(Landroid/animation/Animator;)V" />
+		<method name="onAnimationStart(Landroid/animation/Animator;)V" />
+		<method name="onAnimationStart(Landroid/animation/Animator;Z)V" since="26" />
+	</class>
+	<class name="android/animation/Animator$AnimatorPauseListener" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onAnimationPause(Landroid/animation/Animator;)V" />
+		<method name="onAnimationResume(Landroid/animation/Animator;)V" />
+	</class>
+	<class name="android/animation/AnimatorInflater" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="loadAnimator(Landroid/content/Context;I)Landroid/animation/Animator;" />
+		<method name="loadStateListAnimator(Landroid/content/Context;I)Landroid/animation/StateListAnimator;" since="21" />
+	</class>
+	<class name="android/animation/AnimatorListenerAdapter" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/Animator$AnimatorListener" />
+		<implements name="android/animation/Animator$AnimatorPauseListener" since="19" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/animation/AnimatorSet" since="11">
+		<extends name="android/animation/Animator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Landroid/animation/AnimatorSet;" />
+		<method name="getChildAnimations()Ljava/util/ArrayList;" />
+		<method name="getCurrentPlayTime()J" since="26" />
+		<method name="play(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;" />
+		<method name="playSequentially(Ljava/util/List;)V" />
+		<method name="playSequentially([Landroid/animation/Animator;)V" />
+		<method name="playTogether(Ljava/util/Collection;)V" />
+		<method name="playTogether([Landroid/animation/Animator;)V" />
+		<method name="reverse()V" since="26" />
+		<method name="setCurrentPlayTime(J)V" since="26" />
+		<method name="setDuration(J)Landroid/animation/AnimatorSet;" />
+	</class>
+	<class name="android/animation/AnimatorSet$Builder" since="11">
+		<extends name="java/lang/Object" />
+		<method name="after(J)Landroid/animation/AnimatorSet$Builder;" />
+		<method name="after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;" />
+		<method name="before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;" />
+		<method name="with(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;" />
+	</class>
+	<class name="android/animation/ArgbEvaluator" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TypeEvaluator" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/animation/BidirectionalTypeConverter" since="21">
+		<extends name="android/animation/TypeConverter" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/Class;)V" />
+		<method name="convertBack(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="invert()Landroid/animation/BidirectionalTypeConverter;" />
+	</class>
+	<class name="android/animation/FloatArrayEvaluator" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TypeEvaluator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([F)V" />
+		<method name="evaluate(F[F[F)[F" />
+	</class>
+	<class name="android/animation/FloatEvaluator" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TypeEvaluator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="evaluate(FLjava/lang/Number;Ljava/lang/Number;)Ljava/lang/Float;" since="14" />
+	</class>
+	<class name="android/animation/IntArrayEvaluator" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TypeEvaluator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([I)V" />
+		<method name="evaluate(F[I[I)[I" />
+	</class>
+	<class name="android/animation/IntEvaluator" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TypeEvaluator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="evaluate(FLjava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;" since="14" />
+	</class>
+	<class name="android/animation/Keyframe" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Landroid/animation/Keyframe;" />
+		<method name="getFraction()F" />
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" />
+		<method name="getType()Ljava/lang/Class;" />
+		<method name="getValue()Ljava/lang/Object;" />
+		<method name="hasValue()Z" />
+		<method name="ofFloat(F)Landroid/animation/Keyframe;" />
+		<method name="ofFloat(FF)Landroid/animation/Keyframe;" />
+		<method name="ofInt(F)Landroid/animation/Keyframe;" />
+		<method name="ofInt(FI)Landroid/animation/Keyframe;" />
+		<method name="ofObject(F)Landroid/animation/Keyframe;" />
+		<method name="ofObject(FLjava/lang/Object;)Landroid/animation/Keyframe;" />
+		<method name="setFraction(F)V" />
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)V" />
+		<method name="setValue(Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/animation/LayoutTransition" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addChild(Landroid/view/ViewGroup;Landroid/view/View;)V" />
+		<method name="addTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V" />
+		<method name="disableTransitionType(I)V" since="16" />
+		<method name="enableTransitionType(I)V" since="16" />
+		<method name="getAnimator(I)Landroid/animation/Animator;" />
+		<method name="getDuration(I)J" />
+		<method name="getInterpolator(I)Landroid/animation/TimeInterpolator;" />
+		<method name="getStagger(I)J" />
+		<method name="getStartDelay(I)J" />
+		<method name="getTransitionListeners()Ljava/util/List;" />
+		<method name="hideChild(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="16" />
+		<method name="hideChild(Landroid/view/ViewGroup;Landroid/view/View;I)V" since="16" />
+		<method name="isChangingLayout()Z" />
+		<method name="isRunning()Z" />
+		<method name="isTransitionTypeEnabled(I)Z" since="16" />
+		<method name="removeChild(Landroid/view/ViewGroup;Landroid/view/View;)V" />
+		<method name="removeTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V" />
+		<method name="setAnimateParentHierarchy(Z)V" since="14" />
+		<method name="setAnimator(ILandroid/animation/Animator;)V" />
+		<method name="setDuration(IJ)V" />
+		<method name="setDuration(J)V" />
+		<method name="setInterpolator(ILandroid/animation/TimeInterpolator;)V" />
+		<method name="setStagger(IJ)V" />
+		<method name="setStartDelay(IJ)V" />
+		<method name="showChild(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="16" />
+		<method name="showChild(Landroid/view/ViewGroup;Landroid/view/View;I)V" since="16" />
+		<field name="APPEARING" />
+		<field name="CHANGE_APPEARING" />
+		<field name="CHANGE_DISAPPEARING" />
+		<field name="CHANGING" since="16" />
+		<field name="DISAPPEARING" />
+	</class>
+	<class name="android/animation/LayoutTransition$TransitionListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="endTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V" />
+		<method name="startTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V" />
+	</class>
+	<class name="android/animation/ObjectAnimator" since="11">
+		<extends name="android/animation/ValueAnimator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Landroid/animation/ObjectAnimator;" />
+		<method name="getPropertyName()Ljava/lang/String;" />
+		<method name="getTarget()Ljava/lang/Object;" />
+		<method name="ofArgb(Ljava/lang/Object;Landroid/util/Property;[I)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofArgb(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofFloat(Ljava/lang/Object;Landroid/util/Property;Landroid/util/Property;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofFloat(Ljava/lang/Object;Landroid/util/Property;[F)Landroid/animation/ObjectAnimator;" since="14" />
+		<method name="ofFloat(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;" />
+		<method name="ofInt(Ljava/lang/Object;Landroid/util/Property;Landroid/util/Property;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofInt(Ljava/lang/Object;Landroid/util/Property;[I)Landroid/animation/ObjectAnimator;" since="14" />
+		<method name="ofInt(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofInt(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;" />
+		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;[[F)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;[[I)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="14" />
+		<method name="ofObject(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21" />
+		<method name="ofObject(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" />
+		<method name="ofPropertyValuesHolder(Ljava/lang/Object;[Landroid/animation/PropertyValuesHolder;)Landroid/animation/ObjectAnimator;" />
+		<method name="setAutoCancel(Z)V" since="18" />
+		<method name="setDuration(J)Landroid/animation/ObjectAnimator;" />
+		<method name="setProperty(Landroid/util/Property;)V" since="14" />
+		<method name="setPropertyName(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/animation/PointFEvaluator" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TypeEvaluator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/PointF;)V" />
+		<method name="evaluate(FLandroid/graphics/PointF;Landroid/graphics/PointF;)Landroid/graphics/PointF;" />
+	</class>
+	<class name="android/animation/PropertyValuesHolder" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="clone()Landroid/animation/PropertyValuesHolder;" />
+		<method name="getPropertyName()Ljava/lang/String;" />
+		<method name="ofFloat(Landroid/util/Property;[F)Landroid/animation/PropertyValuesHolder;" since="14" />
+		<method name="ofFloat(Ljava/lang/String;[F)Landroid/animation/PropertyValuesHolder;" />
+		<method name="ofInt(Landroid/util/Property;[I)Landroid/animation/PropertyValuesHolder;" since="14" />
+		<method name="ofInt(Ljava/lang/String;[I)Landroid/animation/PropertyValuesHolder;" />
+		<method name="ofKeyframe(Landroid/util/Property;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="14" />
+		<method name="ofKeyframe(Ljava/lang/String;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" />
+		<method name="ofMultiFloat(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofMultiFloat(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofMultiFloat(Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofMultiFloat(Ljava/lang/String;[[F)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofMultiInt(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofMultiInt(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofMultiInt(Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofMultiInt(Ljava/lang/String;[[I)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="14" />
+		<method name="ofObject(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21" />
+		<method name="ofObject(Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" />
+		<method name="setConverter(Landroid/animation/TypeConverter;)V" since="21" />
+		<method name="setEvaluator(Landroid/animation/TypeEvaluator;)V" />
+		<method name="setFloatValues([F)V" />
+		<method name="setIntValues([I)V" />
+		<method name="setKeyframes([Landroid/animation/Keyframe;)V" />
+		<method name="setObjectValues([Ljava/lang/Object;)V" />
+		<method name="setProperty(Landroid/util/Property;)V" since="14" />
+		<method name="setPropertyName(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/animation/RectEvaluator" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TypeEvaluator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;)V" since="21" />
+		<method name="evaluate(FLandroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/graphics/Rect;" />
+	</class>
+	<class name="android/animation/StateListAnimator" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" since="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addState([ILandroid/animation/Animator;)V" />
+		<method name="clone()Landroid/animation/StateListAnimator;" since="22" />
+		<method name="jumpToCurrentState()V" />
+	</class>
+	<class name="android/animation/TimeAnimator" since="16">
+		<extends name="android/animation/ValueAnimator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setTimeListener(Landroid/animation/TimeAnimator$TimeListener;)V" />
+	</class>
+	<class name="android/animation/TimeAnimator$TimeListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onTimeUpdate(Landroid/animation/TimeAnimator;JJ)V" />
+	</class>
+	<class name="android/animation/TimeInterpolator" since="11">
+		<extends name="java/lang/Object" />
+		<method name="getInterpolation(F)F" />
+	</class>
+	<class name="android/animation/TypeConverter" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/Class;)V" />
+		<method name="convert(Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="android/animation/TypeEvaluator" since="11">
+		<extends name="java/lang/Object" />
+		<method name="evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="android/animation/ValueAnimator" since="11">
+		<extends name="android/animation/Animator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V" />
+		<method name="areAnimatorsEnabled()Z" since="26" />
+		<method name="clone()Landroid/animation/ValueAnimator;" />
+		<method name="getAnimatedFraction()F" since="12" />
+		<method name="getAnimatedValue()Ljava/lang/Object;" />
+		<method name="getAnimatedValue(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getCurrentPlayTime()J" />
+		<method name="getFrameDelay()J" />
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" />
+		<method name="getRepeatCount()I" />
+		<method name="getRepeatMode()I" />
+		<method name="getValues()[Landroid/animation/PropertyValuesHolder;" />
+		<method name="ofArgb([I)Landroid/animation/ValueAnimator;" since="21" />
+		<method name="ofFloat([F)Landroid/animation/ValueAnimator;" />
+		<method name="ofInt([I)Landroid/animation/ValueAnimator;" />
+		<method name="ofObject(Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ValueAnimator;" />
+		<method name="ofPropertyValuesHolder([Landroid/animation/PropertyValuesHolder;)Landroid/animation/ValueAnimator;" />
+		<method name="removeAllUpdateListeners()V" />
+		<method name="removeUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V" />
+		<method name="reverse()V" />
+		<method name="setCurrentFraction(F)V" since="22" />
+		<method name="setCurrentPlayTime(J)V" />
+		<method name="setDuration(J)Landroid/animation/ValueAnimator;" />
+		<method name="setEvaluator(Landroid/animation/TypeEvaluator;)V" />
+		<method name="setFloatValues([F)V" />
+		<method name="setFrameDelay(J)V" />
+		<method name="setIntValues([I)V" />
+		<method name="setObjectValues([Ljava/lang/Object;)V" />
+		<method name="setRepeatCount(I)V" />
+		<method name="setRepeatMode(I)V" />
+		<method name="setValues([Landroid/animation/PropertyValuesHolder;)V" />
+		<field name="INFINITE" />
+		<field name="RESTART" />
+		<field name="REVERSE" />
+	</class>
+	<class name="android/animation/ValueAnimator$AnimatorUpdateListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onAnimationUpdate(Landroid/animation/ValueAnimator;)V" />
+	</class>
+	<class name="android/annotation/SuppressLint" since="16">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="value()[Ljava/lang/String;" />
+	</class>
+	<class name="android/annotation/TargetApi" since="16">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="value()I" />
+	</class>
+	<class name="android/app/ActionBar" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V" />
+		<method name="addTab(Landroid/app/ActionBar$Tab;)V" deprecated="21" />
+		<method name="addTab(Landroid/app/ActionBar$Tab;I)V" deprecated="21" />
+		<method name="addTab(Landroid/app/ActionBar$Tab;IZ)V" deprecated="21" />
+		<method name="addTab(Landroid/app/ActionBar$Tab;Z)V" deprecated="21" />
+		<method name="getCustomView()Landroid/view/View;" />
+		<method name="getDisplayOptions()I" />
+		<method name="getElevation()F" since="21" />
+		<method name="getHeight()I" />
+		<method name="getHideOffset()I" since="21" />
+		<method name="getNavigationItemCount()I" deprecated="21" />
+		<method name="getNavigationMode()I" deprecated="21" />
+		<method name="getSelectedNavigationIndex()I" deprecated="21" />
+		<method name="getSelectedTab()Landroid/app/ActionBar$Tab;" deprecated="21" />
+		<method name="getSubtitle()Ljava/lang/CharSequence;" />
+		<method name="getTabAt(I)Landroid/app/ActionBar$Tab;" deprecated="21" />
+		<method name="getTabCount()I" deprecated="21" />
+		<method name="getThemedContext()Landroid/content/Context;" since="14" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="hide()V" />
+		<method name="isHideOnContentScrollEnabled()Z" since="21" />
+		<method name="isShowing()Z" />
+		<method name="newTab()Landroid/app/ActionBar$Tab;" deprecated="21" />
+		<method name="removeAllTabs()V" deprecated="21" />
+		<method name="removeOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V" />
+		<method name="removeTab(Landroid/app/ActionBar$Tab;)V" deprecated="21" />
+		<method name="removeTabAt(I)V" deprecated="21" />
+		<method name="selectTab(Landroid/app/ActionBar$Tab;)V" deprecated="21" />
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setCustomView(I)V" />
+		<method name="setCustomView(Landroid/view/View;)V" />
+		<method name="setCustomView(Landroid/view/View;Landroid/app/ActionBar$LayoutParams;)V" />
+		<method name="setDisplayHomeAsUpEnabled(Z)V" />
+		<method name="setDisplayOptions(I)V" />
+		<method name="setDisplayOptions(II)V" />
+		<method name="setDisplayShowCustomEnabled(Z)V" />
+		<method name="setDisplayShowHomeEnabled(Z)V" />
+		<method name="setDisplayShowTitleEnabled(Z)V" />
+		<method name="setDisplayUseLogoEnabled(Z)V" />
+		<method name="setElevation(F)V" since="21" />
+		<method name="setHideOffset(I)V" since="21" />
+		<method name="setHideOnContentScrollEnabled(Z)V" since="21" />
+		<method name="setHomeActionContentDescription(I)V" since="18" />
+		<method name="setHomeActionContentDescription(Ljava/lang/CharSequence;)V" since="18" />
+		<method name="setHomeAsUpIndicator(I)V" since="18" />
+		<method name="setHomeAsUpIndicator(Landroid/graphics/drawable/Drawable;)V" since="18" />
+		<method name="setHomeButtonEnabled(Z)V" since="14" />
+		<method name="setIcon(I)V" since="14" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="14" />
+		<method name="setListNavigationCallbacks(Landroid/widget/SpinnerAdapter;Landroid/app/ActionBar$OnNavigationListener;)V" deprecated="21" />
+		<method name="setLogo(I)V" since="14" />
+		<method name="setLogo(Landroid/graphics/drawable/Drawable;)V" since="14" />
+		<method name="setNavigationMode(I)V" deprecated="21" />
+		<method name="setSelectedNavigationItem(I)V" deprecated="21" />
+		<method name="setSplitBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="14" />
+		<method name="setStackedBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="14" />
+		<method name="setSubtitle(I)V" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V" />
+		<method name="setTitle(I)V" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" />
+		<method name="show()V" />
+		<field name="DISPLAY_HOME_AS_UP" />
+		<field name="DISPLAY_SHOW_CUSTOM" />
+		<field name="DISPLAY_SHOW_HOME" />
+		<field name="DISPLAY_SHOW_TITLE" />
+		<field name="DISPLAY_USE_LOGO" />
+		<field name="NAVIGATION_MODE_LIST" deprecated="21" />
+		<field name="NAVIGATION_MODE_STANDARD" deprecated="21" />
+		<field name="NAVIGATION_MODE_TABS" deprecated="21" />
+	</class>
+	<class name="android/app/ActionBar$LayoutParams" since="11">
+		<extends name="android/view/ViewGroup$MarginLayoutParams" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(Landroid/app/ActionBar$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<field name="gravity" />
+	</class>
+	<class name="android/app/ActionBar$OnMenuVisibilityListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onMenuVisibilityChanged(Z)V" />
+	</class>
+	<class name="android/app/ActionBar$OnNavigationListener" since="11" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onNavigationItemSelected(IJ)Z" deprecated="29" />
+	</class>
+	<class name="android/app/ActionBar$Tab" since="11" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="14" deprecated="29" />
+		<method name="getCustomView()Landroid/view/View;" deprecated="29" />
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;" deprecated="29" />
+		<method name="getPosition()I" deprecated="29" />
+		<method name="getTag()Ljava/lang/Object;" deprecated="29" />
+		<method name="getText()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="select()V" deprecated="29" />
+		<method name="setContentDescription(I)Landroid/app/ActionBar$Tab;" since="14" deprecated="29" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" since="14" deprecated="29" />
+		<method name="setCustomView(I)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<method name="setCustomView(Landroid/view/View;)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<method name="setIcon(I)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<method name="setTabListener(Landroid/app/ActionBar$TabListener;)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<method name="setTag(Ljava/lang/Object;)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<method name="setText(I)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" deprecated="29" />
+		<field name="INVALID_POSITION" deprecated="29" />
+	</class>
+	<class name="android/app/ActionBar$TabListener" since="11" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onTabReselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29" />
+		<method name="onTabSelected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29" />
+		<method name="onTabUnselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29" />
+	</class>
+	<class name="android/app/Activity" since="1">
+		<extends name="android/view/ContextThemeWrapper" />
+		<implements name="android/content/ComponentCallbacks" removed="14" />
+		<implements name="android/content/ComponentCallbacks2" since="14" />
+		<implements name="android/view/KeyEvent$Callback" />
+		<implements name="android/view/LayoutInflater$Factory" removed="11" />
+		<implements name="android/view/LayoutInflater$Factory2" since="11" />
+		<implements name="android/view/View$OnCreateContextMenuListener" />
+		<implements name="android/view/Window$Callback" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="closeContextMenu()V" since="3" />
+		<method name="closeOptionsMenu()V" />
+		<method name="createPendingResult(ILandroid/content/Intent;I)Landroid/app/PendingIntent;" />
+		<method name="dismissDialog(I)V" deprecated="15" />
+		<method name="dismissKeyboardShortcutsHelper()V" since="24" />
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="11" />
+		<method name="enterPictureInPictureMode()V" since="24" deprecated="26" />
+		<method name="enterPictureInPictureMode(Landroid/app/PictureInPictureParams;)Z" since="26" />
+		<method name="findViewById(I)Landroid/view/View;" />
+		<method name="finish()V" />
+		<method name="finishActivity(I)V" />
+		<method name="finishActivityFromChild(Landroid/app/Activity;I)V" deprecated="30" />
+		<method name="finishAffinity()V" since="16" />
+		<method name="finishAfterTransition()V" since="21" />
+		<method name="finishAndRemoveTask()V" since="21" />
+		<method name="finishFromChild(Landroid/app/Activity;)V" deprecated="30" />
+		<method name="getActionBar()Landroid/app/ActionBar;" since="11" />
+		<method name="getApplication()Landroid/app/Application;" />
+		<method name="getCallingActivity()Landroid/content/ComponentName;" />
+		<method name="getCallingPackage()Ljava/lang/String;" />
+		<method name="getChangingConfigurations()I" />
+		<method name="getComponentName()Landroid/content/ComponentName;" />
+		<method name="getContentScene()Landroid/transition/Scene;" since="21" />
+		<method name="getContentTransitionManager()Landroid/transition/TransitionManager;" since="21" />
+		<method name="getCurrentFocus()Landroid/view/View;" />
+		<method name="getFragmentManager()Landroid/app/FragmentManager;" since="11" deprecated="28" />
+		<method name="getInstanceCount()J" removed="11" />
+		<method name="getIntent()Landroid/content/Intent;" />
+		<method name="getLastNonConfigurationInstance()Ljava/lang/Object;" deprecated="15" />
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" />
+		<method name="getLoaderManager()Landroid/app/LoaderManager;" since="11" deprecated="28" />
+		<method name="getLocalClassName()Ljava/lang/String;" />
+		<method name="getMaxNumPictureInPictureActions()I" since="26" />
+		<method name="getMediaController()Landroid/media/session/MediaController;" since="21" />
+		<method name="getMenuInflater()Landroid/view/MenuInflater;" />
+		<method name="getParent()Landroid/app/Activity;" />
+		<method name="getParentActivityIntent()Landroid/content/Intent;" since="16" />
+		<method name="getPreferences(I)Landroid/content/SharedPreferences;" />
+		<method name="getReferrer()Landroid/net/Uri;" since="22" />
+		<method name="getRequestedOrientation()I" />
+		<method name="getSearchEvent()Landroid/view/SearchEvent;" since="23" />
+		<method name="getSplashScreen()Landroid/window/SplashScreen;" since="31" />
+		<method name="getTaskId()I" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="getTitleColor()I" />
+		<method name="getVoiceInteractor()Landroid/app/VoiceInteractor;" since="23" />
+		<method name="getVolumeControlStream()I" />
+		<method name="getWindow()Landroid/view/Window;" />
+		<method name="getWindowManager()Landroid/view/WindowManager;" />
+		<method name="hasWindowFocus()Z" since="3" />
+		<method name="invalidateOptionsMenu()V" since="11" />
+		<method name="isActivityTransitionRunning()Z" since="26" />
+		<method name="isChangingConfigurations()Z" since="11" />
+		<method name="isChild()Z" />
+		<method name="isDestroyed()Z" since="17" />
+		<method name="isFinishing()Z" />
+		<method name="isImmersive()Z" since="18" />
+		<method name="isInMultiWindowMode()Z" since="24" />
+		<method name="isInPictureInPictureMode()Z" since="24" />
+		<method name="isLaunchedFromBubble()Z" since="31" />
+		<method name="isLocalVoiceInteractionSupported()Z" since="24" />
+		<method name="isTaskRoot()Z" />
+		<method name="isVoiceInteraction()Z" since="23" />
+		<method name="isVoiceInteractionRoot()Z" since="23" />
+		<method name="managedQuery(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="15" />
+		<method name="moveTaskToBack(Z)Z" />
+		<method name="navigateUpTo(Landroid/content/Intent;)Z" since="16" />
+		<method name="navigateUpToFromChild(Landroid/app/Activity;Landroid/content/Intent;)Z" since="16" deprecated="30" />
+		<method name="onActivityReenter(ILandroid/content/Intent;)V" since="21" />
+		<method name="onActivityResult(IILandroid/content/Intent;)V" />
+		<method name="onAttachFragment(Landroid/app/Fragment;)V" since="11" deprecated="28" />
+		<method name="onBackPressed()V" since="5" />
+		<method name="onChildTitleChanged(Landroid/app/Activity;Ljava/lang/CharSequence;)V" />
+		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z" />
+		<method name="onContextMenuClosed(Landroid/view/Menu;)V" />
+		<method name="onCreate(Landroid/os/Bundle;)V" />
+		<method name="onCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="onCreateDescription()Ljava/lang/CharSequence;" />
+		<method name="onCreateDialog(I)Landroid/app/Dialog;" deprecated="15" />
+		<method name="onCreateDialog(ILandroid/os/Bundle;)Landroid/app/Dialog;" since="8" deprecated="15" />
+		<method name="onCreateNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16" />
+		<method name="onCreateOptionsMenu(Landroid/view/Menu;)Z" />
+		<method name="onCreateThumbnail(Landroid/graphics/Bitmap;Landroid/graphics/Canvas;)Z" deprecated="28" />
+		<method name="onDestroy()V" />
+		<method name="onEnterAnimationComplete()V" since="21" />
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12" />
+		<method name="onGetDirectActions(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V" since="29" />
+		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" since="11" />
+		<method name="onLocalVoiceInteractionStarted()V" since="24" />
+		<method name="onLocalVoiceInteractionStopped()V" since="24" />
+		<method name="onMultiWindowModeChanged(Z)V" since="24" deprecated="26" />
+		<method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26" />
+		<method name="onNavigateUp()Z" since="16" />
+		<method name="onNavigateUpFromChild(Landroid/app/Activity;)Z" since="16" deprecated="30" />
+		<method name="onNewIntent(Landroid/content/Intent;)V" />
+		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z" />
+		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V" />
+		<method name="onPause()V" />
+		<method name="onPerformDirectAction(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V" since="29" />
+		<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26" />
+		<method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26" />
+		<method name="onPictureInPictureRequested()Z" since="30" />
+		<method name="onPictureInPictureUiStateChanged(Landroid/app/PictureInPictureUiState;)V" since="31" />
+		<method name="onPostCreate(Landroid/os/Bundle;)V" />
+		<method name="onPostCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="onPostResume()V" />
+		<method name="onPrepareDialog(ILandroid/app/Dialog;)V" deprecated="15" />
+		<method name="onPrepareDialog(ILandroid/app/Dialog;Landroid/os/Bundle;)V" since="8" deprecated="15" />
+		<method name="onPrepareNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16" />
+		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)Z" />
+		<method name="onProvideAssistContent(Landroid/app/assist/AssistContent;)V" since="23" />
+		<method name="onProvideAssistData(Landroid/os/Bundle;)V" since="18" />
+		<method name="onProvideReferrer()Landroid/net/Uri;" since="23" />
+		<method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23" />
+		<method name="onRestart()V" />
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V" />
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="onResume()V" />
+		<method name="onRetainNonConfigurationInstance()Ljava/lang/Object;" deprecated="15" />
+		<method name="onSaveInstanceState(Landroid/os/Bundle;)V" />
+		<method name="onSaveInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="onStart()V" />
+		<method name="onStateNotSaved()V" since="23" deprecated="29" />
+		<method name="onStop()V" />
+		<method name="onTitleChanged(Ljava/lang/CharSequence;I)V" />
+		<method name="onTopResumedActivityChanged(Z)V" since="29" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onUserInteraction()V" since="3" />
+		<method name="onUserLeaveHint()V" since="3" />
+		<method name="onVisibleBehindCanceled()V" since="21" deprecated="26" />
+		<method name="openContextMenu(Landroid/view/View;)V" />
+		<method name="openOptionsMenu()V" />
+		<method name="overridePendingTransition(II)V" since="5" />
+		<method name="postponeEnterTransition()V" since="21" />
+		<method name="recreate()V" since="11" />
+		<method name="registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="29" />
+		<method name="registerForContextMenu(Landroid/view/View;)V" />
+		<method name="releaseInstance()Z" since="21" />
+		<method name="removeDialog(I)V" deprecated="15" />
+		<method name="reportFullyDrawn()V" since="19" />
+		<method name="requestDragAndDropPermissions(Landroid/view/DragEvent;)Landroid/view/DragAndDropPermissions;" since="24" />
+		<method name="requestPermissions([Ljava/lang/String;I)V" since="23" />
+		<method name="requestShowKeyboardShortcuts()V" since="24" />
+		<method name="requestVisibleBehind(Z)Z" since="21" deprecated="26" />
+		<method name="requestWindowFeature(I)Z" />
+		<method name="requireViewById(I)Landroid/view/View;" since="28" />
+		<method name="runOnUiThread(Ljava/lang/Runnable;)V" />
+		<method name="setActionBar(Landroid/widget/Toolbar;)V" since="21" />
+		<method name="setContentTransitionManager(Landroid/transition/TransitionManager;)V" since="21" />
+		<method name="setContentView(I)V" />
+		<method name="setContentView(Landroid/view/View;)V" />
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="setDefaultKeyMode(I)V" />
+		<method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" />
+		<method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" />
+		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V" />
+		<method name="setFeatureDrawableAlpha(II)V" />
+		<method name="setFeatureDrawableResource(II)V" />
+		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V" />
+		<method name="setFinishOnTouchOutside(Z)V" since="11" />
+		<method name="setImmersive(Z)V" since="18" />
+		<method name="setInheritShowWhenLocked(Z)V" since="29" />
+		<method name="setIntent(Landroid/content/Intent;)V" />
+		<method name="setLocusContext(Landroid/content/LocusId;Landroid/os/Bundle;)V" since="30" />
+		<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21" />
+		<method name="setPersistent(Z)V" removed="11" />
+		<method name="setPictureInPictureParams(Landroid/app/PictureInPictureParams;)V" since="26" />
+		<method name="setProgress(I)V" deprecated="24" />
+		<method name="setProgressBarIndeterminate(Z)V" deprecated="24" />
+		<method name="setProgressBarIndeterminateVisibility(Z)V" deprecated="24" />
+		<method name="setProgressBarVisibility(Z)V" deprecated="24" />
+		<method name="setRequestedOrientation(I)V" />
+		<method name="setResult(I)V" />
+		<method name="setResult(ILandroid/content/Intent;)V" />
+		<method name="setSecondaryProgress(I)V" deprecated="24" />
+		<method name="setShowWhenLocked(Z)V" since="27" />
+		<method name="setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V" since="21" />
+		<method name="setTitle(I)V" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" />
+		<method name="setTitleColor(I)V" deprecated="21" />
+		<method name="setTranslucent(Z)Z" since="30" />
+		<method name="setTurnScreenOn(Z)V" since="27" />
+		<method name="setVisible(Z)V" since="3" />
+		<method name="setVolumeControlStream(I)V" />
+		<method name="setVrModeEnabled(ZLandroid/content/ComponentName;)V" since="24" />
+		<method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23" />
+		<method name="shouldUpRecreateTask(Landroid/content/Intent;)Z" since="16" />
+		<method name="showAssist(Landroid/os/Bundle;)Z" since="23" />
+		<method name="showDialog(I)V" deprecated="15" />
+		<method name="showDialog(ILandroid/os/Bundle;)Z" since="8" deprecated="15" />
+		<method name="showLockTaskEscapeMessage()V" since="23" />
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11" />
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23" />
+		<method name="startActivityForResult(Landroid/content/Intent;I)V" />
+		<method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" />
+		<method name="startActivityFromChild(Landroid/app/Activity;Landroid/content/Intent;I)V" deprecated="30" />
+		<method name="startActivityFromChild(Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="30" />
+		<method name="startActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;I)V" since="11" deprecated="28" />
+		<method name="startActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="28" />
+		<method name="startActivityIfNeeded(Landroid/content/Intent;I)Z" />
+		<method name="startActivityIfNeeded(Landroid/content/Intent;ILandroid/os/Bundle;)Z" since="16" />
+		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;III)V" since="5" />
+		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="16" />
+		<method name="startIntentSenderFromChild(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;III)V" since="5" deprecated="30" />
+		<method name="startIntentSenderFromChild(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="16" deprecated="30" />
+		<method name="startLocalVoiceInteraction(Landroid/os/Bundle;)V" since="24" />
+		<method name="startLockTask()V" since="21" />
+		<method name="startManagingCursor(Landroid/database/Cursor;)V" deprecated="15" />
+		<method name="startNextMatchingActivity(Landroid/content/Intent;)Z" />
+		<method name="startNextMatchingActivity(Landroid/content/Intent;Landroid/os/Bundle;)Z" since="16" />
+		<method name="startPostponedEnterTransition()V" since="21" />
+		<method name="startSearch(Ljava/lang/String;ZLandroid/os/Bundle;Z)V" />
+		<method name="stopLocalVoiceInteraction()V" since="24" />
+		<method name="stopLockTask()V" since="21" />
+		<method name="stopManagingCursor(Landroid/database/Cursor;)V" deprecated="15" />
+		<method name="takeKeyEvents(Z)V" />
+		<method name="triggerSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="5" />
+		<method name="unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="29" />
+		<method name="unregisterForContextMenu(Landroid/view/View;)V" />
+		<field name="DEFAULT_KEYS_DIALER" />
+		<field name="DEFAULT_KEYS_DISABLE" />
+		<field name="DEFAULT_KEYS_SEARCH_GLOBAL" />
+		<field name="DEFAULT_KEYS_SEARCH_LOCAL" />
+		<field name="DEFAULT_KEYS_SHORTCUT" />
+		<field name="FOCUSED_STATE_SET" />
+		<field name="RESULT_CANCELED" />
+		<field name="RESULT_FIRST_USER" />
+		<field name="RESULT_OK" />
+	</class>
+	<class name="android/app/ActivityGroup" since="1" deprecated="13">
+		<extends name="android/app/Activity" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Z)V" deprecated="29" />
+		<method name="getCurrentActivity()Landroid/app/Activity;" deprecated="29" />
+		<method name="getLocalActivityManager()Landroid/app/LocalActivityManager;" deprecated="29" />
+	</class>
+	<class name="android/app/ActivityManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addAppTask(Landroid/app/Activity;Landroid/content/Intent;Landroid/app/ActivityManager$TaskDescription;Landroid/graphics/Bitmap;)I" since="21" />
+		<method name="appNotResponding(Ljava/lang/String;)V" since="30" />
+		<method name="clearApplicationUserData()Z" since="19" />
+		<method name="clearWatchHeapLimit()V" since="23" />
+		<method name="dumpPackageState(Ljava/io/FileDescriptor;Ljava/lang/String;)V" since="19" />
+		<method name="getAppTaskThumbnailSize()Landroid/util/Size;" since="21" />
+		<method name="getAppTasks()Ljava/util/List;" since="21" />
+		<method name="getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;" since="3" />
+		<method name="getHistoricalProcessExitReasons(Ljava/lang/String;II)Ljava/util/List;" since="30" />
+		<method name="getLargeMemoryClass()I" since="11" />
+		<method name="getLauncherLargeIconDensity()I" since="11" />
+		<method name="getLauncherLargeIconSize()I" since="11" />
+		<method name="getLockTaskModeState()I" since="23" />
+		<method name="getMemoryClass()I" since="5" />
+		<method name="getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V" />
+		<method name="getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V" since="16" />
+		<method name="getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;" since="5" />
+		<method name="getProcessesInErrorState()Ljava/util/List;" />
+		<method name="getRecentTasks(II)Ljava/util/List;" deprecated="21" />
+		<method name="getRunningAppProcesses()Ljava/util/List;" since="3" />
+		<method name="getRunningServiceControlPanel(Landroid/content/ComponentName;)Landroid/app/PendingIntent;" since="5" />
+		<method name="getRunningServices(I)Ljava/util/List;" deprecated="26" />
+		<method name="getRunningTasks(I)Ljava/util/List;" deprecated="21" />
+		<method name="isActivityStartAllowedOnDisplay(Landroid/content/Context;ILandroid/content/Intent;)Z" since="29" />
+		<method name="isBackgroundRestricted()Z" since="28" />
+		<method name="isInLockTaskMode()Z" since="21" deprecated="23" />
+		<method name="isLowMemoryKillReportSupported()Z" since="30" />
+		<method name="isLowRamDevice()Z" since="19" />
+		<method name="isRunningInTestHarness()Z" since="11" deprecated="29" />
+		<method name="isRunningInUserTestHarness()Z" since="29" />
+		<method name="isUserAMonkey()Z" since="8" />
+		<method name="killBackgroundProcesses(Ljava/lang/String;)V" since="8" />
+		<method name="moveTaskToFront(II)V" since="11" />
+		<method name="moveTaskToFront(IILandroid/os/Bundle;)V" since="16" />
+		<method name="restartPackage(Ljava/lang/String;)V" since="3" deprecated="15" />
+		<method name="setProcessStateSummary([B)V" since="30" />
+		<method name="setVrThread(I)V" since="25" />
+		<method name="setWatchHeapLimit(J)V" since="23" />
+		<field name="ACTION_REPORT_HEAP_LIMIT" since="23" />
+		<field name="LOCK_TASK_MODE_LOCKED" since="23" />
+		<field name="LOCK_TASK_MODE_NONE" since="23" />
+		<field name="LOCK_TASK_MODE_PINNED" since="23" />
+		<field name="META_HOME_ALTERNATE" since="19" />
+		<field name="MOVE_TASK_NO_USER_ACTION" since="12" />
+		<field name="MOVE_TASK_WITH_HOME" since="11" />
+		<field name="RECENT_IGNORE_UNAVAILABLE" since="11" />
+		<field name="RECENT_WITH_EXCLUDED" />
+	</class>
+	<class name="android/app/ActivityManager$AppTask" since="21">
+		<extends name="java/lang/Object" />
+		<method name="finishAndRemoveTask()V" />
+		<method name="getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;" />
+		<method name="moveToFront()V" />
+		<method name="setExcludeFromRecents(Z)V" />
+		<method name="startActivity(Landroid/content/Context;Landroid/content/Intent;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/ActivityManager$MemoryInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+		<field name="availMem" />
+		<field name="lowMemory" />
+		<field name="threshold" />
+		<field name="totalMem" since="16" />
+	</class>
+	<class name="android/app/ActivityManager$ProcessErrorStateInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CRASHED" />
+		<field name="CREATOR" />
+		<field name="NOT_RESPONDING" />
+		<field name="NO_ERROR" />
+		<field name="condition" />
+		<field name="crashData" />
+		<field name="longMsg" />
+		<field name="pid" />
+		<field name="processName" />
+		<field name="shortMsg" />
+		<field name="stackTrace" since="8" />
+		<field name="tag" />
+		<field name="uid" />
+	</class>
+	<class name="android/app/ActivityManager$RecentTaskInfo" since="1">
+		<extends name="android/app/TaskInfo" since="29" />
+		<extends name="java/lang/Object" removed="29" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+		<field name="affiliatedTaskId" since="21" deprecated="29" />
+		<field name="baseActivity" since="23" removed="29" />
+		<field name="baseIntent" removed="29" />
+		<field name="description" since="11" deprecated="29" />
+		<field name="id" deprecated="29" />
+		<field name="numActivities" since="23" removed="29" />
+		<field name="origActivity" removed="29" />
+		<field name="persistentId" since="12" deprecated="29" />
+		<field name="taskDescription" since="21" removed="29" />
+		<field name="topActivity" since="23" removed="29" />
+	</class>
+	<class name="android/app/ActivityManager$RunningAppProcessInfo" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I[Ljava/lang/String;)V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+		<field name="IMPORTANCE_BACKGROUND" deprecated="26" />
+		<field name="IMPORTANCE_CACHED" since="26" />
+		<field name="IMPORTANCE_CANT_SAVE_STATE" since="28" />
+		<field name="IMPORTANCE_EMPTY" deprecated="26" />
+		<field name="IMPORTANCE_FOREGROUND" />
+		<field name="IMPORTANCE_FOREGROUND_SERVICE" since="23" />
+		<field name="IMPORTANCE_GONE" since="21" />
+		<field name="IMPORTANCE_PERCEPTIBLE" since="9" />
+		<field name="IMPORTANCE_PERCEPTIBLE_PRE_26" since="26" />
+		<field name="IMPORTANCE_SERVICE" />
+		<field name="IMPORTANCE_TOP_SLEEPING" since="23" />
+		<field name="IMPORTANCE_TOP_SLEEPING_PRE_28" since="28" deprecated="28" />
+		<field name="IMPORTANCE_VISIBLE" />
+		<field name="REASON_PROVIDER_IN_USE" since="5" />
+		<field name="REASON_SERVICE_IN_USE" since="5" />
+		<field name="REASON_UNKNOWN" since="5" />
+		<field name="importance" />
+		<field name="importanceReasonCode" since="5" />
+		<field name="importanceReasonComponent" since="5" />
+		<field name="importanceReasonPid" since="5" />
+		<field name="lastTrimLevel" since="16" />
+		<field name="lru" />
+		<field name="pid" />
+		<field name="pkgList" />
+		<field name="processName" />
+		<field name="uid" since="5" />
+	</class>
+	<class name="android/app/ActivityManager$RunningServiceInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+		<field name="FLAG_FOREGROUND" since="5" />
+		<field name="FLAG_PERSISTENT_PROCESS" since="5" />
+		<field name="FLAG_STARTED" since="5" />
+		<field name="FLAG_SYSTEM_PROCESS" since="5" />
+		<field name="activeSince" />
+		<field name="clientCount" />
+		<field name="clientLabel" since="5" />
+		<field name="clientPackage" since="5" />
+		<field name="crashCount" />
+		<field name="flags" since="5" />
+		<field name="foreground" />
+		<field name="lastActivityTime" />
+		<field name="pid" />
+		<field name="process" />
+		<field name="restarting" />
+		<field name="service" />
+		<field name="started" />
+		<field name="uid" since="5" />
+	</class>
+	<class name="android/app/ActivityManager$RunningTaskInfo" since="1">
+		<extends name="android/app/TaskInfo" since="29" />
+		<extends name="java/lang/Object" removed="29" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+		<field name="baseActivity" removed="29" />
+		<field name="description" deprecated="29" />
+		<field name="id" deprecated="29" />
+		<field name="numActivities" removed="29" />
+		<field name="numRunning" deprecated="29" />
+		<field name="thumbnail" deprecated="29" />
+		<field name="topActivity" removed="29" />
+	</class>
+	<class name="android/app/ActivityManager$TaskDescription" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/ActivityManager$TaskDescription;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" since="28" />
+		<method name="&lt;init&gt;(Ljava/lang/String;II)V" since="28" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/graphics/Bitmap;)V" deprecated="28" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/graphics/Bitmap;I)V" deprecated="28" />
+		<method name="getIcon()Landroid/graphics/Bitmap;" deprecated="30" />
+		<method name="getLabel()Ljava/lang/String;" />
+		<method name="getPrimaryColor()I" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/ActivityOptions" since="16">
+		<extends name="java/lang/Object" />
+		<method name="getLaunchBounds()Landroid/graphics/Rect;" since="24" />
+		<method name="getLaunchDisplayId()I" since="26" />
+		<method name="getLockTaskMode()Z" since="28" />
+		<method name="makeBasic()Landroid/app/ActivityOptions;" since="23" />
+		<method name="makeClipRevealAnimation(Landroid/view/View;IIII)Landroid/app/ActivityOptions;" since="23" />
+		<method name="makeCustomAnimation(Landroid/content/Context;II)Landroid/app/ActivityOptions;" />
+		<method name="makeScaleUpAnimation(Landroid/view/View;IIII)Landroid/app/ActivityOptions;" />
+		<method name="makeSceneTransitionAnimation(Landroid/app/Activity;Landroid/view/View;Ljava/lang/String;)Landroid/app/ActivityOptions;" since="21" />
+		<method name="makeSceneTransitionAnimation(Landroid/app/Activity;[Landroid/util/Pair;)Landroid/app/ActivityOptions;" since="21" />
+		<method name="makeTaskLaunchBehind()Landroid/app/ActivityOptions;" since="21" />
+		<method name="makeThumbnailScaleUpAnimation(Landroid/view/View;Landroid/graphics/Bitmap;II)Landroid/app/ActivityOptions;" />
+		<method name="requestUsageTimeReport(Landroid/app/PendingIntent;)V" since="23" />
+		<method name="setAppVerificationBundle(Landroid/os/Bundle;)Landroid/app/ActivityOptions;" since="26" />
+		<method name="setLaunchBounds(Landroid/graphics/Rect;)Landroid/app/ActivityOptions;" since="24" />
+		<method name="setLaunchDisplayId(I)Landroid/app/ActivityOptions;" since="26" />
+		<method name="setLockTaskEnabled(Z)Landroid/app/ActivityOptions;" since="28" />
+		<method name="toBundle()Landroid/os/Bundle;" />
+		<method name="update(Landroid/app/ActivityOptions;)V" />
+		<field name="EXTRA_USAGE_TIME_REPORT" since="23" />
+		<field name="EXTRA_USAGE_TIME_REPORT_PACKAGES" since="23" />
+	</class>
+	<class name="android/app/AlarmManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="canScheduleExactAlarms()Z" since="31" />
+		<method name="cancel(Landroid/app/AlarmManager$OnAlarmListener;)V" since="24" />
+		<method name="cancel(Landroid/app/PendingIntent;)V" />
+		<method name="getNextAlarmClock()Landroid/app/AlarmManager$AlarmClockInfo;" since="21" />
+		<method name="set(IJLandroid/app/PendingIntent;)V" />
+		<method name="set(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24" />
+		<method name="setAlarmClock(Landroid/app/AlarmManager$AlarmClockInfo;Landroid/app/PendingIntent;)V" since="21" />
+		<method name="setAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V" since="23" />
+		<method name="setExact(IJLandroid/app/PendingIntent;)V" since="19" />
+		<method name="setExact(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24" />
+		<method name="setExactAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V" since="23" />
+		<method name="setInexactRepeating(IJJLandroid/app/PendingIntent;)V" since="3" />
+		<method name="setRepeating(IJJLandroid/app/PendingIntent;)V" />
+		<method name="setTime(J)V" since="8" />
+		<method name="setTimeZone(Ljava/lang/String;)V" />
+		<method name="setWindow(IJJLandroid/app/PendingIntent;)V" since="19" />
+		<method name="setWindow(IJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24" />
+		<field name="ACTION_NEXT_ALARM_CLOCK_CHANGED" since="21" />
+		<field name="ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED" since="31" />
+		<field name="ELAPSED_REALTIME" />
+		<field name="ELAPSED_REALTIME_WAKEUP" />
+		<field name="INTERVAL_DAY" since="3" />
+		<field name="INTERVAL_FIFTEEN_MINUTES" since="3" />
+		<field name="INTERVAL_HALF_DAY" since="3" />
+		<field name="INTERVAL_HALF_HOUR" since="3" />
+		<field name="INTERVAL_HOUR" since="3" />
+		<field name="RTC" />
+		<field name="RTC_WAKEUP" />
+	</class>
+	<class name="android/app/AlarmManager$AlarmClockInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(JLandroid/app/PendingIntent;)V" />
+		<method name="getShowIntent()Landroid/app/PendingIntent;" />
+		<method name="getTriggerTime()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/AlarmManager$OnAlarmListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onAlarm()V" />
+	</class>
+	<class name="android/app/AlertDialog" since="1">
+		<extends name="android/app/Dialog" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ZLandroid/content/DialogInterface$OnCancelListener;)V" />
+		<method name="getButton(I)Landroid/widget/Button;" since="3" />
+		<method name="getListView()Landroid/widget/ListView;" since="3" />
+		<method name="setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" since="3" />
+		<method name="setButton(ILjava/lang/CharSequence;Landroid/os/Message;)V" since="3" />
+		<method name="setButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15" />
+		<method name="setButton(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15" />
+		<method name="setButton2(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15" />
+		<method name="setButton2(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15" />
+		<method name="setButton3(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15" />
+		<method name="setButton3(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15" />
+		<method name="setCustomTitle(Landroid/view/View;)V" />
+		<method name="setIcon(I)V" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setIconAttribute(I)V" since="11" />
+		<method name="setInverseBackgroundForced(Z)V" />
+		<method name="setMessage(Ljava/lang/CharSequence;)V" />
+		<method name="setView(Landroid/view/View;)V" />
+		<method name="setView(Landroid/view/View;IIII)V" since="3" />
+		<field name="THEME_DEVICE_DEFAULT_DARK" since="14" deprecated="23" />
+		<field name="THEME_DEVICE_DEFAULT_LIGHT" since="14" deprecated="23" />
+		<field name="THEME_HOLO_DARK" since="11" deprecated="23" />
+		<field name="THEME_HOLO_LIGHT" since="11" deprecated="23" />
+		<field name="THEME_TRADITIONAL" since="11" deprecated="23" />
+	</class>
+	<class name="android/app/AlertDialog$Builder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" since="11" />
+		<method name="create()Landroid/app/AlertDialog;" />
+		<method name="getContext()Landroid/content/Context;" since="11" />
+		<method name="setAdapter(Landroid/widget/ListAdapter;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setCancelable(Z)Landroid/app/AlertDialog$Builder;" />
+		<method name="setCursor(Landroid/database/Cursor;Landroid/content/DialogInterface$OnClickListener;Ljava/lang/String;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setCustomTitle(Landroid/view/View;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setIcon(I)Landroid/app/AlertDialog$Builder;" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setIconAttribute(I)Landroid/app/AlertDialog$Builder;" since="11" />
+		<method name="setInverseBackgroundForced(Z)Landroid/app/AlertDialog$Builder;" deprecated="23" />
+		<method name="setItems(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setItems([Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setMessage(I)Landroid/app/AlertDialog$Builder;" />
+		<method name="setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setMultiChoiceItems(I[ZLandroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setMultiChoiceItems(Landroid/database/Cursor;Ljava/lang/String;Ljava/lang/String;Landroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setMultiChoiceItems([Ljava/lang/CharSequence;[ZLandroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setNegativeButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setNegativeButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setNeutralButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setNeutralButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)Landroid/app/AlertDialog$Builder;" since="17" />
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setOnKeyListener(Landroid/content/DialogInterface$OnKeyListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setPositiveButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setSingleChoiceItems(IILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setSingleChoiceItems(Landroid/database/Cursor;ILjava/lang/String;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setSingleChoiceItems(Landroid/widget/ListAdapter;ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setSingleChoiceItems([Ljava/lang/CharSequence;ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setTitle(I)Landroid/app/AlertDialog$Builder;" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;" />
+		<method name="setView(I)Landroid/app/AlertDialog$Builder;" since="21" />
+		<method name="setView(Landroid/view/View;)Landroid/app/AlertDialog$Builder;" />
+		<method name="show()Landroid/app/AlertDialog;" />
+	</class>
+	<class name="android/app/AliasActivity" since="1" deprecated="30">
+		<extends name="android/app/Activity" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+	</class>
+	<class name="android/app/AppComponentFactory" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;" />
+		<method name="instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;" />
+		<method name="instantiateClassLoader(Ljava/lang/ClassLoader;Landroid/content/pm/ApplicationInfo;)Ljava/lang/ClassLoader;" since="29" />
+		<method name="instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;" />
+		<method name="instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver;" />
+		<method name="instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service;" />
+	</class>
+	<class name="android/app/AppOpsManager" since="19">
+		<extends name="java/lang/Object" />
+		<method name="checkOp(Ljava/lang/String;ILjava/lang/String;)I" deprecated="29" />
+		<method name="checkOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" deprecated="29" />
+		<method name="checkPackage(ILjava/lang/String;)V" deprecated="30" />
+		<method name="finishOp(Ljava/lang/String;ILjava/lang/String;)V" deprecated="30" />
+		<method name="finishOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" since="30" />
+		<method name="finishProxyOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" since="31" />
+		<method name="isOpActive(Ljava/lang/String;ILjava/lang/String;)Z" since="30" />
+		<method name="noteOp(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30" />
+		<method name="noteOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30" />
+		<method name="noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30" />
+		<method name="noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30" />
+		<method name="noteProxyOp(Ljava/lang/String;Ljava/lang/String;)I" since="23" deprecated="30" />
+		<method name="noteProxyOp(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I" since="30" />
+		<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;)I" since="23" deprecated="30" />
+		<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;I)I" since="29" deprecated="30" />
+		<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I" since="30" />
+		<method name="permissionToOp(Ljava/lang/String;)Ljava/lang/String;" since="23" />
+		<method name="setOnOpNotedCallback(Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpNotedCallback;)V" since="30" />
+		<method name="startOp(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30" />
+		<method name="startOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30" />
+		<method name="startOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30" />
+		<method name="startOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30" />
+		<method name="startProxyOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="31" />
+		<method name="startProxyOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="31" />
+		<method name="startWatchingActive([Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpActiveChangedListener;)V" since="30" />
+		<method name="startWatchingMode(Ljava/lang/String;Ljava/lang/String;ILandroid/app/AppOpsManager$OnOpChangedListener;)V" since="29" />
+		<method name="startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V" />
+		<method name="stopWatchingActive(Landroid/app/AppOpsManager$OnOpActiveChangedListener;)V" since="30" />
+		<method name="stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V" />
+		<method name="unsafeCheckOp(Ljava/lang/String;ILjava/lang/String;)I" since="29" />
+		<method name="unsafeCheckOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" since="29" />
+		<method name="unsafeCheckOpRaw(Ljava/lang/String;ILjava/lang/String;)I" since="29" />
+		<method name="unsafeCheckOpRawNoThrow(Ljava/lang/String;ILjava/lang/String;)I" since="29" />
+		<field name="MODE_ALLOWED" />
+		<field name="MODE_DEFAULT" since="21" />
+		<field name="MODE_ERRORED" />
+		<field name="MODE_FOREGROUND" since="29" />
+		<field name="MODE_IGNORED" />
+		<field name="OPSTR_ADD_VOICEMAIL" since="23" />
+		<field name="OPSTR_ANSWER_PHONE_CALLS" since="26" />
+		<field name="OPSTR_BODY_SENSORS" since="23" />
+		<field name="OPSTR_CALL_PHONE" since="23" />
+		<field name="OPSTR_CAMERA" since="23" />
+		<field name="OPSTR_COARSE_LOCATION" />
+		<field name="OPSTR_FINE_LOCATION" />
+		<field name="OPSTR_GET_USAGE_STATS" since="21" />
+		<field name="OPSTR_MOCK_LOCATION" since="23" />
+		<field name="OPSTR_MONITOR_HIGH_POWER_LOCATION" />
+		<field name="OPSTR_MONITOR_LOCATION" />
+		<field name="OPSTR_PICTURE_IN_PICTURE" since="26" />
+		<field name="OPSTR_PROCESS_OUTGOING_CALLS" since="26" />
+		<field name="OPSTR_READ_CALENDAR" since="23" />
+		<field name="OPSTR_READ_CALL_LOG" since="23" />
+		<field name="OPSTR_READ_CELL_BROADCASTS" since="23" />
+		<field name="OPSTR_READ_CONTACTS" since="23" />
+		<field name="OPSTR_READ_EXTERNAL_STORAGE" since="23" />
+		<field name="OPSTR_READ_PHONE_NUMBERS" since="26" />
+		<field name="OPSTR_READ_PHONE_STATE" since="23" />
+		<field name="OPSTR_READ_SMS" since="23" />
+		<field name="OPSTR_RECEIVE_MMS" since="23" />
+		<field name="OPSTR_RECEIVE_SMS" since="23" />
+		<field name="OPSTR_RECEIVE_WAP_PUSH" since="23" />
+		<field name="OPSTR_RECORD_AUDIO" since="23" />
+		<field name="OPSTR_SEND_SMS" since="23" />
+		<field name="OPSTR_SYSTEM_ALERT_WINDOW" since="23" />
+		<field name="OPSTR_USE_FINGERPRINT" since="23" />
+		<field name="OPSTR_USE_SIP" since="23" />
+		<field name="OPSTR_WRITE_CALENDAR" since="23" />
+		<field name="OPSTR_WRITE_CALL_LOG" since="23" />
+		<field name="OPSTR_WRITE_CONTACTS" since="23" />
+		<field name="OPSTR_WRITE_EXTERNAL_STORAGE" since="23" />
+		<field name="OPSTR_WRITE_SETTINGS" since="23" />
+		<field name="WATCH_FOREGROUND_CHANGES" since="29" />
+	</class>
+	<class name="android/app/AppOpsManager$OnOpActiveChangedListener" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onOpActiveChanged(Ljava/lang/String;ILjava/lang/String;Z)V" />
+	</class>
+	<class name="android/app/AppOpsManager$OnOpChangedListener" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onOpChanged(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/app/AppOpsManager$OnOpNotedCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAsyncNoted(Landroid/app/AsyncNotedAppOp;)V" />
+		<method name="onNoted(Landroid/app/SyncNotedAppOp;)V" />
+		<method name="onSelfNoted(Landroid/app/SyncNotedAppOp;)V" />
+	</class>
+	<class name="android/app/Application" since="1">
+		<extends name="android/content/ContextWrapper" />
+		<implements name="android/content/ComponentCallbacks" removed="14" />
+		<implements name="android/content/ComponentCallbacks2" since="14" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getProcessName()Ljava/lang/String;" since="28" />
+		<method name="onCreate()V" />
+		<method name="onTerminate()V" />
+		<method name="registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="14" />
+		<method name="registerOnProvideAssistDataListener(Landroid/app/Application$OnProvideAssistDataListener;)V" since="18" />
+		<method name="unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="14" />
+		<method name="unregisterOnProvideAssistDataListener(Landroid/app/Application$OnProvideAssistDataListener;)V" since="18" />
+	</class>
+	<class name="android/app/Application$ActivityLifecycleCallbacks" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V" />
+		<method name="onActivityDestroyed(Landroid/app/Activity;)V" />
+		<method name="onActivityPaused(Landroid/app/Activity;)V" />
+		<method name="onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29" />
+		<method name="onActivityPostDestroyed(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPostPaused(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPostResumed(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPostSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29" />
+		<method name="onActivityPostStarted(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPostStopped(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29" />
+		<method name="onActivityPreDestroyed(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPrePaused(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPreResumed(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPreSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29" />
+		<method name="onActivityPreStarted(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityPreStopped(Landroid/app/Activity;)V" since="29" />
+		<method name="onActivityResumed(Landroid/app/Activity;)V" />
+		<method name="onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" />
+		<method name="onActivityStarted(Landroid/app/Activity;)V" />
+		<method name="onActivityStopped(Landroid/app/Activity;)V" />
+	</class>
+	<class name="android/app/Application$OnProvideAssistDataListener" since="18">
+		<extends name="java/lang/Object" />
+		<method name="onProvideAssistData(Landroid/app/Activity;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/ApplicationErrorReport" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getErrorReportReceiver(Landroid/content/Context;Ljava/lang/String;I)Landroid/content/ComponentName;" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+		<field name="TYPE_ANR" />
+		<field name="TYPE_BATTERY" />
+		<field name="TYPE_CRASH" />
+		<field name="TYPE_NONE" />
+		<field name="TYPE_RUNNING_SERVICE" />
+		<field name="anrInfo" />
+		<field name="batteryInfo" />
+		<field name="crashInfo" />
+		<field name="installerPackageName" />
+		<field name="packageName" />
+		<field name="processName" />
+		<field name="runningServiceInfo" />
+		<field name="systemApp" />
+		<field name="time" />
+		<field name="type" />
+	</class>
+	<class name="android/app/ApplicationErrorReport$AnrInfo" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="writeToParcel(Landroid/os/Parcel;I)V" />
+		<field name="activity" />
+		<field name="cause" />
+		<field name="info" />
+	</class>
+	<class name="android/app/ApplicationErrorReport$BatteryInfo" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="writeToParcel(Landroid/os/Parcel;I)V" />
+		<field name="checkinDetails" />
+		<field name="durationMicros" />
+		<field name="usageDetails" />
+		<field name="usagePercent" />
+	</class>
+	<class name="android/app/ApplicationErrorReport$CrashInfo" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="writeToParcel(Landroid/os/Parcel;I)V" />
+		<field name="exceptionClassName" />
+		<field name="exceptionMessage" />
+		<field name="stackTrace" />
+		<field name="throwClassName" />
+		<field name="throwFileName" />
+		<field name="throwLineNumber" />
+		<field name="throwMethodName" />
+	</class>
+	<class name="android/app/ApplicationErrorReport$RunningServiceInfo" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="writeToParcel(Landroid/os/Parcel;I)V" />
+		<field name="durationMillis" />
+		<field name="serviceDetails" />
+	</class>
+	<class name="android/app/ApplicationExitInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDefiningUid()I" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getImportance()I" />
+		<method name="getPackageUid()I" />
+		<method name="getPid()I" />
+		<method name="getProcessName()Ljava/lang/String;" />
+		<method name="getProcessStateSummary()[B" />
+		<method name="getPss()J" />
+		<method name="getRealUid()I" />
+		<method name="getReason()I" />
+		<method name="getRss()J" />
+		<method name="getStatus()I" />
+		<method name="getTimestamp()J" />
+		<method name="getTraceInputStream()Ljava/io/InputStream;" />
+		<method name="getUserHandle()Landroid/os/UserHandle;" />
+		<field name="CREATOR" />
+		<field name="REASON_ANR" />
+		<field name="REASON_CRASH" />
+		<field name="REASON_CRASH_NATIVE" />
+		<field name="REASON_DEPENDENCY_DIED" />
+		<field name="REASON_EXCESSIVE_RESOURCE_USAGE" />
+		<field name="REASON_EXIT_SELF" />
+		<field name="REASON_INITIALIZATION_FAILURE" />
+		<field name="REASON_LOW_MEMORY" />
+		<field name="REASON_OTHER" />
+		<field name="REASON_PERMISSION_CHANGE" />
+		<field name="REASON_SIGNALED" />
+		<field name="REASON_UNKNOWN" />
+		<field name="REASON_USER_REQUESTED" />
+		<field name="REASON_USER_STOPPED" />
+	</class>
+	<class name="android/app/AsyncNotedAppOp" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAttributionTag()Ljava/lang/String;" />
+		<method name="getMessage()Ljava/lang/String;" />
+		<method name="getNotingUid()I" />
+		<method name="getOp()Ljava/lang/String;" />
+		<method name="getTime()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/AuthenticationRequiredException" since="26">
+		<extends name="java/lang/SecurityException" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;Landroid/app/PendingIntent;)V" />
+		<method name="getUserAction()Landroid/app/PendingIntent;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/AutomaticZenRule" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/ZenPolicy;IZ)V" since="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZ)V" deprecated="29" />
+		<method name="getConditionId()Landroid/net/Uri;" />
+		<method name="getConfigurationActivity()Landroid/content/ComponentName;" since="29" />
+		<method name="getCreationTime()J" />
+		<method name="getInterruptionFilter()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getOwner()Landroid/content/ComponentName;" />
+		<method name="getZenPolicy()Landroid/service/notification/ZenPolicy;" since="29" />
+		<method name="isEnabled()Z" />
+		<method name="setConditionId(Landroid/net/Uri;)V" />
+		<method name="setConfigurationActivity(Landroid/content/ComponentName;)V" since="29" />
+		<method name="setEnabled(Z)V" />
+		<method name="setInterruptionFilter(I)V" />
+		<method name="setName(Ljava/lang/String;)V" />
+		<method name="setZenPolicy(Landroid/service/notification/ZenPolicy;)V" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/BackgroundServiceStartNotAllowedException" since="31">
+		<extends name="android/app/ServiceStartNotAllowedException" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/DatePickerDialog" since="1">
+		<extends name="android/app/AlertDialog" />
+		<implements name="android/content/DialogInterface$OnClickListener" />
+		<implements name="android/widget/DatePicker$OnDateChangedListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" since="24" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" since="24" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILandroid/app/DatePickerDialog$OnDateSetListener;III)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/app/DatePickerDialog$OnDateSetListener;III)V" />
+		<method name="getDatePicker()Landroid/widget/DatePicker;" since="11" />
+		<method name="setOnDateSetListener(Landroid/app/DatePickerDialog$OnDateSetListener;)V" since="24" />
+		<method name="updateDate(III)V" />
+	</class>
+	<class name="android/app/DatePickerDialog$OnDateSetListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onDateSet(Landroid/widget/DatePicker;III)V" />
+	</class>
+	<class name="android/app/Dialog" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/DialogInterface" />
+		<implements name="android/view/KeyEvent$Callback" />
+		<implements name="android/view/View$OnCreateContextMenuListener" />
+		<implements name="android/view/Window$Callback" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ZLandroid/content/DialogInterface$OnCancelListener;)V" />
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="closeOptionsMenu()V" />
+		<method name="create()V" since="21" />
+		<method name="findViewById(I)Landroid/view/View;" />
+		<method name="getActionBar()Landroid/app/ActionBar;" since="11" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getCurrentFocus()Landroid/view/View;" />
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" />
+		<method name="getOwnerActivity()Landroid/app/Activity;" />
+		<method name="getSearchEvent()Landroid/view/SearchEvent;" since="23" />
+		<method name="getVolumeControlStream()I" />
+		<method name="getWindow()Landroid/view/Window;" />
+		<method name="hide()V" />
+		<method name="invalidateOptionsMenu()V" since="11" />
+		<method name="isShowing()Z" />
+		<method name="onBackPressed()V" since="5" />
+		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z" />
+		<method name="onContextMenuClosed(Landroid/view/Menu;)V" />
+		<method name="onCreate(Landroid/os/Bundle;)V" />
+		<method name="onCreateOptionsMenu(Landroid/view/Menu;)Z" />
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12" />
+		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" since="11" />
+		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z" />
+		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V" />
+		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)Z" />
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V" />
+		<method name="onSaveInstanceState()Landroid/os/Bundle;" />
+		<method name="onStart()V" />
+		<method name="onStop()V" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="openContextMenu(Landroid/view/View;)V" />
+		<method name="openOptionsMenu()V" />
+		<method name="registerForContextMenu(Landroid/view/View;)V" />
+		<method name="requestWindowFeature(I)Z" />
+		<method name="requireViewById(I)Landroid/view/View;" since="28" />
+		<method name="setCancelMessage(Landroid/os/Message;)V" />
+		<method name="setCancelable(Z)V" />
+		<method name="setCanceledOnTouchOutside(Z)V" />
+		<method name="setContentView(I)V" />
+		<method name="setContentView(Landroid/view/View;)V" />
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="setDismissMessage(Landroid/os/Message;)V" />
+		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V" />
+		<method name="setFeatureDrawableAlpha(II)V" />
+		<method name="setFeatureDrawableResource(II)V" />
+		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V" />
+		<method name="setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)V" />
+		<method name="setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)V" />
+		<method name="setOnKeyListener(Landroid/content/DialogInterface$OnKeyListener;)V" />
+		<method name="setOnShowListener(Landroid/content/DialogInterface$OnShowListener;)V" since="8" />
+		<method name="setOwnerActivity(Landroid/app/Activity;)V" />
+		<method name="setTitle(I)V" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" />
+		<method name="setVolumeControlStream(I)V" />
+		<method name="show()V" />
+		<method name="takeKeyEvents(Z)V" />
+		<method name="unregisterForContextMenu(Landroid/view/View;)V" />
+	</class>
+	<class name="android/app/DialogFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment" />
+		<implements name="android/content/DialogInterface$OnCancelListener" />
+		<implements name="android/content/DialogInterface$OnDismissListener" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="dismiss()V" deprecated="29" />
+		<method name="dismissAllowingStateLoss()V" since="12" deprecated="29" />
+		<method name="getDialog()Landroid/app/Dialog;" deprecated="29" />
+		<method name="getShowsDialog()Z" deprecated="29" />
+		<method name="getTheme()I" deprecated="29" />
+		<method name="isCancelable()Z" deprecated="29" />
+		<method name="onCreateDialog(Landroid/os/Bundle;)Landroid/app/Dialog;" deprecated="29" />
+		<method name="setCancelable(Z)V" deprecated="29" />
+		<method name="setShowsDialog(Z)V" deprecated="29" />
+		<method name="setStyle(II)V" deprecated="29" />
+		<method name="show(Landroid/app/FragmentManager;Ljava/lang/String;)V" deprecated="29" />
+		<method name="show(Landroid/app/FragmentTransaction;Ljava/lang/String;)I" deprecated="29" />
+		<field name="STYLE_NORMAL" deprecated="29" />
+		<field name="STYLE_NO_FRAME" deprecated="29" />
+		<field name="STYLE_NO_INPUT" deprecated="29" />
+		<field name="STYLE_NO_TITLE" deprecated="29" />
+	</class>
+	<class name="android/app/DirectAction" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getLocusId()Landroid/content/LocusId;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/DirectAction$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="build()Landroid/app/DirectAction;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/app/DirectAction$Builder;" />
+		<method name="setLocusId(Landroid/content/LocusId;)Landroid/app/DirectAction$Builder;" />
+	</class>
+	<class name="android/app/DownloadManager" since="9">
+		<extends name="java/lang/Object" />
+		<method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZ)J" since="12" deprecated="29" />
+		<method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZLandroid/net/Uri;Landroid/net/Uri;)J" since="24" deprecated="29" />
+		<method name="enqueue(Landroid/app/DownloadManager$Request;)J" />
+		<method name="getMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;" since="11" />
+		<method name="getMimeTypeForDownloadedFile(J)Ljava/lang/String;" since="11" />
+		<method name="getRecommendedMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;" since="11" />
+		<method name="getUriForDownloadedFile(J)Landroid/net/Uri;" since="11" />
+		<method name="openDownloadedFile(J)Landroid/os/ParcelFileDescriptor;" />
+		<method name="query(Landroid/app/DownloadManager$Query;)Landroid/database/Cursor;" />
+		<method name="remove([J)I" />
+		<field name="ACTION_DOWNLOAD_COMPLETE" />
+		<field name="ACTION_NOTIFICATION_CLICKED" />
+		<field name="ACTION_VIEW_DOWNLOADS" />
+		<field name="COLUMN_BYTES_DOWNLOADED_SO_FAR" />
+		<field name="COLUMN_DESCRIPTION" />
+		<field name="COLUMN_ID" />
+		<field name="COLUMN_LAST_MODIFIED_TIMESTAMP" />
+		<field name="COLUMN_LOCAL_FILENAME" since="11" deprecated="24" />
+		<field name="COLUMN_LOCAL_URI" />
+		<field name="COLUMN_MEDIAPROVIDER_URI" />
+		<field name="COLUMN_MEDIA_TYPE" />
+		<field name="COLUMN_REASON" />
+		<field name="COLUMN_STATUS" />
+		<field name="COLUMN_TITLE" />
+		<field name="COLUMN_TOTAL_SIZE_BYTES" />
+		<field name="COLUMN_URI" />
+		<field name="ERROR_CANNOT_RESUME" />
+		<field name="ERROR_DEVICE_NOT_FOUND" />
+		<field name="ERROR_FILE_ALREADY_EXISTS" />
+		<field name="ERROR_FILE_ERROR" />
+		<field name="ERROR_HTTP_DATA_ERROR" />
+		<field name="ERROR_INSUFFICIENT_SPACE" />
+		<field name="ERROR_TOO_MANY_REDIRECTS" />
+		<field name="ERROR_UNHANDLED_HTTP_CODE" />
+		<field name="ERROR_UNKNOWN" />
+		<field name="EXTRA_DOWNLOAD_ID" />
+		<field name="EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS" since="11" />
+		<field name="INTENT_EXTRAS_SORT_BY_SIZE" since="12" />
+		<field name="PAUSED_QUEUED_FOR_WIFI" />
+		<field name="PAUSED_UNKNOWN" />
+		<field name="PAUSED_WAITING_FOR_NETWORK" />
+		<field name="PAUSED_WAITING_TO_RETRY" />
+		<field name="STATUS_FAILED" />
+		<field name="STATUS_PAUSED" />
+		<field name="STATUS_PENDING" />
+		<field name="STATUS_RUNNING" />
+		<field name="STATUS_SUCCESSFUL" />
+	</class>
+	<class name="android/app/DownloadManager$Query" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setFilterById([J)Landroid/app/DownloadManager$Query;" />
+		<method name="setFilterByStatus(I)Landroid/app/DownloadManager$Query;" />
+	</class>
+	<class name="android/app/DownloadManager$Request" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;)V" />
+		<method name="addRequestHeader(Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;" />
+		<method name="allowScanningByMediaScanner()V" since="11" deprecated="29" />
+		<method name="setAllowedNetworkTypes(I)Landroid/app/DownloadManager$Request;" />
+		<method name="setAllowedOverMetered(Z)Landroid/app/DownloadManager$Request;" since="16" />
+		<method name="setAllowedOverRoaming(Z)Landroid/app/DownloadManager$Request;" />
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/app/DownloadManager$Request;" />
+		<method name="setDestinationInExternalFilesDir(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;" />
+		<method name="setDestinationInExternalPublicDir(Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;" />
+		<method name="setDestinationUri(Landroid/net/Uri;)Landroid/app/DownloadManager$Request;" />
+		<method name="setMimeType(Ljava/lang/String;)Landroid/app/DownloadManager$Request;" />
+		<method name="setNotificationVisibility(I)Landroid/app/DownloadManager$Request;" since="11" />
+		<method name="setRequiresCharging(Z)Landroid/app/DownloadManager$Request;" since="24" />
+		<method name="setRequiresDeviceIdle(Z)Landroid/app/DownloadManager$Request;" since="24" />
+		<method name="setShowRunningNotification(Z)Landroid/app/DownloadManager$Request;" deprecated="15" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/app/DownloadManager$Request;" />
+		<method name="setVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Request;" deprecated="29" />
+		<field name="NETWORK_MOBILE" />
+		<field name="NETWORK_WIFI" />
+		<field name="VISIBILITY_HIDDEN" since="11" />
+		<field name="VISIBILITY_VISIBLE" since="11" />
+		<field name="VISIBILITY_VISIBLE_NOTIFY_COMPLETED" since="11" />
+		<field name="VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION" since="12" />
+	</class>
+	<class name="android/app/ExpandableListActivity" since="1" deprecated="30">
+		<extends name="android/app/Activity" />
+		<implements name="android/widget/ExpandableListView$OnChildClickListener" />
+		<implements name="android/widget/ExpandableListView$OnGroupCollapseListener" />
+		<implements name="android/widget/ExpandableListView$OnGroupExpandListener" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;" deprecated="30" />
+		<method name="getExpandableListView()Landroid/widget/ExpandableListView;" deprecated="30" />
+		<method name="getSelectedId()J" deprecated="30" />
+		<method name="getSelectedPosition()J" deprecated="30" />
+		<method name="setListAdapter(Landroid/widget/ExpandableListAdapter;)V" deprecated="30" />
+		<method name="setSelectedChild(IIZ)Z" deprecated="30" />
+		<method name="setSelectedGroup(I)V" deprecated="30" />
+	</class>
+	<class name="android/app/ForegroundServiceStartNotAllowedException" since="31">
+		<extends name="android/app/ServiceStartNotAllowedException" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/Fragment" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/ComponentCallbacks" removed="14" />
+		<implements name="android/content/ComponentCallbacks2" since="14" />
+		<implements name="android/view/View$OnCreateContextMenuListener" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29" />
+		<method name="getActivity()Landroid/app/Activity;" deprecated="29" />
+		<method name="getAllowEnterTransitionOverlap()Z" since="21" deprecated="29" />
+		<method name="getAllowReturnTransitionOverlap()Z" since="21" deprecated="29" />
+		<method name="getArguments()Landroid/os/Bundle;" deprecated="29" />
+		<method name="getChildFragmentManager()Landroid/app/FragmentManager;" since="17" deprecated="29" />
+		<method name="getContext()Landroid/content/Context;" since="23" deprecated="29" />
+		<method name="getEnterTransition()Landroid/transition/Transition;" since="21" deprecated="29" />
+		<method name="getExitTransition()Landroid/transition/Transition;" since="21" deprecated="29" />
+		<method name="getFragmentManager()Landroid/app/FragmentManager;" deprecated="29" />
+		<method name="getHost()Ljava/lang/Object;" since="23" deprecated="29" />
+		<method name="getId()I" deprecated="29" />
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="26" deprecated="29" />
+		<method name="getLoaderManager()Landroid/app/LoaderManager;" deprecated="28" />
+		<method name="getParentFragment()Landroid/app/Fragment;" since="17" deprecated="29" />
+		<method name="getReenterTransition()Landroid/transition/Transition;" since="21" deprecated="29" />
+		<method name="getResources()Landroid/content/res/Resources;" deprecated="29" />
+		<method name="getRetainInstance()Z" deprecated="29" />
+		<method name="getReturnTransition()Landroid/transition/Transition;" since="21" deprecated="29" />
+		<method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21" deprecated="29" />
+		<method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21" deprecated="29" />
+		<method name="getString(I)Ljava/lang/String;" deprecated="29" />
+		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;" deprecated="29" />
+		<method name="getTag()Ljava/lang/String;" deprecated="29" />
+		<method name="getTargetFragment()Landroid/app/Fragment;" deprecated="29" />
+		<method name="getTargetRequestCode()I" deprecated="29" />
+		<method name="getText(I)Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getUserVisibleHint()Z" since="15" deprecated="29" />
+		<method name="getView()Landroid/view/View;" deprecated="29" />
+		<method name="instantiate(Landroid/content/Context;Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29" />
+		<method name="instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;" deprecated="29" />
+		<method name="isAdded()Z" deprecated="29" />
+		<method name="isDetached()Z" since="13" deprecated="29" />
+		<method name="isHidden()Z" deprecated="29" />
+		<method name="isInLayout()Z" deprecated="29" />
+		<method name="isRemoving()Z" deprecated="29" />
+		<method name="isResumed()Z" deprecated="29" />
+		<method name="isStateSaved()Z" since="26" deprecated="29" />
+		<method name="isVisible()Z" deprecated="29" />
+		<method name="onActivityCreated(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onActivityResult(IILandroid/content/Intent;)V" deprecated="29" />
+		<method name="onAttach(Landroid/app/Activity;)V" deprecated="23" />
+		<method name="onAttach(Landroid/content/Context;)V" since="23" deprecated="29" />
+		<method name="onAttachFragment(Landroid/app/Fragment;)V" since="24" deprecated="29" />
+		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z" deprecated="29" />
+		<method name="onCreate(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onCreateAnimator(IZI)Landroid/animation/Animator;" deprecated="29" />
+		<method name="onCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V" deprecated="29" />
+		<method name="onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;" deprecated="29" />
+		<method name="onDestroy()V" deprecated="29" />
+		<method name="onDestroyOptionsMenu()V" deprecated="29" />
+		<method name="onDestroyView()V" deprecated="29" />
+		<method name="onDetach()V" deprecated="29" />
+		<method name="onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;" since="26" deprecated="29" />
+		<method name="onHiddenChanged(Z)V" deprecated="29" />
+		<method name="onInflate(Landroid/app/Activity;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="12" deprecated="23" />
+		<method name="onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="23" deprecated="29" />
+		<method name="onInflate(Landroid/util/AttributeSet;Landroid/os/Bundle;)V" deprecated="15" />
+		<method name="onMultiWindowModeChanged(Z)V" since="24" deprecated="26" />
+		<method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29" />
+		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z" deprecated="29" />
+		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V" deprecated="29" />
+		<method name="onPause()V" deprecated="29" />
+		<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26" />
+		<method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29" />
+		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)V" deprecated="29" />
+		<method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23" deprecated="29" />
+		<method name="onResume()V" deprecated="29" />
+		<method name="onSaveInstanceState(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onStart()V" deprecated="29" />
+		<method name="onStop()V" deprecated="29" />
+		<method name="onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V" since="13" deprecated="29" />
+		<method name="onViewStateRestored(Landroid/os/Bundle;)V" since="17" deprecated="29" />
+		<method name="postponeEnterTransition()V" since="26" deprecated="29" />
+		<method name="registerForContextMenu(Landroid/view/View;)V" deprecated="29" />
+		<method name="requestPermissions([Ljava/lang/String;I)V" since="23" deprecated="29" />
+		<method name="setAllowEnterTransitionOverlap(Z)V" since="21" deprecated="29" />
+		<method name="setAllowReturnTransitionOverlap(Z)V" since="21" deprecated="29" />
+		<method name="setArguments(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" deprecated="29" />
+		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29" />
+		<method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" deprecated="29" />
+		<method name="setExitTransition(Landroid/transition/Transition;)V" since="21" deprecated="29" />
+		<method name="setHasOptionsMenu(Z)V" deprecated="29" />
+		<method name="setInitialSavedState(Landroid/app/Fragment$SavedState;)V" since="13" deprecated="29" />
+		<method name="setMenuVisibility(Z)V" since="14" deprecated="29" />
+		<method name="setReenterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29" />
+		<method name="setRetainInstance(Z)V" deprecated="29" />
+		<method name="setReturnTransition(Landroid/transition/Transition;)V" since="21" deprecated="29" />
+		<method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29" />
+		<method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21" deprecated="29" />
+		<method name="setTargetFragment(Landroid/app/Fragment;I)V" deprecated="29" />
+		<method name="setUserVisibleHint(Z)V" since="15" deprecated="29" />
+		<method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23" deprecated="29" />
+		<method name="startActivity(Landroid/content/Intent;)V" deprecated="29" />
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16" deprecated="29" />
+		<method name="startActivityForResult(Landroid/content/Intent;I)V" deprecated="29" />
+		<method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="29" />
+		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24" deprecated="29" />
+		<method name="startPostponedEnterTransition()V" since="26" deprecated="29" />
+		<method name="unregisterForContextMenu(Landroid/view/View;)V" deprecated="29" />
+	</class>
+	<class name="android/app/Fragment$InstantiationException" since="11" deprecated="28">
+		<extends name="android/util/AndroidRuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Exception;)V" deprecated="29" />
+	</class>
+	<class name="android/app/Fragment$SavedState" since="13" deprecated="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentBreadCrumbs" since="11" deprecated="21">
+		<extends name="android/view/ViewGroup" />
+		<implements name="android/app/FragmentManager$OnBackStackChangedListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="setActivity(Landroid/app/Activity;)V" deprecated="29" />
+		<method name="setMaxVisible(I)V" deprecated="29" />
+		<method name="setOnBreadCrumbClickListener(Landroid/app/FragmentBreadCrumbs$OnBreadCrumbClickListener;)V" since="12" deprecated="29" />
+		<method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" deprecated="29" />
+		<method name="setTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentBreadCrumbs$OnBreadCrumbClickListener" since="12" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="onBreadCrumbClick(Landroid/app/FragmentManager$BackStackEntry;I)Z" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentContainer" since="23" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="onFindViewById(I)Landroid/view/View;" deprecated="29" />
+		<method name="onHasView()Z" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentController" since="23" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="attachHost(Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="createController(Landroid/app/FragmentHostCallback;)Landroid/app/FragmentController;" deprecated="29" />
+		<method name="dispatchActivityCreated()V" deprecated="29" />
+		<method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V" deprecated="29" />
+		<method name="dispatchContextItemSelected(Landroid/view/MenuItem;)Z" deprecated="29" />
+		<method name="dispatchCreate()V" deprecated="29" />
+		<method name="dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z" deprecated="29" />
+		<method name="dispatchDestroy()V" deprecated="29" />
+		<method name="dispatchDestroyView()V" deprecated="29" />
+		<method name="dispatchLowMemory()V" deprecated="29" />
+		<method name="dispatchMultiWindowModeChanged(Z)V" since="24" deprecated="26" />
+		<method name="dispatchMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29" />
+		<method name="dispatchOptionsItemSelected(Landroid/view/MenuItem;)Z" deprecated="29" />
+		<method name="dispatchOptionsMenuClosed(Landroid/view/Menu;)V" deprecated="29" />
+		<method name="dispatchPause()V" deprecated="29" />
+		<method name="dispatchPictureInPictureModeChanged(Z)V" since="24" deprecated="26" />
+		<method name="dispatchPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29" />
+		<method name="dispatchPrepareOptionsMenu(Landroid/view/Menu;)Z" deprecated="29" />
+		<method name="dispatchResume()V" deprecated="29" />
+		<method name="dispatchStart()V" deprecated="29" />
+		<method name="dispatchStop()V" deprecated="29" />
+		<method name="dispatchTrimMemory(I)V" deprecated="29" />
+		<method name="doLoaderDestroy()V" deprecated="29" />
+		<method name="doLoaderStart()V" deprecated="29" />
+		<method name="doLoaderStop(Z)V" deprecated="29" />
+		<method name="dumpLoaders(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29" />
+		<method name="execPendingActions()Z" deprecated="29" />
+		<method name="findFragmentByWho(Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29" />
+		<method name="getFragmentManager()Landroid/app/FragmentManager;" deprecated="29" />
+		<method name="getLoaderManager()Landroid/app/LoaderManager;" deprecated="29" />
+		<method name="noteStateNotSaved()V" deprecated="29" />
+		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;" deprecated="29" />
+		<method name="reportLoaderStart()V" deprecated="29" />
+		<method name="restoreAllState(Landroid/os/Parcelable;Landroid/app/FragmentManagerNonConfig;)V" since="24" deprecated="29" />
+		<method name="restoreAllState(Landroid/os/Parcelable;Ljava/util/List;)V" deprecated="24" />
+		<method name="restoreLoaderNonConfig(Landroid/util/ArrayMap;)V" deprecated="29" />
+		<method name="retainLoaderNonConfig()Landroid/util/ArrayMap;" deprecated="29" />
+		<method name="retainNestedNonConfig()Landroid/app/FragmentManagerNonConfig;" since="24" deprecated="29" />
+		<method name="retainNonConfig()Ljava/util/List;" deprecated="24" />
+		<method name="saveAllState()Landroid/os/Parcelable;" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentHostCallback" since="23" deprecated="28">
+		<extends name="android/app/FragmentContainer" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/os/Handler;I)V" deprecated="29" />
+		<method name="onAttachFragment(Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="onDump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29" />
+		<method name="onGetHost()Ljava/lang/Object;" deprecated="29" />
+		<method name="onGetLayoutInflater()Landroid/view/LayoutInflater;" deprecated="29" />
+		<method name="onGetWindowAnimations()I" deprecated="29" />
+		<method name="onHasWindowAnimations()Z" deprecated="29" />
+		<method name="onInvalidateOptionsMenu()V" deprecated="29" />
+		<method name="onRequestPermissionsFromFragment(Landroid/app/Fragment;[Ljava/lang/String;I)V" deprecated="29" />
+		<method name="onShouldSaveFragmentState(Landroid/app/Fragment;)Z" deprecated="29" />
+		<method name="onStartActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V" deprecated="29" />
+		<method name="onStartIntentSenderFromFragment(Landroid/app/Fragment;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24" deprecated="29" />
+		<method name="onUseFragmentManagerInflaterFactory()Z" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentManager" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="addOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V" deprecated="29" />
+		<method name="beginTransaction()Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29" />
+		<method name="enableDebugLogging(Z)V" deprecated="29" />
+		<method name="executePendingTransactions()Z" deprecated="29" />
+		<method name="findFragmentById(I)Landroid/app/Fragment;" deprecated="29" />
+		<method name="findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29" />
+		<method name="getBackStackEntryAt(I)Landroid/app/FragmentManager$BackStackEntry;" deprecated="29" />
+		<method name="getBackStackEntryCount()I" deprecated="29" />
+		<method name="getFragment(Landroid/os/Bundle;Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29" />
+		<method name="getFragments()Ljava/util/List;" since="26" deprecated="29" />
+		<method name="getPrimaryNavigationFragment()Landroid/app/Fragment;" since="26" deprecated="29" />
+		<method name="invalidateOptionsMenu()V" since="14" deprecated="29" />
+		<method name="isDestroyed()Z" since="17" deprecated="29" />
+		<method name="isStateSaved()Z" since="26" deprecated="29" />
+		<method name="popBackStack()V" deprecated="29" />
+		<method name="popBackStack(II)V" deprecated="29" />
+		<method name="popBackStack(Ljava/lang/String;I)V" deprecated="29" />
+		<method name="popBackStackImmediate()Z" deprecated="29" />
+		<method name="popBackStackImmediate(II)Z" deprecated="29" />
+		<method name="popBackStackImmediate(Ljava/lang/String;I)Z" deprecated="29" />
+		<method name="putFragment(Landroid/os/Bundle;Ljava/lang/String;Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="registerFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;Z)V" since="26" deprecated="29" />
+		<method name="removeOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V" deprecated="29" />
+		<method name="saveFragmentInstanceState(Landroid/app/Fragment;)Landroid/app/Fragment$SavedState;" since="13" deprecated="29" />
+		<method name="unregisterFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;)V" since="26" deprecated="29" />
+		<field name="POP_BACK_STACK_INCLUSIVE" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentManager$BackStackEntry" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="getBreadCrumbShortTitle()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getBreadCrumbShortTitleRes()I" deprecated="29" />
+		<method name="getBreadCrumbTitle()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getBreadCrumbTitleRes()I" deprecated="29" />
+		<method name="getId()I" deprecated="29" />
+		<method name="getName()Ljava/lang/String;" since="14" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentManager$FragmentLifecycleCallbacks" since="26" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="onFragmentActivityCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onFragmentAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V" deprecated="29" />
+		<method name="onFragmentCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onFragmentDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="onFragmentDetached(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="onFragmentPaused(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="onFragmentPreAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V" deprecated="29" />
+		<method name="onFragmentPreCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onFragmentResumed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="onFragmentSaveInstanceState(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onFragmentStarted(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="onFragmentStopped(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29" />
+		<method name="onFragmentViewCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/view/View;Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="onFragmentViewDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentManager$OnBackStackChangedListener" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="onBackStackChanged()V" deprecated="29" />
+	</class>
+	<class name="android/app/FragmentManagerNonConfig" since="24" deprecated="28">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/app/FragmentTransaction" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="add(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="add(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="add(Landroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="addSharedElement(Landroid/view/View;Ljava/lang/String;)Landroid/app/FragmentTransaction;" since="21" deprecated="29" />
+		<method name="addToBackStack(Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="attach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13" deprecated="29" />
+		<method name="commit()I" deprecated="29" />
+		<method name="commitAllowingStateLoss()I" deprecated="29" />
+		<method name="commitNow()V" since="24" deprecated="29" />
+		<method name="commitNowAllowingStateLoss()V" since="24" deprecated="29" />
+		<method name="detach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13" deprecated="29" />
+		<method name="disallowAddToBackStack()Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="hide(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="isAddToBackStackAllowed()Z" deprecated="29" />
+		<method name="isEmpty()Z" deprecated="29" />
+		<method name="remove(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="replace(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="runOnCommit(Ljava/lang/Runnable;)Landroid/app/FragmentTransaction;" since="26" deprecated="29" />
+		<method name="setBreadCrumbShortTitle(I)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="setBreadCrumbShortTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="setBreadCrumbTitle(I)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="setBreadCrumbTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="setCustomAnimations(II)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="setCustomAnimations(IIII)Landroid/app/FragmentTransaction;" since="13" deprecated="29" />
+		<method name="setPrimaryNavigationFragment(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="26" deprecated="29" />
+		<method name="setReorderingAllowed(Z)Landroid/app/FragmentTransaction;" since="26" deprecated="29" />
+		<method name="setTransition(I)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="setTransitionStyle(I)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<method name="show(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29" />
+		<field name="TRANSIT_ENTER_MASK" deprecated="29" />
+		<field name="TRANSIT_EXIT_MASK" deprecated="29" />
+		<field name="TRANSIT_FRAGMENT_CLOSE" deprecated="29" />
+		<field name="TRANSIT_FRAGMENT_FADE" deprecated="29" />
+		<field name="TRANSIT_FRAGMENT_OPEN" deprecated="29" />
+		<field name="TRANSIT_NONE" deprecated="29" />
+		<field name="TRANSIT_UNSET" deprecated="29" />
+	</class>
+	<class name="android/app/GameManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getGameMode()I" />
+		<field name="GAME_MODE_BATTERY" />
+		<field name="GAME_MODE_PERFORMANCE" />
+		<field name="GAME_MODE_STANDARD" />
+		<field name="GAME_MODE_UNSUPPORTED" />
+	</class>
+	<class name="android/app/Instrumentation" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="acquireLooperManager(Landroid/os/Looper;)Landroid/os/TestLooperManager;" since="26" />
+		<method name="addMonitor(Landroid/app/Instrumentation$ActivityMonitor;)V" />
+		<method name="addMonitor(Landroid/content/IntentFilter;Landroid/app/Instrumentation$ActivityResult;Z)Landroid/app/Instrumentation$ActivityMonitor;" />
+		<method name="addMonitor(Ljava/lang/String;Landroid/app/Instrumentation$ActivityResult;Z)Landroid/app/Instrumentation$ActivityMonitor;" />
+		<method name="addResults(Landroid/os/Bundle;)V" since="26" />
+		<method name="callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;)V" />
+		<method name="callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="callActivityOnDestroy(Landroid/app/Activity;)V" />
+		<method name="callActivityOnNewIntent(Landroid/app/Activity;Landroid/content/Intent;)V" />
+		<method name="callActivityOnPause(Landroid/app/Activity;)V" />
+		<method name="callActivityOnPictureInPictureRequested(Landroid/app/Activity;)V" since="30" />
+		<method name="callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;)V" />
+		<method name="callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="callActivityOnRestart(Landroid/app/Activity;)V" />
+		<method name="callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" />
+		<method name="callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="callActivityOnResume(Landroid/app/Activity;)V" />
+		<method name="callActivityOnSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" />
+		<method name="callActivityOnSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="callActivityOnStart(Landroid/app/Activity;)V" />
+		<method name="callActivityOnStop(Landroid/app/Activity;)V" />
+		<method name="callActivityOnUserLeaving(Landroid/app/Activity;)V" since="3" />
+		<method name="callApplicationOnCreate(Landroid/app/Application;)V" />
+		<method name="checkMonitorHit(Landroid/app/Instrumentation$ActivityMonitor;I)Z" />
+		<method name="endPerformanceSnapshot()V" />
+		<method name="finish(ILandroid/os/Bundle;)V" />
+		<method name="getAllocCounts()Landroid/os/Bundle;" />
+		<method name="getBinderCounts()Landroid/os/Bundle;" />
+		<method name="getComponentName()Landroid/content/ComponentName;" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getProcessName()Ljava/lang/String;" since="26" />
+		<method name="getTargetContext()Landroid/content/Context;" />
+		<method name="getUiAutomation()Landroid/app/UiAutomation;" since="18" />
+		<method name="getUiAutomation(I)Landroid/app/UiAutomation;" since="24" />
+		<method name="invokeContextMenuAction(Landroid/app/Activity;II)Z" />
+		<method name="invokeMenuActionSync(Landroid/app/Activity;II)Z" />
+		<method name="isProfiling()Z" />
+		<method name="newActivity(Ljava/lang/Class;Landroid/content/Context;Landroid/os/IBinder;Landroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Ljava/lang/Object;)Landroid/app/Activity;" />
+		<method name="newActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;" />
+		<method name="newApplication(Ljava/lang/Class;Landroid/content/Context;)Landroid/app/Application;" />
+		<method name="newApplication(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;" />
+		<method name="onCreate(Landroid/os/Bundle;)V" />
+		<method name="onDestroy()V" />
+		<method name="onException(Ljava/lang/Object;Ljava/lang/Throwable;)Z" />
+		<method name="onStart()V" />
+		<method name="removeMonitor(Landroid/app/Instrumentation$ActivityMonitor;)V" />
+		<method name="runOnMainSync(Ljava/lang/Runnable;)V" />
+		<method name="sendCharacterSync(I)V" />
+		<method name="sendKeyDownUpSync(I)V" />
+		<method name="sendKeySync(Landroid/view/KeyEvent;)V" />
+		<method name="sendPointerSync(Landroid/view/MotionEvent;)V" />
+		<method name="sendStatus(ILandroid/os/Bundle;)V" />
+		<method name="sendStringSync(Ljava/lang/String;)V" />
+		<method name="sendTrackballEventSync(Landroid/view/MotionEvent;)V" />
+		<method name="setAutomaticPerformanceSnapshots()V" />
+		<method name="setInTouchMode(Z)V" />
+		<method name="start()V" />
+		<method name="startActivitySync(Landroid/content/Intent;)Landroid/app/Activity;" />
+		<method name="startActivitySync(Landroid/content/Intent;Landroid/os/Bundle;)Landroid/app/Activity;" since="28" />
+		<method name="startAllocCounting()V" deprecated="23" />
+		<method name="startPerformanceSnapshot()V" />
+		<method name="startProfiling()V" />
+		<method name="stopAllocCounting()V" deprecated="23" />
+		<method name="stopProfiling()V" />
+		<method name="waitForIdle(Ljava/lang/Runnable;)V" />
+		<method name="waitForIdleSync()V" />
+		<method name="waitForMonitor(Landroid/app/Instrumentation$ActivityMonitor;)Landroid/app/Activity;" />
+		<method name="waitForMonitorWithTimeout(Landroid/app/Instrumentation$ActivityMonitor;J)Landroid/app/Activity;" />
+		<field name="REPORT_KEY_IDENTIFIER" />
+		<field name="REPORT_KEY_STREAMRESULT" />
+	</class>
+	<class name="android/app/Instrumentation$ActivityMonitor" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="26" />
+		<method name="&lt;init&gt;(Landroid/content/IntentFilter;Landroid/app/Instrumentation$ActivityResult;Z)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/app/Instrumentation$ActivityResult;Z)V" />
+		<method name="getFilter()Landroid/content/IntentFilter;" />
+		<method name="getHits()I" />
+		<method name="getLastActivity()Landroid/app/Activity;" />
+		<method name="getResult()Landroid/app/Instrumentation$ActivityResult;" />
+		<method name="isBlocking()Z" />
+		<method name="onStartActivity(Landroid/content/Intent;)Landroid/app/Instrumentation$ActivityResult;" since="26" />
+		<method name="waitForActivity()Landroid/app/Activity;" />
+		<method name="waitForActivityWithTimeout(J)Landroid/app/Activity;" />
+	</class>
+	<class name="android/app/Instrumentation$ActivityResult" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILandroid/content/Intent;)V" />
+		<method name="getResultCode()I" />
+		<method name="getResultData()Landroid/content/Intent;" />
+	</class>
+	<class name="android/app/IntentService" since="3" deprecated="30">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="30" />
+		<method name="onHandleIntent(Landroid/content/Intent;)V" deprecated="30" />
+		<method name="setIntentRedelivery(Z)V" since="5" deprecated="30" />
+	</class>
+	<class name="android/app/KeyguardManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createConfirmDeviceCredentialIntent(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/Intent;" since="21" deprecated="29" />
+		<method name="exitKeyguardSecurely(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V" deprecated="15" />
+		<method name="inKeyguardRestrictedInputMode()Z" deprecated="28" />
+		<method name="isDeviceLocked()Z" since="22" />
+		<method name="isDeviceSecure()Z" since="23" />
+		<method name="isKeyguardLocked()Z" since="16" />
+		<method name="isKeyguardSecure()Z" since="16" />
+		<method name="newKeyguardLock(Ljava/lang/String;)Landroid/app/KeyguardManager$KeyguardLock;" deprecated="15" />
+		<method name="requestDismissKeyguard(Landroid/app/Activity;Landroid/app/KeyguardManager$KeyguardDismissCallback;)V" since="26" />
+	</class>
+	<class name="android/app/KeyguardManager$KeyguardDismissCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDismissCancelled()V" />
+		<method name="onDismissError()V" />
+		<method name="onDismissSucceeded()V" />
+	</class>
+	<class name="android/app/KeyguardManager$KeyguardLock" since="1" deprecated="15">
+		<extends name="java/lang/Object" />
+		<method name="disableKeyguard()V" deprecated="29" />
+		<method name="reenableKeyguard()V" deprecated="29" />
+	</class>
+	<class name="android/app/KeyguardManager$OnKeyguardExitResult" since="1" deprecated="26">
+		<extends name="java/lang/Object" />
+		<method name="onKeyguardExitResult(Z)V" deprecated="29" />
+	</class>
+	<class name="android/app/LauncherActivity" since="1" deprecated="30">
+		<extends name="android/app/ListActivity" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="getTargetIntent()Landroid/content/Intent;" deprecated="30" />
+		<method name="intentForPosition(I)Landroid/content/Intent;" since="3" deprecated="30" />
+		<method name="itemForPosition(I)Landroid/app/LauncherActivity$ListItem;" since="4" deprecated="30" />
+		<method name="makeListItems()Ljava/util/List;" since="3" deprecated="30" />
+		<method name="onQueryPackageManager(Landroid/content/Intent;)Ljava/util/List;" since="5" deprecated="30" />
+		<method name="onSetContentView()V" since="5" deprecated="30" />
+	</class>
+	<class name="android/app/LauncherActivity$IconResizer" since="3" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/app/LauncherActivity;)V" deprecated="30" />
+		<method name="createIconThumbnail(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;" deprecated="30" />
+	</class>
+	<class name="android/app/LauncherActivity$ListItem" since="3" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<field name="className" deprecated="30" />
+		<field name="extras" deprecated="30" />
+		<field name="icon" deprecated="30" />
+		<field name="label" deprecated="30" />
+		<field name="packageName" deprecated="30" />
+		<field name="resolveInfo" since="4" deprecated="30" />
+	</class>
+	<class name="android/app/ListActivity" since="1" deprecated="30">
+		<extends name="android/app/Activity" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="getListAdapter()Landroid/widget/ListAdapter;" deprecated="30" />
+		<method name="getListView()Landroid/widget/ListView;" deprecated="30" />
+		<method name="getSelectedItemId()J" deprecated="30" />
+		<method name="getSelectedItemPosition()I" deprecated="30" />
+		<method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V" deprecated="30" />
+		<method name="setListAdapter(Landroid/widget/ListAdapter;)V" deprecated="30" />
+		<method name="setSelection(I)V" deprecated="30" />
+	</class>
+	<class name="android/app/ListFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getListAdapter()Landroid/widget/ListAdapter;" deprecated="29" />
+		<method name="getListView()Landroid/widget/ListView;" deprecated="29" />
+		<method name="getSelectedItemId()J" deprecated="29" />
+		<method name="getSelectedItemPosition()I" deprecated="29" />
+		<method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V" deprecated="29" />
+		<method name="setEmptyText(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setListAdapter(Landroid/widget/ListAdapter;)V" deprecated="29" />
+		<method name="setListShown(Z)V" deprecated="29" />
+		<method name="setListShownNoAnimation(Z)V" deprecated="29" />
+		<method name="setSelection(I)V" deprecated="29" />
+	</class>
+	<class name="android/app/LoaderManager" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="destroyLoader(I)V" deprecated="29" />
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29" />
+		<method name="enableDebugLogging(Z)V" deprecated="29" />
+		<method name="getLoader(I)Landroid/content/Loader;" deprecated="29" />
+		<method name="initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;" deprecated="29" />
+		<method name="restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;" deprecated="29" />
+	</class>
+	<class name="android/app/LoaderManager$LoaderCallbacks" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="onCreateLoader(ILandroid/os/Bundle;)Landroid/content/Loader;" deprecated="29" />
+		<method name="onLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V" deprecated="29" />
+		<method name="onLoaderReset(Landroid/content/Loader;)V" deprecated="29" />
+	</class>
+	<class name="android/app/LocalActivityManager" since="1" deprecated="13">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/app/Activity;Z)V" deprecated="29" />
+		<method name="destroyActivity(Ljava/lang/String;Z)Landroid/view/Window;" deprecated="29" />
+		<method name="dispatchCreate(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="dispatchDestroy(Z)V" deprecated="29" />
+		<method name="dispatchPause(Z)V" deprecated="29" />
+		<method name="dispatchResume()V" deprecated="29" />
+		<method name="dispatchStop()V" deprecated="29" />
+		<method name="getActivity(Ljava/lang/String;)Landroid/app/Activity;" deprecated="29" />
+		<method name="getCurrentActivity()Landroid/app/Activity;" deprecated="29" />
+		<method name="getCurrentId()Ljava/lang/String;" deprecated="29" />
+		<method name="removeAllActivities()V" deprecated="29" />
+		<method name="saveInstanceState()Landroid/os/Bundle;" deprecated="29" />
+		<method name="startActivity(Ljava/lang/String;Landroid/content/Intent;)Landroid/view/Window;" deprecated="29" />
+	</class>
+	<class name="android/app/MediaRouteActionProvider" since="16">
+		<extends name="android/view/ActionProvider" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="setExtendedSettingsClickListener(Landroid/view/View$OnClickListener;)V" />
+		<method name="setRouteTypes(I)V" />
+	</class>
+	<class name="android/app/MediaRouteButton" since="16">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getRouteTypes()I" />
+		<method name="setExtendedSettingsClickListener(Landroid/view/View$OnClickListener;)V" />
+		<method name="setRouteTypes(I)V" />
+		<method name="showDialog()V" />
+	</class>
+	<class name="android/app/NativeActivity" since="9">
+		<extends name="android/app/Activity" />
+		<implements name="android/view/InputQueue$Callback" />
+		<implements name="android/view/SurfaceHolder$Callback2" />
+		<implements name="android/view/ViewTreeObserver$OnGlobalLayoutListener" />
+		<method name="&lt;init&gt;()V" />
+		<field name="META_DATA_FUNC_NAME" />
+		<field name="META_DATA_LIB_NAME" />
+	</class>
+	<class name="android/app/Notification" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(ILjava/lang/CharSequence;J)V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="clone()Landroid/app/Notification;" since="9" />
+		<method name="findRemoteInputActionPair(Z)Landroid/util/Pair;" since="30" />
+		<method name="getAllowSystemGeneratedContextualActions()Z" since="29" />
+		<method name="getBadgeIconType()I" since="26" />
+		<method name="getBubbleMetadata()Landroid/app/Notification$BubbleMetadata;" since="29" />
+		<method name="getChannelId()Ljava/lang/String;" since="26" />
+		<method name="getContextualActions()Ljava/util/List;" since="30" />
+		<method name="getGroup()Ljava/lang/String;" since="20" />
+		<method name="getGroupAlertBehavior()I" since="26" />
+		<method name="getLargeIcon()Landroid/graphics/drawable/Icon;" since="23" />
+		<method name="getLocusId()Landroid/content/LocusId;" since="29" />
+		<method name="getSettingsText()Ljava/lang/CharSequence;" since="26" />
+		<method name="getShortcutId()Ljava/lang/String;" since="26" />
+		<method name="getSmallIcon()Landroid/graphics/drawable/Icon;" since="23" />
+		<method name="getSortKey()Ljava/lang/String;" since="20" />
+		<method name="getTimeoutAfter()J" since="26" />
+		<method name="hasImage()Z" since="31" />
+		<method name="setLatestEventInfo(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="15" removed="23" />
+		<field name="AUDIO_ATTRIBUTES_DEFAULT" since="21" />
+		<field name="BADGE_ICON_LARGE" since="26" />
+		<field name="BADGE_ICON_NONE" since="26" />
+		<field name="BADGE_ICON_SMALL" since="26" />
+		<field name="CATEGORY_ALARM" since="21" />
+		<field name="CATEGORY_CALL" since="21" />
+		<field name="CATEGORY_EMAIL" since="21" />
+		<field name="CATEGORY_ERROR" since="21" />
+		<field name="CATEGORY_EVENT" since="21" />
+		<field name="CATEGORY_LOCATION_SHARING" since="31" />
+		<field name="CATEGORY_MESSAGE" since="21" />
+		<field name="CATEGORY_MISSED_CALL" since="31" />
+		<field name="CATEGORY_NAVIGATION" since="28" />
+		<field name="CATEGORY_PROGRESS" since="21" />
+		<field name="CATEGORY_PROMO" since="21" />
+		<field name="CATEGORY_RECOMMENDATION" since="21" />
+		<field name="CATEGORY_REMINDER" since="23" />
+		<field name="CATEGORY_SERVICE" since="21" />
+		<field name="CATEGORY_SOCIAL" since="21" />
+		<field name="CATEGORY_STATUS" since="21" />
+		<field name="CATEGORY_STOPWATCH" since="31" />
+		<field name="CATEGORY_SYSTEM" since="21" />
+		<field name="CATEGORY_TRANSPORT" since="21" />
+		<field name="CATEGORY_WORKOUT" since="31" />
+		<field name="COLOR_DEFAULT" since="21" />
+		<field name="CREATOR" />
+		<field name="DEFAULT_ALL" />
+		<field name="DEFAULT_LIGHTS" />
+		<field name="DEFAULT_SOUND" />
+		<field name="DEFAULT_VIBRATE" />
+		<field name="EXTRA_ANSWER_COLOR" since="31" />
+		<field name="EXTRA_ANSWER_INTENT" since="31" />
+		<field name="EXTRA_AUDIO_CONTENTS_URI" since="26" />
+		<field name="EXTRA_BACKGROUND_IMAGE_URI" since="21" />
+		<field name="EXTRA_BIG_TEXT" since="21" />
+		<field name="EXTRA_CALL_IS_VIDEO" since="31" />
+		<field name="EXTRA_CALL_PERSON" since="31" />
+		<field name="EXTRA_CHANNEL_GROUP_ID" since="28" />
+		<field name="EXTRA_CHANNEL_ID" since="26" />
+		<field name="EXTRA_CHRONOMETER_COUNT_DOWN" since="24" />
+		<field name="EXTRA_COLORIZED" since="26" />
+		<field name="EXTRA_COMPACT_ACTIONS" since="21" />
+		<field name="EXTRA_CONVERSATION_TITLE" since="24" />
+		<field name="EXTRA_DECLINE_COLOR" since="31" />
+		<field name="EXTRA_DECLINE_INTENT" since="31" />
+		<field name="EXTRA_HANG_UP_INTENT" since="31" />
+		<field name="EXTRA_HISTORIC_MESSAGES" since="26" />
+		<field name="EXTRA_INFO_TEXT" since="19" />
+		<field name="EXTRA_IS_GROUP_CONVERSATION" since="28" />
+		<field name="EXTRA_LARGE_ICON" since="19" deprecated="26" />
+		<field name="EXTRA_LARGE_ICON_BIG" since="19" />
+		<field name="EXTRA_MEDIA_SESSION" since="21" />
+		<field name="EXTRA_MESSAGES" since="24" />
+		<field name="EXTRA_MESSAGING_PERSON" since="28" />
+		<field name="EXTRA_NOTIFICATION_ID" since="26" />
+		<field name="EXTRA_NOTIFICATION_TAG" since="26" />
+		<field name="EXTRA_PEOPLE" since="19" deprecated="28" />
+		<field name="EXTRA_PEOPLE_LIST" since="28" />
+		<field name="EXTRA_PICTURE" since="19" />
+		<field name="EXTRA_PICTURE_CONTENT_DESCRIPTION" since="31" />
+		<field name="EXTRA_PICTURE_ICON" since="31" />
+		<field name="EXTRA_PROGRESS" since="19" />
+		<field name="EXTRA_PROGRESS_INDETERMINATE" since="19" />
+		<field name="EXTRA_PROGRESS_MAX" since="19" />
+		<field name="EXTRA_REMOTE_INPUT_DRAFT" since="28" />
+		<field name="EXTRA_REMOTE_INPUT_HISTORY" since="24" />
+		<field name="EXTRA_SELF_DISPLAY_NAME" since="24" deprecated="28" />
+		<field name="EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED" since="31" />
+		<field name="EXTRA_SHOW_CHRONOMETER" since="19" />
+		<field name="EXTRA_SHOW_WHEN" since="19" />
+		<field name="EXTRA_SMALL_ICON" since="19" deprecated="26" />
+		<field name="EXTRA_SUB_TEXT" since="19" />
+		<field name="EXTRA_SUMMARY_TEXT" since="19" />
+		<field name="EXTRA_TEMPLATE" since="21" />
+		<field name="EXTRA_TEXT" since="19" />
+		<field name="EXTRA_TEXT_LINES" since="19" />
+		<field name="EXTRA_TITLE" since="19" />
+		<field name="EXTRA_TITLE_BIG" since="19" />
+		<field name="EXTRA_VERIFICATION_ICON" since="31" />
+		<field name="EXTRA_VERIFICATION_TEXT" since="31" />
+		<field name="FLAG_AUTO_CANCEL" />
+		<field name="FLAG_BUBBLE" since="29" />
+		<field name="FLAG_FOREGROUND_SERVICE" since="5" />
+		<field name="FLAG_GROUP_SUMMARY" since="20" />
+		<field name="FLAG_HIGH_PRIORITY" since="11" deprecated="16" />
+		<field name="FLAG_INSISTENT" />
+		<field name="FLAG_LOCAL_ONLY" since="20" />
+		<field name="FLAG_NO_CLEAR" />
+		<field name="FLAG_ONGOING_EVENT" />
+		<field name="FLAG_ONLY_ALERT_ONCE" />
+		<field name="FLAG_SHOW_LIGHTS" deprecated="26" />
+		<field name="FOREGROUND_SERVICE_DEFAULT" since="31" />
+		<field name="FOREGROUND_SERVICE_DEFERRED" since="31" />
+		<field name="FOREGROUND_SERVICE_IMMEDIATE" since="31" />
+		<field name="GROUP_ALERT_ALL" since="26" />
+		<field name="GROUP_ALERT_CHILDREN" since="26" />
+		<field name="GROUP_ALERT_SUMMARY" since="26" />
+		<field name="INTENT_CATEGORY_NOTIFICATION_PREFERENCES" since="21" />
+		<field name="PRIORITY_DEFAULT" since="16" deprecated="26" />
+		<field name="PRIORITY_HIGH" since="16" deprecated="26" />
+		<field name="PRIORITY_LOW" since="16" deprecated="26" />
+		<field name="PRIORITY_MAX" since="16" deprecated="26" />
+		<field name="PRIORITY_MIN" since="16" deprecated="26" />
+		<field name="STREAM_DEFAULT" deprecated="21" />
+		<field name="VISIBILITY_PRIVATE" since="21" />
+		<field name="VISIBILITY_PUBLIC" since="21" />
+		<field name="VISIBILITY_SECRET" since="21" />
+		<field name="actions" since="19" />
+		<field name="audioAttributes" since="21" deprecated="26" />
+		<field name="audioStreamType" deprecated="21" />
+		<field name="bigContentView" since="16" deprecated="24" />
+		<field name="category" since="21" />
+		<field name="color" since="21" />
+		<field name="contentIntent" />
+		<field name="contentView" deprecated="24" />
+		<field name="defaults" deprecated="26" />
+		<field name="deleteIntent" />
+		<field name="extras" since="19" />
+		<field name="flags" />
+		<field name="fullScreenIntent" since="9" />
+		<field name="headsUpContentView" since="21" deprecated="24" />
+		<field name="icon" deprecated="23" />
+		<field name="iconLevel" />
+		<field name="largeIcon" since="11" deprecated="23" />
+		<field name="ledARGB" deprecated="26" />
+		<field name="ledOffMS" deprecated="26" />
+		<field name="ledOnMS" deprecated="26" />
+		<field name="number" deprecated="24" />
+		<field name="priority" since="16" deprecated="26" />
+		<field name="publicVersion" since="21" />
+		<field name="sound" deprecated="26" />
+		<field name="tickerText" />
+		<field name="tickerView" since="11" deprecated="21" />
+		<field name="vibrate" deprecated="26" />
+		<field name="visibility" since="21" />
+		<field name="when" />
+	</class>
+	<class name="android/app/Notification$Action" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="23" />
+		<method name="clone()Landroid/app/Notification$Action;" />
+		<method name="getAllowGeneratedReplies()Z" since="24" />
+		<method name="getDataOnlyRemoteInputs()[Landroid/app/RemoteInput;" since="26" />
+		<method name="getExtras()Landroid/os/Bundle;" since="20" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" since="23" />
+		<method name="getRemoteInputs()[Landroid/app/RemoteInput;" since="20" />
+		<method name="getSemanticAction()I" since="28" />
+		<method name="isAuthenticationRequired()Z" since="31" />
+		<method name="isContextual()Z" since="29" />
+		<field name="CREATOR" />
+		<field name="SEMANTIC_ACTION_ARCHIVE" since="28" />
+		<field name="SEMANTIC_ACTION_CALL" since="28" />
+		<field name="SEMANTIC_ACTION_DELETE" since="28" />
+		<field name="SEMANTIC_ACTION_MARK_AS_READ" since="28" />
+		<field name="SEMANTIC_ACTION_MARK_AS_UNREAD" since="28" />
+		<field name="SEMANTIC_ACTION_MUTE" since="28" />
+		<field name="SEMANTIC_ACTION_NONE" since="28" />
+		<field name="SEMANTIC_ACTION_REPLY" since="28" />
+		<field name="SEMANTIC_ACTION_THUMBS_DOWN" since="28" />
+		<field name="SEMANTIC_ACTION_THUMBS_UP" since="28" />
+		<field name="SEMANTIC_ACTION_UNMUTE" since="28" />
+		<field name="actionIntent" />
+		<field name="icon" deprecated="23" />
+		<field name="title" />
+	</class>
+	<class name="android/app/Notification$Action$Builder" since="20">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="23" />
+		<method name="&lt;init&gt;(Landroid/app/Notification$Action;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" since="23" />
+		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Action$Builder;" />
+		<method name="addRemoteInput(Landroid/app/RemoteInput;)Landroid/app/Notification$Action$Builder;" />
+		<method name="build()Landroid/app/Notification$Action;" />
+		<method name="extend(Landroid/app/Notification$Action$Extender;)Landroid/app/Notification$Action$Builder;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="setAllowGeneratedReplies(Z)Landroid/app/Notification$Action$Builder;" since="24" />
+		<method name="setAuthenticationRequired(Z)Landroid/app/Notification$Action$Builder;" since="31" />
+		<method name="setContextual(Z)Landroid/app/Notification$Action$Builder;" since="29" />
+		<method name="setSemanticAction(I)Landroid/app/Notification$Action$Builder;" since="28" />
+	</class>
+	<class name="android/app/Notification$Action$Extender" since="20">
+		<extends name="java/lang/Object" />
+		<method name="extend(Landroid/app/Notification$Action$Builder;)Landroid/app/Notification$Action$Builder;" />
+	</class>
+	<class name="android/app/Notification$Action$WearableExtender" since="20">
+		<extends name="java/lang/Object" />
+		<implements name="android/app/Notification$Action$Extender" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/Notification$Action;)V" />
+		<method name="clone()Landroid/app/Notification$Action$WearableExtender;" />
+		<method name="getCancelLabel()Ljava/lang/CharSequence;" since="22" deprecated="28" />
+		<method name="getConfirmLabel()Ljava/lang/CharSequence;" since="22" deprecated="28" />
+		<method name="getHintDisplayActionInline()Z" since="25" />
+		<method name="getHintLaunchesActivity()Z" since="24" />
+		<method name="getInProgressLabel()Ljava/lang/CharSequence;" since="22" deprecated="28" />
+		<method name="isAvailableOffline()Z" />
+		<method name="setAvailableOffline(Z)Landroid/app/Notification$Action$WearableExtender;" />
+		<method name="setCancelLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28" />
+		<method name="setConfirmLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28" />
+		<method name="setHintDisplayActionInline(Z)Landroid/app/Notification$Action$WearableExtender;" since="25" />
+		<method name="setHintLaunchesActivity(Z)Landroid/app/Notification$Action$WearableExtender;" since="24" />
+		<method name="setInProgressLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28" />
+	</class>
+	<class name="android/app/Notification$BigPictureStyle" since="16">
+		<extends name="android/app/Notification$Style" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/Notification$Builder;)V" deprecated="24" />
+		<method name="bigLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$BigPictureStyle;" />
+		<method name="bigLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BigPictureStyle;" since="23" />
+		<method name="bigPicture(Landroid/graphics/Bitmap;)Landroid/app/Notification$BigPictureStyle;" />
+		<method name="bigPicture(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BigPictureStyle;" since="31" />
+		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;" since="31" />
+		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;" />
+		<method name="showBigPictureWhenCollapsed(Z)Landroid/app/Notification$BigPictureStyle;" since="31" />
+	</class>
+	<class name="android/app/Notification$BigTextStyle" since="16">
+		<extends name="android/app/Notification$Style" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/Notification$Builder;)V" deprecated="24" />
+		<method name="bigText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;" />
+		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;" />
+		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;" />
+	</class>
+	<class name="android/app/Notification$BubbleMetadata" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAutoExpandBubble()Z" />
+		<method name="getDeleteIntent()Landroid/app/PendingIntent;" />
+		<method name="getDesiredHeight()I" />
+		<method name="getDesiredHeightResId()I" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getIntent()Landroid/app/PendingIntent;" />
+		<method name="getShortcutId()Ljava/lang/String;" since="30" />
+		<method name="isBubbleSuppressable()Z" since="31" />
+		<method name="isBubbleSuppressed()Z" since="31" />
+		<method name="isNotificationSuppressed()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/Notification$BubbleMetadata$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/app/PendingIntent;Landroid/graphics/drawable/Icon;)V" since="30" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="30" />
+		<method name="build()Landroid/app/Notification$BubbleMetadata;" />
+		<method name="setAutoExpandBubble(Z)Landroid/app/Notification$BubbleMetadata$Builder;" />
+		<method name="setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$BubbleMetadata$Builder;" />
+		<method name="setDesiredHeight(I)Landroid/app/Notification$BubbleMetadata$Builder;" />
+		<method name="setDesiredHeightResId(I)Landroid/app/Notification$BubbleMetadata$Builder;" />
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BubbleMetadata$Builder;" />
+		<method name="setIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$BubbleMetadata$Builder;" />
+		<method name="setSuppressNotification(Z)Landroid/app/Notification$BubbleMetadata$Builder;" />
+		<method name="setSuppressableBubble(Z)Landroid/app/Notification$BubbleMetadata$Builder;" since="31" />
+	</class>
+	<class name="android/app/Notification$Builder" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="26" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" since="26" />
+		<method name="addAction(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;" since="16" deprecated="23" />
+		<method name="addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;" since="20" />
+		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;" since="20" />
+		<method name="addPerson(Landroid/app/Person;)Landroid/app/Notification$Builder;" since="28" />
+		<method name="addPerson(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="21" deprecated="28" />
+		<method name="build()Landroid/app/Notification;" since="16" />
+		<method name="createBigContentView()Landroid/widget/RemoteViews;" since="24" />
+		<method name="createContentView()Landroid/widget/RemoteViews;" since="24" />
+		<method name="createHeadsUpContentView()Landroid/widget/RemoteViews;" since="24" />
+		<method name="extend(Landroid/app/Notification$Extender;)Landroid/app/Notification$Builder;" since="20" />
+		<method name="getExtras()Landroid/os/Bundle;" since="20" />
+		<method name="getNotification()Landroid/app/Notification;" deprecated="16" />
+		<method name="getStyle()Landroid/app/Notification$Style;" since="28" />
+		<method name="recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;" since="24" />
+		<method name="setActions([Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;" since="24" />
+		<method name="setAllowSystemGeneratedContextualActions(Z)Landroid/app/Notification$Builder;" since="29" />
+		<method name="setAutoCancel(Z)Landroid/app/Notification$Builder;" />
+		<method name="setBadgeIconType(I)Landroid/app/Notification$Builder;" since="26" />
+		<method name="setBubbleMetadata(Landroid/app/Notification$BubbleMetadata;)Landroid/app/Notification$Builder;" since="29" />
+		<method name="setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="21" />
+		<method name="setChannelId(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="26" />
+		<method name="setChronometerCountDown(Z)Landroid/app/Notification$Builder;" since="24" />
+		<method name="setColor(I)Landroid/app/Notification$Builder;" since="21" />
+		<method name="setColorized(Z)Landroid/app/Notification$Builder;" since="26" />
+		<method name="setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" deprecated="24" />
+		<method name="setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" deprecated="24" />
+		<method name="setContentIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;" />
+		<method name="setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" />
+		<method name="setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" />
+		<method name="setCustomBigContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24" />
+		<method name="setCustomContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24" />
+		<method name="setCustomHeadsUpContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24" />
+		<method name="setDefaults(I)Landroid/app/Notification$Builder;" deprecated="26" />
+		<method name="setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;" since="19" />
+		<method name="setFlag(IZ)Landroid/app/Notification$Builder;" since="30" />
+		<method name="setForegroundServiceBehavior(I)Landroid/app/Notification$Builder;" since="31" />
+		<method name="setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;" />
+		<method name="setGroup(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="20" />
+		<method name="setGroupAlertBehavior(I)Landroid/app/Notification$Builder;" since="26" />
+		<method name="setGroupSummary(Z)Landroid/app/Notification$Builder;" since="20" />
+		<method name="setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$Builder;" />
+		<method name="setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;" since="23" />
+		<method name="setLights(III)Landroid/app/Notification$Builder;" deprecated="26" />
+		<method name="setLocalOnly(Z)Landroid/app/Notification$Builder;" since="20" />
+		<method name="setLocusId(Landroid/content/LocusId;)Landroid/app/Notification$Builder;" since="29" />
+		<method name="setNumber(I)Landroid/app/Notification$Builder;" deprecated="24" />
+		<method name="setOngoing(Z)Landroid/app/Notification$Builder;" />
+		<method name="setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;" />
+		<method name="setPriority(I)Landroid/app/Notification$Builder;" since="16" deprecated="26" />
+		<method name="setProgress(IIZ)Landroid/app/Notification$Builder;" since="14" />
+		<method name="setPublicVersion(Landroid/app/Notification;)Landroid/app/Notification$Builder;" since="21" />
+		<method name="setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="24" />
+		<method name="setSettingsText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="26" />
+		<method name="setShortcutId(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="26" />
+		<method name="setShowWhen(Z)Landroid/app/Notification$Builder;" since="17" />
+		<method name="setSmallIcon(I)Landroid/app/Notification$Builder;" />
+		<method name="setSmallIcon(II)Landroid/app/Notification$Builder;" />
+		<method name="setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;" since="23" />
+		<method name="setSortKey(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="20" />
+		<method name="setSound(Landroid/net/Uri;)Landroid/app/Notification$Builder;" deprecated="26" />
+		<method name="setSound(Landroid/net/Uri;I)Landroid/app/Notification$Builder;" deprecated="21" />
+		<method name="setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)Landroid/app/Notification$Builder;" since="21" deprecated="26" />
+		<method name="setStyle(Landroid/app/Notification$Style;)Landroid/app/Notification$Builder;" since="16" />
+		<method name="setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="16" />
+		<method name="setTicker(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" />
+		<method name="setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" deprecated="21" />
+		<method name="setTimeoutAfter(J)Landroid/app/Notification$Builder;" since="26" />
+		<method name="setUsesChronometer(Z)Landroid/app/Notification$Builder;" since="16" />
+		<method name="setVibrate([J)Landroid/app/Notification$Builder;" deprecated="26" />
+		<method name="setVisibility(I)Landroid/app/Notification$Builder;" since="21" />
+		<method name="setWhen(J)Landroid/app/Notification$Builder;" />
+	</class>
+	<class name="android/app/Notification$CallStyle" since="31">
+		<extends name="android/app/Notification$Style" />
+		<method name="forIncomingCall(Landroid/app/Person;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)Landroid/app/Notification$CallStyle;" />
+		<method name="forOngoingCall(Landroid/app/Person;Landroid/app/PendingIntent;)Landroid/app/Notification$CallStyle;" />
+		<method name="forScreeningCall(Landroid/app/Person;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)Landroid/app/Notification$CallStyle;" />
+		<method name="setAnswerButtonColorHint(I)Landroid/app/Notification$CallStyle;" />
+		<method name="setDeclineButtonColorHint(I)Landroid/app/Notification$CallStyle;" />
+		<method name="setIsVideo(Z)Landroid/app/Notification$CallStyle;" />
+		<method name="setVerificationIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$CallStyle;" />
+		<method name="setVerificationText(Ljava/lang/CharSequence;)Landroid/app/Notification$CallStyle;" />
+	</class>
+	<class name="android/app/Notification$CarExtender" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/app/Notification$Extender" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/Notification;)V" />
+		<method name="getColor()I" />
+		<method name="getLargeIcon()Landroid/graphics/Bitmap;" />
+		<method name="getUnreadConversation()Landroid/app/Notification$CarExtender$UnreadConversation;" />
+		<method name="setColor(I)Landroid/app/Notification$CarExtender;" />
+		<method name="setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$CarExtender;" />
+		<method name="setUnreadConversation(Landroid/app/Notification$CarExtender$UnreadConversation;)Landroid/app/Notification$CarExtender;" />
+	</class>
+	<class name="android/app/Notification$CarExtender$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="addMessage(Ljava/lang/String;)Landroid/app/Notification$CarExtender$Builder;" />
+		<method name="build()Landroid/app/Notification$CarExtender$UnreadConversation;" />
+		<method name="setLatestTimestamp(J)Landroid/app/Notification$CarExtender$Builder;" />
+		<method name="setReadPendingIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$CarExtender$Builder;" />
+		<method name="setReplyAction(Landroid/app/PendingIntent;Landroid/app/RemoteInput;)Landroid/app/Notification$CarExtender$Builder;" />
+	</class>
+	<class name="android/app/Notification$CarExtender$UnreadConversation" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getLatestTimestamp()J" />
+		<method name="getMessages()[Ljava/lang/String;" />
+		<method name="getParticipant()Ljava/lang/String;" />
+		<method name="getParticipants()[Ljava/lang/String;" />
+		<method name="getReadPendingIntent()Landroid/app/PendingIntent;" />
+		<method name="getRemoteInput()Landroid/app/RemoteInput;" />
+		<method name="getReplyPendingIntent()Landroid/app/PendingIntent;" />
+	</class>
+	<class name="android/app/Notification$DecoratedCustomViewStyle" since="24">
+		<extends name="android/app/Notification$Style" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/app/Notification$DecoratedMediaCustomViewStyle" since="24">
+		<extends name="android/app/Notification$MediaStyle" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/app/Notification$Extender" since="20">
+		<extends name="java/lang/Object" />
+		<method name="extend(Landroid/app/Notification$Builder;)Landroid/app/Notification$Builder;" />
+	</class>
+	<class name="android/app/Notification$InboxStyle" since="16">
+		<extends name="android/app/Notification$Style" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/Notification$Builder;)V" deprecated="24" />
+		<method name="addLine(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;" />
+		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;" />
+		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;" />
+	</class>
+	<class name="android/app/Notification$MediaStyle" since="21">
+		<extends name="android/app/Notification$Style" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/Notification$Builder;)V" deprecated="24" />
+		<method name="setMediaSession(Landroid/media/session/MediaSession$Token;)Landroid/app/Notification$MediaStyle;" />
+		<method name="setShowActionsInCompactView([I)Landroid/app/Notification$MediaStyle;" />
+	</class>
+	<class name="android/app/Notification$MessagingStyle" since="24">
+		<extends name="android/app/Notification$Style" />
+		<method name="&lt;init&gt;(Landroid/app/Person;)V" since="28" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" deprecated="28" />
+		<method name="addHistoricMessage(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Notification$MessagingStyle;" since="26" />
+		<method name="addMessage(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Notification$MessagingStyle;" />
+		<method name="addMessage(Ljava/lang/CharSequence;JLandroid/app/Person;)Landroid/app/Notification$MessagingStyle;" since="28" />
+		<method name="addMessage(Ljava/lang/CharSequence;JLjava/lang/CharSequence;)Landroid/app/Notification$MessagingStyle;" deprecated="28" />
+		<method name="getConversationTitle()Ljava/lang/CharSequence;" />
+		<method name="getHistoricMessages()Ljava/util/List;" since="26" />
+		<method name="getMessages()Ljava/util/List;" />
+		<method name="getUser()Landroid/app/Person;" since="28" />
+		<method name="getUserDisplayName()Ljava/lang/CharSequence;" deprecated="28" />
+		<method name="isGroupConversation()Z" since="28" />
+		<method name="setConversationTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$MessagingStyle;" />
+		<method name="setGroupConversation(Z)Landroid/app/Notification$MessagingStyle;" since="28" />
+		<field name="MAXIMUM_RETAINED_MESSAGES" />
+	</class>
+	<class name="android/app/Notification$MessagingStyle$Message" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;JLandroid/app/Person;)V" since="28" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;JLjava/lang/CharSequence;)V" deprecated="28" />
+		<method name="getDataMimeType()Ljava/lang/String;" />
+		<method name="getDataUri()Landroid/net/Uri;" />
+		<method name="getExtras()Landroid/os/Bundle;" since="26" />
+		<method name="getMessagesFromBundleArray([Landroid/os/Parcelable;)Ljava/util/List;" since="30" />
+		<method name="getSender()Ljava/lang/CharSequence;" deprecated="28" />
+		<method name="getSenderPerson()Landroid/app/Person;" since="28" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTimestamp()J" />
+		<method name="setData(Ljava/lang/String;Landroid/net/Uri;)Landroid/app/Notification$MessagingStyle$Message;" />
+	</class>
+	<class name="android/app/Notification$Style" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/app/Notification;" />
+		<method name="checkBuilder()V" />
+		<method name="getStandardView(I)Landroid/widget/RemoteViews;" />
+		<method name="internalSetBigContentTitle(Ljava/lang/CharSequence;)V" />
+		<method name="internalSetSummaryText(Ljava/lang/CharSequence;)V" />
+		<method name="setBuilder(Landroid/app/Notification$Builder;)V" />
+		<field name="mBuilder" />
+	</class>
+	<class name="android/app/Notification$WearableExtender" since="20">
+		<extends name="java/lang/Object" />
+		<implements name="android/app/Notification$Extender" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/Notification;)V" />
+		<method name="addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$WearableExtender;" />
+		<method name="addActions(Ljava/util/List;)Landroid/app/Notification$WearableExtender;" />
+		<method name="addPage(Landroid/app/Notification;)Landroid/app/Notification$WearableExtender;" deprecated="29" />
+		<method name="addPages(Ljava/util/List;)Landroid/app/Notification$WearableExtender;" deprecated="29" />
+		<method name="clearActions()Landroid/app/Notification$WearableExtender;" />
+		<method name="clearPages()Landroid/app/Notification$WearableExtender;" deprecated="29" />
+		<method name="clone()Landroid/app/Notification$WearableExtender;" />
+		<method name="getActions()Ljava/util/List;" />
+		<method name="getBackground()Landroid/graphics/Bitmap;" deprecated="29" />
+		<method name="getBridgeTag()Ljava/lang/String;" since="26" />
+		<method name="getContentAction()I" />
+		<method name="getContentIcon()I" deprecated="28" />
+		<method name="getContentIconGravity()I" deprecated="28" />
+		<method name="getContentIntentAvailableOffline()Z" />
+		<method name="getCustomContentHeight()I" deprecated="28" />
+		<method name="getCustomSizePreset()I" deprecated="28" />
+		<method name="getDismissalId()Ljava/lang/String;" since="24" />
+		<method name="getDisplayIntent()Landroid/app/PendingIntent;" deprecated="29" />
+		<method name="getGravity()I" deprecated="28" />
+		<method name="getHintAmbientBigPicture()Z" since="24" deprecated="29" />
+		<method name="getHintAvoidBackgroundClipping()Z" since="22" deprecated="28" />
+		<method name="getHintContentIntentLaunchesActivity()Z" since="24" />
+		<method name="getHintHideIcon()Z" deprecated="28" />
+		<method name="getHintScreenTimeout()I" since="22" deprecated="28" />
+		<method name="getHintShowBackgroundOnly()Z" deprecated="28" />
+		<method name="getPages()Ljava/util/List;" deprecated="29" />
+		<method name="getStartScrollBottom()Z" />
+		<method name="setBackground(Landroid/graphics/Bitmap;)Landroid/app/Notification$WearableExtender;" deprecated="29" />
+		<method name="setBridgeTag(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="26" />
+		<method name="setContentAction(I)Landroid/app/Notification$WearableExtender;" />
+		<method name="setContentIcon(I)Landroid/app/Notification$WearableExtender;" deprecated="28" />
+		<method name="setContentIconGravity(I)Landroid/app/Notification$WearableExtender;" deprecated="28" />
+		<method name="setContentIntentAvailableOffline(Z)Landroid/app/Notification$WearableExtender;" />
+		<method name="setCustomContentHeight(I)Landroid/app/Notification$WearableExtender;" deprecated="28" />
+		<method name="setCustomSizePreset(I)Landroid/app/Notification$WearableExtender;" deprecated="28" />
+		<method name="setDismissalId(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="24" />
+		<method name="setDisplayIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$WearableExtender;" deprecated="29" />
+		<method name="setGravity(I)Landroid/app/Notification$WearableExtender;" deprecated="28" />
+		<method name="setHintAmbientBigPicture(Z)Landroid/app/Notification$WearableExtender;" since="24" deprecated="29" />
+		<method name="setHintAvoidBackgroundClipping(Z)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28" />
+		<method name="setHintContentIntentLaunchesActivity(Z)Landroid/app/Notification$WearableExtender;" since="24" />
+		<method name="setHintHideIcon(Z)Landroid/app/Notification$WearableExtender;" deprecated="28" />
+		<method name="setHintScreenTimeout(I)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28" />
+		<method name="setHintShowBackgroundOnly(Z)Landroid/app/Notification$WearableExtender;" deprecated="28" />
+		<method name="setStartScrollBottom(Z)Landroid/app/Notification$WearableExtender;" />
+		<field name="SCREEN_TIMEOUT_LONG" since="22" deprecated="29" />
+		<field name="SCREEN_TIMEOUT_SHORT" since="22" deprecated="29" />
+		<field name="SIZE_DEFAULT" deprecated="29" />
+		<field name="SIZE_FULL_SCREEN" deprecated="29" />
+		<field name="SIZE_LARGE" deprecated="29" />
+		<field name="SIZE_MEDIUM" deprecated="29" />
+		<field name="SIZE_SMALL" deprecated="29" />
+		<field name="SIZE_XSMALL" deprecated="29" />
+		<field name="UNSET_ACTION_INDEX" />
+	</class>
+	<class name="android/app/NotificationChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/CharSequence;I)V" />
+		<method name="canBubble()Z" since="29" />
+		<method name="canBypassDnd()Z" />
+		<method name="canShowBadge()Z" />
+		<method name="enableLights(Z)V" />
+		<method name="enableVibration(Z)V" />
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" />
+		<method name="getConversationId()Ljava/lang/String;" since="30" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getGroup()Ljava/lang/String;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getImportance()I" />
+		<method name="getLightColor()I" />
+		<method name="getLockscreenVisibility()I" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="getParentChannelId()Ljava/lang/String;" since="30" />
+		<method name="getSound()Landroid/net/Uri;" />
+		<method name="getVibrationPattern()[J" />
+		<method name="hasUserSetImportance()Z" since="29" />
+		<method name="hasUserSetSound()Z" since="30" />
+		<method name="isConversation()Z" since="31" />
+		<method name="isDemoted()Z" since="31" />
+		<method name="isImportantConversation()Z" since="30" />
+		<method name="setAllowBubbles(Z)V" since="29" />
+		<method name="setBypassDnd(Z)V" />
+		<method name="setConversationId(Ljava/lang/String;Ljava/lang/String;)V" since="30" />
+		<method name="setDescription(Ljava/lang/String;)V" />
+		<method name="setGroup(Ljava/lang/String;)V" />
+		<method name="setImportance(I)V" />
+		<method name="setLightColor(I)V" />
+		<method name="setLockscreenVisibility(I)V" />
+		<method name="setName(Ljava/lang/CharSequence;)V" />
+		<method name="setShowBadge(Z)V" />
+		<method name="setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)V" />
+		<method name="setVibrationPattern([J)V" />
+		<method name="shouldShowLights()Z" />
+		<method name="shouldVibrate()Z" />
+		<field name="CREATOR" />
+		<field name="DEFAULT_CHANNEL_ID" />
+		<field name="EDIT_CONVERSATION" since="31" />
+		<field name="EDIT_IMPORTANCE" since="31" />
+		<field name="EDIT_LAUNCHER" since="31" />
+		<field name="EDIT_LOCKED_DEVICE" since="31" />
+		<field name="EDIT_SOUND" since="31" />
+		<field name="EDIT_VIBRATION" since="31" />
+		<field name="EDIT_ZEN" since="31" />
+	</class>
+	<class name="android/app/NotificationChannelGroup" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/CharSequence;)V" />
+		<method name="clone()Landroid/app/NotificationChannelGroup;" />
+		<method name="getChannels()Ljava/util/List;" />
+		<method name="getDescription()Ljava/lang/String;" since="28" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="isBlocked()Z" since="28" />
+		<method name="setDescription(Ljava/lang/String;)V" since="28" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/NotificationManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addAutomaticZenRule(Landroid/app/AutomaticZenRule;)Ljava/lang/String;" since="24" />
+		<method name="areBubblesAllowed()Z" since="29" deprecated="31" />
+		<method name="areBubblesEnabled()Z" since="31" />
+		<method name="areNotificationsEnabled()Z" since="24" />
+		<method name="areNotificationsPaused()Z" since="29" />
+		<method name="canNotifyAsPackage(Ljava/lang/String;)Z" since="29" />
+		<method name="cancel(I)V" />
+		<method name="cancel(Ljava/lang/String;I)V" since="5" />
+		<method name="cancelAll()V" />
+		<method name="cancelAsPackage(Ljava/lang/String;Ljava/lang/String;I)V" since="30" />
+		<method name="createNotificationChannel(Landroid/app/NotificationChannel;)V" since="26" />
+		<method name="createNotificationChannelGroup(Landroid/app/NotificationChannelGroup;)V" since="26" />
+		<method name="createNotificationChannelGroups(Ljava/util/List;)V" since="26" />
+		<method name="createNotificationChannels(Ljava/util/List;)V" since="26" />
+		<method name="deleteNotificationChannel(Ljava/lang/String;)V" since="26" />
+		<method name="deleteNotificationChannelGroup(Ljava/lang/String;)V" since="26" />
+		<method name="getActiveNotifications()[Landroid/service/notification/StatusBarNotification;" since="23" />
+		<method name="getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;" since="24" />
+		<method name="getAutomaticZenRules()Ljava/util/Map;" since="24" />
+		<method name="getBubblePreference()I" since="31" />
+		<method name="getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;" since="30" />
+		<method name="getCurrentInterruptionFilter()I" since="23" />
+		<method name="getImportance()I" since="24" />
+		<method name="getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;" since="26" />
+		<method name="getNotificationChannel(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;" since="30" />
+		<method name="getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;" since="28" />
+		<method name="getNotificationChannelGroups()Ljava/util/List;" since="26" />
+		<method name="getNotificationChannels()Ljava/util/List;" since="26" />
+		<method name="getNotificationDelegate()Ljava/lang/String;" since="29" />
+		<method name="getNotificationPolicy()Landroid/app/NotificationManager$Policy;" since="23" />
+		<method name="isNotificationListenerAccessGranted(Landroid/content/ComponentName;)Z" since="27" />
+		<method name="isNotificationPolicyAccessGranted()Z" since="23" />
+		<method name="notify(ILandroid/app/Notification;)V" />
+		<method name="notify(Ljava/lang/String;ILandroid/app/Notification;)V" since="5" />
+		<method name="notifyAsPackage(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V" since="29" />
+		<method name="removeAutomaticZenRule(Ljava/lang/String;)Z" since="24" />
+		<method name="setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V" since="29" />
+		<method name="setInterruptionFilter(I)V" since="23" />
+		<method name="setNotificationDelegate(Ljava/lang/String;)V" since="29" />
+		<method name="setNotificationPolicy(Landroid/app/NotificationManager$Policy;)V" since="23" />
+		<method name="shouldHideSilentStatusBarIcons()Z" since="29" />
+		<method name="updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z" since="24" />
+		<field name="ACTION_APP_BLOCK_STATE_CHANGED" since="28" />
+		<field name="ACTION_AUTOMATIC_ZEN_RULE" since="29" />
+		<field name="ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED" since="30" />
+		<field name="ACTION_INTERRUPTION_FILTER_CHANGED" since="23" />
+		<field name="ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED" since="28" />
+		<field name="ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED" since="28" />
+		<field name="ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED" since="23" />
+		<field name="ACTION_NOTIFICATION_POLICY_CHANGED" since="23" />
+		<field name="AUTOMATIC_RULE_STATUS_DISABLED" since="30" />
+		<field name="AUTOMATIC_RULE_STATUS_ENABLED" since="30" />
+		<field name="AUTOMATIC_RULE_STATUS_REMOVED" since="30" />
+		<field name="AUTOMATIC_RULE_STATUS_UNKNOWN" since="30" />
+		<field name="BUBBLE_PREFERENCE_ALL" since="31" />
+		<field name="BUBBLE_PREFERENCE_NONE" since="31" />
+		<field name="BUBBLE_PREFERENCE_SELECTED" since="31" />
+		<field name="EXTRA_AUTOMATIC_RULE_ID" since="29" />
+		<field name="EXTRA_AUTOMATIC_ZEN_RULE_ID" since="30" />
+		<field name="EXTRA_AUTOMATIC_ZEN_RULE_STATUS" since="30" />
+		<field name="EXTRA_BLOCKED_STATE" since="28" />
+		<field name="EXTRA_NOTIFICATION_CHANNEL_GROUP_ID" since="28" />
+		<field name="EXTRA_NOTIFICATION_CHANNEL_ID" since="28" />
+		<field name="IMPORTANCE_DEFAULT" since="24" />
+		<field name="IMPORTANCE_HIGH" since="24" />
+		<field name="IMPORTANCE_LOW" since="24" />
+		<field name="IMPORTANCE_MAX" since="24" />
+		<field name="IMPORTANCE_MIN" since="24" />
+		<field name="IMPORTANCE_NONE" since="24" />
+		<field name="IMPORTANCE_UNSPECIFIED" since="24" />
+		<field name="INTERRUPTION_FILTER_ALARMS" since="23" />
+		<field name="INTERRUPTION_FILTER_ALL" since="23" />
+		<field name="INTERRUPTION_FILTER_NONE" since="23" />
+		<field name="INTERRUPTION_FILTER_PRIORITY" since="23" />
+		<field name="INTERRUPTION_FILTER_UNKNOWN" since="23" />
+		<field name="META_DATA_AUTOMATIC_RULE_TYPE" since="29" />
+		<field name="META_DATA_RULE_INSTANCE_LIMIT" since="29" />
+	</class>
+	<class name="android/app/NotificationManager$Policy" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(IIII)V" since="24" />
+		<method name="&lt;init&gt;(IIIII)V" since="30" />
+		<method name="priorityCategoriesToString(I)Ljava/lang/String;" />
+		<method name="prioritySendersToString(I)Ljava/lang/String;" />
+		<method name="suppressedEffectsToString(I)Ljava/lang/String;" since="24" />
+		<field name="CONVERSATION_SENDERS_ANYONE" since="30" />
+		<field name="CONVERSATION_SENDERS_IMPORTANT" since="30" />
+		<field name="CONVERSATION_SENDERS_NONE" since="30" />
+		<field name="CREATOR" />
+		<field name="PRIORITY_CATEGORY_ALARMS" since="28" />
+		<field name="PRIORITY_CATEGORY_CALLS" />
+		<field name="PRIORITY_CATEGORY_CONVERSATIONS" since="30" />
+		<field name="PRIORITY_CATEGORY_EVENTS" />
+		<field name="PRIORITY_CATEGORY_MEDIA" since="28" />
+		<field name="PRIORITY_CATEGORY_MESSAGES" />
+		<field name="PRIORITY_CATEGORY_REMINDERS" />
+		<field name="PRIORITY_CATEGORY_REPEAT_CALLERS" />
+		<field name="PRIORITY_CATEGORY_SYSTEM" since="28" />
+		<field name="PRIORITY_SENDERS_ANY" />
+		<field name="PRIORITY_SENDERS_CONTACTS" />
+		<field name="PRIORITY_SENDERS_STARRED" />
+		<field name="SUPPRESSED_EFFECT_AMBIENT" since="28" />
+		<field name="SUPPRESSED_EFFECT_BADGE" since="28" />
+		<field name="SUPPRESSED_EFFECT_FULL_SCREEN_INTENT" since="28" />
+		<field name="SUPPRESSED_EFFECT_LIGHTS" since="28" />
+		<field name="SUPPRESSED_EFFECT_NOTIFICATION_LIST" since="28" />
+		<field name="SUPPRESSED_EFFECT_PEEK" since="28" />
+		<field name="SUPPRESSED_EFFECT_SCREEN_OFF" since="24" deprecated="28" />
+		<field name="SUPPRESSED_EFFECT_SCREEN_ON" since="24" deprecated="28" />
+		<field name="SUPPRESSED_EFFECT_STATUS_BAR" since="28" />
+		<field name="priorityCallSenders" />
+		<field name="priorityCategories" />
+		<field name="priorityConversationSenders" since="30" />
+		<field name="priorityMessageSenders" />
+		<field name="suppressedVisualEffects" since="24" />
+	</class>
+	<class name="android/app/PendingIntent" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="cancel()V" />
+		<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;I)Landroid/app/PendingIntent;" since="11" />
+		<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;" since="16" />
+		<method name="getActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;" />
+		<method name="getActivity(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;" since="16" />
+		<method name="getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;" />
+		<method name="getCreatorPackage()Ljava/lang/String;" since="17" />
+		<method name="getCreatorUid()I" since="17" />
+		<method name="getCreatorUserHandle()Landroid/os/UserHandle;" since="17" />
+		<method name="getForegroundService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;" since="26" />
+		<method name="getIntentSender()Landroid/content/IntentSender;" since="4" />
+		<method name="getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;" />
+		<method name="getTargetPackage()Ljava/lang/String;" deprecated="17" />
+		<method name="isActivity()Z" since="31" />
+		<method name="isBroadcast()Z" since="31" />
+		<method name="isForegroundService()Z" since="31" />
+		<method name="isImmutable()Z" since="31" />
+		<method name="isService()Z" since="31" />
+		<method name="readPendingIntentOrNullFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;" />
+		<method name="send()V" />
+		<method name="send(I)V" />
+		<method name="send(ILandroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V" />
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;)V" />
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V" />
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V" since="14" />
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)V" since="23" />
+		<method name="writePendingIntentOrNullToParcel(Landroid/app/PendingIntent;Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+		<field name="FLAG_CANCEL_CURRENT" />
+		<field name="FLAG_IMMUTABLE" since="23" />
+		<field name="FLAG_MUTABLE" since="31" />
+		<field name="FLAG_NO_CREATE" />
+		<field name="FLAG_ONE_SHOT" />
+		<field name="FLAG_UPDATE_CURRENT" since="3" />
+	</class>
+	<class name="android/app/PendingIntent$CanceledException" since="1">
+		<extends name="android/util/AndroidException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/app/PendingIntent$OnFinished" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/Person" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getKey()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="getUri()Ljava/lang/String;" />
+		<method name="isBot()Z" />
+		<method name="isImportant()Z" />
+		<method name="toBuilder()Landroid/app/Person$Builder;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/Person$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/app/Person;" />
+		<method name="setBot(Z)Landroid/app/Person$Builder;" />
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Person$Builder;" />
+		<method name="setImportant(Z)Landroid/app/Person$Builder;" />
+		<method name="setKey(Ljava/lang/String;)Landroid/app/Person$Builder;" />
+		<method name="setName(Ljava/lang/CharSequence;)Landroid/app/Person$Builder;" />
+		<method name="setUri(Ljava/lang/String;)Landroid/app/Person$Builder;" />
+	</class>
+	<class name="android/app/PictureInPictureParams" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/PictureInPictureParams$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/app/PictureInPictureParams;" />
+		<method name="setActions(Ljava/util/List;)Landroid/app/PictureInPictureParams$Builder;" />
+		<method name="setAspectRatio(Landroid/util/Rational;)Landroid/app/PictureInPictureParams$Builder;" />
+		<method name="setAutoEnterEnabled(Z)Landroid/app/PictureInPictureParams$Builder;" since="31" />
+		<method name="setSeamlessResizeEnabled(Z)Landroid/app/PictureInPictureParams$Builder;" since="31" />
+		<method name="setSourceRectHint(Landroid/graphics/Rect;)Landroid/app/PictureInPictureParams$Builder;" />
+	</class>
+	<class name="android/app/PictureInPictureUiState" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="isStashed()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/Presentation" since="17">
+		<extends name="android/app/Dialog" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/Display;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/Display;I)V" />
+		<method name="getDisplay()Landroid/view/Display;" />
+		<method name="getResources()Landroid/content/res/Resources;" />
+		<method name="onDisplayChanged()V" />
+		<method name="onDisplayRemoved()V" />
+	</class>
+	<class name="android/app/ProgressDialog" since="1" deprecated="26">
+		<extends name="android/app/AlertDialog" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" deprecated="29" />
+		<method name="getMax()I" deprecated="29" />
+		<method name="getProgress()I" deprecated="29" />
+		<method name="getSecondaryProgress()I" deprecated="29" />
+		<method name="incrementProgressBy(I)V" deprecated="29" />
+		<method name="incrementSecondaryProgressBy(I)V" deprecated="29" />
+		<method name="isIndeterminate()Z" deprecated="29" />
+		<method name="setIndeterminate(Z)V" deprecated="29" />
+		<method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="29" />
+		<method name="setMax(I)V" deprecated="29" />
+		<method name="setProgress(I)V" deprecated="29" />
+		<method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="29" />
+		<method name="setProgressNumberFormat(Ljava/lang/String;)V" since="11" deprecated="29" />
+		<method name="setProgressPercentFormat(Ljava/text/NumberFormat;)V" since="11" deprecated="29" />
+		<method name="setProgressStyle(I)V" deprecated="29" />
+		<method name="setSecondaryProgress(I)V" deprecated="29" />
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/app/ProgressDialog;" deprecated="29" />
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Landroid/app/ProgressDialog;" deprecated="29" />
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZ)Landroid/app/ProgressDialog;" deprecated="29" />
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZLandroid/content/DialogInterface$OnCancelListener;)Landroid/app/ProgressDialog;" deprecated="29" />
+		<field name="STYLE_HORIZONTAL" deprecated="29" />
+		<field name="STYLE_SPINNER" deprecated="29" />
+	</class>
+	<class name="android/app/RecoverableSecurityException" since="29">
+		<extends name="java/lang/SecurityException" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;Ljava/lang/CharSequence;Landroid/app/RemoteAction;)V" />
+		<method name="getUserAction()Landroid/app/RemoteAction;" />
+		<method name="getUserMessage()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/RemoteAction" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" />
+		<method name="clone()Landroid/app/RemoteAction;" />
+		<method name="dump(Ljava/lang/String;Ljava/io/PrintWriter;)V" />
+		<method name="getActionIntent()Landroid/app/PendingIntent;" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="isEnabled()Z" />
+		<method name="setEnabled(Z)V" />
+		<method name="setShouldShowIcon(Z)V" since="28" />
+		<method name="shouldShowIcon()Z" since="28" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/RemoteInput" since="20">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="addDataResultToIntent(Landroid/app/RemoteInput;Landroid/content/Intent;Ljava/util/Map;)V" since="26" />
+		<method name="addResultsToIntent([Landroid/app/RemoteInput;Landroid/content/Intent;Landroid/os/Bundle;)V" />
+		<method name="getAllowFreeFormInput()Z" />
+		<method name="getAllowedDataTypes()Ljava/util/Set;" since="26" />
+		<method name="getChoices()[Ljava/lang/CharSequence;" />
+		<method name="getDataResultsFromIntent(Landroid/content/Intent;Ljava/lang/String;)Ljava/util/Map;" since="26" />
+		<method name="getEditChoicesBeforeSending()I" since="29" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getResultKey()Ljava/lang/String;" />
+		<method name="getResultsFromIntent(Landroid/content/Intent;)Landroid/os/Bundle;" />
+		<method name="getResultsSource(Landroid/content/Intent;)I" since="28" />
+		<method name="isDataOnly()Z" since="26" />
+		<method name="setResultsSource(Landroid/content/Intent;I)V" since="28" />
+		<field name="CREATOR" />
+		<field name="EDIT_CHOICES_BEFORE_SENDING_AUTO" since="29" />
+		<field name="EDIT_CHOICES_BEFORE_SENDING_DISABLED" since="29" />
+		<field name="EDIT_CHOICES_BEFORE_SENDING_ENABLED" since="29" />
+		<field name="EXTRA_RESULTS_DATA" />
+		<field name="RESULTS_CLIP_LABEL" />
+		<field name="SOURCE_CHOICE" since="28" />
+		<field name="SOURCE_FREE_FORM_INPUT" since="28" />
+	</class>
+	<class name="android/app/RemoteInput$Builder" since="20">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/RemoteInput$Builder;" />
+		<method name="build()Landroid/app/RemoteInput;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="setAllowDataType(Ljava/lang/String;Z)Landroid/app/RemoteInput$Builder;" since="26" />
+		<method name="setAllowFreeFormInput(Z)Landroid/app/RemoteInput$Builder;" />
+		<method name="setChoices([Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;" />
+		<method name="setEditChoicesBeforeSending(I)Landroid/app/RemoteInput$Builder;" since="29" />
+		<method name="setLabel(Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;" />
+	</class>
+	<class name="android/app/SearchManager" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/DialogInterface$OnCancelListener" />
+		<implements name="android/content/DialogInterface$OnDismissListener" />
+		<method name="getGlobalSearchActivity()Landroid/content/ComponentName;" since="16" />
+		<method name="getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;" since="8" />
+		<method name="getSearchablesInGlobalSearch()Ljava/util/List;" since="8" />
+		<method name="setOnCancelListener(Landroid/app/SearchManager$OnCancelListener;)V" />
+		<method name="setOnDismissListener(Landroid/app/SearchManager$OnDismissListener;)V" />
+		<method name="startSearch(Ljava/lang/String;ZLandroid/content/ComponentName;Landroid/os/Bundle;Z)V" />
+		<method name="stopSearch()V" />
+		<method name="triggerSearch(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;)V" since="5" />
+		<field name="ACTION_KEY" />
+		<field name="ACTION_MSG" />
+		<field name="APP_DATA" />
+		<field name="CURSOR_EXTRA_KEY_IN_PROGRESS" since="8" />
+		<field name="EXTRA_DATA_KEY" since="4" />
+		<field name="EXTRA_NEW_SEARCH" since="12" />
+		<field name="EXTRA_SELECT_QUERY" since="8" />
+		<field name="EXTRA_WEB_SEARCH_PENDINGINTENT" since="14" />
+		<field name="FLAG_QUERY_REFINEMENT" since="11" />
+		<field name="INTENT_ACTION_GLOBAL_SEARCH" since="8" />
+		<field name="INTENT_ACTION_SEARCHABLES_CHANGED" since="4" />
+		<field name="INTENT_ACTION_SEARCH_SETTINGS" since="8" />
+		<field name="INTENT_ACTION_SEARCH_SETTINGS_CHANGED" since="4" />
+		<field name="INTENT_ACTION_WEB_SEARCH_SETTINGS" since="4" />
+		<field name="INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED" since="16" />
+		<field name="MENU_KEY" />
+		<field name="MENU_KEYCODE" />
+		<field name="QUERY" />
+		<field name="SHORTCUT_MIME_TYPE" since="4" />
+		<field name="SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG" since="21" />
+		<field name="SUGGEST_COLUMN_CONTENT_TYPE" since="21" />
+		<field name="SUGGEST_COLUMN_DURATION" since="21" />
+		<field name="SUGGEST_COLUMN_FLAGS" since="11" />
+		<field name="SUGGEST_COLUMN_FORMAT" />
+		<field name="SUGGEST_COLUMN_ICON_1" />
+		<field name="SUGGEST_COLUMN_ICON_2" />
+		<field name="SUGGEST_COLUMN_INTENT_ACTION" />
+		<field name="SUGGEST_COLUMN_INTENT_DATA" />
+		<field name="SUGGEST_COLUMN_INTENT_DATA_ID" />
+		<field name="SUGGEST_COLUMN_INTENT_EXTRA_DATA" since="4" />
+		<field name="SUGGEST_COLUMN_IS_LIVE" since="21" />
+		<field name="SUGGEST_COLUMN_LAST_ACCESS_HINT" since="14" />
+		<field name="SUGGEST_COLUMN_PRODUCTION_YEAR" since="21" />
+		<field name="SUGGEST_COLUMN_PURCHASE_PRICE" since="21" />
+		<field name="SUGGEST_COLUMN_QUERY" />
+		<field name="SUGGEST_COLUMN_RATING_SCORE" since="21" />
+		<field name="SUGGEST_COLUMN_RATING_STYLE" since="21" />
+		<field name="SUGGEST_COLUMN_RENTAL_PRICE" since="21" />
+		<field name="SUGGEST_COLUMN_RESULT_CARD_IMAGE" since="21" />
+		<field name="SUGGEST_COLUMN_SHORTCUT_ID" since="4" />
+		<field name="SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING" since="4" />
+		<field name="SUGGEST_COLUMN_TEXT_1" />
+		<field name="SUGGEST_COLUMN_TEXT_2" />
+		<field name="SUGGEST_COLUMN_TEXT_2_URL" since="8" />
+		<field name="SUGGEST_COLUMN_VIDEO_HEIGHT" since="21" />
+		<field name="SUGGEST_COLUMN_VIDEO_WIDTH" since="21" />
+		<field name="SUGGEST_MIME_TYPE" />
+		<field name="SUGGEST_NEVER_MAKE_SHORTCUT" since="4" />
+		<field name="SUGGEST_PARAMETER_LIMIT" since="5" />
+		<field name="SUGGEST_URI_PATH_QUERY" />
+		<field name="SUGGEST_URI_PATH_SHORTCUT" since="4" />
+		<field name="USER_QUERY" since="4" />
+	</class>
+	<class name="android/app/SearchManager$OnCancelListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onCancel()V" />
+	</class>
+	<class name="android/app/SearchManager$OnDismissListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onDismiss()V" />
+	</class>
+	<class name="android/app/SearchableInfo" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="autoUrlDetect()Z" />
+		<method name="getHintId()I" />
+		<method name="getImeOptions()I" />
+		<method name="getInputType()I" />
+		<method name="getSearchActivity()Landroid/content/ComponentName;" />
+		<method name="getSettingsDescriptionId()I" />
+		<method name="getSuggestAuthority()Ljava/lang/String;" />
+		<method name="getSuggestIntentAction()Ljava/lang/String;" />
+		<method name="getSuggestIntentData()Ljava/lang/String;" />
+		<method name="getSuggestPackage()Ljava/lang/String;" />
+		<method name="getSuggestPath()Ljava/lang/String;" />
+		<method name="getSuggestSelection()Ljava/lang/String;" />
+		<method name="getSuggestThreshold()I" />
+		<method name="getVoiceLanguageId()I" />
+		<method name="getVoiceLanguageModeId()I" />
+		<method name="getVoiceMaxResults()I" />
+		<method name="getVoicePromptTextId()I" />
+		<method name="getVoiceSearchEnabled()Z" />
+		<method name="getVoiceSearchLaunchRecognizer()Z" />
+		<method name="getVoiceSearchLaunchWebSearch()Z" />
+		<method name="queryAfterZeroResults()Z" />
+		<method name="shouldIncludeInGlobalSearch()Z" />
+		<method name="shouldRewriteQueryFromData()Z" />
+		<method name="shouldRewriteQueryFromText()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/Service" since="1">
+		<extends name="android/content/ContextWrapper" />
+		<implements name="android/content/ComponentCallbacks" removed="14" />
+		<implements name="android/content/ComponentCallbacks2" since="14" />
+		<method name="&lt;init&gt;()V" />
+		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" />
+		<method name="getApplication()Landroid/app/Application;" />
+		<method name="getForegroundServiceType()I" since="29" />
+		<method name="onBind(Landroid/content/Intent;)Landroid/os/IBinder;" />
+		<method name="onCreate()V" />
+		<method name="onDestroy()V" />
+		<method name="onRebind(Landroid/content/Intent;)V" />
+		<method name="onStart(Landroid/content/Intent;I)V" deprecated="15" />
+		<method name="onStartCommand(Landroid/content/Intent;II)I" since="5" />
+		<method name="onTaskRemoved(Landroid/content/Intent;)V" since="14" />
+		<method name="onUnbind(Landroid/content/Intent;)Z" />
+		<method name="setForeground(Z)V" removed="11" />
+		<method name="startForeground(ILandroid/app/Notification;)V" since="5" />
+		<method name="startForeground(ILandroid/app/Notification;I)V" since="29" />
+		<method name="stopForeground(I)V" since="24" />
+		<method name="stopForeground(Z)V" since="5" />
+		<method name="stopSelf()V" />
+		<method name="stopSelf(I)V" />
+		<method name="stopSelfResult(I)Z" />
+		<field name="START_CONTINUATION_MASK" since="5" />
+		<field name="START_FLAG_REDELIVERY" since="5" />
+		<field name="START_FLAG_RETRY" since="5" />
+		<field name="START_NOT_STICKY" since="5" />
+		<field name="START_REDELIVER_INTENT" since="5" />
+		<field name="START_STICKY" since="5" />
+		<field name="START_STICKY_COMPATIBILITY" since="5" />
+		<field name="STOP_FOREGROUND_DETACH" since="24" />
+		<field name="STOP_FOREGROUND_REMOVE" since="24" />
+	</class>
+	<class name="android/app/ServiceStartNotAllowedException" since="31">
+		<extends name="java/lang/IllegalStateException" />
+	</class>
+	<class name="android/app/SharedElementCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCaptureSharedElementSnapshot(Landroid/view/View;Landroid/graphics/Matrix;Landroid/graphics/RectF;)Landroid/os/Parcelable;" />
+		<method name="onCreateSnapshotView(Landroid/content/Context;Landroid/os/Parcelable;)Landroid/view/View;" />
+		<method name="onMapSharedElements(Ljava/util/List;Ljava/util/Map;)V" />
+		<method name="onRejectSharedElements(Ljava/util/List;)V" />
+		<method name="onSharedElementEnd(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V" />
+		<method name="onSharedElementStart(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V" />
+		<method name="onSharedElementsArrived(Ljava/util/List;Ljava/util/List;Landroid/app/SharedElementCallback$OnSharedElementsReadyListener;)V" since="23" />
+	</class>
+	<class name="android/app/SharedElementCallback$OnSharedElementsReadyListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onSharedElementsReady()V" />
+	</class>
+	<class name="android/app/StatusBarManager" since="29">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/app/SyncNotedAppOp" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="getAttributionTag()Ljava/lang/String;" />
+		<method name="getOp()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/TabActivity" since="1" deprecated="13">
+		<extends name="android/app/ActivityGroup" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getTabHost()Landroid/widget/TabHost;" deprecated="29" />
+		<method name="getTabWidget()Landroid/widget/TabWidget;" deprecated="29" />
+		<method name="setDefaultTab(I)V" deprecated="29" />
+		<method name="setDefaultTab(Ljava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="android/app/TaskInfo" since="29">
+		<extends name="java/lang/Object" />
+		<method name="isVisible()Z" since="33" />
+		<field name="baseActivity" />
+		<field name="baseIntent" />
+		<field name="isRunning" />
+		<field name="numActivities" />
+		<field name="origActivity" />
+		<field name="taskDescription" />
+		<field name="taskId" />
+		<field name="topActivity" />
+	</class>
+	<class name="android/app/TaskStackBuilder" since="16">
+		<extends name="java/lang/Object" />
+		<method name="addNextIntent(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;" />
+		<method name="addNextIntentWithParentStack(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;" />
+		<method name="addParentStack(Landroid/app/Activity;)Landroid/app/TaskStackBuilder;" />
+		<method name="addParentStack(Landroid/content/ComponentName;)Landroid/app/TaskStackBuilder;" />
+		<method name="addParentStack(Ljava/lang/Class;)Landroid/app/TaskStackBuilder;" />
+		<method name="create(Landroid/content/Context;)Landroid/app/TaskStackBuilder;" />
+		<method name="editIntentAt(I)Landroid/content/Intent;" />
+		<method name="getIntentCount()I" />
+		<method name="getIntents()[Landroid/content/Intent;" />
+		<method name="getPendingIntent(II)Landroid/app/PendingIntent;" />
+		<method name="getPendingIntent(IILandroid/os/Bundle;)Landroid/app/PendingIntent;" />
+		<method name="startActivities()V" />
+		<method name="startActivities(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/TimePickerDialog" since="1">
+		<extends name="android/app/AlertDialog" />
+		<implements name="android/content/DialogInterface$OnClickListener" />
+		<implements name="android/widget/TimePicker$OnTimeChangedListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILandroid/app/TimePickerDialog$OnTimeSetListener;IIZ)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/app/TimePickerDialog$OnTimeSetListener;IIZ)V" />
+		<method name="updateTime(II)V" />
+	</class>
+	<class name="android/app/TimePickerDialog$OnTimeSetListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onTimeSet(Landroid/widget/TimePicker;II)V" />
+	</class>
+	<class name="android/app/UiAutomation" since="18">
+		<extends name="java/lang/Object" />
+		<method name="adoptShellPermissionIdentity()V" since="29" />
+		<method name="adoptShellPermissionIdentity([Ljava/lang/String;)V" since="29" />
+		<method name="clearWindowAnimationFrameStats()V" since="21" />
+		<method name="clearWindowContentFrameStats(I)Z" since="21" />
+		<method name="dropShellPermissionIdentity()V" since="29" />
+		<method name="executeAndWaitForEvent(Ljava/lang/Runnable;Landroid/app/UiAutomation$AccessibilityEventFilter;J)Landroid/view/accessibility/AccessibilityEvent;" />
+		<method name="executeShellCommand(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="21" />
+		<method name="executeShellCommandRw(Ljava/lang/String;)[Landroid/os/ParcelFileDescriptor;" since="31" />
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="21" />
+		<method name="getRootInActiveWindow()Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;" />
+		<method name="getWindowAnimationFrameStats()Landroid/view/WindowAnimationFrameStats;" since="21" />
+		<method name="getWindowContentFrameStats(I)Landroid/view/WindowContentFrameStats;" since="21" />
+		<method name="getWindows()Ljava/util/List;" since="21" />
+		<method name="getWindowsOnAllDisplays()Landroid/util/SparseArray;" since="30" />
+		<method name="grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;)V" since="28" />
+		<method name="grantRuntimePermissionAsUser(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V" since="28" />
+		<method name="injectInputEvent(Landroid/view/InputEvent;Z)Z" />
+		<method name="performGlobalAction(I)Z" />
+		<method name="revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;)V" since="28" />
+		<method name="revokeRuntimePermissionAsUser(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V" since="28" />
+		<method name="setOnAccessibilityEventListener(Landroid/app/UiAutomation$OnAccessibilityEventListener;)V" />
+		<method name="setRotation(I)Z" />
+		<method name="setRunAsMonkey(Z)V" />
+		<method name="setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V" />
+		<method name="takeScreenshot()Landroid/graphics/Bitmap;" />
+		<method name="waitForIdle(JJ)V" />
+		<field name="FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES" since="24" />
+		<field name="FLAG_DONT_USE_ACCESSIBILITY" since="31" />
+		<field name="ROTATION_FREEZE_0" />
+		<field name="ROTATION_FREEZE_180" />
+		<field name="ROTATION_FREEZE_270" />
+		<field name="ROTATION_FREEZE_90" />
+		<field name="ROTATION_FREEZE_CURRENT" />
+		<field name="ROTATION_UNFREEZE" />
+	</class>
+	<class name="android/app/UiAutomation$AccessibilityEventFilter" since="18">
+		<extends name="java/lang/Object" />
+		<method name="accept(Landroid/view/accessibility/AccessibilityEvent;)Z" />
+	</class>
+	<class name="android/app/UiAutomation$OnAccessibilityEventListener" since="18">
+		<extends name="java/lang/Object" />
+		<method name="onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" />
+	</class>
+	<class name="android/app/UiModeManager" since="8">
+		<extends name="java/lang/Object" />
+		<method name="disableCarMode(I)V" />
+		<method name="enableCarMode(I)V" />
+		<method name="getCurrentModeType()I" />
+		<method name="getCustomNightModeEnd()Ljava/time/LocalTime;" since="30" />
+		<method name="getCustomNightModeStart()Ljava/time/LocalTime;" since="30" />
+		<method name="getNightMode()I" />
+		<method name="setApplicationNightMode(I)V" since="31" />
+		<method name="setCustomNightModeEnd(Ljava/time/LocalTime;)V" since="30" />
+		<method name="setCustomNightModeStart(Ljava/time/LocalTime;)V" since="30" />
+		<method name="setNightMode(I)V" />
+		<field name="ACTION_ENTER_CAR_MODE" />
+		<field name="ACTION_ENTER_DESK_MODE" />
+		<field name="ACTION_EXIT_CAR_MODE" />
+		<field name="ACTION_EXIT_DESK_MODE" />
+		<field name="DISABLE_CAR_MODE_GO_HOME" />
+		<field name="ENABLE_CAR_MODE_ALLOW_SLEEP" since="21" />
+		<field name="ENABLE_CAR_MODE_GO_CAR_HOME" />
+		<field name="MODE_NIGHT_AUTO" />
+		<field name="MODE_NIGHT_CUSTOM" since="30" />
+		<field name="MODE_NIGHT_NO" />
+		<field name="MODE_NIGHT_YES" />
+	</class>
+	<class name="android/app/VoiceInteractor" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getActiveRequest(Ljava/lang/String;)Landroid/app/VoiceInteractor$Request;" />
+		<method name="getActiveRequests()[Landroid/app/VoiceInteractor$Request;" />
+		<method name="isDestroyed()Z" since="29" />
+		<method name="notifyDirectActionsChanged()V" since="29" />
+		<method name="registerOnDestroyedCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)Z" since="29" />
+		<method name="submitRequest(Landroid/app/VoiceInteractor$Request;)Z" />
+		<method name="submitRequest(Landroid/app/VoiceInteractor$Request;Ljava/lang/String;)Z" />
+		<method name="supportsCommands([Ljava/lang/String;)[Z" />
+		<method name="unregisterOnDestroyedCallback(Ljava/lang/Runnable;)Z" since="29" />
+	</class>
+	<class name="android/app/VoiceInteractor$AbortVoiceRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request" />
+		<method name="&lt;init&gt;(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V" />
+		<method name="onAbortResult(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/VoiceInteractor$CommandRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="onCommandResult(ZLandroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/VoiceInteractor$CompleteVoiceRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request" />
+		<method name="&lt;init&gt;(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V" />
+		<method name="onCompleteResult(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/VoiceInteractor$ConfirmationRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request" />
+		<method name="&lt;init&gt;(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V" />
+		<method name="onConfirmationResult(ZLandroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/VoiceInteractor$PickOptionRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request" />
+		<method name="&lt;init&gt;(Landroid/app/VoiceInteractor$Prompt;[Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V" />
+		<method name="onPickOptionResult(Z[Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/app/VoiceInteractor$PickOptionRequest$Option" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;I)V" />
+		<method name="addSynonym(Ljava/lang/CharSequence;)Landroid/app/VoiceInteractor$PickOptionRequest$Option;" />
+		<method name="countSynonyms()I" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getIndex()I" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getSynonymAt(I)Ljava/lang/CharSequence;" />
+		<method name="setExtras(Landroid/os/Bundle;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/VoiceInteractor$Prompt" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;([Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" />
+		<method name="countVoicePrompts()I" />
+		<method name="getVisualPrompt()Ljava/lang/CharSequence;" />
+		<method name="getVoicePromptAt(I)Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/VoiceInteractor$Request" since="23">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="getActivity()Landroid/app/Activity;" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="onAttached(Landroid/app/Activity;)V" />
+		<method name="onCancel()V" />
+		<method name="onDetached()V" />
+	</class>
+	<class name="android/app/WallpaperColors" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;I)V" since="31" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="fromBitmap(Landroid/graphics/Bitmap;)Landroid/app/WallpaperColors;" />
+		<method name="fromDrawable(Landroid/graphics/drawable/Drawable;)Landroid/app/WallpaperColors;" />
+		<method name="getColorHints()I" since="31" />
+		<method name="getPrimaryColor()Landroid/graphics/Color;" />
+		<method name="getSecondaryColor()Landroid/graphics/Color;" />
+		<method name="getTertiaryColor()Landroid/graphics/Color;" />
+		<field name="CREATOR" />
+		<field name="HINT_SUPPORTS_DARK_TEXT" since="31" />
+		<field name="HINT_SUPPORTS_DARK_THEME" since="31" />
+	</class>
+	<class name="android/app/WallpaperInfo" since="7">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getComponent()Landroid/content/ComponentName;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;" />
+		<method name="getServiceName()Ljava/lang/String;" />
+		<method name="getSettingsActivity()Ljava/lang/String;" />
+		<method name="getSettingsSliceUri()Landroid/net/Uri;" since="29" />
+		<method name="getShowMetadataInPreview()Z" since="25" />
+		<method name="loadAuthor(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<method name="loadContextDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="25" />
+		<method name="loadContextUri(Landroid/content/pm/PackageManager;)Landroid/net/Uri;" since="25" />
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<method name="loadThumbnail(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="shouldUseDefaultUnfoldTransition()Z" since="33" />
+		<method name="supportsMultipleDisplays()Z" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/WallpaperManager" since="5">
+		<extends name="java/lang/Object" />
+		<method name="addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;)V" since="27" />
+		<method name="clear()V" />
+		<method name="clear(I)V" since="24" />
+		<method name="clearWallpaper()V" since="28" />
+		<method name="clearWallpaperOffsets(Landroid/os/IBinder;)V" />
+		<method name="forgetLoadedWallpaper()V" since="14" />
+		<method name="getBuiltInDrawable()Landroid/graphics/drawable/Drawable;" since="19" />
+		<method name="getBuiltInDrawable(I)Landroid/graphics/drawable/Drawable;" since="24" />
+		<method name="getBuiltInDrawable(IIZFF)Landroid/graphics/drawable/Drawable;" since="19" />
+		<method name="getBuiltInDrawable(IIZFFI)Landroid/graphics/drawable/Drawable;" since="24" />
+		<method name="getCropAndSetWallpaperIntent(Landroid/net/Uri;)Landroid/content/Intent;" since="19" />
+		<method name="getDesiredMinimumHeight()I" />
+		<method name="getDesiredMinimumWidth()I" />
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="getFastDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="getInstance(Landroid/content/Context;)Landroid/app/WallpaperManager;" />
+		<method name="getWallpaperColors(I)Landroid/app/WallpaperColors;" since="27" />
+		<method name="getWallpaperFile(I)Landroid/os/ParcelFileDescriptor;" since="24" />
+		<method name="getWallpaperId(I)I" since="24" />
+		<method name="getWallpaperInfo()Landroid/app/WallpaperInfo;" since="7" />
+		<method name="hasResourceWallpaper(I)Z" since="17" />
+		<method name="isSetWallpaperAllowed()Z" since="24" />
+		<method name="isWallpaperSupported()Z" since="23" />
+		<method name="peekDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="peekFastDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="removeOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;)V" since="27" />
+		<method name="sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)V" since="7" />
+		<method name="setBitmap(Landroid/graphics/Bitmap;)V" />
+		<method name="setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Z)I" since="24" />
+		<method name="setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;ZI)I" since="24" />
+		<method name="setDisplayPadding(Landroid/graphics/Rect;)V" since="28" />
+		<method name="setResource(I)V" />
+		<method name="setResource(II)I" since="24" />
+		<method name="setStream(Ljava/io/InputStream;)V" />
+		<method name="setStream(Ljava/io/InputStream;Landroid/graphics/Rect;Z)I" since="24" />
+		<method name="setStream(Ljava/io/InputStream;Landroid/graphics/Rect;ZI)I" since="24" />
+		<method name="setWallpaperOffsetSteps(FF)V" since="7" />
+		<method name="setWallpaperOffsets(Landroid/os/IBinder;FF)V" />
+		<method name="suggestDesiredDimensions(II)V" />
+		<field name="ACTION_CHANGE_LIVE_WALLPAPER" since="16" />
+		<field name="ACTION_CROP_AND_SET_WALLPAPER" since="19" />
+		<field name="ACTION_LIVE_WALLPAPER_CHOOSER" since="7" />
+		<field name="COMMAND_DROP" since="7" />
+		<field name="COMMAND_SECONDARY_TAP" since="11" />
+		<field name="COMMAND_TAP" since="7" />
+		<field name="EXTRA_LIVE_WALLPAPER_COMPONENT" since="16" />
+		<field name="FLAG_LOCK" since="24" />
+		<field name="FLAG_SYSTEM" since="24" />
+		<field name="WALLPAPER_PREVIEW_META_DATA" since="11" />
+	</class>
+	<class name="android/app/WallpaperManager$OnColorsChangedListener" since="27">
+		<extends name="java/lang/Object" />
+		<method name="onColorsChanged(Landroid/app/WallpaperColors;I)V" />
+	</class>
+	<class name="android/app/ZygotePreload" since="29">
+		<extends name="java/lang/Object" />
+		<method name="doPreload(Landroid/content/pm/ApplicationInfo;)V" />
+	</class>
+	<class name="android/app/admin/ConnectEvent" since="26">
+		<extends name="android/app/admin/NetworkEvent" />
+		<method name="getInetAddress()Ljava/net/InetAddress;" />
+		<method name="getPort()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/admin/DelegatedAdminReceiver" since="29">
+		<extends name="android/content/BroadcastReceiver" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onChoosePrivateKeyAlias(Landroid/content/Context;Landroid/content/Intent;ILandroid/net/Uri;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="onNetworkLogsAvailable(Landroid/content/Context;Landroid/content/Intent;JI)V" />
+		<method name="onSecurityLogsAvailable(Landroid/content/Context;Landroid/content/Intent;)V" since="31" />
+	</class>
+	<class name="android/app/admin/DeviceAdminInfo" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getActivityInfo()Landroid/content/pm/ActivityInfo;" />
+		<method name="getComponent()Landroid/content/ComponentName;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getReceiverName()Ljava/lang/String;" />
+		<method name="getTagForPolicy(I)Ljava/lang/String;" />
+		<method name="isVisible()Z" />
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<method name="supportsTransferOwnership()Z" since="28" />
+		<method name="usesPolicy(I)Z" />
+		<field name="CREATOR" />
+		<field name="USES_ENCRYPTED_STORAGE" since="11" />
+		<field name="USES_POLICY_DISABLE_CAMERA" since="14" />
+		<field name="USES_POLICY_DISABLE_KEYGUARD_FEATURES" since="17" />
+		<field name="USES_POLICY_EXPIRE_PASSWORD" since="11" />
+		<field name="USES_POLICY_FORCE_LOCK" />
+		<field name="USES_POLICY_LIMIT_PASSWORD" />
+		<field name="USES_POLICY_RESET_PASSWORD" />
+		<field name="USES_POLICY_WATCH_LOGIN" />
+		<field name="USES_POLICY_WIPE_DATA" />
+	</class>
+	<class name="android/app/admin/DeviceAdminReceiver" since="8">
+		<extends name="android/content/BroadcastReceiver" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getManager(Landroid/content/Context;)Landroid/app/admin/DevicePolicyManager;" />
+		<method name="getWho(Landroid/content/Context;)Landroid/content/ComponentName;" />
+		<method name="onBugreportFailed(Landroid/content/Context;Landroid/content/Intent;I)V" since="24" />
+		<method name="onBugreportShared(Landroid/content/Context;Landroid/content/Intent;Ljava/lang/String;)V" since="24" />
+		<method name="onBugreportSharingDeclined(Landroid/content/Context;Landroid/content/Intent;)V" since="24" />
+		<method name="onChoosePrivateKeyAlias(Landroid/content/Context;Landroid/content/Intent;ILandroid/net/Uri;Ljava/lang/String;)Ljava/lang/String;" since="23" />
+		<method name="onComplianceAcknowledgementRequired(Landroid/content/Context;Landroid/content/Intent;)V" since="31" />
+		<method name="onDisableRequested(Landroid/content/Context;Landroid/content/Intent;)Ljava/lang/CharSequence;" />
+		<method name="onDisabled(Landroid/content/Context;Landroid/content/Intent;)V" />
+		<method name="onEnabled(Landroid/content/Context;Landroid/content/Intent;)V" />
+		<method name="onLockTaskModeEntering(Landroid/content/Context;Landroid/content/Intent;Ljava/lang/String;)V" since="21" />
+		<method name="onLockTaskModeExiting(Landroid/content/Context;Landroid/content/Intent;)V" since="21" />
+		<method name="onNetworkLogsAvailable(Landroid/content/Context;Landroid/content/Intent;JI)V" since="26" />
+		<method name="onOperationSafetyStateChanged(Landroid/content/Context;IZ)V" since="31" />
+		<method name="onPasswordChanged(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26" />
+		<method name="onPasswordChanged(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26" />
+		<method name="onPasswordExpiring(Landroid/content/Context;Landroid/content/Intent;)V" since="11" deprecated="26" />
+		<method name="onPasswordExpiring(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26" />
+		<method name="onPasswordFailed(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26" />
+		<method name="onPasswordFailed(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26" />
+		<method name="onPasswordSucceeded(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26" />
+		<method name="onPasswordSucceeded(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26" />
+		<method name="onProfileProvisioningComplete(Landroid/content/Context;Landroid/content/Intent;)V" since="21" />
+		<method name="onReadyForUserInitialization(Landroid/content/Context;Landroid/content/Intent;)V" since="23" deprecated="24" />
+		<method name="onSecurityLogsAvailable(Landroid/content/Context;Landroid/content/Intent;)V" since="24" />
+		<method name="onSystemUpdatePending(Landroid/content/Context;Landroid/content/Intent;J)V" since="23" />
+		<method name="onTransferAffiliatedProfileOwnershipComplete(Landroid/content/Context;Landroid/os/UserHandle;)V" since="28" />
+		<method name="onTransferOwnershipComplete(Landroid/content/Context;Landroid/os/PersistableBundle;)V" since="28" />
+		<method name="onUserAdded(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26" />
+		<method name="onUserRemoved(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26" />
+		<method name="onUserStarted(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28" />
+		<method name="onUserStopped(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28" />
+		<method name="onUserSwitched(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28" />
+		<field name="ACTION_CHOOSE_PRIVATE_KEY_ALIAS" since="29" />
+		<field name="ACTION_DEVICE_ADMIN_DISABLED" />
+		<field name="ACTION_DEVICE_ADMIN_DISABLE_REQUESTED" />
+		<field name="ACTION_DEVICE_ADMIN_ENABLED" />
+		<field name="ACTION_LOCK_TASK_ENTERING" since="21" />
+		<field name="ACTION_LOCK_TASK_EXITING" since="21" />
+		<field name="ACTION_NETWORK_LOGS_AVAILABLE" since="29" />
+		<field name="ACTION_PASSWORD_CHANGED" />
+		<field name="ACTION_PASSWORD_EXPIRING" since="11" />
+		<field name="ACTION_PASSWORD_FAILED" />
+		<field name="ACTION_PASSWORD_SUCCEEDED" />
+		<field name="ACTION_PROFILE_PROVISIONING_COMPLETE" since="21" />
+		<field name="ACTION_SECURITY_LOGS_AVAILABLE" since="31" />
+		<field name="BUGREPORT_FAILURE_FAILED_COMPLETING" since="24" />
+		<field name="BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE" since="24" />
+		<field name="DEVICE_ADMIN_META_DATA" />
+		<field name="EXTRA_DISABLE_WARNING" />
+		<field name="EXTRA_LOCK_TASK_PACKAGE" since="21" />
+		<field name="EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE" since="28" />
+	</class>
+	<class name="android/app/admin/DeviceAdminService" since="26">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/app/admin/DevicePolicyManager" since="8">
+		<extends name="java/lang/Object" />
+		<method name="acknowledgeDeviceCompliant()V" since="31" />
+		<method name="addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V" since="21" />
+		<method name="addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21" />
+		<method name="addOverrideApn(Landroid/content/ComponentName;Landroid/telephony/data/ApnSetting;)I" since="28" />
+		<method name="addPersistentPreferredActivity(Landroid/content/ComponentName;Landroid/content/IntentFilter;Landroid/content/ComponentName;)V" since="21" />
+		<method name="addUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21" />
+		<method name="bindDeviceAdminServiceAsUser(Landroid/content/ComponentName;Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z" since="26" />
+		<method name="canAdminGrantSensorsPermissions()Z" since="31" />
+		<method name="canUsbDataSignalingBeDisabled()Z" since="31" />
+		<method name="clearApplicationUserData(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/app/admin/DevicePolicyManager$OnClearApplicationUserDataListener;)V" since="28" />
+		<method name="clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V" since="21" />
+		<method name="clearDeviceOwnerApp(Ljava/lang/String;)V" since="21" deprecated="26" />
+		<method name="clearPackagePersistentPreferredActivities(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21" />
+		<method name="clearProfileOwner(Landroid/content/ComponentName;)V" since="24" deprecated="26" />
+		<method name="clearResetPasswordToken(Landroid/content/ComponentName;)Z" since="26" />
+		<method name="clearUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21" />
+		<method name="createAdminSupportIntent(Ljava/lang/String;)Landroid/content/Intent;" since="26" />
+		<method name="createAndInitializeUser(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;)Landroid/os/UserHandle;" since="21" deprecated="23" removed="24" />
+		<method name="createAndManageUser(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/PersistableBundle;I)Landroid/os/UserHandle;" since="24" />
+		<method name="createUser(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/UserHandle;" since="21" deprecated="23" removed="24" />
+		<method name="enableSystemApp(Landroid/content/ComponentName;Landroid/content/Intent;)I" since="21" />
+		<method name="enableSystemApp(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21" />
+		<method name="generateKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Landroid/security/keystore/KeyGenParameterSpec;I)Landroid/security/AttestedKeyPair;" since="28" />
+		<method name="getAccountTypesWithManagementDisabled()[Ljava/lang/String;" since="21" />
+		<method name="getActiveAdmins()Ljava/util/List;" />
+		<method name="getAffiliationIds(Landroid/content/ComponentName;)Ljava/util/Set;" since="26" />
+		<method name="getAlwaysOnVpnLockdownWhitelist(Landroid/content/ComponentName;)Ljava/util/Set;" since="29" />
+		<method name="getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24" />
+		<method name="getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/Bundle;" since="21" />
+		<method name="getApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24" deprecated="26" />
+		<method name="getAutoTimeEnabled(Landroid/content/ComponentName;)Z" since="30" />
+		<method name="getAutoTimeRequired()Z" since="21" deprecated="30" />
+		<method name="getAutoTimeZoneEnabled(Landroid/content/ComponentName;)Z" since="30" />
+		<method name="getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;" since="26" />
+		<method name="getBluetoothContactSharingDisabled(Landroid/content/ComponentName;)Z" since="23" />
+		<method name="getCameraDisabled(Landroid/content/ComponentName;)Z" since="14" />
+		<method name="getCertInstallerPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="23" deprecated="26" />
+		<method name="getCrossProfileCalendarPackages(Landroid/content/ComponentName;)Ljava/util/Set;" since="29" />
+		<method name="getCrossProfileCallerIdDisabled(Landroid/content/ComponentName;)Z" since="21" />
+		<method name="getCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;)Z" since="24" />
+		<method name="getCrossProfilePackages(Landroid/content/ComponentName;)Ljava/util/Set;" since="30" />
+		<method name="getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;" since="21" />
+		<method name="getCurrentFailedPasswordAttempts()I" />
+		<method name="getDelegatePackages(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="26" />
+		<method name="getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="26" />
+		<method name="getDeviceOwnerLockScreenInfo()Ljava/lang/CharSequence;" since="24" />
+		<method name="getEndUserSessionMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="28" />
+		<method name="getEnrollmentSpecificId()Ljava/lang/String;" since="31" />
+		<method name="getFactoryResetProtectionPolicy(Landroid/content/ComponentName;)Landroid/app/admin/FactoryResetProtectionPolicy;" since="30" />
+		<method name="getGlobalPrivateDnsHost(Landroid/content/ComponentName;)Ljava/lang/String;" since="29" />
+		<method name="getGlobalPrivateDnsMode(Landroid/content/ComponentName;)I" since="29" />
+		<method name="getInstalledCaCerts(Landroid/content/ComponentName;)Ljava/util/List;" since="21" />
+		<method name="getKeepUninstalledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="28" />
+		<method name="getKeyPairGrants(Ljava/lang/String;)Ljava/util/Map;" since="31" />
+		<method name="getKeyguardDisabledFeatures(Landroid/content/ComponentName;)I" since="17" />
+		<method name="getLockTaskFeatures(Landroid/content/ComponentName;)I" since="28" />
+		<method name="getLockTaskPackages(Landroid/content/ComponentName;)[Ljava/lang/String;" since="26" />
+		<method name="getLongSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24" />
+		<method name="getManagedProfileMaximumTimeOff(Landroid/content/ComponentName;)J" since="30" />
+		<method name="getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;)I" />
+		<method name="getMaximumTimeToLock(Landroid/content/ComponentName;)J" />
+		<method name="getMeteredDataDisabledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="28" />
+		<method name="getNearbyAppStreamingPolicy()I" since="31" />
+		<method name="getNearbyNotificationStreamingPolicy()I" since="31" />
+		<method name="getOrganizationColor(Landroid/content/ComponentName;)I" since="24" deprecated="31" />
+		<method name="getOrganizationName(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24" />
+		<method name="getOverrideApns(Landroid/content/ComponentName;)Ljava/util/List;" since="28" />
+		<method name="getParentProfileInstance(Landroid/content/ComponentName;)Landroid/app/admin/DevicePolicyManager;" since="24" />
+		<method name="getPasswordComplexity()I" since="29" />
+		<method name="getPasswordExpiration(Landroid/content/ComponentName;)J" since="11" />
+		<method name="getPasswordExpirationTimeout(Landroid/content/ComponentName;)J" since="11" />
+		<method name="getPasswordHistoryLength(Landroid/content/ComponentName;)I" since="11" />
+		<method name="getPasswordMaximumLength(I)I" />
+		<method name="getPasswordMinimumLength(Landroid/content/ComponentName;)I" deprecated="31" />
+		<method name="getPasswordMinimumLetters(Landroid/content/ComponentName;)I" since="11" deprecated="31" />
+		<method name="getPasswordMinimumLowerCase(Landroid/content/ComponentName;)I" since="11" deprecated="31" />
+		<method name="getPasswordMinimumNonLetter(Landroid/content/ComponentName;)I" since="11" deprecated="31" />
+		<method name="getPasswordMinimumNumeric(Landroid/content/ComponentName;)I" since="11" deprecated="31" />
+		<method name="getPasswordMinimumSymbols(Landroid/content/ComponentName;)I" since="11" deprecated="31" />
+		<method name="getPasswordMinimumUpperCase(Landroid/content/ComponentName;)I" since="11" deprecated="31" />
+		<method name="getPasswordQuality(Landroid/content/ComponentName;)I" deprecated="31" />
+		<method name="getPendingSystemUpdate(Landroid/content/ComponentName;)Landroid/app/admin/SystemUpdateInfo;" since="26" />
+		<method name="getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)I" since="23" />
+		<method name="getPermissionPolicy(Landroid/content/ComponentName;)I" since="23" />
+		<method name="getPermittedAccessibilityServices(Landroid/content/ComponentName;)Ljava/util/List;" since="21" />
+		<method name="getPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;)Ljava/util/List;" since="26" />
+		<method name="getPermittedInputMethods(Landroid/content/ComponentName;)Ljava/util/List;" since="21" />
+		<method name="getPersonalAppsSuspendedReasons(Landroid/content/ComponentName;)I" since="30" />
+		<method name="getRequiredPasswordComplexity()I" since="31" />
+		<method name="getRequiredStrongAuthTimeout(Landroid/content/ComponentName;)J" since="26" />
+		<method name="getScreenCaptureDisabled(Landroid/content/ComponentName;)Z" since="21" />
+		<method name="getSecondaryUsers(Landroid/content/ComponentName;)Ljava/util/List;" since="28" />
+		<method name="getShortSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24" />
+		<method name="getStartUserSessionMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="28" />
+		<method name="getStorageEncryption(Landroid/content/ComponentName;)Z" since="11" deprecated="30" />
+		<method name="getStorageEncryptionStatus()I" since="11" />
+		<method name="getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;" since="23" />
+		<method name="getTransferOwnershipBundle()Landroid/os/PersistableBundle;" since="28" />
+		<method name="getTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;)Ljava/util/List;" since="23" />
+		<method name="getUserControlDisabledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="30" />
+		<method name="getUserRestrictions(Landroid/content/ComponentName;)Landroid/os/Bundle;" since="24" />
+		<method name="getWifiMacAddress(Landroid/content/ComponentName;)Ljava/lang/String;" since="24" />
+		<method name="grantKeyPairToApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z" since="30" />
+		<method name="grantKeyPairToWifiAuth(Ljava/lang/String;)Z" since="31" />
+		<method name="hasCaCertInstalled(Landroid/content/ComponentName;[B)Z" since="21" />
+		<method name="hasGrantedPolicy(Landroid/content/ComponentName;I)Z" since="11" />
+		<method name="hasKeyPair(Ljava/lang/String;)Z" since="31" />
+		<method name="hasLockdownAdminConfiguredNetworks(Landroid/content/ComponentName;)Z" since="30" />
+		<method name="installCaCert(Landroid/content/ComponentName;[B)Z" since="21" />
+		<method name="installExistingPackage(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="28" />
+		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;Ljava/security/cert/Certificate;Ljava/lang/String;)Z" since="21" />
+		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;I)Z" since="28" />
+		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;Z)Z" since="24" />
+		<method name="installSystemUpdate(Landroid/content/ComponentName;Landroid/net/Uri;Ljava/util/concurrent/Executor;Landroid/app/admin/DevicePolicyManager$InstallSystemUpdateCallback;)V" since="29" />
+		<method name="isActivePasswordSufficient()Z" />
+		<method name="isActivePasswordSufficientForDeviceRequirement()Z" since="31" />
+		<method name="isAdminActive(Landroid/content/ComponentName;)Z" />
+		<method name="isAffiliatedUser()Z" since="28" />
+		<method name="isAlwaysOnVpnLockdownEnabled(Landroid/content/ComponentName;)Z" since="29" />
+		<method name="isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21" />
+		<method name="isBackupServiceEnabled(Landroid/content/ComponentName;)Z" since="26" />
+		<method name="isCallerApplicationRestrictionsManagingPackage()Z" since="24" deprecated="26" />
+		<method name="isCommonCriteriaModeEnabled(Landroid/content/ComponentName;)Z" since="30" />
+		<method name="isComplianceAcknowledgementRequired()Z" since="31" />
+		<method name="isDeviceIdAttestationSupported()Z" since="28" />
+		<method name="isDeviceOwnerApp(Ljava/lang/String;)Z" since="18" />
+		<method name="isEphemeralUser(Landroid/content/ComponentName;)Z" since="28" />
+		<method name="isKeyPairGrantedToWifiAuth(Ljava/lang/String;)Z" since="31" />
+		<method name="isLockTaskPermitted(Ljava/lang/String;)Z" since="21" />
+		<method name="isLogoutEnabled()Z" since="28" />
+		<method name="isManagedProfile(Landroid/content/ComponentName;)Z" since="24" />
+		<method name="isMasterVolumeMuted(Landroid/content/ComponentName;)Z" since="21" />
+		<method name="isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z" since="26" />
+		<method name="isOrganizationOwnedDeviceWithManagedProfile()Z" since="30" />
+		<method name="isOverrideApnEnabled(Landroid/content/ComponentName;)Z" since="28" />
+		<method name="isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="24" />
+		<method name="isPreferentialNetworkServiceEnabled()Z" since="31" />
+		<method name="isProfileOwnerApp(Ljava/lang/String;)Z" since="21" />
+		<method name="isProvisioningAllowed(Ljava/lang/String;)Z" since="24" />
+		<method name="isResetPasswordTokenActive(Landroid/content/ComponentName;)Z" since="26" />
+		<method name="isSafeOperation(I)Z" since="31" />
+		<method name="isSecurityLoggingEnabled(Landroid/content/ComponentName;)Z" since="24" />
+		<method name="isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21" />
+		<method name="isUniqueDeviceAttestationSupported()Z" since="30" />
+		<method name="isUsbDataSignalingEnabled()Z" since="31" />
+		<method name="isUsingUnifiedPassword(Landroid/content/ComponentName;)Z" since="28" />
+		<method name="listForegroundAffiliatedUsers()Ljava/util/List;" since="31" />
+		<method name="lockNow()V" />
+		<method name="lockNow(I)V" since="26" />
+		<method name="logoutUser(Landroid/content/ComponentName;)I" since="28" />
+		<method name="reboot(Landroid/content/ComponentName;)V" since="24" />
+		<method name="removeActiveAdmin(Landroid/content/ComponentName;)V" />
+		<method name="removeCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21" />
+		<method name="removeKeyPair(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="24" />
+		<method name="removeOverrideApn(Landroid/content/ComponentName;I)Z" since="28" />
+		<method name="removeUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z" since="21" />
+		<method name="requestBugreport(Landroid/content/ComponentName;)Z" since="24" />
+		<method name="resetPassword(Ljava/lang/String;I)Z" deprecated="30" />
+		<method name="resetPasswordWithToken(Landroid/content/ComponentName;Ljava/lang/String;[BI)Z" since="26" />
+		<method name="retrieveNetworkLogs(Landroid/content/ComponentName;J)Ljava/util/List;" since="26" />
+		<method name="retrievePreRebootSecurityLogs(Landroid/content/ComponentName;)Ljava/util/List;" since="24" />
+		<method name="retrieveSecurityLogs(Landroid/content/ComponentName;)Ljava/util/List;" since="24" />
+		<method name="revokeKeyPairFromApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z" since="30" />
+		<method name="revokeKeyPairFromWifiAuth(Ljava/lang/String;)Z" since="31" />
+		<method name="setAccountManagementDisabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="21" />
+		<method name="setAffiliationIds(Landroid/content/ComponentName;Ljava/util/Set;)V" since="26" />
+		<method name="setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="24" />
+		<method name="setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;ZLjava/util/Set;)V" since="29" />
+		<method name="setApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Z)Z" since="21" />
+		<method name="setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)V" since="21" />
+		<method name="setApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="24" deprecated="26" />
+		<method name="setAutoTimeEnabled(Landroid/content/ComponentName;Z)V" since="30" />
+		<method name="setAutoTimeRequired(Landroid/content/ComponentName;Z)V" since="21" deprecated="30" />
+		<method name="setAutoTimeZoneEnabled(Landroid/content/ComponentName;Z)V" since="30" />
+		<method name="setBackupServiceEnabled(Landroid/content/ComponentName;Z)V" since="26" />
+		<method name="setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V" since="23" />
+		<method name="setCameraDisabled(Landroid/content/ComponentName;Z)V" since="14" />
+		<method name="setCertInstallerPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="23" deprecated="26" />
+		<method name="setCommonCriteriaModeEnabled(Landroid/content/ComponentName;Z)V" since="30" />
+		<method name="setConfiguredNetworksLockdownState(Landroid/content/ComponentName;Z)V" since="30" />
+		<method name="setCrossProfileCalendarPackages(Landroid/content/ComponentName;Ljava/util/Set;)V" since="29" />
+		<method name="setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V" since="21" />
+		<method name="setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V" since="24" />
+		<method name="setCrossProfilePackages(Landroid/content/ComponentName;Ljava/util/Set;)V" since="30" />
+		<method name="setDefaultSmsApplication(Landroid/content/ComponentName;Ljava/lang/String;)V" since="29" />
+		<method name="setDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V" since="26" />
+		<method name="setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24" />
+		<method name="setEndUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="28" />
+		<method name="setFactoryResetProtectionPolicy(Landroid/content/ComponentName;Landroid/app/admin/FactoryResetProtectionPolicy;)V" since="30" />
+		<method name="setGlobalPrivateDnsModeOpportunistic(Landroid/content/ComponentName;)I" since="29" />
+		<method name="setGlobalPrivateDnsModeSpecifiedHost(Landroid/content/ComponentName;Ljava/lang/String;)I" since="29" />
+		<method name="setGlobalSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="21" />
+		<method name="setKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/util/List;)V" since="28" />
+		<method name="setKeyPairCertificate(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;Z)Z" since="28" />
+		<method name="setKeyguardDisabled(Landroid/content/ComponentName;Z)Z" since="23" />
+		<method name="setKeyguardDisabledFeatures(Landroid/content/ComponentName;I)V" since="17" />
+		<method name="setLocationEnabled(Landroid/content/ComponentName;Z)V" since="30" />
+		<method name="setLockTaskFeatures(Landroid/content/ComponentName;I)V" since="28" />
+		<method name="setLockTaskPackages(Landroid/content/ComponentName;[Ljava/lang/String;)V" since="21" />
+		<method name="setLogoutEnabled(Landroid/content/ComponentName;Z)V" since="28" />
+		<method name="setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24" />
+		<method name="setManagedProfileMaximumTimeOff(Landroid/content/ComponentName;J)V" since="30" />
+		<method name="setMasterVolumeMuted(Landroid/content/ComponentName;Z)V" since="21" />
+		<method name="setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;I)V" />
+		<method name="setMaximumTimeToLock(Landroid/content/ComponentName;J)V" />
+		<method name="setMeteredDataDisabledPackages(Landroid/content/ComponentName;Ljava/util/List;)Ljava/util/List;" since="28" />
+		<method name="setNearbyAppStreamingPolicy(I)V" since="31" />
+		<method name="setNearbyNotificationStreamingPolicy(I)V" since="31" />
+		<method name="setNetworkLoggingEnabled(Landroid/content/ComponentName;Z)V" since="26" />
+		<method name="setOrganizationColor(Landroid/content/ComponentName;I)V" since="24" deprecated="31" />
+		<method name="setOrganizationId(Ljava/lang/String;)V" since="31" />
+		<method name="setOrganizationName(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24" />
+		<method name="setOverrideApnsEnabled(Landroid/content/ComponentName;Z)V" since="28" />
+		<method name="setPackagesSuspended(Landroid/content/ComponentName;[Ljava/lang/String;Z)[Ljava/lang/String;" since="24" />
+		<method name="setPasswordExpirationTimeout(Landroid/content/ComponentName;J)V" since="11" />
+		<method name="setPasswordHistoryLength(Landroid/content/ComponentName;I)V" since="11" />
+		<method name="setPasswordMinimumLength(Landroid/content/ComponentName;I)V" deprecated="31" />
+		<method name="setPasswordMinimumLetters(Landroid/content/ComponentName;I)V" since="11" deprecated="31" />
+		<method name="setPasswordMinimumLowerCase(Landroid/content/ComponentName;I)V" since="11" deprecated="31" />
+		<method name="setPasswordMinimumNonLetter(Landroid/content/ComponentName;I)V" since="11" deprecated="31" />
+		<method name="setPasswordMinimumNumeric(Landroid/content/ComponentName;I)V" since="11" deprecated="31" />
+		<method name="setPasswordMinimumSymbols(Landroid/content/ComponentName;I)V" since="11" deprecated="31" />
+		<method name="setPasswordMinimumUpperCase(Landroid/content/ComponentName;I)V" since="11" deprecated="31" />
+		<method name="setPasswordQuality(Landroid/content/ComponentName;I)V" deprecated="31" />
+		<method name="setPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)Z" since="23" />
+		<method name="setPermissionPolicy(Landroid/content/ComponentName;I)V" since="23" />
+		<method name="setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z" since="21" />
+		<method name="setPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;Ljava/util/List;)Z" since="26" />
+		<method name="setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z" since="21" />
+		<method name="setPersonalAppsSuspended(Landroid/content/ComponentName;Z)V" since="30" />
+		<method name="setPreferentialNetworkServiceEnabled(Z)V" since="31" />
+		<method name="setProfileEnabled(Landroid/content/ComponentName;)V" since="21" />
+		<method name="setProfileName(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21" />
+		<method name="setRecommendedGlobalProxy(Landroid/content/ComponentName;Ljava/lang/Object;)V" since="21" />
+		<method name="setRequiredPasswordComplexity(I)V" since="31" />
+		<method name="setRequiredStrongAuthTimeout(Landroid/content/ComponentName;J)V" since="26" />
+		<method name="setResetPasswordToken(Landroid/content/ComponentName;[B)Z" since="26" />
+		<method name="setRestrictionsProvider(Landroid/content/ComponentName;Landroid/content/ComponentName;)V" since="21" />
+		<method name="setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V" since="21" />
+		<method name="setSecureSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="21" />
+		<method name="setSecurityLoggingEnabled(Landroid/content/ComponentName;Z)V" since="24" />
+		<method name="setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24" />
+		<method name="setStartUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="28" />
+		<method name="setStatusBarDisabled(Landroid/content/ComponentName;Z)Z" since="23" />
+		<method name="setStorageEncryption(Landroid/content/ComponentName;Z)I" since="11" deprecated="30" />
+		<method name="setSystemSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="28" />
+		<method name="setSystemUpdatePolicy(Landroid/content/ComponentName;Landroid/app/admin/SystemUpdatePolicy;)V" since="23" />
+		<method name="setTime(Landroid/content/ComponentName;J)Z" since="28" />
+		<method name="setTimeZone(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="28" />
+		<method name="setTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/os/PersistableBundle;)V" since="23" />
+		<method name="setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="21" />
+		<method name="setUsbDataSignalingEnabled(Z)V" since="31" />
+		<method name="setUserControlDisabledPackages(Landroid/content/ComponentName;Ljava/util/List;)V" since="30" />
+		<method name="setUserIcon(Landroid/content/ComponentName;Landroid/graphics/Bitmap;)V" since="23" />
+		<method name="startUserInBackground(Landroid/content/ComponentName;Landroid/os/UserHandle;)I" since="28" />
+		<method name="stopUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)I" since="28" />
+		<method name="switchUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z" since="21" />
+		<method name="transferOwnership(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/os/PersistableBundle;)V" since="28" />
+		<method name="uninstallAllUserCaCerts(Landroid/content/ComponentName;)V" since="21" />
+		<method name="uninstallCaCert(Landroid/content/ComponentName;[B)V" since="21" />
+		<method name="updateOverrideApn(Landroid/content/ComponentName;ILandroid/telephony/data/ApnSetting;)Z" since="28" />
+		<method name="wipeData(I)V" />
+		<method name="wipeData(ILjava/lang/CharSequence;)V" since="28" />
+		<field name="ACTION_ADD_DEVICE_ADMIN" />
+		<field name="ACTION_ADMIN_POLICY_COMPLIANCE" since="29" />
+		<field name="ACTION_APPLICATION_DELEGATION_SCOPES_CHANGED" since="26" />
+		<field name="ACTION_CHECK_POLICY_COMPLIANCE" since="30" />
+		<field name="ACTION_DEVICE_ADMIN_SERVICE" since="26" />
+		<field name="ACTION_DEVICE_OWNER_CHANGED" since="23" />
+		<field name="ACTION_GET_PROVISIONING_MODE" since="29" />
+		<field name="ACTION_MANAGED_PROFILE_PROVISIONED" since="23" />
+		<field name="ACTION_PROFILE_OWNER_CHANGED" since="28" />
+		<field name="ACTION_PROVISIONING_SUCCESSFUL" since="26" />
+		<field name="ACTION_PROVISION_MANAGED_DEVICE" since="23" deprecated="31" />
+		<field name="ACTION_PROVISION_MANAGED_PROFILE" since="21" />
+		<field name="ACTION_SET_NEW_PARENT_PROFILE_PASSWORD" since="24" />
+		<field name="ACTION_SET_NEW_PASSWORD" />
+		<field name="ACTION_START_ENCRYPTION" since="11" />
+		<field name="ACTION_SYSTEM_UPDATE_POLICY_CHANGED" since="23" />
+		<field name="DELEGATION_APP_RESTRICTIONS" since="26" />
+		<field name="DELEGATION_BLOCK_UNINSTALL" since="26" />
+		<field name="DELEGATION_CERT_INSTALL" since="26" />
+		<field name="DELEGATION_CERT_SELECTION" since="29" />
+		<field name="DELEGATION_ENABLE_SYSTEM_APP" since="26" />
+		<field name="DELEGATION_INSTALL_EXISTING_PACKAGE" since="28" />
+		<field name="DELEGATION_KEEP_UNINSTALLED_PACKAGES" since="28" />
+		<field name="DELEGATION_NETWORK_LOGGING" since="29" />
+		<field name="DELEGATION_PACKAGE_ACCESS" since="26" />
+		<field name="DELEGATION_PERMISSION_GRANT" since="26" />
+		<field name="DELEGATION_SECURITY_LOGGING" since="31" />
+		<field name="ENCRYPTION_STATUS_ACTIVATING" since="11" />
+		<field name="ENCRYPTION_STATUS_ACTIVE" since="11" />
+		<field name="ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY" since="23" />
+		<field name="ENCRYPTION_STATUS_ACTIVE_PER_USER" since="24" />
+		<field name="ENCRYPTION_STATUS_INACTIVE" since="11" />
+		<field name="ENCRYPTION_STATUS_UNSUPPORTED" since="11" />
+		<field name="EXTRA_ADD_EXPLANATION" />
+		<field name="EXTRA_DELEGATION_SCOPES" since="26" />
+		<field name="EXTRA_DEVICE_ADMIN" />
+		<field name="EXTRA_DEVICE_PASSWORD_REQUIREMENT_ONLY" since="31" />
+		<field name="EXTRA_PASSWORD_COMPLEXITY" since="29" />
+		<field name="EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE" since="22" />
+		<field name="EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE" since="21" />
+		<field name="EXTRA_PROVISIONING_ALLOWED_PROVISIONING_MODES" since="31" />
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME" since="23" />
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE" since="23" />
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM" since="21" />
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER" since="21" />
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION" since="21" />
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME" since="21" deprecated="23" />
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM" since="23" />
+		<field name="EXTRA_PROVISIONING_DISCLAIMERS" since="26" />
+		<field name="EXTRA_PROVISIONING_DISCLAIMER_CONTENT" since="26" />
+		<field name="EXTRA_PROVISIONING_DISCLAIMER_HEADER" since="26" />
+		<field name="EXTRA_PROVISIONING_EMAIL_ADDRESS" since="21" deprecated="26" />
+		<field name="EXTRA_PROVISIONING_IMEI" since="29" />
+		<field name="EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION" since="26" />
+		<field name="EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED" since="22" />
+		<field name="EXTRA_PROVISIONING_LOCALE" since="21" />
+		<field name="EXTRA_PROVISIONING_LOCAL_TIME" since="21" />
+		<field name="EXTRA_PROVISIONING_LOGO_URI" since="24" />
+		<field name="EXTRA_PROVISIONING_MAIN_COLOR" since="24" deprecated="31" />
+		<field name="EXTRA_PROVISIONING_MODE" since="29" />
+		<field name="EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT" since="31" />
+		<field name="EXTRA_PROVISIONING_SERIAL_NUMBER" since="29" />
+		<field name="EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS" since="29" />
+		<field name="EXTRA_PROVISIONING_SKIP_ENCRYPTION" since="23" />
+		<field name="EXTRA_PROVISIONING_SKIP_USER_CONSENT" since="26" deprecated="31" />
+		<field name="EXTRA_PROVISIONING_TIME_ZONE" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY" since="29" />
+		<field name="EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE" since="29" />
+		<field name="EXTRA_PROVISIONING_WIFI_DOMAIN" since="29" />
+		<field name="EXTRA_PROVISIONING_WIFI_EAP_METHOD" since="29" />
+		<field name="EXTRA_PROVISIONING_WIFI_HIDDEN" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_IDENTITY" since="29" />
+		<field name="EXTRA_PROVISIONING_WIFI_PAC_URL" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_PASSWORD" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_PHASE2_AUTH" since="29" />
+		<field name="EXTRA_PROVISIONING_WIFI_PROXY_BYPASS" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_PROXY_HOST" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_PROXY_PORT" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_SECURITY_TYPE" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_SSID" since="21" />
+		<field name="EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE" since="29" />
+		<field name="FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY" since="26" />
+		<field name="FLAG_MANAGED_CAN_ACCESS_PARENT" since="21" />
+		<field name="FLAG_PARENT_CAN_ACCESS_MANAGED" since="21" />
+		<field name="ID_TYPE_BASE_INFO" since="28" />
+		<field name="ID_TYPE_IMEI" since="28" />
+		<field name="ID_TYPE_INDIVIDUAL_ATTESTATION" since="30" />
+		<field name="ID_TYPE_MEID" since="28" />
+		<field name="ID_TYPE_SERIAL" since="28" />
+		<field name="INSTALLKEY_REQUEST_CREDENTIALS_ACCESS" since="28" />
+		<field name="INSTALLKEY_SET_USER_SELECTABLE" since="28" />
+		<field name="KEYGUARD_DISABLE_BIOMETRICS" since="28" />
+		<field name="KEYGUARD_DISABLE_FACE" since="28" />
+		<field name="KEYGUARD_DISABLE_FEATURES_ALL" since="17" />
+		<field name="KEYGUARD_DISABLE_FEATURES_NONE" since="17" />
+		<field name="KEYGUARD_DISABLE_FINGERPRINT" since="21" />
+		<field name="KEYGUARD_DISABLE_IRIS" since="28" />
+		<field name="KEYGUARD_DISABLE_REMOTE_INPUT" since="24" />
+		<field name="KEYGUARD_DISABLE_SECURE_CAMERA" since="17" />
+		<field name="KEYGUARD_DISABLE_SECURE_NOTIFICATIONS" since="21" />
+		<field name="KEYGUARD_DISABLE_TRUST_AGENTS" since="21" />
+		<field name="KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS" since="21" />
+		<field name="KEYGUARD_DISABLE_WIDGETS_ALL" since="17" />
+		<field name="LEAVE_ALL_SYSTEM_APPS_ENABLED" since="28" />
+		<field name="LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK" since="30" />
+		<field name="LOCK_TASK_FEATURE_GLOBAL_ACTIONS" since="28" />
+		<field name="LOCK_TASK_FEATURE_HOME" since="28" />
+		<field name="LOCK_TASK_FEATURE_KEYGUARD" since="28" />
+		<field name="LOCK_TASK_FEATURE_NONE" since="28" />
+		<field name="LOCK_TASK_FEATURE_NOTIFICATIONS" since="28" />
+		<field name="LOCK_TASK_FEATURE_OVERVIEW" since="28" />
+		<field name="LOCK_TASK_FEATURE_SYSTEM_INFO" since="28" />
+		<field name="MAKE_USER_EPHEMERAL" since="28" />
+		<field name="MIME_TYPE_PROVISIONING_NFC" since="21" />
+		<field name="NEARBY_STREAMING_DISABLED" since="31" />
+		<field name="NEARBY_STREAMING_ENABLED" since="31" />
+		<field name="NEARBY_STREAMING_NOT_CONTROLLED_BY_POLICY" since="31" />
+		<field name="NEARBY_STREAMING_SAME_MANAGED_ACCOUNT_ONLY" since="31" />
+		<field name="OPERATION_SAFETY_REASON_DRIVING_DISTRACTION" since="31" />
+		<field name="PASSWORD_COMPLEXITY_HIGH" since="29" />
+		<field name="PASSWORD_COMPLEXITY_LOW" since="29" />
+		<field name="PASSWORD_COMPLEXITY_MEDIUM" since="29" />
+		<field name="PASSWORD_COMPLEXITY_NONE" since="29" />
+		<field name="PASSWORD_QUALITY_ALPHABETIC" />
+		<field name="PASSWORD_QUALITY_ALPHANUMERIC" />
+		<field name="PASSWORD_QUALITY_BIOMETRIC_WEAK" since="14" />
+		<field name="PASSWORD_QUALITY_COMPLEX" since="11" />
+		<field name="PASSWORD_QUALITY_NUMERIC" />
+		<field name="PASSWORD_QUALITY_NUMERIC_COMPLEX" since="21" />
+		<field name="PASSWORD_QUALITY_SOMETHING" />
+		<field name="PASSWORD_QUALITY_UNSPECIFIED" />
+		<field name="PERMISSION_GRANT_STATE_DEFAULT" since="23" />
+		<field name="PERMISSION_GRANT_STATE_DENIED" since="23" />
+		<field name="PERMISSION_GRANT_STATE_GRANTED" since="23" />
+		<field name="PERMISSION_POLICY_AUTO_DENY" since="23" />
+		<field name="PERMISSION_POLICY_AUTO_GRANT" since="23" />
+		<field name="PERMISSION_POLICY_PROMPT" since="23" />
+		<field name="PERSONAL_APPS_NOT_SUSPENDED" since="30" />
+		<field name="PERSONAL_APPS_SUSPENDED_EXPLICITLY" since="30" />
+		<field name="PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT" since="30" />
+		<field name="POLICY_DISABLE_CAMERA" since="26" />
+		<field name="POLICY_DISABLE_SCREEN_CAPTURE" since="26" />
+		<field name="PRIVATE_DNS_MODE_OFF" since="29" />
+		<field name="PRIVATE_DNS_MODE_OPPORTUNISTIC" since="29" />
+		<field name="PRIVATE_DNS_MODE_PROVIDER_HOSTNAME" since="29" />
+		<field name="PRIVATE_DNS_MODE_UNKNOWN" since="29" />
+		<field name="PRIVATE_DNS_SET_ERROR_FAILURE_SETTING" since="29" />
+		<field name="PRIVATE_DNS_SET_ERROR_HOST_NOT_SERVING" since="29" />
+		<field name="PRIVATE_DNS_SET_NO_ERROR" since="29" />
+		<field name="PROVISIONING_MODE_FULLY_MANAGED_DEVICE" since="29" />
+		<field name="PROVISIONING_MODE_MANAGED_PROFILE" since="29" />
+		<field name="PROVISIONING_MODE_MANAGED_PROFILE_ON_PERSONAL_DEVICE" since="31" />
+		<field name="RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT" since="23" />
+		<field name="RESET_PASSWORD_REQUIRE_ENTRY" />
+		<field name="SKIP_SETUP_WIZARD" since="24" />
+		<field name="WIPE_EUICC" since="28" />
+		<field name="WIPE_EXTERNAL_STORAGE" since="9" />
+		<field name="WIPE_RESET_PROTECTION_DATA" since="22" />
+		<field name="WIPE_SILENTLY" since="29" />
+	</class>
+	<class name="android/app/admin/DevicePolicyManager$InstallSystemUpdateCallback" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onInstallUpdateError(ILjava/lang/String;)V" />
+		<field name="UPDATE_ERROR_BATTERY_LOW" />
+		<field name="UPDATE_ERROR_FILE_NOT_FOUND" />
+		<field name="UPDATE_ERROR_INCORRECT_OS_VERSION" />
+		<field name="UPDATE_ERROR_UNKNOWN" />
+		<field name="UPDATE_ERROR_UPDATE_FILE_INVALID" />
+	</class>
+	<class name="android/app/admin/DevicePolicyManager$OnClearApplicationUserDataListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onApplicationUserDataCleared(Ljava/lang/String;Z)V" />
+	</class>
+	<class name="android/app/admin/DnsEvent" since="26">
+		<extends name="android/app/admin/NetworkEvent" />
+		<method name="getHostname()Ljava/lang/String;" />
+		<method name="getInetAddresses()Ljava/util/List;" />
+		<method name="getTotalResolvedAddressCount()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/admin/FactoryResetProtectionPolicy" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFactoryResetProtectionAccounts()Ljava/util/List;" />
+		<method name="isFactoryResetProtectionEnabled()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/admin/FactoryResetProtectionPolicy$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/app/admin/FactoryResetProtectionPolicy;" />
+		<method name="setFactoryResetProtectionAccounts(Ljava/util/List;)Landroid/app/admin/FactoryResetProtectionPolicy$Builder;" />
+		<method name="setFactoryResetProtectionEnabled(Z)Landroid/app/admin/FactoryResetProtectionPolicy$Builder;" />
+	</class>
+	<class name="android/app/admin/FreezePeriod" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/time/MonthDay;Ljava/time/MonthDay;)V" />
+		<method name="getEnd()Ljava/time/MonthDay;" />
+		<method name="getStart()Ljava/time/MonthDay;" />
+	</class>
+	<class name="android/app/admin/NetworkEvent" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getId()J" since="28" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getTimestamp()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/admin/SecurityLog" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="LEVEL_ERROR" since="28" />
+		<field name="LEVEL_INFO" since="28" />
+		<field name="LEVEL_WARNING" since="28" />
+		<field name="TAG_ADB_SHELL_CMD" />
+		<field name="TAG_ADB_SHELL_INTERACTIVE" />
+		<field name="TAG_APP_PROCESS_START" />
+		<field name="TAG_CAMERA_POLICY_SET" since="30" />
+		<field name="TAG_CERT_AUTHORITY_INSTALLED" since="28" />
+		<field name="TAG_CERT_AUTHORITY_REMOVED" since="28" />
+		<field name="TAG_CERT_VALIDATION_FAILURE" since="28" />
+		<field name="TAG_CRYPTO_SELF_TEST_COMPLETED" since="28" />
+		<field name="TAG_KEYGUARD_DISABLED_FEATURES_SET" since="28" />
+		<field name="TAG_KEYGUARD_DISMISSED" />
+		<field name="TAG_KEYGUARD_DISMISS_AUTH_ATTEMPT" />
+		<field name="TAG_KEYGUARD_SECURED" />
+		<field name="TAG_KEY_DESTRUCTION" since="28" />
+		<field name="TAG_KEY_GENERATED" since="28" />
+		<field name="TAG_KEY_IMPORT" since="28" />
+		<field name="TAG_KEY_INTEGRITY_VIOLATION" since="28" />
+		<field name="TAG_LOGGING_STARTED" since="28" />
+		<field name="TAG_LOGGING_STOPPED" since="28" />
+		<field name="TAG_LOG_BUFFER_SIZE_CRITICAL" since="28" />
+		<field name="TAG_MAX_PASSWORD_ATTEMPTS_SET" since="28" />
+		<field name="TAG_MAX_SCREEN_LOCK_TIMEOUT_SET" since="28" />
+		<field name="TAG_MEDIA_MOUNT" since="28" />
+		<field name="TAG_MEDIA_UNMOUNT" since="28" />
+		<field name="TAG_OS_SHUTDOWN" since="28" />
+		<field name="TAG_OS_STARTUP" since="28" />
+		<field name="TAG_PASSWORD_COMPLEXITY_REQUIRED" since="31" />
+		<field name="TAG_PASSWORD_COMPLEXITY_SET" since="28" />
+		<field name="TAG_PASSWORD_EXPIRATION_SET" since="28" />
+		<field name="TAG_PASSWORD_HISTORY_LENGTH_SET" since="28" />
+		<field name="TAG_REMOTE_LOCK" since="28" />
+		<field name="TAG_SYNC_RECV_FILE" />
+		<field name="TAG_SYNC_SEND_FILE" />
+		<field name="TAG_USER_RESTRICTION_ADDED" since="28" />
+		<field name="TAG_USER_RESTRICTION_REMOVED" since="28" />
+		<field name="TAG_WIPE_FAILURE" since="28" />
+	</class>
+	<class name="android/app/admin/SecurityLog$SecurityEvent" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getData()Ljava/lang/Object;" />
+		<method name="getId()J" since="28" />
+		<method name="getLogLevel()I" since="28" />
+		<method name="getTag()I" />
+		<method name="getTimeNanos()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/admin/SystemUpdateInfo" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getReceivedTime()J" />
+		<method name="getSecurityPatchState()I" />
+		<field name="CREATOR" />
+		<field name="SECURITY_PATCH_STATE_FALSE" />
+		<field name="SECURITY_PATCH_STATE_TRUE" />
+		<field name="SECURITY_PATCH_STATE_UNKNOWN" />
+	</class>
+	<class name="android/app/admin/SystemUpdatePolicy" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createAutomaticInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;" />
+		<method name="createPostponeInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;" />
+		<method name="createWindowedInstallPolicy(II)Landroid/app/admin/SystemUpdatePolicy;" />
+		<method name="getFreezePeriods()Ljava/util/List;" since="28" />
+		<method name="getInstallWindowEnd()I" />
+		<method name="getInstallWindowStart()I" />
+		<method name="getPolicyType()I" />
+		<method name="setFreezePeriods(Ljava/util/List;)Landroid/app/admin/SystemUpdatePolicy;" since="28" />
+		<field name="CREATOR" />
+		<field name="TYPE_INSTALL_AUTOMATIC" />
+		<field name="TYPE_INSTALL_WINDOWED" />
+		<field name="TYPE_POSTPONE" />
+	</class>
+	<class name="android/app/admin/SystemUpdatePolicy$ValidationFailedException" since="28">
+		<extends name="java/lang/IllegalArgumentException" />
+		<implements name="android/os/Parcelable" />
+		<method name="getErrorCode()I" />
+		<field name="CREATOR" />
+		<field name="ERROR_COMBINED_FREEZE_PERIOD_TOO_CLOSE" />
+		<field name="ERROR_COMBINED_FREEZE_PERIOD_TOO_LONG" />
+		<field name="ERROR_DUPLICATE_OR_OVERLAP" />
+		<field name="ERROR_NEW_FREEZE_PERIOD_TOO_CLOSE" />
+		<field name="ERROR_NEW_FREEZE_PERIOD_TOO_LONG" />
+		<field name="ERROR_UNKNOWN" />
+	</class>
+	<class name="android/app/admin/UnsafeStateException" since="31">
+		<extends name="java/lang/IllegalStateException" />
+		<implements name="android/os/Parcelable" />
+		<method name="getReasons()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/assist/AssistContent" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getClipData()Landroid/content/ClipData;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getIntent()Landroid/content/Intent;" />
+		<method name="getStructuredData()Ljava/lang/String;" />
+		<method name="getWebUri()Landroid/net/Uri;" />
+		<method name="isAppProvidedIntent()Z" />
+		<method name="isAppProvidedWebUri()Z" since="24" />
+		<method name="setClipData(Landroid/content/ClipData;)V" />
+		<method name="setIntent(Landroid/content/Intent;)V" />
+		<method name="setStructuredData(Ljava/lang/String;)V" />
+		<method name="setWebUri(Landroid/net/Uri;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/assist/AssistStructure" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAcquisitionEndTime()J" since="26" />
+		<method name="getAcquisitionStartTime()J" since="26" />
+		<method name="getActivityComponent()Landroid/content/ComponentName;" />
+		<method name="getWindowNodeAt(I)Landroid/app/assist/AssistStructure$WindowNode;" />
+		<method name="getWindowNodeCount()I" />
+		<method name="isHomeActivity()Z" since="26" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/assist/AssistStructure$ViewNode" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getAlpha()F" />
+		<method name="getAutofillHints()[Ljava/lang/String;" since="26" />
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26" />
+		<method name="getAutofillOptions()[Ljava/lang/CharSequence;" since="26" />
+		<method name="getAutofillType()I" since="26" />
+		<method name="getAutofillValue()Landroid/view/autofill/AutofillValue;" since="26" />
+		<method name="getChildAt(I)Landroid/app/assist/AssistStructure$ViewNode;" />
+		<method name="getChildCount()I" />
+		<method name="getClassName()Ljava/lang/String;" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getElevation()F" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getHeight()I" />
+		<method name="getHint()Ljava/lang/String;" />
+		<method name="getHintIdEntry()Ljava/lang/String;" since="30" />
+		<method name="getHtmlInfo()Landroid/view/ViewStructure$HtmlInfo;" since="26" />
+		<method name="getId()I" />
+		<method name="getIdEntry()Ljava/lang/String;" />
+		<method name="getIdPackage()Ljava/lang/String;" />
+		<method name="getIdType()Ljava/lang/String;" />
+		<method name="getImportantForAutofill()I" since="28" />
+		<method name="getInputType()I" since="26" />
+		<method name="getLeft()I" />
+		<method name="getLocaleList()Landroid/os/LocaleList;" since="26" />
+		<method name="getMaxTextEms()I" since="28" />
+		<method name="getMaxTextLength()I" since="28" />
+		<method name="getMinTextEms()I" since="28" />
+		<method name="getReceiveContentMimeTypes()[Ljava/lang/String;" since="31" />
+		<method name="getScrollX()I" />
+		<method name="getScrollY()I" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTextBackgroundColor()I" />
+		<method name="getTextColor()I" />
+		<method name="getTextIdEntry()Ljava/lang/String;" since="28" />
+		<method name="getTextLineBaselines()[I" />
+		<method name="getTextLineCharOffsets()[I" />
+		<method name="getTextSelectionEnd()I" />
+		<method name="getTextSelectionStart()I" />
+		<method name="getTextSize()F" />
+		<method name="getTextStyle()I" />
+		<method name="getTop()I" />
+		<method name="getTransformation()Landroid/graphics/Matrix;" />
+		<method name="getVisibility()I" />
+		<method name="getWebDomain()Ljava/lang/String;" since="26" />
+		<method name="getWebScheme()Ljava/lang/String;" since="28" />
+		<method name="getWidth()I" />
+		<method name="isAccessibilityFocused()Z" />
+		<method name="isActivated()Z" />
+		<method name="isAssistBlocked()Z" />
+		<method name="isCheckable()Z" />
+		<method name="isChecked()Z" />
+		<method name="isClickable()Z" />
+		<method name="isContextClickable()Z" />
+		<method name="isEnabled()Z" />
+		<method name="isFocusable()Z" />
+		<method name="isFocused()Z" />
+		<method name="isLongClickable()Z" />
+		<method name="isOpaque()Z" since="26" />
+		<method name="isSelected()Z" />
+		<field name="TEXT_COLOR_UNDEFINED" />
+		<field name="TEXT_STYLE_BOLD" />
+		<field name="TEXT_STYLE_ITALIC" />
+		<field name="TEXT_STYLE_STRIKE_THRU" />
+		<field name="TEXT_STYLE_UNDERLINE" />
+	</class>
+	<class name="android/app/assist/AssistStructure$WindowNode" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getDisplayId()I" />
+		<method name="getHeight()I" />
+		<method name="getLeft()I" />
+		<method name="getRootViewNode()Landroid/app/assist/AssistStructure$ViewNode;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="getTop()I" />
+		<method name="getWidth()I" />
+	</class>
+	<class name="android/app/backup/BackupAgent" since="8">
+		<extends name="android/content/ContextWrapper" />
+		<method name="&lt;init&gt;()V" />
+		<method name="fullBackupFile(Ljava/io/File;Landroid/app/backup/FullBackupDataOutput;)V" since="14" />
+		<method name="onBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V" />
+		<method name="onCreate()V" />
+		<method name="onDestroy()V" />
+		<method name="onFullBackup(Landroid/app/backup/FullBackupDataOutput;)V" since="14" />
+		<method name="onQuotaExceeded(JJ)V" since="24" />
+		<method name="onRestore(Landroid/app/backup/BackupDataInput;ILandroid/os/ParcelFileDescriptor;)V" />
+		<method name="onRestore(Landroid/app/backup/BackupDataInput;JLandroid/os/ParcelFileDescriptor;)V" since="28" />
+		<method name="onRestoreFile(Landroid/os/ParcelFileDescriptor;JLjava/io/File;IJJ)V" since="14" />
+		<method name="onRestoreFinished()V" since="21" />
+		<field name="FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED" since="28" />
+		<field name="FLAG_DEVICE_TO_DEVICE_TRANSFER" since="28" />
+		<field name="TYPE_DIRECTORY" since="14" />
+		<field name="TYPE_FILE" since="14" />
+	</class>
+	<class name="android/app/backup/BackupAgentHelper" since="8">
+		<extends name="android/app/backup/BackupAgent" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addHelper(Ljava/lang/String;Landroid/app/backup/BackupHelper;)V" />
+	</class>
+	<class name="android/app/backup/BackupDataInput" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getDataSize()I" />
+		<method name="getKey()Ljava/lang/String;" />
+		<method name="readEntityData([BII)I" />
+		<method name="readNextHeader()Z" />
+		<method name="skipEntityData()V" />
+	</class>
+	<class name="android/app/backup/BackupDataInputStream" since="8">
+		<extends name="java/io/InputStream" />
+		<method name="getKey()Ljava/lang/String;" />
+		<method name="size()I" />
+	</class>
+	<class name="android/app/backup/BackupDataOutput" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getQuota()J" since="26" />
+		<method name="getTransportFlags()I" since="28" />
+		<method name="writeEntityData([BI)I" />
+		<method name="writeEntityHeader(Ljava/lang/String;I)I" />
+	</class>
+	<class name="android/app/backup/BackupHelper" since="8">
+		<extends name="java/lang/Object" />
+		<method name="performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V" />
+		<method name="restoreEntity(Landroid/app/backup/BackupDataInputStream;)V" />
+		<method name="writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V" />
+	</class>
+	<class name="android/app/backup/BackupManager" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="dataChanged()V" />
+		<method name="dataChanged(Ljava/lang/String;)V" />
+		<method name="getUserForAncestralSerialNumber(J)Landroid/os/UserHandle;" since="29" />
+		<method name="requestRestore(Landroid/app/backup/RestoreObserver;)I" deprecated="28" />
+	</class>
+	<class name="android/app/backup/FileBackupHelper" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/app/backup/BackupHelper" />
+		<method name="&lt;init&gt;(Landroid/content/Context;[Ljava/lang/String;)V" />
+	</class>
+	<class name="android/app/backup/FullBackupDataOutput" since="14">
+		<extends name="java/lang/Object" />
+		<method name="getQuota()J" since="26" />
+		<method name="getTransportFlags()I" since="28" />
+	</class>
+	<class name="android/app/backup/RestoreObserver" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onUpdate(ILjava/lang/String;)V" />
+		<method name="restoreFinished(I)V" />
+		<method name="restoreStarting(I)V" />
+	</class>
+	<class name="android/app/backup/SharedPreferencesBackupHelper" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/app/backup/BackupHelper" />
+		<method name="&lt;init&gt;(Landroid/content/Context;[Ljava/lang/String;)V" />
+	</class>
+	<class name="android/app/blob/BlobHandle" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createWithSha256([BLjava/lang/CharSequence;JLjava/lang/String;)Landroid/app/blob/BlobHandle;" />
+		<method name="getExpiryTimeMillis()J" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getSha256Digest()[B" />
+		<method name="getTag()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/blob/BlobStoreManager" since="30">
+		<extends name="java/lang/Object" />
+		<method name="abandonSession(J)V" />
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;I)V" />
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;IJ)V" />
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;Ljava/lang/CharSequence;)V" />
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;Ljava/lang/CharSequence;J)V" />
+		<method name="createSession(Landroid/app/blob/BlobHandle;)J" />
+		<method name="getLeasedBlobs()Ljava/util/List;" />
+		<method name="getRemainingLeaseQuotaBytes()J" />
+		<method name="openBlob(Landroid/app/blob/BlobHandle;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="openSession(J)Landroid/app/blob/BlobStoreManager$Session;" />
+		<method name="releaseLease(Landroid/app/blob/BlobHandle;)V" />
+	</class>
+	<class name="android/app/blob/BlobStoreManager$Session" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="abandon()V" />
+		<method name="allowPackageAccess(Ljava/lang/String;[B)V" />
+		<method name="allowPublicAccess()V" />
+		<method name="allowSameSignatureAccess()V" />
+		<method name="commit(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" />
+		<method name="getSize()J" />
+		<method name="isPackageAccessAllowed(Ljava/lang/String;[B)Z" />
+		<method name="isPublicAccessAllowed()Z" />
+		<method name="isSameSignatureAccessAllowed()Z" />
+		<method name="openRead()Landroid/os/ParcelFileDescriptor;" />
+		<method name="openWrite(JJ)Landroid/os/ParcelFileDescriptor;" />
+	</class>
+	<class name="android/app/job/JobInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBackoffPolicy()I" />
+		<method name="getClipData()Landroid/content/ClipData;" since="26" />
+		<method name="getClipGrantFlags()I" since="26" />
+		<method name="getEstimatedNetworkDownloadBytes()J" since="28" />
+		<method name="getEstimatedNetworkUploadBytes()J" since="28" />
+		<method name="getExtras()Landroid/os/PersistableBundle;" />
+		<method name="getFlexMillis()J" since="24" />
+		<method name="getId()I" />
+		<method name="getInitialBackoffMillis()J" />
+		<method name="getIntervalMillis()J" />
+		<method name="getMaxExecutionDelayMillis()J" />
+		<method name="getMinFlexMillis()J" since="24" />
+		<method name="getMinLatencyMillis()J" />
+		<method name="getMinPeriodMillis()J" since="24" />
+		<method name="getNetworkType()I" deprecated="28" />
+		<method name="getRequiredNetwork()Ljava/lang/Object;" since="28" />
+		<method name="getService()Landroid/content/ComponentName;" />
+		<method name="getTransientExtras()Landroid/os/Bundle;" since="26" />
+		<method name="getTriggerContentMaxDelay()J" since="24" />
+		<method name="getTriggerContentUpdateDelay()J" since="24" />
+		<method name="getTriggerContentUris()[Landroid/app/job/JobInfo$TriggerContentUri;" since="24" />
+		<method name="isExpedited()Z" since="31" />
+		<method name="isImportantWhileForeground()Z" since="28" />
+		<method name="isPeriodic()Z" />
+		<method name="isPersisted()Z" />
+		<method name="isPrefetch()Z" since="28" />
+		<method name="isRequireBatteryNotLow()Z" since="26" />
+		<method name="isRequireCharging()Z" />
+		<method name="isRequireDeviceIdle()Z" />
+		<method name="isRequireStorageNotLow()Z" since="26" />
+		<field name="BACKOFF_POLICY_EXPONENTIAL" />
+		<field name="BACKOFF_POLICY_LINEAR" />
+		<field name="CREATOR" />
+		<field name="DEFAULT_INITIAL_BACKOFF_MILLIS" />
+		<field name="MAX_BACKOFF_DELAY_MILLIS" />
+		<field name="NETWORK_BYTES_UNKNOWN" since="28" />
+		<field name="NETWORK_TYPE_ANY" />
+		<field name="NETWORK_TYPE_CELLULAR" since="28" />
+		<field name="NETWORK_TYPE_METERED" since="26" deprecated="28" />
+		<field name="NETWORK_TYPE_NONE" />
+		<field name="NETWORK_TYPE_NOT_ROAMING" since="24" />
+		<field name="NETWORK_TYPE_UNMETERED" />
+	</class>
+	<class name="android/app/job/JobInfo$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILandroid/content/ComponentName;)V" />
+		<method name="addTriggerContentUri(Landroid/app/job/JobInfo$TriggerContentUri;)Landroid/app/job/JobInfo$Builder;" since="24" />
+		<method name="build()Landroid/app/job/JobInfo;" />
+		<method name="setBackoffCriteria(JI)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setClipData(Landroid/content/ClipData;I)Landroid/app/job/JobInfo$Builder;" since="26" />
+		<method name="setEstimatedNetworkBytes(JJ)Landroid/app/job/JobInfo$Builder;" since="28" />
+		<method name="setExpedited(Z)Landroid/app/job/JobInfo$Builder;" since="31" />
+		<method name="setExtras(Landroid/os/PersistableBundle;)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setImportantWhileForeground(Z)Landroid/app/job/JobInfo$Builder;" since="28" deprecated="31" />
+		<method name="setMinimumLatency(J)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setOverrideDeadline(J)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setPeriodic(J)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setPeriodic(JJ)Landroid/app/job/JobInfo$Builder;" since="24" />
+		<method name="setPersisted(Z)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setPrefetch(Z)Landroid/app/job/JobInfo$Builder;" since="28" />
+		<method name="setRequiredNetwork(Ljava/lang/Object;)Landroid/app/job/JobInfo$Builder;" since="28" />
+		<method name="setRequiredNetworkType(I)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setRequiresBatteryNotLow(Z)Landroid/app/job/JobInfo$Builder;" since="26" />
+		<method name="setRequiresCharging(Z)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setRequiresDeviceIdle(Z)Landroid/app/job/JobInfo$Builder;" />
+		<method name="setRequiresStorageNotLow(Z)Landroid/app/job/JobInfo$Builder;" since="26" />
+		<method name="setTransientExtras(Landroid/os/Bundle;)Landroid/app/job/JobInfo$Builder;" since="26" />
+		<method name="setTriggerContentMaxDelay(J)Landroid/app/job/JobInfo$Builder;" since="24" />
+		<method name="setTriggerContentUpdateDelay(J)Landroid/app/job/JobInfo$Builder;" since="24" />
+	</class>
+	<class name="android/app/job/JobInfo$TriggerContentUri" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;I)V" />
+		<method name="getFlags()I" />
+		<method name="getUri()Landroid/net/Uri;" />
+		<field name="CREATOR" />
+		<field name="FLAG_NOTIFY_FOR_DESCENDANTS" />
+	</class>
+	<class name="android/app/job/JobParameters" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="completeWork(Landroid/app/job/JobWorkItem;)V" since="26" />
+		<method name="dequeueWork()Landroid/app/job/JobWorkItem;" since="26" />
+		<method name="getClipData()Landroid/content/ClipData;" since="26" />
+		<method name="getClipGrantFlags()I" since="26" />
+		<method name="getExtras()Landroid/os/PersistableBundle;" />
+		<method name="getJobId()I" />
+		<method name="getNetwork()Ljava/lang/Object;" since="28" />
+		<method name="getStopReason()I" since="31" />
+		<method name="getTransientExtras()Landroid/os/Bundle;" since="26" />
+		<method name="getTriggeredContentAuthorities()[Ljava/lang/String;" since="24" />
+		<method name="getTriggeredContentUris()[Landroid/net/Uri;" since="24" />
+		<method name="isExpeditedJob()Z" since="31" />
+		<method name="isOverrideDeadlineExpired()Z" />
+		<field name="CREATOR" />
+		<field name="STOP_REASON_APP_STANDBY" since="31" />
+		<field name="STOP_REASON_BACKGROUND_RESTRICTION" since="31" />
+		<field name="STOP_REASON_CANCELLED_BY_APP" since="31" />
+		<field name="STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW" since="31" />
+		<field name="STOP_REASON_CONSTRAINT_CHARGING" since="31" />
+		<field name="STOP_REASON_CONSTRAINT_CONNECTIVITY" since="31" />
+		<field name="STOP_REASON_CONSTRAINT_DEVICE_IDLE" since="31" />
+		<field name="STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW" since="31" />
+		<field name="STOP_REASON_DEVICE_STATE" since="31" />
+		<field name="STOP_REASON_PREEMPT" since="31" />
+		<field name="STOP_REASON_QUOTA" since="31" />
+		<field name="STOP_REASON_SYSTEM_PROCESSING" since="31" />
+		<field name="STOP_REASON_TIMEOUT" since="31" />
+		<field name="STOP_REASON_UNDEFINED" since="31" />
+		<field name="STOP_REASON_USER" since="31" />
+	</class>
+	<class name="android/app/job/JobScheduler" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cancel(I)V" />
+		<method name="cancelAll()V" />
+		<method name="enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I" since="26" />
+		<method name="getAllPendingJobs()Ljava/util/List;" />
+		<method name="getPendingJob(I)Landroid/app/job/JobInfo;" since="24" />
+		<method name="schedule(Landroid/app/job/JobInfo;)I" />
+		<field name="RESULT_FAILURE" />
+		<field name="RESULT_SUCCESS" />
+	</class>
+	<class name="android/app/job/JobService" since="21">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="jobFinished(Landroid/app/job/JobParameters;Z)V" />
+		<method name="onStartJob(Landroid/app/job/JobParameters;)Z" />
+		<method name="onStopJob(Landroid/app/job/JobParameters;)Z" />
+		<field name="PERMISSION_BIND" />
+	</class>
+	<class name="android/app/job/JobServiceEngine" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/app/Service;)V" />
+		<method name="getBinder()Landroid/os/IBinder;" />
+		<method name="jobFinished(Landroid/app/job/JobParameters;Z)V" />
+		<method name="onStartJob(Landroid/app/job/JobParameters;)Z" />
+		<method name="onStopJob(Landroid/app/job/JobParameters;)Z" />
+	</class>
+	<class name="android/app/job/JobWorkItem" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;JJ)V" since="28" />
+		<method name="getDeliveryCount()I" />
+		<method name="getEstimatedNetworkDownloadBytes()J" since="28" />
+		<method name="getEstimatedNetworkUploadBytes()J" since="28" />
+		<method name="getIntent()Landroid/content/Intent;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/people/ConversationStatus" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getActivity()I" />
+		<method name="getAvailability()I" />
+		<method name="getDescription()Ljava/lang/CharSequence;" />
+		<method name="getEndTimeMillis()J" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getStartTimeMillis()J" />
+		<field name="ACTIVITY_ANNIVERSARY" />
+		<field name="ACTIVITY_AUDIO" />
+		<field name="ACTIVITY_BIRTHDAY" />
+		<field name="ACTIVITY_GAME" />
+		<field name="ACTIVITY_LOCATION" />
+		<field name="ACTIVITY_NEW_STORY" />
+		<field name="ACTIVITY_OTHER" />
+		<field name="ACTIVITY_UPCOMING_BIRTHDAY" />
+		<field name="ACTIVITY_VIDEO" />
+		<field name="AVAILABILITY_AVAILABLE" />
+		<field name="AVAILABILITY_BUSY" />
+		<field name="AVAILABILITY_OFFLINE" />
+		<field name="AVAILABILITY_UNKNOWN" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/people/ConversationStatus$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="build()Landroid/app/people/ConversationStatus;" />
+		<method name="setAvailability(I)Landroid/app/people/ConversationStatus$Builder;" />
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/app/people/ConversationStatus$Builder;" />
+		<method name="setEndTimeMillis(J)Landroid/app/people/ConversationStatus$Builder;" />
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/people/ConversationStatus$Builder;" />
+		<method name="setStartTimeMillis(J)Landroid/app/people/ConversationStatus$Builder;" />
+	</class>
+	<class name="android/app/people/PeopleManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="addOrUpdateStatus(Ljava/lang/String;Landroid/app/people/ConversationStatus;)V" />
+		<method name="clearStatus(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="clearStatuses(Ljava/lang/String;)V" />
+		<method name="getStatuses(Ljava/lang/String;)Ljava/util/List;" />
+	</class>
+	<class name="android/app/slice/Slice" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getHints()Ljava/util/List;" />
+		<method name="getItems()Ljava/util/List;" />
+		<method name="getSpec()Landroid/app/slice/SliceSpec;" />
+		<method name="getUri()Landroid/net/Uri;" />
+		<method name="isCallerNeeded()Z" />
+		<field name="CREATOR" />
+		<field name="EXTRA_RANGE_VALUE" />
+		<field name="EXTRA_TOGGLE_STATE" />
+		<field name="HINT_ACTIONS" />
+		<field name="HINT_ERROR" />
+		<field name="HINT_HORIZONTAL" />
+		<field name="HINT_KEYWORDS" />
+		<field name="HINT_LARGE" />
+		<field name="HINT_LAST_UPDATED" />
+		<field name="HINT_LIST" />
+		<field name="HINT_LIST_ITEM" />
+		<field name="HINT_NO_TINT" />
+		<field name="HINT_PARTIAL" />
+		<field name="HINT_PERMISSION_REQUEST" />
+		<field name="HINT_SEE_MORE" />
+		<field name="HINT_SELECTED" />
+		<field name="HINT_SHORTCUT" />
+		<field name="HINT_SUMMARY" />
+		<field name="HINT_TITLE" />
+		<field name="HINT_TTL" />
+		<field name="SUBTYPE_COLOR" />
+		<field name="SUBTYPE_CONTENT_DESCRIPTION" />
+		<field name="SUBTYPE_LAYOUT_DIRECTION" />
+		<field name="SUBTYPE_MAX" />
+		<field name="SUBTYPE_MESSAGE" />
+		<field name="SUBTYPE_MILLIS" />
+		<field name="SUBTYPE_PRIORITY" />
+		<field name="SUBTYPE_RANGE" />
+		<field name="SUBTYPE_SOURCE" />
+		<field name="SUBTYPE_TOGGLE" />
+		<field name="SUBTYPE_VALUE" />
+	</class>
+	<class name="android/app/slice/Slice$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/app/slice/Slice$Builder;)V" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;Landroid/app/slice/SliceSpec;)V" />
+		<method name="addAction(Landroid/app/PendingIntent;Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addBundle(Landroid/os/Bundle;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addHints(Ljava/util/List;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addIcon(Landroid/graphics/drawable/Icon;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addInt(ILjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addLong(JLjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addRemoteInput(Landroid/app/RemoteInput;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addSubSlice(Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;" />
+		<method name="addText(Ljava/lang/CharSequence;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;" />
+		<method name="build()Landroid/app/slice/Slice;" />
+		<method name="setCallerNeeded(Z)Landroid/app/slice/Slice$Builder;" />
+	</class>
+	<class name="android/app/slice/SliceItem" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAction()Landroid/app/PendingIntent;" />
+		<method name="getBundle()Landroid/os/Bundle;" />
+		<method name="getFormat()Ljava/lang/String;" />
+		<method name="getHints()Ljava/util/List;" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getInt()I" />
+		<method name="getLong()J" />
+		<method name="getRemoteInput()Landroid/app/RemoteInput;" />
+		<method name="getSlice()Landroid/app/slice/Slice;" />
+		<method name="getSubType()Ljava/lang/String;" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="hasHint(Ljava/lang/String;)Z" />
+		<field name="CREATOR" />
+		<field name="FORMAT_ACTION" />
+		<field name="FORMAT_BUNDLE" />
+		<field name="FORMAT_IMAGE" />
+		<field name="FORMAT_INT" />
+		<field name="FORMAT_LONG" />
+		<field name="FORMAT_REMOTE_INPUT" />
+		<field name="FORMAT_SLICE" />
+		<field name="FORMAT_TEXT" />
+	</class>
+	<class name="android/app/slice/SliceManager" since="28">
+		<extends name="java/lang/Object" />
+		<method name="bindSlice(Landroid/content/Intent;Ljava/util/Set;)Landroid/app/slice/Slice;" />
+		<method name="bindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;" />
+		<method name="checkSlicePermission(Landroid/net/Uri;II)I" />
+		<method name="getPinnedSlices()Ljava/util/List;" />
+		<method name="getPinnedSpecs(Landroid/net/Uri;)Ljava/util/Set;" />
+		<method name="getSliceDescendants(Landroid/net/Uri;)Ljava/util/Collection;" />
+		<method name="grantSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V" />
+		<method name="mapIntentToUri(Landroid/content/Intent;)Landroid/net/Uri;" />
+		<method name="pinSlice(Landroid/net/Uri;Ljava/util/Set;)V" />
+		<method name="revokeSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V" />
+		<method name="unpinSlice(Landroid/net/Uri;)V" />
+		<field name="CATEGORY_SLICE" />
+		<field name="SLICE_METADATA_KEY" />
+	</class>
+	<class name="android/app/slice/SliceMetrics" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/net/Uri;)V" />
+		<method name="logHidden()V" />
+		<method name="logTouch(ILandroid/net/Uri;)V" />
+		<method name="logVisible()V" />
+	</class>
+	<class name="android/app/slice/SliceProvider" since="28">
+		<extends name="android/content/ContentProvider" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;)V" />
+		<method name="onBindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;" />
+		<method name="onCreatePermissionRequest(Landroid/net/Uri;)Landroid/app/PendingIntent;" />
+		<method name="onGetSliceDescendants(Landroid/net/Uri;)Ljava/util/Collection;" />
+		<method name="onMapIntentToUri(Landroid/content/Intent;)Landroid/net/Uri;" />
+		<method name="onSlicePinned(Landroid/net/Uri;)V" />
+		<method name="onSliceUnpinned(Landroid/net/Uri;)V" />
+		<field name="SLICE_TYPE" />
+	</class>
+	<class name="android/app/slice/SliceSpec" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="canRender(Landroid/app/slice/SliceSpec;)Z" />
+		<method name="getRevision()I" />
+		<method name="getType()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/usage/ConfigurationStats" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/app/usage/ConfigurationStats;)V" />
+		<method name="getActivationCount()I" />
+		<method name="getConfiguration()Landroid/content/res/Configuration;" />
+		<method name="getFirstTimeStamp()J" />
+		<method name="getLastTimeActive()J" />
+		<method name="getLastTimeStamp()J" />
+		<method name="getTotalTimeActive()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/usage/EventStats" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/app/usage/EventStats;)V" />
+		<method name="add(Landroid/app/usage/EventStats;)V" />
+		<method name="getCount()I" />
+		<method name="getEventType()I" />
+		<method name="getFirstTimeStamp()J" />
+		<method name="getLastEventTime()J" />
+		<method name="getLastTimeStamp()J" />
+		<method name="getTotalTime()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/usage/ExternalStorageStats" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAppBytes()J" />
+		<method name="getAudioBytes()J" />
+		<method name="getImageBytes()J" />
+		<method name="getTotalBytes()J" />
+		<method name="getVideoBytes()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/usage/NetworkStats" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getNextBucket(Landroid/app/usage/NetworkStats$Bucket;)Z" />
+		<method name="hasNextBucket()Z" />
+	</class>
+	<class name="android/app/usage/NetworkStats$Bucket" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDefaultNetworkStatus()I" since="28" />
+		<method name="getEndTimeStamp()J" />
+		<method name="getMetered()I" since="26" />
+		<method name="getRoaming()I" since="24" />
+		<method name="getRxBytes()J" />
+		<method name="getRxPackets()J" />
+		<method name="getStartTimeStamp()J" />
+		<method name="getState()I" />
+		<method name="getTag()I" since="24" />
+		<method name="getTxBytes()J" />
+		<method name="getTxPackets()J" />
+		<method name="getUid()I" />
+		<field name="DEFAULT_NETWORK_ALL" since="28" />
+		<field name="DEFAULT_NETWORK_NO" since="28" />
+		<field name="DEFAULT_NETWORK_YES" since="28" />
+		<field name="METERED_ALL" since="26" />
+		<field name="METERED_NO" since="26" />
+		<field name="METERED_YES" since="26" />
+		<field name="ROAMING_ALL" since="24" />
+		<field name="ROAMING_NO" since="24" />
+		<field name="ROAMING_YES" since="24" />
+		<field name="STATE_ALL" />
+		<field name="STATE_DEFAULT" />
+		<field name="STATE_FOREGROUND" />
+		<field name="TAG_NONE" since="24" />
+		<field name="UID_ALL" />
+		<field name="UID_REMOVED" />
+		<field name="UID_TETHERING" />
+	</class>
+	<class name="android/app/usage/NetworkStatsManager" since="23">
+		<extends name="java/lang/Object" />
+		<method name="queryDetails(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;" />
+		<method name="queryDetailsForUid(ILjava/lang/String;JJI)Landroid/app/usage/NetworkStats;" />
+		<method name="queryDetailsForUidTag(ILjava/lang/String;JJII)Landroid/app/usage/NetworkStats;" since="24" />
+		<method name="queryDetailsForUidTagState(ILjava/lang/String;JJIII)Landroid/app/usage/NetworkStats;" since="28" />
+		<method name="querySummary(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;" />
+		<method name="querySummaryForDevice(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats$Bucket;" />
+		<method name="querySummaryForUser(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats$Bucket;" />
+		<method name="registerUsageCallback(ILjava/lang/String;JLandroid/app/usage/NetworkStatsManager$UsageCallback;)V" since="24" />
+		<method name="registerUsageCallback(ILjava/lang/String;JLandroid/app/usage/NetworkStatsManager$UsageCallback;Landroid/os/Handler;)V" since="24" />
+		<method name="unregisterUsageCallback(Landroid/app/usage/NetworkStatsManager$UsageCallback;)V" since="24" />
+	</class>
+	<class name="android/app/usage/NetworkStatsManager$UsageCallback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onThresholdReached(ILjava/lang/String;)V" />
+	</class>
+	<class name="android/app/usage/StorageStats" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAppBytes()J" />
+		<method name="getCacheBytes()J" />
+		<method name="getDataBytes()J" />
+		<method name="getExternalCacheBytes()J" since="31" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/usage/StorageStatsManager" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getFreeBytes(Ljava/util/UUID;)J" />
+		<method name="getTotalBytes(Ljava/util/UUID;)J" />
+		<method name="queryExternalStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/ExternalStorageStats;" />
+		<method name="queryStatsForPackage(Ljava/util/UUID;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;" />
+		<method name="queryStatsForUid(Ljava/util/UUID;I)Landroid/app/usage/StorageStats;" />
+		<method name="queryStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;" />
+	</class>
+	<class name="android/app/usage/UsageEvents" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getNextEvent(Landroid/app/usage/UsageEvents$Event;)Z" />
+		<method name="hasNextEvent()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/usage/UsageEvents$Event" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAppStandbyBucket()I" since="28" />
+		<method name="getClassName()Ljava/lang/String;" />
+		<method name="getConfiguration()Landroid/content/res/Configuration;" />
+		<method name="getEventType()I" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getShortcutId()Ljava/lang/String;" since="25" />
+		<method name="getTimeStamp()J" />
+		<field name="ACTIVITY_PAUSED" since="29" />
+		<field name="ACTIVITY_RESUMED" since="29" />
+		<field name="ACTIVITY_STOPPED" since="29" />
+		<field name="CONFIGURATION_CHANGE" />
+		<field name="DEVICE_SHUTDOWN" since="29" />
+		<field name="DEVICE_STARTUP" since="29" />
+		<field name="FOREGROUND_SERVICE_START" since="29" />
+		<field name="FOREGROUND_SERVICE_STOP" since="29" />
+		<field name="KEYGUARD_HIDDEN" since="28" />
+		<field name="KEYGUARD_SHOWN" since="28" />
+		<field name="MOVE_TO_BACKGROUND" deprecated="29" />
+		<field name="MOVE_TO_FOREGROUND" deprecated="29" />
+		<field name="NONE" />
+		<field name="SCREEN_INTERACTIVE" since="28" />
+		<field name="SCREEN_NON_INTERACTIVE" since="28" />
+		<field name="SHORTCUT_INVOCATION" since="25" />
+		<field name="STANDBY_BUCKET_CHANGED" since="28" />
+		<field name="USER_INTERACTION" since="23" />
+	</class>
+	<class name="android/app/usage/UsageStats" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/app/usage/UsageStats;)V" />
+		<method name="add(Landroid/app/usage/UsageStats;)V" />
+		<method name="getFirstTimeStamp()J" />
+		<method name="getLastTimeForegroundServiceUsed()J" since="29" />
+		<method name="getLastTimeStamp()J" />
+		<method name="getLastTimeUsed()J" />
+		<method name="getLastTimeVisible()J" since="29" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getTotalTimeForegroundServiceUsed()J" since="29" />
+		<method name="getTotalTimeInForeground()J" />
+		<method name="getTotalTimeVisible()J" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/app/usage/UsageStatsManager" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getAppStandbyBucket()I" since="28" />
+		<method name="isAppInactive(Ljava/lang/String;)Z" since="23" />
+		<method name="queryAndAggregateUsageStats(JJ)Ljava/util/Map;" />
+		<method name="queryConfigurations(IJJ)Ljava/util/List;" />
+		<method name="queryEventStats(IJJ)Ljava/util/List;" since="28" />
+		<method name="queryEvents(JJ)Landroid/app/usage/UsageEvents;" />
+		<method name="queryEventsForSelf(JJ)Landroid/app/usage/UsageEvents;" since="28" />
+		<method name="queryUsageStats(IJJ)Ljava/util/List;" />
+		<field name="INTERVAL_BEST" />
+		<field name="INTERVAL_DAILY" />
+		<field name="INTERVAL_MONTHLY" />
+		<field name="INTERVAL_WEEKLY" />
+		<field name="INTERVAL_YEARLY" />
+		<field name="STANDBY_BUCKET_ACTIVE" since="28" />
+		<field name="STANDBY_BUCKET_FREQUENT" since="28" />
+		<field name="STANDBY_BUCKET_RARE" since="28" />
+		<field name="STANDBY_BUCKET_RESTRICTED" since="30" />
+		<field name="STANDBY_BUCKET_WORKING_SET" since="28" />
+	</class>
+	<class name="android/appwidget/AppWidgetHost" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="allocateAppWidgetId()I" />
+		<method name="clearViews()V" since="11" />
+		<method name="createView(Landroid/content/Context;ILandroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetHostView;" />
+		<method name="deleteAllHosts()V" />
+		<method name="deleteAppWidgetId(I)V" />
+		<method name="deleteHost()V" />
+		<method name="getAppWidgetIds()[I" since="26" />
+		<method name="onAppWidgetRemoved(I)V" since="30" />
+		<method name="onCreateView(Landroid/content/Context;ILandroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetHostView;" />
+		<method name="onProviderChanged(ILandroid/appwidget/AppWidgetProviderInfo;)V" />
+		<method name="onProvidersChanged()V" since="17" />
+		<method name="startAppWidgetConfigureActivityForResult(Landroid/app/Activity;IIILandroid/os/Bundle;)V" since="21" />
+		<method name="startListening()V" />
+		<method name="stopListening()V" />
+	</class>
+	<class name="android/appwidget/AppWidgetHostView" since="3">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;II)V" />
+		<method name="getAppWidgetId()I" />
+		<method name="getAppWidgetInfo()Landroid/appwidget/AppWidgetProviderInfo;" />
+		<method name="getDefaultPaddingForWidget(Landroid/content/Context;Landroid/content/ComponentName;Landroid/graphics/Rect;)Landroid/graphics/Rect;" since="15" />
+		<method name="getDefaultView()Landroid/view/View;" />
+		<method name="getErrorView()Landroid/view/View;" />
+		<method name="prepareView(Landroid/view/View;)V" />
+		<method name="resetColorResources()V" since="31" />
+		<method name="setAppWidget(ILandroid/appwidget/AppWidgetProviderInfo;)V" />
+		<method name="setColorResources(Landroid/util/SparseIntArray;)V" since="31" />
+		<method name="setExecutor(Ljava/util/concurrent/Executor;)V" since="26" />
+		<method name="setOnLightBackground(Z)V" since="29" />
+		<method name="updateAppWidget(Landroid/widget/RemoteViews;)V" />
+		<method name="updateAppWidgetOptions(Landroid/os/Bundle;)V" since="16" />
+		<method name="updateAppWidgetSize(Landroid/os/Bundle;IIII)V" since="16" deprecated="31" />
+		<method name="updateAppWidgetSize(Landroid/os/Bundle;Ljava/util/List;)V" since="31" />
+	</class>
+	<class name="android/appwidget/AppWidgetManager" since="3">
+		<extends name="java/lang/Object" />
+		<method name="bindAppWidgetId(ILandroid/content/ComponentName;)V" removed="16" />
+		<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;)Z" since="16" />
+		<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;Landroid/os/Bundle;)Z" since="17" />
+		<method name="bindAppWidgetIdIfAllowed(ILandroid/os/UserHandle;Landroid/content/ComponentName;Landroid/os/Bundle;)Z" since="21" />
+		<method name="getAppWidgetIds(Landroid/content/ComponentName;)[I" />
+		<method name="getAppWidgetInfo(I)Landroid/appwidget/AppWidgetProviderInfo;" />
+		<method name="getAppWidgetOptions(I)Landroid/os/Bundle;" since="16" />
+		<method name="getInstalledProviders()Ljava/util/List;" />
+		<method name="getInstalledProvidersForPackage(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26" />
+		<method name="getInstalledProvidersForProfile(Landroid/os/UserHandle;)Ljava/util/List;" since="21" />
+		<method name="getInstance(Landroid/content/Context;)Landroid/appwidget/AppWidgetManager;" />
+		<method name="isRequestPinAppWidgetSupported()Z" since="26" />
+		<method name="notifyAppWidgetViewDataChanged(II)V" since="11" />
+		<method name="notifyAppWidgetViewDataChanged([II)V" since="11" />
+		<method name="partiallyUpdateAppWidget(ILandroid/widget/RemoteViews;)V" since="11" />
+		<method name="partiallyUpdateAppWidget([ILandroid/widget/RemoteViews;)V" since="11" />
+		<method name="requestPinAppWidget(Landroid/content/ComponentName;Landroid/os/Bundle;Landroid/app/PendingIntent;)Z" since="26" />
+		<method name="updateAppWidget(ILandroid/widget/RemoteViews;)V" />
+		<method name="updateAppWidget(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V" />
+		<method name="updateAppWidget([ILandroid/widget/RemoteViews;)V" />
+		<method name="updateAppWidgetOptions(ILandroid/os/Bundle;)V" since="16" />
+		<method name="updateAppWidgetProviderInfo(Landroid/content/ComponentName;Ljava/lang/String;)V" since="28" />
+		<field name="ACTION_APPWIDGET_BIND" since="16" />
+		<field name="ACTION_APPWIDGET_CONFIGURE" />
+		<field name="ACTION_APPWIDGET_DELETED" />
+		<field name="ACTION_APPWIDGET_DISABLED" />
+		<field name="ACTION_APPWIDGET_ENABLED" />
+		<field name="ACTION_APPWIDGET_HOST_RESTORED" since="21" />
+		<field name="ACTION_APPWIDGET_OPTIONS_CHANGED" since="16" />
+		<field name="ACTION_APPWIDGET_PICK" />
+		<field name="ACTION_APPWIDGET_RESTORED" since="21" />
+		<field name="ACTION_APPWIDGET_UPDATE" />
+		<field name="EXTRA_APPWIDGET_ID" />
+		<field name="EXTRA_APPWIDGET_IDS" />
+		<field name="EXTRA_APPWIDGET_OLD_IDS" since="21" />
+		<field name="EXTRA_APPWIDGET_OPTIONS" since="16" />
+		<field name="EXTRA_APPWIDGET_PREVIEW" since="26" />
+		<field name="EXTRA_APPWIDGET_PROVIDER" since="16" />
+		<field name="EXTRA_APPWIDGET_PROVIDER_PROFILE" since="21" />
+		<field name="EXTRA_CUSTOM_EXTRAS" />
+		<field name="EXTRA_CUSTOM_INFO" />
+		<field name="EXTRA_HOST_ID" since="21" />
+		<field name="INVALID_APPWIDGET_ID" />
+		<field name="META_DATA_APPWIDGET_PROVIDER" />
+		<field name="OPTION_APPWIDGET_HOST_CATEGORY" since="17" />
+		<field name="OPTION_APPWIDGET_MAX_HEIGHT" since="16" />
+		<field name="OPTION_APPWIDGET_MAX_WIDTH" since="16" />
+		<field name="OPTION_APPWIDGET_MIN_HEIGHT" since="16" />
+		<field name="OPTION_APPWIDGET_MIN_WIDTH" since="16" />
+		<field name="OPTION_APPWIDGET_RESTORE_COMPLETED" since="30" />
+		<field name="OPTION_APPWIDGET_SIZES" since="31" />
+	</class>
+	<class name="android/appwidget/AppWidgetProvider" since="3">
+		<extends name="android/content/BroadcastReceiver" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAppWidgetOptionsChanged(Landroid/content/Context;Landroid/appwidget/AppWidgetManager;ILandroid/os/Bundle;)V" since="16" />
+		<method name="onDeleted(Landroid/content/Context;[I)V" />
+		<method name="onDisabled(Landroid/content/Context;)V" />
+		<method name="onEnabled(Landroid/content/Context;)V" />
+		<method name="onRestored(Landroid/content/Context;[I[I)V" since="21" />
+		<method name="onUpdate(Landroid/content/Context;Landroid/appwidget/AppWidgetManager;[I)V" />
+	</class>
+	<class name="android/appwidget/AppWidgetProviderInfo" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="clone()Landroid/appwidget/AppWidgetProviderInfo;" since="17" />
+		<method name="getActivityInfo()Landroid/content/pm/ActivityInfo;" since="31" />
+		<method name="getProfile()Landroid/os/UserHandle;" since="21" />
+		<method name="loadDescription(Landroid/content/Context;)Ljava/lang/CharSequence;" since="31" />
+		<method name="loadIcon(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/String;" since="21" />
+		<method name="loadPreviewImage(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;" since="21" />
+		<field name="CREATOR" />
+		<field name="RESIZE_BOTH" since="12" />
+		<field name="RESIZE_HORIZONTAL" since="12" />
+		<field name="RESIZE_NONE" since="12" />
+		<field name="RESIZE_VERTICAL" since="12" />
+		<field name="WIDGET_CATEGORY_HOME_SCREEN" since="17" />
+		<field name="WIDGET_CATEGORY_KEYGUARD" since="17" />
+		<field name="WIDGET_CATEGORY_SEARCHBOX" since="21" />
+		<field name="WIDGET_FEATURE_CONFIGURATION_OPTIONAL" since="31" />
+		<field name="WIDGET_FEATURE_HIDE_FROM_PICKER" since="28" />
+		<field name="WIDGET_FEATURE_RECONFIGURABLE" since="28" />
+		<field name="autoAdvanceViewId" since="11" />
+		<field name="configure" />
+		<field name="descriptionRes" since="31" />
+		<field name="icon" />
+		<field name="initialKeyguardLayout" since="17" />
+		<field name="initialLayout" />
+		<field name="label" deprecated="21" />
+		<field name="maxResizeHeight" since="31" />
+		<field name="maxResizeWidth" since="31" />
+		<field name="minHeight" />
+		<field name="minResizeHeight" since="14" />
+		<field name="minResizeWidth" since="14" />
+		<field name="minWidth" />
+		<field name="previewImage" since="11" />
+		<field name="previewLayout" since="31" />
+		<field name="provider" />
+		<field name="resizeMode" since="12" />
+		<field name="targetCellHeight" since="31" />
+		<field name="targetCellWidth" since="31" />
+		<field name="updatePeriodMillis" />
+		<field name="widgetCategory" since="17" />
+		<field name="widgetFeatures" since="28" />
+	</class>
+	<class name="android/bluetooth/BluetoothA2dp" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<method name="isA2dpPlaying(Landroid/bluetooth/BluetoothDevice;)Z" />
+		<field name="ACTION_CONNECTION_STATE_CHANGED" />
+		<field name="ACTION_PLAYING_STATE_CHANGED" />
+		<field name="STATE_NOT_PLAYING" />
+		<field name="STATE_PLAYING" />
+	</class>
+	<class name="android/bluetooth/BluetoothAdapter" since="5">
+		<extends name="java/lang/Object" />
+		<method name="cancelDiscovery()Z" />
+		<method name="checkBluetoothAddress(Ljava/lang/String;)Z" />
+		<method name="closeProfileProxy(ILandroid/bluetooth/BluetoothProfile;)V" since="11" />
+		<method name="disable()Z" />
+		<method name="enable()Z" />
+		<method name="getAddress()Ljava/lang/String;" />
+		<method name="getBluetoothLeAdvertiser()Landroid/bluetooth/le/BluetoothLeAdvertiser;" since="21" />
+		<method name="getBluetoothLeScanner()Landroid/bluetooth/le/BluetoothLeScanner;" since="21" />
+		<method name="getBondedDevices()Ljava/util/Set;" />
+		<method name="getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;" deprecated="31" />
+		<method name="getLeMaximumAdvertisingDataLength()I" since="26" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getProfileConnectionState(I)I" since="14" />
+		<method name="getProfileProxy(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;I)Z" since="11" />
+		<method name="getRemoteDevice(Ljava/lang/String;)Landroid/bluetooth/BluetoothDevice;" />
+		<method name="getRemoteDevice([B)Landroid/bluetooth/BluetoothDevice;" since="16" />
+		<method name="getScanMode()I" />
+		<method name="getState()I" />
+		<method name="isDiscovering()Z" />
+		<method name="isEnabled()Z" />
+		<method name="isLe2MPhySupported()Z" since="26" />
+		<method name="isLeCodedPhySupported()Z" since="26" />
+		<method name="isLeExtendedAdvertisingSupported()Z" since="26" />
+		<method name="isLePeriodicAdvertisingSupported()Z" since="26" />
+		<method name="isMultipleAdvertisementSupported()Z" since="21" />
+		<method name="isOffloadedFilteringSupported()Z" since="21" />
+		<method name="isOffloadedScanBatchingSupported()Z" since="21" />
+		<method name="listenUsingInsecureL2capChannel()Landroid/bluetooth/BluetoothServerSocket;" since="29" />
+		<method name="listenUsingInsecureRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;" since="10" />
+		<method name="listenUsingL2capChannel()Landroid/bluetooth/BluetoothServerSocket;" since="29" />
+		<method name="listenUsingRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;" />
+		<method name="setName(Ljava/lang/String;)Z" />
+		<method name="startDiscovery()Z" />
+		<method name="startLeScan(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z" since="18" deprecated="21" />
+		<method name="startLeScan([Ljava/util/UUID;Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z" since="18" deprecated="21" />
+		<method name="stopLeScan(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V" since="18" deprecated="21" />
+		<field name="ACTION_CONNECTION_STATE_CHANGED" since="11" />
+		<field name="ACTION_DISCOVERY_FINISHED" />
+		<field name="ACTION_DISCOVERY_STARTED" />
+		<field name="ACTION_LOCAL_NAME_CHANGED" />
+		<field name="ACTION_REQUEST_DISCOVERABLE" />
+		<field name="ACTION_REQUEST_ENABLE" />
+		<field name="ACTION_SCAN_MODE_CHANGED" />
+		<field name="ACTION_STATE_CHANGED" />
+		<field name="ERROR" />
+		<field name="EXTRA_CONNECTION_STATE" since="11" />
+		<field name="EXTRA_DISCOVERABLE_DURATION" />
+		<field name="EXTRA_LOCAL_NAME" />
+		<field name="EXTRA_PREVIOUS_CONNECTION_STATE" since="11" />
+		<field name="EXTRA_PREVIOUS_SCAN_MODE" />
+		<field name="EXTRA_PREVIOUS_STATE" />
+		<field name="EXTRA_SCAN_MODE" />
+		<field name="EXTRA_STATE" />
+		<field name="SCAN_MODE_CONNECTABLE" />
+		<field name="SCAN_MODE_CONNECTABLE_DISCOVERABLE" />
+		<field name="SCAN_MODE_NONE" />
+		<field name="STATE_CONNECTED" since="11" />
+		<field name="STATE_CONNECTING" since="11" />
+		<field name="STATE_DISCONNECTED" since="11" />
+		<field name="STATE_DISCONNECTING" since="11" />
+		<field name="STATE_OFF" />
+		<field name="STATE_ON" />
+		<field name="STATE_TURNING_OFF" />
+		<field name="STATE_TURNING_ON" />
+	</class>
+	<class name="android/bluetooth/BluetoothAdapter$LeScanCallback" since="18">
+		<extends name="java/lang/Object" />
+		<method name="onLeScan(Landroid/bluetooth/BluetoothDevice;I[B)V" />
+	</class>
+	<class name="android/bluetooth/BluetoothAssignedNumbers" since="11">
+		<extends name="java/lang/Object" />
+		<field name="AAMP_OF_AMERICA" since="19" />
+		<field name="ACCEL_SEMICONDUCTOR" />
+		<field name="ACE_SENSOR" since="19" />
+		<field name="ADIDAS" since="19" />
+		<field name="ADVANCED_PANMOBIL_SYSTEMS" since="19" />
+		<field name="AIROHA_TECHNOLOGY" since="19" />
+		<field name="ALCATEL" />
+		<field name="ALPWISE" since="19" />
+		<field name="AMICCOM_ELECTRONICS" since="19" />
+		<field name="APLIX" since="19" />
+		<field name="APPLE" />
+		<field name="APT_LICENSING" />
+		<field name="ARCHOS" since="19" />
+		<field name="ARP_DEVICES" since="19" />
+		<field name="ATHEROS_COMMUNICATIONS" />
+		<field name="ATMEL" />
+		<field name="AUSTCO_COMMUNICATION_SYSTEMS" since="19" />
+		<field name="AUTONET_MOBILE" since="19" />
+		<field name="AVAGO" />
+		<field name="AVM_BERLIN" />
+		<field name="A_AND_D_ENGINEERING" since="19" />
+		<field name="A_AND_R_CAMBRIDGE" since="19" />
+		<field name="BANDSPEED" />
+		<field name="BAND_XI_INTERNATIONAL" since="19" />
+		<field name="BDE_TECHNOLOGY" since="19" />
+		<field name="BEATS_ELECTRONICS" since="19" />
+		<field name="BEAUTIFUL_ENTERPRISE" since="19" />
+		<field name="BEKEY" since="19" />
+		<field name="BELKIN_INTERNATIONAL" />
+		<field name="BINAURIC" since="19" />
+		<field name="BIOSENTRONICS" since="19" />
+		<field name="BLUEGIGA" />
+		<field name="BLUERADIOS" since="19" />
+		<field name="BLUETOOTH_SIG" />
+		<field name="BLUETREK_TECHNOLOGIES" since="19" />
+		<field name="BOSE" since="19" />
+		<field name="BRIARTEK" since="19" />
+		<field name="BROADCOM" />
+		<field name="CAEN_RFID" since="19" />
+		<field name="CAMBRIDGE_SILICON_RADIO" />
+		<field name="CATC" />
+		<field name="CINETIX" since="19" />
+		<field name="CLARINOX_TECHNOLOGIES" since="19" />
+		<field name="COLORFY" since="19" />
+		<field name="COMMIL" />
+		<field name="CONEXANT_SYSTEMS" />
+		<field name="CONNECTBLUE" since="19" />
+		<field name="CONTINENTAL_AUTOMOTIVE" />
+		<field name="CONWISE_TECHNOLOGY" />
+		<field name="CREATIVE_TECHNOLOGY" since="19" />
+		<field name="C_TECHNOLOGIES" />
+		<field name="DANLERS" since="19" />
+		<field name="DELORME_PUBLISHING_COMPANY" since="19" />
+		<field name="DEXCOM" since="19" />
+		<field name="DIALOG_SEMICONDUCTOR" since="19" />
+		<field name="DIGIANSWER" />
+		<field name="ECLIPSE" />
+		<field name="ECOTEST" since="19" />
+		<field name="ELGATO_SYSTEMS" since="19" />
+		<field name="EM_MICROELECTRONIC_MARIN" />
+		<field name="EQUINOX_AG" since="19" />
+		<field name="ERICSSON_TECHNOLOGY" />
+		<field name="EVLUMA" since="19" />
+		<field name="FREE2MOVE" />
+		<field name="FUNAI_ELECTRIC" since="19" />
+		<field name="GARMIN_INTERNATIONAL" since="19" />
+		<field name="GCT_SEMICONDUCTOR" />
+		<field name="GELO" since="19" />
+		<field name="GENEQ" since="19" />
+		<field name="GENERAL_MOTORS" since="19" />
+		<field name="GENNUM" />
+		<field name="GEOFORCE" since="19" />
+		<field name="GIBSON_GUITARS" since="19" />
+		<field name="GN_NETCOM" since="19" />
+		<field name="GN_RESOUND" since="19" />
+		<field name="GOOGLE" since="19" />
+		<field name="GREEN_THROTTLE_GAMES" since="19" />
+		<field name="GROUP_SENSE" since="19" />
+		<field name="HANLYNN_TECHNOLOGIES" since="19" />
+		<field name="HARMAN_INTERNATIONAL" />
+		<field name="HEWLETT_PACKARD" since="19" />
+		<field name="HITACHI" />
+		<field name="HOSIDEN" since="19" />
+		<field name="IBM" />
+		<field name="INFINEON_TECHNOLOGIES" />
+		<field name="INGENIEUR_SYSTEMGRUPPE_ZAHN" since="19" />
+		<field name="INTEGRATED_SILICON_SOLUTION" />
+		<field name="INTEGRATED_SYSTEM_SOLUTION" />
+		<field name="INTEL" />
+		<field name="INVENTEL" />
+		<field name="IPEXTREME" />
+		<field name="I_TECH_DYNAMIC_GLOBAL_DISTRIBUTION" since="19" />
+		<field name="JAWBONE" since="19" />
+		<field name="JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS" since="19" />
+		<field name="JOHNSON_CONTROLS" since="19" />
+		<field name="J_AND_M" />
+		<field name="KAWANTECH" since="19" />
+		<field name="KC_TECHNOLOGY" />
+		<field name="KENSINGTON_COMPUTER_PRODUCTS_GROUP" since="19" />
+		<field name="LAIRD_TECHNOLOGIES" since="19" />
+		<field name="LESSWIRE" since="19" />
+		<field name="LG_ELECTRONICS" since="19" />
+		<field name="LINAK" since="19" />
+		<field name="LUCENT" />
+		<field name="LUDUS_HELSINKI" since="19" />
+		<field name="MACRONIX" />
+		<field name="MAGNETI_MARELLI" since="19" />
+		<field name="MANSELLA" />
+		<field name="MARVELL" />
+		<field name="MATSUSHITA_ELECTRIC" />
+		<field name="MC10" since="19" />
+		<field name="MEDIATEK" />
+		<field name="MESO_INTERNATIONAL" since="19" />
+		<field name="META_WATCH" since="19" />
+		<field name="MEWTEL_TECHNOLOGY" />
+		<field name="MICOMMAND" since="19" />
+		<field name="MICROCHIP_TECHNOLOGY" since="19" />
+		<field name="MICROSOFT" />
+		<field name="MINDTREE" since="19" />
+		<field name="MISFIT_WEARABLES" since="19" />
+		<field name="MITEL_SEMICONDUCTOR" />
+		<field name="MITSUBISHI_ELECTRIC" />
+		<field name="MOBILIAN_CORPORATION" />
+		<field name="MONSTER" since="19" />
+		<field name="MOTOROLA" />
+		<field name="MSTAR_SEMICONDUCTOR" since="19" />
+		<field name="MUZIK" since="19" />
+		<field name="NEC" />
+		<field name="NEC_LIGHTING" since="19" />
+		<field name="NEWLOGIC" />
+		<field name="NIKE" since="19" />
+		<field name="NINE_SOLUTIONS" since="19" />
+		<field name="NOKIA_MOBILE_PHONES" />
+		<field name="NORDIC_SEMICONDUCTOR" />
+		<field name="NORWOOD_SYSTEMS" />
+		<field name="ODM_TECHNOLOGY" since="19" />
+		<field name="OMEGAWAVE" since="19" />
+		<field name="ONSET_COMPUTER" since="19" />
+		<field name="OPEN_INTERFACE" />
+		<field name="OTL_DYNAMICS" since="19" />
+		<field name="PANDA_OCEAN" since="19" />
+		<field name="PARROT" />
+		<field name="PARTHUS_TECHNOLOGIES" />
+		<field name="PASSIF_SEMICONDUCTOR" since="19" />
+		<field name="PETER_SYSTEMTECHNIK" since="19" />
+		<field name="PHILIPS_SEMICONDUCTORS" />
+		<field name="PLANTRONICS" />
+		<field name="POLAR_ELECTRO" since="19" />
+		<field name="POLAR_ELECTRO_EUROPE" since="19" />
+		<field name="PROCTER_AND_GAMBLE" since="19" />
+		<field name="QUALCOMM" />
+		<field name="QUALCOMM_CONNECTED_EXPERIENCES" since="19" />
+		<field name="QUALCOMM_INNOVATION_CENTER" since="19" />
+		<field name="QUALCOMM_LABS" since="19" />
+		<field name="QUALCOMM_TECHNOLOGIES" since="19" />
+		<field name="QUINTIC" since="19" />
+		<field name="QUUPPA" since="19" />
+		<field name="RALINK_TECHNOLOGY" />
+		<field name="RDA_MICROELECTRONICS" since="19" />
+		<field name="REALTEK_SEMICONDUCTOR" />
+		<field name="RED_M" />
+		<field name="RENESAS_TECHNOLOGY" />
+		<field name="RESEARCH_IN_MOTION" />
+		<field name="RF_MICRO_DEVICES" />
+		<field name="RIVIERAWAVES" />
+		<field name="ROHDE_AND_SCHWARZ" />
+		<field name="RTX_TELECOM" />
+		<field name="SAMSUNG_ELECTRONICS" since="19" />
+		<field name="SARIS_CYCLING_GROUP" since="19" />
+		<field name="SEERS_TECHNOLOGY" since="19" />
+		<field name="SEIKO_EPSON" />
+		<field name="SELFLY" since="19" />
+		<field name="SEMILINK" since="19" />
+		<field name="SENNHEISER_COMMUNICATIONS" since="19" />
+		<field name="SHANGHAI_SUPER_SMART_ELECTRONICS" since="19" />
+		<field name="SHENZHEN_EXCELSECU_DATA_TECHNOLOGY" since="19" />
+		<field name="SIGNIA_TECHNOLOGIES" />
+		<field name="SILICON_WAVE" />
+		<field name="SIRF_TECHNOLOGY" />
+		<field name="SOCKET_MOBILE" />
+		<field name="SONY_ERICSSON" />
+		<field name="SOUND_ID" since="19" />
+		<field name="SPORTS_TRACKING_TECHNOLOGIES" since="19" />
+		<field name="SR_MEDIZINELEKTRONIK" since="19" />
+		<field name="STACCATO_COMMUNICATIONS" />
+		<field name="STALMART_TECHNOLOGY" since="19" />
+		<field name="STARKEY_LABORATORIES" since="19" />
+		<field name="STOLLMAN_E_PLUS_V" since="19" />
+		<field name="STONESTREET_ONE" />
+		<field name="ST_MICROELECTRONICS" />
+		<field name="SUMMIT_DATA_COMMUNICATIONS" since="19" />
+		<field name="SUUNTO" since="19" />
+		<field name="SWIRL_NETWORKS" since="19" />
+		<field name="SYMBOL_TECHNOLOGIES" />
+		<field name="SYNOPSYS" />
+		<field name="SYSTEMS_AND_CHIPS" />
+		<field name="S_POWER_ELECTRONICS" since="19" />
+		<field name="TAIXINGBANG_TECHNOLOGY" since="19" />
+		<field name="TENOVIS" />
+		<field name="TERAX" />
+		<field name="TEXAS_INSTRUMENTS" />
+		<field name="THINKOPTICS" since="19" />
+		<field name="THREECOM" />
+		<field name="THREE_DIJOY" />
+		<field name="THREE_DSP" />
+		<field name="TIMEKEEPING_SYSTEMS" since="19" />
+		<field name="TIMEX_GROUP_USA" since="19" />
+		<field name="TOPCORN_POSITIONING_SYSTEMS" since="19" />
+		<field name="TOSHIBA" />
+		<field name="TRANSILICA" />
+		<field name="TRELAB" since="19" />
+		<field name="TTPCOM" />
+		<field name="TXTR" since="19" />
+		<field name="TZERO_TECHNOLOGIES" />
+		<field name="UNIVERSAL_ELECTRONICS" since="19" />
+		<field name="VERTU" since="19" />
+		<field name="VISTEON" since="19" />
+		<field name="VIZIO" />
+		<field name="VOYETRA_TURTLE_BEACH" since="19" />
+		<field name="WAVEPLUS_TECHNOLOGY" />
+		<field name="WICENTRIC" />
+		<field name="WIDCOMM" />
+		<field name="WUXI_VIMICRO" since="19" />
+		<field name="ZEEVO" />
+		<field name="ZER01_TV" since="19" />
+		<field name="ZOMM" since="19" />
+		<field name="ZSCAN_SOFTWARE" since="19" />
+	</class>
+	<class name="android/bluetooth/BluetoothClass" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDeviceClass()I" />
+		<method name="getMajorDeviceClass()I" />
+		<method name="hasService(I)Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/bluetooth/BluetoothClass$Device" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="AUDIO_VIDEO_CAMCORDER" />
+		<field name="AUDIO_VIDEO_CAR_AUDIO" />
+		<field name="AUDIO_VIDEO_HANDSFREE" />
+		<field name="AUDIO_VIDEO_HEADPHONES" />
+		<field name="AUDIO_VIDEO_HIFI_AUDIO" />
+		<field name="AUDIO_VIDEO_LOUDSPEAKER" />
+		<field name="AUDIO_VIDEO_MICROPHONE" />
+		<field name="AUDIO_VIDEO_PORTABLE_AUDIO" />
+		<field name="AUDIO_VIDEO_SET_TOP_BOX" />
+		<field name="AUDIO_VIDEO_UNCATEGORIZED" />
+		<field name="AUDIO_VIDEO_VCR" />
+		<field name="AUDIO_VIDEO_VIDEO_CAMERA" />
+		<field name="AUDIO_VIDEO_VIDEO_CONFERENCING" />
+		<field name="AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER" />
+		<field name="AUDIO_VIDEO_VIDEO_GAMING_TOY" />
+		<field name="AUDIO_VIDEO_VIDEO_MONITOR" />
+		<field name="AUDIO_VIDEO_WEARABLE_HEADSET" />
+		<field name="COMPUTER_DESKTOP" />
+		<field name="COMPUTER_HANDHELD_PC_PDA" />
+		<field name="COMPUTER_LAPTOP" />
+		<field name="COMPUTER_PALM_SIZE_PC_PDA" />
+		<field name="COMPUTER_SERVER" />
+		<field name="COMPUTER_UNCATEGORIZED" />
+		<field name="COMPUTER_WEARABLE" />
+		<field name="HEALTH_BLOOD_PRESSURE" />
+		<field name="HEALTH_DATA_DISPLAY" />
+		<field name="HEALTH_GLUCOSE" />
+		<field name="HEALTH_PULSE_OXIMETER" />
+		<field name="HEALTH_PULSE_RATE" />
+		<field name="HEALTH_THERMOMETER" />
+		<field name="HEALTH_UNCATEGORIZED" />
+		<field name="HEALTH_WEIGHING" />
+		<field name="PHONE_CELLULAR" />
+		<field name="PHONE_CORDLESS" />
+		<field name="PHONE_ISDN" />
+		<field name="PHONE_MODEM_OR_GATEWAY" />
+		<field name="PHONE_SMART" />
+		<field name="PHONE_UNCATEGORIZED" />
+		<field name="TOY_CONTROLLER" />
+		<field name="TOY_DOLL_ACTION_FIGURE" />
+		<field name="TOY_GAME" />
+		<field name="TOY_ROBOT" />
+		<field name="TOY_UNCATEGORIZED" />
+		<field name="TOY_VEHICLE" />
+		<field name="WEARABLE_GLASSES" />
+		<field name="WEARABLE_HELMET" />
+		<field name="WEARABLE_JACKET" />
+		<field name="WEARABLE_PAGER" />
+		<field name="WEARABLE_UNCATEGORIZED" />
+		<field name="WEARABLE_WRIST_WATCH" />
+	</class>
+	<class name="android/bluetooth/BluetoothClass$Device$Major" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="AUDIO_VIDEO" />
+		<field name="COMPUTER" />
+		<field name="HEALTH" />
+		<field name="IMAGING" />
+		<field name="MISC" />
+		<field name="NETWORKING" />
+		<field name="PERIPHERAL" />
+		<field name="PHONE" />
+		<field name="TOY" />
+		<field name="UNCATEGORIZED" />
+		<field name="WEARABLE" />
+	</class>
+	<class name="android/bluetooth/BluetoothClass$Service" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="AUDIO" />
+		<field name="CAPTURE" />
+		<field name="INFORMATION" />
+		<field name="LIMITED_DISCOVERABILITY" />
+		<field name="NETWORKING" />
+		<field name="OBJECT_TRANSFER" />
+		<field name="POSITIONING" />
+		<field name="RENDER" />
+		<field name="TELEPHONY" />
+	</class>
+	<class name="android/bluetooth/BluetoothDevice" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;" since="18" />
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;I)Landroid/bluetooth/BluetoothGatt;" since="23" />
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;II)Landroid/bluetooth/BluetoothGatt;" since="26" />
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;IILandroid/os/Handler;)Landroid/bluetooth/BluetoothGatt;" since="26" />
+		<method name="createBond()Z" since="19" />
+		<method name="createInsecureL2capChannel(I)Landroid/bluetooth/BluetoothSocket;" since="29" />
+		<method name="createInsecureRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;" since="10" />
+		<method name="createL2capChannel(I)Landroid/bluetooth/BluetoothSocket;" since="29" />
+		<method name="createRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;" />
+		<method name="fetchUuidsWithSdp()Z" since="15" />
+		<method name="getAddress()Ljava/lang/String;" />
+		<method name="getAlias()Ljava/lang/String;" since="30" />
+		<method name="getBluetoothClass()Landroid/bluetooth/BluetoothClass;" />
+		<method name="getBondState()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getType()I" since="18" />
+		<method name="getUuids()[Landroid/os/ParcelUuid;" since="15" />
+		<method name="setAlias(Ljava/lang/String;)I" since="31" />
+		<method name="setPairingConfirmation(Z)Z" since="19" />
+		<method name="setPin([B)Z" since="19" />
+		<field name="ACTION_ACL_CONNECTED" />
+		<field name="ACTION_ACL_DISCONNECTED" />
+		<field name="ACTION_ACL_DISCONNECT_REQUESTED" />
+		<field name="ACTION_ALIAS_CHANGED" since="30" />
+		<field name="ACTION_BOND_STATE_CHANGED" />
+		<field name="ACTION_CLASS_CHANGED" />
+		<field name="ACTION_FOUND" />
+		<field name="ACTION_NAME_CHANGED" />
+		<field name="ACTION_PAIRING_REQUEST" since="19" />
+		<field name="ACTION_UUID" since="15" />
+		<field name="ADDRESS_TYPE_PUBLIC" since="31" />
+		<field name="ADDRESS_TYPE_RANDOM" since="31" />
+		<field name="BOND_BONDED" />
+		<field name="BOND_BONDING" />
+		<field name="BOND_NONE" />
+		<field name="CREATOR" />
+		<field name="DEVICE_TYPE_CLASSIC" since="18" />
+		<field name="DEVICE_TYPE_DUAL" since="18" />
+		<field name="DEVICE_TYPE_LE" since="18" />
+		<field name="DEVICE_TYPE_UNKNOWN" since="18" />
+		<field name="ERROR" />
+		<field name="EXTRA_BOND_STATE" />
+		<field name="EXTRA_CLASS" />
+		<field name="EXTRA_DEVICE" />
+		<field name="EXTRA_NAME" />
+		<field name="EXTRA_PAIRING_KEY" since="19" />
+		<field name="EXTRA_PAIRING_VARIANT" since="19" />
+		<field name="EXTRA_PREVIOUS_BOND_STATE" />
+		<field name="EXTRA_RSSI" />
+		<field name="EXTRA_UUID" since="15" />
+		<field name="PAIRING_VARIANT_PASSKEY_CONFIRMATION" since="19" />
+		<field name="PAIRING_VARIANT_PIN" since="19" />
+		<field name="PHY_LE_1M" since="26" />
+		<field name="PHY_LE_1M_MASK" since="26" />
+		<field name="PHY_LE_2M" since="26" />
+		<field name="PHY_LE_2M_MASK" since="26" />
+		<field name="PHY_LE_CODED" since="26" />
+		<field name="PHY_LE_CODED_MASK" since="26" />
+		<field name="PHY_OPTION_NO_PREFERRED" since="26" />
+		<field name="PHY_OPTION_S2" since="26" />
+		<field name="PHY_OPTION_S8" since="26" />
+		<field name="TRANSPORT_AUTO" since="23" />
+		<field name="TRANSPORT_BREDR" since="23" />
+		<field name="TRANSPORT_LE" since="23" />
+	</class>
+	<class name="android/bluetooth/BluetoothGatt" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<method name="abortReliableWrite()V" since="19" />
+		<method name="abortReliableWrite(Landroid/bluetooth/BluetoothDevice;)V" deprecated="19" />
+		<method name="beginReliableWrite()Z" />
+		<method name="close()V" />
+		<method name="connect()Z" />
+		<method name="disconnect()V" />
+		<method name="discoverServices()Z" />
+		<method name="executeReliableWrite()Z" />
+		<method name="getDevice()Landroid/bluetooth/BluetoothDevice;" />
+		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;" />
+		<method name="getServices()Ljava/util/List;" />
+		<method name="readCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z" />
+		<method name="readDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z" />
+		<method name="readPhy()V" since="26" />
+		<method name="readRemoteRssi()Z" />
+		<method name="requestConnectionPriority(I)Z" since="21" />
+		<method name="requestMtu(I)Z" since="21" />
+		<method name="setCharacteristicNotification(Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z" />
+		<method name="setPreferredPhy(III)V" since="26" />
+		<method name="writeCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z" />
+		<method name="writeDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z" />
+		<field name="CONNECTION_PRIORITY_BALANCED" since="21" />
+		<field name="CONNECTION_PRIORITY_HIGH" since="21" />
+		<field name="CONNECTION_PRIORITY_LOW_POWER" since="21" />
+		<field name="GATT_CONNECTION_CONGESTED" since="21" />
+		<field name="GATT_FAILURE" />
+		<field name="GATT_INSUFFICIENT_AUTHENTICATION" />
+		<field name="GATT_INSUFFICIENT_ENCRYPTION" />
+		<field name="GATT_INVALID_ATTRIBUTE_LENGTH" />
+		<field name="GATT_INVALID_OFFSET" />
+		<field name="GATT_READ_NOT_PERMITTED" />
+		<field name="GATT_REQUEST_NOT_SUPPORTED" />
+		<field name="GATT_SUCCESS" />
+		<field name="GATT_WRITE_NOT_PERMITTED" />
+	</class>
+	<class name="android/bluetooth/BluetoothGattCallback" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCharacteristicChanged(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;)V" />
+		<method name="onCharacteristicRead(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V" />
+		<method name="onCharacteristicWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V" />
+		<method name="onConnectionStateChange(Landroid/bluetooth/BluetoothGatt;II)V" />
+		<method name="onDescriptorRead(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattDescriptor;I)V" />
+		<method name="onDescriptorWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattDescriptor;I)V" />
+		<method name="onMtuChanged(Landroid/bluetooth/BluetoothGatt;II)V" since="21" />
+		<method name="onPhyRead(Landroid/bluetooth/BluetoothGatt;III)V" since="26" />
+		<method name="onPhyUpdate(Landroid/bluetooth/BluetoothGatt;III)V" since="26" />
+		<method name="onReadRemoteRssi(Landroid/bluetooth/BluetoothGatt;II)V" />
+		<method name="onReliableWriteCompleted(Landroid/bluetooth/BluetoothGatt;I)V" />
+		<method name="onServiceChanged(Landroid/bluetooth/BluetoothGatt;)V" since="31" />
+		<method name="onServicesDiscovered(Landroid/bluetooth/BluetoothGatt;I)V" />
+	</class>
+	<class name="android/bluetooth/BluetoothGattCharacteristic" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="24" />
+		<method name="&lt;init&gt;(Ljava/util/UUID;II)V" />
+		<method name="addDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z" />
+		<method name="getDescriptor(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattDescriptor;" />
+		<method name="getDescriptors()Ljava/util/List;" />
+		<method name="getFloatValue(II)Ljava/lang/Float;" />
+		<method name="getInstanceId()I" />
+		<method name="getIntValue(II)Ljava/lang/Integer;" />
+		<method name="getPermissions()I" />
+		<method name="getProperties()I" />
+		<method name="getService()Landroid/bluetooth/BluetoothGattService;" />
+		<method name="getStringValue(I)Ljava/lang/String;" />
+		<method name="getUuid()Ljava/util/UUID;" />
+		<method name="getValue()[B" />
+		<method name="getWriteType()I" />
+		<method name="setValue(III)Z" />
+		<method name="setValue(IIII)Z" />
+		<method name="setValue(Ljava/lang/String;)Z" />
+		<method name="setValue([B)Z" />
+		<method name="setWriteType(I)V" />
+		<field name="CREATOR" since="24" />
+		<field name="FORMAT_FLOAT" />
+		<field name="FORMAT_SFLOAT" />
+		<field name="FORMAT_SINT16" />
+		<field name="FORMAT_SINT32" />
+		<field name="FORMAT_SINT8" />
+		<field name="FORMAT_UINT16" />
+		<field name="FORMAT_UINT32" />
+		<field name="FORMAT_UINT8" />
+		<field name="PERMISSION_READ" />
+		<field name="PERMISSION_READ_ENCRYPTED" />
+		<field name="PERMISSION_READ_ENCRYPTED_MITM" />
+		<field name="PERMISSION_WRITE" />
+		<field name="PERMISSION_WRITE_ENCRYPTED" />
+		<field name="PERMISSION_WRITE_ENCRYPTED_MITM" />
+		<field name="PERMISSION_WRITE_SIGNED" />
+		<field name="PERMISSION_WRITE_SIGNED_MITM" />
+		<field name="PROPERTY_BROADCAST" />
+		<field name="PROPERTY_EXTENDED_PROPS" />
+		<field name="PROPERTY_INDICATE" />
+		<field name="PROPERTY_NOTIFY" />
+		<field name="PROPERTY_READ" />
+		<field name="PROPERTY_SIGNED_WRITE" />
+		<field name="PROPERTY_WRITE" />
+		<field name="PROPERTY_WRITE_NO_RESPONSE" />
+		<field name="WRITE_TYPE_DEFAULT" />
+		<field name="WRITE_TYPE_NO_RESPONSE" />
+		<field name="WRITE_TYPE_SIGNED" />
+		<field name="mDescriptors" />
+	</class>
+	<class name="android/bluetooth/BluetoothGattDescriptor" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="24" />
+		<method name="&lt;init&gt;(Ljava/util/UUID;I)V" />
+		<method name="getCharacteristic()Landroid/bluetooth/BluetoothGattCharacteristic;" />
+		<method name="getPermissions()I" />
+		<method name="getUuid()Ljava/util/UUID;" />
+		<method name="getValue()[B" />
+		<method name="setValue([B)Z" />
+		<field name="CREATOR" since="24" />
+		<field name="DISABLE_NOTIFICATION_VALUE" />
+		<field name="ENABLE_INDICATION_VALUE" />
+		<field name="ENABLE_NOTIFICATION_VALUE" />
+		<field name="PERMISSION_READ" />
+		<field name="PERMISSION_READ_ENCRYPTED" />
+		<field name="PERMISSION_READ_ENCRYPTED_MITM" />
+		<field name="PERMISSION_WRITE" />
+		<field name="PERMISSION_WRITE_ENCRYPTED" />
+		<field name="PERMISSION_WRITE_ENCRYPTED_MITM" />
+		<field name="PERMISSION_WRITE_SIGNED" />
+		<field name="PERMISSION_WRITE_SIGNED_MITM" />
+	</class>
+	<class name="android/bluetooth/BluetoothGattServer" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<method name="addService(Landroid/bluetooth/BluetoothGattService;)Z" />
+		<method name="cancelConnection(Landroid/bluetooth/BluetoothDevice;)V" />
+		<method name="clearServices()V" />
+		<method name="close()V" />
+		<method name="connect(Landroid/bluetooth/BluetoothDevice;Z)Z" />
+		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;" />
+		<method name="getServices()Ljava/util/List;" />
+		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z" />
+		<method name="readPhy(Landroid/bluetooth/BluetoothDevice;)V" since="26" />
+		<method name="removeService(Landroid/bluetooth/BluetoothGattService;)Z" />
+		<method name="sendResponse(Landroid/bluetooth/BluetoothDevice;III[B)Z" />
+		<method name="setPreferredPhy(Landroid/bluetooth/BluetoothDevice;III)V" since="26" />
+	</class>
+	<class name="android/bluetooth/BluetoothGattServerCallback" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCharacteristicReadRequest(Landroid/bluetooth/BluetoothDevice;IILandroid/bluetooth/BluetoothGattCharacteristic;)V" />
+		<method name="onCharacteristicWriteRequest(Landroid/bluetooth/BluetoothDevice;ILandroid/bluetooth/BluetoothGattCharacteristic;ZZI[B)V" />
+		<method name="onConnectionStateChange(Landroid/bluetooth/BluetoothDevice;II)V" />
+		<method name="onDescriptorReadRequest(Landroid/bluetooth/BluetoothDevice;IILandroid/bluetooth/BluetoothGattDescriptor;)V" />
+		<method name="onDescriptorWriteRequest(Landroid/bluetooth/BluetoothDevice;ILandroid/bluetooth/BluetoothGattDescriptor;ZZI[B)V" />
+		<method name="onExecuteWrite(Landroid/bluetooth/BluetoothDevice;IZ)V" />
+		<method name="onMtuChanged(Landroid/bluetooth/BluetoothDevice;I)V" since="22" />
+		<method name="onNotificationSent(Landroid/bluetooth/BluetoothDevice;I)V" since="21" />
+		<method name="onPhyRead(Landroid/bluetooth/BluetoothDevice;III)V" since="26" />
+		<method name="onPhyUpdate(Landroid/bluetooth/BluetoothDevice;III)V" since="26" />
+		<method name="onServiceAdded(ILandroid/bluetooth/BluetoothGattService;)V" />
+	</class>
+	<class name="android/bluetooth/BluetoothGattService" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="24" />
+		<method name="&lt;init&gt;(Ljava/util/UUID;I)V" />
+		<method name="addCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z" />
+		<method name="addService(Landroid/bluetooth/BluetoothGattService;)Z" />
+		<method name="getCharacteristic(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattCharacteristic;" />
+		<method name="getCharacteristics()Ljava/util/List;" />
+		<method name="getIncludedServices()Ljava/util/List;" />
+		<method name="getInstanceId()I" />
+		<method name="getType()I" />
+		<method name="getUuid()Ljava/util/UUID;" />
+		<field name="CREATOR" since="24" />
+		<field name="SERVICE_TYPE_PRIMARY" />
+		<field name="SERVICE_TYPE_SECONDARY" />
+		<field name="mCharacteristics" />
+		<field name="mIncludedServices" />
+	</class>
+	<class name="android/bluetooth/BluetoothHeadset" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<method name="isAudioConnected(Landroid/bluetooth/BluetoothDevice;)Z" />
+		<method name="isNoiseReductionSupported(Landroid/bluetooth/BluetoothDevice;)Z" since="31" />
+		<method name="isVoiceRecognitionSupported(Landroid/bluetooth/BluetoothDevice;)Z" since="31" />
+		<method name="sendVendorSpecificResultCode(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;Ljava/lang/String;)Z" since="19" />
+		<method name="startVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z" />
+		<method name="stopVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z" />
+		<field name="ACTION_AUDIO_STATE_CHANGED" />
+		<field name="ACTION_CONNECTION_STATE_CHANGED" />
+		<field name="ACTION_VENDOR_SPECIFIC_HEADSET_EVENT" />
+		<field name="AT_CMD_TYPE_ACTION" />
+		<field name="AT_CMD_TYPE_BASIC" />
+		<field name="AT_CMD_TYPE_READ" />
+		<field name="AT_CMD_TYPE_SET" />
+		<field name="AT_CMD_TYPE_TEST" />
+		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS" />
+		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD" />
+		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE" />
+		<field name="STATE_AUDIO_CONNECTED" />
+		<field name="STATE_AUDIO_CONNECTING" />
+		<field name="STATE_AUDIO_DISCONNECTED" />
+		<field name="VENDOR_RESULT_CODE_COMMAND_ANDROID" since="19" />
+		<field name="VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY" />
+	</class>
+	<class name="android/bluetooth/BluetoothHealth" since="14" deprecated="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<method name="connectChannelToSource(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z" deprecated="29" />
+		<method name="disconnectChannel(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;I)Z" deprecated="29" />
+		<method name="getMainChannelFd(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;" deprecated="29" />
+		<method name="registerSinkAppConfiguration(Ljava/lang/String;ILandroid/bluetooth/BluetoothHealthCallback;)Z" deprecated="29" />
+		<method name="unregisterAppConfiguration(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z" deprecated="29" />
+		<field name="APP_CONFIG_REGISTRATION_FAILURE" deprecated="29" />
+		<field name="APP_CONFIG_REGISTRATION_SUCCESS" deprecated="29" />
+		<field name="APP_CONFIG_UNREGISTRATION_FAILURE" deprecated="29" />
+		<field name="APP_CONFIG_UNREGISTRATION_SUCCESS" deprecated="29" />
+		<field name="CHANNEL_TYPE_RELIABLE" deprecated="29" />
+		<field name="CHANNEL_TYPE_STREAMING" deprecated="29" />
+		<field name="SINK_ROLE" deprecated="29" />
+		<field name="SOURCE_ROLE" deprecated="29" />
+		<field name="STATE_CHANNEL_CONNECTED" deprecated="29" />
+		<field name="STATE_CHANNEL_CONNECTING" deprecated="29" />
+		<field name="STATE_CHANNEL_DISCONNECTED" deprecated="29" />
+		<field name="STATE_CHANNEL_DISCONNECTING" deprecated="29" />
+	</class>
+	<class name="android/bluetooth/BluetoothHealthAppConfiguration" since="14" deprecated="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDataType()I" deprecated="29" />
+		<method name="getName()Ljava/lang/String;" deprecated="29" />
+		<method name="getRole()I" deprecated="29" />
+		<field name="CREATOR" deprecated="29" />
+	</class>
+	<class name="android/bluetooth/BluetoothHealthCallback" since="14" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="onHealthAppConfigurationStatusChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;I)V" deprecated="29" />
+		<method name="onHealthChannelStateChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;Landroid/bluetooth/BluetoothDevice;IILandroid/os/ParcelFileDescriptor;I)V" deprecated="29" />
+	</class>
+	<class name="android/bluetooth/BluetoothHearingAid" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<field name="ACTION_CONNECTION_STATE_CHANGED" />
+	</class>
+	<class name="android/bluetooth/BluetoothHidDevice" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<method name="connect(Landroid/bluetooth/BluetoothDevice;)Z" />
+		<method name="disconnect(Landroid/bluetooth/BluetoothDevice;)Z" />
+		<method name="registerApp(Landroid/bluetooth/BluetoothHidDeviceAppSdpSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Ljava/util/concurrent/Executor;Landroid/bluetooth/BluetoothHidDevice$Callback;)Z" />
+		<method name="replyReport(Landroid/bluetooth/BluetoothDevice;BB[B)Z" />
+		<method name="reportError(Landroid/bluetooth/BluetoothDevice;B)Z" />
+		<method name="sendReport(Landroid/bluetooth/BluetoothDevice;I[B)Z" />
+		<method name="unregisterApp()Z" />
+		<field name="ACTION_CONNECTION_STATE_CHANGED" />
+		<field name="ERROR_RSP_INVALID_PARAM" />
+		<field name="ERROR_RSP_INVALID_RPT_ID" />
+		<field name="ERROR_RSP_NOT_READY" />
+		<field name="ERROR_RSP_SUCCESS" />
+		<field name="ERROR_RSP_UNKNOWN" />
+		<field name="ERROR_RSP_UNSUPPORTED_REQ" />
+		<field name="PROTOCOL_BOOT_MODE" />
+		<field name="PROTOCOL_REPORT_MODE" />
+		<field name="REPORT_TYPE_FEATURE" />
+		<field name="REPORT_TYPE_INPUT" />
+		<field name="REPORT_TYPE_OUTPUT" />
+		<field name="SUBCLASS1_COMBO" />
+		<field name="SUBCLASS1_KEYBOARD" />
+		<field name="SUBCLASS1_MOUSE" />
+		<field name="SUBCLASS1_NONE" />
+		<field name="SUBCLASS2_CARD_READER" />
+		<field name="SUBCLASS2_DIGITIZER_TABLET" />
+		<field name="SUBCLASS2_GAMEPAD" />
+		<field name="SUBCLASS2_JOYSTICK" />
+		<field name="SUBCLASS2_REMOTE_CONTROL" />
+		<field name="SUBCLASS2_SENSING_DEVICE" />
+		<field name="SUBCLASS2_UNCATEGORIZED" />
+	</class>
+	<class name="android/bluetooth/BluetoothHidDevice$Callback" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAppStatusChanged(Landroid/bluetooth/BluetoothDevice;Z)V" />
+		<method name="onConnectionStateChanged(Landroid/bluetooth/BluetoothDevice;I)V" />
+		<method name="onGetReport(Landroid/bluetooth/BluetoothDevice;BBI)V" />
+		<method name="onInterruptData(Landroid/bluetooth/BluetoothDevice;B[B)V" />
+		<method name="onSetProtocol(Landroid/bluetooth/BluetoothDevice;B)V" />
+		<method name="onSetReport(Landroid/bluetooth/BluetoothDevice;BB[B)V" />
+		<method name="onVirtualCableUnplug(Landroid/bluetooth/BluetoothDevice;)V" />
+	</class>
+	<class name="android/bluetooth/BluetoothHidDeviceAppQosSettings" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(IIIIII)V" />
+		<method name="getDelayVariation()I" />
+		<method name="getLatency()I" />
+		<method name="getPeakBandwidth()I" />
+		<method name="getServiceType()I" />
+		<method name="getTokenBucketSize()I" />
+		<method name="getTokenRate()I" />
+		<field name="CREATOR" />
+		<field name="MAX" />
+		<field name="SERVICE_BEST_EFFORT" />
+		<field name="SERVICE_GUARANTEED" />
+		<field name="SERVICE_NO_TRAFFIC" />
+	</class>
+	<class name="android/bluetooth/BluetoothHidDeviceAppSdpSettings" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;B[B)V" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getDescriptors()[B" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getProvider()Ljava/lang/String;" />
+		<method name="getSubclass()B" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/bluetooth/BluetoothLeAudio" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/bluetooth/BluetoothProfile" />
+		<implements name="java/lang/AutoCloseable" />
+		<field name="ACTION_LE_AUDIO_CONNECTION_STATE_CHANGED" />
+	</class>
+	<class name="android/bluetooth/BluetoothManager" since="18">
+		<extends name="java/lang/Object" />
+		<method name="getAdapter()Landroid/bluetooth/BluetoothAdapter;" />
+		<method name="getConnectedDevices(I)Ljava/util/List;" />
+		<method name="getConnectionState(Landroid/bluetooth/BluetoothDevice;I)I" />
+		<method name="getDevicesMatchingConnectionStates(I[I)Ljava/util/List;" />
+		<method name="openGattServer(Landroid/content/Context;Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;" />
+	</class>
+	<class name="android/bluetooth/BluetoothProfile" since="11">
+		<extends name="java/lang/Object" />
+		<method name="getConnectedDevices()Ljava/util/List;" />
+		<method name="getConnectionState(Landroid/bluetooth/BluetoothDevice;)I" />
+		<method name="getDevicesMatchingConnectionStates([I)Ljava/util/List;" />
+		<field name="A2DP" />
+		<field name="EXTRA_PREVIOUS_STATE" />
+		<field name="EXTRA_STATE" />
+		<field name="GATT" since="18" />
+		<field name="GATT_SERVER" since="18" />
+		<field name="HEADSET" />
+		<field name="HEALTH" since="14" deprecated="29" />
+		<field name="HEARING_AID" since="29" />
+		<field name="HID_DEVICE" since="28" />
+		<field name="SAP" since="23" />
+		<field name="STATE_CONNECTED" />
+		<field name="STATE_CONNECTING" />
+		<field name="STATE_DISCONNECTED" />
+		<field name="STATE_DISCONNECTING" />
+	</class>
+	<class name="android/bluetooth/BluetoothProfile$ServiceListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onServiceConnected(ILandroid/bluetooth/BluetoothProfile;)V" />
+		<method name="onServiceDisconnected(I)V" />
+	</class>
+	<class name="android/bluetooth/BluetoothServerSocket" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="accept()Landroid/bluetooth/BluetoothSocket;" />
+		<method name="accept(I)Landroid/bluetooth/BluetoothSocket;" />
+		<method name="getPsm()I" since="29" />
+	</class>
+	<class name="android/bluetooth/BluetoothSocket" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="connect()V" />
+		<method name="getConnectionType()I" since="23" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getMaxReceivePacketSize()I" since="23" />
+		<method name="getMaxTransmitPacketSize()I" since="23" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="getRemoteDevice()Landroid/bluetooth/BluetoothDevice;" />
+		<method name="isConnected()Z" since="14" />
+		<field name="TYPE_L2CAP" since="23" />
+		<field name="TYPE_RFCOMM" since="23" />
+		<field name="TYPE_SCO" since="23" />
+	</class>
+	<class name="android/bluetooth/BluetoothStatusCodes" since="31">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_BLUETOOTH_NOT_ALLOWED" />
+		<field name="ERROR_BLUETOOTH_NOT_ENABLED" />
+		<field name="ERROR_DEVICE_NOT_BONDED" />
+		<field name="ERROR_MISSING_BLUETOOTH_CONNECT_PERMISSION" />
+		<field name="ERROR_UNKNOWN" />
+		<field name="SUCCESS" />
+	</class>
+	<class name="android/bluetooth/le/AdvertiseCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onStartFailure(I)V" />
+		<method name="onStartSuccess(Landroid/bluetooth/le/AdvertiseSettings;)V" />
+		<field name="ADVERTISE_FAILED_ALREADY_STARTED" />
+		<field name="ADVERTISE_FAILED_DATA_TOO_LARGE" />
+		<field name="ADVERTISE_FAILED_FEATURE_UNSUPPORTED" />
+		<field name="ADVERTISE_FAILED_INTERNAL_ERROR" />
+		<field name="ADVERTISE_FAILED_TOO_MANY_ADVERTISERS" />
+	</class>
+	<class name="android/bluetooth/le/AdvertiseData" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getIncludeDeviceName()Z" />
+		<method name="getIncludeTxPowerLevel()Z" />
+		<method name="getManufacturerSpecificData()Landroid/util/SparseArray;" />
+		<method name="getServiceData()Ljava/util/Map;" />
+		<method name="getServiceSolicitationUuids()Ljava/util/List;" since="31" />
+		<method name="getServiceUuids()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/bluetooth/le/AdvertiseData$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addManufacturerData(I[B)Landroid/bluetooth/le/AdvertiseData$Builder;" />
+		<method name="addServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/AdvertiseData$Builder;" />
+		<method name="addServiceSolicitationUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;" since="31" />
+		<method name="addServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;" />
+		<method name="build()Landroid/bluetooth/le/AdvertiseData;" />
+		<method name="setIncludeDeviceName(Z)Landroid/bluetooth/le/AdvertiseData$Builder;" />
+		<method name="setIncludeTxPowerLevel(Z)Landroid/bluetooth/le/AdvertiseData$Builder;" />
+	</class>
+	<class name="android/bluetooth/le/AdvertiseSettings" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getMode()I" />
+		<method name="getTimeout()I" />
+		<method name="getTxPowerLevel()I" />
+		<method name="isConnectable()Z" />
+		<field name="ADVERTISE_MODE_BALANCED" />
+		<field name="ADVERTISE_MODE_LOW_LATENCY" />
+		<field name="ADVERTISE_MODE_LOW_POWER" />
+		<field name="ADVERTISE_TX_POWER_HIGH" />
+		<field name="ADVERTISE_TX_POWER_LOW" />
+		<field name="ADVERTISE_TX_POWER_MEDIUM" />
+		<field name="ADVERTISE_TX_POWER_ULTRA_LOW" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/bluetooth/le/AdvertiseSettings$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/bluetooth/le/AdvertiseSettings;" />
+		<method name="setAdvertiseMode(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;" />
+		<method name="setConnectable(Z)Landroid/bluetooth/le/AdvertiseSettings$Builder;" />
+		<method name="setTimeout(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;" />
+		<method name="setTxPowerLevel(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;" />
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSet" since="26">
+		<extends name="java/lang/Object" />
+		<method name="enableAdvertising(ZII)V" />
+		<method name="setAdvertisingData(Landroid/bluetooth/le/AdvertiseData;)V" />
+		<method name="setAdvertisingParameters(Landroid/bluetooth/le/AdvertisingSetParameters;)V" />
+		<method name="setPeriodicAdvertisingData(Landroid/bluetooth/le/AdvertiseData;)V" />
+		<method name="setPeriodicAdvertisingEnabled(Z)V" />
+		<method name="setPeriodicAdvertisingParameters(Landroid/bluetooth/le/PeriodicAdvertisingParameters;)V" />
+		<method name="setScanResponseData(Landroid/bluetooth/le/AdvertiseData;)V" />
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSetCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAdvertisingDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V" />
+		<method name="onAdvertisingEnabled(Landroid/bluetooth/le/AdvertisingSet;ZI)V" />
+		<method name="onAdvertisingParametersUpdated(Landroid/bluetooth/le/AdvertisingSet;II)V" />
+		<method name="onAdvertisingSetStarted(Landroid/bluetooth/le/AdvertisingSet;II)V" />
+		<method name="onAdvertisingSetStopped(Landroid/bluetooth/le/AdvertisingSet;)V" />
+		<method name="onPeriodicAdvertisingDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V" />
+		<method name="onPeriodicAdvertisingEnabled(Landroid/bluetooth/le/AdvertisingSet;ZI)V" />
+		<method name="onPeriodicAdvertisingParametersUpdated(Landroid/bluetooth/le/AdvertisingSet;I)V" />
+		<method name="onScanResponseDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V" />
+		<field name="ADVERTISE_FAILED_ALREADY_STARTED" />
+		<field name="ADVERTISE_FAILED_DATA_TOO_LARGE" />
+		<field name="ADVERTISE_FAILED_FEATURE_UNSUPPORTED" />
+		<field name="ADVERTISE_FAILED_INTERNAL_ERROR" />
+		<field name="ADVERTISE_FAILED_TOO_MANY_ADVERTISERS" />
+		<field name="ADVERTISE_SUCCESS" />
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSetParameters" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getInterval()I" />
+		<method name="getPrimaryPhy()I" />
+		<method name="getSecondaryPhy()I" />
+		<method name="getTxPowerLevel()I" />
+		<method name="includeTxPower()Z" />
+		<method name="isAnonymous()Z" />
+		<method name="isConnectable()Z" />
+		<method name="isLegacy()Z" />
+		<method name="isScannable()Z" />
+		<field name="CREATOR" />
+		<field name="INTERVAL_HIGH" />
+		<field name="INTERVAL_LOW" />
+		<field name="INTERVAL_MAX" />
+		<field name="INTERVAL_MEDIUM" />
+		<field name="INTERVAL_MIN" />
+		<field name="TX_POWER_HIGH" />
+		<field name="TX_POWER_LOW" />
+		<field name="TX_POWER_MAX" />
+		<field name="TX_POWER_MEDIUM" />
+		<field name="TX_POWER_MIN" />
+		<field name="TX_POWER_ULTRA_LOW" />
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSetParameters$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/bluetooth/le/AdvertisingSetParameters;" />
+		<method name="setAnonymous(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setConnectable(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setIncludeTxPower(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setInterval(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setLegacyMode(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setPrimaryPhy(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setScannable(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setSecondaryPhy(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+		<method name="setTxPowerLevel(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;" />
+	</class>
+	<class name="android/bluetooth/le/BluetoothLeAdvertiser" since="21">
+		<extends name="java/lang/Object" />
+		<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V" />
+		<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V" />
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/AdvertisingSetCallback;)V" since="26" />
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/AdvertisingSetCallback;Landroid/os/Handler;)V" since="26" />
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertisingSetCallback;)V" since="26" />
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertisingSetCallback;Landroid/os/Handler;)V" since="26" />
+		<method name="stopAdvertising(Landroid/bluetooth/le/AdvertiseCallback;)V" />
+		<method name="stopAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetCallback;)V" since="26" />
+	</class>
+	<class name="android/bluetooth/le/BluetoothLeScanner" since="21">
+		<extends name="java/lang/Object" />
+		<method name="flushPendingScanResults(Landroid/bluetooth/le/ScanCallback;)V" />
+		<method name="startScan(Landroid/bluetooth/le/ScanCallback;)V" />
+		<method name="startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/app/PendingIntent;)I" since="26" />
+		<method name="startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/bluetooth/le/ScanCallback;)V" />
+		<method name="stopScan(Landroid/app/PendingIntent;)V" since="26" />
+		<method name="stopScan(Landroid/bluetooth/le/ScanCallback;)V" />
+		<field name="EXTRA_CALLBACK_TYPE" since="26" />
+		<field name="EXTRA_ERROR_CODE" since="26" />
+		<field name="EXTRA_LIST_SCAN_RESULT" since="26" />
+	</class>
+	<class name="android/bluetooth/le/PeriodicAdvertisingParameters" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getIncludeTxPower()Z" />
+		<method name="getInterval()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/bluetooth/le/PeriodicAdvertisingParameters$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/bluetooth/le/PeriodicAdvertisingParameters;" />
+		<method name="setIncludeTxPower(Z)Landroid/bluetooth/le/PeriodicAdvertisingParameters$Builder;" />
+		<method name="setInterval(I)Landroid/bluetooth/le/PeriodicAdvertisingParameters$Builder;" />
+	</class>
+	<class name="android/bluetooth/le/ScanCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onBatchScanResults(Ljava/util/List;)V" />
+		<method name="onScanFailed(I)V" />
+		<method name="onScanResult(ILandroid/bluetooth/le/ScanResult;)V" />
+		<field name="SCAN_FAILED_ALREADY_STARTED" />
+		<field name="SCAN_FAILED_APPLICATION_REGISTRATION_FAILED" />
+		<field name="SCAN_FAILED_FEATURE_UNSUPPORTED" />
+		<field name="SCAN_FAILED_INTERNAL_ERROR" />
+	</class>
+	<class name="android/bluetooth/le/ScanFilter" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDeviceAddress()Ljava/lang/String;" />
+		<method name="getDeviceName()Ljava/lang/String;" />
+		<method name="getManufacturerData()[B" />
+		<method name="getManufacturerDataMask()[B" />
+		<method name="getManufacturerId()I" />
+		<method name="getServiceData()[B" />
+		<method name="getServiceDataMask()[B" />
+		<method name="getServiceDataUuid()Landroid/os/ParcelUuid;" />
+		<method name="getServiceSolicitationUuid()Landroid/os/ParcelUuid;" since="29" />
+		<method name="getServiceSolicitationUuidMask()Landroid/os/ParcelUuid;" since="29" />
+		<method name="getServiceUuid()Landroid/os/ParcelUuid;" />
+		<method name="getServiceUuidMask()Landroid/os/ParcelUuid;" />
+		<method name="matches(Landroid/bluetooth/le/ScanResult;)Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/bluetooth/le/ScanFilter$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/bluetooth/le/ScanFilter;" />
+		<method name="setDeviceAddress(Ljava/lang/String;)Landroid/bluetooth/le/ScanFilter$Builder;" />
+		<method name="setDeviceName(Ljava/lang/String;)Landroid/bluetooth/le/ScanFilter$Builder;" />
+		<method name="setManufacturerData(I[B)Landroid/bluetooth/le/ScanFilter$Builder;" />
+		<method name="setManufacturerData(I[B[B)Landroid/bluetooth/le/ScanFilter$Builder;" />
+		<method name="setServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/ScanFilter$Builder;" />
+		<method name="setServiceData(Landroid/os/ParcelUuid;[B[B)Landroid/bluetooth/le/ScanFilter$Builder;" />
+		<method name="setServiceSolicitationUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" since="29" />
+		<method name="setServiceSolicitationUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" since="29" />
+		<method name="setServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" />
+		<method name="setServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" />
+	</class>
+	<class name="android/bluetooth/le/ScanRecord" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getAdvertiseFlags()I" />
+		<method name="getBytes()[B" />
+		<method name="getDeviceName()Ljava/lang/String;" />
+		<method name="getManufacturerSpecificData()Landroid/util/SparseArray;" />
+		<method name="getManufacturerSpecificData(I)[B" />
+		<method name="getServiceData()Ljava/util/Map;" />
+		<method name="getServiceData(Landroid/os/ParcelUuid;)[B" />
+		<method name="getServiceSolicitationUuids()Ljava/util/List;" since="29" />
+		<method name="getServiceUuids()Ljava/util/List;" />
+		<method name="getTxPowerLevel()I" />
+	</class>
+	<class name="android/bluetooth/le/ScanResult" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/bluetooth/BluetoothDevice;IIIIIIILandroid/bluetooth/le/ScanRecord;J)V" since="26" />
+		<method name="&lt;init&gt;(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/le/ScanRecord;IJ)V" deprecated="26" />
+		<method name="getAdvertisingSid()I" since="26" />
+		<method name="getDataStatus()I" since="26" />
+		<method name="getDevice()Landroid/bluetooth/BluetoothDevice;" />
+		<method name="getPeriodicAdvertisingInterval()I" since="26" />
+		<method name="getPrimaryPhy()I" since="26" />
+		<method name="getRssi()I" />
+		<method name="getScanRecord()Landroid/bluetooth/le/ScanRecord;" />
+		<method name="getSecondaryPhy()I" since="26" />
+		<method name="getTimestampNanos()J" />
+		<method name="getTxPower()I" since="26" />
+		<method name="isConnectable()Z" since="26" />
+		<method name="isLegacy()Z" since="26" />
+		<field name="CREATOR" />
+		<field name="DATA_COMPLETE" since="26" />
+		<field name="DATA_TRUNCATED" since="26" />
+		<field name="PERIODIC_INTERVAL_NOT_PRESENT" since="26" />
+		<field name="PHY_UNUSED" since="26" />
+		<field name="SID_NOT_PRESENT" since="26" />
+		<field name="TX_POWER_NOT_PRESENT" since="26" />
+	</class>
+	<class name="android/bluetooth/le/ScanSettings" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCallbackType()I" />
+		<method name="getLegacy()Z" since="26" />
+		<method name="getPhy()I" since="26" />
+		<method name="getReportDelayMillis()J" />
+		<method name="getScanMode()I" />
+		<method name="getScanResultType()I" />
+		<field name="CALLBACK_TYPE_ALL_MATCHES" />
+		<field name="CALLBACK_TYPE_FIRST_MATCH" since="23" />
+		<field name="CALLBACK_TYPE_MATCH_LOST" since="23" />
+		<field name="CREATOR" />
+		<field name="MATCH_MODE_AGGRESSIVE" since="23" />
+		<field name="MATCH_MODE_STICKY" since="23" />
+		<field name="MATCH_NUM_FEW_ADVERTISEMENT" since="23" />
+		<field name="MATCH_NUM_MAX_ADVERTISEMENT" since="23" />
+		<field name="MATCH_NUM_ONE_ADVERTISEMENT" since="23" />
+		<field name="PHY_LE_ALL_SUPPORTED" since="26" />
+		<field name="SCAN_MODE_BALANCED" />
+		<field name="SCAN_MODE_LOW_LATENCY" />
+		<field name="SCAN_MODE_LOW_POWER" />
+		<field name="SCAN_MODE_OPPORTUNISTIC" since="23" />
+	</class>
+	<class name="android/bluetooth/le/ScanSettings$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/bluetooth/le/ScanSettings;" />
+		<method name="setCallbackType(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23" />
+		<method name="setLegacy(Z)Landroid/bluetooth/le/ScanSettings$Builder;" since="26" />
+		<method name="setMatchMode(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23" />
+		<method name="setNumOfMatches(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23" />
+		<method name="setPhy(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="26" />
+		<method name="setReportDelay(J)Landroid/bluetooth/le/ScanSettings$Builder;" />
+		<method name="setScanMode(I)Landroid/bluetooth/le/ScanSettings$Builder;" />
+	</class>
+	<class name="android/companion/AssociationRequest" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+		<field name="DEVICE_PROFILE_WATCH" since="31" />
+	</class>
+	<class name="android/companion/AssociationRequest$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addDeviceFilter(Landroid/companion/DeviceFilter;)Landroid/companion/AssociationRequest$Builder;" />
+		<method name="build()Landroid/companion/AssociationRequest;" />
+		<method name="checkNotUsed()V" since="28" removed="29" />
+		<method name="markUsed()V" since="28" removed="29" />
+		<method name="setDeviceProfile(Ljava/lang/String;)Landroid/companion/AssociationRequest$Builder;" since="31" />
+		<method name="setSingleDevice(Z)Landroid/companion/AssociationRequest$Builder;" />
+	</class>
+	<class name="android/companion/BluetoothDeviceFilter" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/companion/DeviceFilter" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/companion/BluetoothDeviceFilter$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/companion/BluetoothDeviceFilter$Builder;" />
+		<method name="build()Landroid/companion/BluetoothDeviceFilter;" />
+		<method name="checkNotUsed()V" since="28" removed="29" />
+		<method name="markUsed()V" since="28" removed="29" />
+		<method name="setAddress(Ljava/lang/String;)Landroid/companion/BluetoothDeviceFilter$Builder;" />
+		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothDeviceFilter$Builder;" />
+	</class>
+	<class name="android/companion/BluetoothLeDeviceFilter" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/companion/DeviceFilter" />
+		<method name="getRenamePrefixLengthLimit()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/companion/BluetoothLeDeviceFilter$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/companion/BluetoothLeDeviceFilter;" />
+		<method name="checkNotUsed()V" since="28" removed="29" />
+		<method name="markUsed()V" since="28" removed="29" />
+		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothLeDeviceFilter$Builder;" />
+		<method name="setRawDataFilter([B[B)Landroid/companion/BluetoothLeDeviceFilter$Builder;" />
+		<method name="setRenameFromBytes(Ljava/lang/String;Ljava/lang/String;IILjava/nio/ByteOrder;)Landroid/companion/BluetoothLeDeviceFilter$Builder;" />
+		<method name="setRenameFromName(Ljava/lang/String;Ljava/lang/String;II)Landroid/companion/BluetoothLeDeviceFilter$Builder;" />
+		<method name="setScanFilter(Landroid/bluetooth/le/ScanFilter;)Landroid/companion/BluetoothLeDeviceFilter$Builder;" />
+	</class>
+	<class name="android/companion/CompanionDeviceManager" since="26">
+		<extends name="java/lang/Object" />
+		<method name="associate(Landroid/companion/AssociationRequest;Landroid/companion/CompanionDeviceManager$Callback;Landroid/os/Handler;)V" />
+		<method name="disassociate(Ljava/lang/String;)V" />
+		<method name="getAssociations()Ljava/util/List;" />
+		<method name="hasNotificationAccess(Landroid/content/ComponentName;)Z" />
+		<method name="requestNotificationAccess(Landroid/content/ComponentName;)V" />
+		<method name="startObservingDevicePresence(Ljava/lang/String;)V" since="31" />
+		<method name="stopObservingDevicePresence(Ljava/lang/String;)V" since="31" />
+		<field name="EXTRA_DEVICE" />
+	</class>
+	<class name="android/companion/CompanionDeviceManager$Callback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDeviceFound(Landroid/content/IntentSender;)V" />
+		<method name="onFailure(Ljava/lang/CharSequence;)V" />
+	</class>
+	<class name="android/companion/CompanionDeviceService" since="31">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDeviceAppeared(Ljava/lang/String;)V" />
+		<method name="onDeviceDisappeared(Ljava/lang/String;)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/companion/DeviceFilter" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+	</class>
+	<class name="android/companion/DeviceNotAssociatedException" since="31">
+		<extends name="java/lang/RuntimeException" />
+	</class>
+	<class name="android/companion/WifiDeviceFilter" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/companion/DeviceFilter" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/companion/WifiDeviceFilter$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/companion/WifiDeviceFilter;" />
+		<method name="checkNotUsed()V" since="28" removed="29" />
+		<method name="markUsed()V" since="28" removed="29" />
+		<method name="setBssid(Ljava/lang/Object;)Landroid/companion/WifiDeviceFilter$Builder;" since="30" />
+		<method name="setBssidMask(Ljava/lang/Object;)Landroid/companion/WifiDeviceFilter$Builder;" since="30" />
+		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/WifiDeviceFilter$Builder;" />
+	</class>
+	<class name="android/content/AbstractThreadedSyncAdapter" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Z)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ZZ)V" since="11" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getSyncAdapterBinder()Landroid/os/IBinder;" />
+		<method name="onPerformSync(Landroid/accounts/Account;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/ContentProviderClient;Landroid/content/SyncResult;)V" />
+		<method name="onSecurityException(Landroid/accounts/Account;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/SyncResult;)V" since="23" />
+		<method name="onSyncCanceled()V" since="8" />
+		<method name="onSyncCanceled(Ljava/lang/Thread;)V" since="11" />
+		<method name="onUnsyncableAccount()Z" since="28" />
+		<field name="LOG_SYNC_DETAILS" deprecated="15" />
+	</class>
+	<class name="android/content/ActivityNotFoundException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/content/AsyncQueryHandler" since="1">
+		<extends name="android/os/Handler" />
+		<method name="&lt;init&gt;(Landroid/content/ContentResolver;)V" />
+		<method name="cancelOperation(I)V" />
+		<method name="createHandler(Landroid/os/Looper;)Landroid/os/Handler;" />
+		<method name="onDeleteComplete(ILjava/lang/Object;I)V" />
+		<method name="onInsertComplete(ILjava/lang/Object;Landroid/net/Uri;)V" />
+		<method name="onQueryComplete(ILjava/lang/Object;Landroid/database/Cursor;)V" />
+		<method name="onUpdateComplete(ILjava/lang/Object;I)V" />
+		<method name="startDelete(ILjava/lang/Object;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)V" />
+		<method name="startInsert(ILjava/lang/Object;Landroid/net/Uri;Landroid/content/ContentValues;)V" />
+		<method name="startQuery(ILjava/lang/Object;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="startUpdate(ILjava/lang/Object;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)V" />
+	</class>
+	<class name="android/content/AsyncQueryHandler$WorkerArgs" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="cookie" />
+		<field name="handler" />
+		<field name="orderBy" />
+		<field name="projection" />
+		<field name="result" />
+		<field name="selection" />
+		<field name="selectionArgs" />
+		<field name="uri" />
+		<field name="values" />
+	</class>
+	<class name="android/content/AsyncQueryHandler$WorkerHandler" since="1">
+		<extends name="android/os/Handler" />
+		<method name="&lt;init&gt;(Landroid/content/AsyncQueryHandler;Landroid/os/Looper;)V" />
+	</class>
+	<class name="android/content/AsyncTaskLoader" since="11" deprecated="28">
+		<extends name="android/content/Loader" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="cancelLoad()Z" removed="16" />
+		<method name="cancelLoadInBackground()V" since="16" deprecated="29" />
+		<method name="isLoadInBackgroundCanceled()Z" since="16" deprecated="29" />
+		<method name="loadInBackground()Ljava/lang/Object;" deprecated="29" />
+		<method name="onCanceled(Ljava/lang/Object;)V" deprecated="29" />
+		<method name="onLoadInBackground()Ljava/lang/Object;" deprecated="29" />
+		<method name="setUpdateThrottle(J)V" deprecated="29" />
+	</class>
+	<class name="android/content/AttributionSource" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="checkCallingUid()Z" />
+		<method name="enforceCallingUid()V" />
+		<method name="getAttributionTag()Ljava/lang/String;" />
+		<method name="getNext()Landroid/content/AttributionSource;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getUid()I" />
+		<method name="isTrusted(Landroid/content/Context;)Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/AttributionSource$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/content/AttributionSource;" />
+		<method name="setAttributionTag(Ljava/lang/String;)Landroid/content/AttributionSource$Builder;" />
+		<method name="setNext(Landroid/content/AttributionSource;)Landroid/content/AttributionSource$Builder;" />
+		<method name="setPackageName(Ljava/lang/String;)Landroid/content/AttributionSource$Builder;" />
+	</class>
+	<class name="android/content/BroadcastReceiver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="abortBroadcast()V" />
+		<method name="clearAbortBroadcast()V" />
+		<method name="getAbortBroadcast()Z" />
+		<method name="getDebugUnregister()Z" />
+		<method name="getResultCode()I" />
+		<method name="getResultData()Ljava/lang/String;" />
+		<method name="getResultExtras(Z)Landroid/os/Bundle;" />
+		<method name="goAsync()Landroid/content/BroadcastReceiver$PendingResult;" since="11" />
+		<method name="isInitialStickyBroadcast()Z" since="5" />
+		<method name="isOrderedBroadcast()Z" since="5" />
+		<method name="onReceive(Landroid/content/Context;Landroid/content/Intent;)V" />
+		<method name="peekService(Landroid/content/Context;Landroid/content/Intent;)Landroid/os/IBinder;" since="3" />
+		<method name="setDebugUnregister(Z)V" />
+		<method name="setOrderedHint(Z)V" />
+		<method name="setResult(ILjava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="setResultCode(I)V" />
+		<method name="setResultData(Ljava/lang/String;)V" />
+		<method name="setResultExtras(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/content/BroadcastReceiver$PendingResult" since="11">
+		<extends name="java/lang/Object" />
+		<method name="abortBroadcast()V" />
+		<method name="clearAbortBroadcast()V" />
+		<method name="finish()V" />
+		<method name="getAbortBroadcast()Z" />
+		<method name="getResultCode()I" />
+		<method name="getResultData()Ljava/lang/String;" />
+		<method name="getResultExtras(Z)Landroid/os/Bundle;" />
+		<method name="setResult(ILjava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="setResultCode(I)V" />
+		<method name="setResultData(Ljava/lang/String;)V" />
+		<method name="setResultExtras(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/content/ClipData" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/ClipData;)V" since="16" />
+		<method name="&lt;init&gt;(Landroid/content/ClipDescription;Landroid/content/ClipData$Item;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;[Ljava/lang/String;Landroid/content/ClipData$Item;)V" />
+		<method name="addItem(Landroid/content/ClipData$Item;)V" />
+		<method name="addItem(Landroid/content/ContentResolver;Landroid/content/ClipData$Item;)V" since="26" />
+		<method name="getDescription()Landroid/content/ClipDescription;" />
+		<method name="getItemAt(I)Landroid/content/ClipData$Item;" />
+		<method name="getItemCount()I" />
+		<method name="newHtmlText(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)Landroid/content/ClipData;" since="16" />
+		<method name="newIntent(Ljava/lang/CharSequence;Landroid/content/Intent;)Landroid/content/ClipData;" />
+		<method name="newPlainText(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/ClipData;" />
+		<method name="newRawUri(Ljava/lang/CharSequence;Landroid/net/Uri;)Landroid/content/ClipData;" />
+		<method name="newUri(Landroid/content/ContentResolver;Ljava/lang/CharSequence;Landroid/net/Uri;)Landroid/content/ClipData;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/ClipData$Item" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;)V" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/content/Intent;Landroid/net/Uri;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Ljava/lang/String;)V" since="16" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Ljava/lang/String;Landroid/content/Intent;Landroid/net/Uri;)V" since="16" />
+		<method name="coerceToHtmlText(Landroid/content/Context;)Ljava/lang/String;" since="16" />
+		<method name="coerceToStyledText(Landroid/content/Context;)Ljava/lang/CharSequence;" since="16" />
+		<method name="coerceToText(Landroid/content/Context;)Ljava/lang/CharSequence;" />
+		<method name="getHtmlText()Ljava/lang/String;" since="16" />
+		<method name="getIntent()Landroid/content/Intent;" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTextLinks()Landroid/view/textclassifier/TextLinks;" since="31" />
+		<method name="getUri()Landroid/net/Uri;" />
+	</class>
+	<class name="android/content/ClipDescription" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/ClipDescription;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;[Ljava/lang/String;)V" />
+		<method name="compareMimeTypes(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="filterMimeTypes(Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="getClassificationStatus()I" since="31" />
+		<method name="getConfidenceScore(Ljava/lang/String;)F" since="31" />
+		<method name="getExtras()Landroid/os/PersistableBundle;" since="24" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getMimeType(I)Ljava/lang/String;" />
+		<method name="getMimeTypeCount()I" />
+		<method name="getTimestamp()J" since="26" />
+		<method name="hasMimeType(Ljava/lang/String;)Z" />
+		<method name="isStyledText()Z" since="31" />
+		<method name="setExtras(Landroid/os/PersistableBundle;)V" since="24" />
+		<field name="CLASSIFICATION_COMPLETE" since="31" />
+		<field name="CLASSIFICATION_NOT_COMPLETE" since="31" />
+		<field name="CLASSIFICATION_NOT_PERFORMED" since="31" />
+		<field name="CREATOR" />
+		<field name="MIMETYPE_TEXT_HTML" since="16" />
+		<field name="MIMETYPE_TEXT_INTENT" />
+		<field name="MIMETYPE_TEXT_PLAIN" />
+		<field name="MIMETYPE_TEXT_URILIST" />
+		<field name="MIMETYPE_UNKNOWN" since="30" />
+	</class>
+	<class name="android/content/ClipboardManager" since="11">
+		<extends name="android/text/ClipboardManager" />
+		<method name="addPrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V" />
+		<method name="clearPrimaryClip()V" since="28" />
+		<method name="getPrimaryClip()Landroid/content/ClipData;" />
+		<method name="getPrimaryClipDescription()Landroid/content/ClipDescription;" />
+		<method name="hasPrimaryClip()Z" />
+		<method name="removePrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V" />
+		<method name="setPrimaryClip(Landroid/content/ClipData;)V" />
+	</class>
+	<class name="android/content/ClipboardManager$OnPrimaryClipChangedListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onPrimaryClipChanged()V" />
+	</class>
+	<class name="android/content/ComponentCallbacks" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V" />
+		<method name="onLowMemory()V" />
+	</class>
+	<class name="android/content/ComponentCallbacks2" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/ComponentCallbacks" />
+		<method name="onTrimMemory(I)V" />
+		<field name="TRIM_MEMORY_BACKGROUND" />
+		<field name="TRIM_MEMORY_COMPLETE" />
+		<field name="TRIM_MEMORY_MODERATE" />
+		<field name="TRIM_MEMORY_RUNNING_CRITICAL" since="16" />
+		<field name="TRIM_MEMORY_RUNNING_LOW" since="16" />
+		<field name="TRIM_MEMORY_RUNNING_MODERATE" since="16" />
+		<field name="TRIM_MEMORY_UI_HIDDEN" />
+	</class>
+	<class name="android/content/ComponentName" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/Cloneable" since="8" />
+		<implements name="java/lang/Comparable" since="4" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/Class;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="clone()Landroid/content/ComponentName;" since="8" />
+		<method name="compareTo(Landroid/content/ComponentName;)I" since="4" />
+		<method name="createRelative(Landroid/content/Context;Ljava/lang/String;)Landroid/content/ComponentName;" since="23" />
+		<method name="createRelative(Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;" since="23" />
+		<method name="flattenToShortString()Ljava/lang/String;" />
+		<method name="flattenToString()Ljava/lang/String;" />
+		<method name="getClassName()Ljava/lang/String;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getShortClassName()Ljava/lang/String;" />
+		<method name="readFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;" />
+		<method name="toShortString()Ljava/lang/String;" />
+		<method name="unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;" />
+		<method name="writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/ContentProvider" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/ComponentCallbacks" removed="14" />
+		<implements name="android/content/ComponentCallbacks2" since="14" />
+		<method name="&lt;init&gt;()V" />
+		<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="29" />
+		<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5" />
+		<method name="attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" />
+		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I" />
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11" />
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29" />
+		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19" />
+		<method name="clearCallingIdentity()Landroid/content/ContentProvider$CallingIdentity;" since="29" />
+		<method name="delete(Landroid/net/Uri;Landroid/os/Bundle;)I" since="30" />
+		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I" />
+		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="18" />
+		<method name="getCallingAttributionSource()Landroid/content/AttributionSource;" since="31" />
+		<method name="getCallingAttributionTag()Ljava/lang/String;" since="30" />
+		<method name="getCallingPackage()Ljava/lang/String;" since="19" />
+		<method name="getCallingPackageUnchecked()Ljava/lang/String;" since="30" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getPathPermissions()[Landroid/content/pm/PathPermission;" since="4" />
+		<method name="getReadPermission()Ljava/lang/String;" />
+		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11" />
+		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;" />
+		<method name="getWritePermission()Ljava/lang/String;" />
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;" />
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;" since="30" />
+		<method name="isTemporary()Z" />
+		<method name="onCallingPackageChanged()V" since="30" />
+		<method name="onCreate()Z" />
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" since="3" />
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19" />
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19" />
+		<method name="openFileHelper(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="openPipeHelper(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;Landroid/content/ContentProvider$PipeDataWriter;)Landroid/os/ParcelFileDescriptor;" since="11" />
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11" />
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26" />
+		<method name="requireContext()Landroid/content/Context;" since="30" />
+		<method name="restoreCallingIdentity(Landroid/content/ContentProvider$CallingIdentity;)V" since="29" />
+		<method name="setPathPermissions([Landroid/content/pm/PathPermission;)V" since="4" />
+		<method name="setReadPermission(Ljava/lang/String;)V" />
+		<method name="setWritePermission(Ljava/lang/String;)V" />
+		<method name="shutdown()V" since="11" />
+		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19" />
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I" since="30" />
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I" />
+	</class>
+	<class name="android/content/ContentProvider$CallingIdentity" since="29">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/content/ContentProvider$PipeDataWriter" since="11">
+		<extends name="java/lang/Object" />
+		<method name="writeDataToPipe(Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/content/ContentProviderClient" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="24" />
+		<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="29" />
+		<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" />
+		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I" />
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="17" />
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29" />
+		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19" />
+		<method name="delete(Landroid/net/Uri;Landroid/os/Bundle;)I" since="30" />
+		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I" />
+		<method name="getLocalContentProvider()Landroid/content/ContentProvider;" />
+		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11" />
+		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;" />
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;" />
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;" since="30" />
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" />
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19" />
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19" />
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29" />
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11" />
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26" />
+		<method name="release()Z" deprecated="24" />
+		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19" />
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I" since="30" />
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I" />
+	</class>
+	<class name="android/content/ContentProviderOperation" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="apply(Landroid/content/ContentProvider;[Landroid/content/ContentProviderResult;I)Landroid/content/ContentProviderResult;" />
+		<method name="getUri()Landroid/net/Uri;" />
+		<method name="isAssertQuery()Z" since="23" />
+		<method name="isCall()Z" since="30" />
+		<method name="isDelete()Z" since="23" />
+		<method name="isExceptionAllowed()Z" since="30" />
+		<method name="isInsert()Z" since="23" />
+		<method name="isReadOperation()Z" />
+		<method name="isUpdate()Z" since="23" />
+		<method name="isWriteOperation()Z" />
+		<method name="isYieldAllowed()Z" />
+		<method name="newAssertQuery(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="newCall(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="newDelete(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="newInsert(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="newUpdate(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="resolveExtrasBackReferences([Landroid/content/ContentProviderResult;I)Landroid/os/Bundle;" since="30" />
+		<method name="resolveSelectionArgsBackReferences([Landroid/content/ContentProviderResult;I)[Ljava/lang/String;" />
+		<method name="resolveValueBackReferences([Landroid/content/ContentProviderResult;I)Landroid/content/ContentValues;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/ContentProviderOperation$Builder" since="5">
+		<extends name="java/lang/Object" />
+		<method name="build()Landroid/content/ContentProviderOperation;" />
+		<method name="withExceptionAllowed(Z)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="withExpectedCount(I)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="withExtra(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="withExtraBackReference(Ljava/lang/String;I)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="withExtraBackReference(Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="withExtras(Landroid/os/Bundle;)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="withSelection(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="withSelectionBackReference(II)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="withSelectionBackReference(IILjava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="withValue(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="withValueBackReference(Ljava/lang/String;I)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="withValueBackReference(Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30" />
+		<method name="withValueBackReferences(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="withValues(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;" />
+		<method name="withYieldAllowed(Z)Landroid/content/ContentProviderOperation$Builder;" />
+	</class>
+	<class name="android/content/ContentProviderResult" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;)V" />
+		<method name="&lt;init&gt;(Landroid/os/Bundle;)V" since="30" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="30" />
+		<field name="CREATOR" />
+		<field name="count" />
+		<field name="exception" since="30" />
+		<field name="extras" since="30" />
+		<field name="uri" />
+	</class>
+	<class name="android/content/ContentQueryMap" since="1">
+		<extends name="java/util/Observable" />
+		<method name="&lt;init&gt;(Landroid/database/Cursor;Ljava/lang/String;ZLandroid/os/Handler;)V" />
+		<method name="close()V" />
+		<method name="getRows()Ljava/util/Map;" />
+		<method name="getValues(Ljava/lang/String;)Landroid/content/ContentValues;" />
+		<method name="requery()V" />
+		<method name="setKeepUpdated(Z)V" />
+	</class>
+	<class name="android/content/ContentResolver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="acquireContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;" since="5" />
+		<method name="acquireContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;" since="5" />
+		<method name="acquireUnstableContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;" since="16" />
+		<method name="acquireUnstableContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;" since="16" />
+		<method name="addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V" since="8" />
+		<method name="addStatusChangeListener(ILandroid/content/SyncStatusObserver;)Ljava/lang/Object;" since="5" />
+		<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5" />
+		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I" />
+		<method name="call(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11" />
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29" />
+		<method name="cancelSync(Landroid/accounts/Account;Ljava/lang/String;)V" since="5" />
+		<method name="cancelSync(Landroid/content/SyncRequest;)V" since="21" />
+		<method name="cancelSync(Landroid/net/Uri;)V" deprecated="15" />
+		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19" />
+		<method name="delete(Landroid/net/Uri;Landroid/os/Bundle;)I" since="30" />
+		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I" />
+		<method name="getCurrentSync()Landroid/content/SyncInfo;" since="8" deprecated="15" />
+		<method name="getCurrentSyncs()Ljava/util/List;" since="11" />
+		<method name="getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I" since="5" />
+		<method name="getMasterSyncAutomatically()Z" since="5" />
+		<method name="getOutgoingPersistedUriPermissions()Ljava/util/List;" since="19" />
+		<method name="getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;)Ljava/util/List;" since="8" />
+		<method name="getPersistedUriPermissions()Ljava/util/List;" since="19" />
+		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11" />
+		<method name="getSyncAdapterTypes()[Landroid/content/SyncAdapterType;" since="5" />
+		<method name="getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5" />
+		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;" />
+		<method name="getTypeInfo(Ljava/lang/String;)Landroid/content/ContentResolver$MimeTypeInfo;" since="29" />
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;" />
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;" since="30" />
+		<method name="isSyncActive(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5" />
+		<method name="isSyncPending(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5" />
+		<method name="loadThumbnail(Landroid/net/Uri;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29" />
+		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;)V" />
+		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V" since="24" />
+		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;Z)V" deprecated="30" />
+		<method name="notifyChange(Ljava/util/Collection;Landroid/database/ContentObserver;I)V" since="30" />
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29" />
+		<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" since="3" />
+		<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19" />
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="29" />
+		<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19" />
+		<method name="openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;" />
+		<method name="openOutputStream(Landroid/net/Uri;)Ljava/io/OutputStream;" />
+		<method name="openOutputStream(Landroid/net/Uri;Ljava/lang/String;)Ljava/io/OutputStream;" since="3" />
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29" />
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11" />
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26" />
+		<method name="registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;)V" />
+		<method name="releasePersistableUriPermission(Landroid/net/Uri;I)V" since="19" />
+		<method name="removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V" since="8" />
+		<method name="removeStatusChangeListener(Ljava/lang/Object;)V" since="5" />
+		<method name="requestSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V" since="5" />
+		<method name="requestSync(Landroid/content/SyncRequest;)V" since="19" />
+		<method name="setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V" since="5" />
+		<method name="setMasterSyncAutomatically(Z)V" since="5" />
+		<method name="setSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;Z)V" since="5" />
+		<method name="startSync(Landroid/net/Uri;Landroid/os/Bundle;)V" deprecated="15" />
+		<method name="takePersistableUriPermission(Landroid/net/Uri;I)V" since="19" />
+		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19" />
+		<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V" />
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I" since="30" />
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I" />
+		<method name="validateSyncExtrasBundle(Landroid/os/Bundle;)V" />
+		<method name="wrap(Landroid/content/ContentProvider;)Landroid/content/ContentResolver;" since="29" />
+		<method name="wrap(Landroid/content/ContentProviderClient;)Landroid/content/ContentResolver;" since="29" />
+		<field name="ANY_CURSOR_ITEM_TYPE" since="21" />
+		<field name="CURSOR_DIR_BASE_TYPE" />
+		<field name="CURSOR_ITEM_BASE_TYPE" />
+		<field name="EXTRA_HONORED_ARGS" since="26" />
+		<field name="EXTRA_REFRESH_SUPPORTED" since="26" />
+		<field name="EXTRA_SIZE" since="21" />
+		<field name="EXTRA_TOTAL_COUNT" since="26" />
+		<field name="NOTIFY_DELETE" since="30" />
+		<field name="NOTIFY_INSERT" since="30" />
+		<field name="NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS" since="24" />
+		<field name="NOTIFY_SYNC_TO_NETWORK" since="24" />
+		<field name="NOTIFY_UPDATE" since="30" />
+		<field name="QUERY_ARG_GROUP_COLUMNS" since="30" />
+		<field name="QUERY_ARG_LIMIT" since="26" />
+		<field name="QUERY_ARG_OFFSET" since="26" />
+		<field name="QUERY_ARG_SORT_COLLATION" since="26" />
+		<field name="QUERY_ARG_SORT_COLUMNS" since="26" />
+		<field name="QUERY_ARG_SORT_DIRECTION" since="26" />
+		<field name="QUERY_ARG_SORT_LOCALE" since="30" />
+		<field name="QUERY_ARG_SQL_GROUP_BY" since="30" />
+		<field name="QUERY_ARG_SQL_HAVING" since="30" />
+		<field name="QUERY_ARG_SQL_LIMIT" since="30" />
+		<field name="QUERY_ARG_SQL_SELECTION" since="26" />
+		<field name="QUERY_ARG_SQL_SELECTION_ARGS" since="26" />
+		<field name="QUERY_ARG_SQL_SORT_ORDER" since="26" />
+		<field name="QUERY_SORT_DIRECTION_ASCENDING" since="26" />
+		<field name="QUERY_SORT_DIRECTION_DESCENDING" since="26" />
+		<field name="SCHEME_ANDROID_RESOURCE" />
+		<field name="SCHEME_CONTENT" />
+		<field name="SCHEME_FILE" />
+		<field name="SYNC_EXTRAS_ACCOUNT" deprecated="15" />
+		<field name="SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS" />
+		<field name="SYNC_EXTRAS_DO_NOT_RETRY" since="8" />
+		<field name="SYNC_EXTRAS_EXPEDITED" />
+		<field name="SYNC_EXTRAS_FORCE" deprecated="15" />
+		<field name="SYNC_EXTRAS_IGNORE_BACKOFF" since="8" />
+		<field name="SYNC_EXTRAS_IGNORE_SETTINGS" since="8" />
+		<field name="SYNC_EXTRAS_INITIALIZE" since="5" />
+		<field name="SYNC_EXTRAS_MANUAL" since="5" />
+		<field name="SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS" />
+		<field name="SYNC_EXTRAS_REQUIRE_CHARGING" since="24" />
+		<field name="SYNC_EXTRAS_SCHEDULE_AS_EXPEDITED_JOB" since="31" />
+		<field name="SYNC_EXTRAS_UPLOAD" />
+		<field name="SYNC_OBSERVER_TYPE_ACTIVE" since="8" />
+		<field name="SYNC_OBSERVER_TYPE_PENDING" since="8" />
+		<field name="SYNC_OBSERVER_TYPE_SETTINGS" since="8" />
+	</class>
+	<class name="android/content/ContentResolver$MimeTypeInfo" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+	</class>
+	<class name="android/content/ContentUris" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="appendId(Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder;" />
+		<method name="parseId(Landroid/net/Uri;)J" />
+		<method name="removeId(Landroid/net/Uri;)Landroid/net/Uri;" since="29" />
+		<method name="withAppendedId(Landroid/net/Uri;J)Landroid/net/Uri;" />
+	</class>
+	<class name="android/content/ContentValues" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/content/ContentValues;)V" />
+		<method name="clear()V" />
+		<method name="containsKey(Ljava/lang/String;)Z" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getAsBoolean(Ljava/lang/String;)Ljava/lang/Boolean;" />
+		<method name="getAsByte(Ljava/lang/String;)Ljava/lang/Byte;" />
+		<method name="getAsByteArray(Ljava/lang/String;)[B" />
+		<method name="getAsDouble(Ljava/lang/String;)Ljava/lang/Double;" />
+		<method name="getAsFloat(Ljava/lang/String;)Ljava/lang/Float;" />
+		<method name="getAsInteger(Ljava/lang/String;)Ljava/lang/Integer;" />
+		<method name="getAsLong(Ljava/lang/String;)Ljava/lang/Long;" />
+		<method name="getAsShort(Ljava/lang/String;)Ljava/lang/Short;" />
+		<method name="getAsString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="isEmpty()Z" since="30" />
+		<method name="keySet()Ljava/util/Set;" since="11" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Boolean;)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Byte;)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Double;)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Float;)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Integer;)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Long;)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Short;)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="put(Ljava/lang/String;[B)V" />
+		<method name="putAll(Landroid/content/ContentValues;)V" />
+		<method name="putNull(Ljava/lang/String;)V" />
+		<method name="remove(Ljava/lang/String;)V" />
+		<method name="size()I" />
+		<method name="valueSet()Ljava/util/Set;" />
+		<field name="CREATOR" />
+		<field name="TAG" />
+	</class>
+	<class name="android/content/Context" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z" since="29" />
+		<method name="bindService(Landroid/content/Intent;ILjava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z" since="29" />
+		<method name="bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z" />
+		<method name="bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z" since="30" />
+		<method name="checkCallingOrSelfPermission(Ljava/lang/String;)I" />
+		<method name="checkCallingOrSelfUriPermission(Landroid/net/Uri;I)I" />
+		<method name="checkCallingOrSelfUriPermissions(Ljava/util/List;I)[I" since="31" />
+		<method name="checkCallingPermission(Ljava/lang/String;)I" />
+		<method name="checkCallingUriPermission(Landroid/net/Uri;I)I" />
+		<method name="checkCallingUriPermissions(Ljava/util/List;I)[I" since="31" />
+		<method name="checkPermission(Ljava/lang/String;II)I" />
+		<method name="checkSelfPermission(Ljava/lang/String;)I" since="23" />
+		<method name="checkUriPermission(Landroid/net/Uri;III)I" />
+		<method name="checkUriPermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;III)I" />
+		<method name="checkUriPermissions(Ljava/util/List;III)[I" since="31" />
+		<method name="clearWallpaper()V" deprecated="15" />
+		<method name="createAttributionContext(Ljava/lang/String;)Landroid/content/Context;" since="30" />
+		<method name="createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;" since="17" />
+		<method name="createContext(Landroid/content/ContextParams;)Landroid/content/Context;" since="31" />
+		<method name="createContextForSplit(Ljava/lang/String;)Landroid/content/Context;" since="26" />
+		<method name="createDeviceProtectedStorageContext()Landroid/content/Context;" since="24" />
+		<method name="createDisplayContext(Landroid/view/Display;)Landroid/content/Context;" since="17" />
+		<method name="createPackageContext(Ljava/lang/String;I)Landroid/content/Context;" />
+		<method name="createWindowContext(ILandroid/os/Bundle;)Landroid/content/Context;" since="30" />
+		<method name="createWindowContext(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;" since="31" />
+		<method name="databaseList()[Ljava/lang/String;" />
+		<method name="deleteDatabase(Ljava/lang/String;)Z" />
+		<method name="deleteFile(Ljava/lang/String;)Z" />
+		<method name="deleteSharedPreferences(Ljava/lang/String;)Z" since="24" />
+		<method name="enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="enforceCallingOrSelfUriPermission(Landroid/net/Uri;ILjava/lang/String;)V" />
+		<method name="enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="enforceCallingUriPermission(Landroid/net/Uri;ILjava/lang/String;)V" />
+		<method name="enforcePermission(Ljava/lang/String;IILjava/lang/String;)V" />
+		<method name="enforceUriPermission(Landroid/net/Uri;IIILjava/lang/String;)V" />
+		<method name="enforceUriPermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;)V" />
+		<method name="fileList()[Ljava/lang/String;" />
+		<method name="getApplicationContext()Landroid/content/Context;" />
+		<method name="getApplicationInfo()Landroid/content/pm/ApplicationInfo;" since="4" />
+		<method name="getAssets()Landroid/content/res/AssetManager;" />
+		<method name="getAttributionSource()Landroid/content/AttributionSource;" since="31" />
+		<method name="getAttributionTag()Ljava/lang/String;" since="30" />
+		<method name="getCacheDir()Ljava/io/File;" />
+		<method name="getClassLoader()Ljava/lang/ClassLoader;" />
+		<method name="getCodeCacheDir()Ljava/io/File;" since="21" />
+		<method name="getColor(I)I" since="23" />
+		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;" since="23" />
+		<method name="getContentResolver()Landroid/content/ContentResolver;" />
+		<method name="getDataDir()Ljava/io/File;" since="24" />
+		<method name="getDatabasePath(Ljava/lang/String;)Ljava/io/File;" />
+		<method name="getDir(Ljava/lang/String;I)Ljava/io/File;" />
+		<method name="getDisplay()Landroid/view/Display;" since="30" />
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="getExternalCacheDir()Ljava/io/File;" since="8" />
+		<method name="getExternalCacheDirs()[Ljava/io/File;" since="19" />
+		<method name="getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;" since="8" />
+		<method name="getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;" since="19" />
+		<method name="getExternalMediaDirs()[Ljava/io/File;" since="21" deprecated="30" />
+		<method name="getFileStreamPath(Ljava/lang/String;)Ljava/io/File;" />
+		<method name="getFilesDir()Ljava/io/File;" />
+		<method name="getMainExecutor()Ljava/util/concurrent/Executor;" since="28" />
+		<method name="getMainLooper()Landroid/os/Looper;" />
+		<method name="getNoBackupFilesDir()Ljava/io/File;" since="21" />
+		<method name="getObbDir()Ljava/io/File;" since="11" />
+		<method name="getObbDirs()[Ljava/io/File;" since="19" />
+		<method name="getOpPackageName()Ljava/lang/String;" since="29" />
+		<method name="getPackageCodePath()Ljava/lang/String;" since="8" />
+		<method name="getPackageManager()Landroid/content/pm/PackageManager;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getPackageResourcePath()Ljava/lang/String;" since="8" />
+		<method name="getParams()Landroid/content/ContextParams;" since="31" />
+		<method name="getResources()Landroid/content/res/Resources;" />
+		<method name="getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;" />
+		<method name="getString(I)Ljava/lang/String;" />
+		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="getSystemService(Ljava/lang/Class;)Ljava/lang/Object;" since="23" />
+		<method name="getSystemService(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;" since="23" />
+		<method name="getText(I)Ljava/lang/CharSequence;" />
+		<method name="getTheme()Landroid/content/res/Resources$Theme;" />
+		<method name="getWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="15" />
+		<method name="getWallpaperDesiredMinimumHeight()I" deprecated="15" />
+		<method name="getWallpaperDesiredMinimumWidth()I" deprecated="15" />
+		<method name="grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V" />
+		<method name="isDeviceProtectedStorage()Z" since="24" />
+		<method name="isRestricted()Z" since="4" />
+		<method name="isUiContext()Z" since="31" />
+		<method name="moveDatabaseFrom(Landroid/content/Context;Ljava/lang/String;)Z" since="24" />
+		<method name="moveSharedPreferencesFrom(Landroid/content/Context;Ljava/lang/String;)Z" since="24" />
+		<method name="obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;" />
+		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;" />
+		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;" />
+		<method name="obtainStyledAttributes([I)Landroid/content/res/TypedArray;" />
+		<method name="openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;" />
+		<method name="openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;" />
+		<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11" />
+		<method name="peekWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="15" />
+		<method name="registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14" />
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;" />
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;" since="26" />
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;" />
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;" since="26" />
+		<method name="removeStickyBroadcast(Landroid/content/Intent;)V" deprecated="21" />
+		<method name="removeStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" deprecated="21" />
+		<method name="revokeUriPermission(Landroid/net/Uri;I)V" />
+		<method name="revokeUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V" since="26" />
+		<method name="sendBroadcast(Landroid/content/Intent;)V" />
+		<method name="sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V" />
+		<method name="sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" />
+		<method name="sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V" since="17" />
+		<method name="sendBroadcastWithMultiplePermissions(Landroid/content/Intent;[Ljava/lang/String;)V" since="30" />
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V" />
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="30" />
+		<method name="sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17" />
+		<method name="sendStickyBroadcast(Landroid/content/Intent;)V" deprecated="21" />
+		<method name="sendStickyBroadcast(Landroid/content/Intent;Landroid/os/Bundle;)V" since="31" deprecated="31" />
+		<method name="sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" deprecated="21" />
+		<method name="sendStickyOrderedBroadcast(Landroid/content/Intent;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="5" deprecated="21" />
+		<method name="sendStickyOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17" deprecated="21" />
+		<method name="setTheme(I)V" />
+		<method name="setWallpaper(Landroid/graphics/Bitmap;)V" deprecated="15" />
+		<method name="setWallpaper(Ljava/io/InputStream;)V" deprecated="15" />
+		<method name="startActivities([Landroid/content/Intent;)V" since="11" />
+		<method name="startActivities([Landroid/content/Intent;Landroid/os/Bundle;)V" since="16" />
+		<method name="startActivity(Landroid/content/Intent;)V" />
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16" />
+		<method name="startForegroundService(Landroid/content/Intent;)Landroid/content/ComponentName;" since="26" />
+		<method name="startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)Z" />
+		<method name="startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;III)V" since="5" />
+		<method name="startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;IIILandroid/os/Bundle;)V" since="16" />
+		<method name="startService(Landroid/content/Intent;)Landroid/content/ComponentName;" />
+		<method name="stopService(Landroid/content/Intent;)Z" />
+		<method name="unbindService(Landroid/content/ServiceConnection;)V" />
+		<method name="unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14" />
+		<method name="unregisterReceiver(Landroid/content/BroadcastReceiver;)V" />
+		<method name="updateServiceGroup(Landroid/content/ServiceConnection;II)V" since="29" />
+		<field name="ACCESSIBILITY_SERVICE" since="4" />
+		<field name="ACCOUNT_SERVICE" since="5" />
+		<field name="ACTIVITY_SERVICE" />
+		<field name="ALARM_SERVICE" />
+		<field name="APPWIDGET_SERVICE" since="21" />
+		<field name="APP_OPS_SERVICE" since="19" />
+		<field name="APP_SEARCH_SERVICE" since="31" />
+		<field name="AUDIO_SERVICE" />
+		<field name="BATTERY_SERVICE" since="21" />
+		<field name="BIND_ABOVE_CLIENT" since="14" />
+		<field name="BIND_ADJUST_WITH_ACTIVITY" since="14" />
+		<field name="BIND_ALLOW_OOM_MANAGEMENT" since="14" />
+		<field name="BIND_AUTO_CREATE" />
+		<field name="BIND_DEBUG_UNBIND" />
+		<field name="BIND_EXTERNAL_SERVICE" since="24" />
+		<field name="BIND_IMPORTANT" since="14" />
+		<field name="BIND_INCLUDE_CAPABILITIES" since="29" />
+		<field name="BIND_NOT_FOREGROUND" since="8" />
+		<field name="BIND_NOT_PERCEPTIBLE" since="29" />
+		<field name="BIND_WAIVE_PRIORITY" since="14" />
+		<field name="BIOMETRIC_SERVICE" since="29" />
+		<field name="BLOB_STORE_SERVICE" since="30" />
+		<field name="BLUETOOTH_SERVICE" since="18" />
+		<field name="BUGREPORT_SERVICE" since="31" />
+		<field name="CAMERA_SERVICE" since="21" />
+		<field name="CAPTIONING_SERVICE" since="19" />
+		<field name="CARRIER_CONFIG_SERVICE" since="23" />
+		<field name="CLIPBOARD_SERVICE" />
+		<field name="COMPANION_DEVICE_SERVICE" since="26" />
+		<field name="CONNECTIVITY_DIAGNOSTICS_SERVICE" since="30" />
+		<field name="CONNECTIVITY_SERVICE" />
+		<field name="CONSUMER_IR_SERVICE" since="19" />
+		<field name="CONTEXT_IGNORE_SECURITY" />
+		<field name="CONTEXT_INCLUDE_CODE" />
+		<field name="CONTEXT_RESTRICTED" since="4" />
+		<field name="CROSS_PROFILE_APPS_SERVICE" since="28" />
+		<field name="DEVICE_POLICY_SERVICE" since="8" />
+		<field name="DISPLAY_HASH_SERVICE" since="31" />
+		<field name="DISPLAY_SERVICE" since="17" />
+		<field name="DOMAIN_VERIFICATION_SERVICE" since="31" />
+		<field name="DOWNLOAD_SERVICE" since="9" />
+		<field name="DROPBOX_SERVICE" since="8" />
+		<field name="EUICC_SERVICE" since="28" />
+		<field name="FILE_INTEGRITY_SERVICE" since="30" />
+		<field name="FINGERPRINT_SERVICE" since="23" />
+		<field name="GAME_SERVICE" since="31" />
+		<field name="HARDWARE_PROPERTIES_SERVICE" since="24" />
+		<field name="INPUT_METHOD_SERVICE" since="3" />
+		<field name="INPUT_SERVICE" since="16" />
+		<field name="IPSEC_SERVICE" since="28" />
+		<field name="JOB_SCHEDULER_SERVICE" since="21" />
+		<field name="KEYGUARD_SERVICE" />
+		<field name="LAUNCHER_APPS_SERVICE" since="21" />
+		<field name="LAYOUT_INFLATER_SERVICE" />
+		<field name="LOCATION_SERVICE" />
+		<field name="MEDIA_COMMUNICATION_SERVICE" since="31" />
+		<field name="MEDIA_METRICS_SERVICE" since="31" />
+		<field name="MEDIA_PROJECTION_SERVICE" since="21" />
+		<field name="MEDIA_ROUTER_SERVICE" since="16" />
+		<field name="MEDIA_SESSION_SERVICE" since="21" />
+		<field name="MIDI_SERVICE" since="23" />
+		<field name="MODE_APPEND" />
+		<field name="MODE_ENABLE_WRITE_AHEAD_LOGGING" since="16" />
+		<field name="MODE_MULTI_PROCESS" since="11" deprecated="23" />
+		<field name="MODE_NO_LOCALIZED_COLLATORS" since="24" />
+		<field name="MODE_PRIVATE" />
+		<field name="MODE_WORLD_READABLE" deprecated="17" />
+		<field name="MODE_WORLD_WRITEABLE" deprecated="17" />
+		<field name="NETWORK_STATS_SERVICE" since="23" />
+		<field name="NFC_SERVICE" since="10" />
+		<field name="NOTIFICATION_SERVICE" />
+		<field name="NSD_SERVICE" since="16" />
+		<field name="PEOPLE_SERVICE" since="31" />
+		<field name="PERFORMANCE_HINT_SERVICE" since="31" />
+		<field name="POWER_SERVICE" />
+		<field name="PRINT_SERVICE" since="19" />
+		<field name="RECEIVER_VISIBLE_TO_INSTANT_APPS" since="26" />
+		<field name="RESTRICTIONS_SERVICE" since="21" />
+		<field name="ROLE_SERVICE" since="29" />
+		<field name="SEARCH_SERVICE" />
+		<field name="SENSOR_SERVICE" />
+		<field name="SHORTCUT_SERVICE" since="25" />
+		<field name="STORAGE_SERVICE" since="9" />
+		<field name="STORAGE_STATS_SERVICE" since="26" />
+		<field name="SYSTEM_HEALTH_SERVICE" since="24" />
+		<field name="TELECOM_SERVICE" since="21" />
+		<field name="TELEPHONY_IMS_SERVICE" since="30" />
+		<field name="TELEPHONY_SERVICE" />
+		<field name="TELEPHONY_SUBSCRIPTION_SERVICE" since="22" />
+		<field name="TEXT_CLASSIFICATION_SERVICE" since="26" />
+		<field name="TEXT_SERVICES_MANAGER_SERVICE" since="14" />
+		<field name="TV_INPUT_SERVICE" since="21" />
+		<field name="UI_MODE_SERVICE" since="8" />
+		<field name="USAGE_STATS_SERVICE" since="22" />
+		<field name="USB_SERVICE" since="12" />
+		<field name="USER_SERVICE" since="17" />
+		<field name="VIBRATOR_MANAGER_SERVICE" since="31" />
+		<field name="VIBRATOR_SERVICE" deprecated="31" />
+		<field name="VPN_MANAGEMENT_SERVICE" since="30" />
+		<field name="WALLPAPER_SERVICE" />
+		<field name="WIFI_AWARE_SERVICE" since="26" />
+		<field name="WIFI_P2P_SERVICE" since="14" />
+		<field name="WIFI_RTT_RANGING_SERVICE" since="28" />
+		<field name="WIFI_SERVICE" />
+		<field name="WINDOW_SERVICE" />
+	</class>
+	<class name="android/content/ContextParams" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getAttributionTag()Ljava/lang/String;" />
+		<method name="getNextAttributionSource()Landroid/content/AttributionSource;" />
+	</class>
+	<class name="android/content/ContextParams$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/ContextParams;)V" />
+		<method name="build()Landroid/content/ContextParams;" />
+		<method name="setAttributionTag(Ljava/lang/String;)Landroid/content/ContextParams$Builder;" />
+		<method name="setNextAttributionSource(Landroid/content/AttributionSource;)Landroid/content/ContextParams$Builder;" />
+	</class>
+	<class name="android/content/ContextWrapper" since="1">
+		<extends name="android/content/Context" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="attachBaseContext(Landroid/content/Context;)V" />
+		<method name="getBaseContext()Landroid/content/Context;" />
+		<method name="getPackageCodePath()Ljava/lang/String;" />
+		<method name="getPackageResourcePath()Ljava/lang/String;" />
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;ILjava/lang/String;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;)V" since="30" />
+	</class>
+	<class name="android/content/CursorLoader" since="11" deprecated="28">
+		<extends name="android/content/AsyncTaskLoader" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V" deprecated="29" />
+		<method name="deliverResult(Landroid/database/Cursor;)V" deprecated="29" />
+		<method name="getProjection()[Ljava/lang/String;" deprecated="29" />
+		<method name="getSelection()Ljava/lang/String;" deprecated="29" />
+		<method name="getSelectionArgs()[Ljava/lang/String;" deprecated="29" />
+		<method name="getSortOrder()Ljava/lang/String;" deprecated="29" />
+		<method name="getUri()Landroid/net/Uri;" deprecated="29" />
+		<method name="loadInBackground()Landroid/database/Cursor;" deprecated="29" />
+		<method name="onCanceled(Landroid/database/Cursor;)V" deprecated="29" />
+		<method name="setProjection([Ljava/lang/String;)V" deprecated="29" />
+		<method name="setSelection(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setSelectionArgs([Ljava/lang/String;)V" deprecated="29" />
+		<method name="setSortOrder(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setUri(Landroid/net/Uri;)V" deprecated="29" />
+	</class>
+	<class name="android/content/DialogInterface" since="1">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="dismiss()V" />
+		<field name="BUTTON1" deprecated="15" />
+		<field name="BUTTON2" deprecated="15" />
+		<field name="BUTTON3" deprecated="15" />
+		<field name="BUTTON_NEGATIVE" since="3" />
+		<field name="BUTTON_NEUTRAL" since="3" />
+		<field name="BUTTON_POSITIVE" since="3" />
+	</class>
+	<class name="android/content/DialogInterface$OnCancelListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onCancel(Landroid/content/DialogInterface;)V" />
+	</class>
+	<class name="android/content/DialogInterface$OnClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onClick(Landroid/content/DialogInterface;I)V" />
+	</class>
+	<class name="android/content/DialogInterface$OnDismissListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onDismiss(Landroid/content/DialogInterface;)V" />
+	</class>
+	<class name="android/content/DialogInterface$OnKeyListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onKey(Landroid/content/DialogInterface;ILandroid/view/KeyEvent;)Z" />
+	</class>
+	<class name="android/content/DialogInterface$OnMultiChoiceClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onClick(Landroid/content/DialogInterface;IZ)V" />
+	</class>
+	<class name="android/content/DialogInterface$OnShowListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="onShow(Landroid/content/DialogInterface;)V" />
+	</class>
+	<class name="android/content/Entity" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/ContentValues;)V" />
+		<method name="addSubValue(Landroid/net/Uri;Landroid/content/ContentValues;)V" />
+		<method name="getEntityValues()Landroid/content/ContentValues;" />
+		<method name="getSubValues()Ljava/util/ArrayList;" />
+	</class>
+	<class name="android/content/Entity$NamedContentValues" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;Landroid/content/ContentValues;)V" />
+		<field name="uri" />
+		<field name="values" />
+	</class>
+	<class name="android/content/EntityIterator" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Iterator" />
+		<method name="close()V" />
+		<method name="reset()V" />
+	</class>
+	<class name="android/content/Intent" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/Cloneable" since="8" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/Class;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/net/Uri;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/net/Uri;Landroid/content/Context;Ljava/lang/Class;)V" />
+		<method name="addCategory(Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="addFlags(I)Landroid/content/Intent;" />
+		<method name="cloneFilter()Landroid/content/Intent;" />
+		<method name="createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;)Landroid/content/Intent;" />
+		<method name="createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;Landroid/content/IntentSender;)Landroid/content/Intent;" since="22" />
+		<method name="fillIn(Landroid/content/Intent;I)I" />
+		<method name="filterEquals(Landroid/content/Intent;)Z" />
+		<method name="filterHashCode()I" />
+		<method name="getAction()Ljava/lang/String;" />
+		<method name="getBooleanArrayExtra(Ljava/lang/String;)[Z" />
+		<method name="getBooleanExtra(Ljava/lang/String;Z)Z" />
+		<method name="getBundleExtra(Ljava/lang/String;)Landroid/os/Bundle;" />
+		<method name="getByteArrayExtra(Ljava/lang/String;)[B" />
+		<method name="getByteExtra(Ljava/lang/String;B)B" />
+		<method name="getCategories()Ljava/util/Set;" />
+		<method name="getCharArrayExtra(Ljava/lang/String;)[C" />
+		<method name="getCharExtra(Ljava/lang/String;C)C" />
+		<method name="getCharSequenceArrayExtra(Ljava/lang/String;)[Ljava/lang/CharSequence;" since="8" />
+		<method name="getCharSequenceArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;" since="8" />
+		<method name="getCharSequenceExtra(Ljava/lang/String;)Ljava/lang/CharSequence;" />
+		<method name="getClipData()Landroid/content/ClipData;" since="16" />
+		<method name="getComponent()Landroid/content/ComponentName;" />
+		<method name="getData()Landroid/net/Uri;" />
+		<method name="getDataString()Ljava/lang/String;" />
+		<method name="getDoubleArrayExtra(Ljava/lang/String;)[D" />
+		<method name="getDoubleExtra(Ljava/lang/String;D)D" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getFlags()I" />
+		<method name="getFloatArrayExtra(Ljava/lang/String;)[F" />
+		<method name="getFloatExtra(Ljava/lang/String;F)F" />
+		<method name="getIdentifier()Ljava/lang/String;" since="29" />
+		<method name="getIntArrayExtra(Ljava/lang/String;)[I" />
+		<method name="getIntExtra(Ljava/lang/String;I)I" />
+		<method name="getIntegerArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="getIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="15" />
+		<method name="getIntentOld(Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="getLongArrayExtra(Ljava/lang/String;)[J" />
+		<method name="getLongExtra(Ljava/lang/String;J)J" />
+		<method name="getPackage()Ljava/lang/String;" since="4" />
+		<method name="getParcelableArrayExtra(Ljava/lang/String;)[Landroid/os/Parcelable;" />
+		<method name="getParcelableArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="getParcelableExtra(Ljava/lang/String;)Landroid/os/Parcelable;" />
+		<method name="getScheme()Ljava/lang/String;" />
+		<method name="getSelector()Landroid/content/Intent;" since="15" />
+		<method name="getSerializableExtra(Ljava/lang/String;)Ljava/io/Serializable;" />
+		<method name="getShortArrayExtra(Ljava/lang/String;)[S" />
+		<method name="getShortExtra(Ljava/lang/String;S)S" />
+		<method name="getSourceBounds()Landroid/graphics/Rect;" since="7" />
+		<method name="getStringArrayExtra(Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="getStringArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="getStringExtra(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="hasCategory(Ljava/lang/String;)Z" />
+		<method name="hasExtra(Ljava/lang/String;)Z" />
+		<method name="hasFileDescriptors()Z" />
+		<method name="makeMainActivity(Landroid/content/ComponentName;)Landroid/content/Intent;" since="11" />
+		<method name="makeMainSelectorActivity(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;" since="15" />
+		<method name="makeRestartActivityTask(Landroid/content/ComponentName;)Landroid/content/Intent;" since="11" />
+		<method name="normalizeMimeType(Ljava/lang/String;)Ljava/lang/String;" since="16" />
+		<method name="parseIntent(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/content/Intent;" />
+		<method name="parseUri(Ljava/lang/String;I)Landroid/content/Intent;" since="4" />
+		<method name="putCharSequenceArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;" since="8" />
+		<method name="putExtra(Ljava/lang/String;B)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;C)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;D)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;F)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;I)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;J)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;Ljava/io/Serializable;)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;S)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;Z)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[B)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[C)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[D)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[F)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[I)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[J)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[Landroid/os/Parcelable;)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[Ljava/lang/CharSequence;)Landroid/content/Intent;" since="8" />
+		<method name="putExtra(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[S)Landroid/content/Intent;" />
+		<method name="putExtra(Ljava/lang/String;[Z)Landroid/content/Intent;" />
+		<method name="putExtras(Landroid/content/Intent;)Landroid/content/Intent;" />
+		<method name="putExtras(Landroid/os/Bundle;)Landroid/content/Intent;" />
+		<method name="putIntegerArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;" />
+		<method name="putParcelableArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;" />
+		<method name="putStringArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<method name="removeCategory(Ljava/lang/String;)V" />
+		<method name="removeExtra(Ljava/lang/String;)V" />
+		<method name="removeFlags(I)V" since="26" />
+		<method name="replaceExtras(Landroid/content/Intent;)Landroid/content/Intent;" since="3" />
+		<method name="replaceExtras(Landroid/os/Bundle;)Landroid/content/Intent;" since="3" />
+		<method name="resolveActivity(Landroid/content/pm/PackageManager;)Landroid/content/ComponentName;" />
+		<method name="resolveActivityInfo(Landroid/content/pm/PackageManager;I)Landroid/content/pm/ActivityInfo;" />
+		<method name="resolveType(Landroid/content/ContentResolver;)Ljava/lang/String;" />
+		<method name="resolveType(Landroid/content/Context;)Ljava/lang/String;" />
+		<method name="resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;" />
+		<method name="setAction(Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="setClass(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;" />
+		<method name="setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="setClipData(Landroid/content/ClipData;)V" since="16" />
+		<method name="setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;" />
+		<method name="setData(Landroid/net/Uri;)Landroid/content/Intent;" />
+		<method name="setDataAndNormalize(Landroid/net/Uri;)Landroid/content/Intent;" since="16" />
+		<method name="setDataAndType(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="setDataAndTypeAndNormalize(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;" since="16" />
+		<method name="setExtrasClassLoader(Ljava/lang/ClassLoader;)V" />
+		<method name="setFlags(I)Landroid/content/Intent;" />
+		<method name="setIdentifier(Ljava/lang/String;)Landroid/content/Intent;" since="29" />
+		<method name="setPackage(Ljava/lang/String;)Landroid/content/Intent;" since="4" />
+		<method name="setSelector(Landroid/content/Intent;)V" since="15" />
+		<method name="setSourceBounds(Landroid/graphics/Rect;)V" since="7" />
+		<method name="setType(Ljava/lang/String;)Landroid/content/Intent;" />
+		<method name="setTypeAndNormalize(Ljava/lang/String;)Landroid/content/Intent;" since="16" />
+		<method name="toURI()Ljava/lang/String;" deprecated="15" />
+		<method name="toUri(I)Ljava/lang/String;" since="4" />
+		<field name="ACTION_AIRPLANE_MODE_CHANGED" />
+		<field name="ACTION_ALL_APPS" />
+		<field name="ACTION_ANSWER" />
+		<field name="ACTION_APPLICATION_PREFERENCES" since="24" />
+		<field name="ACTION_APPLICATION_RESTRICTIONS_CHANGED" since="21" />
+		<field name="ACTION_APP_ERROR" since="14" />
+		<field name="ACTION_ASSIST" since="16" />
+		<field name="ACTION_ATTACH_DATA" />
+		<field name="ACTION_AUTO_REVOKE_PERMISSIONS" since="30" />
+		<field name="ACTION_BATTERY_CHANGED" />
+		<field name="ACTION_BATTERY_LOW" />
+		<field name="ACTION_BATTERY_OKAY" since="4" />
+		<field name="ACTION_BOOT_COMPLETED" />
+		<field name="ACTION_BUG_REPORT" />
+		<field name="ACTION_CALL" />
+		<field name="ACTION_CALL_BUTTON" />
+		<field name="ACTION_CAMERA_BUTTON" />
+		<field name="ACTION_CARRIER_SETUP" since="26" />
+		<field name="ACTION_CHOOSER" />
+		<field name="ACTION_CLOSE_SYSTEM_DIALOGS" deprecated="31" />
+		<field name="ACTION_CONFIGURATION_CHANGED" />
+		<field name="ACTION_CREATE_DOCUMENT" since="19" />
+		<field name="ACTION_CREATE_REMINDER" since="30" />
+		<field name="ACTION_CREATE_SHORTCUT" />
+		<field name="ACTION_DATE_CHANGED" />
+		<field name="ACTION_DEFAULT" />
+		<field name="ACTION_DEFINE" since="29" />
+		<field name="ACTION_DELETE" />
+		<field name="ACTION_DEVICE_STORAGE_LOW" deprecated="26" />
+		<field name="ACTION_DEVICE_STORAGE_OK" deprecated="26" />
+		<field name="ACTION_DIAL" />
+		<field name="ACTION_DOCK_EVENT" since="5" />
+		<field name="ACTION_DREAMING_STARTED" since="17" />
+		<field name="ACTION_DREAMING_STOPPED" since="17" />
+		<field name="ACTION_EDIT" />
+		<field name="ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" since="8" />
+		<field name="ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE" since="8" />
+		<field name="ACTION_FACTORY_TEST" />
+		<field name="ACTION_GET_CONTENT" />
+		<field name="ACTION_GET_RESTRICTION_ENTRIES" since="18" />
+		<field name="ACTION_GTALK_SERVICE_CONNECTED" />
+		<field name="ACTION_GTALK_SERVICE_DISCONNECTED" />
+		<field name="ACTION_HEADSET_PLUG" />
+		<field name="ACTION_INPUT_METHOD_CHANGED" since="3" />
+		<field name="ACTION_INSERT" />
+		<field name="ACTION_INSERT_OR_EDIT" />
+		<field name="ACTION_INSTALL_FAILURE" since="27" />
+		<field name="ACTION_INSTALL_PACKAGE" since="14" deprecated="29" />
+		<field name="ACTION_LOCALE_CHANGED" since="7" />
+		<field name="ACTION_LOCKED_BOOT_COMPLETED" since="24" />
+		<field name="ACTION_MAIN" />
+		<field name="ACTION_MANAGED_PROFILE_ADDED" since="21" />
+		<field name="ACTION_MANAGED_PROFILE_AVAILABLE" since="24" />
+		<field name="ACTION_MANAGED_PROFILE_REMOVED" since="21" />
+		<field name="ACTION_MANAGED_PROFILE_UNAVAILABLE" since="24" />
+		<field name="ACTION_MANAGED_PROFILE_UNLOCKED" since="24" />
+		<field name="ACTION_MANAGE_NETWORK_USAGE" since="14" />
+		<field name="ACTION_MANAGE_PACKAGE_STORAGE" />
+		<field name="ACTION_MANAGE_UNUSED_APPS" since="31" />
+		<field name="ACTION_MEDIA_BAD_REMOVAL" />
+		<field name="ACTION_MEDIA_BUTTON" />
+		<field name="ACTION_MEDIA_CHECKING" since="3" />
+		<field name="ACTION_MEDIA_EJECT" />
+		<field name="ACTION_MEDIA_MOUNTED" />
+		<field name="ACTION_MEDIA_NOFS" since="3" />
+		<field name="ACTION_MEDIA_REMOVED" />
+		<field name="ACTION_MEDIA_SCANNER_FINISHED" />
+		<field name="ACTION_MEDIA_SCANNER_SCAN_FILE" deprecated="29" />
+		<field name="ACTION_MEDIA_SCANNER_STARTED" />
+		<field name="ACTION_MEDIA_SHARED" />
+		<field name="ACTION_MEDIA_UNMOUNTABLE" />
+		<field name="ACTION_MEDIA_UNMOUNTED" />
+		<field name="ACTION_MY_PACKAGE_REPLACED" since="12" />
+		<field name="ACTION_MY_PACKAGE_SUSPENDED" since="28" />
+		<field name="ACTION_MY_PACKAGE_UNSUSPENDED" since="28" />
+		<field name="ACTION_NEW_OUTGOING_CALL" deprecated="29" />
+		<field name="ACTION_OPEN_DOCUMENT" since="19" />
+		<field name="ACTION_OPEN_DOCUMENT_TREE" since="21" />
+		<field name="ACTION_PACKAGES_SUSPENDED" since="24" />
+		<field name="ACTION_PACKAGES_UNSUSPENDED" since="24" />
+		<field name="ACTION_PACKAGE_ADDED" />
+		<field name="ACTION_PACKAGE_CHANGED" />
+		<field name="ACTION_PACKAGE_DATA_CLEARED" since="3" />
+		<field name="ACTION_PACKAGE_FIRST_LAUNCH" since="12" />
+		<field name="ACTION_PACKAGE_FULLY_REMOVED" since="14" />
+		<field name="ACTION_PACKAGE_INSTALL" deprecated="15" />
+		<field name="ACTION_PACKAGE_NEEDS_VERIFICATION" since="14" />
+		<field name="ACTION_PACKAGE_REMOVED" />
+		<field name="ACTION_PACKAGE_REPLACED" since="3" />
+		<field name="ACTION_PACKAGE_RESTARTED" />
+		<field name="ACTION_PACKAGE_VERIFIED" since="17" />
+		<field name="ACTION_PASTE" since="11" />
+		<field name="ACTION_PICK" />
+		<field name="ACTION_PICK_ACTIVITY" />
+		<field name="ACTION_POWER_CONNECTED" since="4" />
+		<field name="ACTION_POWER_DISCONNECTED" since="4" />
+		<field name="ACTION_POWER_USAGE_SUMMARY" since="4" />
+		<field name="ACTION_PROCESS_TEXT" since="23" />
+		<field name="ACTION_PROFILE_ACCESSIBLE" since="31" />
+		<field name="ACTION_PROFILE_INACCESSIBLE" since="31" />
+		<field name="ACTION_PROVIDER_CHANGED" />
+		<field name="ACTION_QUICK_CLOCK" since="17" />
+		<field name="ACTION_QUICK_VIEW" since="24" />
+		<field name="ACTION_REBOOT" />
+		<field name="ACTION_RUN" />
+		<field name="ACTION_SCREEN_OFF" />
+		<field name="ACTION_SCREEN_ON" />
+		<field name="ACTION_SEARCH" />
+		<field name="ACTION_SEARCH_LONG_PRESS" since="3" />
+		<field name="ACTION_SEND" />
+		<field name="ACTION_SENDTO" />
+		<field name="ACTION_SEND_MULTIPLE" since="4" />
+		<field name="ACTION_SET_WALLPAPER" />
+		<field name="ACTION_SHOW_APP_INFO" since="24" />
+		<field name="ACTION_SHUTDOWN" since="4" />
+		<field name="ACTION_SYNC" />
+		<field name="ACTION_SYSTEM_TUTORIAL" since="3" />
+		<field name="ACTION_TIMEZONE_CHANGED" />
+		<field name="ACTION_TIME_CHANGED" />
+		<field name="ACTION_TIME_TICK" />
+		<field name="ACTION_TRANSLATE" since="29" />
+		<field name="ACTION_UID_REMOVED" />
+		<field name="ACTION_UMS_CONNECTED" deprecated="15" />
+		<field name="ACTION_UMS_DISCONNECTED" deprecated="15" />
+		<field name="ACTION_UNINSTALL_PACKAGE" since="14" deprecated="29" />
+		<field name="ACTION_USER_BACKGROUND" since="17" />
+		<field name="ACTION_USER_FOREGROUND" since="17" />
+		<field name="ACTION_USER_INITIALIZE" since="17" />
+		<field name="ACTION_USER_PRESENT" since="3" />
+		<field name="ACTION_USER_UNLOCKED" since="24" />
+		<field name="ACTION_VIEW" />
+		<field name="ACTION_VIEW_LOCUS" since="29" />
+		<field name="ACTION_VIEW_PERMISSION_USAGE" since="29" />
+		<field name="ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD" since="31" />
+		<field name="ACTION_VOICE_COMMAND" />
+		<field name="ACTION_WALLPAPER_CHANGED" deprecated="16" />
+		<field name="ACTION_WEB_SEARCH" />
+		<field name="CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET" since="30" />
+		<field name="CATEGORY_ALTERNATIVE" />
+		<field name="CATEGORY_APP_BROWSER" since="15" />
+		<field name="CATEGORY_APP_CALCULATOR" since="15" />
+		<field name="CATEGORY_APP_CALENDAR" since="15" />
+		<field name="CATEGORY_APP_CONTACTS" since="15" />
+		<field name="CATEGORY_APP_EMAIL" since="15" />
+		<field name="CATEGORY_APP_FILES" since="29" />
+		<field name="CATEGORY_APP_GALLERY" since="15" />
+		<field name="CATEGORY_APP_MAPS" since="15" />
+		<field name="CATEGORY_APP_MARKET" since="11" />
+		<field name="CATEGORY_APP_MESSAGING" since="15" />
+		<field name="CATEGORY_APP_MUSIC" since="15" />
+		<field name="CATEGORY_BROWSABLE" />
+		<field name="CATEGORY_CAR_DOCK" since="5" />
+		<field name="CATEGORY_CAR_MODE" since="8" />
+		<field name="CATEGORY_DEFAULT" />
+		<field name="CATEGORY_DESK_DOCK" since="5" />
+		<field name="CATEGORY_DEVELOPMENT_PREFERENCE" />
+		<field name="CATEGORY_EMBED" />
+		<field name="CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST" />
+		<field name="CATEGORY_GADGET" removed="3" />
+		<field name="CATEGORY_HE_DESK_DOCK" since="11" />
+		<field name="CATEGORY_HOME" />
+		<field name="CATEGORY_INFO" since="3" />
+		<field name="CATEGORY_LAUNCHER" />
+		<field name="CATEGORY_LEANBACK_LAUNCHER" since="21" />
+		<field name="CATEGORY_LE_DESK_DOCK" since="11" />
+		<field name="CATEGORY_MONKEY" />
+		<field name="CATEGORY_OPENABLE" />
+		<field name="CATEGORY_PREFERENCE" />
+		<field name="CATEGORY_SAMPLE_CODE" />
+		<field name="CATEGORY_SECONDARY_HOME" since="29" />
+		<field name="CATEGORY_SELECTED_ALTERNATIVE" />
+		<field name="CATEGORY_TAB" />
+		<field name="CATEGORY_TEST" />
+		<field name="CATEGORY_TYPED_OPENABLE" since="26" />
+		<field name="CATEGORY_UNIT_TEST" />
+		<field name="CATEGORY_VOICE" since="23" />
+		<field name="CATEGORY_VR_HOME" since="26" />
+		<field name="CREATOR" />
+		<field name="EXTRA_ALARM_COUNT" />
+		<field name="EXTRA_ALLOW_MULTIPLE" since="18" />
+		<field name="EXTRA_ALLOW_REPLACE" since="14" deprecated="16" />
+		<field name="EXTRA_ALTERNATE_INTENTS" since="23" />
+		<field name="EXTRA_ASSIST_CONTEXT" since="18" />
+		<field name="EXTRA_ASSIST_INPUT_DEVICE_ID" since="23" />
+		<field name="EXTRA_ASSIST_INPUT_HINT_KEYBOARD" since="21" />
+		<field name="EXTRA_ASSIST_PACKAGE" since="18" />
+		<field name="EXTRA_ASSIST_UID" since="23" />
+		<field name="EXTRA_ATTRIBUTION_TAGS" since="31" />
+		<field name="EXTRA_AUTO_LAUNCH_SINGLE_CHOICE" since="29" />
+		<field name="EXTRA_BCC" />
+		<field name="EXTRA_BUG_REPORT" since="14" />
+		<field name="EXTRA_CC" />
+		<field name="EXTRA_CHANGED_COMPONENT_NAME" since="5" deprecated="15" />
+		<field name="EXTRA_CHANGED_COMPONENT_NAME_LIST" since="7" />
+		<field name="EXTRA_CHANGED_PACKAGE_LIST" since="8" />
+		<field name="EXTRA_CHANGED_UID_LIST" since="8" />
+		<field name="EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER" since="23" />
+		<field name="EXTRA_CHOOSER_TARGETS" since="24" />
+		<field name="EXTRA_CHOSEN_COMPONENT" since="22" />
+		<field name="EXTRA_CHOSEN_COMPONENT_INTENT_SENDER" since="22" />
+		<field name="EXTRA_COMPONENT_NAME" since="26" />
+		<field name="EXTRA_CONTENT_ANNOTATIONS" since="26" />
+		<field name="EXTRA_CONTENT_QUERY" since="29" />
+		<field name="EXTRA_DATA_REMOVED" since="3" />
+		<field name="EXTRA_DOCK_STATE" since="5" />
+		<field name="EXTRA_DOCK_STATE_CAR" since="5" />
+		<field name="EXTRA_DOCK_STATE_DESK" since="5" />
+		<field name="EXTRA_DOCK_STATE_HE_DESK" since="11" />
+		<field name="EXTRA_DOCK_STATE_LE_DESK" since="11" />
+		<field name="EXTRA_DOCK_STATE_UNDOCKED" since="5" />
+		<field name="EXTRA_DONT_KILL_APP" />
+		<field name="EXTRA_DURATION_MILLIS" since="29" />
+		<field name="EXTRA_EMAIL" />
+		<field name="EXTRA_END_TIME" since="31" />
+		<field name="EXTRA_EXCLUDE_COMPONENTS" since="24" />
+		<field name="EXTRA_FROM_STORAGE" since="26" />
+		<field name="EXTRA_HTML_TEXT" since="16" />
+		<field name="EXTRA_INDEX" since="24" />
+		<field name="EXTRA_INITIAL_INTENTS" since="5" />
+		<field name="EXTRA_INSTALLER_PACKAGE_NAME" since="14" />
+		<field name="EXTRA_INTENT" />
+		<field name="EXTRA_KEY_EVENT" />
+		<field name="EXTRA_LOCAL_ONLY" since="11" />
+		<field name="EXTRA_LOCUS_ID" since="29" />
+		<field name="EXTRA_MIME_TYPES" since="19" />
+		<field name="EXTRA_NOT_UNKNOWN_SOURCE" since="14" />
+		<field name="EXTRA_ORIGINATING_URI" since="17" />
+		<field name="EXTRA_PACKAGE_NAME" since="24" />
+		<field name="EXTRA_PERMISSION_GROUP_NAME" since="31" />
+		<field name="EXTRA_PHONE_NUMBER" />
+		<field name="EXTRA_PROCESS_TEXT" since="23" />
+		<field name="EXTRA_PROCESS_TEXT_READONLY" since="23" />
+		<field name="EXTRA_QUICK_VIEW_FEATURES" since="26" />
+		<field name="EXTRA_QUIET_MODE" since="24" />
+		<field name="EXTRA_REFERRER" since="17" />
+		<field name="EXTRA_REFERRER_NAME" since="22" />
+		<field name="EXTRA_REMOTE_INTENT_TOKEN" since="5" />
+		<field name="EXTRA_REPLACEMENT_EXTRAS" since="21" />
+		<field name="EXTRA_REPLACING" since="3" />
+		<field name="EXTRA_RESTRICTIONS_BUNDLE" since="18" />
+		<field name="EXTRA_RESTRICTIONS_INTENT" since="18" />
+		<field name="EXTRA_RESTRICTIONS_LIST" since="18" />
+		<field name="EXTRA_RESULT_RECEIVER" since="23" />
+		<field name="EXTRA_RETURN_RESULT" since="14" />
+		<field name="EXTRA_SHORTCUT_ICON" deprecated="26" />
+		<field name="EXTRA_SHORTCUT_ICON_RESOURCE" deprecated="26" />
+		<field name="EXTRA_SHORTCUT_ID" since="29" />
+		<field name="EXTRA_SHORTCUT_INTENT" deprecated="26" />
+		<field name="EXTRA_SHORTCUT_NAME" deprecated="26" />
+		<field name="EXTRA_SHUTDOWN_USERSPACE_ONLY" since="19" />
+		<field name="EXTRA_SPLIT_NAME" since="27" />
+		<field name="EXTRA_START_TIME" since="31" />
+		<field name="EXTRA_STREAM" />
+		<field name="EXTRA_SUBJECT" />
+		<field name="EXTRA_SUSPENDED_PACKAGE_EXTRAS" since="28" />
+		<field name="EXTRA_TEMPLATE" />
+		<field name="EXTRA_TEXT" />
+		<field name="EXTRA_TIME" since="30" />
+		<field name="EXTRA_TIMEZONE" since="30" />
+		<field name="EXTRA_TITLE" />
+		<field name="EXTRA_UID" />
+		<field name="EXTRA_USER" since="21" />
+		<field name="EXTRA_USER_INITIATED" since="31" />
+		<field name="FILL_IN_ACTION" />
+		<field name="FILL_IN_CATEGORIES" />
+		<field name="FILL_IN_CLIP_DATA" since="16" />
+		<field name="FILL_IN_COMPONENT" />
+		<field name="FILL_IN_DATA" />
+		<field name="FILL_IN_IDENTIFIER" since="29" />
+		<field name="FILL_IN_PACKAGE" since="4" />
+		<field name="FILL_IN_SELECTOR" since="15" />
+		<field name="FILL_IN_SOURCE_BOUNDS" since="7" />
+		<field name="FLAG_ACTIVITY_BROUGHT_TO_FRONT" />
+		<field name="FLAG_ACTIVITY_CLEAR_TASK" since="11" />
+		<field name="FLAG_ACTIVITY_CLEAR_TOP" />
+		<field name="FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET" since="3" deprecated="21" />
+		<field name="FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS" />
+		<field name="FLAG_ACTIVITY_FORWARD_RESULT" />
+		<field name="FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY" />
+		<field name="FLAG_ACTIVITY_LAUNCH_ADJACENT" since="24" />
+		<field name="FLAG_ACTIVITY_MATCH_EXTERNAL" since="28" />
+		<field name="FLAG_ACTIVITY_MULTIPLE_TASK" />
+		<field name="FLAG_ACTIVITY_NEW_DOCUMENT" since="21" />
+		<field name="FLAG_ACTIVITY_NEW_TASK" />
+		<field name="FLAG_ACTIVITY_NO_ANIMATION" since="5" />
+		<field name="FLAG_ACTIVITY_NO_HISTORY" />
+		<field name="FLAG_ACTIVITY_NO_USER_ACTION" since="3" />
+		<field name="FLAG_ACTIVITY_PREVIOUS_IS_TOP" />
+		<field name="FLAG_ACTIVITY_REORDER_TO_FRONT" since="3" />
+		<field name="FLAG_ACTIVITY_REQUIRE_DEFAULT" since="30" />
+		<field name="FLAG_ACTIVITY_REQUIRE_NON_BROWSER" since="30" />
+		<field name="FLAG_ACTIVITY_RESET_TASK_IF_NEEDED" />
+		<field name="FLAG_ACTIVITY_RETAIN_IN_RECENTS" since="21" />
+		<field name="FLAG_ACTIVITY_SINGLE_TOP" />
+		<field name="FLAG_ACTIVITY_TASK_ON_HOME" since="11" />
+		<field name="FLAG_DEBUG_LOG_RESOLUTION" />
+		<field name="FLAG_DIRECT_BOOT_AUTO" since="29" />
+		<field name="FLAG_EXCLUDE_STOPPED_PACKAGES" since="12" />
+		<field name="FLAG_FROM_BACKGROUND" />
+		<field name="FLAG_GRANT_PERSISTABLE_URI_PERMISSION" since="19" />
+		<field name="FLAG_GRANT_PREFIX_URI_PERMISSION" since="21" />
+		<field name="FLAG_GRANT_READ_URI_PERMISSION" />
+		<field name="FLAG_GRANT_WRITE_URI_PERMISSION" />
+		<field name="FLAG_INCLUDE_STOPPED_PACKAGES" since="12" />
+		<field name="FLAG_RECEIVER_FOREGROUND" since="16" />
+		<field name="FLAG_RECEIVER_NO_ABORT" since="19" />
+		<field name="FLAG_RECEIVER_REGISTERED_ONLY" />
+		<field name="FLAG_RECEIVER_REPLACE_PENDING" since="8" />
+		<field name="FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS" since="26" />
+		<field name="METADATA_DOCK_HOME" since="5" />
+		<field name="URI_ALLOW_UNSAFE" since="22" />
+		<field name="URI_ANDROID_APP_SCHEME" since="22" />
+		<field name="URI_INTENT_SCHEME" since="4" />
+	</class>
+	<class name="android/content/Intent$FilterComparison" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;)V" />
+		<method name="getIntent()Landroid/content/Intent;" />
+	</class>
+	<class name="android/content/Intent$ShortcutIconResource" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="fromContext(Landroid/content/Context;I)Landroid/content/Intent$ShortcutIconResource;" />
+		<field name="CREATOR" />
+		<field name="packageName" />
+		<field name="resourceName" />
+	</class>
+	<class name="android/content/IntentFilter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/IntentFilter;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="actionsIterator()Ljava/util/Iterator;" />
+		<method name="addAction(Ljava/lang/String;)V" />
+		<method name="addCategory(Ljava/lang/String;)V" />
+		<method name="addDataAuthority(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="addDataPath(Ljava/lang/String;I)V" />
+		<method name="addDataScheme(Ljava/lang/String;)V" />
+		<method name="addDataSchemeSpecificPart(Ljava/lang/String;I)V" since="19" />
+		<method name="addDataType(Ljava/lang/String;)V" />
+		<method name="authoritiesIterator()Ljava/util/Iterator;" />
+		<method name="categoriesIterator()Ljava/util/Iterator;" />
+		<method name="countActions()I" />
+		<method name="countCategories()I" />
+		<method name="countDataAuthorities()I" />
+		<method name="countDataPaths()I" />
+		<method name="countDataSchemeSpecificParts()I" since="19" />
+		<method name="countDataSchemes()I" />
+		<method name="countDataTypes()I" />
+		<method name="create(Ljava/lang/String;Ljava/lang/String;)Landroid/content/IntentFilter;" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getAction(I)Ljava/lang/String;" />
+		<method name="getCategory(I)Ljava/lang/String;" />
+		<method name="getDataAuthority(I)Landroid/content/IntentFilter$AuthorityEntry;" />
+		<method name="getDataPath(I)Landroid/os/PatternMatcher;" />
+		<method name="getDataScheme(I)Ljava/lang/String;" />
+		<method name="getDataSchemeSpecificPart(I)Landroid/os/PatternMatcher;" since="19" />
+		<method name="getDataType(I)Ljava/lang/String;" />
+		<method name="getPriority()I" />
+		<method name="hasAction(Ljava/lang/String;)Z" />
+		<method name="hasCategory(Ljava/lang/String;)Z" />
+		<method name="hasDataAuthority(Landroid/net/Uri;)Z" />
+		<method name="hasDataPath(Ljava/lang/String;)Z" />
+		<method name="hasDataScheme(Ljava/lang/String;)Z" />
+		<method name="hasDataSchemeSpecificPart(Ljava/lang/String;)Z" since="19" />
+		<method name="hasDataType(Ljava/lang/String;)Z" />
+		<method name="match(Landroid/content/ContentResolver;Landroid/content/Intent;ZLjava/lang/String;)I" />
+		<method name="match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;)I" />
+		<method name="matchAction(Ljava/lang/String;)Z" />
+		<method name="matchCategories(Ljava/util/Set;)Ljava/lang/String;" />
+		<method name="matchData(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)I" />
+		<method name="matchDataAuthority(Landroid/net/Uri;)I" />
+		<method name="pathsIterator()Ljava/util/Iterator;" />
+		<method name="readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V" />
+		<method name="schemeSpecificPartsIterator()Ljava/util/Iterator;" since="19" />
+		<method name="schemesIterator()Ljava/util/Iterator;" />
+		<method name="setPriority(I)V" />
+		<method name="typesIterator()Ljava/util/Iterator;" />
+		<method name="writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V" />
+		<field name="CREATOR" />
+		<field name="MATCH_ADJUSTMENT_MASK" />
+		<field name="MATCH_ADJUSTMENT_NORMAL" />
+		<field name="MATCH_CATEGORY_EMPTY" />
+		<field name="MATCH_CATEGORY_HOST" />
+		<field name="MATCH_CATEGORY_MASK" />
+		<field name="MATCH_CATEGORY_PATH" />
+		<field name="MATCH_CATEGORY_PORT" />
+		<field name="MATCH_CATEGORY_SCHEME" />
+		<field name="MATCH_CATEGORY_SCHEME_SPECIFIC_PART" since="19" />
+		<field name="MATCH_CATEGORY_TYPE" />
+		<field name="NO_MATCH_ACTION" />
+		<field name="NO_MATCH_CATEGORY" />
+		<field name="NO_MATCH_DATA" />
+		<field name="NO_MATCH_TYPE" />
+		<field name="SYSTEM_HIGH_PRIORITY" />
+		<field name="SYSTEM_LOW_PRIORITY" />
+	</class>
+	<class name="android/content/IntentFilter$AuthorityEntry" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getHost()Ljava/lang/String;" />
+		<method name="getPort()I" />
+		<method name="match(Landroid/net/Uri;)I" />
+	</class>
+	<class name="android/content/IntentFilter$MalformedMimeTypeException" since="1">
+		<extends name="android/util/AndroidException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/content/IntentSender" since="4">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCreatorPackage()Ljava/lang/String;" since="17" />
+		<method name="getCreatorUid()I" since="17" />
+		<method name="getCreatorUserHandle()Landroid/os/UserHandle;" since="17" />
+		<method name="getTargetPackage()Ljava/lang/String;" since="9" deprecated="17" />
+		<method name="readIntentSenderOrNullFromParcel(Landroid/os/Parcel;)Landroid/content/IntentSender;" />
+		<method name="sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;)V" />
+		<method name="sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V" since="14" />
+		<method name="writeIntentSenderOrNullToParcel(Landroid/content/IntentSender;Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/IntentSender$OnFinished" since="4">
+		<extends name="java/lang/Object" />
+		<method name="onSendFinished(Landroid/content/IntentSender;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/content/IntentSender$SendIntentException" since="4">
+		<extends name="android/util/AndroidException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/content/Loader" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="abandon()V" deprecated="29" />
+		<method name="cancelLoad()Z" since="16" deprecated="29" />
+		<method name="commitContentChanged()V" since="18" deprecated="29" />
+		<method name="dataToString(Ljava/lang/Object;)Ljava/lang/String;" deprecated="29" />
+		<method name="deliverCancellation()V" since="16" deprecated="29" />
+		<method name="deliverResult(Ljava/lang/Object;)V" deprecated="29" />
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29" />
+		<method name="forceLoad()V" deprecated="29" />
+		<method name="getContext()Landroid/content/Context;" deprecated="29" />
+		<method name="getId()I" deprecated="29" />
+		<method name="isAbandoned()Z" deprecated="29" />
+		<method name="isReset()Z" deprecated="29" />
+		<method name="isStarted()Z" deprecated="29" />
+		<method name="onAbandon()V" deprecated="29" />
+		<method name="onCancelLoad()Z" since="16" deprecated="29" />
+		<method name="onContentChanged()V" deprecated="29" />
+		<method name="onForceLoad()V" deprecated="29" />
+		<method name="onReset()V" deprecated="29" />
+		<method name="onStartLoading()V" deprecated="29" />
+		<method name="onStopLoading()V" deprecated="29" />
+		<method name="registerListener(ILandroid/content/Loader$OnLoadCompleteListener;)V" deprecated="29" />
+		<method name="registerOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16" deprecated="29" />
+		<method name="reset()V" deprecated="29" />
+		<method name="rollbackContentChanged()V" since="18" deprecated="29" />
+		<method name="startLoading()V" deprecated="29" />
+		<method name="stopLoading()V" deprecated="29" />
+		<method name="takeContentChanged()Z" deprecated="29" />
+		<method name="unregisterListener(Landroid/content/Loader$OnLoadCompleteListener;)V" deprecated="29" />
+		<method name="unregisterOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16" deprecated="29" />
+	</class>
+	<class name="android/content/Loader$ForceLoadContentObserver" since="11" deprecated="28">
+		<extends name="android/database/ContentObserver" />
+		<method name="&lt;init&gt;(Landroid/content/Loader;)V" deprecated="29" />
+	</class>
+	<class name="android/content/Loader$OnLoadCanceledListener" since="16" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="onLoadCanceled(Landroid/content/Loader;)V" deprecated="29" />
+	</class>
+	<class name="android/content/Loader$OnLoadCompleteListener" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V" deprecated="29" />
+	</class>
+	<class name="android/content/LocusId" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getId()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/MutableContextWrapper" since="1">
+		<extends name="android/content/ContextWrapper" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="setBaseContext(Landroid/content/Context;)V" />
+	</class>
+	<class name="android/content/OperationApplicationException" since="5">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="getNumSuccessfulYieldPoints()I" />
+	</class>
+	<class name="android/content/PeriodicSync" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V" />
+		<field name="CREATOR" />
+		<field name="account" />
+		<field name="authority" />
+		<field name="extras" />
+		<field name="period" />
+	</class>
+	<class name="android/content/QuickViewConstants" since="26">
+		<extends name="java/lang/Object" />
+		<field name="FEATURE_DELETE" since="28" />
+		<field name="FEATURE_DOWNLOAD" />
+		<field name="FEATURE_EDIT" />
+		<field name="FEATURE_PRINT" />
+		<field name="FEATURE_SEND" />
+		<field name="FEATURE_VIEW" />
+	</class>
+	<class name="android/content/ReceiverCallNotAllowedException" since="1">
+		<extends name="android/util/AndroidRuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/content/RestrictionEntry" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" since="21" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" since="21" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[Ljava/lang/String;)V" />
+		<method name="createBundleArrayEntry(Ljava/lang/String;[Landroid/content/RestrictionEntry;)Landroid/content/RestrictionEntry;" since="23" />
+		<method name="createBundleEntry(Ljava/lang/String;[Landroid/content/RestrictionEntry;)Landroid/content/RestrictionEntry;" since="23" />
+		<method name="getAllSelectedStrings()[Ljava/lang/String;" />
+		<method name="getChoiceEntries()[Ljava/lang/String;" />
+		<method name="getChoiceValues()[Ljava/lang/String;" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getIntValue()I" since="21" />
+		<method name="getKey()Ljava/lang/String;" />
+		<method name="getRestrictions()[Landroid/content/RestrictionEntry;" since="23" />
+		<method name="getSelectedState()Z" />
+		<method name="getSelectedString()Ljava/lang/String;" />
+		<method name="getTitle()Ljava/lang/String;" />
+		<method name="getType()I" />
+		<method name="setAllSelectedStrings([Ljava/lang/String;)V" />
+		<method name="setChoiceEntries(Landroid/content/Context;I)V" />
+		<method name="setChoiceEntries([Ljava/lang/String;)V" />
+		<method name="setChoiceValues(Landroid/content/Context;I)V" />
+		<method name="setChoiceValues([Ljava/lang/String;)V" />
+		<method name="setDescription(Ljava/lang/String;)V" />
+		<method name="setIntValue(I)V" since="21" />
+		<method name="setRestrictions([Landroid/content/RestrictionEntry;)V" since="23" />
+		<method name="setSelectedState(Z)V" />
+		<method name="setSelectedString(Ljava/lang/String;)V" />
+		<method name="setTitle(Ljava/lang/String;)V" />
+		<method name="setType(I)V" />
+		<field name="CREATOR" />
+		<field name="TYPE_BOOLEAN" />
+		<field name="TYPE_BUNDLE" since="23" />
+		<field name="TYPE_BUNDLE_ARRAY" since="23" />
+		<field name="TYPE_CHOICE" />
+		<field name="TYPE_INTEGER" since="21" />
+		<field name="TYPE_MULTI_SELECT" />
+		<field name="TYPE_NULL" />
+		<field name="TYPE_STRING" since="21" />
+	</class>
+	<class name="android/content/RestrictionsManager" since="21">
+		<extends name="java/lang/Object" />
+		<method name="convertRestrictionsToBundle(Ljava/util/List;)Landroid/os/Bundle;" since="23" />
+		<method name="createLocalApprovalIntent()Landroid/content/Intent;" />
+		<method name="getApplicationRestrictions()Landroid/os/Bundle;" />
+		<method name="getManifestRestrictions(Ljava/lang/String;)Ljava/util/List;" />
+		<method name="hasRestrictionsProvider()Z" />
+		<method name="notifyPermissionResponse(Ljava/lang/String;Landroid/os/PersistableBundle;)V" />
+		<method name="requestPermission(Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)V" />
+		<field name="ACTION_PERMISSION_RESPONSE_RECEIVED" />
+		<field name="ACTION_REQUEST_LOCAL_APPROVAL" />
+		<field name="ACTION_REQUEST_PERMISSION" />
+		<field name="EXTRA_PACKAGE_NAME" />
+		<field name="EXTRA_REQUEST_BUNDLE" />
+		<field name="EXTRA_REQUEST_ID" />
+		<field name="EXTRA_REQUEST_TYPE" />
+		<field name="EXTRA_RESPONSE_BUNDLE" />
+		<field name="META_DATA_APP_RESTRICTIONS" />
+		<field name="REQUEST_KEY_APPROVE_LABEL" />
+		<field name="REQUEST_KEY_DATA" />
+		<field name="REQUEST_KEY_DENY_LABEL" />
+		<field name="REQUEST_KEY_ICON" />
+		<field name="REQUEST_KEY_ID" />
+		<field name="REQUEST_KEY_MESSAGE" />
+		<field name="REQUEST_KEY_NEW_REQUEST" />
+		<field name="REQUEST_KEY_TITLE" />
+		<field name="REQUEST_TYPE_APPROVAL" />
+		<field name="RESPONSE_KEY_ERROR_CODE" />
+		<field name="RESPONSE_KEY_MESSAGE" />
+		<field name="RESPONSE_KEY_RESPONSE_TIMESTAMP" />
+		<field name="RESPONSE_KEY_RESULT" />
+		<field name="RESULT_APPROVED" />
+		<field name="RESULT_DENIED" />
+		<field name="RESULT_ERROR" />
+		<field name="RESULT_ERROR_BAD_REQUEST" />
+		<field name="RESULT_ERROR_INTERNAL" />
+		<field name="RESULT_ERROR_NETWORK" />
+		<field name="RESULT_NO_RESPONSE" />
+		<field name="RESULT_UNKNOWN_REQUEST" />
+	</class>
+	<class name="android/content/SearchRecentSuggestionsProvider" since="1">
+		<extends name="android/content/ContentProvider" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setupSuggestions(Ljava/lang/String;I)V" />
+		<field name="DATABASE_MODE_2LINES" />
+		<field name="DATABASE_MODE_QUERIES" />
+	</class>
+	<class name="android/content/ServiceConnection" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onBindingDied(Landroid/content/ComponentName;)V" since="26" />
+		<method name="onNullBinding(Landroid/content/ComponentName;)V" since="28" />
+		<method name="onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V" />
+		<method name="onServiceDisconnected(Landroid/content/ComponentName;)V" />
+	</class>
+	<class name="android/content/SharedPreferences" since="1">
+		<extends name="java/lang/Object" />
+		<method name="contains(Ljava/lang/String;)Z" />
+		<method name="edit()Landroid/content/SharedPreferences$Editor;" />
+		<method name="getAll()Ljava/util/Map;" />
+		<method name="getBoolean(Ljava/lang/String;Z)Z" />
+		<method name="getFloat(Ljava/lang/String;F)F" />
+		<method name="getInt(Ljava/lang/String;I)I" />
+		<method name="getLong(Ljava/lang/String;J)J" />
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;" since="11" />
+		<method name="registerOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V" />
+		<method name="unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V" />
+	</class>
+	<class name="android/content/SharedPreferences$Editor" since="1">
+		<extends name="java/lang/Object" />
+		<method name="apply()V" since="9" />
+		<method name="clear()Landroid/content/SharedPreferences$Editor;" />
+		<method name="commit()Z" />
+		<method name="putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;" />
+		<method name="putFloat(Ljava/lang/String;F)Landroid/content/SharedPreferences$Editor;" />
+		<method name="putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;" />
+		<method name="putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;" />
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;" />
+		<method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)Landroid/content/SharedPreferences$Editor;" since="11" />
+		<method name="remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;" />
+	</class>
+	<class name="android/content/SharedPreferences$OnSharedPreferenceChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/content/SyncAdapterType" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ZZ)V" />
+		<method name="allowParallelSyncs()Z" since="11" />
+		<method name="getSettingsActivity()Ljava/lang/String;" since="14" />
+		<method name="isAlwaysSyncable()Z" since="11" />
+		<method name="isUserVisible()Z" />
+		<method name="newKey(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SyncAdapterType;" />
+		<method name="supportsUploading()Z" />
+		<field name="CREATOR" />
+		<field name="accountType" />
+		<field name="authority" />
+		<field name="isKey" />
+	</class>
+	<class name="android/content/SyncContext" since="5">
+		<extends name="java/lang/Object" />
+		<method name="getSyncContextBinder()Landroid/os/IBinder;" />
+		<method name="onFinished(Landroid/content/SyncResult;)V" />
+	</class>
+	<class name="android/content/SyncInfo" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="11" />
+		<field name="account" />
+		<field name="authority" />
+		<field name="startTime" />
+	</class>
+	<class name="android/content/SyncRequest" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/SyncRequest$Builder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/content/SyncRequest;" />
+		<method name="setDisallowMetered(Z)Landroid/content/SyncRequest$Builder;" />
+		<method name="setExpedited(Z)Landroid/content/SyncRequest$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/content/SyncRequest$Builder;" />
+		<method name="setIgnoreBackoff(Z)Landroid/content/SyncRequest$Builder;" />
+		<method name="setIgnoreSettings(Z)Landroid/content/SyncRequest$Builder;" />
+		<method name="setManual(Z)Landroid/content/SyncRequest$Builder;" />
+		<method name="setNoRetry(Z)Landroid/content/SyncRequest$Builder;" />
+		<method name="setRequiresCharging(Z)Landroid/content/SyncRequest$Builder;" since="24" />
+		<method name="setScheduleAsExpeditedJob(Z)Landroid/content/SyncRequest$Builder;" since="31" />
+		<method name="setSyncAdapter(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncRequest$Builder;" />
+		<method name="syncOnce()Landroid/content/SyncRequest$Builder;" />
+		<method name="syncPeriodic(JJ)Landroid/content/SyncRequest$Builder;" />
+	</class>
+	<class name="android/content/SyncResult" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clear()V" />
+		<method name="hasError()Z" />
+		<method name="hasHardError()Z" />
+		<method name="hasSoftError()Z" />
+		<method name="madeSomeProgress()Z" />
+		<method name="toDebugString()Ljava/lang/String;" />
+		<field name="ALREADY_IN_PROGRESS" />
+		<field name="CREATOR" />
+		<field name="databaseError" />
+		<field name="delayUntil" since="8" />
+		<field name="fullSyncRequested" />
+		<field name="moreRecordsToGet" />
+		<field name="partialSyncUnavailable" />
+		<field name="stats" />
+		<field name="syncAlreadyInProgress" />
+		<field name="tooManyDeletions" />
+		<field name="tooManyRetries" />
+	</class>
+	<class name="android/content/SyncStats" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="clear()V" />
+		<field name="CREATOR" />
+		<field name="numAuthExceptions" />
+		<field name="numConflictDetectedExceptions" />
+		<field name="numDeletes" />
+		<field name="numEntries" />
+		<field name="numInserts" />
+		<field name="numIoExceptions" />
+		<field name="numParseExceptions" />
+		<field name="numSkippedEntries" />
+		<field name="numUpdates" />
+	</class>
+	<class name="android/content/SyncStatusObserver" since="5">
+		<extends name="java/lang/Object" />
+		<method name="onStatusChanged(I)V" />
+	</class>
+	<class name="android/content/UriMatcher" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="addURI(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="match(Landroid/net/Uri;)I" />
+		<field name="NO_MATCH" />
+	</class>
+	<class name="android/content/UriPermission" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getPersistedTime()J" />
+		<method name="getUri()Landroid/net/Uri;" />
+		<method name="isReadPermission()Z" />
+		<method name="isWritePermission()Z" />
+		<field name="CREATOR" />
+		<field name="INVALID_TIME" />
+	</class>
+	<class name="android/content/pm/ActivityInfo" since="1">
+		<extends name="android/content/pm/ComponentInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/ActivityInfo;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getThemeResource()I" />
+		<field name="COLOR_MODE_DEFAULT" since="26" />
+		<field name="COLOR_MODE_HDR" since="26" />
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT" since="26" />
+		<field name="CONFIG_COLOR_MODE" since="26" />
+		<field name="CONFIG_DENSITY" since="17" />
+		<field name="CONFIG_FONT_SCALE" />
+		<field name="CONFIG_FONT_WEIGHT_ADJUSTMENT" since="31" />
+		<field name="CONFIG_KEYBOARD" />
+		<field name="CONFIG_KEYBOARD_HIDDEN" />
+		<field name="CONFIG_LAYOUT_DIRECTION" since="17" />
+		<field name="CONFIG_LOCALE" />
+		<field name="CONFIG_MCC" />
+		<field name="CONFIG_MNC" />
+		<field name="CONFIG_NAVIGATION" />
+		<field name="CONFIG_ORIENTATION" />
+		<field name="CONFIG_SCREEN_LAYOUT" since="4" />
+		<field name="CONFIG_SCREEN_SIZE" since="13" />
+		<field name="CONFIG_SMALLEST_SCREEN_SIZE" since="13" />
+		<field name="CONFIG_TOUCHSCREEN" />
+		<field name="CONFIG_UI_MODE" since="8" />
+		<field name="CREATOR" />
+		<field name="DOCUMENT_LAUNCH_ALWAYS" since="21" />
+		<field name="DOCUMENT_LAUNCH_INTO_EXISTING" since="21" />
+		<field name="DOCUMENT_LAUNCH_NEVER" since="21" />
+		<field name="DOCUMENT_LAUNCH_NONE" since="21" />
+		<field name="FLAG_ALLOW_TASK_REPARENTING" />
+		<field name="FLAG_ALWAYS_RETAIN_TASK_STATE" />
+		<field name="FLAG_AUTO_REMOVE_FROM_RECENTS" since="21" />
+		<field name="FLAG_CLEAR_TASK_ON_LAUNCH" />
+		<field name="FLAG_ENABLE_VR_MODE" since="24" />
+		<field name="FLAG_EXCLUDE_FROM_RECENTS" />
+		<field name="FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS" since="5" />
+		<field name="FLAG_FINISH_ON_TASK_LAUNCH" />
+		<field name="FLAG_HARDWARE_ACCELERATED" since="11" />
+		<field name="FLAG_IMMERSIVE" since="18" />
+		<field name="FLAG_MULTIPROCESS" />
+		<field name="FLAG_NO_HISTORY" since="3" />
+		<field name="FLAG_PREFER_MINIMAL_POST_PROCESSING" since="30" />
+		<field name="FLAG_RELINQUISH_TASK_IDENTITY" since="21" />
+		<field name="FLAG_RESUME_WHILE_PAUSING" since="21" />
+		<field name="FLAG_SINGLE_USER" since="17" />
+		<field name="FLAG_STATE_NOT_NEEDED" />
+		<field name="LAUNCH_MULTIPLE" />
+		<field name="LAUNCH_SINGLE_INSTANCE" />
+		<field name="LAUNCH_SINGLE_INSTANCE_PER_TASK" since="31" />
+		<field name="LAUNCH_SINGLE_TASK" />
+		<field name="LAUNCH_SINGLE_TOP" />
+		<field name="PERSIST_ACROSS_REBOOTS" since="21" />
+		<field name="PERSIST_NEVER" since="21" />
+		<field name="PERSIST_ROOT_ONLY" since="21" />
+		<field name="SCREEN_ORIENTATION_BEHIND" />
+		<field name="SCREEN_ORIENTATION_FULL_SENSOR" since="9" />
+		<field name="SCREEN_ORIENTATION_FULL_USER" since="18" />
+		<field name="SCREEN_ORIENTATION_LANDSCAPE" />
+		<field name="SCREEN_ORIENTATION_LOCKED" since="18" />
+		<field name="SCREEN_ORIENTATION_NOSENSOR" />
+		<field name="SCREEN_ORIENTATION_PORTRAIT" />
+		<field name="SCREEN_ORIENTATION_REVERSE_LANDSCAPE" since="9" />
+		<field name="SCREEN_ORIENTATION_REVERSE_PORTRAIT" since="9" />
+		<field name="SCREEN_ORIENTATION_SENSOR" />
+		<field name="SCREEN_ORIENTATION_SENSOR_LANDSCAPE" since="9" />
+		<field name="SCREEN_ORIENTATION_SENSOR_PORTRAIT" since="9" />
+		<field name="SCREEN_ORIENTATION_UNSPECIFIED" />
+		<field name="SCREEN_ORIENTATION_USER" />
+		<field name="SCREEN_ORIENTATION_USER_LANDSCAPE" since="18" />
+		<field name="SCREEN_ORIENTATION_USER_PORTRAIT" since="18" />
+		<field name="UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" since="14" />
+		<field name="colorMode" since="26" />
+		<field name="configChanges" />
+		<field name="documentLaunchMode" since="21" />
+		<field name="flags" />
+		<field name="launchMode" />
+		<field name="maxRecents" since="21" />
+		<field name="parentActivityName" since="16" />
+		<field name="permission" />
+		<field name="persistableMode" since="21" />
+		<field name="screenOrientation" />
+		<field name="softInputMode" since="3" />
+		<field name="targetActivity" />
+		<field name="taskAffinity" />
+		<field name="theme" />
+		<field name="uiOptions" since="14" />
+		<field name="windowLayout" since="24" />
+	</class>
+	<class name="android/content/pm/ActivityInfo$WindowLayout" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IFIFIII)V" />
+		<field name="gravity" />
+		<field name="height" />
+		<field name="heightFraction" />
+		<field name="minHeight" />
+		<field name="minWidth" />
+		<field name="width" />
+		<field name="widthFraction" />
+	</class>
+	<class name="android/content/pm/ApkChecksum" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getInstallerCertificate()Ljava/security/cert/Certificate;" />
+		<method name="getInstallerPackageName()Ljava/lang/String;" />
+		<method name="getSplitName()Ljava/lang/String;" />
+		<method name="getType()I" />
+		<method name="getValue()[B" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/ApplicationInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/ApplicationInfo;)V" />
+		<method name="areAttributionsUserVisible()Z" since="31" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getCategoryTitle(Landroid/content/Context;I)Ljava/lang/CharSequence;" since="26" />
+		<method name="getGwpAsanMode()I" since="30" />
+		<method name="getMemtagMode()I" since="31" />
+		<method name="getNativeHeapZeroInitialized()I" since="31" />
+		<method name="getRequestRawExternalStorageAccess()I" since="31" />
+		<method name="isProfileable()Z" since="31" />
+		<method name="isProfileableByShell()Z" since="29" />
+		<method name="isResourceOverlay()Z" since="29" />
+		<method name="isVirtualPreload()Z" since="27" />
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<field name="CATEGORY_ACCESSIBILITY" since="31" />
+		<field name="CATEGORY_AUDIO" since="26" />
+		<field name="CATEGORY_GAME" since="26" />
+		<field name="CATEGORY_IMAGE" since="26" />
+		<field name="CATEGORY_MAPS" since="26" />
+		<field name="CATEGORY_NEWS" since="26" />
+		<field name="CATEGORY_PRODUCTIVITY" since="26" />
+		<field name="CATEGORY_SOCIAL" since="26" />
+		<field name="CATEGORY_UNDEFINED" since="26" />
+		<field name="CATEGORY_VIDEO" since="26" />
+		<field name="CREATOR" />
+		<field name="FLAG_ALLOW_BACKUP" since="8" />
+		<field name="FLAG_ALLOW_CLEAR_USER_DATA" />
+		<field name="FLAG_ALLOW_TASK_REPARENTING" />
+		<field name="FLAG_DEBUGGABLE" />
+		<field name="FLAG_EXTERNAL_STORAGE" since="8" />
+		<field name="FLAG_EXTRACT_NATIVE_LIBS" since="23" />
+		<field name="FLAG_FACTORY_TEST" />
+		<field name="FLAG_FULL_BACKUP_ONLY" since="21" />
+		<field name="FLAG_HARDWARE_ACCELERATED" since="23" />
+		<field name="FLAG_HAS_CODE" />
+		<field name="FLAG_INSTALLED" since="17" />
+		<field name="FLAG_IS_DATA_ONLY" since="17" />
+		<field name="FLAG_IS_GAME" since="21" deprecated="26" />
+		<field name="FLAG_KILL_AFTER_RESTORE" since="8" />
+		<field name="FLAG_LARGE_HEAP" since="11" />
+		<field name="FLAG_MULTIARCH" since="21" />
+		<field name="FLAG_PERSISTENT" />
+		<field name="FLAG_RESIZEABLE_FOR_SCREENS" since="4" />
+		<field name="FLAG_RESTORE_ANY_VERSION" since="8" />
+		<field name="FLAG_STOPPED" since="12" />
+		<field name="FLAG_SUPPORTS_LARGE_SCREENS" since="4" />
+		<field name="FLAG_SUPPORTS_NORMAL_SCREENS" since="4" />
+		<field name="FLAG_SUPPORTS_RTL" since="17" />
+		<field name="FLAG_SUPPORTS_SCREEN_DENSITIES" since="4" deprecated="30" />
+		<field name="FLAG_SUPPORTS_SMALL_SCREENS" since="4" />
+		<field name="FLAG_SUPPORTS_XLARGE_SCREENS" since="11" />
+		<field name="FLAG_SUSPENDED" since="24" />
+		<field name="FLAG_SYSTEM" />
+		<field name="FLAG_TEST_ONLY" since="4" />
+		<field name="FLAG_UPDATED_SYSTEM_APP" since="4" />
+		<field name="FLAG_USES_CLEARTEXT_TRAFFIC" since="23" />
+		<field name="FLAG_VM_SAFE_MODE" since="8" />
+		<field name="GWP_ASAN_ALWAYS" since="30" />
+		<field name="GWP_ASAN_DEFAULT" since="30" />
+		<field name="GWP_ASAN_NEVER" since="30" />
+		<field name="MEMTAG_ASYNC" since="31" />
+		<field name="MEMTAG_DEFAULT" since="31" />
+		<field name="MEMTAG_OFF" since="31" />
+		<field name="MEMTAG_SYNC" since="31" />
+		<field name="RAW_EXTERNAL_STORAGE_ACCESS_DEFAULT" since="31" />
+		<field name="RAW_EXTERNAL_STORAGE_ACCESS_NOT_REQUESTED" since="31" />
+		<field name="RAW_EXTERNAL_STORAGE_ACCESS_REQUESTED" since="31" />
+		<field name="ZEROINIT_DEFAULT" since="31" />
+		<field name="ZEROINIT_DISABLED" since="31" />
+		<field name="ZEROINIT_ENABLED" since="31" />
+		<field name="appComponentFactory" since="28" />
+		<field name="backupAgentName" since="8" />
+		<field name="category" since="26" />
+		<field name="className" />
+		<field name="compatibleWidthLimitDp" since="13" />
+		<field name="compileSdkVersion" since="31" />
+		<field name="compileSdkVersionCodename" since="31" />
+		<field name="dataDir" />
+		<field name="descriptionRes" />
+		<field name="deviceProtectedDataDir" since="24" />
+		<field name="enabled" />
+		<field name="flags" />
+		<field name="largestWidthLimitDp" since="13" />
+		<field name="manageSpaceActivityName" />
+		<field name="minSdkVersion" since="24" />
+		<field name="nativeLibraryDir" since="9" />
+		<field name="permission" />
+		<field name="processName" />
+		<field name="publicSourceDir" />
+		<field name="requiresSmallestWidthDp" since="13" />
+		<field name="sharedLibraryFiles" />
+		<field name="sourceDir" />
+		<field name="splitNames" since="26" />
+		<field name="splitPublicSourceDirs" since="21" />
+		<field name="splitSourceDirs" since="21" />
+		<field name="storageUuid" since="26" />
+		<field name="targetSdkVersion" since="4" />
+		<field name="taskAffinity" />
+		<field name="theme" />
+		<field name="uiOptions" since="14" />
+		<field name="uid" />
+	</class>
+	<class name="android/content/pm/ApplicationInfo$DisplayNameComparator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Comparator" />
+		<method name="&lt;init&gt;(Landroid/content/pm/PackageManager;)V" />
+		<method name="compare(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;)I" />
+	</class>
+	<class name="android/content/pm/Attribution" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getLabel()I" />
+		<method name="getTag()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/ChangedPackages" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ILjava/util/List;)V" />
+		<method name="getPackageNames()Ljava/util/List;" />
+		<method name="getSequenceNumber()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/Checksum" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I[B)V" />
+		<method name="getType()I" />
+		<method name="getValue()[B" />
+		<field name="CREATOR" />
+		<field name="TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256" />
+		<field name="TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512" />
+		<field name="TYPE_WHOLE_MD5" deprecated="31" />
+		<field name="TYPE_WHOLE_MERKLE_ROOT_4K_SHA256" />
+		<field name="TYPE_WHOLE_SHA1" deprecated="31" />
+		<field name="TYPE_WHOLE_SHA256" deprecated="31" />
+		<field name="TYPE_WHOLE_SHA512" deprecated="31" />
+	</class>
+	<class name="android/content/pm/ComponentInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/ComponentInfo;)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getBannerResource()I" since="20" />
+		<method name="getIconResource()I" />
+		<method name="getLogoResource()I" since="19" />
+		<method name="isEnabled()Z" since="11" />
+		<field name="applicationInfo" />
+		<field name="attributionTags" since="31" />
+		<field name="descriptionRes" since="8" />
+		<field name="directBootAware" since="24" />
+		<field name="enabled" />
+		<field name="exported" />
+		<field name="processName" />
+		<field name="splitName" since="26" />
+	</class>
+	<class name="android/content/pm/ConfigurationInfo" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/ConfigurationInfo;)V" />
+		<method name="getGlEsVersion()Ljava/lang/String;" since="4" />
+		<field name="CREATOR" />
+		<field name="GL_ES_VERSION_UNDEFINED" since="4" />
+		<field name="INPUT_FEATURE_FIVE_WAY_NAV" />
+		<field name="INPUT_FEATURE_HARD_KEYBOARD" />
+		<field name="reqGlEsVersion" since="4" />
+		<field name="reqInputFeatures" />
+		<field name="reqKeyboardType" />
+		<field name="reqNavigation" />
+		<field name="reqTouchScreen" />
+	</class>
+	<class name="android/content/pm/CrossProfileApps" since="28">
+		<extends name="java/lang/Object" />
+		<method name="canInteractAcrossProfiles()Z" since="30" />
+		<method name="canRequestInteractAcrossProfiles()Z" since="30" />
+		<method name="createRequestInteractAcrossProfilesIntent()Landroid/content/Intent;" since="30" />
+		<method name="getProfileSwitchingIconDrawable(Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;" />
+		<method name="getProfileSwitchingLabel(Landroid/os/UserHandle;)Ljava/lang/CharSequence;" />
+		<method name="getTargetUserProfiles()Ljava/util/List;" />
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/app/Activity;)V" since="30" />
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/app/Activity;Landroid/os/Bundle;)V" since="30" />
+		<method name="startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;)V" />
+		<field name="ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED" since="30" />
+	</class>
+	<class name="android/content/pm/FeatureGroupInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/FeatureGroupInfo;)V" />
+		<field name="CREATOR" />
+		<field name="features" />
+	</class>
+	<class name="android/content/pm/FeatureInfo" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/FeatureInfo;)V" />
+		<method name="getGlEsVersion()Ljava/lang/String;" />
+		<field name="CREATOR" />
+		<field name="FLAG_REQUIRED" />
+		<field name="GL_ES_VERSION_UNDEFINED" />
+		<field name="flags" />
+		<field name="name" />
+		<field name="reqGlEsVersion" />
+		<field name="version" since="24" />
+	</class>
+	<class name="android/content/pm/IPackageInstallObserver" since="1" removed="4">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/IInterface" />
+		<method name="packageInstalled(Ljava/lang/String;I)V" />
+	</class>
+	<class name="android/content/pm/IPackageInstallObserver$Stub" since="1" removed="4">
+		<extends name="android/os/Binder" />
+		<implements name="android/content/pm/IPackageInstallObserver" />
+		<method name="&lt;init&gt;()V" />
+		<method name="asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallObserver;" />
+	</class>
+	<class name="android/content/pm/InstallSourceInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getInitiatingPackageName()Ljava/lang/String;" />
+		<method name="getInitiatingPackageSigningInfo()Landroid/content/pm/SigningInfo;" />
+		<method name="getInstallingPackageName()Ljava/lang/String;" />
+		<method name="getOriginatingPackageName()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/InstrumentationInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/InstrumentationInfo;)V" />
+		<field name="CREATOR" />
+		<field name="dataDir" />
+		<field name="functionalTest" />
+		<field name="handleProfiling" />
+		<field name="publicSourceDir" />
+		<field name="sourceDir" />
+		<field name="splitNames" since="26" />
+		<field name="splitPublicSourceDirs" since="21" />
+		<field name="splitSourceDirs" since="21" />
+		<field name="targetPackage" />
+		<field name="targetProcesses" since="26" />
+	</class>
+	<class name="android/content/pm/LabeledIntent" since="5">
+		<extends name="android/content/Intent" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;Ljava/lang/String;II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/CharSequence;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;II)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/CharSequence;I)V" />
+		<method name="getIconResource()I" />
+		<method name="getLabelResource()I" />
+		<method name="getNonLocalizedLabel()Ljava/lang/CharSequence;" />
+		<method name="getSourcePackage()Ljava/lang/String;" />
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/LauncherActivityInfo" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getActivityInfo()Landroid/content/pm/ActivityInfo;" since="31" />
+		<method name="getApplicationInfo()Landroid/content/pm/ApplicationInfo;" />
+		<method name="getBadgedIcon(I)Landroid/graphics/drawable/Drawable;" />
+		<method name="getComponentName()Landroid/content/ComponentName;" />
+		<method name="getFirstInstallTime()J" />
+		<method name="getIcon(I)Landroid/graphics/drawable/Drawable;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getLoadingProgress()F" since="31" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getUser()Landroid/os/UserHandle;" />
+	</class>
+	<class name="android/content/pm/LauncherApps" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" />
+		<method name="getAllPackageInstallerSessions()Ljava/util/List;" since="29" />
+		<method name="getApplicationInfo(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;" since="26" />
+		<method name="getPinItemRequest(Landroid/content/Intent;)Landroid/content/pm/LauncherApps$PinItemRequest;" since="26" />
+		<method name="getProfiles()Ljava/util/List;" since="26" />
+		<method name="getShortcutBadgedIconDrawable(Landroid/content/pm/ShortcutInfo;I)Landroid/graphics/drawable/Drawable;" since="25" />
+		<method name="getShortcutConfigActivityIntent(Landroid/content/pm/LauncherActivityInfo;)Landroid/content/IntentSender;" since="26" />
+		<method name="getShortcutConfigActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26" />
+		<method name="getShortcutIconDrawable(Landroid/content/pm/ShortcutInfo;I)Landroid/graphics/drawable/Drawable;" since="25" />
+		<method name="getShortcutIntent(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;" since="31" />
+		<method name="getShortcuts(Landroid/content/pm/LauncherApps$ShortcutQuery;Landroid/os/UserHandle;)Ljava/util/List;" since="25" />
+		<method name="getSuspendedPackageLauncherExtras(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;" since="28" />
+		<method name="hasShortcutHostPermission()Z" since="25" />
+		<method name="isActivityEnabled(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z" />
+		<method name="isPackageEnabled(Ljava/lang/String;Landroid/os/UserHandle;)Z" />
+		<method name="pinShortcuts(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V" since="25" />
+		<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;)V" />
+		<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;Landroid/os/Handler;)V" />
+		<method name="registerPackageInstallerSessionCallback(Ljava/util/concurrent/Executor;Landroid/content/pm/PackageInstaller$SessionCallback;)V" since="29" />
+		<method name="resolveActivity(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/LauncherActivityInfo;" />
+		<method name="shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z" since="29" />
+		<method name="startAppDetailsActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V" />
+		<method name="startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V" />
+		<method name="startPackageInstallerSessionDetailsActivity(Landroid/content/pm/PackageInstaller$SessionInfo;Landroid/graphics/Rect;Landroid/os/Bundle;)V" since="29" />
+		<method name="startShortcut(Landroid/content/pm/ShortcutInfo;Landroid/graphics/Rect;Landroid/os/Bundle;)V" since="25" />
+		<method name="startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V" since="25" />
+		<method name="unregisterCallback(Landroid/content/pm/LauncherApps$Callback;)V" />
+		<method name="unregisterPackageInstallerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V" since="29" />
+		<field name="ACTION_CONFIRM_PIN_APPWIDGET" since="26" />
+		<field name="ACTION_CONFIRM_PIN_SHORTCUT" since="26" />
+		<field name="EXTRA_PIN_ITEM_REQUEST" since="26" />
+	</class>
+	<class name="android/content/pm/LauncherApps$Callback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onPackageAdded(Ljava/lang/String;Landroid/os/UserHandle;)V" />
+		<method name="onPackageChanged(Ljava/lang/String;Landroid/os/UserHandle;)V" />
+		<method name="onPackageLoadingProgressChanged(Ljava/lang/String;Landroid/os/UserHandle;F)V" since="31" />
+		<method name="onPackageRemoved(Ljava/lang/String;Landroid/os/UserHandle;)V" />
+		<method name="onPackagesAvailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V" />
+		<method name="onPackagesSuspended([Ljava/lang/String;Landroid/os/UserHandle;)V" since="24" />
+		<method name="onPackagesSuspended([Ljava/lang/String;Landroid/os/UserHandle;Landroid/os/Bundle;)V" since="28" deprecated="30" />
+		<method name="onPackagesUnavailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V" />
+		<method name="onPackagesUnsuspended([Ljava/lang/String;Landroid/os/UserHandle;)V" since="24" />
+		<method name="onShortcutsChanged(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V" since="25" />
+	</class>
+	<class name="android/content/pm/LauncherApps$PinItemRequest" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="accept()Z" />
+		<method name="accept(Landroid/os/Bundle;)Z" />
+		<method name="getAppWidgetProviderInfo(Landroid/content/Context;)Landroid/appwidget/AppWidgetProviderInfo;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getRequestType()I" />
+		<method name="getShortcutInfo()Landroid/content/pm/ShortcutInfo;" />
+		<method name="isValid()Z" />
+		<field name="CREATOR" />
+		<field name="REQUEST_TYPE_APPWIDGET" />
+		<field name="REQUEST_TYPE_SHORTCUT" />
+	</class>
+	<class name="android/content/pm/LauncherApps$ShortcutQuery" since="25">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setActivity(Landroid/content/ComponentName;)Landroid/content/pm/LauncherApps$ShortcutQuery;" />
+		<method name="setChangedSince(J)Landroid/content/pm/LauncherApps$ShortcutQuery;" />
+		<method name="setLocusIds(Ljava/util/List;)Landroid/content/pm/LauncherApps$ShortcutQuery;" since="30" />
+		<method name="setPackage(Ljava/lang/String;)Landroid/content/pm/LauncherApps$ShortcutQuery;" />
+		<method name="setQueryFlags(I)Landroid/content/pm/LauncherApps$ShortcutQuery;" />
+		<method name="setShortcutIds(Ljava/util/List;)Landroid/content/pm/LauncherApps$ShortcutQuery;" />
+		<field name="FLAG_GET_KEY_FIELDS_ONLY" />
+		<field name="FLAG_MATCH_CACHED" since="30" />
+		<field name="FLAG_MATCH_DYNAMIC" />
+		<field name="FLAG_MATCH_MANIFEST" />
+		<field name="FLAG_MATCH_PINNED" />
+		<field name="FLAG_MATCH_PINNED_BY_ANY_LAUNCHER" since="28" />
+	</class>
+	<class name="android/content/pm/ModuleInfo" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="isHidden()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/PackageInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getLongVersionCode()J" since="28" />
+		<method name="setLongVersionCode(J)V" since="28" />
+		<field name="CREATOR" />
+		<field name="INSTALL_LOCATION_AUTO" since="21" />
+		<field name="INSTALL_LOCATION_INTERNAL_ONLY" since="21" />
+		<field name="INSTALL_LOCATION_PREFER_EXTERNAL" since="21" />
+		<field name="REQUESTED_PERMISSION_GRANTED" since="16" />
+		<field name="REQUESTED_PERMISSION_NEVER_FOR_LOCATION" since="31" />
+		<field name="REQUESTED_PERMISSION_REQUIRED" since="16" removed="23" />
+		<field name="activities" />
+		<field name="applicationInfo" />
+		<field name="attributions" since="31" />
+		<field name="baseRevisionCode" since="22" />
+		<field name="configPreferences" since="3" />
+		<field name="featureGroups" since="21" />
+		<field name="firstInstallTime" since="9" />
+		<field name="gids" />
+		<field name="installLocation" since="21" />
+		<field name="instrumentation" />
+		<field name="isApex" since="29" />
+		<field name="lastUpdateTime" since="9" />
+		<field name="packageName" />
+		<field name="permissions" />
+		<field name="providers" />
+		<field name="receivers" />
+		<field name="reqFeatures" since="5" />
+		<field name="requestedPermissions" />
+		<field name="requestedPermissionsFlags" since="16" />
+		<field name="services" />
+		<field name="sharedUserId" since="3" />
+		<field name="sharedUserLabel" since="3" />
+		<field name="signatures" deprecated="28" />
+		<field name="signingInfo" since="28" />
+		<field name="splitNames" since="21" />
+		<field name="splitRevisionCodes" since="22" />
+		<field name="versionCode" deprecated="28" />
+		<field name="versionName" />
+	</class>
+	<class name="android/content/pm/PackageInstaller" since="21">
+		<extends name="java/lang/Object" />
+		<method name="abandonSession(I)V" />
+		<method name="createSession(Landroid/content/pm/PackageInstaller$SessionParams;)I" />
+		<method name="getActiveStagedSession()Landroid/content/pm/PackageInstaller$SessionInfo;" since="29" deprecated="30" />
+		<method name="getActiveStagedSessions()Ljava/util/List;" since="30" />
+		<method name="getAllSessions()Ljava/util/List;" />
+		<method name="getMySessions()Ljava/util/List;" />
+		<method name="getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;" />
+		<method name="getStagedSessions()Ljava/util/List;" since="29" />
+		<method name="installExistingPackage(Ljava/lang/String;ILandroid/content/IntentSender;)V" since="29" />
+		<method name="openSession(I)Landroid/content/pm/PackageInstaller$Session;" />
+		<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V" />
+		<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;Landroid/os/Handler;)V" />
+		<method name="uninstall(Landroid/content/pm/VersionedPackage;Landroid/content/IntentSender;)V" since="26" />
+		<method name="uninstall(Ljava/lang/String;Landroid/content/IntentSender;)V" />
+		<method name="uninstallExistingPackage(Ljava/lang/String;Landroid/content/IntentSender;)V" since="31" />
+		<method name="unregisterSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V" />
+		<method name="updateSessionAppIcon(ILandroid/graphics/Bitmap;)V" />
+		<method name="updateSessionAppLabel(ILjava/lang/CharSequence;)V" />
+		<field name="ACTION_SESSION_COMMITTED" since="26" />
+		<field name="ACTION_SESSION_DETAILS" />
+		<field name="ACTION_SESSION_UPDATED" since="29" />
+		<field name="EXTRA_OTHER_PACKAGE_NAME" />
+		<field name="EXTRA_PACKAGE_NAME" />
+		<field name="EXTRA_SESSION" since="26" />
+		<field name="EXTRA_SESSION_ID" />
+		<field name="EXTRA_STATUS" />
+		<field name="EXTRA_STATUS_MESSAGE" />
+		<field name="EXTRA_STORAGE_PATH" />
+		<field name="STATUS_FAILURE" />
+		<field name="STATUS_FAILURE_ABORTED" />
+		<field name="STATUS_FAILURE_BLOCKED" />
+		<field name="STATUS_FAILURE_CONFLICT" />
+		<field name="STATUS_FAILURE_INCOMPATIBLE" />
+		<field name="STATUS_FAILURE_INVALID" />
+		<field name="STATUS_FAILURE_STORAGE" />
+		<field name="STATUS_PENDING_USER_ACTION" />
+		<field name="STATUS_SUCCESS" />
+	</class>
+	<class name="android/content/pm/PackageInstaller$Session" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="abandon()V" />
+		<method name="addChildSessionId(I)V" since="29" />
+		<method name="commit(Landroid/content/IntentSender;)V" />
+		<method name="fsync(Ljava/io/OutputStream;)V" />
+		<method name="getChildSessionIds()[I" since="29" />
+		<method name="getNames()[Ljava/lang/String;" />
+		<method name="getParentSessionId()I" since="29" />
+		<method name="isMultiPackage()Z" since="29" />
+		<method name="isStaged()Z" since="29" />
+		<method name="openRead(Ljava/lang/String;)Ljava/io/InputStream;" />
+		<method name="openWrite(Ljava/lang/String;JJ)Ljava/io/OutputStream;" />
+		<method name="removeChildSessionId(I)V" since="29" />
+		<method name="removeSplit(Ljava/lang/String;)V" since="24" />
+		<method name="setChecksums(Ljava/lang/String;Ljava/util/List;[B)V" since="31" deprecated="31" />
+		<method name="setStagingProgress(F)V" />
+		<method name="transfer(Ljava/lang/String;)V" since="27" />
+	</class>
+	<class name="android/content/pm/PackageInstaller$SessionCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onActiveChanged(IZ)V" />
+		<method name="onBadgingChanged(I)V" />
+		<method name="onCreated(I)V" />
+		<method name="onFinished(IZ)V" />
+		<method name="onProgressChanged(IF)V" />
+	</class>
+	<class name="android/content/pm/PackageInstaller$SessionInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createDetailsIntent()Landroid/content/Intent;" />
+		<method name="getAppIcon()Landroid/graphics/Bitmap;" />
+		<method name="getAppLabel()Ljava/lang/CharSequence;" />
+		<method name="getAppPackageName()Ljava/lang/String;" />
+		<method name="getChildSessionIds()[I" since="29" />
+		<method name="getCreatedMillis()J" since="30" />
+		<method name="getInstallLocation()I" since="27" />
+		<method name="getInstallReason()I" since="26" />
+		<method name="getInstallerAttributionTag()Ljava/lang/String;" since="31" />
+		<method name="getInstallerPackageName()Ljava/lang/String;" />
+		<method name="getMode()I" since="27" />
+		<method name="getOriginatingUid()I" since="27" />
+		<method name="getOriginatingUri()Landroid/net/Uri;" since="27" />
+		<method name="getParentSessionId()I" since="29" />
+		<method name="getProgress()F" />
+		<method name="getReferrerUri()Landroid/net/Uri;" since="27" />
+		<method name="getRequireUserAction()I" since="31" />
+		<method name="getSessionId()I" />
+		<method name="getSize()J" since="27" />
+		<method name="getStagedSessionErrorCode()I" since="29" />
+		<method name="getStagedSessionErrorMessage()Ljava/lang/String;" since="29" />
+		<method name="getUpdatedMillis()J" since="29" />
+		<method name="getUser()Landroid/os/UserHandle;" since="29" />
+		<method name="hasParentSessionId()Z" since="30" />
+		<method name="isActive()Z" />
+		<method name="isCommitted()Z" since="29" />
+		<method name="isMultiPackage()Z" since="29" />
+		<method name="isSealed()Z" since="26" />
+		<method name="isStaged()Z" since="29" />
+		<method name="isStagedSessionActive()Z" since="30" />
+		<method name="isStagedSessionApplied()Z" since="29" />
+		<method name="isStagedSessionFailed()Z" since="29" />
+		<method name="isStagedSessionReady()Z" since="29" />
+		<field name="CREATOR" />
+		<field name="INVALID_ID" since="29" />
+		<field name="STAGED_SESSION_ACTIVATION_FAILED" since="29" />
+		<field name="STAGED_SESSION_CONFLICT" since="31" />
+		<field name="STAGED_SESSION_NO_ERROR" since="29" />
+		<field name="STAGED_SESSION_UNKNOWN" since="29" />
+		<field name="STAGED_SESSION_VERIFICATION_FAILED" since="29" />
+	</class>
+	<class name="android/content/pm/PackageInstaller$SessionParams" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="setAppIcon(Landroid/graphics/Bitmap;)V" />
+		<method name="setAppLabel(Ljava/lang/CharSequence;)V" />
+		<method name="setAppPackageName(Ljava/lang/String;)V" />
+		<method name="setAutoRevokePermissionsMode(Z)V" since="30" deprecated="31" />
+		<method name="setInstallLocation(I)V" />
+		<method name="setInstallReason(I)V" since="26" />
+		<method name="setInstallScenario(I)V" since="31" />
+		<method name="setMultiPackage()V" since="29" />
+		<method name="setOriginatingUid(I)V" since="24" />
+		<method name="setOriginatingUri(Landroid/net/Uri;)V" />
+		<method name="setReferrerUri(Landroid/net/Uri;)V" />
+		<method name="setRequireUserAction(I)V" since="31" />
+		<method name="setSize(J)V" />
+		<method name="setWhitelistedRestrictedPermissions(Ljava/util/Set;)V" since="29" />
+		<field name="CREATOR" />
+		<field name="MODE_FULL_INSTALL" />
+		<field name="MODE_INHERIT_EXISTING" />
+		<field name="RESTRICTED_PERMISSIONS_ALL" since="29" />
+		<field name="USER_ACTION_NOT_REQUIRED" since="31" />
+		<field name="USER_ACTION_REQUIRED" since="31" />
+		<field name="USER_ACTION_UNSPECIFIED" since="31" />
+	</class>
+	<class name="android/content/pm/PackageItemInfo" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/PackageItemInfo;)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="dumpBack(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="dumpFront(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="loadBanner(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="20" />
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<method name="loadLogo(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="9" />
+		<method name="loadUnbadgedIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="22" />
+		<method name="loadXmlMetaData(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;" />
+		<method name="writeToParcel(Landroid/os/Parcel;I)V" />
+		<field name="banner" since="20" />
+		<field name="icon" />
+		<field name="labelRes" />
+		<field name="logo" since="9" />
+		<field name="metaData" />
+		<field name="name" />
+		<field name="nonLocalizedLabel" />
+		<field name="packageName" />
+	</class>
+	<class name="android/content/pm/PackageItemInfo$DisplayNameComparator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Comparator" />
+		<method name="&lt;init&gt;(Landroid/content/pm/PackageManager;)V" />
+		<method name="compare(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/PackageItemInfo;)I" />
+	</class>
+	<class name="android/content/pm/PackageManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="addPackageToPreferred(Ljava/lang/String;)V" deprecated="15" />
+		<method name="addPermission(Landroid/content/pm/PermissionInfo;)Z" />
+		<method name="addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z" since="8" />
+		<method name="addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V" deprecated="15" />
+		<method name="addWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;I)Z" since="29" />
+		<method name="canRequestPackageInstalls()Z" since="26" />
+		<method name="canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8" />
+		<method name="checkPermission(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="checkSignatures(II)I" since="5" />
+		<method name="checkSignatures(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="clearInstantAppCookie()V" since="26" />
+		<method name="clearPackagePreferredActivities(Ljava/lang/String;)V" deprecated="29" />
+		<method name="currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8" />
+		<method name="extendVerificationTimeout(IIJ)V" since="17" />
+		<method name="getActivityBanner(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" since="20" />
+		<method name="getActivityBanner(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;" since="20" />
+		<method name="getActivityIcon(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" />
+		<method name="getActivityIcon(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;" />
+		<method name="getActivityInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;" />
+		<method name="getActivityLogo(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" since="9" />
+		<method name="getActivityLogo(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;" since="9" />
+		<method name="getAllPermissionGroups(I)Ljava/util/List;" />
+		<method name="getApplicationBanner(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" since="20" />
+		<method name="getApplicationBanner(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="20" />
+		<method name="getApplicationEnabledSetting(Ljava/lang/String;)I" />
+		<method name="getApplicationIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" />
+		<method name="getApplicationIcon(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" />
+		<method name="getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;" />
+		<method name="getApplicationLabel(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;" />
+		<method name="getApplicationLogo(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" since="9" />
+		<method name="getApplicationLogo(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="9" />
+		<method name="getBackgroundPermissionOptionLabel()Ljava/lang/CharSequence;" since="30" />
+		<method name="getChangedPackages(I)Landroid/content/pm/ChangedPackages;" since="26" />
+		<method name="getComponentEnabledSetting(Landroid/content/ComponentName;)I" />
+		<method name="getDefaultActivityIcon()Landroid/graphics/drawable/Drawable;" />
+		<method name="getDrawable(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" />
+		<method name="getGroupOfPlatformPermission(Ljava/lang/String;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="getInstallSourceInfo(Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo;" since="30" />
+		<method name="getInstalledApplications(I)Ljava/util/List;" />
+		<method name="getInstalledModules(I)Ljava/util/List;" since="29" />
+		<method name="getInstalledPackages(I)Ljava/util/List;" />
+		<method name="getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;" since="5" deprecated="30" />
+		<method name="getInstantAppCookie()[B" since="26" />
+		<method name="getInstantAppCookieMaxBytes()I" since="26" />
+		<method name="getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;" />
+		<method name="getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="3" />
+		<method name="getLeanbackLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="21" />
+		<method name="getMimeGroup(Ljava/lang/String;)Ljava/util/Set;" since="30" />
+		<method name="getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;" since="29" />
+		<method name="getNameForUid(I)Ljava/lang/String;" />
+		<method name="getPackageArchiveInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;" />
+		<method name="getPackageGids(Ljava/lang/String;)[I" />
+		<method name="getPackageGids(Ljava/lang/String;I)[I" since="24" />
+		<method name="getPackageInfo(Landroid/content/pm/VersionedPackage;I)Landroid/content/pm/PackageInfo;" since="26" />
+		<method name="getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;" />
+		<method name="getPackageInstaller()Landroid/content/pm/PackageInstaller;" since="21" />
+		<method name="getPackageUid(Ljava/lang/String;I)I" since="24" />
+		<method name="getPackagesForUid(I)[Ljava/lang/String;" />
+		<method name="getPackagesHoldingPermissions([Ljava/lang/String;I)Ljava/util/List;" since="18" />
+		<method name="getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;" />
+		<method name="getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;" />
+		<method name="getPlatformPermissionsForGroup(Ljava/lang/String;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I" deprecated="29" />
+		<method name="getPreferredPackages(I)Ljava/util/List;" deprecated="29" />
+		<method name="getProperty(Ljava/lang/String;Landroid/content/ComponentName;)Landroid/content/pm/PackageManager$Property;" since="31" />
+		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/PackageManager$Property;" since="31" />
+		<method name="getProviderInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ProviderInfo;" since="9" />
+		<method name="getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;" />
+		<method name="getResourcesForActivity(Landroid/content/ComponentName;)Landroid/content/res/Resources;" />
+		<method name="getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;" />
+		<method name="getResourcesForApplication(Landroid/content/pm/ApplicationInfo;Landroid/content/res/Configuration;)Landroid/content/res/Resources;" since="31" />
+		<method name="getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;" />
+		<method name="getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;" />
+		<method name="getSharedLibraries(I)Ljava/util/List;" since="26" />
+		<method name="getSuspendedPackageAppExtras()Landroid/os/Bundle;" since="28" />
+		<method name="getSyntheticAppDetailsActivityEnabled(Ljava/lang/String;)Z" since="29" />
+		<method name="getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;" since="5" />
+		<method name="getSystemSharedLibraryNames()[Ljava/lang/String;" since="3" />
+		<method name="getTargetSdkVersion(Ljava/lang/String;)I" since="31" />
+		<method name="getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;" />
+		<method name="getUserBadgedDrawableForDensity(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;Landroid/graphics/Rect;I)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="getUserBadgedLabel(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence;" since="21" />
+		<method name="getWhitelistedRestrictedPermissions(Ljava/lang/String;I)Ljava/util/Set;" since="29" />
+		<method name="getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;" />
+		<method name="hasSigningCertificate(I[BI)Z" since="28" />
+		<method name="hasSigningCertificate(Ljava/lang/String;[BI)Z" since="28" />
+		<method name="hasSystemFeature(Ljava/lang/String;)Z" since="5" />
+		<method name="hasSystemFeature(Ljava/lang/String;I)Z" since="24" />
+		<method name="installPackage(Landroid/net/Uri;)V" removed="4" />
+		<method name="installPackage(Landroid/net/Uri;Landroid/content/pm/IPackageInstallObserver;I)V" removed="4" />
+		<method name="isAutoRevokeWhitelisted()Z" since="30" />
+		<method name="isAutoRevokeWhitelisted(Ljava/lang/String;)Z" since="30" />
+		<method name="isDefaultApplicationIcon(Landroid/graphics/drawable/Drawable;)Z" since="30" />
+		<method name="isDeviceUpgrading()Z" since="29" />
+		<method name="isInstantApp()Z" since="26" />
+		<method name="isInstantApp(Ljava/lang/String;)Z" since="26" />
+		<method name="isPackageSuspended()Z" since="28" />
+		<method name="isPackageSuspended(Ljava/lang/String;)Z" since="29" />
+		<method name="isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;)Z" since="23" />
+		<method name="isSafeMode()Z" since="3" />
+		<method name="queryActivityProperty(Ljava/lang/String;)Ljava/util/List;" since="31" />
+		<method name="queryApplicationProperty(Ljava/lang/String;)Ljava/util/List;" since="31" />
+		<method name="queryBroadcastReceivers(Landroid/content/Intent;I)Ljava/util/List;" />
+		<method name="queryContentProviders(Ljava/lang/String;II)Ljava/util/List;" />
+		<method name="queryInstrumentation(Ljava/lang/String;I)Ljava/util/List;" />
+		<method name="queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;" />
+		<method name="queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I)Ljava/util/List;" />
+		<method name="queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;" since="19" />
+		<method name="queryIntentServices(Landroid/content/Intent;I)Ljava/util/List;" />
+		<method name="queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;" />
+		<method name="queryProviderProperty(Ljava/lang/String;)Ljava/util/List;" since="31" />
+		<method name="queryReceiverProperty(Ljava/lang/String;)Ljava/util/List;" since="31" />
+		<method name="queryServiceProperty(Ljava/lang/String;)Ljava/util/List;" since="31" />
+		<method name="removePackageFromPreferred(Ljava/lang/String;)V" deprecated="15" />
+		<method name="removePermission(Ljava/lang/String;)V" />
+		<method name="removeWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;I)Z" since="29" />
+		<method name="requestChecksums(Ljava/lang/String;ZILjava/util/List;Landroid/content/pm/PackageManager$OnChecksumsReadyListener;)V" since="31" />
+		<method name="resolveActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;" />
+		<method name="resolveContentProvider(Ljava/lang/String;I)Landroid/content/pm/ProviderInfo;" />
+		<method name="resolveService(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;" />
+		<method name="setApplicationCategoryHint(Ljava/lang/String;I)V" since="26" />
+		<method name="setApplicationEnabledSetting(Ljava/lang/String;II)V" />
+		<method name="setAutoRevokeWhitelisted(Ljava/lang/String;Z)Z" since="30" />
+		<method name="setComponentEnabledSetting(Landroid/content/ComponentName;II)V" />
+		<method name="setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V" since="11" />
+		<method name="setMimeGroup(Ljava/lang/String;Ljava/util/Set;)V" since="30" />
+		<method name="updateInstantAppCookie([B)V" since="26" />
+		<method name="verifyPendingInstall(II)V" since="14" />
+		<field name="CERT_INPUT_RAW_X509" since="28" />
+		<field name="CERT_INPUT_SHA256" since="28" />
+		<field name="COMPONENT_ENABLED_STATE_DEFAULT" />
+		<field name="COMPONENT_ENABLED_STATE_DISABLED" />
+		<field name="COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED" since="18" />
+		<field name="COMPONENT_ENABLED_STATE_DISABLED_USER" since="14" />
+		<field name="COMPONENT_ENABLED_STATE_ENABLED" />
+		<field name="DONT_KILL_APP" />
+		<field name="EXTRA_VERIFICATION_ID" since="14" />
+		<field name="EXTRA_VERIFICATION_RESULT" since="17" />
+		<field name="FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS" since="26" />
+		<field name="FEATURE_APP_WIDGETS" since="18" />
+		<field name="FEATURE_AUDIO_LOW_LATENCY" since="9" />
+		<field name="FEATURE_AUDIO_OUTPUT" since="21" />
+		<field name="FEATURE_AUDIO_PRO" since="23" />
+		<field name="FEATURE_AUTOFILL" since="26" />
+		<field name="FEATURE_AUTOMOTIVE" since="23" />
+		<field name="FEATURE_BACKUP" since="20" />
+		<field name="FEATURE_BLUETOOTH" since="8" />
+		<field name="FEATURE_BLUETOOTH_LE" since="18" />
+		<field name="FEATURE_CAMERA" since="7" />
+		<field name="FEATURE_CAMERA_ANY" since="17" />
+		<field name="FEATURE_CAMERA_AR" since="28" />
+		<field name="FEATURE_CAMERA_AUTOFOCUS" since="7" />
+		<field name="FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING" since="21" />
+		<field name="FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR" since="21" />
+		<field name="FEATURE_CAMERA_CAPABILITY_RAW" since="21" />
+		<field name="FEATURE_CAMERA_CONCURRENT" since="30" />
+		<field name="FEATURE_CAMERA_EXTERNAL" since="20" />
+		<field name="FEATURE_CAMERA_FLASH" since="7" />
+		<field name="FEATURE_CAMERA_FRONT" since="9" />
+		<field name="FEATURE_CAMERA_LEVEL_FULL" since="21" />
+		<field name="FEATURE_CANT_SAVE_STATE" since="28" />
+		<field name="FEATURE_COMPANION_DEVICE_SETUP" since="26" />
+		<field name="FEATURE_CONNECTION_SERVICE" since="21" />
+		<field name="FEATURE_CONSUMER_IR" since="19" />
+		<field name="FEATURE_CONTROLS" since="30" />
+		<field name="FEATURE_DEVICE_ADMIN" since="19" />
+		<field name="FEATURE_EMBEDDED" since="26" />
+		<field name="FEATURE_ETHERNET" since="24" />
+		<field name="FEATURE_FACE" since="29" />
+		<field name="FEATURE_FAKETOUCH" since="11" />
+		<field name="FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT" since="13" />
+		<field name="FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND" since="13" />
+		<field name="FEATURE_FINGERPRINT" since="23" />
+		<field name="FEATURE_FREEFORM_WINDOW_MANAGEMENT" since="24" />
+		<field name="FEATURE_GAMEPAD" since="21" />
+		<field name="FEATURE_HARDWARE_KEYSTORE" since="31" />
+		<field name="FEATURE_HIFI_SENSORS" since="23" />
+		<field name="FEATURE_HOME_SCREEN" since="18" />
+		<field name="FEATURE_IDENTITY_CREDENTIAL_HARDWARE" since="31" />
+		<field name="FEATURE_IDENTITY_CREDENTIAL_HARDWARE_DIRECT_ACCESS" since="31" />
+		<field name="FEATURE_INPUT_METHODS" since="18" />
+		<field name="FEATURE_IPSEC_TUNNELS" since="29" />
+		<field name="FEATURE_IRIS" since="29" />
+		<field name="FEATURE_KEYSTORE_APP_ATTEST_KEY" since="31" />
+		<field name="FEATURE_KEYSTORE_LIMITED_USE_KEY" since="31" />
+		<field name="FEATURE_KEYSTORE_SINGLE_USE_KEY" since="31" />
+		<field name="FEATURE_LEANBACK" since="21" />
+		<field name="FEATURE_LEANBACK_ONLY" since="26" />
+		<field name="FEATURE_LIVE_TV" since="21" />
+		<field name="FEATURE_LIVE_WALLPAPER" since="7" />
+		<field name="FEATURE_LOCATION" since="8" />
+		<field name="FEATURE_LOCATION_GPS" since="8" />
+		<field name="FEATURE_LOCATION_NETWORK" since="8" />
+		<field name="FEATURE_MANAGED_USERS" since="21" />
+		<field name="FEATURE_MICROPHONE" since="8" />
+		<field name="FEATURE_MIDI" since="23" />
+		<field name="FEATURE_NFC" since="9" />
+		<field name="FEATURE_NFC_BEAM" since="29" />
+		<field name="FEATURE_NFC_HOST_CARD_EMULATION" since="19" />
+		<field name="FEATURE_NFC_HOST_CARD_EMULATION_NFCF" since="24" />
+		<field name="FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE" since="29" />
+		<field name="FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC" since="29" />
+		<field name="FEATURE_OPENGLES_DEQP_LEVEL" since="31" />
+		<field name="FEATURE_OPENGLES_EXTENSION_PACK" since="21" />
+		<field name="FEATURE_PC" since="27" />
+		<field name="FEATURE_PICTURE_IN_PICTURE" since="24" />
+		<field name="FEATURE_PRINTING" since="20" />
+		<field name="FEATURE_RAM_LOW" since="27" />
+		<field name="FEATURE_RAM_NORMAL" since="27" />
+		<field name="FEATURE_SCREEN_LANDSCAPE" since="13" />
+		<field name="FEATURE_SCREEN_PORTRAIT" since="13" />
+		<field name="FEATURE_SECURELY_REMOVES_USERS" since="21" />
+		<field name="FEATURE_SECURE_LOCK_SCREEN" since="29" />
+		<field name="FEATURE_SECURITY_MODEL_COMPATIBLE" since="31" />
+		<field name="FEATURE_SENSOR_ACCELEROMETER" since="8" />
+		<field name="FEATURE_SENSOR_AMBIENT_TEMPERATURE" since="21" />
+		<field name="FEATURE_SENSOR_BAROMETER" since="9" />
+		<field name="FEATURE_SENSOR_COMPASS" since="8" />
+		<field name="FEATURE_SENSOR_GYROSCOPE" since="9" />
+		<field name="FEATURE_SENSOR_HEART_RATE" since="20" />
+		<field name="FEATURE_SENSOR_HEART_RATE_ECG" since="21" />
+		<field name="FEATURE_SENSOR_HINGE_ANGLE" since="30" />
+		<field name="FEATURE_SENSOR_LIGHT" since="7" />
+		<field name="FEATURE_SENSOR_PROXIMITY" since="7" />
+		<field name="FEATURE_SENSOR_RELATIVE_HUMIDITY" since="21" />
+		<field name="FEATURE_SENSOR_STEP_COUNTER" since="19" />
+		<field name="FEATURE_SENSOR_STEP_DETECTOR" since="19" />
+		<field name="FEATURE_SE_OMAPI_ESE" since="30" />
+		<field name="FEATURE_SE_OMAPI_SD" since="30" />
+		<field name="FEATURE_SE_OMAPI_UICC" since="30" />
+		<field name="FEATURE_SIP" since="9" />
+		<field name="FEATURE_SIP_VOIP" since="9" />
+		<field name="FEATURE_STRONGBOX_KEYSTORE" since="28" />
+		<field name="FEATURE_TELEPHONY" since="7" />
+		<field name="FEATURE_TELEPHONY_CDMA" since="7" />
+		<field name="FEATURE_TELEPHONY_EUICC" since="28" />
+		<field name="FEATURE_TELEPHONY_GSM" since="7" />
+		<field name="FEATURE_TELEPHONY_IMS" since="29" />
+		<field name="FEATURE_TELEPHONY_MBMS" since="28" />
+		<field name="FEATURE_TELEVISION" since="16" deprecated="21" />
+		<field name="FEATURE_TOUCHSCREEN" since="8" />
+		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH" since="7" />
+		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT" since="8" />
+		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND" since="9" />
+		<field name="FEATURE_USB_ACCESSORY" since="12" />
+		<field name="FEATURE_USB_HOST" since="12" />
+		<field name="FEATURE_VERIFIED_BOOT" since="21" />
+		<field name="FEATURE_VR_HEADTRACKING" since="26" />
+		<field name="FEATURE_VR_MODE" since="24" deprecated="28" />
+		<field name="FEATURE_VR_MODE_HIGH_PERFORMANCE" since="24" />
+		<field name="FEATURE_VULKAN_DEQP_LEVEL" since="30" />
+		<field name="FEATURE_VULKAN_HARDWARE_COMPUTE" since="26" />
+		<field name="FEATURE_VULKAN_HARDWARE_LEVEL" since="24" />
+		<field name="FEATURE_VULKAN_HARDWARE_VERSION" since="24" />
+		<field name="FEATURE_WATCH" since="20" />
+		<field name="FEATURE_WEBVIEW" since="20" />
+		<field name="FEATURE_WIFI" since="8" />
+		<field name="FEATURE_WIFI_AWARE" since="26" />
+		<field name="FEATURE_WIFI_DIRECT" since="14" />
+		<field name="FEATURE_WIFI_PASSPOINT" since="27" />
+		<field name="FEATURE_WIFI_RTT" since="28" />
+		<field name="FLAG_PERMISSION_WHITELIST_INSTALLER" since="29" />
+		<field name="FLAG_PERMISSION_WHITELIST_SYSTEM" since="29" />
+		<field name="FLAG_PERMISSION_WHITELIST_UPGRADE" since="29" />
+		<field name="FORWARD_LOCK_PACKAGE" removed="4" />
+		<field name="GET_ACTIVITIES" />
+		<field name="GET_ATTRIBUTIONS" since="31" />
+		<field name="GET_CONFIGURATIONS" since="3" />
+		<field name="GET_DISABLED_COMPONENTS" deprecated="24" />
+		<field name="GET_DISABLED_UNTIL_USED_COMPONENTS" since="18" deprecated="24" />
+		<field name="GET_GIDS" />
+		<field name="GET_INSTRUMENTATION" />
+		<field name="GET_INTENT_FILTERS" deprecated="31" />
+		<field name="GET_META_DATA" />
+		<field name="GET_PERMISSIONS" />
+		<field name="GET_PROVIDERS" />
+		<field name="GET_RECEIVERS" />
+		<field name="GET_RESOLVED_FILTER" />
+		<field name="GET_SERVICES" />
+		<field name="GET_SHARED_LIBRARY_FILES" />
+		<field name="GET_SIGNATURES" deprecated="28" />
+		<field name="GET_SIGNING_CERTIFICATES" since="28" />
+		<field name="GET_UNINSTALLED_PACKAGES" since="3" deprecated="24" />
+		<field name="GET_URI_PERMISSION_PATTERNS" />
+		<field name="INSTALL_FAILED_ALREADY_EXISTS" removed="4" />
+		<field name="INSTALL_FAILED_CONFLICTING_PROVIDER" since="3" removed="4" />
+		<field name="INSTALL_FAILED_DEXOPT" removed="4" />
+		<field name="INSTALL_FAILED_DUPLICATE_PACKAGE" removed="4" />
+		<field name="INSTALL_FAILED_INSUFFICIENT_STORAGE" removed="4" />
+		<field name="INSTALL_FAILED_INVALID_APK" removed="4" />
+		<field name="INSTALL_FAILED_INVALID_URI" removed="4" />
+		<field name="INSTALL_FAILED_MISSING_SHARED_LIBRARY" removed="4" />
+		<field name="INSTALL_FAILED_NO_SHARED_USER" removed="4" />
+		<field name="INSTALL_FAILED_OLDER_SDK" removed="4" />
+		<field name="INSTALL_FAILED_REPLACE_COULDNT_DELETE" removed="4" />
+		<field name="INSTALL_FAILED_SHARED_USER_INCOMPATIBLE" removed="4" />
+		<field name="INSTALL_FAILED_UPDATE_INCOMPATIBLE" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_BAD_MANIFEST" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_MANIFEST_EMPTY" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_MANIFEST_MALFORMED" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_NOT_APK" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_NO_CERTIFICATES" removed="4" />
+		<field name="INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION" removed="4" />
+		<field name="INSTALL_REASON_DEVICE_RESTORE" since="26" />
+		<field name="INSTALL_REASON_DEVICE_SETUP" since="26" />
+		<field name="INSTALL_REASON_POLICY" since="26" />
+		<field name="INSTALL_REASON_UNKNOWN" since="26" />
+		<field name="INSTALL_REASON_USER" since="26" />
+		<field name="INSTALL_SCENARIO_BULK" since="31" />
+		<field name="INSTALL_SCENARIO_BULK_SECONDARY" since="31" />
+		<field name="INSTALL_SCENARIO_DEFAULT" since="31" />
+		<field name="INSTALL_SCENARIO_FAST" since="31" />
+		<field name="INSTALL_SUCCEEDED" removed="4" />
+		<field name="MATCH_ALL" since="23" />
+		<field name="MATCH_APEX" since="29" />
+		<field name="MATCH_DEFAULT_ONLY" />
+		<field name="MATCH_DIRECT_BOOT_AUTO" since="29" />
+		<field name="MATCH_DIRECT_BOOT_AWARE" since="24" />
+		<field name="MATCH_DIRECT_BOOT_UNAWARE" since="24" />
+		<field name="MATCH_DISABLED_COMPONENTS" since="24" />
+		<field name="MATCH_DISABLED_UNTIL_USED_COMPONENTS" since="24" />
+		<field name="MATCH_SYSTEM_ONLY" since="24" />
+		<field name="MATCH_UNINSTALLED_PACKAGES" since="24" />
+		<field name="MAXIMUM_VERIFICATION_TIMEOUT" since="17" />
+		<field name="PERMISSION_DENIED" />
+		<field name="PERMISSION_GRANTED" />
+		<field name="PKG_INSTALL_COMPLETE" removed="8" />
+		<field name="PKG_INSTALL_INCOMPLETE" removed="8" />
+		<field name="PROPERTY_MEDIA_CAPABILITIES" since="31" />
+		<field name="REPLACE_EXISTING_PACKAGE" removed="4" />
+		<field name="SIGNATURE_FIRST_NOT_SIGNED" />
+		<field name="SIGNATURE_MATCH" />
+		<field name="SIGNATURE_NEITHER_SIGNED" />
+		<field name="SIGNATURE_NO_MATCH" />
+		<field name="SIGNATURE_SECOND_NOT_SIGNED" />
+		<field name="SIGNATURE_UNKNOWN_PACKAGE" />
+		<field name="SYNCHRONOUS" since="30" />
+		<field name="TRUST_ALL" since="31" />
+		<field name="TRUST_NONE" since="31" />
+		<field name="VERIFICATION_ALLOW" since="14" />
+		<field name="VERIFICATION_REJECT" since="14" />
+		<field name="VERSION_CODE_HIGHEST" since="26" />
+	</class>
+	<class name="android/content/pm/PackageManager$NameNotFoundException" since="1">
+		<extends name="android/util/AndroidException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/content/pm/PackageManager$OnChecksumsReadyListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onChecksumsReady(Ljava/util/List;)V" />
+	</class>
+	<class name="android/content/pm/PackageManager$Property" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBoolean()Z" />
+		<method name="getClassName()Ljava/lang/String;" />
+		<method name="getFloat()F" />
+		<method name="getInteger()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getResourceId()I" />
+		<method name="getString()Ljava/lang/String;" />
+		<method name="isBoolean()Z" />
+		<method name="isFloat()Z" />
+		<method name="isInteger()Z" />
+		<method name="isResourceId()Z" />
+		<method name="isString()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/PackageStats" since="1" deprecated="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/pm/PackageStats;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+		<field name="CREATOR" deprecated="29" />
+		<field name="cacheSize" deprecated="29" />
+		<field name="codeSize" deprecated="29" />
+		<field name="dataSize" deprecated="29" />
+		<field name="externalCacheSize" since="11" deprecated="29" />
+		<field name="externalCodeSize" since="14" deprecated="29" />
+		<field name="externalDataSize" since="11" deprecated="29" />
+		<field name="externalMediaSize" since="11" deprecated="29" />
+		<field name="externalObbSize" since="11" deprecated="29" />
+		<field name="packageName" deprecated="29" />
+	</class>
+	<class name="android/content/pm/PathPermission" since="4">
+		<extends name="android/os/PatternMatcher" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" />
+		<method name="getReadPermission()Ljava/lang/String;" />
+		<method name="getWritePermission()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/PermissionGroupInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/pm/PermissionGroupInfo;)V" deprecated="29" />
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+		<field name="FLAG_PERSONAL_INFO" since="17" />
+		<field name="descriptionRes" />
+		<field name="flags" since="17" />
+		<field name="nonLocalizedDescription" />
+		<field name="priority" since="17" />
+	</class>
+	<class name="android/content/pm/PermissionInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/pm/PermissionInfo;)V" deprecated="29" />
+		<method name="getProtection()I" since="28" />
+		<method name="getProtectionFlags()I" since="28" />
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+		<field name="FLAG_COSTS_MONEY" since="17" />
+		<field name="FLAG_HARD_RESTRICTED" since="29" />
+		<field name="FLAG_IMMUTABLY_RESTRICTED" since="29" />
+		<field name="FLAG_INSTALLED" since="23" />
+		<field name="FLAG_SOFT_RESTRICTED" since="29" />
+		<field name="PROTECTION_DANGEROUS" />
+		<field name="PROTECTION_FLAG_APPOP" since="21" />
+		<field name="PROTECTION_FLAG_DEVELOPMENT" since="16" />
+		<field name="PROTECTION_FLAG_INSTALLER" since="23" />
+		<field name="PROTECTION_FLAG_INSTANT" since="27" />
+		<field name="PROTECTION_FLAG_PRE23" since="23" />
+		<field name="PROTECTION_FLAG_PREINSTALLED" since="23" />
+		<field name="PROTECTION_FLAG_PRIVILEGED" since="23" />
+		<field name="PROTECTION_FLAG_RUNTIME_ONLY" since="26" />
+		<field name="PROTECTION_FLAG_SETUP" since="24" />
+		<field name="PROTECTION_FLAG_SYSTEM" since="16" deprecated="23" />
+		<field name="PROTECTION_FLAG_VERIFIER" since="23" />
+		<field name="PROTECTION_INTERNAL" since="31" />
+		<field name="PROTECTION_MASK_BASE" since="16" deprecated="28" />
+		<field name="PROTECTION_MASK_FLAGS" since="16" deprecated="28" />
+		<field name="PROTECTION_NORMAL" />
+		<field name="PROTECTION_SIGNATURE" />
+		<field name="PROTECTION_SIGNATURE_OR_SYSTEM" deprecated="23" />
+		<field name="descriptionRes" />
+		<field name="flags" since="17" />
+		<field name="group" />
+		<field name="nonLocalizedDescription" />
+		<field name="protectionLevel" deprecated="28" />
+	</class>
+	<class name="android/content/pm/ProviderInfo" since="1">
+		<extends name="android/content/pm/ComponentInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/ProviderInfo;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="19" />
+		<field name="CREATOR" />
+		<field name="FLAG_SINGLE_USER" since="17" />
+		<field name="authority" />
+		<field name="flags" since="17" />
+		<field name="forceUriPermissions" since="29" />
+		<field name="grantUriPermissions" />
+		<field name="initOrder" />
+		<field name="isSyncable" deprecated="15" />
+		<field name="multiprocess" />
+		<field name="pathPermissions" since="4" />
+		<field name="readPermission" />
+		<field name="uriPermissionPatterns" />
+		<field name="writePermission" />
+	</class>
+	<class name="android/content/pm/ResolveInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/ResolveInfo;)V" since="17" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getIconResource()I" />
+		<method name="isCrossProfileIntentForwarderActivity()Z" since="30" />
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+		<field name="activityInfo" />
+		<field name="filter" />
+		<field name="icon" />
+		<field name="isDefault" />
+		<field name="isInstantAppAvailable" since="26" />
+		<field name="labelRes" />
+		<field name="match" />
+		<field name="nonLocalizedLabel" />
+		<field name="preferredOrder" />
+		<field name="priority" />
+		<field name="providerInfo" since="19" />
+		<field name="resolvePackageName" since="5" />
+		<field name="serviceInfo" />
+		<field name="specificIndex" />
+	</class>
+	<class name="android/content/pm/ResolveInfo$DisplayNameComparator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Comparator" />
+		<method name="&lt;init&gt;(Landroid/content/pm/PackageManager;)V" />
+		<method name="compare(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I" />
+	</class>
+	<class name="android/content/pm/ServiceInfo" since="1">
+		<extends name="android/content/pm/ComponentInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/ServiceInfo;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="5" />
+		<method name="getForegroundServiceType()I" since="29" />
+		<field name="CREATOR" />
+		<field name="FLAG_EXTERNAL_SERVICE" since="24" />
+		<field name="FLAG_ISOLATED_PROCESS" since="16" />
+		<field name="FLAG_SINGLE_USER" since="17" />
+		<field name="FLAG_STOP_WITH_TASK" since="14" />
+		<field name="FLAG_USE_APP_ZYGOTE" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_CAMERA" since="30" />
+		<field name="FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_DATA_SYNC" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_LOCATION" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_MANIFEST" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_MICROPHONE" since="30" />
+		<field name="FOREGROUND_SERVICE_TYPE_NONE" since="29" />
+		<field name="FOREGROUND_SERVICE_TYPE_PHONE_CALL" since="29" />
+		<field name="flags" since="14" />
+		<field name="permission" />
+	</class>
+	<class name="android/content/pm/SharedLibraryInfo" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDeclaringPackage()Landroid/content/pm/VersionedPackage;" />
+		<method name="getDependentPackages()Ljava/util/List;" />
+		<method name="getLongVersion()J" since="28" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getType()I" />
+		<method name="getVersion()I" deprecated="28" />
+		<field name="CREATOR" />
+		<field name="TYPE_BUILTIN" />
+		<field name="TYPE_DYNAMIC" />
+		<field name="TYPE_STATIC" />
+		<field name="VERSION_UNDEFINED" />
+	</class>
+	<class name="android/content/pm/ShortcutInfo" since="25">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getActivity()Landroid/content/ComponentName;" />
+		<method name="getCategories()Ljava/util/Set;" />
+		<method name="getDisabledMessage()Ljava/lang/CharSequence;" />
+		<method name="getDisabledReason()I" since="28" />
+		<method name="getExtras()Landroid/os/PersistableBundle;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getIntent()Landroid/content/Intent;" />
+		<method name="getIntents()[Landroid/content/Intent;" />
+		<method name="getLastChangedTimestamp()J" />
+		<method name="getLocusId()Landroid/content/LocusId;" since="29" />
+		<method name="getLongLabel()Ljava/lang/CharSequence;" />
+		<method name="getPackage()Ljava/lang/String;" />
+		<method name="getRank()I" />
+		<method name="getShortLabel()Ljava/lang/CharSequence;" />
+		<method name="getUserHandle()Landroid/os/UserHandle;" />
+		<method name="hasKeyFieldsOnly()Z" />
+		<method name="isCached()Z" since="30" />
+		<method name="isDeclaredInManifest()Z" />
+		<method name="isDynamic()Z" />
+		<method name="isEnabled()Z" />
+		<method name="isImmutable()Z" />
+		<method name="isPinned()Z" />
+		<field name="CREATOR" />
+		<field name="DISABLED_REASON_APP_CHANGED" since="28" />
+		<field name="DISABLED_REASON_BACKUP_NOT_SUPPORTED" since="28" />
+		<field name="DISABLED_REASON_BY_APP" since="28" />
+		<field name="DISABLED_REASON_NOT_DISABLED" since="28" />
+		<field name="DISABLED_REASON_OTHER_RESTORE_ISSUE" since="28" />
+		<field name="DISABLED_REASON_SIGNATURE_MISMATCH" since="28" />
+		<field name="DISABLED_REASON_UNKNOWN" since="28" />
+		<field name="DISABLED_REASON_VERSION_LOWER" since="28" />
+		<field name="SHORTCUT_CATEGORY_CONVERSATION" />
+	</class>
+	<class name="android/content/pm/ShortcutInfo$Builder" since="25">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" />
+		<method name="build()Landroid/content/pm/ShortcutInfo;" />
+		<method name="setActivity(Landroid/content/ComponentName;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setCategories(Ljava/util/Set;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setDisabledMessage(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setExtras(Landroid/os/PersistableBundle;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setIntent(Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setIntents([Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setLocusId(Landroid/content/LocusId;)Landroid/content/pm/ShortcutInfo$Builder;" since="29" />
+		<method name="setLongLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setLongLived(Z)Landroid/content/pm/ShortcutInfo$Builder;" since="29" />
+		<method name="setPerson(Landroid/app/Person;)Landroid/content/pm/ShortcutInfo$Builder;" since="29" />
+		<method name="setPersons([Landroid/app/Person;)Landroid/content/pm/ShortcutInfo$Builder;" since="29" />
+		<method name="setRank(I)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setShortLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;" />
+		<method name="setStartingTheme(I)Landroid/content/pm/ShortcutInfo$Builder;" since="31" />
+	</class>
+	<class name="android/content/pm/ShortcutManager" since="25">
+		<extends name="java/lang/Object" />
+		<method name="addDynamicShortcuts(Ljava/util/List;)Z" />
+		<method name="createShortcutResultIntent(Landroid/content/pm/ShortcutInfo;)Landroid/content/Intent;" since="26" />
+		<method name="disableShortcuts(Ljava/util/List;)V" />
+		<method name="disableShortcuts(Ljava/util/List;Ljava/lang/CharSequence;)V" />
+		<method name="enableShortcuts(Ljava/util/List;)V" />
+		<method name="getDynamicShortcuts()Ljava/util/List;" />
+		<method name="getIconMaxHeight()I" />
+		<method name="getIconMaxWidth()I" />
+		<method name="getManifestShortcuts()Ljava/util/List;" />
+		<method name="getMaxShortcutCountPerActivity()I" />
+		<method name="getPinnedShortcuts()Ljava/util/List;" />
+		<method name="getShortcuts(I)Ljava/util/List;" since="30" />
+		<method name="isRateLimitingActive()Z" />
+		<method name="isRequestPinShortcutSupported()Z" since="26" />
+		<method name="pushDynamicShortcut(Landroid/content/pm/ShortcutInfo;)V" since="30" />
+		<method name="removeAllDynamicShortcuts()V" />
+		<method name="removeDynamicShortcuts(Ljava/util/List;)V" />
+		<method name="removeLongLivedShortcuts(Ljava/util/List;)V" since="30" />
+		<method name="reportShortcutUsed(Ljava/lang/String;)V" />
+		<method name="requestPinShortcut(Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;)Z" since="26" />
+		<method name="setDynamicShortcuts(Ljava/util/List;)Z" />
+		<method name="updateShortcuts(Ljava/util/List;)Z" />
+		<field name="FLAG_MATCH_CACHED" since="30" />
+		<field name="FLAG_MATCH_DYNAMIC" since="30" />
+		<field name="FLAG_MATCH_MANIFEST" since="30" />
+		<field name="FLAG_MATCH_PINNED" since="30" />
+	</class>
+	<class name="android/content/pm/Signature" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="toByteArray()[B" />
+		<method name="toChars()[C" />
+		<method name="toChars([C[I)[C" />
+		<method name="toCharsString()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/SigningInfo" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/pm/SigningInfo;)V" />
+		<method name="getApkContentsSigners()[Landroid/content/pm/Signature;" />
+		<method name="getSigningCertificateHistory()[Landroid/content/pm/Signature;" />
+		<method name="hasMultipleSigners()Z" />
+		<method name="hasPastSigningCertificates()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/VersionedPackage" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;J)V" since="28" />
+		<method name="getLongVersionCode()J" since="28" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getVersionCode()I" deprecated="28" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/pm/verify/domain/DomainVerificationManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getDomainVerificationUserState(Ljava/lang/String;)Landroid/content/pm/verify/domain/DomainVerificationUserState;" />
+	</class>
+	<class name="android/content/pm/verify/domain/DomainVerificationUserState" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getHostToStateMap()Ljava/util/Map;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getUser()Landroid/os/UserHandle;" />
+		<method name="isLinkHandlingAllowed()Z" />
+		<field name="CREATOR" />
+		<field name="DOMAIN_STATE_NONE" />
+		<field name="DOMAIN_STATE_SELECTED" />
+		<field name="DOMAIN_STATE_VERIFIED" />
+	</class>
+	<class name="android/content/res/AssetFileDescriptor" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="3" />
+		<implements name="java/io/Closeable" since="19" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;JJ)V" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;JJLandroid/os/Bundle;)V" since="19" />
+		<method name="close()V" />
+		<method name="createInputStream()Ljava/io/FileInputStream;" since="3" />
+		<method name="createOutputStream()Ljava/io/FileOutputStream;" since="3" />
+		<method name="getDeclaredLength()J" since="3" />
+		<method name="getExtras()Landroid/os/Bundle;" since="19" />
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;" />
+		<method name="getLength()J" />
+		<method name="getParcelFileDescriptor()Landroid/os/ParcelFileDescriptor;" />
+		<method name="getStartOffset()J" />
+		<field name="CREATOR" since="3" />
+		<field name="UNKNOWN_LENGTH" since="3" />
+	</class>
+	<class name="android/content/res/AssetFileDescriptor$AutoCloseInputStream" since="3">
+		<extends name="android/os/ParcelFileDescriptor$AutoCloseInputStream" />
+		<method name="&lt;init&gt;(Landroid/content/res/AssetFileDescriptor;)V" />
+	</class>
+	<class name="android/content/res/AssetFileDescriptor$AutoCloseOutputStream" since="3">
+		<extends name="android/os/ParcelFileDescriptor$AutoCloseOutputStream" />
+		<method name="&lt;init&gt;(Landroid/content/res/AssetFileDescriptor;)V" />
+	</class>
+	<class name="android/content/res/AssetManager" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="21" />
+		<method name="close()V" />
+		<method name="getLocales()[Ljava/lang/String;" />
+		<method name="list(Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="open(Ljava/lang/String;)Ljava/io/InputStream;" />
+		<method name="open(Ljava/lang/String;I)Ljava/io/InputStream;" />
+		<method name="openFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" />
+		<method name="openNonAssetFd(ILjava/lang/String;)Landroid/content/res/AssetFileDescriptor;" />
+		<method name="openNonAssetFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" />
+		<method name="openXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;" />
+		<method name="openXmlResourceParser(Ljava/lang/String;)Landroid/content/res/XmlResourceParser;" />
+		<field name="ACCESS_BUFFER" />
+		<field name="ACCESS_RANDOM" />
+		<field name="ACCESS_STREAMING" />
+		<field name="ACCESS_UNKNOWN" />
+	</class>
+	<class name="android/content/res/AssetManager$AssetInputStream" since="1">
+		<extends name="java/io/InputStream" />
+		<method name="getAssetInt()I" removed="21" />
+	</class>
+	<class name="android/content/res/ColorStateList" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;([[I[I)V" />
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/res/ColorStateList;" deprecated="23" />
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;" since="23" />
+		<method name="getChangingConfigurations()I" since="23" />
+		<method name="getColorForState([II)I" />
+		<method name="getDefaultColor()I" />
+		<method name="isOpaque()Z" since="21" />
+		<method name="isStateful()Z" />
+		<method name="valueOf(I)Landroid/content/res/ColorStateList;" />
+		<method name="withAlpha(I)Landroid/content/res/ColorStateList;" />
+		<method name="withLStar(F)Landroid/content/res/ColorStateList;" since="31" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/content/res/Configuration" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/res/Configuration;)V" />
+		<method name="compareTo(Landroid/content/res/Configuration;)I" />
+		<method name="diff(Landroid/content/res/Configuration;)I" />
+		<method name="equals(Landroid/content/res/Configuration;)Z" />
+		<method name="getLayoutDirection()I" since="17" />
+		<method name="getLocales()Landroid/os/LocaleList;" since="24" />
+		<method name="isLayoutSizeAtLeast(I)Z" since="11" />
+		<method name="isNightModeActive()Z" since="30" />
+		<method name="isScreenHdr()Z" since="26" />
+		<method name="isScreenRound()Z" since="23" />
+		<method name="isScreenWideColorGamut()Z" since="26" />
+		<method name="needNewResources(II)Z" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="8" />
+		<method name="setLayoutDirection(Ljava/util/Locale;)V" since="17" />
+		<method name="setLocale(Ljava/util/Locale;)V" since="17" />
+		<method name="setLocales(Landroid/os/LocaleList;)V" since="24" />
+		<method name="setTo(Landroid/content/res/Configuration;)V" since="8" />
+		<method name="setToDefaults()V" />
+		<method name="updateFrom(Landroid/content/res/Configuration;)I" />
+		<field name="COLOR_MODE_HDR_MASK" since="26" />
+		<field name="COLOR_MODE_HDR_NO" since="26" />
+		<field name="COLOR_MODE_HDR_SHIFT" since="26" />
+		<field name="COLOR_MODE_HDR_UNDEFINED" since="26" />
+		<field name="COLOR_MODE_HDR_YES" since="26" />
+		<field name="COLOR_MODE_UNDEFINED" since="26" />
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_MASK" since="26" />
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_NO" since="26" />
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED" since="26" />
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_YES" since="26" />
+		<field name="CREATOR" />
+		<field name="DENSITY_DPI_UNDEFINED" since="17" />
+		<field name="FONT_WEIGHT_ADJUSTMENT_UNDEFINED" since="31" />
+		<field name="HARDKEYBOARDHIDDEN_NO" since="3" />
+		<field name="HARDKEYBOARDHIDDEN_UNDEFINED" since="3" />
+		<field name="HARDKEYBOARDHIDDEN_YES" since="3" />
+		<field name="KEYBOARDHIDDEN_NO" />
+		<field name="KEYBOARDHIDDEN_UNDEFINED" />
+		<field name="KEYBOARDHIDDEN_YES" />
+		<field name="KEYBOARD_12KEY" />
+		<field name="KEYBOARD_NOKEYS" />
+		<field name="KEYBOARD_QWERTY" />
+		<field name="KEYBOARD_UNDEFINED" />
+		<field name="MNC_ZERO" since="19" />
+		<field name="NAVIGATIONHIDDEN_NO" since="5" />
+		<field name="NAVIGATIONHIDDEN_UNDEFINED" since="5" />
+		<field name="NAVIGATIONHIDDEN_YES" since="5" />
+		<field name="NAVIGATION_DPAD" />
+		<field name="NAVIGATION_NONAV" />
+		<field name="NAVIGATION_TRACKBALL" />
+		<field name="NAVIGATION_UNDEFINED" />
+		<field name="NAVIGATION_WHEEL" />
+		<field name="ORIENTATION_LANDSCAPE" />
+		<field name="ORIENTATION_PORTRAIT" />
+		<field name="ORIENTATION_SQUARE" deprecated="16" />
+		<field name="ORIENTATION_UNDEFINED" />
+		<field name="SCREENLAYOUT_LAYOUTDIR_LTR" since="17" />
+		<field name="SCREENLAYOUT_LAYOUTDIR_MASK" since="17" />
+		<field name="SCREENLAYOUT_LAYOUTDIR_RTL" since="17" />
+		<field name="SCREENLAYOUT_LAYOUTDIR_SHIFT" since="17" />
+		<field name="SCREENLAYOUT_LAYOUTDIR_UNDEFINED" since="17" />
+		<field name="SCREENLAYOUT_LONG_MASK" since="4" />
+		<field name="SCREENLAYOUT_LONG_NO" since="4" />
+		<field name="SCREENLAYOUT_LONG_UNDEFINED" since="4" />
+		<field name="SCREENLAYOUT_LONG_YES" since="4" />
+		<field name="SCREENLAYOUT_ROUND_MASK" since="23" />
+		<field name="SCREENLAYOUT_ROUND_NO" since="23" />
+		<field name="SCREENLAYOUT_ROUND_UNDEFINED" since="23" />
+		<field name="SCREENLAYOUT_ROUND_YES" since="23" />
+		<field name="SCREENLAYOUT_SIZE_LARGE" since="4" />
+		<field name="SCREENLAYOUT_SIZE_MASK" since="4" />
+		<field name="SCREENLAYOUT_SIZE_NORMAL" since="4" />
+		<field name="SCREENLAYOUT_SIZE_SMALL" since="4" />
+		<field name="SCREENLAYOUT_SIZE_UNDEFINED" since="4" />
+		<field name="SCREENLAYOUT_SIZE_XLARGE" since="9" />
+		<field name="SCREENLAYOUT_UNDEFINED" since="17" />
+		<field name="SCREEN_HEIGHT_DP_UNDEFINED" since="13" />
+		<field name="SCREEN_WIDTH_DP_UNDEFINED" since="13" />
+		<field name="SMALLEST_SCREEN_WIDTH_DP_UNDEFINED" since="13" />
+		<field name="TOUCHSCREEN_FINGER" />
+		<field name="TOUCHSCREEN_NOTOUCH" />
+		<field name="TOUCHSCREEN_STYLUS" deprecated="16" />
+		<field name="TOUCHSCREEN_UNDEFINED" />
+		<field name="UI_MODE_NIGHT_MASK" since="8" />
+		<field name="UI_MODE_NIGHT_NO" since="8" />
+		<field name="UI_MODE_NIGHT_UNDEFINED" since="8" />
+		<field name="UI_MODE_NIGHT_YES" since="8" />
+		<field name="UI_MODE_TYPE_APPLIANCE" since="16" />
+		<field name="UI_MODE_TYPE_CAR" since="8" />
+		<field name="UI_MODE_TYPE_DESK" since="8" />
+		<field name="UI_MODE_TYPE_MASK" since="8" />
+		<field name="UI_MODE_TYPE_NORMAL" since="8" />
+		<field name="UI_MODE_TYPE_TELEVISION" since="13" />
+		<field name="UI_MODE_TYPE_UNDEFINED" since="8" />
+		<field name="UI_MODE_TYPE_VR_HEADSET" since="26" />
+		<field name="UI_MODE_TYPE_WATCH" since="20" />
+		<field name="colorMode" since="26" />
+		<field name="densityDpi" since="17" />
+		<field name="fontScale" />
+		<field name="fontWeightAdjustment" since="31" />
+		<field name="hardKeyboardHidden" since="3" />
+		<field name="keyboard" />
+		<field name="keyboardHidden" />
+		<field name="locale" deprecated="24" />
+		<field name="mcc" />
+		<field name="mnc" />
+		<field name="navigation" />
+		<field name="navigationHidden" since="5" />
+		<field name="orientation" />
+		<field name="screenHeightDp" since="13" />
+		<field name="screenLayout" since="4" />
+		<field name="screenWidthDp" since="13" />
+		<field name="smallestScreenWidthDp" since="13" />
+		<field name="touchscreen" />
+		<field name="uiMode" since="8" />
+	</class>
+	<class name="android/content/res/ObbInfo" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+		<field name="OBB_OVERLAY" />
+		<field name="filename" />
+		<field name="flags" />
+		<field name="packageName" />
+		<field name="version" />
+	</class>
+	<class name="android/content/res/ObbScanner" since="9">
+		<extends name="java/lang/Object" />
+		<method name="getObbInfo(Ljava/lang/String;)Landroid/content/res/ObbInfo;" />
+	</class>
+	<class name="android/content/res/Resources" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V" deprecated="25" />
+		<method name="addLoaders([Landroid/content/res/loader/ResourcesLoader;)V" since="30" />
+		<method name="finishPreloading()V" />
+		<method name="flushLayoutCache()V" />
+		<method name="getAnimation(I)Landroid/content/res/XmlResourceParser;" />
+		<method name="getAssets()Landroid/content/res/AssetManager;" />
+		<method name="getAttributeSetSourceResId(Landroid/util/AttributeSet;)I" since="29" />
+		<method name="getBoolean(I)Z" since="3" />
+		<method name="getColor(I)I" deprecated="23" />
+		<method name="getColor(ILandroid/content/res/Resources$Theme;)I" since="23" />
+		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;" deprecated="23" />
+		<method name="getColorStateList(ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;" since="23" />
+		<method name="getConfiguration()Landroid/content/res/Configuration;" />
+		<method name="getDimension(I)F" />
+		<method name="getDimensionPixelOffset(I)I" />
+		<method name="getDimensionPixelSize(I)I" />
+		<method name="getDisplayMetrics()Landroid/util/DisplayMetrics;" />
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" deprecated="22" />
+		<method name="getDrawable(ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;" since="15" deprecated="22" />
+		<method name="getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="getFloat(I)F" since="29" />
+		<method name="getFont(I)Landroid/graphics/Typeface;" since="26" />
+		<method name="getFraction(III)F" since="3" />
+		<method name="getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="getIntArray(I)[I" />
+		<method name="getInteger(I)I" />
+		<method name="getLayout(I)Landroid/content/res/XmlResourceParser;" />
+		<method name="getMovie(I)Landroid/graphics/Movie;" deprecated="29" />
+		<method name="getQuantityString(II)Ljava/lang/String;" />
+		<method name="getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="getQuantityText(II)Ljava/lang/CharSequence;" />
+		<method name="getResourceEntryName(I)Ljava/lang/String;" />
+		<method name="getResourceName(I)Ljava/lang/String;" />
+		<method name="getResourcePackageName(I)Ljava/lang/String;" />
+		<method name="getResourceTypeName(I)Ljava/lang/String;" />
+		<method name="getString(I)Ljava/lang/String;" />
+		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="getStringArray(I)[Ljava/lang/String;" />
+		<method name="getSystem()Landroid/content/res/Resources;" />
+		<method name="getText(I)Ljava/lang/CharSequence;" />
+		<method name="getText(ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getTextArray(I)[Ljava/lang/CharSequence;" />
+		<method name="getValue(ILandroid/util/TypedValue;Z)V" />
+		<method name="getValue(Ljava/lang/String;Landroid/util/TypedValue;Z)V" />
+		<method name="getValueForDensity(IILandroid/util/TypedValue;Z)V" since="15" />
+		<method name="getXml(I)Landroid/content/res/XmlResourceParser;" />
+		<method name="newTheme()Landroid/content/res/Resources$Theme;" />
+		<method name="obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;" />
+		<method name="obtainTypedArray(I)Landroid/content/res/TypedArray;" />
+		<method name="openRawResource(I)Ljava/io/InputStream;" />
+		<method name="openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;" since="3" />
+		<method name="openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;" />
+		<method name="parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="3" />
+		<method name="parseBundleExtras(Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;)V" since="3" />
+		<method name="removeLoaders([Landroid/content/res/loader/ResourcesLoader;)V" since="30" />
+		<method name="updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V" deprecated="25" />
+		<field name="ID_NULL" since="29" />
+	</class>
+	<class name="android/content/res/Resources$NotFoundException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Exception;)V" since="24" />
+	</class>
+	<class name="android/content/res/Resources$Theme" since="1">
+		<extends name="java/lang/Object" />
+		<method name="applyStyle(IZ)V" />
+		<method name="dump(ILjava/lang/String;Ljava/lang/String;)V" />
+		<method name="getAttributeResolutionStack(III)[I" since="29" />
+		<method name="getChangingConfigurations()I" since="23" />
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="getExplicitStyle(Landroid/util/AttributeSet;)I" since="29" />
+		<method name="getResources()Landroid/content/res/Resources;" since="21" />
+		<method name="obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;" />
+		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;" />
+		<method name="obtainStyledAttributes([I)Landroid/content/res/TypedArray;" />
+		<method name="rebase()V" since="29" />
+		<method name="resolveAttribute(ILandroid/util/TypedValue;Z)Z" />
+		<method name="setTo(Landroid/content/res/Resources$Theme;)V" />
+	</class>
+	<class name="android/content/res/TypedArray" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="31" />
+		<method name="getBoolean(IZ)Z" />
+		<method name="getChangingConfigurations()I" since="21" />
+		<method name="getColor(II)I" />
+		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;" />
+		<method name="getDimension(IF)F" />
+		<method name="getDimensionPixelOffset(II)I" />
+		<method name="getDimensionPixelSize(II)I" />
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" />
+		<method name="getFloat(IF)F" />
+		<method name="getFont(I)Landroid/graphics/Typeface;" since="26" />
+		<method name="getFraction(IIIF)F" />
+		<method name="getIndex(I)I" />
+		<method name="getIndexCount()I" />
+		<method name="getInt(II)I" />
+		<method name="getInteger(II)I" />
+		<method name="getLayoutDimension(II)I" since="3" />
+		<method name="getLayoutDimension(ILjava/lang/String;)I" />
+		<method name="getNonResourceString(I)Ljava/lang/String;" />
+		<method name="getPositionDescription()Ljava/lang/String;" />
+		<method name="getResourceId(II)I" />
+		<method name="getResources()Landroid/content/res/Resources;" />
+		<method name="getSourceResourceId(II)I" since="29" />
+		<method name="getString(I)Ljava/lang/String;" />
+		<method name="getText(I)Ljava/lang/CharSequence;" />
+		<method name="getTextArray(I)[Ljava/lang/CharSequence;" />
+		<method name="getType(I)I" since="21" />
+		<method name="getValue(ILandroid/util/TypedValue;)Z" />
+		<method name="hasValue(I)Z" />
+		<method name="hasValueOrEmpty(I)Z" since="22" />
+		<method name="length()I" />
+		<method name="peekValue(I)Landroid/util/TypedValue;" />
+		<method name="recycle()V" />
+	</class>
+	<class name="android/content/res/XmlResourceParser" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/util/AttributeSet" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<implements name="org/xmlpull/v1/XmlPullParser" />
+		<method name="close()V" />
+	</class>
+	<class name="android/content/res/loader/AssetsProvider" since="30">
+		<extends name="java/lang/Object" />
+		<method name="loadAssetFd(Ljava/lang/String;I)Landroid/content/res/AssetFileDescriptor;" />
+	</class>
+	<class name="android/content/res/loader/ResourcesLoader" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addProvider(Landroid/content/res/loader/ResourcesProvider;)V" />
+		<method name="clearProviders()V" />
+		<method name="getProviders()Ljava/util/List;" />
+		<method name="removeProvider(Landroid/content/res/loader/ResourcesProvider;)V" />
+		<method name="setProviders(Ljava/util/List;)V" />
+	</class>
+	<class name="android/content/res/loader/ResourcesProvider" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="empty(Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;" />
+		<method name="loadFromApk(Landroid/os/ParcelFileDescriptor;)Landroid/content/res/loader/ResourcesProvider;" />
+		<method name="loadFromApk(Landroid/os/ParcelFileDescriptor;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;" />
+		<method name="loadFromDirectory(Ljava/lang/String;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;" />
+		<method name="loadFromSplit(Landroid/content/Context;Ljava/lang/String;)Landroid/content/res/loader/ResourcesProvider;" />
+		<method name="loadFromTable(Landroid/os/ParcelFileDescriptor;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;" />
+	</class>
+	<class name="android/database/AbstractCursor" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/database/CrossProcessCursor" />
+		<method name="&lt;init&gt;()V" />
+		<method name="checkPosition()V" />
+		<method name="getNotificationUri()Landroid/net/Uri;" since="11" />
+		<method name="getUpdatedField(I)Ljava/lang/Object;" deprecated="15" />
+		<method name="isFieldUpdated(I)Z" deprecated="15" />
+		<method name="onChange(Z)V" />
+		<field name="mClosed" deprecated="23" />
+		<field name="mContentResolver" deprecated="23" />
+		<field name="mCurrentRowID" deprecated="16" removed="23" />
+		<field name="mPos" deprecated="23" />
+		<field name="mRowIdColumnIndex" deprecated="16" removed="23" />
+		<field name="mUpdatedRows" deprecated="15" removed="23" />
+	</class>
+	<class name="android/database/AbstractCursor$SelfContentObserver" since="1">
+		<extends name="android/database/ContentObserver" />
+		<method name="&lt;init&gt;(Landroid/database/AbstractCursor;)V" />
+	</class>
+	<class name="android/database/AbstractWindowedCursor" since="1">
+		<extends name="android/database/AbstractCursor" />
+		<method name="&lt;init&gt;()V" />
+		<method name="hasWindow()Z" />
+		<method name="isBlob(I)Z" deprecated="15" />
+		<method name="isFloat(I)Z" since="5" deprecated="15" />
+		<method name="isLong(I)Z" since="5" deprecated="15" />
+		<method name="isString(I)Z" since="5" deprecated="15" />
+		<method name="setWindow(Landroid/database/CursorWindow;)V" />
+		<field name="mWindow" />
+	</class>
+	<class name="android/database/CharArrayBuffer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;([C)V" />
+		<field name="data" />
+		<field name="sizeCopied" />
+	</class>
+	<class name="android/database/ContentObservable" since="1">
+		<extends name="android/database/Observable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="dispatchChange(Z)V" deprecated="16" />
+		<method name="dispatchChange(ZLandroid/net/Uri;)V" since="16" />
+		<method name="notifyChange(Z)V" deprecated="16" />
+		<method name="registerObserver(Landroid/database/ContentObserver;)V" />
+	</class>
+	<class name="android/database/ContentObserver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/os/Handler;)V" />
+		<method name="deliverSelfNotifications()Z" />
+		<method name="dispatchChange(Z)V" deprecated="16" />
+		<method name="dispatchChange(ZLandroid/net/Uri;)V" since="16" />
+		<method name="dispatchChange(ZLandroid/net/Uri;I)V" since="30" />
+		<method name="dispatchChange(ZLjava/util/Collection;I)V" since="30" />
+		<method name="onChange(Z)V" />
+		<method name="onChange(ZLandroid/net/Uri;)V" since="16" />
+		<method name="onChange(ZLandroid/net/Uri;I)V" since="30" />
+		<method name="onChange(ZLjava/util/Collection;I)V" since="30" />
+	</class>
+	<class name="android/database/CrossProcessCursor" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/database/Cursor" />
+		<method name="fillWindow(ILandroid/database/CursorWindow;)V" />
+		<method name="getWindow()Landroid/database/CursorWindow;" />
+		<method name="onMove(II)Z" />
+	</class>
+	<class name="android/database/CrossProcessCursorWrapper" since="15">
+		<extends name="android/database/CursorWrapper" />
+		<implements name="android/database/CrossProcessCursor" />
+		<method name="&lt;init&gt;(Landroid/database/Cursor;)V" />
+	</class>
+	<class name="android/database/Cursor" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="16" />
+		<method name="close()V" />
+		<method name="copyStringToBuffer(ILandroid/database/CharArrayBuffer;)V" />
+		<method name="deactivate()V" deprecated="16" />
+		<method name="getBlob(I)[B" />
+		<method name="getColumnCount()I" />
+		<method name="getColumnIndex(Ljava/lang/String;)I" />
+		<method name="getColumnIndexOrThrow(Ljava/lang/String;)I" />
+		<method name="getColumnName(I)Ljava/lang/String;" />
+		<method name="getColumnNames()[Ljava/lang/String;" />
+		<method name="getCount()I" />
+		<method name="getDouble(I)D" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getFloat(I)F" />
+		<method name="getInt(I)I" />
+		<method name="getLong(I)J" />
+		<method name="getNotificationUri()Landroid/net/Uri;" since="19" />
+		<method name="getNotificationUris()Ljava/util/List;" since="29" />
+		<method name="getPosition()I" />
+		<method name="getShort(I)S" />
+		<method name="getString(I)Ljava/lang/String;" />
+		<method name="getType(I)I" since="11" />
+		<method name="getWantsAllOnMoveCalls()Z" />
+		<method name="isAfterLast()Z" />
+		<method name="isBeforeFirst()Z" />
+		<method name="isClosed()Z" />
+		<method name="isFirst()Z" />
+		<method name="isLast()Z" />
+		<method name="isNull(I)Z" />
+		<method name="move(I)Z" />
+		<method name="moveToFirst()Z" />
+		<method name="moveToLast()Z" />
+		<method name="moveToNext()Z" />
+		<method name="moveToPosition(I)Z" />
+		<method name="moveToPrevious()Z" />
+		<method name="registerContentObserver(Landroid/database/ContentObserver;)V" />
+		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V" />
+		<method name="requery()Z" deprecated="15" />
+		<method name="respond(Landroid/os/Bundle;)Landroid/os/Bundle;" />
+		<method name="setExtras(Landroid/os/Bundle;)V" since="23" />
+		<method name="setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V" />
+		<method name="setNotificationUris(Landroid/content/ContentResolver;Ljava/util/List;)V" since="29" />
+		<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V" />
+		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V" />
+		<field name="FIELD_TYPE_BLOB" since="11" />
+		<field name="FIELD_TYPE_FLOAT" since="11" />
+		<field name="FIELD_TYPE_INTEGER" since="11" />
+		<field name="FIELD_TYPE_NULL" since="11" />
+		<field name="FIELD_TYPE_STRING" since="11" />
+	</class>
+	<class name="android/database/CursorIndexOutOfBoundsException" since="1">
+		<extends name="java/lang/IndexOutOfBoundsException" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/CursorJoiner" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Iterable" />
+		<implements name="java/util/Iterator" />
+		<method name="&lt;init&gt;(Landroid/database/Cursor;[Ljava/lang/String;Landroid/database/Cursor;[Ljava/lang/String;)V" />
+		<method name="next()Landroid/database/CursorJoiner$Result;" />
+	</class>
+	<class name="android/database/CursorJoiner$Result" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/database/CursorJoiner$Result;" />
+		<method name="values()[Landroid/database/CursorJoiner$Result;" />
+		<field name="BOTH" />
+		<field name="LEFT" />
+		<field name="RIGHT" />
+	</class>
+	<class name="android/database/CursorWindow" since="1">
+		<extends name="android/database/sqlite/SQLiteClosable" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="15" />
+		<method name="&lt;init&gt;(Ljava/lang/String;J)V" since="28" />
+		<method name="&lt;init&gt;(Z)V" deprecated="15" />
+		<method name="allocRow()Z" />
+		<method name="clear()V" />
+		<method name="close()V" removed="16" />
+		<method name="copyStringToBuffer(IILandroid/database/CharArrayBuffer;)V" />
+		<method name="freeLastRow()V" />
+		<method name="getBlob(II)[B" />
+		<method name="getDouble(II)D" />
+		<method name="getFloat(II)F" />
+		<method name="getInt(II)I" />
+		<method name="getLong(II)J" />
+		<method name="getNumRows()I" />
+		<method name="getShort(II)S" />
+		<method name="getStartPosition()I" />
+		<method name="getString(II)Ljava/lang/String;" />
+		<method name="getType(II)I" since="11" />
+		<method name="isBlob(II)Z" deprecated="15" />
+		<method name="isFloat(II)Z" since="5" deprecated="15" />
+		<method name="isLong(II)Z" since="5" deprecated="15" />
+		<method name="isNull(II)Z" deprecated="15" />
+		<method name="isString(II)Z" since="5" deprecated="15" />
+		<method name="newFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;" />
+		<method name="putBlob([BII)Z" />
+		<method name="putDouble(DII)Z" />
+		<method name="putLong(JII)Z" />
+		<method name="putNull(II)Z" />
+		<method name="putString(Ljava/lang/String;II)Z" />
+		<method name="setNumColumns(I)Z" />
+		<method name="setStartPosition(I)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/database/CursorWrapper" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/database/Cursor" />
+		<method name="&lt;init&gt;(Landroid/database/Cursor;)V" />
+		<method name="getWrappedCursor()Landroid/database/Cursor;" since="11" />
+	</class>
+	<class name="android/database/DataSetObservable" since="1">
+		<extends name="android/database/Observable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="notifyChanged()V" />
+		<method name="notifyInvalidated()V" />
+	</class>
+	<class name="android/database/DataSetObserver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onChanged()V" />
+		<method name="onInvalidated()V" />
+	</class>
+	<class name="android/database/DatabaseErrorHandler" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onCorruption(Landroid/database/sqlite/SQLiteDatabase;)V" />
+	</class>
+	<class name="android/database/DatabaseUtils" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V" />
+		<method name="appendSelectionArgs([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;" since="11" />
+		<method name="appendValueToSql(Ljava/lang/StringBuilder;Ljava/lang/Object;)V" />
+		<method name="bindObjectToProgram(Landroid/database/sqlite/SQLiteProgram;ILjava/lang/Object;)V" />
+		<method name="blobFileDescriptorForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="11" />
+		<method name="blobFileDescriptorForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="11" />
+		<method name="concatenateWhere(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11" />
+		<method name="createDbFromSqlStatements(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="cursorDoubleToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V" />
+		<method name="cursorDoubleToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8" />
+		<method name="cursorDoubleToCursorValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V" />
+		<method name="cursorFloatToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8" />
+		<method name="cursorIntToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V" />
+		<method name="cursorIntToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V" />
+		<method name="cursorIntToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8" />
+		<method name="cursorLongToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V" />
+		<method name="cursorLongToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V" />
+		<method name="cursorLongToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8" />
+		<method name="cursorRowToContentValues(Landroid/database/Cursor;Landroid/content/ContentValues;)V" />
+		<method name="cursorShortToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8" />
+		<method name="cursorStringToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V" />
+		<method name="cursorStringToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V" />
+		<method name="cursorStringToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8" />
+		<method name="cursorStringToInsertHelper(Landroid/database/Cursor;Ljava/lang/String;Landroid/database/DatabaseUtils$InsertHelper;I)V" />
+		<method name="dumpCurrentRow(Landroid/database/Cursor;)V" />
+		<method name="dumpCurrentRow(Landroid/database/Cursor;Ljava/io/PrintStream;)V" />
+		<method name="dumpCurrentRow(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V" />
+		<method name="dumpCurrentRowToString(Landroid/database/Cursor;)Ljava/lang/String;" />
+		<method name="dumpCursor(Landroid/database/Cursor;)V" />
+		<method name="dumpCursor(Landroid/database/Cursor;Ljava/io/PrintStream;)V" />
+		<method name="dumpCursor(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V" />
+		<method name="dumpCursorToString(Landroid/database/Cursor;)Ljava/lang/String;" />
+		<method name="getCollationKey(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getHexCollationKey(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getSqlStatementType(Ljava/lang/String;)I" since="11" />
+		<method name="longForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)J" />
+		<method name="longForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)J" />
+		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)J" />
+		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;)J" since="11" />
+		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)J" since="11" />
+		<method name="readExceptionFromParcel(Landroid/os/Parcel;)V" />
+		<method name="readExceptionWithFileNotFoundExceptionFromParcel(Landroid/os/Parcel;)V" />
+		<method name="readExceptionWithOperationApplicationExceptionFromParcel(Landroid/os/Parcel;)V" since="5" />
+		<method name="sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="stringForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="stringForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="writeExceptionToParcel(Landroid/os/Parcel;Ljava/lang/Exception;)V" />
+		<field name="STATEMENT_ABORT" since="11" />
+		<field name="STATEMENT_ATTACH" since="11" />
+		<field name="STATEMENT_BEGIN" since="11" />
+		<field name="STATEMENT_COMMIT" since="11" />
+		<field name="STATEMENT_DDL" since="11" />
+		<field name="STATEMENT_OTHER" since="11" />
+		<field name="STATEMENT_PRAGMA" since="11" />
+		<field name="STATEMENT_SELECT" since="11" />
+		<field name="STATEMENT_UNPREPARED" since="11" />
+		<field name="STATEMENT_UPDATE" since="11" />
+	</class>
+	<class name="android/database/DatabaseUtils$InsertHelper" since="1" deprecated="17">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)V" deprecated="29" />
+		<method name="bind(ID)V" deprecated="29" />
+		<method name="bind(IF)V" deprecated="29" />
+		<method name="bind(II)V" deprecated="29" />
+		<method name="bind(IJ)V" deprecated="29" />
+		<method name="bind(ILjava/lang/String;)V" deprecated="29" />
+		<method name="bind(IZ)V" deprecated="29" />
+		<method name="bind(I[B)V" deprecated="29" />
+		<method name="bindNull(I)V" deprecated="29" />
+		<method name="close()V" deprecated="29" />
+		<method name="execute()J" deprecated="29" />
+		<method name="getColumnIndex(Ljava/lang/String;)I" deprecated="29" />
+		<method name="insert(Landroid/content/ContentValues;)J" deprecated="29" />
+		<method name="prepareForInsert()V" deprecated="29" />
+		<method name="prepareForReplace()V" deprecated="29" />
+		<method name="replace(Landroid/content/ContentValues;)J" deprecated="29" />
+		<field name="TABLE_INFO_PRAGMA_DEFAULT_INDEX" removed="17" />
+	</class>
+	<class name="android/database/DefaultDatabaseErrorHandler" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/database/DatabaseErrorHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/database/MatrixCursor" since="1">
+		<extends name="android/database/AbstractCursor" />
+		<method name="&lt;init&gt;([Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;I)V" />
+		<method name="addRow(Ljava/lang/Iterable;)V" />
+		<method name="addRow([Ljava/lang/Object;)V" />
+		<method name="newRow()Landroid/database/MatrixCursor$RowBuilder;" />
+	</class>
+	<class name="android/database/MatrixCursor$RowBuilder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;" />
+		<method name="add(Ljava/lang/String;Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;" since="19" />
+	</class>
+	<class name="android/database/MergeCursor" since="1">
+		<extends name="android/database/AbstractCursor" />
+		<method name="&lt;init&gt;([Landroid/database/Cursor;)V" />
+	</class>
+	<class name="android/database/Observable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="registerObserver(Ljava/lang/Object;)V" />
+		<method name="unregisterAll()V" />
+		<method name="unregisterObserver(Ljava/lang/Object;)V" />
+		<field name="mObservers" />
+	</class>
+	<class name="android/database/SQLException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16" />
+	</class>
+	<class name="android/database/StaleDataException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteAbortException" since="1">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteAccessPermException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteBlobTooBigException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteCantOpenDatabaseException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteClosable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="16" />
+		<method name="&lt;init&gt;()V" />
+		<method name="acquireReference()V" />
+		<method name="onAllReferencesReleased()V" />
+		<method name="onAllReferencesReleasedFromContainer()V" deprecated="16" />
+		<method name="releaseReference()V" />
+		<method name="releaseReferenceFromContainer()V" deprecated="16" />
+	</class>
+	<class name="android/database/sqlite/SQLiteConstraintException" since="1">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteCursor" since="1">
+		<extends name="android/database/AbstractWindowedCursor" />
+		<method name="&lt;init&gt;(Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" since="11" />
+		<method name="&lt;init&gt;(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" deprecated="15" />
+		<method name="getDatabase()Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="setFillWindowForwardOnly(Z)V" since="28" />
+		<method name="setSelectionArguments([Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteCursorDriver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="cursorClosed()V" />
+		<method name="cursorDeactivated()V" />
+		<method name="cursorRequeried(Landroid/database/Cursor;)V" />
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="setBindArguments([Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase" since="1">
+		<extends name="android/database/sqlite/SQLiteClosable" />
+		<method name="beginTransaction()V" />
+		<method name="beginTransactionNonExclusive()V" since="11" />
+		<method name="beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V" since="5" />
+		<method name="beginTransactionWithListenerNonExclusive(Landroid/database/sqlite/SQLiteTransactionListener;)V" since="11" />
+		<method name="close()V" removed="16" />
+		<method name="compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;" />
+		<method name="create(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="createInMemory(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;" since="27" />
+		<method name="delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I" />
+		<method name="deleteDatabase(Ljava/io/File;)Z" since="16" />
+		<method name="disableWriteAheadLogging()V" since="16" />
+		<method name="enableWriteAheadLogging()Z" since="11" />
+		<method name="endTransaction()V" />
+		<method name="execPerConnectionSQL(Ljava/lang/String;[Ljava/lang/Object;)V" since="30" />
+		<method name="execSQL(Ljava/lang/String;)V" />
+		<method name="execSQL(Ljava/lang/String;[Ljava/lang/Object;)V" />
+		<method name="findEditTable(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getAttachedDbs()Ljava/util/List;" since="11" />
+		<method name="getMaximumSize()J" />
+		<method name="getPageSize()J" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getSyncedTables()Ljava/util/Map;" deprecated="15" />
+		<method name="getVersion()I" />
+		<method name="inTransaction()Z" />
+		<method name="insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J" />
+		<method name="insertOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J" />
+		<method name="insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J" since="8" />
+		<method name="isDatabaseIntegrityOk()Z" since="11" />
+		<method name="isDbLockedByCurrentThread()Z" />
+		<method name="isDbLockedByOtherThreads()Z" deprecated="16" />
+		<method name="isOpen()Z" />
+		<method name="isReadOnly()Z" />
+		<method name="isWriteAheadLoggingEnabled()Z" since="16" />
+		<method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;)V" deprecated="15" />
+		<method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15" />
+		<method name="needUpgrade(I)Z" />
+		<method name="openDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;" since="27" />
+		<method name="openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11" />
+		<method name="openOrCreateDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="openOrCreateDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="openOrCreateDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11" />
+		<method name="query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="rawQuery(Ljava/lang/String;[Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="releaseMemory()I" />
+		<method name="replace(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J" />
+		<method name="replaceOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J" />
+		<method name="setCustomAggregateFunction(Ljava/lang/String;Ljava/util/function/BinaryOperator;)V" since="30" />
+		<method name="setCustomScalarFunction(Ljava/lang/String;Ljava/util/function/UnaryOperator;)V" since="30" />
+		<method name="setForeignKeyConstraintsEnabled(Z)V" since="16" />
+		<method name="setLocale(Ljava/util/Locale;)V" />
+		<method name="setLockingEnabled(Z)V" deprecated="16" />
+		<method name="setMaxSqlCacheSize(I)V" since="11" />
+		<method name="setMaximumSize(J)J" />
+		<method name="setPageSize(J)V" />
+		<method name="setTransactionSuccessful()V" />
+		<method name="setVersion(I)V" />
+		<method name="update(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I" />
+		<method name="updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I" since="8" />
+		<method name="validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V" since="24" />
+		<method name="yieldIfContended()Z" deprecated="15" />
+		<method name="yieldIfContendedSafely()Z" since="3" />
+		<method name="yieldIfContendedSafely(J)Z" since="5" />
+		<field name="CONFLICT_ABORT" since="8" />
+		<field name="CONFLICT_FAIL" since="8" />
+		<field name="CONFLICT_IGNORE" since="8" />
+		<field name="CONFLICT_NONE" since="8" />
+		<field name="CONFLICT_REPLACE" since="8" />
+		<field name="CONFLICT_ROLLBACK" since="8" />
+		<field name="CREATE_IF_NECESSARY" />
+		<field name="ENABLE_WRITE_AHEAD_LOGGING" since="16" />
+		<field name="MAX_SQL_CACHE_SIZE" since="11" />
+		<field name="NO_LOCALIZED_COLLATORS" />
+		<field name="OPEN_READONLY" />
+		<field name="OPEN_READWRITE" />
+		<field name="SQLITE_MAX_LIKE_PATTERN_LENGTH" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase$CursorFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase$OpenParams" since="27">
+		<extends name="java/lang/Object" />
+		<method name="getCursorFactory()Landroid/database/sqlite/SQLiteDatabase$CursorFactory;" />
+		<method name="getErrorHandler()Landroid/database/DatabaseErrorHandler;" />
+		<method name="getIdleConnectionTimeout()J" />
+		<method name="getJournalMode()Ljava/lang/String;" since="28" />
+		<method name="getLookasideSlotCount()I" />
+		<method name="getLookasideSlotSize()I" />
+		<method name="getOpenFlags()I" />
+		<method name="getSynchronousMode()Ljava/lang/String;" since="28" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase$OpenParams$Builder" since="27">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V" />
+		<method name="addOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" />
+		<method name="build()Landroid/database/sqlite/SQLiteDatabase$OpenParams;" />
+		<method name="removeOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" />
+		<method name="setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" />
+		<method name="setErrorHandler(Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" />
+		<method name="setIdleConnectionTimeout(J)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" deprecated="29" />
+		<method name="setJournalMode(Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" since="28" />
+		<method name="setLookasideConfig(II)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" />
+		<method name="setOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" />
+		<method name="setSynchronousMode(Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" since="28" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabaseCorruptException" since="1">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabaseLockedException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDatatypeMismatchException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDiskIOException" since="1">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteDoneException" since="1">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteException" since="1">
+		<extends name="android/database/SQLException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16" />
+	</class>
+	<class name="android/database/sqlite/SQLiteFullException" since="1">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteMisuseException" since="1">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteOpenHelper" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)V" since="11" />
+		<method name="close()V" />
+		<method name="getDatabaseName()Ljava/lang/String;" since="14" />
+		<method name="getReadableDatabase()Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="getWritableDatabase()Landroid/database/sqlite/SQLiteDatabase;" />
+		<method name="onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V" since="16" />
+		<method name="onCreate(Landroid/database/sqlite/SQLiteDatabase;)V" />
+		<method name="onDowngrade(Landroid/database/sqlite/SQLiteDatabase;II)V" since="11" />
+		<method name="onOpen(Landroid/database/sqlite/SQLiteDatabase;)V" />
+		<method name="onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V" />
+		<method name="setIdleConnectionTimeout(J)V" since="27" deprecated="29" />
+		<method name="setLookasideConfig(II)V" since="27" />
+		<method name="setOpenParams(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28" />
+		<method name="setWriteAheadLoggingEnabled(Z)V" since="16" />
+	</class>
+	<class name="android/database/sqlite/SQLiteOutOfMemoryException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteProgram" since="1">
+		<extends name="android/database/sqlite/SQLiteClosable" />
+		<method name="bindAllArgsAsStrings([Ljava/lang/String;)V" since="11" />
+		<method name="bindBlob(I[B)V" />
+		<method name="bindDouble(ID)V" />
+		<method name="bindLong(IJ)V" />
+		<method name="bindNull(I)V" />
+		<method name="bindString(ILjava/lang/String;)V" />
+		<method name="clearBindings()V" />
+		<method name="close()V" removed="16" />
+		<method name="compile(Ljava/lang/String;Z)V" deprecated="15" removed="16" />
+		<method name="getUniqueId()I" deprecated="15" />
+		<method name="native_bind_blob(I[B)V" removed="16" />
+		<method name="native_bind_double(ID)V" removed="16" />
+		<method name="native_bind_long(IJ)V" removed="16" />
+		<method name="native_bind_null(I)V" removed="16" />
+		<method name="native_bind_string(ILjava/lang/String;)V" removed="16" />
+		<method name="native_compile(Ljava/lang/String;)V" deprecated="15" removed="16" />
+		<method name="native_finalize()V" deprecated="15" removed="16" />
+		<field name="mDatabase" deprecated="15" removed="16" />
+		<field name="nHandle" deprecated="15" removed="16" />
+		<field name="nStatement" deprecated="15" removed="16" />
+	</class>
+	<class name="android/database/sqlite/SQLiteQuery" since="1">
+		<extends name="android/database/sqlite/SQLiteProgram" />
+	</class>
+	<class name="android/database/sqlite/SQLiteQueryBuilder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V" />
+		<method name="appendWhere(Ljava/lang/CharSequence;)V" />
+		<method name="appendWhereEscapeString(Ljava/lang/String;)V" />
+		<method name="appendWhereStandalone(Ljava/lang/CharSequence;)V" since="29" />
+		<method name="buildQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11" />
+		<method name="buildQuery([Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="buildQueryString(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="buildUnionQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11" />
+		<method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="delete(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)I" since="29" />
+		<method name="getCursorFactory()Landroid/database/sqlite/SQLiteDatabase$CursorFactory;" since="29" />
+		<method name="getProjectionGreylist()Ljava/util/Collection;" since="30" />
+		<method name="getProjectionMap()Ljava/util/Map;" since="29" />
+		<method name="getTables()Ljava/lang/String;" />
+		<method name="insert(Landroid/database/sqlite/SQLiteDatabase;Landroid/content/ContentValues;)J" since="30" />
+		<method name="isDistinct()Z" since="29" />
+		<method name="isStrict()Z" since="29" />
+		<method name="isStrictColumns()Z" since="30" />
+		<method name="isStrictGrammar()Z" since="30" />
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16" />
+		<method name="setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)V" />
+		<method name="setDistinct(Z)V" />
+		<method name="setProjectionGreylist(Ljava/util/Collection;)V" since="30" />
+		<method name="setProjectionMap(Ljava/util/Map;)V" />
+		<method name="setStrict(Z)V" since="14" />
+		<method name="setStrictColumns(Z)V" since="30" />
+		<method name="setStrictGrammar(Z)V" since="30" />
+		<method name="setTables(Ljava/lang/String;)V" />
+		<method name="update(Landroid/database/sqlite/SQLiteDatabase;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I" since="29" />
+	</class>
+	<class name="android/database/sqlite/SQLiteReadOnlyDatabaseException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteStatement" since="1">
+		<extends name="android/database/sqlite/SQLiteProgram" />
+		<method name="execute()V" />
+		<method name="executeInsert()J" />
+		<method name="executeUpdateDelete()I" since="11" />
+		<method name="simpleQueryForBlobFileDescriptor()Landroid/os/ParcelFileDescriptor;" since="11" />
+		<method name="simpleQueryForLong()J" />
+		<method name="simpleQueryForString()Ljava/lang/String;" />
+	</class>
+	<class name="android/database/sqlite/SQLiteTableLockedException" since="11">
+		<extends name="android/database/sqlite/SQLiteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/database/sqlite/SQLiteTransactionListener" since="5">
+		<extends name="java/lang/Object" />
+		<method name="onBegin()V" />
+		<method name="onCommit()V" />
+		<method name="onRollback()V" />
+	</class>
+	<class name="android/drm/DrmConvertedStatus" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I[BI)V" deprecated="30" />
+		<field name="STATUS_ERROR" deprecated="30" />
+		<field name="STATUS_INPUTDATA_ERROR" deprecated="30" />
+		<field name="STATUS_OK" deprecated="30" />
+		<field name="convertedData" deprecated="30" />
+		<field name="offset" deprecated="30" />
+		<field name="statusCode" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmErrorEvent" since="11" deprecated="30">
+		<extends name="android/drm/DrmEvent" />
+		<method name="&lt;init&gt;(IILjava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(IILjava/lang/String;Ljava/util/HashMap;)V" since="12" deprecated="30" />
+		<field name="TYPE_ACQUIRE_DRM_INFO_FAILED" since="12" deprecated="30" />
+		<field name="TYPE_NOT_SUPPORTED" deprecated="30" />
+		<field name="TYPE_NO_INTERNET_CONNECTION" deprecated="30" />
+		<field name="TYPE_OUT_OF_MEMORY" deprecated="30" />
+		<field name="TYPE_PROCESS_DRM_INFO_FAILED" deprecated="30" />
+		<field name="TYPE_REMOVE_ALL_RIGHTS_FAILED" deprecated="30" />
+		<field name="TYPE_RIGHTS_NOT_INSTALLED" deprecated="30" />
+		<field name="TYPE_RIGHTS_RENEWAL_NOT_ALLOWED" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmEvent" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IILjava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(IILjava/lang/String;Ljava/util/HashMap;)V" since="12" deprecated="30" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;" since="12" deprecated="30" />
+		<method name="getMessage()Ljava/lang/String;" deprecated="30" />
+		<method name="getType()I" deprecated="30" />
+		<method name="getUniqueId()I" deprecated="30" />
+		<field name="DRM_INFO_OBJECT" since="12" deprecated="30" />
+		<field name="DRM_INFO_STATUS_OBJECT" deprecated="30" />
+		<field name="TYPE_ALL_RIGHTS_REMOVED" deprecated="30" />
+		<field name="TYPE_DRM_INFO_PROCESSED" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmInfo" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILjava/lang/String;Ljava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(I[BLjava/lang/String;)V" deprecated="30" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" deprecated="30" />
+		<method name="getData()[B" deprecated="30" />
+		<method name="getInfoType()I" deprecated="30" />
+		<method name="getMimeType()Ljava/lang/String;" deprecated="30" />
+		<method name="iterator()Ljava/util/Iterator;" deprecated="30" />
+		<method name="keyIterator()Ljava/util/Iterator;" deprecated="30" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmInfoEvent" since="11" deprecated="30">
+		<extends name="android/drm/DrmEvent" />
+		<method name="&lt;init&gt;(IILjava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(IILjava/lang/String;Ljava/util/HashMap;)V" since="12" deprecated="30" />
+		<field name="TYPE_ACCOUNT_ALREADY_REGISTERED" deprecated="30" />
+		<field name="TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT" deprecated="30" />
+		<field name="TYPE_REMOVE_RIGHTS" deprecated="30" />
+		<field name="TYPE_RIGHTS_INSTALLED" deprecated="30" />
+		<field name="TYPE_RIGHTS_REMOVED" since="12" deprecated="30" />
+		<field name="TYPE_WAIT_FOR_RIGHTS" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmInfoRequest" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" deprecated="30" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" deprecated="30" />
+		<method name="getInfoType()I" deprecated="30" />
+		<method name="getMimeType()Ljava/lang/String;" deprecated="30" />
+		<method name="iterator()Ljava/util/Iterator;" deprecated="30" />
+		<method name="keyIterator()Ljava/util/Iterator;" deprecated="30" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="30" />
+		<field name="ACCOUNT_ID" deprecated="30" />
+		<field name="SUBSCRIPTION_ID" deprecated="30" />
+		<field name="TYPE_REGISTRATION_INFO" deprecated="30" />
+		<field name="TYPE_RIGHTS_ACQUISITION_INFO" deprecated="30" />
+		<field name="TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO" deprecated="30" />
+		<field name="TYPE_UNREGISTRATION_INFO" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmInfoStatus" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IILandroid/drm/ProcessedData;Ljava/lang/String;)V" deprecated="30" />
+		<field name="STATUS_ERROR" deprecated="30" />
+		<field name="STATUS_OK" deprecated="30" />
+		<field name="data" deprecated="30" />
+		<field name="infoType" deprecated="30" />
+		<field name="mimeType" deprecated="30" />
+		<field name="statusCode" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmManagerClient" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="24" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="30" />
+		<method name="acquireDrmInfo(Landroid/drm/DrmInfoRequest;)Landroid/drm/DrmInfo;" deprecated="30" />
+		<method name="acquireRights(Landroid/drm/DrmInfoRequest;)I" deprecated="30" />
+		<method name="canHandle(Landroid/net/Uri;Ljava/lang/String;)Z" deprecated="30" />
+		<method name="canHandle(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="30" />
+		<method name="checkRightsStatus(Landroid/net/Uri;)I" deprecated="30" />
+		<method name="checkRightsStatus(Landroid/net/Uri;I)I" deprecated="30" />
+		<method name="checkRightsStatus(Ljava/lang/String;)I" deprecated="30" />
+		<method name="checkRightsStatus(Ljava/lang/String;I)I" deprecated="30" />
+		<method name="closeConvertSession(I)Landroid/drm/DrmConvertedStatus;" deprecated="30" />
+		<method name="convertData(I[B)Landroid/drm/DrmConvertedStatus;" deprecated="30" />
+		<method name="getAvailableDrmEngines()[Ljava/lang/String;" deprecated="30" />
+		<method name="getAvailableDrmSupportInfo()Ljava/util/Collection;" since="30" deprecated="30" />
+		<method name="getConstraints(Landroid/net/Uri;I)Landroid/content/ContentValues;" deprecated="30" />
+		<method name="getConstraints(Ljava/lang/String;I)Landroid/content/ContentValues;" deprecated="30" />
+		<method name="getDrmObjectType(Landroid/net/Uri;Ljava/lang/String;)I" deprecated="30" />
+		<method name="getDrmObjectType(Ljava/lang/String;Ljava/lang/String;)I" deprecated="30" />
+		<method name="getMetadata(Landroid/net/Uri;)Landroid/content/ContentValues;" deprecated="30" />
+		<method name="getMetadata(Ljava/lang/String;)Landroid/content/ContentValues;" deprecated="30" />
+		<method name="getOriginalMimeType(Landroid/net/Uri;)Ljava/lang/String;" deprecated="30" />
+		<method name="getOriginalMimeType(Ljava/lang/String;)Ljava/lang/String;" deprecated="30" />
+		<method name="openConvertSession(Ljava/lang/String;)I" deprecated="30" />
+		<method name="processDrmInfo(Landroid/drm/DrmInfo;)I" deprecated="30" />
+		<method name="release()V" since="16" deprecated="24" />
+		<method name="removeAllRights()I" deprecated="30" />
+		<method name="removeRights(Landroid/net/Uri;)I" deprecated="30" />
+		<method name="removeRights(Ljava/lang/String;)I" deprecated="30" />
+		<method name="saveRights(Landroid/drm/DrmRights;Ljava/lang/String;Ljava/lang/String;)I" deprecated="30" />
+		<method name="setOnErrorListener(Landroid/drm/DrmManagerClient$OnErrorListener;)V" deprecated="30" />
+		<method name="setOnEventListener(Landroid/drm/DrmManagerClient$OnEventListener;)V" deprecated="30" />
+		<method name="setOnInfoListener(Landroid/drm/DrmManagerClient$OnInfoListener;)V" deprecated="30" />
+		<field name="ERROR_NONE" deprecated="30" />
+		<field name="ERROR_UNKNOWN" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmManagerClient$OnErrorListener" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="onError(Landroid/drm/DrmManagerClient;Landroid/drm/DrmErrorEvent;)V" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmManagerClient$OnEventListener" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="onEvent(Landroid/drm/DrmManagerClient;Landroid/drm/DrmEvent;)V" since="12" deprecated="30" />
+		<method name="onEvent(Landroid/drm/DrmManagerClient;Landroid/drm/DrmEvent;Ljava/util/HashMap;)V" removed="12" />
+	</class>
+	<class name="android/drm/DrmManagerClient$OnInfoListener" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="onInfo(Landroid/drm/DrmManagerClient;Landroid/drm/DrmInfoEvent;)V" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmRights" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/drm/ProcessedData;Ljava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30" />
+		<method name="getAccountId()Ljava/lang/String;" deprecated="30" />
+		<method name="getData()[B" deprecated="30" />
+		<method name="getMimeType()Ljava/lang/String;" deprecated="30" />
+		<method name="getSubscriptionId()Ljava/lang/String;" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmStore" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="16" />
+	</class>
+	<class name="android/drm/DrmStore$Action" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="16" />
+		<field name="DEFAULT" deprecated="30" />
+		<field name="DISPLAY" deprecated="30" />
+		<field name="EXECUTE" deprecated="30" />
+		<field name="OUTPUT" deprecated="30" />
+		<field name="PLAY" deprecated="30" />
+		<field name="PREVIEW" deprecated="30" />
+		<field name="RINGTONE" deprecated="30" />
+		<field name="TRANSFER" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmStore$ConstraintsColumns" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<field name="EXTENDED_METADATA" deprecated="30" />
+		<field name="LICENSE_AVAILABLE_TIME" deprecated="30" />
+		<field name="LICENSE_EXPIRY_TIME" deprecated="30" />
+		<field name="LICENSE_START_TIME" deprecated="30" />
+		<field name="MAX_REPEAT_COUNT" deprecated="30" />
+		<field name="REMAINING_REPEAT_COUNT" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmStore$DrmObjectType" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="16" />
+		<field name="CONTENT" deprecated="30" />
+		<field name="RIGHTS_OBJECT" deprecated="30" />
+		<field name="TRIGGER_OBJECT" deprecated="30" />
+		<field name="UNKNOWN" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmStore$Playback" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="16" />
+		<field name="PAUSE" deprecated="30" />
+		<field name="RESUME" deprecated="30" />
+		<field name="START" deprecated="30" />
+		<field name="STOP" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmStore$RightsStatus" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="16" />
+		<field name="RIGHTS_EXPIRED" deprecated="30" />
+		<field name="RIGHTS_INVALID" deprecated="30" />
+		<field name="RIGHTS_NOT_ACQUIRED" deprecated="30" />
+		<field name="RIGHTS_VALID" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmSupportInfo" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="addFileSuffix(Ljava/lang/String;)V" deprecated="30" />
+		<method name="addMimeType(Ljava/lang/String;)V" deprecated="30" />
+		<method name="getDescriprition()Ljava/lang/String;" deprecated="16" />
+		<method name="getDescription()Ljava/lang/String;" since="16" deprecated="30" />
+		<method name="getFileSuffixIterator()Ljava/util/Iterator;" deprecated="30" />
+		<method name="getMimeTypeIterator()Ljava/util/Iterator;" deprecated="30" />
+		<method name="setDescription(Ljava/lang/String;)V" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmUtils" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="getExtendedMetadataParser([B)Landroid/drm/DrmUtils$ExtendedMetadataParser;" deprecated="30" />
+	</class>
+	<class name="android/drm/DrmUtils$ExtendedMetadataParser" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/String;" deprecated="30" />
+		<method name="iterator()Ljava/util/Iterator;" deprecated="30" />
+		<method name="keyIterator()Ljava/util/Iterator;" deprecated="30" />
+	</class>
+	<class name="android/drm/ProcessedData" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="getAccountId()Ljava/lang/String;" deprecated="30" />
+		<method name="getData()[B" deprecated="30" />
+		<method name="getSubscriptionId()Ljava/lang/String;" deprecated="30" />
+	</class>
+	<class name="android/gesture/Gesture" since="4">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addStroke(Landroid/gesture/GestureStroke;)V" />
+		<method name="getBoundingBox()Landroid/graphics/RectF;" />
+		<method name="getID()J" />
+		<method name="getLength()F" />
+		<method name="getStrokes()Ljava/util/ArrayList;" />
+		<method name="getStrokesCount()I" />
+		<method name="toBitmap(IIII)Landroid/graphics/Bitmap;" />
+		<method name="toBitmap(IIIII)Landroid/graphics/Bitmap;" />
+		<method name="toPath()Landroid/graphics/Path;" />
+		<method name="toPath(IIII)Landroid/graphics/Path;" />
+		<method name="toPath(Landroid/graphics/Path;)Landroid/graphics/Path;" />
+		<method name="toPath(Landroid/graphics/Path;IIII)Landroid/graphics/Path;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/gesture/GestureLibraries" since="4">
+		<extends name="java/lang/Object" />
+		<method name="fromFile(Ljava/io/File;)Landroid/gesture/GestureLibrary;" />
+		<method name="fromFile(Ljava/lang/String;)Landroid/gesture/GestureLibrary;" />
+		<method name="fromFileDescriptor(Landroid/os/ParcelFileDescriptor;)Landroid/gesture/GestureLibrary;" since="30" />
+		<method name="fromPrivateFile(Landroid/content/Context;Ljava/lang/String;)Landroid/gesture/GestureLibrary;" />
+		<method name="fromRawResource(Landroid/content/Context;I)Landroid/gesture/GestureLibrary;" />
+	</class>
+	<class name="android/gesture/GestureLibrary" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V" />
+		<method name="getGestureEntries()Ljava/util/Set;" />
+		<method name="getGestures(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="getOrientationStyle()I" />
+		<method name="getSequenceType()I" />
+		<method name="isReadOnly()Z" />
+		<method name="load()Z" />
+		<method name="recognize(Landroid/gesture/Gesture;)Ljava/util/ArrayList;" />
+		<method name="removeEntry(Ljava/lang/String;)V" />
+		<method name="removeGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V" />
+		<method name="save()Z" />
+		<method name="setOrientationStyle(I)V" />
+		<method name="setSequenceType(I)V" />
+		<field name="mStore" />
+	</class>
+	<class name="android/gesture/GestureOverlayView" since="4">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="addOnGestureListener(Landroid/gesture/GestureOverlayView$OnGestureListener;)V" />
+		<method name="addOnGesturePerformedListener(Landroid/gesture/GestureOverlayView$OnGesturePerformedListener;)V" />
+		<method name="addOnGesturingListener(Landroid/gesture/GestureOverlayView$OnGesturingListener;)V" />
+		<method name="cancelClearAnimation()V" />
+		<method name="cancelGesture()V" />
+		<method name="clear(Z)V" />
+		<method name="getCurrentStroke()Ljava/util/ArrayList;" />
+		<method name="getFadeOffset()J" />
+		<method name="getGesture()Landroid/gesture/Gesture;" />
+		<method name="getGestureColor()I" />
+		<method name="getGesturePath()Landroid/graphics/Path;" />
+		<method name="getGesturePath(Landroid/graphics/Path;)Landroid/graphics/Path;" />
+		<method name="getGestureStrokeAngleThreshold()F" />
+		<method name="getGestureStrokeLengthThreshold()F" />
+		<method name="getGestureStrokeSquarenessTreshold()F" />
+		<method name="getGestureStrokeType()I" />
+		<method name="getGestureStrokeWidth()F" />
+		<method name="getOrientation()I" />
+		<method name="getUncertainGestureColor()I" />
+		<method name="isEventsInterceptionEnabled()Z" />
+		<method name="isFadeEnabled()Z" />
+		<method name="isGestureVisible()Z" />
+		<method name="isGesturing()Z" />
+		<method name="removeAllOnGestureListeners()V" />
+		<method name="removeAllOnGesturePerformedListeners()V" />
+		<method name="removeAllOnGesturingListeners()V" />
+		<method name="removeOnGestureListener(Landroid/gesture/GestureOverlayView$OnGestureListener;)V" />
+		<method name="removeOnGesturePerformedListener(Landroid/gesture/GestureOverlayView$OnGesturePerformedListener;)V" />
+		<method name="removeOnGesturingListener(Landroid/gesture/GestureOverlayView$OnGesturingListener;)V" />
+		<method name="setEventsInterceptionEnabled(Z)V" />
+		<method name="setFadeEnabled(Z)V" />
+		<method name="setFadeOffset(J)V" />
+		<method name="setGesture(Landroid/gesture/Gesture;)V" />
+		<method name="setGestureColor(I)V" />
+		<method name="setGestureStrokeAngleThreshold(F)V" />
+		<method name="setGestureStrokeLengthThreshold(F)V" />
+		<method name="setGestureStrokeSquarenessTreshold(F)V" />
+		<method name="setGestureStrokeType(I)V" />
+		<method name="setGestureStrokeWidth(F)V" />
+		<method name="setGestureVisible(Z)V" />
+		<method name="setOrientation(I)V" />
+		<method name="setUncertainGestureColor(I)V" />
+		<field name="GESTURE_STROKE_TYPE_MULTIPLE" />
+		<field name="GESTURE_STROKE_TYPE_SINGLE" />
+		<field name="ORIENTATION_HORIZONTAL" />
+		<field name="ORIENTATION_VERTICAL" />
+	</class>
+	<class name="android/gesture/GestureOverlayView$OnGestureListener" since="4">
+		<extends name="java/lang/Object" />
+		<method name="onGesture(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V" />
+		<method name="onGestureCancelled(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V" />
+		<method name="onGestureEnded(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V" />
+		<method name="onGestureStarted(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V" />
+	</class>
+	<class name="android/gesture/GestureOverlayView$OnGesturePerformedListener" since="4">
+		<extends name="java/lang/Object" />
+		<method name="onGesturePerformed(Landroid/gesture/GestureOverlayView;Landroid/gesture/Gesture;)V" />
+	</class>
+	<class name="android/gesture/GestureOverlayView$OnGesturingListener" since="4">
+		<extends name="java/lang/Object" />
+		<method name="onGesturingEnded(Landroid/gesture/GestureOverlayView;)V" />
+		<method name="onGesturingStarted(Landroid/gesture/GestureOverlayView;)V" />
+	</class>
+	<class name="android/gesture/GesturePoint" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(FFJ)V" />
+		<field name="timestamp" />
+		<field name="x" />
+		<field name="y" />
+	</class>
+	<class name="android/gesture/GestureStore" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V" />
+		<method name="getGestureEntries()Ljava/util/Set;" />
+		<method name="getGestures(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="getOrientationStyle()I" />
+		<method name="getSequenceType()I" />
+		<method name="hasChanged()Z" />
+		<method name="load(Ljava/io/InputStream;)V" />
+		<method name="load(Ljava/io/InputStream;Z)V" />
+		<method name="recognize(Landroid/gesture/Gesture;)Ljava/util/ArrayList;" />
+		<method name="removeEntry(Ljava/lang/String;)V" />
+		<method name="removeGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V" />
+		<method name="save(Ljava/io/OutputStream;)V" />
+		<method name="save(Ljava/io/OutputStream;Z)V" />
+		<method name="setOrientationStyle(I)V" />
+		<method name="setSequenceType(I)V" />
+		<field name="ORIENTATION_INVARIANT" />
+		<field name="ORIENTATION_SENSITIVE" />
+		<field name="SEQUENCE_INVARIANT" />
+		<field name="SEQUENCE_SENSITIVE" />
+	</class>
+	<class name="android/gesture/GestureStroke" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/util/ArrayList;)V" />
+		<method name="clearPath()V" />
+		<method name="computeOrientedBoundingBox()Landroid/gesture/OrientedBoundingBox;" />
+		<method name="getPath()Landroid/graphics/Path;" />
+		<method name="toPath(FFI)Landroid/graphics/Path;" />
+		<field name="boundingBox" />
+		<field name="length" />
+		<field name="points" />
+	</class>
+	<class name="android/gesture/GestureUtils" since="8">
+		<extends name="java/lang/Object" />
+		<method name="computeOrientedBoundingBox(Ljava/util/ArrayList;)Landroid/gesture/OrientedBoundingBox;" />
+		<method name="computeOrientedBoundingBox([F)Landroid/gesture/OrientedBoundingBox;" />
+		<method name="spatialSampling(Landroid/gesture/Gesture;I)[F" />
+		<method name="spatialSampling(Landroid/gesture/Gesture;IZ)[F" />
+		<method name="temporalSampling(Landroid/gesture/GestureStroke;I)[F" />
+	</class>
+	<class name="android/gesture/OrientedBoundingBox" since="4">
+		<extends name="java/lang/Object" />
+		<field name="centerX" />
+		<field name="centerY" />
+		<field name="height" />
+		<field name="orientation" />
+		<field name="squareness" />
+		<field name="width" />
+	</class>
+	<class name="android/gesture/Prediction" since="4">
+		<extends name="java/lang/Object" />
+		<field name="name" />
+		<field name="score" />
+	</class>
+	<class name="android/graphics/AvoidXfermode" since="1" deprecated="16" removed="24">
+		<extends name="android/graphics/Xfermode" />
+		<method name="&lt;init&gt;(IILandroid/graphics/AvoidXfermode$Mode;)V" />
+	</class>
+	<class name="android/graphics/AvoidXfermode$Mode" since="1" removed="24">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/AvoidXfermode$Mode;" />
+		<method name="values()[Landroid/graphics/AvoidXfermode$Mode;" />
+		<field name="AVOID" />
+		<field name="TARGET" />
+	</class>
+	<class name="android/graphics/Bitmap" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="asShared()Landroid/graphics/Bitmap;" since="31" />
+		<method name="compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z" />
+		<method name="copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;" />
+		<method name="copyPixelsFromBuffer(Ljava/nio/Buffer;)V" since="3" />
+		<method name="copyPixelsToBuffer(Ljava/nio/Buffer;)V" />
+		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" />
+		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;" since="26" />
+		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="26" />
+		<method name="createBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;" />
+		<method name="createBitmap(Landroid/graphics/Bitmap;IIII)Landroid/graphics/Bitmap;" />
+		<method name="createBitmap(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;" />
+		<method name="createBitmap(Landroid/graphics/Picture;)Landroid/graphics/Bitmap;" since="28" />
+		<method name="createBitmap(Landroid/graphics/Picture;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="28" />
+		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17" />
+		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;" since="26" />
+		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="26" />
+		<method name="createBitmap(Landroid/util/DisplayMetrics;[IIIIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17" />
+		<method name="createBitmap(Landroid/util/DisplayMetrics;[IIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17" />
+		<method name="createBitmap([IIIIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" />
+		<method name="createBitmap([IIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" />
+		<method name="createScaledBitmap(Landroid/graphics/Bitmap;IIZ)Landroid/graphics/Bitmap;" />
+		<method name="eraseColor(I)V" />
+		<method name="eraseColor(J)V" since="29" />
+		<method name="extractAlpha()Landroid/graphics/Bitmap;" />
+		<method name="extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;" />
+		<method name="getAllocationByteCount()I" since="19" />
+		<method name="getByteCount()I" since="12" />
+		<method name="getColor(II)Landroid/graphics/Color;" since="29" />
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;" since="26" />
+		<method name="getConfig()Landroid/graphics/Bitmap$Config;" />
+		<method name="getDensity()I" since="4" />
+		<method name="getGenerationId()I" since="12" />
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" since="31" />
+		<method name="getHeight()I" />
+		<method name="getNinePatchChunk()[B" />
+		<method name="getPixel(II)I" />
+		<method name="getPixels([IIIIIII)V" />
+		<method name="getRowBytes()I" />
+		<method name="getScaledHeight(I)I" since="4" />
+		<method name="getScaledHeight(Landroid/graphics/Canvas;)I" since="4" />
+		<method name="getScaledHeight(Landroid/util/DisplayMetrics;)I" since="4" />
+		<method name="getScaledWidth(I)I" since="4" />
+		<method name="getScaledWidth(Landroid/graphics/Canvas;)I" since="4" />
+		<method name="getScaledWidth(Landroid/util/DisplayMetrics;)I" since="4" />
+		<method name="getWidth()I" />
+		<method name="hasAlpha()Z" />
+		<method name="hasMipMap()Z" since="17" />
+		<method name="isMutable()Z" />
+		<method name="isPremultiplied()Z" since="17" />
+		<method name="isRecycled()Z" />
+		<method name="prepareToDraw()V" since="4" />
+		<method name="reconfigure(IILandroid/graphics/Bitmap$Config;)V" since="19" />
+		<method name="recycle()V" />
+		<method name="sameAs(Landroid/graphics/Bitmap;)Z" since="12" />
+		<method name="setColorSpace(Landroid/graphics/ColorSpace;)V" since="29" />
+		<method name="setConfig(Landroid/graphics/Bitmap$Config;)V" since="19" />
+		<method name="setDensity(I)V" since="4" />
+		<method name="setHasAlpha(Z)V" since="12" />
+		<method name="setHasMipMap(Z)V" since="17" />
+		<method name="setHeight(I)V" since="19" />
+		<method name="setPixel(III)V" />
+		<method name="setPixels([IIIIIII)V" />
+		<method name="setPremultiplied(Z)V" since="19" />
+		<method name="setWidth(I)V" since="19" />
+		<method name="wrapHardwareBuffer(Landroid/hardware/HardwareBuffer;Landroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="29" />
+		<field name="CREATOR" />
+		<field name="DENSITY_NONE" since="4" />
+	</class>
+	<class name="android/graphics/Bitmap$CompressFormat" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$CompressFormat;" />
+		<method name="values()[Landroid/graphics/Bitmap$CompressFormat;" />
+		<field name="JPEG" />
+		<field name="PNG" />
+		<field name="WEBP" since="14" deprecated="30" />
+		<field name="WEBP_LOSSLESS" since="30" />
+		<field name="WEBP_LOSSY" since="30" />
+	</class>
+	<class name="android/graphics/Bitmap$Config" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;" />
+		<method name="values()[Landroid/graphics/Bitmap$Config;" />
+		<field name="ALPHA_8" />
+		<field name="ARGB_4444" deprecated="29" />
+		<field name="ARGB_8888" />
+		<field name="HARDWARE" since="26" />
+		<field name="RGBA_F16" since="26" />
+		<field name="RGB_565" />
+	</class>
+	<class name="android/graphics/BitmapFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="decodeByteArray([BII)Landroid/graphics/Bitmap;" />
+		<method name="decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" />
+		<method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Bitmap;" />
+		<method name="decodeFile(Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" />
+		<method name="decodeFileDescriptor(Ljava/io/FileDescriptor;)Landroid/graphics/Bitmap;" />
+		<method name="decodeFileDescriptor(Ljava/io/FileDescriptor;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" />
+		<method name="decodeResource(Landroid/content/res/Resources;I)Landroid/graphics/Bitmap;" />
+		<method name="decodeResource(Landroid/content/res/Resources;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" />
+		<method name="decodeResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="4" />
+		<method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Bitmap;" />
+		<method name="decodeStream(Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" />
+	</class>
+	<class name="android/graphics/BitmapFactory$Options" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="requestCancelDecode()V" deprecated="24" />
+		<field name="inBitmap" since="11" />
+		<field name="inDensity" since="4" />
+		<field name="inDither" deprecated="24" />
+		<field name="inInputShareable" since="4" deprecated="21" />
+		<field name="inJustDecodeBounds" />
+		<field name="inMutable" since="11" />
+		<field name="inPreferQualityOverSpeed" since="10" deprecated="24" />
+		<field name="inPreferredColorSpace" since="26" />
+		<field name="inPreferredConfig" />
+		<field name="inPremultiplied" since="19" />
+		<field name="inPurgeable" since="4" deprecated="21" />
+		<field name="inSampleSize" />
+		<field name="inScaled" since="4" />
+		<field name="inScreenDensity" since="4" />
+		<field name="inTargetDensity" since="4" />
+		<field name="inTempStorage" />
+		<field name="mCancel" deprecated="24" />
+		<field name="outColorSpace" since="26" />
+		<field name="outConfig" since="26" />
+		<field name="outHeight" />
+		<field name="outMimeType" />
+		<field name="outWidth" />
+	</class>
+	<class name="android/graphics/BitmapRegionDecoder" since="10">
+		<extends name="java/lang/Object" />
+		<method name="decodeRegion(Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" />
+		<method name="getHeight()I" />
+		<method name="getWidth()I" />
+		<method name="isRecycled()Z" />
+		<method name="newInstance(Landroid/os/ParcelFileDescriptor;)Landroid/graphics/BitmapRegionDecoder;" since="31" />
+		<method name="newInstance(Ljava/io/FileDescriptor;Z)Landroid/graphics/BitmapRegionDecoder;" deprecated="31" />
+		<method name="newInstance(Ljava/io/InputStream;)Landroid/graphics/BitmapRegionDecoder;" since="31" />
+		<method name="newInstance(Ljava/io/InputStream;Z)Landroid/graphics/BitmapRegionDecoder;" deprecated="31" />
+		<method name="newInstance(Ljava/lang/String;)Landroid/graphics/BitmapRegionDecoder;" since="31" />
+		<method name="newInstance(Ljava/lang/String;Z)Landroid/graphics/BitmapRegionDecoder;" deprecated="31" />
+		<method name="newInstance([BII)Landroid/graphics/BitmapRegionDecoder;" since="31" />
+		<method name="newInstance([BIIZ)Landroid/graphics/BitmapRegionDecoder;" deprecated="31" />
+		<method name="recycle()V" />
+	</class>
+	<class name="android/graphics/BitmapShader" since="1">
+		<extends name="android/graphics/Shader" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V" />
+	</class>
+	<class name="android/graphics/BlendMode" since="29">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/BlendMode;" />
+		<method name="values()[Landroid/graphics/BlendMode;" />
+		<field name="CLEAR" />
+		<field name="COLOR" />
+		<field name="COLOR_BURN" />
+		<field name="COLOR_DODGE" />
+		<field name="DARKEN" />
+		<field name="DIFFERENCE" />
+		<field name="DST" />
+		<field name="DST_ATOP" />
+		<field name="DST_IN" />
+		<field name="DST_OUT" />
+		<field name="DST_OVER" />
+		<field name="EXCLUSION" />
+		<field name="HARD_LIGHT" />
+		<field name="HUE" />
+		<field name="LIGHTEN" />
+		<field name="LUMINOSITY" />
+		<field name="MODULATE" />
+		<field name="MULTIPLY" />
+		<field name="OVERLAY" />
+		<field name="PLUS" />
+		<field name="SATURATION" />
+		<field name="SCREEN" />
+		<field name="SOFT_LIGHT" />
+		<field name="SRC" />
+		<field name="SRC_ATOP" />
+		<field name="SRC_IN" />
+		<field name="SRC_OUT" />
+		<field name="SRC_OVER" />
+		<field name="XOR" />
+	</class>
+	<class name="android/graphics/BlendModeColorFilter" since="29">
+		<extends name="android/graphics/ColorFilter" />
+		<method name="&lt;init&gt;(ILandroid/graphics/BlendMode;)V" />
+		<method name="getColor()I" />
+		<method name="getMode()Landroid/graphics/BlendMode;" />
+	</class>
+	<class name="android/graphics/BlurMaskFilter" since="1">
+		<extends name="android/graphics/MaskFilter" />
+		<method name="&lt;init&gt;(FLandroid/graphics/BlurMaskFilter$Blur;)V" />
+	</class>
+	<class name="android/graphics/BlurMaskFilter$Blur" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/BlurMaskFilter$Blur;" />
+		<method name="values()[Landroid/graphics/BlurMaskFilter$Blur;" />
+		<field name="INNER" />
+		<field name="NORMAL" />
+		<field name="OUTER" />
+		<field name="SOLID" />
+	</class>
+	<class name="android/graphics/Camera" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="applyToCanvas(Landroid/graphics/Canvas;)V" />
+		<method name="dotWithNormal(FFF)F" />
+		<method name="getLocationX()F" since="16" />
+		<method name="getLocationY()F" since="16" />
+		<method name="getLocationZ()F" since="16" />
+		<method name="getMatrix(Landroid/graphics/Matrix;)V" />
+		<method name="restore()V" />
+		<method name="rotate(FFF)V" since="12" />
+		<method name="rotateX(F)V" />
+		<method name="rotateY(F)V" />
+		<method name="rotateZ(F)V" />
+		<method name="save()V" />
+		<method name="setLocation(FFF)V" since="12" />
+		<method name="translate(FFF)V" />
+	</class>
+	<class name="android/graphics/Canvas" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;)V" />
+		<method name="&lt;init&gt;(Ljavax/microedition/khronos/opengles/GL;)V" removed="11" />
+		<method name="clipOutPath(Landroid/graphics/Path;)Z" since="26" />
+		<method name="clipOutRect(FFFF)Z" since="26" />
+		<method name="clipOutRect(IIII)Z" since="26" />
+		<method name="clipOutRect(Landroid/graphics/Rect;)Z" since="26" />
+		<method name="clipOutRect(Landroid/graphics/RectF;)Z" since="26" />
+		<method name="clipPath(Landroid/graphics/Path;)Z" />
+		<method name="clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z" deprecated="26" />
+		<method name="clipRect(FFFF)Z" />
+		<method name="clipRect(FFFFLandroid/graphics/Region$Op;)Z" deprecated="26" />
+		<method name="clipRect(IIII)Z" />
+		<method name="clipRect(Landroid/graphics/Rect;)Z" />
+		<method name="clipRect(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z" deprecated="26" />
+		<method name="clipRect(Landroid/graphics/RectF;)Z" />
+		<method name="clipRect(Landroid/graphics/RectF;Landroid/graphics/Region$Op;)Z" deprecated="26" />
+		<method name="clipRegion(Landroid/graphics/Region;)Z" deprecated="21" removed="26" />
+		<method name="clipRegion(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z" deprecated="21" removed="26" />
+		<method name="concat(Landroid/graphics/Matrix;)V" />
+		<method name="disableZ()V" since="29" />
+		<method name="drawARGB(IIII)V" />
+		<method name="drawArc(FFFFFFZLandroid/graphics/Paint;)V" since="21" />
+		<method name="drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V" />
+		<method name="drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V" />
+		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Matrix;Landroid/graphics/Paint;)V" />
+		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V" />
+		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V" />
+		<method name="drawBitmap([IIIFFIIZLandroid/graphics/Paint;)V" since="3" deprecated="21" />
+		<method name="drawBitmap([IIIIIIIZLandroid/graphics/Paint;)V" deprecated="21" />
+		<method name="drawBitmapMesh(Landroid/graphics/Bitmap;II[FI[IILandroid/graphics/Paint;)V" />
+		<method name="drawCircle(FFFLandroid/graphics/Paint;)V" />
+		<method name="drawColor(I)V" />
+		<method name="drawColor(ILandroid/graphics/BlendMode;)V" since="29" />
+		<method name="drawColor(ILandroid/graphics/PorterDuff$Mode;)V" />
+		<method name="drawColor(J)V" since="29" />
+		<method name="drawColor(JLandroid/graphics/BlendMode;)V" since="29" />
+		<method name="drawDoubleRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/RectF;FFLandroid/graphics/Paint;)V" since="29" />
+		<method name="drawDoubleRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/RectF;[FLandroid/graphics/Paint;)V" since="29" />
+		<method name="drawGlyphs([II[FIILandroid/graphics/fonts/Font;Landroid/graphics/Paint;)V" since="31" />
+		<method name="drawLine(FFFFLandroid/graphics/Paint;)V" />
+		<method name="drawLines([FIILandroid/graphics/Paint;)V" />
+		<method name="drawLines([FLandroid/graphics/Paint;)V" />
+		<method name="drawOval(FFFFLandroid/graphics/Paint;)V" since="21" />
+		<method name="drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V" />
+		<method name="drawPaint(Landroid/graphics/Paint;)V" />
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V" since="31" />
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/RectF;Landroid/graphics/Paint;)V" since="31" />
+		<method name="drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V" />
+		<method name="drawPicture(Landroid/graphics/Picture;)V" />
+		<method name="drawPicture(Landroid/graphics/Picture;Landroid/graphics/Rect;)V" />
+		<method name="drawPicture(Landroid/graphics/Picture;Landroid/graphics/RectF;)V" />
+		<method name="drawPoint(FFLandroid/graphics/Paint;)V" />
+		<method name="drawPoints([FIILandroid/graphics/Paint;)V" />
+		<method name="drawPoints([FLandroid/graphics/Paint;)V" />
+		<method name="drawPosText(Ljava/lang/String;[FLandroid/graphics/Paint;)V" deprecated="16" />
+		<method name="drawPosText([CII[FLandroid/graphics/Paint;)V" deprecated="16" />
+		<method name="drawRGB(III)V" />
+		<method name="drawRect(FFFFLandroid/graphics/Paint;)V" />
+		<method name="drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V" />
+		<method name="drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V" />
+		<method name="drawRenderNode(Landroid/graphics/RenderNode;)V" since="29" />
+		<method name="drawRoundRect(FFFFFFLandroid/graphics/Paint;)V" since="21" />
+		<method name="drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V" />
+		<method name="drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V" />
+		<method name="drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V" />
+		<method name="drawText(Ljava/lang/String;IIFFLandroid/graphics/Paint;)V" />
+		<method name="drawText([CIIFFLandroid/graphics/Paint;)V" />
+		<method name="drawTextOnPath(Ljava/lang/String;Landroid/graphics/Path;FFLandroid/graphics/Paint;)V" />
+		<method name="drawTextOnPath([CIILandroid/graphics/Path;FFLandroid/graphics/Paint;)V" />
+		<method name="drawTextRun(Landroid/graphics/text/MeasuredText;IIIIFFZLandroid/graphics/Paint;)V" since="29" />
+		<method name="drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V" since="23" />
+		<method name="drawTextRun([CIIIIFFZLandroid/graphics/Paint;)V" since="23" />
+		<method name="drawVertices(Landroid/graphics/Canvas$VertexMode;I[FI[FI[II[SIILandroid/graphics/Paint;)V" />
+		<method name="enableZ()V" since="29" />
+		<method name="freeGlCaches()V" removed="11" />
+		<method name="getClipBounds()Landroid/graphics/Rect;" />
+		<method name="getClipBounds(Landroid/graphics/Rect;)Z" />
+		<method name="getDensity()I" since="4" />
+		<method name="getDrawFilter()Landroid/graphics/DrawFilter;" />
+		<method name="getGL()Ljavax/microedition/khronos/opengles/GL;" removed="11" />
+		<method name="getHeight()I" />
+		<method name="getMatrix()Landroid/graphics/Matrix;" deprecated="16" />
+		<method name="getMatrix(Landroid/graphics/Matrix;)V" deprecated="16" />
+		<method name="getMaximumBitmapHeight()I" since="14" />
+		<method name="getMaximumBitmapWidth()I" since="14" />
+		<method name="getSaveCount()I" />
+		<method name="getWidth()I" />
+		<method name="isHardwareAccelerated()Z" since="11" />
+		<method name="isOpaque()Z" />
+		<method name="quickReject(FFFF)Z" since="30" />
+		<method name="quickReject(FFFFLandroid/graphics/Canvas$EdgeType;)Z" deprecated="30" />
+		<method name="quickReject(Landroid/graphics/Path;)Z" since="30" />
+		<method name="quickReject(Landroid/graphics/Path;Landroid/graphics/Canvas$EdgeType;)Z" deprecated="30" />
+		<method name="quickReject(Landroid/graphics/RectF;)Z" since="30" />
+		<method name="quickReject(Landroid/graphics/RectF;Landroid/graphics/Canvas$EdgeType;)Z" deprecated="30" />
+		<method name="restore()V" />
+		<method name="restoreToCount(I)V" />
+		<method name="rotate(F)V" />
+		<method name="rotate(FFF)V" />
+		<method name="save()I" />
+		<method name="save(I)I" deprecated="26" removed="28" />
+		<method name="saveLayer(FFFFLandroid/graphics/Paint;)I" since="21" />
+		<method name="saveLayer(FFFFLandroid/graphics/Paint;I)I" deprecated="26" />
+		<method name="saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I" since="21" />
+		<method name="saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I" deprecated="26" />
+		<method name="saveLayerAlpha(FFFFI)I" since="21" />
+		<method name="saveLayerAlpha(FFFFII)I" deprecated="26" />
+		<method name="saveLayerAlpha(Landroid/graphics/RectF;I)I" since="21" />
+		<method name="saveLayerAlpha(Landroid/graphics/RectF;II)I" deprecated="26" />
+		<method name="scale(FF)V" />
+		<method name="scale(FFFF)V" />
+		<method name="setBitmap(Landroid/graphics/Bitmap;)V" />
+		<method name="setDensity(I)V" since="4" />
+		<method name="setDrawFilter(Landroid/graphics/DrawFilter;)V" />
+		<method name="setMatrix(Landroid/graphics/Matrix;)V" />
+		<method name="setViewport(II)V" removed="11" />
+		<method name="skew(FF)V" />
+		<method name="translate(FF)V" />
+		<field name="ALL_SAVE_FLAG" />
+		<field name="CLIP_SAVE_FLAG" deprecated="26" removed="28" />
+		<field name="CLIP_TO_LAYER_SAVE_FLAG" deprecated="26" removed="28" />
+		<field name="FULL_COLOR_LAYER_SAVE_FLAG" deprecated="26" removed="28" />
+		<field name="HAS_ALPHA_LAYER_SAVE_FLAG" deprecated="26" removed="28" />
+		<field name="MATRIX_SAVE_FLAG" deprecated="26" removed="28" />
+	</class>
+	<class name="android/graphics/Canvas$EdgeType" since="1" deprecated="30">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Canvas$EdgeType;" />
+		<method name="values()[Landroid/graphics/Canvas$EdgeType;" />
+		<field name="AA" deprecated="30" />
+		<field name="BW" deprecated="30" />
+	</class>
+	<class name="android/graphics/Canvas$VertexMode" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Canvas$VertexMode;" />
+		<method name="values()[Landroid/graphics/Canvas$VertexMode;" />
+		<field name="TRIANGLES" />
+		<field name="TRIANGLE_FAN" />
+		<field name="TRIANGLE_STRIP" />
+	</class>
+	<class name="android/graphics/Color" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="HSVToColor(I[F)I" />
+		<method name="HSVToColor([F)I" />
+		<method name="RGBToHSV(III[F)V" />
+		<method name="alpha()F" since="26" />
+		<method name="alpha(I)I" />
+		<method name="alpha(J)F" since="26" />
+		<method name="argb(FFFF)I" since="26" />
+		<method name="argb(IIII)I" />
+		<method name="blue()F" since="26" />
+		<method name="blue(I)I" />
+		<method name="blue(J)F" since="26" />
+		<method name="colorSpace(J)Landroid/graphics/ColorSpace;" since="26" />
+		<method name="colorToHSV(I[F)V" />
+		<method name="convert(FFFFLandroid/graphics/ColorSpace$Connector;)J" since="26" />
+		<method name="convert(FFFFLandroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;)J" since="26" />
+		<method name="convert(ILandroid/graphics/ColorSpace;)J" since="26" />
+		<method name="convert(JLandroid/graphics/ColorSpace$Connector;)J" since="26" />
+		<method name="convert(JLandroid/graphics/ColorSpace;)J" since="26" />
+		<method name="convert(Landroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26" />
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;" since="26" />
+		<method name="getComponent(I)F" since="26" />
+		<method name="getComponentCount()I" since="26" />
+		<method name="getComponents()[F" since="26" />
+		<method name="getComponents([F)[F" since="26" />
+		<method name="getModel()Landroid/graphics/ColorSpace$Model;" since="26" />
+		<method name="green()F" since="26" />
+		<method name="green(I)I" />
+		<method name="green(J)F" since="26" />
+		<method name="isInColorSpace(JLandroid/graphics/ColorSpace;)Z" since="26" />
+		<method name="isSrgb()Z" since="26" />
+		<method name="isSrgb(J)Z" since="26" />
+		<method name="isWideGamut()Z" since="26" />
+		<method name="isWideGamut(J)Z" since="26" />
+		<method name="luminance()F" since="26" />
+		<method name="luminance(I)F" since="24" />
+		<method name="luminance(J)F" since="26" />
+		<method name="pack()J" since="26" />
+		<method name="pack(FFF)J" since="26" />
+		<method name="pack(FFFF)J" since="26" />
+		<method name="pack(FFFFLandroid/graphics/ColorSpace;)J" since="26" />
+		<method name="pack(I)J" since="26" />
+		<method name="parseColor(Ljava/lang/String;)I" />
+		<method name="red()F" since="26" />
+		<method name="red(I)I" />
+		<method name="red(J)F" since="26" />
+		<method name="rgb(FFF)I" since="26" />
+		<method name="rgb(III)I" />
+		<method name="toArgb()I" since="26" />
+		<method name="toArgb(J)I" since="26" />
+		<method name="valueOf(FFF)Landroid/graphics/Color;" since="26" />
+		<method name="valueOf(FFFF)Landroid/graphics/Color;" since="26" />
+		<method name="valueOf(FFFFLandroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26" />
+		<method name="valueOf(I)Landroid/graphics/Color;" since="26" />
+		<method name="valueOf(J)Landroid/graphics/Color;" since="26" />
+		<method name="valueOf([FLandroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26" />
+		<field name="BLACK" />
+		<field name="BLUE" />
+		<field name="CYAN" />
+		<field name="DKGRAY" />
+		<field name="GRAY" />
+		<field name="GREEN" />
+		<field name="LTGRAY" />
+		<field name="MAGENTA" />
+		<field name="RED" />
+		<field name="TRANSPARENT" />
+		<field name="WHITE" />
+		<field name="YELLOW" />
+	</class>
+	<class name="android/graphics/ColorFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="26" />
+	</class>
+	<class name="android/graphics/ColorMatrixColorFilter" since="1">
+		<extends name="android/graphics/ColorFilter" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;([F)V" />
+		<method name="getColorMatrix(Ljava/lang/Object;)V" since="26" />
+	</class>
+	<class name="android/graphics/ColorSpace" since="26">
+		<extends name="java/lang/Object" />
+		<method name="adapt(Landroid/graphics/ColorSpace;[F)Landroid/graphics/ColorSpace;" />
+		<method name="adapt(Landroid/graphics/ColorSpace;[FLandroid/graphics/ColorSpace$Adaptation;)Landroid/graphics/ColorSpace;" />
+		<method name="cctToXyz(I)[F" since="31" />
+		<method name="chromaticAdaptation(Landroid/graphics/ColorSpace$Adaptation;[F[F)[F" since="31" />
+		<method name="connect(Landroid/graphics/ColorSpace;)Landroid/graphics/ColorSpace$Connector;" />
+		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)Landroid/graphics/ColorSpace$Connector;" />
+		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;)Landroid/graphics/ColorSpace$Connector;" />
+		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)Landroid/graphics/ColorSpace$Connector;" />
+		<method name="fromXyz(FFF)[F" />
+		<method name="fromXyz([F)[F" />
+		<method name="get(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace;" />
+		<method name="getComponentCount()I" />
+		<method name="getId()I" />
+		<method name="getMaxValue(I)F" />
+		<method name="getMinValue(I)F" />
+		<method name="getModel()Landroid/graphics/ColorSpace$Model;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="isSrgb()Z" />
+		<method name="isWideGamut()Z" />
+		<method name="match([FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)Landroid/graphics/ColorSpace;" />
+		<method name="toXyz(FFF)[F" />
+		<method name="toXyz([F)[F" />
+		<field name="ILLUMINANT_A" />
+		<field name="ILLUMINANT_B" />
+		<field name="ILLUMINANT_C" />
+		<field name="ILLUMINANT_D50" />
+		<field name="ILLUMINANT_D55" />
+		<field name="ILLUMINANT_D60" />
+		<field name="ILLUMINANT_D65" />
+		<field name="ILLUMINANT_D75" />
+		<field name="ILLUMINANT_E" />
+		<field name="MAX_ID" />
+		<field name="MIN_ID" />
+	</class>
+	<class name="android/graphics/ColorSpace$Adaptation" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Adaptation;" />
+		<method name="values()[Landroid/graphics/ColorSpace$Adaptation;" />
+		<field name="BRADFORD" />
+		<field name="CIECAT02" />
+		<field name="VON_KRIES" />
+	</class>
+	<class name="android/graphics/ColorSpace$Connector" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getDestination()Landroid/graphics/ColorSpace;" />
+		<method name="getRenderIntent()Landroid/graphics/ColorSpace$RenderIntent;" />
+		<method name="getSource()Landroid/graphics/ColorSpace;" />
+		<method name="transform(FFF)[F" />
+		<method name="transform([F)[F" />
+	</class>
+	<class name="android/graphics/ColorSpace$Model" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="getComponentCount()I" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Model;" />
+		<method name="values()[Landroid/graphics/ColorSpace$Model;" />
+		<field name="CMYK" />
+		<field name="LAB" />
+		<field name="RGB" />
+		<field name="XYZ" />
+	</class>
+	<class name="android/graphics/ColorSpace$Named" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Named;" />
+		<method name="values()[Landroid/graphics/ColorSpace$Named;" />
+		<field name="ACES" />
+		<field name="ACESCG" />
+		<field name="ADOBE_RGB" />
+		<field name="BT2020" />
+		<field name="BT709" />
+		<field name="CIE_LAB" />
+		<field name="CIE_XYZ" />
+		<field name="DCI_P3" />
+		<field name="DISPLAY_P3" />
+		<field name="EXTENDED_SRGB" />
+		<field name="LINEAR_EXTENDED_SRGB" />
+		<field name="LINEAR_SRGB" />
+		<field name="NTSC_1953" />
+		<field name="PRO_PHOTO_RGB" />
+		<field name="SMPTE_C" />
+		<field name="SRGB" />
+	</class>
+	<class name="android/graphics/ColorSpace$RenderIntent" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$RenderIntent;" />
+		<method name="values()[Landroid/graphics/ColorSpace$RenderIntent;" />
+		<field name="ABSOLUTE" />
+		<field name="PERCEPTUAL" />
+		<field name="RELATIVE" />
+		<field name="SATURATION" />
+	</class>
+	<class name="android/graphics/ColorSpace$Rgb" since="26">
+		<extends name="android/graphics/ColorSpace" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[FD)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[F[FD)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[F[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FF)V" />
+		<method name="fromLinear(FFF)[F" />
+		<method name="fromLinear([F)[F" />
+		<method name="getEotf()Ljava/util/function/DoubleUnaryOperator;" />
+		<method name="getInverseTransform()[F" />
+		<method name="getInverseTransform([F)[F" />
+		<method name="getOetf()Ljava/util/function/DoubleUnaryOperator;" />
+		<method name="getPrimaries()[F" />
+		<method name="getPrimaries([F)[F" />
+		<method name="getTransferParameters()Landroid/graphics/ColorSpace$Rgb$TransferParameters;" />
+		<method name="getTransform()[F" />
+		<method name="getTransform([F)[F" />
+		<method name="getWhitePoint()[F" />
+		<method name="getWhitePoint([F)[F" />
+		<method name="toLinear(FFF)[F" />
+		<method name="toLinear([F)[F" />
+	</class>
+	<class name="android/graphics/ColorSpace$Rgb$TransferParameters" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(DDDDD)V" />
+		<method name="&lt;init&gt;(DDDDDDD)V" />
+		<field name="a" />
+		<field name="b" />
+		<field name="c" />
+		<field name="d" />
+		<field name="e" />
+		<field name="f" />
+		<field name="g" />
+	</class>
+	<class name="android/graphics/ComposePathEffect" since="1">
+		<extends name="android/graphics/PathEffect" />
+		<method name="&lt;init&gt;(Landroid/graphics/PathEffect;Landroid/graphics/PathEffect;)V" />
+	</class>
+	<class name="android/graphics/ComposeShader" since="1">
+		<extends name="android/graphics/Shader" />
+		<method name="&lt;init&gt;(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="&lt;init&gt;(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/PorterDuff$Mode;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/Xfermode;)V" deprecated="29" />
+	</class>
+	<class name="android/graphics/CornerPathEffect" since="1">
+		<extends name="android/graphics/PathEffect" />
+		<method name="&lt;init&gt;(F)V" />
+	</class>
+	<class name="android/graphics/DashPathEffect" since="1">
+		<extends name="android/graphics/PathEffect" />
+		<method name="&lt;init&gt;([FF)V" />
+	</class>
+	<class name="android/graphics/DiscretePathEffect" since="1">
+		<extends name="android/graphics/PathEffect" />
+		<method name="&lt;init&gt;(FF)V" />
+	</class>
+	<class name="android/graphics/DrawFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/graphics/EmbossMaskFilter" since="1">
+		<extends name="android/graphics/MaskFilter" />
+		<method name="&lt;init&gt;([FFFF)V" deprecated="28" />
+	</class>
+	<class name="android/graphics/HardwareRenderer" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clearContent()V" />
+		<method name="createRenderRequest()Landroid/graphics/HardwareRenderer$FrameRenderRequest;" />
+		<method name="destroy()V" />
+		<method name="isOpaque()Z" />
+		<method name="notifyFramePending()V" />
+		<method name="setContentRoot(Landroid/graphics/RenderNode;)V" />
+		<method name="setLightSourceAlpha(FF)V" />
+		<method name="setLightSourceGeometry(FFFF)V" />
+		<method name="setName(Ljava/lang/String;)V" />
+		<method name="setOpaque(Z)V" />
+		<method name="setSurface(Landroid/view/Surface;)V" />
+		<method name="start()V" />
+		<method name="stop()V" />
+		<field name="SYNC_CONTEXT_IS_STOPPED" />
+		<field name="SYNC_FRAME_DROPPED" />
+		<field name="SYNC_LOST_SURFACE_REWARD_IF_FOUND" />
+		<field name="SYNC_OK" />
+		<field name="SYNC_REDRAW_REQUESTED" />
+	</class>
+	<class name="android/graphics/HardwareRenderer$FrameRenderRequest" since="29">
+		<extends name="java/lang/Object" />
+		<method name="setFrameCommitCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)Landroid/graphics/HardwareRenderer$FrameRenderRequest;" />
+		<method name="setVsyncTime(J)Landroid/graphics/HardwareRenderer$FrameRenderRequest;" />
+		<method name="setWaitForPresent(Z)Landroid/graphics/HardwareRenderer$FrameRenderRequest;" />
+		<method name="syncAndDraw()I" />
+	</class>
+	<class name="android/graphics/ImageDecoder" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="createSource(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/ImageDecoder$Source;" />
+		<method name="createSource(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/ImageDecoder$Source;" />
+		<method name="createSource(Landroid/content/res/Resources;I)Landroid/graphics/ImageDecoder$Source;" />
+		<method name="createSource(Ljava/io/File;)Landroid/graphics/ImageDecoder$Source;" />
+		<method name="createSource(Ljava/nio/ByteBuffer;)Landroid/graphics/ImageDecoder$Source;" />
+		<method name="createSource(Ljava/util/concurrent/Callable;)Landroid/graphics/ImageDecoder$Source;" since="29" />
+		<method name="createSource([B)Landroid/graphics/ImageDecoder$Source;" since="31" />
+		<method name="createSource([BII)Landroid/graphics/ImageDecoder$Source;" since="31" />
+		<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/Bitmap;" />
+		<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/Bitmap;" />
+		<method name="decodeDrawable(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/drawable/Drawable;" />
+		<method name="decodeDrawable(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;" />
+		<method name="getAllocator()I" />
+		<method name="getCrop()Landroid/graphics/Rect;" />
+		<method name="getMemorySizePolicy()I" />
+		<method name="getOnPartialImageListener()Landroid/graphics/ImageDecoder$OnPartialImageListener;" />
+		<method name="getPostProcessor()Landroid/graphics/PostProcessor;" />
+		<method name="isDecodeAsAlphaMaskEnabled()Z" />
+		<method name="isMimeTypeSupported(Ljava/lang/String;)Z" since="29" />
+		<method name="isMutableRequired()Z" />
+		<method name="isUnpremultipliedRequired()Z" />
+		<method name="setAllocator(I)V" />
+		<method name="setCrop(Landroid/graphics/Rect;)V" />
+		<method name="setDecodeAsAlphaMaskEnabled(Z)V" />
+		<method name="setMemorySizePolicy(I)V" />
+		<method name="setMutableRequired(Z)V" />
+		<method name="setOnPartialImageListener(Landroid/graphics/ImageDecoder$OnPartialImageListener;)V" />
+		<method name="setPostProcessor(Landroid/graphics/PostProcessor;)V" />
+		<method name="setTargetColorSpace(Landroid/graphics/ColorSpace;)V" />
+		<method name="setTargetSampleSize(I)V" />
+		<method name="setTargetSize(II)V" />
+		<method name="setUnpremultipliedRequired(Z)V" />
+		<field name="ALLOCATOR_DEFAULT" />
+		<field name="ALLOCATOR_HARDWARE" />
+		<field name="ALLOCATOR_SHARED_MEMORY" />
+		<field name="ALLOCATOR_SOFTWARE" />
+		<field name="MEMORY_POLICY_DEFAULT" />
+		<field name="MEMORY_POLICY_LOW_RAM" />
+	</class>
+	<class name="android/graphics/ImageDecoder$DecodeException" since="28">
+		<extends name="java/io/IOException" />
+		<method name="getError()I" />
+		<method name="getSource()Landroid/graphics/ImageDecoder$Source;" />
+		<field name="SOURCE_EXCEPTION" />
+		<field name="SOURCE_INCOMPLETE" />
+		<field name="SOURCE_MALFORMED_DATA" />
+	</class>
+	<class name="android/graphics/ImageDecoder$ImageInfo" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;" />
+		<method name="getMimeType()Ljava/lang/String;" />
+		<method name="getSize()Landroid/util/Size;" />
+		<method name="isAnimated()Z" />
+	</class>
+	<class name="android/graphics/ImageDecoder$OnHeaderDecodedListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V" />
+	</class>
+	<class name="android/graphics/ImageDecoder$OnPartialImageListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onPartialImage(Landroid/graphics/ImageDecoder$DecodeException;)Z" />
+	</class>
+	<class name="android/graphics/ImageDecoder$Source" since="28">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/graphics/ImageFormat" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getBitsPerPixel(I)I" />
+		<field name="DEPTH16" since="23" />
+		<field name="DEPTH_JPEG" since="29" />
+		<field name="DEPTH_POINT_CLOUD" since="23" />
+		<field name="FLEX_RGBA_8888" since="23" />
+		<field name="FLEX_RGB_888" since="23" />
+		<field name="HEIC" since="29" />
+		<field name="JPEG" />
+		<field name="NV16" />
+		<field name="NV21" />
+		<field name="PRIVATE" since="23" />
+		<field name="RAW10" since="21" />
+		<field name="RAW12" since="23" />
+		<field name="RAW_PRIVATE" since="24" />
+		<field name="RAW_SENSOR" since="21" />
+		<field name="RGB_565" />
+		<field name="UNKNOWN" />
+		<field name="Y8" since="29" />
+		<field name="YCBCR_P010" since="31" />
+		<field name="YUV_420_888" since="19" />
+		<field name="YUV_422_888" since="23" />
+		<field name="YUV_444_888" since="23" />
+		<field name="YUY2" />
+		<field name="YV12" since="9" />
+	</class>
+	<class name="android/graphics/Insets" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="add(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;" />
+		<method name="max(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;" />
+		<method name="min(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;" />
+		<method name="of(IIII)Landroid/graphics/Insets;" />
+		<method name="of(Landroid/graphics/Rect;)Landroid/graphics/Insets;" />
+		<method name="subtract(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;" />
+		<field name="CREATOR" />
+		<field name="NONE" />
+		<field name="bottom" />
+		<field name="left" />
+		<field name="right" />
+		<field name="top" />
+	</class>
+	<class name="android/graphics/Interpolator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getKeyFrameCount()I" />
+		<method name="getValueCount()I" />
+		<method name="reset(I)V" />
+		<method name="reset(II)V" />
+		<method name="setKeyFrame(II[F)V" />
+		<method name="setKeyFrame(II[F[F)V" />
+		<method name="setRepeatMirror(FZ)V" />
+		<method name="timeToValues(I[F)Landroid/graphics/Interpolator$Result;" />
+		<method name="timeToValues([F)Landroid/graphics/Interpolator$Result;" />
+	</class>
+	<class name="android/graphics/Interpolator$Result" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Interpolator$Result;" />
+		<method name="values()[Landroid/graphics/Interpolator$Result;" />
+		<field name="FREEZE_END" />
+		<field name="FREEZE_START" />
+		<field name="NORMAL" />
+	</class>
+	<class name="android/graphics/LayerRasterizer" since="1" deprecated="21" removed="26">
+		<extends name="android/graphics/Rasterizer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addLayer(Landroid/graphics/Paint;)V" />
+		<method name="addLayer(Landroid/graphics/Paint;FF)V" />
+	</class>
+	<class name="android/graphics/LightingColorFilter" since="1">
+		<extends name="android/graphics/ColorFilter" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getColorAdd()I" since="26" />
+		<method name="getColorMultiply()I" since="26" />
+	</class>
+	<class name="android/graphics/LinearGradient" since="1">
+		<extends name="android/graphics/Shader" />
+		<method name="&lt;init&gt;(FFFFIILandroid/graphics/Shader$TileMode;)V" />
+		<method name="&lt;init&gt;(FFFFJJLandroid/graphics/Shader$TileMode;)V" since="29" />
+		<method name="&lt;init&gt;(FFFF[I[FLandroid/graphics/Shader$TileMode;)V" />
+		<method name="&lt;init&gt;(FFFF[J[FLandroid/graphics/Shader$TileMode;)V" since="29" />
+	</class>
+	<class name="android/graphics/MaskFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/graphics/Matrix" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Matrix;)V" />
+		<method name="dump(Ljava/io/PrintWriter;)V" since="31" />
+		<method name="getValues([F)V" />
+		<method name="invert(Landroid/graphics/Matrix;)Z" />
+		<method name="isAffine()Z" since="21" />
+		<method name="isIdentity()Z" />
+		<method name="mapPoints([F)V" />
+		<method name="mapPoints([FI[FII)V" />
+		<method name="mapPoints([F[F)V" />
+		<method name="mapRadius(F)F" />
+		<method name="mapRect(Landroid/graphics/RectF;)Z" />
+		<method name="mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z" />
+		<method name="mapVectors([F)V" />
+		<method name="mapVectors([FI[FII)V" />
+		<method name="mapVectors([F[F)V" />
+		<method name="postConcat(Landroid/graphics/Matrix;)Z" />
+		<method name="postRotate(F)Z" />
+		<method name="postRotate(FFF)Z" />
+		<method name="postScale(FF)Z" />
+		<method name="postScale(FFFF)Z" />
+		<method name="postSkew(FF)Z" />
+		<method name="postSkew(FFFF)Z" />
+		<method name="postTranslate(FF)Z" />
+		<method name="preConcat(Landroid/graphics/Matrix;)Z" />
+		<method name="preRotate(F)Z" />
+		<method name="preRotate(FFF)Z" />
+		<method name="preScale(FF)Z" />
+		<method name="preScale(FFFF)Z" />
+		<method name="preSkew(FF)Z" />
+		<method name="preSkew(FFFF)Z" />
+		<method name="preTranslate(FF)Z" />
+		<method name="rectStaysRect()Z" />
+		<method name="reset()V" />
+		<method name="set(Landroid/graphics/Matrix;)V" />
+		<method name="setConcat(Landroid/graphics/Matrix;Landroid/graphics/Matrix;)Z" />
+		<method name="setPolyToPoly([FI[FII)Z" />
+		<method name="setRectToRect(Landroid/graphics/RectF;Landroid/graphics/RectF;Landroid/graphics/Matrix$ScaleToFit;)Z" />
+		<method name="setRotate(F)V" />
+		<method name="setRotate(FFF)V" />
+		<method name="setScale(FF)V" />
+		<method name="setScale(FFFF)V" />
+		<method name="setSinCos(FF)V" />
+		<method name="setSinCos(FFFF)V" />
+		<method name="setSkew(FF)V" />
+		<method name="setSkew(FFFF)V" />
+		<method name="setTranslate(FF)V" />
+		<method name="setValues([F)V" />
+		<method name="toShortString()Ljava/lang/String;" />
+		<field name="IDENTITY_MATRIX" since="31" />
+		<field name="MPERSP_0" />
+		<field name="MPERSP_1" />
+		<field name="MPERSP_2" />
+		<field name="MSCALE_X" />
+		<field name="MSCALE_Y" />
+		<field name="MSKEW_X" />
+		<field name="MSKEW_Y" />
+		<field name="MTRANS_X" />
+		<field name="MTRANS_Y" />
+	</class>
+	<class name="android/graphics/Matrix$ScaleToFit" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Matrix$ScaleToFit;" />
+		<method name="values()[Landroid/graphics/Matrix$ScaleToFit;" />
+		<field name="CENTER" />
+		<field name="END" />
+		<field name="FILL" />
+		<field name="START" />
+	</class>
+	<class name="android/graphics/Movie" since="1" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="decodeByteArray([BII)Landroid/graphics/Movie;" deprecated="29" />
+		<method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Movie;" deprecated="29" />
+		<method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Movie;" deprecated="29" />
+		<method name="draw(Landroid/graphics/Canvas;FF)V" deprecated="29" />
+		<method name="draw(Landroid/graphics/Canvas;FFLandroid/graphics/Paint;)V" deprecated="29" />
+		<method name="duration()I" deprecated="29" />
+		<method name="height()I" deprecated="29" />
+		<method name="isOpaque()Z" deprecated="29" />
+		<method name="setTime(I)Z" deprecated="29" />
+		<method name="width()I" deprecated="29" />
+	</class>
+	<class name="android/graphics/NinePatch" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;[B)V" since="19" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;[BLjava/lang/String;)V" />
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;)V" />
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;Landroid/graphics/Paint;)V" />
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/RectF;)V" />
+		<method name="getBitmap()Landroid/graphics/Bitmap;" since="19" />
+		<method name="getDensity()I" since="4" />
+		<method name="getHeight()I" />
+		<method name="getName()Ljava/lang/String;" since="19" />
+		<method name="getPaint()Landroid/graphics/Paint;" since="19" />
+		<method name="getTransparentRegion(Landroid/graphics/Rect;)Landroid/graphics/Region;" />
+		<method name="getWidth()I" />
+		<method name="hasAlpha()Z" />
+		<method name="isNinePatchChunk([B)Z" />
+		<method name="setPaint(Landroid/graphics/Paint;)V" />
+	</class>
+	<class name="android/graphics/Outline" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Outline;)V" />
+		<method name="canClip()Z" />
+		<method name="getAlpha()F" />
+		<method name="getRadius()F" since="24" />
+		<method name="getRect(Landroid/graphics/Rect;)Z" since="24" />
+		<method name="isEmpty()Z" />
+		<method name="offset(II)V" since="22" />
+		<method name="set(Landroid/graphics/Outline;)V" />
+		<method name="setAlpha(F)V" />
+		<method name="setConvexPath(Landroid/graphics/Path;)V" deprecated="30" />
+		<method name="setEmpty()V" />
+		<method name="setOval(IIII)V" />
+		<method name="setOval(Landroid/graphics/Rect;)V" />
+		<method name="setPath(Landroid/graphics/Path;)V" since="30" />
+		<method name="setRect(IIII)V" />
+		<method name="setRect(Landroid/graphics/Rect;)V" />
+		<method name="setRoundRect(IIIIF)V" />
+		<method name="setRoundRect(Landroid/graphics/Rect;F)V" />
+	</class>
+	<class name="android/graphics/Paint" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Paint;)V" />
+		<method name="ascent()F" />
+		<method name="breakText(Ljava/lang/CharSequence;IIZF[F)I" />
+		<method name="breakText(Ljava/lang/String;ZF[F)I" />
+		<method name="breakText([CIIF[F)I" />
+		<method name="clearShadowLayer()V" />
+		<method name="descent()F" />
+		<method name="equalsForTextMeasurement(Landroid/graphics/Paint;)Z" since="28" />
+		<method name="getAlpha()I" />
+		<method name="getBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getColor()I" />
+		<method name="getColorFilter()Landroid/graphics/ColorFilter;" />
+		<method name="getColorLong()J" since="29" />
+		<method name="getEndHyphenEdit()I" since="29" />
+		<method name="getFillPath(Landroid/graphics/Path;Landroid/graphics/Path;)Z" />
+		<method name="getFlags()I" />
+		<method name="getFontFeatureSettings()Ljava/lang/String;" since="21" />
+		<method name="getFontMetrics()Landroid/graphics/Paint$FontMetrics;" />
+		<method name="getFontMetrics(Landroid/graphics/Paint$FontMetrics;)F" />
+		<method name="getFontMetricsInt()Landroid/graphics/Paint$FontMetricsInt;" />
+		<method name="getFontMetricsInt(Landroid/graphics/Paint$FontMetricsInt;)I" />
+		<method name="getFontSpacing()F" />
+		<method name="getFontVariationSettings()Ljava/lang/String;" since="26" />
+		<method name="getHinting()I" since="14" />
+		<method name="getLetterSpacing()F" since="21" />
+		<method name="getMaskFilter()Landroid/graphics/MaskFilter;" />
+		<method name="getOffsetForAdvance(Ljava/lang/CharSequence;IIIIZF)I" since="23" />
+		<method name="getOffsetForAdvance([CIIIIZF)I" since="23" />
+		<method name="getPathEffect()Landroid/graphics/PathEffect;" />
+		<method name="getRasterizer()Landroid/graphics/Rasterizer;" deprecated="21" removed="26" />
+		<method name="getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F" since="23" />
+		<method name="getRunAdvance([CIIIIZI)F" since="23" />
+		<method name="getShader()Landroid/graphics/Shader;" />
+		<method name="getShadowLayerColor()I" since="29" />
+		<method name="getShadowLayerColorLong()J" since="29" />
+		<method name="getShadowLayerDx()F" since="29" />
+		<method name="getShadowLayerDy()F" since="29" />
+		<method name="getShadowLayerRadius()F" since="29" />
+		<method name="getStartHyphenEdit()I" since="29" />
+		<method name="getStrikeThruPosition()F" since="29" />
+		<method name="getStrikeThruThickness()F" since="29" />
+		<method name="getStrokeCap()Landroid/graphics/Paint$Cap;" />
+		<method name="getStrokeJoin()Landroid/graphics/Paint$Join;" />
+		<method name="getStrokeMiter()F" />
+		<method name="getStrokeWidth()F" />
+		<method name="getStyle()Landroid/graphics/Paint$Style;" />
+		<method name="getTextAlign()Landroid/graphics/Paint$Align;" />
+		<method name="getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V" since="29" />
+		<method name="getTextBounds(Ljava/lang/String;IILandroid/graphics/Rect;)V" />
+		<method name="getTextBounds([CIILandroid/graphics/Rect;)V" />
+		<method name="getTextLocale()Ljava/util/Locale;" since="17" />
+		<method name="getTextLocales()Landroid/os/LocaleList;" since="24" />
+		<method name="getTextPath(Ljava/lang/String;IIFFLandroid/graphics/Path;)V" />
+		<method name="getTextPath([CIIFFLandroid/graphics/Path;)V" />
+		<method name="getTextRunAdvances([CIIIIZ[FI)F" since="29" />
+		<method name="getTextRunCursor(Ljava/lang/CharSequence;IIZII)I" since="29" />
+		<method name="getTextRunCursor([CIIZII)I" since="29" />
+		<method name="getTextScaleX()F" />
+		<method name="getTextSize()F" />
+		<method name="getTextSkewX()F" />
+		<method name="getTextWidths(Ljava/lang/CharSequence;II[F)I" />
+		<method name="getTextWidths(Ljava/lang/String;II[F)I" />
+		<method name="getTextWidths(Ljava/lang/String;[F)I" />
+		<method name="getTextWidths([CII[F)I" />
+		<method name="getTypeface()Landroid/graphics/Typeface;" />
+		<method name="getUnderlinePosition()F" since="29" />
+		<method name="getUnderlineThickness()F" since="29" />
+		<method name="getWordSpacing()F" since="29" />
+		<method name="getXfermode()Landroid/graphics/Xfermode;" />
+		<method name="hasGlyph(Ljava/lang/String;)Z" since="23" />
+		<method name="isAntiAlias()Z" />
+		<method name="isDither()Z" />
+		<method name="isElegantTextHeight()Z" since="21" />
+		<method name="isFakeBoldText()Z" />
+		<method name="isFilterBitmap()Z" />
+		<method name="isLinearText()Z" deprecated="16" />
+		<method name="isStrikeThruText()Z" />
+		<method name="isSubpixelText()Z" />
+		<method name="isUnderlineText()Z" />
+		<method name="measureText(Ljava/lang/CharSequence;II)F" />
+		<method name="measureText(Ljava/lang/String;)F" />
+		<method name="measureText(Ljava/lang/String;II)F" />
+		<method name="measureText([CII)F" />
+		<method name="reset()V" />
+		<method name="set(Landroid/graphics/Paint;)V" />
+		<method name="setARGB(IIII)V" />
+		<method name="setAlpha(I)V" />
+		<method name="setAntiAlias(Z)V" />
+		<method name="setBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setColor(I)V" />
+		<method name="setColor(J)V" since="29" />
+		<method name="setColorFilter(Landroid/graphics/ColorFilter;)Landroid/graphics/ColorFilter;" />
+		<method name="setDither(Z)V" />
+		<method name="setElegantTextHeight(Z)V" since="21" />
+		<method name="setEndHyphenEdit(I)V" since="29" />
+		<method name="setFakeBoldText(Z)V" />
+		<method name="setFilterBitmap(Z)V" />
+		<method name="setFlags(I)V" />
+		<method name="setFontFeatureSettings(Ljava/lang/String;)V" since="21" />
+		<method name="setFontVariationSettings(Ljava/lang/String;)Z" since="26" />
+		<method name="setHinting(I)V" since="14" />
+		<method name="setLetterSpacing(F)V" since="21" />
+		<method name="setLinearText(Z)V" deprecated="16" />
+		<method name="setMaskFilter(Landroid/graphics/MaskFilter;)Landroid/graphics/MaskFilter;" />
+		<method name="setPathEffect(Landroid/graphics/PathEffect;)Landroid/graphics/PathEffect;" />
+		<method name="setRasterizer(Landroid/graphics/Rasterizer;)Landroid/graphics/Rasterizer;" deprecated="21" removed="26" />
+		<method name="setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;" />
+		<method name="setShadowLayer(FFFI)V" />
+		<method name="setShadowLayer(FFFJ)V" since="29" />
+		<method name="setStartHyphenEdit(I)V" since="29" />
+		<method name="setStrikeThruText(Z)V" />
+		<method name="setStrokeCap(Landroid/graphics/Paint$Cap;)V" />
+		<method name="setStrokeJoin(Landroid/graphics/Paint$Join;)V" />
+		<method name="setStrokeMiter(F)V" />
+		<method name="setStrokeWidth(F)V" />
+		<method name="setStyle(Landroid/graphics/Paint$Style;)V" />
+		<method name="setSubpixelText(Z)V" />
+		<method name="setTextAlign(Landroid/graphics/Paint$Align;)V" />
+		<method name="setTextLocale(Ljava/util/Locale;)V" since="17" />
+		<method name="setTextLocales(Landroid/os/LocaleList;)V" since="24" />
+		<method name="setTextScaleX(F)V" />
+		<method name="setTextSize(F)V" />
+		<method name="setTextSkewX(F)V" />
+		<method name="setTypeface(Landroid/graphics/Typeface;)Landroid/graphics/Typeface;" />
+		<method name="setUnderlineText(Z)V" />
+		<method name="setWordSpacing(F)V" since="29" />
+		<method name="setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;" />
+		<field name="ANTI_ALIAS_FLAG" />
+		<field name="CURSOR_AFTER" since="29" />
+		<field name="CURSOR_AT" since="29" />
+		<field name="CURSOR_AT_OR_AFTER" since="29" />
+		<field name="CURSOR_AT_OR_BEFORE" since="29" />
+		<field name="CURSOR_BEFORE" since="29" />
+		<field name="DEV_KERN_TEXT_FLAG" />
+		<field name="DITHER_FLAG" />
+		<field name="EMBEDDED_BITMAP_TEXT_FLAG" since="19" />
+		<field name="END_HYPHEN_EDIT_INSERT_ARMENIAN_HYPHEN" since="29" />
+		<field name="END_HYPHEN_EDIT_INSERT_HYPHEN" since="29" />
+		<field name="END_HYPHEN_EDIT_INSERT_MAQAF" since="29" />
+		<field name="END_HYPHEN_EDIT_INSERT_UCAS_HYPHEN" since="29" />
+		<field name="END_HYPHEN_EDIT_INSERT_ZWJ_AND_HYPHEN" since="29" />
+		<field name="END_HYPHEN_EDIT_NO_EDIT" since="29" />
+		<field name="END_HYPHEN_EDIT_REPLACE_WITH_HYPHEN" since="29" />
+		<field name="FAKE_BOLD_TEXT_FLAG" />
+		<field name="FILTER_BITMAP_FLAG" />
+		<field name="HINTING_OFF" since="14" />
+		<field name="HINTING_ON" since="14" />
+		<field name="LINEAR_TEXT_FLAG" />
+		<field name="START_HYPHEN_EDIT_INSERT_HYPHEN" since="29" />
+		<field name="START_HYPHEN_EDIT_INSERT_ZWJ" since="29" />
+		<field name="START_HYPHEN_EDIT_NO_EDIT" since="29" />
+		<field name="STRIKE_THRU_TEXT_FLAG" />
+		<field name="SUBPIXEL_TEXT_FLAG" />
+		<field name="UNDERLINE_TEXT_FLAG" />
+	</class>
+	<class name="android/graphics/Paint$Align" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Align;" />
+		<method name="values()[Landroid/graphics/Paint$Align;" />
+		<field name="CENTER" />
+		<field name="LEFT" />
+		<field name="RIGHT" />
+	</class>
+	<class name="android/graphics/Paint$Cap" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Cap;" />
+		<method name="values()[Landroid/graphics/Paint$Cap;" />
+		<field name="BUTT" />
+		<field name="ROUND" />
+		<field name="SQUARE" />
+	</class>
+	<class name="android/graphics/Paint$FontMetrics" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ascent" />
+		<field name="bottom" />
+		<field name="descent" />
+		<field name="leading" />
+		<field name="top" />
+	</class>
+	<class name="android/graphics/Paint$FontMetricsInt" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ascent" />
+		<field name="bottom" />
+		<field name="descent" />
+		<field name="leading" />
+		<field name="top" />
+	</class>
+	<class name="android/graphics/Paint$Join" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Join;" />
+		<method name="values()[Landroid/graphics/Paint$Join;" />
+		<field name="BEVEL" />
+		<field name="MITER" />
+		<field name="ROUND" />
+	</class>
+	<class name="android/graphics/Paint$Style" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Style;" />
+		<method name="values()[Landroid/graphics/Paint$Style;" />
+		<field name="FILL" />
+		<field name="FILL_AND_STROKE" />
+		<field name="STROKE" />
+	</class>
+	<class name="android/graphics/PaintFlagsDrawFilter" since="1">
+		<extends name="android/graphics/DrawFilter" />
+		<method name="&lt;init&gt;(II)V" />
+	</class>
+	<class name="android/graphics/ParcelableColorSpace" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/graphics/ColorSpace;)V" />
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;" />
+		<method name="isParcelable(Landroid/graphics/ColorSpace;)Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/graphics/Path" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;)V" />
+		<method name="addArc(FFFFFF)V" since="21" />
+		<method name="addArc(Landroid/graphics/RectF;FF)V" />
+		<method name="addCircle(FFFLandroid/graphics/Path$Direction;)V" />
+		<method name="addOval(FFFFLandroid/graphics/Path$Direction;)V" since="21" />
+		<method name="addOval(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V" />
+		<method name="addPath(Landroid/graphics/Path;)V" />
+		<method name="addPath(Landroid/graphics/Path;FF)V" />
+		<method name="addPath(Landroid/graphics/Path;Landroid/graphics/Matrix;)V" />
+		<method name="addRect(FFFFLandroid/graphics/Path$Direction;)V" />
+		<method name="addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V" />
+		<method name="addRoundRect(FFFFFFLandroid/graphics/Path$Direction;)V" since="21" />
+		<method name="addRoundRect(FFFF[FLandroid/graphics/Path$Direction;)V" since="21" />
+		<method name="addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V" />
+		<method name="addRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/Path$Direction;)V" />
+		<method name="approximate(F)[F" since="26" />
+		<method name="arcTo(FFFFFFZ)V" since="21" />
+		<method name="arcTo(Landroid/graphics/RectF;FF)V" />
+		<method name="arcTo(Landroid/graphics/RectF;FFZ)V" />
+		<method name="close()V" />
+		<method name="computeBounds(Landroid/graphics/RectF;Z)V" />
+		<method name="cubicTo(FFFFFF)V" />
+		<method name="getFillType()Landroid/graphics/Path$FillType;" />
+		<method name="incReserve(I)V" />
+		<method name="isConvex()Z" since="21" deprecated="30" />
+		<method name="isEmpty()Z" />
+		<method name="isInverseFillType()Z" />
+		<method name="isRect(Landroid/graphics/RectF;)Z" />
+		<method name="lineTo(FF)V" />
+		<method name="moveTo(FF)V" />
+		<method name="offset(FF)V" />
+		<method name="offset(FFLandroid/graphics/Path;)V" />
+		<method name="op(Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z" since="19" />
+		<method name="op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z" since="19" />
+		<method name="quadTo(FFFF)V" />
+		<method name="rCubicTo(FFFFFF)V" />
+		<method name="rLineTo(FF)V" />
+		<method name="rMoveTo(FF)V" />
+		<method name="rQuadTo(FFFF)V" />
+		<method name="reset()V" />
+		<method name="rewind()V" />
+		<method name="set(Landroid/graphics/Path;)V" />
+		<method name="setFillType(Landroid/graphics/Path$FillType;)V" />
+		<method name="setLastPoint(FF)V" />
+		<method name="toggleInverseFillType()V" />
+		<method name="transform(Landroid/graphics/Matrix;)V" />
+		<method name="transform(Landroid/graphics/Matrix;Landroid/graphics/Path;)V" />
+	</class>
+	<class name="android/graphics/Path$Direction" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$Direction;" />
+		<method name="values()[Landroid/graphics/Path$Direction;" />
+		<field name="CCW" />
+		<field name="CW" />
+	</class>
+	<class name="android/graphics/Path$FillType" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$FillType;" />
+		<method name="values()[Landroid/graphics/Path$FillType;" />
+		<field name="EVEN_ODD" />
+		<field name="INVERSE_EVEN_ODD" />
+		<field name="INVERSE_WINDING" />
+		<field name="WINDING" />
+	</class>
+	<class name="android/graphics/Path$Op" since="19">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$Op;" />
+		<method name="values()[Landroid/graphics/Path$Op;" />
+		<field name="DIFFERENCE" />
+		<field name="INTERSECT" />
+		<field name="REVERSE_DIFFERENCE" />
+		<field name="UNION" />
+		<field name="XOR" />
+	</class>
+	<class name="android/graphics/PathDashPathEffect" since="1">
+		<extends name="android/graphics/PathEffect" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;FFLandroid/graphics/PathDashPathEffect$Style;)V" />
+	</class>
+	<class name="android/graphics/PathDashPathEffect$Style" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/PathDashPathEffect$Style;" />
+		<method name="values()[Landroid/graphics/PathDashPathEffect$Style;" />
+		<field name="MORPH" />
+		<field name="ROTATE" />
+		<field name="TRANSLATE" />
+	</class>
+	<class name="android/graphics/PathEffect" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/graphics/PathMeasure" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;Z)V" />
+		<method name="getLength()F" />
+		<method name="getMatrix(FLandroid/graphics/Matrix;I)Z" />
+		<method name="getPosTan(F[F[F)Z" />
+		<method name="getSegment(FFLandroid/graphics/Path;Z)Z" />
+		<method name="isClosed()Z" />
+		<method name="nextContour()Z" />
+		<method name="setPath(Landroid/graphics/Path;Z)V" />
+		<field name="POSITION_MATRIX_FLAG" />
+		<field name="TANGENT_MATRIX_FLAG" />
+	</class>
+	<class name="android/graphics/Picture" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Picture;)V" />
+		<method name="beginRecording(II)Landroid/graphics/Canvas;" />
+		<method name="createFromStream(Ljava/io/InputStream;)Landroid/graphics/Picture;" deprecated="18" removed="29" />
+		<method name="draw(Landroid/graphics/Canvas;)V" />
+		<method name="endRecording()V" />
+		<method name="getHeight()I" />
+		<method name="getWidth()I" />
+		<method name="requiresHardwareAcceleration()Z" since="28" />
+		<method name="writeToStream(Ljava/io/OutputStream;)V" deprecated="18" removed="29" />
+	</class>
+	<class name="android/graphics/PixelFormat" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="formatHasAlpha(I)Z" />
+		<method name="getPixelFormatInfo(ILandroid/graphics/PixelFormat;)V" />
+		<field name="A_8" deprecated="19" />
+		<field name="JPEG" deprecated="15" />
+		<field name="LA_88" deprecated="16" />
+		<field name="L_8" deprecated="19" />
+		<field name="OPAQUE" />
+		<field name="RGBA_1010102" since="26" />
+		<field name="RGBA_4444" deprecated="16" />
+		<field name="RGBA_5551" deprecated="16" />
+		<field name="RGBA_8888" />
+		<field name="RGBA_F16" since="26" />
+		<field name="RGBX_8888" />
+		<field name="RGB_332" deprecated="16" />
+		<field name="RGB_565" />
+		<field name="RGB_888" />
+		<field name="TRANSLUCENT" />
+		<field name="TRANSPARENT" />
+		<field name="UNKNOWN" />
+		<field name="YCbCr_420_SP" deprecated="15" />
+		<field name="YCbCr_422_I" since="5" deprecated="15" />
+		<field name="YCbCr_422_SP" deprecated="15" />
+		<field name="bitsPerPixel" />
+		<field name="bytesPerPixel" />
+	</class>
+	<class name="android/graphics/PixelXorXfermode" since="1" deprecated="16" removed="24">
+		<extends name="android/graphics/Xfermode" />
+		<method name="&lt;init&gt;(I)V" />
+	</class>
+	<class name="android/graphics/Point" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="13" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Point;)V" />
+		<method name="equals(II)Z" />
+		<method name="negate()V" />
+		<method name="offset(II)V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="13" />
+		<method name="set(II)V" />
+		<field name="CREATOR" since="13" />
+		<field name="x" />
+		<field name="y" />
+	</class>
+	<class name="android/graphics/PointF" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="13" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(FF)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Point;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/PointF;)V" since="30" />
+		<method name="equals(FF)Z" />
+		<method name="length()F" />
+		<method name="length(FF)F" />
+		<method name="negate()V" />
+		<method name="offset(FF)V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="13" />
+		<method name="set(FF)V" />
+		<method name="set(Landroid/graphics/PointF;)V" />
+		<field name="CREATOR" since="13" />
+		<field name="x" />
+		<field name="y" />
+	</class>
+	<class name="android/graphics/PorterDuff" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/graphics/PorterDuff$Mode" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/PorterDuff$Mode;" />
+		<method name="values()[Landroid/graphics/PorterDuff$Mode;" />
+		<field name="ADD" since="11" />
+		<field name="CLEAR" />
+		<field name="DARKEN" />
+		<field name="DST" />
+		<field name="DST_ATOP" />
+		<field name="DST_IN" />
+		<field name="DST_OUT" />
+		<field name="DST_OVER" />
+		<field name="LIGHTEN" />
+		<field name="MULTIPLY" />
+		<field name="OVERLAY" since="11" />
+		<field name="SCREEN" />
+		<field name="SRC" />
+		<field name="SRC_ATOP" />
+		<field name="SRC_IN" />
+		<field name="SRC_OUT" />
+		<field name="SRC_OVER" />
+		<field name="XOR" />
+	</class>
+	<class name="android/graphics/PorterDuffColorFilter" since="1">
+		<extends name="android/graphics/ColorFilter" />
+		<method name="&lt;init&gt;(ILandroid/graphics/PorterDuff$Mode;)V" />
+	</class>
+	<class name="android/graphics/PorterDuffXfermode" since="1">
+		<extends name="android/graphics/Xfermode" />
+		<method name="&lt;init&gt;(Landroid/graphics/PorterDuff$Mode;)V" />
+	</class>
+	<class name="android/graphics/PostProcessor" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onPostProcess(Landroid/graphics/Canvas;)I" />
+	</class>
+	<class name="android/graphics/RadialGradient" since="1">
+		<extends name="android/graphics/Shader" />
+		<method name="&lt;init&gt;(FFFFFF[J[FLandroid/graphics/Shader$TileMode;)V" since="31" />
+		<method name="&lt;init&gt;(FFFIILandroid/graphics/Shader$TileMode;)V" />
+		<method name="&lt;init&gt;(FFFJJLandroid/graphics/Shader$TileMode;)V" since="29" />
+		<method name="&lt;init&gt;(FFF[I[FLandroid/graphics/Shader$TileMode;)V" />
+		<method name="&lt;init&gt;(FFF[J[FLandroid/graphics/Shader$TileMode;)V" since="29" />
+	</class>
+	<class name="android/graphics/Rasterizer" since="1" deprecated="21" removed="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/graphics/RecordingCanvas" since="29">
+		<extends name="android/graphics/Canvas" />
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V" />
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/RectF;Landroid/graphics/Paint;)V" />
+	</class>
+	<class name="android/graphics/Rect" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(IIII)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;)V" />
+		<method name="centerX()I" />
+		<method name="centerY()I" />
+		<method name="contains(II)Z" />
+		<method name="contains(IIII)Z" />
+		<method name="contains(Landroid/graphics/Rect;)Z" />
+		<method name="exactCenterX()F" />
+		<method name="exactCenterY()F" />
+		<method name="flattenToString()Ljava/lang/String;" since="7" />
+		<method name="height()I" />
+		<method name="inset(II)V" />
+		<method name="inset(IIII)V" since="31" />
+		<method name="inset(Landroid/graphics/Insets;)V" since="31" />
+		<method name="intersect(IIII)Z" />
+		<method name="intersect(Landroid/graphics/Rect;)Z" />
+		<method name="intersects(IIII)Z" />
+		<method name="intersects(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z" />
+		<method name="isEmpty()Z" />
+		<method name="offset(II)V" />
+		<method name="offsetTo(II)V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<method name="set(IIII)V" />
+		<method name="set(Landroid/graphics/Rect;)V" />
+		<method name="setEmpty()V" />
+		<method name="setIntersect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z" />
+		<method name="sort()V" />
+		<method name="toShortString()Ljava/lang/String;" since="3" />
+		<method name="unflattenFromString(Ljava/lang/String;)Landroid/graphics/Rect;" since="7" />
+		<method name="union(II)V" />
+		<method name="union(IIII)V" />
+		<method name="union(Landroid/graphics/Rect;)V" />
+		<method name="width()I" />
+		<field name="CREATOR" />
+		<field name="bottom" />
+		<field name="left" />
+		<field name="right" />
+		<field name="top" />
+	</class>
+	<class name="android/graphics/RectF" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(FFFF)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/RectF;)V" />
+		<method name="centerX()F" />
+		<method name="centerY()F" />
+		<method name="contains(FF)Z" />
+		<method name="contains(FFFF)Z" />
+		<method name="contains(Landroid/graphics/RectF;)Z" />
+		<method name="height()F" />
+		<method name="inset(FF)V" />
+		<method name="intersect(FFFF)Z" />
+		<method name="intersect(Landroid/graphics/RectF;)Z" />
+		<method name="intersects(FFFF)Z" />
+		<method name="intersects(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z" />
+		<method name="isEmpty()Z" />
+		<method name="offset(FF)V" />
+		<method name="offsetTo(FF)V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="3" />
+		<method name="round(Landroid/graphics/Rect;)V" />
+		<method name="roundOut(Landroid/graphics/Rect;)V" />
+		<method name="set(FFFF)V" />
+		<method name="set(Landroid/graphics/Rect;)V" />
+		<method name="set(Landroid/graphics/RectF;)V" />
+		<method name="setEmpty()V" />
+		<method name="setIntersect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z" />
+		<method name="sort()V" />
+		<method name="toShortString()Ljava/lang/String;" since="14" />
+		<method name="union(FF)V" />
+		<method name="union(FFFF)V" />
+		<method name="union(Landroid/graphics/RectF;)V" />
+		<method name="width()F" />
+		<field name="CREATOR" since="3" />
+		<field name="bottom" />
+		<field name="left" />
+		<field name="right" />
+		<field name="top" />
+	</class>
+	<class name="android/graphics/Region" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(IIII)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Region;)V" />
+		<method name="contains(II)Z" />
+		<method name="getBoundaryPath()Landroid/graphics/Path;" />
+		<method name="getBoundaryPath(Landroid/graphics/Path;)Z" />
+		<method name="getBounds()Landroid/graphics/Rect;" />
+		<method name="getBounds(Landroid/graphics/Rect;)Z" />
+		<method name="isComplex()Z" />
+		<method name="isEmpty()Z" />
+		<method name="isRect()Z" />
+		<method name="op(IIIILandroid/graphics/Region$Op;)Z" />
+		<method name="op(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z" />
+		<method name="op(Landroid/graphics/Rect;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z" />
+		<method name="op(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z" />
+		<method name="op(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z" />
+		<method name="quickContains(IIII)Z" />
+		<method name="quickContains(Landroid/graphics/Rect;)Z" />
+		<method name="quickReject(IIII)Z" />
+		<method name="quickReject(Landroid/graphics/Rect;)Z" />
+		<method name="quickReject(Landroid/graphics/Region;)Z" />
+		<method name="set(IIII)Z" />
+		<method name="set(Landroid/graphics/Rect;)Z" />
+		<method name="set(Landroid/graphics/Region;)Z" />
+		<method name="setEmpty()V" />
+		<method name="setPath(Landroid/graphics/Path;Landroid/graphics/Region;)Z" />
+		<method name="translate(II)V" />
+		<method name="translate(IILandroid/graphics/Region;)V" />
+		<method name="union(Landroid/graphics/Rect;)Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/graphics/Region$Op" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Region$Op;" />
+		<method name="values()[Landroid/graphics/Region$Op;" />
+		<field name="DIFFERENCE" />
+		<field name="INTERSECT" />
+		<field name="REPLACE" />
+		<field name="REVERSE_DIFFERENCE" />
+		<field name="UNION" />
+		<field name="XOR" />
+	</class>
+	<class name="android/graphics/RegionIterator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Region;)V" />
+		<method name="next(Landroid/graphics/Rect;)Z" />
+	</class>
+	<class name="android/graphics/RenderEffect" since="31">
+		<extends name="java/lang/Object" />
+		<method name="createBitmapEffect(Landroid/graphics/Bitmap;)Landroid/graphics/RenderEffect;" />
+		<method name="createBitmapEffect(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/graphics/RenderEffect;" />
+		<method name="createBlendModeEffect(Landroid/graphics/RenderEffect;Landroid/graphics/RenderEffect;Landroid/graphics/BlendMode;)Landroid/graphics/RenderEffect;" />
+		<method name="createBlurEffect(FFLandroid/graphics/RenderEffect;Landroid/graphics/Shader$TileMode;)Landroid/graphics/RenderEffect;" />
+		<method name="createBlurEffect(FFLandroid/graphics/Shader$TileMode;)Landroid/graphics/RenderEffect;" />
+		<method name="createChainEffect(Landroid/graphics/RenderEffect;Landroid/graphics/RenderEffect;)Landroid/graphics/RenderEffect;" />
+		<method name="createColorFilterEffect(Landroid/graphics/ColorFilter;)Landroid/graphics/RenderEffect;" />
+		<method name="createColorFilterEffect(Landroid/graphics/ColorFilter;Landroid/graphics/RenderEffect;)Landroid/graphics/RenderEffect;" />
+		<method name="createOffsetEffect(FF)Landroid/graphics/RenderEffect;" />
+		<method name="createOffsetEffect(FFLandroid/graphics/RenderEffect;)Landroid/graphics/RenderEffect;" />
+		<method name="createShaderEffect(Landroid/graphics/Shader;)Landroid/graphics/RenderEffect;" />
+	</class>
+	<class name="android/graphics/RenderNode" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="beginRecording()Landroid/graphics/RecordingCanvas;" />
+		<method name="beginRecording(II)Landroid/graphics/RecordingCanvas;" />
+		<method name="computeApproximateMemoryUsage()J" />
+		<method name="discardDisplayList()V" />
+		<method name="endRecording()V" />
+		<method name="getAlpha()F" />
+		<method name="getAmbientShadowColor()I" />
+		<method name="getBottom()I" />
+		<method name="getCameraDistance()F" />
+		<method name="getClipToBounds()Z" />
+		<method name="getClipToOutline()Z" />
+		<method name="getElevation()F" />
+		<method name="getHeight()I" />
+		<method name="getInverseMatrix(Landroid/graphics/Matrix;)V" />
+		<method name="getLeft()I" />
+		<method name="getMatrix(Landroid/graphics/Matrix;)V" />
+		<method name="getPivotX()F" />
+		<method name="getPivotY()F" />
+		<method name="getRight()I" />
+		<method name="getRotationX()F" />
+		<method name="getRotationY()F" />
+		<method name="getRotationZ()F" />
+		<method name="getScaleX()F" />
+		<method name="getScaleY()F" />
+		<method name="getSpotShadowColor()I" />
+		<method name="getTop()I" />
+		<method name="getTranslationX()F" />
+		<method name="getTranslationY()F" />
+		<method name="getTranslationZ()F" />
+		<method name="getUniqueId()J" />
+		<method name="getUseCompositingLayer()Z" />
+		<method name="getWidth()I" />
+		<method name="hasDisplayList()Z" />
+		<method name="hasIdentityMatrix()Z" />
+		<method name="hasOverlappingRendering()Z" />
+		<method name="hasShadow()Z" />
+		<method name="isForceDarkAllowed()Z" />
+		<method name="isPivotExplicitlySet()Z" />
+		<method name="offsetLeftAndRight(I)Z" />
+		<method name="offsetTopAndBottom(I)Z" />
+		<method name="resetPivot()Z" />
+		<method name="setAlpha(F)Z" />
+		<method name="setAmbientShadowColor(I)Z" />
+		<method name="setCameraDistance(F)Z" />
+		<method name="setClipRect(Landroid/graphics/Rect;)Z" />
+		<method name="setClipToBounds(Z)Z" />
+		<method name="setClipToOutline(Z)Z" />
+		<method name="setElevation(F)Z" />
+		<method name="setForceDarkAllowed(Z)Z" />
+		<method name="setHasOverlappingRendering(Z)Z" />
+		<method name="setOutline(Landroid/graphics/Outline;)Z" />
+		<method name="setPivotX(F)Z" />
+		<method name="setPivotY(F)Z" />
+		<method name="setPosition(IIII)Z" />
+		<method name="setPosition(Landroid/graphics/Rect;)Z" />
+		<method name="setProjectBackwards(Z)Z" />
+		<method name="setProjectionReceiver(Z)Z" />
+		<method name="setRenderEffect(Landroid/graphics/RenderEffect;)Z" since="31" />
+		<method name="setRotationX(F)Z" />
+		<method name="setRotationY(F)Z" />
+		<method name="setRotationZ(F)Z" />
+		<method name="setScaleX(F)Z" />
+		<method name="setScaleY(F)Z" />
+		<method name="setSpotShadowColor(I)Z" />
+		<method name="setTranslationX(F)Z" />
+		<method name="setTranslationY(F)Z" />
+		<method name="setTranslationZ(F)Z" />
+		<method name="setUseCompositingLayer(ZLandroid/graphics/Paint;)Z" />
+	</class>
+	<class name="android/graphics/Shader" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="26" />
+		<method name="getLocalMatrix(Landroid/graphics/Matrix;)Z" />
+		<method name="setLocalMatrix(Landroid/graphics/Matrix;)V" />
+	</class>
+	<class name="android/graphics/Shader$TileMode" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Shader$TileMode;" />
+		<method name="values()[Landroid/graphics/Shader$TileMode;" />
+		<field name="CLAMP" />
+		<field name="DECAL" since="31" />
+		<field name="MIRROR" />
+		<field name="REPEAT" />
+	</class>
+	<class name="android/graphics/SumPathEffect" since="1">
+		<extends name="android/graphics/PathEffect" />
+		<method name="&lt;init&gt;(Landroid/graphics/PathEffect;Landroid/graphics/PathEffect;)V" />
+	</class>
+	<class name="android/graphics/SurfaceTexture" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IZ)V" since="19" />
+		<method name="&lt;init&gt;(Z)V" since="26" />
+		<method name="attachToGLContext(I)V" since="16" />
+		<method name="detachFromGLContext()V" since="16" />
+		<method name="getTimestamp()J" since="14" />
+		<method name="getTransformMatrix([F)V" />
+		<method name="isReleased()Z" since="26" />
+		<method name="release()V" since="14" />
+		<method name="releaseTexImage()V" since="19" />
+		<method name="setDefaultBufferSize(II)V" since="15" />
+		<method name="setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V" />
+		<method name="setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;Landroid/os/Handler;)V" since="21" />
+		<method name="updateTexImage()V" />
+	</class>
+	<class name="android/graphics/SurfaceTexture$OnFrameAvailableListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onFrameAvailable(Landroid/graphics/SurfaceTexture;)V" />
+	</class>
+	<class name="android/graphics/SurfaceTexture$OutOfResourcesException" since="11" deprecated="19">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="android/graphics/SweepGradient" since="1">
+		<extends name="android/graphics/Shader" />
+		<method name="&lt;init&gt;(FFII)V" />
+		<method name="&lt;init&gt;(FFJJ)V" since="29" />
+		<method name="&lt;init&gt;(FF[I[F)V" />
+		<method name="&lt;init&gt;(FF[J[F)V" since="29" />
+	</class>
+	<class name="android/graphics/Typeface" since="1">
+		<extends name="java/lang/Object" />
+		<method name="create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;" />
+		<method name="create(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;" since="28" />
+		<method name="create(Ljava/lang/String;I)Landroid/graphics/Typeface;" />
+		<method name="createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;" />
+		<method name="createFromFile(Ljava/io/File;)Landroid/graphics/Typeface;" since="4" />
+		<method name="createFromFile(Ljava/lang/String;)Landroid/graphics/Typeface;" since="4" />
+		<method name="defaultFromStyle(I)Landroid/graphics/Typeface;" />
+		<method name="getStyle()I" />
+		<method name="getWeight()I" since="28" />
+		<method name="isBold()Z" />
+		<method name="isItalic()Z" />
+		<field name="BOLD" />
+		<field name="BOLD_ITALIC" />
+		<field name="DEFAULT" />
+		<field name="DEFAULT_BOLD" />
+		<field name="ITALIC" />
+		<field name="MONOSPACE" />
+		<field name="NORMAL" />
+		<field name="SANS_SERIF" />
+		<field name="SERIF" />
+	</class>
+	<class name="android/graphics/Typeface$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/res/AssetManager;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="build()Landroid/graphics/Typeface;" />
+		<method name="setFallback(Ljava/lang/String;)Landroid/graphics/Typeface$Builder;" />
+		<method name="setFontVariationSettings(Ljava/lang/String;)Landroid/graphics/Typeface$Builder;" />
+		<method name="setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/Typeface$Builder;" />
+		<method name="setItalic(Z)Landroid/graphics/Typeface$Builder;" />
+		<method name="setTtcIndex(I)Landroid/graphics/Typeface$Builder;" />
+		<method name="setWeight(I)Landroid/graphics/Typeface$Builder;" />
+	</class>
+	<class name="android/graphics/Typeface$CustomFallbackBuilder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/fonts/FontFamily;)V" />
+		<method name="addCustomFallback(Landroid/graphics/fonts/FontFamily;)Landroid/graphics/Typeface$CustomFallbackBuilder;" />
+		<method name="build()Landroid/graphics/Typeface;" />
+		<method name="getMaxCustomFallbackCount()I" />
+		<method name="setStyle(Landroid/graphics/fonts/FontStyle;)Landroid/graphics/Typeface$CustomFallbackBuilder;" />
+		<method name="setSystemFallback(Ljava/lang/String;)Landroid/graphics/Typeface$CustomFallbackBuilder;" />
+	</class>
+	<class name="android/graphics/Xfermode" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/graphics/YuvImage" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;([BIII[I)V" />
+		<method name="compressToJpeg(Landroid/graphics/Rect;ILjava/io/OutputStream;)Z" />
+		<method name="getHeight()I" />
+		<method name="getStrides()[I" />
+		<method name="getWidth()I" />
+		<method name="getYuvData()[B" />
+		<method name="getYuvFormat()I" />
+	</class>
+	<class name="android/graphics/drawable/AdaptiveIconDrawable" since="26">
+		<extends name="android/graphics/drawable/Drawable" />
+		<implements name="android/graphics/drawable/Drawable$Callback" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" />
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;" />
+		<method name="getExtraInsetFraction()F" />
+		<method name="getForeground()Landroid/graphics/drawable/Drawable;" />
+		<method name="getIconMask()Landroid/graphics/Path;" />
+		<method name="setOpacity(I)V" />
+	</class>
+	<class name="android/graphics/drawable/Animatable" since="4">
+		<extends name="java/lang/Object" />
+		<method name="isRunning()Z" />
+		<method name="start()V" />
+		<method name="stop()V" />
+	</class>
+	<class name="android/graphics/drawable/Animatable2" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/graphics/drawable/Animatable" />
+		<method name="clearAnimationCallbacks()V" />
+		<method name="registerAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)V" />
+		<method name="unregisterAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)Z" />
+	</class>
+	<class name="android/graphics/drawable/Animatable2$AnimationCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAnimationEnd(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="onAnimationStart(Landroid/graphics/drawable/Drawable;)V" />
+	</class>
+	<class name="android/graphics/drawable/AnimatedImageDrawable" since="28">
+		<extends name="android/graphics/drawable/Drawable" />
+		<implements name="android/graphics/drawable/Animatable2" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getRepeatCount()I" />
+		<method name="setRepeatCount(I)V" />
+		<field name="REPEAT_INFINITE" />
+	</class>
+	<class name="android/graphics/drawable/AnimatedStateListDrawable" since="21">
+		<extends name="android/graphics/drawable/StateListDrawable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addState([ILandroid/graphics/drawable/Drawable;I)V" />
+		<method name="addTransition(IILandroid/graphics/drawable/Drawable;Z)V" />
+	</class>
+	<class name="android/graphics/drawable/AnimatedVectorDrawable" since="21">
+		<extends name="android/graphics/drawable/Drawable" />
+		<implements name="android/graphics/drawable/Animatable" removed="23" />
+		<implements name="android/graphics/drawable/Animatable2" since="23" />
+		<method name="&lt;init&gt;()V" />
+		<method name="reset()V" since="23" />
+	</class>
+	<class name="android/graphics/drawable/AnimationDrawable" since="1">
+		<extends name="android/graphics/drawable/DrawableContainer" />
+		<implements name="android/graphics/drawable/Animatable" since="4" />
+		<implements name="java/lang/Runnable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addFrame(Landroid/graphics/drawable/Drawable;I)V" />
+		<method name="getDuration(I)I" />
+		<method name="getFrame(I)Landroid/graphics/drawable/Drawable;" />
+		<method name="getNumberOfFrames()I" />
+		<method name="isOneShot()Z" />
+		<method name="isRunning()Z" />
+		<method name="setOneShot(Z)V" />
+		<method name="start()V" />
+		<method name="stop()V" />
+	</class>
+	<class name="android/graphics/drawable/BitmapDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;)V" since="4" deprecated="18" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;Landroid/graphics/Bitmap;)V" since="4" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;Ljava/io/InputStream;)V" since="5" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;Ljava/lang/String;)V" since="5" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="15" />
+		<method name="getBitmap()Landroid/graphics/Bitmap;" />
+		<method name="getGravity()I" />
+		<method name="getPaint()Landroid/graphics/Paint;" />
+		<method name="getTileModeX()Landroid/graphics/Shader$TileMode;" />
+		<method name="getTileModeY()Landroid/graphics/Shader$TileMode;" />
+		<method name="hasAntiAlias()Z" since="18" />
+		<method name="hasMipMap()Z" since="18" />
+		<method name="setAntiAlias(Z)V" />
+		<method name="setBitmap(Landroid/graphics/Bitmap;)V" since="31" />
+		<method name="setGravity(I)V" />
+		<method name="setMipMap(Z)V" since="18" />
+		<method name="setTargetDensity(I)V" since="4" />
+		<method name="setTargetDensity(Landroid/graphics/Canvas;)V" since="4" />
+		<method name="setTargetDensity(Landroid/util/DisplayMetrics;)V" since="4" />
+		<method name="setTileModeX(Landroid/graphics/Shader$TileMode;)V" />
+		<method name="setTileModeXY(Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V" />
+		<method name="setTileModeY(Landroid/graphics/Shader$TileMode;)V" />
+	</class>
+	<class name="android/graphics/drawable/ClipDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23" />
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23" />
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;II)V" />
+		<field name="HORIZONTAL" />
+		<field name="VERTICAL" />
+	</class>
+	<class name="android/graphics/drawable/ColorDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getAlpha()I" />
+		<method name="getColor()I" since="11" />
+		<method name="setColor(I)V" since="11" />
+	</class>
+	<class name="android/graphics/drawable/ColorStateListDrawable" since="29">
+		<extends name="android/graphics/drawable/Drawable" />
+		<implements name="android/graphics/drawable/Drawable$Callback" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/res/ColorStateList;)V" />
+		<method name="clearAlpha()V" />
+		<method name="getColorStateList()Landroid/content/res/ColorStateList;" />
+		<method name="hasFocusStateSpecified()Z" />
+		<method name="setColorStateList(Landroid/content/res/ColorStateList;)V" />
+	</class>
+	<class name="android/graphics/drawable/Drawable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="applyTheme(Landroid/content/res/Resources$Theme;)V" since="21" />
+		<method name="canApplyTheme()Z" since="21" />
+		<method name="clearColorFilter()V" />
+		<method name="copyBounds()Landroid/graphics/Rect;" />
+		<method name="copyBounds(Landroid/graphics/Rect;)V" />
+		<method name="createFromPath(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" />
+		<method name="createFromResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="4" />
+		<method name="createFromResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/drawable/Drawable;" since="5" deprecated="28" />
+		<method name="createFromStream(Ljava/io/InputStream;Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" />
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;)Landroid/graphics/drawable/Drawable;" />
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/graphics/drawable/Drawable;" />
+		<method name="createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21" />
+		<method name="draw(Landroid/graphics/Canvas;)V" />
+		<method name="getAlpha()I" since="19" />
+		<method name="getBounds()Landroid/graphics/Rect;" />
+		<method name="getCallback()Landroid/graphics/drawable/Drawable$Callback;" since="11" />
+		<method name="getChangingConfigurations()I" />
+		<method name="getColorFilter()Landroid/graphics/ColorFilter;" since="21" />
+		<method name="getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;" />
+		<method name="getCurrent()Landroid/graphics/drawable/Drawable;" />
+		<method name="getDirtyBounds()Landroid/graphics/Rect;" since="21" />
+		<method name="getHotspotBounds(Landroid/graphics/Rect;)V" since="23" />
+		<method name="getIntrinsicHeight()I" />
+		<method name="getIntrinsicWidth()I" />
+		<method name="getLayoutDirection()I" since="23" />
+		<method name="getLevel()I" />
+		<method name="getMinimumHeight()I" />
+		<method name="getMinimumWidth()I" />
+		<method name="getOpacity()I" deprecated="29" />
+		<method name="getOpticalInsets()Landroid/graphics/Insets;" since="29" />
+		<method name="getOutline(Landroid/graphics/Outline;)V" since="21" />
+		<method name="getPadding(Landroid/graphics/Rect;)Z" />
+		<method name="getState()[I" />
+		<method name="getTransparentRegion()Landroid/graphics/Region;" />
+		<method name="hasFocusStateSpecified()Z" since="31" />
+		<method name="inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)V" />
+		<method name="inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V" since="21" />
+		<method name="invalidateSelf()V" />
+		<method name="isAutoMirrored()Z" since="19" />
+		<method name="isFilterBitmap()Z" since="23" />
+		<method name="isProjected()Z" since="29" />
+		<method name="isStateful()Z" />
+		<method name="isVisible()Z" />
+		<method name="jumpToCurrentState()V" since="11" />
+		<method name="mutate()Landroid/graphics/drawable/Drawable;" since="3" />
+		<method name="onBoundsChange(Landroid/graphics/Rect;)V" />
+		<method name="onLayoutDirectionChanged(I)Z" since="23" />
+		<method name="onLevelChange(I)Z" />
+		<method name="onStateChange([I)Z" />
+		<method name="resolveOpacity(II)I" />
+		<method name="scheduleSelf(Ljava/lang/Runnable;J)V" />
+		<method name="setAlpha(I)V" />
+		<method name="setAutoMirrored(Z)V" since="19" />
+		<method name="setBounds(IIII)V" />
+		<method name="setBounds(Landroid/graphics/Rect;)V" />
+		<method name="setCallback(Landroid/graphics/drawable/Drawable$Callback;)V" />
+		<method name="setChangingConfigurations(I)V" />
+		<method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V" deprecated="29" />
+		<method name="setColorFilter(Landroid/graphics/ColorFilter;)V" />
+		<method name="setDither(Z)V" deprecated="23" />
+		<method name="setFilterBitmap(Z)V" />
+		<method name="setHotspot(FF)V" since="21" />
+		<method name="setHotspotBounds(IIII)V" since="21" />
+		<method name="setLayoutDirection(I)Z" since="23" />
+		<method name="setLevel(I)Z" />
+		<method name="setState([I)Z" />
+		<method name="setTint(I)V" since="21" />
+		<method name="setTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setVisible(ZZ)Z" />
+		<method name="unscheduleSelf(Ljava/lang/Runnable;)V" />
+	</class>
+	<class name="android/graphics/drawable/Drawable$Callback" since="1">
+		<extends name="java/lang/Object" />
+		<method name="invalidateDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V" />
+		<method name="unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V" />
+	</class>
+	<class name="android/graphics/drawable/Drawable$ConstantState" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="canApplyTheme()Z" since="21" />
+		<method name="getChangingConfigurations()I" />
+		<method name="newDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;" since="5" />
+		<method name="newDrawable(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21" />
+	</class>
+	<class name="android/graphics/drawable/DrawableContainer" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<implements name="android/graphics/drawable/Drawable$Callback" />
+		<method name="&lt;init&gt;()V" />
+		<method name="selectDrawable(I)Z" />
+		<method name="setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V" />
+		<method name="setEnterFadeDuration(I)V" since="11" />
+		<method name="setExitFadeDuration(I)V" since="11" />
+	</class>
+	<class name="android/graphics/drawable/DrawableContainer$DrawableContainerState" since="1">
+		<extends name="android/graphics/drawable/Drawable$ConstantState" />
+		<method name="addChild(Landroid/graphics/drawable/Drawable;)I" />
+		<method name="canConstantState()Z" />
+		<method name="computeConstantSize()V" since="11" />
+		<method name="getChild(I)Landroid/graphics/drawable/Drawable;" since="19" />
+		<method name="getChildCount()I" />
+		<method name="getChildren()[Landroid/graphics/drawable/Drawable;" />
+		<method name="getConstantHeight()I" />
+		<method name="getConstantMinimumHeight()I" />
+		<method name="getConstantMinimumWidth()I" />
+		<method name="getConstantPadding()Landroid/graphics/Rect;" />
+		<method name="getConstantWidth()I" />
+		<method name="getEnterFadeDuration()I" since="11" />
+		<method name="getExitFadeDuration()I" since="11" />
+		<method name="getOpacity()I" />
+		<method name="growArray(II)V" />
+		<method name="isConstantSize()Z" />
+		<method name="isStateful()Z" />
+		<method name="setConstantSize(Z)V" />
+		<method name="setEnterFadeDuration(I)V" since="11" />
+		<method name="setExitFadeDuration(I)V" since="11" />
+		<method name="setVariablePadding(Z)V" />
+	</class>
+	<class name="android/graphics/drawable/DrawableWrapper" since="23">
+		<extends name="android/graphics/drawable/Drawable" />
+		<implements name="android/graphics/drawable/Drawable$Callback" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="setDrawable(Landroid/graphics/drawable/Drawable;)V" />
+	</class>
+	<class name="android/graphics/drawable/GradientDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V" />
+		<method name="getColor()Landroid/content/res/ColorStateList;" since="24" />
+		<method name="getColors()[I" since="24" />
+		<method name="getCornerRadii()[F" since="24" />
+		<method name="getCornerRadius()F" since="24" />
+		<method name="getGradientCenterX()F" since="24" />
+		<method name="getGradientCenterY()F" since="24" />
+		<method name="getGradientRadius()F" since="21" />
+		<method name="getGradientType()I" since="24" />
+		<method name="getInnerRadius()I" since="29" />
+		<method name="getInnerRadiusRatio()F" since="29" />
+		<method name="getOrientation()Landroid/graphics/drawable/GradientDrawable$Orientation;" since="16" />
+		<method name="getShape()I" since="24" />
+		<method name="getThickness()I" since="29" />
+		<method name="getThicknessRatio()F" since="29" />
+		<method name="getUseLevel()Z" since="24" />
+		<method name="setColor(I)V" />
+		<method name="setColor(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setColors([I)V" since="16" />
+		<method name="setColors([I[F)V" since="29" />
+		<method name="setCornerRadii([F)V" />
+		<method name="setCornerRadius(F)V" />
+		<method name="setGradientCenter(FF)V" />
+		<method name="setGradientRadius(F)V" />
+		<method name="setGradientType(I)V" />
+		<method name="setInnerRadius(I)V" since="29" />
+		<method name="setInnerRadiusRatio(F)V" since="29" />
+		<method name="setOrientation(Landroid/graphics/drawable/GradientDrawable$Orientation;)V" since="16" />
+		<method name="setPadding(IIII)V" since="29" />
+		<method name="setShape(I)V" />
+		<method name="setSize(II)V" />
+		<method name="setStroke(II)V" />
+		<method name="setStroke(IIFF)V" />
+		<method name="setStroke(ILandroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setStroke(ILandroid/content/res/ColorStateList;FF)V" since="21" />
+		<method name="setThickness(I)V" since="29" />
+		<method name="setThicknessRatio(F)V" since="29" />
+		<method name="setUseLevel(Z)V" />
+		<field name="LINE" />
+		<field name="LINEAR_GRADIENT" />
+		<field name="OVAL" />
+		<field name="RADIAL_GRADIENT" />
+		<field name="RECTANGLE" />
+		<field name="RING" />
+		<field name="SWEEP_GRADIENT" />
+	</class>
+	<class name="android/graphics/drawable/GradientDrawable$Orientation" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/drawable/GradientDrawable$Orientation;" />
+		<method name="values()[Landroid/graphics/drawable/GradientDrawable$Orientation;" />
+		<field name="BL_TR" />
+		<field name="BOTTOM_TOP" />
+		<field name="BR_TL" />
+		<field name="LEFT_RIGHT" />
+		<field name="RIGHT_LEFT" />
+		<field name="TL_BR" />
+		<field name="TOP_BOTTOM" />
+		<field name="TR_BL" />
+	</class>
+	<class name="android/graphics/drawable/Icon" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createWithAdaptiveBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;" since="26" />
+		<method name="createWithAdaptiveBitmapContentUri(Landroid/net/Uri;)Landroid/graphics/drawable/Icon;" since="30" />
+		<method name="createWithAdaptiveBitmapContentUri(Ljava/lang/String;)Landroid/graphics/drawable/Icon;" since="30" />
+		<method name="createWithBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;" />
+		<method name="createWithContentUri(Landroid/net/Uri;)Landroid/graphics/drawable/Icon;" />
+		<method name="createWithContentUri(Ljava/lang/String;)Landroid/graphics/drawable/Icon;" />
+		<method name="createWithData([BII)Landroid/graphics/drawable/Icon;" />
+		<method name="createWithFilePath(Ljava/lang/String;)Landroid/graphics/drawable/Icon;" />
+		<method name="createWithResource(Landroid/content/Context;I)Landroid/graphics/drawable/Icon;" />
+		<method name="createWithResource(Ljava/lang/String;I)Landroid/graphics/drawable/Icon;" />
+		<method name="getResId()I" since="28" />
+		<method name="getResPackage()Ljava/lang/String;" since="28" />
+		<method name="getType()I" since="28" />
+		<method name="getUri()Landroid/net/Uri;" since="28" />
+		<method name="loadDrawable(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadDrawableAsync(Landroid/content/Context;Landroid/graphics/drawable/Icon$OnDrawableLoadedListener;Landroid/os/Handler;)V" />
+		<method name="loadDrawableAsync(Landroid/content/Context;Landroid/os/Message;)V" />
+		<method name="setTint(I)Landroid/graphics/drawable/Icon;" />
+		<method name="setTintBlendMode(Landroid/graphics/BlendMode;)Landroid/graphics/drawable/Icon;" since="29" />
+		<method name="setTintList(Landroid/content/res/ColorStateList;)Landroid/graphics/drawable/Icon;" />
+		<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/drawable/Icon;" />
+		<field name="CREATOR" />
+		<field name="TYPE_ADAPTIVE_BITMAP" since="28" />
+		<field name="TYPE_BITMAP" since="28" />
+		<field name="TYPE_DATA" since="28" />
+		<field name="TYPE_RESOURCE" since="28" />
+		<field name="TYPE_URI" since="28" />
+		<field name="TYPE_URI_ADAPTIVE_BITMAP" since="30" />
+	</class>
+	<class name="android/graphics/drawable/Icon$OnDrawableLoadedListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onDrawableLoaded(Landroid/graphics/drawable/Drawable;)V" />
+	</class>
+	<class name="android/graphics/drawable/InsetDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23" />
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23" />
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;F)V" since="26" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;FFFF)V" since="26" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;I)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;IIII)V" />
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="19" removed="23" />
+	</class>
+	<class name="android/graphics/drawable/LayerDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<implements name="android/graphics/drawable/Drawable$Callback" />
+		<method name="&lt;init&gt;([Landroid/graphics/drawable/Drawable;)V" />
+		<method name="addLayer(Landroid/graphics/drawable/Drawable;)I" since="23" />
+		<method name="findDrawableByLayerId(I)Landroid/graphics/drawable/Drawable;" />
+		<method name="findIndexByLayerId(I)I" since="23" />
+		<method name="getBottomPadding()I" since="23" />
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" />
+		<method name="getEndPadding()I" since="23" />
+		<method name="getId(I)I" />
+		<method name="getLayerGravity(I)I" since="23" />
+		<method name="getLayerHeight(I)I" since="23" />
+		<method name="getLayerInsetBottom(I)I" since="23" />
+		<method name="getLayerInsetEnd(I)I" since="23" />
+		<method name="getLayerInsetLeft(I)I" since="23" />
+		<method name="getLayerInsetRight(I)I" since="23" />
+		<method name="getLayerInsetStart(I)I" since="23" />
+		<method name="getLayerInsetTop(I)I" since="23" />
+		<method name="getLayerWidth(I)I" since="23" />
+		<method name="getLeftPadding()I" since="23" />
+		<method name="getNumberOfLayers()I" />
+		<method name="getPaddingMode()I" since="21" />
+		<method name="getRightPadding()I" since="23" />
+		<method name="getStartPadding()I" since="23" />
+		<method name="getTopPadding()I" since="23" />
+		<method name="setDrawable(ILandroid/graphics/drawable/Drawable;)V" since="23" />
+		<method name="setDrawableByLayerId(ILandroid/graphics/drawable/Drawable;)Z" />
+		<method name="setId(II)V" />
+		<method name="setLayerGravity(II)V" since="23" />
+		<method name="setLayerHeight(II)V" since="23" />
+		<method name="setLayerInset(IIIII)V" />
+		<method name="setLayerInsetBottom(II)V" since="23" />
+		<method name="setLayerInsetEnd(II)V" since="23" />
+		<method name="setLayerInsetLeft(II)V" since="23" />
+		<method name="setLayerInsetRelative(IIIII)V" since="23" />
+		<method name="setLayerInsetRight(II)V" since="23" />
+		<method name="setLayerInsetStart(II)V" since="23" />
+		<method name="setLayerInsetTop(II)V" since="23" />
+		<method name="setLayerSize(III)V" since="23" />
+		<method name="setLayerWidth(II)V" since="23" />
+		<method name="setOpacity(I)V" since="11" />
+		<method name="setPadding(IIII)V" since="23" />
+		<method name="setPaddingMode(I)V" since="21" />
+		<method name="setPaddingRelative(IIII)V" since="23" />
+		<field name="INSET_UNDEFINED" since="24" />
+		<field name="PADDING_MODE_NEST" since="21" />
+		<field name="PADDING_MODE_STACK" since="21" />
+	</class>
+	<class name="android/graphics/drawable/LevelListDrawable" since="1">
+		<extends name="android/graphics/drawable/DrawableContainer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addLevel(IILandroid/graphics/drawable/Drawable;)V" />
+	</class>
+	<class name="android/graphics/drawable/NinePatchDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" since="4" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;Landroid/graphics/NinePatch;)V" since="4" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/graphics/NinePatch;)V" deprecated="15" />
+		<method name="getPaint()Landroid/graphics/Paint;" />
+		<method name="setTargetDensity(I)V" since="4" />
+		<method name="setTargetDensity(Landroid/graphics/Canvas;)V" since="4" />
+		<method name="setTargetDensity(Landroid/util/DisplayMetrics;)V" since="4" />
+	</class>
+	<class name="android/graphics/drawable/PaintDrawable" since="1">
+		<extends name="android/graphics/drawable/ShapeDrawable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="setCornerRadii([F)V" />
+		<method name="setCornerRadius(F)V" />
+	</class>
+	<class name="android/graphics/drawable/PictureDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<method name="&lt;init&gt;(Landroid/graphics/Picture;)V" />
+		<method name="getPicture()Landroid/graphics/Picture;" />
+		<method name="setPicture(Landroid/graphics/Picture;)V" />
+	</class>
+	<class name="android/graphics/drawable/RippleDrawable" since="21">
+		<extends name="android/graphics/drawable/LayerDrawable" />
+		<method name="&lt;init&gt;(Landroid/content/res/ColorStateList;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" />
+		<method name="getEffectColor()Landroid/content/res/ColorStateList;" since="31" />
+		<method name="getRadius()I" since="23" />
+		<method name="setColor(Landroid/content/res/ColorStateList;)V" />
+		<method name="setEffectColor(Landroid/content/res/ColorStateList;)V" since="31" />
+		<method name="setRadius(I)V" since="23" />
+		<field name="RADIUS_AUTO" since="23" />
+	</class>
+	<class name="android/graphics/drawable/RotateDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23" />
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23" />
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="3" removed="23" />
+		<method name="getFromDegrees()F" since="21" />
+		<method name="getPivotX()F" since="21" />
+		<method name="getPivotY()F" since="21" />
+		<method name="getToDegrees()F" since="21" />
+		<method name="isPivotXRelative()Z" since="21" />
+		<method name="isPivotYRelative()Z" since="21" />
+		<method name="setDrawable(Landroid/graphics/drawable/Drawable;)V" since="21" removed="23" />
+		<method name="setFromDegrees(F)V" since="21" />
+		<method name="setPivotX(F)V" since="21" />
+		<method name="setPivotXRelative(Z)V" since="21" />
+		<method name="setPivotY(F)V" since="21" />
+		<method name="setPivotYRelative(Z)V" since="21" />
+		<method name="setToDegrees(F)V" since="21" />
+	</class>
+	<class name="android/graphics/drawable/ScaleDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23" />
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23" />
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;IFF)V" />
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="3" removed="23" />
+	</class>
+	<class name="android/graphics/drawable/ShapeDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/shapes/Shape;)V" />
+		<method name="getPaint()Landroid/graphics/Paint;" />
+		<method name="getShaderFactory()Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;" />
+		<method name="getShape()Landroid/graphics/drawable/shapes/Shape;" />
+		<method name="inflateTag(Ljava/lang/String;Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Z" />
+		<method name="onDraw(Landroid/graphics/drawable/shapes/Shape;Landroid/graphics/Canvas;Landroid/graphics/Paint;)V" />
+		<method name="setIntrinsicHeight(I)V" />
+		<method name="setIntrinsicWidth(I)V" />
+		<method name="setPadding(IIII)V" />
+		<method name="setPadding(Landroid/graphics/Rect;)V" />
+		<method name="setShaderFactory(Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;)V" />
+		<method name="setShape(Landroid/graphics/drawable/shapes/Shape;)V" />
+	</class>
+	<class name="android/graphics/drawable/ShapeDrawable$ShaderFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="resize(II)Landroid/graphics/Shader;" />
+	</class>
+	<class name="android/graphics/drawable/StateListDrawable" since="1">
+		<extends name="android/graphics/drawable/DrawableContainer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addState([ILandroid/graphics/drawable/Drawable;)V" />
+		<method name="findStateDrawableIndex([I)I" since="29" />
+		<method name="getStateCount()I" since="29" />
+		<method name="getStateDrawable(I)Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getStateSet(I)[I" since="29" />
+	</class>
+	<class name="android/graphics/drawable/TransitionDrawable" since="1">
+		<extends name="android/graphics/drawable/LayerDrawable" />
+		<method name="&lt;init&gt;([Landroid/graphics/drawable/Drawable;)V" since="3" />
+		<method name="isCrossFadeEnabled()Z" />
+		<method name="resetTransition()V" />
+		<method name="reverseTransition(I)V" />
+		<method name="setCrossFadeEnabled(Z)V" />
+		<method name="startTransition(I)V" />
+	</class>
+	<class name="android/graphics/drawable/VectorDrawable" since="21">
+		<extends name="android/graphics/drawable/Drawable" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/graphics/drawable/shapes/ArcShape" since="1">
+		<extends name="android/graphics/drawable/shapes/RectShape" />
+		<method name="&lt;init&gt;(FF)V" />
+		<method name="clone()Landroid/graphics/drawable/shapes/ArcShape;" since="26" />
+		<method name="getStartAngle()F" since="26" />
+		<method name="getSweepAngle()F" since="26" />
+	</class>
+	<class name="android/graphics/drawable/shapes/OvalShape" since="1">
+		<extends name="android/graphics/drawable/shapes/RectShape" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Landroid/graphics/drawable/shapes/OvalShape;" since="26" />
+	</class>
+	<class name="android/graphics/drawable/shapes/PathShape" since="1">
+		<extends name="android/graphics/drawable/shapes/Shape" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;FF)V" />
+		<method name="clone()Landroid/graphics/drawable/shapes/PathShape;" since="3" />
+	</class>
+	<class name="android/graphics/drawable/shapes/RectShape" since="1">
+		<extends name="android/graphics/drawable/shapes/Shape" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Landroid/graphics/drawable/shapes/RectShape;" since="3" />
+		<method name="rect()Landroid/graphics/RectF;" />
+	</class>
+	<class name="android/graphics/drawable/shapes/RoundRectShape" since="1">
+		<extends name="android/graphics/drawable/shapes/RectShape" />
+		<method name="&lt;init&gt;([FLandroid/graphics/RectF;[F)V" />
+		<method name="clone()Landroid/graphics/drawable/shapes/RoundRectShape;" since="3" />
+	</class>
+	<class name="android/graphics/drawable/shapes/Shape" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Landroid/graphics/drawable/shapes/Shape;" since="3" />
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V" />
+		<method name="getHeight()F" />
+		<method name="getOutline(Landroid/graphics/Outline;)V" since="21" />
+		<method name="getWidth()F" />
+		<method name="hasAlpha()Z" />
+		<method name="onResize(FF)V" />
+		<method name="resize(FF)V" />
+	</class>
+	<class name="android/graphics/fonts/Font" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getAxes()[Landroid/graphics/fonts/FontVariationAxis;" />
+		<method name="getBuffer()Ljava/nio/ByteBuffer;" />
+		<method name="getFile()Ljava/io/File;" />
+		<method name="getGlyphBounds(ILandroid/graphics/Paint;Landroid/graphics/RectF;)F" since="31" />
+		<method name="getLocaleList()Landroid/os/LocaleList;" />
+		<method name="getMetrics(Landroid/graphics/Paint;Landroid/graphics/Paint$FontMetrics;)V" since="31" />
+		<method name="getSourceIdentifier()I" since="31" />
+		<method name="getStyle()Landroid/graphics/fonts/FontStyle;" />
+		<method name="getTtcIndex()I" />
+	</class>
+	<class name="android/graphics/fonts/Font$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/res/AssetManager;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;I)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/fonts/Font;)V" since="31" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;)V" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;JJ)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/nio/ByteBuffer;)V" />
+		<method name="build()Landroid/graphics/fonts/Font;" />
+		<method name="setFontVariationSettings(Ljava/lang/String;)Landroid/graphics/fonts/Font$Builder;" />
+		<method name="setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/fonts/Font$Builder;" />
+		<method name="setSlant(I)Landroid/graphics/fonts/Font$Builder;" />
+		<method name="setTtcIndex(I)Landroid/graphics/fonts/Font$Builder;" />
+		<method name="setWeight(I)Landroid/graphics/fonts/Font$Builder;" />
+	</class>
+	<class name="android/graphics/fonts/FontFamily" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getFont(I)Landroid/graphics/fonts/Font;" />
+		<method name="getSize()I" />
+	</class>
+	<class name="android/graphics/fonts/FontFamily$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/fonts/Font;)V" />
+		<method name="addFont(Landroid/graphics/fonts/Font;)Landroid/graphics/fonts/FontFamily$Builder;" />
+		<method name="build()Landroid/graphics/fonts/FontFamily;" />
+	</class>
+	<class name="android/graphics/fonts/FontStyle" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getSlant()I" />
+		<method name="getWeight()I" />
+		<field name="FONT_SLANT_ITALIC" />
+		<field name="FONT_SLANT_UPRIGHT" />
+		<field name="FONT_WEIGHT_BLACK" />
+		<field name="FONT_WEIGHT_BOLD" />
+		<field name="FONT_WEIGHT_EXTRA_BOLD" />
+		<field name="FONT_WEIGHT_EXTRA_LIGHT" />
+		<field name="FONT_WEIGHT_LIGHT" />
+		<field name="FONT_WEIGHT_MAX" />
+		<field name="FONT_WEIGHT_MEDIUM" />
+		<field name="FONT_WEIGHT_MIN" />
+		<field name="FONT_WEIGHT_NORMAL" />
+		<field name="FONT_WEIGHT_SEMI_BOLD" />
+		<field name="FONT_WEIGHT_THIN" />
+	</class>
+	<class name="android/graphics/fonts/FontVariationAxis" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;F)V" />
+		<method name="fromFontVariationSettings(Ljava/lang/String;)[Landroid/graphics/fonts/FontVariationAxis;" />
+		<method name="getStyleValue()F" />
+		<method name="getTag()Ljava/lang/String;" />
+		<method name="toFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Ljava/lang/String;" />
+	</class>
+	<class name="android/graphics/fonts/SystemFonts" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getAvailableFonts()Ljava/util/Set;" />
+	</class>
+	<class name="android/graphics/pdf/PdfDocument" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="close()V" />
+		<method name="finishPage(Landroid/graphics/pdf/PdfDocument$Page;)V" />
+		<method name="getPages()Ljava/util/List;" />
+		<method name="startPage(Landroid/graphics/pdf/PdfDocument$PageInfo;)Landroid/graphics/pdf/PdfDocument$Page;" />
+		<method name="writeTo(Ljava/io/OutputStream;)V" />
+	</class>
+	<class name="android/graphics/pdf/PdfDocument$Page" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getCanvas()Landroid/graphics/Canvas;" />
+		<method name="getInfo()Landroid/graphics/pdf/PdfDocument$PageInfo;" />
+	</class>
+	<class name="android/graphics/pdf/PdfDocument$PageInfo" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getContentRect()Landroid/graphics/Rect;" />
+		<method name="getPageHeight()I" />
+		<method name="getPageNumber()I" />
+		<method name="getPageWidth()I" />
+	</class>
+	<class name="android/graphics/pdf/PdfDocument$PageInfo$Builder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="create()Landroid/graphics/pdf/PdfDocument$PageInfo;" />
+		<method name="setContentRect(Landroid/graphics/Rect;)Landroid/graphics/pdf/PdfDocument$PageInfo$Builder;" />
+	</class>
+	<class name="android/graphics/pdf/PdfRenderer" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;)V" />
+		<method name="getPageCount()I" />
+		<method name="openPage(I)Landroid/graphics/pdf/PdfRenderer$Page;" />
+		<method name="shouldScaleForPrinting()Z" />
+	</class>
+	<class name="android/graphics/pdf/PdfRenderer$Page" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getHeight()I" />
+		<method name="getIndex()I" />
+		<method name="getWidth()I" />
+		<method name="render(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Matrix;I)V" />
+		<field name="RENDER_MODE_FOR_DISPLAY" />
+		<field name="RENDER_MODE_FOR_PRINT" />
+	</class>
+	<class name="android/graphics/text/LineBreaker" since="29">
+		<extends name="java/lang/Object" />
+		<method name="computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;" />
+		<field name="BREAK_STRATEGY_BALANCED" />
+		<field name="BREAK_STRATEGY_HIGH_QUALITY" />
+		<field name="BREAK_STRATEGY_SIMPLE" />
+		<field name="HYPHENATION_FREQUENCY_FULL" />
+		<field name="HYPHENATION_FREQUENCY_NONE" />
+		<field name="HYPHENATION_FREQUENCY_NORMAL" />
+		<field name="JUSTIFICATION_MODE_INTER_WORD" />
+		<field name="JUSTIFICATION_MODE_NONE" />
+	</class>
+	<class name="android/graphics/text/LineBreaker$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/graphics/text/LineBreaker;" />
+		<method name="setBreakStrategy(I)Landroid/graphics/text/LineBreaker$Builder;" />
+		<method name="setHyphenationFrequency(I)Landroid/graphics/text/LineBreaker$Builder;" />
+		<method name="setIndents([I)Landroid/graphics/text/LineBreaker$Builder;" />
+		<method name="setJustificationMode(I)Landroid/graphics/text/LineBreaker$Builder;" />
+	</class>
+	<class name="android/graphics/text/LineBreaker$ParagraphConstraints" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDefaultTabStop()F" />
+		<method name="getFirstWidth()F" />
+		<method name="getFirstWidthLineCount()I" />
+		<method name="getTabStops()[F" />
+		<method name="getWidth()F" />
+		<method name="setIndent(FI)V" />
+		<method name="setTabStops([FF)V" />
+		<method name="setWidth(F)V" />
+	</class>
+	<class name="android/graphics/text/LineBreaker$Result" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getEndLineHyphenEdit(I)I" />
+		<method name="getLineAscent(I)F" />
+		<method name="getLineBreakOffset(I)I" />
+		<method name="getLineCount()I" />
+		<method name="getLineDescent(I)F" />
+		<method name="getLineWidth(I)F" />
+		<method name="getStartLineHyphenEdit(I)I" />
+		<method name="hasLineTab(I)Z" />
+	</class>
+	<class name="android/graphics/text/MeasuredText" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getBounds(IILandroid/graphics/Rect;)V" />
+		<method name="getCharWidthAt(I)F" />
+		<method name="getWidth(II)F" />
+	</class>
+	<class name="android/graphics/text/MeasuredText$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/text/MeasuredText;)V" />
+		<method name="&lt;init&gt;([C)V" />
+		<method name="appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;" />
+		<method name="appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder;" />
+		<method name="build()Landroid/graphics/text/MeasuredText;" />
+		<method name="setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;" />
+		<method name="setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;" />
+	</class>
+	<class name="android/graphics/text/PositionedGlyphs" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getAdvance()F" />
+		<method name="getAscent()F" />
+		<method name="getDescent()F" />
+		<method name="getFont(I)Landroid/graphics/fonts/Font;" />
+		<method name="getGlyphId(I)I" />
+		<method name="getGlyphX(I)F" />
+		<method name="getGlyphY(I)F" />
+		<method name="getOffsetX()F" />
+		<method name="getOffsetY()F" />
+		<method name="glyphCount()I" />
+	</class>
+	<class name="android/graphics/text/TextRunShaper" since="31">
+		<extends name="java/lang/Object" />
+		<method name="shapeTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)Landroid/graphics/text/PositionedGlyphs;" />
+		<method name="shapeTextRun([CIIIIFFZLandroid/graphics/Paint;)Landroid/graphics/text/PositionedGlyphs;" />
+	</class>
+	<class name="android/hardware/BatteryState" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getCapacity()F" />
+		<method name="getStatus()I" />
+		<method name="isPresent()Z" />
+		<field name="STATUS_CHARGING" />
+		<field name="STATUS_DISCHARGING" />
+		<field name="STATUS_FULL" />
+		<field name="STATUS_NOT_CHARGING" />
+		<field name="STATUS_UNKNOWN" />
+	</class>
+	<class name="android/hardware/Camera" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="addCallbackBuffer([B)V" since="8" deprecated="29" />
+		<method name="autoFocus(Landroid/hardware/Camera$AutoFocusCallback;)V" deprecated="29" />
+		<method name="cancelAutoFocus()V" since="5" deprecated="29" />
+		<method name="enableShutterSound(Z)Z" since="17" deprecated="29" />
+		<method name="getCameraInfo(ILandroid/hardware/Camera$CameraInfo;)V" since="9" deprecated="29" />
+		<method name="getNumberOfCameras()I" since="9" deprecated="29" />
+		<method name="getParameters()Landroid/hardware/Camera$Parameters;" deprecated="29" />
+		<method name="lock()V" since="5" deprecated="29" />
+		<method name="open()Landroid/hardware/Camera;" deprecated="29" />
+		<method name="open(I)Landroid/hardware/Camera;" since="9" deprecated="29" />
+		<method name="reconnect()V" since="8" deprecated="29" />
+		<method name="release()V" deprecated="29" />
+		<method name="setAutoFocusMoveCallback(Landroid/hardware/Camera$AutoFocusMoveCallback;)V" since="16" deprecated="29" />
+		<method name="setDisplayOrientation(I)V" since="8" deprecated="29" />
+		<method name="setErrorCallback(Landroid/hardware/Camera$ErrorCallback;)V" deprecated="29" />
+		<method name="setFaceDetectionListener(Landroid/hardware/Camera$FaceDetectionListener;)V" since="14" deprecated="29" />
+		<method name="setOneShotPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" since="3" deprecated="29" />
+		<method name="setParameters(Landroid/hardware/Camera$Parameters;)V" deprecated="29" />
+		<method name="setPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" deprecated="29" />
+		<method name="setPreviewCallbackWithBuffer(Landroid/hardware/Camera$PreviewCallback;)V" since="8" deprecated="29" />
+		<method name="setPreviewDisplay(Landroid/view/SurfaceHolder;)V" deprecated="29" />
+		<method name="setPreviewTexture(Landroid/graphics/SurfaceTexture;)V" since="11" deprecated="29" />
+		<method name="setZoomChangeListener(Landroid/hardware/Camera$OnZoomChangeListener;)V" since="8" deprecated="29" />
+		<method name="startFaceDetection()V" since="14" deprecated="29" />
+		<method name="startPreview()V" deprecated="29" />
+		<method name="startSmoothZoom(I)V" since="8" deprecated="29" />
+		<method name="stopFaceDetection()V" since="14" deprecated="29" />
+		<method name="stopPreview()V" deprecated="29" />
+		<method name="stopSmoothZoom()V" since="8" deprecated="29" />
+		<method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" deprecated="29" />
+		<method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" since="5" deprecated="29" />
+		<method name="unlock()V" since="5" deprecated="29" />
+		<field name="ACTION_NEW_PICTURE" since="14" deprecated="24" />
+		<field name="ACTION_NEW_VIDEO" since="14" deprecated="24" />
+		<field name="CAMERA_ERROR_EVICTED" since="23" deprecated="29" />
+		<field name="CAMERA_ERROR_SERVER_DIED" deprecated="29" />
+		<field name="CAMERA_ERROR_UNKNOWN" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$Area" since="14" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;I)V" deprecated="29" />
+		<field name="rect" deprecated="29" />
+		<field name="weight" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$AutoFocusCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onAutoFocus(ZLandroid/hardware/Camera;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$AutoFocusMoveCallback" since="16" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onAutoFocusMoving(ZLandroid/hardware/Camera;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$CameraInfo" since="9" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<field name="CAMERA_FACING_BACK" deprecated="29" />
+		<field name="CAMERA_FACING_FRONT" deprecated="29" />
+		<field name="canDisableShutterSound" since="17" deprecated="29" />
+		<field name="facing" deprecated="29" />
+		<field name="orientation" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$ErrorCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onError(ILandroid/hardware/Camera;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$Face" since="14" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<field name="id" deprecated="29" />
+		<field name="leftEye" deprecated="29" />
+		<field name="mouth" deprecated="29" />
+		<field name="rect" deprecated="29" />
+		<field name="rightEye" deprecated="29" />
+		<field name="score" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$FaceDetectionListener" since="14" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onFaceDetection([Landroid/hardware/Camera$Face;Landroid/hardware/Camera;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$OnZoomChangeListener" since="8" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onZoomChange(IZLandroid/hardware/Camera;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$Parameters" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="flatten()Ljava/lang/String;" deprecated="29" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/String;" deprecated="29" />
+		<method name="getAntibanding()Ljava/lang/String;" since="5" deprecated="29" />
+		<method name="getAutoExposureLock()Z" since="14" deprecated="29" />
+		<method name="getAutoWhiteBalanceLock()Z" since="14" deprecated="29" />
+		<method name="getColorEffect()Ljava/lang/String;" since="5" deprecated="29" />
+		<method name="getExposureCompensation()I" since="8" deprecated="29" />
+		<method name="getExposureCompensationStep()F" since="8" deprecated="29" />
+		<method name="getFlashMode()Ljava/lang/String;" since="5" deprecated="29" />
+		<method name="getFocalLength()F" since="8" deprecated="29" />
+		<method name="getFocusAreas()Ljava/util/List;" since="14" deprecated="29" />
+		<method name="getFocusDistances([F)V" since="9" deprecated="29" />
+		<method name="getFocusMode()Ljava/lang/String;" since="5" deprecated="29" />
+		<method name="getHorizontalViewAngle()F" since="8" deprecated="29" />
+		<method name="getInt(Ljava/lang/String;)I" deprecated="29" />
+		<method name="getJpegQuality()I" since="5" deprecated="29" />
+		<method name="getJpegThumbnailQuality()I" since="5" deprecated="29" />
+		<method name="getJpegThumbnailSize()Landroid/hardware/Camera$Size;" since="5" deprecated="29" />
+		<method name="getMaxExposureCompensation()I" since="8" deprecated="29" />
+		<method name="getMaxNumDetectedFaces()I" since="14" deprecated="29" />
+		<method name="getMaxNumFocusAreas()I" since="14" deprecated="29" />
+		<method name="getMaxNumMeteringAreas()I" since="14" deprecated="29" />
+		<method name="getMaxZoom()I" since="8" deprecated="29" />
+		<method name="getMeteringAreas()Ljava/util/List;" since="14" deprecated="29" />
+		<method name="getMinExposureCompensation()I" since="8" deprecated="29" />
+		<method name="getPictureFormat()I" deprecated="29" />
+		<method name="getPictureSize()Landroid/hardware/Camera$Size;" deprecated="29" />
+		<method name="getPreferredPreviewSizeForVideo()Landroid/hardware/Camera$Size;" since="11" deprecated="29" />
+		<method name="getPreviewFormat()I" deprecated="29" />
+		<method name="getPreviewFpsRange([I)V" since="9" deprecated="29" />
+		<method name="getPreviewFrameRate()I" deprecated="15" />
+		<method name="getPreviewSize()Landroid/hardware/Camera$Size;" deprecated="29" />
+		<method name="getSceneMode()Ljava/lang/String;" since="5" deprecated="29" />
+		<method name="getSupportedAntibanding()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedColorEffects()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedFlashModes()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedFocusModes()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedJpegThumbnailSizes()Ljava/util/List;" since="8" deprecated="29" />
+		<method name="getSupportedPictureFormats()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedPictureSizes()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedPreviewFormats()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedPreviewFpsRange()Ljava/util/List;" since="9" deprecated="29" />
+		<method name="getSupportedPreviewFrameRates()Ljava/util/List;" since="5" deprecated="15" />
+		<method name="getSupportedPreviewSizes()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedSceneModes()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getSupportedVideoSizes()Ljava/util/List;" since="11" deprecated="29" />
+		<method name="getSupportedWhiteBalance()Ljava/util/List;" since="5" deprecated="29" />
+		<method name="getVerticalViewAngle()F" since="8" deprecated="29" />
+		<method name="getVideoStabilization()Z" since="15" deprecated="29" />
+		<method name="getWhiteBalance()Ljava/lang/String;" since="5" deprecated="29" />
+		<method name="getZoom()I" since="8" deprecated="29" />
+		<method name="getZoomRatios()Ljava/util/List;" since="8" deprecated="29" />
+		<method name="isAutoExposureLockSupported()Z" since="14" deprecated="29" />
+		<method name="isAutoWhiteBalanceLockSupported()Z" since="14" deprecated="29" />
+		<method name="isSmoothZoomSupported()Z" since="8" deprecated="29" />
+		<method name="isVideoSnapshotSupported()Z" since="14" deprecated="29" />
+		<method name="isVideoStabilizationSupported()Z" since="15" deprecated="29" />
+		<method name="isZoomSupported()Z" since="8" deprecated="29" />
+		<method name="remove(Ljava/lang/String;)V" deprecated="29" />
+		<method name="removeGpsData()V" since="5" deprecated="29" />
+		<method name="set(Ljava/lang/String;I)V" deprecated="29" />
+		<method name="set(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29" />
+		<method name="setAntibanding(Ljava/lang/String;)V" since="5" deprecated="29" />
+		<method name="setAutoExposureLock(Z)V" since="14" deprecated="29" />
+		<method name="setAutoWhiteBalanceLock(Z)V" since="14" deprecated="29" />
+		<method name="setColorEffect(Ljava/lang/String;)V" since="5" deprecated="29" />
+		<method name="setExposureCompensation(I)V" since="8" deprecated="29" />
+		<method name="setFlashMode(Ljava/lang/String;)V" since="5" deprecated="29" />
+		<method name="setFocusAreas(Ljava/util/List;)V" since="14" deprecated="29" />
+		<method name="setFocusMode(Ljava/lang/String;)V" since="5" deprecated="29" />
+		<method name="setGpsAltitude(D)V" since="5" deprecated="29" />
+		<method name="setGpsLatitude(D)V" since="5" deprecated="29" />
+		<method name="setGpsLongitude(D)V" since="5" deprecated="29" />
+		<method name="setGpsProcessingMethod(Ljava/lang/String;)V" since="8" deprecated="29" />
+		<method name="setGpsTimestamp(J)V" since="5" deprecated="29" />
+		<method name="setJpegQuality(I)V" since="5" deprecated="29" />
+		<method name="setJpegThumbnailQuality(I)V" since="5" deprecated="29" />
+		<method name="setJpegThumbnailSize(II)V" since="5" deprecated="29" />
+		<method name="setMeteringAreas(Ljava/util/List;)V" since="14" deprecated="29" />
+		<method name="setPictureFormat(I)V" deprecated="29" />
+		<method name="setPictureSize(II)V" deprecated="29" />
+		<method name="setPreviewFormat(I)V" deprecated="29" />
+		<method name="setPreviewFpsRange(II)V" since="9" deprecated="29" />
+		<method name="setPreviewFrameRate(I)V" deprecated="15" />
+		<method name="setPreviewSize(II)V" deprecated="29" />
+		<method name="setRecordingHint(Z)V" since="14" deprecated="29" />
+		<method name="setRotation(I)V" since="5" deprecated="29" />
+		<method name="setSceneMode(Ljava/lang/String;)V" since="5" deprecated="29" />
+		<method name="setVideoStabilization(Z)V" since="15" deprecated="29" />
+		<method name="setWhiteBalance(Ljava/lang/String;)V" since="5" deprecated="29" />
+		<method name="setZoom(I)V" since="8" deprecated="29" />
+		<method name="unflatten(Ljava/lang/String;)V" deprecated="29" />
+		<field name="ANTIBANDING_50HZ" since="5" deprecated="29" />
+		<field name="ANTIBANDING_60HZ" since="5" deprecated="29" />
+		<field name="ANTIBANDING_AUTO" since="5" deprecated="29" />
+		<field name="ANTIBANDING_OFF" since="5" deprecated="29" />
+		<field name="EFFECT_AQUA" since="5" deprecated="29" />
+		<field name="EFFECT_BLACKBOARD" since="5" deprecated="29" />
+		<field name="EFFECT_MONO" since="5" deprecated="29" />
+		<field name="EFFECT_NEGATIVE" since="5" deprecated="29" />
+		<field name="EFFECT_NONE" since="5" deprecated="29" />
+		<field name="EFFECT_POSTERIZE" since="5" deprecated="29" />
+		<field name="EFFECT_SEPIA" since="5" deprecated="29" />
+		<field name="EFFECT_SOLARIZE" since="5" deprecated="29" />
+		<field name="EFFECT_WHITEBOARD" since="5" deprecated="29" />
+		<field name="FLASH_MODE_AUTO" since="5" deprecated="29" />
+		<field name="FLASH_MODE_OFF" since="5" deprecated="29" />
+		<field name="FLASH_MODE_ON" since="5" deprecated="29" />
+		<field name="FLASH_MODE_RED_EYE" since="5" deprecated="29" />
+		<field name="FLASH_MODE_TORCH" since="5" deprecated="29" />
+		<field name="FOCUS_DISTANCE_FAR_INDEX" since="9" deprecated="29" />
+		<field name="FOCUS_DISTANCE_NEAR_INDEX" since="9" deprecated="29" />
+		<field name="FOCUS_DISTANCE_OPTIMAL_INDEX" since="9" deprecated="29" />
+		<field name="FOCUS_MODE_AUTO" since="5" deprecated="29" />
+		<field name="FOCUS_MODE_CONTINUOUS_PICTURE" since="14" deprecated="29" />
+		<field name="FOCUS_MODE_CONTINUOUS_VIDEO" since="9" deprecated="29" />
+		<field name="FOCUS_MODE_EDOF" since="8" deprecated="29" />
+		<field name="FOCUS_MODE_FIXED" since="5" deprecated="29" />
+		<field name="FOCUS_MODE_INFINITY" since="5" deprecated="29" />
+		<field name="FOCUS_MODE_MACRO" since="5" deprecated="29" />
+		<field name="PREVIEW_FPS_MAX_INDEX" since="9" deprecated="29" />
+		<field name="PREVIEW_FPS_MIN_INDEX" since="9" deprecated="29" />
+		<field name="SCENE_MODE_ACTION" since="5" deprecated="29" />
+		<field name="SCENE_MODE_AUTO" since="5" deprecated="29" />
+		<field name="SCENE_MODE_BARCODE" since="8" deprecated="29" />
+		<field name="SCENE_MODE_BEACH" since="5" deprecated="29" />
+		<field name="SCENE_MODE_CANDLELIGHT" since="5" deprecated="29" />
+		<field name="SCENE_MODE_FIREWORKS" since="5" deprecated="29" />
+		<field name="SCENE_MODE_HDR" since="17" deprecated="29" />
+		<field name="SCENE_MODE_LANDSCAPE" since="5" deprecated="29" />
+		<field name="SCENE_MODE_NIGHT" since="5" deprecated="29" />
+		<field name="SCENE_MODE_NIGHT_PORTRAIT" since="5" deprecated="29" />
+		<field name="SCENE_MODE_PARTY" since="5" deprecated="29" />
+		<field name="SCENE_MODE_PORTRAIT" since="5" deprecated="29" />
+		<field name="SCENE_MODE_SNOW" since="5" deprecated="29" />
+		<field name="SCENE_MODE_SPORTS" since="5" deprecated="29" />
+		<field name="SCENE_MODE_STEADYPHOTO" since="5" deprecated="29" />
+		<field name="SCENE_MODE_SUNSET" since="5" deprecated="29" />
+		<field name="SCENE_MODE_THEATRE" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_AUTO" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_CLOUDY_DAYLIGHT" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_DAYLIGHT" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_FLUORESCENT" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_INCANDESCENT" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_SHADE" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_TWILIGHT" since="5" deprecated="29" />
+		<field name="WHITE_BALANCE_WARM_FLUORESCENT" since="5" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$PictureCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onPictureTaken([BLandroid/hardware/Camera;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$PreviewCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onPreviewFrame([BLandroid/hardware/Camera;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$ShutterCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="onShutter()V" deprecated="29" />
+	</class>
+	<class name="android/hardware/Camera$Size" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/hardware/Camera;II)V" deprecated="29" />
+		<field name="height" deprecated="29" />
+		<field name="width" deprecated="29" />
+	</class>
+	<class name="android/hardware/ConsumerIrManager" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getCarrierFrequencies()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;" />
+		<method name="hasIrEmitter()Z" />
+		<method name="transmit(I[I)V" />
+	</class>
+	<class name="android/hardware/ConsumerIrManager$CarrierFrequencyRange" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/hardware/ConsumerIrManager;II)V" />
+		<method name="getMaxFrequency()I" />
+		<method name="getMinFrequency()I" />
+	</class>
+	<class name="android/hardware/GeomagneticField" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(FFFJ)V" />
+		<method name="getDeclination()F" />
+		<method name="getFieldStrength()F" />
+		<method name="getHorizontalStrength()F" />
+		<method name="getInclination()F" />
+		<method name="getX()F" />
+		<method name="getY()F" />
+		<method name="getZ()F" />
+	</class>
+	<class name="android/hardware/HardwareBuffer" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="create(IIIIJ)Landroid/hardware/HardwareBuffer;" />
+		<method name="getFormat()I" />
+		<method name="getHeight()I" />
+		<method name="getLayers()I" />
+		<method name="getUsage()J" />
+		<method name="getWidth()I" />
+		<method name="isClosed()Z" />
+		<method name="isSupported(IIIIJ)Z" since="29" />
+		<field name="BLOB" />
+		<field name="CREATOR" />
+		<field name="DS_24UI8" since="28" />
+		<field name="DS_FP32UI8" since="28" />
+		<field name="D_16" since="28" />
+		<field name="D_24" since="28" />
+		<field name="D_FP32" since="28" />
+		<field name="RGBA_1010102" />
+		<field name="RGBA_8888" />
+		<field name="RGBA_FP16" />
+		<field name="RGBX_8888" />
+		<field name="RGB_565" />
+		<field name="RGB_888" />
+		<field name="S_UI8" since="28" />
+		<field name="USAGE_CPU_READ_OFTEN" />
+		<field name="USAGE_CPU_READ_RARELY" />
+		<field name="USAGE_CPU_WRITE_OFTEN" />
+		<field name="USAGE_CPU_WRITE_RARELY" />
+		<field name="USAGE_GPU_COLOR_OUTPUT" />
+		<field name="USAGE_GPU_CUBE_MAP" since="28" />
+		<field name="USAGE_GPU_DATA_BUFFER" />
+		<field name="USAGE_GPU_MIPMAP_COMPLETE" since="28" />
+		<field name="USAGE_GPU_SAMPLED_IMAGE" />
+		<field name="USAGE_PROTECTED_CONTENT" />
+		<field name="USAGE_SENSOR_DIRECT_DATA" />
+		<field name="USAGE_VIDEO_ENCODE" />
+		<field name="YCBCR_420_888" since="30" />
+	</class>
+	<class name="android/hardware/Sensor" since="3">
+		<extends name="java/lang/Object" />
+		<method name="getFifoMaxEventCount()I" since="19" />
+		<method name="getFifoReservedEventCount()I" since="19" />
+		<method name="getHighestDirectReportRateLevel()I" since="26" />
+		<method name="getId()I" since="24" />
+		<method name="getMaxDelay()I" since="21" />
+		<method name="getMaximumRange()F" />
+		<method name="getMinDelay()I" since="9" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPower()F" />
+		<method name="getReportingMode()I" since="21" />
+		<method name="getResolution()F" />
+		<method name="getStringType()Ljava/lang/String;" since="20" />
+		<method name="getType()I" />
+		<method name="getVendor()Ljava/lang/String;" />
+		<method name="getVersion()I" />
+		<method name="isAdditionalInfoSupported()Z" since="24" />
+		<method name="isDirectChannelTypeSupported(I)Z" since="26" />
+		<method name="isDynamicSensor()Z" since="24" />
+		<method name="isWakeUpSensor()Z" since="21" />
+		<field name="REPORTING_MODE_CONTINUOUS" since="21" />
+		<field name="REPORTING_MODE_ONE_SHOT" since="21" />
+		<field name="REPORTING_MODE_ON_CHANGE" since="21" />
+		<field name="REPORTING_MODE_SPECIAL_TRIGGER" since="21" />
+		<field name="STRING_TYPE_ACCELEROMETER" since="20" />
+		<field name="STRING_TYPE_ACCELEROMETER_UNCALIBRATED" since="26" />
+		<field name="STRING_TYPE_AMBIENT_TEMPERATURE" since="20" />
+		<field name="STRING_TYPE_GAME_ROTATION_VECTOR" since="20" />
+		<field name="STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR" since="20" />
+		<field name="STRING_TYPE_GRAVITY" since="20" />
+		<field name="STRING_TYPE_GYROSCOPE" since="20" />
+		<field name="STRING_TYPE_GYROSCOPE_UNCALIBRATED" since="20" />
+		<field name="STRING_TYPE_HEART_BEAT" since="24" />
+		<field name="STRING_TYPE_HEART_RATE" since="20" />
+		<field name="STRING_TYPE_HINGE_ANGLE" since="30" />
+		<field name="STRING_TYPE_LIGHT" since="20" />
+		<field name="STRING_TYPE_LINEAR_ACCELERATION" since="20" />
+		<field name="STRING_TYPE_LOW_LATENCY_OFFBODY_DETECT" since="26" />
+		<field name="STRING_TYPE_MAGNETIC_FIELD" since="20" />
+		<field name="STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED" since="20" />
+		<field name="STRING_TYPE_MOTION_DETECT" since="24" />
+		<field name="STRING_TYPE_ORIENTATION" since="20" deprecated="20" />
+		<field name="STRING_TYPE_POSE_6DOF" since="24" />
+		<field name="STRING_TYPE_PRESSURE" since="20" />
+		<field name="STRING_TYPE_PROXIMITY" since="20" />
+		<field name="STRING_TYPE_RELATIVE_HUMIDITY" since="20" />
+		<field name="STRING_TYPE_ROTATION_VECTOR" since="20" />
+		<field name="STRING_TYPE_SIGNIFICANT_MOTION" since="20" />
+		<field name="STRING_TYPE_STATIONARY_DETECT" since="24" />
+		<field name="STRING_TYPE_STEP_COUNTER" since="20" />
+		<field name="STRING_TYPE_STEP_DETECTOR" since="20" />
+		<field name="STRING_TYPE_TEMPERATURE" since="20" deprecated="20" />
+		<field name="TYPE_ACCELEROMETER" />
+		<field name="TYPE_ACCELEROMETER_UNCALIBRATED" since="26" />
+		<field name="TYPE_ALL" />
+		<field name="TYPE_AMBIENT_TEMPERATURE" since="14" />
+		<field name="TYPE_DEVICE_PRIVATE_BASE" since="24" />
+		<field name="TYPE_GAME_ROTATION_VECTOR" since="18" />
+		<field name="TYPE_GEOMAGNETIC_ROTATION_VECTOR" since="19" />
+		<field name="TYPE_GRAVITY" since="9" />
+		<field name="TYPE_GYROSCOPE" />
+		<field name="TYPE_GYROSCOPE_UNCALIBRATED" since="18" />
+		<field name="TYPE_HEART_BEAT" since="24" />
+		<field name="TYPE_HEART_RATE" since="20" />
+		<field name="TYPE_HINGE_ANGLE" since="30" />
+		<field name="TYPE_LIGHT" />
+		<field name="TYPE_LINEAR_ACCELERATION" since="9" />
+		<field name="TYPE_LOW_LATENCY_OFFBODY_DETECT" since="26" />
+		<field name="TYPE_MAGNETIC_FIELD" />
+		<field name="TYPE_MAGNETIC_FIELD_UNCALIBRATED" since="18" />
+		<field name="TYPE_MOTION_DETECT" since="24" />
+		<field name="TYPE_ORIENTATION" deprecated="15" />
+		<field name="TYPE_POSE_6DOF" since="24" />
+		<field name="TYPE_PRESSURE" />
+		<field name="TYPE_PROXIMITY" />
+		<field name="TYPE_RELATIVE_HUMIDITY" since="14" />
+		<field name="TYPE_ROTATION_VECTOR" since="9" />
+		<field name="TYPE_SIGNIFICANT_MOTION" since="18" />
+		<field name="TYPE_STATIONARY_DETECT" since="24" />
+		<field name="TYPE_STEP_COUNTER" since="19" />
+		<field name="TYPE_STEP_DETECTOR" since="19" />
+		<field name="TYPE_TEMPERATURE" deprecated="15" />
+	</class>
+	<class name="android/hardware/SensorAdditionalInfo" since="24">
+		<extends name="java/lang/Object" />
+		<field name="TYPE_FRAME_BEGIN" />
+		<field name="TYPE_FRAME_END" />
+		<field name="TYPE_INTERNAL_TEMPERATURE" />
+		<field name="TYPE_SAMPLING" />
+		<field name="TYPE_SENSOR_PLACEMENT" />
+		<field name="TYPE_UNTRACKED_DELAY" />
+		<field name="TYPE_VEC3_CALIBRATION" />
+		<field name="floatValues" />
+		<field name="intValues" />
+		<field name="sensor" />
+		<field name="serial" />
+		<field name="type" />
+	</class>
+	<class name="android/hardware/SensorDirectChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+		<method name="configure(Landroid/hardware/Sensor;I)I" />
+		<field name="RATE_FAST" />
+		<field name="RATE_NORMAL" />
+		<field name="RATE_STOP" />
+		<field name="RATE_VERY_FAST" />
+		<field name="TYPE_HARDWARE_BUFFER" />
+		<field name="TYPE_MEMORY_FILE" />
+	</class>
+	<class name="android/hardware/SensorEvent" since="3">
+		<extends name="java/lang/Object" />
+		<field name="accuracy" />
+		<field name="sensor" />
+		<field name="timestamp" />
+		<field name="values" />
+	</class>
+	<class name="android/hardware/SensorEventCallback" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/hardware/SensorEventListener2" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onSensorAdditionalInfo(Landroid/hardware/SensorAdditionalInfo;)V" />
+	</class>
+	<class name="android/hardware/SensorEventListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onAccuracyChanged(Landroid/hardware/Sensor;I)V" />
+		<method name="onSensorChanged(Landroid/hardware/SensorEvent;)V" />
+	</class>
+	<class name="android/hardware/SensorEventListener2" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/hardware/SensorEventListener" />
+		<method name="onFlushCompleted(Landroid/hardware/Sensor;)V" />
+	</class>
+	<class name="android/hardware/SensorListener" since="1" deprecated="3">
+		<extends name="java/lang/Object" />
+		<method name="onAccuracyChanged(II)V" deprecated="29" />
+		<method name="onSensorChanged(I[F)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/SensorManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="cancelTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18" />
+		<method name="createDirectChannel(Landroid/hardware/HardwareBuffer;)Landroid/hardware/SensorDirectChannel;" since="26" />
+		<method name="createDirectChannel(Landroid/os/MemoryFile;)Landroid/hardware/SensorDirectChannel;" since="26" />
+		<method name="flush(Landroid/hardware/SensorEventListener;)Z" since="19" />
+		<method name="getAltitude(FF)F" since="9" />
+		<method name="getAngleChange([F[F[F)V" since="9" />
+		<method name="getDefaultSensor(I)Landroid/hardware/Sensor;" since="3" />
+		<method name="getDefaultSensor(IZ)Landroid/hardware/Sensor;" since="21" />
+		<method name="getDynamicSensorList(I)Ljava/util/List;" since="24" />
+		<method name="getInclination([F)F" since="3" />
+		<method name="getOrientation([F[F)[F" since="3" />
+		<method name="getQuaternionFromVector([F[F)V" since="9" />
+		<method name="getRotationMatrix([F[F[F[F)Z" since="3" />
+		<method name="getRotationMatrixFromVector([F[F)V" since="9" />
+		<method name="getSensorList(I)Ljava/util/List;" since="3" />
+		<method name="getSensors()I" deprecated="15" />
+		<method name="isDynamicSensorDiscoverySupported()Z" since="24" />
+		<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24" />
+		<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;Landroid/os/Handler;)V" since="24" />
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;I)Z" since="3" />
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;II)Z" since="19" />
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;IILandroid/os/Handler;)Z" since="19" />
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;)Z" since="3" />
+		<method name="registerListener(Landroid/hardware/SensorListener;I)Z" deprecated="15" />
+		<method name="registerListener(Landroid/hardware/SensorListener;II)Z" deprecated="15" />
+		<method name="remapCoordinateSystem([FII[F)Z" since="3" />
+		<method name="requestTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18" />
+		<method name="unregisterDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24" />
+		<method name="unregisterListener(Landroid/hardware/SensorEventListener;)V" since="3" />
+		<method name="unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V" since="3" />
+		<method name="unregisterListener(Landroid/hardware/SensorListener;)V" deprecated="15" />
+		<method name="unregisterListener(Landroid/hardware/SensorListener;I)V" deprecated="15" />
+		<field name="AXIS_MINUS_X" since="3" />
+		<field name="AXIS_MINUS_Y" since="3" />
+		<field name="AXIS_MINUS_Z" since="3" />
+		<field name="AXIS_X" since="3" />
+		<field name="AXIS_Y" since="3" />
+		<field name="AXIS_Z" since="3" />
+		<field name="DATA_X" deprecated="15" />
+		<field name="DATA_Y" deprecated="15" />
+		<field name="DATA_Z" deprecated="15" />
+		<field name="GRAVITY_DEATH_STAR_I" />
+		<field name="GRAVITY_EARTH" />
+		<field name="GRAVITY_JUPITER" />
+		<field name="GRAVITY_MARS" />
+		<field name="GRAVITY_MERCURY" />
+		<field name="GRAVITY_MOON" />
+		<field name="GRAVITY_NEPTUNE" />
+		<field name="GRAVITY_PLUTO" />
+		<field name="GRAVITY_SATURN" />
+		<field name="GRAVITY_SUN" />
+		<field name="GRAVITY_THE_ISLAND" />
+		<field name="GRAVITY_URANUS" />
+		<field name="GRAVITY_VENUS" />
+		<field name="LIGHT_CLOUDY" />
+		<field name="LIGHT_FULLMOON" />
+		<field name="LIGHT_NO_MOON" />
+		<field name="LIGHT_OVERCAST" />
+		<field name="LIGHT_SHADE" />
+		<field name="LIGHT_SUNLIGHT" />
+		<field name="LIGHT_SUNLIGHT_MAX" />
+		<field name="LIGHT_SUNRISE" />
+		<field name="MAGNETIC_FIELD_EARTH_MAX" />
+		<field name="MAGNETIC_FIELD_EARTH_MIN" />
+		<field name="PRESSURE_STANDARD_ATMOSPHERE" since="9" />
+		<field name="RAW_DATA_INDEX" deprecated="15" />
+		<field name="RAW_DATA_X" deprecated="15" />
+		<field name="RAW_DATA_Y" deprecated="15" />
+		<field name="RAW_DATA_Z" deprecated="15" />
+		<field name="SENSOR_ACCELEROMETER" deprecated="15" />
+		<field name="SENSOR_ALL" deprecated="15" />
+		<field name="SENSOR_DELAY_FASTEST" />
+		<field name="SENSOR_DELAY_GAME" />
+		<field name="SENSOR_DELAY_NORMAL" />
+		<field name="SENSOR_DELAY_UI" />
+		<field name="SENSOR_LIGHT" deprecated="15" />
+		<field name="SENSOR_MAGNETIC_FIELD" deprecated="15" />
+		<field name="SENSOR_MAX" deprecated="15" />
+		<field name="SENSOR_MIN" deprecated="15" />
+		<field name="SENSOR_ORIENTATION" deprecated="15" />
+		<field name="SENSOR_ORIENTATION_RAW" deprecated="15" />
+		<field name="SENSOR_PROXIMITY" deprecated="15" />
+		<field name="SENSOR_STATUS_ACCURACY_HIGH" />
+		<field name="SENSOR_STATUS_ACCURACY_LOW" />
+		<field name="SENSOR_STATUS_ACCURACY_MEDIUM" />
+		<field name="SENSOR_STATUS_NO_CONTACT" since="20" />
+		<field name="SENSOR_STATUS_UNRELIABLE" />
+		<field name="SENSOR_TEMPERATURE" deprecated="15" />
+		<field name="SENSOR_TRICORDER" deprecated="15" />
+		<field name="STANDARD_GRAVITY" />
+	</class>
+	<class name="android/hardware/SensorManager$DynamicSensorCallback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDynamicSensorConnected(Landroid/hardware/Sensor;)V" />
+		<method name="onDynamicSensorDisconnected(Landroid/hardware/Sensor;)V" />
+	</class>
+	<class name="android/hardware/SensorPrivacyManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="supportsSensorToggle(I)Z" />
+	</class>
+	<class name="android/hardware/SensorPrivacyManager$Sensors" since="31">
+		<extends name="java/lang/Object" />
+		<field name="CAMERA" />
+		<field name="MICROPHONE" />
+	</class>
+	<class name="android/hardware/TriggerEvent" since="18">
+		<extends name="java/lang/Object" />
+		<field name="sensor" />
+		<field name="timestamp" />
+		<field name="values" />
+	</class>
+	<class name="android/hardware/TriggerEventListener" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onTrigger(Landroid/hardware/TriggerEvent;)V" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricManager" since="29">
+		<extends name="java/lang/Object" />
+		<method name="canAuthenticate()I" deprecated="30" />
+		<method name="canAuthenticate(I)I" since="30" />
+		<method name="getStrings(I)Landroid/hardware/biometrics/BiometricManager$Strings;" since="31" />
+		<field name="BIOMETRIC_ERROR_HW_UNAVAILABLE" />
+		<field name="BIOMETRIC_ERROR_NONE_ENROLLED" />
+		<field name="BIOMETRIC_ERROR_NO_HARDWARE" />
+		<field name="BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED" since="30" />
+		<field name="BIOMETRIC_SUCCESS" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricManager$Authenticators" since="30">
+		<extends name="java/lang/Object" />
+		<field name="BIOMETRIC_STRONG" />
+		<field name="BIOMETRIC_WEAK" />
+		<field name="DEVICE_CREDENTIAL" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricManager$Strings" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getButtonLabel()Ljava/lang/CharSequence;" />
+		<method name="getPromptMessage()Ljava/lang/CharSequence;" />
+		<method name="getSettingName()Ljava/lang/CharSequence;" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt" since="28">
+		<extends name="java/lang/Object" />
+		<method name="authenticate(Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V" />
+		<method name="authenticate(Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V" />
+		<method name="getAllowedAuthenticators()I" since="30" />
+		<method name="getDescription()Ljava/lang/CharSequence;" since="30" />
+		<method name="getNegativeButtonText()Ljava/lang/CharSequence;" since="30" />
+		<method name="getSubtitle()Ljava/lang/CharSequence;" since="30" />
+		<method name="getTitle()Ljava/lang/CharSequence;" since="30" />
+		<method name="isConfirmationRequired()Z" since="30" />
+		<field name="AUTHENTICATION_RESULT_TYPE_BIOMETRIC" since="30" />
+		<field name="AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL" since="30" />
+		<field name="BIOMETRIC_ACQUIRED_GOOD" />
+		<field name="BIOMETRIC_ACQUIRED_IMAGER_DIRTY" />
+		<field name="BIOMETRIC_ACQUIRED_INSUFFICIENT" />
+		<field name="BIOMETRIC_ACQUIRED_PARTIAL" />
+		<field name="BIOMETRIC_ACQUIRED_TOO_FAST" />
+		<field name="BIOMETRIC_ACQUIRED_TOO_SLOW" />
+		<field name="BIOMETRIC_ERROR_CANCELED" />
+		<field name="BIOMETRIC_ERROR_HW_NOT_PRESENT" />
+		<field name="BIOMETRIC_ERROR_HW_UNAVAILABLE" />
+		<field name="BIOMETRIC_ERROR_LOCKOUT" />
+		<field name="BIOMETRIC_ERROR_LOCKOUT_PERMANENT" />
+		<field name="BIOMETRIC_ERROR_NO_BIOMETRICS" />
+		<field name="BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL" since="29" />
+		<field name="BIOMETRIC_ERROR_NO_SPACE" />
+		<field name="BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED" since="30" />
+		<field name="BIOMETRIC_ERROR_TIMEOUT" />
+		<field name="BIOMETRIC_ERROR_UNABLE_TO_PROCESS" />
+		<field name="BIOMETRIC_ERROR_USER_CANCELED" />
+		<field name="BIOMETRIC_ERROR_VENDOR" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$AuthenticationCallback" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAuthenticationError(ILjava/lang/CharSequence;)V" />
+		<method name="onAuthenticationFailed()V" />
+		<method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V" />
+		<method name="onAuthenticationSucceeded(Landroid/hardware/biometrics/BiometricPrompt$AuthenticationResult;)V" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$AuthenticationResult" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getAuthenticationType()I" since="30" />
+		<method name="getCryptoObject()Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="build()Landroid/hardware/biometrics/BiometricPrompt;" />
+		<method name="setAllowedAuthenticators(I)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="30" />
+		<method name="setConfirmationRequired(Z)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="29" />
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;" />
+		<method name="setDeviceCredentialAllowed(Z)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="29" deprecated="30" />
+		<method name="setNegativeButton(Ljava/lang/CharSequence;Ljava/util/concurrent/Executor;Landroid/content/DialogInterface$OnClickListener;)Landroid/hardware/biometrics/BiometricPrompt$Builder;" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;" />
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$CryptoObject" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/security/identity/IdentityCredential;)V" since="30" />
+		<method name="&lt;init&gt;(Ljava/security/Signature;)V" />
+		<method name="&lt;init&gt;(Ljavax/crypto/Cipher;)V" />
+		<method name="&lt;init&gt;(Ljavax/crypto/Mac;)V" />
+		<method name="getCipher()Ljavax/crypto/Cipher;" />
+		<method name="getIdentityCredential()Landroid/security/identity/IdentityCredential;" since="30" />
+		<method name="getMac()Ljavax/crypto/Mac;" />
+		<method name="getSignature()Ljava/security/Signature;" />
+	</class>
+	<class name="android/hardware/camera2/CameraAccessException" since="21">
+		<extends name="android/util/AndroidException" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(ILjava/lang/Throwable;)V" />
+		<method name="getReason()I" />
+		<field name="CAMERA_DISABLED" />
+		<field name="CAMERA_DISCONNECTED" />
+		<field name="CAMERA_ERROR" />
+		<field name="CAMERA_IN_USE" since="23" />
+		<field name="MAX_CAMERAS_IN_USE" since="23" />
+	</class>
+	<class name="android/hardware/camera2/CameraCaptureSession" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="abortCaptures()V" />
+		<method name="capture(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I" />
+		<method name="captureBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I" />
+		<method name="captureBurstRequests(Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28" />
+		<method name="captureSingleRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28" />
+		<method name="finalizeOutputConfigurations(Ljava/util/List;)V" since="26" />
+		<method name="getDevice()Landroid/hardware/camera2/CameraDevice;" />
+		<method name="getInputSurface()Landroid/view/Surface;" since="23" />
+		<method name="isReprocessable()Z" since="23" />
+		<method name="prepare(Landroid/view/Surface;)V" since="23" />
+		<method name="setRepeatingBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I" />
+		<method name="setRepeatingBurstRequests(Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28" />
+		<method name="setRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I" />
+		<method name="setSingleRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28" />
+		<method name="stopRepeating()V" />
+		<method name="supportsOfflineProcessing(Landroid/view/Surface;)Z" since="30" />
+		<method name="switchToOffline(Ljava/util/Collection;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraOfflineSession$CameraOfflineSessionCallback;)Landroid/hardware/camera2/CameraOfflineSession;" since="30" />
+		<method name="updateOutputConfiguration(Landroid/hardware/camera2/params/OutputConfiguration;)V" since="28" />
+	</class>
+	<class name="android/hardware/camera2/CameraCaptureSession$CaptureCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCaptureBufferLost(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/view/Surface;J)V" since="24" />
+		<method name="onCaptureCompleted(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V" />
+		<method name="onCaptureFailed(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureFailure;)V" />
+		<method name="onCaptureProgressed(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V" />
+		<method name="onCaptureSequenceAborted(Landroid/hardware/camera2/CameraCaptureSession;I)V" />
+		<method name="onCaptureSequenceCompleted(Landroid/hardware/camera2/CameraCaptureSession;IJ)V" />
+		<method name="onCaptureStarted(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;JJ)V" />
+	</class>
+	<class name="android/hardware/camera2/CameraCaptureSession$StateCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onActive(Landroid/hardware/camera2/CameraCaptureSession;)V" />
+		<method name="onCaptureQueueEmpty(Landroid/hardware/camera2/CameraCaptureSession;)V" since="26" />
+		<method name="onClosed(Landroid/hardware/camera2/CameraCaptureSession;)V" />
+		<method name="onConfigureFailed(Landroid/hardware/camera2/CameraCaptureSession;)V" />
+		<method name="onConfigured(Landroid/hardware/camera2/CameraCaptureSession;)V" />
+		<method name="onReady(Landroid/hardware/camera2/CameraCaptureSession;)V" />
+		<method name="onSurfacePrepared(Landroid/hardware/camera2/CameraCaptureSession;Landroid/view/Surface;)V" since="23" />
+	</class>
+	<class name="android/hardware/camera2/CameraCharacteristics" since="21">
+		<extends name="android/hardware/camera2/CameraMetadata" />
+		<method name="get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;" />
+		<method name="getAvailableCaptureRequestKeys()Ljava/util/List;" />
+		<method name="getAvailableCaptureResultKeys()Ljava/util/List;" />
+		<method name="getAvailablePhysicalCameraRequestKeys()Ljava/util/List;" since="28" />
+		<method name="getAvailableSessionKeys()Ljava/util/List;" since="28" />
+		<method name="getKeysNeedingPermission()Ljava/util/List;" since="29" />
+		<method name="getPhysicalCameraIds()Ljava/util/Set;" since="28" />
+		<method name="getRecommendedStreamConfigurationMap(I)Landroid/hardware/camera2/params/RecommendedStreamConfigurationMap;" since="29" />
+		<field name="COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES" />
+		<field name="CONTROL_AE_AVAILABLE_ANTIBANDING_MODES" />
+		<field name="CONTROL_AE_AVAILABLE_MODES" />
+		<field name="CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES" />
+		<field name="CONTROL_AE_COMPENSATION_RANGE" />
+		<field name="CONTROL_AE_COMPENSATION_STEP" />
+		<field name="CONTROL_AE_LOCK_AVAILABLE" since="23" />
+		<field name="CONTROL_AF_AVAILABLE_MODES" />
+		<field name="CONTROL_AVAILABLE_EFFECTS" />
+		<field name="CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES" since="30" />
+		<field name="CONTROL_AVAILABLE_MODES" since="23" />
+		<field name="CONTROL_AVAILABLE_SCENE_MODES" />
+		<field name="CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES" />
+		<field name="CONTROL_AWB_AVAILABLE_MODES" />
+		<field name="CONTROL_AWB_LOCK_AVAILABLE" since="23" />
+		<field name="CONTROL_MAX_REGIONS_AE" />
+		<field name="CONTROL_MAX_REGIONS_AF" />
+		<field name="CONTROL_MAX_REGIONS_AWB" />
+		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE" since="24" />
+		<field name="CONTROL_ZOOM_RATIO_RANGE" since="30" />
+		<field name="DEPTH_DEPTH_IS_EXCLUSIVE" since="23" />
+		<field name="DISTORTION_CORRECTION_AVAILABLE_MODES" since="28" />
+		<field name="EDGE_AVAILABLE_EDGE_MODES" />
+		<field name="FLASH_INFO_AVAILABLE" />
+		<field name="HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES" />
+		<field name="INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP" since="33" />
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL" />
+		<field name="INFO_VERSION" since="28" />
+		<field name="JPEG_AVAILABLE_THUMBNAIL_SIZES" />
+		<field name="LENS_DISTORTION" since="28" />
+		<field name="LENS_DISTORTION_MAXIMUM_RESOLUTION" since="31" />
+		<field name="LENS_FACING" />
+		<field name="LENS_INFO_AVAILABLE_APERTURES" />
+		<field name="LENS_INFO_AVAILABLE_FILTER_DENSITIES" />
+		<field name="LENS_INFO_AVAILABLE_FOCAL_LENGTHS" />
+		<field name="LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION" />
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION" />
+		<field name="LENS_INFO_HYPERFOCAL_DISTANCE" />
+		<field name="LENS_INFO_MINIMUM_FOCUS_DISTANCE" />
+		<field name="LENS_INTRINSIC_CALIBRATION" since="23" />
+		<field name="LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION" since="31" />
+		<field name="LENS_POSE_REFERENCE" since="28" />
+		<field name="LENS_POSE_ROTATION" since="23" />
+		<field name="LENS_POSE_TRANSLATION" since="23" />
+		<field name="LENS_RADIAL_DISTORTION" since="23" deprecated="28" />
+		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE" since="28" />
+		<field name="NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES" />
+		<field name="REPROCESS_MAX_CAPTURE_STALL" since="23" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES" />
+		<field name="REQUEST_MAX_NUM_INPUT_STREAMS" since="23" />
+		<field name="REQUEST_MAX_NUM_OUTPUT_PROC" />
+		<field name="REQUEST_MAX_NUM_OUTPUT_PROC_STALLING" />
+		<field name="REQUEST_MAX_NUM_OUTPUT_RAW" />
+		<field name="REQUEST_PARTIAL_RESULT_COUNT" />
+		<field name="REQUEST_PIPELINE_MAX_DEPTH" />
+		<field name="SCALER_AVAILABLE_MAX_DIGITAL_ZOOM" />
+		<field name="SCALER_AVAILABLE_ROTATE_AND_CROP_MODES" since="31" />
+		<field name="SCALER_CROPPING_TYPE" />
+		<field name="SCALER_DEFAULT_SECURE_IMAGE_SIZE" since="31" />
+		<field name="SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS" since="30" />
+		<field name="SCALER_MANDATORY_MAXIMUM_RESOLUTION_STREAM_COMBINATIONS" since="31" />
+		<field name="SCALER_MANDATORY_STREAM_COMBINATIONS" since="29" />
+		<field name="SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP" since="31" />
+		<field name="SCALER_STREAM_CONFIGURATION_MAP" />
+		<field name="SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION" since="31" />
+		<field name="SENSOR_AVAILABLE_TEST_PATTERN_MODES" />
+		<field name="SENSOR_BLACK_LEVEL_PATTERN" />
+		<field name="SENSOR_CALIBRATION_TRANSFORM1" />
+		<field name="SENSOR_CALIBRATION_TRANSFORM2" />
+		<field name="SENSOR_COLOR_TRANSFORM1" />
+		<field name="SENSOR_COLOR_TRANSFORM2" />
+		<field name="SENSOR_FORWARD_MATRIX1" />
+		<field name="SENSOR_FORWARD_MATRIX2" />
+		<field name="SENSOR_INFO_ACTIVE_ARRAY_SIZE" />
+		<field name="SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION" since="31" />
+		<field name="SENSOR_INFO_BINNING_FACTOR" since="31" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT" />
+		<field name="SENSOR_INFO_EXPOSURE_TIME_RANGE" />
+		<field name="SENSOR_INFO_LENS_SHADING_APPLIED" since="23" />
+		<field name="SENSOR_INFO_MAX_FRAME_DURATION" />
+		<field name="SENSOR_INFO_PHYSICAL_SIZE" />
+		<field name="SENSOR_INFO_PIXEL_ARRAY_SIZE" />
+		<field name="SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION" since="31" />
+		<field name="SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE" since="23" />
+		<field name="SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION" since="31" />
+		<field name="SENSOR_INFO_SENSITIVITY_RANGE" />
+		<field name="SENSOR_INFO_TIMESTAMP_SOURCE" />
+		<field name="SENSOR_INFO_WHITE_LEVEL" />
+		<field name="SENSOR_MAX_ANALOG_SENSITIVITY" />
+		<field name="SENSOR_OPTICAL_BLACK_REGIONS" since="24" />
+		<field name="SENSOR_ORIENTATION" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT2" />
+		<field name="SHADING_AVAILABLE_MODES" since="23" />
+		<field name="STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES" />
+		<field name="STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES" />
+		<field name="STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES" since="23" />
+		<field name="STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES" since="28" />
+		<field name="STATISTICS_INFO_MAX_FACE_COUNT" />
+		<field name="SYNC_MAX_LATENCY" />
+		<field name="TONEMAP_AVAILABLE_TONE_MAP_MODES" />
+		<field name="TONEMAP_MAX_CURVE_POINTS" />
+	</class>
+	<class name="android/hardware/camera2/CameraCharacteristics$Key" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" since="29" />
+		<method name="getName()Ljava/lang/String;" />
+	</class>
+	<class name="android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession" since="23">
+		<extends name="android/hardware/camera2/CameraCaptureSession" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createHighSpeedRequestList(Landroid/hardware/camera2/CaptureRequest;)Ljava/util/List;" />
+	</class>
+	<class name="android/hardware/camera2/CameraDevice" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;" />
+		<method name="createCaptureRequest(ILjava/util/Set;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="28" />
+		<method name="createCaptureSession(Landroid/hardware/camera2/params/SessionConfiguration;)V" since="28" />
+		<method name="createCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" deprecated="30" />
+		<method name="createCaptureSessionByOutputConfigurations(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="24" deprecated="30" />
+		<method name="createConstrainedHighSpeedCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="23" deprecated="30" />
+		<method name="createExtensionSession(Landroid/hardware/camera2/params/ExtensionSessionConfiguration;)V" since="31" />
+		<method name="createReprocessCaptureRequest(Landroid/hardware/camera2/TotalCaptureResult;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="23" />
+		<method name="createReprocessableCaptureSession(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="23" deprecated="30" />
+		<method name="createReprocessableCaptureSessionByConfigurations(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="24" deprecated="30" />
+		<method name="getCameraAudioRestriction()I" since="30" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="isSessionConfigurationSupported(Landroid/hardware/camera2/params/SessionConfiguration;)Z" since="29" />
+		<method name="setCameraAudioRestriction(I)V" since="30" />
+		<field name="AUDIO_RESTRICTION_NONE" since="30" />
+		<field name="AUDIO_RESTRICTION_VIBRATION" since="30" />
+		<field name="AUDIO_RESTRICTION_VIBRATION_SOUND" since="30" />
+		<field name="TEMPLATE_MANUAL" />
+		<field name="TEMPLATE_PREVIEW" />
+		<field name="TEMPLATE_RECORD" />
+		<field name="TEMPLATE_STILL_CAPTURE" />
+		<field name="TEMPLATE_VIDEO_SNAPSHOT" />
+		<field name="TEMPLATE_ZERO_SHUTTER_LAG" />
+	</class>
+	<class name="android/hardware/camera2/CameraDevice$StateCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onClosed(Landroid/hardware/camera2/CameraDevice;)V" />
+		<method name="onDisconnected(Landroid/hardware/camera2/CameraDevice;)V" />
+		<method name="onError(Landroid/hardware/camera2/CameraDevice;I)V" />
+		<method name="onOpened(Landroid/hardware/camera2/CameraDevice;)V" />
+		<field name="ERROR_CAMERA_DEVICE" />
+		<field name="ERROR_CAMERA_DISABLED" />
+		<field name="ERROR_CAMERA_IN_USE" />
+		<field name="ERROR_CAMERA_SERVICE" />
+		<field name="ERROR_MAX_CAMERAS_IN_USE" />
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionCharacteristics" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getEstimatedCaptureLatencyRangeMillis(ILandroid/util/Size;I)Landroid/util/Range;" />
+		<method name="getExtensionSupportedSizes(II)Ljava/util/List;" />
+		<method name="getExtensionSupportedSizes(ILjava/lang/Class;)Ljava/util/List;" />
+		<method name="getSupportedExtensions()Ljava/util/List;" />
+		<field name="EXTENSION_AUTOMATIC" />
+		<field name="EXTENSION_BEAUTY" />
+		<field name="EXTENSION_BOKEH" />
+		<field name="EXTENSION_HDR" />
+		<field name="EXTENSION_NIGHT" />
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionSession" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="capture(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$ExtensionCaptureCallback;)I" />
+		<method name="getDevice()Landroid/hardware/camera2/CameraDevice;" />
+		<method name="setRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$ExtensionCaptureCallback;)I" />
+		<method name="stopRepeating()V" />
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionSession$ExtensionCaptureCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCaptureFailed(Landroid/hardware/camera2/CameraExtensionSession;Landroid/hardware/camera2/CaptureRequest;)V" />
+		<method name="onCaptureProcessStarted(Landroid/hardware/camera2/CameraExtensionSession;Landroid/hardware/camera2/CaptureRequest;)V" />
+		<method name="onCaptureSequenceAborted(Landroid/hardware/camera2/CameraExtensionSession;I)V" />
+		<method name="onCaptureSequenceCompleted(Landroid/hardware/camera2/CameraExtensionSession;I)V" />
+		<method name="onCaptureStarted(Landroid/hardware/camera2/CameraExtensionSession;Landroid/hardware/camera2/CaptureRequest;J)V" />
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionSession$StateCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onClosed(Landroid/hardware/camera2/CameraExtensionSession;)V" />
+		<method name="onConfigureFailed(Landroid/hardware/camera2/CameraExtensionSession;)V" />
+		<method name="onConfigured(Landroid/hardware/camera2/CameraExtensionSession;)V" />
+	</class>
+	<class name="android/hardware/camera2/CameraManager" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraCharacteristics;" />
+		<method name="getCameraExtensionCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraExtensionCharacteristics;" since="31" />
+		<method name="getCameraIdList()[Ljava/lang/String;" />
+		<method name="getConcurrentCameraIds()Ljava/util/Set;" since="30" />
+		<method name="isConcurrentSessionConfigurationSupported(Ljava/util/Map;)Z" since="30" />
+		<method name="openCamera(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;)V" />
+		<method name="openCamera(Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraDevice$StateCallback;)V" since="28" />
+		<method name="registerAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Landroid/os/Handler;)V" />
+		<method name="registerAvailabilityCallback(Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V" since="28" />
+		<method name="registerTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;)V" since="23" />
+		<method name="registerTorchCallback(Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraManager$TorchCallback;)V" since="28" />
+		<method name="setTorchMode(Ljava/lang/String;Z)V" since="23" />
+		<method name="unregisterAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V" />
+		<method name="unregisterTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;)V" since="23" />
+	</class>
+	<class name="android/hardware/camera2/CameraManager$AvailabilityCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCameraAccessPrioritiesChanged()V" since="29" />
+		<method name="onCameraAvailable(Ljava/lang/String;)V" />
+		<method name="onCameraUnavailable(Ljava/lang/String;)V" />
+		<method name="onPhysicalCameraAvailable(Ljava/lang/String;Ljava/lang/String;)V" since="30" />
+		<method name="onPhysicalCameraUnavailable(Ljava/lang/String;Ljava/lang/String;)V" since="30" />
+	</class>
+	<class name="android/hardware/camera2/CameraManager$TorchCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onTorchModeChanged(Ljava/lang/String;Z)V" />
+		<method name="onTorchModeUnavailable(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/hardware/camera2/CameraMetadata" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getKeys()Ljava/util/List;" />
+		<field name="COLOR_CORRECTION_ABERRATION_MODE_FAST" />
+		<field name="COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY" />
+		<field name="COLOR_CORRECTION_ABERRATION_MODE_OFF" />
+		<field name="COLOR_CORRECTION_MODE_FAST" />
+		<field name="COLOR_CORRECTION_MODE_HIGH_QUALITY" />
+		<field name="COLOR_CORRECTION_MODE_TRANSFORM_MATRIX" />
+		<field name="CONTROL_AE_ANTIBANDING_MODE_50HZ" />
+		<field name="CONTROL_AE_ANTIBANDING_MODE_60HZ" />
+		<field name="CONTROL_AE_ANTIBANDING_MODE_AUTO" />
+		<field name="CONTROL_AE_ANTIBANDING_MODE_OFF" />
+		<field name="CONTROL_AE_MODE_OFF" />
+		<field name="CONTROL_AE_MODE_ON" />
+		<field name="CONTROL_AE_MODE_ON_ALWAYS_FLASH" />
+		<field name="CONTROL_AE_MODE_ON_AUTO_FLASH" />
+		<field name="CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE" />
+		<field name="CONTROL_AE_MODE_ON_EXTERNAL_FLASH" since="28" />
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL" since="23" />
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_IDLE" />
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_START" />
+		<field name="CONTROL_AE_STATE_CONVERGED" />
+		<field name="CONTROL_AE_STATE_FLASH_REQUIRED" />
+		<field name="CONTROL_AE_STATE_INACTIVE" />
+		<field name="CONTROL_AE_STATE_LOCKED" />
+		<field name="CONTROL_AE_STATE_PRECAPTURE" />
+		<field name="CONTROL_AE_STATE_SEARCHING" />
+		<field name="CONTROL_AF_MODE_AUTO" />
+		<field name="CONTROL_AF_MODE_CONTINUOUS_PICTURE" />
+		<field name="CONTROL_AF_MODE_CONTINUOUS_VIDEO" />
+		<field name="CONTROL_AF_MODE_EDOF" />
+		<field name="CONTROL_AF_MODE_MACRO" />
+		<field name="CONTROL_AF_MODE_OFF" />
+		<field name="CONTROL_AF_SCENE_CHANGE_DETECTED" since="28" />
+		<field name="CONTROL_AF_SCENE_CHANGE_NOT_DETECTED" since="28" />
+		<field name="CONTROL_AF_STATE_ACTIVE_SCAN" />
+		<field name="CONTROL_AF_STATE_FOCUSED_LOCKED" />
+		<field name="CONTROL_AF_STATE_INACTIVE" />
+		<field name="CONTROL_AF_STATE_NOT_FOCUSED_LOCKED" />
+		<field name="CONTROL_AF_STATE_PASSIVE_FOCUSED" />
+		<field name="CONTROL_AF_STATE_PASSIVE_SCAN" />
+		<field name="CONTROL_AF_STATE_PASSIVE_UNFOCUSED" />
+		<field name="CONTROL_AF_TRIGGER_CANCEL" />
+		<field name="CONTROL_AF_TRIGGER_IDLE" />
+		<field name="CONTROL_AF_TRIGGER_START" />
+		<field name="CONTROL_AWB_MODE_AUTO" />
+		<field name="CONTROL_AWB_MODE_CLOUDY_DAYLIGHT" />
+		<field name="CONTROL_AWB_MODE_DAYLIGHT" />
+		<field name="CONTROL_AWB_MODE_FLUORESCENT" />
+		<field name="CONTROL_AWB_MODE_INCANDESCENT" />
+		<field name="CONTROL_AWB_MODE_OFF" />
+		<field name="CONTROL_AWB_MODE_SHADE" />
+		<field name="CONTROL_AWB_MODE_TWILIGHT" />
+		<field name="CONTROL_AWB_MODE_WARM_FLUORESCENT" />
+		<field name="CONTROL_AWB_STATE_CONVERGED" />
+		<field name="CONTROL_AWB_STATE_INACTIVE" />
+		<field name="CONTROL_AWB_STATE_LOCKED" />
+		<field name="CONTROL_AWB_STATE_SEARCHING" />
+		<field name="CONTROL_CAPTURE_INTENT_CUSTOM" />
+		<field name="CONTROL_CAPTURE_INTENT_MANUAL" />
+		<field name="CONTROL_CAPTURE_INTENT_MOTION_TRACKING" since="28" />
+		<field name="CONTROL_CAPTURE_INTENT_PREVIEW" />
+		<field name="CONTROL_CAPTURE_INTENT_STILL_CAPTURE" />
+		<field name="CONTROL_CAPTURE_INTENT_VIDEO_RECORD" />
+		<field name="CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT" />
+		<field name="CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG" />
+		<field name="CONTROL_EFFECT_MODE_AQUA" />
+		<field name="CONTROL_EFFECT_MODE_BLACKBOARD" />
+		<field name="CONTROL_EFFECT_MODE_MONO" />
+		<field name="CONTROL_EFFECT_MODE_NEGATIVE" />
+		<field name="CONTROL_EFFECT_MODE_OFF" />
+		<field name="CONTROL_EFFECT_MODE_POSTERIZE" />
+		<field name="CONTROL_EFFECT_MODE_SEPIA" />
+		<field name="CONTROL_EFFECT_MODE_SOLARIZE" />
+		<field name="CONTROL_EFFECT_MODE_WHITEBOARD" />
+		<field name="CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS" since="30" />
+		<field name="CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE" since="30" />
+		<field name="CONTROL_EXTENDED_SCENE_MODE_DISABLED" since="30" />
+		<field name="CONTROL_MODE_AUTO" />
+		<field name="CONTROL_MODE_OFF" />
+		<field name="CONTROL_MODE_OFF_KEEP_STATE" />
+		<field name="CONTROL_MODE_USE_EXTENDED_SCENE_MODE" since="30" />
+		<field name="CONTROL_MODE_USE_SCENE_MODE" />
+		<field name="CONTROL_SCENE_MODE_ACTION" />
+		<field name="CONTROL_SCENE_MODE_BARCODE" />
+		<field name="CONTROL_SCENE_MODE_BEACH" />
+		<field name="CONTROL_SCENE_MODE_CANDLELIGHT" />
+		<field name="CONTROL_SCENE_MODE_DISABLED" />
+		<field name="CONTROL_SCENE_MODE_FACE_PRIORITY" />
+		<field name="CONTROL_SCENE_MODE_FIREWORKS" />
+		<field name="CONTROL_SCENE_MODE_HDR" since="22" />
+		<field name="CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO" deprecated="23" />
+		<field name="CONTROL_SCENE_MODE_LANDSCAPE" />
+		<field name="CONTROL_SCENE_MODE_NIGHT" />
+		<field name="CONTROL_SCENE_MODE_NIGHT_PORTRAIT" />
+		<field name="CONTROL_SCENE_MODE_PARTY" />
+		<field name="CONTROL_SCENE_MODE_PORTRAIT" />
+		<field name="CONTROL_SCENE_MODE_SNOW" />
+		<field name="CONTROL_SCENE_MODE_SPORTS" />
+		<field name="CONTROL_SCENE_MODE_STEADYPHOTO" />
+		<field name="CONTROL_SCENE_MODE_SUNSET" />
+		<field name="CONTROL_SCENE_MODE_THEATRE" />
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE_OFF" />
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE_ON" />
+		<field name="DISTORTION_CORRECTION_MODE_FAST" since="28" />
+		<field name="DISTORTION_CORRECTION_MODE_HIGH_QUALITY" since="28" />
+		<field name="DISTORTION_CORRECTION_MODE_OFF" since="28" />
+		<field name="EDGE_MODE_FAST" />
+		<field name="EDGE_MODE_HIGH_QUALITY" />
+		<field name="EDGE_MODE_OFF" />
+		<field name="EDGE_MODE_ZERO_SHUTTER_LAG" since="23" />
+		<field name="FLASH_MODE_OFF" />
+		<field name="FLASH_MODE_SINGLE" />
+		<field name="FLASH_MODE_TORCH" />
+		<field name="FLASH_STATE_CHARGING" />
+		<field name="FLASH_STATE_FIRED" />
+		<field name="FLASH_STATE_PARTIAL" />
+		<field name="FLASH_STATE_READY" />
+		<field name="FLASH_STATE_UNAVAILABLE" />
+		<field name="HOT_PIXEL_MODE_FAST" />
+		<field name="HOT_PIXEL_MODE_HIGH_QUALITY" />
+		<field name="HOT_PIXEL_MODE_OFF" />
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_3" since="24" />
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL" since="28" />
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_FULL" />
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY" />
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED" />
+		<field name="LENS_FACING_BACK" />
+		<field name="LENS_FACING_EXTERNAL" since="23" />
+		<field name="LENS_FACING_FRONT" />
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE" />
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED" />
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED" />
+		<field name="LENS_OPTICAL_STABILIZATION_MODE_OFF" />
+		<field name="LENS_OPTICAL_STABILIZATION_MODE_ON" />
+		<field name="LENS_POSE_REFERENCE_GYROSCOPE" since="28" />
+		<field name="LENS_POSE_REFERENCE_PRIMARY_CAMERA" since="28" />
+		<field name="LENS_POSE_REFERENCE_UNDEFINED" since="30" />
+		<field name="LENS_STATE_MOVING" />
+		<field name="LENS_STATE_STATIONARY" />
+		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE" since="28" />
+		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED" since="28" />
+		<field name="NOISE_REDUCTION_MODE_FAST" />
+		<field name="NOISE_REDUCTION_MODE_HIGH_QUALITY" />
+		<field name="NOISE_REDUCTION_MODE_MINIMAL" since="23" />
+		<field name="NOISE_REDUCTION_MODE_OFF" />
+		<field name="NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG" since="23" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE" since="22" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO" since="23" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT" since="23" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA" since="28" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME" since="28" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING" since="28" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING" since="30" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING" since="23" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_RAW" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS" since="22" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING" since="31" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA" since="29" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA" since="30" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR" since="31" />
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING" since="23" />
+		<field name="SCALER_CROPPING_TYPE_CENTER_ONLY" />
+		<field name="SCALER_CROPPING_TYPE_FREEFORM" />
+		<field name="SCALER_ROTATE_AND_CROP_180" since="31" />
+		<field name="SCALER_ROTATE_AND_CROP_270" since="31" />
+		<field name="SCALER_ROTATE_AND_CROP_90" since="31" />
+		<field name="SCALER_ROTATE_AND_CROP_AUTO" since="31" />
+		<field name="SCALER_ROTATE_AND_CROP_NONE" since="31" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO" since="29" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR" since="29" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB" />
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB" />
+		<field name="SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME" />
+		<field name="SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN" />
+		<field name="SENSOR_PIXEL_MODE_DEFAULT" since="31" />
+		<field name="SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION" since="31" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D50" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D55" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D65" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D75" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_FLASH" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_SHADE" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN" />
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT" />
+		<field name="SENSOR_TEST_PATTERN_MODE_COLOR_BARS" />
+		<field name="SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY" />
+		<field name="SENSOR_TEST_PATTERN_MODE_CUSTOM1" />
+		<field name="SENSOR_TEST_PATTERN_MODE_OFF" />
+		<field name="SENSOR_TEST_PATTERN_MODE_PN9" />
+		<field name="SENSOR_TEST_PATTERN_MODE_SOLID_COLOR" />
+		<field name="SHADING_MODE_FAST" />
+		<field name="SHADING_MODE_HIGH_QUALITY" />
+		<field name="SHADING_MODE_OFF" />
+		<field name="STATISTICS_FACE_DETECT_MODE_FULL" />
+		<field name="STATISTICS_FACE_DETECT_MODE_OFF" />
+		<field name="STATISTICS_FACE_DETECT_MODE_SIMPLE" />
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE_OFF" />
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE_ON" />
+		<field name="STATISTICS_OIS_DATA_MODE_OFF" since="28" />
+		<field name="STATISTICS_OIS_DATA_MODE_ON" since="28" />
+		<field name="STATISTICS_SCENE_FLICKER_50HZ" />
+		<field name="STATISTICS_SCENE_FLICKER_60HZ" />
+		<field name="STATISTICS_SCENE_FLICKER_NONE" />
+		<field name="SYNC_MAX_LATENCY_PER_FRAME_CONTROL" />
+		<field name="SYNC_MAX_LATENCY_UNKNOWN" />
+		<field name="TONEMAP_MODE_CONTRAST_CURVE" />
+		<field name="TONEMAP_MODE_FAST" />
+		<field name="TONEMAP_MODE_GAMMA_VALUE" since="23" />
+		<field name="TONEMAP_MODE_HIGH_QUALITY" />
+		<field name="TONEMAP_MODE_PRESET_CURVE" since="23" />
+		<field name="TONEMAP_PRESET_CURVE_REC709" since="23" />
+		<field name="TONEMAP_PRESET_CURVE_SRGB" since="23" />
+	</class>
+	<class name="android/hardware/camera2/CameraOfflineSession" since="30">
+		<extends name="android/hardware/camera2/CameraCaptureSession" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/hardware/camera2/CameraOfflineSession$CameraOfflineSessionCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onClosed(Landroid/hardware/camera2/CameraOfflineSession;)V" />
+		<method name="onError(Landroid/hardware/camera2/CameraOfflineSession;I)V" />
+		<method name="onIdle(Landroid/hardware/camera2/CameraOfflineSession;)V" />
+		<method name="onReady(Landroid/hardware/camera2/CameraOfflineSession;)V" />
+		<method name="onSwitchFailed(Landroid/hardware/camera2/CameraOfflineSession;)V" />
+		<field name="STATUS_INTERNAL_ERROR" />
+	</class>
+	<class name="android/hardware/camera2/CaptureFailure" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getFrameNumber()J" />
+		<method name="getPhysicalCameraId()Ljava/lang/String;" since="29" />
+		<method name="getReason()I" />
+		<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;" />
+		<method name="getSequenceId()I" />
+		<method name="wasImageCaptured()Z" />
+		<field name="REASON_ERROR" />
+		<field name="REASON_FLUSHED" />
+	</class>
+	<class name="android/hardware/camera2/CaptureRequest" since="21">
+		<extends name="android/hardware/camera2/CameraMetadata" />
+		<implements name="android/os/Parcelable" />
+		<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;" />
+		<method name="getTag()Ljava/lang/Object;" />
+		<method name="isReprocess()Z" since="23" />
+		<field name="BLACK_LEVEL_LOCK" />
+		<field name="COLOR_CORRECTION_ABERRATION_MODE" />
+		<field name="COLOR_CORRECTION_GAINS" />
+		<field name="COLOR_CORRECTION_MODE" />
+		<field name="COLOR_CORRECTION_TRANSFORM" />
+		<field name="CONTROL_AE_ANTIBANDING_MODE" />
+		<field name="CONTROL_AE_EXPOSURE_COMPENSATION" />
+		<field name="CONTROL_AE_LOCK" />
+		<field name="CONTROL_AE_MODE" />
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER" />
+		<field name="CONTROL_AE_REGIONS" />
+		<field name="CONTROL_AE_TARGET_FPS_RANGE" />
+		<field name="CONTROL_AF_MODE" />
+		<field name="CONTROL_AF_REGIONS" />
+		<field name="CONTROL_AF_TRIGGER" />
+		<field name="CONTROL_AWB_LOCK" />
+		<field name="CONTROL_AWB_MODE" />
+		<field name="CONTROL_AWB_REGIONS" />
+		<field name="CONTROL_CAPTURE_INTENT" />
+		<field name="CONTROL_EFFECT_MODE" />
+		<field name="CONTROL_ENABLE_ZSL" since="26" />
+		<field name="CONTROL_EXTENDED_SCENE_MODE" since="30" />
+		<field name="CONTROL_MODE" />
+		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST" since="24" />
+		<field name="CONTROL_SCENE_MODE" />
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE" />
+		<field name="CONTROL_ZOOM_RATIO" since="30" />
+		<field name="CREATOR" />
+		<field name="DISTORTION_CORRECTION_MODE" since="28" />
+		<field name="EDGE_MODE" />
+		<field name="FLASH_MODE" />
+		<field name="HOT_PIXEL_MODE" />
+		<field name="JPEG_GPS_LOCATION" />
+		<field name="JPEG_ORIENTATION" />
+		<field name="JPEG_QUALITY" />
+		<field name="JPEG_THUMBNAIL_QUALITY" />
+		<field name="JPEG_THUMBNAIL_SIZE" />
+		<field name="LENS_APERTURE" />
+		<field name="LENS_FILTER_DENSITY" />
+		<field name="LENS_FOCAL_LENGTH" />
+		<field name="LENS_FOCUS_DISTANCE" />
+		<field name="LENS_OPTICAL_STABILIZATION_MODE" />
+		<field name="NOISE_REDUCTION_MODE" />
+		<field name="REPROCESS_EFFECTIVE_EXPOSURE_FACTOR" since="23" />
+		<field name="SCALER_CROP_REGION" />
+		<field name="SCALER_ROTATE_AND_CROP" since="31" />
+		<field name="SENSOR_EXPOSURE_TIME" />
+		<field name="SENSOR_FRAME_DURATION" />
+		<field name="SENSOR_PIXEL_MODE" since="31" />
+		<field name="SENSOR_SENSITIVITY" />
+		<field name="SENSOR_TEST_PATTERN_DATA" />
+		<field name="SENSOR_TEST_PATTERN_MODE" />
+		<field name="SHADING_MODE" />
+		<field name="STATISTICS_FACE_DETECT_MODE" />
+		<field name="STATISTICS_HOT_PIXEL_MAP_MODE" />
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE" />
+		<field name="STATISTICS_OIS_DATA_MODE" since="28" />
+		<field name="TONEMAP_CURVE" />
+		<field name="TONEMAP_GAMMA" since="23" />
+		<field name="TONEMAP_MODE" />
+		<field name="TONEMAP_PRESET_CURVE" since="23" />
+	</class>
+	<class name="android/hardware/camera2/CaptureRequest$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="addTarget(Landroid/view/Surface;)V" />
+		<method name="build()Landroid/hardware/camera2/CaptureRequest;" />
+		<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;" />
+		<method name="getPhysicalCameraKey(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/String;)Ljava/lang/Object;" since="28" />
+		<method name="removeTarget(Landroid/view/Surface;)V" />
+		<method name="set(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;)V" />
+		<method name="setPhysicalCameraKey(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;Ljava/lang/String;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="28" />
+		<method name="setTag(Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/hardware/camera2/CaptureRequest$Key" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" since="29" />
+		<method name="getName()Ljava/lang/String;" />
+	</class>
+	<class name="android/hardware/camera2/CaptureResult" since="21">
+		<extends name="android/hardware/camera2/CameraMetadata" />
+		<method name="get(Landroid/hardware/camera2/CaptureResult$Key;)Ljava/lang/Object;" />
+		<method name="getCameraId()Ljava/lang/String;" since="31" />
+		<method name="getFrameNumber()J" />
+		<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;" />
+		<method name="getSequenceId()I" />
+		<field name="BLACK_LEVEL_LOCK" />
+		<field name="COLOR_CORRECTION_ABERRATION_MODE" />
+		<field name="COLOR_CORRECTION_GAINS" />
+		<field name="COLOR_CORRECTION_MODE" />
+		<field name="COLOR_CORRECTION_TRANSFORM" />
+		<field name="CONTROL_AE_ANTIBANDING_MODE" />
+		<field name="CONTROL_AE_EXPOSURE_COMPENSATION" />
+		<field name="CONTROL_AE_LOCK" />
+		<field name="CONTROL_AE_MODE" />
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER" />
+		<field name="CONTROL_AE_REGIONS" />
+		<field name="CONTROL_AE_STATE" />
+		<field name="CONTROL_AE_TARGET_FPS_RANGE" />
+		<field name="CONTROL_AF_MODE" />
+		<field name="CONTROL_AF_REGIONS" />
+		<field name="CONTROL_AF_SCENE_CHANGE" since="28" />
+		<field name="CONTROL_AF_STATE" />
+		<field name="CONTROL_AF_TRIGGER" />
+		<field name="CONTROL_AWB_LOCK" />
+		<field name="CONTROL_AWB_MODE" />
+		<field name="CONTROL_AWB_REGIONS" />
+		<field name="CONTROL_AWB_STATE" />
+		<field name="CONTROL_CAPTURE_INTENT" />
+		<field name="CONTROL_EFFECT_MODE" />
+		<field name="CONTROL_ENABLE_ZSL" since="26" />
+		<field name="CONTROL_EXTENDED_SCENE_MODE" since="30" />
+		<field name="CONTROL_MODE" />
+		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST" since="24" />
+		<field name="CONTROL_SCENE_MODE" />
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE" />
+		<field name="CONTROL_ZOOM_RATIO" since="30" />
+		<field name="DISTORTION_CORRECTION_MODE" since="28" />
+		<field name="EDGE_MODE" />
+		<field name="FLASH_MODE" />
+		<field name="FLASH_STATE" />
+		<field name="HOT_PIXEL_MODE" />
+		<field name="JPEG_GPS_LOCATION" />
+		<field name="JPEG_ORIENTATION" />
+		<field name="JPEG_QUALITY" />
+		<field name="JPEG_THUMBNAIL_QUALITY" />
+		<field name="JPEG_THUMBNAIL_SIZE" />
+		<field name="LENS_APERTURE" />
+		<field name="LENS_DISTORTION" since="28" />
+		<field name="LENS_FILTER_DENSITY" />
+		<field name="LENS_FOCAL_LENGTH" />
+		<field name="LENS_FOCUS_DISTANCE" />
+		<field name="LENS_FOCUS_RANGE" />
+		<field name="LENS_INTRINSIC_CALIBRATION" since="23" />
+		<field name="LENS_OPTICAL_STABILIZATION_MODE" />
+		<field name="LENS_POSE_ROTATION" since="23" />
+		<field name="LENS_POSE_TRANSLATION" since="23" />
+		<field name="LENS_RADIAL_DISTORTION" since="23" deprecated="28" />
+		<field name="LENS_STATE" />
+		<field name="LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID" since="29" />
+		<field name="NOISE_REDUCTION_MODE" />
+		<field name="REPROCESS_EFFECTIVE_EXPOSURE_FACTOR" since="23" />
+		<field name="REQUEST_PIPELINE_DEPTH" />
+		<field name="SCALER_CROP_REGION" />
+		<field name="SCALER_ROTATE_AND_CROP" since="31" />
+		<field name="SENSOR_DYNAMIC_BLACK_LEVEL" since="24" />
+		<field name="SENSOR_DYNAMIC_WHITE_LEVEL" since="24" />
+		<field name="SENSOR_EXPOSURE_TIME" />
+		<field name="SENSOR_FRAME_DURATION" />
+		<field name="SENSOR_GREEN_SPLIT" />
+		<field name="SENSOR_NEUTRAL_COLOR_POINT" />
+		<field name="SENSOR_NOISE_PROFILE" />
+		<field name="SENSOR_PIXEL_MODE" since="31" />
+		<field name="SENSOR_RAW_BINNING_FACTOR_USED" since="31" />
+		<field name="SENSOR_ROLLING_SHUTTER_SKEW" />
+		<field name="SENSOR_SENSITIVITY" />
+		<field name="SENSOR_TEST_PATTERN_DATA" />
+		<field name="SENSOR_TEST_PATTERN_MODE" />
+		<field name="SENSOR_TIMESTAMP" />
+		<field name="SHADING_MODE" />
+		<field name="STATISTICS_FACES" />
+		<field name="STATISTICS_FACE_DETECT_MODE" />
+		<field name="STATISTICS_HOT_PIXEL_MAP" />
+		<field name="STATISTICS_HOT_PIXEL_MAP_MODE" />
+		<field name="STATISTICS_LENS_SHADING_CORRECTION_MAP" />
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE" />
+		<field name="STATISTICS_OIS_DATA_MODE" since="28" />
+		<field name="STATISTICS_OIS_SAMPLES" since="28" />
+		<field name="STATISTICS_SCENE_FLICKER" />
+		<field name="TONEMAP_CURVE" />
+		<field name="TONEMAP_GAMMA" since="23" />
+		<field name="TONEMAP_MODE" />
+		<field name="TONEMAP_PRESET_CURVE" since="23" />
+	</class>
+	<class name="android/hardware/camera2/CaptureResult$Key" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" since="29" />
+		<method name="getName()Ljava/lang/String;" />
+	</class>
+	<class name="android/hardware/camera2/DngCreator" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="&lt;init&gt;(Landroid/hardware/camera2/CameraCharacteristics;Landroid/hardware/camera2/CaptureResult;)V" />
+		<method name="setDescription(Ljava/lang/String;)Landroid/hardware/camera2/DngCreator;" />
+		<method name="setLocation(Landroid/location/Location;)Landroid/hardware/camera2/DngCreator;" />
+		<method name="setOrientation(I)Landroid/hardware/camera2/DngCreator;" />
+		<method name="setThumbnail(Landroid/graphics/Bitmap;)Landroid/hardware/camera2/DngCreator;" />
+		<method name="setThumbnail(Landroid/media/Image;)Landroid/hardware/camera2/DngCreator;" />
+		<method name="writeByteBuffer(Ljava/io/OutputStream;Landroid/util/Size;Ljava/nio/ByteBuffer;J)V" />
+		<method name="writeImage(Ljava/io/OutputStream;Landroid/media/Image;)V" />
+		<method name="writeInputStream(Ljava/io/OutputStream;Landroid/util/Size;Ljava/io/InputStream;J)V" />
+		<field name="MAX_THUMBNAIL_DIMENSION" />
+	</class>
+	<class name="android/hardware/camera2/MultiResolutionImageReader" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;II)V" />
+		<method name="flush()V" />
+		<method name="getStreamInfoForImageReader(Landroid/media/ImageReader;)Landroid/hardware/camera2/params/MultiResolutionStreamInfo;" />
+		<method name="getSurface()Landroid/view/Surface;" />
+		<method name="setOnImageAvailableListener(Landroid/media/ImageReader$OnImageAvailableListener;Ljava/util/concurrent/Executor;)V" />
+	</class>
+	<class name="android/hardware/camera2/TotalCaptureResult" since="21">
+		<extends name="android/hardware/camera2/CaptureResult" />
+		<method name="getPartialResults()Ljava/util/List;" />
+		<method name="getPhysicalCameraResults()Ljava/util/Map;" since="28" deprecated="31" />
+		<method name="getPhysicalCameraTotalResults()Ljava/util/Map;" since="31" />
+	</class>
+	<class name="android/hardware/camera2/params/BlackLevelPattern" since="21">
+		<extends name="java/lang/Object" />
+		<method name="copyTo([II)V" />
+		<method name="getOffsetForIndex(II)I" />
+		<field name="COUNT" />
+	</class>
+	<class name="android/hardware/camera2/params/Capability" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getMaxStreamingSize()Landroid/util/Size;" />
+		<method name="getMode()I" />
+		<method name="getZoomRatioRange()Landroid/util/Range;" />
+	</class>
+	<class name="android/hardware/camera2/params/ColorSpaceTransform" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;([I)V" />
+		<method name="&lt;init&gt;([Landroid/util/Rational;)V" />
+		<method name="copyElements([II)V" />
+		<method name="copyElements([Landroid/util/Rational;I)V" />
+		<method name="getElement(II)Landroid/util/Rational;" />
+	</class>
+	<class name="android/hardware/camera2/params/DeviceStateSensorOrientationMap" since="33">
+		<extends name="java/lang/Object" />
+		<method name="getSensorOrientation(J)I" />
+		<field name="FOLDED" />
+		<field name="NORMAL" />
+	</class>
+	<class name="android/hardware/camera2/params/ExtensionSessionConfiguration" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$StateCallback;)V" />
+		<method name="getExecutor()Ljava/util/concurrent/Executor;" />
+		<method name="getExtension()I" />
+		<method name="getOutputConfigurations()Ljava/util/List;" />
+		<method name="getStateCallback()Landroid/hardware/camera2/CameraExtensionSession$StateCallback;" />
+	</class>
+	<class name="android/hardware/camera2/params/Face" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getBounds()Landroid/graphics/Rect;" />
+		<method name="getId()I" />
+		<method name="getLeftEyePosition()Landroid/graphics/Point;" />
+		<method name="getMouthPosition()Landroid/graphics/Point;" />
+		<method name="getRightEyePosition()Landroid/graphics/Point;" />
+		<method name="getScore()I" />
+		<field name="ID_UNSUPPORTED" />
+		<field name="SCORE_MAX" />
+		<field name="SCORE_MIN" />
+	</class>
+	<class name="android/hardware/camera2/params/InputConfiguration" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;I)V" since="31" />
+		<method name="getFormat()I" />
+		<method name="getHeight()I" />
+		<method name="getWidth()I" />
+		<method name="isMultiResolution()Z" since="31" />
+	</class>
+	<class name="android/hardware/camera2/params/LensShadingMap" since="21">
+		<extends name="java/lang/Object" />
+		<method name="copyGainFactors([FI)V" />
+		<method name="getColumnCount()I" />
+		<method name="getGainFactor(III)F" />
+		<method name="getGainFactorCount()I" />
+		<method name="getGainFactorVector(II)Landroid/hardware/camera2/params/RggbChannelVector;" />
+		<method name="getRowCount()I" />
+		<field name="MINIMUM_GAIN_FACTOR" />
+	</class>
+	<class name="android/hardware/camera2/params/MandatoryStreamCombination" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getDescription()Ljava/lang/CharSequence;" />
+		<method name="getStreamsInformation()Ljava/util/List;" />
+		<method name="isReprocessable()Z" />
+	</class>
+	<class name="android/hardware/camera2/params/MandatoryStreamCombination$MandatoryStreamInformation" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getAvailableSizes()Ljava/util/List;" />
+		<method name="getFormat()I" />
+		<method name="isInput()Z" />
+		<method name="isMaximumSize()Z" since="31" />
+		<method name="isUltraHighResolution()Z" since="31" />
+	</class>
+	<class name="android/hardware/camera2/params/MeteringRectangle" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IIIII)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Point;Landroid/util/Size;I)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;I)V" />
+		<method name="equals(Landroid/hardware/camera2/params/MeteringRectangle;)Z" />
+		<method name="getHeight()I" />
+		<method name="getMeteringWeight()I" />
+		<method name="getRect()Landroid/graphics/Rect;" />
+		<method name="getSize()Landroid/util/Size;" />
+		<method name="getUpperLeftPoint()Landroid/graphics/Point;" />
+		<method name="getWidth()I" />
+		<method name="getX()I" />
+		<method name="getY()I" />
+		<field name="METERING_WEIGHT_DONT_CARE" />
+		<field name="METERING_WEIGHT_MAX" />
+		<field name="METERING_WEIGHT_MIN" />
+	</class>
+	<class name="android/hardware/camera2/params/MultiResolutionStreamConfigurationMap" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getInputFormats()[I" />
+		<method name="getInputInfo(I)Ljava/util/Collection;" />
+		<method name="getOutputFormats()[I" />
+		<method name="getOutputInfo(I)Ljava/util/Collection;" />
+	</class>
+	<class name="android/hardware/camera2/params/MultiResolutionStreamInfo" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IILjava/lang/String;)V" />
+		<method name="getHeight()I" />
+		<method name="getPhysicalCameraId()Ljava/lang/String;" />
+		<method name="getWidth()I" />
+	</class>
+	<class name="android/hardware/camera2/params/OisSample" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(JFF)V" />
+		<method name="getTimestamp()J" />
+		<method name="getXshift()F" />
+		<method name="getYshift()F" />
+	</class>
+	<class name="android/hardware/camera2/params/OutputConfiguration" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ILandroid/view/Surface;)V" />
+		<method name="&lt;init&gt;(Landroid/util/Size;Ljava/lang/Class;)V" since="26" />
+		<method name="&lt;init&gt;(Landroid/view/Surface;)V" />
+		<method name="addSensorPixelModeUsed(I)V" since="31" />
+		<method name="addSurface(Landroid/view/Surface;)V" since="26" />
+		<method name="createInstancesForMultiResolutionOutput(Landroid/hardware/camera2/MultiResolutionImageReader;)Ljava/util/Collection;" since="31" />
+		<method name="enableSurfaceSharing()V" since="26" />
+		<method name="getMaxSharedSurfaceCount()I" since="28" />
+		<method name="getSurface()Landroid/view/Surface;" />
+		<method name="getSurfaceGroupId()I" />
+		<method name="getSurfaces()Ljava/util/List;" since="26" />
+		<method name="removeSensorPixelModeUsed(I)V" since="31" />
+		<method name="removeSurface(Landroid/view/Surface;)V" since="28" />
+		<method name="setPhysicalCameraId(Ljava/lang/String;)V" since="28" />
+		<field name="CREATOR" />
+		<field name="SURFACE_GROUP_ID_NONE" />
+	</class>
+	<class name="android/hardware/camera2/params/RecommendedStreamConfigurationMap" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getHighResolutionOutputSizes(I)Ljava/util/Set;" />
+		<method name="getHighSpeedVideoFpsRanges()Ljava/util/Set;" />
+		<method name="getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)Ljava/util/Set;" />
+		<method name="getHighSpeedVideoSizes()Ljava/util/Set;" />
+		<method name="getHighSpeedVideoSizesFor(Landroid/util/Range;)Ljava/util/Set;" />
+		<method name="getInputFormats()Ljava/util/Set;" />
+		<method name="getInputSizes(I)Ljava/util/Set;" />
+		<method name="getOutputFormats()Ljava/util/Set;" />
+		<method name="getOutputMinFrameDuration(ILandroid/util/Size;)J" />
+		<method name="getOutputMinFrameDuration(Ljava/lang/Class;Landroid/util/Size;)J" />
+		<method name="getOutputSizes(I)Ljava/util/Set;" />
+		<method name="getOutputSizes(Ljava/lang/Class;)Ljava/util/Set;" />
+		<method name="getOutputStallDuration(ILandroid/util/Size;)J" />
+		<method name="getOutputStallDuration(Ljava/lang/Class;Landroid/util/Size;)J" />
+		<method name="getRecommendedUseCase()I" />
+		<method name="getValidOutputFormatsForInput(I)Ljava/util/Set;" />
+		<method name="isOutputSupportedFor(I)Z" />
+		<method name="isOutputSupportedFor(Landroid/view/Surface;)Z" />
+		<field name="USECASE_LOW_LATENCY_SNAPSHOT" />
+		<field name="USECASE_PREVIEW" />
+		<field name="USECASE_RAW" />
+		<field name="USECASE_RECORD" />
+		<field name="USECASE_SNAPSHOT" />
+		<field name="USECASE_VIDEO_SNAPSHOT" />
+		<field name="USECASE_ZSL" />
+	</class>
+	<class name="android/hardware/camera2/params/RggbChannelVector" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(FFFF)V" />
+		<method name="copyTo([FI)V" />
+		<method name="getBlue()F" />
+		<method name="getComponent(I)F" />
+		<method name="getGreenEven()F" />
+		<method name="getGreenOdd()F" />
+		<method name="getRed()F" />
+		<field name="BLUE" />
+		<field name="COUNT" />
+		<field name="GREEN_EVEN" />
+		<field name="GREEN_ODD" />
+		<field name="RED" />
+	</class>
+	<class name="android/hardware/camera2/params/SessionConfiguration" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="29" />
+		<method name="&lt;init&gt;(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;)V" />
+		<method name="getExecutor()Ljava/util/concurrent/Executor;" />
+		<method name="getInputConfiguration()Landroid/hardware/camera2/params/InputConfiguration;" />
+		<method name="getOutputConfigurations()Ljava/util/List;" />
+		<method name="getSessionParameters()Landroid/hardware/camera2/CaptureRequest;" />
+		<method name="getSessionType()I" />
+		<method name="getStateCallback()Landroid/hardware/camera2/CameraCaptureSession$StateCallback;" />
+		<method name="setInputConfiguration(Landroid/hardware/camera2/params/InputConfiguration;)V" />
+		<method name="setSessionParameters(Landroid/hardware/camera2/CaptureRequest;)V" />
+		<field name="CREATOR" since="29" />
+		<field name="SESSION_HIGH_SPEED" />
+		<field name="SESSION_REGULAR" />
+	</class>
+	<class name="android/hardware/camera2/params/StreamConfigurationMap" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getHighResolutionOutputSizes(I)[Landroid/util/Size;" since="23" />
+		<method name="getHighSpeedVideoFpsRanges()[Landroid/util/Range;" />
+		<method name="getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)[Landroid/util/Range;" />
+		<method name="getHighSpeedVideoSizes()[Landroid/util/Size;" />
+		<method name="getHighSpeedVideoSizesFor(Landroid/util/Range;)[Landroid/util/Size;" />
+		<method name="getInputFormats()[I" since="23" />
+		<method name="getInputSizes(I)[Landroid/util/Size;" since="23" />
+		<method name="getOutputFormats()[I" />
+		<method name="getOutputMinFrameDuration(ILandroid/util/Size;)J" />
+		<method name="getOutputMinFrameDuration(Ljava/lang/Class;Landroid/util/Size;)J" />
+		<method name="getOutputSizes(I)[Landroid/util/Size;" />
+		<method name="getOutputSizes(Ljava/lang/Class;)[Landroid/util/Size;" />
+		<method name="getOutputStallDuration(ILandroid/util/Size;)J" />
+		<method name="getOutputStallDuration(Ljava/lang/Class;Landroid/util/Size;)J" />
+		<method name="getValidOutputFormatsForInput(I)[I" since="23" />
+		<method name="isOutputSupportedFor(I)Z" />
+		<method name="isOutputSupportedFor(Landroid/view/Surface;)Z" />
+		<method name="isOutputSupportedFor(Ljava/lang/Class;)Z" />
+	</class>
+	<class name="android/hardware/camera2/params/TonemapCurve" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;([F[F[F)V" />
+		<method name="copyColorCurve(I[FI)V" />
+		<method name="getPoint(II)Landroid/graphics/PointF;" />
+		<method name="getPointCount(I)I" />
+		<field name="CHANNEL_BLUE" />
+		<field name="CHANNEL_GREEN" />
+		<field name="CHANNEL_RED" />
+		<field name="LEVEL_BLACK" />
+		<field name="LEVEL_WHITE" />
+		<field name="POINT_SIZE" />
+	</class>
+	<class name="android/hardware/display/DeviceProductInfo" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V" />
+		<method name="getConnectionToSinkType()I" />
+		<method name="getManufactureWeek()I" />
+		<method name="getManufactureYear()I" />
+		<method name="getManufacturerPnpId()Ljava/lang/String;" />
+		<method name="getModelYear()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getProductId()Ljava/lang/String;" />
+		<field name="CONNECTION_TO_SINK_BUILT_IN" />
+		<field name="CONNECTION_TO_SINK_DIRECT" />
+		<field name="CONNECTION_TO_SINK_TRANSITIVE" />
+		<field name="CONNECTION_TO_SINK_UNKNOWN" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/hardware/display/DisplayManager" since="17">
+		<extends name="java/lang/Object" />
+		<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;I)Landroid/hardware/display/VirtualDisplay;" since="19" />
+		<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;ILandroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;" since="21" />
+		<method name="getDisplay(I)Landroid/view/Display;" />
+		<method name="getDisplays()[Landroid/view/Display;" />
+		<method name="getDisplays(Ljava/lang/String;)[Landroid/view/Display;" />
+		<method name="getMatchContentFrameRateUserPreference()I" since="31" />
+		<method name="registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V" />
+		<method name="unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V" />
+		<field name="DISPLAY_CATEGORY_PRESENTATION" />
+		<field name="MATCH_CONTENT_FRAMERATE_ALWAYS" since="31" />
+		<field name="MATCH_CONTENT_FRAMERATE_NEVER" since="31" />
+		<field name="MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY" since="31" />
+		<field name="MATCH_CONTENT_FRAMERATE_UNKNOWN" since="31" />
+		<field name="VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR" since="21" />
+		<field name="VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY" since="20" />
+		<field name="VIRTUAL_DISPLAY_FLAG_PRESENTATION" since="19" />
+		<field name="VIRTUAL_DISPLAY_FLAG_PUBLIC" since="19" />
+		<field name="VIRTUAL_DISPLAY_FLAG_SECURE" since="19" />
+	</class>
+	<class name="android/hardware/display/DisplayManager$DisplayListener" since="17">
+		<extends name="java/lang/Object" />
+		<method name="onDisplayAdded(I)V" />
+		<method name="onDisplayChanged(I)V" />
+		<method name="onDisplayRemoved(I)V" />
+	</class>
+	<class name="android/hardware/display/VirtualDisplay" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getDisplay()Landroid/view/Display;" />
+		<method name="getSurface()Landroid/view/Surface;" since="20" />
+		<method name="release()V" />
+		<method name="resize(III)V" since="21" />
+		<method name="setSurface(Landroid/view/Surface;)V" since="20" />
+	</class>
+	<class name="android/hardware/display/VirtualDisplay$Callback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onPaused()V" />
+		<method name="onResumed()V" />
+		<method name="onStopped()V" />
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager" since="23" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="authenticate(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;Landroid/os/CancellationSignal;ILandroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback;Landroid/os/Handler;)V" deprecated="28" />
+		<method name="hasEnrolledFingerprints()Z" deprecated="28" />
+		<method name="isHardwareDetected()Z" deprecated="28" />
+		<field name="FINGERPRINT_ACQUIRED_GOOD" />
+		<field name="FINGERPRINT_ACQUIRED_IMAGER_DIRTY" />
+		<field name="FINGERPRINT_ACQUIRED_INSUFFICIENT" />
+		<field name="FINGERPRINT_ACQUIRED_PARTIAL" />
+		<field name="FINGERPRINT_ACQUIRED_TOO_FAST" />
+		<field name="FINGERPRINT_ACQUIRED_TOO_SLOW" />
+		<field name="FINGERPRINT_ERROR_CANCELED" />
+		<field name="FINGERPRINT_ERROR_HW_NOT_PRESENT" since="28" />
+		<field name="FINGERPRINT_ERROR_HW_UNAVAILABLE" />
+		<field name="FINGERPRINT_ERROR_LOCKOUT" />
+		<field name="FINGERPRINT_ERROR_LOCKOUT_PERMANENT" since="27" />
+		<field name="FINGERPRINT_ERROR_NO_FINGERPRINTS" since="28" />
+		<field name="FINGERPRINT_ERROR_NO_SPACE" />
+		<field name="FINGERPRINT_ERROR_TIMEOUT" />
+		<field name="FINGERPRINT_ERROR_UNABLE_TO_PROCESS" />
+		<field name="FINGERPRINT_ERROR_USER_CANCELED" since="27" />
+		<field name="FINGERPRINT_ERROR_VENDOR" since="27" />
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationCallback" since="23" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="onAuthenticationError(ILjava/lang/CharSequence;)V" deprecated="29" />
+		<method name="onAuthenticationFailed()V" deprecated="29" />
+		<method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V" deprecated="29" />
+		<method name="onAuthenticationSucceeded(Landroid/hardware/fingerprint/FingerprintManager$AuthenticationResult;)V" deprecated="29" />
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationResult" since="23" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="getCryptoObject()Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;" deprecated="29" />
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager$CryptoObject" since="23" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/Signature;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljavax/crypto/Cipher;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljavax/crypto/Mac;)V" deprecated="29" />
+		<method name="getCipher()Ljavax/crypto/Cipher;" deprecated="29" />
+		<method name="getMac()Ljavax/crypto/Mac;" deprecated="29" />
+		<method name="getSignature()Ljava/security/Signature;" deprecated="29" />
+	</class>
+	<class name="android/hardware/input/InputManager" since="16">
+		<extends name="java/lang/Object" />
+		<method name="getInputDevice(I)Landroid/view/InputDevice;" />
+		<method name="getInputDeviceIds()[I" />
+		<method name="getMaximumObscuringOpacityForTouch()F" since="31" />
+		<method name="registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V" />
+		<method name="unregisterInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;)V" />
+		<method name="verifyInputEvent(Landroid/view/InputEvent;)Landroid/view/VerifiedInputEvent;" since="30" />
+		<field name="ACTION_QUERY_KEYBOARD_LAYOUTS" />
+		<field name="META_DATA_KEYBOARD_LAYOUTS" />
+	</class>
+	<class name="android/hardware/input/InputManager$InputDeviceListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onInputDeviceAdded(I)V" />
+		<method name="onInputDeviceChanged(I)V" />
+		<method name="onInputDeviceRemoved(I)V" />
+	</class>
+	<class name="android/hardware/lights/Light" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getId()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getOrdinal()I" />
+		<method name="getType()I" />
+		<method name="hasBrightnessControl()Z" />
+		<method name="hasRgbControl()Z" />
+		<field name="CREATOR" />
+		<field name="LIGHT_CAPABILITY_BRIGHTNESS" />
+		<field name="LIGHT_CAPABILITY_RGB" />
+		<field name="LIGHT_TYPE_INPUT" />
+		<field name="LIGHT_TYPE_MICROPHONE" />
+		<field name="LIGHT_TYPE_PLAYER_ID" />
+	</class>
+	<class name="android/hardware/lights/LightState" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getColor()I" />
+		<method name="getPlayerId()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/hardware/lights/LightState$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/hardware/lights/LightState;" />
+		<method name="setColor(I)Landroid/hardware/lights/LightState$Builder;" />
+		<method name="setPlayerId(I)Landroid/hardware/lights/LightState$Builder;" />
+	</class>
+	<class name="android/hardware/lights/LightsManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getLightState(Landroid/hardware/lights/Light;)Landroid/hardware/lights/LightState;" />
+		<method name="getLights()Ljava/util/List;" />
+		<method name="openSession()Landroid/hardware/lights/LightsManager$LightsSession;" />
+	</class>
+	<class name="android/hardware/lights/LightsManager$LightsSession" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="requestLights(Landroid/hardware/lights/LightsRequest;)V" />
+	</class>
+	<class name="android/hardware/lights/LightsRequest" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getLightStates()Ljava/util/List;" />
+		<method name="getLights()Ljava/util/List;" />
+		<method name="getLightsAndStates()Ljava/util/Map;" />
+	</class>
+	<class name="android/hardware/lights/LightsRequest$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addLight(Landroid/hardware/lights/Light;Landroid/hardware/lights/LightState;)Landroid/hardware/lights/LightsRequest$Builder;" />
+		<method name="build()Landroid/hardware/lights/LightsRequest;" />
+		<method name="clearLight(Landroid/hardware/lights/Light;)Landroid/hardware/lights/LightsRequest$Builder;" />
+	</class>
+	<class name="android/hardware/location/GeofenceHardware" since="18" removed="21">
+		<extends name="java/lang/Object" />
+		<method name="addGeofence(IILandroid/hardware/location/GeofenceHardwareRequest;Landroid/hardware/location/GeofenceHardwareCallback;)Z" />
+		<method name="getMonitoringTypes()[I" />
+		<method name="getStatusOfMonitoringType(I)I" />
+		<method name="pauseGeofence(II)Z" />
+		<method name="registerForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z" />
+		<method name="removeGeofence(II)Z" />
+		<method name="resumeGeofence(III)Z" />
+		<method name="unregisterForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z" />
+		<field name="GEOFENCE_ENTERED" />
+		<field name="GEOFENCE_ERROR_ID_EXISTS" />
+		<field name="GEOFENCE_ERROR_ID_UNKNOWN" />
+		<field name="GEOFENCE_ERROR_INVALID_TRANSITION" />
+		<field name="GEOFENCE_ERROR_TOO_MANY_GEOFENCES" />
+		<field name="GEOFENCE_EXITED" />
+		<field name="GEOFENCE_FAILURE" />
+		<field name="GEOFENCE_SUCCESS" />
+		<field name="GEOFENCE_UNCERTAIN" />
+		<field name="MONITORING_TYPE_GPS_HARDWARE" />
+		<field name="MONITOR_CURRENTLY_AVAILABLE" />
+		<field name="MONITOR_CURRENTLY_UNAVAILABLE" />
+		<field name="MONITOR_UNSUPPORTED" />
+	</class>
+	<class name="android/hardware/location/GeofenceHardwareCallback" since="18" removed="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGeofenceAdd(II)V" />
+		<method name="onGeofencePause(II)V" />
+		<method name="onGeofenceRemove(II)V" />
+		<method name="onGeofenceResume(II)V" />
+		<method name="onGeofenceTransition(IILandroid/location/Location;JI)V" />
+	</class>
+	<class name="android/hardware/location/GeofenceHardwareMonitorCallback" since="18" removed="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onMonitoringSystemChange(IZLandroid/location/Location;)V" />
+	</class>
+	<class name="android/hardware/location/GeofenceHardwareRequest" since="18" removed="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createCircularGeofence(DDD)Landroid/hardware/location/GeofenceHardwareRequest;" />
+		<method name="getLastTransition()I" />
+		<method name="getLatitude()D" />
+		<method name="getLongitude()D" />
+		<method name="getMonitorTransitions()I" />
+		<method name="getNotificationResponsiveness()I" />
+		<method name="getRadius()D" />
+		<method name="getUnknownTimer()I" />
+		<method name="setLastTransition(I)V" />
+		<method name="setMonitorTransitions(I)V" />
+		<method name="setNotificationResponsiveness(I)V" />
+		<method name="setUnknownTimer(I)V" />
+	</class>
+	<class name="android/hardware/usb/UsbAccessory" since="12">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getManufacturer()Ljava/lang/String;" />
+		<method name="getModel()Ljava/lang/String;" />
+		<method name="getSerial()Ljava/lang/String;" />
+		<method name="getUri()Ljava/lang/String;" />
+		<method name="getVersion()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/hardware/usb/UsbConfiguration" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getId()I" />
+		<method name="getInterface(I)Landroid/hardware/usb/UsbInterface;" />
+		<method name="getInterfaceCount()I" />
+		<method name="getMaxPower()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="isRemoteWakeup()Z" />
+		<method name="isSelfPowered()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/hardware/usb/UsbConstants" since="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="USB_CLASS_APP_SPEC" />
+		<field name="USB_CLASS_AUDIO" />
+		<field name="USB_CLASS_CDC_DATA" />
+		<field name="USB_CLASS_COMM" />
+		<field name="USB_CLASS_CONTENT_SEC" />
+		<field name="USB_CLASS_CSCID" />
+		<field name="USB_CLASS_HID" />
+		<field name="USB_CLASS_HUB" />
+		<field name="USB_CLASS_MASS_STORAGE" />
+		<field name="USB_CLASS_MISC" />
+		<field name="USB_CLASS_PER_INTERFACE" />
+		<field name="USB_CLASS_PHYSICA" />
+		<field name="USB_CLASS_PRINTER" />
+		<field name="USB_CLASS_STILL_IMAGE" />
+		<field name="USB_CLASS_VENDOR_SPEC" />
+		<field name="USB_CLASS_VIDEO" />
+		<field name="USB_CLASS_WIRELESS_CONTROLLER" />
+		<field name="USB_DIR_IN" />
+		<field name="USB_DIR_OUT" />
+		<field name="USB_ENDPOINT_DIR_MASK" />
+		<field name="USB_ENDPOINT_NUMBER_MASK" />
+		<field name="USB_ENDPOINT_XFERTYPE_MASK" />
+		<field name="USB_ENDPOINT_XFER_BULK" />
+		<field name="USB_ENDPOINT_XFER_CONTROL" />
+		<field name="USB_ENDPOINT_XFER_INT" />
+		<field name="USB_ENDPOINT_XFER_ISOC" />
+		<field name="USB_INTERFACE_SUBCLASS_BOOT" />
+		<field name="USB_SUBCLASS_VENDOR_SPEC" />
+		<field name="USB_TYPE_CLASS" />
+		<field name="USB_TYPE_MASK" />
+		<field name="USB_TYPE_RESERVED" />
+		<field name="USB_TYPE_STANDARD" />
+		<field name="USB_TYPE_VENDOR" />
+	</class>
+	<class name="android/hardware/usb/UsbDevice" since="12">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getConfiguration(I)Landroid/hardware/usb/UsbConfiguration;" since="21" />
+		<method name="getConfigurationCount()I" since="21" />
+		<method name="getDeviceClass()I" />
+		<method name="getDeviceId()I" />
+		<method name="getDeviceId(Ljava/lang/String;)I" />
+		<method name="getDeviceName()Ljava/lang/String;" />
+		<method name="getDeviceName(I)Ljava/lang/String;" />
+		<method name="getDeviceProtocol()I" />
+		<method name="getDeviceSubclass()I" />
+		<method name="getInterface(I)Landroid/hardware/usb/UsbInterface;" />
+		<method name="getInterfaceCount()I" />
+		<method name="getManufacturerName()Ljava/lang/String;" since="21" />
+		<method name="getProductId()I" />
+		<method name="getProductName()Ljava/lang/String;" since="21" />
+		<method name="getSerialNumber()Ljava/lang/String;" since="21" />
+		<method name="getVendorId()I" />
+		<method name="getVersion()Ljava/lang/String;" since="23" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/hardware/usb/UsbDeviceConnection" since="12">
+		<extends name="java/lang/Object" />
+		<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BII)I" />
+		<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BIII)I" since="18" />
+		<method name="claimInterface(Landroid/hardware/usb/UsbInterface;Z)Z" />
+		<method name="close()V" />
+		<method name="controlTransfer(IIII[BII)I" />
+		<method name="controlTransfer(IIII[BIII)I" since="18" />
+		<method name="getFileDescriptor()I" />
+		<method name="getRawDescriptors()[B" since="13" />
+		<method name="getSerial()Ljava/lang/String;" />
+		<method name="releaseInterface(Landroid/hardware/usb/UsbInterface;)Z" />
+		<method name="requestWait()Landroid/hardware/usb/UsbRequest;" />
+		<method name="requestWait(J)Landroid/hardware/usb/UsbRequest;" since="26" />
+		<method name="setConfiguration(Landroid/hardware/usb/UsbConfiguration;)Z" since="21" />
+		<method name="setInterface(Landroid/hardware/usb/UsbInterface;)Z" since="21" />
+	</class>
+	<class name="android/hardware/usb/UsbEndpoint" since="12">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAddress()I" />
+		<method name="getAttributes()I" />
+		<method name="getDirection()I" />
+		<method name="getEndpointNumber()I" />
+		<method name="getInterval()I" />
+		<method name="getMaxPacketSize()I" />
+		<method name="getType()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/hardware/usb/UsbInterface" since="12">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAlternateSetting()I" since="21" />
+		<method name="getEndpoint(I)Landroid/hardware/usb/UsbEndpoint;" />
+		<method name="getEndpointCount()I" />
+		<method name="getId()I" />
+		<method name="getInterfaceClass()I" />
+		<method name="getInterfaceProtocol()I" />
+		<method name="getInterfaceSubclass()I" />
+		<method name="getName()Ljava/lang/String;" since="21" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/hardware/usb/UsbManager" since="12">
+		<extends name="java/lang/Object" />
+		<method name="getAccessoryList()[Landroid/hardware/usb/UsbAccessory;" />
+		<method name="getDeviceList()Ljava/util/HashMap;" />
+		<method name="hasPermission(Landroid/hardware/usb/UsbAccessory;)Z" />
+		<method name="hasPermission(Landroid/hardware/usb/UsbDevice;)Z" />
+		<method name="openAccessory(Landroid/hardware/usb/UsbAccessory;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="openDevice(Landroid/hardware/usb/UsbDevice;)Landroid/hardware/usb/UsbDeviceConnection;" />
+		<method name="requestPermission(Landroid/hardware/usb/UsbAccessory;Landroid/app/PendingIntent;)V" />
+		<method name="requestPermission(Landroid/hardware/usb/UsbDevice;Landroid/app/PendingIntent;)V" />
+		<field name="ACTION_USB_ACCESSORY_ATTACHED" />
+		<field name="ACTION_USB_ACCESSORY_DETACHED" />
+		<field name="ACTION_USB_DEVICE_ATTACHED" />
+		<field name="ACTION_USB_DEVICE_DETACHED" />
+		<field name="EXTRA_ACCESSORY" />
+		<field name="EXTRA_DEVICE" />
+		<field name="EXTRA_PERMISSION_GRANTED" />
+	</class>
+	<class name="android/hardware/usb/UsbRequest" since="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cancel()Z" />
+		<method name="close()V" />
+		<method name="getClientData()Ljava/lang/Object;" />
+		<method name="getEndpoint()Landroid/hardware/usb/UsbEndpoint;" />
+		<method name="initialize(Landroid/hardware/usb/UsbDeviceConnection;Landroid/hardware/usb/UsbEndpoint;)Z" />
+		<method name="queue(Ljava/nio/ByteBuffer;)Z" since="26" />
+		<method name="queue(Ljava/nio/ByteBuffer;I)Z" deprecated="26" />
+		<method name="setClientData(Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/inputmethodservice/AbstractInputMethodService" since="3">
+		<extends name="android/app/Service" />
+		<implements name="android/view/KeyEvent$Callback" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;" since="5" />
+		<method name="onCreateInputMethodInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;" />
+		<method name="onCreateInputMethodSessionInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;" />
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="17" />
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/inputmethod/InputMethod" />
+		<method name="&lt;init&gt;(Landroid/inputmethodservice/AbstractInputMethodService;)V" />
+	</class>
+	<class name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/inputmethod/InputMethodSession" />
+		<method name="&lt;init&gt;(Landroid/inputmethodservice/AbstractInputMethodService;)V" />
+		<method name="isEnabled()Z" />
+		<method name="isRevoked()Z" />
+		<method name="revokeSelf()V" />
+		<method name="setEnabled(Z)V" />
+	</class>
+	<class name="android/inputmethodservice/ExtractEditText" since="3">
+		<extends name="android/widget/EditText" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="finishInternalChanges()V" />
+		<method name="hasVerticalScrollBar()Z" />
+		<method name="startInternalChanges()V" />
+	</class>
+	<class name="android/inputmethodservice/InputMethodService" since="3">
+		<extends name="android/inputmethodservice/AbstractInputMethodService" />
+		<method name="&lt;init&gt;()V" />
+		<method name="enableHardwareAcceleration()Z" since="17" deprecated="21" />
+		<method name="getBackDisposition()I" since="11" />
+		<method name="getCandidatesHiddenVisibility()I" />
+		<method name="getCurrentInputBinding()Landroid/view/inputmethod/InputBinding;" />
+		<method name="getCurrentInputConnection()Landroid/view/inputmethod/InputConnection;" />
+		<method name="getCurrentInputEditorInfo()Landroid/view/inputmethod/EditorInfo;" />
+		<method name="getCurrentInputStarted()Z" />
+		<method name="getInputMethodWindowRecommendedHeight()I" since="21" deprecated="29" />
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" />
+		<method name="getMaxWidth()I" />
+		<method name="getTextForImeAction(I)Ljava/lang/CharSequence;" />
+		<method name="getWindow()Landroid/app/Dialog;" />
+		<method name="hideStatusIcon()V" />
+		<method name="hideWindow()V" />
+		<method name="isExtractViewShown()Z" />
+		<method name="isFullscreenMode()Z" />
+		<method name="isInputViewShown()Z" />
+		<method name="isShowInputRequested()Z" />
+		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="onBindInput()V" />
+		<method name="onComputeInsets(Landroid/inputmethodservice/InputMethodService$Insets;)V" />
+		<method name="onConfigureWindow(Landroid/view/Window;ZZ)V" />
+		<method name="onCreateCandidatesView()Landroid/view/View;" />
+		<method name="onCreateExtractTextView()Landroid/view/View;" />
+		<method name="onCreateInlineSuggestionsRequest(Landroid/os/Bundle;)Landroid/view/inputmethod/InlineSuggestionsRequest;" since="30" />
+		<method name="onCreateInputView()Landroid/view/View;" />
+		<method name="onCurrentInputMethodSubtypeChanged(Landroid/view/inputmethod/InputMethodSubtype;)V" since="11" />
+		<method name="onDisplayCompletions([Landroid/view/inputmethod/CompletionInfo;)V" />
+		<method name="onEvaluateFullscreenMode()Z" />
+		<method name="onEvaluateInputViewShown()Z" />
+		<method name="onExtractTextContextMenuItem(I)Z" />
+		<method name="onExtractedCursorMovement(II)V" />
+		<method name="onExtractedSelectionChanged(II)V" />
+		<method name="onExtractedTextClicked()V" />
+		<method name="onExtractingInputChanged(Landroid/view/inputmethod/EditorInfo;)V" />
+		<method name="onFinishCandidatesView(Z)V" />
+		<method name="onFinishInput()V" />
+		<method name="onFinishInputView(Z)V" />
+		<method name="onInitializeInterface()V" />
+		<method name="onInlineSuggestionsResponse(Landroid/view/inputmethod/InlineSuggestionsResponse;)Z" since="30" />
+		<method name="onShowInputRequested(IZ)Z" />
+		<method name="onStartCandidatesView(Landroid/view/inputmethod/EditorInfo;Z)V" />
+		<method name="onStartInput(Landroid/view/inputmethod/EditorInfo;Z)V" />
+		<method name="onStartInputView(Landroid/view/inputmethod/EditorInfo;Z)V" />
+		<method name="onUnbindInput()V" />
+		<method name="onUpdateCursor(Landroid/graphics/Rect;)V" deprecated="21" />
+		<method name="onUpdateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21" />
+		<method name="onUpdateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V" />
+		<method name="onUpdateExtractingViews(Landroid/view/inputmethod/EditorInfo;)V" />
+		<method name="onUpdateExtractingVisibility(Landroid/view/inputmethod/EditorInfo;)V" />
+		<method name="onUpdateSelection(IIIIII)V" />
+		<method name="onViewClicked(Z)V" since="14" deprecated="29" />
+		<method name="onWindowHidden()V" />
+		<method name="onWindowShown()V" />
+		<method name="requestHideSelf(I)V" />
+		<method name="requestShowSelf(I)V" since="28" />
+		<method name="sendDefaultEditorAction(Z)Z" />
+		<method name="sendDownUpKeyEvents(I)V" />
+		<method name="sendKeyChar(C)V" />
+		<method name="setBackDisposition(I)V" since="11" />
+		<method name="setCandidatesView(Landroid/view/View;)V" />
+		<method name="setCandidatesViewShown(Z)V" />
+		<method name="setExtractView(Landroid/view/View;)V" />
+		<method name="setExtractViewShown(Z)V" />
+		<method name="setInputView(Landroid/view/View;)V" />
+		<method name="shouldOfferSwitchingToNextInputMethod()Z" since="28" />
+		<method name="showStatusIcon(I)V" />
+		<method name="showWindow(Z)V" />
+		<method name="switchInputMethod(Ljava/lang/String;)V" />
+		<method name="switchInputMethod(Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V" since="28" />
+		<method name="switchToNextInputMethod(Z)Z" since="28" />
+		<method name="switchToPreviousInputMethod()Z" since="28" />
+		<method name="updateFullscreenMode()V" />
+		<method name="updateInputViewShown()V" />
+		<field name="BACK_DISPOSITION_ADJUST_NOTHING" since="28" />
+		<field name="BACK_DISPOSITION_DEFAULT" since="11" />
+		<field name="BACK_DISPOSITION_WILL_DISMISS" since="11" deprecated="28" />
+		<field name="BACK_DISPOSITION_WILL_NOT_DISMISS" since="11" deprecated="28" />
+	</class>
+	<class name="android/inputmethodservice/InputMethodService$InputMethodImpl" since="3">
+		<extends name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl" />
+		<method name="&lt;init&gt;(Landroid/inputmethodservice/InputMethodService;)V" />
+	</class>
+	<class name="android/inputmethodservice/InputMethodService$InputMethodSessionImpl" since="3">
+		<extends name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl" />
+		<method name="&lt;init&gt;(Landroid/inputmethodservice/InputMethodService;)V" />
+	</class>
+	<class name="android/inputmethodservice/InputMethodService$Insets" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="TOUCHABLE_INSETS_CONTENT" />
+		<field name="TOUCHABLE_INSETS_FRAME" />
+		<field name="TOUCHABLE_INSETS_REGION" since="11" />
+		<field name="TOUCHABLE_INSETS_VISIBLE" />
+		<field name="contentTopInsets" />
+		<field name="touchableInsets" />
+		<field name="touchableRegion" since="11" />
+		<field name="visibleTopInsets" />
+	</class>
+	<class name="android/inputmethodservice/Keyboard" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;II)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;IIII)V" since="11" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILjava/lang/CharSequence;II)V" deprecated="29" />
+		<method name="createKeyFromXml(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Key;" deprecated="29" />
+		<method name="createRowFromXml(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Row;" deprecated="29" />
+		<method name="getHeight()I" deprecated="29" />
+		<method name="getHorizontalGap()I" deprecated="29" />
+		<method name="getKeyHeight()I" deprecated="29" />
+		<method name="getKeyWidth()I" deprecated="29" />
+		<method name="getKeys()Ljava/util/List;" deprecated="29" />
+		<method name="getMinWidth()I" deprecated="29" />
+		<method name="getModifierKeys()Ljava/util/List;" deprecated="29" />
+		<method name="getNearestKeys(II)[I" deprecated="29" />
+		<method name="getShiftKeyIndex()I" deprecated="29" />
+		<method name="getVerticalGap()I" deprecated="29" />
+		<method name="isShifted()Z" deprecated="29" />
+		<method name="setHorizontalGap(I)V" deprecated="29" />
+		<method name="setKeyHeight(I)V" deprecated="29" />
+		<method name="setKeyWidth(I)V" deprecated="29" />
+		<method name="setShifted(Z)Z" deprecated="29" />
+		<method name="setVerticalGap(I)V" deprecated="29" />
+		<field name="EDGE_BOTTOM" deprecated="29" />
+		<field name="EDGE_LEFT" deprecated="29" />
+		<field name="EDGE_RIGHT" deprecated="29" />
+		<field name="EDGE_TOP" deprecated="29" />
+		<field name="KEYCODE_ALT" deprecated="29" />
+		<field name="KEYCODE_CANCEL" deprecated="29" />
+		<field name="KEYCODE_DELETE" deprecated="29" />
+		<field name="KEYCODE_DONE" deprecated="29" />
+		<field name="KEYCODE_MODE_CHANGE" deprecated="29" />
+		<field name="KEYCODE_SHIFT" deprecated="29" />
+	</class>
+	<class name="android/inputmethodservice/Keyboard$Key" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/inputmethodservice/Keyboard$Row;)V" deprecated="29" />
+		<method name="getCurrentDrawableState()[I" deprecated="29" />
+		<method name="isInside(II)Z" deprecated="29" />
+		<method name="onPressed()V" deprecated="29" />
+		<method name="onReleased(Z)V" deprecated="29" />
+		<method name="squaredDistanceFrom(II)I" deprecated="29" />
+		<field name="codes" deprecated="29" />
+		<field name="edgeFlags" deprecated="29" />
+		<field name="gap" deprecated="29" />
+		<field name="height" deprecated="29" />
+		<field name="icon" deprecated="29" />
+		<field name="iconPreview" deprecated="29" />
+		<field name="label" deprecated="29" />
+		<field name="modifier" deprecated="29" />
+		<field name="on" deprecated="29" />
+		<field name="popupCharacters" deprecated="29" />
+		<field name="popupResId" deprecated="29" />
+		<field name="pressed" deprecated="29" />
+		<field name="repeatable" deprecated="29" />
+		<field name="sticky" deprecated="29" />
+		<field name="text" deprecated="29" />
+		<field name="width" deprecated="29" />
+		<field name="x" deprecated="29" />
+		<field name="y" deprecated="29" />
+	</class>
+	<class name="android/inputmethodservice/Keyboard$Row" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard;Landroid/content/res/XmlResourceParser;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/inputmethodservice/Keyboard;)V" deprecated="29" />
+		<field name="defaultHeight" deprecated="29" />
+		<field name="defaultHorizontalGap" deprecated="29" />
+		<field name="defaultWidth" deprecated="29" />
+		<field name="mode" deprecated="29" />
+		<field name="rowEdgeFlags" deprecated="29" />
+		<field name="verticalGap" deprecated="29" />
+	</class>
+	<class name="android/inputmethodservice/KeyboardView" since="3" deprecated="29">
+		<extends name="android/view/View" />
+		<implements name="android/view/View$OnClickListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="closing()V" deprecated="29" />
+		<method name="getKeyboard()Landroid/inputmethodservice/Keyboard;" deprecated="29" />
+		<method name="getOnKeyboardActionListener()Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;" deprecated="29" />
+		<method name="handleBack()Z" deprecated="29" />
+		<method name="invalidateAllKeys()V" since="4" deprecated="29" />
+		<method name="invalidateKey(I)V" since="4" deprecated="29" />
+		<method name="isPreviewEnabled()Z" deprecated="29" />
+		<method name="isProximityCorrectionEnabled()Z" deprecated="29" />
+		<method name="isShifted()Z" deprecated="29" />
+		<method name="onLongPress(Landroid/inputmethodservice/Keyboard$Key;)Z" deprecated="29" />
+		<method name="setKeyboard(Landroid/inputmethodservice/Keyboard;)V" deprecated="29" />
+		<method name="setOnKeyboardActionListener(Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;)V" deprecated="29" />
+		<method name="setPopupOffset(II)V" deprecated="29" />
+		<method name="setPopupParent(Landroid/view/View;)V" deprecated="29" />
+		<method name="setPreviewEnabled(Z)V" deprecated="29" />
+		<method name="setProximityCorrectionEnabled(Z)V" deprecated="29" />
+		<method name="setShifted(Z)Z" deprecated="29" />
+		<method name="setVerticalCorrection(I)V" deprecated="29" />
+		<method name="swipeDown()V" deprecated="29" />
+		<method name="swipeLeft()V" deprecated="29" />
+		<method name="swipeRight()V" deprecated="29" />
+		<method name="swipeUp()V" deprecated="29" />
+	</class>
+	<class name="android/inputmethodservice/KeyboardView$OnKeyboardActionListener" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onKey(I[I)V" deprecated="29" />
+		<method name="onPress(I)V" deprecated="29" />
+		<method name="onRelease(I)V" deprecated="29" />
+		<method name="onText(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="swipeDown()V" deprecated="29" />
+		<method name="swipeLeft()V" deprecated="29" />
+		<method name="swipeRight()V" deprecated="29" />
+		<method name="swipeUp()V" deprecated="29" />
+	</class>
+	<class name="android/location/Address" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" />
+		<method name="clearLatitude()V" />
+		<method name="clearLongitude()V" />
+		<method name="getAddressLine(I)Ljava/lang/String;" />
+		<method name="getAdminArea()Ljava/lang/String;" />
+		<method name="getCountryCode()Ljava/lang/String;" />
+		<method name="getCountryName()Ljava/lang/String;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getFeatureName()Ljava/lang/String;" />
+		<method name="getLatitude()D" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getLocality()Ljava/lang/String;" />
+		<method name="getLongitude()D" />
+		<method name="getMaxAddressLineIndex()I" />
+		<method name="getPhone()Ljava/lang/String;" />
+		<method name="getPostalCode()Ljava/lang/String;" />
+		<method name="getPremises()Ljava/lang/String;" since="4" />
+		<method name="getSubAdminArea()Ljava/lang/String;" />
+		<method name="getSubLocality()Ljava/lang/String;" since="4" />
+		<method name="getSubThoroughfare()Ljava/lang/String;" since="4" />
+		<method name="getThoroughfare()Ljava/lang/String;" />
+		<method name="getUrl()Ljava/lang/String;" />
+		<method name="hasLatitude()Z" />
+		<method name="hasLongitude()Z" />
+		<method name="setAddressLine(ILjava/lang/String;)V" />
+		<method name="setAdminArea(Ljava/lang/String;)V" />
+		<method name="setCountryCode(Ljava/lang/String;)V" />
+		<method name="setCountryName(Ljava/lang/String;)V" />
+		<method name="setExtras(Landroid/os/Bundle;)V" />
+		<method name="setFeatureName(Ljava/lang/String;)V" />
+		<method name="setLatitude(D)V" />
+		<method name="setLocality(Ljava/lang/String;)V" />
+		<method name="setLongitude(D)V" />
+		<method name="setPhone(Ljava/lang/String;)V" />
+		<method name="setPostalCode(Ljava/lang/String;)V" />
+		<method name="setPremises(Ljava/lang/String;)V" since="4" />
+		<method name="setSubAdminArea(Ljava/lang/String;)V" />
+		<method name="setSubLocality(Ljava/lang/String;)V" since="4" />
+		<method name="setSubThoroughfare(Ljava/lang/String;)V" since="4" />
+		<method name="setThoroughfare(Ljava/lang/String;)V" />
+		<method name="setUrl(Ljava/lang/String;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/location/Criteria" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/location/Criteria;)V" />
+		<method name="getAccuracy()I" />
+		<method name="getBearingAccuracy()I" since="9" />
+		<method name="getHorizontalAccuracy()I" since="9" />
+		<method name="getPowerRequirement()I" />
+		<method name="getSpeedAccuracy()I" since="9" />
+		<method name="getVerticalAccuracy()I" since="9" />
+		<method name="isAltitudeRequired()Z" />
+		<method name="isBearingRequired()Z" />
+		<method name="isCostAllowed()Z" />
+		<method name="isSpeedRequired()Z" />
+		<method name="setAccuracy(I)V" />
+		<method name="setAltitudeRequired(Z)V" />
+		<method name="setBearingAccuracy(I)V" since="9" />
+		<method name="setBearingRequired(Z)V" />
+		<method name="setCostAllowed(Z)V" />
+		<method name="setHorizontalAccuracy(I)V" since="9" />
+		<method name="setPowerRequirement(I)V" />
+		<method name="setSpeedAccuracy(I)V" since="9" />
+		<method name="setSpeedRequired(Z)V" />
+		<method name="setVerticalAccuracy(I)V" since="9" />
+		<field name="ACCURACY_COARSE" />
+		<field name="ACCURACY_FINE" />
+		<field name="ACCURACY_HIGH" since="9" />
+		<field name="ACCURACY_LOW" since="9" />
+		<field name="ACCURACY_MEDIUM" since="9" />
+		<field name="CREATOR" />
+		<field name="NO_REQUIREMENT" />
+		<field name="POWER_HIGH" />
+		<field name="POWER_LOW" />
+		<field name="POWER_MEDIUM" />
+	</class>
+	<class name="android/location/Geocoder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/util/Locale;)V" />
+		<method name="getFromLocation(DDI)Ljava/util/List;" />
+		<method name="getFromLocationName(Ljava/lang/String;I)Ljava/util/List;" />
+		<method name="getFromLocationName(Ljava/lang/String;IDDDD)Ljava/util/List;" />
+		<method name="isPresent()Z" since="9" />
+	</class>
+	<class name="android/location/GnssAntennaInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCarrierFrequencyMHz()D" />
+		<method name="getPhaseCenterOffset()Landroid/location/GnssAntennaInfo$PhaseCenterOffset;" />
+		<method name="getPhaseCenterVariationCorrections()Landroid/location/GnssAntennaInfo$SphericalCorrections;" />
+		<method name="getSignalGainCorrections()Landroid/location/GnssAntennaInfo$SphericalCorrections;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/location/GnssAntennaInfo$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(DLandroid/location/GnssAntennaInfo$PhaseCenterOffset;)V" since="31" />
+		<method name="&lt;init&gt;(Landroid/location/GnssAntennaInfo;)V" since="31" />
+		<method name="build()Landroid/location/GnssAntennaInfo;" />
+		<method name="setCarrierFrequencyMHz(D)Landroid/location/GnssAntennaInfo$Builder;" />
+		<method name="setPhaseCenterOffset(Landroid/location/GnssAntennaInfo$PhaseCenterOffset;)Landroid/location/GnssAntennaInfo$Builder;" />
+		<method name="setPhaseCenterVariationCorrections(Landroid/location/GnssAntennaInfo$SphericalCorrections;)Landroid/location/GnssAntennaInfo$Builder;" />
+		<method name="setSignalGainCorrections(Landroid/location/GnssAntennaInfo$SphericalCorrections;)Landroid/location/GnssAntennaInfo$Builder;" />
+	</class>
+	<class name="android/location/GnssAntennaInfo$Listener" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onGnssAntennaInfoReceived(Ljava/util/List;)V" />
+	</class>
+	<class name="android/location/GnssAntennaInfo$PhaseCenterOffset" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(DDDDDD)V" />
+		<method name="getXOffsetMm()D" />
+		<method name="getXOffsetUncertaintyMm()D" />
+		<method name="getYOffsetMm()D" />
+		<method name="getYOffsetUncertaintyMm()D" />
+		<method name="getZOffsetMm()D" />
+		<method name="getZOffsetUncertaintyMm()D" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/location/GnssAntennaInfo$SphericalCorrections" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;([[D[[D)V" />
+		<method name="getCorrectionUncertaintiesArray()[[D" />
+		<method name="getCorrectionsArray()[[D" />
+		<method name="getDeltaPhi()D" />
+		<method name="getDeltaTheta()D" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/location/GnssCapabilities" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="31" />
+		<method name="hasAntennaInfo()Z" since="31" />
+		<method name="hasGnssAntennaInfo()Z" deprecated="31" />
+		<method name="hasMeasurements()Z" since="31" />
+		<method name="hasNavigationMessages()Z" since="31" />
+		<field name="CREATOR" since="31" />
+	</class>
+	<class name="android/location/GnssCapabilities$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/location/GnssCapabilities;)V" />
+		<method name="build()Landroid/location/GnssCapabilities;" />
+		<method name="setHasAntennaInfo(Z)Landroid/location/GnssCapabilities$Builder;" />
+		<method name="setHasMeasurements(Z)Landroid/location/GnssCapabilities$Builder;" />
+		<method name="setHasNavigationMessages(Z)Landroid/location/GnssCapabilities$Builder;" />
+	</class>
+	<class name="android/location/GnssClock" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBiasNanos()D" />
+		<method name="getBiasUncertaintyNanos()D" />
+		<method name="getDriftNanosPerSecond()D" />
+		<method name="getDriftUncertaintyNanosPerSecond()D" />
+		<method name="getElapsedRealtimeNanos()J" since="29" />
+		<method name="getElapsedRealtimeUncertaintyNanos()D" since="29" />
+		<method name="getFullBiasNanos()J" />
+		<method name="getHardwareClockDiscontinuityCount()I" />
+		<method name="getLeapSecond()I" />
+		<method name="getReferenceCarrierFrequencyHzForIsb()D" since="30" />
+		<method name="getReferenceCodeTypeForIsb()Ljava/lang/String;" since="30" />
+		<method name="getReferenceConstellationTypeForIsb()I" since="30" />
+		<method name="getTimeNanos()J" />
+		<method name="getTimeUncertaintyNanos()D" />
+		<method name="hasBiasNanos()Z" />
+		<method name="hasBiasUncertaintyNanos()Z" />
+		<method name="hasDriftNanosPerSecond()Z" />
+		<method name="hasDriftUncertaintyNanosPerSecond()Z" />
+		<method name="hasElapsedRealtimeNanos()Z" since="29" />
+		<method name="hasElapsedRealtimeUncertaintyNanos()Z" since="29" />
+		<method name="hasFullBiasNanos()Z" />
+		<method name="hasLeapSecond()Z" />
+		<method name="hasReferenceCarrierFrequencyHzForIsb()Z" since="30" />
+		<method name="hasReferenceCodeTypeForIsb()Z" since="30" />
+		<method name="hasReferenceConstellationTypeForIsb()Z" since="30" />
+		<method name="hasTimeUncertaintyNanos()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/location/GnssMeasurement" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAccumulatedDeltaRangeMeters()D" />
+		<method name="getAccumulatedDeltaRangeState()I" />
+		<method name="getAccumulatedDeltaRangeUncertaintyMeters()D" />
+		<method name="getAutomaticGainControlLevelDb()D" since="26" />
+		<method name="getBasebandCn0DbHz()D" since="30" />
+		<method name="getCarrierCycles()J" deprecated="28" />
+		<method name="getCarrierFrequencyHz()F" />
+		<method name="getCarrierPhase()D" deprecated="28" />
+		<method name="getCarrierPhaseUncertainty()D" deprecated="28" />
+		<method name="getCn0DbHz()D" />
+		<method name="getCodeType()Ljava/lang/String;" since="29" />
+		<method name="getConstellationType()I" />
+		<method name="getFullInterSignalBiasNanos()D" since="30" />
+		<method name="getFullInterSignalBiasUncertaintyNanos()D" since="30" />
+		<method name="getMultipathIndicator()I" />
+		<method name="getPseudorangeRateMetersPerSecond()D" />
+		<method name="getPseudorangeRateUncertaintyMetersPerSecond()D" />
+		<method name="getReceivedSvTimeNanos()J" />
+		<method name="getReceivedSvTimeUncertaintyNanos()J" />
+		<method name="getSatelliteInterSignalBiasNanos()D" since="30" />
+		<method name="getSatelliteInterSignalBiasUncertaintyNanos()D" since="30" />
+		<method name="getSnrInDb()D" />
+		<method name="getState()I" />
+		<method name="getSvid()I" />
+		<method name="getTimeOffsetNanos()D" />
+		<method name="hasAutomaticGainControlLevelDb()Z" since="26" />
+		<method name="hasBasebandCn0DbHz()Z" since="30" />
+		<method name="hasCarrierCycles()Z" deprecated="28" />
+		<method name="hasCarrierFrequencyHz()Z" />
+		<method name="hasCarrierPhase()Z" deprecated="28" />
+		<method name="hasCarrierPhaseUncertainty()Z" deprecated="28" />
+		<method name="hasCodeType()Z" since="29" />
+		<method name="hasFullInterSignalBiasNanos()Z" since="30" />
+		<method name="hasFullInterSignalBiasUncertaintyNanos()Z" since="30" />
+		<method name="hasSatelliteInterSignalBiasNanos()Z" since="30" />
+		<method name="hasSatelliteInterSignalBiasUncertaintyNanos()Z" since="30" />
+		<method name="hasSnrInDb()Z" />
+		<field name="ADR_STATE_CYCLE_SLIP" />
+		<field name="ADR_STATE_HALF_CYCLE_REPORTED" since="28" />
+		<field name="ADR_STATE_HALF_CYCLE_RESOLVED" since="28" />
+		<field name="ADR_STATE_RESET" />
+		<field name="ADR_STATE_UNKNOWN" />
+		<field name="ADR_STATE_VALID" />
+		<field name="CREATOR" />
+		<field name="MULTIPATH_INDICATOR_DETECTED" />
+		<field name="MULTIPATH_INDICATOR_NOT_DETECTED" />
+		<field name="MULTIPATH_INDICATOR_UNKNOWN" />
+		<field name="STATE_2ND_CODE_LOCK" since="29" />
+		<field name="STATE_BDS_D2_BIT_SYNC" />
+		<field name="STATE_BDS_D2_SUBFRAME_SYNC" />
+		<field name="STATE_BIT_SYNC" />
+		<field name="STATE_CODE_LOCK" />
+		<field name="STATE_GAL_E1BC_CODE_LOCK" />
+		<field name="STATE_GAL_E1B_PAGE_SYNC" />
+		<field name="STATE_GAL_E1C_2ND_CODE_LOCK" />
+		<field name="STATE_GLO_STRING_SYNC" />
+		<field name="STATE_GLO_TOD_DECODED" />
+		<field name="STATE_GLO_TOD_KNOWN" since="26" />
+		<field name="STATE_MSEC_AMBIGUOUS" />
+		<field name="STATE_SBAS_SYNC" />
+		<field name="STATE_SUBFRAME_SYNC" />
+		<field name="STATE_SYMBOL_SYNC" />
+		<field name="STATE_TOW_DECODED" />
+		<field name="STATE_TOW_KNOWN" since="26" />
+		<field name="STATE_UNKNOWN" />
+	</class>
+	<class name="android/location/GnssMeasurementRequest" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="isFullTracking()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/location/GnssMeasurementRequest$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/location/GnssMeasurementRequest;)V" />
+		<method name="build()Landroid/location/GnssMeasurementRequest;" />
+		<method name="setFullTracking(Z)Landroid/location/GnssMeasurementRequest$Builder;" />
+	</class>
+	<class name="android/location/GnssMeasurementsEvent" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getClock()Landroid/location/GnssClock;" />
+		<method name="getMeasurements()Ljava/util/Collection;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/location/GnssMeasurementsEvent$Callback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGnssMeasurementsReceived(Landroid/location/GnssMeasurementsEvent;)V" />
+		<method name="onStatusChanged(I)V" deprecated="31" />
+		<field name="STATUS_LOCATION_DISABLED" deprecated="31" />
+		<field name="STATUS_NOT_ALLOWED" since="28" deprecated="31" />
+		<field name="STATUS_NOT_SUPPORTED" deprecated="31" />
+		<field name="STATUS_READY" deprecated="31" />
+	</class>
+	<class name="android/location/GnssNavigationMessage" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getData()[B" />
+		<method name="getMessageId()I" />
+		<method name="getStatus()I" />
+		<method name="getSubmessageId()I" />
+		<method name="getSvid()I" />
+		<method name="getType()I" />
+		<field name="CREATOR" />
+		<field name="STATUS_PARITY_PASSED" />
+		<field name="STATUS_PARITY_REBUILT" />
+		<field name="STATUS_UNKNOWN" />
+		<field name="TYPE_BDS_CNAV1" since="30" />
+		<field name="TYPE_BDS_CNAV2" since="30" />
+		<field name="TYPE_BDS_D1" />
+		<field name="TYPE_BDS_D2" />
+		<field name="TYPE_GAL_F" />
+		<field name="TYPE_GAL_I" />
+		<field name="TYPE_GLO_L1CA" />
+		<field name="TYPE_GPS_CNAV2" />
+		<field name="TYPE_GPS_L1CA" />
+		<field name="TYPE_GPS_L2CNAV" />
+		<field name="TYPE_GPS_L5CNAV" />
+		<field name="TYPE_IRN_L5CA" since="30" />
+		<field name="TYPE_QZS_L1CA" since="30" />
+		<field name="TYPE_SBS" since="30" />
+		<field name="TYPE_UNKNOWN" />
+	</class>
+	<class name="android/location/GnssNavigationMessage$Callback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGnssNavigationMessageReceived(Landroid/location/GnssNavigationMessage;)V" />
+		<method name="onStatusChanged(I)V" deprecated="31" />
+		<field name="STATUS_LOCATION_DISABLED" deprecated="31" />
+		<field name="STATUS_NOT_SUPPORTED" deprecated="31" />
+		<field name="STATUS_READY" deprecated="31" />
+	</class>
+	<class name="android/location/GnssStatus" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="31" />
+		<method name="getAzimuthDegrees(I)F" />
+		<method name="getBasebandCn0DbHz(I)F" since="30" />
+		<method name="getCarrierFrequencyHz(I)F" since="26" />
+		<method name="getCn0DbHz(I)F" />
+		<method name="getConstellationType(I)I" />
+		<method name="getElevationDegrees(I)F" />
+		<method name="getSatelliteCount()I" />
+		<method name="getSvid(I)I" />
+		<method name="hasAlmanacData(I)Z" />
+		<method name="hasBasebandCn0DbHz(I)Z" since="30" />
+		<method name="hasCarrierFrequencyHz(I)Z" since="26" />
+		<method name="hasEphemerisData(I)Z" />
+		<method name="usedInFix(I)Z" />
+		<field name="CONSTELLATION_BEIDOU" />
+		<field name="CONSTELLATION_GALILEO" />
+		<field name="CONSTELLATION_GLONASS" />
+		<field name="CONSTELLATION_GPS" />
+		<field name="CONSTELLATION_IRNSS" since="29" />
+		<field name="CONSTELLATION_QZSS" />
+		<field name="CONSTELLATION_SBAS" />
+		<field name="CONSTELLATION_UNKNOWN" />
+		<field name="CREATOR" since="31" />
+	</class>
+	<class name="android/location/GnssStatus$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addSatellite(IIFFFZZZZFZF)Landroid/location/GnssStatus$Builder;" />
+		<method name="build()Landroid/location/GnssStatus;" />
+		<method name="clearSatellites()Landroid/location/GnssStatus$Builder;" />
+	</class>
+	<class name="android/location/GnssStatus$Callback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onFirstFix(I)V" />
+		<method name="onSatelliteStatusChanged(Landroid/location/GnssStatus;)V" />
+		<method name="onStarted()V" />
+		<method name="onStopped()V" />
+	</class>
+	<class name="android/location/GpsSatellite" since="3" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="getAzimuth()F" deprecated="29" />
+		<method name="getElevation()F" deprecated="29" />
+		<method name="getPrn()I" deprecated="29" />
+		<method name="getSnr()F" deprecated="29" />
+		<method name="hasAlmanac()Z" deprecated="29" />
+		<method name="hasEphemeris()Z" deprecated="29" />
+		<method name="usedInFix()Z" deprecated="29" />
+	</class>
+	<class name="android/location/GpsStatus" since="3" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="create(Landroid/location/GnssStatus;I)Landroid/location/GpsStatus;" since="30" deprecated="30" />
+		<method name="getMaxSatellites()I" deprecated="29" />
+		<method name="getSatellites()Ljava/lang/Iterable;" deprecated="29" />
+		<method name="getTimeToFirstFix()I" deprecated="29" />
+		<field name="GPS_EVENT_FIRST_FIX" deprecated="29" />
+		<field name="GPS_EVENT_SATELLITE_STATUS" deprecated="29" />
+		<field name="GPS_EVENT_STARTED" deprecated="29" />
+		<field name="GPS_EVENT_STOPPED" deprecated="29" />
+	</class>
+	<class name="android/location/GpsStatus$Listener" since="3" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="onGpsStatusChanged(I)V" deprecated="29" />
+	</class>
+	<class name="android/location/GpsStatus$NmeaListener" since="5" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="onNmeaReceived(JLjava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="android/location/Location" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/location/Location;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="bearingTo(Landroid/location/Location;)F" />
+		<method name="convert(DI)Ljava/lang/String;" />
+		<method name="convert(Ljava/lang/String;)D" />
+		<method name="distanceBetween(DDDD[F)V" />
+		<method name="distanceTo(Landroid/location/Location;)F" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="3" />
+		<method name="getAccuracy()F" />
+		<method name="getAltitude()D" />
+		<method name="getBearing()F" />
+		<method name="getBearingAccuracyDegrees()F" since="26" />
+		<method name="getElapsedRealtimeNanos()J" since="17" />
+		<method name="getElapsedRealtimeUncertaintyNanos()D" since="29" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getLatitude()D" />
+		<method name="getLongitude()D" />
+		<method name="getProvider()Ljava/lang/String;" />
+		<method name="getSpeed()F" />
+		<method name="getSpeedAccuracyMetersPerSecond()F" since="26" />
+		<method name="getTime()J" />
+		<method name="getVerticalAccuracyMeters()F" since="26" />
+		<method name="hasAccuracy()Z" />
+		<method name="hasAltitude()Z" />
+		<method name="hasBearing()Z" />
+		<method name="hasBearingAccuracy()Z" since="26" />
+		<method name="hasElapsedRealtimeUncertaintyNanos()Z" since="29" />
+		<method name="hasSpeed()Z" />
+		<method name="hasSpeedAccuracy()Z" since="26" />
+		<method name="hasVerticalAccuracy()Z" since="26" />
+		<method name="isFromMockProvider()Z" since="18" deprecated="31" />
+		<method name="isMock()Z" since="31" />
+		<method name="removeAccuracy()V" deprecated="26" />
+		<method name="removeAltitude()V" deprecated="26" />
+		<method name="removeBearing()V" deprecated="26" />
+		<method name="removeSpeed()V" deprecated="26" />
+		<method name="reset()V" />
+		<method name="set(Landroid/location/Location;)V" />
+		<method name="setAccuracy(F)V" />
+		<method name="setAltitude(D)V" />
+		<method name="setBearing(F)V" />
+		<method name="setBearingAccuracyDegrees(F)V" since="26" />
+		<method name="setElapsedRealtimeNanos(J)V" since="17" />
+		<method name="setElapsedRealtimeUncertaintyNanos(D)V" since="29" />
+		<method name="setExtras(Landroid/os/Bundle;)V" />
+		<method name="setLatitude(D)V" />
+		<method name="setLongitude(D)V" />
+		<method name="setMock(Z)V" since="31" />
+		<method name="setProvider(Ljava/lang/String;)V" />
+		<method name="setSpeed(F)V" />
+		<method name="setSpeedAccuracyMetersPerSecond(F)V" since="26" />
+		<method name="setTime(J)V" />
+		<method name="setVerticalAccuracyMeters(F)V" since="26" />
+		<field name="CREATOR" />
+		<field name="FORMAT_DEGREES" />
+		<field name="FORMAT_MINUTES" />
+		<field name="FORMAT_SECONDS" />
+	</class>
+	<class name="android/location/LocationListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onFlushComplete(I)V" since="31" />
+		<method name="onLocationChanged(Landroid/location/Location;)V" />
+		<method name="onLocationChanged(Ljava/util/List;)V" since="31" />
+		<method name="onProviderDisabled(Ljava/lang/String;)V" />
+		<method name="onProviderEnabled(Ljava/lang/String;)V" />
+		<method name="onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V" deprecated="29" />
+	</class>
+	<class name="android/location/LocationManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addGpsStatusListener(Landroid/location/GpsStatus$Listener;)Z" since="3" deprecated="24" />
+		<method name="addNmeaListener(Landroid/location/GpsStatus$NmeaListener;)Z" since="5" deprecated="24" />
+		<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;)Z" since="24" deprecated="30" />
+		<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;Landroid/os/Handler;)Z" since="24" />
+		<method name="addNmeaListener(Ljava/util/concurrent/Executor;Landroid/location/OnNmeaMessageListener;)Z" since="30" />
+		<method name="addProximityAlert(DDFJLandroid/app/PendingIntent;)V" />
+		<method name="addTestProvider(Ljava/lang/String;Landroid/location/provider/ProviderProperties;)V" since="31" />
+		<method name="addTestProvider(Ljava/lang/String;Landroid/location/provider/ProviderProperties;Ljava/util/Set;)V" since="31" />
+		<method name="addTestProvider(Ljava/lang/String;ZZZZZZZII)V" since="3" />
+		<method name="clearTestProviderEnabled(Ljava/lang/String;)V" since="3" deprecated="29" />
+		<method name="clearTestProviderLocation(Ljava/lang/String;)V" since="3" deprecated="29" />
+		<method name="clearTestProviderStatus(Ljava/lang/String;)V" since="3" deprecated="29" />
+		<method name="getAllProviders()Ljava/util/List;" />
+		<method name="getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;" />
+		<method name="getCurrentLocation(Ljava/lang/String;Landroid/location/LocationRequest;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="getCurrentLocation(Ljava/lang/String;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="30" />
+		<method name="getGnssAntennaInfos()Ljava/util/List;" since="31" />
+		<method name="getGnssCapabilities()Landroid/location/GnssCapabilities;" since="30" />
+		<method name="getGnssHardwareModelName()Ljava/lang/String;" since="28" />
+		<method name="getGnssYearOfHardware()I" since="28" />
+		<method name="getGpsStatus(Landroid/location/GpsStatus;)Landroid/location/GpsStatus;" since="3" deprecated="24" />
+		<method name="getLastKnownLocation(Ljava/lang/String;)Landroid/location/Location;" />
+		<method name="getProvider(Ljava/lang/String;)Landroid/location/LocationProvider;" deprecated="31" />
+		<method name="getProviderProperties(Ljava/lang/String;)Landroid/location/provider/ProviderProperties;" since="31" />
+		<method name="getProviders(Landroid/location/Criteria;Z)Ljava/util/List;" />
+		<method name="getProviders(Z)Ljava/util/List;" />
+		<method name="hasProvider(Ljava/lang/String;)Z" since="31" />
+		<method name="isLocationEnabled()Z" since="28" />
+		<method name="isProviderEnabled(Ljava/lang/String;)Z" />
+		<method name="registerAntennaInfoListener(Ljava/util/concurrent/Executor;Landroid/location/GnssAntennaInfo$Listener;)Z" since="30" />
+		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementRequest;Ljava/util/concurrent/Executor;Landroid/location/GnssMeasurementsEvent$Callback;)Z" since="31" />
+		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)Z" since="24" deprecated="30" />
+		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;Landroid/os/Handler;)Z" since="24" />
+		<method name="registerGnssMeasurementsCallback(Ljava/util/concurrent/Executor;Landroid/location/GnssMeasurementsEvent$Callback;)Z" since="30" />
+		<method name="registerGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;)Z" since="24" deprecated="30" />
+		<method name="registerGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;Landroid/os/Handler;)Z" since="24" />
+		<method name="registerGnssNavigationMessageCallback(Ljava/util/concurrent/Executor;Landroid/location/GnssNavigationMessage$Callback;)Z" since="30" />
+		<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;)Z" since="24" deprecated="30" />
+		<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;Landroid/os/Handler;)Z" since="24" />
+		<method name="registerGnssStatusCallback(Ljava/util/concurrent/Executor;Landroid/location/GnssStatus$Callback;)Z" since="30" />
+		<method name="removeGpsStatusListener(Landroid/location/GpsStatus$Listener;)V" since="3" deprecated="24" />
+		<method name="removeNmeaListener(Landroid/location/GpsStatus$NmeaListener;)V" since="5" deprecated="24" />
+		<method name="removeNmeaListener(Landroid/location/OnNmeaMessageListener;)V" since="24" />
+		<method name="removeProximityAlert(Landroid/app/PendingIntent;)V" />
+		<method name="removeTestProvider(Ljava/lang/String;)V" since="3" />
+		<method name="removeUpdates(Landroid/app/PendingIntent;)V" since="3" />
+		<method name="removeUpdates(Landroid/location/LocationListener;)V" />
+		<method name="requestFlush(Ljava/lang/String;Landroid/app/PendingIntent;I)V" since="31" />
+		<method name="requestFlush(Ljava/lang/String;Landroid/location/LocationListener;I)V" since="31" />
+		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Landroid/app/PendingIntent;)V" since="9" deprecated="31" />
+		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9" deprecated="31" />
+		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Ljava/util/concurrent/Executor;Landroid/location/LocationListener;)V" since="30" deprecated="31" />
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/app/PendingIntent;)V" since="3" />
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V" />
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;Landroid/os/Looper;)V" />
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLjava/util/concurrent/Executor;Landroid/location/LocationListener;)V" since="30" />
+		<method name="requestLocationUpdates(Ljava/lang/String;Landroid/location/LocationRequest;Landroid/app/PendingIntent;)V" since="31" />
+		<method name="requestLocationUpdates(Ljava/lang/String;Landroid/location/LocationRequest;Ljava/util/concurrent/Executor;Landroid/location/LocationListener;)V" since="31" />
+		<method name="requestSingleUpdate(Landroid/location/Criteria;Landroid/app/PendingIntent;)V" since="9" deprecated="30" />
+		<method name="requestSingleUpdate(Landroid/location/Criteria;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9" deprecated="30" />
+		<method name="requestSingleUpdate(Ljava/lang/String;Landroid/app/PendingIntent;)V" since="9" deprecated="30" />
+		<method name="requestSingleUpdate(Ljava/lang/String;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9" deprecated="30" />
+		<method name="sendExtraCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Z" since="3" />
+		<method name="setTestProviderEnabled(Ljava/lang/String;Z)V" since="3" />
+		<method name="setTestProviderLocation(Ljava/lang/String;Landroid/location/Location;)V" since="3" />
+		<method name="setTestProviderStatus(Ljava/lang/String;ILandroid/os/Bundle;J)V" since="3" deprecated="29" />
+		<method name="unregisterAntennaInfoListener(Landroid/location/GnssAntennaInfo$Listener;)V" since="30" />
+		<method name="unregisterGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)V" since="24" />
+		<method name="unregisterGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;)V" since="24" />
+		<method name="unregisterGnssStatusCallback(Landroid/location/GnssStatus$Callback;)V" since="24" />
+		<field name="ACTION_GNSS_CAPABILITIES_CHANGED" since="31" />
+		<field name="EXTRA_GNSS_CAPABILITIES" since="31" />
+		<field name="EXTRA_LOCATION_ENABLED" since="30" />
+		<field name="EXTRA_PROVIDER_ENABLED" since="30" />
+		<field name="EXTRA_PROVIDER_NAME" since="29" />
+		<field name="FUSED_PROVIDER" since="31" />
+		<field name="GPS_PROVIDER" />
+		<field name="KEY_FLUSH_COMPLETE" since="31" />
+		<field name="KEY_LOCATIONS" since="31" />
+		<field name="KEY_LOCATION_CHANGED" since="3" />
+		<field name="KEY_PROVIDER_ENABLED" since="3" />
+		<field name="KEY_PROXIMITY_ENTERING" />
+		<field name="KEY_STATUS_CHANGED" since="3" deprecated="29" />
+		<field name="MODE_CHANGED_ACTION" since="19" />
+		<field name="NETWORK_PROVIDER" />
+		<field name="PASSIVE_PROVIDER" since="8" />
+		<field name="PROVIDERS_CHANGED_ACTION" since="9" />
+	</class>
+	<class name="android/location/LocationProvider" since="1" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="getAccuracy()I" deprecated="31" />
+		<method name="getName()Ljava/lang/String;" deprecated="31" />
+		<method name="getPowerRequirement()I" deprecated="31" />
+		<method name="hasMonetaryCost()Z" deprecated="31" />
+		<method name="meetsCriteria(Landroid/location/Criteria;)Z" deprecated="31" />
+		<method name="requiresCell()Z" deprecated="31" />
+		<method name="requiresNetwork()Z" deprecated="31" />
+		<method name="requiresSatellite()Z" deprecated="31" />
+		<method name="supportsAltitude()Z" deprecated="31" />
+		<method name="supportsBearing()Z" deprecated="31" />
+		<method name="supportsSpeed()Z" deprecated="31" />
+		<field name="AVAILABLE" deprecated="29" />
+		<field name="OUT_OF_SERVICE" deprecated="29" />
+		<field name="TEMPORARILY_UNAVAILABLE" deprecated="29" />
+	</class>
+	<class name="android/location/LocationRequest" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDurationMillis()J" />
+		<method name="getIntervalMillis()J" />
+		<method name="getMaxUpdateDelayMillis()J" />
+		<method name="getMaxUpdates()I" />
+		<method name="getMinUpdateDistanceMeters()F" />
+		<method name="getMinUpdateIntervalMillis()J" />
+		<method name="getQuality()I" />
+		<field name="CREATOR" />
+		<field name="PASSIVE_INTERVAL" />
+		<field name="QUALITY_BALANCED_POWER_ACCURACY" />
+		<field name="QUALITY_HIGH_ACCURACY" />
+		<field name="QUALITY_LOW_POWER" />
+	</class>
+	<class name="android/location/LocationRequest$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(Landroid/location/LocationRequest;)V" />
+		<method name="build()Landroid/location/LocationRequest;" />
+		<method name="clearMinUpdateIntervalMillis()Landroid/location/LocationRequest$Builder;" />
+		<method name="setDurationMillis(J)Landroid/location/LocationRequest$Builder;" />
+		<method name="setIntervalMillis(J)Landroid/location/LocationRequest$Builder;" />
+		<method name="setMaxUpdateDelayMillis(J)Landroid/location/LocationRequest$Builder;" />
+		<method name="setMaxUpdates(I)Landroid/location/LocationRequest$Builder;" />
+		<method name="setMinUpdateDistanceMeters(F)Landroid/location/LocationRequest$Builder;" />
+		<method name="setMinUpdateIntervalMillis(J)Landroid/location/LocationRequest$Builder;" />
+		<method name="setQuality(I)Landroid/location/LocationRequest$Builder;" />
+	</class>
+	<class name="android/location/OnNmeaMessageListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onNmeaMessage(Ljava/lang/String;J)V" />
+	</class>
+	<class name="android/location/SettingInjectorService" since="19">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="onGetEnabled()Z" />
+		<method name="onGetSummary()Ljava/lang/String;" deprecated="21" />
+		<method name="refreshSettings(Landroid/content/Context;)V" since="29" />
+		<field name="ACTION_INJECTED_SETTING_CHANGED" />
+		<field name="ACTION_SERVICE_INTENT" />
+		<field name="ATTRIBUTES_NAME" />
+		<field name="META_DATA_NAME" />
+	</class>
+	<class name="android/location/provider/ProviderProperties" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAccuracy()I" />
+		<method name="getPowerUsage()I" />
+		<method name="hasAltitudeSupport()Z" />
+		<method name="hasBearingSupport()Z" />
+		<method name="hasCellRequirement()Z" />
+		<method name="hasMonetaryCost()Z" />
+		<method name="hasNetworkRequirement()Z" />
+		<method name="hasSatelliteRequirement()Z" />
+		<method name="hasSpeedSupport()Z" />
+		<field name="ACCURACY_COARSE" />
+		<field name="ACCURACY_FINE" />
+		<field name="CREATOR" />
+		<field name="POWER_USAGE_HIGH" />
+		<field name="POWER_USAGE_LOW" />
+		<field name="POWER_USAGE_MEDIUM" />
+	</class>
+	<class name="android/location/provider/ProviderProperties$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/location/provider/ProviderProperties;)V" />
+		<method name="build()Landroid/location/provider/ProviderProperties;" />
+		<method name="setAccuracy(I)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setHasAltitudeSupport(Z)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setHasBearingSupport(Z)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setHasCellRequirement(Z)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setHasMonetaryCost(Z)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setHasNetworkRequirement(Z)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setHasSatelliteRequirement(Z)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setHasSpeedSupport(Z)Landroid/location/provider/ProviderProperties$Builder;" />
+		<method name="setPowerUsage(I)Landroid/location/provider/ProviderProperties$Builder;" />
+	</class>
+	<class name="android/media/AsyncPlayer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="play(Landroid/content/Context;Landroid/net/Uri;ZI)V" deprecated="23" />
+		<method name="play(Landroid/content/Context;Landroid/net/Uri;ZLandroid/media/AudioAttributes;)V" since="23" />
+		<method name="stop()V" />
+	</class>
+	<class name="android/media/AudioAttributes" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="areHapticChannelsMuted()Z" since="29" />
+		<method name="getAllowedCapturePolicy()I" since="29" />
+		<method name="getContentType()I" />
+		<method name="getFlags()I" />
+		<method name="getSpatializationBehavior()I" since="33" />
+		<method name="getUsage()I" />
+		<method name="getVolumeControlStream()I" since="26" />
+		<method name="isContentSpatialized()Z" since="33" />
+		<field name="ALLOW_CAPTURE_BY_ALL" since="29" />
+		<field name="ALLOW_CAPTURE_BY_NONE" since="29" />
+		<field name="ALLOW_CAPTURE_BY_SYSTEM" since="29" />
+		<field name="CONTENT_TYPE_MOVIE" />
+		<field name="CONTENT_TYPE_MUSIC" />
+		<field name="CONTENT_TYPE_SONIFICATION" />
+		<field name="CONTENT_TYPE_SPEECH" />
+		<field name="CONTENT_TYPE_UNKNOWN" />
+		<field name="CREATOR" />
+		<field name="FLAG_AUDIBILITY_ENFORCED" />
+		<field name="FLAG_HW_AV_SYNC" />
+		<field name="FLAG_LOW_LATENCY" since="24" deprecated="26" />
+		<field name="SPATIALIZATION_BEHAVIOR_AUTO" since="33" />
+		<field name="SPATIALIZATION_BEHAVIOR_NEVER" since="33" />
+		<field name="USAGE_ALARM" />
+		<field name="USAGE_ASSISTANCE_ACCESSIBILITY" />
+		<field name="USAGE_ASSISTANCE_NAVIGATION_GUIDANCE" />
+		<field name="USAGE_ASSISTANCE_SONIFICATION" />
+		<field name="USAGE_ASSISTANT" since="26" />
+		<field name="USAGE_GAME" />
+		<field name="USAGE_MEDIA" />
+		<field name="USAGE_NOTIFICATION" />
+		<field name="USAGE_NOTIFICATION_COMMUNICATION_DELAYED" />
+		<field name="USAGE_NOTIFICATION_COMMUNICATION_INSTANT" />
+		<field name="USAGE_NOTIFICATION_COMMUNICATION_REQUEST" />
+		<field name="USAGE_NOTIFICATION_EVENT" />
+		<field name="USAGE_NOTIFICATION_RINGTONE" />
+		<field name="USAGE_UNKNOWN" />
+		<field name="USAGE_VOICE_COMMUNICATION" />
+		<field name="USAGE_VOICE_COMMUNICATION_SIGNALLING" />
+	</class>
+	<class name="android/media/AudioAttributes$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/media/AudioAttributes;)V" />
+		<method name="build()Landroid/media/AudioAttributes;" />
+		<method name="setAllowedCapturePolicy(I)Landroid/media/AudioAttributes$Builder;" since="29" />
+		<method name="setContentType(I)Landroid/media/AudioAttributes$Builder;" />
+		<method name="setFlags(I)Landroid/media/AudioAttributes$Builder;" />
+		<method name="setHapticChannelsMuted(Z)Landroid/media/AudioAttributes$Builder;" since="29" />
+		<method name="setIsContentSpatialized(Z)Landroid/media/AudioAttributes$Builder;" since="33" />
+		<method name="setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;" />
+		<method name="setSpatializationBehavior(I)Landroid/media/AudioAttributes$Builder;" since="33" />
+		<method name="setUsage(I)Landroid/media/AudioAttributes$Builder;" />
+	</class>
+	<class name="android/media/AudioDescriptor" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getDescriptor()[B" />
+		<method name="getEncapsulationType()I" />
+		<method name="getStandard()I" />
+		<field name="STANDARD_EDID" />
+		<field name="STANDARD_NONE" />
+	</class>
+	<class name="android/media/AudioDeviceCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAudioDevicesAdded([Landroid/media/AudioDeviceInfo;)V" />
+		<method name="onAudioDevicesRemoved([Landroid/media/AudioDeviceInfo;)V" />
+	</class>
+	<class name="android/media/AudioDeviceInfo" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getAddress()Ljava/lang/String;" since="28" />
+		<method name="getAudioDescriptors()Ljava/util/List;" since="31" />
+		<method name="getAudioProfiles()Ljava/util/List;" since="31" />
+		<method name="getChannelCounts()[I" />
+		<method name="getChannelIndexMasks()[I" />
+		<method name="getChannelMasks()[I" />
+		<method name="getEncapsulationMetadataTypes()[I" since="30" />
+		<method name="getEncapsulationModes()[I" since="30" />
+		<method name="getEncodings()[I" />
+		<method name="getId()I" />
+		<method name="getProductName()Ljava/lang/CharSequence;" />
+		<method name="getSampleRates()[I" />
+		<method name="getType()I" />
+		<method name="isSink()Z" />
+		<method name="isSource()Z" />
+		<field name="TYPE_AUX_LINE" />
+		<field name="TYPE_BLE_HEADSET" since="31" />
+		<field name="TYPE_BLE_SPEAKER" since="31" />
+		<field name="TYPE_BLUETOOTH_A2DP" />
+		<field name="TYPE_BLUETOOTH_SCO" />
+		<field name="TYPE_BUILTIN_EARPIECE" />
+		<field name="TYPE_BUILTIN_MIC" />
+		<field name="TYPE_BUILTIN_SPEAKER" />
+		<field name="TYPE_BUILTIN_SPEAKER_SAFE" since="30" />
+		<field name="TYPE_BUS" since="24" />
+		<field name="TYPE_DOCK" />
+		<field name="TYPE_FM" />
+		<field name="TYPE_FM_TUNER" />
+		<field name="TYPE_HDMI" />
+		<field name="TYPE_HDMI_ARC" />
+		<field name="TYPE_HDMI_EARC" since="31" />
+		<field name="TYPE_HEARING_AID" since="28" />
+		<field name="TYPE_IP" />
+		<field name="TYPE_LINE_ANALOG" />
+		<field name="TYPE_LINE_DIGITAL" />
+		<field name="TYPE_REMOTE_SUBMIX" since="31" />
+		<field name="TYPE_TELEPHONY" />
+		<field name="TYPE_TV_TUNER" />
+		<field name="TYPE_UNKNOWN" />
+		<field name="TYPE_USB_ACCESSORY" />
+		<field name="TYPE_USB_DEVICE" />
+		<field name="TYPE_USB_HEADSET" since="26" />
+		<field name="TYPE_WIRED_HEADPHONES" />
+		<field name="TYPE_WIRED_HEADSET" />
+	</class>
+	<class name="android/media/AudioFocusRequest" since="26">
+		<extends name="java/lang/Object" />
+		<method name="acceptsDelayedFocusGain()Z" />
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" />
+		<method name="getFocusGain()I" />
+		<method name="willPauseWhenDucked()Z" />
+	</class>
+	<class name="android/media/AudioFocusRequest$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/media/AudioFocusRequest;)V" />
+		<method name="build()Landroid/media/AudioFocusRequest;" />
+		<method name="setAcceptsDelayedFocusGain(Z)Landroid/media/AudioFocusRequest$Builder;" />
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioFocusRequest$Builder;" />
+		<method name="setFocusGain(I)Landroid/media/AudioFocusRequest$Builder;" />
+		<method name="setForceDucking(Z)Landroid/media/AudioFocusRequest$Builder;" since="28" />
+		<method name="setOnAudioFocusChangeListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;)Landroid/media/AudioFocusRequest$Builder;" />
+		<method name="setOnAudioFocusChangeListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;)Landroid/media/AudioFocusRequest$Builder;" />
+		<method name="setWillPauseWhenDucked(Z)Landroid/media/AudioFocusRequest$Builder;" />
+	</class>
+	<class name="android/media/AudioFormat" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="24" />
+		<method name="&lt;init&gt;()V" removed="21" />
+		<method name="getChannelCount()I" since="23" />
+		<method name="getChannelIndexMask()I" since="23" />
+		<method name="getChannelMask()I" since="21" />
+		<method name="getEncoding()I" since="21" />
+		<method name="getFrameSizeInBytes()I" since="29" />
+		<method name="getSampleRate()I" since="21" />
+		<field name="CHANNEL_CONFIGURATION_DEFAULT" deprecated="15" />
+		<field name="CHANNEL_CONFIGURATION_INVALID" deprecated="15" />
+		<field name="CHANNEL_CONFIGURATION_MONO" deprecated="15" />
+		<field name="CHANNEL_CONFIGURATION_STEREO" deprecated="15" />
+		<field name="CHANNEL_INVALID" since="5" />
+		<field name="CHANNEL_IN_BACK" since="5" />
+		<field name="CHANNEL_IN_BACK_PROCESSED" since="5" />
+		<field name="CHANNEL_IN_DEFAULT" since="5" />
+		<field name="CHANNEL_IN_FRONT" since="5" />
+		<field name="CHANNEL_IN_FRONT_PROCESSED" since="5" />
+		<field name="CHANNEL_IN_LEFT" since="5" />
+		<field name="CHANNEL_IN_LEFT_PROCESSED" since="5" />
+		<field name="CHANNEL_IN_MONO" since="5" />
+		<field name="CHANNEL_IN_PRESSURE" since="5" />
+		<field name="CHANNEL_IN_RIGHT" since="5" />
+		<field name="CHANNEL_IN_RIGHT_PROCESSED" since="5" />
+		<field name="CHANNEL_IN_STEREO" since="5" />
+		<field name="CHANNEL_IN_VOICE_DNLINK" since="5" />
+		<field name="CHANNEL_IN_VOICE_UPLINK" since="5" />
+		<field name="CHANNEL_IN_X_AXIS" since="5" />
+		<field name="CHANNEL_IN_Y_AXIS" since="5" />
+		<field name="CHANNEL_IN_Z_AXIS" since="5" />
+		<field name="CHANNEL_OUT_5POINT1" since="5" />
+		<field name="CHANNEL_OUT_5POINT1POINT2" since="33" />
+		<field name="CHANNEL_OUT_5POINT1POINT4" since="33" />
+		<field name="CHANNEL_OUT_7POINT1" since="5" deprecated="23" />
+		<field name="CHANNEL_OUT_7POINT1POINT2" since="33" />
+		<field name="CHANNEL_OUT_7POINT1POINT4" since="33" />
+		<field name="CHANNEL_OUT_7POINT1_SURROUND" since="23" />
+		<field name="CHANNEL_OUT_9POINT1POINT4" since="33" />
+		<field name="CHANNEL_OUT_9POINT1POINT6" since="33" />
+		<field name="CHANNEL_OUT_BACK_CENTER" since="5" />
+		<field name="CHANNEL_OUT_BACK_LEFT" since="5" />
+		<field name="CHANNEL_OUT_BACK_RIGHT" since="5" />
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_CENTER" since="33" />
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_LEFT" since="33" />
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_RIGHT" since="33" />
+		<field name="CHANNEL_OUT_DEFAULT" since="5" />
+		<field name="CHANNEL_OUT_FRONT_CENTER" since="5" />
+		<field name="CHANNEL_OUT_FRONT_LEFT" since="5" />
+		<field name="CHANNEL_OUT_FRONT_LEFT_OF_CENTER" since="5" />
+		<field name="CHANNEL_OUT_FRONT_RIGHT" since="5" />
+		<field name="CHANNEL_OUT_FRONT_RIGHT_OF_CENTER" since="5" />
+		<field name="CHANNEL_OUT_FRONT_WIDE_LEFT" since="33" />
+		<field name="CHANNEL_OUT_FRONT_WIDE_RIGHT" since="33" />
+		<field name="CHANNEL_OUT_LOW_FREQUENCY" since="5" />
+		<field name="CHANNEL_OUT_LOW_FREQUENCY_2" since="33" />
+		<field name="CHANNEL_OUT_MONO" since="5" />
+		<field name="CHANNEL_OUT_QUAD" since="5" />
+		<field name="CHANNEL_OUT_SIDE_LEFT" since="21" />
+		<field name="CHANNEL_OUT_SIDE_RIGHT" since="21" />
+		<field name="CHANNEL_OUT_STEREO" since="5" />
+		<field name="CHANNEL_OUT_SURROUND" since="5" />
+		<field name="CHANNEL_OUT_TOP_BACK_CENTER" since="33" />
+		<field name="CHANNEL_OUT_TOP_BACK_LEFT" since="33" />
+		<field name="CHANNEL_OUT_TOP_BACK_RIGHT" since="33" />
+		<field name="CHANNEL_OUT_TOP_CENTER" since="33" />
+		<field name="CHANNEL_OUT_TOP_FRONT_CENTER" since="33" />
+		<field name="CHANNEL_OUT_TOP_FRONT_LEFT" since="33" />
+		<field name="CHANNEL_OUT_TOP_FRONT_RIGHT" since="33" />
+		<field name="CHANNEL_OUT_TOP_SIDE_LEFT" since="33" />
+		<field name="CHANNEL_OUT_TOP_SIDE_RIGHT" since="33" />
+		<field name="CREATOR" since="24" />
+		<field name="ENCODING_AAC_ELD" since="28" />
+		<field name="ENCODING_AAC_HE_V1" since="28" />
+		<field name="ENCODING_AAC_HE_V2" since="28" />
+		<field name="ENCODING_AAC_LC" since="28" />
+		<field name="ENCODING_AAC_XHE" since="28" />
+		<field name="ENCODING_AC3" since="21" />
+		<field name="ENCODING_AC4" since="28" />
+		<field name="ENCODING_DEFAULT" />
+		<field name="ENCODING_DOLBY_MAT" since="29" />
+		<field name="ENCODING_DOLBY_TRUEHD" since="25" />
+		<field name="ENCODING_DRA" since="31" />
+		<field name="ENCODING_DTS" since="23" />
+		<field name="ENCODING_DTS_HD" since="23" />
+		<field name="ENCODING_DTS_UHD" since="31" />
+		<field name="ENCODING_E_AC3" since="21" />
+		<field name="ENCODING_E_AC3_JOC" since="28" />
+		<field name="ENCODING_IEC61937" since="24" />
+		<field name="ENCODING_INVALID" />
+		<field name="ENCODING_MP3" since="28" />
+		<field name="ENCODING_MPEGH_BL_L3" since="31" />
+		<field name="ENCODING_MPEGH_BL_L4" since="31" />
+		<field name="ENCODING_MPEGH_LC_L3" since="31" />
+		<field name="ENCODING_MPEGH_LC_L4" since="31" />
+		<field name="ENCODING_OPUS" since="30" />
+		<field name="ENCODING_PCM_16BIT" />
+		<field name="ENCODING_PCM_24BIT_PACKED" since="31" />
+		<field name="ENCODING_PCM_32BIT" since="31" />
+		<field name="ENCODING_PCM_8BIT" />
+		<field name="ENCODING_PCM_FLOAT" since="21" />
+		<field name="SAMPLE_RATE_UNSPECIFIED" since="24" />
+	</class>
+	<class name="android/media/AudioFormat$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/media/AudioFormat;)V" />
+		<method name="build()Landroid/media/AudioFormat;" />
+		<method name="setChannelIndexMask(I)Landroid/media/AudioFormat$Builder;" since="23" />
+		<method name="setChannelMask(I)Landroid/media/AudioFormat$Builder;" />
+		<method name="setEncoding(I)Landroid/media/AudioFormat$Builder;" />
+		<method name="setSampleRate(I)Landroid/media/AudioFormat$Builder;" />
+	</class>
+	<class name="android/media/AudioManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;)I" since="8" deprecated="26" />
+		<method name="abandonAudioFocusRequest(Landroid/media/AudioFocusRequest;)I" since="26" />
+		<method name="addOnCommunicationDeviceChangedListener(Ljava/util/concurrent/Executor;Landroid/media/AudioManager$OnCommunicationDeviceChangedListener;)V" since="31" />
+		<method name="addOnModeChangedListener(Ljava/util/concurrent/Executor;Landroid/media/AudioManager$OnModeChangedListener;)V" since="31" />
+		<method name="adjustStreamVolume(III)V" />
+		<method name="adjustSuggestedStreamVolume(III)V" />
+		<method name="adjustVolume(II)V" />
+		<method name="clearCommunicationDevice()V" since="31" />
+		<method name="dispatchMediaKeyEvent(Landroid/view/KeyEvent;)V" since="19" />
+		<method name="generateAudioSessionId()I" since="21" />
+		<method name="getActivePlaybackConfigurations()Ljava/util/List;" since="26" />
+		<method name="getActiveRecordingConfigurations()Ljava/util/List;" since="24" />
+		<method name="getAllowedCapturePolicy()I" since="29" />
+		<method name="getAudioHwSyncForSession(I)I" since="31" />
+		<method name="getAvailableCommunicationDevices()Ljava/util/List;" since="31" />
+		<method name="getCommunicationDevice()Landroid/media/AudioDeviceInfo;" since="31" />
+		<method name="getDevices(I)[Landroid/media/AudioDeviceInfo;" since="23" />
+		<method name="getEncodedSurroundMode()I" since="31" />
+		<method name="getMicrophones()Ljava/util/List;" since="28" />
+		<method name="getMode()I" />
+		<method name="getParameters(Ljava/lang/String;)Ljava/lang/String;" since="5" />
+		<method name="getPlaybackOffloadSupport(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)I" since="31" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" since="17" />
+		<method name="getRingerMode()I" />
+		<method name="getRouting(I)I" deprecated="15" />
+		<method name="getSpatializer()Landroid/media/Spatializer;" since="33" />
+		<method name="getStreamMaxVolume(I)I" />
+		<method name="getStreamMinVolume(I)I" since="28" />
+		<method name="getStreamVolume(I)I" />
+		<method name="getStreamVolumeDb(III)F" since="28" />
+		<method name="getVibrateSetting(I)I" deprecated="16" />
+		<method name="isBluetoothA2dpOn()Z" since="3" deprecated="26" />
+		<method name="isBluetoothScoAvailableOffCall()Z" since="8" />
+		<method name="isBluetoothScoOn()Z" />
+		<method name="isCallScreeningModeSupported()Z" since="30" />
+		<method name="isHapticPlaybackSupported()Z" since="29" />
+		<method name="isMicrophoneMute()Z" />
+		<method name="isMusicActive()Z" />
+		<method name="isOffloadedPlaybackSupported(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)Z" since="29" />
+		<method name="isSpeakerphoneOn()Z" />
+		<method name="isStreamMute(I)Z" since="23" />
+		<method name="isSurroundFormatEnabled(I)Z" since="31" />
+		<method name="isVolumeFixed()Z" since="21" />
+		<method name="isWiredHeadsetOn()Z" since="5" deprecated="15" />
+		<method name="loadSoundEffects()V" />
+		<method name="playSoundEffect(I)V" />
+		<method name="playSoundEffect(IF)V" since="3" />
+		<method name="registerAudioDeviceCallback(Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V" since="23" />
+		<method name="registerAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;Landroid/os/Handler;)V" since="26" />
+		<method name="registerAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;Landroid/os/Handler;)V" since="24" />
+		<method name="registerMediaButtonEventReceiver(Landroid/app/PendingIntent;)V" since="18" deprecated="21" />
+		<method name="registerMediaButtonEventReceiver(Landroid/content/ComponentName;)V" since="8" deprecated="21" />
+		<method name="registerRemoteControlClient(Landroid/media/RemoteControlClient;)V" since="14" deprecated="21" />
+		<method name="registerRemoteController(Landroid/media/RemoteController;)Z" since="19" deprecated="21" />
+		<method name="removeOnCommunicationDeviceChangedListener(Landroid/media/AudioManager$OnCommunicationDeviceChangedListener;)V" since="31" />
+		<method name="removeOnModeChangedListener(Landroid/media/AudioManager$OnModeChangedListener;)V" since="31" />
+		<method name="requestAudioFocus(Landroid/media/AudioFocusRequest;)I" since="26" />
+		<method name="requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;II)I" since="8" deprecated="26" />
+		<method name="setAllowedCapturePolicy(I)V" since="29" />
+		<method name="setBluetoothA2dpOn(Z)V" since="3" deprecated="15" />
+		<method name="setBluetoothScoOn(Z)V" />
+		<method name="setCommunicationDevice(Landroid/media/AudioDeviceInfo;)Z" since="31" />
+		<method name="setEncodedSurroundMode(I)Z" since="31" />
+		<method name="setMicrophoneMute(Z)V" />
+		<method name="setMode(I)V" />
+		<method name="setParameters(Ljava/lang/String;)V" since="5" />
+		<method name="setRingerMode(I)V" />
+		<method name="setRouting(III)V" deprecated="15" />
+		<method name="setSpeakerphoneOn(Z)V" />
+		<method name="setStreamMute(IZ)V" deprecated="23" />
+		<method name="setStreamSolo(IZ)V" deprecated="23" />
+		<method name="setStreamVolume(III)V" />
+		<method name="setSurroundFormatEnabled(IZ)Z" since="31" />
+		<method name="setVibrateSetting(II)V" deprecated="16" />
+		<method name="setWiredHeadsetOn(Z)V" since="5" deprecated="15" />
+		<method name="shouldVibrate(I)Z" deprecated="16" />
+		<method name="startBluetoothSco()V" since="8" />
+		<method name="stopBluetoothSco()V" since="8" />
+		<method name="unloadSoundEffects()V" />
+		<method name="unregisterAudioDeviceCallback(Landroid/media/AudioDeviceCallback;)V" since="23" />
+		<method name="unregisterAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;)V" since="26" />
+		<method name="unregisterAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;)V" since="24" />
+		<method name="unregisterMediaButtonEventReceiver(Landroid/app/PendingIntent;)V" since="18" deprecated="21" />
+		<method name="unregisterMediaButtonEventReceiver(Landroid/content/ComponentName;)V" since="8" deprecated="21" />
+		<method name="unregisterRemoteControlClient(Landroid/media/RemoteControlClient;)V" since="14" deprecated="21" />
+		<method name="unregisterRemoteController(Landroid/media/RemoteController;)V" since="19" deprecated="21" />
+		<field name="ACTION_AUDIO_BECOMING_NOISY" since="3" />
+		<field name="ACTION_HDMI_AUDIO_PLUG" since="21" />
+		<field name="ACTION_HEADSET_PLUG" since="21" />
+		<field name="ACTION_MICROPHONE_MUTE_CHANGED" since="28" />
+		<field name="ACTION_SCO_AUDIO_STATE_CHANGED" since="8" deprecated="15" />
+		<field name="ACTION_SCO_AUDIO_STATE_UPDATED" since="14" />
+		<field name="ACTION_SPEAKERPHONE_STATE_CHANGED" since="29" />
+		<field name="ADJUST_LOWER" />
+		<field name="ADJUST_MUTE" since="23" />
+		<field name="ADJUST_RAISE" />
+		<field name="ADJUST_SAME" />
+		<field name="ADJUST_TOGGLE_MUTE" since="23" />
+		<field name="ADJUST_UNMUTE" since="23" />
+		<field name="AUDIOFOCUS_GAIN" since="8" />
+		<field name="AUDIOFOCUS_GAIN_TRANSIENT" since="8" />
+		<field name="AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE" since="19" />
+		<field name="AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK" since="8" />
+		<field name="AUDIOFOCUS_LOSS" since="8" />
+		<field name="AUDIOFOCUS_LOSS_TRANSIENT" since="8" />
+		<field name="AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK" since="8" />
+		<field name="AUDIOFOCUS_NONE" since="26" />
+		<field name="AUDIOFOCUS_REQUEST_DELAYED" since="26" />
+		<field name="AUDIOFOCUS_REQUEST_FAILED" since="8" />
+		<field name="AUDIOFOCUS_REQUEST_GRANTED" since="8" />
+		<field name="AUDIO_SESSION_ID_GENERATE" since="21" />
+		<field name="ENCODED_SURROUND_OUTPUT_ALWAYS" since="31" />
+		<field name="ENCODED_SURROUND_OUTPUT_AUTO" since="31" />
+		<field name="ENCODED_SURROUND_OUTPUT_MANUAL" since="31" />
+		<field name="ENCODED_SURROUND_OUTPUT_NEVER" since="31" />
+		<field name="ENCODED_SURROUND_OUTPUT_UNKNOWN" since="31" />
+		<field name="ERROR" since="21" />
+		<field name="ERROR_DEAD_OBJECT" since="21" />
+		<field name="EXTRA_AUDIO_PLUG_STATE" since="21" />
+		<field name="EXTRA_ENCODINGS" since="21" />
+		<field name="EXTRA_MAX_CHANNEL_COUNT" since="21" />
+		<field name="EXTRA_RINGER_MODE" />
+		<field name="EXTRA_SCO_AUDIO_PREVIOUS_STATE" since="14" />
+		<field name="EXTRA_SCO_AUDIO_STATE" since="8" />
+		<field name="EXTRA_VIBRATE_SETTING" deprecated="16" />
+		<field name="EXTRA_VIBRATE_TYPE" deprecated="16" />
+		<field name="FLAG_ALLOW_RINGER_MODES" />
+		<field name="FLAG_PLAY_SOUND" />
+		<field name="FLAG_REMOVE_SOUND_AND_VIBRATE" />
+		<field name="FLAG_SHOW_UI" />
+		<field name="FLAG_VIBRATE" />
+		<field name="FX_BACK" since="31" />
+		<field name="FX_FOCUS_NAVIGATION_DOWN" />
+		<field name="FX_FOCUS_NAVIGATION_LEFT" />
+		<field name="FX_FOCUS_NAVIGATION_RIGHT" />
+		<field name="FX_FOCUS_NAVIGATION_UP" />
+		<field name="FX_KEYPRESS_DELETE" since="3" />
+		<field name="FX_KEYPRESS_INVALID" since="19" />
+		<field name="FX_KEYPRESS_RETURN" since="3" />
+		<field name="FX_KEYPRESS_SPACEBAR" since="3" />
+		<field name="FX_KEYPRESS_STANDARD" since="3" />
+		<field name="FX_KEY_CLICK" />
+		<field name="GET_DEVICES_ALL" since="23" />
+		<field name="GET_DEVICES_INPUTS" since="23" />
+		<field name="GET_DEVICES_OUTPUTS" since="23" />
+		<field name="MODE_CALL_SCREENING" since="30" />
+		<field name="MODE_CURRENT" />
+		<field name="MODE_INVALID" />
+		<field name="MODE_IN_CALL" />
+		<field name="MODE_IN_COMMUNICATION" since="11" />
+		<field name="MODE_NORMAL" />
+		<field name="MODE_RINGTONE" />
+		<field name="NUM_STREAMS" deprecated="15" />
+		<field name="PLAYBACK_OFFLOAD_GAPLESS_SUPPORTED" since="31" />
+		<field name="PLAYBACK_OFFLOAD_NOT_SUPPORTED" since="31" />
+		<field name="PLAYBACK_OFFLOAD_SUPPORTED" since="31" />
+		<field name="PROPERTY_OUTPUT_FRAMES_PER_BUFFER" since="17" />
+		<field name="PROPERTY_OUTPUT_SAMPLE_RATE" since="17" />
+		<field name="PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED" since="24" />
+		<field name="PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND" since="23" />
+		<field name="PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND" since="23" />
+		<field name="RINGER_MODE_CHANGED_ACTION" />
+		<field name="RINGER_MODE_NORMAL" />
+		<field name="RINGER_MODE_SILENT" />
+		<field name="RINGER_MODE_VIBRATE" />
+		<field name="ROUTE_ALL" deprecated="15" />
+		<field name="ROUTE_BLUETOOTH" deprecated="15" />
+		<field name="ROUTE_BLUETOOTH_A2DP" since="3" deprecated="15" />
+		<field name="ROUTE_BLUETOOTH_SCO" since="3" deprecated="15" />
+		<field name="ROUTE_EARPIECE" deprecated="15" />
+		<field name="ROUTE_HEADSET" deprecated="15" />
+		<field name="ROUTE_SPEAKER" deprecated="15" />
+		<field name="SCO_AUDIO_STATE_CONNECTED" since="8" />
+		<field name="SCO_AUDIO_STATE_CONNECTING" since="14" />
+		<field name="SCO_AUDIO_STATE_DISCONNECTED" since="8" />
+		<field name="SCO_AUDIO_STATE_ERROR" since="8" />
+		<field name="STREAM_ACCESSIBILITY" since="26" />
+		<field name="STREAM_ALARM" />
+		<field name="STREAM_DTMF" since="5" />
+		<field name="STREAM_MUSIC" />
+		<field name="STREAM_NOTIFICATION" since="3" />
+		<field name="STREAM_RING" />
+		<field name="STREAM_SYSTEM" />
+		<field name="STREAM_VOICE_CALL" />
+		<field name="USE_DEFAULT_STREAM_TYPE" />
+		<field name="VIBRATE_SETTING_CHANGED_ACTION" deprecated="16" />
+		<field name="VIBRATE_SETTING_OFF" deprecated="16" />
+		<field name="VIBRATE_SETTING_ON" deprecated="16" />
+		<field name="VIBRATE_SETTING_ONLY_SILENT" deprecated="16" />
+		<field name="VIBRATE_TYPE_NOTIFICATION" deprecated="16" />
+		<field name="VIBRATE_TYPE_RINGER" deprecated="16" />
+	</class>
+	<class name="android/media/AudioManager$AudioPlaybackCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onPlaybackConfigChanged(Ljava/util/List;)V" />
+	</class>
+	<class name="android/media/AudioManager$AudioRecordingCallback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onRecordingConfigChanged(Ljava/util/List;)V" />
+	</class>
+	<class name="android/media/AudioManager$OnAudioFocusChangeListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="onAudioFocusChange(I)V" />
+	</class>
+	<class name="android/media/AudioManager$OnCommunicationDeviceChangedListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onCommunicationDeviceChanged(Landroid/media/AudioDeviceInfo;)V" />
+	</class>
+	<class name="android/media/AudioManager$OnModeChangedListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onModeChanged(I)V" />
+	</class>
+	<class name="android/media/AudioMetadata" since="30">
+		<extends name="java/lang/Object" />
+		<method name="createMap()Landroid/media/AudioMetadataMap;" />
+	</class>
+	<class name="android/media/AudioMetadata$Format" since="30">
+		<extends name="java/lang/Object" />
+		<field name="KEY_ATMOS_PRESENT" />
+		<field name="KEY_AUDIO_ENCODING" />
+		<field name="KEY_BIT_RATE" />
+		<field name="KEY_BIT_WIDTH" />
+		<field name="KEY_CHANNEL_MASK" />
+		<field name="KEY_MIME" />
+		<field name="KEY_PRESENTATION_CONTENT_CLASSIFIER" since="31" />
+		<field name="KEY_PRESENTATION_ID" since="31" />
+		<field name="KEY_PRESENTATION_LANGUAGE" since="31" />
+		<field name="KEY_PROGRAM_ID" since="31" />
+		<field name="KEY_SAMPLE_RATE" />
+	</class>
+	<class name="android/media/AudioMetadata$Key" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getValueClass()Ljava/lang/Class;" />
+	</class>
+	<class name="android/media/AudioMetadataMap" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/AudioMetadataReadMap" />
+		<method name="remove(Landroid/media/AudioMetadata$Key;)Ljava/lang/Object;" />
+		<method name="set(Landroid/media/AudioMetadata$Key;Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="android/media/AudioMetadataReadMap" since="30">
+		<extends name="java/lang/Object" />
+		<method name="containsKey(Landroid/media/AudioMetadata$Key;)Z" />
+		<method name="dup()Landroid/media/AudioMetadataMap;" />
+		<method name="get(Landroid/media/AudioMetadata$Key;)Ljava/lang/Object;" />
+		<method name="size()I" />
+	</class>
+	<class name="android/media/AudioPlaybackCaptureConfiguration" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getExcludeUids()[I" />
+		<method name="getExcludeUsages()[I" />
+		<method name="getMatchingUids()[I" />
+		<method name="getMatchingUsages()[I" />
+		<method name="getMediaProjection()Landroid/media/projection/MediaProjection;" />
+	</class>
+	<class name="android/media/AudioPlaybackCaptureConfiguration$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/media/projection/MediaProjection;)V" />
+		<method name="addMatchingUid(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;" />
+		<method name="addMatchingUsage(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;" />
+		<method name="build()Landroid/media/AudioPlaybackCaptureConfiguration;" />
+		<method name="excludeUid(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;" />
+		<method name="excludeUsage(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;" />
+	</class>
+	<class name="android/media/AudioPlaybackConfiguration" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" />
+		<method name="getAudioDeviceInfo()Landroid/media/AudioDeviceInfo;" since="31" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/AudioPresentation" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getLabels()Ljava/util/Map;" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getMasteringIndication()I" />
+		<method name="getPresentationId()I" since="29" />
+		<method name="getProgramId()I" since="29" />
+		<method name="hasAudioDescription()Z" />
+		<method name="hasDialogueEnhancement()Z" />
+		<method name="hasSpokenSubtitles()Z" />
+		<field name="CONTENT_COMMENTARY" since="31" />
+		<field name="CONTENT_DIALOG" since="31" />
+		<field name="CONTENT_EMERGENCY" since="31" />
+		<field name="CONTENT_HEARING_IMPAIRED" since="31" />
+		<field name="CONTENT_MAIN" since="31" />
+		<field name="CONTENT_MUSIC_AND_EFFECTS" since="31" />
+		<field name="CONTENT_UNKNOWN" since="31" />
+		<field name="CONTENT_VISUALLY_IMPAIRED" since="31" />
+		<field name="CONTENT_VOICEOVER" since="31" />
+		<field name="MASTERED_FOR_3D" />
+		<field name="MASTERED_FOR_HEADPHONE" />
+		<field name="MASTERED_FOR_STEREO" />
+		<field name="MASTERED_FOR_SURROUND" />
+		<field name="MASTERING_NOT_INDICATED" />
+	</class>
+	<class name="android/media/AudioPresentation$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/media/AudioPresentation;" />
+		<method name="setHasAudioDescription(Z)Landroid/media/AudioPresentation$Builder;" />
+		<method name="setHasDialogueEnhancement(Z)Landroid/media/AudioPresentation$Builder;" />
+		<method name="setHasSpokenSubtitles(Z)Landroid/media/AudioPresentation$Builder;" />
+		<method name="setLabels(Ljava/util/Map;)Landroid/media/AudioPresentation$Builder;" />
+		<method name="setLocale(Ljava/lang/Object;)Landroid/media/AudioPresentation$Builder;" />
+		<method name="setMasteringIndication(I)Landroid/media/AudioPresentation$Builder;" />
+		<method name="setProgramId(I)Landroid/media/AudioPresentation$Builder;" />
+	</class>
+	<class name="android/media/AudioProfile" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getChannelIndexMasks()[I" />
+		<method name="getChannelMasks()[I" />
+		<method name="getEncapsulationType()I" />
+		<method name="getFormat()I" />
+		<method name="getSampleRates()[I" />
+		<field name="AUDIO_ENCAPSULATION_TYPE_IEC61937" />
+		<field name="AUDIO_ENCAPSULATION_TYPE_NONE" />
+	</class>
+	<class name="android/media/AudioRecord" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/AudioRecordingMonitor" since="29" />
+		<implements name="android/media/AudioRouting" since="24" />
+		<implements name="android/media/MicrophoneDirection" since="29" />
+		<method name="&lt;init&gt;(IIIII)V" />
+		<method name="addOnRoutingChangedListener(Landroid/media/AudioRecord$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24" />
+		<method name="getActiveMicrophones()Ljava/util/List;" since="28" />
+		<method name="getAudioFormat()I" />
+		<method name="getAudioSessionId()I" since="16" />
+		<method name="getAudioSource()I" />
+		<method name="getBufferSizeInFrames()I" since="23" />
+		<method name="getChannelConfiguration()I" />
+		<method name="getChannelCount()I" />
+		<method name="getFormat()Landroid/media/AudioFormat;" since="23" />
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31" />
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28" />
+		<method name="getMinBufferSize(III)I" />
+		<method name="getNotificationMarkerPosition()I" />
+		<method name="getPositionNotificationPeriod()I" />
+		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;" since="23" />
+		<method name="getRecordingState()I" />
+		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;" since="23" />
+		<method name="getSampleRate()I" />
+		<method name="getState()I" />
+		<method name="getTimestamp(Landroid/media/AudioTimestamp;I)I" since="24" />
+		<method name="isPrivacySensitive()Z" since="30" />
+		<method name="read(Ljava/nio/ByteBuffer;I)I" />
+		<method name="read(Ljava/nio/ByteBuffer;II)I" since="23" />
+		<method name="read([BII)I" />
+		<method name="read([BIII)I" since="23" />
+		<method name="read([FIII)I" since="23" />
+		<method name="read([SII)I" />
+		<method name="read([SIII)I" since="23" />
+		<method name="release()V" />
+		<method name="removeOnRoutingChangedListener(Landroid/media/AudioRecord$OnRoutingChangedListener;)V" since="23" deprecated="24" />
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31" />
+		<method name="setNotificationMarkerPosition(I)I" />
+		<method name="setPositionNotificationPeriod(I)I" />
+		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z" since="23" />
+		<method name="setRecordPositionUpdateListener(Landroid/media/AudioRecord$OnRecordPositionUpdateListener;)V" />
+		<method name="setRecordPositionUpdateListener(Landroid/media/AudioRecord$OnRecordPositionUpdateListener;Landroid/os/Handler;)V" />
+		<method name="startRecording()V" />
+		<method name="startRecording(Landroid/media/MediaSyncEvent;)V" since="16" />
+		<method name="stop()V" />
+		<field name="ERROR" />
+		<field name="ERROR_BAD_VALUE" />
+		<field name="ERROR_DEAD_OBJECT" since="24" />
+		<field name="ERROR_INVALID_OPERATION" />
+		<field name="READ_BLOCKING" since="23" />
+		<field name="READ_NON_BLOCKING" since="23" />
+		<field name="RECORDSTATE_RECORDING" />
+		<field name="RECORDSTATE_STOPPED" />
+		<field name="STATE_INITIALIZED" />
+		<field name="STATE_UNINITIALIZED" />
+		<field name="SUCCESS" />
+	</class>
+	<class name="android/media/AudioRecord$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/media/AudioRecord;" />
+		<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioRecord$Builder;" />
+		<method name="setAudioPlaybackCaptureConfig(Landroid/media/AudioPlaybackCaptureConfiguration;)Landroid/media/AudioRecord$Builder;" since="29" />
+		<method name="setAudioSource(I)Landroid/media/AudioRecord$Builder;" />
+		<method name="setBufferSizeInBytes(I)Landroid/media/AudioRecord$Builder;" />
+		<method name="setContext(Landroid/content/Context;)Landroid/media/AudioRecord$Builder;" since="31" />
+		<method name="setPrivacySensitive(Z)Landroid/media/AudioRecord$Builder;" since="30" />
+	</class>
+	<class name="android/media/AudioRecord$MetricsConstants" since="28">
+		<extends name="java/lang/Object" />
+		<field name="CHANNELS" />
+		<field name="ENCODING" />
+		<field name="LATENCY" deprecated="29" />
+		<field name="SAMPLERATE" />
+		<field name="SOURCE" />
+	</class>
+	<class name="android/media/AudioRecord$OnRecordPositionUpdateListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onMarkerReached(Landroid/media/AudioRecord;)V" />
+		<method name="onPeriodicNotification(Landroid/media/AudioRecord;)V" />
+	</class>
+	<class name="android/media/AudioRecord$OnRoutingChangedListener" since="23" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24" />
+		<method name="onRoutingChanged(Landroid/media/AudioRecord;)V" deprecated="29" />
+	</class>
+	<class name="android/media/AudioRecordingConfiguration" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAudioDevice()Landroid/media/AudioDeviceInfo;" />
+		<method name="getAudioSource()I" since="29" />
+		<method name="getClientAudioSessionId()I" />
+		<method name="getClientAudioSource()I" />
+		<method name="getClientEffects()Ljava/util/List;" since="29" />
+		<method name="getClientFormat()Landroid/media/AudioFormat;" />
+		<method name="getEffects()Ljava/util/List;" since="29" />
+		<method name="getFormat()Landroid/media/AudioFormat;" />
+		<method name="isClientSilenced()Z" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/AudioRecordingMonitor" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getActiveRecordingConfiguration()Landroid/media/AudioRecordingConfiguration;" />
+		<method name="registerAudioRecordingCallback(Ljava/util/concurrent/Executor;Landroid/media/AudioManager$AudioRecordingCallback;)V" />
+		<method name="unregisterAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;)V" />
+	</class>
+	<class name="android/media/AudioRouting" since="24">
+		<extends name="java/lang/Object" />
+		<method name="addOnRoutingChangedListener(Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/os/Handler;)V" />
+		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;" />
+		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;" />
+		<method name="removeOnRoutingChangedListener(Landroid/media/AudioRouting$OnRoutingChangedListener;)V" />
+		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z" />
+	</class>
+	<class name="android/media/AudioRouting$OnRoutingChangedListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onRoutingChanged(Landroid/media/AudioRouting;)V" />
+	</class>
+	<class name="android/media/AudioTimestamp" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="TIMEBASE_BOOTTIME" since="24" />
+		<field name="TIMEBASE_MONOTONIC" since="24" />
+		<field name="framePosition" />
+		<field name="nanoTime" />
+	</class>
+	<class name="android/media/AudioTrack" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/AudioRouting" since="24" />
+		<implements name="android/media/VolumeAutomation" since="26" />
+		<method name="&lt;init&gt;(IIIIII)V" deprecated="26" />
+		<method name="&lt;init&gt;(IIIIIII)V" since="9" deprecated="26" />
+		<method name="&lt;init&gt;(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;III)V" since="21" />
+		<method name="addOnCodecFormatChangedListener(Ljava/util/concurrent/Executor;Landroid/media/AudioTrack$OnCodecFormatChangedListener;)V" since="30" />
+		<method name="addOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24" />
+		<method name="attachAuxEffect(I)I" since="9" />
+		<method name="flush()V" />
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" since="29" />
+		<method name="getAudioDescriptionMixLeveldB()F" since="30" />
+		<method name="getAudioFormat()I" />
+		<method name="getAudioSessionId()I" since="9" />
+		<method name="getBufferCapacityInFrames()I" since="24" />
+		<method name="getBufferSizeInFrames()I" since="23" />
+		<method name="getChannelConfiguration()I" />
+		<method name="getChannelCount()I" />
+		<method name="getDualMonoMode()I" since="30" />
+		<method name="getFormat()Landroid/media/AudioFormat;" since="23" />
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31" />
+		<method name="getMaxVolume()F" />
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28" />
+		<method name="getMinBufferSize(III)I" />
+		<method name="getMinVolume()F" />
+		<method name="getNativeFrameCount()I" deprecated="19" />
+		<method name="getNativeOutputSampleRate(I)I" />
+		<method name="getNotificationMarkerPosition()I" />
+		<method name="getOffloadDelay()I" since="29" />
+		<method name="getOffloadPadding()I" since="29" />
+		<method name="getPerformanceMode()I" since="26" />
+		<method name="getPlayState()I" />
+		<method name="getPlaybackHeadPosition()I" />
+		<method name="getPlaybackParams()Landroid/media/PlaybackParams;" since="23" />
+		<method name="getPlaybackRate()I" />
+		<method name="getPositionNotificationPeriod()I" />
+		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;" since="23" />
+		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;" since="23" />
+		<method name="getSampleRate()I" />
+		<method name="getStartThresholdInFrames()I" since="31" />
+		<method name="getState()I" />
+		<method name="getStreamType()I" />
+		<method name="getTimestamp(Landroid/media/AudioTimestamp;)Z" since="19" />
+		<method name="getUnderrunCount()I" since="24" />
+		<method name="isDirectPlaybackSupported(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)Z" since="29" />
+		<method name="isOffloadedPlayback()Z" since="29" />
+		<method name="pause()V" />
+		<method name="play()V" />
+		<method name="registerStreamEventCallback(Ljava/util/concurrent/Executor;Landroid/media/AudioTrack$StreamEventCallback;)V" since="29" />
+		<method name="release()V" />
+		<method name="reloadStaticData()I" />
+		<method name="removeOnCodecFormatChangedListener(Landroid/media/AudioTrack$OnCodecFormatChangedListener;)V" since="30" />
+		<method name="removeOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;)V" since="23" deprecated="24" />
+		<method name="setAudioDescriptionMixLeveldB(F)Z" since="30" />
+		<method name="setAuxEffectSendLevel(F)I" since="9" />
+		<method name="setBufferSizeInFrames(I)I" since="24" />
+		<method name="setDualMonoMode(I)Z" since="30" />
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31" />
+		<method name="setLoopPoints(III)I" />
+		<method name="setNotificationMarkerPosition(I)I" />
+		<method name="setOffloadDelayPadding(II)V" since="29" />
+		<method name="setOffloadEndOfStream()V" since="29" />
+		<method name="setPlaybackHeadPosition(I)I" />
+		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" since="23" />
+		<method name="setPlaybackPositionUpdateListener(Landroid/media/AudioTrack$OnPlaybackPositionUpdateListener;)V" />
+		<method name="setPlaybackPositionUpdateListener(Landroid/media/AudioTrack$OnPlaybackPositionUpdateListener;Landroid/os/Handler;)V" />
+		<method name="setPlaybackRate(I)I" />
+		<method name="setPositionNotificationPeriod(I)I" />
+		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z" since="23" />
+		<method name="setPresentation(Landroid/media/AudioPresentation;)I" since="28" />
+		<method name="setStartThresholdInFrames(I)I" since="31" />
+		<method name="setState(I)V" deprecated="19" />
+		<method name="setStereoVolume(FF)I" deprecated="21" />
+		<method name="setVolume(F)I" since="21" />
+		<method name="stop()V" />
+		<method name="unregisterStreamEventCallback(Landroid/media/AudioTrack$StreamEventCallback;)V" since="29" />
+		<method name="write(Ljava/nio/ByteBuffer;II)I" since="21" />
+		<method name="write(Ljava/nio/ByteBuffer;IIJ)I" since="23" />
+		<method name="write([BII)I" />
+		<method name="write([BIII)I" since="23" />
+		<method name="write([FIII)I" since="21" />
+		<method name="write([SII)I" />
+		<method name="write([SIII)I" since="23" />
+		<field name="DUAL_MONO_MODE_LL" since="30" />
+		<field name="DUAL_MONO_MODE_LR" since="30" />
+		<field name="DUAL_MONO_MODE_OFF" since="30" />
+		<field name="DUAL_MONO_MODE_RR" since="30" />
+		<field name="ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR" since="30" />
+		<field name="ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER" since="30" />
+		<field name="ENCAPSULATION_MODE_ELEMENTARY_STREAM" since="30" />
+		<field name="ENCAPSULATION_MODE_NONE" since="30" />
+		<field name="ERROR" />
+		<field name="ERROR_BAD_VALUE" />
+		<field name="ERROR_DEAD_OBJECT" since="24" />
+		<field name="ERROR_INVALID_OPERATION" />
+		<field name="MODE_STATIC" />
+		<field name="MODE_STREAM" />
+		<field name="PERFORMANCE_MODE_LOW_LATENCY" since="26" />
+		<field name="PERFORMANCE_MODE_NONE" since="26" />
+		<field name="PERFORMANCE_MODE_POWER_SAVING" since="26" />
+		<field name="PLAYSTATE_PAUSED" />
+		<field name="PLAYSTATE_PLAYING" />
+		<field name="PLAYSTATE_STOPPED" />
+		<field name="STATE_INITIALIZED" />
+		<field name="STATE_NO_STATIC_DATA" />
+		<field name="STATE_UNINITIALIZED" />
+		<field name="SUCCESS" />
+		<field name="WRITE_BLOCKING" since="21" />
+		<field name="WRITE_NON_BLOCKING" since="21" />
+	</class>
+	<class name="android/media/AudioTrack$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/media/AudioTrack;" />
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioTrack$Builder;" />
+		<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioTrack$Builder;" />
+		<method name="setBufferSizeInBytes(I)Landroid/media/AudioTrack$Builder;" />
+		<method name="setEncapsulationMode(I)Landroid/media/AudioTrack$Builder;" since="30" />
+		<method name="setOffloadedPlayback(Z)Landroid/media/AudioTrack$Builder;" since="29" />
+		<method name="setPerformanceMode(I)Landroid/media/AudioTrack$Builder;" since="26" />
+		<method name="setSessionId(I)Landroid/media/AudioTrack$Builder;" />
+		<method name="setTransferMode(I)Landroid/media/AudioTrack$Builder;" />
+	</class>
+	<class name="android/media/AudioTrack$MetricsConstants" since="28">
+		<extends name="java/lang/Object" />
+		<field name="CHANNELMASK" deprecated="29" />
+		<field name="CONTENTTYPE" />
+		<field name="SAMPLERATE" deprecated="29" />
+		<field name="STREAMTYPE" />
+		<field name="USAGE" />
+	</class>
+	<class name="android/media/AudioTrack$OnCodecFormatChangedListener" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onCodecFormatChanged(Landroid/media/AudioTrack;Landroid/media/AudioMetadataReadMap;)V" />
+	</class>
+	<class name="android/media/AudioTrack$OnPlaybackPositionUpdateListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onMarkerReached(Landroid/media/AudioTrack;)V" />
+		<method name="onPeriodicNotification(Landroid/media/AudioTrack;)V" />
+	</class>
+	<class name="android/media/AudioTrack$OnRoutingChangedListener" since="23" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24" />
+		<method name="onRoutingChanged(Landroid/media/AudioTrack;)V" deprecated="29" />
+	</class>
+	<class name="android/media/AudioTrack$StreamEventCallback" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDataRequest(Landroid/media/AudioTrack;I)V" />
+		<method name="onPresentationEnded(Landroid/media/AudioTrack;)V" />
+		<method name="onTearDown(Landroid/media/AudioTrack;)V" />
+	</class>
+	<class name="android/media/CamcorderProfile" since="8">
+		<extends name="java/lang/Object" />
+		<method name="get(I)Landroid/media/CamcorderProfile;" deprecated="31" />
+		<method name="get(II)Landroid/media/CamcorderProfile;" since="9" deprecated="31" />
+		<method name="getAll(Ljava/lang/String;I)Landroid/media/EncoderProfiles;" since="31" />
+		<method name="hasProfile(I)Z" since="11" />
+		<method name="hasProfile(II)Z" since="11" />
+		<field name="QUALITY_1080P" since="11" />
+		<field name="QUALITY_2160P" since="21" />
+		<field name="QUALITY_2K" since="30" />
+		<field name="QUALITY_480P" since="11" />
+		<field name="QUALITY_4KDCI" since="30" />
+		<field name="QUALITY_720P" since="11" />
+		<field name="QUALITY_8KUHD" since="31" />
+		<field name="QUALITY_CIF" since="11" />
+		<field name="QUALITY_HIGH" />
+		<field name="QUALITY_HIGH_SPEED_1080P" since="21" />
+		<field name="QUALITY_HIGH_SPEED_2160P" since="21" />
+		<field name="QUALITY_HIGH_SPEED_480P" since="21" />
+		<field name="QUALITY_HIGH_SPEED_4KDCI" since="30" />
+		<field name="QUALITY_HIGH_SPEED_720P" since="21" />
+		<field name="QUALITY_HIGH_SPEED_CIF" since="30" />
+		<field name="QUALITY_HIGH_SPEED_HIGH" since="21" />
+		<field name="QUALITY_HIGH_SPEED_LOW" since="21" />
+		<field name="QUALITY_HIGH_SPEED_VGA" since="30" />
+		<field name="QUALITY_LOW" />
+		<field name="QUALITY_QCIF" since="11" />
+		<field name="QUALITY_QHD" since="30" />
+		<field name="QUALITY_QVGA" since="15" />
+		<field name="QUALITY_TIME_LAPSE_1080P" since="11" />
+		<field name="QUALITY_TIME_LAPSE_2160P" since="21" />
+		<field name="QUALITY_TIME_LAPSE_2K" since="30" />
+		<field name="QUALITY_TIME_LAPSE_480P" since="11" />
+		<field name="QUALITY_TIME_LAPSE_4KDCI" since="30" />
+		<field name="QUALITY_TIME_LAPSE_720P" since="11" />
+		<field name="QUALITY_TIME_LAPSE_8KUHD" since="31" />
+		<field name="QUALITY_TIME_LAPSE_CIF" since="11" />
+		<field name="QUALITY_TIME_LAPSE_HIGH" since="11" />
+		<field name="QUALITY_TIME_LAPSE_LOW" since="11" />
+		<field name="QUALITY_TIME_LAPSE_QCIF" since="11" />
+		<field name="QUALITY_TIME_LAPSE_QHD" since="30" />
+		<field name="QUALITY_TIME_LAPSE_QVGA" since="15" />
+		<field name="QUALITY_TIME_LAPSE_VGA" since="30" />
+		<field name="QUALITY_VGA" since="30" />
+		<field name="audioBitRate" />
+		<field name="audioChannels" />
+		<field name="audioCodec" />
+		<field name="audioSampleRate" />
+		<field name="duration" />
+		<field name="fileFormat" />
+		<field name="quality" />
+		<field name="videoBitRate" />
+		<field name="videoCodec" />
+		<field name="videoFrameHeight" />
+		<field name="videoFrameRate" />
+		<field name="videoFrameWidth" />
+	</class>
+	<class name="android/media/CameraProfile" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getJpegEncodingQualityParameter(I)I" />
+		<method name="getJpegEncodingQualityParameter(II)I" since="9" />
+		<field name="QUALITY_HIGH" />
+		<field name="QUALITY_LOW" />
+		<field name="QUALITY_MEDIUM" />
+	</class>
+	<class name="android/media/DeniedByServerException" since="18">
+		<extends name="android/media/MediaDrmException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/DrmInitData" since="24">
+		<extends name="java/lang/Object" />
+		<method name="get(Ljava/util/UUID;)Landroid/media/DrmInitData$SchemeInitData;" deprecated="30" />
+		<method name="getSchemeInitDataAt(I)Landroid/media/DrmInitData$SchemeInitData;" since="30" />
+		<method name="getSchemeInitDataCount()I" since="30" />
+	</class>
+	<class name="android/media/DrmInitData$SchemeInitData" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/util/UUID;Ljava/lang/String;[B)V" since="31" />
+		<field name="UUID_NIL" since="30" />
+		<field name="data" />
+		<field name="mimeType" />
+		<field name="uuid" since="30" />
+	</class>
+	<class name="android/media/EncoderProfiles" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getAudioProfiles()Ljava/util/List;" />
+		<method name="getDefaultDurationSeconds()I" />
+		<method name="getRecommendedFileFormat()I" />
+		<method name="getVideoProfiles()Ljava/util/List;" />
+	</class>
+	<class name="android/media/EncoderProfiles$AudioProfile" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getBitrate()I" />
+		<method name="getChannels()I" />
+		<method name="getCodec()I" />
+		<method name="getMediaType()Ljava/lang/String;" />
+		<method name="getProfile()I" />
+		<method name="getSampleRate()I" />
+	</class>
+	<class name="android/media/EncoderProfiles$VideoProfile" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getBitrate()I" />
+		<method name="getCodec()I" />
+		<method name="getFrameRate()I" />
+		<method name="getHeight()I" />
+		<method name="getMediaType()Ljava/lang/String;" />
+		<method name="getProfile()I" />
+		<method name="getWidth()I" />
+	</class>
+	<class name="android/media/ExifInterface" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" since="29" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;I)V" since="30" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getAltitude(D)D" since="9" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getAttributeBytes(Ljava/lang/String;)[B" since="29" />
+		<method name="getAttributeDouble(Ljava/lang/String;D)D" since="8" />
+		<method name="getAttributeInt(Ljava/lang/String;I)I" />
+		<method name="getAttributeRange(Ljava/lang/String;)[J" since="29" />
+		<method name="getDateTime()J" since="31" />
+		<method name="getDateTimeDigitized()J" since="31" />
+		<method name="getDateTimeOriginal()J" since="31" />
+		<method name="getGpsDateTime()J" since="31" />
+		<method name="getLatLong([F)Z" />
+		<method name="getThumbnail()[B" />
+		<method name="getThumbnailBitmap()Landroid/graphics/Bitmap;" since="26" />
+		<method name="getThumbnailBytes()[B" since="26" />
+		<method name="getThumbnailRange()[J" since="24" />
+		<method name="hasAttribute(Ljava/lang/String;)Z" since="29" />
+		<method name="hasThumbnail()Z" />
+		<method name="isSupportedMimeType(Ljava/lang/String;)Z" since="30" />
+		<method name="isThumbnailCompressed()Z" since="26" />
+		<method name="saveAttributes()V" />
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="ORIENTATION_FLIP_HORIZONTAL" />
+		<field name="ORIENTATION_FLIP_VERTICAL" />
+		<field name="ORIENTATION_NORMAL" />
+		<field name="ORIENTATION_ROTATE_180" />
+		<field name="ORIENTATION_ROTATE_270" />
+		<field name="ORIENTATION_ROTATE_90" />
+		<field name="ORIENTATION_TRANSPOSE" />
+		<field name="ORIENTATION_TRANSVERSE" />
+		<field name="ORIENTATION_UNDEFINED" />
+		<field name="STREAM_TYPE_EXIF_DATA_ONLY" since="30" />
+		<field name="STREAM_TYPE_FULL_IMAGE_DATA" since="30" />
+		<field name="TAG_APERTURE" since="11" deprecated="24" />
+		<field name="TAG_APERTURE_VALUE" since="24" />
+		<field name="TAG_ARTIST" since="24" />
+		<field name="TAG_BITS_PER_SAMPLE" since="24" />
+		<field name="TAG_BRIGHTNESS_VALUE" since="24" />
+		<field name="TAG_CFA_PATTERN" since="24" />
+		<field name="TAG_COLOR_SPACE" since="24" />
+		<field name="TAG_COMPONENTS_CONFIGURATION" since="24" />
+		<field name="TAG_COMPRESSED_BITS_PER_PIXEL" since="24" />
+		<field name="TAG_COMPRESSION" since="24" />
+		<field name="TAG_CONTRAST" since="24" />
+		<field name="TAG_COPYRIGHT" since="24" />
+		<field name="TAG_CUSTOM_RENDERED" since="24" />
+		<field name="TAG_DATETIME" />
+		<field name="TAG_DATETIME_DIGITIZED" since="23" />
+		<field name="TAG_DATETIME_ORIGINAL" since="24" />
+		<field name="TAG_DEFAULT_CROP_SIZE" since="26" />
+		<field name="TAG_DEVICE_SETTING_DESCRIPTION" since="24" />
+		<field name="TAG_DIGITAL_ZOOM_RATIO" since="24" />
+		<field name="TAG_DNG_VERSION" since="26" />
+		<field name="TAG_EXIF_VERSION" since="24" />
+		<field name="TAG_EXPOSURE_BIAS_VALUE" since="24" />
+		<field name="TAG_EXPOSURE_INDEX" since="24" />
+		<field name="TAG_EXPOSURE_MODE" since="24" />
+		<field name="TAG_EXPOSURE_PROGRAM" since="24" />
+		<field name="TAG_EXPOSURE_TIME" since="11" />
+		<field name="TAG_FILE_SOURCE" since="24" />
+		<field name="TAG_FLASH" />
+		<field name="TAG_FLASHPIX_VERSION" since="24" />
+		<field name="TAG_FLASH_ENERGY" since="24" />
+		<field name="TAG_FOCAL_LENGTH" since="8" />
+		<field name="TAG_FOCAL_LENGTH_IN_35MM_FILM" since="24" />
+		<field name="TAG_FOCAL_PLANE_RESOLUTION_UNIT" since="24" />
+		<field name="TAG_FOCAL_PLANE_X_RESOLUTION" since="24" />
+		<field name="TAG_FOCAL_PLANE_Y_RESOLUTION" since="24" />
+		<field name="TAG_F_NUMBER" since="24" />
+		<field name="TAG_GAIN_CONTROL" since="24" />
+		<field name="TAG_GPS_ALTITUDE" since="9" />
+		<field name="TAG_GPS_ALTITUDE_REF" since="9" />
+		<field name="TAG_GPS_AREA_INFORMATION" since="24" />
+		<field name="TAG_GPS_DATESTAMP" since="8" />
+		<field name="TAG_GPS_DEST_BEARING" since="24" />
+		<field name="TAG_GPS_DEST_BEARING_REF" since="24" />
+		<field name="TAG_GPS_DEST_DISTANCE" since="24" />
+		<field name="TAG_GPS_DEST_DISTANCE_REF" since="24" />
+		<field name="TAG_GPS_DEST_LATITUDE" since="24" />
+		<field name="TAG_GPS_DEST_LATITUDE_REF" since="24" />
+		<field name="TAG_GPS_DEST_LONGITUDE" since="24" />
+		<field name="TAG_GPS_DEST_LONGITUDE_REF" since="24" />
+		<field name="TAG_GPS_DIFFERENTIAL" since="24" />
+		<field name="TAG_GPS_DOP" since="24" />
+		<field name="TAG_GPS_IMG_DIRECTION" since="24" />
+		<field name="TAG_GPS_IMG_DIRECTION_REF" since="24" />
+		<field name="TAG_GPS_LATITUDE" />
+		<field name="TAG_GPS_LATITUDE_REF" />
+		<field name="TAG_GPS_LONGITUDE" />
+		<field name="TAG_GPS_LONGITUDE_REF" />
+		<field name="TAG_GPS_MAP_DATUM" since="24" />
+		<field name="TAG_GPS_MEASURE_MODE" since="24" />
+		<field name="TAG_GPS_PROCESSING_METHOD" since="8" />
+		<field name="TAG_GPS_SATELLITES" since="24" />
+		<field name="TAG_GPS_SPEED" since="24" />
+		<field name="TAG_GPS_SPEED_REF" since="24" />
+		<field name="TAG_GPS_STATUS" since="24" />
+		<field name="TAG_GPS_TIMESTAMP" since="8" />
+		<field name="TAG_GPS_TRACK" since="24" />
+		<field name="TAG_GPS_TRACK_REF" since="24" />
+		<field name="TAG_GPS_VERSION_ID" since="24" />
+		<field name="TAG_IMAGE_DESCRIPTION" since="24" />
+		<field name="TAG_IMAGE_LENGTH" />
+		<field name="TAG_IMAGE_UNIQUE_ID" since="24" />
+		<field name="TAG_IMAGE_WIDTH" />
+		<field name="TAG_INTEROPERABILITY_INDEX" since="24" />
+		<field name="TAG_ISO" since="11" deprecated="24" />
+		<field name="TAG_ISO_SPEED_RATINGS" since="24" />
+		<field name="TAG_JPEG_INTERCHANGE_FORMAT" since="24" />
+		<field name="TAG_JPEG_INTERCHANGE_FORMAT_LENGTH" since="24" />
+		<field name="TAG_LIGHT_SOURCE" since="24" />
+		<field name="TAG_MAKE" />
+		<field name="TAG_MAKER_NOTE" since="24" />
+		<field name="TAG_MAX_APERTURE_VALUE" since="24" />
+		<field name="TAG_METERING_MODE" since="24" />
+		<field name="TAG_MODEL" />
+		<field name="TAG_NEW_SUBFILE_TYPE" since="26" />
+		<field name="TAG_OECF" since="24" />
+		<field name="TAG_OFFSET_TIME" since="30" />
+		<field name="TAG_OFFSET_TIME_DIGITIZED" since="30" />
+		<field name="TAG_OFFSET_TIME_ORIGINAL" since="30" />
+		<field name="TAG_ORF_ASPECT_FRAME" since="26" />
+		<field name="TAG_ORF_PREVIEW_IMAGE_LENGTH" since="26" />
+		<field name="TAG_ORF_PREVIEW_IMAGE_START" since="26" />
+		<field name="TAG_ORF_THUMBNAIL_IMAGE" since="26" />
+		<field name="TAG_ORIENTATION" />
+		<field name="TAG_PHOTOMETRIC_INTERPRETATION" since="24" />
+		<field name="TAG_PIXEL_X_DIMENSION" since="24" />
+		<field name="TAG_PIXEL_Y_DIMENSION" since="24" />
+		<field name="TAG_PLANAR_CONFIGURATION" since="24" />
+		<field name="TAG_PRIMARY_CHROMATICITIES" since="24" />
+		<field name="TAG_REFERENCE_BLACK_WHITE" since="24" />
+		<field name="TAG_RELATED_SOUND_FILE" since="24" />
+		<field name="TAG_RESOLUTION_UNIT" since="24" />
+		<field name="TAG_ROWS_PER_STRIP" since="24" />
+		<field name="TAG_RW2_ISO" since="26" />
+		<field name="TAG_RW2_JPG_FROM_RAW" since="26" />
+		<field name="TAG_RW2_SENSOR_BOTTOM_BORDER" since="26" />
+		<field name="TAG_RW2_SENSOR_LEFT_BORDER" since="26" />
+		<field name="TAG_RW2_SENSOR_RIGHT_BORDER" since="26" />
+		<field name="TAG_RW2_SENSOR_TOP_BORDER" since="26" />
+		<field name="TAG_SAMPLES_PER_PIXEL" since="24" />
+		<field name="TAG_SATURATION" since="24" />
+		<field name="TAG_SCENE_CAPTURE_TYPE" since="24" />
+		<field name="TAG_SCENE_TYPE" since="24" />
+		<field name="TAG_SENSING_METHOD" since="24" />
+		<field name="TAG_SHARPNESS" since="24" />
+		<field name="TAG_SHUTTER_SPEED_VALUE" since="24" />
+		<field name="TAG_SOFTWARE" since="24" />
+		<field name="TAG_SPATIAL_FREQUENCY_RESPONSE" since="24" />
+		<field name="TAG_SPECTRAL_SENSITIVITY" since="24" />
+		<field name="TAG_STRIP_BYTE_COUNTS" since="24" />
+		<field name="TAG_STRIP_OFFSETS" since="24" />
+		<field name="TAG_SUBFILE_TYPE" since="26" />
+		<field name="TAG_SUBJECT_AREA" since="24" />
+		<field name="TAG_SUBJECT_DISTANCE" since="24" />
+		<field name="TAG_SUBJECT_DISTANCE_RANGE" since="24" />
+		<field name="TAG_SUBJECT_LOCATION" since="24" />
+		<field name="TAG_SUBSEC_TIME" since="23" />
+		<field name="TAG_SUBSEC_TIME_DIG" since="23" deprecated="24" />
+		<field name="TAG_SUBSEC_TIME_DIGITIZED" since="24" />
+		<field name="TAG_SUBSEC_TIME_ORIG" since="23" deprecated="24" />
+		<field name="TAG_SUBSEC_TIME_ORIGINAL" since="24" />
+		<field name="TAG_THUMBNAIL_IMAGE_LENGTH" since="24" />
+		<field name="TAG_THUMBNAIL_IMAGE_WIDTH" since="24" />
+		<field name="TAG_THUMBNAIL_ORIENTATION" since="30" />
+		<field name="TAG_TRANSFER_FUNCTION" since="24" />
+		<field name="TAG_USER_COMMENT" since="24" />
+		<field name="TAG_WHITE_BALANCE" />
+		<field name="TAG_WHITE_POINT" since="24" />
+		<field name="TAG_XMP" since="29" />
+		<field name="TAG_X_RESOLUTION" since="24" />
+		<field name="TAG_Y_CB_CR_COEFFICIENTS" since="24" />
+		<field name="TAG_Y_CB_CR_POSITIONING" since="24" />
+		<field name="TAG_Y_CB_CR_SUB_SAMPLING" since="24" />
+		<field name="TAG_Y_RESOLUTION" since="24" />
+		<field name="WHITEBALANCE_AUTO" />
+		<field name="WHITEBALANCE_MANUAL" />
+	</class>
+	<class name="android/media/FaceDetector" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="findFaces(Landroid/graphics/Bitmap;[Landroid/media/FaceDetector$Face;)I" />
+	</class>
+	<class name="android/media/FaceDetector$Face" since="1">
+		<extends name="java/lang/Object" />
+		<method name="confidence()F" />
+		<method name="eyesDistance()F" />
+		<method name="getMidPoint(Landroid/graphics/PointF;)V" />
+		<method name="pose(I)F" />
+		<field name="CONFIDENCE_THRESHOLD" />
+		<field name="EULER_X" />
+		<field name="EULER_Y" />
+		<field name="EULER_Z" />
+	</class>
+	<class name="android/media/Image" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getCropRect()Landroid/graphics/Rect;" since="21" />
+		<method name="getFormat()I" />
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" since="28" />
+		<method name="getHeight()I" />
+		<method name="getPlanes()[Landroid/media/Image$Plane;" />
+		<method name="getTimestamp()J" />
+		<method name="getWidth()I" />
+		<method name="setCropRect(Landroid/graphics/Rect;)V" since="21" />
+		<method name="setTimestamp(J)V" since="23" />
+	</class>
+	<class name="android/media/Image$Plane" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getBuffer()Ljava/nio/ByteBuffer;" />
+		<method name="getPixelStride()I" />
+		<method name="getRowStride()I" />
+	</class>
+	<class name="android/media/ImageReader" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="acquireLatestImage()Landroid/media/Image;" />
+		<method name="acquireNextImage()Landroid/media/Image;" />
+		<method name="discardFreeBuffers()V" since="28" />
+		<method name="getHeight()I" />
+		<method name="getImageFormat()I" />
+		<method name="getMaxImages()I" />
+		<method name="getSurface()Landroid/view/Surface;" />
+		<method name="getWidth()I" />
+		<method name="newInstance(IIII)Landroid/media/ImageReader;" />
+		<method name="newInstance(IIIIJ)Landroid/media/ImageReader;" since="29" />
+		<method name="setOnImageAvailableListener(Landroid/media/ImageReader$OnImageAvailableListener;Landroid/os/Handler;)V" />
+	</class>
+	<class name="android/media/ImageReader$OnImageAvailableListener" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onImageAvailable(Landroid/media/ImageReader;)V" />
+	</class>
+	<class name="android/media/ImageWriter" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="dequeueInputImage()Landroid/media/Image;" />
+		<method name="getFormat()I" />
+		<method name="getMaxImages()I" />
+		<method name="newInstance(Landroid/view/Surface;I)Landroid/media/ImageWriter;" />
+		<method name="newInstance(Landroid/view/Surface;II)Landroid/media/ImageWriter;" since="29" />
+		<method name="queueInputImage(Landroid/media/Image;)V" />
+		<method name="setOnImageReleasedListener(Landroid/media/ImageWriter$OnImageReleasedListener;Landroid/os/Handler;)V" />
+	</class>
+	<class name="android/media/ImageWriter$OnImageReleasedListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onImageReleased(Landroid/media/ImageWriter;)V" />
+	</class>
+	<class name="android/media/JetPlayer" since="3">
+		<extends name="java/lang/Object" />
+		<method name="clearQueue()Z" />
+		<method name="closeJetFile()Z" />
+		<method name="getJetPlayer()Landroid/media/JetPlayer;" />
+		<method name="getMaxTracks()I" />
+		<method name="loadJetFile(Landroid/content/res/AssetFileDescriptor;)Z" />
+		<method name="loadJetFile(Ljava/lang/String;)Z" />
+		<method name="pause()Z" />
+		<method name="play()Z" />
+		<method name="queueJetSegment(IIIIIB)Z" />
+		<method name="queueJetSegmentMuteArray(IIII[ZB)Z" />
+		<method name="release()V" />
+		<method name="setEventListener(Landroid/media/JetPlayer$OnJetEventListener;)V" />
+		<method name="setEventListener(Landroid/media/JetPlayer$OnJetEventListener;Landroid/os/Handler;)V" />
+		<method name="setMuteArray([ZZ)Z" />
+		<method name="setMuteFlag(IZZ)Z" />
+		<method name="setMuteFlags(IZ)Z" />
+		<method name="triggerClip(I)Z" />
+	</class>
+	<class name="android/media/JetPlayer$OnJetEventListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onJetEvent(Landroid/media/JetPlayer;SBBBB)V" />
+		<method name="onJetNumQueuedSegmentUpdate(Landroid/media/JetPlayer;I)V" />
+		<method name="onJetPauseUpdate(Landroid/media/JetPlayer;I)V" />
+		<method name="onJetUserIdUpdate(Landroid/media/JetPlayer;II)V" />
+	</class>
+	<class name="android/media/MediaActionSound" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="load(I)V" />
+		<method name="play(I)V" />
+		<method name="release()V" />
+		<field name="FOCUS_COMPLETE" />
+		<field name="SHUTTER_CLICK" />
+		<field name="START_VIDEO_RECORDING" />
+		<field name="STOP_VIDEO_RECORDING" />
+	</class>
+	<class name="android/media/MediaCas" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILjava/lang/String;I)V" since="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILjava/lang/String;ILandroid/os/Handler;Landroid/media/MediaCas$EventListener;)V" since="31" />
+		<method name="enumeratePlugins()[Landroid/media/MediaCas$PluginDescriptor;" />
+		<method name="isSystemIdSupported(I)Z" />
+		<method name="openSession()Landroid/media/MediaCas$Session;" />
+		<method name="openSession(II)Landroid/media/MediaCas$Session;" since="30" />
+		<method name="processEmm([B)V" />
+		<method name="processEmm([BII)V" />
+		<method name="provision(Ljava/lang/String;)V" />
+		<method name="refreshEntitlements(I[B)V" />
+		<method name="sendEvent(II[B)V" />
+		<method name="setEventListener(Landroid/media/MediaCas$EventListener;Landroid/os/Handler;)V" />
+		<method name="setPrivateData([B)V" />
+		<field name="PLUGIN_STATUS_PHYSICAL_MODULE_CHANGED" since="30" />
+		<field name="PLUGIN_STATUS_SESSION_NUMBER_CHANGED" since="30" />
+		<field name="SCRAMBLING_MODE_AES128" since="30" />
+		<field name="SCRAMBLING_MODE_AES_ECB" since="30" />
+		<field name="SCRAMBLING_MODE_AES_SCTE52" since="30" />
+		<field name="SCRAMBLING_MODE_DVB_CISSA_V1" since="30" />
+		<field name="SCRAMBLING_MODE_DVB_CSA1" since="30" />
+		<field name="SCRAMBLING_MODE_DVB_CSA2" since="30" />
+		<field name="SCRAMBLING_MODE_DVB_CSA3_ENHANCE" since="30" />
+		<field name="SCRAMBLING_MODE_DVB_CSA3_MINIMAL" since="30" />
+		<field name="SCRAMBLING_MODE_DVB_CSA3_STANDARD" since="30" />
+		<field name="SCRAMBLING_MODE_DVB_IDSA" since="30" />
+		<field name="SCRAMBLING_MODE_MULTI2" since="30" />
+		<field name="SCRAMBLING_MODE_RESERVED" since="30" />
+		<field name="SCRAMBLING_MODE_TDES_ECB" since="30" />
+		<field name="SCRAMBLING_MODE_TDES_SCTE52" since="30" />
+		<field name="SESSION_USAGE_LIVE" since="30" />
+		<field name="SESSION_USAGE_PLAYBACK" since="30" />
+		<field name="SESSION_USAGE_RECORD" since="30" />
+		<field name="SESSION_USAGE_TIMESHIFT" since="30" />
+	</class>
+	<class name="android/media/MediaCas$EventListener" since="26">
+		<extends name="java/lang/Object" />
+		<method name="onEvent(Landroid/media/MediaCas;II[B)V" />
+		<method name="onPluginStatusUpdate(Landroid/media/MediaCas;II)V" since="30" />
+		<method name="onResourceLost(Landroid/media/MediaCas;)V" since="30" />
+		<method name="onSessionEvent(Landroid/media/MediaCas;Landroid/media/MediaCas$Session;II[B)V" since="29" />
+	</class>
+	<class name="android/media/MediaCas$PluginDescriptor" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSystemId()I" />
+	</class>
+	<class name="android/media/MediaCas$Session" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getSessionId()[B" since="30" />
+		<method name="processEcm([B)V" />
+		<method name="processEcm([BII)V" />
+		<method name="sendSessionEvent(II[B)V" since="29" />
+		<method name="setPrivateData([B)V" />
+	</class>
+	<class name="android/media/MediaCasException" since="26">
+		<extends name="java/lang/Exception" />
+	</class>
+	<class name="android/media/MediaCasException$DeniedByServerException" since="26">
+		<extends name="android/media/MediaCasException" />
+	</class>
+	<class name="android/media/MediaCasException$InsufficientResourceException" since="30">
+		<extends name="android/media/MediaCasException" />
+	</class>
+	<class name="android/media/MediaCasException$NotProvisionedException" since="26">
+		<extends name="android/media/MediaCasException" />
+	</class>
+	<class name="android/media/MediaCasException$ResourceBusyException" since="26">
+		<extends name="android/media/MediaCasException" />
+	</class>
+	<class name="android/media/MediaCasException$UnsupportedCasException" since="26">
+		<extends name="android/media/MediaCasException" />
+	</class>
+	<class name="android/media/MediaCasStateException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="getDiagnosticInfo()Ljava/lang/String;" />
+	</class>
+	<class name="android/media/MediaCodec" since="16">
+		<extends name="java/lang/Object" />
+		<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;ILandroid/media/MediaDescrambler;)V" since="26" />
+		<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V" />
+		<method name="createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;" />
+		<method name="createDecoderByType(Ljava/lang/String;)Landroid/media/MediaCodec;" />
+		<method name="createEncoderByType(Ljava/lang/String;)Landroid/media/MediaCodec;" />
+		<method name="createInputSurface()Landroid/view/Surface;" since="18" />
+		<method name="createPersistentInputSurface()Landroid/view/Surface;" since="23" />
+		<method name="dequeueInputBuffer(J)I" />
+		<method name="dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I" />
+		<method name="flush()V" />
+		<method name="getCanonicalName()Ljava/lang/String;" since="29" />
+		<method name="getCodecInfo()Landroid/media/MediaCodecInfo;" since="18" />
+		<method name="getInputBuffer(I)Ljava/nio/ByteBuffer;" since="21" />
+		<method name="getInputBuffers()[Ljava/nio/ByteBuffer;" deprecated="21" />
+		<method name="getInputFormat()Landroid/media/MediaFormat;" since="21" />
+		<method name="getInputImage(I)Landroid/media/Image;" since="21" />
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26" />
+		<method name="getName()Ljava/lang/String;" since="18" />
+		<method name="getOutputBuffer(I)Ljava/nio/ByteBuffer;" since="21" />
+		<method name="getOutputBuffers()[Ljava/nio/ByteBuffer;" deprecated="21" />
+		<method name="getOutputFormat()Landroid/media/MediaFormat;" />
+		<method name="getOutputFormat(I)Landroid/media/MediaFormat;" since="21" />
+		<method name="getOutputFrame(I)Landroid/media/MediaCodec$OutputFrame;" since="30" />
+		<method name="getOutputImage(I)Landroid/media/Image;" since="21" />
+		<method name="getParameterDescriptor(Ljava/lang/String;)Landroid/media/MediaCodec$ParameterDescriptor;" since="31" />
+		<method name="getQueueRequest(I)Landroid/media/MediaCodec$QueueRequest;" since="30" />
+		<method name="getSupportedVendorParameters()Ljava/util/List;" since="31" />
+		<method name="mapHardwareBuffer(Landroid/hardware/HardwareBuffer;)Landroid/media/Image;" since="30" />
+		<method name="queueInputBuffer(IIIJI)V" />
+		<method name="queueSecureInputBuffer(IILandroid/media/MediaCodec$CryptoInfo;JI)V" />
+		<method name="release()V" />
+		<method name="releaseOutputBuffer(IJ)V" since="21" />
+		<method name="releaseOutputBuffer(IZ)V" />
+		<method name="reset()V" since="21" />
+		<method name="setAudioPresentation(Landroid/media/AudioPresentation;)V" since="29" />
+		<method name="setCallback(Landroid/media/MediaCodec$Callback;)V" since="21" />
+		<method name="setCallback(Landroid/media/MediaCodec$Callback;Landroid/os/Handler;)V" since="23" />
+		<method name="setInputSurface(Landroid/view/Surface;)V" since="23" />
+		<method name="setOnFirstTunnelFrameReadyListener(Landroid/os/Handler;Landroid/media/MediaCodec$OnFirstTunnelFrameReadyListener;)V" since="31" />
+		<method name="setOnFrameRenderedListener(Landroid/media/MediaCodec$OnFrameRenderedListener;Landroid/os/Handler;)V" since="23" />
+		<method name="setOutputSurface(Landroid/view/Surface;)V" since="23" />
+		<method name="setParameters(Landroid/os/Bundle;)V" since="19" />
+		<method name="setVideoScalingMode(I)V" />
+		<method name="signalEndOfInputStream()V" since="18" />
+		<method name="start()V" />
+		<method name="stop()V" />
+		<method name="subscribeToVendorParameters(Ljava/util/List;)V" since="31" />
+		<method name="unsubscribeFromVendorParameters(Ljava/util/List;)V" since="31" />
+		<field name="BUFFER_FLAG_CODEC_CONFIG" />
+		<field name="BUFFER_FLAG_END_OF_STREAM" />
+		<field name="BUFFER_FLAG_KEY_FRAME" since="21" />
+		<field name="BUFFER_FLAG_PARTIAL_FRAME" since="26" />
+		<field name="BUFFER_FLAG_SYNC_FRAME" deprecated="21" />
+		<field name="CONFIGURE_FLAG_ENCODE" />
+		<field name="CONFIGURE_FLAG_USE_BLOCK_MODEL" since="30" />
+		<field name="CRYPTO_MODE_AES_CBC" since="24" />
+		<field name="CRYPTO_MODE_AES_CTR" />
+		<field name="CRYPTO_MODE_UNENCRYPTED" />
+		<field name="INFO_OUTPUT_BUFFERS_CHANGED" deprecated="21" />
+		<field name="INFO_OUTPUT_FORMAT_CHANGED" />
+		<field name="INFO_TRY_AGAIN_LATER" />
+		<field name="PARAMETER_KEY_HDR10_PLUS_INFO" since="29" />
+		<field name="PARAMETER_KEY_LOW_LATENCY" since="30" />
+		<field name="PARAMETER_KEY_OFFSET_TIME" since="29" />
+		<field name="PARAMETER_KEY_REQUEST_SYNC_FRAME" since="19" />
+		<field name="PARAMETER_KEY_SUSPEND" since="19" />
+		<field name="PARAMETER_KEY_SUSPEND_TIME" since="29" />
+		<field name="PARAMETER_KEY_TUNNEL_PEEK" since="31" />
+		<field name="PARAMETER_KEY_VIDEO_BITRATE" since="19" />
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT" />
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING" />
+	</class>
+	<class name="android/media/MediaCodec$BufferInfo" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="set(IIJI)V" />
+		<field name="flags" />
+		<field name="offset" />
+		<field name="presentationTimeUs" />
+		<field name="size" />
+	</class>
+	<class name="android/media/MediaCodec$Callback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onError(Landroid/media/MediaCodec;Landroid/media/MediaCodec$CodecException;)V" />
+		<method name="onInputBufferAvailable(Landroid/media/MediaCodec;I)V" />
+		<method name="onOutputBufferAvailable(Landroid/media/MediaCodec;ILandroid/media/MediaCodec$BufferInfo;)V" />
+		<method name="onOutputFormatChanged(Landroid/media/MediaCodec;Landroid/media/MediaFormat;)V" />
+	</class>
+	<class name="android/media/MediaCodec$CodecException" since="21">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="getDiagnosticInfo()Ljava/lang/String;" />
+		<method name="getErrorCode()I" since="23" />
+		<method name="isRecoverable()Z" />
+		<method name="isTransient()Z" />
+		<field name="ERROR_INSUFFICIENT_RESOURCE" since="23" />
+		<field name="ERROR_RECLAIMED" since="23" />
+	</class>
+	<class name="android/media/MediaCodec$CryptoException" since="16">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="getErrorCode()I" />
+		<field name="ERROR_FRAME_TOO_LARGE" since="29" deprecated="31" />
+		<field name="ERROR_INSUFFICIENT_OUTPUT_PROTECTION" since="21" deprecated="31" />
+		<field name="ERROR_INSUFFICIENT_SECURITY" since="29" deprecated="31" />
+		<field name="ERROR_KEY_EXPIRED" since="19" deprecated="31" />
+		<field name="ERROR_LOST_STATE" since="29" deprecated="31" />
+		<field name="ERROR_NO_KEY" since="19" deprecated="31" />
+		<field name="ERROR_RESOURCE_BUSY" since="19" deprecated="31" />
+		<field name="ERROR_SESSION_NOT_OPENED" since="23" deprecated="31" />
+		<field name="ERROR_UNSUPPORTED_OPERATION" since="24" deprecated="31" />
+	</class>
+	<class name="android/media/MediaCodec$CryptoInfo" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getPattern()Landroid/media/MediaCodec$CryptoInfo$Pattern;" since="31" />
+		<method name="set(I[I[I[B[BI)V" />
+		<method name="setPattern(Landroid/media/MediaCodec$CryptoInfo$Pattern;)V" since="24" />
+		<field name="iv" />
+		<field name="key" />
+		<field name="mode" />
+		<field name="numBytesOfClearData" />
+		<field name="numBytesOfEncryptedData" />
+		<field name="numSubSamples" />
+	</class>
+	<class name="android/media/MediaCodec$CryptoInfo$Pattern" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getEncryptBlocks()I" />
+		<method name="getSkipBlocks()I" />
+		<method name="set(II)V" />
+	</class>
+	<class name="android/media/MediaCodec$IncompatibleWithBlockModelException" since="30">
+		<extends name="java/lang/RuntimeException" />
+	</class>
+	<class name="android/media/MediaCodec$LinearBlock" since="30">
+		<extends name="java/lang/Object" />
+		<method name="isCodecCopyFreeCompatible([Ljava/lang/String;)Z" />
+		<method name="isMappable()Z" />
+		<method name="map()Ljava/nio/ByteBuffer;" />
+		<method name="obtain(I[Ljava/lang/String;)Landroid/media/MediaCodec$LinearBlock;" />
+		<method name="recycle()V" />
+	</class>
+	<class name="android/media/MediaCodec$MetricsConstants" since="26">
+		<extends name="java/lang/Object" />
+		<field name="CODEC" />
+		<field name="ENCODER" />
+		<field name="HEIGHT" />
+		<field name="MIME_TYPE" />
+		<field name="MODE" />
+		<field name="MODE_AUDIO" />
+		<field name="MODE_VIDEO" />
+		<field name="ROTATION" />
+		<field name="SECURE" />
+		<field name="WIDTH" />
+	</class>
+	<class name="android/media/MediaCodec$OnFirstTunnelFrameReadyListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onFirstTunnelFrameReady(Landroid/media/MediaCodec;)V" />
+	</class>
+	<class name="android/media/MediaCodec$OnFrameRenderedListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onFrameRendered(Landroid/media/MediaCodec;JJ)V" />
+	</class>
+	<class name="android/media/MediaCodec$OutputFrame" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getChangedKeys()Ljava/util/Set;" />
+		<method name="getFlags()I" />
+		<method name="getFormat()Landroid/media/MediaFormat;" />
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" />
+		<method name="getLinearBlock()Landroid/media/MediaCodec$LinearBlock;" />
+		<method name="getPresentationTimeUs()J" />
+	</class>
+	<class name="android/media/MediaCodec$ParameterDescriptor" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getType()I" />
+	</class>
+	<class name="android/media/MediaCodec$QueueRequest" since="30">
+		<extends name="java/lang/Object" />
+		<method name="queue()V" />
+		<method name="setByteBufferParameter(Ljava/lang/String;Ljava/nio/ByteBuffer;)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setEncryptedLinearBlock(Landroid/media/MediaCodec$LinearBlock;IILandroid/media/MediaCodec$CryptoInfo;)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setFlags(I)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setFloatParameter(Ljava/lang/String;F)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setHardwareBuffer(Landroid/hardware/HardwareBuffer;)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setIntegerParameter(Ljava/lang/String;I)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setLinearBlock(Landroid/media/MediaCodec$LinearBlock;II)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setLongParameter(Ljava/lang/String;J)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setPresentationTimeUs(J)Landroid/media/MediaCodec$QueueRequest;" />
+		<method name="setStringParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaCodec$QueueRequest;" />
+	</class>
+	<class name="android/media/MediaCodecInfo" since="16">
+		<extends name="java/lang/Object" />
+		<method name="getCanonicalName()Ljava/lang/String;" since="29" />
+		<method name="getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSupportedTypes()[Ljava/lang/String;" />
+		<method name="isAlias()Z" since="29" />
+		<method name="isEncoder()Z" />
+		<method name="isHardwareAccelerated()Z" since="29" />
+		<method name="isSoftwareOnly()Z" since="29" />
+		<method name="isVendor()Z" since="29" />
+	</class>
+	<class name="android/media/MediaCodecInfo$AudioCapabilities" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getBitrateRange()Landroid/util/Range;" />
+		<method name="getInputChannelCountRanges()[Landroid/util/Range;" since="31" />
+		<method name="getMaxInputChannelCount()I" />
+		<method name="getMinInputChannelCount()I" since="31" />
+		<method name="getSupportedSampleRateRanges()[Landroid/util/Range;" />
+		<method name="getSupportedSampleRates()[I" />
+		<method name="isSampleRateSupported(I)Z" />
+	</class>
+	<class name="android/media/MediaCodecInfo$CodecCapabilities" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createFromProfileLevel(Ljava/lang/String;II)Landroid/media/MediaCodecInfo$CodecCapabilities;" since="21" />
+		<method name="getAudioCapabilities()Landroid/media/MediaCodecInfo$AudioCapabilities;" since="21" />
+		<method name="getDefaultFormat()Landroid/media/MediaFormat;" since="21" />
+		<method name="getEncoderCapabilities()Landroid/media/MediaCodecInfo$EncoderCapabilities;" since="21" />
+		<method name="getMaxSupportedInstances()I" since="23" />
+		<method name="getMimeType()Ljava/lang/String;" since="21" />
+		<method name="getVideoCapabilities()Landroid/media/MediaCodecInfo$VideoCapabilities;" since="21" />
+		<method name="isFeatureRequired(Ljava/lang/String;)Z" since="21" />
+		<method name="isFeatureSupported(Ljava/lang/String;)Z" since="19" />
+		<method name="isFormatSupported(Landroid/media/MediaFormat;)Z" since="21" />
+		<field name="COLOR_Format12bitRGB444" deprecated="23" />
+		<field name="COLOR_Format16bitARGB1555" deprecated="23" />
+		<field name="COLOR_Format16bitARGB4444" deprecated="23" />
+		<field name="COLOR_Format16bitBGR565" deprecated="23" />
+		<field name="COLOR_Format16bitRGB565" />
+		<field name="COLOR_Format18BitBGR666" deprecated="23" />
+		<field name="COLOR_Format18bitARGB1665" deprecated="23" />
+		<field name="COLOR_Format18bitRGB666" deprecated="23" />
+		<field name="COLOR_Format19bitARGB1666" deprecated="23" />
+		<field name="COLOR_Format24BitABGR6666" deprecated="23" />
+		<field name="COLOR_Format24BitARGB6666" deprecated="23" />
+		<field name="COLOR_Format24bitARGB1887" deprecated="23" />
+		<field name="COLOR_Format24bitBGR888" />
+		<field name="COLOR_Format24bitRGB888" deprecated="23" />
+		<field name="COLOR_Format25bitARGB1888" deprecated="23" />
+		<field name="COLOR_Format32bitABGR8888" since="23" />
+		<field name="COLOR_Format32bitARGB8888" deprecated="23" />
+		<field name="COLOR_Format32bitBGRA8888" deprecated="23" />
+		<field name="COLOR_Format8bitRGB332" deprecated="23" />
+		<field name="COLOR_FormatCbYCrY" deprecated="23" />
+		<field name="COLOR_FormatCrYCbY" deprecated="23" />
+		<field name="COLOR_FormatL16" />
+		<field name="COLOR_FormatL2" deprecated="23" />
+		<field name="COLOR_FormatL24" deprecated="23" />
+		<field name="COLOR_FormatL32" deprecated="23" />
+		<field name="COLOR_FormatL4" deprecated="23" />
+		<field name="COLOR_FormatL8" />
+		<field name="COLOR_FormatMonochrome" deprecated="23" />
+		<field name="COLOR_FormatRGBAFlexible" since="23" />
+		<field name="COLOR_FormatRGBFlexible" since="23" />
+		<field name="COLOR_FormatRawBayer10bit" />
+		<field name="COLOR_FormatRawBayer8bit" />
+		<field name="COLOR_FormatRawBayer8bitcompressed" />
+		<field name="COLOR_FormatSurface" since="18" />
+		<field name="COLOR_FormatYCbYCr" deprecated="23" />
+		<field name="COLOR_FormatYCrYCb" deprecated="23" />
+		<field name="COLOR_FormatYUV411PackedPlanar" deprecated="23" />
+		<field name="COLOR_FormatYUV411Planar" deprecated="23" />
+		<field name="COLOR_FormatYUV420Flexible" since="21" />
+		<field name="COLOR_FormatYUV420PackedPlanar" deprecated="23" />
+		<field name="COLOR_FormatYUV420PackedSemiPlanar" deprecated="23" />
+		<field name="COLOR_FormatYUV420Planar" deprecated="23" />
+		<field name="COLOR_FormatYUV420SemiPlanar" deprecated="23" />
+		<field name="COLOR_FormatYUV422Flexible" since="23" />
+		<field name="COLOR_FormatYUV422PackedPlanar" deprecated="23" />
+		<field name="COLOR_FormatYUV422PackedSemiPlanar" deprecated="23" />
+		<field name="COLOR_FormatYUV422Planar" deprecated="23" />
+		<field name="COLOR_FormatYUV422SemiPlanar" deprecated="23" />
+		<field name="COLOR_FormatYUV444Flexible" since="23" />
+		<field name="COLOR_FormatYUV444Interleaved" deprecated="23" />
+		<field name="COLOR_QCOM_FormatYUV420SemiPlanar" deprecated="23" />
+		<field name="COLOR_TI_FormatYUV420PackedSemiPlanar" deprecated="23" />
+		<field name="FEATURE_AdaptivePlayback" since="19" />
+		<field name="FEATURE_DynamicTimestamp" since="29" />
+		<field name="FEATURE_FrameParsing" since="29" />
+		<field name="FEATURE_IntraRefresh" since="24" />
+		<field name="FEATURE_LowLatency" since="30" />
+		<field name="FEATURE_MultipleFrames" since="29" />
+		<field name="FEATURE_PartialFrame" since="26" />
+		<field name="FEATURE_QpBounds" since="31" />
+		<field name="FEATURE_SecurePlayback" since="21" />
+		<field name="FEATURE_TunneledPlayback" since="21" />
+		<field name="colorFormats" />
+		<field name="profileLevels" />
+	</class>
+	<class name="android/media/MediaCodecInfo$CodecProfileLevel" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="AACObjectELD" />
+		<field name="AACObjectERLC" />
+		<field name="AACObjectERScalable" since="26" />
+		<field name="AACObjectHE" />
+		<field name="AACObjectHE_PS" />
+		<field name="AACObjectLC" />
+		<field name="AACObjectLD" />
+		<field name="AACObjectLTP" />
+		<field name="AACObjectMain" />
+		<field name="AACObjectSSR" />
+		<field name="AACObjectScalable" />
+		<field name="AACObjectXHE" since="28" />
+		<field name="AV1Level2" since="29" />
+		<field name="AV1Level21" since="29" />
+		<field name="AV1Level22" since="29" />
+		<field name="AV1Level23" since="29" />
+		<field name="AV1Level3" since="29" />
+		<field name="AV1Level31" since="29" />
+		<field name="AV1Level32" since="29" />
+		<field name="AV1Level33" since="29" />
+		<field name="AV1Level4" since="29" />
+		<field name="AV1Level41" since="29" />
+		<field name="AV1Level42" since="29" />
+		<field name="AV1Level43" since="29" />
+		<field name="AV1Level5" since="29" />
+		<field name="AV1Level51" since="29" />
+		<field name="AV1Level52" since="29" />
+		<field name="AV1Level53" since="29" />
+		<field name="AV1Level6" since="29" />
+		<field name="AV1Level61" since="29" />
+		<field name="AV1Level62" since="29" />
+		<field name="AV1Level63" since="29" />
+		<field name="AV1Level7" since="29" />
+		<field name="AV1Level71" since="29" />
+		<field name="AV1Level72" since="29" />
+		<field name="AV1Level73" since="29" />
+		<field name="AV1ProfileMain10" since="29" />
+		<field name="AV1ProfileMain10HDR10" since="29" />
+		<field name="AV1ProfileMain10HDR10Plus" since="29" />
+		<field name="AV1ProfileMain8" since="29" />
+		<field name="AVCLevel1" />
+		<field name="AVCLevel11" />
+		<field name="AVCLevel12" />
+		<field name="AVCLevel13" />
+		<field name="AVCLevel1b" />
+		<field name="AVCLevel2" />
+		<field name="AVCLevel21" />
+		<field name="AVCLevel22" />
+		<field name="AVCLevel3" />
+		<field name="AVCLevel31" />
+		<field name="AVCLevel32" />
+		<field name="AVCLevel4" />
+		<field name="AVCLevel41" />
+		<field name="AVCLevel42" />
+		<field name="AVCLevel5" />
+		<field name="AVCLevel51" />
+		<field name="AVCLevel52" since="21" />
+		<field name="AVCLevel6" since="29" />
+		<field name="AVCLevel61" since="29" />
+		<field name="AVCLevel62" since="29" />
+		<field name="AVCProfileBaseline" />
+		<field name="AVCProfileConstrainedBaseline" since="27" />
+		<field name="AVCProfileConstrainedHigh" since="27" />
+		<field name="AVCProfileExtended" />
+		<field name="AVCProfileHigh" />
+		<field name="AVCProfileHigh10" />
+		<field name="AVCProfileHigh422" />
+		<field name="AVCProfileHigh444" />
+		<field name="AVCProfileMain" />
+		<field name="DolbyVisionLevelFhd24" since="24" />
+		<field name="DolbyVisionLevelFhd30" since="24" />
+		<field name="DolbyVisionLevelFhd60" since="24" />
+		<field name="DolbyVisionLevelHd24" since="24" />
+		<field name="DolbyVisionLevelHd30" since="24" />
+		<field name="DolbyVisionLevelUhd24" since="24" />
+		<field name="DolbyVisionLevelUhd30" since="24" />
+		<field name="DolbyVisionLevelUhd48" since="24" />
+		<field name="DolbyVisionLevelUhd60" since="24" />
+		<field name="DolbyVisionProfileDvav110" since="30" />
+		<field name="DolbyVisionProfileDvavPen" since="24" />
+		<field name="DolbyVisionProfileDvavPer" since="24" />
+		<field name="DolbyVisionProfileDvavSe" since="27" />
+		<field name="DolbyVisionProfileDvheDen" since="24" />
+		<field name="DolbyVisionProfileDvheDer" since="24" />
+		<field name="DolbyVisionProfileDvheDtb" since="24" />
+		<field name="DolbyVisionProfileDvheDth" since="24" />
+		<field name="DolbyVisionProfileDvheDtr" since="24" />
+		<field name="DolbyVisionProfileDvheSt" since="27" />
+		<field name="DolbyVisionProfileDvheStn" since="24" />
+		<field name="H263Level10" />
+		<field name="H263Level20" />
+		<field name="H263Level30" />
+		<field name="H263Level40" />
+		<field name="H263Level45" />
+		<field name="H263Level50" />
+		<field name="H263Level60" />
+		<field name="H263Level70" />
+		<field name="H263ProfileBackwardCompatible" />
+		<field name="H263ProfileBaseline" />
+		<field name="H263ProfileH320Coding" />
+		<field name="H263ProfileHighCompression" />
+		<field name="H263ProfileHighLatency" />
+		<field name="H263ProfileISWV2" />
+		<field name="H263ProfileISWV3" />
+		<field name="H263ProfileInterlace" />
+		<field name="H263ProfileInternet" />
+		<field name="HEVCHighTierLevel1" since="21" />
+		<field name="HEVCHighTierLevel2" since="21" />
+		<field name="HEVCHighTierLevel21" since="21" />
+		<field name="HEVCHighTierLevel3" since="21" />
+		<field name="HEVCHighTierLevel31" since="21" />
+		<field name="HEVCHighTierLevel4" since="21" />
+		<field name="HEVCHighTierLevel41" since="21" />
+		<field name="HEVCHighTierLevel5" since="21" />
+		<field name="HEVCHighTierLevel51" since="21" />
+		<field name="HEVCHighTierLevel52" since="21" />
+		<field name="HEVCHighTierLevel6" since="21" />
+		<field name="HEVCHighTierLevel61" since="21" />
+		<field name="HEVCHighTierLevel62" since="21" />
+		<field name="HEVCMainTierLevel1" since="21" />
+		<field name="HEVCMainTierLevel2" since="21" />
+		<field name="HEVCMainTierLevel21" since="21" />
+		<field name="HEVCMainTierLevel3" since="21" />
+		<field name="HEVCMainTierLevel31" since="21" />
+		<field name="HEVCMainTierLevel4" since="21" />
+		<field name="HEVCMainTierLevel41" since="21" />
+		<field name="HEVCMainTierLevel5" since="21" />
+		<field name="HEVCMainTierLevel51" since="21" />
+		<field name="HEVCMainTierLevel52" since="21" />
+		<field name="HEVCMainTierLevel6" since="21" />
+		<field name="HEVCMainTierLevel61" since="21" />
+		<field name="HEVCMainTierLevel62" since="21" />
+		<field name="HEVCProfileMain" since="21" />
+		<field name="HEVCProfileMain10" since="21" />
+		<field name="HEVCProfileMain10HDR10" since="24" />
+		<field name="HEVCProfileMain10HDR10Plus" since="29" />
+		<field name="HEVCProfileMainStill" since="28" />
+		<field name="MPEG2LevelH14" since="23" />
+		<field name="MPEG2LevelHL" since="23" />
+		<field name="MPEG2LevelHP" since="24" />
+		<field name="MPEG2LevelLL" since="23" />
+		<field name="MPEG2LevelML" since="23" />
+		<field name="MPEG2Profile422" since="23" />
+		<field name="MPEG2ProfileHigh" since="23" />
+		<field name="MPEG2ProfileMain" since="23" />
+		<field name="MPEG2ProfileSNR" since="23" />
+		<field name="MPEG2ProfileSimple" since="23" />
+		<field name="MPEG2ProfileSpatial" since="23" />
+		<field name="MPEG4Level0" />
+		<field name="MPEG4Level0b" />
+		<field name="MPEG4Level1" />
+		<field name="MPEG4Level2" />
+		<field name="MPEG4Level3" />
+		<field name="MPEG4Level3b" since="24" />
+		<field name="MPEG4Level4" />
+		<field name="MPEG4Level4a" />
+		<field name="MPEG4Level5" />
+		<field name="MPEG4Level6" since="24" />
+		<field name="MPEG4ProfileAdvancedCoding" />
+		<field name="MPEG4ProfileAdvancedCore" />
+		<field name="MPEG4ProfileAdvancedRealTime" />
+		<field name="MPEG4ProfileAdvancedScalable" />
+		<field name="MPEG4ProfileAdvancedSimple" />
+		<field name="MPEG4ProfileBasicAnimated" />
+		<field name="MPEG4ProfileCore" />
+		<field name="MPEG4ProfileCoreScalable" />
+		<field name="MPEG4ProfileHybrid" />
+		<field name="MPEG4ProfileMain" />
+		<field name="MPEG4ProfileNbit" />
+		<field name="MPEG4ProfileScalableTexture" />
+		<field name="MPEG4ProfileSimple" />
+		<field name="MPEG4ProfileSimpleFBA" />
+		<field name="MPEG4ProfileSimpleFace" />
+		<field name="MPEG4ProfileSimpleScalable" />
+		<field name="VP8Level_Version0" since="18" />
+		<field name="VP8Level_Version1" since="18" />
+		<field name="VP8Level_Version2" since="18" />
+		<field name="VP8Level_Version3" since="18" />
+		<field name="VP8ProfileMain" since="18" />
+		<field name="VP9Level1" since="24" />
+		<field name="VP9Level11" since="24" />
+		<field name="VP9Level2" since="24" />
+		<field name="VP9Level21" since="24" />
+		<field name="VP9Level3" since="24" />
+		<field name="VP9Level31" since="24" />
+		<field name="VP9Level4" since="24" />
+		<field name="VP9Level41" since="24" />
+		<field name="VP9Level5" since="24" />
+		<field name="VP9Level51" since="24" />
+		<field name="VP9Level52" since="24" />
+		<field name="VP9Level6" since="24" />
+		<field name="VP9Level61" since="24" />
+		<field name="VP9Level62" since="24" />
+		<field name="VP9Profile0" since="24" />
+		<field name="VP9Profile1" since="24" />
+		<field name="VP9Profile2" since="24" />
+		<field name="VP9Profile2HDR" since="24" />
+		<field name="VP9Profile2HDR10Plus" since="29" />
+		<field name="VP9Profile3" since="24" />
+		<field name="VP9Profile3HDR" since="24" />
+		<field name="VP9Profile3HDR10Plus" since="29" />
+		<field name="level" />
+		<field name="profile" />
+	</class>
+	<class name="android/media/MediaCodecInfo$EncoderCapabilities" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getComplexityRange()Landroid/util/Range;" />
+		<method name="getQualityRange()Landroid/util/Range;" since="28" />
+		<method name="isBitrateModeSupported(I)Z" />
+		<field name="BITRATE_MODE_CBR" />
+		<field name="BITRATE_MODE_CBR_FD" since="31" />
+		<field name="BITRATE_MODE_CQ" />
+		<field name="BITRATE_MODE_VBR" />
+	</class>
+	<class name="android/media/MediaCodecInfo$VideoCapabilities" since="21">
+		<extends name="java/lang/Object" />
+		<method name="areSizeAndRateSupported(IID)Z" />
+		<method name="getAchievableFrameRatesFor(II)Landroid/util/Range;" since="23" />
+		<method name="getBitrateRange()Landroid/util/Range;" />
+		<method name="getHeightAlignment()I" />
+		<method name="getSupportedFrameRates()Landroid/util/Range;" />
+		<method name="getSupportedFrameRatesFor(II)Landroid/util/Range;" />
+		<method name="getSupportedHeights()Landroid/util/Range;" />
+		<method name="getSupportedHeightsFor(I)Landroid/util/Range;" />
+		<method name="getSupportedPerformancePoints()Ljava/util/List;" since="29" />
+		<method name="getSupportedWidths()Landroid/util/Range;" />
+		<method name="getSupportedWidthsFor(I)Landroid/util/Range;" />
+		<method name="getWidthAlignment()I" />
+		<method name="isSizeSupported(II)Z" />
+	</class>
+	<class name="android/media/MediaCodecInfo$VideoCapabilities$PerformancePoint" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="covers(Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;)Z" />
+		<method name="covers(Landroid/media/MediaFormat;)Z" />
+		<field name="FHD_100" />
+		<field name="FHD_120" />
+		<field name="FHD_200" />
+		<field name="FHD_24" />
+		<field name="FHD_240" />
+		<field name="FHD_25" />
+		<field name="FHD_30" />
+		<field name="FHD_50" />
+		<field name="FHD_60" />
+		<field name="HD_100" />
+		<field name="HD_120" />
+		<field name="HD_200" />
+		<field name="HD_24" />
+		<field name="HD_240" />
+		<field name="HD_25" />
+		<field name="HD_30" />
+		<field name="HD_50" />
+		<field name="HD_60" />
+		<field name="SD_24" />
+		<field name="SD_25" />
+		<field name="SD_30" />
+		<field name="SD_48" />
+		<field name="SD_50" />
+		<field name="SD_60" />
+		<field name="UHD_100" />
+		<field name="UHD_120" />
+		<field name="UHD_200" />
+		<field name="UHD_24" />
+		<field name="UHD_240" />
+		<field name="UHD_25" />
+		<field name="UHD_30" />
+		<field name="UHD_50" />
+		<field name="UHD_60" />
+	</class>
+	<class name="android/media/MediaCodecList" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" since="21" />
+		<method name="findDecoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21" />
+		<method name="findEncoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21" />
+		<method name="getCodecCount()I" deprecated="21" />
+		<method name="getCodecInfoAt(I)Landroid/media/MediaCodecInfo;" deprecated="21" />
+		<method name="getCodecInfos()[Landroid/media/MediaCodecInfo;" since="21" />
+		<field name="ALL_CODECS" since="21" />
+		<field name="REGULAR_CODECS" since="21" />
+	</class>
+	<class name="android/media/MediaCrypto" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/util/UUID;[B)V" />
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;)Z" />
+		<method name="release()V" />
+		<method name="requiresSecureDecoderComponent(Ljava/lang/String;)Z" />
+		<method name="setMediaDrmSession([B)V" since="23" />
+	</class>
+	<class name="android/media/MediaCryptoException" since="16">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/MediaDataSource" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getSize()J" />
+		<method name="readAt(J[BII)I" />
+	</class>
+	<class name="android/media/MediaDescrambler" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="descramble(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Landroid/media/MediaCodec$CryptoInfo;)I" />
+		<method name="requiresSecureDecoderComponent(Ljava/lang/String;)Z" />
+		<method name="setMediaCasSession(Landroid/media/MediaCas$Session;)V" />
+		<field name="SCRAMBLE_CONTROL_EVEN_KEY" since="28" />
+		<field name="SCRAMBLE_CONTROL_ODD_KEY" since="28" />
+		<field name="SCRAMBLE_CONTROL_RESERVED" since="28" />
+		<field name="SCRAMBLE_CONTROL_UNSCRAMBLED" since="28" />
+		<field name="SCRAMBLE_FLAG_PES_HEADER" since="28" />
+	</class>
+	<class name="android/media/MediaDescription" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDescription()Ljava/lang/CharSequence;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getIconBitmap()Landroid/graphics/Bitmap;" />
+		<method name="getIconUri()Landroid/net/Uri;" />
+		<method name="getMediaId()Ljava/lang/String;" />
+		<method name="getMediaUri()Landroid/net/Uri;" since="23" />
+		<method name="getSubtitle()Ljava/lang/CharSequence;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<field name="BT_FOLDER_TYPE_ALBUMS" since="26" />
+		<field name="BT_FOLDER_TYPE_ARTISTS" since="26" />
+		<field name="BT_FOLDER_TYPE_GENRES" since="26" />
+		<field name="BT_FOLDER_TYPE_MIXED" since="26" />
+		<field name="BT_FOLDER_TYPE_PLAYLISTS" since="26" />
+		<field name="BT_FOLDER_TYPE_TITLES" since="26" />
+		<field name="BT_FOLDER_TYPE_YEARS" since="26" />
+		<field name="CREATOR" />
+		<field name="EXTRA_BT_FOLDER_TYPE" since="26" />
+	</class>
+	<class name="android/media/MediaDescription$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/media/MediaDescription;" />
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/MediaDescription$Builder;" />
+		<method name="setIconBitmap(Landroid/graphics/Bitmap;)Landroid/media/MediaDescription$Builder;" />
+		<method name="setIconUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;" />
+		<method name="setMediaId(Ljava/lang/String;)Landroid/media/MediaDescription$Builder;" />
+		<method name="setMediaUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;" since="23" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;" />
+	</class>
+	<class name="android/media/MediaDrm" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="28" />
+		<method name="&lt;init&gt;(Ljava/util/UUID;)V" />
+		<method name="clearOnEventListener()V" since="29" />
+		<method name="clearOnExpirationUpdateListener()V" since="29" />
+		<method name="clearOnKeyStatusChangeListener()V" since="29" />
+		<method name="clearOnSessionLostStateListener()V" since="29" />
+		<method name="closeSession([B)V" />
+		<method name="getConnectedHdcpLevel()I" since="28" />
+		<method name="getCryptoSession([BLjava/lang/String;Ljava/lang/String;)Landroid/media/MediaDrm$CryptoSession;" />
+		<method name="getKeyRequest([B[BLjava/lang/String;ILjava/util/HashMap;)Landroid/media/MediaDrm$KeyRequest;" />
+		<method name="getLogMessages()Ljava/util/List;" since="31" />
+		<method name="getMaxHdcpLevel()I" since="28" />
+		<method name="getMaxSecurityLevel()I" since="28" />
+		<method name="getMaxSessionCount()I" since="28" />
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28" />
+		<method name="getOfflineLicenseKeySetIds()Ljava/util/List;" since="29" />
+		<method name="getOfflineLicenseState([B)I" since="29" />
+		<method name="getOpenSessionCount()I" since="28" />
+		<method name="getPlaybackComponent([B)Landroid/media/MediaDrm$PlaybackComponent;" since="31" />
+		<method name="getPropertyByteArray(Ljava/lang/String;)[B" />
+		<method name="getPropertyString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getProvisionRequest()Landroid/media/MediaDrm$ProvisionRequest;" />
+		<method name="getSecureStop([B)[B" since="22" />
+		<method name="getSecureStopIds()Ljava/util/List;" since="28" />
+		<method name="getSecureStops()Ljava/util/List;" />
+		<method name="getSecurityLevel([B)I" since="28" />
+		<method name="getSupportedCryptoSchemes()Ljava/util/List;" since="30" />
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;)Z" />
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;Ljava/lang/String;)Z" since="19" />
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;Ljava/lang/String;I)Z" since="29" />
+		<method name="openSession()[B" />
+		<method name="openSession(I)[B" since="28" />
+		<method name="provideKeyResponse([B[B)[B" />
+		<method name="provideProvisionResponse([B)V" />
+		<method name="queryKeyStatus([B)Ljava/util/HashMap;" />
+		<method name="release()V" deprecated="28" />
+		<method name="releaseAllSecureStops()V" since="22" deprecated="28" />
+		<method name="releaseSecureStops([B)V" />
+		<method name="removeAllSecureStops()V" since="28" />
+		<method name="removeKeys([B)V" />
+		<method name="removeOfflineLicense([B)V" since="29" />
+		<method name="removeSecureStop([B)V" since="28" />
+		<method name="requiresSecureDecoder(Ljava/lang/String;)Z" since="31" />
+		<method name="requiresSecureDecoder(Ljava/lang/String;I)Z" since="31" />
+		<method name="restoreKeys([B[B)V" />
+		<method name="setOnEventListener(Landroid/media/MediaDrm$OnEventListener;)V" />
+		<method name="setOnEventListener(Landroid/media/MediaDrm$OnEventListener;Landroid/os/Handler;)V" since="29" />
+		<method name="setOnEventListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnEventListener;)V" since="29" />
+		<method name="setOnExpirationUpdateListener(Landroid/media/MediaDrm$OnExpirationUpdateListener;Landroid/os/Handler;)V" since="23" />
+		<method name="setOnExpirationUpdateListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnExpirationUpdateListener;)V" since="29" />
+		<method name="setOnKeyStatusChangeListener(Landroid/media/MediaDrm$OnKeyStatusChangeListener;Landroid/os/Handler;)V" since="23" />
+		<method name="setOnKeyStatusChangeListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnKeyStatusChangeListener;)V" since="29" />
+		<method name="setOnSessionLostStateListener(Landroid/media/MediaDrm$OnSessionLostStateListener;Landroid/os/Handler;)V" since="29" />
+		<method name="setOnSessionLostStateListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnSessionLostStateListener;)V" since="29" />
+		<method name="setPropertyByteArray(Ljava/lang/String;[B)V" />
+		<method name="setPropertyString(Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="EVENT_KEY_EXPIRED" deprecated="26" />
+		<field name="EVENT_KEY_REQUIRED" />
+		<field name="EVENT_PROVISION_REQUIRED" deprecated="23" />
+		<field name="EVENT_SESSION_RECLAIMED" since="23" />
+		<field name="EVENT_VENDOR_DEFINED" />
+		<field name="HDCP_LEVEL_UNKNOWN" since="28" />
+		<field name="HDCP_NONE" since="28" />
+		<field name="HDCP_NO_DIGITAL_OUTPUT" since="28" />
+		<field name="HDCP_V1" since="28" />
+		<field name="HDCP_V2" since="28" />
+		<field name="HDCP_V2_1" since="28" />
+		<field name="HDCP_V2_2" since="28" />
+		<field name="HDCP_V2_3" since="29" />
+		<field name="KEY_TYPE_OFFLINE" />
+		<field name="KEY_TYPE_RELEASE" />
+		<field name="KEY_TYPE_STREAMING" />
+		<field name="OFFLINE_LICENSE_STATE_RELEASED" since="29" />
+		<field name="OFFLINE_LICENSE_STATE_UNKNOWN" since="29" />
+		<field name="OFFLINE_LICENSE_STATE_USABLE" since="29" />
+		<field name="PROPERTY_ALGORITHMS" />
+		<field name="PROPERTY_DESCRIPTION" />
+		<field name="PROPERTY_DEVICE_UNIQUE_ID" />
+		<field name="PROPERTY_VENDOR" />
+		<field name="PROPERTY_VERSION" />
+		<field name="SECURITY_LEVEL_HW_SECURE_ALL" since="28" />
+		<field name="SECURITY_LEVEL_HW_SECURE_CRYPTO" since="28" />
+		<field name="SECURITY_LEVEL_HW_SECURE_DECODE" since="28" />
+		<field name="SECURITY_LEVEL_SW_SECURE_CRYPTO" since="28" />
+		<field name="SECURITY_LEVEL_SW_SECURE_DECODE" since="28" />
+		<field name="SECURITY_LEVEL_UNKNOWN" since="28" />
+	</class>
+	<class name="android/media/MediaDrm$CryptoSession" since="18">
+		<extends name="java/lang/Object" />
+		<method name="decrypt([B[B[B)[B" />
+		<method name="encrypt([B[B[B)[B" />
+		<method name="sign([B[B)[B" />
+		<method name="verify([B[B[B)Z" />
+	</class>
+	<class name="android/media/MediaDrm$ErrorCodes" since="31">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_CERTIFICATE_MALFORMED" />
+		<field name="ERROR_CERTIFICATE_MISSING" />
+		<field name="ERROR_CRYPTO_LIBRARY" />
+		<field name="ERROR_FRAME_TOO_LARGE" />
+		<field name="ERROR_GENERIC_OEM" />
+		<field name="ERROR_GENERIC_PLUGIN" />
+		<field name="ERROR_INIT_DATA" />
+		<field name="ERROR_INSUFFICIENT_OUTPUT_PROTECTION" />
+		<field name="ERROR_INSUFFICIENT_SECURITY" />
+		<field name="ERROR_KEY_EXPIRED" />
+		<field name="ERROR_KEY_NOT_LOADED" />
+		<field name="ERROR_LICENSE_PARSE" />
+		<field name="ERROR_LICENSE_POLICY" />
+		<field name="ERROR_LICENSE_RELEASE" />
+		<field name="ERROR_LICENSE_REQUEST_REJECTED" />
+		<field name="ERROR_LICENSE_RESTORE" />
+		<field name="ERROR_LICENSE_STATE" />
+		<field name="ERROR_LOST_STATE" />
+		<field name="ERROR_MEDIA_FRAMEWORK" />
+		<field name="ERROR_NO_KEY" />
+		<field name="ERROR_PROVISIONING_CERTIFICATE" />
+		<field name="ERROR_PROVISIONING_CONFIG" />
+		<field name="ERROR_PROVISIONING_PARSE" />
+		<field name="ERROR_PROVISIONING_REQUEST_REJECTED" />
+		<field name="ERROR_PROVISIONING_RETRY" />
+		<field name="ERROR_RESOURCE_BUSY" />
+		<field name="ERROR_RESOURCE_CONTENTION" />
+		<field name="ERROR_SECURE_STOP_RELEASE" />
+		<field name="ERROR_SESSION_NOT_OPENED" />
+		<field name="ERROR_STORAGE_READ" />
+		<field name="ERROR_STORAGE_WRITE" />
+		<field name="ERROR_UNKNOWN" />
+		<field name="ERROR_UNSUPPORTED_OPERATION" />
+		<field name="ERROR_ZERO_SUBSAMPLES" />
+	</class>
+	<class name="android/media/MediaDrm$HdcpLevel" since="28" deprecated="29">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/media/MediaDrm$KeyRequest" since="18">
+		<extends name="java/lang/Object" />
+		<method name="getData()[B" />
+		<method name="getDefaultUrl()Ljava/lang/String;" />
+		<method name="getRequestType()I" since="23" />
+		<field name="REQUEST_TYPE_INITIAL" since="23" />
+		<field name="REQUEST_TYPE_NONE" since="28" />
+		<field name="REQUEST_TYPE_RELEASE" since="23" />
+		<field name="REQUEST_TYPE_RENEWAL" since="23" />
+		<field name="REQUEST_TYPE_UPDATE" since="28" />
+	</class>
+	<class name="android/media/MediaDrm$KeyStatus" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getKeyId()[B" />
+		<method name="getStatusCode()I" />
+		<field name="STATUS_EXPIRED" />
+		<field name="STATUS_INTERNAL_ERROR" />
+		<field name="STATUS_OUTPUT_NOT_ALLOWED" />
+		<field name="STATUS_PENDING" />
+		<field name="STATUS_USABLE" />
+		<field name="STATUS_USABLE_IN_FUTURE" since="29" />
+	</class>
+	<class name="android/media/MediaDrm$LogMessage" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getMessage()Ljava/lang/String;" />
+		<method name="getPriority()I" />
+		<method name="getTimestampMillis()J" />
+	</class>
+	<class name="android/media/MediaDrm$MediaDrmStateException" since="21">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="getDiagnosticInfo()Ljava/lang/String;" />
+		<method name="getErrorCode()I" since="31" />
+		<method name="isTransient()Z" since="31" />
+	</class>
+	<class name="android/media/MediaDrm$MetricsConstants" since="28">
+		<extends name="java/lang/Object" />
+		<field name="CLOSE_SESSION_ERROR_COUNT" />
+		<field name="CLOSE_SESSION_ERROR_LIST" />
+		<field name="CLOSE_SESSION_OK_COUNT" />
+		<field name="EVENT_KEY_EXPIRED_COUNT" />
+		<field name="EVENT_KEY_NEEDED_COUNT" />
+		<field name="EVENT_PROVISION_REQUIRED_COUNT" />
+		<field name="EVENT_SESSION_RECLAIMED_COUNT" />
+		<field name="EVENT_VENDOR_DEFINED_COUNT" />
+		<field name="GET_DEVICE_UNIQUE_ID_ERROR_COUNT" />
+		<field name="GET_DEVICE_UNIQUE_ID_ERROR_LIST" />
+		<field name="GET_DEVICE_UNIQUE_ID_OK_COUNT" />
+		<field name="GET_KEY_REQUEST_ERROR_COUNT" />
+		<field name="GET_KEY_REQUEST_ERROR_LIST" />
+		<field name="GET_KEY_REQUEST_OK_COUNT" />
+		<field name="GET_KEY_REQUEST_OK_TIME_MICROS" />
+		<field name="GET_PROVISION_REQUEST_ERROR_COUNT" />
+		<field name="GET_PROVISION_REQUEST_ERROR_LIST" />
+		<field name="GET_PROVISION_REQUEST_OK_COUNT" />
+		<field name="KEY_STATUS_EXPIRED_COUNT" />
+		<field name="KEY_STATUS_INTERNAL_ERROR_COUNT" />
+		<field name="KEY_STATUS_OUTPUT_NOT_ALLOWED_COUNT" />
+		<field name="KEY_STATUS_PENDING_COUNT" />
+		<field name="KEY_STATUS_USABLE_COUNT" />
+		<field name="OPEN_SESSION_ERROR_COUNT" />
+		<field name="OPEN_SESSION_ERROR_LIST" />
+		<field name="OPEN_SESSION_OK_COUNT" />
+		<field name="PROVIDE_KEY_RESPONSE_ERROR_COUNT" />
+		<field name="PROVIDE_KEY_RESPONSE_ERROR_LIST" />
+		<field name="PROVIDE_KEY_RESPONSE_OK_COUNT" />
+		<field name="PROVIDE_KEY_RESPONSE_OK_TIME_MICROS" />
+		<field name="PROVIDE_PROVISION_RESPONSE_ERROR_COUNT" />
+		<field name="PROVIDE_PROVISION_RESPONSE_ERROR_LIST" />
+		<field name="PROVIDE_PROVISION_RESPONSE_OK_COUNT" />
+		<field name="SESSION_END_TIMES_MS" />
+		<field name="SESSION_START_TIMES_MS" />
+	</class>
+	<class name="android/media/MediaDrm$OnEventListener" since="18">
+		<extends name="java/lang/Object" />
+		<method name="onEvent(Landroid/media/MediaDrm;[BII[B)V" />
+	</class>
+	<class name="android/media/MediaDrm$OnExpirationUpdateListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onExpirationUpdate(Landroid/media/MediaDrm;[BJ)V" />
+	</class>
+	<class name="android/media/MediaDrm$OnKeyStatusChangeListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onKeyStatusChange(Landroid/media/MediaDrm;[BLjava/util/List;Z)V" />
+	</class>
+	<class name="android/media/MediaDrm$OnSessionLostStateListener" since="29">
+		<extends name="java/lang/Object" />
+		<method name="onSessionLostState(Landroid/media/MediaDrm;[B)V" />
+	</class>
+	<class name="android/media/MediaDrm$PlaybackComponent" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" />
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" />
+	</class>
+	<class name="android/media/MediaDrm$ProvisionRequest" since="18">
+		<extends name="java/lang/Object" />
+		<method name="getData()[B" />
+		<method name="getDefaultUrl()Ljava/lang/String;" />
+	</class>
+	<class name="android/media/MediaDrm$SecurityLevel" since="28" deprecated="29">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/media/MediaDrm$SessionException" since="29">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="getErrorCode()I" deprecated="31" />
+		<method name="isTransient()Z" since="31" />
+		<field name="ERROR_RESOURCE_CONTENTION" deprecated="31" />
+		<field name="ERROR_UNKNOWN" deprecated="31" />
+	</class>
+	<class name="android/media/MediaDrmException" since="18">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/MediaDrmResetException" since="23">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/MediaExtractor" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="advance()Z" />
+		<method name="getAudioPresentations(I)Ljava/util/List;" since="28" />
+		<method name="getCachedDuration()J" />
+		<method name="getCasInfo(I)Landroid/media/MediaExtractor$CasInfo;" since="26" />
+		<method name="getDrmInitData()Landroid/media/DrmInitData;" since="24" />
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31" />
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26" />
+		<method name="getPsshInfo()Ljava/util/Map;" since="18" />
+		<method name="getSampleCryptoInfo(Landroid/media/MediaCodec$CryptoInfo;)Z" />
+		<method name="getSampleFlags()I" />
+		<method name="getSampleSize()J" since="28" />
+		<method name="getSampleTime()J" />
+		<method name="getSampleTrackIndex()I" />
+		<method name="getTrackCount()I" />
+		<method name="getTrackFormat(I)Landroid/media/MediaFormat;" />
+		<method name="hasCacheReachedEndOfStream()Z" />
+		<method name="readSampleData(Ljava/nio/ByteBuffer;I)I" />
+		<method name="release()V" />
+		<method name="seekTo(JI)V" />
+		<method name="selectTrack(I)V" />
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;)V" />
+		<method name="setDataSource(Landroid/content/res/AssetFileDescriptor;)V" since="24" />
+		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23" />
+		<method name="setDataSource(Ljava/io/FileDescriptor;)V" />
+		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V" />
+		<method name="setDataSource(Ljava/lang/String;)V" />
+		<method name="setDataSource(Ljava/lang/String;Ljava/util/Map;)V" />
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31" />
+		<method name="setMediaCas(Landroid/media/MediaCas;)V" since="26" />
+		<method name="unselectTrack(I)V" />
+		<field name="SAMPLE_FLAG_ENCRYPTED" />
+		<field name="SAMPLE_FLAG_PARTIAL_FRAME" since="26" />
+		<field name="SAMPLE_FLAG_SYNC" />
+		<field name="SEEK_TO_CLOSEST_SYNC" />
+		<field name="SEEK_TO_NEXT_SYNC" />
+		<field name="SEEK_TO_PREVIOUS_SYNC" />
+	</class>
+	<class name="android/media/MediaExtractor$CasInfo" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getPrivateData()[B" since="29" />
+		<method name="getSession()Landroid/media/MediaCas$Session;" />
+		<method name="getSystemId()I" />
+	</class>
+	<class name="android/media/MediaExtractor$MetricsConstants" since="26">
+		<extends name="java/lang/Object" />
+		<field name="FORMAT" />
+		<field name="MIME_TYPE" />
+		<field name="TRACKS" />
+	</class>
+	<class name="android/media/MediaFormat" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/media/MediaFormat;)V" since="29" />
+		<method name="containsFeature(Ljava/lang/String;)Z" since="29" />
+		<method name="containsKey(Ljava/lang/String;)Z" />
+		<method name="createAudioFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;" />
+		<method name="createSubtitleFormat(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaFormat;" since="19" />
+		<method name="createVideoFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;" />
+		<method name="getByteBuffer(Ljava/lang/String;)Ljava/nio/ByteBuffer;" />
+		<method name="getByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;" since="29" />
+		<method name="getFeatureEnabled(Ljava/lang/String;)Z" since="21" />
+		<method name="getFeatures()Ljava/util/Set;" since="29" />
+		<method name="getFloat(Ljava/lang/String;)F" />
+		<method name="getFloat(Ljava/lang/String;F)F" since="29" />
+		<method name="getInteger(Ljava/lang/String;)I" />
+		<method name="getInteger(Ljava/lang/String;I)I" since="29" />
+		<method name="getKeys()Ljava/util/Set;" since="29" />
+		<method name="getLong(Ljava/lang/String;)J" />
+		<method name="getLong(Ljava/lang/String;J)J" since="29" />
+		<method name="getNumber(Ljava/lang/String;)Ljava/lang/Number;" since="29" />
+		<method name="getNumber(Ljava/lang/String;Ljava/lang/Number;)Ljava/lang/Number;" since="29" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="29" />
+		<method name="getValueTypeForKey(Ljava/lang/String;)I" since="29" />
+		<method name="removeFeature(Ljava/lang/String;)V" since="29" />
+		<method name="removeKey(Ljava/lang/String;)V" since="29" />
+		<method name="setByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)V" />
+		<method name="setFeatureEnabled(Ljava/lang/String;Z)V" since="21" />
+		<method name="setFloat(Ljava/lang/String;F)V" />
+		<method name="setInteger(Ljava/lang/String;I)V" />
+		<method name="setLong(Ljava/lang/String;J)V" />
+		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="COLOR_RANGE_FULL" since="24" />
+		<field name="COLOR_RANGE_LIMITED" since="24" />
+		<field name="COLOR_STANDARD_BT2020" since="24" />
+		<field name="COLOR_STANDARD_BT601_NTSC" since="24" />
+		<field name="COLOR_STANDARD_BT601_PAL" since="24" />
+		<field name="COLOR_STANDARD_BT709" since="24" />
+		<field name="COLOR_TRANSFER_HLG" since="24" />
+		<field name="COLOR_TRANSFER_LINEAR" since="24" />
+		<field name="COLOR_TRANSFER_SDR_VIDEO" since="24" />
+		<field name="COLOR_TRANSFER_ST2084" since="24" />
+		<field name="KEY_AAC_DRC_ALBUM_MODE" since="30" />
+		<field name="KEY_AAC_DRC_ATTENUATION_FACTOR" since="21" />
+		<field name="KEY_AAC_DRC_BOOST_FACTOR" since="21" />
+		<field name="KEY_AAC_DRC_EFFECT_TYPE" since="28" />
+		<field name="KEY_AAC_DRC_HEAVY_COMPRESSION" since="21" />
+		<field name="KEY_AAC_DRC_OUTPUT_LOUDNESS" since="30" />
+		<field name="KEY_AAC_DRC_TARGET_REFERENCE_LEVEL" since="21" />
+		<field name="KEY_AAC_ENCODED_TARGET_LEVEL" since="21" />
+		<field name="KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT" since="21" />
+		<field name="KEY_AAC_PROFILE" />
+		<field name="KEY_AAC_SBR_MODE" since="21" />
+		<field name="KEY_ALLOW_FRAME_DROP" since="31" />
+		<field name="KEY_AUDIO_SESSION_ID" since="21" />
+		<field name="KEY_BITRATE_MODE" since="21" />
+		<field name="KEY_BIT_RATE" />
+		<field name="KEY_CAPTION_SERVICE_NUMBER" since="30" />
+		<field name="KEY_CAPTURE_RATE" since="21" />
+		<field name="KEY_CHANNEL_COUNT" />
+		<field name="KEY_CHANNEL_MASK" />
+		<field name="KEY_CODECS_STRING" since="30" />
+		<field name="KEY_COLOR_FORMAT" />
+		<field name="KEY_COLOR_RANGE" since="24" />
+		<field name="KEY_COLOR_STANDARD" since="24" />
+		<field name="KEY_COLOR_TRANSFER" since="24" />
+		<field name="KEY_COLOR_TRANSFER_REQUEST" since="31" />
+		<field name="KEY_COMPLEXITY" since="21" />
+		<field name="KEY_CREATE_INPUT_SURFACE_SUSPENDED" since="29" />
+		<field name="KEY_DURATION" />
+		<field name="KEY_ENCODER_DELAY" since="30" />
+		<field name="KEY_ENCODER_PADDING" since="30" />
+		<field name="KEY_FLAC_COMPRESSION_LEVEL" />
+		<field name="KEY_FRAME_RATE" />
+		<field name="KEY_GRID_COLUMNS" since="28" />
+		<field name="KEY_GRID_ROWS" since="28" />
+		<field name="KEY_HAPTIC_CHANNEL_COUNT" since="29" />
+		<field name="KEY_HARDWARE_AV_SYNC_ID" since="30" />
+		<field name="KEY_HDR10_PLUS_INFO" since="29" />
+		<field name="KEY_HDR_STATIC_INFO" since="24" />
+		<field name="KEY_HEIGHT" />
+		<field name="KEY_INTRA_REFRESH_PERIOD" since="24" />
+		<field name="KEY_IS_ADTS" />
+		<field name="KEY_IS_AUTOSELECT" since="19" />
+		<field name="KEY_IS_DEFAULT" since="19" />
+		<field name="KEY_IS_FORCED_SUBTITLE" since="19" />
+		<field name="KEY_I_FRAME_INTERVAL" />
+		<field name="KEY_LANGUAGE" since="19" />
+		<field name="KEY_LATENCY" since="26" />
+		<field name="KEY_LEVEL" since="23" />
+		<field name="KEY_LOW_LATENCY" since="30" />
+		<field name="KEY_MAX_B_FRAMES" since="29" />
+		<field name="KEY_MAX_FPS_TO_ENCODER" since="29" />
+		<field name="KEY_MAX_HEIGHT" since="19" />
+		<field name="KEY_MAX_INPUT_SIZE" />
+		<field name="KEY_MAX_OUTPUT_CHANNEL_COUNT" since="33" />
+		<field name="KEY_MAX_PTS_GAP_TO_ENCODER" since="29" />
+		<field name="KEY_MAX_WIDTH" since="19" />
+		<field name="KEY_MIME" />
+		<field name="KEY_MPEGH_COMPATIBLE_SETS" since="31" />
+		<field name="KEY_MPEGH_PROFILE_LEVEL_INDICATION" since="31" />
+		<field name="KEY_MPEGH_REFERENCE_CHANNEL_LAYOUT" since="31" />
+		<field name="KEY_OPERATING_RATE" since="23" />
+		<field name="KEY_OUTPUT_REORDER_DEPTH" since="28" />
+		<field name="KEY_PCM_ENCODING" since="24" />
+		<field name="KEY_PIXEL_ASPECT_RATIO_HEIGHT" since="30" />
+		<field name="KEY_PIXEL_ASPECT_RATIO_WIDTH" since="30" />
+		<field name="KEY_PREPEND_HEADER_TO_SYNC_FRAMES" since="29" />
+		<field name="KEY_PRIORITY" since="23" />
+		<field name="KEY_PROFILE" since="21" />
+		<field name="KEY_PUSH_BLANK_BUFFERS_ON_STOP" since="19" />
+		<field name="KEY_QUALITY" since="28" />
+		<field name="KEY_REPEAT_PREVIOUS_FRAME_AFTER" since="19" />
+		<field name="KEY_ROTATION" since="23" />
+		<field name="KEY_SAMPLE_RATE" />
+		<field name="KEY_SLICE_HEIGHT" since="23" />
+		<field name="KEY_SLOW_MOTION_MARKERS" since="31" />
+		<field name="KEY_STRIDE" since="23" />
+		<field name="KEY_TEMPORAL_LAYERING" since="21" />
+		<field name="KEY_TILE_HEIGHT" since="28" />
+		<field name="KEY_TILE_WIDTH" since="28" />
+		<field name="KEY_TRACK_ID" since="24" />
+		<field name="KEY_VIDEO_QP_B_MAX" since="31" />
+		<field name="KEY_VIDEO_QP_B_MIN" since="31" />
+		<field name="KEY_VIDEO_QP_I_MAX" since="31" />
+		<field name="KEY_VIDEO_QP_I_MIN" since="31" />
+		<field name="KEY_VIDEO_QP_MAX" since="31" />
+		<field name="KEY_VIDEO_QP_MIN" since="31" />
+		<field name="KEY_VIDEO_QP_P_MAX" since="31" />
+		<field name="KEY_VIDEO_QP_P_MIN" since="31" />
+		<field name="KEY_WIDTH" />
+		<field name="MIMETYPE_AUDIO_AAC" since="21" />
+		<field name="MIMETYPE_AUDIO_AC3" since="21" />
+		<field name="MIMETYPE_AUDIO_AC4" since="29" />
+		<field name="MIMETYPE_AUDIO_AMR_NB" since="21" />
+		<field name="MIMETYPE_AUDIO_AMR_WB" since="21" />
+		<field name="MIMETYPE_AUDIO_EAC3" since="23" />
+		<field name="MIMETYPE_AUDIO_EAC3_JOC" since="29" />
+		<field name="MIMETYPE_AUDIO_FLAC" since="21" />
+		<field name="MIMETYPE_AUDIO_G711_ALAW" since="21" />
+		<field name="MIMETYPE_AUDIO_G711_MLAW" since="21" />
+		<field name="MIMETYPE_AUDIO_MPEG" since="21" />
+		<field name="MIMETYPE_AUDIO_MPEGH_MHA1" since="31" />
+		<field name="MIMETYPE_AUDIO_MPEGH_MHM1" since="31" />
+		<field name="MIMETYPE_AUDIO_MSGSM" since="21" />
+		<field name="MIMETYPE_AUDIO_OPUS" since="21" />
+		<field name="MIMETYPE_AUDIO_QCELP" since="21" />
+		<field name="MIMETYPE_AUDIO_RAW" since="21" />
+		<field name="MIMETYPE_AUDIO_SCRAMBLED" since="26" />
+		<field name="MIMETYPE_AUDIO_VORBIS" since="21" />
+		<field name="MIMETYPE_IMAGE_ANDROID_HEIC" since="28" />
+		<field name="MIMETYPE_TEXT_CEA_608" since="21" />
+		<field name="MIMETYPE_TEXT_CEA_708" since="28" />
+		<field name="MIMETYPE_TEXT_SUBRIP" since="28" />
+		<field name="MIMETYPE_TEXT_VTT" since="21" />
+		<field name="MIMETYPE_VIDEO_AV1" since="29" />
+		<field name="MIMETYPE_VIDEO_AVC" since="21" />
+		<field name="MIMETYPE_VIDEO_DOLBY_VISION" since="24" />
+		<field name="MIMETYPE_VIDEO_H263" since="21" />
+		<field name="MIMETYPE_VIDEO_HEVC" since="21" />
+		<field name="MIMETYPE_VIDEO_MPEG2" since="21" />
+		<field name="MIMETYPE_VIDEO_MPEG4" since="21" />
+		<field name="MIMETYPE_VIDEO_RAW" since="21" />
+		<field name="MIMETYPE_VIDEO_SCRAMBLED" since="26" />
+		<field name="MIMETYPE_VIDEO_VP8" since="21" />
+		<field name="MIMETYPE_VIDEO_VP9" since="21" />
+		<field name="TYPE_BYTE_BUFFER" since="29" />
+		<field name="TYPE_FLOAT" since="29" />
+		<field name="TYPE_INTEGER" since="29" />
+		<field name="TYPE_LONG" since="29" />
+		<field name="TYPE_NULL" since="29" />
+		<field name="TYPE_STRING" since="29" />
+	</class>
+	<class name="android/media/MediaMetadata" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="containsKey(Ljava/lang/String;)Z" />
+		<method name="getBitmap(Ljava/lang/String;)Landroid/graphics/Bitmap;" />
+		<method name="getBitmapDimensionLimit()I" since="31" />
+		<method name="getDescription()Landroid/media/MediaDescription;" />
+		<method name="getLong(Ljava/lang/String;)J" />
+		<method name="getRating(Ljava/lang/String;)Landroid/media/Rating;" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getText(Ljava/lang/String;)Ljava/lang/CharSequence;" />
+		<method name="keySet()Ljava/util/Set;" />
+		<method name="size()I" />
+		<field name="CREATOR" />
+		<field name="METADATA_KEY_ALBUM" />
+		<field name="METADATA_KEY_ALBUM_ART" />
+		<field name="METADATA_KEY_ALBUM_ARTIST" />
+		<field name="METADATA_KEY_ALBUM_ART_URI" />
+		<field name="METADATA_KEY_ART" />
+		<field name="METADATA_KEY_ARTIST" />
+		<field name="METADATA_KEY_ART_URI" />
+		<field name="METADATA_KEY_AUTHOR" />
+		<field name="METADATA_KEY_BT_FOLDER_TYPE" since="26" />
+		<field name="METADATA_KEY_COMPILATION" />
+		<field name="METADATA_KEY_COMPOSER" />
+		<field name="METADATA_KEY_DATE" />
+		<field name="METADATA_KEY_DISC_NUMBER" />
+		<field name="METADATA_KEY_DISPLAY_DESCRIPTION" />
+		<field name="METADATA_KEY_DISPLAY_ICON" />
+		<field name="METADATA_KEY_DISPLAY_ICON_URI" />
+		<field name="METADATA_KEY_DISPLAY_SUBTITLE" />
+		<field name="METADATA_KEY_DISPLAY_TITLE" />
+		<field name="METADATA_KEY_DURATION" />
+		<field name="METADATA_KEY_GENRE" />
+		<field name="METADATA_KEY_MEDIA_ID" />
+		<field name="METADATA_KEY_MEDIA_URI" since="26" />
+		<field name="METADATA_KEY_NUM_TRACKS" />
+		<field name="METADATA_KEY_RATING" />
+		<field name="METADATA_KEY_TITLE" />
+		<field name="METADATA_KEY_TRACK_NUMBER" />
+		<field name="METADATA_KEY_USER_RATING" />
+		<field name="METADATA_KEY_WRITER" />
+		<field name="METADATA_KEY_YEAR" />
+	</class>
+	<class name="android/media/MediaMetadata$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/media/MediaMetadata;)V" />
+		<method name="build()Landroid/media/MediaMetadata;" />
+		<method name="putBitmap(Ljava/lang/String;Landroid/graphics/Bitmap;)Landroid/media/MediaMetadata$Builder;" />
+		<method name="putLong(Ljava/lang/String;J)Landroid/media/MediaMetadata$Builder;" />
+		<method name="putRating(Ljava/lang/String;Landroid/media/Rating;)Landroid/media/MediaMetadata$Builder;" />
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaMetadata$Builder;" />
+		<method name="putText(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/media/MediaMetadata$Builder;" />
+		<method name="setBitmapDimensionLimit(I)Landroid/media/MediaMetadata$Builder;" since="31" />
+	</class>
+	<class name="android/media/MediaMetadataEditor" since="19" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="addEditableKey(I)V" deprecated="29" />
+		<method name="apply()V" deprecated="29" />
+		<method name="clear()V" deprecated="29" />
+		<method name="getBitmap(ILandroid/graphics/Bitmap;)Landroid/graphics/Bitmap;" deprecated="29" />
+		<method name="getEditableKeys()[I" deprecated="29" />
+		<method name="getLong(IJ)J" deprecated="29" />
+		<method name="getObject(ILjava/lang/Object;)Ljava/lang/Object;" deprecated="29" />
+		<method name="getString(ILjava/lang/String;)Ljava/lang/String;" deprecated="29" />
+		<method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/MediaMetadataEditor;" deprecated="29" />
+		<method name="putLong(IJ)Landroid/media/MediaMetadataEditor;" deprecated="29" />
+		<method name="putObject(ILjava/lang/Object;)Landroid/media/MediaMetadataEditor;" deprecated="29" />
+		<method name="putString(ILjava/lang/String;)Landroid/media/MediaMetadataEditor;" deprecated="29" />
+		<method name="removeEditableKeys()V" deprecated="29" />
+		<field name="BITMAP_KEY_ARTWORK" deprecated="29" />
+		<field name="RATING_KEY_BY_OTHERS" deprecated="29" />
+		<field name="RATING_KEY_BY_USER" deprecated="29" />
+	</class>
+	<class name="android/media/MediaMetadataRetriever" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="29" />
+		<method name="&lt;init&gt;()V" />
+		<method name="extractMetadata(I)Ljava/lang/String;" />
+		<method name="getEmbeddedPicture()[B" />
+		<method name="getFrameAtIndex(I)Landroid/graphics/Bitmap;" since="28" />
+		<method name="getFrameAtIndex(ILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28" />
+		<method name="getFrameAtTime()Landroid/graphics/Bitmap;" />
+		<method name="getFrameAtTime(J)Landroid/graphics/Bitmap;" />
+		<method name="getFrameAtTime(JI)Landroid/graphics/Bitmap;" />
+		<method name="getFrameAtTime(JILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="30" />
+		<method name="getFramesAtIndex(II)Ljava/util/List;" since="28" />
+		<method name="getFramesAtIndex(IILandroid/media/MediaMetadataRetriever$BitmapParams;)Ljava/util/List;" since="28" />
+		<method name="getImageAtIndex(I)Landroid/graphics/Bitmap;" since="28" />
+		<method name="getImageAtIndex(ILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28" />
+		<method name="getPrimaryImage()Landroid/graphics/Bitmap;" since="28" />
+		<method name="getPrimaryImage(Landroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28" />
+		<method name="getScaledFrameAtTime(JIII)Landroid/graphics/Bitmap;" since="27" />
+		<method name="getScaledFrameAtTime(JIIILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="30" />
+		<method name="release()V" />
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;)V" />
+		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23" />
+		<method name="setDataSource(Ljava/io/FileDescriptor;)V" />
+		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V" />
+		<method name="setDataSource(Ljava/lang/String;)V" />
+		<method name="setDataSource(Ljava/lang/String;Ljava/util/Map;)V" since="14" />
+		<field name="METADATA_KEY_ALBUM" />
+		<field name="METADATA_KEY_ALBUMARTIST" />
+		<field name="METADATA_KEY_ARTIST" />
+		<field name="METADATA_KEY_AUTHOR" />
+		<field name="METADATA_KEY_BITRATE" since="14" />
+		<field name="METADATA_KEY_BITS_PER_SAMPLE" since="31" />
+		<field name="METADATA_KEY_CAPTURE_FRAMERATE" since="23" />
+		<field name="METADATA_KEY_CD_TRACK_NUMBER" />
+		<field name="METADATA_KEY_COLOR_RANGE" since="30" />
+		<field name="METADATA_KEY_COLOR_STANDARD" since="30" />
+		<field name="METADATA_KEY_COLOR_TRANSFER" since="30" />
+		<field name="METADATA_KEY_COMPILATION" />
+		<field name="METADATA_KEY_COMPOSER" />
+		<field name="METADATA_KEY_DATE" />
+		<field name="METADATA_KEY_DISC_NUMBER" />
+		<field name="METADATA_KEY_DURATION" />
+		<field name="METADATA_KEY_EXIF_LENGTH" since="29" />
+		<field name="METADATA_KEY_EXIF_OFFSET" since="29" />
+		<field name="METADATA_KEY_GENRE" />
+		<field name="METADATA_KEY_HAS_AUDIO" since="14" />
+		<field name="METADATA_KEY_HAS_IMAGE" since="28" />
+		<field name="METADATA_KEY_HAS_VIDEO" since="14" />
+		<field name="METADATA_KEY_IMAGE_COUNT" since="28" />
+		<field name="METADATA_KEY_IMAGE_HEIGHT" since="28" />
+		<field name="METADATA_KEY_IMAGE_PRIMARY" since="28" />
+		<field name="METADATA_KEY_IMAGE_ROTATION" since="28" />
+		<field name="METADATA_KEY_IMAGE_WIDTH" since="28" />
+		<field name="METADATA_KEY_LOCATION" since="15" />
+		<field name="METADATA_KEY_MIMETYPE" />
+		<field name="METADATA_KEY_NUM_TRACKS" />
+		<field name="METADATA_KEY_SAMPLERATE" since="31" />
+		<field name="METADATA_KEY_TITLE" />
+		<field name="METADATA_KEY_VIDEO_FRAME_COUNT" since="28" />
+		<field name="METADATA_KEY_VIDEO_HEIGHT" since="14" />
+		<field name="METADATA_KEY_VIDEO_ROTATION" since="17" />
+		<field name="METADATA_KEY_VIDEO_WIDTH" since="14" />
+		<field name="METADATA_KEY_WRITER" />
+		<field name="METADATA_KEY_XMP_LENGTH" since="31" />
+		<field name="METADATA_KEY_XMP_OFFSET" since="31" />
+		<field name="METADATA_KEY_YEAR" />
+		<field name="OPTION_CLOSEST" />
+		<field name="OPTION_CLOSEST_SYNC" />
+		<field name="OPTION_NEXT_SYNC" />
+		<field name="OPTION_PREVIOUS_SYNC" />
+	</class>
+	<class name="android/media/MediaMetadataRetriever$BitmapParams" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getActualConfig()Landroid/graphics/Bitmap$Config;" />
+		<method name="getPreferredConfig()Landroid/graphics/Bitmap$Config;" />
+		<method name="setPreferredConfig(Landroid/graphics/Bitmap$Config;)V" />
+	</class>
+	<class name="android/media/MediaMuxer" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;I)V" since="26" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="addTrack(Landroid/media/MediaFormat;)I" />
+		<method name="release()V" />
+		<method name="setLocation(FF)V" since="19" />
+		<method name="setOrientationHint(I)V" />
+		<method name="start()V" />
+		<method name="stop()V" />
+		<method name="writeSampleData(ILjava/nio/ByteBuffer;Landroid/media/MediaCodec$BufferInfo;)V" />
+	</class>
+	<class name="android/media/MediaMuxer$OutputFormat" since="18">
+		<extends name="java/lang/Object" />
+		<field name="MUXER_OUTPUT_3GPP" since="26" />
+		<field name="MUXER_OUTPUT_HEIF" since="28" />
+		<field name="MUXER_OUTPUT_MPEG_4" />
+		<field name="MUXER_OUTPUT_OGG" since="29" />
+		<field name="MUXER_OUTPUT_WEBM" since="21" />
+	</class>
+	<class name="android/media/MediaPlayer" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/AudioRouting" since="28" />
+		<implements name="android/media/VolumeAutomation" since="26" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addTimedTextSource(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;)V" since="16" />
+		<method name="addTimedTextSource(Ljava/io/FileDescriptor;JJLjava/lang/String;)V" since="16" />
+		<method name="addTimedTextSource(Ljava/io/FileDescriptor;Ljava/lang/String;)V" since="16" />
+		<method name="addTimedTextSource(Ljava/lang/String;Ljava/lang/String;)V" since="16" />
+		<method name="attachAuxEffect(I)V" since="9" />
+		<method name="clearOnMediaTimeDiscontinuityListener()V" since="28" />
+		<method name="clearOnSubtitleDataListener()V" since="28" />
+		<method name="create(Landroid/content/Context;I)Landroid/media/MediaPlayer;" />
+		<method name="create(Landroid/content/Context;ILandroid/media/AudioAttributes;I)Landroid/media/MediaPlayer;" since="21" />
+		<method name="create(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/MediaPlayer;" />
+		<method name="create(Landroid/content/Context;Landroid/net/Uri;Landroid/view/SurfaceHolder;)Landroid/media/MediaPlayer;" />
+		<method name="create(Landroid/content/Context;Landroid/net/Uri;Landroid/view/SurfaceHolder;Landroid/media/AudioAttributes;I)Landroid/media/MediaPlayer;" since="21" />
+		<method name="deselectTrack(I)V" since="16" />
+		<method name="getAudioSessionId()I" since="9" />
+		<method name="getCurrentPosition()I" />
+		<method name="getDrmInfo()Landroid/media/MediaPlayer$DrmInfo;" since="26" />
+		<method name="getDrmPropertyString(Ljava/lang/String;)Ljava/lang/String;" since="26" />
+		<method name="getDuration()I" />
+		<method name="getKeyRequest([B[BLjava/lang/String;ILjava/util/Map;)Landroid/media/MediaDrm$KeyRequest;" since="26" />
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26" />
+		<method name="getPlaybackParams()Landroid/media/PlaybackParams;" since="23" />
+		<method name="getSelectedTrack(I)I" since="21" />
+		<method name="getSyncParams()Landroid/media/SyncParams;" since="23" />
+		<method name="getTimestamp()Landroid/media/MediaTimestamp;" since="23" />
+		<method name="getTrackInfo()[Landroid/media/MediaPlayer$TrackInfo;" since="16" />
+		<method name="getVideoHeight()I" />
+		<method name="getVideoWidth()I" />
+		<method name="isLooping()Z" since="3" />
+		<method name="isPlaying()Z" />
+		<method name="pause()V" />
+		<method name="prepare()V" />
+		<method name="prepareAsync()V" />
+		<method name="prepareDrm(Ljava/util/UUID;)V" since="26" />
+		<method name="provideKeyResponse([B[B)[B" since="26" />
+		<method name="release()V" />
+		<method name="releaseDrm()V" since="26" />
+		<method name="reset()V" />
+		<method name="restoreKeys([B)V" since="26" />
+		<method name="seekTo(I)V" />
+		<method name="seekTo(JI)V" since="26" />
+		<method name="selectTrack(I)V" since="16" />
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="21" />
+		<method name="setAudioSessionId(I)V" since="9" />
+		<method name="setAudioStreamType(I)V" deprecated="26" />
+		<method name="setAuxEffectSendLevel(F)V" since="9" />
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;)V" />
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;)V" since="14" />
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;Ljava/util/List;)V" since="26" />
+		<method name="setDataSource(Landroid/content/res/AssetFileDescriptor;)V" since="24" />
+		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23" />
+		<method name="setDataSource(Ljava/io/FileDescriptor;)V" />
+		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V" />
+		<method name="setDataSource(Ljava/lang/String;)V" />
+		<method name="setDisplay(Landroid/view/SurfaceHolder;)V" />
+		<method name="setDrmPropertyString(Ljava/lang/String;Ljava/lang/String;)V" since="26" />
+		<method name="setLooping(Z)V" />
+		<method name="setNextMediaPlayer(Landroid/media/MediaPlayer;)V" since="16" />
+		<method name="setOnBufferingUpdateListener(Landroid/media/MediaPlayer$OnBufferingUpdateListener;)V" />
+		<method name="setOnCompletionListener(Landroid/media/MediaPlayer$OnCompletionListener;)V" />
+		<method name="setOnDrmConfigHelper(Landroid/media/MediaPlayer$OnDrmConfigHelper;)V" since="26" />
+		<method name="setOnDrmInfoListener(Landroid/media/MediaPlayer$OnDrmInfoListener;)V" since="26" />
+		<method name="setOnDrmInfoListener(Landroid/media/MediaPlayer$OnDrmInfoListener;Landroid/os/Handler;)V" since="26" />
+		<method name="setOnDrmPreparedListener(Landroid/media/MediaPlayer$OnDrmPreparedListener;)V" since="26" />
+		<method name="setOnDrmPreparedListener(Landroid/media/MediaPlayer$OnDrmPreparedListener;Landroid/os/Handler;)V" since="26" />
+		<method name="setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V" />
+		<method name="setOnInfoListener(Landroid/media/MediaPlayer$OnInfoListener;)V" since="3" />
+		<method name="setOnMediaTimeDiscontinuityListener(Landroid/media/MediaPlayer$OnMediaTimeDiscontinuityListener;)V" since="28" />
+		<method name="setOnMediaTimeDiscontinuityListener(Landroid/media/MediaPlayer$OnMediaTimeDiscontinuityListener;Landroid/os/Handler;)V" since="28" />
+		<method name="setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V" />
+		<method name="setOnSeekCompleteListener(Landroid/media/MediaPlayer$OnSeekCompleteListener;)V" />
+		<method name="setOnSubtitleDataListener(Landroid/media/MediaPlayer$OnSubtitleDataListener;)V" since="28" />
+		<method name="setOnSubtitleDataListener(Landroid/media/MediaPlayer$OnSubtitleDataListener;Landroid/os/Handler;)V" since="28" />
+		<method name="setOnTimedMetaDataAvailableListener(Landroid/media/MediaPlayer$OnTimedMetaDataAvailableListener;)V" since="23" />
+		<method name="setOnTimedTextListener(Landroid/media/MediaPlayer$OnTimedTextListener;)V" since="16" />
+		<method name="setOnVideoSizeChangedListener(Landroid/media/MediaPlayer$OnVideoSizeChangedListener;)V" since="3" />
+		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" since="23" />
+		<method name="setScreenOnWhilePlaying(Z)V" />
+		<method name="setSurface(Landroid/view/Surface;)V" since="14" />
+		<method name="setSyncParams(Landroid/media/SyncParams;)V" since="23" />
+		<method name="setVideoScalingMode(I)V" since="16" />
+		<method name="setVolume(FF)V" />
+		<method name="setWakeMode(Landroid/content/Context;I)V" />
+		<method name="start()V" />
+		<method name="stop()V" />
+		<field name="MEDIA_ERROR_IO" since="17" />
+		<field name="MEDIA_ERROR_MALFORMED" since="17" />
+		<field name="MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK" since="3" />
+		<field name="MEDIA_ERROR_SERVER_DIED" />
+		<field name="MEDIA_ERROR_TIMED_OUT" since="17" />
+		<field name="MEDIA_ERROR_UNKNOWN" />
+		<field name="MEDIA_ERROR_UNSUPPORTED" since="17" />
+		<field name="MEDIA_INFO_AUDIO_NOT_PLAYING" since="26" />
+		<field name="MEDIA_INFO_BAD_INTERLEAVING" since="3" />
+		<field name="MEDIA_INFO_BUFFERING_END" since="9" />
+		<field name="MEDIA_INFO_BUFFERING_START" since="9" />
+		<field name="MEDIA_INFO_METADATA_UPDATE" since="5" />
+		<field name="MEDIA_INFO_NOT_SEEKABLE" since="3" />
+		<field name="MEDIA_INFO_STARTED_AS_NEXT" since="28" />
+		<field name="MEDIA_INFO_SUBTITLE_TIMED_OUT" since="19" />
+		<field name="MEDIA_INFO_UNKNOWN" since="3" />
+		<field name="MEDIA_INFO_UNSUPPORTED_SUBTITLE" since="19" />
+		<field name="MEDIA_INFO_VIDEO_NOT_PLAYING" since="26" />
+		<field name="MEDIA_INFO_VIDEO_RENDERING_START" since="17" />
+		<field name="MEDIA_INFO_VIDEO_TRACK_LAGGING" since="3" />
+		<field name="MEDIA_MIMETYPE_TEXT_SUBRIP" since="16" deprecated="28" />
+		<field name="PREPARE_DRM_STATUS_PREPARATION_ERROR" since="26" />
+		<field name="PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR" since="26" />
+		<field name="PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR" since="26" />
+		<field name="PREPARE_DRM_STATUS_SUCCESS" since="26" />
+		<field name="SEEK_CLOSEST" since="26" />
+		<field name="SEEK_CLOSEST_SYNC" since="26" />
+		<field name="SEEK_NEXT_SYNC" since="26" />
+		<field name="SEEK_PREVIOUS_SYNC" since="26" />
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT" since="16" />
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING" since="16" />
+	</class>
+	<class name="android/media/MediaPlayer$DrmInfo" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getPssh()Ljava/util/Map;" />
+		<method name="getSupportedSchemes()[Ljava/util/UUID;" />
+	</class>
+	<class name="android/media/MediaPlayer$MetricsConstants" since="26">
+		<extends name="java/lang/Object" />
+		<field name="CODEC_AUDIO" />
+		<field name="CODEC_VIDEO" />
+		<field name="DURATION" />
+		<field name="ERRORS" />
+		<field name="ERROR_CODE" />
+		<field name="FRAMES" />
+		<field name="FRAMES_DROPPED" />
+		<field name="HEIGHT" />
+		<field name="MIME_TYPE_AUDIO" />
+		<field name="MIME_TYPE_VIDEO" />
+		<field name="PLAYING" />
+		<field name="WIDTH" />
+	</class>
+	<class name="android/media/MediaPlayer$NoDrmSchemeException" since="26">
+		<extends name="android/media/MediaDrmException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnBufferingUpdateListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onBufferingUpdate(Landroid/media/MediaPlayer;I)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnCompletionListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onCompletion(Landroid/media/MediaPlayer;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnDrmConfigHelper" since="26">
+		<extends name="java/lang/Object" />
+		<method name="onDrmConfig(Landroid/media/MediaPlayer;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnDrmInfoListener" since="26">
+		<extends name="java/lang/Object" />
+		<method name="onDrmInfo(Landroid/media/MediaPlayer;Landroid/media/MediaPlayer$DrmInfo;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnDrmPreparedListener" since="26">
+		<extends name="java/lang/Object" />
+		<method name="onDrmPrepared(Landroid/media/MediaPlayer;I)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnErrorListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onError(Landroid/media/MediaPlayer;II)Z" />
+	</class>
+	<class name="android/media/MediaPlayer$OnInfoListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onInfo(Landroid/media/MediaPlayer;II)Z" />
+	</class>
+	<class name="android/media/MediaPlayer$OnMediaTimeDiscontinuityListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onMediaTimeDiscontinuity(Landroid/media/MediaPlayer;Landroid/media/MediaTimestamp;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnPreparedListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onPrepared(Landroid/media/MediaPlayer;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnSeekCompleteListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onSeekComplete(Landroid/media/MediaPlayer;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnSubtitleDataListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onSubtitleData(Landroid/media/MediaPlayer;Landroid/media/SubtitleData;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnTimedMetaDataAvailableListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onTimedMetaDataAvailable(Landroid/media/MediaPlayer;Landroid/media/TimedMetaData;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnTimedTextListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onTimedText(Landroid/media/MediaPlayer;Landroid/media/TimedText;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$OnVideoSizeChangedListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onVideoSizeChanged(Landroid/media/MediaPlayer;II)V" />
+	</class>
+	<class name="android/media/MediaPlayer$ProvisioningNetworkErrorException" since="26">
+		<extends name="android/media/MediaDrmException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$ProvisioningServerErrorException" since="26">
+		<extends name="android/media/MediaDrmException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/MediaPlayer$TrackInfo" since="16">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFormat()Landroid/media/MediaFormat;" since="19" />
+		<method name="getLanguage()Ljava/lang/String;" />
+		<method name="getTrackType()I" />
+		<field name="MEDIA_TRACK_TYPE_AUDIO" />
+		<field name="MEDIA_TRACK_TYPE_METADATA" since="23" />
+		<field name="MEDIA_TRACK_TYPE_SUBTITLE" since="21" />
+		<field name="MEDIA_TRACK_TYPE_TIMEDTEXT" />
+		<field name="MEDIA_TRACK_TYPE_UNKNOWN" />
+		<field name="MEDIA_TRACK_TYPE_VIDEO" />
+	</class>
+	<class name="android/media/MediaRecorder" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/AudioRecordingMonitor" since="29" />
+		<implements name="android/media/AudioRouting" since="28" />
+		<implements name="android/media/MicrophoneDirection" since="29" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" since="31" />
+		<method name="getActiveMicrophones()Ljava/util/List;" since="28" />
+		<method name="getAudioSourceMax()I" since="4" />
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31" />
+		<method name="getMaxAmplitude()I" />
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26" />
+		<method name="getSurface()Landroid/view/Surface;" since="21" />
+		<method name="isPrivacySensitive()Z" since="30" />
+		<method name="pause()V" since="24" />
+		<method name="prepare()V" />
+		<method name="release()V" />
+		<method name="reset()V" />
+		<method name="resume()V" since="24" />
+		<method name="setAudioChannels(I)V" since="8" />
+		<method name="setAudioEncoder(I)V" />
+		<method name="setAudioEncodingBitRate(I)V" since="8" />
+		<method name="setAudioProfile(Landroid/media/EncoderProfiles$AudioProfile;)V" since="31" />
+		<method name="setAudioSamplingRate(I)V" since="8" />
+		<method name="setAudioSource(I)V" />
+		<method name="setAuxiliaryOutputFile(Ljava/io/FileDescriptor;)V" since="11" deprecated="15" removed="16" />
+		<method name="setAuxiliaryOutputFile(Ljava/lang/String;)V" since="11" deprecated="15" removed="16" />
+		<method name="setCamera(Landroid/hardware/Camera;)V" since="3" deprecated="21" />
+		<method name="setCaptureRate(D)V" since="11" />
+		<method name="setInputSurface(Landroid/view/Surface;)V" since="23" />
+		<method name="setLocation(FF)V" since="14" />
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31" />
+		<method name="setMaxDuration(I)V" since="3" />
+		<method name="setMaxFileSize(J)V" since="3" />
+		<method name="setNextOutputFile(Ljava/io/File;)V" since="26" />
+		<method name="setNextOutputFile(Ljava/io/FileDescriptor;)V" since="26" />
+		<method name="setOnErrorListener(Landroid/media/MediaRecorder$OnErrorListener;)V" since="3" />
+		<method name="setOnInfoListener(Landroid/media/MediaRecorder$OnInfoListener;)V" since="3" />
+		<method name="setOrientationHint(I)V" since="9" />
+		<method name="setOutputFile(Ljava/io/File;)V" since="26" />
+		<method name="setOutputFile(Ljava/io/FileDescriptor;)V" since="3" />
+		<method name="setOutputFile(Ljava/lang/String;)V" />
+		<method name="setOutputFormat(I)V" />
+		<method name="setPreviewDisplay(Landroid/view/Surface;)V" />
+		<method name="setPrivacySensitive(Z)V" since="30" />
+		<method name="setProfile(Landroid/media/CamcorderProfile;)V" since="8" />
+		<method name="setVideoEncoder(I)V" since="3" />
+		<method name="setVideoEncodingBitRate(I)V" since="8" />
+		<method name="setVideoEncodingProfileLevel(II)V" since="26" />
+		<method name="setVideoFrameRate(I)V" since="3" />
+		<method name="setVideoProfile(Landroid/media/EncoderProfiles$VideoProfile;)V" since="31" />
+		<method name="setVideoSize(II)V" since="3" />
+		<method name="setVideoSource(I)V" since="3" />
+		<method name="start()V" />
+		<method name="stop()V" />
+		<field name="MEDIA_ERROR_SERVER_DIED" since="17" />
+		<field name="MEDIA_RECORDER_ERROR_UNKNOWN" since="3" />
+		<field name="MEDIA_RECORDER_INFO_MAX_DURATION_REACHED" since="3" />
+		<field name="MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING" since="26" />
+		<field name="MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED" since="3" />
+		<field name="MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED" since="26" />
+		<field name="MEDIA_RECORDER_INFO_UNKNOWN" since="3" />
+	</class>
+	<class name="android/media/MediaRecorder$AudioEncoder" since="1">
+		<extends name="java/lang/Object" />
+		<field name="AAC" since="10" />
+		<field name="AAC_ELD" since="16" />
+		<field name="AMR_NB" />
+		<field name="AMR_WB" since="10" />
+		<field name="DEFAULT" />
+		<field name="HE_AAC" since="16" />
+		<field name="OPUS" since="29" />
+		<field name="VORBIS" since="21" />
+	</class>
+	<class name="android/media/MediaRecorder$AudioSource" since="1">
+		<extends name="java/lang/Object" />
+		<field name="CAMCORDER" since="7" />
+		<field name="DEFAULT" />
+		<field name="MIC" />
+		<field name="REMOTE_SUBMIX" since="19" />
+		<field name="UNPROCESSED" since="24" />
+		<field name="VOICE_CALL" since="4" />
+		<field name="VOICE_COMMUNICATION" since="11" />
+		<field name="VOICE_DOWNLINK" since="4" />
+		<field name="VOICE_PERFORMANCE" since="29" />
+		<field name="VOICE_RECOGNITION" since="7" />
+		<field name="VOICE_UPLINK" since="4" />
+	</class>
+	<class name="android/media/MediaRecorder$MetricsConstants" since="26">
+		<extends name="java/lang/Object" />
+		<field name="AUDIO_BITRATE" />
+		<field name="AUDIO_CHANNELS" />
+		<field name="AUDIO_SAMPLERATE" />
+		<field name="AUDIO_TIMESCALE" />
+		<field name="CAPTURE_FPS" />
+		<field name="CAPTURE_FPS_ENABLE" />
+		<field name="FRAMERATE" />
+		<field name="HEIGHT" />
+		<field name="MOVIE_TIMESCALE" />
+		<field name="ROTATION" />
+		<field name="VIDEO_BITRATE" />
+		<field name="VIDEO_IFRAME_INTERVAL" />
+		<field name="VIDEO_LEVEL" />
+		<field name="VIDEO_PROFILE" />
+		<field name="VIDEO_TIMESCALE" />
+		<field name="WIDTH" />
+	</class>
+	<class name="android/media/MediaRecorder$OnErrorListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onError(Landroid/media/MediaRecorder;II)V" />
+	</class>
+	<class name="android/media/MediaRecorder$OnInfoListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onInfo(Landroid/media/MediaRecorder;II)V" />
+	</class>
+	<class name="android/media/MediaRecorder$OutputFormat" since="1">
+		<extends name="java/lang/Object" />
+		<field name="AAC_ADTS" since="16" />
+		<field name="AMR_NB" since="10" />
+		<field name="AMR_WB" since="10" />
+		<field name="DEFAULT" />
+		<field name="MPEG_2_TS" since="26" />
+		<field name="MPEG_4" />
+		<field name="OGG" since="29" />
+		<field name="RAW_AMR" since="3" deprecated="16" />
+		<field name="THREE_GPP" />
+		<field name="WEBM" since="21" />
+	</class>
+	<class name="android/media/MediaRecorder$VideoEncoder" since="3">
+		<extends name="java/lang/Object" />
+		<field name="DEFAULT" />
+		<field name="H263" />
+		<field name="H264" />
+		<field name="HEVC" since="24" />
+		<field name="MPEG_4_SP" />
+		<field name="VP8" since="21" />
+	</class>
+	<class name="android/media/MediaRecorder$VideoSource" since="3">
+		<extends name="java/lang/Object" />
+		<field name="CAMERA" />
+		<field name="DEFAULT" />
+		<field name="SURFACE" since="21" />
+	</class>
+	<class name="android/media/MediaRoute2Info" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getClientPackageName()Ljava/lang/String;" />
+		<method name="getConnectionState()I" />
+		<method name="getDescription()Ljava/lang/CharSequence;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getFeatures()Ljava/util/List;" />
+		<method name="getIconUri()Landroid/net/Uri;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="getVolume()I" />
+		<method name="getVolumeHandling()I" />
+		<method name="getVolumeMax()I" />
+		<method name="isSystemRoute()Z" />
+		<field name="CONNECTION_STATE_CONNECTED" />
+		<field name="CONNECTION_STATE_CONNECTING" />
+		<field name="CONNECTION_STATE_DISCONNECTED" />
+		<field name="CREATOR" />
+		<field name="FEATURE_LIVE_AUDIO" />
+		<field name="FEATURE_LIVE_VIDEO" />
+		<field name="FEATURE_REMOTE_AUDIO_PLAYBACK" />
+		<field name="FEATURE_REMOTE_PLAYBACK" />
+		<field name="FEATURE_REMOTE_VIDEO_PLAYBACK" />
+		<field name="PLAYBACK_VOLUME_FIXED" />
+		<field name="PLAYBACK_VOLUME_VARIABLE" />
+	</class>
+	<class name="android/media/MediaRoute2Info$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/media/MediaRoute2Info;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/CharSequence;)V" />
+		<method name="addFeature(Ljava/lang/String;)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="addFeatures(Ljava/util/Collection;)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="build()Landroid/media/MediaRoute2Info;" />
+		<method name="clearFeatures()Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setClientPackageName(Ljava/lang/String;)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setConnectionState(I)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setIconUri(Landroid/net/Uri;)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setVolume(I)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setVolumeHandling(I)Landroid/media/MediaRoute2Info$Builder;" />
+		<method name="setVolumeMax(I)Landroid/media/MediaRoute2Info$Builder;" />
+	</class>
+	<class name="android/media/MediaRoute2ProviderService" since="30">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAllSessionInfo()Ljava/util/List;" />
+		<method name="getSessionInfo(Ljava/lang/String;)Landroid/media/RoutingSessionInfo;" />
+		<method name="notifyRequestFailed(JI)V" />
+		<method name="notifyRoutes(Ljava/util/Collection;)V" />
+		<method name="notifySessionCreated(JLandroid/media/RoutingSessionInfo;)V" />
+		<method name="notifySessionReleased(Ljava/lang/String;)V" />
+		<method name="notifySessionUpdated(Landroid/media/RoutingSessionInfo;)V" />
+		<method name="onCreateSession(JLjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="onDeselectRoute(JLjava/lang/String;Ljava/lang/String;)V" />
+		<method name="onDiscoveryPreferenceChanged(Landroid/media/RouteDiscoveryPreference;)V" />
+		<method name="onReleaseSession(JLjava/lang/String;)V" />
+		<method name="onSelectRoute(JLjava/lang/String;Ljava/lang/String;)V" />
+		<method name="onSetRouteVolume(JLjava/lang/String;I)V" />
+		<method name="onSetSessionVolume(JLjava/lang/String;I)V" />
+		<method name="onTransferToRoute(JLjava/lang/String;Ljava/lang/String;)V" />
+		<field name="REASON_INVALID_COMMAND" />
+		<field name="REASON_NETWORK_ERROR" />
+		<field name="REASON_REJECTED" />
+		<field name="REASON_ROUTE_NOT_AVAILABLE" />
+		<field name="REASON_UNKNOWN_ERROR" />
+		<field name="REQUEST_ID_NONE" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/media/MediaRouter" since="16">
+		<extends name="java/lang/Object" />
+		<method name="addCallback(ILandroid/media/MediaRouter$Callback;)V" />
+		<method name="addCallback(ILandroid/media/MediaRouter$Callback;I)V" since="18" />
+		<method name="addUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V" />
+		<method name="clearUserRoutes()V" />
+		<method name="createRouteCategory(IZ)Landroid/media/MediaRouter$RouteCategory;" />
+		<method name="createRouteCategory(Ljava/lang/CharSequence;Z)Landroid/media/MediaRouter$RouteCategory;" />
+		<method name="createUserRoute(Landroid/media/MediaRouter$RouteCategory;)Landroid/media/MediaRouter$UserRouteInfo;" />
+		<method name="getCategoryAt(I)Landroid/media/MediaRouter$RouteCategory;" />
+		<method name="getCategoryCount()I" />
+		<method name="getDefaultRoute()Landroid/media/MediaRouter$RouteInfo;" since="18" />
+		<method name="getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;" />
+		<method name="getRouteCount()I" />
+		<method name="getSelectedRoute(I)Landroid/media/MediaRouter$RouteInfo;" />
+		<method name="removeCallback(Landroid/media/MediaRouter$Callback;)V" />
+		<method name="removeUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V" />
+		<method name="selectRoute(ILandroid/media/MediaRouter$RouteInfo;)V" />
+		<field name="CALLBACK_FLAG_PERFORM_ACTIVE_SCAN" since="18" />
+		<field name="CALLBACK_FLAG_UNFILTERED_EVENTS" since="18" />
+		<field name="ROUTE_TYPE_LIVE_AUDIO" />
+		<field name="ROUTE_TYPE_LIVE_VIDEO" since="17" />
+		<field name="ROUTE_TYPE_USER" />
+	</class>
+	<class name="android/media/MediaRouter$Callback" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onRouteAdded(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V" />
+		<method name="onRouteChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V" />
+		<method name="onRouteGrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;I)V" />
+		<method name="onRoutePresentationDisplayChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V" since="17" />
+		<method name="onRouteRemoved(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V" />
+		<method name="onRouteSelected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V" />
+		<method name="onRouteUngrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;)V" />
+		<method name="onRouteUnselected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V" />
+		<method name="onRouteVolumeChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V" />
+	</class>
+	<class name="android/media/MediaRouter$RouteCategory" since="16">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="getName(Landroid/content/Context;)Ljava/lang/CharSequence;" />
+		<method name="getRoutes(Ljava/util/List;)Ljava/util/List;" />
+		<method name="getSupportedTypes()I" />
+		<method name="isGroupable()Z" />
+	</class>
+	<class name="android/media/MediaRouter$RouteGroup" since="16">
+		<extends name="android/media/MediaRouter$RouteInfo" />
+		<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;)V" />
+		<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;I)V" />
+		<method name="getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;" />
+		<method name="getRouteCount()I" />
+		<method name="removeRoute(I)V" />
+		<method name="removeRoute(Landroid/media/MediaRouter$RouteInfo;)V" />
+		<method name="setIconDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setIconResource(I)V" />
+	</class>
+	<class name="android/media/MediaRouter$RouteInfo" since="16">
+		<extends name="java/lang/Object" />
+		<method name="getCategory()Landroid/media/MediaRouter$RouteCategory;" />
+		<method name="getDescription()Ljava/lang/CharSequence;" since="18" />
+		<method name="getDeviceType()I" since="24" />
+		<method name="getGroup()Landroid/media/MediaRouter$RouteGroup;" />
+		<method name="getIconDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="getName(Landroid/content/Context;)Ljava/lang/CharSequence;" />
+		<method name="getPlaybackStream()I" />
+		<method name="getPlaybackType()I" />
+		<method name="getPresentationDisplay()Landroid/view/Display;" since="17" />
+		<method name="getStatus()Ljava/lang/CharSequence;" />
+		<method name="getSupportedTypes()I" />
+		<method name="getTag()Ljava/lang/Object;" />
+		<method name="getVolume()I" />
+		<method name="getVolumeHandling()I" />
+		<method name="getVolumeMax()I" />
+		<method name="isConnecting()Z" since="18" />
+		<method name="isEnabled()Z" since="17" />
+		<method name="requestSetVolume(I)V" />
+		<method name="requestUpdateVolume(I)V" />
+		<method name="setTag(Ljava/lang/Object;)V" />
+		<field name="DEVICE_TYPE_BLUETOOTH" since="24" />
+		<field name="DEVICE_TYPE_SPEAKER" since="24" />
+		<field name="DEVICE_TYPE_TV" since="24" />
+		<field name="DEVICE_TYPE_UNKNOWN" since="24" />
+		<field name="PLAYBACK_TYPE_LOCAL" />
+		<field name="PLAYBACK_TYPE_REMOTE" />
+		<field name="PLAYBACK_VOLUME_FIXED" />
+		<field name="PLAYBACK_VOLUME_VARIABLE" />
+	</class>
+	<class name="android/media/MediaRouter$SimpleCallback" since="16">
+		<extends name="android/media/MediaRouter$Callback" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/media/MediaRouter$UserRouteInfo" since="16">
+		<extends name="android/media/MediaRouter$RouteInfo" />
+		<method name="getRemoteControlClient()Landroid/media/RemoteControlClient;" />
+		<method name="setDescription(Ljava/lang/CharSequence;)V" since="18" />
+		<method name="setIconDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setIconResource(I)V" />
+		<method name="setName(I)V" />
+		<method name="setName(Ljava/lang/CharSequence;)V" />
+		<method name="setPlaybackStream(I)V" />
+		<method name="setPlaybackType(I)V" />
+		<method name="setRemoteControlClient(Landroid/media/RemoteControlClient;)V" />
+		<method name="setStatus(Ljava/lang/CharSequence;)V" />
+		<method name="setVolume(I)V" />
+		<method name="setVolumeCallback(Landroid/media/MediaRouter$VolumeCallback;)V" />
+		<method name="setVolumeHandling(I)V" />
+		<method name="setVolumeMax(I)V" />
+	</class>
+	<class name="android/media/MediaRouter$VolumeCallback" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onVolumeSetRequest(Landroid/media/MediaRouter$RouteInfo;I)V" />
+		<method name="onVolumeUpdateRequest(Landroid/media/MediaRouter$RouteInfo;I)V" />
+	</class>
+	<class name="android/media/MediaRouter2" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getController(Ljava/lang/String;)Landroid/media/MediaRouter2$RoutingController;" since="31" />
+		<method name="getControllers()Ljava/util/List;" />
+		<method name="getInstance(Landroid/content/Context;)Landroid/media/MediaRouter2;" />
+		<method name="getRoutes()Ljava/util/List;" />
+		<method name="getSystemController()Landroid/media/MediaRouter2$RoutingController;" />
+		<method name="registerControllerCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaRouter2$ControllerCallback;)V" />
+		<method name="registerRouteCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaRouter2$RouteCallback;Landroid/media/RouteDiscoveryPreference;)V" />
+		<method name="registerTransferCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaRouter2$TransferCallback;)V" />
+		<method name="setOnGetControllerHintsListener(Landroid/media/MediaRouter2$OnGetControllerHintsListener;)V" />
+		<method name="stop()V" />
+		<method name="transferTo(Landroid/media/MediaRoute2Info;)V" />
+		<method name="unregisterControllerCallback(Landroid/media/MediaRouter2$ControllerCallback;)V" />
+		<method name="unregisterRouteCallback(Landroid/media/MediaRouter2$RouteCallback;)V" />
+		<method name="unregisterTransferCallback(Landroid/media/MediaRouter2$TransferCallback;)V" />
+	</class>
+	<class name="android/media/MediaRouter2$ControllerCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onControllerUpdated(Landroid/media/MediaRouter2$RoutingController;)V" />
+	</class>
+	<class name="android/media/MediaRouter2$OnGetControllerHintsListener" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onGetControllerHints(Landroid/media/MediaRoute2Info;)Landroid/os/Bundle;" />
+	</class>
+	<class name="android/media/MediaRouter2$RouteCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onRoutesAdded(Ljava/util/List;)V" />
+		<method name="onRoutesChanged(Ljava/util/List;)V" />
+		<method name="onRoutesRemoved(Ljava/util/List;)V" />
+	</class>
+	<class name="android/media/MediaRouter2$RoutingController" since="30">
+		<extends name="java/lang/Object" />
+		<method name="deselectRoute(Landroid/media/MediaRoute2Info;)V" />
+		<method name="getControlHints()Landroid/os/Bundle;" />
+		<method name="getDeselectableRoutes()Ljava/util/List;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getSelectableRoutes()Ljava/util/List;" />
+		<method name="getSelectedRoutes()Ljava/util/List;" />
+		<method name="getVolume()I" />
+		<method name="getVolumeHandling()I" />
+		<method name="getVolumeMax()I" />
+		<method name="isReleased()Z" />
+		<method name="release()V" />
+		<method name="selectRoute(Landroid/media/MediaRoute2Info;)V" />
+		<method name="setVolume(I)V" />
+	</class>
+	<class name="android/media/MediaRouter2$TransferCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onStop(Landroid/media/MediaRouter2$RoutingController;)V" />
+		<method name="onTransfer(Landroid/media/MediaRouter2$RoutingController;Landroid/media/MediaRouter2$RoutingController;)V" />
+		<method name="onTransferFailure(Landroid/media/MediaRoute2Info;)V" />
+	</class>
+	<class name="android/media/MediaScannerConnection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/ServiceConnection" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/media/MediaScannerConnection$MediaScannerConnectionClient;)V" />
+		<method name="connect()V" />
+		<method name="disconnect()V" />
+		<method name="isConnected()Z" />
+		<method name="scanFile(Landroid/content/Context;[Ljava/lang/String;[Ljava/lang/String;Landroid/media/MediaScannerConnection$OnScanCompletedListener;)V" since="8" />
+		<method name="scanFile(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/MediaScannerConnection$MediaScannerConnectionClient" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/MediaScannerConnection$OnScanCompletedListener" since="8" />
+		<method name="onMediaScannerConnected()V" />
+		<method name="onScanCompleted(Ljava/lang/String;Landroid/net/Uri;)V" removed="30" />
+	</class>
+	<class name="android/media/MediaScannerConnection$OnScanCompletedListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="onScanCompleted(Ljava/lang/String;Landroid/net/Uri;)V" />
+	</class>
+	<class name="android/media/MediaSync" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createInputSurface()Landroid/view/Surface;" />
+		<method name="flush()V" />
+		<method name="getPlaybackParams()Landroid/media/PlaybackParams;" />
+		<method name="getSyncParams()Landroid/media/SyncParams;" />
+		<method name="getTimestamp()Landroid/media/MediaTimestamp;" />
+		<method name="queueAudio(Ljava/nio/ByteBuffer;IJ)V" />
+		<method name="release()V" />
+		<method name="setAudioTrack(Landroid/media/AudioTrack;)V" />
+		<method name="setCallback(Landroid/media/MediaSync$Callback;Landroid/os/Handler;)V" />
+		<method name="setOnErrorListener(Landroid/media/MediaSync$OnErrorListener;Landroid/os/Handler;)V" />
+		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" />
+		<method name="setSurface(Landroid/view/Surface;)V" />
+		<method name="setSyncParams(Landroid/media/SyncParams;)V" />
+		<field name="MEDIASYNC_ERROR_AUDIOTRACK_FAIL" />
+		<field name="MEDIASYNC_ERROR_SURFACE_FAIL" />
+	</class>
+	<class name="android/media/MediaSync$Callback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAudioBufferConsumed(Landroid/media/MediaSync;Ljava/nio/ByteBuffer;I)V" />
+	</class>
+	<class name="android/media/MediaSync$OnErrorListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onError(Landroid/media/MediaSync;II)V" />
+	</class>
+	<class name="android/media/MediaSyncEvent" since="16">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="31" />
+		<method name="createEvent(I)Landroid/media/MediaSyncEvent;" />
+		<method name="getAudioSessionId()I" />
+		<method name="getType()I" />
+		<method name="setAudioSessionId(I)Landroid/media/MediaSyncEvent;" />
+		<field name="CREATOR" since="31" />
+		<field name="SYNC_EVENT_NONE" />
+		<field name="SYNC_EVENT_PRESENTATION_COMPLETE" />
+	</class>
+	<class name="android/media/MediaTimestamp" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(JJF)V" since="29" />
+		<method name="getAnchorMediaTimeUs()J" />
+		<method name="getAnchorSystemNanoTime()J" since="29" />
+		<method name="getAnchorSytemNanoTime()J" deprecated="29" />
+		<method name="getMediaClockRate()F" />
+		<field name="TIMESTAMP_UNKNOWN" since="28" />
+	</class>
+	<class name="android/media/MicrophoneDirection" since="29">
+		<extends name="java/lang/Object" />
+		<method name="setPreferredMicrophoneDirection(I)Z" />
+		<method name="setPreferredMicrophoneFieldDimension(F)Z" />
+		<field name="MIC_DIRECTION_AWAY_FROM_USER" />
+		<field name="MIC_DIRECTION_EXTERNAL" />
+		<field name="MIC_DIRECTION_TOWARDS_USER" />
+		<field name="MIC_DIRECTION_UNSPECIFIED" />
+	</class>
+	<class name="android/media/MicrophoneInfo" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getAddress()Ljava/lang/String;" />
+		<method name="getChannelMapping()Ljava/util/List;" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getDirectionality()I" />
+		<method name="getFrequencyResponse()Ljava/util/List;" />
+		<method name="getGroup()I" />
+		<method name="getId()I" />
+		<method name="getIndexInTheGroup()I" />
+		<method name="getLocation()I" />
+		<method name="getMaxSpl()F" />
+		<method name="getMinSpl()F" />
+		<method name="getOrientation()Landroid/media/MicrophoneInfo$Coordinate3F;" />
+		<method name="getPosition()Landroid/media/MicrophoneInfo$Coordinate3F;" />
+		<method name="getSensitivity()F" />
+		<method name="getType()I" />
+		<field name="CHANNEL_MAPPING_DIRECT" />
+		<field name="CHANNEL_MAPPING_PROCESSED" />
+		<field name="DIRECTIONALITY_BI_DIRECTIONAL" />
+		<field name="DIRECTIONALITY_CARDIOID" />
+		<field name="DIRECTIONALITY_HYPER_CARDIOID" />
+		<field name="DIRECTIONALITY_OMNI" />
+		<field name="DIRECTIONALITY_SUPER_CARDIOID" />
+		<field name="DIRECTIONALITY_UNKNOWN" />
+		<field name="GROUP_UNKNOWN" />
+		<field name="INDEX_IN_THE_GROUP_UNKNOWN" />
+		<field name="LOCATION_MAINBODY" />
+		<field name="LOCATION_MAINBODY_MOVABLE" />
+		<field name="LOCATION_PERIPHERAL" />
+		<field name="LOCATION_UNKNOWN" />
+		<field name="ORIENTATION_UNKNOWN" />
+		<field name="POSITION_UNKNOWN" />
+		<field name="SENSITIVITY_UNKNOWN" />
+		<field name="SPL_UNKNOWN" />
+	</class>
+	<class name="android/media/MicrophoneInfo$Coordinate3F" since="28">
+		<extends name="java/lang/Object" />
+		<field name="x" />
+		<field name="y" />
+		<field name="z" />
+	</class>
+	<class name="android/media/NotProvisionedException" since="18">
+		<extends name="android/media/MediaDrmException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/PlaybackParams" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="allowDefaults()Landroid/media/PlaybackParams;" />
+		<method name="getAudioFallbackMode()I" />
+		<method name="getPitch()F" />
+		<method name="getSpeed()F" />
+		<method name="setAudioFallbackMode(I)Landroid/media/PlaybackParams;" />
+		<method name="setPitch(F)Landroid/media/PlaybackParams;" />
+		<method name="setSpeed(F)Landroid/media/PlaybackParams;" />
+		<field name="AUDIO_FALLBACK_MODE_DEFAULT" />
+		<field name="AUDIO_FALLBACK_MODE_FAIL" />
+		<field name="AUDIO_FALLBACK_MODE_MUTE" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/Rating" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getPercentRating()F" />
+		<method name="getRatingStyle()I" />
+		<method name="getStarRating()F" />
+		<method name="hasHeart()Z" />
+		<method name="isRated()Z" />
+		<method name="isThumbUp()Z" />
+		<method name="newHeartRating(Z)Landroid/media/Rating;" />
+		<method name="newPercentageRating(F)Landroid/media/Rating;" />
+		<method name="newStarRating(IF)Landroid/media/Rating;" />
+		<method name="newThumbRating(Z)Landroid/media/Rating;" />
+		<method name="newUnratedRating(I)Landroid/media/Rating;" />
+		<field name="CREATOR" />
+		<field name="RATING_3_STARS" />
+		<field name="RATING_4_STARS" />
+		<field name="RATING_5_STARS" />
+		<field name="RATING_HEART" />
+		<field name="RATING_NONE" since="21" />
+		<field name="RATING_PERCENTAGE" />
+		<field name="RATING_THUMB_UP_DOWN" />
+	</class>
+	<class name="android/media/RemoteControlClient" since="14" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/app/PendingIntent;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/app/PendingIntent;Landroid/os/Looper;)V" deprecated="29" />
+		<method name="editMetadata(Z)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29" />
+		<method name="getMediaSession()Landroid/media/session/MediaSession;" since="21" deprecated="29" />
+		<method name="setMetadataUpdateListener(Landroid/media/RemoteControlClient$OnMetadataUpdateListener;)V" since="19" deprecated="29" />
+		<method name="setOnGetPlaybackPositionListener(Landroid/media/RemoteControlClient$OnGetPlaybackPositionListener;)V" since="18" deprecated="29" />
+		<method name="setPlaybackPositionUpdateListener(Landroid/media/RemoteControlClient$OnPlaybackPositionUpdateListener;)V" since="18" deprecated="29" />
+		<method name="setPlaybackState(I)V" deprecated="29" />
+		<method name="setPlaybackState(IJF)V" since="18" deprecated="29" />
+		<method name="setTransportControlFlags(I)V" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_FAST_FORWARD" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_NEXT" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_PAUSE" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_PLAY" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_PLAY_PAUSE" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_POSITION_UPDATE" since="18" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_PREVIOUS" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_RATING" since="19" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_REWIND" deprecated="29" />
+		<field name="FLAG_KEY_MEDIA_STOP" deprecated="29" />
+		<field name="PLAYSTATE_BUFFERING" deprecated="29" />
+		<field name="PLAYSTATE_ERROR" deprecated="29" />
+		<field name="PLAYSTATE_FAST_FORWARDING" deprecated="29" />
+		<field name="PLAYSTATE_PAUSED" deprecated="29" />
+		<field name="PLAYSTATE_PLAYING" deprecated="29" />
+		<field name="PLAYSTATE_REWINDING" deprecated="29" />
+		<field name="PLAYSTATE_SKIPPING_BACKWARDS" deprecated="29" />
+		<field name="PLAYSTATE_SKIPPING_FORWARDS" deprecated="29" />
+		<field name="PLAYSTATE_STOPPED" deprecated="29" />
+	</class>
+	<class name="android/media/RemoteControlClient$MetadataEditor" since="14" deprecated="21">
+		<extends name="android/media/MediaMetadataEditor" since="19" />
+		<extends name="java/lang/Object" removed="19" />
+		<method name="apply()V" deprecated="29" />
+		<method name="clear()V" deprecated="29" />
+		<method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29" />
+		<method name="putLong(IJ)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29" />
+		<method name="putObject(ILjava/lang/Object;)Landroid/media/RemoteControlClient$MetadataEditor;" since="21" deprecated="29" />
+		<method name="putString(ILjava/lang/String;)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29" />
+		<field name="BITMAP_KEY_ARTWORK" deprecated="29" />
+	</class>
+	<class name="android/media/RemoteControlClient$OnGetPlaybackPositionListener" since="18" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onGetPlaybackPosition()J" deprecated="29" />
+	</class>
+	<class name="android/media/RemoteControlClient$OnMetadataUpdateListener" since="19" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onMetadataUpdate(ILjava/lang/Object;)V" deprecated="29" />
+	</class>
+	<class name="android/media/RemoteControlClient$OnPlaybackPositionUpdateListener" since="18" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onPlaybackPositionUpdate(J)V" deprecated="29" />
+	</class>
+	<class name="android/media/RemoteController" since="19" deprecated="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;Landroid/os/Looper;)V" deprecated="29" />
+		<method name="clearArtworkConfiguration()Z" deprecated="29" />
+		<method name="editMetadata()Landroid/media/RemoteController$MetadataEditor;" deprecated="29" />
+		<method name="getEstimatedMediaPosition()J" deprecated="29" />
+		<method name="seekTo(J)Z" deprecated="29" />
+		<method name="sendMediaKeyEvent(Landroid/view/KeyEvent;)Z" deprecated="29" />
+		<method name="setArtworkConfiguration(II)Z" deprecated="29" />
+		<method name="setSynchronizationMode(I)Z" deprecated="29" />
+		<field name="POSITION_SYNCHRONIZATION_CHECK" deprecated="29" />
+		<field name="POSITION_SYNCHRONIZATION_NONE" deprecated="29" />
+	</class>
+	<class name="android/media/RemoteController$MetadataEditor" since="19" deprecated="29">
+		<extends name="android/media/MediaMetadataEditor" />
+	</class>
+	<class name="android/media/RemoteController$OnClientUpdateListener" since="19" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onClientChange(Z)V" deprecated="29" />
+		<method name="onClientMetadataUpdate(Landroid/media/RemoteController$MetadataEditor;)V" deprecated="29" />
+		<method name="onClientPlaybackStateUpdate(I)V" deprecated="29" />
+		<method name="onClientPlaybackStateUpdate(IJJF)V" deprecated="29" />
+		<method name="onClientTransportControlUpdate(I)V" deprecated="29" />
+	</class>
+	<class name="android/media/ResourceBusyException" since="19">
+		<extends name="android/media/MediaDrmException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/Ringtone" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" since="21" />
+		<method name="getStreamType()I" deprecated="21" />
+		<method name="getTitle(Landroid/content/Context;)Ljava/lang/String;" />
+		<method name="getVolume()F" since="28" />
+		<method name="isHapticGeneratorEnabled()Z" since="31" />
+		<method name="isLooping()Z" since="28" />
+		<method name="isPlaying()Z" />
+		<method name="play()V" />
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="21" />
+		<method name="setHapticGeneratorEnabled(Z)Z" since="31" />
+		<method name="setLooping(Z)V" since="28" />
+		<method name="setStreamType(I)V" deprecated="21" />
+		<method name="setVolume(F)V" since="28" />
+		<method name="stop()V" />
+	</class>
+	<class name="android/media/RingtoneManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/app/Activity;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="getActualDefaultRingtoneUri(Landroid/content/Context;I)Landroid/net/Uri;" />
+		<method name="getCursor()Landroid/database/Cursor;" />
+		<method name="getDefaultType(Landroid/net/Uri;)I" />
+		<method name="getDefaultUri(I)Landroid/net/Uri;" />
+		<method name="getIncludeDrm()Z" deprecated="19" />
+		<method name="getRingtone(I)Landroid/media/Ringtone;" />
+		<method name="getRingtone(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/Ringtone;" />
+		<method name="getRingtonePosition(Landroid/net/Uri;)I" />
+		<method name="getRingtoneUri(I)Landroid/net/Uri;" />
+		<method name="getStopPreviousRingtone()Z" />
+		<method name="getValidRingtoneUri(Landroid/content/Context;)Landroid/net/Uri;" />
+		<method name="hasHapticChannels(I)Z" since="29" />
+		<method name="hasHapticChannels(Landroid/net/Uri;)Z" since="29" />
+		<method name="inferStreamType()I" since="3" />
+		<method name="isDefault(Landroid/net/Uri;)Z" />
+		<method name="openDefaultRingtoneUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/content/res/AssetFileDescriptor;" since="29" />
+		<method name="setActualDefaultRingtoneUri(Landroid/content/Context;ILandroid/net/Uri;)V" />
+		<method name="setIncludeDrm(Z)V" deprecated="19" />
+		<method name="setStopPreviousRingtone(Z)V" />
+		<method name="setType(I)V" />
+		<method name="stopPreviousRingtone()V" />
+		<field name="ACTION_RINGTONE_PICKER" />
+		<field name="EXTRA_RINGTONE_DEFAULT_URI" />
+		<field name="EXTRA_RINGTONE_EXISTING_URI" />
+		<field name="EXTRA_RINGTONE_INCLUDE_DRM" deprecated="19" />
+		<field name="EXTRA_RINGTONE_PICKED_URI" />
+		<field name="EXTRA_RINGTONE_SHOW_DEFAULT" />
+		<field name="EXTRA_RINGTONE_SHOW_SILENT" />
+		<field name="EXTRA_RINGTONE_TITLE" />
+		<field name="EXTRA_RINGTONE_TYPE" />
+		<field name="ID_COLUMN_INDEX" />
+		<field name="TITLE_COLUMN_INDEX" />
+		<field name="TYPE_ALARM" />
+		<field name="TYPE_ALL" />
+		<field name="TYPE_NOTIFICATION" />
+		<field name="TYPE_RINGTONE" />
+		<field name="URI_COLUMN_INDEX" />
+	</class>
+	<class name="android/media/RouteDiscoveryPreference" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getPreferredFeatures()Ljava/util/List;" />
+		<method name="shouldPerformActiveScan()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/RouteDiscoveryPreference$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/media/RouteDiscoveryPreference;)V" />
+		<method name="&lt;init&gt;(Ljava/util/List;Z)V" />
+		<method name="build()Landroid/media/RouteDiscoveryPreference;" />
+		<method name="setPreferredFeatures(Ljava/util/List;)Landroid/media/RouteDiscoveryPreference$Builder;" />
+		<method name="setShouldPerformActiveScan(Z)Landroid/media/RouteDiscoveryPreference$Builder;" />
+	</class>
+	<class name="android/media/RoutingSessionInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getClientPackageName()Ljava/lang/String;" />
+		<method name="getControlHints()Landroid/os/Bundle;" />
+		<method name="getDeselectableRoutes()Ljava/util/List;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<method name="getSelectableRoutes()Ljava/util/List;" />
+		<method name="getSelectedRoutes()Ljava/util/List;" />
+		<method name="getTransferableRoutes()Ljava/util/List;" />
+		<method name="getVolume()I" />
+		<method name="getVolumeHandling()I" />
+		<method name="getVolumeMax()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/RoutingSessionInfo$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/media/RoutingSessionInfo;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="addDeselectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="addSelectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="addSelectedRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="addTransferableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="build()Landroid/media/RoutingSessionInfo;" />
+		<method name="clearDeselectableRoutes()Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="clearSelectableRoutes()Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="clearSelectedRoutes()Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="clearTransferableRoutes()Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="removeDeselectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="removeSelectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="removeSelectedRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="removeTransferableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="setControlHints(Landroid/os/Bundle;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="setName(Ljava/lang/CharSequence;)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="setVolume(I)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="setVolumeHandling(I)Landroid/media/RoutingSessionInfo$Builder;" />
+		<method name="setVolumeMax(I)Landroid/media/RoutingSessionInfo$Builder;" />
+	</class>
+	<class name="android/media/SoundPool" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(III)V" deprecated="21" />
+		<method name="autoPause()V" since="8" />
+		<method name="autoResume()V" since="8" />
+		<method name="load(Landroid/content/Context;II)I" />
+		<method name="load(Landroid/content/res/AssetFileDescriptor;I)I" since="3" />
+		<method name="load(Ljava/io/FileDescriptor;JJI)I" since="3" />
+		<method name="load(Ljava/lang/String;I)I" />
+		<method name="pause(I)V" />
+		<method name="play(IFFIIF)I" />
+		<method name="release()V" />
+		<method name="resume(I)V" />
+		<method name="setLoop(II)V" />
+		<method name="setOnLoadCompleteListener(Landroid/media/SoundPool$OnLoadCompleteListener;)V" since="8" />
+		<method name="setPriority(II)V" />
+		<method name="setRate(IF)V" />
+		<method name="setVolume(IFF)V" />
+		<method name="stop(I)V" />
+		<method name="unload(I)Z" />
+	</class>
+	<class name="android/media/SoundPool$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/media/SoundPool;" />
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/SoundPool$Builder;" />
+		<method name="setMaxStreams(I)Landroid/media/SoundPool$Builder;" />
+	</class>
+	<class name="android/media/SoundPool$OnLoadCompleteListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="onLoadComplete(Landroid/media/SoundPool;II)V" />
+	</class>
+	<class name="android/media/Spatializer" since="33">
+		<extends name="java/lang/Object" />
+		<method name="addOnSpatializerStateChangedListener(Ljava/util/concurrent/Executor;Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V" />
+		<method name="canBeSpatialized(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;)Z" />
+		<method name="getImmersiveAudioLevel()I" />
+		<method name="isAvailable()Z" />
+		<method name="isEnabled()Z" />
+		<method name="removeOnSpatializerStateChangedListener(Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V" />
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL" />
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_NONE" />
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_OTHER" />
+	</class>
+	<class name="android/media/Spatializer$OnSpatializerStateChangedListener" since="33">
+		<method name="onSpatializerAvailableChanged(Landroid/media/Spatializer;Z)V" />
+		<method name="onSpatializerEnabledChanged(Landroid/media/Spatializer;Z)V" />
+	</class>
+	<class name="android/media/SubtitleData" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IJJ[B)V" since="29" />
+		<method name="getData()[B" />
+		<method name="getDurationUs()J" />
+		<method name="getStartTimeUs()J" />
+		<method name="getTrackIndex()I" />
+	</class>
+	<class name="android/media/SyncParams" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="allowDefaults()Landroid/media/SyncParams;" />
+		<method name="getAudioAdjustMode()I" />
+		<method name="getFrameRate()F" />
+		<method name="getSyncSource()I" />
+		<method name="getTolerance()F" />
+		<method name="setAudioAdjustMode(I)Landroid/media/SyncParams;" />
+		<method name="setFrameRate(F)Landroid/media/SyncParams;" />
+		<method name="setSyncSource(I)Landroid/media/SyncParams;" />
+		<method name="setTolerance(F)Landroid/media/SyncParams;" />
+		<field name="AUDIO_ADJUST_MODE_DEFAULT" />
+		<field name="AUDIO_ADJUST_MODE_RESAMPLE" />
+		<field name="AUDIO_ADJUST_MODE_STRETCH" />
+		<field name="SYNC_SOURCE_AUDIO" />
+		<field name="SYNC_SOURCE_DEFAULT" />
+		<field name="SYNC_SOURCE_SYSTEM_CLOCK" />
+		<field name="SYNC_SOURCE_VSYNC" />
+	</class>
+	<class name="android/media/ThumbnailUtils" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createAudioThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29" />
+		<method name="createAudioThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" since="29" deprecated="29" />
+		<method name="createImageThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29" />
+		<method name="createImageThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" since="29" deprecated="29" />
+		<method name="createVideoThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29" />
+		<method name="createVideoThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" deprecated="29" />
+		<method name="extractThumbnail(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;" />
+		<method name="extractThumbnail(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;" />
+		<field name="OPTIONS_RECYCLE_INPUT" />
+	</class>
+	<class name="android/media/TimedMetaData" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(J[B)V" since="29" />
+		<method name="getMetaData()[B" />
+		<method name="getTimestamp()J" />
+	</class>
+	<class name="android/media/TimedText" since="16">
+		<extends name="java/lang/Object" />
+		<method name="getBounds()Landroid/graphics/Rect;" />
+		<method name="getText()Ljava/lang/String;" />
+	</class>
+	<class name="android/media/ToneGenerator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getAudioSessionId()I" since="16" />
+		<method name="release()V" />
+		<method name="startTone(I)Z" />
+		<method name="startTone(II)Z" since="5" />
+		<method name="stopTone()V" />
+		<field name="MAX_VOLUME" />
+		<field name="MIN_VOLUME" />
+		<field name="TONE_CDMA_ABBR_ALERT" since="4" />
+		<field name="TONE_CDMA_ABBR_INTERCEPT" since="4" />
+		<field name="TONE_CDMA_ABBR_REORDER" since="4" />
+		<field name="TONE_CDMA_ALERT_AUTOREDIAL_LITE" since="4" />
+		<field name="TONE_CDMA_ALERT_CALL_GUARD" since="4" />
+		<field name="TONE_CDMA_ALERT_INCALL_LITE" since="4" />
+		<field name="TONE_CDMA_ALERT_NETWORK_LITE" since="4" />
+		<field name="TONE_CDMA_ANSWER" since="4" />
+		<field name="TONE_CDMA_CALLDROP_LITE" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT3" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT5" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT6" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT7" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING" since="4" />
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI" since="4" />
+		<field name="TONE_CDMA_CONFIRM" since="4" />
+		<field name="TONE_CDMA_DIAL_TONE_LITE" since="4" />
+		<field name="TONE_CDMA_EMERGENCY_RINGBACK" since="4" />
+		<field name="TONE_CDMA_HIGH_L" since="4" />
+		<field name="TONE_CDMA_HIGH_PBX_L" since="4" />
+		<field name="TONE_CDMA_HIGH_PBX_SLS" since="4" />
+		<field name="TONE_CDMA_HIGH_PBX_SS" since="4" />
+		<field name="TONE_CDMA_HIGH_PBX_SSL" since="4" />
+		<field name="TONE_CDMA_HIGH_PBX_S_X4" since="4" />
+		<field name="TONE_CDMA_HIGH_SLS" since="4" />
+		<field name="TONE_CDMA_HIGH_SS" since="4" />
+		<field name="TONE_CDMA_HIGH_SSL" since="4" />
+		<field name="TONE_CDMA_HIGH_SS_2" since="4" />
+		<field name="TONE_CDMA_HIGH_S_X4" since="4" />
+		<field name="TONE_CDMA_INTERCEPT" since="4" />
+		<field name="TONE_CDMA_KEYPAD_VOLUME_KEY_LITE" since="4" />
+		<field name="TONE_CDMA_LOW_L" since="4" />
+		<field name="TONE_CDMA_LOW_PBX_L" since="4" />
+		<field name="TONE_CDMA_LOW_PBX_SLS" since="4" />
+		<field name="TONE_CDMA_LOW_PBX_SS" since="4" />
+		<field name="TONE_CDMA_LOW_PBX_SSL" since="4" />
+		<field name="TONE_CDMA_LOW_PBX_S_X4" since="4" />
+		<field name="TONE_CDMA_LOW_SLS" since="4" />
+		<field name="TONE_CDMA_LOW_SS" since="4" />
+		<field name="TONE_CDMA_LOW_SSL" since="4" />
+		<field name="TONE_CDMA_LOW_SS_2" since="4" />
+		<field name="TONE_CDMA_LOW_S_X4" since="4" />
+		<field name="TONE_CDMA_MED_L" since="4" />
+		<field name="TONE_CDMA_MED_PBX_L" since="4" />
+		<field name="TONE_CDMA_MED_PBX_SLS" since="4" />
+		<field name="TONE_CDMA_MED_PBX_SS" since="4" />
+		<field name="TONE_CDMA_MED_PBX_SSL" since="4" />
+		<field name="TONE_CDMA_MED_PBX_S_X4" since="4" />
+		<field name="TONE_CDMA_MED_SLS" since="4" />
+		<field name="TONE_CDMA_MED_SS" since="4" />
+		<field name="TONE_CDMA_MED_SSL" since="4" />
+		<field name="TONE_CDMA_MED_SS_2" since="4" />
+		<field name="TONE_CDMA_MED_S_X4" since="4" />
+		<field name="TONE_CDMA_NETWORK_BUSY" since="4" />
+		<field name="TONE_CDMA_NETWORK_BUSY_ONE_SHOT" since="4" />
+		<field name="TONE_CDMA_NETWORK_CALLWAITING" since="4" />
+		<field name="TONE_CDMA_NETWORK_USA_RINGBACK" since="4" />
+		<field name="TONE_CDMA_ONE_MIN_BEEP" since="4" />
+		<field name="TONE_CDMA_PIP" since="4" />
+		<field name="TONE_CDMA_PRESSHOLDKEY_LITE" since="4" />
+		<field name="TONE_CDMA_REORDER" since="4" />
+		<field name="TONE_CDMA_SIGNAL_OFF" since="4" />
+		<field name="TONE_CDMA_SOFT_ERROR_LITE" since="4" />
+		<field name="TONE_DTMF_0" />
+		<field name="TONE_DTMF_1" />
+		<field name="TONE_DTMF_2" />
+		<field name="TONE_DTMF_3" />
+		<field name="TONE_DTMF_4" />
+		<field name="TONE_DTMF_5" />
+		<field name="TONE_DTMF_6" />
+		<field name="TONE_DTMF_7" />
+		<field name="TONE_DTMF_8" />
+		<field name="TONE_DTMF_9" />
+		<field name="TONE_DTMF_A" />
+		<field name="TONE_DTMF_B" />
+		<field name="TONE_DTMF_C" />
+		<field name="TONE_DTMF_D" />
+		<field name="TONE_DTMF_P" />
+		<field name="TONE_DTMF_S" />
+		<field name="TONE_PROP_ACK" />
+		<field name="TONE_PROP_BEEP" />
+		<field name="TONE_PROP_BEEP2" />
+		<field name="TONE_PROP_NACK" />
+		<field name="TONE_PROP_PROMPT" />
+		<field name="TONE_SUP_BUSY" />
+		<field name="TONE_SUP_CALL_WAITING" />
+		<field name="TONE_SUP_CONFIRM" since="4" />
+		<field name="TONE_SUP_CONGESTION" />
+		<field name="TONE_SUP_CONGESTION_ABBREV" since="4" />
+		<field name="TONE_SUP_DIAL" />
+		<field name="TONE_SUP_ERROR" />
+		<field name="TONE_SUP_INTERCEPT" since="4" />
+		<field name="TONE_SUP_INTERCEPT_ABBREV" since="4" />
+		<field name="TONE_SUP_PIP" since="4" />
+		<field name="TONE_SUP_RADIO_ACK" />
+		<field name="TONE_SUP_RADIO_NOTAVAIL" />
+		<field name="TONE_SUP_RINGTONE" />
+	</class>
+	<class name="android/media/UnsupportedSchemeException" since="18">
+		<extends name="android/media/MediaDrmException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/media/VolumeAutomation" since="26">
+		<extends name="java/lang/Object" />
+		<method name="createVolumeShaper(Landroid/media/VolumeShaper$Configuration;)Landroid/media/VolumeShaper;" />
+	</class>
+	<class name="android/media/VolumeProvider" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(IIILjava/lang/String;)V" since="30" />
+		<method name="getCurrentVolume()I" />
+		<method name="getMaxVolume()I" />
+		<method name="getVolumeControl()I" />
+		<method name="getVolumeControlId()Ljava/lang/String;" since="30" />
+		<method name="onAdjustVolume(I)V" />
+		<method name="onSetVolumeTo(I)V" />
+		<method name="setCurrentVolume(I)V" />
+		<field name="VOLUME_CONTROL_ABSOLUTE" />
+		<field name="VOLUME_CONTROL_FIXED" />
+		<field name="VOLUME_CONTROL_RELATIVE" />
+	</class>
+	<class name="android/media/VolumeShaper" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="apply(Landroid/media/VolumeShaper$Operation;)V" />
+		<method name="getVolume()F" />
+		<method name="replace(Landroid/media/VolumeShaper$Configuration;Landroid/media/VolumeShaper$Operation;Z)V" />
+	</class>
+	<class name="android/media/VolumeShaper$Configuration" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDuration()J" />
+		<method name="getInterpolatorType()I" />
+		<method name="getMaximumCurvePoints()I" />
+		<method name="getTimes()[F" />
+		<method name="getVolumes()[F" />
+		<field name="CREATOR" />
+		<field name="CUBIC_RAMP" />
+		<field name="INTERPOLATOR_TYPE_CUBIC" />
+		<field name="INTERPOLATOR_TYPE_CUBIC_MONOTONIC" />
+		<field name="INTERPOLATOR_TYPE_LINEAR" />
+		<field name="INTERPOLATOR_TYPE_STEP" />
+		<field name="LINEAR_RAMP" />
+		<field name="SCURVE_RAMP" />
+		<field name="SINE_RAMP" />
+	</class>
+	<class name="android/media/VolumeShaper$Configuration$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/media/VolumeShaper$Configuration;)V" />
+		<method name="build()Landroid/media/VolumeShaper$Configuration;" />
+		<method name="invertVolumes()Landroid/media/VolumeShaper$Configuration$Builder;" />
+		<method name="reflectTimes()Landroid/media/VolumeShaper$Configuration$Builder;" />
+		<method name="scaleToEndVolume(F)Landroid/media/VolumeShaper$Configuration$Builder;" />
+		<method name="scaleToStartVolume(F)Landroid/media/VolumeShaper$Configuration$Builder;" />
+		<method name="setCurve([F[F)Landroid/media/VolumeShaper$Configuration$Builder;" />
+		<method name="setDuration(J)Landroid/media/VolumeShaper$Configuration$Builder;" />
+		<method name="setInterpolatorType(I)Landroid/media/VolumeShaper$Configuration$Builder;" />
+	</class>
+	<class name="android/media/VolumeShaper$Operation" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+		<field name="PLAY" />
+		<field name="REVERSE" />
+	</class>
+	<class name="android/media/audiofx/AcousticEchoCanceler" since="16">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="create(I)Landroid/media/audiofx/AcousticEchoCanceler;" />
+		<method name="isAvailable()Z" />
+	</class>
+	<class name="android/media/audiofx/AudioEffect" since="9">
+		<extends name="java/lang/Object" />
+		<method name="getDescriptor()Landroid/media/audiofx/AudioEffect$Descriptor;" />
+		<method name="getEnabled()Z" />
+		<method name="getId()I" />
+		<method name="hasControl()Z" />
+		<method name="queryEffects()[Landroid/media/audiofx/AudioEffect$Descriptor;" />
+		<method name="release()V" />
+		<method name="setControlStatusListener(Landroid/media/audiofx/AudioEffect$OnControlStatusChangeListener;)V" />
+		<method name="setEnableStatusListener(Landroid/media/audiofx/AudioEffect$OnEnableStatusChangeListener;)V" />
+		<method name="setEnabled(Z)I" />
+		<field name="ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION" />
+		<field name="ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL" />
+		<field name="ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION" />
+		<field name="ALREADY_EXISTS" />
+		<field name="CONTENT_TYPE_GAME" />
+		<field name="CONTENT_TYPE_MOVIE" />
+		<field name="CONTENT_TYPE_MUSIC" />
+		<field name="CONTENT_TYPE_VOICE" />
+		<field name="EFFECT_AUXILIARY" />
+		<field name="EFFECT_INSERT" />
+		<field name="EFFECT_POST_PROCESSING" since="30" />
+		<field name="EFFECT_PRE_PROCESSING" since="30" />
+		<field name="EFFECT_TYPE_AEC" since="18" />
+		<field name="EFFECT_TYPE_AGC" since="18" />
+		<field name="EFFECT_TYPE_BASS_BOOST" since="18" />
+		<field name="EFFECT_TYPE_DYNAMICS_PROCESSING" since="28" />
+		<field name="EFFECT_TYPE_ENV_REVERB" since="18" />
+		<field name="EFFECT_TYPE_EQUALIZER" since="18" />
+		<field name="EFFECT_TYPE_HAPTIC_GENERATOR" since="31" />
+		<field name="EFFECT_TYPE_LOUDNESS_ENHANCER" since="19" />
+		<field name="EFFECT_TYPE_NS" since="18" />
+		<field name="EFFECT_TYPE_PRESET_REVERB" since="18" />
+		<field name="EFFECT_TYPE_VIRTUALIZER" since="18" />
+		<field name="ERROR" />
+		<field name="ERROR_BAD_VALUE" />
+		<field name="ERROR_DEAD_OBJECT" />
+		<field name="ERROR_INVALID_OPERATION" />
+		<field name="ERROR_NO_INIT" />
+		<field name="ERROR_NO_MEMORY" />
+		<field name="EXTRA_AUDIO_SESSION" />
+		<field name="EXTRA_CONTENT_TYPE" />
+		<field name="EXTRA_PACKAGE_NAME" />
+		<field name="SUCCESS" />
+	</class>
+	<class name="android/media/audiofx/AudioEffect$Descriptor" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="connectMode" />
+		<field name="implementor" />
+		<field name="name" />
+		<field name="type" />
+		<field name="uuid" />
+	</class>
+	<class name="android/media/audiofx/AudioEffect$OnControlStatusChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onControlStatusChange(Landroid/media/audiofx/AudioEffect;Z)V" />
+	</class>
+	<class name="android/media/audiofx/AudioEffect$OnEnableStatusChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onEnableStatusChange(Landroid/media/audiofx/AudioEffect;Z)V" />
+	</class>
+	<class name="android/media/audiofx/AutomaticGainControl" since="16">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="create(I)Landroid/media/audiofx/AutomaticGainControl;" />
+		<method name="isAvailable()Z" />
+	</class>
+	<class name="android/media/audiofx/BassBoost" since="9">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getProperties()Landroid/media/audiofx/BassBoost$Settings;" />
+		<method name="getRoundedStrength()S" />
+		<method name="getStrengthSupported()Z" />
+		<method name="setParameterListener(Landroid/media/audiofx/BassBoost$OnParameterChangeListener;)V" />
+		<method name="setProperties(Landroid/media/audiofx/BassBoost$Settings;)V" />
+		<method name="setStrength(S)V" />
+		<field name="PARAM_STRENGTH" />
+		<field name="PARAM_STRENGTH_SUPPORTED" />
+	</class>
+	<class name="android/media/audiofx/BassBoost$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onParameterChange(Landroid/media/audiofx/BassBoost;IIS)V" />
+	</class>
+	<class name="android/media/audiofx/BassBoost$Settings" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="strength" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing" since="28">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IILandroid/media/audiofx/DynamicsProcessing$Config;)V" />
+		<method name="getChannelByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Channel;" />
+		<method name="getChannelCount()I" />
+		<method name="getConfig()Landroid/media/audiofx/DynamicsProcessing$Config;" />
+		<method name="getInputGainByChannelIndex(I)F" />
+		<method name="getLimiterByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Limiter;" />
+		<method name="getMbcBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$MbcBand;" />
+		<method name="getMbcByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Mbc;" />
+		<method name="getPostEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;" />
+		<method name="getPostEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;" />
+		<method name="getPreEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;" />
+		<method name="getPreEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;" />
+		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)V" />
+		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)V" />
+		<method name="setInputGainAllChannelsTo(F)V" />
+		<method name="setInputGainbyChannel(IF)V" />
+		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V" />
+		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)V" />
+		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V" />
+		<method name="setMbcBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V" />
+		<method name="setMbcBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V" />
+		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)V" />
+		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPostEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPostEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPreEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPreEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<field name="VARIANT_FAVOR_FREQUENCY_RESOLUTION" />
+		<field name="VARIANT_FAVOR_TIME_RESOLUTION" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$BandBase" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ZF)V" />
+		<method name="getCutoffFrequency()F" />
+		<method name="isEnabled()Z" />
+		<method name="setCutoffFrequency(F)V" />
+		<method name="setEnabled(Z)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$BandStage" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$Stage" />
+		<method name="&lt;init&gt;(ZZI)V" />
+		<method name="getBandCount()I" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Channel" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(FZIZIZIZ)V" />
+		<method name="&lt;init&gt;(Landroid/media/audiofx/DynamicsProcessing$Channel;)V" />
+		<method name="getInputGain()F" />
+		<method name="getLimiter()Landroid/media/audiofx/DynamicsProcessing$Limiter;" />
+		<method name="getMbc()Landroid/media/audiofx/DynamicsProcessing$Mbc;" />
+		<method name="getMbcBand(I)Landroid/media/audiofx/DynamicsProcessing$MbcBand;" />
+		<method name="getPostEq()Landroid/media/audiofx/DynamicsProcessing$Eq;" />
+		<method name="getPostEqBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;" />
+		<method name="getPreEq()Landroid/media/audiofx/DynamicsProcessing$Eq;" />
+		<method name="getPreEqBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;" />
+		<method name="setInputGain(F)V" />
+		<method name="setLimiter(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V" />
+		<method name="setMbc(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V" />
+		<method name="setMbcBand(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V" />
+		<method name="setPostEq(Landroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPostEqBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPreEq(Landroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPreEqBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Config" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getChannelByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Channel;" />
+		<method name="getInputGainByChannelIndex(I)F" />
+		<method name="getLimiterByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Limiter;" />
+		<method name="getMbcBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$MbcBand;" />
+		<method name="getMbcBandCount()I" />
+		<method name="getMbcByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Mbc;" />
+		<method name="getPostEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;" />
+		<method name="getPostEqBandCount()I" />
+		<method name="getPostEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;" />
+		<method name="getPreEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;" />
+		<method name="getPreEqBandCount()I" />
+		<method name="getPreEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;" />
+		<method name="getPreferredFrameDuration()F" />
+		<method name="getVariant()I" />
+		<method name="isLimiterInUse()Z" />
+		<method name="isMbcInUse()Z" />
+		<method name="isPostEqInUse()Z" />
+		<method name="isPreEqInUse()Z" />
+		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)V" />
+		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)V" />
+		<method name="setInputGainAllChannelsTo(F)V" />
+		<method name="setInputGainByChannelIndex(IF)V" />
+		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V" />
+		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)V" />
+		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V" />
+		<method name="setMbcBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V" />
+		<method name="setMbcBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V" />
+		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)V" />
+		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPostEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPostEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="setPreEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPreEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Config$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IIZIZIZIZ)V" />
+		<method name="build()Landroid/media/audiofx/DynamicsProcessing$Config;" />
+		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setInputGainAllChannelsTo(F)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setInputGainByChannelIndex(IF)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+		<method name="setPreferredFrameDuration(F)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Eq" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandStage" />
+		<method name="&lt;init&gt;(Landroid/media/audiofx/DynamicsProcessing$Eq;)V" />
+		<method name="&lt;init&gt;(ZZI)V" />
+		<method name="getBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;" />
+		<method name="setBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$EqBand" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandBase" />
+		<method name="&lt;init&gt;(Landroid/media/audiofx/DynamicsProcessing$EqBand;)V" />
+		<method name="&lt;init&gt;(ZFF)V" />
+		<method name="getGain()F" />
+		<method name="setGain(F)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Limiter" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$Stage" />
+		<method name="&lt;init&gt;(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V" />
+		<method name="&lt;init&gt;(ZZIFFFFF)V" />
+		<method name="getAttackTime()F" />
+		<method name="getLinkGroup()I" />
+		<method name="getPostGain()F" />
+		<method name="getRatio()F" />
+		<method name="getReleaseTime()F" />
+		<method name="getThreshold()F" />
+		<method name="setAttackTime(F)V" />
+		<method name="setLinkGroup(I)V" />
+		<method name="setPostGain(F)V" />
+		<method name="setRatio(F)V" />
+		<method name="setReleaseTime(F)V" />
+		<method name="setThreshold(F)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Mbc" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandStage" />
+		<method name="&lt;init&gt;(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V" />
+		<method name="&lt;init&gt;(ZZI)V" />
+		<method name="getBand(I)Landroid/media/audiofx/DynamicsProcessing$MbcBand;" />
+		<method name="setBand(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$MbcBand" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandBase" />
+		<method name="&lt;init&gt;(Landroid/media/audiofx/DynamicsProcessing$MbcBand;)V" />
+		<method name="&lt;init&gt;(ZFFFFFFFFFF)V" />
+		<method name="getAttackTime()F" />
+		<method name="getExpanderRatio()F" />
+		<method name="getKneeWidth()F" />
+		<method name="getNoiseGateThreshold()F" />
+		<method name="getPostGain()F" />
+		<method name="getPreGain()F" />
+		<method name="getRatio()F" />
+		<method name="getReleaseTime()F" />
+		<method name="getThreshold()F" />
+		<method name="setAttackTime(F)V" />
+		<method name="setExpanderRatio(F)V" />
+		<method name="setKneeWidth(F)V" />
+		<method name="setNoiseGateThreshold(F)V" />
+		<method name="setPostGain(F)V" />
+		<method name="setPreGain(F)V" />
+		<method name="setRatio(F)V" />
+		<method name="setReleaseTime(F)V" />
+		<method name="setThreshold(F)V" />
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Stage" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ZZ)V" />
+		<method name="isEnabled()Z" />
+		<method name="isInUse()Z" />
+		<method name="setEnabled(Z)V" />
+	</class>
+	<class name="android/media/audiofx/EnvironmentalReverb" since="9">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getDecayHFRatio()S" />
+		<method name="getDecayTime()I" />
+		<method name="getDensity()S" />
+		<method name="getDiffusion()S" />
+		<method name="getProperties()Landroid/media/audiofx/EnvironmentalReverb$Settings;" />
+		<method name="getReflectionsDelay()I" />
+		<method name="getReflectionsLevel()S" />
+		<method name="getReverbDelay()I" />
+		<method name="getReverbLevel()S" />
+		<method name="getRoomHFLevel()S" />
+		<method name="getRoomLevel()S" />
+		<method name="setDecayHFRatio(S)V" />
+		<method name="setDecayTime(I)V" />
+		<method name="setDensity(S)V" />
+		<method name="setDiffusion(S)V" />
+		<method name="setParameterListener(Landroid/media/audiofx/EnvironmentalReverb$OnParameterChangeListener;)V" />
+		<method name="setProperties(Landroid/media/audiofx/EnvironmentalReverb$Settings;)V" />
+		<method name="setReflectionsDelay(I)V" />
+		<method name="setReflectionsLevel(S)V" />
+		<method name="setReverbDelay(I)V" />
+		<method name="setReverbLevel(S)V" />
+		<method name="setRoomHFLevel(S)V" />
+		<method name="setRoomLevel(S)V" />
+		<field name="PARAM_DECAY_HF_RATIO" />
+		<field name="PARAM_DECAY_TIME" />
+		<field name="PARAM_DENSITY" />
+		<field name="PARAM_DIFFUSION" />
+		<field name="PARAM_REFLECTIONS_DELAY" />
+		<field name="PARAM_REFLECTIONS_LEVEL" />
+		<field name="PARAM_REVERB_DELAY" />
+		<field name="PARAM_REVERB_LEVEL" />
+		<field name="PARAM_ROOM_HF_LEVEL" />
+		<field name="PARAM_ROOM_LEVEL" />
+	</class>
+	<class name="android/media/audiofx/EnvironmentalReverb$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onParameterChange(Landroid/media/audiofx/EnvironmentalReverb;III)V" />
+	</class>
+	<class name="android/media/audiofx/EnvironmentalReverb$Settings" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="decayHFRatio" />
+		<field name="decayTime" />
+		<field name="density" />
+		<field name="diffusion" />
+		<field name="reflectionsDelay" />
+		<field name="reflectionsLevel" />
+		<field name="reverbDelay" />
+		<field name="reverbLevel" />
+		<field name="roomHFLevel" />
+		<field name="roomLevel" />
+	</class>
+	<class name="android/media/audiofx/Equalizer" since="9">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getBand(I)S" />
+		<method name="getBandFreqRange(S)[I" />
+		<method name="getBandLevel(S)S" />
+		<method name="getBandLevelRange()[S" />
+		<method name="getCenterFreq(S)I" />
+		<method name="getCurrentPreset()S" />
+		<method name="getNumberOfBands()S" />
+		<method name="getNumberOfPresets()S" />
+		<method name="getPresetName(S)Ljava/lang/String;" />
+		<method name="getProperties()Landroid/media/audiofx/Equalizer$Settings;" />
+		<method name="setBandLevel(SS)V" />
+		<method name="setParameterListener(Landroid/media/audiofx/Equalizer$OnParameterChangeListener;)V" />
+		<method name="setProperties(Landroid/media/audiofx/Equalizer$Settings;)V" />
+		<method name="usePreset(S)V" />
+		<field name="PARAM_BAND_FREQ_RANGE" />
+		<field name="PARAM_BAND_LEVEL" />
+		<field name="PARAM_CENTER_FREQ" />
+		<field name="PARAM_CURRENT_PRESET" />
+		<field name="PARAM_GET_BAND" />
+		<field name="PARAM_GET_NUM_OF_PRESETS" />
+		<field name="PARAM_GET_PRESET_NAME" />
+		<field name="PARAM_LEVEL_RANGE" />
+		<field name="PARAM_NUM_BANDS" />
+		<field name="PARAM_STRING_SIZE_MAX" />
+	</class>
+	<class name="android/media/audiofx/Equalizer$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onParameterChange(Landroid/media/audiofx/Equalizer;IIII)V" />
+	</class>
+	<class name="android/media/audiofx/Equalizer$Settings" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="bandLevels" />
+		<field name="curPreset" />
+		<field name="numBands" />
+	</class>
+	<class name="android/media/audiofx/HapticGenerator" since="31">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="create(I)Landroid/media/audiofx/HapticGenerator;" />
+		<method name="isAvailable()Z" />
+	</class>
+	<class name="android/media/audiofx/LoudnessEnhancer" since="19">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getTargetGain()F" />
+		<method name="setTargetGain(I)V" />
+		<field name="PARAM_TARGET_GAIN_MB" />
+	</class>
+	<class name="android/media/audiofx/NoiseSuppressor" since="16">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="create(I)Landroid/media/audiofx/NoiseSuppressor;" />
+		<method name="isAvailable()Z" />
+	</class>
+	<class name="android/media/audiofx/PresetReverb" since="9">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getPreset()S" />
+		<method name="getProperties()Landroid/media/audiofx/PresetReverb$Settings;" />
+		<method name="setParameterListener(Landroid/media/audiofx/PresetReverb$OnParameterChangeListener;)V" />
+		<method name="setPreset(S)V" />
+		<method name="setProperties(Landroid/media/audiofx/PresetReverb$Settings;)V" />
+		<field name="PARAM_PRESET" />
+		<field name="PRESET_LARGEHALL" />
+		<field name="PRESET_LARGEROOM" />
+		<field name="PRESET_MEDIUMHALL" />
+		<field name="PRESET_MEDIUMROOM" />
+		<field name="PRESET_NONE" />
+		<field name="PRESET_PLATE" />
+		<field name="PRESET_SMALLROOM" />
+	</class>
+	<class name="android/media/audiofx/PresetReverb$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onParameterChange(Landroid/media/audiofx/PresetReverb;IIS)V" />
+	</class>
+	<class name="android/media/audiofx/PresetReverb$Settings" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="preset" />
+	</class>
+	<class name="android/media/audiofx/Virtualizer" since="9">
+		<extends name="android/media/audiofx/AudioEffect" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="canVirtualize(II)Z" since="21" />
+		<method name="forceVirtualizationMode(I)Z" since="21" />
+		<method name="getProperties()Landroid/media/audiofx/Virtualizer$Settings;" />
+		<method name="getRoundedStrength()S" />
+		<method name="getSpeakerAngles(II[I)Z" since="21" />
+		<method name="getStrengthSupported()Z" />
+		<method name="getVirtualizationMode()I" since="21" />
+		<method name="setParameterListener(Landroid/media/audiofx/Virtualizer$OnParameterChangeListener;)V" />
+		<method name="setProperties(Landroid/media/audiofx/Virtualizer$Settings;)V" />
+		<method name="setStrength(S)V" />
+		<field name="PARAM_STRENGTH" />
+		<field name="PARAM_STRENGTH_SUPPORTED" />
+		<field name="VIRTUALIZATION_MODE_AUTO" since="21" />
+		<field name="VIRTUALIZATION_MODE_BINAURAL" since="21" />
+		<field name="VIRTUALIZATION_MODE_OFF" since="21" />
+		<field name="VIRTUALIZATION_MODE_TRANSAURAL" since="21" />
+	</class>
+	<class name="android/media/audiofx/Virtualizer$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onParameterChange(Landroid/media/audiofx/Virtualizer;IIS)V" />
+	</class>
+	<class name="android/media/audiofx/Virtualizer$Settings" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="strength" />
+	</class>
+	<class name="android/media/audiofx/Visualizer" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getCaptureSize()I" />
+		<method name="getCaptureSizeRange()[I" />
+		<method name="getEnabled()Z" />
+		<method name="getFft([B)I" />
+		<method name="getMaxCaptureRate()I" />
+		<method name="getMeasurementMode()I" since="19" />
+		<method name="getMeasurementPeakRms(Landroid/media/audiofx/Visualizer$MeasurementPeakRms;)I" since="19" />
+		<method name="getSamplingRate()I" />
+		<method name="getScalingMode()I" since="16" />
+		<method name="getWaveForm([B)I" />
+		<method name="release()V" />
+		<method name="setCaptureSize(I)I" />
+		<method name="setDataCaptureListener(Landroid/media/audiofx/Visualizer$OnDataCaptureListener;IZZ)I" />
+		<method name="setEnabled(Z)I" />
+		<method name="setMeasurementMode(I)I" since="19" />
+		<method name="setScalingMode(I)I" since="16" />
+		<field name="ALREADY_EXISTS" />
+		<field name="ERROR" />
+		<field name="ERROR_BAD_VALUE" />
+		<field name="ERROR_DEAD_OBJECT" />
+		<field name="ERROR_INVALID_OPERATION" />
+		<field name="ERROR_NO_INIT" />
+		<field name="ERROR_NO_MEMORY" />
+		<field name="MEASUREMENT_MODE_NONE" since="19" />
+		<field name="MEASUREMENT_MODE_PEAK_RMS" since="19" />
+		<field name="SCALING_MODE_AS_PLAYED" since="16" />
+		<field name="SCALING_MODE_NORMALIZED" since="16" />
+		<field name="STATE_ENABLED" />
+		<field name="STATE_INITIALIZED" />
+		<field name="STATE_UNINITIALIZED" />
+		<field name="SUCCESS" />
+	</class>
+	<class name="android/media/audiofx/Visualizer$MeasurementPeakRms" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="mPeak" />
+		<field name="mRms" />
+	</class>
+	<class name="android/media/audiofx/Visualizer$OnDataCaptureListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onFftDataCapture(Landroid/media/audiofx/Visualizer;[BI)V" />
+		<method name="onWaveFormDataCapture(Landroid/media/audiofx/Visualizer;[BI)V" />
+	</class>
+	<class name="android/media/browse/MediaBrowser" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/ComponentName;Landroid/media/browse/MediaBrowser$ConnectionCallback;Landroid/os/Bundle;)V" />
+		<method name="connect()V" />
+		<method name="disconnect()V" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getItem(Ljava/lang/String;Landroid/media/browse/MediaBrowser$ItemCallback;)V" since="23" />
+		<method name="getRoot()Ljava/lang/String;" />
+		<method name="getServiceComponent()Landroid/content/ComponentName;" />
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;" />
+		<method name="isConnected()Z" />
+		<method name="subscribe(Ljava/lang/String;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V" />
+		<method name="subscribe(Ljava/lang/String;Landroid/os/Bundle;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V" since="24" />
+		<method name="unsubscribe(Ljava/lang/String;)V" />
+		<method name="unsubscribe(Ljava/lang/String;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V" since="24" />
+		<field name="EXTRA_PAGE" since="24" />
+		<field name="EXTRA_PAGE_SIZE" since="24" />
+	</class>
+	<class name="android/media/browse/MediaBrowser$ConnectionCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onConnected()V" />
+		<method name="onConnectionFailed()V" />
+		<method name="onConnectionSuspended()V" />
+	</class>
+	<class name="android/media/browse/MediaBrowser$ItemCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onError(Ljava/lang/String;)V" />
+		<method name="onItemLoaded(Landroid/media/browse/MediaBrowser$MediaItem;)V" />
+	</class>
+	<class name="android/media/browse/MediaBrowser$MediaItem" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/media/MediaDescription;I)V" />
+		<method name="getDescription()Landroid/media/MediaDescription;" />
+		<method name="getFlags()I" />
+		<method name="getMediaId()Ljava/lang/String;" />
+		<method name="isBrowsable()Z" />
+		<method name="isPlayable()Z" />
+		<field name="CREATOR" />
+		<field name="FLAG_BROWSABLE" />
+		<field name="FLAG_PLAYABLE" />
+	</class>
+	<class name="android/media/browse/MediaBrowser$SubscriptionCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onChildrenLoaded(Ljava/lang/String;Ljava/util/List;)V" />
+		<method name="onChildrenLoaded(Ljava/lang/String;Ljava/util/List;Landroid/os/Bundle;)V" since="24" />
+		<method name="onError(Ljava/lang/String;)V" />
+		<method name="onError(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+	</class>
+	<class name="android/media/effect/Effect" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="apply(IIII)V" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="release()V" />
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setUpdateListener(Landroid/media/effect/EffectUpdateListener;)V" />
+	</class>
+	<class name="android/media/effect/EffectContext" since="14">
+		<extends name="java/lang/Object" />
+		<method name="createWithCurrentGlContext()Landroid/media/effect/EffectContext;" />
+		<method name="getFactory()Landroid/media/effect/EffectFactory;" />
+		<method name="release()V" />
+	</class>
+	<class name="android/media/effect/EffectFactory" since="14">
+		<extends name="java/lang/Object" />
+		<method name="createEffect(Ljava/lang/String;)Landroid/media/effect/Effect;" />
+		<method name="isEffectSupported(Ljava/lang/String;)Z" />
+		<field name="EFFECT_AUTOFIX" />
+		<field name="EFFECT_BACKDROPPER" />
+		<field name="EFFECT_BITMAPOVERLAY" />
+		<field name="EFFECT_BLACKWHITE" />
+		<field name="EFFECT_BRIGHTNESS" />
+		<field name="EFFECT_CONTRAST" />
+		<field name="EFFECT_CROP" />
+		<field name="EFFECT_CROSSPROCESS" />
+		<field name="EFFECT_DOCUMENTARY" />
+		<field name="EFFECT_DUOTONE" />
+		<field name="EFFECT_FILLLIGHT" />
+		<field name="EFFECT_FISHEYE" />
+		<field name="EFFECT_FLIP" />
+		<field name="EFFECT_GRAIN" />
+		<field name="EFFECT_GRAYSCALE" />
+		<field name="EFFECT_LOMOISH" />
+		<field name="EFFECT_NEGATIVE" />
+		<field name="EFFECT_POSTERIZE" />
+		<field name="EFFECT_REDEYE" />
+		<field name="EFFECT_ROTATE" />
+		<field name="EFFECT_SATURATE" />
+		<field name="EFFECT_SEPIA" />
+		<field name="EFFECT_SHARPEN" />
+		<field name="EFFECT_STRAIGHTEN" />
+		<field name="EFFECT_TEMPERATURE" />
+		<field name="EFFECT_TINT" />
+		<field name="EFFECT_VIGNETTE" />
+	</class>
+	<class name="android/media/effect/EffectUpdateListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onEffectUpdated(Landroid/media/effect/Effect;Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/media/metrics/Event" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getMetricsBundle()Landroid/os/Bundle;" />
+		<method name="getTimeSinceCreatedMillis()J" />
+	</class>
+	<class name="android/media/metrics/LogSessionId" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getStringId()Ljava/lang/String;" />
+		<field name="LOG_SESSION_ID_NONE" />
+	</class>
+	<class name="android/media/metrics/MediaMetricsManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="createPlaybackSession()Landroid/media/metrics/PlaybackSession;" />
+		<method name="createRecordingSession()Landroid/media/metrics/RecordingSession;" />
+		<field name="INVALID_TIMESTAMP" />
+	</class>
+	<class name="android/media/metrics/NetworkEvent" since="31">
+		<extends name="android/media/metrics/Event" />
+		<implements name="android/os/Parcelable" />
+		<method name="getNetworkType()I" />
+		<field name="CREATOR" />
+		<field name="NETWORK_TYPE_2G" />
+		<field name="NETWORK_TYPE_3G" />
+		<field name="NETWORK_TYPE_4G" />
+		<field name="NETWORK_TYPE_5G_NSA" />
+		<field name="NETWORK_TYPE_5G_SA" />
+		<field name="NETWORK_TYPE_ETHERNET" />
+		<field name="NETWORK_TYPE_OFFLINE" />
+		<field name="NETWORK_TYPE_OTHER" />
+		<field name="NETWORK_TYPE_UNKNOWN" />
+		<field name="NETWORK_TYPE_WIFI" />
+	</class>
+	<class name="android/media/metrics/NetworkEvent$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/media/metrics/NetworkEvent;" />
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/NetworkEvent$Builder;" />
+		<method name="setNetworkType(I)Landroid/media/metrics/NetworkEvent$Builder;" />
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/NetworkEvent$Builder;" />
+	</class>
+	<class name="android/media/metrics/PlaybackErrorEvent" since="31">
+		<extends name="android/media/metrics/Event" />
+		<implements name="android/os/Parcelable" />
+		<method name="getErrorCode()I" />
+		<method name="getSubErrorCode()I" />
+		<field name="CREATOR" />
+		<field name="ERROR_AUDIO_TRACK_INIT_FAILED" />
+		<field name="ERROR_AUDIO_TRACK_OTHER" />
+		<field name="ERROR_AUDIO_TRACK_WRITE_FAILED" />
+		<field name="ERROR_DECODER_INIT_FAILED" />
+		<field name="ERROR_DECODING_FAILED" />
+		<field name="ERROR_DECODING_FORMAT_EXCEEDS_CAPABILITIES" />
+		<field name="ERROR_DECODING_FORMAT_UNSUPPORTED" />
+		<field name="ERROR_DECODING_OTHER" />
+		<field name="ERROR_DRM_CONTENT_ERROR" />
+		<field name="ERROR_DRM_DEVICE_REVOKED" />
+		<field name="ERROR_DRM_DISALLOWED_OPERATION" />
+		<field name="ERROR_DRM_LICENSE_ACQUISITION_FAILED" />
+		<field name="ERROR_DRM_OTHER" />
+		<field name="ERROR_DRM_PROVISIONING_FAILED" />
+		<field name="ERROR_DRM_SCHEME_UNSUPPORTED" />
+		<field name="ERROR_DRM_SYSTEM_ERROR" />
+		<field name="ERROR_IO_BAD_HTTP_STATUS" />
+		<field name="ERROR_IO_CONNECTION_CLOSED" />
+		<field name="ERROR_IO_CONNECTION_TIMEOUT" />
+		<field name="ERROR_IO_DNS_FAILED" />
+		<field name="ERROR_IO_FILE_NOT_FOUND" />
+		<field name="ERROR_IO_NETWORK_CONNECTION_FAILED" />
+		<field name="ERROR_IO_NETWORK_UNAVAILABLE" />
+		<field name="ERROR_IO_NO_PERMISSION" />
+		<field name="ERROR_IO_OTHER" />
+		<field name="ERROR_OTHER" />
+		<field name="ERROR_PARSING_CONTAINER_MALFORMED" />
+		<field name="ERROR_PARSING_CONTAINER_UNSUPPORTED" />
+		<field name="ERROR_PARSING_MANIFEST_MALFORMED" />
+		<field name="ERROR_PARSING_MANIFEST_UNSUPPORTED" />
+		<field name="ERROR_PARSING_OTHER" />
+		<field name="ERROR_PLAYER_BEHIND_LIVE_WINDOW" />
+		<field name="ERROR_PLAYER_OTHER" />
+		<field name="ERROR_PLAYER_REMOTE" />
+		<field name="ERROR_RUNTIME" />
+		<field name="ERROR_UNKNOWN" />
+	</class>
+	<class name="android/media/metrics/PlaybackErrorEvent$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/media/metrics/PlaybackErrorEvent;" />
+		<method name="setErrorCode(I)Landroid/media/metrics/PlaybackErrorEvent$Builder;" />
+		<method name="setException(Ljava/lang/Exception;)Landroid/media/metrics/PlaybackErrorEvent$Builder;" />
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/PlaybackErrorEvent$Builder;" />
+		<method name="setSubErrorCode(I)Landroid/media/metrics/PlaybackErrorEvent$Builder;" />
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/PlaybackErrorEvent$Builder;" />
+	</class>
+	<class name="android/media/metrics/PlaybackMetrics" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAudioUnderrunCount()I" />
+		<method name="getContentType()I" />
+		<method name="getDrmSessionId()[B" />
+		<method name="getDrmType()I" />
+		<method name="getExperimentIds()[J" />
+		<method name="getLocalBytesRead()J" />
+		<method name="getMediaDurationMillis()J" />
+		<method name="getMetricsBundle()Landroid/os/Bundle;" />
+		<method name="getNetworkBytesRead()J" />
+		<method name="getNetworkTransferDurationMillis()J" />
+		<method name="getPlaybackType()I" />
+		<method name="getPlayerName()Ljava/lang/String;" />
+		<method name="getPlayerVersion()Ljava/lang/String;" />
+		<method name="getStreamSource()I" />
+		<method name="getStreamType()I" />
+		<method name="getVideoFramesDropped()I" />
+		<method name="getVideoFramesPlayed()I" />
+		<field name="CONTENT_TYPE_AD" />
+		<field name="CONTENT_TYPE_MAIN" />
+		<field name="CONTENT_TYPE_OTHER" />
+		<field name="CONTENT_TYPE_UNKNOWN" />
+		<field name="CREATOR" />
+		<field name="DRM_TYPE_CLEARKEY" />
+		<field name="DRM_TYPE_NONE" />
+		<field name="DRM_TYPE_OTHER" />
+		<field name="DRM_TYPE_PLAY_READY" />
+		<field name="DRM_TYPE_WIDEVINE_L1" />
+		<field name="DRM_TYPE_WIDEVINE_L3" />
+		<field name="DRM_TYPE_WV_L3_FALLBACK" />
+		<field name="PLAYBACK_TYPE_LIVE" />
+		<field name="PLAYBACK_TYPE_OTHER" />
+		<field name="PLAYBACK_TYPE_UNKNOWN" />
+		<field name="PLAYBACK_TYPE_VOD" />
+		<field name="STREAM_SOURCE_DEVICE" />
+		<field name="STREAM_SOURCE_MIXED" />
+		<field name="STREAM_SOURCE_NETWORK" />
+		<field name="STREAM_SOURCE_UNKNOWN" />
+		<field name="STREAM_TYPE_DASH" />
+		<field name="STREAM_TYPE_HLS" />
+		<field name="STREAM_TYPE_OTHER" />
+		<field name="STREAM_TYPE_PROGRESSIVE" />
+		<field name="STREAM_TYPE_SS" />
+		<field name="STREAM_TYPE_UNKNOWN" />
+	</class>
+	<class name="android/media/metrics/PlaybackMetrics$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addExperimentId(J)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="build()Landroid/media/metrics/PlaybackMetrics;" />
+		<method name="setAudioUnderrunCount(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setContentType(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setDrmSessionId([B)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setDrmType(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setLocalBytesRead(J)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setMediaDurationMillis(J)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setNetworkBytesRead(J)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setNetworkTransferDurationMillis(J)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setPlaybackType(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setPlayerName(Ljava/lang/String;)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setPlayerVersion(Ljava/lang/String;)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setStreamSource(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setStreamType(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setVideoFramesDropped(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+		<method name="setVideoFramesPlayed(I)Landroid/media/metrics/PlaybackMetrics$Builder;" />
+	</class>
+	<class name="android/media/metrics/PlaybackSession" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getSessionId()Landroid/media/metrics/LogSessionId;" />
+		<method name="reportNetworkEvent(Landroid/media/metrics/NetworkEvent;)V" />
+		<method name="reportPlaybackErrorEvent(Landroid/media/metrics/PlaybackErrorEvent;)V" />
+		<method name="reportPlaybackMetrics(Landroid/media/metrics/PlaybackMetrics;)V" />
+		<method name="reportPlaybackStateEvent(Landroid/media/metrics/PlaybackStateEvent;)V" />
+		<method name="reportTrackChangeEvent(Landroid/media/metrics/TrackChangeEvent;)V" />
+	</class>
+	<class name="android/media/metrics/PlaybackStateEvent" since="31">
+		<extends name="android/media/metrics/Event" />
+		<implements name="android/os/Parcelable" />
+		<method name="getState()I" />
+		<field name="CREATOR" />
+		<field name="STATE_ABANDONED" />
+		<field name="STATE_BUFFERING" />
+		<field name="STATE_ENDED" />
+		<field name="STATE_FAILED" />
+		<field name="STATE_INTERRUPTED_BY_AD" />
+		<field name="STATE_JOINING_BACKGROUND" />
+		<field name="STATE_JOINING_FOREGROUND" />
+		<field name="STATE_NOT_STARTED" />
+		<field name="STATE_PAUSED" />
+		<field name="STATE_PAUSED_BUFFERING" />
+		<field name="STATE_PLAYING" />
+		<field name="STATE_SEEKING" />
+		<field name="STATE_STOPPED" />
+		<field name="STATE_SUPPRESSED" />
+		<field name="STATE_SUPPRESSED_BUFFERING" />
+	</class>
+	<class name="android/media/metrics/PlaybackStateEvent$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/media/metrics/PlaybackStateEvent;" />
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/PlaybackStateEvent$Builder;" />
+		<method name="setState(I)Landroid/media/metrics/PlaybackStateEvent$Builder;" />
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/PlaybackStateEvent$Builder;" />
+	</class>
+	<class name="android/media/metrics/RecordingSession" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getSessionId()Landroid/media/metrics/LogSessionId;" />
+	</class>
+	<class name="android/media/metrics/TrackChangeEvent" since="31">
+		<extends name="android/media/metrics/Event" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAudioSampleRate()I" />
+		<method name="getBitrate()I" />
+		<method name="getChannelCount()I" />
+		<method name="getCodecName()Ljava/lang/String;" />
+		<method name="getContainerMimeType()Ljava/lang/String;" />
+		<method name="getHeight()I" />
+		<method name="getLanguage()Ljava/lang/String;" />
+		<method name="getLanguageRegion()Ljava/lang/String;" />
+		<method name="getSampleMimeType()Ljava/lang/String;" />
+		<method name="getTrackChangeReason()I" />
+		<method name="getTrackState()I" />
+		<method name="getTrackType()I" />
+		<method name="getVideoFrameRate()F" />
+		<method name="getWidth()I" />
+		<field name="CREATOR" />
+		<field name="TRACK_CHANGE_REASON_ADAPTIVE" />
+		<field name="TRACK_CHANGE_REASON_INITIAL" />
+		<field name="TRACK_CHANGE_REASON_MANUAL" />
+		<field name="TRACK_CHANGE_REASON_OTHER" />
+		<field name="TRACK_CHANGE_REASON_UNKNOWN" />
+		<field name="TRACK_STATE_OFF" />
+		<field name="TRACK_STATE_ON" />
+		<field name="TRACK_TYPE_AUDIO" />
+		<field name="TRACK_TYPE_TEXT" />
+		<field name="TRACK_TYPE_VIDEO" />
+	</class>
+	<class name="android/media/metrics/TrackChangeEvent$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/media/metrics/TrackChangeEvent;" />
+		<method name="setAudioSampleRate(I)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setBitrate(I)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setChannelCount(I)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setCodecName(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setContainerMimeType(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setHeight(I)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setLanguage(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setLanguageRegion(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setSampleMimeType(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setTrackChangeReason(I)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setTrackState(I)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setVideoFrameRate(F)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+		<method name="setWidth(I)Landroid/media/metrics/TrackChangeEvent$Builder;" />
+	</class>
+	<class name="android/media/midi/MidiDevice" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="connectPorts(Landroid/media/midi/MidiInputPort;I)Landroid/media/midi/MidiDevice$MidiConnection;" />
+		<method name="getInfo()Landroid/media/midi/MidiDeviceInfo;" />
+		<method name="openInputPort(I)Landroid/media/midi/MidiInputPort;" />
+		<method name="openOutputPort(I)Landroid/media/midi/MidiOutputPort;" />
+	</class>
+	<class name="android/media/midi/MidiDevice$MidiConnection" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+	</class>
+	<class name="android/media/midi/MidiDeviceInfo" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getId()I" />
+		<method name="getInputPortCount()I" />
+		<method name="getOutputPortCount()I" />
+		<method name="getPorts()[Landroid/media/midi/MidiDeviceInfo$PortInfo;" />
+		<method name="getProperties()Landroid/os/Bundle;" />
+		<method name="getType()I" />
+		<method name="isPrivate()Z" />
+		<field name="CREATOR" />
+		<field name="PROPERTY_BLUETOOTH_DEVICE" />
+		<field name="PROPERTY_MANUFACTURER" />
+		<field name="PROPERTY_NAME" />
+		<field name="PROPERTY_PRODUCT" />
+		<field name="PROPERTY_SERIAL_NUMBER" />
+		<field name="PROPERTY_USB_DEVICE" />
+		<field name="PROPERTY_VERSION" />
+		<field name="TYPE_BLUETOOTH" />
+		<field name="TYPE_USB" />
+		<field name="TYPE_VIRTUAL" />
+	</class>
+	<class name="android/media/midi/MidiDeviceInfo$PortInfo" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPortNumber()I" />
+		<method name="getType()I" />
+		<field name="TYPE_INPUT" />
+		<field name="TYPE_OUTPUT" />
+	</class>
+	<class name="android/media/midi/MidiDeviceService" since="23">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDeviceInfo()Landroid/media/midi/MidiDeviceInfo;" />
+		<method name="getOutputPortReceivers()[Landroid/media/midi/MidiReceiver;" />
+		<method name="onClose()V" />
+		<method name="onDeviceStatusChanged(Landroid/media/midi/MidiDeviceStatus;)V" />
+		<method name="onGetInputPortReceivers()[Landroid/media/midi/MidiReceiver;" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/media/midi/MidiDeviceStatus" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDeviceInfo()Landroid/media/midi/MidiDeviceInfo;" />
+		<method name="getOutputPortOpenCount(I)I" />
+		<method name="isInputPortOpen(I)Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/midi/MidiInputPort" since="23">
+		<extends name="android/media/midi/MidiReceiver" />
+		<implements name="java/io/Closeable" />
+		<method name="getPortNumber()I" />
+	</class>
+	<class name="android/media/midi/MidiManager" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getDevices()[Landroid/media/midi/MidiDeviceInfo;" />
+		<method name="openBluetoothDevice(Landroid/bluetooth/BluetoothDevice;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V" />
+		<method name="openDevice(Landroid/media/midi/MidiDeviceInfo;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V" />
+		<method name="registerDeviceCallback(Landroid/media/midi/MidiManager$DeviceCallback;Landroid/os/Handler;)V" />
+		<method name="unregisterDeviceCallback(Landroid/media/midi/MidiManager$DeviceCallback;)V" />
+	</class>
+	<class name="android/media/midi/MidiManager$DeviceCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDeviceAdded(Landroid/media/midi/MidiDeviceInfo;)V" />
+		<method name="onDeviceRemoved(Landroid/media/midi/MidiDeviceInfo;)V" />
+		<method name="onDeviceStatusChanged(Landroid/media/midi/MidiDeviceStatus;)V" />
+	</class>
+	<class name="android/media/midi/MidiManager$OnDeviceOpenedListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onDeviceOpened(Landroid/media/midi/MidiDevice;)V" />
+	</class>
+	<class name="android/media/midi/MidiOutputPort" since="23">
+		<extends name="android/media/midi/MidiSender" />
+		<implements name="java/io/Closeable" />
+		<method name="getPortNumber()I" />
+	</class>
+	<class name="android/media/midi/MidiReceiver" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="flush()V" />
+		<method name="getMaxMessageSize()I" />
+		<method name="onFlush()V" />
+		<method name="onSend([BIIJ)V" />
+		<method name="send([BII)V" />
+		<method name="send([BIIJ)V" />
+	</class>
+	<class name="android/media/midi/MidiSender" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="connect(Landroid/media/midi/MidiReceiver;)V" />
+		<method name="disconnect(Landroid/media/midi/MidiReceiver;)V" />
+		<method name="onConnect(Landroid/media/midi/MidiReceiver;)V" />
+		<method name="onDisconnect(Landroid/media/midi/MidiReceiver;)V" />
+	</class>
+	<class name="android/media/projection/MediaProjection" since="21">
+		<extends name="java/lang/Object" />
+		<method name="createVirtualDisplay(Ljava/lang/String;IIIILandroid/view/Surface;Landroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;" />
+		<method name="registerCallback(Landroid/media/projection/MediaProjection$Callback;Landroid/os/Handler;)V" />
+		<method name="stop()V" />
+		<method name="unregisterCallback(Landroid/media/projection/MediaProjection$Callback;)V" />
+	</class>
+	<class name="android/media/projection/MediaProjection$Callback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onStop()V" />
+	</class>
+	<class name="android/media/projection/MediaProjectionManager" since="21">
+		<extends name="java/lang/Object" />
+		<method name="createScreenCaptureIntent()Landroid/content/Intent;" />
+		<method name="getMediaProjection(ILandroid/content/Intent;)Landroid/media/projection/MediaProjection;" />
+	</class>
+	<class name="android/media/session/MediaController" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/media/session/MediaSession$Token;)V" />
+		<method name="adjustVolume(II)V" />
+		<method name="dispatchMediaButtonEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getFlags()J" />
+		<method name="getMetadata()Landroid/media/MediaMetadata;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getPlaybackInfo()Landroid/media/session/MediaController$PlaybackInfo;" />
+		<method name="getPlaybackState()Landroid/media/session/PlaybackState;" />
+		<method name="getQueue()Ljava/util/List;" />
+		<method name="getQueueTitle()Ljava/lang/CharSequence;" />
+		<method name="getRatingType()I" />
+		<method name="getSessionActivity()Landroid/app/PendingIntent;" />
+		<method name="getSessionInfo()Landroid/os/Bundle;" since="29" />
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;" />
+		<method name="getTag()Ljava/lang/String;" since="30" />
+		<method name="getTransportControls()Landroid/media/session/MediaController$TransportControls;" />
+		<method name="registerCallback(Landroid/media/session/MediaController$Callback;)V" />
+		<method name="registerCallback(Landroid/media/session/MediaController$Callback;Landroid/os/Handler;)V" />
+		<method name="sendCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V" />
+		<method name="setVolumeTo(II)V" />
+		<method name="unregisterCallback(Landroid/media/session/MediaController$Callback;)V" />
+	</class>
+	<class name="android/media/session/MediaController$Callback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAudioInfoChanged(Landroid/media/session/MediaController$PlaybackInfo;)V" />
+		<method name="onExtrasChanged(Landroid/os/Bundle;)V" />
+		<method name="onMetadataChanged(Landroid/media/MediaMetadata;)V" />
+		<method name="onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V" />
+		<method name="onQueueChanged(Ljava/util/List;)V" />
+		<method name="onQueueTitleChanged(Ljava/lang/CharSequence;)V" />
+		<method name="onSessionDestroyed()V" />
+		<method name="onSessionEvent(Ljava/lang/String;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/media/session/MediaController$PlaybackInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="29" />
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" />
+		<method name="getCurrentVolume()I" />
+		<method name="getMaxVolume()I" />
+		<method name="getPlaybackType()I" />
+		<method name="getVolumeControl()I" />
+		<method name="getVolumeControlId()Ljava/lang/String;" since="30" />
+		<field name="CREATOR" since="29" />
+		<field name="PLAYBACK_TYPE_LOCAL" />
+		<field name="PLAYBACK_TYPE_REMOTE" />
+	</class>
+	<class name="android/media/session/MediaController$TransportControls" since="21">
+		<extends name="java/lang/Object" />
+		<method name="fastForward()V" />
+		<method name="pause()V" />
+		<method name="play()V" />
+		<method name="playFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="playFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="playFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23" />
+		<method name="prepare()V" since="24" />
+		<method name="prepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+		<method name="prepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+		<method name="prepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="24" />
+		<method name="rewind()V" />
+		<method name="seekTo(J)V" />
+		<method name="sendCustomAction(Landroid/media/session/PlaybackState$CustomAction;Landroid/os/Bundle;)V" />
+		<method name="sendCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="setPlaybackSpeed(F)V" since="29" />
+		<method name="setRating(Landroid/media/Rating;)V" />
+		<method name="skipToNext()V" />
+		<method name="skipToPrevious()V" />
+		<method name="skipToQueueItem(J)V" />
+		<method name="stop()V" />
+	</class>
+	<class name="android/media/session/MediaSession" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)V" since="29" />
+		<method name="getController()Landroid/media/session/MediaController;" />
+		<method name="getCurrentControllerInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;" since="28" />
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;" />
+		<method name="isActive()Z" />
+		<method name="release()V" />
+		<method name="sendSessionEvent(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="setActive(Z)V" />
+		<method name="setCallback(Landroid/media/session/MediaSession$Callback;)V" />
+		<method name="setCallback(Landroid/media/session/MediaSession$Callback;Landroid/os/Handler;)V" />
+		<method name="setExtras(Landroid/os/Bundle;)V" />
+		<method name="setFlags(I)V" />
+		<method name="setMediaButtonBroadcastReceiver(Landroid/content/ComponentName;)V" since="31" />
+		<method name="setMediaButtonReceiver(Landroid/app/PendingIntent;)V" deprecated="31" />
+		<method name="setMetadata(Landroid/media/MediaMetadata;)V" />
+		<method name="setPlaybackState(Landroid/media/session/PlaybackState;)V" />
+		<method name="setPlaybackToLocal(Landroid/media/AudioAttributes;)V" />
+		<method name="setPlaybackToRemote(Landroid/media/VolumeProvider;)V" />
+		<method name="setQueue(Ljava/util/List;)V" />
+		<method name="setQueueTitle(Ljava/lang/CharSequence;)V" />
+		<method name="setRatingType(I)V" since="22" />
+		<method name="setSessionActivity(Landroid/app/PendingIntent;)V" />
+		<field name="FLAG_HANDLES_MEDIA_BUTTONS" deprecated="26" />
+		<field name="FLAG_HANDLES_TRANSPORT_CONTROLS" deprecated="26" />
+	</class>
+	<class name="android/media/session/MediaSession$Callback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V" />
+		<method name="onCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="onFastForward()V" />
+		<method name="onMediaButtonEvent(Landroid/content/Intent;)Z" />
+		<method name="onPause()V" />
+		<method name="onPlay()V" />
+		<method name="onPlayFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="onPlayFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="onPlayFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23" />
+		<method name="onPrepare()V" since="24" />
+		<method name="onPrepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+		<method name="onPrepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+		<method name="onPrepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="24" />
+		<method name="onRewind()V" />
+		<method name="onSeekTo(J)V" />
+		<method name="onSetPlaybackSpeed(F)V" since="29" />
+		<method name="onSetRating(Landroid/media/Rating;)V" />
+		<method name="onSkipToNext()V" />
+		<method name="onSkipToPrevious()V" />
+		<method name="onSkipToQueueItem(J)V" />
+		<method name="onStop()V" />
+	</class>
+	<class name="android/media/session/MediaSession$QueueItem" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/media/MediaDescription;J)V" />
+		<method name="getDescription()Landroid/media/MediaDescription;" />
+		<method name="getQueueId()J" />
+		<field name="CREATOR" />
+		<field name="UNKNOWN_ID" />
+	</class>
+	<class name="android/media/session/MediaSession$Token" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/session/MediaSessionManager" since="21">
+		<extends name="java/lang/Object" />
+		<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;)V" />
+		<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;Landroid/os/Handler;)V" />
+		<method name="addOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;)V" since="29" />
+		<method name="addOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;Landroid/os/Handler;)V" since="29" />
+		<method name="getActiveSessions(Landroid/content/ComponentName;)Ljava/util/List;" />
+		<method name="getSession2Tokens()Ljava/util/List;" since="29" />
+		<method name="isTrustedForMediaControl(Landroid/media/session/MediaSessionManager$RemoteUserInfo;)Z" since="28" />
+		<method name="notifySession2Created(Ljava/lang/Object;)V" since="29" deprecated="31" />
+		<method name="removeOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;)V" />
+		<method name="removeOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;)V" since="29" />
+	</class>
+	<class name="android/media/session/MediaSessionManager$OnActiveSessionsChangedListener" since="21">
+		<extends name="java/lang/Object" />
+		<method name="onActiveSessionsChanged(Ljava/util/List;)V" />
+	</class>
+	<class name="android/media/session/MediaSessionManager$OnSession2TokensChangedListener" since="29">
+		<extends name="java/lang/Object" />
+		<method name="onSession2TokensChanged(Ljava/util/List;)V" />
+	</class>
+	<class name="android/media/session/MediaSessionManager$RemoteUserInfo" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;II)V" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getPid()I" />
+		<method name="getUid()I" />
+	</class>
+	<class name="android/media/session/PlaybackState" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getActions()J" />
+		<method name="getActiveQueueItemId()J" />
+		<method name="getBufferedPosition()J" />
+		<method name="getCustomActions()Ljava/util/List;" />
+		<method name="getErrorMessage()Ljava/lang/CharSequence;" />
+		<method name="getExtras()Landroid/os/Bundle;" since="22" />
+		<method name="getLastPositionUpdateTime()J" />
+		<method name="getPlaybackSpeed()F" />
+		<method name="getPosition()J" />
+		<method name="getState()I" />
+		<method name="isActive()Z" since="31" />
+		<field name="ACTION_FAST_FORWARD" />
+		<field name="ACTION_PAUSE" />
+		<field name="ACTION_PLAY" />
+		<field name="ACTION_PLAY_FROM_MEDIA_ID" />
+		<field name="ACTION_PLAY_FROM_SEARCH" />
+		<field name="ACTION_PLAY_FROM_URI" since="23" />
+		<field name="ACTION_PLAY_PAUSE" />
+		<field name="ACTION_PREPARE" since="24" />
+		<field name="ACTION_PREPARE_FROM_MEDIA_ID" since="24" />
+		<field name="ACTION_PREPARE_FROM_SEARCH" since="24" />
+		<field name="ACTION_PREPARE_FROM_URI" since="24" />
+		<field name="ACTION_REWIND" />
+		<field name="ACTION_SEEK_TO" />
+		<field name="ACTION_SET_PLAYBACK_SPEED" since="31" />
+		<field name="ACTION_SET_RATING" />
+		<field name="ACTION_SKIP_TO_NEXT" />
+		<field name="ACTION_SKIP_TO_PREVIOUS" />
+		<field name="ACTION_SKIP_TO_QUEUE_ITEM" />
+		<field name="ACTION_STOP" />
+		<field name="CREATOR" />
+		<field name="PLAYBACK_POSITION_UNKNOWN" />
+		<field name="STATE_BUFFERING" />
+		<field name="STATE_CONNECTING" />
+		<field name="STATE_ERROR" />
+		<field name="STATE_FAST_FORWARDING" />
+		<field name="STATE_NONE" />
+		<field name="STATE_PAUSED" />
+		<field name="STATE_PLAYING" />
+		<field name="STATE_REWINDING" />
+		<field name="STATE_SKIPPING_TO_NEXT" />
+		<field name="STATE_SKIPPING_TO_PREVIOUS" />
+		<field name="STATE_SKIPPING_TO_QUEUE_ITEM" />
+		<field name="STATE_STOPPED" />
+	</class>
+	<class name="android/media/session/PlaybackState$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/media/session/PlaybackState;)V" />
+		<method name="addCustomAction(Landroid/media/session/PlaybackState$CustomAction;)Landroid/media/session/PlaybackState$Builder;" />
+		<method name="addCustomAction(Ljava/lang/String;Ljava/lang/String;I)Landroid/media/session/PlaybackState$Builder;" />
+		<method name="build()Landroid/media/session/PlaybackState;" />
+		<method name="setActions(J)Landroid/media/session/PlaybackState$Builder;" />
+		<method name="setActiveQueueItemId(J)Landroid/media/session/PlaybackState$Builder;" />
+		<method name="setBufferedPosition(J)Landroid/media/session/PlaybackState$Builder;" />
+		<method name="setErrorMessage(Ljava/lang/CharSequence;)Landroid/media/session/PlaybackState$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/session/PlaybackState$Builder;" since="22" />
+		<method name="setState(IJF)Landroid/media/session/PlaybackState$Builder;" />
+		<method name="setState(IJFJ)Landroid/media/session/PlaybackState$Builder;" />
+	</class>
+	<class name="android/media/session/PlaybackState$CustomAction" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAction()Ljava/lang/String;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getIcon()I" />
+		<method name="getName()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/media/session/PlaybackState$CustomAction$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/CharSequence;I)V" />
+		<method name="build()Landroid/media/session/PlaybackState$CustomAction;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/session/PlaybackState$CustomAction$Builder;" />
+	</class>
+	<class name="android/media/tv/TvContentRating" since="21">
+		<extends name="java/lang/Object" />
+		<method name="contains(Landroid/media/tv/TvContentRating;)Z" since="24" />
+		<method name="createRating(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/media/tv/TvContentRating;" />
+		<method name="flattenToString()Ljava/lang/String;" />
+		<method name="getDomain()Ljava/lang/String;" />
+		<method name="getMainRating()Ljava/lang/String;" />
+		<method name="getRatingSystem()Ljava/lang/String;" />
+		<method name="getSubRatings()Ljava/util/List;" />
+		<method name="unflattenFromString(Ljava/lang/String;)Landroid/media/tv/TvContentRating;" />
+		<field name="UNRATED" since="23" />
+	</class>
+	<class name="android/media/tv/TvContract" since="21">
+		<extends name="java/lang/Object" />
+		<method name="buildChannelLogoUri(J)Landroid/net/Uri;" />
+		<method name="buildChannelLogoUri(Landroid/net/Uri;)Landroid/net/Uri;" />
+		<method name="buildChannelUri(J)Landroid/net/Uri;" />
+		<method name="buildChannelUriForPassthroughInput(Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildChannelsUriForInput(Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildInputId(Landroid/content/ComponentName;)Ljava/lang/String;" />
+		<method name="buildPreviewProgramUri(J)Landroid/net/Uri;" since="26" />
+		<method name="buildPreviewProgramsUriForChannel(J)Landroid/net/Uri;" since="26" />
+		<method name="buildPreviewProgramsUriForChannel(Landroid/net/Uri;)Landroid/net/Uri;" since="26" />
+		<method name="buildProgramUri(J)Landroid/net/Uri;" />
+		<method name="buildProgramsUriForChannel(J)Landroid/net/Uri;" />
+		<method name="buildProgramsUriForChannel(JJJ)Landroid/net/Uri;" />
+		<method name="buildProgramsUriForChannel(Landroid/net/Uri;)Landroid/net/Uri;" />
+		<method name="buildProgramsUriForChannel(Landroid/net/Uri;JJ)Landroid/net/Uri;" />
+		<method name="buildRecordedProgramUri(J)Landroid/net/Uri;" since="24" />
+		<method name="buildWatchNextProgramUri(J)Landroid/net/Uri;" since="26" />
+		<method name="isChannelUri(Landroid/net/Uri;)Z" since="24" />
+		<method name="isChannelUriForPassthroughInput(Landroid/net/Uri;)Z" since="24" />
+		<method name="isChannelUriForTunerInput(Landroid/net/Uri;)Z" since="24" />
+		<method name="isProgramUri(Landroid/net/Uri;)Z" since="24" />
+		<method name="isRecordedProgramUri(Landroid/net/Uri;)Z" since="27" />
+		<method name="requestChannelBrowsable(Landroid/content/Context;J)V" since="26" />
+		<field name="ACTION_INITIALIZE_PROGRAMS" since="26" />
+		<field name="ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT" since="26" />
+		<field name="ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED" since="26" />
+		<field name="ACTION_REQUEST_CHANNEL_BROWSABLE" since="26" />
+		<field name="ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" since="26" />
+		<field name="AUTHORITY" />
+		<field name="EXTRA_CHANNEL_ID" since="26" />
+		<field name="EXTRA_PREVIEW_PROGRAM_ID" since="26" />
+		<field name="EXTRA_WATCH_NEXT_PROGRAM_ID" since="26" />
+	</class>
+	<class name="android/media/tv/TvContract$BaseTvColumns" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="COLUMN_PACKAGE_NAME" />
+	</class>
+	<class name="android/media/tv/TvContract$Channels" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/tv/TvContract$BaseTvColumns" />
+		<method name="getVideoResolution(Ljava/lang/String;)Ljava/lang/String;" />
+		<field name="COLUMN_APP_LINK_COLOR" since="23" />
+		<field name="COLUMN_APP_LINK_ICON_URI" since="23" />
+		<field name="COLUMN_APP_LINK_INTENT_URI" since="23" />
+		<field name="COLUMN_APP_LINK_POSTER_ART_URI" since="23" />
+		<field name="COLUMN_APP_LINK_TEXT" since="23" />
+		<field name="COLUMN_BROADCAST_GENRE" since="31" />
+		<field name="COLUMN_BROWSABLE" since="26" />
+		<field name="COLUMN_CHANNEL_LIST_ID" since="31" />
+		<field name="COLUMN_DESCRIPTION" />
+		<field name="COLUMN_DISPLAY_NAME" />
+		<field name="COLUMN_DISPLAY_NUMBER" />
+		<field name="COLUMN_GLOBAL_CONTENT_ID" since="30" />
+		<field name="COLUMN_INPUT_ID" />
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" since="23" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" since="23" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" since="23" />
+		<field name="COLUMN_INTERNAL_PROVIDER_ID" since="26" />
+		<field name="COLUMN_LOCKED" since="26" />
+		<field name="COLUMN_NETWORK_AFFILIATION" />
+		<field name="COLUMN_ORIGINAL_NETWORK_ID" />
+		<field name="COLUMN_REMOTE_CONTROL_KEY_PRESET_NUMBER" since="31" />
+		<field name="COLUMN_SCRAMBLED" since="31" />
+		<field name="COLUMN_SEARCHABLE" />
+		<field name="COLUMN_SERVICE_ID" />
+		<field name="COLUMN_SERVICE_TYPE" />
+		<field name="COLUMN_TRANSIENT" since="26" />
+		<field name="COLUMN_TRANSPORT_STREAM_ID" />
+		<field name="COLUMN_TYPE" />
+		<field name="COLUMN_VERSION_NUMBER" />
+		<field name="COLUMN_VIDEO_FORMAT" />
+		<field name="COLUMN_VIDEO_RESOLUTION" since="31" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="SERVICE_TYPE_AUDIO" />
+		<field name="SERVICE_TYPE_AUDIO_VIDEO" />
+		<field name="SERVICE_TYPE_OTHER" />
+		<field name="TYPE_1SEG" />
+		<field name="TYPE_ATSC3_T" since="30" />
+		<field name="TYPE_ATSC_C" />
+		<field name="TYPE_ATSC_M_H" />
+		<field name="TYPE_ATSC_T" />
+		<field name="TYPE_CMMB" />
+		<field name="TYPE_DTMB" />
+		<field name="TYPE_DVB_C" />
+		<field name="TYPE_DVB_C2" />
+		<field name="TYPE_DVB_H" />
+		<field name="TYPE_DVB_S" />
+		<field name="TYPE_DVB_S2" />
+		<field name="TYPE_DVB_SH" />
+		<field name="TYPE_DVB_T" />
+		<field name="TYPE_DVB_T2" />
+		<field name="TYPE_ISDB_C" />
+		<field name="TYPE_ISDB_S" />
+		<field name="TYPE_ISDB_S3" since="29" />
+		<field name="TYPE_ISDB_T" />
+		<field name="TYPE_ISDB_TB" />
+		<field name="TYPE_NTSC" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_PAL" />
+		<field name="TYPE_PREVIEW" since="26" />
+		<field name="TYPE_SECAM" />
+		<field name="TYPE_S_DMB" />
+		<field name="TYPE_T_DMB" />
+		<field name="VIDEO_FORMAT_1080I" />
+		<field name="VIDEO_FORMAT_1080P" />
+		<field name="VIDEO_FORMAT_2160P" />
+		<field name="VIDEO_FORMAT_240P" />
+		<field name="VIDEO_FORMAT_360P" />
+		<field name="VIDEO_FORMAT_4320P" />
+		<field name="VIDEO_FORMAT_480I" />
+		<field name="VIDEO_FORMAT_480P" />
+		<field name="VIDEO_FORMAT_576I" />
+		<field name="VIDEO_FORMAT_576P" />
+		<field name="VIDEO_FORMAT_720P" />
+		<field name="VIDEO_RESOLUTION_ED" />
+		<field name="VIDEO_RESOLUTION_FHD" />
+		<field name="VIDEO_RESOLUTION_HD" />
+		<field name="VIDEO_RESOLUTION_SD" />
+		<field name="VIDEO_RESOLUTION_UHD" />
+	</class>
+	<class name="android/media/tv/TvContract$Channels$Logo" since="21">
+		<extends name="java/lang/Object" />
+		<field name="CONTENT_DIRECTORY" />
+	</class>
+	<class name="android/media/tv/TvContract$PreviewPrograms" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/tv/TvContract$BaseTvColumns" />
+		<field name="ASPECT_RATIO_16_9" />
+		<field name="ASPECT_RATIO_1_1" />
+		<field name="ASPECT_RATIO_2_3" />
+		<field name="ASPECT_RATIO_3_2" />
+		<field name="ASPECT_RATIO_4_3" />
+		<field name="AVAILABILITY_AVAILABLE" />
+		<field name="AVAILABILITY_FREE_WITH_SUBSCRIPTION" />
+		<field name="AVAILABILITY_PAID_CONTENT" />
+		<field name="COLUMN_AUDIO_LANGUAGE" />
+		<field name="COLUMN_AUTHOR" />
+		<field name="COLUMN_AVAILABILITY" />
+		<field name="COLUMN_BROWSABLE" />
+		<field name="COLUMN_CANONICAL_GENRE" />
+		<field name="COLUMN_CHANNEL_ID" />
+		<field name="COLUMN_CONTENT_ID" />
+		<field name="COLUMN_CONTENT_RATING" />
+		<field name="COLUMN_DURATION_MILLIS" />
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER" />
+		<field name="COLUMN_EPISODE_TITLE" />
+		<field name="COLUMN_INTENT_URI" />
+		<field name="COLUMN_INTERACTION_COUNT" />
+		<field name="COLUMN_INTERACTION_TYPE" />
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" />
+		<field name="COLUMN_INTERNAL_PROVIDER_ID" />
+		<field name="COLUMN_ITEM_COUNT" />
+		<field name="COLUMN_LAST_PLAYBACK_POSITION_MILLIS" />
+		<field name="COLUMN_LIVE" />
+		<field name="COLUMN_LOGO_URI" />
+		<field name="COLUMN_LONG_DESCRIPTION" />
+		<field name="COLUMN_OFFER_PRICE" />
+		<field name="COLUMN_POSTER_ART_ASPECT_RATIO" />
+		<field name="COLUMN_POSTER_ART_URI" />
+		<field name="COLUMN_PREVIEW_VIDEO_URI" />
+		<field name="COLUMN_RELEASE_DATE" />
+		<field name="COLUMN_REVIEW_RATING" />
+		<field name="COLUMN_REVIEW_RATING_STYLE" />
+		<field name="COLUMN_SEARCHABLE" />
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER" />
+		<field name="COLUMN_SEASON_TITLE" />
+		<field name="COLUMN_SERIES_ID" since="29" />
+		<field name="COLUMN_SHORT_DESCRIPTION" />
+		<field name="COLUMN_SPLIT_ID" since="30" />
+		<field name="COLUMN_STARTING_PRICE" />
+		<field name="COLUMN_THUMBNAIL_ASPECT_RATIO" />
+		<field name="COLUMN_THUMBNAIL_URI" />
+		<field name="COLUMN_TITLE" />
+		<field name="COLUMN_TRANSIENT" />
+		<field name="COLUMN_TYPE" />
+		<field name="COLUMN_VERSION_NUMBER" />
+		<field name="COLUMN_VIDEO_HEIGHT" />
+		<field name="COLUMN_VIDEO_WIDTH" />
+		<field name="COLUMN_WEIGHT" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="INTERACTION_TYPE_FANS" />
+		<field name="INTERACTION_TYPE_FOLLOWERS" />
+		<field name="INTERACTION_TYPE_LIKES" />
+		<field name="INTERACTION_TYPE_LISTENS" />
+		<field name="INTERACTION_TYPE_THUMBS" />
+		<field name="INTERACTION_TYPE_VIEWERS" />
+		<field name="INTERACTION_TYPE_VIEWS" />
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE" />
+		<field name="REVIEW_RATING_STYLE_STARS" />
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" />
+		<field name="TYPE_ALBUM" />
+		<field name="TYPE_ARTIST" />
+		<field name="TYPE_CHANNEL" />
+		<field name="TYPE_CLIP" />
+		<field name="TYPE_EVENT" />
+		<field name="TYPE_MOVIE" />
+		<field name="TYPE_PLAYLIST" />
+		<field name="TYPE_STATION" />
+		<field name="TYPE_TRACK" />
+		<field name="TYPE_TV_EPISODE" />
+		<field name="TYPE_TV_SEASON" />
+		<field name="TYPE_TV_SERIES" />
+	</class>
+	<class name="android/media/tv/TvContract$Programs" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/tv/TvContract$BaseTvColumns" />
+		<field name="COLUMN_AUDIO_LANGUAGE" />
+		<field name="COLUMN_BROADCAST_GENRE" />
+		<field name="COLUMN_CANONICAL_GENRE" />
+		<field name="COLUMN_CHANNEL_ID" />
+		<field name="COLUMN_CONTENT_RATING" />
+		<field name="COLUMN_END_TIME_UTC_MILLIS" />
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER" since="24" />
+		<field name="COLUMN_EPISODE_NUMBER" deprecated="24" />
+		<field name="COLUMN_EPISODE_TITLE" />
+		<field name="COLUMN_EVENT_ID" since="30" />
+		<field name="COLUMN_GLOBAL_CONTENT_ID" since="30" />
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" since="23" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" since="23" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" since="23" />
+		<field name="COLUMN_LONG_DESCRIPTION" />
+		<field name="COLUMN_POSTER_ART_URI" />
+		<field name="COLUMN_RECORDING_PROHIBITED" since="24" />
+		<field name="COLUMN_REVIEW_RATING" since="26" />
+		<field name="COLUMN_REVIEW_RATING_STYLE" since="26" />
+		<field name="COLUMN_SEARCHABLE" since="23" />
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER" since="24" />
+		<field name="COLUMN_SEASON_NUMBER" deprecated="24" />
+		<field name="COLUMN_SEASON_TITLE" since="24" />
+		<field name="COLUMN_SERIES_ID" since="29" />
+		<field name="COLUMN_SHORT_DESCRIPTION" />
+		<field name="COLUMN_SPLIT_ID" since="30" />
+		<field name="COLUMN_START_TIME_UTC_MILLIS" />
+		<field name="COLUMN_THUMBNAIL_URI" />
+		<field name="COLUMN_TITLE" />
+		<field name="COLUMN_VERSION_NUMBER" />
+		<field name="COLUMN_VIDEO_HEIGHT" />
+		<field name="COLUMN_VIDEO_WIDTH" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE" since="26" />
+		<field name="REVIEW_RATING_STYLE_STARS" since="26" />
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" since="26" />
+	</class>
+	<class name="android/media/tv/TvContract$Programs$Genres" since="21">
+		<extends name="java/lang/Object" />
+		<method name="decode(Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="encode([Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="isCanonical(Ljava/lang/String;)Z" since="24" />
+		<field name="ANIMAL_WILDLIFE" />
+		<field name="ARTS" since="22" />
+		<field name="COMEDY" />
+		<field name="DRAMA" />
+		<field name="EDUCATION" />
+		<field name="ENTERTAINMENT" since="22" />
+		<field name="FAMILY_KIDS" />
+		<field name="GAMING" />
+		<field name="LIFE_STYLE" since="22" />
+		<field name="MOVIES" />
+		<field name="MUSIC" since="22" />
+		<field name="NEWS" />
+		<field name="PREMIER" since="22" />
+		<field name="SHOPPING" />
+		<field name="SPORTS" />
+		<field name="TECH_SCIENCE" since="22" />
+		<field name="TRAVEL" />
+	</class>
+	<class name="android/media/tv/TvContract$RecordedPrograms" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/tv/TvContract$BaseTvColumns" />
+		<field name="COLUMN_AUDIO_LANGUAGE" />
+		<field name="COLUMN_BROADCAST_GENRE" />
+		<field name="COLUMN_CANONICAL_GENRE" />
+		<field name="COLUMN_CHANNEL_ID" />
+		<field name="COLUMN_CONTENT_RATING" />
+		<field name="COLUMN_END_TIME_UTC_MILLIS" />
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER" />
+		<field name="COLUMN_EPISODE_TITLE" />
+		<field name="COLUMN_INPUT_ID" />
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" />
+		<field name="COLUMN_LONG_DESCRIPTION" />
+		<field name="COLUMN_POSTER_ART_URI" />
+		<field name="COLUMN_RECORDING_DATA_BYTES" />
+		<field name="COLUMN_RECORDING_DATA_URI" />
+		<field name="COLUMN_RECORDING_DURATION_MILLIS" />
+		<field name="COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS" />
+		<field name="COLUMN_REVIEW_RATING" since="26" />
+		<field name="COLUMN_REVIEW_RATING_STYLE" since="26" />
+		<field name="COLUMN_SEARCHABLE" />
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER" />
+		<field name="COLUMN_SEASON_TITLE" />
+		<field name="COLUMN_SERIES_ID" since="29" />
+		<field name="COLUMN_SHORT_DESCRIPTION" />
+		<field name="COLUMN_SPLIT_ID" since="30" />
+		<field name="COLUMN_START_TIME_UTC_MILLIS" />
+		<field name="COLUMN_THUMBNAIL_URI" />
+		<field name="COLUMN_TITLE" />
+		<field name="COLUMN_VERSION_NUMBER" />
+		<field name="COLUMN_VIDEO_HEIGHT" />
+		<field name="COLUMN_VIDEO_WIDTH" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE" since="26" />
+		<field name="REVIEW_RATING_STYLE_STARS" since="26" />
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" since="26" />
+	</class>
+	<class name="android/media/tv/TvContract$WatchNextPrograms" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/media/tv/TvContract$BaseTvColumns" />
+		<field name="ASPECT_RATIO_16_9" />
+		<field name="ASPECT_RATIO_1_1" />
+		<field name="ASPECT_RATIO_2_3" />
+		<field name="ASPECT_RATIO_3_2" />
+		<field name="ASPECT_RATIO_4_3" />
+		<field name="AVAILABILITY_AVAILABLE" />
+		<field name="AVAILABILITY_FREE_WITH_SUBSCRIPTION" />
+		<field name="AVAILABILITY_PAID_CONTENT" />
+		<field name="COLUMN_AUDIO_LANGUAGE" />
+		<field name="COLUMN_AUTHOR" />
+		<field name="COLUMN_AVAILABILITY" />
+		<field name="COLUMN_BROWSABLE" />
+		<field name="COLUMN_CANONICAL_GENRE" />
+		<field name="COLUMN_CONTENT_ID" />
+		<field name="COLUMN_CONTENT_RATING" />
+		<field name="COLUMN_DURATION_MILLIS" />
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER" />
+		<field name="COLUMN_EPISODE_TITLE" />
+		<field name="COLUMN_INTENT_URI" />
+		<field name="COLUMN_INTERACTION_COUNT" />
+		<field name="COLUMN_INTERACTION_TYPE" />
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" />
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" />
+		<field name="COLUMN_INTERNAL_PROVIDER_ID" />
+		<field name="COLUMN_ITEM_COUNT" />
+		<field name="COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS" />
+		<field name="COLUMN_LAST_PLAYBACK_POSITION_MILLIS" />
+		<field name="COLUMN_LIVE" />
+		<field name="COLUMN_LOGO_URI" />
+		<field name="COLUMN_LONG_DESCRIPTION" />
+		<field name="COLUMN_OFFER_PRICE" />
+		<field name="COLUMN_POSTER_ART_ASPECT_RATIO" />
+		<field name="COLUMN_POSTER_ART_URI" />
+		<field name="COLUMN_PREVIEW_VIDEO_URI" />
+		<field name="COLUMN_RELEASE_DATE" />
+		<field name="COLUMN_REVIEW_RATING" />
+		<field name="COLUMN_REVIEW_RATING_STYLE" />
+		<field name="COLUMN_SEARCHABLE" />
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER" />
+		<field name="COLUMN_SEASON_TITLE" />
+		<field name="COLUMN_SERIES_ID" since="29" />
+		<field name="COLUMN_SHORT_DESCRIPTION" />
+		<field name="COLUMN_SPLIT_ID" since="30" />
+		<field name="COLUMN_STARTING_PRICE" />
+		<field name="COLUMN_THUMBNAIL_ASPECT_RATIO" />
+		<field name="COLUMN_THUMBNAIL_URI" />
+		<field name="COLUMN_TITLE" />
+		<field name="COLUMN_TRANSIENT" />
+		<field name="COLUMN_TYPE" />
+		<field name="COLUMN_VERSION_NUMBER" />
+		<field name="COLUMN_VIDEO_HEIGHT" />
+		<field name="COLUMN_VIDEO_WIDTH" />
+		<field name="COLUMN_WATCH_NEXT_TYPE" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="INTERACTION_TYPE_FANS" />
+		<field name="INTERACTION_TYPE_FOLLOWERS" />
+		<field name="INTERACTION_TYPE_LIKES" />
+		<field name="INTERACTION_TYPE_LISTENS" />
+		<field name="INTERACTION_TYPE_THUMBS" />
+		<field name="INTERACTION_TYPE_VIEWERS" />
+		<field name="INTERACTION_TYPE_VIEWS" />
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE" />
+		<field name="REVIEW_RATING_STYLE_STARS" />
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" />
+		<field name="TYPE_ALBUM" />
+		<field name="TYPE_ARTIST" />
+		<field name="TYPE_CHANNEL" />
+		<field name="TYPE_CLIP" />
+		<field name="TYPE_EVENT" />
+		<field name="TYPE_MOVIE" />
+		<field name="TYPE_PLAYLIST" />
+		<field name="TYPE_STATION" />
+		<field name="TYPE_TRACK" />
+		<field name="TYPE_TV_EPISODE" />
+		<field name="TYPE_TV_SEASON" />
+		<field name="TYPE_TV_SERIES" />
+		<field name="WATCH_NEXT_TYPE_CONTINUE" />
+		<field name="WATCH_NEXT_TYPE_NEW" />
+		<field name="WATCH_NEXT_TYPE_NEXT" />
+		<field name="WATCH_NEXT_TYPE_WATCHLIST" />
+	</class>
+	<class name="android/media/tv/TvInputInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="canPauseRecording()Z" since="31" />
+		<method name="canRecord()Z" since="24" />
+		<method name="createSettingsIntent()Landroid/content/Intent;" deprecated="26" />
+		<method name="createSetupIntent()Landroid/content/Intent;" />
+		<method name="getExtras()Landroid/os/Bundle;" since="24" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getParentId()Ljava/lang/String;" />
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;" />
+		<method name="getTunerCount()I" since="24" />
+		<method name="getType()I" />
+		<method name="isHidden(Landroid/content/Context;)Z" since="24" />
+		<method name="isPassthroughInput()Z" />
+		<method name="loadCustomLabel(Landroid/content/Context;)Ljava/lang/CharSequence;" since="24" />
+		<method name="loadIcon(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/Context;)Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+		<field name="EXTRA_INPUT_ID" />
+		<field name="TYPE_COMPONENT" />
+		<field name="TYPE_COMPOSITE" />
+		<field name="TYPE_DISPLAY_PORT" />
+		<field name="TYPE_DVI" />
+		<field name="TYPE_HDMI" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_SCART" />
+		<field name="TYPE_SVIDEO" />
+		<field name="TYPE_TUNER" />
+		<field name="TYPE_VGA" />
+	</class>
+	<class name="android/media/tv/TvInputInfo$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/ComponentName;)V" />
+		<method name="build()Landroid/media/tv/TvInputInfo;" />
+		<method name="setCanPauseRecording(Z)Landroid/media/tv/TvInputInfo$Builder;" since="31" />
+		<method name="setCanRecord(Z)Landroid/media/tv/TvInputInfo$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/tv/TvInputInfo$Builder;" />
+		<method name="setTunerCount(I)Landroid/media/tv/TvInputInfo$Builder;" />
+	</class>
+	<class name="android/media/tv/TvInputManager" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getBlockedRatings()Ljava/util/List;" since="28" />
+		<method name="getInputState(Ljava/lang/String;)I" />
+		<method name="getTvInputInfo(Ljava/lang/String;)Landroid/media/tv/TvInputInfo;" />
+		<method name="getTvInputList()Ljava/util/List;" />
+		<method name="isParentalControlsEnabled()Z" />
+		<method name="isRatingBlocked(Landroid/media/tv/TvContentRating;)Z" />
+		<method name="registerCallback(Landroid/media/tv/TvInputManager$TvInputCallback;Landroid/os/Handler;)V" />
+		<method name="unregisterCallback(Landroid/media/tv/TvInputManager$TvInputCallback;)V" />
+		<method name="updateTvInputInfo(Landroid/media/tv/TvInputInfo;)V" since="24" />
+		<field name="ACTION_BLOCKED_RATINGS_CHANGED" />
+		<field name="ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED" />
+		<field name="ACTION_QUERY_CONTENT_RATING_SYSTEMS" />
+		<field name="ACTION_SETUP_INPUTS" since="24" />
+		<field name="ACTION_VIEW_RECORDING_SCHEDULES" since="26" />
+		<field name="INPUT_STATE_CONNECTED" />
+		<field name="INPUT_STATE_CONNECTED_STANDBY" />
+		<field name="INPUT_STATE_DISCONNECTED" />
+		<field name="META_DATA_CONTENT_RATING_SYSTEMS" />
+		<field name="RECORDING_ERROR_INSUFFICIENT_SPACE" since="24" />
+		<field name="RECORDING_ERROR_RESOURCE_BUSY" since="24" />
+		<field name="RECORDING_ERROR_UNKNOWN" since="24" />
+		<field name="TIME_SHIFT_INVALID_TIME" since="23" />
+		<field name="TIME_SHIFT_STATUS_AVAILABLE" since="23" />
+		<field name="TIME_SHIFT_STATUS_UNAVAILABLE" since="23" />
+		<field name="TIME_SHIFT_STATUS_UNKNOWN" since="23" />
+		<field name="TIME_SHIFT_STATUS_UNSUPPORTED" since="23" />
+		<field name="VIDEO_UNAVAILABLE_REASON_AUDIO_ONLY" since="23" />
+		<field name="VIDEO_UNAVAILABLE_REASON_BUFFERING" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_BLACKOUT" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_CARD_INVALID" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_CARD_MUTE" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_INSUFFICIENT_OUTPUT_PROTECTION" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_LICENSE_EXPIRED" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_NEED_ACTIVATION" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_NEED_PAIRING" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_NO_CARD" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_PVR_RECORDING_NOT_ALLOWED" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_REBOOTING" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_INSUFFICIENT_RESOURCE" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_NOT_CONNECTED" since="30" />
+		<field name="VIDEO_UNAVAILABLE_REASON_TUNING" />
+		<field name="VIDEO_UNAVAILABLE_REASON_UNKNOWN" />
+		<field name="VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL" />
+	</class>
+	<class name="android/media/tv/TvInputManager$TvInputCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onInputAdded(Ljava/lang/String;)V" />
+		<method name="onInputRemoved(Ljava/lang/String;)V" />
+		<method name="onInputStateChanged(Ljava/lang/String;I)V" />
+		<method name="onInputUpdated(Ljava/lang/String;)V" since="24" />
+		<method name="onTvInputInfoUpdated(Landroid/media/tv/TvInputInfo;)V" since="24" />
+	</class>
+	<class name="android/media/tv/TvInputService" since="21">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCreateRecordingSession(Ljava/lang/String;)Landroid/media/tv/TvInputService$RecordingSession;" since="24" />
+		<method name="onCreateRecordingSession(Ljava/lang/String;Ljava/lang/String;)Landroid/media/tv/TvInputService$RecordingSession;" since="30" />
+		<method name="onCreateSession(Ljava/lang/String;)Landroid/media/tv/TvInputService$Session;" />
+		<method name="onCreateSession(Ljava/lang/String;Ljava/lang/String;)Landroid/media/tv/TvInputService$Session;" since="30" />
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_BACKGROUND" since="30" />
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_LIVE" since="30" />
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK" since="30" />
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_RECORD" since="30" />
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_SCAN" since="30" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/media/tv/TvInputService$HardwareSession" since="21">
+		<extends name="android/media/tv/TvInputService$Session" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="getHardwareInputId()Ljava/lang/String;" />
+		<method name="onHardwareVideoAvailable()V" />
+		<method name="onHardwareVideoUnavailable(I)V" />
+	</class>
+	<class name="android/media/tv/TvInputService$RecordingSession" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="notifyError(I)V" />
+		<method name="notifyRecordingStopped(Landroid/net/Uri;)V" />
+		<method name="notifyTuned(Landroid/net/Uri;)V" />
+		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="onPauseRecording(Landroid/os/Bundle;)V" since="31" />
+		<method name="onRelease()V" />
+		<method name="onResumeRecording(Landroid/os/Bundle;)V" since="31" />
+		<method name="onStartRecording(Landroid/net/Uri;)V" />
+		<method name="onStartRecording(Landroid/net/Uri;Landroid/os/Bundle;)V" since="30" />
+		<method name="onStopRecording()V" />
+		<method name="onTune(Landroid/net/Uri;)V" />
+		<method name="onTune(Landroid/net/Uri;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/media/tv/TvInputService$Session" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/KeyEvent$Callback" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="layoutSurface(IIII)V" since="23" />
+		<method name="notifyChannelRetuned(Landroid/net/Uri;)V" />
+		<method name="notifyContentAllowed()V" />
+		<method name="notifyContentBlocked(Landroid/media/tv/TvContentRating;)V" />
+		<method name="notifyTimeShiftStatusChanged(I)V" since="23" />
+		<method name="notifyTrackSelected(ILjava/lang/String;)V" />
+		<method name="notifyTracksChanged(Ljava/util/List;)V" />
+		<method name="notifyVideoAvailable()V" />
+		<method name="notifyVideoUnavailable(I)V" />
+		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+		<method name="onCreateOverlayView()Landroid/view/View;" />
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onOverlayViewSizeChanged(II)V" since="23" />
+		<method name="onRelease()V" />
+		<method name="onSelectTrack(ILjava/lang/String;)Z" />
+		<method name="onSetCaptionEnabled(Z)V" />
+		<method name="onSetStreamVolume(F)V" />
+		<method name="onSetSurface(Landroid/view/Surface;)Z" />
+		<method name="onSurfaceChanged(III)V" />
+		<method name="onTimeShiftGetCurrentPosition()J" since="23" />
+		<method name="onTimeShiftGetStartPosition()J" since="23" />
+		<method name="onTimeShiftPause()V" since="23" />
+		<method name="onTimeShiftPlay(Landroid/net/Uri;)V" since="24" />
+		<method name="onTimeShiftResume()V" since="23" />
+		<method name="onTimeShiftSeekTo(J)V" since="23" />
+		<method name="onTimeShiftSetPlaybackParams(Landroid/media/PlaybackParams;)V" since="23" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onTune(Landroid/net/Uri;)Z" />
+		<method name="onTune(Landroid/net/Uri;Landroid/os/Bundle;)Z" since="24" />
+		<method name="onUnblockContent(Landroid/media/tv/TvContentRating;)V" />
+		<method name="setOverlayViewEnabled(Z)V" />
+	</class>
+	<class name="android/media/tv/TvRecordingClient" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;Landroid/media/tv/TvRecordingClient$RecordingCallback;Landroid/os/Handler;)V" />
+		<method name="pauseRecording()V" since="31" />
+		<method name="pauseRecording(Landroid/os/Bundle;)V" since="31" />
+		<method name="release()V" />
+		<method name="resumeRecording()V" since="31" />
+		<method name="resumeRecording(Landroid/os/Bundle;)V" since="31" />
+		<method name="sendAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="startRecording(Landroid/net/Uri;)V" />
+		<method name="startRecording(Landroid/net/Uri;Landroid/os/Bundle;)V" since="30" />
+		<method name="stopRecording()V" />
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;)V" />
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/media/tv/TvRecordingClient$RecordingCallback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onConnectionFailed(Ljava/lang/String;)V" />
+		<method name="onDisconnected(Ljava/lang/String;)V" />
+		<method name="onError(I)V" />
+		<method name="onRecordingStopped(Landroid/net/Uri;)V" />
+		<method name="onTuned(Landroid/net/Uri;)V" />
+	</class>
+	<class name="android/media/tv/TvTrackInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAudioChannelCount()I" />
+		<method name="getAudioSampleRate()I" />
+		<method name="getDescription()Ljava/lang/CharSequence;" since="23" />
+		<method name="getEncoding()Ljava/lang/String;" since="30" />
+		<method name="getExtra()Landroid/os/Bundle;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getLanguage()Ljava/lang/String;" />
+		<method name="getType()I" />
+		<method name="getVideoActiveFormatDescription()B" since="24" />
+		<method name="getVideoFrameRate()F" />
+		<method name="getVideoHeight()I" />
+		<method name="getVideoPixelAspectRatio()F" since="23" />
+		<method name="getVideoWidth()I" />
+		<method name="isAudioDescription()Z" since="30" />
+		<method name="isEncrypted()Z" since="30" />
+		<method name="isHardOfHearing()Z" since="30" />
+		<method name="isSpokenSubtitle()Z" since="30" />
+		<field name="CREATOR" />
+		<field name="TYPE_AUDIO" />
+		<field name="TYPE_SUBTITLE" />
+		<field name="TYPE_VIDEO" />
+	</class>
+	<class name="android/media/tv/TvTrackInfo$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="build()Landroid/media/tv/TvTrackInfo;" />
+		<method name="setAudioChannelCount(I)Landroid/media/tv/TvTrackInfo$Builder;" />
+		<method name="setAudioDescription(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30" />
+		<method name="setAudioSampleRate(I)Landroid/media/tv/TvTrackInfo$Builder;" />
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/tv/TvTrackInfo$Builder;" since="23" />
+		<method name="setEncoding(Ljava/lang/String;)Landroid/media/tv/TvTrackInfo$Builder;" since="30" />
+		<method name="setEncrypted(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30" />
+		<method name="setExtra(Landroid/os/Bundle;)Landroid/media/tv/TvTrackInfo$Builder;" />
+		<method name="setHardOfHearing(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30" />
+		<method name="setLanguage(Ljava/lang/String;)Landroid/media/tv/TvTrackInfo$Builder;" />
+		<method name="setSpokenSubtitle(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30" />
+		<method name="setVideoActiveFormatDescription(B)Landroid/media/tv/TvTrackInfo$Builder;" since="24" />
+		<method name="setVideoFrameRate(F)Landroid/media/tv/TvTrackInfo$Builder;" />
+		<method name="setVideoHeight(I)Landroid/media/tv/TvTrackInfo$Builder;" />
+		<method name="setVideoPixelAspectRatio(F)Landroid/media/tv/TvTrackInfo$Builder;" since="23" />
+		<method name="setVideoWidth(I)Landroid/media/tv/TvTrackInfo$Builder;" />
+	</class>
+	<class name="android/media/tv/TvView" since="21">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="dispatchUnhandledInputEvent(Landroid/view/InputEvent;)Z" />
+		<method name="getSelectedTrack(I)Ljava/lang/String;" />
+		<method name="getTracks(I)Ljava/util/List;" />
+		<method name="onUnhandledInputEvent(Landroid/view/InputEvent;)Z" />
+		<method name="reset()V" />
+		<method name="selectTrack(ILjava/lang/String;)V" />
+		<method name="sendAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+		<method name="setCallback(Landroid/media/tv/TvView$TvInputCallback;)V" />
+		<method name="setCaptionEnabled(Z)V" />
+		<method name="setOnUnhandledInputEventListener(Landroid/media/tv/TvView$OnUnhandledInputEventListener;)V" />
+		<method name="setStreamVolume(F)V" />
+		<method name="setTimeShiftPositionCallback(Landroid/media/tv/TvView$TimeShiftPositionCallback;)V" since="23" />
+		<method name="setZOrderMediaOverlay(Z)V" since="24" />
+		<method name="setZOrderOnTop(Z)V" since="24" />
+		<method name="timeShiftPause()V" since="23" />
+		<method name="timeShiftPlay(Ljava/lang/String;Landroid/net/Uri;)V" since="24" />
+		<method name="timeShiftResume()V" since="23" />
+		<method name="timeShiftSeekTo(J)V" since="23" />
+		<method name="timeShiftSetPlaybackParams(Landroid/media/PlaybackParams;)V" since="23" />
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;)V" />
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V" since="24" />
+	</class>
+	<class name="android/media/tv/TvView$OnUnhandledInputEventListener" since="21">
+		<extends name="java/lang/Object" />
+		<method name="onUnhandledInputEvent(Landroid/view/InputEvent;)Z" />
+	</class>
+	<class name="android/media/tv/TvView$TimeShiftPositionCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onTimeShiftCurrentPositionChanged(Ljava/lang/String;J)V" />
+		<method name="onTimeShiftStartPositionChanged(Ljava/lang/String;J)V" />
+	</class>
+	<class name="android/media/tv/TvView$TvInputCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onChannelRetuned(Ljava/lang/String;Landroid/net/Uri;)V" />
+		<method name="onConnectionFailed(Ljava/lang/String;)V" />
+		<method name="onContentAllowed(Ljava/lang/String;)V" />
+		<method name="onContentBlocked(Ljava/lang/String;Landroid/media/tv/TvContentRating;)V" />
+		<method name="onDisconnected(Ljava/lang/String;)V" />
+		<method name="onTimeShiftStatusChanged(Ljava/lang/String;I)V" since="23" />
+		<method name="onTrackSelected(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="onTracksChanged(Ljava/lang/String;Ljava/util/List;)V" />
+		<method name="onVideoAvailable(Ljava/lang/String;)V" />
+		<method name="onVideoSizeChanged(Ljava/lang/String;II)V" />
+		<method name="onVideoUnavailable(Ljava/lang/String;I)V" />
+	</class>
+	<class name="android/mtp/MtpConstants" since="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="isAbstractObject(I)Z" />
+		<field name="ASSOCIATION_TYPE_GENERIC_FOLDER" />
+		<field name="FORMAT_3GP_CONTAINER" />
+		<field name="FORMAT_AAC" />
+		<field name="FORMAT_ABSTRACT_AUDIO_ALBUM" />
+		<field name="FORMAT_ABSTRACT_AUDIO_PLAYLIST" />
+		<field name="FORMAT_ABSTRACT_AV_PLAYLIST" />
+		<field name="FORMAT_ABSTRACT_DOCUMENT" />
+		<field name="FORMAT_ABSTRACT_IMAGE_ALBUM" />
+		<field name="FORMAT_ABSTRACT_MEDIACAST" />
+		<field name="FORMAT_ABSTRACT_MULTIMEDIA_ALBUM" />
+		<field name="FORMAT_ABSTRACT_VIDEO_ALBUM" />
+		<field name="FORMAT_ABSTRACT_VIDEO_PLAYLIST" />
+		<field name="FORMAT_AIFF" />
+		<field name="FORMAT_ASF" />
+		<field name="FORMAT_ASSOCIATION" />
+		<field name="FORMAT_ASX_PLAYLIST" />
+		<field name="FORMAT_AUDIBLE" />
+		<field name="FORMAT_AVI" />
+		<field name="FORMAT_BMP" />
+		<field name="FORMAT_DEFINED" since="24" />
+		<field name="FORMAT_DNG" since="24" />
+		<field name="FORMAT_DPOF" />
+		<field name="FORMAT_EXECUTABLE" />
+		<field name="FORMAT_EXIF_JPEG" />
+		<field name="FORMAT_FLAC" />
+		<field name="FORMAT_GIF" />
+		<field name="FORMAT_HTML" />
+		<field name="FORMAT_JFIF" />
+		<field name="FORMAT_JP2" />
+		<field name="FORMAT_JPX" />
+		<field name="FORMAT_M3U_PLAYLIST" />
+		<field name="FORMAT_MP2" />
+		<field name="FORMAT_MP3" />
+		<field name="FORMAT_MP4_CONTAINER" />
+		<field name="FORMAT_MPEG" />
+		<field name="FORMAT_MPL_PLAYLIST" />
+		<field name="FORMAT_MS_EXCEL_SPREADSHEET" />
+		<field name="FORMAT_MS_POWERPOINT_PRESENTATION" />
+		<field name="FORMAT_MS_WORD_DOCUMENT" />
+		<field name="FORMAT_OGG" />
+		<field name="FORMAT_PICT" />
+		<field name="FORMAT_PLS_PLAYLIST" />
+		<field name="FORMAT_PNG" />
+		<field name="FORMAT_SCRIPT" />
+		<field name="FORMAT_TEXT" />
+		<field name="FORMAT_TIFF" />
+		<field name="FORMAT_TIFF_EP" />
+		<field name="FORMAT_UNDEFINED" />
+		<field name="FORMAT_UNDEFINED_AUDIO" />
+		<field name="FORMAT_UNDEFINED_COLLECTION" />
+		<field name="FORMAT_UNDEFINED_DOCUMENT" />
+		<field name="FORMAT_UNDEFINED_FIRMWARE" />
+		<field name="FORMAT_UNDEFINED_VIDEO" />
+		<field name="FORMAT_WAV" />
+		<field name="FORMAT_WINDOWS_IMAGE_FORMAT" />
+		<field name="FORMAT_WMA" />
+		<field name="FORMAT_WMV" />
+		<field name="FORMAT_WPL_PLAYLIST" />
+		<field name="FORMAT_XML_DOCUMENT" />
+		<field name="OPERATION_CLOSE_SESSION" since="24" />
+		<field name="OPERATION_COPY_OBJECT" since="24" />
+		<field name="OPERATION_DELETE_OBJECT" since="24" />
+		<field name="OPERATION_FORMAT_STORE" since="24" />
+		<field name="OPERATION_GET_DEVICE_INFO" since="24" />
+		<field name="OPERATION_GET_DEVICE_PROP_DESC" since="24" />
+		<field name="OPERATION_GET_DEVICE_PROP_VALUE" since="24" />
+		<field name="OPERATION_GET_NUM_OBJECTS" since="24" />
+		<field name="OPERATION_GET_OBJECT" since="24" />
+		<field name="OPERATION_GET_OBJECT_HANDLES" since="24" />
+		<field name="OPERATION_GET_OBJECT_INFO" since="24" />
+		<field name="OPERATION_GET_OBJECT_PROPS_SUPPORTED" since="24" />
+		<field name="OPERATION_GET_OBJECT_PROP_DESC" since="24" />
+		<field name="OPERATION_GET_OBJECT_PROP_VALUE" since="24" />
+		<field name="OPERATION_GET_OBJECT_REFERENCES" since="24" />
+		<field name="OPERATION_GET_PARTIAL_OBJECT" since="24" />
+		<field name="OPERATION_GET_PARTIAL_OBJECT_64" since="24" />
+		<field name="OPERATION_GET_STORAGE_INFO" since="24" />
+		<field name="OPERATION_GET_STORAGE_I_DS" since="24" />
+		<field name="OPERATION_GET_THUMB" since="24" />
+		<field name="OPERATION_INITIATE_CAPTURE" since="24" />
+		<field name="OPERATION_INITIATE_OPEN_CAPTURE" since="24" />
+		<field name="OPERATION_MOVE_OBJECT" since="24" />
+		<field name="OPERATION_OPEN_SESSION" since="24" />
+		<field name="OPERATION_POWER_DOWN" since="24" />
+		<field name="OPERATION_RESET_DEVICE" since="24" />
+		<field name="OPERATION_RESET_DEVICE_PROP_VALUE" since="24" />
+		<field name="OPERATION_SELF_TEST" since="24" />
+		<field name="OPERATION_SEND_OBJECT" since="24" />
+		<field name="OPERATION_SEND_OBJECT_INFO" since="24" />
+		<field name="OPERATION_SET_DEVICE_PROP_VALUE" since="24" />
+		<field name="OPERATION_SET_OBJECT_PROP_VALUE" since="24" />
+		<field name="OPERATION_SET_OBJECT_PROTECTION" since="24" />
+		<field name="OPERATION_SET_OBJECT_REFERENCES" since="24" />
+		<field name="OPERATION_SKIP" since="24" />
+		<field name="OPERATION_TERMINATE_OPEN_CAPTURE" since="24" />
+		<field name="PROTECTION_STATUS_NONE" />
+		<field name="PROTECTION_STATUS_NON_TRANSFERABLE_DATA" />
+		<field name="PROTECTION_STATUS_READ_ONLY" />
+		<field name="PROTECTION_STATUS_READ_ONLY_DATA" />
+	</class>
+	<class name="android/mtp/MtpDevice" since="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/hardware/usb/UsbDevice;)V" />
+		<method name="close()V" />
+		<method name="deleteObject(I)Z" />
+		<method name="getDeviceId()I" />
+		<method name="getDeviceInfo()Landroid/mtp/MtpDeviceInfo;" />
+		<method name="getDeviceName()Ljava/lang/String;" />
+		<method name="getObject(II)[B" />
+		<method name="getObjectHandles(III)[I" />
+		<method name="getObjectInfo(I)Landroid/mtp/MtpObjectInfo;" />
+		<method name="getParent(I)J" />
+		<method name="getPartialObject(IJJ[B)J" since="24" />
+		<method name="getPartialObject64(IJJ[B)J" since="24" />
+		<method name="getStorageId(I)J" />
+		<method name="getStorageIds()[I" />
+		<method name="getStorageInfo(I)Landroid/mtp/MtpStorageInfo;" />
+		<method name="getThumbnail(I)[B" />
+		<method name="importFile(ILandroid/os/ParcelFileDescriptor;)Z" since="24" />
+		<method name="importFile(ILjava/lang/String;)Z" />
+		<method name="open(Landroid/hardware/usb/UsbDeviceConnection;)Z" />
+		<method name="readEvent(Landroid/os/CancellationSignal;)Landroid/mtp/MtpEvent;" since="24" />
+		<method name="sendObject(IJLandroid/os/ParcelFileDescriptor;)Z" since="24" />
+		<method name="sendObjectInfo(Landroid/mtp/MtpObjectInfo;)Landroid/mtp/MtpObjectInfo;" since="24" />
+	</class>
+	<class name="android/mtp/MtpDeviceInfo" since="12">
+		<extends name="java/lang/Object" />
+		<method name="getEventsSupported()[I" since="24" />
+		<method name="getManufacturer()Ljava/lang/String;" />
+		<method name="getModel()Ljava/lang/String;" />
+		<method name="getOperationsSupported()[I" since="24" />
+		<method name="getSerialNumber()Ljava/lang/String;" />
+		<method name="getVersion()Ljava/lang/String;" />
+		<method name="isEventSupported(I)Z" since="24" />
+		<method name="isOperationSupported(I)Z" since="24" />
+	</class>
+	<class name="android/mtp/MtpEvent" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getDevicePropCode()I" />
+		<method name="getEventCode()I" />
+		<method name="getObjectFormatCode()I" />
+		<method name="getObjectHandle()I" />
+		<method name="getObjectPropCode()I" />
+		<method name="getParameter1()I" />
+		<method name="getParameter2()I" />
+		<method name="getParameter3()I" />
+		<method name="getStorageId()I" />
+		<method name="getTransactionId()I" />
+		<field name="EVENT_CANCEL_TRANSACTION" />
+		<field name="EVENT_CAPTURE_COMPLETE" />
+		<field name="EVENT_DEVICE_INFO_CHANGED" />
+		<field name="EVENT_DEVICE_PROP_CHANGED" />
+		<field name="EVENT_DEVICE_RESET" />
+		<field name="EVENT_OBJECT_ADDED" />
+		<field name="EVENT_OBJECT_INFO_CHANGED" />
+		<field name="EVENT_OBJECT_PROP_CHANGED" />
+		<field name="EVENT_OBJECT_PROP_DESC_CHANGED" />
+		<field name="EVENT_OBJECT_REFERENCES_CHANGED" />
+		<field name="EVENT_OBJECT_REMOVED" />
+		<field name="EVENT_REQUEST_OBJECT_TRANSFER" />
+		<field name="EVENT_STORAGE_INFO_CHANGED" />
+		<field name="EVENT_STORE_ADDED" />
+		<field name="EVENT_STORE_FULL" />
+		<field name="EVENT_STORE_REMOVED" />
+		<field name="EVENT_UNDEFINED" />
+		<field name="EVENT_UNREPORTED_STATUS" />
+	</class>
+	<class name="android/mtp/MtpObjectInfo" since="12">
+		<extends name="java/lang/Object" />
+		<method name="getAssociationDesc()I" />
+		<method name="getAssociationType()I" />
+		<method name="getCompressedSize()I" />
+		<method name="getCompressedSizeLong()J" since="24" />
+		<method name="getDateCreated()J" />
+		<method name="getDateModified()J" />
+		<method name="getFormat()I" />
+		<method name="getImagePixDepth()I" />
+		<method name="getImagePixDepthLong()J" since="24" />
+		<method name="getImagePixHeight()I" />
+		<method name="getImagePixHeightLong()J" since="24" />
+		<method name="getImagePixWidth()I" />
+		<method name="getImagePixWidthLong()J" since="24" />
+		<method name="getKeywords()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getObjectHandle()I" />
+		<method name="getParent()I" />
+		<method name="getProtectionStatus()I" />
+		<method name="getSequenceNumber()I" />
+		<method name="getSequenceNumberLong()J" since="24" />
+		<method name="getStorageId()I" />
+		<method name="getThumbCompressedSize()I" />
+		<method name="getThumbCompressedSizeLong()J" since="24" />
+		<method name="getThumbFormat()I" />
+		<method name="getThumbPixHeight()I" />
+		<method name="getThumbPixHeightLong()J" since="24" />
+		<method name="getThumbPixWidth()I" />
+		<method name="getThumbPixWidthLong()J" since="24" />
+	</class>
+	<class name="android/mtp/MtpObjectInfo$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/mtp/MtpObjectInfo;)V" />
+		<method name="build()Landroid/mtp/MtpObjectInfo;" />
+		<method name="setAssociationDesc(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setAssociationType(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setCompressedSize(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setDateCreated(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setDateModified(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setFormat(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setImagePixDepth(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setImagePixHeight(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setImagePixWidth(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setKeywords(Ljava/lang/String;)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setName(Ljava/lang/String;)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setObjectHandle(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setParent(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setProtectionStatus(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setSequenceNumber(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setStorageId(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setThumbCompressedSize(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setThumbFormat(I)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setThumbPixHeight(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+		<method name="setThumbPixWidth(J)Landroid/mtp/MtpObjectInfo$Builder;" />
+	</class>
+	<class name="android/mtp/MtpStorageInfo" since="12">
+		<extends name="java/lang/Object" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getFreeSpace()J" />
+		<method name="getMaxCapacity()J" />
+		<method name="getStorageId()I" />
+		<method name="getVolumeIdentifier()Ljava/lang/String;" />
+	</class>
+	<class name="android/net/Credentials" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="getGid()I" />
+		<method name="getPid()I" />
+		<method name="getUid()I" />
+	</class>
+	<class name="android/net/Ikev2VpnProfile" since="30">
+		<extends name="android/net/PlatformVpnProfile" />
+		<method name="getAllowedAlgorithms()Ljava/util/List;" />
+		<method name="getMaxMtu()I" />
+		<method name="getPassword()Ljava/lang/String;" />
+		<method name="getPresharedKey()[B" />
+		<method name="getProxyInfo()Ljava/lang/Object;" />
+		<method name="getRsaPrivateKey()Ljava/security/PrivateKey;" />
+		<method name="getServerAddr()Ljava/lang/String;" />
+		<method name="getServerRootCaCert()Ljava/security/cert/X509Certificate;" />
+		<method name="getUserCert()Ljava/security/cert/X509Certificate;" />
+		<method name="getUserIdentity()Ljava/lang/String;" />
+		<method name="getUsername()Ljava/lang/String;" />
+		<method name="isBypassable()Z" />
+		<method name="isMetered()Z" />
+	</class>
+	<class name="android/net/Ikev2VpnProfile$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="build()Landroid/net/Ikev2VpnProfile;" />
+		<method name="setAllowedAlgorithms(Ljava/util/List;)Landroid/net/Ikev2VpnProfile$Builder;" />
+		<method name="setAuthDigitalSignature(Ljava/security/cert/X509Certificate;Ljava/security/PrivateKey;Ljava/security/cert/X509Certificate;)Landroid/net/Ikev2VpnProfile$Builder;" />
+		<method name="setAuthPsk([B)Landroid/net/Ikev2VpnProfile$Builder;" />
+		<method name="setAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/security/cert/X509Certificate;)Landroid/net/Ikev2VpnProfile$Builder;" />
+		<method name="setBypassable(Z)Landroid/net/Ikev2VpnProfile$Builder;" />
+		<method name="setMaxMtu(I)Landroid/net/Ikev2VpnProfile$Builder;" />
+		<method name="setMetered(Z)Landroid/net/Ikev2VpnProfile$Builder;" />
+		<method name="setProxy(Ljava/lang/Object;)Landroid/net/Ikev2VpnProfile$Builder;" />
+	</class>
+	<class name="android/net/IpSecAlgorithm" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[B)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[BI)V" />
+		<method name="getKey()[B" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSupportedAlgorithms()Ljava/util/Set;" since="31" />
+		<method name="getTruncationLengthBits()I" />
+		<field name="AUTH_AES_CMAC" since="31" />
+		<field name="AUTH_AES_XCBC" since="31" />
+		<field name="AUTH_CRYPT_AES_GCM" />
+		<field name="AUTH_CRYPT_CHACHA20_POLY1305" since="31" />
+		<field name="AUTH_HMAC_MD5" />
+		<field name="AUTH_HMAC_SHA1" />
+		<field name="AUTH_HMAC_SHA256" />
+		<field name="AUTH_HMAC_SHA384" />
+		<field name="AUTH_HMAC_SHA512" />
+		<field name="CREATOR" />
+		<field name="CRYPT_AES_CBC" />
+		<field name="CRYPT_AES_CTR" since="31" />
+	</class>
+	<class name="android/net/IpSecManager" since="28">
+		<extends name="java/lang/Object" />
+		<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;)Landroid/net/IpSecManager$SecurityParameterIndex;" />
+		<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;I)Landroid/net/IpSecManager$SecurityParameterIndex;" />
+		<method name="applyTransportModeTransform(Ljava/io/FileDescriptor;ILandroid/net/IpSecTransform;)V" />
+		<method name="applyTransportModeTransform(Ljava/net/DatagramSocket;ILandroid/net/IpSecTransform;)V" />
+		<method name="applyTransportModeTransform(Ljava/net/Socket;ILandroid/net/IpSecTransform;)V" />
+		<method name="openUdpEncapsulationSocket()Landroid/net/IpSecManager$UdpEncapsulationSocket;" />
+		<method name="openUdpEncapsulationSocket(I)Landroid/net/IpSecManager$UdpEncapsulationSocket;" />
+		<method name="removeTransportModeTransforms(Ljava/io/FileDescriptor;)V" />
+		<method name="removeTransportModeTransforms(Ljava/net/DatagramSocket;)V" />
+		<method name="removeTransportModeTransforms(Ljava/net/Socket;)V" />
+		<field name="DIRECTION_IN" />
+		<field name="DIRECTION_OUT" />
+	</class>
+	<class name="android/net/IpSecManager$ResourceUnavailableException" since="28">
+		<extends name="android/util/AndroidException" />
+	</class>
+	<class name="android/net/IpSecManager$SecurityParameterIndex" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getSpi()I" />
+	</class>
+	<class name="android/net/IpSecManager$SpiUnavailableException" since="28">
+		<extends name="android/util/AndroidException" />
+		<method name="getSpi()I" />
+	</class>
+	<class name="android/net/IpSecManager$UdpEncapsulationSocket" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;" />
+		<method name="getPort()I" />
+	</class>
+	<class name="android/net/IpSecTransform" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+	</class>
+	<class name="android/net/IpSecTransform$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="buildTransportModeTransform(Ljava/net/InetAddress;Landroid/net/IpSecManager$SecurityParameterIndex;)Landroid/net/IpSecTransform;" />
+		<method name="setAuthenticatedEncryption(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;" />
+		<method name="setAuthentication(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;" />
+		<method name="setEncryption(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;" />
+		<method name="setIpv4Encapsulation(Landroid/net/IpSecManager$UdpEncapsulationSocket;I)Landroid/net/IpSecTransform$Builder;" />
+	</class>
+	<class name="android/net/LocalServerSocket" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="28" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="accept()Landroid/net/LocalSocket;" />
+		<method name="close()V" />
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;" />
+		<method name="getLocalSocketAddress()Landroid/net/LocalSocketAddress;" />
+	</class>
+	<class name="android/net/LocalSocket" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="17" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" since="19" />
+		<method name="bind(Landroid/net/LocalSocketAddress;)V" />
+		<method name="close()V" />
+		<method name="connect(Landroid/net/LocalSocketAddress;)V" />
+		<method name="connect(Landroid/net/LocalSocketAddress;I)V" />
+		<method name="getAncillaryFileDescriptors()[Ljava/io/FileDescriptor;" />
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getLocalSocketAddress()Landroid/net/LocalSocketAddress;" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="getPeerCredentials()Landroid/net/Credentials;" />
+		<method name="getReceiveBufferSize()I" />
+		<method name="getRemoteSocketAddress()Landroid/net/LocalSocketAddress;" />
+		<method name="getSendBufferSize()I" />
+		<method name="getSoTimeout()I" />
+		<method name="isBound()Z" />
+		<method name="isClosed()Z" />
+		<method name="isConnected()Z" />
+		<method name="isInputShutdown()Z" />
+		<method name="isOutputShutdown()Z" />
+		<method name="setFileDescriptorsForSend([Ljava/io/FileDescriptor;)V" />
+		<method name="setReceiveBufferSize(I)V" />
+		<method name="setSendBufferSize(I)V" />
+		<method name="setSoTimeout(I)V" />
+		<method name="shutdownInput()V" />
+		<method name="shutdownOutput()V" />
+		<field name="SOCKET_DGRAM" since="19" />
+		<field name="SOCKET_SEQPACKET" since="19" />
+		<field name="SOCKET_STREAM" since="19" />
+	</class>
+	<class name="android/net/LocalSocketAddress" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/net/LocalSocketAddress$Namespace;)V" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getNamespace()Landroid/net/LocalSocketAddress$Namespace;" />
+	</class>
+	<class name="android/net/LocalSocketAddress$Namespace" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/net/LocalSocketAddress$Namespace;" />
+		<method name="values()[Landroid/net/LocalSocketAddress$Namespace;" />
+		<field name="ABSTRACT" />
+		<field name="FILESYSTEM" />
+		<field name="RESERVED" />
+	</class>
+	<class name="android/net/MailTo" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getBody()Ljava/lang/String;" />
+		<method name="getCc()Ljava/lang/String;" />
+		<method name="getHeaders()Ljava/util/Map;" />
+		<method name="getSubject()Ljava/lang/String;" />
+		<method name="getTo()Ljava/lang/String;" />
+		<method name="isMailTo(Ljava/lang/String;)Z" />
+		<method name="parse(Ljava/lang/String;)Landroid/net/MailTo;" />
+		<field name="MAILTO_SCHEME" />
+	</class>
+	<class name="android/net/NetworkSpecifier" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="29" />
+	</class>
+	<class name="android/net/PlatformVpnProfile" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getType()I" />
+		<method name="getTypeString()Ljava/lang/String;" />
+		<field name="TYPE_IKEV2_IPSEC_PSK" />
+		<field name="TYPE_IKEV2_IPSEC_RSA" />
+		<field name="TYPE_IKEV2_IPSEC_USER_PASS" />
+	</class>
+	<class name="android/net/Proxy" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDefaultHost()Ljava/lang/String;" deprecated="15" />
+		<method name="getDefaultPort()I" deprecated="15" />
+		<method name="getHost(Landroid/content/Context;)Ljava/lang/String;" deprecated="15" />
+		<method name="getPort(Landroid/content/Context;)I" deprecated="15" />
+		<field name="EXTRA_PROXY_INFO" since="21" deprecated="23" removed="31" />
+		<field name="PROXY_CHANGE_ACTION" />
+	</class>
+	<class name="android/net/PskKeyManager" since="21" removed="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="chooseClientKeyIdentity(Ljava/lang/String;Ljava/net/Socket;)Ljava/lang/String;" />
+		<method name="chooseClientKeyIdentity(Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;" />
+		<method name="chooseServerKeyIdentityHint(Ljava/net/Socket;)Ljava/lang/String;" />
+		<method name="chooseServerKeyIdentityHint(Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;" />
+		<method name="getKey(Ljava/lang/String;Ljava/lang/String;Ljava/net/Socket;)Ljavax/crypto/SecretKey;" />
+		<method name="getKey(Ljava/lang/String;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)Ljavax/crypto/SecretKey;" />
+		<field name="MAX_IDENTITY_HINT_LENGTH_BYTES" />
+		<field name="MAX_IDENTITY_LENGTH_BYTES" />
+		<field name="MAX_KEY_LENGTH_BYTES" />
+	</class>
+	<class name="android/net/SSLCertificateSocketFactory" since="1" deprecated="29">
+		<extends name="javax/net/ssl/SSLSocketFactory" />
+		<method name="&lt;init&gt;(I)V" deprecated="15" />
+		<method name="getDefault(I)Ljavax/net/SocketFactory;" deprecated="29" />
+		<method name="getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8" deprecated="29" />
+		<method name="getHttpSocketFactory(ILandroid/net/SSLSessionCache;)Lorg/apache/http/conn/ssl/SSLSocketFactory;" since="8" deprecated="22" removed="23" />
+		<method name="getInsecure(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8" deprecated="29" />
+		<method name="getNpnSelectedProtocol(Ljava/net/Socket;)[B" since="16" deprecated="29" />
+		<method name="setHostname(Ljava/net/Socket;Ljava/lang/String;)V" since="17" deprecated="29" />
+		<method name="setKeyManagers([Ljavax/net/ssl/KeyManager;)V" since="14" deprecated="29" />
+		<method name="setNpnProtocols([[B)V" since="16" deprecated="29" />
+		<method name="setTrustManagers([Ljavax/net/ssl/TrustManager;)V" since="14" deprecated="29" />
+		<method name="setUseSessionTickets(Ljava/net/Socket;Z)V" since="17" deprecated="29" />
+	</class>
+	<class name="android/net/SSLSessionCache" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+	</class>
+	<class name="android/net/TelephonyNetworkSpecifier" since="30">
+		<extends name="android/net/NetworkSpecifier" />
+		<implements name="android/os/Parcelable" />
+		<method name="getSubscriptionId()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/net/TelephonyNetworkSpecifier$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/net/TelephonyNetworkSpecifier;" />
+		<method name="setSubscriptionId(I)Landroid/net/TelephonyNetworkSpecifier$Builder;" />
+	</class>
+	<class name="android/net/TrafficStats" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clearThreadStatsTag()V" since="14" />
+		<method name="clearThreadStatsUid()V" since="28" />
+		<method name="getAndSetThreadStatsTag(I)I" since="26" />
+		<method name="getMobileRxBytes()J" />
+		<method name="getMobileRxPackets()J" />
+		<method name="getMobileTxBytes()J" />
+		<method name="getMobileTxPackets()J" />
+		<method name="getRxBytes(Ljava/lang/String;)J" since="31" />
+		<method name="getRxPackets(Ljava/lang/String;)J" since="30" />
+		<method name="getThreadStatsTag()I" since="14" />
+		<method name="getThreadStatsUid()I" since="28" />
+		<method name="getTotalRxBytes()J" />
+		<method name="getTotalRxPackets()J" />
+		<method name="getTotalTxBytes()J" />
+		<method name="getTotalTxPackets()J" />
+		<method name="getTxBytes(Ljava/lang/String;)J" since="31" />
+		<method name="getTxPackets(Ljava/lang/String;)J" since="30" />
+		<method name="getUidRxBytes(I)J" />
+		<method name="getUidRxPackets(I)J" since="12" />
+		<method name="getUidTcpRxBytes(I)J" since="12" deprecated="18" />
+		<method name="getUidTcpRxSegments(I)J" since="12" deprecated="18" />
+		<method name="getUidTcpTxBytes(I)J" since="12" deprecated="18" />
+		<method name="getUidTcpTxSegments(I)J" since="12" deprecated="18" />
+		<method name="getUidTxBytes(I)J" />
+		<method name="getUidTxPackets(I)J" since="12" />
+		<method name="getUidUdpRxBytes(I)J" since="12" deprecated="18" />
+		<method name="getUidUdpRxPackets(I)J" since="12" deprecated="18" />
+		<method name="getUidUdpTxBytes(I)J" since="12" deprecated="18" />
+		<method name="getUidUdpTxPackets(I)J" since="12" deprecated="18" />
+		<method name="incrementOperationCount(I)V" since="14" />
+		<method name="incrementOperationCount(II)V" since="14" />
+		<method name="setThreadStatsTag(I)V" since="14" />
+		<method name="setThreadStatsUid(I)V" since="28" />
+		<method name="tagDatagramSocket(Ljava/net/DatagramSocket;)V" since="24" />
+		<method name="tagFileDescriptor(Ljava/io/FileDescriptor;)V" since="28" />
+		<method name="tagSocket(Ljava/net/Socket;)V" since="14" />
+		<method name="untagDatagramSocket(Ljava/net/DatagramSocket;)V" since="24" />
+		<method name="untagFileDescriptor(Ljava/io/FileDescriptor;)V" since="28" />
+		<method name="untagSocket(Ljava/net/Socket;)V" since="14" />
+		<field name="UNSUPPORTED" />
+	</class>
+	<class name="android/net/Uri" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/Comparable" />
+		<method name="buildUpon()Landroid/net/Uri$Builder;" />
+		<method name="compareTo(Landroid/net/Uri;)I" />
+		<method name="decode(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="encode(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="fromFile(Ljava/io/File;)Landroid/net/Uri;" />
+		<method name="fromParts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="getAuthority()Ljava/lang/String;" />
+		<method name="getBooleanQueryParameter(Ljava/lang/String;Z)Z" since="11" />
+		<method name="getEncodedAuthority()Ljava/lang/String;" />
+		<method name="getEncodedFragment()Ljava/lang/String;" />
+		<method name="getEncodedPath()Ljava/lang/String;" />
+		<method name="getEncodedQuery()Ljava/lang/String;" />
+		<method name="getEncodedSchemeSpecificPart()Ljava/lang/String;" />
+		<method name="getEncodedUserInfo()Ljava/lang/String;" />
+		<method name="getFragment()Ljava/lang/String;" />
+		<method name="getHost()Ljava/lang/String;" />
+		<method name="getLastPathSegment()Ljava/lang/String;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getPathSegments()Ljava/util/List;" />
+		<method name="getPort()I" />
+		<method name="getQuery()Ljava/lang/String;" />
+		<method name="getQueryParameter(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getQueryParameterNames()Ljava/util/Set;" since="11" />
+		<method name="getQueryParameters(Ljava/lang/String;)Ljava/util/List;" />
+		<method name="getScheme()Ljava/lang/String;" />
+		<method name="getSchemeSpecificPart()Ljava/lang/String;" />
+		<method name="getUserInfo()Ljava/lang/String;" />
+		<method name="isAbsolute()Z" />
+		<method name="isHierarchical()Z" />
+		<method name="isOpaque()Z" />
+		<method name="isRelative()Z" />
+		<method name="normalizeScheme()Landroid/net/Uri;" since="16" />
+		<method name="parse(Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V" />
+		<field name="CREATOR" />
+		<field name="EMPTY" />
+	</class>
+	<class name="android/net/Uri$Builder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="appendPath(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="authority(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="build()Landroid/net/Uri;" />
+		<method name="clearQuery()Landroid/net/Uri$Builder;" since="11" />
+		<method name="encodedAuthority(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="encodedOpaquePart(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="encodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="encodedQuery(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="opaquePart(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="path(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="query(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+		<method name="scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;" />
+	</class>
+	<class name="android/net/UrlQuerySanitizer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="addSanitizedEntry(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="clear()V" />
+		<method name="decodeHexDigit(C)I" />
+		<method name="getAllButNulAndAngleBracketsLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getAllButNulLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getAllButWhitespaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getAllIllegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getAllowUnregisteredParamaters()Z" />
+		<method name="getAmpAndSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getAmpLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getEffectiveValueSanitizer(Ljava/lang/String;)Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getParameterList()Ljava/util/List;" />
+		<method name="getParameterSet()Ljava/util/Set;" />
+		<method name="getPreferFirstRepeatedParameter()Z" />
+		<method name="getSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getUnregisteredParameterValueSanitizer()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getUrlAndSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getUrlLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getValueSanitizer(Ljava/lang/String;)Landroid/net/UrlQuerySanitizer$ValueSanitizer;" />
+		<method name="hasParameter(Ljava/lang/String;)Z" />
+		<method name="isHexDigit(C)Z" />
+		<method name="parseEntry(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="parseQuery(Ljava/lang/String;)V" />
+		<method name="parseUrl(Ljava/lang/String;)V" />
+		<method name="registerParameter(Ljava/lang/String;Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V" />
+		<method name="registerParameters([Ljava/lang/String;Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V" />
+		<method name="setAllowUnregisteredParamaters(Z)V" />
+		<method name="setPreferFirstRepeatedParameter(Z)V" />
+		<method name="setUnregisteredParameterValueSanitizer(Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V" />
+		<method name="unescape(Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="android/net/UrlQuerySanitizer$IllegalCharacterValueSanitizer" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/net/UrlQuerySanitizer$ValueSanitizer" />
+		<method name="&lt;init&gt;(I)V" />
+		<field name="ALL_BUT_NUL_AND_ANGLE_BRACKETS_LEGAL" />
+		<field name="ALL_BUT_NUL_LEGAL" />
+		<field name="ALL_BUT_WHITESPACE_LEGAL" />
+		<field name="ALL_ILLEGAL" />
+		<field name="ALL_OK" />
+		<field name="ALL_WHITESPACE_OK" />
+		<field name="AMP_AND_SPACE_LEGAL" />
+		<field name="AMP_LEGAL" />
+		<field name="AMP_OK" />
+		<field name="DQUOTE_OK" />
+		<field name="GT_OK" />
+		<field name="LT_OK" />
+		<field name="NON_7_BIT_ASCII_OK" />
+		<field name="NUL_OK" />
+		<field name="OTHER_WHITESPACE_OK" />
+		<field name="PCT_OK" />
+		<field name="SCRIPT_URL_OK" />
+		<field name="SPACE_LEGAL" />
+		<field name="SPACE_OK" />
+		<field name="SQUOTE_OK" />
+		<field name="URL_AND_SPACE_LEGAL" />
+		<field name="URL_LEGAL" />
+	</class>
+	<class name="android/net/UrlQuerySanitizer$ParameterValuePair" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/net/UrlQuerySanitizer;Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="mParameter" />
+		<field name="mValue" />
+	</class>
+	<class name="android/net/UrlQuerySanitizer$ValueSanitizer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="sanitize(Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="android/net/VpnManager" since="30">
+		<extends name="java/lang/Object" />
+		<method name="deleteProvisionedVpnProfile()V" />
+		<method name="provisionVpnProfile(Landroid/net/PlatformVpnProfile;)Landroid/content/Intent;" />
+		<method name="startProvisionedVpnProfile()V" />
+		<method name="stopProvisionedVpnProfile()V" />
+	</class>
+	<class name="android/net/VpnService" since="14">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="isAlwaysOn()Z" since="29" />
+		<method name="isLockdownEnabled()Z" since="29" />
+		<method name="onRevoke()V" />
+		<method name="prepare(Landroid/content/Context;)Landroid/content/Intent;" />
+		<method name="protect(I)Z" />
+		<method name="protect(Ljava/net/DatagramSocket;)Z" />
+		<method name="protect(Ljava/net/Socket;)Z" />
+		<method name="setUnderlyingNetworks([Ljava/lang/Object;)Z" since="22" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA_SUPPORTS_ALWAYS_ON" since="27" />
+	</class>
+	<class name="android/net/VpnService$Builder" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/net/VpnService;)V" />
+		<method name="addAddress(Ljava/lang/String;I)Landroid/net/VpnService$Builder;" />
+		<method name="addAddress(Ljava/net/InetAddress;I)Landroid/net/VpnService$Builder;" />
+		<method name="addAllowedApplication(Ljava/lang/String;)Landroid/net/VpnService$Builder;" since="21" />
+		<method name="addDisallowedApplication(Ljava/lang/String;)Landroid/net/VpnService$Builder;" since="21" />
+		<method name="addDnsServer(Ljava/lang/String;)Landroid/net/VpnService$Builder;" />
+		<method name="addDnsServer(Ljava/net/InetAddress;)Landroid/net/VpnService$Builder;" />
+		<method name="addRoute(Ljava/lang/String;I)Landroid/net/VpnService$Builder;" />
+		<method name="addRoute(Ljava/net/InetAddress;I)Landroid/net/VpnService$Builder;" />
+		<method name="addSearchDomain(Ljava/lang/String;)Landroid/net/VpnService$Builder;" />
+		<method name="allowBypass()Landroid/net/VpnService$Builder;" since="21" />
+		<method name="allowFamily(I)Landroid/net/VpnService$Builder;" since="21" />
+		<method name="establish()Landroid/os/ParcelFileDescriptor;" />
+		<method name="setBlocking(Z)Landroid/net/VpnService$Builder;" since="21" />
+		<method name="setConfigureIntent(Landroid/app/PendingIntent;)Landroid/net/VpnService$Builder;" />
+		<method name="setHttpProxy(Ljava/lang/Object;)Landroid/net/VpnService$Builder;" since="29" />
+		<method name="setMetered(Z)Landroid/net/VpnService$Builder;" since="29" />
+		<method name="setMtu(I)Landroid/net/VpnService$Builder;" />
+		<method name="setSession(Ljava/lang/String;)Landroid/net/VpnService$Builder;" />
+		<method name="setUnderlyingNetworks([Ljava/lang/Object;)Landroid/net/VpnService$Builder;" since="22" />
+	</class>
+	<class name="android/net/http/AndroidHttpClient" since="8" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/HttpClient" />
+		<method name="close()V" />
+		<method name="disableCurlLogging()V" />
+		<method name="enableCurlLogging(Ljava/lang/String;I)V" />
+		<method name="getCompressedEntity([BLandroid/content/ContentResolver;)Lorg/apache/http/entity/AbstractHttpEntity;" />
+		<method name="getMinGzipSize(Landroid/content/ContentResolver;)J" />
+		<method name="getUngzippedContent(Lorg/apache/http/HttpEntity;)Ljava/io/InputStream;" />
+		<method name="modifyRequestToAcceptGzipResponse(Lorg/apache/http/HttpRequest;)V" />
+		<method name="newInstance(Ljava/lang/String;)Landroid/net/http/AndroidHttpClient;" deprecated="22" />
+		<method name="newInstance(Ljava/lang/String;Landroid/content/Context;)Landroid/net/http/AndroidHttpClient;" deprecated="22" />
+		<method name="parseDate(Ljava/lang/String;)J" />
+		<field name="DEFAULT_SYNC_MIN_GZIP_BYTES" />
+	</class>
+	<class name="android/net/http/HttpResponseCache" since="14">
+		<extends name="java/net/ResponseCache" />
+		<implements name="java/io/Closeable" />
+		<method name="delete()V" />
+		<method name="flush()V" />
+		<method name="getHitCount()I" />
+		<method name="getInstalled()Landroid/net/http/HttpResponseCache;" />
+		<method name="getNetworkCount()I" />
+		<method name="getRequestCount()I" />
+		<method name="install(Ljava/io/File;J)Landroid/net/http/HttpResponseCache;" />
+		<method name="maxSize()J" />
+		<method name="size()J" />
+	</class>
+	<class name="android/net/http/SslCertificate" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)V" since="8" deprecated="15" />
+		<method name="&lt;init&gt;(Ljava/security/cert/X509Certificate;)V" />
+		<method name="getIssuedBy()Landroid/net/http/SslCertificate$DName;" />
+		<method name="getIssuedTo()Landroid/net/http/SslCertificate$DName;" />
+		<method name="getValidNotAfter()Ljava/lang/String;" deprecated="15" />
+		<method name="getValidNotAfterDate()Ljava/util/Date;" since="8" />
+		<method name="getValidNotBefore()Ljava/lang/String;" deprecated="15" />
+		<method name="getValidNotBeforeDate()Ljava/util/Date;" since="8" />
+		<method name="getX509Certificate()Ljava/security/cert/X509Certificate;" since="29" />
+		<method name="restoreState(Landroid/os/Bundle;)Landroid/net/http/SslCertificate;" />
+		<method name="saveState(Landroid/net/http/SslCertificate;)Landroid/os/Bundle;" />
+	</class>
+	<class name="android/net/http/SslCertificate$DName" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/net/http/SslCertificate;Ljava/lang/String;)V" />
+		<method name="getCName()Ljava/lang/String;" />
+		<method name="getDName()Ljava/lang/String;" />
+		<method name="getOName()Ljava/lang/String;" />
+		<method name="getUName()Ljava/lang/String;" />
+	</class>
+	<class name="android/net/http/SslError" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILandroid/net/http/SslCertificate;)V" deprecated="15" />
+		<method name="&lt;init&gt;(ILandroid/net/http/SslCertificate;Ljava/lang/String;)V" since="14" />
+		<method name="&lt;init&gt;(ILjava/security/cert/X509Certificate;)V" deprecated="15" />
+		<method name="&lt;init&gt;(ILjava/security/cert/X509Certificate;Ljava/lang/String;)V" since="14" />
+		<method name="addError(I)Z" />
+		<method name="getCertificate()Landroid/net/http/SslCertificate;" />
+		<method name="getPrimaryError()I" />
+		<method name="getUrl()Ljava/lang/String;" since="14" />
+		<method name="hasError(I)Z" />
+		<field name="SSL_DATE_INVALID" since="14" />
+		<field name="SSL_EXPIRED" />
+		<field name="SSL_IDMISMATCH" />
+		<field name="SSL_INVALID" since="14" />
+		<field name="SSL_MAX_ERROR" deprecated="15" />
+		<field name="SSL_NOTYETVALID" />
+		<field name="SSL_UNTRUSTED" />
+	</class>
+	<class name="android/net/http/X509TrustManagerExtensions" since="17">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/net/ssl/X509TrustManager;)V" />
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;" />
+		<method name="isSameTrustConfiguration(Ljava/lang/String;Ljava/lang/String;)Z" since="28" />
+		<method name="isUserAddedCertificate(Ljava/security/cert/X509Certificate;)Z" since="21" />
+	</class>
+	<class name="android/net/nsd/NsdManager" since="16">
+		<extends name="java/lang/Object" />
+		<method name="discoverServices(Ljava/lang/String;ILandroid/net/nsd/NsdManager$DiscoveryListener;)V" />
+		<method name="registerService(Landroid/net/nsd/NsdServiceInfo;ILandroid/net/nsd/NsdManager$RegistrationListener;)V" />
+		<method name="resolveService(Landroid/net/nsd/NsdServiceInfo;Landroid/net/nsd/NsdManager$ResolveListener;)V" />
+		<method name="stopServiceDiscovery(Landroid/net/nsd/NsdManager$DiscoveryListener;)V" />
+		<method name="unregisterService(Landroid/net/nsd/NsdManager$RegistrationListener;)V" />
+		<field name="ACTION_NSD_STATE_CHANGED" />
+		<field name="EXTRA_NSD_STATE" />
+		<field name="FAILURE_ALREADY_ACTIVE" />
+		<field name="FAILURE_INTERNAL_ERROR" />
+		<field name="FAILURE_MAX_LIMIT" />
+		<field name="NSD_STATE_DISABLED" />
+		<field name="NSD_STATE_ENABLED" />
+		<field name="PROTOCOL_DNS_SD" />
+	</class>
+	<class name="android/net/nsd/NsdManager$DiscoveryListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onDiscoveryStarted(Ljava/lang/String;)V" />
+		<method name="onDiscoveryStopped(Ljava/lang/String;)V" />
+		<method name="onServiceFound(Landroid/net/nsd/NsdServiceInfo;)V" />
+		<method name="onServiceLost(Landroid/net/nsd/NsdServiceInfo;)V" />
+		<method name="onStartDiscoveryFailed(Ljava/lang/String;I)V" />
+		<method name="onStopDiscoveryFailed(Ljava/lang/String;I)V" />
+	</class>
+	<class name="android/net/nsd/NsdManager$RegistrationListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onRegistrationFailed(Landroid/net/nsd/NsdServiceInfo;I)V" />
+		<method name="onServiceRegistered(Landroid/net/nsd/NsdServiceInfo;)V" />
+		<method name="onServiceUnregistered(Landroid/net/nsd/NsdServiceInfo;)V" />
+		<method name="onUnregistrationFailed(Landroid/net/nsd/NsdServiceInfo;I)V" />
+	</class>
+	<class name="android/net/nsd/NsdManager$ResolveListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onResolveFailed(Landroid/net/nsd/NsdServiceInfo;I)V" />
+		<method name="onServiceResolved(Landroid/net/nsd/NsdServiceInfo;)V" />
+	</class>
+	<class name="android/net/nsd/NsdServiceInfo" since="16">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAttributes()Ljava/util/Map;" since="21" />
+		<method name="getHost()Ljava/net/InetAddress;" />
+		<method name="getPort()I" />
+		<method name="getServiceName()Ljava/lang/String;" />
+		<method name="getServiceType()Ljava/lang/String;" />
+		<method name="removeAttribute(Ljava/lang/String;)V" since="21" />
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V" since="21" />
+		<method name="setHost(Ljava/net/InetAddress;)V" />
+		<method name="setPort(I)V" />
+		<method name="setServiceName(Ljava/lang/String;)V" />
+		<method name="setServiceType(Ljava/lang/String;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/net/rtp/AudioCodec" since="12" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="getCodec(ILjava/lang/String;Ljava/lang/String;)Landroid/net/rtp/AudioCodec;" deprecated="31" />
+		<method name="getCodecs()[Landroid/net/rtp/AudioCodec;" deprecated="31" />
+		<field name="AMR" deprecated="31" />
+		<field name="GSM" deprecated="31" />
+		<field name="GSM_EFR" deprecated="31" />
+		<field name="PCMA" deprecated="31" />
+		<field name="PCMU" deprecated="31" />
+		<field name="fmtp" deprecated="31" />
+		<field name="rtpmap" deprecated="31" />
+		<field name="type" deprecated="31" />
+	</class>
+	<class name="android/net/rtp/AudioGroup" since="12" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" since="30" deprecated="31" />
+		<method name="clear()V" deprecated="31" />
+		<method name="getMode()I" deprecated="31" />
+		<method name="getStreams()[Landroid/net/rtp/AudioStream;" deprecated="31" />
+		<method name="sendDtmf(I)V" deprecated="31" />
+		<method name="setMode(I)V" deprecated="31" />
+		<field name="MODE_ECHO_SUPPRESSION" deprecated="31" />
+		<field name="MODE_MUTED" deprecated="31" />
+		<field name="MODE_NORMAL" deprecated="31" />
+		<field name="MODE_ON_HOLD" deprecated="31" />
+	</class>
+	<class name="android/net/rtp/AudioStream" since="12" deprecated="31">
+		<extends name="android/net/rtp/RtpStream" />
+		<method name="&lt;init&gt;(Ljava/net/InetAddress;)V" deprecated="31" />
+		<method name="getCodec()Landroid/net/rtp/AudioCodec;" deprecated="31" />
+		<method name="getDtmfType()I" deprecated="31" />
+		<method name="getGroup()Landroid/net/rtp/AudioGroup;" deprecated="31" />
+		<method name="join(Landroid/net/rtp/AudioGroup;)V" deprecated="31" />
+		<method name="setCodec(Landroid/net/rtp/AudioCodec;)V" deprecated="31" />
+		<method name="setDtmfType(I)V" deprecated="31" />
+	</class>
+	<class name="android/net/rtp/RtpStream" since="12" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="associate(Ljava/net/InetAddress;I)V" deprecated="31" />
+		<method name="getLocalAddress()Ljava/net/InetAddress;" deprecated="31" />
+		<method name="getLocalPort()I" deprecated="31" />
+		<method name="getMode()I" deprecated="31" />
+		<method name="getRemoteAddress()Ljava/net/InetAddress;" deprecated="31" />
+		<method name="getRemotePort()I" deprecated="31" />
+		<method name="isBusy()Z" deprecated="31" />
+		<method name="release()V" deprecated="31" />
+		<method name="setMode(I)V" deprecated="31" />
+		<field name="MODE_NORMAL" deprecated="31" />
+		<field name="MODE_RECEIVE_ONLY" deprecated="31" />
+		<field name="MODE_SEND_ONLY" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipAudioCall" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/net/sip/SipProfile;)V" deprecated="31" />
+		<method name="answerCall(I)V" deprecated="31" />
+		<method name="attachCall(Landroid/net/sip/SipSession;Ljava/lang/String;)V" deprecated="31" />
+		<method name="close()V" deprecated="31" />
+		<method name="continueCall(I)V" deprecated="31" />
+		<method name="endCall()V" deprecated="31" />
+		<method name="getLocalProfile()Landroid/net/sip/SipProfile;" deprecated="31" />
+		<method name="getPeerProfile()Landroid/net/sip/SipProfile;" deprecated="31" />
+		<method name="getState()I" deprecated="31" />
+		<method name="holdCall(I)V" deprecated="31" />
+		<method name="isInCall()Z" deprecated="31" />
+		<method name="isMuted()Z" deprecated="31" />
+		<method name="isOnHold()Z" deprecated="31" />
+		<method name="makeCall(Landroid/net/sip/SipProfile;Landroid/net/sip/SipSession;I)V" deprecated="31" />
+		<method name="sendDtmf(I)V" deprecated="31" />
+		<method name="sendDtmf(ILandroid/os/Message;)V" deprecated="31" />
+		<method name="setListener(Landroid/net/sip/SipAudioCall$Listener;)V" deprecated="31" />
+		<method name="setListener(Landroid/net/sip/SipAudioCall$Listener;Z)V" deprecated="31" />
+		<method name="setSpeakerMode(Z)V" deprecated="31" />
+		<method name="startAudio()V" deprecated="31" />
+		<method name="toggleMute()V" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipAudioCall$Listener" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="onCallBusy(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+		<method name="onCallEnded(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+		<method name="onCallEstablished(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+		<method name="onCallHeld(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+		<method name="onCalling(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+		<method name="onChanged(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+		<method name="onError(Landroid/net/sip/SipAudioCall;ILjava/lang/String;)V" deprecated="31" />
+		<method name="onReadyToCall(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+		<method name="onRinging(Landroid/net/sip/SipAudioCall;Landroid/net/sip/SipProfile;)V" deprecated="31" />
+		<method name="onRingingBack(Landroid/net/sip/SipAudioCall;)V" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipErrorCode" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="toString(I)Ljava/lang/String;" deprecated="31" />
+		<field name="CLIENT_ERROR" deprecated="31" />
+		<field name="CROSS_DOMAIN_AUTHENTICATION" deprecated="31" />
+		<field name="DATA_CONNECTION_LOST" deprecated="31" />
+		<field name="INVALID_CREDENTIALS" deprecated="31" />
+		<field name="INVALID_REMOTE_URI" deprecated="31" />
+		<field name="IN_PROGRESS" deprecated="31" />
+		<field name="NO_ERROR" deprecated="31" />
+		<field name="PEER_NOT_REACHABLE" deprecated="31" />
+		<field name="SERVER_ERROR" deprecated="31" />
+		<field name="SERVER_UNREACHABLE" deprecated="31" />
+		<field name="SOCKET_ERROR" deprecated="31" />
+		<field name="TIME_OUT" deprecated="31" />
+		<field name="TRANSACTION_TERMINTED" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipException" since="9" deprecated="31">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipManager" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="close(Ljava/lang/String;)V" deprecated="31" />
+		<method name="createSipSession(Landroid/net/sip/SipProfile;Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;" deprecated="31" />
+		<method name="getCallId(Landroid/content/Intent;)Ljava/lang/String;" deprecated="31" />
+		<method name="getOfferSessionDescription(Landroid/content/Intent;)Ljava/lang/String;" deprecated="31" />
+		<method name="getSessionFor(Landroid/content/Intent;)Landroid/net/sip/SipSession;" deprecated="31" />
+		<method name="isApiSupported(Landroid/content/Context;)Z" deprecated="31" />
+		<method name="isIncomingCallIntent(Landroid/content/Intent;)Z" deprecated="31" />
+		<method name="isOpened(Ljava/lang/String;)Z" deprecated="31" />
+		<method name="isRegistered(Ljava/lang/String;)Z" deprecated="31" />
+		<method name="isSipWifiOnly(Landroid/content/Context;)Z" deprecated="31" />
+		<method name="isVoipSupported(Landroid/content/Context;)Z" deprecated="31" />
+		<method name="makeAudioCall(Landroid/net/sip/SipProfile;Landroid/net/sip/SipProfile;Landroid/net/sip/SipAudioCall$Listener;I)Landroid/net/sip/SipAudioCall;" deprecated="31" />
+		<method name="makeAudioCall(Ljava/lang/String;Ljava/lang/String;Landroid/net/sip/SipAudioCall$Listener;I)Landroid/net/sip/SipAudioCall;" deprecated="31" />
+		<method name="newInstance(Landroid/content/Context;)Landroid/net/sip/SipManager;" deprecated="31" />
+		<method name="open(Landroid/net/sip/SipProfile;)V" deprecated="31" />
+		<method name="open(Landroid/net/sip/SipProfile;Landroid/app/PendingIntent;Landroid/net/sip/SipRegistrationListener;)V" deprecated="31" />
+		<method name="register(Landroid/net/sip/SipProfile;ILandroid/net/sip/SipRegistrationListener;)V" deprecated="31" />
+		<method name="setRegistrationListener(Ljava/lang/String;Landroid/net/sip/SipRegistrationListener;)V" deprecated="31" />
+		<method name="takeAudioCall(Landroid/content/Intent;Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;" deprecated="31" />
+		<method name="unregister(Landroid/net/sip/SipProfile;Landroid/net/sip/SipRegistrationListener;)V" deprecated="31" />
+		<field name="EXTRA_CALL_ID" deprecated="31" />
+		<field name="EXTRA_OFFER_SD" deprecated="31" />
+		<field name="INCOMING_CALL_RESULT_CODE" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipProfile" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="getAuthUserName()Ljava/lang/String;" since="12" deprecated="31" />
+		<method name="getAutoRegistration()Z" deprecated="31" />
+		<method name="getDisplayName()Ljava/lang/String;" deprecated="31" />
+		<method name="getPassword()Ljava/lang/String;" deprecated="31" />
+		<method name="getPort()I" deprecated="31" />
+		<method name="getProfileName()Ljava/lang/String;" deprecated="31" />
+		<method name="getProtocol()Ljava/lang/String;" deprecated="31" />
+		<method name="getProxyAddress()Ljava/lang/String;" deprecated="31" />
+		<method name="getSendKeepAlive()Z" deprecated="31" />
+		<method name="getSipDomain()Ljava/lang/String;" deprecated="31" />
+		<method name="getUriString()Ljava/lang/String;" deprecated="31" />
+		<method name="getUserName()Ljava/lang/String;" deprecated="31" />
+		<method name="setCallingUid(I)V" since="30" deprecated="31" />
+		<field name="CREATOR" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipProfile$Builder" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/net/sip/SipProfile;)V" deprecated="31" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" deprecated="31" />
+		<method name="build()Landroid/net/sip/SipProfile;" deprecated="31" />
+		<method name="setAuthUserName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" since="12" deprecated="31" />
+		<method name="setAutoRegistration(Z)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+		<method name="setDisplayName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+		<method name="setOutboundProxy(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+		<method name="setPassword(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+		<method name="setPort(I)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+		<method name="setProfileName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+		<method name="setProtocol(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+		<method name="setSendKeepAlive(Z)Landroid/net/sip/SipProfile$Builder;" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipRegistrationListener" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="onRegistering(Ljava/lang/String;)V" deprecated="31" />
+		<method name="onRegistrationDone(Ljava/lang/String;J)V" deprecated="31" />
+		<method name="onRegistrationFailed(Ljava/lang/String;ILjava/lang/String;)V" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipSession" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="answerCall(Ljava/lang/String;I)V" deprecated="31" />
+		<method name="changeCall(Ljava/lang/String;I)V" deprecated="31" />
+		<method name="endCall()V" deprecated="31" />
+		<method name="getCallId()Ljava/lang/String;" deprecated="31" />
+		<method name="getLocalIp()Ljava/lang/String;" deprecated="31" />
+		<method name="getLocalProfile()Landroid/net/sip/SipProfile;" deprecated="31" />
+		<method name="getPeerProfile()Landroid/net/sip/SipProfile;" deprecated="31" />
+		<method name="getState()I" deprecated="31" />
+		<method name="isInCall()Z" deprecated="31" />
+		<method name="makeCall(Landroid/net/sip/SipProfile;Ljava/lang/String;I)V" deprecated="31" />
+		<method name="register(I)V" deprecated="31" />
+		<method name="setListener(Landroid/net/sip/SipSession$Listener;)V" deprecated="31" />
+		<method name="unregister()V" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipSession$Listener" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="onCallBusy(Landroid/net/sip/SipSession;)V" deprecated="31" />
+		<method name="onCallChangeFailed(Landroid/net/sip/SipSession;ILjava/lang/String;)V" deprecated="31" />
+		<method name="onCallEnded(Landroid/net/sip/SipSession;)V" deprecated="31" />
+		<method name="onCallEstablished(Landroid/net/sip/SipSession;Ljava/lang/String;)V" deprecated="31" />
+		<method name="onCalling(Landroid/net/sip/SipSession;)V" deprecated="31" />
+		<method name="onError(Landroid/net/sip/SipSession;ILjava/lang/String;)V" deprecated="31" />
+		<method name="onRegistering(Landroid/net/sip/SipSession;)V" deprecated="31" />
+		<method name="onRegistrationDone(Landroid/net/sip/SipSession;I)V" deprecated="31" />
+		<method name="onRegistrationFailed(Landroid/net/sip/SipSession;ILjava/lang/String;)V" deprecated="31" />
+		<method name="onRegistrationTimeout(Landroid/net/sip/SipSession;)V" deprecated="31" />
+		<method name="onRinging(Landroid/net/sip/SipSession;Landroid/net/sip/SipProfile;Ljava/lang/String;)V" deprecated="31" />
+		<method name="onRingingBack(Landroid/net/sip/SipSession;)V" deprecated="31" />
+	</class>
+	<class name="android/net/sip/SipSession$State" since="9" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="toString(I)Ljava/lang/String;" deprecated="31" />
+		<field name="DEREGISTERING" deprecated="31" />
+		<field name="INCOMING_CALL" deprecated="31" />
+		<field name="INCOMING_CALL_ANSWERING" deprecated="31" />
+		<field name="IN_CALL" deprecated="31" />
+		<field name="NOT_DEFINED" deprecated="31" />
+		<field name="OUTGOING_CALL" deprecated="31" />
+		<field name="OUTGOING_CALL_CANCELING" deprecated="31" />
+		<field name="OUTGOING_CALL_RING_BACK" deprecated="31" />
+		<field name="PINGING" deprecated="31" />
+		<field name="READY_TO_CALL" deprecated="31" />
+		<field name="REGISTERING" deprecated="31" />
+	</class>
+	<class name="android/net/vcn/VcnConfig" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getGatewayConnectionConfigs()Ljava/util/Set;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/net/vcn/VcnConfig$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="addGatewayConnectionConfig(Landroid/net/vcn/VcnGatewayConnectionConfig;)Landroid/net/vcn/VcnConfig$Builder;" />
+		<method name="build()Landroid/net/vcn/VcnConfig;" />
+	</class>
+	<class name="android/net/vcn/VcnGatewayConnectionConfig" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getExposedCapabilities()[I" />
+		<method name="getGatewayConnectionName()Ljava/lang/String;" />
+		<method name="getMaxMtu()I" />
+		<method name="getRetryIntervalsMillis()[J" />
+	</class>
+	<class name="android/net/vcn/VcnGatewayConnectionConfig$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="addExposedCapability(I)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;" />
+		<method name="build()Landroid/net/vcn/VcnGatewayConnectionConfig;" />
+		<method name="removeExposedCapability(I)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;" />
+		<method name="setMaxMtu(I)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;" />
+		<method name="setRetryIntervalsMillis([J)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;" />
+	</class>
+	<class name="android/net/vcn/VcnManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="clearVcnConfig(Landroid/os/ParcelUuid;)V" />
+		<method name="getConfiguredSubscriptionGroups()Ljava/util/List;" />
+		<method name="registerVcnStatusCallback(Landroid/os/ParcelUuid;Ljava/util/concurrent/Executor;Landroid/net/vcn/VcnManager$VcnStatusCallback;)V" />
+		<method name="setVcnConfig(Landroid/os/ParcelUuid;Landroid/net/vcn/VcnConfig;)V" />
+		<method name="unregisterVcnStatusCallback(Landroid/net/vcn/VcnManager$VcnStatusCallback;)V" />
+		<field name="VCN_ERROR_CODE_CONFIG_ERROR" />
+		<field name="VCN_ERROR_CODE_INTERNAL_ERROR" />
+		<field name="VCN_ERROR_CODE_NETWORK_ERROR" />
+		<field name="VCN_STATUS_CODE_ACTIVE" />
+		<field name="VCN_STATUS_CODE_INACTIVE" />
+		<field name="VCN_STATUS_CODE_NOT_CONFIGURED" />
+		<field name="VCN_STATUS_CODE_SAFE_MODE" />
+	</class>
+	<class name="android/net/vcn/VcnManager$VcnStatusCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGatewayConnectionError(Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="onStatusChanged(I)V" />
+	</class>
+	<class name="android/nfc/FormatException" since="9">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16" />
+	</class>
+	<class name="android/nfc/NdefMessage" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/nfc/NdefRecord;[Landroid/nfc/NdefRecord;)V" since="16" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="&lt;init&gt;([Landroid/nfc/NdefRecord;)V" />
+		<method name="getByteArrayLength()I" since="16" />
+		<method name="getRecords()[Landroid/nfc/NdefRecord;" />
+		<method name="toByteArray()[B" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/nfc/NdefRecord" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(S[B[B[B)V" />
+		<method name="&lt;init&gt;([B)V" deprecated="16" />
+		<method name="createApplicationRecord(Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="14" />
+		<method name="createExternal(Ljava/lang/String;Ljava/lang/String;[B)Landroid/nfc/NdefRecord;" since="16" />
+		<method name="createMime(Ljava/lang/String;[B)Landroid/nfc/NdefRecord;" since="16" />
+		<method name="createTextRecord(Ljava/lang/String;Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="21" />
+		<method name="createUri(Landroid/net/Uri;)Landroid/nfc/NdefRecord;" since="14" />
+		<method name="createUri(Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="14" />
+		<method name="getId()[B" />
+		<method name="getPayload()[B" />
+		<method name="getTnf()S" />
+		<method name="getType()[B" />
+		<method name="toByteArray()[B" deprecated="16" />
+		<method name="toMimeType()Ljava/lang/String;" since="16" />
+		<method name="toUri()Landroid/net/Uri;" since="16" />
+		<field name="CREATOR" />
+		<field name="RTD_ALTERNATIVE_CARRIER" />
+		<field name="RTD_HANDOVER_CARRIER" />
+		<field name="RTD_HANDOVER_REQUEST" />
+		<field name="RTD_HANDOVER_SELECT" />
+		<field name="RTD_SMART_POSTER" />
+		<field name="RTD_TEXT" />
+		<field name="RTD_URI" />
+		<field name="TNF_ABSOLUTE_URI" />
+		<field name="TNF_EMPTY" />
+		<field name="TNF_EXTERNAL_TYPE" />
+		<field name="TNF_MIME_MEDIA" />
+		<field name="TNF_UNCHANGED" />
+		<field name="TNF_UNKNOWN" />
+		<field name="TNF_WELL_KNOWN" />
+	</class>
+	<class name="android/nfc/NfcAdapter" since="9">
+		<extends name="java/lang/Object" />
+		<method name="disableForegroundDispatch(Landroid/app/Activity;)V" since="10" />
+		<method name="disableForegroundNdefPush(Landroid/app/Activity;)V" since="10" deprecated="15" />
+		<method name="disableReaderMode(Landroid/app/Activity;)V" since="19" />
+		<method name="enableForegroundDispatch(Landroid/app/Activity;Landroid/app/PendingIntent;[Landroid/content/IntentFilter;[[Ljava/lang/String;)V" since="10" />
+		<method name="enableForegroundNdefPush(Landroid/app/Activity;Landroid/nfc/NdefMessage;)V" since="10" deprecated="15" />
+		<method name="enableReaderMode(Landroid/app/Activity;Landroid/nfc/NfcAdapter$ReaderCallback;ILandroid/os/Bundle;)V" since="19" />
+		<method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;" deprecated="15" removed="16" />
+		<method name="getDefaultAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;" since="10" />
+		<method name="ignore(Landroid/nfc/Tag;ILandroid/nfc/NfcAdapter$OnTagRemovedListener;Landroid/os/Handler;)Z" since="24" />
+		<method name="invokeBeam(Landroid/app/Activity;)Z" since="21" deprecated="29" />
+		<method name="isEnabled()Z" />
+		<method name="isNdefPushEnabled()Z" since="16" deprecated="29" />
+		<method name="isSecureNfcEnabled()Z" since="29" />
+		<method name="isSecureNfcSupported()Z" since="29" />
+		<method name="setBeamPushUris([Landroid/net/Uri;Landroid/app/Activity;)V" since="16" deprecated="29" />
+		<method name="setBeamPushUrisCallback(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback;Landroid/app/Activity;)V" since="16" deprecated="29" />
+		<method name="setNdefPushMessage(Landroid/nfc/NdefMessage;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29" />
+		<method name="setNdefPushMessageCallback(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29" />
+		<method name="setOnNdefPushCompleteCallback(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29" />
+		<field name="ACTION_ADAPTER_STATE_CHANGED" since="18" />
+		<field name="ACTION_NDEF_DISCOVERED" since="10" />
+		<field name="ACTION_PREFERRED_PAYMENT_CHANGED" since="30" />
+		<field name="ACTION_TAG_DISCOVERED" />
+		<field name="ACTION_TECH_DISCOVERED" since="10" />
+		<field name="ACTION_TRANSACTION_DETECTED" since="28" />
+		<field name="EXTRA_ADAPTER_STATE" since="18" />
+		<field name="EXTRA_AID" since="28" />
+		<field name="EXTRA_DATA" since="28" />
+		<field name="EXTRA_ID" />
+		<field name="EXTRA_NDEF_MESSAGES" />
+		<field name="EXTRA_PREFERRED_PAYMENT_CHANGED_REASON" since="30" />
+		<field name="EXTRA_READER_PRESENCE_CHECK_DELAY" since="19" />
+		<field name="EXTRA_SECURE_ELEMENT_NAME" since="28" />
+		<field name="EXTRA_TAG" since="10" />
+		<field name="FLAG_READER_NFC_A" since="19" />
+		<field name="FLAG_READER_NFC_B" since="19" />
+		<field name="FLAG_READER_NFC_BARCODE" since="19" />
+		<field name="FLAG_READER_NFC_F" since="19" />
+		<field name="FLAG_READER_NFC_V" since="19" />
+		<field name="FLAG_READER_NO_PLATFORM_SOUNDS" since="19" />
+		<field name="FLAG_READER_SKIP_NDEF_CHECK" since="19" />
+		<field name="PREFERRED_PAYMENT_CHANGED" since="30" />
+		<field name="PREFERRED_PAYMENT_LOADED" since="30" />
+		<field name="PREFERRED_PAYMENT_UPDATED" since="30" />
+		<field name="STATE_OFF" since="18" />
+		<field name="STATE_ON" since="18" />
+		<field name="STATE_TURNING_OFF" since="18" />
+		<field name="STATE_TURNING_ON" since="18" />
+	</class>
+	<class name="android/nfc/NfcAdapter$CreateBeamUrisCallback" since="16" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="createBeamUris(Landroid/nfc/NfcEvent;)[Landroid/net/Uri;" deprecated="29" />
+	</class>
+	<class name="android/nfc/NfcAdapter$CreateNdefMessageCallback" since="14" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="createNdefMessage(Landroid/nfc/NfcEvent;)Landroid/nfc/NdefMessage;" deprecated="29" />
+	</class>
+	<class name="android/nfc/NfcAdapter$OnNdefPushCompleteCallback" since="14" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onNdefPushComplete(Landroid/nfc/NfcEvent;)V" deprecated="29" />
+	</class>
+	<class name="android/nfc/NfcAdapter$OnTagRemovedListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onTagRemoved()V" />
+	</class>
+	<class name="android/nfc/NfcAdapter$ReaderCallback" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onTagDiscovered(Landroid/nfc/Tag;)V" />
+	</class>
+	<class name="android/nfc/NfcEvent" since="14">
+		<extends name="java/lang/Object" />
+		<field name="nfcAdapter" />
+		<field name="peerLlcpMajorVersion" since="23" />
+		<field name="peerLlcpMinorVersion" since="23" />
+	</class>
+	<class name="android/nfc/NfcManager" since="10">
+		<extends name="java/lang/Object" />
+		<method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;" />
+	</class>
+	<class name="android/nfc/Tag" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getId()[B" />
+		<method name="getTechList()[Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/nfc/TagLostException" since="10">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/nfc/cardemulation/CardEmulation" since="19">
+		<extends name="java/lang/Object" />
+		<method name="categoryAllowsForegroundPreference(Ljava/lang/String;)Z" since="21" />
+		<method name="getAidsForPreferredPaymentService()Ljava/util/List;" since="30" />
+		<method name="getAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="21" />
+		<method name="getDescriptionForPreferredPaymentService()Ljava/lang/CharSequence;" since="30" />
+		<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/CardEmulation;" />
+		<method name="getRouteDestinationForPreferredPaymentService()Ljava/lang/String;" since="30" />
+		<method name="getSelectionModeForCategory(Ljava/lang/String;)I" />
+		<method name="isDefaultServiceForAid(Landroid/content/ComponentName;Ljava/lang/String;)Z" />
+		<method name="isDefaultServiceForCategory(Landroid/content/ComponentName;Ljava/lang/String;)Z" />
+		<method name="registerAidsForService(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)Z" since="21" />
+		<method name="removeAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21" />
+		<method name="setOffHostForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="29" />
+		<method name="setPreferredService(Landroid/app/Activity;Landroid/content/ComponentName;)Z" since="21" />
+		<method name="supportsAidPrefixRegistration()Z" since="21" />
+		<method name="unsetOffHostForService(Landroid/content/ComponentName;)Z" since="29" />
+		<method name="unsetPreferredService(Landroid/app/Activity;)Z" since="21" />
+		<field name="ACTION_CHANGE_DEFAULT" />
+		<field name="CATEGORY_OTHER" />
+		<field name="CATEGORY_PAYMENT" />
+		<field name="EXTRA_CATEGORY" />
+		<field name="EXTRA_SERVICE_COMPONENT" />
+		<field name="SELECTION_MODE_ALWAYS_ASK" />
+		<field name="SELECTION_MODE_ASK_IF_CONFLICT" />
+		<field name="SELECTION_MODE_PREFER_DEFAULT" />
+	</class>
+	<class name="android/nfc/cardemulation/HostApduService" since="19">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="notifyUnhandled()V" />
+		<method name="onDeactivated(I)V" />
+		<method name="processCommandApdu([BLandroid/os/Bundle;)[B" />
+		<method name="sendResponseApdu([B)V" />
+		<field name="DEACTIVATION_DESELECTED" />
+		<field name="DEACTIVATION_LINK_LOSS" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/nfc/cardemulation/HostNfcFService" since="24">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDeactivated(I)V" />
+		<method name="processNfcFPacket([BLandroid/os/Bundle;)[B" />
+		<method name="sendResponsePacket([B)V" />
+		<field name="DEACTIVATION_LINK_LOSS" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/nfc/cardemulation/NfcFCardEmulation" since="24">
+		<extends name="java/lang/Object" />
+		<method name="disableService(Landroid/app/Activity;)Z" />
+		<method name="enableService(Landroid/app/Activity;Landroid/content/ComponentName;)Z" />
+		<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/NfcFCardEmulation;" />
+		<method name="getNfcid2ForService(Landroid/content/ComponentName;)Ljava/lang/String;" />
+		<method name="getSystemCodeForService(Landroid/content/ComponentName;)Ljava/lang/String;" />
+		<method name="registerSystemCodeForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" />
+		<method name="setNfcid2ForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" />
+		<method name="unregisterSystemCodeForService(Landroid/content/ComponentName;)Z" />
+	</class>
+	<class name="android/nfc/cardemulation/OffHostApduService" since="19">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/nfc/tech/IsoDep" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/IsoDep;" />
+		<method name="getHiLayerResponse()[B" />
+		<method name="getHistoricalBytes()[B" />
+		<method name="getMaxTransceiveLength()I" since="14" />
+		<method name="getTimeout()I" since="14" />
+		<method name="isExtendedLengthApduSupported()Z" since="16" />
+		<method name="setTimeout(I)V" />
+		<method name="transceive([B)[B" />
+	</class>
+	<class name="android/nfc/tech/MifareClassic" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="authenticateSectorWithKeyA(I[B)Z" />
+		<method name="authenticateSectorWithKeyB(I[B)Z" />
+		<method name="blockToSector(I)I" />
+		<method name="decrement(II)V" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/MifareClassic;" />
+		<method name="getBlockCount()I" />
+		<method name="getBlockCountInSector(I)I" />
+		<method name="getMaxTransceiveLength()I" since="14" />
+		<method name="getSectorCount()I" />
+		<method name="getSize()I" />
+		<method name="getTimeout()I" since="14" />
+		<method name="getType()I" />
+		<method name="increment(II)V" />
+		<method name="readBlock(I)[B" />
+		<method name="restore(I)V" />
+		<method name="sectorToBlock(I)I" />
+		<method name="setTimeout(I)V" since="14" />
+		<method name="transceive([B)[B" />
+		<method name="transfer(I)V" />
+		<method name="writeBlock(I[B)V" />
+		<field name="BLOCK_SIZE" />
+		<field name="KEY_DEFAULT" />
+		<field name="KEY_MIFARE_APPLICATION_DIRECTORY" />
+		<field name="KEY_NFC_FORUM" />
+		<field name="SIZE_1K" />
+		<field name="SIZE_2K" />
+		<field name="SIZE_4K" />
+		<field name="SIZE_MINI" />
+		<field name="TYPE_CLASSIC" />
+		<field name="TYPE_PLUS" />
+		<field name="TYPE_PRO" />
+		<field name="TYPE_UNKNOWN" />
+	</class>
+	<class name="android/nfc/tech/MifareUltralight" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/MifareUltralight;" />
+		<method name="getMaxTransceiveLength()I" since="14" />
+		<method name="getTimeout()I" since="14" />
+		<method name="getType()I" />
+		<method name="readPages(I)[B" />
+		<method name="setTimeout(I)V" since="14" />
+		<method name="transceive([B)[B" />
+		<method name="writePage(I[B)V" />
+		<field name="PAGE_SIZE" />
+		<field name="TYPE_ULTRALIGHT" />
+		<field name="TYPE_ULTRALIGHT_C" />
+		<field name="TYPE_UNKNOWN" />
+	</class>
+	<class name="android/nfc/tech/Ndef" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="canMakeReadOnly()Z" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/Ndef;" />
+		<method name="getCachedNdefMessage()Landroid/nfc/NdefMessage;" />
+		<method name="getMaxSize()I" />
+		<method name="getNdefMessage()Landroid/nfc/NdefMessage;" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="isWritable()Z" />
+		<method name="makeReadOnly()Z" />
+		<method name="writeNdefMessage(Landroid/nfc/NdefMessage;)V" />
+		<field name="MIFARE_CLASSIC" />
+		<field name="NFC_FORUM_TYPE_1" />
+		<field name="NFC_FORUM_TYPE_2" />
+		<field name="NFC_FORUM_TYPE_3" />
+		<field name="NFC_FORUM_TYPE_4" />
+	</class>
+	<class name="android/nfc/tech/NdefFormatable" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="format(Landroid/nfc/NdefMessage;)V" />
+		<method name="formatReadOnly(Landroid/nfc/NdefMessage;)V" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NdefFormatable;" />
+	</class>
+	<class name="android/nfc/tech/NfcA" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcA;" />
+		<method name="getAtqa()[B" />
+		<method name="getMaxTransceiveLength()I" since="14" />
+		<method name="getSak()S" />
+		<method name="getTimeout()I" since="14" />
+		<method name="setTimeout(I)V" since="14" />
+		<method name="transceive([B)[B" />
+	</class>
+	<class name="android/nfc/tech/NfcB" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcB;" />
+		<method name="getApplicationData()[B" />
+		<method name="getMaxTransceiveLength()I" since="14" />
+		<method name="getProtocolInfo()[B" />
+		<method name="transceive([B)[B" />
+	</class>
+	<class name="android/nfc/tech/NfcBarcode" since="17">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcBarcode;" />
+		<method name="getBarcode()[B" />
+		<method name="getType()I" />
+		<field name="TYPE_KOVIO" />
+		<field name="TYPE_UNKNOWN" />
+	</class>
+	<class name="android/nfc/tech/NfcF" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcF;" />
+		<method name="getManufacturer()[B" />
+		<method name="getMaxTransceiveLength()I" since="14" />
+		<method name="getSystemCode()[B" />
+		<method name="getTimeout()I" since="14" />
+		<method name="setTimeout(I)V" since="14" />
+		<method name="transceive([B)[B" />
+	</class>
+	<class name="android/nfc/tech/NfcV" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="android/nfc/tech/TagTechnology" />
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcV;" />
+		<method name="getDsfId()B" />
+		<method name="getMaxTransceiveLength()I" since="14" />
+		<method name="getResponseFlags()B" />
+		<method name="transceive([B)[B" />
+	</class>
+	<class name="android/nfc/tech/TagTechnology" since="10">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="connect()V" />
+		<method name="getTag()Landroid/nfc/Tag;" />
+		<method name="isConnected()Z" />
+	</class>
+	<class name="android/opengl/EGL14" since="17">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="eglBindAPI(I)Z" />
+		<method name="eglBindTexImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z" />
+		<method name="eglChooseConfig(Landroid/opengl/EGLDisplay;[II[Landroid/opengl/EGLConfig;II[II)Z" />
+		<method name="eglCopyBuffers(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z" />
+		<method name="eglCreateContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Landroid/opengl/EGLContext;[II)Landroid/opengl/EGLContext;" />
+		<method name="eglCreatePbufferFromClientBuffer(Landroid/opengl/EGLDisplay;IILandroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;" />
+		<method name="eglCreatePbufferSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;" />
+		<method name="eglCreatePixmapSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Landroid/opengl/EGLSurface;" deprecated="26" />
+		<method name="eglCreateWindowSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/lang/Object;[II)Landroid/opengl/EGLSurface;" />
+		<method name="eglDestroyContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;)Z" />
+		<method name="eglDestroySurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z" />
+		<method name="eglGetConfigAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Z" />
+		<method name="eglGetConfigs(Landroid/opengl/EGLDisplay;[Landroid/opengl/EGLConfig;II[II)Z" />
+		<method name="eglGetCurrentContext()Landroid/opengl/EGLContext;" />
+		<method name="eglGetCurrentDisplay()Landroid/opengl/EGLDisplay;" />
+		<method name="eglGetCurrentSurface(I)Landroid/opengl/EGLSurface;" />
+		<method name="eglGetDisplay(I)Landroid/opengl/EGLDisplay;" />
+		<method name="eglGetError()I" />
+		<method name="eglInitialize(Landroid/opengl/EGLDisplay;[II[II)Z" />
+		<method name="eglMakeCurrent(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;Landroid/opengl/EGLSurface;Landroid/opengl/EGLContext;)Z" />
+		<method name="eglQueryAPI()I" />
+		<method name="eglQueryContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;I[II)Z" />
+		<method name="eglQueryString(Landroid/opengl/EGLDisplay;I)Ljava/lang/String;" />
+		<method name="eglQuerySurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I[II)Z" />
+		<method name="eglReleaseTexImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z" />
+		<method name="eglReleaseThread()Z" />
+		<method name="eglSurfaceAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;II)Z" />
+		<method name="eglSwapBuffers(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z" />
+		<method name="eglSwapInterval(Landroid/opengl/EGLDisplay;I)Z" />
+		<method name="eglTerminate(Landroid/opengl/EGLDisplay;)Z" />
+		<method name="eglWaitClient()Z" />
+		<method name="eglWaitGL()Z" />
+		<method name="eglWaitNative(I)Z" />
+		<field name="EGL_ALPHA_MASK_SIZE" />
+		<field name="EGL_ALPHA_SIZE" />
+		<field name="EGL_BACK_BUFFER" />
+		<field name="EGL_BAD_ACCESS" />
+		<field name="EGL_BAD_ALLOC" />
+		<field name="EGL_BAD_ATTRIBUTE" />
+		<field name="EGL_BAD_CONFIG" />
+		<field name="EGL_BAD_CONTEXT" />
+		<field name="EGL_BAD_CURRENT_SURFACE" />
+		<field name="EGL_BAD_DISPLAY" />
+		<field name="EGL_BAD_MATCH" />
+		<field name="EGL_BAD_NATIVE_PIXMAP" />
+		<field name="EGL_BAD_NATIVE_WINDOW" />
+		<field name="EGL_BAD_PARAMETER" />
+		<field name="EGL_BAD_SURFACE" />
+		<field name="EGL_BIND_TO_TEXTURE_RGB" />
+		<field name="EGL_BIND_TO_TEXTURE_RGBA" />
+		<field name="EGL_BLUE_SIZE" />
+		<field name="EGL_BUFFER_DESTROYED" />
+		<field name="EGL_BUFFER_PRESERVED" />
+		<field name="EGL_BUFFER_SIZE" />
+		<field name="EGL_CLIENT_APIS" />
+		<field name="EGL_COLOR_BUFFER_TYPE" />
+		<field name="EGL_CONFIG_CAVEAT" />
+		<field name="EGL_CONFIG_ID" />
+		<field name="EGL_CONFORMANT" />
+		<field name="EGL_CONTEXT_CLIENT_TYPE" />
+		<field name="EGL_CONTEXT_CLIENT_VERSION" />
+		<field name="EGL_CONTEXT_LOST" />
+		<field name="EGL_CORE_NATIVE_ENGINE" />
+		<field name="EGL_DEFAULT_DISPLAY" />
+		<field name="EGL_DEPTH_SIZE" />
+		<field name="EGL_DISPLAY_SCALING" />
+		<field name="EGL_DRAW" />
+		<field name="EGL_EXTENSIONS" />
+		<field name="EGL_FALSE" />
+		<field name="EGL_GREEN_SIZE" />
+		<field name="EGL_HEIGHT" />
+		<field name="EGL_HORIZONTAL_RESOLUTION" />
+		<field name="EGL_LARGEST_PBUFFER" />
+		<field name="EGL_LEVEL" />
+		<field name="EGL_LUMINANCE_BUFFER" />
+		<field name="EGL_LUMINANCE_SIZE" />
+		<field name="EGL_MATCH_NATIVE_PIXMAP" />
+		<field name="EGL_MAX_PBUFFER_HEIGHT" />
+		<field name="EGL_MAX_PBUFFER_PIXELS" />
+		<field name="EGL_MAX_PBUFFER_WIDTH" />
+		<field name="EGL_MAX_SWAP_INTERVAL" />
+		<field name="EGL_MIN_SWAP_INTERVAL" />
+		<field name="EGL_MIPMAP_LEVEL" />
+		<field name="EGL_MIPMAP_TEXTURE" />
+		<field name="EGL_MULTISAMPLE_RESOLVE" />
+		<field name="EGL_MULTISAMPLE_RESOLVE_BOX" />
+		<field name="EGL_MULTISAMPLE_RESOLVE_BOX_BIT" />
+		<field name="EGL_MULTISAMPLE_RESOLVE_DEFAULT" />
+		<field name="EGL_NATIVE_RENDERABLE" />
+		<field name="EGL_NATIVE_VISUAL_ID" />
+		<field name="EGL_NATIVE_VISUAL_TYPE" />
+		<field name="EGL_NONE" />
+		<field name="EGL_NON_CONFORMANT_CONFIG" />
+		<field name="EGL_NOT_INITIALIZED" />
+		<field name="EGL_NO_CONTEXT" />
+		<field name="EGL_NO_DISPLAY" />
+		<field name="EGL_NO_SURFACE" />
+		<field name="EGL_NO_TEXTURE" />
+		<field name="EGL_OPENGL_API" />
+		<field name="EGL_OPENGL_BIT" />
+		<field name="EGL_OPENGL_ES2_BIT" />
+		<field name="EGL_OPENGL_ES_API" />
+		<field name="EGL_OPENGL_ES_BIT" />
+		<field name="EGL_OPENVG_API" />
+		<field name="EGL_OPENVG_BIT" />
+		<field name="EGL_OPENVG_IMAGE" />
+		<field name="EGL_PBUFFER_BIT" />
+		<field name="EGL_PIXEL_ASPECT_RATIO" />
+		<field name="EGL_PIXMAP_BIT" />
+		<field name="EGL_READ" />
+		<field name="EGL_RED_SIZE" />
+		<field name="EGL_RENDERABLE_TYPE" />
+		<field name="EGL_RENDER_BUFFER" />
+		<field name="EGL_RGB_BUFFER" />
+		<field name="EGL_SAMPLES" />
+		<field name="EGL_SAMPLE_BUFFERS" />
+		<field name="EGL_SINGLE_BUFFER" />
+		<field name="EGL_SLOW_CONFIG" />
+		<field name="EGL_STENCIL_SIZE" />
+		<field name="EGL_SUCCESS" />
+		<field name="EGL_SURFACE_TYPE" />
+		<field name="EGL_SWAP_BEHAVIOR" />
+		<field name="EGL_SWAP_BEHAVIOR_PRESERVED_BIT" />
+		<field name="EGL_TEXTURE_2D" />
+		<field name="EGL_TEXTURE_FORMAT" />
+		<field name="EGL_TEXTURE_RGB" />
+		<field name="EGL_TEXTURE_RGBA" />
+		<field name="EGL_TEXTURE_TARGET" />
+		<field name="EGL_TRANSPARENT_BLUE_VALUE" />
+		<field name="EGL_TRANSPARENT_GREEN_VALUE" />
+		<field name="EGL_TRANSPARENT_RED_VALUE" />
+		<field name="EGL_TRANSPARENT_RGB" />
+		<field name="EGL_TRANSPARENT_TYPE" />
+		<field name="EGL_TRUE" />
+		<field name="EGL_VENDOR" />
+		<field name="EGL_VERSION" />
+		<field name="EGL_VERTICAL_RESOLUTION" />
+		<field name="EGL_VG_ALPHA_FORMAT" />
+		<field name="EGL_VG_ALPHA_FORMAT_NONPRE" />
+		<field name="EGL_VG_ALPHA_FORMAT_PRE" />
+		<field name="EGL_VG_ALPHA_FORMAT_PRE_BIT" />
+		<field name="EGL_VG_COLORSPACE" />
+		<field name="EGL_VG_COLORSPACE_LINEAR" />
+		<field name="EGL_VG_COLORSPACE_LINEAR_BIT" />
+		<field name="EGL_VG_COLORSPACE_sRGB" />
+		<field name="EGL_WIDTH" />
+		<field name="EGL_WINDOW_BIT" />
+	</class>
+	<class name="android/opengl/EGL15" since="29">
+		<extends name="java/lang/Object" />
+		<method name="eglClientWaitSync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;IJ)I" />
+		<method name="eglCreateImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;IJ[JI)Landroid/opengl/EGLImage;" />
+		<method name="eglCreatePlatformPixmapSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/nio/Buffer;[JI)Landroid/opengl/EGLSurface;" />
+		<method name="eglCreatePlatformWindowSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/nio/Buffer;[JI)Landroid/opengl/EGLSurface;" />
+		<method name="eglCreateSync(Landroid/opengl/EGLDisplay;I[JI)Landroid/opengl/EGLSync;" />
+		<method name="eglDestroyImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLImage;)Z" />
+		<method name="eglDestroySync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;)Z" />
+		<method name="eglGetPlatformDisplay(IJ[JI)Landroid/opengl/EGLDisplay;" />
+		<method name="eglGetSyncAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;I[JI)Z" />
+		<method name="eglWaitSync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;I)Z" />
+		<field name="EGL_CL_EVENT_HANDLE" />
+		<field name="EGL_CONDITION_SATISFIED" />
+		<field name="EGL_CONTEXT_MAJOR_VERSION" />
+		<field name="EGL_CONTEXT_MINOR_VERSION" />
+		<field name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT" />
+		<field name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT" />
+		<field name="EGL_CONTEXT_OPENGL_DEBUG" />
+		<field name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE" />
+		<field name="EGL_CONTEXT_OPENGL_PROFILE_MASK" />
+		<field name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY" />
+		<field name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS" />
+		<field name="EGL_FOREVER" />
+		<field name="EGL_GL_COLORSPACE" />
+		<field name="EGL_GL_COLORSPACE_LINEAR" />
+		<field name="EGL_GL_COLORSPACE_SRGB" />
+		<field name="EGL_GL_RENDERBUFFER" />
+		<field name="EGL_GL_TEXTURE_2D" />
+		<field name="EGL_GL_TEXTURE_3D" />
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X" />
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y" />
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z" />
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X" />
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y" />
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z" />
+		<field name="EGL_GL_TEXTURE_LEVEL" />
+		<field name="EGL_GL_TEXTURE_ZOFFSET" />
+		<field name="EGL_IMAGE_PRESERVED" />
+		<field name="EGL_LOSE_CONTEXT_ON_RESET" />
+		<field name="EGL_NO_CONTEXT" />
+		<field name="EGL_NO_DISPLAY" />
+		<field name="EGL_NO_IMAGE" />
+		<field name="EGL_NO_RESET_NOTIFICATION" />
+		<field name="EGL_NO_SURFACE" />
+		<field name="EGL_NO_SYNC" />
+		<field name="EGL_OPENGL_ES3_BIT" />
+		<field name="EGL_PLATFORM_ANDROID_KHR" />
+		<field name="EGL_SIGNALED" />
+		<field name="EGL_SYNC_CL_EVENT" />
+		<field name="EGL_SYNC_CL_EVENT_COMPLETE" />
+		<field name="EGL_SYNC_CONDITION" />
+		<field name="EGL_SYNC_FENCE" />
+		<field name="EGL_SYNC_FLUSH_COMMANDS_BIT" />
+		<field name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE" />
+		<field name="EGL_SYNC_STATUS" />
+		<field name="EGL_SYNC_TYPE" />
+		<field name="EGL_TIMEOUT_EXPIRED" />
+		<field name="EGL_UNSIGNALED" />
+	</class>
+	<class name="android/opengl/EGLConfig" since="17">
+		<extends name="android/opengl/EGLObjectHandle" />
+	</class>
+	<class name="android/opengl/EGLContext" since="17">
+		<extends name="android/opengl/EGLObjectHandle" />
+	</class>
+	<class name="android/opengl/EGLDisplay" since="17">
+		<extends name="android/opengl/EGLObjectHandle" />
+	</class>
+	<class name="android/opengl/EGLExt" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="eglPresentationTimeANDROID(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;J)Z" />
+		<field name="EGL_CONTEXT_FLAGS_KHR" />
+		<field name="EGL_CONTEXT_MAJOR_VERSION_KHR" />
+		<field name="EGL_CONTEXT_MINOR_VERSION_KHR" />
+		<field name="EGL_OPENGL_ES3_BIT_KHR" />
+		<field name="EGL_RECORDABLE_ANDROID" since="26" />
+	</class>
+	<class name="android/opengl/EGLImage" since="29">
+		<extends name="android/opengl/EGLObjectHandle" />
+	</class>
+	<class name="android/opengl/EGLObjectHandle" since="17">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" deprecated="21" />
+		<method name="&lt;init&gt;(J)V" since="21" />
+		<method name="getHandle()I" deprecated="21" />
+		<method name="getNativeHandle()J" since="21" />
+	</class>
+	<class name="android/opengl/EGLSurface" since="17">
+		<extends name="android/opengl/EGLObjectHandle" />
+	</class>
+	<class name="android/opengl/EGLSync" since="29">
+		<extends name="android/opengl/EGLObjectHandle" />
+	</class>
+	<class name="android/opengl/ETC1" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="decodeBlock(Ljava/nio/Buffer;Ljava/nio/Buffer;)V" />
+		<method name="decodeImage(Ljava/nio/Buffer;Ljava/nio/Buffer;IIII)V" />
+		<method name="encodeBlock(Ljava/nio/Buffer;ILjava/nio/Buffer;)V" />
+		<method name="encodeImage(Ljava/nio/Buffer;IIIILjava/nio/Buffer;)V" />
+		<method name="formatHeader(Ljava/nio/Buffer;II)V" />
+		<method name="getEncodedDataSize(II)I" />
+		<method name="getHeight(Ljava/nio/Buffer;)I" />
+		<method name="getWidth(Ljava/nio/Buffer;)I" />
+		<method name="isValid(Ljava/nio/Buffer;)Z" />
+		<field name="DECODED_BLOCK_SIZE" />
+		<field name="ENCODED_BLOCK_SIZE" />
+		<field name="ETC1_RGB8_OES" />
+		<field name="ETC_PKM_HEADER_SIZE" />
+	</class>
+	<class name="android/opengl/ETC1Util" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="compressTexture(Ljava/nio/Buffer;IIII)Landroid/opengl/ETC1Util$ETC1Texture;" />
+		<method name="createTexture(Ljava/io/InputStream;)Landroid/opengl/ETC1Util$ETC1Texture;" />
+		<method name="isETC1Supported()Z" />
+		<method name="loadTexture(IIIIILandroid/opengl/ETC1Util$ETC1Texture;)V" />
+		<method name="loadTexture(IIIIILjava/io/InputStream;)V" />
+		<method name="writeTexture(Landroid/opengl/ETC1Util$ETC1Texture;Ljava/io/OutputStream;)V" />
+	</class>
+	<class name="android/opengl/ETC1Util$ETC1Texture" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IILjava/nio/ByteBuffer;)V" />
+		<method name="getData()Ljava/nio/ByteBuffer;" />
+		<method name="getHeight()I" />
+		<method name="getWidth()I" />
+	</class>
+	<class name="android/opengl/GLDebugHelper" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="wrap(Ljavax/microedition/khronos/egl/EGL;ILjava/io/Writer;)Ljavax/microedition/khronos/egl/EGL;" />
+		<method name="wrap(Ljavax/microedition/khronos/opengles/GL;ILjava/io/Writer;)Ljavax/microedition/khronos/opengles/GL;" />
+		<field name="CONFIG_CHECK_GL_ERROR" />
+		<field name="CONFIG_CHECK_THREAD" />
+		<field name="CONFIG_LOG_ARGUMENT_NAMES" />
+		<field name="ERROR_WRONG_THREAD" />
+	</class>
+	<class name="android/opengl/GLES10" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="glActiveTexture(I)V" />
+		<method name="glAlphaFunc(IF)V" />
+		<method name="glAlphaFuncx(II)V" />
+		<method name="glBindTexture(II)V" />
+		<method name="glBlendFunc(II)V" />
+		<method name="glClear(I)V" />
+		<method name="glClearColor(FFFF)V" />
+		<method name="glClearColorx(IIII)V" />
+		<method name="glClearDepthf(F)V" />
+		<method name="glClearDepthx(I)V" />
+		<method name="glClearStencil(I)V" />
+		<method name="glClientActiveTexture(I)V" />
+		<method name="glColor4f(FFFF)V" />
+		<method name="glColor4x(IIII)V" />
+		<method name="glColorMask(ZZZZ)V" />
+		<method name="glColorPointer(IIILjava/nio/Buffer;)V" />
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCopyTexImage2D(IIIIIIII)V" />
+		<method name="glCopyTexSubImage2D(IIIIIIII)V" />
+		<method name="glCullFace(I)V" />
+		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteTextures(I[II)V" />
+		<method name="glDepthFunc(I)V" />
+		<method name="glDepthMask(Z)V" />
+		<method name="glDepthRangef(FF)V" />
+		<method name="glDepthRangex(II)V" />
+		<method name="glDisable(I)V" />
+		<method name="glDisableClientState(I)V" />
+		<method name="glDrawArrays(III)V" />
+		<method name="glDrawElements(IIILjava/nio/Buffer;)V" />
+		<method name="glEnable(I)V" />
+		<method name="glEnableClientState(I)V" />
+		<method name="glFinish()V" />
+		<method name="glFlush()V" />
+		<method name="glFogf(IF)V" />
+		<method name="glFogfv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glFogfv(I[FI)V" />
+		<method name="glFogx(II)V" />
+		<method name="glFogxv(ILjava/nio/IntBuffer;)V" />
+		<method name="glFogxv(I[II)V" />
+		<method name="glFrontFace(I)V" />
+		<method name="glFrustumf(FFFFFF)V" />
+		<method name="glFrustumx(IIIIII)V" />
+		<method name="glGenTextures(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenTextures(I[II)V" />
+		<method name="glGetError()I" />
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetIntegerv(I[II)V" />
+		<method name="glGetString(I)Ljava/lang/String;" />
+		<method name="glHint(II)V" />
+		<method name="glLightModelf(IF)V" />
+		<method name="glLightModelfv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glLightModelfv(I[FI)V" />
+		<method name="glLightModelx(II)V" />
+		<method name="glLightModelxv(ILjava/nio/IntBuffer;)V" />
+		<method name="glLightModelxv(I[II)V" />
+		<method name="glLightf(IIF)V" />
+		<method name="glLightfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glLightfv(II[FI)V" />
+		<method name="glLightx(III)V" />
+		<method name="glLightxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glLightxv(II[II)V" />
+		<method name="glLineWidth(F)V" />
+		<method name="glLineWidthx(I)V" />
+		<method name="glLoadIdentity()V" />
+		<method name="glLoadMatrixf(Ljava/nio/FloatBuffer;)V" />
+		<method name="glLoadMatrixf([FI)V" />
+		<method name="glLoadMatrixx(Ljava/nio/IntBuffer;)V" />
+		<method name="glLoadMatrixx([II)V" />
+		<method name="glLogicOp(I)V" />
+		<method name="glMaterialf(IIF)V" />
+		<method name="glMaterialfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glMaterialfv(II[FI)V" />
+		<method name="glMaterialx(III)V" />
+		<method name="glMaterialxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glMaterialxv(II[II)V" />
+		<method name="glMatrixMode(I)V" />
+		<method name="glMultMatrixf(Ljava/nio/FloatBuffer;)V" />
+		<method name="glMultMatrixf([FI)V" />
+		<method name="glMultMatrixx(Ljava/nio/IntBuffer;)V" />
+		<method name="glMultMatrixx([II)V" />
+		<method name="glMultiTexCoord4f(IFFFF)V" />
+		<method name="glMultiTexCoord4x(IIIII)V" />
+		<method name="glNormal3f(FFF)V" />
+		<method name="glNormal3x(III)V" />
+		<method name="glNormalPointer(IILjava/nio/Buffer;)V" />
+		<method name="glOrthof(FFFFFF)V" />
+		<method name="glOrthox(IIIIII)V" />
+		<method name="glPixelStorei(II)V" />
+		<method name="glPointSize(F)V" />
+		<method name="glPointSizex(I)V" />
+		<method name="glPolygonOffset(FF)V" />
+		<method name="glPolygonOffsetx(II)V" />
+		<method name="glPopMatrix()V" />
+		<method name="glPushMatrix()V" />
+		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V" />
+		<method name="glRotatef(FFFF)V" />
+		<method name="glRotatex(IIII)V" />
+		<method name="glSampleCoverage(FZ)V" />
+		<method name="glSampleCoveragex(IZ)V" />
+		<method name="glScalef(FFF)V" />
+		<method name="glScalex(III)V" />
+		<method name="glScissor(IIII)V" />
+		<method name="glShadeModel(I)V" />
+		<method name="glStencilFunc(III)V" />
+		<method name="glStencilMask(I)V" />
+		<method name="glStencilOp(III)V" />
+		<method name="glTexCoordPointer(IIILjava/nio/Buffer;)V" />
+		<method name="glTexEnvf(IIF)V" />
+		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexEnvfv(II[FI)V" />
+		<method name="glTexEnvx(III)V" />
+		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexEnvxv(II[II)V" />
+		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glTexParameterf(IIF)V" />
+		<method name="glTexParameterx(III)V" />
+		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glTranslatef(FFF)V" />
+		<method name="glTranslatex(III)V" />
+		<method name="glVertexPointer(IIILjava/nio/Buffer;)V" />
+		<method name="glViewport(IIII)V" />
+		<field name="GL_ADD" />
+		<field name="GL_ALIASED_LINE_WIDTH_RANGE" />
+		<field name="GL_ALIASED_POINT_SIZE_RANGE" />
+		<field name="GL_ALPHA" />
+		<field name="GL_ALPHA_BITS" />
+		<field name="GL_ALPHA_TEST" />
+		<field name="GL_ALWAYS" />
+		<field name="GL_AMBIENT" />
+		<field name="GL_AMBIENT_AND_DIFFUSE" />
+		<field name="GL_AND" />
+		<field name="GL_AND_INVERTED" />
+		<field name="GL_AND_REVERSE" />
+		<field name="GL_BACK" />
+		<field name="GL_BLEND" />
+		<field name="GL_BLUE_BITS" />
+		<field name="GL_BYTE" />
+		<field name="GL_CCW" />
+		<field name="GL_CLAMP_TO_EDGE" />
+		<field name="GL_CLEAR" />
+		<field name="GL_COLOR_ARRAY" />
+		<field name="GL_COLOR_BUFFER_BIT" />
+		<field name="GL_COLOR_LOGIC_OP" />
+		<field name="GL_COLOR_MATERIAL" />
+		<field name="GL_COMPRESSED_TEXTURE_FORMATS" />
+		<field name="GL_CONSTANT_ATTENUATION" />
+		<field name="GL_COPY" />
+		<field name="GL_COPY_INVERTED" />
+		<field name="GL_CULL_FACE" />
+		<field name="GL_CW" />
+		<field name="GL_DECAL" />
+		<field name="GL_DECR" />
+		<field name="GL_DEPTH_BITS" />
+		<field name="GL_DEPTH_BUFFER_BIT" />
+		<field name="GL_DEPTH_TEST" />
+		<field name="GL_DIFFUSE" />
+		<field name="GL_DITHER" />
+		<field name="GL_DONT_CARE" />
+		<field name="GL_DST_ALPHA" />
+		<field name="GL_DST_COLOR" />
+		<field name="GL_EMISSION" />
+		<field name="GL_EQUAL" />
+		<field name="GL_EQUIV" />
+		<field name="GL_EXP" />
+		<field name="GL_EXP2" />
+		<field name="GL_EXTENSIONS" />
+		<field name="GL_FALSE" />
+		<field name="GL_FASTEST" />
+		<field name="GL_FIXED" />
+		<field name="GL_FLAT" />
+		<field name="GL_FLOAT" />
+		<field name="GL_FOG" />
+		<field name="GL_FOG_COLOR" />
+		<field name="GL_FOG_DENSITY" />
+		<field name="GL_FOG_END" />
+		<field name="GL_FOG_HINT" />
+		<field name="GL_FOG_MODE" />
+		<field name="GL_FOG_START" />
+		<field name="GL_FRONT" />
+		<field name="GL_FRONT_AND_BACK" />
+		<field name="GL_GEQUAL" />
+		<field name="GL_GREATER" />
+		<field name="GL_GREEN_BITS" />
+		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES" />
+		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE_OES" />
+		<field name="GL_INCR" />
+		<field name="GL_INVALID_ENUM" />
+		<field name="GL_INVALID_OPERATION" />
+		<field name="GL_INVALID_VALUE" />
+		<field name="GL_INVERT" />
+		<field name="GL_KEEP" />
+		<field name="GL_LEQUAL" />
+		<field name="GL_LESS" />
+		<field name="GL_LIGHT0" />
+		<field name="GL_LIGHT1" />
+		<field name="GL_LIGHT2" />
+		<field name="GL_LIGHT3" />
+		<field name="GL_LIGHT4" />
+		<field name="GL_LIGHT5" />
+		<field name="GL_LIGHT6" />
+		<field name="GL_LIGHT7" />
+		<field name="GL_LIGHTING" />
+		<field name="GL_LIGHT_MODEL_AMBIENT" />
+		<field name="GL_LIGHT_MODEL_TWO_SIDE" />
+		<field name="GL_LINEAR" />
+		<field name="GL_LINEAR_ATTENUATION" />
+		<field name="GL_LINEAR_MIPMAP_LINEAR" />
+		<field name="GL_LINEAR_MIPMAP_NEAREST" />
+		<field name="GL_LINES" />
+		<field name="GL_LINE_LOOP" />
+		<field name="GL_LINE_SMOOTH" />
+		<field name="GL_LINE_SMOOTH_HINT" />
+		<field name="GL_LINE_STRIP" />
+		<field name="GL_LUMINANCE" />
+		<field name="GL_LUMINANCE_ALPHA" />
+		<field name="GL_MAX_ELEMENTS_INDICES" />
+		<field name="GL_MAX_ELEMENTS_VERTICES" />
+		<field name="GL_MAX_LIGHTS" />
+		<field name="GL_MAX_MODELVIEW_STACK_DEPTH" />
+		<field name="GL_MAX_PROJECTION_STACK_DEPTH" />
+		<field name="GL_MAX_TEXTURE_SIZE" />
+		<field name="GL_MAX_TEXTURE_STACK_DEPTH" />
+		<field name="GL_MAX_TEXTURE_UNITS" />
+		<field name="GL_MAX_VIEWPORT_DIMS" />
+		<field name="GL_MODELVIEW" />
+		<field name="GL_MODULATE" />
+		<field name="GL_MULTISAMPLE" />
+		<field name="GL_NAND" />
+		<field name="GL_NEAREST" />
+		<field name="GL_NEAREST_MIPMAP_LINEAR" />
+		<field name="GL_NEAREST_MIPMAP_NEAREST" />
+		<field name="GL_NEVER" />
+		<field name="GL_NICEST" />
+		<field name="GL_NOOP" />
+		<field name="GL_NOR" />
+		<field name="GL_NORMALIZE" />
+		<field name="GL_NORMAL_ARRAY" />
+		<field name="GL_NOTEQUAL" />
+		<field name="GL_NO_ERROR" />
+		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS" />
+		<field name="GL_ONE" />
+		<field name="GL_ONE_MINUS_DST_ALPHA" />
+		<field name="GL_ONE_MINUS_DST_COLOR" />
+		<field name="GL_ONE_MINUS_SRC_ALPHA" />
+		<field name="GL_ONE_MINUS_SRC_COLOR" />
+		<field name="GL_OR" />
+		<field name="GL_OR_INVERTED" />
+		<field name="GL_OR_REVERSE" />
+		<field name="GL_OUT_OF_MEMORY" />
+		<field name="GL_PACK_ALIGNMENT" />
+		<field name="GL_PALETTE4_R5_G6_B5_OES" />
+		<field name="GL_PALETTE4_RGB5_A1_OES" />
+		<field name="GL_PALETTE4_RGB8_OES" />
+		<field name="GL_PALETTE4_RGBA4_OES" />
+		<field name="GL_PALETTE4_RGBA8_OES" />
+		<field name="GL_PALETTE8_R5_G6_B5_OES" />
+		<field name="GL_PALETTE8_RGB5_A1_OES" />
+		<field name="GL_PALETTE8_RGB8_OES" />
+		<field name="GL_PALETTE8_RGBA4_OES" />
+		<field name="GL_PALETTE8_RGBA8_OES" />
+		<field name="GL_PERSPECTIVE_CORRECTION_HINT" />
+		<field name="GL_POINTS" />
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE" />
+		<field name="GL_POINT_SIZE" />
+		<field name="GL_POINT_SMOOTH" />
+		<field name="GL_POINT_SMOOTH_HINT" />
+		<field name="GL_POLYGON_OFFSET_FILL" />
+		<field name="GL_POLYGON_SMOOTH_HINT" />
+		<field name="GL_POSITION" />
+		<field name="GL_PROJECTION" />
+		<field name="GL_QUADRATIC_ATTENUATION" />
+		<field name="GL_RED_BITS" />
+		<field name="GL_RENDERER" />
+		<field name="GL_REPEAT" />
+		<field name="GL_REPLACE" />
+		<field name="GL_RESCALE_NORMAL" />
+		<field name="GL_RGB" />
+		<field name="GL_RGBA" />
+		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE" />
+		<field name="GL_SAMPLE_ALPHA_TO_ONE" />
+		<field name="GL_SAMPLE_COVERAGE" />
+		<field name="GL_SCISSOR_TEST" />
+		<field name="GL_SET" />
+		<field name="GL_SHININESS" />
+		<field name="GL_SHORT" />
+		<field name="GL_SMOOTH" />
+		<field name="GL_SMOOTH_LINE_WIDTH_RANGE" />
+		<field name="GL_SMOOTH_POINT_SIZE_RANGE" />
+		<field name="GL_SPECULAR" />
+		<field name="GL_SPOT_CUTOFF" />
+		<field name="GL_SPOT_DIRECTION" />
+		<field name="GL_SPOT_EXPONENT" />
+		<field name="GL_SRC_ALPHA" />
+		<field name="GL_SRC_ALPHA_SATURATE" />
+		<field name="GL_SRC_COLOR" />
+		<field name="GL_STACK_OVERFLOW" />
+		<field name="GL_STACK_UNDERFLOW" />
+		<field name="GL_STENCIL_BITS" />
+		<field name="GL_STENCIL_BUFFER_BIT" />
+		<field name="GL_STENCIL_TEST" />
+		<field name="GL_SUBPIXEL_BITS" />
+		<field name="GL_TEXTURE" />
+		<field name="GL_TEXTURE0" />
+		<field name="GL_TEXTURE1" />
+		<field name="GL_TEXTURE10" />
+		<field name="GL_TEXTURE11" />
+		<field name="GL_TEXTURE12" />
+		<field name="GL_TEXTURE13" />
+		<field name="GL_TEXTURE14" />
+		<field name="GL_TEXTURE15" />
+		<field name="GL_TEXTURE16" />
+		<field name="GL_TEXTURE17" />
+		<field name="GL_TEXTURE18" />
+		<field name="GL_TEXTURE19" />
+		<field name="GL_TEXTURE2" />
+		<field name="GL_TEXTURE20" />
+		<field name="GL_TEXTURE21" />
+		<field name="GL_TEXTURE22" />
+		<field name="GL_TEXTURE23" />
+		<field name="GL_TEXTURE24" />
+		<field name="GL_TEXTURE25" />
+		<field name="GL_TEXTURE26" />
+		<field name="GL_TEXTURE27" />
+		<field name="GL_TEXTURE28" />
+		<field name="GL_TEXTURE29" />
+		<field name="GL_TEXTURE3" />
+		<field name="GL_TEXTURE30" />
+		<field name="GL_TEXTURE31" />
+		<field name="GL_TEXTURE4" />
+		<field name="GL_TEXTURE5" />
+		<field name="GL_TEXTURE6" />
+		<field name="GL_TEXTURE7" />
+		<field name="GL_TEXTURE8" />
+		<field name="GL_TEXTURE9" />
+		<field name="GL_TEXTURE_2D" />
+		<field name="GL_TEXTURE_COORD_ARRAY" />
+		<field name="GL_TEXTURE_ENV" />
+		<field name="GL_TEXTURE_ENV_COLOR" />
+		<field name="GL_TEXTURE_ENV_MODE" />
+		<field name="GL_TEXTURE_MAG_FILTER" />
+		<field name="GL_TEXTURE_MIN_FILTER" />
+		<field name="GL_TEXTURE_WRAP_S" />
+		<field name="GL_TEXTURE_WRAP_T" />
+		<field name="GL_TRIANGLES" />
+		<field name="GL_TRIANGLE_FAN" />
+		<field name="GL_TRIANGLE_STRIP" />
+		<field name="GL_TRUE" />
+		<field name="GL_UNPACK_ALIGNMENT" />
+		<field name="GL_UNSIGNED_BYTE" />
+		<field name="GL_UNSIGNED_SHORT" />
+		<field name="GL_UNSIGNED_SHORT_4_4_4_4" />
+		<field name="GL_UNSIGNED_SHORT_5_5_5_1" />
+		<field name="GL_UNSIGNED_SHORT_5_6_5" />
+		<field name="GL_VENDOR" />
+		<field name="GL_VERSION" />
+		<field name="GL_VERTEX_ARRAY" />
+		<field name="GL_XOR" />
+		<field name="GL_ZERO" />
+	</class>
+	<class name="android/opengl/GLES10Ext" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="glQueryMatrixxOES(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I" />
+		<method name="glQueryMatrixxOES([II[II)I" />
+	</class>
+	<class name="android/opengl/GLES11" since="4">
+		<extends name="android/opengl/GLES10" />
+		<method name="&lt;init&gt;()V" />
+		<method name="glBindBuffer(II)V" />
+		<method name="glBufferData(IILjava/nio/Buffer;I)V" />
+		<method name="glBufferSubData(IIILjava/nio/Buffer;)V" />
+		<method name="glClipPlanef(ILjava/nio/FloatBuffer;)V" />
+		<method name="glClipPlanef(I[FI)V" />
+		<method name="glClipPlanex(ILjava/nio/IntBuffer;)V" />
+		<method name="glClipPlanex(I[II)V" />
+		<method name="glColor4ub(BBBB)V" />
+		<method name="glColorPointer(IIII)V" />
+		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteBuffers(I[II)V" />
+		<method name="glDrawElements(IIII)V" />
+		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenBuffers(I[II)V" />
+		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetBooleanv(I[ZI)V" />
+		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetBufferParameteriv(II[II)V" />
+		<method name="glGetClipPlanef(ILjava/nio/FloatBuffer;)V" />
+		<method name="glGetClipPlanef(I[FI)V" />
+		<method name="glGetClipPlanex(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetClipPlanex(I[II)V" />
+		<method name="glGetFixedv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetFixedv(I[II)V" />
+		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glGetFloatv(I[FI)V" />
+		<method name="glGetLightfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetLightfv(II[FI)V" />
+		<method name="glGetLightxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetLightxv(II[II)V" />
+		<method name="glGetMaterialfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetMaterialfv(II[FI)V" />
+		<method name="glGetMaterialxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetMaterialxv(II[II)V" />
+		<method name="glGetTexEnvfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetTexEnvfv(II[FI)V" />
+		<method name="glGetTexEnviv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexEnviv(II[II)V" />
+		<method name="glGetTexEnvxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexEnvxv(II[II)V" />
+		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetTexParameterfv(II[FI)V" />
+		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameteriv(II[II)V" />
+		<method name="glGetTexParameterxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameterxv(II[II)V" />
+		<method name="glIsBuffer(I)Z" />
+		<method name="glIsEnabled(I)Z" />
+		<method name="glIsTexture(I)Z" />
+		<method name="glNormalPointer(III)V" />
+		<method name="glPointParameterf(IF)V" />
+		<method name="glPointParameterfv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glPointParameterfv(I[FI)V" />
+		<method name="glPointParameterx(II)V" />
+		<method name="glPointParameterxv(ILjava/nio/IntBuffer;)V" />
+		<method name="glPointParameterxv(I[II)V" />
+		<method name="glPointSizePointerOES(IILjava/nio/Buffer;)V" />
+		<method name="glTexCoordPointer(IIII)V" />
+		<method name="glTexEnvi(III)V" />
+		<method name="glTexEnviv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexEnviv(II[II)V" />
+		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexParameterfv(II[FI)V" />
+		<method name="glTexParameteri(III)V" />
+		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameteriv(II[II)V" />
+		<method name="glTexParameterxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameterxv(II[II)V" />
+		<method name="glVertexPointer(IIII)V" />
+		<field name="GL_ACTIVE_TEXTURE" />
+		<field name="GL_ADD_SIGNED" />
+		<field name="GL_ALPHA_SCALE" />
+		<field name="GL_ALPHA_TEST_FUNC" />
+		<field name="GL_ALPHA_TEST_REF" />
+		<field name="GL_ARRAY_BUFFER" />
+		<field name="GL_ARRAY_BUFFER_BINDING" />
+		<field name="GL_BLEND_DST" />
+		<field name="GL_BLEND_SRC" />
+		<field name="GL_BUFFER_ACCESS" />
+		<field name="GL_BUFFER_SIZE" />
+		<field name="GL_BUFFER_USAGE" />
+		<field name="GL_CLIENT_ACTIVE_TEXTURE" />
+		<field name="GL_CLIP_PLANE0" />
+		<field name="GL_CLIP_PLANE1" />
+		<field name="GL_CLIP_PLANE2" />
+		<field name="GL_CLIP_PLANE3" />
+		<field name="GL_CLIP_PLANE4" />
+		<field name="GL_CLIP_PLANE5" />
+		<field name="GL_COLOR_ARRAY_BUFFER_BINDING" />
+		<field name="GL_COLOR_ARRAY_POINTER" />
+		<field name="GL_COLOR_ARRAY_SIZE" />
+		<field name="GL_COLOR_ARRAY_STRIDE" />
+		<field name="GL_COLOR_ARRAY_TYPE" />
+		<field name="GL_COLOR_CLEAR_VALUE" />
+		<field name="GL_COLOR_WRITEMASK" />
+		<field name="GL_COMBINE" />
+		<field name="GL_COMBINE_ALPHA" />
+		<field name="GL_COMBINE_RGB" />
+		<field name="GL_CONSTANT" />
+		<field name="GL_COORD_REPLACE_OES" />
+		<field name="GL_CULL_FACE_MODE" />
+		<field name="GL_CURRENT_COLOR" />
+		<field name="GL_CURRENT_NORMAL" />
+		<field name="GL_CURRENT_TEXTURE_COORDS" />
+		<field name="GL_DEPTH_CLEAR_VALUE" />
+		<field name="GL_DEPTH_FUNC" />
+		<field name="GL_DEPTH_RANGE" />
+		<field name="GL_DEPTH_WRITEMASK" />
+		<field name="GL_DOT3_RGB" />
+		<field name="GL_DOT3_RGBA" />
+		<field name="GL_DYNAMIC_DRAW" />
+		<field name="GL_ELEMENT_ARRAY_BUFFER" />
+		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING" />
+		<field name="GL_FRONT_FACE" />
+		<field name="GL_GENERATE_MIPMAP" />
+		<field name="GL_GENERATE_MIPMAP_HINT" />
+		<field name="GL_INTERPOLATE" />
+		<field name="GL_LINE_WIDTH" />
+		<field name="GL_LOGIC_OP_MODE" />
+		<field name="GL_MATRIX_MODE" />
+		<field name="GL_MAX_CLIP_PLANES" />
+		<field name="GL_MODELVIEW_MATRIX" />
+		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_MODELVIEW_STACK_DEPTH" />
+		<field name="GL_NORMAL_ARRAY_BUFFER_BINDING" />
+		<field name="GL_NORMAL_ARRAY_POINTER" />
+		<field name="GL_NORMAL_ARRAY_STRIDE" />
+		<field name="GL_NORMAL_ARRAY_TYPE" />
+		<field name="GL_OPERAND0_ALPHA" />
+		<field name="GL_OPERAND0_RGB" />
+		<field name="GL_OPERAND1_ALPHA" />
+		<field name="GL_OPERAND1_RGB" />
+		<field name="GL_OPERAND2_ALPHA" />
+		<field name="GL_OPERAND2_RGB" />
+		<field name="GL_POINT_DISTANCE_ATTENUATION" />
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE" />
+		<field name="GL_POINT_SIZE" />
+		<field name="GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_POINTER_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_STRIDE_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_TYPE_OES" />
+		<field name="GL_POINT_SIZE_MAX" />
+		<field name="GL_POINT_SIZE_MIN" />
+		<field name="GL_POINT_SPRITE_OES" />
+		<field name="GL_POLYGON_OFFSET_FACTOR" />
+		<field name="GL_POLYGON_OFFSET_UNITS" />
+		<field name="GL_PREVIOUS" />
+		<field name="GL_PRIMARY_COLOR" />
+		<field name="GL_PROJECTION_MATRIX" />
+		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_PROJECTION_STACK_DEPTH" />
+		<field name="GL_RGB_SCALE" />
+		<field name="GL_SAMPLES" />
+		<field name="GL_SAMPLE_BUFFERS" />
+		<field name="GL_SAMPLE_COVERAGE_INVERT" />
+		<field name="GL_SAMPLE_COVERAGE_VALUE" />
+		<field name="GL_SCISSOR_BOX" />
+		<field name="GL_SHADE_MODEL" />
+		<field name="GL_SRC0_ALPHA" />
+		<field name="GL_SRC0_RGB" />
+		<field name="GL_SRC1_ALPHA" />
+		<field name="GL_SRC1_RGB" />
+		<field name="GL_SRC2_ALPHA" />
+		<field name="GL_SRC2_RGB" />
+		<field name="GL_STATIC_DRAW" />
+		<field name="GL_STENCIL_CLEAR_VALUE" />
+		<field name="GL_STENCIL_FAIL" />
+		<field name="GL_STENCIL_FUNC" />
+		<field name="GL_STENCIL_PASS_DEPTH_FAIL" />
+		<field name="GL_STENCIL_PASS_DEPTH_PASS" />
+		<field name="GL_STENCIL_REF" />
+		<field name="GL_STENCIL_VALUE_MASK" />
+		<field name="GL_STENCIL_WRITEMASK" />
+		<field name="GL_SUBTRACT" />
+		<field name="GL_TEXTURE_BINDING_2D" />
+		<field name="GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING" />
+		<field name="GL_TEXTURE_COORD_ARRAY_POINTER" />
+		<field name="GL_TEXTURE_COORD_ARRAY_SIZE" />
+		<field name="GL_TEXTURE_COORD_ARRAY_STRIDE" />
+		<field name="GL_TEXTURE_COORD_ARRAY_TYPE" />
+		<field name="GL_TEXTURE_MATRIX" />
+		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_TEXTURE_STACK_DEPTH" />
+		<field name="GL_VERTEX_ARRAY_BUFFER_BINDING" />
+		<field name="GL_VERTEX_ARRAY_POINTER" />
+		<field name="GL_VERTEX_ARRAY_SIZE" />
+		<field name="GL_VERTEX_ARRAY_STRIDE" />
+		<field name="GL_VERTEX_ARRAY_TYPE" />
+		<field name="GL_VIEWPORT" />
+		<field name="GL_WRITE_ONLY" />
+	</class>
+	<class name="android/opengl/GLES11Ext" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="glAlphaFuncxOES(II)V" />
+		<method name="glBindFramebufferOES(II)V" />
+		<method name="glBindRenderbufferOES(II)V" />
+		<method name="glBlendEquationOES(I)V" />
+		<method name="glBlendEquationSeparateOES(II)V" />
+		<method name="glBlendFuncSeparateOES(IIII)V" />
+		<method name="glCheckFramebufferStatusOES(I)I" />
+		<method name="glClearColorxOES(IIII)V" />
+		<method name="glClearDepthfOES(F)V" />
+		<method name="glClearDepthxOES(I)V" />
+		<method name="glClipPlanefOES(ILjava/nio/FloatBuffer;)V" />
+		<method name="glClipPlanefOES(I[FI)V" />
+		<method name="glClipPlanexOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glClipPlanexOES(I[II)V" />
+		<method name="glColor4xOES(IIII)V" />
+		<method name="glCurrentPaletteMatrixOES(I)V" />
+		<method name="glDeleteFramebuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteFramebuffersOES(I[II)V" />
+		<method name="glDeleteRenderbuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteRenderbuffersOES(I[II)V" />
+		<method name="glDepthRangefOES(FF)V" />
+		<method name="glDepthRangexOES(II)V" />
+		<method name="glDrawTexfOES(FFFFF)V" />
+		<method name="glDrawTexfvOES(Ljava/nio/FloatBuffer;)V" />
+		<method name="glDrawTexfvOES([FI)V" />
+		<method name="glDrawTexiOES(IIIII)V" />
+		<method name="glDrawTexivOES(Ljava/nio/IntBuffer;)V" />
+		<method name="glDrawTexivOES([II)V" />
+		<method name="glDrawTexsOES(SSSSS)V" />
+		<method name="glDrawTexsvOES(Ljava/nio/ShortBuffer;)V" />
+		<method name="glDrawTexsvOES([SI)V" />
+		<method name="glDrawTexxOES(IIIII)V" />
+		<method name="glDrawTexxvOES(Ljava/nio/IntBuffer;)V" />
+		<method name="glDrawTexxvOES([II)V" />
+		<method name="glEGLImageTargetRenderbufferStorageOES(ILjava/nio/Buffer;)V" />
+		<method name="glEGLImageTargetTexture2DOES(ILjava/nio/Buffer;)V" />
+		<method name="glFogxOES(II)V" />
+		<method name="glFogxvOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glFogxvOES(I[II)V" />
+		<method name="glFramebufferRenderbufferOES(IIII)V" />
+		<method name="glFramebufferTexture2DOES(IIIII)V" />
+		<method name="glFrustumfOES(FFFFFF)V" />
+		<method name="glFrustumxOES(IIIIII)V" />
+		<method name="glGenFramebuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenFramebuffersOES(I[II)V" />
+		<method name="glGenRenderbuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenRenderbuffersOES(I[II)V" />
+		<method name="glGenerateMipmapOES(I)V" />
+		<method name="glGetClipPlanefOES(ILjava/nio/FloatBuffer;)V" />
+		<method name="glGetClipPlanefOES(I[FI)V" />
+		<method name="glGetClipPlanexOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetClipPlanexOES(I[II)V" />
+		<method name="glGetFixedvOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetFixedvOES(I[II)V" />
+		<method name="glGetFramebufferAttachmentParameterivOES(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetFramebufferAttachmentParameterivOES(III[II)V" />
+		<method name="glGetLightxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetLightxvOES(II[II)V" />
+		<method name="glGetMaterialxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetMaterialxvOES(II[II)V" />
+		<method name="glGetRenderbufferParameterivOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetRenderbufferParameterivOES(II[II)V" />
+		<method name="glGetTexEnvxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexEnvxvOES(II[II)V" />
+		<method name="glGetTexGenfvOES(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetTexGenfvOES(II[FI)V" />
+		<method name="glGetTexGenivOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexGenivOES(II[II)V" />
+		<method name="glGetTexGenxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexGenxvOES(II[II)V" />
+		<method name="glGetTexParameterxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameterxvOES(II[II)V" />
+		<method name="glIsFramebufferOES(I)Z" />
+		<method name="glIsRenderbufferOES(I)Z" />
+		<method name="glLightModelxOES(II)V" />
+		<method name="glLightModelxvOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glLightModelxvOES(I[II)V" />
+		<method name="glLightxOES(III)V" />
+		<method name="glLightxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glLightxvOES(II[II)V" />
+		<method name="glLineWidthxOES(I)V" />
+		<method name="glLoadMatrixxOES(Ljava/nio/IntBuffer;)V" />
+		<method name="glLoadMatrixxOES([II)V" />
+		<method name="glLoadPaletteFromModelViewMatrixOES()V" />
+		<method name="glMaterialxOES(III)V" />
+		<method name="glMaterialxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glMaterialxvOES(II[II)V" />
+		<method name="glMatrixIndexPointerOES(IIILjava/nio/Buffer;)V" />
+		<method name="glMultMatrixxOES(Ljava/nio/IntBuffer;)V" />
+		<method name="glMultMatrixxOES([II)V" />
+		<method name="glMultiTexCoord4xOES(IIIII)V" />
+		<method name="glNormal3xOES(III)V" />
+		<method name="glOrthofOES(FFFFFF)V" />
+		<method name="glOrthoxOES(IIIIII)V" />
+		<method name="glPointParameterxOES(II)V" />
+		<method name="glPointParameterxvOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glPointParameterxvOES(I[II)V" />
+		<method name="glPointSizexOES(I)V" />
+		<method name="glPolygonOffsetxOES(II)V" />
+		<method name="glRenderbufferStorageOES(IIII)V" />
+		<method name="glRotatexOES(IIII)V" />
+		<method name="glSampleCoveragexOES(IZ)V" />
+		<method name="glScalexOES(III)V" />
+		<method name="glTexEnvxOES(III)V" />
+		<method name="glTexEnvxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexEnvxvOES(II[II)V" />
+		<method name="glTexGenfOES(IIF)V" />
+		<method name="glTexGenfvOES(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexGenfvOES(II[FI)V" />
+		<method name="glTexGeniOES(III)V" />
+		<method name="glTexGenivOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexGenivOES(II[II)V" />
+		<method name="glTexGenxOES(III)V" />
+		<method name="glTexGenxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexGenxvOES(II[II)V" />
+		<method name="glTexParameterxOES(III)V" />
+		<method name="glTexParameterxvOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameterxvOES(II[II)V" />
+		<method name="glTranslatexOES(III)V" />
+		<method name="glWeightPointerOES(IIILjava/nio/Buffer;)V" />
+		<field name="GL_3DC_XY_AMD" />
+		<field name="GL_3DC_X_AMD" />
+		<field name="GL_ATC_RGBA_EXPLICIT_ALPHA_AMD" />
+		<field name="GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD" />
+		<field name="GL_ATC_RGB_AMD" />
+		<field name="GL_BGRA" />
+		<field name="GL_BLEND_DST_ALPHA_OES" />
+		<field name="GL_BLEND_DST_RGB_OES" />
+		<field name="GL_BLEND_EQUATION_ALPHA_OES" />
+		<field name="GL_BLEND_EQUATION_OES" />
+		<field name="GL_BLEND_EQUATION_RGB_OES" />
+		<field name="GL_BLEND_SRC_ALPHA_OES" />
+		<field name="GL_BLEND_SRC_RGB_OES" />
+		<field name="GL_BUFFER_ACCESS_OES" />
+		<field name="GL_BUFFER_MAPPED_OES" />
+		<field name="GL_BUFFER_MAP_POINTER_OES" />
+		<field name="GL_COLOR_ATTACHMENT0_OES" />
+		<field name="GL_CURRENT_PALETTE_MATRIX_OES" />
+		<field name="GL_DECR_WRAP_OES" />
+		<field name="GL_DEPTH24_STENCIL8_OES" />
+		<field name="GL_DEPTH_ATTACHMENT_OES" />
+		<field name="GL_DEPTH_COMPONENT16_OES" />
+		<field name="GL_DEPTH_COMPONENT24_OES" />
+		<field name="GL_DEPTH_COMPONENT32_OES" />
+		<field name="GL_DEPTH_STENCIL_OES" />
+		<field name="GL_ETC1_RGB8_OES" />
+		<field name="GL_FIXED_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES" />
+		<field name="GL_FRAMEBUFFER_BINDING_OES" />
+		<field name="GL_FRAMEBUFFER_COMPLETE_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES" />
+		<field name="GL_FRAMEBUFFER_OES" />
+		<field name="GL_FRAMEBUFFER_UNSUPPORTED_OES" />
+		<field name="GL_FUNC_ADD_OES" />
+		<field name="GL_FUNC_REVERSE_SUBTRACT_OES" />
+		<field name="GL_FUNC_SUBTRACT_OES" />
+		<field name="GL_INCR_WRAP_OES" />
+		<field name="GL_INVALID_FRAMEBUFFER_OPERATION_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_POINTER_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_SIZE_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_STRIDE_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_TYPE_OES" />
+		<field name="GL_MATRIX_PALETTE_OES" />
+		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES" />
+		<field name="GL_MAX_PALETTE_MATRICES_OES" />
+		<field name="GL_MAX_RENDERBUFFER_SIZE_OES" />
+		<field name="GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT" />
+		<field name="GL_MAX_VERTEX_UNITS_OES" />
+		<field name="GL_MIRRORED_REPEAT_OES" />
+		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_NONE_OES" />
+		<field name="GL_NORMAL_MAP_OES" />
+		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_REFLECTION_MAP_OES" />
+		<field name="GL_RENDERBUFFER_ALPHA_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_BINDING_OES" />
+		<field name="GL_RENDERBUFFER_BLUE_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_DEPTH_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_GREEN_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_HEIGHT_OES" />
+		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES" />
+		<field name="GL_RENDERBUFFER_OES" />
+		<field name="GL_RENDERBUFFER_RED_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_STENCIL_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_WIDTH_OES" />
+		<field name="GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES" since="15" />
+		<field name="GL_RGB565_OES" />
+		<field name="GL_RGB5_A1_OES" />
+		<field name="GL_RGB8_OES" />
+		<field name="GL_RGBA4_OES" />
+		<field name="GL_RGBA8_OES" />
+		<field name="GL_SAMPLER_EXTERNAL_OES" since="15" />
+		<field name="GL_STENCIL_ATTACHMENT_OES" />
+		<field name="GL_STENCIL_INDEX1_OES" />
+		<field name="GL_STENCIL_INDEX4_OES" />
+		<field name="GL_STENCIL_INDEX8_OES" />
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP_OES" />
+		<field name="GL_TEXTURE_BINDING_EXTERNAL_OES" since="15" />
+		<field name="GL_TEXTURE_CROP_RECT_OES" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES" />
+		<field name="GL_TEXTURE_CUBE_MAP_OES" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES" />
+		<field name="GL_TEXTURE_EXTERNAL_OES" since="15" />
+		<field name="GL_TEXTURE_GEN_MODE_OES" />
+		<field name="GL_TEXTURE_GEN_STR_OES" />
+		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_TEXTURE_MAX_ANISOTROPY_EXT" />
+		<field name="GL_UNSIGNED_INT_24_8_OES" />
+		<field name="GL_WEIGHT_ARRAY_BUFFER_BINDING_OES" />
+		<field name="GL_WEIGHT_ARRAY_OES" />
+		<field name="GL_WEIGHT_ARRAY_POINTER_OES" />
+		<field name="GL_WEIGHT_ARRAY_SIZE_OES" />
+		<field name="GL_WEIGHT_ARRAY_STRIDE_OES" />
+		<field name="GL_WEIGHT_ARRAY_TYPE_OES" />
+		<field name="GL_WRITE_ONLY_OES" />
+	</class>
+	<class name="android/opengl/GLES20" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="glActiveTexture(I)V" />
+		<method name="glAttachShader(II)V" />
+		<method name="glBindAttribLocation(IILjava/lang/String;)V" />
+		<method name="glBindBuffer(II)V" />
+		<method name="glBindFramebuffer(II)V" />
+		<method name="glBindRenderbuffer(II)V" />
+		<method name="glBindTexture(II)V" />
+		<method name="glBlendColor(FFFF)V" />
+		<method name="glBlendEquation(I)V" />
+		<method name="glBlendEquationSeparate(II)V" />
+		<method name="glBlendFunc(II)V" />
+		<method name="glBlendFuncSeparate(IIII)V" />
+		<method name="glBufferData(IILjava/nio/Buffer;I)V" />
+		<method name="glBufferSubData(IIILjava/nio/Buffer;)V" />
+		<method name="glCheckFramebufferStatus(I)I" />
+		<method name="glClear(I)V" />
+		<method name="glClearColor(FFFF)V" />
+		<method name="glClearDepthf(F)V" />
+		<method name="glClearStencil(I)V" />
+		<method name="glColorMask(ZZZZ)V" />
+		<method name="glCompileShader(I)V" />
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCopyTexImage2D(IIIIIIII)V" />
+		<method name="glCopyTexSubImage2D(IIIIIIII)V" />
+		<method name="glCreateProgram()I" />
+		<method name="glCreateShader(I)I" />
+		<method name="glCullFace(I)V" />
+		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteBuffers(I[II)V" />
+		<method name="glDeleteFramebuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteFramebuffers(I[II)V" />
+		<method name="glDeleteProgram(I)V" />
+		<method name="glDeleteRenderbuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteRenderbuffers(I[II)V" />
+		<method name="glDeleteShader(I)V" />
+		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteTextures(I[II)V" />
+		<method name="glDepthFunc(I)V" />
+		<method name="glDepthMask(Z)V" />
+		<method name="glDepthRangef(FF)V" />
+		<method name="glDetachShader(II)V" />
+		<method name="glDisable(I)V" />
+		<method name="glDisableVertexAttribArray(I)V" />
+		<method name="glDrawArrays(III)V" />
+		<method name="glDrawElements(IIII)V" since="9" />
+		<method name="glDrawElements(IIILjava/nio/Buffer;)V" />
+		<method name="glEnable(I)V" />
+		<method name="glEnableVertexAttribArray(I)V" />
+		<method name="glFinish()V" />
+		<method name="glFlush()V" />
+		<method name="glFramebufferRenderbuffer(IIII)V" />
+		<method name="glFramebufferTexture2D(IIIII)V" />
+		<method name="glFrontFace(I)V" />
+		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenBuffers(I[II)V" />
+		<method name="glGenFramebuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenFramebuffers(I[II)V" />
+		<method name="glGenRenderbuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenRenderbuffers(I[II)V" />
+		<method name="glGenTextures(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenTextures(I[II)V" />
+		<method name="glGenerateMipmap(I)V" />
+		<method name="glGetActiveAttrib(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" removed="21" />
+		<method name="glGetActiveAttrib(III[II[II[II[BI)V" />
+		<method name="glGetActiveAttrib(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;" since="17" />
+		<method name="glGetActiveAttrib(II[II[II)Ljava/lang/String;" since="17" />
+		<method name="glGetActiveUniform(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" removed="21" />
+		<method name="glGetActiveUniform(III[II[II[II[BI)V" />
+		<method name="glGetActiveUniform(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;" since="17" />
+		<method name="glGetActiveUniform(II[II[II)Ljava/lang/String;" since="17" />
+		<method name="glGetAttachedShaders(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V" />
+		<method name="glGetAttachedShaders(II[II[II)V" />
+		<method name="glGetAttribLocation(ILjava/lang/String;)I" />
+		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetBooleanv(I[ZI)V" />
+		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetBufferParameteriv(II[II)V" />
+		<method name="glGetError()I" />
+		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glGetFloatv(I[FI)V" />
+		<method name="glGetFramebufferAttachmentParameteriv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetFramebufferAttachmentParameteriv(III[II)V" />
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetIntegerv(I[II)V" />
+		<method name="glGetProgramInfoLog(I)Ljava/lang/String;" />
+		<method name="glGetProgramiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetProgramiv(II[II)V" />
+		<method name="glGetRenderbufferParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetRenderbufferParameteriv(II[II)V" />
+		<method name="glGetShaderInfoLog(I)Ljava/lang/String;" />
+		<method name="glGetShaderPrecisionFormat(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V" />
+		<method name="glGetShaderPrecisionFormat(II[II[II)V" />
+		<method name="glGetShaderSource(I)Ljava/lang/String;" since="17" />
+		<method name="glGetShaderSource(IILjava/nio/IntBuffer;B)V" removed="21" />
+		<method name="glGetShaderSource(II[II[BI)V" />
+		<method name="glGetShaderiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetShaderiv(II[II)V" />
+		<method name="glGetString(I)Ljava/lang/String;" />
+		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetTexParameterfv(II[FI)V" />
+		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameteriv(II[II)V" />
+		<method name="glGetUniformLocation(ILjava/lang/String;)I" />
+		<method name="glGetUniformfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetUniformfv(II[FI)V" />
+		<method name="glGetUniformiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetUniformiv(II[II)V" />
+		<method name="glGetVertexAttribfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetVertexAttribfv(II[FI)V" />
+		<method name="glGetVertexAttribiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetVertexAttribiv(II[II)V" />
+		<method name="glHint(II)V" />
+		<method name="glIsBuffer(I)Z" />
+		<method name="glIsEnabled(I)Z" />
+		<method name="glIsFramebuffer(I)Z" />
+		<method name="glIsProgram(I)Z" />
+		<method name="glIsRenderbuffer(I)Z" />
+		<method name="glIsShader(I)Z" />
+		<method name="glIsTexture(I)Z" />
+		<method name="glLineWidth(F)V" />
+		<method name="glLinkProgram(I)V" />
+		<method name="glPixelStorei(II)V" />
+		<method name="glPolygonOffset(FF)V" />
+		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V" />
+		<method name="glReleaseShaderCompiler()V" />
+		<method name="glRenderbufferStorage(IIII)V" />
+		<method name="glSampleCoverage(FZ)V" />
+		<method name="glScissor(IIII)V" />
+		<method name="glShaderBinary(ILjava/nio/IntBuffer;ILjava/nio/Buffer;I)V" />
+		<method name="glShaderBinary(I[IIILjava/nio/Buffer;I)V" />
+		<method name="glShaderSource(ILjava/lang/String;)V" />
+		<method name="glStencilFunc(III)V" />
+		<method name="glStencilFuncSeparate(IIII)V" />
+		<method name="glStencilMask(I)V" />
+		<method name="glStencilMaskSeparate(II)V" />
+		<method name="glStencilOp(III)V" />
+		<method name="glStencilOpSeparate(IIII)V" />
+		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glTexParameterf(IIF)V" />
+		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexParameterfv(II[FI)V" />
+		<method name="glTexParameteri(III)V" />
+		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameteriv(II[II)V" />
+		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glUniform1f(IF)V" />
+		<method name="glUniform1fv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glUniform1fv(II[FI)V" />
+		<method name="glUniform1i(II)V" />
+		<method name="glUniform1iv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform1iv(II[II)V" />
+		<method name="glUniform2f(IFF)V" />
+		<method name="glUniform2fv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glUniform2fv(II[FI)V" />
+		<method name="glUniform2i(III)V" />
+		<method name="glUniform2iv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform2iv(II[II)V" />
+		<method name="glUniform3f(IFFF)V" />
+		<method name="glUniform3fv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glUniform3fv(II[FI)V" />
+		<method name="glUniform3i(IIII)V" />
+		<method name="glUniform3iv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform3iv(II[II)V" />
+		<method name="glUniform4f(IFFFF)V" />
+		<method name="glUniform4fv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glUniform4fv(II[FI)V" />
+		<method name="glUniform4i(IIIII)V" />
+		<method name="glUniform4iv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform4iv(II[II)V" />
+		<method name="glUniformMatrix2fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix2fv(IIZ[FI)V" />
+		<method name="glUniformMatrix3fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix3fv(IIZ[FI)V" />
+		<method name="glUniformMatrix4fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix4fv(IIZ[FI)V" />
+		<method name="glUseProgram(I)V" />
+		<method name="glValidateProgram(I)V" />
+		<method name="glVertexAttrib1f(IF)V" />
+		<method name="glVertexAttrib1fv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glVertexAttrib1fv(I[FI)V" />
+		<method name="glVertexAttrib2f(IFF)V" />
+		<method name="glVertexAttrib2fv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glVertexAttrib2fv(I[FI)V" />
+		<method name="glVertexAttrib3f(IFFF)V" />
+		<method name="glVertexAttrib3fv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glVertexAttrib3fv(I[FI)V" />
+		<method name="glVertexAttrib4f(IFFFF)V" />
+		<method name="glVertexAttrib4fv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glVertexAttrib4fv(I[FI)V" />
+		<method name="glVertexAttribPointer(IIIZII)V" since="9" />
+		<method name="glVertexAttribPointer(IIIZILjava/nio/Buffer;)V" />
+		<method name="glViewport(IIII)V" />
+		<field name="GL_ACTIVE_ATTRIBUTES" />
+		<field name="GL_ACTIVE_ATTRIBUTE_MAX_LENGTH" />
+		<field name="GL_ACTIVE_TEXTURE" />
+		<field name="GL_ACTIVE_UNIFORMS" />
+		<field name="GL_ACTIVE_UNIFORM_MAX_LENGTH" />
+		<field name="GL_ALIASED_LINE_WIDTH_RANGE" />
+		<field name="GL_ALIASED_POINT_SIZE_RANGE" />
+		<field name="GL_ALPHA" />
+		<field name="GL_ALPHA_BITS" />
+		<field name="GL_ALWAYS" />
+		<field name="GL_ARRAY_BUFFER" />
+		<field name="GL_ARRAY_BUFFER_BINDING" />
+		<field name="GL_ATTACHED_SHADERS" />
+		<field name="GL_BACK" />
+		<field name="GL_BLEND" />
+		<field name="GL_BLEND_COLOR" />
+		<field name="GL_BLEND_DST_ALPHA" />
+		<field name="GL_BLEND_DST_RGB" />
+		<field name="GL_BLEND_EQUATION" />
+		<field name="GL_BLEND_EQUATION_ALPHA" />
+		<field name="GL_BLEND_EQUATION_RGB" />
+		<field name="GL_BLEND_SRC_ALPHA" />
+		<field name="GL_BLEND_SRC_RGB" />
+		<field name="GL_BLUE_BITS" />
+		<field name="GL_BOOL" />
+		<field name="GL_BOOL_VEC2" />
+		<field name="GL_BOOL_VEC3" />
+		<field name="GL_BOOL_VEC4" />
+		<field name="GL_BUFFER_SIZE" />
+		<field name="GL_BUFFER_USAGE" />
+		<field name="GL_BYTE" />
+		<field name="GL_CCW" />
+		<field name="GL_CLAMP_TO_EDGE" />
+		<field name="GL_COLOR_ATTACHMENT0" />
+		<field name="GL_COLOR_BUFFER_BIT" />
+		<field name="GL_COLOR_CLEAR_VALUE" />
+		<field name="GL_COLOR_WRITEMASK" />
+		<field name="GL_COMPILE_STATUS" />
+		<field name="GL_COMPRESSED_TEXTURE_FORMATS" />
+		<field name="GL_CONSTANT_ALPHA" />
+		<field name="GL_CONSTANT_COLOR" />
+		<field name="GL_CULL_FACE" />
+		<field name="GL_CULL_FACE_MODE" />
+		<field name="GL_CURRENT_PROGRAM" />
+		<field name="GL_CURRENT_VERTEX_ATTRIB" />
+		<field name="GL_CW" />
+		<field name="GL_DECR" />
+		<field name="GL_DECR_WRAP" />
+		<field name="GL_DELETE_STATUS" />
+		<field name="GL_DEPTH_ATTACHMENT" />
+		<field name="GL_DEPTH_BITS" />
+		<field name="GL_DEPTH_BUFFER_BIT" />
+		<field name="GL_DEPTH_CLEAR_VALUE" />
+		<field name="GL_DEPTH_COMPONENT" />
+		<field name="GL_DEPTH_COMPONENT16" />
+		<field name="GL_DEPTH_FUNC" />
+		<field name="GL_DEPTH_RANGE" />
+		<field name="GL_DEPTH_TEST" />
+		<field name="GL_DEPTH_WRITEMASK" />
+		<field name="GL_DITHER" />
+		<field name="GL_DONT_CARE" />
+		<field name="GL_DST_ALPHA" />
+		<field name="GL_DST_COLOR" />
+		<field name="GL_DYNAMIC_DRAW" />
+		<field name="GL_ELEMENT_ARRAY_BUFFER" />
+		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING" />
+		<field name="GL_EQUAL" />
+		<field name="GL_EXTENSIONS" />
+		<field name="GL_FALSE" />
+		<field name="GL_FASTEST" />
+		<field name="GL_FIXED" />
+		<field name="GL_FLOAT" />
+		<field name="GL_FLOAT_MAT2" />
+		<field name="GL_FLOAT_MAT3" />
+		<field name="GL_FLOAT_MAT4" />
+		<field name="GL_FLOAT_VEC2" />
+		<field name="GL_FLOAT_VEC3" />
+		<field name="GL_FLOAT_VEC4" />
+		<field name="GL_FRAGMENT_SHADER" />
+		<field name="GL_FRAMEBUFFER" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL" />
+		<field name="GL_FRAMEBUFFER_BINDING" />
+		<field name="GL_FRAMEBUFFER_COMPLETE" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT" />
+		<field name="GL_FRAMEBUFFER_UNSUPPORTED" />
+		<field name="GL_FRONT" />
+		<field name="GL_FRONT_AND_BACK" />
+		<field name="GL_FRONT_FACE" />
+		<field name="GL_FUNC_ADD" />
+		<field name="GL_FUNC_REVERSE_SUBTRACT" />
+		<field name="GL_FUNC_SUBTRACT" />
+		<field name="GL_GENERATE_MIPMAP_HINT" />
+		<field name="GL_GEQUAL" />
+		<field name="GL_GREATER" />
+		<field name="GL_GREEN_BITS" />
+		<field name="GL_HIGH_FLOAT" />
+		<field name="GL_HIGH_INT" />
+		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT" />
+		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE" />
+		<field name="GL_INCR" />
+		<field name="GL_INCR_WRAP" />
+		<field name="GL_INFO_LOG_LENGTH" />
+		<field name="GL_INT" />
+		<field name="GL_INT_VEC2" />
+		<field name="GL_INT_VEC3" />
+		<field name="GL_INT_VEC4" />
+		<field name="GL_INVALID_ENUM" />
+		<field name="GL_INVALID_FRAMEBUFFER_OPERATION" />
+		<field name="GL_INVALID_OPERATION" />
+		<field name="GL_INVALID_VALUE" />
+		<field name="GL_INVERT" />
+		<field name="GL_KEEP" />
+		<field name="GL_LEQUAL" />
+		<field name="GL_LESS" />
+		<field name="GL_LINEAR" />
+		<field name="GL_LINEAR_MIPMAP_LINEAR" />
+		<field name="GL_LINEAR_MIPMAP_NEAREST" />
+		<field name="GL_LINES" />
+		<field name="GL_LINE_LOOP" />
+		<field name="GL_LINE_STRIP" />
+		<field name="GL_LINE_WIDTH" />
+		<field name="GL_LINK_STATUS" />
+		<field name="GL_LOW_FLOAT" />
+		<field name="GL_LOW_INT" />
+		<field name="GL_LUMINANCE" />
+		<field name="GL_LUMINANCE_ALPHA" />
+		<field name="GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS" />
+		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE" />
+		<field name="GL_MAX_FRAGMENT_UNIFORM_VECTORS" />
+		<field name="GL_MAX_RENDERBUFFER_SIZE" />
+		<field name="GL_MAX_TEXTURE_IMAGE_UNITS" />
+		<field name="GL_MAX_TEXTURE_SIZE" />
+		<field name="GL_MAX_VARYING_VECTORS" />
+		<field name="GL_MAX_VERTEX_ATTRIBS" />
+		<field name="GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS" />
+		<field name="GL_MAX_VERTEX_UNIFORM_VECTORS" />
+		<field name="GL_MAX_VIEWPORT_DIMS" />
+		<field name="GL_MEDIUM_FLOAT" />
+		<field name="GL_MEDIUM_INT" />
+		<field name="GL_MIRRORED_REPEAT" />
+		<field name="GL_NEAREST" />
+		<field name="GL_NEAREST_MIPMAP_LINEAR" />
+		<field name="GL_NEAREST_MIPMAP_NEAREST" />
+		<field name="GL_NEVER" />
+		<field name="GL_NICEST" />
+		<field name="GL_NONE" />
+		<field name="GL_NOTEQUAL" />
+		<field name="GL_NO_ERROR" />
+		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS" />
+		<field name="GL_NUM_SHADER_BINARY_FORMATS" />
+		<field name="GL_ONE" />
+		<field name="GL_ONE_MINUS_CONSTANT_ALPHA" />
+		<field name="GL_ONE_MINUS_CONSTANT_COLOR" />
+		<field name="GL_ONE_MINUS_DST_ALPHA" />
+		<field name="GL_ONE_MINUS_DST_COLOR" />
+		<field name="GL_ONE_MINUS_SRC_ALPHA" />
+		<field name="GL_ONE_MINUS_SRC_COLOR" />
+		<field name="GL_OUT_OF_MEMORY" />
+		<field name="GL_PACK_ALIGNMENT" />
+		<field name="GL_POINTS" />
+		<field name="GL_POLYGON_OFFSET_FACTOR" />
+		<field name="GL_POLYGON_OFFSET_FILL" />
+		<field name="GL_POLYGON_OFFSET_UNITS" />
+		<field name="GL_RED_BITS" />
+		<field name="GL_RENDERBUFFER" />
+		<field name="GL_RENDERBUFFER_ALPHA_SIZE" />
+		<field name="GL_RENDERBUFFER_BINDING" />
+		<field name="GL_RENDERBUFFER_BLUE_SIZE" />
+		<field name="GL_RENDERBUFFER_DEPTH_SIZE" />
+		<field name="GL_RENDERBUFFER_GREEN_SIZE" />
+		<field name="GL_RENDERBUFFER_HEIGHT" />
+		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT" />
+		<field name="GL_RENDERBUFFER_RED_SIZE" />
+		<field name="GL_RENDERBUFFER_STENCIL_SIZE" />
+		<field name="GL_RENDERBUFFER_WIDTH" />
+		<field name="GL_RENDERER" />
+		<field name="GL_REPEAT" />
+		<field name="GL_REPLACE" />
+		<field name="GL_RGB" />
+		<field name="GL_RGB565" />
+		<field name="GL_RGB5_A1" />
+		<field name="GL_RGBA" />
+		<field name="GL_RGBA4" />
+		<field name="GL_SAMPLER_2D" />
+		<field name="GL_SAMPLER_CUBE" />
+		<field name="GL_SAMPLES" />
+		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE" />
+		<field name="GL_SAMPLE_BUFFERS" />
+		<field name="GL_SAMPLE_COVERAGE" />
+		<field name="GL_SAMPLE_COVERAGE_INVERT" />
+		<field name="GL_SAMPLE_COVERAGE_VALUE" />
+		<field name="GL_SCISSOR_BOX" />
+		<field name="GL_SCISSOR_TEST" />
+		<field name="GL_SHADER_BINARY_FORMATS" />
+		<field name="GL_SHADER_COMPILER" />
+		<field name="GL_SHADER_SOURCE_LENGTH" />
+		<field name="GL_SHADER_TYPE" />
+		<field name="GL_SHADING_LANGUAGE_VERSION" />
+		<field name="GL_SHORT" />
+		<field name="GL_SRC_ALPHA" />
+		<field name="GL_SRC_ALPHA_SATURATE" />
+		<field name="GL_SRC_COLOR" />
+		<field name="GL_STATIC_DRAW" />
+		<field name="GL_STENCIL_ATTACHMENT" />
+		<field name="GL_STENCIL_BACK_FAIL" />
+		<field name="GL_STENCIL_BACK_FUNC" />
+		<field name="GL_STENCIL_BACK_PASS_DEPTH_FAIL" />
+		<field name="GL_STENCIL_BACK_PASS_DEPTH_PASS" />
+		<field name="GL_STENCIL_BACK_REF" />
+		<field name="GL_STENCIL_BACK_VALUE_MASK" />
+		<field name="GL_STENCIL_BACK_WRITEMASK" />
+		<field name="GL_STENCIL_BITS" />
+		<field name="GL_STENCIL_BUFFER_BIT" />
+		<field name="GL_STENCIL_CLEAR_VALUE" />
+		<field name="GL_STENCIL_FAIL" />
+		<field name="GL_STENCIL_FUNC" />
+		<field name="GL_STENCIL_INDEX" deprecated="18" />
+		<field name="GL_STENCIL_INDEX8" />
+		<field name="GL_STENCIL_PASS_DEPTH_FAIL" />
+		<field name="GL_STENCIL_PASS_DEPTH_PASS" />
+		<field name="GL_STENCIL_REF" />
+		<field name="GL_STENCIL_TEST" />
+		<field name="GL_STENCIL_VALUE_MASK" />
+		<field name="GL_STENCIL_WRITEMASK" />
+		<field name="GL_STREAM_DRAW" />
+		<field name="GL_SUBPIXEL_BITS" />
+		<field name="GL_TEXTURE" />
+		<field name="GL_TEXTURE0" />
+		<field name="GL_TEXTURE1" />
+		<field name="GL_TEXTURE10" />
+		<field name="GL_TEXTURE11" />
+		<field name="GL_TEXTURE12" />
+		<field name="GL_TEXTURE13" />
+		<field name="GL_TEXTURE14" />
+		<field name="GL_TEXTURE15" />
+		<field name="GL_TEXTURE16" />
+		<field name="GL_TEXTURE17" />
+		<field name="GL_TEXTURE18" />
+		<field name="GL_TEXTURE19" />
+		<field name="GL_TEXTURE2" />
+		<field name="GL_TEXTURE20" />
+		<field name="GL_TEXTURE21" />
+		<field name="GL_TEXTURE22" />
+		<field name="GL_TEXTURE23" />
+		<field name="GL_TEXTURE24" />
+		<field name="GL_TEXTURE25" />
+		<field name="GL_TEXTURE26" />
+		<field name="GL_TEXTURE27" />
+		<field name="GL_TEXTURE28" />
+		<field name="GL_TEXTURE29" />
+		<field name="GL_TEXTURE3" />
+		<field name="GL_TEXTURE30" />
+		<field name="GL_TEXTURE31" />
+		<field name="GL_TEXTURE4" />
+		<field name="GL_TEXTURE5" />
+		<field name="GL_TEXTURE6" />
+		<field name="GL_TEXTURE7" />
+		<field name="GL_TEXTURE8" />
+		<field name="GL_TEXTURE9" />
+		<field name="GL_TEXTURE_2D" />
+		<field name="GL_TEXTURE_BINDING_2D" />
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP" />
+		<field name="GL_TEXTURE_CUBE_MAP" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z" />
+		<field name="GL_TEXTURE_MAG_FILTER" />
+		<field name="GL_TEXTURE_MIN_FILTER" />
+		<field name="GL_TEXTURE_WRAP_S" />
+		<field name="GL_TEXTURE_WRAP_T" />
+		<field name="GL_TRIANGLES" />
+		<field name="GL_TRIANGLE_FAN" />
+		<field name="GL_TRIANGLE_STRIP" />
+		<field name="GL_TRUE" />
+		<field name="GL_UNPACK_ALIGNMENT" />
+		<field name="GL_UNSIGNED_BYTE" />
+		<field name="GL_UNSIGNED_INT" />
+		<field name="GL_UNSIGNED_SHORT" />
+		<field name="GL_UNSIGNED_SHORT_4_4_4_4" />
+		<field name="GL_UNSIGNED_SHORT_5_5_5_1" />
+		<field name="GL_UNSIGNED_SHORT_5_6_5" />
+		<field name="GL_VALIDATE_STATUS" />
+		<field name="GL_VENDOR" />
+		<field name="GL_VERSION" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_ENABLED" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_NORMALIZED" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_POINTER" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_SIZE" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_STRIDE" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_TYPE" />
+		<field name="GL_VERTEX_SHADER" />
+		<field name="GL_VIEWPORT" />
+		<field name="GL_ZERO" />
+	</class>
+	<class name="android/opengl/GLES30" since="18">
+		<extends name="android/opengl/GLES20" />
+		<method name="&lt;init&gt;()V" />
+		<method name="glBeginQuery(II)V" />
+		<method name="glBeginTransformFeedback(I)V" />
+		<method name="glBindBufferBase(III)V" />
+		<method name="glBindBufferRange(IIIII)V" />
+		<method name="glBindSampler(II)V" />
+		<method name="glBindTransformFeedback(II)V" />
+		<method name="glBindVertexArray(I)V" />
+		<method name="glBlitFramebuffer(IIIIIIIIII)V" />
+		<method name="glClearBufferfi(IIFI)V" />
+		<method name="glClearBufferfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glClearBufferfv(II[FI)V" />
+		<method name="glClearBufferiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glClearBufferiv(II[II)V" />
+		<method name="glClearBufferuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glClearBufferuiv(II[II)V" />
+		<method name="glClientWaitSync(JIJ)I" />
+		<method name="glCompressedTexImage3D(IIIIIIIII)V" />
+		<method name="glCompressedTexImage3D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCompressedTexSubImage3D(IIIIIIIIIII)V" />
+		<method name="glCompressedTexSubImage3D(IIIIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCopyBufferSubData(IIIII)V" />
+		<method name="glCopyTexSubImage3D(IIIIIIIII)V" />
+		<method name="glDeleteQueries(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteQueries(I[II)V" />
+		<method name="glDeleteSamplers(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteSamplers(I[II)V" />
+		<method name="glDeleteSync(J)V" />
+		<method name="glDeleteTransformFeedbacks(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteTransformFeedbacks(I[II)V" />
+		<method name="glDeleteVertexArrays(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteVertexArrays(I[II)V" />
+		<method name="glDrawArraysInstanced(IIII)V" />
+		<method name="glDrawBuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glDrawBuffers(I[II)V" />
+		<method name="glDrawElementsInstanced(IIIII)V" />
+		<method name="glDrawElementsInstanced(IIILjava/nio/Buffer;I)V" />
+		<method name="glDrawRangeElements(IIIIII)V" />
+		<method name="glDrawRangeElements(IIIIILjava/nio/Buffer;)V" />
+		<method name="glEndQuery(I)V" />
+		<method name="glEndTransformFeedback()V" />
+		<method name="glFenceSync(II)J" />
+		<method name="glFlushMappedBufferRange(III)V" />
+		<method name="glFramebufferTextureLayer(IIIII)V" />
+		<method name="glGenQueries(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenQueries(I[II)V" />
+		<method name="glGenSamplers(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenSamplers(I[II)V" />
+		<method name="glGenTransformFeedbacks(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenTransformFeedbacks(I[II)V" />
+		<method name="glGenVertexArrays(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenVertexArrays(I[II)V" />
+		<method name="glGetActiveUniformBlockName(II)Ljava/lang/String;" />
+		<method name="glGetActiveUniformBlockName(III[II[BI)V" />
+		<method name="glGetActiveUniformBlockName(IILjava/nio/Buffer;Ljava/nio/Buffer;)V" />
+		<method name="glGetActiveUniformBlockiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetActiveUniformBlockiv(III[II)V" />
+		<method name="glGetActiveUniformsiv(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V" />
+		<method name="glGetActiveUniformsiv(II[III[II)V" />
+		<method name="glGetBufferParameteri64v(IILjava/nio/LongBuffer;)V" />
+		<method name="glGetBufferParameteri64v(II[JI)V" />
+		<method name="glGetBufferPointerv(II)Ljava/nio/Buffer;" />
+		<method name="glGetFragDataLocation(ILjava/lang/String;)I" />
+		<method name="glGetInteger64i_v(IILjava/nio/LongBuffer;)V" />
+		<method name="glGetInteger64i_v(II[JI)V" />
+		<method name="glGetInteger64v(ILjava/nio/LongBuffer;)V" />
+		<method name="glGetInteger64v(I[JI)V" />
+		<method name="glGetIntegeri_v(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetIntegeri_v(II[II)V" />
+		<method name="glGetInternalformativ(IIIILjava/nio/IntBuffer;)V" />
+		<method name="glGetInternalformativ(IIII[II)V" />
+		<method name="glGetProgramBinary(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;)V" />
+		<method name="glGetProgramBinary(II[II[IILjava/nio/Buffer;)V" />
+		<method name="glGetQueryObjectuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetQueryObjectuiv(II[II)V" />
+		<method name="glGetQueryiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetQueryiv(II[II)V" />
+		<method name="glGetSamplerParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetSamplerParameterfv(II[FI)V" />
+		<method name="glGetSamplerParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetSamplerParameteriv(II[II)V" />
+		<method name="glGetStringi(II)Ljava/lang/String;" />
+		<method name="glGetSynciv(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V" />
+		<method name="glGetSynciv(JII[II[II)V" />
+		<method name="glGetTransformFeedbackVarying(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" deprecated="24" />
+		<method name="glGetTransformFeedbackVarying(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)V" since="24" />
+		<method name="glGetTransformFeedbackVarying(III[II[II[II[BI)V" />
+		<method name="glGetTransformFeedbackVarying(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;" />
+		<method name="glGetTransformFeedbackVarying(II[II[II)Ljava/lang/String;" />
+		<method name="glGetUniformBlockIndex(ILjava/lang/String;)I" />
+		<method name="glGetUniformIndices(I[Ljava/lang/String;Ljava/nio/IntBuffer;)V" />
+		<method name="glGetUniformIndices(I[Ljava/lang/String;[II)V" />
+		<method name="glGetUniformuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetUniformuiv(II[II)V" />
+		<method name="glGetVertexAttribIiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetVertexAttribIiv(II[II)V" />
+		<method name="glGetVertexAttribIuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetVertexAttribIuiv(II[II)V" />
+		<method name="glInvalidateFramebuffer(IILjava/nio/IntBuffer;)V" />
+		<method name="glInvalidateFramebuffer(II[II)V" />
+		<method name="glInvalidateSubFramebuffer(IILjava/nio/IntBuffer;IIII)V" />
+		<method name="glInvalidateSubFramebuffer(II[IIIIII)V" />
+		<method name="glIsQuery(I)Z" />
+		<method name="glIsSampler(I)Z" />
+		<method name="glIsSync(J)Z" />
+		<method name="glIsTransformFeedback(I)Z" />
+		<method name="glIsVertexArray(I)Z" />
+		<method name="glMapBufferRange(IIII)Ljava/nio/Buffer;" />
+		<method name="glPauseTransformFeedback()V" />
+		<method name="glProgramBinary(IILjava/nio/Buffer;I)V" />
+		<method name="glProgramParameteri(III)V" />
+		<method name="glReadBuffer(I)V" />
+		<method name="glReadPixels(IIIIIII)V" since="24" />
+		<method name="glRenderbufferStorageMultisample(IIIII)V" />
+		<method name="glResumeTransformFeedback()V" />
+		<method name="glSamplerParameterf(IIF)V" />
+		<method name="glSamplerParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glSamplerParameterfv(II[FI)V" />
+		<method name="glSamplerParameteri(III)V" />
+		<method name="glSamplerParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glSamplerParameteriv(II[II)V" />
+		<method name="glTexImage3D(IIIIIIIIII)V" />
+		<method name="glTexImage3D(IIIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glTexStorage2D(IIIII)V" />
+		<method name="glTexStorage3D(IIIIII)V" />
+		<method name="glTexSubImage3D(IIIIIIIIIII)V" />
+		<method name="glTexSubImage3D(IIIIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glTransformFeedbackVaryings(I[Ljava/lang/String;I)V" />
+		<method name="glUniform1ui(II)V" />
+		<method name="glUniform1uiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform1uiv(II[II)V" />
+		<method name="glUniform2ui(III)V" />
+		<method name="glUniform2uiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform2uiv(II[II)V" />
+		<method name="glUniform3ui(IIII)V" />
+		<method name="glUniform3uiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform3uiv(II[II)V" />
+		<method name="glUniform4ui(IIIII)V" />
+		<method name="glUniform4uiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glUniform4uiv(II[II)V" />
+		<method name="glUniformBlockBinding(III)V" />
+		<method name="glUniformMatrix2x3fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix2x3fv(IIZ[FI)V" />
+		<method name="glUniformMatrix2x4fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix2x4fv(IIZ[FI)V" />
+		<method name="glUniformMatrix3x2fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix3x2fv(IIZ[FI)V" />
+		<method name="glUniformMatrix3x4fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix3x4fv(IIZ[FI)V" />
+		<method name="glUniformMatrix4x2fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix4x2fv(IIZ[FI)V" />
+		<method name="glUniformMatrix4x3fv(IIZLjava/nio/FloatBuffer;)V" />
+		<method name="glUniformMatrix4x3fv(IIZ[FI)V" />
+		<method name="glUnmapBuffer(I)Z" />
+		<method name="glVertexAttribDivisor(II)V" />
+		<method name="glVertexAttribI4i(IIIII)V" />
+		<method name="glVertexAttribI4iv(ILjava/nio/IntBuffer;)V" />
+		<method name="glVertexAttribI4iv(I[II)V" />
+		<method name="glVertexAttribI4ui(IIIII)V" />
+		<method name="glVertexAttribI4uiv(ILjava/nio/IntBuffer;)V" />
+		<method name="glVertexAttribI4uiv(I[II)V" />
+		<method name="glVertexAttribIPointer(IIIII)V" />
+		<method name="glVertexAttribIPointer(IIIILjava/nio/Buffer;)V" />
+		<method name="glWaitSync(JIJ)V" />
+		<field name="GL_ACTIVE_UNIFORM_BLOCKS" />
+		<field name="GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH" />
+		<field name="GL_ALREADY_SIGNALED" />
+		<field name="GL_ANY_SAMPLES_PASSED" />
+		<field name="GL_ANY_SAMPLES_PASSED_CONSERVATIVE" />
+		<field name="GL_BLUE" />
+		<field name="GL_BUFFER_ACCESS_FLAGS" />
+		<field name="GL_BUFFER_MAPPED" />
+		<field name="GL_BUFFER_MAP_LENGTH" />
+		<field name="GL_BUFFER_MAP_OFFSET" />
+		<field name="GL_BUFFER_MAP_POINTER" />
+		<field name="GL_COLOR" />
+		<field name="GL_COLOR_ATTACHMENT1" />
+		<field name="GL_COLOR_ATTACHMENT10" />
+		<field name="GL_COLOR_ATTACHMENT11" />
+		<field name="GL_COLOR_ATTACHMENT12" />
+		<field name="GL_COLOR_ATTACHMENT13" />
+		<field name="GL_COLOR_ATTACHMENT14" />
+		<field name="GL_COLOR_ATTACHMENT15" />
+		<field name="GL_COLOR_ATTACHMENT2" />
+		<field name="GL_COLOR_ATTACHMENT3" />
+		<field name="GL_COLOR_ATTACHMENT4" />
+		<field name="GL_COLOR_ATTACHMENT5" />
+		<field name="GL_COLOR_ATTACHMENT6" />
+		<field name="GL_COLOR_ATTACHMENT7" />
+		<field name="GL_COLOR_ATTACHMENT8" />
+		<field name="GL_COLOR_ATTACHMENT9" />
+		<field name="GL_COMPARE_REF_TO_TEXTURE" />
+		<field name="GL_COMPRESSED_R11_EAC" />
+		<field name="GL_COMPRESSED_RG11_EAC" />
+		<field name="GL_COMPRESSED_RGB8_ETC2" />
+		<field name="GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2" />
+		<field name="GL_COMPRESSED_RGBA8_ETC2_EAC" />
+		<field name="GL_COMPRESSED_SIGNED_R11_EAC" />
+		<field name="GL_COMPRESSED_SIGNED_RG11_EAC" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC" />
+		<field name="GL_COMPRESSED_SRGB8_ETC2" />
+		<field name="GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2" />
+		<field name="GL_CONDITION_SATISFIED" />
+		<field name="GL_COPY_READ_BUFFER" />
+		<field name="GL_COPY_READ_BUFFER_BINDING" />
+		<field name="GL_COPY_WRITE_BUFFER" />
+		<field name="GL_COPY_WRITE_BUFFER_BINDING" />
+		<field name="GL_CURRENT_QUERY" />
+		<field name="GL_DEPTH" />
+		<field name="GL_DEPTH24_STENCIL8" />
+		<field name="GL_DEPTH32F_STENCIL8" />
+		<field name="GL_DEPTH_COMPONENT24" />
+		<field name="GL_DEPTH_COMPONENT32F" />
+		<field name="GL_DEPTH_STENCIL" />
+		<field name="GL_DEPTH_STENCIL_ATTACHMENT" />
+		<field name="GL_DRAW_BUFFER0" />
+		<field name="GL_DRAW_BUFFER1" />
+		<field name="GL_DRAW_BUFFER10" />
+		<field name="GL_DRAW_BUFFER11" />
+		<field name="GL_DRAW_BUFFER12" />
+		<field name="GL_DRAW_BUFFER13" />
+		<field name="GL_DRAW_BUFFER14" />
+		<field name="GL_DRAW_BUFFER15" />
+		<field name="GL_DRAW_BUFFER2" />
+		<field name="GL_DRAW_BUFFER3" />
+		<field name="GL_DRAW_BUFFER4" />
+		<field name="GL_DRAW_BUFFER5" />
+		<field name="GL_DRAW_BUFFER6" />
+		<field name="GL_DRAW_BUFFER7" />
+		<field name="GL_DRAW_BUFFER8" />
+		<field name="GL_DRAW_BUFFER9" />
+		<field name="GL_DRAW_FRAMEBUFFER" />
+		<field name="GL_DRAW_FRAMEBUFFER_BINDING" />
+		<field name="GL_DYNAMIC_COPY" />
+		<field name="GL_DYNAMIC_READ" />
+		<field name="GL_FLOAT_32_UNSIGNED_INT_24_8_REV" />
+		<field name="GL_FLOAT_MAT2x3" />
+		<field name="GL_FLOAT_MAT2x4" />
+		<field name="GL_FLOAT_MAT3x2" />
+		<field name="GL_FLOAT_MAT3x4" />
+		<field name="GL_FLOAT_MAT4x2" />
+		<field name="GL_FLOAT_MAT4x3" />
+		<field name="GL_FRAGMENT_SHADER_DERIVATIVE_HINT" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER" />
+		<field name="GL_FRAMEBUFFER_DEFAULT" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE" />
+		<field name="GL_FRAMEBUFFER_UNDEFINED" />
+		<field name="GL_GREEN" />
+		<field name="GL_HALF_FLOAT" />
+		<field name="GL_INTERLEAVED_ATTRIBS" />
+		<field name="GL_INT_2_10_10_10_REV" />
+		<field name="GL_INT_SAMPLER_2D" />
+		<field name="GL_INT_SAMPLER_2D_ARRAY" />
+		<field name="GL_INT_SAMPLER_3D" />
+		<field name="GL_INT_SAMPLER_CUBE" />
+		<field name="GL_INVALID_INDEX" />
+		<field name="GL_MAJOR_VERSION" />
+		<field name="GL_MAP_FLUSH_EXPLICIT_BIT" />
+		<field name="GL_MAP_INVALIDATE_BUFFER_BIT" />
+		<field name="GL_MAP_INVALIDATE_RANGE_BIT" />
+		<field name="GL_MAP_READ_BIT" />
+		<field name="GL_MAP_UNSYNCHRONIZED_BIT" />
+		<field name="GL_MAP_WRITE_BIT" />
+		<field name="GL_MAX" />
+		<field name="GL_MAX_3D_TEXTURE_SIZE" />
+		<field name="GL_MAX_ARRAY_TEXTURE_LAYERS" />
+		<field name="GL_MAX_COLOR_ATTACHMENTS" />
+		<field name="GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_COMBINED_UNIFORM_BLOCKS" />
+		<field name="GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_DRAW_BUFFERS" />
+		<field name="GL_MAX_ELEMENTS_INDICES" />
+		<field name="GL_MAX_ELEMENTS_VERTICES" />
+		<field name="GL_MAX_ELEMENT_INDEX" />
+		<field name="GL_MAX_FRAGMENT_INPUT_COMPONENTS" />
+		<field name="GL_MAX_FRAGMENT_UNIFORM_BLOCKS" />
+		<field name="GL_MAX_FRAGMENT_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_PROGRAM_TEXEL_OFFSET" />
+		<field name="GL_MAX_SAMPLES" />
+		<field name="GL_MAX_SERVER_WAIT_TIMEOUT" />
+		<field name="GL_MAX_TEXTURE_LOD_BIAS" />
+		<field name="GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS" />
+		<field name="GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS" />
+		<field name="GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS" />
+		<field name="GL_MAX_UNIFORM_BLOCK_SIZE" />
+		<field name="GL_MAX_UNIFORM_BUFFER_BINDINGS" />
+		<field name="GL_MAX_VARYING_COMPONENTS" />
+		<field name="GL_MAX_VERTEX_OUTPUT_COMPONENTS" />
+		<field name="GL_MAX_VERTEX_UNIFORM_BLOCKS" />
+		<field name="GL_MAX_VERTEX_UNIFORM_COMPONENTS" />
+		<field name="GL_MIN" />
+		<field name="GL_MINOR_VERSION" />
+		<field name="GL_MIN_PROGRAM_TEXEL_OFFSET" />
+		<field name="GL_NUM_EXTENSIONS" />
+		<field name="GL_NUM_PROGRAM_BINARY_FORMATS" />
+		<field name="GL_NUM_SAMPLE_COUNTS" />
+		<field name="GL_OBJECT_TYPE" />
+		<field name="GL_PACK_ROW_LENGTH" />
+		<field name="GL_PACK_SKIP_PIXELS" />
+		<field name="GL_PACK_SKIP_ROWS" />
+		<field name="GL_PIXEL_PACK_BUFFER" />
+		<field name="GL_PIXEL_PACK_BUFFER_BINDING" />
+		<field name="GL_PIXEL_UNPACK_BUFFER" />
+		<field name="GL_PIXEL_UNPACK_BUFFER_BINDING" />
+		<field name="GL_PRIMITIVE_RESTART_FIXED_INDEX" />
+		<field name="GL_PROGRAM_BINARY_FORMATS" />
+		<field name="GL_PROGRAM_BINARY_LENGTH" />
+		<field name="GL_PROGRAM_BINARY_RETRIEVABLE_HINT" />
+		<field name="GL_QUERY_RESULT" />
+		<field name="GL_QUERY_RESULT_AVAILABLE" />
+		<field name="GL_R11F_G11F_B10F" />
+		<field name="GL_R16F" />
+		<field name="GL_R16I" />
+		<field name="GL_R16UI" />
+		<field name="GL_R32F" />
+		<field name="GL_R32I" />
+		<field name="GL_R32UI" />
+		<field name="GL_R8" />
+		<field name="GL_R8I" />
+		<field name="GL_R8UI" />
+		<field name="GL_R8_SNORM" />
+		<field name="GL_RASTERIZER_DISCARD" />
+		<field name="GL_READ_BUFFER" />
+		<field name="GL_READ_FRAMEBUFFER" />
+		<field name="GL_READ_FRAMEBUFFER_BINDING" />
+		<field name="GL_RED" />
+		<field name="GL_RED_INTEGER" />
+		<field name="GL_RENDERBUFFER_SAMPLES" />
+		<field name="GL_RG" />
+		<field name="GL_RG16F" />
+		<field name="GL_RG16I" />
+		<field name="GL_RG16UI" />
+		<field name="GL_RG32F" />
+		<field name="GL_RG32I" />
+		<field name="GL_RG32UI" />
+		<field name="GL_RG8" />
+		<field name="GL_RG8I" />
+		<field name="GL_RG8UI" />
+		<field name="GL_RG8_SNORM" />
+		<field name="GL_RGB10_A2" />
+		<field name="GL_RGB10_A2UI" />
+		<field name="GL_RGB16F" />
+		<field name="GL_RGB16I" />
+		<field name="GL_RGB16UI" />
+		<field name="GL_RGB32F" />
+		<field name="GL_RGB32I" />
+		<field name="GL_RGB32UI" />
+		<field name="GL_RGB8" />
+		<field name="GL_RGB8I" />
+		<field name="GL_RGB8UI" />
+		<field name="GL_RGB8_SNORM" />
+		<field name="GL_RGB9_E5" />
+		<field name="GL_RGBA16F" />
+		<field name="GL_RGBA16I" />
+		<field name="GL_RGBA16UI" />
+		<field name="GL_RGBA32F" />
+		<field name="GL_RGBA32I" />
+		<field name="GL_RGBA32UI" />
+		<field name="GL_RGBA8" />
+		<field name="GL_RGBA8I" />
+		<field name="GL_RGBA8UI" />
+		<field name="GL_RGBA8_SNORM" />
+		<field name="GL_RGBA_INTEGER" />
+		<field name="GL_RGB_INTEGER" />
+		<field name="GL_RG_INTEGER" />
+		<field name="GL_SAMPLER_2D_ARRAY" />
+		<field name="GL_SAMPLER_2D_ARRAY_SHADOW" />
+		<field name="GL_SAMPLER_2D_SHADOW" />
+		<field name="GL_SAMPLER_3D" />
+		<field name="GL_SAMPLER_BINDING" />
+		<field name="GL_SAMPLER_CUBE_SHADOW" />
+		<field name="GL_SEPARATE_ATTRIBS" />
+		<field name="GL_SIGNALED" />
+		<field name="GL_SIGNED_NORMALIZED" />
+		<field name="GL_SRGB" />
+		<field name="GL_SRGB8" />
+		<field name="GL_SRGB8_ALPHA8" />
+		<field name="GL_STATIC_COPY" />
+		<field name="GL_STATIC_READ" />
+		<field name="GL_STENCIL" />
+		<field name="GL_STREAM_COPY" />
+		<field name="GL_STREAM_READ" />
+		<field name="GL_SYNC_CONDITION" />
+		<field name="GL_SYNC_FENCE" />
+		<field name="GL_SYNC_FLAGS" />
+		<field name="GL_SYNC_FLUSH_COMMANDS_BIT" />
+		<field name="GL_SYNC_GPU_COMMANDS_COMPLETE" />
+		<field name="GL_SYNC_STATUS" />
+		<field name="GL_TEXTURE_2D_ARRAY" />
+		<field name="GL_TEXTURE_3D" />
+		<field name="GL_TEXTURE_BASE_LEVEL" />
+		<field name="GL_TEXTURE_BINDING_2D_ARRAY" />
+		<field name="GL_TEXTURE_BINDING_3D" />
+		<field name="GL_TEXTURE_COMPARE_FUNC" />
+		<field name="GL_TEXTURE_COMPARE_MODE" />
+		<field name="GL_TEXTURE_IMMUTABLE_FORMAT" />
+		<field name="GL_TEXTURE_IMMUTABLE_LEVELS" />
+		<field name="GL_TEXTURE_MAX_LEVEL" />
+		<field name="GL_TEXTURE_MAX_LOD" />
+		<field name="GL_TEXTURE_MIN_LOD" />
+		<field name="GL_TEXTURE_SWIZZLE_A" />
+		<field name="GL_TEXTURE_SWIZZLE_B" />
+		<field name="GL_TEXTURE_SWIZZLE_G" />
+		<field name="GL_TEXTURE_SWIZZLE_R" />
+		<field name="GL_TEXTURE_WRAP_R" />
+		<field name="GL_TIMEOUT_EXPIRED" />
+		<field name="GL_TIMEOUT_IGNORED" />
+		<field name="GL_TRANSFORM_FEEDBACK" />
+		<field name="GL_TRANSFORM_FEEDBACK_ACTIVE" />
+		<field name="GL_TRANSFORM_FEEDBACK_BINDING" />
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER" />
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_BINDING" />
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_MODE" />
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_SIZE" />
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_START" />
+		<field name="GL_TRANSFORM_FEEDBACK_PAUSED" />
+		<field name="GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN" />
+		<field name="GL_TRANSFORM_FEEDBACK_VARYINGS" />
+		<field name="GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH" />
+		<field name="GL_UNIFORM_ARRAY_STRIDE" />
+		<field name="GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS" />
+		<field name="GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES" />
+		<field name="GL_UNIFORM_BLOCK_BINDING" />
+		<field name="GL_UNIFORM_BLOCK_DATA_SIZE" />
+		<field name="GL_UNIFORM_BLOCK_INDEX" />
+		<field name="GL_UNIFORM_BLOCK_NAME_LENGTH" />
+		<field name="GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER" />
+		<field name="GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER" />
+		<field name="GL_UNIFORM_BUFFER" />
+		<field name="GL_UNIFORM_BUFFER_BINDING" />
+		<field name="GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT" />
+		<field name="GL_UNIFORM_BUFFER_SIZE" />
+		<field name="GL_UNIFORM_BUFFER_START" />
+		<field name="GL_UNIFORM_IS_ROW_MAJOR" />
+		<field name="GL_UNIFORM_MATRIX_STRIDE" />
+		<field name="GL_UNIFORM_NAME_LENGTH" />
+		<field name="GL_UNIFORM_OFFSET" />
+		<field name="GL_UNIFORM_SIZE" />
+		<field name="GL_UNIFORM_TYPE" />
+		<field name="GL_UNPACK_IMAGE_HEIGHT" />
+		<field name="GL_UNPACK_ROW_LENGTH" />
+		<field name="GL_UNPACK_SKIP_IMAGES" />
+		<field name="GL_UNPACK_SKIP_PIXELS" />
+		<field name="GL_UNPACK_SKIP_ROWS" />
+		<field name="GL_UNSIGNALED" />
+		<field name="GL_UNSIGNED_INT_10F_11F_11F_REV" />
+		<field name="GL_UNSIGNED_INT_24_8" />
+		<field name="GL_UNSIGNED_INT_2_10_10_10_REV" />
+		<field name="GL_UNSIGNED_INT_5_9_9_9_REV" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_ARRAY" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_3D" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE" />
+		<field name="GL_UNSIGNED_INT_VEC2" />
+		<field name="GL_UNSIGNED_INT_VEC3" />
+		<field name="GL_UNSIGNED_INT_VEC4" />
+		<field name="GL_UNSIGNED_NORMALIZED" />
+		<field name="GL_VERTEX_ARRAY_BINDING" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_DIVISOR" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_INTEGER" />
+		<field name="GL_WAIT_FAILED" />
+	</class>
+	<class name="android/opengl/GLES31" since="21">
+		<extends name="android/opengl/GLES30" />
+		<method name="glActiveShaderProgram(II)V" />
+		<method name="glBindImageTexture(IIIZIII)V" />
+		<method name="glBindProgramPipeline(I)V" />
+		<method name="glBindVertexBuffer(IIJI)V" />
+		<method name="glCreateShaderProgramv(I[Ljava/lang/String;)I" />
+		<method name="glDeleteProgramPipelines(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteProgramPipelines(I[II)V" />
+		<method name="glDispatchCompute(III)V" />
+		<method name="glDispatchComputeIndirect(J)V" />
+		<method name="glDrawArraysIndirect(IJ)V" />
+		<method name="glDrawElementsIndirect(IIJ)V" />
+		<method name="glFramebufferParameteri(III)V" />
+		<method name="glGenProgramPipelines(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenProgramPipelines(I[II)V" />
+		<method name="glGetBooleani_v(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetBooleani_v(II[ZI)V" />
+		<method name="glGetFramebufferParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetFramebufferParameteriv(II[II)V" />
+		<method name="glGetMultisamplefv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetMultisamplefv(II[FI)V" />
+		<method name="glGetProgramInterfaceiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetProgramInterfaceiv(III[II)V" />
+		<method name="glGetProgramPipelineInfoLog(I)Ljava/lang/String;" />
+		<method name="glGetProgramPipelineiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetProgramPipelineiv(II[II)V" />
+		<method name="glGetProgramResourceIndex(IILjava/lang/String;)I" />
+		<method name="glGetProgramResourceLocation(IILjava/lang/String;)I" />
+		<method name="glGetProgramResourceName(III)Ljava/lang/String;" />
+		<method name="glGetProgramResourceiv(IIIILjava/nio/IntBuffer;ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V" />
+		<method name="glGetProgramResourceiv(IIII[III[II[II)V" />
+		<method name="glGetTexLevelParameterfv(IIILjava/nio/FloatBuffer;)V" />
+		<method name="glGetTexLevelParameterfv(III[FI)V" />
+		<method name="glGetTexLevelParameteriv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexLevelParameteriv(III[II)V" />
+		<method name="glIsProgramPipeline(I)Z" />
+		<method name="glMemoryBarrier(I)V" />
+		<method name="glMemoryBarrierByRegion(I)V" />
+		<method name="glProgramUniform1f(IIF)V" />
+		<method name="glProgramUniform1fv(IIILjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniform1fv(III[FI)V" />
+		<method name="glProgramUniform1i(III)V" />
+		<method name="glProgramUniform1iv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform1iv(III[II)V" />
+		<method name="glProgramUniform1ui(III)V" />
+		<method name="glProgramUniform1uiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform1uiv(III[II)V" />
+		<method name="glProgramUniform2f(IIFF)V" />
+		<method name="glProgramUniform2fv(IIILjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniform2fv(III[FI)V" />
+		<method name="glProgramUniform2i(IIII)V" />
+		<method name="glProgramUniform2iv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform2iv(III[II)V" />
+		<method name="glProgramUniform2ui(IIII)V" />
+		<method name="glProgramUniform2uiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform2uiv(III[II)V" />
+		<method name="glProgramUniform3f(IIFFF)V" />
+		<method name="glProgramUniform3fv(IIILjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniform3fv(III[FI)V" />
+		<method name="glProgramUniform3i(IIIII)V" />
+		<method name="glProgramUniform3iv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform3iv(III[II)V" />
+		<method name="glProgramUniform3ui(IIIII)V" />
+		<method name="glProgramUniform3uiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform3uiv(III[II)V" />
+		<method name="glProgramUniform4f(IIFFFF)V" />
+		<method name="glProgramUniform4fv(IIILjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniform4fv(III[FI)V" />
+		<method name="glProgramUniform4i(IIIIII)V" />
+		<method name="glProgramUniform4iv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform4iv(III[II)V" />
+		<method name="glProgramUniform4ui(IIIIII)V" />
+		<method name="glProgramUniform4uiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glProgramUniform4uiv(III[II)V" />
+		<method name="glProgramUniformMatrix2fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix2fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix2x3fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix2x3fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix2x4fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix2x4fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix3fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix3fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix3x2fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix3x2fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix3x4fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix3x4fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix4fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix4fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix4x2fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix4x2fv(IIIZ[FI)V" />
+		<method name="glProgramUniformMatrix4x3fv(IIIZLjava/nio/FloatBuffer;)V" />
+		<method name="glProgramUniformMatrix4x3fv(IIIZ[FI)V" />
+		<method name="glSampleMaski(II)V" />
+		<method name="glTexStorage2DMultisample(IIIIIZ)V" />
+		<method name="glUseProgramStages(III)V" />
+		<method name="glValidateProgramPipeline(I)V" />
+		<method name="glVertexAttribBinding(II)V" />
+		<method name="glVertexAttribFormat(IIIZI)V" />
+		<method name="glVertexAttribIFormat(IIII)V" />
+		<method name="glVertexBindingDivisor(II)V" />
+		<field name="GL_ACTIVE_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_ACTIVE_PROGRAM" />
+		<field name="GL_ACTIVE_RESOURCES" />
+		<field name="GL_ACTIVE_VARIABLES" />
+		<field name="GL_ALL_BARRIER_BITS" since="24" />
+		<field name="GL_ALL_SHADER_BITS" />
+		<field name="GL_ARRAY_SIZE" />
+		<field name="GL_ARRAY_STRIDE" />
+		<field name="GL_ATOMIC_COUNTER_BARRIER_BIT" />
+		<field name="GL_ATOMIC_COUNTER_BUFFER" />
+		<field name="GL_ATOMIC_COUNTER_BUFFER_BINDING" />
+		<field name="GL_ATOMIC_COUNTER_BUFFER_INDEX" />
+		<field name="GL_ATOMIC_COUNTER_BUFFER_SIZE" />
+		<field name="GL_ATOMIC_COUNTER_BUFFER_START" />
+		<field name="GL_BLOCK_INDEX" />
+		<field name="GL_BUFFER_BINDING" />
+		<field name="GL_BUFFER_DATA_SIZE" />
+		<field name="GL_BUFFER_UPDATE_BARRIER_BIT" />
+		<field name="GL_BUFFER_VARIABLE" />
+		<field name="GL_COMMAND_BARRIER_BIT" />
+		<field name="GL_COMPUTE_SHADER" />
+		<field name="GL_COMPUTE_SHADER_BIT" />
+		<field name="GL_COMPUTE_WORK_GROUP_SIZE" />
+		<field name="GL_DEPTH_STENCIL_TEXTURE_MODE" />
+		<field name="GL_DISPATCH_INDIRECT_BUFFER" />
+		<field name="GL_DISPATCH_INDIRECT_BUFFER_BINDING" />
+		<field name="GL_DRAW_INDIRECT_BUFFER" />
+		<field name="GL_DRAW_INDIRECT_BUFFER_BINDING" />
+		<field name="GL_ELEMENT_ARRAY_BARRIER_BIT" since="24" />
+		<field name="GL_FRAGMENT_SHADER_BIT" />
+		<field name="GL_FRAMEBUFFER_BARRIER_BIT" />
+		<field name="GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS" />
+		<field name="GL_FRAMEBUFFER_DEFAULT_HEIGHT" />
+		<field name="GL_FRAMEBUFFER_DEFAULT_SAMPLES" />
+		<field name="GL_FRAMEBUFFER_DEFAULT_WIDTH" />
+		<field name="GL_IMAGE_2D" />
+		<field name="GL_IMAGE_2D_ARRAY" />
+		<field name="GL_IMAGE_3D" />
+		<field name="GL_IMAGE_BINDING_ACCESS" />
+		<field name="GL_IMAGE_BINDING_FORMAT" />
+		<field name="GL_IMAGE_BINDING_LAYER" />
+		<field name="GL_IMAGE_BINDING_LAYERED" />
+		<field name="GL_IMAGE_BINDING_LEVEL" />
+		<field name="GL_IMAGE_BINDING_NAME" />
+		<field name="GL_IMAGE_CUBE" />
+		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS" />
+		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE" />
+		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_TYPE" />
+		<field name="GL_INT_IMAGE_2D" />
+		<field name="GL_INT_IMAGE_2D_ARRAY" />
+		<field name="GL_INT_IMAGE_3D" />
+		<field name="GL_INT_IMAGE_CUBE" />
+		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE" />
+		<field name="GL_IS_ROW_MAJOR" />
+		<field name="GL_LOCATION" />
+		<field name="GL_MATRIX_STRIDE" />
+		<field name="GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS" />
+		<field name="GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE" />
+		<field name="GL_MAX_COLOR_TEXTURE_SAMPLES" />
+		<field name="GL_MAX_COMBINED_ATOMIC_COUNTERS" />
+		<field name="GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_COMBINED_IMAGE_UNIFORMS" />
+		<field name="GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES" />
+		<field name="GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS" />
+		<field name="GL_MAX_COMPUTE_ATOMIC_COUNTERS" />
+		<field name="GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_MAX_COMPUTE_IMAGE_UNIFORMS" />
+		<field name="GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS" />
+		<field name="GL_MAX_COMPUTE_SHARED_MEMORY_SIZE" />
+		<field name="GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS" />
+		<field name="GL_MAX_COMPUTE_UNIFORM_BLOCKS" />
+		<field name="GL_MAX_COMPUTE_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_COMPUTE_WORK_GROUP_COUNT" />
+		<field name="GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS" />
+		<field name="GL_MAX_COMPUTE_WORK_GROUP_SIZE" />
+		<field name="GL_MAX_DEPTH_TEXTURE_SAMPLES" />
+		<field name="GL_MAX_FRAGMENT_ATOMIC_COUNTERS" />
+		<field name="GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_MAX_FRAGMENT_IMAGE_UNIFORMS" />
+		<field name="GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS" />
+		<field name="GL_MAX_FRAMEBUFFER_HEIGHT" />
+		<field name="GL_MAX_FRAMEBUFFER_SAMPLES" />
+		<field name="GL_MAX_FRAMEBUFFER_WIDTH" />
+		<field name="GL_MAX_IMAGE_UNITS" />
+		<field name="GL_MAX_INTEGER_SAMPLES" />
+		<field name="GL_MAX_NAME_LENGTH" />
+		<field name="GL_MAX_NUM_ACTIVE_VARIABLES" />
+		<field name="GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET" />
+		<field name="GL_MAX_SAMPLE_MASK_WORDS" />
+		<field name="GL_MAX_SHADER_STORAGE_BLOCK_SIZE" />
+		<field name="GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS" />
+		<field name="GL_MAX_UNIFORM_LOCATIONS" />
+		<field name="GL_MAX_VERTEX_ATOMIC_COUNTERS" />
+		<field name="GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_MAX_VERTEX_ATTRIB_BINDINGS" />
+		<field name="GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET" />
+		<field name="GL_MAX_VERTEX_ATTRIB_STRIDE" />
+		<field name="GL_MAX_VERTEX_IMAGE_UNIFORMS" />
+		<field name="GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS" />
+		<field name="GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET" />
+		<field name="GL_NAME_LENGTH" />
+		<field name="GL_NUM_ACTIVE_VARIABLES" />
+		<field name="GL_OFFSET" />
+		<field name="GL_PIXEL_BUFFER_BARRIER_BIT" />
+		<field name="GL_PROGRAM_INPUT" />
+		<field name="GL_PROGRAM_OUTPUT" />
+		<field name="GL_PROGRAM_PIPELINE_BINDING" />
+		<field name="GL_PROGRAM_SEPARABLE" />
+		<field name="GL_READ_ONLY" />
+		<field name="GL_READ_WRITE" />
+		<field name="GL_REFERENCED_BY_COMPUTE_SHADER" />
+		<field name="GL_REFERENCED_BY_FRAGMENT_SHADER" />
+		<field name="GL_REFERENCED_BY_VERTEX_SHADER" />
+		<field name="GL_SAMPLER_2D_MULTISAMPLE" />
+		<field name="GL_SAMPLE_MASK" />
+		<field name="GL_SAMPLE_MASK_VALUE" />
+		<field name="GL_SAMPLE_POSITION" />
+		<field name="GL_SHADER_IMAGE_ACCESS_BARRIER_BIT" since="24" />
+		<field name="GL_SHADER_STORAGE_BARRIER_BIT" />
+		<field name="GL_SHADER_STORAGE_BLOCK" />
+		<field name="GL_SHADER_STORAGE_BUFFER" />
+		<field name="GL_SHADER_STORAGE_BUFFER_BINDING" />
+		<field name="GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT" />
+		<field name="GL_SHADER_STORAGE_BUFFER_SIZE" />
+		<field name="GL_SHADER_STORAGE_BUFFER_START" />
+		<field name="GL_STENCIL_INDEX" />
+		<field name="GL_TEXTURE_2D_MULTISAMPLE" />
+		<field name="GL_TEXTURE_ALPHA_SIZE" />
+		<field name="GL_TEXTURE_ALPHA_TYPE" />
+		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE" />
+		<field name="GL_TEXTURE_BLUE_SIZE" />
+		<field name="GL_TEXTURE_BLUE_TYPE" />
+		<field name="GL_TEXTURE_COMPRESSED" />
+		<field name="GL_TEXTURE_DEPTH" />
+		<field name="GL_TEXTURE_DEPTH_SIZE" />
+		<field name="GL_TEXTURE_DEPTH_TYPE" />
+		<field name="GL_TEXTURE_FETCH_BARRIER_BIT" />
+		<field name="GL_TEXTURE_FIXED_SAMPLE_LOCATIONS" />
+		<field name="GL_TEXTURE_GREEN_SIZE" />
+		<field name="GL_TEXTURE_GREEN_TYPE" />
+		<field name="GL_TEXTURE_HEIGHT" />
+		<field name="GL_TEXTURE_INTERNAL_FORMAT" />
+		<field name="GL_TEXTURE_RED_SIZE" />
+		<field name="GL_TEXTURE_RED_TYPE" />
+		<field name="GL_TEXTURE_SAMPLES" />
+		<field name="GL_TEXTURE_SHARED_SIZE" />
+		<field name="GL_TEXTURE_STENCIL_SIZE" />
+		<field name="GL_TEXTURE_UPDATE_BARRIER_BIT" />
+		<field name="GL_TEXTURE_WIDTH" />
+		<field name="GL_TOP_LEVEL_ARRAY_SIZE" />
+		<field name="GL_TOP_LEVEL_ARRAY_STRIDE" />
+		<field name="GL_TRANSFORM_FEEDBACK_BARRIER_BIT" />
+		<field name="GL_TRANSFORM_FEEDBACK_VARYING" />
+		<field name="GL_TYPE" />
+		<field name="GL_UNIFORM" />
+		<field name="GL_UNIFORM_BARRIER_BIT" />
+		<field name="GL_UNIFORM_BLOCK" />
+		<field name="GL_UNSIGNED_INT_ATOMIC_COUNTER" />
+		<field name="GL_UNSIGNED_INT_IMAGE_2D" />
+		<field name="GL_UNSIGNED_INT_IMAGE_2D_ARRAY" />
+		<field name="GL_UNSIGNED_INT_IMAGE_3D" />
+		<field name="GL_UNSIGNED_INT_IMAGE_CUBE" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE" />
+		<field name="GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT" since="24" />
+		<field name="GL_VERTEX_ATTRIB_BINDING" />
+		<field name="GL_VERTEX_ATTRIB_RELATIVE_OFFSET" />
+		<field name="GL_VERTEX_BINDING_BUFFER" />
+		<field name="GL_VERTEX_BINDING_DIVISOR" />
+		<field name="GL_VERTEX_BINDING_OFFSET" />
+		<field name="GL_VERTEX_BINDING_STRIDE" />
+		<field name="GL_VERTEX_SHADER_BIT" />
+		<field name="GL_WRITE_ONLY" />
+	</class>
+	<class name="android/opengl/GLES31Ext" since="21">
+		<extends name="java/lang/Object" />
+		<method name="glBlendBarrierKHR()V" />
+		<method name="glBlendEquationSeparateiEXT(III)V" />
+		<method name="glBlendEquationiEXT(II)V" />
+		<method name="glBlendFuncSeparateiEXT(IIIII)V" />
+		<method name="glBlendFunciEXT(III)V" />
+		<method name="glColorMaskiEXT(IZZZZ)V" />
+		<method name="glCopyImageSubDataEXT(IIIIIIIIIIIIIII)V" />
+		<method name="glDebugMessageCallbackKHR(Landroid/opengl/GLES31Ext$DebugProcKHR;)V" />
+		<method name="glDebugMessageControlKHR(IIIILjava/nio/IntBuffer;Z)V" />
+		<method name="glDebugMessageControlKHR(IIII[IIZ)V" />
+		<method name="glDebugMessageInsertKHR(IIIILjava/lang/String;)V" />
+		<method name="glDisableiEXT(II)V" />
+		<method name="glEnableiEXT(II)V" />
+		<method name="glFramebufferTextureEXT(IIII)V" />
+		<method name="glGetDebugMessageCallbackKHR()Landroid/opengl/GLES31Ext$DebugProcKHR;" />
+		<method name="glGetDebugMessageLogKHR(II[II[II[II[II[II[BI)I" />
+		<method name="glGetDebugMessageLogKHR(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;" />
+		<method name="glGetDebugMessageLogKHR(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I" />
+		<method name="glGetDebugMessageLogKHR(I[II[II[II[II)[Ljava/lang/String;" />
+		<method name="glGetObjectLabelKHR(II)Ljava/lang/String;" />
+		<method name="glGetObjectPtrLabelKHR(J)Ljava/lang/String;" />
+		<method name="glGetSamplerParameterIivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetSamplerParameterIivEXT(II[II)V" />
+		<method name="glGetSamplerParameterIuivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetSamplerParameterIuivEXT(II[II)V" />
+		<method name="glGetTexParameterIivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameterIivEXT(II[II)V" />
+		<method name="glGetTexParameterIuivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameterIuivEXT(II[II)V" />
+		<method name="glIsEnablediEXT(II)Z" />
+		<method name="glMinSampleShadingOES(F)V" />
+		<method name="glObjectLabelKHR(IIILjava/lang/String;)V" />
+		<method name="glObjectPtrLabelKHR(JLjava/lang/String;)V" />
+		<method name="glPatchParameteriEXT(II)V" />
+		<method name="glPopDebugGroupKHR()V" />
+		<method name="glPrimitiveBoundingBoxEXT(FFFFFFFF)V" />
+		<method name="glPushDebugGroupKHR(IIILjava/lang/String;)V" />
+		<method name="glSamplerParameterIivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glSamplerParameterIivEXT(II[II)V" />
+		<method name="glSamplerParameterIuivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glSamplerParameterIuivEXT(II[II)V" />
+		<method name="glTexBufferEXT(III)V" />
+		<method name="glTexBufferRangeEXT(IIIII)V" />
+		<method name="glTexParameterIivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameterIivEXT(II[II)V" />
+		<method name="glTexParameterIuivEXT(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameterIuivEXT(II[II)V" />
+		<method name="glTexStorage3DMultisampleOES(IIIIIIZ)V" />
+		<field name="GL_BLEND_ADVANCED_COHERENT_KHR" />
+		<field name="GL_BUFFER_KHR" />
+		<field name="GL_CLAMP_TO_BORDER_EXT" />
+		<field name="GL_COLORBURN_KHR" />
+		<field name="GL_COLORDODGE_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x10_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x5_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x6_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x8_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x10_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x12_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_4x4_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x4_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x5_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x5_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x6_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x5_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x6_KHR" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x8_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR" />
+		<field name="GL_CONTEXT_FLAG_DEBUG_BIT_KHR" />
+		<field name="GL_DARKEN_KHR" />
+		<field name="GL_DEBUG_CALLBACK_FUNCTION_KHR" />
+		<field name="GL_DEBUG_CALLBACK_USER_PARAM_KHR" />
+		<field name="GL_DEBUG_GROUP_STACK_DEPTH_KHR" />
+		<field name="GL_DEBUG_LOGGED_MESSAGES_KHR" />
+		<field name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR" />
+		<field name="GL_DEBUG_OUTPUT_KHR" />
+		<field name="GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR" />
+		<field name="GL_DEBUG_SEVERITY_HIGH_KHR" />
+		<field name="GL_DEBUG_SEVERITY_LOW_KHR" />
+		<field name="GL_DEBUG_SEVERITY_MEDIUM_KHR" />
+		<field name="GL_DEBUG_SEVERITY_NOTIFICATION_KHR" />
+		<field name="GL_DEBUG_SOURCE_API_KHR" />
+		<field name="GL_DEBUG_SOURCE_APPLICATION_KHR" />
+		<field name="GL_DEBUG_SOURCE_OTHER_KHR" />
+		<field name="GL_DEBUG_SOURCE_SHADER_COMPILER_KHR" />
+		<field name="GL_DEBUG_SOURCE_THIRD_PARTY_KHR" />
+		<field name="GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR" />
+		<field name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR" />
+		<field name="GL_DEBUG_TYPE_ERROR_KHR" />
+		<field name="GL_DEBUG_TYPE_MARKER_KHR" />
+		<field name="GL_DEBUG_TYPE_OTHER_KHR" />
+		<field name="GL_DEBUG_TYPE_PERFORMANCE_KHR" />
+		<field name="GL_DEBUG_TYPE_POP_GROUP_KHR" />
+		<field name="GL_DEBUG_TYPE_PORTABILITY_KHR" />
+		<field name="GL_DEBUG_TYPE_PUSH_GROUP_KHR" />
+		<field name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR" />
+		<field name="GL_DECODE_EXT" />
+		<field name="GL_DIFFERENCE_KHR" />
+		<field name="GL_EXCLUSION_KHR" />
+		<field name="GL_FIRST_VERTEX_CONVENTION_EXT" />
+		<field name="GL_FRACTIONAL_EVEN_EXT" />
+		<field name="GL_FRACTIONAL_ODD_EXT" />
+		<field name="GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT" />
+		<field name="GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT" />
+		<field name="GL_GEOMETRY_LINKED_INPUT_TYPE_EXT" />
+		<field name="GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT" />
+		<field name="GL_GEOMETRY_LINKED_VERTICES_OUT_EXT" />
+		<field name="GL_GEOMETRY_SHADER_BIT_EXT" />
+		<field name="GL_GEOMETRY_SHADER_EXT" />
+		<field name="GL_GEOMETRY_SHADER_INVOCATIONS_EXT" />
+		<field name="GL_HARDLIGHT_KHR" />
+		<field name="GL_HSL_COLOR_KHR" />
+		<field name="GL_HSL_HUE_KHR" />
+		<field name="GL_HSL_LUMINOSITY_KHR" />
+		<field name="GL_HSL_SATURATION_KHR" />
+		<field name="GL_IMAGE_BUFFER_EXT" />
+		<field name="GL_IMAGE_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_INT_IMAGE_BUFFER_EXT" />
+		<field name="GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES" />
+		<field name="GL_INT_SAMPLER_BUFFER_EXT" />
+		<field name="GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_ISOLINES_EXT" />
+		<field name="GL_IS_PER_PATCH_EXT" />
+		<field name="GL_LAST_VERTEX_CONVENTION_EXT" />
+		<field name="GL_LAYER_PROVOKING_VERTEX_EXT" />
+		<field name="GL_LIGHTEN_KHR" />
+		<field name="GL_LINES_ADJACENCY_EXT" />
+		<field name="GL_LINE_STRIP_ADJACENCY_EXT" />
+		<field name="GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT" />
+		<field name="GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT" />
+		<field name="GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT" />
+		<field name="GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR" />
+		<field name="GL_MAX_DEBUG_LOGGED_MESSAGES_KHR" />
+		<field name="GL_MAX_DEBUG_MESSAGE_LENGTH_KHR" />
+		<field name="GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES" />
+		<field name="GL_MAX_FRAMEBUFFER_LAYERS_EXT" />
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT" />
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT" />
+		<field name="GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT" />
+		<field name="GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT" />
+		<field name="GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT" />
+		<field name="GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT" />
+		<field name="GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT" />
+		<field name="GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT" />
+		<field name="GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT" />
+		<field name="GL_MAX_LABEL_LENGTH_KHR" />
+		<field name="GL_MAX_PATCH_VERTICES_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT" />
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT" />
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT" />
+		<field name="GL_MAX_TESS_GEN_LEVEL_EXT" />
+		<field name="GL_MAX_TESS_PATCH_COMPONENTS_EXT" />
+		<field name="GL_MAX_TEXTURE_BUFFER_SIZE_EXT" />
+		<field name="GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES" />
+		<field name="GL_MIN_SAMPLE_SHADING_VALUE_OES" />
+		<field name="GL_MULTIPLY_KHR" />
+		<field name="GL_OVERLAY_KHR" />
+		<field name="GL_PATCHES_EXT" />
+		<field name="GL_PATCH_VERTICES_EXT" />
+		<field name="GL_PRIMITIVES_GENERATED_EXT" />
+		<field name="GL_PRIMITIVE_BOUNDING_BOX_EXT" />
+		<field name="GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED" />
+		<field name="GL_PROGRAM_KHR" />
+		<field name="GL_QUADS_EXT" />
+		<field name="GL_QUERY_KHR" />
+		<field name="GL_REFERENCED_BY_GEOMETRY_SHADER_EXT" />
+		<field name="GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT" />
+		<field name="GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT" />
+		<field name="GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES" />
+		<field name="GL_SAMPLER_BUFFER_EXT" />
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT" />
+		<field name="GL_SAMPLER_KHR" />
+		<field name="GL_SAMPLE_SHADING_OES" />
+		<field name="GL_SCREEN_KHR" />
+		<field name="GL_SHADER_KHR" />
+		<field name="GL_SKIP_DECODE_EXT" />
+		<field name="GL_SOFTLIGHT_KHR" />
+		<field name="GL_STACK_OVERFLOW_KHR" />
+		<field name="GL_STACK_UNDERFLOW_KHR" />
+		<field name="GL_STENCIL_INDEX8_OES" />
+		<field name="GL_STENCIL_INDEX_OES" />
+		<field name="GL_TESS_CONTROL_OUTPUT_VERTICES_EXT" />
+		<field name="GL_TESS_CONTROL_SHADER_BIT_EXT" />
+		<field name="GL_TESS_CONTROL_SHADER_EXT" />
+		<field name="GL_TESS_EVALUATION_SHADER_BIT_EXT" />
+		<field name="GL_TESS_EVALUATION_SHADER_EXT" />
+		<field name="GL_TESS_GEN_MODE_EXT" />
+		<field name="GL_TESS_GEN_POINT_MODE_EXT" />
+		<field name="GL_TESS_GEN_SPACING_EXT" />
+		<field name="GL_TESS_GEN_VERTEX_ORDER_EXT" />
+		<field name="GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES" />
+		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES" />
+		<field name="GL_TEXTURE_BINDING_BUFFER_EXT" />
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_TEXTURE_BORDER_COLOR_EXT" />
+		<field name="GL_TEXTURE_BUFFER_BINDING_EXT" />
+		<field name="GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT" />
+		<field name="GL_TEXTURE_BUFFER_EXT" />
+		<field name="GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT" />
+		<field name="GL_TEXTURE_BUFFER_OFFSET_EXT" />
+		<field name="GL_TEXTURE_BUFFER_SIZE_EXT" />
+		<field name="GL_TEXTURE_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_TEXTURE_SRGB_DECODE_EXT" />
+		<field name="GL_TRIANGLES_ADJACENCY_EXT" />
+		<field name="GL_TRIANGLE_STRIP_ADJACENCY_EXT" />
+		<field name="GL_UNDEFINED_VERTEX_EXT" />
+		<field name="GL_UNSIGNED_INT_IMAGE_BUFFER_EXT" />
+		<field name="GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT" />
+		<field name="GL_VERTEX_ARRAY_KHR" />
+	</class>
+	<class name="android/opengl/GLES31Ext$DebugProcKHR" since="21">
+		<extends name="java/lang/Object" />
+		<method name="onMessage(IIIILjava/lang/String;)V" />
+	</class>
+	<class name="android/opengl/GLES32" since="24">
+		<extends name="android/opengl/GLES31" />
+		<method name="glBlendBarrier()V" />
+		<method name="glBlendEquationSeparatei(III)V" />
+		<method name="glBlendEquationi(II)V" />
+		<method name="glBlendFuncSeparatei(IIIII)V" />
+		<method name="glBlendFunci(III)V" />
+		<method name="glColorMaski(IZZZZ)V" />
+		<method name="glCopyImageSubData(IIIIIIIIIIIIIII)V" />
+		<method name="glDebugMessageCallback(Landroid/opengl/GLES32$DebugProc;)V" />
+		<method name="glDebugMessageControl(IIIILjava/nio/IntBuffer;Z)V" />
+		<method name="glDebugMessageControl(IIII[IIZ)V" />
+		<method name="glDebugMessageInsert(IIIIILjava/lang/String;)V" />
+		<method name="glDisablei(II)V" />
+		<method name="glDrawElementsBaseVertex(IIILjava/nio/Buffer;I)V" />
+		<method name="glDrawElementsInstancedBaseVertex(IIIIII)V" />
+		<method name="glDrawElementsInstancedBaseVertex(IIILjava/nio/Buffer;II)V" />
+		<method name="glDrawRangeElementsBaseVertex(IIIIILjava/nio/Buffer;I)V" />
+		<method name="glEnablei(II)V" />
+		<method name="glFramebufferTexture(IIII)V" />
+		<method name="glGetDebugMessageLog(II[II[II[II[II[II[BI)I" />
+		<method name="glGetDebugMessageLog(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;" />
+		<method name="glGetDebugMessageLog(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I" />
+		<method name="glGetDebugMessageLog(I[II[II[II[II)[Ljava/lang/String;" />
+		<method name="glGetGraphicsResetStatus()I" />
+		<method name="glGetObjectLabel(II)Ljava/lang/String;" />
+		<method name="glGetObjectPtrLabel(J)Ljava/lang/String;" />
+		<method name="glGetPointerv(I)J" />
+		<method name="glGetSamplerParameterIiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetSamplerParameterIiv(II[II)V" />
+		<method name="glGetSamplerParameterIuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetSamplerParameterIuiv(II[II)V" />
+		<method name="glGetTexParameterIiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameterIiv(II[II)V" />
+		<method name="glGetTexParameterIuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameterIuiv(II[II)V" />
+		<method name="glGetnUniformfv(IIILjava/nio/FloatBuffer;)V" />
+		<method name="glGetnUniformfv(III[FI)V" />
+		<method name="glGetnUniformiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetnUniformiv(III[II)V" />
+		<method name="glGetnUniformuiv(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetnUniformuiv(III[II)V" />
+		<method name="glIsEnabledi(II)Z" />
+		<method name="glMinSampleShading(F)V" />
+		<method name="glObjectLabel(IIILjava/lang/String;)V" />
+		<method name="glObjectPtrLabel(JLjava/lang/String;)V" />
+		<method name="glPatchParameteri(II)V" />
+		<method name="glPopDebugGroup()V" />
+		<method name="glPrimitiveBoundingBox(FFFFFFFF)V" />
+		<method name="glPushDebugGroup(IIILjava/lang/String;)V" />
+		<method name="glReadnPixels(IIIIIIILjava/nio/Buffer;)V" />
+		<method name="glSamplerParameterIiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glSamplerParameterIiv(II[II)V" />
+		<method name="glSamplerParameterIuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glSamplerParameterIuiv(II[II)V" />
+		<method name="glTexBuffer(III)V" />
+		<method name="glTexBufferRange(IIIII)V" />
+		<method name="glTexParameterIiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameterIiv(II[II)V" />
+		<method name="glTexParameterIuiv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameterIuiv(II[II)V" />
+		<method name="glTexStorage3DMultisample(IIIIIIZ)V" />
+		<field name="GL_BUFFER" />
+		<field name="GL_CLAMP_TO_BORDER" />
+		<field name="GL_COLORBURN" />
+		<field name="GL_COLORDODGE" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x10" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x5" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x6" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x8" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x10" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x12" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_4x4" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x4" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x5" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x5" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x6" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x5" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x6" />
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x8" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6" />
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8" />
+		<field name="GL_CONTEXT_FLAGS" />
+		<field name="GL_CONTEXT_FLAG_DEBUG_BIT" />
+		<field name="GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT" />
+		<field name="GL_CONTEXT_LOST" />
+		<field name="GL_DARKEN" />
+		<field name="GL_DEBUG_CALLBACK_FUNCTION" />
+		<field name="GL_DEBUG_CALLBACK_USER_PARAM" />
+		<field name="GL_DEBUG_GROUP_STACK_DEPTH" />
+		<field name="GL_DEBUG_LOGGED_MESSAGES" />
+		<field name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH" />
+		<field name="GL_DEBUG_OUTPUT" />
+		<field name="GL_DEBUG_OUTPUT_SYNCHRONOUS" />
+		<field name="GL_DEBUG_SEVERITY_HIGH" />
+		<field name="GL_DEBUG_SEVERITY_LOW" />
+		<field name="GL_DEBUG_SEVERITY_MEDIUM" />
+		<field name="GL_DEBUG_SEVERITY_NOTIFICATION" />
+		<field name="GL_DEBUG_SOURCE_API" />
+		<field name="GL_DEBUG_SOURCE_APPLICATION" />
+		<field name="GL_DEBUG_SOURCE_OTHER" />
+		<field name="GL_DEBUG_SOURCE_SHADER_COMPILER" />
+		<field name="GL_DEBUG_SOURCE_THIRD_PARTY" />
+		<field name="GL_DEBUG_SOURCE_WINDOW_SYSTEM" />
+		<field name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR" />
+		<field name="GL_DEBUG_TYPE_ERROR" />
+		<field name="GL_DEBUG_TYPE_MARKER" />
+		<field name="GL_DEBUG_TYPE_OTHER" />
+		<field name="GL_DEBUG_TYPE_PERFORMANCE" />
+		<field name="GL_DEBUG_TYPE_POP_GROUP" />
+		<field name="GL_DEBUG_TYPE_PORTABILITY" />
+		<field name="GL_DEBUG_TYPE_PUSH_GROUP" />
+		<field name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR" />
+		<field name="GL_DIFFERENCE" />
+		<field name="GL_EXCLUSION" />
+		<field name="GL_FIRST_VERTEX_CONVENTION" />
+		<field name="GL_FRACTIONAL_EVEN" />
+		<field name="GL_FRACTIONAL_ODD" />
+		<field name="GL_FRAGMENT_INTERPOLATION_OFFSET_BITS" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_LAYERED" />
+		<field name="GL_FRAMEBUFFER_DEFAULT_LAYERS" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS" />
+		<field name="GL_GEOMETRY_INPUT_TYPE" />
+		<field name="GL_GEOMETRY_OUTPUT_TYPE" />
+		<field name="GL_GEOMETRY_SHADER" />
+		<field name="GL_GEOMETRY_SHADER_BIT" />
+		<field name="GL_GEOMETRY_SHADER_INVOCATIONS" />
+		<field name="GL_GEOMETRY_VERTICES_OUT" />
+		<field name="GL_GUILTY_CONTEXT_RESET" />
+		<field name="GL_HARDLIGHT" />
+		<field name="GL_HSL_COLOR" />
+		<field name="GL_HSL_HUE" />
+		<field name="GL_HSL_LUMINOSITY" />
+		<field name="GL_HSL_SATURATION" />
+		<field name="GL_IMAGE_BUFFER" />
+		<field name="GL_IMAGE_CUBE_MAP_ARRAY" />
+		<field name="GL_INNOCENT_CONTEXT_RESET" />
+		<field name="GL_INT_IMAGE_BUFFER" />
+		<field name="GL_INT_IMAGE_CUBE_MAP_ARRAY" />
+		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY" />
+		<field name="GL_INT_SAMPLER_BUFFER" />
+		<field name="GL_INT_SAMPLER_CUBE_MAP_ARRAY" />
+		<field name="GL_ISOLINES" />
+		<field name="GL_IS_PER_PATCH" />
+		<field name="GL_LAST_VERTEX_CONVENTION" />
+		<field name="GL_LAYER_PROVOKING_VERTEX" />
+		<field name="GL_LIGHTEN" />
+		<field name="GL_LINES_ADJACENCY" />
+		<field name="GL_LINE_STRIP_ADJACENCY" />
+		<field name="GL_LOSE_CONTEXT_ON_RESET" />
+		<field name="GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_DEBUG_GROUP_STACK_DEPTH" />
+		<field name="GL_MAX_DEBUG_LOGGED_MESSAGES" />
+		<field name="GL_MAX_DEBUG_MESSAGE_LENGTH" />
+		<field name="GL_MAX_FRAGMENT_INTERPOLATION_OFFSET" />
+		<field name="GL_MAX_FRAMEBUFFER_LAYERS" />
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTERS" />
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_MAX_GEOMETRY_IMAGE_UNIFORMS" />
+		<field name="GL_MAX_GEOMETRY_INPUT_COMPONENTS" />
+		<field name="GL_MAX_GEOMETRY_OUTPUT_COMPONENTS" />
+		<field name="GL_MAX_GEOMETRY_OUTPUT_VERTICES" />
+		<field name="GL_MAX_GEOMETRY_SHADER_INVOCATIONS" />
+		<field name="GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS" />
+		<field name="GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS" />
+		<field name="GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS" />
+		<field name="GL_MAX_GEOMETRY_UNIFORM_BLOCKS" />
+		<field name="GL_MAX_GEOMETRY_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_LABEL_LENGTH" />
+		<field name="GL_MAX_PATCH_VERTICES" />
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS" />
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS" />
+		<field name="GL_MAX_TESS_CONTROL_INPUT_COMPONENTS" />
+		<field name="GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS" />
+		<field name="GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS" />
+		<field name="GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS" />
+		<field name="GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS" />
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS" />
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS" />
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS" />
+		<field name="GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS" />
+		<field name="GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS" />
+		<field name="GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS" />
+		<field name="GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS" />
+		<field name="GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS" />
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS" />
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS" />
+		<field name="GL_MAX_TESS_GEN_LEVEL" />
+		<field name="GL_MAX_TESS_PATCH_COMPONENTS" />
+		<field name="GL_MAX_TEXTURE_BUFFER_SIZE" />
+		<field name="GL_MIN_FRAGMENT_INTERPOLATION_OFFSET" />
+		<field name="GL_MIN_SAMPLE_SHADING_VALUE" />
+		<field name="GL_MULTIPLY" />
+		<field name="GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY" />
+		<field name="GL_MULTISAMPLE_LINE_WIDTH_RANGE" />
+		<field name="GL_NO_RESET_NOTIFICATION" />
+		<field name="GL_OVERLAY" />
+		<field name="GL_PATCHES" />
+		<field name="GL_PATCH_VERTICES" />
+		<field name="GL_PRIMITIVES_GENERATED" />
+		<field name="GL_PRIMITIVE_BOUNDING_BOX" />
+		<field name="GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED" />
+		<field name="GL_PROGRAM" />
+		<field name="GL_PROGRAM_PIPELINE" />
+		<field name="GL_QUADS" />
+		<field name="GL_QUERY" />
+		<field name="GL_REFERENCED_BY_GEOMETRY_SHADER" />
+		<field name="GL_REFERENCED_BY_TESS_CONTROL_SHADER" />
+		<field name="GL_REFERENCED_BY_TESS_EVALUATION_SHADER" />
+		<field name="GL_RESET_NOTIFICATION_STRATEGY" />
+		<field name="GL_SAMPLER" />
+		<field name="GL_SAMPLER_2D_MULTISAMPLE_ARRAY" />
+		<field name="GL_SAMPLER_BUFFER" />
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY" />
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW" />
+		<field name="GL_SAMPLE_SHADING" />
+		<field name="GL_SCREEN" />
+		<field name="GL_SHADER" />
+		<field name="GL_SOFTLIGHT" />
+		<field name="GL_STACK_OVERFLOW" />
+		<field name="GL_STACK_UNDERFLOW" />
+		<field name="GL_TESS_CONTROL_OUTPUT_VERTICES" />
+		<field name="GL_TESS_CONTROL_SHADER" />
+		<field name="GL_TESS_CONTROL_SHADER_BIT" />
+		<field name="GL_TESS_EVALUATION_SHADER" />
+		<field name="GL_TESS_EVALUATION_SHADER_BIT" />
+		<field name="GL_TESS_GEN_MODE" />
+		<field name="GL_TESS_GEN_POINT_MODE" />
+		<field name="GL_TESS_GEN_SPACING" />
+		<field name="GL_TESS_GEN_VERTEX_ORDER" />
+		<field name="GL_TEXTURE_2D_MULTISAMPLE_ARRAY" />
+		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY" />
+		<field name="GL_TEXTURE_BINDING_BUFFER" />
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP_ARRAY" />
+		<field name="GL_TEXTURE_BORDER_COLOR" />
+		<field name="GL_TEXTURE_BUFFER" />
+		<field name="GL_TEXTURE_BUFFER_BINDING" />
+		<field name="GL_TEXTURE_BUFFER_DATA_STORE_BINDING" />
+		<field name="GL_TEXTURE_BUFFER_OFFSET" />
+		<field name="GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT" />
+		<field name="GL_TEXTURE_BUFFER_SIZE" />
+		<field name="GL_TEXTURE_CUBE_MAP_ARRAY" />
+		<field name="GL_TRIANGLES_ADJACENCY" />
+		<field name="GL_TRIANGLE_STRIP_ADJACENCY" />
+		<field name="GL_UNDEFINED_VERTEX" />
+		<field name="GL_UNKNOWN_CONTEXT_RESET" />
+		<field name="GL_UNSIGNED_INT_IMAGE_BUFFER" />
+		<field name="GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_BUFFER" />
+		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY" />
+		<field name="GL_VERTEX_ARRAY" />
+	</class>
+	<class name="android/opengl/GLES32$DebugProc" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onMessage(IIIILjava/lang/String;)V" />
+	</class>
+	<class name="android/opengl/GLException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+	</class>
+	<class name="android/opengl/GLSurfaceView" since="3">
+		<extends name="android/view/SurfaceView" />
+		<implements name="android/view/SurfaceHolder$Callback" removed="24" />
+		<implements name="android/view/SurfaceHolder$Callback2" since="24" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getDebugFlags()I" />
+		<method name="getPreserveEGLContextOnPause()Z" since="11" />
+		<method name="getRenderMode()I" />
+		<method name="onPause()V" />
+		<method name="onResume()V" />
+		<method name="queueEvent(Ljava/lang/Runnable;)V" />
+		<method name="requestRender()V" />
+		<method name="setDebugFlags(I)V" />
+		<method name="setEGLConfigChooser(IIIIII)V" />
+		<method name="setEGLConfigChooser(Landroid/opengl/GLSurfaceView$EGLConfigChooser;)V" />
+		<method name="setEGLConfigChooser(Z)V" />
+		<method name="setEGLContextClientVersion(I)V" since="8" />
+		<method name="setEGLContextFactory(Landroid/opengl/GLSurfaceView$EGLContextFactory;)V" since="5" />
+		<method name="setEGLWindowSurfaceFactory(Landroid/opengl/GLSurfaceView$EGLWindowSurfaceFactory;)V" since="5" />
+		<method name="setGLWrapper(Landroid/opengl/GLSurfaceView$GLWrapper;)V" />
+		<method name="setPreserveEGLContextOnPause(Z)V" since="11" />
+		<method name="setRenderMode(I)V" />
+		<method name="setRenderer(Landroid/opengl/GLSurfaceView$Renderer;)V" />
+		<field name="DEBUG_CHECK_GL_ERROR" />
+		<field name="DEBUG_LOG_GL_CALLS" />
+		<field name="RENDERMODE_CONTINUOUSLY" />
+		<field name="RENDERMODE_WHEN_DIRTY" />
+	</class>
+	<class name="android/opengl/GLSurfaceView$EGLConfigChooser" since="3">
+		<extends name="java/lang/Object" />
+		<method name="chooseConfig(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;)Ljavax/microedition/khronos/egl/EGLConfig;" />
+	</class>
+	<class name="android/opengl/GLSurfaceView$EGLContextFactory" since="5">
+		<extends name="java/lang/Object" />
+		<method name="createContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;)Ljavax/microedition/khronos/egl/EGLContext;" />
+		<method name="destroyContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)V" />
+	</class>
+	<class name="android/opengl/GLSurfaceView$EGLWindowSurfaceFactory" since="5">
+		<extends name="java/lang/Object" />
+		<method name="createWindowSurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLSurface;" />
+		<method name="destroySurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)V" />
+	</class>
+	<class name="android/opengl/GLSurfaceView$GLWrapper" since="3">
+		<extends name="java/lang/Object" />
+		<method name="wrap(Ljavax/microedition/khronos/opengles/GL;)Ljavax/microedition/khronos/opengles/GL;" />
+	</class>
+	<class name="android/opengl/GLSurfaceView$Renderer" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onDrawFrame(Ljavax/microedition/khronos/opengles/GL10;)V" />
+		<method name="onSurfaceChanged(Ljavax/microedition/khronos/opengles/GL10;II)V" />
+		<method name="onSurfaceCreated(Ljavax/microedition/khronos/opengles/GL10;Ljavax/microedition/khronos/egl/EGLConfig;)V" />
+	</class>
+	<class name="android/opengl/GLU" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="gluErrorString(I)Ljava/lang/String;" />
+		<method name="gluLookAt(Ljavax/microedition/khronos/opengles/GL10;FFFFFFFFF)V" />
+		<method name="gluOrtho2D(Ljavax/microedition/khronos/opengles/GL10;FFFF)V" />
+		<method name="gluPerspective(Ljavax/microedition/khronos/opengles/GL10;FFFF)V" />
+		<method name="gluProject(FFF[FI[FI[II[FI)I" />
+		<method name="gluUnProject(FFF[FI[FI[II[FI)I" />
+	</class>
+	<class name="android/opengl/GLUtils" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getEGLErrorString(I)Ljava/lang/String;" since="14" />
+		<method name="getInternalFormat(Landroid/graphics/Bitmap;)I" />
+		<method name="getType(Landroid/graphics/Bitmap;)I" />
+		<method name="texImage2D(IIILandroid/graphics/Bitmap;I)V" />
+		<method name="texImage2D(IIILandroid/graphics/Bitmap;II)V" />
+		<method name="texImage2D(IILandroid/graphics/Bitmap;I)V" />
+		<method name="texSubImage2D(IIIILandroid/graphics/Bitmap;)V" />
+		<method name="texSubImage2D(IIIILandroid/graphics/Bitmap;II)V" />
+	</class>
+	<class name="android/opengl/Matrix" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="19" />
+		<method name="frustumM([FIFFFFFF)V" />
+		<method name="invertM([FI[FI)Z" />
+		<method name="length(FFF)F" />
+		<method name="multiplyMM([FI[FI[FI)V" />
+		<method name="multiplyMV([FI[FI[FI)V" />
+		<method name="orthoM([FIFFFFFF)V" />
+		<method name="perspectiveM([FIFFFF)V" since="14" />
+		<method name="rotateM([FIFFFF)V" />
+		<method name="rotateM([FI[FIFFFF)V" />
+		<method name="scaleM([FIFFF)V" />
+		<method name="scaleM([FI[FIFFF)V" />
+		<method name="setIdentityM([FI)V" />
+		<method name="setLookAtM([FIFFFFFFFFF)V" since="8" />
+		<method name="setRotateEulerM([FIFFF)V" />
+		<method name="setRotateM([FIFFFF)V" />
+		<method name="translateM([FIFFF)V" />
+		<method name="translateM([FI[FIFFF)V" />
+		<method name="transposeM([FI[FI)V" />
+	</class>
+	<class name="android/opengl/Visibility" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="computeBoundingSphere([FII[FI)V" />
+		<method name="frustumCullSpheres([FI[FII[III)I" />
+		<method name="visibilityTest([FI[FI[CII)I" />
+	</class>
+	<class name="android/os/AsyncTask" since="3" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="cancel(Z)Z" deprecated="30" />
+		<method name="doInBackground([Ljava/lang/Object;)Ljava/lang/Object;" deprecated="30" />
+		<method name="execute(Ljava/lang/Runnable;)V" since="11" deprecated="30" />
+		<method name="execute([Ljava/lang/Object;)Landroid/os/AsyncTask;" deprecated="30" />
+		<method name="executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/os/AsyncTask;" since="11" deprecated="30" />
+		<method name="get()Ljava/lang/Object;" deprecated="30" />
+		<method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" deprecated="30" />
+		<method name="getStatus()Landroid/os/AsyncTask$Status;" deprecated="30" />
+		<method name="isCancelled()Z" deprecated="30" />
+		<method name="onCancelled()V" deprecated="30" />
+		<method name="onCancelled(Ljava/lang/Object;)V" since="11" deprecated="30" />
+		<method name="onPostExecute(Ljava/lang/Object;)V" deprecated="30" />
+		<method name="onPreExecute()V" deprecated="30" />
+		<method name="onProgressUpdate([Ljava/lang/Object;)V" deprecated="30" />
+		<method name="publishProgress([Ljava/lang/Object;)V" deprecated="30" />
+		<field name="SERIAL_EXECUTOR" since="11" deprecated="30" />
+		<field name="THREAD_POOL_EXECUTOR" since="11" deprecated="30" />
+	</class>
+	<class name="android/os/AsyncTask$Status" since="3" deprecated="30">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/os/AsyncTask$Status;" />
+		<method name="values()[Landroid/os/AsyncTask$Status;" />
+		<field name="FINISHED" deprecated="30" />
+		<field name="PENDING" deprecated="30" />
+		<field name="RUNNING" deprecated="30" />
+	</class>
+	<class name="android/os/BadParcelableException" since="1">
+		<extends name="android/util/AndroidRuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/os/BaseBundle" since="21">
+		<extends name="java/lang/Object" />
+		<method name="clear()V" />
+		<method name="containsKey(Ljava/lang/String;)Z" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getBoolean(Ljava/lang/String;)Z" since="22" />
+		<method name="getBoolean(Ljava/lang/String;Z)Z" since="22" />
+		<method name="getBooleanArray(Ljava/lang/String;)[Z" since="22" />
+		<method name="getDouble(Ljava/lang/String;)D" />
+		<method name="getDouble(Ljava/lang/String;D)D" />
+		<method name="getDoubleArray(Ljava/lang/String;)[D" />
+		<method name="getInt(Ljava/lang/String;)I" />
+		<method name="getInt(Ljava/lang/String;I)I" />
+		<method name="getIntArray(Ljava/lang/String;)[I" />
+		<method name="getLong(Ljava/lang/String;)J" />
+		<method name="getLong(Ljava/lang/String;J)J" />
+		<method name="getLongArray(Ljava/lang/String;)[J" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="isEmpty()Z" />
+		<method name="keySet()Ljava/util/Set;" />
+		<method name="putAll(Landroid/os/PersistableBundle;)V" />
+		<method name="putBoolean(Ljava/lang/String;Z)V" since="22" />
+		<method name="putBooleanArray(Ljava/lang/String;[Z)V" since="22" />
+		<method name="putDouble(Ljava/lang/String;D)V" />
+		<method name="putDoubleArray(Ljava/lang/String;[D)V" />
+		<method name="putInt(Ljava/lang/String;I)V" />
+		<method name="putIntArray(Ljava/lang/String;[I)V" />
+		<method name="putLong(Ljava/lang/String;J)V" />
+		<method name="putLongArray(Ljava/lang/String;[J)V" />
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="putStringArray(Ljava/lang/String;[Ljava/lang/String;)V" />
+		<method name="remove(Ljava/lang/String;)V" />
+		<method name="size()I" />
+	</class>
+	<class name="android/os/BatteryManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="23" />
+		<method name="computeChargeTimeRemaining()J" since="28" />
+		<method name="getIntProperty(I)I" since="21" />
+		<method name="getLongProperty(I)J" since="21" />
+		<method name="isCharging()Z" since="23" />
+		<field name="ACTION_CHARGING" since="23" />
+		<field name="ACTION_DISCHARGING" since="23" />
+		<field name="BATTERY_HEALTH_COLD" since="11" />
+		<field name="BATTERY_HEALTH_DEAD" />
+		<field name="BATTERY_HEALTH_GOOD" />
+		<field name="BATTERY_HEALTH_OVERHEAT" />
+		<field name="BATTERY_HEALTH_OVER_VOLTAGE" />
+		<field name="BATTERY_HEALTH_UNKNOWN" />
+		<field name="BATTERY_HEALTH_UNSPECIFIED_FAILURE" />
+		<field name="BATTERY_PLUGGED_AC" />
+		<field name="BATTERY_PLUGGED_USB" />
+		<field name="BATTERY_PLUGGED_WIRELESS" since="17" />
+		<field name="BATTERY_PROPERTY_CAPACITY" since="21" />
+		<field name="BATTERY_PROPERTY_CHARGE_COUNTER" since="21" />
+		<field name="BATTERY_PROPERTY_CURRENT_AVERAGE" since="21" />
+		<field name="BATTERY_PROPERTY_CURRENT_NOW" since="21" />
+		<field name="BATTERY_PROPERTY_ENERGY_COUNTER" since="21" />
+		<field name="BATTERY_PROPERTY_STATUS" since="26" />
+		<field name="BATTERY_STATUS_CHARGING" />
+		<field name="BATTERY_STATUS_DISCHARGING" />
+		<field name="BATTERY_STATUS_FULL" />
+		<field name="BATTERY_STATUS_NOT_CHARGING" />
+		<field name="BATTERY_STATUS_UNKNOWN" />
+		<field name="EXTRA_BATTERY_LOW" since="28" />
+		<field name="EXTRA_HEALTH" since="5" />
+		<field name="EXTRA_ICON_SMALL" since="5" />
+		<field name="EXTRA_LEVEL" since="5" />
+		<field name="EXTRA_PLUGGED" since="5" />
+		<field name="EXTRA_PRESENT" since="5" />
+		<field name="EXTRA_SCALE" since="5" />
+		<field name="EXTRA_STATUS" since="5" />
+		<field name="EXTRA_TECHNOLOGY" since="5" />
+		<field name="EXTRA_TEMPERATURE" since="5" />
+		<field name="EXTRA_VOLTAGE" since="5" />
+	</class>
+	<class name="android/os/Binder" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/IBinder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="29" />
+		<method name="attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V" />
+		<method name="clearCallingIdentity()J" />
+		<method name="clearCallingWorkSource()J" since="29" />
+		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" />
+		<method name="flushPendingCommands()V" />
+		<method name="getCallingPid()I" />
+		<method name="getCallingUid()I" />
+		<method name="getCallingUidOrThrow()I" since="29" />
+		<method name="getCallingUserHandle()Landroid/os/UserHandle;" since="17" />
+		<method name="getCallingWorkSourceUid()I" since="29" />
+		<method name="joinThreadPool()V" />
+		<method name="onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z" />
+		<method name="restoreCallingIdentity(J)V" />
+		<method name="restoreCallingWorkSource(J)V" since="29" />
+		<method name="setCallingWorkSourceUid(I)J" since="29" />
+	</class>
+	<class name="android/os/BugreportManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="cancelBugreport()V" />
+		<method name="startConnectivityBugreport(Landroid/os/ParcelFileDescriptor;Ljava/util/concurrent/Executor;Landroid/os/BugreportManager$BugreportCallback;)V" />
+	</class>
+	<class name="android/os/BugreportManager$BugreportCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onEarlyReportFinished()V" />
+		<method name="onError(I)V" />
+		<method name="onFinished()V" />
+		<method name="onProgress(F)V" />
+		<field name="BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS" />
+		<field name="BUGREPORT_ERROR_INVALID_INPUT" />
+		<field name="BUGREPORT_ERROR_RUNTIME" />
+		<field name="BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT" />
+		<field name="BUGREPORT_ERROR_USER_DENIED_CONSENT" />
+	</class>
+	<class name="android/os/Build" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFingerprintedPartitions()Ljava/util/List;" since="29" />
+		<method name="getRadioVersion()Ljava/lang/String;" since="14" />
+		<method name="getSerial()Ljava/lang/String;" since="26" />
+		<field name="BOARD" />
+		<field name="BOOTLOADER" since="8" />
+		<field name="BRAND" />
+		<field name="CPU_ABI" since="4" deprecated="21" />
+		<field name="CPU_ABI2" since="8" deprecated="21" />
+		<field name="DEVICE" />
+		<field name="DISPLAY" since="3" />
+		<field name="FINGERPRINT" />
+		<field name="HARDWARE" since="8" />
+		<field name="HOST" />
+		<field name="ID" />
+		<field name="MANUFACTURER" since="4" />
+		<field name="MODEL" />
+		<field name="ODM_SKU" since="31" />
+		<field name="PRODUCT" />
+		<field name="RADIO" since="8" deprecated="15" />
+		<field name="SERIAL" since="9" deprecated="26" />
+		<field name="SKU" since="31" />
+		<field name="SOC_MANUFACTURER" since="31" />
+		<field name="SOC_MODEL" since="31" />
+		<field name="SUPPORTED_32_BIT_ABIS" since="21" />
+		<field name="SUPPORTED_64_BIT_ABIS" since="21" />
+		<field name="SUPPORTED_ABIS" since="21" />
+		<field name="TAGS" />
+		<field name="TIME" />
+		<field name="TYPE" />
+		<field name="UNKNOWN" since="8" />
+		<field name="USER" />
+	</class>
+	<class name="android/os/Build$Partition" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getBuildTimeMillis()J" />
+		<method name="getFingerprint()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<field name="PARTITION_NAME_SYSTEM" />
+	</class>
+	<class name="android/os/Build$VERSION" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="BASE_OS" since="23" />
+		<field name="CODENAME" since="4" />
+		<field name="INCREMENTAL" />
+		<field name="MEDIA_PERFORMANCE_CLASS" since="31" />
+		<field name="PREVIEW_SDK_INT" since="23" />
+		<field name="RELEASE" />
+		<field name="RELEASE_OR_CODENAME" since="30" />
+		<field name="SDK" deprecated="15" />
+		<field name="SDK_INT" since="4" />
+		<field name="SECURITY_PATCH" since="23" />
+	</class>
+	<class name="android/os/Build$VERSION_CODES" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="BASE" />
+		<field name="BASE_1_1" />
+		<field name="CUPCAKE" />
+		<field name="CUR_DEVELOPMENT" />
+		<field name="DONUT" />
+		<field name="ECLAIR" since="5" />
+		<field name="ECLAIR_0_1" since="6" />
+		<field name="ECLAIR_MR1" since="7" />
+		<field name="FROYO" since="8" />
+		<field name="GINGERBREAD" since="9" />
+		<field name="GINGERBREAD_MR1" since="10" />
+		<field name="HONEYCOMB" since="11" />
+		<field name="HONEYCOMB_MR1" since="12" />
+		<field name="HONEYCOMB_MR2" since="13" />
+		<field name="ICE_CREAM_SANDWICH" since="14" />
+		<field name="ICE_CREAM_SANDWICH_MR1" since="15" />
+		<field name="JELLY_BEAN" since="16" />
+		<field name="JELLY_BEAN_MR1" since="17" />
+		<field name="JELLY_BEAN_MR2" since="18" />
+		<field name="KITKAT" since="19" />
+		<field name="KITKAT_WATCH" since="20" />
+		<field name="LOLLIPOP" since="21" />
+		<field name="LOLLIPOP_MR1" since="22" />
+		<field name="M" since="23" />
+		<field name="N" since="24" />
+		<field name="N_MR1" since="25" />
+		<field name="O" since="26" />
+		<field name="O_MR1" since="27" />
+		<field name="P" since="28" />
+		<field name="Q" since="29" />
+		<field name="R" since="30" />
+		<field name="S" since="31" />
+		<field name="S_V2" since="33" />
+	</class>
+	<class name="android/os/Bundle" since="1">
+		<extends name="android/os/BaseBundle" since="21" />
+		<extends name="java/lang/Object" removed="21" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/os/Bundle;)V" />
+		<method name="&lt;init&gt;(Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="&lt;init&gt;(Ljava/lang/ClassLoader;)V" />
+		<method name="clear()V" />
+		<method name="containsKey(Ljava/lang/String;)Z" removed="21" />
+		<method name="deepCopy()Landroid/os/Bundle;" since="26" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" removed="21" />
+		<method name="getBinder(Ljava/lang/String;)Landroid/os/IBinder;" since="18" />
+		<method name="getBoolean(Ljava/lang/String;)Z" removed="22" />
+		<method name="getBoolean(Ljava/lang/String;Z)Z" removed="22" />
+		<method name="getBooleanArray(Ljava/lang/String;)[Z" removed="22" />
+		<method name="getBundle(Ljava/lang/String;)Landroid/os/Bundle;" />
+		<method name="getByte(Ljava/lang/String;)B" />
+		<method name="getByte(Ljava/lang/String;B)Ljava/lang/Byte;" />
+		<method name="getByteArray(Ljava/lang/String;)[B" />
+		<method name="getChar(Ljava/lang/String;)C" />
+		<method name="getChar(Ljava/lang/String;C)C" />
+		<method name="getCharArray(Ljava/lang/String;)[C" />
+		<method name="getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;" />
+		<method name="getCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="12" />
+		<method name="getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;" since="8" />
+		<method name="getCharSequenceArrayList(Ljava/lang/String;)Ljava/util/ArrayList;" since="8" />
+		<method name="getClassLoader()Ljava/lang/ClassLoader;" since="11" />
+		<method name="getDouble(Ljava/lang/String;)D" removed="21" />
+		<method name="getDouble(Ljava/lang/String;D)D" removed="21" />
+		<method name="getDoubleArray(Ljava/lang/String;)[D" removed="21" />
+		<method name="getFloat(Ljava/lang/String;)F" />
+		<method name="getFloat(Ljava/lang/String;F)F" />
+		<method name="getFloatArray(Ljava/lang/String;)[F" />
+		<method name="getInt(Ljava/lang/String;)I" removed="21" />
+		<method name="getInt(Ljava/lang/String;I)I" removed="21" />
+		<method name="getIntArray(Ljava/lang/String;)[I" removed="21" />
+		<method name="getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="getLong(Ljava/lang/String;)J" removed="21" />
+		<method name="getLong(Ljava/lang/String;J)J" removed="21" />
+		<method name="getLongArray(Ljava/lang/String;)[J" removed="21" />
+		<method name="getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;" />
+		<method name="getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;" />
+		<method name="getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="getSerializable(Ljava/lang/String;)Ljava/io/Serializable;" />
+		<method name="getShort(Ljava/lang/String;)S" />
+		<method name="getShort(Ljava/lang/String;S)S" />
+		<method name="getShortArray(Ljava/lang/String;)[S" />
+		<method name="getSize(Ljava/lang/String;)Landroid/util/Size;" since="21" />
+		<method name="getSizeF(Ljava/lang/String;)Landroid/util/SizeF;" since="21" />
+		<method name="getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" removed="21" />
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="12" removed="21" />
+		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;" removed="21" />
+		<method name="getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="hasFileDescriptors()Z" />
+		<method name="isEmpty()Z" removed="21" />
+		<method name="keySet()Ljava/util/Set;" removed="21" />
+		<method name="putAll(Landroid/os/Bundle;)V" />
+		<method name="putBinder(Ljava/lang/String;Landroid/os/IBinder;)V" since="18" />
+		<method name="putBoolean(Ljava/lang/String;Z)V" removed="22" />
+		<method name="putBooleanArray(Ljava/lang/String;[Z)V" removed="22" />
+		<method name="putBundle(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="putByte(Ljava/lang/String;B)V" />
+		<method name="putByteArray(Ljava/lang/String;[B)V" />
+		<method name="putChar(Ljava/lang/String;C)V" />
+		<method name="putCharArray(Ljava/lang/String;[C)V" />
+		<method name="putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V" />
+		<method name="putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V" since="8" />
+		<method name="putCharSequenceArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V" since="8" />
+		<method name="putDouble(Ljava/lang/String;D)V" removed="21" />
+		<method name="putDoubleArray(Ljava/lang/String;[D)V" removed="21" />
+		<method name="putFloat(Ljava/lang/String;F)V" />
+		<method name="putFloatArray(Ljava/lang/String;[F)V" />
+		<method name="putInt(Ljava/lang/String;I)V" removed="21" />
+		<method name="putIntArray(Ljava/lang/String;[I)V" removed="21" />
+		<method name="putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V" />
+		<method name="putLong(Ljava/lang/String;J)V" removed="21" />
+		<method name="putLongArray(Ljava/lang/String;[J)V" removed="21" />
+		<method name="putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V" />
+		<method name="putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V" />
+		<method name="putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V" />
+		<method name="putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V" />
+		<method name="putShort(Ljava/lang/String;S)V" />
+		<method name="putShortArray(Ljava/lang/String;[S)V" />
+		<method name="putSize(Ljava/lang/String;Landroid/util/Size;)V" since="21" />
+		<method name="putSizeF(Ljava/lang/String;Landroid/util/SizeF;)V" since="21" />
+		<method name="putSparseParcelableArray(Ljava/lang/String;Landroid/util/SparseArray;)V" />
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V" removed="21" />
+		<method name="putStringArray(Ljava/lang/String;[Ljava/lang/String;)V" removed="21" />
+		<method name="putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<method name="remove(Ljava/lang/String;)V" />
+		<method name="setClassLoader(Ljava/lang/ClassLoader;)V" />
+		<method name="size()I" removed="21" />
+		<field name="CREATOR" />
+		<field name="EMPTY" />
+	</class>
+	<class name="android/os/CancellationSignal" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cancel()V" />
+		<method name="isCanceled()Z" />
+		<method name="setOnCancelListener(Landroid/os/CancellationSignal$OnCancelListener;)V" />
+		<method name="throwIfCanceled()V" />
+	</class>
+	<class name="android/os/CancellationSignal$OnCancelListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onCancel()V" />
+	</class>
+	<class name="android/os/CombinedVibration" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createParallel(Landroid/os/VibrationEffect;)Landroid/os/CombinedVibration;" />
+		<method name="startParallel()Landroid/os/CombinedVibration$ParallelCombination;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/CombinedVibration$ParallelCombination" since="31">
+		<extends name="java/lang/Object" />
+		<method name="addVibrator(ILandroid/os/VibrationEffect;)Landroid/os/CombinedVibration$ParallelCombination;" />
+		<method name="combine()Landroid/os/CombinedVibration;" />
+	</class>
+	<class name="android/os/ConditionVariable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="block()V" />
+		<method name="block(J)Z" />
+		<method name="close()V" />
+		<method name="open()V" />
+	</class>
+	<class name="android/os/CountDownTimer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(JJ)V" />
+		<method name="cancel()V" />
+		<method name="onFinish()V" />
+		<method name="onTick(J)V" />
+		<method name="start()Landroid/os/CountDownTimer;" />
+	</class>
+	<class name="android/os/CpuUsageInfo" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getActive()J" />
+		<method name="getTotal()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/DeadObjectException" since="1">
+		<extends name="android/os/RemoteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="23" />
+	</class>
+	<class name="android/os/DeadSystemException" since="24">
+		<extends name="android/os/DeadObjectException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/os/Debug" since="1">
+		<extends name="java/lang/Object" />
+		<method name="attachJvmtiAgent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V" since="28" />
+		<method name="changeDebugPort(I)V" deprecated="15" />
+		<method name="dumpHprofData(Ljava/lang/String;)V" since="3" />
+		<method name="dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;[Ljava/lang/String;)Z" since="8" />
+		<method name="enableEmulatorTraceOutput()V" />
+		<method name="getBinderDeathObjectCount()I" />
+		<method name="getBinderLocalObjectCount()I" />
+		<method name="getBinderProxyObjectCount()I" />
+		<method name="getBinderReceivedTransactions()I" />
+		<method name="getBinderSentTransactions()I" />
+		<method name="getGlobalAllocCount()I" deprecated="23" />
+		<method name="getGlobalAllocSize()I" deprecated="23" />
+		<method name="getGlobalClassInitCount()I" since="8" deprecated="23" />
+		<method name="getGlobalClassInitTime()I" since="8" deprecated="23" />
+		<method name="getGlobalExternalAllocCount()I" deprecated="15" />
+		<method name="getGlobalExternalAllocSize()I" deprecated="15" />
+		<method name="getGlobalExternalFreedCount()I" deprecated="15" />
+		<method name="getGlobalExternalFreedSize()I" deprecated="15" />
+		<method name="getGlobalFreedCount()I" deprecated="23" />
+		<method name="getGlobalFreedSize()I" deprecated="23" />
+		<method name="getGlobalGcInvocationCount()I" deprecated="23" />
+		<method name="getLoadedClassCount()I" />
+		<method name="getMemoryInfo(Landroid/os/Debug$MemoryInfo;)V" />
+		<method name="getNativeHeapAllocatedSize()J" />
+		<method name="getNativeHeapFreeSize()J" />
+		<method name="getNativeHeapSize()J" />
+		<method name="getPss()J" since="14" />
+		<method name="getRuntimeStat(Ljava/lang/String;)Ljava/lang/String;" since="23" />
+		<method name="getRuntimeStats()Ljava/util/Map;" since="23" />
+		<method name="getThreadAllocCount()I" deprecated="23" />
+		<method name="getThreadAllocSize()I" deprecated="23" />
+		<method name="getThreadExternalAllocCount()I" deprecated="15" />
+		<method name="getThreadExternalAllocSize()I" deprecated="15" />
+		<method name="getThreadGcInvocationCount()I" deprecated="23" />
+		<method name="isDebuggerConnected()Z" />
+		<method name="printLoadedClasses(I)V" />
+		<method name="resetAllCounts()V" deprecated="23" />
+		<method name="resetGlobalAllocCount()V" deprecated="23" />
+		<method name="resetGlobalAllocSize()V" deprecated="23" />
+		<method name="resetGlobalClassInitCount()V" since="8" deprecated="23" />
+		<method name="resetGlobalClassInitTime()V" since="8" deprecated="23" />
+		<method name="resetGlobalExternalAllocCount()V" deprecated="15" />
+		<method name="resetGlobalExternalAllocSize()V" deprecated="15" />
+		<method name="resetGlobalExternalFreedCount()V" deprecated="15" />
+		<method name="resetGlobalExternalFreedSize()V" deprecated="15" />
+		<method name="resetGlobalFreedCount()V" deprecated="23" />
+		<method name="resetGlobalFreedSize()V" deprecated="23" />
+		<method name="resetGlobalGcInvocationCount()V" deprecated="23" />
+		<method name="resetThreadAllocCount()V" deprecated="23" />
+		<method name="resetThreadAllocSize()V" deprecated="23" />
+		<method name="resetThreadExternalAllocCount()V" deprecated="15" />
+		<method name="resetThreadExternalAllocSize()V" deprecated="15" />
+		<method name="resetThreadGcInvocationCount()V" deprecated="23" />
+		<method name="setAllocationLimit(I)I" deprecated="15" />
+		<method name="setGlobalAllocationLimit(I)I" deprecated="15" />
+		<method name="startAllocCounting()V" deprecated="18" />
+		<method name="startMethodTracing()V" />
+		<method name="startMethodTracing(Ljava/lang/String;)V" />
+		<method name="startMethodTracing(Ljava/lang/String;I)V" />
+		<method name="startMethodTracing(Ljava/lang/String;II)V" />
+		<method name="startMethodTracingSampling(Ljava/lang/String;II)V" since="21" />
+		<method name="startNativeTracing()V" />
+		<method name="stopAllocCounting()V" deprecated="18" />
+		<method name="stopMethodTracing()V" />
+		<method name="stopNativeTracing()V" />
+		<method name="threadCpuTimeNanos()J" />
+		<method name="waitForDebugger()V" />
+		<method name="waitingForDebugger()Z" />
+		<field name="SHOW_CLASSLOADER" />
+		<field name="SHOW_FULL_DETAIL" />
+		<field name="SHOW_INITIALIZED" />
+		<field name="TRACE_COUNT_ALLOCS" deprecated="23" />
+	</class>
+	<class name="android/os/Debug$InstructionCount" since="1" deprecated="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="collect()Z" deprecated="29" />
+		<method name="globalMethodInvocations()I" deprecated="29" />
+		<method name="globalTotal()I" deprecated="29" />
+		<method name="resetAndStart()Z" deprecated="29" />
+	</class>
+	<class name="android/os/Debug$MemoryInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="5" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getMemoryStat(Ljava/lang/String;)Ljava/lang/String;" since="23" />
+		<method name="getMemoryStats()Ljava/util/Map;" since="23" />
+		<method name="getOtherLabel(I)Ljava/lang/String;" since="14" removed="19" />
+		<method name="getOtherPrivateDirty(I)I" since="14" removed="19" />
+		<method name="getOtherPss(I)I" since="14" removed="19" />
+		<method name="getOtherSharedDirty(I)I" since="14" removed="19" />
+		<method name="getTotalPrivateClean()I" since="19" />
+		<method name="getTotalPrivateDirty()I" since="5" />
+		<method name="getTotalPss()I" since="5" />
+		<method name="getTotalSharedClean()I" since="19" />
+		<method name="getTotalSharedDirty()I" since="5" />
+		<method name="getTotalSwappablePss()I" since="19" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="5" />
+		<field name="CREATOR" since="5" />
+		<field name="dalvikPrivateDirty" />
+		<field name="dalvikPss" />
+		<field name="dalvikSharedDirty" />
+		<field name="nativePrivateDirty" />
+		<field name="nativePss" />
+		<field name="nativeSharedDirty" />
+		<field name="otherPrivateDirty" />
+		<field name="otherPss" />
+		<field name="otherSharedDirty" />
+	</class>
+	<class name="android/os/DropBoxManager" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addData(Ljava/lang/String;[BI)V" />
+		<method name="addFile(Ljava/lang/String;Ljava/io/File;I)V" />
+		<method name="addText(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;" />
+		<method name="isTagEnabled(Ljava/lang/String;)Z" />
+		<field name="ACTION_DROPBOX_ENTRY_ADDED" since="11" />
+		<field name="EXTRA_DROPPED_COUNT" since="29" />
+		<field name="EXTRA_TAG" since="11" />
+		<field name="EXTRA_TIME" since="11" />
+		<field name="IS_EMPTY" />
+		<field name="IS_GZIPPED" />
+		<field name="IS_TEXT" />
+	</class>
+	<class name="android/os/DropBoxManager$Entry" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/io/Closeable" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/String;J)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;JLandroid/os/ParcelFileDescriptor;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;JLjava/io/File;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;JLjava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;J[BI)V" />
+		<method name="close()V" />
+		<method name="getFlags()I" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getTag()Ljava/lang/String;" />
+		<method name="getText(I)Ljava/lang/String;" />
+		<method name="getTimeMillis()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/Environment" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDataDirectory()Ljava/io/File;" />
+		<method name="getDownloadCacheDirectory()Ljava/io/File;" />
+		<method name="getExternalStorageDirectory()Ljava/io/File;" deprecated="29" />
+		<method name="getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File;" since="8" deprecated="29" />
+		<method name="getExternalStorageState()Ljava/lang/String;" />
+		<method name="getExternalStorageState(Ljava/io/File;)Ljava/lang/String;" since="21" />
+		<method name="getRootDirectory()Ljava/io/File;" />
+		<method name="getStorageDirectory()Ljava/io/File;" since="30" />
+		<method name="getStorageState(Ljava/io/File;)Ljava/lang/String;" since="19" deprecated="21" />
+		<method name="isExternalStorageEmulated()Z" since="11" />
+		<method name="isExternalStorageEmulated(Ljava/io/File;)Z" since="21" />
+		<method name="isExternalStorageLegacy()Z" since="29" />
+		<method name="isExternalStorageLegacy(Ljava/io/File;)Z" since="29" />
+		<method name="isExternalStorageManager()Z" since="30" />
+		<method name="isExternalStorageManager(Ljava/io/File;)Z" since="30" />
+		<method name="isExternalStorageRemovable()Z" since="9" />
+		<method name="isExternalStorageRemovable(Ljava/io/File;)Z" since="21" />
+		<field name="DIRECTORY_ALARMS" since="8" />
+		<field name="DIRECTORY_AUDIOBOOKS" since="29" />
+		<field name="DIRECTORY_DCIM" since="8" />
+		<field name="DIRECTORY_DOCUMENTS" since="19" />
+		<field name="DIRECTORY_DOWNLOADS" since="8" />
+		<field name="DIRECTORY_MOVIES" since="8" />
+		<field name="DIRECTORY_MUSIC" since="8" />
+		<field name="DIRECTORY_NOTIFICATIONS" since="8" />
+		<field name="DIRECTORY_PICTURES" since="8" />
+		<field name="DIRECTORY_PODCASTS" since="8" />
+		<field name="DIRECTORY_RECORDINGS" since="31" />
+		<field name="DIRECTORY_RINGTONES" since="8" />
+		<field name="DIRECTORY_SCREENSHOTS" since="29" />
+		<field name="MEDIA_BAD_REMOVAL" />
+		<field name="MEDIA_CHECKING" since="3" />
+		<field name="MEDIA_EJECTING" since="23" />
+		<field name="MEDIA_MOUNTED" />
+		<field name="MEDIA_MOUNTED_READ_ONLY" />
+		<field name="MEDIA_NOFS" since="3" />
+		<field name="MEDIA_REMOVED" />
+		<field name="MEDIA_SHARED" />
+		<field name="MEDIA_UNKNOWN" since="19" />
+		<field name="MEDIA_UNMOUNTABLE" />
+		<field name="MEDIA_UNMOUNTED" />
+	</class>
+	<class name="android/os/FileObserver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" since="29" />
+		<method name="&lt;init&gt;(Ljava/io/File;I)V" since="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/util/List;)V" since="29" />
+		<method name="&lt;init&gt;(Ljava/util/List;I)V" since="29" />
+		<method name="onEvent(ILjava/lang/String;)V" />
+		<method name="startWatching()V" />
+		<method name="stopWatching()V" />
+		<field name="ACCESS" />
+		<field name="ALL_EVENTS" />
+		<field name="ATTRIB" />
+		<field name="CLOSE_NOWRITE" />
+		<field name="CLOSE_WRITE" />
+		<field name="CREATE" />
+		<field name="DELETE" />
+		<field name="DELETE_SELF" />
+		<field name="MODIFY" />
+		<field name="MOVED_FROM" />
+		<field name="MOVED_TO" />
+		<field name="MOVE_SELF" />
+		<field name="OPEN" />
+	</class>
+	<class name="android/os/FileUriExposedException" since="24">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/os/FileUtils" since="29">
+		<extends name="java/lang/Object" />
+		<method name="closeQuietly(Ljava/io/FileDescriptor;)V" deprecated="30" />
+		<method name="closeQuietly(Ljava/lang/AutoCloseable;)V" deprecated="30" />
+		<method name="copy(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;)J" />
+		<method name="copy(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J" />
+		<method name="copy(Ljava/io/InputStream;Ljava/io/OutputStream;)J" />
+		<method name="copy(Ljava/io/InputStream;Ljava/io/OutputStream;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J" />
+	</class>
+	<class name="android/os/FileUtils$ProgressListener" since="29">
+		<extends name="java/lang/Object" />
+		<method name="onProgress(J)V" />
+	</class>
+	<class name="android/os/Handler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/os/Handler$Callback;)V" since="3" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/os/Looper;)V" />
+		<method name="&lt;init&gt;(Landroid/os/Looper;Landroid/os/Handler$Callback;)V" since="3" />
+		<method name="createAsync(Landroid/os/Looper;)Landroid/os/Handler;" since="28" />
+		<method name="createAsync(Landroid/os/Looper;Landroid/os/Handler$Callback;)Landroid/os/Handler;" since="28" />
+		<method name="dispatchMessage(Landroid/os/Message;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getLooper()Landroid/os/Looper;" />
+		<method name="getMessageName(Landroid/os/Message;)Ljava/lang/String;" since="14" />
+		<method name="handleMessage(Landroid/os/Message;)V" />
+		<method name="hasCallbacks(Ljava/lang/Runnable;)Z" since="29" />
+		<method name="hasMessages(I)Z" />
+		<method name="hasMessages(ILjava/lang/Object;)Z" />
+		<method name="obtainMessage()Landroid/os/Message;" />
+		<method name="obtainMessage(I)Landroid/os/Message;" />
+		<method name="obtainMessage(III)Landroid/os/Message;" />
+		<method name="obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;" />
+		<method name="obtainMessage(ILjava/lang/Object;)Landroid/os/Message;" />
+		<method name="post(Ljava/lang/Runnable;)Z" />
+		<method name="postAtFrontOfQueue(Ljava/lang/Runnable;)Z" />
+		<method name="postAtTime(Ljava/lang/Runnable;J)Z" />
+		<method name="postAtTime(Ljava/lang/Runnable;Ljava/lang/Object;J)Z" />
+		<method name="postDelayed(Ljava/lang/Runnable;J)Z" />
+		<method name="postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)Z" since="28" />
+		<method name="removeCallbacks(Ljava/lang/Runnable;)V" />
+		<method name="removeCallbacks(Ljava/lang/Runnable;Ljava/lang/Object;)V" />
+		<method name="removeCallbacksAndMessages(Ljava/lang/Object;)V" />
+		<method name="removeMessages(I)V" />
+		<method name="removeMessages(ILjava/lang/Object;)V" />
+		<method name="sendEmptyMessage(I)Z" />
+		<method name="sendEmptyMessageAtTime(IJ)Z" />
+		<method name="sendEmptyMessageDelayed(IJ)Z" />
+		<method name="sendMessage(Landroid/os/Message;)Z" />
+		<method name="sendMessageAtFrontOfQueue(Landroid/os/Message;)Z" />
+		<method name="sendMessageAtTime(Landroid/os/Message;J)Z" />
+		<method name="sendMessageDelayed(Landroid/os/Message;J)Z" />
+	</class>
+	<class name="android/os/Handler$Callback" since="3">
+		<extends name="java/lang/Object" />
+		<method name="handleMessage(Landroid/os/Message;)Z" />
+	</class>
+	<class name="android/os/HandlerThread" since="1">
+		<extends name="java/lang/Thread" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="getLooper()Landroid/os/Looper;" />
+		<method name="getThreadId()I" />
+		<method name="onLooperPrepared()V" />
+		<method name="quit()Z" since="5" />
+		<method name="quitSafely()Z" since="18" />
+	</class>
+	<class name="android/os/HardwarePropertiesManager" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getCpuUsages()[Landroid/os/CpuUsageInfo;" />
+		<method name="getDeviceTemperatures(II)[F" />
+		<method name="getFanSpeeds()[F" />
+		<field name="DEVICE_TEMPERATURE_BATTERY" />
+		<field name="DEVICE_TEMPERATURE_CPU" />
+		<field name="DEVICE_TEMPERATURE_GPU" />
+		<field name="DEVICE_TEMPERATURE_SKIN" />
+		<field name="TEMPERATURE_CURRENT" />
+		<field name="TEMPERATURE_SHUTDOWN" />
+		<field name="TEMPERATURE_THROTTLING" />
+		<field name="TEMPERATURE_THROTTLING_BELOW_VR_MIN" />
+		<field name="UNDEFINED_TEMPERATURE" />
+	</class>
+	<class name="android/os/IBinder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V" since="3" />
+		<method name="dumpAsync(Ljava/io/FileDescriptor;[Ljava/lang/String;)V" since="13" />
+		<method name="getInterfaceDescriptor()Ljava/lang/String;" />
+		<method name="getSuggestedMaxIpcSizeBytes()I" since="30" />
+		<method name="isBinderAlive()Z" />
+		<method name="linkToDeath(Landroid/os/IBinder$DeathRecipient;I)V" />
+		<method name="pingBinder()Z" />
+		<method name="queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;" />
+		<method name="transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z" />
+		<method name="unlinkToDeath(Landroid/os/IBinder$DeathRecipient;I)Z" />
+		<field name="DUMP_TRANSACTION" />
+		<field name="FIRST_CALL_TRANSACTION" />
+		<field name="FLAG_ONEWAY" />
+		<field name="INTERFACE_TRANSACTION" />
+		<field name="LAST_CALL_TRANSACTION" />
+		<field name="LIKE_TRANSACTION" since="15" />
+		<field name="PING_TRANSACTION" />
+		<field name="TWEET_TRANSACTION" since="13" />
+	</class>
+	<class name="android/os/IBinder$DeathRecipient" since="1">
+		<extends name="java/lang/Object" />
+		<method name="binderDied()V" />
+	</class>
+	<class name="android/os/IInterface" since="1">
+		<extends name="java/lang/Object" />
+		<method name="asBinder()Landroid/os/IBinder;" />
+	</class>
+	<class name="android/os/LimitExceededException" since="30">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/os/LocaleList" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;([Ljava/util/Locale;)V" />
+		<method name="forLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;" />
+		<method name="get(I)Ljava/util/Locale;" />
+		<method name="getAdjustedDefault()Landroid/os/LocaleList;" />
+		<method name="getDefault()Landroid/os/LocaleList;" />
+		<method name="getEmptyLocaleList()Landroid/os/LocaleList;" />
+		<method name="getFirstMatch([Ljava/lang/String;)Ljava/util/Locale;" />
+		<method name="indexOf(Ljava/util/Locale;)I" />
+		<method name="isEmpty()Z" />
+		<method name="isPseudoLocale(Ljava/lang/Object;)Z" since="29" />
+		<method name="setDefault(Landroid/os/LocaleList;)V" />
+		<method name="size()I" />
+		<method name="toLanguageTags()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/Looper" since="1">
+		<extends name="java/lang/Object" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getMainLooper()Landroid/os/Looper;" />
+		<method name="getQueue()Landroid/os/MessageQueue;" since="23" />
+		<method name="getThread()Ljava/lang/Thread;" since="3" />
+		<method name="isCurrentThread()Z" since="23" />
+		<method name="loop()V" />
+		<method name="myLooper()Landroid/os/Looper;" />
+		<method name="myQueue()Landroid/os/MessageQueue;" />
+		<method name="prepare()V" />
+		<method name="prepareMainLooper()V" deprecated="30" />
+		<method name="quit()V" />
+		<method name="quitSafely()V" since="18" />
+		<method name="setMessageLogging(Landroid/util/Printer;)V" />
+	</class>
+	<class name="android/os/MemoryFile" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="allowPurging(Z)Z" deprecated="27" />
+		<method name="close()V" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="isPurgingAllowed()Z" deprecated="27" />
+		<method name="length()I" />
+		<method name="readBytes([BIII)I" />
+		<method name="writeBytes([BIII)V" />
+	</class>
+	<class name="android/os/Message" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="copyFrom(Landroid/os/Message;)V" />
+		<method name="getCallback()Ljava/lang/Runnable;" />
+		<method name="getData()Landroid/os/Bundle;" />
+		<method name="getTarget()Landroid/os/Handler;" />
+		<method name="getWhen()J" />
+		<method name="isAsynchronous()Z" since="22" />
+		<method name="obtain()Landroid/os/Message;" />
+		<method name="obtain(Landroid/os/Handler;)Landroid/os/Message;" />
+		<method name="obtain(Landroid/os/Handler;I)Landroid/os/Message;" />
+		<method name="obtain(Landroid/os/Handler;III)Landroid/os/Message;" />
+		<method name="obtain(Landroid/os/Handler;IIILjava/lang/Object;)Landroid/os/Message;" />
+		<method name="obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;" />
+		<method name="obtain(Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/os/Message;" />
+		<method name="obtain(Landroid/os/Message;)Landroid/os/Message;" />
+		<method name="peekData()Landroid/os/Bundle;" />
+		<method name="recycle()V" />
+		<method name="sendToTarget()V" />
+		<method name="setAsynchronous(Z)V" since="22" />
+		<method name="setData(Landroid/os/Bundle;)V" />
+		<method name="setTarget(Landroid/os/Handler;)V" />
+		<field name="CREATOR" />
+		<field name="arg1" />
+		<field name="arg2" />
+		<field name="obj" />
+		<field name="replyTo" />
+		<field name="sendingUid" since="21" />
+		<field name="what" />
+	</class>
+	<class name="android/os/MessageQueue" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V" />
+		<method name="addOnFileDescriptorEventListener(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V" since="23" />
+		<method name="isIdle()Z" since="23" />
+		<method name="removeIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V" />
+		<method name="removeOnFileDescriptorEventListener(Ljava/io/FileDescriptor;)V" since="23" />
+	</class>
+	<class name="android/os/MessageQueue$IdleHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="queueIdle()Z" />
+	</class>
+	<class name="android/os/MessageQueue$OnFileDescriptorEventListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I" />
+		<field name="EVENT_ERROR" />
+		<field name="EVENT_INPUT" />
+		<field name="EVENT_OUTPUT" />
+	</class>
+	<class name="android/os/Messenger" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Handler;)V" />
+		<method name="&lt;init&gt;(Landroid/os/IBinder;)V" />
+		<method name="getBinder()Landroid/os/IBinder;" />
+		<method name="readMessengerOrNullFromParcel(Landroid/os/Parcel;)Landroid/os/Messenger;" />
+		<method name="send(Landroid/os/Message;)V" />
+		<method name="writeMessengerOrNullToParcel(Landroid/os/Messenger;Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/NetworkOnMainThreadException" since="11">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/os/OperationCanceledException" since="16">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/os/OutcomeReceiver" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onError(Ljava/lang/Throwable;)V" />
+		<method name="onResult(Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/os/Parcel" since="1">
+		<extends name="java/lang/Object" />
+		<method name="appendFrom(Landroid/os/Parcel;II)V" />
+		<method name="createBinderArray()[Landroid/os/IBinder;" />
+		<method name="createBinderArrayList()Ljava/util/ArrayList;" />
+		<method name="createBooleanArray()[Z" />
+		<method name="createByteArray()[B" />
+		<method name="createCharArray()[C" />
+		<method name="createDoubleArray()[D" />
+		<method name="createFloatArray()[F" />
+		<method name="createIntArray()[I" />
+		<method name="createLongArray()[J" />
+		<method name="createStringArray()[Ljava/lang/String;" />
+		<method name="createStringArrayList()Ljava/util/ArrayList;" />
+		<method name="createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;" />
+		<method name="createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;" />
+		<method name="createTypedArrayMap(Landroid/os/Parcelable$Creator;)Landroid/util/ArrayMap;" since="29" />
+		<method name="createTypedSparseArray(Landroid/os/Parcelable$Creator;)Landroid/util/SparseArray;" since="29" />
+		<method name="dataAvail()I" />
+		<method name="dataCapacity()I" />
+		<method name="dataPosition()I" />
+		<method name="dataSize()I" />
+		<method name="enforceInterface(Ljava/lang/String;)V" />
+		<method name="hasFileDescriptors()Z" />
+		<method name="marshall()[B" />
+		<method name="obtain()Landroid/os/Parcel;" />
+		<method name="obtain(I)Landroid/os/Parcel;" removed="21" />
+		<method name="readArray(Ljava/lang/ClassLoader;)[Ljava/lang/Object;" />
+		<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;" />
+		<method name="readBinderArray([Landroid/os/IBinder;)V" />
+		<method name="readBinderList(Ljava/util/List;)V" />
+		<method name="readBoolean()Z" since="29" />
+		<method name="readBooleanArray([Z)V" />
+		<method name="readBundle()Landroid/os/Bundle;" />
+		<method name="readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;" />
+		<method name="readByte()B" />
+		<method name="readByteArray([B)V" />
+		<method name="readCharArray([C)V" />
+		<method name="readDouble()D" />
+		<method name="readDoubleArray([D)V" />
+		<method name="readException()V" />
+		<method name="readException(ILjava/lang/String;)V" />
+		<method name="readFileDescriptor()Landroid/os/ParcelFileDescriptor;" />
+		<method name="readFloat()F" />
+		<method name="readFloatArray([F)V" />
+		<method name="readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;" />
+		<method name="readInt()I" />
+		<method name="readIntArray([I)V" />
+		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;)V" />
+		<method name="readLong()J" />
+		<method name="readLongArray([J)V" />
+		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V" />
+		<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;" />
+		<method name="readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;" />
+		<method name="readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;" since="30" />
+		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;" since="29" />
+		<method name="readPersistableBundle()Landroid/os/PersistableBundle;" since="21" />
+		<method name="readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;" since="21" />
+		<method name="readSerializable()Ljava/io/Serializable;" />
+		<method name="readSize()Landroid/util/Size;" since="21" />
+		<method name="readSizeF()Landroid/util/SizeF;" since="21" />
+		<method name="readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;" />
+		<method name="readSparseBooleanArray()Landroid/util/SparseBooleanArray;" />
+		<method name="readString()Ljava/lang/String;" />
+		<method name="readStringArray([Ljava/lang/String;)V" />
+		<method name="readStringList(Ljava/util/List;)V" />
+		<method name="readStrongBinder()Landroid/os/IBinder;" />
+		<method name="readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V" />
+		<method name="readTypedList(Ljava/util/List;Landroid/os/Parcelable$Creator;)V" />
+		<method name="readTypedObject(Landroid/os/Parcelable$Creator;)Ljava/lang/Object;" since="23" />
+		<method name="readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;" />
+		<method name="recycle()V" />
+		<method name="setDataCapacity(I)V" />
+		<method name="setDataPosition(I)V" />
+		<method name="setDataSize(I)V" />
+		<method name="unmarshall([BII)V" />
+		<method name="writeArray([Ljava/lang/Object;)V" />
+		<method name="writeBinderArray([Landroid/os/IBinder;)V" />
+		<method name="writeBinderList(Ljava/util/List;)V" />
+		<method name="writeBoolean(Z)V" since="29" />
+		<method name="writeBooleanArray([Z)V" />
+		<method name="writeBundle(Landroid/os/Bundle;)V" />
+		<method name="writeByte(B)V" />
+		<method name="writeByteArray([B)V" />
+		<method name="writeByteArray([BII)V" />
+		<method name="writeCharArray([C)V" />
+		<method name="writeDouble(D)V" />
+		<method name="writeDoubleArray([D)V" />
+		<method name="writeException(Ljava/lang/Exception;)V" />
+		<method name="writeFileDescriptor(Ljava/io/FileDescriptor;)V" />
+		<method name="writeFloat(F)V" />
+		<method name="writeFloatArray([F)V" />
+		<method name="writeInt(I)V" />
+		<method name="writeIntArray([I)V" />
+		<method name="writeInterfaceToken(Ljava/lang/String;)V" />
+		<method name="writeList(Ljava/util/List;)V" />
+		<method name="writeLong(J)V" />
+		<method name="writeLongArray([J)V" />
+		<method name="writeMap(Ljava/util/Map;)V" />
+		<method name="writeNoException()V" />
+		<method name="writeParcelable(Landroid/os/Parcelable;I)V" />
+		<method name="writeParcelableArray([Landroid/os/Parcelable;I)V" />
+		<method name="writeParcelableCreator(Landroid/os/Parcelable;)V" since="30" />
+		<method name="writeParcelableList(Ljava/util/List;I)V" since="29" />
+		<method name="writePersistableBundle(Landroid/os/PersistableBundle;)V" since="21" />
+		<method name="writeSerializable(Ljava/io/Serializable;)V" />
+		<method name="writeSize(Landroid/util/Size;)V" since="21" />
+		<method name="writeSizeF(Landroid/util/SizeF;)V" since="21" />
+		<method name="writeSparseArray(Landroid/util/SparseArray;)V" />
+		<method name="writeSparseBooleanArray(Landroid/util/SparseBooleanArray;)V" />
+		<method name="writeString(Ljava/lang/String;)V" />
+		<method name="writeStringArray([Ljava/lang/String;)V" />
+		<method name="writeStringList(Ljava/util/List;)V" />
+		<method name="writeStrongBinder(Landroid/os/IBinder;)V" />
+		<method name="writeStrongInterface(Landroid/os/IInterface;)V" />
+		<method name="writeTypedArray([Landroid/os/Parcelable;I)V" />
+		<method name="writeTypedArrayMap(Landroid/util/ArrayMap;I)V" since="29" />
+		<method name="writeTypedList(Ljava/util/List;)V" />
+		<method name="writeTypedObject(Landroid/os/Parcelable;I)V" since="23" />
+		<method name="writeTypedSparseArray(Landroid/util/SparseArray;I)V" since="29" />
+		<method name="writeValue(Ljava/lang/Object;)V" />
+		<field name="STRING_CREATOR" />
+	</class>
+	<class name="android/os/ParcelFileDescriptor" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/io/Closeable" since="16" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;)V" />
+		<method name="adoptFd(I)Landroid/os/ParcelFileDescriptor;" since="13" />
+		<method name="canDetectErrors()Z" since="19" />
+		<method name="checkError()V" since="19" />
+		<method name="close()V" />
+		<method name="closeWithError(Ljava/lang/String;)V" since="19" />
+		<method name="createPipe()[Landroid/os/ParcelFileDescriptor;" since="9" />
+		<method name="createReliablePipe()[Landroid/os/ParcelFileDescriptor;" since="19" />
+		<method name="createReliableSocketPair()[Landroid/os/ParcelFileDescriptor;" since="19" />
+		<method name="createSocketPair()[Landroid/os/ParcelFileDescriptor;" since="19" />
+		<method name="detachFd()I" since="12" />
+		<method name="dup()Landroid/os/ParcelFileDescriptor;" since="14" />
+		<method name="dup(Ljava/io/FileDescriptor;)Landroid/os/ParcelFileDescriptor;" since="13" />
+		<method name="fromDatagramSocket(Ljava/net/DatagramSocket;)Landroid/os/ParcelFileDescriptor;" since="14" />
+		<method name="fromFd(I)Landroid/os/ParcelFileDescriptor;" since="13" />
+		<method name="fromSocket(Ljava/net/Socket;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="getFd()I" since="12" />
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;" />
+		<method name="getStatSize()J" since="3" />
+		<method name="open(Ljava/io/File;I)Landroid/os/ParcelFileDescriptor;" />
+		<method name="open(Ljava/io/File;ILandroid/os/Handler;Landroid/os/ParcelFileDescriptor$OnCloseListener;)Landroid/os/ParcelFileDescriptor;" since="19" />
+		<method name="parseMode(Ljava/lang/String;)I" since="19" />
+		<method name="wrap(Landroid/os/ParcelFileDescriptor;Landroid/os/Handler;Landroid/os/ParcelFileDescriptor$OnCloseListener;)Landroid/os/ParcelFileDescriptor;" since="30" />
+		<field name="CREATOR" />
+		<field name="MODE_APPEND" since="3" />
+		<field name="MODE_CREATE" />
+		<field name="MODE_READ_ONLY" />
+		<field name="MODE_READ_WRITE" />
+		<field name="MODE_TRUNCATE" />
+		<field name="MODE_WORLD_READABLE" deprecated="19" />
+		<field name="MODE_WORLD_WRITEABLE" deprecated="19" />
+		<field name="MODE_WRITE_ONLY" />
+	</class>
+	<class name="android/os/ParcelFileDescriptor$AutoCloseInputStream" since="1">
+		<extends name="java/io/FileInputStream" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;)V" />
+	</class>
+	<class name="android/os/ParcelFileDescriptor$AutoCloseOutputStream" since="1">
+		<extends name="java/io/FileOutputStream" />
+		<method name="&lt;init&gt;(Landroid/os/ParcelFileDescriptor;)V" />
+	</class>
+	<class name="android/os/ParcelFileDescriptor$FileDescriptorDetachedException" since="19">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/os/ParcelFileDescriptor$OnCloseListener" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onClose(Ljava/io/IOException;)V" />
+	</class>
+	<class name="android/os/ParcelFormatException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/os/ParcelUuid" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/util/UUID;)V" />
+		<method name="fromString(Ljava/lang/String;)Landroid/os/ParcelUuid;" />
+		<method name="getUuid()Ljava/util/UUID;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/Parcelable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="describeContents()I" />
+		<method name="writeToParcel(Landroid/os/Parcel;I)V" />
+		<field name="CONTENTS_FILE_DESCRIPTOR" />
+		<field name="PARCELABLE_WRITE_RETURN_VALUE" />
+	</class>
+	<class name="android/os/Parcelable$ClassLoaderCreator" since="13">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable$Creator" />
+		<method name="createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;" />
+	</class>
+	<class name="android/os/Parcelable$Creator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;" />
+		<method name="newArray(I)[Ljava/lang/Object;" />
+	</class>
+	<class name="android/os/PatternMatcher" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getType()I" />
+		<method name="match(Ljava/lang/String;)Z" />
+		<field name="CREATOR" />
+		<field name="PATTERN_ADVANCED_GLOB" since="26" />
+		<field name="PATTERN_LITERAL" />
+		<field name="PATTERN_PREFIX" />
+		<field name="PATTERN_SIMPLE_GLOB" />
+		<field name="PATTERN_SUFFIX" since="31" />
+	</class>
+	<class name="android/os/PerformanceHintManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="createHintSession([IJ)Landroid/os/PerformanceHintManager$Session;" />
+		<method name="getPreferredUpdateRateNanos()J" />
+	</class>
+	<class name="android/os/PerformanceHintManager$Session" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="reportActualWorkDuration(J)V" />
+		<method name="updateTargetWorkDuration(J)V" />
+	</class>
+	<class name="android/os/PersistableBundle" since="21">
+		<extends name="android/os/BaseBundle" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/os/PersistableBundle;)V" />
+		<method name="deepCopy()Landroid/os/PersistableBundle;" since="26" />
+		<method name="getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;" />
+		<method name="putPersistableBundle(Ljava/lang/String;Landroid/os/PersistableBundle;)V" />
+		<method name="readFromStream(Ljava/io/InputStream;)Landroid/os/PersistableBundle;" since="30" />
+		<method name="writeToStream(Ljava/io/OutputStream;)V" since="30" />
+		<field name="CREATOR" />
+		<field name="EMPTY" />
+	</class>
+	<class name="android/os/PowerManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29" />
+		<method name="addThermalStatusListener(Ljava/util/concurrent/Executor;Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29" />
+		<method name="getBatteryDischargePrediction()Ljava/time/Duration;" since="31" />
+		<method name="getCurrentThermalStatus()I" since="29" />
+		<method name="getLocationPowerSaveMode()I" since="28" />
+		<method name="getThermalHeadroom(I)F" since="30" />
+		<method name="goToSleep(J)V" removed="21" />
+		<method name="isBatteryDischargePredictionPersonalized()Z" since="31" />
+		<method name="isDeviceIdleMode()Z" since="23" />
+		<method name="isIgnoringBatteryOptimizations(Ljava/lang/String;)Z" since="23" />
+		<method name="isInteractive()Z" since="20" />
+		<method name="isPowerSaveMode()Z" since="21" />
+		<method name="isRebootingUserspaceSupported()Z" since="30" />
+		<method name="isScreenOn()Z" since="7" deprecated="20" />
+		<method name="isSustainedPerformanceModeSupported()Z" since="24" />
+		<method name="isWakeLockLevelSupported(I)Z" since="21" />
+		<method name="newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;" />
+		<method name="reboot(Ljava/lang/String;)V" since="8" />
+		<method name="removeThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29" />
+		<method name="userActivity(JZ)V" removed="21" />
+		<method name="wakeUp(J)V" since="17" removed="21" />
+		<field name="ACQUIRE_CAUSES_WAKEUP" />
+		<field name="ACTION_DEVICE_IDLE_MODE_CHANGED" since="23" />
+		<field name="ACTION_POWER_SAVE_MODE_CHANGED" since="21" />
+		<field name="FULL_WAKE_LOCK" deprecated="17" />
+		<field name="LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF" since="28" />
+		<field name="LOCATION_MODE_FOREGROUND_ONLY" since="28" />
+		<field name="LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF" since="28" />
+		<field name="LOCATION_MODE_NO_CHANGE" since="28" />
+		<field name="LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF" since="29" />
+		<field name="ON_AFTER_RELEASE" />
+		<field name="PARTIAL_WAKE_LOCK" />
+		<field name="PROXIMITY_SCREEN_OFF_WAKE_LOCK" since="21" />
+		<field name="RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY" since="21" />
+		<field name="SCREEN_BRIGHT_WAKE_LOCK" deprecated="15" />
+		<field name="SCREEN_DIM_WAKE_LOCK" deprecated="17" />
+		<field name="THERMAL_STATUS_CRITICAL" since="29" />
+		<field name="THERMAL_STATUS_EMERGENCY" since="29" />
+		<field name="THERMAL_STATUS_LIGHT" since="29" />
+		<field name="THERMAL_STATUS_MODERATE" since="29" />
+		<field name="THERMAL_STATUS_NONE" since="29" />
+		<field name="THERMAL_STATUS_SEVERE" since="29" />
+		<field name="THERMAL_STATUS_SHUTDOWN" since="29" />
+	</class>
+	<class name="android/os/PowerManager$OnThermalStatusChangedListener" since="29">
+		<extends name="java/lang/Object" />
+		<method name="onThermalStatusChanged(I)V" />
+	</class>
+	<class name="android/os/PowerManager$WakeLock" since="1">
+		<extends name="java/lang/Object" />
+		<method name="acquire()V" />
+		<method name="acquire(J)V" />
+		<method name="isHeld()Z" />
+		<method name="release()V" />
+		<method name="release(I)V" since="21" />
+		<method name="setReferenceCounted(Z)V" />
+		<method name="setWorkSource(Landroid/os/WorkSource;)V" since="9" />
+	</class>
+	<class name="android/os/Process" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getElapsedCpuTime()J" />
+		<method name="getExclusiveCores()[I" since="24" />
+		<method name="getGidForName(Ljava/lang/String;)I" />
+		<method name="getStartElapsedRealtime()J" since="24" />
+		<method name="getStartUptimeMillis()J" since="24" />
+		<method name="getThreadPriority(I)I" />
+		<method name="getUidForName(Ljava/lang/String;)I" />
+		<method name="is64Bit()Z" since="23" />
+		<method name="isApplicationUid(I)Z" since="24" />
+		<method name="isIsolated()Z" since="28" />
+		<method name="killProcess(I)V" />
+		<method name="myPid()I" />
+		<method name="myTid()I" />
+		<method name="myUid()I" since="2" />
+		<method name="myUserHandle()Landroid/os/UserHandle;" since="17" />
+		<method name="sendSignal(II)V" />
+		<method name="setThreadPriority(I)V" />
+		<method name="setThreadPriority(II)V" />
+		<method name="supportsProcesses()Z" deprecated="15" />
+		<field name="BLUETOOTH_GID" removed="18" />
+		<field name="BLUETOOTH_UID" since="29" />
+		<field name="FIRST_APPLICATION_UID" />
+		<field name="INVALID_UID" since="29" />
+		<field name="LAST_APPLICATION_UID" />
+		<field name="PHONE_UID" />
+		<field name="ROOT_UID" since="29" />
+		<field name="SHELL_UID" since="29" />
+		<field name="SIGNAL_KILL" />
+		<field name="SIGNAL_QUIT" />
+		<field name="SIGNAL_USR1" />
+		<field name="SYSTEM_UID" />
+		<field name="THREAD_PRIORITY_AUDIO" />
+		<field name="THREAD_PRIORITY_BACKGROUND" />
+		<field name="THREAD_PRIORITY_DEFAULT" />
+		<field name="THREAD_PRIORITY_DISPLAY" />
+		<field name="THREAD_PRIORITY_FOREGROUND" />
+		<field name="THREAD_PRIORITY_LESS_FAVORABLE" />
+		<field name="THREAD_PRIORITY_LOWEST" />
+		<field name="THREAD_PRIORITY_MORE_FAVORABLE" />
+		<field name="THREAD_PRIORITY_URGENT_AUDIO" />
+		<field name="THREAD_PRIORITY_URGENT_DISPLAY" />
+		<field name="THREAD_PRIORITY_VIDEO" since="28" />
+		<field name="WIFI_UID" since="30" />
+	</class>
+	<class name="android/os/ProxyFileDescriptorCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onFsync()V" />
+		<method name="onGetSize()J" />
+		<method name="onRead(JI[B)I" />
+		<method name="onRelease()V" />
+		<method name="onWrite(JI[B)I" />
+	</class>
+	<class name="android/os/RecoverySystem" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="23" />
+		<method name="installPackage(Landroid/content/Context;Ljava/io/File;)V" />
+		<method name="rebootWipeCache(Landroid/content/Context;)V" since="14" />
+		<method name="rebootWipeUserData(Landroid/content/Context;)V" />
+		<method name="verifyPackage(Ljava/io/File;Landroid/os/RecoverySystem$ProgressListener;Ljava/io/File;)V" />
+	</class>
+	<class name="android/os/RecoverySystem$ProgressListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="onProgress(I)V" />
+	</class>
+	<class name="android/os/RemoteCallbackList" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="beginBroadcast()I" />
+		<method name="finishBroadcast()V" />
+		<method name="getBroadcastCookie(I)Ljava/lang/Object;" since="4" />
+		<method name="getBroadcastItem(I)Landroid/os/IInterface;" />
+		<method name="getRegisteredCallbackCookie(I)Ljava/lang/Object;" since="26" />
+		<method name="getRegisteredCallbackCount()I" since="17" />
+		<method name="getRegisteredCallbackItem(I)Landroid/os/IInterface;" since="26" />
+		<method name="kill()V" />
+		<method name="onCallbackDied(Landroid/os/IInterface;)V" />
+		<method name="onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V" since="4" />
+		<method name="register(Landroid/os/IInterface;)Z" />
+		<method name="register(Landroid/os/IInterface;Ljava/lang/Object;)Z" since="4" />
+		<method name="unregister(Landroid/os/IInterface;)Z" />
+	</class>
+	<class name="android/os/RemoteException" since="1">
+		<extends name="android/util/AndroidException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="15" />
+		<method name="rethrowAsRuntimeException()Ljava/lang/RuntimeException;" since="30" />
+		<method name="rethrowFromSystemServer()Ljava/lang/RuntimeException;" since="30" />
+	</class>
+	<class name="android/os/ResultReceiver" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Handler;)V" />
+		<method name="onReceiveResult(ILandroid/os/Bundle;)V" />
+		<method name="send(ILandroid/os/Bundle;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/SharedMemory" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/io/Closeable" />
+		<method name="create(Ljava/lang/String;I)Landroid/os/SharedMemory;" />
+		<method name="getSize()I" />
+		<method name="map(III)Ljava/nio/ByteBuffer;" />
+		<method name="mapReadOnly()Ljava/nio/ByteBuffer;" />
+		<method name="mapReadWrite()Ljava/nio/ByteBuffer;" />
+		<method name="setProtect(I)Z" />
+		<method name="unmap(Ljava/nio/ByteBuffer;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/StatFs" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getAvailableBlocks()I" deprecated="18" />
+		<method name="getAvailableBlocksLong()J" since="18" />
+		<method name="getAvailableBytes()J" since="18" />
+		<method name="getBlockCount()I" deprecated="18" />
+		<method name="getBlockCountLong()J" since="18" />
+		<method name="getBlockSize()I" deprecated="18" />
+		<method name="getBlockSizeLong()J" since="18" />
+		<method name="getFreeBlocks()I" deprecated="18" />
+		<method name="getFreeBlocksLong()J" since="18" />
+		<method name="getFreeBytes()J" since="18" />
+		<method name="getTotalBytes()J" since="18" />
+		<method name="restat(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/os/StrictMode" since="9">
+		<extends name="java/lang/Object" />
+		<method name="allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;" />
+		<method name="allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;" />
+		<method name="enableDefaults()V" />
+		<method name="getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;" />
+		<method name="getVmPolicy()Landroid/os/StrictMode$VmPolicy;" />
+		<method name="noteSlowCall(Ljava/lang/String;)V" since="11" />
+		<method name="setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V" />
+		<method name="setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V" />
+	</class>
+	<class name="android/os/StrictMode$OnThreadViolationListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onThreadViolation(Landroid/os/strictmode/Violation;)V" />
+	</class>
+	<class name="android/os/StrictMode$OnVmViolationListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onVmViolation(Landroid/os/strictmode/Violation;)V" />
+	</class>
+	<class name="android/os/StrictMode$ThreadPolicy" since="9">
+		<extends name="java/lang/Object" />
+		<field name="LAX" />
+	</class>
+	<class name="android/os/StrictMode$ThreadPolicy$Builder" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/StrictMode$ThreadPolicy;)V" />
+		<method name="build()Landroid/os/StrictMode$ThreadPolicy;" />
+		<method name="detectAll()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="detectCustomSlowCalls()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11" />
+		<method name="detectDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="detectDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="detectNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="detectResourceMismatches()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="23" />
+		<method name="detectUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="26" />
+		<method name="penaltyDeath()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="penaltyDeathOnNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11" />
+		<method name="penaltyDialog()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="penaltyDropBox()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="penaltyFlashScreen()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11" />
+		<method name="penaltyListener(Ljava/util/concurrent/Executor;Landroid/os/StrictMode$OnThreadViolationListener;)Landroid/os/StrictMode$ThreadPolicy$Builder;" since="28" />
+		<method name="penaltyLog()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="permitAll()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="permitCustomSlowCalls()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11" />
+		<method name="permitDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="permitDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="permitNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;" />
+		<method name="permitResourceMismatches()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="23" />
+		<method name="permitUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="26" />
+	</class>
+	<class name="android/os/StrictMode$VmPolicy" since="9">
+		<extends name="java/lang/Object" />
+		<field name="LAX" />
+	</class>
+	<class name="android/os/StrictMode$VmPolicy$Builder" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/StrictMode$VmPolicy;)V" since="11" />
+		<method name="build()Landroid/os/StrictMode$VmPolicy;" />
+		<method name="detectActivityLeaks()Landroid/os/StrictMode$VmPolicy$Builder;" since="11" />
+		<method name="detectAll()Landroid/os/StrictMode$VmPolicy$Builder;" />
+		<method name="detectCleartextNetwork()Landroid/os/StrictMode$VmPolicy$Builder;" since="23" />
+		<method name="detectContentUriWithoutPermission()Landroid/os/StrictMode$VmPolicy$Builder;" since="26" />
+		<method name="detectCredentialProtectedWhileLocked()Landroid/os/StrictMode$VmPolicy$Builder;" since="29" />
+		<method name="detectFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;" since="18" />
+		<method name="detectImplicitDirectBoot()Landroid/os/StrictMode$VmPolicy$Builder;" since="29" />
+		<method name="detectIncorrectContextUse()Landroid/os/StrictMode$VmPolicy$Builder;" since="31" />
+		<method name="detectLeakedClosableObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="11" />
+		<method name="detectLeakedRegistrationObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="16" />
+		<method name="detectLeakedSqlLiteObjects()Landroid/os/StrictMode$VmPolicy$Builder;" />
+		<method name="detectNonSdkApiUsage()Landroid/os/StrictMode$VmPolicy$Builder;" since="28" />
+		<method name="detectUnsafeIntentLaunch()Landroid/os/StrictMode$VmPolicy$Builder;" since="31" />
+		<method name="detectUntaggedSockets()Landroid/os/StrictMode$VmPolicy$Builder;" since="26" />
+		<method name="penaltyDeath()Landroid/os/StrictMode$VmPolicy$Builder;" />
+		<method name="penaltyDeathOnCleartextNetwork()Landroid/os/StrictMode$VmPolicy$Builder;" since="23" />
+		<method name="penaltyDeathOnFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;" since="24" />
+		<method name="penaltyDropBox()Landroid/os/StrictMode$VmPolicy$Builder;" />
+		<method name="penaltyListener(Ljava/util/concurrent/Executor;Landroid/os/StrictMode$OnVmViolationListener;)Landroid/os/StrictMode$VmPolicy$Builder;" since="28" />
+		<method name="penaltyLog()Landroid/os/StrictMode$VmPolicy$Builder;" />
+		<method name="permitNonSdkApiUsage()Landroid/os/StrictMode$VmPolicy$Builder;" since="28" />
+		<method name="permitUnsafeIntentLaunch()Landroid/os/StrictMode$VmPolicy$Builder;" since="31" />
+		<method name="setClassInstanceLimit(Ljava/lang/Class;I)Landroid/os/StrictMode$VmPolicy$Builder;" since="11" />
+	</class>
+	<class name="android/os/SystemClock" since="1">
+		<extends name="java/lang/Object" />
+		<method name="currentGnssTimeClock()Ljava/time/Clock;" since="29" />
+		<method name="currentThreadTimeMillis()J" />
+		<method name="elapsedRealtime()J" />
+		<method name="elapsedRealtimeNanos()J" since="17" />
+		<method name="setCurrentTimeMillis(J)Z" />
+		<method name="sleep(J)V" />
+		<method name="uptimeMillis()J" />
+	</class>
+	<class name="android/os/TestLooperManager" since="26">
+		<extends name="java/lang/Object" />
+		<method name="execute(Landroid/os/Message;)V" />
+		<method name="getMessageQueue()Landroid/os/MessageQueue;" />
+		<method name="hasMessages(Landroid/os/Handler;Ljava/lang/Object;I)Z" />
+		<method name="hasMessages(Landroid/os/Handler;Ljava/lang/Object;Ljava/lang/Runnable;)Z" />
+		<method name="next()Landroid/os/Message;" />
+		<method name="recycle(Landroid/os/Message;)V" />
+		<method name="release()V" />
+	</class>
+	<class name="android/os/TokenWatcher" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/os/Handler;Ljava/lang/String;)V" />
+		<method name="acquire(Landroid/os/IBinder;Ljava/lang/String;)V" />
+		<method name="acquired()V" />
+		<method name="cleanup(Landroid/os/IBinder;Z)V" />
+		<method name="dump()V" />
+		<method name="dump(Ljava/io/PrintWriter;)V" since="16" />
+		<method name="isAcquired()Z" />
+		<method name="release(Landroid/os/IBinder;)V" />
+		<method name="released()V" />
+	</class>
+	<class name="android/os/Trace" since="18">
+		<extends name="java/lang/Object" />
+		<method name="beginAsyncSection(Ljava/lang/String;I)V" since="29" />
+		<method name="beginSection(Ljava/lang/String;)V" />
+		<method name="endAsyncSection(Ljava/lang/String;I)V" since="29" />
+		<method name="endSection()V" />
+		<method name="isEnabled()Z" since="29" />
+		<method name="setCounter(Ljava/lang/String;J)V" since="29" />
+	</class>
+	<class name="android/os/TransactionTooLargeException" since="15">
+		<extends name="android/os/RemoteException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="23" />
+	</class>
+	<class name="android/os/UserHandle" since="17">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getUserHandleForUid(I)Landroid/os/UserHandle;" since="24" />
+		<method name="readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;" />
+		<method name="writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/UserManager" since="17">
+		<extends name="java/lang/Object" />
+		<method name="createUserCreationIntent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)Landroid/content/Intent;" since="24" />
+		<method name="getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;" since="18" />
+		<method name="getSerialNumberForUser(Landroid/os/UserHandle;)J" />
+		<method name="getUserCount()I" />
+		<method name="getUserCreationTime(Landroid/os/UserHandle;)J" since="23" />
+		<method name="getUserForSerialNumber(J)Landroid/os/UserHandle;" />
+		<method name="getUserName()Ljava/lang/String;" />
+		<method name="getUserProfiles()Ljava/util/List;" since="21" />
+		<method name="getUserRestrictions()Landroid/os/Bundle;" since="18" />
+		<method name="getUserRestrictions(Landroid/os/UserHandle;)Landroid/os/Bundle;" since="18" />
+		<method name="hasUserRestriction(Ljava/lang/String;)Z" since="21" />
+		<method name="isDemoUser()Z" since="25" />
+		<method name="isHeadlessSystemUserMode()Z" since="31" />
+		<method name="isManagedProfile()Z" since="30" />
+		<method name="isQuietModeEnabled(Landroid/os/UserHandle;)Z" since="24" />
+		<method name="isSystemUser()Z" since="23" />
+		<method name="isUserAGoat()Z" />
+		<method name="isUserForeground()Z" since="31" />
+		<method name="isUserRunning(Landroid/os/UserHandle;)Z" />
+		<method name="isUserRunningOrStopping(Landroid/os/UserHandle;)Z" />
+		<method name="isUserUnlocked()Z" since="24" />
+		<method name="isUserUnlocked(Landroid/os/UserHandle;)Z" since="24" />
+		<method name="requestQuietModeEnabled(ZLandroid/os/UserHandle;)Z" since="28" />
+		<method name="requestQuietModeEnabled(ZLandroid/os/UserHandle;I)Z" since="30" />
+		<method name="setRestrictionsChallenge(Ljava/lang/String;)Z" since="19" deprecated="23" />
+		<method name="setUserRestriction(Ljava/lang/String;Z)V" since="18" deprecated="21" />
+		<method name="setUserRestrictions(Landroid/os/Bundle;)V" since="18" deprecated="21" />
+		<method name="setUserRestrictions(Landroid/os/Bundle;Landroid/os/UserHandle;)V" since="18" deprecated="21" />
+		<method name="supportsMultipleUsers()Z" since="24" />
+		<field name="ALLOW_PARENT_PROFILE_APP_LINKING" since="23" />
+		<field name="DISALLOW_ADD_MANAGED_PROFILE" since="26" deprecated="30" />
+		<field name="DISALLOW_ADD_USER" since="21" />
+		<field name="DISALLOW_ADJUST_VOLUME" since="21" />
+		<field name="DISALLOW_AIRPLANE_MODE" since="28" />
+		<field name="DISALLOW_AMBIENT_DISPLAY" since="28" />
+		<field name="DISALLOW_APPS_CONTROL" since="21" />
+		<field name="DISALLOW_AUTOFILL" since="26" />
+		<field name="DISALLOW_BLUETOOTH" since="26" />
+		<field name="DISALLOW_BLUETOOTH_SHARING" since="26" />
+		<field name="DISALLOW_CAMERA_TOGGLE" since="31" />
+		<field name="DISALLOW_CONFIG_BLUETOOTH" since="18" />
+		<field name="DISALLOW_CONFIG_BRIGHTNESS" since="28" />
+		<field name="DISALLOW_CONFIG_CELL_BROADCASTS" since="21" />
+		<field name="DISALLOW_CONFIG_CREDENTIALS" since="18" />
+		<field name="DISALLOW_CONFIG_DATE_TIME" since="28" />
+		<field name="DISALLOW_CONFIG_LOCALE" since="28" />
+		<field name="DISALLOW_CONFIG_LOCATION" since="28" />
+		<field name="DISALLOW_CONFIG_MOBILE_NETWORKS" since="21" />
+		<field name="DISALLOW_CONFIG_PRIVATE_DNS" since="29" />
+		<field name="DISALLOW_CONFIG_SCREEN_TIMEOUT" since="28" />
+		<field name="DISALLOW_CONFIG_TETHERING" since="21" />
+		<field name="DISALLOW_CONFIG_VPN" since="21" />
+		<field name="DISALLOW_CONFIG_WIFI" since="18" />
+		<field name="DISALLOW_CONTENT_CAPTURE" since="29" />
+		<field name="DISALLOW_CONTENT_SUGGESTIONS" since="29" />
+		<field name="DISALLOW_CREATE_WINDOWS" since="21" />
+		<field name="DISALLOW_CROSS_PROFILE_COPY_PASTE" since="21" />
+		<field name="DISALLOW_DATA_ROAMING" since="24" />
+		<field name="DISALLOW_DEBUGGING_FEATURES" since="21" />
+		<field name="DISALLOW_FACTORY_RESET" since="21" />
+		<field name="DISALLOW_FUN" since="23" />
+		<field name="DISALLOW_INSTALL_APPS" since="18" />
+		<field name="DISALLOW_INSTALL_UNKNOWN_SOURCES" since="18" />
+		<field name="DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY" since="29" />
+		<field name="DISALLOW_MICROPHONE_TOGGLE" since="31" />
+		<field name="DISALLOW_MODIFY_ACCOUNTS" since="18" />
+		<field name="DISALLOW_MOUNT_PHYSICAL_MEDIA" since="21" />
+		<field name="DISALLOW_NETWORK_RESET" since="23" />
+		<field name="DISALLOW_OUTGOING_BEAM" since="22" />
+		<field name="DISALLOW_OUTGOING_CALLS" since="21" />
+		<field name="DISALLOW_PRINTING" since="28" />
+		<field name="DISALLOW_REMOVE_MANAGED_PROFILE" since="26" deprecated="30" />
+		<field name="DISALLOW_REMOVE_USER" since="18" />
+		<field name="DISALLOW_SAFE_BOOT" since="23" />
+		<field name="DISALLOW_SET_USER_ICON" since="24" />
+		<field name="DISALLOW_SET_WALLPAPER" since="24" />
+		<field name="DISALLOW_SHARE_INTO_MANAGED_PROFILE" since="28" />
+		<field name="DISALLOW_SHARE_LOCATION" since="18" />
+		<field name="DISALLOW_SMS" since="21" />
+		<field name="DISALLOW_SYSTEM_ERROR_DIALOGS" since="28" />
+		<field name="DISALLOW_UNIFIED_PASSWORD" since="28" />
+		<field name="DISALLOW_UNINSTALL_APPS" since="18" />
+		<field name="DISALLOW_UNMUTE_MICROPHONE" since="21" />
+		<field name="DISALLOW_USB_FILE_TRANSFER" since="18" />
+		<field name="DISALLOW_USER_SWITCH" since="28" />
+		<field name="ENSURE_VERIFY_APPS" since="21" />
+		<field name="KEY_RESTRICTIONS_PENDING" since="22" />
+		<field name="QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED" since="30" />
+		<field name="USER_CREATION_FAILED_NOT_PERMITTED" since="24" />
+		<field name="USER_CREATION_FAILED_NO_MORE_USERS" since="24" />
+		<field name="USER_OPERATION_ERROR_CURRENT_USER" since="28" />
+		<field name="USER_OPERATION_ERROR_LOW_STORAGE" since="28" />
+		<field name="USER_OPERATION_ERROR_MANAGED_PROFILE" since="28" />
+		<field name="USER_OPERATION_ERROR_MAX_RUNNING_USERS" since="28" />
+		<field name="USER_OPERATION_ERROR_MAX_USERS" since="28" />
+		<field name="USER_OPERATION_ERROR_UNKNOWN" since="28" />
+		<field name="USER_OPERATION_SUCCESS" since="28" />
+	</class>
+	<class name="android/os/UserManager$UserOperationException" since="28">
+		<extends name="java/lang/RuntimeException" />
+		<method name="getUserOperationResult()I" />
+	</class>
+	<class name="android/os/VibrationAttributes" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFlags()I" />
+		<method name="getUsage()I" />
+		<method name="getUsageClass()I" />
+		<method name="isFlagSet(I)Z" />
+		<field name="CREATOR" />
+		<field name="FLAG_BYPASS_INTERRUPTION_POLICY" />
+		<field name="USAGE_ALARM" />
+		<field name="USAGE_CLASS_ALARM" />
+		<field name="USAGE_CLASS_FEEDBACK" />
+		<field name="USAGE_CLASS_MASK" />
+		<field name="USAGE_CLASS_UNKNOWN" />
+		<field name="USAGE_COMMUNICATION_REQUEST" />
+		<field name="USAGE_HARDWARE_FEEDBACK" />
+		<field name="USAGE_NOTIFICATION" />
+		<field name="USAGE_PHYSICAL_EMULATION" />
+		<field name="USAGE_RINGTONE" />
+		<field name="USAGE_TOUCH" />
+		<field name="USAGE_UNKNOWN" />
+	</class>
+	<class name="android/os/VibrationAttributes$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/VibrationAttributes;)V" />
+		<method name="build()Landroid/os/VibrationAttributes;" />
+		<method name="setFlags(II)Landroid/os/VibrationAttributes$Builder;" />
+		<method name="setUsage(I)Landroid/os/VibrationAttributes$Builder;" />
+	</class>
+	<class name="android/os/VibrationEffect" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createOneShot(JI)Landroid/os/VibrationEffect;" />
+		<method name="createPredefined(I)Landroid/os/VibrationEffect;" since="29" />
+		<method name="createWaveform([JI)Landroid/os/VibrationEffect;" />
+		<method name="createWaveform([J[II)Landroid/os/VibrationEffect;" />
+		<method name="startComposition()Landroid/os/VibrationEffect$Composition;" since="30" />
+		<field name="CREATOR" />
+		<field name="DEFAULT_AMPLITUDE" />
+		<field name="EFFECT_CLICK" since="29" />
+		<field name="EFFECT_DOUBLE_CLICK" since="29" />
+		<field name="EFFECT_HEAVY_CLICK" since="29" />
+		<field name="EFFECT_TICK" since="29" />
+	</class>
+	<class name="android/os/VibrationEffect$Composition" since="30">
+		<extends name="java/lang/Object" />
+		<method name="addPrimitive(I)Landroid/os/VibrationEffect$Composition;" />
+		<method name="addPrimitive(IF)Landroid/os/VibrationEffect$Composition;" />
+		<method name="addPrimitive(IFI)Landroid/os/VibrationEffect$Composition;" />
+		<method name="compose()Landroid/os/VibrationEffect;" />
+		<field name="PRIMITIVE_CLICK" />
+		<field name="PRIMITIVE_LOW_TICK" since="31" />
+		<field name="PRIMITIVE_QUICK_FALL" />
+		<field name="PRIMITIVE_QUICK_RISE" />
+		<field name="PRIMITIVE_SLOW_RISE" />
+		<field name="PRIMITIVE_SPIN" since="31" />
+		<field name="PRIMITIVE_THUD" since="31" />
+		<field name="PRIMITIVE_TICK" />
+	</class>
+	<class name="android/os/Vibrator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="areAllEffectsSupported([I)I" since="30" />
+		<method name="areAllPrimitivesSupported([I)Z" since="30" />
+		<method name="areEffectsSupported([I)[I" since="30" />
+		<method name="arePrimitivesSupported([I)[Z" since="30" />
+		<method name="cancel()V" />
+		<method name="getId()I" since="31" />
+		<method name="getPrimitiveDurations([I)[I" since="31" />
+		<method name="hasAmplitudeControl()Z" since="26" />
+		<method name="hasVibrator()Z" since="11" />
+		<method name="vibrate(J)V" deprecated="26" />
+		<method name="vibrate(JLandroid/media/AudioAttributes;)V" since="21" deprecated="26" />
+		<method name="vibrate(Landroid/os/VibrationEffect;)V" since="26" />
+		<method name="vibrate(Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V" since="26" />
+		<method name="vibrate([JI)V" deprecated="26" />
+		<method name="vibrate([JILandroid/media/AudioAttributes;)V" since="21" deprecated="26" />
+		<field name="VIBRATION_EFFECT_SUPPORT_NO" since="30" />
+		<field name="VIBRATION_EFFECT_SUPPORT_UNKNOWN" since="30" />
+		<field name="VIBRATION_EFFECT_SUPPORT_YES" since="30" />
+	</class>
+	<class name="android/os/VibratorManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="getDefaultVibrator()Landroid/os/Vibrator;" />
+		<method name="getVibrator(I)Landroid/os/Vibrator;" />
+		<method name="getVibratorIds()[I" />
+		<method name="vibrate(Landroid/os/CombinedVibration;)V" />
+		<method name="vibrate(Landroid/os/CombinedVibration;Landroid/os/VibrationAttributes;)V" />
+	</class>
+	<class name="android/os/WorkSource" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/WorkSource;)V" />
+		<method name="add(Landroid/os/WorkSource;)Z" />
+		<method name="clear()V" />
+		<method name="diff(Landroid/os/WorkSource;)Z" />
+		<method name="remove(Landroid/os/WorkSource;)Z" />
+		<method name="set(Landroid/os/WorkSource;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/health/HealthStats" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getDataType()Ljava/lang/String;" />
+		<method name="getMeasurement(I)J" />
+		<method name="getMeasurementKeyAt(I)I" />
+		<method name="getMeasurementKeyCount()I" />
+		<method name="getMeasurements(I)Ljava/util/Map;" />
+		<method name="getMeasurementsKeyAt(I)I" />
+		<method name="getMeasurementsKeyCount()I" />
+		<method name="getStats(I)Ljava/util/Map;" />
+		<method name="getStatsKeyAt(I)I" />
+		<method name="getStatsKeyCount()I" />
+		<method name="getTimer(I)Landroid/os/health/TimerStat;" />
+		<method name="getTimerCount(I)I" />
+		<method name="getTimerKeyAt(I)I" />
+		<method name="getTimerKeyCount()I" />
+		<method name="getTimerTime(I)J" />
+		<method name="getTimers(I)Ljava/util/Map;" />
+		<method name="getTimersKeyAt(I)I" />
+		<method name="getTimersKeyCount()I" />
+		<method name="hasMeasurement(I)Z" />
+		<method name="hasMeasurements(I)Z" />
+		<method name="hasStats(I)Z" />
+		<method name="hasTimer(I)Z" />
+		<method name="hasTimers(I)Z" />
+	</class>
+	<class name="android/os/health/PackageHealthStats" since="24">
+		<extends name="java/lang/Object" />
+		<field name="MEASUREMENTS_WAKEUP_ALARMS_COUNT" />
+		<field name="STATS_SERVICES" />
+	</class>
+	<class name="android/os/health/PidHealthStats" since="24">
+		<extends name="java/lang/Object" />
+		<field name="MEASUREMENT_WAKE_NESTING_COUNT" />
+		<field name="MEASUREMENT_WAKE_START_MS" />
+		<field name="MEASUREMENT_WAKE_SUM_MS" />
+	</class>
+	<class name="android/os/health/ProcessHealthStats" since="24">
+		<extends name="java/lang/Object" />
+		<field name="MEASUREMENT_ANR_COUNT" />
+		<field name="MEASUREMENT_CRASHES_COUNT" />
+		<field name="MEASUREMENT_FOREGROUND_MS" />
+		<field name="MEASUREMENT_STARTS_COUNT" />
+		<field name="MEASUREMENT_SYSTEM_TIME_MS" />
+		<field name="MEASUREMENT_USER_TIME_MS" />
+	</class>
+	<class name="android/os/health/ServiceHealthStats" since="24">
+		<extends name="java/lang/Object" />
+		<field name="MEASUREMENT_LAUNCH_COUNT" />
+		<field name="MEASUREMENT_START_SERVICE_COUNT" />
+	</class>
+	<class name="android/os/health/SystemHealthManager" since="24">
+		<extends name="java/lang/Object" />
+		<method name="takeMyUidSnapshot()Landroid/os/health/HealthStats;" />
+		<method name="takeUidSnapshot(I)Landroid/os/health/HealthStats;" />
+		<method name="takeUidSnapshots([I)[Landroid/os/health/HealthStats;" />
+	</class>
+	<class name="android/os/health/TimerStat" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(IJ)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getCount()I" />
+		<method name="getTime()J" />
+		<method name="setCount(I)V" />
+		<method name="setTime(J)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/os/health/UidHealthStats" since="24">
+		<extends name="java/lang/Object" />
+		<field name="MEASUREMENT_BLUETOOTH_IDLE_MS" />
+		<field name="MEASUREMENT_BLUETOOTH_POWER_MAMS" />
+		<field name="MEASUREMENT_BLUETOOTH_RX_BYTES" />
+		<field name="MEASUREMENT_BLUETOOTH_RX_MS" />
+		<field name="MEASUREMENT_BLUETOOTH_RX_PACKETS" />
+		<field name="MEASUREMENT_BLUETOOTH_TX_BYTES" />
+		<field name="MEASUREMENT_BLUETOOTH_TX_MS" />
+		<field name="MEASUREMENT_BLUETOOTH_TX_PACKETS" />
+		<field name="MEASUREMENT_BUTTON_USER_ACTIVITY_COUNT" />
+		<field name="MEASUREMENT_CPU_POWER_MAMS" deprecated="26" />
+		<field name="MEASUREMENT_MOBILE_IDLE_MS" />
+		<field name="MEASUREMENT_MOBILE_POWER_MAMS" />
+		<field name="MEASUREMENT_MOBILE_RX_BYTES" />
+		<field name="MEASUREMENT_MOBILE_RX_MS" />
+		<field name="MEASUREMENT_MOBILE_RX_PACKETS" />
+		<field name="MEASUREMENT_MOBILE_TX_BYTES" />
+		<field name="MEASUREMENT_MOBILE_TX_MS" />
+		<field name="MEASUREMENT_MOBILE_TX_PACKETS" />
+		<field name="MEASUREMENT_OTHER_USER_ACTIVITY_COUNT" />
+		<field name="MEASUREMENT_REALTIME_BATTERY_MS" />
+		<field name="MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS" />
+		<field name="MEASUREMENT_SYSTEM_CPU_TIME_MS" />
+		<field name="MEASUREMENT_TOUCH_USER_ACTIVITY_COUNT" />
+		<field name="MEASUREMENT_UPTIME_BATTERY_MS" />
+		<field name="MEASUREMENT_UPTIME_SCREEN_OFF_BATTERY_MS" />
+		<field name="MEASUREMENT_USER_CPU_TIME_MS" />
+		<field name="MEASUREMENT_WIFI_FULL_LOCK_MS" />
+		<field name="MEASUREMENT_WIFI_IDLE_MS" />
+		<field name="MEASUREMENT_WIFI_MULTICAST_MS" />
+		<field name="MEASUREMENT_WIFI_POWER_MAMS" />
+		<field name="MEASUREMENT_WIFI_RUNNING_MS" />
+		<field name="MEASUREMENT_WIFI_RX_BYTES" />
+		<field name="MEASUREMENT_WIFI_RX_MS" />
+		<field name="MEASUREMENT_WIFI_RX_PACKETS" />
+		<field name="MEASUREMENT_WIFI_TX_BYTES" />
+		<field name="MEASUREMENT_WIFI_TX_MS" />
+		<field name="MEASUREMENT_WIFI_TX_PACKETS" />
+		<field name="STATS_PACKAGES" />
+		<field name="STATS_PIDS" />
+		<field name="STATS_PROCESSES" />
+		<field name="TIMERS_JOBS" />
+		<field name="TIMERS_SENSORS" />
+		<field name="TIMERS_SYNCS" />
+		<field name="TIMERS_WAKELOCKS_DRAW" />
+		<field name="TIMERS_WAKELOCKS_FULL" />
+		<field name="TIMERS_WAKELOCKS_PARTIAL" />
+		<field name="TIMERS_WAKELOCKS_WINDOW" />
+		<field name="TIMER_AUDIO" />
+		<field name="TIMER_BLUETOOTH_SCAN" />
+		<field name="TIMER_CAMERA" />
+		<field name="TIMER_FLASHLIGHT" />
+		<field name="TIMER_FOREGROUND_ACTIVITY" />
+		<field name="TIMER_GPS_SENSOR" />
+		<field name="TIMER_MOBILE_RADIO_ACTIVE" />
+		<field name="TIMER_PROCESS_STATE_BACKGROUND_MS" />
+		<field name="TIMER_PROCESS_STATE_CACHED_MS" />
+		<field name="TIMER_PROCESS_STATE_FOREGROUND_MS" />
+		<field name="TIMER_PROCESS_STATE_FOREGROUND_SERVICE_MS" />
+		<field name="TIMER_PROCESS_STATE_TOP_MS" />
+		<field name="TIMER_PROCESS_STATE_TOP_SLEEPING_MS" />
+		<field name="TIMER_VIBRATOR" />
+		<field name="TIMER_VIDEO" />
+		<field name="TIMER_WIFI_SCAN" />
+	</class>
+	<class name="android/os/storage/OnObbStateChangeListener" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onObbStateChange(Ljava/lang/String;I)V" />
+		<field name="ERROR_ALREADY_MOUNTED" />
+		<field name="ERROR_COULD_NOT_MOUNT" />
+		<field name="ERROR_COULD_NOT_UNMOUNT" />
+		<field name="ERROR_INTERNAL" />
+		<field name="ERROR_NOT_MOUNTED" />
+		<field name="ERROR_PERMISSION_DENIED" />
+		<field name="MOUNTED" />
+		<field name="UNMOUNTED" />
+	</class>
+	<class name="android/os/storage/StorageManager" since="9">
+		<extends name="java/lang/Object" />
+		<method name="allocateBytes(Ljava/io/FileDescriptor;J)V" since="26" />
+		<method name="allocateBytes(Ljava/util/UUID;J)V" since="26" />
+		<method name="getAllocatableBytes(Ljava/util/UUID;)J" since="26" />
+		<method name="getCacheQuotaBytes(Ljava/util/UUID;)J" since="26" />
+		<method name="getCacheSizeBytes(Ljava/util/UUID;)J" since="26" />
+		<method name="getManageSpaceActivityIntent(Ljava/lang/String;I)Landroid/app/PendingIntent;" since="31" />
+		<method name="getMountedObbPath(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getPrimaryStorageVolume()Landroid/os/storage/StorageVolume;" since="24" />
+		<method name="getRecentStorageVolumes()Ljava/util/List;" since="30" />
+		<method name="getStorageVolume(Landroid/net/Uri;)Landroid/os/storage/StorageVolume;" since="29" />
+		<method name="getStorageVolume(Ljava/io/File;)Landroid/os/storage/StorageVolume;" since="24" />
+		<method name="getStorageVolumes()Ljava/util/List;" since="24" />
+		<method name="getUuidForPath(Ljava/io/File;)Ljava/util/UUID;" since="26" />
+		<method name="isAllocationSupported(Ljava/io/FileDescriptor;)Z" since="27" />
+		<method name="isCacheBehaviorGroup(Ljava/io/File;)Z" since="26" />
+		<method name="isCacheBehaviorTombstone(Ljava/io/File;)Z" since="26" />
+		<method name="isCheckpointSupported()Z" since="30" />
+		<method name="isEncrypted(Ljava/io/File;)Z" since="24" />
+		<method name="isObbMounted(Ljava/lang/String;)Z" />
+		<method name="mountObb(Ljava/lang/String;Ljava/lang/String;Landroid/os/storage/OnObbStateChangeListener;)Z" />
+		<method name="openProxyFileDescriptor(ILandroid/os/ProxyFileDescriptorCallback;Landroid/os/Handler;)Landroid/os/ParcelFileDescriptor;" since="26" />
+		<method name="registerStorageVolumeCallback(Ljava/util/concurrent/Executor;Landroid/os/storage/StorageManager$StorageVolumeCallback;)V" since="30" />
+		<method name="setCacheBehaviorGroup(Ljava/io/File;Z)V" since="26" />
+		<method name="setCacheBehaviorTombstone(Ljava/io/File;Z)V" since="26" />
+		<method name="unmountObb(Ljava/lang/String;ZLandroid/os/storage/OnObbStateChangeListener;)Z" />
+		<method name="unregisterStorageVolumeCallback(Landroid/os/storage/StorageManager$StorageVolumeCallback;)V" since="30" />
+		<field name="ACTION_CLEAR_APP_CACHE" since="30" />
+		<field name="ACTION_MANAGE_STORAGE" since="25" />
+		<field name="EXTRA_REQUESTED_BYTES" since="26" />
+		<field name="EXTRA_UUID" since="26" />
+		<field name="UUID_DEFAULT" since="26" />
+	</class>
+	<class name="android/os/storage/StorageManager$StorageVolumeCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onStateChanged(Landroid/os/storage/StorageVolume;)V" />
+	</class>
+	<class name="android/os/storage/StorageVolume" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createAccessIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="29" />
+		<method name="createOpenDocumentTreeIntent()Landroid/content/Intent;" since="29" />
+		<method name="getDescription(Landroid/content/Context;)Ljava/lang/String;" />
+		<method name="getDirectory()Ljava/io/File;" since="30" />
+		<method name="getMediaStoreVolumeName()Ljava/lang/String;" since="30" />
+		<method name="getState()Ljava/lang/String;" />
+		<method name="getStorageUuid()Ljava/util/UUID;" since="31" />
+		<method name="getUuid()Ljava/lang/String;" />
+		<method name="isEmulated()Z" />
+		<method name="isPrimary()Z" />
+		<method name="isRemovable()Z" />
+		<field name="CREATOR" />
+		<field name="EXTRA_STORAGE_VOLUME" />
+	</class>
+	<class name="android/os/strictmode/CleartextNetworkViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/ContentUriWithoutPermissionViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/CredentialProtectedWhileLockedViolation" since="29">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/CustomViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/DiskReadViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/DiskWriteViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/FileUriExposedViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/ImplicitDirectBootViolation" since="29">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/IncorrectContextUseViolation" since="31">
+		<extends name="android/os/strictmode/Violation" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/os/strictmode/InstanceCountViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+		<method name="getNumberOfInstances()J" />
+	</class>
+	<class name="android/os/strictmode/IntentReceiverLeakedViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/LeakedClosableViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/NetworkViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/NonSdkApiUsedViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/ResourceMismatchViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/ServiceConnectionLeakedViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/SqliteObjectLeakedViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/UnbufferedIoViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/UnsafeIntentLaunchViolation" since="31">
+		<extends name="android/os/strictmode/Violation" />
+		<method name="&lt;init&gt;(Landroid/content/Intent;)V" />
+		<method name="getIntent()Landroid/content/Intent;" />
+	</class>
+	<class name="android/os/strictmode/UntaggedSocketViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/os/strictmode/Violation" since="28">
+		<extends name="java/lang/Throwable" />
+	</class>
+	<class name="android/os/strictmode/WebViewMethodCalledOnWrongThreadViolation" since="28">
+		<extends name="android/os/strictmode/Violation" />
+	</class>
+	<class name="android/preference/CheckBoxPreference" since="1" deprecated="29">
+		<extends name="android/preference/Preference" removed="14" />
+		<extends name="android/preference/TwoStatePreference" since="14" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getDisableDependentsState()Z" removed="14" />
+		<method name="getSummaryOff()Ljava/lang/CharSequence;" removed="14" />
+		<method name="getSummaryOn()Ljava/lang/CharSequence;" removed="14" />
+		<method name="isChecked()Z" removed="14" />
+		<method name="setChecked(Z)V" removed="14" />
+		<method name="setDisableDependentsState(Z)V" removed="14" />
+		<method name="setSummaryOff(I)V" removed="14" />
+		<method name="setSummaryOff(Ljava/lang/CharSequence;)V" removed="14" />
+		<method name="setSummaryOn(I)V" removed="14" />
+		<method name="setSummaryOn(Ljava/lang/CharSequence;)V" removed="14" />
+	</class>
+	<class name="android/preference/DialogPreference" since="1" deprecated="29">
+		<extends name="android/preference/Preference" />
+		<implements name="android/content/DialogInterface$OnClickListener" />
+		<implements name="android/content/DialogInterface$OnDismissListener" />
+		<implements name="android/preference/PreferenceManager$OnActivityDestroyListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" since="21" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getDialog()Landroid/app/Dialog;" since="3" deprecated="29" />
+		<method name="getDialogIcon()Landroid/graphics/drawable/Drawable;" deprecated="29" />
+		<method name="getDialogLayoutResource()I" deprecated="29" />
+		<method name="getDialogMessage()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getDialogTitle()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getNegativeButtonText()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getPositiveButtonText()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="onBindDialogView(Landroid/view/View;)V" deprecated="29" />
+		<method name="onCreateDialogView()Landroid/view/View;" deprecated="29" />
+		<method name="onDialogClosed(Z)V" deprecated="29" />
+		<method name="onPrepareDialogBuilder(Landroid/app/AlertDialog$Builder;)V" deprecated="29" />
+		<method name="setDialogIcon(I)V" deprecated="29" />
+		<method name="setDialogIcon(Landroid/graphics/drawable/Drawable;)V" deprecated="29" />
+		<method name="setDialogLayoutResource(I)V" deprecated="29" />
+		<method name="setDialogMessage(I)V" deprecated="29" />
+		<method name="setDialogMessage(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setDialogTitle(I)V" deprecated="29" />
+		<method name="setDialogTitle(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setNegativeButtonText(I)V" deprecated="29" />
+		<method name="setNegativeButtonText(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setPositiveButtonText(I)V" deprecated="29" />
+		<method name="setPositiveButtonText(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="showDialog(Landroid/os/Bundle;)V" deprecated="29" />
+	</class>
+	<class name="android/preference/EditTextPreference" since="1" deprecated="29">
+		<extends name="android/preference/DialogPreference" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getEditText()Landroid/widget/EditText;" deprecated="29" />
+		<method name="getText()Ljava/lang/String;" deprecated="29" />
+		<method name="onAddEditTextToDialogView(Landroid/view/View;Landroid/widget/EditText;)V" deprecated="29" />
+		<method name="setText(Ljava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="android/preference/ListPreference" since="1" deprecated="29">
+		<extends name="android/preference/DialogPreference" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="findIndexOfValue(Ljava/lang/String;)I" deprecated="29" />
+		<method name="getEntries()[Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getEntry()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getEntryValues()[Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getValue()Ljava/lang/String;" deprecated="29" />
+		<method name="setEntries(I)V" deprecated="29" />
+		<method name="setEntries([Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setEntryValues(I)V" deprecated="29" />
+		<method name="setEntryValues([Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setValue(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setValueIndex(I)V" deprecated="29" />
+	</class>
+	<class name="android/preference/MultiSelectListPreference" since="11" deprecated="29">
+		<extends name="android/preference/DialogPreference" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="findIndexOfValue(Ljava/lang/String;)I" deprecated="29" />
+		<method name="getEntries()[Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getEntryValues()[Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getValues()Ljava/util/Set;" deprecated="29" />
+		<method name="setEntries(I)V" deprecated="29" />
+		<method name="setEntries([Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setEntryValues(I)V" deprecated="29" />
+		<method name="setEntryValues([Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setValues(Ljava/util/Set;)V" deprecated="29" />
+	</class>
+	<class name="android/preference/Preference" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="callChangeListener(Ljava/lang/Object;)Z" deprecated="29" />
+		<method name="compareTo(Landroid/preference/Preference;)I" deprecated="29" />
+		<method name="findPreferenceInHierarchy(Ljava/lang/String;)Landroid/preference/Preference;" deprecated="29" />
+		<method name="getContext()Landroid/content/Context;" deprecated="29" />
+		<method name="getDependency()Ljava/lang/String;" deprecated="29" />
+		<method name="getEditor()Landroid/content/SharedPreferences$Editor;" deprecated="29" />
+		<method name="getExtras()Landroid/os/Bundle;" since="11" deprecated="29" />
+		<method name="getFragment()Ljava/lang/String;" since="11" deprecated="29" />
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;" since="11" deprecated="29" />
+		<method name="getIntent()Landroid/content/Intent;" deprecated="29" />
+		<method name="getKey()Ljava/lang/String;" deprecated="29" />
+		<method name="getLayoutResource()I" deprecated="29" />
+		<method name="getOnPreferenceChangeListener()Landroid/preference/Preference$OnPreferenceChangeListener;" deprecated="29" />
+		<method name="getOnPreferenceClickListener()Landroid/preference/Preference$OnPreferenceClickListener;" deprecated="29" />
+		<method name="getOrder()I" deprecated="29" />
+		<method name="getParent()Landroid/preference/PreferenceGroup;" since="26" deprecated="29" />
+		<method name="getPersistedBoolean(Z)Z" deprecated="29" />
+		<method name="getPersistedFloat(F)F" deprecated="29" />
+		<method name="getPersistedInt(I)I" deprecated="29" />
+		<method name="getPersistedLong(J)J" deprecated="29" />
+		<method name="getPersistedString(Ljava/lang/String;)Ljava/lang/String;" deprecated="29" />
+		<method name="getPersistedStringSet(Ljava/util/Set;)Ljava/util/Set;" since="24" deprecated="29" />
+		<method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26" deprecated="29" />
+		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="29" />
+		<method name="getSharedPreferences()Landroid/content/SharedPreferences;" deprecated="29" />
+		<method name="getShouldDisableView()Z" deprecated="29" />
+		<method name="getSummary()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getTitle()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getTitleRes()I" since="14" deprecated="29" />
+		<method name="getView(Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;" deprecated="29" />
+		<method name="getWidgetLayoutResource()I" deprecated="29" />
+		<method name="hasKey()Z" deprecated="29" />
+		<method name="isEnabled()Z" deprecated="29" />
+		<method name="isIconSpaceReserved()Z" since="26" deprecated="29" />
+		<method name="isPersistent()Z" deprecated="29" />
+		<method name="isRecycleEnabled()Z" since="26" deprecated="29" />
+		<method name="isSelectable()Z" deprecated="29" />
+		<method name="isSingleLineTitle()Z" since="26" deprecated="29" />
+		<method name="notifyChanged()V" deprecated="29" />
+		<method name="notifyDependencyChange(Z)V" deprecated="29" />
+		<method name="notifyHierarchyChanged()V" deprecated="29" />
+		<method name="onAttachedToActivity()V" deprecated="29" />
+		<method name="onAttachedToHierarchy(Landroid/preference/PreferenceManager;)V" deprecated="29" />
+		<method name="onBindView(Landroid/view/View;)V" deprecated="29" />
+		<method name="onClick()V" deprecated="29" />
+		<method name="onCreateView(Landroid/view/ViewGroup;)Landroid/view/View;" deprecated="29" />
+		<method name="onDependencyChanged(Landroid/preference/Preference;Z)V" deprecated="29" />
+		<method name="onGetDefaultValue(Landroid/content/res/TypedArray;I)Ljava/lang/Object;" deprecated="29" />
+		<method name="onParentChanged(Landroid/preference/Preference;Z)V" since="19" deprecated="29" />
+		<method name="onPrepareForRemoval()V" deprecated="29" />
+		<method name="onRestoreInstanceState(Landroid/os/Parcelable;)V" deprecated="29" />
+		<method name="onSaveInstanceState()Landroid/os/Parcelable;" deprecated="29" />
+		<method name="onSetInitialValue(ZLjava/lang/Object;)V" deprecated="29" />
+		<method name="peekExtras()Landroid/os/Bundle;" since="11" deprecated="29" />
+		<method name="persistBoolean(Z)Z" deprecated="29" />
+		<method name="persistFloat(F)Z" deprecated="29" />
+		<method name="persistInt(I)Z" deprecated="29" />
+		<method name="persistLong(J)Z" deprecated="29" />
+		<method name="persistString(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="persistStringSet(Ljava/util/Set;)Z" since="24" deprecated="29" />
+		<method name="restoreHierarchyState(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="saveHierarchyState(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="setDefaultValue(Ljava/lang/Object;)V" deprecated="29" />
+		<method name="setDependency(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setEnabled(Z)V" deprecated="29" />
+		<method name="setFragment(Ljava/lang/String;)V" since="11" deprecated="29" />
+		<method name="setIcon(I)V" since="11" deprecated="29" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="11" deprecated="29" />
+		<method name="setIconSpaceReserved(Z)V" since="26" deprecated="29" />
+		<method name="setIntent(Landroid/content/Intent;)V" deprecated="29" />
+		<method name="setKey(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setLayoutResource(I)V" deprecated="29" />
+		<method name="setOnPreferenceChangeListener(Landroid/preference/Preference$OnPreferenceChangeListener;)V" deprecated="29" />
+		<method name="setOnPreferenceClickListener(Landroid/preference/Preference$OnPreferenceClickListener;)V" deprecated="29" />
+		<method name="setOrder(I)V" deprecated="29" />
+		<method name="setPersistent(Z)V" deprecated="29" />
+		<method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26" deprecated="29" />
+		<method name="setRecycleEnabled(Z)V" since="26" deprecated="29" />
+		<method name="setSelectable(Z)V" deprecated="29" />
+		<method name="setShouldDisableView(Z)V" deprecated="29" />
+		<method name="setSingleLineTitle(Z)V" since="26" deprecated="29" />
+		<method name="setSummary(I)V" deprecated="29" />
+		<method name="setSummary(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setTitle(I)V" deprecated="29" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setWidgetLayoutResource(I)V" deprecated="29" />
+		<method name="shouldCommit()Z" deprecated="29" />
+		<method name="shouldDisableDependents()Z" deprecated="29" />
+		<method name="shouldPersist()Z" deprecated="29" />
+		<field name="DEFAULT_ORDER" deprecated="29" />
+	</class>
+	<class name="android/preference/Preference$BaseSavedState" since="1" deprecated="29">
+		<extends name="android/view/AbsSavedState" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/os/Parcelable;)V" deprecated="29" />
+		<field name="CREATOR" deprecated="29" />
+	</class>
+	<class name="android/preference/Preference$OnPreferenceChangeListener" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onPreferenceChange(Landroid/preference/Preference;Ljava/lang/Object;)Z" deprecated="29" />
+	</class>
+	<class name="android/preference/Preference$OnPreferenceClickListener" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onPreferenceClick(Landroid/preference/Preference;)Z" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceActivity" since="1" deprecated="29">
+		<extends name="android/app/ListActivity" />
+		<implements name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="15" />
+		<method name="addPreferencesFromResource(I)V" deprecated="15" />
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="15" />
+		<method name="finishPreferencePanel(Landroid/app/Fragment;ILandroid/content/Intent;)V" since="11" deprecated="29" />
+		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="15" />
+		<method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="15" />
+		<method name="hasHeaders()Z" since="11" deprecated="29" />
+		<method name="invalidateHeaders()V" since="11" deprecated="29" />
+		<method name="isMultiPane()Z" since="11" deprecated="29" />
+		<method name="isValidFragment(Ljava/lang/String;)Z" since="19" deprecated="29" />
+		<method name="loadHeadersFromResource(ILjava/util/List;)V" since="11" deprecated="29" />
+		<method name="onBuildHeaders(Ljava/util/List;)V" since="11" deprecated="29" />
+		<method name="onBuildStartFragmentIntent(Ljava/lang/String;Landroid/os/Bundle;II)Landroid/content/Intent;" since="14" deprecated="29" />
+		<method name="onGetInitialHeader()Landroid/preference/PreferenceActivity$Header;" since="11" deprecated="29" />
+		<method name="onGetNewHeader()Landroid/preference/PreferenceActivity$Header;" since="11" deprecated="29" />
+		<method name="onHeaderClick(Landroid/preference/PreferenceActivity$Header;I)V" since="11" deprecated="29" />
+		<method name="onIsHidingHeaders()Z" since="11" deprecated="29" />
+		<method name="onIsMultiPane()Z" since="11" deprecated="29" />
+		<method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="15" />
+		<method name="setListFooter(Landroid/view/View;)V" since="11" deprecated="29" />
+		<method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" since="11" deprecated="29" />
+		<method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="15" />
+		<method name="showBreadCrumbs(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" since="11" deprecated="29" />
+		<method name="startPreferenceFragment(Landroid/app/Fragment;Z)V" since="11" deprecated="29" />
+		<method name="startPreferencePanel(Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/CharSequence;Landroid/app/Fragment;I)V" since="11" deprecated="29" />
+		<method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;I)V" since="11" deprecated="29" />
+		<method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;III)V" since="14" deprecated="29" />
+		<method name="switchToHeader(Landroid/preference/PreferenceActivity$Header;)V" since="11" deprecated="29" />
+		<method name="switchToHeader(Ljava/lang/String;Landroid/os/Bundle;)V" since="11" deprecated="29" />
+		<field name="EXTRA_NO_HEADERS" since="11" deprecated="29" />
+		<field name="EXTRA_SHOW_FRAGMENT" since="11" deprecated="29" />
+		<field name="EXTRA_SHOW_FRAGMENT_ARGUMENTS" since="11" deprecated="29" />
+		<field name="EXTRA_SHOW_FRAGMENT_SHORT_TITLE" since="14" deprecated="29" />
+		<field name="EXTRA_SHOW_FRAGMENT_TITLE" since="14" deprecated="29" />
+		<field name="HEADER_ID_UNDEFINED" since="11" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceActivity$Header" since="11" deprecated="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getBreadCrumbShortTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getBreadCrumbTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getSummary(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" deprecated="29" />
+		<field name="CREATOR" deprecated="29" />
+		<field name="breadCrumbShortTitle" deprecated="29" />
+		<field name="breadCrumbShortTitleRes" deprecated="29" />
+		<field name="breadCrumbTitle" deprecated="29" />
+		<field name="breadCrumbTitleRes" deprecated="29" />
+		<field name="extras" deprecated="29" />
+		<field name="fragment" deprecated="29" />
+		<field name="fragmentArguments" deprecated="29" />
+		<field name="iconRes" deprecated="29" />
+		<field name="id" deprecated="29" />
+		<field name="intent" deprecated="29" />
+		<field name="summary" deprecated="29" />
+		<field name="summaryRes" deprecated="29" />
+		<field name="title" deprecated="29" />
+		<field name="titleRes" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceCategory" since="1" deprecated="29">
+		<extends name="android/preference/PreferenceGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceDataStore" since="26" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="getBoolean(Ljava/lang/String;Z)Z" deprecated="29" />
+		<method name="getFloat(Ljava/lang/String;F)F" deprecated="29" />
+		<method name="getInt(Ljava/lang/String;I)I" deprecated="29" />
+		<method name="getLong(Ljava/lang/String;J)J" deprecated="29" />
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="29" />
+		<method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;" deprecated="29" />
+		<method name="putBoolean(Ljava/lang/String;Z)V" deprecated="29" />
+		<method name="putFloat(Ljava/lang/String;F)V" deprecated="29" />
+		<method name="putInt(Ljava/lang/String;I)V" deprecated="29" />
+		<method name="putLong(Ljava/lang/String;J)V" deprecated="29" />
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29" />
+		<method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)V" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="29" />
+		<method name="addPreferencesFromResource(I)V" deprecated="29" />
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29" />
+		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="29" />
+		<method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="29" />
+		<method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="29" />
+		<method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="onPreferenceStartFragment(Landroid/preference/PreferenceFragment;Landroid/preference/Preference;)Z" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceGroup" since="1" deprecated="29">
+		<extends name="android/preference/Preference" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="addItemFromInflater(Landroid/preference/Preference;)V" deprecated="29" />
+		<method name="addPreference(Landroid/preference/Preference;)Z" deprecated="29" />
+		<method name="dispatchRestoreInstanceState(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="dispatchSaveInstanceState(Landroid/os/Bundle;)V" deprecated="29" />
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29" />
+		<method name="getPreference(I)Landroid/preference/Preference;" deprecated="29" />
+		<method name="getPreferenceCount()I" deprecated="29" />
+		<method name="isOnSameScreenAsChildren()Z" deprecated="29" />
+		<method name="isOrderingAsAdded()Z" deprecated="29" />
+		<method name="onPrepareAddPreference(Landroid/preference/Preference;)Z" deprecated="29" />
+		<method name="removeAll()V" deprecated="29" />
+		<method name="removePreference(Landroid/preference/Preference;)Z" deprecated="29" />
+		<method name="setOrderingAsAdded(Z)V" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceManager" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="createPreferenceScreen(Landroid/content/Context;)Landroid/preference/PreferenceScreen;" deprecated="29" />
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29" />
+		<method name="getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;" deprecated="29" />
+		<method name="getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;" since="24" deprecated="29" />
+		<method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26" deprecated="29" />
+		<method name="getSharedPreferences()Landroid/content/SharedPreferences;" deprecated="29" />
+		<method name="getSharedPreferencesMode()I" deprecated="29" />
+		<method name="getSharedPreferencesName()Ljava/lang/String;" deprecated="29" />
+		<method name="isStorageDefault()Z" since="24" deprecated="29" />
+		<method name="isStorageDeviceProtected()Z" since="24" deprecated="29" />
+		<method name="setDefaultValues(Landroid/content/Context;IZ)V" deprecated="29" />
+		<method name="setDefaultValues(Landroid/content/Context;Ljava/lang/String;IIZ)V" deprecated="29" />
+		<method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26" deprecated="29" />
+		<method name="setSharedPreferencesMode(I)V" deprecated="29" />
+		<method name="setSharedPreferencesName(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setStorageDefault()V" since="24" deprecated="29" />
+		<method name="setStorageDeviceProtected()V" since="24" deprecated="29" />
+		<field name="KEY_HAS_SET_DEFAULT_VALUES" deprecated="29" />
+		<field name="METADATA_KEY_PREFERENCES" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceManager$OnActivityDestroyListener" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onActivityDestroy()V" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceManager$OnActivityResultListener" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onActivityResult(IILandroid/content/Intent;)Z" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceManager$OnActivityStopListener" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onActivityStop()V" deprecated="29" />
+	</class>
+	<class name="android/preference/PreferenceScreen" since="1" deprecated="29">
+		<extends name="android/preference/PreferenceGroup" />
+		<implements name="android/content/DialogInterface$OnDismissListener" />
+		<implements name="android/widget/AdapterView$OnItemClickListener" />
+		<method name="bind(Landroid/widget/ListView;)V" deprecated="29" />
+		<method name="getDialog()Landroid/app/Dialog;" deprecated="29" />
+		<method name="getRootAdapter()Landroid/widget/ListAdapter;" deprecated="29" />
+		<method name="onCreateRootAdapter()Landroid/widget/ListAdapter;" deprecated="29" />
+	</class>
+	<class name="android/preference/RingtonePreference" since="1" deprecated="29">
+		<extends name="android/preference/Preference" />
+		<implements name="android/preference/PreferenceManager$OnActivityResultListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getRingtoneType()I" deprecated="29" />
+		<method name="getShowDefault()Z" deprecated="29" />
+		<method name="getShowSilent()Z" deprecated="29" />
+		<method name="onPrepareRingtonePickerIntent(Landroid/content/Intent;)V" deprecated="29" />
+		<method name="onRestoreRingtone()Landroid/net/Uri;" deprecated="29" />
+		<method name="onSaveRingtone(Landroid/net/Uri;)V" deprecated="29" />
+		<method name="setRingtoneType(I)V" deprecated="29" />
+		<method name="setShowDefault(Z)V" deprecated="29" />
+		<method name="setShowSilent(Z)V" deprecated="29" />
+	</class>
+	<class name="android/preference/SwitchPreference" since="14" deprecated="29">
+		<extends name="android/preference/TwoStatePreference" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getSwitchTextOff()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getSwitchTextOn()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="setSwitchTextOff(I)V" deprecated="29" />
+		<method name="setSwitchTextOff(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setSwitchTextOn(I)V" deprecated="29" />
+		<method name="setSwitchTextOn(Ljava/lang/CharSequence;)V" deprecated="29" />
+	</class>
+	<class name="android/preference/TwoStatePreference" since="14" deprecated="29">
+		<extends name="android/preference/Preference" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getDisableDependentsState()Z" deprecated="29" />
+		<method name="getSummaryOff()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getSummaryOn()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="isChecked()Z" deprecated="29" />
+		<method name="setChecked(Z)V" deprecated="29" />
+		<method name="setDisableDependentsState(Z)V" deprecated="29" />
+		<method name="setSummaryOff(I)V" deprecated="29" />
+		<method name="setSummaryOff(Ljava/lang/CharSequence;)V" deprecated="29" />
+		<method name="setSummaryOn(I)V" deprecated="29" />
+		<method name="setSummaryOn(Ljava/lang/CharSequence;)V" deprecated="29" />
+	</class>
+	<class name="android/print/PageRange" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getEnd()I" />
+		<method name="getStart()I" />
+		<field name="ALL_PAGES" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/print/PrintAttributes" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getColorMode()I" />
+		<method name="getDuplexMode()I" since="23" />
+		<method name="getMediaSize()Landroid/print/PrintAttributes$MediaSize;" />
+		<method name="getMinMargins()Landroid/print/PrintAttributes$Margins;" />
+		<method name="getResolution()Landroid/print/PrintAttributes$Resolution;" />
+		<field name="COLOR_MODE_COLOR" />
+		<field name="COLOR_MODE_MONOCHROME" />
+		<field name="CREATOR" />
+		<field name="DUPLEX_MODE_LONG_EDGE" since="23" />
+		<field name="DUPLEX_MODE_NONE" since="23" />
+		<field name="DUPLEX_MODE_SHORT_EDGE" since="23" />
+	</class>
+	<class name="android/print/PrintAttributes$Builder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/print/PrintAttributes;" />
+		<method name="setColorMode(I)Landroid/print/PrintAttributes$Builder;" />
+		<method name="setDuplexMode(I)Landroid/print/PrintAttributes$Builder;" since="23" />
+		<method name="setMediaSize(Landroid/print/PrintAttributes$MediaSize;)Landroid/print/PrintAttributes$Builder;" />
+		<method name="setMinMargins(Landroid/print/PrintAttributes$Margins;)Landroid/print/PrintAttributes$Builder;" />
+		<method name="setResolution(Landroid/print/PrintAttributes$Resolution;)Landroid/print/PrintAttributes$Builder;" />
+	</class>
+	<class name="android/print/PrintAttributes$Margins" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IIII)V" />
+		<method name="getBottomMils()I" />
+		<method name="getLeftMils()I" />
+		<method name="getRightMils()I" />
+		<method name="getTopMils()I" />
+		<field name="NO_MARGINS" />
+	</class>
+	<class name="android/print/PrintAttributes$MediaSize" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;II)V" />
+		<method name="asLandscape()Landroid/print/PrintAttributes$MediaSize;" />
+		<method name="asPortrait()Landroid/print/PrintAttributes$MediaSize;" />
+		<method name="getHeightMils()I" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getLabel(Landroid/content/pm/PackageManager;)Ljava/lang/String;" />
+		<method name="getWidthMils()I" />
+		<method name="isPortrait()Z" />
+		<field name="ANSI_C" since="31" />
+		<field name="ANSI_D" since="31" />
+		<field name="ANSI_E" since="31" />
+		<field name="ANSI_F" since="31" />
+		<field name="ISO_A0" />
+		<field name="ISO_A1" />
+		<field name="ISO_A10" />
+		<field name="ISO_A2" />
+		<field name="ISO_A3" />
+		<field name="ISO_A4" />
+		<field name="ISO_A5" />
+		<field name="ISO_A6" />
+		<field name="ISO_A7" />
+		<field name="ISO_A8" />
+		<field name="ISO_A9" />
+		<field name="ISO_B0" />
+		<field name="ISO_B1" />
+		<field name="ISO_B10" />
+		<field name="ISO_B2" />
+		<field name="ISO_B3" />
+		<field name="ISO_B4" />
+		<field name="ISO_B5" />
+		<field name="ISO_B6" />
+		<field name="ISO_B7" />
+		<field name="ISO_B8" />
+		<field name="ISO_B9" />
+		<field name="ISO_C0" />
+		<field name="ISO_C1" />
+		<field name="ISO_C10" />
+		<field name="ISO_C2" />
+		<field name="ISO_C3" />
+		<field name="ISO_C4" />
+		<field name="ISO_C5" />
+		<field name="ISO_C6" />
+		<field name="ISO_C7" />
+		<field name="ISO_C8" />
+		<field name="ISO_C9" />
+		<field name="JIS_B0" />
+		<field name="JIS_B1" />
+		<field name="JIS_B10" />
+		<field name="JIS_B2" />
+		<field name="JIS_B3" />
+		<field name="JIS_B4" />
+		<field name="JIS_B5" />
+		<field name="JIS_B6" />
+		<field name="JIS_B7" />
+		<field name="JIS_B8" />
+		<field name="JIS_B9" />
+		<field name="JIS_EXEC" />
+		<field name="JPN_CHOU2" />
+		<field name="JPN_CHOU3" />
+		<field name="JPN_CHOU4" />
+		<field name="JPN_HAGAKI" />
+		<field name="JPN_KAHU" />
+		<field name="JPN_KAKU2" />
+		<field name="JPN_OE_PHOTO_L" since="31" />
+		<field name="JPN_OUFUKU" />
+		<field name="JPN_YOU4" />
+		<field name="NA_ARCH_A" since="31" />
+		<field name="NA_ARCH_B" since="31" />
+		<field name="NA_ARCH_C" since="31" />
+		<field name="NA_ARCH_D" since="31" />
+		<field name="NA_ARCH_E" since="31" />
+		<field name="NA_ARCH_E1" since="31" />
+		<field name="NA_FOOLSCAP" />
+		<field name="NA_GOVT_LETTER" />
+		<field name="NA_INDEX_3X5" />
+		<field name="NA_INDEX_4X6" />
+		<field name="NA_INDEX_5X8" />
+		<field name="NA_JUNIOR_LEGAL" />
+		<field name="NA_LEDGER" />
+		<field name="NA_LEGAL" />
+		<field name="NA_LETTER" />
+		<field name="NA_MONARCH" />
+		<field name="NA_QUARTO" />
+		<field name="NA_SUPER_B" since="31" />
+		<field name="NA_TABLOID" />
+		<field name="OM_DAI_PA_KAI" />
+		<field name="OM_JUURO_KU_KAI" />
+		<field name="OM_PA_KAI" />
+		<field name="PRC_1" />
+		<field name="PRC_10" />
+		<field name="PRC_16K" />
+		<field name="PRC_2" />
+		<field name="PRC_3" />
+		<field name="PRC_4" />
+		<field name="PRC_5" />
+		<field name="PRC_6" />
+		<field name="PRC_7" />
+		<field name="PRC_8" />
+		<field name="PRC_9" />
+		<field name="ROC_16K" />
+		<field name="ROC_8K" />
+		<field name="UNKNOWN_LANDSCAPE" />
+		<field name="UNKNOWN_PORTRAIT" />
+	</class>
+	<class name="android/print/PrintAttributes$Resolution" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;II)V" />
+		<method name="getHorizontalDpi()I" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getLabel()Ljava/lang/String;" />
+		<method name="getVerticalDpi()I" />
+	</class>
+	<class name="android/print/PrintDocumentAdapter" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onFinish()V" />
+		<method name="onLayout(Landroid/print/PrintAttributes;Landroid/print/PrintAttributes;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$LayoutResultCallback;Landroid/os/Bundle;)V" />
+		<method name="onStart()V" />
+		<method name="onWrite([Landroid/print/PageRange;Landroid/os/ParcelFileDescriptor;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$WriteResultCallback;)V" />
+		<field name="EXTRA_PRINT_PREVIEW" />
+	</class>
+	<class name="android/print/PrintDocumentAdapter$LayoutResultCallback" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onLayoutCancelled()V" />
+		<method name="onLayoutFailed(Ljava/lang/CharSequence;)V" />
+		<method name="onLayoutFinished(Landroid/print/PrintDocumentInfo;Z)V" />
+	</class>
+	<class name="android/print/PrintDocumentAdapter$WriteResultCallback" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onWriteCancelled()V" />
+		<method name="onWriteFailed(Ljava/lang/CharSequence;)V" />
+		<method name="onWriteFinished([Landroid/print/PageRange;)V" />
+	</class>
+	<class name="android/print/PrintDocumentInfo" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getContentType()I" />
+		<method name="getDataSize()J" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPageCount()I" />
+		<field name="CONTENT_TYPE_DOCUMENT" />
+		<field name="CONTENT_TYPE_PHOTO" />
+		<field name="CONTENT_TYPE_UNKNOWN" />
+		<field name="CREATOR" />
+		<field name="PAGE_COUNT_UNKNOWN" />
+	</class>
+	<class name="android/print/PrintDocumentInfo$Builder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="build()Landroid/print/PrintDocumentInfo;" />
+		<method name="setContentType(I)Landroid/print/PrintDocumentInfo$Builder;" />
+		<method name="setPageCount(I)Landroid/print/PrintDocumentInfo$Builder;" />
+	</class>
+	<class name="android/print/PrintJob" since="19">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="getId()Landroid/print/PrintJobId;" />
+		<method name="getInfo()Landroid/print/PrintJobInfo;" />
+		<method name="isBlocked()Z" />
+		<method name="isCancelled()Z" />
+		<method name="isCompleted()Z" />
+		<method name="isFailed()Z" />
+		<method name="isQueued()Z" />
+		<method name="isStarted()Z" />
+		<method name="restart()V" />
+	</class>
+	<class name="android/print/PrintJobId" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/print/PrintJobInfo" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAdvancedIntOption(Ljava/lang/String;)I" since="26" />
+		<method name="getAdvancedStringOption(Ljava/lang/String;)Ljava/lang/String;" since="26" />
+		<method name="getAttributes()Landroid/print/PrintAttributes;" />
+		<method name="getCopies()I" />
+		<method name="getCreationTime()J" />
+		<method name="getId()Landroid/print/PrintJobId;" />
+		<method name="getLabel()Ljava/lang/String;" />
+		<method name="getPages()[Landroid/print/PageRange;" />
+		<method name="getPrinterId()Landroid/print/PrinterId;" />
+		<method name="getState()I" />
+		<method name="hasAdvancedOption(Ljava/lang/String;)Z" since="26" />
+		<field name="CREATOR" />
+		<field name="STATE_BLOCKED" />
+		<field name="STATE_CANCELED" />
+		<field name="STATE_COMPLETED" />
+		<field name="STATE_CREATED" />
+		<field name="STATE_FAILED" />
+		<field name="STATE_QUEUED" />
+		<field name="STATE_STARTED" />
+	</class>
+	<class name="android/print/PrintJobInfo$Builder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/print/PrintJobInfo;)V" />
+		<method name="build()Landroid/print/PrintJobInfo;" />
+		<method name="putAdvancedOption(Ljava/lang/String;I)V" />
+		<method name="putAdvancedOption(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setAttributes(Landroid/print/PrintAttributes;)V" />
+		<method name="setCopies(I)V" />
+		<method name="setPages([Landroid/print/PageRange;)V" />
+	</class>
+	<class name="android/print/PrintManager" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getPrintJobs()Ljava/util/List;" />
+		<method name="print(Ljava/lang/String;Landroid/print/PrintDocumentAdapter;Landroid/print/PrintAttributes;)Landroid/print/PrintJob;" />
+	</class>
+	<class name="android/print/PrinterCapabilitiesInfo" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getColorModes()I" />
+		<method name="getDefaults()Landroid/print/PrintAttributes;" />
+		<method name="getDuplexModes()I" since="23" />
+		<method name="getMediaSizes()Ljava/util/List;" />
+		<method name="getMinMargins()Landroid/print/PrintAttributes$Margins;" />
+		<method name="getResolutions()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/print/PrinterCapabilitiesInfo$Builder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/print/PrinterId;)V" />
+		<method name="addMediaSize(Landroid/print/PrintAttributes$MediaSize;Z)Landroid/print/PrinterCapabilitiesInfo$Builder;" />
+		<method name="addResolution(Landroid/print/PrintAttributes$Resolution;Z)Landroid/print/PrinterCapabilitiesInfo$Builder;" />
+		<method name="build()Landroid/print/PrinterCapabilitiesInfo;" />
+		<method name="setColorModes(II)Landroid/print/PrinterCapabilitiesInfo$Builder;" />
+		<method name="setDuplexModes(II)Landroid/print/PrinterCapabilitiesInfo$Builder;" since="23" />
+		<method name="setMinMargins(Landroid/print/PrintAttributes$Margins;)Landroid/print/PrinterCapabilitiesInfo$Builder;" />
+	</class>
+	<class name="android/print/PrinterId" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getLocalId()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/print/PrinterInfo" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCapabilities()Landroid/print/PrinterCapabilitiesInfo;" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getId()Landroid/print/PrinterId;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getStatus()I" />
+		<field name="CREATOR" />
+		<field name="STATUS_BUSY" />
+		<field name="STATUS_IDLE" />
+		<field name="STATUS_UNAVAILABLE" />
+	</class>
+	<class name="android/print/PrinterInfo$Builder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/print/PrinterId;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Landroid/print/PrinterInfo;)V" />
+		<method name="build()Landroid/print/PrinterInfo;" />
+		<method name="setCapabilities(Landroid/print/PrinterCapabilitiesInfo;)Landroid/print/PrinterInfo$Builder;" />
+		<method name="setDescription(Ljava/lang/String;)Landroid/print/PrinterInfo$Builder;" />
+		<method name="setHasCustomPrinterIcon(Z)Landroid/print/PrinterInfo$Builder;" since="24" />
+		<method name="setIconResourceId(I)Landroid/print/PrinterInfo$Builder;" since="24" />
+		<method name="setInfoIntent(Landroid/app/PendingIntent;)Landroid/print/PrinterInfo$Builder;" since="24" />
+		<method name="setName(Ljava/lang/String;)Landroid/print/PrinterInfo$Builder;" />
+		<method name="setStatus(I)Landroid/print/PrinterInfo$Builder;" />
+	</class>
+	<class name="android/print/pdf/PrintedPdfDocument" since="19">
+		<extends name="android/graphics/pdf/PdfDocument" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/print/PrintAttributes;)V" />
+		<method name="getPageContentRect()Landroid/graphics/Rect;" />
+		<method name="getPageHeight()I" />
+		<method name="getPageWidth()I" />
+		<method name="startPage(I)Landroid/graphics/pdf/PdfDocument$Page;" />
+	</class>
+	<class name="android/printservice/CustomPrinterIconCallback" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onCustomPrinterIconLoaded(Landroid/graphics/drawable/Icon;)Z" />
+	</class>
+	<class name="android/printservice/PrintDocument" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getData()Landroid/os/ParcelFileDescriptor;" />
+		<method name="getInfo()Landroid/print/PrintDocumentInfo;" />
+	</class>
+	<class name="android/printservice/PrintJob" since="19">
+		<extends name="java/lang/Object" />
+		<method name="block(Ljava/lang/String;)Z" />
+		<method name="cancel()Z" />
+		<method name="complete()Z" />
+		<method name="fail(Ljava/lang/String;)Z" />
+		<method name="getAdvancedIntOption(Ljava/lang/String;)I" />
+		<method name="getAdvancedStringOption(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getDocument()Landroid/printservice/PrintDocument;" />
+		<method name="getId()Landroid/print/PrintJobId;" />
+		<method name="getInfo()Landroid/print/PrintJobInfo;" />
+		<method name="getTag()Ljava/lang/String;" />
+		<method name="hasAdvancedOption(Ljava/lang/String;)Z" />
+		<method name="isBlocked()Z" />
+		<method name="isCancelled()Z" />
+		<method name="isCompleted()Z" />
+		<method name="isFailed()Z" />
+		<method name="isQueued()Z" />
+		<method name="isStarted()Z" />
+		<method name="setProgress(F)V" since="24" />
+		<method name="setStatus(I)V" since="24" />
+		<method name="setStatus(Ljava/lang/CharSequence;)V" since="24" />
+		<method name="setTag(Ljava/lang/String;)Z" />
+		<method name="start()Z" />
+	</class>
+	<class name="android/printservice/PrintService" since="19">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="generatePrinterId(Ljava/lang/String;)Landroid/print/PrinterId;" />
+		<method name="getActivePrintJobs()Ljava/util/List;" />
+		<method name="onConnected()V" />
+		<method name="onCreatePrinterDiscoverySession()Landroid/printservice/PrinterDiscoverySession;" />
+		<method name="onDisconnected()V" />
+		<method name="onPrintJobQueued(Landroid/printservice/PrintJob;)V" />
+		<method name="onRequestCancelPrintJob(Landroid/printservice/PrintJob;)V" />
+		<field name="EXTRA_CAN_SELECT_PRINTER" since="26" />
+		<field name="EXTRA_PRINTER_INFO" since="21" />
+		<field name="EXTRA_PRINT_DOCUMENT_INFO" since="23" />
+		<field name="EXTRA_PRINT_JOB_INFO" />
+		<field name="EXTRA_SELECT_PRINTER" since="26" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/printservice/PrinterDiscoverySession" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addPrinters(Ljava/util/List;)V" />
+		<method name="getPrinters()Ljava/util/List;" />
+		<method name="getTrackedPrinters()Ljava/util/List;" />
+		<method name="isDestroyed()Z" />
+		<method name="isPrinterDiscoveryStarted()Z" />
+		<method name="onDestroy()V" />
+		<method name="onRequestCustomPrinterIcon(Landroid/print/PrinterId;Landroid/os/CancellationSignal;Landroid/printservice/CustomPrinterIconCallback;)V" since="24" />
+		<method name="onStartPrinterDiscovery(Ljava/util/List;)V" />
+		<method name="onStartPrinterStateTracking(Landroid/print/PrinterId;)V" />
+		<method name="onStopPrinterDiscovery()V" />
+		<method name="onStopPrinterStateTracking(Landroid/print/PrinterId;)V" />
+		<method name="onValidatePrinters(Ljava/util/List;)V" />
+		<method name="removePrinters(Ljava/util/List;)V" />
+	</class>
+	<class name="android/provider/AlarmClock" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ACTION_DISMISS_ALARM" since="23" />
+		<field name="ACTION_DISMISS_TIMER" since="28" />
+		<field name="ACTION_SET_ALARM" />
+		<field name="ACTION_SET_TIMER" since="19" />
+		<field name="ACTION_SHOW_ALARMS" since="19" />
+		<field name="ACTION_SHOW_TIMERS" since="26" />
+		<field name="ACTION_SNOOZE_ALARM" since="23" />
+		<field name="ALARM_SEARCH_MODE_ALL" since="23" />
+		<field name="ALARM_SEARCH_MODE_LABEL" since="23" />
+		<field name="ALARM_SEARCH_MODE_NEXT" since="23" />
+		<field name="ALARM_SEARCH_MODE_TIME" since="23" />
+		<field name="EXTRA_ALARM_SEARCH_MODE" since="23" />
+		<field name="EXTRA_ALARM_SNOOZE_DURATION" since="23" />
+		<field name="EXTRA_DAYS" since="19" />
+		<field name="EXTRA_HOUR" />
+		<field name="EXTRA_IS_PM" since="23" />
+		<field name="EXTRA_LENGTH" since="19" />
+		<field name="EXTRA_MESSAGE" />
+		<field name="EXTRA_MINUTES" />
+		<field name="EXTRA_RINGTONE" since="19" />
+		<field name="EXTRA_SKIP_UI" since="11" />
+		<field name="EXTRA_VIBRATE" since="19" />
+		<field name="VALUE_RINGTONE_SILENT" since="19" />
+	</class>
+	<class name="android/provider/BaseColumns" since="1">
+		<extends name="java/lang/Object" />
+		<field name="_COUNT" />
+		<field name="_ID" />
+	</class>
+	<class name="android/provider/BlockedNumberContract" since="24">
+		<extends name="java/lang/Object" />
+		<method name="canCurrentUserBlockNumbers(Landroid/content/Context;)Z" />
+		<method name="isBlocked(Landroid/content/Context;Ljava/lang/String;)Z" />
+		<method name="unblock(Landroid/content/Context;Ljava/lang/String;)I" />
+		<field name="AUTHORITY" />
+		<field name="AUTHORITY_URI" />
+	</class>
+	<class name="android/provider/BlockedNumberContract$BlockedNumbers" since="24">
+		<extends name="java/lang/Object" />
+		<field name="COLUMN_E164_NUMBER" />
+		<field name="COLUMN_ID" />
+		<field name="COLUMN_ORIGINAL_NUMBER" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/Browser" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addSearchUrl(Landroid/content/ContentResolver;Ljava/lang/String;)V" removed="23" />
+		<method name="canClearHistory(Landroid/content/ContentResolver;)Z" removed="23" />
+		<method name="clearHistory(Landroid/content/ContentResolver;)V" removed="23" />
+		<method name="clearSearches(Landroid/content/ContentResolver;)V" removed="23" />
+		<method name="deleteFromHistory(Landroid/content/ContentResolver;Ljava/lang/String;)V" removed="23" />
+		<method name="deleteHistoryTimeFrame(Landroid/content/ContentResolver;JJ)V" removed="23" />
+		<method name="getAllBookmarks(Landroid/content/ContentResolver;)Landroid/database/Cursor;" removed="23" />
+		<method name="getAllVisitedUrls(Landroid/content/ContentResolver;)Landroid/database/Cursor;" removed="23" />
+		<method name="requestAllIcons(Landroid/content/ContentResolver;Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V" removed="23" />
+		<method name="saveBookmark(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V" removed="23" />
+		<method name="sendString(Landroid/content/Context;Ljava/lang/String;)V" />
+		<method name="truncateHistory(Landroid/content/ContentResolver;)V" removed="23" />
+		<method name="updateVisitedHistory(Landroid/content/ContentResolver;Ljava/lang/String;Z)V" removed="23" />
+		<field name="BOOKMARKS_URI" removed="23" />
+		<field name="EXTRA_APPLICATION_ID" since="3" />
+		<field name="EXTRA_CREATE_NEW_TAB" since="12" />
+		<field name="EXTRA_HEADERS" since="8" />
+		<field name="HISTORY_PROJECTION" removed="23" />
+		<field name="HISTORY_PROJECTION_BOOKMARK_INDEX" removed="23" />
+		<field name="HISTORY_PROJECTION_DATE_INDEX" removed="23" />
+		<field name="HISTORY_PROJECTION_FAVICON_INDEX" removed="23" />
+		<field name="HISTORY_PROJECTION_ID_INDEX" removed="23" />
+		<field name="HISTORY_PROJECTION_TITLE_INDEX" removed="23" />
+		<field name="HISTORY_PROJECTION_URL_INDEX" removed="23" />
+		<field name="HISTORY_PROJECTION_VISITS_INDEX" removed="23" />
+		<field name="INITIAL_ZOOM_LEVEL" />
+		<field name="SEARCHES_PROJECTION" removed="23" />
+		<field name="SEARCHES_PROJECTION_DATE_INDEX" removed="23" />
+		<field name="SEARCHES_PROJECTION_SEARCH_INDEX" removed="23" />
+		<field name="SEARCHES_URI" removed="23" />
+		<field name="TRUNCATE_HISTORY_PROJECTION" removed="23" />
+		<field name="TRUNCATE_HISTORY_PROJECTION_ID_INDEX" removed="23" />
+		<field name="TRUNCATE_N_OLDEST" removed="23" />
+	</class>
+	<class name="android/provider/Browser$BookmarkColumns" since="1" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="&lt;init&gt;()V" />
+		<field name="BOOKMARK" />
+		<field name="CREATED" />
+		<field name="DATE" />
+		<field name="FAVICON" />
+		<field name="TITLE" />
+		<field name="URL" />
+		<field name="VISITS" />
+	</class>
+	<class name="android/provider/Browser$SearchColumns" since="1" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="&lt;init&gt;()V" />
+		<field name="DATE" />
+		<field name="SEARCH" />
+		<field name="URL" deprecated="15" />
+	</class>
+	<class name="android/provider/CalendarContract" since="14">
+		<extends name="java/lang/Object" />
+		<method name="startViewCalendarEventInManagedProfile(Landroid/content/Context;JJJZI)Z" since="29" />
+		<field name="ACCOUNT_TYPE_LOCAL" />
+		<field name="ACTION_EVENT_REMINDER" />
+		<field name="ACTION_HANDLE_CUSTOM_EVENT" since="16" />
+		<field name="ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT" since="29" />
+		<field name="AUTHORITY" />
+		<field name="CALLER_IS_SYNCADAPTER" />
+		<field name="CONTENT_URI" />
+		<field name="EXTRA_CUSTOM_APP_URI" since="16" />
+		<field name="EXTRA_EVENT_ALL_DAY" />
+		<field name="EXTRA_EVENT_BEGIN_TIME" />
+		<field name="EXTRA_EVENT_END_TIME" />
+		<field name="EXTRA_EVENT_ID" since="29" />
+	</class>
+	<class name="android/provider/CalendarContract$Attendees" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$AttendeesColumns" />
+		<implements name="android/provider/CalendarContract$EventsColumns" />
+		<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CalendarContract$AttendeesColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="ATTENDEE_EMAIL" />
+		<field name="ATTENDEE_IDENTITY" since="16" />
+		<field name="ATTENDEE_ID_NAMESPACE" since="16" />
+		<field name="ATTENDEE_NAME" />
+		<field name="ATTENDEE_RELATIONSHIP" />
+		<field name="ATTENDEE_STATUS" />
+		<field name="ATTENDEE_STATUS_ACCEPTED" />
+		<field name="ATTENDEE_STATUS_DECLINED" />
+		<field name="ATTENDEE_STATUS_INVITED" />
+		<field name="ATTENDEE_STATUS_NONE" />
+		<field name="ATTENDEE_STATUS_TENTATIVE" />
+		<field name="ATTENDEE_TYPE" />
+		<field name="EVENT_ID" />
+		<field name="RELATIONSHIP_ATTENDEE" />
+		<field name="RELATIONSHIP_NONE" />
+		<field name="RELATIONSHIP_ORGANIZER" />
+		<field name="RELATIONSHIP_PERFORMER" />
+		<field name="RELATIONSHIP_SPEAKER" />
+		<field name="TYPE_NONE" />
+		<field name="TYPE_OPTIONAL" />
+		<field name="TYPE_REQUIRED" />
+		<field name="TYPE_RESOURCE" since="15" />
+	</class>
+	<class name="android/provider/CalendarContract$CalendarAlerts" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$CalendarAlertsColumns" />
+		<implements name="android/provider/CalendarContract$CalendarColumns" />
+		<implements name="android/provider/CalendarContract$EventsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="CONTENT_URI_BY_INSTANCE" />
+	</class>
+	<class name="android/provider/CalendarContract$CalendarAlertsColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="ALARM_TIME" />
+		<field name="BEGIN" />
+		<field name="CREATION_TIME" />
+		<field name="DEFAULT_SORT_ORDER" />
+		<field name="END" />
+		<field name="EVENT_ID" />
+		<field name="MINUTES" />
+		<field name="NOTIFY_TIME" />
+		<field name="RECEIVED_TIME" />
+		<field name="STATE" />
+		<field name="STATE_DISMISSED" />
+		<field name="STATE_FIRED" />
+		<field name="STATE_SCHEDULED" />
+	</class>
+	<class name="android/provider/CalendarContract$CalendarCache" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/CalendarContract$CalendarCacheColumns" />
+		<field name="KEY_TIMEZONE_INSTANCES" />
+		<field name="KEY_TIMEZONE_INSTANCES_PREVIOUS" />
+		<field name="KEY_TIMEZONE_TYPE" />
+		<field name="TIMEZONE_TYPE_AUTO" />
+		<field name="TIMEZONE_TYPE_HOME" />
+		<field name="URI" />
+	</class>
+	<class name="android/provider/CalendarContract$CalendarCacheColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="KEY" />
+		<field name="VALUE" />
+	</class>
+	<class name="android/provider/CalendarContract$CalendarColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="ALLOWED_ATTENDEE_TYPES" since="15" />
+		<field name="ALLOWED_AVAILABILITY" since="15" />
+		<field name="ALLOWED_REMINDERS" />
+		<field name="CALENDAR_ACCESS_LEVEL" />
+		<field name="CALENDAR_COLOR" />
+		<field name="CALENDAR_COLOR_KEY" since="15" />
+		<field name="CALENDAR_DISPLAY_NAME" />
+		<field name="CALENDAR_TIME_ZONE" />
+		<field name="CAL_ACCESS_CONTRIBUTOR" />
+		<field name="CAL_ACCESS_EDITOR" />
+		<field name="CAL_ACCESS_FREEBUSY" />
+		<field name="CAL_ACCESS_NONE" />
+		<field name="CAL_ACCESS_OVERRIDE" />
+		<field name="CAL_ACCESS_OWNER" />
+		<field name="CAL_ACCESS_READ" />
+		<field name="CAL_ACCESS_RESPOND" />
+		<field name="CAL_ACCESS_ROOT" />
+		<field name="CAN_MODIFY_TIME_ZONE" />
+		<field name="CAN_ORGANIZER_RESPOND" />
+		<field name="IS_PRIMARY" since="17" />
+		<field name="MAX_REMINDERS" />
+		<field name="OWNER_ACCOUNT" />
+		<field name="SYNC_EVENTS" />
+		<field name="VISIBLE" />
+	</class>
+	<class name="android/provider/CalendarContract$CalendarEntity" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$CalendarColumns" />
+		<implements name="android/provider/CalendarContract$SyncColumns" />
+		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CalendarContract$CalendarSyncColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="CAL_SYNC1" />
+		<field name="CAL_SYNC10" />
+		<field name="CAL_SYNC2" />
+		<field name="CAL_SYNC3" />
+		<field name="CAL_SYNC4" />
+		<field name="CAL_SYNC5" />
+		<field name="CAL_SYNC6" />
+		<field name="CAL_SYNC7" />
+		<field name="CAL_SYNC8" />
+		<field name="CAL_SYNC9" />
+	</class>
+	<class name="android/provider/CalendarContract$Calendars" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$CalendarColumns" />
+		<implements name="android/provider/CalendarContract$SyncColumns" />
+		<field name="CALENDAR_LOCATION" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+		<field name="ENTERPRISE_CONTENT_URI" since="29" />
+		<field name="NAME" />
+	</class>
+	<class name="android/provider/CalendarContract$Colors" since="15">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/CalendarContract$ColorsColumns" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CalendarContract$ColorsColumns" since="15">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/SyncStateContract$Columns" />
+		<field name="COLOR" />
+		<field name="COLOR_KEY" />
+		<field name="COLOR_TYPE" />
+		<field name="TYPE_CALENDAR" />
+		<field name="TYPE_EVENT" />
+	</class>
+	<class name="android/provider/CalendarContract$EventDays" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/CalendarContract$EventDaysColumns" />
+		<method name="query(Landroid/content/ContentResolver;II[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CalendarContract$EventDaysColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="ENDDAY" />
+		<field name="STARTDAY" />
+	</class>
+	<class name="android/provider/CalendarContract$Events" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$CalendarColumns" />
+		<implements name="android/provider/CalendarContract$EventsColumns" />
+		<implements name="android/provider/CalendarContract$SyncColumns" />
+		<field name="CONTENT_EXCEPTION_URI" />
+		<field name="CONTENT_URI" />
+		<field name="ENTERPRISE_CONTENT_URI" since="29" />
+	</class>
+	<class name="android/provider/CalendarContract$EventsColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="ACCESS_CONFIDENTIAL" />
+		<field name="ACCESS_DEFAULT" />
+		<field name="ACCESS_LEVEL" />
+		<field name="ACCESS_PRIVATE" />
+		<field name="ACCESS_PUBLIC" />
+		<field name="ALL_DAY" />
+		<field name="AVAILABILITY" />
+		<field name="AVAILABILITY_BUSY" />
+		<field name="AVAILABILITY_FREE" />
+		<field name="AVAILABILITY_TENTATIVE" since="15" />
+		<field name="CALENDAR_ID" />
+		<field name="CAN_INVITE_OTHERS" />
+		<field name="CUSTOM_APP_PACKAGE" since="16" />
+		<field name="CUSTOM_APP_URI" since="16" />
+		<field name="DESCRIPTION" />
+		<field name="DISPLAY_COLOR" since="16" />
+		<field name="DTEND" />
+		<field name="DTSTART" />
+		<field name="DURATION" />
+		<field name="EVENT_COLOR" />
+		<field name="EVENT_COLOR_KEY" since="15" />
+		<field name="EVENT_END_TIMEZONE" />
+		<field name="EVENT_LOCATION" />
+		<field name="EVENT_TIMEZONE" />
+		<field name="EXDATE" />
+		<field name="EXRULE" />
+		<field name="GUESTS_CAN_INVITE_OTHERS" />
+		<field name="GUESTS_CAN_MODIFY" />
+		<field name="GUESTS_CAN_SEE_GUESTS" />
+		<field name="HAS_ALARM" />
+		<field name="HAS_ATTENDEE_DATA" />
+		<field name="HAS_EXTENDED_PROPERTIES" />
+		<field name="IS_ORGANIZER" since="17" />
+		<field name="LAST_DATE" />
+		<field name="LAST_SYNCED" />
+		<field name="ORGANIZER" />
+		<field name="ORIGINAL_ALL_DAY" />
+		<field name="ORIGINAL_ID" />
+		<field name="ORIGINAL_INSTANCE_TIME" />
+		<field name="ORIGINAL_SYNC_ID" />
+		<field name="RDATE" />
+		<field name="RRULE" />
+		<field name="SELF_ATTENDEE_STATUS" />
+		<field name="STATUS" />
+		<field name="STATUS_CANCELED" />
+		<field name="STATUS_CONFIRMED" />
+		<field name="STATUS_TENTATIVE" />
+		<field name="SYNC_DATA1" />
+		<field name="SYNC_DATA10" />
+		<field name="SYNC_DATA2" />
+		<field name="SYNC_DATA3" />
+		<field name="SYNC_DATA4" />
+		<field name="SYNC_DATA5" />
+		<field name="SYNC_DATA6" />
+		<field name="SYNC_DATA7" />
+		<field name="SYNC_DATA8" />
+		<field name="SYNC_DATA9" />
+		<field name="TITLE" />
+		<field name="UID_2445" since="17" />
+	</class>
+	<class name="android/provider/CalendarContract$EventsEntity" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$EventsColumns" />
+		<implements name="android/provider/CalendarContract$SyncColumns" />
+		<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentProviderClient;)Landroid/content/EntityIterator;" />
+		<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentResolver;)Landroid/content/EntityIterator;" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CalendarContract$ExtendedProperties" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$EventsColumns" />
+		<implements name="android/provider/CalendarContract$ExtendedPropertiesColumns" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CalendarContract$ExtendedPropertiesColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="EVENT_ID" />
+		<field name="NAME" />
+		<field name="VALUE" />
+	</class>
+	<class name="android/provider/CalendarContract$Instances" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$CalendarColumns" />
+		<implements name="android/provider/CalendarContract$EventsColumns" />
+		<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJ)Landroid/database/Cursor;" />
+		<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJLjava/lang/String;)Landroid/database/Cursor;" />
+		<field name="BEGIN" />
+		<field name="CONTENT_BY_DAY_URI" />
+		<field name="CONTENT_SEARCH_BY_DAY_URI" />
+		<field name="CONTENT_SEARCH_URI" />
+		<field name="CONTENT_URI" />
+		<field name="END" />
+		<field name="END_DAY" />
+		<field name="END_MINUTE" />
+		<field name="ENTERPRISE_CONTENT_BY_DAY_URI" since="29" />
+		<field name="ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI" since="29" />
+		<field name="ENTERPRISE_CONTENT_SEARCH_URI" since="29" />
+		<field name="ENTERPRISE_CONTENT_URI" since="29" />
+		<field name="EVENT_ID" />
+		<field name="START_DAY" />
+		<field name="START_MINUTE" />
+	</class>
+	<class name="android/provider/CalendarContract$Reminders" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/CalendarContract$EventsColumns" />
+		<implements name="android/provider/CalendarContract$RemindersColumns" />
+		<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CalendarContract$RemindersColumns" since="14">
+		<extends name="java/lang/Object" />
+		<field name="EVENT_ID" />
+		<field name="METHOD" />
+		<field name="METHOD_ALARM" since="16" />
+		<field name="METHOD_ALERT" />
+		<field name="METHOD_DEFAULT" />
+		<field name="METHOD_EMAIL" />
+		<field name="METHOD_SMS" />
+		<field name="MINUTES" />
+		<field name="MINUTES_DEFAULT" />
+	</class>
+	<class name="android/provider/CalendarContract$SyncColumns" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/CalendarContract$CalendarSyncColumns" />
+		<field name="ACCOUNT_NAME" />
+		<field name="ACCOUNT_TYPE" />
+		<field name="CAN_PARTIALLY_UPDATE" />
+		<field name="DELETED" />
+		<field name="DIRTY" />
+		<field name="MUTATORS" since="18" />
+		<field name="_SYNC_ID" />
+	</class>
+	<class name="android/provider/CalendarContract$SyncState" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/SyncStateContract$Columns" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CallLog" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="AUTHORITY" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/CallLog$Calls" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getLastOutgoingCall(Landroid/content/Context;)Ljava/lang/String;" since="8" />
+		<field name="ANSWERED_EXTERNALLY_TYPE" since="25" />
+		<field name="AUTO_MISSED_EMERGENCY_CALL" since="31" />
+		<field name="AUTO_MISSED_MAXIMUM_DIALING" since="31" />
+		<field name="AUTO_MISSED_MAXIMUM_RINGING" since="31" />
+		<field name="BLOCKED_TYPE" since="24" />
+		<field name="BLOCK_REASON" since="29" />
+		<field name="BLOCK_REASON_BLOCKED_NUMBER" since="29" />
+		<field name="BLOCK_REASON_CALL_SCREENING_SERVICE" since="29" />
+		<field name="BLOCK_REASON_DIRECT_TO_VOICEMAIL" since="29" />
+		<field name="BLOCK_REASON_NOT_BLOCKED" since="29" />
+		<field name="BLOCK_REASON_NOT_IN_CONTACTS" since="29" />
+		<field name="BLOCK_REASON_PAY_PHONE" since="29" />
+		<field name="BLOCK_REASON_RESTRICTED_NUMBER" since="29" />
+		<field name="BLOCK_REASON_UNKNOWN_NUMBER" since="29" />
+		<field name="CACHED_FORMATTED_NUMBER" since="21" />
+		<field name="CACHED_LOOKUP_URI" since="21" />
+		<field name="CACHED_MATCHED_NUMBER" since="21" />
+		<field name="CACHED_NAME" />
+		<field name="CACHED_NORMALIZED_NUMBER" since="21" />
+		<field name="CACHED_NUMBER_LABEL" />
+		<field name="CACHED_NUMBER_TYPE" />
+		<field name="CACHED_PHOTO_ID" since="21" />
+		<field name="CACHED_PHOTO_URI" since="23" />
+		<field name="CALL_SCREENING_APP_NAME" since="29" />
+		<field name="CALL_SCREENING_COMPONENT_NAME" since="29" />
+		<field name="COMPOSER_PHOTO_URI" since="31" />
+		<field name="CONTENT_FILTER_URI" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="CONTENT_URI_WITH_VOICEMAIL" since="21" />
+		<field name="COUNTRY_ISO" since="21" />
+		<field name="DATA_USAGE" since="21" />
+		<field name="DATE" />
+		<field name="DEFAULT_SORT_ORDER" />
+		<field name="DURATION" />
+		<field name="EXTRA_CALL_TYPE_FILTER" since="21" />
+		<field name="FEATURES" since="21" />
+		<field name="FEATURES_ASSISTED_DIALING_USED" since="30" />
+		<field name="FEATURES_HD_CALL" since="26" />
+		<field name="FEATURES_PULLED_EXTERNALLY" since="25" />
+		<field name="FEATURES_RTT" since="28" />
+		<field name="FEATURES_VIDEO" since="21" />
+		<field name="FEATURES_VOLTE" since="30" />
+		<field name="FEATURES_WIFI" since="26" />
+		<field name="GEOCODED_LOCATION" since="21" />
+		<field name="INCOMING_TYPE" />
+		<field name="IS_READ" since="14" />
+		<field name="LAST_MODIFIED" since="24" />
+		<field name="LIMIT_PARAM_KEY" since="17" />
+		<field name="LOCATION" since="31" />
+		<field name="MISSED_REASON" since="31" />
+		<field name="MISSED_REASON_NOT_MISSED" since="31" />
+		<field name="MISSED_TYPE" />
+		<field name="NEW" />
+		<field name="NUMBER" />
+		<field name="NUMBER_PRESENTATION" since="19" />
+		<field name="OFFSET_PARAM_KEY" since="17" />
+		<field name="OUTGOING_TYPE" />
+		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="21" />
+		<field name="PHONE_ACCOUNT_ID" since="21" />
+		<field name="POST_DIAL_DIGITS" since="24" />
+		<field name="PRESENTATION_ALLOWED" since="19" />
+		<field name="PRESENTATION_PAYPHONE" since="19" />
+		<field name="PRESENTATION_RESTRICTED" since="19" />
+		<field name="PRESENTATION_UNKNOWN" since="19" />
+		<field name="PRIORITY" since="31" />
+		<field name="PRIORITY_NORMAL" since="31" />
+		<field name="PRIORITY_URGENT" since="31" />
+		<field name="REJECTED_TYPE" since="24" />
+		<field name="SUBJECT" since="31" />
+		<field name="TRANSCRIPTION" since="21" />
+		<field name="TYPE" />
+		<field name="USER_MISSED_CALL_FILTERS_TIMEOUT" since="31" />
+		<field name="USER_MISSED_CALL_SCREENING_SERVICE_SILENCED" since="31" />
+		<field name="USER_MISSED_DND_MODE" since="31" />
+		<field name="USER_MISSED_LOW_RING_VOLUME" since="31" />
+		<field name="USER_MISSED_NO_ANSWER" since="31" />
+		<field name="USER_MISSED_NO_VIBRATE" since="31" />
+		<field name="USER_MISSED_SHORT_RING" since="31" />
+		<field name="VIA_NUMBER" since="24" />
+		<field name="VOICEMAIL_TYPE" since="21" />
+		<field name="VOICEMAIL_URI" since="21" />
+	</class>
+	<class name="android/provider/CallLog$Locations" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="AUTHORITY" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="LATITUDE" />
+		<field name="LONGITUDE" />
+	</class>
+	<class name="android/provider/Contacts" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="AUTHORITY" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="KIND_EMAIL" deprecated="15" />
+		<field name="KIND_IM" deprecated="15" />
+		<field name="KIND_ORGANIZATION" deprecated="15" />
+		<field name="KIND_PHONE" deprecated="15" />
+		<field name="KIND_POSTAL" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$ContactMethods" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$ContactMethodsColumns" />
+		<implements name="android/provider/Contacts$PeopleColumns" />
+		<method name="addPostalLocation(Landroid/content/Context;JDD)V" deprecated="15" />
+		<method name="decodeImProtocol(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15" />
+		<method name="encodeCustomImProtocol(Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="encodePredefinedImProtocol(I)Ljava/lang/String;" deprecated="15" />
+		<method name="getDisplayLabel(Landroid/content/Context;IILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15" />
+		<field name="CONTENT_EMAIL_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_EMAIL_TYPE" deprecated="15" />
+		<field name="CONTENT_EMAIL_URI" deprecated="15" />
+		<field name="CONTENT_IM_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_POSTAL_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_POSTAL_TYPE" deprecated="15" />
+		<field name="CONTENT_TYPE" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="PERSON_ID" deprecated="15" />
+		<field name="POSTAL_LOCATION_LATITUDE" deprecated="15" />
+		<field name="POSTAL_LOCATION_LONGITUDE" deprecated="15" />
+		<field name="PROTOCOL_AIM" deprecated="15" />
+		<field name="PROTOCOL_GOOGLE_TALK" deprecated="15" />
+		<field name="PROTOCOL_ICQ" deprecated="15" />
+		<field name="PROTOCOL_JABBER" deprecated="15" />
+		<field name="PROTOCOL_MSN" deprecated="15" />
+		<field name="PROTOCOL_QQ" deprecated="15" />
+		<field name="PROTOCOL_SKYPE" deprecated="15" />
+		<field name="PROTOCOL_YAHOO" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$ContactMethodsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="AUX_DATA" deprecated="15" />
+		<field name="DATA" deprecated="15" />
+		<field name="ISPRIMARY" deprecated="15" />
+		<field name="KIND" deprecated="15" />
+		<field name="LABEL" deprecated="15" />
+		<field name="TYPE" deprecated="15" />
+		<field name="TYPE_CUSTOM" deprecated="15" />
+		<field name="TYPE_HOME" deprecated="15" />
+		<field name="TYPE_OTHER" deprecated="15" />
+		<field name="TYPE_WORK" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Extensions" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$ExtensionsColumns" />
+		<field name="CONTENT_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_TYPE" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="PERSON_ID" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$ExtensionsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="NAME" deprecated="15" />
+		<field name="VALUE" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$GroupMembership" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$GroupsColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="15" />
+		<field name="CONTENT_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_TYPE" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="GROUP_ID" deprecated="15" />
+		<field name="GROUP_SYNC_ACCOUNT" deprecated="15" />
+		<field name="GROUP_SYNC_ACCOUNT_TYPE" since="5" deprecated="15" />
+		<field name="GROUP_SYNC_ID" deprecated="15" />
+		<field name="PERSON_ID" deprecated="15" />
+		<field name="RAW_CONTENT_URI" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Groups" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$GroupsColumns" />
+		<field name="CONTENT_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_TYPE" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="DELETED_CONTENT_URI" deprecated="15" />
+		<field name="GROUP_ANDROID_STARRED" deprecated="15" />
+		<field name="GROUP_MY_CONTACTS" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$GroupsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="NAME" deprecated="15" />
+		<field name="NOTES" deprecated="15" />
+		<field name="SHOULD_SYNC" deprecated="15" />
+		<field name="SYSTEM_ID" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Intents" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<field name="ATTACH_IMAGE" deprecated="15" />
+		<field name="EXTRA_CREATE_DESCRIPTION" since="3" deprecated="15" />
+		<field name="EXTRA_FORCE_CREATE" since="3" deprecated="15" />
+		<field name="SEARCH_SUGGESTION_CLICKED" deprecated="15" />
+		<field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED" deprecated="15" />
+		<field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED" deprecated="15" />
+		<field name="SHOW_OR_CREATE_CONTACT" since="3" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Intents$Insert" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<field name="ACTION" deprecated="15" />
+		<field name="COMPANY" deprecated="15" />
+		<field name="EMAIL" deprecated="15" />
+		<field name="EMAIL_ISPRIMARY" deprecated="15" />
+		<field name="EMAIL_TYPE" deprecated="15" />
+		<field name="FULL_MODE" deprecated="15" />
+		<field name="IM_HANDLE" deprecated="15" />
+		<field name="IM_ISPRIMARY" deprecated="15" />
+		<field name="IM_PROTOCOL" deprecated="15" />
+		<field name="JOB_TITLE" deprecated="15" />
+		<field name="NAME" deprecated="15" />
+		<field name="NOTES" deprecated="15" />
+		<field name="PHONE" deprecated="15" />
+		<field name="PHONETIC_NAME" since="3" deprecated="15" />
+		<field name="PHONE_ISPRIMARY" deprecated="15" />
+		<field name="PHONE_TYPE" deprecated="15" />
+		<field name="POSTAL" deprecated="15" />
+		<field name="POSTAL_ISPRIMARY" deprecated="15" />
+		<field name="POSTAL_TYPE" deprecated="15" />
+		<field name="SECONDARY_EMAIL" since="3" deprecated="15" />
+		<field name="SECONDARY_EMAIL_TYPE" since="3" deprecated="15" />
+		<field name="SECONDARY_PHONE" since="3" deprecated="15" />
+		<field name="SECONDARY_PHONE_TYPE" since="3" deprecated="15" />
+		<field name="TERTIARY_EMAIL" since="3" deprecated="15" />
+		<field name="TERTIARY_EMAIL_TYPE" since="3" deprecated="15" />
+		<field name="TERTIARY_PHONE" since="3" deprecated="15" />
+		<field name="TERTIARY_PHONE_TYPE" since="3" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Intents$UI" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<field name="FILTER_CONTACTS_ACTION" deprecated="15" />
+		<field name="FILTER_TEXT_EXTRA_KEY" deprecated="15" />
+		<field name="GROUP_NAME_EXTRA_KEY" deprecated="15" />
+		<field name="LIST_ALL_CONTACTS_ACTION" deprecated="15" />
+		<field name="LIST_CONTACTS_WITH_PHONES_ACTION" deprecated="15" />
+		<field name="LIST_DEFAULT" deprecated="15" />
+		<field name="LIST_FREQUENT_ACTION" deprecated="15" />
+		<field name="LIST_GROUP_ACTION" deprecated="15" />
+		<field name="LIST_STARRED_ACTION" deprecated="15" />
+		<field name="LIST_STREQUENT_ACTION" deprecated="15" />
+		<field name="TITLE_EXTRA_KEY" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$OrganizationColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="COMPANY" deprecated="15" />
+		<field name="ISPRIMARY" deprecated="15" />
+		<field name="LABEL" deprecated="15" />
+		<field name="PERSON_ID" deprecated="15" />
+		<field name="TITLE" deprecated="15" />
+		<field name="TYPE" deprecated="15" />
+		<field name="TYPE_CUSTOM" deprecated="15" />
+		<field name="TYPE_OTHER" deprecated="15" />
+		<field name="TYPE_WORK" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Organizations" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$OrganizationColumns" />
+		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15" />
+		<field name="CONTENT_DIRECTORY" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$People" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$PeopleColumns" />
+		<implements name="android/provider/Contacts$PhonesColumns" />
+		<implements name="android/provider/Contacts$PresenceColumns" />
+		<method name="addToGroup(Landroid/content/ContentResolver;JJ)Landroid/net/Uri;" deprecated="15" />
+		<method name="addToGroup(Landroid/content/ContentResolver;JLjava/lang/String;)Landroid/net/Uri;" deprecated="15" />
+		<method name="addToMyContactsGroup(Landroid/content/ContentResolver;J)Landroid/net/Uri;" deprecated="15" />
+		<method name="createPersonInMyContactsGroup(Landroid/content/ContentResolver;Landroid/content/ContentValues;)Landroid/net/Uri;" deprecated="15" />
+		<method name="loadContactPhoto(Landroid/content/Context;Landroid/net/Uri;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" deprecated="15" />
+		<method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="15" />
+		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;" deprecated="15" />
+		<method name="queryGroups(Landroid/content/ContentResolver;J)Landroid/database/Cursor;" deprecated="15" />
+		<method name="setPhotoData(Landroid/content/ContentResolver;Landroid/net/Uri;[B)V" deprecated="15" />
+		<field name="CONTENT_FILTER_URI" deprecated="15" />
+		<field name="CONTENT_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_TYPE" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="DELETED_CONTENT_URI" deprecated="15" />
+		<field name="PRIMARY_EMAIL_ID" deprecated="15" />
+		<field name="PRIMARY_ORGANIZATION_ID" deprecated="15" />
+		<field name="PRIMARY_PHONE_ID" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$People$ContactMethods" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$ContactMethodsColumns" />
+		<implements name="android/provider/Contacts$PeopleColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$People$Extensions" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$ExtensionsColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="PERSON_ID" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$People$Phones" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$PeopleColumns" />
+		<implements name="android/provider/Contacts$PhonesColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$PeopleColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="CUSTOM_RINGTONE" deprecated="15" />
+		<field name="DISPLAY_NAME" deprecated="15" />
+		<field name="LAST_TIME_CONTACTED" deprecated="15" />
+		<field name="NAME" deprecated="15" />
+		<field name="NOTES" deprecated="15" />
+		<field name="PHONETIC_NAME" since="3" deprecated="15" />
+		<field name="PHOTO_VERSION" deprecated="15" />
+		<field name="SEND_TO_VOICEMAIL" deprecated="15" />
+		<field name="STARRED" deprecated="15" />
+		<field name="TIMES_CONTACTED" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Phones" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$PeopleColumns" />
+		<implements name="android/provider/Contacts$PhonesColumns" />
+		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15" />
+		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15" />
+		<field name="CONTENT_FILTER_URL" deprecated="15" />
+		<field name="CONTENT_ITEM_TYPE" deprecated="15" />
+		<field name="CONTENT_TYPE" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="PERSON_ID" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$PhonesColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="ISPRIMARY" deprecated="15" />
+		<field name="LABEL" deprecated="15" />
+		<field name="NUMBER" deprecated="15" />
+		<field name="NUMBER_KEY" deprecated="15" />
+		<field name="TYPE" deprecated="15" />
+		<field name="TYPE_CUSTOM" deprecated="15" />
+		<field name="TYPE_FAX_HOME" deprecated="15" />
+		<field name="TYPE_FAX_WORK" deprecated="15" />
+		<field name="TYPE_HOME" deprecated="15" />
+		<field name="TYPE_MOBILE" deprecated="15" />
+		<field name="TYPE_OTHER" deprecated="15" />
+		<field name="TYPE_PAGER" deprecated="15" />
+		<field name="TYPE_WORK" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$Photos" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$PhotosColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$PhotosColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="DATA" deprecated="15" />
+		<field name="DOWNLOAD_REQUIRED" deprecated="15" />
+		<field name="EXISTS_ON_SERVER" deprecated="15" />
+		<field name="LOCAL_VERSION" deprecated="15" />
+		<field name="PERSON_ID" deprecated="15" />
+		<field name="SYNC_ERROR" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$PresenceColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="AVAILABLE" since="8" deprecated="29" />
+		<field name="AWAY" since="8" deprecated="29" />
+		<field name="DO_NOT_DISTURB" since="8" deprecated="29" />
+		<field name="IDLE" since="8" deprecated="29" />
+		<field name="IM_ACCOUNT" deprecated="15" />
+		<field name="IM_HANDLE" deprecated="15" />
+		<field name="IM_PROTOCOL" deprecated="15" />
+		<field name="INVISIBLE" since="8" deprecated="29" />
+		<field name="OFFLINE" since="8" deprecated="29" />
+		<field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="29" />
+		<field name="PRESENCE_STATUS" since="8" deprecated="29" />
+		<field name="PRIORITY" since="8" deprecated="29" />
+	</class>
+	<class name="android/provider/Contacts$Settings" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Contacts$SettingsColumns" />
+		<method name="getSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="setSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15" />
+		<field name="CONTENT_DIRECTORY" deprecated="15" />
+		<field name="CONTENT_URI" deprecated="15" />
+		<field name="DEFAULT_SORT_ORDER" deprecated="15" />
+		<field name="SYNC_EVERYTHING" deprecated="15" />
+	</class>
+	<class name="android/provider/Contacts$SettingsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object" />
+		<field name="KEY" deprecated="15" />
+		<field name="VALUE" deprecated="15" />
+		<field name="_SYNC_ACCOUNT" deprecated="15" />
+		<field name="_SYNC_ACCOUNT_TYPE" since="5" deprecated="15" />
+	</class>
+	<class name="android/provider/ContactsContract" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="isProfileId(J)Z" since="14" />
+		<field name="AUTHORITY" />
+		<field name="AUTHORITY_URI" />
+		<field name="CALLER_IS_SYNCADAPTER" />
+		<field name="DEFERRED_SNIPPETING" since="21" />
+		<field name="DEFERRED_SNIPPETING_QUERY" since="21" />
+		<field name="DIRECTORY_PARAM_KEY" since="11" />
+		<field name="LIMIT_PARAM_KEY" since="11" />
+		<field name="PRIMARY_ACCOUNT_NAME" since="14" />
+		<field name="PRIMARY_ACCOUNT_TYPE" since="14" />
+		<field name="REMOVE_DUPLICATE_ENTRIES" since="21" />
+		<field name="STREQUENT_PHONE_ONLY" since="21" />
+	</class>
+	<class name="android/provider/ContactsContract$AggregationExceptions" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="RAW_CONTACT_ID1" />
+		<field name="RAW_CONTACT_ID2" />
+		<field name="TYPE" />
+		<field name="TYPE_AUTOMATIC" />
+		<field name="TYPE_KEEP_SEPARATE" />
+		<field name="TYPE_KEEP_TOGETHER" />
+	</class>
+	<class name="android/provider/ContactsContract$BaseSyncColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="SYNC1" />
+		<field name="SYNC2" />
+		<field name="SYNC3" />
+		<field name="SYNC4" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds" since="5">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$BaseTypes" since="5">
+		<extends name="java/lang/Object" />
+		<field name="TYPE_CUSTOM" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Callable" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="&lt;init&gt;()V" />
+		<field name="CONTENT_FILTER_URI" />
+		<field name="CONTENT_URI" />
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$BaseTypes" />
+		<field name="DATA" />
+		<field name="LABEL" />
+		<field name="TYPE" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Contactables" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="&lt;init&gt;()V" />
+		<field name="CONTENT_FILTER_URI" />
+		<field name="CONTENT_URI" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="VISIBLE_CONTACTS_ONLY" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Email" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getTypeLabelResource(I)I" />
+		<field name="ADDRESS" since="11" />
+		<field name="CONTENT_FILTER_URI" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_LOOKUP_URI" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="DISPLAY_NAME" />
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24" />
+		<field name="ENTERPRISE_CONTENT_LOOKUP_URI" since="23" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="TYPE_HOME" />
+		<field name="TYPE_MOBILE" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_WORK" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Event" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="21" />
+		<method name="getTypeResource(Ljava/lang/Integer;)I" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="START_DATE" />
+		<field name="TYPE_ANNIVERSARY" />
+		<field name="TYPE_BIRTHDAY" />
+		<field name="TYPE_OTHER" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$GroupMembership" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="GROUP_ROW_ID" />
+		<field name="GROUP_SOURCE_ID" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Identity" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="IDENTITY" />
+		<field name="NAMESPACE" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Im" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getProtocolLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getProtocolLabelResource(I)I" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getTypeLabelResource(I)I" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CUSTOM_PROTOCOL" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="PROTOCOL" />
+		<field name="PROTOCOL_AIM" deprecated="31" />
+		<field name="PROTOCOL_CUSTOM" />
+		<field name="PROTOCOL_GOOGLE_TALK" deprecated="31" />
+		<field name="PROTOCOL_ICQ" deprecated="31" />
+		<field name="PROTOCOL_JABBER" deprecated="31" />
+		<field name="PROTOCOL_MSN" deprecated="31" />
+		<field name="PROTOCOL_NETMEETING" deprecated="31" />
+		<field name="PROTOCOL_QQ" deprecated="31" />
+		<field name="PROTOCOL_SKYPE" deprecated="31" />
+		<field name="PROTOCOL_YAHOO" deprecated="31" />
+		<field name="TYPE_HOME" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_WORK" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Nickname" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="NAME" />
+		<field name="TYPE_DEFAULT" />
+		<field name="TYPE_INITIALS" />
+		<field name="TYPE_MAIDEN_NAME" since="9" />
+		<field name="TYPE_MAINDEN_NAME" deprecated="15" />
+		<field name="TYPE_OTHER_NAME" />
+		<field name="TYPE_SHORT_NAME" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Note" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="NOTE" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Organization" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getTypeLabelResource(I)I" />
+		<field name="COMPANY" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="DEPARTMENT" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="JOB_DESCRIPTION" />
+		<field name="OFFICE_LOCATION" />
+		<field name="PHONETIC_NAME" />
+		<field name="PHONETIC_NAME_STYLE" since="24" />
+		<field name="SYMBOL" />
+		<field name="TITLE" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_WORK" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Phone" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getTypeLabelResource(I)I" />
+		<field name="CONTENT_FILTER_URI" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="NORMALIZED_NUMBER" since="16" />
+		<field name="NUMBER" />
+		<field name="SEARCH_DISPLAY_NAME_KEY" since="16" />
+		<field name="SEARCH_PHONE_NUMBER_KEY" since="16" />
+		<field name="TYPE_ASSISTANT" />
+		<field name="TYPE_CALLBACK" />
+		<field name="TYPE_CAR" />
+		<field name="TYPE_COMPANY_MAIN" />
+		<field name="TYPE_FAX_HOME" />
+		<field name="TYPE_FAX_WORK" />
+		<field name="TYPE_HOME" />
+		<field name="TYPE_ISDN" />
+		<field name="TYPE_MAIN" />
+		<field name="TYPE_MMS" />
+		<field name="TYPE_MOBILE" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_OTHER_FAX" />
+		<field name="TYPE_PAGER" />
+		<field name="TYPE_RADIO" />
+		<field name="TYPE_TELEX" />
+		<field name="TYPE_TTY_TDD" />
+		<field name="TYPE_WORK" />
+		<field name="TYPE_WORK_MOBILE" />
+		<field name="TYPE_WORK_PAGER" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Photo" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="PHOTO" />
+		<field name="PHOTO_FILE_ID" since="14" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Relation" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="11" />
+		<method name="getTypeLabelResource(I)I" since="11" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="NAME" />
+		<field name="TYPE_ASSISTANT" />
+		<field name="TYPE_BROTHER" />
+		<field name="TYPE_CHILD" />
+		<field name="TYPE_DOMESTIC_PARTNER" />
+		<field name="TYPE_FATHER" />
+		<field name="TYPE_FRIEND" />
+		<field name="TYPE_MANAGER" />
+		<field name="TYPE_MOTHER" />
+		<field name="TYPE_PARENT" />
+		<field name="TYPE_PARTNER" />
+		<field name="TYPE_REFERRED_BY" />
+		<field name="TYPE_RELATIVE" />
+		<field name="TYPE_SISTER" />
+		<field name="TYPE_SPOUSE" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$SipAddress" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getTypeLabelResource(I)I" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="SIP_ADDRESS" />
+		<field name="TYPE_HOME" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_WORK" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$StructuredName" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="DISPLAY_NAME" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="FAMILY_NAME" />
+		<field name="FULL_NAME_STYLE" since="21" />
+		<field name="GIVEN_NAME" />
+		<field name="MIDDLE_NAME" />
+		<field name="PHONETIC_FAMILY_NAME" />
+		<field name="PHONETIC_GIVEN_NAME" />
+		<field name="PHONETIC_MIDDLE_NAME" />
+		<field name="PHONETIC_NAME_STYLE" since="24" />
+		<field name="PREFIX" />
+		<field name="SUFFIX" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$StructuredPostal" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getTypeLabelResource(I)I" />
+		<field name="CITY" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="COUNTRY" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="FORMATTED_ADDRESS" />
+		<field name="NEIGHBORHOOD" />
+		<field name="POBOX" />
+		<field name="POSTCODE" />
+		<field name="REGION" />
+		<field name="STREET" />
+		<field name="TYPE_HOME" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_WORK" />
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Website" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="TYPE_BLOG" />
+		<field name="TYPE_FTP" />
+		<field name="TYPE_HOME" />
+		<field name="TYPE_HOMEPAGE" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_PROFILE" />
+		<field name="TYPE_WORK" />
+		<field name="URL" />
+	</class>
+	<class name="android/provider/ContactsContract$ContactNameColumns" since="11">
+		<extends name="java/lang/Object" />
+		<field name="DISPLAY_NAME_ALTERNATIVE" />
+		<field name="DISPLAY_NAME_PRIMARY" />
+		<field name="DISPLAY_NAME_SOURCE" />
+		<field name="PHONETIC_NAME" />
+		<field name="PHONETIC_NAME_STYLE" />
+		<field name="SORT_KEY_ALTERNATIVE" />
+		<field name="SORT_KEY_PRIMARY" />
+	</class>
+	<class name="android/provider/ContactsContract$ContactOptionsColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="CUSTOM_RINGTONE" />
+		<field name="LAST_TIME_CONTACTED" deprecated="29" />
+		<field name="PINNED" since="21" />
+		<field name="SEND_TO_VOICEMAIL" />
+		<field name="STARRED" />
+		<field name="TIMES_CONTACTED" deprecated="29" />
+	</class>
+	<class name="android/provider/ContactsContract$ContactStatusColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="CONTACT_CHAT_CAPABILITY" since="11" />
+		<field name="CONTACT_PRESENCE" />
+		<field name="CONTACT_STATUS" />
+		<field name="CONTACT_STATUS_ICON" />
+		<field name="CONTACT_STATUS_LABEL" />
+		<field name="CONTACT_STATUS_RES_PACKAGE" />
+		<field name="CONTACT_STATUS_TIMESTAMP" />
+	</class>
+	<class name="android/provider/ContactsContract$Contacts" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11" />
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" />
+		<implements name="android/provider/ContactsContract$ContactStatusColumns" />
+		<implements name="android/provider/ContactsContract$ContactsColumns" />
+		<method name="getLookupUri(JLjava/lang/String;)Landroid/net/Uri;" />
+		<method name="getLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;" />
+		<method name="isEnterpriseContactId(J)Z" since="21" />
+		<method name="lookupContact(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;" />
+		<method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="16" />
+		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;" />
+		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;Z)Ljava/io/InputStream;" since="14" />
+		<field name="CONTENT_FILTER_URI" />
+		<field name="CONTENT_FREQUENT_URI" since="21" deprecated="29" />
+		<field name="CONTENT_GROUP_URI" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_LOOKUP_URI" />
+		<field name="CONTENT_MULTI_VCARD_URI" since="21" />
+		<field name="CONTENT_STREQUENT_FILTER_URI" />
+		<field name="CONTENT_STREQUENT_URI" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="CONTENT_VCARD_TYPE" />
+		<field name="CONTENT_VCARD_URI" />
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="QUERY_PARAMETER_VCARD_NO_PHOTO" since="23" />
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$AggregationSuggestions" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" since="11" />
+		<implements name="android/provider/ContactsContract$ContactStatusColumns" since="11" />
+		<implements name="android/provider/ContactsContract$ContactsColumns" />
+		<field name="CONTENT_DIRECTORY" />
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$AggregationSuggestions$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addNameParameter(Ljava/lang/String;)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;" />
+		<method name="build()Landroid/net/Uri;" />
+		<method name="setContactId(J)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;" />
+		<method name="setLimit(I)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;" />
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$Data" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$DataColumns" />
+		<field name="CONTENT_DIRECTORY" />
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$Entity" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$BaseSyncColumns" />
+		<implements name="android/provider/ContactsContract$ContactNameColumns" />
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" />
+		<implements name="android/provider/ContactsContract$ContactStatusColumns" />
+		<implements name="android/provider/ContactsContract$ContactsColumns" />
+		<implements name="android/provider/ContactsContract$DataColumns" />
+		<implements name="android/provider/ContactsContract$DataUsageStatColumns" since="21" />
+		<implements name="android/provider/ContactsContract$RawContactsColumns" />
+		<implements name="android/provider/ContactsContract$StatusColumns" />
+		<implements name="android/provider/ContactsContract$SyncColumns" />
+		<field name="CONTENT_DIRECTORY" />
+		<field name="DATA_ID" />
+		<field name="RAW_CONTACT_ID" />
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$Photo" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$DataColumns" removed="11" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" since="11" />
+		<field name="CONTENT_DIRECTORY" />
+		<field name="DISPLAY_PHOTO" since="14" />
+		<field name="PHOTO" since="11" />
+		<field name="PHOTO_FILE_ID" since="14" />
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$StreamItems" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$StreamItemsColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="21" />
+	</class>
+	<class name="android/provider/ContactsContract$ContactsColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="CONTACT_LAST_UPDATED_TIMESTAMP" since="18" />
+		<field name="DISPLAY_NAME" />
+		<field name="HAS_PHONE_NUMBER" />
+		<field name="IN_DEFAULT_DIRECTORY" since="21" />
+		<field name="IN_VISIBLE_GROUP" />
+		<field name="IS_USER_PROFILE" since="14" />
+		<field name="LOOKUP_KEY" />
+		<field name="NAME_RAW_CONTACT_ID" since="21" />
+		<field name="PHOTO_FILE_ID" since="14" />
+		<field name="PHOTO_ID" />
+		<field name="PHOTO_THUMBNAIL_URI" since="11" />
+		<field name="PHOTO_URI" since="11" />
+	</class>
+	<class name="android/provider/ContactsContract$Data" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" />
+		<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21" />
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21" />
+		<field name="VISIBLE_CONTACTS_ONLY" since="18" />
+	</class>
+	<class name="android/provider/ContactsContract$DataColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="CARRIER_PRESENCE" since="23" deprecated="31" />
+		<field name="CARRIER_PRESENCE_VT_CAPABLE" since="23" deprecated="31" />
+		<field name="DATA1" />
+		<field name="DATA10" />
+		<field name="DATA11" />
+		<field name="DATA12" />
+		<field name="DATA13" />
+		<field name="DATA14" />
+		<field name="DATA15" />
+		<field name="DATA2" />
+		<field name="DATA3" />
+		<field name="DATA4" />
+		<field name="DATA5" />
+		<field name="DATA6" />
+		<field name="DATA7" />
+		<field name="DATA8" />
+		<field name="DATA9" />
+		<field name="DATA_VERSION" />
+		<field name="IS_PRIMARY" />
+		<field name="IS_READ_ONLY" since="11" />
+		<field name="IS_SUPER_PRIMARY" />
+		<field name="MIMETYPE" />
+		<field name="PREFERRED_PHONE_ACCOUNT_COMPONENT_NAME" since="28" />
+		<field name="PREFERRED_PHONE_ACCOUNT_ID" since="28" />
+		<field name="RAW_CONTACT_ID" />
+		<field name="RES_PACKAGE" since="21" />
+		<field name="SYNC1" />
+		<field name="SYNC2" />
+		<field name="SYNC3" />
+		<field name="SYNC4" />
+	</class>
+	<class name="android/provider/ContactsContract$DataColumnsWithJoins" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11" />
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" />
+		<implements name="android/provider/ContactsContract$ContactStatusColumns" />
+		<implements name="android/provider/ContactsContract$ContactsColumns" />
+		<implements name="android/provider/ContactsContract$DataColumns" />
+		<implements name="android/provider/ContactsContract$DataUsageStatColumns" since="18" />
+		<implements name="android/provider/ContactsContract$RawContactsColumns" />
+		<implements name="android/provider/ContactsContract$StatusColumns" />
+	</class>
+	<class name="android/provider/ContactsContract$DataUsageFeedback" since="14" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<field name="DELETE_USAGE_URI" since="16" deprecated="29" />
+		<field name="FEEDBACK_URI" deprecated="29" />
+		<field name="USAGE_TYPE" deprecated="29" />
+		<field name="USAGE_TYPE_CALL" deprecated="29" />
+		<field name="USAGE_TYPE_LONG_TEXT" deprecated="29" />
+		<field name="USAGE_TYPE_SHORT_TEXT" deprecated="29" />
+	</class>
+	<class name="android/provider/ContactsContract$DataUsageStatColumns" since="18">
+		<extends name="java/lang/Object" />
+		<field name="LAST_TIME_USED" deprecated="29" />
+		<field name="TIMES_USED" deprecated="29" />
+	</class>
+	<class name="android/provider/ContactsContract$DeletedContacts" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$DeletedContactsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DAYS_KEPT_MILLISECONDS" />
+	</class>
+	<class name="android/provider/ContactsContract$DeletedContactsColumns" since="18">
+		<extends name="java/lang/Object" />
+		<field name="CONTACT_DELETED_TIMESTAMP" />
+		<field name="CONTACT_ID" />
+	</class>
+	<class name="android/provider/ContactsContract$Directory" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="isEnterpriseDirectoryId(J)Z" since="24" />
+		<method name="isRemoteDirectoryId(J)Z" since="24" />
+		<method name="notifyDirectoryChange(Landroid/content/ContentResolver;)V" />
+		<field name="ACCOUNT_NAME" />
+		<field name="ACCOUNT_TYPE" />
+		<field name="CALLER_PACKAGE_PARAM_KEY" since="26" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT" />
+		<field name="DIRECTORY_AUTHORITY" />
+		<field name="DISPLAY_NAME" />
+		<field name="ENTERPRISE_CONTENT_URI" since="24" />
+		<field name="ENTERPRISE_DEFAULT" since="24" />
+		<field name="ENTERPRISE_LOCAL_INVISIBLE" since="24" />
+		<field name="EXPORT_SUPPORT" />
+		<field name="EXPORT_SUPPORT_ANY_ACCOUNT" />
+		<field name="EXPORT_SUPPORT_NONE" />
+		<field name="EXPORT_SUPPORT_SAME_ACCOUNT_ONLY" />
+		<field name="LOCAL_INVISIBLE" />
+		<field name="PACKAGE_NAME" />
+		<field name="PHOTO_SUPPORT" />
+		<field name="PHOTO_SUPPORT_FULL" />
+		<field name="PHOTO_SUPPORT_FULL_SIZE_ONLY" />
+		<field name="PHOTO_SUPPORT_NONE" />
+		<field name="PHOTO_SUPPORT_THUMBNAIL_ONLY" />
+		<field name="SHORTCUT_SUPPORT" />
+		<field name="SHORTCUT_SUPPORT_DATA_ITEMS_ONLY" />
+		<field name="SHORTCUT_SUPPORT_FULL" />
+		<field name="SHORTCUT_SUPPORT_NONE" />
+		<field name="TYPE_RESOURCE_ID" />
+	</class>
+	<class name="android/provider/ContactsContract$DisplayNameSources" since="11">
+		<extends name="java/lang/Object" />
+		<field name="EMAIL" />
+		<field name="NICKNAME" />
+		<field name="ORGANIZATION" />
+		<field name="PHONE" />
+		<field name="STRUCTURED_NAME" />
+		<field name="STRUCTURED_PHONETIC_NAME" since="23" />
+		<field name="UNDEFINED" />
+	</class>
+	<class name="android/provider/ContactsContract$DisplayPhoto" since="14">
+		<extends name="java/lang/Object" />
+		<field name="CONTENT_MAX_DIMENSIONS_URI" />
+		<field name="CONTENT_URI" />
+		<field name="DISPLAY_MAX_DIM" />
+		<field name="THUMBNAIL_MAX_DIM" />
+	</class>
+	<class name="android/provider/ContactsContract$FullNameStyle" since="11">
+		<extends name="java/lang/Object" />
+		<field name="CHINESE" />
+		<field name="CJK" />
+		<field name="JAPANESE" />
+		<field name="KOREAN" />
+		<field name="UNDEFINED" />
+		<field name="WESTERN" />
+	</class>
+	<class name="android/provider/ContactsContract$Groups" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$GroupsColumns" />
+		<implements name="android/provider/ContactsContract$SyncColumns" />
+		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_SUMMARY_URI" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/ContactsContract$GroupsColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="AUTO_ADD" since="11" />
+		<field name="DATA_SET" since="14" />
+		<field name="DELETED" />
+		<field name="FAVORITES" since="11" />
+		<field name="GROUP_IS_READ_ONLY" since="11" />
+		<field name="GROUP_VISIBLE" />
+		<field name="NOTES" />
+		<field name="RES_PACKAGE" since="21" />
+		<field name="SHOULD_SYNC" />
+		<field name="SUMMARY_COUNT" />
+		<field name="SUMMARY_WITH_PHONES" />
+		<field name="SYSTEM_ID" />
+		<field name="TITLE" />
+		<field name="TITLE_RES" since="21" />
+	</class>
+	<class name="android/provider/ContactsContract$Intents" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ACTION_VOICE_SEND_MESSAGE_TO_CONTACTS" since="24" />
+		<field name="ATTACH_IMAGE" />
+		<field name="CONTACTS_DATABASE_CREATED" since="18" />
+		<field name="EXTRA_CREATE_DESCRIPTION" />
+		<field name="EXTRA_FORCE_CREATE" />
+		<field name="EXTRA_RECIPIENT_CONTACT_CHAT_ID" since="24" />
+		<field name="EXTRA_RECIPIENT_CONTACT_NAME" since="24" />
+		<field name="EXTRA_RECIPIENT_CONTACT_URI" since="24" />
+		<field name="INVITE_CONTACT" since="14" />
+		<field name="METADATA_ACCOUNT_TYPE" since="24" />
+		<field name="METADATA_MIMETYPE" since="24" />
+		<field name="SEARCH_SUGGESTION_CLICKED" />
+		<field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED" />
+		<field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED" />
+		<field name="SHOW_OR_CREATE_CONTACT" />
+	</class>
+	<class name="android/provider/ContactsContract$Intents$Insert" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ACTION" />
+		<field name="COMPANY" />
+		<field name="DATA" since="11" />
+		<field name="EMAIL" />
+		<field name="EMAIL_ISPRIMARY" />
+		<field name="EMAIL_TYPE" />
+		<field name="EXTRA_ACCOUNT" since="23" />
+		<field name="EXTRA_DATA_SET" since="23" />
+		<field name="FULL_MODE" />
+		<field name="IM_HANDLE" />
+		<field name="IM_ISPRIMARY" />
+		<field name="IM_PROTOCOL" />
+		<field name="JOB_TITLE" />
+		<field name="NAME" />
+		<field name="NOTES" />
+		<field name="PHONE" />
+		<field name="PHONETIC_NAME" />
+		<field name="PHONE_ISPRIMARY" />
+		<field name="PHONE_TYPE" />
+		<field name="POSTAL" />
+		<field name="POSTAL_ISPRIMARY" />
+		<field name="POSTAL_TYPE" />
+		<field name="SECONDARY_EMAIL" />
+		<field name="SECONDARY_EMAIL_TYPE" />
+		<field name="SECONDARY_PHONE" />
+		<field name="SECONDARY_PHONE_TYPE" />
+		<field name="TERTIARY_EMAIL" />
+		<field name="TERTIARY_EMAIL_TYPE" />
+		<field name="TERTIARY_PHONE" />
+		<field name="TERTIARY_PHONE_TYPE" />
+	</class>
+	<class name="android/provider/ContactsContract$PhoneLookup" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="26" />
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" />
+		<implements name="android/provider/ContactsContract$ContactsColumns" />
+		<implements name="android/provider/ContactsContract$PhoneLookupColumns" />
+		<field name="CONTENT_FILTER_URI" />
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="21" />
+		<field name="QUERY_PARAMETER_SIP_ADDRESS" since="21" />
+	</class>
+	<class name="android/provider/ContactsContract$PhoneLookupColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="CONTACT_ID" since="24" />
+		<field name="DATA_ID" since="24" />
+		<field name="LABEL" />
+		<field name="NORMALIZED_NUMBER" since="16" />
+		<field name="NUMBER" />
+		<field name="TYPE" />
+	</class>
+	<class name="android/provider/ContactsContract$PhoneticNameStyle" since="11">
+		<extends name="java/lang/Object" />
+		<field name="JAPANESE" />
+		<field name="KOREAN" />
+		<field name="PINYIN" />
+		<field name="UNDEFINED" />
+	</class>
+	<class name="android/provider/ContactsContract$PinnedPositions" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="pin(Landroid/content/ContentResolver;JI)V" />
+		<method name="undemote(Landroid/content/ContentResolver;J)V" />
+		<field name="DEMOTED" />
+		<field name="UNPINNED" />
+	</class>
+	<class name="android/provider/ContactsContract$Presence" since="5" deprecated="5">
+		<extends name="android/provider/ContactsContract$StatusUpdates" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+	</class>
+	<class name="android/provider/ContactsContract$PresenceColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="CUSTOM_PROTOCOL" />
+		<field name="DATA_ID" />
+		<field name="IM_ACCOUNT" />
+		<field name="IM_HANDLE" />
+		<field name="PROTOCOL" />
+	</class>
+	<class name="android/provider/ContactsContract$Profile" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$ContactNameColumns" />
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" />
+		<implements name="android/provider/ContactsContract$ContactStatusColumns" />
+		<implements name="android/provider/ContactsContract$ContactsColumns" />
+		<field name="CONTENT_RAW_CONTACTS_URI" />
+		<field name="CONTENT_URI" />
+		<field name="CONTENT_VCARD_URI" />
+		<field name="MIN_ID" />
+	</class>
+	<class name="android/provider/ContactsContract$ProfileSyncState" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/SyncStateContract$Columns" />
+		<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B" />
+		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;" />
+		<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;" />
+		<method name="set(Landroid/content/ContentProviderClient;Landroid/accounts/Account;[B)V" />
+		<field name="CONTENT_DIRECTORY" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/ContactsContract$ProviderStatus" since="23">
+		<extends name="java/lang/Object" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="DATABASE_CREATION_TIMESTAMP" since="26" />
+		<field name="STATUS" />
+		<field name="STATUS_BUSY" />
+		<field name="STATUS_EMPTY" />
+		<field name="STATUS_NORMAL" />
+	</class>
+	<class name="android/provider/ContactsContract$QuickContact" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="showQuickContact(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;I[Ljava/lang/String;)V" />
+		<method name="showQuickContact(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;)V" since="23" />
+		<method name="showQuickContact(Landroid/content/Context;Landroid/view/View;Landroid/net/Uri;I[Ljava/lang/String;)V" />
+		<method name="showQuickContact(Landroid/content/Context;Landroid/view/View;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;)V" since="23" />
+		<field name="ACTION_QUICK_CONTACT" since="21" />
+		<field name="EXTRA_EXCLUDE_MIMES" since="21" />
+		<field name="EXTRA_MODE" since="23" />
+		<field name="EXTRA_PRIORITIZED_MIMETYPE" since="23" />
+		<field name="MODE_LARGE" />
+		<field name="MODE_MEDIUM" />
+		<field name="MODE_SMALL" />
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11" />
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" />
+		<implements name="android/provider/ContactsContract$RawContactsColumns" />
+		<implements name="android/provider/ContactsContract$SyncColumns" />
+		<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;" />
+		<method name="getLocalAccountName(Landroid/content/Context;)Ljava/lang/String;" since="30" />
+		<method name="getLocalAccountType(Landroid/content/Context;)Ljava/lang/String;" since="30" />
+		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8" />
+		<field name="AGGREGATION_MODE_DEFAULT" />
+		<field name="AGGREGATION_MODE_DISABLED" />
+		<field name="AGGREGATION_MODE_IMMEDIATE" deprecated="15" />
+		<field name="AGGREGATION_MODE_SUSPENDED" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$Data" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$DataColumns" />
+		<field name="CONTENT_DIRECTORY" />
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$DisplayPhoto" since="14">
+		<extends name="java/lang/Object" />
+		<field name="CONTENT_DIRECTORY" />
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$Entity" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$DataColumns" />
+		<field name="CONTENT_DIRECTORY" />
+		<field name="DATA_ID" />
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$StreamItems" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$StreamItemsColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="21" />
+	</class>
+	<class name="android/provider/ContactsContract$RawContactsColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="ACCOUNT_TYPE_AND_DATA_SET" since="21" />
+		<field name="AGGREGATION_MODE" />
+		<field name="BACKUP_ID" since="24" />
+		<field name="CONTACT_ID" />
+		<field name="DATA_SET" since="14" />
+		<field name="DELETED" />
+		<field name="METADATA_DIRTY" since="24" deprecated="30" />
+		<field name="RAW_CONTACT_IS_READ_ONLY" since="11" />
+		<field name="RAW_CONTACT_IS_USER_PROFILE" since="14" />
+	</class>
+	<class name="android/provider/ContactsContract$RawContactsEntity" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$DataColumns" />
+		<implements name="android/provider/ContactsContract$RawContactsColumns" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="DATA_ID" />
+		<field name="PROFILE_CONTENT_URI" since="14" />
+	</class>
+	<class name="android/provider/ContactsContract$SearchSnippets" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="DEFERRED_SNIPPETING_KEY" />
+		<field name="SNIPPET" />
+	</class>
+	<class name="android/provider/ContactsContract$Settings" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$SettingsColumns" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/ContactsContract$SettingsColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="ACCOUNT_NAME" />
+		<field name="ACCOUNT_TYPE" />
+		<field name="ANY_UNSYNCED" />
+		<field name="DATA_SET" since="14" />
+		<field name="SHOULD_SYNC" />
+		<field name="UNGROUPED_COUNT" />
+		<field name="UNGROUPED_VISIBLE" />
+		<field name="UNGROUPED_WITH_PHONES" />
+	</class>
+	<class name="android/provider/ContactsContract$SimAccount" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAccountName()Ljava/lang/String;" />
+		<method name="getAccountType()Ljava/lang/String;" />
+		<method name="getEfType()I" />
+		<method name="getSimSlotIndex()I" />
+		<field name="ADN_EF_TYPE" />
+		<field name="CREATOR" />
+		<field name="FDN_EF_TYPE" />
+		<field name="SDN_EF_TYPE" />
+		<field name="UNKNOWN_EF_TYPE" />
+	</class>
+	<class name="android/provider/ContactsContract$SimContacts" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getSimAccounts(Landroid/content/ContentResolver;)Ljava/util/List;" />
+		<field name="ACTION_SIM_ACCOUNTS_CHANGED" />
+	</class>
+	<class name="android/provider/ContactsContract$StatusColumns" since="5">
+		<extends name="java/lang/Object" />
+		<field name="AVAILABLE" since="8" />
+		<field name="AWAY" since="8" />
+		<field name="CAPABILITY_HAS_CAMERA" since="11" />
+		<field name="CAPABILITY_HAS_VIDEO" since="11" />
+		<field name="CAPABILITY_HAS_VOICE" since="11" />
+		<field name="CHAT_CAPABILITY" since="11" />
+		<field name="DO_NOT_DISTURB" since="8" />
+		<field name="IDLE" since="8" />
+		<field name="INVISIBLE" since="8" />
+		<field name="OFFLINE" since="8" />
+		<field name="PRESENCE" />
+		<field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="15" />
+		<field name="PRESENCE_STATUS" since="8" deprecated="15" />
+		<field name="STATUS" />
+		<field name="STATUS_ICON" />
+		<field name="STATUS_LABEL" />
+		<field name="STATUS_RES_PACKAGE" />
+		<field name="STATUS_TIMESTAMP" />
+	</class>
+	<class name="android/provider/ContactsContract$StatusUpdates" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$PresenceColumns" />
+		<implements name="android/provider/ContactsContract$StatusColumns" />
+		<method name="getPresenceIconResourceId(I)I" />
+		<method name="getPresencePrecedence(I)I" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="PROFILE_CONTENT_URI" since="14" />
+	</class>
+	<class name="android/provider/ContactsContract$StreamItemPhotos" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$StreamItemPhotosColumns" />
+		<field name="PHOTO" deprecated="21" />
+	</class>
+	<class name="android/provider/ContactsContract$StreamItemPhotosColumns" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="PHOTO_FILE_ID" deprecated="21" />
+		<field name="PHOTO_URI" deprecated="21" />
+		<field name="SORT_INDEX" deprecated="21" />
+		<field name="STREAM_ITEM_ID" deprecated="21" />
+		<field name="SYNC1" deprecated="21" />
+		<field name="SYNC2" deprecated="21" />
+		<field name="SYNC3" deprecated="21" />
+		<field name="SYNC4" deprecated="21" />
+	</class>
+	<class name="android/provider/ContactsContract$StreamItems" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$StreamItemsColumns" />
+		<field name="CONTENT_ITEM_TYPE" deprecated="21" />
+		<field name="CONTENT_LIMIT_URI" deprecated="21" />
+		<field name="CONTENT_PHOTO_URI" deprecated="21" />
+		<field name="CONTENT_TYPE" deprecated="21" />
+		<field name="CONTENT_URI" deprecated="21" />
+		<field name="MAX_ITEMS" deprecated="21" />
+	</class>
+	<class name="android/provider/ContactsContract$StreamItems$StreamItemPhotos" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/ContactsContract$StreamItemPhotosColumns" />
+		<field name="CONTENT_DIRECTORY" deprecated="21" />
+		<field name="CONTENT_ITEM_TYPE" deprecated="21" />
+		<field name="CONTENT_TYPE" deprecated="21" />
+	</class>
+	<class name="android/provider/ContactsContract$StreamItemsColumns" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="ACCOUNT_NAME" deprecated="21" />
+		<field name="ACCOUNT_TYPE" deprecated="21" />
+		<field name="COMMENTS" deprecated="21" />
+		<field name="CONTACT_ID" deprecated="21" />
+		<field name="CONTACT_LOOKUP_KEY" deprecated="21" />
+		<field name="DATA_SET" deprecated="21" />
+		<field name="RAW_CONTACT_ID" deprecated="21" />
+		<field name="RAW_CONTACT_SOURCE_ID" deprecated="21" />
+		<field name="RES_ICON" deprecated="21" />
+		<field name="RES_LABEL" deprecated="21" />
+		<field name="RES_PACKAGE" deprecated="21" />
+		<field name="SYNC1" deprecated="21" />
+		<field name="SYNC2" deprecated="21" />
+		<field name="SYNC3" deprecated="21" />
+		<field name="SYNC4" deprecated="21" />
+		<field name="TEXT" deprecated="21" />
+		<field name="TIMESTAMP" deprecated="21" />
+	</class>
+	<class name="android/provider/ContactsContract$SyncColumns" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/ContactsContract$BaseSyncColumns" />
+		<field name="ACCOUNT_NAME" />
+		<field name="ACCOUNT_TYPE" />
+		<field name="DIRTY" />
+		<field name="SOURCE_ID" />
+		<field name="VERSION" />
+	</class>
+	<class name="android/provider/ContactsContract$SyncState" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/SyncStateContract$Columns" />
+		<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B" />
+		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;" />
+		<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;" />
+		<method name="set(Landroid/content/ContentProviderClient;Landroid/accounts/Account;[B)V" />
+		<field name="CONTENT_DIRECTORY" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/DocumentsContract" since="19">
+		<extends name="java/lang/Object" />
+		<method name="buildChildDocumentsUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildChildDocumentsUriUsingTree(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21" />
+		<method name="buildDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildDocumentUriUsingTree(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21" />
+		<method name="buildRecentDocumentsUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildRootUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildRootsUri(Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildSearchDocumentsUri(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="buildTreeDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" since="21" />
+		<method name="copyDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri;" since="24" />
+		<method name="createDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" since="21" />
+		<method name="createWebLinkIntent(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/os/Bundle;)Landroid/content/IntentSender;" since="26" />
+		<method name="deleteDocument(Landroid/content/ContentResolver;Landroid/net/Uri;)Z" />
+		<method name="ejectRoot(Landroid/content/ContentResolver;Landroid/net/Uri;)V" since="26" />
+		<method name="findDocumentPath(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/provider/DocumentsContract$Path;" since="26" />
+		<method name="getDocumentId(Landroid/net/Uri;)Ljava/lang/String;" />
+		<method name="getDocumentMetadata(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/os/Bundle;" since="29" />
+		<method name="getDocumentThumbnail(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" />
+		<method name="getRootId(Landroid/net/Uri;)Ljava/lang/String;" />
+		<method name="getSearchDocumentsQuery(Landroid/net/Uri;)Ljava/lang/String;" />
+		<method name="getTreeDocumentId(Landroid/net/Uri;)Ljava/lang/String;" since="21" />
+		<method name="isChildDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Z" since="29" />
+		<method name="isDocumentUri(Landroid/content/Context;Landroid/net/Uri;)Z" />
+		<method name="isRootUri(Landroid/content/Context;Landroid/net/Uri;)Z" since="29" />
+		<method name="isRootsUri(Landroid/content/Context;Landroid/net/Uri;)Z" since="29" />
+		<method name="isTreeUri(Landroid/net/Uri;)Z" since="24" />
+		<method name="moveDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri;" since="24" />
+		<method name="removeDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Z" since="24" />
+		<method name="renameDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21" />
+		<field name="ACTION_DOCUMENT_SETTINGS" since="26" />
+		<field name="EXTRA_ERROR" />
+		<field name="EXTRA_EXCLUDE_SELF" since="23" />
+		<field name="EXTRA_INFO" />
+		<field name="EXTRA_INITIAL_URI" since="26" />
+		<field name="EXTRA_LOADING" />
+		<field name="EXTRA_ORIENTATION" since="24" />
+		<field name="EXTRA_PROMPT" since="23" />
+		<field name="METADATA_EXIF" since="29" />
+		<field name="METADATA_TREE_COUNT" since="29" />
+		<field name="METADATA_TREE_SIZE" since="29" />
+		<field name="METADATA_TYPES" since="29" />
+		<field name="PROVIDER_INTERFACE" />
+		<field name="QUERY_ARG_DISPLAY_NAME" since="29" />
+		<field name="QUERY_ARG_EXCLUDE_MEDIA" since="29" />
+		<field name="QUERY_ARG_FILE_SIZE_OVER" since="29" />
+		<field name="QUERY_ARG_LAST_MODIFIED_AFTER" since="29" />
+		<field name="QUERY_ARG_MIME_TYPES" since="29" />
+	</class>
+	<class name="android/provider/DocumentsContract$Document" since="19">
+		<extends name="java/lang/Object" />
+		<field name="COLUMN_DISPLAY_NAME" />
+		<field name="COLUMN_DOCUMENT_ID" />
+		<field name="COLUMN_FLAGS" />
+		<field name="COLUMN_ICON" />
+		<field name="COLUMN_LAST_MODIFIED" />
+		<field name="COLUMN_MIME_TYPE" />
+		<field name="COLUMN_SIZE" />
+		<field name="COLUMN_SUMMARY" />
+		<field name="FLAG_DIR_BLOCKS_OPEN_DOCUMENT_TREE" since="30" />
+		<field name="FLAG_DIR_PREFERS_GRID" />
+		<field name="FLAG_DIR_PREFERS_LAST_MODIFIED" />
+		<field name="FLAG_DIR_SUPPORTS_CREATE" />
+		<field name="FLAG_PARTIAL" since="29" />
+		<field name="FLAG_SUPPORTS_COPY" since="24" />
+		<field name="FLAG_SUPPORTS_DELETE" />
+		<field name="FLAG_SUPPORTS_METADATA" since="29" />
+		<field name="FLAG_SUPPORTS_MOVE" since="24" />
+		<field name="FLAG_SUPPORTS_REMOVE" since="24" />
+		<field name="FLAG_SUPPORTS_RENAME" since="21" />
+		<field name="FLAG_SUPPORTS_SETTINGS" since="26" />
+		<field name="FLAG_SUPPORTS_THUMBNAIL" />
+		<field name="FLAG_SUPPORTS_WRITE" />
+		<field name="FLAG_VIRTUAL_DOCUMENT" since="24" />
+		<field name="FLAG_WEB_LINKABLE" since="26" />
+		<field name="MIME_TYPE_DIR" />
+	</class>
+	<class name="android/provider/DocumentsContract$Path" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/List;)V" />
+		<method name="getPath()Ljava/util/List;" />
+		<method name="getRootId()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/provider/DocumentsContract$Root" since="19">
+		<extends name="java/lang/Object" />
+		<field name="COLUMN_AVAILABLE_BYTES" />
+		<field name="COLUMN_CAPACITY_BYTES" since="24" />
+		<field name="COLUMN_DOCUMENT_ID" />
+		<field name="COLUMN_FLAGS" />
+		<field name="COLUMN_ICON" />
+		<field name="COLUMN_MIME_TYPES" />
+		<field name="COLUMN_QUERY_ARGS" since="29" />
+		<field name="COLUMN_ROOT_ID" />
+		<field name="COLUMN_SUMMARY" />
+		<field name="COLUMN_TITLE" />
+		<field name="FLAG_EMPTY" since="29" />
+		<field name="FLAG_LOCAL_ONLY" />
+		<field name="FLAG_SUPPORTS_CREATE" />
+		<field name="FLAG_SUPPORTS_EJECT" since="26" />
+		<field name="FLAG_SUPPORTS_IS_CHILD" since="21" />
+		<field name="FLAG_SUPPORTS_RECENTS" />
+		<field name="FLAG_SUPPORTS_SEARCH" />
+		<field name="MIME_TYPE_ITEM" since="26" />
+	</class>
+	<class name="android/provider/DocumentsProvider" since="19">
+		<extends name="android/content/ContentProvider" />
+		<method name="&lt;init&gt;()V" />
+		<method name="copyDocument(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="24" />
+		<method name="createDocument(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="createWebLinkIntent(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/IntentSender;" since="26" />
+		<method name="deleteDocument(Ljava/lang/String;)V" />
+		<method name="ejectRoot(Ljava/lang/String;)V" since="26" />
+		<method name="findDocumentPath(Ljava/lang/String;Ljava/lang/String;)Landroid/provider/DocumentsContract$Path;" since="26" />
+		<method name="getDocumentMetadata(Ljava/lang/String;)Landroid/os/Bundle;" since="29" />
+		<method name="getDocumentStreamTypes(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" since="24" />
+		<method name="getDocumentType(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="isChildDocument(Ljava/lang/String;Ljava/lang/String;)Z" since="21" />
+		<method name="moveDocument(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="24" />
+		<method name="openDocument(Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" />
+		<method name="openDocumentThumbnail(Ljava/lang/String;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" />
+		<method name="openTypedDocument(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="24" />
+		<method name="queryChildDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/database/Cursor;" since="26" />
+		<method name="queryChildDocuments(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="queryDocument(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="queryRecentDocuments(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="queryRecentDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="29" />
+		<method name="queryRoots([Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="querySearchDocuments(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;" />
+		<method name="querySearchDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/database/Cursor;" since="29" />
+		<method name="removeDocument(Ljava/lang/String;Ljava/lang/String;)V" since="24" />
+		<method name="renameDocument(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="revokeDocumentPermission(Ljava/lang/String;)V" since="21" />
+	</class>
+	<class name="android/provider/FontRequest" since="26" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="31" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V" deprecated="31" />
+		<method name="getCertificates()Ljava/util/List;" deprecated="31" />
+		<method name="getProviderAuthority()Ljava/lang/String;" deprecated="31" />
+		<method name="getProviderPackage()Ljava/lang/String;" deprecated="31" />
+		<method name="getQuery()Ljava/lang/String;" deprecated="31" />
+	</class>
+	<class name="android/provider/FontsContract" since="26" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroid/provider/FontsContract$FontInfo;)Landroid/graphics/Typeface;" deprecated="31" />
+		<method name="fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/provider/FontRequest;)Landroid/provider/FontsContract$FontFamilyResult;" deprecated="31" />
+		<method name="requestFonts(Landroid/content/Context;Landroid/provider/FontRequest;Landroid/os/Handler;Landroid/os/CancellationSignal;Landroid/provider/FontsContract$FontRequestCallback;)V" deprecated="31" />
+	</class>
+	<class name="android/provider/FontsContract$Columns" since="26" deprecated="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="FILE_ID" deprecated="31" />
+		<field name="ITALIC" deprecated="31" />
+		<field name="RESULT_CODE" deprecated="31" />
+		<field name="RESULT_CODE_FONT_NOT_FOUND" deprecated="31" />
+		<field name="RESULT_CODE_FONT_UNAVAILABLE" deprecated="31" />
+		<field name="RESULT_CODE_MALFORMED_QUERY" deprecated="31" />
+		<field name="RESULT_CODE_OK" deprecated="31" />
+		<field name="TTC_INDEX" deprecated="31" />
+		<field name="VARIATION_SETTINGS" deprecated="31" />
+		<field name="WEIGHT" deprecated="31" />
+	</class>
+	<class name="android/provider/FontsContract$FontFamilyResult" since="26" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="getFonts()[Landroid/provider/FontsContract$FontInfo;" deprecated="31" />
+		<method name="getStatusCode()I" deprecated="31" />
+		<field name="STATUS_OK" deprecated="31" />
+		<field name="STATUS_REJECTED" deprecated="31" />
+		<field name="STATUS_UNEXPECTED_DATA_PROVIDED" deprecated="31" />
+		<field name="STATUS_WRONG_CERTIFICATES" deprecated="31" />
+	</class>
+	<class name="android/provider/FontsContract$FontInfo" since="26" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="getAxes()[Landroid/graphics/fonts/FontVariationAxis;" deprecated="31" />
+		<method name="getResultCode()I" deprecated="31" />
+		<method name="getTtcIndex()I" deprecated="31" />
+		<method name="getUri()Landroid/net/Uri;" deprecated="31" />
+		<method name="getWeight()I" deprecated="31" />
+		<method name="isItalic()Z" deprecated="31" />
+	</class>
+	<class name="android/provider/FontsContract$FontRequestCallback" since="26" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="onTypefaceRequestFailed(I)V" deprecated="31" />
+		<method name="onTypefaceRetrieved(Landroid/graphics/Typeface;)V" deprecated="31" />
+		<field name="FAIL_REASON_FONT_LOAD_ERROR" deprecated="31" />
+		<field name="FAIL_REASON_FONT_NOT_FOUND" deprecated="31" />
+		<field name="FAIL_REASON_FONT_UNAVAILABLE" deprecated="31" />
+		<field name="FAIL_REASON_MALFORMED_QUERY" deprecated="31" />
+		<field name="FAIL_REASON_PROVIDER_NOT_FOUND" deprecated="31" />
+		<field name="FAIL_REASON_WRONG_CERTIFICATES" deprecated="31" />
+	</class>
+	<class name="android/provider/LiveFolders" since="3" deprecated="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="ACTION_CREATE_LIVE_FOLDER" deprecated="29" />
+		<field name="DESCRIPTION" deprecated="29" />
+		<field name="DISPLAY_MODE_GRID" deprecated="29" />
+		<field name="DISPLAY_MODE_LIST" deprecated="29" />
+		<field name="EXTRA_LIVE_FOLDER_BASE_INTENT" deprecated="29" />
+		<field name="EXTRA_LIVE_FOLDER_DISPLAY_MODE" deprecated="29" />
+		<field name="EXTRA_LIVE_FOLDER_ICON" deprecated="29" />
+		<field name="EXTRA_LIVE_FOLDER_NAME" deprecated="29" />
+		<field name="ICON_BITMAP" deprecated="29" />
+		<field name="ICON_PACKAGE" deprecated="29" />
+		<field name="ICON_RESOURCE" deprecated="29" />
+		<field name="INTENT" deprecated="29" />
+		<field name="NAME" deprecated="29" />
+	</class>
+	<class name="android/provider/OpenableColumns" since="1">
+		<extends name="java/lang/Object" />
+		<field name="DISPLAY_NAME" />
+		<field name="SIZE" />
+	</class>
+	<class name="android/provider/SearchRecentSuggestions" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;I)V" />
+		<method name="clearHistory()V" />
+		<method name="saveRecentQuery(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="truncateHistory(Landroid/content/ContentResolver;I)V" />
+		<field name="QUERIES_PROJECTION_1LINE" />
+		<field name="QUERIES_PROJECTION_2LINE" />
+		<field name="QUERIES_PROJECTION_DATE_INDEX" />
+		<field name="QUERIES_PROJECTION_DISPLAY1_INDEX" />
+		<field name="QUERIES_PROJECTION_DISPLAY2_INDEX" />
+		<field name="QUERIES_PROJECTION_QUERY_INDEX" />
+	</class>
+	<class name="android/provider/Settings" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="canDrawOverlays(Landroid/content/Context;)Z" since="23" />
+		<field name="ACTION_ACCESSIBILITY_SETTINGS" since="5" />
+		<field name="ACTION_ADD_ACCOUNT" since="8" />
+		<field name="ACTION_AIRPLANE_MODE_SETTINGS" since="3" />
+		<field name="ACTION_APN_SETTINGS" />
+		<field name="ACTION_APPLICATION_DETAILS_SETTINGS" since="9" />
+		<field name="ACTION_APPLICATION_DEVELOPMENT_SETTINGS" since="3" />
+		<field name="ACTION_APPLICATION_SETTINGS" />
+		<field name="ACTION_APP_NOTIFICATION_BUBBLE_SETTINGS" since="29" />
+		<field name="ACTION_APP_NOTIFICATION_SETTINGS" since="26" />
+		<field name="ACTION_APP_OPEN_BY_DEFAULT_SETTINGS" since="31" />
+		<field name="ACTION_APP_SEARCH_SETTINGS" since="29" />
+		<field name="ACTION_APP_USAGE_SETTINGS" since="29" />
+		<field name="ACTION_AUTO_ROTATE_SETTINGS" since="31" />
+		<field name="ACTION_BATTERY_SAVER_SETTINGS" since="22" />
+		<field name="ACTION_BIOMETRIC_ENROLL" since="30" />
+		<field name="ACTION_BLUETOOTH_SETTINGS" />
+		<field name="ACTION_CAPTIONING_SETTINGS" since="19" />
+		<field name="ACTION_CAST_SETTINGS" since="21" />
+		<field name="ACTION_CHANNEL_NOTIFICATION_SETTINGS" since="26" />
+		<field name="ACTION_CONDITION_PROVIDER_SETTINGS" since="30" />
+		<field name="ACTION_DATA_ROAMING_SETTINGS" since="3" />
+		<field name="ACTION_DATA_USAGE_SETTINGS" since="28" />
+		<field name="ACTION_DATE_SETTINGS" />
+		<field name="ACTION_DEVICE_INFO_SETTINGS" since="8" />
+		<field name="ACTION_DISPLAY_SETTINGS" />
+		<field name="ACTION_DREAM_SETTINGS" since="18" />
+		<field name="ACTION_FINGERPRINT_ENROLL" since="28" deprecated="30" />
+		<field name="ACTION_HARD_KEYBOARD_SETTINGS" since="24" />
+		<field name="ACTION_HOME_SETTINGS" since="21" />
+		<field name="ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS" since="24" />
+		<field name="ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS" since="23" />
+		<field name="ACTION_INPUT_METHOD_SETTINGS" since="3" />
+		<field name="ACTION_INPUT_METHOD_SUBTYPE_SETTINGS" since="11" />
+		<field name="ACTION_INTERNAL_STORAGE_SETTINGS" since="3" />
+		<field name="ACTION_LOCALE_SETTINGS" />
+		<field name="ACTION_LOCATION_SOURCE_SETTINGS" />
+		<field name="ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS" since="9" />
+		<field name="ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION" since="30" />
+		<field name="ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS" since="31" />
+		<field name="ACTION_MANAGE_APPLICATIONS_SETTINGS" since="3" />
+		<field name="ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION" since="30" />
+		<field name="ACTION_MANAGE_DEFAULT_APPS_SETTINGS" since="24" />
+		<field name="ACTION_MANAGE_OVERLAY_PERMISSION" since="23" />
+		<field name="ACTION_MANAGE_UNKNOWN_APP_SOURCES" since="26" />
+		<field name="ACTION_MANAGE_WRITE_SETTINGS" since="23" />
+		<field name="ACTION_MEMORY_CARD_SETTINGS" since="3" />
+		<field name="ACTION_NETWORK_OPERATOR_SETTINGS" since="3" />
+		<field name="ACTION_NFCSHARING_SETTINGS" since="14" />
+		<field name="ACTION_NFC_PAYMENT_SETTINGS" since="19" />
+		<field name="ACTION_NFC_SETTINGS" since="16" />
+		<field name="ACTION_NIGHT_DISPLAY_SETTINGS" since="26" />
+		<field name="ACTION_NOTIFICATION_ASSISTANT_SETTINGS" since="29" />
+		<field name="ACTION_NOTIFICATION_LISTENER_DETAIL_SETTINGS" since="30" />
+		<field name="ACTION_NOTIFICATION_LISTENER_SETTINGS" since="22" />
+		<field name="ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS" since="23" />
+		<field name="ACTION_PRINT_SETTINGS" since="19" />
+		<field name="ACTION_PRIVACY_SETTINGS" since="5" />
+		<field name="ACTION_PROCESS_WIFI_EASY_CONNECT_URI" since="29" />
+		<field name="ACTION_QUICK_ACCESS_WALLET_SETTINGS" since="30" />
+		<field name="ACTION_QUICK_LAUNCH_SETTINGS" since="3" />
+		<field name="ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23" />
+		<field name="ACTION_REQUEST_MANAGE_MEDIA" since="31" />
+		<field name="ACTION_REQUEST_SCHEDULE_EXACT_ALARM" since="31" />
+		<field name="ACTION_REQUEST_SET_AUTOFILL_SERVICE" since="26" />
+		<field name="ACTION_SEARCH_SETTINGS" since="8" />
+		<field name="ACTION_SECURITY_SETTINGS" />
+		<field name="ACTION_SETTINGS" />
+		<field name="ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY" since="33" />
+		<field name="ACTION_SHOW_REGULATORY_INFO" since="21" />
+		<field name="ACTION_SHOW_WORK_POLICY_INFO" since="30" />
+		<field name="ACTION_SOUND_SETTINGS" />
+		<field name="ACTION_STORAGE_VOLUME_ACCESS_SETTINGS" since="28" deprecated="29" />
+		<field name="ACTION_SYNC_SETTINGS" since="3" />
+		<field name="ACTION_USAGE_ACCESS_SETTINGS" since="21" />
+		<field name="ACTION_USER_DICTIONARY_SETTINGS" since="3" />
+		<field name="ACTION_VOICE_CONTROL_AIRPLANE_MODE" since="23" />
+		<field name="ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE" since="23" />
+		<field name="ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE" since="23" />
+		<field name="ACTION_VOICE_INPUT_SETTINGS" since="21" />
+		<field name="ACTION_VPN_SETTINGS" since="24" />
+		<field name="ACTION_VR_LISTENER_SETTINGS" since="24" />
+		<field name="ACTION_WEBVIEW_SETTINGS" since="24" />
+		<field name="ACTION_WIFI_ADD_NETWORKS" since="30" />
+		<field name="ACTION_WIFI_IP_SETTINGS" since="3" />
+		<field name="ACTION_WIFI_SETTINGS" />
+		<field name="ACTION_WIRELESS_SETTINGS" />
+		<field name="ACTION_ZEN_MODE_PRIORITY_SETTINGS" since="26" />
+		<field name="ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED" since="30" />
+		<field name="ADD_WIFI_RESULT_ALREADY_EXISTS" since="30" />
+		<field name="ADD_WIFI_RESULT_SUCCESS" since="30" />
+		<field name="AUTHORITY" />
+		<field name="EXTRA_ACCOUNT_TYPES" since="18" />
+		<field name="EXTRA_AIRPLANE_MODE_ENABLED" since="23" />
+		<field name="EXTRA_APP_PACKAGE" since="26" />
+		<field name="EXTRA_AUTHORITIES" since="8" />
+		<field name="EXTRA_BATTERY_SAVER_MODE_ENABLED" since="23" />
+		<field name="EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED" since="30" />
+		<field name="EXTRA_CHANNEL_FILTER_LIST" since="31" />
+		<field name="EXTRA_CHANNEL_ID" since="26" />
+		<field name="EXTRA_CONVERSATION_ID" since="30" />
+		<field name="EXTRA_DO_NOT_DISTURB_MODE_ENABLED" since="23" />
+		<field name="EXTRA_DO_NOT_DISTURB_MODE_MINUTES" since="23" />
+		<field name="EXTRA_EASY_CONNECT_ATTEMPTED_SSID" since="30" />
+		<field name="EXTRA_EASY_CONNECT_BAND_LIST" since="30" />
+		<field name="EXTRA_EASY_CONNECT_CHANNEL_LIST" since="30" />
+		<field name="EXTRA_EASY_CONNECT_ERROR_CODE" since="30" />
+		<field name="EXTRA_INPUT_METHOD_ID" since="11" />
+		<field name="EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME" since="30" />
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY" since="33" />
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI" since="33" />
+		<field name="EXTRA_SUB_ID" since="28" />
+		<field name="EXTRA_WIFI_NETWORK_LIST" since="30" />
+		<field name="EXTRA_WIFI_NETWORK_RESULT_LIST" since="30" />
+		<field name="INTENT_CATEGORY_USAGE_ACCESS_CONFIG" since="23" />
+		<field name="METADATA_USAGE_ACCESS_REASON" since="23" />
+	</class>
+	<class name="android/provider/Settings$Global" since="17">
+		<extends name="android/provider/Settings$NameValueTable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F" />
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F" />
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I" />
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I" />
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J" />
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J" />
+		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z" />
+		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z" />
+		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z" />
+		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z" />
+		<field name="ADB_ENABLED" />
+		<field name="AIRPLANE_MODE_ON" />
+		<field name="AIRPLANE_MODE_RADIOS" />
+		<field name="ALWAYS_FINISH_ACTIVITIES" />
+		<field name="ANIMATOR_DURATION_SCALE" />
+		<field name="APPLY_RAMPING_RINGER" since="29" />
+		<field name="AUTO_TIME" />
+		<field name="AUTO_TIME_ZONE" />
+		<field name="BLUETOOTH_ON" />
+		<field name="BOOT_COUNT" since="24" />
+		<field name="CONTACT_METADATA_SYNC_ENABLED" since="24" />
+		<field name="CONTENT_URI" />
+		<field name="DATA_ROAMING" />
+		<field name="DEBUG_APP" />
+		<field name="DEVELOPMENT_SETTINGS_ENABLED" />
+		<field name="DEVICE_NAME" since="25" />
+		<field name="DEVICE_PROVISIONED" />
+		<field name="HTTP_PROXY" />
+		<field name="INSTALL_NON_MARKET_APPS" deprecated="21" />
+		<field name="MODE_RINGER" />
+		<field name="NETWORK_PREFERENCE" />
+		<field name="RADIO_BLUETOOTH" />
+		<field name="RADIO_CELL" />
+		<field name="RADIO_NFC" />
+		<field name="RADIO_WIFI" />
+		<field name="SHOW_PROCESSES" deprecated="25" />
+		<field name="STAY_ON_WHILE_PLUGGED_IN" />
+		<field name="SYS_PROP_SETTING_VERSION" removed="24" />
+		<field name="TRANSITION_ANIMATION_SCALE" />
+		<field name="USB_MASS_STORAGE_ENABLED" />
+		<field name="USE_GOOGLE_MAIL" />
+		<field name="WAIT_FOR_DEBUGGER" />
+		<field name="WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN" since="23" />
+		<field name="WIFI_MAX_DHCP_RETRY_COUNT" />
+		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" />
+		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="26" />
+		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="30" />
+		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="30" />
+		<field name="WIFI_ON" />
+		<field name="WIFI_SLEEP_POLICY" deprecated="30" />
+		<field name="WIFI_SLEEP_POLICY_DEFAULT" deprecated="30" />
+		<field name="WIFI_SLEEP_POLICY_NEVER" deprecated="30" />
+		<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED" deprecated="30" />
+		<field name="WIFI_WATCHDOG_ON" />
+		<field name="WINDOW_ANIMATION_SCALE" />
+	</class>
+	<class name="android/provider/Settings$NameValueTable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getUriFor(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="putString(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Z" />
+		<field name="NAME" />
+		<field name="VALUE" />
+	</class>
+	<class name="android/provider/Settings$Panel" since="29">
+		<extends name="java/lang/Object" />
+		<field name="ACTION_INTERNET_CONNECTIVITY" />
+		<field name="ACTION_NFC" />
+		<field name="ACTION_VOLUME" />
+		<field name="ACTION_WIFI" />
+	</class>
+	<class name="android/provider/Settings$Secure" since="3">
+		<extends name="android/provider/Settings$NameValueTable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F" />
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F" />
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I" />
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I" />
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J" />
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J" />
+		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="isLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;)Z" since="8" deprecated="19" />
+		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z" />
+		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z" />
+		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z" />
+		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="setLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;Z)V" since="8" deprecated="19" />
+		<field name="ACCESSIBILITY_DISPLAY_INVERSION_ENABLED" since="21" />
+		<field name="ACCESSIBILITY_ENABLED" since="4" />
+		<field name="ACCESSIBILITY_SPEAK_PASSWORD" since="15" deprecated="26" />
+		<field name="ADB_ENABLED" deprecated="17" />
+		<field name="ALLOWED_GEOLOCATION_ORIGINS" since="8" />
+		<field name="ALLOW_MOCK_LOCATION" deprecated="23" />
+		<field name="ANDROID_ID" />
+		<field name="BACKGROUND_DATA" deprecated="15" />
+		<field name="BLUETOOTH_ON" deprecated="17" />
+		<field name="CONTENT_URI" />
+		<field name="DATA_ROAMING" deprecated="17" />
+		<field name="DEFAULT_INPUT_METHOD" />
+		<field name="DEVELOPMENT_SETTINGS_ENABLED" since="16" deprecated="17" />
+		<field name="DEVICE_PROVISIONED" deprecated="17" />
+		<field name="ENABLED_ACCESSIBILITY_SERVICES" since="4" />
+		<field name="ENABLED_INPUT_METHODS" />
+		<field name="HTTP_PROXY" deprecated="17" />
+		<field name="INPUT_METHOD_SELECTOR_VISIBILITY" since="11" />
+		<field name="INSTALL_NON_MARKET_APPS" deprecated="17" />
+		<field name="LOCATION_MODE" since="19" deprecated="28" />
+		<field name="LOCATION_MODE_BATTERY_SAVING" since="19" deprecated="28" />
+		<field name="LOCATION_MODE_HIGH_ACCURACY" since="19" deprecated="28" />
+		<field name="LOCATION_MODE_OFF" since="19" deprecated="28" />
+		<field name="LOCATION_MODE_SENSORS_ONLY" since="19" deprecated="28" />
+		<field name="LOCATION_PROVIDERS_ALLOWED" deprecated="19" />
+		<field name="LOCK_PATTERN_ENABLED" since="8" deprecated="23" />
+		<field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="8" deprecated="17" />
+		<field name="LOCK_PATTERN_VISIBLE" since="8" deprecated="23" />
+		<field name="LOGGING_ID" deprecated="15" />
+		<field name="NETWORK_PREFERENCE" deprecated="17" />
+		<field name="PARENTAL_CONTROL_ENABLED" />
+		<field name="PARENTAL_CONTROL_LAST_UPDATE" />
+		<field name="PARENTAL_CONTROL_REDIRECT_URL" />
+		<field name="RTT_CALLING_MODE" since="28" />
+		<field name="SECURE_FRP_MODE" since="30" />
+		<field name="SELECTED_INPUT_METHOD_SUBTYPE" since="11" />
+		<field name="SETTINGS_CLASSNAME" />
+		<field name="SKIP_FIRST_USE_HINTS" since="21" />
+		<field name="SYS_PROP_SETTING_VERSION" removed="24" />
+		<field name="TOUCH_EXPLORATION_ENABLED" since="14" />
+		<field name="TTS_DEFAULT_COUNTRY" since="4" deprecated="15" />
+		<field name="TTS_DEFAULT_LANG" since="4" deprecated="15" />
+		<field name="TTS_DEFAULT_PITCH" since="4" />
+		<field name="TTS_DEFAULT_RATE" since="4" />
+		<field name="TTS_DEFAULT_SYNTH" since="4" />
+		<field name="TTS_DEFAULT_VARIANT" since="4" deprecated="15" />
+		<field name="TTS_ENABLED_PLUGINS" since="8" />
+		<field name="TTS_USE_DEFAULTS" since="4" deprecated="15" />
+		<field name="USB_MASS_STORAGE_ENABLED" deprecated="17" />
+		<field name="USE_GOOGLE_MAIL" deprecated="17" />
+		<field name="WIFI_MAX_DHCP_RETRY_COUNT" deprecated="17" />
+		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" deprecated="17" />
+		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="17" />
+		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="17" />
+		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="17" />
+		<field name="WIFI_ON" deprecated="17" />
+		<field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="15" />
+		<field name="WIFI_WATCHDOG_AP_COUNT" deprecated="15" />
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="15" />
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="15" />
+		<field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_ON" deprecated="17" />
+		<field name="WIFI_WATCHDOG_PING_COUNT" deprecated="15" />
+		<field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_WATCH_LIST" deprecated="15" />
+	</class>
+	<class name="android/provider/Settings$SettingNotFoundException" since="1">
+		<extends name="android/util/AndroidException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/provider/Settings$System" since="1">
+		<extends name="android/provider/Settings$NameValueTable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="canWrite(Landroid/content/Context;)Z" since="23" />
+		<method name="getConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)V" />
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F" />
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F" />
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I" />
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I" />
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J" since="3" />
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J" since="3" />
+		<method name="getShowGTalkServiceStatus(Landroid/content/ContentResolver;)Z" deprecated="17" />
+		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;" />
+		<method name="putConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)Z" />
+		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z" />
+		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z" />
+		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z" since="3" />
+		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="setShowGTalkServiceStatus(Landroid/content/ContentResolver;Z)V" deprecated="17" />
+		<field name="ACCELEROMETER_ROTATION" since="3" />
+		<field name="ADB_ENABLED" deprecated="15" />
+		<field name="AIRPLANE_MODE_ON" deprecated="17" />
+		<field name="AIRPLANE_MODE_RADIOS" deprecated="17" />
+		<field name="ALARM_ALERT" since="5" />
+		<field name="ALWAYS_FINISH_ACTIVITIES" deprecated="17" />
+		<field name="ANDROID_ID" deprecated="15" />
+		<field name="ANIMATOR_DURATION_SCALE" since="16" deprecated="17" />
+		<field name="APPEND_FOR_LAST_AUDIBLE" removed="23" />
+		<field name="AUTO_TIME" deprecated="17" />
+		<field name="AUTO_TIME_ZONE" since="11" deprecated="17" />
+		<field name="BLUETOOTH_DISCOVERABILITY" />
+		<field name="BLUETOOTH_DISCOVERABILITY_TIMEOUT" />
+		<field name="BLUETOOTH_ON" deprecated="15" />
+		<field name="CONTENT_URI" />
+		<field name="DATA_ROAMING" deprecated="15" />
+		<field name="DATE_FORMAT" deprecated="31" />
+		<field name="DEBUG_APP" deprecated="17" />
+		<field name="DEFAULT_ALARM_ALERT_URI" since="5" />
+		<field name="DEFAULT_NOTIFICATION_URI" />
+		<field name="DEFAULT_RINGTONE_URI" />
+		<field name="DEVICE_PROVISIONED" deprecated="15" />
+		<field name="DIM_SCREEN" deprecated="17" />
+		<field name="DTMF_TONE_TYPE_WHEN_DIALING" since="23" />
+		<field name="DTMF_TONE_WHEN_DIALING" />
+		<field name="END_BUTTON_BEHAVIOR" />
+		<field name="FONT_SCALE" />
+		<field name="HAPTIC_FEEDBACK_ENABLED" since="3" />
+		<field name="HTTP_PROXY" deprecated="15" />
+		<field name="INSTALL_NON_MARKET_APPS" deprecated="15" />
+		<field name="LOCATION_PROVIDERS_ALLOWED" deprecated="15" />
+		<field name="LOCK_PATTERN_ENABLED" deprecated="15" />
+		<field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="3" deprecated="15" />
+		<field name="LOCK_PATTERN_VISIBLE" deprecated="15" />
+		<field name="LOGGING_ID" deprecated="15" />
+		<field name="MODE_RINGER" deprecated="17" />
+		<field name="MODE_RINGER_STREAMS_AFFECTED" />
+		<field name="MUTE_STREAMS_AFFECTED" />
+		<field name="NETWORK_PREFERENCE" deprecated="15" />
+		<field name="NEXT_ALARM_FORMATTED" deprecated="21" />
+		<field name="NOTIFICATION_SOUND" />
+		<field name="PARENTAL_CONTROL_ENABLED" deprecated="15" />
+		<field name="PARENTAL_CONTROL_LAST_UPDATE" deprecated="15" />
+		<field name="PARENTAL_CONTROL_REDIRECT_URL" deprecated="15" />
+		<field name="RADIO_BLUETOOTH" deprecated="17" />
+		<field name="RADIO_CELL" deprecated="17" />
+		<field name="RADIO_NFC" since="14" deprecated="17" />
+		<field name="RADIO_WIFI" deprecated="17" />
+		<field name="RINGTONE" />
+		<field name="SCREEN_BRIGHTNESS" />
+		<field name="SCREEN_BRIGHTNESS_MODE" since="8" />
+		<field name="SCREEN_BRIGHTNESS_MODE_AUTOMATIC" since="8" />
+		<field name="SCREEN_BRIGHTNESS_MODE_MANUAL" since="8" />
+		<field name="SCREEN_OFF_TIMEOUT" />
+		<field name="SETTINGS_CLASSNAME" deprecated="15" />
+		<field name="SETUP_WIZARD_HAS_RUN" />
+		<field name="SHOW_GTALK_SERVICE_STATUS" />
+		<field name="SHOW_PROCESSES" deprecated="17" />
+		<field name="SHOW_WEB_SUGGESTIONS" since="4" deprecated="15" />
+		<field name="SOUND_EFFECTS_ENABLED" />
+		<field name="STAY_ON_WHILE_PLUGGED_IN" deprecated="17" />
+		<field name="SYS_PROP_SETTING_VERSION" removed="24" />
+		<field name="TEXT_AUTO_CAPS" />
+		<field name="TEXT_AUTO_PUNCTUATE" />
+		<field name="TEXT_AUTO_REPLACE" />
+		<field name="TEXT_SHOW_PASSWORD" />
+		<field name="TIME_12_24" />
+		<field name="TRANSITION_ANIMATION_SCALE" deprecated="17" />
+		<field name="USB_MASS_STORAGE_ENABLED" deprecated="15" />
+		<field name="USER_ROTATION" since="11" />
+		<field name="USE_GOOGLE_MAIL" deprecated="15" />
+		<field name="VIBRATE_ON" />
+		<field name="VIBRATE_WHEN_RINGING" since="23" />
+		<field name="VOLUME_ALARM" removed="23" />
+		<field name="VOLUME_BLUETOOTH_SCO" since="8" removed="23" />
+		<field name="VOLUME_MUSIC" removed="23" />
+		<field name="VOLUME_NOTIFICATION" since="3" removed="23" />
+		<field name="VOLUME_RING" removed="23" />
+		<field name="VOLUME_SETTINGS" removed="23" />
+		<field name="VOLUME_SYSTEM" removed="23" />
+		<field name="VOLUME_VOICE" removed="23" />
+		<field name="WAIT_FOR_DEBUGGER" deprecated="17" />
+		<field name="WALLPAPER_ACTIVITY" deprecated="17" />
+		<field name="WIFI_MAX_DHCP_RETRY_COUNT" since="3" deprecated="15" />
+		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" since="3" deprecated="15" />
+		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="15" />
+		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="15" />
+		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="15" />
+		<field name="WIFI_ON" deprecated="15" />
+		<field name="WIFI_SLEEP_POLICY" since="3" deprecated="17" />
+		<field name="WIFI_SLEEP_POLICY_DEFAULT" since="3" deprecated="17" />
+		<field name="WIFI_SLEEP_POLICY_NEVER" since="3" deprecated="17" />
+		<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED" since="3" deprecated="17" />
+		<field name="WIFI_STATIC_DNS1" deprecated="17" />
+		<field name="WIFI_STATIC_DNS2" deprecated="17" />
+		<field name="WIFI_STATIC_GATEWAY" deprecated="17" />
+		<field name="WIFI_STATIC_IP" deprecated="17" />
+		<field name="WIFI_STATIC_NETMASK" deprecated="17" />
+		<field name="WIFI_USE_STATIC_IP" deprecated="17" />
+		<field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="15" />
+		<field name="WIFI_WATCHDOG_AP_COUNT" deprecated="15" />
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="15" />
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="15" />
+		<field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_ON" deprecated="15" />
+		<field name="WIFI_WATCHDOG_PING_COUNT" deprecated="15" />
+		<field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="15" />
+		<field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="15" />
+		<field name="WINDOW_ANIMATION_SCALE" deprecated="17" />
+	</class>
+	<class name="android/provider/SettingsSlicesContract" since="28">
+		<extends name="java/lang/Object" />
+		<field name="AUTHORITY" />
+		<field name="BASE_URI" />
+		<field name="KEY_AIRPLANE_MODE" />
+		<field name="KEY_BATTERY_SAVER" />
+		<field name="KEY_BLUETOOTH" />
+		<field name="KEY_LOCATION" />
+		<field name="KEY_WIFI" />
+		<field name="PATH_SETTING_ACTION" />
+		<field name="PATH_SETTING_INTENT" />
+	</class>
+	<class name="android/provider/SimPhonebookContract" since="31">
+		<extends name="java/lang/Object" />
+		<field name="AUTHORITY" />
+		<field name="AUTHORITY_URI" />
+	</class>
+	<class name="android/provider/SimPhonebookContract$ElementaryFiles" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getItemUri(II)Landroid/net/Uri;" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="EF_ADN" />
+		<field name="EF_FDN" />
+		<field name="EF_SDN" />
+		<field name="EF_TYPE" />
+		<field name="EF_UNKNOWN" />
+		<field name="MAX_RECORDS" />
+		<field name="NAME_MAX_LENGTH" />
+		<field name="PHONE_NUMBER_MAX_LENGTH" />
+		<field name="RECORD_COUNT" />
+		<field name="SLOT_INDEX" />
+		<field name="SUBSCRIPTION_ID" />
+	</class>
+	<class name="android/provider/SimPhonebookContract$SimRecords" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getContentUri(II)Landroid/net/Uri;" />
+		<method name="getEncodedNameLength(Landroid/content/ContentResolver;Ljava/lang/String;)I" />
+		<method name="getItemUri(III)Landroid/net/Uri;" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="ELEMENTARY_FILE_TYPE" />
+		<field name="ERROR_NAME_UNSUPPORTED" />
+		<field name="NAME" />
+		<field name="PHONE_NUMBER" />
+		<field name="RECORD_NUMBER" />
+		<field name="SUBSCRIPTION_ID" />
+	</class>
+	<class name="android/provider/SyncStateContract" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/provider/SyncStateContract$Columns" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="ACCOUNT_NAME" />
+		<field name="ACCOUNT_TYPE" />
+		<field name="DATA" />
+	</class>
+	<class name="android/provider/SyncStateContract$Constants" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/SyncStateContract$Columns" />
+		<method name="&lt;init&gt;()V" />
+		<field name="CONTENT_DIRECTORY" />
+	</class>
+	<class name="android/provider/SyncStateContract$Helpers" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="get(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;)[B" />
+		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;)Landroid/util/Pair;" />
+		<method name="insert(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;[B)Landroid/net/Uri;" />
+		<method name="newSetOperation(Landroid/net/Uri;Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;" />
+		<method name="newUpdateOperation(Landroid/net/Uri;[B)Landroid/content/ContentProviderOperation;" />
+		<method name="set(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;[B)V" />
+		<method name="update(Landroid/content/ContentProviderClient;Landroid/net/Uri;[B)V" />
+	</class>
+	<class name="android/provider/Telephony" since="19">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/provider/Telephony$BaseMmsColumns" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="CONTENT_CLASS" />
+		<field name="CONTENT_LOCATION" />
+		<field name="CONTENT_TYPE" />
+		<field name="CREATOR" since="21" />
+		<field name="DATE" />
+		<field name="DATE_SENT" />
+		<field name="DELIVERY_REPORT" />
+		<field name="DELIVERY_TIME" />
+		<field name="EXPIRY" />
+		<field name="LOCKED" />
+		<field name="MESSAGE_BOX" />
+		<field name="MESSAGE_BOX_ALL" />
+		<field name="MESSAGE_BOX_DRAFTS" />
+		<field name="MESSAGE_BOX_FAILED" since="21" />
+		<field name="MESSAGE_BOX_INBOX" />
+		<field name="MESSAGE_BOX_OUTBOX" />
+		<field name="MESSAGE_BOX_SENT" />
+		<field name="MESSAGE_CLASS" />
+		<field name="MESSAGE_ID" />
+		<field name="MESSAGE_SIZE" />
+		<field name="MESSAGE_TYPE" />
+		<field name="MMS_VERSION" />
+		<field name="PRIORITY" />
+		<field name="READ" />
+		<field name="READ_REPORT" />
+		<field name="READ_STATUS" />
+		<field name="REPORT_ALLOWED" />
+		<field name="RESPONSE_STATUS" />
+		<field name="RESPONSE_TEXT" />
+		<field name="RETRIEVE_STATUS" />
+		<field name="RETRIEVE_TEXT" />
+		<field name="RETRIEVE_TEXT_CHARSET" />
+		<field name="SEEN" />
+		<field name="STATUS" />
+		<field name="SUBJECT" />
+		<field name="SUBJECT_CHARSET" />
+		<field name="SUBSCRIPTION_ID" since="22" />
+		<field name="TEXT_ONLY" />
+		<field name="THREAD_ID" />
+		<field name="TRANSACTION_ID" />
+	</class>
+	<class name="android/provider/Telephony$CanonicalAddressesColumns" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="ADDRESS" />
+	</class>
+	<class name="android/provider/Telephony$CarrierId" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="getSpecificCarrierIdUriForSubscriptionId(I)Landroid/net/Uri;" since="29" />
+		<method name="getUriForSubscriptionId(I)Landroid/net/Uri;" />
+		<field name="CARRIER_ID" />
+		<field name="CARRIER_NAME" />
+		<field name="CONTENT_URI" />
+		<field name="SPECIFIC_CARRIER_ID" since="29" />
+		<field name="SPECIFIC_CARRIER_ID_NAME" since="29" />
+	</class>
+	<class name="android/provider/Telephony$Carriers" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="APN" />
+		<field name="AUTH_TYPE" />
+		<field name="BEARER" deprecated="28" />
+		<field name="CARRIER_ENABLED" />
+		<field name="CARRIER_ID" since="29" />
+		<field name="CONTENT_URI" />
+		<field name="CURRENT" />
+		<field name="DEFAULT_SORT_ORDER" />
+		<field name="MCC" deprecated="29" />
+		<field name="MMSC" />
+		<field name="MMSPORT" />
+		<field name="MMSPROXY" />
+		<field name="MNC" deprecated="29" />
+		<field name="MVNO_MATCH_DATA" deprecated="29" />
+		<field name="MVNO_TYPE" deprecated="29" />
+		<field name="NAME" />
+		<field name="NETWORK_TYPE_BITMASK" since="28" />
+		<field name="NUMERIC" deprecated="29" />
+		<field name="PASSWORD" />
+		<field name="PORT" />
+		<field name="PROTOCOL" />
+		<field name="PROXY" />
+		<field name="ROAMING_PROTOCOL" />
+		<field name="SERVER" />
+		<field name="SIM_APN_URI" since="29" />
+		<field name="SUBSCRIPTION_ID" since="22" />
+		<field name="TYPE" />
+		<field name="USER" />
+	</class>
+	<class name="android/provider/Telephony$Mms" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/Telephony$BaseMmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+		<field name="REPORT_REQUEST_URI" />
+		<field name="REPORT_STATUS_URI" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Addr" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="getAddrUriForMessage(Ljava/lang/String;)Landroid/net/Uri;" since="30" />
+		<field name="ADDRESS" />
+		<field name="CHARSET" />
+		<field name="CONTACT_ID" />
+		<field name="MSG_ID" />
+		<field name="TYPE" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Draft" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/Telephony$BaseMmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Inbox" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/Telephony$BaseMmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Intents" since="19">
+		<extends name="java/lang/Object" />
+		<field name="CONTENT_CHANGED_ACTION" />
+		<field name="DELETED_CONTENTS" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Outbox" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/Telephony$BaseMmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Part" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="getPartUriForMessage(Ljava/lang/String;)Landroid/net/Uri;" since="30" />
+		<field name="CHARSET" />
+		<field name="CONTENT_DISPOSITION" />
+		<field name="CONTENT_ID" />
+		<field name="CONTENT_LOCATION" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" since="29" />
+		<field name="CT_START" />
+		<field name="CT_TYPE" />
+		<field name="FILENAME" />
+		<field name="MSG_ID" />
+		<field name="NAME" />
+		<field name="SEQ" />
+		<field name="TEXT" />
+		<field name="_DATA" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Rate" since="19">
+		<extends name="java/lang/Object" />
+		<field name="CONTENT_URI" />
+		<field name="SENT_TIME" />
+	</class>
+	<class name="android/provider/Telephony$Mms$Sent" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/Telephony$BaseMmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$MmsSms" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="CONTENT_CONVERSATIONS_URI" />
+		<field name="CONTENT_DRAFT_URI" />
+		<field name="CONTENT_FILTER_BYPHONE_URI" />
+		<field name="CONTENT_LOCKED_URI" />
+		<field name="CONTENT_UNDELIVERED_URI" />
+		<field name="CONTENT_URI" />
+		<field name="ERR_TYPE_GENERIC" />
+		<field name="ERR_TYPE_GENERIC_PERMANENT" />
+		<field name="ERR_TYPE_MMS_PROTO_PERMANENT" />
+		<field name="ERR_TYPE_MMS_PROTO_TRANSIENT" />
+		<field name="ERR_TYPE_SMS_PROTO_PERMANENT" />
+		<field name="ERR_TYPE_SMS_PROTO_TRANSIENT" />
+		<field name="ERR_TYPE_TRANSPORT_FAILURE" />
+		<field name="MMS_PROTO" />
+		<field name="NO_ERROR" />
+		<field name="SEARCH_URI" />
+		<field name="SMS_PROTO" />
+		<field name="TYPE_DISCRIMINATOR_COLUMN" />
+	</class>
+	<class name="android/provider/Telephony$MmsSms$PendingMessages" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DUE_TIME" />
+		<field name="ERROR_CODE" />
+		<field name="ERROR_TYPE" />
+		<field name="LAST_TRY" />
+		<field name="MSG_ID" />
+		<field name="MSG_TYPE" />
+		<field name="PROTO_TYPE" />
+		<field name="RETRY_INDEX" />
+		<field name="SUBSCRIPTION_ID" since="22" />
+	</class>
+	<class name="android/provider/Telephony$ServiceStateTable" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getUriForSubscriptionId(I)Landroid/net/Uri;" />
+		<method name="getUriForSubscriptionIdAndField(ILjava/lang/String;)Landroid/net/Uri;" />
+		<field name="AUTHORITY" />
+		<field name="CONTENT_URI" />
+		<field name="DATA_NETWORK_TYPE" since="31" />
+		<field name="DATA_REG_STATE" since="31" />
+		<field name="DUPLEX_MODE" since="31" />
+		<field name="IS_MANUAL_NETWORK_SELECTION" />
+		<field name="VOICE_OPERATOR_NUMERIC" />
+		<field name="VOICE_REG_STATE" />
+	</class>
+	<class name="android/provider/Telephony$Sms" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Telephony$TextBasedSmsColumns" />
+		<method name="getDefaultSmsPackage(Landroid/content/Context;)Ljava/lang/String;" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$Sms$Conversations" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Telephony$TextBasedSmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+		<field name="MESSAGE_COUNT" />
+		<field name="SNIPPET" />
+	</class>
+	<class name="android/provider/Telephony$Sms$Draft" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Telephony$TextBasedSmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$Sms$Inbox" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Telephony$TextBasedSmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$Sms$Intents" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getMessagesFromIntent(Landroid/content/Intent;)[Landroid/telephony/SmsMessage;" />
+		<field name="ACTION_CHANGE_DEFAULT" />
+		<field name="ACTION_DEFAULT_SMS_PACKAGE_CHANGED" since="24" />
+		<field name="ACTION_EXTERNAL_PROVIDER_CHANGE" since="24" />
+		<field name="DATA_SMS_RECEIVED_ACTION" />
+		<field name="EXTRA_IS_DEFAULT_SMS_APP" since="24" />
+		<field name="EXTRA_PACKAGE_NAME" />
+		<field name="RESULT_SMS_DATABASE_ERROR" since="30" />
+		<field name="RESULT_SMS_DISPATCH_FAILURE" since="30" />
+		<field name="RESULT_SMS_DUPLICATED" />
+		<field name="RESULT_SMS_GENERIC_ERROR" />
+		<field name="RESULT_SMS_HANDLED" />
+		<field name="RESULT_SMS_INVALID_URI" since="30" />
+		<field name="RESULT_SMS_NULL_MESSAGE" since="30" />
+		<field name="RESULT_SMS_NULL_PDU" since="30" />
+		<field name="RESULT_SMS_OUT_OF_MEMORY" />
+		<field name="RESULT_SMS_RECEIVED_WHILE_ENCRYPTED" since="30" />
+		<field name="RESULT_SMS_UNSUPPORTED" />
+		<field name="SECRET_CODE_ACTION" since="28" deprecated="29" />
+		<field name="SIM_FULL_ACTION" />
+		<field name="SMS_CB_RECEIVED_ACTION" />
+		<field name="SMS_DELIVER_ACTION" />
+		<field name="SMS_EMERGENCY_CB_RECEIVED_ACTION" removed="24" />
+		<field name="SMS_RECEIVED_ACTION" />
+		<field name="SMS_REJECTED_ACTION" />
+		<field name="SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION" />
+		<field name="WAP_PUSH_DELIVER_ACTION" />
+		<field name="WAP_PUSH_RECEIVED_ACTION" />
+	</class>
+	<class name="android/provider/Telephony$Sms$Outbox" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Telephony$TextBasedSmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$Sms$Sent" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/Telephony$TextBasedSmsColumns" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+	</class>
+	<class name="android/provider/Telephony$TextBasedSmsColumns" since="19">
+		<extends name="java/lang/Object" />
+		<field name="ADDRESS" />
+		<field name="BODY" />
+		<field name="CREATOR" since="21" />
+		<field name="DATE" />
+		<field name="DATE_SENT" />
+		<field name="ERROR_CODE" />
+		<field name="LOCKED" />
+		<field name="MESSAGE_TYPE_ALL" />
+		<field name="MESSAGE_TYPE_DRAFT" />
+		<field name="MESSAGE_TYPE_FAILED" />
+		<field name="MESSAGE_TYPE_INBOX" />
+		<field name="MESSAGE_TYPE_OUTBOX" />
+		<field name="MESSAGE_TYPE_QUEUED" />
+		<field name="MESSAGE_TYPE_SENT" />
+		<field name="PERSON" />
+		<field name="PROTOCOL" />
+		<field name="READ" />
+		<field name="REPLY_PATH_PRESENT" />
+		<field name="SEEN" />
+		<field name="SERVICE_CENTER" />
+		<field name="STATUS" />
+		<field name="STATUS_COMPLETE" />
+		<field name="STATUS_FAILED" />
+		<field name="STATUS_NONE" />
+		<field name="STATUS_PENDING" />
+		<field name="SUBJECT" />
+		<field name="SUBSCRIPTION_ID" since="22" />
+		<field name="THREAD_ID" />
+		<field name="TYPE" />
+	</class>
+	<class name="android/provider/Telephony$Threads" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/Telephony$ThreadsColumns" />
+		<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/lang/String;)J" since="23" />
+		<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/util/Set;)J" since="23" />
+		<field name="BROADCAST_THREAD" />
+		<field name="COMMON_THREAD" />
+		<field name="CONTENT_URI" />
+		<field name="OBSOLETE_THREADS_URI" />
+	</class>
+	<class name="android/provider/Telephony$ThreadsColumns" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<field name="ARCHIVED" since="21" />
+		<field name="DATE" />
+		<field name="ERROR" />
+		<field name="HAS_ATTACHMENT" />
+		<field name="MESSAGE_COUNT" />
+		<field name="READ" />
+		<field name="RECIPIENT_IDS" />
+		<field name="SNIPPET" />
+		<field name="SNIPPET_CHARSET" />
+		<field name="TYPE" />
+	</class>
+	<class name="android/provider/UserDictionary" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="AUTHORITY" />
+		<field name="CONTENT_URI" />
+	</class>
+	<class name="android/provider/UserDictionary$Words" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addWord(Landroid/content/Context;Ljava/lang/String;II)V" deprecated="16" />
+		<method name="addWord(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;Ljava/util/Locale;)V" since="16" />
+		<field name="APP_ID" />
+		<field name="CONTENT_ITEM_TYPE" />
+		<field name="CONTENT_TYPE" />
+		<field name="CONTENT_URI" />
+		<field name="DEFAULT_SORT_ORDER" />
+		<field name="FREQUENCY" />
+		<field name="LOCALE" />
+		<field name="LOCALE_TYPE_ALL" deprecated="16" />
+		<field name="LOCALE_TYPE_CURRENT" deprecated="16" />
+		<field name="SHORTCUT" since="16" />
+		<field name="WORD" />
+		<field name="_ID" />
+	</class>
+	<class name="android/provider/VoicemailContract" since="14">
+		<extends name="java/lang/Object" />
+		<field name="ACTION_FETCH_VOICEMAIL" />
+		<field name="ACTION_NEW_VOICEMAIL" />
+		<field name="ACTION_SYNC_VOICEMAIL" since="24" />
+		<field name="AUTHORITY" />
+		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="25" />
+		<field name="EXTRA_SELF_CHANGE" />
+		<field name="PARAM_KEY_SOURCE_PACKAGE" />
+	</class>
+	<class name="android/provider/VoicemailContract$Status" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;" />
+		<field name="CONFIGURATION_STATE" />
+		<field name="CONFIGURATION_STATE_CAN_BE_CONFIGURED" />
+		<field name="CONFIGURATION_STATE_CONFIGURING" since="25" />
+		<field name="CONFIGURATION_STATE_DISABLED" since="25" />
+		<field name="CONFIGURATION_STATE_FAILED" since="25" />
+		<field name="CONFIGURATION_STATE_NOT_CONFIGURED" />
+		<field name="CONFIGURATION_STATE_OK" />
+		<field name="CONTENT_URI" />
+		<field name="DATA_CHANNEL_STATE" />
+		<field name="DATA_CHANNEL_STATE_BAD_CONFIGURATION" since="24" />
+		<field name="DATA_CHANNEL_STATE_COMMUNICATION_ERROR" since="24" />
+		<field name="DATA_CHANNEL_STATE_NO_CONNECTION" />
+		<field name="DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED" since="24" />
+		<field name="DATA_CHANNEL_STATE_OK" />
+		<field name="DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR" since="24" />
+		<field name="DATA_CHANNEL_STATE_SERVER_ERROR" since="24" />
+		<field name="DIR_TYPE" />
+		<field name="ITEM_TYPE" />
+		<field name="NOTIFICATION_CHANNEL_STATE" />
+		<field name="NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING" />
+		<field name="NOTIFICATION_CHANNEL_STATE_NO_CONNECTION" />
+		<field name="NOTIFICATION_CHANNEL_STATE_OK" />
+		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="23" />
+		<field name="PHONE_ACCOUNT_ID" since="23" />
+		<field name="QUOTA_OCCUPIED" since="24" />
+		<field name="QUOTA_TOTAL" since="24" />
+		<field name="QUOTA_UNAVAILABLE" since="24" />
+		<field name="SETTINGS_URI" />
+		<field name="SOURCE_PACKAGE" />
+		<field name="SOURCE_TYPE" since="25" />
+		<field name="VOICEMAIL_ACCESS_URI" />
+	</class>
+	<class name="android/provider/VoicemailContract$Voicemails" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/provider/BaseColumns" />
+		<implements name="android/provider/OpenableColumns" />
+		<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;" />
+		<field name="ARCHIVED" since="26" />
+		<field name="BACKED_UP" since="26" />
+		<field name="CONTENT_URI" />
+		<field name="DATE" />
+		<field name="DELETED" since="23" />
+		<field name="DIRTY" since="23" />
+		<field name="DIRTY_RETAIN" since="28" />
+		<field name="DIR_TYPE" />
+		<field name="DURATION" />
+		<field name="HAS_CONTENT" />
+		<field name="IS_OMTP_VOICEMAIL" since="26" />
+		<field name="IS_READ" />
+		<field name="ITEM_TYPE" />
+		<field name="LAST_MODIFIED" since="24" />
+		<field name="MIME_TYPE" />
+		<field name="NEW" since="28" />
+		<field name="NUMBER" />
+		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="23" />
+		<field name="PHONE_ACCOUNT_ID" since="23" />
+		<field name="RESTORED" since="26" />
+		<field name="SOURCE_DATA" />
+		<field name="SOURCE_PACKAGE" />
+		<field name="TRANSCRIPTION" since="21" />
+	</class>
+	<class name="android/renderscript/Allocation" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="copy1DRangeFrom(IILandroid/renderscript/Allocation;I)V" since="14" deprecated="31" />
+		<method name="copy1DRangeFrom(IILjava/lang/Object;)V" since="21" deprecated="31" />
+		<method name="copy1DRangeFrom(II[B)V" deprecated="31" />
+		<method name="copy1DRangeFrom(II[F)V" deprecated="31" />
+		<method name="copy1DRangeFrom(II[I)V" deprecated="31" />
+		<method name="copy1DRangeFrom(II[S)V" deprecated="31" />
+		<method name="copy1DRangeFromUnchecked(IILjava/lang/Object;)V" since="21" deprecated="31" />
+		<method name="copy1DRangeFromUnchecked(II[B)V" deprecated="31" />
+		<method name="copy1DRangeFromUnchecked(II[F)V" deprecated="31" />
+		<method name="copy1DRangeFromUnchecked(II[I)V" deprecated="31" />
+		<method name="copy1DRangeFromUnchecked(II[S)V" deprecated="31" />
+		<method name="copy1DRangeTo(IILjava/lang/Object;)V" since="23" deprecated="31" />
+		<method name="copy1DRangeTo(II[B)V" since="23" deprecated="31" />
+		<method name="copy1DRangeTo(II[F)V" since="23" deprecated="31" />
+		<method name="copy1DRangeTo(II[I)V" since="23" deprecated="31" />
+		<method name="copy1DRangeTo(II[S)V" since="23" deprecated="31" />
+		<method name="copy1DRangeToUnchecked(IILjava/lang/Object;)V" since="23" deprecated="31" />
+		<method name="copy1DRangeToUnchecked(II[B)V" since="23" deprecated="31" />
+		<method name="copy1DRangeToUnchecked(II[F)V" since="23" deprecated="31" />
+		<method name="copy1DRangeToUnchecked(II[I)V" since="23" deprecated="31" />
+		<method name="copy1DRangeToUnchecked(II[S)V" since="23" deprecated="31" />
+		<method name="copy2DRangeFrom(IIIILandroid/renderscript/Allocation;II)V" since="14" deprecated="31" />
+		<method name="copy2DRangeFrom(IIIILjava/lang/Object;)V" since="21" deprecated="31" />
+		<method name="copy2DRangeFrom(IIII[B)V" deprecated="31" />
+		<method name="copy2DRangeFrom(IIII[F)V" deprecated="31" />
+		<method name="copy2DRangeFrom(IIII[I)V" deprecated="31" />
+		<method name="copy2DRangeFrom(IIII[S)V" deprecated="31" />
+		<method name="copy2DRangeFrom(IILandroid/graphics/Bitmap;)V" deprecated="31" />
+		<method name="copy2DRangeTo(IIIILjava/lang/Object;)V" since="23" deprecated="31" />
+		<method name="copy2DRangeTo(IIII[B)V" since="23" deprecated="31" />
+		<method name="copy2DRangeTo(IIII[F)V" since="23" deprecated="31" />
+		<method name="copy2DRangeTo(IIII[I)V" since="23" deprecated="31" />
+		<method name="copy2DRangeTo(IIII[S)V" since="23" deprecated="31" />
+		<method name="copy3DRangeFrom(IIIIIILandroid/renderscript/Allocation;III)V" since="23" deprecated="31" />
+		<method name="copy3DRangeFrom(IIIIIILjava/lang/Object;)V" since="23" deprecated="31" />
+		<method name="copy3DRangeTo(IIIIIILjava/lang/Object;)V" since="23" deprecated="31" />
+		<method name="copyFrom(Landroid/graphics/Bitmap;)V" deprecated="31" />
+		<method name="copyFrom(Landroid/renderscript/Allocation;)V" since="18" deprecated="31" />
+		<method name="copyFrom(Ljava/lang/Object;)V" since="21" deprecated="31" />
+		<method name="copyFrom([B)V" deprecated="31" />
+		<method name="copyFrom([F)V" deprecated="31" />
+		<method name="copyFrom([I)V" deprecated="31" />
+		<method name="copyFrom([Landroid/renderscript/BaseObj;)V" deprecated="31" />
+		<method name="copyFrom([S)V" deprecated="31" />
+		<method name="copyFromUnchecked(Ljava/lang/Object;)V" since="21" deprecated="31" />
+		<method name="copyFromUnchecked([B)V" deprecated="31" />
+		<method name="copyFromUnchecked([F)V" deprecated="31" />
+		<method name="copyFromUnchecked([I)V" deprecated="31" />
+		<method name="copyFromUnchecked([S)V" deprecated="31" />
+		<method name="copyTo(Landroid/graphics/Bitmap;)V" deprecated="31" />
+		<method name="copyTo(Ljava/lang/Object;)V" since="21" deprecated="31" />
+		<method name="copyTo([B)V" deprecated="31" />
+		<method name="copyTo([F)V" deprecated="31" />
+		<method name="copyTo([I)V" deprecated="31" />
+		<method name="copyTo([S)V" deprecated="31" />
+		<method name="createAllocations(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;II)[Landroid/renderscript/Allocation;" since="24" deprecated="31" />
+		<method name="createCubemapFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createCubemapFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createCubemapFromCubeFaces(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createCubemapFromCubeFaces(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createFromBitmapResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createFromBitmapResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;ILandroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createFromString(Landroid/renderscript/RenderScript;Ljava/lang/String;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createSized(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createSized(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;II)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="generateMipmaps()V" deprecated="31" />
+		<method name="getByteBuffer()Ljava/nio/ByteBuffer;" since="24" deprecated="31" />
+		<method name="getBytesSize()I" since="16" deprecated="31" />
+		<method name="getElement()Landroid/renderscript/Element;" since="16" deprecated="31" />
+		<method name="getStride()J" since="24" deprecated="31" />
+		<method name="getSurface()Landroid/view/Surface;" since="16" deprecated="31" />
+		<method name="getTimeStamp()J" since="24" deprecated="31" />
+		<method name="getType()Landroid/renderscript/Type;" deprecated="31" />
+		<method name="getUsage()I" since="16" deprecated="31" />
+		<method name="ioReceive()V" since="16" deprecated="31" />
+		<method name="ioSend()V" since="16" deprecated="31" />
+		<method name="resize(I)V" deprecated="18" />
+		<method name="setAutoPadding(Z)V" since="23" deprecated="31" />
+		<method name="setFromFieldPacker(IIIILandroid/renderscript/FieldPacker;)V" since="23" deprecated="31" />
+		<method name="setFromFieldPacker(IILandroid/renderscript/FieldPacker;)V" deprecated="31" />
+		<method name="setFromFieldPacker(ILandroid/renderscript/FieldPacker;)V" deprecated="31" />
+		<method name="setOnBufferAvailableListener(Landroid/renderscript/Allocation$OnBufferAvailableListener;)V" since="19" deprecated="31" />
+		<method name="setSurface(Landroid/view/Surface;)V" since="16" deprecated="31" />
+		<method name="syncAll(I)V" deprecated="31" />
+		<field name="USAGE_GRAPHICS_CONSTANTS" deprecated="31" />
+		<field name="USAGE_GRAPHICS_RENDER_TARGET" since="14" deprecated="31" />
+		<field name="USAGE_GRAPHICS_TEXTURE" deprecated="31" />
+		<field name="USAGE_GRAPHICS_VERTEX" deprecated="31" />
+		<field name="USAGE_IO_INPUT" since="16" deprecated="31" />
+		<field name="USAGE_IO_OUTPUT" since="16" deprecated="31" />
+		<field name="USAGE_SCRIPT" deprecated="31" />
+		<field name="USAGE_SHARED" since="18" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Allocation$MipmapControl" since="11" deprecated="31">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Allocation$MipmapControl;" />
+		<method name="values()[Landroid/renderscript/Allocation$MipmapControl;" />
+		<field name="MIPMAP_FULL" deprecated="31" />
+		<field name="MIPMAP_NONE" deprecated="31" />
+		<field name="MIPMAP_ON_SYNC_TO_TEXTURE" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Allocation$OnBufferAvailableListener" since="19" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="onBufferAvailable(Landroid/renderscript/Allocation;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/AllocationAdapter" since="11" deprecated="31">
+		<extends name="android/renderscript/Allocation" />
+		<method name="create1D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;" since="14" deprecated="31" />
+		<method name="create2D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;" deprecated="31" />
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;Landroid/renderscript/Type;)Landroid/renderscript/AllocationAdapter;" since="23" deprecated="31" />
+		<method name="readData([F)V" removed="14" />
+		<method name="readData([I)V" removed="14" />
+		<method name="setFace(Landroid/renderscript/Type$CubemapFace;)V" deprecated="31" />
+		<method name="setLOD(I)V" deprecated="31" />
+		<method name="setX(I)V" since="23" deprecated="31" />
+		<method name="setY(I)V" deprecated="31" />
+		<method name="setZ(I)V" deprecated="31" />
+		<method name="subData(ILandroid/renderscript/FieldPacker;)V" removed="14" />
+		<method name="subData1D(II[B)V" removed="14" />
+		<method name="subData1D(II[F)V" removed="14" />
+		<method name="subData1D(II[I)V" removed="14" />
+		<method name="subData1D(II[S)V" removed="14" />
+		<method name="subData2D(IIII[F)V" removed="14" />
+		<method name="subData2D(IIII[I)V" removed="14" />
+		<method name="subElementData(IILandroid/renderscript/FieldPacker;)V" removed="14" />
+	</class>
+	<class name="android/renderscript/BaseObj" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="destroy()V" deprecated="31" />
+		<method name="getName()Ljava/lang/String;" since="14" deprecated="31" />
+		<method name="setName(Ljava/lang/String;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Byte2" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(BB)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Byte3" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(BBB)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Byte4" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(BBBB)V" since="14" deprecated="31" />
+		<field name="w" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Double2" since="14" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(DD)V" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Double3" since="14" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(DDD)V" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Double4" since="14" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(DDDD)V" deprecated="31" />
+		<field name="w" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Element" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="ALLOCATION(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="A_8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="BOOLEAN(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="ELEMENT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="F16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31" />
+		<method name="F16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31" />
+		<method name="F16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31" />
+		<method name="F16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31" />
+		<method name="F32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="F32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="F32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="F32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="F64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="F64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="F64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="F64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="FONT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="16" deprecated="31" />
+		<method name="I16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="I16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="I32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="I64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="I8_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I8_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="I8_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="MATRIX4X4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="16" />
+		<method name="MATRIX_2X2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="MATRIX_3X3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="MATRIX_4X4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="MESH(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="PROGRAM_FRAGMENT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="PROGRAM_RASTER(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="PROGRAM_STORE(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="PROGRAM_VERTEX(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="RGBA_4444(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="RGBA_5551(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="RGBA_8888(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="RGB_565(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="RGB_888(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="SAMPLER(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="SCRIPT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="TYPE(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="U16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="U16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="U32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="U64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="U8_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U8_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31" />
+		<method name="U8_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="YUV(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="19" deprecated="31" />
+		<method name="createPixel(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;Landroid/renderscript/Element$DataKind;)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="createVector(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;I)Landroid/renderscript/Element;" deprecated="31" />
+		<method name="getBytesSize()I" since="16" deprecated="31" />
+		<method name="getDataKind()Landroid/renderscript/Element$DataKind;" since="16" deprecated="31" />
+		<method name="getDataType()Landroid/renderscript/Element$DataType;" since="16" deprecated="31" />
+		<method name="getSubElement(I)Landroid/renderscript/Element;" since="16" deprecated="31" />
+		<method name="getSubElementArraySize(I)I" since="16" deprecated="31" />
+		<method name="getSubElementCount()I" since="16" deprecated="31" />
+		<method name="getSubElementName(I)Ljava/lang/String;" since="16" deprecated="31" />
+		<method name="getSubElementOffsetBytes(I)I" since="16" deprecated="31" />
+		<method name="getVectorSize()I" since="16" deprecated="31" />
+		<method name="isCompatible(Landroid/renderscript/Element;)Z" since="14" deprecated="31" />
+		<method name="isComplex()Z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Element$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="31" />
+		<method name="add(Landroid/renderscript/Element;Ljava/lang/String;)Landroid/renderscript/Element$Builder;" deprecated="31" />
+		<method name="add(Landroid/renderscript/Element;Ljava/lang/String;I)Landroid/renderscript/Element$Builder;" deprecated="31" />
+		<method name="create()Landroid/renderscript/Element;" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Element$DataKind" since="11" deprecated="31">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Element$DataKind;" />
+		<method name="values()[Landroid/renderscript/Element$DataKind;" />
+		<field name="PIXEL_A" deprecated="31" />
+		<field name="PIXEL_DEPTH" since="14" deprecated="31" />
+		<field name="PIXEL_L" deprecated="31" />
+		<field name="PIXEL_LA" deprecated="31" />
+		<field name="PIXEL_RGB" deprecated="31" />
+		<field name="PIXEL_RGBA" deprecated="31" />
+		<field name="PIXEL_YUV" since="18" deprecated="31" />
+		<field name="USER" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Element$DataType" since="11" deprecated="31">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Element$DataType;" />
+		<method name="values()[Landroid/renderscript/Element$DataType;" />
+		<field name="BOOLEAN" deprecated="31" />
+		<field name="FLOAT_16" since="23" deprecated="31" />
+		<field name="FLOAT_32" deprecated="31" />
+		<field name="FLOAT_64" deprecated="31" />
+		<field name="MATRIX_2X2" deprecated="31" />
+		<field name="MATRIX_3X3" deprecated="31" />
+		<field name="MATRIX_4X4" deprecated="31" />
+		<field name="NONE" since="16" deprecated="31" />
+		<field name="RS_ALLOCATION" deprecated="31" />
+		<field name="RS_ELEMENT" deprecated="31" />
+		<field name="RS_FONT" since="16" deprecated="31" />
+		<field name="RS_MESH" deprecated="31" />
+		<field name="RS_PROGRAM_FRAGMENT" deprecated="31" />
+		<field name="RS_PROGRAM_RASTER" deprecated="31" />
+		<field name="RS_PROGRAM_STORE" deprecated="31" />
+		<field name="RS_PROGRAM_VERTEX" deprecated="31" />
+		<field name="RS_SAMPLER" deprecated="31" />
+		<field name="RS_SCRIPT" deprecated="31" />
+		<field name="RS_TYPE" deprecated="31" />
+		<field name="SIGNED_16" deprecated="31" />
+		<field name="SIGNED_32" deprecated="31" />
+		<field name="SIGNED_64" deprecated="31" />
+		<field name="SIGNED_8" deprecated="31" />
+		<field name="UNSIGNED_16" deprecated="31" />
+		<field name="UNSIGNED_32" deprecated="31" />
+		<field name="UNSIGNED_4_4_4_4" deprecated="31" />
+		<field name="UNSIGNED_5_5_5_1" deprecated="31" />
+		<field name="UNSIGNED_5_6_5" deprecated="31" />
+		<field name="UNSIGNED_64" deprecated="31" />
+		<field name="UNSIGNED_8" deprecated="31" />
+	</class>
+	<class name="android/renderscript/FieldPacker" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" deprecated="31" />
+		<method name="&lt;init&gt;([B)V" since="18" deprecated="31" />
+		<method name="addBoolean(Z)V" deprecated="31" />
+		<method name="addF32(F)V" deprecated="31" />
+		<method name="addF32(Landroid/renderscript/Float2;)V" deprecated="31" />
+		<method name="addF32(Landroid/renderscript/Float3;)V" deprecated="31" />
+		<method name="addF32(Landroid/renderscript/Float4;)V" deprecated="31" />
+		<method name="addF64(D)V" deprecated="31" />
+		<method name="addF64(Landroid/renderscript/Double2;)V" since="14" deprecated="31" />
+		<method name="addF64(Landroid/renderscript/Double3;)V" since="14" deprecated="31" />
+		<method name="addF64(Landroid/renderscript/Double4;)V" since="14" deprecated="31" />
+		<method name="addI16(Landroid/renderscript/Short2;)V" deprecated="31" />
+		<method name="addI16(Landroid/renderscript/Short3;)V" deprecated="31" />
+		<method name="addI16(Landroid/renderscript/Short4;)V" deprecated="31" />
+		<method name="addI16(S)V" deprecated="31" />
+		<method name="addI32(I)V" deprecated="31" />
+		<method name="addI32(Landroid/renderscript/Int2;)V" deprecated="31" />
+		<method name="addI32(Landroid/renderscript/Int3;)V" deprecated="31" />
+		<method name="addI32(Landroid/renderscript/Int4;)V" deprecated="31" />
+		<method name="addI64(J)V" deprecated="31" />
+		<method name="addI64(Landroid/renderscript/Long2;)V" since="14" deprecated="31" />
+		<method name="addI64(Landroid/renderscript/Long3;)V" since="14" deprecated="31" />
+		<method name="addI64(Landroid/renderscript/Long4;)V" since="14" deprecated="31" />
+		<method name="addI8(B)V" deprecated="31" />
+		<method name="addI8(Landroid/renderscript/Byte2;)V" deprecated="31" />
+		<method name="addI8(Landroid/renderscript/Byte3;)V" deprecated="31" />
+		<method name="addI8(Landroid/renderscript/Byte4;)V" deprecated="31" />
+		<method name="addMatrix(Landroid/renderscript/Matrix2f;)V" deprecated="31" />
+		<method name="addMatrix(Landroid/renderscript/Matrix3f;)V" deprecated="31" />
+		<method name="addMatrix(Landroid/renderscript/Matrix4f;)V" deprecated="31" />
+		<method name="addObj(Landroid/renderscript/BaseObj;)V" deprecated="31" />
+		<method name="addU16(I)V" deprecated="31" />
+		<method name="addU16(Landroid/renderscript/Int2;)V" deprecated="31" />
+		<method name="addU16(Landroid/renderscript/Int3;)V" deprecated="31" />
+		<method name="addU16(Landroid/renderscript/Int4;)V" deprecated="31" />
+		<method name="addU32(J)V" deprecated="31" />
+		<method name="addU32(Landroid/renderscript/Long2;)V" deprecated="31" />
+		<method name="addU32(Landroid/renderscript/Long3;)V" deprecated="31" />
+		<method name="addU32(Landroid/renderscript/Long4;)V" deprecated="31" />
+		<method name="addU64(J)V" deprecated="31" />
+		<method name="addU64(Landroid/renderscript/Long2;)V" since="14" deprecated="31" />
+		<method name="addU64(Landroid/renderscript/Long3;)V" since="14" deprecated="31" />
+		<method name="addU64(Landroid/renderscript/Long4;)V" since="14" deprecated="31" />
+		<method name="addU8(Landroid/renderscript/Short2;)V" deprecated="31" />
+		<method name="addU8(Landroid/renderscript/Short3;)V" deprecated="31" />
+		<method name="addU8(Landroid/renderscript/Short4;)V" deprecated="31" />
+		<method name="addU8(S)V" deprecated="31" />
+		<method name="align(I)V" deprecated="31" />
+		<method name="getData()[B" deprecated="31" />
+		<method name="reset()V" deprecated="31" />
+		<method name="reset(I)V" deprecated="31" />
+		<method name="skip(I)V" deprecated="31" />
+		<method name="subBoolean()Z" since="18" deprecated="31" />
+		<method name="subByte2()Landroid/renderscript/Byte2;" since="18" deprecated="31" />
+		<method name="subByte3()Landroid/renderscript/Byte3;" since="18" deprecated="31" />
+		<method name="subByte4()Landroid/renderscript/Byte4;" since="18" deprecated="31" />
+		<method name="subDouble2()Landroid/renderscript/Double2;" since="18" deprecated="31" />
+		<method name="subDouble3()Landroid/renderscript/Double3;" since="18" deprecated="31" />
+		<method name="subDouble4()Landroid/renderscript/Double4;" since="18" deprecated="31" />
+		<method name="subF32()F" since="18" deprecated="31" />
+		<method name="subF64()D" since="18" deprecated="31" />
+		<method name="subFloat2()Landroid/renderscript/Float2;" since="18" deprecated="31" />
+		<method name="subFloat3()Landroid/renderscript/Float3;" since="18" deprecated="31" />
+		<method name="subFloat4()Landroid/renderscript/Float4;" since="18" deprecated="31" />
+		<method name="subI16()S" since="18" deprecated="31" />
+		<method name="subI32()I" since="18" deprecated="31" />
+		<method name="subI64()J" since="18" deprecated="31" />
+		<method name="subI8()B" since="18" deprecated="31" />
+		<method name="subInt2()Landroid/renderscript/Int2;" since="18" deprecated="31" />
+		<method name="subInt3()Landroid/renderscript/Int3;" since="18" deprecated="31" />
+		<method name="subInt4()Landroid/renderscript/Int4;" since="18" deprecated="31" />
+		<method name="subLong2()Landroid/renderscript/Long2;" since="18" deprecated="31" />
+		<method name="subLong3()Landroid/renderscript/Long3;" since="18" deprecated="31" />
+		<method name="subLong4()Landroid/renderscript/Long4;" since="18" deprecated="31" />
+		<method name="subMatrix2f()Landroid/renderscript/Matrix2f;" since="18" deprecated="31" />
+		<method name="subMatrix3f()Landroid/renderscript/Matrix3f;" since="18" deprecated="31" />
+		<method name="subMatrix4f()Landroid/renderscript/Matrix4f;" since="18" deprecated="31" />
+		<method name="subShort2()Landroid/renderscript/Short2;" since="18" deprecated="31" />
+		<method name="subShort3()Landroid/renderscript/Short3;" since="18" deprecated="31" />
+		<method name="subShort4()Landroid/renderscript/Short4;" since="18" deprecated="31" />
+		<method name="subalign(I)V" since="18" deprecated="31" />
+	</class>
+	<class name="android/renderscript/FileA3D" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16" />
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/io/File;)Landroid/renderscript/FileA3D;" deprecated="16" />
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16" />
+		<method name="createFromResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)Landroid/renderscript/FileA3D;" deprecated="16" />
+		<method name="getIndexEntry(I)Landroid/renderscript/FileA3D$IndexEntry;" deprecated="16" />
+		<method name="getIndexEntryCount()I" deprecated="16" />
+	</class>
+	<class name="android/renderscript/FileA3D$EntryType" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/FileA3D$EntryType;" />
+		<method name="values()[Landroid/renderscript/FileA3D$EntryType;" />
+		<field name="MESH" />
+		<field name="UNKNOWN" />
+	</class>
+	<class name="android/renderscript/FileA3D$IndexEntry" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="getEntryType()Landroid/renderscript/FileA3D$EntryType;" deprecated="16" />
+		<method name="getMesh()Landroid/renderscript/Mesh;" deprecated="16" />
+		<method name="getName()Ljava/lang/String;" deprecated="16" />
+		<method name="getObject()Landroid/renderscript/BaseObj;" deprecated="16" />
+	</class>
+	<class name="android/renderscript/Float2" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(FF)V" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Float3" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(FFF)V" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Float4" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(FFFF)V" deprecated="31" />
+		<field name="w" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Font" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;Landroid/renderscript/Font$Style;F)Landroid/renderscript/Font;" deprecated="16" />
+		<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;F)Landroid/renderscript/Font;" deprecated="16" />
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/io/File;F)Landroid/renderscript/Font;" deprecated="16" />
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;F)Landroid/renderscript/Font;" deprecated="16" />
+		<method name="createFromResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;IF)Landroid/renderscript/Font;" deprecated="16" />
+	</class>
+	<class name="android/renderscript/Font$Style" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Font$Style;" />
+		<method name="values()[Landroid/renderscript/Font$Style;" />
+		<field name="BOLD" />
+		<field name="BOLD_ITALIC" />
+		<field name="ITALIC" />
+		<field name="NORMAL" />
+	</class>
+	<class name="android/renderscript/Int2" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(II)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Int3" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(III)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Int4" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(IIII)V" since="14" deprecated="31" />
+		<field name="w" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Long2" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(JJ)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Long3" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(JJJ)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Long4" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(JJJJ)V" since="14" deprecated="31" />
+		<field name="w" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Matrix2f" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;([F)V" deprecated="31" />
+		<method name="get(II)F" deprecated="31" />
+		<method name="getArray()[F" deprecated="31" />
+		<method name="load(Landroid/renderscript/Matrix2f;)V" deprecated="31" />
+		<method name="loadIdentity()V" deprecated="31" />
+		<method name="loadMultiply(Landroid/renderscript/Matrix2f;Landroid/renderscript/Matrix2f;)V" deprecated="31" />
+		<method name="loadRotate(F)V" deprecated="31" />
+		<method name="loadScale(FF)V" deprecated="31" />
+		<method name="multiply(Landroid/renderscript/Matrix2f;)V" deprecated="31" />
+		<method name="rotate(F)V" deprecated="31" />
+		<method name="scale(FF)V" deprecated="31" />
+		<method name="set(IIF)V" deprecated="31" />
+		<method name="transpose()V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Matrix3f" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;([F)V" deprecated="31" />
+		<method name="get(II)F" deprecated="31" />
+		<method name="getArray()[F" deprecated="31" />
+		<method name="load(Landroid/renderscript/Matrix3f;)V" deprecated="31" />
+		<method name="loadIdentity()V" deprecated="31" />
+		<method name="loadMultiply(Landroid/renderscript/Matrix3f;Landroid/renderscript/Matrix3f;)V" deprecated="31" />
+		<method name="loadRotate(F)V" deprecated="31" />
+		<method name="loadRotate(FFFF)V" deprecated="31" />
+		<method name="loadScale(FF)V" deprecated="31" />
+		<method name="loadScale(FFF)V" deprecated="31" />
+		<method name="loadTranslate(FF)V" deprecated="31" />
+		<method name="multiply(Landroid/renderscript/Matrix3f;)V" deprecated="31" />
+		<method name="rotate(F)V" deprecated="31" />
+		<method name="rotate(FFFF)V" deprecated="31" />
+		<method name="scale(FF)V" deprecated="31" />
+		<method name="scale(FFF)V" deprecated="31" />
+		<method name="set(IIF)V" deprecated="31" />
+		<method name="translate(FF)V" deprecated="31" />
+		<method name="transpose()V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Matrix4f" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;([F)V" deprecated="31" />
+		<method name="get(II)F" deprecated="31" />
+		<method name="getArray()[F" deprecated="31" />
+		<method name="inverse()Z" deprecated="31" />
+		<method name="inverseTranspose()Z" deprecated="31" />
+		<method name="load(Landroid/renderscript/Matrix4f;)V" deprecated="31" />
+		<method name="loadFrustum(FFFFFF)V" deprecated="31" />
+		<method name="loadIdentity()V" deprecated="31" />
+		<method name="loadMultiply(Landroid/renderscript/Matrix4f;Landroid/renderscript/Matrix4f;)V" deprecated="31" />
+		<method name="loadOrtho(FFFFFF)V" deprecated="31" />
+		<method name="loadOrthoWindow(II)V" deprecated="31" />
+		<method name="loadPerspective(FFFF)V" deprecated="31" />
+		<method name="loadProjectionNormalized(II)V" deprecated="31" />
+		<method name="loadRotate(FFFF)V" deprecated="31" />
+		<method name="loadScale(FFF)V" deprecated="31" />
+		<method name="loadTranslate(FFF)V" deprecated="31" />
+		<method name="multiply(Landroid/renderscript/Matrix4f;)V" deprecated="31" />
+		<method name="rotate(FFFF)V" deprecated="31" />
+		<method name="scale(FFF)V" deprecated="31" />
+		<method name="set(IIF)V" deprecated="31" />
+		<method name="translate(FFF)V" deprecated="31" />
+		<method name="transpose()V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Mesh" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="getIndexSetAllocation(I)Landroid/renderscript/Allocation;" deprecated="16" />
+		<method name="getPrimitive(I)Landroid/renderscript/Mesh$Primitive;" deprecated="16" />
+		<method name="getPrimitiveCount()I" deprecated="16" />
+		<method name="getVertexAllocation(I)Landroid/renderscript/Allocation;" deprecated="16" />
+		<method name="getVertexAllocationCount()I" deprecated="16" />
+	</class>
+	<class name="android/renderscript/Mesh$AllocationBuilder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="16" />
+		<method name="addIndexSetAllocation(Landroid/renderscript/Allocation;Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16" />
+		<method name="addIndexSetType(Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16" />
+		<method name="addVertexAllocation(Landroid/renderscript/Allocation;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16" />
+		<method name="create()Landroid/renderscript/Mesh;" deprecated="16" />
+		<method name="getCurrentIndexSetIndex()I" deprecated="16" />
+		<method name="getCurrentVertexTypeIndex()I" deprecated="16" />
+	</class>
+	<class name="android/renderscript/Mesh$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;I)V" deprecated="16" />
+		<method name="addIndexSetType(Landroid/renderscript/Element;ILandroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16" />
+		<method name="addIndexSetType(Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16" />
+		<method name="addIndexSetType(Landroid/renderscript/Type;Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16" />
+		<method name="addVertexType(Landroid/renderscript/Element;I)Landroid/renderscript/Mesh$Builder;" deprecated="16" />
+		<method name="addVertexType(Landroid/renderscript/Type;)Landroid/renderscript/Mesh$Builder;" deprecated="16" />
+		<method name="create()Landroid/renderscript/Mesh;" deprecated="16" />
+		<method name="getCurrentIndexSetIndex()I" deprecated="16" />
+		<method name="getCurrentVertexTypeIndex()I" deprecated="16" />
+	</class>
+	<class name="android/renderscript/Mesh$Primitive" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Mesh$Primitive;" />
+		<method name="values()[Landroid/renderscript/Mesh$Primitive;" />
+		<field name="LINE" />
+		<field name="LINE_STRIP" />
+		<field name="POINT" />
+		<field name="TRIANGLE" />
+		<field name="TRIANGLE_FAN" />
+		<field name="TRIANGLE_STRIP" />
+	</class>
+	<class name="android/renderscript/Mesh$TriangleMeshBuilder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;II)V" deprecated="16" />
+		<method name="addTriangle(III)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16" />
+		<method name="addVertex(FF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16" />
+		<method name="addVertex(FFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16" />
+		<method name="create(Z)Landroid/renderscript/Mesh;" deprecated="16" />
+		<method name="setColor(FFFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16" />
+		<method name="setNormal(FFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16" />
+		<method name="setTexture(FF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16" />
+		<field name="COLOR" deprecated="16" />
+		<field name="NORMAL" deprecated="16" />
+		<field name="TEXTURE_0" deprecated="16" />
+	</class>
+	<class name="android/renderscript/Program" since="11" removed="18">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="bindConstants(Landroid/renderscript/Allocation;I)V" />
+		<method name="bindSampler(Landroid/renderscript/Sampler;I)V" />
+		<method name="bindTexture(Landroid/renderscript/Allocation;I)V" />
+		<method name="getConstant(I)Landroid/renderscript/Type;" since="16" />
+		<method name="getConstantCount()I" since="16" />
+		<method name="getTextureCount()I" since="16" />
+		<method name="getTextureName(I)Ljava/lang/String;" since="16" />
+		<method name="getTextureType(I)Landroid/renderscript/Program$TextureType;" since="16" />
+	</class>
+	<class name="android/renderscript/Program$BaseProgramBuilder" since="11" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" />
+		<method name="addConstant(Landroid/renderscript/Type;)Landroid/renderscript/Program$BaseProgramBuilder;" />
+		<method name="addTexture(Landroid/renderscript/Program$TextureType;)Landroid/renderscript/Program$BaseProgramBuilder;" />
+		<method name="addTexture(Landroid/renderscript/Program$TextureType;Ljava/lang/String;)Landroid/renderscript/Program$BaseProgramBuilder;" since="16" />
+		<method name="getCurrentConstantIndex()I" />
+		<method name="getCurrentTextureIndex()I" />
+		<method name="initProgram(Landroid/renderscript/Program;)V" />
+		<method name="setShader(Landroid/content/res/Resources;I)Landroid/renderscript/Program$BaseProgramBuilder;" />
+		<method name="setShader(Ljava/lang/String;)Landroid/renderscript/Program$BaseProgramBuilder;" />
+	</class>
+	<class name="android/renderscript/Program$TextureType" since="11" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Program$TextureType;" />
+		<method name="values()[Landroid/renderscript/Program$TextureType;" />
+		<field name="TEXTURE_2D" />
+		<field name="TEXTURE_CUBE" />
+	</class>
+	<class name="android/renderscript/ProgramFragment" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program" />
+	</class>
+	<class name="android/renderscript/ProgramFragment$Builder" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program$BaseProgramBuilder" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="16" />
+		<method name="create()Landroid/renderscript/ProgramFragment;" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/ProgramFragment" />
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="16" />
+		<method name="create()Landroid/renderscript/ProgramFragmentFixedFunction;" deprecated="16" />
+		<method name="setPointSpriteTexCoordinateReplacement(Z)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16" />
+		<method name="setTexture(Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;I)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16" />
+		<method name="setVaryingColor(Z)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16" />
+		<field name="MAX_TEXTURE" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;" />
+		<method name="values()[Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;" />
+		<field name="DECAL" />
+		<field name="MODULATE" />
+		<field name="REPLACE" />
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder$Format" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;" />
+		<method name="values()[Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;" />
+		<field name="ALPHA" />
+		<field name="LUMINANCE_ALPHA" />
+		<field name="RGB" />
+		<field name="RGBA" />
+	</class>
+	<class name="android/renderscript/ProgramRaster" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="CULL_BACK(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16" />
+		<method name="CULL_FRONT(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16" />
+		<method name="CULL_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16" />
+		<method name="getCullMode()Landroid/renderscript/ProgramRaster$CullMode;" since="16" deprecated="16" />
+		<method name="isPointSpriteEnabled()Z" since="16" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramRaster$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="16" />
+		<method name="create()Landroid/renderscript/ProgramRaster;" deprecated="16" />
+		<method name="setCullMode(Landroid/renderscript/ProgramRaster$CullMode;)Landroid/renderscript/ProgramRaster$Builder;" deprecated="16" />
+		<method name="setPointSpriteEnabled(Z)Landroid/renderscript/ProgramRaster$Builder;" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramRaster$CullMode" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramRaster$CullMode;" />
+		<method name="values()[Landroid/renderscript/ProgramRaster$CullMode;" />
+		<field name="BACK" />
+		<field name="FRONT" />
+		<field name="NONE" />
+	</class>
+	<class name="android/renderscript/ProgramStore" since="11" removed="18">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="BLEND_ALPHA_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;" />
+		<method name="BLEND_ALPHA_DEPTH_TEST(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;" />
+		<method name="BLEND_NONE_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;" />
+		<method name="BLEND_NONE_DEPTH_TEST(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;" />
+		<method name="getBlendDstFunc()Landroid/renderscript/ProgramStore$BlendDstFunc;" since="16" />
+		<method name="getBlendSrcFunc()Landroid/renderscript/ProgramStore$BlendSrcFunc;" since="16" />
+		<method name="getDepthFunc()Landroid/renderscript/ProgramStore$DepthFunc;" since="16" />
+		<method name="isColorMaskAlphaEnabled()Z" since="16" />
+		<method name="isColorMaskBlueEnabled()Z" since="16" />
+		<method name="isColorMaskGreenEnabled()Z" since="16" />
+		<method name="isColorMaskRedEnabled()Z" since="16" />
+		<method name="isDepthMaskEnabled()Z" since="16" />
+		<method name="isDitherEnabled()Z" since="16" />
+	</class>
+	<class name="android/renderscript/ProgramStore$BlendDstFunc" since="11" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$BlendDstFunc;" />
+		<method name="values()[Landroid/renderscript/ProgramStore$BlendDstFunc;" />
+		<field name="DST_ALPHA" />
+		<field name="ONE" />
+		<field name="ONE_MINUS_DST_ALPHA" />
+		<field name="ONE_MINUS_SRC_ALPHA" />
+		<field name="ONE_MINUS_SRC_COLOR" />
+		<field name="SRC_ALPHA" />
+		<field name="SRC_COLOR" />
+		<field name="ZERO" />
+	</class>
+	<class name="android/renderscript/ProgramStore$BlendSrcFunc" since="11" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$BlendSrcFunc;" />
+		<method name="values()[Landroid/renderscript/ProgramStore$BlendSrcFunc;" />
+		<field name="DST_ALPHA" />
+		<field name="DST_COLOR" />
+		<field name="ONE" />
+		<field name="ONE_MINUS_DST_ALPHA" />
+		<field name="ONE_MINUS_DST_COLOR" />
+		<field name="ONE_MINUS_SRC_ALPHA" />
+		<field name="SRC_ALPHA" />
+		<field name="SRC_ALPHA_SATURATE" />
+		<field name="ZERO" />
+	</class>
+	<class name="android/renderscript/ProgramStore$Builder" since="11" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" />
+		<method name="create()Landroid/renderscript/ProgramStore;" />
+		<method name="setBlendFunc(Landroid/renderscript/ProgramStore$BlendSrcFunc;Landroid/renderscript/ProgramStore$BlendDstFunc;)Landroid/renderscript/ProgramStore$Builder;" />
+		<method name="setColorMaskEnabled(ZZZZ)Landroid/renderscript/ProgramStore$Builder;" />
+		<method name="setDepthFunc(Landroid/renderscript/ProgramStore$DepthFunc;)Landroid/renderscript/ProgramStore$Builder;" />
+		<method name="setDepthMaskEnabled(Z)Landroid/renderscript/ProgramStore$Builder;" />
+		<method name="setDitherEnabled(Z)Landroid/renderscript/ProgramStore$Builder;" />
+	</class>
+	<class name="android/renderscript/ProgramStore$DepthFunc" since="11" removed="18">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$DepthFunc;" />
+		<method name="values()[Landroid/renderscript/ProgramStore$DepthFunc;" />
+		<field name="ALWAYS" />
+		<field name="EQUAL" />
+		<field name="GREATER" />
+		<field name="GREATER_OR_EQUAL" />
+		<field name="LESS" />
+		<field name="LESS_OR_EQUAL" />
+		<field name="NOT_EQUAL" />
+	</class>
+	<class name="android/renderscript/ProgramVertex" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program" />
+		<method name="getInput(I)Landroid/renderscript/Element;" since="16" deprecated="16" />
+		<method name="getInputCount()I" since="16" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramVertex$Builder" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program$BaseProgramBuilder" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="16" />
+		<method name="addInput(Landroid/renderscript/Element;)Landroid/renderscript/ProgramVertex$Builder;" deprecated="16" />
+		<method name="create()Landroid/renderscript/ProgramVertex;" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramVertexFixedFunction" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/ProgramVertex" />
+		<method name="bindConstants(Landroid/renderscript/ProgramVertexFixedFunction$Constants;)V" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramVertexFixedFunction$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="16" />
+		<method name="create()Landroid/renderscript/ProgramVertexFixedFunction;" deprecated="16" />
+		<method name="setTextureMatrixEnable(Z)Landroid/renderscript/ProgramVertexFixedFunction$Builder;" deprecated="16" />
+	</class>
+	<class name="android/renderscript/ProgramVertexFixedFunction$Constants" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="16" />
+		<method name="destroy()V" deprecated="16" />
+		<method name="setModelview(Landroid/renderscript/Matrix4f;)V" deprecated="16" />
+		<method name="setProjection(Landroid/renderscript/Matrix4f;)V" deprecated="16" />
+		<method name="setTexture(Landroid/renderscript/Matrix4f;)V" deprecated="16" />
+	</class>
+	<class name="android/renderscript/RSDriverException" since="11" deprecated="31">
+		<extends name="android/renderscript/RSRuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RSIllegalArgumentException" since="11" deprecated="31">
+		<extends name="android/renderscript/RSRuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RSInvalidStateException" since="11" deprecated="31">
+		<extends name="android/renderscript/RSRuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RSRuntimeException" since="11" deprecated="31">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RSSurfaceView" since="11" deprecated="16" removed="18">
+		<extends name="android/view/SurfaceView" />
+		<implements name="android/view/SurfaceHolder$Callback" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="16" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="16" />
+		<method name="createRenderScriptGL(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)Landroid/renderscript/RenderScriptGL;" deprecated="16" />
+		<method name="destroyRenderScriptGL()V" deprecated="16" />
+		<method name="getRenderScriptGL()Landroid/renderscript/RenderScriptGL;" deprecated="16" />
+		<method name="pause()V" deprecated="16" />
+		<method name="resume()V" deprecated="16" />
+		<method name="setRenderScriptGL(Landroid/renderscript/RenderScriptGL;)V" deprecated="16" />
+	</class>
+	<class name="android/renderscript/RSTextureView" since="14" deprecated="16" removed="18">
+		<extends name="android/view/TextureView" />
+		<implements name="android/view/TextureView$SurfaceTextureListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="16" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="16" />
+		<method name="createRenderScriptGL(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)Landroid/renderscript/RenderScriptGL;" deprecated="16" />
+		<method name="destroyRenderScriptGL()V" deprecated="16" />
+		<method name="getRenderScriptGL()Landroid/renderscript/RenderScriptGL;" deprecated="16" />
+		<method name="pause()V" deprecated="16" />
+		<method name="resume()V" deprecated="16" />
+		<method name="setRenderScriptGL(Landroid/renderscript/RenderScriptGL;)V" deprecated="16" />
+	</class>
+	<class name="android/renderscript/RenderScript" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="contextDump()V" deprecated="31" />
+		<method name="create(Landroid/content/Context;)Landroid/renderscript/RenderScript;" deprecated="31" />
+		<method name="create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;)Landroid/renderscript/RenderScript;" since="18" deprecated="31" />
+		<method name="create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript;" since="21" deprecated="31" />
+		<method name="createMultiContext(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;II)Landroid/renderscript/RenderScript;" since="23" deprecated="31" />
+		<method name="destroy()V" deprecated="31" />
+		<method name="finish()V" deprecated="31" />
+		<method name="getApplicationContext()Landroid/content/Context;" deprecated="31" />
+		<method name="getErrorHandler()Landroid/renderscript/RenderScript$RSErrorHandler;" deprecated="31" />
+		<method name="getMessageHandler()Landroid/renderscript/RenderScript$RSMessageHandler;" deprecated="31" />
+		<method name="getMinorVersion()J" since="23" deprecated="31" />
+		<method name="releaseAllContexts()V" since="23" deprecated="31" />
+		<method name="sendMessage(I[I)V" since="18" deprecated="31" />
+		<method name="setErrorHandler(Landroid/renderscript/RenderScript$RSErrorHandler;)V" deprecated="31" />
+		<method name="setMessageHandler(Landroid/renderscript/RenderScript$RSMessageHandler;)V" deprecated="31" />
+		<method name="setPriority(Landroid/renderscript/RenderScript$Priority;)V" deprecated="31" />
+		<field name="CREATE_FLAG_LOW_LATENCY" since="21" deprecated="31" />
+		<field name="CREATE_FLAG_LOW_POWER" since="21" deprecated="31" />
+		<field name="CREATE_FLAG_NONE" since="21" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RenderScript$ContextType" since="18" deprecated="31">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/RenderScript$ContextType;" />
+		<method name="values()[Landroid/renderscript/RenderScript$ContextType;" />
+		<field name="DEBUG" deprecated="31" />
+		<field name="NORMAL" deprecated="31" />
+		<field name="PROFILE" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RenderScript$Priority" since="11" deprecated="31">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/RenderScript$Priority;" />
+		<method name="values()[Landroid/renderscript/RenderScript$Priority;" />
+		<field name="LOW" deprecated="31" />
+		<field name="NORMAL" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RenderScript$RSErrorHandler" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<field name="mErrorMessage" deprecated="31" />
+		<field name="mErrorNum" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RenderScript$RSMessageHandler" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<field name="mData" deprecated="31" />
+		<field name="mID" deprecated="31" />
+		<field name="mLength" deprecated="31" />
+	</class>
+	<class name="android/renderscript/RenderScriptGL" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/RenderScript" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/renderscript/RenderScriptGL$SurfaceConfig;)V" deprecated="16" />
+		<method name="bindProgramFragment(Landroid/renderscript/ProgramFragment;)V" deprecated="16" />
+		<method name="bindProgramRaster(Landroid/renderscript/ProgramRaster;)V" deprecated="16" />
+		<method name="bindProgramStore(Landroid/renderscript/ProgramStore;)V" deprecated="16" />
+		<method name="bindProgramVertex(Landroid/renderscript/ProgramVertex;)V" deprecated="16" />
+		<method name="bindRootScript(Landroid/renderscript/Script;)V" deprecated="16" />
+		<method name="getHeight()I" deprecated="16" />
+		<method name="getWidth()I" deprecated="16" />
+		<method name="pause()V" deprecated="16" />
+		<method name="resume()V" deprecated="16" />
+		<method name="setSurface(Landroid/view/SurfaceHolder;II)V" deprecated="16" />
+		<method name="setSurfaceTexture(Landroid/graphics/SurfaceTexture;II)V" since="14" deprecated="16" />
+	</class>
+	<class name="android/renderscript/RenderScriptGL$SurfaceConfig" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="16" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)V" deprecated="16" />
+		<method name="setAlpha(II)V" deprecated="16" />
+		<method name="setColor(II)V" deprecated="16" />
+		<method name="setDepth(II)V" deprecated="16" />
+		<method name="setSamples(IIF)V" deprecated="16" />
+	</class>
+	<class name="android/renderscript/Sampler" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="CLAMP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31" />
+		<method name="CLAMP_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31" />
+		<method name="CLAMP_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31" />
+		<method name="MIRRORED_REPEAT_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18" deprecated="31" />
+		<method name="MIRRORED_REPEAT_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18" deprecated="31" />
+		<method name="MIRRORED_REPEAT_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18" deprecated="31" />
+		<method name="WRAP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31" />
+		<method name="WRAP_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31" />
+		<method name="WRAP_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31" />
+		<method name="getAnisotropy()F" since="16" deprecated="31" />
+		<method name="getMagnification()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31" />
+		<method name="getMinification()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31" />
+		<method name="getWrapS()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31" />
+		<method name="getWrapT()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Sampler$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="31" />
+		<method name="create()Landroid/renderscript/Sampler;" deprecated="31" />
+		<method name="setAnisotropy(F)V" deprecated="31" />
+		<method name="setMagnification(Landroid/renderscript/Sampler$Value;)V" deprecated="31" />
+		<method name="setMinification(Landroid/renderscript/Sampler$Value;)V" deprecated="31" />
+		<method name="setWrapS(Landroid/renderscript/Sampler$Value;)V" deprecated="31" />
+		<method name="setWrapT(Landroid/renderscript/Sampler$Value;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Sampler$Value" since="11" deprecated="31">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Sampler$Value;" />
+		<method name="values()[Landroid/renderscript/Sampler$Value;" />
+		<field name="CLAMP" deprecated="31" />
+		<field name="LINEAR" deprecated="31" />
+		<field name="LINEAR_MIP_LINEAR" deprecated="31" />
+		<field name="LINEAR_MIP_NEAREST" deprecated="31" />
+		<field name="MIRRORED_REPEAT" since="18" deprecated="31" />
+		<field name="NEAREST" deprecated="31" />
+		<field name="WRAP" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Script" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="bindAllocation(Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="createFieldID(ILandroid/renderscript/Element;)Landroid/renderscript/Script$FieldID;" since="17" deprecated="31" />
+		<method name="createInvokeID(I)Landroid/renderscript/Script$InvokeID;" since="23" deprecated="31" />
+		<method name="createKernelID(IILandroid/renderscript/Element;Landroid/renderscript/Element;)Landroid/renderscript/Script$KernelID;" since="17" deprecated="31" />
+		<method name="forEach(ILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;)V" since="14" deprecated="31" />
+		<method name="forEach(ILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;Landroid/renderscript/Script$LaunchOptions;)V" since="18" deprecated="31" />
+		<method name="forEach(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;)V" since="23" deprecated="31" />
+		<method name="forEach(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;Landroid/renderscript/Script$LaunchOptions;)V" since="23" deprecated="31" />
+		<method name="getVarB(I)Z" since="18" deprecated="31" />
+		<method name="getVarD(I)D" since="18" deprecated="31" />
+		<method name="getVarF(I)F" since="18" deprecated="31" />
+		<method name="getVarI(I)I" since="18" deprecated="31" />
+		<method name="getVarJ(I)J" since="18" deprecated="31" />
+		<method name="getVarV(ILandroid/renderscript/FieldPacker;)V" since="18" deprecated="31" />
+		<method name="invoke(I)V" deprecated="31" />
+		<method name="invoke(ILandroid/renderscript/FieldPacker;)V" deprecated="31" />
+		<method name="reduce(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="24" deprecated="31" />
+		<method name="setTimeZone(Ljava/lang/String;)V" deprecated="31" />
+		<method name="setVar(ID)V" deprecated="31" />
+		<method name="setVar(IF)V" deprecated="31" />
+		<method name="setVar(II)V" deprecated="31" />
+		<method name="setVar(IJ)V" deprecated="31" />
+		<method name="setVar(ILandroid/renderscript/BaseObj;)V" deprecated="31" />
+		<method name="setVar(ILandroid/renderscript/FieldPacker;)V" deprecated="31" />
+		<method name="setVar(ILandroid/renderscript/FieldPacker;Landroid/renderscript/Element;[I)V" since="16" deprecated="31" />
+		<method name="setVar(IZ)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Script$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/renderscript/Script$FieldBase" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="getAllocation()Landroid/renderscript/Allocation;" deprecated="31" />
+		<method name="getElement()Landroid/renderscript/Element;" deprecated="31" />
+		<method name="getType()Landroid/renderscript/Type;" deprecated="31" />
+		<method name="init(Landroid/renderscript/RenderScript;I)V" deprecated="31" />
+		<method name="init(Landroid/renderscript/RenderScript;II)V" deprecated="31" />
+		<method name="updateAllocation()V" deprecated="31" />
+		<field name="mAllocation" deprecated="31" />
+		<field name="mElement" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Script$FieldID" since="17" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+	</class>
+	<class name="android/renderscript/Script$InvokeID" since="23" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+	</class>
+	<class name="android/renderscript/Script$KernelID" since="17" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+	</class>
+	<class name="android/renderscript/Script$LaunchOptions" since="18" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="getXEnd()I" deprecated="31" />
+		<method name="getXStart()I" deprecated="31" />
+		<method name="getYEnd()I" deprecated="31" />
+		<method name="getYStart()I" deprecated="31" />
+		<method name="getZEnd()I" deprecated="31" />
+		<method name="getZStart()I" deprecated="31" />
+		<method name="setX(II)Landroid/renderscript/Script$LaunchOptions;" deprecated="31" />
+		<method name="setY(II)Landroid/renderscript/Script$LaunchOptions;" deprecated="31" />
+		<method name="setZ(II)Landroid/renderscript/Script$LaunchOptions;" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptC" since="11" deprecated="31">
+		<extends name="android/renderscript/Script" />
+		<method name="&lt;init&gt;(ILandroid/renderscript/RenderScript;)V" deprecated="31" />
+		<method name="&lt;init&gt;(JLandroid/renderscript/RenderScript;)V" since="21" deprecated="31" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)V" deprecated="31" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;Ljava/lang/String;[B[B)V" since="21" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptGroup" since="17" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="execute()V" deprecated="23" />
+		<method name="execute([Ljava/lang/Object;)[Ljava/lang/Object;" since="23" deprecated="31" />
+		<method name="setInput(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Allocation;)V" deprecated="23" />
+		<method name="setOutput(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Allocation;)V" deprecated="23" />
+	</class>
+	<class name="android/renderscript/ScriptGroup$Binding" since="23" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/Script$FieldID;Ljava/lang/Object;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptGroup$Builder" since="17" deprecated="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="29" />
+		<method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29" />
+		<method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29" />
+		<method name="addKernel(Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29" />
+		<method name="create()Landroid/renderscript/ScriptGroup;" deprecated="29" />
+	</class>
+	<class name="android/renderscript/ScriptGroup$Builder2" since="23" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;)V" deprecated="31" />
+		<method name="addInput()Landroid/renderscript/ScriptGroup$Input;" deprecated="31" />
+		<method name="addInvoke(Landroid/renderscript/Script$InvokeID;[Ljava/lang/Object;)Landroid/renderscript/ScriptGroup$Closure;" deprecated="31" />
+		<method name="addKernel(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Type;[Ljava/lang/Object;)Landroid/renderscript/ScriptGroup$Closure;" deprecated="31" />
+		<method name="create(Ljava/lang/String;[Landroid/renderscript/ScriptGroup$Future;)Landroid/renderscript/ScriptGroup;" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptGroup$Closure" since="23" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="getGlobal(Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Future;" deprecated="31" />
+		<method name="getReturn()Landroid/renderscript/ScriptGroup$Future;" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptGroup$Future" since="23" deprecated="31">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/renderscript/ScriptGroup$Input" since="23" deprecated="31">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsic" since="17" deprecated="31">
+		<extends name="android/renderscript/Script" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsic3DLUT" since="18" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsic3DLUT;" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setLUT(Landroid/renderscript/Allocation;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicBLAS" since="23" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="BNNM(Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;II)V" deprecated="31" />
+		<method name="CGBMV(IIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CGEMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CGEMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CGERC(Landroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CGERU(Landroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CHBMV(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CHEMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CHEMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CHER(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CHER2(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CHER2K(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CHERK(IIFLandroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CHPMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CHPR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CHPR2(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CSYMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CSYR2K(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CSYRK(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CTRMM(IIIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="CTRSM(IIIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="CTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DGBMV(IIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DGEMM(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DGEMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DGER(DLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DSBMV(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DSPMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DSPR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DSPR2(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DSYMM(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DSYMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DSYR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DSYR2(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DSYR2K(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DSYRK(IIDLandroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DTRMM(IIIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="DTRSM(IIIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="DTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="SGBMV(IIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="SGEMM(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SGEMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="SGER(FLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SSBMV(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="SSPMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="SSPR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SSPR2(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SSYMM(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SSYMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="SSYR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SSYR2(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SSYR2K(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="SSYRK(IIFLandroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="STBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="STBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="STPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="STPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="STRMM(IIIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="STRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="STRSM(IIIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="STRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZGBMV(IIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZGEMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZGEMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZGERC(Landroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZGERU(Landroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZHBMV(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZHEMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZHEMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZHER(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZHER2(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZHER2K(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZHERK(IIDLandroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZHPMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZHPR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZHPR2(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZSYMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZSYR2K(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZSYRK(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZTRMM(IIIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="ZTRSM(IIIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="ZTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31" />
+		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicBLAS;" deprecated="31" />
+		<field name="CONJ_TRANSPOSE" deprecated="31" />
+		<field name="LEFT" deprecated="31" />
+		<field name="LOWER" deprecated="31" />
+		<field name="NON_UNIT" deprecated="31" />
+		<field name="NO_TRANSPOSE" deprecated="31" />
+		<field name="RIGHT" deprecated="31" />
+		<field name="TRANSPOSE" deprecated="31" />
+		<field name="UNIT" deprecated="31" />
+		<field name="UPPER" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicBlend" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlend;" deprecated="31" />
+		<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachClear(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachClear(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachDst(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachDst(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachDstAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachDstAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachDstIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachDstIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachDstOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachDstOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachDstOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachDstOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachMultiply(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachMultiply(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachSrc(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachSrc(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachSrcAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachSrcAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachSrcIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachSrcIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachSrcOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachSrcOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachSrcOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachSrcOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachSubtract(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachSubtract(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEachXor(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEachXor(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getKernelIDAdd()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDClear()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDDst()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDDstAtop()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDDstIn()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDDstOut()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDDstOver()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDMultiply()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDSrc()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDSrcAtop()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDSrcIn()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDSrcOut()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDSrcOver()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDSubtract()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="getKernelIDXor()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicBlur" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlur;" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31" />
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="setRadius(F)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicColorMatrix" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" since="19" deprecated="31" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" deprecated="19" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setAdd(FFFF)V" since="19" deprecated="31" />
+		<method name="setAdd(Landroid/renderscript/Float4;)V" since="19" deprecated="31" />
+		<method name="setColorMatrix(Landroid/renderscript/Matrix3f;)V" deprecated="31" />
+		<method name="setColorMatrix(Landroid/renderscript/Matrix4f;)V" deprecated="31" />
+		<method name="setGreyscale()V" deprecated="31" />
+		<method name="setRGBtoYUV()V" deprecated="31" />
+		<method name="setYUVtoRGB()V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicConvolve3x3" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve3x3;" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31" />
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setCoefficients([F)V" deprecated="31" />
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicConvolve5x5" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve5x5;" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31" />
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setCoefficients([F)V" deprecated="31" />
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicHistogram" since="19" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicHistogram;" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="forEach_Dot(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach_Dot(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31" />
+		<method name="getKernelID_Separate()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setDotCoefficients(FFFF)V" deprecated="31" />
+		<method name="setOutput(Landroid/renderscript/Allocation;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicLUT" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicLUT;" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31" />
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setAlpha(II)V" deprecated="31" />
+		<method name="setBlue(II)V" deprecated="31" />
+		<method name="setGreen(II)V" deprecated="31" />
+		<method name="setRed(II)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicResize" since="20" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicResize;" deprecated="31" />
+		<method name="forEach_bicubic(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="forEach_bicubic(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" deprecated="31" />
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31" />
+		<method name="getKernelID_bicubic()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicYuvToRGB" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic" />
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicYuvToRGB;" deprecated="31" />
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31" />
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31" />
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31" />
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Short2" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(SS)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Short3" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(SSS)V" since="14" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Short4" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(SSSS)V" since="14" deprecated="31" />
+		<field name="w" deprecated="31" />
+		<field name="x" deprecated="31" />
+		<field name="y" deprecated="31" />
+		<field name="z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Type" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj" />
+		<method name="createX(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;I)Landroid/renderscript/Type;" since="21" deprecated="31" />
+		<method name="createXY(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;II)Landroid/renderscript/Type;" since="21" deprecated="31" />
+		<method name="createXYZ(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;III)Landroid/renderscript/Type;" since="21" deprecated="31" />
+		<method name="getCount()I" deprecated="31" />
+		<method name="getElement()Landroid/renderscript/Element;" deprecated="31" />
+		<method name="getX()I" deprecated="31" />
+		<method name="getY()I" deprecated="31" />
+		<method name="getYuv()I" since="18" deprecated="31" />
+		<method name="getZ()I" deprecated="31" />
+		<method name="hasFaces()Z" deprecated="31" />
+		<method name="hasMipmaps()Z" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Type$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)V" deprecated="31" />
+		<method name="create()Landroid/renderscript/Type;" deprecated="31" />
+		<method name="setFaces(Z)Landroid/renderscript/Type$Builder;" deprecated="31" />
+		<method name="setMipmaps(Z)Landroid/renderscript/Type$Builder;" deprecated="31" />
+		<method name="setX(I)Landroid/renderscript/Type$Builder;" deprecated="31" />
+		<method name="setY(I)Landroid/renderscript/Type$Builder;" deprecated="31" />
+		<method name="setYuvFormat(I)Landroid/renderscript/Type$Builder;" since="18" deprecated="31" />
+		<method name="setZ(I)Landroid/renderscript/Type$Builder;" since="18" deprecated="31" />
+	</class>
+	<class name="android/renderscript/Type$CubemapFace" since="11" deprecated="31">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Type$CubemapFace;" />
+		<method name="values()[Landroid/renderscript/Type$CubemapFace;" />
+		<field name="NEGATIVE_X" deprecated="31" />
+		<field name="NEGATIVE_Y" deprecated="31" />
+		<field name="NEGATIVE_Z" deprecated="31" />
+		<field name="POSITIVE_X" since="14" deprecated="31" />
+		<field name="POSITIVE_Y" since="14" deprecated="31" />
+		<field name="POSITIVE_Z" since="14" deprecated="31" />
+		<field name="POSITVE_X" deprecated="29" />
+		<field name="POSITVE_Y" deprecated="29" />
+		<field name="POSITVE_Z" deprecated="29" />
+	</class>
+	<class name="android/sax/Element" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getChild(Ljava/lang/String;)Landroid/sax/Element;" />
+		<method name="getChild(Ljava/lang/String;Ljava/lang/String;)Landroid/sax/Element;" />
+		<method name="requireChild(Ljava/lang/String;)Landroid/sax/Element;" />
+		<method name="requireChild(Ljava/lang/String;Ljava/lang/String;)Landroid/sax/Element;" />
+		<method name="setElementListener(Landroid/sax/ElementListener;)V" />
+		<method name="setEndElementListener(Landroid/sax/EndElementListener;)V" />
+		<method name="setEndTextElementListener(Landroid/sax/EndTextElementListener;)V" />
+		<method name="setStartElementListener(Landroid/sax/StartElementListener;)V" />
+		<method name="setTextElementListener(Landroid/sax/TextElementListener;)V" />
+	</class>
+	<class name="android/sax/ElementListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/sax/EndElementListener" />
+		<implements name="android/sax/StartElementListener" />
+	</class>
+	<class name="android/sax/EndElementListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="end()V" />
+	</class>
+	<class name="android/sax/EndTextElementListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="end(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/sax/RootElement" since="1">
+		<extends name="android/sax/Element" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;" />
+	</class>
+	<class name="android/sax/StartElementListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="start(Lorg/xml/sax/Attributes;)V" />
+	</class>
+	<class name="android/sax/TextElementListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/sax/EndTextElementListener" />
+		<implements name="android/sax/StartElementListener" />
+	</class>
+	<class name="android/se/omapi/Channel" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+		<method name="getSelectResponse()[B" />
+		<method name="getSession()Landroid/se/omapi/Session;" />
+		<method name="isBasicChannel()Z" />
+		<method name="selectNext()Z" />
+		<method name="transmit([B)[B" />
+	</class>
+	<class name="android/se/omapi/Reader" since="28">
+		<extends name="java/lang/Object" />
+		<method name="closeSessions()V" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSEService()Landroid/se/omapi/SEService;" />
+		<method name="isSecureElementPresent()Z" />
+		<method name="openSession()Landroid/se/omapi/Session;" />
+	</class>
+	<class name="android/se/omapi/SEService" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/se/omapi/SEService$OnConnectedListener;)V" />
+		<method name="getReaders()[Landroid/se/omapi/Reader;" />
+		<method name="getUiccReader(I)Landroid/se/omapi/Reader;" since="30" />
+		<method name="getVersion()Ljava/lang/String;" />
+		<method name="isConnected()Z" />
+		<method name="shutdown()V" />
+		<field name="ACTION_SECURE_ELEMENT_STATE_CHANGED" since="31" />
+		<field name="EXTRA_READER_NAME" since="31" />
+		<field name="EXTRA_READER_STATE" since="31" />
+	</class>
+	<class name="android/se/omapi/SEService$OnConnectedListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onConnected()V" />
+	</class>
+	<class name="android/se/omapi/Session" since="28">
+		<extends name="java/lang/Object" />
+		<method name="close()V" />
+		<method name="closeChannels()V" />
+		<method name="getATR()[B" />
+		<method name="getReader()Landroid/se/omapi/Reader;" />
+		<method name="isClosed()Z" />
+		<method name="openBasicChannel([B)Landroid/se/omapi/Channel;" />
+		<method name="openBasicChannel([BB)Landroid/se/omapi/Channel;" />
+		<method name="openLogicalChannel([B)Landroid/se/omapi/Channel;" />
+		<method name="openLogicalChannel([BB)Landroid/se/omapi/Channel;" />
+	</class>
+	<class name="android/security/AppUriAuthenticationPolicy" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAppAndUriMappings()Ljava/util/Map;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/security/AppUriAuthenticationPolicy$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addAppAndUriMapping(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;)Landroid/security/AppUriAuthenticationPolicy$Builder;" />
+		<method name="build()Landroid/security/AppUriAuthenticationPolicy;" />
+	</class>
+	<class name="android/security/AttestedKeyPair" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/KeyPair;Ljava/util/List;)V" since="30" />
+		<method name="getAttestationRecord()Ljava/util/List;" />
+		<method name="getKeyPair()Ljava/security/KeyPair;" />
+	</class>
+	<class name="android/security/ConfirmationAlreadyPresentingException" since="28">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/security/ConfirmationCallback" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCanceled()V" />
+		<method name="onConfirmed([B)V" />
+		<method name="onDismissed()V" />
+		<method name="onError(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/ConfirmationNotAvailableException" since="28">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/security/ConfirmationPrompt" since="28">
+		<extends name="java/lang/Object" />
+		<method name="cancelPrompt()V" />
+		<method name="isSupported(Landroid/content/Context;)Z" />
+		<method name="presentPrompt(Ljava/util/concurrent/Executor;Landroid/security/ConfirmationCallback;)V" />
+	</class>
+	<class name="android/security/ConfirmationPrompt$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="build()Landroid/security/ConfirmationPrompt;" />
+		<method name="setExtraData([B)Landroid/security/ConfirmationPrompt$Builder;" />
+		<method name="setPromptText(Ljava/lang/CharSequence;)Landroid/security/ConfirmationPrompt$Builder;" />
+	</class>
+	<class name="android/security/FileIntegrityManager" since="30">
+		<extends name="java/lang/Object" />
+		<method name="isApkVeritySupported()Z" />
+		<method name="isAppSourceCertificateTrusted(Ljava/security/cert/X509Certificate;)Z" />
+	</class>
+	<class name="android/security/KeyChain" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="choosePrivateKeyAlias(Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Landroid/net/Uri;Ljava/lang/String;)V" since="23" />
+		<method name="choosePrivateKeyAlias(Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="createInstallIntent()Landroid/content/Intent;" />
+		<method name="createManageCredentialsIntent(Landroid/security/AppUriAuthenticationPolicy;)Landroid/content/Intent;" since="31" />
+		<method name="getCertificateChain(Landroid/content/Context;Ljava/lang/String;)[Ljava/security/cert/X509Certificate;" />
+		<method name="getCredentialManagementAppPolicy(Landroid/content/Context;)Landroid/security/AppUriAuthenticationPolicy;" since="31" />
+		<method name="getPrivateKey(Landroid/content/Context;Ljava/lang/String;)Ljava/security/PrivateKey;" />
+		<method name="isBoundKeyAlgorithm(Ljava/lang/String;)Z" since="18" deprecated="23" />
+		<method name="isCredentialManagementApp(Landroid/content/Context;)Z" since="31" />
+		<method name="isKeyAlgorithmSupported(Ljava/lang/String;)Z" since="18" />
+		<method name="removeCredentialManagementApp(Landroid/content/Context;)Z" since="31" />
+		<field name="ACTION_KEYCHAIN_CHANGED" since="26" />
+		<field name="ACTION_KEY_ACCESS_CHANGED" since="26" />
+		<field name="ACTION_STORAGE_CHANGED" since="16" deprecated="26" />
+		<field name="ACTION_TRUST_STORE_CHANGED" since="26" />
+		<field name="EXTRA_CERTIFICATE" />
+		<field name="EXTRA_KEY_ACCESSIBLE" since="26" />
+		<field name="EXTRA_KEY_ALIAS" since="26" />
+		<field name="EXTRA_NAME" />
+		<field name="EXTRA_PKCS12" />
+		<field name="KEY_ALIAS_SELECTION_DENIED" since="30" />
+	</class>
+	<class name="android/security/KeyChainAliasCallback" since="14">
+		<extends name="java/lang/Object" />
+		<method name="alias(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/security/KeyChainException" since="14">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/KeyPairGeneratorSpec" since="18" deprecated="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="19" deprecated="29" />
+		<method name="getContext()Landroid/content/Context;" deprecated="29" />
+		<method name="getEndDate()Ljava/util/Date;" deprecated="29" />
+		<method name="getKeySize()I" since="19" deprecated="29" />
+		<method name="getKeyType()Ljava/lang/String;" since="19" deprecated="29" />
+		<method name="getKeystoreAlias()Ljava/lang/String;" deprecated="29" />
+		<method name="getSerialNumber()Ljava/math/BigInteger;" deprecated="29" />
+		<method name="getStartDate()Ljava/util/Date;" deprecated="29" />
+		<method name="getSubjectDN()Ljavax/security/auth/x500/X500Principal;" deprecated="29" />
+		<method name="isEncryptionRequired()Z" deprecated="29" />
+	</class>
+	<class name="android/security/KeyPairGeneratorSpec$Builder" since="18" deprecated="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="build()Landroid/security/KeyPairGeneratorSpec;" deprecated="29" />
+		<method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29" />
+		<method name="setAlias(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29" />
+		<method name="setEncryptionRequired()Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29" />
+		<method name="setEndDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29" />
+		<method name="setKeySize(I)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29" />
+		<method name="setKeyType(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29" />
+		<method name="setSerialNumber(Ljava/math/BigInteger;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29" />
+		<method name="setStartDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29" />
+		<method name="setSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29" />
+	</class>
+	<class name="android/security/KeyStoreParameter" since="18" deprecated="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$ProtectionParameter" />
+		<method name="isEncryptionRequired()Z" deprecated="29" />
+	</class>
+	<class name="android/security/KeyStoreParameter$Builder" since="18" deprecated="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="build()Landroid/security/KeyStoreParameter;" deprecated="29" />
+		<method name="setEncryptionRequired(Z)Landroid/security/KeyStoreParameter$Builder;" deprecated="29" />
+	</class>
+	<class name="android/security/NetworkSecurityPolicy" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getInstance()Landroid/security/NetworkSecurityPolicy;" />
+		<method name="isCleartextTrafficPermitted()Z" />
+		<method name="isCleartextTrafficPermitted(Ljava/lang/String;)Z" since="24" />
+	</class>
+	<class name="android/security/identity/AccessControlProfile" since="30">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/security/identity/AccessControlProfile$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/security/identity/AccessControlProfileId;)V" />
+		<method name="build()Landroid/security/identity/AccessControlProfile;" />
+		<method name="setReaderCertificate(Ljava/security/cert/X509Certificate;)Landroid/security/identity/AccessControlProfile$Builder;" />
+		<method name="setUserAuthenticationRequired(Z)Landroid/security/identity/AccessControlProfile$Builder;" />
+		<method name="setUserAuthenticationTimeout(J)Landroid/security/identity/AccessControlProfile$Builder;" />
+	</class>
+	<class name="android/security/identity/AccessControlProfileId" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getId()I" />
+	</class>
+	<class name="android/security/identity/AlreadyPersonalizedException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/CipherSuiteNotSupportedException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/DocTypeNotSupportedException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/EphemeralPublicKeyNotFoundException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/IdentityCredential" since="30">
+		<extends name="java/lang/Object" />
+		<method name="createEphemeralKeyPair()Ljava/security/KeyPair;" />
+		<method name="decryptMessageFromReader([B)[B" />
+		<method name="delete([B)[B" since="31" />
+		<method name="encryptMessageToReader([B)[B" />
+		<method name="getAuthKeysNeedingCertification()Ljava/util/Collection;" />
+		<method name="getAuthenticationDataUsageCount()[I" />
+		<method name="getCredentialKeyCertificateChain()Ljava/util/Collection;" />
+		<method name="getEntries([BLjava/util/Map;[B[B)Landroid/security/identity/ResultData;" />
+		<method name="proveOwnership([B)[B" since="31" />
+		<method name="setAllowUsingExhaustedKeys(Z)V" />
+		<method name="setAllowUsingExpiredKeys(Z)V" since="31" />
+		<method name="setAvailableAuthenticationKeys(II)V" />
+		<method name="setReaderEphemeralPublicKey(Ljava/security/PublicKey;)V" />
+		<method name="storeStaticAuthenticationData(Ljava/security/cert/X509Certificate;Ljava/time/Instant;[B)V" since="31" />
+		<method name="storeStaticAuthenticationData(Ljava/security/cert/X509Certificate;[B)V" deprecated="31" />
+		<method name="update(Landroid/security/identity/PersonalizationData;)[B" since="31" />
+	</class>
+	<class name="android/security/identity/IdentityCredentialException" since="30">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/IdentityCredentialStore" since="30">
+		<extends name="java/lang/Object" />
+		<method name="createCredential(Ljava/lang/String;Ljava/lang/String;)Landroid/security/identity/WritableIdentityCredential;" />
+		<method name="deleteCredentialByName(Ljava/lang/String;)[B" deprecated="31" />
+		<method name="getCredentialByName(Ljava/lang/String;I)Landroid/security/identity/IdentityCredential;" />
+		<method name="getDirectAccessInstance(Landroid/content/Context;)Landroid/security/identity/IdentityCredentialStore;" />
+		<method name="getInstance(Landroid/content/Context;)Landroid/security/identity/IdentityCredentialStore;" />
+		<method name="getSupportedDocTypes()[Ljava/lang/String;" />
+		<field name="CIPHERSUITE_ECDHE_HKDF_ECDSA_WITH_AES_256_GCM_SHA256" />
+	</class>
+	<class name="android/security/identity/InvalidReaderSignatureException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/InvalidRequestMessageException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/MessageDecryptionException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/NoAuthenticationKeyAvailableException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/PersonalizationData" since="30">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/security/identity/PersonalizationData$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addAccessControlProfile(Landroid/security/identity/AccessControlProfile;)Landroid/security/identity/PersonalizationData$Builder;" />
+		<method name="build()Landroid/security/identity/PersonalizationData;" />
+		<method name="putEntry(Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;[B)Landroid/security/identity/PersonalizationData$Builder;" />
+	</class>
+	<class name="android/security/identity/ResultData" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getAuthenticatedData()[B" />
+		<method name="getEntry(Ljava/lang/String;Ljava/lang/String;)[B" />
+		<method name="getEntryNames(Ljava/lang/String;)Ljava/util/Collection;" />
+		<method name="getMessageAuthenticationCode()[B" />
+		<method name="getNamespaces()Ljava/util/Collection;" />
+		<method name="getRetrievedEntryNames(Ljava/lang/String;)Ljava/util/Collection;" />
+		<method name="getStaticAuthenticationData()[B" />
+		<method name="getStatus(Ljava/lang/String;Ljava/lang/String;)I" />
+		<field name="STATUS_NOT_IN_REQUEST_MESSAGE" />
+		<field name="STATUS_NOT_REQUESTED" />
+		<field name="STATUS_NO_ACCESS_CONTROL_PROFILES" />
+		<field name="STATUS_NO_SUCH_ENTRY" />
+		<field name="STATUS_OK" />
+		<field name="STATUS_READER_AUTHENTICATION_FAILED" />
+		<field name="STATUS_USER_AUTHENTICATION_FAILED" />
+	</class>
+	<class name="android/security/identity/SessionTranscriptMismatchException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/UnknownAuthenticationKeyException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/identity/WritableIdentityCredential" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getCredentialKeyCertificateChain([B)Ljava/util/Collection;" />
+		<method name="personalize(Landroid/security/identity/PersonalizationData;)[B" />
+	</class>
+	<class name="android/security/keystore/BackendBusyException" since="31">
+		<extends name="java/security/ProviderException" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(JLjava/lang/String;)V" />
+		<method name="&lt;init&gt;(JLjava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="getBackOffHintMillis()J" />
+	</class>
+	<class name="android/security/keystore/KeyExpiredException" since="23">
+		<extends name="java/security/InvalidKeyException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/keystore/KeyGenParameterSpec" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" />
+		<method name="getAttestKeyAlias()Ljava/lang/String;" since="31" />
+		<method name="getAttestationChallenge()[B" since="24" />
+		<method name="getBlockModes()[Ljava/lang/String;" />
+		<method name="getCertificateNotAfter()Ljava/util/Date;" />
+		<method name="getCertificateNotBefore()Ljava/util/Date;" />
+		<method name="getCertificateSerialNumber()Ljava/math/BigInteger;" />
+		<method name="getCertificateSubject()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getDigests()[Ljava/lang/String;" />
+		<method name="getEncryptionPaddings()[Ljava/lang/String;" />
+		<method name="getKeySize()I" />
+		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;" />
+		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;" />
+		<method name="getKeyValidityStart()Ljava/util/Date;" />
+		<method name="getKeystoreAlias()Ljava/lang/String;" />
+		<method name="getMaxUsageCount()I" since="31" />
+		<method name="getPurposes()I" />
+		<method name="getSignaturePaddings()[Ljava/lang/String;" />
+		<method name="getUserAuthenticationType()I" since="30" />
+		<method name="getUserAuthenticationValidityDurationSeconds()I" />
+		<method name="isDevicePropertiesAttestationIncluded()Z" since="31" />
+		<method name="isDigestsSpecified()Z" />
+		<method name="isInvalidatedByBiometricEnrollment()Z" since="24" />
+		<method name="isRandomizedEncryptionRequired()Z" />
+		<method name="isStrongBoxBacked()Z" since="28" />
+		<method name="isUnlockedDeviceRequired()Z" since="28" />
+		<method name="isUserAuthenticationRequired()Z" />
+		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24" />
+		<method name="isUserConfirmationRequired()Z" since="28" />
+		<method name="isUserPresenceRequired()Z" since="28" />
+	</class>
+	<class name="android/security/keystore/KeyGenParameterSpec$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="build()Landroid/security/keystore/KeyGenParameterSpec;" />
+		<method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setAttestKeyAlias(Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="31" />
+		<method name="setAttestationChallenge([B)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24" />
+		<method name="setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setCertificateNotAfter(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setCertificateNotBefore(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setCertificateSerialNumber(Ljava/math/BigInteger;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setCertificateSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setDevicePropertiesAttestationIncluded(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="31" />
+		<method name="setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setInvalidatedByBiometricEnrollment(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24" />
+		<method name="setIsStrongBoxBacked(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28" />
+		<method name="setKeySize(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setKeyValidityEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setKeyValidityForConsumptionEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setKeyValidityForOriginationEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setKeyValidityStart(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setMaxUsageCount(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="31" />
+		<method name="setRandomizedEncryptionRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setSignaturePaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setUnlockedDeviceRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28" />
+		<method name="setUserAuthenticationParameters(II)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="30" />
+		<method name="setUserAuthenticationRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" />
+		<method name="setUserAuthenticationValidWhileOnBody(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24" />
+		<method name="setUserAuthenticationValidityDurationSeconds(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;" deprecated="30" />
+		<method name="setUserConfirmationRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28" />
+		<method name="setUserPresenceRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28" />
+	</class>
+	<class name="android/security/keystore/KeyInfo" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="getBlockModes()[Ljava/lang/String;" />
+		<method name="getDigests()[Ljava/lang/String;" />
+		<method name="getEncryptionPaddings()[Ljava/lang/String;" />
+		<method name="getKeySize()I" />
+		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;" />
+		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;" />
+		<method name="getKeyValidityStart()Ljava/util/Date;" />
+		<method name="getKeystoreAlias()Ljava/lang/String;" />
+		<method name="getOrigin()I" />
+		<method name="getPurposes()I" />
+		<method name="getRemainingUsageCount()I" since="31" />
+		<method name="getSecurityLevel()I" since="31" />
+		<method name="getSignaturePaddings()[Ljava/lang/String;" />
+		<method name="getUserAuthenticationType()I" since="30" />
+		<method name="getUserAuthenticationValidityDurationSeconds()I" />
+		<method name="isInsideSecureHardware()Z" deprecated="31" />
+		<method name="isInvalidatedByBiometricEnrollment()Z" since="24" />
+		<method name="isTrustedUserPresenceRequired()Z" since="28" />
+		<method name="isUserAuthenticationRequired()Z" />
+		<method name="isUserAuthenticationRequirementEnforcedBySecureHardware()Z" />
+		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24" />
+		<method name="isUserConfirmationRequired()Z" since="28" />
+	</class>
+	<class name="android/security/keystore/KeyNotYetValidException" since="23">
+		<extends name="java/security/InvalidKeyException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/keystore/KeyPermanentlyInvalidatedException" since="23">
+		<extends name="java/security/InvalidKeyException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/keystore/KeyProperties" since="23">
+		<extends name="java/lang/Object" />
+		<field name="AUTH_BIOMETRIC_STRONG" since="30" />
+		<field name="AUTH_DEVICE_CREDENTIAL" since="30" />
+		<field name="BLOCK_MODE_CBC" />
+		<field name="BLOCK_MODE_CTR" />
+		<field name="BLOCK_MODE_ECB" />
+		<field name="BLOCK_MODE_GCM" />
+		<field name="DIGEST_MD5" />
+		<field name="DIGEST_NONE" />
+		<field name="DIGEST_SHA1" />
+		<field name="DIGEST_SHA224" />
+		<field name="DIGEST_SHA256" />
+		<field name="DIGEST_SHA384" />
+		<field name="DIGEST_SHA512" />
+		<field name="ENCRYPTION_PADDING_NONE" />
+		<field name="ENCRYPTION_PADDING_PKCS7" />
+		<field name="ENCRYPTION_PADDING_RSA_OAEP" />
+		<field name="ENCRYPTION_PADDING_RSA_PKCS1" />
+		<field name="KEY_ALGORITHM_3DES" since="28" deprecated="28" />
+		<field name="KEY_ALGORITHM_AES" />
+		<field name="KEY_ALGORITHM_EC" />
+		<field name="KEY_ALGORITHM_HMAC_SHA1" />
+		<field name="KEY_ALGORITHM_HMAC_SHA224" />
+		<field name="KEY_ALGORITHM_HMAC_SHA256" />
+		<field name="KEY_ALGORITHM_HMAC_SHA384" />
+		<field name="KEY_ALGORITHM_HMAC_SHA512" />
+		<field name="KEY_ALGORITHM_RSA" />
+		<field name="ORIGIN_GENERATED" />
+		<field name="ORIGIN_IMPORTED" />
+		<field name="ORIGIN_SECURELY_IMPORTED" since="28" />
+		<field name="ORIGIN_UNKNOWN" />
+		<field name="PURPOSE_AGREE_KEY" since="31" />
+		<field name="PURPOSE_ATTEST_KEY" since="31" />
+		<field name="PURPOSE_DECRYPT" />
+		<field name="PURPOSE_ENCRYPT" />
+		<field name="PURPOSE_SIGN" />
+		<field name="PURPOSE_VERIFY" />
+		<field name="PURPOSE_WRAP_KEY" since="28" />
+		<field name="SECURITY_LEVEL_SOFTWARE" since="31" />
+		<field name="SECURITY_LEVEL_STRONGBOX" since="31" />
+		<field name="SECURITY_LEVEL_TRUSTED_ENVIRONMENT" since="31" />
+		<field name="SECURITY_LEVEL_UNKNOWN" since="31" />
+		<field name="SECURITY_LEVEL_UNKNOWN_SECURE" since="31" />
+		<field name="SIGNATURE_PADDING_RSA_PKCS1" />
+		<field name="SIGNATURE_PADDING_RSA_PSS" />
+		<field name="UNRESTRICTED_USAGE_COUNT" since="31" />
+	</class>
+	<class name="android/security/keystore/KeyProtection" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$ProtectionParameter" />
+		<method name="getBlockModes()[Ljava/lang/String;" />
+		<method name="getDigests()[Ljava/lang/String;" />
+		<method name="getEncryptionPaddings()[Ljava/lang/String;" />
+		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;" />
+		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;" />
+		<method name="getKeyValidityStart()Ljava/util/Date;" />
+		<method name="getMaxUsageCount()I" since="31" />
+		<method name="getPurposes()I" />
+		<method name="getSignaturePaddings()[Ljava/lang/String;" />
+		<method name="getUserAuthenticationType()I" since="30" />
+		<method name="getUserAuthenticationValidityDurationSeconds()I" />
+		<method name="isDigestsSpecified()Z" />
+		<method name="isInvalidatedByBiometricEnrollment()Z" since="24" />
+		<method name="isRandomizedEncryptionRequired()Z" />
+		<method name="isUnlockedDeviceRequired()Z" since="28" />
+		<method name="isUserAuthenticationRequired()Z" />
+		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24" />
+		<method name="isUserConfirmationRequired()Z" since="28" />
+		<method name="isUserPresenceRequired()Z" since="28" />
+	</class>
+	<class name="android/security/keystore/KeyProtection$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/security/keystore/KeyProtection;" />
+		<method name="setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setInvalidatedByBiometricEnrollment(Z)Landroid/security/keystore/KeyProtection$Builder;" since="24" />
+		<method name="setIsStrongBoxBacked(Z)Landroid/security/keystore/KeyProtection$Builder;" since="31" />
+		<method name="setKeyValidityEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setKeyValidityForConsumptionEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setKeyValidityForOriginationEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setKeyValidityStart(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setMaxUsageCount(I)Landroid/security/keystore/KeyProtection$Builder;" since="31" />
+		<method name="setRandomizedEncryptionRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setSignaturePaddings([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setUnlockedDeviceRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28" />
+		<method name="setUserAuthenticationParameters(II)Landroid/security/keystore/KeyProtection$Builder;" since="30" />
+		<method name="setUserAuthenticationRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" />
+		<method name="setUserAuthenticationValidWhileOnBody(Z)Landroid/security/keystore/KeyProtection$Builder;" since="24" />
+		<method name="setUserAuthenticationValidityDurationSeconds(I)Landroid/security/keystore/KeyProtection$Builder;" deprecated="30" />
+		<method name="setUserConfirmationRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28" />
+		<method name="setUserPresenceRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28" />
+	</class>
+	<class name="android/security/keystore/SecureKeyImportUnavailableException" since="28">
+		<extends name="java/security/ProviderException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/keystore/StrongBoxUnavailableException" since="28">
+		<extends name="java/security/ProviderException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/keystore/UserNotAuthenticatedException" since="23">
+		<extends name="java/security/InvalidKeyException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/keystore/UserPresenceUnavailableException" since="28">
+		<extends name="java/security/InvalidKeyException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/security/keystore/WrappedKeyEntry" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$Entry" />
+		<method name="&lt;init&gt;([BLjava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" />
+		<method name="getTransformation()Ljava/lang/String;" />
+		<method name="getWrappedKeyBytes()[B" />
+		<method name="getWrappingKeyAlias()Ljava/lang/String;" />
+	</class>
+	<class name="android/service/autofill/AutofillService" since="26">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFillEventHistory()Landroid/service/autofill/FillEventHistory;" />
+		<method name="onConnected()V" />
+		<method name="onDisconnected()V" />
+		<method name="onFillRequest(Landroid/service/autofill/FillRequest;Landroid/os/CancellationSignal;Landroid/service/autofill/FillCallback;)V" />
+		<method name="onSaveRequest(Landroid/service/autofill/SaveRequest;Landroid/service/autofill/SaveCallback;)V" />
+		<method name="onSavedDatasetsInfoRequest(Landroid/service/autofill/SavedDatasetsInfoCallback;)V" since="31" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/service/autofill/BatchUpdates" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/BatchUpdates$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/service/autofill/BatchUpdates;" />
+		<method name="transformChild(ILandroid/service/autofill/Transformation;)Landroid/service/autofill/BatchUpdates$Builder;" />
+		<method name="updateTemplate(Landroid/widget/RemoteViews;)Landroid/service/autofill/BatchUpdates$Builder;" />
+	</class>
+	<class name="android/service/autofill/CharSequenceTransformation" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/Transformation" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/CharSequenceTransformation$Builder" since="27">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;Ljava/lang/String;)V" />
+		<method name="addField(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;Ljava/lang/String;)Landroid/service/autofill/CharSequenceTransformation$Builder;" />
+		<method name="build()Landroid/service/autofill/CharSequenceTransformation;" />
+	</class>
+	<class name="android/service/autofill/CustomDescription" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/CustomDescription$Builder" since="27">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/widget/RemoteViews;)V" />
+		<method name="addChild(ILandroid/service/autofill/Transformation;)Landroid/service/autofill/CustomDescription$Builder;" />
+		<method name="addOnClickAction(ILandroid/service/autofill/OnClickAction;)Landroid/service/autofill/CustomDescription$Builder;" since="29" />
+		<method name="batchUpdate(Landroid/service/autofill/Validator;Landroid/service/autofill/BatchUpdates;)Landroid/service/autofill/CustomDescription$Builder;" since="28" />
+		<method name="build()Landroid/service/autofill/CustomDescription;" />
+	</class>
+	<class name="android/service/autofill/Dataset" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/Dataset$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/widget/RemoteViews;)V" />
+		<method name="build()Landroid/service/autofill/Dataset;" />
+		<method name="setAuthentication(Landroid/content/IntentSender;)Landroid/service/autofill/Dataset$Builder;" />
+		<method name="setId(Ljava/lang/String;)Landroid/service/autofill/Dataset$Builder;" />
+		<method name="setInlinePresentation(Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="30" />
+		<method name="setInlinePresentation(Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="31" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)Landroid/service/autofill/Dataset$Builder;" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/widget/RemoteViews;)Landroid/service/autofill/Dataset$Builder;" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="30" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="31" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;)Landroid/service/autofill/Dataset$Builder;" since="28" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;Landroid/widget/RemoteViews;)Landroid/service/autofill/Dataset$Builder;" since="28" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="30" />
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="31" />
+	</class>
+	<class name="android/service/autofill/DateTransformation" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/Transformation" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;Ljava/lang/Object;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/DateValueSanitizer" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/Sanitizer" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/FieldClassification" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getMatches()Ljava/util/List;" />
+	</class>
+	<class name="android/service/autofill/FieldClassification$Match" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getCategoryId()Ljava/lang/String;" />
+		<method name="getScore()F" />
+	</class>
+	<class name="android/service/autofill/FillCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="onFailure(Ljava/lang/CharSequence;)V" />
+		<method name="onSuccess(Landroid/service/autofill/FillResponse;)V" />
+	</class>
+	<class name="android/service/autofill/FillContext" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFocusedId()Landroid/view/autofill/AutofillId;" since="29" />
+		<method name="getRequestId()I" />
+		<method name="getStructure()Landroid/app/assist/AssistStructure;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/FillEventHistory" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getClientState()Landroid/os/Bundle;" deprecated="28" />
+		<method name="getEvents()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/FillEventHistory$Event" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getChangedFields()Ljava/util/Map;" since="28" />
+		<method name="getClientState()Landroid/os/Bundle;" since="28" />
+		<method name="getDatasetId()Ljava/lang/String;" />
+		<method name="getFieldsClassification()Ljava/util/Map;" since="28" />
+		<method name="getIgnoredDatasetIds()Ljava/util/Set;" since="28" />
+		<method name="getManuallyEnteredField()Ljava/util/Map;" since="28" />
+		<method name="getNoSaveUiReason()I" since="31" />
+		<method name="getSelectedDatasetIds()Ljava/util/Set;" since="28" />
+		<method name="getType()I" />
+		<field name="NO_SAVE_UI_REASON_DATASET_MATCH" since="31" />
+		<field name="NO_SAVE_UI_REASON_FIELD_VALIDATION_FAILED" since="31" />
+		<field name="NO_SAVE_UI_REASON_HAS_EMPTY_REQUIRED" since="31" />
+		<field name="NO_SAVE_UI_REASON_NONE" since="31" />
+		<field name="NO_SAVE_UI_REASON_NO_SAVE_INFO" since="31" />
+		<field name="NO_SAVE_UI_REASON_NO_VALUE_CHANGED" since="31" />
+		<field name="NO_SAVE_UI_REASON_WITH_DELAY_SAVE_FLAG" since="31" />
+		<field name="TYPE_AUTHENTICATION_SELECTED" />
+		<field name="TYPE_CONTEXT_COMMITTED" since="28" />
+		<field name="TYPE_DATASETS_SHOWN" since="30" />
+		<field name="TYPE_DATASET_AUTHENTICATION_SELECTED" />
+		<field name="TYPE_DATASET_SELECTED" />
+		<field name="TYPE_SAVE_SHOWN" />
+	</class>
+	<class name="android/service/autofill/FillRequest" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getClientState()Landroid/os/Bundle;" />
+		<method name="getFillContexts()Ljava/util/List;" />
+		<method name="getFlags()I" />
+		<method name="getId()I" />
+		<method name="getInlineSuggestionsRequest()Landroid/view/inputmethod/InlineSuggestionsRequest;" since="30" />
+		<field name="CREATOR" />
+		<field name="FLAG_COMPATIBILITY_MODE_REQUEST" since="29" />
+		<field name="FLAG_MANUAL_REQUEST" />
+	</class>
+	<class name="android/service/autofill/FillResponse" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+		<field name="FLAG_DISABLE_ACTIVITY_ONLY" since="28" />
+		<field name="FLAG_TRACK_CONTEXT_COMMITED" since="28" />
+	</class>
+	<class name="android/service/autofill/FillResponse$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addDataset(Landroid/service/autofill/Dataset;)Landroid/service/autofill/FillResponse$Builder;" />
+		<method name="build()Landroid/service/autofill/FillResponse;" />
+		<method name="disableAutofill(J)Landroid/service/autofill/FillResponse$Builder;" since="28" />
+		<method name="setAuthentication([Landroid/view/autofill/AutofillId;Landroid/content/IntentSender;Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" />
+		<method name="setAuthentication([Landroid/view/autofill/AutofillId;Landroid/content/IntentSender;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/FillResponse$Builder;" since="30" />
+		<method name="setAuthentication([Landroid/view/autofill/AutofillId;Landroid/content/IntentSender;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/FillResponse$Builder;" since="31" />
+		<method name="setClientState(Landroid/os/Bundle;)Landroid/service/autofill/FillResponse$Builder;" />
+		<method name="setFieldClassificationIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/FillResponse$Builder;" since="28" />
+		<method name="setFlags(I)Landroid/service/autofill/FillResponse$Builder;" since="28" />
+		<method name="setFooter(Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" since="28" />
+		<method name="setHeader(Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" since="28" />
+		<method name="setIgnoredIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/FillResponse$Builder;" />
+		<method name="setPresentationCancelIds([I)Landroid/service/autofill/FillResponse$Builder;" since="30" />
+		<method name="setSaveInfo(Landroid/service/autofill/SaveInfo;)Landroid/service/autofill/FillResponse$Builder;" />
+		<method name="setUserData(Landroid/service/autofill/UserData;)Landroid/service/autofill/FillResponse$Builder;" since="29" />
+	</class>
+	<class name="android/service/autofill/ImageTransformation" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/Transformation" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/ImageTransformation$Builder" since="27">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;I)V" deprecated="28" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;ILjava/lang/CharSequence;)V" since="28" />
+		<method name="addOption(Ljava/util/regex/Pattern;I)Landroid/service/autofill/ImageTransformation$Builder;" deprecated="28" />
+		<method name="addOption(Ljava/util/regex/Pattern;ILjava/lang/CharSequence;)Landroid/service/autofill/ImageTransformation$Builder;" since="28" />
+		<method name="build()Landroid/service/autofill/ImageTransformation;" />
+	</class>
+	<class name="android/service/autofill/InlinePresentation" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/app/slice/Slice;Landroid/widget/inline/InlinePresentationSpec;Z)V" />
+		<method name="createTooltipPresentation(Landroid/app/slice/Slice;Landroid/widget/inline/InlinePresentationSpec;)Landroid/service/autofill/InlinePresentation;" since="31" />
+		<method name="getInlinePresentationSpec()Landroid/widget/inline/InlinePresentationSpec;" />
+		<method name="getSlice()Landroid/app/slice/Slice;" />
+		<method name="isPinned()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/LuhnChecksumValidator" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/Validator" />
+		<method name="&lt;init&gt;([Landroid/view/autofill/AutofillId;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/OnClickAction" since="29">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/service/autofill/RegexValidator" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/Validator" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/Sanitizer" since="28">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/service/autofill/SaveCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="onFailure(Ljava/lang/CharSequence;)V" />
+		<method name="onSuccess()V" />
+		<method name="onSuccess(Landroid/content/IntentSender;)V" since="28" />
+	</class>
+	<class name="android/service/autofill/SaveInfo" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+		<field name="FLAG_DELAY_SAVE" since="29" />
+		<field name="FLAG_DONT_SAVE_ON_FINISH" since="28" />
+		<field name="FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE" />
+		<field name="NEGATIVE_BUTTON_STYLE_CANCEL" />
+		<field name="NEGATIVE_BUTTON_STYLE_NEVER" since="30" />
+		<field name="NEGATIVE_BUTTON_STYLE_REJECT" />
+		<field name="POSITIVE_BUTTON_STYLE_CONTINUE" since="30" />
+		<field name="POSITIVE_BUTTON_STYLE_SAVE" since="30" />
+		<field name="SAVE_DATA_TYPE_ADDRESS" />
+		<field name="SAVE_DATA_TYPE_CREDIT_CARD" />
+		<field name="SAVE_DATA_TYPE_DEBIT_CARD" since="30" />
+		<field name="SAVE_DATA_TYPE_EMAIL_ADDRESS" />
+		<field name="SAVE_DATA_TYPE_GENERIC" />
+		<field name="SAVE_DATA_TYPE_GENERIC_CARD" since="30" />
+		<field name="SAVE_DATA_TYPE_PASSWORD" />
+		<field name="SAVE_DATA_TYPE_PAYMENT_CARD" since="30" />
+		<field name="SAVE_DATA_TYPE_USERNAME" />
+	</class>
+	<class name="android/service/autofill/SaveInfo$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" since="27" />
+		<method name="&lt;init&gt;(I[Landroid/view/autofill/AutofillId;)V" />
+		<method name="addSanitizer(Landroid/service/autofill/Sanitizer;[Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;" since="28" />
+		<method name="build()Landroid/service/autofill/SaveInfo;" />
+		<method name="setCustomDescription(Landroid/service/autofill/CustomDescription;)Landroid/service/autofill/SaveInfo$Builder;" since="27" />
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/service/autofill/SaveInfo$Builder;" />
+		<method name="setFlags(I)Landroid/service/autofill/SaveInfo$Builder;" />
+		<method name="setNegativeAction(ILandroid/content/IntentSender;)Landroid/service/autofill/SaveInfo$Builder;" />
+		<method name="setOptionalIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;" />
+		<method name="setPositiveAction(I)Landroid/service/autofill/SaveInfo$Builder;" since="30" />
+		<method name="setTriggerId(Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;" since="28" />
+		<method name="setValidator(Landroid/service/autofill/Validator;)Landroid/service/autofill/SaveInfo$Builder;" since="27" />
+	</class>
+	<class name="android/service/autofill/SaveRequest" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getClientState()Landroid/os/Bundle;" />
+		<method name="getDatasetIds()Ljava/util/List;" since="28" />
+		<method name="getFillContexts()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/SavedDatasetsInfo" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="getCount()I" />
+		<method name="getType()Ljava/lang/String;" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_PASSWORDS" />
+	</class>
+	<class name="android/service/autofill/SavedDatasetsInfoCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onError(I)V" />
+		<method name="onSuccess(Ljava/util/Set;)V" />
+		<field name="ERROR_NEEDS_USER_ACTION" />
+		<field name="ERROR_OTHER" />
+		<field name="ERROR_UNSUPPORTED" />
+	</class>
+	<class name="android/service/autofill/TextValueSanitizer" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/Sanitizer" />
+		<method name="&lt;init&gt;(Ljava/util/regex/Pattern;Ljava/lang/String;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/Transformation" since="27">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/service/autofill/UserData" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFieldClassificationAlgorithm()Ljava/lang/String;" />
+		<method name="getFieldClassificationAlgorithmForCategory(Ljava/lang/String;)Ljava/lang/String;" since="29" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getMaxCategoryCount()I" />
+		<method name="getMaxFieldClassificationIdsSize()I" />
+		<method name="getMaxUserDataSize()I" />
+		<method name="getMaxValueLength()I" />
+		<method name="getMinValueLength()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/UserData$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="add(Ljava/lang/String;Ljava/lang/String;)Landroid/service/autofill/UserData$Builder;" />
+		<method name="build()Landroid/service/autofill/UserData;" />
+		<method name="setFieldClassificationAlgorithm(Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;" />
+		<method name="setFieldClassificationAlgorithmForCategory(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;" since="29" />
+	</class>
+	<class name="android/service/autofill/Validator" since="27">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/service/autofill/Validators" since="27">
+		<extends name="java/lang/Object" />
+		<method name="and([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;" />
+		<method name="not(Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;" since="28" />
+		<method name="or([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;" />
+	</class>
+	<class name="android/service/autofill/VisibilitySetterAction" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/service/autofill/OnClickAction" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/autofill/VisibilitySetterAction$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="build()Landroid/service/autofill/VisibilitySetterAction;" />
+		<method name="setVisibility(II)Landroid/service/autofill/VisibilitySetterAction$Builder;" />
+	</class>
+	<class name="android/service/carrier/CarrierIdentifier" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V" since="29" />
+		<method name="&lt;init&gt;([BLjava/lang/String;Ljava/lang/String;)V" since="28" />
+		<method name="getCarrierId()I" since="29" />
+		<method name="getGid1()Ljava/lang/String;" />
+		<method name="getGid2()Ljava/lang/String;" />
+		<method name="getImsi()Ljava/lang/String;" />
+		<method name="getMcc()Ljava/lang/String;" />
+		<method name="getMnc()Ljava/lang/String;" />
+		<method name="getSpecificCarrierId()I" since="29" />
+		<method name="getSpn()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/carrier/CarrierMessagingClientService" since="29">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService" since="22">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onDownloadMms(Landroid/net/Uri;ILandroid/net/Uri;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" />
+		<method name="onFilterSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="24" />
+		<method name="onReceiveTextSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="24" />
+		<method name="onSendDataSms([BILjava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23" />
+		<method name="onSendDataSms([BILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23" />
+		<method name="onSendMms(Landroid/net/Uri;ILandroid/net/Uri;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" />
+		<method name="onSendMultipartTextSms(Ljava/util/List;ILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23" />
+		<method name="onSendMultipartTextSms(Ljava/util/List;ILjava/lang/String;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23" />
+		<method name="onSendTextSms(Ljava/lang/String;ILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23" />
+		<method name="onSendTextSms(Ljava/lang/String;ILjava/lang/String;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23" />
+		<field name="DOWNLOAD_STATUS_ERROR" />
+		<field name="DOWNLOAD_STATUS_OK" />
+		<field name="DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK" />
+		<field name="RECEIVE_OPTIONS_DEFAULT" since="24" />
+		<field name="RECEIVE_OPTIONS_DROP" since="24" />
+		<field name="RECEIVE_OPTIONS_SKIP_NOTIFY_WHEN_CREDENTIAL_PROTECTED_STORAGE_UNAVAILABLE" since="24" />
+		<field name="SEND_FLAG_REQUEST_DELIVERY_STATUS" since="23" />
+		<field name="SEND_STATUS_ERROR" />
+		<field name="SEND_STATUS_OK" />
+		<field name="SEND_STATUS_RETRY_ON_CARRIER_NETWORK" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$ResultCallback" since="22">
+		<extends name="java/lang/Object" />
+		<method name="onReceiveResult(Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$SendMmsResult" since="22">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I[B)V" />
+		<method name="getSendConfPdu()[B" />
+		<method name="getSendStatus()I" />
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$SendMultipartSmsResult" since="22">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I[I)V" />
+		<method name="getMessageRefs()[I" />
+		<method name="getSendStatus()I" />
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$SendSmsResult" since="22">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getMessageRef()I" />
+		<method name="getSendStatus()I" />
+	</class>
+	<class name="android/service/carrier/CarrierService" since="23">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="notifyCarrierNetworkChange(Z)V" />
+		<method name="onLoadConfig(Landroid/service/carrier/CarrierIdentifier;)Landroid/os/PersistableBundle;" />
+		<field name="CARRIER_SERVICE_INTERFACE" />
+	</class>
+	<class name="android/service/carrier/MessagePdu" since="22">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/util/List;)V" />
+		<method name="getPdus()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/chooser/ChooserTarget" since="23" deprecated="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/graphics/drawable/Icon;FLandroid/content/ComponentName;Landroid/os/Bundle;)V" deprecated="30" />
+		<method name="getComponentName()Landroid/content/ComponentName;" deprecated="30" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" deprecated="30" />
+		<method name="getIntentExtras()Landroid/os/Bundle;" deprecated="30" />
+		<method name="getScore()F" deprecated="30" />
+		<method name="getTitle()Ljava/lang/CharSequence;" deprecated="30" />
+		<field name="CREATOR" deprecated="30" />
+	</class>
+	<class name="android/service/chooser/ChooserTargetService" since="23" deprecated="30">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="onGetChooserTargets(Landroid/content/ComponentName;Landroid/content/IntentFilter;)Ljava/util/List;" deprecated="30" />
+		<field name="BIND_PERMISSION" deprecated="30" />
+		<field name="META_DATA_NAME" deprecated="30" />
+		<field name="SERVICE_INTERFACE" deprecated="30" />
+	</class>
+	<class name="android/service/controls/Control" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAppIntent()Landroid/app/PendingIntent;" />
+		<method name="getControlId()Ljava/lang/String;" />
+		<method name="getControlTemplate()Landroid/service/controls/templates/ControlTemplate;" />
+		<method name="getCustomColor()Landroid/content/res/ColorStateList;" />
+		<method name="getCustomIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getDeviceType()I" />
+		<method name="getStatus()I" />
+		<method name="getStatusText()Ljava/lang/CharSequence;" />
+		<method name="getStructure()Ljava/lang/CharSequence;" />
+		<method name="getSubtitle()Ljava/lang/CharSequence;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="getZone()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+		<field name="STATUS_DISABLED" />
+		<field name="STATUS_ERROR" />
+		<field name="STATUS_NOT_FOUND" />
+		<field name="STATUS_OK" />
+		<field name="STATUS_UNKNOWN" />
+	</class>
+	<class name="android/service/controls/Control$StatefulBuilder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/service/controls/Control;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/app/PendingIntent;)V" />
+		<method name="build()Landroid/service/controls/Control;" />
+		<method name="setAppIntent(Landroid/app/PendingIntent;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setControlId(Ljava/lang/String;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setControlTemplate(Landroid/service/controls/templates/ControlTemplate;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setCustomColor(Landroid/content/res/ColorStateList;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setCustomIcon(Landroid/graphics/drawable/Icon;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setDeviceType(I)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setStatus(I)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setStatusText(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setStructure(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;" />
+		<method name="setZone(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;" />
+	</class>
+	<class name="android/service/controls/Control$StatelessBuilder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/service/controls/Control;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/app/PendingIntent;)V" />
+		<method name="build()Landroid/service/controls/Control;" />
+		<method name="setAppIntent(Landroid/app/PendingIntent;)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setControlId(Ljava/lang/String;)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setCustomColor(Landroid/content/res/ColorStateList;)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setCustomIcon(Landroid/graphics/drawable/Icon;)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setDeviceType(I)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setStructure(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;" />
+		<method name="setZone(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;" />
+	</class>
+	<class name="android/service/controls/ControlsProviderService" since="30">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createPublisherFor(Ljava/util/List;)Ljava/util/concurrent/Flow$Publisher;" />
+		<method name="createPublisherForAllAvailable()Ljava/util/concurrent/Flow$Publisher;" />
+		<method name="createPublisherForSuggested()Ljava/util/concurrent/Flow$Publisher;" />
+		<method name="performControlAction(Ljava/lang/String;Landroid/service/controls/actions/ControlAction;Ljava/util/function/Consumer;)V" />
+		<method name="requestAddControl(Landroid/content/Context;Landroid/content/ComponentName;Landroid/service/controls/Control;)V" />
+		<field name="SERVICE_CONTROLS" />
+		<field name="TAG" />
+	</class>
+	<class name="android/service/controls/DeviceTypes" since="30">
+		<extends name="java/lang/Object" />
+		<method name="validDeviceType(I)Z" />
+		<field name="TYPE_AC_HEATER" />
+		<field name="TYPE_AC_UNIT" />
+		<field name="TYPE_AIR_FRESHENER" />
+		<field name="TYPE_AIR_PURIFIER" />
+		<field name="TYPE_AWNING" />
+		<field name="TYPE_BLINDS" />
+		<field name="TYPE_CAMERA" />
+		<field name="TYPE_CLOSET" />
+		<field name="TYPE_COFFEE_MAKER" />
+		<field name="TYPE_CURTAIN" />
+		<field name="TYPE_DEHUMIDIFIER" />
+		<field name="TYPE_DISHWASHER" />
+		<field name="TYPE_DISPLAY" />
+		<field name="TYPE_DOOR" />
+		<field name="TYPE_DOORBELL" />
+		<field name="TYPE_DRAWER" />
+		<field name="TYPE_DRYER" />
+		<field name="TYPE_FAN" />
+		<field name="TYPE_GARAGE" />
+		<field name="TYPE_GATE" />
+		<field name="TYPE_GENERIC_ARM_DISARM" />
+		<field name="TYPE_GENERIC_LOCK_UNLOCK" />
+		<field name="TYPE_GENERIC_ON_OFF" />
+		<field name="TYPE_GENERIC_OPEN_CLOSE" />
+		<field name="TYPE_GENERIC_START_STOP" />
+		<field name="TYPE_GENERIC_TEMP_SETTING" />
+		<field name="TYPE_GENERIC_VIEWSTREAM" />
+		<field name="TYPE_HEATER" />
+		<field name="TYPE_HOOD" />
+		<field name="TYPE_HUMIDIFIER" />
+		<field name="TYPE_KETTLE" />
+		<field name="TYPE_LIGHT" />
+		<field name="TYPE_LOCK" />
+		<field name="TYPE_MICROWAVE" />
+		<field name="TYPE_MOP" />
+		<field name="TYPE_MOWER" />
+		<field name="TYPE_MULTICOOKER" />
+		<field name="TYPE_OUTLET" />
+		<field name="TYPE_PERGOLA" />
+		<field name="TYPE_RADIATOR" />
+		<field name="TYPE_REFRIGERATOR" />
+		<field name="TYPE_REMOTE_CONTROL" />
+		<field name="TYPE_ROUTINE" />
+		<field name="TYPE_SECURITY_SYSTEM" />
+		<field name="TYPE_SET_TOP" />
+		<field name="TYPE_SHOWER" />
+		<field name="TYPE_SHUTTER" />
+		<field name="TYPE_SPRINKLER" />
+		<field name="TYPE_STANDMIXER" />
+		<field name="TYPE_STYLER" />
+		<field name="TYPE_SWITCH" />
+		<field name="TYPE_THERMOSTAT" />
+		<field name="TYPE_TV" />
+		<field name="TYPE_UNKNOWN" />
+		<field name="TYPE_VACUUM" />
+		<field name="TYPE_VALVE" />
+		<field name="TYPE_WASHER" />
+		<field name="TYPE_WATER_HEATER" />
+		<field name="TYPE_WINDOW" />
+	</class>
+	<class name="android/service/controls/actions/BooleanAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ZLjava/lang/String;)V" />
+		<method name="getNewState()Z" />
+	</class>
+	<class name="android/service/controls/actions/CommandAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/service/controls/actions/ControlAction" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getActionType()I" />
+		<method name="getChallengeValue()Ljava/lang/String;" />
+		<method name="getErrorAction()Landroid/service/controls/actions/ControlAction;" />
+		<method name="getTemplateId()Ljava/lang/String;" />
+		<method name="isValidResponse(I)Z" />
+		<field name="RESPONSE_CHALLENGE_ACK" />
+		<field name="RESPONSE_CHALLENGE_PASSPHRASE" />
+		<field name="RESPONSE_CHALLENGE_PIN" />
+		<field name="RESPONSE_FAIL" />
+		<field name="RESPONSE_OK" />
+		<field name="RESPONSE_UNKNOWN" />
+		<field name="TYPE_BOOLEAN" />
+		<field name="TYPE_COMMAND" />
+		<field name="TYPE_ERROR" />
+		<field name="TYPE_FLOAT" />
+		<field name="TYPE_MODE" />
+	</class>
+	<class name="android/service/controls/actions/FloatAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction" />
+		<method name="&lt;init&gt;(Ljava/lang/String;F)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;FLjava/lang/String;)V" />
+		<method name="getNewValue()F" />
+	</class>
+	<class name="android/service/controls/actions/ModeAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="getNewMode()I" />
+	</class>
+	<class name="android/service/controls/templates/ControlButton" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ZLjava/lang/CharSequence;)V" />
+		<method name="getActionDescription()Ljava/lang/CharSequence;" />
+		<method name="isChecked()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/controls/templates/ControlTemplate" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getErrorTemplate()Landroid/service/controls/templates/ControlTemplate;" />
+		<method name="getNoTemplateObject()Landroid/service/controls/templates/ControlTemplate;" />
+		<method name="getTemplateId()Ljava/lang/String;" />
+		<method name="getTemplateType()I" />
+		<field name="TYPE_ERROR" />
+		<field name="TYPE_NO_TEMPLATE" />
+		<field name="TYPE_RANGE" />
+		<field name="TYPE_STATELESS" />
+		<field name="TYPE_TEMPERATURE" />
+		<field name="TYPE_THUMBNAIL" since="31" />
+		<field name="TYPE_TOGGLE" />
+		<field name="TYPE_TOGGLE_RANGE" />
+	</class>
+	<class name="android/service/controls/templates/RangeTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate" />
+		<method name="&lt;init&gt;(Ljava/lang/String;FFFFLjava/lang/CharSequence;)V" />
+		<method name="getCurrentValue()F" />
+		<method name="getFormatString()Ljava/lang/CharSequence;" />
+		<method name="getMaxValue()F" />
+		<method name="getMinValue()F" />
+		<method name="getStepValue()F" />
+	</class>
+	<class name="android/service/controls/templates/StatelessTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/service/controls/templates/TemperatureControlTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/service/controls/templates/ControlTemplate;III)V" />
+		<method name="getCurrentActiveMode()I" />
+		<method name="getCurrentMode()I" />
+		<method name="getModes()I" />
+		<method name="getTemplate()Landroid/service/controls/templates/ControlTemplate;" />
+		<field name="FLAG_MODE_COOL" />
+		<field name="FLAG_MODE_ECO" />
+		<field name="FLAG_MODE_HEAT" />
+		<field name="FLAG_MODE_HEAT_COOL" />
+		<field name="FLAG_MODE_OFF" />
+		<field name="MODE_COOL" />
+		<field name="MODE_ECO" />
+		<field name="MODE_HEAT" />
+		<field name="MODE_HEAT_COOL" />
+		<field name="MODE_OFF" />
+		<field name="MODE_UNKNOWN" />
+	</class>
+	<class name="android/service/controls/templates/ThumbnailTemplate" since="31">
+		<extends name="android/service/controls/templates/ControlTemplate" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ZLandroid/graphics/drawable/Icon;Ljava/lang/CharSequence;)V" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getThumbnail()Landroid/graphics/drawable/Icon;" />
+		<method name="isActive()Z" />
+	</class>
+	<class name="android/service/controls/templates/ToggleRangeTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/service/controls/templates/ControlButton;Landroid/service/controls/templates/RangeTemplate;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ZLjava/lang/CharSequence;Landroid/service/controls/templates/RangeTemplate;)V" />
+		<method name="getActionDescription()Ljava/lang/CharSequence;" />
+		<method name="getRange()Landroid/service/controls/templates/RangeTemplate;" />
+		<method name="isChecked()Z" />
+	</class>
+	<class name="android/service/controls/templates/ToggleTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/service/controls/templates/ControlButton;)V" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="isChecked()Z" />
+	</class>
+	<class name="android/service/dreams/DreamService" since="17">
+		<extends name="android/app/Service" />
+		<implements name="android/view/Window$Callback" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="findViewById(I)Landroid/view/View;" />
+		<method name="finish()V" />
+		<method name="getWindow()Landroid/view/Window;" />
+		<method name="getWindowManager()Landroid/view/WindowManager;" />
+		<method name="isFullscreen()Z" />
+		<method name="isInteractive()Z" />
+		<method name="isScreenBright()Z" />
+		<method name="onDreamingStarted()V" />
+		<method name="onDreamingStopped()V" />
+		<method name="onWakeUp()V" since="21" />
+		<method name="requireViewById(I)Landroid/view/View;" since="28" />
+		<method name="setContentView(I)V" />
+		<method name="setContentView(Landroid/view/View;)V" />
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="setFullscreen(Z)V" />
+		<method name="setInteractive(Z)V" />
+		<method name="setScreenBright(Z)V" />
+		<method name="wakeUp()V" since="21" />
+		<field name="DREAM_META_DATA" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/service/media/CameraPrewarmService" since="23">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCooldown(Z)V" />
+		<method name="onPrewarm()V" />
+	</class>
+	<class name="android/service/media/MediaBrowserService" since="21">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getBrowserRootHints()Landroid/os/Bundle;" since="24" />
+		<method name="getCurrentBrowserInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;" since="28" />
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;" />
+		<method name="notifyChildrenChanged(Ljava/lang/String;)V" />
+		<method name="notifyChildrenChanged(Ljava/lang/String;Landroid/os/Bundle;)V" since="24" />
+		<method name="onGetRoot(Ljava/lang/String;ILandroid/os/Bundle;)Landroid/service/media/MediaBrowserService$BrowserRoot;" />
+		<method name="onLoadChildren(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;)V" />
+		<method name="onLoadChildren(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;Landroid/os/Bundle;)V" since="24" />
+		<method name="onLoadItem(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;)V" since="23" />
+		<method name="setSessionToken(Landroid/media/session/MediaSession$Token;)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/service/media/MediaBrowserService$BrowserRoot" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getRootId()Ljava/lang/String;" />
+		<field name="EXTRA_OFFLINE" since="24" />
+		<field name="EXTRA_RECENT" since="24" />
+		<field name="EXTRA_SUGGESTED" since="24" />
+	</class>
+	<class name="android/service/media/MediaBrowserService$Result" since="21">
+		<extends name="java/lang/Object" />
+		<method name="detach()V" />
+		<method name="sendResult(Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/service/notification/Condition" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;III)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="copy()Landroid/service/notification/Condition;" />
+		<method name="isValidId(Landroid/net/Uri;Ljava/lang/String;)Z" />
+		<method name="newId(Landroid/content/Context;)Landroid/net/Uri$Builder;" />
+		<method name="relevanceToString(I)Ljava/lang/String;" />
+		<method name="stateToString(I)Ljava/lang/String;" />
+		<field name="CREATOR" />
+		<field name="FLAG_RELEVANT_ALWAYS" />
+		<field name="FLAG_RELEVANT_NOW" />
+		<field name="SCHEME" />
+		<field name="STATE_ERROR" />
+		<field name="STATE_FALSE" />
+		<field name="STATE_TRUE" />
+		<field name="STATE_UNKNOWN" />
+		<field name="flags" />
+		<field name="icon" />
+		<field name="id" />
+		<field name="line1" />
+		<field name="line2" />
+		<field name="state" />
+		<field name="summary" />
+	</class>
+	<class name="android/service/notification/ConditionProviderService" since="24" deprecated="29">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="notifyCondition(Landroid/service/notification/Condition;)V" deprecated="29" />
+		<method name="notifyConditions([Landroid/service/notification/Condition;)V" deprecated="29" />
+		<method name="onConnected()V" deprecated="29" />
+		<method name="onRequestConditions(I)V" deprecated="29" />
+		<method name="onSubscribe(Landroid/net/Uri;)V" deprecated="29" />
+		<method name="onUnsubscribe(Landroid/net/Uri;)V" deprecated="29" />
+		<method name="requestRebind(Landroid/content/ComponentName;)V" since="26" deprecated="29" />
+		<method name="requestUnbind()V" since="26" deprecated="29" />
+		<field name="EXTRA_RULE_ID" deprecated="29" />
+		<field name="META_DATA_CONFIGURATION_ACTIVITY" deprecated="29" />
+		<field name="META_DATA_RULE_INSTANCE_LIMIT" deprecated="29" />
+		<field name="META_DATA_RULE_TYPE" deprecated="29" />
+		<field name="SERVICE_INTERFACE" deprecated="29" />
+	</class>
+	<class name="android/service/notification/NotificationListenerService" since="18">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cancelAllNotifications()V" />
+		<method name="cancelNotification(Ljava/lang/String;)V" since="21" />
+		<method name="cancelNotification(Ljava/lang/String;Ljava/lang/String;I)V" deprecated="21" />
+		<method name="cancelNotifications([Ljava/lang/String;)V" since="21" />
+		<method name="clearRequestedListenerHints()V" since="29" />
+		<method name="getActiveNotifications()[Landroid/service/notification/StatusBarNotification;" />
+		<method name="getActiveNotifications([Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;" since="21" />
+		<method name="getCurrentInterruptionFilter()I" since="21" />
+		<method name="getCurrentListenerHints()I" since="21" />
+		<method name="getCurrentRanking()Landroid/service/notification/NotificationListenerService$RankingMap;" since="21" />
+		<method name="getNotificationChannelGroups(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26" />
+		<method name="getNotificationChannels(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26" />
+		<method name="getSnoozedNotifications()[Landroid/service/notification/StatusBarNotification;" since="26" />
+		<method name="migrateNotificationFilter(ILjava/util/List;)V" since="31" />
+		<method name="onInterruptionFilterChanged(I)V" since="21" />
+		<method name="onListenerConnected()V" since="21" />
+		<method name="onListenerDisconnected()V" since="24" />
+		<method name="onListenerHintsChanged(I)V" since="21" />
+		<method name="onNotificationChannelGroupModified(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V" since="26" />
+		<method name="onNotificationChannelModified(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V" since="26" />
+		<method name="onNotificationPosted(Landroid/service/notification/StatusBarNotification;)V" />
+		<method name="onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21" />
+		<method name="onNotificationRankingUpdate(Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21" />
+		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)V" />
+		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21" />
+		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V" since="26" />
+		<method name="onSilentStatusBarIconsVisibilityChanged(Z)V" since="29" />
+		<method name="requestInterruptionFilter(I)V" since="21" />
+		<method name="requestListenerHints(I)V" since="21" />
+		<method name="requestRebind(Landroid/content/ComponentName;)V" since="24" />
+		<method name="requestUnbind()V" since="24" />
+		<method name="setNotificationsShown([Ljava/lang/String;)V" since="23" />
+		<method name="snoozeNotification(Ljava/lang/String;J)V" since="26" />
+		<method name="updateNotificationChannel(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;)V" since="26" />
+		<field name="FLAG_FILTER_TYPE_ALERTING" since="31" />
+		<field name="FLAG_FILTER_TYPE_CONVERSATIONS" since="31" />
+		<field name="FLAG_FILTER_TYPE_ONGOING" since="31" />
+		<field name="FLAG_FILTER_TYPE_SILENT" since="31" />
+		<field name="HINT_HOST_DISABLE_CALL_EFFECTS" since="24" />
+		<field name="HINT_HOST_DISABLE_EFFECTS" since="21" />
+		<field name="HINT_HOST_DISABLE_NOTIFICATION_EFFECTS" since="24" />
+		<field name="INTERRUPTION_FILTER_ALARMS" since="23" />
+		<field name="INTERRUPTION_FILTER_ALL" since="21" />
+		<field name="INTERRUPTION_FILTER_NONE" since="21" />
+		<field name="INTERRUPTION_FILTER_PRIORITY" since="21" />
+		<field name="INTERRUPTION_FILTER_UNKNOWN" since="23" />
+		<field name="META_DATA_DEFAULT_FILTER_TYPES" since="31" />
+		<field name="META_DATA_DISABLED_FILTER_TYPES" since="31" />
+		<field name="NOTIFICATION_CHANNEL_OR_GROUP_ADDED" since="26" />
+		<field name="NOTIFICATION_CHANNEL_OR_GROUP_DELETED" since="26" />
+		<field name="NOTIFICATION_CHANNEL_OR_GROUP_UPDATED" since="26" />
+		<field name="REASON_APP_CANCEL" since="26" />
+		<field name="REASON_APP_CANCEL_ALL" since="26" />
+		<field name="REASON_CANCEL" since="26" />
+		<field name="REASON_CANCEL_ALL" since="26" />
+		<field name="REASON_CHANNEL_BANNED" since="26" />
+		<field name="REASON_CHANNEL_REMOVED" since="31" />
+		<field name="REASON_CLEAR_DATA" since="31" />
+		<field name="REASON_CLICK" since="26" />
+		<field name="REASON_ERROR" since="26" />
+		<field name="REASON_GROUP_OPTIMIZATION" since="26" />
+		<field name="REASON_GROUP_SUMMARY_CANCELED" since="26" />
+		<field name="REASON_LISTENER_CANCEL" since="26" />
+		<field name="REASON_LISTENER_CANCEL_ALL" since="26" />
+		<field name="REASON_PACKAGE_BANNED" since="26" />
+		<field name="REASON_PACKAGE_CHANGED" since="26" />
+		<field name="REASON_PACKAGE_SUSPENDED" since="26" />
+		<field name="REASON_PROFILE_TURNED_OFF" since="26" />
+		<field name="REASON_SNOOZED" since="26" />
+		<field name="REASON_TIMEOUT" since="26" />
+		<field name="REASON_UNAUTOBUNDLED" since="26" />
+		<field name="REASON_USER_STOPPED" since="26" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SUPPRESSED_EFFECT_SCREEN_OFF" since="24" deprecated="28" />
+		<field name="SUPPRESSED_EFFECT_SCREEN_ON" since="24" deprecated="28" />
+	</class>
+	<class name="android/service/notification/NotificationListenerService$Ranking" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="canBubble()Z" since="29" />
+		<method name="canShowBadge()Z" since="26" />
+		<method name="getChannel()Landroid/app/NotificationChannel;" since="26" />
+		<method name="getConversationShortcutInfo()Landroid/content/pm/ShortcutInfo;" since="31" />
+		<method name="getImportance()I" since="24" />
+		<method name="getImportanceExplanation()Ljava/lang/CharSequence;" since="24" />
+		<method name="getKey()Ljava/lang/String;" />
+		<method name="getLastAudiblyAlertedMillis()J" since="29" />
+		<method name="getLockscreenVisibilityOverride()I" since="31" />
+		<method name="getOverrideGroupKey()Ljava/lang/String;" since="24" />
+		<method name="getRank()I" />
+		<method name="getSmartActions()Ljava/util/List;" since="29" />
+		<method name="getSmartReplies()Ljava/util/List;" since="29" />
+		<method name="getSuppressedVisualEffects()I" since="24" />
+		<method name="getUserSentiment()I" since="28" />
+		<method name="isAmbient()Z" />
+		<method name="isConversation()Z" since="31" />
+		<method name="isSuspended()Z" since="28" />
+		<method name="matchesInterruptionFilter()Z" />
+		<field name="USER_SENTIMENT_NEGATIVE" since="28" />
+		<field name="USER_SENTIMENT_NEUTRAL" since="28" />
+		<field name="USER_SENTIMENT_POSITIVE" since="28" />
+		<field name="VISIBILITY_NO_OVERRIDE" since="31" />
+	</class>
+	<class name="android/service/notification/NotificationListenerService$RankingMap" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getOrderedKeys()[Ljava/lang/String;" />
+		<method name="getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/notification/StatusBarNotification" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IIILandroid/app/Notification;Landroid/os/UserHandle;J)V" deprecated="26" />
+		<method name="clone()Landroid/service/notification/StatusBarNotification;" />
+		<method name="getGroupKey()Ljava/lang/String;" since="21" />
+		<method name="getId()I" />
+		<method name="getKey()Ljava/lang/String;" since="20" />
+		<method name="getNotification()Landroid/app/Notification;" />
+		<method name="getOpPkg()Ljava/lang/String;" since="29" />
+		<method name="getOverrideGroupKey()Ljava/lang/String;" since="24" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getPostTime()J" />
+		<method name="getTag()Ljava/lang/String;" />
+		<method name="getUid()I" since="29" />
+		<method name="getUser()Landroid/os/UserHandle;" since="21" />
+		<method name="getUserId()I" deprecated="21" />
+		<method name="isAppGroup()Z" since="30" />
+		<method name="isClearable()Z" />
+		<method name="isGroup()Z" since="24" />
+		<method name="isOngoing()Z" />
+		<method name="setOverrideGroupKey(Ljava/lang/String;)V" since="24" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/notification/ZenPolicy" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getPriorityCallSenders()I" />
+		<method name="getPriorityCategoryAlarms()I" />
+		<method name="getPriorityCategoryCalls()I" />
+		<method name="getPriorityCategoryConversations()I" since="30" />
+		<method name="getPriorityCategoryEvents()I" />
+		<method name="getPriorityCategoryMedia()I" />
+		<method name="getPriorityCategoryMessages()I" />
+		<method name="getPriorityCategoryReminders()I" />
+		<method name="getPriorityCategoryRepeatCallers()I" />
+		<method name="getPriorityCategorySystem()I" />
+		<method name="getPriorityConversationSenders()I" since="30" />
+		<method name="getPriorityMessageSenders()I" />
+		<method name="getVisualEffectAmbient()I" />
+		<method name="getVisualEffectBadge()I" />
+		<method name="getVisualEffectFullScreenIntent()I" />
+		<method name="getVisualEffectLights()I" />
+		<method name="getVisualEffectNotificationList()I" />
+		<method name="getVisualEffectPeek()I" />
+		<method name="getVisualEffectStatusBar()I" />
+		<field name="CONVERSATION_SENDERS_ANYONE" since="30" />
+		<field name="CONVERSATION_SENDERS_IMPORTANT" since="30" />
+		<field name="CONVERSATION_SENDERS_NONE" since="30" />
+		<field name="CONVERSATION_SENDERS_UNSET" since="30" />
+		<field name="CREATOR" />
+		<field name="PEOPLE_TYPE_ANYONE" />
+		<field name="PEOPLE_TYPE_CONTACTS" />
+		<field name="PEOPLE_TYPE_NONE" />
+		<field name="PEOPLE_TYPE_STARRED" />
+		<field name="PEOPLE_TYPE_UNSET" />
+		<field name="STATE_ALLOW" />
+		<field name="STATE_DISALLOW" />
+		<field name="STATE_UNSET" />
+	</class>
+	<class name="android/service/notification/ZenPolicy$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="allowAlarms(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowAllSounds()Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowCalls(I)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowConversations(I)Landroid/service/notification/ZenPolicy$Builder;" since="30" />
+		<method name="allowEvents(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowMedia(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowMessages(I)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowReminders(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowRepeatCallers(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="allowSystem(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="build()Landroid/service/notification/ZenPolicy;" />
+		<method name="disallowAllSounds()Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="hideAllVisualEffects()Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showAllVisualEffects()Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showBadges(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showFullScreenIntent(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showInAmbientDisplay(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showInNotificationList(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showLights(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showPeeking(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+		<method name="showStatusBarIcons(Z)Landroid/service/notification/ZenPolicy$Builder;" />
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onFailure(Landroid/service/quickaccesswallet/GetWalletCardsError;)V" />
+		<method name="onSuccess(Landroid/service/quickaccesswallet/GetWalletCardsResponse;)V" />
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsError" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;)V" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getMessage()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsRequest" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(IIII)V" />
+		<method name="getCardHeightPx()I" />
+		<method name="getCardWidthPx()I" />
+		<method name="getIconSizePx()I" />
+		<method name="getMaxCards()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsResponse" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/util/List;I)V" />
+		<method name="getSelectedIndex()I" />
+		<method name="getWalletCards()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/quickaccesswallet/QuickAccessWalletService" since="30">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onWalletCardSelected(Landroid/service/quickaccesswallet/SelectWalletCardRequest;)V" />
+		<method name="onWalletCardsRequested(Landroid/service/quickaccesswallet/GetWalletCardsRequest;Landroid/service/quickaccesswallet/GetWalletCardsCallback;)V" />
+		<method name="onWalletDismissed()V" />
+		<method name="sendWalletServiceEvent(Landroid/service/quickaccesswallet/WalletServiceEvent;)V" />
+		<field name="ACTION_VIEW_WALLET" />
+		<field name="ACTION_VIEW_WALLET_SETTINGS" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/service/quickaccesswallet/SelectWalletCardRequest" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getCardId()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/quickaccesswallet/WalletCard" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCardIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getCardId()Ljava/lang/String;" />
+		<method name="getCardImage()Landroid/graphics/drawable/Icon;" />
+		<method name="getCardLabel()Ljava/lang/CharSequence;" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getPendingIntent()Landroid/app/PendingIntent;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/quickaccesswallet/WalletCard$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" />
+		<method name="build()Landroid/service/quickaccesswallet/WalletCard;" />
+		<method name="setCardIcon(Landroid/graphics/drawable/Icon;)Landroid/service/quickaccesswallet/WalletCard$Builder;" />
+		<method name="setCardLabel(Ljava/lang/CharSequence;)Landroid/service/quickaccesswallet/WalletCard$Builder;" />
+	</class>
+	<class name="android/service/quickaccesswallet/WalletServiceEvent" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getEventType()I" />
+		<field name="CREATOR" />
+		<field name="TYPE_NFC_PAYMENT_STARTED" />
+	</class>
+	<class name="android/service/quicksettings/Tile" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getState()I" />
+		<method name="getStateDescription()Ljava/lang/CharSequence;" since="30" />
+		<method name="getSubtitle()Ljava/lang/CharSequence;" since="29" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" />
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)V" />
+		<method name="setLabel(Ljava/lang/CharSequence;)V" />
+		<method name="setState(I)V" />
+		<method name="setStateDescription(Ljava/lang/CharSequence;)V" since="30" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V" since="29" />
+		<method name="updateTile()V" />
+		<field name="CREATOR" />
+		<field name="STATE_ACTIVE" />
+		<field name="STATE_INACTIVE" />
+		<field name="STATE_UNAVAILABLE" />
+	</class>
+	<class name="android/service/quicksettings/TileService" since="24">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getQsTile()Landroid/service/quicksettings/Tile;" />
+		<method name="isLocked()Z" />
+		<method name="isSecure()Z" />
+		<method name="onClick()V" />
+		<method name="onStartListening()V" />
+		<method name="onStopListening()V" />
+		<method name="onTileAdded()V" />
+		<method name="onTileRemoved()V" />
+		<method name="requestListeningState(Landroid/content/Context;Landroid/content/ComponentName;)V" />
+		<method name="showDialog(Landroid/app/Dialog;)V" />
+		<method name="startActivityAndCollapse(Landroid/content/Intent;)V" />
+		<method name="unlockAndRun(Ljava/lang/Runnable;)V" />
+		<field name="ACTION_QS_TILE" />
+		<field name="ACTION_QS_TILE_PREFERENCES" />
+		<field name="META_DATA_ACTIVE_TILE" />
+		<field name="META_DATA_TOGGLEABLE_TILE" since="30" />
+	</class>
+	<class name="android/service/restrictions/RestrictionsReceiver" since="21">
+		<extends name="android/content/BroadcastReceiver" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onRequestPermission(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)V" />
+	</class>
+	<class name="android/service/textservice/SpellCheckerService" since="14">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createSession()Landroid/service/textservice/SpellCheckerService$Session;" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/service/textservice/SpellCheckerService$Session" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getBundle()Landroid/os/Bundle;" />
+		<method name="getLocale()Ljava/lang/String;" />
+		<method name="getSupportedAttributes()I" since="31" />
+		<method name="onCancel()V" />
+		<method name="onClose()V" since="15" />
+		<method name="onCreate()V" />
+		<method name="onGetSentenceSuggestionsMultiple([Landroid/view/textservice/TextInfo;I)[Landroid/view/textservice/SentenceSuggestionsInfo;" since="16" />
+		<method name="onGetSuggestions(Landroid/view/textservice/TextInfo;I)Landroid/view/textservice/SuggestionsInfo;" />
+		<method name="onGetSuggestionsMultiple([Landroid/view/textservice/TextInfo;IZ)[Landroid/view/textservice/SuggestionsInfo;" />
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector" since="21" removed="31">
+		<extends name="java/lang/Object" />
+		<method name="createEnrollIntent()Landroid/content/Intent;" />
+		<method name="createReEnrollIntent()Landroid/content/Intent;" />
+		<method name="createUnEnrollIntent()Landroid/content/Intent;" />
+		<method name="getParameter(I)I" since="30" />
+		<method name="getSupportedAudioCapabilities()I" since="30" />
+		<method name="getSupportedRecognitionModes()I" />
+		<method name="queryParameter(I)Landroid/service/voice/AlwaysOnHotwordDetector$ModelParamRange;" since="30" />
+		<method name="setParameter(II)I" since="30" />
+		<method name="startRecognition(I)Z" />
+		<method name="stopRecognition()Z" />
+		<field name="AUDIO_CAPABILITY_ECHO_CANCELLATION" since="30" />
+		<field name="AUDIO_CAPABILITY_NOISE_SUPPRESSION" since="30" />
+		<field name="MODEL_PARAM_THRESHOLD_FACTOR" since="30" />
+		<field name="RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS" />
+		<field name="RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO" />
+		<field name="RECOGNITION_FLAG_ENABLE_AUDIO_ECHO_CANCELLATION" since="30" />
+		<field name="RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION" since="30" />
+		<field name="RECOGNITION_MODE_USER_IDENTIFICATION" />
+		<field name="RECOGNITION_MODE_VOICE_TRIGGER" />
+		<field name="STATE_HARDWARE_UNAVAILABLE" />
+		<field name="STATE_KEYPHRASE_ENROLLED" />
+		<field name="STATE_KEYPHRASE_UNENROLLED" />
+		<field name="STATE_KEYPHRASE_UNSUPPORTED" deprecated="30" />
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector$Callback" since="21" removed="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAvailabilityChanged(I)V" />
+		<method name="onDetected(Landroid/service/voice/AlwaysOnHotwordDetector$EventPayload;)V" />
+		<method name="onError()V" />
+		<method name="onRecognitionPaused()V" />
+		<method name="onRecognitionResumed()V" />
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector$EventPayload" since="21" removed="31">
+		<extends name="java/lang/Object" />
+		<method name="getCaptureAudioFormat()Landroid/media/AudioFormat;" />
+		<method name="getTriggerAudio()[B" />
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector$ModelParamRange" since="30" removed="31">
+		<extends name="java/lang/Object" />
+		<method name="getEnd()I" />
+		<method name="getStart()I" />
+	</class>
+	<class name="android/service/voice/VisibleActivityInfo" since="33">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getActivityId()Landroid/service/voice/VoiceInteractionSession$ActivityId;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionService" since="21">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createAlwaysOnHotwordDetector(Ljava/lang/String;Ljava/util/Locale;Landroid/service/voice/AlwaysOnHotwordDetector$Callback;)Landroid/service/voice/AlwaysOnHotwordDetector;" removed="31" />
+		<method name="getDisabledShowContext()I" since="23" />
+		<method name="isActiveService(Landroid/content/Context;Landroid/content/ComponentName;)Z" />
+		<method name="onGetSupportedVoiceActions(Ljava/util/Set;)Ljava/util/Set;" since="29" />
+		<method name="onLaunchVoiceAssistFromKeyguard()V" since="23" />
+		<method name="onReady()V" />
+		<method name="onShutdown()V" />
+		<method name="setDisabledShowContext(I)V" since="23" />
+		<method name="setUiHints(Landroid/os/Bundle;)V" since="29" />
+		<method name="showSession(Landroid/os/Bundle;I)V" since="23" />
+		<method name="startSession(Landroid/os/Bundle;)V" removed="23" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/ComponentCallbacks2" since="23" />
+		<implements name="android/view/KeyEvent$Callback" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/os/Handler;)V" />
+		<method name="closeSystemDialogs()V" since="23" />
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="23" />
+		<method name="finish()V" />
+		<method name="getContext()Landroid/content/Context;" since="23" />
+		<method name="getDisabledShowContext()I" since="23" />
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="23" />
+		<method name="getUserDisabledShowContext()I" since="23" />
+		<method name="getWindow()Landroid/app/Dialog;" since="23" />
+		<method name="hide()V" since="23" />
+		<method name="onAssistStructureFailure(Ljava/lang/Throwable;)V" since="23" />
+		<method name="onBackPressed()V" since="23" />
+		<method name="onCancelRequest(Landroid/service/voice/VoiceInteractionSession$Request;)V" since="23" />
+		<method name="onCloseSystemDialogs()V" />
+		<method name="onComputeInsets(Landroid/service/voice/VoiceInteractionSession$Insets;)V" since="23" />
+		<method name="onCreate()V" since="23" />
+		<method name="onCreate(Landroid/os/Bundle;)V" removed="23" />
+		<method name="onCreateContentView()Landroid/view/View;" since="23" />
+		<method name="onDestroy()V" />
+		<method name="onDirectActionsInvalidated(Landroid/service/voice/VoiceInteractionSession$ActivityId;)V" since="29" />
+		<method name="onGetSupportedCommands([Ljava/lang/String;)[Z" since="23" />
+		<method name="onHandleAssist(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;)V" since="23" deprecated="29" />
+		<method name="onHandleAssist(Landroid/service/voice/VoiceInteractionSession$AssistState;)V" since="29" />
+		<method name="onHandleAssistSecondary(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;II)V" since="24" deprecated="29" />
+		<method name="onHandleScreenshot(Landroid/graphics/Bitmap;)V" since="23" />
+		<method name="onHide()V" since="23" />
+		<method name="onLockscreenShown()V" since="23" />
+		<method name="onPrepareShow(Landroid/os/Bundle;I)V" since="26" />
+		<method name="onRequestAbortVoice(Landroid/service/voice/VoiceInteractionSession$AbortVoiceRequest;)V" since="23" />
+		<method name="onRequestCommand(Landroid/service/voice/VoiceInteractionSession$CommandRequest;)V" since="23" />
+		<method name="onRequestCompleteVoice(Landroid/service/voice/VoiceInteractionSession$CompleteVoiceRequest;)V" since="23" />
+		<method name="onRequestConfirmation(Landroid/service/voice/VoiceInteractionSession$ConfirmationRequest;)V" since="23" />
+		<method name="onRequestPickOption(Landroid/service/voice/VoiceInteractionSession$PickOptionRequest;)V" since="23" />
+		<method name="onShow(Landroid/os/Bundle;I)V" since="23" />
+		<method name="onTaskFinished(Landroid/content/Intent;I)V" since="23" />
+		<method name="onTaskStarted(Landroid/content/Intent;I)V" since="23" />
+		<method name="performDirectAction(Landroid/app/DirectAction;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29" />
+		<method name="registerVisibleActivityCallback(Ljava/util/concurrent/Executor;Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33" />
+		<method name="requestDirectActions(Landroid/service/voice/VoiceInteractionSession$ActivityId;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29" />
+		<method name="setContentView(Landroid/view/View;)V" />
+		<method name="setDisabledShowContext(I)V" since="23" />
+		<method name="setKeepAwake(Z)V" since="23" />
+		<method name="setTheme(I)V" since="23" />
+		<method name="setUiEnabled(Z)V" since="26" />
+		<method name="show(Landroid/os/Bundle;I)V" since="23" />
+		<method name="startAssistantActivity(Landroid/content/Intent;)V" since="26" />
+		<method name="startVoiceActivity(Landroid/content/Intent;)V" since="23" />
+		<method name="unregisterVisibleActivityCallback(Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33" />
+		<field name="SHOW_SOURCE_ACTIVITY" since="24" />
+		<field name="SHOW_SOURCE_APPLICATION" since="23" />
+		<field name="SHOW_SOURCE_ASSIST_GESTURE" since="23" />
+		<field name="SHOW_SOURCE_AUTOMOTIVE_SYSTEM_UI" since="29" />
+		<field name="SHOW_SOURCE_NOTIFICATION" since="29" />
+		<field name="SHOW_SOURCE_PUSH_TO_TALK" since="29" />
+		<field name="SHOW_WITH_ASSIST" since="23" />
+		<field name="SHOW_WITH_SCREENSHOT" since="23" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$AbortVoiceRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request" />
+		<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23" />
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;" />
+		<method name="sendAbortResult(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$ActivityId" since="29">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$AssistState" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getActivityId()Landroid/service/voice/VoiceInteractionSession$ActivityId;" />
+		<method name="getAssistContent()Landroid/app/assist/AssistContent;" />
+		<method name="getAssistData()Landroid/os/Bundle;" />
+		<method name="getAssistStructure()Landroid/app/assist/AssistStructure;" />
+		<method name="getCount()I" />
+		<method name="getIndex()I" />
+		<method name="isFocused()Z" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$CommandRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request" />
+		<method name="getCommand()Ljava/lang/String;" />
+		<method name="sendIntermediateResult(Landroid/os/Bundle;)V" />
+		<method name="sendResult(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$CompleteVoiceRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request" />
+		<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23" />
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;" />
+		<method name="sendCompleteResult(Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$ConfirmationRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request" />
+		<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23" />
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;" />
+		<method name="sendConfirmationResult(ZLandroid/os/Bundle;)V" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$Insets" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="TOUCHABLE_INSETS_CONTENT" />
+		<field name="TOUCHABLE_INSETS_FRAME" />
+		<field name="TOUCHABLE_INSETS_REGION" />
+		<field name="contentInsets" />
+		<field name="touchableInsets" />
+		<field name="touchableRegion" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$PickOptionRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request" />
+		<method name="getOptions()[Landroid/app/VoiceInteractor$PickOptionRequest$Option;" />
+		<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23" />
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;" />
+		<method name="sendIntermediatePickOptionResult([Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V" />
+		<method name="sendPickOptionResult([Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$Request" since="23">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="getCallingPackage()Ljava/lang/String;" />
+		<method name="getCallingUid()I" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="isActive()Z" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$VisibleActivityCallback" since="33">
+		<method name="onInvisible(Landroid/service/voice/VoiceInteractionSession$ActivityId;)V" />
+		<method name="onVisible(Landroid/service/voice/VisibleActivityInfo;)V" />
+	</class>
+	<class name="android/service/voice/VoiceInteractionSessionService" since="21">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onNewSession(Landroid/os/Bundle;)Landroid/service/voice/VoiceInteractionSession;" />
+	</class>
+	<class name="android/service/vr/VrListenerService" since="24">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="isVrModePackageEnabled(Landroid/content/Context;Landroid/content/ComponentName;)Z" />
+		<method name="onCurrentVrActivityChanged(Landroid/content/ComponentName;)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/service/wallpaper/WallpaperService" since="7">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCreateEngine()Landroid/service/wallpaper/WallpaperService$Engine;" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/service/wallpaper/WallpaperService$Engine" since="7">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/service/wallpaper/WallpaperService;)V" />
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="14" />
+		<method name="getDesiredMinimumHeight()I" />
+		<method name="getDesiredMinimumWidth()I" />
+		<method name="getDisplayContext()Landroid/content/Context;" since="29" />
+		<method name="getSurfaceHolder()Landroid/view/SurfaceHolder;" />
+		<method name="isPreview()Z" />
+		<method name="isVisible()Z" />
+		<method name="notifyColorsChanged()V" since="27" />
+		<method name="onApplyWindowInsets(Landroid/view/WindowInsets;)V" since="21" />
+		<method name="onCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;" />
+		<method name="onComputeColors()Landroid/app/WallpaperColors;" since="27" />
+		<method name="onCreate(Landroid/view/SurfaceHolder;)V" />
+		<method name="onDesiredSizeChanged(II)V" />
+		<method name="onDestroy()V" />
+		<method name="onOffsetsChanged(FFFFII)V" />
+		<method name="onSurfaceChanged(Landroid/view/SurfaceHolder;III)V" />
+		<method name="onSurfaceCreated(Landroid/view/SurfaceHolder;)V" />
+		<method name="onSurfaceDestroyed(Landroid/view/SurfaceHolder;)V" />
+		<method name="onSurfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V" since="9" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)V" />
+		<method name="onVisibilityChanged(Z)V" />
+		<method name="onZoomChanged(F)V" since="30" />
+		<method name="setOffsetNotificationsEnabled(Z)V" since="15" />
+		<method name="setTouchEventsEnabled(Z)V" />
+	</class>
+	<class name="android/speech/RecognitionListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="onBeginningOfSpeech()V" />
+		<method name="onBufferReceived([B)V" />
+		<method name="onEndOfSpeech()V" />
+		<method name="onError(I)V" />
+		<method name="onEvent(ILandroid/os/Bundle;)V" />
+		<method name="onPartialResults(Landroid/os/Bundle;)V" />
+		<method name="onReadyForSpeech(Landroid/os/Bundle;)V" />
+		<method name="onResults(Landroid/os/Bundle;)V" />
+		<method name="onRmsChanged(F)V" />
+	</class>
+	<class name="android/speech/RecognitionService" since="8">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCancel(Landroid/speech/RecognitionService$Callback;)V" />
+		<method name="onStartListening(Landroid/content/Intent;Landroid/speech/RecognitionService$Callback;)V" />
+		<method name="onStopListening(Landroid/speech/RecognitionService$Callback;)V" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/speech/RecognitionService$Callback" since="8">
+		<extends name="java/lang/Object" />
+		<method name="beginningOfSpeech()V" />
+		<method name="bufferReceived([B)V" />
+		<method name="endOfSpeech()V" />
+		<method name="error(I)V" />
+		<method name="getCallingAttributionSource()Landroid/content/AttributionSource;" since="31" />
+		<method name="getCallingUid()I" since="23" />
+		<method name="partialResults(Landroid/os/Bundle;)V" />
+		<method name="readyForSpeech(Landroid/os/Bundle;)V" />
+		<method name="results(Landroid/os/Bundle;)V" />
+		<method name="rmsChanged(F)V" />
+	</class>
+	<class name="android/speech/RecognizerIntent" since="3">
+		<extends name="java/lang/Object" />
+		<method name="getVoiceDetailsIntent(Landroid/content/Context;)Landroid/content/Intent;" since="8" />
+		<field name="ACTION_GET_LANGUAGE_DETAILS" since="8" />
+		<field name="ACTION_RECOGNIZE_SPEECH" />
+		<field name="ACTION_VOICE_SEARCH_HANDS_FREE" since="16" />
+		<field name="ACTION_WEB_SEARCH" />
+		<field name="DETAILS_META_DATA" since="8" />
+		<field name="EXTRA_AUDIO_INJECT_SOURCE" since="31" />
+		<field name="EXTRA_CALLING_PACKAGE" since="8" />
+		<field name="EXTRA_CONFIDENCE_SCORES" since="14" />
+		<field name="EXTRA_LANGUAGE" />
+		<field name="EXTRA_LANGUAGE_MODEL" />
+		<field name="EXTRA_LANGUAGE_PREFERENCE" since="8" />
+		<field name="EXTRA_MAX_RESULTS" />
+		<field name="EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE" since="8" />
+		<field name="EXTRA_ORIGIN" since="14" />
+		<field name="EXTRA_PARTIAL_RESULTS" since="8" />
+		<field name="EXTRA_PREFER_OFFLINE" since="23" />
+		<field name="EXTRA_PROMPT" />
+		<field name="EXTRA_RESULTS" />
+		<field name="EXTRA_RESULTS_PENDINGINTENT" />
+		<field name="EXTRA_RESULTS_PENDINGINTENT_BUNDLE" />
+		<field name="EXTRA_SECURE" since="16" />
+		<field name="EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS" since="8" />
+		<field name="EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS" since="8" />
+		<field name="EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS" since="8" />
+		<field name="EXTRA_SUPPORTED_LANGUAGES" since="8" />
+		<field name="EXTRA_WEB_SEARCH_ONLY" since="11" />
+		<field name="LANGUAGE_MODEL_FREE_FORM" />
+		<field name="LANGUAGE_MODEL_WEB_SEARCH" />
+		<field name="RESULT_AUDIO_ERROR" />
+		<field name="RESULT_CLIENT_ERROR" />
+		<field name="RESULT_NETWORK_ERROR" />
+		<field name="RESULT_NO_MATCH" />
+		<field name="RESULT_SERVER_ERROR" />
+	</class>
+	<class name="android/speech/RecognizerResultsIntent" since="10">
+		<extends name="java/lang/Object" />
+		<field name="ACTION_VOICE_SEARCH_RESULTS" />
+		<field name="EXTRA_VOICE_SEARCH_RESULT_HTML" />
+		<field name="EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS" />
+		<field name="EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS" />
+		<field name="EXTRA_VOICE_SEARCH_RESULT_STRINGS" />
+		<field name="EXTRA_VOICE_SEARCH_RESULT_URLS" />
+		<field name="URI_SCHEME_INLINE" />
+	</class>
+	<class name="android/speech/SpeechRecognizer" since="8">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="createOnDeviceSpeechRecognizer(Landroid/content/Context;)Landroid/speech/SpeechRecognizer;" since="31" />
+		<method name="createSpeechRecognizer(Landroid/content/Context;)Landroid/speech/SpeechRecognizer;" />
+		<method name="createSpeechRecognizer(Landroid/content/Context;Landroid/content/ComponentName;)Landroid/speech/SpeechRecognizer;" />
+		<method name="destroy()V" />
+		<method name="isOnDeviceRecognitionAvailable(Landroid/content/Context;)Z" since="31" />
+		<method name="isRecognitionAvailable(Landroid/content/Context;)Z" />
+		<method name="setRecognitionListener(Landroid/speech/RecognitionListener;)V" />
+		<method name="startListening(Landroid/content/Intent;)V" />
+		<method name="stopListening()V" />
+		<field name="CONFIDENCE_SCORES" since="14" />
+		<field name="ERROR_AUDIO" />
+		<field name="ERROR_CLIENT" />
+		<field name="ERROR_INSUFFICIENT_PERMISSIONS" />
+		<field name="ERROR_LANGUAGE_NOT_SUPPORTED" since="31" />
+		<field name="ERROR_LANGUAGE_UNAVAILABLE" since="31" />
+		<field name="ERROR_NETWORK" />
+		<field name="ERROR_NETWORK_TIMEOUT" />
+		<field name="ERROR_NO_MATCH" />
+		<field name="ERROR_RECOGNIZER_BUSY" />
+		<field name="ERROR_SERVER" />
+		<field name="ERROR_SERVER_DISCONNECTED" since="31" />
+		<field name="ERROR_SPEECH_TIMEOUT" />
+		<field name="ERROR_TOO_MANY_REQUESTS" since="31" />
+		<field name="RESULTS_RECOGNITION" />
+	</class>
+	<class name="android/speech/tts/SynthesisCallback" since="14">
+		<extends name="java/lang/Object" />
+		<method name="audioAvailable([BII)I" />
+		<method name="done()I" />
+		<method name="error()V" />
+		<method name="error(I)V" since="21" />
+		<method name="getMaxBufferSize()I" />
+		<method name="hasFinished()Z" since="21" />
+		<method name="hasStarted()Z" since="21" />
+		<method name="rangeStart(III)V" since="26" />
+		<method name="start(III)I" />
+	</class>
+	<class name="android/speech/tts/SynthesisRequest" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/os/Bundle;)V" since="21" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="getCallerUid()I" since="19" />
+		<method name="getCharSequenceText()Ljava/lang/CharSequence;" since="21" />
+		<method name="getCountry()Ljava/lang/String;" />
+		<method name="getLanguage()Ljava/lang/String;" />
+		<method name="getParams()Landroid/os/Bundle;" />
+		<method name="getPitch()I" />
+		<method name="getSpeechRate()I" />
+		<method name="getText()Ljava/lang/String;" deprecated="21" />
+		<method name="getVariant()Ljava/lang/String;" />
+		<method name="getVoiceName()Ljava/lang/String;" since="21" />
+	</class>
+	<class name="android/speech/tts/TextToSpeech" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/speech/tts/TextToSpeech$OnInitListener;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/speech/tts/TextToSpeech$OnInitListener;Ljava/lang/String;)V" since="14" />
+		<method name="addEarcon(Ljava/lang/String;Landroid/net/Uri;)I" since="31" />
+		<method name="addEarcon(Ljava/lang/String;Ljava/io/File;)I" since="21" />
+		<method name="addEarcon(Ljava/lang/String;Ljava/lang/String;)I" deprecated="21" />
+		<method name="addEarcon(Ljava/lang/String;Ljava/lang/String;I)I" />
+		<method name="addSpeech(Ljava/lang/CharSequence;Landroid/net/Uri;)I" since="31" />
+		<method name="addSpeech(Ljava/lang/CharSequence;Ljava/io/File;)I" since="21" />
+		<method name="addSpeech(Ljava/lang/CharSequence;Ljava/lang/String;I)I" since="21" />
+		<method name="addSpeech(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="addSpeech(Ljava/lang/String;Ljava/lang/String;I)I" />
+		<method name="areDefaultsEnforced()Z" since="8" deprecated="21" />
+		<method name="getAvailableLanguages()Ljava/util/Set;" since="21" />
+		<method name="getDefaultEngine()Ljava/lang/String;" since="8" />
+		<method name="getDefaultLanguage()Ljava/util/Locale;" since="18" deprecated="21" />
+		<method name="getDefaultVoice()Landroid/speech/tts/Voice;" since="21" />
+		<method name="getEngines()Ljava/util/List;" since="14" />
+		<method name="getFeatures(Ljava/util/Locale;)Ljava/util/Set;" since="15" deprecated="21" />
+		<method name="getLanguage()Ljava/util/Locale;" deprecated="21" />
+		<method name="getMaxSpeechInputLength()I" since="18" />
+		<method name="getVoice()Landroid/speech/tts/Voice;" since="21" />
+		<method name="getVoices()Ljava/util/Set;" since="21" />
+		<method name="isLanguageAvailable(Ljava/util/Locale;)I" />
+		<method name="isSpeaking()Z" />
+		<method name="playEarcon(Ljava/lang/String;ILandroid/os/Bundle;Ljava/lang/String;)I" since="21" />
+		<method name="playEarcon(Ljava/lang/String;ILjava/util/HashMap;)I" deprecated="21" />
+		<method name="playSilence(JILjava/util/HashMap;)I" deprecated="21" />
+		<method name="playSilentUtterance(JILjava/lang/String;)I" since="21" />
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)I" since="21" />
+		<method name="setEngineByPackageName(Ljava/lang/String;)I" since="8" deprecated="15" />
+		<method name="setLanguage(Ljava/util/Locale;)I" />
+		<method name="setOnUtteranceCompletedListener(Landroid/speech/tts/TextToSpeech$OnUtteranceCompletedListener;)I" deprecated="15" />
+		<method name="setOnUtteranceProgressListener(Landroid/speech/tts/UtteranceProgressListener;)I" since="15" />
+		<method name="setPitch(F)I" />
+		<method name="setSpeechRate(F)I" />
+		<method name="setVoice(Landroid/speech/tts/Voice;)I" since="21" />
+		<method name="shutdown()V" />
+		<method name="speak(Ljava/lang/CharSequence;ILandroid/os/Bundle;Ljava/lang/String;)I" since="21" />
+		<method name="speak(Ljava/lang/String;ILjava/util/HashMap;)I" deprecated="21" />
+		<method name="stop()I" />
+		<method name="synthesizeToFile(Ljava/lang/CharSequence;Landroid/os/Bundle;Landroid/os/ParcelFileDescriptor;Ljava/lang/String;)I" since="30" />
+		<method name="synthesizeToFile(Ljava/lang/CharSequence;Landroid/os/Bundle;Ljava/io/File;Ljava/lang/String;)I" since="21" />
+		<method name="synthesizeToFile(Ljava/lang/String;Ljava/util/HashMap;Ljava/lang/String;)I" deprecated="21" />
+		<field name="ACTION_TTS_QUEUE_PROCESSING_COMPLETED" />
+		<field name="ERROR" />
+		<field name="ERROR_INVALID_REQUEST" since="21" />
+		<field name="ERROR_NETWORK" since="21" />
+		<field name="ERROR_NETWORK_TIMEOUT" since="21" />
+		<field name="ERROR_NOT_INSTALLED_YET" since="21" />
+		<field name="ERROR_OUTPUT" since="21" />
+		<field name="ERROR_SERVICE" since="21" />
+		<field name="ERROR_SYNTHESIS" since="21" />
+		<field name="LANG_AVAILABLE" />
+		<field name="LANG_COUNTRY_AVAILABLE" />
+		<field name="LANG_COUNTRY_VAR_AVAILABLE" />
+		<field name="LANG_MISSING_DATA" />
+		<field name="LANG_NOT_SUPPORTED" />
+		<field name="QUEUE_ADD" />
+		<field name="QUEUE_FLUSH" />
+		<field name="STOPPED" since="21" />
+		<field name="SUCCESS" />
+	</class>
+	<class name="android/speech/tts/TextToSpeech$Engine" since="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/speech/tts/TextToSpeech;)V" />
+		<field name="ACTION_CHECK_TTS_DATA" />
+		<field name="ACTION_GET_SAMPLE_TEXT" since="18" />
+		<field name="ACTION_INSTALL_TTS_DATA" />
+		<field name="ACTION_TTS_DATA_INSTALLED" />
+		<field name="CHECK_VOICE_DATA_BAD_DATA" deprecated="18" />
+		<field name="CHECK_VOICE_DATA_FAIL" />
+		<field name="CHECK_VOICE_DATA_MISSING_DATA" deprecated="18" />
+		<field name="CHECK_VOICE_DATA_MISSING_VOLUME" deprecated="18" />
+		<field name="CHECK_VOICE_DATA_PASS" />
+		<field name="DEFAULT_STREAM" />
+		<field name="EXTRA_AVAILABLE_VOICES" since="8" />
+		<field name="EXTRA_CHECK_VOICE_DATA_FOR" since="8" deprecated="18" />
+		<field name="EXTRA_SAMPLE_TEXT" since="18" />
+		<field name="EXTRA_TTS_DATA_INSTALLED" deprecated="18" />
+		<field name="EXTRA_UNAVAILABLE_VOICES" since="8" />
+		<field name="EXTRA_VOICE_DATA_FILES" deprecated="18" />
+		<field name="EXTRA_VOICE_DATA_FILES_INFO" deprecated="18" />
+		<field name="EXTRA_VOICE_DATA_ROOT_DIRECTORY" deprecated="18" />
+		<field name="INTENT_ACTION_TTS_SERVICE" since="14" />
+		<field name="KEY_FEATURE_EMBEDDED_SYNTHESIS" since="15" deprecated="21" />
+		<field name="KEY_FEATURE_NETWORK_RETRIES_COUNT" since="21" />
+		<field name="KEY_FEATURE_NETWORK_SYNTHESIS" since="15" deprecated="21" />
+		<field name="KEY_FEATURE_NETWORK_TIMEOUT_MS" since="21" />
+		<field name="KEY_FEATURE_NOT_INSTALLED" since="21" />
+		<field name="KEY_PARAM_PAN" since="11" />
+		<field name="KEY_PARAM_SESSION_ID" since="21" />
+		<field name="KEY_PARAM_STREAM" />
+		<field name="KEY_PARAM_UTTERANCE_ID" />
+		<field name="KEY_PARAM_VOLUME" since="11" />
+		<field name="SERVICE_META_DATA" since="14" />
+	</class>
+	<class name="android/speech/tts/TextToSpeech$EngineInfo" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="icon" />
+		<field name="label" />
+		<field name="name" />
+	</class>
+	<class name="android/speech/tts/TextToSpeech$OnInitListener" since="4">
+		<extends name="java/lang/Object" />
+		<method name="onInit(I)V" />
+	</class>
+	<class name="android/speech/tts/TextToSpeech$OnUtteranceCompletedListener" since="4" deprecated="18">
+		<extends name="java/lang/Object" />
+		<method name="onUtteranceCompleted(Ljava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="android/speech/tts/TextToSpeechService" since="14">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGetDefaultVoiceNameFor(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="onGetFeaturesForLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Set;" since="15" />
+		<method name="onGetLanguage()[Ljava/lang/String;" />
+		<method name="onGetVoices()Ljava/util/List;" since="21" />
+		<method name="onIsLanguageAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="onIsValidVoiceName(Ljava/lang/String;)I" since="21" />
+		<method name="onLoadLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="onLoadVoice(Ljava/lang/String;)I" since="21" />
+		<method name="onStop()V" />
+		<method name="onSynthesizeText(Landroid/speech/tts/SynthesisRequest;Landroid/speech/tts/SynthesisCallback;)V" />
+	</class>
+	<class name="android/speech/tts/UtteranceProgressListener" since="15">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAudioAvailable(Ljava/lang/String;[B)V" since="24" />
+		<method name="onBeginSynthesis(Ljava/lang/String;III)V" since="24" />
+		<method name="onDone(Ljava/lang/String;)V" />
+		<method name="onError(Ljava/lang/String;)V" deprecated="21" />
+		<method name="onError(Ljava/lang/String;I)V" since="21" />
+		<method name="onRangeStart(Ljava/lang/String;III)V" since="26" />
+		<method name="onStart(Ljava/lang/String;)V" />
+		<method name="onStop(Ljava/lang/String;Z)V" since="23" />
+	</class>
+	<class name="android/speech/tts/Voice" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/Locale;IIZLjava/util/Set;)V" />
+		<method name="getFeatures()Ljava/util/Set;" />
+		<method name="getLatency()I" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getQuality()I" />
+		<method name="isNetworkConnectionRequired()Z" />
+		<field name="CREATOR" />
+		<field name="LATENCY_HIGH" />
+		<field name="LATENCY_LOW" />
+		<field name="LATENCY_NORMAL" />
+		<field name="LATENCY_VERY_HIGH" />
+		<field name="LATENCY_VERY_LOW" />
+		<field name="QUALITY_HIGH" />
+		<field name="QUALITY_LOW" />
+		<field name="QUALITY_NORMAL" />
+		<field name="QUALITY_VERY_HIGH" />
+		<field name="QUALITY_VERY_LOW" />
+	</class>
+	<class name="android/system/ErrnoException" since="21">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="rethrowAsIOException()Ljava/io/IOException;" since="30" />
+		<method name="rethrowAsSocketException()Ljava/net/SocketException;" since="30" />
+		<field name="errno" />
+	</class>
+	<class name="android/system/Int64Ref" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(J)V" />
+		<field name="value" />
+	</class>
+	<class name="android/system/Os" since="21">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/io/FileDescriptor;Ljava/net/InetSocketAddress;)Ljava/io/FileDescriptor;" />
+		<method name="access(Ljava/lang/String;I)Z" />
+		<method name="bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V" />
+		<method name="bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V" since="29" />
+		<method name="chmod(Ljava/lang/String;I)V" />
+		<method name="chown(Ljava/lang/String;II)V" />
+		<method name="close(Ljava/io/FileDescriptor;)V" />
+		<method name="connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V" />
+		<method name="connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V" since="29" />
+		<method name="dup(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;" />
+		<method name="dup2(Ljava/io/FileDescriptor;I)Ljava/io/FileDescriptor;" />
+		<method name="environ()[Ljava/lang/String;" />
+		<method name="execv(Ljava/lang/String;[Ljava/lang/String;)V" />
+		<method name="execve(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V" />
+		<method name="fchmod(Ljava/io/FileDescriptor;I)V" />
+		<method name="fchown(Ljava/io/FileDescriptor;II)V" />
+		<method name="fcntlInt(Ljava/io/FileDescriptor;II)I" since="30" />
+		<method name="fdatasync(Ljava/io/FileDescriptor;)V" />
+		<method name="fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;" />
+		<method name="fstatvfs(Ljava/io/FileDescriptor;)Landroid/system/StructStatVfs;" />
+		<method name="fsync(Ljava/io/FileDescriptor;)V" />
+		<method name="ftruncate(Ljava/io/FileDescriptor;J)V" />
+		<method name="gai_strerror(I)Ljava/lang/String;" />
+		<method name="getegid()I" />
+		<method name="getenv(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="geteuid()I" />
+		<method name="getgid()I" />
+		<method name="getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;" />
+		<method name="getpid()I" />
+		<method name="getppid()I" />
+		<method name="getsockname(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;" />
+		<method name="getsockoptTimeval(Ljava/io/FileDescriptor;II)Landroid/system/StructTimeval;" since="29" />
+		<method name="gettid()I" />
+		<method name="getuid()I" />
+		<method name="getxattr(Ljava/lang/String;Ljava/lang/String;)[B" since="26" />
+		<method name="if_indextoname(I)Ljava/lang/String;" />
+		<method name="if_nametoindex(Ljava/lang/String;)I" since="26" />
+		<method name="inet_pton(ILjava/lang/String;)Ljava/net/InetAddress;" />
+		<method name="isatty(Ljava/io/FileDescriptor;)Z" />
+		<method name="kill(II)V" />
+		<method name="lchown(Ljava/lang/String;II)V" />
+		<method name="link(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="listen(Ljava/io/FileDescriptor;I)V" />
+		<method name="listxattr(Ljava/lang/String;)[Ljava/lang/String;" since="26" />
+		<method name="lseek(Ljava/io/FileDescriptor;JI)J" />
+		<method name="lstat(Ljava/lang/String;)Landroid/system/StructStat;" />
+		<method name="memfd_create(Ljava/lang/String;I)Ljava/io/FileDescriptor;" since="30" />
+		<method name="mincore(JJ[B)V" />
+		<method name="mkdir(Ljava/lang/String;I)V" />
+		<method name="mkfifo(Ljava/lang/String;I)V" />
+		<method name="mlock(JJ)V" />
+		<method name="mmap(JJIILjava/io/FileDescriptor;J)J" />
+		<method name="msync(JJI)V" />
+		<method name="munlock(JJ)V" />
+		<method name="munmap(JJ)V" />
+		<method name="open(Ljava/lang/String;II)Ljava/io/FileDescriptor;" />
+		<method name="pipe()[Ljava/io/FileDescriptor;" />
+		<method name="poll([Landroid/system/StructPollfd;I)I" />
+		<method name="posix_fallocate(Ljava/io/FileDescriptor;JJ)V" />
+		<method name="prctl(IJJJJ)I" />
+		<method name="pread(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I" />
+		<method name="pread(Ljava/io/FileDescriptor;[BIIJ)I" />
+		<method name="pwrite(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I" />
+		<method name="pwrite(Ljava/io/FileDescriptor;[BIIJ)I" />
+		<method name="read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I" />
+		<method name="read(Ljava/io/FileDescriptor;[BII)I" />
+		<method name="readlink(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="readv(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I" />
+		<method name="recvfrom(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetSocketAddress;)I" />
+		<method name="recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I" />
+		<method name="recvmsg(Ljava/io/FileDescriptor;Landroid/system/StructMsghdr;I)I" since="31" />
+		<method name="remove(Ljava/lang/String;)V" />
+		<method name="removexattr(Ljava/lang/String;Ljava/lang/String;)V" since="26" />
+		<method name="rename(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="sendfile(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/system/Int64Ref;J)J" since="28" />
+		<method name="sendfile(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/util/MutableLong;J)J" removed="28" />
+		<method name="sendmsg(Ljava/io/FileDescriptor;Landroid/system/StructMsghdr;I)I" since="31" />
+		<method name="sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I" />
+		<method name="sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I" />
+		<method name="sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I" since="29" />
+		<method name="setegid(I)V" deprecated="29" />
+		<method name="setenv(Ljava/lang/String;Ljava/lang/String;Z)V" />
+		<method name="seteuid(I)V" deprecated="29" />
+		<method name="setgid(I)V" deprecated="29" />
+		<method name="setsid()I" />
+		<method name="setsockoptInt(Ljava/io/FileDescriptor;III)V" since="26" />
+		<method name="setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V" since="29" />
+		<method name="setuid(I)V" deprecated="29" />
+		<method name="setxattr(Ljava/lang/String;Ljava/lang/String;[BI)V" since="26" />
+		<method name="shutdown(Ljava/io/FileDescriptor;I)V" />
+		<method name="socket(III)Ljava/io/FileDescriptor;" />
+		<method name="socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V" />
+		<method name="stat(Ljava/lang/String;)Landroid/system/StructStat;" />
+		<method name="statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;" />
+		<method name="strerror(I)Ljava/lang/String;" />
+		<method name="strsignal(I)Ljava/lang/String;" />
+		<method name="symlink(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="sysconf(I)J" />
+		<method name="tcdrain(Ljava/io/FileDescriptor;)V" />
+		<method name="tcsendbreak(Ljava/io/FileDescriptor;I)V" />
+		<method name="umask(I)I" />
+		<method name="uname()Landroid/system/StructUtsname;" />
+		<method name="unsetenv(Ljava/lang/String;)V" />
+		<method name="waitpid(ILandroid/util/MutableInt;I)I" removed="28" />
+		<method name="write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I" />
+		<method name="write(Ljava/io/FileDescriptor;[BII)I" />
+		<method name="writev(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I" />
+	</class>
+	<class name="android/system/OsConstants" since="21">
+		<extends name="java/lang/Object" />
+		<method name="S_ISBLK(I)Z" />
+		<method name="S_ISCHR(I)Z" />
+		<method name="S_ISDIR(I)Z" />
+		<method name="S_ISFIFO(I)Z" />
+		<method name="S_ISLNK(I)Z" />
+		<method name="S_ISREG(I)Z" />
+		<method name="S_ISSOCK(I)Z" />
+		<method name="WCOREDUMP(I)Z" />
+		<method name="WEXITSTATUS(I)I" />
+		<method name="WIFEXITED(I)Z" />
+		<method name="WIFSIGNALED(I)Z" />
+		<method name="WIFSTOPPED(I)Z" />
+		<method name="WSTOPSIG(I)I" />
+		<method name="WTERMSIG(I)I" />
+		<method name="errnoName(I)Ljava/lang/String;" />
+		<method name="gaiName(I)Ljava/lang/String;" />
+		<field name="AF_INET" />
+		<field name="AF_INET6" />
+		<field name="AF_NETLINK" since="29" />
+		<field name="AF_PACKET" since="29" />
+		<field name="AF_UNIX" />
+		<field name="AF_UNSPEC" />
+		<field name="AF_VSOCK" since="31" />
+		<field name="AI_ADDRCONFIG" />
+		<field name="AI_ALL" />
+		<field name="AI_CANONNAME" />
+		<field name="AI_NUMERICHOST" />
+		<field name="AI_NUMERICSERV" />
+		<field name="AI_PASSIVE" />
+		<field name="AI_V4MAPPED" />
+		<field name="ARPHRD_ETHER" since="29" />
+		<field name="CAP_AUDIT_CONTROL" />
+		<field name="CAP_AUDIT_WRITE" />
+		<field name="CAP_BLOCK_SUSPEND" />
+		<field name="CAP_CHOWN" />
+		<field name="CAP_DAC_OVERRIDE" />
+		<field name="CAP_DAC_READ_SEARCH" />
+		<field name="CAP_FOWNER" />
+		<field name="CAP_FSETID" />
+		<field name="CAP_IPC_LOCK" />
+		<field name="CAP_IPC_OWNER" />
+		<field name="CAP_KILL" />
+		<field name="CAP_LAST_CAP" />
+		<field name="CAP_LEASE" />
+		<field name="CAP_LINUX_IMMUTABLE" />
+		<field name="CAP_MAC_ADMIN" />
+		<field name="CAP_MAC_OVERRIDE" />
+		<field name="CAP_MKNOD" />
+		<field name="CAP_NET_ADMIN" />
+		<field name="CAP_NET_BIND_SERVICE" />
+		<field name="CAP_NET_BROADCAST" />
+		<field name="CAP_NET_RAW" />
+		<field name="CAP_SETFCAP" />
+		<field name="CAP_SETGID" />
+		<field name="CAP_SETPCAP" />
+		<field name="CAP_SETUID" />
+		<field name="CAP_SYSLOG" />
+		<field name="CAP_SYS_ADMIN" />
+		<field name="CAP_SYS_BOOT" />
+		<field name="CAP_SYS_CHROOT" />
+		<field name="CAP_SYS_MODULE" />
+		<field name="CAP_SYS_NICE" />
+		<field name="CAP_SYS_PACCT" />
+		<field name="CAP_SYS_PTRACE" />
+		<field name="CAP_SYS_RAWIO" />
+		<field name="CAP_SYS_RESOURCE" />
+		<field name="CAP_SYS_TIME" />
+		<field name="CAP_SYS_TTY_CONFIG" />
+		<field name="CAP_WAKE_ALARM" />
+		<field name="E2BIG" />
+		<field name="EACCES" />
+		<field name="EADDRINUSE" />
+		<field name="EADDRNOTAVAIL" />
+		<field name="EAFNOSUPPORT" />
+		<field name="EAGAIN" />
+		<field name="EAI_AGAIN" />
+		<field name="EAI_BADFLAGS" />
+		<field name="EAI_FAIL" />
+		<field name="EAI_FAMILY" />
+		<field name="EAI_MEMORY" />
+		<field name="EAI_NODATA" />
+		<field name="EAI_NONAME" />
+		<field name="EAI_OVERFLOW" />
+		<field name="EAI_SERVICE" />
+		<field name="EAI_SOCKTYPE" />
+		<field name="EAI_SYSTEM" />
+		<field name="EALREADY" />
+		<field name="EBADF" />
+		<field name="EBADMSG" />
+		<field name="EBUSY" />
+		<field name="ECANCELED" />
+		<field name="ECHILD" />
+		<field name="ECONNABORTED" />
+		<field name="ECONNREFUSED" />
+		<field name="ECONNRESET" />
+		<field name="EDEADLK" />
+		<field name="EDESTADDRREQ" />
+		<field name="EDOM" />
+		<field name="EDQUOT" />
+		<field name="EEXIST" />
+		<field name="EFAULT" />
+		<field name="EFBIG" />
+		<field name="EHOSTUNREACH" />
+		<field name="EIDRM" />
+		<field name="EILSEQ" />
+		<field name="EINPROGRESS" />
+		<field name="EINTR" />
+		<field name="EINVAL" />
+		<field name="EIO" />
+		<field name="EISCONN" />
+		<field name="EISDIR" />
+		<field name="ELOOP" />
+		<field name="EMFILE" />
+		<field name="EMLINK" />
+		<field name="EMSGSIZE" />
+		<field name="EMULTIHOP" />
+		<field name="ENAMETOOLONG" />
+		<field name="ENETDOWN" />
+		<field name="ENETRESET" />
+		<field name="ENETUNREACH" />
+		<field name="ENFILE" />
+		<field name="ENOBUFS" />
+		<field name="ENODATA" />
+		<field name="ENODEV" />
+		<field name="ENOENT" />
+		<field name="ENOEXEC" />
+		<field name="ENOLCK" />
+		<field name="ENOLINK" />
+		<field name="ENOMEM" />
+		<field name="ENOMSG" />
+		<field name="ENONET" since="31" />
+		<field name="ENOPROTOOPT" />
+		<field name="ENOSPC" />
+		<field name="ENOSR" />
+		<field name="ENOSTR" />
+		<field name="ENOSYS" />
+		<field name="ENOTCONN" />
+		<field name="ENOTDIR" />
+		<field name="ENOTEMPTY" />
+		<field name="ENOTSOCK" />
+		<field name="ENOTSUP" />
+		<field name="ENOTTY" />
+		<field name="ENXIO" />
+		<field name="EOPNOTSUPP" />
+		<field name="EOVERFLOW" />
+		<field name="EPERM" />
+		<field name="EPIPE" />
+		<field name="EPROTO" />
+		<field name="EPROTONOSUPPORT" />
+		<field name="EPROTOTYPE" />
+		<field name="ERANGE" />
+		<field name="EROFS" />
+		<field name="ESPIPE" />
+		<field name="ESRCH" />
+		<field name="ESTALE" />
+		<field name="ETH_P_ALL" since="29" />
+		<field name="ETH_P_ARP" since="29" />
+		<field name="ETH_P_IP" since="29" />
+		<field name="ETH_P_IPV6" since="29" />
+		<field name="ETIME" />
+		<field name="ETIMEDOUT" />
+		<field name="ETXTBSY" />
+		<field name="EXDEV" />
+		<field name="EXIT_FAILURE" />
+		<field name="EXIT_SUCCESS" />
+		<field name="FD_CLOEXEC" />
+		<field name="FIONREAD" />
+		<field name="F_DUPFD" />
+		<field name="F_DUPFD_CLOEXEC" since="27" />
+		<field name="F_GETFD" />
+		<field name="F_GETFL" />
+		<field name="F_GETLK" />
+		<field name="F_GETLK64" />
+		<field name="F_GETOWN" />
+		<field name="F_OK" />
+		<field name="F_RDLCK" />
+		<field name="F_SETFD" />
+		<field name="F_SETFL" />
+		<field name="F_SETLK" />
+		<field name="F_SETLK64" />
+		<field name="F_SETLKW" />
+		<field name="F_SETLKW64" />
+		<field name="F_SETOWN" />
+		<field name="F_UNLCK" />
+		<field name="F_WRLCK" />
+		<field name="ICMP6_ECHO_REPLY" since="29" />
+		<field name="ICMP6_ECHO_REQUEST" since="29" />
+		<field name="ICMP_ECHO" since="29" />
+		<field name="ICMP_ECHOREPLY" since="29" />
+		<field name="IFA_F_DADFAILED" />
+		<field name="IFA_F_DEPRECATED" />
+		<field name="IFA_F_HOMEADDRESS" />
+		<field name="IFA_F_NODAD" />
+		<field name="IFA_F_OPTIMISTIC" />
+		<field name="IFA_F_PERMANENT" />
+		<field name="IFA_F_SECONDARY" />
+		<field name="IFA_F_TEMPORARY" />
+		<field name="IFA_F_TENTATIVE" />
+		<field name="IFF_ALLMULTI" />
+		<field name="IFF_AUTOMEDIA" />
+		<field name="IFF_BROADCAST" />
+		<field name="IFF_DEBUG" />
+		<field name="IFF_DYNAMIC" />
+		<field name="IFF_LOOPBACK" />
+		<field name="IFF_MASTER" />
+		<field name="IFF_MULTICAST" />
+		<field name="IFF_NOARP" />
+		<field name="IFF_NOTRAILERS" />
+		<field name="IFF_POINTOPOINT" />
+		<field name="IFF_PORTSEL" />
+		<field name="IFF_PROMISC" />
+		<field name="IFF_RUNNING" />
+		<field name="IFF_SLAVE" />
+		<field name="IFF_UP" />
+		<field name="IPPROTO_ICMP" />
+		<field name="IPPROTO_ICMPV6" />
+		<field name="IPPROTO_IP" />
+		<field name="IPPROTO_IPV6" />
+		<field name="IPPROTO_RAW" />
+		<field name="IPPROTO_TCP" />
+		<field name="IPPROTO_UDP" />
+		<field name="IPV6_CHECKSUM" />
+		<field name="IPV6_MULTICAST_HOPS" />
+		<field name="IPV6_MULTICAST_IF" />
+		<field name="IPV6_MULTICAST_LOOP" />
+		<field name="IPV6_RECVDSTOPTS" />
+		<field name="IPV6_RECVHOPLIMIT" />
+		<field name="IPV6_RECVHOPOPTS" />
+		<field name="IPV6_RECVPKTINFO" />
+		<field name="IPV6_RECVRTHDR" />
+		<field name="IPV6_RECVTCLASS" />
+		<field name="IPV6_TCLASS" />
+		<field name="IPV6_UNICAST_HOPS" />
+		<field name="IPV6_V6ONLY" />
+		<field name="IP_MULTICAST_IF" />
+		<field name="IP_MULTICAST_LOOP" />
+		<field name="IP_MULTICAST_TTL" />
+		<field name="IP_TOS" />
+		<field name="IP_TTL" />
+		<field name="MAP_ANONYMOUS" since="30" />
+		<field name="MAP_FIXED" />
+		<field name="MAP_PRIVATE" />
+		<field name="MAP_SHARED" />
+		<field name="MCAST_BLOCK_SOURCE" />
+		<field name="MCAST_JOIN_GROUP" />
+		<field name="MCAST_JOIN_SOURCE_GROUP" />
+		<field name="MCAST_LEAVE_GROUP" />
+		<field name="MCAST_LEAVE_SOURCE_GROUP" />
+		<field name="MCAST_UNBLOCK_SOURCE" />
+		<field name="MCL_CURRENT" />
+		<field name="MCL_FUTURE" />
+		<field name="MFD_CLOEXEC" since="30" />
+		<field name="MSG_CTRUNC" />
+		<field name="MSG_DONTROUTE" />
+		<field name="MSG_EOR" />
+		<field name="MSG_OOB" />
+		<field name="MSG_PEEK" />
+		<field name="MSG_TRUNC" />
+		<field name="MSG_WAITALL" />
+		<field name="MS_ASYNC" />
+		<field name="MS_INVALIDATE" />
+		<field name="MS_SYNC" />
+		<field name="NETLINK_INET_DIAG" since="29" />
+		<field name="NETLINK_NETFILTER" since="30" />
+		<field name="NETLINK_ROUTE" since="29" />
+		<field name="NI_DGRAM" />
+		<field name="NI_NAMEREQD" />
+		<field name="NI_NOFQDN" />
+		<field name="NI_NUMERICHOST" />
+		<field name="NI_NUMERICSERV" />
+		<field name="O_ACCMODE" />
+		<field name="O_APPEND" />
+		<field name="O_CLOEXEC" since="27" />
+		<field name="O_CREAT" />
+		<field name="O_DSYNC" since="27" />
+		<field name="O_EXCL" />
+		<field name="O_NOCTTY" />
+		<field name="O_NOFOLLOW" />
+		<field name="O_NONBLOCK" />
+		<field name="O_RDONLY" />
+		<field name="O_RDWR" />
+		<field name="O_SYNC" />
+		<field name="O_TRUNC" />
+		<field name="O_WRONLY" />
+		<field name="POLLERR" />
+		<field name="POLLHUP" />
+		<field name="POLLIN" />
+		<field name="POLLNVAL" />
+		<field name="POLLOUT" />
+		<field name="POLLPRI" />
+		<field name="POLLRDBAND" />
+		<field name="POLLRDNORM" />
+		<field name="POLLWRBAND" />
+		<field name="POLLWRNORM" />
+		<field name="PROT_EXEC" />
+		<field name="PROT_NONE" />
+		<field name="PROT_READ" />
+		<field name="PROT_WRITE" />
+		<field name="PR_GET_DUMPABLE" />
+		<field name="PR_SET_DUMPABLE" />
+		<field name="PR_SET_NO_NEW_PRIVS" />
+		<field name="RTMGRP_NEIGH" since="29" />
+		<field name="RT_SCOPE_HOST" />
+		<field name="RT_SCOPE_LINK" />
+		<field name="RT_SCOPE_NOWHERE" />
+		<field name="RT_SCOPE_SITE" />
+		<field name="RT_SCOPE_UNIVERSE" />
+		<field name="R_OK" />
+		<field name="SEEK_CUR" />
+		<field name="SEEK_END" />
+		<field name="SEEK_SET" />
+		<field name="SHUT_RD" />
+		<field name="SHUT_RDWR" />
+		<field name="SHUT_WR" />
+		<field name="SIGABRT" />
+		<field name="SIGALRM" />
+		<field name="SIGBUS" />
+		<field name="SIGCHLD" />
+		<field name="SIGCONT" />
+		<field name="SIGFPE" />
+		<field name="SIGHUP" />
+		<field name="SIGILL" />
+		<field name="SIGINT" />
+		<field name="SIGIO" />
+		<field name="SIGKILL" />
+		<field name="SIGPIPE" />
+		<field name="SIGPROF" />
+		<field name="SIGPWR" />
+		<field name="SIGQUIT" />
+		<field name="SIGRTMAX" />
+		<field name="SIGRTMIN" />
+		<field name="SIGSEGV" />
+		<field name="SIGSTKFLT" />
+		<field name="SIGSTOP" />
+		<field name="SIGSYS" />
+		<field name="SIGTERM" />
+		<field name="SIGTRAP" />
+		<field name="SIGTSTP" />
+		<field name="SIGTTIN" />
+		<field name="SIGTTOU" />
+		<field name="SIGURG" />
+		<field name="SIGUSR1" />
+		<field name="SIGUSR2" />
+		<field name="SIGVTALRM" />
+		<field name="SIGWINCH" />
+		<field name="SIGXCPU" />
+		<field name="SIGXFSZ" />
+		<field name="SIOCGIFADDR" />
+		<field name="SIOCGIFBRDADDR" />
+		<field name="SIOCGIFDSTADDR" />
+		<field name="SIOCGIFNETMASK" />
+		<field name="SOCK_CLOEXEC" since="29" />
+		<field name="SOCK_DGRAM" />
+		<field name="SOCK_NONBLOCK" since="29" />
+		<field name="SOCK_RAW" />
+		<field name="SOCK_SEQPACKET" />
+		<field name="SOCK_STREAM" />
+		<field name="SOL_SOCKET" />
+		<field name="SOL_UDP" since="31" />
+		<field name="SO_BINDTODEVICE" />
+		<field name="SO_BROADCAST" />
+		<field name="SO_DEBUG" />
+		<field name="SO_DONTROUTE" />
+		<field name="SO_ERROR" />
+		<field name="SO_KEEPALIVE" />
+		<field name="SO_LINGER" />
+		<field name="SO_OOBINLINE" />
+		<field name="SO_PASSCRED" />
+		<field name="SO_PEERCRED" />
+		<field name="SO_RCVBUF" />
+		<field name="SO_RCVLOWAT" />
+		<field name="SO_RCVTIMEO" />
+		<field name="SO_REUSEADDR" />
+		<field name="SO_SNDBUF" />
+		<field name="SO_SNDLOWAT" />
+		<field name="SO_SNDTIMEO" />
+		<field name="SO_TYPE" />
+		<field name="STDERR_FILENO" />
+		<field name="STDIN_FILENO" />
+		<field name="STDOUT_FILENO" />
+		<field name="ST_MANDLOCK" since="23" />
+		<field name="ST_NOATIME" since="23" />
+		<field name="ST_NODEV" since="23" />
+		<field name="ST_NODIRATIME" since="23" />
+		<field name="ST_NOEXEC" since="23" />
+		<field name="ST_NOSUID" since="23" />
+		<field name="ST_RDONLY" since="23" />
+		<field name="ST_RELATIME" since="23" />
+		<field name="ST_SYNCHRONOUS" since="23" />
+		<field name="S_IFBLK" />
+		<field name="S_IFCHR" />
+		<field name="S_IFDIR" />
+		<field name="S_IFIFO" />
+		<field name="S_IFLNK" />
+		<field name="S_IFMT" />
+		<field name="S_IFREG" />
+		<field name="S_IFSOCK" />
+		<field name="S_IRGRP" />
+		<field name="S_IROTH" />
+		<field name="S_IRUSR" />
+		<field name="S_IRWXG" />
+		<field name="S_IRWXO" />
+		<field name="S_IRWXU" />
+		<field name="S_ISGID" />
+		<field name="S_ISUID" />
+		<field name="S_ISVTX" />
+		<field name="S_IWGRP" />
+		<field name="S_IWOTH" />
+		<field name="S_IWUSR" />
+		<field name="S_IXGRP" />
+		<field name="S_IXOTH" />
+		<field name="S_IXUSR" />
+		<field name="TCP_NODELAY" />
+		<field name="TCP_USER_TIMEOUT" since="26" />
+		<field name="UDP_GRO" since="31" />
+		<field name="UDP_SEGMENT" since="31" />
+		<field name="VMADDR_CID_ANY" since="31" />
+		<field name="VMADDR_CID_HOST" since="31" />
+		<field name="VMADDR_CID_LOCAL" since="31" />
+		<field name="VMADDR_PORT_ANY" since="31" />
+		<field name="WCONTINUED" />
+		<field name="WEXITED" />
+		<field name="WNOHANG" />
+		<field name="WNOWAIT" />
+		<field name="WSTOPPED" />
+		<field name="WUNTRACED" />
+		<field name="W_OK" />
+		<field name="X_OK" />
+		<field name="_SC_2_CHAR_TERM" />
+		<field name="_SC_2_C_BIND" />
+		<field name="_SC_2_C_DEV" />
+		<field name="_SC_2_C_VERSION" />
+		<field name="_SC_2_FORT_DEV" />
+		<field name="_SC_2_FORT_RUN" />
+		<field name="_SC_2_LOCALEDEF" />
+		<field name="_SC_2_SW_DEV" />
+		<field name="_SC_2_UPE" />
+		<field name="_SC_2_VERSION" />
+		<field name="_SC_AIO_LISTIO_MAX" />
+		<field name="_SC_AIO_MAX" />
+		<field name="_SC_AIO_PRIO_DELTA_MAX" />
+		<field name="_SC_ARG_MAX" />
+		<field name="_SC_ASYNCHRONOUS_IO" />
+		<field name="_SC_ATEXIT_MAX" />
+		<field name="_SC_AVPHYS_PAGES" />
+		<field name="_SC_BC_BASE_MAX" />
+		<field name="_SC_BC_DIM_MAX" />
+		<field name="_SC_BC_SCALE_MAX" />
+		<field name="_SC_BC_STRING_MAX" />
+		<field name="_SC_CHILD_MAX" />
+		<field name="_SC_CLK_TCK" />
+		<field name="_SC_COLL_WEIGHTS_MAX" />
+		<field name="_SC_DELAYTIMER_MAX" />
+		<field name="_SC_EXPR_NEST_MAX" />
+		<field name="_SC_FSYNC" />
+		<field name="_SC_GETGR_R_SIZE_MAX" />
+		<field name="_SC_GETPW_R_SIZE_MAX" />
+		<field name="_SC_IOV_MAX" />
+		<field name="_SC_JOB_CONTROL" />
+		<field name="_SC_LINE_MAX" />
+		<field name="_SC_LOGIN_NAME_MAX" />
+		<field name="_SC_MAPPED_FILES" />
+		<field name="_SC_MEMLOCK" />
+		<field name="_SC_MEMLOCK_RANGE" />
+		<field name="_SC_MEMORY_PROTECTION" />
+		<field name="_SC_MESSAGE_PASSING" />
+		<field name="_SC_MQ_OPEN_MAX" />
+		<field name="_SC_MQ_PRIO_MAX" />
+		<field name="_SC_NGROUPS_MAX" />
+		<field name="_SC_NPROCESSORS_CONF" />
+		<field name="_SC_NPROCESSORS_ONLN" />
+		<field name="_SC_OPEN_MAX" />
+		<field name="_SC_PAGESIZE" />
+		<field name="_SC_PAGE_SIZE" />
+		<field name="_SC_PASS_MAX" />
+		<field name="_SC_PHYS_PAGES" />
+		<field name="_SC_PRIORITIZED_IO" />
+		<field name="_SC_PRIORITY_SCHEDULING" />
+		<field name="_SC_REALTIME_SIGNALS" />
+		<field name="_SC_RE_DUP_MAX" />
+		<field name="_SC_RTSIG_MAX" />
+		<field name="_SC_SAVED_IDS" />
+		<field name="_SC_SEMAPHORES" />
+		<field name="_SC_SEM_NSEMS_MAX" />
+		<field name="_SC_SEM_VALUE_MAX" />
+		<field name="_SC_SHARED_MEMORY_OBJECTS" />
+		<field name="_SC_SIGQUEUE_MAX" />
+		<field name="_SC_STREAM_MAX" />
+		<field name="_SC_SYNCHRONIZED_IO" />
+		<field name="_SC_THREADS" />
+		<field name="_SC_THREAD_ATTR_STACKADDR" />
+		<field name="_SC_THREAD_ATTR_STACKSIZE" />
+		<field name="_SC_THREAD_DESTRUCTOR_ITERATIONS" />
+		<field name="_SC_THREAD_KEYS_MAX" />
+		<field name="_SC_THREAD_PRIORITY_SCHEDULING" />
+		<field name="_SC_THREAD_PRIO_INHERIT" />
+		<field name="_SC_THREAD_PRIO_PROTECT" />
+		<field name="_SC_THREAD_SAFE_FUNCTIONS" />
+		<field name="_SC_THREAD_STACK_MIN" />
+		<field name="_SC_THREAD_THREADS_MAX" />
+		<field name="_SC_TIMERS" />
+		<field name="_SC_TIMER_MAX" />
+		<field name="_SC_TTY_NAME_MAX" />
+		<field name="_SC_TZNAME_MAX" />
+		<field name="_SC_VERSION" />
+		<field name="_SC_XBS5_ILP32_OFF32" />
+		<field name="_SC_XBS5_ILP32_OFFBIG" />
+		<field name="_SC_XBS5_LP64_OFF64" />
+		<field name="_SC_XBS5_LPBIG_OFFBIG" />
+		<field name="_SC_XOPEN_CRYPT" />
+		<field name="_SC_XOPEN_ENH_I18N" />
+		<field name="_SC_XOPEN_LEGACY" />
+		<field name="_SC_XOPEN_REALTIME" />
+		<field name="_SC_XOPEN_REALTIME_THREADS" />
+		<field name="_SC_XOPEN_SHM" />
+		<field name="_SC_XOPEN_UNIX" />
+		<field name="_SC_XOPEN_VERSION" />
+		<field name="_SC_XOPEN_XCU_VERSION" />
+	</class>
+	<class name="android/system/StructCmsghdr" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IIS)V" />
+		<method name="&lt;init&gt;(II[B)V" />
+		<field name="cmsg_data" />
+		<field name="cmsg_level" />
+		<field name="cmsg_type" />
+	</class>
+	<class name="android/system/StructMsghdr" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/net/SocketAddress;[Ljava/nio/ByteBuffer;[Landroid/system/StructCmsghdr;I)V" />
+		<field name="msg_control" />
+		<field name="msg_flags" />
+		<field name="msg_iov" />
+		<field name="msg_name" />
+	</class>
+	<class name="android/system/StructPollfd" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="events" />
+		<field name="fd" />
+		<field name="revents" />
+		<field name="userData" />
+	</class>
+	<class name="android/system/StructStat" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(JJIJIIJJJJJJJ)V" />
+		<method name="&lt;init&gt;(JJIJIIJJLandroid/system/StructTimespec;Landroid/system/StructTimespec;Landroid/system/StructTimespec;JJ)V" since="27" />
+		<field name="st_atim" since="27" />
+		<field name="st_atime" />
+		<field name="st_blksize" />
+		<field name="st_blocks" />
+		<field name="st_ctim" since="27" />
+		<field name="st_ctime" />
+		<field name="st_dev" />
+		<field name="st_gid" />
+		<field name="st_ino" />
+		<field name="st_mode" />
+		<field name="st_mtim" since="27" />
+		<field name="st_mtime" />
+		<field name="st_nlink" />
+		<field name="st_rdev" />
+		<field name="st_size" />
+		<field name="st_uid" />
+	</class>
+	<class name="android/system/StructStatVfs" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(JJJJJJJJJJJ)V" />
+		<field name="f_bavail" />
+		<field name="f_bfree" />
+		<field name="f_blocks" />
+		<field name="f_bsize" />
+		<field name="f_favail" />
+		<field name="f_ffree" />
+		<field name="f_files" />
+		<field name="f_flag" />
+		<field name="f_frsize" />
+		<field name="f_fsid" />
+		<field name="f_namemax" />
+	</class>
+	<class name="android/system/StructTimespec" since="27">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(JJ)V" />
+		<method name="compareTo(Landroid/system/StructTimespec;)I" />
+		<field name="tv_nsec" />
+		<field name="tv_sec" />
+	</class>
+	<class name="android/system/StructTimeval" since="29">
+		<extends name="java/lang/Object" />
+		<method name="fromMillis(J)Landroid/system/StructTimeval;" />
+		<method name="toMillis()J" />
+		<field name="tv_sec" />
+		<field name="tv_usec" />
+	</class>
+	<class name="android/system/StructUtsname" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="machine" />
+		<field name="nodename" />
+		<field name="release" />
+		<field name="sysname" />
+		<field name="version" />
+	</class>
+	<class name="android/telecom/Call" since="23">
+		<extends name="java/lang/Object" />
+		<method name="addConferenceParticipants(Ljava/util/List;)V" since="31" />
+		<method name="answer(I)V" />
+		<method name="conference(Landroid/telecom/Call;)V" />
+		<method name="deflect(Landroid/net/Uri;)V" since="28" />
+		<method name="disconnect()V" />
+		<method name="getCannedTextResponses()Ljava/util/List;" />
+		<method name="getChildren()Ljava/util/List;" />
+		<method name="getConferenceableCalls()Ljava/util/List;" />
+		<method name="getDetails()Landroid/telecom/Call$Details;" />
+		<method name="getGenericConferenceActiveChildCall()Landroid/telecom/Call;" since="30" />
+		<method name="getParent()Landroid/telecom/Call;" />
+		<method name="getRemainingPostDialSequence()Ljava/lang/String;" />
+		<method name="getRttCall()Landroid/telecom/Call$RttCall;" since="26" />
+		<method name="getState()I" deprecated="31" />
+		<method name="getVideoCall()Landroid/telecom/InCallService$VideoCall;" />
+		<method name="handoverTo(Landroid/telecom/PhoneAccountHandle;ILandroid/os/Bundle;)V" since="28" />
+		<method name="hold()V" />
+		<method name="isRttActive()Z" since="26" />
+		<method name="mergeConference()V" />
+		<method name="phoneAccountSelected(Landroid/telecom/PhoneAccountHandle;Z)V" />
+		<method name="playDtmfTone(C)V" />
+		<method name="postDialContinue(Z)V" />
+		<method name="pullExternalCall()V" since="25" />
+		<method name="putExtras(Landroid/os/Bundle;)V" since="25" />
+		<method name="registerCallback(Landroid/telecom/Call$Callback;)V" />
+		<method name="registerCallback(Landroid/telecom/Call$Callback;Landroid/os/Handler;)V" />
+		<method name="reject(I)V" since="30" />
+		<method name="reject(ZLjava/lang/String;)V" />
+		<method name="removeExtras(Ljava/util/List;)V" since="25" />
+		<method name="removeExtras([Ljava/lang/String;)V" since="25" />
+		<method name="respondToRttRequest(IZ)V" since="26" />
+		<method name="sendCallEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25" />
+		<method name="sendRttRequest()V" since="26" />
+		<method name="splitFromConference()V" />
+		<method name="stopDtmfTone()V" />
+		<method name="stopRtt()V" since="26" />
+		<method name="swapConference()V" />
+		<method name="unhold()V" />
+		<method name="unregisterCallback(Landroid/telecom/Call$Callback;)V" />
+		<field name="AVAILABLE_PHONE_ACCOUNTS" deprecated="29" />
+		<field name="EVENT_CLEAR_DIAGNOSTIC_MESSAGE" since="31" />
+		<field name="EVENT_DISPLAY_DIAGNOSTIC_MESSAGE" since="31" />
+		<field name="EXTRA_DIAGNOSTIC_MESSAGE" since="31" />
+		<field name="EXTRA_DIAGNOSTIC_MESSAGE_ID" since="31" />
+		<field name="EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS" since="26" />
+		<field name="EXTRA_SILENT_RINGING_REQUESTED" since="29" />
+		<field name="EXTRA_SUGGESTED_PHONE_ACCOUNTS" since="29" />
+		<field name="REJECT_REASON_DECLINED" since="30" />
+		<field name="REJECT_REASON_UNWANTED" since="30" />
+		<field name="STATE_ACTIVE" />
+		<field name="STATE_AUDIO_PROCESSING" since="30" />
+		<field name="STATE_CONNECTING" />
+		<field name="STATE_DIALING" />
+		<field name="STATE_DISCONNECTED" />
+		<field name="STATE_DISCONNECTING" />
+		<field name="STATE_HOLDING" />
+		<field name="STATE_NEW" />
+		<field name="STATE_PULLING_CALL" since="25" />
+		<field name="STATE_RINGING" />
+		<field name="STATE_SELECT_PHONE_ACCOUNT" />
+		<field name="STATE_SIMULATED_RINGING" since="30" />
+	</class>
+	<class name="android/telecom/Call$Callback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCallDestroyed(Landroid/telecom/Call;)V" />
+		<method name="onCannedTextResponsesLoaded(Landroid/telecom/Call;Ljava/util/List;)V" />
+		<method name="onChildrenChanged(Landroid/telecom/Call;Ljava/util/List;)V" />
+		<method name="onConferenceableCallsChanged(Landroid/telecom/Call;Ljava/util/List;)V" />
+		<method name="onConnectionEvent(Landroid/telecom/Call;Ljava/lang/String;Landroid/os/Bundle;)V" since="25" />
+		<method name="onDetailsChanged(Landroid/telecom/Call;Landroid/telecom/Call$Details;)V" />
+		<method name="onHandoverComplete(Landroid/telecom/Call;)V" since="28" />
+		<method name="onHandoverFailed(Landroid/telecom/Call;I)V" since="28" />
+		<method name="onParentChanged(Landroid/telecom/Call;Landroid/telecom/Call;)V" />
+		<method name="onPostDialWait(Landroid/telecom/Call;Ljava/lang/String;)V" />
+		<method name="onRttInitiationFailure(Landroid/telecom/Call;I)V" since="26" />
+		<method name="onRttModeChanged(Landroid/telecom/Call;I)V" since="26" />
+		<method name="onRttRequest(Landroid/telecom/Call;I)V" since="26" />
+		<method name="onRttStatusChanged(Landroid/telecom/Call;ZLandroid/telecom/Call$RttCall;)V" since="26" />
+		<method name="onStateChanged(Landroid/telecom/Call;I)V" />
+		<method name="onVideoCallChanged(Landroid/telecom/Call;Landroid/telecom/InCallService$VideoCall;)V" />
+		<field name="HANDOVER_FAILURE_DEST_APP_REJECTED" since="28" />
+		<field name="HANDOVER_FAILURE_NOT_SUPPORTED" since="28" />
+		<field name="HANDOVER_FAILURE_ONGOING_EMERGENCY_CALL" since="28" />
+		<field name="HANDOVER_FAILURE_UNKNOWN" since="28" />
+		<field name="HANDOVER_FAILURE_USER_REJECTED" since="28" />
+	</class>
+	<class name="android/telecom/Call$Details" since="23">
+		<extends name="java/lang/Object" />
+		<method name="can(I)Z" />
+		<method name="can(II)Z" />
+		<method name="capabilitiesToString(I)Ljava/lang/String;" />
+		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;" />
+		<method name="getCallCapabilities()I" />
+		<method name="getCallDirection()I" since="29" />
+		<method name="getCallProperties()I" />
+		<method name="getCallerDisplayName()Ljava/lang/String;" />
+		<method name="getCallerDisplayNamePresentation()I" />
+		<method name="getCallerNumberVerificationStatus()I" since="30" />
+		<method name="getConnectTimeMillis()J" />
+		<method name="getContactDisplayName()Ljava/lang/String;" since="30" />
+		<method name="getCreationTimeMillis()J" since="26" />
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getGatewayInfo()Landroid/telecom/GatewayInfo;" />
+		<method name="getHandle()Landroid/net/Uri;" />
+		<method name="getHandlePresentation()I" />
+		<method name="getIntentExtras()Landroid/os/Bundle;" />
+		<method name="getState()I" since="31" />
+		<method name="getStatusHints()Landroid/telecom/StatusHints;" />
+		<method name="getVideoState()I" />
+		<method name="hasProperty(I)Z" />
+		<method name="hasProperty(II)Z" />
+		<method name="propertiesToString(I)Ljava/lang/String;" />
+		<field name="CAPABILITY_ADD_PARTICIPANT" since="31" />
+		<field name="CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO" since="24" />
+		<field name="CAPABILITY_CAN_PAUSE_VIDEO" />
+		<field name="CAPABILITY_CAN_PULL_CALL" since="25" />
+		<field name="CAPABILITY_DISCONNECT_FROM_CONFERENCE" />
+		<field name="CAPABILITY_HOLD" />
+		<field name="CAPABILITY_MANAGE_CONFERENCE" />
+		<field name="CAPABILITY_MERGE_CONFERENCE" />
+		<field name="CAPABILITY_MUTE" />
+		<field name="CAPABILITY_RESPOND_VIA_TEXT" />
+		<field name="CAPABILITY_SEPARATE_FROM_CONFERENCE" />
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL" />
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_RX" />
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_TX" />
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL" />
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_RX" />
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_TX" />
+		<field name="CAPABILITY_SUPPORT_DEFLECT" since="28" />
+		<field name="CAPABILITY_SUPPORT_HOLD" />
+		<field name="CAPABILITY_SWAP_CONFERENCE" />
+		<field name="DIRECTION_INCOMING" since="29" />
+		<field name="DIRECTION_OUTGOING" since="29" />
+		<field name="DIRECTION_UNKNOWN" since="29" />
+		<field name="PROPERTY_ASSISTED_DIALING" since="30" />
+		<field name="PROPERTY_CONFERENCE" />
+		<field name="PROPERTY_CROSS_SIM" since="31" />
+		<field name="PROPERTY_EMERGENCY_CALLBACK_MODE" />
+		<field name="PROPERTY_ENTERPRISE_CALL" since="24" />
+		<field name="PROPERTY_GENERIC_CONFERENCE" />
+		<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25" />
+		<field name="PROPERTY_HIGH_DEF_AUDIO" />
+		<field name="PROPERTY_IS_ADHOC_CONFERENCE" since="31" />
+		<field name="PROPERTY_IS_EXTERNAL_CALL" since="25" />
+		<field name="PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL" since="29" />
+		<field name="PROPERTY_RTT" since="28" />
+		<field name="PROPERTY_SELF_MANAGED" since="26" />
+		<field name="PROPERTY_VOIP_AUDIO_MODE" since="29" />
+		<field name="PROPERTY_WIFI" />
+	</class>
+	<class name="android/telecom/Call$RttCall" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getRttAudioMode()I" />
+		<method name="read()Ljava/lang/String;" />
+		<method name="readImmediately()Ljava/lang/String;" since="27" />
+		<method name="setRttMode(I)V" />
+		<method name="write(Ljava/lang/String;)V" />
+		<field name="RTT_MODE_FULL" />
+		<field name="RTT_MODE_HCO" />
+		<field name="RTT_MODE_VCO" />
+	</class>
+	<class name="android/telecom/CallAudioState" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ZII)V" />
+		<method name="audioRouteToString(I)Ljava/lang/String;" />
+		<method name="getActiveBluetoothDevice()Landroid/bluetooth/BluetoothDevice;" since="28" />
+		<method name="getRoute()I" />
+		<method name="getSupportedBluetoothDevices()Ljava/util/Collection;" since="28" />
+		<method name="getSupportedRouteMask()I" />
+		<method name="isMuted()Z" />
+		<field name="CREATOR" />
+		<field name="ROUTE_BLUETOOTH" />
+		<field name="ROUTE_EARPIECE" />
+		<field name="ROUTE_SPEAKER" />
+		<field name="ROUTE_WIRED_HEADSET" />
+		<field name="ROUTE_WIRED_OR_EARPIECE" />
+	</class>
+	<class name="android/telecom/CallRedirectionService" since="29">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cancelCall()V" />
+		<method name="onPlaceCall(Landroid/net/Uri;Landroid/telecom/PhoneAccountHandle;Z)V" />
+		<method name="placeCallUnmodified()V" />
+		<method name="redirectCall(Landroid/net/Uri;Landroid/telecom/PhoneAccountHandle;Z)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/telecom/CallScreeningService" since="24">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onScreenCall(Landroid/telecom/Call$Details;)V" />
+		<method name="respondToCall(Landroid/telecom/Call$Details;Landroid/telecom/CallScreeningService$CallResponse;)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/telecom/CallScreeningService$CallResponse" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getCallComposerAttachmentsToShow()I" since="31" />
+		<method name="getDisallowCall()Z" />
+		<method name="getRejectCall()Z" />
+		<method name="getSilenceCall()Z" since="29" />
+		<method name="getSkipCallLog()Z" />
+		<method name="getSkipNotification()Z" />
+		<field name="CALL_COMPOSER_ATTACHMENT_LOCATION" since="31" />
+		<field name="CALL_COMPOSER_ATTACHMENT_PICTURE" since="31" />
+		<field name="CALL_COMPOSER_ATTACHMENT_PRIORITY" since="31" />
+		<field name="CALL_COMPOSER_ATTACHMENT_SUBJECT" since="31" />
+	</class>
+	<class name="android/telecom/CallScreeningService$CallResponse$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/telecom/CallScreeningService$CallResponse;" />
+		<method name="setCallComposerAttachmentsToShow(I)Landroid/telecom/CallScreeningService$CallResponse$Builder;" since="31" />
+		<method name="setDisallowCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;" />
+		<method name="setRejectCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;" />
+		<method name="setSilenceCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;" since="29" />
+		<method name="setSkipCallLog(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;" />
+		<method name="setSkipNotification(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;" />
+	</class>
+	<class name="android/telecom/Conference" since="23">
+		<extends name="android/telecom/Conferenceable" />
+		<method name="&lt;init&gt;(Landroid/telecom/PhoneAccountHandle;)V" />
+		<method name="addConnection(Landroid/telecom/Connection;)Z" />
+		<method name="createFailedConference(Landroid/telecom/DisconnectCause;Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/Conference;" since="31" />
+		<method name="destroy()V" />
+		<method name="getCallAudioState()Landroid/telecom/CallAudioState;" />
+		<method name="getConferenceableConnections()Ljava/util/List;" />
+		<method name="getConnectionCapabilities()I" />
+		<method name="getConnectionProperties()I" since="25" />
+		<method name="getConnectionStartElapsedRealtimeMillis()J" since="30" />
+		<method name="getConnectionTime()J" />
+		<method name="getConnections()Ljava/util/List;" />
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;" />
+		<method name="getState()I" />
+		<method name="getStatusHints()Landroid/telecom/StatusHints;" />
+		<method name="getVideoProvider()Landroid/telecom/Connection$VideoProvider;" />
+		<method name="getVideoState()I" />
+		<method name="isRingbackRequested()Z" since="31" />
+		<method name="onAddConferenceParticipants(Ljava/util/List;)V" since="31" />
+		<method name="onAnswer(I)V" since="31" />
+		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V" />
+		<method name="onConnectionAdded(Landroid/telecom/Connection;)V" />
+		<method name="onDisconnect()V" />
+		<method name="onExtrasChanged(Landroid/os/Bundle;)V" since="25" />
+		<method name="onHold()V" />
+		<method name="onMerge()V" />
+		<method name="onMerge(Landroid/telecom/Connection;)V" />
+		<method name="onPlayDtmfTone(C)V" />
+		<method name="onReject()V" since="31" />
+		<method name="onSeparate(Landroid/telecom/Connection;)V" />
+		<method name="onStopDtmfTone()V" />
+		<method name="onSwap()V" />
+		<method name="onUnhold()V" />
+		<method name="putExtras(Landroid/os/Bundle;)V" since="25" />
+		<method name="removeConnection(Landroid/telecom/Connection;)V" />
+		<method name="removeExtras(Ljava/util/List;)V" since="25" />
+		<method name="removeExtras([Ljava/lang/String;)V" since="25" />
+		<method name="sendConferenceEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="30" />
+		<method name="setActive()V" />
+		<method name="setConferenceableConnections(Ljava/util/List;)V" />
+		<method name="setConnectionCapabilities(I)V" />
+		<method name="setConnectionProperties(I)V" since="25" />
+		<method name="setConnectionStartElapsedRealTime(J)V" since="28" deprecated="30" />
+		<method name="setConnectionStartElapsedRealtimeMillis(J)V" since="30" />
+		<method name="setConnectionTime(J)V" />
+		<method name="setDialing()V" />
+		<method name="setDisconnected(Landroid/telecom/DisconnectCause;)V" />
+		<method name="setExtras(Landroid/os/Bundle;)V" />
+		<method name="setOnHold()V" />
+		<method name="setRingbackRequested(Z)V" since="31" />
+		<method name="setRinging()V" since="31" />
+		<method name="setStatusHints(Landroid/telecom/StatusHints;)V" />
+		<method name="setVideoProvider(Landroid/telecom/Connection;Landroid/telecom/Connection$VideoProvider;)V" />
+		<method name="setVideoState(Landroid/telecom/Connection;I)V" />
+		<field name="CONNECT_TIME_NOT_SPECIFIED" />
+	</class>
+	<class name="android/telecom/Conferenceable" since="23">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/telecom/Connection" since="23">
+		<extends name="android/telecom/Conferenceable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="capabilitiesToString(I)Ljava/lang/String;" />
+		<method name="createCanceledConnection()Landroid/telecom/Connection;" />
+		<method name="createFailedConnection(Landroid/telecom/DisconnectCause;)Landroid/telecom/Connection;" />
+		<method name="destroy()V" />
+		<method name="getAddress()Landroid/net/Uri;" />
+		<method name="getAddressPresentation()I" />
+		<method name="getAudioModeIsVoip()Z" />
+		<method name="getCallAudioState()Landroid/telecom/CallAudioState;" />
+		<method name="getCallerDisplayName()Ljava/lang/String;" />
+		<method name="getCallerDisplayNamePresentation()I" />
+		<method name="getCallerNumberVerificationStatus()I" since="30" />
+		<method name="getConference()Landroid/telecom/Conference;" />
+		<method name="getConferenceables()Ljava/util/List;" />
+		<method name="getConnectionCapabilities()I" />
+		<method name="getConnectionProperties()I" since="25" />
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getState()I" />
+		<method name="getStatusHints()Landroid/telecom/StatusHints;" />
+		<method name="getVideoProvider()Landroid/telecom/Connection$VideoProvider;" />
+		<method name="getVideoState()I" since="30" />
+		<method name="handleRttUpgradeResponse(Landroid/telecom/Connection$RttTextStream;)V" since="28" />
+		<method name="isRingbackRequested()Z" />
+		<method name="notifyConferenceMergeFailed()V" since="30" />
+		<method name="onAbort()V" />
+		<method name="onAddConferenceParticipants(Ljava/util/List;)V" since="31" />
+		<method name="onAnswer()V" />
+		<method name="onAnswer(I)V" />
+		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V" />
+		<method name="onCallEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25" />
+		<method name="onDeflect(Landroid/net/Uri;)V" since="28" />
+		<method name="onDisconnect()V" />
+		<method name="onExtrasChanged(Landroid/os/Bundle;)V" since="25" />
+		<method name="onHandoverComplete()V" since="28" />
+		<method name="onHold()V" />
+		<method name="onPlayDtmfTone(C)V" />
+		<method name="onPostDialContinue(Z)V" />
+		<method name="onPullExternalCall()V" since="25" />
+		<method name="onReject()V" />
+		<method name="onReject(I)V" since="30" />
+		<method name="onReject(Ljava/lang/String;)V" since="24" />
+		<method name="onSeparate()V" />
+		<method name="onShowIncomingCallUi()V" since="26" />
+		<method name="onSilence()V" since="29" />
+		<method name="onStartRtt(Landroid/telecom/Connection$RttTextStream;)V" since="28" />
+		<method name="onStateChanged(I)V" />
+		<method name="onStopDtmfTone()V" />
+		<method name="onStopRtt()V" since="28" />
+		<method name="onTrackedByNonUiService(Z)V" since="31" />
+		<method name="onUnhold()V" />
+		<method name="onUsingAlternativeUi(Z)V" since="31" />
+		<method name="propertiesToString(I)Ljava/lang/String;" since="25" />
+		<method name="putExtras(Landroid/os/Bundle;)V" since="25" />
+		<method name="removeExtras(Ljava/util/List;)V" since="25" />
+		<method name="removeExtras([Ljava/lang/String;)V" since="25" />
+		<method name="requestBluetoothAudio(Landroid/bluetooth/BluetoothDevice;)V" since="28" />
+		<method name="sendConnectionEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25" />
+		<method name="sendRemoteRttRequest()V" since="28" />
+		<method name="sendRttInitiationFailure(I)V" since="28" />
+		<method name="sendRttInitiationSuccess()V" since="28" />
+		<method name="sendRttSessionRemotelyTerminated()V" since="28" />
+		<method name="setActive()V" />
+		<method name="setAddress(Landroid/net/Uri;I)V" />
+		<method name="setAudioModeIsVoip(Z)V" />
+		<method name="setAudioRoute(I)V" since="26" />
+		<method name="setCallerDisplayName(Ljava/lang/String;I)V" />
+		<method name="setCallerNumberVerificationStatus(I)V" since="30" />
+		<method name="setConferenceableConnections(Ljava/util/List;)V" />
+		<method name="setConferenceables(Ljava/util/List;)V" />
+		<method name="setConnectionCapabilities(I)V" />
+		<method name="setConnectionProperties(I)V" since="25" />
+		<method name="setDialing()V" />
+		<method name="setDisconnected(Landroid/telecom/DisconnectCause;)V" />
+		<method name="setExtras(Landroid/os/Bundle;)V" />
+		<method name="setInitialized()V" />
+		<method name="setInitializing()V" />
+		<method name="setNextPostDialChar(C)V" />
+		<method name="setOnHold()V" />
+		<method name="setPostDialWait(Ljava/lang/String;)V" />
+		<method name="setPulling()V" since="25" />
+		<method name="setRingbackRequested(Z)V" />
+		<method name="setRinging()V" />
+		<method name="setStatusHints(Landroid/telecom/StatusHints;)V" />
+		<method name="setVideoProvider(Landroid/telecom/Connection$VideoProvider;)V" />
+		<method name="setVideoState(I)V" />
+		<method name="stateToString(I)Ljava/lang/String;" />
+		<field name="AUDIO_CODEC_AMR" since="30" />
+		<field name="AUDIO_CODEC_AMR_WB" since="30" />
+		<field name="AUDIO_CODEC_EVRC" since="30" />
+		<field name="AUDIO_CODEC_EVRC_B" since="30" />
+		<field name="AUDIO_CODEC_EVRC_NW" since="30" />
+		<field name="AUDIO_CODEC_EVRC_WB" since="30" />
+		<field name="AUDIO_CODEC_EVS_FB" since="30" />
+		<field name="AUDIO_CODEC_EVS_NB" since="30" />
+		<field name="AUDIO_CODEC_EVS_SWB" since="30" />
+		<field name="AUDIO_CODEC_EVS_WB" since="30" />
+		<field name="AUDIO_CODEC_G711A" since="30" />
+		<field name="AUDIO_CODEC_G711AB" since="30" />
+		<field name="AUDIO_CODEC_G711U" since="30" />
+		<field name="AUDIO_CODEC_G722" since="30" />
+		<field name="AUDIO_CODEC_G723" since="30" />
+		<field name="AUDIO_CODEC_G729" since="30" />
+		<field name="AUDIO_CODEC_GSM_EFR" since="30" />
+		<field name="AUDIO_CODEC_GSM_FR" since="30" />
+		<field name="AUDIO_CODEC_GSM_HR" since="30" />
+		<field name="AUDIO_CODEC_NONE" since="30" />
+		<field name="AUDIO_CODEC_QCELP13K" since="30" />
+		<field name="CAPABILITY_ADD_PARTICIPANT" since="31" />
+		<field name="CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO" since="24" />
+		<field name="CAPABILITY_CAN_PAUSE_VIDEO" />
+		<field name="CAPABILITY_CAN_PULL_CALL" since="25" />
+		<field name="CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION" since="24" />
+		<field name="CAPABILITY_CAN_UPGRADE_TO_VIDEO" deprecated="29" />
+		<field name="CAPABILITY_DISCONNECT_FROM_CONFERENCE" />
+		<field name="CAPABILITY_HOLD" />
+		<field name="CAPABILITY_MANAGE_CONFERENCE" />
+		<field name="CAPABILITY_MERGE_CONFERENCE" />
+		<field name="CAPABILITY_MUTE" />
+		<field name="CAPABILITY_RESPOND_VIA_TEXT" />
+		<field name="CAPABILITY_SEPARATE_FROM_CONFERENCE" />
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL" />
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_RX" />
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_TX" />
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL" />
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_RX" />
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_TX" />
+		<field name="CAPABILITY_SUPPORT_DEFLECT" since="28" />
+		<field name="CAPABILITY_SUPPORT_HOLD" />
+		<field name="CAPABILITY_SWAP_CONFERENCE" />
+		<field name="EVENT_CALL_HOLD_FAILED" since="30" />
+		<field name="EVENT_CALL_MERGE_FAILED" since="25" />
+		<field name="EVENT_CALL_PULL_FAILED" since="25" />
+		<field name="EVENT_CALL_REMOTELY_HELD" since="30" />
+		<field name="EVENT_CALL_REMOTELY_UNHELD" since="30" />
+		<field name="EVENT_CALL_SWITCH_FAILED" since="30" />
+		<field name="EVENT_MERGE_COMPLETE" since="30" />
+		<field name="EVENT_MERGE_START" since="30" />
+		<field name="EVENT_ON_HOLD_TONE_END" since="30" />
+		<field name="EVENT_ON_HOLD_TONE_START" since="30" />
+		<field name="EVENT_RTT_AUDIO_INDICATION_CHANGED" since="29" />
+		<field name="EXTRA_ANSWERING_DROPS_FG_CALL" since="25" />
+		<field name="EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME" since="26" />
+		<field name="EXTRA_AUDIO_CODEC" since="30" />
+		<field name="EXTRA_AUDIO_CODEC_BANDWIDTH_KHZ" since="31" />
+		<field name="EXTRA_AUDIO_CODEC_BITRATE_KBPS" since="31" />
+		<field name="EXTRA_CALL_SUBJECT" />
+		<field name="EXTRA_CHILD_ADDRESS" />
+		<field name="EXTRA_IS_RTT_AUDIO_PRESENT" since="29" />
+		<field name="EXTRA_LAST_FORWARDED_NUMBER" />
+		<field name="EXTRA_SIP_INVITE" since="29" />
+		<field name="PROPERTY_ASSISTED_DIALING" since="30" />
+		<field name="PROPERTY_CROSS_SIM" since="31" />
+		<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25" />
+		<field name="PROPERTY_HIGH_DEF_AUDIO" since="30" />
+		<field name="PROPERTY_IS_ADHOC_CONFERENCE" since="31" />
+		<field name="PROPERTY_IS_EXTERNAL_CALL" since="25" />
+		<field name="PROPERTY_IS_RTT" since="28" />
+		<field name="PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL" since="30" />
+		<field name="PROPERTY_SELF_MANAGED" since="26" />
+		<field name="PROPERTY_WIFI" since="30" />
+		<field name="STATE_ACTIVE" />
+		<field name="STATE_DIALING" />
+		<field name="STATE_DISCONNECTED" />
+		<field name="STATE_HOLDING" />
+		<field name="STATE_INITIALIZING" />
+		<field name="STATE_NEW" />
+		<field name="STATE_PULLING_CALL" since="25" />
+		<field name="STATE_RINGING" />
+		<field name="VERIFICATION_STATUS_FAILED" since="30" />
+		<field name="VERIFICATION_STATUS_NOT_VERIFIED" since="30" />
+		<field name="VERIFICATION_STATUS_PASSED" since="30" />
+	</class>
+	<class name="android/telecom/Connection$RttModifyStatus" since="26">
+		<extends name="java/lang/Object" />
+		<field name="SESSION_MODIFY_REQUEST_FAIL" />
+		<field name="SESSION_MODIFY_REQUEST_INVALID" />
+		<field name="SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE" />
+		<field name="SESSION_MODIFY_REQUEST_SUCCESS" />
+		<field name="SESSION_MODIFY_REQUEST_TIMED_OUT" />
+	</class>
+	<class name="android/telecom/Connection$RttTextStream" since="28">
+		<extends name="java/lang/Object" />
+		<method name="read()Ljava/lang/String;" />
+		<method name="readImmediately()Ljava/lang/String;" />
+		<method name="write(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/telecom/Connection$VideoProvider" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="changeCameraCapabilities(Landroid/telecom/VideoProfile$CameraCapabilities;)V" />
+		<method name="changePeerDimensions(II)V" />
+		<method name="changeVideoQuality(I)V" />
+		<method name="handleCallSessionEvent(I)V" />
+		<method name="onRequestCameraCapabilities()V" />
+		<method name="onRequestConnectionDataUsage()V" />
+		<method name="onSendSessionModifyRequest(Landroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V" />
+		<method name="onSendSessionModifyResponse(Landroid/telecom/VideoProfile;)V" />
+		<method name="onSetCamera(Ljava/lang/String;)V" />
+		<method name="onSetDeviceOrientation(I)V" />
+		<method name="onSetDisplaySurface(Landroid/view/Surface;)V" />
+		<method name="onSetPauseImage(Landroid/net/Uri;)V" />
+		<method name="onSetPreviewSurface(Landroid/view/Surface;)V" />
+		<method name="onSetZoom(F)V" />
+		<method name="receiveSessionModifyRequest(Landroid/telecom/VideoProfile;)V" />
+		<method name="receiveSessionModifyResponse(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V" />
+		<method name="setCallDataUsage(J)V" />
+		<field name="SESSION_EVENT_CAMERA_FAILURE" />
+		<field name="SESSION_EVENT_CAMERA_PERMISSION_ERROR" since="26" />
+		<field name="SESSION_EVENT_CAMERA_READY" />
+		<field name="SESSION_EVENT_RX_PAUSE" />
+		<field name="SESSION_EVENT_RX_RESUME" />
+		<field name="SESSION_EVENT_TX_START" />
+		<field name="SESSION_EVENT_TX_STOP" />
+		<field name="SESSION_MODIFY_REQUEST_FAIL" />
+		<field name="SESSION_MODIFY_REQUEST_INVALID" />
+		<field name="SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE" />
+		<field name="SESSION_MODIFY_REQUEST_SUCCESS" />
+		<field name="SESSION_MODIFY_REQUEST_TIMED_OUT" />
+	</class>
+	<class name="android/telecom/ConnectionRequest" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;)V" />
+		<method name="&lt;init&gt;(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;I)V" />
+		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;" />
+		<method name="getAddress()Landroid/net/Uri;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getParticipants()Ljava/util/List;" since="30" />
+		<method name="getRttTextStream()Landroid/telecom/Connection$RttTextStream;" since="28" />
+		<method name="getVideoState()I" />
+		<method name="isAdhocConferenceCall()Z" since="30" />
+		<method name="isRequestingRtt()Z" since="28" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telecom/ConnectionService" since="23">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addConference(Landroid/telecom/Conference;)V" />
+		<method name="addExistingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/Connection;)V" />
+		<method name="conferenceRemoteConnections(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConnection;)V" />
+		<method name="connectionServiceFocusReleased()V" since="28" />
+		<method name="createRemoteIncomingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConference;" since="31" />
+		<method name="createRemoteIncomingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConnection;" />
+		<method name="createRemoteOutgoingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConference;" since="31" />
+		<method name="createRemoteOutgoingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConnection;" />
+		<method name="getAllConferences()Ljava/util/Collection;" since="24" />
+		<method name="getAllConnections()Ljava/util/Collection;" />
+		<method name="onConference(Landroid/telecom/Connection;Landroid/telecom/Connection;)V" />
+		<method name="onConnectionServiceFocusGained()V" since="28" />
+		<method name="onConnectionServiceFocusLost()V" since="28" />
+		<method name="onCreateIncomingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Conference;" since="31" />
+		<method name="onCreateIncomingConferenceFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="31" />
+		<method name="onCreateIncomingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" />
+		<method name="onCreateIncomingConnectionFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="26" />
+		<method name="onCreateIncomingHandoverConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" since="28" />
+		<method name="onCreateOutgoingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Conference;" since="31" />
+		<method name="onCreateOutgoingConferenceFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="31" />
+		<method name="onCreateOutgoingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" />
+		<method name="onCreateOutgoingConnectionFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="26" />
+		<method name="onCreateOutgoingHandoverConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" since="28" />
+		<method name="onHandoverFailed(Landroid/telecom/ConnectionRequest;I)V" since="28" />
+		<method name="onRemoteConferenceAdded(Landroid/telecom/RemoteConference;)V" />
+		<method name="onRemoteExistingConnectionAdded(Landroid/telecom/RemoteConnection;)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/telecom/DisconnectCause" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="getCode()I" />
+		<method name="getDescription()Ljava/lang/CharSequence;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getReason()Ljava/lang/String;" />
+		<method name="getTone()I" />
+		<field name="ANSWERED_ELSEWHERE" since="25" />
+		<field name="BUSY" />
+		<field name="CALL_PULLED" since="25" />
+		<field name="CANCELED" />
+		<field name="CONNECTION_MANAGER_NOT_SUPPORTED" />
+		<field name="CREATOR" />
+		<field name="ERROR" />
+		<field name="LOCAL" />
+		<field name="MISSED" />
+		<field name="OTHER" />
+		<field name="REASON_EMERGENCY_CALL_PLACED" since="30" />
+		<field name="REASON_EMULATING_SINGLE_CALL" since="31" />
+		<field name="REASON_IMS_ACCESS_BLOCKED" since="31" />
+		<field name="REASON_WIFI_ON_BUT_WFC_OFF" since="31" />
+		<field name="REJECTED" />
+		<field name="REMOTE" />
+		<field name="RESTRICTED" />
+		<field name="UNKNOWN" />
+	</class>
+	<class name="android/telecom/GatewayInfo" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;)V" />
+		<method name="getGatewayAddress()Landroid/net/Uri;" />
+		<method name="getGatewayProviderPackageName()Ljava/lang/String;" />
+		<method name="getOriginalAddress()Landroid/net/Uri;" />
+		<method name="isEmpty()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telecom/InCallService" since="23">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="canAddCall()Z" />
+		<method name="getCallAudioState()Landroid/telecom/CallAudioState;" />
+		<method name="getCalls()Ljava/util/List;" />
+		<method name="onBringToForeground(Z)V" />
+		<method name="onCallAdded(Landroid/telecom/Call;)V" />
+		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V" />
+		<method name="onCallRemoved(Landroid/telecom/Call;)V" />
+		<method name="onCanAddCallChanged(Z)V" />
+		<method name="onConnectionEvent(Landroid/telecom/Call;Ljava/lang/String;Landroid/os/Bundle;)V" since="25" />
+		<method name="onSilenceRinger()V" since="24" />
+		<method name="requestBluetoothAudio(Landroid/bluetooth/BluetoothDevice;)V" since="28" />
+		<method name="setAudioRoute(I)V" />
+		<method name="setMuted(Z)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/telecom/InCallService$VideoCall" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="registerCallback(Landroid/telecom/InCallService$VideoCall$Callback;)V" />
+		<method name="registerCallback(Landroid/telecom/InCallService$VideoCall$Callback;Landroid/os/Handler;)V" />
+		<method name="requestCallDataUsage()V" />
+		<method name="requestCameraCapabilities()V" />
+		<method name="sendSessionModifyRequest(Landroid/telecom/VideoProfile;)V" />
+		<method name="sendSessionModifyResponse(Landroid/telecom/VideoProfile;)V" />
+		<method name="setCamera(Ljava/lang/String;)V" />
+		<method name="setDeviceOrientation(I)V" />
+		<method name="setDisplaySurface(Landroid/view/Surface;)V" />
+		<method name="setPauseImage(Landroid/net/Uri;)V" />
+		<method name="setPreviewSurface(Landroid/view/Surface;)V" />
+		<method name="setZoom(F)V" />
+		<method name="unregisterCallback(Landroid/telecom/InCallService$VideoCall$Callback;)V" />
+	</class>
+	<class name="android/telecom/InCallService$VideoCall$Callback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCallDataUsageChanged(J)V" />
+		<method name="onCallSessionEvent(I)V" />
+		<method name="onCameraCapabilitiesChanged(Landroid/telecom/VideoProfile$CameraCapabilities;)V" />
+		<method name="onPeerDimensionsChanged(II)V" />
+		<method name="onSessionModifyRequestReceived(Landroid/telecom/VideoProfile;)V" />
+		<method name="onSessionModifyResponseReceived(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V" />
+		<method name="onVideoQualityChanged(I)V" />
+	</class>
+	<class name="android/telecom/PhoneAccount" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="builder(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;" />
+		<method name="getAddress()Landroid/net/Uri;" />
+		<method name="getCapabilities()I" />
+		<method name="getExtras()Landroid/os/Bundle;" since="24" />
+		<method name="getHighlightColor()I" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getShortDescription()Ljava/lang/CharSequence;" />
+		<method name="getSubscriptionAddress()Landroid/net/Uri;" />
+		<method name="getSupportedUriSchemes()Ljava/util/List;" />
+		<method name="hasCapabilities(I)Z" />
+		<method name="isEnabled()Z" />
+		<method name="supportsUriScheme(Ljava/lang/String;)Z" />
+		<method name="toBuilder()Landroid/telecom/PhoneAccount$Builder;" />
+		<field name="CAPABILITY_ADHOC_CONFERENCE_CALLING" since="30" />
+		<field name="CAPABILITY_CALL_COMPOSER" since="31" />
+		<field name="CAPABILITY_CALL_PROVIDER" />
+		<field name="CAPABILITY_CALL_SUBJECT" />
+		<field name="CAPABILITY_CONNECTION_MANAGER" />
+		<field name="CAPABILITY_PLACE_EMERGENCY_CALLS" />
+		<field name="CAPABILITY_RTT" since="26" />
+		<field name="CAPABILITY_SELF_MANAGED" since="26" />
+		<field name="CAPABILITY_SIM_SUBSCRIPTION" />
+		<field name="CAPABILITY_SUPPORTS_VIDEO_CALLING" since="26" />
+		<field name="CAPABILITY_VIDEO_CALLING" />
+		<field name="CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE" since="24" />
+		<field name="CREATOR" />
+		<field name="EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE" since="31" />
+		<field name="EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE" since="31" />
+		<field name="EXTRA_CALL_SUBJECT_CHARACTER_ENCODING" since="24" />
+		<field name="EXTRA_CALL_SUBJECT_MAX_LENGTH" since="24" />
+		<field name="EXTRA_LOG_SELF_MANAGED_CALLS" since="28" />
+		<field name="EXTRA_SUPPORTS_HANDOVER_FROM" since="28" />
+		<field name="EXTRA_SUPPORTS_HANDOVER_TO" since="28" />
+		<field name="NO_HIGHLIGHT_COLOR" />
+		<field name="NO_RESOURCE_ID" />
+		<field name="SCHEME_SIP" />
+		<field name="SCHEME_TEL" />
+		<field name="SCHEME_VOICEMAIL" />
+	</class>
+	<class name="android/telecom/PhoneAccount$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/telecom/PhoneAccount;)V" />
+		<method name="&lt;init&gt;(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)V" />
+		<method name="addSupportedUriScheme(Ljava/lang/String;)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="build()Landroid/telecom/PhoneAccount;" />
+		<method name="setAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="setCapabilities(I)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/telecom/PhoneAccount$Builder;" since="24" />
+		<method name="setHighlightColor(I)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="setShortDescription(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="setSubscriptionAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;" />
+		<method name="setSupportedUriSchemes(Ljava/util/List;)Landroid/telecom/PhoneAccount$Builder;" />
+	</class>
+	<class name="android/telecom/PhoneAccountHandle" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/ComponentName;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/UserHandle;)V" />
+		<method name="getComponentName()Landroid/content/ComponentName;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getUserHandle()Landroid/os/UserHandle;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telecom/PhoneAccountSuggestion" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/telecom/PhoneAccountHandle;IZ)V" />
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;" />
+		<method name="getReason()I" />
+		<method name="shouldAutoSelect()Z" />
+		<field name="CREATOR" />
+		<field name="REASON_FREQUENT" />
+		<field name="REASON_INTRA_CARRIER" />
+		<field name="REASON_NONE" />
+		<field name="REASON_OTHER" />
+		<field name="REASON_USER_SET" />
+	</class>
+	<class name="android/telecom/RemoteConference" since="23">
+		<extends name="java/lang/Object" />
+		<method name="disconnect()V" />
+		<method name="getConferenceableConnections()Ljava/util/List;" />
+		<method name="getConnectionCapabilities()I" />
+		<method name="getConnectionProperties()I" since="24" />
+		<method name="getConnections()Ljava/util/List;" />
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getState()I" />
+		<method name="hold()V" />
+		<method name="merge()V" />
+		<method name="playDtmfTone(C)V" />
+		<method name="registerCallback(Landroid/telecom/RemoteConference$Callback;)V" />
+		<method name="registerCallback(Landroid/telecom/RemoteConference$Callback;Landroid/os/Handler;)V" />
+		<method name="separate(Landroid/telecom/RemoteConnection;)V" />
+		<method name="setCallAudioState(Landroid/telecom/CallAudioState;)V" />
+		<method name="stopDtmfTone()V" />
+		<method name="swap()V" />
+		<method name="unhold()V" />
+		<method name="unregisterCallback(Landroid/telecom/RemoteConference$Callback;)V" />
+	</class>
+	<class name="android/telecom/RemoteConference$Callback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onConferenceableConnectionsChanged(Landroid/telecom/RemoteConference;Ljava/util/List;)V" />
+		<method name="onConnectionAdded(Landroid/telecom/RemoteConference;Landroid/telecom/RemoteConnection;)V" />
+		<method name="onConnectionCapabilitiesChanged(Landroid/telecom/RemoteConference;I)V" />
+		<method name="onConnectionPropertiesChanged(Landroid/telecom/RemoteConference;I)V" since="25" />
+		<method name="onConnectionRemoved(Landroid/telecom/RemoteConference;Landroid/telecom/RemoteConnection;)V" />
+		<method name="onDestroyed(Landroid/telecom/RemoteConference;)V" />
+		<method name="onDisconnected(Landroid/telecom/RemoteConference;Landroid/telecom/DisconnectCause;)V" />
+		<method name="onExtrasChanged(Landroid/telecom/RemoteConference;Landroid/os/Bundle;)V" />
+		<method name="onStateChanged(Landroid/telecom/RemoteConference;II)V" />
+	</class>
+	<class name="android/telecom/RemoteConnection" since="23">
+		<extends name="java/lang/Object" />
+		<method name="abort()V" />
+		<method name="addConferenceParticipants(Ljava/util/List;)V" since="31" />
+		<method name="answer()V" />
+		<method name="disconnect()V" />
+		<method name="getAddress()Landroid/net/Uri;" />
+		<method name="getAddressPresentation()I" />
+		<method name="getCallerDisplayName()Ljava/lang/CharSequence;" />
+		<method name="getCallerDisplayNamePresentation()I" />
+		<method name="getConference()Landroid/telecom/RemoteConference;" />
+		<method name="getConferenceableConnections()Ljava/util/List;" />
+		<method name="getConnectionCapabilities()I" />
+		<method name="getConnectionProperties()I" since="25" />
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getState()I" />
+		<method name="getStatusHints()Landroid/telecom/StatusHints;" />
+		<method name="getVideoProvider()Landroid/telecom/RemoteConnection$VideoProvider;" />
+		<method name="getVideoState()I" />
+		<method name="hold()V" />
+		<method name="isRingbackRequested()Z" />
+		<method name="isVoipAudioMode()Z" />
+		<method name="playDtmfTone(C)V" />
+		<method name="postDialContinue(Z)V" />
+		<method name="pullExternalCall()V" since="25" />
+		<method name="registerCallback(Landroid/telecom/RemoteConnection$Callback;)V" />
+		<method name="registerCallback(Landroid/telecom/RemoteConnection$Callback;Landroid/os/Handler;)V" />
+		<method name="reject()V" />
+		<method name="setCallAudioState(Landroid/telecom/CallAudioState;)V" />
+		<method name="stopDtmfTone()V" />
+		<method name="unhold()V" />
+		<method name="unregisterCallback(Landroid/telecom/RemoteConnection$Callback;)V" />
+	</class>
+	<class name="android/telecom/RemoteConnection$Callback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAddressChanged(Landroid/telecom/RemoteConnection;Landroid/net/Uri;I)V" />
+		<method name="onCallerDisplayNameChanged(Landroid/telecom/RemoteConnection;Ljava/lang/String;I)V" />
+		<method name="onConferenceChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConference;)V" />
+		<method name="onConferenceableConnectionsChanged(Landroid/telecom/RemoteConnection;Ljava/util/List;)V" />
+		<method name="onConnectionCapabilitiesChanged(Landroid/telecom/RemoteConnection;I)V" />
+		<method name="onConnectionEvent(Landroid/telecom/RemoteConnection;Ljava/lang/String;Landroid/os/Bundle;)V" since="25" />
+		<method name="onConnectionPropertiesChanged(Landroid/telecom/RemoteConnection;I)V" since="25" />
+		<method name="onDestroyed(Landroid/telecom/RemoteConnection;)V" />
+		<method name="onDisconnected(Landroid/telecom/RemoteConnection;Landroid/telecom/DisconnectCause;)V" />
+		<method name="onExtrasChanged(Landroid/telecom/RemoteConnection;Landroid/os/Bundle;)V" />
+		<method name="onPostDialChar(Landroid/telecom/RemoteConnection;C)V" />
+		<method name="onPostDialWait(Landroid/telecom/RemoteConnection;Ljava/lang/String;)V" />
+		<method name="onRingbackRequested(Landroid/telecom/RemoteConnection;Z)V" />
+		<method name="onStateChanged(Landroid/telecom/RemoteConnection;I)V" />
+		<method name="onStatusHintsChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/StatusHints;)V" />
+		<method name="onVideoProviderChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConnection$VideoProvider;)V" />
+		<method name="onVideoStateChanged(Landroid/telecom/RemoteConnection;I)V" />
+		<method name="onVoipAudioChanged(Landroid/telecom/RemoteConnection;Z)V" />
+	</class>
+	<class name="android/telecom/RemoteConnection$VideoProvider" since="23">
+		<extends name="java/lang/Object" />
+		<method name="registerCallback(Landroid/telecom/RemoteConnection$VideoProvider$Callback;)V" />
+		<method name="requestCallDataUsage()V" />
+		<method name="requestCameraCapabilities()V" />
+		<method name="sendSessionModifyRequest(Landroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V" />
+		<method name="sendSessionModifyResponse(Landroid/telecom/VideoProfile;)V" />
+		<method name="setCamera(Ljava/lang/String;)V" />
+		<method name="setDeviceOrientation(I)V" />
+		<method name="setDisplaySurface(Landroid/view/Surface;)V" />
+		<method name="setPauseImage(Landroid/net/Uri;)V" />
+		<method name="setPreviewSurface(Landroid/view/Surface;)V" />
+		<method name="setZoom(F)V" />
+		<method name="unregisterCallback(Landroid/telecom/RemoteConnection$VideoProvider$Callback;)V" />
+	</class>
+	<class name="android/telecom/RemoteConnection$VideoProvider$Callback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCallDataUsageChanged(Landroid/telecom/RemoteConnection$VideoProvider;J)V" />
+		<method name="onCallSessionEvent(Landroid/telecom/RemoteConnection$VideoProvider;I)V" />
+		<method name="onCameraCapabilitiesChanged(Landroid/telecom/RemoteConnection$VideoProvider;Landroid/telecom/VideoProfile$CameraCapabilities;)V" />
+		<method name="onPeerDimensionsChanged(Landroid/telecom/RemoteConnection$VideoProvider;II)V" />
+		<method name="onSessionModifyRequestReceived(Landroid/telecom/RemoteConnection$VideoProvider;Landroid/telecom/VideoProfile;)V" />
+		<method name="onSessionModifyResponseReceived(Landroid/telecom/RemoteConnection$VideoProvider;ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V" />
+		<method name="onVideoQualityChanged(Landroid/telecom/RemoteConnection$VideoProvider;I)V" />
+	</class>
+	<class name="android/telecom/StatusHints" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/graphics/drawable/Icon;Landroid/os/Bundle;)V" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telecom/TelecomManager" since="21">
+		<extends name="java/lang/Object" />
+		<method name="acceptHandover(Landroid/net/Uri;ILandroid/telecom/PhoneAccountHandle;)V" since="28" />
+		<method name="acceptRingingCall()V" since="26" deprecated="29" />
+		<method name="acceptRingingCall(I)V" since="26" deprecated="29" />
+		<method name="addNewIncomingCall(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V" since="23" />
+		<method name="addNewIncomingConference(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V" since="31" />
+		<method name="cancelMissedCallsNotification()V" />
+		<method name="createManageBlockedNumbersIntent()Landroid/content/Intent;" since="24" />
+		<method name="endCall()Z" since="28" deprecated="29" />
+		<method name="getAdnUriForPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="23" />
+		<method name="getCallCapablePhoneAccounts()Ljava/util/List;" since="23" />
+		<method name="getDefaultDialerPackage()Ljava/lang/String;" since="23" />
+		<method name="getDefaultOutgoingPhoneAccount(Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;" since="23" />
+		<method name="getLine1Number(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;" since="23" />
+		<method name="getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;" since="23" />
+		<method name="getSelfManagedPhoneAccounts()Ljava/util/List;" since="26" />
+		<method name="getSimCallManager()Landroid/telecom/PhoneAccountHandle;" since="23" />
+		<method name="getSimCallManagerForSubscription(I)Landroid/telecom/PhoneAccountHandle;" since="30" />
+		<method name="getSystemDialerPackage()Ljava/lang/String;" since="29" />
+		<method name="getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle;" since="29" />
+		<method name="getVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;" since="23" />
+		<method name="handleMmi(Ljava/lang/String;)Z" />
+		<method name="handleMmi(Ljava/lang/String;Landroid/telecom/PhoneAccountHandle;)Z" since="23" />
+		<method name="hasManageOngoingCallsPermission()Z" since="31" />
+		<method name="isInCall()Z" />
+		<method name="isInManagedCall()Z" since="26" />
+		<method name="isIncomingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z" since="26" />
+		<method name="isOutgoingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z" since="26" />
+		<method name="isTtySupported()Z" since="28" />
+		<method name="isVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Z" since="23" />
+		<method name="placeCall(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23" />
+		<method name="registerPhoneAccount(Landroid/telecom/PhoneAccount;)V" since="23" />
+		<method name="showInCallScreen(Z)V" />
+		<method name="silenceRinger()V" since="23" />
+		<method name="startConference(Ljava/util/List;Landroid/os/Bundle;)V" since="31" />
+		<method name="unregisterPhoneAccount(Landroid/telecom/PhoneAccountHandle;)V" since="23" />
+		<field name="ACTION_CHANGE_DEFAULT_DIALER" since="23" />
+		<field name="ACTION_CHANGE_PHONE_ACCOUNTS" since="23" />
+		<field name="ACTION_CONFIGURE_PHONE_ACCOUNT" since="23" />
+		<field name="ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED" since="29" />
+		<field name="ACTION_DEFAULT_DIALER_CHANGED" since="23" />
+		<field name="ACTION_INCOMING_CALL" since="23" deprecated="26" />
+		<field name="ACTION_PHONE_ACCOUNT_REGISTERED" since="26" />
+		<field name="ACTION_PHONE_ACCOUNT_UNREGISTERED" since="26" />
+		<field name="ACTION_POST_CALL" since="30" />
+		<field name="ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS" since="23" />
+		<field name="ACTION_SHOW_CALL_SETTINGS" />
+		<field name="ACTION_SHOW_MISSED_CALLS_NOTIFICATION" since="24" />
+		<field name="ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS" since="23" />
+		<field name="DTMF_CHARACTER_PAUSE" />
+		<field name="DTMF_CHARACTER_WAIT" />
+		<field name="DURATION_LONG" since="30" />
+		<field name="DURATION_MEDIUM" since="30" />
+		<field name="DURATION_SHORT" since="30" />
+		<field name="DURATION_VERY_SHORT" since="30" />
+		<field name="EXTRA_CALL_BACK_NUMBER" since="23" />
+		<field name="EXTRA_CALL_DISCONNECT_CAUSE" />
+		<field name="EXTRA_CALL_DISCONNECT_MESSAGE" />
+		<field name="EXTRA_CALL_DURATION" since="30" />
+		<field name="EXTRA_CALL_NETWORK_TYPE" since="29" />
+		<field name="EXTRA_CALL_SUBJECT" since="23" />
+		<field name="EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME" since="23" />
+		<field name="EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME" since="29" />
+		<field name="EXTRA_DISCONNECT_CAUSE" since="30" />
+		<field name="EXTRA_HANDLE" since="30" />
+		<field name="EXTRA_HAS_PICTURE" since="31" />
+		<field name="EXTRA_INCOMING_CALL_ADDRESS" since="23" />
+		<field name="EXTRA_INCOMING_CALL_EXTRAS" since="23" />
+		<field name="EXTRA_INCOMING_VIDEO_STATE" since="26" />
+		<field name="EXTRA_IS_DEFAULT_CALL_SCREENING_APP" since="29" />
+		<field name="EXTRA_LOCATION" since="31" />
+		<field name="EXTRA_NOTIFICATION_COUNT" since="24" />
+		<field name="EXTRA_NOTIFICATION_PHONE_NUMBER" since="24" />
+		<field name="EXTRA_OUTGOING_CALL_EXTRAS" since="23" />
+		<field name="EXTRA_OUTGOING_PICTURE" since="31" />
+		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="23" />
+		<field name="EXTRA_PICTURE_URI" since="31" />
+		<field name="EXTRA_PRIORITY" since="31" />
+		<field name="EXTRA_START_CALL_WITH_RTT" since="26" />
+		<field name="EXTRA_START_CALL_WITH_SPEAKERPHONE" />
+		<field name="EXTRA_START_CALL_WITH_VIDEO_STATE" since="23" />
+		<field name="EXTRA_USE_ASSISTED_DIALING" since="30" />
+		<field name="GATEWAY_ORIGINAL_ADDRESS" />
+		<field name="GATEWAY_PROVIDER_PACKAGE" />
+		<field name="METADATA_INCLUDE_EXTERNAL_CALLS" since="25" />
+		<field name="METADATA_INCLUDE_SELF_MANAGED_CALLS" since="26" />
+		<field name="METADATA_IN_CALL_SERVICE_CAR_MODE_UI" since="29" />
+		<field name="METADATA_IN_CALL_SERVICE_RINGING" since="24" />
+		<field name="METADATA_IN_CALL_SERVICE_UI" since="23" />
+		<field name="PRESENTATION_ALLOWED" />
+		<field name="PRESENTATION_PAYPHONE" />
+		<field name="PRESENTATION_RESTRICTED" />
+		<field name="PRESENTATION_UNKNOWN" />
+		<field name="PRIORITY_NORMAL" since="31" />
+		<field name="PRIORITY_URGENT" since="31" />
+	</class>
+	<class name="android/telecom/VideoProfile" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getQuality()I" />
+		<method name="getVideoState()I" />
+		<method name="isAudioOnly(I)Z" />
+		<method name="isBidirectional(I)Z" />
+		<method name="isPaused(I)Z" />
+		<method name="isReceptionEnabled(I)Z" />
+		<method name="isTransmissionEnabled(I)Z" />
+		<method name="isVideo(I)Z" />
+		<method name="videoStateToString(I)Ljava/lang/String;" />
+		<field name="CREATOR" />
+		<field name="QUALITY_DEFAULT" />
+		<field name="QUALITY_HIGH" />
+		<field name="QUALITY_LOW" />
+		<field name="QUALITY_MEDIUM" />
+		<field name="STATE_AUDIO_ONLY" />
+		<field name="STATE_BIDIRECTIONAL" />
+		<field name="STATE_PAUSED" />
+		<field name="STATE_RX_ENABLED" />
+		<field name="STATE_TX_ENABLED" />
+	</class>
+	<class name="android/telecom/VideoProfile$CameraCapabilities" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(IIZF)V" since="29" />
+		<method name="getHeight()I" />
+		<method name="getMaxZoom()F" since="29" />
+		<method name="getWidth()I" />
+		<method name="isZoomSupported()Z" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/AccessNetworkConstants" since="28">
+		<extends name="java/lang/Object" />
+		<field name="TRANSPORT_TYPE_WLAN" since="30" />
+		<field name="TRANSPORT_TYPE_WWAN" since="30" />
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$AccessNetworkType" since="28">
+		<extends name="java/lang/Object" />
+		<field name="CDMA2000" />
+		<field name="EUTRAN" />
+		<field name="GERAN" />
+		<field name="IWLAN" />
+		<field name="NGRAN" since="30" />
+		<field name="UNKNOWN" />
+		<field name="UTRAN" />
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$EutranBand" since="28">
+		<extends name="java/lang/Object" />
+		<field name="BAND_1" />
+		<field name="BAND_10" />
+		<field name="BAND_11" />
+		<field name="BAND_12" />
+		<field name="BAND_13" />
+		<field name="BAND_14" />
+		<field name="BAND_17" />
+		<field name="BAND_18" />
+		<field name="BAND_19" />
+		<field name="BAND_2" />
+		<field name="BAND_20" />
+		<field name="BAND_21" />
+		<field name="BAND_22" />
+		<field name="BAND_23" />
+		<field name="BAND_24" />
+		<field name="BAND_25" />
+		<field name="BAND_26" />
+		<field name="BAND_27" />
+		<field name="BAND_28" />
+		<field name="BAND_3" />
+		<field name="BAND_30" />
+		<field name="BAND_31" />
+		<field name="BAND_33" />
+		<field name="BAND_34" />
+		<field name="BAND_35" />
+		<field name="BAND_36" />
+		<field name="BAND_37" />
+		<field name="BAND_38" />
+		<field name="BAND_39" />
+		<field name="BAND_4" />
+		<field name="BAND_40" />
+		<field name="BAND_41" />
+		<field name="BAND_42" />
+		<field name="BAND_43" />
+		<field name="BAND_44" />
+		<field name="BAND_45" />
+		<field name="BAND_46" />
+		<field name="BAND_47" />
+		<field name="BAND_48" />
+		<field name="BAND_49" since="30" />
+		<field name="BAND_5" />
+		<field name="BAND_50" since="30" />
+		<field name="BAND_51" since="30" />
+		<field name="BAND_52" since="30" />
+		<field name="BAND_53" since="30" />
+		<field name="BAND_6" />
+		<field name="BAND_65" />
+		<field name="BAND_66" />
+		<field name="BAND_68" />
+		<field name="BAND_7" />
+		<field name="BAND_70" />
+		<field name="BAND_71" since="30" />
+		<field name="BAND_72" since="30" />
+		<field name="BAND_73" since="30" />
+		<field name="BAND_74" since="30" />
+		<field name="BAND_8" />
+		<field name="BAND_85" since="30" />
+		<field name="BAND_87" since="30" />
+		<field name="BAND_88" since="30" />
+		<field name="BAND_9" />
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$GeranBand" since="28">
+		<extends name="java/lang/Object" />
+		<field name="BAND_450" />
+		<field name="BAND_480" />
+		<field name="BAND_710" />
+		<field name="BAND_750" />
+		<field name="BAND_850" />
+		<field name="BAND_DCS1800" />
+		<field name="BAND_E900" />
+		<field name="BAND_ER900" />
+		<field name="BAND_P900" />
+		<field name="BAND_PCS1900" />
+		<field name="BAND_R900" />
+		<field name="BAND_T380" />
+		<field name="BAND_T410" />
+		<field name="BAND_T810" />
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$NgranBands" since="30">
+		<extends name="java/lang/Object" />
+		<field name="BAND_1" />
+		<field name="BAND_12" />
+		<field name="BAND_14" />
+		<field name="BAND_18" />
+		<field name="BAND_2" />
+		<field name="BAND_20" />
+		<field name="BAND_25" />
+		<field name="BAND_257" />
+		<field name="BAND_258" />
+		<field name="BAND_26" since="31" />
+		<field name="BAND_260" />
+		<field name="BAND_261" />
+		<field name="BAND_28" />
+		<field name="BAND_29" />
+		<field name="BAND_3" />
+		<field name="BAND_30" />
+		<field name="BAND_34" />
+		<field name="BAND_38" />
+		<field name="BAND_39" />
+		<field name="BAND_40" />
+		<field name="BAND_41" />
+		<field name="BAND_46" since="31" />
+		<field name="BAND_48" />
+		<field name="BAND_5" />
+		<field name="BAND_50" />
+		<field name="BAND_51" />
+		<field name="BAND_53" since="31" />
+		<field name="BAND_65" />
+		<field name="BAND_66" />
+		<field name="BAND_7" />
+		<field name="BAND_70" />
+		<field name="BAND_71" />
+		<field name="BAND_74" />
+		<field name="BAND_75" />
+		<field name="BAND_76" />
+		<field name="BAND_77" />
+		<field name="BAND_78" />
+		<field name="BAND_79" />
+		<field name="BAND_8" />
+		<field name="BAND_80" />
+		<field name="BAND_81" />
+		<field name="BAND_82" />
+		<field name="BAND_83" />
+		<field name="BAND_84" />
+		<field name="BAND_86" />
+		<field name="BAND_89" />
+		<field name="BAND_90" />
+		<field name="BAND_91" />
+		<field name="BAND_92" />
+		<field name="BAND_93" />
+		<field name="BAND_94" />
+		<field name="BAND_95" />
+		<field name="BAND_96" since="31" />
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$UtranBand" since="28">
+		<extends name="java/lang/Object" />
+		<field name="BAND_1" />
+		<field name="BAND_10" />
+		<field name="BAND_11" />
+		<field name="BAND_12" />
+		<field name="BAND_13" />
+		<field name="BAND_14" />
+		<field name="BAND_19" />
+		<field name="BAND_2" />
+		<field name="BAND_20" />
+		<field name="BAND_21" />
+		<field name="BAND_22" />
+		<field name="BAND_25" />
+		<field name="BAND_26" />
+		<field name="BAND_3" />
+		<field name="BAND_4" />
+		<field name="BAND_5" />
+		<field name="BAND_6" />
+		<field name="BAND_7" />
+		<field name="BAND_8" />
+		<field name="BAND_9" />
+		<field name="BAND_A" since="30" />
+		<field name="BAND_B" since="30" />
+		<field name="BAND_C" since="30" />
+		<field name="BAND_D" since="30" />
+		<field name="BAND_E" since="30" />
+		<field name="BAND_F" since="30" />
+	</class>
+	<class name="android/telephony/AvailableNetworkInfo" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(IILjava/util/List;Ljava/util/List;)V" />
+		<method name="getBands()Ljava/util/List;" />
+		<method name="getMccMncs()Ljava/util/List;" />
+		<method name="getPriority()I" />
+		<method name="getSubId()I" />
+		<field name="CREATOR" />
+		<field name="PRIORITY_HIGH" />
+		<field name="PRIORITY_LOW" />
+		<field name="PRIORITY_MED" />
+	</class>
+	<class name="android/telephony/BarringInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBarringServiceInfo(I)Landroid/telephony/BarringInfo$BarringServiceInfo;" />
+		<field name="BARRING_SERVICE_TYPE_CS_FALLBACK" />
+		<field name="BARRING_SERVICE_TYPE_CS_SERVICE" />
+		<field name="BARRING_SERVICE_TYPE_CS_VOICE" />
+		<field name="BARRING_SERVICE_TYPE_EMERGENCY" />
+		<field name="BARRING_SERVICE_TYPE_MMTEL_VIDEO" />
+		<field name="BARRING_SERVICE_TYPE_MMTEL_VOICE" />
+		<field name="BARRING_SERVICE_TYPE_MO_DATA" />
+		<field name="BARRING_SERVICE_TYPE_MO_SIGNALLING" />
+		<field name="BARRING_SERVICE_TYPE_PS_SERVICE" />
+		<field name="BARRING_SERVICE_TYPE_SMS" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/BarringInfo$BarringServiceInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBarringType()I" />
+		<method name="getConditionalBarringFactor()I" />
+		<method name="getConditionalBarringTimeSeconds()I" />
+		<method name="isBarred()Z" />
+		<method name="isConditionallyBarred()Z" />
+		<field name="BARRING_TYPE_CONDITIONAL" />
+		<field name="BARRING_TYPE_NONE" />
+		<field name="BARRING_TYPE_UNCONDITIONAL" />
+		<field name="BARRING_TYPE_UNKNOWN" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CarrierConfigManager" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getConfig()Landroid/os/PersistableBundle;" />
+		<method name="getConfigByComponentForSubId(Ljava/lang/String;I)Landroid/os/PersistableBundle;" since="30" />
+		<method name="getConfigForSubId(I)Landroid/os/PersistableBundle;" />
+		<method name="isConfigForIdentifiedCarrier(Landroid/os/PersistableBundle;)Z" since="28" />
+		<method name="notifyConfigChangedForSubId(I)V" />
+		<field name="ACTION_CARRIER_CONFIG_CHANGED" />
+		<field name="CARRIER_NR_AVAILABILITY_NSA" since="31" />
+		<field name="CARRIER_NR_AVAILABILITY_SA" since="31" />
+		<field name="CROSS_SIM_SPN_FORMAT_CARRIER_NAME_ONLY" since="31" />
+		<field name="CROSS_SIM_SPN_FORMAT_CARRIER_NAME_WITH_BRANDING" since="31" />
+		<field name="DATA_CYCLE_THRESHOLD_DISABLED" since="26" />
+		<field name="DATA_CYCLE_USE_PLATFORM_DEFAULT" since="30" />
+		<field name="ENABLE_EAP_METHOD_PREFIX_BOOL" since="30" />
+		<field name="EXTRA_REBROADCAST_ON_UNLOCK" since="31" />
+		<field name="EXTRA_SLOT_INDEX" since="28" />
+		<field name="EXTRA_SUBSCRIPTION_INDEX" since="28" />
+		<field name="IMSI_KEY_AVAILABILITY_INT" since="30" />
+		<field name="KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY" since="30" />
+		<field name="KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY" since="30" />
+		<field name="KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY" since="30" />
+		<field name="KEY_ADDITIONAL_CALL_SETTING_BOOL" />
+		<field name="KEY_ALLOW_ADDING_APNS_BOOL" since="24" />
+		<field name="KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL" since="25" />
+		<field name="KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL" />
+		<field name="KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL" since="24" />
+		<field name="KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL" since="30" />
+		<field name="KEY_ALLOW_HOLD_VIDEO_CALL_BOOL" since="30" />
+		<field name="KEY_ALLOW_LOCAL_DTMF_TONES_BOOL" />
+		<field name="KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL" since="25" />
+		<field name="KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL" since="24" />
+		<field name="KEY_ALLOW_VIDEO_CALLING_FALLBACK_BOOL" since="30" />
+		<field name="KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL" since="30" />
+		<field name="KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL" since="24" deprecated="30" />
+		<field name="KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN" since="30" />
+		<field name="KEY_APN_EXPAND_BOOL" />
+		<field name="KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY" since="30" />
+		<field name="KEY_AUTO_RETRY_ENABLED_BOOL" />
+		<field name="KEY_CALL_BARRING_DEFAULT_SERVICE_CLASS_INT" since="31" />
+		<field name="KEY_CALL_BARRING_SUPPORTS_DEACTIVATE_ALL_BOOL" since="29" />
+		<field name="KEY_CALL_BARRING_SUPPORTS_PASSWORD_CHANGE_BOOL" since="29" />
+		<field name="KEY_CALL_BARRING_VISIBILITY_BOOL" since="29" />
+		<field name="KEY_CALL_COMPOSER_PICTURE_SERVER_URL_STRING" since="31" />
+		<field name="KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY" since="26" />
+		<field name="KEY_CALL_REDIRECTION_SERVICE_COMPONENT_NAME_STRING" since="30" />
+		<field name="KEY_CARRIER_ALLOW_DEFLECT_IMS_CALL_BOOL" since="30" />
+		<field name="KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL" />
+		<field name="KEY_CARRIER_APP_REQUIRED_DURING_SIM_SETUP_BOOL" since="30" />
+		<field name="KEY_CARRIER_CALL_SCREENING_APP_STRING" since="29" />
+		<field name="KEY_CARRIER_CERTIFICATE_STRING_ARRAY" since="30" />
+		<field name="KEY_CARRIER_CONFIG_APPLIED_BOOL" since="30" />
+		<field name="KEY_CARRIER_CONFIG_VERSION_STRING" since="29" />
+		<field name="KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL" since="31" />
+		<field name="KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS" since="26" />
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY" since="30" />
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_DEFAULT_NETWORK_AVAILABLE" since="30" />
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY" since="30" />
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_RESET" since="30" />
+		<field name="KEY_CARRIER_DEFAULT_REDIRECTION_URL_STRING_ARRAY" since="30" />
+		<field name="KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL" since="30" />
+		<field name="KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT" since="29" />
+		<field name="KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT" since="29" />
+		<field name="KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL" since="24" deprecated="30" />
+		<field name="KEY_CARRIER_IMS_GBA_REQUIRED_BOOL" since="24" />
+		<field name="KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL" since="24" />
+		<field name="KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING" since="24" />
+		<field name="KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING" since="24" />
+		<field name="KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING" since="24" />
+		<field name="KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT" since="24" />
+		<field name="KEY_CARRIER_NAME_OVERRIDE_BOOL" since="28" />
+		<field name="KEY_CARRIER_NAME_STRING" since="28" />
+		<field name="KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY" since="31" />
+		<field name="KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL" since="31" />
+		<field name="KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL" since="30" />
+		<field name="KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING" since="30" />
+		<field name="KEY_CARRIER_SETTINGS_ENABLE_BOOL" />
+		<field name="KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL" since="29" />
+		<field name="KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL" since="24" />
+		<field name="KEY_CARRIER_USSD_METHOD_INT" since="31" />
+		<field name="KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL" since="29" />
+		<field name="KEY_CARRIER_VOLTE_AVAILABLE_BOOL" />
+		<field name="KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL" since="30" />
+		<field name="KEY_CARRIER_VOLTE_PROVISIONED_BOOL" since="26" />
+		<field name="KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL" />
+		<field name="KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL" />
+		<field name="KEY_CARRIER_VT_AVAILABLE_BOOL" />
+		<field name="KEY_CARRIER_VVM_PACKAGE_NAME_STRING" deprecated="26" />
+		<field name="KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY" since="26" />
+		<field name="KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL" />
+		<field name="KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL" since="24" />
+		<field name="KEY_CDMA_3WAYCALL_FLASH_DELAY_INT" since="26" />
+		<field name="KEY_CDMA_DTMF_TONE_DELAY_INT" since="24" />
+		<field name="KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY" />
+		<field name="KEY_CDMA_ROAMING_MODE_INT" since="28" />
+		<field name="KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY" />
+		<field name="KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL" since="30" />
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_BOOL" since="24" />
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING" since="24" />
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING" since="24" />
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING" since="24" />
+		<field name="KEY_CONFIG_IMS_MMTEL_PACKAGE_OVERRIDE_STRING" since="30" />
+		<field name="KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING" since="26" deprecated="30" />
+		<field name="KEY_CONFIG_IMS_RCS_PACKAGE_OVERRIDE_STRING" since="30" />
+		<field name="KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING" since="28" />
+		<field name="KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL" since="28" />
+		<field name="KEY_CONFIG_WIFI_DISABLE_IN_ECBM" since="30" />
+		<field name="KEY_CROSS_SIM_SPN_FORMAT_INT" since="31" />
+		<field name="KEY_CSP_ENABLED_BOOL" />
+		<field name="KEY_DATA_LIMIT_NOTIFICATION_BOOL" since="30" />
+		<field name="KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG" since="26" />
+		<field name="KEY_DATA_RAPID_NOTIFICATION_BOOL" since="30" />
+		<field name="KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG" since="30" />
+		<field name="KEY_DATA_WARNING_NOTIFICATION_BOOL" since="30" />
+		<field name="KEY_DATA_WARNING_THRESHOLD_BYTES_LONG" since="26" />
+		<field name="KEY_DEFAULT_SIM_CALL_MANAGER_STRING" />
+		<field name="KEY_DEFAULT_VM_NUMBER_ROAMING_AND_IMS_UNREGISTERED_STRING" since="30" />
+		<field name="KEY_DEFAULT_VM_NUMBER_STRING" since="26" />
+		<field name="KEY_DIAL_STRING_REPLACE_STRING_ARRAY" since="26" />
+		<field name="KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL" />
+		<field name="KEY_DISABLE_CHARGE_INDICATION_BOOL" since="30" />
+		<field name="KEY_DISABLE_SUPPLEMENTARY_SERVICES_IN_AIRPLANE_MODE_BOOL" since="30" />
+		<field name="KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY" since="30" />
+		<field name="KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL" since="31" />
+		<field name="KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL" since="27" />
+		<field name="KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL" since="25" />
+		<field name="KEY_DTMF_TYPE_ENABLED_BOOL" />
+		<field name="KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT" since="24" />
+		<field name="KEY_EDITABLE_ENHANCED_4G_LTE_BOOL" since="24" />
+		<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_BOOL" since="26" />
+		<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL" since="28" />
+		<field name="KEY_EDITABLE_WFC_MODE_BOOL" since="30" />
+		<field name="KEY_EDITABLE_WFC_ROAMING_MODE_BOOL" since="30" />
+		<field name="KEY_EMERGENCY_NOTIFICATION_DELAY_INT" since="30" />
+		<field name="KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY" since="29" />
+		<field name="KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL" />
+		<field name="KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL" since="29" />
+		<field name="KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT" since="30" />
+		<field name="KEY_FORCE_HOME_NETWORK_BOOL" />
+		<field name="KEY_GSM_DTMF_TONE_DELAY_INT" since="24" />
+		<field name="KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY" />
+		<field name="KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY" />
+		<field name="KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL" />
+		<field name="KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL" />
+		<field name="KEY_HIDE_ENABLE_2G" since="31" />
+		<field name="KEY_HIDE_ENHANCED_4G_LTE_BOOL" since="26" />
+		<field name="KEY_HIDE_IMS_APN_BOOL" since="24" />
+		<field name="KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL" since="30" />
+		<field name="KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL" since="24" />
+		<field name="KEY_HIDE_PRESET_APN_DETAILS_BOOL" since="29" />
+		<field name="KEY_HIDE_SIM_LOCK_SETTINGS_BOOL" />
+		<field name="KEY_HIDE_TTY_HCO_VCO_WITH_RTT_BOOL" since="31" />
+		<field name="KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS" since="30" />
+		<field name="KEY_IGNORE_RTT_MODE_SETTING_BOOL" since="30" />
+		<field name="KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL" />
+		<field name="KEY_IMS_CONFERENCE_SIZE_LIMIT_INT" since="26" />
+		<field name="KEY_IMS_DTMF_TONE_DELAY_INT" since="24" />
+		<field name="KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL" since="26" />
+		<field name="KEY_LTE_ENABLED_BOOL" since="30" />
+		<field name="KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY" since="30" />
+		<field name="KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY" since="30" />
+		<field name="KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL" since="26" />
+		<field name="KEY_MMS_ALIAS_ENABLED_BOOL" />
+		<field name="KEY_MMS_ALIAS_MAX_CHARS_INT" />
+		<field name="KEY_MMS_ALIAS_MIN_CHARS_INT" />
+		<field name="KEY_MMS_ALLOW_ATTACH_AUDIO_BOOL" />
+		<field name="KEY_MMS_APPEND_TRANSACTION_ID_BOOL" />
+		<field name="KEY_MMS_CLOSE_CONNECTION_BOOL" since="30" />
+		<field name="KEY_MMS_EMAIL_GATEWAY_NUMBER_STRING" />
+		<field name="KEY_MMS_GROUP_MMS_ENABLED_BOOL" />
+		<field name="KEY_MMS_HTTP_PARAMS_STRING" />
+		<field name="KEY_MMS_HTTP_SOCKET_TIMEOUT_INT" />
+		<field name="KEY_MMS_MAX_IMAGE_HEIGHT_INT" />
+		<field name="KEY_MMS_MAX_IMAGE_WIDTH_INT" />
+		<field name="KEY_MMS_MAX_MESSAGE_SIZE_INT" />
+		<field name="KEY_MMS_MESSAGE_TEXT_MAX_SIZE_INT" />
+		<field name="KEY_MMS_MMS_DELIVERY_REPORT_ENABLED_BOOL" />
+		<field name="KEY_MMS_MMS_ENABLED_BOOL" />
+		<field name="KEY_MMS_MMS_READ_REPORT_ENABLED_BOOL" />
+		<field name="KEY_MMS_MULTIPART_SMS_ENABLED_BOOL" />
+		<field name="KEY_MMS_NAI_SUFFIX_STRING" />
+		<field name="KEY_MMS_NOTIFY_WAP_MMSC_ENABLED_BOOL" />
+		<field name="KEY_MMS_RECIPIENT_LIMIT_INT" />
+		<field name="KEY_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_BOOL" />
+		<field name="KEY_MMS_SHOW_CELL_BROADCAST_APP_LINKS_BOOL" />
+		<field name="KEY_MMS_SMS_DELIVERY_REPORT_ENABLED_BOOL" />
+		<field name="KEY_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_INT" />
+		<field name="KEY_MMS_SMS_TO_MMS_TEXT_THRESHOLD_INT" />
+		<field name="KEY_MMS_SUBJECT_MAX_LENGTH_INT" />
+		<field name="KEY_MMS_SUPPORT_HTTP_CHARSET_HEADER_BOOL" />
+		<field name="KEY_MMS_SUPPORT_MMS_CONTENT_DISPOSITION_BOOL" />
+		<field name="KEY_MMS_UA_PROF_TAG_NAME_STRING" />
+		<field name="KEY_MMS_UA_PROF_URL_STRING" />
+		<field name="KEY_MMS_USER_AGENT_STRING" />
+		<field name="KEY_MONTHLY_DATA_CYCLE_DAY_INT" since="26" />
+		<field name="KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL" since="30" />
+		<field name="KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY" since="26" />
+		<field name="KEY_OPERATOR_SELECTION_EXPAND_BOOL" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_BACKOFF_TIME_LONG" since="30" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG" since="30" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG" since="29" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG" since="29" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_BANDWIDTH_INT" since="29" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSRP_INT" since="29" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSSNR_INT" since="29" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSRP_INT" since="29" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSSNR_INT" since="29" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_MAX_BACKOFF_TIME_LONG" since="30" />
+		<field name="KEY_OPPORTUNISTIC_NETWORK_PING_PONG_TIME_LONG" since="30" />
+		<field name="KEY_PING_TEST_BEFORE_DATA_SWITCH_BOOL" since="30" />
+		<field name="KEY_PREFER_2G_BOOL" />
+		<field name="KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL" since="30" />
+		<field name="KEY_RADIO_RESTART_FAILURE_CAUSES_INT_ARRAY" since="29" />
+		<field name="KEY_RCS_CONFIG_SERVER_URL_STRING" since="26" />
+		<field name="KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY" since="30" />
+		<field name="KEY_READ_ONLY_APN_TYPES_STRING_ARRAY" since="30" />
+		<field name="KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL" since="24" />
+		<field name="KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL" since="26" deprecated="29" />
+		<field name="KEY_RTT_AUTO_UPGRADE_BOOL" since="31" />
+		<field name="KEY_RTT_DOWNGRADE_SUPPORTED_BOOL" since="31" />
+		<field name="KEY_RTT_SUPPORTED_BOOL" since="28" />
+		<field name="KEY_RTT_SUPPORTED_FOR_VT_BOOL" since="31" />
+		<field name="KEY_RTT_SUPPORTED_WHILE_ROAMING_BOOL" since="31" />
+		<field name="KEY_RTT_UPGRADE_SUPPORTED_BOOL" since="31" />
+		<field name="KEY_RTT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_VT_CALL_BOOL" since="31" />
+		<field name="KEY_SHOW_4G_FOR_3G_DATA_ICON_BOOL" since="30" />
+		<field name="KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL" since="30" />
+		<field name="KEY_SHOW_APN_SETTING_CDMA_BOOL" />
+		<field name="KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL" since="30" />
+		<field name="KEY_SHOW_CALL_BLOCKING_DISABLED_NOTIFICATION_ALWAYS_BOOL" since="29" />
+		<field name="KEY_SHOW_CDMA_CHOICES_BOOL" />
+		<field name="KEY_SHOW_FORWARDED_NUMBER_BOOL" since="30" />
+		<field name="KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL" since="24" />
+		<field name="KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL" since="30" />
+		<field name="KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL" />
+		<field name="KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL" since="28" />
+		<field name="KEY_SHOW_VIDEO_CALL_CHARGES_ALERT_DIALOG_BOOL" since="30" />
+		<field name="KEY_SHOW_WFC_LOCATION_PRIVACY_POLICY_BOOL" since="30" />
+		<field name="KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL" since="26" />
+		<field name="KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL" />
+		<field name="KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL" since="26" />
+		<field name="KEY_SUPPORTS_CALL_COMPOSER_BOOL" since="31" />
+		<field name="KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_DTMF_BOOL" since="31" />
+		<field name="KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_RTP_BOOL" since="31" />
+		<field name="KEY_SUPPORTS_SDP_NEGOTIATION_OF_D2D_RTP_HEADER_EXTENSIONS_BOOL" since="31" />
+		<field name="KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL" since="26" />
+		<field name="KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL" since="31" />
+		<field name="KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL" since="31" />
+		<field name="KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL" since="29" />
+		<field name="KEY_SUPPORT_CONFERENCE_CALL_BOOL" since="24" />
+		<field name="KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL" since="29" />
+		<field name="KEY_SUPPORT_ENHANCED_CALL_BLOCKING_BOOL" since="30" />
+		<field name="KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL" since="30" />
+		<field name="KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL" />
+		<field name="KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL" />
+		<field name="KEY_SUPPORT_TDSCDMA_BOOL" since="30" />
+		<field name="KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY" since="30" />
+		<field name="KEY_SWITCH_DATA_TO_PRIMARY_IF_PRIMARY_IS_OOS_BOOL" since="30" />
+		<field name="KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL" since="25" />
+		<field name="KEY_TTY_SUPPORTED_BOOL" since="29" />
+		<field name="KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY" since="30" />
+		<field name="KEY_USE_ACS_FOR_RCS_BOOL" since="31" />
+		<field name="KEY_USE_HFA_FOR_PROVISIONING_BOOL" />
+		<field name="KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL" since="31" />
+		<field name="KEY_USE_OTASP_FOR_PROVISIONING_BOOL" />
+		<field name="KEY_USE_RCS_PRESENCE_BOOL" since="24" deprecated="31" />
+		<field name="KEY_USE_RCS_SIP_OPTIONS_BOOL" since="30" />
+		<field name="KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL" since="30" />
+		<field name="KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL" />
+		<field name="KEY_VOICE_PRIVACY_DISABLE_UI_BOOL" />
+		<field name="KEY_VOLTE_REPLACEMENT_RAT_INT" />
+		<field name="KEY_VT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_RTT_CALL_BOOL" since="31" />
+		<field name="KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL" since="24" />
+		<field name="KEY_VVM_CLIENT_PREFIX_STRING" since="26" />
+		<field name="KEY_VVM_DESTINATION_NUMBER_STRING" />
+		<field name="KEY_VVM_DISABLED_CAPABILITIES_STRING_ARRAY" since="26" />
+		<field name="KEY_VVM_LEGACY_MODE_ENABLED_BOOL" since="26" />
+		<field name="KEY_VVM_PORT_NUMBER_INT" />
+		<field name="KEY_VVM_PREFETCH_BOOL" since="24" />
+		<field name="KEY_VVM_SSL_ENABLED_BOOL" since="26" />
+		<field name="KEY_VVM_TYPE_STRING" />
+		<field name="KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING" since="30" />
+		<field name="KEY_WORLD_MODE_ENABLED_BOOL" since="30" />
+		<field name="KEY_WORLD_PHONE_BOOL" />
+		<field name="SERVICE_CLASS_NONE" since="31" />
+		<field name="SERVICE_CLASS_VOICE" since="31" />
+		<field name="USSD_OVER_CS_ONLY" since="31" />
+		<field name="USSD_OVER_CS_PREFERRED" since="31" />
+		<field name="USSD_OVER_IMS_ONLY" since="31" />
+		<field name="USSD_OVER_IMS_PREFERRED" since="31" />
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Apn" since="30">
+		<extends name="java/lang/Object" />
+		<field name="KEY_PREFIX" deprecated="31" />
+		<field name="KEY_SETTINGS_DEFAULT_PROTOCOL_STRING" />
+		<field name="KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING" />
+		<field name="PROTOCOL_IPV4" />
+		<field name="PROTOCOL_IPV4V6" />
+		<field name="PROTOCOL_IPV6" />
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Gps" since="30">
+		<extends name="java/lang/Object" />
+		<field name="KEY_PERSIST_LPP_MODE_BOOL" />
+		<field name="KEY_PREFIX" />
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Ims" since="30">
+		<extends name="java/lang/Object" />
+		<field name="KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL" since="31" />
+		<field name="KEY_ENABLE_PRESENCE_GROUP_SUBSCRIBE_BOOL" since="31" />
+		<field name="KEY_ENABLE_PRESENCE_PUBLISH_BOOL" since="31" />
+		<field name="KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL" since="31" />
+		<field name="KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT" since="31" />
+		<field name="KEY_PREFIX" />
+		<field name="KEY_RCS_BULK_CAPABILITY_EXCHANGE_BOOL" since="31" />
+		<field name="KEY_RCS_FEATURE_TAG_ALLOWED_STRING_ARRAY" since="31" />
+		<field name="KEY_WIFI_OFF_DEFERRING_TIME_MILLIS_INT" />
+	</class>
+	<class name="android/telephony/CarrierConfigManager$ImsServiceEntitlement" since="31">
+		<extends name="java/lang/Object" />
+		<field name="KEY_ENTITLEMENT_SERVER_URL_STRING" />
+		<field name="KEY_FCM_SENDER_ID_STRING" />
+		<field name="KEY_IMS_PROVISIONING_BOOL" />
+		<field name="KEY_PREFIX" />
+		<field name="KEY_SHOW_VOWIFI_WEBVIEW_BOOL" />
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Iwlan" since="31">
+		<extends name="java/lang/Object" />
+		<field name="AUTHENTICATION_METHOD_CERT" />
+		<field name="AUTHENTICATION_METHOD_EAP_ONLY" />
+		<field name="EPDG_ADDRESS_CELLULAR_LOC" />
+		<field name="EPDG_ADDRESS_PCO" />
+		<field name="EPDG_ADDRESS_PLMN" />
+		<field name="EPDG_ADDRESS_STATIC" />
+		<field name="ID_TYPE_FQDN" />
+		<field name="ID_TYPE_KEY_ID" />
+		<field name="ID_TYPE_RFC822_ADDR" />
+		<field name="KEY_ADD_KE_TO_CHILD_SESSION_REKEY_BOOL" />
+		<field name="KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT" />
+		<field name="KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT" />
+		<field name="KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY" />
+		<field name="KEY_CHILD_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY" />
+		<field name="KEY_DIFFIE_HELLMAN_GROUPS_INT_ARRAY" />
+		<field name="KEY_DPD_TIMER_SEC_INT" />
+		<field name="KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY" />
+		<field name="KEY_EPDG_AUTHENTICATION_METHOD_INT" />
+		<field name="KEY_EPDG_PCO_ID_IPV4_INT" />
+		<field name="KEY_EPDG_PCO_ID_IPV6_INT" />
+		<field name="KEY_EPDG_STATIC_ADDRESS_ROAMING_STRING" />
+		<field name="KEY_EPDG_STATIC_ADDRESS_STRING" />
+		<field name="KEY_IKE_LOCAL_ID_TYPE_INT" />
+		<field name="KEY_IKE_REKEY_HARD_TIMER_SEC_INT" />
+		<field name="KEY_IKE_REKEY_SOFT_TIMER_SEC_INT" />
+		<field name="KEY_IKE_REMOTE_ID_TYPE_INT" />
+		<field name="KEY_IKE_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY" />
+		<field name="KEY_IKE_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY" />
+		<field name="KEY_MAX_RETRIES_INT" />
+		<field name="KEY_MCC_MNCS_STRING_ARRAY" />
+		<field name="KEY_NATT_KEEP_ALIVE_TIMER_SEC_INT" />
+		<field name="KEY_PREFIX" />
+		<field name="KEY_RETRANSMIT_TIMER_MSEC_INT_ARRAY" />
+		<field name="KEY_SUPPORTED_CHILD_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY" />
+		<field name="KEY_SUPPORTED_IKE_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY" />
+		<field name="KEY_SUPPORTED_INTEGRITY_ALGORITHMS_INT_ARRAY" />
+		<field name="KEY_SUPPORTED_PRF_ALGORITHMS_INT_ARRAY" />
+	</class>
+	<class name="android/telephony/CellIdentity" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getOperatorAlphaLong()Ljava/lang/CharSequence;" />
+		<method name="getOperatorAlphaShort()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellIdentityCdma" since="17">
+		<extends name="android/telephony/CellIdentity" since="28" />
+		<extends name="java/lang/Object" removed="28" />
+		<implements name="android/os/Parcelable" removed="28" />
+		<method name="getBasestationId()I" />
+		<method name="getLatitude()I" />
+		<method name="getLongitude()I" />
+		<method name="getNetworkId()I" />
+		<method name="getSystemId()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellIdentityGsm" since="17">
+		<extends name="android/telephony/CellIdentity" since="28" />
+		<extends name="java/lang/Object" removed="28" />
+		<implements name="android/os/Parcelable" removed="28" />
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30" />
+		<method name="getArfcn()I" since="24" />
+		<method name="getBsic()I" since="24" />
+		<method name="getCid()I" />
+		<method name="getLac()I" />
+		<method name="getMcc()I" deprecated="28" />
+		<method name="getMccString()Ljava/lang/String;" since="28" />
+		<method name="getMnc()I" deprecated="28" />
+		<method name="getMncString()Ljava/lang/String;" since="28" />
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28" />
+		<method name="getPsc()I" deprecated="18" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellIdentityLte" since="17">
+		<extends name="android/telephony/CellIdentity" since="28" />
+		<extends name="java/lang/Object" removed="28" />
+		<implements name="android/os/Parcelable" removed="28" />
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30" />
+		<method name="getBands()[I" since="30" />
+		<method name="getBandwidth()I" since="28" />
+		<method name="getCi()I" />
+		<method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30" />
+		<method name="getEarfcn()I" since="24" />
+		<method name="getMcc()I" deprecated="28" />
+		<method name="getMccString()Ljava/lang/String;" since="28" />
+		<method name="getMnc()I" deprecated="28" />
+		<method name="getMncString()Ljava/lang/String;" since="28" />
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28" />
+		<method name="getPci()I" />
+		<method name="getTac()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellIdentityNr" since="29">
+		<extends name="android/telephony/CellIdentity" />
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30" />
+		<method name="getBands()[I" since="30" />
+		<method name="getMccString()Ljava/lang/String;" />
+		<method name="getMncString()Ljava/lang/String;" />
+		<method name="getNci()J" />
+		<method name="getNrarfcn()I" />
+		<method name="getPci()I" />
+		<method name="getTac()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellIdentityTdscdma" since="28">
+		<extends name="android/telephony/CellIdentity" />
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30" />
+		<method name="getCid()I" />
+		<method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30" />
+		<method name="getCpid()I" />
+		<method name="getLac()I" />
+		<method name="getMccString()Ljava/lang/String;" />
+		<method name="getMncString()Ljava/lang/String;" />
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="29" />
+		<method name="getUarfcn()I" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellIdentityWcdma" since="18">
+		<extends name="android/telephony/CellIdentity" since="28" />
+		<extends name="java/lang/Object" removed="28" />
+		<implements name="android/os/Parcelable" removed="28" />
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30" />
+		<method name="getCid()I" />
+		<method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30" />
+		<method name="getLac()I" />
+		<method name="getMcc()I" deprecated="28" />
+		<method name="getMccString()Ljava/lang/String;" since="28" />
+		<method name="getMnc()I" deprecated="28" />
+		<method name="getMncString()Ljava/lang/String;" since="28" />
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28" />
+		<method name="getPsc()I" />
+		<method name="getUarfcn()I" since="24" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellInfo" since="17">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCellConnectionStatus()I" since="28" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentity;" since="30" />
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrength;" since="30" />
+		<method name="getTimeStamp()J" deprecated="30" />
+		<method name="getTimestampMillis()J" since="30" />
+		<method name="isRegistered()Z" />
+		<field name="CONNECTION_NONE" since="28" />
+		<field name="CONNECTION_PRIMARY_SERVING" since="28" />
+		<field name="CONNECTION_SECONDARY_SERVING" since="28" />
+		<field name="CONNECTION_UNKNOWN" since="28" />
+		<field name="CREATOR" />
+		<field name="UNAVAILABLE" since="29" />
+		<field name="UNAVAILABLE_LONG" since="29" />
+	</class>
+	<class name="android/telephony/CellInfoCdma" since="17">
+		<extends name="android/telephony/CellInfo" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityCdma;" />
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthCdma;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellInfoGsm" since="17">
+		<extends name="android/telephony/CellInfo" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityGsm;" />
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthGsm;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellInfoLte" since="17">
+		<extends name="android/telephony/CellInfo" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityLte;" />
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthLte;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellInfoNr" since="29">
+		<extends name="android/telephony/CellInfo" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentity;" />
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrength;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellInfoTdscdma" since="29">
+		<extends name="android/telephony/CellInfo" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityTdscdma;" />
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthTdscdma;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellInfoWcdma" since="18">
+		<extends name="android/telephony/CellInfo" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityWcdma;" />
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthWcdma;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellLocation" since="1" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="getEmpty()Landroid/telephony/CellLocation;" deprecated="31" />
+		<method name="requestLocationUpdate()V" deprecated="31" />
+	</class>
+	<class name="android/telephony/CellSignalStrength" since="17">
+		<extends name="java/lang/Object" />
+		<method name="getAsuLevel()I" />
+		<method name="getDbm()I" />
+		<method name="getLevel()I" />
+		<field name="SIGNAL_STRENGTH_GOOD" since="23" />
+		<field name="SIGNAL_STRENGTH_GREAT" since="23" />
+		<field name="SIGNAL_STRENGTH_MODERATE" since="23" />
+		<field name="SIGNAL_STRENGTH_NONE_OR_UNKNOWN" since="23" />
+		<field name="SIGNAL_STRENGTH_POOR" since="23" />
+	</class>
+	<class name="android/telephony/CellSignalStrengthCdma" since="17">
+		<extends name="android/telephony/CellSignalStrength" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCdmaDbm()I" />
+		<method name="getCdmaEcio()I" />
+		<method name="getCdmaLevel()I" />
+		<method name="getEvdoDbm()I" />
+		<method name="getEvdoEcio()I" />
+		<method name="getEvdoLevel()I" />
+		<method name="getEvdoSnr()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellSignalStrengthGsm" since="17">
+		<extends name="android/telephony/CellSignalStrength" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBitErrorRate()I" since="29" />
+		<method name="getRssi()I" since="30" />
+		<method name="getTimingAdvance()I" since="26" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellSignalStrengthLte" since="17">
+		<extends name="android/telephony/CellSignalStrength" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCqi()I" since="26" />
+		<method name="getCqiTableIndex()I" since="31" />
+		<method name="getRsrp()I" since="26" />
+		<method name="getRsrq()I" since="26" />
+		<method name="getRssi()I" since="29" />
+		<method name="getRssnr()I" since="26" />
+		<method name="getTimingAdvance()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellSignalStrengthNr" since="29">
+		<extends name="android/telephony/CellSignalStrength" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCsiCqiReport()Ljava/util/List;" since="31" />
+		<method name="getCsiCqiTableIndex()I" since="31" />
+		<method name="getCsiRsrp()I" />
+		<method name="getCsiRsrq()I" />
+		<method name="getCsiSinr()I" />
+		<method name="getSsRsrp()I" />
+		<method name="getSsRsrq()I" />
+		<method name="getSsSinr()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellSignalStrengthTdscdma" since="29">
+		<extends name="android/telephony/CellSignalStrength" />
+		<implements name="android/os/Parcelable" />
+		<method name="getRscp()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/CellSignalStrengthWcdma" since="18">
+		<extends name="android/telephony/CellSignalStrength" />
+		<implements name="android/os/Parcelable" />
+		<method name="getEcNo()I" since="30" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/ClosedSubscriberGroupInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCsgIdentity()I" />
+		<method name="getCsgIndicator()Z" />
+		<method name="getHomeNodebName()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/DataFailCause" since="30">
+		<extends name="java/lang/Object" />
+		<field name="ACCESS_ATTEMPT_ALREADY_IN_PROGRESS" />
+		<field name="ACCESS_BLOCK" />
+		<field name="ACCESS_BLOCK_ALL" />
+		<field name="ACCESS_CLASS_DSAC_REJECTION" />
+		<field name="ACCESS_CONTROL_LIST_CHECK_FAILURE" />
+		<field name="ACTIVATION_REJECTED_BCM_VIOLATION" />
+		<field name="ACTIVATION_REJECT_GGSN" />
+		<field name="ACTIVATION_REJECT_UNSPECIFIED" />
+		<field name="ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED" />
+		<field name="ALL_MATCHING_RULES_FAILED" since="31" />
+		<field name="APN_DISABLED" />
+		<field name="APN_DISALLOWED_ON_ROAMING" />
+		<field name="APN_MISMATCH" />
+		<field name="APN_PARAMETERS_CHANGED" />
+		<field name="APN_PENDING_HANDOVER" />
+		<field name="APN_TYPE_CONFLICT" />
+		<field name="AUTH_FAILURE_ON_EMERGENCY_CALL" />
+		<field name="BEARER_HANDLING_NOT_SUPPORTED" />
+		<field name="CALL_DISALLOWED_IN_ROAMING" />
+		<field name="CALL_PREEMPT_BY_EMERGENCY_APN" />
+		<field name="CANNOT_ENCODE_OTA_MESSAGE" />
+		<field name="CDMA_ALERT_STOP" />
+		<field name="CDMA_INCOMING_CALL" />
+		<field name="CDMA_INTERCEPT" />
+		<field name="CDMA_LOCK" />
+		<field name="CDMA_RELEASE_DUE_TO_SO_REJECTION" />
+		<field name="CDMA_REORDER" />
+		<field name="CDMA_RETRY_ORDER" />
+		<field name="CHANNEL_ACQUISITION_FAILURE" />
+		<field name="CLOSE_IN_PROGRESS" />
+		<field name="COLLISION_WITH_NETWORK_INITIATED_REQUEST" />
+		<field name="COMPANION_IFACE_IN_USE" />
+		<field name="CONCURRENT_SERVICES_INCOMPATIBLE" />
+		<field name="CONCURRENT_SERVICES_NOT_ALLOWED" />
+		<field name="CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION" />
+		<field name="CONDITIONAL_IE_ERROR" />
+		<field name="CONGESTION" />
+		<field name="CONNECTION_RELEASED" />
+		<field name="CS_DOMAIN_NOT_AVAILABLE" />
+		<field name="CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED" />
+		<field name="DATA_PLAN_EXPIRED" />
+		<field name="DATA_ROAMING_SETTINGS_DISABLED" />
+		<field name="DATA_SETTINGS_DISABLED" />
+		<field name="DBM_OR_SMS_IN_PROGRESS" />
+		<field name="DDS_SWITCHED" />
+		<field name="DDS_SWITCH_IN_PROGRESS" />
+		<field name="DRB_RELEASED_BY_RRC" />
+		<field name="DS_EXPLICIT_DEACTIVATION" />
+		<field name="DUAL_SWITCH" />
+		<field name="DUN_CALL_DISALLOWED" />
+		<field name="DUPLICATE_BEARER_ID" />
+		<field name="EHRPD_TO_HRPD_FALLBACK" />
+		<field name="EMBMS_NOT_ENABLED" />
+		<field name="EMBMS_REGULAR_DEACTIVATION" />
+		<field name="EMERGENCY_IFACE_ONLY" />
+		<field name="EMERGENCY_MODE" />
+		<field name="EMM_ACCESS_BARRED" />
+		<field name="EMM_ACCESS_BARRED_INFINITE_RETRY" />
+		<field name="EMM_ATTACH_FAILED" />
+		<field name="EMM_ATTACH_STARTED" />
+		<field name="EMM_DETACHED" />
+		<field name="EMM_T3417_EXPIRED" />
+		<field name="EMM_T3417_EXT_EXPIRED" />
+		<field name="EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED" />
+		<field name="EPS_SERVICES_NOT_ALLOWED_IN_PLMN" />
+		<field name="ERROR_UNSPECIFIED" />
+		<field name="ESM_BAD_OTA_MESSAGE" />
+		<field name="ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK" />
+		<field name="ESM_COLLISION_SCENARIOS" />
+		<field name="ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT" />
+		<field name="ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL" />
+		<field name="ESM_FAILURE" />
+		<field name="ESM_INFO_NOT_RECEIVED" />
+		<field name="ESM_LOCAL_CAUSE_NONE" />
+		<field name="ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER" />
+		<field name="ESM_PROCEDURE_TIME_OUT" />
+		<field name="ESM_UNKNOWN_EPS_BEARER_CONTEXT" />
+		<field name="EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE" />
+		<field name="EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY" />
+		<field name="EVDO_HDR_CHANGED" />
+		<field name="EVDO_HDR_CONNECTION_SETUP_TIMEOUT" />
+		<field name="EVDO_HDR_EXITED" />
+		<field name="EVDO_HDR_NO_SESSION" />
+		<field name="EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL" />
+		<field name="FADE" />
+		<field name="FAILED_TO_ACQUIRE_COLOCATED_HDR" />
+		<field name="FEATURE_NOT_SUPP" />
+		<field name="FILTER_SEMANTIC_ERROR" />
+		<field name="FILTER_SYTAX_ERROR" />
+		<field name="FORBIDDEN_APN_NAME" />
+		<field name="GPRS_REGISTRATION_FAIL" />
+		<field name="GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED" />
+		<field name="GPRS_SERVICES_NOT_ALLOWED" />
+		<field name="GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN" />
+		<field name="HANDOFF_PREFERENCE_CHANGED" />
+		<field name="HDR_ACCESS_FAILURE" />
+		<field name="HDR_FADE" />
+		<field name="HDR_NO_LOCK_GRANTED" />
+		<field name="IFACE_AND_POL_FAMILY_MISMATCH" />
+		<field name="IFACE_MISMATCH" />
+		<field name="ILLEGAL_ME" />
+		<field name="ILLEGAL_MS" />
+		<field name="IMEI_NOT_ACCEPTED" />
+		<field name="IMPLICITLY_DETACHED" />
+		<field name="IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER" />
+		<field name="INCOMING_CALL_REJECTED" />
+		<field name="INSUFFICIENT_RESOURCES" />
+		<field name="INTERFACE_IN_USE" />
+		<field name="INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN" />
+		<field name="INTERNAL_EPC_NONEPC_TRANSITION" />
+		<field name="INVALID_CONNECTION_ID" />
+		<field name="INVALID_DNS_ADDR" />
+		<field name="INVALID_EMM_STATE" />
+		<field name="INVALID_MANDATORY_INFO" />
+		<field name="INVALID_MODE" />
+		<field name="INVALID_PCSCF_ADDR" />
+		<field name="INVALID_PCSCF_OR_DNS_ADDRESS" />
+		<field name="INVALID_PRIMARY_NSAPI" />
+		<field name="INVALID_SIM_STATE" />
+		<field name="INVALID_TRANSACTION_ID" />
+		<field name="IPV6_ADDRESS_TRANSFER_FAILED" />
+		<field name="IPV6_PREFIX_UNAVAILABLE" />
+		<field name="IP_ADDRESS_MISMATCH" />
+		<field name="IP_VERSION_MISMATCH" />
+		<field name="IRAT_HANDOVER_FAILED" />
+		<field name="IS707B_MAX_ACCESS_PROBES" />
+		<field name="IWLAN_AUTHORIZATION_REJECTED" since="31" />
+		<field name="IWLAN_DNS_RESOLUTION_NAME_FAILURE" since="31" />
+		<field name="IWLAN_DNS_RESOLUTION_TIMEOUT" since="31" />
+		<field name="IWLAN_IKEV2_AUTH_FAILURE" since="31" />
+		<field name="IWLAN_IKEV2_CERT_INVALID" since="31" />
+		<field name="IWLAN_IKEV2_CONFIG_FAILURE" since="31" />
+		<field name="IWLAN_IKEV2_MSG_TIMEOUT" since="31" />
+		<field name="IWLAN_ILLEGAL_ME" since="31" />
+		<field name="IWLAN_IMEI_NOT_ACCEPTED" since="31" />
+		<field name="IWLAN_MAX_CONNECTION_REACHED" since="31" />
+		<field name="IWLAN_NETWORK_FAILURE" since="31" />
+		<field name="IWLAN_NON_3GPP_ACCESS_TO_EPC_NOT_ALLOWED" since="31" />
+		<field name="IWLAN_NO_APN_SUBSCRIPTION" since="31" />
+		<field name="IWLAN_PDN_CONNECTION_REJECTION" since="31" />
+		<field name="IWLAN_PLMN_NOT_ALLOWED" since="31" />
+		<field name="IWLAN_RAT_TYPE_NOT_ALLOWED" since="31" />
+		<field name="IWLAN_SEMANTIC_ERRORS_IN_PACKET_FILTERS" since="31" />
+		<field name="IWLAN_SEMANTIC_ERROR_IN_THE_TFT_OPERATION" since="31" />
+		<field name="IWLAN_SYNTACTICAL_ERRORS_IN_PACKET_FILTERS" since="31" />
+		<field name="IWLAN_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION" since="31" />
+		<field name="IWLAN_UNAUTHENTICATED_EMERGENCY_NOT_SUPPORTED" since="31" />
+		<field name="IWLAN_USER_UNKNOWN" since="31" />
+		<field name="LIMITED_TO_IPV4" />
+		<field name="LIMITED_TO_IPV6" />
+		<field name="LLC_SNDCP" />
+		<field name="LOCAL_END" />
+		<field name="LOCATION_AREA_NOT_ALLOWED" />
+		<field name="LOST_CONNECTION" />
+		<field name="LOWER_LAYER_REGISTRATION_FAILURE" />
+		<field name="LOW_POWER_MODE_OR_POWERING_DOWN" />
+		<field name="LTE_NAS_SERVICE_REQUEST_FAILED" />
+		<field name="LTE_THROTTLING_NOT_REQUIRED" />
+		<field name="MAC_FAILURE" />
+		<field name="MATCH_ALL_RULE_NOT_ALLOWED" since="31" />
+		<field name="MAXIMIUM_NSAPIS_EXCEEDED" />
+		<field name="MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED" />
+		<field name="MAX_ACCESS_PROBE" />
+		<field name="MAX_IPV4_CONNECTIONS" />
+		<field name="MAX_IPV6_CONNECTIONS" />
+		<field name="MAX_PPP_INACTIVITY_TIMER_EXPIRED" />
+		<field name="MESSAGE_INCORRECT_SEMANTIC" />
+		<field name="MESSAGE_TYPE_UNSUPPORTED" />
+		<field name="MIP_CONFIG_FAILURE" />
+		<field name="MIP_FA_ADMIN_PROHIBITED" />
+		<field name="MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED" />
+		<field name="MIP_FA_ENCAPSULATION_UNAVAILABLE" />
+		<field name="MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE" />
+		<field name="MIP_FA_INSUFFICIENT_RESOURCES" />
+		<field name="MIP_FA_MALFORMED_REPLY" />
+		<field name="MIP_FA_MALFORMED_REQUEST" />
+		<field name="MIP_FA_MISSING_CHALLENGE" />
+		<field name="MIP_FA_MISSING_HOME_ADDRESS" />
+		<field name="MIP_FA_MISSING_HOME_AGENT" />
+		<field name="MIP_FA_MISSING_NAI" />
+		<field name="MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE" />
+		<field name="MIP_FA_REASON_UNSPECIFIED" />
+		<field name="MIP_FA_REQUESTED_LIFETIME_TOO_LONG" />
+		<field name="MIP_FA_REVERSE_TUNNEL_IS_MANDATORY" />
+		<field name="MIP_FA_REVERSE_TUNNEL_UNAVAILABLE" />
+		<field name="MIP_FA_STALE_CHALLENGE" />
+		<field name="MIP_FA_UNKNOWN_CHALLENGE" />
+		<field name="MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE" />
+		<field name="MIP_HA_ADMIN_PROHIBITED" />
+		<field name="MIP_HA_ENCAPSULATION_UNAVAILABLE" />
+		<field name="MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE" />
+		<field name="MIP_HA_INSUFFICIENT_RESOURCES" />
+		<field name="MIP_HA_MALFORMED_REQUEST" />
+		<field name="MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE" />
+		<field name="MIP_HA_REASON_UNSPECIFIED" />
+		<field name="MIP_HA_REGISTRATION_ID_MISMATCH" />
+		<field name="MIP_HA_REVERSE_TUNNEL_IS_MANDATORY" />
+		<field name="MIP_HA_REVERSE_TUNNEL_UNAVAILABLE" />
+		<field name="MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS" />
+		<field name="MISSING_UNKNOWN_APN" />
+		<field name="MODEM_APP_PREEMPTED" />
+		<field name="MODEM_RESTART" />
+		<field name="MSC_TEMPORARILY_NOT_REACHABLE" />
+		<field name="MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE" />
+		<field name="MSG_TYPE_NONCOMPATIBLE_STATE" />
+		<field name="MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK" />
+		<field name="MULTIPLE_PDP_CALL_NOT_ALLOWED" />
+		<field name="MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED" />
+		<field name="NAS_LAYER_FAILURE" />
+		<field name="NAS_REQUEST_REJECTED_BY_NETWORK" />
+		<field name="NAS_SIGNALLING" />
+		<field name="NETWORK_FAILURE" />
+		<field name="NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH" />
+		<field name="NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH" />
+		<field name="NETWORK_INITIATED_TERMINATION" />
+		<field name="NONE" />
+		<field name="NON_IP_NOT_SUPPORTED" />
+		<field name="NORMAL_RELEASE" />
+		<field name="NO_CDMA_SERVICE" />
+		<field name="NO_COLLOCATED_HDR" />
+		<field name="NO_EPS_BEARER_CONTEXT_ACTIVATED" />
+		<field name="NO_GPRS_CONTEXT" />
+		<field name="NO_HYBRID_HDR_SERVICE" />
+		<field name="NO_PDP_CONTEXT_ACTIVATED" />
+		<field name="NO_RESPONSE_FROM_BASE_STATION" />
+		<field name="NO_SERVICE" />
+		<field name="NO_SERVICE_ON_GATEWAY" />
+		<field name="NSAPI_IN_USE" />
+		<field name="NULL_APN_DISALLOWED" />
+		<field name="OEM_DCFAILCAUSE_1" />
+		<field name="OEM_DCFAILCAUSE_10" />
+		<field name="OEM_DCFAILCAUSE_11" />
+		<field name="OEM_DCFAILCAUSE_12" />
+		<field name="OEM_DCFAILCAUSE_13" />
+		<field name="OEM_DCFAILCAUSE_14" />
+		<field name="OEM_DCFAILCAUSE_15" />
+		<field name="OEM_DCFAILCAUSE_2" />
+		<field name="OEM_DCFAILCAUSE_3" />
+		<field name="OEM_DCFAILCAUSE_4" />
+		<field name="OEM_DCFAILCAUSE_5" />
+		<field name="OEM_DCFAILCAUSE_6" />
+		<field name="OEM_DCFAILCAUSE_7" />
+		<field name="OEM_DCFAILCAUSE_8" />
+		<field name="OEM_DCFAILCAUSE_9" />
+		<field name="ONLY_IPV4V6_ALLOWED" />
+		<field name="ONLY_IPV4_ALLOWED" />
+		<field name="ONLY_IPV6_ALLOWED" />
+		<field name="ONLY_NON_IP_ALLOWED" />
+		<field name="ONLY_SINGLE_BEARER_ALLOWED" />
+		<field name="OPERATOR_BARRED" />
+		<field name="OTASP_COMMIT_IN_PROGRESS" />
+		<field name="PDN_CONN_DOES_NOT_EXIST" />
+		<field name="PDN_INACTIVITY_TIMER_EXPIRED" />
+		<field name="PDN_IPV4_CALL_DISALLOWED" />
+		<field name="PDN_IPV4_CALL_THROTTLED" />
+		<field name="PDN_IPV6_CALL_DISALLOWED" />
+		<field name="PDN_IPV6_CALL_THROTTLED" />
+		<field name="PDN_NON_IP_CALL_DISALLOWED" />
+		<field name="PDN_NON_IP_CALL_THROTTLED" />
+		<field name="PDP_ACTIVATE_MAX_RETRY_FAILED" />
+		<field name="PDP_DUPLICATE" />
+		<field name="PDP_ESTABLISH_TIMEOUT_EXPIRED" />
+		<field name="PDP_INACTIVE_TIMEOUT_EXPIRED" />
+		<field name="PDP_LOWERLAYER_ERROR" />
+		<field name="PDP_MODIFY_COLLISION" />
+		<field name="PDP_MODIFY_TIMEOUT_EXPIRED" />
+		<field name="PDP_PPP_NOT_SUPPORTED" />
+		<field name="PDP_WITHOUT_ACTIVE_TFT" />
+		<field name="PHONE_IN_USE" />
+		<field name="PHYSICAL_LINK_CLOSE_IN_PROGRESS" />
+		<field name="PLMN_NOT_ALLOWED" />
+		<field name="PPP_AUTH_FAILURE" />
+		<field name="PPP_CHAP_FAILURE" />
+		<field name="PPP_CLOSE_IN_PROGRESS" />
+		<field name="PPP_OPTION_MISMATCH" />
+		<field name="PPP_PAP_FAILURE" />
+		<field name="PPP_TIMEOUT" />
+		<field name="PREF_RADIO_TECH_CHANGED" />
+		<field name="PROFILE_BEARER_INCOMPATIBLE" />
+		<field name="PROTOCOL_ERRORS" />
+		<field name="QOS_NOT_ACCEPTED" />
+		<field name="RADIO_ACCESS_BEARER_FAILURE" />
+		<field name="RADIO_ACCESS_BEARER_SETUP_FAILURE" />
+		<field name="RADIO_NOT_AVAILABLE" />
+		<field name="RADIO_POWER_OFF" />
+		<field name="REDIRECTION_OR_HANDOFF_IN_PROGRESS" />
+		<field name="REGISTRATION_FAIL" />
+		<field name="REGULAR_DEACTIVATION" />
+		<field name="REJECTED_BY_BASE_STATION" />
+		<field name="RRC_CONNECTION_ABORTED_AFTER_HANDOVER" />
+		<field name="RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE" />
+		<field name="RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE" />
+		<field name="RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE" />
+		<field name="RRC_CONNECTION_ABORT_REQUEST" />
+		<field name="RRC_CONNECTION_ACCESS_BARRED" />
+		<field name="RRC_CONNECTION_ACCESS_STRATUM_FAILURE" />
+		<field name="RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS" />
+		<field name="RRC_CONNECTION_CELL_NOT_CAMPED" />
+		<field name="RRC_CONNECTION_CELL_RESELECTION" />
+		<field name="RRC_CONNECTION_CONFIG_FAILURE" />
+		<field name="RRC_CONNECTION_INVALID_REQUEST" />
+		<field name="RRC_CONNECTION_LINK_FAILURE" />
+		<field name="RRC_CONNECTION_NORMAL_RELEASE" />
+		<field name="RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER" />
+		<field name="RRC_CONNECTION_RADIO_LINK_FAILURE" />
+		<field name="RRC_CONNECTION_REESTABLISHMENT_FAILURE" />
+		<field name="RRC_CONNECTION_REJECT_BY_NETWORK" />
+		<field name="RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE" />
+		<field name="RRC_CONNECTION_RF_UNAVAILABLE" />
+		<field name="RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR" />
+		<field name="RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE" />
+		<field name="RRC_CONNECTION_TIMER_EXPIRED" />
+		<field name="RRC_CONNECTION_TRACKING_AREA_ID_CHANGED" />
+		<field name="RRC_UPLINK_CONNECTION_RELEASE" />
+		<field name="RRC_UPLINK_DATA_TRANSMISSION_FAILURE" />
+		<field name="RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER" />
+		<field name="RRC_UPLINK_ERROR_REQUEST_FROM_NAS" />
+		<field name="RRC_UPLINK_RADIO_LINK_FAILURE" />
+		<field name="RUIM_NOT_PRESENT" />
+		<field name="SECURITY_MODE_REJECTED" />
+		<field name="SERVICE_NOT_ALLOWED_ON_PLMN" />
+		<field name="SERVICE_OPTION_NOT_SUBSCRIBED" />
+		<field name="SERVICE_OPTION_NOT_SUPPORTED" />
+		<field name="SERVICE_OPTION_OUT_OF_ORDER" />
+		<field name="SIGNAL_LOST" />
+		<field name="SIM_CARD_CHANGED" />
+		<field name="SLICE_REJECTED" since="31" />
+		<field name="SYNCHRONIZATION_FAILURE" />
+		<field name="TEST_LOOPBACK_REGULAR_DEACTIVATION" />
+		<field name="TETHERED_CALL_ACTIVE" />
+		<field name="TFT_SEMANTIC_ERROR" />
+		<field name="TFT_SYTAX_ERROR" />
+		<field name="THERMAL_EMERGENCY" />
+		<field name="THERMAL_MITIGATION" />
+		<field name="TRAT_SWAP_FAILED" />
+		<field name="UE_INITIATED_DETACH_OR_DISCONNECT" />
+		<field name="UE_IS_ENTERING_POWERSAVE_MODE" />
+		<field name="UE_RAT_CHANGE" />
+		<field name="UE_SECURITY_CAPABILITIES_MISMATCH" />
+		<field name="UMTS_HANDOVER_TO_IWLAN" />
+		<field name="UMTS_REACTIVATION_REQ" />
+		<field name="UNACCEPTABLE_NETWORK_PARAMETER" />
+		<field name="UNACCEPTABLE_NON_EPS_AUTHENTICATION" />
+		<field name="UNKNOWN" />
+		<field name="UNKNOWN_INFO_ELEMENT" />
+		<field name="UNKNOWN_PDP_ADDRESS_TYPE" />
+		<field name="UNKNOWN_PDP_CONTEXT" />
+		<field name="UNPREFERRED_RAT" />
+		<field name="UNSUPPORTED_1X_PREV" />
+		<field name="UNSUPPORTED_APN_IN_CURRENT_PLMN" />
+		<field name="UNSUPPORTED_QCI_VALUE" />
+		<field name="USER_AUTHENTICATION" />
+		<field name="VSNCP_ADMINISTRATIVELY_PROHIBITED" />
+		<field name="VSNCP_APN_UNAUTHORIZED" />
+		<field name="VSNCP_GEN_ERROR" />
+		<field name="VSNCP_INSUFFICIENT_PARAMETERS" />
+		<field name="VSNCP_NO_PDN_GATEWAY_ADDRESS" />
+		<field name="VSNCP_PDN_EXISTS_FOR_THIS_APN" />
+		<field name="VSNCP_PDN_GATEWAY_REJECT" />
+		<field name="VSNCP_PDN_GATEWAY_UNREACHABLE" />
+		<field name="VSNCP_PDN_ID_IN_USE" />
+		<field name="VSNCP_PDN_LIMIT_EXCEEDED" />
+		<field name="VSNCP_RECONNECT_NOT_ALLOWED" />
+		<field name="VSNCP_RESOURCE_UNAVAILABLE" />
+		<field name="VSNCP_SUBSCRIBER_LIMITATION" />
+		<field name="VSNCP_TIMEOUT" />
+	</class>
+	<class name="android/telephony/DisconnectCause" since="31">
+		<extends name="java/lang/Object" />
+		<field name="ALREADY_DIALING" />
+		<field name="ANSWERED_ELSEWHERE" />
+		<field name="BUSY" />
+		<field name="CALLING_DISABLED" />
+		<field name="CALL_BARRED" />
+		<field name="CALL_PULLED" />
+		<field name="CANT_CALL_WHILE_RINGING" />
+		<field name="CDMA_ACCESS_BLOCKED" />
+		<field name="CDMA_ACCESS_FAILURE" />
+		<field name="CDMA_ALREADY_ACTIVATED" />
+		<field name="CDMA_DROP" />
+		<field name="CDMA_INTERCEPT" />
+		<field name="CDMA_LOCKED_UNTIL_POWER_CYCLE" />
+		<field name="CDMA_NOT_EMERGENCY" />
+		<field name="CDMA_PREEMPTED" />
+		<field name="CDMA_REORDER" />
+		<field name="CDMA_RETRY_ORDER" />
+		<field name="CDMA_SO_REJECT" />
+		<field name="CONGESTION" />
+		<field name="CS_RESTRICTED" />
+		<field name="CS_RESTRICTED_EMERGENCY" />
+		<field name="CS_RESTRICTED_NORMAL" />
+		<field name="DATA_DISABLED" />
+		<field name="DATA_LIMIT_REACHED" />
+		<field name="DIALED_CALL_FORWARDING_WHILE_ROAMING" />
+		<field name="DIALED_MMI" />
+		<field name="DIAL_LOW_BATTERY" />
+		<field name="DIAL_MODIFIED_TO_DIAL" />
+		<field name="DIAL_MODIFIED_TO_DIAL_VIDEO" />
+		<field name="DIAL_MODIFIED_TO_SS" />
+		<field name="DIAL_MODIFIED_TO_USSD" />
+		<field name="DIAL_VIDEO_MODIFIED_TO_DIAL" />
+		<field name="DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO" />
+		<field name="DIAL_VIDEO_MODIFIED_TO_SS" />
+		<field name="DIAL_VIDEO_MODIFIED_TO_USSD" />
+		<field name="EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE" />
+		<field name="EMERGENCY_PERM_FAILURE" />
+		<field name="EMERGENCY_TEMP_FAILURE" />
+		<field name="ERROR_UNSPECIFIED" />
+		<field name="FDN_BLOCKED" />
+		<field name="ICC_ERROR" />
+		<field name="IMEI_NOT_ACCEPTED" />
+		<field name="IMS_ACCESS_BLOCKED" />
+		<field name="IMS_MERGED_SUCCESSFULLY" />
+		<field name="IMS_SIP_ALTERNATE_EMERGENCY_CALL" />
+		<field name="INCOMING_AUTO_REJECTED" />
+		<field name="INCOMING_MISSED" />
+		<field name="INCOMING_REJECTED" />
+		<field name="INVALID_CREDENTIALS" />
+		<field name="INVALID_NUMBER" />
+		<field name="LIMIT_EXCEEDED" />
+		<field name="LOCAL" />
+		<field name="LOST_SIGNAL" />
+		<field name="LOW_BATTERY" />
+		<field name="MAXIMUM_NUMBER_OF_CALLS_REACHED" />
+		<field name="MEDIA_TIMEOUT" />
+		<field name="MMI" />
+		<field name="NORMAL" />
+		<field name="NORMAL_UNSPECIFIED" />
+		<field name="NOT_DISCONNECTED" />
+		<field name="NOT_VALID" />
+		<field name="NO_PHONE_NUMBER_SUPPLIED" />
+		<field name="NUMBER_UNREACHABLE" />
+		<field name="OTASP_PROVISIONING_IN_PROCESS" />
+		<field name="OUTGOING_CANCELED" />
+		<field name="OUTGOING_EMERGENCY_CALL_PLACED" />
+		<field name="OUTGOING_FAILURE" />
+		<field name="OUT_OF_NETWORK" />
+		<field name="OUT_OF_SERVICE" />
+		<field name="POWER_OFF" />
+		<field name="SERVER_ERROR" />
+		<field name="SERVER_UNREACHABLE" />
+		<field name="TIMED_OUT" />
+		<field name="TOO_MANY_ONGOING_CALLS" />
+		<field name="UNOBTAINABLE_NUMBER" />
+		<field name="VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED" />
+		<field name="VOICEMAIL_NUMBER_MISSING" />
+		<field name="WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION" />
+		<field name="WIFI_LOST" />
+	</class>
+	<class name="android/telephony/IccOpenLogicalChannelResponse" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getChannel()I" />
+		<method name="getSelectResponse()[B" />
+		<method name="getStatus()I" />
+		<field name="CREATOR" />
+		<field name="INVALID_CHANNEL" />
+		<field name="STATUS_MISSING_RESOURCE" />
+		<field name="STATUS_NO_ERROR" />
+		<field name="STATUS_NO_SUCH_ELEMENT" />
+		<field name="STATUS_UNKNOWN_ERROR" />
+	</class>
+	<class name="android/telephony/MbmsDownloadSession" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="addProgressListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadProgressListener;)V" />
+		<method name="addServiceAnnouncement([B)V" since="31" />
+		<method name="addStatusListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadStatusListener;)V" />
+		<method name="cancelDownload(Landroid/telephony/mbms/DownloadRequest;)V" />
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;" />
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;" />
+		<method name="download(Landroid/telephony/mbms/DownloadRequest;)V" />
+		<method name="getMaximumServiceAnnouncementSize()I" since="31" />
+		<method name="getTempFileRootDirectory()Ljava/io/File;" />
+		<method name="listPendingDownloads()Ljava/util/List;" />
+		<method name="removeProgressListener(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/DownloadProgressListener;)V" />
+		<method name="removeStatusListener(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/DownloadStatusListener;)V" />
+		<method name="requestDownloadState(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;)V" />
+		<method name="requestUpdateFileServices(Ljava/util/List;)V" />
+		<method name="resetDownloadKnowledge(Landroid/telephony/mbms/DownloadRequest;)V" />
+		<method name="setTempFileRootDirectory(Ljava/io/File;)V" />
+		<field name="DEFAULT_TOP_LEVEL_TEMP_DIRECTORY" />
+		<field name="EXTRA_MBMS_COMPLETED_FILE_URI" />
+		<field name="EXTRA_MBMS_DOWNLOAD_REQUEST" />
+		<field name="EXTRA_MBMS_DOWNLOAD_RESULT" />
+		<field name="EXTRA_MBMS_FILE_INFO" />
+		<field name="RESULT_CANCELLED" />
+		<field name="RESULT_DOWNLOAD_FAILURE" />
+		<field name="RESULT_EXPIRED" />
+		<field name="RESULT_FILE_ROOT_UNREACHABLE" />
+		<field name="RESULT_IO_ERROR" />
+		<field name="RESULT_OUT_OF_STORAGE" />
+		<field name="RESULT_SERVICE_ID_NOT_DEFINED" />
+		<field name="RESULT_SUCCESSFUL" />
+		<field name="STATUS_ACTIVELY_DOWNLOADING" />
+		<field name="STATUS_PENDING_DOWNLOAD" />
+		<field name="STATUS_PENDING_DOWNLOAD_WINDOW" />
+		<field name="STATUS_PENDING_REPAIR" />
+		<field name="STATUS_UNKNOWN" />
+	</class>
+	<class name="android/telephony/MbmsGroupCallSession" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="create(Landroid/content/Context;ILjava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsGroupCallSessionCallback;)Landroid/telephony/MbmsGroupCallSession;" />
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsGroupCallSessionCallback;)Landroid/telephony/MbmsGroupCallSession;" />
+		<method name="startGroupCall(JLjava/util/List;Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/GroupCallCallback;)Landroid/telephony/mbms/GroupCall;" />
+	</class>
+	<class name="android/telephony/MbmsStreamingSession" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;" />
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;" />
+		<method name="requestUpdateStreamingServices(Ljava/util/List;)V" />
+		<method name="startStreaming(Landroid/telephony/mbms/StreamingServiceInfo;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/StreamingServiceCallback;)Landroid/telephony/mbms/StreamingService;" />
+	</class>
+	<class name="android/telephony/NeighboringCellInfo" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<method name="&lt;init&gt;(II)V" deprecated="15" />
+		<method name="&lt;init&gt;(ILjava/lang/String;I)V" since="7" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" deprecated="29" />
+		<method name="getCid()I" deprecated="29" />
+		<method name="getLac()I" since="5" deprecated="29" />
+		<method name="getNetworkType()I" since="5" deprecated="29" />
+		<method name="getPsc()I" since="5" deprecated="29" />
+		<method name="getRssi()I" deprecated="29" />
+		<method name="setCid(I)V" deprecated="15" />
+		<method name="setRssi(I)V" deprecated="15" />
+		<field name="CREATOR" deprecated="29" />
+		<field name="UNKNOWN_CID" deprecated="29" />
+		<field name="UNKNOWN_RSSI" deprecated="29" />
+	</class>
+	<class name="android/telephony/NetworkRegistrationInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAccessNetworkTechnology()I" />
+		<method name="getAvailableServices()Ljava/util/List;" />
+		<method name="getCellIdentity()Landroid/telephony/CellIdentity;" />
+		<method name="getDomain()I" />
+		<method name="getRegisteredPlmn()Ljava/lang/String;" />
+		<method name="getTransportType()I" />
+		<method name="isRegistered()Z" />
+		<method name="isRoaming()Z" />
+		<method name="isSearching()Z" />
+		<field name="CREATOR" />
+		<field name="DOMAIN_CS" />
+		<field name="DOMAIN_CS_PS" />
+		<field name="DOMAIN_PS" />
+		<field name="DOMAIN_UNKNOWN" />
+		<field name="NR_STATE_CONNECTED" />
+		<field name="NR_STATE_NONE" />
+		<field name="NR_STATE_NOT_RESTRICTED" />
+		<field name="NR_STATE_RESTRICTED" />
+		<field name="SERVICE_TYPE_DATA" />
+		<field name="SERVICE_TYPE_EMERGENCY" />
+		<field name="SERVICE_TYPE_SMS" />
+		<field name="SERVICE_TYPE_UNKNOWN" />
+		<field name="SERVICE_TYPE_VIDEO" />
+		<field name="SERVICE_TYPE_VOICE" />
+	</class>
+	<class name="android/telephony/NetworkScan" since="28">
+		<extends name="java/lang/Object" />
+		<method name="stopScan()V" />
+		<field name="ERROR_INTERRUPTED" />
+		<field name="ERROR_INVALID_SCAN" />
+		<field name="ERROR_INVALID_SCANID" />
+		<field name="ERROR_MODEM_ERROR" />
+		<field name="ERROR_MODEM_UNAVAILABLE" />
+		<field name="ERROR_RADIO_INTERFACE_ERROR" />
+		<field name="ERROR_UNSUPPORTED" />
+		<field name="SUCCESS" />
+	</class>
+	<class name="android/telephony/NetworkScanRequest" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I[Landroid/telephony/RadioAccessSpecifier;IIZILjava/util/ArrayList;)V" />
+		<method name="getIncrementalResults()Z" />
+		<method name="getIncrementalResultsPeriodicity()I" />
+		<method name="getMaxSearchTime()I" />
+		<method name="getPlmns()Ljava/util/ArrayList;" />
+		<method name="getScanType()I" />
+		<method name="getSearchPeriodicity()I" />
+		<method name="getSpecifiers()[Landroid/telephony/RadioAccessSpecifier;" />
+		<field name="CREATOR" />
+		<field name="SCAN_TYPE_ONE_SHOT" />
+		<field name="SCAN_TYPE_PERIODIC" />
+	</class>
+	<class name="android/telephony/PhoneNumberFormattingTextWatcher" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/TextWatcher" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="21" />
+	</class>
+	<class name="android/telephony/PhoneNumberUtils" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addTtsSpan(Landroid/text/Spannable;II)V" since="23" />
+		<method name="areSamePhoneNumber(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z" since="31" />
+		<method name="calledPartyBCDFragmentToString([BII)Ljava/lang/String;" deprecated="28" />
+		<method name="calledPartyBCDFragmentToString([BIII)Ljava/lang/String;" since="28" />
+		<method name="calledPartyBCDToString([BII)Ljava/lang/String;" deprecated="28" />
+		<method name="calledPartyBCDToString([BIII)Ljava/lang/String;" since="28" />
+		<method name="compare(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Z" since="5" deprecated="31" />
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="31" />
+		<method name="convertKeypadLettersToDigits(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="createTtsSpan(Ljava/lang/String;)Landroid/text/style/TtsSpan;" since="23" />
+		<method name="createTtsSpannable(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="23" />
+		<method name="extractNetworkPortion(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="extractPostDialPortion(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="formatJapaneseNumber(Landroid/text/Editable;)V" since="3" deprecated="21" />
+		<method name="formatNanpNumber(Landroid/text/Editable;)V" deprecated="21" />
+		<method name="formatNumber(Landroid/text/Editable;I)V" deprecated="21" />
+		<method name="formatNumber(Ljava/lang/String;)Ljava/lang/String;" deprecated="21" />
+		<method name="formatNumber(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="formatNumber(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="formatNumberToE164(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="formatNumberToRFC3966(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="23" />
+		<method name="getFormatTypeForLocale(Ljava/util/Locale;)I" deprecated="21" />
+		<method name="getNumberFromIntent(Landroid/content/Intent;Landroid/content/Context;)Ljava/lang/String;" />
+		<method name="getStrippedReversed(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="is12Key(C)Z" />
+		<method name="isDialable(C)Z" />
+		<method name="isEmergencyNumber(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="isGlobalPhoneNumber(Ljava/lang/String;)Z" />
+		<method name="isISODigit(C)Z" />
+		<method name="isLocalEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Z" since="21" deprecated="29" />
+		<method name="isNonSeparator(C)Z" />
+		<method name="isReallyDialable(C)Z" />
+		<method name="isStartsPostDial(C)Z" />
+		<method name="isVoiceMailNumber(Ljava/lang/String;)Z" since="21" />
+		<method name="isWellFormedSmsAddress(Ljava/lang/String;)Z" />
+		<method name="networkPortionToCalledPartyBCD(Ljava/lang/String;)[B" />
+		<method name="networkPortionToCalledPartyBCDWithLength(Ljava/lang/String;)[B" />
+		<method name="normalizeNumber(Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="numberToCalledPartyBCD(Ljava/lang/String;)[B" deprecated="28" />
+		<method name="numberToCalledPartyBCD(Ljava/lang/String;I)[B" since="28" />
+		<method name="replaceUnicodeDigits(Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="stringFromStringAndTOA(Ljava/lang/String;I)Ljava/lang/String;" />
+		<method name="stripSeparators(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="toCallerIDMinMatch(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="toaFromString(Ljava/lang/String;)I" />
+		<field name="BCD_EXTENDED_TYPE_CALLED_PARTY" since="28" />
+		<field name="BCD_EXTENDED_TYPE_EF_ADN" since="28" />
+		<field name="FORMAT_JAPAN" since="3" />
+		<field name="FORMAT_NANP" />
+		<field name="FORMAT_UNKNOWN" />
+		<field name="PAUSE" />
+		<field name="TOA_International" />
+		<field name="TOA_Unknown" />
+		<field name="WAIT" />
+		<field name="WILD" />
+	</class>
+	<class name="android/telephony/PhoneStateListener" since="1" deprecated="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/Executor;)V" since="29" deprecated="31" />
+		<method name="onActiveDataSubscriptionIdChanged(I)V" since="29" deprecated="31" />
+		<method name="onBarringInfoChanged(Landroid/telephony/BarringInfo;)V" since="30" deprecated="31" />
+		<method name="onCallDisconnectCauseChanged(II)V" since="30" deprecated="31" />
+		<method name="onCallForwardingIndicatorChanged(Z)V" deprecated="31" />
+		<method name="onCallStateChanged(ILjava/lang/String;)V" deprecated="31" />
+		<method name="onCellInfoChanged(Ljava/util/List;)V" since="17" deprecated="31" />
+		<method name="onCellLocationChanged(Landroid/telephony/CellLocation;)V" deprecated="31" />
+		<method name="onDataActivity(I)V" deprecated="31" />
+		<method name="onDataConnectionStateChanged(I)V" deprecated="31" />
+		<method name="onDataConnectionStateChanged(II)V" since="7" deprecated="31" />
+		<method name="onDisplayInfoChanged(Landroid/telephony/TelephonyDisplayInfo;)V" since="30" deprecated="31" />
+		<method name="onEmergencyNumberListChanged(Ljava/util/Map;)V" since="31" deprecated="31" />
+		<method name="onImsCallDisconnectCauseChanged(Landroid/telephony/ims/ImsReasonInfo;)V" since="30" deprecated="31" />
+		<method name="onMessageWaitingIndicatorChanged(Z)V" deprecated="31" />
+		<method name="onPreciseDataConnectionStateChanged(Landroid/telephony/PreciseDataConnectionState;)V" since="30" deprecated="31" />
+		<method name="onRegistrationFailed(Landroid/telephony/CellIdentity;Ljava/lang/String;III)V" since="30" deprecated="31" />
+		<method name="onServiceStateChanged(Landroid/telephony/ServiceState;)V" deprecated="31" />
+		<method name="onSignalStrengthChanged(I)V" deprecated="15" />
+		<method name="onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V" since="7" deprecated="31" />
+		<method name="onUserMobileDataStateChanged(Z)V" since="28" deprecated="31" />
+		<field name="LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE" since="29" deprecated="31" />
+		<field name="LISTEN_BARRING_INFO" since="30" deprecated="31" />
+		<field name="LISTEN_CALL_DISCONNECT_CAUSES" since="30" deprecated="31" />
+		<field name="LISTEN_CALL_FORWARDING_INDICATOR" deprecated="31" />
+		<field name="LISTEN_CALL_STATE" deprecated="31" />
+		<field name="LISTEN_CELL_INFO" since="17" deprecated="31" />
+		<field name="LISTEN_CELL_LOCATION" deprecated="31" />
+		<field name="LISTEN_DATA_ACTIVITY" deprecated="31" />
+		<field name="LISTEN_DATA_CONNECTION_STATE" deprecated="31" />
+		<field name="LISTEN_DISPLAY_INFO_CHANGED" since="30" deprecated="31" />
+		<field name="LISTEN_EMERGENCY_NUMBER_LIST" since="29" deprecated="31" />
+		<field name="LISTEN_IMS_CALL_DISCONNECT_CAUSES" since="30" deprecated="31" />
+		<field name="LISTEN_MESSAGE_WAITING_INDICATOR" deprecated="31" />
+		<field name="LISTEN_NONE" deprecated="31" />
+		<field name="LISTEN_PRECISE_DATA_CONNECTION_STATE" since="30" deprecated="31" />
+		<field name="LISTEN_REGISTRATION_FAILURE" since="30" deprecated="31" />
+		<field name="LISTEN_SERVICE_STATE" deprecated="31" />
+		<field name="LISTEN_SIGNAL_STRENGTH" deprecated="15" />
+		<field name="LISTEN_SIGNAL_STRENGTHS" since="7" deprecated="31" />
+		<field name="LISTEN_USER_MOBILE_DATA_STATE" since="28" deprecated="31" />
+	</class>
+	<class name="android/telephony/PhysicalChannelConfig" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBand()I" />
+		<method name="getCellBandwidthDownlinkKhz()I" />
+		<method name="getCellBandwidthUplinkKhz()I" />
+		<method name="getConnectionStatus()I" />
+		<method name="getDownlinkChannelNumber()I" />
+		<method name="getDownlinkFrequencyKhz()I" />
+		<method name="getNetworkType()I" />
+		<method name="getPhysicalCellId()I" />
+		<method name="getUplinkChannelNumber()I" />
+		<method name="getUplinkFrequencyKhz()I" />
+		<field name="BAND_UNKNOWN" />
+		<field name="CELL_BANDWIDTH_UNKNOWN" />
+		<field name="CHANNEL_NUMBER_UNKNOWN" />
+		<field name="CONNECTION_PRIMARY_SERVING" />
+		<field name="CONNECTION_SECONDARY_SERVING" />
+		<field name="CONNECTION_UNKNOWN" />
+		<field name="CREATOR" />
+		<field name="FREQUENCY_UNKNOWN" />
+		<field name="PHYSICAL_CELL_ID_MAXIMUM_VALUE" />
+		<field name="PHYSICAL_CELL_ID_UNKNOWN" />
+	</class>
+	<class name="android/telephony/PreciseDataConnectionState" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getApnSetting()Landroid/telephony/data/ApnSetting;" />
+		<method name="getId()I" since="31" />
+		<method name="getLastCauseCode()I" />
+		<method name="getLinkProperties()Ljava/lang/Object;" />
+		<method name="getNetworkType()I" />
+		<method name="getState()I" />
+		<method name="getTransportType()I" since="31" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/RadioAccessSpecifier" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I[I[I)V" />
+		<method name="getBands()[I" />
+		<method name="getChannels()[I" />
+		<method name="getRadioAccessNetwork()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/ServiceState" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/telephony/ServiceState;)V" />
+		<method name="copyFrom(Landroid/telephony/ServiceState;)V" />
+		<method name="getCdmaNetworkId()I" since="28" />
+		<method name="getCdmaSystemId()I" since="28" />
+		<method name="getCellBandwidths()[I" since="28" />
+		<method name="getChannelNumber()I" since="28" />
+		<method name="getDuplexMode()I" since="28" />
+		<method name="getIsManualSelection()Z" />
+		<method name="getNetworkRegistrationInfoList()Ljava/util/List;" since="30" />
+		<method name="getOperatorAlphaLong()Ljava/lang/String;" />
+		<method name="getOperatorAlphaShort()Ljava/lang/String;" />
+		<method name="getOperatorNumeric()Ljava/lang/String;" />
+		<method name="getRoaming()Z" />
+		<method name="getState()I" />
+		<method name="isSearching()Z" since="30" />
+		<method name="setIsManualSelection(Z)V" />
+		<method name="setOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setRoaming(Z)V" />
+		<method name="setState(I)V" />
+		<method name="setStateOff()V" />
+		<method name="setStateOutOfService()V" />
+		<field name="CREATOR" />
+		<field name="DUPLEX_MODE_FDD" since="28" />
+		<field name="DUPLEX_MODE_TDD" since="28" />
+		<field name="DUPLEX_MODE_UNKNOWN" since="28" />
+		<field name="STATE_EMERGENCY_ONLY" />
+		<field name="STATE_IN_SERVICE" />
+		<field name="STATE_OUT_OF_SERVICE" />
+		<field name="STATE_POWER_OFF" />
+		<field name="UNKNOWN_ID" since="28" />
+	</class>
+	<class name="android/telephony/SignalStrength" since="7">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/telephony/SignalStrength;)V" since="31" />
+		<method name="getCdmaDbm()I" deprecated="29" />
+		<method name="getCdmaEcio()I" deprecated="29" />
+		<method name="getCellSignalStrengths()Ljava/util/List;" since="29" />
+		<method name="getCellSignalStrengths(Ljava/lang/Class;)Ljava/util/List;" since="29" />
+		<method name="getEvdoDbm()I" deprecated="29" />
+		<method name="getEvdoEcio()I" deprecated="29" />
+		<method name="getEvdoSnr()I" deprecated="29" />
+		<method name="getGsmBitErrorRate()I" deprecated="29" />
+		<method name="getGsmSignalStrength()I" deprecated="29" />
+		<method name="getLevel()I" since="23" />
+		<method name="getTimestampMillis()J" since="30" />
+		<method name="isGsm()Z" deprecated="29" />
+		<field name="CREATOR" since="30" />
+		<field name="INVALID" since="29" />
+	</class>
+	<class name="android/telephony/SignalStrengthUpdateRequest" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getSignalThresholdInfos()Ljava/util/Collection;" />
+		<method name="isReportingRequestedWhileIdle()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/SignalStrengthUpdateRequest$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/telephony/SignalStrengthUpdateRequest;" />
+		<method name="setReportingRequestedWhileIdle(Z)Landroid/telephony/SignalStrengthUpdateRequest$Builder;" />
+		<method name="setSignalThresholdInfos(Ljava/util/Collection;)Landroid/telephony/SignalStrengthUpdateRequest$Builder;" />
+	</class>
+	<class name="android/telephony/SignalThresholdInfo" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getMaximumNumberOfThresholdsAllowed()I" />
+		<method name="getMinimumNumberOfThresholdsAllowed()I" />
+		<method name="getRadioAccessNetworkType()I" />
+		<method name="getSignalMeasurementType()I" />
+		<method name="getThresholds()[I" />
+		<field name="CREATOR" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSCP" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSRP" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSRQ" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSSI" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSSNR" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_SSRSRP" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_SSRSRQ" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_SSSINR" />
+		<field name="SIGNAL_MEASUREMENT_TYPE_UNKNOWN" />
+	</class>
+	<class name="android/telephony/SignalThresholdInfo$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/telephony/SignalThresholdInfo;" />
+		<method name="setRadioAccessNetworkType(I)Landroid/telephony/SignalThresholdInfo$Builder;" />
+		<method name="setSignalMeasurementType(I)Landroid/telephony/SignalThresholdInfo$Builder;" />
+		<method name="setThresholds([I)Landroid/telephony/SignalThresholdInfo$Builder;" />
+	</class>
+	<class name="android/telephony/SmsManager" since="4">
+		<extends name="java/lang/Object" />
+		<method name="createAppSpecificSmsToken(Landroid/app/PendingIntent;)Ljava/lang/String;" since="26" />
+		<method name="createAppSpecificSmsTokenWithPackageInfo(Ljava/lang/String;Landroid/app/PendingIntent;)Ljava/lang/String;" since="29" />
+		<method name="createForSubscriptionId(I)Landroid/telephony/SmsManager;" since="31" />
+		<method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;" />
+		<method name="downloadMultimediaMessage(Landroid/content/Context;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;)V" since="21" />
+		<method name="downloadMultimediaMessage(Landroid/content/Context;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;J)V" since="31" />
+		<method name="getCarrierConfigValues()Landroid/os/Bundle;" since="21" />
+		<method name="getDefault()Landroid/telephony/SmsManager;" deprecated="31" />
+		<method name="getDefaultSmsSubscriptionId()I" since="22" />
+		<method name="getSmsCapacityOnIcc()I" since="31" />
+		<method name="getSmsManagerForSubscriptionId(I)Landroid/telephony/SmsManager;" since="22" deprecated="31" />
+		<method name="getSmsMessagesForFinancialApp(Landroid/os/Bundle;Ljava/util/concurrent/Executor;Landroid/telephony/SmsManager$FinancialSmsCallback;)V" since="29" />
+		<method name="getSmscAddress()Ljava/lang/String;" since="30" />
+		<method name="getSubscriptionId()I" since="22" />
+		<method name="injectSmsPdu([BLjava/lang/String;Landroid/app/PendingIntent;)V" since="22" />
+		<method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V" />
+		<method name="sendMultimediaMessage(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;)V" since="21" />
+		<method name="sendMultimediaMessage(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;J)V" since="31" />
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V" />
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;J)V" since="30" />
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V" since="30" />
+		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" />
+		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;J)V" since="30" />
+		<method name="sendTextMessageWithoutPersisting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" since="28" />
+		<method name="setSmscAddress(Ljava/lang/String;)Z" since="30" />
+		<field name="EXTRA_MMS_DATA" since="21" />
+		<field name="EXTRA_MMS_HTTP_STATUS" since="22" />
+		<field name="MMS_CONFIG_ALIAS_ENABLED" since="21" />
+		<field name="MMS_CONFIG_ALIAS_MAX_CHARS" since="21" />
+		<field name="MMS_CONFIG_ALIAS_MIN_CHARS" since="21" />
+		<field name="MMS_CONFIG_ALLOW_ATTACH_AUDIO" since="21" />
+		<field name="MMS_CONFIG_APPEND_TRANSACTION_ID" since="21" />
+		<field name="MMS_CONFIG_EMAIL_GATEWAY_NUMBER" since="21" />
+		<field name="MMS_CONFIG_GROUP_MMS_ENABLED" since="21" />
+		<field name="MMS_CONFIG_HTTP_PARAMS" since="21" />
+		<field name="MMS_CONFIG_HTTP_SOCKET_TIMEOUT" since="21" />
+		<field name="MMS_CONFIG_MAX_IMAGE_HEIGHT" since="21" />
+		<field name="MMS_CONFIG_MAX_IMAGE_WIDTH" since="21" />
+		<field name="MMS_CONFIG_MAX_MESSAGE_SIZE" since="21" />
+		<field name="MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE" since="21" />
+		<field name="MMS_CONFIG_MMS_DELIVERY_REPORT_ENABLED" since="21" />
+		<field name="MMS_CONFIG_MMS_ENABLED" since="21" />
+		<field name="MMS_CONFIG_MMS_READ_REPORT_ENABLED" since="21" />
+		<field name="MMS_CONFIG_MULTIPART_SMS_ENABLED" since="21" />
+		<field name="MMS_CONFIG_NAI_SUFFIX" since="21" />
+		<field name="MMS_CONFIG_NOTIFY_WAP_MMSC_ENABLED" since="21" />
+		<field name="MMS_CONFIG_RECIPIENT_LIMIT" since="21" />
+		<field name="MMS_CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES" since="21" />
+		<field name="MMS_CONFIG_SHOW_CELL_BROADCAST_APP_LINKS" since="22" />
+		<field name="MMS_CONFIG_SMS_DELIVERY_REPORT_ENABLED" since="21" />
+		<field name="MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD" since="21" />
+		<field name="MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD" since="21" />
+		<field name="MMS_CONFIG_SUBJECT_MAX_LENGTH" since="21" />
+		<field name="MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER" since="23" />
+		<field name="MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION" since="21" />
+		<field name="MMS_CONFIG_UA_PROF_TAG_NAME" since="21" />
+		<field name="MMS_CONFIG_UA_PROF_URL" since="21" />
+		<field name="MMS_CONFIG_USER_AGENT" since="21" />
+		<field name="MMS_ERROR_CONFIGURATION_ERROR" since="21" />
+		<field name="MMS_ERROR_HTTP_FAILURE" since="21" />
+		<field name="MMS_ERROR_INVALID_APN" since="21" />
+		<field name="MMS_ERROR_IO_ERROR" since="21" />
+		<field name="MMS_ERROR_NO_DATA_NETWORK" since="22" />
+		<field name="MMS_ERROR_RETRY" since="21" />
+		<field name="MMS_ERROR_UNABLE_CONNECT_MMS" since="21" />
+		<field name="MMS_ERROR_UNSPECIFIED" since="21" />
+		<field name="RESULT_BLUETOOTH_DISCONNECTED" since="30" />
+		<field name="RESULT_CANCELLED" since="30" />
+		<field name="RESULT_ENCODING_ERROR" since="30" />
+		<field name="RESULT_ERROR_FDN_CHECK_FAILURE" since="30" />
+		<field name="RESULT_ERROR_GENERIC_FAILURE" />
+		<field name="RESULT_ERROR_LIMIT_EXCEEDED" since="27" />
+		<field name="RESULT_ERROR_NONE" since="30" />
+		<field name="RESULT_ERROR_NO_SERVICE" />
+		<field name="RESULT_ERROR_NULL_PDU" />
+		<field name="RESULT_ERROR_RADIO_OFF" />
+		<field name="RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED" since="27" />
+		<field name="RESULT_ERROR_SHORT_CODE_NOT_ALLOWED" since="27" />
+		<field name="RESULT_INTERNAL_ERROR" since="30" />
+		<field name="RESULT_INVALID_ARGUMENTS" since="30" />
+		<field name="RESULT_INVALID_BLUETOOTH_ADDRESS" since="30" />
+		<field name="RESULT_INVALID_SMSC_ADDRESS" since="30" />
+		<field name="RESULT_INVALID_SMS_FORMAT" since="30" />
+		<field name="RESULT_INVALID_STATE" since="30" />
+		<field name="RESULT_MODEM_ERROR" since="30" />
+		<field name="RESULT_NETWORK_ERROR" since="30" />
+		<field name="RESULT_NETWORK_REJECT" since="30" />
+		<field name="RESULT_NO_BLUETOOTH_SERVICE" since="30" />
+		<field name="RESULT_NO_DEFAULT_SMS_APP" since="30" />
+		<field name="RESULT_NO_MEMORY" since="30" />
+		<field name="RESULT_NO_RESOURCES" since="30" />
+		<field name="RESULT_OPERATION_NOT_ALLOWED" since="30" />
+		<field name="RESULT_RADIO_NOT_AVAILABLE" since="30" />
+		<field name="RESULT_RECEIVE_DISPATCH_FAILURE" since="30" />
+		<field name="RESULT_RECEIVE_INJECTED_NULL_PDU" since="30" />
+		<field name="RESULT_RECEIVE_NULL_MESSAGE_FROM_RIL" since="30" />
+		<field name="RESULT_RECEIVE_RUNTIME_EXCEPTION" since="30" />
+		<field name="RESULT_RECEIVE_SQL_EXCEPTION" since="30" />
+		<field name="RESULT_RECEIVE_URI_EXCEPTION" since="30" />
+		<field name="RESULT_RECEIVE_WHILE_ENCRYPTED" since="30" />
+		<field name="RESULT_REMOTE_EXCEPTION" since="30" />
+		<field name="RESULT_REQUEST_NOT_SUPPORTED" since="30" />
+		<field name="RESULT_RIL_ACCESS_BARRED" since="31" />
+		<field name="RESULT_RIL_BLOCKED_DUE_TO_CALL" since="31" />
+		<field name="RESULT_RIL_CANCELLED" since="30" />
+		<field name="RESULT_RIL_ENCODING_ERR" since="30" />
+		<field name="RESULT_RIL_INTERNAL_ERR" since="30" />
+		<field name="RESULT_RIL_INVALID_ARGUMENTS" since="30" />
+		<field name="RESULT_RIL_INVALID_MODEM_STATE" since="30" />
+		<field name="RESULT_RIL_INVALID_SMSC_ADDRESS" since="30" />
+		<field name="RESULT_RIL_INVALID_SMS_FORMAT" since="30" />
+		<field name="RESULT_RIL_INVALID_STATE" since="30" />
+		<field name="RESULT_RIL_MODEM_ERR" since="30" />
+		<field name="RESULT_RIL_NETWORK_ERR" since="30" />
+		<field name="RESULT_RIL_NETWORK_NOT_READY" since="30" />
+		<field name="RESULT_RIL_NETWORK_REJECT" since="30" />
+		<field name="RESULT_RIL_NO_MEMORY" since="30" />
+		<field name="RESULT_RIL_NO_RESOURCES" since="30" />
+		<field name="RESULT_RIL_OPERATION_NOT_ALLOWED" since="30" />
+		<field name="RESULT_RIL_RADIO_NOT_AVAILABLE" since="30" />
+		<field name="RESULT_RIL_REQUEST_NOT_SUPPORTED" since="30" />
+		<field name="RESULT_RIL_REQUEST_RATE_LIMITED" since="30" />
+		<field name="RESULT_RIL_SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED" since="31" />
+		<field name="RESULT_RIL_SIM_ABSENT" since="30" />
+		<field name="RESULT_RIL_SMS_SEND_FAIL_RETRY" since="30" />
+		<field name="RESULT_RIL_SYSTEM_ERR" since="30" />
+		<field name="RESULT_SMS_BLOCKED_DURING_EMERGENCY" since="30" />
+		<field name="RESULT_SMS_SEND_RETRY_FAILED" since="30" />
+		<field name="RESULT_SYSTEM_ERROR" since="30" />
+		<field name="RESULT_UNEXPECTED_EVENT_STOP_SENDING" since="30" />
+		<field name="STATUS_ON_ICC_FREE" />
+		<field name="STATUS_ON_ICC_READ" />
+		<field name="STATUS_ON_ICC_SENT" />
+		<field name="STATUS_ON_ICC_UNREAD" />
+		<field name="STATUS_ON_ICC_UNSENT" />
+	</class>
+	<class name="android/telephony/SmsManager$FinancialSmsCallback" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onFinancialSmsMessages(Landroid/database/CursorWindow;)V" />
+	</class>
+	<class name="android/telephony/SmsMessage" since="4">
+		<extends name="java/lang/Object" />
+		<method name="calculateLength(Ljava/lang/CharSequence;Z)[I" />
+		<method name="calculateLength(Ljava/lang/String;Z)[I" />
+		<method name="createFromPdu([B)Landroid/telephony/SmsMessage;" deprecated="23" />
+		<method name="createFromPdu([BLjava/lang/String;)Landroid/telephony/SmsMessage;" since="23" />
+		<method name="getDisplayMessageBody()Ljava/lang/String;" />
+		<method name="getDisplayOriginatingAddress()Ljava/lang/String;" />
+		<method name="getEmailBody()Ljava/lang/String;" />
+		<method name="getEmailFrom()Ljava/lang/String;" />
+		<method name="getIndexOnIcc()I" />
+		<method name="getIndexOnSim()I" deprecated="15" />
+		<method name="getMessageBody()Ljava/lang/String;" />
+		<method name="getMessageClass()Landroid/telephony/SmsMessage$MessageClass;" />
+		<method name="getOriginatingAddress()Ljava/lang/String;" />
+		<method name="getPdu()[B" />
+		<method name="getProtocolIdentifier()I" />
+		<method name="getPseudoSubject()Ljava/lang/String;" />
+		<method name="getServiceCenterAddress()Ljava/lang/String;" />
+		<method name="getStatus()I" />
+		<method name="getStatusOnIcc()I" />
+		<method name="getStatusOnSim()I" deprecated="15" />
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/SmsMessage$SubmitPdu;" />
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/SmsMessage$SubmitPdu;" />
+		<method name="getTPLayerLengthForPDU(Ljava/lang/String;)I" />
+		<method name="getTimestampMillis()J" />
+		<method name="getUserData()[B" />
+		<method name="isCphsMwiMessage()Z" />
+		<method name="isEmail()Z" />
+		<method name="isMWIClearMessage()Z" />
+		<method name="isMWISetMessage()Z" />
+		<method name="isMwiDontStore()Z" />
+		<method name="isReplace()Z" />
+		<method name="isReplyPathPresent()Z" />
+		<method name="isStatusReportMessage()Z" />
+		<field name="ENCODING_16BIT" />
+		<field name="ENCODING_7BIT" />
+		<field name="ENCODING_8BIT" />
+		<field name="ENCODING_UNKNOWN" />
+		<field name="FORMAT_3GPP" since="28" />
+		<field name="FORMAT_3GPP2" since="28" />
+		<field name="MAX_USER_DATA_BYTES" />
+		<field name="MAX_USER_DATA_BYTES_WITH_HEADER" />
+		<field name="MAX_USER_DATA_SEPTETS" />
+		<field name="MAX_USER_DATA_SEPTETS_WITH_HEADER" />
+	</class>
+	<class name="android/telephony/SmsMessage$MessageClass" since="4">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/telephony/SmsMessage$MessageClass;" />
+		<method name="values()[Landroid/telephony/SmsMessage$MessageClass;" />
+		<field name="CLASS_0" />
+		<field name="CLASS_1" />
+		<field name="CLASS_2" />
+		<field name="CLASS_3" />
+		<field name="UNKNOWN" />
+	</class>
+	<class name="android/telephony/SmsMessage$SubmitPdu" since="4">
+		<extends name="java/lang/Object" />
+		<field name="encodedMessage" />
+		<field name="encodedScAddress" />
+	</class>
+	<class name="android/telephony/SubscriptionInfo" since="22">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createIconBitmap(Landroid/content/Context;)Landroid/graphics/Bitmap;" />
+		<method name="getCardId()I" since="29" />
+		<method name="getCarrierId()I" since="29" />
+		<method name="getCarrierName()Ljava/lang/CharSequence;" />
+		<method name="getCountryIso()Ljava/lang/String;" />
+		<method name="getDataRoaming()I" />
+		<method name="getDisplayName()Ljava/lang/CharSequence;" />
+		<method name="getGroupUuid()Landroid/os/ParcelUuid;" since="29" />
+		<method name="getIccId()Ljava/lang/String;" />
+		<method name="getIconTint()I" />
+		<method name="getMcc()I" deprecated="29" />
+		<method name="getMccString()Ljava/lang/String;" since="29" />
+		<method name="getMnc()I" deprecated="29" />
+		<method name="getMncString()Ljava/lang/String;" since="29" />
+		<method name="getNumber()Ljava/lang/String;" />
+		<method name="getSimSlotIndex()I" />
+		<method name="getSubscriptionId()I" />
+		<method name="getSubscriptionType()I" since="29" />
+		<method name="isEmbedded()Z" since="28" />
+		<method name="isOpportunistic()Z" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/SubscriptionManager" since="22">
+		<extends name="java/lang/Object" />
+		<method name="addOnOpportunisticSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V" since="29" />
+		<method name="addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V" deprecated="31" />
+		<method name="addOnSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V" since="30" />
+		<method name="addSubscriptionsIntoGroup(Ljava/util/List;Landroid/os/ParcelUuid;)V" since="29" />
+		<method name="canManageSubscription(Landroid/telephony/SubscriptionInfo;)Z" since="28" />
+		<method name="createSubscriptionGroup(Ljava/util/List;)Landroid/os/ParcelUuid;" since="29" />
+		<method name="from(Landroid/content/Context;)Landroid/telephony/SubscriptionManager;" deprecated="28" />
+		<method name="getAccessibleSubscriptionInfoList()Ljava/util/List;" since="28" />
+		<method name="getActiveDataSubscriptionId()I" since="30" />
+		<method name="getActiveSubscriptionInfo(I)Landroid/telephony/SubscriptionInfo;" />
+		<method name="getActiveSubscriptionInfoCount()I" />
+		<method name="getActiveSubscriptionInfoCountMax()I" />
+		<method name="getActiveSubscriptionInfoForSimSlotIndex(I)Landroid/telephony/SubscriptionInfo;" />
+		<method name="getActiveSubscriptionInfoList()Ljava/util/List;" />
+		<method name="getCompleteActiveSubscriptionInfoList()Ljava/util/List;" since="30" />
+		<method name="getDefaultDataSubscriptionId()I" since="24" />
+		<method name="getDefaultSmsSubscriptionId()I" since="24" />
+		<method name="getDefaultSubscriptionId()I" since="24" />
+		<method name="getDefaultVoiceSubscriptionId()I" since="24" />
+		<method name="getDeviceToDeviceStatusSharingContacts(I)Ljava/util/List;" since="31" />
+		<method name="getDeviceToDeviceStatusSharingPreference(I)I" since="31" />
+		<method name="getOpportunisticSubscriptions()Ljava/util/List;" since="29" />
+		<method name="getSlotIndex(I)I" since="29" />
+		<method name="getSubscriptionIds(I)[I" since="29" />
+		<method name="getSubscriptionPlans(I)Ljava/util/List;" since="28" />
+		<method name="getSubscriptionsInGroup(Landroid/os/ParcelUuid;)Ljava/util/List;" since="29" />
+		<method name="isActiveSubscriptionId(I)Z" since="29" />
+		<method name="isNetworkRoaming(I)Z" />
+		<method name="isUsableSubscriptionId(I)Z" since="29" />
+		<method name="isValidSubscriptionId(I)Z" since="29" />
+		<method name="removeOnOpportunisticSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V" since="29" />
+		<method name="removeOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V" />
+		<method name="removeSubscriptionsFromGroup(Ljava/util/List;Landroid/os/ParcelUuid;)V" since="29" />
+		<method name="setDeviceToDeviceStatusSharingContacts(ILjava/util/List;)V" since="31" />
+		<method name="setDeviceToDeviceStatusSharingPreference(II)V" since="31" />
+		<method name="setOpportunistic(ZI)Z" since="29" />
+		<method name="setSubscriptionOverrideCongested(IZJ)V" since="28" />
+		<method name="setSubscriptionOverrideCongested(IZ[IJ)V" since="31" />
+		<method name="setSubscriptionOverrideUnmetered(IZJ)V" since="28" />
+		<method name="setSubscriptionOverrideUnmetered(IZ[IJ)V" since="31" />
+		<method name="setSubscriptionPlans(ILjava/util/List;)V" since="28" />
+		<method name="switchToSubscription(ILandroid/app/PendingIntent;)V" since="29" />
+		<field name="ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED" since="26" />
+		<field name="ACTION_DEFAULT_SUBSCRIPTION_CHANGED" since="26" />
+		<field name="ACTION_MANAGE_SUBSCRIPTION_PLANS" since="28" />
+		<field name="ACTION_REFRESH_SUBSCRIPTION_PLANS" since="28" />
+		<field name="D2D_SHARING_ALL" since="31" />
+		<field name="D2D_SHARING_ALL_CONTACTS" since="31" />
+		<field name="D2D_SHARING_DISABLED" since="31" />
+		<field name="D2D_SHARING_SELECTED_CONTACTS" since="31" />
+		<field name="D2D_STATUS_SHARING" since="31" />
+		<field name="D2D_STATUS_SHARING_SELECTED_CONTACTS" since="31" />
+		<field name="DATA_ROAMING_DISABLE" />
+		<field name="DATA_ROAMING_ENABLE" />
+		<field name="DEFAULT_SUBSCRIPTION_ID" since="29" />
+		<field name="EXTRA_SLOT_INDEX" since="30" />
+		<field name="EXTRA_SUBSCRIPTION_INDEX" since="26" />
+		<field name="INVALID_SIM_SLOT_INDEX" since="29" />
+		<field name="INVALID_SUBSCRIPTION_ID" since="24" />
+		<field name="SUBSCRIPTION_TYPE_LOCAL_SIM" since="29" />
+		<field name="SUBSCRIPTION_TYPE_REMOTE_SIM" since="29" />
+	</class>
+	<class name="android/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onOpportunisticSubscriptionsChanged()V" />
+	</class>
+	<class name="android/telephony/SubscriptionManager$OnSubscriptionsChangedListener" since="22">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onSubscriptionsChanged()V" />
+	</class>
+	<class name="android/telephony/SubscriptionPlan" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="cycleIterator()Ljava/util/Iterator;" />
+		<method name="getDataLimitBehavior()I" />
+		<method name="getDataLimitBytes()J" />
+		<method name="getDataUsageBytes()J" />
+		<method name="getDataUsageTime()J" />
+		<method name="getNetworkTypes()[I" since="30" />
+		<method name="getSummary()Ljava/lang/CharSequence;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<field name="BYTES_UNKNOWN" />
+		<field name="BYTES_UNLIMITED" />
+		<field name="CREATOR" />
+		<field name="LIMIT_BEHAVIOR_BILLED" />
+		<field name="LIMIT_BEHAVIOR_DISABLED" />
+		<field name="LIMIT_BEHAVIOR_THROTTLED" />
+		<field name="LIMIT_BEHAVIOR_UNKNOWN" />
+		<field name="TIME_UNKNOWN" />
+	</class>
+	<class name="android/telephony/SubscriptionPlan$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="build()Landroid/telephony/SubscriptionPlan;" />
+		<method name="createNonrecurring(Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;)Landroid/telephony/SubscriptionPlan$Builder;" />
+		<method name="createRecurring(Ljava/time/ZonedDateTime;Ljava/time/Period;)Landroid/telephony/SubscriptionPlan$Builder;" />
+		<method name="resetNetworkTypes()Landroid/telephony/SubscriptionPlan$Builder;" since="30" />
+		<method name="setDataLimit(JI)Landroid/telephony/SubscriptionPlan$Builder;" />
+		<method name="setDataUsage(JJ)Landroid/telephony/SubscriptionPlan$Builder;" />
+		<method name="setNetworkTypes([I)Landroid/telephony/SubscriptionPlan$Builder;" since="30" />
+		<method name="setSummary(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;" />
+	</class>
+	<class name="android/telephony/TelephonyCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$ActiveDataSubscriptionIdListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onActiveDataSubscriptionIdChanged(I)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$BarringInfoListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onBarringInfoChanged(Landroid/telephony/BarringInfo;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$CallDisconnectCauseListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onCallDisconnectCauseChanged(II)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$CallForwardingIndicatorListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onCallForwardingIndicatorChanged(Z)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$CallStateListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onCallStateChanged(I)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$CarrierNetworkListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onCarrierNetworkChange(Z)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$CellInfoListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onCellInfoChanged(Ljava/util/List;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$CellLocationListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onCellLocationChanged(Landroid/telephony/CellLocation;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$DataActivationStateListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onDataActivationStateChanged(I)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$DataActivityListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onDataActivity(I)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$DataConnectionStateListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onDataConnectionStateChanged(II)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$DisplayInfoListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onDisplayInfoChanged(Landroid/telephony/TelephonyDisplayInfo;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$EmergencyNumberListListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onEmergencyNumberListChanged(Ljava/util/Map;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$ImsCallDisconnectCauseListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onImsCallDisconnectCauseChanged(Landroid/telephony/ims/ImsReasonInfo;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$MessageWaitingIndicatorListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onMessageWaitingIndicatorChanged(Z)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$PhysicalChannelConfigListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onPhysicalChannelConfigChanged(Ljava/util/List;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$PreciseDataConnectionStateListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onPreciseDataConnectionStateChanged(Landroid/telephony/PreciseDataConnectionState;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$RegistrationFailedListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onRegistrationFailed(Landroid/telephony/CellIdentity;Ljava/lang/String;III)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$ServiceStateListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onServiceStateChanged(Landroid/telephony/ServiceState;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$SignalStrengthsListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V" />
+	</class>
+	<class name="android/telephony/TelephonyCallback$UserMobileDataStateListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onUserMobileDataStateChanged(Z)V" />
+	</class>
+	<class name="android/telephony/TelephonyDisplayInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getNetworkType()I" />
+		<method name="getOverrideNetworkType()I" />
+		<field name="CREATOR" />
+		<field name="OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO" />
+		<field name="OVERRIDE_NETWORK_TYPE_LTE_CA" />
+		<field name="OVERRIDE_NETWORK_TYPE_NONE" />
+		<field name="OVERRIDE_NETWORK_TYPE_NR_ADVANCED" since="31" />
+		<field name="OVERRIDE_NETWORK_TYPE_NR_NSA" />
+		<field name="OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE" deprecated="31" />
+	</class>
+	<class name="android/telephony/TelephonyManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="canChangeDtmfToneLength()Z" since="23" />
+		<method name="clearSignalStrengthUpdateRequest(Landroid/telephony/SignalStrengthUpdateRequest;)V" since="31" />
+		<method name="createForPhoneAccountHandle(Landroid/telecom/PhoneAccountHandle;)Landroid/telephony/TelephonyManager;" since="26" />
+		<method name="createForSubscriptionId(I)Landroid/telephony/TelephonyManager;" since="24" />
+		<method name="doesSwitchMultiSimConfigTriggerReboot()Z" since="29" />
+		<method name="getActiveModemCount()I" since="30" />
+		<method name="getAllCellInfo()Ljava/util/List;" since="17" />
+		<method name="getCallComposerStatus()I" since="31" />
+		<method name="getCallState()I" deprecated="31" />
+		<method name="getCallStateForSubscription()I" since="31" />
+		<method name="getCardIdForDefaultEuicc()I" since="29" />
+		<method name="getCarrierConfig()Landroid/os/PersistableBundle;" since="26" />
+		<method name="getCarrierIdFromSimMccMnc()I" since="29" />
+		<method name="getCellLocation()Landroid/telephony/CellLocation;" deprecated="26" />
+		<method name="getDataActivity()I" />
+		<method name="getDataNetworkType()I" since="24" />
+		<method name="getDataState()I" />
+		<method name="getDeviceId()Ljava/lang/String;" deprecated="26" />
+		<method name="getDeviceId(I)Ljava/lang/String;" since="23" deprecated="26" />
+		<method name="getDeviceSoftwareVersion()Ljava/lang/String;" />
+		<method name="getEmergencyNumberList()Ljava/util/Map;" since="29" />
+		<method name="getEmergencyNumberList(I)Ljava/util/Map;" since="29" />
+		<method name="getEquivalentHomePlmns()Ljava/util/List;" since="31" />
+		<method name="getForbiddenPlmns()[Ljava/lang/String;" since="26" />
+		<method name="getGroupIdLevel1()Ljava/lang/String;" since="18" />
+		<method name="getIccAuthentication(IILjava/lang/String;)Ljava/lang/String;" since="24" />
+		<method name="getImei()Ljava/lang/String;" since="26" />
+		<method name="getImei(I)Ljava/lang/String;" since="26" />
+		<method name="getLine1Number()Ljava/lang/String;" />
+		<method name="getManualNetworkSelectionPlmn()Ljava/lang/String;" since="30" />
+		<method name="getManufacturerCode()Ljava/lang/String;" since="29" />
+		<method name="getManufacturerCode(I)Ljava/lang/String;" since="29" />
+		<method name="getMaximumCallComposerPictureSize()J" since="31" />
+		<method name="getMeid()Ljava/lang/String;" since="26" />
+		<method name="getMeid(I)Ljava/lang/String;" since="26" />
+		<method name="getMmsUAProfUrl()Ljava/lang/String;" since="19" />
+		<method name="getMmsUserAgent()Ljava/lang/String;" since="19" />
+		<method name="getNai()Ljava/lang/String;" since="28" />
+		<method name="getNeighboringCellInfo()Ljava/util/List;" since="3" deprecated="23" removed="29" />
+		<method name="getNetworkCountryIso()Ljava/lang/String;" />
+		<method name="getNetworkCountryIso(I)Ljava/lang/String;" since="30" />
+		<method name="getNetworkOperator()Ljava/lang/String;" />
+		<method name="getNetworkOperatorName()Ljava/lang/String;" />
+		<method name="getNetworkSelectionMode()I" since="30" />
+		<method name="getNetworkSlicingConfiguration(Ljava/util/concurrent/Executor;Landroid/os/OutcomeReceiver;)V" since="31" />
+		<method name="getNetworkSpecifier()Ljava/lang/String;" since="26" />
+		<method name="getNetworkType()I" deprecated="30" />
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;" since="31" />
+		<method name="getPhoneCount()I" since="23" deprecated="30" />
+		<method name="getPhoneType()I" />
+		<method name="getPreferredOpportunisticDataSubscription()I" since="29" />
+		<method name="getServiceState()Landroid/telephony/ServiceState;" since="26" />
+		<method name="getSignalStrength()Landroid/telephony/SignalStrength;" since="28" />
+		<method name="getSimCarrierId()I" since="28" />
+		<method name="getSimCarrierIdName()Ljava/lang/CharSequence;" since="28" />
+		<method name="getSimCountryIso()Ljava/lang/String;" />
+		<method name="getSimOperator()Ljava/lang/String;" />
+		<method name="getSimOperatorName()Ljava/lang/String;" />
+		<method name="getSimSerialNumber()Ljava/lang/String;" />
+		<method name="getSimSpecificCarrierId()I" since="29" />
+		<method name="getSimSpecificCarrierIdName()Ljava/lang/CharSequence;" since="29" />
+		<method name="getSimState()I" />
+		<method name="getSimState(I)I" since="26" />
+		<method name="getSubscriberId()Ljava/lang/String;" />
+		<method name="getSubscriptionId()I" since="30" />
+		<method name="getSubscriptionId(Landroid/telecom/PhoneAccountHandle;)I" since="30" />
+		<method name="getSupportedModemCount()I" since="30" />
+		<method name="getTypeAllocationCode()Ljava/lang/String;" since="29" />
+		<method name="getTypeAllocationCode(I)Ljava/lang/String;" since="29" />
+		<method name="getUiccCardsInfo()Ljava/util/List;" since="29" />
+		<method name="getVisualVoicemailPackageName()Ljava/lang/String;" since="26" />
+		<method name="getVoiceMailAlphaTag()Ljava/lang/String;" />
+		<method name="getVoiceMailNumber()Ljava/lang/String;" />
+		<method name="getVoiceNetworkType()I" since="24" />
+		<method name="getVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="24" />
+		<method name="hasCarrierPrivileges()Z" since="22" />
+		<method name="hasIccCard()Z" since="5" />
+		<method name="iccCloseLogicalChannel(I)Z" since="21" deprecated="30" />
+		<method name="iccExchangeSimIO(IIIIILjava/lang/String;)[B" since="21" deprecated="30" />
+		<method name="iccOpenLogicalChannel(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;" since="21" deprecated="26" />
+		<method name="iccOpenLogicalChannel(Ljava/lang/String;I)Landroid/telephony/IccOpenLogicalChannelResponse;" since="26" deprecated="30" />
+		<method name="iccTransmitApduBasicChannel(IIIIILjava/lang/String;)Ljava/lang/String;" since="21" deprecated="30" />
+		<method name="iccTransmitApduLogicalChannel(IIIIIILjava/lang/String;)Ljava/lang/String;" since="21" deprecated="30" />
+		<method name="isConcurrentVoiceAndDataSupported()Z" since="26" />
+		<method name="isDataCapable()Z" since="31" />
+		<method name="isDataConnectionAllowed()Z" since="31" />
+		<method name="isDataEnabled()Z" since="26" />
+		<method name="isDataEnabledForReason(I)Z" since="31" />
+		<method name="isDataRoamingEnabled()Z" since="29" />
+		<method name="isEmergencyNumber(Ljava/lang/String;)Z" since="29" />
+		<method name="isHearingAidCompatibilitySupported()Z" since="23" />
+		<method name="isManualNetworkSelectionAllowed()Z" since="30" />
+		<method name="isModemEnabledForSlot(I)Z" since="30" />
+		<method name="isMultiSimSupported()I" since="29" />
+		<method name="isNetworkRoaming()Z" />
+		<method name="isRadioInterfaceCapabilitySupported(Ljava/lang/String;)Z" since="31" />
+		<method name="isRttSupported()Z" since="29" />
+		<method name="isSmsCapable()Z" since="21" />
+		<method name="isTtyModeSupported()Z" since="23" deprecated="28" />
+		<method name="isVoiceCapable()Z" since="22" />
+		<method name="isVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;)Z" since="24" />
+		<method name="isWorldPhone()Z" since="23" />
+		<method name="listen(Landroid/telephony/PhoneStateListener;I)V" deprecated="31" />
+		<method name="registerTelephonyCallback(Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyCallback;)V" since="31" />
+		<method name="requestCellInfoUpdate(Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyManager$CellInfoCallback;)V" since="29" />
+		<method name="requestNetworkScan(Landroid/telephony/NetworkScanRequest;Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyScanManager$NetworkScanCallback;)Landroid/telephony/NetworkScan;" since="28" />
+		<method name="sendDialerSpecialCode(Ljava/lang/String;)V" since="26" />
+		<method name="sendEnvelopeWithStatus(Ljava/lang/String;)Ljava/lang/String;" since="21" deprecated="30" />
+		<method name="sendUssdRequest(Ljava/lang/String;Landroid/telephony/TelephonyManager$UssdResponseCallback;Landroid/os/Handler;)V" since="26" />
+		<method name="sendVisualVoicemailSms(Ljava/lang/String;ILjava/lang/String;Landroid/app/PendingIntent;)V" since="26" />
+		<method name="setCallComposerStatus(I)V" since="31" />
+		<method name="setDataEnabled(Z)V" since="26" deprecated="31" />
+		<method name="setDataEnabledForReason(IZ)V" since="31" />
+		<method name="setForbiddenPlmns(Ljava/util/List;)I" since="30" />
+		<method name="setLine1NumberForDisplay(Ljava/lang/String;Ljava/lang/String;)Z" since="22" />
+		<method name="setNetworkSelectionModeAutomatic()V" since="28" />
+		<method name="setNetworkSelectionModeManual(Ljava/lang/String;Z)Z" since="28" />
+		<method name="setNetworkSelectionModeManual(Ljava/lang/String;ZI)Z" since="30" />
+		<method name="setOperatorBrandOverride(Ljava/lang/String;)Z" since="22" />
+		<method name="setPreferredNetworkTypeToGlobal()Z" since="22" />
+		<method name="setPreferredOpportunisticDataSubscription(IZLjava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29" />
+		<method name="setSignalStrengthUpdateRequest(Landroid/telephony/SignalStrengthUpdateRequest;)V" since="31" />
+		<method name="setVisualVoicemailSmsFilterSettings(Landroid/telephony/VisualVoicemailSmsFilterSettings;)V" since="26" />
+		<method name="setVoiceMailNumber(Ljava/lang/String;Ljava/lang/String;)Z" since="22" />
+		<method name="setVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;)V" since="26" deprecated="28" />
+		<method name="setVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;Z)V" since="26" deprecated="28" />
+		<method name="switchMultiSimConfig(I)V" since="29" />
+		<method name="unregisterTelephonyCallback(Landroid/telephony/TelephonyCallback;)V" since="31" />
+		<method name="updateAvailableNetworks(Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29" />
+		<method name="uploadCallComposerPicture(Ljava/io/InputStream;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/os/OutcomeReceiver;)V" since="31" />
+		<method name="uploadCallComposerPicture(Ljava/nio/file/Path;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/os/OutcomeReceiver;)V" since="31" />
+		<field name="ACTION_CARRIER_MESSAGING_CLIENT_SERVICE" since="29" />
+		<field name="ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE" since="31" />
+		<field name="ACTION_CARRIER_SIGNAL_PCO_VALUE" since="31" />
+		<field name="ACTION_CARRIER_SIGNAL_REDIRECTED" since="31" />
+		<field name="ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED" since="31" />
+		<field name="ACTION_CARRIER_SIGNAL_RESET" since="31" />
+		<field name="ACTION_CONFIGURE_VOICEMAIL" since="23" />
+		<field name="ACTION_MULTI_SIM_CONFIG_CHANGED" since="30" />
+		<field name="ACTION_NETWORK_COUNTRY_CHANGED" since="29" />
+		<field name="ACTION_PHONE_STATE_CHANGED" since="3" />
+		<field name="ACTION_RESPOND_VIA_MESSAGE" since="18" />
+		<field name="ACTION_SECRET_CODE" since="29" />
+		<field name="ACTION_SHOW_VOICEMAIL_NOTIFICATION" since="26" />
+		<field name="ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED" since="28" />
+		<field name="ACTION_SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED" since="29" />
+		<field name="APPTYPE_CSIM" since="24" />
+		<field name="APPTYPE_ISIM" since="24" />
+		<field name="APPTYPE_RUIM" since="24" />
+		<field name="APPTYPE_SIM" since="24" />
+		<field name="APPTYPE_UNKNOWN" since="31" />
+		<field name="APPTYPE_USIM" since="24" />
+		<field name="AUTHTYPE_EAP_AKA" since="24" />
+		<field name="AUTHTYPE_EAP_SIM" since="24" />
+		<field name="CALL_COMPOSER_STATUS_OFF" since="31" />
+		<field name="CALL_COMPOSER_STATUS_ON" since="31" />
+		<field name="CALL_STATE_IDLE" />
+		<field name="CALL_STATE_OFFHOOK" />
+		<field name="CALL_STATE_RINGING" />
+		<field name="CAPABILITY_SLICING_CONFIG_SUPPORTED" since="31" />
+		<field name="CDMA_ROAMING_MODE_AFFILIATED" since="28" />
+		<field name="CDMA_ROAMING_MODE_ANY" since="28" />
+		<field name="CDMA_ROAMING_MODE_HOME" since="28" />
+		<field name="CDMA_ROAMING_MODE_RADIO_DEFAULT" since="28" />
+		<field name="DATA_ACTIVITY_DORMANT" since="4" />
+		<field name="DATA_ACTIVITY_IN" />
+		<field name="DATA_ACTIVITY_INOUT" />
+		<field name="DATA_ACTIVITY_NONE" />
+		<field name="DATA_ACTIVITY_OUT" />
+		<field name="DATA_CONNECTED" />
+		<field name="DATA_CONNECTING" />
+		<field name="DATA_DISCONNECTED" />
+		<field name="DATA_DISCONNECTING" since="30" />
+		<field name="DATA_ENABLED_REASON_CARRIER" since="31" />
+		<field name="DATA_ENABLED_REASON_POLICY" since="31" />
+		<field name="DATA_ENABLED_REASON_THERMAL" since="31" />
+		<field name="DATA_ENABLED_REASON_USER" since="31" />
+		<field name="DATA_SUSPENDED" />
+		<field name="DATA_UNKNOWN" since="29" />
+		<field name="ERI_FLASH" since="31" />
+		<field name="ERI_OFF" since="31" />
+		<field name="ERI_ON" since="31" />
+		<field name="EXTRA_ACTIVE_SIM_SUPPORTED_COUNT" since="30" />
+		<field name="EXTRA_APN_PROTOCOL" since="31" />
+		<field name="EXTRA_APN_TYPE" since="31" />
+		<field name="EXTRA_CALL_VOICEMAIL_INTENT" since="26" />
+		<field name="EXTRA_CARRIER_ID" since="28" />
+		<field name="EXTRA_CARRIER_NAME" since="28" />
+		<field name="EXTRA_DATA_FAIL_CAUSE" since="31" />
+		<field name="EXTRA_DEFAULT_NETWORK_AVAILABLE" since="31" />
+		<field name="EXTRA_HIDE_PUBLIC_SETTINGS" since="26" />
+		<field name="EXTRA_INCOMING_NUMBER" since="3" deprecated="29" />
+		<field name="EXTRA_IS_REFRESH" since="27" />
+		<field name="EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT" since="26" />
+		<field name="EXTRA_NETWORK_COUNTRY" since="29" />
+		<field name="EXTRA_NOTIFICATION_COUNT" since="26" />
+		<field name="EXTRA_PCO_ID" since="31" />
+		<field name="EXTRA_PCO_VALUE" since="31" />
+		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="26" />
+		<field name="EXTRA_REDIRECTION_URL" since="31" />
+		<field name="EXTRA_SPECIFIC_CARRIER_ID" since="29" />
+		<field name="EXTRA_SPECIFIC_CARRIER_NAME" since="29" />
+		<field name="EXTRA_STATE" since="3" />
+		<field name="EXTRA_STATE_IDLE" since="3" />
+		<field name="EXTRA_STATE_OFFHOOK" since="3" />
+		<field name="EXTRA_STATE_RINGING" since="3" />
+		<field name="EXTRA_SUBSCRIPTION_ID" since="28" />
+		<field name="EXTRA_VOICEMAIL_NUMBER" since="26" />
+		<field name="METADATA_HIDE_VOICEMAIL_SETTINGS_MENU" since="26" />
+		<field name="MULTISIM_ALLOWED" since="29" />
+		<field name="MULTISIM_NOT_SUPPORTED_BY_CARRIER" since="29" />
+		<field name="MULTISIM_NOT_SUPPORTED_BY_HARDWARE" since="29" />
+		<field name="NETWORK_SELECTION_MODE_AUTO" since="30" />
+		<field name="NETWORK_SELECTION_MODE_MANUAL" since="30" />
+		<field name="NETWORK_SELECTION_MODE_UNKNOWN" since="30" />
+		<field name="NETWORK_TYPE_1xRTT" since="4" />
+		<field name="NETWORK_TYPE_CDMA" since="4" />
+		<field name="NETWORK_TYPE_EDGE" />
+		<field name="NETWORK_TYPE_EHRPD" since="11" />
+		<field name="NETWORK_TYPE_EVDO_0" since="4" />
+		<field name="NETWORK_TYPE_EVDO_A" since="4" />
+		<field name="NETWORK_TYPE_EVDO_B" since="9" />
+		<field name="NETWORK_TYPE_GPRS" />
+		<field name="NETWORK_TYPE_GSM" since="25" />
+		<field name="NETWORK_TYPE_HSDPA" since="5" />
+		<field name="NETWORK_TYPE_HSPA" since="5" />
+		<field name="NETWORK_TYPE_HSPAP" since="13" />
+		<field name="NETWORK_TYPE_HSUPA" since="5" />
+		<field name="NETWORK_TYPE_IDEN" since="8" />
+		<field name="NETWORK_TYPE_IWLAN" since="25" />
+		<field name="NETWORK_TYPE_LTE" since="11" />
+		<field name="NETWORK_TYPE_NR" since="29" />
+		<field name="NETWORK_TYPE_TD_SCDMA" since="25" />
+		<field name="NETWORK_TYPE_UMTS" />
+		<field name="NETWORK_TYPE_UNKNOWN" />
+		<field name="PHONE_TYPE_CDMA" since="4" />
+		<field name="PHONE_TYPE_GSM" />
+		<field name="PHONE_TYPE_NONE" />
+		<field name="PHONE_TYPE_SIP" since="11" />
+		<field name="SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION" since="29" />
+		<field name="SET_OPPORTUNISTIC_SUB_NO_OPPORTUNISTIC_SUB_AVAILABLE" since="30" />
+		<field name="SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION" since="30" />
+		<field name="SET_OPPORTUNISTIC_SUB_SUCCESS" since="29" />
+		<field name="SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED" since="29" />
+		<field name="SIM_STATE_ABSENT" />
+		<field name="SIM_STATE_CARD_IO_ERROR" since="26" />
+		<field name="SIM_STATE_CARD_RESTRICTED" since="26" />
+		<field name="SIM_STATE_NETWORK_LOCKED" />
+		<field name="SIM_STATE_NOT_READY" since="26" />
+		<field name="SIM_STATE_PERM_DISABLED" since="26" />
+		<field name="SIM_STATE_PIN_REQUIRED" />
+		<field name="SIM_STATE_PUK_REQUIRED" />
+		<field name="SIM_STATE_READY" />
+		<field name="SIM_STATE_UNKNOWN" />
+		<field name="UNINITIALIZED_CARD_ID" since="29" />
+		<field name="UNKNOWN_CARRIER_ID" since="28" />
+		<field name="UNSUPPORTED_CARD_ID" since="29" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_ABORTED" since="29" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_DISABLE_MODEM_FAIL" since="30" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL" since="30" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS" since="29" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_MULTIPLE_NETWORKS_NOT_SUPPORTED" since="30" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_NO_CARRIER_PRIVILEGE" since="29" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE" since="30" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_REMOTE_SERVICE_EXCEPTION" since="30" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED" since="30" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_SUCCESS" since="29" />
+		<field name="UPDATE_AVAILABLE_NETWORKS_UNKNOWN_FAILURE" since="29" />
+		<field name="USSD_ERROR_SERVICE_UNAVAIL" since="26" />
+		<field name="USSD_RETURN_FAILURE" since="26" />
+		<field name="VVM_TYPE_CVVM" since="23" />
+		<field name="VVM_TYPE_OMTP" since="23" />
+	</class>
+	<class name="android/telephony/TelephonyManager$CallComposerException" since="31">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(ILjava/io/IOException;)V" />
+		<method name="getErrorCode()I" />
+		<method name="getIOException()Ljava/io/IOException;" />
+		<field name="ERROR_AUTHENTICATION_FAILED" />
+		<field name="ERROR_FILE_TOO_LARGE" />
+		<field name="ERROR_INPUT_CLOSED" />
+		<field name="ERROR_IO_EXCEPTION" />
+		<field name="ERROR_NETWORK_UNAVAILABLE" />
+		<field name="ERROR_REMOTE_END_CLOSED" />
+		<field name="ERROR_UNKNOWN" />
+	</class>
+	<class name="android/telephony/TelephonyManager$CellInfoCallback" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCellInfo(Ljava/util/List;)V" />
+		<method name="onError(ILjava/lang/Throwable;)V" />
+		<field name="ERROR_MODEM_ERROR" />
+		<field name="ERROR_TIMEOUT" />
+	</class>
+	<class name="android/telephony/TelephonyManager$ModemErrorException" since="31">
+		<extends name="android/telephony/TelephonyManager$NetworkSlicingException" />
+	</class>
+	<class name="android/telephony/TelephonyManager$NetworkSlicingException" since="31">
+		<extends name="java/lang/Exception" />
+	</class>
+	<class name="android/telephony/TelephonyManager$TimeoutException" since="31">
+		<extends name="android/telephony/TelephonyManager$NetworkSlicingException" />
+	</class>
+	<class name="android/telephony/TelephonyManager$UssdResponseCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onReceiveUssdResponse(Landroid/telephony/TelephonyManager;Ljava/lang/String;Ljava/lang/CharSequence;)V" />
+		<method name="onReceiveUssdResponseFailed(Landroid/telephony/TelephonyManager;Ljava/lang/String;I)V" />
+	</class>
+	<class name="android/telephony/TelephonyScanManager" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/telephony/TelephonyScanManager$NetworkScanCallback" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onComplete()V" />
+		<method name="onError(I)V" />
+		<method name="onResults(Ljava/util/List;)V" />
+	</class>
+	<class name="android/telephony/UiccCardInfo" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCardId()I" />
+		<method name="getEid()Ljava/lang/String;" />
+		<method name="getIccId()Ljava/lang/String;" />
+		<method name="getSlotIndex()I" />
+		<method name="isEuicc()Z" />
+		<method name="isRemovable()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/VisualVoicemailService" since="26">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCellServiceConnected(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telecom/PhoneAccountHandle;)V" />
+		<method name="onSimRemoved(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telecom/PhoneAccountHandle;)V" />
+		<method name="onSmsReceived(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telephony/VisualVoicemailSms;)V" />
+		<method name="onStopped(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;)V" />
+		<field name="SERVICE_INTERFACE" />
+	</class>
+	<class name="android/telephony/VisualVoicemailService$VisualVoicemailTask" since="26">
+		<extends name="java/lang/Object" />
+		<method name="finish()V" />
+	</class>
+	<class name="android/telephony/VisualVoicemailSms" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFields()Landroid/os/Bundle;" />
+		<method name="getMessageBody()Ljava/lang/String;" />
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;" />
+		<method name="getPrefix()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/VisualVoicemailSmsFilterSettings" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+		<field name="DESTINATION_PORT_ANY" />
+		<field name="DESTINATION_PORT_DATA_SMS" />
+		<field name="clientPrefix" />
+		<field name="destinationPort" />
+		<field name="originatingNumbers" />
+	</class>
+	<class name="android/telephony/VisualVoicemailSmsFilterSettings$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/telephony/VisualVoicemailSmsFilterSettings;" />
+		<method name="setClientPrefix(Ljava/lang/String;)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;" />
+		<method name="setDestinationPort(I)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;" />
+		<method name="setOriginatingNumbers(Ljava/util/List;)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;" />
+	</class>
+	<class name="android/telephony/cdma/CdmaCellLocation" since="5" deprecated="31">
+		<extends name="android/telephony/CellLocation" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(Landroid/os/Bundle;)V" deprecated="31" />
+		<method name="convertQuartSecToDecDegrees(I)D" since="17" deprecated="31" />
+		<method name="fillInNotifierBundle(Landroid/os/Bundle;)V" deprecated="31" />
+		<method name="getBaseStationId()I" deprecated="31" />
+		<method name="getBaseStationLatitude()I" deprecated="31" />
+		<method name="getBaseStationLongitude()I" deprecated="31" />
+		<method name="getNetworkId()I" deprecated="31" />
+		<method name="getSystemId()I" deprecated="31" />
+		<method name="setCellLocationData(III)V" deprecated="31" />
+		<method name="setCellLocationData(IIIII)V" deprecated="31" />
+		<method name="setStateInvalid()V" deprecated="31" />
+	</class>
+	<class name="android/telephony/data/ApnSetting" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getApnName()Ljava/lang/String;" />
+		<method name="getApnTypeBitmask()I" />
+		<method name="getAuthType()I" />
+		<method name="getCarrierId()I" since="29" />
+		<method name="getEntryName()Ljava/lang/String;" />
+		<method name="getId()I" />
+		<method name="getMmsProxyAddress()Ljava/net/InetAddress;" deprecated="29" />
+		<method name="getMmsProxyAddressAsString()Ljava/lang/String;" since="29" />
+		<method name="getMmsProxyPort()I" />
+		<method name="getMmsc()Landroid/net/Uri;" />
+		<method name="getMvnoType()I" />
+		<method name="getNetworkTypeBitmask()I" />
+		<method name="getOperatorNumeric()Ljava/lang/String;" />
+		<method name="getPassword()Ljava/lang/String;" />
+		<method name="getProtocol()I" />
+		<method name="getProxyAddress()Ljava/net/InetAddress;" deprecated="29" />
+		<method name="getProxyAddressAsString()Ljava/lang/String;" since="29" />
+		<method name="getProxyPort()I" />
+		<method name="getRoamingProtocol()I" />
+		<method name="getUser()Ljava/lang/String;" />
+		<method name="isEnabled()Z" />
+		<field name="AUTH_TYPE_CHAP" />
+		<field name="AUTH_TYPE_NONE" />
+		<field name="AUTH_TYPE_PAP" />
+		<field name="AUTH_TYPE_PAP_OR_CHAP" />
+		<field name="CREATOR" />
+		<field name="MVNO_TYPE_GID" />
+		<field name="MVNO_TYPE_ICCID" />
+		<field name="MVNO_TYPE_IMSI" />
+		<field name="MVNO_TYPE_SPN" />
+		<field name="PROTOCOL_IP" />
+		<field name="PROTOCOL_IPV4V6" />
+		<field name="PROTOCOL_IPV6" />
+		<field name="PROTOCOL_NON_IP" since="29" />
+		<field name="PROTOCOL_PPP" />
+		<field name="PROTOCOL_UNSTRUCTURED" since="29" />
+		<field name="TYPE_BIP" since="31" />
+		<field name="TYPE_CBS" />
+		<field name="TYPE_DEFAULT" />
+		<field name="TYPE_DUN" />
+		<field name="TYPE_EMERGENCY" />
+		<field name="TYPE_FOTA" />
+		<field name="TYPE_HIPRI" />
+		<field name="TYPE_IA" />
+		<field name="TYPE_IMS" />
+		<field name="TYPE_MCX" since="29" />
+		<field name="TYPE_MMS" />
+		<field name="TYPE_SUPL" />
+		<field name="TYPE_VSIM" since="31" />
+		<field name="TYPE_XCAP" since="30" />
+	</class>
+	<class name="android/telephony/data/ApnSetting$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/telephony/data/ApnSetting;" />
+		<method name="setApnName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setApnTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setAuthType(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setCarrierEnabled(Z)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setCarrierId(I)Landroid/telephony/data/ApnSetting$Builder;" since="29" />
+		<method name="setEntryName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setMmsProxyAddress(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" since="29" />
+		<method name="setMmsProxyAddress(Ljava/net/InetAddress;)Landroid/telephony/data/ApnSetting$Builder;" deprecated="29" />
+		<method name="setMmsProxyPort(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setMmsc(Landroid/net/Uri;)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setMvnoType(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setNetworkTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setOperatorNumeric(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setPassword(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setProtocol(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setProxyAddress(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" since="29" />
+		<method name="setProxyAddress(Ljava/net/InetAddress;)Landroid/telephony/data/ApnSetting$Builder;" deprecated="29" />
+		<method name="setProxyPort(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setRoamingProtocol(I)Landroid/telephony/data/ApnSetting$Builder;" />
+		<method name="setUser(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" />
+	</class>
+	<class name="android/telephony/data/NetworkSliceInfo" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getMappedHplmnSliceDifferentiator()I" />
+		<method name="getMappedHplmnSliceServiceType()I" />
+		<method name="getSliceDifferentiator()I" />
+		<method name="getSliceServiceType()I" />
+		<method name="getStatus()I" />
+		<field name="CREATOR" />
+		<field name="SLICE_DIFFERENTIATOR_NO_SLICE" />
+		<field name="SLICE_SERVICE_TYPE_EMBB" />
+		<field name="SLICE_SERVICE_TYPE_MIOT" />
+		<field name="SLICE_SERVICE_TYPE_NONE" />
+		<field name="SLICE_SERVICE_TYPE_URLLC" />
+		<field name="SLICE_STATUS_ALLOWED" />
+		<field name="SLICE_STATUS_CONFIGURED" />
+		<field name="SLICE_STATUS_DEFAULT_CONFIGURED" />
+		<field name="SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN" />
+		<field name="SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_REGISTERED_AREA" />
+		<field name="SLICE_STATUS_UNKNOWN" />
+	</class>
+	<class name="android/telephony/data/NetworkSliceInfo$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/telephony/data/NetworkSliceInfo;" />
+		<method name="setMappedHplmnSliceDifferentiator(I)Landroid/telephony/data/NetworkSliceInfo$Builder;" />
+		<method name="setMappedHplmnSliceServiceType(I)Landroid/telephony/data/NetworkSliceInfo$Builder;" />
+		<method name="setSliceDifferentiator(I)Landroid/telephony/data/NetworkSliceInfo$Builder;" />
+		<method name="setSliceServiceType(I)Landroid/telephony/data/NetworkSliceInfo$Builder;" />
+		<method name="setStatus(I)Landroid/telephony/data/NetworkSliceInfo$Builder;" />
+	</class>
+	<class name="android/telephony/data/NetworkSlicingConfig" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getSliceInfo()Ljava/util/List;" />
+		<method name="getUrspRules()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/data/RouteSelectionDescriptor" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDataNetworkName()Ljava/util/List;" />
+		<method name="getPrecedence()I" />
+		<method name="getSessionType()I" />
+		<method name="getSliceInfo()Ljava/util/List;" />
+		<method name="getSscMode()I" />
+		<field name="CREATOR" />
+		<field name="ROUTE_SSC_MODE_1" />
+		<field name="ROUTE_SSC_MODE_2" />
+		<field name="ROUTE_SSC_MODE_3" />
+		<field name="SESSION_TYPE_IPV4" />
+		<field name="SESSION_TYPE_IPV4V6" />
+		<field name="SESSION_TYPE_IPV6" />
+	</class>
+	<class name="android/telephony/data/TrafficDescriptor" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDataNetworkName()Ljava/lang/String;" />
+		<method name="getOsAppId()[B" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/data/TrafficDescriptor$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/telephony/data/TrafficDescriptor;" />
+		<method name="setDataNetworkName(Ljava/lang/String;)Landroid/telephony/data/TrafficDescriptor$Builder;" />
+		<method name="setOsAppId([B)Landroid/telephony/data/TrafficDescriptor$Builder;" />
+	</class>
+	<class name="android/telephony/data/UrspRule" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getPrecedence()I" />
+		<method name="getRouteSelectionDescriptor()Ljava/util/List;" />
+		<method name="getTrafficDescriptors()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/emergency/EmergencyNumber" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="java/lang/Comparable" />
+		<method name="compareTo(Landroid/telephony/emergency/EmergencyNumber;)I" />
+		<method name="getCountryIso()Ljava/lang/String;" />
+		<method name="getEmergencyCallRouting()I" />
+		<method name="getEmergencyNumberSources()Ljava/util/List;" />
+		<method name="getEmergencyServiceCategories()Ljava/util/List;" />
+		<method name="getEmergencyUrns()Ljava/util/List;" />
+		<method name="getMnc()Ljava/lang/String;" />
+		<method name="getNumber()Ljava/lang/String;" />
+		<method name="isFromSources(I)Z" />
+		<method name="isInEmergencyServiceCategories(I)Z" />
+		<field name="CREATOR" />
+		<field name="EMERGENCY_CALL_ROUTING_EMERGENCY" />
+		<field name="EMERGENCY_CALL_ROUTING_NORMAL" />
+		<field name="EMERGENCY_CALL_ROUTING_UNKNOWN" />
+		<field name="EMERGENCY_NUMBER_SOURCE_DATABASE" />
+		<field name="EMERGENCY_NUMBER_SOURCE_DEFAULT" />
+		<field name="EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG" />
+		<field name="EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING" />
+		<field name="EMERGENCY_NUMBER_SOURCE_SIM" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_AIEC" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_AMBULANCE" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_MIEC" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_POLICE" />
+		<field name="EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED" />
+	</class>
+	<class name="android/telephony/euicc/DownloadableSubscription" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="forActivationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription;" />
+		<method name="getConfirmationCode()Ljava/lang/String;" />
+		<method name="getEncodedActivationCode()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/euicc/DownloadableSubscription$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/telephony/euicc/DownloadableSubscription;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="build()Landroid/telephony/euicc/DownloadableSubscription;" />
+		<method name="setConfirmationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription$Builder;" />
+		<method name="setEncodedActivationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription$Builder;" />
+	</class>
+	<class name="android/telephony/euicc/EuiccInfo" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getOsVersion()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/euicc/EuiccManager" since="28">
+		<extends name="java/lang/Object" />
+		<method name="createForCardId(I)Landroid/telephony/euicc/EuiccManager;" since="29" />
+		<method name="deleteSubscription(ILandroid/app/PendingIntent;)V" />
+		<method name="downloadSubscription(Landroid/telephony/euicc/DownloadableSubscription;ZLandroid/app/PendingIntent;)V" />
+		<method name="getEid()Ljava/lang/String;" />
+		<method name="getEuiccInfo()Landroid/telephony/euicc/EuiccInfo;" />
+		<method name="isEnabled()Z" />
+		<method name="startResolutionActivity(Landroid/app/Activity;ILandroid/content/Intent;Landroid/app/PendingIntent;)V" />
+		<method name="switchToSubscription(ILandroid/app/PendingIntent;)V" />
+		<method name="updateSubscriptionNickname(ILjava/lang/String;Landroid/app/PendingIntent;)V" since="29" />
+		<field name="ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS" />
+		<field name="ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE" />
+		<field name="ACTION_START_EUICC_ACTIVATION" since="30" />
+		<field name="EMBEDDED_SUBSCRIPTION_RESULT_ERROR" />
+		<field name="EMBEDDED_SUBSCRIPTION_RESULT_OK" />
+		<field name="EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR" />
+		<field name="ERROR_ADDRESS_MISSING" since="30" />
+		<field name="ERROR_CARRIER_LOCKED" since="30" />
+		<field name="ERROR_CERTIFICATE_ERROR" since="30" />
+		<field name="ERROR_CONNECTION_ERROR" since="30" />
+		<field name="ERROR_DISALLOWED_BY_PPR" since="30" />
+		<field name="ERROR_EUICC_INSUFFICIENT_MEMORY" since="30" />
+		<field name="ERROR_EUICC_MISSING" since="30" />
+		<field name="ERROR_INCOMPATIBLE_CARRIER" since="30" />
+		<field name="ERROR_INSTALL_PROFILE" since="30" />
+		<field name="ERROR_INVALID_ACTIVATION_CODE" since="30" />
+		<field name="ERROR_INVALID_CONFIRMATION_CODE" since="30" />
+		<field name="ERROR_INVALID_RESPONSE" since="30" />
+		<field name="ERROR_NO_PROFILES_AVAILABLE" since="30" />
+		<field name="ERROR_OPERATION_BUSY" since="30" />
+		<field name="ERROR_SIM_MISSING" since="30" />
+		<field name="ERROR_TIME_OUT" since="30" />
+		<field name="ERROR_UNSUPPORTED_VERSION" since="30" />
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE" />
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION" />
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_ERROR_CODE" since="30" />
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE" since="30" />
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE" since="30" />
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE" since="30" />
+		<field name="EXTRA_USE_QR_SCANNER" since="30" />
+		<field name="META_DATA_CARRIER_ICON" />
+		<field name="OPERATION_APDU" since="30" />
+		<field name="OPERATION_DOWNLOAD" since="30" />
+		<field name="OPERATION_EUICC_CARD" since="30" />
+		<field name="OPERATION_EUICC_GSMA" since="30" />
+		<field name="OPERATION_HTTP" since="30" />
+		<field name="OPERATION_METADATA" since="30" />
+		<field name="OPERATION_SIM_SLOT" since="30" />
+		<field name="OPERATION_SMDX" since="30" />
+		<field name="OPERATION_SMDX_SUBJECT_REASON_CODE" since="30" />
+		<field name="OPERATION_SWITCH" since="30" />
+		<field name="OPERATION_SYSTEM" since="30" />
+	</class>
+	<class name="android/telephony/gsm/GsmCellLocation" since="1" deprecated="31">
+		<extends name="android/telephony/CellLocation" />
+		<method name="&lt;init&gt;()V" deprecated="31" />
+		<method name="&lt;init&gt;(Landroid/os/Bundle;)V" deprecated="31" />
+		<method name="fillInNotifierBundle(Landroid/os/Bundle;)V" deprecated="31" />
+		<method name="getCid()I" deprecated="31" />
+		<method name="getLac()I" deprecated="31" />
+		<method name="getPsc()I" since="9" deprecated="31" />
+		<method name="setLacAndCid(II)V" deprecated="31" />
+		<method name="setStateInvalid()V" deprecated="31" />
+	</class>
+	<class name="android/telephony/gsm/SmsManager" since="1" deprecated="4">
+		<extends name="java/lang/Object" />
+		<method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;" deprecated="15" />
+		<method name="getDefault()Landroid/telephony/gsm/SmsManager;" deprecated="15" />
+		<method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="15" />
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V" deprecated="15" />
+		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="15" />
+		<field name="RESULT_ERROR_GENERIC_FAILURE" deprecated="15" />
+		<field name="RESULT_ERROR_NO_SERVICE" deprecated="15" />
+		<field name="RESULT_ERROR_NULL_PDU" deprecated="15" />
+		<field name="RESULT_ERROR_RADIO_OFF" deprecated="15" />
+		<field name="STATUS_ON_SIM_FREE" deprecated="15" />
+		<field name="STATUS_ON_SIM_READ" deprecated="15" />
+		<field name="STATUS_ON_SIM_SENT" deprecated="15" />
+		<field name="STATUS_ON_SIM_UNREAD" deprecated="15" />
+		<field name="STATUS_ON_SIM_UNSENT" deprecated="15" />
+	</class>
+	<class name="android/telephony/gsm/SmsMessage" since="1" deprecated="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<method name="calculateLength(Ljava/lang/CharSequence;Z)[I" since="3" deprecated="15" />
+		<method name="calculateLength(Ljava/lang/String;Z)[I" deprecated="15" />
+		<method name="createFromPdu([B)Landroid/telephony/gsm/SmsMessage;" deprecated="15" />
+		<method name="getDisplayMessageBody()Ljava/lang/String;" deprecated="15" />
+		<method name="getDisplayOriginatingAddress()Ljava/lang/String;" deprecated="15" />
+		<method name="getEmailBody()Ljava/lang/String;" deprecated="15" />
+		<method name="getEmailFrom()Ljava/lang/String;" deprecated="15" />
+		<method name="getIndexOnSim()I" deprecated="15" />
+		<method name="getMessageBody()Ljava/lang/String;" deprecated="15" />
+		<method name="getMessageClass()Landroid/telephony/gsm/SmsMessage$MessageClass;" deprecated="15" />
+		<method name="getOriginatingAddress()Ljava/lang/String;" deprecated="15" />
+		<method name="getPdu()[B" deprecated="15" />
+		<method name="getProtocolIdentifier()I" deprecated="15" />
+		<method name="getPseudoSubject()Ljava/lang/String;" deprecated="15" />
+		<method name="getServiceCenterAddress()Ljava/lang/String;" deprecated="15" />
+		<method name="getStatus()I" deprecated="15" />
+		<method name="getStatusOnSim()I" deprecated="15" />
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="15" />
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="15" />
+		<method name="getTPLayerLengthForPDU(Ljava/lang/String;)I" deprecated="15" />
+		<method name="getTimestampMillis()J" deprecated="15" />
+		<method name="getUserData()[B" deprecated="15" />
+		<method name="isCphsMwiMessage()Z" deprecated="15" />
+		<method name="isEmail()Z" deprecated="15" />
+		<method name="isMWIClearMessage()Z" deprecated="15" />
+		<method name="isMWISetMessage()Z" deprecated="15" />
+		<method name="isMwiDontStore()Z" deprecated="15" />
+		<method name="isReplace()Z" deprecated="15" />
+		<method name="isReplyPathPresent()Z" deprecated="15" />
+		<method name="isStatusReportMessage()Z" deprecated="15" />
+		<field name="ENCODING_16BIT" deprecated="15" />
+		<field name="ENCODING_7BIT" deprecated="15" />
+		<field name="ENCODING_8BIT" deprecated="15" />
+		<field name="ENCODING_UNKNOWN" deprecated="15" />
+		<field name="MAX_USER_DATA_BYTES" deprecated="15" />
+		<field name="MAX_USER_DATA_SEPTETS" deprecated="15" />
+		<field name="MAX_USER_DATA_SEPTETS_WITH_HEADER" deprecated="15" />
+	</class>
+	<class name="android/telephony/gsm/SmsMessage$MessageClass" since="1" deprecated="4">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/telephony/gsm/SmsMessage$MessageClass;" />
+		<method name="values()[Landroid/telephony/gsm/SmsMessage$MessageClass;" />
+		<field name="CLASS_0" deprecated="29" />
+		<field name="CLASS_1" deprecated="29" />
+		<field name="CLASS_2" deprecated="29" />
+		<field name="CLASS_3" deprecated="29" />
+		<field name="UNKNOWN" deprecated="29" />
+	</class>
+	<class name="android/telephony/gsm/SmsMessage$SubmitPdu" since="1" deprecated="4">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<field name="encodedMessage" deprecated="15" />
+		<field name="encodedScAddress" deprecated="15" />
+	</class>
+	<class name="android/telephony/ims/ImsException" since="30">
+		<extends name="java/lang/Exception" />
+		<method name="getCode()I" />
+		<field name="CODE_ERROR_INVALID_SUBSCRIPTION" />
+		<field name="CODE_ERROR_SERVICE_UNAVAILABLE" />
+		<field name="CODE_ERROR_UNSPECIFIED" />
+		<field name="CODE_ERROR_UNSUPPORTED_OPERATION" />
+	</class>
+	<class name="android/telephony/ims/ImsManager" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getImsMmTelManager(I)Landroid/telephony/ims/ImsMmTelManager;" />
+		<method name="getImsRcsManager(I)Landroid/telephony/ims/ImsRcsManager;" />
+		<field name="ACTION_WFC_IMS_REGISTRATION_ERROR" />
+		<field name="EXTRA_WFC_REGISTRATION_FAILURE_MESSAGE" />
+		<field name="EXTRA_WFC_REGISTRATION_FAILURE_TITLE" />
+	</class>
+	<class name="android/telephony/ims/ImsMmTelManager" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/telephony/ims/RegistrationManager" />
+		<method name="getVoWiFiModeSetting()I" />
+		<method name="isAdvancedCallingSettingEnabled()Z" />
+		<method name="isCrossSimCallingEnabled()Z" since="31" />
+		<method name="isTtyOverVolteEnabled()Z" />
+		<method name="isVoWiFiRoamingSettingEnabled()Z" />
+		<method name="isVoWiFiSettingEnabled()Z" />
+		<method name="isVtSettingEnabled()Z" />
+		<method name="registerMmTelCapabilityCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V" />
+		<method name="unregisterMmTelCapabilityCallback(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V" />
+		<field name="WIFI_MODE_CELLULAR_PREFERRED" />
+		<field name="WIFI_MODE_WIFI_ONLY" />
+		<field name="WIFI_MODE_WIFI_PREFERRED" />
+	</class>
+	<class name="android/telephony/ims/ImsMmTelManager$CapabilityCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onCapabilitiesStatusChanged(Landroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;)V" />
+	</class>
+	<class name="android/telephony/ims/ImsRcsManager" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getRegistrationState(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="getRegistrationTransportType(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="getUceAdapter()Landroid/telephony/ims/RcsUceAdapter;" />
+		<method name="registerImsRegistrationCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31" />
+		<method name="unregisterImsRegistrationCallback(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31" />
+		<field name="ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN" />
+	</class>
+	<class name="android/telephony/ims/ImsReasonInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(IILjava/lang/String;)V" />
+		<method name="getCode()I" />
+		<method name="getExtraCode()I" />
+		<method name="getExtraMessage()Ljava/lang/String;" />
+		<field name="CODE_ACCESS_CLASS_BLOCKED" />
+		<field name="CODE_ANSWERED_ELSEWHERE" />
+		<field name="CODE_BLACKLISTED_CALL_ID" />
+		<field name="CODE_CALL_BARRED" />
+		<field name="CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE" />
+		<field name="CODE_CALL_END_CAUSE_CALL_PULL" />
+		<field name="CODE_CALL_PULL_OUT_OF_SYNC" />
+		<field name="CODE_DATA_DISABLED" />
+		<field name="CODE_DATA_LIMIT_REACHED" />
+		<field name="CODE_DIAL_MODIFIED_TO_DIAL" />
+		<field name="CODE_DIAL_MODIFIED_TO_DIAL_VIDEO" />
+		<field name="CODE_DIAL_MODIFIED_TO_SS" />
+		<field name="CODE_DIAL_MODIFIED_TO_USSD" />
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_DIAL" />
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO" />
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_SS" />
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_USSD" />
+		<field name="CODE_ECBM_NOT_SUPPORTED" />
+		<field name="CODE_EMERGENCY_PERM_FAILURE" />
+		<field name="CODE_EMERGENCY_TEMP_FAILURE" />
+		<field name="CODE_EPDG_TUNNEL_ESTABLISH_FAILURE" />
+		<field name="CODE_EPDG_TUNNEL_LOST_CONNECTION" />
+		<field name="CODE_EPDG_TUNNEL_REKEY_FAILURE" />
+		<field name="CODE_FDN_BLOCKED" />
+		<field name="CODE_IKEV2_AUTH_FAILURE" />
+		<field name="CODE_IMEI_NOT_ACCEPTED" />
+		<field name="CODE_IWLAN_DPD_FAILURE" />
+		<field name="CODE_LOCAL_CALL_BUSY" />
+		<field name="CODE_LOCAL_CALL_CS_RETRY_REQUIRED" />
+		<field name="CODE_LOCAL_CALL_DECLINE" />
+		<field name="CODE_LOCAL_CALL_EXCEEDED" />
+		<field name="CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED" />
+		<field name="CODE_LOCAL_CALL_TERMINATED" />
+		<field name="CODE_LOCAL_CALL_VCC_ON_PROGRESSING" />
+		<field name="CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED" />
+		<field name="CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE" />
+		<field name="CODE_LOCAL_HO_NOT_FEASIBLE" />
+		<field name="CODE_LOCAL_ILLEGAL_ARGUMENT" />
+		<field name="CODE_LOCAL_ILLEGAL_STATE" />
+		<field name="CODE_LOCAL_IMS_SERVICE_DOWN" />
+		<field name="CODE_LOCAL_INTERNAL_ERROR" />
+		<field name="CODE_LOCAL_LOW_BATTERY" />
+		<field name="CODE_LOCAL_NETWORK_IP_CHANGED" />
+		<field name="CODE_LOCAL_NETWORK_NO_LTE_COVERAGE" />
+		<field name="CODE_LOCAL_NETWORK_NO_SERVICE" />
+		<field name="CODE_LOCAL_NETWORK_ROAMING" />
+		<field name="CODE_LOCAL_NOT_REGISTERED" />
+		<field name="CODE_LOCAL_NO_PENDING_CALL" />
+		<field name="CODE_LOCAL_POWER_OFF" />
+		<field name="CODE_LOCAL_SERVICE_UNAVAILABLE" />
+		<field name="CODE_LOW_BATTERY" />
+		<field name="CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED" />
+		<field name="CODE_MEDIA_INIT_FAILED" />
+		<field name="CODE_MEDIA_NOT_ACCEPTABLE" />
+		<field name="CODE_MEDIA_NO_DATA" />
+		<field name="CODE_MEDIA_UNSPECIFIED" />
+		<field name="CODE_MULTIENDPOINT_NOT_SUPPORTED" />
+		<field name="CODE_NETWORK_CONGESTION" since="31" />
+		<field name="CODE_NETWORK_DETACH" />
+		<field name="CODE_NETWORK_REJECT" />
+		<field name="CODE_NETWORK_RESP_TIMEOUT" />
+		<field name="CODE_NO_CSFB_IN_CS_ROAM" />
+		<field name="CODE_NO_VALID_SIM" />
+		<field name="CODE_OEM_CAUSE_1" />
+		<field name="CODE_OEM_CAUSE_10" />
+		<field name="CODE_OEM_CAUSE_11" />
+		<field name="CODE_OEM_CAUSE_12" />
+		<field name="CODE_OEM_CAUSE_13" />
+		<field name="CODE_OEM_CAUSE_14" />
+		<field name="CODE_OEM_CAUSE_15" />
+		<field name="CODE_OEM_CAUSE_2" />
+		<field name="CODE_OEM_CAUSE_3" />
+		<field name="CODE_OEM_CAUSE_4" />
+		<field name="CODE_OEM_CAUSE_5" />
+		<field name="CODE_OEM_CAUSE_6" />
+		<field name="CODE_OEM_CAUSE_7" />
+		<field name="CODE_OEM_CAUSE_8" />
+		<field name="CODE_OEM_CAUSE_9" />
+		<field name="CODE_RADIO_ACCESS_FAILURE" />
+		<field name="CODE_RADIO_INTERNAL_ERROR" />
+		<field name="CODE_RADIO_LINK_FAILURE" />
+		<field name="CODE_RADIO_LINK_LOST" />
+		<field name="CODE_RADIO_OFF" />
+		<field name="CODE_RADIO_RELEASE_ABNORMAL" />
+		<field name="CODE_RADIO_RELEASE_NORMAL" />
+		<field name="CODE_RADIO_SETUP_FAILURE" />
+		<field name="CODE_RADIO_UPLINK_FAILURE" />
+		<field name="CODE_REGISTRATION_ERROR" />
+		<field name="CODE_REJECTED_ELSEWHERE" />
+		<field name="CODE_REJECT_1X_COLLISION" />
+		<field name="CODE_REJECT_CALL_ON_OTHER_SUB" />
+		<field name="CODE_REJECT_CALL_TYPE_NOT_ALLOWED" />
+		<field name="CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED" />
+		<field name="CODE_REJECT_INTERNAL_ERROR" />
+		<field name="CODE_REJECT_MAX_CALL_LIMIT_REACHED" />
+		<field name="CODE_REJECT_ONGOING_CALL_SETUP" />
+		<field name="CODE_REJECT_ONGOING_CALL_TRANSFER" />
+		<field name="CODE_REJECT_ONGOING_CALL_UPGRADE" />
+		<field name="CODE_REJECT_ONGOING_CALL_WAITING_DISABLED" />
+		<field name="CODE_REJECT_ONGOING_CONFERENCE_CALL" />
+		<field name="CODE_REJECT_ONGOING_CS_CALL" />
+		<field name="CODE_REJECT_ONGOING_E911_CALL" />
+		<field name="CODE_REJECT_ONGOING_ENCRYPTED_CALL" />
+		<field name="CODE_REJECT_ONGOING_HANDOVER" />
+		<field name="CODE_REJECT_QOS_FAILURE" />
+		<field name="CODE_REJECT_SERVICE_NOT_REGISTERED" />
+		<field name="CODE_REJECT_UNKNOWN" />
+		<field name="CODE_REJECT_UNSUPPORTED_SDP_HEADERS" />
+		<field name="CODE_REJECT_UNSUPPORTED_SIP_HEADERS" />
+		<field name="CODE_REJECT_VT_AVPF_NOT_ALLOWED" />
+		<field name="CODE_REJECT_VT_TTY_NOT_ALLOWED" />
+		<field name="CODE_REMOTE_CALL_DECLINE" />
+		<field name="CODE_SESSION_MODIFICATION_FAILED" />
+		<field name="CODE_SIP_ALTERNATE_EMERGENCY_CALL" />
+		<field name="CODE_SIP_AMBIGUOUS" />
+		<field name="CODE_SIP_BAD_ADDRESS" />
+		<field name="CODE_SIP_BAD_REQUEST" />
+		<field name="CODE_SIP_BUSY" />
+		<field name="CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST" />
+		<field name="CODE_SIP_CLIENT_ERROR" />
+		<field name="CODE_SIP_EXTENSION_REQUIRED" />
+		<field name="CODE_SIP_FORBIDDEN" />
+		<field name="CODE_SIP_GLOBAL_ERROR" />
+		<field name="CODE_SIP_INTERVAL_TOO_BRIEF" />
+		<field name="CODE_SIP_LOOP_DETECTED" />
+		<field name="CODE_SIP_METHOD_NOT_ALLOWED" />
+		<field name="CODE_SIP_NOT_ACCEPTABLE" />
+		<field name="CODE_SIP_NOT_FOUND" />
+		<field name="CODE_SIP_NOT_REACHABLE" />
+		<field name="CODE_SIP_NOT_SUPPORTED" />
+		<field name="CODE_SIP_PROXY_AUTHENTICATION_REQUIRED" />
+		<field name="CODE_SIP_REDIRECTED" />
+		<field name="CODE_SIP_REQUEST_CANCELLED" />
+		<field name="CODE_SIP_REQUEST_ENTITY_TOO_LARGE" />
+		<field name="CODE_SIP_REQUEST_PENDING" />
+		<field name="CODE_SIP_REQUEST_TIMEOUT" />
+		<field name="CODE_SIP_REQUEST_URI_TOO_LARGE" />
+		<field name="CODE_SIP_SERVER_ERROR" />
+		<field name="CODE_SIP_SERVER_INTERNAL_ERROR" />
+		<field name="CODE_SIP_SERVER_TIMEOUT" />
+		<field name="CODE_SIP_SERVICE_UNAVAILABLE" />
+		<field name="CODE_SIP_TEMPRARILY_UNAVAILABLE" />
+		<field name="CODE_SIP_TOO_MANY_HOPS" />
+		<field name="CODE_SIP_TRANSACTION_DOES_NOT_EXIST" />
+		<field name="CODE_SIP_UNDECIPHERABLE" />
+		<field name="CODE_SIP_USER_MARKED_UNWANTED" />
+		<field name="CODE_SIP_USER_REJECTED" />
+		<field name="CODE_SUPP_SVC_CANCELLED" />
+		<field name="CODE_SUPP_SVC_FAILED" />
+		<field name="CODE_SUPP_SVC_REINVITE_COLLISION" />
+		<field name="CODE_TIMEOUT_1XX_WAITING" />
+		<field name="CODE_TIMEOUT_NO_ANSWER" />
+		<field name="CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE" />
+		<field name="CODE_UNSPECIFIED" />
+		<field name="CODE_USER_CANCELLED_SESSION_MODIFICATION" />
+		<field name="CODE_USER_DECLINE" />
+		<field name="CODE_USER_IGNORE" />
+		<field name="CODE_USER_NOANSWER" />
+		<field name="CODE_USER_REJECTED_SESSION_MODIFICATION" />
+		<field name="CODE_USER_TERMINATED" />
+		<field name="CODE_USER_TERMINATED_BY_REMOTE" />
+		<field name="CODE_UT_CB_PASSWORD_MISMATCH" />
+		<field name="CODE_UT_NETWORK_ERROR" />
+		<field name="CODE_UT_NOT_SUPPORTED" />
+		<field name="CODE_UT_OPERATION_NOT_ALLOWED" />
+		<field name="CODE_UT_SERVICE_UNAVAILABLE" />
+		<field name="CODE_UT_SS_MODIFIED_TO_DIAL" />
+		<field name="CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO" />
+		<field name="CODE_UT_SS_MODIFIED_TO_SS" />
+		<field name="CODE_UT_SS_MODIFIED_TO_USSD" />
+		<field name="CODE_WIFI_LOST" />
+		<field name="CREATOR" />
+		<field name="EXTRA_CODE_CALL_RETRY_BY_SETTINGS" />
+		<field name="EXTRA_CODE_CALL_RETRY_EMERGENCY" since="31" />
+		<field name="EXTRA_CODE_CALL_RETRY_NORMAL" />
+		<field name="EXTRA_CODE_CALL_RETRY_SILENT_REDIAL" />
+	</class>
+	<class name="android/telephony/ims/ImsRegistrationAttributes" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAttributeFlags()I" />
+		<method name="getFeatureTags()Ljava/util/Set;" />
+		<method name="getTransportType()I" />
+		<field name="ATTR_EPDG_OVER_CELL_INTERNET" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/ims/RcsUceAdapter" since="30">
+		<extends name="java/lang/Object" />
+		<method name="isUceSettingEnabled()Z" />
+	</class>
+	<class name="android/telephony/ims/RegistrationManager" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getRegistrationState(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" />
+		<method name="getRegistrationTransportType(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" />
+		<method name="registerImsRegistrationCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" />
+		<method name="unregisterImsRegistrationCallback(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" />
+		<field name="REGISTRATION_STATE_NOT_REGISTERED" />
+		<field name="REGISTRATION_STATE_REGISTERED" />
+		<field name="REGISTRATION_STATE_REGISTERING" />
+	</class>
+	<class name="android/telephony/ims/RegistrationManager$RegistrationCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onRegistered(I)V" deprecated="31" />
+		<method name="onRegistered(Landroid/telephony/ims/ImsRegistrationAttributes;)V" since="31" />
+		<method name="onRegistering(I)V" deprecated="31" />
+		<method name="onRegistering(Landroid/telephony/ims/ImsRegistrationAttributes;)V" since="31" />
+		<method name="onTechnologyChangeFailed(ILandroid/telephony/ims/ImsReasonInfo;)V" />
+		<method name="onUnregistered(Landroid/telephony/ims/ImsReasonInfo;)V" />
+	</class>
+	<class name="android/telephony/ims/feature/MmTelFeature" since="30">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/telephony/ims/feature/MmTelFeature$MmTelCapabilities" since="30">
+		<extends name="java/lang/Object" />
+		<method name="isCapable(I)Z" since="31" />
+		<field name="CAPABILITY_TYPE_CALL_COMPOSER" since="31" />
+		<field name="CAPABILITY_TYPE_SMS" />
+		<field name="CAPABILITY_TYPE_UT" />
+		<field name="CAPABILITY_TYPE_VIDEO" />
+		<field name="CAPABILITY_TYPE_VOICE" />
+	</class>
+	<class name="android/telephony/mbms/DownloadProgressListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onProgressUpdated(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;IIII)V" />
+	</class>
+	<class name="android/telephony/mbms/DownloadRequest" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDestinationUri()Landroid/net/Uri;" />
+		<method name="getFileServiceId()Ljava/lang/String;" />
+		<method name="getMaxAppIntentSize()I" />
+		<method name="getMaxDestinationUriSize()I" />
+		<method name="getSourceUri()Landroid/net/Uri;" />
+		<method name="getSubscriptionId()I" />
+		<method name="toByteArray()[B" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/mbms/DownloadRequest$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;Landroid/net/Uri;)V" />
+		<method name="build()Landroid/telephony/mbms/DownloadRequest;" />
+		<method name="fromDownloadRequest(Landroid/telephony/mbms/DownloadRequest;)Landroid/telephony/mbms/DownloadRequest$Builder;" />
+		<method name="fromSerializedRequest([B)Landroid/telephony/mbms/DownloadRequest$Builder;" />
+		<method name="setAppIntent(Landroid/content/Intent;)Landroid/telephony/mbms/DownloadRequest$Builder;" />
+		<method name="setServiceInfo(Landroid/telephony/mbms/FileServiceInfo;)Landroid/telephony/mbms/DownloadRequest$Builder;" />
+		<method name="setSubscriptionId(I)Landroid/telephony/mbms/DownloadRequest$Builder;" />
+	</class>
+	<class name="android/telephony/mbms/DownloadStatusListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onStatusUpdated(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;I)V" />
+	</class>
+	<class name="android/telephony/mbms/FileInfo" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getMimeType()Ljava/lang/String;" />
+		<method name="getUri()Landroid/net/Uri;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/mbms/FileServiceInfo" since="28">
+		<extends name="android/telephony/mbms/ServiceInfo" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFiles()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/telephony/mbms/GroupCall" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getTmgi()J" />
+		<method name="updateGroupCall(Ljava/util/List;Ljava/util/List;)V" />
+		<field name="REASON_BY_USER_REQUEST" />
+		<field name="REASON_FREQUENCY_CONFLICT" />
+		<field name="REASON_LEFT_MBMS_BROADCAST_AREA" />
+		<field name="REASON_NONE" />
+		<field name="REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE" />
+		<field name="REASON_OUT_OF_MEMORY" />
+		<field name="STATE_STALLED" />
+		<field name="STATE_STARTED" />
+		<field name="STATE_STOPPED" />
+	</class>
+	<class name="android/telephony/mbms/GroupCallCallback" since="29">
+		<extends name="java/lang/Object" />
+		<method name="onBroadcastSignalStrengthUpdated(I)V" />
+		<method name="onError(ILjava/lang/String;)V" />
+		<method name="onGroupCallStateChanged(II)V" />
+		<field name="SIGNAL_STRENGTH_UNAVAILABLE" />
+	</class>
+	<class name="android/telephony/mbms/MbmsDownloadReceiver" since="28">
+		<extends name="android/content/BroadcastReceiver" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/telephony/mbms/MbmsDownloadSessionCallback" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onError(ILjava/lang/String;)V" />
+		<method name="onFileServicesUpdated(Ljava/util/List;)V" />
+		<method name="onMiddlewareReady()V" />
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors" since="28">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_MIDDLEWARE_LOST" />
+		<field name="ERROR_MIDDLEWARE_NOT_BOUND" />
+		<field name="ERROR_NO_UNIQUE_MIDDLEWARE" />
+		<field name="SUCCESS" />
+		<field name="UNKNOWN" />
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$DownloadErrors" since="28">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT" />
+		<field name="ERROR_MALFORMED_SERVICE_ANNOUNCEMENT" since="31" />
+		<field name="ERROR_UNKNOWN_DOWNLOAD_REQUEST" />
+		<field name="ERROR_UNKNOWN_FILE_INFO" />
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$GeneralErrors" since="28">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_CARRIER_CHANGE_NOT_ALLOWED" />
+		<field name="ERROR_IN_E911" />
+		<field name="ERROR_MIDDLEWARE_NOT_YET_READY" />
+		<field name="ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE" />
+		<field name="ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE" />
+		<field name="ERROR_OUT_OF_MEMORY" />
+		<field name="ERROR_UNABLE_TO_READ_SIM" />
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$GroupCallErrors" since="29">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_DUPLICATE_START_GROUP_CALL" />
+		<field name="ERROR_UNABLE_TO_START_SERVICE" />
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$InitializationErrors" since="28">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_APP_PERMISSIONS_NOT_GRANTED" />
+		<field name="ERROR_DUPLICATE_INITIALIZE" />
+		<field name="ERROR_UNABLE_TO_INITIALIZE" />
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$StreamingErrors" since="28">
+		<extends name="java/lang/Object" />
+		<field name="ERROR_CONCURRENT_SERVICE_LIMIT_REACHED" />
+		<field name="ERROR_DUPLICATE_START_STREAM" />
+		<field name="ERROR_UNABLE_TO_START_SERVICE" />
+	</class>
+	<class name="android/telephony/mbms/MbmsGroupCallSessionCallback" since="29">
+		<extends name="java/lang/Object" />
+		<method name="onAvailableSaisUpdated(Ljava/util/List;Ljava/util/List;)V" />
+		<method name="onError(ILjava/lang/String;)V" />
+		<method name="onMiddlewareReady()V" />
+		<method name="onServiceInterfaceAvailable(Ljava/lang/String;I)V" />
+	</class>
+	<class name="android/telephony/mbms/MbmsStreamingSessionCallback" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onError(ILjava/lang/String;)V" />
+		<method name="onMiddlewareReady()V" />
+		<method name="onStreamingServicesUpdated(Ljava/util/List;)V" />
+	</class>
+	<class name="android/telephony/mbms/ServiceInfo" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getLocales()Ljava/util/List;" />
+		<method name="getNameForLocale(Ljava/util/Locale;)Ljava/lang/CharSequence;" />
+		<method name="getNamedContentLocales()Ljava/util/Set;" />
+		<method name="getServiceClassName()Ljava/lang/String;" />
+		<method name="getServiceId()Ljava/lang/String;" />
+		<method name="getSessionEndTime()Ljava/util/Date;" />
+		<method name="getSessionStartTime()Ljava/util/Date;" />
+	</class>
+	<class name="android/telephony/mbms/StreamingService" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="getInfo()Landroid/telephony/mbms/StreamingServiceInfo;" />
+		<method name="getPlaybackUri()Landroid/net/Uri;" />
+		<field name="BROADCAST_METHOD" />
+		<field name="REASON_BY_USER_REQUEST" />
+		<field name="REASON_END_OF_SESSION" />
+		<field name="REASON_FREQUENCY_CONFLICT" />
+		<field name="REASON_LEFT_MBMS_BROADCAST_AREA" />
+		<field name="REASON_NONE" />
+		<field name="REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE" />
+		<field name="REASON_OUT_OF_MEMORY" />
+		<field name="STATE_STALLED" />
+		<field name="STATE_STARTED" />
+		<field name="STATE_STOPPED" />
+		<field name="UNICAST_METHOD" />
+	</class>
+	<class name="android/telephony/mbms/StreamingServiceCallback" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onBroadcastSignalStrengthUpdated(I)V" />
+		<method name="onError(ILjava/lang/String;)V" />
+		<method name="onMediaDescriptionUpdated()V" />
+		<method name="onStreamMethodUpdated(I)V" />
+		<method name="onStreamStateUpdated(II)V" />
+		<field name="SIGNAL_STRENGTH_UNAVAILABLE" />
+	</class>
+	<class name="android/telephony/mbms/StreamingServiceInfo" since="28">
+		<extends name="android/telephony/mbms/ServiceInfo" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/test/ActivityInstrumentationTestCase" since="1" deprecated="3">
+		<extends name="android/test/ActivityTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;Z)V" deprecated="33" />
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33" />
+	</class>
+	<class name="android/test/ActivityInstrumentationTestCase2" since="3" deprecated="24">
+		<extends name="android/test/ActivityTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" since="8" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="15" />
+		<method name="setActivityInitialTouchMode(Z)V" deprecated="33" />
+		<method name="setActivityIntent(Landroid/content/Intent;)V" deprecated="33" />
+	</class>
+	<class name="android/test/ActivityTestCase" since="1" deprecated="24">
+		<extends name="android/test/InstrumentationTestCase" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33" />
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="setActivity(Landroid/app/Activity;)V" deprecated="33" />
+	</class>
+	<class name="android/test/ActivityUnitTestCase" since="1" deprecated="24">
+		<extends name="android/test/ActivityTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="getFinishedActivityRequest()I" deprecated="33" />
+		<method name="getRequestedOrientation()I" deprecated="33" />
+		<method name="getStartedActivityIntent()Landroid/content/Intent;" deprecated="33" />
+		<method name="getStartedActivityRequest()I" deprecated="33" />
+		<method name="isFinishCalled()Z" deprecated="33" />
+		<method name="setActivityContext(Landroid/content/Context;)V" deprecated="33" />
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33" />
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;" deprecated="33" />
+	</class>
+	<class name="android/test/AndroidTestCase" since="1" deprecated="24">
+		<extends name="junit/framework/TestCase" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4" deprecated="33" />
+		<method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33" />
+		<method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33" />
+		<method name="getContext()Landroid/content/Context;" deprecated="33" />
+		<method name="getTestContext()Landroid/content/Context;" since="33" deprecated="33" />
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33" />
+		<method name="setTestContext(Landroid/content/Context;)V" since="33" deprecated="33" />
+		<method name="testAndroidTestCaseSetupProperly()V" deprecated="33" />
+		<field name="mContext" deprecated="33" />
+	</class>
+	<class name="android/test/AndroidTestRunner" since="1" deprecated="24">
+		<extends name="junit/runner/BaseTestRunner" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" deprecated="33" />
+		<method name="clearTestListeners()V" deprecated="33" />
+		<method name="createTestResult()Ljunit/framework/TestResult;" deprecated="33" />
+		<method name="getTestCases()Ljava/util/List;" deprecated="33" />
+		<method name="getTestClassName()Ljava/lang/String;" deprecated="33" />
+		<method name="getTestResult()Ljunit/framework/TestResult;" deprecated="33" />
+		<method name="runTest()V" deprecated="33" />
+		<method name="runTest(Ljunit/framework/TestResult;)V" deprecated="33" />
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33" />
+		<method name="setInstrumentaiton(Landroid/app/Instrumentation;)V" deprecated="15" />
+		<method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33" />
+		<method name="setTest(Ljunit/framework/Test;)V" deprecated="33" />
+		<method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+	</class>
+	<class name="android/test/ApplicationTestCase" since="1" deprecated="24">
+		<extends name="android/test/AndroidTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="createApplication()V" deprecated="33" />
+		<method name="getApplication()Landroid/app/Application;" deprecated="33" />
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33" />
+		<method name="terminateApplication()V" deprecated="33" />
+		<method name="testApplicationTestCaseSetUpProperly()V" deprecated="33" />
+	</class>
+	<class name="android/test/AssertionFailedError" since="1" deprecated="16">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="33" />
+	</class>
+	<class name="android/test/ComparisonFailure" since="1" deprecated="16">
+		<extends name="android/test/AssertionFailedError" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+	</class>
+	<class name="android/test/FlakyTest" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="tolerance()I" deprecated="33" />
+	</class>
+	<class name="android/test/InstrumentationTestCase" since="1" deprecated="24">
+		<extends name="junit/framework/TestCase" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="getInstrumentation()Landroid/app/Instrumentation;" deprecated="33" />
+		<method name="injectInsrumentation(Landroid/app/Instrumentation;)V" deprecated="15" />
+		<method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33" />
+		<method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;" deprecated="33" />
+		<method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3" deprecated="33" />
+		<method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3" deprecated="33" />
+		<method name="sendKeys(Ljava/lang/String;)V" deprecated="33" />
+		<method name="sendKeys([I)V" deprecated="33" />
+		<method name="sendRepeatedKeys([I)V" deprecated="33" />
+	</class>
+	<class name="android/test/InstrumentationTestRunner" since="1" deprecated="24">
+		<extends name="android/app/Instrumentation" />
+		<implements name="android/test/TestSuiteProvider" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" since="33" deprecated="33" />
+		<method name="getAllTests()Ljunit/framework/TestSuite;" deprecated="33" />
+		<method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;" deprecated="33" />
+		<method name="getArguments()Landroid/os/Bundle;" since="18" deprecated="33" />
+		<method name="getLoader()Ljava/lang/ClassLoader;" deprecated="33" />
+		<field name="REPORT_KEY_NAME_CLASS" deprecated="33" />
+		<field name="REPORT_KEY_NAME_TEST" deprecated="33" />
+		<field name="REPORT_KEY_NUM_CURRENT" deprecated="33" />
+		<field name="REPORT_KEY_NUM_TOTAL" deprecated="33" />
+		<field name="REPORT_KEY_STACK" deprecated="33" />
+		<field name="REPORT_VALUE_ID" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_ERROR" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_FAILURE" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_OK" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_START" deprecated="33" />
+	</class>
+	<class name="android/test/InstrumentationTestSuite" since="1" deprecated="24">
+		<extends name="junit/framework/TestSuite" />
+		<method name="&lt;init&gt;(Landroid/app/Instrumentation;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Landroid/app/Instrumentation;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/app/Instrumentation;)V" deprecated="33" />
+	</class>
+	<class name="android/test/IsolatedContext" since="1" deprecated="24">
+		<extends name="android/content/ContextWrapper" />
+		<method name="&lt;init&gt;(Landroid/content/ContentResolver;Landroid/content/Context;)V" deprecated="33" />
+		<method name="getAndClearBroadcastIntents()Ljava/util/List;" deprecated="33" />
+	</class>
+	<class name="android/test/LaunchPerformanceBase" since="33" deprecated="33">
+		<extends name="android/app/Instrumentation" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="LaunchApp()V" deprecated="33" />
+		<field name="mIntent" deprecated="33" />
+		<field name="mResults" deprecated="33" />
+	</class>
+	<class name="android/test/LoaderTestCase" since="11">
+		<extends name="android/test/AndroidTestCase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getLoaderResultSynchronously(Landroid/content/Loader;)Ljava/lang/Object;" />
+	</class>
+	<class name="android/test/MoreAsserts" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[B[B)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[D[D)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[I[I)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V" deprecated="33" />
+		<method name="assertEquals([B[B)V" deprecated="33" />
+		<method name="assertEquals([D[D)V" deprecated="33" />
+		<method name="assertEquals([I[I)V" deprecated="33" />
+		<method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33" />
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33" />
+	</class>
+	<class name="android/test/PerformanceTestCase" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="isPerformanceOnly()Z" deprecated="33" />
+		<method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I" deprecated="33" />
+	</class>
+	<class name="android/test/PerformanceTestCase$Intermediates" since="1" deprecated="33">
+		<extends name="java/lang/Object" />
+		<method name="addIntermediate(Ljava/lang/String;)V" deprecated="33" />
+		<method name="addIntermediate(Ljava/lang/String;J)V" deprecated="33" />
+		<method name="finishTiming(Z)V" deprecated="33" />
+		<method name="setInternalIterations(I)V" deprecated="33" />
+		<method name="startTiming(Z)V" deprecated="33" />
+	</class>
+	<class name="android/test/ProviderTestCase" since="1" deprecated="5">
+		<extends name="android/test/InstrumentationTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" deprecated="33" />
+		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" deprecated="33" />
+		<method name="getMockContext()Landroid/test/IsolatedContext;" deprecated="33" />
+		<method name="getProvider()Landroid/content/ContentProvider;" deprecated="33" />
+		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" deprecated="33" />
+	</class>
+	<class name="android/test/ProviderTestCase2" since="3">
+		<extends name="android/test/AndroidTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" />
+		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" />
+		<method name="getMockContext()Landroid/test/IsolatedContext;" />
+		<method name="getProvider()Landroid/content/ContentProvider;" />
+		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" />
+	</class>
+	<class name="android/test/RenamingDelegatingContext" since="1" deprecated="24">
+		<extends name="android/content/ContextWrapper" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" deprecated="33" />
+		<method name="getDatabasePrefix()Ljava/lang/String;" deprecated="33" />
+		<method name="makeExistingFilesAndDbsAccessible()V" deprecated="33" />
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;" deprecated="33" />
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;" deprecated="33" />
+	</class>
+	<class name="android/test/RepetitiveTest" since="33" deprecated="33">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="numIterations()I" deprecated="33" />
+	</class>
+	<class name="android/test/ServiceTestCase" since="1" deprecated="24">
+		<extends name="android/test/AndroidTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;" deprecated="33" />
+		<method name="getApplication()Landroid/app/Application;" deprecated="33" />
+		<method name="getService()Landroid/app/Service;" deprecated="33" />
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33" />
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33" />
+		<method name="setupService()V" deprecated="33" />
+		<method name="shutdownService()V" deprecated="33" />
+		<method name="startService(Landroid/content/Intent;)V" deprecated="33" />
+		<method name="testServiceTestCaseSetUpProperly()V" deprecated="33" />
+	</class>
+	<class name="android/test/SingleLaunchActivityTestCase" since="1" deprecated="24">
+		<extends name="android/test/InstrumentationTestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33" />
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33" />
+	</class>
+	<class name="android/test/SyncBaseInstrumentation" since="1" deprecated="24">
+		<extends name="android/test/InstrumentationTestCase" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="cancelSyncsandDisableAutoSync()V" deprecated="33" />
+		<method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+	</class>
+	<class name="android/test/TestSuiteProvider" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="getTestSuite()Ljunit/framework/TestSuite;" deprecated="33" />
+	</class>
+	<class name="android/test/TouchUtils" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33" />
+		<method name="drag(Landroid/test/ActivityInstrumentationTestCase;FFFFI)V" deprecated="15" />
+		<method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3" deprecated="33" />
+		<method name="dragQuarterScreenDown(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15" />
+		<method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33" />
+		<method name="dragQuarterScreenUp(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15" />
+		<method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33" />
+		<method name="dragViewBy(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15" />
+		<method name="dragViewBy(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="15" />
+		<method name="dragViewTo(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15" />
+		<method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="33" />
+		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15" />
+		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15" />
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3" deprecated="33" />
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3" deprecated="33" />
+		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15" />
+		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15" />
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33" />
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3" deprecated="33" />
+		<method name="dragViewToX(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15" />
+		<method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33" />
+		<method name="dragViewToY(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15" />
+		<method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33" />
+		<method name="longClickView(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15" />
+		<method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33" />
+		<method name="scrollToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15" />
+		<method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33" />
+		<method name="scrollToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15" />
+		<method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33" />
+		<method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33" />
+		<method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33" />
+	</class>
+	<class name="android/test/UiThreadTest" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/test/ViewAsserts" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V" deprecated="33" />
+		<method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V" deprecated="33" />
+		<method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+	</class>
+	<class name="android/test/mock/MockAccountManager" since="33" deprecated="33">
+		<extends name="java/lang/Object" />
+		<method name="newMockAccountManager(Landroid/content/Context;)Landroid/accounts/AccountManager;" deprecated="33" />
+	</class>
+	<class name="android/test/mock/MockApplication" since="1" deprecated="24">
+		<extends name="android/app/Application" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+	</class>
+	<class name="android/test/mock/MockContentProvider" since="8">
+		<extends name="android/content/ContentProvider" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V" />
+		<method name="attachInfoForTesting(Landroid/content/ContentProvider;Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" since="33" deprecated="33" />
+	</class>
+	<class name="android/test/mock/MockContentResolver" since="1">
+		<extends name="android/content/ContentResolver" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" since="18" />
+		<method name="addProvider(Ljava/lang/String;Landroid/content/ContentProvider;)V" />
+	</class>
+	<class name="android/test/mock/MockContext" since="1">
+		<extends name="android/content/Context" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getPackageCodePath()Ljava/lang/String;" />
+		<method name="getPackageResourcePath()Ljava/lang/String;" />
+	</class>
+	<class name="android/test/mock/MockCursor" since="8" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/database/Cursor" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="abortUpdates()V" removed="11" />
+		<method name="commitUpdates()Z" removed="11" />
+		<method name="commitUpdates(Ljava/util/Map;)Z" removed="11" />
+		<method name="deleteRow()Z" removed="11" />
+		<method name="hasUpdates()Z" removed="11" />
+		<method name="supportsUpdates()Z" removed="11" />
+		<method name="updateBlob(I[B)Z" removed="11" />
+		<method name="updateDouble(ID)Z" removed="11" />
+		<method name="updateFloat(IF)Z" removed="11" />
+		<method name="updateInt(II)Z" removed="11" />
+		<method name="updateLong(IJ)Z" removed="11" />
+		<method name="updateShort(IS)Z" removed="11" />
+		<method name="updateString(ILjava/lang/String;)Z" removed="11" />
+		<method name="updateToNull(I)Z" removed="11" />
+	</class>
+	<class name="android/test/mock/MockDialogInterface" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/content/DialogInterface" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+	</class>
+	<class name="android/test/mock/MockPackageManager" since="1" deprecated="24">
+		<extends name="android/content/pm/PackageManager" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23" deprecated="33" />
+		<method name="getDefaultBrowserPackageName(I)Ljava/lang/String;" since="23" removed="24" />
+		<method name="resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;" since="33" deprecated="33" />
+		<method name="setDefaultBrowserPackageName(Ljava/lang/String;I)Z" since="23" removed="24" />
+		<method name="setPackageObbPath(Ljava/lang/String;Ljava/lang/String;)V" since="9" removed="10" />
+	</class>
+	<class name="android/test/mock/MockResources" since="1" deprecated="24">
+		<extends name="android/content/res/Resources" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+	</class>
+	<class name="android/test/mock/MockService" since="33" deprecated="33">
+		<extends name="java/lang/Object" />
+		<method name="attachForTesting(Landroid/app/Service;Landroid/content/Context;Ljava/lang/String;Landroid/app/Application;)V" deprecated="33" />
+	</class>
+	<class name="android/test/suitebuilder/TestMethod" since="1" deprecated="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" since="3" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/reflect/Method;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljunit/framework/TestCase;)V" since="3" deprecated="33" />
+		<method name="createTest()Ljunit/framework/TestCase;" deprecated="33" />
+		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" deprecated="33" />
+		<method name="getEnclosingClass()Ljava/lang/Class;" deprecated="33" />
+		<method name="getEnclosingClassname()Ljava/lang/String;" deprecated="33" />
+		<method name="getName()Ljava/lang/String;" deprecated="33" />
+	</class>
+	<class name="android/test/suitebuilder/TestSuiteBuilder" since="1" deprecated="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33" />
+		<method name="addRequirements(Ljava/util/List;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28" />
+		<method name="addRequirements([Lcom/android/internal/util/Predicate;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28" />
+		<method name="build()Ljunit/framework/TestSuite;" deprecated="33" />
+		<method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
+		<method name="getSuiteName()Ljava/lang/String;" deprecated="33" />
+		<method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
+		<method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
+		<method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
+	</class>
+	<class name="android/test/suitebuilder/TestSuiteBuilder$FailedToCreateTests" since="1" deprecated="26">
+		<extends name="junit/framework/TestCase" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" deprecated="33" />
+		<method name="testSuiteConstructionFailed()V" deprecated="33" />
+	</class>
+	<class name="android/test/suitebuilder/UnitTestSuiteBuilder" since="33" deprecated="33">
+		<extends name="android/test/suitebuilder/TestSuiteBuilder" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33" />
+	</class>
+	<class name="android/test/suitebuilder/annotation/LargeTest" since="2" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/test/suitebuilder/annotation/MediumTest" since="2" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/test/suitebuilder/annotation/SmallTest" since="2" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/test/suitebuilder/annotation/Smoke" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/test/suitebuilder/annotation/Suppress" since="1" deprecated="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/text/AlteredCharSequence" since="1" deprecated="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/GetChars" />
+		<implements name="java/lang/CharSequence" />
+		<method name="make(Ljava/lang/CharSequence;[CII)Landroid/text/AlteredCharSequence;" deprecated="30" />
+	</class>
+	<class name="android/text/AndroidCharacter" since="1" deprecated="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getDirectionalities([C[BI)V" deprecated="29" />
+		<method name="getEastAsianWidth(C)I" since="8" deprecated="29" />
+		<method name="getEastAsianWidths([CII[B)V" since="8" deprecated="29" />
+		<method name="getMirror(C)C" deprecated="29" />
+		<method name="mirror([CII)Z" deprecated="29" />
+		<field name="EAST_ASIAN_WIDTH_AMBIGUOUS" since="8" deprecated="29" />
+		<field name="EAST_ASIAN_WIDTH_FULL_WIDTH" since="8" deprecated="29" />
+		<field name="EAST_ASIAN_WIDTH_HALF_WIDTH" since="8" deprecated="29" />
+		<field name="EAST_ASIAN_WIDTH_NARROW" since="8" deprecated="29" />
+		<field name="EAST_ASIAN_WIDTH_NEUTRAL" since="8" deprecated="29" />
+		<field name="EAST_ASIAN_WIDTH_WIDE" since="8" deprecated="29" />
+	</class>
+	<class name="android/text/Annotation" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getKey()Ljava/lang/String;" />
+		<method name="getValue()Ljava/lang/String;" />
+	</class>
+	<class name="android/text/AutoText" since="1">
+		<extends name="java/lang/Object" />
+		<method name="get(Ljava/lang/CharSequence;IILandroid/view/View;)Ljava/lang/String;" />
+		<method name="getSize(Landroid/view/View;)I" since="3" />
+	</class>
+	<class name="android/text/BidiFormatter" since="18">
+		<extends name="java/lang/Object" />
+		<method name="getInstance()Landroid/text/BidiFormatter;" />
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/BidiFormatter;" />
+		<method name="getInstance(Z)Landroid/text/BidiFormatter;" />
+		<method name="getStereoReset()Z" />
+		<method name="isRtl(Ljava/lang/CharSequence;)Z" since="26" />
+		<method name="isRtl(Ljava/lang/String;)Z" />
+		<method name="isRtlContext()Z" />
+		<method name="unicodeWrap(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="26" />
+		<method name="unicodeWrap(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;)Ljava/lang/CharSequence;" since="26" />
+		<method name="unicodeWrap(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/CharSequence;" since="26" />
+		<method name="unicodeWrap(Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;" since="26" />
+		<method name="unicodeWrap(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;)Ljava/lang/String;" />
+		<method name="unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/String;" />
+		<method name="unicodeWrap(Ljava/lang/String;Z)Ljava/lang/String;" />
+	</class>
+	<class name="android/text/BidiFormatter$Builder" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="build()Landroid/text/BidiFormatter;" />
+		<method name="setTextDirectionHeuristic(Landroid/text/TextDirectionHeuristic;)Landroid/text/BidiFormatter$Builder;" />
+		<method name="stereoReset(Z)Landroid/text/BidiFormatter$Builder;" />
+	</class>
+	<class name="android/text/BoringLayout" since="1">
+		<extends name="android/text/Layout" />
+		<implements name="android/text/TextUtils$EllipsizeCallback" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)V" />
+		<method name="isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;)Landroid/text/BoringLayout$Metrics;" />
+		<method name="isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;" />
+		<method name="make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;" />
+		<method name="make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;" />
+		<method name="replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;" />
+		<method name="replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;" />
+	</class>
+	<class name="android/text/BoringLayout$Metrics" since="1">
+		<extends name="android/graphics/Paint$FontMetricsInt" />
+		<method name="&lt;init&gt;()V" />
+		<field name="width" />
+	</class>
+	<class name="android/text/ClipboardManager" since="1" deprecated="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="11" deprecated="29" />
+		<method name="getText()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="hasText()Z" deprecated="29" />
+		<method name="setText(Ljava/lang/CharSequence;)V" deprecated="29" />
+	</class>
+	<class name="android/text/DynamicLayout" since="1">
+		<extends name="android/text/Layout" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZLandroid/text/TextUtils$TruncateAt;I)V" deprecated="28" />
+	</class>
+	<class name="android/text/DynamicLayout$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="build()Landroid/text/DynamicLayout;" />
+		<method name="obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setBreakStrategy(I)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setDisplayText(Ljava/lang/CharSequence;)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setEllipsizedWidth(I)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setHyphenationFrequency(I)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setIncludePad(Z)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setJustificationMode(I)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setLineSpacing(FF)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/DynamicLayout$Builder;" />
+		<method name="setUseLineSpacingFromFallbacks(Z)Landroid/text/DynamicLayout$Builder;" />
+	</class>
+	<class name="android/text/Editable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/GetChars" />
+		<implements name="android/text/Spannable" />
+		<implements name="java/lang/Appendable" />
+		<implements name="java/lang/CharSequence" />
+		<method name="append(C)Landroid/text/Editable;" />
+		<method name="append(Ljava/lang/CharSequence;)Landroid/text/Editable;" />
+		<method name="append(Ljava/lang/CharSequence;II)Landroid/text/Editable;" />
+		<method name="clear()V" />
+		<method name="clearSpans()V" />
+		<method name="delete(II)Landroid/text/Editable;" />
+		<method name="getFilters()[Landroid/text/InputFilter;" />
+		<method name="insert(ILjava/lang/CharSequence;)Landroid/text/Editable;" />
+		<method name="insert(ILjava/lang/CharSequence;II)Landroid/text/Editable;" />
+		<method name="replace(IILjava/lang/CharSequence;)Landroid/text/Editable;" />
+		<method name="replace(IILjava/lang/CharSequence;II)Landroid/text/Editable;" />
+		<method name="setFilters([Landroid/text/InputFilter;)V" />
+	</class>
+	<class name="android/text/Editable$Factory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance()Landroid/text/Editable$Factory;" />
+		<method name="newEditable(Ljava/lang/CharSequence;)Landroid/text/Editable;" />
+	</class>
+	<class name="android/text/GetChars" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/CharSequence" />
+		<method name="getChars(II[CI)V" />
+	</class>
+	<class name="android/text/Html" since="1">
+		<extends name="java/lang/Object" />
+		<method name="escapeHtml(Ljava/lang/CharSequence;)Ljava/lang/String;" since="16" />
+		<method name="fromHtml(Ljava/lang/String;)Landroid/text/Spanned;" deprecated="24" />
+		<method name="fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;" since="24" />
+		<method name="fromHtml(Ljava/lang/String;ILandroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;" since="24" />
+		<method name="fromHtml(Ljava/lang/String;Landroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;" deprecated="24" />
+		<method name="toHtml(Landroid/text/Spanned;)Ljava/lang/String;" deprecated="24" />
+		<method name="toHtml(Landroid/text/Spanned;I)Ljava/lang/String;" since="24" />
+		<field name="FROM_HTML_MODE_COMPACT" since="24" />
+		<field name="FROM_HTML_MODE_LEGACY" since="24" />
+		<field name="FROM_HTML_OPTION_USE_CSS_COLORS" since="24" />
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE" since="24" />
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_DIV" since="24" />
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_HEADING" since="24" />
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_LIST" since="24" />
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM" since="24" />
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH" since="24" />
+		<field name="TO_HTML_PARAGRAPH_LINES_CONSECUTIVE" since="24" />
+		<field name="TO_HTML_PARAGRAPH_LINES_INDIVIDUAL" since="24" />
+	</class>
+	<class name="android/text/Html$ImageGetter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getDrawable(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" />
+	</class>
+	<class name="android/text/Html$TagHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="handleTag(ZLjava/lang/String;Landroid/text/Editable;Lorg/xml/sax/XMLReader;)V" />
+	</class>
+	<class name="android/text/InputFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;" />
+	</class>
+	<class name="android/text/InputFilter$AllCaps" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/InputFilter" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" since="27" />
+	</class>
+	<class name="android/text/InputFilter$LengthFilter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/InputFilter" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getMax()I" since="21" />
+	</class>
+	<class name="android/text/InputType" since="3">
+		<extends name="java/lang/Object" />
+		<field name="TYPE_CLASS_DATETIME" />
+		<field name="TYPE_CLASS_NUMBER" />
+		<field name="TYPE_CLASS_PHONE" />
+		<field name="TYPE_CLASS_TEXT" />
+		<field name="TYPE_DATETIME_VARIATION_DATE" />
+		<field name="TYPE_DATETIME_VARIATION_NORMAL" />
+		<field name="TYPE_DATETIME_VARIATION_TIME" />
+		<field name="TYPE_MASK_CLASS" />
+		<field name="TYPE_MASK_FLAGS" />
+		<field name="TYPE_MASK_VARIATION" />
+		<field name="TYPE_NULL" />
+		<field name="TYPE_NUMBER_FLAG_DECIMAL" />
+		<field name="TYPE_NUMBER_FLAG_SIGNED" />
+		<field name="TYPE_NUMBER_VARIATION_NORMAL" since="11" />
+		<field name="TYPE_NUMBER_VARIATION_PASSWORD" since="11" />
+		<field name="TYPE_TEXT_FLAG_AUTO_COMPLETE" />
+		<field name="TYPE_TEXT_FLAG_AUTO_CORRECT" />
+		<field name="TYPE_TEXT_FLAG_CAP_CHARACTERS" />
+		<field name="TYPE_TEXT_FLAG_CAP_SENTENCES" />
+		<field name="TYPE_TEXT_FLAG_CAP_WORDS" />
+		<field name="TYPE_TEXT_FLAG_IME_MULTI_LINE" />
+		<field name="TYPE_TEXT_FLAG_MULTI_LINE" />
+		<field name="TYPE_TEXT_FLAG_NO_SUGGESTIONS" since="5" />
+		<field name="TYPE_TEXT_VARIATION_EMAIL_ADDRESS" />
+		<field name="TYPE_TEXT_VARIATION_EMAIL_SUBJECT" />
+		<field name="TYPE_TEXT_VARIATION_FILTER" />
+		<field name="TYPE_TEXT_VARIATION_LONG_MESSAGE" />
+		<field name="TYPE_TEXT_VARIATION_NORMAL" />
+		<field name="TYPE_TEXT_VARIATION_PASSWORD" />
+		<field name="TYPE_TEXT_VARIATION_PERSON_NAME" />
+		<field name="TYPE_TEXT_VARIATION_PHONETIC" />
+		<field name="TYPE_TEXT_VARIATION_POSTAL_ADDRESS" />
+		<field name="TYPE_TEXT_VARIATION_SHORT_MESSAGE" />
+		<field name="TYPE_TEXT_VARIATION_URI" />
+		<field name="TYPE_TEXT_VARIATION_VISIBLE_PASSWORD" />
+		<field name="TYPE_TEXT_VARIATION_WEB_EDIT_TEXT" />
+		<field name="TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS" since="11" />
+		<field name="TYPE_TEXT_VARIATION_WEB_PASSWORD" since="11" />
+	</class>
+	<class name="android/text/Layout" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FF)V" />
+		<method name="draw(Landroid/graphics/Canvas;)V" />
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V" />
+		<method name="getAlignment()Landroid/text/Layout$Alignment;" />
+		<method name="getBottomPadding()I" />
+		<method name="getCursorPath(ILandroid/graphics/Path;Ljava/lang/CharSequence;)V" />
+		<method name="getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;)F" />
+		<method name="getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F" />
+		<method name="getEllipsisCount(I)I" />
+		<method name="getEllipsisStart(I)I" />
+		<method name="getEllipsizedWidth()I" />
+		<method name="getHeight()I" />
+		<method name="getLineAscent(I)I" />
+		<method name="getLineBaseline(I)I" />
+		<method name="getLineBottom(I)I" />
+		<method name="getLineBounds(ILandroid/graphics/Rect;)I" />
+		<method name="getLineContainsTab(I)Z" />
+		<method name="getLineCount()I" />
+		<method name="getLineDescent(I)I" />
+		<method name="getLineDirections(I)Landroid/text/Layout$Directions;" />
+		<method name="getLineEnd(I)I" />
+		<method name="getLineForOffset(I)I" />
+		<method name="getLineForVertical(I)I" />
+		<method name="getLineLeft(I)F" />
+		<method name="getLineMax(I)F" />
+		<method name="getLineRight(I)F" />
+		<method name="getLineStart(I)I" />
+		<method name="getLineTop(I)I" />
+		<method name="getLineVisibleEnd(I)I" />
+		<method name="getLineWidth(I)F" />
+		<method name="getOffsetForHorizontal(IF)I" />
+		<method name="getOffsetToLeftOf(I)I" />
+		<method name="getOffsetToRightOf(I)I" />
+		<method name="getPaint()Landroid/text/TextPaint;" />
+		<method name="getParagraphAlignment(I)Landroid/text/Layout$Alignment;" />
+		<method name="getParagraphDirection(I)I" />
+		<method name="getParagraphLeft(I)I" />
+		<method name="getParagraphRight(I)I" />
+		<method name="getPrimaryHorizontal(I)F" />
+		<method name="getSecondaryHorizontal(I)F" />
+		<method name="getSelectionPath(IILandroid/graphics/Path;)V" />
+		<method name="getSpacingAdd()F" />
+		<method name="getSpacingMultiplier()F" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTopPadding()I" />
+		<method name="getWidth()I" />
+		<method name="increaseWidthTo(I)V" />
+		<method name="isRtlCharAt(I)Z" since="14" />
+		<method name="isSpanned()Z" />
+		<field name="BREAK_STRATEGY_BALANCED" since="23" />
+		<field name="BREAK_STRATEGY_HIGH_QUALITY" since="23" />
+		<field name="BREAK_STRATEGY_SIMPLE" since="23" />
+		<field name="DEFAULT_LINESPACING_ADDITION" since="28" />
+		<field name="DEFAULT_LINESPACING_MULTIPLIER" since="28" />
+		<field name="DIR_LEFT_TO_RIGHT" />
+		<field name="DIR_RIGHT_TO_LEFT" />
+		<field name="HYPHENATION_FREQUENCY_FULL" since="23" />
+		<field name="HYPHENATION_FREQUENCY_NONE" since="23" />
+		<field name="HYPHENATION_FREQUENCY_NORMAL" since="23" />
+		<field name="JUSTIFICATION_MODE_INTER_WORD" since="26" />
+		<field name="JUSTIFICATION_MODE_NONE" since="26" />
+	</class>
+	<class name="android/text/Layout$Alignment" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/text/Layout$Alignment;" />
+		<method name="values()[Landroid/text/Layout$Alignment;" />
+		<field name="ALIGN_CENTER" />
+		<field name="ALIGN_LEFT" since="28" removed="29" />
+		<field name="ALIGN_NORMAL" />
+		<field name="ALIGN_OPPOSITE" />
+		<field name="ALIGN_RIGHT" since="28" removed="29" />
+	</class>
+	<class name="android/text/Layout$Directions" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/text/LoginFilter" since="1" deprecated="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/InputFilter" />
+		<method name="isAllowed(C)Z" deprecated="30" />
+		<method name="onInvalidCharacter(C)V" deprecated="30" />
+		<method name="onStart()V" deprecated="30" />
+		<method name="onStop()V" deprecated="30" />
+	</class>
+	<class name="android/text/LoginFilter$PasswordFilterGMail" since="1" deprecated="30">
+		<extends name="android/text/LoginFilter" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="&lt;init&gt;(Z)V" deprecated="30" />
+	</class>
+	<class name="android/text/LoginFilter$UsernameFilterGMail" since="1" deprecated="30">
+		<extends name="android/text/LoginFilter" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="&lt;init&gt;(Z)V" deprecated="30" />
+	</class>
+	<class name="android/text/LoginFilter$UsernameFilterGeneric" since="1" deprecated="30">
+		<extends name="android/text/LoginFilter" />
+		<method name="&lt;init&gt;()V" deprecated="30" />
+		<method name="&lt;init&gt;(Z)V" deprecated="30" />
+	</class>
+	<class name="android/text/NoCopySpan" since="3">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/text/NoCopySpan$Concrete" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/NoCopySpan" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/text/ParcelableSpan" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getSpanTypeId()I" />
+	</class>
+	<class name="android/text/PrecomputedText" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/Spannable" />
+		<method name="create(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;)Landroid/text/PrecomputedText;" />
+		<method name="getBounds(IILandroid/graphics/Rect;)V" />
+		<method name="getParagraphCount()I" />
+		<method name="getParagraphEnd(I)I" />
+		<method name="getParagraphStart(I)I" />
+		<method name="getParams()Landroid/text/PrecomputedText$Params;" />
+		<method name="getWidth(II)F" />
+	</class>
+	<class name="android/text/PrecomputedText$Params" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getBreakStrategy()I" />
+		<method name="getHyphenationFrequency()I" />
+		<method name="getTextDirection()Landroid/text/TextDirectionHeuristic;" />
+		<method name="getTextPaint()Landroid/text/TextPaint;" />
+	</class>
+	<class name="android/text/PrecomputedText$Params$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/text/PrecomputedText$Params;)V" since="29" />
+		<method name="&lt;init&gt;(Landroid/text/TextPaint;)V" />
+		<method name="build()Landroid/text/PrecomputedText$Params;" />
+		<method name="setBreakStrategy(I)Landroid/text/PrecomputedText$Params$Builder;" />
+		<method name="setHyphenationFrequency(I)Landroid/text/PrecomputedText$Params$Builder;" />
+		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/PrecomputedText$Params$Builder;" />
+	</class>
+	<class name="android/text/Selection" since="1">
+		<extends name="java/lang/Object" />
+		<method name="extendDown(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="extendLeft(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="extendRight(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="extendSelection(Landroid/text/Spannable;I)V" />
+		<method name="extendToLeftEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="extendToRightEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="extendUp(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="getSelectionEnd(Ljava/lang/CharSequence;)I" />
+		<method name="getSelectionStart(Ljava/lang/CharSequence;)I" />
+		<method name="moveDown(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="moveLeft(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="moveRight(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="moveToLeftEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="moveToRightEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="moveUp(Landroid/text/Spannable;Landroid/text/Layout;)Z" />
+		<method name="removeSelection(Landroid/text/Spannable;)V" />
+		<method name="selectAll(Landroid/text/Spannable;)V" />
+		<method name="setSelection(Landroid/text/Spannable;I)V" />
+		<method name="setSelection(Landroid/text/Spannable;II)V" />
+		<field name="SELECTION_END" />
+		<field name="SELECTION_START" />
+	</class>
+	<class name="android/text/SpanWatcher" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/NoCopySpan" since="3" />
+		<method name="onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V" />
+		<method name="onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V" />
+		<method name="onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V" />
+	</class>
+	<class name="android/text/Spannable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/Spanned" />
+		<method name="removeSpan(Ljava/lang/Object;)V" />
+		<method name="setSpan(Ljava/lang/Object;III)V" />
+	</class>
+	<class name="android/text/Spannable$Factory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance()Landroid/text/Spannable$Factory;" />
+		<method name="newSpannable(Ljava/lang/CharSequence;)Landroid/text/Spannable;" />
+	</class>
+	<class name="android/text/SpannableString" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/GetChars" />
+		<implements name="android/text/Spannable" />
+		<implements name="java/lang/CharSequence" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;" />
+	</class>
+	<class name="android/text/SpannableStringBuilder" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/Editable" />
+		<implements name="android/text/GetChars" />
+		<implements name="android/text/Spannable" />
+		<implements name="java/lang/Appendable" />
+		<implements name="java/lang/CharSequence" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;II)V" />
+		<method name="append(C)Landroid/text/SpannableStringBuilder;" />
+		<method name="append(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;" />
+		<method name="append(Ljava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;" />
+		<method name="append(Ljava/lang/CharSequence;Ljava/lang/Object;I)Landroid/text/SpannableStringBuilder;" since="21" />
+		<method name="delete(II)Landroid/text/SpannableStringBuilder;" />
+		<method name="getTextRunCursor(IIIIILandroid/graphics/Paint;)I" since="11" deprecated="15" />
+		<method name="getTextWatcherDepth()I" since="23" />
+		<method name="insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;" />
+		<method name="insert(ILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;" />
+		<method name="replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;" />
+		<method name="replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;" />
+		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;" />
+	</class>
+	<class name="android/text/Spanned" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/CharSequence" />
+		<method name="getSpanEnd(Ljava/lang/Object;)I" />
+		<method name="getSpanFlags(Ljava/lang/Object;)I" />
+		<method name="getSpanStart(Ljava/lang/Object;)I" />
+		<method name="getSpans(IILjava/lang/Class;)[Ljava/lang/Object;" />
+		<method name="nextSpanTransition(IILjava/lang/Class;)I" />
+		<field name="SPAN_COMPOSING" since="3" />
+		<field name="SPAN_EXCLUSIVE_EXCLUSIVE" />
+		<field name="SPAN_EXCLUSIVE_INCLUSIVE" />
+		<field name="SPAN_INCLUSIVE_EXCLUSIVE" />
+		<field name="SPAN_INCLUSIVE_INCLUSIVE" />
+		<field name="SPAN_INTERMEDIATE" since="3" />
+		<field name="SPAN_MARK_MARK" />
+		<field name="SPAN_MARK_POINT" />
+		<field name="SPAN_PARAGRAPH" />
+		<field name="SPAN_POINT_MARK" />
+		<field name="SPAN_POINT_MARK_MASK" since="3" />
+		<field name="SPAN_POINT_POINT" />
+		<field name="SPAN_PRIORITY" />
+		<field name="SPAN_PRIORITY_SHIFT" />
+		<field name="SPAN_USER" />
+		<field name="SPAN_USER_SHIFT" />
+	</class>
+	<class name="android/text/SpannedString" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/GetChars" />
+		<implements name="android/text/Spanned" />
+		<implements name="java/lang/CharSequence" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannedString;" />
+	</class>
+	<class name="android/text/StaticLayout" since="1">
+		<extends name="android/text/Layout" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZLandroid/text/TextUtils$TruncateAt;I)V" deprecated="28" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28" />
+	</class>
+	<class name="android/text/StaticLayout$Builder" since="23">
+		<extends name="java/lang/Object" />
+		<method name="build()Landroid/text/StaticLayout;" />
+		<method name="obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;" />
+		<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/StaticLayout$Builder;" />
+		<method name="setBreakStrategy(I)Landroid/text/StaticLayout$Builder;" />
+		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/StaticLayout$Builder;" />
+		<method name="setEllipsizedWidth(I)Landroid/text/StaticLayout$Builder;" />
+		<method name="setHyphenationFrequency(I)Landroid/text/StaticLayout$Builder;" />
+		<method name="setIncludePad(Z)Landroid/text/StaticLayout$Builder;" />
+		<method name="setIndents([I[I)Landroid/text/StaticLayout$Builder;" />
+		<method name="setJustificationMode(I)Landroid/text/StaticLayout$Builder;" since="26" />
+		<method name="setLineSpacing(FF)Landroid/text/StaticLayout$Builder;" />
+		<method name="setMaxLines(I)Landroid/text/StaticLayout$Builder;" />
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/text/StaticLayout$Builder;" />
+		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/StaticLayout$Builder;" />
+		<method name="setUseLineSpacingFromFallbacks(Z)Landroid/text/StaticLayout$Builder;" since="28" />
+	</class>
+	<class name="android/text/TextDirectionHeuristic" since="18">
+		<extends name="java/lang/Object" />
+		<method name="isRtl(Ljava/lang/CharSequence;II)Z" />
+		<method name="isRtl([CII)Z" />
+	</class>
+	<class name="android/text/TextDirectionHeuristics" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="ANYRTL_LTR" />
+		<field name="FIRSTSTRONG_LTR" />
+		<field name="FIRSTSTRONG_RTL" />
+		<field name="LOCALE" />
+		<field name="LTR" />
+		<field name="RTL" />
+	</class>
+	<class name="android/text/TextPaint" since="1">
+		<extends name="android/graphics/Paint" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Paint;)V" />
+		<method name="set(Landroid/text/TextPaint;)V" />
+		<field name="baselineShift" />
+		<field name="bgColor" />
+		<field name="density" since="5" />
+		<field name="drawableState" />
+		<field name="linkColor" />
+		<field name="underlineColor" since="29" />
+		<field name="underlineThickness" since="29" />
+	</class>
+	<class name="android/text/TextShaper" since="31">
+		<extends name="java/lang/Object" />
+		<method name="shapeText(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/TextPaint;Landroid/text/TextShaper$GlyphsConsumer;)V" />
+	</class>
+	<class name="android/text/TextShaper$GlyphsConsumer" since="31">
+		<extends name="java/lang/Object" />
+		<method name="accept(IILandroid/graphics/text/PositionedGlyphs;Landroid/text/TextPaint;)V" />
+	</class>
+	<class name="android/text/TextUtils" since="1">
+		<extends name="java/lang/Object" />
+		<method name="commaEllipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLjava/lang/String;Ljava/lang/String;)Ljava/lang/CharSequence;" deprecated="26" />
+		<method name="concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V" />
+		<method name="dumpSpans(Ljava/lang/CharSequence;Landroid/util/Printer;Ljava/lang/String;)V" since="3" />
+		<method name="ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;)Ljava/lang/CharSequence;" />
+		<method name="ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;ZLandroid/text/TextUtils$EllipsizeCallback;)Ljava/lang/CharSequence;" />
+		<method name="equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z" />
+		<method name="expandTemplate(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="getCapsMode(Ljava/lang/CharSequence;II)I" since="3" />
+		<method name="getChars(Ljava/lang/CharSequence;II[CI)V" />
+		<method name="getLayoutDirectionFromLocale(Ljava/util/Locale;)I" since="17" />
+		<method name="getOffsetAfter(Ljava/lang/CharSequence;I)I" />
+		<method name="getOffsetBefore(Ljava/lang/CharSequence;I)I" />
+		<method name="getReverse(Ljava/lang/CharSequence;II)Ljava/lang/CharSequence;" deprecated="24" />
+		<method name="getTrimmedLength(Ljava/lang/CharSequence;)I" />
+		<method name="htmlEncode(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="indexOf(Ljava/lang/CharSequence;C)I" />
+		<method name="indexOf(Ljava/lang/CharSequence;CI)I" />
+		<method name="indexOf(Ljava/lang/CharSequence;CII)I" />
+		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I" />
+		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;I)I" />
+		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;II)I" />
+		<method name="isDigitsOnly(Ljava/lang/CharSequence;)Z" />
+		<method name="isEmpty(Ljava/lang/CharSequence;)Z" />
+		<method name="isGraphic(C)Z" deprecated="24" />
+		<method name="isGraphic(Ljava/lang/CharSequence;)Z" />
+		<method name="join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;" />
+		<method name="join(Ljava/lang/CharSequence;[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="lastIndexOf(Ljava/lang/CharSequence;C)I" />
+		<method name="lastIndexOf(Ljava/lang/CharSequence;CI)I" />
+		<method name="lastIndexOf(Ljava/lang/CharSequence;CII)I" />
+		<method name="listEllipsize(Landroid/content/Context;Ljava/util/List;Ljava/lang/String;Landroid/text/TextPaint;FI)Ljava/lang/CharSequence;" since="26" />
+		<method name="makeSafeForPresentation(Ljava/lang/String;IFI)Ljava/lang/CharSequence;" since="29" />
+		<method name="regionMatches(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z" />
+		<method name="replace(Ljava/lang/CharSequence;[Ljava/lang/String;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="split(Ljava/lang/String;Ljava/util/regex/Pattern;)[Ljava/lang/String;" />
+		<method name="stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="substring(Ljava/lang/CharSequence;II)Ljava/lang/String;" />
+		<method name="writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V" />
+		<field name="CAP_MODE_CHARACTERS" since="3" />
+		<field name="CAP_MODE_SENTENCES" since="3" />
+		<field name="CAP_MODE_WORDS" since="3" />
+		<field name="CHAR_SEQUENCE_CREATOR" />
+		<field name="SAFE_STRING_FLAG_FIRST_LINE" since="29" />
+		<field name="SAFE_STRING_FLAG_SINGLE_LINE" since="29" />
+		<field name="SAFE_STRING_FLAG_TRIM" since="29" />
+	</class>
+	<class name="android/text/TextUtils$EllipsizeCallback" since="1">
+		<extends name="java/lang/Object" />
+		<method name="ellipsized(II)V" />
+	</class>
+	<class name="android/text/TextUtils$SimpleStringSplitter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/TextUtils$StringSplitter" />
+		<implements name="java/util/Iterator" />
+		<method name="&lt;init&gt;(C)V" />
+		<method name="next()Ljava/lang/String;" />
+	</class>
+	<class name="android/text/TextUtils$StringSplitter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Iterable" />
+		<method name="setString(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/text/TextUtils$TruncateAt" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/text/TextUtils$TruncateAt;" />
+		<method name="values()[Landroid/text/TextUtils$TruncateAt;" />
+		<field name="END" />
+		<field name="END_SMALL" since="28" removed="29" />
+		<field name="MARQUEE" since="2" />
+		<field name="MIDDLE" />
+		<field name="START" />
+	</class>
+	<class name="android/text/TextWatcher" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/NoCopySpan" since="3" />
+		<method name="afterTextChanged(Landroid/text/Editable;)V" />
+		<method name="beforeTextChanged(Ljava/lang/CharSequence;III)V" />
+		<method name="onTextChanged(Ljava/lang/CharSequence;III)V" />
+	</class>
+	<class name="android/text/format/DateFormat" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="format(Ljava/lang/CharSequence;J)Ljava/lang/CharSequence;" />
+		<method name="format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;" />
+		<method name="format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;" />
+		<method name="getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;" since="18" />
+		<method name="getDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;" />
+		<method name="getDateFormatOrder(Landroid/content/Context;)[C" />
+		<method name="getLongDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;" />
+		<method name="getMediumDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;" />
+		<method name="getTimeFormat(Landroid/content/Context;)Ljava/text/DateFormat;" />
+		<method name="is24HourFormat(Landroid/content/Context;)Z" />
+		<field name="AM_PM" deprecated="18" removed="22" />
+		<field name="CAPITAL_AM_PM" deprecated="18" removed="22" />
+		<field name="DATE" deprecated="18" removed="22" />
+		<field name="DAY" deprecated="18" removed="22" />
+		<field name="HOUR" deprecated="18" removed="22" />
+		<field name="HOUR_OF_DAY" deprecated="18" removed="22" />
+		<field name="MINUTE" deprecated="18" removed="22" />
+		<field name="MONTH" deprecated="18" removed="22" />
+		<field name="QUOTE" deprecated="18" removed="22" />
+		<field name="SECONDS" deprecated="18" removed="22" />
+		<field name="STANDALONE_MONTH" since="17" deprecated="18" removed="22" />
+		<field name="TIME_ZONE" deprecated="18" removed="22" />
+		<field name="YEAR" deprecated="18" removed="22" />
+	</class>
+	<class name="android/text/format/DateUtils" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;" />
+		<method name="formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJI)Ljava/util/Formatter;" since="5" />
+		<method name="formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;" since="9" />
+		<method name="formatDateTime(Landroid/content/Context;JI)Ljava/lang/String;" />
+		<method name="formatElapsedTime(J)Ljava/lang/String;" />
+		<method name="formatElapsedTime(Ljava/lang/StringBuilder;J)Ljava/lang/String;" />
+		<method name="formatSameDayTime(JJII)Ljava/lang/CharSequence;" />
+		<method name="getAMPMString(I)Ljava/lang/String;" deprecated="17" />
+		<method name="getDayOfWeekString(II)Ljava/lang/String;" deprecated="17" />
+		<method name="getMonthString(II)Ljava/lang/String;" deprecated="17" />
+		<method name="getRelativeDateTimeString(Landroid/content/Context;JJJI)Ljava/lang/CharSequence;" />
+		<method name="getRelativeTimeSpanString(J)Ljava/lang/CharSequence;" />
+		<method name="getRelativeTimeSpanString(JJJ)Ljava/lang/CharSequence;" />
+		<method name="getRelativeTimeSpanString(JJJI)Ljava/lang/CharSequence;" />
+		<method name="getRelativeTimeSpanString(Landroid/content/Context;J)Ljava/lang/CharSequence;" />
+		<method name="getRelativeTimeSpanString(Landroid/content/Context;JZ)Ljava/lang/CharSequence;" />
+		<method name="isToday(J)Z" />
+		<field name="ABBREV_MONTH_FORMAT" deprecated="17" />
+		<field name="ABBREV_WEEKDAY_FORMAT" />
+		<field name="DAY_IN_MILLIS" />
+		<field name="FORMAT_12HOUR" deprecated="17" />
+		<field name="FORMAT_24HOUR" deprecated="17" />
+		<field name="FORMAT_ABBREV_ALL" />
+		<field name="FORMAT_ABBREV_MONTH" />
+		<field name="FORMAT_ABBREV_RELATIVE" />
+		<field name="FORMAT_ABBREV_TIME" />
+		<field name="FORMAT_ABBREV_WEEKDAY" />
+		<field name="FORMAT_CAP_AMPM" deprecated="17" />
+		<field name="FORMAT_CAP_MIDNIGHT" deprecated="17" />
+		<field name="FORMAT_CAP_NOON" deprecated="17" />
+		<field name="FORMAT_CAP_NOON_MIDNIGHT" deprecated="17" />
+		<field name="FORMAT_NO_MIDNIGHT" />
+		<field name="FORMAT_NO_MONTH_DAY" />
+		<field name="FORMAT_NO_NOON" />
+		<field name="FORMAT_NO_NOON_MIDNIGHT" deprecated="17" />
+		<field name="FORMAT_NO_YEAR" />
+		<field name="FORMAT_NUMERIC_DATE" />
+		<field name="FORMAT_SHOW_DATE" />
+		<field name="FORMAT_SHOW_TIME" />
+		<field name="FORMAT_SHOW_WEEKDAY" />
+		<field name="FORMAT_SHOW_YEAR" />
+		<field name="FORMAT_UTC" deprecated="15" />
+		<field name="HOUR_IN_MILLIS" />
+		<field name="HOUR_MINUTE_24" deprecated="17" />
+		<field name="LENGTH_LONG" deprecated="17" />
+		<field name="LENGTH_MEDIUM" deprecated="17" />
+		<field name="LENGTH_SHORT" deprecated="17" />
+		<field name="LENGTH_SHORTER" deprecated="17" />
+		<field name="LENGTH_SHORTEST" deprecated="17" />
+		<field name="MINUTE_IN_MILLIS" />
+		<field name="MONTH_DAY_FORMAT" />
+		<field name="MONTH_FORMAT" />
+		<field name="NUMERIC_MONTH_FORMAT" />
+		<field name="SECOND_IN_MILLIS" />
+		<field name="WEEKDAY_FORMAT" />
+		<field name="WEEK_IN_MILLIS" />
+		<field name="YEAR_FORMAT" />
+		<field name="YEAR_FORMAT_TWO_DIGITS" />
+		<field name="YEAR_IN_MILLIS" deprecated="30" />
+		<field name="sameMonthTable" deprecated="17" />
+		<field name="sameYearTable" deprecated="17" />
+	</class>
+	<class name="android/text/format/Formatter" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="formatFileSize(Landroid/content/Context;J)Ljava/lang/String;" />
+		<method name="formatIpAddress(I)Ljava/lang/String;" deprecated="15" />
+		<method name="formatShortFileSize(Landroid/content/Context;J)Ljava/lang/String;" since="5" />
+	</class>
+	<class name="android/text/format/Time" since="3" deprecated="22">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/text/format/Time;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+		<method name="after(Landroid/text/format/Time;)Z" deprecated="29" />
+		<method name="before(Landroid/text/format/Time;)Z" deprecated="29" />
+		<method name="clear(Ljava/lang/String;)V" deprecated="29" />
+		<method name="compare(Landroid/text/format/Time;Landroid/text/format/Time;)I" deprecated="29" />
+		<method name="format(Ljava/lang/String;)Ljava/lang/String;" deprecated="29" />
+		<method name="format2445()Ljava/lang/String;" deprecated="29" />
+		<method name="format3339(Z)Ljava/lang/String;" deprecated="29" />
+		<method name="getActualMaximum(I)I" deprecated="29" />
+		<method name="getCurrentTimezone()Ljava/lang/String;" deprecated="29" />
+		<method name="getJulianDay(JJ)I" deprecated="29" />
+		<method name="getJulianMondayFromWeeksSinceEpoch(I)I" since="11" deprecated="29" />
+		<method name="getWeekNumber()I" deprecated="29" />
+		<method name="getWeeksSinceEpochFromJulianDay(II)I" since="11" deprecated="29" />
+		<method name="isEpoch(Landroid/text/format/Time;)Z" deprecated="29" />
+		<method name="normalize(Z)J" deprecated="29" />
+		<method name="parse(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="parse3339(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="set(III)V" deprecated="29" />
+		<method name="set(IIIIII)V" deprecated="29" />
+		<method name="set(J)V" deprecated="29" />
+		<method name="set(Landroid/text/format/Time;)V" deprecated="29" />
+		<method name="setJulianDay(I)J" deprecated="29" />
+		<method name="setToNow()V" deprecated="29" />
+		<method name="switchTimezone(Ljava/lang/String;)V" deprecated="29" />
+		<method name="toMillis(Z)J" deprecated="29" />
+		<field name="EPOCH_JULIAN_DAY" deprecated="29" />
+		<field name="FRIDAY" deprecated="29" />
+		<field name="HOUR" deprecated="29" />
+		<field name="MINUTE" deprecated="29" />
+		<field name="MONDAY" deprecated="29" />
+		<field name="MONDAY_BEFORE_JULIAN_EPOCH" since="11" deprecated="29" />
+		<field name="MONTH" deprecated="29" />
+		<field name="MONTH_DAY" deprecated="29" />
+		<field name="SATURDAY" deprecated="29" />
+		<field name="SECOND" deprecated="29" />
+		<field name="SUNDAY" deprecated="29" />
+		<field name="THURSDAY" deprecated="29" />
+		<field name="TIMEZONE_UTC" deprecated="29" />
+		<field name="TUESDAY" deprecated="29" />
+		<field name="WEDNESDAY" deprecated="29" />
+		<field name="WEEK_DAY" deprecated="29" />
+		<field name="WEEK_NUM" deprecated="29" />
+		<field name="YEAR" deprecated="29" />
+		<field name="YEAR_DAY" deprecated="29" />
+		<field name="allDay" deprecated="29" />
+		<field name="gmtoff" deprecated="29" />
+		<field name="hour" deprecated="29" />
+		<field name="isDst" deprecated="29" />
+		<field name="minute" deprecated="29" />
+		<field name="month" deprecated="29" />
+		<field name="monthDay" deprecated="29" />
+		<field name="second" deprecated="29" />
+		<field name="timezone" deprecated="29" />
+		<field name="weekDay" deprecated="29" />
+		<field name="year" deprecated="29" />
+		<field name="yearDay" deprecated="29" />
+	</class>
+	<class name="android/text/method/ArrowKeyMovementMethod" since="1">
+		<extends name="android/text/method/BaseMovementMethod" since="11" />
+		<extends name="java/lang/Object" removed="11" />
+		<implements name="android/text/method/MovementMethod" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance()Landroid/text/method/MovementMethod;" />
+	</class>
+	<class name="android/text/method/BaseKeyListener" since="1">
+		<extends name="android/text/method/MetaKeyKeyListener" />
+		<implements name="android/text/method/KeyListener" />
+		<method name="&lt;init&gt;()V" />
+		<method name="backspace(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" />
+		<method name="forwardDelete(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" since="11" />
+	</class>
+	<class name="android/text/method/BaseMovementMethod" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/method/MovementMethod" />
+		<method name="&lt;init&gt;()V" />
+		<method name="bottom(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="down(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="end(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="getMovementMetaState(Landroid/text/Spannable;Landroid/view/KeyEvent;)I" />
+		<method name="handleMovementKey(Landroid/widget/TextView;Landroid/text/Spannable;IILandroid/view/KeyEvent;)Z" />
+		<method name="home(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="left(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="lineEnd(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="lineStart(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="pageDown(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="pageUp(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="right(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="top(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="up(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+	</class>
+	<class name="android/text/method/CharacterPickerDialog" since="1">
+		<extends name="android/app/Dialog" />
+		<implements name="android/view/View$OnClickListener" />
+		<implements name="android/widget/AdapterView$OnItemClickListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/View;Landroid/text/Editable;Ljava/lang/String;Z)V" />
+	</class>
+	<class name="android/text/method/DateKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener" />
+		<method name="&lt;init&gt;()V" deprecated="26" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" since="26" />
+		<method name="getInstance()Landroid/text/method/DateKeyListener;" deprecated="26" />
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DateKeyListener;" since="26" />
+		<field name="CHARACTERS" deprecated="26" />
+	</class>
+	<class name="android/text/method/DateTimeKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener" />
+		<method name="&lt;init&gt;()V" deprecated="26" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" since="26" />
+		<method name="getInstance()Landroid/text/method/DateTimeKeyListener;" deprecated="26" />
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DateTimeKeyListener;" since="26" />
+		<field name="CHARACTERS" deprecated="26" />
+	</class>
+	<class name="android/text/method/DialerKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance()Landroid/text/method/DialerKeyListener;" />
+		<field name="CHARACTERS" />
+	</class>
+	<class name="android/text/method/DigitsKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener" />
+		<method name="&lt;init&gt;()V" deprecated="26" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" since="26" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;ZZ)V" since="26" />
+		<method name="&lt;init&gt;(ZZ)V" deprecated="26" />
+		<method name="getInstance()Landroid/text/method/DigitsKeyListener;" deprecated="26" />
+		<method name="getInstance(Ljava/lang/String;)Landroid/text/method/DigitsKeyListener;" />
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DigitsKeyListener;" since="26" />
+		<method name="getInstance(Ljava/util/Locale;ZZ)Landroid/text/method/DigitsKeyListener;" since="26" />
+		<method name="getInstance(ZZ)Landroid/text/method/DigitsKeyListener;" deprecated="26" />
+	</class>
+	<class name="android/text/method/HideReturnsTransformationMethod" since="1">
+		<extends name="android/text/method/ReplacementTransformationMethod" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance()Landroid/text/method/HideReturnsTransformationMethod;" />
+	</class>
+	<class name="android/text/method/KeyListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="clearMetaKeyState(Landroid/view/View;Landroid/text/Editable;I)V" since="3" />
+		<method name="getInputType()I" since="3" />
+		<method name="onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" />
+		<method name="onKeyOther(Landroid/view/View;Landroid/text/Editable;Landroid/view/KeyEvent;)Z" since="3" />
+		<method name="onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" />
+	</class>
+	<class name="android/text/method/LinkMovementMethod" since="1">
+		<extends name="android/text/method/ScrollingMovementMethod" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/text/method/MetaKeyKeyListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="adjustMetaAfterKeypress(J)J" since="3" />
+		<method name="adjustMetaAfterKeypress(Landroid/text/Spannable;)V" />
+		<method name="clearMetaKeyState(JI)J" since="3" />
+		<method name="clearMetaKeyState(Landroid/text/Editable;I)V" since="3" />
+		<method name="clearMetaKeyState(Landroid/view/View;Landroid/text/Editable;I)V" since="3" />
+		<method name="getMetaState(J)I" since="3" />
+		<method name="getMetaState(JI)I" since="3" />
+		<method name="getMetaState(Ljava/lang/CharSequence;)I" />
+		<method name="getMetaState(Ljava/lang/CharSequence;I)I" />
+		<method name="getMetaState(Ljava/lang/CharSequence;ILandroid/view/KeyEvent;)I" since="19" />
+		<method name="getMetaState(Ljava/lang/CharSequence;Landroid/view/KeyEvent;)I" since="19" />
+		<method name="handleKeyDown(JILandroid/view/KeyEvent;)J" since="3" />
+		<method name="handleKeyUp(JILandroid/view/KeyEvent;)J" since="3" />
+		<method name="isMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z" />
+		<method name="isSelectingMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z" since="3" />
+		<method name="onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" />
+		<method name="onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" />
+		<method name="resetLockedMeta(J)J" since="3" />
+		<method name="resetLockedMeta(Landroid/text/Spannable;)V" />
+		<method name="resetMetaState(Landroid/text/Spannable;)V" />
+		<field name="META_ALT_LOCKED" />
+		<field name="META_ALT_ON" />
+		<field name="META_CAP_LOCKED" />
+		<field name="META_SHIFT_ON" />
+		<field name="META_SYM_LOCKED" />
+		<field name="META_SYM_ON" />
+	</class>
+	<class name="android/text/method/MovementMethod" since="1">
+		<extends name="java/lang/Object" />
+		<method name="canSelectArbitrarily()Z" />
+		<method name="initialize(Landroid/widget/TextView;Landroid/text/Spannable;)V" />
+		<method name="onGenericMotionEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z" since="12" />
+		<method name="onKeyDown(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z" />
+		<method name="onKeyOther(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/KeyEvent;)Z" since="3" />
+		<method name="onKeyUp(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z" />
+		<method name="onTakeFocus(Landroid/widget/TextView;Landroid/text/Spannable;I)V" />
+		<method name="onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z" />
+		<method name="onTrackballEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/text/method/MultiTapKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener" />
+		<implements name="android/text/SpanWatcher" />
+		<method name="&lt;init&gt;(Landroid/text/method/TextKeyListener$Capitalize;Z)V" />
+		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/MultiTapKeyListener;" />
+	</class>
+	<class name="android/text/method/NumberKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener" />
+		<implements name="android/text/InputFilter" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAcceptedChars()[C" />
+		<method name="lookup(Landroid/view/KeyEvent;Landroid/text/Spannable;)I" />
+		<method name="ok([CC)Z" />
+	</class>
+	<class name="android/text/method/PasswordTransformationMethod" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/TextWatcher" />
+		<implements name="android/text/method/TransformationMethod" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance()Landroid/text/method/PasswordTransformationMethod;" />
+	</class>
+	<class name="android/text/method/QwertyKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener" />
+		<method name="&lt;init&gt;(Landroid/text/method/TextKeyListener$Capitalize;Z)V" />
+		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/QwertyKeyListener;" />
+		<method name="getInstanceForFullKeyboard()Landroid/text/method/QwertyKeyListener;" since="11" />
+		<method name="markAsReplaced(Landroid/text/Spannable;IILjava/lang/String;)V" />
+	</class>
+	<class name="android/text/method/ReplacementTransformationMethod" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/method/TransformationMethod" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getOriginal()[C" />
+		<method name="getReplacement()[C" />
+	</class>
+	<class name="android/text/method/ScrollingMovementMethod" since="1">
+		<extends name="android/text/method/BaseMovementMethod" since="11" />
+		<extends name="java/lang/Object" removed="11" />
+		<implements name="android/text/method/MovementMethod" />
+		<method name="&lt;init&gt;()V" />
+		<method name="down(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="getInstance()Landroid/text/method/MovementMethod;" />
+		<method name="left(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="right(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+		<method name="up(Landroid/widget/TextView;Landroid/text/Spannable;)Z" />
+	</class>
+	<class name="android/text/method/SingleLineTransformationMethod" since="1">
+		<extends name="android/text/method/ReplacementTransformationMethod" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance()Landroid/text/method/SingleLineTransformationMethod;" />
+	</class>
+	<class name="android/text/method/TextKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener" />
+		<implements name="android/text/SpanWatcher" />
+		<method name="&lt;init&gt;(Landroid/text/method/TextKeyListener$Capitalize;Z)V" />
+		<method name="clear(Landroid/text/Editable;)V" />
+		<method name="getInstance()Landroid/text/method/TextKeyListener;" />
+		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/TextKeyListener;" />
+		<method name="release()V" />
+		<method name="shouldCap(Landroid/text/method/TextKeyListener$Capitalize;Ljava/lang/CharSequence;I)Z" />
+	</class>
+	<class name="android/text/method/TextKeyListener$Capitalize" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/text/method/TextKeyListener$Capitalize;" />
+		<method name="values()[Landroid/text/method/TextKeyListener$Capitalize;" />
+		<field name="CHARACTERS" />
+		<field name="NONE" />
+		<field name="SENTENCES" />
+		<field name="WORDS" />
+	</class>
+	<class name="android/text/method/TimeKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener" />
+		<method name="&lt;init&gt;()V" deprecated="26" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" since="26" />
+		<method name="getInstance()Landroid/text/method/TimeKeyListener;" deprecated="26" />
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/TimeKeyListener;" since="26" />
+		<field name="CHARACTERS" deprecated="26" />
+	</class>
+	<class name="android/text/method/Touch" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getInitialScrollX(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3" />
+		<method name="getInitialScrollY(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3" />
+		<method name="onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z" />
+		<method name="scrollTo(Landroid/widget/TextView;Landroid/text/Layout;II)V" />
+	</class>
+	<class name="android/text/method/TransformationMethod" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getTransformation(Ljava/lang/CharSequence;Landroid/view/View;)Ljava/lang/CharSequence;" />
+		<method name="onFocusChanged(Landroid/view/View;Ljava/lang/CharSequence;ZILandroid/graphics/Rect;)V" />
+	</class>
+	<class name="android/text/style/AbsoluteSizeSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IZ)V" since="5" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getDip()Z" since="5" />
+		<method name="getSize()I" />
+	</class>
+	<class name="android/text/style/AlignmentSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/ParagraphStyle" />
+		<method name="getAlignment()Landroid/text/Layout$Alignment;" />
+	</class>
+	<class name="android/text/style/AlignmentSpan$Standard" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/AlignmentSpan" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/text/Layout$Alignment;)V" />
+	</class>
+	<class name="android/text/style/BackgroundColorSpan" since="1">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getBackgroundColor()I" />
+	</class>
+	<class name="android/text/style/BulletSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/LeadingMarginSpan" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(III)V" since="28" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getBulletRadius()I" since="28" />
+		<method name="getColor()I" since="28" />
+		<method name="getGapWidth()I" since="28" />
+		<field name="STANDARD_GAP_WIDTH" />
+	</class>
+	<class name="android/text/style/CharacterStyle" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getUnderlying()Landroid/text/style/CharacterStyle;" />
+		<method name="updateDrawState(Landroid/text/TextPaint;)V" />
+		<method name="wrap(Landroid/text/style/CharacterStyle;)Landroid/text/style/CharacterStyle;" />
+	</class>
+	<class name="android/text/style/ClickableSpan" since="1">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onClick(Landroid/view/View;)V" />
+	</class>
+	<class name="android/text/style/DrawableMarginSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/LeadingMarginSpan" />
+		<implements name="android/text/style/LineHeightSpan" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;I)V" />
+	</class>
+	<class name="android/text/style/DynamicDrawableSpan" since="1">
+		<extends name="android/text/style/ReplacementSpan" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" since="3" />
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="getVerticalAlignment()I" since="3" />
+		<field name="ALIGN_BASELINE" since="3" />
+		<field name="ALIGN_BOTTOM" since="3" />
+		<field name="ALIGN_CENTER" since="29" />
+		<field name="mVerticalAlignment" since="3" />
+	</class>
+	<class name="android/text/style/EasyEditSpan" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/app/PendingIntent;)V" since="18" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="18" />
+		<field name="EXTRA_TEXT_CHANGED_TYPE" since="18" />
+		<field name="TEXT_DELETED" since="18" />
+		<field name="TEXT_MODIFIED" since="18" />
+	</class>
+	<class name="android/text/style/ForegroundColorSpan" since="1">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getForegroundColor()I" />
+	</class>
+	<class name="android/text/style/IconMarginSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/LeadingMarginSpan" />
+		<implements name="android/text/style/LineHeightSpan" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;I)V" />
+	</class>
+	<class name="android/text/style/ImageSpan" since="1">
+		<extends name="android/text/style/DynamicDrawableSpan" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;II)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/graphics/Bitmap;)V" since="4" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/graphics/Bitmap;I)V" since="4" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/net/Uri;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/net/Uri;I)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/graphics/Bitmap;I)V" since="3" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;I)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;Ljava/lang/String;I)V" since="3" />
+		<method name="getSource()Ljava/lang/String;" />
+	</class>
+	<class name="android/text/style/LeadingMarginSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/ParagraphStyle" />
+		<method name="drawLeadingMargin(Landroid/graphics/Canvas;Landroid/graphics/Paint;IIIIILjava/lang/CharSequence;IIZLandroid/text/Layout;)V" />
+		<method name="getLeadingMargin(Z)I" />
+	</class>
+	<class name="android/text/style/LeadingMarginSpan$LeadingMarginSpan2" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/LeadingMarginSpan" />
+		<implements name="android/text/style/WrapTogetherSpan" />
+		<method name="getLeadingMarginLineCount()I" />
+	</class>
+	<class name="android/text/style/LeadingMarginSpan$Standard" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/LeadingMarginSpan" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+	</class>
+	<class name="android/text/style/LineBackgroundSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/ParagraphStyle" />
+		<method name="drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Paint;IIIIILjava/lang/CharSequence;III)V" />
+	</class>
+	<class name="android/text/style/LineBackgroundSpan$Standard" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" />
+		<implements name="android/text/style/LineBackgroundSpan" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getColor()I" />
+	</class>
+	<class name="android/text/style/LineHeightSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/ParagraphStyle" />
+		<implements name="android/text/style/WrapTogetherSpan" />
+		<method name="chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V" />
+	</class>
+	<class name="android/text/style/LineHeightSpan$Standard" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" />
+		<implements name="android/text/style/LineHeightSpan" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getHeight()I" />
+	</class>
+	<class name="android/text/style/LineHeightSpan$WithDensity" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/LineHeightSpan" />
+		<method name="chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V" />
+	</class>
+	<class name="android/text/style/LocaleSpan" since="17">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" />
+		<method name="&lt;init&gt;(Landroid/os/LocaleList;)V" since="24" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getLocales()Landroid/os/LocaleList;" since="24" />
+	</class>
+	<class name="android/text/style/MaskFilterSpan" since="1">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+		<method name="&lt;init&gt;(Landroid/graphics/MaskFilter;)V" />
+		<method name="getMaskFilter()Landroid/graphics/MaskFilter;" />
+	</class>
+	<class name="android/text/style/MetricAffectingSpan" since="1">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/style/UpdateLayout" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getUnderlying()Landroid/text/style/MetricAffectingSpan;" />
+		<method name="updateMeasureState(Landroid/text/TextPaint;)V" />
+	</class>
+	<class name="android/text/style/ParagraphStyle" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/text/style/QuoteSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/LeadingMarginSpan" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(III)V" since="28" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getColor()I" />
+		<method name="getGapWidth()I" since="28" />
+		<method name="getStripeWidth()I" since="28" />
+		<field name="STANDARD_COLOR" since="28" />
+		<field name="STANDARD_GAP_WIDTH_PX" since="28" />
+		<field name="STANDARD_STRIPE_WIDTH_PX" since="28" />
+	</class>
+	<class name="android/text/style/RasterizerSpan" since="1" removed="26">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rasterizer;)V" />
+		<method name="getRasterizer()Landroid/graphics/Rasterizer;" />
+	</class>
+	<class name="android/text/style/RelativeSizeSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getSizeChange()F" />
+	</class>
+	<class name="android/text/style/ReplacementSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<method name="&lt;init&gt;()V" />
+		<method name="draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="30" />
+		<method name="getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" since="30" />
+	</class>
+	<class name="android/text/style/ScaleXSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getScaleX()F" />
+	</class>
+	<class name="android/text/style/StrikethroughSpan" since="1">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+	</class>
+	<class name="android/text/style/StyleSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="getStyle()I" />
+	</class>
+	<class name="android/text/style/SubscriptSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+	</class>
+	<class name="android/text/style/SuggestionSpan" since="14">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/ParcelableSpan" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/util/Locale;[Ljava/lang/String;ILjava/lang/Class;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;[Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;[Ljava/lang/String;I)V" />
+		<method name="getFlags()I" />
+		<method name="getLocale()Ljava/lang/String;" deprecated="24" />
+		<method name="getLocaleObject()Ljava/util/Locale;" since="24" />
+		<method name="getSuggestions()[Ljava/lang/String;" />
+		<method name="getUnderlineColor()I" since="29" />
+		<method name="setFlags(I)V" />
+		<field name="ACTION_SUGGESTION_PICKED" deprecated="29" />
+		<field name="CREATOR" />
+		<field name="FLAG_AUTO_CORRECTION" since="15" />
+		<field name="FLAG_EASY_CORRECT" />
+		<field name="FLAG_GRAMMAR_ERROR" since="31" />
+		<field name="FLAG_MISSPELLED" />
+		<field name="SUGGESTIONS_MAX_SIZE" />
+		<field name="SUGGESTION_SPAN_PICKED_AFTER" deprecated="29" />
+		<field name="SUGGESTION_SPAN_PICKED_BEFORE" deprecated="29" />
+		<field name="SUGGESTION_SPAN_PICKED_HASHCODE" deprecated="29" />
+	</class>
+	<class name="android/text/style/SuperscriptSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+	</class>
+	<class name="android/text/style/TabStopSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/ParagraphStyle" />
+		<method name="getTabStop()I" />
+	</class>
+	<class name="android/text/style/TabStopSpan$Standard" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/TabStopSpan" />
+		<method name="&lt;init&gt;(I)V" />
+	</class>
+	<class name="android/text/style/TextAppearanceSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;II)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="&lt;init&gt;(Ljava/lang/String;IILandroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V" />
+		<method name="getFamily()Ljava/lang/String;" />
+		<method name="getFontFeatureSettings()Ljava/lang/String;" since="29" />
+		<method name="getFontVariationSettings()Ljava/lang/String;" since="29" />
+		<method name="getLinkTextColor()Landroid/content/res/ColorStateList;" />
+		<method name="getShadowColor()I" since="29" />
+		<method name="getShadowDx()F" since="29" />
+		<method name="getShadowDy()F" since="29" />
+		<method name="getShadowRadius()F" since="29" />
+		<method name="getTextColor()Landroid/content/res/ColorStateList;" />
+		<method name="getTextFontWeight()I" since="29" />
+		<method name="getTextLocales()Landroid/os/LocaleList;" since="29" />
+		<method name="getTextSize()I" />
+		<method name="getTextStyle()I" />
+		<method name="getTypeface()Landroid/graphics/Typeface;" since="29" />
+		<method name="isElegantTextHeight()Z" since="29" />
+	</class>
+	<class name="android/text/style/TtsSpan" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/ParcelableSpan" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/os/PersistableBundle;)V" />
+		<method name="getArgs()Landroid/os/PersistableBundle;" />
+		<method name="getType()Ljava/lang/String;" />
+		<field name="ANIMACY_ANIMATE" />
+		<field name="ANIMACY_INANIMATE" />
+		<field name="ARG_ANIMACY" />
+		<field name="ARG_CASE" />
+		<field name="ARG_COUNTRY_CODE" />
+		<field name="ARG_CURRENCY" />
+		<field name="ARG_DAY" />
+		<field name="ARG_DENOMINATOR" />
+		<field name="ARG_DIGITS" />
+		<field name="ARG_DOMAIN" />
+		<field name="ARG_EXTENSION" />
+		<field name="ARG_FRACTIONAL_PART" />
+		<field name="ARG_FRAGMENT_ID" />
+		<field name="ARG_GENDER" />
+		<field name="ARG_HOURS" />
+		<field name="ARG_INTEGER_PART" />
+		<field name="ARG_MINUTES" />
+		<field name="ARG_MONTH" />
+		<field name="ARG_MULTIPLICITY" />
+		<field name="ARG_NUMBER" />
+		<field name="ARG_NUMBER_PARTS" />
+		<field name="ARG_NUMERATOR" />
+		<field name="ARG_PASSWORD" />
+		<field name="ARG_PATH" />
+		<field name="ARG_PORT" />
+		<field name="ARG_PROTOCOL" />
+		<field name="ARG_QUANTITY" />
+		<field name="ARG_QUERY_STRING" />
+		<field name="ARG_TEXT" />
+		<field name="ARG_UNIT" />
+		<field name="ARG_USERNAME" />
+		<field name="ARG_VERBATIM" />
+		<field name="ARG_WEEKDAY" />
+		<field name="ARG_YEAR" />
+		<field name="CASE_ABLATIVE" />
+		<field name="CASE_ACCUSATIVE" />
+		<field name="CASE_DATIVE" />
+		<field name="CASE_GENITIVE" />
+		<field name="CASE_INSTRUMENTAL" />
+		<field name="CASE_LOCATIVE" />
+		<field name="CASE_NOMINATIVE" />
+		<field name="CASE_VOCATIVE" />
+		<field name="GENDER_FEMALE" />
+		<field name="GENDER_MALE" />
+		<field name="GENDER_NEUTRAL" />
+		<field name="MONTH_APRIL" />
+		<field name="MONTH_AUGUST" />
+		<field name="MONTH_DECEMBER" />
+		<field name="MONTH_FEBRUARY" />
+		<field name="MONTH_JANUARY" />
+		<field name="MONTH_JULY" />
+		<field name="MONTH_JUNE" />
+		<field name="MONTH_MARCH" />
+		<field name="MONTH_MAY" />
+		<field name="MONTH_NOVEMBER" />
+		<field name="MONTH_OCTOBER" />
+		<field name="MONTH_SEPTEMBER" />
+		<field name="MULTIPLICITY_DUAL" />
+		<field name="MULTIPLICITY_PLURAL" />
+		<field name="MULTIPLICITY_SINGLE" />
+		<field name="TYPE_CARDINAL" />
+		<field name="TYPE_DATE" />
+		<field name="TYPE_DECIMAL" />
+		<field name="TYPE_DIGITS" />
+		<field name="TYPE_ELECTRONIC" />
+		<field name="TYPE_FRACTION" />
+		<field name="TYPE_MEASURE" />
+		<field name="TYPE_MONEY" />
+		<field name="TYPE_ORDINAL" />
+		<field name="TYPE_TELEPHONE" />
+		<field name="TYPE_TEXT" />
+		<field name="TYPE_TIME" />
+		<field name="TYPE_VERBATIM" />
+		<field name="WEEKDAY_FRIDAY" />
+		<field name="WEEKDAY_MONDAY" />
+		<field name="WEEKDAY_SATURDAY" />
+		<field name="WEEKDAY_SUNDAY" />
+		<field name="WEEKDAY_THURSDAY" />
+		<field name="WEEKDAY_TUESDAY" />
+		<field name="WEEKDAY_WEDNESDAY" />
+	</class>
+	<class name="android/text/style/TtsSpan$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="build()Landroid/text/style/TtsSpan;" />
+		<method name="setIntArgument(Ljava/lang/String;I)Landroid/text/style/TtsSpan$Builder;" />
+		<method name="setLongArgument(Ljava/lang/String;J)Landroid/text/style/TtsSpan$Builder;" />
+		<method name="setStringArgument(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$Builder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$CardinalBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="setNumber(J)Landroid/text/style/TtsSpan$CardinalBuilder;" />
+		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$CardinalBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$DateBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)V" />
+		<method name="setDay(I)Landroid/text/style/TtsSpan$DateBuilder;" />
+		<method name="setMonth(I)Landroid/text/style/TtsSpan$DateBuilder;" />
+		<method name="setWeekday(I)Landroid/text/style/TtsSpan$DateBuilder;" />
+		<method name="setYear(I)Landroid/text/style/TtsSpan$DateBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$DecimalBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(DII)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setArgumentsFromDouble(DII)Landroid/text/style/TtsSpan$DecimalBuilder;" />
+		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$DecimalBuilder;" />
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$DecimalBuilder;" />
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$DecimalBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$DigitsBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="setDigits(Ljava/lang/String;)Landroid/text/style/TtsSpan$DigitsBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$ElectronicBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setDomain(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setEmailArguments(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setFragmentId(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setPassword(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setPath(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setPort(I)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setProtocol(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setQueryString(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+		<method name="setUsername(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$FractionBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(JJJ)V" />
+		<method name="setDenominator(J)Landroid/text/style/TtsSpan$FractionBuilder;" />
+		<method name="setDenominator(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;" />
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$FractionBuilder;" />
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;" />
+		<method name="setNumerator(J)Landroid/text/style/TtsSpan$FractionBuilder;" />
+		<method name="setNumerator(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$MeasureBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setDenominator(J)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setDenominator(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setNumber(J)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setNumerator(J)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setNumerator(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+		<method name="setUnit(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$MoneyBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setCurrency(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;" />
+		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;" />
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$MoneyBuilder;" />
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;" />
+		<method name="setQuantity(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$OrdinalBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="setNumber(J)Landroid/text/style/TtsSpan$OrdinalBuilder;" />
+		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$OrdinalBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$SemioticClassBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$Builder" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="setAnimacy(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;" />
+		<method name="setCase(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;" />
+		<method name="setGender(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;" />
+		<method name="setMultiplicity(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$TelephoneBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="setCountryCode(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;" />
+		<method name="setExtension(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;" />
+		<method name="setNumberParts(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$TextBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="setText(Ljava/lang/String;)Landroid/text/style/TtsSpan$TextBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$TimeBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="setHours(I)Landroid/text/style/TtsSpan$TimeBuilder;" />
+		<method name="setMinutes(I)Landroid/text/style/TtsSpan$TimeBuilder;" />
+	</class>
+	<class name="android/text/style/TtsSpan$VerbatimBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="setVerbatim(Ljava/lang/String;)Landroid/text/style/TtsSpan$VerbatimBuilder;" />
+	</class>
+	<class name="android/text/style/TypefaceSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(Landroid/graphics/Typeface;)V" since="28" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getFamily()Ljava/lang/String;" />
+		<method name="getTypeface()Landroid/graphics/Typeface;" since="28" />
+	</class>
+	<class name="android/text/style/URLSpan" since="1">
+		<extends name="android/text/style/ClickableSpan" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getURL()Ljava/lang/String;" />
+	</class>
+	<class name="android/text/style/UnderlineSpan" since="1">
+		<extends name="android/text/style/CharacterStyle" />
+		<implements name="android/text/ParcelableSpan" since="3" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" since="3" />
+	</class>
+	<class name="android/text/style/UpdateAppearance" since="3">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/text/style/UpdateLayout" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/UpdateAppearance" since="3" />
+	</class>
+	<class name="android/text/style/WrapTogetherSpan" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/text/style/ParagraphStyle" />
+	</class>
+	<class name="android/text/util/Linkify" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addLinks(Landroid/text/Spannable;I)Z" />
+		<method name="addLinks(Landroid/text/Spannable;ILjava/util/function/Function;)Z" since="29" />
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;)Z" />
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z" />
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z" since="24" />
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;Ljava/util/function/Function;)Z" since="29" />
+		<method name="addLinks(Landroid/widget/TextView;I)Z" />
+		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;)V" />
+		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V" />
+		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V" since="24" />
+		<field name="ALL" />
+		<field name="EMAIL_ADDRESSES" />
+		<field name="MAP_ADDRESSES" deprecated="28" />
+		<field name="PHONE_NUMBERS" />
+		<field name="WEB_URLS" />
+		<field name="sPhoneNumberMatchFilter" />
+		<field name="sPhoneNumberTransformFilter" />
+		<field name="sUrlMatchFilter" />
+	</class>
+	<class name="android/text/util/Linkify$MatchFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="acceptMatch(Ljava/lang/CharSequence;II)Z" />
+	</class>
+	<class name="android/text/util/Linkify$TransformFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="transformUrl(Ljava/util/regex/Matcher;Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="android/text/util/Rfc822Token" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getAddress()Ljava/lang/String;" />
+		<method name="getComment()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="quoteComment(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="quoteName(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="quoteNameIfNecessary(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="setAddress(Ljava/lang/String;)V" />
+		<method name="setComment(Ljava/lang/String;)V" />
+		<method name="setName(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/text/util/Rfc822Tokenizer" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/MultiAutoCompleteTextView$Tokenizer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="tokenize(Ljava/lang/CharSequence;)[Landroid/text/util/Rfc822Token;" />
+		<method name="tokenize(Ljava/lang/CharSequence;Ljava/util/Collection;)V" since="8" />
+	</class>
+	<class name="android/transition/ArcMotion" since="21">
+		<extends name="android/transition/PathMotion" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getMaximumAngle()F" />
+		<method name="getMinimumHorizontalAngle()F" />
+		<method name="getMinimumVerticalAngle()F" />
+		<method name="setMaximumAngle(F)V" />
+		<method name="setMinimumHorizontalAngle(F)V" />
+		<method name="setMinimumVerticalAngle(F)V" />
+	</class>
+	<class name="android/transition/AutoTransition" since="19">
+		<extends name="android/transition/TransitionSet" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21" />
+	</class>
+	<class name="android/transition/ChangeBounds" since="19">
+		<extends name="android/transition/Transition" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21" />
+		<method name="getResizeClip()Z" since="22" />
+		<method name="setReparent(Z)V" deprecated="21" />
+		<method name="setResizeClip(Z)V" />
+	</class>
+	<class name="android/transition/ChangeClipBounds" since="21">
+		<extends name="android/transition/Transition" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/transition/ChangeImageTransform" since="21">
+		<extends name="android/transition/Transition" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/transition/ChangeScroll" since="23">
+		<extends name="android/transition/Transition" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/transition/ChangeTransform" since="21">
+		<extends name="android/transition/Transition" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getReparent()Z" />
+		<method name="getReparentWithOverlay()Z" />
+		<method name="setReparent(Z)V" />
+		<method name="setReparentWithOverlay(Z)V" />
+	</class>
+	<class name="android/transition/CircularPropagation" since="21">
+		<extends name="android/transition/VisibilityPropagation" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setPropagationSpeed(F)V" />
+	</class>
+	<class name="android/transition/Explode" since="21">
+		<extends name="android/transition/Visibility" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/transition/Fade" since="19">
+		<extends name="android/transition/Visibility" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21" />
+		<field name="IN" />
+		<field name="OUT" />
+	</class>
+	<class name="android/transition/PathMotion" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getPath(FFFF)Landroid/graphics/Path;" />
+	</class>
+	<class name="android/transition/PatternPathMotion" since="21">
+		<extends name="android/transition/PathMotion" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;)V" />
+		<method name="getPatternPath()Landroid/graphics/Path;" />
+		<method name="setPatternPath(Landroid/graphics/Path;)V" />
+	</class>
+	<class name="android/transition/Scene" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup;Landroid/view/View;)V" since="21" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup;Landroid/view/ViewGroup;)V" deprecated="21" />
+		<method name="enter()V" />
+		<method name="exit()V" />
+		<method name="getCurrentScene(Landroid/view/ViewGroup;)Landroid/transition/Scene;" since="29" />
+		<method name="getSceneForLayout(Landroid/view/ViewGroup;ILandroid/content/Context;)Landroid/transition/Scene;" />
+		<method name="getSceneRoot()Landroid/view/ViewGroup;" />
+		<method name="setEnterAction(Ljava/lang/Runnable;)V" />
+		<method name="setExitAction(Ljava/lang/Runnable;)V" />
+	</class>
+	<class name="android/transition/SidePropagation" since="21">
+		<extends name="android/transition/VisibilityPropagation" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setPropagationSpeed(F)V" />
+		<method name="setSide(I)V" />
+	</class>
+	<class name="android/transition/Slide" since="21">
+		<extends name="android/transition/Visibility" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getSlideEdge()I" />
+		<method name="setSlideEdge(I)V" />
+	</class>
+	<class name="android/transition/Transition" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21" />
+		<method name="addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;" />
+		<method name="addTarget(I)Landroid/transition/Transition;" />
+		<method name="addTarget(Landroid/view/View;)Landroid/transition/Transition;" />
+		<method name="addTarget(Ljava/lang/Class;)Landroid/transition/Transition;" since="21" />
+		<method name="addTarget(Ljava/lang/String;)Landroid/transition/Transition;" since="21" />
+		<method name="canRemoveViews()Z" since="21" />
+		<method name="captureEndValues(Landroid/transition/TransitionValues;)V" />
+		<method name="captureStartValues(Landroid/transition/TransitionValues;)V" />
+		<method name="clone()Landroid/transition/Transition;" />
+		<method name="createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;" />
+		<method name="excludeChildren(IZ)Landroid/transition/Transition;" />
+		<method name="excludeChildren(Landroid/view/View;Z)Landroid/transition/Transition;" />
+		<method name="excludeChildren(Ljava/lang/Class;Z)Landroid/transition/Transition;" />
+		<method name="excludeTarget(IZ)Landroid/transition/Transition;" />
+		<method name="excludeTarget(Landroid/view/View;Z)Landroid/transition/Transition;" />
+		<method name="excludeTarget(Ljava/lang/Class;Z)Landroid/transition/Transition;" />
+		<method name="excludeTarget(Ljava/lang/String;Z)Landroid/transition/Transition;" since="21" />
+		<method name="getDuration()J" />
+		<method name="getEpicenter()Landroid/graphics/Rect;" since="21" />
+		<method name="getEpicenterCallback()Landroid/transition/Transition$EpicenterCallback;" since="21" />
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPathMotion()Landroid/transition/PathMotion;" since="21" />
+		<method name="getPropagation()Landroid/transition/TransitionPropagation;" since="21" />
+		<method name="getStartDelay()J" />
+		<method name="getTargetIds()Ljava/util/List;" />
+		<method name="getTargetNames()Ljava/util/List;" since="21" />
+		<method name="getTargetTypes()Ljava/util/List;" since="21" />
+		<method name="getTargets()Ljava/util/List;" />
+		<method name="getTransitionProperties()[Ljava/lang/String;" />
+		<method name="getTransitionValues(Landroid/view/View;Z)Landroid/transition/TransitionValues;" />
+		<method name="isTransitionRequired(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Z" since="23" />
+		<method name="removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;" />
+		<method name="removeTarget(I)Landroid/transition/Transition;" />
+		<method name="removeTarget(Landroid/view/View;)Landroid/transition/Transition;" />
+		<method name="removeTarget(Ljava/lang/Class;)Landroid/transition/Transition;" since="21" />
+		<method name="removeTarget(Ljava/lang/String;)Landroid/transition/Transition;" since="21" />
+		<method name="setDuration(J)Landroid/transition/Transition;" />
+		<method name="setEpicenterCallback(Landroid/transition/Transition$EpicenterCallback;)V" since="21" />
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/Transition;" />
+		<method name="setMatchOrder([I)V" since="21" />
+		<method name="setPathMotion(Landroid/transition/PathMotion;)V" since="21" />
+		<method name="setPropagation(Landroid/transition/TransitionPropagation;)V" since="21" />
+		<method name="setStartDelay(J)Landroid/transition/Transition;" />
+		<field name="MATCH_ID" since="21" />
+		<field name="MATCH_INSTANCE" since="21" />
+		<field name="MATCH_ITEM_ID" since="21" />
+		<field name="MATCH_NAME" since="21" />
+	</class>
+	<class name="android/transition/Transition$EpicenterCallback" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGetEpicenter(Landroid/transition/Transition;)Landroid/graphics/Rect;" />
+	</class>
+	<class name="android/transition/Transition$TransitionListener" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onTransitionCancel(Landroid/transition/Transition;)V" />
+		<method name="onTransitionEnd(Landroid/transition/Transition;)V" />
+		<method name="onTransitionPause(Landroid/transition/Transition;)V" />
+		<method name="onTransitionResume(Landroid/transition/Transition;)V" />
+		<method name="onTransitionStart(Landroid/transition/Transition;)V" />
+	</class>
+	<class name="android/transition/TransitionInflater" since="19">
+		<extends name="java/lang/Object" />
+		<method name="from(Landroid/content/Context;)Landroid/transition/TransitionInflater;" />
+		<method name="inflateTransition(I)Landroid/transition/Transition;" />
+		<method name="inflateTransitionManager(ILandroid/view/ViewGroup;)Landroid/transition/TransitionManager;" />
+	</class>
+	<class name="android/transition/TransitionListenerAdapter" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/transition/Transition$TransitionListener" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/transition/TransitionManager" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="beginDelayedTransition(Landroid/view/ViewGroup;)V" />
+		<method name="beginDelayedTransition(Landroid/view/ViewGroup;Landroid/transition/Transition;)V" />
+		<method name="endTransitions(Landroid/view/ViewGroup;)V" since="23" />
+		<method name="go(Landroid/transition/Scene;)V" />
+		<method name="go(Landroid/transition/Scene;Landroid/transition/Transition;)V" />
+		<method name="setTransition(Landroid/transition/Scene;Landroid/transition/Scene;Landroid/transition/Transition;)V" />
+		<method name="setTransition(Landroid/transition/Scene;Landroid/transition/Transition;)V" />
+		<method name="transitionTo(Landroid/transition/Scene;)V" />
+	</class>
+	<class name="android/transition/TransitionPropagation" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="captureValues(Landroid/transition/TransitionValues;)V" />
+		<method name="getPropagationProperties()[Ljava/lang/String;" />
+		<method name="getStartDelay(Landroid/view/ViewGroup;Landroid/transition/Transition;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)J" />
+	</class>
+	<class name="android/transition/TransitionSet" since="19">
+		<extends name="android/transition/Transition" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21" />
+		<method name="addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;" />
+		<method name="addTarget(I)Landroid/transition/TransitionSet;" />
+		<method name="addTarget(Landroid/view/View;)Landroid/transition/TransitionSet;" />
+		<method name="addTarget(Ljava/lang/Class;)Landroid/transition/TransitionSet;" since="21" />
+		<method name="addTarget(Ljava/lang/String;)Landroid/transition/TransitionSet;" since="21" />
+		<method name="addTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;" />
+		<method name="clone()Landroid/transition/TransitionSet;" />
+		<method name="getOrdering()I" />
+		<method name="getTransitionAt(I)Landroid/transition/Transition;" since="21" />
+		<method name="getTransitionCount()I" since="21" />
+		<method name="removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;" />
+		<method name="removeTarget(I)Landroid/transition/TransitionSet;" />
+		<method name="removeTarget(Landroid/view/View;)Landroid/transition/TransitionSet;" />
+		<method name="removeTarget(Ljava/lang/Class;)Landroid/transition/TransitionSet;" since="21" />
+		<method name="removeTarget(Ljava/lang/String;)Landroid/transition/TransitionSet;" since="21" />
+		<method name="removeTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;" />
+		<method name="setDuration(J)Landroid/transition/TransitionSet;" />
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/TransitionSet;" />
+		<method name="setOrdering(I)Landroid/transition/TransitionSet;" />
+		<method name="setStartDelay(J)Landroid/transition/TransitionSet;" />
+		<field name="ORDERING_SEQUENTIAL" />
+		<field name="ORDERING_TOGETHER" />
+	</class>
+	<class name="android/transition/TransitionValues" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/view/View;)V" since="29" />
+		<field name="values" />
+		<field name="view" />
+	</class>
+	<class name="android/transition/Visibility" since="19">
+		<extends name="android/transition/Transition" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21" />
+		<method name="getMode()I" since="21" />
+		<method name="isVisible(Landroid/transition/TransitionValues;)Z" />
+		<method name="onAppear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;" />
+		<method name="onAppear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;" since="21" />
+		<method name="onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;" />
+		<method name="onDisappear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;" since="21" />
+		<method name="setMode(I)V" since="21" />
+		<field name="MODE_IN" since="21" />
+		<field name="MODE_OUT" since="21" />
+	</class>
+	<class name="android/transition/VisibilityPropagation" since="21">
+		<extends name="android/transition/TransitionPropagation" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getViewVisibility(Landroid/transition/TransitionValues;)I" />
+		<method name="getViewX(Landroid/transition/TransitionValues;)I" />
+		<method name="getViewY(Landroid/transition/TransitionValues;)I" />
+	</class>
+	<class name="android/util/AndroidException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="11" />
+	</class>
+	<class name="android/util/AndroidRuntimeException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="11" />
+	</class>
+	<class name="android/util/ArrayMap" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Map" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/util/ArrayMap;)V" />
+		<method name="containsAll(Ljava/util/Collection;)Z" />
+		<method name="ensureCapacity(I)V" />
+		<method name="indexOfKey(Ljava/lang/Object;)I" since="21" />
+		<method name="indexOfValue(Ljava/lang/Object;)I" since="29" />
+		<method name="keyAt(I)Ljava/lang/Object;" />
+		<method name="putAll(Landroid/util/ArrayMap;)V" />
+		<method name="removeAll(Ljava/util/Collection;)Z" />
+		<method name="removeAt(I)Ljava/lang/Object;" />
+		<method name="retainAll(Ljava/util/Collection;)Z" />
+		<method name="setValueAt(ILjava/lang/Object;)Ljava/lang/Object;" />
+		<method name="valueAt(I)Ljava/lang/Object;" />
+	</class>
+	<class name="android/util/ArraySet" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Collection" />
+		<implements name="java/util/Set" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Landroid/util/ArraySet;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" since="29" />
+		<method name="&lt;init&gt;([Ljava/lang/Object;)V" since="30" />
+		<method name="addAll(Landroid/util/ArraySet;)V" />
+		<method name="ensureCapacity(I)V" />
+		<method name="indexOf(Ljava/lang/Object;)I" />
+		<method name="removeAll(Landroid/util/ArraySet;)Z" />
+		<method name="removeAt(I)Ljava/lang/Object;" />
+		<method name="valueAt(I)Ljava/lang/Object;" />
+	</class>
+	<class name="android/util/AtomicFile" since="17">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="delete()V" />
+		<method name="failWrite(Ljava/io/FileOutputStream;)V" />
+		<method name="finishWrite(Ljava/io/FileOutputStream;)V" />
+		<method name="getBaseFile()Ljava/io/File;" />
+		<method name="getLastModifiedTime()J" since="31" />
+		<method name="openRead()Ljava/io/FileInputStream;" />
+		<method name="readFully()[B" />
+		<method name="startWrite()Ljava/io/FileOutputStream;" />
+	</class>
+	<class name="android/util/AttributeSet" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getAttributeBooleanValue(IZ)Z" />
+		<method name="getAttributeBooleanValue(Ljava/lang/String;Ljava/lang/String;Z)Z" />
+		<method name="getAttributeCount()I" />
+		<method name="getAttributeFloatValue(IF)F" />
+		<method name="getAttributeFloatValue(Ljava/lang/String;Ljava/lang/String;F)F" />
+		<method name="getAttributeIntValue(II)I" />
+		<method name="getAttributeIntValue(Ljava/lang/String;Ljava/lang/String;I)I" />
+		<method name="getAttributeListValue(I[Ljava/lang/String;I)I" />
+		<method name="getAttributeListValue(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)I" />
+		<method name="getAttributeName(I)Ljava/lang/String;" />
+		<method name="getAttributeNameResource(I)I" />
+		<method name="getAttributeNamespace(I)Ljava/lang/String;" since="28" />
+		<method name="getAttributeResourceValue(II)I" />
+		<method name="getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I" />
+		<method name="getAttributeUnsignedIntValue(II)I" />
+		<method name="getAttributeUnsignedIntValue(Ljava/lang/String;Ljava/lang/String;I)I" />
+		<method name="getAttributeValue(I)Ljava/lang/String;" />
+		<method name="getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getClassAttribute()Ljava/lang/String;" />
+		<method name="getIdAttribute()Ljava/lang/String;" />
+		<method name="getIdAttributeResourceValue(I)I" />
+		<method name="getPositionDescription()Ljava/lang/String;" />
+		<method name="getStyleAttribute()I" />
+	</class>
+	<class name="android/util/Base64" since="8">
+		<extends name="java/lang/Object" />
+		<method name="decode(Ljava/lang/String;I)[B" />
+		<method name="decode([BI)[B" />
+		<method name="decode([BIII)[B" />
+		<method name="encode([BI)[B" />
+		<method name="encode([BIII)[B" />
+		<method name="encodeToString([BI)Ljava/lang/String;" />
+		<method name="encodeToString([BIII)Ljava/lang/String;" />
+		<field name="CRLF" />
+		<field name="DEFAULT" />
+		<field name="NO_CLOSE" />
+		<field name="NO_PADDING" />
+		<field name="NO_WRAP" />
+		<field name="URL_SAFE" />
+	</class>
+	<class name="android/util/Base64DataException" since="11">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/util/Base64InputStream" since="8">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;I)V" />
+	</class>
+	<class name="android/util/Base64OutputStream" since="8">
+		<extends name="java/io/FilterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;I)V" />
+	</class>
+	<class name="android/util/CloseGuard" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="close()V" />
+		<method name="open(Ljava/lang/String;)V" />
+		<method name="warnIfOpen()V" />
+	</class>
+	<class name="android/util/Config" since="1" deprecated="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="12" />
+		<field name="DEBUG" deprecated="15" />
+		<field name="LOGD" deprecated="15" />
+		<field name="LOGV" deprecated="15" />
+		<field name="PROFILE" deprecated="15" />
+		<field name="RELEASE" deprecated="15" />
+	</class>
+	<class name="android/util/DebugUtils" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="12" />
+		<method name="isObjectSelected(Ljava/lang/Object;)Z" />
+	</class>
+	<class name="android/util/DisplayMetrics" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="equals(Landroid/util/DisplayMetrics;)Z" since="17" />
+		<method name="setTo(Landroid/util/DisplayMetrics;)V" />
+		<method name="setToDefaults()V" />
+		<field name="DENSITY_140" since="29" />
+		<field name="DENSITY_180" since="29" />
+		<field name="DENSITY_200" since="29" />
+		<field name="DENSITY_220" since="29" />
+		<field name="DENSITY_260" since="25" />
+		<field name="DENSITY_280" since="22" />
+		<field name="DENSITY_300" since="25" />
+		<field name="DENSITY_340" since="25" />
+		<field name="DENSITY_360" since="23" />
+		<field name="DENSITY_400" since="19" />
+		<field name="DENSITY_420" since="23" />
+		<field name="DENSITY_440" since="28" />
+		<field name="DENSITY_450" since="29" />
+		<field name="DENSITY_560" since="21" />
+		<field name="DENSITY_600" since="29" />
+		<field name="DENSITY_DEFAULT" since="4" />
+		<field name="DENSITY_DEVICE_STABLE" since="24" />
+		<field name="DENSITY_HIGH" since="4" />
+		<field name="DENSITY_LOW" since="4" />
+		<field name="DENSITY_MEDIUM" since="4" />
+		<field name="DENSITY_TV" since="13" />
+		<field name="DENSITY_XHIGH" since="9" />
+		<field name="DENSITY_XXHIGH" since="16" />
+		<field name="DENSITY_XXXHIGH" since="18" />
+		<field name="density" />
+		<field name="densityDpi" since="4" />
+		<field name="heightPixels" />
+		<field name="scaledDensity" />
+		<field name="widthPixels" />
+		<field name="xdpi" />
+		<field name="ydpi" />
+	</class>
+	<class name="android/util/EventLog" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="12" />
+		<method name="getTagCode(Ljava/lang/String;)I" />
+		<method name="getTagName(I)Ljava/lang/String;" />
+		<method name="readEvents([ILjava/util/Collection;)V" />
+		<method name="writeEvent(IF)I" since="23" />
+		<method name="writeEvent(II)I" />
+		<method name="writeEvent(IJ)I" />
+		<method name="writeEvent(ILjava/lang/String;)I" />
+		<method name="writeEvent(I[Ljava/lang/Object;)I" />
+	</class>
+	<class name="android/util/EventLog$Event" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getData()Ljava/lang/Object;" />
+		<method name="getProcessId()I" />
+		<method name="getTag()I" />
+		<method name="getThreadId()I" />
+		<method name="getTimeNanos()J" />
+	</class>
+	<class name="android/util/EventLogTags" since="1" deprecated="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/io/BufferedReader;)V" deprecated="29" />
+		<method name="get(I)Landroid/util/EventLogTags$Description;" deprecated="29" />
+		<method name="get(Ljava/lang/String;)Landroid/util/EventLogTags$Description;" deprecated="29" />
+	</class>
+	<class name="android/util/EventLogTags$Description" since="1" deprecated="29">
+		<extends name="java/lang/Object" />
+		<field name="mName" deprecated="29" />
+		<field name="mTag" deprecated="29" />
+	</class>
+	<class name="android/util/FloatMath" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<method name="ceil(F)F" removed="23" />
+		<method name="cos(F)F" removed="23" />
+		<method name="exp(F)F" since="17" removed="23" />
+		<method name="floor(F)F" removed="23" />
+		<method name="hypot(FF)F" since="17" removed="23" />
+		<method name="pow(FF)F" since="17" removed="23" />
+		<method name="sin(F)F" removed="23" />
+		<method name="sqrt(F)F" removed="23" />
+	</class>
+	<class name="android/util/FloatProperty" since="24">
+		<extends name="android/util/Property" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="set(Ljava/lang/Object;Ljava/lang/Float;)V" />
+		<method name="setValue(Ljava/lang/Object;F)V" />
+	</class>
+	<class name="android/util/Half" since="26">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(D)V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(S)V" />
+		<method name="abs(S)S" />
+		<method name="ceil(S)S" />
+		<method name="compare(SS)I" />
+		<method name="compareTo(Landroid/util/Half;)I" />
+		<method name="copySign(SS)S" />
+		<method name="equals(SS)Z" />
+		<method name="floor(S)S" />
+		<method name="getExponent(S)I" />
+		<method name="getSign(S)I" />
+		<method name="getSignificand(S)I" />
+		<method name="greater(SS)Z" />
+		<method name="greaterEquals(SS)Z" />
+		<method name="halfToIntBits(S)I" />
+		<method name="halfToRawIntBits(S)I" />
+		<method name="halfToShortBits(S)S" />
+		<method name="halfValue()S" />
+		<method name="hashCode(S)I" />
+		<method name="intBitsToHalf(I)S" />
+		<method name="isInfinite(S)Z" />
+		<method name="isNaN()Z" />
+		<method name="isNaN(S)Z" />
+		<method name="isNormalized(S)Z" />
+		<method name="less(SS)Z" />
+		<method name="lessEquals(SS)Z" />
+		<method name="max(SS)S" />
+		<method name="min(SS)S" />
+		<method name="parseHalf(Ljava/lang/String;)S" />
+		<method name="round(S)S" />
+		<method name="toFloat(S)F" />
+		<method name="toHalf(F)S" />
+		<method name="toHexString(S)Ljava/lang/String;" />
+		<method name="toString(S)Ljava/lang/String;" />
+		<method name="trunc(S)S" />
+		<method name="valueOf(F)Landroid/util/Half;" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/util/Half;" />
+		<method name="valueOf(S)Landroid/util/Half;" />
+		<field name="EPSILON" />
+		<field name="LOWEST_VALUE" />
+		<field name="MAX_EXPONENT" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_EXPONENT" />
+		<field name="MIN_NORMAL" />
+		<field name="MIN_VALUE" />
+		<field name="NEGATIVE_INFINITY" />
+		<field name="NEGATIVE_ZERO" />
+		<field name="NaN" />
+		<field name="POSITIVE_INFINITY" />
+		<field name="POSITIVE_ZERO" />
+		<field name="SIZE" />
+	</class>
+	<class name="android/util/IntProperty" since="24">
+		<extends name="android/util/Property" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="set(Ljava/lang/Object;Ljava/lang/Integer;)V" />
+		<method name="setValue(Ljava/lang/Object;I)V" />
+	</class>
+	<class name="android/util/JsonReader" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<method name="beginArray()V" />
+		<method name="beginObject()V" />
+		<method name="endArray()V" />
+		<method name="endObject()V" />
+		<method name="hasNext()Z" />
+		<method name="isLenient()Z" />
+		<method name="nextBoolean()Z" />
+		<method name="nextDouble()D" />
+		<method name="nextInt()I" />
+		<method name="nextLong()J" />
+		<method name="nextName()Ljava/lang/String;" />
+		<method name="nextNull()V" />
+		<method name="nextString()Ljava/lang/String;" />
+		<method name="peek()Landroid/util/JsonToken;" />
+		<method name="setLenient(Z)V" />
+		<method name="skipValue()V" />
+	</class>
+	<class name="android/util/JsonToken" since="11">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/util/JsonToken;" />
+		<method name="values()[Landroid/util/JsonToken;" />
+		<field name="BEGIN_ARRAY" />
+		<field name="BEGIN_OBJECT" />
+		<field name="BOOLEAN" />
+		<field name="END_ARRAY" />
+		<field name="END_DOCUMENT" />
+		<field name="END_OBJECT" />
+		<field name="NAME" />
+		<field name="NULL" />
+		<field name="NUMBER" />
+		<field name="STRING" />
+	</class>
+	<class name="android/util/JsonWriter" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="&lt;init&gt;(Ljava/io/Writer;)V" />
+		<method name="beginArray()Landroid/util/JsonWriter;" />
+		<method name="beginObject()Landroid/util/JsonWriter;" />
+		<method name="endArray()Landroid/util/JsonWriter;" />
+		<method name="endObject()Landroid/util/JsonWriter;" />
+		<method name="flush()V" />
+		<method name="isLenient()Z" />
+		<method name="name(Ljava/lang/String;)Landroid/util/JsonWriter;" />
+		<method name="nullValue()Landroid/util/JsonWriter;" />
+		<method name="setIndent(Ljava/lang/String;)V" />
+		<method name="setLenient(Z)V" />
+		<method name="value(D)Landroid/util/JsonWriter;" />
+		<method name="value(J)Landroid/util/JsonWriter;" />
+		<method name="value(Ljava/lang/Number;)Landroid/util/JsonWriter;" />
+		<method name="value(Ljava/lang/String;)Landroid/util/JsonWriter;" />
+		<method name="value(Z)Landroid/util/JsonWriter;" />
+	</class>
+	<class name="android/util/LayoutDirection" since="19">
+		<extends name="java/lang/Object" />
+		<field name="INHERIT" />
+		<field name="LOCALE" />
+		<field name="LTR" />
+		<field name="RTL" />
+	</class>
+	<class name="android/util/Log" since="1">
+		<extends name="java/lang/Object" />
+		<method name="d(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" />
+		<method name="e(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" />
+		<method name="getStackTraceString(Ljava/lang/Throwable;)Ljava/lang/String;" />
+		<method name="i(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" />
+		<method name="isLoggable(Ljava/lang/String;I)Z" />
+		<method name="println(ILjava/lang/String;Ljava/lang/String;)I" />
+		<method name="v(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="v(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" />
+		<method name="w(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" />
+		<method name="w(Ljava/lang/String;Ljava/lang/Throwable;)I" />
+		<method name="wtf(Ljava/lang/String;Ljava/lang/String;)I" since="8" />
+		<method name="wtf(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" since="8" />
+		<method name="wtf(Ljava/lang/String;Ljava/lang/Throwable;)I" since="8" />
+		<field name="ASSERT" />
+		<field name="DEBUG" />
+		<field name="ERROR" />
+		<field name="INFO" />
+		<field name="VERBOSE" />
+		<field name="WARN" />
+	</class>
+	<class name="android/util/LogPrinter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/util/Printer" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+	</class>
+	<class name="android/util/LongSparseArray" since="16">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(JLjava/lang/Object;)V" />
+		<method name="clear()V" />
+		<method name="clone()Landroid/util/LongSparseArray;" />
+		<method name="delete(J)V" />
+		<method name="get(J)Ljava/lang/Object;" />
+		<method name="get(JLjava/lang/Object;)Ljava/lang/Object;" />
+		<method name="indexOfKey(J)I" />
+		<method name="indexOfValue(Ljava/lang/Object;)I" />
+		<method name="keyAt(I)J" />
+		<method name="put(JLjava/lang/Object;)V" />
+		<method name="remove(J)V" />
+		<method name="removeAt(I)V" />
+		<method name="setValueAt(ILjava/lang/Object;)V" />
+		<method name="size()I" />
+		<method name="valueAt(I)Ljava/lang/Object;" />
+	</class>
+	<class name="android/util/LruCache" since="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="create(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="createCount()I" />
+		<method name="entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="evictAll()V" />
+		<method name="evictionCount()I" />
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="hitCount()I" />
+		<method name="maxSize()I" />
+		<method name="missCount()I" />
+		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="putCount()I" />
+		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="resize(I)V" since="21" />
+		<method name="size()I" />
+		<method name="sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I" />
+		<method name="snapshot()Ljava/util/Map;" />
+		<method name="trimToSize(I)V" since="17" />
+	</class>
+	<class name="android/util/MalformedJsonException" since="11">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/util/MonthDisplayHelper" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="getColumnOf(I)I" />
+		<method name="getDayAt(II)I" />
+		<method name="getDigitsForRow(I)[I" />
+		<method name="getFirstDayOfMonth()I" />
+		<method name="getMonth()I" />
+		<method name="getNumberOfDaysInMonth()I" />
+		<method name="getOffset()I" />
+		<method name="getRowOf(I)I" />
+		<method name="getWeekStartDay()I" />
+		<method name="getYear()I" />
+		<method name="isWithinCurrentMonth(II)Z" />
+		<method name="nextMonth()V" />
+		<method name="previousMonth()V" />
+	</class>
+	<class name="android/util/MutableBoolean" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Z)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/MutableByte" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(B)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/MutableChar" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(C)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/MutableDouble" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(D)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/MutableFloat" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(F)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/MutableInt" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/MutableLong" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(J)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/MutableShort" since="21" deprecated="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(S)V" deprecated="29" />
+		<field name="value" deprecated="29" />
+	</class>
+	<class name="android/util/NoSuchPropertyException" since="14">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/util/Pair" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;" />
+		<field name="first" />
+		<field name="second" />
+	</class>
+	<class name="android/util/Patterns" since="8">
+		<extends name="java/lang/Object" />
+		<method name="concatGroups(Ljava/util/regex/Matcher;)Ljava/lang/String;" />
+		<method name="digitsAndPlusOnly(Ljava/util/regex/Matcher;)Ljava/lang/String;" />
+		<field name="DOMAIN_NAME" />
+		<field name="EMAIL_ADDRESS" />
+		<field name="GOOD_IRI_CHAR" deprecated="24" />
+		<field name="IP_ADDRESS" deprecated="31" />
+		<field name="PHONE" />
+		<field name="TOP_LEVEL_DOMAIN" deprecated="21" />
+		<field name="TOP_LEVEL_DOMAIN_STR" deprecated="21" />
+		<field name="TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" deprecated="21" />
+		<field name="WEB_URL" />
+	</class>
+	<class name="android/util/PrintStreamPrinter" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/util/Printer" />
+		<method name="&lt;init&gt;(Ljava/io/PrintStream;)V" />
+	</class>
+	<class name="android/util/PrintWriterPrinter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/util/Printer" />
+		<method name="&lt;init&gt;(Ljava/io/PrintWriter;)V" />
+	</class>
+	<class name="android/util/Printer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="println(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/util/Property" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" />
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getType()Ljava/lang/Class;" />
+		<method name="isReadOnly()Z" />
+		<method name="of(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Landroid/util/Property;" />
+		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/util/Range" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Comparable;Ljava/lang/Comparable;)V" />
+		<method name="clamp(Ljava/lang/Comparable;)Ljava/lang/Comparable;" />
+		<method name="contains(Landroid/util/Range;)Z" />
+		<method name="contains(Ljava/lang/Comparable;)Z" />
+		<method name="create(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;" />
+		<method name="extend(Landroid/util/Range;)Landroid/util/Range;" />
+		<method name="extend(Ljava/lang/Comparable;)Landroid/util/Range;" />
+		<method name="extend(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;" />
+		<method name="getLower()Ljava/lang/Comparable;" />
+		<method name="getUpper()Ljava/lang/Comparable;" />
+		<method name="intersect(Landroid/util/Range;)Landroid/util/Range;" />
+		<method name="intersect(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;" />
+	</class>
+	<class name="android/util/Rational" since="21">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="compareTo(Landroid/util/Rational;)I" />
+		<method name="getDenominator()I" />
+		<method name="getNumerator()I" />
+		<method name="isFinite()Z" />
+		<method name="isInfinite()Z" />
+		<method name="isNaN()Z" />
+		<method name="isZero()Z" />
+		<method name="parseRational(Ljava/lang/String;)Landroid/util/Rational;" />
+		<field name="NEGATIVE_INFINITY" />
+		<field name="NaN" />
+		<field name="POSITIVE_INFINITY" />
+		<field name="ZERO" />
+	</class>
+	<class name="android/util/Size" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getHeight()I" />
+		<method name="getWidth()I" />
+		<method name="parseSize(Ljava/lang/String;)Landroid/util/Size;" />
+	</class>
+	<class name="android/util/SizeF" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="31" />
+		<method name="&lt;init&gt;(FF)V" />
+		<method name="getHeight()F" />
+		<method name="getWidth()F" />
+		<method name="parseSizeF(Ljava/lang/String;)Landroid/util/SizeF;" />
+		<field name="CREATOR" since="31" />
+	</class>
+	<class name="android/util/SparseArray" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" since="14" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(ILjava/lang/Object;)V" />
+		<method name="clear()V" />
+		<method name="clone()Landroid/util/SparseArray;" since="14" />
+		<method name="contains(I)Z" since="30" />
+		<method name="contentEquals(Landroid/util/SparseArray;)Z" since="31" />
+		<method name="contentHashCode()I" since="31" />
+		<method name="delete(I)V" />
+		<method name="get(I)Ljava/lang/Object;" />
+		<method name="get(ILjava/lang/Object;)Ljava/lang/Object;" />
+		<method name="indexOfKey(I)I" />
+		<method name="indexOfValue(Ljava/lang/Object;)I" />
+		<method name="keyAt(I)I" />
+		<method name="put(ILjava/lang/Object;)V" />
+		<method name="remove(I)V" />
+		<method name="removeAt(I)V" since="11" />
+		<method name="removeAtRange(II)V" since="19" />
+		<method name="set(ILjava/lang/Object;)V" since="31" />
+		<method name="setValueAt(ILjava/lang/Object;)V" />
+		<method name="size()I" />
+		<method name="valueAt(I)Ljava/lang/Object;" />
+	</class>
+	<class name="android/util/SparseBooleanArray" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" since="14" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(IZ)V" />
+		<method name="clear()V" />
+		<method name="clone()Landroid/util/SparseBooleanArray;" since="14" />
+		<method name="delete(I)V" />
+		<method name="get(I)Z" />
+		<method name="get(IZ)Z" />
+		<method name="indexOfKey(I)I" />
+		<method name="indexOfValue(Z)I" />
+		<method name="keyAt(I)I" />
+		<method name="put(IZ)V" />
+		<method name="removeAt(I)V" since="28" />
+		<method name="setValueAt(IZ)V" since="29" />
+		<method name="size()I" />
+		<method name="valueAt(I)Z" />
+	</class>
+	<class name="android/util/SparseIntArray" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" since="14" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(II)V" />
+		<method name="clear()V" />
+		<method name="clone()Landroid/util/SparseIntArray;" since="14" />
+		<method name="delete(I)V" />
+		<method name="get(I)I" />
+		<method name="get(II)I" />
+		<method name="indexOfKey(I)I" />
+		<method name="indexOfValue(I)I" />
+		<method name="keyAt(I)I" />
+		<method name="put(II)V" />
+		<method name="removeAt(I)V" since="3" />
+		<method name="setValueAt(II)V" since="29" />
+		<method name="size()I" />
+		<method name="valueAt(I)I" />
+	</class>
+	<class name="android/util/SparseLongArray" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(IJ)V" />
+		<method name="clear()V" />
+		<method name="clone()Landroid/util/SparseLongArray;" />
+		<method name="delete(I)V" />
+		<method name="get(I)J" />
+		<method name="get(IJ)J" />
+		<method name="indexOfKey(I)I" />
+		<method name="indexOfValue(J)I" />
+		<method name="keyAt(I)I" />
+		<method name="put(IJ)V" />
+		<method name="removeAt(I)V" />
+		<method name="size()I" />
+		<method name="valueAt(I)J" />
+	</class>
+	<class name="android/util/StateSet" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="12" />
+		<method name="dump([I)Ljava/lang/String;" />
+		<method name="isWildCard([I)Z" />
+		<method name="stateSetMatches([II)Z" />
+		<method name="stateSetMatches([I[I)Z" />
+		<method name="trimStateSet([II)[I" />
+		<field name="NOTHING" since="11" />
+		<field name="WILD_CARD" />
+	</class>
+	<class name="android/util/StringBuilderPrinter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/util/Printer" />
+		<method name="&lt;init&gt;(Ljava/lang/StringBuilder;)V" />
+	</class>
+	<class name="android/util/TimeFormatException" since="1">
+		<extends name="java/lang/RuntimeException" />
+	</class>
+	<class name="android/util/TimeUtils" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="12" />
+		<method name="getTimeZone(IZJLjava/lang/String;)Ljava/util/TimeZone;" />
+		<method name="getTimeZoneDatabaseVersion()Ljava/lang/String;" since="3" />
+		<method name="getTimeZoneIdsForCountryCode(Ljava/lang/String;)Ljava/util/List;" since="29" />
+		<method name="isTimeBetween(Ljava/time/LocalTime;Ljava/time/LocalTime;Ljava/time/LocalTime;)Z" since="30" />
+	</class>
+	<class name="android/util/TimingLogger" since="1" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30" />
+		<method name="addSplit(Ljava/lang/String;)V" deprecated="30" />
+		<method name="dumpToLog()V" deprecated="30" />
+		<method name="reset()V" deprecated="30" />
+		<method name="reset(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30" />
+	</class>
+	<class name="android/util/TypedValue" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="applyDimension(IFLandroid/util/DisplayMetrics;)F" />
+		<method name="coerceToString()Ljava/lang/CharSequence;" />
+		<method name="coerceToString(II)Ljava/lang/String;" />
+		<method name="complexToDimension(ILandroid/util/DisplayMetrics;)F" />
+		<method name="complexToDimensionNoisy(ILandroid/util/DisplayMetrics;)F" removed="20" />
+		<method name="complexToDimensionPixelOffset(ILandroid/util/DisplayMetrics;)I" />
+		<method name="complexToDimensionPixelSize(ILandroid/util/DisplayMetrics;)I" />
+		<method name="complexToFloat(I)F" />
+		<method name="complexToFraction(IFF)F" />
+		<method name="getComplexUnit()I" since="22" />
+		<method name="getDimension(Landroid/util/DisplayMetrics;)F" />
+		<method name="getFloat()F" />
+		<method name="getFraction(FF)F" />
+		<method name="isColorType()Z" since="29" />
+		<method name="setTo(Landroid/util/TypedValue;)V" />
+		<field name="COMPLEX_MANTISSA_MASK" />
+		<field name="COMPLEX_MANTISSA_SHIFT" />
+		<field name="COMPLEX_RADIX_0p23" />
+		<field name="COMPLEX_RADIX_16p7" />
+		<field name="COMPLEX_RADIX_23p0" />
+		<field name="COMPLEX_RADIX_8p15" />
+		<field name="COMPLEX_RADIX_MASK" />
+		<field name="COMPLEX_RADIX_SHIFT" />
+		<field name="COMPLEX_UNIT_DIP" />
+		<field name="COMPLEX_UNIT_FRACTION" />
+		<field name="COMPLEX_UNIT_FRACTION_PARENT" />
+		<field name="COMPLEX_UNIT_IN" />
+		<field name="COMPLEX_UNIT_MASK" />
+		<field name="COMPLEX_UNIT_MM" />
+		<field name="COMPLEX_UNIT_PT" />
+		<field name="COMPLEX_UNIT_PX" />
+		<field name="COMPLEX_UNIT_SHIFT" />
+		<field name="COMPLEX_UNIT_SP" />
+		<field name="DATA_NULL_EMPTY" since="22" />
+		<field name="DATA_NULL_UNDEFINED" since="22" />
+		<field name="DENSITY_DEFAULT" since="4" />
+		<field name="DENSITY_NONE" since="4" />
+		<field name="TYPE_ATTRIBUTE" />
+		<field name="TYPE_DIMENSION" />
+		<field name="TYPE_FIRST_COLOR_INT" />
+		<field name="TYPE_FIRST_INT" />
+		<field name="TYPE_FLOAT" />
+		<field name="TYPE_FRACTION" />
+		<field name="TYPE_INT_BOOLEAN" />
+		<field name="TYPE_INT_COLOR_ARGB4" />
+		<field name="TYPE_INT_COLOR_ARGB8" />
+		<field name="TYPE_INT_COLOR_RGB4" />
+		<field name="TYPE_INT_COLOR_RGB8" />
+		<field name="TYPE_INT_DEC" />
+		<field name="TYPE_INT_HEX" />
+		<field name="TYPE_LAST_COLOR_INT" />
+		<field name="TYPE_LAST_INT" />
+		<field name="TYPE_NULL" />
+		<field name="TYPE_REFERENCE" />
+		<field name="TYPE_STRING" />
+		<field name="assetCookie" />
+		<field name="changingConfigurations" />
+		<field name="data" />
+		<field name="density" since="4" />
+		<field name="resourceId" />
+		<field name="sourceResourceId" since="29" />
+		<field name="string" />
+		<field name="type" />
+	</class>
+	<class name="android/util/Xml" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="12" />
+		<method name="asAttributeSet(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/AttributeSet;" />
+		<method name="findEncodingByName(Ljava/lang/String;)Landroid/util/Xml$Encoding;" />
+		<method name="newPullParser()Lorg/xmlpull/v1/XmlPullParser;" />
+		<method name="newSerializer()Lorg/xmlpull/v1/XmlSerializer;" />
+		<method name="parse(Ljava/io/InputStream;Landroid/util/Xml$Encoding;Lorg/xml/sax/ContentHandler;)V" />
+		<method name="parse(Ljava/io/Reader;Lorg/xml/sax/ContentHandler;)V" />
+		<method name="parse(Ljava/lang/String;Lorg/xml/sax/ContentHandler;)V" />
+		<field name="FEATURE_RELAXED" />
+	</class>
+	<class name="android/util/Xml$Encoding" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/util/Xml$Encoding;" />
+		<method name="values()[Landroid/util/Xml$Encoding;" />
+		<field name="ISO_8859_1" />
+		<field name="US_ASCII" />
+		<field name="UTF_16" />
+		<field name="UTF_8" />
+	</class>
+	<class name="android/util/proto/ProtoOutputStream" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="checkFieldId(JJ)I" />
+		<method name="dump(Ljava/lang/String;)V" />
+		<method name="end(J)V" />
+		<method name="flush()V" />
+		<method name="getBytes()[B" />
+		<method name="getFieldCountString(J)Ljava/lang/String;" />
+		<method name="getFieldIdString(J)Ljava/lang/String;" />
+		<method name="getFieldTypeString(J)Ljava/lang/String;" />
+		<method name="getRawSize()I" />
+		<method name="getWireTypeString(I)Ljava/lang/String;" />
+		<method name="makeFieldId(IJ)J" />
+		<method name="makeToken(IZIII)J" />
+		<method name="start(J)J" />
+		<method name="token2String(J)Ljava/lang/String;" />
+		<method name="write(JD)V" />
+		<method name="write(JF)V" />
+		<method name="write(JI)V" />
+		<method name="write(JJ)V" />
+		<method name="write(JLjava/lang/String;)V" />
+		<method name="write(JZ)V" />
+		<method name="write(J[B)V" />
+		<method name="writeTag(II)V" />
+		<field name="FIELD_COUNT_MASK" />
+		<field name="FIELD_COUNT_PACKED" />
+		<field name="FIELD_COUNT_REPEATED" />
+		<field name="FIELD_COUNT_SHIFT" />
+		<field name="FIELD_COUNT_SINGLE" />
+		<field name="FIELD_COUNT_UNKNOWN" />
+		<field name="FIELD_ID_SHIFT" />
+		<field name="FIELD_TYPE_BOOL" />
+		<field name="FIELD_TYPE_BYTES" />
+		<field name="FIELD_TYPE_DOUBLE" />
+		<field name="FIELD_TYPE_ENUM" />
+		<field name="FIELD_TYPE_FIXED32" />
+		<field name="FIELD_TYPE_FIXED64" />
+		<field name="FIELD_TYPE_FLOAT" />
+		<field name="FIELD_TYPE_INT32" />
+		<field name="FIELD_TYPE_INT64" />
+		<field name="FIELD_TYPE_MASK" />
+		<field name="FIELD_TYPE_MESSAGE" />
+		<field name="FIELD_TYPE_SFIXED32" />
+		<field name="FIELD_TYPE_SFIXED64" />
+		<field name="FIELD_TYPE_SHIFT" />
+		<field name="FIELD_TYPE_SINT32" />
+		<field name="FIELD_TYPE_SINT64" />
+		<field name="FIELD_TYPE_STRING" />
+		<field name="FIELD_TYPE_UINT32" />
+		<field name="FIELD_TYPE_UINT64" />
+		<field name="WIRE_TYPE_END_GROUP" />
+		<field name="WIRE_TYPE_FIXED32" />
+		<field name="WIRE_TYPE_FIXED64" />
+		<field name="WIRE_TYPE_LENGTH_DELIMITED" />
+		<field name="WIRE_TYPE_MASK" />
+		<field name="WIRE_TYPE_START_GROUP" />
+		<field name="WIRE_TYPE_VARINT" />
+	</class>
+	<class name="android/view/AbsSavedState" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V" since="24" />
+		<method name="&lt;init&gt;(Landroid/os/Parcelable;)V" />
+		<method name="getSuperState()Landroid/os/Parcelable;" />
+		<field name="CREATOR" />
+		<field name="EMPTY_STATE" />
+	</class>
+	<class name="android/view/ActionMode" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="finish()V" />
+		<method name="getCustomView()Landroid/view/View;" />
+		<method name="getMenu()Landroid/view/Menu;" />
+		<method name="getMenuInflater()Landroid/view/MenuInflater;" />
+		<method name="getSubtitle()Ljava/lang/CharSequence;" />
+		<method name="getTag()Ljava/lang/Object;" since="14" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="getTitleOptionalHint()Z" since="16" />
+		<method name="getType()I" since="23" />
+		<method name="hide(J)V" since="23" />
+		<method name="invalidate()V" />
+		<method name="invalidateContentRect()V" since="23" />
+		<method name="isTitleOptional()Z" since="16" />
+		<method name="onWindowFocusChanged(Z)V" since="23" />
+		<method name="setCustomView(Landroid/view/View;)V" />
+		<method name="setSubtitle(I)V" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V" />
+		<method name="setTag(Ljava/lang/Object;)V" since="14" />
+		<method name="setTitle(I)V" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" />
+		<method name="setTitleOptionalHint(Z)V" since="16" />
+		<method name="setType(I)V" since="23" />
+		<field name="DEFAULT_HIDE_DURATION" since="23" />
+		<field name="TYPE_FLOATING" since="23" />
+		<field name="TYPE_PRIMARY" since="23" />
+	</class>
+	<class name="android/view/ActionMode$Callback" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onActionItemClicked(Landroid/view/ActionMode;Landroid/view/MenuItem;)Z" />
+		<method name="onCreateActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z" />
+		<method name="onDestroyActionMode(Landroid/view/ActionMode;)V" />
+		<method name="onPrepareActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z" />
+	</class>
+	<class name="android/view/ActionMode$Callback2" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/ActionMode$Callback" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGetContentRect(Landroid/view/ActionMode;Landroid/view/View;Landroid/graphics/Rect;)V" />
+	</class>
+	<class name="android/view/ActionProvider" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="hasSubMenu()Z" />
+		<method name="isVisible()Z" since="16" />
+		<method name="onCreateActionView()Landroid/view/View;" deprecated="16" />
+		<method name="onCreateActionView(Landroid/view/MenuItem;)Landroid/view/View;" since="16" />
+		<method name="onPerformDefaultAction()Z" />
+		<method name="onPrepareSubMenu(Landroid/view/SubMenu;)V" />
+		<method name="overridesItemVisibility()Z" since="16" />
+		<method name="refreshVisibility()V" since="16" />
+		<method name="setVisibilityListener(Landroid/view/ActionProvider$VisibilityListener;)V" since="16" />
+	</class>
+	<class name="android/view/ActionProvider$VisibilityListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onActionProviderVisibilityChanged(Z)V" />
+	</class>
+	<class name="android/view/AttachedSurfaceControl" since="31">
+		<extends name="java/lang/Object" />
+		<method name="addOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33" />
+		<method name="applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z" />
+		<method name="buildReparentTransaction(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="getBufferTransformHint()I" since="33" />
+		<method name="removeOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33" />
+	</class>
+	<class name="android/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener" since="33">
+		<method name="onBufferTransformHintChanged(I)V" />
+	</class>
+	<class name="android/view/Choreographer" since="16">
+		<extends name="java/lang/Object" />
+		<method name="getInstance()Landroid/view/Choreographer;" />
+		<method name="postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V" />
+		<method name="postFrameCallbackDelayed(Landroid/view/Choreographer$FrameCallback;J)V" />
+		<method name="removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V" />
+	</class>
+	<class name="android/view/Choreographer$FrameCallback" since="16">
+		<extends name="java/lang/Object" />
+		<method name="doFrame(J)V" />
+	</class>
+	<class name="android/view/CollapsibleActionView" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onActionViewCollapsed()V" />
+		<method name="onActionViewExpanded()V" />
+	</class>
+	<class name="android/view/ContentInfo" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getClip()Landroid/content/ClipData;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getFlags()I" />
+		<method name="getLinkUri()Landroid/net/Uri;" />
+		<method name="getSource()I" />
+		<field name="CREATOR" />
+		<field name="FLAG_CONVERT_TO_PLAIN_TEXT" />
+		<field name="SOURCE_APP" />
+		<field name="SOURCE_AUTOFILL" />
+		<field name="SOURCE_CLIPBOARD" />
+		<field name="SOURCE_DRAG_AND_DROP" />
+		<field name="SOURCE_INPUT_METHOD" />
+		<field name="SOURCE_PROCESS_TEXT" />
+	</class>
+	<class name="android/view/ContentInfo$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/ClipData;I)V" />
+		<method name="&lt;init&gt;(Landroid/view/ContentInfo;)V" />
+		<method name="build()Landroid/view/ContentInfo;" />
+		<method name="setClip(Landroid/content/ClipData;)Landroid/view/ContentInfo$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/ContentInfo$Builder;" />
+		<method name="setFlags(I)Landroid/view/ContentInfo$Builder;" />
+		<method name="setLinkUri(Landroid/net/Uri;)Landroid/view/ContentInfo$Builder;" />
+		<method name="setSource(I)Landroid/view/ContentInfo$Builder;" />
+	</class>
+	<class name="android/view/ContextMenu" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/Menu" />
+		<method name="clearHeader()V" />
+		<method name="setHeaderIcon(I)Landroid/view/ContextMenu;" />
+		<method name="setHeaderIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/ContextMenu;" />
+		<method name="setHeaderTitle(I)Landroid/view/ContextMenu;" />
+		<method name="setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/ContextMenu;" />
+		<method name="setHeaderView(Landroid/view/View;)Landroid/view/ContextMenu;" />
+	</class>
+	<class name="android/view/ContextMenu$ContextMenuInfo" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/view/ContextThemeWrapper" since="1">
+		<extends name="android/content/ContextWrapper" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/res/Resources$Theme;)V" since="23" />
+		<method name="applyOverrideConfiguration(Landroid/content/res/Configuration;)V" since="17" />
+		<method name="onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V" />
+		<method name="setTheme(Landroid/content/res/Resources$Theme;)V" since="29" />
+	</class>
+	<class name="android/view/Display" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getAppVsyncOffsetNanos()J" since="21" />
+		<method name="getCurrentSizeRange(Landroid/graphics/Point;Landroid/graphics/Point;)V" since="16" />
+		<method name="getCutout()Landroid/view/DisplayCutout;" since="29" />
+		<method name="getDeviceProductInfo()Landroid/hardware/display/DeviceProductInfo;" since="31" />
+		<method name="getDisplayId()I" />
+		<method name="getFlags()I" since="17" />
+		<method name="getHdrCapabilities()Landroid/view/Display$HdrCapabilities;" since="24" />
+		<method name="getHeight()I" deprecated="15" />
+		<method name="getMetrics(Landroid/util/DisplayMetrics;)V" deprecated="30" />
+		<method name="getMode()Landroid/view/Display$Mode;" since="23" />
+		<method name="getName()Ljava/lang/String;" since="17" />
+		<method name="getOrientation()I" deprecated="15" />
+		<method name="getPixelFormat()I" deprecated="17" />
+		<method name="getPreferredWideGamutColorSpace()Landroid/graphics/ColorSpace;" since="29" />
+		<method name="getPresentationDeadlineNanos()J" since="21" />
+		<method name="getRealMetrics(Landroid/util/DisplayMetrics;)V" since="17" deprecated="31" />
+		<method name="getRealSize(Landroid/graphics/Point;)V" since="17" deprecated="31" />
+		<method name="getRectSize(Landroid/graphics/Rect;)V" since="13" deprecated="30" />
+		<method name="getRefreshRate()F" />
+		<method name="getRotation()I" since="8" />
+		<method name="getRoundedCorner(I)Landroid/view/RoundedCorner;" since="31" />
+		<method name="getSize(Landroid/graphics/Point;)V" since="13" deprecated="30" />
+		<method name="getState()I" since="20" />
+		<method name="getSupportedModes()[Landroid/view/Display$Mode;" since="23" />
+		<method name="getSupportedRefreshRates()[F" since="21" deprecated="23" />
+		<method name="getWidth()I" deprecated="15" />
+		<method name="isHdr()Z" since="26" />
+		<method name="isMinimalPostProcessingSupported()Z" since="30" />
+		<method name="isValid()Z" since="17" />
+		<method name="isWideColorGamut()Z" since="26" />
+		<field name="DEFAULT_DISPLAY" />
+		<field name="FLAG_PRESENTATION" since="19" />
+		<field name="FLAG_PRIVATE" since="19" />
+		<field name="FLAG_ROUND" since="23" />
+		<field name="FLAG_SECURE" since="17" />
+		<field name="FLAG_SUPPORTS_PROTECTED_BUFFERS" since="17" />
+		<field name="INVALID_DISPLAY" since="23" />
+		<field name="STATE_DOZE" since="21" />
+		<field name="STATE_DOZE_SUSPEND" since="21" />
+		<field name="STATE_DOZING" since="20" removed="21" />
+		<field name="STATE_OFF" since="20" />
+		<field name="STATE_ON" since="20" />
+		<field name="STATE_ON_SUSPEND" since="28" />
+		<field name="STATE_UNKNOWN" since="20" />
+		<field name="STATE_VR" since="26" />
+	</class>
+	<class name="android/view/Display$HdrCapabilities" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDesiredMaxAverageLuminance()F" />
+		<method name="getDesiredMaxLuminance()F" />
+		<method name="getDesiredMinLuminance()F" />
+		<method name="getSupportedHdrTypes()[I" />
+		<field name="CREATOR" />
+		<field name="HDR_TYPE_DOLBY_VISION" />
+		<field name="HDR_TYPE_HDR10" />
+		<field name="HDR_TYPE_HDR10_PLUS" since="29" />
+		<field name="HDR_TYPE_HLG" />
+		<field name="INVALID_LUMINANCE" />
+	</class>
+	<class name="android/view/Display$Mode" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAlternativeRefreshRates()[F" since="31" />
+		<method name="getModeId()I" />
+		<method name="getPhysicalHeight()I" />
+		<method name="getPhysicalWidth()I" />
+		<method name="getRefreshRate()F" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/DisplayCutout" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Insets;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V" since="29" />
+		<method name="&lt;init&gt;(Landroid/graphics/Insets;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Insets;)V" since="30" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;Ljava/util/List;)V" deprecated="29" />
+		<method name="getBoundingRectBottom()Landroid/graphics/Rect;" since="29" />
+		<method name="getBoundingRectLeft()Landroid/graphics/Rect;" since="29" />
+		<method name="getBoundingRectRight()Landroid/graphics/Rect;" since="29" />
+		<method name="getBoundingRectTop()Landroid/graphics/Rect;" since="29" />
+		<method name="getBoundingRects()Ljava/util/List;" />
+		<method name="getCutoutPath()Landroid/graphics/Path;" since="31" />
+		<method name="getSafeInsetBottom()I" />
+		<method name="getSafeInsetLeft()I" />
+		<method name="getSafeInsetRight()I" />
+		<method name="getSafeInsetTop()I" />
+		<method name="getWaterfallInsets()Landroid/graphics/Insets;" since="30" />
+	</class>
+	<class name="android/view/DragAndDropPermissions" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="release()V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/DragEvent" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAction()I" />
+		<method name="getClipData()Landroid/content/ClipData;" />
+		<method name="getClipDescription()Landroid/content/ClipDescription;" />
+		<method name="getLocalState()Ljava/lang/Object;" />
+		<method name="getResult()Z" />
+		<method name="getX()F" />
+		<method name="getY()F" />
+		<field name="ACTION_DRAG_ENDED" />
+		<field name="ACTION_DRAG_ENTERED" />
+		<field name="ACTION_DRAG_EXITED" />
+		<field name="ACTION_DRAG_LOCATION" />
+		<field name="ACTION_DRAG_STARTED" />
+		<field name="ACTION_DROP" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/FocusFinder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="findNearestTouchable(Landroid/view/ViewGroup;III[I)Landroid/view/View;" />
+		<method name="findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;" />
+		<method name="findNextFocusFromRect(Landroid/view/ViewGroup;Landroid/graphics/Rect;I)Landroid/view/View;" />
+		<method name="findNextKeyboardNavigationCluster(Landroid/view/View;Landroid/view/View;I)Landroid/view/View;" since="26" />
+		<method name="getInstance()Landroid/view/FocusFinder;" />
+	</class>
+	<class name="android/view/FrameMetrics" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/FrameMetrics;)V" />
+		<method name="getMetric(I)J" />
+		<field name="ANIMATION_DURATION" />
+		<field name="COMMAND_ISSUE_DURATION" />
+		<field name="DEADLINE" since="31" />
+		<field name="DRAW_DURATION" />
+		<field name="FIRST_DRAW_FRAME" />
+		<field name="GPU_DURATION" since="31" />
+		<field name="INPUT_HANDLING_DURATION" />
+		<field name="INTENDED_VSYNC_TIMESTAMP" since="26" />
+		<field name="LAYOUT_MEASURE_DURATION" />
+		<field name="SWAP_BUFFERS_DURATION" />
+		<field name="SYNC_DURATION" />
+		<field name="TOTAL_DURATION" />
+		<field name="UNKNOWN_DELAY_DURATION" />
+		<field name="VSYNC_TIMESTAMP" since="26" />
+	</class>
+	<class name="android/view/FrameStats" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getEndTimeNano()J" />
+		<method name="getFrameCount()I" />
+		<method name="getFramePresentedTimeNano(I)J" />
+		<method name="getRefreshPeriodNano()J" />
+		<method name="getStartTimeNano()J" />
+		<field name="UNDEFINED_TIME_NANO" />
+	</class>
+	<class name="android/view/GestureDetector" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;Z)V" since="8" />
+		<method name="&lt;init&gt;(Landroid/view/GestureDetector$OnGestureListener;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" deprecated="15" />
+		<method name="isLongpressEnabled()Z" />
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="23" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V" since="23" />
+		<method name="setIsLongpressEnabled(Z)V" />
+		<method name="setOnDoubleTapListener(Landroid/view/GestureDetector$OnDoubleTapListener;)V" since="3" />
+	</class>
+	<class name="android/view/GestureDetector$OnContextClickListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onContextClick(Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/view/GestureDetector$OnDoubleTapListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onDoubleTap(Landroid/view/MotionEvent;)Z" />
+		<method name="onDoubleTapEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onSingleTapConfirmed(Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/view/GestureDetector$OnGestureListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onDown(Landroid/view/MotionEvent;)Z" />
+		<method name="onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z" />
+		<method name="onLongPress(Landroid/view/MotionEvent;)V" />
+		<method name="onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z" />
+		<method name="onShowPress(Landroid/view/MotionEvent;)V" />
+		<method name="onSingleTapUp(Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/view/GestureDetector$SimpleOnGestureListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/GestureDetector$OnContextClickListener" since="23" />
+		<implements name="android/view/GestureDetector$OnDoubleTapListener" since="3" />
+		<implements name="android/view/GestureDetector$OnGestureListener" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/view/Gravity" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;)V" />
+		<method name="apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;I)V" since="17" />
+		<method name="apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;)V" />
+		<method name="apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;I)V" since="17" />
+		<method name="applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;)V" since="3" />
+		<method name="applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;I)V" since="17" />
+		<method name="getAbsoluteGravity(II)I" since="14" />
+		<method name="isHorizontal(I)Z" />
+		<method name="isVertical(I)Z" />
+		<field name="AXIS_CLIP" since="3" />
+		<field name="AXIS_PULL_AFTER" />
+		<field name="AXIS_PULL_BEFORE" />
+		<field name="AXIS_SPECIFIED" />
+		<field name="AXIS_X_SHIFT" />
+		<field name="AXIS_Y_SHIFT" />
+		<field name="BOTTOM" />
+		<field name="CENTER" />
+		<field name="CENTER_HORIZONTAL" />
+		<field name="CENTER_VERTICAL" />
+		<field name="CLIP_HORIZONTAL" since="3" />
+		<field name="CLIP_VERTICAL" since="3" />
+		<field name="DISPLAY_CLIP_HORIZONTAL" since="3" />
+		<field name="DISPLAY_CLIP_VERTICAL" since="3" />
+		<field name="END" since="14" />
+		<field name="FILL" />
+		<field name="FILL_HORIZONTAL" />
+		<field name="FILL_VERTICAL" />
+		<field name="HORIZONTAL_GRAVITY_MASK" />
+		<field name="LEFT" />
+		<field name="NO_GRAVITY" />
+		<field name="RELATIVE_HORIZONTAL_GRAVITY_MASK" since="14" />
+		<field name="RELATIVE_LAYOUT_DIRECTION" since="14" />
+		<field name="RIGHT" />
+		<field name="START" since="14" />
+		<field name="TOP" />
+		<field name="VERTICAL_GRAVITY_MASK" />
+	</class>
+	<class name="android/view/HapticFeedbackConstants" since="3">
+		<extends name="java/lang/Object" />
+		<field name="CLOCK_TICK" since="21" />
+		<field name="CONFIRM" since="30" />
+		<field name="CONTEXT_CLICK" since="23" />
+		<field name="FLAG_IGNORE_GLOBAL_SETTING" />
+		<field name="FLAG_IGNORE_VIEW_SETTING" />
+		<field name="GESTURE_END" since="30" />
+		<field name="GESTURE_START" since="30" />
+		<field name="KEYBOARD_PRESS" since="27" />
+		<field name="KEYBOARD_RELEASE" since="27" />
+		<field name="KEYBOARD_TAP" since="8" />
+		<field name="LONG_PRESS" />
+		<field name="REJECT" since="30" />
+		<field name="TEXT_HANDLE_MOVE" since="27" />
+		<field name="VIRTUAL_KEY" since="5" />
+		<field name="VIRTUAL_KEY_RELEASE" since="27" />
+	</class>
+	<class name="android/view/InflateException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="android/view/InputDevice" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getBatteryState()Landroid/hardware/BatteryState;" since="31" />
+		<method name="getControllerNumber()I" since="19" />
+		<method name="getDescriptor()Ljava/lang/String;" since="16" />
+		<method name="getDevice(I)Landroid/view/InputDevice;" />
+		<method name="getDeviceIds()[I" />
+		<method name="getId()I" />
+		<method name="getKeyCharacterMap()Landroid/view/KeyCharacterMap;" />
+		<method name="getKeyboardType()I" />
+		<method name="getLightsManager()Landroid/hardware/lights/LightsManager;" since="31" />
+		<method name="getMotionRange(I)Landroid/view/InputDevice$MotionRange;" />
+		<method name="getMotionRange(II)Landroid/view/InputDevice$MotionRange;" since="12" />
+		<method name="getMotionRanges()Ljava/util/List;" since="12" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getProductId()I" since="19" />
+		<method name="getSensorManager()Landroid/hardware/SensorManager;" since="31" />
+		<method name="getSources()I" />
+		<method name="getVendorId()I" since="19" />
+		<method name="getVibrator()Landroid/os/Vibrator;" since="16" deprecated="31" />
+		<method name="getVibratorManager()Landroid/os/VibratorManager;" since="31" />
+		<method name="hasKeys([I)[Z" since="19" />
+		<method name="hasMicrophone()Z" since="23" />
+		<method name="isEnabled()Z" since="27" />
+		<method name="isExternal()Z" since="29" />
+		<method name="isVirtual()Z" since="16" />
+		<method name="supportsSource(I)Z" since="21" />
+		<field name="CREATOR" />
+		<field name="KEYBOARD_TYPE_ALPHABETIC" />
+		<field name="KEYBOARD_TYPE_NONE" />
+		<field name="KEYBOARD_TYPE_NON_ALPHABETIC" />
+		<field name="MOTION_RANGE_ORIENTATION" deprecated="15" />
+		<field name="MOTION_RANGE_PRESSURE" deprecated="15" />
+		<field name="MOTION_RANGE_SIZE" deprecated="15" />
+		<field name="MOTION_RANGE_TOOL_MAJOR" deprecated="15" />
+		<field name="MOTION_RANGE_TOOL_MINOR" deprecated="15" />
+		<field name="MOTION_RANGE_TOUCH_MAJOR" deprecated="15" />
+		<field name="MOTION_RANGE_TOUCH_MINOR" deprecated="15" />
+		<field name="MOTION_RANGE_X" deprecated="15" />
+		<field name="MOTION_RANGE_Y" deprecated="15" />
+		<field name="SOURCE_ANY" />
+		<field name="SOURCE_BLUETOOTH_STYLUS" since="23" />
+		<field name="SOURCE_CLASS_BUTTON" />
+		<field name="SOURCE_CLASS_JOYSTICK" since="12" />
+		<field name="SOURCE_CLASS_MASK" />
+		<field name="SOURCE_CLASS_NONE" since="18" />
+		<field name="SOURCE_CLASS_POINTER" />
+		<field name="SOURCE_CLASS_POSITION" />
+		<field name="SOURCE_CLASS_TRACKBALL" />
+		<field name="SOURCE_DPAD" />
+		<field name="SOURCE_GAMEPAD" since="12" />
+		<field name="SOURCE_HDMI" since="21" />
+		<field name="SOURCE_JOYSTICK" since="12" />
+		<field name="SOURCE_KEYBOARD" />
+		<field name="SOURCE_MOUSE" />
+		<field name="SOURCE_MOUSE_RELATIVE" since="26" />
+		<field name="SOURCE_ROTARY_ENCODER" since="26" />
+		<field name="SOURCE_SENSOR" since="31" />
+		<field name="SOURCE_STYLUS" since="14" />
+		<field name="SOURCE_TOUCHPAD" />
+		<field name="SOURCE_TOUCHSCREEN" />
+		<field name="SOURCE_TOUCH_NAVIGATION" since="18" />
+		<field name="SOURCE_TRACKBALL" />
+		<field name="SOURCE_UNKNOWN" />
+	</class>
+	<class name="android/view/InputDevice$MotionRange" since="9">
+		<extends name="java/lang/Object" />
+		<method name="getAxis()I" since="12" />
+		<method name="getFlat()F" />
+		<method name="getFuzz()F" />
+		<method name="getMax()F" />
+		<method name="getMin()F" />
+		<method name="getRange()F" />
+		<method name="getResolution()F" since="18" />
+		<method name="getSource()I" since="12" />
+		<method name="isFromSource(I)Z" since="18" />
+	</class>
+	<class name="android/view/InputEvent" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDevice()Landroid/view/InputDevice;" />
+		<method name="getDeviceId()I" />
+		<method name="getEventTime()J" since="16" />
+		<method name="getSource()I" />
+		<method name="isFromSource(I)Z" since="18" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/InputQueue" since="9">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/view/InputQueue$Callback" since="9">
+		<extends name="java/lang/Object" />
+		<method name="onInputQueueCreated(Landroid/view/InputQueue;)V" />
+		<method name="onInputQueueDestroyed(Landroid/view/InputQueue;)V" />
+	</class>
+	<class name="android/view/KeyCharacterMap" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="16" />
+		<method name="deviceHasKey(I)Z" since="3" />
+		<method name="deviceHasKeys([I)[Z" since="3" />
+		<method name="get(II)I" />
+		<method name="getDeadChar(II)I" />
+		<method name="getDisplayLabel(I)C" />
+		<method name="getEvents([C)[Landroid/view/KeyEvent;" />
+		<method name="getKeyData(ILandroid/view/KeyCharacterMap$KeyData;)Z" deprecated="15" />
+		<method name="getKeyboardType()I" />
+		<method name="getMatch(I[C)C" />
+		<method name="getMatch(I[CI)C" />
+		<method name="getModifierBehavior()I" since="11" />
+		<method name="getNumber(I)C" />
+		<method name="isPrintingKey(I)Z" />
+		<method name="load(I)Landroid/view/KeyCharacterMap;" />
+		<field name="ALPHA" />
+		<field name="BUILT_IN_KEYBOARD" deprecated="15" />
+		<field name="COMBINING_ACCENT" />
+		<field name="COMBINING_ACCENT_MASK" />
+		<field name="CREATOR" since="16" />
+		<field name="FULL" since="11" />
+		<field name="HEX_INPUT" />
+		<field name="MODIFIER_BEHAVIOR_CHORDED" since="11" />
+		<field name="MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED" since="11" />
+		<field name="NUMERIC" />
+		<field name="PICKER_DIALOG_INPUT" />
+		<field name="PREDICTIVE" />
+		<field name="SPECIAL_FUNCTION" since="11" />
+		<field name="VIRTUAL_KEYBOARD" since="11" />
+	</class>
+	<class name="android/view/KeyCharacterMap$KeyData" since="1" deprecated="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<field name="META_LENGTH" deprecated="29" />
+		<field name="displayLabel" deprecated="29" />
+		<field name="meta" deprecated="29" />
+		<field name="number" deprecated="29" />
+	</class>
+	<class name="android/view/KeyCharacterMap$UnavailableException" since="11">
+		<extends name="android/util/AndroidRuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/view/KeyEvent" since="1">
+		<extends name="android/view/InputEvent" since="9" />
+		<extends name="java/lang/Object" removed="9" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(JJIII)V" />
+		<method name="&lt;init&gt;(JJIIII)V" />
+		<method name="&lt;init&gt;(JJIIIIII)V" />
+		<method name="&lt;init&gt;(JJIIIIIII)V" />
+		<method name="&lt;init&gt;(JJIIIIIIII)V" since="9" />
+		<method name="&lt;init&gt;(JLjava/lang/String;II)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/view/KeyEvent;)V" since="3" />
+		<method name="&lt;init&gt;(Landroid/view/KeyEvent;JI)V" deprecated="15" />
+		<method name="changeAction(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3" />
+		<method name="changeFlags(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3" />
+		<method name="changeTimeRepeat(Landroid/view/KeyEvent;JI)Landroid/view/KeyEvent;" since="3" />
+		<method name="changeTimeRepeat(Landroid/view/KeyEvent;JII)Landroid/view/KeyEvent;" since="5" />
+		<method name="dispatch(Landroid/view/KeyEvent$Callback;)Z" deprecated="15" />
+		<method name="dispatch(Landroid/view/KeyEvent$Callback;Landroid/view/KeyEvent$DispatcherState;Ljava/lang/Object;)Z" since="5" />
+		<method name="getAction()I" />
+		<method name="getCharacters()Ljava/lang/String;" since="3" deprecated="29" />
+		<method name="getDeadChar(II)I" />
+		<method name="getDeviceId()I" />
+		<method name="getDisplayLabel()C" />
+		<method name="getDownTime()J" />
+		<method name="getEventTime()J" />
+		<method name="getFlags()I" />
+		<method name="getKeyCharacterMap()Landroid/view/KeyCharacterMap;" since="11" />
+		<method name="getKeyCode()I" />
+		<method name="getKeyData(Landroid/view/KeyCharacterMap$KeyData;)Z" deprecated="15" />
+		<method name="getMatch([C)C" />
+		<method name="getMatch([CI)C" />
+		<method name="getMaxKeyCode()I" since="3" />
+		<method name="getMetaState()I" />
+		<method name="getModifierMetaStateMask()I" since="11" />
+		<method name="getModifiers()I" since="13" />
+		<method name="getNumber()C" />
+		<method name="getRepeatCount()I" />
+		<method name="getScanCode()I" />
+		<method name="getUnicodeChar()I" />
+		<method name="getUnicodeChar(I)I" />
+		<method name="hasModifiers(I)Z" since="11" />
+		<method name="hasNoModifiers()Z" since="11" />
+		<method name="isAltPressed()Z" />
+		<method name="isCanceled()Z" since="5" />
+		<method name="isCapsLockOn()Z" since="11" />
+		<method name="isCtrlPressed()Z" since="11" />
+		<method name="isFunctionPressed()Z" since="11" />
+		<method name="isGamepadButton(I)Z" since="12" />
+		<method name="isLongPress()Z" since="5" />
+		<method name="isMediaSessionKey(I)Z" since="31" />
+		<method name="isMetaPressed()Z" since="11" />
+		<method name="isModifierKey(I)Z" />
+		<method name="isNumLockOn()Z" since="11" />
+		<method name="isPrintingKey()Z" />
+		<method name="isScrollLockOn()Z" since="11" />
+		<method name="isShiftPressed()Z" />
+		<method name="isSymPressed()Z" />
+		<method name="isSystem()Z" />
+		<method name="isTracking()Z" since="5" />
+		<method name="keyCodeFromString(Ljava/lang/String;)I" since="12" />
+		<method name="keyCodeToString(I)Ljava/lang/String;" since="12" />
+		<method name="metaStateHasModifiers(II)Z" since="11" />
+		<method name="metaStateHasNoModifiers(I)Z" since="11" />
+		<method name="normalizeMetaState(I)I" since="11" />
+		<method name="setSource(I)V" since="12" />
+		<method name="startTracking()V" since="5" />
+		<field name="ACTION_DOWN" />
+		<field name="ACTION_MULTIPLE" deprecated="29" />
+		<field name="ACTION_UP" />
+		<field name="CREATOR" />
+		<field name="FLAG_CANCELED" since="5" />
+		<field name="FLAG_CANCELED_LONG_PRESS" since="5" />
+		<field name="FLAG_EDITOR_ACTION" since="3" />
+		<field name="FLAG_FALLBACK" since="11" />
+		<field name="FLAG_FROM_SYSTEM" since="3" />
+		<field name="FLAG_KEEP_TOUCH_MODE" since="3" />
+		<field name="FLAG_LONG_PRESS" since="5" />
+		<field name="FLAG_SOFT_KEYBOARD" since="3" />
+		<field name="FLAG_TRACKING" since="5" />
+		<field name="FLAG_VIRTUAL_HARD_KEY" since="5" />
+		<field name="FLAG_WOKE_HERE" deprecated="20" />
+		<field name="KEYCODE_0" />
+		<field name="KEYCODE_1" />
+		<field name="KEYCODE_11" since="21" />
+		<field name="KEYCODE_12" since="21" />
+		<field name="KEYCODE_2" />
+		<field name="KEYCODE_3" />
+		<field name="KEYCODE_3D_MODE" since="14" />
+		<field name="KEYCODE_4" />
+		<field name="KEYCODE_5" />
+		<field name="KEYCODE_6" />
+		<field name="KEYCODE_7" />
+		<field name="KEYCODE_8" />
+		<field name="KEYCODE_9" />
+		<field name="KEYCODE_A" />
+		<field name="KEYCODE_ALL_APPS" since="28" />
+		<field name="KEYCODE_ALT_LEFT" />
+		<field name="KEYCODE_ALT_RIGHT" />
+		<field name="KEYCODE_APOSTROPHE" />
+		<field name="KEYCODE_APP_SWITCH" since="11" />
+		<field name="KEYCODE_ASSIST" since="16" />
+		<field name="KEYCODE_AT" />
+		<field name="KEYCODE_AVR_INPUT" since="11" />
+		<field name="KEYCODE_AVR_POWER" since="11" />
+		<field name="KEYCODE_B" />
+		<field name="KEYCODE_BACK" />
+		<field name="KEYCODE_BACKSLASH" />
+		<field name="KEYCODE_BOOKMARK" since="11" />
+		<field name="KEYCODE_BREAK" since="11" />
+		<field name="KEYCODE_BRIGHTNESS_DOWN" since="18" />
+		<field name="KEYCODE_BRIGHTNESS_UP" since="18" />
+		<field name="KEYCODE_BUTTON_1" since="12" />
+		<field name="KEYCODE_BUTTON_10" since="12" />
+		<field name="KEYCODE_BUTTON_11" since="12" />
+		<field name="KEYCODE_BUTTON_12" since="12" />
+		<field name="KEYCODE_BUTTON_13" since="12" />
+		<field name="KEYCODE_BUTTON_14" since="12" />
+		<field name="KEYCODE_BUTTON_15" since="12" />
+		<field name="KEYCODE_BUTTON_16" since="12" />
+		<field name="KEYCODE_BUTTON_2" since="12" />
+		<field name="KEYCODE_BUTTON_3" since="12" />
+		<field name="KEYCODE_BUTTON_4" since="12" />
+		<field name="KEYCODE_BUTTON_5" since="12" />
+		<field name="KEYCODE_BUTTON_6" since="12" />
+		<field name="KEYCODE_BUTTON_7" since="12" />
+		<field name="KEYCODE_BUTTON_8" since="12" />
+		<field name="KEYCODE_BUTTON_9" since="12" />
+		<field name="KEYCODE_BUTTON_A" since="9" />
+		<field name="KEYCODE_BUTTON_B" since="9" />
+		<field name="KEYCODE_BUTTON_C" since="9" />
+		<field name="KEYCODE_BUTTON_L1" since="9" />
+		<field name="KEYCODE_BUTTON_L2" since="9" />
+		<field name="KEYCODE_BUTTON_MODE" since="9" />
+		<field name="KEYCODE_BUTTON_R1" since="9" />
+		<field name="KEYCODE_BUTTON_R2" since="9" />
+		<field name="KEYCODE_BUTTON_SELECT" since="9" />
+		<field name="KEYCODE_BUTTON_START" since="9" />
+		<field name="KEYCODE_BUTTON_THUMBL" since="9" />
+		<field name="KEYCODE_BUTTON_THUMBR" since="9" />
+		<field name="KEYCODE_BUTTON_X" since="9" />
+		<field name="KEYCODE_BUTTON_Y" since="9" />
+		<field name="KEYCODE_BUTTON_Z" since="9" />
+		<field name="KEYCODE_C" />
+		<field name="KEYCODE_CALCULATOR" since="15" />
+		<field name="KEYCODE_CALENDAR" since="15" />
+		<field name="KEYCODE_CALL" />
+		<field name="KEYCODE_CAMERA" />
+		<field name="KEYCODE_CAPS_LOCK" since="11" />
+		<field name="KEYCODE_CAPTIONS" since="11" />
+		<field name="KEYCODE_CHANNEL_DOWN" since="11" />
+		<field name="KEYCODE_CHANNEL_UP" since="11" />
+		<field name="KEYCODE_CLEAR" />
+		<field name="KEYCODE_COMMA" />
+		<field name="KEYCODE_CONTACTS" since="15" />
+		<field name="KEYCODE_COPY" since="24" />
+		<field name="KEYCODE_CTRL_LEFT" since="11" />
+		<field name="KEYCODE_CTRL_RIGHT" since="11" />
+		<field name="KEYCODE_CUT" since="24" />
+		<field name="KEYCODE_D" />
+		<field name="KEYCODE_DEL" />
+		<field name="KEYCODE_DPAD_CENTER" />
+		<field name="KEYCODE_DPAD_DOWN" />
+		<field name="KEYCODE_DPAD_DOWN_LEFT" since="24" />
+		<field name="KEYCODE_DPAD_DOWN_RIGHT" since="24" />
+		<field name="KEYCODE_DPAD_LEFT" />
+		<field name="KEYCODE_DPAD_RIGHT" />
+		<field name="KEYCODE_DPAD_UP" />
+		<field name="KEYCODE_DPAD_UP_LEFT" since="24" />
+		<field name="KEYCODE_DPAD_UP_RIGHT" since="24" />
+		<field name="KEYCODE_DVR" since="11" />
+		<field name="KEYCODE_E" />
+		<field name="KEYCODE_EISU" since="16" />
+		<field name="KEYCODE_ENDCALL" />
+		<field name="KEYCODE_ENTER" />
+		<field name="KEYCODE_ENVELOPE" />
+		<field name="KEYCODE_EQUALS" />
+		<field name="KEYCODE_ESCAPE" since="11" />
+		<field name="KEYCODE_EXPLORER" />
+		<field name="KEYCODE_F" />
+		<field name="KEYCODE_F1" since="11" />
+		<field name="KEYCODE_F10" since="11" />
+		<field name="KEYCODE_F11" since="11" />
+		<field name="KEYCODE_F12" since="11" />
+		<field name="KEYCODE_F2" since="11" />
+		<field name="KEYCODE_F3" since="11" />
+		<field name="KEYCODE_F4" since="11" />
+		<field name="KEYCODE_F5" since="11" />
+		<field name="KEYCODE_F6" since="11" />
+		<field name="KEYCODE_F7" since="11" />
+		<field name="KEYCODE_F8" since="11" />
+		<field name="KEYCODE_F9" since="11" />
+		<field name="KEYCODE_FOCUS" />
+		<field name="KEYCODE_FORWARD" since="11" />
+		<field name="KEYCODE_FORWARD_DEL" since="11" />
+		<field name="KEYCODE_FUNCTION" since="11" />
+		<field name="KEYCODE_G" />
+		<field name="KEYCODE_GRAVE" />
+		<field name="KEYCODE_GUIDE" since="11" />
+		<field name="KEYCODE_H" />
+		<field name="KEYCODE_HEADSETHOOK" />
+		<field name="KEYCODE_HELP" since="21" />
+		<field name="KEYCODE_HENKAN" since="16" />
+		<field name="KEYCODE_HOME" />
+		<field name="KEYCODE_I" />
+		<field name="KEYCODE_INFO" since="11" />
+		<field name="KEYCODE_INSERT" since="11" />
+		<field name="KEYCODE_J" />
+		<field name="KEYCODE_K" />
+		<field name="KEYCODE_KANA" since="16" />
+		<field name="KEYCODE_KATAKANA_HIRAGANA" since="16" />
+		<field name="KEYCODE_L" />
+		<field name="KEYCODE_LANGUAGE_SWITCH" since="14" />
+		<field name="KEYCODE_LAST_CHANNEL" since="21" />
+		<field name="KEYCODE_LEFT_BRACKET" />
+		<field name="KEYCODE_M" />
+		<field name="KEYCODE_MANNER_MODE" since="14" />
+		<field name="KEYCODE_MEDIA_AUDIO_TRACK" since="19" />
+		<field name="KEYCODE_MEDIA_CLOSE" since="11" />
+		<field name="KEYCODE_MEDIA_EJECT" since="11" />
+		<field name="KEYCODE_MEDIA_FAST_FORWARD" since="3" />
+		<field name="KEYCODE_MEDIA_NEXT" since="3" />
+		<field name="KEYCODE_MEDIA_PAUSE" since="11" />
+		<field name="KEYCODE_MEDIA_PLAY" since="11" />
+		<field name="KEYCODE_MEDIA_PLAY_PAUSE" since="3" />
+		<field name="KEYCODE_MEDIA_PREVIOUS" since="3" />
+		<field name="KEYCODE_MEDIA_RECORD" since="11" />
+		<field name="KEYCODE_MEDIA_REWIND" since="3" />
+		<field name="KEYCODE_MEDIA_SKIP_BACKWARD" since="23" />
+		<field name="KEYCODE_MEDIA_SKIP_FORWARD" since="23" />
+		<field name="KEYCODE_MEDIA_STEP_BACKWARD" since="23" />
+		<field name="KEYCODE_MEDIA_STEP_FORWARD" since="23" />
+		<field name="KEYCODE_MEDIA_STOP" since="3" />
+		<field name="KEYCODE_MEDIA_TOP_MENU" since="21" />
+		<field name="KEYCODE_MENU" />
+		<field name="KEYCODE_META_LEFT" since="11" />
+		<field name="KEYCODE_META_RIGHT" since="11" />
+		<field name="KEYCODE_MINUS" />
+		<field name="KEYCODE_MOVE_END" since="11" />
+		<field name="KEYCODE_MOVE_HOME" since="11" />
+		<field name="KEYCODE_MUHENKAN" since="16" />
+		<field name="KEYCODE_MUSIC" since="15" />
+		<field name="KEYCODE_MUTE" since="3" />
+		<field name="KEYCODE_N" />
+		<field name="KEYCODE_NAVIGATE_IN" since="23" />
+		<field name="KEYCODE_NAVIGATE_NEXT" since="23" />
+		<field name="KEYCODE_NAVIGATE_OUT" since="23" />
+		<field name="KEYCODE_NAVIGATE_PREVIOUS" since="23" />
+		<field name="KEYCODE_NOTIFICATION" />
+		<field name="KEYCODE_NUM" />
+		<field name="KEYCODE_NUMPAD_0" since="11" />
+		<field name="KEYCODE_NUMPAD_1" since="11" />
+		<field name="KEYCODE_NUMPAD_2" since="11" />
+		<field name="KEYCODE_NUMPAD_3" since="11" />
+		<field name="KEYCODE_NUMPAD_4" since="11" />
+		<field name="KEYCODE_NUMPAD_5" since="11" />
+		<field name="KEYCODE_NUMPAD_6" since="11" />
+		<field name="KEYCODE_NUMPAD_7" since="11" />
+		<field name="KEYCODE_NUMPAD_8" since="11" />
+		<field name="KEYCODE_NUMPAD_9" since="11" />
+		<field name="KEYCODE_NUMPAD_ADD" since="11" />
+		<field name="KEYCODE_NUMPAD_COMMA" since="11" />
+		<field name="KEYCODE_NUMPAD_DIVIDE" since="11" />
+		<field name="KEYCODE_NUMPAD_DOT" since="11" />
+		<field name="KEYCODE_NUMPAD_ENTER" since="11" />
+		<field name="KEYCODE_NUMPAD_EQUALS" since="11" />
+		<field name="KEYCODE_NUMPAD_LEFT_PAREN" since="11" />
+		<field name="KEYCODE_NUMPAD_MULTIPLY" since="11" />
+		<field name="KEYCODE_NUMPAD_RIGHT_PAREN" since="11" />
+		<field name="KEYCODE_NUMPAD_SUBTRACT" since="11" />
+		<field name="KEYCODE_NUM_LOCK" since="11" />
+		<field name="KEYCODE_O" />
+		<field name="KEYCODE_P" />
+		<field name="KEYCODE_PAGE_DOWN" since="9" />
+		<field name="KEYCODE_PAGE_UP" since="9" />
+		<field name="KEYCODE_PAIRING" since="21" />
+		<field name="KEYCODE_PASTE" since="24" />
+		<field name="KEYCODE_PERIOD" />
+		<field name="KEYCODE_PICTSYMBOLS" since="9" />
+		<field name="KEYCODE_PLUS" />
+		<field name="KEYCODE_POUND" />
+		<field name="KEYCODE_POWER" />
+		<field name="KEYCODE_PROFILE_SWITCH" since="29" />
+		<field name="KEYCODE_PROG_BLUE" since="11" />
+		<field name="KEYCODE_PROG_GREEN" since="11" />
+		<field name="KEYCODE_PROG_RED" since="11" />
+		<field name="KEYCODE_PROG_YELLOW" since="11" />
+		<field name="KEYCODE_Q" />
+		<field name="KEYCODE_R" />
+		<field name="KEYCODE_REFRESH" since="28" />
+		<field name="KEYCODE_RIGHT_BRACKET" />
+		<field name="KEYCODE_RO" since="16" />
+		<field name="KEYCODE_S" />
+		<field name="KEYCODE_SCROLL_LOCK" since="11" />
+		<field name="KEYCODE_SEARCH" />
+		<field name="KEYCODE_SEMICOLON" />
+		<field name="KEYCODE_SETTINGS" since="11" />
+		<field name="KEYCODE_SHIFT_LEFT" />
+		<field name="KEYCODE_SHIFT_RIGHT" />
+		<field name="KEYCODE_SLASH" />
+		<field name="KEYCODE_SLEEP" since="20" />
+		<field name="KEYCODE_SOFT_LEFT" />
+		<field name="KEYCODE_SOFT_RIGHT" />
+		<field name="KEYCODE_SOFT_SLEEP" since="24" />
+		<field name="KEYCODE_SPACE" />
+		<field name="KEYCODE_STAR" />
+		<field name="KEYCODE_STB_INPUT" since="11" />
+		<field name="KEYCODE_STB_POWER" since="11" />
+		<field name="KEYCODE_STEM_1" since="24" />
+		<field name="KEYCODE_STEM_2" since="24" />
+		<field name="KEYCODE_STEM_3" since="24" />
+		<field name="KEYCODE_STEM_PRIMARY" since="24" />
+		<field name="KEYCODE_SWITCH_CHARSET" since="9" />
+		<field name="KEYCODE_SYM" />
+		<field name="KEYCODE_SYSRQ" since="11" />
+		<field name="KEYCODE_SYSTEM_NAVIGATION_DOWN" since="25" />
+		<field name="KEYCODE_SYSTEM_NAVIGATION_LEFT" since="25" />
+		<field name="KEYCODE_SYSTEM_NAVIGATION_RIGHT" since="25" />
+		<field name="KEYCODE_SYSTEM_NAVIGATION_UP" since="25" />
+		<field name="KEYCODE_T" />
+		<field name="KEYCODE_TAB" />
+		<field name="KEYCODE_THUMBS_DOWN" since="29" />
+		<field name="KEYCODE_THUMBS_UP" since="29" />
+		<field name="KEYCODE_TV" since="11" />
+		<field name="KEYCODE_TV_ANTENNA_CABLE" since="21" />
+		<field name="KEYCODE_TV_AUDIO_DESCRIPTION" since="21" />
+		<field name="KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN" since="21" />
+		<field name="KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP" since="21" />
+		<field name="KEYCODE_TV_CONTENTS_MENU" since="21" />
+		<field name="KEYCODE_TV_DATA_SERVICE" since="21" />
+		<field name="KEYCODE_TV_INPUT" since="11" />
+		<field name="KEYCODE_TV_INPUT_COMPONENT_1" since="21" />
+		<field name="KEYCODE_TV_INPUT_COMPONENT_2" since="21" />
+		<field name="KEYCODE_TV_INPUT_COMPOSITE_1" since="21" />
+		<field name="KEYCODE_TV_INPUT_COMPOSITE_2" since="21" />
+		<field name="KEYCODE_TV_INPUT_HDMI_1" since="21" />
+		<field name="KEYCODE_TV_INPUT_HDMI_2" since="21" />
+		<field name="KEYCODE_TV_INPUT_HDMI_3" since="21" />
+		<field name="KEYCODE_TV_INPUT_HDMI_4" since="21" />
+		<field name="KEYCODE_TV_INPUT_VGA_1" since="21" />
+		<field name="KEYCODE_TV_MEDIA_CONTEXT_MENU" since="21" />
+		<field name="KEYCODE_TV_NETWORK" since="21" />
+		<field name="KEYCODE_TV_NUMBER_ENTRY" since="21" />
+		<field name="KEYCODE_TV_POWER" since="11" />
+		<field name="KEYCODE_TV_RADIO_SERVICE" since="21" />
+		<field name="KEYCODE_TV_SATELLITE" since="21" />
+		<field name="KEYCODE_TV_SATELLITE_BS" since="21" />
+		<field name="KEYCODE_TV_SATELLITE_CS" since="21" />
+		<field name="KEYCODE_TV_SATELLITE_SERVICE" since="21" />
+		<field name="KEYCODE_TV_TELETEXT" since="21" />
+		<field name="KEYCODE_TV_TERRESTRIAL_ANALOG" since="21" />
+		<field name="KEYCODE_TV_TERRESTRIAL_DIGITAL" since="21" />
+		<field name="KEYCODE_TV_TIMER_PROGRAMMING" since="21" />
+		<field name="KEYCODE_TV_ZOOM_MODE" since="21" />
+		<field name="KEYCODE_U" />
+		<field name="KEYCODE_UNKNOWN" />
+		<field name="KEYCODE_V" />
+		<field name="KEYCODE_VOICE_ASSIST" since="21" />
+		<field name="KEYCODE_VOLUME_DOWN" />
+		<field name="KEYCODE_VOLUME_MUTE" since="11" />
+		<field name="KEYCODE_VOLUME_UP" />
+		<field name="KEYCODE_W" />
+		<field name="KEYCODE_WAKEUP" since="20" />
+		<field name="KEYCODE_WINDOW" since="11" />
+		<field name="KEYCODE_X" />
+		<field name="KEYCODE_Y" />
+		<field name="KEYCODE_YEN" since="16" />
+		<field name="KEYCODE_Z" />
+		<field name="KEYCODE_ZENKAKU_HANKAKU" since="16" />
+		<field name="KEYCODE_ZOOM_IN" since="11" />
+		<field name="KEYCODE_ZOOM_OUT" since="11" />
+		<field name="MAX_KEYCODE" deprecated="15" />
+		<field name="META_ALT_LEFT_ON" />
+		<field name="META_ALT_MASK" since="11" />
+		<field name="META_ALT_ON" />
+		<field name="META_ALT_RIGHT_ON" />
+		<field name="META_CAPS_LOCK_ON" since="11" />
+		<field name="META_CTRL_LEFT_ON" since="11" />
+		<field name="META_CTRL_MASK" since="11" />
+		<field name="META_CTRL_ON" since="11" />
+		<field name="META_CTRL_RIGHT_ON" since="11" />
+		<field name="META_FUNCTION_ON" since="11" />
+		<field name="META_META_LEFT_ON" since="11" />
+		<field name="META_META_MASK" since="11" />
+		<field name="META_META_ON" since="11" />
+		<field name="META_META_RIGHT_ON" since="11" />
+		<field name="META_NUM_LOCK_ON" since="11" />
+		<field name="META_SCROLL_LOCK_ON" since="11" />
+		<field name="META_SHIFT_LEFT_ON" />
+		<field name="META_SHIFT_MASK" since="11" />
+		<field name="META_SHIFT_ON" />
+		<field name="META_SHIFT_RIGHT_ON" />
+		<field name="META_SYM_ON" />
+	</class>
+	<class name="android/view/KeyEvent$Callback" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onKeyDown(ILandroid/view/KeyEvent;)Z" />
+		<method name="onKeyLongPress(ILandroid/view/KeyEvent;)Z" since="5" />
+		<method name="onKeyMultiple(IILandroid/view/KeyEvent;)Z" />
+		<method name="onKeyUp(ILandroid/view/KeyEvent;)Z" />
+	</class>
+	<class name="android/view/KeyEvent$DispatcherState" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="handleUpEvent(Landroid/view/KeyEvent;)V" />
+		<method name="isTracking(Landroid/view/KeyEvent;)Z" />
+		<method name="performedLongPress(Landroid/view/KeyEvent;)V" />
+		<method name="reset()V" />
+		<method name="reset(Ljava/lang/Object;)V" />
+		<method name="startTracking(Landroid/view/KeyEvent;Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/view/KeyboardShortcutGroup" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Ljava/util/List;)V" />
+		<method name="addItem(Landroid/view/KeyboardShortcutInfo;)V" />
+		<method name="getItems()Ljava/util/List;" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/KeyboardShortcutInfo" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;CI)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;II)V" />
+		<method name="getBaseCharacter()C" />
+		<method name="getKeycode()I" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getModifiers()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/LayoutInflater" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/view/LayoutInflater;Landroid/content/Context;)V" />
+		<method name="cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;" />
+		<method name="createView(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="29" />
+		<method name="createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" />
+		<method name="from(Landroid/content/Context;)Landroid/view/LayoutInflater;" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getFactory()Landroid/view/LayoutInflater$Factory;" />
+		<method name="getFactory2()Landroid/view/LayoutInflater$Factory2;" since="11" />
+		<method name="getFilter()Landroid/view/LayoutInflater$Filter;" />
+		<method name="inflate(ILandroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;" />
+		<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;" />
+		<method name="onCreateView(Landroid/content/Context;Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="29" />
+		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="11" />
+		<method name="onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" />
+		<method name="setFactory(Landroid/view/LayoutInflater$Factory;)V" />
+		<method name="setFactory2(Landroid/view/LayoutInflater$Factory2;)V" since="11" />
+		<method name="setFilter(Landroid/view/LayoutInflater$Filter;)V" />
+	</class>
+	<class name="android/view/LayoutInflater$Factory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;" />
+	</class>
+	<class name="android/view/LayoutInflater$Factory2" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/LayoutInflater$Factory" />
+		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;" />
+	</class>
+	<class name="android/view/LayoutInflater$Filter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onLoadClass(Ljava/lang/Class;)Z" />
+	</class>
+	<class name="android/view/Menu" since="1">
+		<extends name="java/lang/Object" />
+		<method name="add(I)Landroid/view/MenuItem;" />
+		<method name="add(IIII)Landroid/view/MenuItem;" />
+		<method name="add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;" />
+		<method name="add(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" />
+		<method name="addIntentOptions(IIILandroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I[Landroid/view/MenuItem;)I" />
+		<method name="addSubMenu(I)Landroid/view/SubMenu;" />
+		<method name="addSubMenu(IIII)Landroid/view/SubMenu;" />
+		<method name="addSubMenu(IIILjava/lang/CharSequence;)Landroid/view/SubMenu;" />
+		<method name="addSubMenu(Ljava/lang/CharSequence;)Landroid/view/SubMenu;" />
+		<method name="clear()V" />
+		<method name="close()V" since="3" />
+		<method name="findItem(I)Landroid/view/MenuItem;" />
+		<method name="getItem(I)Landroid/view/MenuItem;" since="3" />
+		<method name="hasVisibleItems()Z" />
+		<method name="isShortcutKey(ILandroid/view/KeyEvent;)Z" />
+		<method name="performIdentifierAction(II)Z" />
+		<method name="performShortcut(ILandroid/view/KeyEvent;I)Z" />
+		<method name="removeGroup(I)V" />
+		<method name="removeItem(I)V" />
+		<method name="setGroupCheckable(IZZ)V" />
+		<method name="setGroupDividerEnabled(Z)V" since="28" />
+		<method name="setGroupEnabled(IZ)V" />
+		<method name="setGroupVisible(IZ)V" />
+		<method name="setQwertyMode(Z)V" />
+		<method name="size()I" />
+		<field name="CATEGORY_ALTERNATIVE" />
+		<field name="CATEGORY_CONTAINER" />
+		<field name="CATEGORY_SECONDARY" />
+		<field name="CATEGORY_SYSTEM" />
+		<field name="FIRST" />
+		<field name="FLAG_ALWAYS_PERFORM_CLOSE" />
+		<field name="FLAG_APPEND_TO_GROUP" />
+		<field name="FLAG_PERFORM_NO_CLOSE" />
+		<field name="NONE" />
+		<field name="SUPPORTED_MODIFIERS_MASK" since="26" />
+	</class>
+	<class name="android/view/MenuInflater" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="inflate(ILandroid/view/Menu;)V" />
+	</class>
+	<class name="android/view/MenuItem" since="1">
+		<extends name="java/lang/Object" />
+		<method name="collapseActionView()Z" since="14" />
+		<method name="expandActionView()Z" since="14" />
+		<method name="getActionProvider()Landroid/view/ActionProvider;" since="14" />
+		<method name="getActionView()Landroid/view/View;" since="11" />
+		<method name="getAlphabeticModifiers()I" since="26" />
+		<method name="getAlphabeticShortcut()C" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="26" />
+		<method name="getGroupId()I" />
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;" />
+		<method name="getIconTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getIconTintList()Landroid/content/res/ColorStateList;" since="26" />
+		<method name="getIconTintMode()Landroid/graphics/PorterDuff$Mode;" since="26" />
+		<method name="getIntent()Landroid/content/Intent;" />
+		<method name="getItemId()I" />
+		<method name="getMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;" />
+		<method name="getNumericModifiers()I" since="26" />
+		<method name="getNumericShortcut()C" />
+		<method name="getOrder()I" />
+		<method name="getSubMenu()Landroid/view/SubMenu;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="getTitleCondensed()Ljava/lang/CharSequence;" />
+		<method name="getTooltipText()Ljava/lang/CharSequence;" since="26" />
+		<method name="hasSubMenu()Z" />
+		<method name="isActionViewExpanded()Z" since="14" />
+		<method name="isCheckable()Z" />
+		<method name="isChecked()Z" />
+		<method name="isEnabled()Z" />
+		<method name="isVisible()Z" />
+		<method name="setActionProvider(Landroid/view/ActionProvider;)Landroid/view/MenuItem;" since="14" />
+		<method name="setActionView(I)Landroid/view/MenuItem;" since="11" />
+		<method name="setActionView(Landroid/view/View;)Landroid/view/MenuItem;" since="11" />
+		<method name="setAlphabeticShortcut(C)Landroid/view/MenuItem;" />
+		<method name="setAlphabeticShortcut(CI)Landroid/view/MenuItem;" since="26" />
+		<method name="setCheckable(Z)Landroid/view/MenuItem;" />
+		<method name="setChecked(Z)Landroid/view/MenuItem;" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" since="26" />
+		<method name="setEnabled(Z)Landroid/view/MenuItem;" />
+		<method name="setIcon(I)Landroid/view/MenuItem;" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/MenuItem;" />
+		<method name="setIconTintBlendMode(Landroid/graphics/BlendMode;)Landroid/view/MenuItem;" since="29" />
+		<method name="setIconTintList(Landroid/content/res/ColorStateList;)Landroid/view/MenuItem;" since="26" />
+		<method name="setIconTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/view/MenuItem;" since="26" />
+		<method name="setIntent(Landroid/content/Intent;)Landroid/view/MenuItem;" />
+		<method name="setNumericShortcut(C)Landroid/view/MenuItem;" />
+		<method name="setNumericShortcut(CI)Landroid/view/MenuItem;" since="26" />
+		<method name="setOnActionExpandListener(Landroid/view/MenuItem$OnActionExpandListener;)Landroid/view/MenuItem;" since="14" />
+		<method name="setOnMenuItemClickListener(Landroid/view/MenuItem$OnMenuItemClickListener;)Landroid/view/MenuItem;" />
+		<method name="setShortcut(CC)Landroid/view/MenuItem;" />
+		<method name="setShortcut(CCII)Landroid/view/MenuItem;" since="26" />
+		<method name="setShowAsAction(I)V" since="11" />
+		<method name="setShowAsActionFlags(I)Landroid/view/MenuItem;" since="14" />
+		<method name="setTitle(I)Landroid/view/MenuItem;" />
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" />
+		<method name="setTitleCondensed(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" />
+		<method name="setTooltipText(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" since="26" />
+		<method name="setVisible(Z)Landroid/view/MenuItem;" />
+		<field name="SHOW_AS_ACTION_ALWAYS" since="11" />
+		<field name="SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" since="14" />
+		<field name="SHOW_AS_ACTION_IF_ROOM" since="11" />
+		<field name="SHOW_AS_ACTION_NEVER" since="11" />
+		<field name="SHOW_AS_ACTION_WITH_TEXT" since="11" />
+	</class>
+	<class name="android/view/MenuItem$OnActionExpandListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onMenuItemActionCollapse(Landroid/view/MenuItem;)Z" />
+		<method name="onMenuItemActionExpand(Landroid/view/MenuItem;)Z" />
+	</class>
+	<class name="android/view/MenuItem$OnMenuItemClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z" />
+	</class>
+	<class name="android/view/MotionEvent" since="1">
+		<extends name="android/view/InputEvent" since="9" />
+		<extends name="java/lang/Object" removed="9" />
+		<implements name="android/os/Parcelable" />
+		<method name="actionToString(I)Ljava/lang/String;" since="19" />
+		<method name="addBatch(JFFFFI)V" />
+		<method name="addBatch(J[Landroid/view/MotionEvent$PointerCoords;I)V" since="9" />
+		<method name="axisFromString(Ljava/lang/String;)I" since="12" />
+		<method name="axisToString(I)Ljava/lang/String;" since="12" />
+		<method name="findPointerIndex(I)I" since="5" />
+		<method name="getAction()I" />
+		<method name="getActionButton()I" since="23" />
+		<method name="getActionIndex()I" since="8" />
+		<method name="getActionMasked()I" since="8" />
+		<method name="getAxisValue(I)F" since="12" />
+		<method name="getAxisValue(II)F" since="12" />
+		<method name="getButtonState()I" since="14" />
+		<method name="getClassification()I" since="29" />
+		<method name="getDeviceId()I" />
+		<method name="getDownTime()J" />
+		<method name="getEdgeFlags()I" />
+		<method name="getEventTime()J" />
+		<method name="getFlags()I" since="9" />
+		<method name="getHistoricalAxisValue(II)F" since="12" />
+		<method name="getHistoricalAxisValue(III)F" since="12" />
+		<method name="getHistoricalEventTime(I)J" />
+		<method name="getHistoricalOrientation(I)F" since="9" />
+		<method name="getHistoricalOrientation(II)F" since="9" />
+		<method name="getHistoricalPointerCoords(IILandroid/view/MotionEvent$PointerCoords;)V" since="9" />
+		<method name="getHistoricalPressure(I)F" />
+		<method name="getHistoricalPressure(II)F" since="5" />
+		<method name="getHistoricalSize(I)F" />
+		<method name="getHistoricalSize(II)F" since="5" />
+		<method name="getHistoricalToolMajor(I)F" since="9" />
+		<method name="getHistoricalToolMajor(II)F" since="9" />
+		<method name="getHistoricalToolMinor(I)F" since="9" />
+		<method name="getHistoricalToolMinor(II)F" since="9" />
+		<method name="getHistoricalTouchMajor(I)F" since="9" />
+		<method name="getHistoricalTouchMajor(II)F" since="9" />
+		<method name="getHistoricalTouchMinor(I)F" since="9" />
+		<method name="getHistoricalTouchMinor(II)F" since="9" />
+		<method name="getHistoricalX(I)F" />
+		<method name="getHistoricalX(II)F" since="5" />
+		<method name="getHistoricalY(I)F" />
+		<method name="getHistoricalY(II)F" since="5" />
+		<method name="getHistorySize()I" />
+		<method name="getMetaState()I" />
+		<method name="getOrientation()F" since="9" />
+		<method name="getOrientation(I)F" since="9" />
+		<method name="getPointerCoords(ILandroid/view/MotionEvent$PointerCoords;)V" since="9" />
+		<method name="getPointerCount()I" since="5" />
+		<method name="getPointerId(I)I" since="5" />
+		<method name="getPointerProperties(ILandroid/view/MotionEvent$PointerProperties;)V" since="14" />
+		<method name="getPressure()F" />
+		<method name="getPressure(I)F" since="5" />
+		<method name="getRawX()F" />
+		<method name="getRawX(I)F" since="29" />
+		<method name="getRawY()F" />
+		<method name="getRawY(I)F" since="29" />
+		<method name="getSize()F" />
+		<method name="getSize(I)F" since="5" />
+		<method name="getToolMajor()F" since="9" />
+		<method name="getToolMajor(I)F" since="9" />
+		<method name="getToolMinor()F" since="9" />
+		<method name="getToolMinor(I)F" since="9" />
+		<method name="getToolType(I)I" since="14" />
+		<method name="getTouchMajor()F" since="9" />
+		<method name="getTouchMajor(I)F" since="9" />
+		<method name="getTouchMinor()F" since="9" />
+		<method name="getTouchMinor(I)F" since="9" />
+		<method name="getX()F" />
+		<method name="getX(I)F" since="5" />
+		<method name="getXPrecision()F" />
+		<method name="getY()F" />
+		<method name="getY(I)F" since="5" />
+		<method name="getYPrecision()F" />
+		<method name="isButtonPressed(I)Z" since="21" />
+		<method name="obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;" />
+		<method name="obtain(JJIFFI)Landroid/view/MotionEvent;" />
+		<method name="obtain(JJIIFFFFIFFII)Landroid/view/MotionEvent;" since="5" deprecated="15" />
+		<method name="obtain(JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent;" since="9" deprecated="15" />
+		<method name="obtain(JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent;" since="14" />
+		<method name="obtain(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;" />
+		<method name="obtainNoHistory(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;" since="5" />
+		<method name="offsetLocation(FF)V" />
+		<method name="recycle()V" />
+		<method name="setAction(I)V" />
+		<method name="setEdgeFlags(I)V" />
+		<method name="setLocation(FF)V" />
+		<method name="setSource(I)V" since="12" />
+		<method name="transform(Landroid/graphics/Matrix;)V" since="11" />
+		<field name="ACTION_BUTTON_PRESS" since="23" />
+		<field name="ACTION_BUTTON_RELEASE" since="23" />
+		<field name="ACTION_CANCEL" />
+		<field name="ACTION_DOWN" />
+		<field name="ACTION_HOVER_ENTER" since="14" />
+		<field name="ACTION_HOVER_EXIT" since="14" />
+		<field name="ACTION_HOVER_MOVE" since="12" />
+		<field name="ACTION_MASK" since="5" />
+		<field name="ACTION_MOVE" />
+		<field name="ACTION_OUTSIDE" since="3" />
+		<field name="ACTION_POINTER_1_DOWN" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_1_UP" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_2_DOWN" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_2_UP" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_3_DOWN" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_3_UP" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_DOWN" since="5" />
+		<field name="ACTION_POINTER_ID_MASK" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_ID_SHIFT" since="5" deprecated="15" />
+		<field name="ACTION_POINTER_INDEX_MASK" since="8" />
+		<field name="ACTION_POINTER_INDEX_SHIFT" since="8" />
+		<field name="ACTION_POINTER_UP" since="5" />
+		<field name="ACTION_SCROLL" since="12" />
+		<field name="ACTION_UP" />
+		<field name="AXIS_BRAKE" since="12" />
+		<field name="AXIS_DISTANCE" since="14" />
+		<field name="AXIS_GAS" since="12" />
+		<field name="AXIS_GENERIC_1" since="12" />
+		<field name="AXIS_GENERIC_10" since="12" />
+		<field name="AXIS_GENERIC_11" since="12" />
+		<field name="AXIS_GENERIC_12" since="12" />
+		<field name="AXIS_GENERIC_13" since="12" />
+		<field name="AXIS_GENERIC_14" since="12" />
+		<field name="AXIS_GENERIC_15" since="12" />
+		<field name="AXIS_GENERIC_16" since="12" />
+		<field name="AXIS_GENERIC_2" since="12" />
+		<field name="AXIS_GENERIC_3" since="12" />
+		<field name="AXIS_GENERIC_4" since="12" />
+		<field name="AXIS_GENERIC_5" since="12" />
+		<field name="AXIS_GENERIC_6" since="12" />
+		<field name="AXIS_GENERIC_7" since="12" />
+		<field name="AXIS_GENERIC_8" since="12" />
+		<field name="AXIS_GENERIC_9" since="12" />
+		<field name="AXIS_HAT_X" since="12" />
+		<field name="AXIS_HAT_Y" since="12" />
+		<field name="AXIS_HSCROLL" since="12" />
+		<field name="AXIS_LTRIGGER" since="12" />
+		<field name="AXIS_ORIENTATION" since="12" />
+		<field name="AXIS_PRESSURE" since="12" />
+		<field name="AXIS_RELATIVE_X" since="24" />
+		<field name="AXIS_RELATIVE_Y" since="24" />
+		<field name="AXIS_RTRIGGER" since="12" />
+		<field name="AXIS_RUDDER" since="12" />
+		<field name="AXIS_RX" since="12" />
+		<field name="AXIS_RY" since="12" />
+		<field name="AXIS_RZ" since="12" />
+		<field name="AXIS_SCROLL" since="26" />
+		<field name="AXIS_SIZE" since="12" />
+		<field name="AXIS_THROTTLE" since="12" />
+		<field name="AXIS_TILT" since="14" />
+		<field name="AXIS_TOOL_MAJOR" since="12" />
+		<field name="AXIS_TOOL_MINOR" since="12" />
+		<field name="AXIS_TOUCH_MAJOR" since="12" />
+		<field name="AXIS_TOUCH_MINOR" since="12" />
+		<field name="AXIS_VSCROLL" since="12" />
+		<field name="AXIS_WHEEL" since="12" />
+		<field name="AXIS_X" since="12" />
+		<field name="AXIS_Y" since="12" />
+		<field name="AXIS_Z" since="12" />
+		<field name="BUTTON_BACK" since="14" />
+		<field name="BUTTON_FORWARD" since="14" />
+		<field name="BUTTON_PRIMARY" since="14" />
+		<field name="BUTTON_SECONDARY" since="14" />
+		<field name="BUTTON_STYLUS_PRIMARY" since="23" />
+		<field name="BUTTON_STYLUS_SECONDARY" since="23" />
+		<field name="BUTTON_TERTIARY" since="14" />
+		<field name="CLASSIFICATION_AMBIGUOUS_GESTURE" since="29" />
+		<field name="CLASSIFICATION_DEEP_PRESS" since="29" />
+		<field name="CLASSIFICATION_NONE" since="29" />
+		<field name="CREATOR" />
+		<field name="EDGE_BOTTOM" />
+		<field name="EDGE_LEFT" />
+		<field name="EDGE_RIGHT" />
+		<field name="EDGE_TOP" />
+		<field name="FLAG_WINDOW_IS_OBSCURED" since="9" />
+		<field name="FLAG_WINDOW_IS_PARTIALLY_OBSCURED" since="29" />
+		<field name="INVALID_POINTER_ID" since="14" />
+		<field name="TOOL_TYPE_ERASER" since="14" />
+		<field name="TOOL_TYPE_FINGER" since="14" />
+		<field name="TOOL_TYPE_MOUSE" since="14" />
+		<field name="TOOL_TYPE_STYLUS" since="14" />
+		<field name="TOOL_TYPE_UNKNOWN" since="14" />
+	</class>
+	<class name="android/view/MotionEvent$PointerCoords" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/view/MotionEvent$PointerCoords;)V" since="12" />
+		<method name="clear()V" since="12" />
+		<method name="copyFrom(Landroid/view/MotionEvent$PointerCoords;)V" since="12" />
+		<method name="getAxisValue(I)F" since="12" />
+		<method name="setAxisValue(IF)V" since="12" />
+		<field name="orientation" />
+		<field name="pressure" />
+		<field name="size" />
+		<field name="toolMajor" />
+		<field name="toolMinor" />
+		<field name="touchMajor" />
+		<field name="touchMinor" />
+		<field name="x" />
+		<field name="y" />
+	</class>
+	<class name="android/view/MotionEvent$PointerProperties" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/view/MotionEvent$PointerProperties;)V" />
+		<method name="clear()V" />
+		<method name="copyFrom(Landroid/view/MotionEvent$PointerProperties;)V" />
+		<field name="id" />
+		<field name="toolType" />
+	</class>
+	<class name="android/view/OnReceiveContentListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onReceiveContent(Landroid/view/View;Landroid/view/ContentInfo;)Landroid/view/ContentInfo;" />
+	</class>
+	<class name="android/view/OrientationEventListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="canDetectOrientation()Z" />
+		<method name="disable()V" />
+		<method name="enable()V" />
+		<method name="onOrientationChanged(I)V" />
+		<field name="ORIENTATION_UNKNOWN" />
+	</class>
+	<class name="android/view/OrientationListener" since="1" deprecated="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/hardware/SensorListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" since="3" deprecated="29" />
+		<method name="disable()V" deprecated="29" />
+		<method name="enable()V" deprecated="29" />
+		<method name="onOrientationChanged(I)V" deprecated="29" />
+		<field name="ORIENTATION_UNKNOWN" deprecated="29" />
+	</class>
+	<class name="android/view/PixelCopy" since="24">
+		<extends name="java/lang/Object" />
+		<method name="request(Landroid/view/Surface;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" />
+		<method name="request(Landroid/view/Surface;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26" />
+		<method name="request(Landroid/view/SurfaceView;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" />
+		<method name="request(Landroid/view/SurfaceView;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26" />
+		<method name="request(Landroid/view/Window;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26" />
+		<method name="request(Landroid/view/Window;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26" />
+		<field name="ERROR_DESTINATION_INVALID" />
+		<field name="ERROR_SOURCE_INVALID" />
+		<field name="ERROR_SOURCE_NO_DATA" />
+		<field name="ERROR_TIMEOUT" />
+		<field name="ERROR_UNKNOWN" />
+		<field name="SUCCESS" />
+	</class>
+	<class name="android/view/PixelCopy$OnPixelCopyFinishedListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onPixelCopyFinished(I)V" />
+	</class>
+	<class name="android/view/PointerIcon" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="create(Landroid/graphics/Bitmap;FF)Landroid/view/PointerIcon;" />
+		<method name="getSystemIcon(Landroid/content/Context;I)Landroid/view/PointerIcon;" />
+		<method name="load(Landroid/content/res/Resources;I)Landroid/view/PointerIcon;" />
+		<field name="CREATOR" />
+		<field name="TYPE_ALIAS" />
+		<field name="TYPE_ALL_SCROLL" />
+		<field name="TYPE_ARROW" />
+		<field name="TYPE_CELL" />
+		<field name="TYPE_CONTEXT_MENU" />
+		<field name="TYPE_COPY" />
+		<field name="TYPE_CROSSHAIR" />
+		<field name="TYPE_DEFAULT" />
+		<field name="TYPE_GRAB" />
+		<field name="TYPE_GRABBING" />
+		<field name="TYPE_HAND" />
+		<field name="TYPE_HELP" />
+		<field name="TYPE_HORIZONTAL_DOUBLE_ARROW" />
+		<field name="TYPE_NO_DROP" />
+		<field name="TYPE_NULL" />
+		<field name="TYPE_TEXT" />
+		<field name="TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW" />
+		<field name="TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW" />
+		<field name="TYPE_VERTICAL_DOUBLE_ARROW" />
+		<field name="TYPE_VERTICAL_TEXT" />
+		<field name="TYPE_WAIT" />
+		<field name="TYPE_ZOOM_IN" />
+		<field name="TYPE_ZOOM_OUT" />
+	</class>
+	<class name="android/view/RoundedCorner" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(IIII)V" />
+		<method name="getCenter()Landroid/graphics/Point;" />
+		<method name="getPosition()I" />
+		<method name="getRadius()I" />
+		<field name="CREATOR" />
+		<field name="POSITION_BOTTOM_LEFT" />
+		<field name="POSITION_BOTTOM_RIGHT" />
+		<field name="POSITION_TOP_LEFT" />
+		<field name="POSITION_TOP_RIGHT" />
+	</class>
+	<class name="android/view/ScaleGestureDetector" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;Landroid/os/Handler;)V" since="19" />
+		<method name="getCurrentSpan()F" />
+		<method name="getCurrentSpanX()F" since="11" />
+		<method name="getCurrentSpanY()F" since="11" />
+		<method name="getEventTime()J" />
+		<method name="getFocusX()F" />
+		<method name="getFocusY()F" />
+		<method name="getPreviousSpan()F" />
+		<method name="getPreviousSpanX()F" since="11" />
+		<method name="getPreviousSpanY()F" since="11" />
+		<method name="getScaleFactor()F" />
+		<method name="getTimeDelta()J" />
+		<method name="isInProgress()Z" />
+		<method name="isQuickScaleEnabled()Z" since="19" />
+		<method name="isStylusScaleEnabled()Z" since="23" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="setQuickScaleEnabled(Z)V" since="19" />
+		<method name="setStylusScaleEnabled(Z)V" since="23" />
+	</class>
+	<class name="android/view/ScaleGestureDetector$OnScaleGestureListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="onScale(Landroid/view/ScaleGestureDetector;)Z" />
+		<method name="onScaleBegin(Landroid/view/ScaleGestureDetector;)Z" />
+		<method name="onScaleEnd(Landroid/view/ScaleGestureDetector;)V" />
+	</class>
+	<class name="android/view/ScaleGestureDetector$SimpleOnScaleGestureListener" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/ScaleGestureDetector$OnScaleGestureListener" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/view/ScrollCaptureCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onScrollCaptureEnd(Ljava/lang/Runnable;)V" />
+		<method name="onScrollCaptureImageRequest(Landroid/view/ScrollCaptureSession;Landroid/os/CancellationSignal;Landroid/graphics/Rect;Ljava/util/function/Consumer;)V" />
+		<method name="onScrollCaptureSearch(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V" />
+		<method name="onScrollCaptureStart(Landroid/view/ScrollCaptureSession;Landroid/os/CancellationSignal;Ljava/lang/Runnable;)V" />
+	</class>
+	<class name="android/view/ScrollCaptureSession" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/Surface;Landroid/graphics/Rect;Landroid/graphics/Point;)V" />
+		<method name="getPositionInWindow()Landroid/graphics/Point;" />
+		<method name="getScrollBounds()Landroid/graphics/Rect;" />
+		<method name="getSurface()Landroid/view/Surface;" />
+	</class>
+	<class name="android/view/ScrollCaptureTarget" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;Landroid/view/ScrollCaptureCallback;)V" />
+		<method name="getCallback()Landroid/view/ScrollCaptureCallback;" />
+		<method name="getContainingView()Landroid/view/View;" />
+		<method name="getHint()I" />
+		<method name="getLocalVisibleRect()Landroid/graphics/Rect;" />
+		<method name="getPositionInWindow()Landroid/graphics/Point;" />
+		<method name="getScrollBounds()Landroid/graphics/Rect;" />
+		<method name="setScrollBounds(Landroid/graphics/Rect;)V" />
+		<method name="updatePositionInWindow()V" />
+	</class>
+	<class name="android/view/SearchEvent" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/InputDevice;)V" />
+		<method name="getInputDevice()Landroid/view/InputDevice;" />
+	</class>
+	<class name="android/view/SoundEffectConstants" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getConstantForFocusDirection(IZ)I" since="31" />
+		<method name="getContantForFocusDirection(I)I" />
+		<field name="CLICK" />
+		<field name="NAVIGATION_DOWN" />
+		<field name="NAVIGATION_LEFT" />
+		<field name="NAVIGATION_REPEAT_DOWN" since="31" />
+		<field name="NAVIGATION_REPEAT_LEFT" since="31" />
+		<field name="NAVIGATION_REPEAT_RIGHT" since="31" />
+		<field name="NAVIGATION_REPEAT_UP" since="31" />
+		<field name="NAVIGATION_RIGHT" />
+		<field name="NAVIGATION_UP" />
+	</class>
+	<class name="android/view/SubMenu" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/Menu" />
+		<method name="clearHeader()V" />
+		<method name="getItem()Landroid/view/MenuItem;" />
+		<method name="setHeaderIcon(I)Landroid/view/SubMenu;" />
+		<method name="setHeaderIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;" />
+		<method name="setHeaderTitle(I)Landroid/view/SubMenu;" />
+		<method name="setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/SubMenu;" />
+		<method name="setHeaderView(Landroid/view/View;)Landroid/view/SubMenu;" />
+		<method name="setIcon(I)Landroid/view/SubMenu;" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;" />
+	</class>
+	<class name="android/view/Surface" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/graphics/SurfaceTexture;)V" since="14" />
+		<method name="&lt;init&gt;(Landroid/view/SurfaceControl;)V" since="29" />
+		<method name="freeze()V" removed="14" />
+		<method name="hide()V" removed="14" />
+		<method name="isValid()Z" />
+		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;" />
+		<method name="lockHardwareCanvas()Landroid/graphics/Canvas;" since="23" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<method name="release()V" since="14" />
+		<method name="setAlpha(F)V" removed="14" />
+		<method name="setFlags(II)V" removed="14" />
+		<method name="setFrameRate(FI)V" since="30" />
+		<method name="setFrameRate(FII)V" since="31" />
+		<method name="setFreezeTint(I)V" removed="14" />
+		<method name="setLayer(I)V" removed="14" />
+		<method name="setMatrix(FFFF)V" removed="14" />
+		<method name="setOrientation(II)V" removed="14" />
+		<method name="setPosition(II)V" removed="14" />
+		<method name="setSize(II)V" removed="14" />
+		<method name="setTransparentRegionHint(Landroid/graphics/Region;)V" removed="14" />
+		<method name="show()V" removed="14" />
+		<method name="unfreeze()V" removed="14" />
+		<method name="unlockCanvas(Landroid/graphics/Canvas;)V" deprecated="17" />
+		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V" />
+		<field name="CHANGE_FRAME_RATE_ALWAYS" since="31" />
+		<field name="CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS" since="31" />
+		<field name="CREATOR" />
+		<field name="FRAME_RATE_COMPATIBILITY_DEFAULT" since="30" />
+		<field name="FRAME_RATE_COMPATIBILITY_FIXED_SOURCE" since="30" />
+		<field name="FX_SURFACE_BLUR" removed="14" />
+		<field name="FX_SURFACE_DIM" removed="14" />
+		<field name="FX_SURFACE_MASK" removed="14" />
+		<field name="FX_SURFACE_NORMAL" removed="14" />
+		<field name="GPU" removed="14" />
+		<field name="HARDWARE" removed="14" />
+		<field name="HIDDEN" removed="14" />
+		<field name="NON_PREMULTIPLIED" removed="14" />
+		<field name="PUSH_BUFFERS" removed="14" />
+		<field name="ROTATION_0" />
+		<field name="ROTATION_180" />
+		<field name="ROTATION_270" />
+		<field name="ROTATION_90" />
+		<field name="SECURE" removed="14" />
+		<field name="SURACE_FROZEN" removed="14" />
+		<field name="SURFACE_BLUR_FREEZE" removed="14" />
+		<field name="SURFACE_DITHER" removed="14" />
+		<field name="SURFACE_FROZEN" since="4" removed="14" />
+		<field name="SURFACE_HIDDEN" removed="14" />
+	</class>
+	<class name="android/view/Surface$OutOfResourcesException" since="1">
+		<extends name="java/lang/Exception" removed="19" />
+		<extends name="java/lang/RuntimeException" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/view/SurfaceControl" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="isValid()Z" />
+		<method name="readFromParcel(Landroid/os/Parcel;)V" />
+		<method name="release()V" />
+		<field name="BUFFER_TRANSFORM_IDENTITY" since="33" />
+		<field name="BUFFER_TRANSFORM_MIRROR_HORIZONTAL" since="33" />
+		<field name="BUFFER_TRANSFORM_MIRROR_VERTICAL" since="33" />
+		<field name="BUFFER_TRANSFORM_ROTATE_180" since="33" />
+		<field name="BUFFER_TRANSFORM_ROTATE_270" since="33" />
+		<field name="BUFFER_TRANSFORM_ROTATE_90" since="33" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/SurfaceControl$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/view/SurfaceControl;" />
+		<method name="setBufferSize(II)Landroid/view/SurfaceControl$Builder;" />
+		<method name="setFormat(I)Landroid/view/SurfaceControl$Builder;" />
+		<method name="setName(Ljava/lang/String;)Landroid/view/SurfaceControl$Builder;" />
+		<method name="setOpaque(Z)Landroid/view/SurfaceControl$Builder;" />
+		<method name="setParent(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Builder;" />
+	</class>
+	<class name="android/view/SurfaceControl$Transaction" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="30" />
+		<implements name="java/io/Closeable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="apply()V" />
+		<method name="merge(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="reparent(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="setAlpha(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="setBufferSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="setFrameRate(Landroid/view/SurfaceControl;FI)Landroid/view/SurfaceControl$Transaction;" since="30" />
+		<method name="setFrameRate(Landroid/view/SurfaceControl;FII)Landroid/view/SurfaceControl$Transaction;" since="31" />
+		<method name="setGeometry(Landroid/view/SurfaceControl;Landroid/graphics/Rect;Landroid/graphics/Rect;I)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="setLayer(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="setVisibility(Landroid/view/SurfaceControl;Z)Landroid/view/SurfaceControl$Transaction;" />
+		<field name="CREATOR" since="30" />
+	</class>
+	<class name="android/view/SurfaceControlViewHost" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/Display;Landroid/os/IBinder;)V" />
+		<method name="getSurfacePackage()Landroid/view/SurfaceControlViewHost$SurfacePackage;" />
+		<method name="getView()Landroid/view/View;" />
+		<method name="relayout(II)V" />
+		<method name="release()V" />
+		<method name="setView(Landroid/view/View;II)V" />
+	</class>
+	<class name="android/view/SurfaceControlViewHost$SurfacePackage" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/view/SurfaceControlViewHost$SurfacePackage;)V" since="31" />
+		<method name="release()V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/SurfaceHolder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addCallback(Landroid/view/SurfaceHolder$Callback;)V" />
+		<method name="getSurface()Landroid/view/Surface;" />
+		<method name="getSurfaceFrame()Landroid/graphics/Rect;" />
+		<method name="isCreating()Z" />
+		<method name="lockCanvas()Landroid/graphics/Canvas;" />
+		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;" />
+		<method name="lockHardwareCanvas()Landroid/graphics/Canvas;" since="26" />
+		<method name="removeCallback(Landroid/view/SurfaceHolder$Callback;)V" />
+		<method name="setFixedSize(II)V" />
+		<method name="setFormat(I)V" />
+		<method name="setKeepScreenOn(Z)V" />
+		<method name="setSizeFromLayout()V" />
+		<method name="setType(I)V" deprecated="15" />
+		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V" />
+		<field name="SURFACE_TYPE_GPU" deprecated="15" />
+		<field name="SURFACE_TYPE_HARDWARE" deprecated="15" />
+		<field name="SURFACE_TYPE_NORMAL" deprecated="15" />
+		<field name="SURFACE_TYPE_PUSH_BUFFERS" deprecated="15" />
+	</class>
+	<class name="android/view/SurfaceHolder$BadSurfaceTypeException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/view/SurfaceHolder$Callback" since="1">
+		<extends name="java/lang/Object" />
+		<method name="surfaceChanged(Landroid/view/SurfaceHolder;III)V" />
+		<method name="surfaceCreated(Landroid/view/SurfaceHolder;)V" />
+		<method name="surfaceDestroyed(Landroid/view/SurfaceHolder;)V" />
+	</class>
+	<class name="android/view/SurfaceHolder$Callback2" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/SurfaceHolder$Callback" />
+		<method name="surfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V" />
+		<method name="surfaceRedrawNeededAsync(Landroid/view/SurfaceHolder;Ljava/lang/Runnable;)V" since="26" />
+	</class>
+	<class name="android/view/SurfaceView" since="1">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z" />
+		<method name="getHolder()Landroid/view/SurfaceHolder;" />
+		<method name="getHostToken()Landroid/os/IBinder;" since="30" />
+		<method name="getSurfaceControl()Landroid/view/SurfaceControl;" since="29" />
+		<method name="setChildSurfacePackage(Landroid/view/SurfaceControlViewHost$SurfacePackage;)V" since="30" />
+		<method name="setSecure(Z)V" since="17" />
+		<method name="setZOrderMediaOverlay(Z)V" since="5" />
+		<method name="setZOrderOnTop(Z)V" since="5" />
+	</class>
+	<class name="android/view/TextureView" since="14">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getBitmap()Landroid/graphics/Bitmap;" />
+		<method name="getBitmap(II)Landroid/graphics/Bitmap;" />
+		<method name="getBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;" />
+		<method name="getSurfaceTexture()Landroid/graphics/SurfaceTexture;" />
+		<method name="getSurfaceTextureListener()Landroid/view/TextureView$SurfaceTextureListener;" />
+		<method name="getTransform(Landroid/graphics/Matrix;)Landroid/graphics/Matrix;" />
+		<method name="isAvailable()Z" />
+		<method name="lockCanvas()Landroid/graphics/Canvas;" />
+		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;" />
+		<method name="setOpaque(Z)V" />
+		<method name="setSurfaceTexture(Landroid/graphics/SurfaceTexture;)V" since="16" />
+		<method name="setSurfaceTextureListener(Landroid/view/TextureView$SurfaceTextureListener;)V" />
+		<method name="setTransform(Landroid/graphics/Matrix;)V" />
+		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V" />
+	</class>
+	<class name="android/view/TextureView$SurfaceTextureListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onSurfaceTextureAvailable(Landroid/graphics/SurfaceTexture;II)V" />
+		<method name="onSurfaceTextureDestroyed(Landroid/graphics/SurfaceTexture;)Z" />
+		<method name="onSurfaceTextureSizeChanged(Landroid/graphics/SurfaceTexture;II)V" />
+		<method name="onSurfaceTextureUpdated(Landroid/graphics/SurfaceTexture;)V" />
+	</class>
+	<class name="android/view/TouchDelegate" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;Landroid/view/View;)V" />
+		<method name="getTouchDelegateInfo()Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;" since="29" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onTouchExplorationHoverEvent(Landroid/view/MotionEvent;)Z" since="29" />
+		<field name="ABOVE" />
+		<field name="BELOW" />
+		<field name="TO_LEFT" />
+		<field name="TO_RIGHT" />
+	</class>
+	<class name="android/view/VelocityTracker" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addMovement(Landroid/view/MotionEvent;)V" />
+		<method name="clear()V" />
+		<method name="computeCurrentVelocity(I)V" />
+		<method name="computeCurrentVelocity(IF)V" since="4" />
+		<method name="getXVelocity()F" />
+		<method name="getXVelocity(I)F" since="8" />
+		<method name="getYVelocity()F" />
+		<method name="getYVelocity(I)F" since="8" />
+		<method name="obtain()Landroid/view/VelocityTracker;" />
+		<method name="recycle()V" />
+	</class>
+	<class name="android/view/VerifiedInputEvent" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getDeviceId()I" />
+		<method name="getDisplayId()I" />
+		<method name="getEventTimeNanos()J" />
+		<method name="getSource()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/VerifiedKeyEvent" since="30">
+		<extends name="android/view/VerifiedInputEvent" />
+		<method name="getAction()I" />
+		<method name="getDownTimeNanos()J" />
+		<method name="getFlag(I)Ljava/lang/Boolean;" />
+		<method name="getKeyCode()I" />
+		<method name="getMetaState()I" />
+		<method name="getRepeatCount()I" />
+		<method name="getScanCode()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/VerifiedMotionEvent" since="30">
+		<extends name="android/view/VerifiedInputEvent" />
+		<method name="getActionMasked()I" />
+		<method name="getButtonState()I" />
+		<method name="getDownTimeNanos()J" />
+		<method name="getFlag(I)Ljava/lang/Boolean;" />
+		<method name="getMetaState()I" />
+		<method name="getRawX()F" />
+		<method name="getRawY()F" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/View" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/graphics/drawable/Drawable$Callback" />
+		<implements name="android/view/KeyEvent$Callback" />
+		<implements name="android/view/accessibility/AccessibilityEventSource" since="4" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="addChildrenForAccessibility(Ljava/util/ArrayList;)V" since="16" />
+		<method name="addExtraDataToAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26" />
+		<method name="addFocusables(Ljava/util/ArrayList;I)V" />
+		<method name="addFocusables(Ljava/util/ArrayList;II)V" since="4" />
+		<method name="addKeyboardNavigationClusters(Ljava/util/Collection;I)V" since="26" />
+		<method name="addOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V" since="12" />
+		<method name="addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V" since="11" />
+		<method name="addOnUnhandledKeyEventListener(Landroid/view/View$OnUnhandledKeyEventListener;)V" since="28" />
+		<method name="addTouchables(Ljava/util/ArrayList;)V" />
+		<method name="animate()Landroid/view/ViewPropertyAnimator;" since="12" />
+		<method name="announceForAccessibility(Ljava/lang/CharSequence;)V" since="16" />
+		<method name="autofill(Landroid/util/SparseArray;)V" since="26" />
+		<method name="autofill(Landroid/view/autofill/AutofillValue;)V" since="26" />
+		<method name="awakenScrollBars()Z" since="5" />
+		<method name="awakenScrollBars(I)Z" since="5" />
+		<method name="awakenScrollBars(IZ)Z" since="5" />
+		<method name="bringToFront()V" />
+		<method name="buildDrawingCache()V" deprecated="28" />
+		<method name="buildDrawingCache(Z)V" since="4" deprecated="28" />
+		<method name="buildLayer()V" since="12" />
+		<method name="callOnClick()Z" since="15" />
+		<method name="canResolveLayoutDirection()Z" since="19" />
+		<method name="canResolveTextAlignment()Z" since="19" />
+		<method name="canResolveTextDirection()Z" since="19" />
+		<method name="canScrollHorizontally(I)Z" since="14" />
+		<method name="canScrollVertically(I)Z" since="14" />
+		<method name="cancelDragAndDrop()V" since="24" />
+		<method name="cancelLongPress()V" />
+		<method name="cancelPendingInputEvents()V" since="19" />
+		<method name="checkInputConnectionProxy(Landroid/view/View;)Z" since="3" />
+		<method name="clearAnimation()V" />
+		<method name="clearFocus()V" />
+		<method name="clearViewTranslationCallback()V" since="31" />
+		<method name="combineMeasuredStates(II)I" since="11" />
+		<method name="computeHorizontalScrollExtent()I" />
+		<method name="computeHorizontalScrollOffset()I" />
+		<method name="computeHorizontalScrollRange()I" />
+		<method name="computeScroll()V" />
+		<method name="computeSystemWindowInsets(Landroid/view/WindowInsets;Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21" />
+		<method name="computeVerticalScrollExtent()I" />
+		<method name="computeVerticalScrollOffset()I" />
+		<method name="computeVerticalScrollRange()I" />
+		<method name="createAccessibilityNodeInfo()Landroid/view/accessibility/AccessibilityNodeInfo;" since="14" />
+		<method name="createContextMenu(Landroid/view/ContextMenu;)V" />
+		<method name="destroyDrawingCache()V" deprecated="28" />
+		<method name="dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;" since="20" />
+		<method name="dispatchCapturedPointerEvent(Landroid/view/MotionEvent;)Z" since="26" />
+		<method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V" since="8" />
+		<method name="dispatchCreateViewTranslationRequest(Ljava/util/Map;[ILandroid/view/translation/TranslationCapability;Ljava/util/List;)V" since="31" />
+		<method name="dispatchDisplayHint(I)V" since="8" />
+		<method name="dispatchDragEvent(Landroid/view/DragEvent;)Z" since="11" />
+		<method name="dispatchDraw(Landroid/graphics/Canvas;)V" />
+		<method name="dispatchDrawableHotspotChanged(FF)V" since="22" />
+		<method name="dispatchFinishTemporaryDetach()V" since="24" />
+		<method name="dispatchGenericFocusedEvent(Landroid/view/MotionEvent;)Z" since="14" />
+		<method name="dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12" />
+		<method name="dispatchGenericPointerEvent(Landroid/view/MotionEvent;)Z" since="14" />
+		<method name="dispatchHoverEvent(Landroid/view/MotionEvent;)Z" since="14" />
+		<method name="dispatchKeyEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z" since="3" />
+		<method name="dispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="dispatchNestedFling(FFZ)Z" since="21" />
+		<method name="dispatchNestedPreFling(FF)Z" since="21" />
+		<method name="dispatchNestedPrePerformAccessibilityAction(ILandroid/os/Bundle;)Z" since="22" />
+		<method name="dispatchNestedPreScroll(II[I[I)Z" since="21" />
+		<method name="dispatchNestedScroll(IIII[I)Z" since="21" />
+		<method name="dispatchPointerCaptureChanged(Z)V" since="26" />
+		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z" since="4" />
+		<method name="dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V" since="26" />
+		<method name="dispatchProvideStructure(Landroid/view/ViewStructure;)V" since="23" />
+		<method name="dispatchRestoreInstanceState(Landroid/util/SparseArray;)V" />
+		<method name="dispatchSaveInstanceState(Landroid/util/SparseArray;)V" />
+		<method name="dispatchScrollCaptureSearch(Landroid/graphics/Rect;Landroid/graphics/Point;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="dispatchSetActivated(Z)V" since="11" />
+		<method name="dispatchSetPressed(Z)V" />
+		<method name="dispatchSetSelected(Z)V" />
+		<method name="dispatchStartTemporaryDetach()V" since="24" />
+		<method name="dispatchSystemUiVisibilityChanged(I)V" since="11" deprecated="30" />
+		<method name="dispatchTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="dispatchTrackballEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="dispatchUnhandledMove(Landroid/view/View;I)Z" />
+		<method name="dispatchVisibilityChanged(Landroid/view/View;I)V" since="8" />
+		<method name="dispatchWindowFocusChanged(Z)V" />
+		<method name="dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V" since="30" />
+		<method name="dispatchWindowInsetsAnimationPrepare(Landroid/view/WindowInsetsAnimation;)V" since="30" />
+		<method name="dispatchWindowInsetsAnimationProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;" since="30" />
+		<method name="dispatchWindowInsetsAnimationStart(Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/view/WindowInsetsAnimation$Bounds;" since="30" />
+		<method name="dispatchWindowSystemUiVisiblityChanged(I)V" since="16" deprecated="30" />
+		<method name="dispatchWindowVisibilityChanged(I)V" />
+		<method name="draw(Landroid/graphics/Canvas;)V" />
+		<method name="drawableHotspotChanged(FF)V" since="21" />
+		<method name="drawableStateChanged()V" />
+		<method name="findFocus()Landroid/view/View;" />
+		<method name="findViewById(I)Landroid/view/View;" />
+		<method name="findViewWithTag(Ljava/lang/Object;)Landroid/view/View;" />
+		<method name="findViewsWithText(Ljava/util/ArrayList;Ljava/lang/CharSequence;I)V" since="14" />
+		<method name="fitSystemWindows(Landroid/graphics/Rect;)Z" deprecated="20" />
+		<method name="fitsSystemWindows()Z" since="14" removed="16" />
+		<method name="focusSearch(I)Landroid/view/View;" />
+		<method name="forceHasOverlappingRendering(Z)V" since="24" />
+		<method name="forceLayout()V" />
+		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z" since="31" />
+		<method name="generateDisplayHash(Ljava/lang/String;Landroid/graphics/Rect;Ljava/util/concurrent/Executor;Landroid/view/displayhash/DisplayHashResultCallback;)V" since="31" />
+		<method name="generateViewId()I" since="17" />
+		<method name="getAccessibilityClassName()Ljava/lang/CharSequence;" since="23" />
+		<method name="getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;" since="29" />
+		<method name="getAccessibilityLiveRegion()I" since="19" />
+		<method name="getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;" since="16" />
+		<method name="getAccessibilityPaneTitle()Ljava/lang/CharSequence;" since="28" />
+		<method name="getAccessibilityTraversalAfter()I" since="22" />
+		<method name="getAccessibilityTraversalBefore()I" since="22" />
+		<method name="getAlpha()F" since="11" />
+		<method name="getAnimation()Landroid/view/animation/Animation;" />
+		<method name="getAnimationMatrix()Landroid/graphics/Matrix;" since="29" />
+		<method name="getApplicationWindowToken()Landroid/os/IBinder;" />
+		<method name="getAttributeResolutionStack(I)[I" since="29" />
+		<method name="getAttributeSourceResourceMap()Ljava/util/Map;" since="29" />
+		<method name="getAutofillHints()[Ljava/lang/String;" since="26" />
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26" />
+		<method name="getAutofillType()I" since="26" />
+		<method name="getAutofillValue()Landroid/view/autofill/AutofillValue;" since="26" />
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;" />
+		<method name="getBackgroundTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getBackgroundTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="getBaseline()I" />
+		<method name="getBottom()I" />
+		<method name="getBottomFadingEdgeStrength()F" />
+		<method name="getBottomPaddingOffset()I" since="2" />
+		<method name="getCameraDistance()F" since="16" />
+		<method name="getClipBounds()Landroid/graphics/Rect;" since="18" />
+		<method name="getClipBounds(Landroid/graphics/Rect;)Z" since="23" />
+		<method name="getClipToOutline()Z" since="21" />
+		<method name="getContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;" since="29" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="4" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getContextMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;" />
+		<method name="getDefaultFocusHighlightEnabled()Z" since="26" />
+		<method name="getDefaultSize(II)I" />
+		<method name="getDisplay()Landroid/view/Display;" since="17" />
+		<method name="getDrawableState()[I" />
+		<method name="getDrawingCache()Landroid/graphics/Bitmap;" deprecated="28" />
+		<method name="getDrawingCache(Z)Landroid/graphics/Bitmap;" since="4" deprecated="28" />
+		<method name="getDrawingCacheBackgroundColor()I" deprecated="28" />
+		<method name="getDrawingCacheQuality()I" deprecated="28" />
+		<method name="getDrawingRect(Landroid/graphics/Rect;)V" />
+		<method name="getDrawingTime()J" />
+		<method name="getElevation()F" since="21" />
+		<method name="getExplicitStyle()I" since="29" />
+		<method name="getFilterTouchesWhenObscured()Z" since="9" />
+		<method name="getFitsSystemWindows()Z" since="16" />
+		<method name="getFocusable()I" since="26" />
+		<method name="getFocusables(I)Ljava/util/ArrayList;" />
+		<method name="getFocusedRect(Landroid/graphics/Rect;)V" />
+		<method name="getForeground()Landroid/graphics/drawable/Drawable;" since="23" />
+		<method name="getForegroundGravity()I" since="23" />
+		<method name="getForegroundTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="23" />
+		<method name="getForegroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="23" />
+		<method name="getGlobalVisibleRect(Landroid/graphics/Rect;)Z" />
+		<method name="getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z" />
+		<method name="getHandler()Landroid/os/Handler;" />
+		<method name="getHasOverlappingRendering()Z" since="24" />
+		<method name="getHeight()I" />
+		<method name="getHitRect(Landroid/graphics/Rect;)V" />
+		<method name="getHorizontalFadingEdgeLength()I" />
+		<method name="getHorizontalScrollbarHeight()I" />
+		<method name="getHorizontalScrollbarThumbDrawable()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getHorizontalScrollbarTrackDrawable()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getId()I" />
+		<method name="getImportantForAccessibility()I" since="16" />
+		<method name="getImportantForAutofill()I" since="26" />
+		<method name="getImportantForContentCapture()I" since="30" />
+		<method name="getKeepScreenOn()Z" />
+		<method name="getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;" since="5" />
+		<method name="getLabelFor()I" since="17" />
+		<method name="getLayerType()I" since="11" />
+		<method name="getLayoutDirection()I" since="17" />
+		<method name="getLayoutParams()Landroid/view/ViewGroup$LayoutParams;" />
+		<method name="getLeft()I" />
+		<method name="getLeftFadingEdgeStrength()F" />
+		<method name="getLeftPaddingOffset()I" since="2" />
+		<method name="getLocalVisibleRect(Landroid/graphics/Rect;)Z" />
+		<method name="getLocationInSurface([I)V" since="29" />
+		<method name="getLocationInWindow([I)V" />
+		<method name="getLocationOnScreen([I)V" />
+		<method name="getMatrix()Landroid/graphics/Matrix;" since="11" />
+		<method name="getMeasuredHeight()I" />
+		<method name="getMeasuredHeightAndState()I" since="11" />
+		<method name="getMeasuredState()I" since="11" />
+		<method name="getMeasuredWidth()I" />
+		<method name="getMeasuredWidthAndState()I" since="11" />
+		<method name="getMinimumHeight()I" since="16" />
+		<method name="getMinimumWidth()I" since="16" />
+		<method name="getNextClusterForwardId()I" since="26" />
+		<method name="getNextFocusDownId()I" />
+		<method name="getNextFocusForwardId()I" since="11" />
+		<method name="getNextFocusLeftId()I" />
+		<method name="getNextFocusRightId()I" />
+		<method name="getNextFocusUpId()I" />
+		<method name="getOnFocusChangeListener()Landroid/view/View$OnFocusChangeListener;" />
+		<method name="getOutlineAmbientShadowColor()I" since="28" />
+		<method name="getOutlineProvider()Landroid/view/ViewOutlineProvider;" since="21" />
+		<method name="getOutlineSpotShadowColor()I" since="28" />
+		<method name="getOverScrollMode()I" since="9" />
+		<method name="getOverlay()Landroid/view/ViewOverlay;" since="18" />
+		<method name="getPaddingBottom()I" />
+		<method name="getPaddingEnd()I" since="17" />
+		<method name="getPaddingLeft()I" />
+		<method name="getPaddingRight()I" />
+		<method name="getPaddingStart()I" since="17" />
+		<method name="getPaddingTop()I" />
+		<method name="getParent()Landroid/view/ViewParent;" />
+		<method name="getParentForAccessibility()Landroid/view/ViewParent;" since="16" />
+		<method name="getPivotX()F" since="11" />
+		<method name="getPivotY()F" since="11" />
+		<method name="getPointerIcon()Landroid/view/PointerIcon;" since="24" />
+		<method name="getReceiveContentMimeTypes()[Ljava/lang/String;" since="31" />
+		<method name="getResources()Landroid/content/res/Resources;" />
+		<method name="getRevealOnFocusHint()Z" since="25" />
+		<method name="getRight()I" />
+		<method name="getRightFadingEdgeStrength()F" />
+		<method name="getRightPaddingOffset()I" since="2" />
+		<method name="getRootSurfaceControl()Landroid/view/AttachedSurfaceControl;" since="31" />
+		<method name="getRootView()Landroid/view/View;" />
+		<method name="getRootWindowInsets()Landroid/view/WindowInsets;" since="23" />
+		<method name="getRotation()F" since="11" />
+		<method name="getRotationX()F" since="11" />
+		<method name="getRotationY()F" since="11" />
+		<method name="getScaleX()F" since="11" />
+		<method name="getScaleY()F" since="11" />
+		<method name="getScrollBarDefaultDelayBeforeFade()I" since="16" />
+		<method name="getScrollBarFadeDuration()I" since="16" />
+		<method name="getScrollBarSize()I" since="16" />
+		<method name="getScrollBarStyle()I" />
+		<method name="getScrollCaptureHint()I" since="31" />
+		<method name="getScrollIndicators()I" since="23" />
+		<method name="getScrollX()I" />
+		<method name="getScrollY()I" />
+		<method name="getSolidColor()I" />
+		<method name="getSourceLayoutResId()I" since="29" />
+		<method name="getStateDescription()Ljava/lang/CharSequence;" since="30" />
+		<method name="getStateListAnimator()Landroid/animation/StateListAnimator;" since="21" />
+		<method name="getSuggestedMinimumHeight()I" />
+		<method name="getSuggestedMinimumWidth()I" />
+		<method name="getSystemGestureExclusionRects()Ljava/util/List;" since="29" />
+		<method name="getSystemUiVisibility()I" since="11" deprecated="30" />
+		<method name="getTag()Ljava/lang/Object;" />
+		<method name="getTag(I)Ljava/lang/Object;" since="4" />
+		<method name="getTextAlignment()I" since="17" />
+		<method name="getTextDirection()I" since="17" />
+		<method name="getTooltipText()Ljava/lang/CharSequence;" since="26" />
+		<method name="getTop()I" />
+		<method name="getTopFadingEdgeStrength()F" />
+		<method name="getTopPaddingOffset()I" since="2" />
+		<method name="getTouchDelegate()Landroid/view/TouchDelegate;" />
+		<method name="getTouchables()Ljava/util/ArrayList;" />
+		<method name="getTransitionAlpha()F" since="29" />
+		<method name="getTransitionName()Ljava/lang/String;" since="21" />
+		<method name="getTranslationX()F" since="11" />
+		<method name="getTranslationY()F" since="11" />
+		<method name="getTranslationZ()F" since="21" />
+		<method name="getUniqueDrawingId()J" since="29" />
+		<method name="getVerticalFadingEdgeLength()I" />
+		<method name="getVerticalScrollbarPosition()I" since="11" />
+		<method name="getVerticalScrollbarThumbDrawable()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getVerticalScrollbarTrackDrawable()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getVerticalScrollbarWidth()I" />
+		<method name="getViewTranslationResponse()Landroid/view/translation/ViewTranslationResponse;" since="31" />
+		<method name="getViewTreeObserver()Landroid/view/ViewTreeObserver;" />
+		<method name="getVisibility()I" />
+		<method name="getWidth()I" />
+		<method name="getWindowAttachCount()I" />
+		<method name="getWindowId()Landroid/view/WindowId;" since="18" />
+		<method name="getWindowInsetsController()Landroid/view/WindowInsetsController;" since="30" />
+		<method name="getWindowSystemUiVisibility()I" since="16" deprecated="30" />
+		<method name="getWindowToken()Landroid/os/IBinder;" />
+		<method name="getWindowVisibility()I" />
+		<method name="getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V" since="3" />
+		<method name="getX()F" since="11" />
+		<method name="getY()F" since="11" />
+		<method name="getZ()F" since="21" />
+		<method name="hasExplicitFocusable()Z" since="26" />
+		<method name="hasFocus()Z" />
+		<method name="hasFocusable()Z" />
+		<method name="hasNestedScrollingParent()Z" since="21" />
+		<method name="hasOnClickListeners()Z" since="15" />
+		<method name="hasOnLongClickListeners()Z" since="30" />
+		<method name="hasOverlappingRendering()Z" since="16" />
+		<method name="hasPointerCapture()Z" since="26" />
+		<method name="hasTransientState()Z" since="16" />
+		<method name="hasWindowFocus()Z" />
+		<method name="inflate(Landroid/content/Context;ILandroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="initializeFadingEdge(Landroid/content/res/TypedArray;)V" removed="21" />
+		<method name="initializeScrollbars(Landroid/content/res/TypedArray;)V" removed="21" />
+		<method name="invalidate()V" />
+		<method name="invalidate(IIII)V" deprecated="28" />
+		<method name="invalidate(Landroid/graphics/Rect;)V" deprecated="28" />
+		<method name="invalidateOutline()V" since="21" />
+		<method name="isAccessibilityFocused()Z" since="21" />
+		<method name="isAccessibilityHeading()Z" since="28" />
+		<method name="isActivated()Z" since="11" />
+		<method name="isAttachedToWindow()Z" since="19" />
+		<method name="isClickable()Z" />
+		<method name="isContextClickable()Z" since="23" />
+		<method name="isDirty()Z" since="11" />
+		<method name="isDrawingCacheEnabled()Z" deprecated="28" />
+		<method name="isDuplicateParentStateEnabled()Z" />
+		<method name="isEnabled()Z" />
+		<method name="isFocusable()Z" />
+		<method name="isFocusableInTouchMode()Z" />
+		<method name="isFocused()Z" />
+		<method name="isFocusedByDefault()Z" since="26" />
+		<method name="isForceDarkAllowed()Z" since="29" />
+		<method name="isHapticFeedbackEnabled()Z" since="3" />
+		<method name="isHardwareAccelerated()Z" since="11" />
+		<method name="isHorizontalFadingEdgeEnabled()Z" />
+		<method name="isHorizontalScrollBarEnabled()Z" />
+		<method name="isHovered()Z" since="14" />
+		<method name="isImportantForAccessibility()Z" since="21" />
+		<method name="isImportantForAutofill()Z" since="26" />
+		<method name="isImportantForContentCapture()Z" since="30" />
+		<method name="isInEditMode()Z" since="3" />
+		<method name="isInLayout()Z" since="18" />
+		<method name="isInTouchMode()Z" />
+		<method name="isKeyboardNavigationCluster()Z" since="26" />
+		<method name="isLaidOut()Z" since="19" />
+		<method name="isLayoutDirectionResolved()Z" since="19" />
+		<method name="isLayoutRequested()Z" />
+		<method name="isLongClickable()Z" />
+		<method name="isNestedScrollingEnabled()Z" since="21" />
+		<method name="isOpaque()Z" since="7" />
+		<method name="isPaddingOffsetRequired()Z" since="2" />
+		<method name="isPaddingRelative()Z" since="17" />
+		<method name="isPivotSet()Z" since="28" />
+		<method name="isPressed()Z" />
+		<method name="isSaveEnabled()Z" />
+		<method name="isSaveFromParentEnabled()Z" since="11" />
+		<method name="isScreenReaderFocusable()Z" since="28" />
+		<method name="isScrollContainer()Z" since="16" />
+		<method name="isScrollbarFadingEnabled()Z" since="5" />
+		<method name="isSelected()Z" />
+		<method name="isShowingLayoutBounds()Z" since="30" />
+		<method name="isShown()Z" />
+		<method name="isSoundEffectsEnabled()Z" />
+		<method name="isTemporarilyDetached()Z" since="24" />
+		<method name="isTextAlignmentResolved()Z" since="19" />
+		<method name="isTextDirectionResolved()Z" since="19" />
+		<method name="isVerticalFadingEdgeEnabled()Z" />
+		<method name="isVerticalScrollBarEnabled()Z" />
+		<method name="isVisibleToUserForAutofill(I)Z" since="28" />
+		<method name="jumpDrawablesToCurrentState()V" since="11" />
+		<method name="keyboardNavigationClusterSearch(Landroid/view/View;I)Landroid/view/View;" since="26" />
+		<method name="layout(IIII)V" />
+		<method name="measure(II)V" />
+		<method name="mergeDrawableStates([I[I)[I" />
+		<method name="offsetLeftAndRight(I)V" />
+		<method name="offsetTopAndBottom(I)V" />
+		<method name="onAnimationEnd()V" />
+		<method name="onAnimationStart()V" />
+		<method name="onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;" since="20" />
+		<method name="onAttachedToWindow()V" />
+		<method name="onCancelPendingInputEvents()V" since="19" />
+		<method name="onCapturedPointerEvent(Landroid/view/MotionEvent;)Z" since="26" />
+		<method name="onCheckIsTextEditor()Z" since="3" />
+		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V" since="8" />
+		<method name="onCreateContextMenu(Landroid/view/ContextMenu;)V" />
+		<method name="onCreateDrawableState(I)[I" />
+		<method name="onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;" since="3" />
+		<method name="onCreateViewTranslationRequest([ILjava/util/function/Consumer;)V" since="31" />
+		<method name="onCreateVirtualViewTranslationRequests([J[ILjava/util/function/Consumer;)V" since="31" />
+		<method name="onDetachedFromWindow()V" />
+		<method name="onDisplayHint(I)V" since="8" />
+		<method name="onDragEvent(Landroid/view/DragEvent;)Z" since="11" />
+		<method name="onDraw(Landroid/graphics/Canvas;)V" />
+		<method name="onDrawForeground(Landroid/graphics/Canvas;)V" since="23" />
+		<method name="onDrawScrollBars(Landroid/graphics/Canvas;)V" since="7" />
+		<method name="onFilterTouchEventForSecurity(Landroid/view/MotionEvent;)Z" since="9" />
+		<method name="onFinishInflate()V" />
+		<method name="onFinishTemporaryDetach()V" since="3" />
+		<method name="onFocusChanged(ZILandroid/graphics/Rect;)V" />
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12" />
+		<method name="onHoverChanged(Z)V" since="14" />
+		<method name="onHoverEvent(Landroid/view/MotionEvent;)Z" since="14" />
+		<method name="onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" since="14" />
+		<method name="onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V" since="14" />
+		<method name="onKeyPreIme(ILandroid/view/KeyEvent;)Z" since="3" />
+		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" />
+		<method name="onLayout(ZIIII)V" />
+		<method name="onMeasure(II)V" />
+		<method name="onOverScrolled(IIZZ)V" since="9" />
+		<method name="onPointerCaptureChange(Z)V" since="26" />
+		<method name="onPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" since="14" />
+		<method name="onProvideAutofillStructure(Landroid/view/ViewStructure;I)V" since="26" />
+		<method name="onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V" since="26" />
+		<method name="onProvideContentCaptureStructure(Landroid/view/ViewStructure;I)V" since="30" />
+		<method name="onProvideStructure(Landroid/view/ViewStructure;)V" since="23" />
+		<method name="onProvideVirtualStructure(Landroid/view/ViewStructure;)V" since="23" />
+		<method name="onReceiveContent(Landroid/view/ContentInfo;)Landroid/view/ContentInfo;" since="31" />
+		<method name="onResolvePointerIcon(Landroid/view/MotionEvent;I)Landroid/view/PointerIcon;" since="24" />
+		<method name="onRestoreInstanceState(Landroid/os/Parcelable;)V" />
+		<method name="onRtlPropertiesChanged(I)V" since="17" />
+		<method name="onSaveInstanceState()Landroid/os/Parcelable;" />
+		<method name="onScreenStateChanged(I)V" since="16" />
+		<method name="onScrollCaptureSearch(Landroid/graphics/Rect;Landroid/graphics/Point;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="onScrollChanged(IIII)V" />
+		<method name="onSetAlpha(I)Z" />
+		<method name="onSizeChanged(IIII)V" />
+		<method name="onStartTemporaryDetach()V" since="3" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onViewTranslationResponse(Landroid/view/translation/ViewTranslationResponse;)V" since="31" />
+		<method name="onVirtualViewTranslationResponses(Landroid/util/LongSparseArray;)V" since="31" />
+		<method name="onVisibilityAggregated(Z)V" since="24" />
+		<method name="onVisibilityChanged(Landroid/view/View;I)V" since="8" />
+		<method name="onWindowFocusChanged(Z)V" />
+		<method name="onWindowSystemUiVisibilityChanged(I)V" since="16" deprecated="30" />
+		<method name="onWindowVisibilityChanged(I)V" />
+		<method name="overScrollBy(IIIIIIIIZ)Z" since="9" />
+		<method name="performAccessibilityAction(ILandroid/os/Bundle;)Z" since="16" />
+		<method name="performClick()Z" />
+		<method name="performContextClick()Z" since="23" />
+		<method name="performContextClick(FF)Z" since="24" />
+		<method name="performHapticFeedback(I)Z" since="3" />
+		<method name="performHapticFeedback(II)Z" since="3" />
+		<method name="performLongClick()Z" />
+		<method name="performLongClick(FF)Z" since="24" />
+		<method name="performReceiveContent(Landroid/view/ContentInfo;)Landroid/view/ContentInfo;" since="31" />
+		<method name="playSoundEffect(I)V" />
+		<method name="post(Ljava/lang/Runnable;)Z" />
+		<method name="postDelayed(Ljava/lang/Runnable;J)Z" />
+		<method name="postInvalidate()V" />
+		<method name="postInvalidate(IIII)V" />
+		<method name="postInvalidateDelayed(J)V" />
+		<method name="postInvalidateDelayed(JIIII)V" />
+		<method name="postInvalidateOnAnimation()V" since="16" />
+		<method name="postInvalidateOnAnimation(IIII)V" since="16" />
+		<method name="postOnAnimation(Ljava/lang/Runnable;)V" since="16" />
+		<method name="postOnAnimationDelayed(Ljava/lang/Runnable;J)V" since="16" />
+		<method name="refreshDrawableState()V" />
+		<method name="releasePointerCapture()V" since="26" />
+		<method name="removeCallbacks(Ljava/lang/Runnable;)Z" />
+		<method name="removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V" since="12" />
+		<method name="removeOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V" since="11" />
+		<method name="removeOnUnhandledKeyEventListener(Landroid/view/View$OnUnhandledKeyEventListener;)V" since="28" />
+		<method name="requestApplyInsets()V" since="20" />
+		<method name="requestFitSystemWindows()V" since="16" deprecated="20" />
+		<method name="requestFocus()Z" />
+		<method name="requestFocus(I)Z" />
+		<method name="requestFocus(ILandroid/graphics/Rect;)Z" />
+		<method name="requestFocusFromTouch()Z" />
+		<method name="requestLayout()V" />
+		<method name="requestPointerCapture()V" since="26" />
+		<method name="requestRectangleOnScreen(Landroid/graphics/Rect;)Z" />
+		<method name="requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z" />
+		<method name="requestUnbufferedDispatch(I)V" since="30" />
+		<method name="requestUnbufferedDispatch(Landroid/view/MotionEvent;)V" since="21" />
+		<method name="requireViewById(I)Landroid/view/View;" since="28" />
+		<method name="resetPivot()V" since="28" />
+		<method name="resolveSize(II)I" />
+		<method name="resolveSizeAndState(III)I" since="11" />
+		<method name="restoreDefaultFocus()Z" since="26" />
+		<method name="restoreHierarchyState(Landroid/util/SparseArray;)V" />
+		<method name="saveAttributeDataForStyleable(Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V" since="29" />
+		<method name="saveHierarchyState(Landroid/util/SparseArray;)V" />
+		<method name="scrollBy(II)V" />
+		<method name="scrollTo(II)V" />
+		<method name="setAccessibilityDelegate(Landroid/view/View$AccessibilityDelegate;)V" since="14" />
+		<method name="setAccessibilityHeading(Z)V" since="28" />
+		<method name="setAccessibilityLiveRegion(I)V" since="19" />
+		<method name="setAccessibilityPaneTitle(Ljava/lang/CharSequence;)V" since="28" />
+		<method name="setAccessibilityTraversalAfter(I)V" since="22" />
+		<method name="setAccessibilityTraversalBefore(I)V" since="22" />
+		<method name="setActivated(Z)V" since="11" />
+		<method name="setAllowClickWhenDisabled(Z)V" since="31" />
+		<method name="setAlpha(F)V" since="11" />
+		<method name="setAnimation(Landroid/view/animation/Animation;)V" />
+		<method name="setAnimationMatrix(Landroid/graphics/Matrix;)V" since="29" />
+		<method name="setAutofillHints([Ljava/lang/String;)V" since="26" />
+		<method name="setAutofillId(Landroid/view/autofill/AutofillId;)V" since="28" />
+		<method name="setBackground(Landroid/graphics/drawable/Drawable;)V" since="16" />
+		<method name="setBackgroundColor(I)V" />
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="16" />
+		<method name="setBackgroundResource(I)V" />
+		<method name="setBackgroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setBottom(I)V" since="11" />
+		<method name="setCameraDistance(F)V" since="12" />
+		<method name="setClickable(Z)V" />
+		<method name="setClipBounds(Landroid/graphics/Rect;)V" since="18" />
+		<method name="setClipToOutline(Z)V" since="21" />
+		<method name="setContentCaptureSession(Landroid/view/contentcapture/ContentCaptureSession;)V" since="29" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" since="4" />
+		<method name="setContextClickable(Z)V" since="23" />
+		<method name="setDefaultFocusHighlightEnabled(Z)V" since="26" />
+		<method name="setDrawingCacheBackgroundColor(I)V" deprecated="28" />
+		<method name="setDrawingCacheEnabled(Z)V" deprecated="28" />
+		<method name="setDrawingCacheQuality(I)V" deprecated="28" />
+		<method name="setDuplicateParentStateEnabled(Z)V" />
+		<method name="setElevation(F)V" since="21" />
+		<method name="setEnabled(Z)V" />
+		<method name="setFadingEdgeLength(I)V" />
+		<method name="setFilterTouchesWhenObscured(Z)V" since="9" />
+		<method name="setFitsSystemWindows(Z)V" since="14" />
+		<method name="setFocusable(I)V" since="26" />
+		<method name="setFocusable(Z)V" />
+		<method name="setFocusableInTouchMode(Z)V" />
+		<method name="setFocusedByDefault(Z)V" since="26" />
+		<method name="setForceDarkAllowed(Z)V" since="29" />
+		<method name="setForeground(Landroid/graphics/drawable/Drawable;)V" since="23" />
+		<method name="setForegroundGravity(I)V" since="23" />
+		<method name="setForegroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setForegroundTintList(Landroid/content/res/ColorStateList;)V" since="23" />
+		<method name="setForegroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23" />
+		<method name="setHapticFeedbackEnabled(Z)V" since="3" />
+		<method name="setHasTransientState(Z)V" since="16" />
+		<method name="setHorizontalFadingEdgeEnabled(Z)V" />
+		<method name="setHorizontalScrollBarEnabled(Z)V" />
+		<method name="setHorizontalScrollbarThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setHorizontalScrollbarTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setHovered(Z)V" since="14" />
+		<method name="setId(I)V" />
+		<method name="setImportantForAccessibility(I)V" since="16" />
+		<method name="setImportantForAutofill(I)V" since="26" />
+		<method name="setImportantForContentCapture(I)V" since="30" />
+		<method name="setKeepScreenOn(Z)V" />
+		<method name="setKeyboardNavigationCluster(Z)V" since="26" />
+		<method name="setLabelFor(I)V" since="17" />
+		<method name="setLayerPaint(Landroid/graphics/Paint;)V" since="17" />
+		<method name="setLayerType(ILandroid/graphics/Paint;)V" since="11" />
+		<method name="setLayoutDirection(I)V" since="17" />
+		<method name="setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="setLeft(I)V" since="11" />
+		<method name="setLeftTopRightBottom(IIII)V" since="29" />
+		<method name="setLongClickable(Z)V" />
+		<method name="setMeasuredDimension(II)V" />
+		<method name="setMinimumHeight(I)V" />
+		<method name="setMinimumWidth(I)V" />
+		<method name="setNestedScrollingEnabled(Z)V" since="21" />
+		<method name="setNextClusterForwardId(I)V" since="26" />
+		<method name="setNextFocusDownId(I)V" />
+		<method name="setNextFocusForwardId(I)V" since="11" />
+		<method name="setNextFocusLeftId(I)V" />
+		<method name="setNextFocusRightId(I)V" />
+		<method name="setNextFocusUpId(I)V" />
+		<method name="setOnApplyWindowInsetsListener(Landroid/view/View$OnApplyWindowInsetsListener;)V" since="20" />
+		<method name="setOnCapturedPointerListener(Landroid/view/View$OnCapturedPointerListener;)V" since="26" />
+		<method name="setOnClickListener(Landroid/view/View$OnClickListener;)V" />
+		<method name="setOnContextClickListener(Landroid/view/View$OnContextClickListener;)V" since="23" />
+		<method name="setOnCreateContextMenuListener(Landroid/view/View$OnCreateContextMenuListener;)V" />
+		<method name="setOnDragListener(Landroid/view/View$OnDragListener;)V" since="11" />
+		<method name="setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V" />
+		<method name="setOnGenericMotionListener(Landroid/view/View$OnGenericMotionListener;)V" since="12" />
+		<method name="setOnHoverListener(Landroid/view/View$OnHoverListener;)V" since="14" />
+		<method name="setOnKeyListener(Landroid/view/View$OnKeyListener;)V" />
+		<method name="setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V" />
+		<method name="setOnReceiveContentListener([Ljava/lang/String;Landroid/view/OnReceiveContentListener;)V" since="31" />
+		<method name="setOnScrollChangeListener(Landroid/view/View$OnScrollChangeListener;)V" since="23" />
+		<method name="setOnSystemUiVisibilityChangeListener(Landroid/view/View$OnSystemUiVisibilityChangeListener;)V" since="11" deprecated="30" />
+		<method name="setOnTouchListener(Landroid/view/View$OnTouchListener;)V" />
+		<method name="setOutlineAmbientShadowColor(I)V" since="28" />
+		<method name="setOutlineProvider(Landroid/view/ViewOutlineProvider;)V" since="21" />
+		<method name="setOutlineSpotShadowColor(I)V" since="28" />
+		<method name="setOverScrollMode(I)V" since="9" />
+		<method name="setPadding(IIII)V" />
+		<method name="setPaddingRelative(IIII)V" since="17" />
+		<method name="setPivotX(F)V" since="11" />
+		<method name="setPivotY(F)V" since="11" />
+		<method name="setPointerIcon(Landroid/view/PointerIcon;)V" since="24" />
+		<method name="setPressed(Z)V" />
+		<method name="setRenderEffect(Landroid/graphics/RenderEffect;)V" since="31" />
+		<method name="setRevealOnFocusHint(Z)V" since="25" />
+		<method name="setRight(I)V" since="11" />
+		<method name="setRotation(F)V" since="11" />
+		<method name="setRotationX(F)V" since="11" />
+		<method name="setRotationY(F)V" since="11" />
+		<method name="setSaveEnabled(Z)V" />
+		<method name="setSaveFromParentEnabled(Z)V" since="11" />
+		<method name="setScaleX(F)V" since="11" />
+		<method name="setScaleY(F)V" since="11" />
+		<method name="setScreenReaderFocusable(Z)V" since="28" />
+		<method name="setScrollBarDefaultDelayBeforeFade(I)V" since="16" />
+		<method name="setScrollBarFadeDuration(I)V" since="16" />
+		<method name="setScrollBarSize(I)V" since="16" />
+		<method name="setScrollBarStyle(I)V" />
+		<method name="setScrollCaptureCallback(Landroid/view/ScrollCaptureCallback;)V" since="31" />
+		<method name="setScrollCaptureHint(I)V" since="31" />
+		<method name="setScrollContainer(Z)V" since="3" />
+		<method name="setScrollIndicators(I)V" since="23" />
+		<method name="setScrollIndicators(II)V" since="23" />
+		<method name="setScrollX(I)V" since="14" />
+		<method name="setScrollY(I)V" since="14" />
+		<method name="setScrollbarFadingEnabled(Z)V" since="5" />
+		<method name="setSelected(Z)V" />
+		<method name="setSoundEffectsEnabled(Z)V" />
+		<method name="setStateDescription(Ljava/lang/CharSequence;)V" since="30" />
+		<method name="setStateListAnimator(Landroid/animation/StateListAnimator;)V" since="21" />
+		<method name="setSystemGestureExclusionRects(Ljava/util/List;)V" since="29" />
+		<method name="setSystemUiVisibility(I)V" since="11" deprecated="30" />
+		<method name="setTag(ILjava/lang/Object;)V" since="4" />
+		<method name="setTag(Ljava/lang/Object;)V" />
+		<method name="setTextAlignment(I)V" since="17" />
+		<method name="setTextDirection(I)V" since="17" />
+		<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="26" />
+		<method name="setTop(I)V" since="11" />
+		<method name="setTouchDelegate(Landroid/view/TouchDelegate;)V" />
+		<method name="setTransitionAlpha(F)V" since="29" />
+		<method name="setTransitionName(Ljava/lang/String;)V" since="21" />
+		<method name="setTransitionVisibility(I)V" since="29" />
+		<method name="setTranslationX(F)V" since="11" />
+		<method name="setTranslationY(F)V" since="11" />
+		<method name="setTranslationZ(F)V" since="21" />
+		<method name="setVerticalFadingEdgeEnabled(Z)V" />
+		<method name="setVerticalScrollBarEnabled(Z)V" />
+		<method name="setVerticalScrollbarPosition(I)V" since="11" />
+		<method name="setVerticalScrollbarThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setVerticalScrollbarTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setViewTranslationCallback(Landroid/view/translation/ViewTranslationCallback;)V" since="31" />
+		<method name="setVisibility(I)V" />
+		<method name="setWillNotCacheDrawing(Z)V" deprecated="28" />
+		<method name="setWillNotDraw(Z)V" />
+		<method name="setWindowInsetsAnimationCallback(Landroid/view/WindowInsetsAnimation$Callback;)V" since="30" />
+		<method name="setX(F)V" since="11" />
+		<method name="setY(F)V" since="11" />
+		<method name="setZ(F)V" since="21" />
+		<method name="showContextMenu()Z" />
+		<method name="showContextMenu(FF)Z" since="24" />
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11" />
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23" />
+		<method name="startAnimation(Landroid/view/animation/Animation;)V" />
+		<method name="startDrag(Landroid/content/ClipData;Landroid/view/View$DragShadowBuilder;Ljava/lang/Object;I)Z" since="11" deprecated="24" />
+		<method name="startDragAndDrop(Landroid/content/ClipData;Landroid/view/View$DragShadowBuilder;Ljava/lang/Object;I)Z" since="24" />
+		<method name="startNestedScroll(I)Z" since="21" />
+		<method name="stopNestedScroll()V" since="21" />
+		<method name="transformMatrixToGlobal(Landroid/graphics/Matrix;)V" since="29" />
+		<method name="transformMatrixToLocal(Landroid/graphics/Matrix;)V" since="29" />
+		<method name="unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="updateDragShadow(Landroid/view/View$DragShadowBuilder;)V" since="24" />
+		<method name="verifyDrawable(Landroid/graphics/drawable/Drawable;)Z" />
+		<method name="willNotCacheDrawing()Z" deprecated="28" />
+		<method name="willNotDraw()Z" />
+		<field name="ACCESSIBILITY_LIVE_REGION_ASSERTIVE" since="19" />
+		<field name="ACCESSIBILITY_LIVE_REGION_NONE" since="19" />
+		<field name="ACCESSIBILITY_LIVE_REGION_POLITE" since="19" />
+		<field name="ALPHA" since="14" />
+		<field name="AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS" since="26" />
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE" since="26" />
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY" since="26" />
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH" since="26" />
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR" since="26" />
+		<field name="AUTOFILL_HINT_CREDIT_CARD_NUMBER" since="26" />
+		<field name="AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE" since="26" />
+		<field name="AUTOFILL_HINT_EMAIL_ADDRESS" since="26" />
+		<field name="AUTOFILL_HINT_NAME" since="26" />
+		<field name="AUTOFILL_HINT_PASSWORD" since="26" />
+		<field name="AUTOFILL_HINT_PHONE" since="26" />
+		<field name="AUTOFILL_HINT_POSTAL_ADDRESS" since="26" />
+		<field name="AUTOFILL_HINT_POSTAL_CODE" since="26" />
+		<field name="AUTOFILL_HINT_USERNAME" since="26" />
+		<field name="AUTOFILL_TYPE_DATE" since="26" />
+		<field name="AUTOFILL_TYPE_LIST" since="26" />
+		<field name="AUTOFILL_TYPE_NONE" since="26" />
+		<field name="AUTOFILL_TYPE_TEXT" since="26" />
+		<field name="AUTOFILL_TYPE_TOGGLE" since="26" />
+		<field name="DRAG_FLAG_ACCESSIBILITY_ACTION" since="33" />
+		<field name="DRAG_FLAG_GLOBAL" since="24" />
+		<field name="DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION" since="24" />
+		<field name="DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION" since="24" />
+		<field name="DRAG_FLAG_GLOBAL_URI_READ" since="24" />
+		<field name="DRAG_FLAG_GLOBAL_URI_WRITE" since="24" />
+		<field name="DRAG_FLAG_OPAQUE" since="24" />
+		<field name="DRAWING_CACHE_QUALITY_AUTO" deprecated="28" />
+		<field name="DRAWING_CACHE_QUALITY_HIGH" deprecated="28" />
+		<field name="DRAWING_CACHE_QUALITY_LOW" deprecated="28" />
+		<field name="EMPTY_STATE_SET" />
+		<field name="ENABLED_FOCUSED_SELECTED_STATE_SET" />
+		<field name="ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="ENABLED_FOCUSED_STATE_SET" />
+		<field name="ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="ENABLED_SELECTED_STATE_SET" />
+		<field name="ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="ENABLED_STATE_SET" />
+		<field name="ENABLED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="FIND_VIEWS_WITH_CONTENT_DESCRIPTION" since="14" />
+		<field name="FIND_VIEWS_WITH_TEXT" since="14" />
+		<field name="FOCUSABLE" since="26" />
+		<field name="FOCUSABLES_ALL" since="4" />
+		<field name="FOCUSABLES_TOUCH_MODE" since="4" />
+		<field name="FOCUSABLE_AUTO" since="26" />
+		<field name="FOCUSED_SELECTED_STATE_SET" />
+		<field name="FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="FOCUSED_STATE_SET" />
+		<field name="FOCUSED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="FOCUS_BACKWARD" />
+		<field name="FOCUS_DOWN" />
+		<field name="FOCUS_FORWARD" />
+		<field name="FOCUS_LEFT" />
+		<field name="FOCUS_RIGHT" />
+		<field name="FOCUS_UP" />
+		<field name="GONE" />
+		<field name="HAPTIC_FEEDBACK_ENABLED" since="3" />
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_AUTO" since="16" />
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_NO" since="16" />
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS" since="19" />
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_YES" since="16" />
+		<field name="IMPORTANT_FOR_AUTOFILL_AUTO" since="26" />
+		<field name="IMPORTANT_FOR_AUTOFILL_NO" since="26" />
+		<field name="IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS" since="26" />
+		<field name="IMPORTANT_FOR_AUTOFILL_YES" since="26" />
+		<field name="IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS" since="26" />
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_AUTO" since="30" />
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_NO" since="30" />
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_NO_EXCLUDE_DESCENDANTS" since="30" />
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_YES" since="30" />
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_YES_EXCLUDE_DESCENDANTS" since="30" />
+		<field name="INVISIBLE" />
+		<field name="KEEP_SCREEN_ON" />
+		<field name="LAYER_TYPE_HARDWARE" since="11" />
+		<field name="LAYER_TYPE_NONE" since="11" />
+		<field name="LAYER_TYPE_SOFTWARE" since="11" />
+		<field name="LAYOUT_DIRECTION_INHERIT" since="17" />
+		<field name="LAYOUT_DIRECTION_LOCALE" since="17" />
+		<field name="LAYOUT_DIRECTION_LTR" since="17" />
+		<field name="LAYOUT_DIRECTION_RTL" since="17" />
+		<field name="MEASURED_HEIGHT_STATE_SHIFT" since="11" />
+		<field name="MEASURED_SIZE_MASK" since="11" />
+		<field name="MEASURED_STATE_MASK" since="11" />
+		<field name="MEASURED_STATE_TOO_SMALL" since="11" />
+		<field name="NOT_FOCUSABLE" since="26" />
+		<field name="NO_ID" />
+		<field name="OVER_SCROLL_ALWAYS" since="9" />
+		<field name="OVER_SCROLL_IF_CONTENT_SCROLLS" since="9" />
+		<field name="OVER_SCROLL_NEVER" since="9" />
+		<field name="PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET" />
+		<field name="PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="PRESSED_ENABLED_FOCUSED_STATE_SET" />
+		<field name="PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="PRESSED_ENABLED_SELECTED_STATE_SET" />
+		<field name="PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="PRESSED_ENABLED_STATE_SET" />
+		<field name="PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="PRESSED_FOCUSED_SELECTED_STATE_SET" />
+		<field name="PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="PRESSED_FOCUSED_STATE_SET" />
+		<field name="PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="PRESSED_SELECTED_STATE_SET" />
+		<field name="PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="PRESSED_STATE_SET" since="19" />
+		<field name="PRESSED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="ROTATION" since="14" />
+		<field name="ROTATION_X" since="14" />
+		<field name="ROTATION_Y" since="14" />
+		<field name="SCALE_X" since="14" />
+		<field name="SCALE_Y" since="14" />
+		<field name="SCREEN_STATE_OFF" since="16" />
+		<field name="SCREEN_STATE_ON" since="16" />
+		<field name="SCROLLBARS_INSIDE_INSET" />
+		<field name="SCROLLBARS_INSIDE_OVERLAY" />
+		<field name="SCROLLBARS_OUTSIDE_INSET" />
+		<field name="SCROLLBARS_OUTSIDE_OVERLAY" />
+		<field name="SCROLLBAR_POSITION_DEFAULT" since="11" />
+		<field name="SCROLLBAR_POSITION_LEFT" since="11" />
+		<field name="SCROLLBAR_POSITION_RIGHT" since="11" />
+		<field name="SCROLL_AXIS_HORIZONTAL" since="21" />
+		<field name="SCROLL_AXIS_NONE" since="21" />
+		<field name="SCROLL_AXIS_VERTICAL" since="21" />
+		<field name="SCROLL_CAPTURE_HINT_AUTO" since="31" />
+		<field name="SCROLL_CAPTURE_HINT_EXCLUDE" since="31" />
+		<field name="SCROLL_CAPTURE_HINT_EXCLUDE_DESCENDANTS" since="31" />
+		<field name="SCROLL_CAPTURE_HINT_INCLUDE" since="31" />
+		<field name="SCROLL_INDICATOR_BOTTOM" since="23" />
+		<field name="SCROLL_INDICATOR_END" since="23" />
+		<field name="SCROLL_INDICATOR_LEFT" since="23" />
+		<field name="SCROLL_INDICATOR_RIGHT" since="23" />
+		<field name="SCROLL_INDICATOR_START" since="23" />
+		<field name="SCROLL_INDICATOR_TOP" since="23" />
+		<field name="SELECTED_STATE_SET" />
+		<field name="SELECTED_WINDOW_FOCUSED_STATE_SET" />
+		<field name="SOUND_EFFECTS_ENABLED" />
+		<field name="STATUS_BAR_HIDDEN" since="11" deprecated="15" />
+		<field name="STATUS_BAR_VISIBLE" since="11" deprecated="15" />
+		<field name="SYSTEM_UI_FLAG_FULLSCREEN" since="16" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_HIDE_NAVIGATION" since="14" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_IMMERSIVE" since="19" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_IMMERSIVE_STICKY" since="19" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN" since="16" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION" since="16" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_LAYOUT_STABLE" since="16" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR" since="26" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_LIGHT_STATUS_BAR" since="23" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_LOW_PROFILE" since="14" deprecated="30" />
+		<field name="SYSTEM_UI_FLAG_VISIBLE" since="14" deprecated="30" />
+		<field name="SYSTEM_UI_LAYOUT_FLAGS" since="16" deprecated="30" />
+		<field name="TEXT_ALIGNMENT_CENTER" since="17" />
+		<field name="TEXT_ALIGNMENT_GRAVITY" since="17" />
+		<field name="TEXT_ALIGNMENT_INHERIT" since="16" />
+		<field name="TEXT_ALIGNMENT_RESOLVED_DEFAULT" since="16" removed="17" />
+		<field name="TEXT_ALIGNMENT_TEXT_END" since="17" />
+		<field name="TEXT_ALIGNMENT_TEXT_START" since="17" />
+		<field name="TEXT_ALIGNMENT_VIEW_END" since="17" />
+		<field name="TEXT_ALIGNMENT_VIEW_START" since="17" />
+		<field name="TEXT_DIRECTION_ANY_RTL" since="17" />
+		<field name="TEXT_DIRECTION_FIRST_STRONG" since="17" />
+		<field name="TEXT_DIRECTION_FIRST_STRONG_LTR" since="23" />
+		<field name="TEXT_DIRECTION_FIRST_STRONG_RTL" since="23" />
+		<field name="TEXT_DIRECTION_INHERIT" since="17" />
+		<field name="TEXT_DIRECTION_LOCALE" since="17" />
+		<field name="TEXT_DIRECTION_LTR" since="17" />
+		<field name="TEXT_DIRECTION_RTL" since="17" />
+		<field name="TRANSLATION_X" since="14" />
+		<field name="TRANSLATION_Y" since="14" />
+		<field name="TRANSLATION_Z" since="21" />
+		<field name="VIEW_LOG_TAG" />
+		<field name="VISIBLE" />
+		<field name="WINDOW_FOCUSED_STATE_SET" />
+		<field name="X" since="14" />
+		<field name="Y" since="14" />
+		<field name="Z" since="21" />
+	</class>
+	<class name="android/view/View$AccessibilityDelegate" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addExtraDataToAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26" />
+		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" />
+		<method name="getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;" since="16" />
+		<method name="onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V" />
+		<method name="onInitializeAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;)V" />
+		<method name="onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V" />
+		<method name="onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" />
+		<method name="performAccessibilityAction(Landroid/view/View;ILandroid/os/Bundle;)Z" since="16" />
+		<method name="sendAccessibilityEvent(Landroid/view/View;I)V" />
+		<method name="sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V" />
+	</class>
+	<class name="android/view/View$BaseSavedState" since="1">
+		<extends name="android/view/AbsSavedState" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V" since="24" />
+		<method name="&lt;init&gt;(Landroid/os/Parcelable;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/View$DragShadowBuilder" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/view/View;)V" />
+		<method name="getView()Landroid/view/View;" />
+		<method name="onDrawShadow(Landroid/graphics/Canvas;)V" />
+		<method name="onProvideShadowMetrics(Landroid/graphics/Point;Landroid/graphics/Point;)V" />
+	</class>
+	<class name="android/view/View$MeasureSpec" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getMode(I)I" />
+		<method name="getSize(I)I" />
+		<method name="makeMeasureSpec(II)I" />
+		<method name="toString(I)Ljava/lang/String;" />
+		<field name="AT_MOST" />
+		<field name="EXACTLY" />
+		<field name="UNSPECIFIED" />
+	</class>
+	<class name="android/view/View$OnApplyWindowInsetsListener" since="20">
+		<extends name="java/lang/Object" />
+		<method name="onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;" />
+	</class>
+	<class name="android/view/View$OnAttachStateChangeListener" since="12">
+		<extends name="java/lang/Object" />
+		<method name="onViewAttachedToWindow(Landroid/view/View;)V" />
+		<method name="onViewDetachedFromWindow(Landroid/view/View;)V" />
+	</class>
+	<class name="android/view/View$OnCapturedPointerListener" since="26">
+		<extends name="java/lang/Object" />
+		<method name="onCapturedPointer(Landroid/view/View;Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/view/View$OnClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onClick(Landroid/view/View;)V" />
+	</class>
+	<class name="android/view/View$OnContextClickListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onContextClick(Landroid/view/View;)Z" />
+	</class>
+	<class name="android/view/View$OnCreateContextMenuListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onCreateContextMenu(Landroid/view/ContextMenu;Landroid/view/View;Landroid/view/ContextMenu$ContextMenuInfo;)V" />
+	</class>
+	<class name="android/view/View$OnDragListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onDrag(Landroid/view/View;Landroid/view/DragEvent;)Z" />
+	</class>
+	<class name="android/view/View$OnFocusChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onFocusChange(Landroid/view/View;Z)V" />
+	</class>
+	<class name="android/view/View$OnGenericMotionListener" since="12">
+		<extends name="java/lang/Object" />
+		<method name="onGenericMotion(Landroid/view/View;Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/view/View$OnHoverListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onHover(Landroid/view/View;Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/view/View$OnKeyListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onKey(Landroid/view/View;ILandroid/view/KeyEvent;)Z" />
+	</class>
+	<class name="android/view/View$OnLayoutChangeListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onLayoutChange(Landroid/view/View;IIIIIIII)V" />
+	</class>
+	<class name="android/view/View$OnLongClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onLongClick(Landroid/view/View;)Z" />
+	</class>
+	<class name="android/view/View$OnScrollChangeListener" since="23">
+		<extends name="java/lang/Object" />
+		<method name="onScrollChange(Landroid/view/View;IIII)V" />
+	</class>
+	<class name="android/view/View$OnSystemUiVisibilityChangeListener" since="11" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="onSystemUiVisibilityChange(I)V" deprecated="30" />
+	</class>
+	<class name="android/view/View$OnTouchListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onTouch(Landroid/view/View;Landroid/view/MotionEvent;)Z" />
+	</class>
+	<class name="android/view/View$OnUnhandledKeyEventListener" since="28">
+		<extends name="java/lang/Object" />
+		<method name="onUnhandledKeyEvent(Landroid/view/View;Landroid/view/KeyEvent;)Z" />
+	</class>
+	<class name="android/view/ViewAnimationUtils" since="21">
+		<extends name="java/lang/Object" />
+		<method name="createCircularReveal(Landroid/view/View;IIFF)Landroid/animation/Animator;" />
+	</class>
+	<class name="android/view/ViewConfiguration" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="15" />
+		<method name="get(Landroid/content/Context;)Landroid/view/ViewConfiguration;" since="3" />
+		<method name="getAmbiguousGestureMultiplier()F" since="29" deprecated="30" />
+		<method name="getDefaultActionModeHideDuration()J" since="23" />
+		<method name="getDoubleTapTimeout()I" since="3" />
+		<method name="getEdgeSlop()I" deprecated="15" />
+		<method name="getFadingEdgeLength()I" deprecated="15" />
+		<method name="getGlobalActionKeyTimeout()J" deprecated="20" />
+		<method name="getJumpTapTimeout()I" />
+		<method name="getKeyRepeatDelay()I" since="12" />
+		<method name="getKeyRepeatTimeout()I" since="12" />
+		<method name="getLongPressTimeout()I" />
+		<method name="getMaximumDrawingCacheSize()I" deprecated="15" />
+		<method name="getMaximumFlingVelocity()I" since="4" deprecated="15" />
+		<method name="getMinimumFlingVelocity()I" deprecated="15" />
+		<method name="getMultiPressTimeout()I" since="31" />
+		<method name="getPressedStateDuration()I" />
+		<method name="getScaledAmbiguousGestureMultiplier()F" since="30" />
+		<method name="getScaledDoubleTapSlop()I" since="3" />
+		<method name="getScaledEdgeSlop()I" since="3" />
+		<method name="getScaledFadingEdgeLength()I" since="3" />
+		<method name="getScaledHorizontalScrollFactor()F" since="26" />
+		<method name="getScaledHoverSlop()I" since="28" />
+		<method name="getScaledMaximumDrawingCacheSize()I" since="3" />
+		<method name="getScaledMaximumFlingVelocity()I" since="4" />
+		<method name="getScaledMinimumFlingVelocity()I" since="3" />
+		<method name="getScaledMinimumScalingSpan()I" since="29" />
+		<method name="getScaledOverflingDistance()I" since="9" />
+		<method name="getScaledOverscrollDistance()I" since="9" />
+		<method name="getScaledPagingTouchSlop()I" since="8" />
+		<method name="getScaledScrollBarSize()I" since="3" />
+		<method name="getScaledTouchSlop()I" since="3" />
+		<method name="getScaledVerticalScrollFactor()F" since="26" />
+		<method name="getScaledWindowTouchSlop()I" since="3" />
+		<method name="getScrollBarFadeDuration()I" since="5" />
+		<method name="getScrollBarSize()I" deprecated="15" />
+		<method name="getScrollDefaultDelay()I" since="5" />
+		<method name="getScrollFriction()F" />
+		<method name="getTapTimeout()I" />
+		<method name="getTouchSlop()I" deprecated="15" />
+		<method name="getWindowTouchSlop()I" deprecated="15" />
+		<method name="getZoomControlsTimeout()J" />
+		<method name="hasPermanentMenuKey()Z" since="14" />
+		<method name="shouldShowMenuShortcutsWhenKeyboardPresent()Z" since="28" />
+	</class>
+	<class name="android/view/ViewDebug" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="dumpCapturedView(Ljava/lang/String;Ljava/lang/Object;)V" since="3" />
+		<method name="startHierarchyTracing(Ljava/lang/String;Landroid/view/View;)V" deprecated="16" />
+		<method name="startRecyclerTracing(Ljava/lang/String;Landroid/view/View;)V" deprecated="16" />
+		<method name="stopHierarchyTracing()V" deprecated="16" />
+		<method name="stopRecyclerTracing()V" deprecated="16" />
+		<method name="trace(Landroid/view/View;Landroid/view/ViewDebug$HierarchyTraceType;)V" deprecated="16" />
+		<method name="trace(Landroid/view/View;Landroid/view/ViewDebug$RecyclerTraceType;[I)V" deprecated="16" />
+		<field name="TRACE_HIERARCHY" deprecated="16" />
+		<field name="TRACE_RECYCLER" deprecated="16" />
+	</class>
+	<class name="android/view/ViewDebug$CapturedViewProperty" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="retrieveReturn()Z" />
+	</class>
+	<class name="android/view/ViewDebug$ExportedProperty" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="category()Ljava/lang/String;" since="9" />
+		<method name="deepExport()Z" />
+		<method name="flagMapping()[Landroid/view/ViewDebug$FlagToString;" since="4" />
+		<method name="formatToHexString()Z" since="21" />
+		<method name="hasAdjacentMapping()Z" since="21" />
+		<method name="indexMapping()[Landroid/view/ViewDebug$IntToString;" since="3" />
+		<method name="mapping()[Landroid/view/ViewDebug$IntToString;" />
+		<method name="prefix()Ljava/lang/String;" />
+		<method name="resolveId()Z" />
+	</class>
+	<class name="android/view/ViewDebug$FlagToString" since="4">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="equals()I" />
+		<method name="mask()I" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="outputIf()Z" />
+	</class>
+	<class name="android/view/ViewDebug$HierarchyTraceType" since="1" deprecated="16">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$HierarchyTraceType;" />
+		<method name="values()[Landroid/view/ViewDebug$HierarchyTraceType;" />
+		<field name="BUILD_CACHE" deprecated="29" />
+		<field name="DRAW" deprecated="29" />
+		<field name="INVALIDATE" deprecated="29" />
+		<field name="INVALIDATE_CHILD" deprecated="29" />
+		<field name="INVALIDATE_CHILD_IN_PARENT" deprecated="29" />
+		<field name="ON_LAYOUT" deprecated="29" />
+		<field name="ON_MEASURE" deprecated="29" />
+		<field name="REQUEST_LAYOUT" deprecated="29" />
+	</class>
+	<class name="android/view/ViewDebug$IntToString" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="from()I" />
+		<method name="to()Ljava/lang/String;" />
+	</class>
+	<class name="android/view/ViewDebug$RecyclerTraceType" since="1" deprecated="16">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$RecyclerTraceType;" />
+		<method name="values()[Landroid/view/ViewDebug$RecyclerTraceType;" />
+		<field name="BIND_VIEW" deprecated="29" />
+		<field name="MOVE_FROM_ACTIVE_TO_SCRAP_HEAP" deprecated="29" />
+		<field name="MOVE_TO_ACTIVE_HEAP" removed="8" />
+		<field name="MOVE_TO_SCRAP_HEAP" deprecated="29" />
+		<field name="NEW_VIEW" deprecated="29" />
+		<field name="RECYCLE_FROM_ACTIVE_HEAP" deprecated="29" />
+		<field name="RECYCLE_FROM_SCRAP_HEAP" deprecated="29" />
+	</class>
+	<class name="android/view/ViewGroup" since="1">
+		<extends name="android/view/View" />
+		<implements name="android/view/ViewManager" />
+		<implements name="android/view/ViewParent" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="addStatesFromChildren()Z" />
+		<method name="addView(Landroid/view/View;)V" />
+		<method name="addView(Landroid/view/View;I)V" />
+		<method name="addView(Landroid/view/View;II)V" />
+		<method name="addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)Z" />
+		<method name="addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)Z" />
+		<method name="attachLayoutAnimationParameters(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;II)V" />
+		<method name="attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="canAnimate()Z" />
+		<method name="checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z" />
+		<method name="cleanupLayoutState(Landroid/view/View;)V" />
+		<method name="clearDisappearingChildren()V" />
+		<method name="debug(I)V" />
+		<method name="detachAllViewsFromParent()V" />
+		<method name="detachViewFromParent(I)V" />
+		<method name="detachViewFromParent(Landroid/view/View;)V" />
+		<method name="detachViewsFromParent(II)V" />
+		<method name="dispatchFreezeSelfOnly(Landroid/util/SparseArray;)V" />
+		<method name="dispatchThawSelfOnly(Landroid/util/SparseArray;)V" />
+		<method name="drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z" />
+		<method name="endViewTransition(Landroid/view/View;)V" since="11" />
+		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z" />
+		<method name="generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;" />
+		<method name="getChildAt(I)Landroid/view/View;" />
+		<method name="getChildCount()I" />
+		<method name="getChildDrawingOrder(I)I" since="29" />
+		<method name="getChildDrawingOrder(II)I" />
+		<method name="getChildMeasureSpec(III)I" />
+		<method name="getChildStaticTransformation(Landroid/view/View;Landroid/view/animation/Transformation;)Z" />
+		<method name="getClipChildren()Z" since="18" />
+		<method name="getClipToPadding()Z" since="21" />
+		<method name="getDescendantFocusability()I" />
+		<method name="getFocusedChild()Landroid/view/View;" />
+		<method name="getLayoutAnimation()Landroid/view/animation/LayoutAnimationController;" />
+		<method name="getLayoutAnimationListener()Landroid/view/animation/Animation$AnimationListener;" />
+		<method name="getLayoutMode()I" since="18" />
+		<method name="getLayoutTransition()Landroid/animation/LayoutTransition;" since="11" />
+		<method name="getNestedScrollAxes()I" since="21" />
+		<method name="getOverlay()Landroid/view/ViewGroupOverlay;" since="18" />
+		<method name="getPersistentDrawingCache()I" deprecated="28" />
+		<method name="getTouchscreenBlocksFocus()Z" since="21" />
+		<method name="indexOfChild(Landroid/view/View;)I" />
+		<method name="isAlwaysDrawnWithCacheEnabled()Z" deprecated="23" />
+		<method name="isAnimationCacheEnabled()Z" deprecated="23" />
+		<method name="isChildrenDrawingOrderEnabled()Z" since="7" />
+		<method name="isChildrenDrawnWithCacheEnabled()Z" deprecated="23" />
+		<method name="isLayoutSuppressed()Z" since="29" />
+		<method name="isMotionEventSplittingEnabled()Z" since="11" />
+		<method name="isTransitionGroup()Z" since="21" />
+		<method name="measureChild(Landroid/view/View;II)V" />
+		<method name="measureChildWithMargins(Landroid/view/View;IIII)V" />
+		<method name="measureChildren(II)V" />
+		<method name="offsetDescendantRectToMyCoords(Landroid/view/View;Landroid/graphics/Rect;)V" />
+		<method name="offsetRectIntoDescendantCoords(Landroid/view/View;Landroid/graphics/Rect;)V" />
+		<method name="onInterceptHoverEvent(Landroid/view/MotionEvent;)Z" since="14" />
+		<method name="onInterceptTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z" />
+		<method name="onRequestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" since="14" />
+		<method name="onViewAdded(Landroid/view/View;)V" since="23" />
+		<method name="onViewRemoved(Landroid/view/View;)V" since="23" />
+		<method name="removeAllViews()V" />
+		<method name="removeAllViewsInLayout()V" />
+		<method name="removeDetachedView(Landroid/view/View;Z)V" />
+		<method name="removeViewAt(I)V" />
+		<method name="removeViewInLayout(Landroid/view/View;)V" />
+		<method name="removeViews(II)V" />
+		<method name="removeViewsInLayout(II)V" />
+		<method name="requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z" />
+		<method name="resetResolvedLayoutDirection()V" since="14" removed="16" />
+		<method name="resetResolvedTextDirection()V" since="14" removed="16" />
+		<method name="scheduleLayoutAnimation()V" />
+		<method name="setAddStatesFromChildren(Z)V" />
+		<method name="setAlwaysDrawnWithCacheEnabled(Z)V" deprecated="23" />
+		<method name="setAnimationCacheEnabled(Z)V" deprecated="23" />
+		<method name="setChildrenDrawingCacheEnabled(Z)V" deprecated="28" />
+		<method name="setChildrenDrawingOrderEnabled(Z)V" since="7" />
+		<method name="setChildrenDrawnWithCacheEnabled(Z)V" deprecated="23" />
+		<method name="setClipChildren(Z)V" />
+		<method name="setClipToPadding(Z)V" />
+		<method name="setDescendantFocusability(I)V" />
+		<method name="setLayoutAnimation(Landroid/view/animation/LayoutAnimationController;)V" />
+		<method name="setLayoutAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V" />
+		<method name="setLayoutMode(I)V" since="18" />
+		<method name="setLayoutTransition(Landroid/animation/LayoutTransition;)V" since="11" />
+		<method name="setMotionEventSplittingEnabled(Z)V" since="11" />
+		<method name="setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V" />
+		<method name="setPersistentDrawingCache(I)V" deprecated="28" />
+		<method name="setStaticTransformationsEnabled(Z)V" since="3" />
+		<method name="setTouchscreenBlocksFocus(Z)V" since="21" />
+		<method name="setTransitionGroup(Z)V" since="21" />
+		<method name="shouldDelayChildPressedState()Z" since="14" />
+		<method name="startLayoutAnimation()V" />
+		<method name="startViewTransition(Landroid/view/View;)V" since="11" />
+		<method name="suppressLayout(Z)V" since="29" />
+		<field name="CLIP_TO_PADDING_MASK" />
+		<field name="FLAG_USE_CHILD_DRAWING_ORDER" removed="7" />
+		<field name="FOCUS_AFTER_DESCENDANTS" />
+		<field name="FOCUS_BEFORE_DESCENDANTS" />
+		<field name="FOCUS_BLOCK_DESCENDANTS" />
+		<field name="LAYOUT_MODE_CLIP_BOUNDS" since="18" />
+		<field name="LAYOUT_MODE_OPTICAL_BOUNDS" since="18" />
+		<field name="PERSISTENT_ALL_CACHES" deprecated="28" />
+		<field name="PERSISTENT_ANIMATION_CACHE" deprecated="28" />
+		<field name="PERSISTENT_NO_CACHE" deprecated="28" />
+		<field name="PERSISTENT_SCROLLING_CACHE" deprecated="28" />
+	</class>
+	<class name="android/view/ViewGroup$LayoutParams" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="resolveLayoutDirection(I)V" since="17" />
+		<method name="setBaseAttributes(Landroid/content/res/TypedArray;II)V" />
+		<field name="FILL_PARENT" deprecated="15" />
+		<field name="MATCH_PARENT" since="8" />
+		<field name="WRAP_CONTENT" />
+		<field name="height" />
+		<field name="layoutAnimationParameters" />
+		<field name="width" />
+	</class>
+	<class name="android/view/ViewGroup$MarginLayoutParams" since="1">
+		<extends name="android/view/ViewGroup$LayoutParams" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+		<method name="getLayoutDirection()I" since="17" />
+		<method name="getMarginEnd()I" since="17" />
+		<method name="getMarginStart()I" since="17" />
+		<method name="isMarginRelative()Z" since="17" />
+		<method name="setLayoutDirection(I)V" since="17" />
+		<method name="setMarginEnd(I)V" since="17" />
+		<method name="setMarginStart(I)V" since="17" />
+		<method name="setMargins(IIII)V" />
+		<field name="bottomMargin" />
+		<field name="leftMargin" />
+		<field name="rightMargin" />
+		<field name="topMargin" />
+	</class>
+	<class name="android/view/ViewGroup$OnHierarchyChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onChildViewAdded(Landroid/view/View;Landroid/view/View;)V" />
+		<method name="onChildViewRemoved(Landroid/view/View;Landroid/view/View;)V" />
+	</class>
+	<class name="android/view/ViewGroupOverlay" since="18">
+		<extends name="android/view/ViewOverlay" />
+		<method name="add(Landroid/view/View;)V" />
+		<method name="remove(Landroid/view/View;)V" />
+	</class>
+	<class name="android/view/ViewManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="removeView(Landroid/view/View;)V" />
+		<method name="updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+	</class>
+	<class name="android/view/ViewOutlineProvider" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getOutline(Landroid/view/View;Landroid/graphics/Outline;)V" />
+		<field name="BACKGROUND" />
+		<field name="BOUNDS" />
+		<field name="PADDED_BOUNDS" />
+	</class>
+	<class name="android/view/ViewOverlay" since="18">
+		<extends name="java/lang/Object" />
+		<method name="add(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="clear()V" />
+		<method name="remove(Landroid/graphics/drawable/Drawable;)V" />
+	</class>
+	<class name="android/view/ViewParent" since="1">
+		<extends name="java/lang/Object" />
+		<method name="bringChildToFront(Landroid/view/View;)V" />
+		<method name="canResolveLayoutDirection()Z" since="19" />
+		<method name="canResolveTextAlignment()Z" since="19" />
+		<method name="canResolveTextDirection()Z" since="19" />
+		<method name="childDrawableStateChanged(Landroid/view/View;)V" />
+		<method name="childHasTransientStateChanged(Landroid/view/View;Z)V" since="19" />
+		<method name="clearChildFocus(Landroid/view/View;)V" />
+		<method name="createContextMenu(Landroid/view/ContextMenu;)V" />
+		<method name="focusSearch(Landroid/view/View;I)Landroid/view/View;" />
+		<method name="focusableViewAvailable(Landroid/view/View;)V" />
+		<method name="getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z" />
+		<method name="getLayoutDirection()I" since="19" />
+		<method name="getParent()Landroid/view/ViewParent;" />
+		<method name="getParentForAccessibility()Landroid/view/ViewParent;" since="16" />
+		<method name="getTextAlignment()I" since="19" />
+		<method name="getTextDirection()I" since="19" />
+		<method name="invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V" deprecated="26" />
+		<method name="invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;" deprecated="26" />
+		<method name="isLayoutDirectionResolved()Z" since="19" />
+		<method name="isLayoutRequested()Z" />
+		<method name="isTextAlignmentResolved()Z" since="19" />
+		<method name="isTextDirectionResolved()Z" since="19" />
+		<method name="keyboardNavigationClusterSearch(Landroid/view/View;I)Landroid/view/View;" since="26" />
+		<method name="notifySubtreeAccessibilityStateChanged(Landroid/view/View;Landroid/view/View;I)V" since="19" />
+		<method name="onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V" since="26" />
+		<method name="onNestedFling(Landroid/view/View;FFZ)Z" since="21" />
+		<method name="onNestedPreFling(Landroid/view/View;FF)Z" since="21" />
+		<method name="onNestedPrePerformAccessibilityAction(Landroid/view/View;ILandroid/os/Bundle;)Z" since="22" />
+		<method name="onNestedPreScroll(Landroid/view/View;II[I)V" since="21" />
+		<method name="onNestedScroll(Landroid/view/View;IIII)V" since="21" />
+		<method name="onNestedScrollAccepted(Landroid/view/View;Landroid/view/View;I)V" since="21" />
+		<method name="onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z" since="21" />
+		<method name="onStopNestedScroll(Landroid/view/View;)V" since="21" />
+		<method name="recomputeViewAttributes(Landroid/view/View;)V" />
+		<method name="requestChildFocus(Landroid/view/View;Landroid/view/View;)V" />
+		<method name="requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z" since="3" />
+		<method name="requestDisallowInterceptTouchEvent(Z)V" />
+		<method name="requestFitSystemWindows()V" since="16" />
+		<method name="requestLayout()V" />
+		<method name="requestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" since="14" />
+		<method name="requestTransparentRegion(Landroid/view/View;)V" />
+		<method name="showContextMenuForChild(Landroid/view/View;)Z" />
+		<method name="showContextMenuForChild(Landroid/view/View;FF)Z" since="24" />
+		<method name="startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11" />
+		<method name="startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23" />
+	</class>
+	<class name="android/view/ViewPropertyAnimator" since="12">
+		<extends name="java/lang/Object" />
+		<method name="alpha(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="alphaBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="cancel()V" since="14" />
+		<method name="getDuration()J" since="14" />
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" since="18" />
+		<method name="getStartDelay()J" since="14" />
+		<method name="rotation(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="rotationBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="rotationX(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="rotationXBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="rotationY(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="rotationYBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="scaleX(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="scaleXBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="scaleY(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="scaleYBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="setDuration(J)Landroid/view/ViewPropertyAnimator;" />
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/view/ViewPropertyAnimator;" />
+		<method name="setListener(Landroid/animation/Animator$AnimatorListener;)Landroid/view/ViewPropertyAnimator;" />
+		<method name="setStartDelay(J)Landroid/view/ViewPropertyAnimator;" since="14" />
+		<method name="setUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)Landroid/view/ViewPropertyAnimator;" since="19" />
+		<method name="start()V" since="14" />
+		<method name="translationX(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="translationXBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="translationY(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="translationYBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="translationZ(F)Landroid/view/ViewPropertyAnimator;" since="21" />
+		<method name="translationZBy(F)Landroid/view/ViewPropertyAnimator;" since="21" />
+		<method name="withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;" since="16" />
+		<method name="withLayer()Landroid/view/ViewPropertyAnimator;" since="16" />
+		<method name="withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;" since="16" />
+		<method name="x(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="xBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="y(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="yBy(F)Landroid/view/ViewPropertyAnimator;" />
+		<method name="z(F)Landroid/view/ViewPropertyAnimator;" since="21" />
+		<method name="zBy(F)Landroid/view/ViewPropertyAnimator;" since="21" />
+	</class>
+	<class name="android/view/ViewStructure" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addChildCount(I)I" />
+		<method name="asyncCommit()V" />
+		<method name="asyncNewChild(I)Landroid/view/ViewStructure;" />
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26" />
+		<method name="getChildCount()I" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getHint()Ljava/lang/CharSequence;" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTextSelectionEnd()I" />
+		<method name="getTextSelectionStart()I" />
+		<method name="hasExtras()Z" />
+		<method name="newChild(I)Landroid/view/ViewStructure;" />
+		<method name="newHtmlInfoBuilder(Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;" since="26" />
+		<method name="setAccessibilityFocused(Z)V" />
+		<method name="setActivated(Z)V" />
+		<method name="setAlpha(F)V" />
+		<method name="setAutofillHints([Ljava/lang/String;)V" since="26" />
+		<method name="setAutofillId(Landroid/view/autofill/AutofillId;)V" since="26" />
+		<method name="setAutofillId(Landroid/view/autofill/AutofillId;I)V" since="26" />
+		<method name="setAutofillOptions([Ljava/lang/CharSequence;)V" since="26" />
+		<method name="setAutofillType(I)V" since="26" />
+		<method name="setAutofillValue(Landroid/view/autofill/AutofillValue;)V" since="26" />
+		<method name="setCheckable(Z)V" />
+		<method name="setChecked(Z)V" />
+		<method name="setChildCount(I)V" />
+		<method name="setClassName(Ljava/lang/String;)V" />
+		<method name="setClickable(Z)V" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" />
+		<method name="setContextClickable(Z)V" />
+		<method name="setDataIsSensitive(Z)V" since="26" />
+		<method name="setDimens(IIIIII)V" />
+		<method name="setElevation(F)V" />
+		<method name="setEnabled(Z)V" />
+		<method name="setFocusable(Z)V" />
+		<method name="setFocused(Z)V" />
+		<method name="setHint(Ljava/lang/CharSequence;)V" />
+		<method name="setHintIdEntry(Ljava/lang/String;)V" since="30" />
+		<method name="setHtmlInfo(Landroid/view/ViewStructure$HtmlInfo;)V" since="26" />
+		<method name="setId(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setImportantForAutofill(I)V" since="28" />
+		<method name="setInputType(I)V" since="26" />
+		<method name="setLocaleList(Landroid/os/LocaleList;)V" since="26" />
+		<method name="setLongClickable(Z)V" />
+		<method name="setMaxTextEms(I)V" since="28" />
+		<method name="setMaxTextLength(I)V" since="28" />
+		<method name="setMinTextEms(I)V" since="28" />
+		<method name="setOpaque(Z)V" since="26" />
+		<method name="setReceiveContentMimeTypes([Ljava/lang/String;)V" since="31" />
+		<method name="setSelected(Z)V" />
+		<method name="setText(Ljava/lang/CharSequence;)V" />
+		<method name="setText(Ljava/lang/CharSequence;II)V" />
+		<method name="setTextIdEntry(Ljava/lang/String;)V" since="28" />
+		<method name="setTextLines([I[I)V" />
+		<method name="setTextStyle(FIII)V" />
+		<method name="setTransformation(Landroid/graphics/Matrix;)V" />
+		<method name="setVisibility(I)V" />
+		<method name="setWebDomain(Ljava/lang/String;)V" since="26" />
+	</class>
+	<class name="android/view/ViewStructure$HtmlInfo" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAttributes()Ljava/util/List;" />
+		<method name="getTag()Ljava/lang/String;" />
+	</class>
+	<class name="android/view/ViewStructure$HtmlInfo$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;" />
+		<method name="build()Landroid/view/ViewStructure$HtmlInfo;" />
+	</class>
+	<class name="android/view/ViewStub" since="1">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getInflatedId()I" />
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="16" />
+		<method name="getLayoutResource()I" />
+		<method name="inflate()Landroid/view/View;" />
+		<method name="setInflatedId(I)V" />
+		<method name="setLayoutInflater(Landroid/view/LayoutInflater;)V" since="16" />
+		<method name="setLayoutResource(I)V" />
+		<method name="setOnInflateListener(Landroid/view/ViewStub$OnInflateListener;)V" />
+	</class>
+	<class name="android/view/ViewStub$OnInflateListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onInflate(Landroid/view/ViewStub;Landroid/view/View;)V" />
+	</class>
+	<class name="android/view/ViewTreeObserver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16" />
+		<method name="addOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V" />
+		<method name="addOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" />
+		<method name="addOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V" />
+		<method name="addOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3" />
+		<method name="addOnSystemGestureExclusionRectsChangedListener(Ljava/util/function/Consumer;)V" since="29" />
+		<method name="addOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V" />
+		<method name="addOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18" />
+		<method name="addOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18" />
+		<method name="dispatchOnDraw()V" since="16" />
+		<method name="dispatchOnGlobalLayout()V" />
+		<method name="dispatchOnPreDraw()Z" />
+		<method name="isAlive()Z" />
+		<method name="registerFrameCommitCallback(Ljava/lang/Runnable;)V" since="29" />
+		<method name="removeGlobalOnLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" deprecated="16" />
+		<method name="removeOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16" />
+		<method name="removeOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V" />
+		<method name="removeOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" since="16" />
+		<method name="removeOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V" />
+		<method name="removeOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3" />
+		<method name="removeOnSystemGestureExclusionRectsChangedListener(Ljava/util/function/Consumer;)V" since="29" />
+		<method name="removeOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V" />
+		<method name="removeOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18" />
+		<method name="removeOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18" />
+		<method name="unregisterFrameCommitCallback(Ljava/lang/Runnable;)Z" since="29" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnDrawListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onDraw()V" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnGlobalFocusChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onGlobalFocusChanged(Landroid/view/View;Landroid/view/View;)V" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnGlobalLayoutListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onGlobalLayout()V" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnPreDrawListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onPreDraw()Z" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnScrollChangedListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onScrollChanged()V" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnTouchModeChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onTouchModeChanged(Z)V" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnWindowAttachListener" since="18">
+		<extends name="java/lang/Object" />
+		<method name="onWindowAttached()V" />
+		<method name="onWindowDetached()V" />
+	</class>
+	<class name="android/view/ViewTreeObserver$OnWindowFocusChangeListener" since="18">
+		<extends name="java/lang/Object" />
+		<method name="onWindowFocusChanged(Z)V" />
+	</class>
+	<class name="android/view/Window" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="addFlags(I)V" />
+		<method name="addOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;Landroid/os/Handler;)V" since="24" />
+		<method name="clearFlags(I)V" />
+		<method name="closeAllPanels()V" />
+		<method name="closePanel(I)V" />
+		<method name="findViewById(I)Landroid/view/View;" />
+		<method name="getAllowEnterTransitionOverlap()Z" since="21" />
+		<method name="getAllowReturnTransitionOverlap()Z" since="21" />
+		<method name="getAttributes()Landroid/view/WindowManager$LayoutParams;" />
+		<method name="getCallback()Landroid/view/Window$Callback;" />
+		<method name="getColorMode()I" since="26" />
+		<method name="getContainer()Landroid/view/Window;" />
+		<method name="getContentScene()Landroid/transition/Scene;" since="21" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getCurrentFocus()Landroid/view/View;" />
+		<method name="getDecorView()Landroid/view/View;" />
+		<method name="getDefaultFeatures(Landroid/content/Context;)I" since="22" />
+		<method name="getEnterTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getExitTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getFeatures()I" />
+		<method name="getForcedWindowFlags()I" />
+		<method name="getInsetsController()Landroid/view/WindowInsetsController;" since="30" />
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" />
+		<method name="getLocalFeatures()I" />
+		<method name="getMediaController()Landroid/media/session/MediaController;" since="21" />
+		<method name="getNavigationBarColor()I" since="21" />
+		<method name="getNavigationBarDividerColor()I" since="28" />
+		<method name="getReenterTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getReturnTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getRootSurfaceControl()Landroid/view/AttachedSurfaceControl;" since="31" />
+		<method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getSharedElementExitTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getSharedElementReenterTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21" />
+		<method name="getSharedElementsUseOverlay()Z" since="21" />
+		<method name="getStatusBarColor()I" since="21" />
+		<method name="getSystemGestureExclusionRects()Ljava/util/List;" since="29" />
+		<method name="getTransitionBackgroundFadeDuration()J" since="21" />
+		<method name="getTransitionManager()Landroid/transition/TransitionManager;" since="21" />
+		<method name="getVolumeControlStream()I" />
+		<method name="getWindowManager()Landroid/view/WindowManager;" />
+		<method name="getWindowStyle()Landroid/content/res/TypedArray;" />
+		<method name="hasChildren()Z" />
+		<method name="hasFeature(I)Z" since="11" />
+		<method name="hasSoftInputMode()Z" since="3" />
+		<method name="injectInputEvent(Landroid/view/InputEvent;)V" since="19" />
+		<method name="invalidatePanelMenu(I)V" since="11" />
+		<method name="isActive()Z" />
+		<method name="isFloating()Z" />
+		<method name="isNavigationBarContrastEnforced()Z" since="29" />
+		<method name="isShortcutKey(ILandroid/view/KeyEvent;)Z" />
+		<method name="isStatusBarContrastEnforced()Z" since="29" />
+		<method name="isWideColorGamut()Z" since="27" />
+		<method name="makeActive()V" />
+		<method name="onActive()V" />
+		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V" />
+		<method name="openPanel(ILandroid/view/KeyEvent;)V" />
+		<method name="peekDecorView()Landroid/view/View;" />
+		<method name="performContextMenuIdentifierAction(II)Z" />
+		<method name="performPanelIdentifierAction(III)Z" />
+		<method name="performPanelShortcut(IILandroid/view/KeyEvent;I)Z" />
+		<method name="registerScrollCaptureCallback(Landroid/view/ScrollCaptureCallback;)V" since="31" />
+		<method name="removeOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V" since="24" />
+		<method name="requestFeature(I)Z" />
+		<method name="requireViewById(I)Landroid/view/View;" since="28" />
+		<method name="restoreHierarchyState(Landroid/os/Bundle;)V" />
+		<method name="saveHierarchyState()Landroid/os/Bundle;" />
+		<method name="setAllowEnterTransitionOverlap(Z)V" since="21" />
+		<method name="setAllowReturnTransitionOverlap(Z)V" since="21" />
+		<method name="setAttributes(Landroid/view/WindowManager$LayoutParams;)V" />
+		<method name="setBackgroundBlurRadius(I)V" since="31" />
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setBackgroundDrawableResource(I)V" />
+		<method name="setCallback(Landroid/view/Window$Callback;)V" />
+		<method name="setChildDrawable(ILandroid/graphics/drawable/Drawable;)V" />
+		<method name="setChildInt(II)V" />
+		<method name="setClipToOutline(Z)V" since="22" />
+		<method name="setColorMode(I)V" since="26" />
+		<method name="setContainer(Landroid/view/Window;)V" />
+		<method name="setContentView(I)V" />
+		<method name="setContentView(Landroid/view/View;)V" />
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="setDecorCaptionShade(I)V" since="24" />
+		<method name="setDecorFitsSystemWindows(Z)V" since="30" />
+		<method name="setDefaultWindowFormat(I)V" />
+		<method name="setDimAmount(F)V" since="14" />
+		<method name="setElevation(F)V" since="22" />
+		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setExitTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V" />
+		<method name="setFeatureDrawableAlpha(II)V" />
+		<method name="setFeatureDrawableResource(II)V" />
+		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V" />
+		<method name="setFeatureInt(II)V" />
+		<method name="setFlags(II)V" />
+		<method name="setFormat(I)V" />
+		<method name="setGravity(I)V" />
+		<method name="setHideOverlayWindows(Z)V" since="31" />
+		<method name="setIcon(I)V" since="19" />
+		<method name="setLayout(II)V" />
+		<method name="setLocalFocus(ZZ)V" since="19" />
+		<method name="setLogo(I)V" since="19" />
+		<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21" />
+		<method name="setNavigationBarColor(I)V" since="21" />
+		<method name="setNavigationBarContrastEnforced(Z)V" since="29" />
+		<method name="setNavigationBarDividerColor(I)V" since="28" />
+		<method name="setPreferMinimalPostProcessing(Z)V" since="30" />
+		<method name="setReenterTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setResizingCaptionDrawable(Landroid/graphics/drawable/Drawable;)V" since="24" />
+		<method name="setRestrictedCaptionAreaListener(Landroid/view/Window$OnRestrictedCaptionAreaChangedListener;)V" since="24" />
+		<method name="setReturnTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setSharedElementExitTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setSharedElementReenterTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21" />
+		<method name="setSharedElementsUseOverlay(Z)V" since="21" />
+		<method name="setSoftInputMode(I)V" since="3" />
+		<method name="setStatusBarColor(I)V" since="21" />
+		<method name="setStatusBarContrastEnforced(Z)V" since="29" />
+		<method name="setSustainedPerformanceMode(Z)V" since="24" />
+		<method name="setSystemGestureExclusionRects(Ljava/util/List;)V" since="29" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" />
+		<method name="setTitleColor(I)V" deprecated="21" />
+		<method name="setTransitionBackgroundFadeDuration(J)V" since="21" />
+		<method name="setTransitionManager(Landroid/transition/TransitionManager;)V" since="21" />
+		<method name="setType(I)V" />
+		<method name="setUiOptions(I)V" since="14" />
+		<method name="setUiOptions(II)V" since="14" />
+		<method name="setVolumeControlStream(I)V" />
+		<method name="setWindowAnimations(I)V" since="3" />
+		<method name="setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;)V" />
+		<method name="setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;Z)V" since="11" />
+		<method name="superDispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12" />
+		<method name="superDispatchKeyEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="superDispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z" since="11" />
+		<method name="superDispatchTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="superDispatchTrackballEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="takeInputQueue(Landroid/view/InputQueue$Callback;)V" since="9" />
+		<method name="takeKeyEvents(Z)V" />
+		<method name="takeSurface(Landroid/view/SurfaceHolder$Callback2;)V" since="9" />
+		<method name="togglePanel(ILandroid/view/KeyEvent;)V" />
+		<method name="unregisterScrollCaptureCallback(Landroid/view/ScrollCaptureCallback;)V" since="31" />
+		<field name="DECOR_CAPTION_SHADE_AUTO" since="24" />
+		<field name="DECOR_CAPTION_SHADE_DARK" since="24" />
+		<field name="DECOR_CAPTION_SHADE_LIGHT" since="24" />
+		<field name="DEFAULT_FEATURES" deprecated="22" />
+		<field name="FEATURE_ACTION_BAR" since="11" />
+		<field name="FEATURE_ACTION_BAR_OVERLAY" since="11" />
+		<field name="FEATURE_ACTION_MODE_OVERLAY" since="11" />
+		<field name="FEATURE_ACTIVITY_TRANSITIONS" since="21" />
+		<field name="FEATURE_CONTENT_TRANSITIONS" since="21" />
+		<field name="FEATURE_CONTEXT_MENU" />
+		<field name="FEATURE_CUSTOM_TITLE" />
+		<field name="FEATURE_INDETERMINATE_PROGRESS" deprecated="24" />
+		<field name="FEATURE_LEFT_ICON" />
+		<field name="FEATURE_NO_TITLE" />
+		<field name="FEATURE_OPTIONS_PANEL" />
+		<field name="FEATURE_PROGRESS" deprecated="24" />
+		<field name="FEATURE_RIGHT_ICON" />
+		<field name="FEATURE_SWIPE_TO_DISMISS" since="20" deprecated="30" />
+		<field name="ID_ANDROID_CONTENT" />
+		<field name="NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME" since="21" />
+		<field name="PROGRESS_END" deprecated="24" />
+		<field name="PROGRESS_INDETERMINATE_OFF" deprecated="24" />
+		<field name="PROGRESS_INDETERMINATE_ON" deprecated="24" />
+		<field name="PROGRESS_SECONDARY_END" deprecated="24" />
+		<field name="PROGRESS_SECONDARY_START" deprecated="24" />
+		<field name="PROGRESS_START" deprecated="24" />
+		<field name="PROGRESS_VISIBILITY_OFF" deprecated="24" />
+		<field name="PROGRESS_VISIBILITY_ON" deprecated="24" />
+		<field name="STATUS_BAR_BACKGROUND_TRANSITION_NAME" since="21" />
+	</class>
+	<class name="android/view/Window$Callback" since="1">
+		<extends name="java/lang/Object" />
+		<method name="dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12" />
+		<method name="dispatchKeyEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="dispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z" since="11" />
+		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z" since="4" />
+		<method name="dispatchTouchEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="dispatchTrackballEvent(Landroid/view/MotionEvent;)Z" />
+		<method name="onActionModeFinished(Landroid/view/ActionMode;)V" since="11" />
+		<method name="onActionModeStarted(Landroid/view/ActionMode;)V" since="11" />
+		<method name="onAttachedToWindow()V" since="5" />
+		<method name="onContentChanged()V" />
+		<method name="onCreatePanelMenu(ILandroid/view/Menu;)Z" />
+		<method name="onCreatePanelView(I)Landroid/view/View;" />
+		<method name="onDetachedFromWindow()V" since="5" />
+		<method name="onMenuItemSelected(ILandroid/view/MenuItem;)Z" />
+		<method name="onMenuOpened(ILandroid/view/Menu;)Z" />
+		<method name="onPanelClosed(ILandroid/view/Menu;)V" />
+		<method name="onPointerCaptureChanged(Z)V" since="26" />
+		<method name="onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z" />
+		<method name="onProvideKeyboardShortcuts(Ljava/util/List;Landroid/view/Menu;I)V" since="24" />
+		<method name="onSearchRequested()Z" />
+		<method name="onSearchRequested(Landroid/view/SearchEvent;)Z" since="23" />
+		<method name="onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V" />
+		<method name="onWindowFocusChanged(Z)V" />
+		<method name="onWindowStartingActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11" />
+		<method name="onWindowStartingActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23" />
+	</class>
+	<class name="android/view/Window$OnFrameMetricsAvailableListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V" />
+	</class>
+	<class name="android/view/Window$OnRestrictedCaptionAreaChangedListener" since="24">
+		<extends name="java/lang/Object" />
+		<method name="onRestrictedCaptionAreaChanged(Landroid/graphics/Rect;)V" />
+	</class>
+	<class name="android/view/WindowAnimationFrameStats" since="21">
+		<extends name="android/view/FrameStats" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/WindowContentFrameStats" since="21">
+		<extends name="android/view/FrameStats" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFramePostedTimeNano(I)J" />
+		<method name="getFrameReadyTimeNano(I)J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/WindowId" since="18">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="isFocused()Z" />
+		<method name="registerFocusObserver(Landroid/view/WindowId$FocusObserver;)V" />
+		<method name="unregisterFocusObserver(Landroid/view/WindowId$FocusObserver;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/WindowId$FocusObserver" since="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onFocusGained(Landroid/view/WindowId;)V" />
+		<method name="onFocusLost(Landroid/view/WindowId;)V" />
+	</class>
+	<class name="android/view/WindowInsets" since="20">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/WindowInsets;)V" />
+		<method name="consumeDisplayCutout()Landroid/view/WindowInsets;" since="28" deprecated="30" />
+		<method name="consumeStableInsets()Landroid/view/WindowInsets;" since="21" deprecated="30" />
+		<method name="consumeSystemWindowInsets()Landroid/view/WindowInsets;" deprecated="30" />
+		<method name="getDisplayCutout()Landroid/view/DisplayCutout;" since="28" />
+		<method name="getInsets(I)Landroid/graphics/Insets;" since="30" />
+		<method name="getInsetsIgnoringVisibility(I)Landroid/graphics/Insets;" since="30" />
+		<method name="getMandatorySystemGestureInsets()Landroid/graphics/Insets;" since="29" deprecated="30" />
+		<method name="getPrivacyIndicatorBounds()Landroid/graphics/Rect;" since="31" />
+		<method name="getRoundedCorner(I)Landroid/view/RoundedCorner;" since="31" />
+		<method name="getStableInsetBottom()I" since="21" deprecated="30" />
+		<method name="getStableInsetLeft()I" since="21" deprecated="30" />
+		<method name="getStableInsetRight()I" since="21" deprecated="30" />
+		<method name="getStableInsetTop()I" since="21" deprecated="30" />
+		<method name="getStableInsets()Landroid/graphics/Insets;" since="29" deprecated="30" />
+		<method name="getSystemGestureInsets()Landroid/graphics/Insets;" since="29" deprecated="30" />
+		<method name="getSystemWindowInsetBottom()I" deprecated="30" />
+		<method name="getSystemWindowInsetLeft()I" deprecated="30" />
+		<method name="getSystemWindowInsetRight()I" deprecated="30" />
+		<method name="getSystemWindowInsetTop()I" deprecated="30" />
+		<method name="getSystemWindowInsets()Landroid/graphics/Insets;" since="29" deprecated="30" />
+		<method name="getTappableElementInsets()Landroid/graphics/Insets;" since="29" deprecated="30" />
+		<method name="hasInsets()Z" />
+		<method name="hasStableInsets()Z" since="21" deprecated="30" />
+		<method name="hasSystemWindowInsets()Z" deprecated="30" />
+		<method name="inset(IIII)Landroid/view/WindowInsets;" since="29" />
+		<method name="inset(Landroid/graphics/Insets;)Landroid/view/WindowInsets;" since="30" />
+		<method name="isConsumed()Z" since="21" />
+		<method name="isRound()Z" />
+		<method name="isVisible(I)Z" since="30" />
+		<method name="replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;" deprecated="29" />
+		<method name="replaceSystemWindowInsets(Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21" deprecated="29" />
+		<field name="CONSUMED" since="30" />
+	</class>
+	<class name="android/view/WindowInsets$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/view/WindowInsets;)V" />
+		<method name="build()Landroid/view/WindowInsets;" />
+		<method name="setDisplayCutout(Landroid/view/DisplayCutout;)Landroid/view/WindowInsets$Builder;" />
+		<method name="setInsets(ILandroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" since="30" />
+		<method name="setInsetsIgnoringVisibility(ILandroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" since="30" />
+		<method name="setMandatorySystemGestureInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30" />
+		<method name="setPrivacyIndicatorBounds(Landroid/graphics/Rect;)Landroid/view/WindowInsets$Builder;" since="31" />
+		<method name="setRoundedCorner(ILandroid/view/RoundedCorner;)Landroid/view/WindowInsets$Builder;" since="31" />
+		<method name="setStableInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30" />
+		<method name="setSystemGestureInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30" />
+		<method name="setSystemWindowInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30" />
+		<method name="setTappableElementInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30" />
+		<method name="setVisible(IZ)Landroid/view/WindowInsets$Builder;" since="30" />
+	</class>
+	<class name="android/view/WindowInsets$Side" since="30">
+		<extends name="java/lang/Object" />
+		<method name="all()I" />
+		<field name="BOTTOM" />
+		<field name="LEFT" />
+		<field name="RIGHT" />
+		<field name="TOP" />
+	</class>
+	<class name="android/view/WindowInsets$Type" since="30">
+		<extends name="java/lang/Object" />
+		<method name="captionBar()I" />
+		<method name="displayCutout()I" />
+		<method name="ime()I" />
+		<method name="mandatorySystemGestures()I" />
+		<method name="navigationBars()I" />
+		<method name="statusBars()I" />
+		<method name="systemBars()I" />
+		<method name="systemGestures()I" />
+		<method name="tappableElement()I" />
+	</class>
+	<class name="android/view/WindowInsetsAnimation" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(ILandroid/view/animation/Interpolator;J)V" />
+		<method name="getAlpha()F" />
+		<method name="getDurationMillis()J" />
+		<method name="getFraction()F" />
+		<method name="getInterpolatedFraction()F" />
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;" />
+		<method name="getTypeMask()I" />
+		<method name="setAlpha(F)V" />
+		<method name="setFraction(F)V" />
+	</class>
+	<class name="android/view/WindowInsetsAnimation$Bounds" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Insets;Landroid/graphics/Insets;)V" />
+		<method name="getLowerBound()Landroid/graphics/Insets;" />
+		<method name="getUpperBound()Landroid/graphics/Insets;" />
+		<method name="inset(Landroid/graphics/Insets;)Landroid/view/WindowInsetsAnimation$Bounds;" />
+	</class>
+	<class name="android/view/WindowInsetsAnimation$Callback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getDispatchMode()I" />
+		<method name="onEnd(Landroid/view/WindowInsetsAnimation;)V" />
+		<method name="onPrepare(Landroid/view/WindowInsetsAnimation;)V" />
+		<method name="onProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;" />
+		<method name="onStart(Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/view/WindowInsetsAnimation$Bounds;" />
+		<field name="DISPATCH_MODE_CONTINUE_ON_SUBTREE" />
+		<field name="DISPATCH_MODE_STOP" />
+	</class>
+	<class name="android/view/WindowInsetsAnimationControlListener" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onCancelled(Landroid/view/WindowInsetsAnimationController;)V" />
+		<method name="onFinished(Landroid/view/WindowInsetsAnimationController;)V" />
+		<method name="onReady(Landroid/view/WindowInsetsAnimationController;I)V" />
+	</class>
+	<class name="android/view/WindowInsetsAnimationController" since="30">
+		<extends name="java/lang/Object" />
+		<method name="finish(Z)V" />
+		<method name="getCurrentAlpha()F" />
+		<method name="getCurrentFraction()F" />
+		<method name="getCurrentInsets()Landroid/graphics/Insets;" />
+		<method name="getHiddenStateInsets()Landroid/graphics/Insets;" />
+		<method name="getShownStateInsets()Landroid/graphics/Insets;" />
+		<method name="getTypes()I" />
+		<method name="isCancelled()Z" />
+		<method name="isFinished()Z" />
+		<method name="isReady()Z" />
+		<method name="setInsetsAndAlpha(Landroid/graphics/Insets;FF)V" />
+	</class>
+	<class name="android/view/WindowInsetsController" since="30">
+		<extends name="java/lang/Object" />
+		<method name="addOnControllableInsetsChangedListener(Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V" />
+		<method name="controlWindowInsetsAnimation(IJLandroid/view/animation/Interpolator;Landroid/os/CancellationSignal;Landroid/view/WindowInsetsAnimationControlListener;)V" />
+		<method name="getSystemBarsAppearance()I" />
+		<method name="getSystemBarsBehavior()I" />
+		<method name="hide(I)V" />
+		<method name="removeOnControllableInsetsChangedListener(Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V" />
+		<method name="setSystemBarsAppearance(II)V" />
+		<method name="setSystemBarsBehavior(I)V" />
+		<method name="show(I)V" />
+		<field name="APPEARANCE_LIGHT_NAVIGATION_BARS" />
+		<field name="APPEARANCE_LIGHT_STATUS_BARS" />
+		<field name="BEHAVIOR_DEFAULT" since="31" />
+		<field name="BEHAVIOR_SHOW_BARS_BY_SWIPE" deprecated="31" />
+		<field name="BEHAVIOR_SHOW_BARS_BY_TOUCH" deprecated="31" />
+		<field name="BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE" />
+	</class>
+	<class name="android/view/WindowInsetsController$OnControllableInsetsChangedListener" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onControllableInsetsChanged(Landroid/view/WindowInsetsController;I)V" />
+	</class>
+	<class name="android/view/WindowManager" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/ViewManager" />
+		<method name="addCrossWindowBlurEnabledListener(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31" />
+		<method name="addCrossWindowBlurEnabledListener(Ljava/util/function/Consumer;)V" since="31" />
+		<method name="getCurrentWindowMetrics()Landroid/view/WindowMetrics;" since="30" />
+		<method name="getDefaultDisplay()Landroid/view/Display;" deprecated="30" />
+		<method name="getMaximumWindowMetrics()Landroid/view/WindowMetrics;" since="30" />
+		<method name="isCrossWindowBlurEnabled()Z" since="31" />
+		<method name="removeCrossWindowBlurEnabledListener(Ljava/util/function/Consumer;)V" since="31" />
+		<method name="removeViewImmediate(Landroid/view/View;)V" />
+	</class>
+	<class name="android/view/WindowManager$BadTokenException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/view/WindowManager$InvalidDisplayException" since="17">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/view/WindowManager$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$LayoutParams" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(IIIII)V" />
+		<method name="&lt;init&gt;(IIIIIII)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="copyFrom(Landroid/view/WindowManager$LayoutParams;)I" />
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getBlurBehindRadius()I" since="31" />
+		<method name="getColorMode()I" since="26" />
+		<method name="getFitInsetsSides()I" since="30" />
+		<method name="getFitInsetsTypes()I" since="30" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="isFitInsetsIgnoringVisibility()Z" since="30" />
+		<method name="mayUseInputMethod(I)Z" since="3" />
+		<method name="setBlurBehindRadius(I)V" since="31" />
+		<method name="setColorMode(I)V" since="26" />
+		<method name="setFitInsetsIgnoringVisibility(Z)V" since="30" />
+		<method name="setFitInsetsSides(I)V" since="30" />
+		<method name="setFitInsetsTypes(I)V" since="30" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" />
+		<field name="ALPHA_CHANGED" />
+		<field name="ANIMATION_CHANGED" />
+		<field name="BRIGHTNESS_OVERRIDE_FULL" since="8" />
+		<field name="BRIGHTNESS_OVERRIDE_NONE" since="8" />
+		<field name="BRIGHTNESS_OVERRIDE_OFF" since="8" />
+		<field name="CREATOR" />
+		<field name="DIM_AMOUNT_CHANGED" />
+		<field name="FIRST_APPLICATION_WINDOW" />
+		<field name="FIRST_SUB_WINDOW" />
+		<field name="FIRST_SYSTEM_WINDOW" />
+		<field name="FLAGS_CHANGED" />
+		<field name="FLAG_ALLOW_LOCK_WHILE_SCREEN_ON" since="8" />
+		<field name="FLAG_ALT_FOCUSABLE_IM" since="3" />
+		<field name="FLAG_BLUR_BEHIND" deprecated="15" />
+		<field name="FLAG_DIM_BEHIND" />
+		<field name="FLAG_DISMISS_KEYGUARD" since="5" deprecated="26" />
+		<field name="FLAG_DITHER" deprecated="17" />
+		<field name="FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS" since="21" />
+		<field name="FLAG_FORCE_NOT_FULLSCREEN" deprecated="30" />
+		<field name="FLAG_FULLSCREEN" deprecated="30" />
+		<field name="FLAG_HARDWARE_ACCELERATED" since="11" />
+		<field name="FLAG_IGNORE_CHEEK_PRESSES" />
+		<field name="FLAG_KEEP_SCREEN_ON" />
+		<field name="FLAG_LAYOUT_ATTACHED_IN_DECOR" since="22" deprecated="30" />
+		<field name="FLAG_LAYOUT_INSET_DECOR" deprecated="30" />
+		<field name="FLAG_LAYOUT_IN_OVERSCAN" since="18" deprecated="30" />
+		<field name="FLAG_LAYOUT_IN_SCREEN" />
+		<field name="FLAG_LAYOUT_NO_LIMITS" />
+		<field name="FLAG_LOCAL_FOCUS_MODE" since="19" />
+		<field name="FLAG_NOT_FOCUSABLE" />
+		<field name="FLAG_NOT_TOUCHABLE" />
+		<field name="FLAG_NOT_TOUCH_MODAL" />
+		<field name="FLAG_SCALED" />
+		<field name="FLAG_SECURE" />
+		<field name="FLAG_SHOW_WALLPAPER" since="5" />
+		<field name="FLAG_SHOW_WHEN_LOCKED" since="5" deprecated="27" />
+		<field name="FLAG_SPLIT_TOUCH" since="11" />
+		<field name="FLAG_TOUCHABLE_WHEN_WAKING" deprecated="20" />
+		<field name="FLAG_TRANSLUCENT_NAVIGATION" since="19" deprecated="30" />
+		<field name="FLAG_TRANSLUCENT_STATUS" since="19" deprecated="30" />
+		<field name="FLAG_TURN_SCREEN_ON" since="5" deprecated="27" />
+		<field name="FLAG_WATCH_OUTSIDE_TOUCH" since="3" />
+		<field name="FORMAT_CHANGED" />
+		<field name="LAST_APPLICATION_WINDOW" />
+		<field name="LAST_SUB_WINDOW" />
+		<field name="LAST_SYSTEM_WINDOW" />
+		<field name="LAYOUT_CHANGED" />
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS" since="30" />
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT" since="28" />
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER" since="28" />
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES" since="28" />
+		<field name="MEMORY_TYPE_CHANGED" />
+		<field name="MEMORY_TYPE_GPU" deprecated="15" />
+		<field name="MEMORY_TYPE_HARDWARE" deprecated="15" />
+		<field name="MEMORY_TYPE_NORMAL" deprecated="15" />
+		<field name="MEMORY_TYPE_PUSH_BUFFERS" deprecated="15" />
+		<field name="ROTATION_ANIMATION_CHANGED" since="18" />
+		<field name="ROTATION_ANIMATION_CROSSFADE" since="18" />
+		<field name="ROTATION_ANIMATION_JUMPCUT" since="18" />
+		<field name="ROTATION_ANIMATION_ROTATE" since="18" />
+		<field name="ROTATION_ANIMATION_SEAMLESS" since="26" />
+		<field name="SCREEN_BRIGHTNESS_CHANGED" since="3" />
+		<field name="SCREEN_ORIENTATION_CHANGED" since="3" />
+		<field name="SOFT_INPUT_ADJUST_NOTHING" since="11" />
+		<field name="SOFT_INPUT_ADJUST_PAN" since="3" />
+		<field name="SOFT_INPUT_ADJUST_RESIZE" since="3" deprecated="30" />
+		<field name="SOFT_INPUT_ADJUST_UNSPECIFIED" since="3" />
+		<field name="SOFT_INPUT_IS_FORWARD_NAVIGATION" since="3" />
+		<field name="SOFT_INPUT_MASK_ADJUST" since="3" />
+		<field name="SOFT_INPUT_MASK_STATE" since="3" />
+		<field name="SOFT_INPUT_MODE_CHANGED" since="3" />
+		<field name="SOFT_INPUT_STATE_ALWAYS_HIDDEN" since="3" />
+		<field name="SOFT_INPUT_STATE_ALWAYS_VISIBLE" since="3" />
+		<field name="SOFT_INPUT_STATE_HIDDEN" since="3" />
+		<field name="SOFT_INPUT_STATE_UNCHANGED" since="3" />
+		<field name="SOFT_INPUT_STATE_UNSPECIFIED" since="3" />
+		<field name="SOFT_INPUT_STATE_VISIBLE" since="3" />
+		<field name="TITLE_CHANGED" />
+		<field name="TYPE_ACCESSIBILITY_OVERLAY" since="22" />
+		<field name="TYPE_APPLICATION" />
+		<field name="TYPE_APPLICATION_ATTACHED_DIALOG" since="3" />
+		<field name="TYPE_APPLICATION_MEDIA" />
+		<field name="TYPE_APPLICATION_OVERLAY" since="26" />
+		<field name="TYPE_APPLICATION_PANEL" />
+		<field name="TYPE_APPLICATION_STARTING" />
+		<field name="TYPE_APPLICATION_SUB_PANEL" />
+		<field name="TYPE_BASE_APPLICATION" />
+		<field name="TYPE_CHANGED" />
+		<field name="TYPE_DRAWN_APPLICATION" since="25" />
+		<field name="TYPE_INPUT_METHOD" since="3" />
+		<field name="TYPE_INPUT_METHOD_DIALOG" since="3" />
+		<field name="TYPE_KEYGUARD" removed="21" />
+		<field name="TYPE_KEYGUARD_DIALOG" />
+		<field name="TYPE_PHONE" deprecated="26" />
+		<field name="TYPE_PRIORITY_PHONE" deprecated="26" />
+		<field name="TYPE_PRIVATE_PRESENTATION" since="19" />
+		<field name="TYPE_SEARCH_BAR" />
+		<field name="TYPE_STATUS_BAR" />
+		<field name="TYPE_STATUS_BAR_PANEL" deprecated="30" removed="31" />
+		<field name="TYPE_SYSTEM_ALERT" deprecated="26" />
+		<field name="TYPE_SYSTEM_DIALOG" />
+		<field name="TYPE_SYSTEM_ERROR" deprecated="26" />
+		<field name="TYPE_SYSTEM_OVERLAY" deprecated="26" />
+		<field name="TYPE_TOAST" deprecated="26" />
+		<field name="TYPE_WALLPAPER" since="5" />
+		<field name="alpha" />
+		<field name="buttonBrightness" since="8" />
+		<field name="dimAmount" />
+		<field name="flags" />
+		<field name="format" />
+		<field name="gravity" />
+		<field name="horizontalMargin" />
+		<field name="horizontalWeight" />
+		<field name="layoutInDisplayCutoutMode" since="28" />
+		<field name="memoryType" deprecated="15" />
+		<field name="packageName" />
+		<field name="preferMinimalPostProcessing" since="30" />
+		<field name="preferredDisplayModeId" since="23" />
+		<field name="preferredRefreshRate" since="21" deprecated="23" />
+		<field name="rotationAnimation" since="18" />
+		<field name="screenBrightness" since="3" />
+		<field name="screenOrientation" since="3" />
+		<field name="softInputMode" since="3" />
+		<field name="systemUiVisibility" since="11" deprecated="30" />
+		<field name="token" />
+		<field name="type" />
+		<field name="verticalMargin" />
+		<field name="verticalWeight" />
+		<field name="windowAnimations" />
+		<field name="x" />
+		<field name="y" />
+	</class>
+	<class name="android/view/WindowMetrics" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/graphics/Rect;Landroid/view/WindowInsets;)V" />
+		<method name="getBounds()Landroid/graphics/Rect;" />
+		<method name="getWindowInsets()Landroid/view/WindowInsets;" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityEvent" since="4">
+		<extends name="android/view/accessibility/AccessibilityRecord" since="14" />
+		<extends name="java/lang/Object" removed="14" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" since="30" />
+		<method name="&lt;init&gt;(I)V" since="30" />
+		<method name="&lt;init&gt;(Landroid/view/accessibility/AccessibilityEvent;)V" since="30" />
+		<method name="appendRecord(Landroid/view/accessibility/AccessibilityRecord;)V" since="14" />
+		<method name="eventTypeToString(I)Ljava/lang/String;" since="14" />
+		<method name="getAction()I" since="16" />
+		<method name="getAddedCount()I" removed="14" />
+		<method name="getBeforeText()Ljava/lang/CharSequence;" removed="14" />
+		<method name="getClassName()Ljava/lang/CharSequence;" removed="14" />
+		<method name="getContentChangeTypes()I" since="19" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" removed="14" />
+		<method name="getCurrentItemIndex()I" removed="14" />
+		<method name="getEventTime()J" />
+		<method name="getEventType()I" />
+		<method name="getFromIndex()I" removed="14" />
+		<method name="getItemCount()I" removed="14" />
+		<method name="getMovementGranularity()I" since="16" />
+		<method name="getPackageName()Ljava/lang/CharSequence;" />
+		<method name="getParcelableData()Landroid/os/Parcelable;" removed="14" />
+		<method name="getRecord(I)Landroid/view/accessibility/AccessibilityRecord;" since="14" />
+		<method name="getRecordCount()I" since="14" />
+		<method name="getRemovedCount()I" removed="14" />
+		<method name="getText()Ljava/util/List;" removed="14" />
+		<method name="getWindowChanges()I" since="28" />
+		<method name="initFromParcel(Landroid/os/Parcel;)V" />
+		<method name="isChecked()Z" removed="14" />
+		<method name="isEnabled()Z" removed="14" />
+		<method name="isFullScreen()Z" removed="14" />
+		<method name="isPassword()Z" removed="14" />
+		<method name="obtain()Landroid/view/accessibility/AccessibilityEvent;" />
+		<method name="obtain(I)Landroid/view/accessibility/AccessibilityEvent;" />
+		<method name="obtain(Landroid/view/accessibility/AccessibilityEvent;)Landroid/view/accessibility/AccessibilityEvent;" since="14" />
+		<method name="recycle()V" />
+		<method name="setAction(I)V" since="16" />
+		<method name="setAddedCount(I)V" removed="14" />
+		<method name="setBeforeText(Ljava/lang/CharSequence;)V" removed="14" />
+		<method name="setChecked(Z)V" removed="14" />
+		<method name="setClassName(Ljava/lang/CharSequence;)V" removed="14" />
+		<method name="setContentChangeTypes(I)V" since="19" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" removed="14" />
+		<method name="setCurrentItemIndex(I)V" removed="14" />
+		<method name="setEnabled(Z)V" removed="14" />
+		<method name="setEventTime(J)V" />
+		<method name="setEventType(I)V" />
+		<method name="setFromIndex(I)V" removed="14" />
+		<method name="setFullScreen(Z)V" removed="14" />
+		<method name="setItemCount(I)V" removed="14" />
+		<method name="setMovementGranularity(I)V" since="16" />
+		<method name="setPackageName(Ljava/lang/CharSequence;)V" />
+		<method name="setParcelableData(Landroid/os/Parcelable;)V" removed="14" />
+		<method name="setPassword(Z)V" removed="14" />
+		<method name="setRemovedCount(I)V" removed="14" />
+		<field name="CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION" since="19" />
+		<field name="CONTENT_CHANGE_TYPE_DRAG_CANCELLED" since="33" />
+		<field name="CONTENT_CHANGE_TYPE_DRAG_DROPPED" since="33" />
+		<field name="CONTENT_CHANGE_TYPE_DRAG_STARTED" since="33" />
+		<field name="CONTENT_CHANGE_TYPE_PANE_APPEARED" since="28" />
+		<field name="CONTENT_CHANGE_TYPE_PANE_DISAPPEARED" since="28" />
+		<field name="CONTENT_CHANGE_TYPE_PANE_TITLE" since="28" />
+		<field name="CONTENT_CHANGE_TYPE_STATE_DESCRIPTION" since="30" />
+		<field name="CONTENT_CHANGE_TYPE_SUBTREE" since="19" />
+		<field name="CONTENT_CHANGE_TYPE_TEXT" since="19" />
+		<field name="CONTENT_CHANGE_TYPE_UNDEFINED" since="19" />
+		<field name="CREATOR" />
+		<field name="INVALID_POSITION" />
+		<field name="MAX_TEXT_LENGTH" deprecated="15" />
+		<field name="TYPES_ALL_MASK" />
+		<field name="TYPE_ANNOUNCEMENT" since="16" />
+		<field name="TYPE_ASSIST_READING_CONTEXT" since="23" />
+		<field name="TYPE_GESTURE_DETECTION_END" since="17" />
+		<field name="TYPE_GESTURE_DETECTION_START" since="17" />
+		<field name="TYPE_NOTIFICATION_STATE_CHANGED" />
+		<field name="TYPE_TOUCH_EXPLORATION_GESTURE_END" since="14" />
+		<field name="TYPE_TOUCH_EXPLORATION_GESTURE_START" since="14" />
+		<field name="TYPE_TOUCH_INTERACTION_END" since="17" />
+		<field name="TYPE_TOUCH_INTERACTION_START" since="17" />
+		<field name="TYPE_VIEW_ACCESSIBILITY_FOCUSED" since="16" />
+		<field name="TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED" since="16" />
+		<field name="TYPE_VIEW_CLICKED" />
+		<field name="TYPE_VIEW_CONTEXT_CLICKED" since="23" />
+		<field name="TYPE_VIEW_FOCUSED" />
+		<field name="TYPE_VIEW_HOVER_ENTER" since="14" />
+		<field name="TYPE_VIEW_HOVER_EXIT" since="14" />
+		<field name="TYPE_VIEW_LONG_CLICKED" />
+		<field name="TYPE_VIEW_SCROLLED" since="14" />
+		<field name="TYPE_VIEW_SELECTED" />
+		<field name="TYPE_VIEW_TEXT_CHANGED" />
+		<field name="TYPE_VIEW_TEXT_SELECTION_CHANGED" since="14" />
+		<field name="TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY" since="16" />
+		<field name="TYPE_WINDOWS_CHANGED" since="21" />
+		<field name="TYPE_WINDOW_CONTENT_CHANGED" since="14" />
+		<field name="TYPE_WINDOW_STATE_CHANGED" />
+		<field name="WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED" since="28" />
+		<field name="WINDOWS_CHANGE_ACTIVE" since="28" />
+		<field name="WINDOWS_CHANGE_ADDED" since="28" />
+		<field name="WINDOWS_CHANGE_BOUNDS" since="28" />
+		<field name="WINDOWS_CHANGE_CHILDREN" since="28" />
+		<field name="WINDOWS_CHANGE_FOCUSED" since="28" />
+		<field name="WINDOWS_CHANGE_LAYER" since="28" />
+		<field name="WINDOWS_CHANGE_PARENT" since="28" />
+		<field name="WINDOWS_CHANGE_PIP" since="28" />
+		<field name="WINDOWS_CHANGE_REMOVED" since="28" />
+		<field name="WINDOWS_CHANGE_TITLE" since="28" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityEventSource" since="4">
+		<extends name="java/lang/Object" />
+		<method name="sendAccessibilityEvent(I)V" />
+		<method name="sendAccessibilityEventUnchecked(Landroid/view/accessibility/AccessibilityEvent;)V" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityManager" since="4">
+		<extends name="java/lang/Object" />
+		<method name="addAccessibilityRequestPreparer(Landroid/view/accessibility/AccessibilityRequestPreparer;)V" since="27" />
+		<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14" />
+		<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Landroid/os/Handler;)V" since="26" />
+		<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19" />
+		<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;Landroid/os/Handler;)V" since="26" />
+		<method name="getAccessibilityFocusColor()I" since="31" />
+		<method name="getAccessibilityFocusStrokeWidth()I" since="31" />
+		<method name="getAccessibilityServiceList()Ljava/util/List;" deprecated="15" />
+		<method name="getEnabledAccessibilityServiceList(I)Ljava/util/List;" since="14" />
+		<method name="getInstalledAccessibilityServiceList()Ljava/util/List;" since="14" />
+		<method name="getRecommendedTimeoutMillis(II)I" since="29" />
+		<method name="interrupt()V" />
+		<method name="isAccessibilityButtonSupported()Z" since="27" />
+		<method name="isEnabled()Z" />
+		<method name="isTouchExplorationEnabled()Z" since="14" />
+		<method name="removeAccessibilityRequestPreparer(Landroid/view/accessibility/AccessibilityRequestPreparer;)V" since="27" />
+		<method name="removeAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14" />
+		<method name="removeTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19" />
+		<method name="sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" />
+		<field name="FLAG_CONTENT_CONTROLS" since="29" />
+		<field name="FLAG_CONTENT_ICONS" since="29" />
+		<field name="FLAG_CONTENT_TEXT" since="29" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onAccessibilityStateChanged(Z)V" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener" since="19">
+		<extends name="java/lang/Object" />
+		<method name="onTouchExplorationStateChanged(Z)V" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" since="30" />
+		<method name="&lt;init&gt;(Landroid/view/View;)V" since="30" />
+		<method name="&lt;init&gt;(Landroid/view/View;I)V" since="30" />
+		<method name="&lt;init&gt;(Landroid/view/accessibility/AccessibilityNodeInfo;)V" since="30" />
+		<method name="addAction(I)V" deprecated="21" />
+		<method name="addAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V" since="21" />
+		<method name="addChild(Landroid/view/View;)V" />
+		<method name="addChild(Landroid/view/View;I)V" since="16" />
+		<method name="canOpenPopup()Z" since="19" />
+		<method name="findAccessibilityNodeInfosByText(Ljava/lang/String;)Ljava/util/List;" />
+		<method name="findAccessibilityNodeInfosByViewId(Ljava/lang/String;)Ljava/util/List;" since="18" />
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16" />
+		<method name="focusSearch(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16" />
+		<method name="getActionList()Ljava/util/List;" since="21" />
+		<method name="getActions()I" deprecated="21" />
+		<method name="getAvailableExtraData()Ljava/util/List;" since="26" />
+		<method name="getBoundsInParent(Landroid/graphics/Rect;)V" deprecated="29" />
+		<method name="getBoundsInScreen(Landroid/graphics/Rect;)V" />
+		<method name="getChild(I)Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="getChildCount()I" />
+		<method name="getClassName()Ljava/lang/CharSequence;" />
+		<method name="getCollectionInfo()Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;" since="19" />
+		<method name="getCollectionItemInfo()Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;" since="19" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getDrawingOrder()I" since="24" />
+		<method name="getError()Ljava/lang/CharSequence;" since="21" />
+		<method name="getExtraRenderingInfo()Landroid/view/accessibility/AccessibilityNodeInfo$ExtraRenderingInfo;" since="30" />
+		<method name="getExtras()Landroid/os/Bundle;" since="19" />
+		<method name="getHintText()Ljava/lang/CharSequence;" since="26" />
+		<method name="getInputType()I" since="19" />
+		<method name="getLabelFor()Landroid/view/accessibility/AccessibilityNodeInfo;" since="17" />
+		<method name="getLabeledBy()Landroid/view/accessibility/AccessibilityNodeInfo;" since="17" />
+		<method name="getLiveRegion()I" since="19" />
+		<method name="getMaxTextLength()I" since="21" />
+		<method name="getMovementGranularities()I" since="16" />
+		<method name="getPackageName()Ljava/lang/CharSequence;" />
+		<method name="getPaneTitle()Ljava/lang/CharSequence;" since="28" />
+		<method name="getParent()Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="getRangeInfo()Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;" since="19" />
+		<method name="getStateDescription()Ljava/lang/CharSequence;" since="30" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTextSelectionEnd()I" since="18" />
+		<method name="getTextSelectionStart()I" since="18" />
+		<method name="getTooltipText()Ljava/lang/CharSequence;" since="28" />
+		<method name="getTouchDelegateInfo()Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;" since="29" />
+		<method name="getTraversalAfter()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22" />
+		<method name="getTraversalBefore()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22" />
+		<method name="getViewIdResourceName()Ljava/lang/String;" since="18" />
+		<method name="getWindow()Landroid/view/accessibility/AccessibilityWindowInfo;" since="21" />
+		<method name="getWindowId()I" />
+		<method name="isAccessibilityFocused()Z" since="16" />
+		<method name="isCheckable()Z" />
+		<method name="isChecked()Z" />
+		<method name="isClickable()Z" />
+		<method name="isContentInvalid()Z" since="19" />
+		<method name="isContextClickable()Z" since="23" />
+		<method name="isDismissable()Z" since="19" />
+		<method name="isEditable()Z" since="18" />
+		<method name="isEnabled()Z" />
+		<method name="isFocusable()Z" />
+		<method name="isFocused()Z" />
+		<method name="isHeading()Z" since="28" />
+		<method name="isImportantForAccessibility()Z" since="24" />
+		<method name="isLongClickable()Z" />
+		<method name="isMultiLine()Z" since="19" />
+		<method name="isPassword()Z" />
+		<method name="isScreenReaderFocusable()Z" since="28" />
+		<method name="isScrollable()Z" />
+		<method name="isSelected()Z" />
+		<method name="isShowingHintText()Z" since="26" />
+		<method name="isTextEntryKey()Z" since="29" />
+		<method name="isVisibleToUser()Z" since="16" />
+		<method name="obtain()Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="obtain(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="obtain(Landroid/view/View;I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16" />
+		<method name="obtain(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="performAction(I)Z" />
+		<method name="performAction(ILandroid/os/Bundle;)Z" since="16" />
+		<method name="recycle()V" />
+		<method name="refresh()Z" since="18" />
+		<method name="refreshWithExtraData(Ljava/lang/String;Landroid/os/Bundle;)Z" since="26" />
+		<method name="removeAction(I)V" since="21" deprecated="21" />
+		<method name="removeAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z" since="21" />
+		<method name="removeChild(Landroid/view/View;)Z" since="21" />
+		<method name="removeChild(Landroid/view/View;I)Z" since="21" />
+		<method name="setAccessibilityFocused(Z)V" since="16" />
+		<method name="setAvailableExtraData(Ljava/util/List;)V" since="26" />
+		<method name="setBoundsInParent(Landroid/graphics/Rect;)V" deprecated="29" />
+		<method name="setBoundsInScreen(Landroid/graphics/Rect;)V" />
+		<method name="setCanOpenPopup(Z)V" since="19" />
+		<method name="setCheckable(Z)V" />
+		<method name="setChecked(Z)V" />
+		<method name="setClassName(Ljava/lang/CharSequence;)V" />
+		<method name="setClickable(Z)V" />
+		<method name="setCollectionInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;)V" since="19" />
+		<method name="setCollectionItemInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V" since="19" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" />
+		<method name="setContentInvalid(Z)V" since="19" />
+		<method name="setContextClickable(Z)V" since="23" />
+		<method name="setDismissable(Z)V" since="19" />
+		<method name="setDrawingOrder(I)V" since="24" />
+		<method name="setEditable(Z)V" since="18" />
+		<method name="setEnabled(Z)V" />
+		<method name="setError(Ljava/lang/CharSequence;)V" since="21" />
+		<method name="setFocusable(Z)V" />
+		<method name="setFocused(Z)V" />
+		<method name="setHeading(Z)V" since="28" />
+		<method name="setHintText(Ljava/lang/CharSequence;)V" since="26" />
+		<method name="setImportantForAccessibility(Z)V" since="24" />
+		<method name="setInputType(I)V" since="19" />
+		<method name="setLabelFor(Landroid/view/View;)V" since="17" />
+		<method name="setLabelFor(Landroid/view/View;I)V" since="17" />
+		<method name="setLabeledBy(Landroid/view/View;)V" since="17" />
+		<method name="setLabeledBy(Landroid/view/View;I)V" since="17" />
+		<method name="setLiveRegion(I)V" since="19" />
+		<method name="setLongClickable(Z)V" />
+		<method name="setMaxTextLength(I)V" since="21" />
+		<method name="setMovementGranularities(I)V" since="16" />
+		<method name="setMultiLine(Z)V" since="19" />
+		<method name="setPackageName(Ljava/lang/CharSequence;)V" />
+		<method name="setPaneTitle(Ljava/lang/CharSequence;)V" since="28" />
+		<method name="setParent(Landroid/view/View;)V" />
+		<method name="setParent(Landroid/view/View;I)V" since="16" />
+		<method name="setPassword(Z)V" />
+		<method name="setRangeInfo(Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;)V" since="19" />
+		<method name="setScreenReaderFocusable(Z)V" since="28" />
+		<method name="setScrollable(Z)V" />
+		<method name="setSelected(Z)V" />
+		<method name="setShowingHintText(Z)V" since="26" />
+		<method name="setSource(Landroid/view/View;)V" />
+		<method name="setSource(Landroid/view/View;I)V" since="16" />
+		<method name="setStateDescription(Ljava/lang/CharSequence;)V" since="30" />
+		<method name="setText(Ljava/lang/CharSequence;)V" />
+		<method name="setTextEntryKey(Z)V" since="29" />
+		<method name="setTextSelection(II)V" since="18" />
+		<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="28" />
+		<method name="setTouchDelegateInfo(Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;)V" since="29" />
+		<method name="setTraversalAfter(Landroid/view/View;)V" since="22" />
+		<method name="setTraversalAfter(Landroid/view/View;I)V" since="22" />
+		<method name="setTraversalBefore(Landroid/view/View;)V" since="22" />
+		<method name="setTraversalBefore(Landroid/view/View;I)V" since="22" />
+		<method name="setViewIdResourceName(Ljava/lang/String;)V" since="18" />
+		<method name="setVisibleToUser(Z)V" since="16" />
+		<field name="ACTION_ACCESSIBILITY_FOCUS" since="16" />
+		<field name="ACTION_ARGUMENT_COLUMN_INT" since="23" />
+		<field name="ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN" since="18" />
+		<field name="ACTION_ARGUMENT_HTML_ELEMENT_STRING" since="16" />
+		<field name="ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT" since="16" />
+		<field name="ACTION_ARGUMENT_MOVE_WINDOW_X" since="26" />
+		<field name="ACTION_ARGUMENT_MOVE_WINDOW_Y" since="26" />
+		<field name="ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT" since="30" />
+		<field name="ACTION_ARGUMENT_PROGRESS_VALUE" since="24" />
+		<field name="ACTION_ARGUMENT_ROW_INT" since="23" />
+		<field name="ACTION_ARGUMENT_SELECTION_END_INT" since="18" />
+		<field name="ACTION_ARGUMENT_SELECTION_START_INT" since="18" />
+		<field name="ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE" since="21" />
+		<field name="ACTION_CLEAR_ACCESSIBILITY_FOCUS" since="16" />
+		<field name="ACTION_CLEAR_FOCUS" />
+		<field name="ACTION_CLEAR_SELECTION" />
+		<field name="ACTION_CLICK" since="16" />
+		<field name="ACTION_COLLAPSE" since="19" />
+		<field name="ACTION_COPY" since="18" />
+		<field name="ACTION_CUT" since="18" />
+		<field name="ACTION_DISMISS" since="19" />
+		<field name="ACTION_EXPAND" since="19" />
+		<field name="ACTION_FOCUS" />
+		<field name="ACTION_LONG_CLICK" since="16" />
+		<field name="ACTION_NEXT_AT_MOVEMENT_GRANULARITY" since="16" />
+		<field name="ACTION_NEXT_HTML_ELEMENT" since="16" />
+		<field name="ACTION_PASTE" since="18" />
+		<field name="ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY" since="16" />
+		<field name="ACTION_PREVIOUS_HTML_ELEMENT" since="16" />
+		<field name="ACTION_SCROLL_BACKWARD" since="16" />
+		<field name="ACTION_SCROLL_FORWARD" since="16" />
+		<field name="ACTION_SELECT" />
+		<field name="ACTION_SET_SELECTION" since="18" />
+		<field name="ACTION_SET_TEXT" since="21" />
+		<field name="CREATOR" />
+		<field name="EXTRA_DATA_RENDERING_INFO_KEY" since="30" />
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH" since="26" />
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH" since="31" />
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX" since="26" />
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY" since="26" />
+		<field name="FOCUS_ACCESSIBILITY" since="16" />
+		<field name="FOCUS_INPUT" since="16" />
+		<field name="MOVEMENT_GRANULARITY_CHARACTER" since="16" />
+		<field name="MOVEMENT_GRANULARITY_LINE" since="16" />
+		<field name="MOVEMENT_GRANULARITY_PAGE" since="16" />
+		<field name="MOVEMENT_GRANULARITY_PARAGRAPH" since="16" />
+		<field name="MOVEMENT_GRANULARITY_WORD" since="16" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$AccessibilityAction" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="30" />
+		<method name="&lt;init&gt;(ILjava/lang/CharSequence;)V" />
+		<method name="getId()I" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<field name="ACTION_ACCESSIBILITY_FOCUS" />
+		<field name="ACTION_CLEAR_ACCESSIBILITY_FOCUS" />
+		<field name="ACTION_CLEAR_FOCUS" />
+		<field name="ACTION_CLEAR_SELECTION" />
+		<field name="ACTION_CLICK" />
+		<field name="ACTION_COLLAPSE" />
+		<field name="ACTION_CONTEXT_CLICK" since="23" />
+		<field name="ACTION_COPY" />
+		<field name="ACTION_CUT" />
+		<field name="ACTION_DISMISS" />
+		<field name="ACTION_DRAG_CANCEL" since="33" />
+		<field name="ACTION_DRAG_DROP" since="33" />
+		<field name="ACTION_DRAG_START" since="33" />
+		<field name="ACTION_EXPAND" />
+		<field name="ACTION_FOCUS" />
+		<field name="ACTION_HIDE_TOOLTIP" since="28" />
+		<field name="ACTION_IME_ENTER" since="30" />
+		<field name="ACTION_LONG_CLICK" />
+		<field name="ACTION_MOVE_WINDOW" since="26" />
+		<field name="ACTION_NEXT_AT_MOVEMENT_GRANULARITY" />
+		<field name="ACTION_NEXT_HTML_ELEMENT" />
+		<field name="ACTION_PAGE_DOWN" since="29" />
+		<field name="ACTION_PAGE_LEFT" since="29" />
+		<field name="ACTION_PAGE_RIGHT" since="29" />
+		<field name="ACTION_PAGE_UP" since="29" />
+		<field name="ACTION_PASTE" />
+		<field name="ACTION_PRESS_AND_HOLD" since="30" />
+		<field name="ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY" />
+		<field name="ACTION_PREVIOUS_HTML_ELEMENT" />
+		<field name="ACTION_SCROLL_BACKWARD" />
+		<field name="ACTION_SCROLL_DOWN" since="23" />
+		<field name="ACTION_SCROLL_FORWARD" />
+		<field name="ACTION_SCROLL_LEFT" since="23" />
+		<field name="ACTION_SCROLL_RIGHT" since="23" />
+		<field name="ACTION_SCROLL_TO_POSITION" since="23" />
+		<field name="ACTION_SCROLL_UP" since="23" />
+		<field name="ACTION_SELECT" />
+		<field name="ACTION_SET_PROGRESS" since="24" />
+		<field name="ACTION_SET_SELECTION" />
+		<field name="ACTION_SET_TEXT" />
+		<field name="ACTION_SHOW_ON_SCREEN" since="23" />
+		<field name="ACTION_SHOW_TOOLTIP" since="28" />
+		<field name="CREATOR" since="30" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionInfo" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IIZ)V" since="30" />
+		<method name="&lt;init&gt;(IIZI)V" since="30" />
+		<method name="getColumnCount()I" />
+		<method name="getRowCount()I" />
+		<method name="getSelectionMode()I" since="21" />
+		<method name="isHierarchical()Z" />
+		<method name="obtain(IIZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;" />
+		<method name="obtain(IIZI)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;" since="21" />
+		<field name="SELECTION_MODE_MULTIPLE" since="21" />
+		<field name="SELECTION_MODE_NONE" since="21" />
+		<field name="SELECTION_MODE_SINGLE" since="21" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IIIIZ)V" since="30" />
+		<method name="&lt;init&gt;(IIIIZZ)V" since="30" />
+		<method name="getColumnIndex()I" />
+		<method name="getColumnSpan()I" />
+		<method name="getRowIndex()I" />
+		<method name="getRowSpan()I" />
+		<method name="isHeading()Z" deprecated="28" />
+		<method name="isSelected()Z" since="21" />
+		<method name="obtain(IIIIZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;" />
+		<method name="obtain(IIIIZZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;" since="21" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$ExtraRenderingInfo" since="30">
+		<extends name="java/lang/Object" />
+		<method name="getLayoutSize()Landroid/util/Size;" />
+		<method name="getTextSizeInPx()F" />
+		<method name="getTextSizeUnit()I" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$RangeInfo" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(IFFF)V" since="30" />
+		<method name="getCurrent()F" />
+		<method name="getMax()F" />
+		<method name="getMin()F" />
+		<method name="getType()I" />
+		<method name="obtain(IFFF)Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;" />
+		<field name="RANGE_TYPE_FLOAT" />
+		<field name="RANGE_TYPE_INT" />
+		<field name="RANGE_TYPE_PERCENT" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="getRegionAt(I)Landroid/graphics/Region;" />
+		<method name="getRegionCount()I" />
+		<method name="getTargetForRegion(Landroid/graphics/Region;)Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeProvider" since="16">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addExtraDataToAccessibilityNodeInfo(ILandroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26" />
+		<method name="createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="findAccessibilityNodeInfosByText(Ljava/lang/String;I)Ljava/util/List;" />
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="19" />
+		<method name="performAction(IILandroid/os/Bundle;)Z" />
+		<field name="HOST_VIEW_ID" since="21" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityRecord" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="30" />
+		<method name="&lt;init&gt;(Landroid/view/accessibility/AccessibilityRecord;)V" since="30" />
+		<method name="getAddedCount()I" />
+		<method name="getBeforeText()Ljava/lang/CharSequence;" />
+		<method name="getClassName()Ljava/lang/CharSequence;" />
+		<method name="getContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getCurrentItemIndex()I" />
+		<method name="getFromIndex()I" />
+		<method name="getItemCount()I" />
+		<method name="getMaxScrollX()I" since="15" />
+		<method name="getMaxScrollY()I" since="15" />
+		<method name="getParcelableData()Landroid/os/Parcelable;" />
+		<method name="getRemovedCount()I" />
+		<method name="getScrollDeltaX()I" since="28" />
+		<method name="getScrollDeltaY()I" since="28" />
+		<method name="getScrollX()I" />
+		<method name="getScrollY()I" />
+		<method name="getSource()Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="getText()Ljava/util/List;" />
+		<method name="getToIndex()I" />
+		<method name="getWindowId()I" />
+		<method name="isChecked()Z" />
+		<method name="isEnabled()Z" />
+		<method name="isFullScreen()Z" />
+		<method name="isPassword()Z" />
+		<method name="isScrollable()Z" />
+		<method name="obtain()Landroid/view/accessibility/AccessibilityRecord;" />
+		<method name="obtain(Landroid/view/accessibility/AccessibilityRecord;)Landroid/view/accessibility/AccessibilityRecord;" />
+		<method name="recycle()V" />
+		<method name="setAddedCount(I)V" />
+		<method name="setBeforeText(Ljava/lang/CharSequence;)V" />
+		<method name="setChecked(Z)V" />
+		<method name="setClassName(Ljava/lang/CharSequence;)V" />
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" />
+		<method name="setCurrentItemIndex(I)V" />
+		<method name="setEnabled(Z)V" />
+		<method name="setFromIndex(I)V" />
+		<method name="setFullScreen(Z)V" />
+		<method name="setItemCount(I)V" />
+		<method name="setMaxScrollX(I)V" since="15" />
+		<method name="setMaxScrollY(I)V" since="15" />
+		<method name="setParcelableData(Landroid/os/Parcelable;)V" />
+		<method name="setPassword(Z)V" />
+		<method name="setRemovedCount(I)V" />
+		<method name="setScrollDeltaX(I)V" since="28" />
+		<method name="setScrollDeltaY(I)V" since="28" />
+		<method name="setScrollX(I)V" />
+		<method name="setScrollY(I)V" />
+		<method name="setScrollable(Z)V" />
+		<method name="setSource(Landroid/view/View;)V" />
+		<method name="setSource(Landroid/view/View;I)V" since="16" />
+		<method name="setToIndex(I)V" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityRequestPreparer" since="27">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/View;I)V" />
+		<method name="getView()Landroid/view/View;" />
+		<method name="onPrepareExtraData(ILjava/lang/String;Landroid/os/Bundle;Landroid/os/Message;)V" />
+		<field name="REQUEST_TYPE_EXTRA_DATA" />
+	</class>
+	<class name="android/view/accessibility/AccessibilityWindowInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" since="30" />
+		<method name="&lt;init&gt;(Landroid/view/accessibility/AccessibilityWindowInfo;)V" since="30" />
+		<method name="getAnchor()Landroid/view/accessibility/AccessibilityNodeInfo;" since="24" />
+		<method name="getBoundsInScreen(Landroid/graphics/Rect;)V" />
+		<method name="getChild(I)Landroid/view/accessibility/AccessibilityWindowInfo;" />
+		<method name="getChildCount()I" />
+		<method name="getDisplayId()I" since="30" />
+		<method name="getId()I" />
+		<method name="getLayer()I" />
+		<method name="getParent()Landroid/view/accessibility/AccessibilityWindowInfo;" />
+		<method name="getRegionInScreen(Landroid/graphics/Region;)V" since="30" />
+		<method name="getRoot()Landroid/view/accessibility/AccessibilityNodeInfo;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" since="24" />
+		<method name="getType()I" />
+		<method name="isAccessibilityFocused()Z" />
+		<method name="isActive()Z" />
+		<method name="isFocused()Z" />
+		<method name="isInPictureInPictureMode()Z" since="26" />
+		<method name="obtain()Landroid/view/accessibility/AccessibilityWindowInfo;" />
+		<method name="obtain(Landroid/view/accessibility/AccessibilityWindowInfo;)Landroid/view/accessibility/AccessibilityWindowInfo;" />
+		<method name="recycle()V" />
+		<field name="CREATOR" />
+		<field name="TYPE_ACCESSIBILITY_OVERLAY" since="22" />
+		<field name="TYPE_APPLICATION" />
+		<field name="TYPE_INPUT_METHOD" />
+		<field name="TYPE_SPLIT_SCREEN_DIVIDER" since="24" />
+		<field name="TYPE_SYSTEM" />
+	</class>
+	<class name="android/view/accessibility/CaptioningManager" since="19">
+		<extends name="java/lang/Object" />
+		<method name="addCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V" />
+		<method name="getFontScale()F" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getUserStyle()Landroid/view/accessibility/CaptioningManager$CaptionStyle;" />
+		<method name="isEnabled()Z" />
+		<method name="removeCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V" />
+	</class>
+	<class name="android/view/accessibility/CaptioningManager$CaptionStyle" since="19">
+		<extends name="java/lang/Object" />
+		<method name="getTypeface()Landroid/graphics/Typeface;" />
+		<method name="hasBackgroundColor()Z" since="21" />
+		<method name="hasEdgeColor()Z" since="21" />
+		<method name="hasEdgeType()Z" since="21" />
+		<method name="hasForegroundColor()Z" since="21" />
+		<method name="hasWindowColor()Z" since="21" />
+		<field name="EDGE_TYPE_DEPRESSED" since="21" />
+		<field name="EDGE_TYPE_DROP_SHADOW" />
+		<field name="EDGE_TYPE_NONE" />
+		<field name="EDGE_TYPE_OUTLINE" />
+		<field name="EDGE_TYPE_RAISED" since="21" />
+		<field name="EDGE_TYPE_UNSPECIFIED" since="21" />
+		<field name="backgroundColor" />
+		<field name="edgeColor" />
+		<field name="edgeType" />
+		<field name="foregroundColor" />
+		<field name="windowColor" since="21" />
+	</class>
+	<class name="android/view/accessibility/CaptioningManager$CaptioningChangeListener" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onEnabledChanged(Z)V" />
+		<method name="onFontScaleChanged(F)V" />
+		<method name="onLocaleChanged(Ljava/util/Locale;)V" />
+		<method name="onUserStyleChanged(Landroid/view/accessibility/CaptioningManager$CaptionStyle;)V" />
+	</class>
+	<class name="android/view/animation/AccelerateDecelerateInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/AccelerateInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/AlphaAnimation" since="1">
+		<extends name="android/view/animation/Animation" />
+		<method name="&lt;init&gt;(FF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/Animation" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" since="3" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="applyTransformation(FLandroid/view/animation/Transformation;)V" />
+		<method name="cancel()V" since="8" />
+		<method name="clone()Landroid/view/animation/Animation;" since="3" />
+		<method name="computeDurationHint()J" since="3" />
+		<method name="ensureInterpolator()V" />
+		<method name="getBackgroundColor()I" since="12" deprecated="30" />
+		<method name="getDetachWallpaper()Z" since="5" deprecated="29" />
+		<method name="getDuration()J" />
+		<method name="getFillAfter()Z" />
+		<method name="getFillBefore()Z" />
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;" />
+		<method name="getRepeatCount()I" />
+		<method name="getRepeatMode()I" />
+		<method name="getScaleFactor()F" since="11" />
+		<method name="getStartOffset()J" />
+		<method name="getStartTime()J" />
+		<method name="getTransformation(JLandroid/view/animation/Transformation;)Z" />
+		<method name="getTransformation(JLandroid/view/animation/Transformation;F)Z" since="11" />
+		<method name="getZAdjustment()I" />
+		<method name="hasEnded()Z" />
+		<method name="hasStarted()Z" />
+		<method name="initialize(IIII)V" />
+		<method name="isFillEnabled()Z" since="3" />
+		<method name="isInitialized()Z" />
+		<method name="reset()V" />
+		<method name="resolveSize(IFII)F" />
+		<method name="restrictDuration(J)V" />
+		<method name="scaleCurrentDuration(F)V" />
+		<method name="setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V" />
+		<method name="setBackgroundColor(I)V" since="12" deprecated="30" />
+		<method name="setDetachWallpaper(Z)V" since="5" deprecated="29" />
+		<method name="setDuration(J)V" />
+		<method name="setFillAfter(Z)V" />
+		<method name="setFillBefore(Z)V" />
+		<method name="setFillEnabled(Z)V" since="3" />
+		<method name="setInterpolator(Landroid/content/Context;I)V" />
+		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V" />
+		<method name="setRepeatCount(I)V" />
+		<method name="setRepeatMode(I)V" />
+		<method name="setStartOffset(J)V" />
+		<method name="setStartTime(J)V" />
+		<method name="setZAdjustment(I)V" />
+		<method name="start()V" />
+		<method name="startNow()V" />
+		<method name="willChangeBounds()Z" />
+		<method name="willChangeTransformationMatrix()Z" />
+		<field name="ABSOLUTE" />
+		<field name="INFINITE" />
+		<field name="RELATIVE_TO_PARENT" />
+		<field name="RELATIVE_TO_SELF" />
+		<field name="RESTART" />
+		<field name="REVERSE" />
+		<field name="START_ON_FIRST_FRAME" />
+		<field name="ZORDER_BOTTOM" />
+		<field name="ZORDER_NORMAL" />
+		<field name="ZORDER_TOP" />
+	</class>
+	<class name="android/view/animation/Animation$AnimationListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onAnimationEnd(Landroid/view/animation/Animation;)V" />
+		<method name="onAnimationRepeat(Landroid/view/animation/Animation;)V" />
+		<method name="onAnimationStart(Landroid/view/animation/Animation;)V" />
+	</class>
+	<class name="android/view/animation/Animation$Description" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="type" />
+		<field name="value" />
+	</class>
+	<class name="android/view/animation/AnimationSet" since="1">
+		<extends name="android/view/animation/Animation" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="addAnimation(Landroid/view/animation/Animation;)V" />
+		<method name="clone()Landroid/view/animation/AnimationSet;" since="3" />
+		<method name="getAnimations()Ljava/util/List;" />
+	</class>
+	<class name="android/view/animation/AnimationUtils" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="currentAnimationTimeMillis()J" />
+		<method name="loadAnimation(Landroid/content/Context;I)Landroid/view/animation/Animation;" />
+		<method name="loadInterpolator(Landroid/content/Context;I)Landroid/view/animation/Interpolator;" />
+		<method name="loadLayoutAnimation(Landroid/content/Context;I)Landroid/view/animation/LayoutAnimationController;" />
+		<method name="makeInAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;" />
+		<method name="makeInChildBottomAnimation(Landroid/content/Context;)Landroid/view/animation/Animation;" />
+		<method name="makeOutAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;" />
+	</class>
+	<class name="android/view/animation/AnticipateInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/AnticipateOvershootInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(FF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/BaseInterpolator" since="22">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/animation/Interpolator" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/view/animation/BounceInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/CycleInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/DecelerateInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/GridLayoutAnimationController" since="1">
+		<extends name="android/view/animation/LayoutAnimationController" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/animation/Animation;)V" />
+		<method name="&lt;init&gt;(Landroid/view/animation/Animation;FF)V" />
+		<method name="getColumnDelay()F" />
+		<method name="getDirection()I" />
+		<method name="getDirectionPriority()I" />
+		<method name="getRowDelay()F" />
+		<method name="setColumnDelay(F)V" />
+		<method name="setDirection(I)V" />
+		<method name="setDirectionPriority(I)V" />
+		<method name="setRowDelay(F)V" />
+		<field name="DIRECTION_BOTTOM_TO_TOP" />
+		<field name="DIRECTION_HORIZONTAL_MASK" />
+		<field name="DIRECTION_LEFT_TO_RIGHT" />
+		<field name="DIRECTION_RIGHT_TO_LEFT" />
+		<field name="DIRECTION_TOP_TO_BOTTOM" />
+		<field name="DIRECTION_VERTICAL_MASK" />
+		<field name="PRIORITY_COLUMN" />
+		<field name="PRIORITY_NONE" />
+		<field name="PRIORITY_ROW" />
+	</class>
+	<class name="android/view/animation/GridLayoutAnimationController$AnimationParameters" since="1">
+		<extends name="android/view/animation/LayoutAnimationController$AnimationParameters" />
+		<method name="&lt;init&gt;()V" />
+		<field name="column" />
+		<field name="columnsCount" />
+		<field name="row" />
+		<field name="rowsCount" />
+	</class>
+	<class name="android/view/animation/Interpolator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/animation/TimeInterpolator" since="11" />
+		<method name="getInterpolation(F)F" removed="11" />
+	</class>
+	<class name="android/view/animation/LayoutAnimationController" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/animation/Animation;)V" />
+		<method name="&lt;init&gt;(Landroid/view/animation/Animation;F)V" />
+		<method name="getAnimation()Landroid/view/animation/Animation;" />
+		<method name="getAnimationForView(Landroid/view/View;)Landroid/view/animation/Animation;" />
+		<method name="getDelay()F" />
+		<method name="getDelayForView(Landroid/view/View;)J" />
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;" />
+		<method name="getOrder()I" />
+		<method name="getTransformedIndex(Landroid/view/animation/LayoutAnimationController$AnimationParameters;)I" />
+		<method name="isDone()Z" />
+		<method name="setAnimation(Landroid/content/Context;I)V" />
+		<method name="setAnimation(Landroid/view/animation/Animation;)V" />
+		<method name="setDelay(F)V" />
+		<method name="setInterpolator(Landroid/content/Context;I)V" />
+		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V" />
+		<method name="setOrder(I)V" />
+		<method name="start()V" />
+		<method name="willOverlap()Z" />
+		<field name="ORDER_NORMAL" />
+		<field name="ORDER_RANDOM" />
+		<field name="ORDER_REVERSE" />
+		<field name="mAnimation" />
+		<field name="mInterpolator" />
+		<field name="mRandomizer" />
+	</class>
+	<class name="android/view/animation/LayoutAnimationController$AnimationParameters" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="count" />
+		<field name="index" />
+	</class>
+	<class name="android/view/animation/LinearInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/OvershootInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/PathInterpolator" since="21">
+		<extends name="android/view/animation/BaseInterpolator" since="22" />
+		<extends name="java/lang/Object" removed="22" />
+		<implements name="android/view/animation/Interpolator" removed="22" />
+		<method name="&lt;init&gt;(FF)V" />
+		<method name="&lt;init&gt;(FFFF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/graphics/Path;)V" />
+	</class>
+	<class name="android/view/animation/RotateAnimation" since="1">
+		<extends name="android/view/animation/Animation" />
+		<method name="&lt;init&gt;(FF)V" />
+		<method name="&lt;init&gt;(FFFF)V" />
+		<method name="&lt;init&gt;(FFIFIF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/ScaleAnimation" since="1">
+		<extends name="android/view/animation/Animation" />
+		<method name="&lt;init&gt;(FFFF)V" />
+		<method name="&lt;init&gt;(FFFFFF)V" />
+		<method name="&lt;init&gt;(FFFFIFIF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/animation/Transformation" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clear()V" />
+		<method name="compose(Landroid/view/animation/Transformation;)V" />
+		<method name="getAlpha()F" />
+		<method name="getMatrix()Landroid/graphics/Matrix;" />
+		<method name="getTransformationType()I" />
+		<method name="set(Landroid/view/animation/Transformation;)V" />
+		<method name="setAlpha(F)V" />
+		<method name="setTransformationType(I)V" />
+		<method name="toShortString()Ljava/lang/String;" since="3" />
+		<field name="TYPE_ALPHA" />
+		<field name="TYPE_BOTH" />
+		<field name="TYPE_IDENTITY" />
+		<field name="TYPE_MATRIX" />
+		<field name="mAlpha" />
+		<field name="mMatrix" />
+		<field name="mTransformationType" />
+	</class>
+	<class name="android/view/animation/TranslateAnimation" since="1">
+		<extends name="android/view/animation/Animation" />
+		<method name="&lt;init&gt;(FFFF)V" />
+		<method name="&lt;init&gt;(IFIFIFIF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+	</class>
+	<class name="android/view/autofill/AutofillId" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/autofill/AutofillManager" since="26">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="commit()V" />
+		<method name="disableAutofillServices()V" />
+		<method name="getAutofillServiceComponentName()Landroid/content/ComponentName;" since="28" />
+		<method name="getAvailableFieldClassificationAlgorithms()Ljava/util/List;" since="28" />
+		<method name="getDefaultFieldClassificationAlgorithm()Ljava/lang/String;" since="28" />
+		<method name="getNextAutofillId()Landroid/view/autofill/AutofillId;" since="28" />
+		<method name="getUserData()Landroid/service/autofill/UserData;" since="28" />
+		<method name="getUserDataId()Ljava/lang/String;" since="28" />
+		<method name="hasEnabledAutofillServices()Z" />
+		<method name="isAutofillSupported()Z" />
+		<method name="isEnabled()Z" />
+		<method name="isFieldClassificationEnabled()Z" since="28" />
+		<method name="notifyValueChanged(Landroid/view/View;)V" />
+		<method name="notifyValueChanged(Landroid/view/View;ILandroid/view/autofill/AutofillValue;)V" />
+		<method name="notifyViewClicked(Landroid/view/View;)V" since="28" />
+		<method name="notifyViewClicked(Landroid/view/View;I)V" since="28" />
+		<method name="notifyViewEntered(Landroid/view/View;)V" />
+		<method name="notifyViewEntered(Landroid/view/View;ILandroid/graphics/Rect;)V" />
+		<method name="notifyViewExited(Landroid/view/View;)V" />
+		<method name="notifyViewExited(Landroid/view/View;I)V" />
+		<method name="notifyViewVisibilityChanged(Landroid/view/View;IZ)V" since="27" />
+		<method name="notifyViewVisibilityChanged(Landroid/view/View;Z)V" since="27" />
+		<method name="registerCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V" />
+		<method name="requestAutofill(Landroid/view/View;)V" />
+		<method name="requestAutofill(Landroid/view/View;ILandroid/graphics/Rect;)V" />
+		<method name="setUserData(Landroid/service/autofill/UserData;)V" since="28" />
+		<method name="unregisterCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V" />
+		<field name="EXTRA_ASSIST_STRUCTURE" />
+		<field name="EXTRA_AUTHENTICATION_RESULT" />
+		<field name="EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET" since="31" />
+		<field name="EXTRA_CLIENT_STATE" />
+		<field name="EXTRA_INLINE_SUGGESTIONS_REQUEST" since="31" />
+	</class>
+	<class name="android/view/autofill/AutofillManager$AutofillCallback" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onAutofillEvent(Landroid/view/View;I)V" />
+		<method name="onAutofillEvent(Landroid/view/View;II)V" />
+		<field name="EVENT_INPUT_HIDDEN" />
+		<field name="EVENT_INPUT_SHOWN" />
+		<field name="EVENT_INPUT_UNAVAILABLE" />
+	</class>
+	<class name="android/view/autofill/AutofillValue" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="forDate(J)Landroid/view/autofill/AutofillValue;" />
+		<method name="forList(I)Landroid/view/autofill/AutofillValue;" />
+		<method name="forText(Ljava/lang/CharSequence;)Landroid/view/autofill/AutofillValue;" />
+		<method name="forToggle(Z)Landroid/view/autofill/AutofillValue;" />
+		<method name="getDateValue()J" />
+		<method name="getListValue()I" />
+		<method name="getTextValue()Ljava/lang/CharSequence;" />
+		<method name="getToggleValue()Z" />
+		<method name="isDate()Z" />
+		<method name="isList()Z" />
+		<method name="isText()Z" />
+		<method name="isToggle()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureCondition" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/LocusId;I)V" />
+		<method name="getFlags()I" />
+		<method name="getLocusId()Landroid/content/LocusId;" />
+		<field name="CREATOR" />
+		<field name="FLAG_IS_REGEX" />
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureContext" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="forLocusId(Ljava/lang/String;)Landroid/view/contentcapture/ContentCaptureContext;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getLocusId()Landroid/content/LocusId;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureContext$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/LocusId;)V" />
+		<method name="build()Landroid/view/contentcapture/ContentCaptureContext;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/contentcapture/ContentCaptureContext$Builder;" />
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureManager" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getContentCaptureConditions()Ljava/util/Set;" />
+		<method name="getServiceComponentName()Landroid/content/ComponentName;" />
+		<method name="isContentCaptureEnabled()Z" />
+		<method name="removeData(Landroid/view/contentcapture/DataRemovalRequest;)V" />
+		<method name="setContentCaptureEnabled(Z)V" />
+		<method name="shareData(Landroid/view/contentcapture/DataShareRequest;Ljava/util/concurrent/Executor;Landroid/view/contentcapture/DataShareWriteAdapter;)V" since="30" />
+		<field name="DATA_SHARE_ERROR_CONCURRENT_REQUEST" since="30" />
+		<field name="DATA_SHARE_ERROR_TIMEOUT_INTERRUPTED" since="30" />
+		<field name="DATA_SHARE_ERROR_UNKNOWN" since="30" />
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureSession" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="createContentCaptureSession(Landroid/view/contentcapture/ContentCaptureContext;)Landroid/view/contentcapture/ContentCaptureSession;" />
+		<method name="destroy()V" />
+		<method name="getContentCaptureContext()Landroid/view/contentcapture/ContentCaptureContext;" />
+		<method name="getContentCaptureSessionId()Landroid/view/contentcapture/ContentCaptureSessionId;" />
+		<method name="newAutofillId(Landroid/view/autofill/AutofillId;J)Landroid/view/autofill/AutofillId;" />
+		<method name="newViewStructure(Landroid/view/View;)Landroid/view/ViewStructure;" />
+		<method name="newVirtualViewStructure(Landroid/view/autofill/AutofillId;J)Landroid/view/ViewStructure;" />
+		<method name="notifySessionPaused()V" since="30" />
+		<method name="notifySessionResumed()V" since="30" />
+		<method name="notifyViewAppeared(Landroid/view/ViewStructure;)V" />
+		<method name="notifyViewDisappeared(Landroid/view/autofill/AutofillId;)V" />
+		<method name="notifyViewInsetsChanged(Landroid/graphics/Insets;)V" since="30" />
+		<method name="notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V" />
+		<method name="notifyViewsDisappeared(Landroid/view/autofill/AutofillId;[J)V" />
+		<method name="setContentCaptureContext(Landroid/view/contentcapture/ContentCaptureContext;)V" />
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureSessionId" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/contentcapture/DataRemovalRequest" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getLocusIdRequests()Ljava/util/List;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="isForEverything()Z" />
+		<field name="CREATOR" />
+		<field name="FLAG_IS_PREFIX" />
+	</class>
+	<class name="android/view/contentcapture/DataRemovalRequest$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addLocusId(Landroid/content/LocusId;I)Landroid/view/contentcapture/DataRemovalRequest$Builder;" />
+		<method name="build()Landroid/view/contentcapture/DataRemovalRequest;" />
+		<method name="forEverything()Landroid/view/contentcapture/DataRemovalRequest$Builder;" />
+	</class>
+	<class name="android/view/contentcapture/DataRemovalRequest$LocusIdRequest" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getFlags()I" />
+		<method name="getLocusId()Landroid/content/LocusId;" />
+	</class>
+	<class name="android/view/contentcapture/DataShareRequest" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/LocusId;Ljava/lang/String;)V" />
+		<method name="getLocusId()Landroid/content/LocusId;" />
+		<method name="getMimeType()Ljava/lang/String;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/contentcapture/DataShareWriteAdapter" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onError(I)V" />
+		<method name="onRejected()V" />
+		<method name="onWrite(Landroid/os/ParcelFileDescriptor;)V" />
+	</class>
+	<class name="android/view/displayhash/DisplayHash" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/displayhash/DisplayHashManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getSupportedHashAlgorithms()Ljava/util/Set;" />
+		<method name="verifyDisplayHash(Landroid/view/displayhash/DisplayHash;)Landroid/view/displayhash/VerifiedDisplayHash;" />
+	</class>
+	<class name="android/view/displayhash/DisplayHashResultCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onDisplayHashError(I)V" />
+		<method name="onDisplayHashResult(Landroid/view/displayhash/DisplayHash;)V" />
+		<field name="DISPLAY_HASH_ERROR_INVALID_BOUNDS" />
+		<field name="DISPLAY_HASH_ERROR_INVALID_HASH_ALGORITHM" />
+		<field name="DISPLAY_HASH_ERROR_MISSING_WINDOW" />
+		<field name="DISPLAY_HASH_ERROR_NOT_VISIBLE_ON_SCREEN" />
+		<field name="DISPLAY_HASH_ERROR_TOO_MANY_REQUESTS" />
+		<field name="DISPLAY_HASH_ERROR_UNKNOWN" />
+	</class>
+	<class name="android/view/displayhash/VerifiedDisplayHash" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(JLandroid/graphics/Rect;Ljava/lang/String;[B)V" />
+		<method name="getBoundsInWindow()Landroid/graphics/Rect;" />
+		<method name="getHashAlgorithm()Ljava/lang/String;" />
+		<method name="getImageHash()[B" />
+		<method name="getTimeMillis()J" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/BaseInputConnection" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/inputmethod/InputConnection" />
+		<method name="&lt;init&gt;(Landroid/view/View;Z)V" />
+		<method name="getComposingSpanEnd(Landroid/text/Spannable;)I" />
+		<method name="getComposingSpanStart(Landroid/text/Spannable;)I" />
+		<method name="getEditable()Landroid/text/Editable;" />
+		<method name="removeComposingSpans(Landroid/text/Spannable;)V" />
+		<method name="setComposingSpans(Landroid/text/Spannable;)V" />
+	</class>
+	<class name="android/view/inputmethod/CompletionInfo" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(JILjava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;(JILjava/lang/CharSequence;Ljava/lang/CharSequence;)V" />
+		<method name="getId()J" />
+		<method name="getLabel()Ljava/lang/CharSequence;" />
+		<method name="getPosition()I" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/CorrectionInfo" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ILjava/lang/CharSequence;Ljava/lang/CharSequence;)V" />
+		<method name="getNewText()Ljava/lang/CharSequence;" />
+		<method name="getOffset()I" />
+		<method name="getOldText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/CursorAnchorInfo" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getCharacterBounds(I)Landroid/graphics/RectF;" />
+		<method name="getCharacterBoundsFlags(I)I" />
+		<method name="getComposingText()Ljava/lang/CharSequence;" />
+		<method name="getComposingTextStart()I" />
+		<method name="getInsertionMarkerBaseline()F" />
+		<method name="getInsertionMarkerBottom()F" />
+		<method name="getInsertionMarkerFlags()I" />
+		<method name="getInsertionMarkerHorizontal()F" />
+		<method name="getInsertionMarkerTop()F" />
+		<method name="getMatrix()Landroid/graphics/Matrix;" />
+		<method name="getSelectionEnd()I" />
+		<method name="getSelectionStart()I" />
+		<field name="CREATOR" />
+		<field name="FLAG_HAS_INVISIBLE_REGION" />
+		<field name="FLAG_HAS_VISIBLE_REGION" />
+		<field name="FLAG_IS_RTL" />
+	</class>
+	<class name="android/view/inputmethod/CursorAnchorInfo$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addCharacterBounds(IFFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;" />
+		<method name="build()Landroid/view/inputmethod/CursorAnchorInfo;" />
+		<method name="reset()V" />
+		<method name="setComposingText(ILjava/lang/CharSequence;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;" />
+		<method name="setInsertionMarkerLocation(FFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;" />
+		<method name="setMatrix(Landroid/graphics/Matrix;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;" />
+		<method name="setSelectionRange(II)Landroid/view/inputmethod/CursorAnchorInfo$Builder;" />
+	</class>
+	<class name="android/view/inputmethod/EditorInfo" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/text/InputType" />
+		<method name="&lt;init&gt;()V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getInitialSelectedText(I)Ljava/lang/CharSequence;" since="30" />
+		<method name="getInitialSurroundingText(III)Landroid/view/inputmethod/SurroundingText;" since="31" />
+		<method name="getInitialTextAfterCursor(II)Ljava/lang/CharSequence;" since="30" />
+		<method name="getInitialTextBeforeCursor(II)Ljava/lang/CharSequence;" since="30" />
+		<method name="makeCompatible(I)V" since="11" />
+		<method name="setInitialSurroundingSubText(Ljava/lang/CharSequence;I)V" since="30" />
+		<method name="setInitialSurroundingText(Ljava/lang/CharSequence;)V" since="30" />
+		<field name="CREATOR" />
+		<field name="IME_ACTION_DONE" />
+		<field name="IME_ACTION_GO" />
+		<field name="IME_ACTION_NEXT" />
+		<field name="IME_ACTION_NONE" />
+		<field name="IME_ACTION_PREVIOUS" since="11" />
+		<field name="IME_ACTION_SEARCH" />
+		<field name="IME_ACTION_SEND" />
+		<field name="IME_ACTION_UNSPECIFIED" />
+		<field name="IME_FLAG_FORCE_ASCII" since="16" />
+		<field name="IME_FLAG_NAVIGATE_NEXT" since="11" />
+		<field name="IME_FLAG_NAVIGATE_PREVIOUS" since="11" />
+		<field name="IME_FLAG_NO_ACCESSORY_ACTION" />
+		<field name="IME_FLAG_NO_ENTER_ACTION" />
+		<field name="IME_FLAG_NO_EXTRACT_UI" />
+		<field name="IME_FLAG_NO_FULLSCREEN" since="11" />
+		<field name="IME_FLAG_NO_PERSONALIZED_LEARNING" since="26" />
+		<field name="IME_MASK_ACTION" />
+		<field name="IME_NULL" />
+		<field name="actionId" />
+		<field name="actionLabel" />
+		<field name="contentMimeTypes" since="25" />
+		<field name="extras" />
+		<field name="fieldId" />
+		<field name="fieldName" />
+		<field name="hintLocales" since="24" />
+		<field name="hintText" />
+		<field name="imeOptions" />
+		<field name="initialCapsMode" />
+		<field name="initialSelEnd" />
+		<field name="initialSelStart" />
+		<field name="inputType" />
+		<field name="label" />
+		<field name="packageName" />
+		<field name="privateImeOptions" />
+	</class>
+	<class name="android/view/inputmethod/ExtractedText" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<field name="CREATOR" />
+		<field name="FLAG_SELECTING" />
+		<field name="FLAG_SINGLE_LINE" />
+		<field name="flags" />
+		<field name="hint" since="28" />
+		<field name="partialEndOffset" />
+		<field name="partialStartOffset" />
+		<field name="selectionEnd" />
+		<field name="selectionStart" />
+		<field name="startOffset" />
+		<field name="text" />
+	</class>
+	<class name="android/view/inputmethod/ExtractedTextRequest" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;()V" />
+		<field name="CREATOR" />
+		<field name="flags" />
+		<field name="hintMaxChars" />
+		<field name="hintMaxLines" />
+		<field name="token" />
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestion" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getInfo()Landroid/view/inputmethod/InlineSuggestionInfo;" />
+		<method name="inflate(Landroid/content/Context;Landroid/util/Size;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionInfo" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAutofillHints()[Ljava/lang/String;" />
+		<method name="getInlinePresentationSpec()Landroid/widget/inline/InlinePresentationSpec;" />
+		<method name="getSource()Ljava/lang/String;" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="isPinned()Z" />
+		<field name="CREATOR" />
+		<field name="SOURCE_AUTOFILL" />
+		<field name="SOURCE_PLATFORM" />
+		<field name="TYPE_ACTION" />
+		<field name="TYPE_SUGGESTION" />
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionsRequest" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getHostPackageName()Ljava/lang/String;" />
+		<method name="getInlinePresentationSpecs()Ljava/util/List;" />
+		<method name="getInlineTooltipPresentationSpec()Landroid/widget/inline/InlinePresentationSpec;" since="31" />
+		<method name="getMaxSuggestionCount()I" />
+		<method name="getSupportedLocales()Landroid/os/LocaleList;" />
+		<field name="CREATOR" />
+		<field name="SUGGESTION_COUNT_UNLIMITED" />
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionsRequest$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/util/List;)V" />
+		<method name="addInlinePresentationSpecs(Landroid/widget/inline/InlinePresentationSpec;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;" />
+		<method name="build()Landroid/view/inputmethod/InlineSuggestionsRequest;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;" />
+		<method name="setInlinePresentationSpecs(Ljava/util/List;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;" />
+		<method name="setInlineTooltipPresentationSpec(Landroid/widget/inline/InlinePresentationSpec;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;" since="31" />
+		<method name="setMaxSuggestionCount(I)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;" />
+		<method name="setSupportedLocales(Landroid/os/LocaleList;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;" />
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionsResponse" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getInlineSuggestions()Ljava/util/List;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/InputBinding" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/view/inputmethod/InputConnection;Landroid/os/IBinder;II)V" />
+		<method name="&lt;init&gt;(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputBinding;)V" />
+		<method name="getConnection()Landroid/view/inputmethod/InputConnection;" />
+		<method name="getConnectionToken()Landroid/os/IBinder;" />
+		<method name="getPid()I" />
+		<method name="getUid()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/InputConnection" since="3">
+		<extends name="java/lang/Object" />
+		<method name="beginBatchEdit()Z" />
+		<method name="clearMetaKeyStates(I)Z" />
+		<method name="closeConnection()V" since="24" />
+		<method name="commitCompletion(Landroid/view/inputmethod/CompletionInfo;)Z" />
+		<method name="commitContent(Landroid/view/inputmethod/InputContentInfo;ILandroid/os/Bundle;)Z" since="25" />
+		<method name="commitCorrection(Landroid/view/inputmethod/CorrectionInfo;)Z" since="11" />
+		<method name="commitText(Ljava/lang/CharSequence;I)Z" />
+		<method name="deleteSurroundingText(II)Z" />
+		<method name="deleteSurroundingTextInCodePoints(II)Z" since="24" />
+		<method name="endBatchEdit()Z" />
+		<method name="finishComposingText()Z" />
+		<method name="getCursorCapsMode(I)I" />
+		<method name="getExtractedText(Landroid/view/inputmethod/ExtractedTextRequest;I)Landroid/view/inputmethod/ExtractedText;" />
+		<method name="getHandler()Landroid/os/Handler;" since="24" />
+		<method name="getSelectedText(I)Ljava/lang/CharSequence;" since="9" />
+		<method name="getSurroundingText(III)Landroid/view/inputmethod/SurroundingText;" since="31" />
+		<method name="getTextAfterCursor(II)Ljava/lang/CharSequence;" />
+		<method name="getTextBeforeCursor(II)Ljava/lang/CharSequence;" />
+		<method name="performContextMenuAction(I)Z" />
+		<method name="performEditorAction(I)Z" />
+		<method name="performPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)Z" />
+		<method name="performSpellCheck()Z" since="31" />
+		<method name="reportFullscreenMode(Z)Z" />
+		<method name="requestCursorUpdates(I)Z" since="21" />
+		<method name="sendKeyEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="setComposingRegion(II)Z" since="9" />
+		<method name="setComposingText(Ljava/lang/CharSequence;I)Z" />
+		<method name="setImeConsumesInput(Z)Z" since="31" />
+		<method name="setSelection(II)Z" />
+		<field name="CURSOR_UPDATE_IMMEDIATE" since="21" />
+		<field name="CURSOR_UPDATE_MONITOR" since="21" />
+		<field name="GET_EXTRACTED_TEXT_MONITOR" />
+		<field name="GET_TEXT_WITH_STYLES" />
+		<field name="INPUT_CONTENT_GRANT_READ_URI_PERMISSION" since="25" />
+	</class>
+	<class name="android/view/inputmethod/InputConnectionWrapper" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/inputmethod/InputConnection" />
+		<method name="&lt;init&gt;(Landroid/view/inputmethod/InputConnection;Z)V" />
+		<method name="setTarget(Landroid/view/inputmethod/InputConnection;)V" />
+	</class>
+	<class name="android/view/inputmethod/InputContentInfo" since="25">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;Landroid/content/ClipDescription;)V" />
+		<method name="&lt;init&gt;(Landroid/net/Uri;Landroid/content/ClipDescription;Landroid/net/Uri;)V" />
+		<method name="getContentUri()Landroid/net/Uri;" />
+		<method name="getDescription()Landroid/content/ClipDescription;" />
+		<method name="getLinkUri()Landroid/net/Uri;" />
+		<method name="releasePermission()V" />
+		<method name="requestPermission()V" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/InputMethod" since="3">
+		<extends name="java/lang/Object" />
+		<method name="attachToken(Landroid/os/IBinder;)V" />
+		<method name="bindInput(Landroid/view/inputmethod/InputBinding;)V" />
+		<method name="changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V" since="11" />
+		<method name="createSession(Landroid/view/inputmethod/InputMethod$SessionCallback;)V" />
+		<method name="hideSoftInput(ILandroid/os/ResultReceiver;)V" />
+		<method name="restartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V" />
+		<method name="revokeSession(Landroid/view/inputmethod/InputMethodSession;)V" />
+		<method name="setSessionEnabled(Landroid/view/inputmethod/InputMethodSession;Z)V" />
+		<method name="showSoftInput(ILandroid/os/ResultReceiver;)V" />
+		<method name="startInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V" />
+		<method name="unbindInput()V" />
+		<field name="SERVICE_INTERFACE" />
+		<field name="SERVICE_META_DATA" />
+		<field name="SHOW_EXPLICIT" />
+		<field name="SHOW_FORCED" />
+	</class>
+	<class name="android/view/inputmethod/InputMethod$SessionCallback" since="3">
+		<extends name="java/lang/Object" />
+		<method name="sessionCreated(Landroid/view/inputmethod/InputMethodSession;)V" />
+	</class>
+	<class name="android/view/inputmethod/InputMethodInfo" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;)V" />
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" />
+		<method name="getComponent()Landroid/content/ComponentName;" />
+		<method name="getConfigChanges()I" since="31" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getIsDefaultResourceId()I" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;" />
+		<method name="getServiceName()Ljava/lang/String;" />
+		<method name="getSettingsActivity()Ljava/lang/String;" />
+		<method name="getSubtypeAt(I)Landroid/view/inputmethod/InputMethodSubtype;" since="11" />
+		<method name="getSubtypeCount()I" since="11" />
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<method name="shouldShowInInputMethodPicker()Z" since="31" />
+		<method name="suppressesSpellChecker()Z" since="31" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/InputMethodManager" since="3">
+		<extends name="java/lang/Object" />
+		<method name="dispatchKeyEventFromInputMethod(Landroid/view/View;Landroid/view/KeyEvent;)V" since="24" />
+		<method name="displayCompletions(Landroid/view/View;[Landroid/view/inputmethod/CompletionInfo;)V" />
+		<method name="getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;" since="11" />
+		<method name="getEnabledInputMethodList()Ljava/util/List;" />
+		<method name="getEnabledInputMethodSubtypeList(Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;" since="11" />
+		<method name="getInputMethodList()Ljava/util/List;" />
+		<method name="getLastInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;" since="14" />
+		<method name="getShortcutInputMethodsAndSubtypes()Ljava/util/Map;" since="11" />
+		<method name="hideSoftInputFromInputMethod(Landroid/os/IBinder;I)V" deprecated="28" />
+		<method name="hideSoftInputFromWindow(Landroid/os/IBinder;I)Z" />
+		<method name="hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z" />
+		<method name="hideStatusIcon(Landroid/os/IBinder;)V" deprecated="28" />
+		<method name="isAcceptingText()Z" />
+		<method name="isActive()Z" />
+		<method name="isActive(Landroid/view/View;)Z" />
+		<method name="isFullscreenMode()Z" />
+		<method name="isInputMethodSuppressingSpellChecker()Z" since="31" />
+		<method name="isWatchingCursor(Landroid/view/View;)Z" deprecated="21" />
+		<method name="restartInput(Landroid/view/View;)V" />
+		<method name="sendAppPrivateCommand(Landroid/view/View;Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V" since="14" deprecated="29" />
+		<method name="setCurrentInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)Z" since="11" deprecated="29" />
+		<method name="setInputMethod(Landroid/os/IBinder;Ljava/lang/String;)V" deprecated="28" />
+		<method name="setInputMethodAndSubtype(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V" since="11" deprecated="28" />
+		<method name="shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z" since="19" deprecated="28" />
+		<method name="showInputMethodAndSubtypeEnabler(Ljava/lang/String;)V" since="11" />
+		<method name="showInputMethodPicker()V" />
+		<method name="showSoftInput(Landroid/view/View;I)Z" />
+		<method name="showSoftInput(Landroid/view/View;ILandroid/os/ResultReceiver;)Z" />
+		<method name="showSoftInputFromInputMethod(Landroid/os/IBinder;I)V" deprecated="28" />
+		<method name="showStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V" deprecated="28" />
+		<method name="switchToLastInputMethod(Landroid/os/IBinder;)Z" since="11" deprecated="28" />
+		<method name="switchToNextInputMethod(Landroid/os/IBinder;Z)Z" since="16" deprecated="28" />
+		<method name="toggleSoftInput(II)V" deprecated="31" />
+		<method name="toggleSoftInputFromWindow(Landroid/os/IBinder;II)V" deprecated="31" />
+		<method name="updateCursor(Landroid/view/View;IIII)V" deprecated="21" />
+		<method name="updateCursorAnchorInfo(Landroid/view/View;Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21" />
+		<method name="updateExtractedText(Landroid/view/View;ILandroid/view/inputmethod/ExtractedText;)V" />
+		<method name="updateSelection(Landroid/view/View;IIII)V" />
+		<method name="viewClicked(Landroid/view/View;)V" since="14" deprecated="29" />
+		<field name="HIDE_IMPLICIT_ONLY" />
+		<field name="HIDE_NOT_ALWAYS" />
+		<field name="RESULT_HIDDEN" />
+		<field name="RESULT_SHOWN" />
+		<field name="RESULT_UNCHANGED_HIDDEN" />
+		<field name="RESULT_UNCHANGED_SHOWN" />
+		<field name="SHOW_FORCED" />
+		<field name="SHOW_IMPLICIT" />
+	</class>
+	<class name="android/view/inputmethod/InputMethodSession" since="3">
+		<extends name="java/lang/Object" />
+		<method name="appPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" />
+		<method name="dispatchGenericMotionEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V" since="17" />
+		<method name="dispatchKeyEvent(ILandroid/view/KeyEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V" />
+		<method name="dispatchTrackballEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V" />
+		<method name="displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V" />
+		<method name="finishInput()V" />
+		<method name="toggleSoftInput(II)V" deprecated="31" />
+		<method name="updateCursor(Landroid/graphics/Rect;)V" />
+		<method name="updateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21" />
+		<method name="updateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V" />
+		<method name="updateSelection(IIIIII)V" />
+		<method name="viewClicked(Z)V" since="14" />
+	</class>
+	<class name="android/view/inputmethod/InputMethodSession$EventCallback" since="3">
+		<extends name="java/lang/Object" />
+		<method name="finishedEvent(IZ)V" />
+	</class>
+	<class name="android/view/inputmethod/InputMethodSubtype" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)V" since="14" deprecated="19" />
+		<method name="&lt;init&gt;(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZI)V" since="17" deprecated="19" />
+		<method name="containsExtraValueKey(Ljava/lang/String;)Z" since="12" />
+		<method name="getDisplayName(Landroid/content/Context;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;" since="14" />
+		<method name="getExtraValue()Ljava/lang/String;" />
+		<method name="getExtraValueOf(Ljava/lang/String;)Ljava/lang/String;" since="12" />
+		<method name="getIconResId()I" />
+		<method name="getLanguageTag()Ljava/lang/String;" since="24" />
+		<method name="getLocale()Ljava/lang/String;" deprecated="24" />
+		<method name="getMode()Ljava/lang/String;" />
+		<method name="getNameResId()I" />
+		<method name="isAsciiCapable()Z" since="19" />
+		<method name="isAuxiliary()Z" since="14" />
+		<method name="overridesImplicitlyEnabledSubtype()Z" since="14" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder" since="19">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/view/inputmethod/InputMethodSubtype;" />
+		<method name="setIsAsciiCapable(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setIsAuxiliary(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setLanguageTag(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" since="24" />
+		<method name="setOverridesImplicitlyEnabledSubtype(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setSubtypeExtraValue(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setSubtypeIconResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setSubtypeId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setSubtypeLocale(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setSubtypeMode(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+		<method name="setSubtypeNameResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" />
+	</class>
+	<class name="android/view/inputmethod/SurroundingText" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;III)V" />
+		<method name="getOffset()I" />
+		<method name="getSelectionEnd()I" />
+		<method name="getSelectionStart()I" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/inspector/InspectionCompanion" since="29">
+		<extends name="java/lang/Object" />
+		<method name="mapProperties(Landroid/view/inspector/PropertyMapper;)V" />
+		<method name="readProperties(Ljava/lang/Object;Landroid/view/inspector/PropertyReader;)V" />
+	</class>
+	<class name="android/view/inspector/InspectionCompanion$UninitializedPropertyMapException" since="29">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/view/inspector/InspectionCompanionProvider" since="29">
+		<extends name="java/lang/Object" />
+		<method name="provide(Ljava/lang/Class;)Landroid/view/inspector/InspectionCompanion;" />
+	</class>
+	<class name="android/view/inspector/IntFlagMapping" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(IILjava/lang/String;)V" />
+		<method name="get(I)Ljava/util/Set;" />
+	</class>
+	<class name="android/view/inspector/PropertyMapper" since="29">
+		<extends name="java/lang/Object" />
+		<method name="mapBoolean(Ljava/lang/String;I)I" />
+		<method name="mapByte(Ljava/lang/String;I)I" />
+		<method name="mapChar(Ljava/lang/String;I)I" />
+		<method name="mapColor(Ljava/lang/String;I)I" />
+		<method name="mapDouble(Ljava/lang/String;I)I" />
+		<method name="mapFloat(Ljava/lang/String;I)I" />
+		<method name="mapGravity(Ljava/lang/String;I)I" />
+		<method name="mapInt(Ljava/lang/String;I)I" />
+		<method name="mapIntEnum(Ljava/lang/String;ILjava/util/function/IntFunction;)I" />
+		<method name="mapIntFlag(Ljava/lang/String;ILjava/util/function/IntFunction;)I" />
+		<method name="mapLong(Ljava/lang/String;I)I" />
+		<method name="mapObject(Ljava/lang/String;I)I" />
+		<method name="mapResourceId(Ljava/lang/String;I)I" />
+		<method name="mapShort(Ljava/lang/String;I)I" />
+	</class>
+	<class name="android/view/inspector/PropertyMapper$PropertyConflictException" since="29">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/view/inspector/PropertyReader" since="29">
+		<extends name="java/lang/Object" />
+		<method name="readBoolean(IZ)V" />
+		<method name="readByte(IB)V" />
+		<method name="readChar(IC)V" />
+		<method name="readColor(II)V" />
+		<method name="readColor(IJ)V" />
+		<method name="readColor(ILandroid/graphics/Color;)V" />
+		<method name="readDouble(ID)V" />
+		<method name="readFloat(IF)V" />
+		<method name="readGravity(II)V" />
+		<method name="readInt(II)V" />
+		<method name="readIntEnum(II)V" />
+		<method name="readIntFlag(II)V" />
+		<method name="readLong(IJ)V" />
+		<method name="readObject(ILjava/lang/Object;)V" />
+		<method name="readResourceId(II)V" />
+		<method name="readShort(IS)V" />
+	</class>
+	<class name="android/view/inspector/PropertyReader$PropertyTypeMismatchException" since="29">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(ILjava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/view/inspector/StaticInspectionCompanionProvider" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/inspector/InspectionCompanionProvider" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/view/inspector/WindowInspector" since="29">
+		<extends name="java/lang/Object" />
+		<method name="getGlobalWindowViews()Ljava/util/List;" />
+	</class>
+	<class name="android/view/textclassifier/ConversationAction" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAction()Landroid/app/RemoteAction;" />
+		<method name="getConfidenceScore()F" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getTextReply()Ljava/lang/CharSequence;" />
+		<method name="getType()Ljava/lang/String;" />
+		<field name="CREATOR" />
+		<field name="TYPE_CALL_PHONE" />
+		<field name="TYPE_CREATE_REMINDER" />
+		<field name="TYPE_OPEN_URL" />
+		<field name="TYPE_SEND_EMAIL" />
+		<field name="TYPE_SEND_SMS" />
+		<field name="TYPE_SHARE_LOCATION" />
+		<field name="TYPE_TEXT_REPLY" />
+		<field name="TYPE_TRACK_FLIGHT" />
+		<field name="TYPE_VIEW_CALENDAR" />
+		<field name="TYPE_VIEW_MAP" />
+	</class>
+	<class name="android/view/textclassifier/ConversationAction$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="build()Landroid/view/textclassifier/ConversationAction;" />
+		<method name="setAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/ConversationAction$Builder;" />
+		<method name="setConfidenceScore(F)Landroid/view/textclassifier/ConversationAction$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationAction$Builder;" />
+		<method name="setTextReply(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationAction$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/ConversationActions" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/util/List;Ljava/lang/String;)V" />
+		<method name="getConversationActions()Ljava/util/List;" />
+		<method name="getId()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Message" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAuthor()Landroid/app/Person;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getReferenceTime()Ljava/time/ZonedDateTime;" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+		<field name="PERSON_USER_OTHERS" />
+		<field name="PERSON_USER_SELF" />
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Message$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/app/Person;)V" />
+		<method name="build()Landroid/view/textclassifier/ConversationActions$Message;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationActions$Message$Builder;" />
+		<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/ConversationActions$Message$Builder;" />
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationActions$Message$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Request" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCallingPackageName()Ljava/lang/String;" />
+		<method name="getConversation()Ljava/util/List;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getHints()Ljava/util/List;" />
+		<method name="getMaxSuggestions()I" />
+		<method name="getTypeConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;" />
+		<field name="CREATOR" />
+		<field name="HINT_FOR_IN_APP" />
+		<field name="HINT_FOR_NOTIFICATION" />
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Request$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/util/List;)V" />
+		<method name="build()Landroid/view/textclassifier/ConversationActions$Request;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationActions$Request$Builder;" />
+		<method name="setHints(Ljava/util/List;)Landroid/view/textclassifier/ConversationActions$Request$Builder;" />
+		<method name="setMaxSuggestions(I)Landroid/view/textclassifier/ConversationActions$Request$Builder;" />
+		<method name="setTypeConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/ConversationActions$Request$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/SelectionEvent" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="createSelectionActionEvent(III)Landroid/view/textclassifier/SelectionEvent;" />
+		<method name="createSelectionActionEvent(IIILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/SelectionEvent;" />
+		<method name="createSelectionModifiedEvent(II)Landroid/view/textclassifier/SelectionEvent;" />
+		<method name="createSelectionModifiedEvent(IILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/SelectionEvent;" />
+		<method name="createSelectionModifiedEvent(IILandroid/view/textclassifier/TextSelection;)Landroid/view/textclassifier/SelectionEvent;" />
+		<method name="createSelectionStartedEvent(II)Landroid/view/textclassifier/SelectionEvent;" />
+		<method name="getDurationSincePreviousEvent()J" />
+		<method name="getDurationSinceSessionStart()J" />
+		<method name="getEnd()I" />
+		<method name="getEntityType()Ljava/lang/String;" />
+		<method name="getEventIndex()I" />
+		<method name="getEventTime()J" />
+		<method name="getEventType()I" />
+		<method name="getInvocationMethod()I" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getResultId()Ljava/lang/String;" />
+		<method name="getSessionId()Landroid/view/textclassifier/TextClassificationSessionId;" />
+		<method name="getSmartEnd()I" />
+		<method name="getSmartStart()I" />
+		<method name="getStart()I" />
+		<method name="getWidgetType()Ljava/lang/String;" />
+		<method name="getWidgetVersion()Ljava/lang/String;" />
+		<method name="isTerminal(I)Z" />
+		<field name="ACTION_ABANDON" />
+		<field name="ACTION_COPY" />
+		<field name="ACTION_CUT" />
+		<field name="ACTION_DRAG" />
+		<field name="ACTION_OTHER" />
+		<field name="ACTION_OVERTYPE" />
+		<field name="ACTION_PASTE" />
+		<field name="ACTION_RESET" />
+		<field name="ACTION_SELECT_ALL" />
+		<field name="ACTION_SHARE" />
+		<field name="ACTION_SMART_SHARE" />
+		<field name="CREATOR" />
+		<field name="EVENT_AUTO_SELECTION" />
+		<field name="EVENT_SELECTION_MODIFIED" />
+		<field name="EVENT_SELECTION_STARTED" />
+		<field name="EVENT_SMART_SELECTION_MULTI" />
+		<field name="EVENT_SMART_SELECTION_SINGLE" />
+		<field name="INVOCATION_LINK" />
+		<field name="INVOCATION_MANUAL" />
+		<field name="INVOCATION_UNKNOWN" />
+	</class>
+	<class name="android/view/textclassifier/TextClassification" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="28" />
+		<method name="getActions()Ljava/util/List;" since="28" />
+		<method name="getConfidenceScore(Ljava/lang/String;)F" />
+		<method name="getEntity(I)Ljava/lang/String;" />
+		<method name="getEntityCount()I" />
+		<method name="getExtras()Landroid/os/Bundle;" since="29" />
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;" deprecated="28" />
+		<method name="getId()Ljava/lang/String;" since="28" />
+		<method name="getIntent()Landroid/content/Intent;" deprecated="28" />
+		<method name="getLabel()Ljava/lang/CharSequence;" deprecated="28" />
+		<method name="getOnClickListener()Landroid/view/View$OnClickListener;" deprecated="28" />
+		<method name="getText()Ljava/lang/String;" />
+		<field name="CREATOR" since="28" />
+	</class>
+	<class name="android/view/textclassifier/TextClassification$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/TextClassification$Builder;" since="28" />
+		<method name="build()Landroid/view/textclassifier/TextClassification;" />
+		<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextClassification$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassification$Builder;" since="29" />
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28" />
+		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" since="28" />
+		<method name="setIntent(Landroid/content/Intent;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28" />
+		<method name="setLabel(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28" />
+		<method name="setOnClickListener(Landroid/view/View$OnClickListener;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28" />
+		<method name="setText(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassification$Request" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCallingPackageName()Ljava/lang/String;" since="29" />
+		<method name="getDefaultLocales()Landroid/os/LocaleList;" />
+		<method name="getEndIndex()I" />
+		<method name="getExtras()Landroid/os/Bundle;" since="29" />
+		<method name="getReferenceTime()Ljava/time/ZonedDateTime;" />
+		<method name="getStartIndex()I" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassification$Request$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;II)V" />
+		<method name="build()Landroid/view/textclassifier/TextClassification$Request;" />
+		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification$Request$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassification$Request$Builder;" since="29" />
+		<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/TextClassification$Request$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassificationContext" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getWidgetType()Ljava/lang/String;" />
+		<method name="getWidgetVersion()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassificationContext$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="build()Landroid/view/textclassifier/TextClassificationContext;" />
+		<method name="setWidgetVersion(Ljava/lang/String;)Landroid/view/textclassifier/TextClassificationContext$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassificationManager" since="26">
+		<extends name="java/lang/Object" />
+		<method name="createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;" since="28" />
+		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" />
+		<method name="setTextClassificationSessionFactory(Landroid/view/textclassifier/TextClassificationSessionFactory;)V" since="28" />
+		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" />
+	</class>
+	<class name="android/view/textclassifier/TextClassificationSessionFactory" since="28">
+		<extends name="java/lang/Object" />
+		<method name="createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassificationSessionId" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getValue()Ljava/lang/String;" since="30" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifier" since="26">
+		<extends name="java/lang/Object" />
+		<method name="classifyText(Landroid/view/textclassifier/TextClassification$Request;)Landroid/view/textclassifier/TextClassification;" since="28" />
+		<method name="classifyText(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification;" />
+		<method name="destroy()V" since="28" />
+		<method name="detectLanguage(Landroid/view/textclassifier/TextLanguage$Request;)Landroid/view/textclassifier/TextLanguage;" since="29" />
+		<method name="generateLinks(Landroid/view/textclassifier/TextLinks$Request;)Landroid/view/textclassifier/TextLinks;" since="28" />
+		<method name="getMaxGenerateLinksTextLength()I" since="28" />
+		<method name="isDestroyed()Z" since="28" />
+		<method name="onSelectionEvent(Landroid/view/textclassifier/SelectionEvent;)V" since="28" />
+		<method name="onTextClassifierEvent(Landroid/view/textclassifier/TextClassifierEvent;)V" since="29" />
+		<method name="suggestConversationActions(Landroid/view/textclassifier/ConversationActions$Request;)Landroid/view/textclassifier/ConversationActions;" since="29" />
+		<method name="suggestSelection(Landroid/view/textclassifier/TextSelection$Request;)Landroid/view/textclassifier/TextSelection;" since="28" />
+		<method name="suggestSelection(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection;" />
+		<field name="EXTRA_FROM_TEXT_CLASSIFIER" since="29" />
+		<field name="HINT_TEXT_IS_EDITABLE" since="28" />
+		<field name="HINT_TEXT_IS_NOT_EDITABLE" since="28" />
+		<field name="NO_OP" />
+		<field name="TYPE_ADDRESS" />
+		<field name="TYPE_DATE" since="28" />
+		<field name="TYPE_DATE_TIME" since="28" />
+		<field name="TYPE_EMAIL" />
+		<field name="TYPE_FLIGHT_NUMBER" since="28" />
+		<field name="TYPE_OTHER" />
+		<field name="TYPE_PHONE" />
+		<field name="TYPE_UNKNOWN" since="28" />
+		<field name="TYPE_URL" />
+		<field name="WIDGET_TYPE_CLIPBOARD" since="31" />
+		<field name="WIDGET_TYPE_CUSTOM_EDITTEXT" since="28" />
+		<field name="WIDGET_TYPE_CUSTOM_TEXTVIEW" since="28" />
+		<field name="WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW" since="28" />
+		<field name="WIDGET_TYPE_EDITTEXT" since="28" />
+		<field name="WIDGET_TYPE_EDIT_WEBVIEW" since="28" />
+		<field name="WIDGET_TYPE_NOTIFICATION" since="29" />
+		<field name="WIDGET_TYPE_TEXTVIEW" since="28" />
+		<field name="WIDGET_TYPE_UNKNOWN" since="28" />
+		<field name="WIDGET_TYPE_UNSELECTABLE_TEXTVIEW" since="28" />
+		<field name="WIDGET_TYPE_WEBVIEW" since="28" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifier$EntityConfig" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="create(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29" />
+		<method name="createWithExplicitEntityList(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29" />
+		<method name="createWithHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29" />
+		<method name="getHints()Ljava/util/Collection;" />
+		<method name="resolveEntityListModifications(Ljava/util/Collection;)Ljava/util/Collection;" />
+		<method name="shouldIncludeTypesFromTextClassifier()Z" since="29" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifier$EntityConfig$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/view/textclassifier/TextClassifier$EntityConfig;" />
+		<method name="includeTypesFromTextClassifier(Z)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;" />
+		<method name="setExcludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;" />
+		<method name="setHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;" />
+		<method name="setIncludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getActionIndices()[I" />
+		<method name="getEntityTypes()[Ljava/lang/String;" />
+		<method name="getEventCategory()I" />
+		<method name="getEventContext()Landroid/view/textclassifier/TextClassificationContext;" />
+		<method name="getEventIndex()I" />
+		<method name="getEventType()I" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getLocale()Ljava/lang/Object;" />
+		<method name="getModelName()Ljava/lang/String;" />
+		<method name="getResultId()Ljava/lang/String;" />
+		<method name="getScores()[F" />
+		<field name="CATEGORY_CONVERSATION_ACTIONS" />
+		<field name="CATEGORY_LANGUAGE_DETECTION" />
+		<field name="CATEGORY_LINKIFY" />
+		<field name="CATEGORY_SELECTION" />
+		<field name="CREATOR" />
+		<field name="TYPE_ACTIONS_GENERATED" />
+		<field name="TYPE_ACTIONS_SHOWN" />
+		<field name="TYPE_AUTO_SELECTION" />
+		<field name="TYPE_COPY_ACTION" />
+		<field name="TYPE_CUT_ACTION" />
+		<field name="TYPE_LINKS_GENERATED" since="30" />
+		<field name="TYPE_LINK_CLICKED" />
+		<field name="TYPE_MANUAL_REPLY" />
+		<field name="TYPE_OTHER_ACTION" />
+		<field name="TYPE_OVERTYPE" />
+		<field name="TYPE_PASTE_ACTION" />
+		<field name="TYPE_SELECTION_DESTROYED" />
+		<field name="TYPE_SELECTION_DRAG" />
+		<field name="TYPE_SELECTION_MODIFIED" />
+		<field name="TYPE_SELECTION_RESET" />
+		<field name="TYPE_SELECTION_STARTED" />
+		<field name="TYPE_SELECT_ALL" />
+		<field name="TYPE_SHARE_ACTION" />
+		<field name="TYPE_SMART_ACTION" />
+		<field name="TYPE_SMART_SELECTION_MULTI" />
+		<field name="TYPE_SMART_SELECTION_SINGLE" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="setActionIndices([I)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setEntityTypes([Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setEventContext(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setEventIndex(I)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setLocale(Ljava/lang/Object;)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setModelName(Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setResultId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+		<method name="setScores([F)Landroid/view/textclassifier/TextClassifierEvent$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$ConversationActionsEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$ConversationActionsEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextLinkifyEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextLinkifyEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$TextLinkifyEvent;" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextSelectionEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent" />
+		<method name="getRelativeSuggestedWordEndIndex()I" />
+		<method name="getRelativeSuggestedWordStartIndex()I" />
+		<method name="getRelativeWordEndIndex()I" />
+		<method name="getRelativeWordStartIndex()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent;" />
+		<method name="setRelativeSuggestedWordEndIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;" />
+		<method name="setRelativeSuggestedWordStartIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;" />
+		<method name="setRelativeWordEndIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;" />
+		<method name="setRelativeWordStartIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextLanguage" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getConfidenceScore(Ljava/lang/Object;)F" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getLocale(I)Ljava/lang/Object;" />
+		<method name="getLocaleHypothesisCount()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextLanguage$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/view/textclassifier/TextLanguage;" />
+		<method name="putLocale(Ljava/lang/Object;F)Landroid/view/textclassifier/TextLanguage$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLanguage$Builder;" />
+		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextLanguage$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextLanguage$Request" since="29">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCallingPackageName()Ljava/lang/String;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextLanguage$Request$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="build()Landroid/view/textclassifier/TextLanguage$Request;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLanguage$Request$Builder;" />
+	</class>
+	<class name="android/view/textclassifier/TextLinks" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="apply(Landroid/text/Spannable;ILjava/util/function/Function;)I" />
+		<method name="getExtras()Landroid/os/Bundle;" since="29" />
+		<method name="getLinks()Ljava/util/Collection;" />
+		<method name="getText()Ljava/lang/CharSequence;" since="30" />
+		<field name="APPLY_STRATEGY_IGNORE" />
+		<field name="APPLY_STRATEGY_REPLACE" />
+		<field name="CREATOR" />
+		<field name="STATUS_DIFFERENT_TEXT" />
+		<field name="STATUS_LINKS_APPLIED" />
+		<field name="STATUS_NO_LINKS_APPLIED" />
+		<field name="STATUS_NO_LINKS_FOUND" />
+		<field name="STATUS_UNSUPPORTED_CHARACTER" since="29" />
+	</class>
+	<class name="android/view/textclassifier/TextLinks$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="addLink(IILjava/util/Map;)Landroid/view/textclassifier/TextLinks$Builder;" />
+		<method name="addLink(IILjava/util/Map;Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Builder;" since="29" />
+		<method name="build()Landroid/view/textclassifier/TextLinks;" />
+		<method name="clearTextLinks()Landroid/view/textclassifier/TextLinks$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Builder;" since="29" />
+	</class>
+	<class name="android/view/textclassifier/TextLinks$Request" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCallingPackageName()Ljava/lang/String;" since="29" />
+		<method name="getDefaultLocales()Landroid/os/LocaleList;" />
+		<method name="getEntityConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;" />
+		<method name="getExtras()Landroid/os/Bundle;" since="29" />
+		<method name="getReferenceTime()Ljava/time/ZonedDateTime;" since="30" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextLinks$Request$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="build()Landroid/view/textclassifier/TextLinks$Request;" />
+		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextLinks$Request$Builder;" />
+		<method name="setEntityConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/TextLinks$Request$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Request$Builder;" since="29" />
+		<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/TextLinks$Request$Builder;" since="30" />
+	</class>
+	<class name="android/view/textclassifier/TextLinks$TextLink" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getConfidenceScore(Ljava/lang/String;)F" />
+		<method name="getEnd()I" />
+		<method name="getEntity(I)Ljava/lang/String;" />
+		<method name="getEntityCount()I" />
+		<method name="getExtras()Landroid/os/Bundle;" since="29" />
+		<method name="getStart()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextLinks$TextLinkSpan" since="28">
+		<extends name="android/text/style/ClickableSpan" />
+		<method name="&lt;init&gt;(Landroid/view/textclassifier/TextLinks$TextLink;)V" />
+		<method name="getTextLink()Landroid/view/textclassifier/TextLinks$TextLink;" />
+	</class>
+	<class name="android/view/textclassifier/TextSelection" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" since="28" />
+		<method name="getConfidenceScore(Ljava/lang/String;)F" />
+		<method name="getEntity(I)Ljava/lang/String;" />
+		<method name="getEntityCount()I" />
+		<method name="getExtras()Landroid/os/Bundle;" since="29" />
+		<method name="getId()Ljava/lang/String;" since="28" />
+		<method name="getSelectionEndIndex()I" />
+		<method name="getSelectionStartIndex()I" />
+		<method name="getTextClassification()Landroid/view/textclassifier/TextClassification;" since="31" />
+		<field name="CREATOR" since="28" />
+	</class>
+	<class name="android/view/textclassifier/TextSelection$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="build()Landroid/view/textclassifier/TextSelection;" />
+		<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextSelection$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextSelection$Builder;" since="29" />
+		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextSelection$Builder;" since="28" />
+		<method name="setTextClassification(Landroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/TextSelection$Builder;" since="31" />
+	</class>
+	<class name="android/view/textclassifier/TextSelection$Request" since="28">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getCallingPackageName()Ljava/lang/String;" since="29" />
+		<method name="getDefaultLocales()Landroid/os/LocaleList;" />
+		<method name="getEndIndex()I" />
+		<method name="getExtras()Landroid/os/Bundle;" since="29" />
+		<method name="getStartIndex()I" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="shouldIncludeTextClassification()Z" since="31" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textclassifier/TextSelection$Request$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;II)V" />
+		<method name="build()Landroid/view/textclassifier/TextSelection$Request;" />
+		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection$Request$Builder;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextSelection$Request$Builder;" since="29" />
+		<method name="setIncludeTextClassification(Z)Landroid/view/textclassifier/TextSelection$Request$Builder;" since="31" />
+	</class>
+	<class name="android/view/textservice/SentenceSuggestionsInfo" since="16">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;([Landroid/view/textservice/SuggestionsInfo;[I[I)V" />
+		<method name="getLengthAt(I)I" />
+		<method name="getOffsetAt(I)I" />
+		<method name="getSuggestionsCount()I" />
+		<method name="getSuggestionsInfoAt(I)Landroid/view/textservice/SuggestionsInfo;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textservice/SpellCheckerInfo" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getComponent()Landroid/content/ComponentName;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getPackageName()Ljava/lang/String;" />
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;" />
+		<method name="getSettingsActivity()Ljava/lang/String;" />
+		<method name="getSubtypeAt(I)Landroid/view/textservice/SpellCheckerSubtype;" />
+		<method name="getSubtypeCount()I" />
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession" since="14">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" since="15" />
+		<method name="close()V" />
+		<method name="getSentenceSuggestions([Landroid/view/textservice/TextInfo;I)V" since="16" />
+		<method name="getSpellChecker()Landroid/view/textservice/SpellCheckerInfo;" />
+		<method name="getSuggestions(Landroid/view/textservice/TextInfo;I)V" deprecated="16" />
+		<method name="getSuggestions([Landroid/view/textservice/TextInfo;IZ)V" deprecated="16" />
+		<method name="isSessionDisconnected()Z" />
+		<field name="SERVICE_META_DATA" />
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession$SpellCheckerSessionListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onGetSentenceSuggestions([Landroid/view/textservice/SentenceSuggestionsInfo;)V" since="16" />
+		<method name="onGetSuggestions([Landroid/view/textservice/SuggestionsInfo;)V" />
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession$SpellCheckerSessionParams" since="31">
+		<extends name="java/lang/Object" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getSupportedAttributes()I" />
+		<method name="shouldReferToSpellCheckerLanguageSettings()Z" />
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;" />
+		<method name="setLocale(Ljava/util/Locale;)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;" />
+		<method name="setShouldReferToSpellCheckerLanguageSettings(Z)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;" />
+		<method name="setSupportedAttributes(I)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;" />
+	</class>
+	<class name="android/view/textservice/SpellCheckerSubtype" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(ILjava/lang/String;Ljava/lang/String;)V" deprecated="24" />
+		<method name="containsExtraValueKey(Ljava/lang/String;)Z" since="16" />
+		<method name="getDisplayName(Landroid/content/Context;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;" />
+		<method name="getExtraValue()Ljava/lang/String;" />
+		<method name="getExtraValueOf(Ljava/lang/String;)Ljava/lang/String;" since="16" />
+		<method name="getLanguageTag()Ljava/lang/String;" since="24" />
+		<method name="getLocale()Ljava/lang/String;" deprecated="24" />
+		<method name="getNameResId()I" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textservice/SuggestionsInfo" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(I[Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(I[Ljava/lang/String;II)V" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="getCookie()I" />
+		<method name="getSequence()I" />
+		<method name="getSuggestionAt(I)Ljava/lang/String;" />
+		<method name="getSuggestionsAttributes()I" />
+		<method name="getSuggestionsCount()I" />
+		<method name="setCookieAndSequence(II)V" />
+		<field name="CREATOR" />
+		<field name="RESULT_ATTR_DONT_SHOW_UI_FOR_SUGGESTIONS" since="31" />
+		<field name="RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS" since="15" />
+		<field name="RESULT_ATTR_IN_THE_DICTIONARY" />
+		<field name="RESULT_ATTR_LOOKS_LIKE_GRAMMAR_ERROR" since="31" />
+		<field name="RESULT_ATTR_LOOKS_LIKE_TYPO" />
+	</class>
+	<class name="android/view/textservice/TextInfo" since="14">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;IIII)V" since="21" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;II)V" />
+		<method name="getCharSequence()Ljava/lang/CharSequence;" since="21" />
+		<method name="getCookie()I" />
+		<method name="getSequence()I" />
+		<method name="getText()Ljava/lang/String;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/textservice/TextServicesManager" since="14">
+		<extends name="java/lang/Object" />
+		<method name="getCurrentSpellCheckerInfo()Landroid/view/textservice/SpellCheckerInfo;" since="31" />
+		<method name="getEnabledSpellCheckerInfos()Ljava/util/List;" since="31" />
+		<method name="isSpellCheckerEnabled()Z" since="31" />
+		<method name="newSpellCheckerSession(Landroid/os/Bundle;Ljava/util/Locale;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;Z)Landroid/view/textservice/SpellCheckerSession;" />
+		<method name="newSpellCheckerSession(Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams;Ljava/util/concurrent/Executor;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;)Landroid/view/textservice/SpellCheckerSession;" since="31" />
+	</class>
+	<class name="android/view/translation/TranslationCapability" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getSourceSpec()Landroid/view/translation/TranslationSpec;" />
+		<method name="getState()I" />
+		<method name="getSupportedTranslationFlags()I" />
+		<method name="getTargetSpec()Landroid/view/translation/TranslationSpec;" />
+		<method name="isUiTranslationEnabled()Z" />
+		<field name="CREATOR" />
+		<field name="STATE_AVAILABLE_TO_DOWNLOAD" />
+		<field name="STATE_DOWNLOADING" />
+		<field name="STATE_NOT_AVAILABLE" />
+		<field name="STATE_ON_DEVICE" />
+	</class>
+	<class name="android/view/translation/TranslationContext" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getSourceSpec()Landroid/view/translation/TranslationSpec;" />
+		<method name="getTargetSpec()Landroid/view/translation/TranslationSpec;" />
+		<method name="getTranslationFlags()I" />
+		<field name="CREATOR" />
+		<field name="FLAG_DEFINITIONS" />
+		<field name="FLAG_LOW_LATENCY" />
+		<field name="FLAG_TRANSLITERATION" />
+	</class>
+	<class name="android/view/translation/TranslationContext$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/translation/TranslationSpec;Landroid/view/translation/TranslationSpec;)V" />
+		<method name="build()Landroid/view/translation/TranslationContext;" />
+		<method name="setTranslationFlags(I)Landroid/view/translation/TranslationContext$Builder;" />
+	</class>
+	<class name="android/view/translation/TranslationManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="addOnDeviceTranslationCapabilityUpdateListener(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" />
+		<method name="createOnDeviceTranslator(Landroid/view/translation/TranslationContext;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" />
+		<method name="getOnDeviceTranslationCapabilities(II)Ljava/util/Set;" />
+		<method name="getOnDeviceTranslationSettingsActivityIntent()Landroid/app/PendingIntent;" />
+		<method name="removeOnDeviceTranslationCapabilityUpdateListener(Ljava/util/function/Consumer;)V" />
+	</class>
+	<class name="android/view/translation/TranslationRequest" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getFlags()I" />
+		<method name="getTranslationRequestValues()Ljava/util/List;" />
+		<method name="getViewTranslationRequests()Ljava/util/List;" />
+		<field name="CREATOR" />
+		<field name="FLAG_DICTIONARY_RESULT" />
+		<field name="FLAG_PARTIAL_RESPONSES" />
+		<field name="FLAG_TRANSLATION_RESULT" />
+		<field name="FLAG_TRANSLITERATION_RESULT" />
+	</class>
+	<class name="android/view/translation/TranslationRequest$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Landroid/view/translation/TranslationRequest;" />
+		<method name="setFlags(I)Landroid/view/translation/TranslationRequest$Builder;" />
+		<method name="setTranslationRequestValues(Ljava/util/List;)Landroid/view/translation/TranslationRequest$Builder;" />
+		<method name="setViewTranslationRequests(Ljava/util/List;)Landroid/view/translation/TranslationRequest$Builder;" />
+	</class>
+	<class name="android/view/translation/TranslationRequestValue" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="forText(Ljava/lang/CharSequence;)Landroid/view/translation/TranslationRequestValue;" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/translation/TranslationResponse" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getTranslationResponseValues()Landroid/util/SparseArray;" />
+		<method name="getTranslationStatus()I" />
+		<method name="getViewTranslationResponses()Landroid/util/SparseArray;" />
+		<method name="isFinalResponse()Z" />
+		<field name="CREATOR" />
+		<field name="TRANSLATION_STATUS_CONTEXT_UNSUPPORTED" />
+		<field name="TRANSLATION_STATUS_SUCCESS" />
+		<field name="TRANSLATION_STATUS_UNKNOWN_ERROR" />
+	</class>
+	<class name="android/view/translation/TranslationResponse$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/view/translation/TranslationResponse;" />
+		<method name="setFinalResponse(Z)Landroid/view/translation/TranslationResponse$Builder;" />
+		<method name="setTranslationResponseValue(ILandroid/view/translation/TranslationResponseValue;)Landroid/view/translation/TranslationResponse$Builder;" />
+		<method name="setTranslationResponseValues(Landroid/util/SparseArray;)Landroid/view/translation/TranslationResponse$Builder;" />
+		<method name="setViewTranslationResponse(ILandroid/view/translation/ViewTranslationResponse;)Landroid/view/translation/TranslationResponse$Builder;" />
+		<method name="setViewTranslationResponses(Landroid/util/SparseArray;)Landroid/view/translation/TranslationResponse$Builder;" />
+	</class>
+	<class name="android/view/translation/TranslationResponseValue" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="forError()Landroid/view/translation/TranslationResponseValue;" />
+		<method name="getExtras()Landroid/os/Bundle;" />
+		<method name="getStatusCode()I" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTransliteration()Ljava/lang/CharSequence;" />
+		<field name="CREATOR" />
+		<field name="EXTRA_DEFINITIONS" />
+		<field name="STATUS_ERROR" />
+		<field name="STATUS_SUCCESS" />
+	</class>
+	<class name="android/view/translation/TranslationResponseValue$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="build()Landroid/view/translation/TranslationResponseValue;" />
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/translation/TranslationResponseValue$Builder;" />
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/view/translation/TranslationResponseValue$Builder;" />
+		<method name="setTransliteration(Ljava/lang/CharSequence;)Landroid/view/translation/TranslationResponseValue$Builder;" />
+	</class>
+	<class name="android/view/translation/TranslationSpec" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;I)V" />
+		<method name="getDataFormat()I" />
+		<method name="getLocale()Ljava/lang/Object;" />
+		<field name="CREATOR" />
+		<field name="DATA_FORMAT_TEXT" />
+	</class>
+	<class name="android/view/translation/Translator" since="31">
+		<extends name="java/lang/Object" />
+		<method name="destroy()V" />
+		<method name="isDestroyed()Z" />
+		<method name="translate(Landroid/view/translation/TranslationRequest;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" />
+	</class>
+	<class name="android/view/translation/UiTranslationManager" since="31">
+		<extends name="java/lang/Object" />
+		<method name="registerUiTranslationStateCallback(Ljava/util/concurrent/Executor;Landroid/view/translation/UiTranslationStateCallback;)V" />
+		<method name="unregisterUiTranslationStateCallback(Landroid/view/translation/UiTranslationStateCallback;)V" />
+	</class>
+	<class name="android/view/translation/UiTranslationStateCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onFinished()V" />
+		<method name="onPaused()V" />
+		<method name="onResumed(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="onStarted(Ljava/lang/Object;Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/view/translation/ViewTranslationCallback" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onClearTranslation(Landroid/view/View;)Z" />
+		<method name="onHideTranslation(Landroid/view/View;)Z" />
+		<method name="onShowTranslation(Landroid/view/View;)Z" />
+	</class>
+	<class name="android/view/translation/ViewTranslationRequest" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" />
+		<method name="getKeys()Ljava/util/Set;" />
+		<method name="getValue(Ljava/lang/String;)Landroid/view/translation/TranslationRequestValue;" />
+		<field name="CREATOR" />
+		<field name="ID_TEXT" />
+	</class>
+	<class name="android/view/translation/ViewTranslationRequest$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;)V" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;J)V" />
+		<method name="build()Landroid/view/translation/ViewTranslationRequest;" />
+		<method name="setValue(Ljava/lang/String;Landroid/view/translation/TranslationRequestValue;)Landroid/view/translation/ViewTranslationRequest$Builder;" />
+	</class>
+	<class name="android/view/translation/ViewTranslationResponse" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" />
+		<method name="getKeys()Ljava/util/Set;" />
+		<method name="getValue(Ljava/lang/String;)Landroid/view/translation/TranslationResponseValue;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/view/translation/ViewTranslationResponse$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/autofill/AutofillId;)V" />
+		<method name="build()Landroid/view/translation/ViewTranslationResponse;" />
+		<method name="setValue(Ljava/lang/String;Landroid/view/translation/TranslationResponseValue;)Landroid/view/translation/ViewTranslationResponse$Builder;" />
+	</class>
+	<class name="android/webkit/CacheManager" since="1" deprecated="11" removed="17">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cacheDisabled()Z" deprecated="15" />
+		<method name="endCacheTransaction()Z" deprecated="15" />
+		<method name="getCacheFile(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;" deprecated="15" />
+		<method name="getCacheFileBaseDir()Ljava/io/File;" deprecated="15" />
+		<method name="saveCacheFile(Ljava/lang/String;Landroid/webkit/CacheManager$CacheResult;)V" deprecated="15" />
+		<method name="startCacheTransaction()Z" deprecated="15" />
+	</class>
+	<class name="android/webkit/CacheManager$CacheResult" since="1" deprecated="11" removed="17">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getContentDisposition()Ljava/lang/String;" since="7" />
+		<method name="getContentLength()J" />
+		<method name="getETag()Ljava/lang/String;" />
+		<method name="getEncoding()Ljava/lang/String;" />
+		<method name="getExpires()J" />
+		<method name="getExpiresString()Ljava/lang/String;" since="7" />
+		<method name="getHttpStatusCode()I" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getLastModified()Ljava/lang/String;" />
+		<method name="getLocalPath()Ljava/lang/String;" />
+		<method name="getLocation()Ljava/lang/String;" />
+		<method name="getMimeType()Ljava/lang/String;" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="setEncoding(Ljava/lang/String;)V" />
+		<method name="setInputStream(Ljava/io/InputStream;)V" />
+	</class>
+	<class name="android/webkit/ClientCertRequest" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cancel()V" />
+		<method name="getHost()Ljava/lang/String;" />
+		<method name="getKeyTypes()[Ljava/lang/String;" />
+		<method name="getPort()I" />
+		<method name="getPrincipals()[Ljava/security/Principal;" />
+		<method name="ignore()V" />
+		<method name="proceed(Ljava/security/PrivateKey;[Ljava/security/cert/X509Certificate;)V" />
+	</class>
+	<class name="android/webkit/ConsoleMessage" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILandroid/webkit/ConsoleMessage$MessageLevel;)V" />
+		<method name="lineNumber()I" />
+		<method name="message()Ljava/lang/String;" />
+		<method name="messageLevel()Landroid/webkit/ConsoleMessage$MessageLevel;" />
+		<method name="sourceId()Ljava/lang/String;" />
+	</class>
+	<class name="android/webkit/ConsoleMessage$MessageLevel" since="8">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/ConsoleMessage$MessageLevel;" />
+		<method name="values()[Landroid/webkit/ConsoleMessage$MessageLevel;" />
+		<field name="DEBUG" />
+		<field name="ERROR" />
+		<field name="LOG" />
+		<field name="TIP" />
+		<field name="WARNING" />
+	</class>
+	<class name="android/webkit/CookieManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="22" deprecated="29" />
+		<method name="acceptCookie()Z" />
+		<method name="acceptThirdPartyCookies(Landroid/webkit/WebView;)Z" since="21" />
+		<method name="allowFileSchemeCookies()Z" since="12" />
+		<method name="flush()V" since="21" />
+		<method name="getCookie(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getInstance()Landroid/webkit/CookieManager;" />
+		<method name="hasCookies()Z" />
+		<method name="removeAllCookie()V" deprecated="21" />
+		<method name="removeAllCookies(Landroid/webkit/ValueCallback;)V" since="21" />
+		<method name="removeExpiredCookie()V" deprecated="21" />
+		<method name="removeSessionCookie()V" deprecated="21" />
+		<method name="removeSessionCookies(Landroid/webkit/ValueCallback;)V" since="21" />
+		<method name="setAcceptCookie(Z)V" />
+		<method name="setAcceptFileSchemeCookies(Z)V" since="12" deprecated="30" />
+		<method name="setAcceptThirdPartyCookies(Landroid/webkit/WebView;Z)V" since="21" />
+		<method name="setCookie(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setCookie(Ljava/lang/String;Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="21" />
+	</class>
+	<class name="android/webkit/CookieSyncManager" since="1" deprecated="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" />
+		<method name="createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager;" deprecated="29" />
+		<method name="getInstance()Landroid/webkit/CookieSyncManager;" deprecated="29" />
+		<method name="onSyncInit()V" since="28" removed="29" />
+		<method name="resetSync()V" since="9" deprecated="21" />
+		<method name="startSync()V" since="9" deprecated="21" />
+		<method name="stopSync()V" since="9" deprecated="21" />
+		<method name="sync()V" since="9" deprecated="21" />
+		<method name="syncFromRamToFlash()V" deprecated="21" />
+		<field name="LOGTAG" since="21" removed="28" />
+		<field name="mDataBase" since="21" removed="28" />
+		<field name="mHandler" since="21" removed="28" />
+	</class>
+	<class name="android/webkit/DateSorter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="getBoundary(I)J" />
+		<method name="getIndex(J)I" />
+		<method name="getLabel(I)Ljava/lang/String;" />
+		<field name="DAY_COUNT" />
+	</class>
+	<class name="android/webkit/DownloadListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onDownloadStart(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V" />
+	</class>
+	<class name="android/webkit/GeolocationPermissions" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="16" />
+		<method name="allow(Ljava/lang/String;)V" since="7" />
+		<method name="clear(Ljava/lang/String;)V" since="7" />
+		<method name="clearAll()V" since="7" />
+		<method name="getAllowed(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7" />
+		<method name="getInstance()Landroid/webkit/GeolocationPermissions;" since="7" />
+		<method name="getOrigins(Landroid/webkit/ValueCallback;)V" since="7" />
+	</class>
+	<class name="android/webkit/GeolocationPermissions$Callback" since="5">
+		<extends name="java/lang/Object" />
+		<method name="invoke(Ljava/lang/String;ZZ)V" />
+	</class>
+	<class name="android/webkit/HttpAuthHandler" since="1">
+		<extends name="android/os/Handler" />
+		<method name="cancel()V" />
+		<method name="proceed(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="useHttpAuthUsernamePassword()Z" />
+	</class>
+	<class name="android/webkit/JavascriptInterface" since="17">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/webkit/JsPromptResult" since="1">
+		<extends name="android/webkit/JsResult" />
+		<method name="confirm(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/webkit/JsResult" since="1">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="confirm()V" />
+		<method name="wakeUp()V" removed="16" />
+		<field name="mProxy" removed="8" />
+		<field name="mResult" removed="16" />
+	</class>
+	<class name="android/webkit/MimeTypeMap" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getExtensionFromMimeType(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getFileExtensionFromUrl(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getSingleton()Landroid/webkit/MimeTypeMap;" />
+		<method name="hasExtension(Ljava/lang/String;)Z" />
+		<method name="hasMimeType(Ljava/lang/String;)Z" />
+	</class>
+	<class name="android/webkit/PermissionRequest" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="deny()V" />
+		<method name="getOrigin()Landroid/net/Uri;" />
+		<method name="getResources()[Ljava/lang/String;" />
+		<method name="grant([Ljava/lang/String;)V" />
+		<field name="RESOURCE_AUDIO_CAPTURE" />
+		<field name="RESOURCE_MIDI_SYSEX" since="23" />
+		<field name="RESOURCE_PROTECTED_MEDIA_ID" />
+		<field name="RESOURCE_VIDEO_CAPTURE" />
+	</class>
+	<class name="android/webkit/Plugin" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="dispatchClickEvent(Landroid/content/Context;)V" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getFileName()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="setClickHandler(Landroid/webkit/Plugin$PreferencesClickHandler;)V" />
+		<method name="setDescription(Ljava/lang/String;)V" />
+		<method name="setFileName(Ljava/lang/String;)V" />
+		<method name="setName(Ljava/lang/String;)V" />
+		<method name="setPath(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/webkit/Plugin$PreferencesClickHandler" since="1" removed="12">
+		<extends name="java/lang/Object" />
+		<method name="handleClickEvent(Landroid/content/Context;)V" />
+	</class>
+	<class name="android/webkit/PluginData" since="3" deprecated="5" removed="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;JLjava/util/Map;I)V" />
+		<method name="getContentLength()J" />
+		<method name="getHeaders()Ljava/util/Map;" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getStatusCode()I" />
+	</class>
+	<class name="android/webkit/PluginList" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addPlugin(Landroid/webkit/Plugin;)V" />
+		<method name="clear()V" />
+		<method name="getList()Ljava/util/List;" />
+		<method name="pluginClicked(Landroid/content/Context;I)V" />
+		<method name="removePlugin(Landroid/webkit/Plugin;)V" />
+	</class>
+	<class name="android/webkit/PluginStub" since="5">
+		<extends name="java/lang/Object" />
+		<method name="getEmbeddedView(ILandroid/content/Context;)Landroid/view/View;" />
+		<method name="getFullScreenView(ILandroid/content/Context;)Landroid/view/View;" />
+	</class>
+	<class name="android/webkit/RenderProcessGoneDetail" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="didCrash()Z" />
+		<method name="rendererPriorityAtExit()I" />
+	</class>
+	<class name="android/webkit/SafeBrowsingResponse" since="27">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="backToSafety(Z)V" />
+		<method name="proceed(Z)V" />
+		<method name="showInterstitial(Z)V" />
+	</class>
+	<class name="android/webkit/ServiceWorkerClient" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="shouldInterceptRequest(Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;" />
+	</class>
+	<class name="android/webkit/ServiceWorkerController" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getInstance()Landroid/webkit/ServiceWorkerController;" />
+		<method name="getServiceWorkerWebSettings()Landroid/webkit/ServiceWorkerWebSettings;" />
+		<method name="setServiceWorkerClient(Landroid/webkit/ServiceWorkerClient;)V" />
+	</class>
+	<class name="android/webkit/ServiceWorkerWebSettings" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAllowContentAccess()Z" />
+		<method name="getAllowFileAccess()Z" />
+		<method name="getBlockNetworkLoads()Z" />
+		<method name="getCacheMode()I" />
+		<method name="setAllowContentAccess(Z)V" />
+		<method name="setAllowFileAccess(Z)V" />
+		<method name="setBlockNetworkLoads(Z)V" />
+		<method name="setCacheMode(I)V" />
+	</class>
+	<class name="android/webkit/SslErrorHandler" since="1">
+		<extends name="android/os/Handler" />
+		<method name="cancel()V" />
+		<method name="proceed()V" />
+	</class>
+	<class name="android/webkit/TracingConfig" since="28">
+		<extends name="java/lang/Object" />
+		<method name="getCustomIncludedCategories()Ljava/util/List;" />
+		<method name="getPredefinedCategories()I" />
+		<method name="getTracingMode()I" />
+		<field name="CATEGORIES_ALL" />
+		<field name="CATEGORIES_ANDROID_WEBVIEW" />
+		<field name="CATEGORIES_FRAME_VIEWER" />
+		<field name="CATEGORIES_INPUT_LATENCY" />
+		<field name="CATEGORIES_JAVASCRIPT_AND_RENDERING" />
+		<field name="CATEGORIES_NONE" />
+		<field name="CATEGORIES_RENDERING" />
+		<field name="CATEGORIES_WEB_DEVELOPER" />
+		<field name="RECORD_CONTINUOUSLY" />
+		<field name="RECORD_UNTIL_FULL" />
+	</class>
+	<class name="android/webkit/TracingConfig$Builder" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addCategories(Ljava/util/Collection;)Landroid/webkit/TracingConfig$Builder;" />
+		<method name="addCategories([I)Landroid/webkit/TracingConfig$Builder;" />
+		<method name="addCategories([Ljava/lang/String;)Landroid/webkit/TracingConfig$Builder;" />
+		<method name="build()Landroid/webkit/TracingConfig;" />
+		<method name="setTracingMode(I)Landroid/webkit/TracingConfig$Builder;" />
+	</class>
+	<class name="android/webkit/TracingController" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getInstance()Landroid/webkit/TracingController;" />
+		<method name="isTracing()Z" />
+		<method name="start(Landroid/webkit/TracingConfig;)V" />
+		<method name="stop(Ljava/io/OutputStream;Ljava/util/concurrent/Executor;)Z" />
+	</class>
+	<class name="android/webkit/URLUtil" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="composeSearchUrl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="decode([B)[B" />
+		<method name="guessFileName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="guessUrl(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="isAboutUrl(Ljava/lang/String;)Z" />
+		<method name="isAssetUrl(Ljava/lang/String;)Z" />
+		<method name="isContentUrl(Ljava/lang/String;)Z" />
+		<method name="isCookielessProxyUrl(Ljava/lang/String;)Z" deprecated="15" />
+		<method name="isDataUrl(Ljava/lang/String;)Z" />
+		<method name="isFileUrl(Ljava/lang/String;)Z" />
+		<method name="isHttpUrl(Ljava/lang/String;)Z" />
+		<method name="isHttpsUrl(Ljava/lang/String;)Z" />
+		<method name="isJavaScriptUrl(Ljava/lang/String;)Z" />
+		<method name="isNetworkUrl(Ljava/lang/String;)Z" />
+		<method name="isValidUrl(Ljava/lang/String;)Z" />
+		<method name="stripAnchor(Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="android/webkit/UrlInterceptHandler" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object" />
+		<method name="getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData;" since="3" />
+		<method name="service(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;" />
+	</class>
+	<class name="android/webkit/UrlInterceptRegistry" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData;" since="3" />
+		<method name="getSurrogate(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;" />
+		<method name="registerHandler(Landroid/webkit/UrlInterceptHandler;)Z" />
+		<method name="setUrlInterceptDisabled(Z)V" />
+		<method name="unregisterHandler(Landroid/webkit/UrlInterceptHandler;)Z" />
+		<method name="urlInterceptDisabled()Z" />
+	</class>
+	<class name="android/webkit/ValueCallback" since="7">
+		<extends name="java/lang/Object" />
+		<method name="onReceiveValue(Ljava/lang/Object;)V" />
+	</class>
+	<class name="android/webkit/WebBackForwardList" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" since="22" />
+		<method name="clone()Landroid/webkit/WebBackForwardList;" />
+		<method name="getCurrentIndex()I" />
+		<method name="getCurrentItem()Landroid/webkit/WebHistoryItem;" />
+		<method name="getItemAtIndex(I)Landroid/webkit/WebHistoryItem;" />
+		<method name="getSize()I" />
+	</class>
+	<class name="android/webkit/WebChromeClient" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDefaultVideoPoster()Landroid/graphics/Bitmap;" since="7" />
+		<method name="getVideoLoadingProgressView()Landroid/view/View;" since="7" />
+		<method name="getVisitedHistory(Landroid/webkit/ValueCallback;)V" since="7" />
+		<method name="onCloseWindow(Landroid/webkit/WebView;)V" />
+		<method name="onConsoleMessage(Landroid/webkit/ConsoleMessage;)Z" since="8" />
+		<method name="onConsoleMessage(Ljava/lang/String;ILjava/lang/String;)V" since="7" deprecated="15" />
+		<method name="onCreateWindow(Landroid/webkit/WebView;ZZLandroid/os/Message;)Z" />
+		<method name="onExceededDatabaseQuota(Ljava/lang/String;Ljava/lang/String;JJJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="5" deprecated="19" />
+		<method name="onGeolocationPermissionsHidePrompt()V" since="5" />
+		<method name="onGeolocationPermissionsShowPrompt(Ljava/lang/String;Landroid/webkit/GeolocationPermissions$Callback;)V" since="5" />
+		<method name="onHideCustomView()V" since="7" />
+		<method name="onJsAlert(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z" />
+		<method name="onJsBeforeUnload(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z" />
+		<method name="onJsConfirm(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z" />
+		<method name="onJsPrompt(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsPromptResult;)Z" />
+		<method name="onJsTimeout()Z" since="7" deprecated="17" />
+		<method name="onPermissionRequest(Landroid/webkit/PermissionRequest;)V" since="21" />
+		<method name="onPermissionRequestCanceled(Landroid/webkit/PermissionRequest;)V" since="21" />
+		<method name="onProgressChanged(Landroid/webkit/WebView;I)V" />
+		<method name="onReachedMaxAppCacheSize(JJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="7" deprecated="19" />
+		<method name="onReceivedIcon(Landroid/webkit/WebView;Landroid/graphics/Bitmap;)V" />
+		<method name="onReceivedTitle(Landroid/webkit/WebView;Ljava/lang/String;)V" />
+		<method name="onReceivedTouchIconUrl(Landroid/webkit/WebView;Ljava/lang/String;Z)V" since="7" />
+		<method name="onRequestFocus(Landroid/webkit/WebView;)V" />
+		<method name="onShowCustomView(Landroid/view/View;ILandroid/webkit/WebChromeClient$CustomViewCallback;)V" since="14" deprecated="18" />
+		<method name="onShowCustomView(Landroid/view/View;Landroid/webkit/WebChromeClient$CustomViewCallback;)V" since="7" />
+		<method name="onShowFileChooser(Landroid/webkit/WebView;Landroid/webkit/ValueCallback;Landroid/webkit/WebChromeClient$FileChooserParams;)Z" since="21" />
+	</class>
+	<class name="android/webkit/WebChromeClient$CustomViewCallback" since="7">
+		<extends name="java/lang/Object" />
+		<method name="onCustomViewHidden()V" />
+	</class>
+	<class name="android/webkit/WebChromeClient$FileChooserParams" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createIntent()Landroid/content/Intent;" />
+		<method name="getAcceptTypes()[Ljava/lang/String;" />
+		<method name="getFilenameHint()Ljava/lang/String;" />
+		<method name="getMode()I" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="isCaptureEnabled()Z" />
+		<method name="parseResult(ILandroid/content/Intent;)[Landroid/net/Uri;" />
+		<field name="MODE_OPEN" />
+		<field name="MODE_OPEN_MULTIPLE" />
+		<field name="MODE_SAVE" />
+	</class>
+	<class name="android/webkit/WebHistoryItem" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" since="22" />
+		<method name="clone()Landroid/webkit/WebHistoryItem;" />
+		<method name="getFavicon()Landroid/graphics/Bitmap;" />
+		<method name="getId()I" deprecated="15" removed="17" />
+		<method name="getOriginalUrl()Ljava/lang/String;" since="3" />
+		<method name="getTitle()Ljava/lang/String;" />
+		<method name="getUrl()Ljava/lang/String;" />
+	</class>
+	<class name="android/webkit/WebIconDatabase" since="1" deprecated="18">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="22" deprecated="29" />
+		<method name="close()V" deprecated="29" />
+		<method name="getInstance()Landroid/webkit/WebIconDatabase;" deprecated="29" />
+		<method name="open(Ljava/lang/String;)V" deprecated="29" />
+		<method name="releaseIconForPageUrl(Ljava/lang/String;)V" deprecated="29" />
+		<method name="removeAllIcons()V" deprecated="29" />
+		<method name="requestIconForPageUrl(Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V" deprecated="29" />
+		<method name="retainIconForPageUrl(Ljava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="android/webkit/WebIconDatabase$IconListener" since="1" deprecated="18">
+		<extends name="java/lang/Object" />
+		<method name="onReceivedIcon(Ljava/lang/String;Landroid/graphics/Bitmap;)V" deprecated="29" />
+	</class>
+	<class name="android/webkit/WebMessage" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[Landroid/webkit/WebMessagePort;)V" />
+		<method name="getData()Ljava/lang/String;" />
+		<method name="getPorts()[Landroid/webkit/WebMessagePort;" />
+	</class>
+	<class name="android/webkit/WebMessagePort" since="23">
+		<extends name="java/lang/Object" />
+		<method name="close()V" />
+		<method name="postMessage(Landroid/webkit/WebMessage;)V" />
+		<method name="setWebMessageCallback(Landroid/webkit/WebMessagePort$WebMessageCallback;)V" />
+		<method name="setWebMessageCallback(Landroid/webkit/WebMessagePort$WebMessageCallback;Landroid/os/Handler;)V" />
+	</class>
+	<class name="android/webkit/WebMessagePort$WebMessageCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onMessage(Landroid/webkit/WebMessagePort;Landroid/webkit/WebMessage;)V" />
+	</class>
+	<class name="android/webkit/WebResourceError" since="23">
+		<extends name="java/lang/Object" />
+		<method name="getDescription()Ljava/lang/CharSequence;" />
+		<method name="getErrorCode()I" />
+	</class>
+	<class name="android/webkit/WebResourceRequest" since="21">
+		<extends name="java/lang/Object" />
+		<method name="getMethod()Ljava/lang/String;" />
+		<method name="getRequestHeaders()Ljava/util/Map;" />
+		<method name="getUrl()Landroid/net/Uri;" />
+		<method name="hasGesture()Z" />
+		<method name="isForMainFrame()Z" />
+		<method name="isRedirect()Z" since="24" />
+	</class>
+	<class name="android/webkit/WebResourceResponse" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/util/Map;Ljava/io/InputStream;)V" since="21" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/io/InputStream;)V" />
+		<method name="getData()Ljava/io/InputStream;" />
+		<method name="getEncoding()Ljava/lang/String;" />
+		<method name="getMimeType()Ljava/lang/String;" />
+		<method name="getReasonPhrase()Ljava/lang/String;" since="21" />
+		<method name="getResponseHeaders()Ljava/util/Map;" since="21" />
+		<method name="getStatusCode()I" since="21" />
+		<method name="setData(Ljava/io/InputStream;)V" />
+		<method name="setEncoding(Ljava/lang/String;)V" />
+		<method name="setMimeType(Ljava/lang/String;)V" />
+		<method name="setResponseHeaders(Ljava/util/Map;)V" since="21" />
+		<method name="setStatusCodeAndReasonPhrase(ILjava/lang/String;)V" since="21" />
+	</class>
+	<class name="android/webkit/WebSettings" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="22" />
+		<method name="enableSmoothTransition()Z" since="11" deprecated="17" />
+		<method name="getAllowContentAccess()Z" since="11" />
+		<method name="getAllowFileAccess()Z" since="3" />
+		<method name="getAllowFileAccessFromFileURLs()Z" since="16" />
+		<method name="getAllowUniversalAccessFromFileURLs()Z" since="16" />
+		<method name="getBlockNetworkImage()Z" />
+		<method name="getBlockNetworkLoads()Z" since="8" />
+		<method name="getBuiltInZoomControls()Z" since="3" />
+		<method name="getCacheMode()I" />
+		<method name="getCursiveFontFamily()Ljava/lang/String;" />
+		<method name="getDatabaseEnabled()Z" since="5" />
+		<method name="getDatabasePath()Ljava/lang/String;" since="5" deprecated="19" />
+		<method name="getDefaultFixedFontSize()I" />
+		<method name="getDefaultFontSize()I" />
+		<method name="getDefaultTextEncodingName()Ljava/lang/String;" />
+		<method name="getDefaultUserAgent(Landroid/content/Context;)Ljava/lang/String;" since="17" />
+		<method name="getDefaultZoom()Landroid/webkit/WebSettings$ZoomDensity;" since="7" deprecated="19" />
+		<method name="getDisabledActionModeMenuItems()I" since="24" />
+		<method name="getDisplayZoomControls()Z" since="11" />
+		<method name="getDomStorageEnabled()Z" since="7" />
+		<method name="getFantasyFontFamily()Ljava/lang/String;" />
+		<method name="getFixedFontFamily()Ljava/lang/String;" />
+		<method name="getForceDark()I" since="29" />
+		<method name="getJavaScriptCanOpenWindowsAutomatically()Z" />
+		<method name="getJavaScriptEnabled()Z" />
+		<method name="getLayoutAlgorithm()Landroid/webkit/WebSettings$LayoutAlgorithm;" />
+		<method name="getLightTouchEnabled()Z" deprecated="18" />
+		<method name="getLoadWithOverviewMode()Z" since="7" />
+		<method name="getLoadsImagesAutomatically()Z" />
+		<method name="getMediaPlaybackRequiresUserGesture()Z" since="17" />
+		<method name="getMinimumFontSize()I" />
+		<method name="getMinimumLogicalFontSize()I" />
+		<method name="getMixedContentMode()I" since="21" />
+		<method name="getNavDump()Z" deprecated="15" removed="17" />
+		<method name="getOffscreenPreRaster()Z" since="23" />
+		<method name="getPluginState()Landroid/webkit/WebSettings$PluginState;" since="8" deprecated="18" />
+		<method name="getPluginsEnabled()Z" deprecated="15" removed="18" />
+		<method name="getPluginsPath()Ljava/lang/String;" deprecated="15" removed="18" />
+		<method name="getSafeBrowsingEnabled()Z" since="26" />
+		<method name="getSansSerifFontFamily()Ljava/lang/String;" />
+		<method name="getSaveFormData()Z" deprecated="26" />
+		<method name="getSavePassword()Z" deprecated="18" />
+		<method name="getSerifFontFamily()Ljava/lang/String;" />
+		<method name="getStandardFontFamily()Ljava/lang/String;" />
+		<method name="getTextSize()Landroid/webkit/WebSettings$TextSize;" deprecated="15" />
+		<method name="getTextZoom()I" since="14" />
+		<method name="getUseDoubleTree()Z" deprecated="15" removed="17" />
+		<method name="getUseWebViewBackgroundForOverscrollBackground()Z" since="9" deprecated="15" removed="17" />
+		<method name="getUseWideViewPort()Z" />
+		<method name="getUserAgent()I" deprecated="15" removed="17" />
+		<method name="getUserAgentString()Ljava/lang/String;" since="3" />
+		<method name="setAllowContentAccess(Z)V" since="11" />
+		<method name="setAllowFileAccess(Z)V" since="3" />
+		<method name="setAllowFileAccessFromFileURLs(Z)V" since="16" deprecated="30" />
+		<method name="setAllowUniversalAccessFromFileURLs(Z)V" since="16" deprecated="30" />
+		<method name="setAppCacheEnabled(Z)V" since="7" deprecated="30" />
+		<method name="setAppCacheMaxSize(J)V" since="7" deprecated="18" />
+		<method name="setAppCachePath(Ljava/lang/String;)V" since="7" deprecated="30" />
+		<method name="setBlockNetworkImage(Z)V" />
+		<method name="setBlockNetworkLoads(Z)V" since="8" />
+		<method name="setBuiltInZoomControls(Z)V" since="3" />
+		<method name="setCacheMode(I)V" />
+		<method name="setCursiveFontFamily(Ljava/lang/String;)V" />
+		<method name="setDatabaseEnabled(Z)V" since="5" />
+		<method name="setDatabasePath(Ljava/lang/String;)V" since="5" deprecated="19" />
+		<method name="setDefaultFixedFontSize(I)V" />
+		<method name="setDefaultFontSize(I)V" />
+		<method name="setDefaultTextEncodingName(Ljava/lang/String;)V" />
+		<method name="setDefaultZoom(Landroid/webkit/WebSettings$ZoomDensity;)V" since="7" deprecated="19" />
+		<method name="setDisabledActionModeMenuItems(I)V" since="24" />
+		<method name="setDisplayZoomControls(Z)V" since="11" />
+		<method name="setDomStorageEnabled(Z)V" since="7" />
+		<method name="setEnableSmoothTransition(Z)V" since="11" deprecated="17" />
+		<method name="setFantasyFontFamily(Ljava/lang/String;)V" />
+		<method name="setFixedFontFamily(Ljava/lang/String;)V" />
+		<method name="setForceDark(I)V" since="29" />
+		<method name="setGeolocationDatabasePath(Ljava/lang/String;)V" since="5" deprecated="24" />
+		<method name="setGeolocationEnabled(Z)V" since="5" />
+		<method name="setJavaScriptCanOpenWindowsAutomatically(Z)V" />
+		<method name="setJavaScriptEnabled(Z)V" />
+		<method name="setLayoutAlgorithm(Landroid/webkit/WebSettings$LayoutAlgorithm;)V" />
+		<method name="setLightTouchEnabled(Z)V" deprecated="18" />
+		<method name="setLoadWithOverviewMode(Z)V" since="7" />
+		<method name="setLoadsImagesAutomatically(Z)V" />
+		<method name="setMediaPlaybackRequiresUserGesture(Z)V" since="17" />
+		<method name="setMinimumFontSize(I)V" />
+		<method name="setMinimumLogicalFontSize(I)V" />
+		<method name="setMixedContentMode(I)V" since="21" />
+		<method name="setNavDump(Z)V" deprecated="15" removed="17" />
+		<method name="setNeedInitialFocus(Z)V" />
+		<method name="setOffscreenPreRaster(Z)V" since="23" />
+		<method name="setPluginState(Landroid/webkit/WebSettings$PluginState;)V" since="8" deprecated="18" />
+		<method name="setPluginsEnabled(Z)V" deprecated="15" removed="18" />
+		<method name="setPluginsPath(Ljava/lang/String;)V" deprecated="15" removed="18" />
+		<method name="setRenderPriority(Landroid/webkit/WebSettings$RenderPriority;)V" deprecated="18" />
+		<method name="setSafeBrowsingEnabled(Z)V" since="26" />
+		<method name="setSansSerifFontFamily(Ljava/lang/String;)V" />
+		<method name="setSaveFormData(Z)V" deprecated="26" />
+		<method name="setSavePassword(Z)V" deprecated="18" />
+		<method name="setSerifFontFamily(Ljava/lang/String;)V" />
+		<method name="setStandardFontFamily(Ljava/lang/String;)V" />
+		<method name="setSupportMultipleWindows(Z)V" />
+		<method name="setSupportZoom(Z)V" />
+		<method name="setTextSize(Landroid/webkit/WebSettings$TextSize;)V" deprecated="15" />
+		<method name="setTextZoom(I)V" since="14" />
+		<method name="setUseDoubleTree(Z)V" deprecated="15" removed="17" />
+		<method name="setUseWebViewBackgroundForOverscrollBackground(Z)V" since="9" deprecated="15" removed="17" />
+		<method name="setUseWideViewPort(Z)V" />
+		<method name="setUserAgent(I)V" deprecated="15" removed="17" />
+		<method name="setUserAgentString(Ljava/lang/String;)V" since="3" />
+		<method name="supportMultipleWindows()Z" />
+		<method name="supportZoom()Z" />
+		<field name="FORCE_DARK_AUTO" since="29" />
+		<field name="FORCE_DARK_OFF" since="29" />
+		<field name="FORCE_DARK_ON" since="29" />
+		<field name="LOAD_CACHE_ELSE_NETWORK" />
+		<field name="LOAD_CACHE_ONLY" />
+		<field name="LOAD_DEFAULT" />
+		<field name="LOAD_NORMAL" deprecated="17" />
+		<field name="LOAD_NO_CACHE" />
+		<field name="MENU_ITEM_NONE" since="24" />
+		<field name="MENU_ITEM_PROCESS_TEXT" since="24" />
+		<field name="MENU_ITEM_SHARE" since="24" />
+		<field name="MENU_ITEM_WEB_SEARCH" since="24" />
+		<field name="MIXED_CONTENT_ALWAYS_ALLOW" since="21" />
+		<field name="MIXED_CONTENT_COMPATIBILITY_MODE" since="21" />
+		<field name="MIXED_CONTENT_NEVER_ALLOW" since="21" />
+	</class>
+	<class name="android/webkit/WebSettings$LayoutAlgorithm" since="1" deprecated="12">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$LayoutAlgorithm;" />
+		<method name="values()[Landroid/webkit/WebSettings$LayoutAlgorithm;" />
+		<field name="NARROW_COLUMNS" deprecated="29" />
+		<field name="NORMAL" />
+		<field name="SINGLE_COLUMN" deprecated="29" />
+		<field name="TEXT_AUTOSIZING" since="19" />
+	</class>
+	<class name="android/webkit/WebSettings$PluginState" since="8">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$PluginState;" />
+		<method name="values()[Landroid/webkit/WebSettings$PluginState;" />
+		<field name="OFF" />
+		<field name="ON" />
+		<field name="ON_DEMAND" />
+	</class>
+	<class name="android/webkit/WebSettings$RenderPriority" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$RenderPriority;" />
+		<method name="values()[Landroid/webkit/WebSettings$RenderPriority;" />
+		<field name="HIGH" />
+		<field name="LOW" />
+		<field name="NORMAL" />
+	</class>
+	<class name="android/webkit/WebSettings$TextSize" since="1" deprecated="15">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$TextSize;" />
+		<method name="values()[Landroid/webkit/WebSettings$TextSize;" />
+		<field name="LARGER" deprecated="29" />
+		<field name="LARGEST" deprecated="29" />
+		<field name="NORMAL" deprecated="29" />
+		<field name="SMALLER" deprecated="29" />
+		<field name="SMALLEST" deprecated="29" />
+	</class>
+	<class name="android/webkit/WebSettings$ZoomDensity" since="7">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$ZoomDensity;" />
+		<method name="values()[Landroid/webkit/WebSettings$ZoomDensity;" />
+		<field name="CLOSE" />
+		<field name="FAR" />
+		<field name="MEDIUM" />
+	</class>
+	<class name="android/webkit/WebStorage" since="5">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="16" />
+		<method name="deleteAllData()V" since="7" />
+		<method name="deleteOrigin(Ljava/lang/String;)V" since="7" />
+		<method name="getInstance()Landroid/webkit/WebStorage;" since="7" />
+		<method name="getOrigins(Landroid/webkit/ValueCallback;)V" since="7" />
+		<method name="getQuotaForOrigin(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7" />
+		<method name="getUsageForOrigin(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7" />
+		<method name="setQuotaForOrigin(Ljava/lang/String;J)V" since="7" deprecated="18" />
+	</class>
+	<class name="android/webkit/WebStorage$Origin" since="11">
+		<extends name="java/lang/Object" />
+		<method name="getOrigin()Ljava/lang/String;" />
+		<method name="getQuota()J" />
+		<method name="getUsage()J" />
+	</class>
+	<class name="android/webkit/WebStorage$QuotaUpdater" since="5" deprecated="19">
+		<extends name="java/lang/Object" />
+		<method name="updateQuota(J)V" deprecated="29" />
+	</class>
+	<class name="android/webkit/WebView" since="1">
+		<extends name="android/widget/AbsoluteLayout" />
+		<implements name="android/view/ViewGroup$OnHierarchyChangeListener" />
+		<implements name="android/view/ViewTreeObserver$OnGlobalFocusChangeListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;IZ)V" since="11" deprecated="17" />
+		<method name="addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V" />
+		<method name="canGoBack()Z" />
+		<method name="canGoBackOrForward(I)Z" />
+		<method name="canGoForward()Z" />
+		<method name="canZoomIn()Z" since="11" deprecated="17" />
+		<method name="canZoomOut()Z" since="11" deprecated="17" />
+		<method name="capturePicture()Landroid/graphics/Picture;" deprecated="19" />
+		<method name="clearCache(Z)V" />
+		<method name="clearClientCertPreferences(Ljava/lang/Runnable;)V" since="21" />
+		<method name="clearFormData()V" />
+		<method name="clearHistory()V" />
+		<method name="clearMatches()V" since="3" />
+		<method name="clearSslPreferences()V" />
+		<method name="clearView()V" deprecated="18" />
+		<method name="copyBackForwardList()Landroid/webkit/WebBackForwardList;" />
+		<method name="createPrintDocumentAdapter()Landroid/print/PrintDocumentAdapter;" since="19" deprecated="21" />
+		<method name="createPrintDocumentAdapter(Ljava/lang/String;)Landroid/print/PrintDocumentAdapter;" since="21" />
+		<method name="createWebMessageChannel()[Landroid/webkit/WebMessagePort;" since="23" />
+		<method name="debugDump()V" deprecated="15" removed="17" />
+		<method name="destroy()V" />
+		<method name="disablePlatformNotifications()V" deprecated="15" removed="17" />
+		<method name="disableWebView()V" since="28" />
+		<method name="documentHasImages(Landroid/os/Message;)V" />
+		<method name="emulateShiftHeld()V" since="8" deprecated="15" removed="17" />
+		<method name="enablePlatformNotifications()V" deprecated="15" removed="17" />
+		<method name="enableSlowWholeDocumentDraw()V" since="21" />
+		<method name="evaluateJavascript(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="19" />
+		<method name="findAddress(Ljava/lang/String;)Ljava/lang/String;" deprecated="28" />
+		<method name="findAll(Ljava/lang/String;)I" since="3" deprecated="16" />
+		<method name="findAllAsync(Ljava/lang/String;)V" since="16" />
+		<method name="findNext(Z)V" since="3" />
+		<method name="flingScroll(II)V" />
+		<method name="freeMemory()V" since="7" deprecated="19" />
+		<method name="getCertificate()Landroid/net/http/SslCertificate;" />
+		<method name="getContentHeight()I" />
+		<method name="getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;" since="26" />
+		<method name="getFavicon()Landroid/graphics/Bitmap;" />
+		<method name="getHitTestResult()Landroid/webkit/WebView$HitTestResult;" />
+		<method name="getHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" deprecated="26" />
+		<method name="getOriginalUrl()Ljava/lang/String;" since="3" />
+		<method name="getPluginList()Landroid/webkit/PluginList;" removed="12" />
+		<method name="getProgress()I" />
+		<method name="getRendererPriorityWaivedWhenNotVisible()Z" since="26" />
+		<method name="getRendererRequestedPriority()I" since="26" />
+		<method name="getSafeBrowsingPrivacyPolicyUrl()Landroid/net/Uri;" since="27" />
+		<method name="getScale()F" deprecated="17" />
+		<method name="getSettings()Landroid/webkit/WebSettings;" />
+		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" since="27" />
+		<method name="getTitle()Ljava/lang/String;" />
+		<method name="getUrl()Ljava/lang/String;" />
+		<method name="getVisibleTitleHeight()I" since="11" deprecated="15" removed="17" />
+		<method name="getWebChromeClient()Landroid/webkit/WebChromeClient;" since="26" />
+		<method name="getWebViewClassLoader()Ljava/lang/ClassLoader;" since="28" />
+		<method name="getWebViewClient()Landroid/webkit/WebViewClient;" since="26" />
+		<method name="getWebViewLooper()Landroid/os/Looper;" since="28" />
+		<method name="getWebViewRenderProcess()Landroid/webkit/WebViewRenderProcess;" since="29" />
+		<method name="getWebViewRenderProcessClient()Landroid/webkit/WebViewRenderProcessClient;" since="29" />
+		<method name="getZoomControls()Landroid/view/View;" deprecated="15" removed="16" />
+		<method name="goBack()V" />
+		<method name="goBackOrForward(I)V" />
+		<method name="goForward()V" />
+		<method name="invokeZoomPicker()V" />
+		<method name="isPrivateBrowsingEnabled()Z" since="11" />
+		<method name="loadData(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="loadUrl(Ljava/lang/String;)V" />
+		<method name="loadUrl(Ljava/lang/String;Ljava/util/Map;)V" since="8" />
+		<method name="onPause()V" since="11" />
+		<method name="onResume()V" since="11" />
+		<method name="overlayHorizontalScrollbar()Z" deprecated="23" />
+		<method name="overlayVerticalScrollbar()Z" deprecated="23" />
+		<method name="pageDown(Z)Z" />
+		<method name="pageUp(Z)Z" />
+		<method name="pauseTimers()V" />
+		<method name="postUrl(Ljava/lang/String;[B)V" since="5" />
+		<method name="postVisualStateCallback(JLandroid/webkit/WebView$VisualStateCallback;)V" since="23" />
+		<method name="postWebMessage(Landroid/webkit/WebMessage;Landroid/net/Uri;)V" since="23" />
+		<method name="refreshPlugins(Z)V" removed="12" />
+		<method name="reload()V" />
+		<method name="removeJavascriptInterface(Ljava/lang/String;)V" since="11" />
+		<method name="requestFocusNodeHref(Landroid/os/Message;)V" />
+		<method name="requestImageRef(Landroid/os/Message;)V" />
+		<method name="restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="15" removed="17" />
+		<method name="restoreState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;" />
+		<method name="resumeTimers()V" />
+		<method name="savePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="18" />
+		<method name="savePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="15" removed="17" />
+		<method name="saveState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;" />
+		<method name="saveWebArchive(Ljava/lang/String;)V" since="11" />
+		<method name="saveWebArchive(Ljava/lang/String;ZLandroid/webkit/ValueCallback;)V" since="11" />
+		<method name="setCertificate(Landroid/net/http/SslCertificate;)V" deprecated="17" />
+		<method name="setDataDirectorySuffix(Ljava/lang/String;)V" since="28" />
+		<method name="setDownloadListener(Landroid/webkit/DownloadListener;)V" />
+		<method name="setFindListener(Landroid/webkit/WebView$FindListener;)V" since="16" />
+		<method name="setHorizontalScrollbarOverlay(Z)V" deprecated="23" />
+		<method name="setHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="26" />
+		<method name="setInitialScale(I)V" />
+		<method name="setMapTrackballToArrowKeys(Z)V" deprecated="17" />
+		<method name="setNetworkAvailable(Z)V" since="3" />
+		<method name="setPictureListener(Landroid/webkit/WebView$PictureListener;)V" deprecated="15" />
+		<method name="setRendererPriorityPolicy(IZ)V" since="26" />
+		<method name="setSafeBrowsingWhitelist(Ljava/util/List;Landroid/webkit/ValueCallback;)V" since="27" />
+		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="27" />
+		<method name="setVerticalScrollbarOverlay(Z)V" deprecated="23" />
+		<method name="setWebChromeClient(Landroid/webkit/WebChromeClient;)V" />
+		<method name="setWebContentsDebuggingEnabled(Z)V" since="19" />
+		<method name="setWebViewClient(Landroid/webkit/WebViewClient;)V" />
+		<method name="setWebViewRenderProcessClient(Landroid/webkit/WebViewRenderProcessClient;)V" since="29" />
+		<method name="setWebViewRenderProcessClient(Ljava/util/concurrent/Executor;Landroid/webkit/WebViewRenderProcessClient;)V" since="29" />
+		<method name="showFindDialog(Ljava/lang/String;Z)Z" since="11" deprecated="18" />
+		<method name="startSafeBrowsing(Landroid/content/Context;Landroid/webkit/ValueCallback;)V" since="27" />
+		<method name="stopLoading()V" />
+		<method name="zoomBy(F)V" since="21" />
+		<method name="zoomIn()Z" />
+		<method name="zoomOut()Z" />
+		<field name="RENDERER_PRIORITY_BOUND" since="26" />
+		<field name="RENDERER_PRIORITY_IMPORTANT" since="26" />
+		<field name="RENDERER_PRIORITY_WAIVED" since="26" />
+		<field name="SCHEME_GEO" />
+		<field name="SCHEME_MAILTO" />
+		<field name="SCHEME_TEL" />
+	</class>
+	<class name="android/webkit/WebView$FindListener" since="16">
+		<extends name="java/lang/Object" />
+		<method name="onFindResultReceived(IIZ)V" />
+	</class>
+	<class name="android/webkit/WebView$HitTestResult" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getExtra()Ljava/lang/String;" />
+		<method name="getType()I" />
+		<field name="ANCHOR_TYPE" deprecated="15" />
+		<field name="EDIT_TEXT_TYPE" />
+		<field name="EMAIL_TYPE" />
+		<field name="GEO_TYPE" />
+		<field name="IMAGE_ANCHOR_TYPE" deprecated="15" />
+		<field name="IMAGE_TYPE" />
+		<field name="PHONE_TYPE" />
+		<field name="SRC_ANCHOR_TYPE" />
+		<field name="SRC_IMAGE_ANCHOR_TYPE" />
+		<field name="UNKNOWN_TYPE" />
+	</class>
+	<class name="android/webkit/WebView$PictureListener" since="1" deprecated="12">
+		<extends name="java/lang/Object" />
+		<method name="onNewPicture(Landroid/webkit/WebView;Landroid/graphics/Picture;)V" deprecated="15" />
+	</class>
+	<class name="android/webkit/WebView$VisualStateCallback" since="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onComplete(J)V" />
+	</class>
+	<class name="android/webkit/WebView$WebViewTransport" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/webkit/WebView;)V" />
+		<method name="getWebView()Landroid/webkit/WebView;" />
+		<method name="setWebView(Landroid/webkit/WebView;)V" />
+	</class>
+	<class name="android/webkit/WebViewClient" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="doUpdateVisitedHistory(Landroid/webkit/WebView;Ljava/lang/String;Z)V" />
+		<method name="onFormResubmission(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V" />
+		<method name="onLoadResource(Landroid/webkit/WebView;Ljava/lang/String;)V" />
+		<method name="onPageCommitVisible(Landroid/webkit/WebView;Ljava/lang/String;)V" since="23" />
+		<method name="onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V" />
+		<method name="onPageStarted(Landroid/webkit/WebView;Ljava/lang/String;Landroid/graphics/Bitmap;)V" />
+		<method name="onReceivedClientCertRequest(Landroid/webkit/WebView;Landroid/webkit/ClientCertRequest;)V" since="21" />
+		<method name="onReceivedError(Landroid/webkit/WebView;ILjava/lang/String;Ljava/lang/String;)V" deprecated="23" />
+		<method name="onReceivedError(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceError;)V" since="23" />
+		<method name="onReceivedHttpAuthRequest(Landroid/webkit/WebView;Landroid/webkit/HttpAuthHandler;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="onReceivedHttpError(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceResponse;)V" since="23" />
+		<method name="onReceivedLoginRequest(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="12" />
+		<method name="onReceivedSslError(Landroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V" since="8" />
+		<method name="onRenderProcessGone(Landroid/webkit/WebView;Landroid/webkit/RenderProcessGoneDetail;)Z" since="26" />
+		<method name="onSafeBrowsingHit(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;ILandroid/webkit/SafeBrowsingResponse;)V" since="27" />
+		<method name="onScaleChanged(Landroid/webkit/WebView;FF)V" />
+		<method name="onTooManyRedirects(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V" deprecated="15" />
+		<method name="onUnhandledInputEvent(Landroid/webkit/WebView;Landroid/view/InputEvent;)V" since="21" removed="24" />
+		<method name="onUnhandledKeyEvent(Landroid/webkit/WebView;Landroid/view/KeyEvent;)V" deprecated="21" />
+		<method name="shouldInterceptRequest(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;" since="21" />
+		<method name="shouldInterceptRequest(Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;" since="11" deprecated="21" />
+		<method name="shouldOverrideKeyEvent(Landroid/webkit/WebView;Landroid/view/KeyEvent;)Z" />
+		<method name="shouldOverrideUrlLoading(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Z" since="24" />
+		<method name="shouldOverrideUrlLoading(Landroid/webkit/WebView;Ljava/lang/String;)Z" deprecated="24" />
+		<field name="ERROR_AUTHENTICATION" since="5" />
+		<field name="ERROR_BAD_URL" since="5" />
+		<field name="ERROR_CONNECT" since="5" />
+		<field name="ERROR_FAILED_SSL_HANDSHAKE" since="5" />
+		<field name="ERROR_FILE" since="5" />
+		<field name="ERROR_FILE_NOT_FOUND" since="5" />
+		<field name="ERROR_HOST_LOOKUP" since="5" />
+		<field name="ERROR_IO" since="5" />
+		<field name="ERROR_PROXY_AUTHENTICATION" since="5" />
+		<field name="ERROR_REDIRECT_LOOP" since="5" />
+		<field name="ERROR_TIMEOUT" since="5" />
+		<field name="ERROR_TOO_MANY_REQUESTS" since="5" />
+		<field name="ERROR_UNKNOWN" since="5" />
+		<field name="ERROR_UNSAFE_RESOURCE" since="26" />
+		<field name="ERROR_UNSUPPORTED_AUTH_SCHEME" since="5" />
+		<field name="ERROR_UNSUPPORTED_SCHEME" since="5" />
+		<field name="SAFE_BROWSING_THREAT_BILLING" since="29" />
+		<field name="SAFE_BROWSING_THREAT_MALWARE" since="27" />
+		<field name="SAFE_BROWSING_THREAT_PHISHING" since="27" />
+		<field name="SAFE_BROWSING_THREAT_UNKNOWN" since="27" />
+		<field name="SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE" since="27" />
+	</class>
+	<class name="android/webkit/WebViewDatabase" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" since="22" deprecated="29" />
+		<method name="clearFormData()V" deprecated="26" />
+		<method name="clearHttpAuthUsernamePassword()V" />
+		<method name="clearUsernamePassword()V" deprecated="18" />
+		<method name="getHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" since="26" />
+		<method name="getInstance(Landroid/content/Context;)Landroid/webkit/WebViewDatabase;" />
+		<method name="hasFormData()Z" deprecated="26" />
+		<method name="hasHttpAuthUsernamePassword()Z" />
+		<method name="hasUsernamePassword()Z" deprecated="18" />
+		<method name="setHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="26" />
+		<field name="LOGTAG" removed="17" />
+	</class>
+	<class name="android/webkit/WebViewFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="getWebView()Landroid/webkit/WebView;" deprecated="29" />
+	</class>
+	<class name="android/webkit/WebViewRenderProcess" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="terminate()Z" />
+	</class>
+	<class name="android/webkit/WebViewRenderProcessClient" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onRenderProcessResponsive(Landroid/webkit/WebView;Landroid/webkit/WebViewRenderProcess;)V" />
+		<method name="onRenderProcessUnresponsive(Landroid/webkit/WebView;Landroid/webkit/WebViewRenderProcess;)V" />
+	</class>
+	<class name="android/widget/AbsListView" since="1">
+		<extends name="android/widget/AdapterView" />
+		<implements name="android/text/TextWatcher" />
+		<implements name="android/view/ViewTreeObserver$OnGlobalLayoutListener" />
+		<implements name="android/view/ViewTreeObserver$OnTouchModeChangeListener" />
+		<implements name="android/widget/Filter$FilterListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="canScrollList(I)Z" since="19" />
+		<method name="clearChoices()V" since="11" />
+		<method name="clearTextFilter()V" />
+		<method name="deferNotifyDataSetChanged()V" since="14" />
+		<method name="fling(I)V" since="21" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/AbsListView$LayoutParams;" />
+		<method name="getBottomEdgeEffectColor()I" since="29" />
+		<method name="getCacheColorHint()I" />
+		<method name="getCheckedItemCount()I" since="11" />
+		<method name="getCheckedItemIds()[J" since="11" />
+		<method name="getCheckedItemPosition()I" since="11" />
+		<method name="getCheckedItemPositions()Landroid/util/SparseBooleanArray;" since="11" />
+		<method name="getChoiceMode()I" since="11" />
+		<method name="getListPaddingBottom()I" />
+		<method name="getListPaddingLeft()I" />
+		<method name="getListPaddingRight()I" />
+		<method name="getListPaddingTop()I" />
+		<method name="getSelector()Landroid/graphics/drawable/Drawable;" />
+		<method name="getTextFilter()Ljava/lang/CharSequence;" since="3" />
+		<method name="getTopEdgeEffectColor()I" since="29" />
+		<method name="getTranscriptMode()I" />
+		<method name="handleDataChanged()V" />
+		<method name="hasTextFilter()Z" />
+		<method name="invalidateViews()V" />
+		<method name="isDrawSelectorOnTop()Z" since="29" />
+		<method name="isFastScrollAlwaysVisible()Z" since="11" />
+		<method name="isFastScrollEnabled()Z" since="3" />
+		<method name="isInFilterMode()Z" />
+		<method name="isItemChecked(I)Z" since="11" />
+		<method name="isScrollingCacheEnabled()Z" />
+		<method name="isSmoothScrollbarEnabled()Z" since="3" />
+		<method name="isStackFromBottom()Z" />
+		<method name="isTextFilterEnabled()Z" />
+		<method name="layoutChildren()V" />
+		<method name="onInitializeAccessibilityNodeInfoForItem(Landroid/view/View;ILandroid/view/accessibility/AccessibilityNodeInfo;)V" since="19" />
+		<method name="onRemoteAdapterConnected()Z" since="11" />
+		<method name="onRemoteAdapterDisconnected()V" since="11" />
+		<method name="pointToPosition(II)I" />
+		<method name="pointToRowId(II)J" />
+		<method name="reclaimViews(Ljava/util/List;)V" />
+		<method name="scrollListBy(I)V" since="19" />
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V" since="11" />
+		<method name="setBottomEdgeEffectColor(I)V" since="29" />
+		<method name="setCacheColorHint(I)V" />
+		<method name="setChoiceMode(I)V" since="11" />
+		<method name="setDrawSelectorOnTop(Z)V" />
+		<method name="setEdgeEffectColor(I)V" since="29" />
+		<method name="setFastScrollAlwaysVisible(Z)V" since="11" />
+		<method name="setFastScrollEnabled(Z)V" since="3" />
+		<method name="setFastScrollStyle(I)V" since="21" />
+		<method name="setFilterText(Ljava/lang/String;)V" />
+		<method name="setFriction(F)V" since="11" />
+		<method name="setItemChecked(IZ)V" since="11" />
+		<method name="setMultiChoiceModeListener(Landroid/widget/AbsListView$MultiChoiceModeListener;)V" since="11" />
+		<method name="setOnScrollListener(Landroid/widget/AbsListView$OnScrollListener;)V" />
+		<method name="setRecyclerListener(Landroid/widget/AbsListView$RecyclerListener;)V" />
+		<method name="setRemoteViewsAdapter(Landroid/content/Intent;)V" since="11" />
+		<method name="setScrollIndicators(Landroid/view/View;Landroid/view/View;)V" />
+		<method name="setScrollingCacheEnabled(Z)V" />
+		<method name="setSelectionFromTop(II)V" since="21" />
+		<method name="setSelector(I)V" />
+		<method name="setSelector(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setSmoothScrollbarEnabled(Z)V" since="3" />
+		<method name="setStackFromBottom(Z)V" />
+		<method name="setTextFilterEnabled(Z)V" />
+		<method name="setTopEdgeEffectColor(I)V" since="29" />
+		<method name="setTranscriptMode(I)V" />
+		<method name="setVelocityScale(F)V" since="11" />
+		<method name="smoothScrollBy(II)V" since="8" />
+		<method name="smoothScrollToPosition(I)V" since="8" />
+		<method name="smoothScrollToPosition(II)V" since="8" />
+		<method name="smoothScrollToPositionFromTop(II)V" since="11" />
+		<method name="smoothScrollToPositionFromTop(III)V" since="11" />
+		<field name="CHOICE_MODE_MULTIPLE" since="11" />
+		<field name="CHOICE_MODE_MULTIPLE_MODAL" since="11" />
+		<field name="CHOICE_MODE_NONE" since="11" />
+		<field name="CHOICE_MODE_SINGLE" since="11" />
+		<field name="TRANSCRIPT_MODE_ALWAYS_SCROLL" />
+		<field name="TRANSCRIPT_MODE_DISABLED" />
+		<field name="TRANSCRIPT_MODE_NORMAL" />
+	</class>
+	<class name="android/widget/AbsListView$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$LayoutParams" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+	</class>
+	<class name="android/widget/AbsListView$MultiChoiceModeListener" since="11">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/ActionMode$Callback" />
+		<method name="onItemCheckedStateChanged(Landroid/view/ActionMode;IJZ)V" />
+	</class>
+	<class name="android/widget/AbsListView$OnScrollListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onScroll(Landroid/widget/AbsListView;III)V" />
+		<method name="onScrollStateChanged(Landroid/widget/AbsListView;I)V" />
+		<field name="SCROLL_STATE_FLING" />
+		<field name="SCROLL_STATE_IDLE" />
+		<field name="SCROLL_STATE_TOUCH_SCROLL" />
+	</class>
+	<class name="android/widget/AbsListView$RecyclerListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onMovedToScrapHeap(Landroid/view/View;)V" />
+	</class>
+	<class name="android/widget/AbsListView$SelectionBoundsAdjuster" since="11">
+		<extends name="java/lang/Object" />
+		<method name="adjustListItemSelectionBounds(Landroid/graphics/Rect;)V" />
+	</class>
+	<class name="android/widget/AbsSeekBar" since="1">
+		<extends name="android/widget/ProgressBar" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getKeyProgressIncrement()I" since="3" />
+		<method name="getSplitTrack()Z" since="21" />
+		<method name="getThumb()Landroid/graphics/drawable/Drawable;" since="16" />
+		<method name="getThumbOffset()I" />
+		<method name="getThumbTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="getTickMark()Landroid/graphics/drawable/Drawable;" since="24" />
+		<method name="getTickMarkTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getTickMarkTintList()Landroid/content/res/ColorStateList;" since="24" />
+		<method name="getTickMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="24" />
+		<method name="setKeyProgressIncrement(I)V" since="3" />
+		<method name="setSplitTrack(Z)V" since="21" />
+		<method name="setThumb(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setThumbOffset(I)V" />
+		<method name="setThumbTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setTickMark(Landroid/graphics/drawable/Drawable;)V" since="24" />
+		<method name="setTickMarkTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setTickMarkTintList(Landroid/content/res/ColorStateList;)V" since="24" />
+		<method name="setTickMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="24" />
+	</class>
+	<class name="android/widget/AbsSpinner" since="1">
+		<extends name="android/widget/AdapterView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getAdapter()Landroid/widget/SpinnerAdapter;" />
+		<method name="pointToPosition(II)I" />
+		<method name="setAdapter(Landroid/widget/SpinnerAdapter;)V" />
+		<method name="setSelection(IZ)V" />
+	</class>
+	<class name="android/widget/AbsoluteLayout" since="1" deprecated="3">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+	</class>
+	<class name="android/widget/AbsoluteLayout$LayoutParams" since="1" deprecated="29">
+		<extends name="android/view/ViewGroup$LayoutParams" />
+		<method name="&lt;init&gt;(IIII)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" deprecated="29" />
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;" deprecated="29" />
+		<field name="x" deprecated="29" />
+		<field name="y" deprecated="29" />
+	</class>
+	<class name="android/widget/ActionMenuView" since="21">
+		<extends name="android/widget/LinearLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="dismissPopupMenus()V" />
+		<method name="generateDefaultLayoutParams()Landroid/widget/ActionMenuView$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/ActionMenuView$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/ActionMenuView$LayoutParams;" />
+		<method name="getMenu()Landroid/view/Menu;" />
+		<method name="getOverflowIcon()Landroid/graphics/drawable/Drawable;" since="23" />
+		<method name="getPopupTheme()I" />
+		<method name="hideOverflowMenu()Z" />
+		<method name="isOverflowMenuShowing()Z" />
+		<method name="setOnMenuItemClickListener(Landroid/widget/ActionMenuView$OnMenuItemClickListener;)V" />
+		<method name="setOverflowIcon(Landroid/graphics/drawable/Drawable;)V" since="23" />
+		<method name="setPopupTheme(I)V" />
+		<method name="showOverflowMenu()Z" />
+	</class>
+	<class name="android/widget/ActionMenuView$LayoutParams" since="21">
+		<extends name="android/widget/LinearLayout$LayoutParams" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/ActionMenuView$LayoutParams;)V" />
+	</class>
+	<class name="android/widget/ActionMenuView$OnMenuItemClickListener" since="21">
+		<extends name="java/lang/Object" />
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z" />
+	</class>
+	<class name="android/widget/Adapter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getAutofillOptions()[Ljava/lang/CharSequence;" since="26" />
+		<method name="getCount()I" />
+		<method name="getItem(I)Ljava/lang/Object;" />
+		<method name="getItemId(I)J" />
+		<method name="getItemViewType(I)I" />
+		<method name="getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="getViewTypeCount()I" />
+		<method name="hasStableIds()Z" />
+		<method name="isEmpty()Z" />
+		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V" />
+		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V" />
+		<field name="IGNORE_ITEM_VIEW_TYPE" />
+		<field name="NO_SELECTION" />
+	</class>
+	<class name="android/widget/AdapterView" since="1">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getAdapter()Landroid/widget/Adapter;" />
+		<method name="getCount()I" />
+		<method name="getEmptyView()Landroid/view/View;" />
+		<method name="getFirstVisiblePosition()I" />
+		<method name="getItemAtPosition(I)Ljava/lang/Object;" />
+		<method name="getItemIdAtPosition(I)J" />
+		<method name="getLastVisiblePosition()I" />
+		<method name="getOnItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" />
+		<method name="getOnItemLongClickListener()Landroid/widget/AdapterView$OnItemLongClickListener;" />
+		<method name="getOnItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" />
+		<method name="getPositionForView(Landroid/view/View;)I" />
+		<method name="getSelectedItem()Ljava/lang/Object;" />
+		<method name="getSelectedItemId()J" />
+		<method name="getSelectedItemPosition()I" />
+		<method name="getSelectedView()Landroid/view/View;" />
+		<method name="performItemClick(Landroid/view/View;IJ)Z" />
+		<method name="setAdapter(Landroid/widget/Adapter;)V" />
+		<method name="setEmptyView(Landroid/view/View;)V" />
+		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V" />
+		<method name="setOnItemLongClickListener(Landroid/widget/AdapterView$OnItemLongClickListener;)V" />
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V" />
+		<method name="setSelection(I)V" />
+		<field name="INVALID_POSITION" />
+		<field name="INVALID_ROW_ID" />
+		<field name="ITEM_VIEW_TYPE_HEADER_OR_FOOTER" />
+		<field name="ITEM_VIEW_TYPE_IGNORE" />
+	</class>
+	<class name="android/widget/AdapterView$AdapterContextMenuInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/ContextMenu$ContextMenuInfo" />
+		<method name="&lt;init&gt;(Landroid/view/View;IJ)V" />
+		<field name="id" />
+		<field name="position" />
+		<field name="targetView" />
+	</class>
+	<class name="android/widget/AdapterView$OnItemClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V" />
+	</class>
+	<class name="android/widget/AdapterView$OnItemLongClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onItemLongClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)Z" />
+	</class>
+	<class name="android/widget/AdapterView$OnItemSelectedListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V" />
+		<method name="onNothingSelected(Landroid/widget/AdapterView;)V" />
+	</class>
+	<class name="android/widget/AdapterViewAnimator" since="11">
+		<extends name="android/widget/AdapterView" />
+		<implements name="android/widget/Advanceable" since="16" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="14" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="advance()V" />
+		<method name="deferNotifyDataSetChanged()V" since="14" />
+		<method name="fyiWillBeAdvancedByHostKThx()V" />
+		<method name="getCurrentView()Landroid/view/View;" />
+		<method name="getDisplayedChild()I" />
+		<method name="getInAnimation()Landroid/animation/ObjectAnimator;" />
+		<method name="getOutAnimation()Landroid/animation/ObjectAnimator;" />
+		<method name="onRemoteAdapterConnected()Z" />
+		<method name="onRemoteAdapterDisconnected()V" />
+		<method name="setAnimateFirstView(Z)V" />
+		<method name="setDisplayedChild(I)V" />
+		<method name="setInAnimation(Landroid/animation/ObjectAnimator;)V" />
+		<method name="setInAnimation(Landroid/content/Context;I)V" />
+		<method name="setOutAnimation(Landroid/animation/ObjectAnimator;)V" />
+		<method name="setOutAnimation(Landroid/content/Context;I)V" />
+		<method name="setRemoteViewsAdapter(Landroid/content/Intent;)V" />
+		<method name="showNext()V" />
+		<method name="showPrevious()V" />
+	</class>
+	<class name="android/widget/AdapterViewFlipper" since="11">
+		<extends name="android/widget/AdapterViewAnimator" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getFlipInterval()I" since="16" />
+		<method name="isAutoStart()Z" />
+		<method name="isFlipping()Z" />
+		<method name="setAutoStart(Z)V" />
+		<method name="setFlipInterval(I)V" />
+		<method name="startFlipping()V" />
+		<method name="stopFlipping()V" />
+	</class>
+	<class name="android/widget/Advanceable" since="16">
+		<extends name="java/lang/Object" />
+		<method name="advance()V" />
+		<method name="fyiWillBeAdvancedByHostKThx()V" />
+	</class>
+	<class name="android/widget/AlphabetIndexer" since="3">
+		<extends name="android/database/DataSetObserver" />
+		<implements name="android/widget/SectionIndexer" />
+		<method name="&lt;init&gt;(Landroid/database/Cursor;ILjava/lang/CharSequence;)V" />
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="setCursor(Landroid/database/Cursor;)V" />
+		<field name="mAlphabet" />
+		<field name="mColumnIndex" />
+		<field name="mDataCursor" />
+	</class>
+	<class name="android/widget/AnalogClock" since="1" deprecated="23">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getDialTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31" />
+		<method name="getDialTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31" />
+		<method name="getHourHandTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31" />
+		<method name="getHourHandTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31" />
+		<method name="getMinuteHandTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31" />
+		<method name="getMinuteHandTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31" />
+		<method name="getSecondHandTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31" />
+		<method name="getSecondHandTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31" />
+		<method name="getTimeZone()Ljava/lang/String;" since="31" deprecated="31" />
+		<method name="setDial(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31" />
+		<method name="setDialTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31" />
+		<method name="setDialTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31" />
+		<method name="setHourHand(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31" />
+		<method name="setHourHandTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31" />
+		<method name="setHourHandTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31" />
+		<method name="setMinuteHand(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31" />
+		<method name="setMinuteHandTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31" />
+		<method name="setMinuteHandTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31" />
+		<method name="setSecondHand(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31" />
+		<method name="setSecondHandTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31" />
+		<method name="setSecondHandTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31" />
+		<method name="setTimeZone(Ljava/lang/String;)V" since="31" deprecated="31" />
+	</class>
+	<class name="android/widget/ArrayAdapter" since="1">
+		<extends name="android/widget/BaseAdapter" />
+		<implements name="android/widget/Filterable" />
+		<implements name="android/widget/ThemedSpinnerAdapter" since="23" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;IILjava/util/List;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;II[Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILjava/util/List;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I[Ljava/lang/Object;)V" />
+		<method name="add(Ljava/lang/Object;)V" />
+		<method name="addAll(Ljava/util/Collection;)V" since="11" />
+		<method name="addAll([Ljava/lang/Object;)V" since="11" />
+		<method name="clear()V" />
+		<method name="createFromResource(Landroid/content/Context;II)Landroid/widget/ArrayAdapter;" />
+		<method name="getContext()Landroid/content/Context;" />
+		<method name="getPosition(Ljava/lang/Object;)I" />
+		<method name="insert(Ljava/lang/Object;I)V" />
+		<method name="remove(Ljava/lang/Object;)V" />
+		<method name="setDropDownViewResource(I)V" />
+		<method name="setNotifyOnChange(Z)V" />
+		<method name="sort(Ljava/util/Comparator;)V" since="3" />
+	</class>
+	<class name="android/widget/AutoCompleteTextView" since="1">
+		<extends name="android/widget/EditText" />
+		<implements name="android/widget/Filter$FilterListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V" since="24" />
+		<method name="clearListSelection()V" since="3" />
+		<method name="convertSelectionToString(Ljava/lang/Object;)Ljava/lang/CharSequence;" />
+		<method name="dismissDropDown()V" />
+		<method name="enoughToFilter()Z" />
+		<method name="getAdapter()Landroid/widget/ListAdapter;" />
+		<method name="getCompletionHint()Ljava/lang/CharSequence;" since="16" />
+		<method name="getDropDownAnchor()I" since="3" />
+		<method name="getDropDownBackground()Landroid/graphics/drawable/Drawable;" since="5" />
+		<method name="getDropDownHeight()I" since="4" />
+		<method name="getDropDownHorizontalOffset()I" since="5" />
+		<method name="getDropDownVerticalOffset()I" since="5" />
+		<method name="getDropDownWidth()I" since="3" />
+		<method name="getFilter()Landroid/widget/Filter;" />
+		<method name="getInputMethodMode()I" since="29" />
+		<method name="getItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" deprecated="15" />
+		<method name="getItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" deprecated="15" />
+		<method name="getListSelection()I" since="3" />
+		<method name="getOnItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" since="3" />
+		<method name="getOnItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" since="3" />
+		<method name="getThreshold()I" />
+		<method name="getValidator()Landroid/widget/AutoCompleteTextView$Validator;" />
+		<method name="isPerformingCompletion()Z" since="3" />
+		<method name="isPopupShowing()Z" />
+		<method name="performCompletion()V" />
+		<method name="performFiltering(Ljava/lang/CharSequence;I)V" />
+		<method name="performValidation()V" />
+		<method name="refreshAutoCompleteResults()V" since="29" />
+		<method name="replaceText(Ljava/lang/CharSequence;)V" />
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V" />
+		<method name="setCompletionHint(Ljava/lang/CharSequence;)V" />
+		<method name="setDropDownAnchor(I)V" since="3" />
+		<method name="setDropDownBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="5" />
+		<method name="setDropDownBackgroundResource(I)V" since="5" />
+		<method name="setDropDownHeight(I)V" since="4" />
+		<method name="setDropDownHorizontalOffset(I)V" since="5" />
+		<method name="setDropDownVerticalOffset(I)V" since="5" />
+		<method name="setDropDownWidth(I)V" since="3" />
+		<method name="setInputMethodMode(I)V" since="29" />
+		<method name="setListSelection(I)V" since="3" />
+		<method name="setOnDismissListener(Landroid/widget/AutoCompleteTextView$OnDismissListener;)V" since="17" />
+		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V" />
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V" />
+		<method name="setText(Ljava/lang/CharSequence;Z)V" since="17" />
+		<method name="setThreshold(I)V" />
+		<method name="setValidator(Landroid/widget/AutoCompleteTextView$Validator;)V" />
+		<method name="showDropDown()V" />
+	</class>
+	<class name="android/widget/AutoCompleteTextView$OnDismissListener" since="17">
+		<extends name="java/lang/Object" />
+		<method name="onDismiss()V" />
+	</class>
+	<class name="android/widget/AutoCompleteTextView$Validator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="fixText(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+		<method name="isValid(Ljava/lang/CharSequence;)Z" />
+	</class>
+	<class name="android/widget/BaseAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/ListAdapter" />
+		<implements name="android/widget/SpinnerAdapter" />
+		<method name="&lt;init&gt;()V" />
+		<method name="notifyDataSetChanged()V" />
+		<method name="notifyDataSetInvalidated()V" />
+		<method name="setAutofillOptions([Ljava/lang/CharSequence;)V" since="27" />
+	</class>
+	<class name="android/widget/BaseExpandableListAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/ExpandableListAdapter" />
+		<implements name="android/widget/HeterogeneousExpandableList" since="8" />
+		<method name="&lt;init&gt;()V" />
+		<method name="notifyDataSetChanged()V" />
+		<method name="notifyDataSetInvalidated()V" />
+	</class>
+	<class name="android/widget/Button" since="1">
+		<extends name="android/widget/TextView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+	</class>
+	<class name="android/widget/CalendarView" since="11">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getDate()J" />
+		<method name="getDateTextAppearance()I" since="16" />
+		<method name="getFirstDayOfWeek()I" />
+		<method name="getFocusedMonthDateColor()I" since="16" deprecated="23" />
+		<method name="getMaxDate()J" />
+		<method name="getMinDate()J" />
+		<method name="getSelectedDateVerticalBar()Landroid/graphics/drawable/Drawable;" since="16" deprecated="23" />
+		<method name="getSelectedWeekBackgroundColor()I" since="16" deprecated="23" />
+		<method name="getShowWeekNumber()Z" deprecated="24" />
+		<method name="getShownWeekCount()I" since="16" deprecated="23" />
+		<method name="getUnfocusedMonthDateColor()I" since="16" deprecated="23" />
+		<method name="getWeekDayTextAppearance()I" since="16" />
+		<method name="getWeekNumberColor()I" since="16" deprecated="23" />
+		<method name="getWeekSeparatorLineColor()I" since="16" deprecated="23" />
+		<method name="setDate(J)V" />
+		<method name="setDate(JZZ)V" />
+		<method name="setDateTextAppearance(I)V" since="16" />
+		<method name="setFirstDayOfWeek(I)V" />
+		<method name="setFocusedMonthDateColor(I)V" since="16" deprecated="23" />
+		<method name="setMaxDate(J)V" />
+		<method name="setMinDate(J)V" />
+		<method name="setOnDateChangeListener(Landroid/widget/CalendarView$OnDateChangeListener;)V" />
+		<method name="setSelectedDateVerticalBar(I)V" since="16" deprecated="23" />
+		<method name="setSelectedDateVerticalBar(Landroid/graphics/drawable/Drawable;)V" since="16" deprecated="23" />
+		<method name="setSelectedWeekBackgroundColor(I)V" since="16" deprecated="23" />
+		<method name="setShowWeekNumber(Z)V" deprecated="24" />
+		<method name="setShownWeekCount(I)V" since="16" deprecated="23" />
+		<method name="setUnfocusedMonthDateColor(I)V" since="16" deprecated="23" />
+		<method name="setWeekDayTextAppearance(I)V" since="16" />
+		<method name="setWeekNumberColor(I)V" since="16" deprecated="23" />
+		<method name="setWeekSeparatorLineColor(I)V" since="16" deprecated="23" />
+	</class>
+	<class name="android/widget/CalendarView$OnDateChangeListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onSelectedDayChange(Landroid/widget/CalendarView;III)V" />
+	</class>
+	<class name="android/widget/CheckBox" since="1">
+		<extends name="android/widget/CompoundButton" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+	</class>
+	<class name="android/widget/Checkable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="isChecked()Z" />
+		<method name="setChecked(Z)V" />
+		<method name="toggle()V" />
+	</class>
+	<class name="android/widget/CheckedTextView" since="1">
+		<extends name="android/widget/TextView" />
+		<implements name="android/widget/Checkable" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getCheckMarkDrawable()Landroid/graphics/drawable/Drawable;" since="16" />
+		<method name="getCheckMarkTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getCheckMarkTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getCheckMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="onPaddingChanged(I)V" since="16" removed="17" />
+		<method name="setCheckMarkDrawable(I)V" />
+		<method name="setCheckMarkDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setCheckMarkTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setCheckMarkTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setCheckMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+	</class>
+	<class name="android/widget/Chronometer" since="1">
+		<extends name="android/widget/TextView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getBase()J" />
+		<method name="getFormat()Ljava/lang/String;" />
+		<method name="getOnChronometerTickListener()Landroid/widget/Chronometer$OnChronometerTickListener;" since="3" />
+		<method name="isCountDown()Z" since="24" />
+		<method name="isTheFinalCountDown()Z" since="26" />
+		<method name="setBase(J)V" />
+		<method name="setCountDown(Z)V" since="24" />
+		<method name="setFormat(Ljava/lang/String;)V" />
+		<method name="setOnChronometerTickListener(Landroid/widget/Chronometer$OnChronometerTickListener;)V" since="3" />
+		<method name="start()V" />
+		<method name="stop()V" />
+	</class>
+	<class name="android/widget/Chronometer$OnChronometerTickListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onChronometerTick(Landroid/widget/Chronometer;)V" />
+	</class>
+	<class name="android/widget/CompoundButton" since="1">
+		<extends name="android/widget/Button" />
+		<implements name="android/widget/Checkable" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getButtonDrawable()Landroid/graphics/drawable/Drawable;" since="23" />
+		<method name="getButtonTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getButtonTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getButtonTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="setButtonDrawable(I)V" />
+		<method name="setButtonDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setButtonIcon(Landroid/graphics/drawable/Icon;)V" since="31" />
+		<method name="setButtonTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setButtonTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setButtonTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setOnCheckedChangeListener(Landroid/widget/CompoundButton$OnCheckedChangeListener;)V" />
+	</class>
+	<class name="android/widget/CompoundButton$OnCheckedChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onCheckedChanged(Landroid/widget/CompoundButton;Z)V" />
+	</class>
+	<class name="android/widget/CursorAdapter" since="1">
+		<extends name="android/widget/BaseAdapter" />
+		<implements name="android/widget/Filterable" />
+		<implements name="android/widget/ThemedSpinnerAdapter" since="23" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;I)V" since="11" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;Z)V" />
+		<method name="bindView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;)V" />
+		<method name="changeCursor(Landroid/database/Cursor;)V" />
+		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;" />
+		<method name="getCursor()Landroid/database/Cursor;" />
+		<method name="getFilterQueryProvider()Landroid/widget/FilterQueryProvider;" />
+		<method name="init(Landroid/content/Context;Landroid/database/Cursor;Z)V" deprecated="15" />
+		<method name="newDropDownView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="newView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="onContentChanged()V" since="3" />
+		<method name="runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;" />
+		<method name="setFilterQueryProvider(Landroid/widget/FilterQueryProvider;)V" />
+		<method name="swapCursor(Landroid/database/Cursor;)Landroid/database/Cursor;" since="11" />
+		<field name="FLAG_AUTO_REQUERY" since="11" deprecated="15" />
+		<field name="FLAG_REGISTER_CONTENT_OBSERVER" since="11" />
+	</class>
+	<class name="android/widget/CursorTreeAdapter" since="1">
+		<extends name="android/widget/BaseExpandableListAdapter" />
+		<implements name="android/widget/Filterable" />
+		<method name="&lt;init&gt;(Landroid/database/Cursor;Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/database/Cursor;Landroid/content/Context;Z)V" />
+		<method name="bindChildView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;Z)V" />
+		<method name="bindGroupView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;Z)V" />
+		<method name="changeCursor(Landroid/database/Cursor;)V" />
+		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/String;" />
+		<method name="getChild(II)Landroid/database/Cursor;" />
+		<method name="getChildrenCursor(Landroid/database/Cursor;)Landroid/database/Cursor;" />
+		<method name="getCursor()Landroid/database/Cursor;" />
+		<method name="getFilterQueryProvider()Landroid/widget/FilterQueryProvider;" />
+		<method name="getGroup(I)Landroid/database/Cursor;" />
+		<method name="newChildView(Landroid/content/Context;Landroid/database/Cursor;ZLandroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="newGroupView(Landroid/content/Context;Landroid/database/Cursor;ZLandroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="notifyDataSetChanged(Z)V" />
+		<method name="runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;" />
+		<method name="setChildrenCursor(ILandroid/database/Cursor;)V" />
+		<method name="setFilterQueryProvider(Landroid/widget/FilterQueryProvider;)V" />
+		<method name="setGroupCursor(Landroid/database/Cursor;)V" />
+	</class>
+	<class name="android/widget/DatePicker" since="1">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getCalendarView()Landroid/widget/CalendarView;" since="12" deprecated="24" />
+		<method name="getCalendarViewShown()Z" since="11" deprecated="24" />
+		<method name="getDayOfMonth()I" />
+		<method name="getFirstDayOfWeek()I" since="21" />
+		<method name="getMaxDate()J" since="11" />
+		<method name="getMinDate()J" since="11" />
+		<method name="getMonth()I" />
+		<method name="getSpinnersShown()Z" since="11" deprecated="24" />
+		<method name="getYear()I" />
+		<method name="init(IIILandroid/widget/DatePicker$OnDateChangedListener;)V" />
+		<method name="setCalendarViewShown(Z)V" since="11" deprecated="24" />
+		<method name="setFirstDayOfWeek(I)V" since="21" />
+		<method name="setMaxDate(J)V" since="11" />
+		<method name="setMinDate(J)V" since="11" />
+		<method name="setOnDateChangedListener(Landroid/widget/DatePicker$OnDateChangedListener;)V" since="26" />
+		<method name="setSpinnersShown(Z)V" since="11" deprecated="24" />
+		<method name="updateDate(III)V" />
+	</class>
+	<class name="android/widget/DatePicker$OnDateChangedListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onDateChanged(Landroid/widget/DatePicker;III)V" />
+	</class>
+	<class name="android/widget/DialerFilter" since="1" deprecated="26">
+		<extends name="android/widget/RelativeLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="append(Ljava/lang/String;)V" deprecated="29" />
+		<method name="clearText()V" deprecated="29" />
+		<method name="getDigits()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getFilterText()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getLetters()Ljava/lang/CharSequence;" deprecated="29" />
+		<method name="getMode()I" deprecated="29" />
+		<method name="isQwertyKeyboard()Z" deprecated="29" />
+		<method name="onModeChange(II)V" deprecated="29" />
+		<method name="removeFilterWatcher(Landroid/text/TextWatcher;)V" deprecated="29" />
+		<method name="setDigitsWatcher(Landroid/text/TextWatcher;)V" deprecated="29" />
+		<method name="setFilterWatcher(Landroid/text/TextWatcher;)V" deprecated="29" />
+		<method name="setLettersWatcher(Landroid/text/TextWatcher;)V" deprecated="29" />
+		<method name="setMode(I)V" deprecated="29" />
+		<field name="DIGITS_AND_LETTERS" deprecated="29" />
+		<field name="DIGITS_AND_LETTERS_NO_DIGITS" deprecated="29" />
+		<field name="DIGITS_AND_LETTERS_NO_LETTERS" deprecated="29" />
+		<field name="DIGITS_ONLY" deprecated="29" />
+		<field name="LETTERS_ONLY" deprecated="29" />
+	</class>
+	<class name="android/widget/DigitalClock" since="1" deprecated="17">
+		<extends name="android/widget/TextView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+	</class>
+	<class name="android/widget/EdgeEffect" since="14">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="31" />
+		<method name="draw(Landroid/graphics/Canvas;)Z" />
+		<method name="finish()V" />
+		<method name="getBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getColor()I" since="21" />
+		<method name="getDistance()F" since="31" />
+		<method name="getMaxHeight()I" since="21" />
+		<method name="isFinished()Z" />
+		<method name="onAbsorb(I)V" />
+		<method name="onPull(F)V" />
+		<method name="onPull(FF)V" since="21" />
+		<method name="onPullDistance(FF)F" since="31" />
+		<method name="onRelease()V" />
+		<method name="setBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setColor(I)V" since="21" />
+		<method name="setSize(II)V" />
+		<field name="DEFAULT_BLEND_MODE" since="29" />
+	</class>
+	<class name="android/widget/EditText" since="1">
+		<extends name="android/widget/TextView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="extendSelection(I)V" />
+		<method name="getText()Landroid/text/Editable;" />
+		<method name="selectAll()V" />
+		<method name="setSelection(I)V" />
+		<method name="setSelection(II)V" />
+	</class>
+	<class name="android/widget/ExpandableListAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="areAllItemsEnabled()Z" />
+		<method name="getChild(II)Ljava/lang/Object;" />
+		<method name="getChildId(II)J" />
+		<method name="getChildView(IIZLandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="getChildrenCount(I)I" />
+		<method name="getCombinedChildId(JJ)J" />
+		<method name="getCombinedGroupId(J)J" />
+		<method name="getGroup(I)Ljava/lang/Object;" />
+		<method name="getGroupCount()I" />
+		<method name="getGroupId(I)J" />
+		<method name="getGroupView(IZLandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="hasStableIds()Z" />
+		<method name="isChildSelectable(II)Z" />
+		<method name="isEmpty()Z" />
+		<method name="onGroupCollapsed(I)V" />
+		<method name="onGroupExpanded(I)V" />
+		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V" />
+		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V" />
+	</class>
+	<class name="android/widget/ExpandableListView" since="1">
+		<extends name="android/widget/ListView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="collapseGroup(I)Z" />
+		<method name="expandGroup(I)Z" />
+		<method name="expandGroup(IZ)Z" since="14" />
+		<method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;" />
+		<method name="getExpandableListPosition(I)J" />
+		<method name="getFlatListPosition(J)I" />
+		<method name="getPackedPositionChild(J)I" />
+		<method name="getPackedPositionForChild(II)J" />
+		<method name="getPackedPositionForGroup(I)J" />
+		<method name="getPackedPositionGroup(J)I" />
+		<method name="getPackedPositionType(J)I" />
+		<method name="getSelectedId()J" />
+		<method name="getSelectedPosition()J" />
+		<method name="isGroupExpanded(I)Z" />
+		<method name="setAdapter(Landroid/widget/ExpandableListAdapter;)V" />
+		<method name="setChildDivider(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setChildIndicator(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setChildIndicatorBounds(II)V" />
+		<method name="setChildIndicatorBoundsRelative(II)V" since="18" />
+		<method name="setGroupIndicator(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setIndicatorBounds(II)V" />
+		<method name="setIndicatorBoundsRelative(II)V" since="18" />
+		<method name="setOnChildClickListener(Landroid/widget/ExpandableListView$OnChildClickListener;)V" />
+		<method name="setOnGroupClickListener(Landroid/widget/ExpandableListView$OnGroupClickListener;)V" />
+		<method name="setOnGroupCollapseListener(Landroid/widget/ExpandableListView$OnGroupCollapseListener;)V" />
+		<method name="setOnGroupExpandListener(Landroid/widget/ExpandableListView$OnGroupExpandListener;)V" />
+		<method name="setSelectedChild(IIZ)Z" />
+		<method name="setSelectedGroup(I)V" />
+		<field name="CHILD_INDICATOR_INHERIT" />
+		<field name="PACKED_POSITION_TYPE_CHILD" />
+		<field name="PACKED_POSITION_TYPE_GROUP" />
+		<field name="PACKED_POSITION_TYPE_NULL" />
+		<field name="PACKED_POSITION_VALUE_NULL" />
+	</class>
+	<class name="android/widget/ExpandableListView$ExpandableListContextMenuInfo" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/ContextMenu$ContextMenuInfo" />
+		<method name="&lt;init&gt;(Landroid/view/View;JJ)V" />
+		<field name="id" />
+		<field name="packedPosition" />
+		<field name="targetView" />
+	</class>
+	<class name="android/widget/ExpandableListView$OnChildClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z" />
+	</class>
+	<class name="android/widget/ExpandableListView$OnGroupClickListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z" />
+	</class>
+	<class name="android/widget/ExpandableListView$OnGroupCollapseListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onGroupCollapse(I)V" />
+	</class>
+	<class name="android/widget/ExpandableListView$OnGroupExpandListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onGroupExpand(I)V" />
+	</class>
+	<class name="android/widget/Filter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="convertResultToString(Ljava/lang/Object;)Ljava/lang/CharSequence;" />
+		<method name="filter(Ljava/lang/CharSequence;)V" />
+		<method name="filter(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterListener;)V" />
+		<method name="performFiltering(Ljava/lang/CharSequence;)Landroid/widget/Filter$FilterResults;" />
+		<method name="publishResults(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterResults;)V" />
+	</class>
+	<class name="android/widget/Filter$FilterListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onFilterComplete(I)V" />
+	</class>
+	<class name="android/widget/Filter$FilterResults" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<field name="count" />
+		<field name="values" />
+	</class>
+	<class name="android/widget/FilterQueryProvider" since="1">
+		<extends name="java/lang/Object" />
+		<method name="runQuery(Ljava/lang/CharSequence;)Landroid/database/Cursor;" />
+	</class>
+	<class name="android/widget/Filterable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getFilter()Landroid/widget/Filter;" />
+	</class>
+	<class name="android/widget/FrameLayout" since="1">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="generateDefaultLayoutParams()Landroid/widget/FrameLayout$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/FrameLayout$LayoutParams;" />
+		<method name="getConsiderGoneChildrenWhenMeasuring()Z" deprecated="15" />
+		<method name="getForeground()Landroid/graphics/drawable/Drawable;" removed="23" />
+		<method name="getForegroundGravity()I" since="16" removed="23" />
+		<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="21" removed="23" />
+		<method name="getForegroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" removed="23" />
+		<method name="getMeasureAllChildren()Z" since="14" />
+		<method name="setForeground(Landroid/graphics/drawable/Drawable;)V" removed="23" />
+		<method name="setForegroundGravity(I)V" />
+		<method name="setForegroundTintList(Landroid/content/res/ColorStateList;)V" since="21" removed="23" />
+		<method name="setForegroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" removed="23" />
+		<method name="setMeasureAllChildren(Z)V" />
+	</class>
+	<class name="android/widget/FrameLayout$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$MarginLayoutParams" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/FrameLayout$LayoutParams;)V" since="19" />
+		<field name="UNSPECIFIED_GRAVITY" since="24" />
+		<field name="gravity" />
+	</class>
+	<class name="android/widget/Gallery" since="1" deprecated="16">
+		<extends name="android/widget/AbsSpinner" />
+		<implements name="android/view/GestureDetector$OnGestureListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="setAnimationDuration(I)V" deprecated="29" />
+		<method name="setCallbackDuringFling(Z)V" deprecated="29" />
+		<method name="setGravity(I)V" deprecated="29" />
+		<method name="setSpacing(I)V" deprecated="29" />
+		<method name="setUnselectedAlpha(F)V" deprecated="29" />
+	</class>
+	<class name="android/widget/Gallery$LayoutParams" since="1" deprecated="29">
+		<extends name="android/view/ViewGroup$LayoutParams" />
+		<method name="&lt;init&gt;(II)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" deprecated="29" />
+	</class>
+	<class name="android/widget/GridLayout" since="14">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="generateDefaultLayoutParams()Landroid/widget/GridLayout$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/GridLayout$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/GridLayout$LayoutParams;" />
+		<method name="getAlignmentMode()I" />
+		<method name="getColumnCount()I" />
+		<method name="getOrientation()I" />
+		<method name="getRowCount()I" />
+		<method name="getUseDefaultMargins()Z" />
+		<method name="isColumnOrderPreserved()Z" />
+		<method name="isRowOrderPreserved()Z" />
+		<method name="setAlignmentMode(I)V" />
+		<method name="setColumnCount(I)V" />
+		<method name="setColumnOrderPreserved(Z)V" />
+		<method name="setOrientation(I)V" />
+		<method name="setRowCount(I)V" />
+		<method name="setRowOrderPreserved(Z)V" />
+		<method name="setUseDefaultMargins(Z)V" />
+		<method name="spec(I)Landroid/widget/GridLayout$Spec;" />
+		<method name="spec(IF)Landroid/widget/GridLayout$Spec;" since="21" />
+		<method name="spec(II)Landroid/widget/GridLayout$Spec;" />
+		<method name="spec(IIF)Landroid/widget/GridLayout$Spec;" since="21" />
+		<method name="spec(IILandroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Spec;" />
+		<method name="spec(IILandroid/widget/GridLayout$Alignment;F)Landroid/widget/GridLayout$Spec;" since="21" />
+		<method name="spec(ILandroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Spec;" />
+		<method name="spec(ILandroid/widget/GridLayout$Alignment;F)Landroid/widget/GridLayout$Spec;" since="21" />
+		<field name="ALIGN_BOUNDS" />
+		<field name="ALIGN_MARGINS" />
+		<field name="BASELINE" />
+		<field name="BOTTOM" />
+		<field name="CENTER" />
+		<field name="END" since="16" />
+		<field name="FILL" />
+		<field name="HORIZONTAL" />
+		<field name="LEFT" />
+		<field name="RIGHT" />
+		<field name="START" since="16" />
+		<field name="TOP" />
+		<field name="UNDEFINED" />
+		<field name="VERTICAL" />
+	</class>
+	<class name="android/widget/GridLayout$Alignment" since="14">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/widget/GridLayout$LayoutParams" since="14">
+		<extends name="android/view/ViewGroup$MarginLayoutParams" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/GridLayout$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/GridLayout$Spec;Landroid/widget/GridLayout$Spec;)V" />
+		<method name="setGravity(I)V" />
+		<field name="columnSpec" />
+		<field name="rowSpec" />
+	</class>
+	<class name="android/widget/GridLayout$Spec" since="14">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="android/widget/GridView" since="1">
+		<extends name="android/widget/AbsListView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getAdapter()Landroid/widget/ListAdapter;" />
+		<method name="getColumnWidth()I" since="16" />
+		<method name="getGravity()I" since="16" />
+		<method name="getHorizontalSpacing()I" since="16" />
+		<method name="getNumColumns()I" since="11" />
+		<method name="getRequestedColumnWidth()I" since="16" />
+		<method name="getRequestedHorizontalSpacing()I" since="16" />
+		<method name="getStretchMode()I" />
+		<method name="getVerticalSpacing()I" since="16" />
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V" />
+		<method name="setColumnWidth(I)V" />
+		<method name="setGravity(I)V" />
+		<method name="setHorizontalSpacing(I)V" />
+		<method name="setNumColumns(I)V" />
+		<method name="setStretchMode(I)V" />
+		<method name="setVerticalSpacing(I)V" />
+		<method name="smoothScrollByOffset(I)V" since="11" />
+		<field name="AUTO_FIT" />
+		<field name="NO_STRETCH" />
+		<field name="STRETCH_COLUMN_WIDTH" />
+		<field name="STRETCH_SPACING" />
+		<field name="STRETCH_SPACING_UNIFORM" since="3" />
+	</class>
+	<class name="android/widget/HeaderViewListAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/Filterable" />
+		<implements name="android/widget/WrapperListAdapter" />
+		<method name="&lt;init&gt;(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/widget/ListAdapter;)V" />
+		<method name="getFootersCount()I" />
+		<method name="getHeadersCount()I" />
+		<method name="removeFooter(Landroid/view/View;)Z" />
+		<method name="removeHeader(Landroid/view/View;)Z" />
+	</class>
+	<class name="android/widget/HeterogeneousExpandableList" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getChildType(II)I" />
+		<method name="getChildTypeCount()I" />
+		<method name="getGroupType(I)I" />
+		<method name="getGroupTypeCount()I" />
+	</class>
+	<class name="android/widget/HorizontalScrollView" since="3">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="arrowScroll(I)Z" />
+		<method name="computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I" />
+		<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="fling(I)V" />
+		<method name="fullScroll(I)Z" />
+		<method name="getLeftEdgeEffectColor()I" since="29" />
+		<method name="getMaxScrollAmount()I" />
+		<method name="getRightEdgeEffectColor()I" since="29" />
+		<method name="isFillViewport()Z" />
+		<method name="isSmoothScrollingEnabled()Z" />
+		<method name="pageScroll(I)Z" />
+		<method name="setEdgeEffectColor(I)V" since="29" />
+		<method name="setFillViewport(Z)V" />
+		<method name="setLeftEdgeEffectColor(I)V" since="29" />
+		<method name="setRightEdgeEffectColor(I)V" since="29" />
+		<method name="setSmoothScrollingEnabled(Z)V" />
+		<method name="smoothScrollBy(II)V" />
+		<method name="smoothScrollTo(II)V" />
+	</class>
+	<class name="android/widget/ImageButton" since="1">
+		<extends name="android/widget/ImageView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+	</class>
+	<class name="android/widget/ImageSwitcher" since="1">
+		<extends name="android/widget/ViewSwitcher" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="setImageDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setImageResource(I)V" />
+		<method name="setImageURI(Landroid/net/Uri;)V" />
+	</class>
+	<class name="android/widget/ImageView" since="1">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="animateTransform(Landroid/graphics/Matrix;)V" since="29" />
+		<method name="clearColorFilter()V" />
+		<method name="getAdjustViewBounds()Z" since="16" />
+		<method name="getBaselineAlignBottom()Z" since="11" />
+		<method name="getColorFilter()Landroid/graphics/ColorFilter;" since="16" />
+		<method name="getCropToPadding()Z" since="16" />
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="getImageAlpha()I" since="16" />
+		<method name="getImageMatrix()Landroid/graphics/Matrix;" />
+		<method name="getImageTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getImageTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getImageTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="getMaxHeight()I" since="16" />
+		<method name="getMaxWidth()I" since="16" />
+		<method name="getScaleType()Landroid/widget/ImageView$ScaleType;" />
+		<method name="setAdjustViewBounds(Z)V" />
+		<method name="setAlpha(I)V" deprecated="16" />
+		<method name="setBaseline(I)V" since="11" />
+		<method name="setBaselineAlignBottom(Z)V" since="11" />
+		<method name="setColorFilter(I)V" since="8" />
+		<method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V" />
+		<method name="setColorFilter(Landroid/graphics/ColorFilter;)V" />
+		<method name="setCropToPadding(Z)V" since="16" />
+		<method name="setFrame(IIII)Z" />
+		<method name="setImageAlpha(I)V" since="16" />
+		<method name="setImageBitmap(Landroid/graphics/Bitmap;)V" />
+		<method name="setImageDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setImageIcon(Landroid/graphics/drawable/Icon;)V" since="23" />
+		<method name="setImageLevel(I)V" />
+		<method name="setImageMatrix(Landroid/graphics/Matrix;)V" />
+		<method name="setImageResource(I)V" />
+		<method name="setImageState([IZ)V" />
+		<method name="setImageTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setImageTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setImageTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setImageURI(Landroid/net/Uri;)V" />
+		<method name="setMaxHeight(I)V" />
+		<method name="setMaxWidth(I)V" />
+		<method name="setScaleType(Landroid/widget/ImageView$ScaleType;)V" />
+	</class>
+	<class name="android/widget/ImageView$ScaleType" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/widget/ImageView$ScaleType;" />
+		<method name="values()[Landroid/widget/ImageView$ScaleType;" />
+		<field name="CENTER" />
+		<field name="CENTER_CROP" />
+		<field name="CENTER_INSIDE" />
+		<field name="FIT_CENTER" />
+		<field name="FIT_END" />
+		<field name="FIT_START" />
+		<field name="FIT_XY" />
+		<field name="MATRIX" />
+	</class>
+	<class name="android/widget/LinearLayout" since="1">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="11" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="generateDefaultLayoutParams()Landroid/widget/LinearLayout$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/LinearLayout$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/LinearLayout$LayoutParams;" />
+		<method name="getBaselineAlignedChildIndex()I" />
+		<method name="getDividerDrawable()Landroid/graphics/drawable/Drawable;" since="16" />
+		<method name="getDividerPadding()I" since="14" />
+		<method name="getGravity()I" since="24" />
+		<method name="getOrientation()I" />
+		<method name="getShowDividers()I" since="11" />
+		<method name="getWeightSum()F" />
+		<method name="isBaselineAligned()Z" />
+		<method name="isMeasureWithLargestChildEnabled()Z" since="11" />
+		<method name="setBaselineAligned(Z)V" />
+		<method name="setBaselineAlignedChildIndex(I)V" />
+		<method name="setDividerDrawable(Landroid/graphics/drawable/Drawable;)V" since="11" />
+		<method name="setDividerPadding(I)V" since="14" />
+		<method name="setGravity(I)V" />
+		<method name="setHorizontalGravity(I)V" />
+		<method name="setMeasureWithLargestChildEnabled(Z)V" since="11" />
+		<method name="setOrientation(I)V" />
+		<method name="setShowDividers(I)V" since="11" />
+		<method name="setVerticalGravity(I)V" />
+		<method name="setWeightSum(F)V" />
+		<field name="HORIZONTAL" />
+		<field name="SHOW_DIVIDER_BEGINNING" since="11" />
+		<field name="SHOW_DIVIDER_END" since="11" />
+		<field name="SHOW_DIVIDER_MIDDLE" since="11" />
+		<field name="SHOW_DIVIDER_NONE" since="11" />
+		<field name="VERTICAL" />
+	</class>
+	<class name="android/widget/LinearLayout$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$MarginLayoutParams" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(IIF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/LinearLayout$LayoutParams;)V" since="19" />
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;" />
+		<field name="gravity" />
+		<field name="weight" />
+	</class>
+	<class name="android/widget/ListAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/Adapter" />
+		<method name="areAllItemsEnabled()Z" />
+		<method name="isEnabled(I)Z" />
+	</class>
+	<class name="android/widget/ListPopupWindow" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" />
+		<method name="clearListSelection()V" />
+		<method name="createDragToOpenListener(Landroid/view/View;)Landroid/view/View$OnTouchListener;" since="19" />
+		<method name="dismiss()V" />
+		<method name="getAnchorView()Landroid/view/View;" />
+		<method name="getAnimationStyle()I" />
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;" />
+		<method name="getEpicenterBounds()Landroid/graphics/Rect;" since="29" />
+		<method name="getHeight()I" />
+		<method name="getHorizontalOffset()I" />
+		<method name="getInputMethodMode()I" />
+		<method name="getListView()Landroid/widget/ListView;" />
+		<method name="getPromptPosition()I" />
+		<method name="getSelectedItem()Ljava/lang/Object;" />
+		<method name="getSelectedItemId()J" />
+		<method name="getSelectedItemPosition()I" />
+		<method name="getSelectedView()Landroid/view/View;" />
+		<method name="getSoftInputMode()I" />
+		<method name="getVerticalOffset()I" />
+		<method name="getWidth()I" />
+		<method name="isInputMethodNotNeeded()Z" />
+		<method name="isModal()Z" />
+		<method name="isShowing()Z" />
+		<method name="onKeyDown(ILandroid/view/KeyEvent;)Z" />
+		<method name="onKeyPreIme(ILandroid/view/KeyEvent;)Z" />
+		<method name="onKeyUp(ILandroid/view/KeyEvent;)Z" />
+		<method name="performItemClick(I)Z" />
+		<method name="postShow()V" />
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V" />
+		<method name="setAnchorView(Landroid/view/View;)V" />
+		<method name="setAnimationStyle(I)V" />
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setContentWidth(I)V" />
+		<method name="setDropDownGravity(I)V" since="19" />
+		<method name="setEpicenterBounds(Landroid/graphics/Rect;)V" since="29" />
+		<method name="setHeight(I)V" />
+		<method name="setHorizontalOffset(I)V" />
+		<method name="setInputMethodMode(I)V" />
+		<method name="setListSelector(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setModal(Z)V" />
+		<method name="setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V" />
+		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V" />
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V" />
+		<method name="setPromptPosition(I)V" />
+		<method name="setPromptView(Landroid/view/View;)V" />
+		<method name="setSelection(I)V" />
+		<method name="setSoftInputMode(I)V" />
+		<method name="setVerticalOffset(I)V" />
+		<method name="setWidth(I)V" />
+		<method name="setWindowLayoutType(I)V" since="23" />
+		<method name="show()V" />
+		<field name="INPUT_METHOD_FROM_FOCUSABLE" />
+		<field name="INPUT_METHOD_NEEDED" />
+		<field name="INPUT_METHOD_NOT_NEEDED" />
+		<field name="MATCH_PARENT" />
+		<field name="POSITION_PROMPT_ABOVE" />
+		<field name="POSITION_PROMPT_BELOW" />
+		<field name="WRAP_CONTENT" />
+	</class>
+	<class name="android/widget/ListView" since="1">
+		<extends name="android/widget/AbsListView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="addFooterView(Landroid/view/View;)V" />
+		<method name="addFooterView(Landroid/view/View;Ljava/lang/Object;Z)V" />
+		<method name="addHeaderView(Landroid/view/View;)V" />
+		<method name="addHeaderView(Landroid/view/View;Ljava/lang/Object;Z)V" />
+		<method name="areFooterDividersEnabled()Z" since="19" />
+		<method name="areHeaderDividersEnabled()Z" since="19" />
+		<method name="clearChoices()V" removed="11" />
+		<method name="findViewTraversal(I)Landroid/view/View;" removed="26" />
+		<method name="findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;" removed="26" />
+		<method name="getAdapter()Landroid/widget/ListAdapter;" />
+		<method name="getCheckItemIds()[J" since="4" deprecated="15" />
+		<method name="getCheckedItemIds()[J" since="8" removed="11" />
+		<method name="getCheckedItemPosition()I" removed="11" />
+		<method name="getCheckedItemPositions()Landroid/util/SparseBooleanArray;" removed="11" />
+		<method name="getChoiceMode()I" removed="11" />
+		<method name="getDivider()Landroid/graphics/drawable/Drawable;" />
+		<method name="getDividerHeight()I" />
+		<method name="getFooterViewsCount()I" />
+		<method name="getHeaderViewsCount()I" />
+		<method name="getItemsCanFocus()Z" />
+		<method name="getMaxScrollAmount()I" />
+		<method name="getOverscrollFooter()Landroid/graphics/drawable/Drawable;" since="9" />
+		<method name="getOverscrollHeader()Landroid/graphics/drawable/Drawable;" since="9" />
+		<method name="isItemChecked(I)Z" removed="11" />
+		<method name="removeFooterView(Landroid/view/View;)Z" />
+		<method name="removeHeaderView(Landroid/view/View;)Z" />
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V" />
+		<method name="setChoiceMode(I)V" removed="11" />
+		<method name="setDivider(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setDividerHeight(I)V" />
+		<method name="setFooterDividersEnabled(Z)V" since="3" />
+		<method name="setHeaderDividersEnabled(Z)V" since="3" />
+		<method name="setItemChecked(IZ)V" removed="11" />
+		<method name="setItemsCanFocus(Z)V" />
+		<method name="setOverscrollFooter(Landroid/graphics/drawable/Drawable;)V" since="9" />
+		<method name="setOverscrollHeader(Landroid/graphics/drawable/Drawable;)V" since="9" />
+		<method name="setSelectionAfterHeaderView()V" />
+		<method name="setSelectionFromTop(II)V" removed="21" />
+		<method name="smoothScrollByOffset(I)V" since="11" />
+		<field name="CHOICE_MODE_MULTIPLE" removed="11" />
+		<field name="CHOICE_MODE_NONE" removed="11" />
+		<field name="CHOICE_MODE_SINGLE" removed="11" />
+	</class>
+	<class name="android/widget/ListView$FixedViewInfo" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/widget/ListView;)V" />
+		<field name="data" />
+		<field name="isSelectable" />
+		<field name="view" />
+	</class>
+	<class name="android/widget/Magnifier" since="28">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/View;)V" deprecated="29" />
+		<method name="dismiss()V" />
+		<method name="getCornerRadius()F" since="29" />
+		<method name="getDefaultHorizontalSourceToMagnifierOffset()I" since="29" />
+		<method name="getDefaultVerticalSourceToMagnifierOffset()I" since="29" />
+		<method name="getElevation()F" since="29" />
+		<method name="getHeight()I" />
+		<method name="getOverlay()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getPosition()Landroid/graphics/Point;" since="29" />
+		<method name="getSourceHeight()I" since="29" />
+		<method name="getSourcePosition()Landroid/graphics/Point;" since="29" />
+		<method name="getSourceWidth()I" since="29" />
+		<method name="getWidth()I" />
+		<method name="getZoom()F" />
+		<method name="isClippingEnabled()Z" since="29" />
+		<method name="setZoom(F)V" since="29" />
+		<method name="show(FF)V" />
+		<method name="show(FFFF)V" since="29" />
+		<method name="update()V" />
+		<field name="SOURCE_BOUND_MAX_IN_SURFACE" since="29" />
+		<field name="SOURCE_BOUND_MAX_VISIBLE" since="29" />
+	</class>
+	<class name="android/widget/Magnifier$Builder" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/view/View;)V" />
+		<method name="build()Landroid/widget/Magnifier;" />
+		<method name="setClippingEnabled(Z)Landroid/widget/Magnifier$Builder;" />
+		<method name="setCornerRadius(F)Landroid/widget/Magnifier$Builder;" />
+		<method name="setDefaultSourceToMagnifierOffset(II)Landroid/widget/Magnifier$Builder;" />
+		<method name="setElevation(F)Landroid/widget/Magnifier$Builder;" />
+		<method name="setInitialZoom(F)Landroid/widget/Magnifier$Builder;" />
+		<method name="setOverlay(Landroid/graphics/drawable/Drawable;)Landroid/widget/Magnifier$Builder;" />
+		<method name="setSize(II)Landroid/widget/Magnifier$Builder;" />
+		<method name="setSourceBounds(IIII)Landroid/widget/Magnifier$Builder;" />
+	</class>
+	<class name="android/widget/MediaController" since="1">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Z)V" />
+		<method name="hide()V" />
+		<method name="isShowing()Z" />
+		<method name="setAnchorView(Landroid/view/View;)V" />
+		<method name="setMediaPlayer(Landroid/widget/MediaController$MediaPlayerControl;)V" />
+		<method name="setPrevNextListeners(Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;)V" />
+		<method name="show()V" />
+		<method name="show(I)V" />
+	</class>
+	<class name="android/widget/MediaController$MediaPlayerControl" since="1">
+		<extends name="java/lang/Object" />
+		<method name="canPause()Z" since="5" />
+		<method name="canSeekBackward()Z" since="5" />
+		<method name="canSeekForward()Z" since="5" />
+		<method name="getAudioSessionId()I" since="18" />
+		<method name="getBufferPercentage()I" />
+		<method name="getCurrentPosition()I" />
+		<method name="getDuration()I" />
+		<method name="isPlaying()Z" />
+		<method name="pause()V" />
+		<method name="seekTo(I)V" />
+		<method name="start()V" />
+	</class>
+	<class name="android/widget/MultiAutoCompleteTextView" since="1">
+		<extends name="android/widget/AutoCompleteTextView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="performFiltering(Ljava/lang/CharSequence;III)V" />
+		<method name="setTokenizer(Landroid/widget/MultiAutoCompleteTextView$Tokenizer;)V" />
+	</class>
+	<class name="android/widget/MultiAutoCompleteTextView$CommaTokenizer" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/MultiAutoCompleteTextView$Tokenizer" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="android/widget/MultiAutoCompleteTextView$Tokenizer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="findTokenEnd(Ljava/lang/CharSequence;I)I" />
+		<method name="findTokenStart(Ljava/lang/CharSequence;I)I" />
+		<method name="terminateToken(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" />
+	</class>
+	<class name="android/widget/NumberPicker" since="11">
+		<extends name="android/widget/LinearLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getDisplayedValues()[Ljava/lang/String;" />
+		<method name="getMaxValue()I" />
+		<method name="getMinValue()I" />
+		<method name="getSelectionDividerHeight()I" since="29" />
+		<method name="getTextColor()I" since="29" />
+		<method name="getTextSize()F" since="29" />
+		<method name="getValue()I" />
+		<method name="getWrapSelectorWheel()Z" />
+		<method name="setDisplayedValues([Ljava/lang/String;)V" />
+		<method name="setFormatter(Landroid/widget/NumberPicker$Formatter;)V" />
+		<method name="setMaxValue(I)V" />
+		<method name="setMinValue(I)V" />
+		<method name="setOnLongPressUpdateInterval(J)V" />
+		<method name="setOnScrollListener(Landroid/widget/NumberPicker$OnScrollListener;)V" />
+		<method name="setOnValueChangedListener(Landroid/widget/NumberPicker$OnValueChangeListener;)V" />
+		<method name="setSelectionDividerHeight(I)V" since="29" />
+		<method name="setTextColor(I)V" since="29" />
+		<method name="setTextSize(F)V" since="29" />
+		<method name="setValue(I)V" />
+		<method name="setWrapSelectorWheel(Z)V" />
+	</class>
+	<class name="android/widget/NumberPicker$Formatter" since="11">
+		<extends name="java/lang/Object" />
+		<method name="format(I)Ljava/lang/String;" />
+	</class>
+	<class name="android/widget/NumberPicker$OnScrollListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onScrollStateChange(Landroid/widget/NumberPicker;I)V" />
+		<field name="SCROLL_STATE_FLING" />
+		<field name="SCROLL_STATE_IDLE" />
+		<field name="SCROLL_STATE_TOUCH_SCROLL" />
+	</class>
+	<class name="android/widget/NumberPicker$OnValueChangeListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onValueChange(Landroid/widget/NumberPicker;II)V" />
+	</class>
+	<class name="android/widget/OverScroller" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/animation/Interpolator;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/animation/Interpolator;FF)V" deprecated="26" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/animation/Interpolator;FFZ)V" since="11" deprecated="26" />
+		<method name="abortAnimation()V" />
+		<method name="computeScrollOffset()Z" />
+		<method name="fling(IIIIIIII)V" />
+		<method name="fling(IIIIIIIIII)V" />
+		<method name="forceFinished(Z)V" />
+		<method name="getCurrVelocity()F" since="14" />
+		<method name="getCurrX()I" />
+		<method name="getCurrY()I" />
+		<method name="getFinalX()I" />
+		<method name="getFinalY()I" />
+		<method name="getStartX()I" />
+		<method name="getStartY()I" />
+		<method name="isFinished()Z" />
+		<method name="isOverScrolled()Z" />
+		<method name="notifyHorizontalEdgeReached(III)V" />
+		<method name="notifyVerticalEdgeReached(III)V" />
+		<method name="setFriction(F)V" since="11" />
+		<method name="springBack(IIIIII)Z" />
+		<method name="startScroll(IIII)V" />
+		<method name="startScroll(IIIII)V" />
+	</class>
+	<class name="android/widget/PopupMenu" since="11">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/View;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/View;I)V" since="19" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/View;III)V" since="22" />
+		<method name="dismiss()V" />
+		<method name="getDragToOpenListener()Landroid/view/View$OnTouchListener;" since="19" />
+		<method name="getGravity()I" since="23" />
+		<method name="getMenu()Landroid/view/Menu;" />
+		<method name="getMenuInflater()Landroid/view/MenuInflater;" />
+		<method name="inflate(I)V" since="14" />
+		<method name="setForceShowIcon(Z)V" since="29" />
+		<method name="setGravity(I)V" since="23" />
+		<method name="setOnDismissListener(Landroid/widget/PopupMenu$OnDismissListener;)V" since="14" />
+		<method name="setOnMenuItemClickListener(Landroid/widget/PopupMenu$OnMenuItemClickListener;)V" />
+		<method name="show()V" />
+	</class>
+	<class name="android/widget/PopupMenu$OnDismissListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onDismiss(Landroid/widget/PopupMenu;)V" />
+	</class>
+	<class name="android/widget/PopupMenu$OnMenuItemClickListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z" />
+	</class>
+	<class name="android/widget/PopupWindow" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="11" />
+		<method name="&lt;init&gt;(Landroid/view/View;)V" />
+		<method name="&lt;init&gt;(Landroid/view/View;II)V" />
+		<method name="&lt;init&gt;(Landroid/view/View;IIZ)V" />
+		<method name="dismiss()V" />
+		<method name="getAnimationStyle()I" />
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;" />
+		<method name="getContentView()Landroid/view/View;" />
+		<method name="getElevation()F" since="21" />
+		<method name="getEnterTransition()Landroid/transition/Transition;" since="24" />
+		<method name="getEpicenterBounds()Landroid/graphics/Rect;" since="29" />
+		<method name="getExitTransition()Landroid/transition/Transition;" since="24" />
+		<method name="getHeight()I" />
+		<method name="getInputMethodMode()I" since="3" />
+		<method name="getMaxAvailableHeight(Landroid/view/View;)I" />
+		<method name="getMaxAvailableHeight(Landroid/view/View;I)I" since="3" />
+		<method name="getMaxAvailableHeight(Landroid/view/View;IZ)I" since="24" />
+		<method name="getOverlapAnchor()Z" since="23" />
+		<method name="getSoftInputMode()I" since="4" />
+		<method name="getWidth()I" />
+		<method name="getWindowLayoutType()I" since="23" />
+		<method name="isAboveAnchor()Z" since="3" />
+		<method name="isAttachedInDecor()Z" since="22" />
+		<method name="isClippedToScreen()Z" since="29" />
+		<method name="isClippingEnabled()Z" since="3" />
+		<method name="isFocusable()Z" />
+		<method name="isLaidOutInScreen()Z" since="29" />
+		<method name="isOutsideTouchable()Z" since="3" />
+		<method name="isShowing()Z" />
+		<method name="isSplitTouchEnabled()Z" since="11" />
+		<method name="isTouchModal()Z" since="29" />
+		<method name="isTouchable()Z" since="3" />
+		<method name="setAnimationStyle(I)V" />
+		<method name="setAttachedInDecor(Z)V" since="22" />
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setClippingEnabled(Z)V" since="3" />
+		<method name="setContentView(Landroid/view/View;)V" />
+		<method name="setElevation(F)V" since="21" />
+		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="23" />
+		<method name="setEpicenterBounds(Landroid/graphics/Rect;)V" since="29" />
+		<method name="setExitTransition(Landroid/transition/Transition;)V" since="23" />
+		<method name="setFocusable(Z)V" />
+		<method name="setHeight(I)V" />
+		<method name="setIgnoreCheekPress()V" />
+		<method name="setInputMethodMode(I)V" since="3" />
+		<method name="setIsClippedToScreen(Z)V" since="29" />
+		<method name="setIsLaidOutInScreen(Z)V" since="29" />
+		<method name="setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V" />
+		<method name="setOutsideTouchable(Z)V" since="3" />
+		<method name="setOverlapAnchor(Z)V" since="23" />
+		<method name="setSoftInputMode(I)V" since="4" />
+		<method name="setSplitTouchEnabled(Z)V" since="11" />
+		<method name="setTouchInterceptor(Landroid/view/View$OnTouchListener;)V" since="3" />
+		<method name="setTouchModal(Z)V" since="29" />
+		<method name="setTouchable(Z)V" since="3" />
+		<method name="setWidth(I)V" />
+		<method name="setWindowLayoutMode(II)V" since="3" deprecated="23" />
+		<method name="setWindowLayoutType(I)V" since="23" />
+		<method name="showAsDropDown(Landroid/view/View;)V" />
+		<method name="showAsDropDown(Landroid/view/View;II)V" />
+		<method name="showAsDropDown(Landroid/view/View;III)V" since="19" />
+		<method name="showAtLocation(Landroid/view/View;III)V" />
+		<method name="update()V" since="3" />
+		<method name="update(II)V" since="4" />
+		<method name="update(IIII)V" />
+		<method name="update(IIIIZ)V" since="3" />
+		<method name="update(Landroid/view/View;II)V" />
+		<method name="update(Landroid/view/View;IIII)V" />
+		<field name="INPUT_METHOD_FROM_FOCUSABLE" since="3" />
+		<field name="INPUT_METHOD_NEEDED" since="3" />
+		<field name="INPUT_METHOD_NOT_NEEDED" since="3" />
+	</class>
+	<class name="android/widget/PopupWindow$OnDismissListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onDismiss()V" />
+	</class>
+	<class name="android/widget/ProgressBar" since="1">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getCurrentDrawable()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getIndeterminateDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="getIndeterminateTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getIndeterminateTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getIndeterminateTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;" />
+		<method name="getMax()I" />
+		<method name="getMaxHeight()I" since="29" />
+		<method name="getMaxWidth()I" since="29" />
+		<method name="getMin()I" since="26" />
+		<method name="getMinHeight()I" since="29" />
+		<method name="getMinWidth()I" since="29" />
+		<method name="getProgress()I" />
+		<method name="getProgressBackgroundTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getProgressBackgroundTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getProgressBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="getProgressDrawable()Landroid/graphics/drawable/Drawable;" />
+		<method name="getProgressTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getProgressTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="getSecondaryProgress()I" />
+		<method name="getSecondaryProgressTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getSecondaryProgressTintList()Landroid/content/res/ColorStateList;" since="21" />
+		<method name="getSecondaryProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" />
+		<method name="incrementProgressBy(I)V" />
+		<method name="incrementSecondaryProgressBy(I)V" />
+		<method name="isAnimating()Z" since="26" />
+		<method name="isIndeterminate()Z" />
+		<method name="setIndeterminate(Z)V" />
+		<method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setIndeterminateDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21" />
+		<method name="setIndeterminateTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setIndeterminateTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setIndeterminateTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setInterpolator(Landroid/content/Context;I)V" />
+		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V" />
+		<method name="setMax(I)V" />
+		<method name="setMaxHeight(I)V" since="29" />
+		<method name="setMaxWidth(I)V" since="29" />
+		<method name="setMin(I)V" since="26" />
+		<method name="setMinHeight(I)V" since="29" />
+		<method name="setMinWidth(I)V" since="29" />
+		<method name="setProgress(I)V" />
+		<method name="setProgress(IZ)V" since="24" />
+		<method name="setProgressBackgroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setProgressBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setProgressBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setProgressDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21" />
+		<method name="setProgressTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setProgressTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+		<method name="setSecondaryProgress(I)V" />
+		<method name="setSecondaryProgressTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setSecondaryProgressTintList(Landroid/content/res/ColorStateList;)V" since="21" />
+		<method name="setSecondaryProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" />
+	</class>
+	<class name="android/widget/QuickContactBadge" since="5">
+		<extends name="android/widget/ImageView" />
+		<implements name="android/view/View$OnClickListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="assignContactFromEmail(Ljava/lang/String;Z)V" />
+		<method name="assignContactFromEmail(Ljava/lang/String;ZLandroid/os/Bundle;)V" since="18" />
+		<method name="assignContactFromPhone(Ljava/lang/String;Z)V" />
+		<method name="assignContactFromPhone(Ljava/lang/String;ZLandroid/os/Bundle;)V" since="18" />
+		<method name="assignContactUri(Landroid/net/Uri;)V" />
+		<method name="setExcludeMimes([Ljava/lang/String;)V" />
+		<method name="setImageToDefault()V" since="11" />
+		<method name="setMode(I)V" />
+		<method name="setOverlay(Landroid/graphics/drawable/Drawable;)V" since="21" />
+		<method name="setPrioritizedMimeType(Ljava/lang/String;)V" since="23" />
+		<field name="mExcludeMimes" />
+	</class>
+	<class name="android/widget/RadioButton" since="1">
+		<extends name="android/widget/CompoundButton" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+	</class>
+	<class name="android/widget/RadioGroup" since="1">
+		<extends name="android/widget/LinearLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="check(I)V" />
+		<method name="clearCheck()V" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RadioGroup$LayoutParams;" />
+		<method name="getCheckedRadioButtonId()I" />
+		<method name="setOnCheckedChangeListener(Landroid/widget/RadioGroup$OnCheckedChangeListener;)V" />
+	</class>
+	<class name="android/widget/RadioGroup$LayoutParams" since="1">
+		<extends name="android/widget/LinearLayout$LayoutParams" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(IIF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+	</class>
+	<class name="android/widget/RadioGroup$OnCheckedChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onCheckedChanged(Landroid/widget/RadioGroup;I)V" />
+	</class>
+	<class name="android/widget/RatingBar" since="1">
+		<extends name="android/widget/AbsSeekBar" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getNumStars()I" />
+		<method name="getOnRatingBarChangeListener()Landroid/widget/RatingBar$OnRatingBarChangeListener;" />
+		<method name="getRating()F" />
+		<method name="getStepSize()F" />
+		<method name="isIndicator()Z" />
+		<method name="setIsIndicator(Z)V" />
+		<method name="setNumStars(I)V" />
+		<method name="setOnRatingBarChangeListener(Landroid/widget/RatingBar$OnRatingBarChangeListener;)V" />
+		<method name="setRating(F)V" />
+		<method name="setStepSize(F)V" />
+	</class>
+	<class name="android/widget/RatingBar$OnRatingBarChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onRatingChanged(Landroid/widget/RatingBar;FZ)V" />
+	</class>
+	<class name="android/widget/RelativeLayout" since="1">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RelativeLayout$LayoutParams;" />
+		<method name="getGravity()I" since="16" />
+		<method name="getIgnoreGravity()I" since="29" />
+		<method name="setGravity(I)V" />
+		<method name="setHorizontalGravity(I)V" />
+		<method name="setIgnoreGravity(I)V" />
+		<method name="setVerticalGravity(I)V" />
+		<field name="ABOVE" />
+		<field name="ALIGN_BASELINE" />
+		<field name="ALIGN_BOTTOM" />
+		<field name="ALIGN_END" since="17" />
+		<field name="ALIGN_LEFT" />
+		<field name="ALIGN_PARENT_BOTTOM" />
+		<field name="ALIGN_PARENT_END" since="17" />
+		<field name="ALIGN_PARENT_LEFT" />
+		<field name="ALIGN_PARENT_RIGHT" />
+		<field name="ALIGN_PARENT_START" since="17" />
+		<field name="ALIGN_PARENT_TOP" />
+		<field name="ALIGN_RIGHT" />
+		<field name="ALIGN_START" since="17" />
+		<field name="ALIGN_TOP" />
+		<field name="BELOW" />
+		<field name="CENTER_HORIZONTAL" />
+		<field name="CENTER_IN_PARENT" />
+		<field name="CENTER_VERTICAL" />
+		<field name="END_OF" since="17" />
+		<field name="LEFT_OF" />
+		<field name="RIGHT_OF" />
+		<field name="START_OF" since="17" />
+		<field name="TRUE" />
+	</class>
+	<class name="android/widget/RelativeLayout$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$MarginLayoutParams" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/RelativeLayout$LayoutParams;)V" since="19" />
+		<method name="addRule(I)V" />
+		<method name="addRule(II)V" />
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getRule(I)I" since="23" />
+		<method name="getRules()[I" />
+		<method name="removeRule(I)V" since="17" />
+		<field name="alignWithParent" />
+	</class>
+	<class name="android/widget/RemoteViews" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<implements name="android/view/LayoutInflater$Filter" />
+		<method name="&lt;init&gt;(Landroid/os/Parcel;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/RemoteViews;)V" since="28" />
+		<method name="&lt;init&gt;(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;)V" since="16" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;II)V" since="31" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" since="31" />
+		<method name="addStableView(ILandroid/widget/RemoteViews;I)V" since="31" />
+		<method name="addView(ILandroid/widget/RemoteViews;)V" since="7" />
+		<method name="apply(Landroid/content/Context;Landroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="clone()Landroid/widget/RemoteViews;" since="9" deprecated="28" />
+		<method name="getLayoutId()I" />
+		<method name="getPackage()Ljava/lang/String;" />
+		<method name="getViewId()I" since="31" />
+		<method name="reapply(Landroid/content/Context;Landroid/view/View;)V" />
+		<method name="removeAllViews(I)V" since="7" />
+		<method name="setAccessibilityTraversalAfter(II)V" since="22" />
+		<method name="setAccessibilityTraversalBefore(II)V" since="22" />
+		<method name="setBitmap(ILjava/lang/String;Landroid/graphics/Bitmap;)V" since="3" />
+		<method name="setBlendMode(ILjava/lang/String;Landroid/graphics/BlendMode;)V" since="31" />
+		<method name="setBoolean(ILjava/lang/String;Z)V" since="3" />
+		<method name="setBundle(ILjava/lang/String;Landroid/os/Bundle;)V" since="8" />
+		<method name="setByte(ILjava/lang/String;B)V" since="3" />
+		<method name="setChar(ILjava/lang/String;C)V" since="3" />
+		<method name="setCharSequence(ILjava/lang/String;I)V" since="31" />
+		<method name="setCharSequence(ILjava/lang/String;Ljava/lang/CharSequence;)V" since="3" />
+		<method name="setCharSequenceAttr(ILjava/lang/String;I)V" since="31" />
+		<method name="setChronometer(IJLjava/lang/String;Z)V" />
+		<method name="setChronometerCountDown(IZ)V" since="24" />
+		<method name="setColor(ILjava/lang/String;I)V" since="31" />
+		<method name="setColorAttr(ILjava/lang/String;I)V" since="31" />
+		<method name="setColorInt(ILjava/lang/String;II)V" since="31" />
+		<method name="setColorStateList(ILjava/lang/String;I)V" since="31" />
+		<method name="setColorStateList(ILjava/lang/String;Landroid/content/res/ColorStateList;)V" since="31" />
+		<method name="setColorStateList(ILjava/lang/String;Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V" since="31" />
+		<method name="setColorStateListAttr(ILjava/lang/String;I)V" since="31" />
+		<method name="setCompoundButtonChecked(IZ)V" since="31" />
+		<method name="setContentDescription(ILjava/lang/CharSequence;)V" since="15" />
+		<method name="setDisplayedChild(II)V" since="12" />
+		<method name="setDouble(ILjava/lang/String;D)V" since="3" />
+		<method name="setEmptyView(II)V" since="11" />
+		<method name="setFloat(ILjava/lang/String;F)V" since="3" />
+		<method name="setFloatDimen(ILjava/lang/String;FI)V" since="31" />
+		<method name="setFloatDimen(ILjava/lang/String;I)V" since="31" />
+		<method name="setFloatDimenAttr(ILjava/lang/String;I)V" since="31" />
+		<method name="setIcon(ILjava/lang/String;Landroid/graphics/drawable/Icon;)V" since="23" />
+		<method name="setIcon(ILjava/lang/String;Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;)V" since="31" />
+		<method name="setImageViewBitmap(ILandroid/graphics/Bitmap;)V" since="3" />
+		<method name="setImageViewIcon(ILandroid/graphics/drawable/Icon;)V" since="23" />
+		<method name="setImageViewResource(II)V" />
+		<method name="setImageViewUri(ILandroid/net/Uri;)V" />
+		<method name="setInt(ILjava/lang/String;I)V" since="3" />
+		<method name="setIntDimen(ILjava/lang/String;FI)V" since="31" />
+		<method name="setIntDimen(ILjava/lang/String;I)V" since="31" />
+		<method name="setIntDimenAttr(ILjava/lang/String;I)V" since="31" />
+		<method name="setIntent(ILjava/lang/String;Landroid/content/Intent;)V" since="11" />
+		<method name="setLabelFor(II)V" since="17" />
+		<method name="setLightBackgroundLayoutId(I)V" since="29" />
+		<method name="setLong(ILjava/lang/String;J)V" since="3" />
+		<method name="setOnCheckedChangeResponse(ILandroid/widget/RemoteViews$RemoteResponse;)V" since="31" />
+		<method name="setOnClickFillInIntent(ILandroid/content/Intent;)V" since="11" />
+		<method name="setOnClickPendingIntent(ILandroid/app/PendingIntent;)V" since="3" />
+		<method name="setOnClickResponse(ILandroid/widget/RemoteViews$RemoteResponse;)V" since="29" />
+		<method name="setPendingIntentTemplate(ILandroid/app/PendingIntent;)V" since="11" />
+		<method name="setProgressBar(IIIZ)V" />
+		<method name="setRadioGroupChecked(II)V" since="31" />
+		<method name="setRelativeScrollPosition(II)V" since="11" />
+		<method name="setRemoteAdapter(IILandroid/content/Intent;)V" since="11" deprecated="15" />
+		<method name="setRemoteAdapter(ILandroid/content/Intent;)V" since="14" />
+		<method name="setRemoteAdapter(ILandroid/widget/RemoteViews$RemoteCollectionItems;)V" since="31" />
+		<method name="setScrollPosition(II)V" since="11" />
+		<method name="setShort(ILjava/lang/String;S)V" since="3" />
+		<method name="setString(ILjava/lang/String;Ljava/lang/String;)V" since="3" />
+		<method name="setTextColor(II)V" since="3" />
+		<method name="setTextViewCompoundDrawables(IIIII)V" since="16" />
+		<method name="setTextViewCompoundDrawablesRelative(IIIII)V" since="16" />
+		<method name="setTextViewText(ILjava/lang/CharSequence;)V" />
+		<method name="setTextViewTextSize(IIF)V" since="16" />
+		<method name="setUri(ILjava/lang/String;Landroid/net/Uri;)V" since="3" />
+		<method name="setViewLayoutHeight(IFI)V" since="31" />
+		<method name="setViewLayoutHeightAttr(II)V" since="31" />
+		<method name="setViewLayoutHeightDimen(II)V" since="31" />
+		<method name="setViewLayoutMargin(IIFI)V" since="31" />
+		<method name="setViewLayoutMarginAttr(III)V" since="31" />
+		<method name="setViewLayoutMarginDimen(III)V" since="31" />
+		<method name="setViewLayoutWidth(IFI)V" since="31" />
+		<method name="setViewLayoutWidthAttr(II)V" since="31" />
+		<method name="setViewLayoutWidthDimen(II)V" since="31" />
+		<method name="setViewOutlinePreferredRadius(IFI)V" since="31" />
+		<method name="setViewOutlinePreferredRadiusAttr(II)V" since="31" />
+		<method name="setViewOutlinePreferredRadiusDimen(II)V" since="31" />
+		<method name="setViewPadding(IIIII)V" since="16" />
+		<method name="setViewVisibility(II)V" />
+		<method name="showNext(I)V" since="11" />
+		<method name="showPrevious(I)V" since="11" />
+		<field name="CREATOR" />
+		<field name="EXTRA_CHECKED" since="31" />
+		<field name="EXTRA_SHARED_ELEMENT_BOUNDS" since="29" />
+		<field name="MARGIN_BOTTOM" since="31" />
+		<field name="MARGIN_END" since="31" />
+		<field name="MARGIN_LEFT" since="31" />
+		<field name="MARGIN_RIGHT" since="31" />
+		<field name="MARGIN_START" since="31" />
+		<field name="MARGIN_TOP" since="31" />
+	</class>
+	<class name="android/widget/RemoteViews$ActionException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" since="3" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="android/widget/RemoteViews$RemoteCollectionItems" since="31">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getItemCount()I" />
+		<method name="getItemId(I)J" />
+		<method name="getItemView(I)Landroid/widget/RemoteViews;" />
+		<method name="getViewTypeCount()I" />
+		<method name="hasStableIds()Z" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/widget/RemoteViews$RemoteCollectionItems$Builder" since="31">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addItem(JLandroid/widget/RemoteViews;)Landroid/widget/RemoteViews$RemoteCollectionItems$Builder;" />
+		<method name="build()Landroid/widget/RemoteViews$RemoteCollectionItems;" />
+		<method name="setHasStableIds(Z)Landroid/widget/RemoteViews$RemoteCollectionItems$Builder;" />
+		<method name="setViewTypeCount(I)Landroid/widget/RemoteViews$RemoteCollectionItems$Builder;" />
+	</class>
+	<class name="android/widget/RemoteViews$RemoteResponse" since="29">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addSharedElement(ILjava/lang/String;)Landroid/widget/RemoteViews$RemoteResponse;" />
+		<method name="fromFillInIntent(Landroid/content/Intent;)Landroid/widget/RemoteViews$RemoteResponse;" />
+		<method name="fromPendingIntent(Landroid/app/PendingIntent;)Landroid/widget/RemoteViews$RemoteResponse;" />
+	</class>
+	<class name="android/widget/RemoteViews$RemoteView" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="android/widget/RemoteViews$RemoteViewOutlineProvider" since="31">
+		<extends name="android/view/ViewOutlineProvider" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="getRadius()F" />
+	</class>
+	<class name="android/widget/RemoteViewsService" since="11">
+		<extends name="android/app/Service" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onGetViewFactory(Landroid/content/Intent;)Landroid/widget/RemoteViewsService$RemoteViewsFactory;" />
+	</class>
+	<class name="android/widget/RemoteViewsService$RemoteViewsFactory" since="11">
+		<extends name="java/lang/Object" />
+		<method name="getCount()I" />
+		<method name="getItemId(I)J" />
+		<method name="getLoadingView()Landroid/widget/RemoteViews;" />
+		<method name="getViewAt(I)Landroid/widget/RemoteViews;" />
+		<method name="getViewTypeCount()I" />
+		<method name="hasStableIds()Z" />
+		<method name="onCreate()V" />
+		<method name="onDataSetChanged()V" />
+		<method name="onDestroy()V" />
+	</class>
+	<class name="android/widget/ResourceCursorAdapter" since="1">
+		<extends name="android/widget/CursorAdapter" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILandroid/database/Cursor;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILandroid/database/Cursor;I)V" since="11" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILandroid/database/Cursor;Z)V" since="3" />
+		<method name="setDropDownViewResource(I)V" />
+		<method name="setViewResource(I)V" since="3" />
+	</class>
+	<class name="android/widget/ResourceCursorTreeAdapter" since="1">
+		<extends name="android/widget/CursorTreeAdapter" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;II)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;III)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;IIII)V" />
+	</class>
+	<class name="android/widget/ScrollView" since="1">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="arrowScroll(I)Z" />
+		<method name="computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I" />
+		<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z" />
+		<method name="fling(I)V" />
+		<method name="fullScroll(I)Z" />
+		<method name="getBottomEdgeEffectColor()I" since="29" />
+		<method name="getMaxScrollAmount()I" />
+		<method name="getTopEdgeEffectColor()I" since="29" />
+		<method name="isFillViewport()Z" />
+		<method name="isSmoothScrollingEnabled()Z" />
+		<method name="pageScroll(I)Z" />
+		<method name="scrollToDescendant(Landroid/view/View;)V" since="29" />
+		<method name="setBottomEdgeEffectColor(I)V" since="29" />
+		<method name="setEdgeEffectColor(I)V" since="29" />
+		<method name="setFillViewport(Z)V" />
+		<method name="setSmoothScrollingEnabled(Z)V" />
+		<method name="setTopEdgeEffectColor(I)V" since="29" />
+		<method name="smoothScrollBy(II)V" />
+		<method name="smoothScrollTo(II)V" />
+	</class>
+	<class name="android/widget/Scroller" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/animation/Interpolator;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V" since="11" />
+		<method name="abortAnimation()V" />
+		<method name="computeScrollOffset()Z" />
+		<method name="extendDuration(I)V" />
+		<method name="fling(IIIIIIII)V" />
+		<method name="forceFinished(Z)V" />
+		<method name="getCurrVelocity()F" since="14" />
+		<method name="getCurrX()I" />
+		<method name="getCurrY()I" />
+		<method name="getDuration()I" />
+		<method name="getFinalX()I" />
+		<method name="getFinalY()I" />
+		<method name="getStartX()I" since="3" />
+		<method name="getStartY()I" since="3" />
+		<method name="isFinished()Z" />
+		<method name="setFinalX(I)V" />
+		<method name="setFinalY(I)V" />
+		<method name="setFriction(F)V" since="11" />
+		<method name="startScroll(IIII)V" />
+		<method name="startScroll(IIIII)V" />
+		<method name="timePassed()I" />
+	</class>
+	<class name="android/widget/SearchView" since="11">
+		<extends name="android/widget/LinearLayout" />
+		<implements name="android/view/CollapsibleActionView" since="14" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getImeOptions()I" since="16" />
+		<method name="getInputType()I" since="16" />
+		<method name="getMaxWidth()I" since="16" />
+		<method name="getQuery()Ljava/lang/CharSequence;" />
+		<method name="getQueryHint()Ljava/lang/CharSequence;" since="16" />
+		<method name="getSuggestionsAdapter()Landroid/widget/CursorAdapter;" />
+		<method name="isIconfiedByDefault()Z" deprecated="29" />
+		<method name="isIconified()Z" />
+		<method name="isIconifiedByDefault()Z" since="29" />
+		<method name="isQueryRefinementEnabled()Z" />
+		<method name="isSubmitButtonEnabled()Z" />
+		<method name="setIconified(Z)V" />
+		<method name="setIconifiedByDefault(Z)V" />
+		<method name="setImeOptions(I)V" since="14" />
+		<method name="setInputType(I)V" since="14" />
+		<method name="setMaxWidth(I)V" />
+		<method name="setOnCloseListener(Landroid/widget/SearchView$OnCloseListener;)V" />
+		<method name="setOnQueryTextFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V" />
+		<method name="setOnQueryTextListener(Landroid/widget/SearchView$OnQueryTextListener;)V" />
+		<method name="setOnSearchClickListener(Landroid/view/View$OnClickListener;)V" />
+		<method name="setOnSuggestionListener(Landroid/widget/SearchView$OnSuggestionListener;)V" />
+		<method name="setQuery(Ljava/lang/CharSequence;Z)V" />
+		<method name="setQueryHint(Ljava/lang/CharSequence;)V" />
+		<method name="setQueryRefinementEnabled(Z)V" />
+		<method name="setSearchableInfo(Landroid/app/SearchableInfo;)V" />
+		<method name="setSubmitButtonEnabled(Z)V" />
+		<method name="setSuggestionsAdapter(Landroid/widget/CursorAdapter;)V" />
+	</class>
+	<class name="android/widget/SearchView$OnCloseListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onClose()Z" />
+	</class>
+	<class name="android/widget/SearchView$OnQueryTextListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onQueryTextChange(Ljava/lang/String;)Z" />
+		<method name="onQueryTextSubmit(Ljava/lang/String;)Z" />
+	</class>
+	<class name="android/widget/SearchView$OnSuggestionListener" since="11">
+		<extends name="java/lang/Object" />
+		<method name="onSuggestionClick(I)Z" />
+		<method name="onSuggestionSelect(I)Z" />
+	</class>
+	<class name="android/widget/SectionIndexer" since="3">
+		<extends name="java/lang/Object" />
+		<method name="getPositionForSection(I)I" />
+		<method name="getSectionForPosition(I)I" />
+		<method name="getSections()[Ljava/lang/Object;" />
+	</class>
+	<class name="android/widget/SeekBar" since="1">
+		<extends name="android/widget/AbsSeekBar" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="setOnSeekBarChangeListener(Landroid/widget/SeekBar$OnSeekBarChangeListener;)V" />
+	</class>
+	<class name="android/widget/SeekBar$OnSeekBarChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onProgressChanged(Landroid/widget/SeekBar;IZ)V" />
+		<method name="onStartTrackingTouch(Landroid/widget/SeekBar;)V" />
+		<method name="onStopTrackingTouch(Landroid/widget/SeekBar;)V" />
+	</class>
+	<class name="android/widget/ShareActionProvider" since="14">
+		<extends name="android/view/ActionProvider" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="setOnShareTargetSelectedListener(Landroid/widget/ShareActionProvider$OnShareTargetSelectedListener;)V" />
+		<method name="setShareHistoryFileName(Ljava/lang/String;)V" />
+		<method name="setShareIntent(Landroid/content/Intent;)V" />
+		<field name="DEFAULT_SHARE_HISTORY_FILE_NAME" />
+	</class>
+	<class name="android/widget/ShareActionProvider$OnShareTargetSelectedListener" since="14">
+		<extends name="java/lang/Object" />
+		<method name="onShareTargetSelected(Landroid/widget/ShareActionProvider;Landroid/content/Intent;)Z" />
+	</class>
+	<class name="android/widget/SimpleAdapter" since="1">
+		<extends name="android/widget/BaseAdapter" />
+		<implements name="android/widget/Filterable" />
+		<implements name="android/widget/ThemedSpinnerAdapter" since="23" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/util/List;I[Ljava/lang/String;[I)V" />
+		<method name="getViewBinder()Landroid/widget/SimpleAdapter$ViewBinder;" />
+		<method name="setDropDownViewResource(I)V" />
+		<method name="setViewBinder(Landroid/widget/SimpleAdapter$ViewBinder;)V" />
+		<method name="setViewImage(Landroid/widget/ImageView;I)V" />
+		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V" />
+		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/widget/SimpleAdapter$ViewBinder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="setViewValue(Landroid/view/View;Ljava/lang/Object;Ljava/lang/String;)Z" />
+	</class>
+	<class name="android/widget/SimpleCursorAdapter" since="1">
+		<extends name="android/widget/ResourceCursorAdapter" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[I)V" deprecated="15" />
+		<method name="&lt;init&gt;(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[II)V" since="11" />
+		<method name="changeCursorAndColumns(Landroid/database/Cursor;[Ljava/lang/String;[I)V" since="3" />
+		<method name="getCursorToStringConverter()Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;" />
+		<method name="getStringConversionColumn()I" />
+		<method name="getViewBinder()Landroid/widget/SimpleCursorAdapter$ViewBinder;" />
+		<method name="setCursorToStringConverter(Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;)V" />
+		<method name="setStringConversionColumn(I)V" />
+		<method name="setViewBinder(Landroid/widget/SimpleCursorAdapter$ViewBinder;)V" />
+		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V" />
+		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V" />
+	</class>
+	<class name="android/widget/SimpleCursorAdapter$CursorToStringConverter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;" />
+	</class>
+	<class name="android/widget/SimpleCursorAdapter$ViewBinder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="setViewValue(Landroid/view/View;Landroid/database/Cursor;I)Z" />
+	</class>
+	<class name="android/widget/SimpleCursorTreeAdapter" since="1">
+		<extends name="android/widget/ResourceCursorTreeAdapter" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;II[Ljava/lang/String;[III[Ljava/lang/String;[I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;II[Ljava/lang/String;[II[Ljava/lang/String;[I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/database/Cursor;I[Ljava/lang/String;[II[Ljava/lang/String;[I)V" />
+		<method name="getViewBinder()Landroid/widget/SimpleCursorTreeAdapter$ViewBinder;" since="5" />
+		<method name="setViewBinder(Landroid/widget/SimpleCursorTreeAdapter$ViewBinder;)V" since="5" />
+		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V" />
+		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V" since="5" />
+	</class>
+	<class name="android/widget/SimpleCursorTreeAdapter$ViewBinder" since="5">
+		<extends name="java/lang/Object" />
+		<method name="setViewValue(Landroid/view/View;Landroid/database/Cursor;I)Z" />
+	</class>
+	<class name="android/widget/SimpleExpandableListAdapter" since="1">
+		<extends name="android/widget/BaseExpandableListAdapter" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/util/List;II[Ljava/lang/String;[ILjava/util/List;II[Ljava/lang/String;[I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/util/List;II[Ljava/lang/String;[ILjava/util/List;I[Ljava/lang/String;[I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/util/List;I[Ljava/lang/String;[ILjava/util/List;I[Ljava/lang/String;[I)V" />
+		<method name="newChildView(ZLandroid/view/ViewGroup;)Landroid/view/View;" />
+		<method name="newGroupView(ZLandroid/view/ViewGroup;)Landroid/view/View;" />
+	</class>
+	<class name="android/widget/SlidingDrawer" since="3" deprecated="17">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="animateClose()V" deprecated="29" />
+		<method name="animateOpen()V" deprecated="29" />
+		<method name="animateToggle()V" deprecated="29" />
+		<method name="close()V" deprecated="29" />
+		<method name="getContent()Landroid/view/View;" deprecated="29" />
+		<method name="getHandle()Landroid/view/View;" deprecated="29" />
+		<method name="isMoving()Z" deprecated="29" />
+		<method name="isOpened()Z" deprecated="29" />
+		<method name="lock()V" deprecated="29" />
+		<method name="open()V" deprecated="29" />
+		<method name="setOnDrawerCloseListener(Landroid/widget/SlidingDrawer$OnDrawerCloseListener;)V" deprecated="29" />
+		<method name="setOnDrawerOpenListener(Landroid/widget/SlidingDrawer$OnDrawerOpenListener;)V" deprecated="29" />
+		<method name="setOnDrawerScrollListener(Landroid/widget/SlidingDrawer$OnDrawerScrollListener;)V" deprecated="29" />
+		<method name="toggle()V" deprecated="29" />
+		<method name="unlock()V" deprecated="29" />
+		<field name="ORIENTATION_HORIZONTAL" deprecated="29" />
+		<field name="ORIENTATION_VERTICAL" deprecated="29" />
+	</class>
+	<class name="android/widget/SlidingDrawer$OnDrawerCloseListener" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onDrawerClosed()V" deprecated="29" />
+	</class>
+	<class name="android/widget/SlidingDrawer$OnDrawerOpenListener" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onDrawerOpened()V" deprecated="29" />
+	</class>
+	<class name="android/widget/SlidingDrawer$OnDrawerScrollListener" since="3" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onScrollEnded()V" deprecated="29" />
+		<method name="onScrollStarted()V" deprecated="29" />
+	</class>
+	<class name="android/widget/Space" since="14">
+		<extends name="android/view/View" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+	</class>
+	<class name="android/widget/Spinner" since="1">
+		<extends name="android/widget/AbsSpinner" />
+		<implements name="android/content/DialogInterface$OnClickListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;I)V" since="11" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="11" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;III)V" since="21" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;IIILandroid/content/res/Resources$Theme;)V" since="23" />
+		<method name="getDropDownHorizontalOffset()I" since="16" />
+		<method name="getDropDownVerticalOffset()I" since="16" />
+		<method name="getDropDownWidth()I" since="16" />
+		<method name="getGravity()I" since="16" />
+		<method name="getPopupBackground()Landroid/graphics/drawable/Drawable;" since="16" />
+		<method name="getPopupContext()Landroid/content/Context;" since="23" />
+		<method name="getPrompt()Ljava/lang/CharSequence;" />
+		<method name="setDropDownHorizontalOffset(I)V" since="16" />
+		<method name="setDropDownVerticalOffset(I)V" since="16" />
+		<method name="setDropDownWidth(I)V" since="16" />
+		<method name="setGravity(I)V" since="11" />
+		<method name="setPopupBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="16" />
+		<method name="setPopupBackgroundResource(I)V" since="16" />
+		<method name="setPrompt(Ljava/lang/CharSequence;)V" />
+		<method name="setPromptId(I)V" />
+		<field name="MODE_DIALOG" since="11" />
+		<field name="MODE_DROPDOWN" since="11" />
+	</class>
+	<class name="android/widget/SpinnerAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/Adapter" />
+		<method name="getDropDownView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;" />
+	</class>
+	<class name="android/widget/StackView" since="11">
+		<extends name="android/widget/AdapterViewAnimator" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="14" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+	</class>
+	<class name="android/widget/Switch" since="14">
+		<extends name="android/widget/CompoundButton" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getShowText()Z" since="21" />
+		<method name="getSplitTrack()Z" since="21" />
+		<method name="getSwitchMinWidth()I" since="16" />
+		<method name="getSwitchPadding()I" since="16" />
+		<method name="getTextOff()Ljava/lang/CharSequence;" />
+		<method name="getTextOn()Ljava/lang/CharSequence;" />
+		<method name="getThumbDrawable()Landroid/graphics/drawable/Drawable;" since="16" />
+		<method name="getThumbTextPadding()I" since="16" />
+		<method name="getThumbTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="23" />
+		<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="23" />
+		<method name="getTrackDrawable()Landroid/graphics/drawable/Drawable;" since="16" />
+		<method name="getTrackTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getTrackTintList()Landroid/content/res/ColorStateList;" since="23" />
+		<method name="getTrackTintMode()Landroid/graphics/PorterDuff$Mode;" since="23" />
+		<method name="setShowText(Z)V" since="21" />
+		<method name="setSplitTrack(Z)V" since="21" />
+		<method name="setSwitchMinWidth(I)V" since="16" />
+		<method name="setSwitchPadding(I)V" since="16" />
+		<method name="setSwitchTextAppearance(Landroid/content/Context;I)V" />
+		<method name="setSwitchTypeface(Landroid/graphics/Typeface;)V" />
+		<method name="setSwitchTypeface(Landroid/graphics/Typeface;I)V" />
+		<method name="setTextOff(Ljava/lang/CharSequence;)V" />
+		<method name="setTextOn(Ljava/lang/CharSequence;)V" />
+		<method name="setThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="16" />
+		<method name="setThumbIcon(Landroid/graphics/drawable/Icon;)V" since="31" />
+		<method name="setThumbResource(I)V" since="16" />
+		<method name="setThumbTextPadding(I)V" since="16" />
+		<method name="setThumbTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="23" />
+		<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23" />
+		<method name="setTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="16" />
+		<method name="setTrackIcon(Landroid/graphics/drawable/Icon;)V" since="31" />
+		<method name="setTrackResource(I)V" since="16" />
+		<method name="setTrackTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setTrackTintList(Landroid/content/res/ColorStateList;)V" since="23" />
+		<method name="setTrackTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23" />
+	</class>
+	<class name="android/widget/TabHost" since="1" deprecated="30">
+		<extends name="android/widget/FrameLayout" />
+		<implements name="android/view/ViewTreeObserver$OnTouchModeChangeListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="30" />
+		<method name="addTab(Landroid/widget/TabHost$TabSpec;)V" deprecated="30" />
+		<method name="clearAllTabs()V" deprecated="30" />
+		<method name="getCurrentTab()I" deprecated="30" />
+		<method name="getCurrentTabTag()Ljava/lang/String;" deprecated="30" />
+		<method name="getCurrentTabView()Landroid/view/View;" deprecated="30" />
+		<method name="getCurrentView()Landroid/view/View;" deprecated="30" />
+		<method name="getTabContentView()Landroid/widget/FrameLayout;" deprecated="30" />
+		<method name="getTabWidget()Landroid/widget/TabWidget;" deprecated="30" />
+		<method name="newTabSpec(Ljava/lang/String;)Landroid/widget/TabHost$TabSpec;" deprecated="30" />
+		<method name="setCurrentTab(I)V" deprecated="30" />
+		<method name="setCurrentTabByTag(Ljava/lang/String;)V" deprecated="30" />
+		<method name="setOnTabChangedListener(Landroid/widget/TabHost$OnTabChangeListener;)V" deprecated="30" />
+		<method name="setup()V" deprecated="30" />
+		<method name="setup(Landroid/app/LocalActivityManager;)V" deprecated="30" />
+	</class>
+	<class name="android/widget/TabHost$OnTabChangeListener" since="1" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="onTabChanged(Ljava/lang/String;)V" deprecated="30" />
+	</class>
+	<class name="android/widget/TabHost$TabContentFactory" since="1" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="createTabContent(Ljava/lang/String;)Landroid/view/View;" deprecated="30" />
+	</class>
+	<class name="android/widget/TabHost$TabSpec" since="1" deprecated="30">
+		<extends name="java/lang/Object" />
+		<method name="getTag()Ljava/lang/String;" since="4" deprecated="30" />
+		<method name="setContent(I)Landroid/widget/TabHost$TabSpec;" deprecated="30" />
+		<method name="setContent(Landroid/content/Intent;)Landroid/widget/TabHost$TabSpec;" deprecated="30" />
+		<method name="setContent(Landroid/widget/TabHost$TabContentFactory;)Landroid/widget/TabHost$TabSpec;" deprecated="30" />
+		<method name="setIndicator(Landroid/view/View;)Landroid/widget/TabHost$TabSpec;" since="4" deprecated="30" />
+		<method name="setIndicator(Ljava/lang/CharSequence;)Landroid/widget/TabHost$TabSpec;" deprecated="30" />
+		<method name="setIndicator(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;)Landroid/widget/TabHost$TabSpec;" deprecated="30" />
+	</class>
+	<class name="android/widget/TabWidget" since="1" deprecated="30">
+		<extends name="android/widget/LinearLayout" />
+		<implements name="android/view/View$OnFocusChangeListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="30" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="30" />
+		<method name="focusCurrentTab(I)V" deprecated="30" />
+		<method name="getChildTabViewAt(I)Landroid/view/View;" since="4" deprecated="30" />
+		<method name="getLeftStripDrawable()Landroid/graphics/drawable/Drawable;" since="24" deprecated="30" />
+		<method name="getRightStripDrawable()Landroid/graphics/drawable/Drawable;" since="24" deprecated="30" />
+		<method name="getTabCount()I" since="4" deprecated="30" />
+		<method name="isStripEnabled()Z" since="8" deprecated="30" />
+		<method name="setCurrentTab(I)V" deprecated="30" />
+		<method name="setDividerDrawable(I)V" since="4" deprecated="30" />
+		<method name="setDividerDrawable(Landroid/graphics/drawable/Drawable;)V" since="4" deprecated="30" />
+		<method name="setLeftStripDrawable(I)V" since="8" deprecated="30" />
+		<method name="setLeftStripDrawable(Landroid/graphics/drawable/Drawable;)V" since="8" deprecated="30" />
+		<method name="setRightStripDrawable(I)V" since="8" deprecated="30" />
+		<method name="setRightStripDrawable(Landroid/graphics/drawable/Drawable;)V" since="8" deprecated="30" />
+		<method name="setStripEnabled(Z)V" since="8" deprecated="30" />
+	</class>
+	<class name="android/widget/TableLayout" since="1">
+		<extends name="android/widget/LinearLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/TableLayout$LayoutParams;" />
+		<method name="isColumnCollapsed(I)Z" />
+		<method name="isColumnShrinkable(I)Z" />
+		<method name="isColumnStretchable(I)Z" />
+		<method name="isShrinkAllColumns()Z" />
+		<method name="isStretchAllColumns()Z" />
+		<method name="setColumnCollapsed(IZ)V" />
+		<method name="setColumnShrinkable(IZ)V" />
+		<method name="setColumnStretchable(IZ)V" />
+		<method name="setShrinkAllColumns(Z)V" />
+		<method name="setStretchAllColumns(Z)V" />
+	</class>
+	<class name="android/widget/TableLayout$LayoutParams" since="1">
+		<extends name="android/widget/LinearLayout$LayoutParams" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(IIF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+	</class>
+	<class name="android/widget/TableRow" since="1">
+		<extends name="android/widget/LinearLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/TableRow$LayoutParams;" />
+		<method name="getVirtualChildAt(I)Landroid/view/View;" />
+		<method name="getVirtualChildCount()I" />
+	</class>
+	<class name="android/widget/TableRow$LayoutParams" since="1">
+		<extends name="android/widget/LinearLayout$LayoutParams" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(IIF)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+		<field name="column" />
+		<field name="span" />
+	</class>
+	<class name="android/widget/TextClock" since="17">
+		<extends name="android/widget/TextView" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getFormat12Hour()Ljava/lang/CharSequence;" />
+		<method name="getFormat24Hour()Ljava/lang/CharSequence;" />
+		<method name="getTimeZone()Ljava/lang/String;" />
+		<method name="is24HourModeEnabled()Z" />
+		<method name="refreshTime()V" since="30" />
+		<method name="setFormat12Hour(Ljava/lang/CharSequence;)V" />
+		<method name="setFormat24Hour(Ljava/lang/CharSequence;)V" />
+		<method name="setTimeZone(Ljava/lang/String;)V" />
+		<field name="DEFAULT_FORMAT_12_HOUR" deprecated="18" />
+		<field name="DEFAULT_FORMAT_24_HOUR" deprecated="18" />
+	</class>
+	<class name="android/widget/TextSwitcher" since="1">
+		<extends name="android/widget/ViewSwitcher" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="setCurrentText(Ljava/lang/CharSequence;)V" />
+		<method name="setText(Ljava/lang/CharSequence;)V" />
+	</class>
+	<class name="android/widget/TextView" since="1">
+		<extends name="android/view/View" />
+		<implements name="android/view/ViewTreeObserver$OnPreDrawListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="addTextChangedListener(Landroid/text/TextWatcher;)V" />
+		<method name="append(Ljava/lang/CharSequence;)V" />
+		<method name="append(Ljava/lang/CharSequence;II)V" />
+		<method name="beginBatchEdit()V" since="3" />
+		<method name="bringPointIntoView(I)Z" since="3" />
+		<method name="clearComposingText()V" since="3" />
+		<method name="debug(I)V" />
+		<method name="didTouchFocusSelect()Z" since="3" />
+		<method name="endBatchEdit()V" since="3" />
+		<method name="extractText(Landroid/view/inputmethod/ExtractedTextRequest;Landroid/view/inputmethod/ExtractedText;)Z" since="3" />
+		<method name="getAutoLinkMask()I" />
+		<method name="getAutoSizeMaxTextSize()I" since="26" />
+		<method name="getAutoSizeMinTextSize()I" since="26" />
+		<method name="getAutoSizeStepGranularity()I" since="26" />
+		<method name="getAutoSizeTextAvailableSizes()[I" since="26" />
+		<method name="getAutoSizeTextType()I" since="26" />
+		<method name="getBreakStrategy()I" since="23" />
+		<method name="getCompoundDrawablePadding()I" />
+		<method name="getCompoundDrawableTintBlendMode()Landroid/graphics/BlendMode;" since="29" />
+		<method name="getCompoundDrawableTintList()Landroid/content/res/ColorStateList;" since="23" />
+		<method name="getCompoundDrawableTintMode()Landroid/graphics/PorterDuff$Mode;" since="23" />
+		<method name="getCompoundDrawables()[Landroid/graphics/drawable/Drawable;" />
+		<method name="getCompoundDrawablesRelative()[Landroid/graphics/drawable/Drawable;" since="17" />
+		<method name="getCompoundPaddingBottom()I" />
+		<method name="getCompoundPaddingEnd()I" since="17" />
+		<method name="getCompoundPaddingLeft()I" />
+		<method name="getCompoundPaddingRight()I" />
+		<method name="getCompoundPaddingStart()I" since="17" />
+		<method name="getCompoundPaddingTop()I" />
+		<method name="getCurrentHintTextColor()I" />
+		<method name="getCurrentTextColor()I" />
+		<method name="getCustomInsertionActionModeCallback()Landroid/view/ActionMode$Callback;" since="23" />
+		<method name="getCustomSelectionActionModeCallback()Landroid/view/ActionMode$Callback;" since="11" />
+		<method name="getDefaultEditable()Z" />
+		<method name="getDefaultMovementMethod()Landroid/text/method/MovementMethod;" />
+		<method name="getEditableText()Landroid/text/Editable;" since="3" />
+		<method name="getEllipsize()Landroid/text/TextUtils$TruncateAt;" />
+		<method name="getError()Ljava/lang/CharSequence;" />
+		<method name="getExtendedPaddingBottom()I" />
+		<method name="getExtendedPaddingTop()I" />
+		<method name="getFilters()[Landroid/text/InputFilter;" />
+		<method name="getFirstBaselineToTopHeight()I" since="28" />
+		<method name="getFontFeatureSettings()Ljava/lang/String;" since="21" />
+		<method name="getFontVariationSettings()Ljava/lang/String;" since="26" />
+		<method name="getFreezesText()Z" />
+		<method name="getGravity()I" />
+		<method name="getHighlightColor()I" since="16" />
+		<method name="getHint()Ljava/lang/CharSequence;" />
+		<method name="getHintTextColors()Landroid/content/res/ColorStateList;" />
+		<method name="getHyphenationFrequency()I" since="23" />
+		<method name="getImeActionId()I" since="3" />
+		<method name="getImeActionLabel()Ljava/lang/CharSequence;" since="3" />
+		<method name="getImeHintLocales()Landroid/os/LocaleList;" since="24" />
+		<method name="getImeOptions()I" since="3" />
+		<method name="getIncludeFontPadding()Z" since="16" />
+		<method name="getInputExtras(Z)Landroid/os/Bundle;" since="3" />
+		<method name="getInputType()I" since="3" />
+		<method name="getJustificationMode()I" since="26" />
+		<method name="getKeyListener()Landroid/text/method/KeyListener;" />
+		<method name="getLastBaselineToBottomHeight()I" since="28" />
+		<method name="getLayout()Landroid/text/Layout;" />
+		<method name="getLetterSpacing()F" since="21" />
+		<method name="getLineBounds(ILandroid/graphics/Rect;)I" />
+		<method name="getLineCount()I" />
+		<method name="getLineHeight()I" />
+		<method name="getLineSpacingExtra()F" since="16" />
+		<method name="getLineSpacingMultiplier()F" since="16" />
+		<method name="getLinkTextColors()Landroid/content/res/ColorStateList;" />
+		<method name="getLinksClickable()Z" />
+		<method name="getMarqueeRepeatLimit()I" since="16" />
+		<method name="getMaxEms()I" since="16" />
+		<method name="getMaxHeight()I" since="16" />
+		<method name="getMaxLines()I" since="16" />
+		<method name="getMaxWidth()I" since="16" />
+		<method name="getMinEms()I" since="16" />
+		<method name="getMinHeight()I" since="16" />
+		<method name="getMinLines()I" since="16" />
+		<method name="getMinWidth()I" since="16" />
+		<method name="getMovementMethod()Landroid/text/method/MovementMethod;" />
+		<method name="getOffsetForPosition(FF)I" since="14" />
+		<method name="getPaint()Landroid/text/TextPaint;" />
+		<method name="getPaintFlags()I" />
+		<method name="getPrivateImeOptions()Ljava/lang/String;" since="3" />
+		<method name="getSelectionEnd()I" />
+		<method name="getSelectionStart()I" />
+		<method name="getShadowColor()I" since="16" />
+		<method name="getShadowDx()F" since="16" />
+		<method name="getShadowDy()F" since="16" />
+		<method name="getShadowRadius()F" since="16" />
+		<method name="getShowSoftInputOnFocus()Z" since="21" />
+		<method name="getText()Ljava/lang/CharSequence;" />
+		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" since="26" />
+		<method name="getTextColor(Landroid/content/Context;Landroid/content/res/TypedArray;I)I" removed="21" />
+		<method name="getTextColors()Landroid/content/res/ColorStateList;" />
+		<method name="getTextColors(Landroid/content/Context;Landroid/content/res/TypedArray;)Landroid/content/res/ColorStateList;" removed="21" />
+		<method name="getTextCursorDrawable()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;" since="29" />
+		<method name="getTextLocale()Ljava/util/Locale;" since="17" />
+		<method name="getTextLocales()Landroid/os/LocaleList;" since="24" />
+		<method name="getTextMetricsParams()Landroid/text/PrecomputedText$Params;" since="28" />
+		<method name="getTextScaleX()F" />
+		<method name="getTextSelectHandle()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getTextSelectHandleLeft()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getTextSelectHandleRight()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getTextSize()F" />
+		<method name="getTextSizeUnit()I" since="30" />
+		<method name="getTotalPaddingBottom()I" />
+		<method name="getTotalPaddingEnd()I" since="17" />
+		<method name="getTotalPaddingLeft()I" />
+		<method name="getTotalPaddingRight()I" />
+		<method name="getTotalPaddingStart()I" since="17" />
+		<method name="getTotalPaddingTop()I" />
+		<method name="getTransformationMethod()Landroid/text/method/TransformationMethod;" />
+		<method name="getTypeface()Landroid/graphics/Typeface;" />
+		<method name="getUrls()[Landroid/text/style/URLSpan;" />
+		<method name="hasSelection()Z" />
+		<method name="isAllCaps()Z" since="28" />
+		<method name="isCursorVisible()Z" since="16" />
+		<method name="isElegantTextHeight()Z" since="28" />
+		<method name="isFallbackLineSpacing()Z" since="28" />
+		<method name="isHorizontallyScrollable()Z" since="29" />
+		<method name="isInputMethodTarget()Z" since="3" />
+		<method name="isSingleLine()Z" since="29" />
+		<method name="isSuggestionsEnabled()Z" since="14" />
+		<method name="isTextSelectable()Z" since="11" />
+		<method name="length()I" />
+		<method name="moveCursorToVisibleOffset()Z" since="3" />
+		<method name="onBeginBatchEdit()V" since="3" />
+		<method name="onCommitCompletion(Landroid/view/inputmethod/CompletionInfo;)V" since="3" />
+		<method name="onCommitCorrection(Landroid/view/inputmethod/CorrectionInfo;)V" since="11" />
+		<method name="onEditorAction(I)V" since="3" />
+		<method name="onEndBatchEdit()V" since="3" />
+		<method name="onPrivateIMECommand(Ljava/lang/String;Landroid/os/Bundle;)Z" since="3" />
+		<method name="onSelectionChanged(II)V" since="3" />
+		<method name="onTextChanged(Ljava/lang/CharSequence;III)V" />
+		<method name="onTextContextMenuItem(I)Z" since="3" />
+		<method name="removeTextChangedListener(Landroid/text/TextWatcher;)V" />
+		<method name="resetResolvedDrawables()V" since="14" removed="17" />
+		<method name="resetResolvedLayoutDirection()V" since="14" removed="16" />
+		<method name="resolveDrawables()V" since="14" removed="17" />
+		<method name="resolveTextDirection()V" since="14" removed="16" />
+		<method name="setAllCaps(Z)V" since="14" />
+		<method name="setAutoLinkMask(I)V" />
+		<method name="setAutoSizeTextTypeUniformWithConfiguration(IIII)V" since="26" />
+		<method name="setAutoSizeTextTypeUniformWithPresetSizes([II)V" since="26" />
+		<method name="setAutoSizeTextTypeWithDefaults(I)V" since="26" />
+		<method name="setBreakStrategy(I)V" since="23" />
+		<method name="setCompoundDrawablePadding(I)V" />
+		<method name="setCompoundDrawableTintBlendMode(Landroid/graphics/BlendMode;)V" since="29" />
+		<method name="setCompoundDrawableTintList(Landroid/content/res/ColorStateList;)V" since="23" />
+		<method name="setCompoundDrawableTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23" />
+		<method name="setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" since="17" />
+		<method name="setCompoundDrawablesRelativeWithIntrinsicBounds(IIII)V" since="17" />
+		<method name="setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" since="17" />
+		<method name="setCompoundDrawablesWithIntrinsicBounds(IIII)V" since="3" />
+		<method name="setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setCursorVisible(Z)V" />
+		<method name="setCustomInsertionActionModeCallback(Landroid/view/ActionMode$Callback;)V" since="23" />
+		<method name="setCustomSelectionActionModeCallback(Landroid/view/ActionMode$Callback;)V" since="11" />
+		<method name="setEditableFactory(Landroid/text/Editable$Factory;)V" />
+		<method name="setElegantTextHeight(Z)V" since="21" />
+		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)V" />
+		<method name="setEms(I)V" />
+		<method name="setError(Ljava/lang/CharSequence;)V" />
+		<method name="setError(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setExtractedText(Landroid/view/inputmethod/ExtractedText;)V" since="3" />
+		<method name="setFallbackLineSpacing(Z)V" since="28" />
+		<method name="setFilters([Landroid/text/InputFilter;)V" />
+		<method name="setFirstBaselineToTopHeight(I)V" since="28" />
+		<method name="setFontFeatureSettings(Ljava/lang/String;)V" since="21" />
+		<method name="setFontVariationSettings(Ljava/lang/String;)Z" since="26" />
+		<method name="setFrame(IIII)Z" />
+		<method name="setFreezesText(Z)V" />
+		<method name="setGravity(I)V" />
+		<method name="setHeight(I)V" />
+		<method name="setHighlightColor(I)V" />
+		<method name="setHint(I)V" />
+		<method name="setHint(Ljava/lang/CharSequence;)V" />
+		<method name="setHintTextColor(I)V" />
+		<method name="setHintTextColor(Landroid/content/res/ColorStateList;)V" />
+		<method name="setHorizontallyScrolling(Z)V" />
+		<method name="setHyphenationFrequency(I)V" since="23" />
+		<method name="setImeActionLabel(Ljava/lang/CharSequence;I)V" since="3" />
+		<method name="setImeHintLocales(Landroid/os/LocaleList;)V" since="24" />
+		<method name="setImeOptions(I)V" since="3" />
+		<method name="setIncludeFontPadding(Z)V" />
+		<method name="setInputExtras(I)V" since="3" />
+		<method name="setInputType(I)V" since="3" />
+		<method name="setJustificationMode(I)V" since="26" />
+		<method name="setKeyListener(Landroid/text/method/KeyListener;)V" />
+		<method name="setLastBaselineToBottomHeight(I)V" since="28" />
+		<method name="setLetterSpacing(F)V" since="21" />
+		<method name="setLineHeight(I)V" since="28" />
+		<method name="setLineSpacing(FF)V" />
+		<method name="setLines(I)V" />
+		<method name="setLinkTextColor(I)V" />
+		<method name="setLinkTextColor(Landroid/content/res/ColorStateList;)V" />
+		<method name="setLinksClickable(Z)V" />
+		<method name="setMarqueeRepeatLimit(I)V" since="2" />
+		<method name="setMaxEms(I)V" />
+		<method name="setMaxHeight(I)V" />
+		<method name="setMaxLines(I)V" />
+		<method name="setMaxWidth(I)V" />
+		<method name="setMinEms(I)V" />
+		<method name="setMinHeight(I)V" />
+		<method name="setMinLines(I)V" />
+		<method name="setMinWidth(I)V" />
+		<method name="setMovementMethod(Landroid/text/method/MovementMethod;)V" />
+		<method name="setOnEditorActionListener(Landroid/widget/TextView$OnEditorActionListener;)V" since="3" />
+		<method name="setPaddingRelative(IIII)V" since="16" />
+		<method name="setPaintFlags(I)V" />
+		<method name="setPrivateImeOptions(Ljava/lang/String;)V" since="3" />
+		<method name="setRawInputType(I)V" since="3" />
+		<method name="setScroller(Landroid/widget/Scroller;)V" />
+		<method name="setSelectAllOnFocus(Z)V" />
+		<method name="setShadowLayer(FFFI)V" />
+		<method name="setShowSoftInputOnFocus(Z)V" since="21" />
+		<method name="setSingleLine()V" />
+		<method name="setSingleLine(Z)V" />
+		<method name="setSpannableFactory(Landroid/text/Spannable$Factory;)V" />
+		<method name="setText(I)V" />
+		<method name="setText(ILandroid/widget/TextView$BufferType;)V" />
+		<method name="setText(Ljava/lang/CharSequence;)V" />
+		<method name="setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V" />
+		<method name="setText([CII)V" />
+		<method name="setTextAppearance(I)V" since="23" />
+		<method name="setTextAppearance(Landroid/content/Context;I)V" deprecated="23" />
+		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="26" />
+		<method name="setTextColor(I)V" />
+		<method name="setTextColor(Landroid/content/res/ColorStateList;)V" />
+		<method name="setTextCursorDrawable(I)V" since="29" />
+		<method name="setTextCursorDrawable(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setTextIsSelectable(Z)V" since="11" />
+		<method name="setTextKeepState(Ljava/lang/CharSequence;)V" />
+		<method name="setTextKeepState(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V" />
+		<method name="setTextLocale(Ljava/util/Locale;)V" since="17" />
+		<method name="setTextLocales(Landroid/os/LocaleList;)V" since="24" />
+		<method name="setTextMetricsParams(Landroid/text/PrecomputedText$Params;)V" since="28" />
+		<method name="setTextScaleX(F)V" />
+		<method name="setTextSelectHandle(I)V" since="29" />
+		<method name="setTextSelectHandle(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setTextSelectHandleLeft(I)V" since="29" />
+		<method name="setTextSelectHandleLeft(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setTextSelectHandleRight(I)V" since="29" />
+		<method name="setTextSelectHandleRight(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setTextSize(F)V" />
+		<method name="setTextSize(IF)V" />
+		<method name="setTransformationMethod(Landroid/text/method/TransformationMethod;)V" />
+		<method name="setTypeface(Landroid/graphics/Typeface;)V" />
+		<method name="setTypeface(Landroid/graphics/Typeface;I)V" />
+		<method name="setWidth(I)V" />
+		<field name="AUTO_SIZE_TEXT_TYPE_NONE" since="26" />
+		<field name="AUTO_SIZE_TEXT_TYPE_UNIFORM" since="26" />
+	</class>
+	<class name="android/widget/TextView$BufferType" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Landroid/widget/TextView$BufferType;" />
+		<method name="values()[Landroid/widget/TextView$BufferType;" />
+		<field name="EDITABLE" />
+		<field name="NORMAL" />
+		<field name="SPANNABLE" />
+	</class>
+	<class name="android/widget/TextView$OnEditorActionListener" since="3">
+		<extends name="java/lang/Object" />
+		<method name="onEditorAction(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z" />
+	</class>
+	<class name="android/widget/TextView$SavedState" since="1">
+		<extends name="android/view/View$BaseSavedState" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/widget/ThemedSpinnerAdapter" since="23">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/SpinnerAdapter" />
+		<method name="getDropDownViewTheme()Landroid/content/res/Resources$Theme;" />
+		<method name="setDropDownViewTheme(Landroid/content/res/Resources$Theme;)V" />
+	</class>
+	<class name="android/widget/TimePicker" since="1">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getCurrentHour()Ljava/lang/Integer;" deprecated="23" />
+		<method name="getCurrentMinute()Ljava/lang/Integer;" deprecated="23" />
+		<method name="getHour()I" since="23" />
+		<method name="getMinute()I" since="23" />
+		<method name="is24HourView()Z" />
+		<method name="setCurrentHour(Ljava/lang/Integer;)V" deprecated="23" />
+		<method name="setCurrentMinute(Ljava/lang/Integer;)V" deprecated="23" />
+		<method name="setHour(I)V" since="23" />
+		<method name="setIs24HourView(Ljava/lang/Boolean;)V" />
+		<method name="setMinute(I)V" since="23" />
+		<method name="setOnTimeChangedListener(Landroid/widget/TimePicker$OnTimeChangedListener;)V" />
+		<method name="validateInput()Z" since="26" />
+	</class>
+	<class name="android/widget/TimePicker$OnTimeChangedListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="onTimeChanged(Landroid/widget/TimePicker;II)V" />
+	</class>
+	<class name="android/widget/Toast" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="addCallback(Landroid/widget/Toast$Callback;)V" since="30" />
+		<method name="cancel()V" />
+		<method name="getDuration()I" />
+		<method name="getGravity()I" />
+		<method name="getHorizontalMargin()F" />
+		<method name="getVerticalMargin()F" />
+		<method name="getView()Landroid/view/View;" deprecated="30" />
+		<method name="getXOffset()I" />
+		<method name="getYOffset()I" />
+		<method name="makeText(Landroid/content/Context;II)Landroid/widget/Toast;" />
+		<method name="makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;" />
+		<method name="removeCallback(Landroid/widget/Toast$Callback;)V" since="30" />
+		<method name="setDuration(I)V" />
+		<method name="setGravity(III)V" />
+		<method name="setMargin(FF)V" />
+		<method name="setText(I)V" />
+		<method name="setText(Ljava/lang/CharSequence;)V" />
+		<method name="setView(Landroid/view/View;)V" deprecated="30" />
+		<method name="show()V" />
+		<field name="LENGTH_LONG" />
+		<field name="LENGTH_SHORT" />
+	</class>
+	<class name="android/widget/Toast$Callback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="onToastHidden()V" />
+		<method name="onToastShown()V" />
+	</class>
+	<class name="android/widget/ToggleButton" since="1">
+		<extends name="android/widget/CompoundButton" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="getDisabledAlpha()F" since="29" />
+		<method name="getTextOff()Ljava/lang/CharSequence;" />
+		<method name="getTextOn()Ljava/lang/CharSequence;" />
+		<method name="setTextOff(Ljava/lang/CharSequence;)V" />
+		<method name="setTextOn(Ljava/lang/CharSequence;)V" />
+	</class>
+	<class name="android/widget/Toolbar" since="21">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" />
+		<method name="collapseActionView()V" />
+		<method name="dismissPopupMenus()V" />
+		<method name="generateDefaultLayoutParams()Landroid/widget/Toolbar$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/Toolbar$LayoutParams;" />
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/Toolbar$LayoutParams;" />
+		<method name="getCollapseContentDescription()Ljava/lang/CharSequence;" since="29" />
+		<method name="getCollapseIcon()Landroid/graphics/drawable/Drawable;" since="29" />
+		<method name="getContentInsetEnd()I" />
+		<method name="getContentInsetEndWithActions()I" since="24" />
+		<method name="getContentInsetLeft()I" />
+		<method name="getContentInsetRight()I" />
+		<method name="getContentInsetStart()I" />
+		<method name="getContentInsetStartWithNavigation()I" since="24" />
+		<method name="getCurrentContentInsetEnd()I" since="24" />
+		<method name="getCurrentContentInsetLeft()I" since="24" />
+		<method name="getCurrentContentInsetRight()I" since="24" />
+		<method name="getCurrentContentInsetStart()I" since="24" />
+		<method name="getLogo()Landroid/graphics/drawable/Drawable;" />
+		<method name="getLogoDescription()Ljava/lang/CharSequence;" />
+		<method name="getMenu()Landroid/view/Menu;" />
+		<method name="getNavigationContentDescription()Ljava/lang/CharSequence;" />
+		<method name="getNavigationIcon()Landroid/graphics/drawable/Drawable;" />
+		<method name="getOverflowIcon()Landroid/graphics/drawable/Drawable;" since="23" />
+		<method name="getPopupTheme()I" />
+		<method name="getSubtitle()Ljava/lang/CharSequence;" />
+		<method name="getTitle()Ljava/lang/CharSequence;" />
+		<method name="getTitleMarginBottom()I" since="24" />
+		<method name="getTitleMarginEnd()I" since="24" />
+		<method name="getTitleMarginStart()I" since="24" />
+		<method name="getTitleMarginTop()I" since="24" />
+		<method name="hasExpandedActionView()Z" />
+		<method name="hideOverflowMenu()Z" />
+		<method name="inflateMenu(I)V" />
+		<method name="isOverflowMenuShowing()Z" />
+		<method name="setCollapseContentDescription(I)V" since="29" />
+		<method name="setCollapseContentDescription(Ljava/lang/CharSequence;)V" since="29" />
+		<method name="setCollapseIcon(I)V" since="29" />
+		<method name="setCollapseIcon(Landroid/graphics/drawable/Drawable;)V" since="29" />
+		<method name="setContentInsetEndWithActions(I)V" since="24" />
+		<method name="setContentInsetStartWithNavigation(I)V" since="24" />
+		<method name="setContentInsetsAbsolute(II)V" />
+		<method name="setContentInsetsRelative(II)V" />
+		<method name="setLogo(I)V" />
+		<method name="setLogo(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setLogoDescription(I)V" />
+		<method name="setLogoDescription(Ljava/lang/CharSequence;)V" />
+		<method name="setNavigationContentDescription(I)V" />
+		<method name="setNavigationContentDescription(Ljava/lang/CharSequence;)V" />
+		<method name="setNavigationIcon(I)V" />
+		<method name="setNavigationIcon(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setNavigationOnClickListener(Landroid/view/View$OnClickListener;)V" />
+		<method name="setOnMenuItemClickListener(Landroid/widget/Toolbar$OnMenuItemClickListener;)V" />
+		<method name="setOverflowIcon(Landroid/graphics/drawable/Drawable;)V" since="23" />
+		<method name="setPopupTheme(I)V" />
+		<method name="setSubtitle(I)V" />
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V" />
+		<method name="setSubtitleTextAppearance(Landroid/content/Context;I)V" />
+		<method name="setSubtitleTextColor(I)V" />
+		<method name="setTitle(I)V" />
+		<method name="setTitle(Ljava/lang/CharSequence;)V" />
+		<method name="setTitleMargin(IIII)V" since="24" />
+		<method name="setTitleMarginBottom(I)V" since="24" />
+		<method name="setTitleMarginEnd(I)V" since="24" />
+		<method name="setTitleMarginStart(I)V" since="24" />
+		<method name="setTitleMarginTop(I)V" since="24" />
+		<method name="setTitleTextAppearance(Landroid/content/Context;I)V" />
+		<method name="setTitleTextColor(I)V" />
+		<method name="showOverflowMenu()Z" />
+	</class>
+	<class name="android/widget/Toolbar$LayoutParams" since="21">
+		<extends name="android/app/ActionBar$LayoutParams" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(Landroid/app/ActionBar$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$MarginLayoutParams;)V" />
+		<method name="&lt;init&gt;(Landroid/widget/Toolbar$LayoutParams;)V" />
+	</class>
+	<class name="android/widget/Toolbar$OnMenuItemClickListener" since="21">
+		<extends name="java/lang/Object" />
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z" />
+	</class>
+	<class name="android/widget/TwoLineListItem" since="1" deprecated="17">
+		<extends name="android/widget/RelativeLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="getText1()Landroid/widget/TextView;" deprecated="29" />
+		<method name="getText2()Landroid/widget/TextView;" deprecated="29" />
+	</class>
+	<class name="android/widget/VideoView" since="1">
+		<extends name="android/view/SurfaceView" />
+		<implements name="android/widget/MediaController$MediaPlayerControl" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" />
+		<method name="addSubtitleSource(Ljava/io/InputStream;Landroid/media/MediaFormat;)V" since="19" />
+		<method name="resolveAdjustedSize(II)I" />
+		<method name="resume()V" since="8" />
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="26" />
+		<method name="setAudioFocusRequest(I)V" since="26" />
+		<method name="setMediaController(Landroid/widget/MediaController;)V" />
+		<method name="setOnCompletionListener(Landroid/media/MediaPlayer$OnCompletionListener;)V" />
+		<method name="setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V" />
+		<method name="setOnInfoListener(Landroid/media/MediaPlayer$OnInfoListener;)V" since="17" />
+		<method name="setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V" />
+		<method name="setVideoPath(Ljava/lang/String;)V" />
+		<method name="setVideoURI(Landroid/net/Uri;)V" />
+		<method name="setVideoURI(Landroid/net/Uri;Ljava/util/Map;)V" since="21" />
+		<method name="stopPlayback()V" />
+		<method name="suspend()V" since="8" />
+	</class>
+	<class name="android/widget/ViewAnimator" since="1">
+		<extends name="android/widget/FrameLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getAnimateFirstView()Z" since="17" />
+		<method name="getCurrentView()Landroid/view/View;" />
+		<method name="getDisplayedChild()I" />
+		<method name="getInAnimation()Landroid/view/animation/Animation;" />
+		<method name="getOutAnimation()Landroid/view/animation/Animation;" />
+		<method name="setAnimateFirstView(Z)V" />
+		<method name="setDisplayedChild(I)V" />
+		<method name="setInAnimation(Landroid/content/Context;I)V" />
+		<method name="setInAnimation(Landroid/view/animation/Animation;)V" />
+		<method name="setOutAnimation(Landroid/content/Context;I)V" />
+		<method name="setOutAnimation(Landroid/view/animation/Animation;)V" />
+		<method name="showNext()V" />
+		<method name="showPrevious()V" />
+	</class>
+	<class name="android/widget/ViewFlipper" since="1">
+		<extends name="android/widget/ViewAnimator" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getFlipInterval()I" since="29" />
+		<method name="isAutoStart()Z" since="7" />
+		<method name="isFlipping()Z" />
+		<method name="setAutoStart(Z)V" since="7" />
+		<method name="setFlipInterval(I)V" />
+		<method name="startFlipping()V" />
+		<method name="stopFlipping()V" />
+	</class>
+	<class name="android/widget/ViewSwitcher" since="1">
+		<extends name="android/widget/ViewAnimator" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="getNextView()Landroid/view/View;" />
+		<method name="reset()V" />
+		<method name="setFactory(Landroid/widget/ViewSwitcher$ViewFactory;)V" />
+	</class>
+	<class name="android/widget/ViewSwitcher$ViewFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="makeView()Landroid/view/View;" />
+	</class>
+	<class name="android/widget/WrapperListAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="android/widget/ListAdapter" />
+		<method name="getWrappedAdapter()Landroid/widget/ListAdapter;" />
+	</class>
+	<class name="android/widget/ZoomButton" since="1" deprecated="26">
+		<extends name="android/widget/ImageButton" />
+		<implements name="android/view/View$OnLongClickListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29" />
+		<method name="setZoomSpeed(J)V" deprecated="29" />
+	</class>
+	<class name="android/widget/ZoomButtonsController" since="4" deprecated="26">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/View$OnTouchListener" />
+		<method name="&lt;init&gt;(Landroid/view/View;)V" deprecated="29" />
+		<method name="getContainer()Landroid/view/ViewGroup;" deprecated="29" />
+		<method name="getZoomControls()Landroid/view/View;" deprecated="29" />
+		<method name="isAutoDismissed()Z" deprecated="29" />
+		<method name="isVisible()Z" deprecated="29" />
+		<method name="setAutoDismissed(Z)V" deprecated="29" />
+		<method name="setFocusable(Z)V" deprecated="29" />
+		<method name="setOnZoomListener(Landroid/widget/ZoomButtonsController$OnZoomListener;)V" deprecated="29" />
+		<method name="setVisible(Z)V" deprecated="29" />
+		<method name="setZoomInEnabled(Z)V" deprecated="29" />
+		<method name="setZoomOutEnabled(Z)V" deprecated="29" />
+		<method name="setZoomSpeed(J)V" deprecated="29" />
+	</class>
+	<class name="android/widget/ZoomButtonsController$OnZoomListener" since="4" deprecated="29">
+		<extends name="java/lang/Object" />
+		<method name="onVisibilityChanged(Z)V" deprecated="29" />
+		<method name="onZoom(Z)V" deprecated="29" />
+	</class>
+	<class name="android/widget/ZoomControls" since="1" deprecated="29">
+		<extends name="android/widget/LinearLayout" />
+		<method name="&lt;init&gt;(Landroid/content/Context;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29" />
+		<method name="hide()V" deprecated="29" />
+		<method name="setIsZoomInEnabled(Z)V" deprecated="29" />
+		<method name="setIsZoomOutEnabled(Z)V" deprecated="29" />
+		<method name="setOnZoomInClickListener(Landroid/view/View$OnClickListener;)V" deprecated="29" />
+		<method name="setOnZoomOutClickListener(Landroid/view/View$OnClickListener;)V" deprecated="29" />
+		<method name="setZoomSpeed(J)V" deprecated="29" />
+		<method name="show()V" deprecated="29" />
+	</class>
+	<class name="android/widget/inline/InlineContentView" since="30">
+		<extends name="android/view/ViewGroup" />
+		<method name="getSurfaceControl()Landroid/view/SurfaceControl;" />
+		<method name="isZOrderedOnTop()Z" />
+		<method name="setSurfaceControlCallback(Landroid/widget/inline/InlineContentView$SurfaceControlCallback;)V" />
+		<method name="setZOrderedOnTop(Z)Z" />
+	</class>
+	<class name="android/widget/inline/InlineContentView$SurfaceControlCallback" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onCreated(Landroid/view/SurfaceControl;)V" />
+		<method name="onDestroyed(Landroid/view/SurfaceControl;)V" />
+	</class>
+	<class name="android/widget/inline/InlinePresentationSpec" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getMaxSize()Landroid/util/Size;" />
+		<method name="getMinSize()Landroid/util/Size;" />
+		<method name="getStyle()Landroid/os/Bundle;" />
+		<field name="CREATOR" />
+	</class>
+	<class name="android/widget/inline/InlinePresentationSpec$Builder" since="30">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Landroid/util/Size;Landroid/util/Size;)V" />
+		<method name="build()Landroid/widget/inline/InlinePresentationSpec;" />
+		<method name="setStyle(Landroid/os/Bundle;)Landroid/widget/inline/InlinePresentationSpec$Builder;" />
+	</class>
+	<class name="android/window/SplashScreen" since="31">
+		<extends name="java/lang/Object" />
+		<method name="clearOnExitAnimationListener()V" />
+		<method name="setOnExitAnimationListener(Landroid/window/SplashScreen$OnExitAnimationListener;)V" />
+		<method name="setSplashScreenTheme(I)V" />
+	</class>
+	<class name="android/window/SplashScreen$OnExitAnimationListener" since="31">
+		<extends name="java/lang/Object" />
+		<method name="onSplashScreenExit(Landroid/window/SplashScreenView;)V" />
+	</class>
+	<class name="android/window/SplashScreenView" since="31">
+		<extends name="android/widget/FrameLayout" />
+		<method name="getIconAnimationDuration()Ljava/time/Duration;" />
+		<method name="getIconAnimationStart()Ljava/time/Instant;" />
+		<method name="getIconView()Landroid/view/View;" />
+		<method name="remove()V" />
+	</class>
+	<class name="com/android/internal/util/Predicate" since="1" deprecated="26" removed="28">
+		<extends name="java/lang/Object" />
+		<method name="apply(Ljava/lang/Object;)Z" />
+	</class>
+	<class name="com/google/android/maps/GeoPoint" since="1" removed="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getLatitudeE6()I" />
+		<method name="getLongitudeE6()I" />
+	</class>
+	<class name="com/google/android/maps/ItemizedOverlay" since="1" removed="3">
+		<extends name="com/google/android/maps/Overlay" />
+		<method name="&lt;init&gt;(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="boundCenter(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;" />
+		<method name="boundCenterBottom(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;" />
+		<method name="createItem(I)Lcom/google/android/maps/OverlayItem;" />
+		<method name="getCenter()Lcom/google/android/maps/GeoPoint;" />
+		<method name="getFocus()Lcom/google/android/maps/OverlayItem;" />
+		<method name="getIndexToDraw(I)I" />
+		<method name="getItem(I)Lcom/google/android/maps/OverlayItem;" />
+		<method name="getLastFocusedIndex()I" />
+		<method name="getLatSpanE6()I" />
+		<method name="getLonSpanE6()I" />
+		<method name="hitTest(Lcom/google/android/maps/OverlayItem;Landroid/graphics/drawable/Drawable;II)Z" />
+		<method name="nextFocus(Z)Lcom/google/android/maps/OverlayItem;" />
+		<method name="onTap(I)Z" />
+		<method name="populate()V" />
+		<method name="setDrawFocusedItem(Z)V" />
+		<method name="setFocus(Lcom/google/android/maps/OverlayItem;)V" />
+		<method name="setLastFocusedIndex(I)V" />
+		<method name="setOnFocusChangeListener(Lcom/google/android/maps/ItemizedOverlay$OnFocusChangeListener;)V" />
+		<method name="size()I" />
+	</class>
+	<class name="com/google/android/maps/ItemizedOverlay$OnFocusChangeListener" since="1" removed="3">
+		<extends name="java/lang/Object" />
+		<method name="onFocusChanged(Lcom/google/android/maps/ItemizedOverlay;Lcom/google/android/maps/OverlayItem;)V" />
+	</class>
+	<class name="com/google/android/maps/MapActivity" since="1" removed="3">
+		<extends name="android/app/Activity" />
+		<method name="&lt;init&gt;()V" />
+		<method name="isLocationDisplayed()Z" />
+		<method name="isRouteDisplayed()Z" />
+	</class>
+	<class name="com/google/android/maps/MapController" since="1" removed="3">
+		<extends name="java/lang/Object" />
+		<implements name="android/view/View$OnKeyListener" />
+		<method name="animateTo(Lcom/google/android/maps/GeoPoint;)V" />
+		<method name="animateTo(Lcom/google/android/maps/GeoPoint;Landroid/os/Message;)V" />
+		<method name="animateTo(Lcom/google/android/maps/GeoPoint;Ljava/lang/Runnable;)V" />
+		<method name="scrollBy(II)V" />
+		<method name="setCenter(Lcom/google/android/maps/GeoPoint;)V" />
+		<method name="setZoom(I)I" />
+		<method name="stopAnimation(Z)V" />
+		<method name="stopPanning()V" />
+		<method name="zoomIn()Z" />
+		<method name="zoomInFixing(II)Z" />
+		<method name="zoomOut()Z" />
+		<method name="zoomOutFixing(II)Z" />
+		<method name="zoomToSpan(II)V" />
+	</class>
+	<class name="com/google/android/maps/MapView" since="1" removed="3">
+		<extends name="android/view/ViewGroup" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;I)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" />
+		<method name="canCoverCenter()Z" />
+		<method name="displayZoomControls(Z)V" />
+		<method name="generateDefaultLayoutParams()Lcom/google/android/maps/MapView$LayoutParams;" />
+		<method name="getController()Lcom/google/android/maps/MapController;" />
+		<method name="getLatitudeSpan()I" />
+		<method name="getLongitudeSpan()I" />
+		<method name="getMapCenter()Lcom/google/android/maps/GeoPoint;" />
+		<method name="getMaxZoomLevel()I" />
+		<method name="getOverlays()Ljava/util/List;" />
+		<method name="getProjection()Lcom/google/android/maps/Projection;" />
+		<method name="getZoomControls()Landroid/view/View;" />
+		<method name="getZoomLevel()I" />
+		<method name="isSatellite()Z" />
+		<method name="isStreetView()Z" />
+		<method name="isTraffic()Z" />
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V" />
+		<method name="onSaveInstanceState(Landroid/os/Bundle;)V" />
+		<method name="preLoad()V" />
+		<method name="setReticleDrawMode(Lcom/google/android/maps/MapView$ReticleDrawMode;)V" />
+		<method name="setSatellite(Z)V" />
+		<method name="setStreetView(Z)V" />
+		<method name="setTraffic(Z)V" />
+	</class>
+	<class name="com/google/android/maps/MapView$LayoutParams" since="1" removed="3">
+		<extends name="android/view/ViewGroup$LayoutParams" />
+		<method name="&lt;init&gt;(IIIII)V" />
+		<method name="&lt;init&gt;(IILcom/google/android/maps/GeoPoint;I)V" />
+		<method name="&lt;init&gt;(IILcom/google/android/maps/GeoPoint;III)V" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/util/AttributeSet;)V" />
+		<method name="&lt;init&gt;(Landroid/view/ViewGroup$LayoutParams;)V" />
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;" />
+		<field name="BOTTOM" />
+		<field name="BOTTOM_CENTER" />
+		<field name="CENTER" />
+		<field name="CENTER_HORIZONTAL" />
+		<field name="CENTER_VERTICAL" />
+		<field name="LEFT" />
+		<field name="MODE_MAP" />
+		<field name="MODE_VIEW" />
+		<field name="RIGHT" />
+		<field name="TOP" />
+		<field name="TOP_LEFT" />
+		<field name="alignment" />
+		<field name="mode" />
+		<field name="point" />
+		<field name="x" />
+		<field name="y" />
+	</class>
+	<class name="com/google/android/maps/MapView$ReticleDrawMode" since="1" removed="3">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Lcom/google/android/maps/MapView$ReticleDrawMode;" />
+		<method name="values()[Lcom/google/android/maps/MapView$ReticleDrawMode;" />
+		<field name="DRAW_RETICLE_NEVER" />
+		<field name="DRAW_RETICLE_OVER" />
+		<field name="DRAW_RETICLE_UNDER" />
+	</class>
+	<class name="com/google/android/maps/MyLocationOverlay" since="1" removed="3">
+		<extends name="com/google/android/maps/Overlay" />
+		<implements name="android/hardware/SensorListener" />
+		<implements name="android/location/LocationListener" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Lcom/google/android/maps/MapView;)V" />
+		<method name="disableCompass()V" />
+		<method name="disableMyLocation()V" />
+		<method name="dispatchTap()Z" />
+		<method name="drawCompass(Landroid/graphics/Canvas;F)V" />
+		<method name="drawMyLocation(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;Landroid/location/Location;Lcom/google/android/maps/GeoPoint;J)V" />
+		<method name="enableCompass()Z" />
+		<method name="enableMyLocation()Z" />
+		<method name="getLastFix()Landroid/location/Location;" />
+		<method name="getMyLocation()Lcom/google/android/maps/GeoPoint;" />
+		<method name="getOrientation()F" />
+		<method name="isCompassEnabled()Z" />
+		<method name="isMyLocationEnabled()Z" />
+		<method name="runOnFirstFix(Ljava/lang/Runnable;)Z" />
+	</class>
+	<class name="com/google/android/maps/Overlay" since="1" removed="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="draw(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;Z)V" />
+		<method name="draw(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;ZJ)Z" />
+		<method name="drawAt(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIZ)V" />
+		<method name="onKeyDown(ILandroid/view/KeyEvent;Lcom/google/android/maps/MapView;)Z" />
+		<method name="onKeyUp(ILandroid/view/KeyEvent;Lcom/google/android/maps/MapView;)Z" />
+		<method name="onTap(Lcom/google/android/maps/GeoPoint;Lcom/google/android/maps/MapView;)Z" />
+		<method name="onTouchEvent(Landroid/view/MotionEvent;Lcom/google/android/maps/MapView;)Z" />
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;Lcom/google/android/maps/MapView;)Z" />
+		<field name="SHADOW_X_SKEW" />
+		<field name="SHADOW_Y_SCALE" />
+	</class>
+	<class name="com/google/android/maps/OverlayItem" since="1" removed="3">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lcom/google/android/maps/GeoPoint;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getMarker(I)Landroid/graphics/drawable/Drawable;" />
+		<method name="getPoint()Lcom/google/android/maps/GeoPoint;" />
+		<method name="getSnippet()Ljava/lang/String;" />
+		<method name="getTitle()Ljava/lang/String;" />
+		<method name="routableAddress()Ljava/lang/String;" />
+		<method name="setMarker(Landroid/graphics/drawable/Drawable;)V" />
+		<method name="setState(Landroid/graphics/drawable/Drawable;I)V" />
+		<field name="ITEM_STATE_FOCUSED_MASK" />
+		<field name="ITEM_STATE_PRESSED_MASK" />
+		<field name="ITEM_STATE_SELECTED_MASK" />
+		<field name="mMarker" />
+		<field name="mPoint" />
+		<field name="mSnippet" />
+		<field name="mTitle" />
+	</class>
+	<class name="com/google/android/maps/Projection" since="1" removed="3">
+		<extends name="java/lang/Object" />
+		<method name="fromPixels(II)Lcom/google/android/maps/GeoPoint;" />
+		<method name="metersToEquatorPixels(F)F" />
+		<method name="toPixels(Lcom/google/android/maps/GeoPoint;Landroid/graphics/Point;)Landroid/graphics/Point;" />
+	</class>
+	<class name="com/google/android/maps/TrackballGestureDetector" since="1" removed="3">
+		<extends name="java/lang/Object" />
+		<method name="analyze(Landroid/view/MotionEvent;)V" />
+		<method name="getCurrentDownX()F" />
+		<method name="getCurrentDownY()F" />
+		<method name="getFirstDownX()F" />
+		<method name="getFirstDownY()F" />
+		<method name="isDoubleTap()Z" />
+		<method name="isScroll()Z" />
+		<method name="isTap()Z" />
+		<method name="registerLongPressCallback(Ljava/lang/Runnable;)V" />
+		<method name="scrollX()F" />
+		<method name="scrollY()F" />
+	</class>
+	<class name="dalvik/annotation/TestTarget" since="1" deprecated="14">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="conceptName()Ljava/lang/String;" since="3" deprecated="29" />
+		<method name="methodArgs()[Ljava/lang/Class;" deprecated="29" />
+		<method name="methodName()Ljava/lang/String;" deprecated="29" />
+	</class>
+	<class name="dalvik/annotation/TestTargetClass" since="1" deprecated="14">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="value()Ljava/lang/Class;" deprecated="29" />
+	</class>
+	<class name="dalvik/bytecode/OpcodeInfo" since="11">
+		<extends name="java/lang/Object" />
+		<field name="MAXIMUM_PACKED_VALUE" />
+		<field name="MAXIMUM_VALUE" />
+	</class>
+	<class name="dalvik/bytecode/Opcodes" since="1">
+		<extends name="java/lang/Object" />
+		<field name="OP_ADD_DOUBLE" />
+		<field name="OP_ADD_DOUBLE_2ADDR" />
+		<field name="OP_ADD_FLOAT" />
+		<field name="OP_ADD_FLOAT_2ADDR" />
+		<field name="OP_ADD_INT" />
+		<field name="OP_ADD_INT_2ADDR" />
+		<field name="OP_ADD_INT_LIT16" />
+		<field name="OP_ADD_INT_LIT8" />
+		<field name="OP_ADD_LONG" />
+		<field name="OP_ADD_LONG_2ADDR" />
+		<field name="OP_AGET" />
+		<field name="OP_AGET_BOOLEAN" />
+		<field name="OP_AGET_BYTE" />
+		<field name="OP_AGET_CHAR" />
+		<field name="OP_AGET_OBJECT" />
+		<field name="OP_AGET_SHORT" />
+		<field name="OP_AGET_WIDE" />
+		<field name="OP_AND_INT" />
+		<field name="OP_AND_INT_2ADDR" />
+		<field name="OP_AND_INT_LIT16" />
+		<field name="OP_AND_INT_LIT8" />
+		<field name="OP_AND_LONG" />
+		<field name="OP_AND_LONG_2ADDR" />
+		<field name="OP_APUT" />
+		<field name="OP_APUT_BOOLEAN" />
+		<field name="OP_APUT_BYTE" />
+		<field name="OP_APUT_CHAR" />
+		<field name="OP_APUT_OBJECT" />
+		<field name="OP_APUT_SHORT" />
+		<field name="OP_APUT_WIDE" />
+		<field name="OP_ARRAY_LENGTH" />
+		<field name="OP_BREAKPOINT" since="8" deprecated="15" />
+		<field name="OP_CHECK_CAST" />
+		<field name="OP_CHECK_CAST_JUMBO" since="11" />
+		<field name="OP_CMPG_DOUBLE" />
+		<field name="OP_CMPG_FLOAT" />
+		<field name="OP_CMPL_DOUBLE" />
+		<field name="OP_CMPL_FLOAT" />
+		<field name="OP_CMP_LONG" />
+		<field name="OP_CONST" />
+		<field name="OP_CONST_16" />
+		<field name="OP_CONST_4" />
+		<field name="OP_CONST_CLASS" />
+		<field name="OP_CONST_CLASS_JUMBO" since="11" />
+		<field name="OP_CONST_HIGH16" />
+		<field name="OP_CONST_METHOD_HANDLE" since="28" />
+		<field name="OP_CONST_METHOD_TYPE" since="28" />
+		<field name="OP_CONST_STRING" />
+		<field name="OP_CONST_STRING_JUMBO" />
+		<field name="OP_CONST_WIDE" />
+		<field name="OP_CONST_WIDE_16" />
+		<field name="OP_CONST_WIDE_32" />
+		<field name="OP_CONST_WIDE_HIGH16" />
+		<field name="OP_DIV_DOUBLE" />
+		<field name="OP_DIV_DOUBLE_2ADDR" />
+		<field name="OP_DIV_FLOAT" />
+		<field name="OP_DIV_FLOAT_2ADDR" />
+		<field name="OP_DIV_INT" />
+		<field name="OP_DIV_INT_2ADDR" />
+		<field name="OP_DIV_INT_LIT16" />
+		<field name="OP_DIV_INT_LIT8" />
+		<field name="OP_DIV_LONG" />
+		<field name="OP_DIV_LONG_2ADDR" />
+		<field name="OP_DOUBLE_TO_FLOAT" />
+		<field name="OP_DOUBLE_TO_INT" />
+		<field name="OP_DOUBLE_TO_LONG" />
+		<field name="OP_EXECUTE_INLINE" deprecated="15" />
+		<field name="OP_EXECUTE_INLINE_RANGE" since="8" deprecated="15" />
+		<field name="OP_FILLED_NEW_ARRAY" />
+		<field name="OP_FILLED_NEW_ARRAY_JUMBO" since="11" />
+		<field name="OP_FILLED_NEW_ARRAY_RANGE" />
+		<field name="OP_FILL_ARRAY_DATA" />
+		<field name="OP_FLOAT_TO_DOUBLE" />
+		<field name="OP_FLOAT_TO_INT" />
+		<field name="OP_FLOAT_TO_LONG" />
+		<field name="OP_GOTO" />
+		<field name="OP_GOTO_16" />
+		<field name="OP_GOTO_32" />
+		<field name="OP_IF_EQ" />
+		<field name="OP_IF_EQZ" />
+		<field name="OP_IF_GE" />
+		<field name="OP_IF_GEZ" />
+		<field name="OP_IF_GT" />
+		<field name="OP_IF_GTZ" />
+		<field name="OP_IF_LE" />
+		<field name="OP_IF_LEZ" />
+		<field name="OP_IF_LT" />
+		<field name="OP_IF_LTZ" />
+		<field name="OP_IF_NE" />
+		<field name="OP_IF_NEZ" />
+		<field name="OP_IGET" />
+		<field name="OP_IGET_BOOLEAN" />
+		<field name="OP_IGET_BOOLEAN_JUMBO" since="11" />
+		<field name="OP_IGET_BYTE" />
+		<field name="OP_IGET_BYTE_JUMBO" since="11" />
+		<field name="OP_IGET_CHAR" />
+		<field name="OP_IGET_CHAR_JUMBO" since="11" />
+		<field name="OP_IGET_JUMBO" since="11" />
+		<field name="OP_IGET_OBJECT" />
+		<field name="OP_IGET_OBJECT_JUMBO" since="11" />
+		<field name="OP_IGET_OBJECT_QUICK" deprecated="15" />
+		<field name="OP_IGET_QUICK" deprecated="15" />
+		<field name="OP_IGET_SHORT" />
+		<field name="OP_IGET_SHORT_JUMBO" since="11" />
+		<field name="OP_IGET_WIDE" />
+		<field name="OP_IGET_WIDE_JUMBO" since="11" />
+		<field name="OP_IGET_WIDE_QUICK" deprecated="15" />
+		<field name="OP_IGET_WIDE_VOLATILE" since="9" deprecated="15" />
+		<field name="OP_INSTANCE_OF" />
+		<field name="OP_INSTANCE_OF_JUMBO" since="11" />
+		<field name="OP_INT_TO_BYTE" />
+		<field name="OP_INT_TO_CHAR" />
+		<field name="OP_INT_TO_DOUBLE" />
+		<field name="OP_INT_TO_FLOAT" />
+		<field name="OP_INT_TO_LONG" />
+		<field name="OP_INT_TO_SHORT" />
+		<field name="OP_INVOKE_CUSTOM" since="26" />
+		<field name="OP_INVOKE_CUSTOM_RANGE" since="26" />
+		<field name="OP_INVOKE_DIRECT" />
+		<field name="OP_INVOKE_DIRECT_EMPTY" deprecated="15" />
+		<field name="OP_INVOKE_DIRECT_JUMBO" since="11" />
+		<field name="OP_INVOKE_DIRECT_RANGE" />
+		<field name="OP_INVOKE_INTERFACE" />
+		<field name="OP_INVOKE_INTERFACE_JUMBO" since="11" />
+		<field name="OP_INVOKE_INTERFACE_RANGE" />
+		<field name="OP_INVOKE_POLYMORPHIC" since="26" />
+		<field name="OP_INVOKE_POLYMORPHIC_RANGE" since="26" />
+		<field name="OP_INVOKE_STATIC" />
+		<field name="OP_INVOKE_STATIC_JUMBO" since="11" />
+		<field name="OP_INVOKE_STATIC_RANGE" />
+		<field name="OP_INVOKE_SUPER" />
+		<field name="OP_INVOKE_SUPER_JUMBO" since="11" />
+		<field name="OP_INVOKE_SUPER_QUICK" deprecated="15" />
+		<field name="OP_INVOKE_SUPER_QUICK_RANGE" deprecated="15" />
+		<field name="OP_INVOKE_SUPER_RANGE" />
+		<field name="OP_INVOKE_VIRTUAL" />
+		<field name="OP_INVOKE_VIRTUAL_JUMBO" since="11" />
+		<field name="OP_INVOKE_VIRTUAL_QUICK" deprecated="15" />
+		<field name="OP_INVOKE_VIRTUAL_QUICK_RANGE" deprecated="15" />
+		<field name="OP_INVOKE_VIRTUAL_RANGE" />
+		<field name="OP_IPUT" />
+		<field name="OP_IPUT_BOOLEAN" />
+		<field name="OP_IPUT_BOOLEAN_JUMBO" since="11" />
+		<field name="OP_IPUT_BYTE" />
+		<field name="OP_IPUT_BYTE_JUMBO" since="11" />
+		<field name="OP_IPUT_CHAR" />
+		<field name="OP_IPUT_CHAR_JUMBO" since="11" />
+		<field name="OP_IPUT_JUMBO" since="11" />
+		<field name="OP_IPUT_OBJECT" />
+		<field name="OP_IPUT_OBJECT_JUMBO" since="11" />
+		<field name="OP_IPUT_OBJECT_QUICK" deprecated="15" />
+		<field name="OP_IPUT_QUICK" deprecated="15" />
+		<field name="OP_IPUT_SHORT" />
+		<field name="OP_IPUT_SHORT_JUMBO" since="11" />
+		<field name="OP_IPUT_WIDE" />
+		<field name="OP_IPUT_WIDE_JUMBO" since="11" />
+		<field name="OP_IPUT_WIDE_QUICK" deprecated="15" />
+		<field name="OP_IPUT_WIDE_VOLATILE" since="9" deprecated="15" />
+		<field name="OP_LONG_TO_DOUBLE" />
+		<field name="OP_LONG_TO_FLOAT" />
+		<field name="OP_LONG_TO_INT" />
+		<field name="OP_MONITOR_ENTER" />
+		<field name="OP_MONITOR_EXIT" />
+		<field name="OP_MOVE" />
+		<field name="OP_MOVE_16" />
+		<field name="OP_MOVE_EXCEPTION" />
+		<field name="OP_MOVE_FROM16" />
+		<field name="OP_MOVE_OBJECT" />
+		<field name="OP_MOVE_OBJECT_16" />
+		<field name="OP_MOVE_OBJECT_FROM16" />
+		<field name="OP_MOVE_RESULT" />
+		<field name="OP_MOVE_RESULT_OBJECT" />
+		<field name="OP_MOVE_RESULT_WIDE" />
+		<field name="OP_MOVE_WIDE" />
+		<field name="OP_MOVE_WIDE_16" />
+		<field name="OP_MOVE_WIDE_FROM16" />
+		<field name="OP_MUL_DOUBLE" />
+		<field name="OP_MUL_DOUBLE_2ADDR" />
+		<field name="OP_MUL_FLOAT" />
+		<field name="OP_MUL_FLOAT_2ADDR" />
+		<field name="OP_MUL_INT" />
+		<field name="OP_MUL_INT_2ADDR" />
+		<field name="OP_MUL_INT_LIT16" />
+		<field name="OP_MUL_INT_LIT8" />
+		<field name="OP_MUL_LONG" />
+		<field name="OP_MUL_LONG_2ADDR" />
+		<field name="OP_NEG_DOUBLE" />
+		<field name="OP_NEG_FLOAT" />
+		<field name="OP_NEG_INT" />
+		<field name="OP_NEG_LONG" />
+		<field name="OP_NEW_ARRAY" />
+		<field name="OP_NEW_ARRAY_JUMBO" since="11" />
+		<field name="OP_NEW_INSTANCE" />
+		<field name="OP_NEW_INSTANCE_JUMBO" since="11" />
+		<field name="OP_NOP" />
+		<field name="OP_NOT_INT" />
+		<field name="OP_NOT_LONG" />
+		<field name="OP_OR_INT" />
+		<field name="OP_OR_INT_2ADDR" />
+		<field name="OP_OR_INT_LIT16" />
+		<field name="OP_OR_INT_LIT8" />
+		<field name="OP_OR_LONG" />
+		<field name="OP_OR_LONG_2ADDR" />
+		<field name="OP_PACKED_SWITCH" />
+		<field name="OP_REM_DOUBLE" />
+		<field name="OP_REM_DOUBLE_2ADDR" />
+		<field name="OP_REM_FLOAT" />
+		<field name="OP_REM_FLOAT_2ADDR" />
+		<field name="OP_REM_INT" />
+		<field name="OP_REM_INT_2ADDR" />
+		<field name="OP_REM_INT_LIT16" />
+		<field name="OP_REM_INT_LIT8" />
+		<field name="OP_REM_LONG" />
+		<field name="OP_REM_LONG_2ADDR" />
+		<field name="OP_RETURN" />
+		<field name="OP_RETURN_OBJECT" />
+		<field name="OP_RETURN_VOID" />
+		<field name="OP_RETURN_WIDE" />
+		<field name="OP_RSUB_INT" />
+		<field name="OP_RSUB_INT_LIT8" />
+		<field name="OP_SGET" />
+		<field name="OP_SGET_BOOLEAN" />
+		<field name="OP_SGET_BOOLEAN_JUMBO" since="11" />
+		<field name="OP_SGET_BYTE" />
+		<field name="OP_SGET_BYTE_JUMBO" since="11" />
+		<field name="OP_SGET_CHAR" />
+		<field name="OP_SGET_CHAR_JUMBO" since="11" />
+		<field name="OP_SGET_JUMBO" since="11" />
+		<field name="OP_SGET_OBJECT" />
+		<field name="OP_SGET_OBJECT_JUMBO" since="11" />
+		<field name="OP_SGET_SHORT" />
+		<field name="OP_SGET_SHORT_JUMBO" since="11" />
+		<field name="OP_SGET_WIDE" />
+		<field name="OP_SGET_WIDE_JUMBO" since="11" />
+		<field name="OP_SGET_WIDE_VOLATILE" since="9" deprecated="15" />
+		<field name="OP_SHL_INT" />
+		<field name="OP_SHL_INT_2ADDR" />
+		<field name="OP_SHL_INT_LIT8" />
+		<field name="OP_SHL_LONG" />
+		<field name="OP_SHL_LONG_2ADDR" />
+		<field name="OP_SHR_INT" />
+		<field name="OP_SHR_INT_2ADDR" />
+		<field name="OP_SHR_INT_LIT8" />
+		<field name="OP_SHR_LONG" />
+		<field name="OP_SHR_LONG_2ADDR" />
+		<field name="OP_SPARSE_SWITCH" />
+		<field name="OP_SPUT" />
+		<field name="OP_SPUT_BOOLEAN" />
+		<field name="OP_SPUT_BOOLEAN_JUMBO" since="11" />
+		<field name="OP_SPUT_BYTE" />
+		<field name="OP_SPUT_BYTE_JUMBO" since="11" />
+		<field name="OP_SPUT_CHAR" />
+		<field name="OP_SPUT_CHAR_JUMBO" since="11" />
+		<field name="OP_SPUT_JUMBO" since="11" />
+		<field name="OP_SPUT_OBJECT" />
+		<field name="OP_SPUT_OBJECT_JUMBO" since="11" />
+		<field name="OP_SPUT_SHORT" />
+		<field name="OP_SPUT_SHORT_JUMBO" since="11" />
+		<field name="OP_SPUT_WIDE" />
+		<field name="OP_SPUT_WIDE_JUMBO" since="11" />
+		<field name="OP_SPUT_WIDE_VOLATILE" since="9" deprecated="15" />
+		<field name="OP_SUB_DOUBLE" />
+		<field name="OP_SUB_DOUBLE_2ADDR" />
+		<field name="OP_SUB_FLOAT" />
+		<field name="OP_SUB_FLOAT_2ADDR" />
+		<field name="OP_SUB_INT" />
+		<field name="OP_SUB_INT_2ADDR" />
+		<field name="OP_SUB_LONG" />
+		<field name="OP_SUB_LONG_2ADDR" />
+		<field name="OP_THROW" />
+		<field name="OP_THROW_VERIFICATION_ERROR" since="8" deprecated="15" />
+		<field name="OP_UNUSED_3e" removed="8" />
+		<field name="OP_UNUSED_3f" removed="8" />
+		<field name="OP_UNUSED_40" removed="8" />
+		<field name="OP_UNUSED_41" removed="8" />
+		<field name="OP_UNUSED_42" removed="8" />
+		<field name="OP_UNUSED_43" removed="8" />
+		<field name="OP_UNUSED_73" removed="8" />
+		<field name="OP_UNUSED_79" removed="8" />
+		<field name="OP_UNUSED_7A" removed="8" />
+		<field name="OP_UNUSED_E3" removed="8" />
+		<field name="OP_UNUSED_E4" removed="8" />
+		<field name="OP_UNUSED_E5" removed="8" />
+		<field name="OP_UNUSED_E6" removed="8" />
+		<field name="OP_UNUSED_E7" removed="8" />
+		<field name="OP_UNUSED_E8" removed="8" />
+		<field name="OP_UNUSED_E9" removed="8" />
+		<field name="OP_UNUSED_EA" removed="8" />
+		<field name="OP_UNUSED_EB" removed="8" />
+		<field name="OP_UNUSED_EC" removed="8" />
+		<field name="OP_UNUSED_ED" removed="8" />
+		<field name="OP_UNUSED_EF" removed="8" />
+		<field name="OP_UNUSED_F1" removed="8" />
+		<field name="OP_UNUSED_FC" removed="8" />
+		<field name="OP_UNUSED_FD" removed="8" />
+		<field name="OP_UNUSED_FE" removed="8" />
+		<field name="OP_UNUSED_FF" removed="8" />
+		<field name="OP_USHR_INT" />
+		<field name="OP_USHR_INT_2ADDR" />
+		<field name="OP_USHR_INT_LIT8" />
+		<field name="OP_USHR_LONG" />
+		<field name="OP_USHR_LONG_2ADDR" />
+		<field name="OP_XOR_INT" />
+		<field name="OP_XOR_INT_2ADDR" />
+		<field name="OP_XOR_INT_LIT16" />
+		<field name="OP_XOR_INT_LIT8" />
+		<field name="OP_XOR_LONG" />
+		<field name="OP_XOR_LONG_2ADDR" />
+	</class>
+	<class name="dalvik/system/AllocationLimitError" since="1" removed="9">
+		<extends name="java/lang/VirtualMachineError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="dalvik/system/BaseDexClassLoader" since="14">
+		<extends name="java/lang/ClassLoader" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/ClassLoader;)V" />
+	</class>
+	<class name="dalvik/system/DelegateLastClassLoader" since="27">
+		<extends name="dalvik/system/PathClassLoader" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)V" since="29" />
+	</class>
+	<class name="dalvik/system/DexClassLoader" since="3">
+		<extends name="dalvik/system/BaseDexClassLoader" since="14" />
+		<extends name="java/lang/ClassLoader" removed="14" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V" />
+	</class>
+	<class name="dalvik/system/DexFile" since="1" deprecated="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" deprecated="26" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="26" />
+		<method name="close()V" deprecated="29" />
+		<method name="entries()Ljava/util/Enumeration;" deprecated="29" />
+		<method name="getName()Ljava/lang/String;" deprecated="29" />
+		<method name="isDexOptNeeded(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="loadClass(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;" deprecated="29" />
+		<method name="loadDex(Ljava/lang/String;Ljava/lang/String;I)Ldalvik/system/DexFile;" since="3" deprecated="26" />
+	</class>
+	<class name="dalvik/system/InMemoryDexClassLoader" since="26">
+		<extends name="dalvik/system/BaseDexClassLoader" />
+		<method name="&lt;init&gt;(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V" />
+		<method name="&lt;init&gt;([Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V" since="27" />
+		<method name="&lt;init&gt;([Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/ClassLoader;)V" since="29" />
+	</class>
+	<class name="dalvik/system/PathClassLoader" since="1">
+		<extends name="dalvik/system/BaseDexClassLoader" since="14" />
+		<extends name="java/lang/ClassLoader" removed="14" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V" />
+	</class>
+	<class name="dalvik/system/PotentialDeadlockError" since="1" removed="9">
+		<extends name="java/lang/VirtualMachineError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="dalvik/system/StaleDexCacheError" since="1" removed="9">
+		<extends name="java/lang/VirtualMachineError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="dalvik/system/TemporaryDirectory" since="1" removed="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setUpDirectory(Ljava/io/File;)V" />
+		<method name="setUpDirectory(Ljava/lang/String;)V" />
+	</class>
+	<class name="dalvik/system/TouchDex" since="1" removed="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="main([Ljava/lang/String;)V" />
+		<method name="start(Ljava/lang/String;)I" />
+	</class>
+	<class name="dalvik/system/VMDebug" since="1" removed="9">
+		<extends name="java/lang/Object" />
+		<method name="dumpHprofData(Ljava/lang/String;)V" since="3" />
+		<method name="getAllocCount(I)I" />
+		<method name="getInstructionCount([I)V" />
+		<method name="getLoadedClassCount()I" />
+		<method name="isDebuggerConnected()Z" />
+		<method name="isDebuggingEnabled()Z" since="3" />
+		<method name="lastDebuggerActivity()J" />
+		<method name="printLoadedClasses(I)V" />
+		<method name="resetAllocCount(I)V" />
+		<method name="resetInstructionCount()V" />
+		<method name="setAllocationLimit(I)I" />
+		<method name="setGlobalAllocationLimit(I)I" />
+		<method name="startAllocCounting()V" />
+		<method name="startEmulatorTracing()V" />
+		<method name="startInstructionCounting()V" />
+		<method name="startMethodTracing()V" />
+		<method name="startMethodTracing(Ljava/lang/String;II)V" />
+		<method name="stopAllocCounting()V" />
+		<method name="stopEmulatorTracing()V" />
+		<method name="stopInstructionCounting()V" />
+		<method name="stopMethodTracing()V" />
+		<method name="threadCpuTimeNanos()J" />
+		<field name="DEFAULT_METHOD_TRACE_FILE_NAME" />
+		<field name="KIND_ALL_COUNTS" />
+		<field name="KIND_GLOBAL_ALLOCATED_BYTES" />
+		<field name="KIND_GLOBAL_ALLOCATED_OBJECTS" />
+		<field name="KIND_GLOBAL_CLASS_INIT_COUNT" since="8" />
+		<field name="KIND_GLOBAL_CLASS_INIT_TIME" since="8" />
+		<field name="KIND_GLOBAL_EXT_ALLOCATED_BYTES" />
+		<field name="KIND_GLOBAL_EXT_ALLOCATED_OBJECTS" />
+		<field name="KIND_GLOBAL_EXT_FREED_BYTES" />
+		<field name="KIND_GLOBAL_EXT_FREED_OBJECTS" />
+		<field name="KIND_GLOBAL_FREED_BYTES" />
+		<field name="KIND_GLOBAL_FREED_OBJECTS" />
+		<field name="KIND_GLOBAL_GC_INVOCATIONS" />
+		<field name="KIND_THREAD_ALLOCATED_BYTES" />
+		<field name="KIND_THREAD_ALLOCATED_OBJECTS" />
+		<field name="KIND_THREAD_CLASS_INIT_COUNT" since="8" />
+		<field name="KIND_THREAD_CLASS_INIT_TIME" since="8" />
+		<field name="KIND_THREAD_EXT_ALLOCATED_BYTES" />
+		<field name="KIND_THREAD_EXT_ALLOCATED_OBJECTS" />
+		<field name="KIND_THREAD_EXT_FREED_BYTES" />
+		<field name="KIND_THREAD_EXT_FREED_OBJECTS" />
+		<field name="KIND_THREAD_FREED_BYTES" />
+		<field name="KIND_THREAD_FREED_OBJECTS" />
+		<field name="KIND_THREAD_GC_INVOCATIONS" />
+		<field name="TRACE_COUNT_ALLOCS" />
+	</class>
+	<class name="dalvik/system/VMRuntime" since="1" removed="9">
+		<extends name="java/lang/Object" />
+		<method name="gcSoftReferences()V" />
+		<method name="getExternalBytesAllocated()J" />
+		<method name="getMinimumHeapSize()J" />
+		<method name="getRuntime()Ldalvik/system/VMRuntime;" />
+		<method name="getTargetHeapUtilization()F" />
+		<method name="runFinalizationSync()V" />
+		<method name="setMinimumHeapSize(J)J" />
+		<method name="setTargetHeapUtilization(F)F" />
+	</class>
+	<class name="dalvik/system/VMStack" since="1" removed="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getCallingClassLoader()Ljava/lang/ClassLoader;" />
+		<method name="getCallingClassLoader2()Ljava/lang/ClassLoader;" />
+		<method name="getClasses(IZ)[Ljava/lang/Class;" />
+		<method name="getThreadStackTrace(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement;" />
+	</class>
+	<class name="dalvik/system/Zygote" since="1" removed="9">
+		<extends name="java/lang/Object" />
+		<method name="fork()I" />
+		<method name="forkAndSpecialize(II[II[[I)I" since="3" />
+		<method name="forkAndSpecialize(II[IZ[[I)I" />
+		<method name="forkSystemServer(II[II[[I)I" since="3" />
+		<method name="forkSystemServer(II[IZ[[I)I" />
+		<field name="DEBUG_ENABLE_ASSERT" since="3" />
+		<field name="DEBUG_ENABLE_CHECKJNI" since="3" />
+		<field name="DEBUG_ENABLE_DEBUGGER" since="3" />
+		<field name="DEBUG_ENABLE_SAFEMODE" since="8" />
+	</class>
+	<class name="java/awt/font/NumericShaper" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="getContextualShaper(I)Ljava/awt/font/NumericShaper;" />
+		<method name="getContextualShaper(II)Ljava/awt/font/NumericShaper;" />
+		<method name="getContextualShaper(Ljava/util/Set;)Ljava/awt/font/NumericShaper;" since="24" />
+		<method name="getContextualShaper(Ljava/util/Set;Ljava/awt/font/NumericShaper$Range;)Ljava/awt/font/NumericShaper;" since="24" />
+		<method name="getRangeSet()Ljava/util/Set;" since="24" />
+		<method name="getRanges()I" />
+		<method name="getShaper(I)Ljava/awt/font/NumericShaper;" />
+		<method name="getShaper(Ljava/awt/font/NumericShaper$Range;)Ljava/awt/font/NumericShaper;" since="24" />
+		<method name="isContextual()Z" />
+		<method name="shape([CII)V" />
+		<method name="shape([CIII)V" />
+		<method name="shape([CIILjava/awt/font/NumericShaper$Range;)V" since="24" />
+		<field name="ALL_RANGES" />
+		<field name="ARABIC" />
+		<field name="BENGALI" />
+		<field name="DEVANAGARI" />
+		<field name="EASTERN_ARABIC" />
+		<field name="ETHIOPIC" />
+		<field name="EUROPEAN" />
+		<field name="GUJARATI" />
+		<field name="GURMUKHI" />
+		<field name="KANNADA" />
+		<field name="KHMER" />
+		<field name="LAO" />
+		<field name="MALAYALAM" />
+		<field name="MONGOLIAN" />
+		<field name="MYANMAR" />
+		<field name="ORIYA" />
+		<field name="TAMIL" />
+		<field name="TELUGU" />
+		<field name="THAI" />
+		<field name="TIBETAN" />
+	</class>
+	<class name="java/awt/font/NumericShaper$Range" since="24">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/awt/font/NumericShaper$Range;" />
+		<method name="values()[Ljava/awt/font/NumericShaper$Range;" />
+		<field name="ARABIC" />
+		<field name="BALINESE" />
+		<field name="BENGALI" />
+		<field name="CHAM" />
+		<field name="DEVANAGARI" />
+		<field name="EASTERN_ARABIC" />
+		<field name="ETHIOPIC" />
+		<field name="EUROPEAN" />
+		<field name="GUJARATI" />
+		<field name="GURMUKHI" />
+		<field name="JAVANESE" />
+		<field name="KANNADA" />
+		<field name="KAYAH_LI" />
+		<field name="KHMER" />
+		<field name="LAO" />
+		<field name="LEPCHA" />
+		<field name="LIMBU" />
+		<field name="MALAYALAM" />
+		<field name="MEETEI_MAYEK" />
+		<field name="MONGOLIAN" />
+		<field name="MYANMAR" />
+		<field name="MYANMAR_SHAN" />
+		<field name="NEW_TAI_LUE" />
+		<field name="NKO" />
+		<field name="OL_CHIKI" />
+		<field name="ORIYA" />
+		<field name="SAURASHTRA" />
+		<field name="SUNDANESE" />
+		<field name="TAI_THAM_HORA" />
+		<field name="TAI_THAM_THAM" />
+		<field name="TAMIL" />
+		<field name="TELUGU" />
+		<field name="THAI" />
+		<field name="TIBETAN" />
+		<field name="VAI" />
+	</class>
+	<class name="java/awt/font/TextAttribute" since="1">
+		<extends name="java/text/AttributedCharacterIterator$Attribute" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="BACKGROUND" />
+		<field name="BIDI_EMBEDDING" />
+		<field name="CHAR_REPLACEMENT" />
+		<field name="FAMILY" />
+		<field name="FONT" />
+		<field name="FOREGROUND" />
+		<field name="INPUT_METHOD_HIGHLIGHT" />
+		<field name="INPUT_METHOD_UNDERLINE" />
+		<field name="JUSTIFICATION" />
+		<field name="JUSTIFICATION_FULL" />
+		<field name="JUSTIFICATION_NONE" />
+		<field name="KERNING" since="9" />
+		<field name="KERNING_ON" since="9" />
+		<field name="LIGATURES" since="9" />
+		<field name="LIGATURES_ON" since="9" />
+		<field name="NUMERIC_SHAPING" />
+		<field name="POSTURE" />
+		<field name="POSTURE_OBLIQUE" />
+		<field name="POSTURE_REGULAR" />
+		<field name="RUN_DIRECTION" />
+		<field name="RUN_DIRECTION_LTR" />
+		<field name="RUN_DIRECTION_RTL" />
+		<field name="SIZE" />
+		<field name="STRIKETHROUGH" />
+		<field name="STRIKETHROUGH_ON" />
+		<field name="SUPERSCRIPT" />
+		<field name="SUPERSCRIPT_SUB" />
+		<field name="SUPERSCRIPT_SUPER" />
+		<field name="SWAP_COLORS" />
+		<field name="SWAP_COLORS_ON" />
+		<field name="TRACKING" since="9" />
+		<field name="TRACKING_LOOSE" since="9" />
+		<field name="TRACKING_TIGHT" since="9" />
+		<field name="TRANSFORM" />
+		<field name="UNDERLINE" />
+		<field name="UNDERLINE_LOW_DASHED" />
+		<field name="UNDERLINE_LOW_DOTTED" />
+		<field name="UNDERLINE_LOW_GRAY" />
+		<field name="UNDERLINE_LOW_ONE_PIXEL" />
+		<field name="UNDERLINE_LOW_TWO_PIXEL" />
+		<field name="UNDERLINE_ON" />
+		<field name="WEIGHT" />
+		<field name="WEIGHT_BOLD" />
+		<field name="WEIGHT_DEMIBOLD" />
+		<field name="WEIGHT_DEMILIGHT" />
+		<field name="WEIGHT_EXTRABOLD" />
+		<field name="WEIGHT_EXTRA_LIGHT" />
+		<field name="WEIGHT_HEAVY" />
+		<field name="WEIGHT_LIGHT" />
+		<field name="WEIGHT_MEDIUM" />
+		<field name="WEIGHT_REGULAR" />
+		<field name="WEIGHT_SEMIBOLD" />
+		<field name="WEIGHT_ULTRABOLD" />
+		<field name="WIDTH" />
+		<field name="WIDTH_CONDENSED" />
+		<field name="WIDTH_EXTENDED" />
+		<field name="WIDTH_REGULAR" />
+		<field name="WIDTH_SEMI_CONDENSED" />
+		<field name="WIDTH_SEMI_EXTENDED" />
+	</class>
+	<class name="java/beans/IndexedPropertyChangeEvent" since="3">
+		<extends name="java/beans/PropertyChangeEvent" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;I)V" />
+		<method name="getIndex()I" />
+	</class>
+	<class name="java/beans/PropertyChangeEvent" since="3">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="getNewValue()Ljava/lang/Object;" />
+		<method name="getOldValue()Ljava/lang/Object;" />
+		<method name="getPropagationId()Ljava/lang/Object;" />
+		<method name="getPropertyName()Ljava/lang/String;" />
+		<method name="setPropagationId(Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/beans/PropertyChangeListener" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="propertyChange(Ljava/beans/PropertyChangeEvent;)V" />
+	</class>
+	<class name="java/beans/PropertyChangeListenerProxy" since="3">
+		<extends name="java/util/EventListenerProxy" />
+		<implements name="java/beans/PropertyChangeListener" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V" />
+		<method name="getPropertyName()Ljava/lang/String;" />
+	</class>
+	<class name="java/beans/PropertyChangeSupport" since="3">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" />
+		<method name="addPropertyChangeListener(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V" />
+		<method name="fireIndexedPropertyChange(Ljava/lang/String;III)V" />
+		<method name="fireIndexedPropertyChange(Ljava/lang/String;ILjava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="fireIndexedPropertyChange(Ljava/lang/String;IZZ)V" />
+		<method name="firePropertyChange(Ljava/beans/PropertyChangeEvent;)V" />
+		<method name="firePropertyChange(Ljava/lang/String;II)V" />
+		<method name="firePropertyChange(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="firePropertyChange(Ljava/lang/String;ZZ)V" />
+		<method name="getPropertyChangeListeners()[Ljava/beans/PropertyChangeListener;" />
+		<method name="getPropertyChangeListeners(Ljava/lang/String;)[Ljava/beans/PropertyChangeListener;" />
+		<method name="hasListeners(Ljava/lang/String;)Z" />
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" />
+		<method name="removePropertyChangeListener(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V" />
+	</class>
+	<class name="java/io/BufferedInputStream" since="1">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;I)V" />
+		<field name="buf" />
+		<field name="count" />
+		<field name="marklimit" />
+		<field name="markpos" />
+		<field name="pos" />
+	</class>
+	<class name="java/io/BufferedOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;I)V" />
+		<field name="buf" />
+		<field name="count" />
+	</class>
+	<class name="java/io/BufferedReader" since="1">
+		<extends name="java/io/Reader" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;I)V" />
+		<method name="lines()Ljava/util/stream/Stream;" since="24" />
+		<method name="readLine()Ljava/lang/String;" />
+	</class>
+	<class name="java/io/BufferedWriter" since="1">
+		<extends name="java/io/Writer" />
+		<method name="&lt;init&gt;(Ljava/io/Writer;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Writer;I)V" />
+		<method name="newLine()V" />
+	</class>
+	<class name="java/io/ByteArrayInputStream" since="1">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="&lt;init&gt;([BII)V" />
+		<field name="buf" />
+		<field name="count" />
+		<field name="mark" />
+		<field name="pos" />
+	</class>
+	<class name="java/io/ByteArrayOutputStream" since="1">
+		<extends name="java/io/OutputStream" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="reset()V" />
+		<method name="size()I" />
+		<method name="toByteArray()[B" />
+		<method name="toString(I)Ljava/lang/String;" deprecated="15" />
+		<method name="toString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="writeTo(Ljava/io/OutputStream;)V" />
+		<field name="buf" />
+		<field name="count" />
+	</class>
+	<class name="java/io/CharArrayReader" since="1">
+		<extends name="java/io/Reader" />
+		<method name="&lt;init&gt;([C)V" />
+		<method name="&lt;init&gt;([CII)V" />
+		<field name="buf" />
+		<field name="count" />
+		<field name="markedPos" />
+		<field name="pos" />
+	</class>
+	<class name="java/io/CharArrayWriter" since="1">
+		<extends name="java/io/Writer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(C)Ljava/io/CharArrayWriter;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/CharArrayWriter;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/CharArrayWriter;" />
+		<method name="reset()V" />
+		<method name="size()I" />
+		<method name="toCharArray()[C" />
+		<method name="writeTo(Ljava/io/Writer;)V" />
+		<field name="buf" />
+		<field name="count" />
+	</class>
+	<class name="java/io/CharConversionException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/Closeable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<method name="close()V" />
+	</class>
+	<class name="java/io/Console" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Flushable" />
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;" />
+		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;" />
+		<method name="readLine()Ljava/lang/String;" />
+		<method name="readLine(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="readPassword()[C" />
+		<method name="readPassword(Ljava/lang/String;[Ljava/lang/Object;)[C" />
+		<method name="reader()Ljava/io/Reader;" />
+		<method name="writer()Ljava/io/PrintWriter;" />
+	</class>
+	<class name="java/io/DataInput" since="1">
+		<extends name="java/lang/Object" />
+		<method name="readBoolean()Z" />
+		<method name="readByte()B" />
+		<method name="readChar()C" />
+		<method name="readDouble()D" />
+		<method name="readFloat()F" />
+		<method name="readFully([B)V" />
+		<method name="readFully([BII)V" />
+		<method name="readInt()I" />
+		<method name="readLine()Ljava/lang/String;" />
+		<method name="readLong()J" />
+		<method name="readShort()S" />
+		<method name="readUTF()Ljava/lang/String;" />
+		<method name="readUnsignedByte()I" />
+		<method name="readUnsignedShort()I" />
+		<method name="skipBytes(I)I" />
+	</class>
+	<class name="java/io/DataInputStream" since="1">
+		<extends name="java/io/FilterInputStream" />
+		<implements name="java/io/DataInput" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="readUTF(Ljava/io/DataInput;)Ljava/lang/String;" />
+	</class>
+	<class name="java/io/DataOutput" since="1">
+		<extends name="java/lang/Object" />
+		<method name="write(I)V" />
+		<method name="write([B)V" />
+		<method name="write([BII)V" />
+		<method name="writeBoolean(Z)V" />
+		<method name="writeByte(I)V" />
+		<method name="writeBytes(Ljava/lang/String;)V" />
+		<method name="writeChar(I)V" />
+		<method name="writeChars(Ljava/lang/String;)V" />
+		<method name="writeDouble(D)V" />
+		<method name="writeFloat(F)V" />
+		<method name="writeInt(I)V" />
+		<method name="writeLong(J)V" />
+		<method name="writeShort(I)V" />
+		<method name="writeUTF(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/DataOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream" />
+		<implements name="java/io/DataOutput" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="size()I" />
+		<field name="written" />
+	</class>
+	<class name="java/io/EOFException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/Externalizable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="readExternal(Ljava/io/ObjectInput;)V" />
+		<method name="writeExternal(Ljava/io/ObjectOutput;)V" />
+	</class>
+	<class name="java/io/File" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<method name="canExecute()Z" since="9" />
+		<method name="canRead()Z" />
+		<method name="canWrite()Z" />
+		<method name="compareTo(Ljava/io/File;)I" />
+		<method name="createNewFile()Z" />
+		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;" />
+		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;" />
+		<method name="delete()Z" />
+		<method name="deleteOnExit()V" />
+		<method name="exists()Z" />
+		<method name="getAbsoluteFile()Ljava/io/File;" />
+		<method name="getAbsolutePath()Ljava/lang/String;" />
+		<method name="getCanonicalFile()Ljava/io/File;" />
+		<method name="getCanonicalPath()Ljava/lang/String;" />
+		<method name="getFreeSpace()J" since="9" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getParent()Ljava/lang/String;" />
+		<method name="getParentFile()Ljava/io/File;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getTotalSpace()J" since="9" />
+		<method name="getUsableSpace()J" since="9" />
+		<method name="isAbsolute()Z" />
+		<method name="isDirectory()Z" />
+		<method name="isFile()Z" />
+		<method name="isHidden()Z" />
+		<method name="lastModified()J" />
+		<method name="length()J" />
+		<method name="list()[Ljava/lang/String;" />
+		<method name="list(Ljava/io/FilenameFilter;)[Ljava/lang/String;" />
+		<method name="listFiles()[Ljava/io/File;" />
+		<method name="listFiles(Ljava/io/FileFilter;)[Ljava/io/File;" />
+		<method name="listFiles(Ljava/io/FilenameFilter;)[Ljava/io/File;" />
+		<method name="listRoots()[Ljava/io/File;" />
+		<method name="mkdir()Z" />
+		<method name="mkdirs()Z" />
+		<method name="renameTo(Ljava/io/File;)Z" />
+		<method name="setExecutable(Z)Z" since="9" />
+		<method name="setExecutable(ZZ)Z" since="9" />
+		<method name="setLastModified(J)Z" />
+		<method name="setReadOnly()Z" />
+		<method name="setReadable(Z)Z" since="9" />
+		<method name="setReadable(ZZ)Z" since="9" />
+		<method name="setWritable(Z)Z" since="9" />
+		<method name="setWritable(ZZ)Z" since="9" />
+		<method name="toPath()Ljava/nio/file/Path;" since="26" />
+		<method name="toURI()Ljava/net/URI;" />
+		<method name="toURL()Ljava/net/URL;" deprecated="15" />
+		<field name="pathSeparator" />
+		<field name="pathSeparatorChar" />
+		<field name="separator" />
+		<field name="separatorChar" />
+	</class>
+	<class name="java/io/FileDescriptor" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="sync()V" />
+		<method name="valid()Z" />
+		<field name="err" />
+		<field name="in" />
+		<field name="out" />
+	</class>
+	<class name="java/io/FileFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/io/File;)Z" />
+	</class>
+	<class name="java/io/FileInputStream" since="1">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getChannel()Ljava/nio/channels/FileChannel;" />
+		<method name="getFD()Ljava/io/FileDescriptor;" />
+	</class>
+	<class name="java/io/FileNotFoundException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/FileOutputStream" since="1">
+		<extends name="java/io/OutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Z)V" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+		<method name="getChannel()Ljava/nio/channels/FileChannel;" />
+		<method name="getFD()Ljava/io/FileDescriptor;" />
+	</class>
+	<class name="java/io/FilePermission" since="1">
+		<extends name="java/security/Permission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/FileReader" since="1">
+		<extends name="java/io/InputStreamReader" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/FileWriter" since="1">
+		<extends name="java/io/OutputStreamWriter" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Z)V" />
+		<method name="&lt;init&gt;(Ljava/io/FileDescriptor;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+	</class>
+	<class name="java/io/FilenameFilter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/io/File;Ljava/lang/String;)Z" />
+	</class>
+	<class name="java/io/FilterInputStream" since="1">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<field name="in" />
+	</class>
+	<class name="java/io/FilterOutputStream" since="1">
+		<extends name="java/io/OutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<field name="out" />
+	</class>
+	<class name="java/io/FilterReader" since="1">
+		<extends name="java/io/Reader" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<field name="in" />
+	</class>
+	<class name="java/io/FilterWriter" since="1">
+		<extends name="java/io/Writer" />
+		<method name="&lt;init&gt;(Ljava/io/Writer;)V" />
+		<field name="out" />
+	</class>
+	<class name="java/io/Flushable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="flush()V" />
+	</class>
+	<class name="java/io/IOError" since="9">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/io/IOException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="9" />
+	</class>
+	<class name="java/io/InputStream" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="available()I" />
+		<method name="mark(I)V" />
+		<method name="markSupported()Z" />
+		<method name="read()I" />
+		<method name="read([B)I" />
+		<method name="read([BII)I" />
+		<method name="reset()V" />
+		<method name="skip(J)J" />
+	</class>
+	<class name="java/io/InputStreamReader" since="1">
+		<extends name="java/io/Reader" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/nio/charset/CharsetDecoder;)V" />
+		<method name="getEncoding()Ljava/lang/String;" />
+	</class>
+	<class name="java/io/InterruptedIOException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="bytesTransferred" />
+	</class>
+	<class name="java/io/InvalidClassException" since="1">
+		<extends name="java/io/ObjectStreamException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="classname" />
+	</class>
+	<class name="java/io/InvalidObjectException" since="1">
+		<extends name="java/io/ObjectStreamException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/LineNumberInputStream" since="1" deprecated="1">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" deprecated="29" />
+		<method name="getLineNumber()I" deprecated="29" />
+		<method name="setLineNumber(I)V" deprecated="29" />
+	</class>
+	<class name="java/io/LineNumberReader" since="1">
+		<extends name="java/io/BufferedReader" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;I)V" />
+		<method name="getLineNumber()I" />
+		<method name="setLineNumber(I)V" />
+	</class>
+	<class name="java/io/NotActiveException" since="1">
+		<extends name="java/io/ObjectStreamException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/NotSerializableException" since="1">
+		<extends name="java/io/ObjectStreamException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/ObjectInput" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/DataInput" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<method name="available()I" />
+		<method name="close()V" />
+		<method name="read()I" />
+		<method name="read([B)I" />
+		<method name="read([BII)I" />
+		<method name="readObject()Ljava/lang/Object;" />
+		<method name="skip(J)J" />
+	</class>
+	<class name="java/io/ObjectInputStream" since="1">
+		<extends name="java/io/InputStream" />
+		<implements name="java/io/ObjectInput" />
+		<implements name="java/io/ObjectStreamConstants" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="defaultReadObject()V" />
+		<method name="enableResolveObject(Z)Z" />
+		<method name="readClassDescriptor()Ljava/io/ObjectStreamClass;" />
+		<method name="readFields()Ljava/io/ObjectInputStream$GetField;" />
+		<method name="readObjectOverride()Ljava/lang/Object;" />
+		<method name="readStreamHeader()V" />
+		<method name="readUnshared()Ljava/lang/Object;" />
+		<method name="registerValidation(Ljava/io/ObjectInputValidation;I)V" />
+		<method name="resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;" />
+		<method name="resolveObject(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="resolveProxyClass([Ljava/lang/String;)Ljava/lang/Class;" />
+	</class>
+	<class name="java/io/ObjectInputStream$GetField" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="defaulted(Ljava/lang/String;)Z" />
+		<method name="get(Ljava/lang/String;B)B" />
+		<method name="get(Ljava/lang/String;C)C" />
+		<method name="get(Ljava/lang/String;D)D" />
+		<method name="get(Ljava/lang/String;F)F" />
+		<method name="get(Ljava/lang/String;I)I" />
+		<method name="get(Ljava/lang/String;J)J" />
+		<method name="get(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="get(Ljava/lang/String;S)S" />
+		<method name="get(Ljava/lang/String;Z)Z" />
+		<method name="getObjectStreamClass()Ljava/io/ObjectStreamClass;" />
+	</class>
+	<class name="java/io/ObjectInputValidation" since="1">
+		<extends name="java/lang/Object" />
+		<method name="validateObject()V" />
+	</class>
+	<class name="java/io/ObjectOutput" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/DataOutput" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<method name="close()V" />
+		<method name="flush()V" />
+		<method name="writeObject(Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/io/ObjectOutputStream" since="1">
+		<extends name="java/io/OutputStream" />
+		<implements name="java/io/ObjectOutput" />
+		<implements name="java/io/ObjectStreamConstants" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="annotateClass(Ljava/lang/Class;)V" />
+		<method name="annotateProxyClass(Ljava/lang/Class;)V" />
+		<method name="defaultWriteObject()V" />
+		<method name="drain()V" />
+		<method name="enableReplaceObject(Z)Z" />
+		<method name="putFields()Ljava/io/ObjectOutputStream$PutField;" />
+		<method name="replaceObject(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="reset()V" />
+		<method name="useProtocolVersion(I)V" />
+		<method name="writeClassDescriptor(Ljava/io/ObjectStreamClass;)V" />
+		<method name="writeFields()V" />
+		<method name="writeObjectOverride(Ljava/lang/Object;)V" />
+		<method name="writeStreamHeader()V" />
+		<method name="writeUnshared(Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/io/ObjectOutputStream$PutField" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="put(Ljava/lang/String;B)V" />
+		<method name="put(Ljava/lang/String;C)V" />
+		<method name="put(Ljava/lang/String;D)V" />
+		<method name="put(Ljava/lang/String;F)V" />
+		<method name="put(Ljava/lang/String;I)V" />
+		<method name="put(Ljava/lang/String;J)V" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="put(Ljava/lang/String;S)V" />
+		<method name="put(Ljava/lang/String;Z)V" />
+		<method name="write(Ljava/io/ObjectOutput;)V" deprecated="15" />
+	</class>
+	<class name="java/io/ObjectStreamClass" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="forClass()Ljava/lang/Class;" />
+		<method name="getField(Ljava/lang/String;)Ljava/io/ObjectStreamField;" />
+		<method name="getFields()[Ljava/io/ObjectStreamField;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSerialVersionUID()J" />
+		<method name="lookup(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;" />
+		<method name="lookupAny(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;" since="9" />
+		<field name="NO_FIELDS" />
+	</class>
+	<class name="java/io/ObjectStreamConstants" since="1">
+		<extends name="java/lang/Object" />
+		<field name="PROTOCOL_VERSION_1" />
+		<field name="PROTOCOL_VERSION_2" />
+		<field name="SC_BLOCK_DATA" />
+		<field name="SC_ENUM" />
+		<field name="SC_EXTERNALIZABLE" />
+		<field name="SC_SERIALIZABLE" />
+		<field name="SC_WRITE_METHOD" />
+		<field name="STREAM_MAGIC" />
+		<field name="STREAM_VERSION" />
+		<field name="SUBCLASS_IMPLEMENTATION_PERMISSION" />
+		<field name="SUBSTITUTION_PERMISSION" />
+		<field name="TC_ARRAY" />
+		<field name="TC_BASE" />
+		<field name="TC_BLOCKDATA" />
+		<field name="TC_BLOCKDATALONG" />
+		<field name="TC_CLASS" />
+		<field name="TC_CLASSDESC" />
+		<field name="TC_ENDBLOCKDATA" />
+		<field name="TC_ENUM" />
+		<field name="TC_EXCEPTION" />
+		<field name="TC_LONGSTRING" />
+		<field name="TC_MAX" />
+		<field name="TC_NULL" />
+		<field name="TC_OBJECT" />
+		<field name="TC_PROXYCLASSDESC" />
+		<field name="TC_REFERENCE" />
+		<field name="TC_RESET" />
+		<field name="TC_STRING" />
+		<field name="baseWireHandle" />
+	</class>
+	<class name="java/io/ObjectStreamException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/ObjectStreamField" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;Z)V" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getOffset()I" />
+		<method name="getType()Ljava/lang/Class;" />
+		<method name="getTypeCode()C" />
+		<method name="getTypeString()Ljava/lang/String;" />
+		<method name="isPrimitive()Z" />
+		<method name="isUnshared()Z" />
+		<method name="setOffset(I)V" />
+	</class>
+	<class name="java/io/OptionalDataException" since="1">
+		<extends name="java/io/ObjectStreamException" />
+		<field name="eof" />
+		<field name="length" />
+	</class>
+	<class name="java/io/OutputStream" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<implements name="java/io/Flushable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="write(I)V" />
+		<method name="write([B)V" />
+		<method name="write([BII)V" />
+	</class>
+	<class name="java/io/OutputStreamWriter" since="1">
+		<extends name="java/io/Writer" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/nio/charset/CharsetEncoder;)V" />
+		<method name="getEncoding()Ljava/lang/String;" />
+	</class>
+	<class name="java/io/PipedInputStream" since="1">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/io/PipedOutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/PipedOutputStream;I)V" since="9" />
+		<method name="connect(Ljava/io/PipedOutputStream;)V" />
+		<method name="receive(I)V" />
+		<field name="PIPE_SIZE" />
+		<field name="buffer" />
+		<field name="in" />
+		<field name="out" />
+	</class>
+	<class name="java/io/PipedOutputStream" since="1">
+		<extends name="java/io/OutputStream" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/PipedInputStream;)V" />
+		<method name="connect(Ljava/io/PipedInputStream;)V" />
+	</class>
+	<class name="java/io/PipedReader" since="1">
+		<extends name="java/io/Reader" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/io/PipedWriter;)V" />
+		<method name="&lt;init&gt;(Ljava/io/PipedWriter;I)V" since="9" />
+		<method name="connect(Ljava/io/PipedWriter;)V" />
+	</class>
+	<class name="java/io/PipedWriter" since="1">
+		<extends name="java/io/Writer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/PipedReader;)V" />
+		<method name="connect(Ljava/io/PipedReader;)V" />
+	</class>
+	<class name="java/io/PrintStream" since="1">
+		<extends name="java/io/FilterOutputStream" />
+		<implements name="java/lang/Appendable" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Z)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;ZLjava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="append(C)Ljava/io/PrintStream;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/PrintStream;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/PrintStream;" />
+		<method name="checkError()Z" />
+		<method name="clearError()V" since="9" />
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;" />
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;" />
+		<method name="print(C)V" />
+		<method name="print(D)V" />
+		<method name="print(F)V" />
+		<method name="print(I)V" />
+		<method name="print(J)V" />
+		<method name="print(Ljava/lang/Object;)V" />
+		<method name="print(Ljava/lang/String;)V" />
+		<method name="print(Z)V" />
+		<method name="print([C)V" />
+		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;" />
+		<method name="printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;" />
+		<method name="println()V" />
+		<method name="println(C)V" />
+		<method name="println(D)V" />
+		<method name="println(F)V" />
+		<method name="println(I)V" />
+		<method name="println(J)V" />
+		<method name="println(Ljava/lang/Object;)V" />
+		<method name="println(Ljava/lang/String;)V" />
+		<method name="println(Z)V" />
+		<method name="println([C)V" />
+		<method name="setError()V" />
+	</class>
+	<class name="java/io/PrintWriter" since="1">
+		<extends name="java/io/Writer" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Z)V" />
+		<method name="&lt;init&gt;(Ljava/io/Writer;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Writer;Z)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="append(C)Ljava/io/PrintWriter;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/PrintWriter;" />
+		<method name="checkError()Z" />
+		<method name="clearError()V" since="9" />
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;" />
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;" />
+		<method name="print(C)V" />
+		<method name="print(D)V" />
+		<method name="print(F)V" />
+		<method name="print(I)V" />
+		<method name="print(J)V" />
+		<method name="print(Ljava/lang/Object;)V" />
+		<method name="print(Ljava/lang/String;)V" />
+		<method name="print(Z)V" />
+		<method name="print([C)V" />
+		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;" />
+		<method name="printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;" />
+		<method name="println()V" />
+		<method name="println(C)V" />
+		<method name="println(D)V" />
+		<method name="println(F)V" />
+		<method name="println(I)V" />
+		<method name="println(J)V" />
+		<method name="println(Ljava/lang/Object;)V" />
+		<method name="println(Ljava/lang/String;)V" />
+		<method name="println(Z)V" />
+		<method name="println([C)V" />
+		<method name="setError()V" />
+		<field name="out" />
+	</class>
+	<class name="java/io/PushbackInputStream" since="1">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;I)V" />
+		<method name="unread(I)V" />
+		<method name="unread([B)V" />
+		<method name="unread([BII)V" />
+		<field name="buf" />
+		<field name="pos" />
+	</class>
+	<class name="java/io/PushbackReader" since="1">
+		<extends name="java/io/FilterReader" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;I)V" />
+		<method name="unread(I)V" />
+		<method name="unread([C)V" />
+		<method name="unread([CII)V" />
+	</class>
+	<class name="java/io/RandomAccessFile" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<implements name="java/io/DataInput" />
+		<implements name="java/io/DataOutput" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getChannel()Ljava/nio/channels/FileChannel;" />
+		<method name="getFD()Ljava/io/FileDescriptor;" />
+		<method name="getFilePointer()J" />
+		<method name="length()J" />
+		<method name="read()I" />
+		<method name="read([B)I" />
+		<method name="read([BII)I" />
+		<method name="seek(J)V" />
+		<method name="setLength(J)V" />
+	</class>
+	<class name="java/io/Reader" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<implements name="java/lang/Readable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="mark(I)V" />
+		<method name="markSupported()Z" />
+		<method name="read()I" />
+		<method name="read([C)I" />
+		<method name="read([CII)I" />
+		<method name="ready()Z" />
+		<method name="reset()V" />
+		<method name="skip(J)J" />
+		<field name="lock" />
+	</class>
+	<class name="java/io/SequenceInputStream" since="1">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Enumeration;)V" />
+	</class>
+	<class name="java/io/Serializable" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/io/SerializablePermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/StreamCorruptedException" since="1">
+		<extends name="java/io/ObjectStreamException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/StreamTokenizer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" deprecated="15" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<method name="commentChar(I)V" />
+		<method name="eolIsSignificant(Z)V" />
+		<method name="lineno()I" />
+		<method name="lowerCaseMode(Z)V" />
+		<method name="nextToken()I" />
+		<method name="ordinaryChar(I)V" />
+		<method name="ordinaryChars(II)V" />
+		<method name="parseNumbers()V" />
+		<method name="pushBack()V" />
+		<method name="quoteChar(I)V" />
+		<method name="resetSyntax()V" />
+		<method name="slashSlashComments(Z)V" />
+		<method name="slashStarComments(Z)V" />
+		<method name="whitespaceChars(II)V" />
+		<method name="wordChars(II)V" />
+		<field name="TT_EOF" />
+		<field name="TT_EOL" />
+		<field name="TT_NUMBER" />
+		<field name="TT_WORD" />
+		<field name="nval" />
+		<field name="sval" />
+		<field name="ttype" />
+	</class>
+	<class name="java/io/StringBufferInputStream" since="1" deprecated="1">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+		<field name="buffer" deprecated="29" />
+		<field name="count" deprecated="29" />
+		<field name="pos" deprecated="29" />
+	</class>
+	<class name="java/io/StringReader" since="1">
+		<extends name="java/io/Reader" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/StringWriter" since="1">
+		<extends name="java/io/Writer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(C)Ljava/io/StringWriter;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/StringWriter;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/StringWriter;" />
+		<method name="getBuffer()Ljava/lang/StringBuffer;" />
+	</class>
+	<class name="java/io/SyncFailedException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/UTFDataFormatException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/UncheckedIOException" since="24">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/io/IOException;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/io/IOException;)V" />
+		<method name="getCause()Ljava/io/IOException;" />
+	</class>
+	<class name="java/io/UnsupportedEncodingException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/io/WriteAbortedException" since="1">
+		<extends name="java/io/ObjectStreamException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Exception;)V" />
+		<field name="detail" />
+	</class>
+	<class name="java/io/Writer" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<implements name="java/io/Flushable" />
+		<implements name="java/lang/Appendable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="append(C)Ljava/io/Writer;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/Writer;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/Writer;" />
+		<method name="write(I)V" />
+		<method name="write(Ljava/lang/String;)V" />
+		<method name="write(Ljava/lang/String;II)V" />
+		<method name="write([C)V" />
+		<method name="write([CII)V" />
+		<field name="lock" />
+	</class>
+	<class name="java/lang/AbstractMethodError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Appendable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="append(C)Ljava/lang/Appendable;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;" />
+	</class>
+	<class name="java/lang/ArithmeticException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/ArrayIndexOutOfBoundsException" since="1">
+		<extends name="java/lang/IndexOutOfBoundsException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/ArrayStoreException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/AssertionError" since="1">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(C)V" />
+		<method name="&lt;init&gt;(D)V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19" />
+		<method name="&lt;init&gt;(Z)V" />
+	</class>
+	<class name="java/lang/AutoCloseable" since="19">
+		<extends name="java/lang/Object" />
+		<method name="close()V" />
+	</class>
+	<class name="java/lang/Boolean" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="booleanValue()Z" />
+		<method name="compare(ZZ)I" since="19" />
+		<method name="compareTo(Ljava/lang/Boolean;)I" />
+		<method name="getBoolean(Ljava/lang/String;)Z" />
+		<method name="hashCode(Z)I" since="24" />
+		<method name="logicalAnd(ZZ)Z" since="24" />
+		<method name="logicalOr(ZZ)Z" since="24" />
+		<method name="logicalXor(ZZ)Z" since="24" />
+		<method name="parseBoolean(Ljava/lang/String;)Z" />
+		<method name="toString(Z)Ljava/lang/String;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Boolean;" />
+		<method name="valueOf(Z)Ljava/lang/Boolean;" />
+		<field name="FALSE" />
+		<field name="TRUE" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/BootstrapMethodError" since="26">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/Byte" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(B)V" deprecated="31" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+		<method name="compare(BB)I" since="19" />
+		<method name="compareTo(Ljava/lang/Byte;)I" />
+		<method name="compareUnsigned(BB)I" since="31" />
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Byte;" />
+		<method name="hashCode(B)I" since="24" />
+		<method name="parseByte(Ljava/lang/String;)B" />
+		<method name="parseByte(Ljava/lang/String;I)B" />
+		<method name="toString(B)Ljava/lang/String;" />
+		<method name="toUnsignedInt(B)I" since="26" />
+		<method name="toUnsignedLong(B)J" since="26" />
+		<method name="valueOf(B)Ljava/lang/Byte;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Byte;" />
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Byte;" />
+		<field name="BYTES" since="24" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_VALUE" />
+		<field name="SIZE" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/CharSequence" since="1">
+		<extends name="java/lang/Object" />
+		<method name="charAt(I)C" />
+		<method name="chars()Ljava/util/stream/IntStream;" since="24" />
+		<method name="codePoints()Ljava/util/stream/IntStream;" since="24" />
+		<method name="length()I" />
+		<method name="subSequence(II)Ljava/lang/CharSequence;" />
+	</class>
+	<class name="java/lang/Character" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(C)V" />
+		<method name="charCount(I)I" />
+		<method name="charValue()C" />
+		<method name="codePointAt(Ljava/lang/CharSequence;I)I" />
+		<method name="codePointAt([CI)I" />
+		<method name="codePointAt([CII)I" />
+		<method name="codePointBefore(Ljava/lang/CharSequence;I)I" />
+		<method name="codePointBefore([CI)I" />
+		<method name="codePointBefore([CII)I" />
+		<method name="codePointCount(Ljava/lang/CharSequence;II)I" />
+		<method name="codePointCount([CII)I" />
+		<method name="compare(CC)I" since="19" />
+		<method name="compareTo(Ljava/lang/Character;)I" />
+		<method name="digit(CI)I" />
+		<method name="digit(II)I" />
+		<method name="forDigit(II)C" />
+		<method name="getDirectionality(C)B" />
+		<method name="getDirectionality(I)B" />
+		<method name="getName(I)Ljava/lang/String;" since="19" />
+		<method name="getNumericValue(C)I" />
+		<method name="getNumericValue(I)I" />
+		<method name="getType(C)I" />
+		<method name="getType(I)I" />
+		<method name="hashCode(C)I" since="24" />
+		<method name="highSurrogate(I)C" since="19" />
+		<method name="isAlphabetic(I)Z" since="19" />
+		<method name="isBmpCodePoint(I)Z" since="19" />
+		<method name="isDefined(C)Z" />
+		<method name="isDefined(I)Z" />
+		<method name="isDigit(C)Z" />
+		<method name="isDigit(I)Z" />
+		<method name="isHighSurrogate(C)Z" />
+		<method name="isISOControl(C)Z" />
+		<method name="isISOControl(I)Z" />
+		<method name="isIdentifierIgnorable(C)Z" />
+		<method name="isIdentifierIgnorable(I)Z" />
+		<method name="isIdeographic(I)Z" since="19" />
+		<method name="isJavaIdentifierPart(C)Z" />
+		<method name="isJavaIdentifierPart(I)Z" />
+		<method name="isJavaIdentifierStart(C)Z" />
+		<method name="isJavaIdentifierStart(I)Z" />
+		<method name="isJavaLetter(C)Z" deprecated="15" />
+		<method name="isJavaLetterOrDigit(C)Z" deprecated="15" />
+		<method name="isLetter(C)Z" />
+		<method name="isLetter(I)Z" />
+		<method name="isLetterOrDigit(C)Z" />
+		<method name="isLetterOrDigit(I)Z" />
+		<method name="isLowSurrogate(C)Z" />
+		<method name="isLowerCase(C)Z" />
+		<method name="isLowerCase(I)Z" />
+		<method name="isMirrored(C)Z" />
+		<method name="isMirrored(I)Z" />
+		<method name="isSpace(C)Z" deprecated="15" />
+		<method name="isSpaceChar(C)Z" />
+		<method name="isSpaceChar(I)Z" />
+		<method name="isSupplementaryCodePoint(I)Z" />
+		<method name="isSurrogate(C)Z" since="19" />
+		<method name="isSurrogatePair(CC)Z" />
+		<method name="isTitleCase(C)Z" />
+		<method name="isTitleCase(I)Z" />
+		<method name="isUnicodeIdentifierPart(C)Z" />
+		<method name="isUnicodeIdentifierPart(I)Z" />
+		<method name="isUnicodeIdentifierStart(C)Z" />
+		<method name="isUnicodeIdentifierStart(I)Z" />
+		<method name="isUpperCase(C)Z" />
+		<method name="isUpperCase(I)Z" />
+		<method name="isValidCodePoint(I)Z" />
+		<method name="isWhitespace(C)Z" />
+		<method name="isWhitespace(I)Z" />
+		<method name="lowSurrogate(I)C" since="19" />
+		<method name="offsetByCodePoints(Ljava/lang/CharSequence;II)I" />
+		<method name="offsetByCodePoints([CIIII)I" />
+		<method name="reverseBytes(C)C" />
+		<method name="toChars(I)[C" />
+		<method name="toChars(I[CI)I" />
+		<method name="toCodePoint(CC)I" />
+		<method name="toLowerCase(C)C" />
+		<method name="toLowerCase(I)I" />
+		<method name="toString(C)Ljava/lang/String;" />
+		<method name="toTitleCase(C)C" />
+		<method name="toTitleCase(I)I" />
+		<method name="toUpperCase(C)C" />
+		<method name="toUpperCase(I)I" />
+		<method name="valueOf(C)Ljava/lang/Character;" />
+		<field name="BYTES" since="24" />
+		<field name="COMBINING_SPACING_MARK" />
+		<field name="CONNECTOR_PUNCTUATION" />
+		<field name="CONTROL" />
+		<field name="CURRENCY_SYMBOL" />
+		<field name="DASH_PUNCTUATION" />
+		<field name="DECIMAL_DIGIT_NUMBER" />
+		<field name="DIRECTIONALITY_ARABIC_NUMBER" />
+		<field name="DIRECTIONALITY_BOUNDARY_NEUTRAL" />
+		<field name="DIRECTIONALITY_COMMON_NUMBER_SEPARATOR" />
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER" />
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR" />
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR" />
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT" />
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING" />
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE" />
+		<field name="DIRECTIONALITY_NONSPACING_MARK" />
+		<field name="DIRECTIONALITY_OTHER_NEUTRALS" />
+		<field name="DIRECTIONALITY_PARAGRAPH_SEPARATOR" />
+		<field name="DIRECTIONALITY_POP_DIRECTIONAL_FORMAT" />
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT" />
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC" />
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING" />
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE" />
+		<field name="DIRECTIONALITY_SEGMENT_SEPARATOR" />
+		<field name="DIRECTIONALITY_UNDEFINED" />
+		<field name="DIRECTIONALITY_WHITESPACE" />
+		<field name="ENCLOSING_MARK" />
+		<field name="END_PUNCTUATION" />
+		<field name="FINAL_QUOTE_PUNCTUATION" />
+		<field name="FORMAT" />
+		<field name="INITIAL_QUOTE_PUNCTUATION" />
+		<field name="LETTER_NUMBER" />
+		<field name="LINE_SEPARATOR" />
+		<field name="LOWERCASE_LETTER" />
+		<field name="MATH_SYMBOL" />
+		<field name="MAX_CODE_POINT" />
+		<field name="MAX_HIGH_SURROGATE" />
+		<field name="MAX_LOW_SURROGATE" />
+		<field name="MAX_RADIX" />
+		<field name="MAX_SURROGATE" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_CODE_POINT" />
+		<field name="MIN_HIGH_SURROGATE" />
+		<field name="MIN_LOW_SURROGATE" />
+		<field name="MIN_RADIX" />
+		<field name="MIN_SUPPLEMENTARY_CODE_POINT" />
+		<field name="MIN_SURROGATE" />
+		<field name="MIN_VALUE" />
+		<field name="MODIFIER_LETTER" />
+		<field name="MODIFIER_SYMBOL" />
+		<field name="NON_SPACING_MARK" />
+		<field name="OTHER_LETTER" />
+		<field name="OTHER_NUMBER" />
+		<field name="OTHER_PUNCTUATION" />
+		<field name="OTHER_SYMBOL" />
+		<field name="PARAGRAPH_SEPARATOR" />
+		<field name="PRIVATE_USE" />
+		<field name="SIZE" />
+		<field name="SPACE_SEPARATOR" />
+		<field name="START_PUNCTUATION" />
+		<field name="SURROGATE" />
+		<field name="TITLECASE_LETTER" />
+		<field name="TYPE" />
+		<field name="UNASSIGNED" />
+		<field name="UPPERCASE_LETTER" />
+	</class>
+	<class name="java/lang/Character$Subset" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Character$UnicodeBlock" since="1">
+		<extends name="java/lang/Character$Subset" />
+		<method name="forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeBlock;" />
+		<method name="of(C)Ljava/lang/Character$UnicodeBlock;" />
+		<method name="of(I)Ljava/lang/Character$UnicodeBlock;" />
+		<field name="AEGEAN_NUMBERS" />
+		<field name="ALCHEMICAL_SYMBOLS" since="19" />
+		<field name="ALPHABETIC_PRESENTATION_FORMS" />
+		<field name="ANCIENT_GREEK_MUSICAL_NOTATION" since="19" />
+		<field name="ANCIENT_GREEK_NUMBERS" since="19" />
+		<field name="ANCIENT_SYMBOLS" since="19" />
+		<field name="ARABIC" />
+		<field name="ARABIC_EXTENDED_A" since="26" />
+		<field name="ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS" since="26" />
+		<field name="ARABIC_PRESENTATION_FORMS_A" />
+		<field name="ARABIC_PRESENTATION_FORMS_B" />
+		<field name="ARABIC_SUPPLEMENT" since="19" />
+		<field name="ARMENIAN" />
+		<field name="ARROWS" />
+		<field name="AVESTAN" since="19" />
+		<field name="BALINESE" since="19" />
+		<field name="BAMUM" since="19" />
+		<field name="BAMUM_SUPPLEMENT" since="19" />
+		<field name="BASIC_LATIN" />
+		<field name="BATAK" since="19" />
+		<field name="BENGALI" />
+		<field name="BLOCK_ELEMENTS" />
+		<field name="BOPOMOFO" />
+		<field name="BOPOMOFO_EXTENDED" />
+		<field name="BOX_DRAWING" />
+		<field name="BRAHMI" since="19" />
+		<field name="BRAILLE_PATTERNS" />
+		<field name="BUGINESE" since="19" />
+		<field name="BUHID" />
+		<field name="BYZANTINE_MUSICAL_SYMBOLS" />
+		<field name="CARIAN" since="19" />
+		<field name="CHAKMA" since="26" />
+		<field name="CHAM" since="19" />
+		<field name="CHEROKEE" />
+		<field name="CJK_COMPATIBILITY" />
+		<field name="CJK_COMPATIBILITY_FORMS" />
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS" />
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT" />
+		<field name="CJK_RADICALS_SUPPLEMENT" />
+		<field name="CJK_STROKES" since="19" />
+		<field name="CJK_SYMBOLS_AND_PUNCTUATION" />
+		<field name="CJK_UNIFIED_IDEOGRAPHS" />
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A" />
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B" />
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C" since="19" />
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D" since="19" />
+		<field name="COMBINING_DIACRITICAL_MARKS" />
+		<field name="COMBINING_DIACRITICAL_MARKS_SUPPLEMENT" since="19" />
+		<field name="COMBINING_HALF_MARKS" />
+		<field name="COMBINING_MARKS_FOR_SYMBOLS" />
+		<field name="COMMON_INDIC_NUMBER_FORMS" since="19" />
+		<field name="CONTROL_PICTURES" />
+		<field name="COPTIC" since="19" />
+		<field name="COUNTING_ROD_NUMERALS" since="19" />
+		<field name="CUNEIFORM" since="19" />
+		<field name="CUNEIFORM_NUMBERS_AND_PUNCTUATION" since="19" />
+		<field name="CURRENCY_SYMBOLS" />
+		<field name="CYPRIOT_SYLLABARY" />
+		<field name="CYRILLIC" />
+		<field name="CYRILLIC_EXTENDED_A" since="19" />
+		<field name="CYRILLIC_EXTENDED_B" since="19" />
+		<field name="CYRILLIC_SUPPLEMENTARY" />
+		<field name="DESERET" />
+		<field name="DEVANAGARI" />
+		<field name="DEVANAGARI_EXTENDED" since="19" />
+		<field name="DINGBATS" />
+		<field name="DOMINO_TILES" since="19" />
+		<field name="EGYPTIAN_HIEROGLYPHS" since="19" />
+		<field name="EMOTICONS" since="19" />
+		<field name="ENCLOSED_ALPHANUMERICS" />
+		<field name="ENCLOSED_ALPHANUMERIC_SUPPLEMENT" since="19" />
+		<field name="ENCLOSED_CJK_LETTERS_AND_MONTHS" />
+		<field name="ENCLOSED_IDEOGRAPHIC_SUPPLEMENT" since="19" />
+		<field name="ETHIOPIC" />
+		<field name="ETHIOPIC_EXTENDED" since="19" />
+		<field name="ETHIOPIC_EXTENDED_A" since="19" />
+		<field name="ETHIOPIC_SUPPLEMENT" since="19" />
+		<field name="GENERAL_PUNCTUATION" />
+		<field name="GEOMETRIC_SHAPES" />
+		<field name="GEORGIAN" />
+		<field name="GEORGIAN_SUPPLEMENT" since="19" />
+		<field name="GLAGOLITIC" since="19" />
+		<field name="GOTHIC" />
+		<field name="GREEK" />
+		<field name="GREEK_EXTENDED" />
+		<field name="GUJARATI" />
+		<field name="GURMUKHI" />
+		<field name="HALFWIDTH_AND_FULLWIDTH_FORMS" />
+		<field name="HANGUL_COMPATIBILITY_JAMO" />
+		<field name="HANGUL_JAMO" />
+		<field name="HANGUL_JAMO_EXTENDED_A" since="19" />
+		<field name="HANGUL_JAMO_EXTENDED_B" since="19" />
+		<field name="HANGUL_SYLLABLES" />
+		<field name="HANUNOO" />
+		<field name="HEBREW" />
+		<field name="HIGH_PRIVATE_USE_SURROGATES" />
+		<field name="HIGH_SURROGATES" />
+		<field name="HIRAGANA" />
+		<field name="IDEOGRAPHIC_DESCRIPTION_CHARACTERS" />
+		<field name="IMPERIAL_ARAMAIC" since="19" />
+		<field name="INSCRIPTIONAL_PAHLAVI" since="19" />
+		<field name="INSCRIPTIONAL_PARTHIAN" since="19" />
+		<field name="IPA_EXTENSIONS" />
+		<field name="JAVANESE" since="19" />
+		<field name="KAITHI" since="19" />
+		<field name="KANA_SUPPLEMENT" since="19" />
+		<field name="KANBUN" />
+		<field name="KANGXI_RADICALS" />
+		<field name="KANNADA" />
+		<field name="KATAKANA" />
+		<field name="KATAKANA_PHONETIC_EXTENSIONS" />
+		<field name="KAYAH_LI" since="19" />
+		<field name="KHAROSHTHI" since="19" />
+		<field name="KHMER" />
+		<field name="KHMER_SYMBOLS" />
+		<field name="LAO" />
+		<field name="LATIN_1_SUPPLEMENT" />
+		<field name="LATIN_EXTENDED_A" />
+		<field name="LATIN_EXTENDED_ADDITIONAL" />
+		<field name="LATIN_EXTENDED_B" />
+		<field name="LATIN_EXTENDED_C" since="19" />
+		<field name="LATIN_EXTENDED_D" since="19" />
+		<field name="LEPCHA" since="19" />
+		<field name="LETTERLIKE_SYMBOLS" />
+		<field name="LIMBU" />
+		<field name="LINEAR_B_IDEOGRAMS" />
+		<field name="LINEAR_B_SYLLABARY" />
+		<field name="LISU" since="19" />
+		<field name="LOW_SURROGATES" />
+		<field name="LYCIAN" since="19" />
+		<field name="LYDIAN" since="19" />
+		<field name="MAHJONG_TILES" since="19" />
+		<field name="MALAYALAM" />
+		<field name="MANDAIC" since="19" />
+		<field name="MATHEMATICAL_ALPHANUMERIC_SYMBOLS" />
+		<field name="MATHEMATICAL_OPERATORS" />
+		<field name="MEETEI_MAYEK" since="19" />
+		<field name="MEETEI_MAYEK_EXTENSIONS" since="26" />
+		<field name="MEROITIC_CURSIVE" since="26" />
+		<field name="MEROITIC_HIEROGLYPHS" since="26" />
+		<field name="MIAO" since="26" />
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A" />
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B" />
+		<field name="MISCELLANEOUS_SYMBOLS" />
+		<field name="MISCELLANEOUS_SYMBOLS_AND_ARROWS" />
+		<field name="MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS" since="19" />
+		<field name="MISCELLANEOUS_TECHNICAL" />
+		<field name="MODIFIER_TONE_LETTERS" since="19" />
+		<field name="MONGOLIAN" />
+		<field name="MUSICAL_SYMBOLS" />
+		<field name="MYANMAR" />
+		<field name="MYANMAR_EXTENDED_A" since="19" />
+		<field name="NEW_TAI_LUE" since="19" />
+		<field name="NKO" since="19" />
+		<field name="NUMBER_FORMS" />
+		<field name="OGHAM" />
+		<field name="OLD_ITALIC" />
+		<field name="OLD_PERSIAN" since="19" />
+		<field name="OLD_SOUTH_ARABIAN" since="19" />
+		<field name="OLD_TURKIC" since="19" />
+		<field name="OL_CHIKI" since="19" />
+		<field name="OPTICAL_CHARACTER_RECOGNITION" />
+		<field name="ORIYA" />
+		<field name="OSMANYA" />
+		<field name="PHAGS_PA" since="19" />
+		<field name="PHAISTOS_DISC" since="19" />
+		<field name="PHOENICIAN" since="19" />
+		<field name="PHONETIC_EXTENSIONS" />
+		<field name="PHONETIC_EXTENSIONS_SUPPLEMENT" since="19" />
+		<field name="PLAYING_CARDS" since="19" />
+		<field name="PRIVATE_USE_AREA" />
+		<field name="REJANG" since="19" />
+		<field name="RUMI_NUMERAL_SYMBOLS" since="19" />
+		<field name="RUNIC" />
+		<field name="SAMARITAN" since="19" />
+		<field name="SAURASHTRA" since="19" />
+		<field name="SHARADA" since="26" />
+		<field name="SHAVIAN" />
+		<field name="SINHALA" />
+		<field name="SMALL_FORM_VARIANTS" />
+		<field name="SORA_SOMPENG" since="26" />
+		<field name="SPACING_MODIFIER_LETTERS" />
+		<field name="SPECIALS" />
+		<field name="SUNDANESE" since="19" />
+		<field name="SUNDANESE_SUPPLEMENT" since="26" />
+		<field name="SUPERSCRIPTS_AND_SUBSCRIPTS" />
+		<field name="SUPPLEMENTAL_ARROWS_A" />
+		<field name="SUPPLEMENTAL_ARROWS_B" />
+		<field name="SUPPLEMENTAL_MATHEMATICAL_OPERATORS" />
+		<field name="SUPPLEMENTAL_PUNCTUATION" since="19" />
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A" />
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B" />
+		<field name="SURROGATES_AREA" deprecated="15" />
+		<field name="SYLOTI_NAGRI" since="19" />
+		<field name="SYRIAC" />
+		<field name="TAGALOG" />
+		<field name="TAGBANWA" />
+		<field name="TAGS" />
+		<field name="TAI_LE" />
+		<field name="TAI_THAM" since="19" />
+		<field name="TAI_VIET" since="19" />
+		<field name="TAI_XUAN_JING_SYMBOLS" />
+		<field name="TAKRI" since="26" />
+		<field name="TAMIL" />
+		<field name="TELUGU" />
+		<field name="THAANA" />
+		<field name="THAI" />
+		<field name="TIBETAN" />
+		<field name="TIFINAGH" since="19" />
+		<field name="TRANSPORT_AND_MAP_SYMBOLS" since="19" />
+		<field name="UGARITIC" />
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS" />
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED" since="19" />
+		<field name="VAI" since="19" />
+		<field name="VARIATION_SELECTORS" />
+		<field name="VARIATION_SELECTORS_SUPPLEMENT" />
+		<field name="VEDIC_EXTENSIONS" since="19" />
+		<field name="VERTICAL_FORMS" since="19" />
+		<field name="YIJING_HEXAGRAM_SYMBOLS" />
+		<field name="YI_RADICALS" />
+		<field name="YI_SYLLABLES" />
+	</class>
+	<class name="java/lang/Character$UnicodeScript" since="24">
+		<extends name="java/lang/Enum" />
+		<method name="forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeScript;" />
+		<method name="of(I)Ljava/lang/Character$UnicodeScript;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Character$UnicodeScript;" />
+		<method name="values()[Ljava/lang/Character$UnicodeScript;" />
+		<field name="ARABIC" />
+		<field name="ARMENIAN" />
+		<field name="AVESTAN" />
+		<field name="BALINESE" />
+		<field name="BAMUM" />
+		<field name="BATAK" />
+		<field name="BENGALI" />
+		<field name="BOPOMOFO" />
+		<field name="BRAHMI" />
+		<field name="BRAILLE" />
+		<field name="BUGINESE" />
+		<field name="BUHID" />
+		<field name="CANADIAN_ABORIGINAL" />
+		<field name="CARIAN" />
+		<field name="CHAKMA" since="26" />
+		<field name="CHAM" />
+		<field name="CHEROKEE" />
+		<field name="COMMON" />
+		<field name="COPTIC" />
+		<field name="CUNEIFORM" />
+		<field name="CYPRIOT" />
+		<field name="CYRILLIC" />
+		<field name="DESERET" />
+		<field name="DEVANAGARI" />
+		<field name="EGYPTIAN_HIEROGLYPHS" />
+		<field name="ETHIOPIC" />
+		<field name="GEORGIAN" />
+		<field name="GLAGOLITIC" />
+		<field name="GOTHIC" />
+		<field name="GREEK" />
+		<field name="GUJARATI" />
+		<field name="GURMUKHI" />
+		<field name="HAN" />
+		<field name="HANGUL" />
+		<field name="HANUNOO" />
+		<field name="HEBREW" />
+		<field name="HIRAGANA" />
+		<field name="IMPERIAL_ARAMAIC" />
+		<field name="INHERITED" />
+		<field name="INSCRIPTIONAL_PAHLAVI" />
+		<field name="INSCRIPTIONAL_PARTHIAN" />
+		<field name="JAVANESE" />
+		<field name="KAITHI" />
+		<field name="KANNADA" />
+		<field name="KATAKANA" />
+		<field name="KAYAH_LI" />
+		<field name="KHAROSHTHI" />
+		<field name="KHMER" />
+		<field name="LAO" />
+		<field name="LATIN" />
+		<field name="LEPCHA" />
+		<field name="LIMBU" />
+		<field name="LINEAR_B" />
+		<field name="LISU" />
+		<field name="LYCIAN" />
+		<field name="LYDIAN" />
+		<field name="MALAYALAM" />
+		<field name="MANDAIC" />
+		<field name="MEETEI_MAYEK" />
+		<field name="MEROITIC_CURSIVE" since="26" />
+		<field name="MEROITIC_HIEROGLYPHS" since="26" />
+		<field name="MIAO" since="26" />
+		<field name="MONGOLIAN" />
+		<field name="MYANMAR" />
+		<field name="NEW_TAI_LUE" />
+		<field name="NKO" />
+		<field name="OGHAM" />
+		<field name="OLD_ITALIC" />
+		<field name="OLD_PERSIAN" />
+		<field name="OLD_SOUTH_ARABIAN" />
+		<field name="OLD_TURKIC" />
+		<field name="OL_CHIKI" />
+		<field name="ORIYA" />
+		<field name="OSMANYA" />
+		<field name="PHAGS_PA" />
+		<field name="PHOENICIAN" />
+		<field name="REJANG" />
+		<field name="RUNIC" />
+		<field name="SAMARITAN" />
+		<field name="SAURASHTRA" />
+		<field name="SHARADA" since="26" />
+		<field name="SHAVIAN" />
+		<field name="SINHALA" />
+		<field name="SORA_SOMPENG" since="26" />
+		<field name="SUNDANESE" />
+		<field name="SYLOTI_NAGRI" />
+		<field name="SYRIAC" />
+		<field name="TAGALOG" />
+		<field name="TAGBANWA" />
+		<field name="TAI_LE" />
+		<field name="TAI_THAM" />
+		<field name="TAI_VIET" />
+		<field name="TAKRI" since="26" />
+		<field name="TAMIL" />
+		<field name="TELUGU" />
+		<field name="THAANA" />
+		<field name="THAI" />
+		<field name="TIBETAN" />
+		<field name="TIFINAGH" />
+		<field name="UGARITIC" />
+		<field name="UNKNOWN" />
+		<field name="VAI" />
+		<field name="YI" />
+	</class>
+	<class name="java/lang/Class" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/reflect/AnnotatedElement" />
+		<implements name="java/lang/reflect/GenericDeclaration" />
+		<implements name="java/lang/reflect/Type" />
+		<method name="asSubclass(Ljava/lang/Class;)Ljava/lang/Class;" />
+		<method name="cast(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="desiredAssertionStatus()Z" />
+		<method name="forName(Ljava/lang/String;)Ljava/lang/Class;" />
+		<method name="forName(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;" />
+		<method name="getCanonicalName()Ljava/lang/String;" />
+		<method name="getClassLoader()Ljava/lang/ClassLoader;" />
+		<method name="getClasses()[Ljava/lang/Class;" />
+		<method name="getComponentType()Ljava/lang/Class;" />
+		<method name="getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;" />
+		<method name="getConstructors()[Ljava/lang/reflect/Constructor;" />
+		<method name="getDeclaredClasses()[Ljava/lang/Class;" />
+		<method name="getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;" />
+		<method name="getDeclaredConstructors()[Ljava/lang/reflect/Constructor;" />
+		<method name="getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;" />
+		<method name="getDeclaredFields()[Ljava/lang/reflect/Field;" />
+		<method name="getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;" />
+		<method name="getDeclaredMethods()[Ljava/lang/reflect/Method;" />
+		<method name="getDeclaringClass()Ljava/lang/Class;" />
+		<method name="getEnclosingClass()Ljava/lang/Class;" />
+		<method name="getEnclosingConstructor()Ljava/lang/reflect/Constructor;" />
+		<method name="getEnclosingMethod()Ljava/lang/reflect/Method;" />
+		<method name="getEnumConstants()[Ljava/lang/Object;" />
+		<method name="getField(Ljava/lang/String;)Ljava/lang/reflect/Field;" />
+		<method name="getFields()[Ljava/lang/reflect/Field;" />
+		<method name="getGenericInterfaces()[Ljava/lang/reflect/Type;" />
+		<method name="getGenericSuperclass()Ljava/lang/reflect/Type;" />
+		<method name="getInterfaces()[Ljava/lang/Class;" />
+		<method name="getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;" />
+		<method name="getMethods()[Ljava/lang/reflect/Method;" />
+		<method name="getModifiers()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPackage()Ljava/lang/Package;" />
+		<method name="getPackageName()Ljava/lang/String;" since="31" />
+		<method name="getProtectionDomain()Ljava/security/ProtectionDomain;" />
+		<method name="getResource(Ljava/lang/String;)Ljava/net/URL;" />
+		<method name="getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;" />
+		<method name="getSigners()[Ljava/lang/Object;" />
+		<method name="getSimpleName()Ljava/lang/String;" />
+		<method name="getSuperclass()Ljava/lang/Class;" />
+		<method name="getTypeName()Ljava/lang/String;" since="26" />
+		<method name="isAnnotation()Z" />
+		<method name="isAnonymousClass()Z" />
+		<method name="isArray()Z" />
+		<method name="isAssignableFrom(Ljava/lang/Class;)Z" />
+		<method name="isEnum()Z" />
+		<method name="isInstance(Ljava/lang/Object;)Z" />
+		<method name="isInterface()Z" />
+		<method name="isLocalClass()Z" />
+		<method name="isMemberClass()Z" />
+		<method name="isPrimitive()Z" />
+		<method name="isSynthetic()Z" />
+		<method name="newInstance()Ljava/lang/Object;" />
+		<method name="toGenericString()Ljava/lang/String;" since="26" />
+	</class>
+	<class name="java/lang/ClassCastException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/ClassCircularityError" since="1">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/ClassFormatError" since="1">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/ClassLoader" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/ClassLoader;)V" />
+		<method name="clearAssertionStatus()V" />
+		<method name="defineClass(Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class;" />
+		<method name="defineClass(Ljava/lang/String;[BII)Ljava/lang/Class;" />
+		<method name="defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;" />
+		<method name="defineClass([BII)Ljava/lang/Class;" deprecated="15" />
+		<method name="definePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package;" />
+		<method name="findClass(Ljava/lang/String;)Ljava/lang/Class;" />
+		<method name="findLibrary(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="findLoadedClass(Ljava/lang/String;)Ljava/lang/Class;" />
+		<method name="findResource(Ljava/lang/String;)Ljava/net/URL;" />
+		<method name="findResources(Ljava/lang/String;)Ljava/util/Enumeration;" />
+		<method name="findSystemClass(Ljava/lang/String;)Ljava/lang/Class;" />
+		<method name="getPackage(Ljava/lang/String;)Ljava/lang/Package;" />
+		<method name="getPackages()[Ljava/lang/Package;" />
+		<method name="getParent()Ljava/lang/ClassLoader;" />
+		<method name="getResource(Ljava/lang/String;)Ljava/net/URL;" />
+		<method name="getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;" />
+		<method name="getResources(Ljava/lang/String;)Ljava/util/Enumeration;" />
+		<method name="getSystemClassLoader()Ljava/lang/ClassLoader;" />
+		<method name="getSystemResource(Ljava/lang/String;)Ljava/net/URL;" />
+		<method name="getSystemResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;" />
+		<method name="getSystemResources(Ljava/lang/String;)Ljava/util/Enumeration;" />
+		<method name="loadClass(Ljava/lang/String;)Ljava/lang/Class;" />
+		<method name="loadClass(Ljava/lang/String;Z)Ljava/lang/Class;" />
+		<method name="registerAsParallelCapable()Z" since="24" />
+		<method name="resolveClass(Ljava/lang/Class;)V" />
+		<method name="setClassAssertionStatus(Ljava/lang/String;Z)V" />
+		<method name="setDefaultAssertionStatus(Z)V" />
+		<method name="setPackageAssertionStatus(Ljava/lang/String;Z)V" />
+		<method name="setSigners(Ljava/lang/Class;[Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/lang/ClassNotFoundException" since="1">
+		<extends name="java/lang/Exception" removed="19" />
+		<extends name="java/lang/ReflectiveOperationException" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="getException()Ljava/lang/Throwable;" />
+	</class>
+	<class name="java/lang/CloneNotSupportedException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Cloneable" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/lang/Comparable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="compareTo(Ljava/lang/Object;)I" />
+	</class>
+	<class name="java/lang/Compiler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="command(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="compileClass(Ljava/lang/Class;)Z" />
+		<method name="compileClasses(Ljava/lang/String;)Z" />
+		<method name="disable()V" />
+		<method name="enable()V" />
+	</class>
+	<class name="java/lang/Deprecated" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="forRemoval()Z" since="31" />
+		<method name="since()Ljava/lang/String;" since="31" />
+	</class>
+	<class name="java/lang/Double" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(D)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="compare(DD)I" />
+		<method name="compareTo(Ljava/lang/Double;)I" />
+		<method name="doubleToLongBits(D)J" />
+		<method name="doubleToRawLongBits(D)J" />
+		<method name="hashCode(D)I" since="24" />
+		<method name="isFinite(D)Z" since="24" />
+		<method name="isInfinite()Z" />
+		<method name="isInfinite(D)Z" />
+		<method name="isNaN()Z" />
+		<method name="isNaN(D)Z" />
+		<method name="longBitsToDouble(J)D" />
+		<method name="max(DD)D" since="24" />
+		<method name="min(DD)D" since="24" />
+		<method name="parseDouble(Ljava/lang/String;)D" />
+		<method name="sum(DD)D" since="24" />
+		<method name="toHexString(D)Ljava/lang/String;" />
+		<method name="toString(D)Ljava/lang/String;" />
+		<method name="valueOf(D)Ljava/lang/Double;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Double;" />
+		<field name="BYTES" since="24" />
+		<field name="MAX_EXPONENT" since="9" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_EXPONENT" since="9" />
+		<field name="MIN_NORMAL" since="9" />
+		<field name="MIN_VALUE" />
+		<field name="NEGATIVE_INFINITY" />
+		<field name="NaN" />
+		<field name="POSITIVE_INFINITY" />
+		<field name="SIZE" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/Enum" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="compareTo(Ljava/lang/Enum;)I" />
+		<method name="getDeclaringClass()Ljava/lang/Class;" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="ordinal()I" />
+		<method name="valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;" />
+	</class>
+	<class name="java/lang/EnumConstantNotPresentException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" />
+		<method name="constantName()Ljava/lang/String;" />
+		<method name="enumType()Ljava/lang/Class;" />
+	</class>
+	<class name="java/lang/Error" since="1">
+		<extends name="java/lang/Throwable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/Exception" since="1">
+		<extends name="java/lang/Throwable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/ExceptionInInitializerError" since="1">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="getException()Ljava/lang/Throwable;" />
+	</class>
+	<class name="java/lang/Float" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(D)V" />
+		<method name="&lt;init&gt;(F)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="compare(FF)I" />
+		<method name="compareTo(Ljava/lang/Float;)I" />
+		<method name="floatToIntBits(F)I" />
+		<method name="floatToRawIntBits(F)I" />
+		<method name="hashCode(F)I" since="24" />
+		<method name="intBitsToFloat(I)F" />
+		<method name="isFinite(F)Z" since="24" />
+		<method name="isInfinite()Z" />
+		<method name="isInfinite(F)Z" />
+		<method name="isNaN()Z" />
+		<method name="isNaN(F)Z" />
+		<method name="max(FF)F" since="24" />
+		<method name="min(FF)F" since="24" />
+		<method name="parseFloat(Ljava/lang/String;)F" />
+		<method name="sum(FF)F" since="24" />
+		<method name="toHexString(F)Ljava/lang/String;" />
+		<method name="toString(F)Ljava/lang/String;" />
+		<method name="valueOf(F)Ljava/lang/Float;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Float;" />
+		<field name="BYTES" since="24" />
+		<field name="MAX_EXPONENT" since="9" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_EXPONENT" since="9" />
+		<field name="MIN_NORMAL" since="9" />
+		<field name="MIN_VALUE" />
+		<field name="NEGATIVE_INFINITY" />
+		<field name="NaN" />
+		<field name="POSITIVE_INFINITY" />
+		<field name="SIZE" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/FunctionalInterface" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="java/lang/IllegalAccessError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/IllegalAccessException" since="1">
+		<extends name="java/lang/Exception" removed="19" />
+		<extends name="java/lang/ReflectiveOperationException" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/IllegalArgumentException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/IllegalMonitorStateException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/IllegalStateException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/IllegalThreadStateException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/IncompatibleClassChangeError" since="1">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/IndexOutOfBoundsException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/InheritableThreadLocal" since="1">
+		<extends name="java/lang/ThreadLocal" />
+		<method name="&lt;init&gt;()V" />
+		<method name="childValue(Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/lang/InstantiationError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/InstantiationException" since="1">
+		<extends name="java/lang/Exception" removed="19" />
+		<extends name="java/lang/ReflectiveOperationException" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Integer" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="bitCount(I)I" />
+		<method name="compare(II)I" since="19" />
+		<method name="compareTo(Ljava/lang/Integer;)I" />
+		<method name="compareUnsigned(II)I" since="26" />
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Integer;" />
+		<method name="divideUnsigned(II)I" since="26" />
+		<method name="getInteger(Ljava/lang/String;)Ljava/lang/Integer;" />
+		<method name="getInteger(Ljava/lang/String;I)Ljava/lang/Integer;" />
+		<method name="getInteger(Ljava/lang/String;Ljava/lang/Integer;)Ljava/lang/Integer;" />
+		<method name="hashCode(I)I" since="24" />
+		<method name="highestOneBit(I)I" />
+		<method name="lowestOneBit(I)I" />
+		<method name="max(II)I" since="24" />
+		<method name="min(II)I" since="24" />
+		<method name="numberOfLeadingZeros(I)I" />
+		<method name="numberOfTrailingZeros(I)I" />
+		<method name="parseInt(Ljava/lang/String;)I" />
+		<method name="parseInt(Ljava/lang/String;I)I" />
+		<method name="parseUnsignedInt(Ljava/lang/String;)I" since="26" />
+		<method name="parseUnsignedInt(Ljava/lang/String;I)I" since="26" />
+		<method name="remainderUnsigned(II)I" since="26" />
+		<method name="reverse(I)I" />
+		<method name="reverseBytes(I)I" />
+		<method name="rotateLeft(II)I" />
+		<method name="rotateRight(II)I" />
+		<method name="signum(I)I" />
+		<method name="sum(II)I" since="24" />
+		<method name="toBinaryString(I)Ljava/lang/String;" />
+		<method name="toHexString(I)Ljava/lang/String;" />
+		<method name="toOctalString(I)Ljava/lang/String;" />
+		<method name="toString(I)Ljava/lang/String;" />
+		<method name="toString(II)Ljava/lang/String;" />
+		<method name="toUnsignedLong(I)J" since="26" />
+		<method name="toUnsignedString(I)Ljava/lang/String;" since="26" />
+		<method name="toUnsignedString(II)Ljava/lang/String;" since="26" />
+		<method name="valueOf(I)Ljava/lang/Integer;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Integer;" />
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Integer;" />
+		<field name="BYTES" since="24" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_VALUE" />
+		<field name="SIZE" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/InternalError" since="1">
+		<extends name="java/lang/VirtualMachineError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="24" />
+	</class>
+	<class name="java/lang/InterruptedException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Iterable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="forEach(Ljava/util/function/Consumer;)V" since="24" />
+		<method name="iterator()Ljava/util/Iterator;" />
+		<method name="spliterator()Ljava/util/Spliterator;" since="24" />
+	</class>
+	<class name="java/lang/LinkageError" since="1">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19" />
+	</class>
+	<class name="java/lang/Long" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="bitCount(J)I" />
+		<method name="compare(JJ)I" since="19" />
+		<method name="compareTo(Ljava/lang/Long;)I" />
+		<method name="compareUnsigned(JJ)I" since="26" />
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Long;" />
+		<method name="divideUnsigned(JJ)J" since="26" />
+		<method name="getLong(Ljava/lang/String;)Ljava/lang/Long;" />
+		<method name="getLong(Ljava/lang/String;J)Ljava/lang/Long;" />
+		<method name="getLong(Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long;" />
+		<method name="hashCode(J)I" since="24" />
+		<method name="highestOneBit(J)J" />
+		<method name="lowestOneBit(J)J" />
+		<method name="max(JJ)J" since="24" />
+		<method name="min(JJ)J" since="24" />
+		<method name="numberOfLeadingZeros(J)I" />
+		<method name="numberOfTrailingZeros(J)I" />
+		<method name="parseLong(Ljava/lang/String;)J" />
+		<method name="parseLong(Ljava/lang/String;I)J" />
+		<method name="parseUnsignedLong(Ljava/lang/String;)J" since="26" />
+		<method name="parseUnsignedLong(Ljava/lang/String;I)J" since="26" />
+		<method name="remainderUnsigned(JJ)J" since="26" />
+		<method name="reverse(J)J" />
+		<method name="reverseBytes(J)J" />
+		<method name="rotateLeft(JI)J" />
+		<method name="rotateRight(JI)J" />
+		<method name="signum(J)I" />
+		<method name="sum(JJ)J" since="24" />
+		<method name="toBinaryString(J)Ljava/lang/String;" />
+		<method name="toHexString(J)Ljava/lang/String;" />
+		<method name="toOctalString(J)Ljava/lang/String;" />
+		<method name="toString(J)Ljava/lang/String;" />
+		<method name="toString(JI)Ljava/lang/String;" />
+		<method name="toUnsignedString(J)Ljava/lang/String;" since="26" />
+		<method name="toUnsignedString(JI)Ljava/lang/String;" since="26" />
+		<method name="valueOf(J)Ljava/lang/Long;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Long;" />
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Long;" />
+		<field name="BYTES" since="24" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_VALUE" />
+		<field name="SIZE" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/Math" since="1">
+		<extends name="java/lang/Object" />
+		<method name="IEEEremainder(DD)D" />
+		<method name="abs(D)D" />
+		<method name="abs(F)F" />
+		<method name="abs(I)I" />
+		<method name="abs(J)J" />
+		<method name="acos(D)D" />
+		<method name="addExact(II)I" since="24" />
+		<method name="addExact(JJ)J" since="24" />
+		<method name="asin(D)D" />
+		<method name="atan(D)D" />
+		<method name="atan2(DD)D" />
+		<method name="cbrt(D)D" />
+		<method name="ceil(D)D" />
+		<method name="copySign(DD)D" since="9" />
+		<method name="copySign(FF)F" since="9" />
+		<method name="cos(D)D" />
+		<method name="cosh(D)D" />
+		<method name="decrementExact(I)I" since="24" />
+		<method name="decrementExact(J)J" since="24" />
+		<method name="exp(D)D" />
+		<method name="expm1(D)D" />
+		<method name="floor(D)D" />
+		<method name="floorDiv(II)I" since="24" />
+		<method name="floorDiv(JI)J" since="31" />
+		<method name="floorDiv(JJ)J" since="24" />
+		<method name="floorMod(II)I" since="24" />
+		<method name="floorMod(JI)I" since="31" />
+		<method name="floorMod(JJ)J" since="24" />
+		<method name="getExponent(D)I" since="9" />
+		<method name="getExponent(F)I" since="9" />
+		<method name="hypot(DD)D" />
+		<method name="incrementExact(I)I" since="24" />
+		<method name="incrementExact(J)J" since="24" />
+		<method name="log(D)D" />
+		<method name="log10(D)D" />
+		<method name="log1p(D)D" />
+		<method name="max(DD)D" />
+		<method name="max(FF)F" />
+		<method name="max(II)I" />
+		<method name="max(JJ)J" />
+		<method name="min(DD)D" />
+		<method name="min(FF)F" />
+		<method name="min(II)I" />
+		<method name="min(JJ)J" />
+		<method name="multiplyExact(II)I" since="24" />
+		<method name="multiplyExact(JI)J" since="31" />
+		<method name="multiplyExact(JJ)J" since="24" />
+		<method name="multiplyFull(II)J" since="31" />
+		<method name="multiplyHigh(JJ)J" since="31" />
+		<method name="negateExact(I)I" since="24" />
+		<method name="negateExact(J)J" since="24" />
+		<method name="nextAfter(DD)D" since="9" />
+		<method name="nextAfter(FD)F" since="9" />
+		<method name="nextDown(D)D" since="24" />
+		<method name="nextDown(F)F" since="24" />
+		<method name="nextUp(D)D" since="9" />
+		<method name="nextUp(F)F" since="9" />
+		<method name="pow(DD)D" />
+		<method name="random()D" />
+		<method name="rint(D)D" />
+		<method name="round(D)J" />
+		<method name="round(F)I" />
+		<method name="scalb(DI)D" since="9" />
+		<method name="scalb(FI)F" since="9" />
+		<method name="signum(D)D" />
+		<method name="signum(F)F" />
+		<method name="sin(D)D" />
+		<method name="sinh(D)D" />
+		<method name="sqrt(D)D" />
+		<method name="subtractExact(II)I" since="24" />
+		<method name="subtractExact(JJ)J" since="24" />
+		<method name="tan(D)D" />
+		<method name="tanh(D)D" />
+		<method name="toDegrees(D)D" />
+		<method name="toIntExact(J)I" since="24" />
+		<method name="toRadians(D)D" />
+		<method name="ulp(D)D" />
+		<method name="ulp(F)F" />
+		<field name="E" />
+		<field name="PI" />
+	</class>
+	<class name="java/lang/NegativeArraySizeException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/NoClassDefFoundError" since="1">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/NoSuchFieldError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/NoSuchFieldException" since="1">
+		<extends name="java/lang/Exception" removed="19" />
+		<extends name="java/lang/ReflectiveOperationException" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/NoSuchMethodError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/NoSuchMethodException" since="1">
+		<extends name="java/lang/Exception" removed="19" />
+		<extends name="java/lang/ReflectiveOperationException" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/NullPointerException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Number" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="byteValue()B" />
+		<method name="doubleValue()D" />
+		<method name="floatValue()F" />
+		<method name="intValue()I" />
+		<method name="longValue()J" />
+		<method name="shortValue()S" />
+	</class>
+	<class name="java/lang/NumberFormatException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Object" since="1">
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Ljava/lang/Object;" />
+		<method name="equals(Ljava/lang/Object;)Z" />
+		<method name="finalize()V" />
+		<method name="getClass()Ljava/lang/Class;" />
+		<method name="hashCode()I" />
+		<method name="notify()V" />
+		<method name="notifyAll()V" />
+		<method name="toString()Ljava/lang/String;" />
+		<method name="wait()V" />
+		<method name="wait(J)V" />
+		<method name="wait(JI)V" />
+	</class>
+	<class name="java/lang/OutOfMemoryError" since="1">
+		<extends name="java/lang/VirtualMachineError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/Override" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="java/lang/Package" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/AnnotatedElement" />
+		<method name="getImplementationTitle()Ljava/lang/String;" />
+		<method name="getImplementationVendor()Ljava/lang/String;" />
+		<method name="getImplementationVersion()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPackage(Ljava/lang/String;)Ljava/lang/Package;" />
+		<method name="getPackages()[Ljava/lang/Package;" />
+		<method name="getSpecificationTitle()Ljava/lang/String;" />
+		<method name="getSpecificationVendor()Ljava/lang/String;" />
+		<method name="getSpecificationVersion()Ljava/lang/String;" />
+		<method name="isCompatibleWith(Ljava/lang/String;)Z" />
+		<method name="isSealed()Z" />
+		<method name="isSealed(Ljava/net/URL;)Z" />
+	</class>
+	<class name="java/lang/Process" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="destroy()V" />
+		<method name="destroyForcibly()Ljava/lang/Process;" since="26" />
+		<method name="exitValue()I" />
+		<method name="getErrorStream()Ljava/io/InputStream;" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="isAlive()Z" since="26" />
+		<method name="waitFor()I" />
+		<method name="waitFor(JLjava/util/concurrent/TimeUnit;)Z" since="26" />
+	</class>
+	<class name="java/lang/ProcessBuilder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/util/List;)V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;)V" />
+		<method name="command()Ljava/util/List;" />
+		<method name="command(Ljava/util/List;)Ljava/lang/ProcessBuilder;" />
+		<method name="command([Ljava/lang/String;)Ljava/lang/ProcessBuilder;" />
+		<method name="directory()Ljava/io/File;" />
+		<method name="directory(Ljava/io/File;)Ljava/lang/ProcessBuilder;" />
+		<method name="environment()Ljava/util/Map;" />
+		<method name="inheritIO()Ljava/lang/ProcessBuilder;" since="26" />
+		<method name="redirectError()Ljava/lang/ProcessBuilder$Redirect;" since="26" />
+		<method name="redirectError(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26" />
+		<method name="redirectError(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26" />
+		<method name="redirectErrorStream()Z" />
+		<method name="redirectErrorStream(Z)Ljava/lang/ProcessBuilder;" />
+		<method name="redirectInput()Ljava/lang/ProcessBuilder$Redirect;" since="26" />
+		<method name="redirectInput(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26" />
+		<method name="redirectInput(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26" />
+		<method name="redirectOutput()Ljava/lang/ProcessBuilder$Redirect;" since="26" />
+		<method name="redirectOutput(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26" />
+		<method name="redirectOutput(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26" />
+		<method name="start()Ljava/lang/Process;" />
+	</class>
+	<class name="java/lang/ProcessBuilder$Redirect" since="26">
+		<extends name="java/lang/Object" />
+		<method name="appendTo(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;" />
+		<method name="file()Ljava/io/File;" />
+		<method name="from(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;" />
+		<method name="to(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;" />
+		<method name="type()Ljava/lang/ProcessBuilder$Redirect$Type;" />
+		<field name="INHERIT" />
+		<field name="PIPE" />
+	</class>
+	<class name="java/lang/ProcessBuilder$Redirect$Type" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/ProcessBuilder$Redirect$Type;" />
+		<method name="values()[Ljava/lang/ProcessBuilder$Redirect$Type;" />
+		<field name="APPEND" />
+		<field name="INHERIT" />
+		<field name="PIPE" />
+		<field name="READ" />
+		<field name="WRITE" />
+	</class>
+	<class name="java/lang/Readable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="read(Ljava/nio/CharBuffer;)I" />
+	</class>
+	<class name="java/lang/ReflectiveOperationException" since="19">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/Runnable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="run()V" />
+	</class>
+	<class name="java/lang/Runtime" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addShutdownHook(Ljava/lang/Thread;)V" />
+		<method name="availableProcessors()I" />
+		<method name="exec(Ljava/lang/String;)Ljava/lang/Process;" />
+		<method name="exec(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process;" />
+		<method name="exec(Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;" />
+		<method name="exec([Ljava/lang/String;)Ljava/lang/Process;" />
+		<method name="exec([Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process;" />
+		<method name="exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;" />
+		<method name="exit(I)V" />
+		<method name="freeMemory()J" />
+		<method name="gc()V" />
+		<method name="getLocalizedInputStream(Ljava/io/InputStream;)Ljava/io/InputStream;" deprecated="15" />
+		<method name="getLocalizedOutputStream(Ljava/io/OutputStream;)Ljava/io/OutputStream;" deprecated="15" />
+		<method name="getRuntime()Ljava/lang/Runtime;" />
+		<method name="halt(I)V" />
+		<method name="load(Ljava/lang/String;)V" />
+		<method name="loadLibrary(Ljava/lang/String;)V" />
+		<method name="maxMemory()J" />
+		<method name="removeShutdownHook(Ljava/lang/Thread;)Z" />
+		<method name="runFinalization()V" />
+		<method name="runFinalizersOnExit(Z)V" deprecated="15" />
+		<method name="totalMemory()J" />
+		<method name="traceInstructions(Z)V" />
+		<method name="traceMethodCalls(Z)V" />
+	</class>
+	<class name="java/lang/RuntimeException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/RuntimePermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/SafeVarargs" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="java/lang/SecurityException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/SecurityManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="checkAccept(Ljava/lang/String;I)V" />
+		<method name="checkAccess(Ljava/lang/Thread;)V" />
+		<method name="checkAccess(Ljava/lang/ThreadGroup;)V" />
+		<method name="checkAwtEventQueueAccess()V" />
+		<method name="checkConnect(Ljava/lang/String;I)V" />
+		<method name="checkConnect(Ljava/lang/String;ILjava/lang/Object;)V" />
+		<method name="checkCreateClassLoader()V" />
+		<method name="checkDelete(Ljava/lang/String;)V" />
+		<method name="checkExec(Ljava/lang/String;)V" />
+		<method name="checkExit(I)V" />
+		<method name="checkLink(Ljava/lang/String;)V" />
+		<method name="checkListen(I)V" />
+		<method name="checkMemberAccess(Ljava/lang/Class;I)V" />
+		<method name="checkMulticast(Ljava/net/InetAddress;)V" />
+		<method name="checkMulticast(Ljava/net/InetAddress;B)V" deprecated="15" />
+		<method name="checkPackageAccess(Ljava/lang/String;)V" />
+		<method name="checkPackageDefinition(Ljava/lang/String;)V" />
+		<method name="checkPermission(Ljava/security/Permission;)V" />
+		<method name="checkPermission(Ljava/security/Permission;Ljava/lang/Object;)V" />
+		<method name="checkPrintJobAccess()V" />
+		<method name="checkPropertiesAccess()V" />
+		<method name="checkPropertyAccess(Ljava/lang/String;)V" />
+		<method name="checkRead(Ljava/io/FileDescriptor;)V" />
+		<method name="checkRead(Ljava/lang/String;)V" />
+		<method name="checkRead(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="checkSecurityAccess(Ljava/lang/String;)V" />
+		<method name="checkSetFactory()V" />
+		<method name="checkSystemClipboardAccess()V" />
+		<method name="checkTopLevelWindow(Ljava/lang/Object;)Z" />
+		<method name="checkWrite(Ljava/io/FileDescriptor;)V" />
+		<method name="checkWrite(Ljava/lang/String;)V" />
+		<method name="classDepth(Ljava/lang/String;)I" deprecated="15" />
+		<method name="classLoaderDepth()I" deprecated="15" />
+		<method name="currentClassLoader()Ljava/lang/ClassLoader;" deprecated="15" />
+		<method name="currentLoadedClass()Ljava/lang/Class;" deprecated="15" />
+		<method name="getClassContext()[Ljava/lang/Class;" />
+		<method name="getInCheck()Z" deprecated="15" />
+		<method name="getSecurityContext()Ljava/lang/Object;" />
+		<method name="getThreadGroup()Ljava/lang/ThreadGroup;" />
+		<method name="inClass(Ljava/lang/String;)Z" deprecated="15" />
+		<method name="inClassLoader()Z" deprecated="15" />
+		<field name="inCheck" deprecated="15" />
+	</class>
+	<class name="java/lang/Short" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="31" />
+		<method name="&lt;init&gt;(S)V" deprecated="31" />
+		<method name="compare(SS)I" since="19" />
+		<method name="compareTo(Ljava/lang/Short;)I" />
+		<method name="compareUnsigned(SS)I" since="31" />
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Short;" />
+		<method name="hashCode(S)I" since="24" />
+		<method name="parseShort(Ljava/lang/String;)S" />
+		<method name="parseShort(Ljava/lang/String;I)S" />
+		<method name="reverseBytes(S)S" />
+		<method name="toString(S)Ljava/lang/String;" />
+		<method name="toUnsignedInt(S)I" since="26" />
+		<method name="toUnsignedLong(S)J" since="26" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Short;" />
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Short;" />
+		<method name="valueOf(S)Ljava/lang/Short;" />
+		<field name="BYTES" since="24" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_VALUE" />
+		<field name="SIZE" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/StackOverflowError" since="1">
+		<extends name="java/lang/VirtualMachineError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/StackTraceElement" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="getClassName()Ljava/lang/String;" />
+		<method name="getFileName()Ljava/lang/String;" />
+		<method name="getLineNumber()I" />
+		<method name="getMethodName()Ljava/lang/String;" />
+		<method name="isNativeMethod()Z" />
+	</class>
+	<class name="java/lang/StrictMath" since="1">
+		<extends name="java/lang/Object" />
+		<method name="IEEEremainder(DD)D" />
+		<method name="abs(D)D" />
+		<method name="abs(F)F" />
+		<method name="abs(I)I" />
+		<method name="abs(J)J" />
+		<method name="acos(D)D" />
+		<method name="addExact(II)I" since="24" />
+		<method name="addExact(JJ)J" since="24" />
+		<method name="asin(D)D" />
+		<method name="atan(D)D" />
+		<method name="atan2(DD)D" />
+		<method name="cbrt(D)D" />
+		<method name="ceil(D)D" />
+		<method name="copySign(DD)D" since="9" />
+		<method name="copySign(FF)F" since="9" />
+		<method name="cos(D)D" />
+		<method name="cosh(D)D" />
+		<method name="exp(D)D" />
+		<method name="expm1(D)D" />
+		<method name="floor(D)D" />
+		<method name="floorDiv(II)I" since="24" />
+		<method name="floorDiv(JI)J" since="31" />
+		<method name="floorDiv(JJ)J" since="24" />
+		<method name="floorMod(II)I" since="24" />
+		<method name="floorMod(JI)I" since="31" />
+		<method name="floorMod(JJ)J" since="24" />
+		<method name="getExponent(D)I" since="9" />
+		<method name="getExponent(F)I" since="9" />
+		<method name="hypot(DD)D" />
+		<method name="log(D)D" />
+		<method name="log10(D)D" />
+		<method name="log1p(D)D" />
+		<method name="max(DD)D" />
+		<method name="max(FF)F" />
+		<method name="max(II)I" />
+		<method name="max(JJ)J" />
+		<method name="min(DD)D" />
+		<method name="min(FF)F" />
+		<method name="min(II)I" />
+		<method name="min(JJ)J" />
+		<method name="multiplyExact(II)I" since="24" />
+		<method name="multiplyExact(JI)J" since="31" />
+		<method name="multiplyExact(JJ)J" since="24" />
+		<method name="multiplyFull(II)J" since="31" />
+		<method name="multiplyHigh(JJ)J" since="31" />
+		<method name="nextAfter(DD)D" since="9" />
+		<method name="nextAfter(FD)F" since="9" />
+		<method name="nextDown(D)D" since="24" />
+		<method name="nextDown(F)F" since="24" />
+		<method name="nextUp(D)D" since="9" />
+		<method name="nextUp(F)F" since="9" />
+		<method name="pow(DD)D" />
+		<method name="random()D" />
+		<method name="rint(D)D" />
+		<method name="round(D)J" />
+		<method name="round(F)I" />
+		<method name="scalb(DI)D" since="9" />
+		<method name="scalb(FI)F" since="9" />
+		<method name="signum(D)D" />
+		<method name="signum(F)F" />
+		<method name="sin(D)D" />
+		<method name="sinh(D)D" />
+		<method name="sqrt(D)D" />
+		<method name="subtractExact(II)I" since="24" />
+		<method name="subtractExact(JJ)J" since="24" />
+		<method name="tan(D)D" />
+		<method name="tanh(D)D" />
+		<method name="toDegrees(D)D" />
+		<method name="toIntExact(J)I" since="24" />
+		<method name="toRadians(D)D" />
+		<method name="ulp(D)D" />
+		<method name="ulp(F)F" />
+		<field name="E" />
+		<field name="PI" />
+	</class>
+	<class name="java/lang/String" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/CharSequence" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/StringBuffer;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/StringBuilder;)V" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="&lt;init&gt;([BI)V" deprecated="15" />
+		<method name="&lt;init&gt;([BII)V" />
+		<method name="&lt;init&gt;([BIII)V" deprecated="15" />
+		<method name="&lt;init&gt;([BIILjava/lang/String;)V" />
+		<method name="&lt;init&gt;([BIILjava/nio/charset/Charset;)V" since="9" />
+		<method name="&lt;init&gt;([BLjava/lang/String;)V" />
+		<method name="&lt;init&gt;([BLjava/nio/charset/Charset;)V" since="9" />
+		<method name="&lt;init&gt;([C)V" />
+		<method name="&lt;init&gt;([CII)V" />
+		<method name="&lt;init&gt;([III)V" />
+		<method name="codePointAt(I)I" />
+		<method name="codePointBefore(I)I" />
+		<method name="codePointCount(II)I" />
+		<method name="compareTo(Ljava/lang/String;)I" />
+		<method name="compareToIgnoreCase(Ljava/lang/String;)I" />
+		<method name="concat(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="contains(Ljava/lang/CharSequence;)Z" />
+		<method name="contentEquals(Ljava/lang/CharSequence;)Z" />
+		<method name="contentEquals(Ljava/lang/StringBuffer;)Z" />
+		<method name="copyValueOf([C)Ljava/lang/String;" />
+		<method name="copyValueOf([CII)Ljava/lang/String;" />
+		<method name="endsWith(Ljava/lang/String;)Z" />
+		<method name="equalsIgnoreCase(Ljava/lang/String;)Z" />
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="getBytes()[B" />
+		<method name="getBytes(II[BI)V" deprecated="15" />
+		<method name="getBytes(Ljava/lang/String;)[B" />
+		<method name="getBytes(Ljava/nio/charset/Charset;)[B" since="9" />
+		<method name="getChars(II[CI)V" />
+		<method name="indexOf(I)I" />
+		<method name="indexOf(II)I" />
+		<method name="indexOf(Ljava/lang/String;)I" />
+		<method name="indexOf(Ljava/lang/String;I)I" />
+		<method name="intern()Ljava/lang/String;" />
+		<method name="isEmpty()Z" since="9" />
+		<method name="join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;" since="26" />
+		<method name="join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;" since="26" />
+		<method name="lastIndexOf(I)I" />
+		<method name="lastIndexOf(II)I" />
+		<method name="lastIndexOf(Ljava/lang/String;)I" />
+		<method name="lastIndexOf(Ljava/lang/String;I)I" />
+		<method name="matches(Ljava/lang/String;)Z" />
+		<method name="offsetByCodePoints(II)I" />
+		<method name="regionMatches(ILjava/lang/String;II)Z" />
+		<method name="regionMatches(ZILjava/lang/String;II)Z" />
+		<method name="replace(CC)Ljava/lang/String;" />
+		<method name="replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;" />
+		<method name="replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="split(Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="split(Ljava/lang/String;I)[Ljava/lang/String;" />
+		<method name="startsWith(Ljava/lang/String;)Z" />
+		<method name="startsWith(Ljava/lang/String;I)Z" />
+		<method name="substring(I)Ljava/lang/String;" />
+		<method name="substring(II)Ljava/lang/String;" />
+		<method name="toCharArray()[C" />
+		<method name="toLowerCase()Ljava/lang/String;" />
+		<method name="toLowerCase(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="toUpperCase()Ljava/lang/String;" />
+		<method name="toUpperCase(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="trim()Ljava/lang/String;" />
+		<method name="valueOf(C)Ljava/lang/String;" />
+		<method name="valueOf(D)Ljava/lang/String;" />
+		<method name="valueOf(F)Ljava/lang/String;" />
+		<method name="valueOf(I)Ljava/lang/String;" />
+		<method name="valueOf(J)Ljava/lang/String;" />
+		<method name="valueOf(Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="valueOf(Z)Ljava/lang/String;" />
+		<method name="valueOf([C)Ljava/lang/String;" />
+		<method name="valueOf([CII)Ljava/lang/String;" />
+		<field name="CASE_INSENSITIVE_ORDER" />
+	</class>
+	<class name="java/lang/StringBuffer" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Appendable" />
+		<implements name="java/lang/CharSequence" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="append(C)Ljava/lang/StringBuffer;" />
+		<method name="append(D)Ljava/lang/StringBuffer;" />
+		<method name="append(F)Ljava/lang/StringBuffer;" />
+		<method name="append(I)Ljava/lang/StringBuffer;" />
+		<method name="append(J)Ljava/lang/StringBuffer;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer;" />
+		<method name="append(Ljava/lang/Object;)Ljava/lang/StringBuffer;" />
+		<method name="append(Ljava/lang/String;)Ljava/lang/StringBuffer;" />
+		<method name="append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;" />
+		<method name="append(Z)Ljava/lang/StringBuffer;" />
+		<method name="append([C)Ljava/lang/StringBuffer;" />
+		<method name="append([CII)Ljava/lang/StringBuffer;" />
+		<method name="appendCodePoint(I)Ljava/lang/StringBuffer;" />
+		<method name="delete(II)Ljava/lang/StringBuffer;" />
+		<method name="deleteCharAt(I)Ljava/lang/StringBuffer;" />
+		<method name="insert(IC)Ljava/lang/StringBuffer;" />
+		<method name="insert(ID)Ljava/lang/StringBuffer;" />
+		<method name="insert(IF)Ljava/lang/StringBuffer;" />
+		<method name="insert(II)Ljava/lang/StringBuffer;" />
+		<method name="insert(IJ)Ljava/lang/StringBuffer;" />
+		<method name="insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuffer;" />
+		<method name="insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuffer;" />
+		<method name="insert(ILjava/lang/Object;)Ljava/lang/StringBuffer;" />
+		<method name="insert(ILjava/lang/String;)Ljava/lang/StringBuffer;" />
+		<method name="insert(IZ)Ljava/lang/StringBuffer;" />
+		<method name="insert(I[C)Ljava/lang/StringBuffer;" />
+		<method name="insert(I[CII)Ljava/lang/StringBuffer;" />
+		<method name="replace(IILjava/lang/String;)Ljava/lang/StringBuffer;" />
+		<method name="reverse()Ljava/lang/StringBuffer;" />
+	</class>
+	<class name="java/lang/StringBuilder" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Appendable" />
+		<implements name="java/lang/CharSequence" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="append(C)Ljava/lang/StringBuilder;" />
+		<method name="append(D)Ljava/lang/StringBuilder;" />
+		<method name="append(F)Ljava/lang/StringBuilder;" />
+		<method name="append(I)Ljava/lang/StringBuilder;" />
+		<method name="append(J)Ljava/lang/StringBuilder;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;" />
+		<method name="append(Ljava/lang/Object;)Ljava/lang/StringBuilder;" />
+		<method name="append(Ljava/lang/String;)Ljava/lang/StringBuilder;" />
+		<method name="append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;" />
+		<method name="append(Z)Ljava/lang/StringBuilder;" />
+		<method name="append([C)Ljava/lang/StringBuilder;" />
+		<method name="append([CII)Ljava/lang/StringBuilder;" />
+		<method name="appendCodePoint(I)Ljava/lang/StringBuilder;" />
+		<method name="delete(II)Ljava/lang/StringBuilder;" />
+		<method name="deleteCharAt(I)Ljava/lang/StringBuilder;" />
+		<method name="insert(IC)Ljava/lang/StringBuilder;" />
+		<method name="insert(ID)Ljava/lang/StringBuilder;" />
+		<method name="insert(IF)Ljava/lang/StringBuilder;" />
+		<method name="insert(II)Ljava/lang/StringBuilder;" />
+		<method name="insert(IJ)Ljava/lang/StringBuilder;" />
+		<method name="insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuilder;" />
+		<method name="insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuilder;" />
+		<method name="insert(ILjava/lang/Object;)Ljava/lang/StringBuilder;" />
+		<method name="insert(ILjava/lang/String;)Ljava/lang/StringBuilder;" />
+		<method name="insert(IZ)Ljava/lang/StringBuilder;" />
+		<method name="insert(I[C)Ljava/lang/StringBuilder;" />
+		<method name="insert(I[CII)Ljava/lang/StringBuilder;" />
+		<method name="replace(IILjava/lang/String;)Ljava/lang/StringBuilder;" />
+		<method name="reverse()Ljava/lang/StringBuilder;" />
+	</class>
+	<class name="java/lang/StringIndexOutOfBoundsException" since="1">
+		<extends name="java/lang/IndexOutOfBoundsException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/SuppressWarnings" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="value()[Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/System" since="1">
+		<extends name="java/lang/Object" />
+		<method name="arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V" />
+		<method name="clearProperty(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="console()Ljava/io/Console;" since="9" />
+		<method name="currentTimeMillis()J" />
+		<method name="exit(I)V" />
+		<method name="gc()V" />
+		<method name="getProperties()Ljava/util/Properties;" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getSecurityManager()Ljava/lang/SecurityManager;" />
+		<method name="getenv()Ljava/util/Map;" />
+		<method name="getenv(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="identityHashCode(Ljava/lang/Object;)I" />
+		<method name="inheritedChannel()Ljava/nio/channels/Channel;" />
+		<method name="lineSeparator()Ljava/lang/String;" since="19" />
+		<method name="load(Ljava/lang/String;)V" />
+		<method name="loadLibrary(Ljava/lang/String;)V" />
+		<method name="mapLibraryName(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="nanoTime()J" />
+		<method name="runFinalization()V" />
+		<method name="runFinalizersOnExit(Z)V" deprecated="15" />
+		<method name="setErr(Ljava/io/PrintStream;)V" />
+		<method name="setIn(Ljava/io/InputStream;)V" />
+		<method name="setOut(Ljava/io/PrintStream;)V" />
+		<method name="setProperties(Ljava/util/Properties;)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="setSecurityManager(Ljava/lang/SecurityManager;)V" />
+		<field name="err" />
+		<field name="in" />
+		<field name="out" />
+	</class>
+	<class name="java/lang/Thread" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Runnable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Runnable;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V" />
+		<method name="&lt;init&gt;(Ljava/lang/ThreadGroup;Ljava/lang/String;)V" />
+		<method name="activeCount()I" />
+		<method name="checkAccess()V" />
+		<method name="countStackFrames()I" deprecated="15" />
+		<method name="currentThread()Ljava/lang/Thread;" />
+		<method name="destroy()V" deprecated="15" />
+		<method name="dumpStack()V" />
+		<method name="enumerate([Ljava/lang/Thread;)I" />
+		<method name="getAllStackTraces()Ljava/util/Map;" />
+		<method name="getContextClassLoader()Ljava/lang/ClassLoader;" />
+		<method name="getDefaultUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;" />
+		<method name="getId()J" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPriority()I" />
+		<method name="getStackTrace()[Ljava/lang/StackTraceElement;" />
+		<method name="getState()Ljava/lang/Thread$State;" />
+		<method name="getThreadGroup()Ljava/lang/ThreadGroup;" />
+		<method name="getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;" />
+		<method name="holdsLock(Ljava/lang/Object;)Z" />
+		<method name="interrupt()V" />
+		<method name="interrupted()Z" />
+		<method name="isAlive()Z" />
+		<method name="isDaemon()Z" />
+		<method name="isInterrupted()Z" />
+		<method name="join()V" />
+		<method name="join(J)V" />
+		<method name="join(JI)V" />
+		<method name="resume()V" deprecated="15" />
+		<method name="setContextClassLoader(Ljava/lang/ClassLoader;)V" />
+		<method name="setDaemon(Z)V" />
+		<method name="setDefaultUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V" />
+		<method name="setName(Ljava/lang/String;)V" />
+		<method name="setPriority(I)V" />
+		<method name="setUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V" />
+		<method name="sleep(J)V" />
+		<method name="sleep(JI)V" />
+		<method name="start()V" />
+		<method name="stop()V" deprecated="15" />
+		<method name="stop(Ljava/lang/Throwable;)V" deprecated="15" />
+		<method name="suspend()V" deprecated="15" />
+		<method name="yield()V" />
+		<field name="MAX_PRIORITY" />
+		<field name="MIN_PRIORITY" />
+		<field name="NORM_PRIORITY" />
+	</class>
+	<class name="java/lang/Thread$State" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Thread$State;" />
+		<method name="values()[Ljava/lang/Thread$State;" />
+		<field name="BLOCKED" />
+		<field name="NEW" />
+		<field name="RUNNABLE" />
+		<field name="TERMINATED" />
+		<field name="TIMED_WAITING" />
+		<field name="WAITING" />
+	</class>
+	<class name="java/lang/Thread$UncaughtExceptionHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="uncaughtException(Ljava/lang/Thread;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/ThreadDeath" since="1">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/lang/ThreadGroup" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Thread$UncaughtExceptionHandler" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/ThreadGroup;Ljava/lang/String;)V" />
+		<method name="activeCount()I" />
+		<method name="activeGroupCount()I" />
+		<method name="allowThreadSuspension(Z)Z" deprecated="15" />
+		<method name="checkAccess()V" />
+		<method name="destroy()V" />
+		<method name="enumerate([Ljava/lang/Thread;)I" />
+		<method name="enumerate([Ljava/lang/Thread;Z)I" />
+		<method name="enumerate([Ljava/lang/ThreadGroup;)I" />
+		<method name="enumerate([Ljava/lang/ThreadGroup;Z)I" />
+		<method name="getMaxPriority()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getParent()Ljava/lang/ThreadGroup;" />
+		<method name="interrupt()V" />
+		<method name="isDaemon()Z" />
+		<method name="isDestroyed()Z" />
+		<method name="list()V" />
+		<method name="parentOf(Ljava/lang/ThreadGroup;)Z" />
+		<method name="resume()V" deprecated="15" />
+		<method name="setDaemon(Z)V" />
+		<method name="setMaxPriority(I)V" />
+		<method name="stop()V" deprecated="15" />
+		<method name="suspend()V" deprecated="15" />
+	</class>
+	<class name="java/lang/ThreadLocal" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="get()Ljava/lang/Object;" />
+		<method name="initialValue()Ljava/lang/Object;" />
+		<method name="remove()V" />
+		<method name="set(Ljava/lang/Object;)V" />
+		<method name="withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal;" since="26" />
+	</class>
+	<class name="java/lang/Throwable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="19" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="addSuppressed(Ljava/lang/Throwable;)V" since="19" />
+		<method name="fillInStackTrace()Ljava/lang/Throwable;" />
+		<method name="getCause()Ljava/lang/Throwable;" />
+		<method name="getLocalizedMessage()Ljava/lang/String;" />
+		<method name="getMessage()Ljava/lang/String;" />
+		<method name="getStackTrace()[Ljava/lang/StackTraceElement;" />
+		<method name="getSuppressed()[Ljava/lang/Throwable;" since="19" />
+		<method name="initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;" />
+		<method name="printStackTrace()V" />
+		<method name="printStackTrace(Ljava/io/PrintStream;)V" />
+		<method name="printStackTrace(Ljava/io/PrintWriter;)V" />
+		<method name="setStackTrace([Ljava/lang/StackTraceElement;)V" />
+	</class>
+	<class name="java/lang/TypeNotPresentException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="typeName()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/UnknownError" since="1">
+		<extends name="java/lang/VirtualMachineError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/UnsatisfiedLinkError" since="1">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/UnsupportedClassVersionError" since="1">
+		<extends name="java/lang/ClassFormatError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/UnsupportedOperationException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/VerifyError" since="1">
+		<extends name="java/lang/LinkageError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/VirtualMachineError" since="1">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="24" />
+	</class>
+	<class name="java/lang/Void" since="1">
+		<extends name="java/lang/Object" />
+		<field name="TYPE" />
+	</class>
+	<class name="java/lang/annotation/Annotation" since="1">
+		<extends name="java/lang/Object" />
+		<method name="annotationType()Ljava/lang/Class;" />
+	</class>
+	<class name="java/lang/annotation/AnnotationFormatError" since="1">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/annotation/AnnotationTypeMismatchException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/reflect/Method;Ljava/lang/String;)V" />
+		<method name="element()Ljava/lang/reflect/Method;" />
+		<method name="foundType()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/annotation/Documented" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="java/lang/annotation/ElementType" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/annotation/ElementType;" />
+		<method name="values()[Ljava/lang/annotation/ElementType;" />
+		<field name="ANNOTATION_TYPE" />
+		<field name="CONSTRUCTOR" />
+		<field name="FIELD" />
+		<field name="LOCAL_VARIABLE" />
+		<field name="METHOD" />
+		<field name="MODULE" since="31" />
+		<field name="PACKAGE" />
+		<field name="PARAMETER" />
+		<field name="TYPE" />
+		<field name="TYPE_PARAMETER" since="26" />
+		<field name="TYPE_USE" since="26" />
+	</class>
+	<class name="java/lang/annotation/IncompleteAnnotationException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" />
+		<method name="annotationType()Ljava/lang/Class;" />
+		<method name="elementName()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/annotation/Inherited" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="java/lang/annotation/Native" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+	</class>
+	<class name="java/lang/annotation/Repeatable" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="value()Ljava/lang/Class;" />
+	</class>
+	<class name="java/lang/annotation/Retention" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="value()Ljava/lang/annotation/RetentionPolicy;" />
+	</class>
+	<class name="java/lang/annotation/RetentionPolicy" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/annotation/RetentionPolicy;" />
+		<method name="values()[Ljava/lang/annotation/RetentionPolicy;" />
+		<field name="CLASS" />
+		<field name="RUNTIME" />
+		<field name="SOURCE" />
+	</class>
+	<class name="java/lang/annotation/Target" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/annotation/Annotation" />
+		<method name="value()[Ljava/lang/annotation/ElementType;" />
+	</class>
+	<class name="java/lang/invoke/CallSite" since="26">
+		<extends name="java/lang/Object" />
+		<method name="dynamicInvoker()Ljava/lang/invoke/MethodHandle;" />
+		<method name="getTarget()Ljava/lang/invoke/MethodHandle;" />
+		<method name="setTarget(Ljava/lang/invoke/MethodHandle;)V" />
+		<method name="type()Ljava/lang/invoke/MethodType;" />
+	</class>
+	<class name="java/lang/invoke/ConstantCallSite" since="26">
+		<extends name="java/lang/invoke/CallSite" />
+		<method name="&lt;init&gt;(Ljava/lang/invoke/MethodHandle;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)V" />
+	</class>
+	<class name="java/lang/invoke/LambdaConversionException" since="26">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/lang/invoke/MethodHandle" since="26">
+		<extends name="java/lang/Object" />
+		<method name="asCollector(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;" />
+		<method name="asFixedArity()Ljava/lang/invoke/MethodHandle;" />
+		<method name="asSpreader(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;" />
+		<method name="asType(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="asVarargsCollector(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="bindTo(Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="invoke([Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="invokeExact([Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="invokeWithArguments(Ljava/util/List;)Ljava/lang/Object;" />
+		<method name="invokeWithArguments([Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="isVarargsCollector()Z" />
+		<method name="type()Ljava/lang/invoke/MethodType;" />
+	</class>
+	<class name="java/lang/invoke/MethodHandleInfo" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getDeclaringClass()Ljava/lang/Class;" />
+		<method name="getMethodType()Ljava/lang/invoke/MethodType;" />
+		<method name="getModifiers()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getReferenceKind()I" />
+		<method name="isVarArgs()Z" />
+		<method name="refKindIsField(I)Z" deprecated="29" />
+		<method name="refKindIsValid(I)Z" deprecated="29" />
+		<method name="refKindName(I)Ljava/lang/String;" deprecated="29" />
+		<method name="referenceKindToString(I)Ljava/lang/String;" />
+		<method name="reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/reflect/Member;" />
+		<method name="toString(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/String;" />
+		<field name="REF_getField" />
+		<field name="REF_getStatic" />
+		<field name="REF_invokeInterface" />
+		<field name="REF_invokeSpecial" />
+		<field name="REF_invokeStatic" />
+		<field name="REF_invokeVirtual" />
+		<field name="REF_newInvokeSpecial" />
+		<field name="REF_putField" />
+		<field name="REF_putStatic" />
+	</class>
+	<class name="java/lang/invoke/MethodHandles" since="26">
+		<extends name="java/lang/Object" />
+		<method name="arrayElementGetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="arrayElementSetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="catchException(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="collectArguments(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="constant(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="dropArguments(Ljava/lang/invoke/MethodHandle;ILjava/util/List;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="dropArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="exactInvoker(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="explicitCastArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="filterArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="filterReturnValue(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="foldArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="guardWithTest(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="identity(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="insertArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="invoker(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="lookup()Ljava/lang/invoke/MethodHandles$Lookup;" />
+		<method name="permuteArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;" />
+		<method name="publicLookup()Ljava/lang/invoke/MethodHandles$Lookup;" />
+		<method name="reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/reflect/Member;" />
+		<method name="spreadInvoker(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;" />
+		<method name="throwException(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+	</class>
+	<class name="java/lang/invoke/MethodHandles$Lookup" since="26">
+		<extends name="java/lang/Object" />
+		<method name="bind(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findConstructor(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findGetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findSetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findSpecial(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findStatic(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findStaticGetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findStaticSetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="findVirtual(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="in(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandles$Lookup;" />
+		<method name="lookupClass()Ljava/lang/Class;" />
+		<method name="lookupModes()I" />
+		<method name="revealDirect(Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandleInfo;" />
+		<method name="unreflect(Ljava/lang/reflect/Method;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="unreflectConstructor(Ljava/lang/reflect/Constructor;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="unreflectGetter(Ljava/lang/reflect/Field;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="unreflectSetter(Ljava/lang/reflect/Field;)Ljava/lang/invoke/MethodHandle;" />
+		<method name="unreflectSpecial(Ljava/lang/reflect/Method;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;" />
+		<field name="PACKAGE" />
+		<field name="PRIVATE" />
+		<field name="PROTECTED" />
+		<field name="PUBLIC" />
+	</class>
+	<class name="java/lang/invoke/MethodType" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="appendParameterTypes(Ljava/util/List;)Ljava/lang/invoke/MethodType;" />
+		<method name="appendParameterTypes([Ljava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="changeParameterType(ILjava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="changeReturnType(Ljava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="dropParameterTypes(II)Ljava/lang/invoke/MethodType;" />
+		<method name="erase()Ljava/lang/invoke/MethodType;" />
+		<method name="fromMethodDescriptorString(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/invoke/MethodType;" />
+		<method name="generic()Ljava/lang/invoke/MethodType;" />
+		<method name="genericMethodType(I)Ljava/lang/invoke/MethodType;" />
+		<method name="genericMethodType(IZ)Ljava/lang/invoke/MethodType;" />
+		<method name="hasPrimitives()Z" />
+		<method name="hasWrappers()Z" />
+		<method name="insertParameterTypes(ILjava/util/List;)Ljava/lang/invoke/MethodType;" />
+		<method name="insertParameterTypes(I[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="methodType(Ljava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="methodType(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="methodType(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="methodType(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType;" />
+		<method name="methodType(Ljava/lang/Class;Ljava/util/List;)Ljava/lang/invoke/MethodType;" />
+		<method name="methodType(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;" />
+		<method name="parameterArray()[Ljava/lang/Class;" />
+		<method name="parameterCount()I" />
+		<method name="parameterList()Ljava/util/List;" />
+		<method name="parameterType(I)Ljava/lang/Class;" />
+		<method name="returnType()Ljava/lang/Class;" />
+		<method name="toMethodDescriptorString()Ljava/lang/String;" />
+		<method name="unwrap()Ljava/lang/invoke/MethodType;" />
+		<method name="wrap()Ljava/lang/invoke/MethodType;" />
+	</class>
+	<class name="java/lang/invoke/MutableCallSite" since="26">
+		<extends name="java/lang/invoke/CallSite" />
+		<method name="&lt;init&gt;(Ljava/lang/invoke/MethodHandle;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/invoke/MethodType;)V" />
+	</class>
+	<class name="java/lang/invoke/VolatileCallSite" since="26">
+		<extends name="java/lang/invoke/CallSite" />
+		<method name="&lt;init&gt;(Ljava/lang/invoke/MethodHandle;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/invoke/MethodType;)V" />
+	</class>
+	<class name="java/lang/invoke/WrongMethodTypeException" since="26">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/ref/PhantomReference" since="1">
+		<extends name="java/lang/ref/Reference" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V" />
+	</class>
+	<class name="java/lang/ref/Reference" since="1">
+		<extends name="java/lang/Object" />
+		<method name="clear()V" />
+		<method name="enqueue()Z" />
+		<method name="get()Ljava/lang/Object;" />
+		<method name="isEnqueued()Z" deprecated="31" />
+		<method name="reachabilityFence(Ljava/lang/Object;)V" since="28" />
+	</class>
+	<class name="java/lang/ref/ReferenceQueue" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="poll()Ljava/lang/ref/Reference;" />
+		<method name="remove()Ljava/lang/ref/Reference;" />
+		<method name="remove(J)Ljava/lang/ref/Reference;" />
+	</class>
+	<class name="java/lang/ref/SoftReference" since="1">
+		<extends name="java/lang/ref/Reference" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V" />
+	</class>
+	<class name="java/lang/ref/WeakReference" since="1">
+		<extends name="java/lang/ref/Reference" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V" />
+	</class>
+	<class name="java/lang/reflect/AccessibleObject" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/AnnotatedElement" />
+		<method name="&lt;init&gt;()V" />
+		<method name="isAccessible()Z" />
+		<method name="setAccessible(Z)V" />
+		<method name="setAccessible([Ljava/lang/reflect/AccessibleObject;Z)V" />
+	</class>
+	<class name="java/lang/reflect/AnnotatedElement" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" />
+		<method name="getAnnotations()[Ljava/lang/annotation/Annotation;" />
+		<method name="getAnnotationsByType(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;" since="24" />
+		<method name="getDeclaredAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" since="24" />
+		<method name="getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;" />
+		<method name="getDeclaredAnnotationsByType(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;" since="24" />
+		<method name="isAnnotationPresent(Ljava/lang/Class;)Z" />
+	</class>
+	<class name="java/lang/reflect/Array" since="1">
+		<extends name="java/lang/Object" />
+		<method name="get(Ljava/lang/Object;I)Ljava/lang/Object;" />
+		<method name="getBoolean(Ljava/lang/Object;I)Z" />
+		<method name="getByte(Ljava/lang/Object;I)B" />
+		<method name="getChar(Ljava/lang/Object;I)C" />
+		<method name="getDouble(Ljava/lang/Object;I)D" />
+		<method name="getFloat(Ljava/lang/Object;I)F" />
+		<method name="getInt(Ljava/lang/Object;I)I" />
+		<method name="getLength(Ljava/lang/Object;)I" />
+		<method name="getLong(Ljava/lang/Object;I)J" />
+		<method name="getShort(Ljava/lang/Object;I)S" />
+		<method name="newInstance(Ljava/lang/Class;I)Ljava/lang/Object;" />
+		<method name="newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;" />
+		<method name="set(Ljava/lang/Object;ILjava/lang/Object;)V" />
+		<method name="setBoolean(Ljava/lang/Object;IZ)V" />
+		<method name="setByte(Ljava/lang/Object;IB)V" />
+		<method name="setChar(Ljava/lang/Object;IC)V" />
+		<method name="setDouble(Ljava/lang/Object;ID)V" />
+		<method name="setFloat(Ljava/lang/Object;IF)V" />
+		<method name="setInt(Ljava/lang/Object;II)V" />
+		<method name="setLong(Ljava/lang/Object;IJ)V" />
+		<method name="setShort(Ljava/lang/Object;IS)V" />
+	</class>
+	<class name="java/lang/reflect/Constructor" since="1">
+		<extends name="java/lang/reflect/AccessibleObject" removed="26" />
+		<extends name="java/lang/reflect/Executable" since="26" />
+		<implements name="java/lang/reflect/GenericDeclaration" removed="26" />
+		<implements name="java/lang/reflect/Member" removed="26" />
+		<method name="getExceptionTypes()[Ljava/lang/Class;" />
+		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;" />
+		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;" />
+		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;" />
+		<method name="getParameterTypes()[Ljava/lang/Class;" />
+		<method name="isVarArgs()Z" />
+		<method name="newInstance([Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="toGenericString()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/reflect/Executable" since="26">
+		<extends name="java/lang/reflect/AccessibleObject" />
+		<implements name="java/lang/reflect/GenericDeclaration" />
+		<implements name="java/lang/reflect/Member" />
+		<method name="getExceptionTypes()[Ljava/lang/Class;" />
+		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;" />
+		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;" />
+		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;" />
+		<method name="getParameterCount()I" />
+		<method name="getParameterTypes()[Ljava/lang/Class;" />
+		<method name="getParameters()[Ljava/lang/reflect/Parameter;" />
+		<method name="isVarArgs()Z" />
+		<method name="toGenericString()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/reflect/Field" since="1">
+		<extends name="java/lang/reflect/AccessibleObject" />
+		<implements name="java/lang/reflect/Member" />
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getBoolean(Ljava/lang/Object;)Z" />
+		<method name="getByte(Ljava/lang/Object;)B" />
+		<method name="getChar(Ljava/lang/Object;)C" />
+		<method name="getDouble(Ljava/lang/Object;)D" />
+		<method name="getFloat(Ljava/lang/Object;)F" />
+		<method name="getGenericType()Ljava/lang/reflect/Type;" />
+		<method name="getInt(Ljava/lang/Object;)I" />
+		<method name="getLong(Ljava/lang/Object;)J" />
+		<method name="getShort(Ljava/lang/Object;)S" />
+		<method name="getType()Ljava/lang/Class;" />
+		<method name="isEnumConstant()Z" />
+		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="setBoolean(Ljava/lang/Object;Z)V" />
+		<method name="setByte(Ljava/lang/Object;B)V" />
+		<method name="setChar(Ljava/lang/Object;C)V" />
+		<method name="setDouble(Ljava/lang/Object;D)V" />
+		<method name="setFloat(Ljava/lang/Object;F)V" />
+		<method name="setInt(Ljava/lang/Object;I)V" />
+		<method name="setLong(Ljava/lang/Object;J)V" />
+		<method name="setShort(Ljava/lang/Object;S)V" />
+		<method name="toGenericString()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/reflect/GenericArrayType" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/Type" />
+		<method name="getGenericComponentType()Ljava/lang/reflect/Type;" />
+	</class>
+	<class name="java/lang/reflect/GenericDeclaration" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/AnnotatedElement" since="26" />
+		<method name="getTypeParameters()[Ljava/lang/reflect/TypeVariable;" />
+	</class>
+	<class name="java/lang/reflect/GenericSignatureFormatError" since="1">
+		<extends name="java/lang/ClassFormatError" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="26" />
+	</class>
+	<class name="java/lang/reflect/InvocationHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/lang/reflect/InvocationTargetException" since="1">
+		<extends name="java/lang/Exception" removed="19" />
+		<extends name="java/lang/ReflectiveOperationException" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;Ljava/lang/String;)V" />
+		<method name="getTargetException()Ljava/lang/Throwable;" />
+	</class>
+	<class name="java/lang/reflect/MalformedParameterizedTypeException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/lang/reflect/MalformedParametersException" since="28">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/reflect/Member" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getDeclaringClass()Ljava/lang/Class;" />
+		<method name="getModifiers()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="isSynthetic()Z" />
+		<field name="DECLARED" />
+		<field name="PUBLIC" />
+	</class>
+	<class name="java/lang/reflect/Method" since="1">
+		<extends name="java/lang/reflect/AccessibleObject" removed="26" />
+		<extends name="java/lang/reflect/Executable" since="26" />
+		<implements name="java/lang/reflect/GenericDeclaration" removed="26" />
+		<implements name="java/lang/reflect/Member" removed="26" />
+		<method name="getDefaultValue()Ljava/lang/Object;" />
+		<method name="getExceptionTypes()[Ljava/lang/Class;" />
+		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;" />
+		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;" />
+		<method name="getGenericReturnType()Ljava/lang/reflect/Type;" />
+		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;" />
+		<method name="getParameterTypes()[Ljava/lang/Class;" />
+		<method name="getReturnType()Ljava/lang/Class;" />
+		<method name="invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="isBridge()Z" />
+		<method name="isDefault()Z" since="24" />
+		<method name="isVarArgs()Z" />
+		<method name="toGenericString()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/reflect/Modifier" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="classModifiers()I" since="19" />
+		<method name="constructorModifiers()I" since="19" />
+		<method name="fieldModifiers()I" since="19" />
+		<method name="interfaceModifiers()I" since="19" />
+		<method name="isAbstract(I)Z" />
+		<method name="isFinal(I)Z" />
+		<method name="isInterface(I)Z" />
+		<method name="isNative(I)Z" />
+		<method name="isPrivate(I)Z" />
+		<method name="isProtected(I)Z" />
+		<method name="isPublic(I)Z" />
+		<method name="isStatic(I)Z" />
+		<method name="isStrict(I)Z" />
+		<method name="isSynchronized(I)Z" />
+		<method name="isTransient(I)Z" />
+		<method name="isVolatile(I)Z" />
+		<method name="methodModifiers()I" since="19" />
+		<method name="parameterModifiers()I" since="26" />
+		<method name="toString(I)Ljava/lang/String;" />
+		<field name="ABSTRACT" />
+		<field name="FINAL" />
+		<field name="INTERFACE" />
+		<field name="NATIVE" />
+		<field name="PRIVATE" />
+		<field name="PROTECTED" />
+		<field name="PUBLIC" />
+		<field name="STATIC" />
+		<field name="STRICT" />
+		<field name="SYNCHRONIZED" />
+		<field name="TRANSIENT" />
+		<field name="VOLATILE" />
+	</class>
+	<class name="java/lang/reflect/Parameter" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/AnnotatedElement" />
+		<method name="getDeclaringExecutable()Ljava/lang/reflect/Executable;" />
+		<method name="getModifiers()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getParameterizedType()Ljava/lang/reflect/Type;" />
+		<method name="getType()Ljava/lang/Class;" />
+		<method name="isImplicit()Z" />
+		<method name="isNamePresent()Z" />
+		<method name="isSynthetic()Z" />
+		<method name="isVarArgs()Z" />
+	</class>
+	<class name="java/lang/reflect/ParameterizedType" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/Type" />
+		<method name="getActualTypeArguments()[Ljava/lang/reflect/Type;" />
+		<method name="getOwnerType()Ljava/lang/reflect/Type;" />
+		<method name="getRawType()Ljava/lang/reflect/Type;" />
+	</class>
+	<class name="java/lang/reflect/Proxy" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/reflect/InvocationHandler;)V" />
+		<method name="getInvocationHandler(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;" />
+		<method name="getProxyClass(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;" />
+		<method name="isProxyClass(Ljava/lang/Class;)Z" />
+		<method name="newProxyInstance(Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;" />
+		<field name="h" />
+	</class>
+	<class name="java/lang/reflect/ReflectPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/lang/reflect/Type" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getTypeName()Ljava/lang/String;" since="28" />
+	</class>
+	<class name="java/lang/reflect/TypeVariable" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/Type" />
+		<method name="getBounds()[Ljava/lang/reflect/Type;" />
+		<method name="getGenericDeclaration()Ljava/lang/reflect/GenericDeclaration;" />
+		<method name="getName()Ljava/lang/String;" />
+	</class>
+	<class name="java/lang/reflect/UndeclaredThrowableException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;Ljava/lang/String;)V" />
+		<method name="getUndeclaredThrowable()Ljava/lang/Throwable;" />
+	</class>
+	<class name="java/lang/reflect/WildcardType" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/reflect/Type" />
+		<method name="getLowerBounds()[Ljava/lang/reflect/Type;" />
+		<method name="getUpperBounds()[Ljava/lang/reflect/Type;" />
+	</class>
+	<class name="java/math/BigDecimal" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(D)V" />
+		<method name="&lt;init&gt;(DLjava/math/MathContext;)V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/math/MathContext;)V" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(JLjava/math/MathContext;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/math/MathContext;)V" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;)V" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;I)V" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;ILjava/math/MathContext;)V" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/MathContext;)V" />
+		<method name="&lt;init&gt;([C)V" />
+		<method name="&lt;init&gt;([CII)V" />
+		<method name="&lt;init&gt;([CIILjava/math/MathContext;)V" />
+		<method name="&lt;init&gt;([CLjava/math/MathContext;)V" />
+		<method name="abs()Ljava/math/BigDecimal;" />
+		<method name="abs(Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="add(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="add(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="byteValueExact()B" />
+		<method name="compareTo(Ljava/math/BigDecimal;)I" />
+		<method name="divide(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="divide(Ljava/math/BigDecimal;I)Ljava/math/BigDecimal;" />
+		<method name="divide(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;" />
+		<method name="divide(Ljava/math/BigDecimal;ILjava/math/RoundingMode;)Ljava/math/BigDecimal;" />
+		<method name="divide(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="divide(Ljava/math/BigDecimal;Ljava/math/RoundingMode;)Ljava/math/BigDecimal;" />
+		<method name="divideAndRemainder(Ljava/math/BigDecimal;)[Ljava/math/BigDecimal;" />
+		<method name="divideAndRemainder(Ljava/math/BigDecimal;Ljava/math/MathContext;)[Ljava/math/BigDecimal;" />
+		<method name="divideToIntegralValue(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="divideToIntegralValue(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="intValueExact()I" />
+		<method name="longValueExact()J" />
+		<method name="max(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="min(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="movePointLeft(I)Ljava/math/BigDecimal;" />
+		<method name="movePointRight(I)Ljava/math/BigDecimal;" />
+		<method name="multiply(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="multiply(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="negate()Ljava/math/BigDecimal;" />
+		<method name="negate(Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="plus()Ljava/math/BigDecimal;" />
+		<method name="plus(Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="pow(I)Ljava/math/BigDecimal;" />
+		<method name="pow(ILjava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="precision()I" />
+		<method name="remainder(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="remainder(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="round(Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="scale()I" />
+		<method name="scaleByPowerOfTen(I)Ljava/math/BigDecimal;" />
+		<method name="setScale(I)Ljava/math/BigDecimal;" />
+		<method name="setScale(II)Ljava/math/BigDecimal;" />
+		<method name="setScale(ILjava/math/RoundingMode;)Ljava/math/BigDecimal;" />
+		<method name="shortValueExact()S" />
+		<method name="signum()I" />
+		<method name="stripTrailingZeros()Ljava/math/BigDecimal;" />
+		<method name="subtract(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;" />
+		<method name="subtract(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;" />
+		<method name="toBigInteger()Ljava/math/BigInteger;" />
+		<method name="toBigIntegerExact()Ljava/math/BigInteger;" />
+		<method name="toEngineeringString()Ljava/lang/String;" />
+		<method name="toPlainString()Ljava/lang/String;" />
+		<method name="ulp()Ljava/math/BigDecimal;" />
+		<method name="unscaledValue()Ljava/math/BigInteger;" />
+		<method name="valueOf(D)Ljava/math/BigDecimal;" />
+		<method name="valueOf(J)Ljava/math/BigDecimal;" />
+		<method name="valueOf(JI)Ljava/math/BigDecimal;" />
+		<field name="ONE" />
+		<field name="ROUND_CEILING" />
+		<field name="ROUND_DOWN" />
+		<field name="ROUND_FLOOR" />
+		<field name="ROUND_HALF_DOWN" />
+		<field name="ROUND_HALF_EVEN" />
+		<field name="ROUND_HALF_UP" />
+		<field name="ROUND_UNNECESSARY" />
+		<field name="ROUND_UP" />
+		<field name="TEN" />
+		<field name="ZERO" />
+	</class>
+	<class name="java/math/BigInteger" since="1">
+		<extends name="java/lang/Number" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(IILjava/util/Random;)V" />
+		<method name="&lt;init&gt;(ILjava/util/Random;)V" />
+		<method name="&lt;init&gt;(I[B)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="abs()Ljava/math/BigInteger;" />
+		<method name="add(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="and(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="andNot(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="bitCount()I" />
+		<method name="bitLength()I" />
+		<method name="byteValueExact()B" since="31" />
+		<method name="clearBit(I)Ljava/math/BigInteger;" />
+		<method name="compareTo(Ljava/math/BigInteger;)I" />
+		<method name="divide(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="divideAndRemainder(Ljava/math/BigInteger;)[Ljava/math/BigInteger;" />
+		<method name="flipBit(I)Ljava/math/BigInteger;" />
+		<method name="gcd(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="getLowestSetBit()I" />
+		<method name="intValueExact()I" since="31" />
+		<method name="isProbablePrime(I)Z" />
+		<method name="longValueExact()J" since="31" />
+		<method name="max(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="min(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="modInverse(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="modPow(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="multiply(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="negate()Ljava/math/BigInteger;" />
+		<method name="nextProbablePrime()Ljava/math/BigInteger;" />
+		<method name="not()Ljava/math/BigInteger;" />
+		<method name="or(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="pow(I)Ljava/math/BigInteger;" />
+		<method name="probablePrime(ILjava/util/Random;)Ljava/math/BigInteger;" />
+		<method name="remainder(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="setBit(I)Ljava/math/BigInteger;" />
+		<method name="shiftLeft(I)Ljava/math/BigInteger;" />
+		<method name="shiftRight(I)Ljava/math/BigInteger;" />
+		<method name="shortValueExact()S" since="31" />
+		<method name="signum()I" />
+		<method name="subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<method name="testBit(I)Z" />
+		<method name="toByteArray()[B" />
+		<method name="toString(I)Ljava/lang/String;" />
+		<method name="valueOf(J)Ljava/math/BigInteger;" />
+		<method name="xor(Ljava/math/BigInteger;)Ljava/math/BigInteger;" />
+		<field name="ONE" />
+		<field name="TEN" />
+		<field name="ZERO" />
+	</class>
+	<class name="java/math/MathContext" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/math/RoundingMode;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getPrecision()I" />
+		<method name="getRoundingMode()Ljava/math/RoundingMode;" />
+		<field name="DECIMAL128" />
+		<field name="DECIMAL32" />
+		<field name="DECIMAL64" />
+		<field name="UNLIMITED" />
+	</class>
+	<class name="java/math/RoundingMode" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(I)Ljava/math/RoundingMode;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/math/RoundingMode;" />
+		<method name="values()[Ljava/math/RoundingMode;" />
+		<field name="CEILING" />
+		<field name="DOWN" />
+		<field name="FLOOR" />
+		<field name="HALF_DOWN" />
+		<field name="HALF_EVEN" />
+		<field name="HALF_UP" />
+		<field name="UNNECESSARY" />
+		<field name="UP" />
+	</class>
+	<class name="java/net/Authenticator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getPasswordAuthentication()Ljava/net/PasswordAuthentication;" />
+		<method name="getRequestingHost()Ljava/lang/String;" />
+		<method name="getRequestingPort()I" />
+		<method name="getRequestingPrompt()Ljava/lang/String;" />
+		<method name="getRequestingProtocol()Ljava/lang/String;" />
+		<method name="getRequestingScheme()Ljava/lang/String;" />
+		<method name="getRequestingSite()Ljava/net/InetAddress;" />
+		<method name="getRequestingURL()Ljava/net/URL;" />
+		<method name="getRequestorType()Ljava/net/Authenticator$RequestorType;" />
+		<method name="requestPasswordAuthentication(Ljava/lang/String;Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/PasswordAuthentication;" />
+		<method name="requestPasswordAuthentication(Ljava/lang/String;Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/net/Authenticator$RequestorType;)Ljava/net/PasswordAuthentication;" />
+		<method name="requestPasswordAuthentication(Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/PasswordAuthentication;" />
+		<method name="setDefault(Ljava/net/Authenticator;)V" />
+	</class>
+	<class name="java/net/Authenticator$RequestorType" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/net/Authenticator$RequestorType;" />
+		<method name="values()[Ljava/net/Authenticator$RequestorType;" />
+		<field name="PROXY" />
+		<field name="SERVER" />
+	</class>
+	<class name="java/net/BindException" since="1">
+		<extends name="java/net/SocketException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/CacheRequest" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="abort()V" />
+		<method name="getBody()Ljava/io/OutputStream;" />
+	</class>
+	<class name="java/net/CacheResponse" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getBody()Ljava/io/InputStream;" />
+		<method name="getHeaders()Ljava/util/Map;" />
+	</class>
+	<class name="java/net/ConnectException" since="1">
+		<extends name="java/net/SocketException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/ContentHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getContent(Ljava/net/URLConnection;)Ljava/lang/Object;" />
+		<method name="getContent(Ljava/net/URLConnection;[Ljava/lang/Class;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/net/ContentHandlerFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createContentHandler(Ljava/lang/String;)Ljava/net/ContentHandler;" />
+	</class>
+	<class name="java/net/CookieHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="get(Ljava/net/URI;Ljava/util/Map;)Ljava/util/Map;" />
+		<method name="getDefault()Ljava/net/CookieHandler;" />
+		<method name="put(Ljava/net/URI;Ljava/util/Map;)V" />
+		<method name="setDefault(Ljava/net/CookieHandler;)V" />
+	</class>
+	<class name="java/net/CookieManager" since="9">
+		<extends name="java/net/CookieHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/net/CookieStore;Ljava/net/CookiePolicy;)V" />
+		<method name="getCookieStore()Ljava/net/CookieStore;" />
+		<method name="setCookiePolicy(Ljava/net/CookiePolicy;)V" />
+	</class>
+	<class name="java/net/CookiePolicy" since="9">
+		<extends name="java/lang/Object" />
+		<method name="shouldAccept(Ljava/net/URI;Ljava/net/HttpCookie;)Z" />
+		<field name="ACCEPT_ALL" />
+		<field name="ACCEPT_NONE" />
+		<field name="ACCEPT_ORIGINAL_SERVER" />
+	</class>
+	<class name="java/net/CookieStore" since="9">
+		<extends name="java/lang/Object" />
+		<method name="add(Ljava/net/URI;Ljava/net/HttpCookie;)V" />
+		<method name="get(Ljava/net/URI;)Ljava/util/List;" />
+		<method name="getCookies()Ljava/util/List;" />
+		<method name="getURIs()Ljava/util/List;" />
+		<method name="remove(Ljava/net/URI;Ljava/net/HttpCookie;)Z" />
+		<method name="removeAll()Z" />
+	</class>
+	<class name="java/net/DatagramPacket" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;([BI)V" />
+		<method name="&lt;init&gt;([BII)V" />
+		<method name="&lt;init&gt;([BIILjava/net/InetAddress;I)V" />
+		<method name="&lt;init&gt;([BIILjava/net/SocketAddress;)V" />
+		<method name="&lt;init&gt;([BILjava/net/InetAddress;I)V" />
+		<method name="&lt;init&gt;([BILjava/net/SocketAddress;)V" />
+		<method name="getAddress()Ljava/net/InetAddress;" />
+		<method name="getData()[B" />
+		<method name="getLength()I" />
+		<method name="getOffset()I" />
+		<method name="getPort()I" />
+		<method name="getSocketAddress()Ljava/net/SocketAddress;" />
+		<method name="setAddress(Ljava/net/InetAddress;)V" />
+		<method name="setData([B)V" />
+		<method name="setData([BII)V" />
+		<method name="setLength(I)V" />
+		<method name="setPort(I)V" />
+		<method name="setSocketAddress(Ljava/net/SocketAddress;)V" />
+	</class>
+	<class name="java/net/DatagramSocket" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/net/InetAddress;)V" />
+		<method name="&lt;init&gt;(Ljava/net/DatagramSocketImpl;)V" />
+		<method name="&lt;init&gt;(Ljava/net/SocketAddress;)V" />
+		<method name="bind(Ljava/net/SocketAddress;)V" />
+		<method name="close()V" />
+		<method name="connect(Ljava/net/InetAddress;I)V" />
+		<method name="connect(Ljava/net/SocketAddress;)V" />
+		<method name="disconnect()V" />
+		<method name="getBroadcast()Z" />
+		<method name="getChannel()Ljava/nio/channels/DatagramChannel;" />
+		<method name="getInetAddress()Ljava/net/InetAddress;" />
+		<method name="getLocalAddress()Ljava/net/InetAddress;" />
+		<method name="getLocalPort()I" />
+		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;" />
+		<method name="getPort()I" />
+		<method name="getReceiveBufferSize()I" />
+		<method name="getRemoteSocketAddress()Ljava/net/SocketAddress;" />
+		<method name="getReuseAddress()Z" />
+		<method name="getSendBufferSize()I" />
+		<method name="getSoTimeout()I" />
+		<method name="getTrafficClass()I" />
+		<method name="isBound()Z" />
+		<method name="isClosed()Z" />
+		<method name="isConnected()Z" />
+		<method name="receive(Ljava/net/DatagramPacket;)V" />
+		<method name="send(Ljava/net/DatagramPacket;)V" />
+		<method name="setBroadcast(Z)V" />
+		<method name="setDatagramSocketImplFactory(Ljava/net/DatagramSocketImplFactory;)V" />
+		<method name="setReceiveBufferSize(I)V" />
+		<method name="setReuseAddress(Z)V" />
+		<method name="setSendBufferSize(I)V" />
+		<method name="setSoTimeout(I)V" />
+		<method name="setTrafficClass(I)V" />
+	</class>
+	<class name="java/net/DatagramSocketImpl" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/net/SocketOptions" />
+		<method name="&lt;init&gt;()V" />
+		<method name="bind(ILjava/net/InetAddress;)V" />
+		<method name="close()V" />
+		<method name="connect(Ljava/net/InetAddress;I)V" />
+		<method name="create()V" />
+		<method name="disconnect()V" />
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;" />
+		<method name="getLocalPort()I" />
+		<method name="getTTL()B" deprecated="15" />
+		<method name="getTimeToLive()I" />
+		<method name="join(Ljava/net/InetAddress;)V" />
+		<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V" />
+		<method name="leave(Ljava/net/InetAddress;)V" />
+		<method name="leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V" />
+		<method name="peek(Ljava/net/InetAddress;)I" />
+		<method name="peekData(Ljava/net/DatagramPacket;)I" />
+		<method name="receive(Ljava/net/DatagramPacket;)V" />
+		<method name="send(Ljava/net/DatagramPacket;)V" />
+		<method name="setTTL(B)V" deprecated="15" />
+		<method name="setTimeToLive(I)V" />
+		<field name="fd" />
+		<field name="localPort" />
+	</class>
+	<class name="java/net/DatagramSocketImplFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createDatagramSocketImpl()Ljava/net/DatagramSocketImpl;" />
+	</class>
+	<class name="java/net/FileNameMap" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getContentTypeFor(Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="java/net/HttpCookie" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="domainMatches(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="getComment()Ljava/lang/String;" />
+		<method name="getCommentURL()Ljava/lang/String;" />
+		<method name="getDiscard()Z" />
+		<method name="getDomain()Ljava/lang/String;" />
+		<method name="getMaxAge()J" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getPortlist()Ljava/lang/String;" />
+		<method name="getSecure()Z" />
+		<method name="getValue()Ljava/lang/String;" />
+		<method name="getVersion()I" />
+		<method name="hasExpired()Z" />
+		<method name="isHttpOnly()Z" since="24" />
+		<method name="parse(Ljava/lang/String;)Ljava/util/List;" />
+		<method name="setComment(Ljava/lang/String;)V" />
+		<method name="setCommentURL(Ljava/lang/String;)V" />
+		<method name="setDiscard(Z)V" />
+		<method name="setDomain(Ljava/lang/String;)V" />
+		<method name="setHttpOnly(Z)V" since="24" />
+		<method name="setMaxAge(J)V" />
+		<method name="setPath(Ljava/lang/String;)V" />
+		<method name="setPortlist(Ljava/lang/String;)V" />
+		<method name="setSecure(Z)V" />
+		<method name="setValue(Ljava/lang/String;)V" />
+		<method name="setVersion(I)V" />
+	</class>
+	<class name="java/net/HttpRetryException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="getLocation()Ljava/lang/String;" />
+		<method name="getReason()Ljava/lang/String;" />
+		<method name="responseCode()I" />
+	</class>
+	<class name="java/net/HttpURLConnection" since="1">
+		<extends name="java/net/URLConnection" />
+		<method name="&lt;init&gt;(Ljava/net/URL;)V" />
+		<method name="disconnect()V" />
+		<method name="getErrorStream()Ljava/io/InputStream;" />
+		<method name="getFollowRedirects()Z" />
+		<method name="getInstanceFollowRedirects()Z" />
+		<method name="getRequestMethod()Ljava/lang/String;" />
+		<method name="getResponseCode()I" />
+		<method name="getResponseMessage()Ljava/lang/String;" />
+		<method name="setChunkedStreamingMode(I)V" />
+		<method name="setFixedLengthStreamingMode(I)V" />
+		<method name="setFixedLengthStreamingMode(J)V" since="19" />
+		<method name="setFollowRedirects(Z)V" />
+		<method name="setInstanceFollowRedirects(Z)V" />
+		<method name="setRequestMethod(Ljava/lang/String;)V" />
+		<method name="usingProxy()Z" />
+		<field name="HTTP_ACCEPTED" />
+		<field name="HTTP_BAD_GATEWAY" />
+		<field name="HTTP_BAD_METHOD" />
+		<field name="HTTP_BAD_REQUEST" />
+		<field name="HTTP_CLIENT_TIMEOUT" />
+		<field name="HTTP_CONFLICT" />
+		<field name="HTTP_CREATED" />
+		<field name="HTTP_ENTITY_TOO_LARGE" />
+		<field name="HTTP_FORBIDDEN" />
+		<field name="HTTP_GATEWAY_TIMEOUT" />
+		<field name="HTTP_GONE" />
+		<field name="HTTP_INTERNAL_ERROR" />
+		<field name="HTTP_LENGTH_REQUIRED" />
+		<field name="HTTP_MOVED_PERM" />
+		<field name="HTTP_MOVED_TEMP" />
+		<field name="HTTP_MULT_CHOICE" />
+		<field name="HTTP_NOT_ACCEPTABLE" />
+		<field name="HTTP_NOT_AUTHORITATIVE" />
+		<field name="HTTP_NOT_FOUND" />
+		<field name="HTTP_NOT_IMPLEMENTED" />
+		<field name="HTTP_NOT_MODIFIED" />
+		<field name="HTTP_NO_CONTENT" />
+		<field name="HTTP_OK" />
+		<field name="HTTP_PARTIAL" />
+		<field name="HTTP_PAYMENT_REQUIRED" />
+		<field name="HTTP_PRECON_FAILED" />
+		<field name="HTTP_PROXY_AUTH" />
+		<field name="HTTP_REQ_TOO_LONG" />
+		<field name="HTTP_RESET" />
+		<field name="HTTP_SEE_OTHER" />
+		<field name="HTTP_SERVER_ERROR" deprecated="15" />
+		<field name="HTTP_UNAUTHORIZED" />
+		<field name="HTTP_UNAVAILABLE" />
+		<field name="HTTP_UNSUPPORTED_TYPE" />
+		<field name="HTTP_USE_PROXY" />
+		<field name="HTTP_VERSION" />
+		<field name="chunkLength" />
+		<field name="fixedContentLength" />
+		<field name="fixedContentLengthLong" since="19" />
+		<field name="instanceFollowRedirects" />
+		<field name="method" />
+		<field name="responseCode" />
+		<field name="responseMessage" />
+	</class>
+	<class name="java/net/IDN" since="9">
+		<extends name="java/lang/Object" />
+		<method name="toASCII(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="toASCII(Ljava/lang/String;I)Ljava/lang/String;" />
+		<method name="toUnicode(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="toUnicode(Ljava/lang/String;I)Ljava/lang/String;" />
+		<field name="ALLOW_UNASSIGNED" />
+		<field name="USE_STD3_ASCII_RULES" />
+	</class>
+	<class name="java/net/Inet4Address" since="1">
+		<extends name="java/net/InetAddress" />
+	</class>
+	<class name="java/net/Inet6Address" since="1">
+		<extends name="java/net/InetAddress" />
+		<method name="getByAddress(Ljava/lang/String;[BI)Ljava/net/Inet6Address;" />
+		<method name="getByAddress(Ljava/lang/String;[BLjava/net/NetworkInterface;)Ljava/net/Inet6Address;" />
+		<method name="getScopeId()I" />
+		<method name="getScopedInterface()Ljava/net/NetworkInterface;" />
+		<method name="isIPv4CompatibleAddress()Z" />
+	</class>
+	<class name="java/net/InetAddress" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="getAddress()[B" />
+		<method name="getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;" />
+		<method name="getByAddress(Ljava/lang/String;[B)Ljava/net/InetAddress;" />
+		<method name="getByAddress([B)Ljava/net/InetAddress;" />
+		<method name="getByName(Ljava/lang/String;)Ljava/net/InetAddress;" />
+		<method name="getCanonicalHostName()Ljava/lang/String;" />
+		<method name="getHostAddress()Ljava/lang/String;" />
+		<method name="getHostName()Ljava/lang/String;" />
+		<method name="getLocalHost()Ljava/net/InetAddress;" />
+		<method name="getLoopbackAddress()Ljava/net/InetAddress;" since="19" />
+		<method name="isAnyLocalAddress()Z" />
+		<method name="isLinkLocalAddress()Z" />
+		<method name="isLoopbackAddress()Z" />
+		<method name="isMCGlobal()Z" />
+		<method name="isMCLinkLocal()Z" />
+		<method name="isMCNodeLocal()Z" />
+		<method name="isMCOrgLocal()Z" />
+		<method name="isMCSiteLocal()Z" />
+		<method name="isMulticastAddress()Z" />
+		<method name="isReachable(I)Z" />
+		<method name="isReachable(Ljava/net/NetworkInterface;II)Z" />
+		<method name="isSiteLocalAddress()Z" />
+	</class>
+	<class name="java/net/InetSocketAddress" since="1">
+		<extends name="java/net/SocketAddress" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/net/InetAddress;I)V" />
+		<method name="createUnresolved(Ljava/lang/String;I)Ljava/net/InetSocketAddress;" />
+		<method name="getAddress()Ljava/net/InetAddress;" />
+		<method name="getHostName()Ljava/lang/String;" />
+		<method name="getHostString()Ljava/lang/String;" since="19" />
+		<method name="getPort()I" />
+		<method name="isUnresolved()Z" />
+	</class>
+	<class name="java/net/InterfaceAddress" since="9">
+		<extends name="java/lang/Object" />
+		<method name="getAddress()Ljava/net/InetAddress;" />
+		<method name="getBroadcast()Ljava/net/InetAddress;" />
+		<method name="getNetworkPrefixLength()S" />
+	</class>
+	<class name="java/net/JarURLConnection" since="1">
+		<extends name="java/net/URLConnection" />
+		<method name="&lt;init&gt;(Ljava/net/URL;)V" />
+		<method name="getAttributes()Ljava/util/jar/Attributes;" />
+		<method name="getCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getEntryName()Ljava/lang/String;" />
+		<method name="getJarEntry()Ljava/util/jar/JarEntry;" />
+		<method name="getJarFile()Ljava/util/jar/JarFile;" />
+		<method name="getJarFileURL()Ljava/net/URL;" />
+		<method name="getMainAttributes()Ljava/util/jar/Attributes;" />
+		<method name="getManifest()Ljava/util/jar/Manifest;" />
+		<field name="jarFileURLConnection" />
+	</class>
+	<class name="java/net/MalformedURLException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/MulticastSocket" since="1">
+		<extends name="java/net/DatagramSocket" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/net/SocketAddress;)V" />
+		<method name="getInterface()Ljava/net/InetAddress;" />
+		<method name="getLoopbackMode()Z" />
+		<method name="getNetworkInterface()Ljava/net/NetworkInterface;" />
+		<method name="getTTL()B" deprecated="15" />
+		<method name="getTimeToLive()I" />
+		<method name="joinGroup(Ljava/net/InetAddress;)V" />
+		<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V" />
+		<method name="leaveGroup(Ljava/net/InetAddress;)V" />
+		<method name="leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V" />
+		<method name="send(Ljava/net/DatagramPacket;B)V" deprecated="15" />
+		<method name="setInterface(Ljava/net/InetAddress;)V" />
+		<method name="setLoopbackMode(Z)V" />
+		<method name="setNetworkInterface(Ljava/net/NetworkInterface;)V" />
+		<method name="setTTL(B)V" deprecated="15" />
+		<method name="setTimeToLive(I)V" />
+	</class>
+	<class name="java/net/NetPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/NetworkInterface" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getByIndex(I)Ljava/net/NetworkInterface;" since="19" />
+		<method name="getByInetAddress(Ljava/net/InetAddress;)Ljava/net/NetworkInterface;" />
+		<method name="getByName(Ljava/lang/String;)Ljava/net/NetworkInterface;" />
+		<method name="getDisplayName()Ljava/lang/String;" />
+		<method name="getHardwareAddress()[B" since="9" />
+		<method name="getIndex()I" since="19" />
+		<method name="getInetAddresses()Ljava/util/Enumeration;" />
+		<method name="getInterfaceAddresses()Ljava/util/List;" since="9" />
+		<method name="getMTU()I" since="9" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getNetworkInterfaces()Ljava/util/Enumeration;" />
+		<method name="getParent()Ljava/net/NetworkInterface;" since="9" />
+		<method name="getSubInterfaces()Ljava/util/Enumeration;" since="9" />
+		<method name="isLoopback()Z" since="9" />
+		<method name="isPointToPoint()Z" since="9" />
+		<method name="isUp()Z" since="9" />
+		<method name="isVirtual()Z" since="9" />
+		<method name="supportsMulticast()Z" since="9" />
+	</class>
+	<class name="java/net/NoRouteToHostException" since="1">
+		<extends name="java/net/SocketException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/PasswordAuthentication" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[C)V" />
+		<method name="getPassword()[C" />
+		<method name="getUserName()Ljava/lang/String;" />
+	</class>
+	<class name="java/net/PortUnreachableException" since="1">
+		<extends name="java/net/SocketException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/ProtocolException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/ProtocolFamily" since="24">
+		<extends name="java/lang/Object" />
+		<method name="name()Ljava/lang/String;" />
+	</class>
+	<class name="java/net/Proxy" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/net/Proxy$Type;Ljava/net/SocketAddress;)V" />
+		<method name="address()Ljava/net/SocketAddress;" />
+		<method name="type()Ljava/net/Proxy$Type;" />
+		<field name="NO_PROXY" />
+	</class>
+	<class name="java/net/Proxy$Type" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/net/Proxy$Type;" />
+		<method name="values()[Ljava/net/Proxy$Type;" />
+		<field name="DIRECT" />
+		<field name="HTTP" />
+		<field name="SOCKS" />
+	</class>
+	<class name="java/net/ProxySelector" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="connectFailed(Ljava/net/URI;Ljava/net/SocketAddress;Ljava/io/IOException;)V" />
+		<method name="getDefault()Ljava/net/ProxySelector;" />
+		<method name="select(Ljava/net/URI;)Ljava/util/List;" />
+		<method name="setDefault(Ljava/net/ProxySelector;)V" />
+	</class>
+	<class name="java/net/ResponseCache" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="get(Ljava/net/URI;Ljava/lang/String;Ljava/util/Map;)Ljava/net/CacheResponse;" />
+		<method name="getDefault()Ljava/net/ResponseCache;" />
+		<method name="put(Ljava/net/URI;Ljava/net/URLConnection;)Ljava/net/CacheRequest;" />
+		<method name="setDefault(Ljava/net/ResponseCache;)V" />
+	</class>
+	<class name="java/net/SecureCacheResponse" since="1">
+		<extends name="java/net/CacheResponse" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getCipherSuite()Ljava/lang/String;" />
+		<method name="getLocalCertificateChain()Ljava/util/List;" />
+		<method name="getLocalPrincipal()Ljava/security/Principal;" />
+		<method name="getPeerPrincipal()Ljava/security/Principal;" />
+		<method name="getServerCertificateChain()Ljava/util/List;" />
+	</class>
+	<class name="java/net/ServerSocket" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(IILjava/net/InetAddress;)V" />
+		<method name="&lt;init&gt;(Ljava/net/SocketImpl;)V" removed="2" />
+		<method name="accept()Ljava/net/Socket;" />
+		<method name="bind(Ljava/net/SocketAddress;)V" />
+		<method name="bind(Ljava/net/SocketAddress;I)V" />
+		<method name="close()V" />
+		<method name="getChannel()Ljava/nio/channels/ServerSocketChannel;" />
+		<method name="getInetAddress()Ljava/net/InetAddress;" />
+		<method name="getLocalPort()I" />
+		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;" />
+		<method name="getReceiveBufferSize()I" />
+		<method name="getReuseAddress()Z" />
+		<method name="getSoTimeout()I" />
+		<method name="implAccept(Ljava/net/Socket;)V" />
+		<method name="isBound()Z" />
+		<method name="isClosed()Z" />
+		<method name="setPerformancePreferences(III)V" />
+		<method name="setReceiveBufferSize(I)V" />
+		<method name="setReuseAddress(Z)V" />
+		<method name="setSoTimeout(I)V" />
+		<method name="setSocketFactory(Ljava/net/SocketImplFactory;)V" />
+	</class>
+	<class name="java/net/Socket" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/net/InetAddress;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;IZ)V" deprecated="15" />
+		<method name="&lt;init&gt;(Ljava/net/InetAddress;I)V" />
+		<method name="&lt;init&gt;(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V" />
+		<method name="&lt;init&gt;(Ljava/net/InetAddress;IZ)V" deprecated="15" />
+		<method name="&lt;init&gt;(Ljava/net/Proxy;)V" />
+		<method name="&lt;init&gt;(Ljava/net/SocketImpl;)V" />
+		<method name="bind(Ljava/net/SocketAddress;)V" />
+		<method name="close()V" />
+		<method name="connect(Ljava/net/SocketAddress;)V" />
+		<method name="connect(Ljava/net/SocketAddress;I)V" />
+		<method name="getChannel()Ljava/nio/channels/SocketChannel;" />
+		<method name="getInetAddress()Ljava/net/InetAddress;" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getKeepAlive()Z" />
+		<method name="getLocalAddress()Ljava/net/InetAddress;" />
+		<method name="getLocalPort()I" />
+		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;" />
+		<method name="getOOBInline()Z" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="getPort()I" />
+		<method name="getReceiveBufferSize()I" />
+		<method name="getRemoteSocketAddress()Ljava/net/SocketAddress;" />
+		<method name="getReuseAddress()Z" />
+		<method name="getSendBufferSize()I" />
+		<method name="getSoLinger()I" />
+		<method name="getSoTimeout()I" />
+		<method name="getTcpNoDelay()Z" />
+		<method name="getTrafficClass()I" />
+		<method name="isBound()Z" />
+		<method name="isClosed()Z" />
+		<method name="isConnected()Z" />
+		<method name="isInputShutdown()Z" />
+		<method name="isOutputShutdown()Z" />
+		<method name="sendUrgentData(I)V" />
+		<method name="setKeepAlive(Z)V" />
+		<method name="setOOBInline(Z)V" />
+		<method name="setPerformancePreferences(III)V" />
+		<method name="setReceiveBufferSize(I)V" />
+		<method name="setReuseAddress(Z)V" />
+		<method name="setSendBufferSize(I)V" />
+		<method name="setSoLinger(ZI)V" />
+		<method name="setSoTimeout(I)V" />
+		<method name="setSocketImplFactory(Ljava/net/SocketImplFactory;)V" />
+		<method name="setTcpNoDelay(Z)V" />
+		<method name="setTrafficClass(I)V" />
+		<method name="shutdownInput()V" />
+		<method name="shutdownOutput()V" />
+	</class>
+	<class name="java/net/SocketAddress" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/net/SocketException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/SocketImpl" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/net/SocketOptions" />
+		<method name="&lt;init&gt;()V" />
+		<method name="accept(Ljava/net/SocketImpl;)V" />
+		<method name="available()I" />
+		<method name="bind(Ljava/net/InetAddress;I)V" />
+		<method name="close()V" />
+		<method name="connect(Ljava/lang/String;I)V" />
+		<method name="connect(Ljava/net/InetAddress;I)V" />
+		<method name="connect(Ljava/net/SocketAddress;I)V" />
+		<method name="create(Z)V" />
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;" />
+		<method name="getInetAddress()Ljava/net/InetAddress;" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getLocalPort()I" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="getPort()I" />
+		<method name="listen(I)V" />
+		<method name="sendUrgentData(I)V" />
+		<method name="setPerformancePreferences(III)V" />
+		<method name="shutdownInput()V" />
+		<method name="shutdownOutput()V" />
+		<method name="supportsUrgentData()Z" />
+		<field name="address" />
+		<field name="fd" />
+		<field name="localport" />
+		<field name="port" />
+	</class>
+	<class name="java/net/SocketImplFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createSocketImpl()Ljava/net/SocketImpl;" />
+	</class>
+	<class name="java/net/SocketOption" since="24">
+		<extends name="java/lang/Object" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="type()Ljava/lang/Class;" />
+	</class>
+	<class name="java/net/SocketOptions" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getOption(I)Ljava/lang/Object;" />
+		<method name="setOption(ILjava/lang/Object;)V" />
+		<field name="IP_MULTICAST_IF" />
+		<field name="IP_MULTICAST_IF2" />
+		<field name="IP_MULTICAST_LOOP" />
+		<field name="IP_TOS" />
+		<field name="SO_BINDADDR" />
+		<field name="SO_BROADCAST" />
+		<field name="SO_KEEPALIVE" />
+		<field name="SO_LINGER" />
+		<field name="SO_OOBINLINE" />
+		<field name="SO_RCVBUF" />
+		<field name="SO_REUSEADDR" />
+		<field name="SO_SNDBUF" />
+		<field name="SO_TIMEOUT" />
+		<field name="TCP_NODELAY" />
+	</class>
+	<class name="java/net/SocketPermission" since="1">
+		<extends name="java/security/Permission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/SocketTimeoutException" since="1">
+		<extends name="java/io/InterruptedIOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/StandardProtocolFamily" since="24">
+		<extends name="java/lang/Enum" />
+		<implements name="java/net/ProtocolFamily" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/net/StandardProtocolFamily;" />
+		<method name="values()[Ljava/net/StandardProtocolFamily;" />
+		<field name="INET" />
+		<field name="INET6" />
+	</class>
+	<class name="java/net/StandardSocketOptions" since="24">
+		<extends name="java/lang/Object" />
+		<field name="IP_MULTICAST_IF" />
+		<field name="IP_MULTICAST_LOOP" />
+		<field name="IP_MULTICAST_TTL" />
+		<field name="IP_TOS" />
+		<field name="SO_BROADCAST" />
+		<field name="SO_KEEPALIVE" />
+		<field name="SO_LINGER" />
+		<field name="SO_RCVBUF" />
+		<field name="SO_REUSEADDR" />
+		<field name="SO_SNDBUF" />
+		<field name="TCP_NODELAY" />
+	</class>
+	<class name="java/net/URI" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="compareTo(Ljava/net/URI;)I" />
+		<method name="create(Ljava/lang/String;)Ljava/net/URI;" />
+		<method name="getAuthority()Ljava/lang/String;" />
+		<method name="getFragment()Ljava/lang/String;" />
+		<method name="getHost()Ljava/lang/String;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getPort()I" />
+		<method name="getQuery()Ljava/lang/String;" />
+		<method name="getRawAuthority()Ljava/lang/String;" />
+		<method name="getRawFragment()Ljava/lang/String;" />
+		<method name="getRawPath()Ljava/lang/String;" />
+		<method name="getRawQuery()Ljava/lang/String;" />
+		<method name="getRawSchemeSpecificPart()Ljava/lang/String;" />
+		<method name="getRawUserInfo()Ljava/lang/String;" />
+		<method name="getScheme()Ljava/lang/String;" />
+		<method name="getSchemeSpecificPart()Ljava/lang/String;" />
+		<method name="getUserInfo()Ljava/lang/String;" />
+		<method name="isAbsolute()Z" />
+		<method name="isOpaque()Z" />
+		<method name="normalize()Ljava/net/URI;" />
+		<method name="parseServerAuthority()Ljava/net/URI;" />
+		<method name="relativize(Ljava/net/URI;)Ljava/net/URI;" />
+		<method name="resolve(Ljava/lang/String;)Ljava/net/URI;" />
+		<method name="resolve(Ljava/net/URI;)Ljava/net/URI;" />
+		<method name="toASCIIString()Ljava/lang/String;" />
+		<method name="toURL()Ljava/net/URL;" />
+	</class>
+	<class name="java/net/URISyntaxException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="getIndex()I" />
+		<method name="getInput()Ljava/lang/String;" />
+		<method name="getReason()Ljava/lang/String;" />
+	</class>
+	<class name="java/net/URL" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/net/URLStreamHandler;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URL;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V" />
+		<method name="getAuthority()Ljava/lang/String;" />
+		<method name="getContent()Ljava/lang/Object;" />
+		<method name="getContent([Ljava/lang/Class;)Ljava/lang/Object;" />
+		<method name="getDefaultPort()I" />
+		<method name="getFile()Ljava/lang/String;" />
+		<method name="getHost()Ljava/lang/String;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getPort()I" />
+		<method name="getProtocol()Ljava/lang/String;" />
+		<method name="getQuery()Ljava/lang/String;" />
+		<method name="getRef()Ljava/lang/String;" />
+		<method name="getUserInfo()Ljava/lang/String;" />
+		<method name="openConnection()Ljava/net/URLConnection;" />
+		<method name="openConnection(Ljava/net/Proxy;)Ljava/net/URLConnection;" />
+		<method name="openStream()Ljava/io/InputStream;" />
+		<method name="sameFile(Ljava/net/URL;)Z" />
+		<method name="set(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" removed="26" />
+		<method name="set(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" removed="26" />
+		<method name="setURLStreamHandlerFactory(Ljava/net/URLStreamHandlerFactory;)V" />
+		<method name="toExternalForm()Ljava/lang/String;" />
+		<method name="toURI()Ljava/net/URI;" />
+	</class>
+	<class name="java/net/URLClassLoader" since="1">
+		<extends name="java/security/SecureClassLoader" />
+		<implements name="java/io/Closeable" since="24" />
+		<method name="&lt;init&gt;([Ljava/net/URL;)V" />
+		<method name="&lt;init&gt;([Ljava/net/URL;Ljava/lang/ClassLoader;)V" />
+		<method name="&lt;init&gt;([Ljava/net/URL;Ljava/lang/ClassLoader;Ljava/net/URLStreamHandlerFactory;)V" />
+		<method name="addURL(Ljava/net/URL;)V" />
+		<method name="definePackage(Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package;" />
+		<method name="getURLs()[Ljava/net/URL;" />
+		<method name="newInstance([Ljava/net/URL;)Ljava/net/URLClassLoader;" />
+		<method name="newInstance([Ljava/net/URL;Ljava/lang/ClassLoader;)Ljava/net/URLClassLoader;" />
+	</class>
+	<class name="java/net/URLConnection" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/net/URL;)V" />
+		<method name="addRequestProperty(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="connect()V" />
+		<method name="getAllowUserInteraction()Z" />
+		<method name="getConnectTimeout()I" />
+		<method name="getContent()Ljava/lang/Object;" />
+		<method name="getContent([Ljava/lang/Class;)Ljava/lang/Object;" />
+		<method name="getContentEncoding()Ljava/lang/String;" />
+		<method name="getContentLength()I" />
+		<method name="getContentLengthLong()J" since="24" />
+		<method name="getContentType()Ljava/lang/String;" />
+		<method name="getDate()J" />
+		<method name="getDefaultAllowUserInteraction()Z" />
+		<method name="getDefaultRequestProperty(Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="getDefaultUseCaches()Z" />
+		<method name="getDoInput()Z" />
+		<method name="getDoOutput()Z" />
+		<method name="getExpiration()J" />
+		<method name="getFileNameMap()Ljava/net/FileNameMap;" />
+		<method name="getHeaderField(I)Ljava/lang/String;" />
+		<method name="getHeaderField(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getHeaderFieldDate(Ljava/lang/String;J)J" />
+		<method name="getHeaderFieldInt(Ljava/lang/String;I)I" />
+		<method name="getHeaderFieldKey(I)Ljava/lang/String;" />
+		<method name="getHeaderFieldLong(Ljava/lang/String;J)J" since="24" />
+		<method name="getHeaderFields()Ljava/util/Map;" />
+		<method name="getIfModifiedSince()J" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getLastModified()J" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="getPermission()Ljava/security/Permission;" />
+		<method name="getReadTimeout()I" />
+		<method name="getRequestProperties()Ljava/util/Map;" />
+		<method name="getRequestProperty(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getURL()Ljava/net/URL;" />
+		<method name="getUseCaches()Z" />
+		<method name="guessContentTypeFromName(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="guessContentTypeFromStream(Ljava/io/InputStream;)Ljava/lang/String;" />
+		<method name="setAllowUserInteraction(Z)V" />
+		<method name="setConnectTimeout(I)V" />
+		<method name="setContentHandlerFactory(Ljava/net/ContentHandlerFactory;)V" />
+		<method name="setDefaultAllowUserInteraction(Z)V" />
+		<method name="setDefaultRequestProperty(Ljava/lang/String;Ljava/lang/String;)V" deprecated="15" />
+		<method name="setDefaultUseCaches(Z)V" />
+		<method name="setDoInput(Z)V" />
+		<method name="setDoOutput(Z)V" />
+		<method name="setFileNameMap(Ljava/net/FileNameMap;)V" />
+		<method name="setIfModifiedSince(J)V" />
+		<method name="setReadTimeout(I)V" />
+		<method name="setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setUseCaches(Z)V" />
+		<field name="allowUserInteraction" />
+		<field name="connected" />
+		<field name="doInput" />
+		<field name="doOutput" />
+		<field name="ifModifiedSince" />
+		<field name="url" />
+		<field name="useCaches" />
+	</class>
+	<class name="java/net/URLDecoder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="decode(Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="java/net/URLEncoder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="encode(Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="java/net/URLStreamHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="equals(Ljava/net/URL;Ljava/net/URL;)Z" />
+		<method name="getDefaultPort()I" />
+		<method name="getHostAddress(Ljava/net/URL;)Ljava/net/InetAddress;" />
+		<method name="hashCode(Ljava/net/URL;)I" />
+		<method name="hostsEqual(Ljava/net/URL;Ljava/net/URL;)Z" />
+		<method name="openConnection(Ljava/net/URL;)Ljava/net/URLConnection;" />
+		<method name="openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;" />
+		<method name="parseURL(Ljava/net/URL;Ljava/lang/String;II)V" />
+		<method name="sameFile(Ljava/net/URL;Ljava/net/URL;)Z" />
+		<method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" deprecated="15" />
+		<method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="toExternalForm(Ljava/net/URL;)Ljava/lang/String;" />
+	</class>
+	<class name="java/net/URLStreamHandlerFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createURLStreamHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;" />
+	</class>
+	<class name="java/net/UnknownHostException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/net/UnknownServiceException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/Buffer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="array()Ljava/lang/Object;" since="9" />
+		<method name="arrayOffset()I" since="9" />
+		<method name="capacity()I" />
+		<method name="clear()Ljava/nio/Buffer;" />
+		<method name="flip()Ljava/nio/Buffer;" />
+		<method name="hasArray()Z" since="9" />
+		<method name="hasRemaining()Z" />
+		<method name="isDirect()Z" since="9" />
+		<method name="isReadOnly()Z" />
+		<method name="limit()I" />
+		<method name="limit(I)Ljava/nio/Buffer;" />
+		<method name="mark()Ljava/nio/Buffer;" />
+		<method name="position()I" />
+		<method name="position(I)Ljava/nio/Buffer;" />
+		<method name="remaining()I" />
+		<method name="reset()Ljava/nio/Buffer;" />
+		<method name="rewind()Ljava/nio/Buffer;" />
+	</class>
+	<class name="java/nio/BufferOverflowException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/BufferUnderflowException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/ByteBuffer" since="1">
+		<extends name="java/nio/Buffer" />
+		<implements name="java/lang/Comparable" />
+		<method name="allocate(I)Ljava/nio/ByteBuffer;" />
+		<method name="allocateDirect(I)Ljava/nio/ByteBuffer;" />
+		<method name="array()[B" />
+		<method name="arrayOffset()I" />
+		<method name="asCharBuffer()Ljava/nio/CharBuffer;" />
+		<method name="asDoubleBuffer()Ljava/nio/DoubleBuffer;" />
+		<method name="asFloatBuffer()Ljava/nio/FloatBuffer;" />
+		<method name="asIntBuffer()Ljava/nio/IntBuffer;" />
+		<method name="asLongBuffer()Ljava/nio/LongBuffer;" />
+		<method name="asReadOnlyBuffer()Ljava/nio/ByteBuffer;" />
+		<method name="asShortBuffer()Ljava/nio/ShortBuffer;" />
+		<method name="compact()Ljava/nio/ByteBuffer;" />
+		<method name="compareTo(Ljava/nio/ByteBuffer;)I" />
+		<method name="duplicate()Ljava/nio/ByteBuffer;" />
+		<method name="get()B" />
+		<method name="get(I)B" />
+		<method name="get([B)Ljava/nio/ByteBuffer;" />
+		<method name="get([BII)Ljava/nio/ByteBuffer;" />
+		<method name="getChar()C" />
+		<method name="getChar(I)C" />
+		<method name="getDouble()D" />
+		<method name="getDouble(I)D" />
+		<method name="getFloat()F" />
+		<method name="getFloat(I)F" />
+		<method name="getInt()I" />
+		<method name="getInt(I)I" />
+		<method name="getLong()J" />
+		<method name="getLong(I)J" />
+		<method name="getShort()S" />
+		<method name="getShort(I)S" />
+		<method name="hasArray()Z" />
+		<method name="isDirect()Z" />
+		<method name="order()Ljava/nio/ByteOrder;" />
+		<method name="order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;" />
+		<method name="put(B)Ljava/nio/ByteBuffer;" />
+		<method name="put(IB)Ljava/nio/ByteBuffer;" />
+		<method name="put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;" />
+		<method name="put([B)Ljava/nio/ByteBuffer;" />
+		<method name="put([BII)Ljava/nio/ByteBuffer;" />
+		<method name="putChar(C)Ljava/nio/ByteBuffer;" />
+		<method name="putChar(IC)Ljava/nio/ByteBuffer;" />
+		<method name="putDouble(D)Ljava/nio/ByteBuffer;" />
+		<method name="putDouble(ID)Ljava/nio/ByteBuffer;" />
+		<method name="putFloat(F)Ljava/nio/ByteBuffer;" />
+		<method name="putFloat(IF)Ljava/nio/ByteBuffer;" />
+		<method name="putInt(I)Ljava/nio/ByteBuffer;" />
+		<method name="putInt(II)Ljava/nio/ByteBuffer;" />
+		<method name="putLong(IJ)Ljava/nio/ByteBuffer;" />
+		<method name="putLong(J)Ljava/nio/ByteBuffer;" />
+		<method name="putShort(IS)Ljava/nio/ByteBuffer;" />
+		<method name="putShort(S)Ljava/nio/ByteBuffer;" />
+		<method name="slice()Ljava/nio/ByteBuffer;" />
+		<method name="wrap([B)Ljava/nio/ByteBuffer;" />
+		<method name="wrap([BII)Ljava/nio/ByteBuffer;" />
+	</class>
+	<class name="java/nio/ByteOrder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="nativeOrder()Ljava/nio/ByteOrder;" />
+		<field name="BIG_ENDIAN" />
+		<field name="LITTLE_ENDIAN" />
+	</class>
+	<class name="java/nio/CharBuffer" since="1">
+		<extends name="java/nio/Buffer" />
+		<implements name="java/lang/Appendable" />
+		<implements name="java/lang/CharSequence" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/lang/Readable" />
+		<method name="allocate(I)Ljava/nio/CharBuffer;" />
+		<method name="append(C)Ljava/nio/CharBuffer;" />
+		<method name="append(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;" />
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;" />
+		<method name="array()[C" />
+		<method name="arrayOffset()I" />
+		<method name="asReadOnlyBuffer()Ljava/nio/CharBuffer;" />
+		<method name="compact()Ljava/nio/CharBuffer;" />
+		<method name="compareTo(Ljava/nio/CharBuffer;)I" />
+		<method name="duplicate()Ljava/nio/CharBuffer;" />
+		<method name="get()C" />
+		<method name="get(I)C" />
+		<method name="get([C)Ljava/nio/CharBuffer;" />
+		<method name="get([CII)Ljava/nio/CharBuffer;" />
+		<method name="hasArray()Z" />
+		<method name="isDirect()Z" />
+		<method name="order()Ljava/nio/ByteOrder;" />
+		<method name="put(C)Ljava/nio/CharBuffer;" />
+		<method name="put(IC)Ljava/nio/CharBuffer;" />
+		<method name="put(Ljava/lang/String;)Ljava/nio/CharBuffer;" />
+		<method name="put(Ljava/lang/String;II)Ljava/nio/CharBuffer;" />
+		<method name="put(Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer;" />
+		<method name="put([C)Ljava/nio/CharBuffer;" />
+		<method name="put([CII)Ljava/nio/CharBuffer;" />
+		<method name="slice()Ljava/nio/CharBuffer;" />
+		<method name="subSequence(II)Ljava/nio/CharBuffer;" since="19" />
+		<method name="wrap(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;" />
+		<method name="wrap(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;" />
+		<method name="wrap([C)Ljava/nio/CharBuffer;" />
+		<method name="wrap([CII)Ljava/nio/CharBuffer;" />
+	</class>
+	<class name="java/nio/DoubleBuffer" since="1">
+		<extends name="java/nio/Buffer" />
+		<implements name="java/lang/Comparable" />
+		<method name="allocate(I)Ljava/nio/DoubleBuffer;" />
+		<method name="array()[D" />
+		<method name="arrayOffset()I" />
+		<method name="asReadOnlyBuffer()Ljava/nio/DoubleBuffer;" />
+		<method name="compact()Ljava/nio/DoubleBuffer;" />
+		<method name="compareTo(Ljava/nio/DoubleBuffer;)I" />
+		<method name="duplicate()Ljava/nio/DoubleBuffer;" />
+		<method name="get()D" />
+		<method name="get(I)D" />
+		<method name="get([D)Ljava/nio/DoubleBuffer;" />
+		<method name="get([DII)Ljava/nio/DoubleBuffer;" />
+		<method name="hasArray()Z" />
+		<method name="isDirect()Z" />
+		<method name="order()Ljava/nio/ByteOrder;" />
+		<method name="put(D)Ljava/nio/DoubleBuffer;" />
+		<method name="put(ID)Ljava/nio/DoubleBuffer;" />
+		<method name="put(Ljava/nio/DoubleBuffer;)Ljava/nio/DoubleBuffer;" />
+		<method name="put([D)Ljava/nio/DoubleBuffer;" />
+		<method name="put([DII)Ljava/nio/DoubleBuffer;" />
+		<method name="slice()Ljava/nio/DoubleBuffer;" />
+		<method name="wrap([D)Ljava/nio/DoubleBuffer;" />
+		<method name="wrap([DII)Ljava/nio/DoubleBuffer;" />
+	</class>
+	<class name="java/nio/FloatBuffer" since="1">
+		<extends name="java/nio/Buffer" />
+		<implements name="java/lang/Comparable" />
+		<method name="allocate(I)Ljava/nio/FloatBuffer;" />
+		<method name="array()[F" />
+		<method name="arrayOffset()I" />
+		<method name="asReadOnlyBuffer()Ljava/nio/FloatBuffer;" />
+		<method name="compact()Ljava/nio/FloatBuffer;" />
+		<method name="compareTo(Ljava/nio/FloatBuffer;)I" />
+		<method name="duplicate()Ljava/nio/FloatBuffer;" />
+		<method name="get()F" />
+		<method name="get(I)F" />
+		<method name="get([F)Ljava/nio/FloatBuffer;" />
+		<method name="get([FII)Ljava/nio/FloatBuffer;" />
+		<method name="hasArray()Z" />
+		<method name="isDirect()Z" />
+		<method name="order()Ljava/nio/ByteOrder;" />
+		<method name="put(F)Ljava/nio/FloatBuffer;" />
+		<method name="put(IF)Ljava/nio/FloatBuffer;" />
+		<method name="put(Ljava/nio/FloatBuffer;)Ljava/nio/FloatBuffer;" />
+		<method name="put([F)Ljava/nio/FloatBuffer;" />
+		<method name="put([FII)Ljava/nio/FloatBuffer;" />
+		<method name="slice()Ljava/nio/FloatBuffer;" />
+		<method name="wrap([F)Ljava/nio/FloatBuffer;" />
+		<method name="wrap([FII)Ljava/nio/FloatBuffer;" />
+	</class>
+	<class name="java/nio/IntBuffer" since="1">
+		<extends name="java/nio/Buffer" />
+		<implements name="java/lang/Comparable" />
+		<method name="allocate(I)Ljava/nio/IntBuffer;" />
+		<method name="array()[I" />
+		<method name="arrayOffset()I" />
+		<method name="asReadOnlyBuffer()Ljava/nio/IntBuffer;" />
+		<method name="compact()Ljava/nio/IntBuffer;" />
+		<method name="compareTo(Ljava/nio/IntBuffer;)I" />
+		<method name="duplicate()Ljava/nio/IntBuffer;" />
+		<method name="get()I" />
+		<method name="get(I)I" />
+		<method name="get([I)Ljava/nio/IntBuffer;" />
+		<method name="get([III)Ljava/nio/IntBuffer;" />
+		<method name="hasArray()Z" />
+		<method name="isDirect()Z" />
+		<method name="order()Ljava/nio/ByteOrder;" />
+		<method name="put(I)Ljava/nio/IntBuffer;" />
+		<method name="put(II)Ljava/nio/IntBuffer;" />
+		<method name="put(Ljava/nio/IntBuffer;)Ljava/nio/IntBuffer;" />
+		<method name="put([I)Ljava/nio/IntBuffer;" />
+		<method name="put([III)Ljava/nio/IntBuffer;" />
+		<method name="slice()Ljava/nio/IntBuffer;" />
+		<method name="wrap([I)Ljava/nio/IntBuffer;" />
+		<method name="wrap([III)Ljava/nio/IntBuffer;" />
+	</class>
+	<class name="java/nio/InvalidMarkException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/LongBuffer" since="1">
+		<extends name="java/nio/Buffer" />
+		<implements name="java/lang/Comparable" />
+		<method name="allocate(I)Ljava/nio/LongBuffer;" />
+		<method name="array()[J" />
+		<method name="arrayOffset()I" />
+		<method name="asReadOnlyBuffer()Ljava/nio/LongBuffer;" />
+		<method name="compact()Ljava/nio/LongBuffer;" />
+		<method name="compareTo(Ljava/nio/LongBuffer;)I" />
+		<method name="duplicate()Ljava/nio/LongBuffer;" />
+		<method name="get()J" />
+		<method name="get(I)J" />
+		<method name="get([J)Ljava/nio/LongBuffer;" />
+		<method name="get([JII)Ljava/nio/LongBuffer;" />
+		<method name="hasArray()Z" />
+		<method name="isDirect()Z" />
+		<method name="order()Ljava/nio/ByteOrder;" />
+		<method name="put(IJ)Ljava/nio/LongBuffer;" />
+		<method name="put(J)Ljava/nio/LongBuffer;" />
+		<method name="put(Ljava/nio/LongBuffer;)Ljava/nio/LongBuffer;" />
+		<method name="put([J)Ljava/nio/LongBuffer;" />
+		<method name="put([JII)Ljava/nio/LongBuffer;" />
+		<method name="slice()Ljava/nio/LongBuffer;" />
+		<method name="wrap([J)Ljava/nio/LongBuffer;" />
+		<method name="wrap([JII)Ljava/nio/LongBuffer;" />
+	</class>
+	<class name="java/nio/MappedByteBuffer" since="1">
+		<extends name="java/nio/ByteBuffer" />
+		<method name="force()Ljava/nio/MappedByteBuffer;" />
+		<method name="isLoaded()Z" />
+		<method name="load()Ljava/nio/MappedByteBuffer;" />
+	</class>
+	<class name="java/nio/ReadOnlyBufferException" since="1">
+		<extends name="java/lang/UnsupportedOperationException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/ShortBuffer" since="1">
+		<extends name="java/nio/Buffer" />
+		<implements name="java/lang/Comparable" />
+		<method name="allocate(I)Ljava/nio/ShortBuffer;" />
+		<method name="array()[S" />
+		<method name="arrayOffset()I" />
+		<method name="asReadOnlyBuffer()Ljava/nio/ShortBuffer;" />
+		<method name="compact()Ljava/nio/ShortBuffer;" />
+		<method name="compareTo(Ljava/nio/ShortBuffer;)I" />
+		<method name="duplicate()Ljava/nio/ShortBuffer;" />
+		<method name="get()S" />
+		<method name="get(I)S" />
+		<method name="get([S)Ljava/nio/ShortBuffer;" />
+		<method name="get([SII)Ljava/nio/ShortBuffer;" />
+		<method name="hasArray()Z" />
+		<method name="isDirect()Z" />
+		<method name="order()Ljava/nio/ByteOrder;" />
+		<method name="put(IS)Ljava/nio/ShortBuffer;" />
+		<method name="put(Ljava/nio/ShortBuffer;)Ljava/nio/ShortBuffer;" />
+		<method name="put(S)Ljava/nio/ShortBuffer;" />
+		<method name="put([S)Ljava/nio/ShortBuffer;" />
+		<method name="put([SII)Ljava/nio/ShortBuffer;" />
+		<method name="slice()Ljava/nio/ShortBuffer;" />
+		<method name="wrap([S)Ljava/nio/ShortBuffer;" />
+		<method name="wrap([SII)Ljava/nio/ShortBuffer;" />
+	</class>
+	<class name="java/nio/channels/AcceptPendingException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/AlreadyBoundException" since="24">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/AlreadyConnectedException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/AsynchronousByteChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/AsynchronousChannel" />
+		<method name="read(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;" />
+		<method name="read(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="write(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;" />
+		<method name="write(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+	</class>
+	<class name="java/nio/channels/AsynchronousChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+	</class>
+	<class name="java/nio/channels/AsynchronousChannelGroup" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V" />
+		<method name="awaitTermination(JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="isShutdown()Z" />
+		<method name="isTerminated()Z" />
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;" />
+		<method name="shutdown()V" />
+		<method name="shutdownNow()V" />
+		<method name="withCachedThreadPool(Ljava/util/concurrent/ExecutorService;I)Ljava/nio/channels/AsynchronousChannelGroup;" />
+		<method name="withFixedThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/nio/channels/AsynchronousChannelGroup;" />
+		<method name="withThreadPool(Ljava/util/concurrent/ExecutorService;)Ljava/nio/channels/AsynchronousChannelGroup;" />
+	</class>
+	<class name="java/nio/channels/AsynchronousCloseException" since="1">
+		<extends name="java/nio/channels/ClosedChannelException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/AsynchronousFileChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/AsynchronousChannel" />
+		<method name="&lt;init&gt;()V" />
+		<method name="force(Z)V" />
+		<method name="lock()Ljava/util/concurrent/Future;" />
+		<method name="lock(JJZ)Ljava/util/concurrent/Future;" />
+		<method name="lock(JJZLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="lock(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="open(Ljava/nio/file/Path;Ljava/util/Set;Ljava/util/concurrent/ExecutorService;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/AsynchronousFileChannel;" />
+		<method name="open(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/AsynchronousFileChannel;" />
+		<method name="read(Ljava/nio/ByteBuffer;J)Ljava/util/concurrent/Future;" />
+		<method name="read(Ljava/nio/ByteBuffer;JLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="size()J" />
+		<method name="truncate(J)Ljava/nio/channels/AsynchronousFileChannel;" />
+		<method name="tryLock()Ljava/nio/channels/FileLock;" />
+		<method name="tryLock(JJZ)Ljava/nio/channels/FileLock;" />
+		<method name="write(Ljava/nio/ByteBuffer;J)Ljava/util/concurrent/Future;" />
+		<method name="write(Ljava/nio/ByteBuffer;JLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+	</class>
+	<class name="java/nio/channels/AsynchronousServerSocketChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/AsynchronousChannel" />
+		<implements name="java/nio/channels/NetworkChannel" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V" />
+		<method name="accept()Ljava/util/concurrent/Future;" />
+		<method name="accept(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/AsynchronousServerSocketChannel;" />
+		<method name="bind(Ljava/net/SocketAddress;I)Ljava/nio/channels/AsynchronousServerSocketChannel;" />
+		<method name="open()Ljava/nio/channels/AsynchronousServerSocketChannel;" />
+		<method name="open(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousServerSocketChannel;" />
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;" />
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousServerSocketChannel;" />
+	</class>
+	<class name="java/nio/channels/AsynchronousSocketChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/AsynchronousByteChannel" />
+		<implements name="java/nio/channels/NetworkChannel" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V" />
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/AsynchronousSocketChannel;" />
+		<method name="connect(Ljava/net/SocketAddress;)Ljava/util/concurrent/Future;" />
+		<method name="connect(Ljava/net/SocketAddress;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="getRemoteAddress()Ljava/net/SocketAddress;" />
+		<method name="open()Ljava/nio/channels/AsynchronousSocketChannel;" />
+		<method name="open(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousSocketChannel;" />
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;" />
+		<method name="read(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="read([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousSocketChannel;" />
+		<method name="shutdownInput()Ljava/nio/channels/AsynchronousSocketChannel;" />
+		<method name="shutdownOutput()Ljava/nio/channels/AsynchronousSocketChannel;" />
+		<method name="write(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+		<method name="write([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V" />
+	</class>
+	<class name="java/nio/channels/ByteChannel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/ReadableByteChannel" />
+		<implements name="java/nio/channels/WritableByteChannel" />
+	</class>
+	<class name="java/nio/channels/CancelledKeyException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/Channel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="isOpen()Z" />
+	</class>
+	<class name="java/nio/channels/Channels" since="1">
+		<extends name="java/lang/Object" />
+		<method name="newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;" />
+		<method name="newChannel(Ljava/io/OutputStream;)Ljava/nio/channels/WritableByteChannel;" />
+		<method name="newInputStream(Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/InputStream;" since="26" />
+		<method name="newInputStream(Ljava/nio/channels/ReadableByteChannel;)Ljava/io/InputStream;" />
+		<method name="newOutputStream(Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/OutputStream;" since="26" />
+		<method name="newOutputStream(Ljava/nio/channels/WritableByteChannel;)Ljava/io/OutputStream;" />
+		<method name="newReader(Ljava/nio/channels/ReadableByteChannel;Ljava/lang/String;)Ljava/io/Reader;" />
+		<method name="newReader(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)Ljava/io/Reader;" />
+		<method name="newWriter(Ljava/nio/channels/WritableByteChannel;Ljava/lang/String;)Ljava/io/Writer;" />
+		<method name="newWriter(Ljava/nio/channels/WritableByteChannel;Ljava/nio/charset/CharsetEncoder;I)Ljava/io/Writer;" />
+	</class>
+	<class name="java/nio/channels/ClosedByInterruptException" since="1">
+		<extends name="java/nio/channels/AsynchronousCloseException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/ClosedChannelException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/ClosedSelectorException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/CompletionHandler" since="26">
+		<extends name="java/lang/Object" />
+		<method name="completed(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="failed(Ljava/lang/Throwable;Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/nio/channels/ConnectionPendingException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/DatagramChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel" />
+		<implements name="java/nio/channels/ByteChannel" />
+		<implements name="java/nio/channels/GatheringByteChannel" />
+		<implements name="java/nio/channels/MulticastChannel" since="26" />
+		<implements name="java/nio/channels/NetworkChannel" since="24" removed="26" />
+		<implements name="java/nio/channels/ScatteringByteChannel" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/SelectorProvider;)V" />
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;" since="24" />
+		<method name="connect(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;" />
+		<method name="disconnect()Ljava/nio/channels/DatagramChannel;" />
+		<method name="getRemoteAddress()Ljava/net/SocketAddress;" since="24" />
+		<method name="isConnected()Z" />
+		<method name="open()Ljava/nio/channels/DatagramChannel;" />
+		<method name="open(Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;" since="24" />
+		<method name="receive(Ljava/nio/ByteBuffer;)Ljava/net/SocketAddress;" />
+		<method name="send(Ljava/nio/ByteBuffer;Ljava/net/SocketAddress;)I" />
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/DatagramChannel;" since="24" />
+		<method name="socket()Ljava/net/DatagramSocket;" />
+	</class>
+	<class name="java/nio/channels/FileChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractInterruptibleChannel" />
+		<implements name="java/nio/channels/ByteChannel" removed="24" />
+		<implements name="java/nio/channels/GatheringByteChannel" />
+		<implements name="java/nio/channels/ScatteringByteChannel" />
+		<implements name="java/nio/channels/SeekableByteChannel" since="24" />
+		<method name="&lt;init&gt;()V" />
+		<method name="force(Z)V" />
+		<method name="lock()Ljava/nio/channels/FileLock;" />
+		<method name="lock(JJZ)Ljava/nio/channels/FileLock;" />
+		<method name="map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;" />
+		<method name="open(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;" since="26" />
+		<method name="open(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/FileChannel;" since="26" />
+		<method name="position()J" />
+		<method name="position(J)Ljava/nio/channels/FileChannel;" />
+		<method name="read(Ljava/nio/ByteBuffer;J)I" />
+		<method name="size()J" />
+		<method name="transferFrom(Ljava/nio/channels/ReadableByteChannel;JJ)J" />
+		<method name="transferTo(JJLjava/nio/channels/WritableByteChannel;)J" />
+		<method name="truncate(J)Ljava/nio/channels/FileChannel;" />
+		<method name="tryLock()Ljava/nio/channels/FileLock;" />
+		<method name="tryLock(JJZ)Ljava/nio/channels/FileLock;" />
+		<method name="write(Ljava/nio/ByteBuffer;J)I" />
+	</class>
+	<class name="java/nio/channels/FileChannel$MapMode" since="1">
+		<extends name="java/lang/Object" />
+		<field name="PRIVATE" />
+		<field name="READ_ONLY" />
+		<field name="READ_WRITE" />
+	</class>
+	<class name="java/nio/channels/FileLock" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/AsynchronousFileChannel;JJZ)V" since="26" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/FileChannel;JJZ)V" />
+		<method name="acquiredBy()Ljava/nio/channels/Channel;" since="24" />
+		<method name="channel()Ljava/nio/channels/FileChannel;" />
+		<method name="isShared()Z" />
+		<method name="isValid()Z" />
+		<method name="overlaps(JJ)Z" />
+		<method name="position()J" />
+		<method name="release()V" />
+		<method name="size()J" />
+	</class>
+	<class name="java/nio/channels/FileLockInterruptionException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/GatheringByteChannel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/WritableByteChannel" />
+		<method name="write([Ljava/nio/ByteBuffer;)J" />
+		<method name="write([Ljava/nio/ByteBuffer;II)J" />
+	</class>
+	<class name="java/nio/channels/IllegalBlockingModeException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/IllegalChannelGroupException" since="26">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/IllegalSelectorException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/InterruptedByTimeoutException" since="26">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/InterruptibleChannel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+	</class>
+	<class name="java/nio/channels/MembershipKey" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="block(Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;" />
+		<method name="channel()Ljava/nio/channels/MulticastChannel;" />
+		<method name="drop()V" />
+		<method name="group()Ljava/net/InetAddress;" />
+		<method name="isValid()Z" />
+		<method name="networkInterface()Ljava/net/NetworkInterface;" />
+		<method name="sourceAddress()Ljava/net/InetAddress;" />
+		<method name="unblock(Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;" />
+	</class>
+	<class name="java/nio/channels/MulticastChannel" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/NetworkChannel" />
+		<method name="join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)Ljava/nio/channels/MembershipKey;" />
+		<method name="join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;" />
+	</class>
+	<class name="java/nio/channels/NetworkChannel" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/NetworkChannel;" />
+		<method name="getLocalAddress()Ljava/net/SocketAddress;" />
+		<method name="getOption(Ljava/net/SocketOption;)Ljava/lang/Object;" />
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/NetworkChannel;" />
+		<method name="supportedOptions()Ljava/util/Set;" />
+	</class>
+	<class name="java/nio/channels/NoConnectionPendingException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/NonReadableChannelException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/NonWritableChannelException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/NotYetBoundException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/NotYetConnectedException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/OverlappingFileLockException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/Pipe" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="open()Ljava/nio/channels/Pipe;" />
+		<method name="sink()Ljava/nio/channels/Pipe$SinkChannel;" />
+		<method name="source()Ljava/nio/channels/Pipe$SourceChannel;" />
+	</class>
+	<class name="java/nio/channels/Pipe$SinkChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel" />
+		<implements name="java/nio/channels/GatheringByteChannel" />
+		<implements name="java/nio/channels/WritableByteChannel" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/SelectorProvider;)V" />
+	</class>
+	<class name="java/nio/channels/Pipe$SourceChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel" />
+		<implements name="java/nio/channels/ReadableByteChannel" />
+		<implements name="java/nio/channels/ScatteringByteChannel" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/SelectorProvider;)V" />
+	</class>
+	<class name="java/nio/channels/ReadPendingException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/ReadableByteChannel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+		<method name="read(Ljava/nio/ByteBuffer;)I" />
+	</class>
+	<class name="java/nio/channels/ScatteringByteChannel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/ReadableByteChannel" />
+		<method name="read([Ljava/nio/ByteBuffer;)J" />
+		<method name="read([Ljava/nio/ByteBuffer;II)J" />
+	</class>
+	<class name="java/nio/channels/SeekableByteChannel" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/ByteChannel" />
+		<method name="position()J" />
+		<method name="position(J)Ljava/nio/channels/SeekableByteChannel;" />
+		<method name="size()J" />
+		<method name="truncate(J)Ljava/nio/channels/SeekableByteChannel;" />
+	</class>
+	<class name="java/nio/channels/SelectableChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractInterruptibleChannel" />
+		<method name="&lt;init&gt;()V" />
+		<method name="blockingLock()Ljava/lang/Object;" />
+		<method name="configureBlocking(Z)Ljava/nio/channels/SelectableChannel;" />
+		<method name="isBlocking()Z" />
+		<method name="isRegistered()Z" />
+		<method name="keyFor(Ljava/nio/channels/Selector;)Ljava/nio/channels/SelectionKey;" />
+		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;" />
+		<method name="register(Ljava/nio/channels/Selector;I)Ljava/nio/channels/SelectionKey;" />
+		<method name="register(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;" />
+		<method name="validOps()I" />
+	</class>
+	<class name="java/nio/channels/SelectionKey" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="attach(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="attachment()Ljava/lang/Object;" />
+		<method name="cancel()V" />
+		<method name="channel()Ljava/nio/channels/SelectableChannel;" />
+		<method name="interestOps()I" />
+		<method name="interestOps(I)Ljava/nio/channels/SelectionKey;" />
+		<method name="isAcceptable()Z" />
+		<method name="isConnectable()Z" />
+		<method name="isReadable()Z" />
+		<method name="isValid()Z" />
+		<method name="isWritable()Z" />
+		<method name="readyOps()I" />
+		<method name="selector()Ljava/nio/channels/Selector;" />
+		<field name="OP_ACCEPT" />
+		<field name="OP_CONNECT" />
+		<field name="OP_READ" />
+		<field name="OP_WRITE" />
+	</class>
+	<class name="java/nio/channels/Selector" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="19" />
+		<method name="&lt;init&gt;()V" />
+		<method name="close()V" />
+		<method name="isOpen()Z" />
+		<method name="keys()Ljava/util/Set;" />
+		<method name="open()Ljava/nio/channels/Selector;" />
+		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;" />
+		<method name="select()I" />
+		<method name="select(J)I" />
+		<method name="selectNow()I" />
+		<method name="selectedKeys()Ljava/util/Set;" />
+		<method name="wakeup()Ljava/nio/channels/Selector;" />
+	</class>
+	<class name="java/nio/channels/ServerSocketChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel" />
+		<implements name="java/nio/channels/NetworkChannel" since="24" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/SelectorProvider;)V" />
+		<method name="accept()Ljava/nio/channels/SocketChannel;" />
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/ServerSocketChannel;" since="24" />
+		<method name="bind(Ljava/net/SocketAddress;I)Ljava/nio/channels/ServerSocketChannel;" since="24" />
+		<method name="open()Ljava/nio/channels/ServerSocketChannel;" />
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/ServerSocketChannel;" since="24" />
+		<method name="socket()Ljava/net/ServerSocket;" />
+	</class>
+	<class name="java/nio/channels/ShutdownChannelGroupException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/SocketChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel" />
+		<implements name="java/nio/channels/ByteChannel" />
+		<implements name="java/nio/channels/GatheringByteChannel" />
+		<implements name="java/nio/channels/NetworkChannel" since="24" />
+		<implements name="java/nio/channels/ScatteringByteChannel" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/SelectorProvider;)V" />
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;" since="24" />
+		<method name="connect(Ljava/net/SocketAddress;)Z" />
+		<method name="finishConnect()Z" />
+		<method name="getRemoteAddress()Ljava/net/SocketAddress;" since="24" />
+		<method name="isConnected()Z" />
+		<method name="isConnectionPending()Z" />
+		<method name="open()Ljava/nio/channels/SocketChannel;" />
+		<method name="open(Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;" />
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/SocketChannel;" since="24" />
+		<method name="shutdownInput()Ljava/nio/channels/SocketChannel;" since="24" />
+		<method name="shutdownOutput()Ljava/nio/channels/SocketChannel;" since="24" />
+		<method name="socket()Ljava/net/Socket;" />
+	</class>
+	<class name="java/nio/channels/UnresolvedAddressException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/UnsupportedAddressTypeException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/WritableByteChannel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+		<method name="write(Ljava/nio/ByteBuffer;)I" />
+	</class>
+	<class name="java/nio/channels/WritePendingException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/spi/AbstractInterruptibleChannel" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/channels/Channel" />
+		<implements name="java/nio/channels/InterruptibleChannel" />
+		<method name="&lt;init&gt;()V" />
+		<method name="begin()V" />
+		<method name="end(Z)V" />
+		<method name="implCloseChannel()V" />
+	</class>
+	<class name="java/nio/channels/spi/AbstractSelectableChannel" since="1">
+		<extends name="java/nio/channels/SelectableChannel" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/SelectorProvider;)V" />
+		<method name="implCloseSelectableChannel()V" />
+		<method name="implConfigureBlocking(Z)V" />
+	</class>
+	<class name="java/nio/channels/spi/AbstractSelectionKey" since="1">
+		<extends name="java/nio/channels/SelectionKey" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/channels/spi/AbstractSelector" since="1">
+		<extends name="java/nio/channels/Selector" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/spi/SelectorProvider;)V" />
+		<method name="begin()V" />
+		<method name="cancelledKeys()Ljava/util/Set;" />
+		<method name="deregister(Ljava/nio/channels/spi/AbstractSelectionKey;)V" />
+		<method name="end()V" />
+		<method name="implCloseSelector()V" />
+		<method name="register(Ljava/nio/channels/spi/AbstractSelectableChannel;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;" />
+	</class>
+	<class name="java/nio/channels/spi/AsynchronousChannelProvider" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="openAsynchronousChannelGroup(ILjava/util/concurrent/ThreadFactory;)Ljava/nio/channels/AsynchronousChannelGroup;" />
+		<method name="openAsynchronousChannelGroup(Ljava/util/concurrent/ExecutorService;I)Ljava/nio/channels/AsynchronousChannelGroup;" />
+		<method name="openAsynchronousServerSocketChannel(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousServerSocketChannel;" />
+		<method name="openAsynchronousSocketChannel(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousSocketChannel;" />
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;" />
+	</class>
+	<class name="java/nio/channels/spi/SelectorProvider" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="inheritedChannel()Ljava/nio/channels/Channel;" />
+		<method name="openDatagramChannel()Ljava/nio/channels/DatagramChannel;" />
+		<method name="openDatagramChannel(Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;" since="24" />
+		<method name="openPipe()Ljava/nio/channels/Pipe;" />
+		<method name="openSelector()Ljava/nio/channels/spi/AbstractSelector;" />
+		<method name="openServerSocketChannel()Ljava/nio/channels/ServerSocketChannel;" />
+		<method name="openSocketChannel()Ljava/nio/channels/SocketChannel;" />
+		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;" />
+	</class>
+	<class name="java/nio/charset/CharacterCodingException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/charset/Charset" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[Ljava/lang/String;)V" />
+		<method name="aliases()Ljava/util/Set;" />
+		<method name="availableCharsets()Ljava/util/SortedMap;" />
+		<method name="canEncode()Z" />
+		<method name="compareTo(Ljava/nio/charset/Charset;)I" />
+		<method name="contains(Ljava/nio/charset/Charset;)Z" />
+		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;" />
+		<method name="defaultCharset()Ljava/nio/charset/Charset;" />
+		<method name="displayName()Ljava/lang/String;" />
+		<method name="displayName(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="encode(Ljava/lang/String;)Ljava/nio/ByteBuffer;" />
+		<method name="encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;" />
+		<method name="forName(Ljava/lang/String;)Ljava/nio/charset/Charset;" />
+		<method name="isRegistered()Z" />
+		<method name="isSupported(Ljava/lang/String;)Z" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="newDecoder()Ljava/nio/charset/CharsetDecoder;" />
+		<method name="newEncoder()Ljava/nio/charset/CharsetEncoder;" />
+	</class>
+	<class name="java/nio/charset/CharsetDecoder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/nio/charset/Charset;FF)V" />
+		<method name="averageCharsPerByte()F" />
+		<method name="charset()Ljava/nio/charset/Charset;" />
+		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;" />
+		<method name="decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;" />
+		<method name="decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;" />
+		<method name="detectedCharset()Ljava/nio/charset/Charset;" />
+		<method name="flush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;" />
+		<method name="implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;" />
+		<method name="implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V" />
+		<method name="implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V" />
+		<method name="implReplaceWith(Ljava/lang/String;)V" />
+		<method name="implReset()V" />
+		<method name="isAutoDetecting()Z" />
+		<method name="isCharsetDetected()Z" />
+		<method name="malformedInputAction()Ljava/nio/charset/CodingErrorAction;" />
+		<method name="maxCharsPerByte()F" />
+		<method name="onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;" />
+		<method name="onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;" />
+		<method name="replaceWith(Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder;" />
+		<method name="replacement()Ljava/lang/String;" />
+		<method name="reset()Ljava/nio/charset/CharsetDecoder;" />
+		<method name="unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;" />
+	</class>
+	<class name="java/nio/charset/CharsetEncoder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/nio/charset/Charset;FF)V" />
+		<method name="&lt;init&gt;(Ljava/nio/charset/Charset;FF[B)V" />
+		<method name="averageBytesPerChar()F" />
+		<method name="canEncode(C)Z" />
+		<method name="canEncode(Ljava/lang/CharSequence;)Z" />
+		<method name="charset()Ljava/nio/charset/Charset;" />
+		<method name="encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;" />
+		<method name="encode(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult;" />
+		<method name="encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;" />
+		<method name="flush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;" />
+		<method name="implFlush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;" />
+		<method name="implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V" />
+		<method name="implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V" />
+		<method name="implReplaceWith([B)V" />
+		<method name="implReset()V" />
+		<method name="isLegalReplacement([B)Z" />
+		<method name="malformedInputAction()Ljava/nio/charset/CodingErrorAction;" />
+		<method name="maxBytesPerChar()F" />
+		<method name="onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;" />
+		<method name="onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;" />
+		<method name="replaceWith([B)Ljava/nio/charset/CharsetEncoder;" />
+		<method name="replacement()[B" />
+		<method name="reset()Ljava/nio/charset/CharsetEncoder;" />
+		<method name="unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;" />
+	</class>
+	<class name="java/nio/charset/CoderMalfunctionError" since="1">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+	</class>
+	<class name="java/nio/charset/CoderResult" since="1">
+		<extends name="java/lang/Object" />
+		<method name="isError()Z" />
+		<method name="isMalformed()Z" />
+		<method name="isOverflow()Z" />
+		<method name="isUnderflow()Z" />
+		<method name="isUnmappable()Z" />
+		<method name="length()I" />
+		<method name="malformedForLength(I)Ljava/nio/charset/CoderResult;" />
+		<method name="throwException()V" />
+		<method name="unmappableForLength(I)Ljava/nio/charset/CoderResult;" />
+		<field name="OVERFLOW" />
+		<field name="UNDERFLOW" />
+	</class>
+	<class name="java/nio/charset/CodingErrorAction" since="1">
+		<extends name="java/lang/Object" />
+		<field name="IGNORE" />
+		<field name="REPLACE" />
+		<field name="REPORT" />
+	</class>
+	<class name="java/nio/charset/IllegalCharsetNameException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getCharsetName()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/charset/MalformedInputException" since="1">
+		<extends name="java/nio/charset/CharacterCodingException" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getInputLength()I" />
+	</class>
+	<class name="java/nio/charset/StandardCharsets" since="19">
+		<extends name="java/lang/Object" />
+		<field name="ISO_8859_1" />
+		<field name="US_ASCII" />
+		<field name="UTF_16" />
+		<field name="UTF_16BE" />
+		<field name="UTF_16LE" />
+		<field name="UTF_8" />
+	</class>
+	<class name="java/nio/charset/UnmappableCharacterException" since="1">
+		<extends name="java/nio/charset/CharacterCodingException" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getInputLength()I" />
+	</class>
+	<class name="java/nio/charset/UnsupportedCharsetException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getCharsetName()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/charset/spi/CharsetProvider" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="charsetForName(Ljava/lang/String;)Ljava/nio/charset/Charset;" />
+		<method name="charsets()Ljava/util/Iterator;" />
+	</class>
+	<class name="java/nio/file/AccessDeniedException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/AccessMode" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/AccessMode;" />
+		<method name="values()[Ljava/nio/file/AccessMode;" />
+		<field name="EXECUTE" />
+		<field name="READ" />
+		<field name="WRITE" />
+	</class>
+	<class name="java/nio/file/AtomicMoveNotSupportedException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/ClosedDirectoryStreamException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/file/ClosedFileSystemException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/file/ClosedWatchServiceException" since="26">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/file/CopyOption" since="26">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/nio/file/DirectoryIteratorException" since="26">
+		<extends name="java/util/ConcurrentModificationException" />
+		<method name="&lt;init&gt;(Ljava/io/IOException;)V" />
+		<method name="getCause()Ljava/io/IOException;" />
+	</class>
+	<class name="java/nio/file/DirectoryNotEmptyException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/DirectoryStream" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<implements name="java/lang/Iterable" />
+	</class>
+	<class name="java/nio/file/DirectoryStream$Filter" since="26">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/nio/file/FileAlreadyExistsException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/FileStore" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getFileStoreAttributeView(Ljava/lang/Class;)Ljava/nio/file/attribute/FileStoreAttributeView;" />
+		<method name="getTotalSpace()J" />
+		<method name="getUnallocatedSpace()J" />
+		<method name="getUsableSpace()J" />
+		<method name="isReadOnly()Z" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="supportsFileAttributeView(Ljava/lang/Class;)Z" />
+		<method name="supportsFileAttributeView(Ljava/lang/String;)Z" />
+		<method name="type()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/file/FileSystem" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFileStores()Ljava/lang/Iterable;" />
+		<method name="getPath(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;" />
+		<method name="getPathMatcher(Ljava/lang/String;)Ljava/nio/file/PathMatcher;" />
+		<method name="getRootDirectories()Ljava/lang/Iterable;" />
+		<method name="getSeparator()Ljava/lang/String;" />
+		<method name="getUserPrincipalLookupService()Ljava/nio/file/attribute/UserPrincipalLookupService;" />
+		<method name="isOpen()Z" />
+		<method name="isReadOnly()Z" />
+		<method name="newWatchService()Ljava/nio/file/WatchService;" />
+		<method name="provider()Ljava/nio/file/spi/FileSystemProvider;" />
+		<method name="supportedFileAttributeViews()Ljava/util/Set;" />
+	</class>
+	<class name="java/nio/file/FileSystemAlreadyExistsException" since="26">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/FileSystemException" since="26">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getFile()Ljava/lang/String;" />
+		<method name="getOtherFile()Ljava/lang/String;" />
+		<method name="getReason()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/file/FileSystemLoopException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/FileSystemNotFoundException" since="26">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/FileSystems" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getDefault()Ljava/nio/file/FileSystem;" />
+		<method name="getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;" />
+		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;" />
+		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem;" />
+		<method name="newFileSystem(Ljava/nio/file/Path;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem;" />
+	</class>
+	<class name="java/nio/file/FileVisitOption" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/FileVisitOption;" />
+		<method name="values()[Ljava/nio/file/FileVisitOption;" />
+		<field name="FOLLOW_LINKS" />
+	</class>
+	<class name="java/nio/file/FileVisitResult" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/FileVisitResult;" />
+		<method name="values()[Ljava/nio/file/FileVisitResult;" />
+		<field name="CONTINUE" />
+		<field name="SKIP_SIBLINGS" />
+		<field name="SKIP_SUBTREE" />
+		<field name="TERMINATE" />
+	</class>
+	<class name="java/nio/file/FileVisitor" since="26">
+		<extends name="java/lang/Object" />
+		<method name="postVisitDirectory(Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult;" />
+		<method name="preVisitDirectory(Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult;" />
+		<method name="visitFile(Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult;" />
+		<method name="visitFileFailed(Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult;" />
+	</class>
+	<class name="java/nio/file/Files" since="26">
+		<extends name="java/lang/Object" />
+		<method name="copy(Ljava/io/InputStream;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)J" />
+		<method name="copy(Ljava/nio/file/Path;Ljava/io/OutputStream;)J" />
+		<method name="copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;" />
+		<method name="createDirectories(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="createDirectory(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="createFile(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/nio/file/Path;" />
+		<method name="createSymbolicLink(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="createTempDirectory(Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="createTempDirectory(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="createTempFile(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;" />
+		<method name="delete(Ljava/nio/file/Path;)V" />
+		<method name="deleteIfExists(Ljava/nio/file/Path;)Z" />
+		<method name="exists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z" />
+		<method name="find(Ljava/nio/file/Path;ILjava/util/function/BiPredicate;[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;" />
+		<method name="getAttribute(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/lang/Object;" />
+		<method name="getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;" />
+		<method name="getFileStore(Ljava/nio/file/Path;)Ljava/nio/file/FileStore;" />
+		<method name="getLastModifiedTime(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileTime;" />
+		<method name="getOwner(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/UserPrincipal;" />
+		<method name="getPosixFilePermissions(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/util/Set;" />
+		<method name="isDirectory(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z" />
+		<method name="isExecutable(Ljava/nio/file/Path;)Z" />
+		<method name="isHidden(Ljava/nio/file/Path;)Z" />
+		<method name="isReadable(Ljava/nio/file/Path;)Z" />
+		<method name="isRegularFile(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z" />
+		<method name="isSameFile(Ljava/nio/file/Path;Ljava/nio/file/Path;)Z" />
+		<method name="isSymbolicLink(Ljava/nio/file/Path;)Z" />
+		<method name="isWritable(Ljava/nio/file/Path;)Z" />
+		<method name="lines(Ljava/nio/file/Path;)Ljava/util/stream/Stream;" />
+		<method name="lines(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/stream/Stream;" />
+		<method name="list(Ljava/nio/file/Path;)Ljava/util/stream/Stream;" />
+		<method name="move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;" />
+		<method name="newBufferedReader(Ljava/nio/file/Path;)Ljava/io/BufferedReader;" />
+		<method name="newBufferedReader(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/io/BufferedReader;" />
+		<method name="newBufferedWriter(Ljava/nio/file/Path;Ljava/nio/charset/Charset;[Ljava/nio/file/OpenOption;)Ljava/io/BufferedWriter;" />
+		<method name="newBufferedWriter(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/BufferedWriter;" />
+		<method name="newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;" />
+		<method name="newByteChannel(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/SeekableByteChannel;" />
+		<method name="newDirectoryStream(Ljava/nio/file/Path;)Ljava/nio/file/DirectoryStream;" />
+		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/lang/String;)Ljava/nio/file/DirectoryStream;" />
+		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;" />
+		<method name="newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;" />
+		<method name="newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;" />
+		<method name="notExists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z" />
+		<method name="probeContentType(Ljava/nio/file/Path;)Ljava/lang/String;" />
+		<method name="readAllBytes(Ljava/nio/file/Path;)[B" />
+		<method name="readAllLines(Ljava/nio/file/Path;)Ljava/util/List;" />
+		<method name="readAllLines(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/List;" />
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;" />
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/util/Map;" />
+		<method name="readSymbolicLink(Ljava/nio/file/Path;)Ljava/nio/file/Path;" />
+		<method name="setAttribute(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/Object;[Ljava/nio/file/LinkOption;)Ljava/nio/file/Path;" />
+		<method name="setLastModifiedTime(Ljava/nio/file/Path;Ljava/nio/file/attribute/FileTime;)Ljava/nio/file/Path;" />
+		<method name="setOwner(Ljava/nio/file/Path;Ljava/nio/file/attribute/UserPrincipal;)Ljava/nio/file/Path;" />
+		<method name="setPosixFilePermissions(Ljava/nio/file/Path;Ljava/util/Set;)Ljava/nio/file/Path;" />
+		<method name="size(Ljava/nio/file/Path;)J" />
+		<method name="walk(Ljava/nio/file/Path;I[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;" />
+		<method name="walk(Ljava/nio/file/Path;[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;" />
+		<method name="walkFileTree(Ljava/nio/file/Path;Ljava/nio/file/FileVisitor;)Ljava/nio/file/Path;" />
+		<method name="walkFileTree(Ljava/nio/file/Path;Ljava/util/Set;ILjava/nio/file/FileVisitor;)Ljava/nio/file/Path;" />
+		<method name="write(Ljava/nio/file/Path;Ljava/lang/Iterable;Ljava/nio/charset/Charset;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;" />
+		<method name="write(Ljava/nio/file/Path;Ljava/lang/Iterable;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;" />
+		<method name="write(Ljava/nio/file/Path;[B[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;" />
+	</class>
+	<class name="java/nio/file/InvalidPathException" since="26">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="getIndex()I" />
+		<method name="getInput()Ljava/lang/String;" />
+		<method name="getReason()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/file/LinkOption" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/nio/file/CopyOption" />
+		<implements name="java/nio/file/OpenOption" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/LinkOption;" />
+		<method name="values()[Ljava/nio/file/LinkOption;" />
+		<field name="NOFOLLOW_LINKS" />
+	</class>
+	<class name="java/nio/file/LinkPermission" since="26">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/NoSuchFileException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/NotDirectoryException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/NotLinkException" since="26">
+		<extends name="java/nio/file/FileSystemException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/OpenOption" since="26">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/nio/file/Path" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/lang/Iterable" />
+		<implements name="java/nio/file/Watchable" />
+		<method name="compareTo(Ljava/nio/file/Path;)I" />
+		<method name="endsWith(Ljava/lang/String;)Z" />
+		<method name="endsWith(Ljava/nio/file/Path;)Z" />
+		<method name="getFileName()Ljava/nio/file/Path;" />
+		<method name="getFileSystem()Ljava/nio/file/FileSystem;" />
+		<method name="getName(I)Ljava/nio/file/Path;" />
+		<method name="getNameCount()I" />
+		<method name="getParent()Ljava/nio/file/Path;" />
+		<method name="getRoot()Ljava/nio/file/Path;" />
+		<method name="isAbsolute()Z" />
+		<method name="normalize()Ljava/nio/file/Path;" />
+		<method name="relativize(Ljava/nio/file/Path;)Ljava/nio/file/Path;" />
+		<method name="resolve(Ljava/lang/String;)Ljava/nio/file/Path;" />
+		<method name="resolve(Ljava/nio/file/Path;)Ljava/nio/file/Path;" />
+		<method name="resolveSibling(Ljava/lang/String;)Ljava/nio/file/Path;" />
+		<method name="resolveSibling(Ljava/nio/file/Path;)Ljava/nio/file/Path;" />
+		<method name="startsWith(Ljava/lang/String;)Z" />
+		<method name="startsWith(Ljava/nio/file/Path;)Z" />
+		<method name="subpath(II)Ljava/nio/file/Path;" />
+		<method name="toAbsolutePath()Ljava/nio/file/Path;" />
+		<method name="toFile()Ljava/io/File;" />
+		<method name="toRealPath([Ljava/nio/file/LinkOption;)Ljava/nio/file/Path;" />
+		<method name="toUri()Ljava/net/URI;" />
+	</class>
+	<class name="java/nio/file/PathMatcher" since="26">
+		<extends name="java/lang/Object" />
+		<method name="matches(Ljava/nio/file/Path;)Z" />
+	</class>
+	<class name="java/nio/file/Paths" since="26">
+		<extends name="java/lang/Object" />
+		<method name="get(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;" />
+		<method name="get(Ljava/net/URI;)Ljava/nio/file/Path;" />
+	</class>
+	<class name="java/nio/file/ProviderMismatchException" since="26">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/ProviderNotFoundException" since="26">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/nio/file/ReadOnlyFileSystemException" since="26">
+		<extends name="java/lang/UnsupportedOperationException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/file/SecureDirectoryStream" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/DirectoryStream" />
+		<method name="deleteDirectory(Ljava/lang/Object;)V" />
+		<method name="deleteFile(Ljava/lang/Object;)V" />
+		<method name="getFileAttributeView(Ljava/lang/Class;)Ljava/nio/file/attribute/FileAttributeView;" />
+		<method name="getFileAttributeView(Ljava/lang/Object;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;" />
+		<method name="move(Ljava/lang/Object;Ljava/nio/file/SecureDirectoryStream;Ljava/lang/Object;)V" />
+		<method name="newByteChannel(Ljava/lang/Object;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;" />
+		<method name="newDirectoryStream(Ljava/lang/Object;[Ljava/nio/file/LinkOption;)Ljava/nio/file/SecureDirectoryStream;" />
+	</class>
+	<class name="java/nio/file/SimpleFileVisitor" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/FileVisitor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/nio/file/StandardCopyOption" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/nio/file/CopyOption" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/StandardCopyOption;" />
+		<method name="values()[Ljava/nio/file/StandardCopyOption;" />
+		<field name="ATOMIC_MOVE" />
+		<field name="COPY_ATTRIBUTES" />
+		<field name="REPLACE_EXISTING" />
+	</class>
+	<class name="java/nio/file/StandardOpenOption" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/nio/file/OpenOption" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/StandardOpenOption;" />
+		<method name="values()[Ljava/nio/file/StandardOpenOption;" />
+		<field name="APPEND" />
+		<field name="CREATE" />
+		<field name="CREATE_NEW" />
+		<field name="DELETE_ON_CLOSE" />
+		<field name="DSYNC" />
+		<field name="READ" />
+		<field name="SPARSE" />
+		<field name="SYNC" />
+		<field name="TRUNCATE_EXISTING" />
+		<field name="WRITE" />
+	</class>
+	<class name="java/nio/file/StandardWatchEventKinds" since="26">
+		<extends name="java/lang/Object" />
+		<field name="ENTRY_CREATE" />
+		<field name="ENTRY_DELETE" />
+		<field name="ENTRY_MODIFY" />
+		<field name="OVERFLOW" />
+	</class>
+	<class name="java/nio/file/WatchEvent" since="26">
+		<extends name="java/lang/Object" />
+		<method name="context()Ljava/lang/Object;" />
+		<method name="count()I" />
+		<method name="kind()Ljava/nio/file/WatchEvent$Kind;" />
+	</class>
+	<class name="java/nio/file/WatchEvent$Kind" since="26">
+		<extends name="java/lang/Object" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="type()Ljava/lang/Class;" />
+	</class>
+	<class name="java/nio/file/WatchEvent$Modifier" since="26">
+		<extends name="java/lang/Object" />
+		<method name="name()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/file/WatchKey" since="26">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="isValid()Z" />
+		<method name="pollEvents()Ljava/util/List;" />
+		<method name="reset()Z" />
+		<method name="watchable()Ljava/nio/file/Watchable;" />
+	</class>
+	<class name="java/nio/file/WatchService" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<method name="poll()Ljava/nio/file/WatchKey;" />
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/WatchKey;" />
+		<method name="take()Ljava/nio/file/WatchKey;" />
+	</class>
+	<class name="java/nio/file/Watchable" since="26">
+		<extends name="java/lang/Object" />
+		<method name="register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey;" />
+		<method name="register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey;" />
+	</class>
+	<class name="java/nio/file/attribute/AclEntry" since="26">
+		<extends name="java/lang/Object" />
+		<method name="flags()Ljava/util/Set;" />
+		<method name="newBuilder()Ljava/nio/file/attribute/AclEntry$Builder;" />
+		<method name="newBuilder(Ljava/nio/file/attribute/AclEntry;)Ljava/nio/file/attribute/AclEntry$Builder;" />
+		<method name="permissions()Ljava/util/Set;" />
+		<method name="principal()Ljava/nio/file/attribute/UserPrincipal;" />
+		<method name="type()Ljava/nio/file/attribute/AclEntryType;" />
+	</class>
+	<class name="java/nio/file/attribute/AclEntry$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="build()Ljava/nio/file/attribute/AclEntry;" />
+		<method name="setFlags(Ljava/util/Set;)Ljava/nio/file/attribute/AclEntry$Builder;" />
+		<method name="setFlags([Ljava/nio/file/attribute/AclEntryFlag;)Ljava/nio/file/attribute/AclEntry$Builder;" />
+		<method name="setPermissions(Ljava/util/Set;)Ljava/nio/file/attribute/AclEntry$Builder;" />
+		<method name="setPermissions([Ljava/nio/file/attribute/AclEntryPermission;)Ljava/nio/file/attribute/AclEntry$Builder;" />
+		<method name="setPrincipal(Ljava/nio/file/attribute/UserPrincipal;)Ljava/nio/file/attribute/AclEntry$Builder;" />
+		<method name="setType(Ljava/nio/file/attribute/AclEntryType;)Ljava/nio/file/attribute/AclEntry$Builder;" />
+	</class>
+	<class name="java/nio/file/attribute/AclEntryFlag" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryFlag;" />
+		<method name="values()[Ljava/nio/file/attribute/AclEntryFlag;" />
+		<field name="DIRECTORY_INHERIT" />
+		<field name="FILE_INHERIT" />
+		<field name="INHERIT_ONLY" />
+		<field name="NO_PROPAGATE_INHERIT" />
+	</class>
+	<class name="java/nio/file/attribute/AclEntryPermission" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryPermission;" />
+		<method name="values()[Ljava/nio/file/attribute/AclEntryPermission;" />
+		<field name="ADD_FILE" />
+		<field name="ADD_SUBDIRECTORY" />
+		<field name="APPEND_DATA" />
+		<field name="DELETE" />
+		<field name="DELETE_CHILD" />
+		<field name="EXECUTE" />
+		<field name="LIST_DIRECTORY" />
+		<field name="READ_ACL" />
+		<field name="READ_ATTRIBUTES" />
+		<field name="READ_DATA" />
+		<field name="READ_NAMED_ATTRS" />
+		<field name="SYNCHRONIZE" />
+		<field name="WRITE_ACL" />
+		<field name="WRITE_ATTRIBUTES" />
+		<field name="WRITE_DATA" />
+		<field name="WRITE_NAMED_ATTRS" />
+		<field name="WRITE_OWNER" />
+	</class>
+	<class name="java/nio/file/attribute/AclEntryType" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryType;" />
+		<method name="values()[Ljava/nio/file/attribute/AclEntryType;" />
+		<field name="ALARM" />
+		<field name="ALLOW" />
+		<field name="AUDIT" />
+		<field name="DENY" />
+	</class>
+	<class name="java/nio/file/attribute/AclFileAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/FileOwnerAttributeView" />
+		<method name="getAcl()Ljava/util/List;" />
+		<method name="setAcl(Ljava/util/List;)V" />
+	</class>
+	<class name="java/nio/file/attribute/AttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<method name="name()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/file/attribute/BasicFileAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/FileAttributeView" />
+		<method name="readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;" />
+		<method name="setTimes(Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;)V" />
+	</class>
+	<class name="java/nio/file/attribute/BasicFileAttributes" since="26">
+		<extends name="java/lang/Object" />
+		<method name="creationTime()Ljava/nio/file/attribute/FileTime;" />
+		<method name="fileKey()Ljava/lang/Object;" />
+		<method name="isDirectory()Z" />
+		<method name="isOther()Z" />
+		<method name="isRegularFile()Z" />
+		<method name="isSymbolicLink()Z" />
+		<method name="lastAccessTime()Ljava/nio/file/attribute/FileTime;" />
+		<method name="lastModifiedTime()Ljava/nio/file/attribute/FileTime;" />
+		<method name="size()J" />
+	</class>
+	<class name="java/nio/file/attribute/DosFileAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/BasicFileAttributeView" />
+		<method name="readAttributes()Ljava/nio/file/attribute/DosFileAttributes;" />
+		<method name="setArchive(Z)V" />
+		<method name="setHidden(Z)V" />
+		<method name="setReadOnly(Z)V" />
+		<method name="setSystem(Z)V" />
+	</class>
+	<class name="java/nio/file/attribute/DosFileAttributes" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/BasicFileAttributes" />
+		<method name="isArchive()Z" />
+		<method name="isHidden()Z" />
+		<method name="isReadOnly()Z" />
+		<method name="isSystem()Z" />
+	</class>
+	<class name="java/nio/file/attribute/FileAttribute" since="26">
+		<extends name="java/lang/Object" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="value()Ljava/lang/Object;" />
+	</class>
+	<class name="java/nio/file/attribute/FileAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/AttributeView" />
+	</class>
+	<class name="java/nio/file/attribute/FileOwnerAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/FileAttributeView" />
+		<method name="getOwner()Ljava/nio/file/attribute/UserPrincipal;" />
+		<method name="setOwner(Ljava/nio/file/attribute/UserPrincipal;)V" />
+	</class>
+	<class name="java/nio/file/attribute/FileStoreAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/AttributeView" />
+	</class>
+	<class name="java/nio/file/attribute/FileTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="compareTo(Ljava/nio/file/attribute/FileTime;)I" />
+		<method name="from(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/attribute/FileTime;" />
+		<method name="from(Ljava/time/Instant;)Ljava/nio/file/attribute/FileTime;" />
+		<method name="fromMillis(J)Ljava/nio/file/attribute/FileTime;" />
+		<method name="to(Ljava/util/concurrent/TimeUnit;)J" />
+		<method name="toInstant()Ljava/time/Instant;" />
+		<method name="toMillis()J" />
+	</class>
+	<class name="java/nio/file/attribute/GroupPrincipal" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/UserPrincipal" />
+	</class>
+	<class name="java/nio/file/attribute/PosixFileAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/BasicFileAttributeView" />
+		<implements name="java/nio/file/attribute/FileOwnerAttributeView" />
+		<method name="readAttributes()Ljava/nio/file/attribute/PosixFileAttributes;" />
+		<method name="setGroup(Ljava/nio/file/attribute/GroupPrincipal;)V" />
+		<method name="setPermissions(Ljava/util/Set;)V" />
+	</class>
+	<class name="java/nio/file/attribute/PosixFileAttributes" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/BasicFileAttributes" />
+		<method name="group()Ljava/nio/file/attribute/GroupPrincipal;" />
+		<method name="owner()Ljava/nio/file/attribute/UserPrincipal;" />
+		<method name="permissions()Ljava/util/Set;" />
+	</class>
+	<class name="java/nio/file/attribute/PosixFilePermission" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/PosixFilePermission;" />
+		<method name="values()[Ljava/nio/file/attribute/PosixFilePermission;" />
+		<field name="GROUP_EXECUTE" />
+		<field name="GROUP_READ" />
+		<field name="GROUP_WRITE" />
+		<field name="OTHERS_EXECUTE" />
+		<field name="OTHERS_READ" />
+		<field name="OTHERS_WRITE" />
+		<field name="OWNER_EXECUTE" />
+		<field name="OWNER_READ" />
+		<field name="OWNER_WRITE" />
+	</class>
+	<class name="java/nio/file/attribute/PosixFilePermissions" since="26">
+		<extends name="java/lang/Object" />
+		<method name="asFileAttribute(Ljava/util/Set;)Ljava/nio/file/attribute/FileAttribute;" />
+		<method name="fromString(Ljava/lang/String;)Ljava/util/Set;" />
+		<method name="toString(Ljava/util/Set;)Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/file/attribute/UserDefinedFileAttributeView" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/nio/file/attribute/FileAttributeView" />
+		<method name="delete(Ljava/lang/String;)V" />
+		<method name="list()Ljava/util/List;" />
+		<method name="read(Ljava/lang/String;Ljava/nio/ByteBuffer;)I" />
+		<method name="size(Ljava/lang/String;)I" />
+		<method name="write(Ljava/lang/String;Ljava/nio/ByteBuffer;)I" />
+	</class>
+	<class name="java/nio/file/attribute/UserPrincipal" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/Principal" />
+	</class>
+	<class name="java/nio/file/attribute/UserPrincipalLookupService" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="lookupPrincipalByGroupName(Ljava/lang/String;)Ljava/nio/file/attribute/GroupPrincipal;" />
+		<method name="lookupPrincipalByName(Ljava/lang/String;)Ljava/nio/file/attribute/UserPrincipal;" />
+	</class>
+	<class name="java/nio/file/attribute/UserPrincipalNotFoundException" since="26">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getName()Ljava/lang/String;" />
+	</class>
+	<class name="java/nio/file/spi/FileSystemProvider" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="checkAccess(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;)V" />
+		<method name="copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V" />
+		<method name="createDirectory(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)V" />
+		<method name="createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)V" />
+		<method name="createSymbolicLink(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)V" />
+		<method name="delete(Ljava/nio/file/Path;)V" />
+		<method name="deleteIfExists(Ljava/nio/file/Path;)Z" />
+		<method name="getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;" />
+		<method name="getFileStore(Ljava/nio/file/Path;)Ljava/nio/file/FileStore;" />
+		<method name="getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;" />
+		<method name="getPath(Ljava/net/URI;)Ljava/nio/file/Path;" />
+		<method name="getScheme()Ljava/lang/String;" />
+		<method name="installedProviders()Ljava/util/List;" />
+		<method name="isHidden(Ljava/nio/file/Path;)Z" />
+		<method name="isSameFile(Ljava/nio/file/Path;Ljava/nio/file/Path;)Z" />
+		<method name="move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V" />
+		<method name="newAsynchronousFileChannel(Ljava/nio/file/Path;Ljava/util/Set;Ljava/util/concurrent/ExecutorService;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/AsynchronousFileChannel;" />
+		<method name="newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;" />
+		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;" />
+		<method name="newFileChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;" />
+		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;" />
+		<method name="newFileSystem(Ljava/nio/file/Path;Ljava/util/Map;)Ljava/nio/file/FileSystem;" />
+		<method name="newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;" />
+		<method name="newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;" />
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;" />
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/util/Map;" />
+		<method name="readSymbolicLink(Ljava/nio/file/Path;)Ljava/nio/file/Path;" />
+		<method name="setAttribute(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/Object;[Ljava/nio/file/LinkOption;)V" />
+	</class>
+	<class name="java/nio/file/spi/FileTypeDetector" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="probeContentType(Ljava/nio/file/Path;)Ljava/lang/String;" />
+	</class>
+	<class name="java/security/AccessControlContext" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/AccessControlContext;Ljava/security/DomainCombiner;)V" />
+		<method name="&lt;init&gt;([Ljava/security/ProtectionDomain;)V" />
+		<method name="checkPermission(Ljava/security/Permission;)V" />
+		<method name="getDomainCombiner()Ljava/security/DomainCombiner;" />
+	</class>
+	<class name="java/security/AccessControlException" since="1">
+		<extends name="java/lang/SecurityException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/security/Permission;)V" />
+		<method name="getPermission()Ljava/security/Permission;" />
+	</class>
+	<class name="java/security/AccessController" since="1">
+		<extends name="java/lang/Object" />
+		<method name="checkPermission(Ljava/security/Permission;)V" />
+		<method name="doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;" />
+		<method name="doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;" />
+		<method name="doPrivileged(Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;" />
+		<method name="doPrivileged(Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;" />
+		<method name="doPrivilegedWithCombiner(Ljava/security/PrivilegedAction;)Ljava/lang/Object;" since="9" />
+		<method name="doPrivilegedWithCombiner(Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;" since="9" />
+		<method name="getContext()Ljava/security/AccessControlContext;" />
+	</class>
+	<class name="java/security/AlgorithmConstraints" since="24">
+		<extends name="java/lang/Object" />
+		<method name="permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/AlgorithmParameters;)Z" />
+		<method name="permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/Key;Ljava/security/AlgorithmParameters;)Z" />
+		<method name="permits(Ljava/util/Set;Ljava/security/Key;)Z" />
+	</class>
+	<class name="java/security/AlgorithmParameterGenerator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/AlgorithmParameterGeneratorSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="generateParameters()Ljava/security/AlgorithmParameters;" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameterGenerator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/AlgorithmParameterGenerator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameterGenerator;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(I)V" />
+		<method name="init(ILjava/security/SecureRandom;)V" />
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="java/security/AlgorithmParameterGeneratorSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGenerateParameters()Ljava/security/AlgorithmParameters;" />
+		<method name="engineInit(ILjava/security/SecureRandom;)V" />
+		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="java/security/AlgorithmParameters" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/AlgorithmParametersSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getEncoded()[B" />
+		<method name="getEncoded(Ljava/lang/String;)[B" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/AlgorithmParameters;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameters;" />
+		<method name="getParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="init([B)V" />
+		<method name="init([BLjava/lang/String;)V" />
+	</class>
+	<class name="java/security/AlgorithmParametersSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGetEncoded()[B" />
+		<method name="engineGetEncoded(Ljava/lang/String;)[B" />
+		<method name="engineGetParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;" />
+		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="engineInit([B)V" />
+		<method name="engineInit([BLjava/lang/String;)V" />
+		<method name="engineToString()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/AllPermission" since="1">
+		<extends name="java/security/Permission" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/AuthProvider" since="1">
+		<extends name="java/security/Provider" />
+		<method name="&lt;init&gt;(Ljava/lang/String;DLjava/lang/String;)V" />
+		<method name="login(Ljavax/security/auth/Subject;Ljavax/security/auth/callback/CallbackHandler;)V" />
+		<method name="logout()V" />
+		<method name="setCallbackHandler(Ljavax/security/auth/callback/CallbackHandler;)V" />
+	</class>
+	<class name="java/security/BasicPermission" since="1">
+		<extends name="java/security/Permission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/Certificate" since="1" deprecated="3">
+		<extends name="java/lang/Object" />
+		<method name="decode(Ljava/io/InputStream;)V" deprecated="29" />
+		<method name="encode(Ljava/io/OutputStream;)V" deprecated="29" />
+		<method name="getFormat()Ljava/lang/String;" deprecated="29" />
+		<method name="getGuarantor()Ljava/security/Principal;" deprecated="29" />
+		<method name="getPrincipal()Ljava/security/Principal;" deprecated="29" />
+		<method name="getPublicKey()Ljava/security/PublicKey;" deprecated="29" />
+		<method name="toString(Z)Ljava/lang/String;" deprecated="29" />
+	</class>
+	<class name="java/security/CodeSigner" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V" />
+		<method name="getSignerCertPath()Ljava/security/cert/CertPath;" />
+		<method name="getTimestamp()Ljava/security/Timestamp;" />
+	</class>
+	<class name="java/security/CodeSource" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/net/URL;[Ljava/security/CodeSigner;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URL;[Ljava/security/cert/Certificate;)V" />
+		<method name="getCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getCodeSigners()[Ljava/security/CodeSigner;" />
+		<method name="getLocation()Ljava/net/URL;" />
+		<method name="implies(Ljava/security/CodeSource;)Z" />
+	</class>
+	<class name="java/security/CryptoPrimitive" since="24">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/CryptoPrimitive;" />
+		<method name="values()[Ljava/security/CryptoPrimitive;" />
+		<field name="BLOCK_CIPHER" />
+		<field name="KEY_AGREEMENT" />
+		<field name="KEY_ENCAPSULATION" />
+		<field name="KEY_WRAP" />
+		<field name="MAC" />
+		<field name="MESSAGE_DIGEST" />
+		<field name="PUBLIC_KEY_ENCRYPTION" />
+		<field name="SECURE_RANDOM" />
+		<field name="SIGNATURE" />
+		<field name="STREAM_CIPHER" />
+	</class>
+	<class name="java/security/DigestException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/DigestInputStream" since="1">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/security/MessageDigest;)V" />
+		<method name="getMessageDigest()Ljava/security/MessageDigest;" />
+		<method name="on(Z)V" />
+		<method name="setMessageDigest(Ljava/security/MessageDigest;)V" />
+		<field name="digest" />
+	</class>
+	<class name="java/security/DigestOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/security/MessageDigest;)V" />
+		<method name="getMessageDigest()Ljava/security/MessageDigest;" />
+		<method name="on(Z)V" />
+		<method name="setMessageDigest(Ljava/security/MessageDigest;)V" />
+		<field name="digest" />
+	</class>
+	<class name="java/security/DomainCombiner" since="1">
+		<extends name="java/lang/Object" />
+		<method name="combine([Ljava/security/ProtectionDomain;[Ljava/security/ProtectionDomain;)[Ljava/security/ProtectionDomain;" />
+	</class>
+	<class name="java/security/DomainLoadStoreParameter" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$LoadStoreParameter" />
+		<method name="&lt;init&gt;(Ljava/net/URI;Ljava/util/Map;)V" />
+		<method name="getConfiguration()Ljava/net/URI;" />
+		<method name="getProtectionParams()Ljava/util/Map;" />
+	</class>
+	<class name="java/security/GeneralSecurityException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/Guard" since="1">
+		<extends name="java/lang/Object" />
+		<method name="checkGuard(Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/security/GuardedObject" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/security/Guard;)V" />
+		<method name="getObject()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/Identity" since="1" deprecated="3">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/security/Principal" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29" />
+		<method name="addCertificate(Ljava/security/Certificate;)V" deprecated="29" />
+		<method name="certificates()[Ljava/security/Certificate;" deprecated="29" />
+		<method name="getInfo()Ljava/lang/String;" deprecated="29" />
+		<method name="getPublicKey()Ljava/security/PublicKey;" deprecated="29" />
+		<method name="getScope()Ljava/security/IdentityScope;" deprecated="29" />
+		<method name="identityEquals(Ljava/security/Identity;)Z" deprecated="29" />
+		<method name="removeCertificate(Ljava/security/Certificate;)V" deprecated="29" />
+		<method name="setInfo(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setPublicKey(Ljava/security/PublicKey;)V" deprecated="29" />
+		<method name="toString(Z)Ljava/lang/String;" deprecated="29" />
+	</class>
+	<class name="java/security/IdentityScope" since="1" deprecated="3">
+		<extends name="java/security/Identity" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29" />
+		<method name="addIdentity(Ljava/security/Identity;)V" deprecated="29" />
+		<method name="getIdentity(Ljava/lang/String;)Ljava/security/Identity;" deprecated="29" />
+		<method name="getIdentity(Ljava/security/Principal;)Ljava/security/Identity;" deprecated="29" />
+		<method name="getIdentity(Ljava/security/PublicKey;)Ljava/security/Identity;" deprecated="29" />
+		<method name="getSystemScope()Ljava/security/IdentityScope;" deprecated="29" />
+		<method name="identities()Ljava/util/Enumeration;" deprecated="29" />
+		<method name="removeIdentity(Ljava/security/Identity;)V" deprecated="29" />
+		<method name="setSystemScope(Ljava/security/IdentityScope;)V" deprecated="29" />
+		<method name="size()I" deprecated="29" />
+	</class>
+	<class name="java/security/InvalidAlgorithmParameterException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/InvalidKeyException" since="1">
+		<extends name="java/security/KeyException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/InvalidParameterException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/Key" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getEncoded()[B" />
+		<method name="getFormat()Ljava/lang/String;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/KeyException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/KeyFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/KeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;" />
+		<method name="generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyFactory;" />
+		<method name="getKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="translateKey(Ljava/security/Key;)Ljava/security/Key;" />
+	</class>
+	<class name="java/security/KeyFactorySpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGeneratePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;" />
+		<method name="engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;" />
+		<method name="engineGetKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;" />
+		<method name="engineTranslateKey(Ljava/security/Key;)Ljava/security/Key;" />
+	</class>
+	<class name="java/security/KeyManagementException" since="1">
+		<extends name="java/security/KeyException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/KeyPair" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/security/PublicKey;Ljava/security/PrivateKey;)V" />
+		<method name="getPrivate()Ljava/security/PrivateKey;" />
+		<method name="getPublic()Ljava/security/PublicKey;" />
+	</class>
+	<class name="java/security/KeyPairGenerator" since="1">
+		<extends name="java/security/KeyPairGeneratorSpi" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="genKeyPair()Ljava/security/KeyPair;" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyPairGenerator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyPairGenerator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyPairGenerator;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="initialize(I)V" />
+		<method name="initialize(Ljava/security/spec/AlgorithmParameterSpec;)V" />
+	</class>
+	<class name="java/security/KeyPairGeneratorSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="generateKeyPair()Ljava/security/KeyPair;" />
+		<method name="initialize(ILjava/security/SecureRandom;)V" />
+		<method name="initialize(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="java/security/KeyRep" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/security/KeyRep$Type;Ljava/lang/String;Ljava/lang/String;[B)V" />
+		<method name="readResolve()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/KeyRep$Type" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/KeyRep$Type;" />
+		<method name="values()[Ljava/security/KeyRep$Type;" />
+		<field name="PRIVATE" />
+		<field name="PUBLIC" />
+		<field name="SECRET" />
+	</class>
+	<class name="java/security/KeyStore" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/KeyStoreSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="aliases()Ljava/util/Enumeration;" />
+		<method name="containsAlias(Ljava/lang/String;)Z" />
+		<method name="deleteEntry(Ljava/lang/String;)V" />
+		<method name="entryInstanceOf(Ljava/lang/String;Ljava/lang/Class;)Z" />
+		<method name="getCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;" />
+		<method name="getCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;" />
+		<method name="getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;" />
+		<method name="getCreationDate(Ljava/lang/String;)Ljava/util/Date;" />
+		<method name="getDefaultType()Ljava/lang/String;" />
+		<method name="getEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyStore;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyStore;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyStore;" />
+		<method name="getKey(Ljava/lang/String;[C)Ljava/security/Key;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="isCertificateEntry(Ljava/lang/String;)Z" />
+		<method name="isKeyEntry(Ljava/lang/String;)Z" />
+		<method name="load(Ljava/io/InputStream;[C)V" />
+		<method name="load(Ljava/security/KeyStore$LoadStoreParameter;)V" />
+		<method name="setCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V" />
+		<method name="setEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V" />
+		<method name="setKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V" />
+		<method name="setKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V" />
+		<method name="size()I" />
+		<method name="store(Ljava/io/OutputStream;[C)V" />
+		<method name="store(Ljava/security/KeyStore$LoadStoreParameter;)V" />
+	</class>
+	<class name="java/security/KeyStore$Builder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getKeyStore()Ljava/security/KeyStore;" />
+		<method name="getProtectionParameter(Ljava/lang/String;)Ljava/security/KeyStore$ProtectionParameter;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/security/Provider;Ljava/io/File;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/security/Provider;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;" />
+		<method name="newInstance(Ljava/security/KeyStore;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;" />
+	</class>
+	<class name="java/security/KeyStore$CallbackHandlerProtection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$ProtectionParameter" />
+		<method name="&lt;init&gt;(Ljavax/security/auth/callback/CallbackHandler;)V" />
+		<method name="getCallbackHandler()Ljavax/security/auth/callback/CallbackHandler;" />
+	</class>
+	<class name="java/security/KeyStore$Entry" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getAttributes()Ljava/util/Set;" since="26" />
+	</class>
+	<class name="java/security/KeyStore$Entry$Attribute" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getValue()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/KeyStore$LoadStoreParameter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getProtectionParameter()Ljava/security/KeyStore$ProtectionParameter;" />
+	</class>
+	<class name="java/security/KeyStore$PasswordProtection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$ProtectionParameter" />
+		<implements name="javax/security/auth/Destroyable" />
+		<method name="&lt;init&gt;([C)V" />
+		<method name="&lt;init&gt;([CLjava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)V" since="26" />
+		<method name="getPassword()[C" />
+		<method name="getProtectionAlgorithm()Ljava/lang/String;" since="26" />
+		<method name="getProtectionParameters()Ljava/security/spec/AlgorithmParameterSpec;" since="26" />
+	</class>
+	<class name="java/security/KeyStore$PrivateKeyEntry" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$Entry" />
+		<method name="&lt;init&gt;(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;)V" />
+		<method name="&lt;init&gt;(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/util/Set;)V" since="26" />
+		<method name="getCertificate()Ljava/security/cert/Certificate;" />
+		<method name="getCertificateChain()[Ljava/security/cert/Certificate;" />
+		<method name="getPrivateKey()Ljava/security/PrivateKey;" />
+	</class>
+	<class name="java/security/KeyStore$ProtectionParameter" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/security/KeyStore$SecretKeyEntry" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$Entry" />
+		<method name="&lt;init&gt;(Ljavax/crypto/SecretKey;)V" />
+		<method name="&lt;init&gt;(Ljavax/crypto/SecretKey;Ljava/util/Set;)V" since="26" />
+		<method name="getSecretKey()Ljavax/crypto/SecretKey;" />
+	</class>
+	<class name="java/security/KeyStore$TrustedCertificateEntry" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$Entry" />
+		<method name="&lt;init&gt;(Ljava/security/cert/Certificate;)V" />
+		<method name="&lt;init&gt;(Ljava/security/cert/Certificate;Ljava/util/Set;)V" since="26" />
+		<method name="getTrustedCertificate()Ljava/security/cert/Certificate;" />
+	</class>
+	<class name="java/security/KeyStoreException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/KeyStoreSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineAliases()Ljava/util/Enumeration;" />
+		<method name="engineContainsAlias(Ljava/lang/String;)Z" />
+		<method name="engineDeleteEntry(Ljava/lang/String;)V" />
+		<method name="engineEntryInstanceOf(Ljava/lang/String;Ljava/lang/Class;)Z" />
+		<method name="engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;" />
+		<method name="engineGetCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;" />
+		<method name="engineGetCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;" />
+		<method name="engineGetCreationDate(Ljava/lang/String;)Ljava/util/Date;" />
+		<method name="engineGetEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;" />
+		<method name="engineGetKey(Ljava/lang/String;[C)Ljava/security/Key;" />
+		<method name="engineIsCertificateEntry(Ljava/lang/String;)Z" />
+		<method name="engineIsKeyEntry(Ljava/lang/String;)Z" />
+		<method name="engineLoad(Ljava/io/InputStream;[C)V" />
+		<method name="engineLoad(Ljava/security/KeyStore$LoadStoreParameter;)V" />
+		<method name="engineSetCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V" />
+		<method name="engineSetEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V" />
+		<method name="engineSetKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V" />
+		<method name="engineSetKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V" />
+		<method name="engineSize()I" />
+		<method name="engineStore(Ljava/io/OutputStream;[C)V" />
+		<method name="engineStore(Ljava/security/KeyStore$LoadStoreParameter;)V" />
+	</class>
+	<class name="java/security/MessageDigest" since="1">
+		<extends name="java/security/MessageDigestSpi" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="digest()[B" />
+		<method name="digest([B)[B" />
+		<method name="digest([BII)I" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getDigestLength()I" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/MessageDigest;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/MessageDigest;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="isEqual([B[B)Z" />
+		<method name="reset()V" />
+		<method name="update(B)V" />
+		<method name="update(Ljava/nio/ByteBuffer;)V" />
+		<method name="update([B)V" />
+		<method name="update([BII)V" />
+	</class>
+	<class name="java/security/MessageDigestSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineDigest()[B" />
+		<method name="engineDigest([BII)I" />
+		<method name="engineGetDigestLength()I" />
+		<method name="engineReset()V" />
+		<method name="engineUpdate(B)V" />
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V" />
+		<method name="engineUpdate([BII)V" />
+	</class>
+	<class name="java/security/NoSuchAlgorithmException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/NoSuchProviderException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/PKCS12Attribute" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/KeyStore$Entry$Attribute" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="getEncoded()[B" />
+	</class>
+	<class name="java/security/Permission" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/security/Guard" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getActions()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="implies(Ljava/security/Permission;)Z" />
+		<method name="newPermissionCollection()Ljava/security/PermissionCollection;" />
+	</class>
+	<class name="java/security/PermissionCollection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(Ljava/security/Permission;)V" />
+		<method name="elements()Ljava/util/Enumeration;" />
+		<method name="implies(Ljava/security/Permission;)Z" />
+		<method name="isReadOnly()Z" />
+		<method name="setReadOnly()V" />
+	</class>
+	<class name="java/security/Permissions" since="1">
+		<extends name="java/security/PermissionCollection" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/security/Policy" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;)Ljava/security/Policy;" since="9" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;Ljava/lang/String;)Ljava/security/Policy;" since="9" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;Ljava/security/Provider;)Ljava/security/Policy;" since="9" />
+		<method name="getParameters()Ljava/security/Policy$Parameters;" since="9" />
+		<method name="getPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;" />
+		<method name="getPermissions(Ljava/security/ProtectionDomain;)Ljava/security/PermissionCollection;" />
+		<method name="getPolicy()Ljava/security/Policy;" />
+		<method name="getProvider()Ljava/security/Provider;" since="9" />
+		<method name="getType()Ljava/lang/String;" since="9" />
+		<method name="implies(Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z" />
+		<method name="refresh()V" />
+		<method name="setPolicy(Ljava/security/Policy;)V" />
+		<field name="UNSUPPORTED_EMPTY_COLLECTION" since="9" />
+	</class>
+	<class name="java/security/Policy$Parameters" since="9">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/security/PolicySpi" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGetPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;" />
+		<method name="engineGetPermissions(Ljava/security/ProtectionDomain;)Ljava/security/PermissionCollection;" />
+		<method name="engineImplies(Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z" />
+		<method name="engineRefresh()V" />
+	</class>
+	<class name="java/security/Principal" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="implies(Ljavax/security/auth/Subject;)Z" since="26" />
+	</class>
+	<class name="java/security/PrivateKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/Key" />
+		<implements name="javax/security/auth/Destroyable" since="26" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/PrivilegedAction" since="1">
+		<extends name="java/lang/Object" />
+		<method name="run()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/PrivilegedActionException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="getException()Ljava/lang/Exception;" />
+	</class>
+	<class name="java/security/PrivilegedExceptionAction" since="1">
+		<extends name="java/lang/Object" />
+		<method name="run()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/ProtectionDomain" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V" />
+		<method name="&lt;init&gt;(Ljava/security/CodeSource;Ljava/security/PermissionCollection;Ljava/lang/ClassLoader;[Ljava/security/Principal;)V" />
+		<method name="getClassLoader()Ljava/lang/ClassLoader;" />
+		<method name="getCodeSource()Ljava/security/CodeSource;" />
+		<method name="getPermissions()Ljava/security/PermissionCollection;" />
+		<method name="getPrincipals()[Ljava/security/Principal;" />
+		<method name="implies(Ljava/security/Permission;)Z" />
+	</class>
+	<class name="java/security/Provider" since="1">
+		<extends name="java/util/Properties" />
+		<method name="&lt;init&gt;(Ljava/lang/String;DLjava/lang/String;)V" />
+		<method name="getInfo()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;" />
+		<method name="getServices()Ljava/util/Set;" />
+		<method name="getVersion()D" />
+		<method name="putService(Ljava/security/Provider$Service;)V" />
+		<method name="removeService(Ljava/security/Provider$Service;)V" />
+	</class>
+	<class name="java/security/Provider$Service" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/Provider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getClassName()Ljava/lang/String;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="newInstance(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="supportsParameter(Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/security/ProviderException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/PublicKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/Key" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/SecureClassLoader" since="1">
+		<extends name="java/lang/ClassLoader" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/ClassLoader;)V" />
+		<method name="defineClass(Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class;" />
+		<method name="defineClass(Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class;" />
+		<method name="getPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;" />
+	</class>
+	<class name="java/security/SecureRandom" since="1">
+		<extends name="java/util/Random" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/security/SecureRandomSpi;Ljava/security/Provider;)V" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="generateSeed(I)[B" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/SecureRandom;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/SecureRandom;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/SecureRandom;" />
+		<method name="getInstanceStrong()Ljava/security/SecureRandom;" since="26" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getSeed(I)[B" />
+		<method name="setSeed([B)V" />
+	</class>
+	<class name="java/security/SecureRandomSpi" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGenerateSeed(I)[B" />
+		<method name="engineNextBytes([B)V" />
+		<method name="engineSetSeed([B)V" />
+	</class>
+	<class name="java/security/Security" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addProvider(Ljava/security/Provider;)I" />
+		<method name="getAlgorithmProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15" />
+		<method name="getAlgorithms(Ljava/lang/String;)Ljava/util/Set;" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getProvider(Ljava/lang/String;)Ljava/security/Provider;" />
+		<method name="getProviders()[Ljava/security/Provider;" />
+		<method name="getProviders(Ljava/lang/String;)[Ljava/security/Provider;" />
+		<method name="getProviders(Ljava/util/Map;)[Ljava/security/Provider;" />
+		<method name="insertProviderAt(Ljava/security/Provider;I)I" />
+		<method name="removeProvider(Ljava/lang/String;)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/SecurityPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/Signature" since="1">
+		<extends name="java/security/SignatureSpi" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/Signature;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Signature;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/Signature;" />
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15" />
+		<method name="getParameters()Ljava/security/AlgorithmParameters;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="initSign(Ljava/security/PrivateKey;)V" />
+		<method name="initSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V" />
+		<method name="initVerify(Ljava/security/PublicKey;)V" />
+		<method name="initVerify(Ljava/security/cert/Certificate;)V" />
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="15" />
+		<method name="setParameter(Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="sign()[B" />
+		<method name="sign([BII)I" />
+		<method name="update(B)V" />
+		<method name="update(Ljava/nio/ByteBuffer;)V" />
+		<method name="update([B)V" />
+		<method name="update([BII)V" />
+		<method name="verify([B)Z" />
+		<method name="verify([BII)Z" />
+		<field name="SIGN" />
+		<field name="UNINITIALIZED" />
+		<field name="VERIFY" />
+		<field name="state" />
+	</class>
+	<class name="java/security/SignatureException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/SignatureSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGetParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15" />
+		<method name="engineGetParameters()Ljava/security/AlgorithmParameters;" />
+		<method name="engineInitSign(Ljava/security/PrivateKey;)V" />
+		<method name="engineInitSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V" />
+		<method name="engineInitVerify(Ljava/security/PublicKey;)V" />
+		<method name="engineSetParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="15" />
+		<method name="engineSetParameter(Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="engineSign()[B" />
+		<method name="engineSign([BII)I" />
+		<method name="engineUpdate(B)V" />
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V" />
+		<method name="engineUpdate([BII)V" />
+		<method name="engineVerify([B)Z" />
+		<method name="engineVerify([BII)Z" />
+		<field name="appRandom" />
+	</class>
+	<class name="java/security/SignedObject" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/io/Serializable;Ljava/security/PrivateKey;Ljava/security/Signature;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getObject()Ljava/lang/Object;" />
+		<method name="getSignature()[B" />
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Signature;)Z" />
+	</class>
+	<class name="java/security/Signer" since="1" deprecated="3">
+		<extends name="java/security/Identity" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29" />
+		<method name="getPrivateKey()Ljava/security/PrivateKey;" deprecated="29" />
+		<method name="setKeyPair(Ljava/security/KeyPair;)V" deprecated="29" />
+	</class>
+	<class name="java/security/Timestamp" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/util/Date;Ljava/security/cert/CertPath;)V" />
+		<method name="getSignerCertPath()Ljava/security/cert/CertPath;" />
+		<method name="getTimestamp()Ljava/util/Date;" />
+	</class>
+	<class name="java/security/UnrecoverableEntryException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/UnrecoverableKeyException" since="1">
+		<extends name="java/security/GeneralSecurityException" removed="9" />
+		<extends name="java/security/UnrecoverableEntryException" since="9" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/UnresolvedPermission" since="1">
+		<extends name="java/security/Permission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/security/cert/Certificate;)V" />
+		<method name="getUnresolvedActions()Ljava/lang/String;" />
+		<method name="getUnresolvedCerts()[Ljava/security/cert/Certificate;" />
+		<method name="getUnresolvedName()Ljava/lang/String;" />
+		<method name="getUnresolvedType()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/acl/Acl" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/acl/Owner" />
+		<method name="addEntry(Ljava/security/Principal;Ljava/security/acl/AclEntry;)Z" />
+		<method name="checkPermission(Ljava/security/Principal;Ljava/security/acl/Permission;)Z" />
+		<method name="entries()Ljava/util/Enumeration;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPermissions(Ljava/security/Principal;)Ljava/util/Enumeration;" />
+		<method name="removeEntry(Ljava/security/Principal;Ljava/security/acl/AclEntry;)Z" />
+		<method name="setName(Ljava/security/Principal;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/acl/AclEntry" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="addPermission(Ljava/security/acl/Permission;)Z" />
+		<method name="checkPermission(Ljava/security/acl/Permission;)Z" />
+		<method name="getPrincipal()Ljava/security/Principal;" />
+		<method name="isNegative()Z" />
+		<method name="permissions()Ljava/util/Enumeration;" />
+		<method name="removePermission(Ljava/security/acl/Permission;)Z" />
+		<method name="setNegativePermissions()V" />
+		<method name="setPrincipal(Ljava/security/Principal;)Z" />
+	</class>
+	<class name="java/security/acl/AclNotFoundException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/security/acl/Group" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/Principal" />
+		<method name="addMember(Ljava/security/Principal;)Z" />
+		<method name="isMember(Ljava/security/Principal;)Z" />
+		<method name="members()Ljava/util/Enumeration;" />
+		<method name="removeMember(Ljava/security/Principal;)Z" />
+	</class>
+	<class name="java/security/acl/LastOwnerException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/security/acl/NotOwnerException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/security/acl/Owner" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addOwner(Ljava/security/Principal;Ljava/security/Principal;)Z" />
+		<method name="deleteOwner(Ljava/security/Principal;Ljava/security/Principal;)Z" />
+		<method name="isOwner(Ljava/security/Principal;)Z" />
+	</class>
+	<class name="java/security/acl/Permission" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/security/cert/CRL" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="isRevoked(Ljava/security/cert/Certificate;)Z" />
+	</class>
+	<class name="java/security/cert/CRLException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/cert/CRLReason" since="24">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/CRLReason;" />
+		<method name="values()[Ljava/security/cert/CRLReason;" />
+		<field name="AA_COMPROMISE" />
+		<field name="AFFILIATION_CHANGED" />
+		<field name="CA_COMPROMISE" />
+		<field name="CERTIFICATE_HOLD" />
+		<field name="CESSATION_OF_OPERATION" />
+		<field name="KEY_COMPROMISE" />
+		<field name="PRIVILEGE_WITHDRAWN" />
+		<field name="REMOVE_FROM_CRL" />
+		<field name="SUPERSEDED" />
+		<field name="UNSPECIFIED" />
+		<field name="UNUSED" />
+	</class>
+	<class name="java/security/cert/CRLSelector" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="match(Ljava/security/cert/CRL;)Z" />
+	</class>
+	<class name="java/security/cert/CertPath" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getCertificates()Ljava/util/List;" />
+		<method name="getEncoded()[B" />
+		<method name="getEncoded(Ljava/lang/String;)[B" />
+		<method name="getEncodings()Ljava/util/Iterator;" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="writeReplace()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/cert/CertPath$CertPathRep" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[B)V" />
+		<method name="readResolve()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/cert/CertPathBuilder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertPathBuilderSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="build(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getDefaultType()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathBuilder;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathBuilder;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertPathBuilder;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24" />
+	</class>
+	<class name="java/security/cert/CertPathBuilderException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/cert/CertPathBuilderResult" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="getCertPath()Ljava/security/cert/CertPath;" />
+	</class>
+	<class name="java/security/cert/CertPathBuilderSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineBuild(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;" />
+		<method name="engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24" />
+	</class>
+	<class name="java/security/cert/CertPathChecker" since="24">
+		<extends name="java/lang/Object" />
+		<method name="check(Ljava/security/cert/Certificate;)V" />
+		<method name="init(Z)V" />
+		<method name="isForwardCheckingSupported()Z" />
+	</class>
+	<class name="java/security/cert/CertPathParameters" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+	</class>
+	<class name="java/security/cert/CertPathValidator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertPathValidatorSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getDefaultType()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathValidator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathValidator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertPathValidator;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24" />
+		<method name="validate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;" />
+	</class>
+	<class name="java/security/cert/CertPathValidatorException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;ILjava/security/cert/CertPathValidatorException$Reason;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="getCertPath()Ljava/security/cert/CertPath;" />
+		<method name="getIndex()I" />
+		<method name="getReason()Ljava/security/cert/CertPathValidatorException$Reason;" since="24" />
+	</class>
+	<class name="java/security/cert/CertPathValidatorException$BasicReason" since="24">
+		<extends name="java/lang/Enum" />
+		<implements name="java/security/cert/CertPathValidatorException$Reason" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/CertPathValidatorException$BasicReason;" />
+		<method name="values()[Ljava/security/cert/CertPathValidatorException$BasicReason;" />
+		<field name="ALGORITHM_CONSTRAINED" />
+		<field name="EXPIRED" />
+		<field name="INVALID_SIGNATURE" />
+		<field name="NOT_YET_VALID" />
+		<field name="REVOKED" />
+		<field name="UNDETERMINED_REVOCATION_STATUS" />
+		<field name="UNSPECIFIED" />
+	</class>
+	<class name="java/security/cert/CertPathValidatorException$Reason" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+	</class>
+	<class name="java/security/cert/CertPathValidatorResult" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+	</class>
+	<class name="java/security/cert/CertPathValidatorSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24" />
+		<method name="engineValidate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;" />
+	</class>
+	<class name="java/security/cert/CertSelector" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="match(Ljava/security/cert/Certificate;)Z" />
+	</class>
+	<class name="java/security/cert/CertStore" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertStoreSpi;Ljava/security/Provider;Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)V" />
+		<method name="getCRLs(Ljava/security/cert/CRLSelector;)Ljava/util/Collection;" />
+		<method name="getCertStoreParameters()Ljava/security/cert/CertStoreParameters;" />
+		<method name="getCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;" />
+		<method name="getDefaultType()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)Ljava/security/cert/CertStore;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;Ljava/lang/String;)Ljava/security/cert/CertStore;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;Ljava/security/Provider;)Ljava/security/cert/CertStore;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getType()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/cert/CertStoreException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/cert/CertStoreParameters" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+	</class>
+	<class name="java/security/cert/CertStoreSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertStoreParameters;)V" />
+		<method name="engineGetCRLs(Ljava/security/cert/CRLSelector;)Ljava/util/Collection;" />
+		<method name="engineGetCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;" />
+	</class>
+	<class name="java/security/cert/Certificate" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getEncoded()[B" />
+		<method name="getPublicKey()Ljava/security/PublicKey;" />
+		<method name="getType()Ljava/lang/String;" />
+		<method name="verify(Ljava/security/PublicKey;)V" />
+		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V" />
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="26" />
+		<method name="writeReplace()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/cert/Certificate$CertificateRep" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[B)V" />
+		<method name="readResolve()Ljava/lang/Object;" />
+	</class>
+	<class name="java/security/cert/CertificateEncodingException" since="1">
+		<extends name="java/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/cert/CertificateException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/cert/CertificateExpiredException" since="1">
+		<extends name="java/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/cert/CertificateFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertificateFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="generateCRL(Ljava/io/InputStream;)Ljava/security/cert/CRL;" />
+		<method name="generateCRLs(Ljava/io/InputStream;)Ljava/util/Collection;" />
+		<method name="generateCertPath(Ljava/io/InputStream;)Ljava/security/cert/CertPath;" />
+		<method name="generateCertPath(Ljava/io/InputStream;Ljava/lang/String;)Ljava/security/cert/CertPath;" />
+		<method name="generateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;" />
+		<method name="generateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;" />
+		<method name="generateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;" />
+		<method name="getCertPathEncodings()Ljava/util/Iterator;" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertificateFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertificateFactory;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getType()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/cert/CertificateFactorySpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGenerateCRL(Ljava/io/InputStream;)Ljava/security/cert/CRL;" />
+		<method name="engineGenerateCRLs(Ljava/io/InputStream;)Ljava/util/Collection;" />
+		<method name="engineGenerateCertPath(Ljava/io/InputStream;)Ljava/security/cert/CertPath;" />
+		<method name="engineGenerateCertPath(Ljava/io/InputStream;Ljava/lang/String;)Ljava/security/cert/CertPath;" />
+		<method name="engineGenerateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;" />
+		<method name="engineGenerateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;" />
+		<method name="engineGenerateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;" />
+		<method name="engineGetCertPathEncodings()Ljava/util/Iterator;" />
+	</class>
+	<class name="java/security/cert/CertificateNotYetValidException" since="1">
+		<extends name="java/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/cert/CertificateParsingException" since="1">
+		<extends name="java/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/cert/CertificateRevokedException" since="24">
+		<extends name="java/security/cert/CertificateException" />
+		<method name="&lt;init&gt;(Ljava/util/Date;Ljava/security/cert/CRLReason;Ljavax/security/auth/x500/X500Principal;Ljava/util/Map;)V" />
+		<method name="getAuthorityName()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getExtensions()Ljava/util/Map;" />
+		<method name="getInvalidityDate()Ljava/util/Date;" />
+		<method name="getRevocationDate()Ljava/util/Date;" />
+		<method name="getRevocationReason()Ljava/security/cert/CRLReason;" />
+	</class>
+	<class name="java/security/cert/CollectionCertStoreParameters" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/cert/CertStoreParameters" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="getCollection()Ljava/util/Collection;" />
+	</class>
+	<class name="java/security/cert/Extension" since="24">
+		<extends name="java/lang/Object" />
+		<method name="encode(Ljava/io/OutputStream;)V" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getValue()[B" />
+		<method name="isCritical()Z" />
+	</class>
+	<class name="java/security/cert/LDAPCertStoreParameters" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/cert/CertStoreParameters" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="getPort()I" />
+		<method name="getServerName()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/cert/PKIXBuilderParameters" since="1">
+		<extends name="java/security/cert/PKIXParameters" />
+		<method name="&lt;init&gt;(Ljava/security/KeyStore;Ljava/security/cert/CertSelector;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Set;Ljava/security/cert/CertSelector;)V" />
+		<method name="getMaxPathLength()I" />
+		<method name="setMaxPathLength(I)V" />
+	</class>
+	<class name="java/security/cert/PKIXCertPathBuilderResult" since="1">
+		<extends name="java/security/cert/PKIXCertPathValidatorResult" />
+		<implements name="java/security/cert/CertPathBuilderResult" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertPath;Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V" />
+	</class>
+	<class name="java/security/cert/PKIXCertPathChecker" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/security/cert/CertPathChecker" since="24" />
+		<method name="&lt;init&gt;()V" />
+		<method name="check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V" />
+		<method name="getSupportedExtensions()Ljava/util/Set;" />
+		<method name="init(Z)V" />
+		<method name="isForwardCheckingSupported()Z" />
+	</class>
+	<class name="java/security/cert/PKIXCertPathValidatorResult" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/cert/CertPathValidatorResult" />
+		<method name="&lt;init&gt;(Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V" />
+		<method name="getPolicyTree()Ljava/security/cert/PolicyNode;" />
+		<method name="getPublicKey()Ljava/security/PublicKey;" />
+		<method name="getTrustAnchor()Ljava/security/cert/TrustAnchor;" />
+	</class>
+	<class name="java/security/cert/PKIXParameters" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/cert/CertPathParameters" />
+		<method name="&lt;init&gt;(Ljava/security/KeyStore;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Set;)V" />
+		<method name="addCertPathChecker(Ljava/security/cert/PKIXCertPathChecker;)V" />
+		<method name="addCertStore(Ljava/security/cert/CertStore;)V" />
+		<method name="getCertPathCheckers()Ljava/util/List;" />
+		<method name="getCertStores()Ljava/util/List;" />
+		<method name="getDate()Ljava/util/Date;" />
+		<method name="getInitialPolicies()Ljava/util/Set;" />
+		<method name="getPolicyQualifiersRejected()Z" />
+		<method name="getSigProvider()Ljava/lang/String;" />
+		<method name="getTargetCertConstraints()Ljava/security/cert/CertSelector;" />
+		<method name="getTrustAnchors()Ljava/util/Set;" />
+		<method name="isAnyPolicyInhibited()Z" />
+		<method name="isExplicitPolicyRequired()Z" />
+		<method name="isPolicyMappingInhibited()Z" />
+		<method name="isRevocationEnabled()Z" />
+		<method name="setAnyPolicyInhibited(Z)V" />
+		<method name="setCertPathCheckers(Ljava/util/List;)V" />
+		<method name="setCertStores(Ljava/util/List;)V" />
+		<method name="setDate(Ljava/util/Date;)V" />
+		<method name="setExplicitPolicyRequired(Z)V" />
+		<method name="setInitialPolicies(Ljava/util/Set;)V" />
+		<method name="setPolicyMappingInhibited(Z)V" />
+		<method name="setPolicyQualifiersRejected(Z)V" />
+		<method name="setRevocationEnabled(Z)V" />
+		<method name="setSigProvider(Ljava/lang/String;)V" />
+		<method name="setTargetCertConstraints(Ljava/security/cert/CertSelector;)V" />
+		<method name="setTrustAnchors(Ljava/util/Set;)V" />
+	</class>
+	<class name="java/security/cert/PKIXReason" since="24">
+		<extends name="java/lang/Enum" />
+		<implements name="java/security/cert/CertPathValidatorException$Reason" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/PKIXReason;" />
+		<method name="values()[Ljava/security/cert/PKIXReason;" />
+		<field name="INVALID_KEY_USAGE" />
+		<field name="INVALID_NAME" />
+		<field name="INVALID_POLICY" />
+		<field name="NAME_CHAINING" />
+		<field name="NOT_CA_CERT" />
+		<field name="NO_TRUST_ANCHOR" />
+		<field name="PATH_TOO_LONG" />
+		<field name="UNRECOGNIZED_CRIT_EXT" />
+	</class>
+	<class name="java/security/cert/PKIXRevocationChecker" since="24">
+		<extends name="java/security/cert/PKIXCertPathChecker" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clone()Ljava/security/cert/PKIXRevocationChecker;" />
+		<method name="getOcspExtensions()Ljava/util/List;" />
+		<method name="getOcspResponder()Ljava/net/URI;" />
+		<method name="getOcspResponderCert()Ljava/security/cert/X509Certificate;" />
+		<method name="getOcspResponses()Ljava/util/Map;" />
+		<method name="getOptions()Ljava/util/Set;" />
+		<method name="getSoftFailExceptions()Ljava/util/List;" />
+		<method name="setOcspExtensions(Ljava/util/List;)V" />
+		<method name="setOcspResponder(Ljava/net/URI;)V" />
+		<method name="setOcspResponderCert(Ljava/security/cert/X509Certificate;)V" />
+		<method name="setOcspResponses(Ljava/util/Map;)V" />
+		<method name="setOptions(Ljava/util/Set;)V" />
+	</class>
+	<class name="java/security/cert/PKIXRevocationChecker$Option" since="24">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/PKIXRevocationChecker$Option;" />
+		<method name="values()[Ljava/security/cert/PKIXRevocationChecker$Option;" />
+		<field name="NO_FALLBACK" />
+		<field name="ONLY_END_ENTITY" />
+		<field name="PREFER_CRLS" />
+		<field name="SOFT_FAIL" />
+	</class>
+	<class name="java/security/cert/PolicyNode" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getChildren()Ljava/util/Iterator;" />
+		<method name="getDepth()I" />
+		<method name="getExpectedPolicies()Ljava/util/Set;" />
+		<method name="getParent()Ljava/security/cert/PolicyNode;" />
+		<method name="getPolicyQualifiers()Ljava/util/Set;" />
+		<method name="getValidPolicy()Ljava/lang/String;" />
+		<method name="isCritical()Z" />
+	</class>
+	<class name="java/security/cert/PolicyQualifierInfo" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="getEncoded()[B" />
+		<method name="getPolicyQualifier()[B" />
+		<method name="getPolicyQualifierId()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/cert/TrustAnchor" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/security/PublicKey;[B)V" />
+		<method name="&lt;init&gt;(Ljava/security/cert/X509Certificate;[B)V" />
+		<method name="&lt;init&gt;(Ljavax/security/auth/x500/X500Principal;Ljava/security/PublicKey;[B)V" />
+		<method name="getCA()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getCAName()Ljava/lang/String;" />
+		<method name="getCAPublicKey()Ljava/security/PublicKey;" />
+		<method name="getNameConstraints()[B" />
+		<method name="getTrustedCert()Ljava/security/cert/X509Certificate;" />
+	</class>
+	<class name="java/security/cert/X509CRL" since="1">
+		<extends name="java/security/cert/CRL" />
+		<implements name="java/security/cert/X509Extension" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getEncoded()[B" />
+		<method name="getIssuerDN()Ljava/security/Principal;" />
+		<method name="getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getNextUpdate()Ljava/util/Date;" />
+		<method name="getRevokedCertificate(Ljava/math/BigInteger;)Ljava/security/cert/X509CRLEntry;" />
+		<method name="getRevokedCertificate(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509CRLEntry;" />
+		<method name="getRevokedCertificates()Ljava/util/Set;" />
+		<method name="getSigAlgName()Ljava/lang/String;" />
+		<method name="getSigAlgOID()Ljava/lang/String;" />
+		<method name="getSigAlgParams()[B" />
+		<method name="getSignature()[B" />
+		<method name="getTBSCertList()[B" />
+		<method name="getThisUpdate()Ljava/util/Date;" />
+		<method name="getVersion()I" />
+		<method name="verify(Ljava/security/PublicKey;)V" />
+		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V" />
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="26" />
+	</class>
+	<class name="java/security/cert/X509CRLEntry" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/cert/X509Extension" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getCertificateIssuer()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getEncoded()[B" />
+		<method name="getRevocationDate()Ljava/util/Date;" />
+		<method name="getRevocationReason()Ljava/security/cert/CRLReason;" since="24" />
+		<method name="getSerialNumber()Ljava/math/BigInteger;" />
+		<method name="hasExtensions()Z" />
+	</class>
+	<class name="java/security/cert/X509CRLSelector" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/cert/CRLSelector" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addIssuer(Ljavax/security/auth/x500/X500Principal;)V" />
+		<method name="addIssuerName(Ljava/lang/String;)V" />
+		<method name="addIssuerName([B)V" />
+		<method name="getCertificateChecking()Ljava/security/cert/X509Certificate;" />
+		<method name="getDateAndTime()Ljava/util/Date;" />
+		<method name="getIssuerNames()Ljava/util/Collection;" />
+		<method name="getIssuers()Ljava/util/Collection;" />
+		<method name="getMaxCRL()Ljava/math/BigInteger;" />
+		<method name="getMinCRL()Ljava/math/BigInteger;" />
+		<method name="setCertificateChecking(Ljava/security/cert/X509Certificate;)V" />
+		<method name="setDateAndTime(Ljava/util/Date;)V" />
+		<method name="setIssuerNames(Ljava/util/Collection;)V" />
+		<method name="setIssuers(Ljava/util/Collection;)V" />
+		<method name="setMaxCRLNumber(Ljava/math/BigInteger;)V" />
+		<method name="setMinCRLNumber(Ljava/math/BigInteger;)V" />
+	</class>
+	<class name="java/security/cert/X509CertSelector" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/cert/CertSelector" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addPathToName(ILjava/lang/String;)V" />
+		<method name="addPathToName(I[B)V" />
+		<method name="addSubjectAlternativeName(ILjava/lang/String;)V" />
+		<method name="addSubjectAlternativeName(I[B)V" />
+		<method name="getAuthorityKeyIdentifier()[B" />
+		<method name="getBasicConstraints()I" />
+		<method name="getCertificate()Ljava/security/cert/X509Certificate;" />
+		<method name="getCertificateValid()Ljava/util/Date;" />
+		<method name="getExtendedKeyUsage()Ljava/util/Set;" />
+		<method name="getIssuer()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getIssuerAsBytes()[B" />
+		<method name="getIssuerAsString()Ljava/lang/String;" />
+		<method name="getKeyUsage()[Z" />
+		<method name="getMatchAllSubjectAltNames()Z" />
+		<method name="getNameConstraints()[B" />
+		<method name="getPathToNames()Ljava/util/Collection;" />
+		<method name="getPolicy()Ljava/util/Set;" />
+		<method name="getPrivateKeyValid()Ljava/util/Date;" />
+		<method name="getSerialNumber()Ljava/math/BigInteger;" />
+		<method name="getSubject()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getSubjectAlternativeNames()Ljava/util/Collection;" />
+		<method name="getSubjectAsBytes()[B" />
+		<method name="getSubjectAsString()Ljava/lang/String;" />
+		<method name="getSubjectKeyIdentifier()[B" />
+		<method name="getSubjectPublicKey()Ljava/security/PublicKey;" />
+		<method name="getSubjectPublicKeyAlgID()Ljava/lang/String;" />
+		<method name="setAuthorityKeyIdentifier([B)V" />
+		<method name="setBasicConstraints(I)V" />
+		<method name="setCertificate(Ljava/security/cert/X509Certificate;)V" />
+		<method name="setCertificateValid(Ljava/util/Date;)V" />
+		<method name="setExtendedKeyUsage(Ljava/util/Set;)V" />
+		<method name="setIssuer(Ljava/lang/String;)V" />
+		<method name="setIssuer(Ljavax/security/auth/x500/X500Principal;)V" />
+		<method name="setIssuer([B)V" />
+		<method name="setKeyUsage([Z)V" />
+		<method name="setMatchAllSubjectAltNames(Z)V" />
+		<method name="setNameConstraints([B)V" />
+		<method name="setPathToNames(Ljava/util/Collection;)V" />
+		<method name="setPolicy(Ljava/util/Set;)V" />
+		<method name="setPrivateKeyValid(Ljava/util/Date;)V" />
+		<method name="setSerialNumber(Ljava/math/BigInteger;)V" />
+		<method name="setSubject(Ljava/lang/String;)V" />
+		<method name="setSubject(Ljavax/security/auth/x500/X500Principal;)V" />
+		<method name="setSubject([B)V" />
+		<method name="setSubjectAlternativeNames(Ljava/util/Collection;)V" />
+		<method name="setSubjectKeyIdentifier([B)V" />
+		<method name="setSubjectPublicKey(Ljava/security/PublicKey;)V" />
+		<method name="setSubjectPublicKey([B)V" />
+		<method name="setSubjectPublicKeyAlgID(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/cert/X509Certificate" since="1">
+		<extends name="java/security/cert/Certificate" />
+		<implements name="java/security/cert/X509Extension" />
+		<method name="&lt;init&gt;()V" />
+		<method name="checkValidity()V" />
+		<method name="checkValidity(Ljava/util/Date;)V" />
+		<method name="getBasicConstraints()I" />
+		<method name="getExtendedKeyUsage()Ljava/util/List;" />
+		<method name="getIssuerAlternativeNames()Ljava/util/Collection;" />
+		<method name="getIssuerDN()Ljava/security/Principal;" />
+		<method name="getIssuerUniqueID()[Z" />
+		<method name="getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getKeyUsage()[Z" />
+		<method name="getNotAfter()Ljava/util/Date;" />
+		<method name="getNotBefore()Ljava/util/Date;" />
+		<method name="getSerialNumber()Ljava/math/BigInteger;" />
+		<method name="getSigAlgName()Ljava/lang/String;" />
+		<method name="getSigAlgOID()Ljava/lang/String;" />
+		<method name="getSigAlgParams()[B" />
+		<method name="getSignature()[B" />
+		<method name="getSubjectAlternativeNames()Ljava/util/Collection;" />
+		<method name="getSubjectDN()Ljava/security/Principal;" />
+		<method name="getSubjectUniqueID()[Z" />
+		<method name="getSubjectX500Principal()Ljavax/security/auth/x500/X500Principal;" />
+		<method name="getTBSCertificate()[B" />
+		<method name="getVersion()I" />
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="24" />
+	</class>
+	<class name="java/security/cert/X509Extension" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getCriticalExtensionOIDs()Ljava/util/Set;" />
+		<method name="getExtensionValue(Ljava/lang/String;)[B" />
+		<method name="getNonCriticalExtensionOIDs()Ljava/util/Set;" />
+		<method name="hasUnsupportedCriticalExtension()Z" />
+	</class>
+	<class name="java/security/interfaces/DSAKey" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getParams()Ljava/security/interfaces/DSAParams;" />
+	</class>
+	<class name="java/security/interfaces/DSAKeyPairGenerator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="initialize(IZLjava/security/SecureRandom;)V" />
+		<method name="initialize(Ljava/security/interfaces/DSAParams;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="java/security/interfaces/DSAParams" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getG()Ljava/math/BigInteger;" />
+		<method name="getP()Ljava/math/BigInteger;" />
+		<method name="getQ()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/interfaces/DSAPrivateKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PrivateKey" />
+		<implements name="java/security/interfaces/DSAKey" />
+		<method name="getX()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/interfaces/DSAPublicKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PublicKey" />
+		<implements name="java/security/interfaces/DSAKey" />
+		<method name="getY()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/interfaces/ECKey" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getParams()Ljava/security/spec/ECParameterSpec;" />
+	</class>
+	<class name="java/security/interfaces/ECPrivateKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PrivateKey" />
+		<implements name="java/security/interfaces/ECKey" />
+		<method name="getS()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/interfaces/ECPublicKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PublicKey" />
+		<implements name="java/security/interfaces/ECKey" />
+		<method name="getW()Ljava/security/spec/ECPoint;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/interfaces/RSAKey" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getModulus()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/interfaces/RSAMultiPrimePrivateCrtKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/interfaces/RSAPrivateKey" />
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;" />
+		<method name="getOtherPrimeInfo()[Ljava/security/spec/RSAOtherPrimeInfo;" />
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;" />
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;" />
+		<method name="getPrimeP()Ljava/math/BigInteger;" />
+		<method name="getPrimeQ()Ljava/math/BigInteger;" />
+		<method name="getPublicExponent()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/interfaces/RSAPrivateCrtKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/interfaces/RSAPrivateKey" />
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;" />
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;" />
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;" />
+		<method name="getPrimeP()Ljava/math/BigInteger;" />
+		<method name="getPrimeQ()Ljava/math/BigInteger;" />
+		<method name="getPublicExponent()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/interfaces/RSAPrivateKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PrivateKey" />
+		<implements name="java/security/interfaces/RSAKey" />
+		<method name="getPrivateExponent()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/interfaces/RSAPublicKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PublicKey" />
+		<implements name="java/security/interfaces/RSAKey" />
+		<method name="getPublicExponent()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="java/security/spec/AlgorithmParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/security/spec/DSAParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/interfaces/DSAParams" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+	</class>
+	<class name="java/security/spec/DSAPrivateKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getG()Ljava/math/BigInteger;" />
+		<method name="getP()Ljava/math/BigInteger;" />
+		<method name="getQ()Ljava/math/BigInteger;" />
+		<method name="getX()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/DSAPublicKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getG()Ljava/math/BigInteger;" />
+		<method name="getP()Ljava/math/BigInteger;" />
+		<method name="getQ()Ljava/math/BigInteger;" />
+		<method name="getY()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/ECField" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getFieldSize()I" />
+	</class>
+	<class name="java/security/spec/ECFieldF2m" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/ECField" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/math/BigInteger;)V" />
+		<method name="&lt;init&gt;(I[I)V" />
+		<method name="getM()I" />
+		<method name="getMidTermsOfReductionPolynomial()[I" />
+		<method name="getReductionPolynomial()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/ECFieldFp" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/ECField" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;)V" />
+		<method name="getP()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/ECGenParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getName()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/spec/ECParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(Ljava/security/spec/EllipticCurve;Ljava/security/spec/ECPoint;Ljava/math/BigInteger;I)V" />
+		<method name="getCofactor()I" />
+		<method name="getCurve()Ljava/security/spec/EllipticCurve;" />
+		<method name="getGenerator()Ljava/security/spec/ECPoint;" />
+		<method name="getOrder()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/ECPoint" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getAffineX()Ljava/math/BigInteger;" />
+		<method name="getAffineY()Ljava/math/BigInteger;" />
+		<field name="POINT_INFINITY" />
+	</class>
+	<class name="java/security/spec/ECPrivateKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/security/spec/ECParameterSpec;)V" />
+		<method name="getParams()Ljava/security/spec/ECParameterSpec;" />
+		<method name="getS()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/ECPublicKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/security/spec/ECPoint;Ljava/security/spec/ECParameterSpec;)V" />
+		<method name="getParams()Ljava/security/spec/ECParameterSpec;" />
+		<method name="getW()Ljava/security/spec/ECPoint;" />
+	</class>
+	<class name="java/security/spec/EllipticCurve" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="&lt;init&gt;(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;[B)V" />
+		<method name="getA()Ljava/math/BigInteger;" />
+		<method name="getB()Ljava/math/BigInteger;" />
+		<method name="getField()Ljava/security/spec/ECField;" />
+		<method name="getSeed()[B" />
+	</class>
+	<class name="java/security/spec/EncodedKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="getEncoded()[B" />
+		<method name="getFormat()Ljava/lang/String;" />
+	</class>
+	<class name="java/security/spec/InvalidKeySpecException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/security/spec/InvalidParameterSpecException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/security/spec/KeySpec" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/security/spec/MGF1ParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getDigestAlgorithm()Ljava/lang/String;" />
+		<field name="SHA1" />
+		<field name="SHA224" since="26" />
+		<field name="SHA256" />
+		<field name="SHA384" />
+		<field name="SHA512" />
+	</class>
+	<class name="java/security/spec/PKCS8EncodedKeySpec" since="1">
+		<extends name="java/security/spec/EncodedKeySpec" />
+		<method name="&lt;init&gt;([B)V" />
+	</class>
+	<class name="java/security/spec/PSSParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;II)V" />
+		<method name="getDigestAlgorithm()Ljava/lang/String;" />
+		<method name="getMGFAlgorithm()Ljava/lang/String;" />
+		<method name="getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;" />
+		<method name="getSaltLength()I" />
+		<method name="getTrailerField()I" />
+		<field name="DEFAULT" />
+	</class>
+	<class name="java/security/spec/RSAKeyGenParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(ILjava/math/BigInteger;)V" />
+		<method name="getKeysize()I" />
+		<method name="getPublicExponent()Ljava/math/BigInteger;" />
+		<field name="F0" />
+		<field name="F4" />
+	</class>
+	<class name="java/security/spec/RSAMultiPrimePrivateCrtKeySpec" since="1">
+		<extends name="java/security/spec/RSAPrivateKeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;)V" />
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;" />
+		<method name="getOtherPrimeInfo()[Ljava/security/spec/RSAOtherPrimeInfo;" />
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;" />
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;" />
+		<method name="getPrimeP()Ljava/math/BigInteger;" />
+		<method name="getPrimeQ()Ljava/math/BigInteger;" />
+		<method name="getPublicExponent()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/RSAOtherPrimeInfo" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;" />
+		<method name="getExponent()Ljava/math/BigInteger;" />
+		<method name="getPrime()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/RSAPrivateCrtKeySpec" since="1">
+		<extends name="java/security/spec/RSAPrivateKeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;" />
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;" />
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;" />
+		<method name="getPrimeP()Ljava/math/BigInteger;" />
+		<method name="getPrimeQ()Ljava/math/BigInteger;" />
+		<method name="getPublicExponent()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/RSAPrivateKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getModulus()Ljava/math/BigInteger;" />
+		<method name="getPrivateExponent()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/RSAPublicKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getModulus()Ljava/math/BigInteger;" />
+		<method name="getPublicExponent()Ljava/math/BigInteger;" />
+	</class>
+	<class name="java/security/spec/X509EncodedKeySpec" since="1">
+		<extends name="java/security/spec/EncodedKeySpec" />
+		<method name="&lt;init&gt;([B)V" />
+	</class>
+	<class name="java/sql/Array" since="1">
+		<extends name="java/lang/Object" />
+		<method name="free()V" since="9" />
+		<method name="getArray()Ljava/lang/Object;" />
+		<method name="getArray(JI)Ljava/lang/Object;" />
+		<method name="getArray(JILjava/util/Map;)Ljava/lang/Object;" />
+		<method name="getArray(Ljava/util/Map;)Ljava/lang/Object;" />
+		<method name="getBaseType()I" />
+		<method name="getBaseTypeName()Ljava/lang/String;" />
+		<method name="getResultSet()Ljava/sql/ResultSet;" />
+		<method name="getResultSet(JI)Ljava/sql/ResultSet;" />
+		<method name="getResultSet(JILjava/util/Map;)Ljava/sql/ResultSet;" />
+		<method name="getResultSet(Ljava/util/Map;)Ljava/sql/ResultSet;" />
+	</class>
+	<class name="java/sql/BatchUpdateException" since="1">
+		<extends name="java/sql/SQLException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I[I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I[ILjava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;[I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;[ILjava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[ILjava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;([I)V" />
+		<method name="&lt;init&gt;([ILjava/lang/Throwable;)V" since="9" />
+		<method name="getUpdateCounts()[I" />
+	</class>
+	<class name="java/sql/Blob" since="1">
+		<extends name="java/lang/Object" />
+		<method name="free()V" since="9" />
+		<method name="getBinaryStream()Ljava/io/InputStream;" />
+		<method name="getBinaryStream(JJ)Ljava/io/InputStream;" since="9" />
+		<method name="getBytes(JI)[B" />
+		<method name="length()J" />
+		<method name="position(Ljava/sql/Blob;J)J" />
+		<method name="position([BJ)J" />
+		<method name="setBinaryStream(J)Ljava/io/OutputStream;" />
+		<method name="setBytes(J[B)I" />
+		<method name="setBytes(J[BII)I" />
+		<method name="truncate(J)V" />
+	</class>
+	<class name="java/sql/CallableStatement" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/PreparedStatement" />
+		<method name="getArray(I)Ljava/sql/Array;" />
+		<method name="getArray(Ljava/lang/String;)Ljava/sql/Array;" />
+		<method name="getBigDecimal(I)Ljava/math/BigDecimal;" />
+		<method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="15" />
+		<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;" />
+		<method name="getBlob(I)Ljava/sql/Blob;" />
+		<method name="getBlob(Ljava/lang/String;)Ljava/sql/Blob;" />
+		<method name="getBoolean(I)Z" />
+		<method name="getBoolean(Ljava/lang/String;)Z" />
+		<method name="getByte(I)B" />
+		<method name="getByte(Ljava/lang/String;)B" />
+		<method name="getBytes(I)[B" />
+		<method name="getBytes(Ljava/lang/String;)[B" />
+		<method name="getCharacterStream(I)Ljava/io/Reader;" since="9" />
+		<method name="getCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9" />
+		<method name="getClob(I)Ljava/sql/Clob;" />
+		<method name="getClob(Ljava/lang/String;)Ljava/sql/Clob;" />
+		<method name="getDate(I)Ljava/sql/Date;" />
+		<method name="getDate(ILjava/util/Calendar;)Ljava/sql/Date;" />
+		<method name="getDate(Ljava/lang/String;)Ljava/sql/Date;" />
+		<method name="getDate(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Date;" />
+		<method name="getDouble(I)D" />
+		<method name="getDouble(Ljava/lang/String;)D" />
+		<method name="getFloat(I)F" />
+		<method name="getFloat(Ljava/lang/String;)F" />
+		<method name="getInt(I)I" />
+		<method name="getInt(Ljava/lang/String;)I" />
+		<method name="getLong(I)J" />
+		<method name="getLong(Ljava/lang/String;)J" />
+		<method name="getNCharacterStream(I)Ljava/io/Reader;" since="9" />
+		<method name="getNCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9" />
+		<method name="getNClob(I)Ljava/sql/NClob;" since="9" />
+		<method name="getNClob(Ljava/lang/String;)Ljava/sql/NClob;" since="9" />
+		<method name="getNString(I)Ljava/lang/String;" since="9" />
+		<method name="getNString(Ljava/lang/String;)Ljava/lang/String;" since="9" />
+		<method name="getObject(I)Ljava/lang/Object;" />
+		<method name="getObject(ILjava/util/Map;)Ljava/lang/Object;" />
+		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getObject(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/Object;" />
+		<method name="getRef(I)Ljava/sql/Ref;" />
+		<method name="getRef(Ljava/lang/String;)Ljava/sql/Ref;" />
+		<method name="getRowId(I)Ljava/sql/RowId;" since="9" />
+		<method name="getRowId(Ljava/lang/String;)Ljava/sql/RowId;" since="9" />
+		<method name="getSQLXML(I)Ljava/sql/SQLXML;" since="9" />
+		<method name="getSQLXML(Ljava/lang/String;)Ljava/sql/SQLXML;" since="9" />
+		<method name="getShort(I)S" />
+		<method name="getShort(Ljava/lang/String;)S" />
+		<method name="getString(I)Ljava/lang/String;" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getTime(I)Ljava/sql/Time;" />
+		<method name="getTime(ILjava/util/Calendar;)Ljava/sql/Time;" />
+		<method name="getTime(Ljava/lang/String;)Ljava/sql/Time;" />
+		<method name="getTime(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Time;" />
+		<method name="getTimestamp(I)Ljava/sql/Timestamp;" />
+		<method name="getTimestamp(ILjava/util/Calendar;)Ljava/sql/Timestamp;" />
+		<method name="getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;" />
+		<method name="getTimestamp(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Timestamp;" />
+		<method name="getURL(I)Ljava/net/URL;" />
+		<method name="getURL(Ljava/lang/String;)Ljava/net/URL;" />
+		<method name="registerOutParameter(II)V" />
+		<method name="registerOutParameter(III)V" />
+		<method name="registerOutParameter(IILjava/lang/String;)V" />
+		<method name="registerOutParameter(Ljava/lang/String;I)V" />
+		<method name="registerOutParameter(Ljava/lang/String;II)V" />
+		<method name="registerOutParameter(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V" />
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9" />
+		<method name="setBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V" />
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V" />
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9" />
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9" />
+		<method name="setBlob(Ljava/lang/String;Ljava/sql/Blob;)V" since="9" />
+		<method name="setBoolean(Ljava/lang/String;Z)V" />
+		<method name="setByte(Ljava/lang/String;B)V" />
+		<method name="setBytes(Ljava/lang/String;[B)V" />
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V" />
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="setClob(Ljava/lang/String;Ljava/sql/Clob;)V" since="9" />
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;)V" />
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;Ljava/util/Calendar;)V" />
+		<method name="setDouble(Ljava/lang/String;D)V" />
+		<method name="setFloat(Ljava/lang/String;F)V" />
+		<method name="setInt(Ljava/lang/String;I)V" />
+		<method name="setLong(Ljava/lang/String;J)V" />
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="setNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9" />
+		<method name="setNString(Ljava/lang/String;Ljava/lang/String;)V" since="9" />
+		<method name="setNull(Ljava/lang/String;I)V" />
+		<method name="setNull(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;I)V" />
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;II)V" />
+		<method name="setRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9" />
+		<method name="setSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9" />
+		<method name="setShort(Ljava/lang/String;S)V" />
+		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;)V" />
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;Ljava/util/Calendar;)V" />
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V" />
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;Ljava/util/Calendar;)V" />
+		<method name="setURL(Ljava/lang/String;Ljava/net/URL;)V" />
+		<method name="wasNull()Z" />
+	</class>
+	<class name="java/sql/ClientInfoStatus" since="9">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/ClientInfoStatus;" />
+		<method name="values()[Ljava/sql/ClientInfoStatus;" />
+		<field name="REASON_UNKNOWN" />
+		<field name="REASON_UNKNOWN_PROPERTY" />
+		<field name="REASON_VALUE_INVALID" />
+		<field name="REASON_VALUE_TRUNCATED" />
+	</class>
+	<class name="java/sql/Clob" since="1">
+		<extends name="java/lang/Object" />
+		<method name="free()V" since="9" />
+		<method name="getAsciiStream()Ljava/io/InputStream;" />
+		<method name="getCharacterStream()Ljava/io/Reader;" />
+		<method name="getCharacterStream(JJ)Ljava/io/Reader;" since="9" />
+		<method name="getSubString(JI)Ljava/lang/String;" />
+		<method name="length()J" />
+		<method name="position(Ljava/lang/String;J)J" />
+		<method name="position(Ljava/sql/Clob;J)J" />
+		<method name="setAsciiStream(J)Ljava/io/OutputStream;" />
+		<method name="setCharacterStream(J)Ljava/io/Writer;" />
+		<method name="setString(JLjava/lang/String;)I" />
+		<method name="setString(JLjava/lang/String;II)I" />
+		<method name="truncate(J)V" />
+	</class>
+	<class name="java/sql/Connection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<implements name="java/sql/Wrapper" since="9" />
+		<method name="clearWarnings()V" />
+		<method name="close()V" />
+		<method name="commit()V" />
+		<method name="createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;" since="9" />
+		<method name="createBlob()Ljava/sql/Blob;" since="9" />
+		<method name="createClob()Ljava/sql/Clob;" since="9" />
+		<method name="createNClob()Ljava/sql/NClob;" since="9" />
+		<method name="createSQLXML()Ljava/sql/SQLXML;" since="9" />
+		<method name="createStatement()Ljava/sql/Statement;" />
+		<method name="createStatement(II)Ljava/sql/Statement;" />
+		<method name="createStatement(III)Ljava/sql/Statement;" />
+		<method name="createStruct(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Struct;" since="9" />
+		<method name="getAutoCommit()Z" />
+		<method name="getCatalog()Ljava/lang/String;" />
+		<method name="getClientInfo()Ljava/util/Properties;" since="9" />
+		<method name="getClientInfo(Ljava/lang/String;)Ljava/lang/String;" since="9" />
+		<method name="getHoldability()I" />
+		<method name="getMetaData()Ljava/sql/DatabaseMetaData;" />
+		<method name="getTransactionIsolation()I" />
+		<method name="getTypeMap()Ljava/util/Map;" />
+		<method name="getWarnings()Ljava/sql/SQLWarning;" />
+		<method name="isClosed()Z" />
+		<method name="isReadOnly()Z" />
+		<method name="isValid(I)Z" since="9" />
+		<method name="nativeSQL(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="prepareCall(Ljava/lang/String;)Ljava/sql/CallableStatement;" />
+		<method name="prepareCall(Ljava/lang/String;II)Ljava/sql/CallableStatement;" />
+		<method name="prepareCall(Ljava/lang/String;III)Ljava/sql/CallableStatement;" />
+		<method name="prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;" />
+		<method name="prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;" />
+		<method name="prepareStatement(Ljava/lang/String;II)Ljava/sql/PreparedStatement;" />
+		<method name="prepareStatement(Ljava/lang/String;III)Ljava/sql/PreparedStatement;" />
+		<method name="prepareStatement(Ljava/lang/String;[I)Ljava/sql/PreparedStatement;" />
+		<method name="prepareStatement(Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/PreparedStatement;" />
+		<method name="releaseSavepoint(Ljava/sql/Savepoint;)V" />
+		<method name="rollback()V" />
+		<method name="rollback(Ljava/sql/Savepoint;)V" />
+		<method name="setAutoCommit(Z)V" />
+		<method name="setCatalog(Ljava/lang/String;)V" />
+		<method name="setClientInfo(Ljava/lang/String;Ljava/lang/String;)V" since="9" />
+		<method name="setClientInfo(Ljava/util/Properties;)V" since="9" />
+		<method name="setHoldability(I)V" />
+		<method name="setReadOnly(Z)V" />
+		<method name="setSavepoint()Ljava/sql/Savepoint;" />
+		<method name="setSavepoint(Ljava/lang/String;)Ljava/sql/Savepoint;" />
+		<method name="setTransactionIsolation(I)V" />
+		<method name="setTypeMap(Ljava/util/Map;)V" />
+		<field name="TRANSACTION_NONE" />
+		<field name="TRANSACTION_READ_COMMITTED" />
+		<field name="TRANSACTION_READ_UNCOMMITTED" />
+		<field name="TRANSACTION_REPEATABLE_READ" />
+		<field name="TRANSACTION_SERIALIZABLE" />
+	</class>
+	<class name="java/sql/DataTruncation" since="1">
+		<extends name="java/sql/SQLWarning" />
+		<method name="&lt;init&gt;(IZZII)V" />
+		<method name="&lt;init&gt;(IZZIILjava/lang/Throwable;)V" since="9" />
+		<method name="getDataSize()I" />
+		<method name="getIndex()I" />
+		<method name="getParameter()Z" />
+		<method name="getRead()Z" />
+		<method name="getTransferSize()I" />
+	</class>
+	<class name="java/sql/DatabaseMetaData" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/Wrapper" since="9" />
+		<method name="allProceduresAreCallable()Z" />
+		<method name="allTablesAreSelectable()Z" />
+		<method name="autoCommitFailureClosesAllResultSets()Z" since="9" />
+		<method name="dataDefinitionCausesTransactionCommit()Z" />
+		<method name="dataDefinitionIgnoredInTransactions()Z" />
+		<method name="deletesAreDetected(I)Z" />
+		<method name="doesMaxRowSizeIncludeBlobs()Z" />
+		<method name="getAttributes(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getBestRowIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)Ljava/sql/ResultSet;" />
+		<method name="getCatalogSeparator()Ljava/lang/String;" />
+		<method name="getCatalogTerm()Ljava/lang/String;" />
+		<method name="getCatalogs()Ljava/sql/ResultSet;" />
+		<method name="getClientInfoProperties()Ljava/sql/ResultSet;" since="9" />
+		<method name="getColumnPrivileges(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getConnection()Ljava/sql/Connection;" />
+		<method name="getCrossReference(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getDatabaseMajorVersion()I" />
+		<method name="getDatabaseMinorVersion()I" />
+		<method name="getDatabaseProductName()Ljava/lang/String;" />
+		<method name="getDatabaseProductVersion()Ljava/lang/String;" />
+		<method name="getDefaultTransactionIsolation()I" />
+		<method name="getDriverMajorVersion()I" />
+		<method name="getDriverMinorVersion()I" />
+		<method name="getDriverName()Ljava/lang/String;" />
+		<method name="getDriverVersion()Ljava/lang/String;" />
+		<method name="getExportedKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getExtraNameCharacters()Ljava/lang/String;" />
+		<method name="getFunctionColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9" />
+		<method name="getFunctions(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9" />
+		<method name="getIdentifierQuoteString()Ljava/lang/String;" />
+		<method name="getImportedKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getIndexInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/sql/ResultSet;" />
+		<method name="getJDBCMajorVersion()I" />
+		<method name="getJDBCMinorVersion()I" />
+		<method name="getMaxBinaryLiteralLength()I" />
+		<method name="getMaxCatalogNameLength()I" />
+		<method name="getMaxCharLiteralLength()I" />
+		<method name="getMaxColumnNameLength()I" />
+		<method name="getMaxColumnsInGroupBy()I" />
+		<method name="getMaxColumnsInIndex()I" />
+		<method name="getMaxColumnsInOrderBy()I" />
+		<method name="getMaxColumnsInSelect()I" />
+		<method name="getMaxColumnsInTable()I" />
+		<method name="getMaxConnections()I" />
+		<method name="getMaxCursorNameLength()I" />
+		<method name="getMaxIndexLength()I" />
+		<method name="getMaxProcedureNameLength()I" />
+		<method name="getMaxRowSize()I" />
+		<method name="getMaxSchemaNameLength()I" />
+		<method name="getMaxStatementLength()I" />
+		<method name="getMaxStatements()I" />
+		<method name="getMaxTableNameLength()I" />
+		<method name="getMaxTablesInSelect()I" />
+		<method name="getMaxUserNameLength()I" />
+		<method name="getNumericFunctions()Ljava/lang/String;" />
+		<method name="getPrimaryKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getProcedureColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getProcedureTerm()Ljava/lang/String;" />
+		<method name="getProcedures(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getResultSetHoldability()I" />
+		<method name="getRowIdLifetime()Ljava/sql/RowIdLifetime;" since="9" />
+		<method name="getSQLKeywords()Ljava/lang/String;" />
+		<method name="getSQLStateType()I" />
+		<method name="getSchemaTerm()Ljava/lang/String;" />
+		<method name="getSchemas()Ljava/sql/ResultSet;" />
+		<method name="getSchemas(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9" />
+		<method name="getSearchStringEscape()Ljava/lang/String;" />
+		<method name="getStringFunctions()Ljava/lang/String;" />
+		<method name="getSuperTables(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getSuperTypes(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getSystemFunctions()Ljava/lang/String;" />
+		<method name="getTablePrivileges(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getTableTypes()Ljava/sql/ResultSet;" />
+		<method name="getTables(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="getTimeDateFunctions()Ljava/lang/String;" />
+		<method name="getTypeInfo()Ljava/sql/ResultSet;" />
+		<method name="getUDTs(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[I)Ljava/sql/ResultSet;" />
+		<method name="getURL()Ljava/lang/String;" />
+		<method name="getUserName()Ljava/lang/String;" />
+		<method name="getVersionColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="insertsAreDetected(I)Z" />
+		<method name="isCatalogAtStart()Z" />
+		<method name="isReadOnly()Z" />
+		<method name="locatorsUpdateCopy()Z" />
+		<method name="nullPlusNonNullIsNull()Z" />
+		<method name="nullsAreSortedAtEnd()Z" />
+		<method name="nullsAreSortedAtStart()Z" />
+		<method name="nullsAreSortedHigh()Z" />
+		<method name="nullsAreSortedLow()Z" />
+		<method name="othersDeletesAreVisible(I)Z" />
+		<method name="othersInsertsAreVisible(I)Z" />
+		<method name="othersUpdatesAreVisible(I)Z" />
+		<method name="ownDeletesAreVisible(I)Z" />
+		<method name="ownInsertsAreVisible(I)Z" />
+		<method name="ownUpdatesAreVisible(I)Z" />
+		<method name="storesLowerCaseIdentifiers()Z" />
+		<method name="storesLowerCaseQuotedIdentifiers()Z" />
+		<method name="storesMixedCaseIdentifiers()Z" />
+		<method name="storesMixedCaseQuotedIdentifiers()Z" />
+		<method name="storesUpperCaseIdentifiers()Z" />
+		<method name="storesUpperCaseQuotedIdentifiers()Z" />
+		<method name="supportsANSI92EntryLevelSQL()Z" />
+		<method name="supportsANSI92FullSQL()Z" />
+		<method name="supportsANSI92IntermediateSQL()Z" />
+		<method name="supportsAlterTableWithAddColumn()Z" />
+		<method name="supportsAlterTableWithDropColumn()Z" />
+		<method name="supportsBatchUpdates()Z" />
+		<method name="supportsCatalogsInDataManipulation()Z" />
+		<method name="supportsCatalogsInIndexDefinitions()Z" />
+		<method name="supportsCatalogsInPrivilegeDefinitions()Z" />
+		<method name="supportsCatalogsInProcedureCalls()Z" />
+		<method name="supportsCatalogsInTableDefinitions()Z" />
+		<method name="supportsColumnAliasing()Z" />
+		<method name="supportsConvert()Z" />
+		<method name="supportsConvert(II)Z" />
+		<method name="supportsCoreSQLGrammar()Z" />
+		<method name="supportsCorrelatedSubqueries()Z" />
+		<method name="supportsDataDefinitionAndDataManipulationTransactions()Z" />
+		<method name="supportsDataManipulationTransactionsOnly()Z" />
+		<method name="supportsDifferentTableCorrelationNames()Z" />
+		<method name="supportsExpressionsInOrderBy()Z" />
+		<method name="supportsExtendedSQLGrammar()Z" />
+		<method name="supportsFullOuterJoins()Z" />
+		<method name="supportsGetGeneratedKeys()Z" />
+		<method name="supportsGroupBy()Z" />
+		<method name="supportsGroupByBeyondSelect()Z" />
+		<method name="supportsGroupByUnrelated()Z" />
+		<method name="supportsIntegrityEnhancementFacility()Z" />
+		<method name="supportsLikeEscapeClause()Z" />
+		<method name="supportsLimitedOuterJoins()Z" />
+		<method name="supportsMinimumSQLGrammar()Z" />
+		<method name="supportsMixedCaseIdentifiers()Z" />
+		<method name="supportsMixedCaseQuotedIdentifiers()Z" />
+		<method name="supportsMultipleOpenResults()Z" />
+		<method name="supportsMultipleResultSets()Z" />
+		<method name="supportsMultipleTransactions()Z" />
+		<method name="supportsNamedParameters()Z" />
+		<method name="supportsNonNullableColumns()Z" />
+		<method name="supportsOpenCursorsAcrossCommit()Z" />
+		<method name="supportsOpenCursorsAcrossRollback()Z" />
+		<method name="supportsOpenStatementsAcrossCommit()Z" />
+		<method name="supportsOpenStatementsAcrossRollback()Z" />
+		<method name="supportsOrderByUnrelated()Z" />
+		<method name="supportsOuterJoins()Z" />
+		<method name="supportsPositionedDelete()Z" />
+		<method name="supportsPositionedUpdate()Z" />
+		<method name="supportsResultSetConcurrency(II)Z" />
+		<method name="supportsResultSetHoldability(I)Z" />
+		<method name="supportsResultSetType(I)Z" />
+		<method name="supportsSavepoints()Z" />
+		<method name="supportsSchemasInDataManipulation()Z" />
+		<method name="supportsSchemasInIndexDefinitions()Z" />
+		<method name="supportsSchemasInPrivilegeDefinitions()Z" />
+		<method name="supportsSchemasInProcedureCalls()Z" />
+		<method name="supportsSchemasInTableDefinitions()Z" />
+		<method name="supportsSelectForUpdate()Z" />
+		<method name="supportsStatementPooling()Z" />
+		<method name="supportsStoredFunctionsUsingCallSyntax()Z" since="9" />
+		<method name="supportsStoredProcedures()Z" />
+		<method name="supportsSubqueriesInComparisons()Z" />
+		<method name="supportsSubqueriesInExists()Z" />
+		<method name="supportsSubqueriesInIns()Z" />
+		<method name="supportsSubqueriesInQuantifieds()Z" />
+		<method name="supportsTableCorrelationNames()Z" />
+		<method name="supportsTransactionIsolationLevel(I)Z" />
+		<method name="supportsTransactions()Z" />
+		<method name="supportsUnion()Z" />
+		<method name="supportsUnionAll()Z" />
+		<method name="updatesAreDetected(I)Z" />
+		<method name="usesLocalFilePerTable()Z" />
+		<method name="usesLocalFiles()Z" />
+		<field name="attributeNoNulls" />
+		<field name="attributeNullable" />
+		<field name="attributeNullableUnknown" />
+		<field name="bestRowNotPseudo" />
+		<field name="bestRowPseudo" />
+		<field name="bestRowSession" />
+		<field name="bestRowTemporary" />
+		<field name="bestRowTransaction" />
+		<field name="bestRowUnknown" />
+		<field name="columnNoNulls" />
+		<field name="columnNullable" />
+		<field name="columnNullableUnknown" />
+		<field name="functionColumnIn" since="9" />
+		<field name="functionColumnInOut" since="9" />
+		<field name="functionColumnOut" since="9" />
+		<field name="functionColumnResult" since="9" />
+		<field name="functionColumnUnknown" since="9" />
+		<field name="functionNoNulls" since="9" />
+		<field name="functionNoTable" since="9" />
+		<field name="functionNullable" since="9" />
+		<field name="functionNullableUnknown" since="9" />
+		<field name="functionResultUnknown" since="9" />
+		<field name="functionReturn" since="9" />
+		<field name="functionReturnsTable" since="9" />
+		<field name="importedKeyCascade" />
+		<field name="importedKeyInitiallyDeferred" />
+		<field name="importedKeyInitiallyImmediate" />
+		<field name="importedKeyNoAction" />
+		<field name="importedKeyNotDeferrable" />
+		<field name="importedKeyRestrict" />
+		<field name="importedKeySetDefault" />
+		<field name="importedKeySetNull" />
+		<field name="procedureColumnIn" />
+		<field name="procedureColumnInOut" />
+		<field name="procedureColumnOut" />
+		<field name="procedureColumnResult" />
+		<field name="procedureColumnReturn" />
+		<field name="procedureColumnUnknown" />
+		<field name="procedureNoNulls" />
+		<field name="procedureNoResult" />
+		<field name="procedureNullable" />
+		<field name="procedureNullableUnknown" />
+		<field name="procedureResultUnknown" />
+		<field name="procedureReturnsResult" />
+		<field name="sqlStateSQL" since="9" />
+		<field name="sqlStateSQL99" />
+		<field name="sqlStateXOpen" />
+		<field name="tableIndexClustered" />
+		<field name="tableIndexHashed" />
+		<field name="tableIndexOther" />
+		<field name="tableIndexStatistic" />
+		<field name="typeNoNulls" />
+		<field name="typeNullable" />
+		<field name="typeNullableUnknown" />
+		<field name="typePredBasic" />
+		<field name="typePredChar" />
+		<field name="typePredNone" />
+		<field name="typeSearchable" />
+		<field name="versionColumnNotPseudo" />
+		<field name="versionColumnPseudo" />
+		<field name="versionColumnUnknown" />
+	</class>
+	<class name="java/sql/Date" since="1">
+		<extends name="java/util/Date" />
+		<method name="&lt;init&gt;(III)V" deprecated="15" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Date;" />
+	</class>
+	<class name="java/sql/Driver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="acceptsURL(Ljava/lang/String;)Z" />
+		<method name="connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;" />
+		<method name="getMajorVersion()I" />
+		<method name="getMinorVersion()I" />
+		<method name="getPropertyInfo(Ljava/lang/String;Ljava/util/Properties;)[Ljava/sql/DriverPropertyInfo;" />
+		<method name="jdbcCompliant()Z" />
+	</class>
+	<class name="java/sql/DriverManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="deregisterDriver(Ljava/sql/Driver;)V" />
+		<method name="getConnection(Ljava/lang/String;)Ljava/sql/Connection;" />
+		<method name="getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;" />
+		<method name="getConnection(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;" />
+		<method name="getDriver(Ljava/lang/String;)Ljava/sql/Driver;" />
+		<method name="getDrivers()Ljava/util/Enumeration;" />
+		<method name="getLogStream()Ljava/io/PrintStream;" deprecated="15" />
+		<method name="getLogWriter()Ljava/io/PrintWriter;" />
+		<method name="getLoginTimeout()I" />
+		<method name="println(Ljava/lang/String;)V" />
+		<method name="registerDriver(Ljava/sql/Driver;)V" />
+		<method name="setLogStream(Ljava/io/PrintStream;)V" deprecated="15" />
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V" />
+		<method name="setLoginTimeout(I)V" />
+	</class>
+	<class name="java/sql/DriverPropertyInfo" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="choices" />
+		<field name="description" />
+		<field name="name" />
+		<field name="required" />
+		<field name="value" />
+	</class>
+	<class name="java/sql/NClob" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/Clob" />
+	</class>
+	<class name="java/sql/ParameterMetaData" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/Wrapper" since="9" />
+		<method name="getParameterClassName(I)Ljava/lang/String;" />
+		<method name="getParameterCount()I" />
+		<method name="getParameterMode(I)I" />
+		<method name="getParameterType(I)I" />
+		<method name="getParameterTypeName(I)Ljava/lang/String;" />
+		<method name="getPrecision(I)I" />
+		<method name="getScale(I)I" />
+		<method name="isNullable(I)I" />
+		<method name="isSigned(I)Z" />
+		<field name="parameterModeIn" />
+		<field name="parameterModeInOut" />
+		<field name="parameterModeOut" />
+		<field name="parameterModeUnknown" />
+		<field name="parameterNoNulls" />
+		<field name="parameterNullable" />
+		<field name="parameterNullableUnknown" />
+	</class>
+	<class name="java/sql/PreparedStatement" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/Statement" />
+		<method name="addBatch()V" />
+		<method name="clearParameters()V" />
+		<method name="execute()Z" />
+		<method name="executeQuery()Ljava/sql/ResultSet;" />
+		<method name="executeUpdate()I" />
+		<method name="getMetaData()Ljava/sql/ResultSetMetaData;" />
+		<method name="getParameterMetaData()Ljava/sql/ParameterMetaData;" />
+		<method name="setArray(ILjava/sql/Array;)V" />
+		<method name="setAsciiStream(ILjava/io/InputStream;)V" since="9" />
+		<method name="setAsciiStream(ILjava/io/InputStream;I)V" />
+		<method name="setAsciiStream(ILjava/io/InputStream;J)V" since="9" />
+		<method name="setBigDecimal(ILjava/math/BigDecimal;)V" />
+		<method name="setBinaryStream(ILjava/io/InputStream;)V" since="9" />
+		<method name="setBinaryStream(ILjava/io/InputStream;I)V" />
+		<method name="setBinaryStream(ILjava/io/InputStream;J)V" since="9" />
+		<method name="setBlob(ILjava/io/InputStream;)V" since="9" />
+		<method name="setBlob(ILjava/io/InputStream;J)V" since="9" />
+		<method name="setBlob(ILjava/sql/Blob;)V" />
+		<method name="setBoolean(IZ)V" />
+		<method name="setByte(IB)V" />
+		<method name="setBytes(I[B)V" />
+		<method name="setCharacterStream(ILjava/io/Reader;)V" since="9" />
+		<method name="setCharacterStream(ILjava/io/Reader;I)V" />
+		<method name="setCharacterStream(ILjava/io/Reader;J)V" since="9" />
+		<method name="setClob(ILjava/io/Reader;)V" since="9" />
+		<method name="setClob(ILjava/io/Reader;J)V" since="9" />
+		<method name="setClob(ILjava/sql/Clob;)V" />
+		<method name="setDate(ILjava/sql/Date;)V" />
+		<method name="setDate(ILjava/sql/Date;Ljava/util/Calendar;)V" />
+		<method name="setDouble(ID)V" />
+		<method name="setFloat(IF)V" />
+		<method name="setInt(II)V" />
+		<method name="setLong(IJ)V" />
+		<method name="setNCharacterStream(ILjava/io/Reader;)V" since="9" />
+		<method name="setNCharacterStream(ILjava/io/Reader;J)V" since="9" />
+		<method name="setNClob(ILjava/io/Reader;)V" since="9" />
+		<method name="setNClob(ILjava/io/Reader;J)V" since="9" />
+		<method name="setNClob(ILjava/sql/NClob;)V" since="9" />
+		<method name="setNString(ILjava/lang/String;)V" since="9" />
+		<method name="setNull(II)V" />
+		<method name="setNull(IILjava/lang/String;)V" />
+		<method name="setObject(ILjava/lang/Object;)V" />
+		<method name="setObject(ILjava/lang/Object;I)V" />
+		<method name="setObject(ILjava/lang/Object;II)V" />
+		<method name="setRef(ILjava/sql/Ref;)V" />
+		<method name="setRowId(ILjava/sql/RowId;)V" since="9" />
+		<method name="setSQLXML(ILjava/sql/SQLXML;)V" since="9" />
+		<method name="setShort(IS)V" />
+		<method name="setString(ILjava/lang/String;)V" />
+		<method name="setTime(ILjava/sql/Time;)V" />
+		<method name="setTime(ILjava/sql/Time;Ljava/util/Calendar;)V" />
+		<method name="setTimestamp(ILjava/sql/Timestamp;)V" />
+		<method name="setTimestamp(ILjava/sql/Timestamp;Ljava/util/Calendar;)V" />
+		<method name="setURL(ILjava/net/URL;)V" />
+		<method name="setUnicodeStream(ILjava/io/InputStream;I)V" deprecated="15" />
+	</class>
+	<class name="java/sql/Ref" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getBaseTypeName()Ljava/lang/String;" />
+		<method name="getObject()Ljava/lang/Object;" />
+		<method name="getObject(Ljava/util/Map;)Ljava/lang/Object;" />
+		<method name="setObject(Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/sql/ResultSet" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<implements name="java/sql/Wrapper" since="9" />
+		<method name="absolute(I)Z" />
+		<method name="afterLast()V" />
+		<method name="beforeFirst()V" />
+		<method name="cancelRowUpdates()V" />
+		<method name="clearWarnings()V" />
+		<method name="close()V" />
+		<method name="deleteRow()V" />
+		<method name="findColumn(Ljava/lang/String;)I" />
+		<method name="first()Z" />
+		<method name="getArray(I)Ljava/sql/Array;" />
+		<method name="getArray(Ljava/lang/String;)Ljava/sql/Array;" />
+		<method name="getAsciiStream(I)Ljava/io/InputStream;" />
+		<method name="getAsciiStream(Ljava/lang/String;)Ljava/io/InputStream;" />
+		<method name="getBigDecimal(I)Ljava/math/BigDecimal;" />
+		<method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="15" />
+		<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;" />
+		<method name="getBigDecimal(Ljava/lang/String;I)Ljava/math/BigDecimal;" deprecated="15" />
+		<method name="getBinaryStream(I)Ljava/io/InputStream;" />
+		<method name="getBinaryStream(Ljava/lang/String;)Ljava/io/InputStream;" />
+		<method name="getBlob(I)Ljava/sql/Blob;" />
+		<method name="getBlob(Ljava/lang/String;)Ljava/sql/Blob;" />
+		<method name="getBoolean(I)Z" />
+		<method name="getBoolean(Ljava/lang/String;)Z" />
+		<method name="getByte(I)B" />
+		<method name="getByte(Ljava/lang/String;)B" />
+		<method name="getBytes(I)[B" />
+		<method name="getBytes(Ljava/lang/String;)[B" />
+		<method name="getCharacterStream(I)Ljava/io/Reader;" />
+		<method name="getCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" />
+		<method name="getClob(I)Ljava/sql/Clob;" />
+		<method name="getClob(Ljava/lang/String;)Ljava/sql/Clob;" />
+		<method name="getConcurrency()I" />
+		<method name="getCursorName()Ljava/lang/String;" />
+		<method name="getDate(I)Ljava/sql/Date;" />
+		<method name="getDate(ILjava/util/Calendar;)Ljava/sql/Date;" />
+		<method name="getDate(Ljava/lang/String;)Ljava/sql/Date;" />
+		<method name="getDate(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Date;" />
+		<method name="getDouble(I)D" />
+		<method name="getDouble(Ljava/lang/String;)D" />
+		<method name="getFetchDirection()I" />
+		<method name="getFetchSize()I" />
+		<method name="getFloat(I)F" />
+		<method name="getFloat(Ljava/lang/String;)F" />
+		<method name="getHoldability()I" since="9" />
+		<method name="getInt(I)I" />
+		<method name="getInt(Ljava/lang/String;)I" />
+		<method name="getLong(I)J" />
+		<method name="getLong(Ljava/lang/String;)J" />
+		<method name="getMetaData()Ljava/sql/ResultSetMetaData;" />
+		<method name="getNCharacterStream(I)Ljava/io/Reader;" since="9" />
+		<method name="getNCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9" />
+		<method name="getNClob(I)Ljava/sql/NClob;" since="9" />
+		<method name="getNClob(Ljava/lang/String;)Ljava/sql/NClob;" since="9" />
+		<method name="getNString(I)Ljava/lang/String;" since="9" />
+		<method name="getNString(Ljava/lang/String;)Ljava/lang/String;" since="9" />
+		<method name="getObject(I)Ljava/lang/Object;" />
+		<method name="getObject(ILjava/util/Map;)Ljava/lang/Object;" />
+		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getObject(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/Object;" />
+		<method name="getRef(I)Ljava/sql/Ref;" />
+		<method name="getRef(Ljava/lang/String;)Ljava/sql/Ref;" />
+		<method name="getRow()I" />
+		<method name="getRowId(I)Ljava/sql/RowId;" since="9" />
+		<method name="getRowId(Ljava/lang/String;)Ljava/sql/RowId;" since="9" />
+		<method name="getSQLXML(I)Ljava/sql/SQLXML;" since="9" />
+		<method name="getSQLXML(Ljava/lang/String;)Ljava/sql/SQLXML;" since="9" />
+		<method name="getShort(I)S" />
+		<method name="getShort(Ljava/lang/String;)S" />
+		<method name="getStatement()Ljava/sql/Statement;" />
+		<method name="getString(I)Ljava/lang/String;" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getTime(I)Ljava/sql/Time;" />
+		<method name="getTime(ILjava/util/Calendar;)Ljava/sql/Time;" />
+		<method name="getTime(Ljava/lang/String;)Ljava/sql/Time;" />
+		<method name="getTime(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Time;" />
+		<method name="getTimestamp(I)Ljava/sql/Timestamp;" />
+		<method name="getTimestamp(ILjava/util/Calendar;)Ljava/sql/Timestamp;" />
+		<method name="getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;" />
+		<method name="getTimestamp(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Timestamp;" />
+		<method name="getType()I" />
+		<method name="getURL(I)Ljava/net/URL;" />
+		<method name="getURL(Ljava/lang/String;)Ljava/net/URL;" />
+		<method name="getUnicodeStream(I)Ljava/io/InputStream;" deprecated="15" />
+		<method name="getUnicodeStream(Ljava/lang/String;)Ljava/io/InputStream;" deprecated="15" />
+		<method name="getWarnings()Ljava/sql/SQLWarning;" />
+		<method name="insertRow()V" />
+		<method name="isAfterLast()Z" />
+		<method name="isBeforeFirst()Z" />
+		<method name="isClosed()Z" since="9" />
+		<method name="isFirst()Z" />
+		<method name="isLast()Z" />
+		<method name="last()Z" />
+		<method name="moveToCurrentRow()V" />
+		<method name="moveToInsertRow()V" />
+		<method name="next()Z" />
+		<method name="previous()Z" />
+		<method name="refreshRow()V" />
+		<method name="relative(I)Z" />
+		<method name="rowDeleted()Z" />
+		<method name="rowInserted()Z" />
+		<method name="rowUpdated()Z" />
+		<method name="setFetchDirection(I)V" />
+		<method name="setFetchSize(I)V" />
+		<method name="updateArray(ILjava/sql/Array;)V" />
+		<method name="updateArray(Ljava/lang/String;Ljava/sql/Array;)V" />
+		<method name="updateAsciiStream(ILjava/io/InputStream;)V" since="9" />
+		<method name="updateAsciiStream(ILjava/io/InputStream;I)V" />
+		<method name="updateAsciiStream(ILjava/io/InputStream;J)V" since="9" />
+		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V" />
+		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9" />
+		<method name="updateBigDecimal(ILjava/math/BigDecimal;)V" />
+		<method name="updateBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V" />
+		<method name="updateBinaryStream(ILjava/io/InputStream;)V" since="9" />
+		<method name="updateBinaryStream(ILjava/io/InputStream;I)V" />
+		<method name="updateBinaryStream(ILjava/io/InputStream;J)V" since="9" />
+		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V" />
+		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9" />
+		<method name="updateBlob(ILjava/io/InputStream;)V" since="9" />
+		<method name="updateBlob(ILjava/io/InputStream;J)V" since="9" />
+		<method name="updateBlob(ILjava/sql/Blob;)V" />
+		<method name="updateBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="updateBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9" />
+		<method name="updateBlob(Ljava/lang/String;Ljava/sql/Blob;)V" />
+		<method name="updateBoolean(IZ)V" />
+		<method name="updateBoolean(Ljava/lang/String;Z)V" />
+		<method name="updateByte(IB)V" />
+		<method name="updateByte(Ljava/lang/String;B)V" />
+		<method name="updateBytes(I[B)V" />
+		<method name="updateBytes(Ljava/lang/String;[B)V" />
+		<method name="updateCharacterStream(ILjava/io/Reader;)V" since="9" />
+		<method name="updateCharacterStream(ILjava/io/Reader;I)V" />
+		<method name="updateCharacterStream(ILjava/io/Reader;J)V" since="9" />
+		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V" />
+		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="updateClob(ILjava/io/Reader;)V" since="9" />
+		<method name="updateClob(ILjava/io/Reader;J)V" since="9" />
+		<method name="updateClob(ILjava/sql/Clob;)V" />
+		<method name="updateClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="updateClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="updateClob(Ljava/lang/String;Ljava/sql/Clob;)V" />
+		<method name="updateDate(ILjava/sql/Date;)V" />
+		<method name="updateDate(Ljava/lang/String;Ljava/sql/Date;)V" />
+		<method name="updateDouble(ID)V" />
+		<method name="updateDouble(Ljava/lang/String;D)V" />
+		<method name="updateFloat(IF)V" />
+		<method name="updateFloat(Ljava/lang/String;F)V" />
+		<method name="updateInt(II)V" />
+		<method name="updateInt(Ljava/lang/String;I)V" />
+		<method name="updateLong(IJ)V" />
+		<method name="updateLong(Ljava/lang/String;J)V" />
+		<method name="updateNCharacterStream(ILjava/io/Reader;)V" since="9" />
+		<method name="updateNCharacterStream(ILjava/io/Reader;J)V" since="9" />
+		<method name="updateNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="updateNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="updateNClob(ILjava/io/Reader;)V" since="9" />
+		<method name="updateNClob(ILjava/io/Reader;J)V" since="9" />
+		<method name="updateNClob(ILjava/sql/NClob;)V" since="9" />
+		<method name="updateNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="updateNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="updateNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9" />
+		<method name="updateNString(ILjava/lang/String;)V" since="9" />
+		<method name="updateNString(Ljava/lang/String;Ljava/lang/String;)V" since="9" />
+		<method name="updateNull(I)V" />
+		<method name="updateNull(Ljava/lang/String;)V" />
+		<method name="updateObject(ILjava/lang/Object;)V" />
+		<method name="updateObject(ILjava/lang/Object;I)V" />
+		<method name="updateObject(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="updateObject(Ljava/lang/String;Ljava/lang/Object;I)V" />
+		<method name="updateRef(ILjava/sql/Ref;)V" />
+		<method name="updateRef(Ljava/lang/String;Ljava/sql/Ref;)V" />
+		<method name="updateRow()V" />
+		<method name="updateRowId(ILjava/sql/RowId;)V" since="9" />
+		<method name="updateRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9" />
+		<method name="updateSQLXML(ILjava/sql/SQLXML;)V" since="9" />
+		<method name="updateSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9" />
+		<method name="updateShort(IS)V" />
+		<method name="updateShort(Ljava/lang/String;S)V" />
+		<method name="updateString(ILjava/lang/String;)V" />
+		<method name="updateString(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="updateTime(ILjava/sql/Time;)V" />
+		<method name="updateTime(Ljava/lang/String;Ljava/sql/Time;)V" />
+		<method name="updateTimestamp(ILjava/sql/Timestamp;)V" />
+		<method name="updateTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V" />
+		<method name="wasNull()Z" />
+		<field name="CLOSE_CURSORS_AT_COMMIT" />
+		<field name="CONCUR_READ_ONLY" />
+		<field name="CONCUR_UPDATABLE" />
+		<field name="FETCH_FORWARD" />
+		<field name="FETCH_REVERSE" />
+		<field name="FETCH_UNKNOWN" />
+		<field name="HOLD_CURSORS_OVER_COMMIT" />
+		<field name="TYPE_FORWARD_ONLY" />
+		<field name="TYPE_SCROLL_INSENSITIVE" />
+		<field name="TYPE_SCROLL_SENSITIVE" />
+	</class>
+	<class name="java/sql/ResultSetMetaData" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/Wrapper" since="9" />
+		<method name="getCatalogName(I)Ljava/lang/String;" />
+		<method name="getColumnClassName(I)Ljava/lang/String;" />
+		<method name="getColumnCount()I" />
+		<method name="getColumnDisplaySize(I)I" />
+		<method name="getColumnLabel(I)Ljava/lang/String;" />
+		<method name="getColumnName(I)Ljava/lang/String;" />
+		<method name="getColumnType(I)I" />
+		<method name="getColumnTypeName(I)Ljava/lang/String;" />
+		<method name="getPrecision(I)I" />
+		<method name="getScale(I)I" />
+		<method name="getSchemaName(I)Ljava/lang/String;" />
+		<method name="getTableName(I)Ljava/lang/String;" />
+		<method name="isAutoIncrement(I)Z" />
+		<method name="isCaseSensitive(I)Z" />
+		<method name="isCurrency(I)Z" />
+		<method name="isDefinitelyWritable(I)Z" />
+		<method name="isNullable(I)I" />
+		<method name="isReadOnly(I)Z" />
+		<method name="isSearchable(I)Z" />
+		<method name="isSigned(I)Z" />
+		<method name="isWritable(I)Z" />
+		<field name="columnNoNulls" />
+		<field name="columnNullable" />
+		<field name="columnNullableUnknown" />
+	</class>
+	<class name="java/sql/RowId" since="9">
+		<extends name="java/lang/Object" />
+		<method name="getBytes()[B" />
+	</class>
+	<class name="java/sql/RowIdLifetime" since="9">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/RowIdLifetime;" />
+		<method name="values()[Ljava/sql/RowIdLifetime;" />
+		<field name="ROWID_UNSUPPORTED" />
+		<field name="ROWID_VALID_FOREVER" />
+		<field name="ROWID_VALID_OTHER" />
+		<field name="ROWID_VALID_SESSION" />
+		<field name="ROWID_VALID_TRANSACTION" />
+	</class>
+	<class name="java/sql/SQLClientInfoException" since="9">
+		<extends name="java/sql/SQLException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/Map;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/Map;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;Ljava/lang/Throwable;)V" />
+		<method name="getFailedProperties()Ljava/util/Map;" />
+	</class>
+	<class name="java/sql/SQLData" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getSQLTypeName()Ljava/lang/String;" />
+		<method name="readSQL(Ljava/sql/SQLInput;Ljava/lang/String;)V" />
+		<method name="writeSQL(Ljava/sql/SQLOutput;)V" />
+	</class>
+	<class name="java/sql/SQLDataException" since="9">
+		<extends name="java/sql/SQLNonTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLException" since="1">
+		<extends name="java/lang/Exception" />
+		<implements name="java/lang/Iterable" since="9" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="9" />
+		<method name="getErrorCode()I" />
+		<method name="getNextException()Ljava/sql/SQLException;" />
+		<method name="getSQLState()Ljava/lang/String;" />
+		<method name="setNextException(Ljava/sql/SQLException;)V" />
+	</class>
+	<class name="java/sql/SQLFeatureNotSupportedException" since="9">
+		<extends name="java/sql/SQLNonTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLInput" since="1">
+		<extends name="java/lang/Object" />
+		<method name="readArray()Ljava/sql/Array;" />
+		<method name="readAsciiStream()Ljava/io/InputStream;" />
+		<method name="readBigDecimal()Ljava/math/BigDecimal;" />
+		<method name="readBinaryStream()Ljava/io/InputStream;" />
+		<method name="readBlob()Ljava/sql/Blob;" />
+		<method name="readBoolean()Z" />
+		<method name="readByte()B" />
+		<method name="readBytes()[B" />
+		<method name="readCharacterStream()Ljava/io/Reader;" />
+		<method name="readClob()Ljava/sql/Clob;" />
+		<method name="readDate()Ljava/sql/Date;" />
+		<method name="readDouble()D" />
+		<method name="readFloat()F" />
+		<method name="readInt()I" />
+		<method name="readLong()J" />
+		<method name="readNClob()Ljava/sql/NClob;" since="9" />
+		<method name="readNString()Ljava/lang/String;" since="9" />
+		<method name="readObject()Ljava/lang/Object;" />
+		<method name="readRef()Ljava/sql/Ref;" />
+		<method name="readRowId()Ljava/sql/RowId;" since="9" />
+		<method name="readSQLXML()Ljava/sql/SQLXML;" since="9" />
+		<method name="readShort()S" />
+		<method name="readString()Ljava/lang/String;" />
+		<method name="readTime()Ljava/sql/Time;" />
+		<method name="readTimestamp()Ljava/sql/Timestamp;" />
+		<method name="readURL()Ljava/net/URL;" />
+		<method name="wasNull()Z" />
+	</class>
+	<class name="java/sql/SQLIntegrityConstraintViolationException" since="9">
+		<extends name="java/sql/SQLNonTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLInvalidAuthorizationSpecException" since="9">
+		<extends name="java/sql/SQLNonTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLNonTransientConnectionException" since="9">
+		<extends name="java/sql/SQLNonTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLNonTransientException" since="9">
+		<extends name="java/sql/SQLException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLOutput" since="1">
+		<extends name="java/lang/Object" />
+		<method name="writeArray(Ljava/sql/Array;)V" />
+		<method name="writeAsciiStream(Ljava/io/InputStream;)V" />
+		<method name="writeBigDecimal(Ljava/math/BigDecimal;)V" />
+		<method name="writeBinaryStream(Ljava/io/InputStream;)V" />
+		<method name="writeBlob(Ljava/sql/Blob;)V" />
+		<method name="writeBoolean(Z)V" />
+		<method name="writeByte(B)V" />
+		<method name="writeBytes([B)V" />
+		<method name="writeCharacterStream(Ljava/io/Reader;)V" />
+		<method name="writeClob(Ljava/sql/Clob;)V" />
+		<method name="writeDate(Ljava/sql/Date;)V" />
+		<method name="writeDouble(D)V" />
+		<method name="writeFloat(F)V" />
+		<method name="writeInt(I)V" />
+		<method name="writeLong(J)V" />
+		<method name="writeNClob(Ljava/sql/NClob;)V" since="9" />
+		<method name="writeNString(Ljava/lang/String;)V" since="9" />
+		<method name="writeObject(Ljava/sql/SQLData;)V" />
+		<method name="writeRef(Ljava/sql/Ref;)V" />
+		<method name="writeRowId(Ljava/sql/RowId;)V" since="9" />
+		<method name="writeSQLXML(Ljava/sql/SQLXML;)V" since="9" />
+		<method name="writeShort(S)V" />
+		<method name="writeString(Ljava/lang/String;)V" />
+		<method name="writeStruct(Ljava/sql/Struct;)V" />
+		<method name="writeTime(Ljava/sql/Time;)V" />
+		<method name="writeTimestamp(Ljava/sql/Timestamp;)V" />
+		<method name="writeURL(Ljava/net/URL;)V" />
+	</class>
+	<class name="java/sql/SQLPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/sql/SQLRecoverableException" since="9">
+		<extends name="java/sql/SQLException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLSyntaxErrorException" since="9">
+		<extends name="java/sql/SQLNonTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLTimeoutException" since="9">
+		<extends name="java/sql/SQLTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLTransactionRollbackException" since="9">
+		<extends name="java/sql/SQLTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLTransientConnectionException" since="9">
+		<extends name="java/sql/SQLTransientException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLTransientException" since="9">
+		<extends name="java/sql/SQLException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/sql/SQLWarning" since="1">
+		<extends name="java/sql/SQLException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="9" />
+		<method name="getNextWarning()Ljava/sql/SQLWarning;" />
+		<method name="setNextWarning(Ljava/sql/SQLWarning;)V" />
+	</class>
+	<class name="java/sql/SQLXML" since="9">
+		<extends name="java/lang/Object" />
+		<method name="free()V" />
+		<method name="getBinaryStream()Ljava/io/InputStream;" />
+		<method name="getCharacterStream()Ljava/io/Reader;" />
+		<method name="getSource(Ljava/lang/Class;)Ljavax/xml/transform/Source;" />
+		<method name="getString()Ljava/lang/String;" />
+		<method name="setBinaryStream()Ljava/io/OutputStream;" />
+		<method name="setCharacterStream()Ljava/io/Writer;" />
+		<method name="setResult(Ljava/lang/Class;)Ljavax/xml/transform/Result;" />
+		<method name="setString(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/sql/Savepoint" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getSavepointId()I" />
+		<method name="getSavepointName()Ljava/lang/String;" />
+	</class>
+	<class name="java/sql/Statement" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" since="19" />
+		<implements name="java/sql/Wrapper" since="9" />
+		<method name="addBatch(Ljava/lang/String;)V" />
+		<method name="cancel()V" />
+		<method name="clearBatch()V" />
+		<method name="clearWarnings()V" />
+		<method name="close()V" />
+		<method name="execute(Ljava/lang/String;)Z" />
+		<method name="execute(Ljava/lang/String;I)Z" />
+		<method name="execute(Ljava/lang/String;[I)Z" />
+		<method name="execute(Ljava/lang/String;[Ljava/lang/String;)Z" />
+		<method name="executeBatch()[I" />
+		<method name="executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;" />
+		<method name="executeUpdate(Ljava/lang/String;)I" />
+		<method name="executeUpdate(Ljava/lang/String;I)I" />
+		<method name="executeUpdate(Ljava/lang/String;[I)I" />
+		<method name="executeUpdate(Ljava/lang/String;[Ljava/lang/String;)I" />
+		<method name="getConnection()Ljava/sql/Connection;" />
+		<method name="getFetchDirection()I" />
+		<method name="getFetchSize()I" />
+		<method name="getGeneratedKeys()Ljava/sql/ResultSet;" />
+		<method name="getMaxFieldSize()I" />
+		<method name="getMaxRows()I" />
+		<method name="getMoreResults()Z" />
+		<method name="getMoreResults(I)Z" />
+		<method name="getQueryTimeout()I" />
+		<method name="getResultSet()Ljava/sql/ResultSet;" />
+		<method name="getResultSetConcurrency()I" />
+		<method name="getResultSetHoldability()I" />
+		<method name="getResultSetType()I" />
+		<method name="getUpdateCount()I" />
+		<method name="getWarnings()Ljava/sql/SQLWarning;" />
+		<method name="isClosed()Z" since="9" />
+		<method name="isPoolable()Z" since="9" />
+		<method name="setCursorName(Ljava/lang/String;)V" />
+		<method name="setEscapeProcessing(Z)V" />
+		<method name="setFetchDirection(I)V" />
+		<method name="setFetchSize(I)V" />
+		<method name="setMaxFieldSize(I)V" />
+		<method name="setMaxRows(I)V" />
+		<method name="setPoolable(Z)V" since="9" />
+		<method name="setQueryTimeout(I)V" />
+		<field name="CLOSE_ALL_RESULTS" />
+		<field name="CLOSE_CURRENT_RESULT" />
+		<field name="EXECUTE_FAILED" />
+		<field name="KEEP_CURRENT_RESULT" />
+		<field name="NO_GENERATED_KEYS" />
+		<field name="RETURN_GENERATED_KEYS" />
+		<field name="SUCCESS_NO_INFO" />
+	</class>
+	<class name="java/sql/Struct" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getAttributes()[Ljava/lang/Object;" />
+		<method name="getAttributes(Ljava/util/Map;)[Ljava/lang/Object;" />
+		<method name="getSQLTypeName()Ljava/lang/String;" />
+	</class>
+	<class name="java/sql/Time" since="1">
+		<extends name="java/util/Date" />
+		<method name="&lt;init&gt;(III)V" deprecated="15" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Time;" />
+	</class>
+	<class name="java/sql/Timestamp" since="1">
+		<extends name="java/util/Date" />
+		<method name="&lt;init&gt;(IIIIIII)V" deprecated="15" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="after(Ljava/sql/Timestamp;)Z" />
+		<method name="before(Ljava/sql/Timestamp;)Z" />
+		<method name="compareTo(Ljava/sql/Timestamp;)I" />
+		<method name="equals(Ljava/sql/Timestamp;)Z" />
+		<method name="getNanos()I" />
+		<method name="setNanos(I)V" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Timestamp;" />
+	</class>
+	<class name="java/sql/Types" since="1">
+		<extends name="java/lang/Object" />
+		<field name="ARRAY" />
+		<field name="BIGINT" />
+		<field name="BINARY" />
+		<field name="BIT" />
+		<field name="BLOB" />
+		<field name="BOOLEAN" />
+		<field name="CHAR" />
+		<field name="CLOB" />
+		<field name="DATALINK" />
+		<field name="DATE" />
+		<field name="DECIMAL" />
+		<field name="DISTINCT" />
+		<field name="DOUBLE" />
+		<field name="FLOAT" />
+		<field name="INTEGER" />
+		<field name="JAVA_OBJECT" />
+		<field name="LONGNVARCHAR" since="9" />
+		<field name="LONGVARBINARY" />
+		<field name="LONGVARCHAR" />
+		<field name="NCHAR" since="9" />
+		<field name="NCLOB" since="9" />
+		<field name="NULL" />
+		<field name="NUMERIC" />
+		<field name="NVARCHAR" since="9" />
+		<field name="OTHER" />
+		<field name="REAL" />
+		<field name="REF" />
+		<field name="ROWID" since="9" />
+		<field name="SMALLINT" />
+		<field name="SQLXML" since="9" />
+		<field name="STRUCT" />
+		<field name="TIME" />
+		<field name="TIMESTAMP" />
+		<field name="TINYINT" />
+		<field name="VARBINARY" />
+		<field name="VARCHAR" />
+	</class>
+	<class name="java/sql/Wrapper" since="9">
+		<extends name="java/lang/Object" />
+		<method name="isWrapperFor(Ljava/lang/Class;)Z" />
+		<method name="unwrap(Ljava/lang/Class;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/text/Annotation" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="getValue()Ljava/lang/Object;" />
+	</class>
+	<class name="java/text/AttributedCharacterIterator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/text/CharacterIterator" />
+		<method name="getAllAttributeKeys()Ljava/util/Set;" />
+		<method name="getAttribute(Ljava/text/AttributedCharacterIterator$Attribute;)Ljava/lang/Object;" />
+		<method name="getAttributes()Ljava/util/Map;" />
+		<method name="getRunLimit()I" />
+		<method name="getRunLimit(Ljava/text/AttributedCharacterIterator$Attribute;)I" />
+		<method name="getRunLimit(Ljava/util/Set;)I" />
+		<method name="getRunStart()I" />
+		<method name="getRunStart(Ljava/text/AttributedCharacterIterator$Attribute;)I" />
+		<method name="getRunStart(Ljava/util/Set;)I" />
+	</class>
+	<class name="java/text/AttributedCharacterIterator$Attribute" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="readResolve()Ljava/lang/Object;" />
+		<field name="INPUT_METHOD_SEGMENT" />
+		<field name="LANGUAGE" />
+		<field name="READING" />
+	</class>
+	<class name="java/text/AttributedString" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/Map;)V" />
+		<method name="&lt;init&gt;(Ljava/text/AttributedCharacterIterator;)V" />
+		<method name="&lt;init&gt;(Ljava/text/AttributedCharacterIterator;II)V" />
+		<method name="&lt;init&gt;(Ljava/text/AttributedCharacterIterator;II[Ljava/text/AttributedCharacterIterator$Attribute;)V" />
+		<method name="addAttribute(Ljava/text/AttributedCharacterIterator$Attribute;Ljava/lang/Object;)V" />
+		<method name="addAttribute(Ljava/text/AttributedCharacterIterator$Attribute;Ljava/lang/Object;II)V" />
+		<method name="addAttributes(Ljava/util/Map;II)V" />
+		<method name="getIterator()Ljava/text/AttributedCharacterIterator;" />
+		<method name="getIterator([Ljava/text/AttributedCharacterIterator$Attribute;)Ljava/text/AttributedCharacterIterator;" />
+		<method name="getIterator([Ljava/text/AttributedCharacterIterator$Attribute;II)Ljava/text/AttributedCharacterIterator;" />
+	</class>
+	<class name="java/text/Bidi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/text/AttributedCharacterIterator;)V" />
+		<method name="&lt;init&gt;([CI[BIII)V" />
+		<method name="baseIsLeftToRight()Z" />
+		<method name="createLineBidi(II)Ljava/text/Bidi;" />
+		<method name="getBaseLevel()I" />
+		<method name="getLength()I" />
+		<method name="getLevelAt(I)I" />
+		<method name="getRunCount()I" />
+		<method name="getRunLevel(I)I" />
+		<method name="getRunLimit(I)I" />
+		<method name="getRunStart(I)I" />
+		<method name="isLeftToRight()Z" />
+		<method name="isMixed()Z" />
+		<method name="isRightToLeft()Z" />
+		<method name="reorderVisually([BI[Ljava/lang/Object;II)V" />
+		<method name="requiresBidi([CII)Z" />
+		<field name="DIRECTION_DEFAULT_LEFT_TO_RIGHT" />
+		<field name="DIRECTION_DEFAULT_RIGHT_TO_LEFT" />
+		<field name="DIRECTION_LEFT_TO_RIGHT" />
+		<field name="DIRECTION_RIGHT_TO_LEFT" />
+	</class>
+	<class name="java/text/BreakIterator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="current()I" />
+		<method name="first()I" />
+		<method name="following(I)I" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" />
+		<method name="getCharacterInstance()Ljava/text/BreakIterator;" />
+		<method name="getCharacterInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;" />
+		<method name="getInt([BI)I" removed="9" />
+		<method name="getLineInstance()Ljava/text/BreakIterator;" />
+		<method name="getLineInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;" />
+		<method name="getLong([BI)J" removed="9" />
+		<method name="getSentenceInstance()Ljava/text/BreakIterator;" />
+		<method name="getSentenceInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;" />
+		<method name="getShort([BI)S" removed="9" />
+		<method name="getText()Ljava/text/CharacterIterator;" />
+		<method name="getWordInstance()Ljava/text/BreakIterator;" />
+		<method name="getWordInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;" />
+		<method name="isBoundary(I)Z" />
+		<method name="last()I" />
+		<method name="next()I" />
+		<method name="next(I)I" />
+		<method name="preceding(I)I" />
+		<method name="previous()I" />
+		<method name="setText(Ljava/lang/String;)V" />
+		<method name="setText(Ljava/text/CharacterIterator;)V" />
+		<field name="DONE" />
+	</class>
+	<class name="java/text/CharacterIterator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="current()C" />
+		<method name="first()C" />
+		<method name="getBeginIndex()I" />
+		<method name="getEndIndex()I" />
+		<method name="getIndex()I" />
+		<method name="last()C" />
+		<method name="next()C" />
+		<method name="previous()C" />
+		<method name="setIndex(I)C" />
+		<field name="DONE" />
+	</class>
+	<class name="java/text/ChoiceFormat" since="1">
+		<extends name="java/text/NumberFormat" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;([D[Ljava/lang/String;)V" />
+		<method name="applyPattern(Ljava/lang/String;)V" />
+		<method name="getFormats()[Ljava/lang/Object;" />
+		<method name="getLimits()[D" />
+		<method name="nextDouble(D)D" />
+		<method name="nextDouble(DZ)D" />
+		<method name="previousDouble(D)D" />
+		<method name="setChoices([D[Ljava/lang/String;)V" />
+		<method name="toPattern()Ljava/lang/String;" />
+	</class>
+	<class name="java/text/CollationElementIterator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getMaxExpansion(I)I" />
+		<method name="getOffset()I" />
+		<method name="next()I" />
+		<method name="previous()I" />
+		<method name="primaryOrder(I)I" />
+		<method name="reset()V" />
+		<method name="secondaryOrder(I)S" />
+		<method name="setOffset(I)V" />
+		<method name="setText(Ljava/lang/String;)V" />
+		<method name="setText(Ljava/text/CharacterIterator;)V" />
+		<method name="tertiaryOrder(I)S" />
+		<field name="NULLORDER" />
+	</class>
+	<class name="java/text/CollationKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" since="9" />
+		<method name="compareTo(Ljava/text/CollationKey;)I" />
+		<method name="getSourceString()Ljava/lang/String;" />
+		<method name="toByteArray()[B" />
+	</class>
+	<class name="java/text/Collator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/Comparator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="equals(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" />
+		<method name="getCollationKey(Ljava/lang/String;)Ljava/text/CollationKey;" />
+		<method name="getDecomposition()I" />
+		<method name="getInstance()Ljava/text/Collator;" />
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/Collator;" />
+		<method name="getStrength()I" />
+		<method name="setDecomposition(I)V" />
+		<method name="setStrength(I)V" />
+		<field name="CANONICAL_DECOMPOSITION" />
+		<field name="FULL_DECOMPOSITION" />
+		<field name="IDENTICAL" />
+		<field name="NO_DECOMPOSITION" />
+		<field name="PRIMARY" />
+		<field name="SECONDARY" />
+		<field name="TERTIARY" />
+	</class>
+	<class name="java/text/DateFormat" since="1">
+		<extends name="java/text/Format" />
+		<method name="&lt;init&gt;()V" />
+		<method name="format(Ljava/util/Date;)Ljava/lang/String;" />
+		<method name="format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" />
+		<method name="getCalendar()Ljava/util/Calendar;" />
+		<method name="getDateInstance()Ljava/text/DateFormat;" />
+		<method name="getDateInstance(I)Ljava/text/DateFormat;" />
+		<method name="getDateInstance(ILjava/util/Locale;)Ljava/text/DateFormat;" />
+		<method name="getDateTimeInstance()Ljava/text/DateFormat;" />
+		<method name="getDateTimeInstance(II)Ljava/text/DateFormat;" />
+		<method name="getDateTimeInstance(IILjava/util/Locale;)Ljava/text/DateFormat;" />
+		<method name="getInstance()Ljava/text/DateFormat;" />
+		<method name="getNumberFormat()Ljava/text/NumberFormat;" />
+		<method name="getTimeInstance()Ljava/text/DateFormat;" />
+		<method name="getTimeInstance(I)Ljava/text/DateFormat;" />
+		<method name="getTimeInstance(ILjava/util/Locale;)Ljava/text/DateFormat;" />
+		<method name="getTimeZone()Ljava/util/TimeZone;" />
+		<method name="isLenient()Z" />
+		<method name="parse(Ljava/lang/String;)Ljava/util/Date;" />
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;" />
+		<method name="setCalendar(Ljava/util/Calendar;)V" />
+		<method name="setLenient(Z)V" />
+		<method name="setNumberFormat(Ljava/text/NumberFormat;)V" />
+		<method name="setTimeZone(Ljava/util/TimeZone;)V" />
+		<field name="AM_PM_FIELD" />
+		<field name="DATE_FIELD" />
+		<field name="DAY_OF_WEEK_FIELD" />
+		<field name="DAY_OF_WEEK_IN_MONTH_FIELD" />
+		<field name="DAY_OF_YEAR_FIELD" />
+		<field name="DEFAULT" />
+		<field name="ERA_FIELD" />
+		<field name="FULL" />
+		<field name="HOUR0_FIELD" />
+		<field name="HOUR1_FIELD" />
+		<field name="HOUR_OF_DAY0_FIELD" />
+		<field name="HOUR_OF_DAY1_FIELD" />
+		<field name="LONG" />
+		<field name="MEDIUM" />
+		<field name="MILLISECOND_FIELD" />
+		<field name="MINUTE_FIELD" />
+		<field name="MONTH_FIELD" />
+		<field name="SECOND_FIELD" />
+		<field name="SHORT" />
+		<field name="TIMEZONE_FIELD" />
+		<field name="WEEK_OF_MONTH_FIELD" />
+		<field name="WEEK_OF_YEAR_FIELD" />
+		<field name="YEAR_FIELD" />
+		<field name="calendar" />
+		<field name="numberFormat" />
+	</class>
+	<class name="java/text/DateFormat$Field" since="1">
+		<extends name="java/text/Format$Field" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="getCalendarField()I" />
+		<method name="ofCalendarField(I)Ljava/text/DateFormat$Field;" />
+		<field name="AM_PM" />
+		<field name="DAY_OF_MONTH" />
+		<field name="DAY_OF_WEEK" />
+		<field name="DAY_OF_WEEK_IN_MONTH" />
+		<field name="DAY_OF_YEAR" />
+		<field name="ERA" />
+		<field name="HOUR0" />
+		<field name="HOUR1" />
+		<field name="HOUR_OF_DAY0" />
+		<field name="HOUR_OF_DAY1" />
+		<field name="MILLISECOND" />
+		<field name="MINUTE" />
+		<field name="MONTH" />
+		<field name="SECOND" />
+		<field name="TIME_ZONE" />
+		<field name="WEEK_OF_MONTH" />
+		<field name="WEEK_OF_YEAR" />
+		<field name="YEAR" />
+	</class>
+	<class name="java/text/DateFormatSymbols" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" />
+		<method name="getAmPmStrings()[Ljava/lang/String;" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" since="9" />
+		<method name="getEras()[Ljava/lang/String;" />
+		<method name="getInstance()Ljava/text/DateFormatSymbols;" since="9" />
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/DateFormatSymbols;" since="9" />
+		<method name="getLocalPatternChars()Ljava/lang/String;" />
+		<method name="getMonths()[Ljava/lang/String;" />
+		<method name="getShortMonths()[Ljava/lang/String;" />
+		<method name="getShortWeekdays()[Ljava/lang/String;" />
+		<method name="getWeekdays()[Ljava/lang/String;" />
+		<method name="getZoneStrings()[[Ljava/lang/String;" />
+		<method name="setAmPmStrings([Ljava/lang/String;)V" />
+		<method name="setEras([Ljava/lang/String;)V" />
+		<method name="setLocalPatternChars(Ljava/lang/String;)V" />
+		<method name="setMonths([Ljava/lang/String;)V" />
+		<method name="setShortMonths([Ljava/lang/String;)V" />
+		<method name="setShortWeekdays([Ljava/lang/String;)V" />
+		<method name="setWeekdays([Ljava/lang/String;)V" />
+		<method name="setZoneStrings([[Ljava/lang/String;)V" />
+	</class>
+	<class name="java/text/DecimalFormat" since="1">
+		<extends name="java/text/NumberFormat" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/text/DecimalFormatSymbols;)V" />
+		<method name="applyLocalizedPattern(Ljava/lang/String;)V" />
+		<method name="applyPattern(Ljava/lang/String;)V" />
+		<method name="getDecimalFormatSymbols()Ljava/text/DecimalFormatSymbols;" />
+		<method name="getGroupingSize()I" />
+		<method name="getMultiplier()I" />
+		<method name="getNegativePrefix()Ljava/lang/String;" />
+		<method name="getNegativeSuffix()Ljava/lang/String;" />
+		<method name="getPositivePrefix()Ljava/lang/String;" />
+		<method name="getPositiveSuffix()Ljava/lang/String;" />
+		<method name="isDecimalSeparatorAlwaysShown()Z" />
+		<method name="isParseBigDecimal()Z" />
+		<method name="setDecimalFormatSymbols(Ljava/text/DecimalFormatSymbols;)V" />
+		<method name="setDecimalSeparatorAlwaysShown(Z)V" />
+		<method name="setGroupingSize(I)V" />
+		<method name="setMultiplier(I)V" />
+		<method name="setNegativePrefix(Ljava/lang/String;)V" />
+		<method name="setNegativeSuffix(Ljava/lang/String;)V" />
+		<method name="setParseBigDecimal(Z)V" />
+		<method name="setPositivePrefix(Ljava/lang/String;)V" />
+		<method name="setPositiveSuffix(Ljava/lang/String;)V" />
+		<method name="toLocalizedPattern()Ljava/lang/String;" />
+		<method name="toPattern()Ljava/lang/String;" />
+	</class>
+	<class name="java/text/DecimalFormatSymbols" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" since="9" />
+		<method name="getCurrency()Ljava/util/Currency;" />
+		<method name="getCurrencySymbol()Ljava/lang/String;" />
+		<method name="getDecimalSeparator()C" />
+		<method name="getDigit()C" />
+		<method name="getExponentSeparator()Ljava/lang/String;" since="9" />
+		<method name="getGroupingSeparator()C" />
+		<method name="getInfinity()Ljava/lang/String;" />
+		<method name="getInstance()Ljava/text/DecimalFormatSymbols;" since="9" />
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/DecimalFormatSymbols;" since="9" />
+		<method name="getInternationalCurrencySymbol()Ljava/lang/String;" />
+		<method name="getMinusSign()C" />
+		<method name="getMonetaryDecimalSeparator()C" />
+		<method name="getNaN()Ljava/lang/String;" />
+		<method name="getPatternSeparator()C" />
+		<method name="getPerMill()C" />
+		<method name="getPercent()C" />
+		<method name="getZeroDigit()C" />
+		<method name="setCurrency(Ljava/util/Currency;)V" />
+		<method name="setCurrencySymbol(Ljava/lang/String;)V" />
+		<method name="setDecimalSeparator(C)V" />
+		<method name="setDigit(C)V" />
+		<method name="setExponentSeparator(Ljava/lang/String;)V" since="9" />
+		<method name="setGroupingSeparator(C)V" />
+		<method name="setInfinity(Ljava/lang/String;)V" />
+		<method name="setInternationalCurrencySymbol(Ljava/lang/String;)V" />
+		<method name="setMinusSign(C)V" />
+		<method name="setMonetaryDecimalSeparator(C)V" />
+		<method name="setNaN(Ljava/lang/String;)V" />
+		<method name="setPatternSeparator(C)V" />
+		<method name="setPerMill(C)V" />
+		<method name="setPercent(C)V" />
+		<method name="setZeroDigit(C)V" />
+	</class>
+	<class name="java/text/FieldPosition" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/text/Format$Field;)V" />
+		<method name="&lt;init&gt;(Ljava/text/Format$Field;I)V" />
+		<method name="getBeginIndex()I" />
+		<method name="getEndIndex()I" />
+		<method name="getField()I" />
+		<method name="getFieldAttribute()Ljava/text/Format$Field;" />
+		<method name="setBeginIndex(I)V" />
+		<method name="setEndIndex(I)V" />
+	</class>
+	<class name="java/text/Format" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="format(Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;" />
+		<method name="formatToCharacterIterator(Ljava/lang/Object;)Ljava/text/AttributedCharacterIterator;" />
+		<method name="parseObject(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/text/Format$Field" since="1">
+		<extends name="java/text/AttributedCharacterIterator$Attribute" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/text/MessageFormat" since="1">
+		<extends name="java/text/Format" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/Locale;)V" />
+		<method name="applyPattern(Ljava/lang/String;)V" />
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="format([Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;" />
+		<method name="getFormats()[Ljava/text/Format;" />
+		<method name="getFormatsByArgumentIndex()[Ljava/text/Format;" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="parse(Ljava/lang/String;)[Ljava/lang/Object;" />
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)[Ljava/lang/Object;" />
+		<method name="setFormat(ILjava/text/Format;)V" />
+		<method name="setFormatByArgumentIndex(ILjava/text/Format;)V" />
+		<method name="setFormats([Ljava/text/Format;)V" />
+		<method name="setFormatsByArgumentIndex([Ljava/text/Format;)V" />
+		<method name="setLocale(Ljava/util/Locale;)V" />
+		<method name="toPattern()Ljava/lang/String;" />
+	</class>
+	<class name="java/text/MessageFormat$Field" since="1">
+		<extends name="java/text/Format$Field" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="ARGUMENT" />
+	</class>
+	<class name="java/text/Normalizer" since="9">
+		<extends name="java/lang/Object" />
+		<method name="isNormalized(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Z" />
+		<method name="normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;" />
+	</class>
+	<class name="java/text/Normalizer$Form" since="9">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/text/Normalizer$Form;" />
+		<method name="values()[Ljava/text/Normalizer$Form;" />
+		<field name="NFC" />
+		<field name="NFD" />
+		<field name="NFKC" />
+		<field name="NFKD" />
+	</class>
+	<class name="java/text/NumberFormat" since="1">
+		<extends name="java/text/Format" />
+		<method name="&lt;init&gt;()V" />
+		<method name="format(D)Ljava/lang/String;" />
+		<method name="format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;" />
+		<method name="format(J)Ljava/lang/String;" />
+		<method name="format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" />
+		<method name="getCurrency()Ljava/util/Currency;" />
+		<method name="getCurrencyInstance()Ljava/text/NumberFormat;" />
+		<method name="getCurrencyInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;" />
+		<method name="getInstance()Ljava/text/NumberFormat;" />
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;" />
+		<method name="getIntegerInstance()Ljava/text/NumberFormat;" />
+		<method name="getIntegerInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;" />
+		<method name="getMaximumFractionDigits()I" />
+		<method name="getMaximumIntegerDigits()I" />
+		<method name="getMinimumFractionDigits()I" />
+		<method name="getMinimumIntegerDigits()I" />
+		<method name="getNumberInstance()Ljava/text/NumberFormat;" />
+		<method name="getNumberInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;" />
+		<method name="getPercentInstance()Ljava/text/NumberFormat;" />
+		<method name="getPercentInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;" />
+		<method name="getRoundingMode()Ljava/math/RoundingMode;" since="9" />
+		<method name="isGroupingUsed()Z" />
+		<method name="isParseIntegerOnly()Z" />
+		<method name="parse(Ljava/lang/String;)Ljava/lang/Number;" />
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;" />
+		<method name="setCurrency(Ljava/util/Currency;)V" />
+		<method name="setGroupingUsed(Z)V" />
+		<method name="setMaximumFractionDigits(I)V" />
+		<method name="setMaximumIntegerDigits(I)V" />
+		<method name="setMinimumFractionDigits(I)V" />
+		<method name="setMinimumIntegerDigits(I)V" />
+		<method name="setParseIntegerOnly(Z)V" />
+		<method name="setRoundingMode(Ljava/math/RoundingMode;)V" since="9" />
+		<field name="FRACTION_FIELD" />
+		<field name="INTEGER_FIELD" />
+	</class>
+	<class name="java/text/NumberFormat$Field" since="1">
+		<extends name="java/text/Format$Field" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="CURRENCY" />
+		<field name="DECIMAL_SEPARATOR" />
+		<field name="EXPONENT" />
+		<field name="EXPONENT_SIGN" />
+		<field name="EXPONENT_SYMBOL" />
+		<field name="FRACTION" />
+		<field name="GROUPING_SEPARATOR" />
+		<field name="INTEGER" />
+		<field name="PERCENT" />
+		<field name="PERMILLE" />
+		<field name="SIGN" />
+	</class>
+	<class name="java/text/ParseException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="getErrorOffset()I" />
+	</class>
+	<class name="java/text/ParsePosition" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getErrorIndex()I" />
+		<method name="getIndex()I" />
+		<method name="setErrorIndex(I)V" />
+		<method name="setIndex(I)V" />
+	</class>
+	<class name="java/text/RuleBasedCollator" since="1">
+		<extends name="java/text/Collator" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getCollationElementIterator(Ljava/lang/String;)Ljava/text/CollationElementIterator;" />
+		<method name="getCollationElementIterator(Ljava/text/CharacterIterator;)Ljava/text/CollationElementIterator;" />
+		<method name="getRules()Ljava/lang/String;" />
+	</class>
+	<class name="java/text/SimpleDateFormat" since="1">
+		<extends name="java/text/DateFormat" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/text/DateFormatSymbols;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/Locale;)V" />
+		<method name="applyLocalizedPattern(Ljava/lang/String;)V" />
+		<method name="applyPattern(Ljava/lang/String;)V" />
+		<method name="get2DigitYearStart()Ljava/util/Date;" />
+		<method name="getDateFormatSymbols()Ljava/text/DateFormatSymbols;" />
+		<method name="set2DigitYearStart(Ljava/util/Date;)V" />
+		<method name="setDateFormatSymbols(Ljava/text/DateFormatSymbols;)V" />
+		<method name="toLocalizedPattern()Ljava/lang/String;" />
+		<method name="toPattern()Ljava/lang/String;" />
+	</class>
+	<class name="java/text/StringCharacterIterator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/text/CharacterIterator" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;III)V" />
+		<method name="setText(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/time/Clock" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="fixed(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/Clock;" />
+		<method name="getZone()Ljava/time/ZoneId;" />
+		<method name="instant()Ljava/time/Instant;" />
+		<method name="millis()J" />
+		<method name="offset(Ljava/time/Clock;Ljava/time/Duration;)Ljava/time/Clock;" />
+		<method name="system(Ljava/time/ZoneId;)Ljava/time/Clock;" />
+		<method name="systemDefaultZone()Ljava/time/Clock;" />
+		<method name="systemUTC()Ljava/time/Clock;" />
+		<method name="tick(Ljava/time/Clock;Ljava/time/Duration;)Ljava/time/Clock;" />
+		<method name="tickMinutes(Ljava/time/ZoneId;)Ljava/time/Clock;" />
+		<method name="tickSeconds(Ljava/time/ZoneId;)Ljava/time/Clock;" />
+		<method name="withZone(Ljava/time/ZoneId;)Ljava/time/Clock;" />
+	</class>
+	<class name="java/time/DateTimeException" since="26">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/time/DayOfWeek" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/temporal/TemporalAccessor" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/DayOfWeek;" />
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getValue()I" />
+		<method name="minus(J)Ljava/time/DayOfWeek;" />
+		<method name="of(I)Ljava/time/DayOfWeek;" />
+		<method name="plus(J)Ljava/time/DayOfWeek;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/DayOfWeek;" />
+		<method name="values()[Ljava/time/DayOfWeek;" />
+		<field name="FRIDAY" />
+		<field name="MONDAY" />
+		<field name="SATURDAY" />
+		<field name="SUNDAY" />
+		<field name="THURSDAY" />
+		<field name="TUESDAY" />
+		<field name="WEDNESDAY" />
+	</class>
+	<class name="java/time/Duration" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/TemporalAmount" />
+		<method name="abs()Ljava/time/Duration;" />
+		<method name="between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)Ljava/time/Duration;" />
+		<method name="compareTo(Ljava/time/Duration;)I" />
+		<method name="dividedBy(J)Ljava/time/Duration;" />
+		<method name="dividedBy(Ljava/time/Duration;)J" since="31" />
+		<method name="from(Ljava/time/temporal/TemporalAmount;)Ljava/time/Duration;" />
+		<method name="getNano()I" />
+		<method name="getSeconds()J" />
+		<method name="isNegative()Z" />
+		<method name="isZero()Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;" />
+		<method name="minus(Ljava/time/Duration;)Ljava/time/Duration;" />
+		<method name="minusDays(J)Ljava/time/Duration;" />
+		<method name="minusHours(J)Ljava/time/Duration;" />
+		<method name="minusMillis(J)Ljava/time/Duration;" />
+		<method name="minusMinutes(J)Ljava/time/Duration;" />
+		<method name="minusNanos(J)Ljava/time/Duration;" />
+		<method name="minusSeconds(J)Ljava/time/Duration;" />
+		<method name="multipliedBy(J)Ljava/time/Duration;" />
+		<method name="negated()Ljava/time/Duration;" />
+		<method name="of(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;" />
+		<method name="ofDays(J)Ljava/time/Duration;" />
+		<method name="ofHours(J)Ljava/time/Duration;" />
+		<method name="ofMillis(J)Ljava/time/Duration;" />
+		<method name="ofMinutes(J)Ljava/time/Duration;" />
+		<method name="ofNanos(J)Ljava/time/Duration;" />
+		<method name="ofSeconds(J)Ljava/time/Duration;" />
+		<method name="ofSeconds(JJ)Ljava/time/Duration;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Duration;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;" />
+		<method name="plus(Ljava/time/Duration;)Ljava/time/Duration;" />
+		<method name="plusDays(J)Ljava/time/Duration;" />
+		<method name="plusHours(J)Ljava/time/Duration;" />
+		<method name="plusMillis(J)Ljava/time/Duration;" />
+		<method name="plusMinutes(J)Ljava/time/Duration;" />
+		<method name="plusNanos(J)Ljava/time/Duration;" />
+		<method name="plusSeconds(J)Ljava/time/Duration;" />
+		<method name="toDays()J" />
+		<method name="toDaysPart()J" since="31" />
+		<method name="toHours()J" />
+		<method name="toHoursPart()I" since="31" />
+		<method name="toMillis()J" />
+		<method name="toMillisPart()I" since="31" />
+		<method name="toMinutes()J" />
+		<method name="toMinutesPart()I" since="31" />
+		<method name="toNanos()J" />
+		<method name="toNanosPart()I" since="31" />
+		<method name="toSeconds()J" since="31" />
+		<method name="toSecondsPart()I" since="31" />
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/Duration;" since="31" />
+		<method name="withNanos(I)Ljava/time/Duration;" />
+		<method name="withSeconds(J)Ljava/time/Duration;" />
+		<field name="ZERO" />
+	</class>
+	<class name="java/time/Instant" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;" />
+		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="compareTo(Ljava/time/Instant;)I" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Instant;" />
+		<method name="getEpochSecond()J" />
+		<method name="getNano()I" />
+		<method name="isAfter(Ljava/time/Instant;)Z" />
+		<method name="isBefore(Ljava/time/Instant;)Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;" />
+		<method name="minusMillis(J)Ljava/time/Instant;" />
+		<method name="minusNanos(J)Ljava/time/Instant;" />
+		<method name="minusSeconds(J)Ljava/time/Instant;" />
+		<method name="now()Ljava/time/Instant;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/Instant;" />
+		<method name="ofEpochMilli(J)Ljava/time/Instant;" />
+		<method name="ofEpochSecond(J)Ljava/time/Instant;" />
+		<method name="ofEpochSecond(JJ)Ljava/time/Instant;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Instant;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;" />
+		<method name="plusMillis(J)Ljava/time/Instant;" />
+		<method name="plusNanos(J)Ljava/time/Instant;" />
+		<method name="plusSeconds(J)Ljava/time/Instant;" />
+		<method name="toEpochMilli()J" />
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/Instant;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Instant;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/Instant;" />
+		<field name="EPOCH" />
+		<field name="MAX" />
+		<field name="MIN" />
+	</class>
+	<class name="java/time/LocalDate" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/time/chrono/ChronoLocalDate" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atStartOfDay()Ljava/time/LocalDateTime;" />
+		<method name="atStartOfDay(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="atTime(II)Ljava/time/LocalDateTime;" />
+		<method name="atTime(III)Ljava/time/LocalDateTime;" />
+		<method name="atTime(IIII)Ljava/time/LocalDateTime;" />
+		<method name="atTime(Ljava/time/LocalTime;)Ljava/time/LocalDateTime;" />
+		<method name="atTime(Ljava/time/OffsetTime;)Ljava/time/OffsetDateTime;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;" />
+		<method name="getChronology()Ljava/time/chrono/IsoChronology;" />
+		<method name="getDayOfMonth()I" />
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;" />
+		<method name="getDayOfYear()I" />
+		<method name="getMonth()Ljava/time/Month;" />
+		<method name="getMonthValue()I" />
+		<method name="getYear()I" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDate;" />
+		<method name="minusDays(J)Ljava/time/LocalDate;" />
+		<method name="minusMonths(J)Ljava/time/LocalDate;" />
+		<method name="minusWeeks(J)Ljava/time/LocalDate;" />
+		<method name="minusYears(J)Ljava/time/LocalDate;" />
+		<method name="now()Ljava/time/LocalDate;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/LocalDate;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalDate;" />
+		<method name="of(III)Ljava/time/LocalDate;" />
+		<method name="of(ILjava/time/Month;I)Ljava/time/LocalDate;" />
+		<method name="ofEpochDay(J)Ljava/time/LocalDate;" />
+		<method name="ofYearDay(II)Ljava/time/LocalDate;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalDate;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDate;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDate;" />
+		<method name="plusDays(J)Ljava/time/LocalDate;" />
+		<method name="plusMonths(J)Ljava/time/LocalDate;" />
+		<method name="plusWeeks(J)Ljava/time/LocalDate;" />
+		<method name="plusYears(J)Ljava/time/LocalDate;" />
+		<method name="until(Ljava/time/chrono/ChronoLocalDate;)Ljava/time/Period;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDate;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalDate;" />
+		<method name="withDayOfMonth(I)Ljava/time/LocalDate;" />
+		<method name="withDayOfYear(I)Ljava/time/LocalDate;" />
+		<method name="withMonth(I)Ljava/time/LocalDate;" />
+		<method name="withYear(I)Ljava/time/LocalDate;" />
+		<field name="MAX" />
+		<field name="MIN" />
+	</class>
+	<class name="java/time/LocalDateTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/time/chrono/ChronoLocalDateTime" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;" />
+		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;" />
+		<method name="getDayOfMonth()I" />
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;" />
+		<method name="getDayOfYear()I" />
+		<method name="getHour()I" />
+		<method name="getMinute()I" />
+		<method name="getMonth()Ljava/time/Month;" />
+		<method name="getMonthValue()I" />
+		<method name="getNano()I" />
+		<method name="getSecond()I" />
+		<method name="getYear()I" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDateTime;" />
+		<method name="minusDays(J)Ljava/time/LocalDateTime;" />
+		<method name="minusHours(J)Ljava/time/LocalDateTime;" />
+		<method name="minusMinutes(J)Ljava/time/LocalDateTime;" />
+		<method name="minusMonths(J)Ljava/time/LocalDateTime;" />
+		<method name="minusNanos(J)Ljava/time/LocalDateTime;" />
+		<method name="minusSeconds(J)Ljava/time/LocalDateTime;" />
+		<method name="minusWeeks(J)Ljava/time/LocalDateTime;" />
+		<method name="minusYears(J)Ljava/time/LocalDateTime;" />
+		<method name="now()Ljava/time/LocalDateTime;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/LocalDateTime;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalDateTime;" />
+		<method name="of(IIIII)Ljava/time/LocalDateTime;" />
+		<method name="of(IIIIII)Ljava/time/LocalDateTime;" />
+		<method name="of(IIIIIII)Ljava/time/LocalDateTime;" />
+		<method name="of(ILjava/time/Month;III)Ljava/time/LocalDateTime;" />
+		<method name="of(ILjava/time/Month;IIII)Ljava/time/LocalDateTime;" />
+		<method name="of(ILjava/time/Month;IIIII)Ljava/time/LocalDateTime;" />
+		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;" />
+		<method name="ofEpochSecond(JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime;" />
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalDateTime;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalDateTime;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDateTime;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDateTime;" />
+		<method name="plusDays(J)Ljava/time/LocalDateTime;" />
+		<method name="plusHours(J)Ljava/time/LocalDateTime;" />
+		<method name="plusMinutes(J)Ljava/time/LocalDateTime;" />
+		<method name="plusMonths(J)Ljava/time/LocalDateTime;" />
+		<method name="plusNanos(J)Ljava/time/LocalDateTime;" />
+		<method name="plusSeconds(J)Ljava/time/LocalDateTime;" />
+		<method name="plusWeeks(J)Ljava/time/LocalDateTime;" />
+		<method name="plusYears(J)Ljava/time/LocalDateTime;" />
+		<method name="toLocalDate()Ljava/time/LocalDate;" />
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalDateTime;" />
+		<method name="withDayOfMonth(I)Ljava/time/LocalDateTime;" />
+		<method name="withDayOfYear(I)Ljava/time/LocalDateTime;" />
+		<method name="withHour(I)Ljava/time/LocalDateTime;" />
+		<method name="withMinute(I)Ljava/time/LocalDateTime;" />
+		<method name="withMonth(I)Ljava/time/LocalDateTime;" />
+		<method name="withNano(I)Ljava/time/LocalDateTime;" />
+		<method name="withSecond(I)Ljava/time/LocalDateTime;" />
+		<method name="withYear(I)Ljava/time/LocalDateTime;" />
+		<field name="MAX" />
+		<field name="MIN" />
+	</class>
+	<class name="java/time/LocalTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atDate(Ljava/time/LocalDate;)Ljava/time/LocalDateTime;" />
+		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;" />
+		<method name="compareTo(Ljava/time/LocalTime;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalTime;" />
+		<method name="getHour()I" />
+		<method name="getMinute()I" />
+		<method name="getNano()I" />
+		<method name="getSecond()I" />
+		<method name="isAfter(Ljava/time/LocalTime;)Z" />
+		<method name="isBefore(Ljava/time/LocalTime;)Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalTime;" />
+		<method name="minusHours(J)Ljava/time/LocalTime;" />
+		<method name="minusMinutes(J)Ljava/time/LocalTime;" />
+		<method name="minusNanos(J)Ljava/time/LocalTime;" />
+		<method name="minusSeconds(J)Ljava/time/LocalTime;" />
+		<method name="now()Ljava/time/LocalTime;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/LocalTime;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalTime;" />
+		<method name="of(II)Ljava/time/LocalTime;" />
+		<method name="of(III)Ljava/time/LocalTime;" />
+		<method name="of(IIII)Ljava/time/LocalTime;" />
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalTime;" since="31" />
+		<method name="ofNanoOfDay(J)Ljava/time/LocalTime;" />
+		<method name="ofSecondOfDay(J)Ljava/time/LocalTime;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalTime;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalTime;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalTime;" />
+		<method name="plusHours(J)Ljava/time/LocalTime;" />
+		<method name="plusMinutes(J)Ljava/time/LocalTime;" />
+		<method name="plusNanos(J)Ljava/time/LocalTime;" />
+		<method name="plusSeconds(J)Ljava/time/LocalTime;" />
+		<method name="toEpochSecond(Ljava/time/LocalDate;Ljava/time/ZoneOffset;)J" since="31" />
+		<method name="toNanoOfDay()J" />
+		<method name="toSecondOfDay()I" />
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalTime;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalTime;" />
+		<method name="withHour(I)Ljava/time/LocalTime;" />
+		<method name="withMinute(I)Ljava/time/LocalTime;" />
+		<method name="withNano(I)Ljava/time/LocalTime;" />
+		<method name="withSecond(I)Ljava/time/LocalTime;" />
+		<field name="MAX" />
+		<field name="MIDNIGHT" />
+		<field name="MIN" />
+		<field name="NOON" />
+	</class>
+	<class name="java/time/Month" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/temporal/TemporalAccessor" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="firstDayOfYear(Z)I" />
+		<method name="firstMonthOfQuarter()Ljava/time/Month;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Month;" />
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getValue()I" />
+		<method name="length(Z)I" />
+		<method name="maxLength()I" />
+		<method name="minLength()I" />
+		<method name="minus(J)Ljava/time/Month;" />
+		<method name="of(I)Ljava/time/Month;" />
+		<method name="plus(J)Ljava/time/Month;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/Month;" />
+		<method name="values()[Ljava/time/Month;" />
+		<field name="APRIL" />
+		<field name="AUGUST" />
+		<field name="DECEMBER" />
+		<field name="FEBRUARY" />
+		<field name="JANUARY" />
+		<field name="JULY" />
+		<field name="JUNE" />
+		<field name="MARCH" />
+		<field name="MAY" />
+		<field name="NOVEMBER" />
+		<field name="OCTOBER" />
+		<field name="SEPTEMBER" />
+	</class>
+	<class name="java/time/MonthDay" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/TemporalAccessor" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atYear(I)Ljava/time/LocalDate;" />
+		<method name="compareTo(Ljava/time/MonthDay;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/MonthDay;" />
+		<method name="getDayOfMonth()I" />
+		<method name="getMonth()Ljava/time/Month;" />
+		<method name="getMonthValue()I" />
+		<method name="isAfter(Ljava/time/MonthDay;)Z" />
+		<method name="isBefore(Ljava/time/MonthDay;)Z" />
+		<method name="isValidYear(I)Z" />
+		<method name="now()Ljava/time/MonthDay;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/MonthDay;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/MonthDay;" />
+		<method name="of(II)Ljava/time/MonthDay;" />
+		<method name="of(Ljava/time/Month;I)Ljava/time/MonthDay;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/MonthDay;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/MonthDay;" />
+		<method name="with(Ljava/time/Month;)Ljava/time/MonthDay;" />
+		<method name="withDayOfMonth(I)Ljava/time/MonthDay;" />
+		<method name="withMonth(I)Ljava/time/MonthDay;" />
+	</class>
+	<class name="java/time/OffsetDateTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="atZoneSimilarLocal(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="compareTo(Ljava/time/OffsetDateTime;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/OffsetDateTime;" />
+		<method name="getDayOfMonth()I" />
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;" />
+		<method name="getDayOfYear()I" />
+		<method name="getHour()I" />
+		<method name="getMinute()I" />
+		<method name="getMonth()Ljava/time/Month;" />
+		<method name="getMonthValue()I" />
+		<method name="getNano()I" />
+		<method name="getOffset()Ljava/time/ZoneOffset;" />
+		<method name="getSecond()I" />
+		<method name="getYear()I" />
+		<method name="isAfter(Ljava/time/OffsetDateTime;)Z" />
+		<method name="isBefore(Ljava/time/OffsetDateTime;)Z" />
+		<method name="isEqual(Ljava/time/OffsetDateTime;)Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetDateTime;" />
+		<method name="minusDays(J)Ljava/time/OffsetDateTime;" />
+		<method name="minusHours(J)Ljava/time/OffsetDateTime;" />
+		<method name="minusMinutes(J)Ljava/time/OffsetDateTime;" />
+		<method name="minusMonths(J)Ljava/time/OffsetDateTime;" />
+		<method name="minusNanos(J)Ljava/time/OffsetDateTime;" />
+		<method name="minusSeconds(J)Ljava/time/OffsetDateTime;" />
+		<method name="minusWeeks(J)Ljava/time/OffsetDateTime;" />
+		<method name="minusYears(J)Ljava/time/OffsetDateTime;" />
+		<method name="now()Ljava/time/OffsetDateTime;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/OffsetDateTime;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/OffsetDateTime;" />
+		<method name="of(IIIIIIILjava/time/ZoneOffset;)Ljava/time/OffsetDateTime;" />
+		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;" />
+		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;" />
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/OffsetDateTime;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/OffsetDateTime;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/OffsetDateTime;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetDateTime;" />
+		<method name="plusDays(J)Ljava/time/OffsetDateTime;" />
+		<method name="plusHours(J)Ljava/time/OffsetDateTime;" />
+		<method name="plusMinutes(J)Ljava/time/OffsetDateTime;" />
+		<method name="plusMonths(J)Ljava/time/OffsetDateTime;" />
+		<method name="plusNanos(J)Ljava/time/OffsetDateTime;" />
+		<method name="plusSeconds(J)Ljava/time/OffsetDateTime;" />
+		<method name="plusWeeks(J)Ljava/time/OffsetDateTime;" />
+		<method name="plusYears(J)Ljava/time/OffsetDateTime;" />
+		<method name="timeLineOrder()Ljava/util/Comparator;" />
+		<method name="toEpochSecond()J" />
+		<method name="toInstant()Ljava/time/Instant;" />
+		<method name="toLocalDate()Ljava/time/LocalDate;" />
+		<method name="toLocalDateTime()Ljava/time/LocalDateTime;" />
+		<method name="toLocalTime()Ljava/time/LocalTime;" />
+		<method name="toOffsetTime()Ljava/time/OffsetTime;" />
+		<method name="toZonedDateTime()Ljava/time/ZonedDateTime;" />
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/OffsetDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/OffsetDateTime;" />
+		<method name="withDayOfMonth(I)Ljava/time/OffsetDateTime;" />
+		<method name="withDayOfYear(I)Ljava/time/OffsetDateTime;" />
+		<method name="withHour(I)Ljava/time/OffsetDateTime;" />
+		<method name="withMinute(I)Ljava/time/OffsetDateTime;" />
+		<method name="withMonth(I)Ljava/time/OffsetDateTime;" />
+		<method name="withNano(I)Ljava/time/OffsetDateTime;" />
+		<method name="withOffsetSameInstant(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;" />
+		<method name="withOffsetSameLocal(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;" />
+		<method name="withSecond(I)Ljava/time/OffsetDateTime;" />
+		<method name="withYear(I)Ljava/time/OffsetDateTime;" />
+		<field name="MAX" />
+		<field name="MIN" />
+	</class>
+	<class name="java/time/OffsetTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atDate(Ljava/time/LocalDate;)Ljava/time/OffsetDateTime;" />
+		<method name="compareTo(Ljava/time/OffsetTime;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/OffsetTime;" />
+		<method name="getHour()I" />
+		<method name="getMinute()I" />
+		<method name="getNano()I" />
+		<method name="getOffset()Ljava/time/ZoneOffset;" />
+		<method name="getSecond()I" />
+		<method name="isAfter(Ljava/time/OffsetTime;)Z" />
+		<method name="isBefore(Ljava/time/OffsetTime;)Z" />
+		<method name="isEqual(Ljava/time/OffsetTime;)Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetTime;" />
+		<method name="minusHours(J)Ljava/time/OffsetTime;" />
+		<method name="minusMinutes(J)Ljava/time/OffsetTime;" />
+		<method name="minusNanos(J)Ljava/time/OffsetTime;" />
+		<method name="minusSeconds(J)Ljava/time/OffsetTime;" />
+		<method name="now()Ljava/time/OffsetTime;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/OffsetTime;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/OffsetTime;" />
+		<method name="of(IIIILjava/time/ZoneOffset;)Ljava/time/OffsetTime;" />
+		<method name="of(Ljava/time/LocalTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;" />
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/OffsetTime;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/OffsetTime;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/OffsetTime;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetTime;" />
+		<method name="plusHours(J)Ljava/time/OffsetTime;" />
+		<method name="plusMinutes(J)Ljava/time/OffsetTime;" />
+		<method name="plusNanos(J)Ljava/time/OffsetTime;" />
+		<method name="plusSeconds(J)Ljava/time/OffsetTime;" />
+		<method name="toLocalTime()Ljava/time/LocalTime;" />
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/OffsetTime;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/OffsetTime;" />
+		<method name="withHour(I)Ljava/time/OffsetTime;" />
+		<method name="withMinute(I)Ljava/time/OffsetTime;" />
+		<method name="withNano(I)Ljava/time/OffsetTime;" />
+		<method name="withOffsetSameInstant(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;" />
+		<method name="withOffsetSameLocal(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;" />
+		<method name="withSecond(I)Ljava/time/OffsetTime;" />
+		<field name="MAX" />
+		<field name="MIN" />
+	</class>
+	<class name="java/time/Period" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/time/chrono/ChronoPeriod" />
+		<method name="between(Ljava/time/LocalDate;Ljava/time/LocalDate;)Ljava/time/Period;" />
+		<method name="from(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;" />
+		<method name="getChronology()Ljava/time/chrono/IsoChronology;" />
+		<method name="getDays()I" />
+		<method name="getMonths()I" />
+		<method name="getYears()I" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;" />
+		<method name="minusDays(J)Ljava/time/Period;" />
+		<method name="minusMonths(J)Ljava/time/Period;" />
+		<method name="minusYears(J)Ljava/time/Period;" />
+		<method name="multipliedBy(I)Ljava/time/Period;" />
+		<method name="negated()Ljava/time/Period;" />
+		<method name="normalized()Ljava/time/Period;" />
+		<method name="of(III)Ljava/time/Period;" />
+		<method name="ofDays(I)Ljava/time/Period;" />
+		<method name="ofMonths(I)Ljava/time/Period;" />
+		<method name="ofWeeks(I)Ljava/time/Period;" />
+		<method name="ofYears(I)Ljava/time/Period;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Period;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;" />
+		<method name="plusDays(J)Ljava/time/Period;" />
+		<method name="plusMonths(J)Ljava/time/Period;" />
+		<method name="plusYears(J)Ljava/time/Period;" />
+		<method name="toTotalMonths()J" />
+		<method name="withDays(I)Ljava/time/Period;" />
+		<method name="withMonths(I)Ljava/time/Period;" />
+		<method name="withYears(I)Ljava/time/Period;" />
+		<field name="ZERO" />
+	</class>
+	<class name="java/time/Year" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atDay(I)Ljava/time/LocalDate;" />
+		<method name="atMonth(I)Ljava/time/YearMonth;" />
+		<method name="atMonth(Ljava/time/Month;)Ljava/time/YearMonth;" />
+		<method name="atMonthDay(Ljava/time/MonthDay;)Ljava/time/LocalDate;" />
+		<method name="compareTo(Ljava/time/Year;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Year;" />
+		<method name="getValue()I" />
+		<method name="isAfter(Ljava/time/Year;)Z" />
+		<method name="isBefore(Ljava/time/Year;)Z" />
+		<method name="isLeap()Z" />
+		<method name="isLeap(J)Z" />
+		<method name="isValidMonthDay(Ljava/time/MonthDay;)Z" />
+		<method name="length()I" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Year;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Year;" />
+		<method name="minusYears(J)Ljava/time/Year;" />
+		<method name="now()Ljava/time/Year;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/Year;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/Year;" />
+		<method name="of(I)Ljava/time/Year;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Year;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/Year;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Year;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Year;" />
+		<method name="plusYears(J)Ljava/time/Year;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Year;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/Year;" />
+		<field name="MAX_VALUE" />
+		<field name="MIN_VALUE" />
+	</class>
+	<class name="java/time/YearMonth" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atDay(I)Ljava/time/LocalDate;" />
+		<method name="atEndOfMonth()Ljava/time/LocalDate;" />
+		<method name="compareTo(Ljava/time/YearMonth;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/YearMonth;" />
+		<method name="getMonth()Ljava/time/Month;" />
+		<method name="getMonthValue()I" />
+		<method name="getYear()I" />
+		<method name="isAfter(Ljava/time/YearMonth;)Z" />
+		<method name="isBefore(Ljava/time/YearMonth;)Z" />
+		<method name="isLeapYear()Z" />
+		<method name="isValidDay(I)Z" />
+		<method name="lengthOfMonth()I" />
+		<method name="lengthOfYear()I" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/YearMonth;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/YearMonth;" />
+		<method name="minusMonths(J)Ljava/time/YearMonth;" />
+		<method name="minusYears(J)Ljava/time/YearMonth;" />
+		<method name="now()Ljava/time/YearMonth;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/YearMonth;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/YearMonth;" />
+		<method name="of(II)Ljava/time/YearMonth;" />
+		<method name="of(ILjava/time/Month;)Ljava/time/YearMonth;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/YearMonth;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/YearMonth;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/YearMonth;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/YearMonth;" />
+		<method name="plusMonths(J)Ljava/time/YearMonth;" />
+		<method name="plusYears(J)Ljava/time/YearMonth;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/YearMonth;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/YearMonth;" />
+		<method name="withMonth(I)Ljava/time/YearMonth;" />
+		<method name="withYear(I)Ljava/time/YearMonth;" />
+	</class>
+	<class name="java/time/ZoneId" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;" />
+		<method name="getAvailableZoneIds()Ljava/util/Set;" />
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="getRules()Ljava/time/zone/ZoneRules;" />
+		<method name="normalized()Ljava/time/ZoneId;" />
+		<method name="of(Ljava/lang/String;)Ljava/time/ZoneId;" />
+		<method name="of(Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId;" />
+		<method name="ofOffset(Ljava/lang/String;Ljava/time/ZoneOffset;)Ljava/time/ZoneId;" />
+		<method name="systemDefault()Ljava/time/ZoneId;" />
+		<field name="SHORT_IDS" />
+	</class>
+	<class name="java/time/ZoneOffset" since="26">
+		<extends name="java/time/ZoneId" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/TemporalAccessor" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="compareTo(Ljava/time/ZoneOffset;)I" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneOffset;" />
+		<method name="getTotalSeconds()I" />
+		<method name="of(Ljava/lang/String;)Ljava/time/ZoneOffset;" />
+		<method name="ofHours(I)Ljava/time/ZoneOffset;" />
+		<method name="ofHoursMinutes(II)Ljava/time/ZoneOffset;" />
+		<method name="ofHoursMinutesSeconds(III)Ljava/time/ZoneOffset;" />
+		<method name="ofTotalSeconds(I)Ljava/time/ZoneOffset;" />
+		<field name="MAX" />
+		<field name="MIN" />
+		<field name="UTC" />
+	</class>
+	<class name="java/time/ZonedDateTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/time/chrono/ChronoZonedDateTime" />
+		<implements name="java/time/temporal/Temporal" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;" />
+		<method name="getDayOfMonth()I" />
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;" />
+		<method name="getDayOfYear()I" />
+		<method name="getHour()I" />
+		<method name="getMinute()I" />
+		<method name="getMonth()Ljava/time/Month;" />
+		<method name="getMonthValue()I" />
+		<method name="getNano()I" />
+		<method name="getSecond()I" />
+		<method name="getYear()I" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/ZonedDateTime;" />
+		<method name="minusDays(J)Ljava/time/ZonedDateTime;" />
+		<method name="minusHours(J)Ljava/time/ZonedDateTime;" />
+		<method name="minusMinutes(J)Ljava/time/ZonedDateTime;" />
+		<method name="minusMonths(J)Ljava/time/ZonedDateTime;" />
+		<method name="minusNanos(J)Ljava/time/ZonedDateTime;" />
+		<method name="minusSeconds(J)Ljava/time/ZonedDateTime;" />
+		<method name="minusWeeks(J)Ljava/time/ZonedDateTime;" />
+		<method name="minusYears(J)Ljava/time/ZonedDateTime;" />
+		<method name="now()Ljava/time/ZonedDateTime;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/ZonedDateTime;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="of(IIIIIIILjava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="ofInstant(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="ofLocal(Ljava/time/LocalDateTime;Ljava/time/ZoneId;Ljava/time/ZoneOffset;)Ljava/time/ZonedDateTime;" />
+		<method name="ofStrict(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/ZonedDateTime;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/ZonedDateTime;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/ZonedDateTime;" />
+		<method name="plusDays(J)Ljava/time/ZonedDateTime;" />
+		<method name="plusHours(J)Ljava/time/ZonedDateTime;" />
+		<method name="plusMinutes(J)Ljava/time/ZonedDateTime;" />
+		<method name="plusMonths(J)Ljava/time/ZonedDateTime;" />
+		<method name="plusNanos(J)Ljava/time/ZonedDateTime;" />
+		<method name="plusSeconds(J)Ljava/time/ZonedDateTime;" />
+		<method name="plusWeeks(J)Ljava/time/ZonedDateTime;" />
+		<method name="plusYears(J)Ljava/time/ZonedDateTime;" />
+		<method name="toLocalDate()Ljava/time/LocalDate;" />
+		<method name="toLocalDateTime()Ljava/time/LocalDateTime;" />
+		<method name="toOffsetDateTime()Ljava/time/OffsetDateTime;" />
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/ZonedDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/ZonedDateTime;" />
+		<method name="withDayOfMonth(I)Ljava/time/ZonedDateTime;" />
+		<method name="withDayOfYear(I)Ljava/time/ZonedDateTime;" />
+		<method name="withEarlierOffsetAtOverlap()Ljava/time/ZonedDateTime;" />
+		<method name="withFixedOffsetZone()Ljava/time/ZonedDateTime;" />
+		<method name="withHour(I)Ljava/time/ZonedDateTime;" />
+		<method name="withLaterOffsetAtOverlap()Ljava/time/ZonedDateTime;" />
+		<method name="withMinute(I)Ljava/time/ZonedDateTime;" />
+		<method name="withMonth(I)Ljava/time/ZonedDateTime;" />
+		<method name="withNano(I)Ljava/time/ZonedDateTime;" />
+		<method name="withSecond(I)Ljava/time/ZonedDateTime;" />
+		<method name="withYear(I)Ljava/time/ZonedDateTime;" />
+		<method name="withZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="withZoneSameLocal(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+	</class>
+	<class name="java/time/chrono/AbstractChronology" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/time/chrono/Chronology" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/time/chrono/ChronoLocalDate" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atTime(Ljava/time/LocalTime;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="compareTo(Ljava/time/chrono/ChronoLocalDate;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="getChronology()Ljava/time/chrono/Chronology;" />
+		<method name="getEra()Ljava/time/chrono/Era;" />
+		<method name="isAfter(Ljava/time/chrono/ChronoLocalDate;)Z" />
+		<method name="isBefore(Ljava/time/chrono/ChronoLocalDate;)Z" />
+		<method name="isEqual(Ljava/time/chrono/ChronoLocalDate;)Z" />
+		<method name="isLeapYear()Z" />
+		<method name="lengthOfMonth()I" />
+		<method name="lengthOfYear()I" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="timeLineOrder()Ljava/util/Comparator;" />
+		<method name="toEpochDay()J" />
+		<method name="until(Ljava/time/chrono/ChronoLocalDate;)Ljava/time/chrono/ChronoPeriod;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDate;" />
+	</class>
+	<class name="java/time/chrono/ChronoLocalDateTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="compareTo(Ljava/time/chrono/ChronoLocalDateTime;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="getChronology()Ljava/time/chrono/Chronology;" />
+		<method name="isAfter(Ljava/time/chrono/ChronoLocalDateTime;)Z" />
+		<method name="isBefore(Ljava/time/chrono/ChronoLocalDateTime;)Z" />
+		<method name="isEqual(Ljava/time/chrono/ChronoLocalDateTime;)Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="timeLineOrder()Ljava/util/Comparator;" />
+		<method name="toEpochSecond(Ljava/time/ZoneOffset;)J" />
+		<method name="toInstant(Ljava/time/ZoneOffset;)Ljava/time/Instant;" />
+		<method name="toLocalDate()Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="toLocalTime()Ljava/time/LocalTime;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDateTime;" />
+	</class>
+	<class name="java/time/chrono/ChronoPeriod" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/time/temporal/TemporalAmount" />
+		<method name="between(Ljava/time/chrono/ChronoLocalDate;Ljava/time/chrono/ChronoLocalDate;)Ljava/time/chrono/ChronoPeriod;" />
+		<method name="getChronology()Ljava/time/chrono/Chronology;" />
+		<method name="isNegative()Z" />
+		<method name="isZero()Z" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoPeriod;" />
+		<method name="multipliedBy(I)Ljava/time/chrono/ChronoPeriod;" />
+		<method name="negated()Ljava/time/chrono/ChronoPeriod;" />
+		<method name="normalized()Ljava/time/chrono/ChronoPeriod;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoPeriod;" />
+	</class>
+	<class name="java/time/chrono/ChronoZonedDateTime" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<implements name="java/time/temporal/Temporal" />
+		<method name="compareTo(Ljava/time/chrono/ChronoZonedDateTime;)I" />
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="getChronology()Ljava/time/chrono/Chronology;" />
+		<method name="getOffset()Ljava/time/ZoneOffset;" />
+		<method name="getZone()Ljava/time/ZoneId;" />
+		<method name="isAfter(Ljava/time/chrono/ChronoZonedDateTime;)Z" />
+		<method name="isBefore(Ljava/time/chrono/ChronoZonedDateTime;)Z" />
+		<method name="isEqual(Ljava/time/chrono/ChronoZonedDateTime;)Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="timeLineOrder()Ljava/util/Comparator;" />
+		<method name="toEpochSecond()J" />
+		<method name="toInstant()Ljava/time/Instant;" />
+		<method name="toLocalDate()Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="toLocalDateTime()Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="toLocalTime()Ljava/time/LocalTime;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="withEarlierOffsetAtOverlap()Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="withLaterOffsetAtOverlap()Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="withZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="withZoneSameLocal(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;" />
+	</class>
+	<class name="java/time/chrono/Chronology" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="compareTo(Ljava/time/chrono/Chronology;)I" />
+		<method name="date(III)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="dateEpochDay(J)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="dateNow()Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="dateYearDay(II)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="eraOf(I)Ljava/time/chrono/Era;" />
+		<method name="eras()Ljava/util/List;" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/Chronology;" />
+		<method name="getAvailableChronologies()Ljava/util/Set;" />
+		<method name="getCalendarType()Ljava/lang/String;" />
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getId()Ljava/lang/String;" />
+		<method name="isLeapYear(J)Z" />
+		<method name="localDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDateTime;" />
+		<method name="of(Ljava/lang/String;)Ljava/time/chrono/Chronology;" />
+		<method name="ofLocale(Ljava/util/Locale;)Ljava/time/chrono/Chronology;" />
+		<method name="period(III)Ljava/time/chrono/ChronoPeriod;" />
+		<method name="prolepticYear(Ljava/time/chrono/Era;I)I" />
+		<method name="range(Ljava/time/temporal/ChronoField;)Ljava/time/temporal/ValueRange;" />
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;" />
+		<method name="zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;" />
+		<method name="zonedDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoZonedDateTime;" />
+	</class>
+	<class name="java/time/chrono/Era" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/time/temporal/TemporalAccessor" />
+		<implements name="java/time/temporal/TemporalAdjuster" />
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getValue()I" />
+	</class>
+	<class name="java/time/chrono/HijrahChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology" />
+		<implements name="java/io/Serializable" />
+		<method name="date(III)Ljava/time/chrono/HijrahDate;" />
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/HijrahDate;" />
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;" />
+		<method name="dateEpochDay(J)Ljava/time/chrono/HijrahDate;" />
+		<method name="dateNow()Ljava/time/chrono/HijrahDate;" />
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/HijrahDate;" />
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/HijrahDate;" />
+		<method name="dateYearDay(II)Ljava/time/chrono/HijrahDate;" />
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/HijrahDate;" />
+		<method name="eraOf(I)Ljava/time/chrono/HijrahEra;" />
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/HijrahDate;" />
+		<field name="INSTANCE" />
+	</class>
+	<class name="java/time/chrono/HijrahDate" since="26">
+		<extends name="java/lang/Object" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;" />
+		<method name="getChronology()Ljava/time/chrono/HijrahChronology;" />
+		<method name="getEra()Ljava/time/chrono/HijrahEra;" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/HijrahDate;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/HijrahDate;" />
+		<method name="now()Ljava/time/chrono/HijrahDate;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/HijrahDate;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/HijrahDate;" />
+		<method name="of(III)Ljava/time/chrono/HijrahDate;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/HijrahDate;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/HijrahDate;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/HijrahDate;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/HijrahDate;" />
+		<method name="withVariant(Ljava/time/chrono/HijrahChronology;)Ljava/time/chrono/HijrahDate;" />
+	</class>
+	<class name="java/time/chrono/HijrahEra" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/chrono/Era" />
+		<method name="of(I)Ljava/time/chrono/HijrahEra;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/HijrahEra;" />
+		<method name="values()[Ljava/time/chrono/HijrahEra;" />
+		<field name="AH" />
+	</class>
+	<class name="java/time/chrono/IsoChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology" />
+		<implements name="java/io/Serializable" />
+		<method name="date(III)Ljava/time/LocalDate;" />
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/LocalDate;" />
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;" />
+		<method name="dateEpochDay(J)Ljava/time/LocalDate;" />
+		<method name="dateNow()Ljava/time/LocalDate;" />
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/LocalDate;" />
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/LocalDate;" />
+		<method name="dateYearDay(II)Ljava/time/LocalDate;" />
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/LocalDate;" />
+		<method name="eraOf(I)Ljava/time/chrono/IsoEra;" />
+		<method name="localDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;" />
+		<method name="period(III)Ljava/time/Period;" />
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/LocalDate;" />
+		<method name="zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;" />
+		<method name="zonedDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;" />
+		<field name="INSTANCE" />
+	</class>
+	<class name="java/time/chrono/IsoEra" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/chrono/Era" />
+		<method name="of(I)Ljava/time/chrono/IsoEra;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/IsoEra;" />
+		<method name="values()[Ljava/time/chrono/IsoEra;" />
+		<field name="BCE" />
+		<field name="CE" />
+	</class>
+	<class name="java/time/chrono/JapaneseChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology" />
+		<implements name="java/io/Serializable" />
+		<method name="date(III)Ljava/time/chrono/JapaneseDate;" />
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/JapaneseDate;" />
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="dateEpochDay(J)Ljava/time/chrono/JapaneseDate;" />
+		<method name="dateNow()Ljava/time/chrono/JapaneseDate;" />
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="dateYearDay(II)Ljava/time/chrono/JapaneseDate;" />
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/JapaneseDate;" />
+		<method name="eraOf(I)Ljava/time/chrono/JapaneseEra;" />
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/JapaneseDate;" />
+		<field name="INSTANCE" />
+	</class>
+	<class name="java/time/chrono/JapaneseDate" since="26">
+		<extends name="java/lang/Object" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="getChronology()Ljava/time/chrono/JapaneseChronology;" />
+		<method name="getEra()Ljava/time/chrono/JapaneseEra;" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="now()Ljava/time/chrono/JapaneseDate;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="of(III)Ljava/time/chrono/JapaneseDate;" />
+		<method name="of(Ljava/time/chrono/JapaneseEra;III)Ljava/time/chrono/JapaneseDate;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/JapaneseDate;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/JapaneseDate;" />
+	</class>
+	<class name="java/time/chrono/JapaneseEra" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/time/chrono/Era" />
+		<method name="of(I)Ljava/time/chrono/JapaneseEra;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/JapaneseEra;" />
+		<method name="values()[Ljava/time/chrono/JapaneseEra;" />
+		<field name="HEISEI" />
+		<field name="MEIJI" />
+		<field name="REIWA" since="30" />
+		<field name="SHOWA" />
+		<field name="TAISHO" />
+	</class>
+	<class name="java/time/chrono/MinguoChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology" />
+		<implements name="java/io/Serializable" />
+		<method name="date(III)Ljava/time/chrono/MinguoDate;" />
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/MinguoDate;" />
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;" />
+		<method name="dateEpochDay(J)Ljava/time/chrono/MinguoDate;" />
+		<method name="dateNow()Ljava/time/chrono/MinguoDate;" />
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/MinguoDate;" />
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/MinguoDate;" />
+		<method name="dateYearDay(II)Ljava/time/chrono/MinguoDate;" />
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/MinguoDate;" />
+		<method name="eraOf(I)Ljava/time/chrono/MinguoEra;" />
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/MinguoDate;" />
+		<field name="INSTANCE" />
+	</class>
+	<class name="java/time/chrono/MinguoDate" since="26">
+		<extends name="java/lang/Object" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;" />
+		<method name="getChronology()Ljava/time/chrono/MinguoChronology;" />
+		<method name="getEra()Ljava/time/chrono/MinguoEra;" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/MinguoDate;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/MinguoDate;" />
+		<method name="now()Ljava/time/chrono/MinguoDate;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/MinguoDate;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/MinguoDate;" />
+		<method name="of(III)Ljava/time/chrono/MinguoDate;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/MinguoDate;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/MinguoDate;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/MinguoDate;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/MinguoDate;" />
+	</class>
+	<class name="java/time/chrono/MinguoEra" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/chrono/Era" />
+		<method name="of(I)Ljava/time/chrono/MinguoEra;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/MinguoEra;" />
+		<method name="values()[Ljava/time/chrono/MinguoEra;" />
+		<field name="BEFORE_ROC" />
+		<field name="ROC" />
+	</class>
+	<class name="java/time/chrono/ThaiBuddhistChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology" />
+		<implements name="java/io/Serializable" />
+		<method name="date(III)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="dateEpochDay(J)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="dateNow()Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="dateYearDay(II)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="eraOf(I)Ljava/time/chrono/ThaiBuddhistEra;" />
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<field name="INSTANCE" />
+	</class>
+	<class name="java/time/chrono/ThaiBuddhistDate" since="26">
+		<extends name="java/lang/Object" />
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="getChronology()Ljava/time/chrono/ThaiBuddhistChronology;" />
+		<method name="getEra()Ljava/time/chrono/ThaiBuddhistEra;" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="now()Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="of(III)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ThaiBuddhistDate;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ThaiBuddhistDate;" />
+	</class>
+	<class name="java/time/chrono/ThaiBuddhistEra" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/chrono/Era" />
+		<method name="of(I)Ljava/time/chrono/ThaiBuddhistEra;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/ThaiBuddhistEra;" />
+		<method name="values()[Ljava/time/chrono/ThaiBuddhistEra;" />
+		<field name="BE" />
+		<field name="BEFORE_BE" />
+	</class>
+	<class name="java/time/format/DateTimeFormatter" since="26">
+		<extends name="java/lang/Object" />
+		<method name="format(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/String;" />
+		<method name="formatTo(Ljava/time/temporal/TemporalAccessor;Ljava/lang/Appendable;)V" />
+		<method name="getChronology()Ljava/time/chrono/Chronology;" />
+		<method name="getDecimalStyle()Ljava/time/format/DecimalStyle;" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getResolverFields()Ljava/util/Set;" />
+		<method name="getResolverStyle()Ljava/time/format/ResolverStyle;" />
+		<method name="getZone()Ljava/time/ZoneId;" />
+		<method name="ofLocalizedDate(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="ofLocalizedDateTime(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="ofLocalizedDateTime(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="ofLocalizedTime(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="ofPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="ofPattern(Ljava/lang/String;Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/temporal/TemporalAccessor;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/temporal/TemporalAccessor;" />
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;" />
+		<method name="parseBest(Ljava/lang/CharSequence;[Ljava/time/temporal/TemporalQuery;)Ljava/time/temporal/TemporalAccessor;" />
+		<method name="parseUnresolved(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/temporal/TemporalAccessor;" />
+		<method name="parsedExcessDays()Ljava/time/temporal/TemporalQuery;" />
+		<method name="parsedLeapSecond()Ljava/time/temporal/TemporalQuery;" />
+		<method name="toFormat()Ljava/text/Format;" />
+		<method name="toFormat(Ljava/time/temporal/TemporalQuery;)Ljava/text/Format;" />
+		<method name="withChronology(Ljava/time/chrono/Chronology;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="withDecimalStyle(Ljava/time/format/DecimalStyle;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="withLocale(Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="withResolverFields(Ljava/util/Set;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="withResolverFields([Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="withResolverStyle(Ljava/time/format/ResolverStyle;)Ljava/time/format/DateTimeFormatter;" />
+		<method name="withZone(Ljava/time/ZoneId;)Ljava/time/format/DateTimeFormatter;" />
+		<field name="BASIC_ISO_DATE" />
+		<field name="ISO_DATE" />
+		<field name="ISO_DATE_TIME" />
+		<field name="ISO_INSTANT" />
+		<field name="ISO_LOCAL_DATE" />
+		<field name="ISO_LOCAL_DATE_TIME" />
+		<field name="ISO_LOCAL_TIME" />
+		<field name="ISO_OFFSET_DATE" />
+		<field name="ISO_OFFSET_DATE_TIME" />
+		<field name="ISO_OFFSET_TIME" />
+		<field name="ISO_ORDINAL_DATE" />
+		<field name="ISO_TIME" />
+		<field name="ISO_WEEK_DATE" />
+		<field name="ISO_ZONED_DATE_TIME" />
+		<field name="RFC_1123_DATE_TIME" />
+	</class>
+	<class name="java/time/format/DateTimeFormatterBuilder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="append(Ljava/time/format/DateTimeFormatter;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendChronologyId()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendChronologyText(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendFraction(Ljava/time/temporal/TemporalField;IIZ)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendInstant()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendInstant(I)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendLiteral(C)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendLiteral(Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendLocalized(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendLocalizedOffset(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendOffset(Ljava/lang/String;Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendOffsetId()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendOptional(Ljava/time/format/DateTimeFormatter;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendText(Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendText(Ljava/time/temporal/TemporalField;Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendText(Ljava/time/temporal/TemporalField;Ljava/util/Map;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendValue(Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendValue(Ljava/time/temporal/TemporalField;I)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendValue(Ljava/time/temporal/TemporalField;IILjava/time/format/SignStyle;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendValueReduced(Ljava/time/temporal/TemporalField;III)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendValueReduced(Ljava/time/temporal/TemporalField;IILjava/time/chrono/ChronoLocalDate;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendZoneId()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendZoneOrOffsetId()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendZoneRegionId()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendZoneText(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="appendZoneText(Ljava/time/format/TextStyle;Ljava/util/Set;)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="getLocalizedDateTimePattern(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;Ljava/time/chrono/Chronology;Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="optionalEnd()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="optionalStart()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="padNext(I)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="padNext(IC)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="parseCaseInsensitive()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="parseCaseSensitive()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="parseDefaulting(Ljava/time/temporal/TemporalField;J)Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="parseLenient()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="parseStrict()Ljava/time/format/DateTimeFormatterBuilder;" />
+		<method name="toFormatter()Ljava/time/format/DateTimeFormatter;" />
+		<method name="toFormatter(Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;" />
+	</class>
+	<class name="java/time/format/DateTimeParseException" since="26">
+		<extends name="java/time/DateTimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/CharSequence;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/CharSequence;ILjava/lang/Throwable;)V" />
+		<method name="getErrorIndex()I" />
+		<method name="getParsedString()Ljava/lang/String;" />
+	</class>
+	<class name="java/time/format/DecimalStyle" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getAvailableLocales()Ljava/util/Set;" />
+		<method name="getDecimalSeparator()C" />
+		<method name="getNegativeSign()C" />
+		<method name="getPositiveSign()C" />
+		<method name="getZeroDigit()C" />
+		<method name="of(Ljava/util/Locale;)Ljava/time/format/DecimalStyle;" />
+		<method name="ofDefaultLocale()Ljava/time/format/DecimalStyle;" />
+		<method name="withDecimalSeparator(C)Ljava/time/format/DecimalStyle;" />
+		<method name="withNegativeSign(C)Ljava/time/format/DecimalStyle;" />
+		<method name="withPositiveSign(C)Ljava/time/format/DecimalStyle;" />
+		<method name="withZeroDigit(C)Ljava/time/format/DecimalStyle;" />
+		<field name="STANDARD" />
+	</class>
+	<class name="java/time/format/FormatStyle" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/FormatStyle;" />
+		<method name="values()[Ljava/time/format/FormatStyle;" />
+		<field name="FULL" />
+		<field name="LONG" />
+		<field name="MEDIUM" />
+		<field name="SHORT" />
+	</class>
+	<class name="java/time/format/ResolverStyle" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/ResolverStyle;" />
+		<method name="values()[Ljava/time/format/ResolverStyle;" />
+		<field name="LENIENT" />
+		<field name="SMART" />
+		<field name="STRICT" />
+	</class>
+	<class name="java/time/format/SignStyle" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/SignStyle;" />
+		<method name="values()[Ljava/time/format/SignStyle;" />
+		<field name="ALWAYS" />
+		<field name="EXCEEDS_PAD" />
+		<field name="NEVER" />
+		<field name="NORMAL" />
+		<field name="NOT_NEGATIVE" />
+	</class>
+	<class name="java/time/format/TextStyle" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="asNormal()Ljava/time/format/TextStyle;" />
+		<method name="asStandalone()Ljava/time/format/TextStyle;" />
+		<method name="isStandalone()Z" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/TextStyle;" />
+		<method name="values()[Ljava/time/format/TextStyle;" />
+		<field name="FULL" />
+		<field name="FULL_STANDALONE" />
+		<field name="NARROW" />
+		<field name="NARROW_STANDALONE" />
+		<field name="SHORT" />
+		<field name="SHORT_STANDALONE" />
+	</class>
+	<class name="java/time/temporal/ChronoField" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/temporal/TemporalField" />
+		<method name="checkValidIntValue(J)I" />
+		<method name="checkValidValue(J)J" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/temporal/ChronoField;" />
+		<method name="values()[Ljava/time/temporal/ChronoField;" />
+		<field name="ALIGNED_DAY_OF_WEEK_IN_MONTH" />
+		<field name="ALIGNED_DAY_OF_WEEK_IN_YEAR" />
+		<field name="ALIGNED_WEEK_OF_MONTH" />
+		<field name="ALIGNED_WEEK_OF_YEAR" />
+		<field name="AMPM_OF_DAY" />
+		<field name="CLOCK_HOUR_OF_AMPM" />
+		<field name="CLOCK_HOUR_OF_DAY" />
+		<field name="DAY_OF_MONTH" />
+		<field name="DAY_OF_WEEK" />
+		<field name="DAY_OF_YEAR" />
+		<field name="EPOCH_DAY" />
+		<field name="ERA" />
+		<field name="HOUR_OF_AMPM" />
+		<field name="HOUR_OF_DAY" />
+		<field name="INSTANT_SECONDS" />
+		<field name="MICRO_OF_DAY" />
+		<field name="MICRO_OF_SECOND" />
+		<field name="MILLI_OF_DAY" />
+		<field name="MILLI_OF_SECOND" />
+		<field name="MINUTE_OF_DAY" />
+		<field name="MINUTE_OF_HOUR" />
+		<field name="MONTH_OF_YEAR" />
+		<field name="NANO_OF_DAY" />
+		<field name="NANO_OF_SECOND" />
+		<field name="OFFSET_SECONDS" />
+		<field name="PROLEPTIC_MONTH" />
+		<field name="SECOND_OF_DAY" />
+		<field name="SECOND_OF_MINUTE" />
+		<field name="YEAR" />
+		<field name="YEAR_OF_ERA" />
+	</class>
+	<class name="java/time/temporal/ChronoUnit" since="26">
+		<extends name="java/lang/Enum" />
+		<implements name="java/time/temporal/TemporalUnit" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/temporal/ChronoUnit;" />
+		<method name="values()[Ljava/time/temporal/ChronoUnit;" />
+		<field name="CENTURIES" />
+		<field name="DAYS" />
+		<field name="DECADES" />
+		<field name="ERAS" />
+		<field name="FOREVER" />
+		<field name="HALF_DAYS" />
+		<field name="HOURS" />
+		<field name="MICROS" />
+		<field name="MILLENNIA" />
+		<field name="MILLIS" />
+		<field name="MINUTES" />
+		<field name="MONTHS" />
+		<field name="NANOS" />
+		<field name="SECONDS" />
+		<field name="WEEKS" />
+		<field name="YEARS" />
+	</class>
+	<class name="java/time/temporal/IsoFields" since="26">
+		<extends name="java/lang/Object" />
+		<field name="DAY_OF_QUARTER" />
+		<field name="QUARTER_OF_YEAR" />
+		<field name="QUARTER_YEARS" />
+		<field name="WEEK_BASED_YEAR" />
+		<field name="WEEK_BASED_YEARS" />
+		<field name="WEEK_OF_WEEK_BASED_YEAR" />
+	</class>
+	<class name="java/time/temporal/JulianFields" since="26">
+		<extends name="java/lang/Object" />
+		<field name="JULIAN_DAY" />
+		<field name="MODIFIED_JULIAN_DAY" />
+		<field name="RATA_DIE" />
+	</class>
+	<class name="java/time/temporal/Temporal" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/time/temporal/TemporalAccessor" />
+		<method name="isSupported(Ljava/time/temporal/TemporalUnit;)Z" />
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;" />
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;" />
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;" />
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;" />
+		<method name="until(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J" />
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/temporal/Temporal;" />
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/temporal/Temporal;" />
+	</class>
+	<class name="java/time/temporal/TemporalAccessor" since="26">
+		<extends name="java/lang/Object" />
+		<method name="get(Ljava/time/temporal/TemporalField;)I" />
+		<method name="getLong(Ljava/time/temporal/TemporalField;)J" />
+		<method name="isSupported(Ljava/time/temporal/TemporalField;)Z" />
+		<method name="query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;" />
+		<method name="range(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;" />
+	</class>
+	<class name="java/time/temporal/TemporalAdjuster" since="26">
+		<extends name="java/lang/Object" />
+		<method name="adjustInto(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;" />
+	</class>
+	<class name="java/time/temporal/TemporalAdjusters" since="26">
+		<extends name="java/lang/Object" />
+		<method name="dayOfWeekInMonth(ILjava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="firstDayOfMonth()Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="firstDayOfNextMonth()Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="firstDayOfNextYear()Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="firstDayOfYear()Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="firstInMonth(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="lastDayOfMonth()Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="lastDayOfYear()Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="lastInMonth(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="next(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="nextOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="ofDateAdjuster(Ljava/util/function/UnaryOperator;)Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="previous(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;" />
+		<method name="previousOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;" />
+	</class>
+	<class name="java/time/temporal/TemporalAmount" since="26">
+		<extends name="java/lang/Object" />
+		<method name="addTo(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;" />
+		<method name="get(Ljava/time/temporal/TemporalUnit;)J" />
+		<method name="getUnits()Ljava/util/List;" />
+		<method name="subtractFrom(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;" />
+	</class>
+	<class name="java/time/temporal/TemporalField" since="26">
+		<extends name="java/lang/Object" />
+		<method name="adjustInto(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;" />
+		<method name="getBaseUnit()Ljava/time/temporal/TemporalUnit;" />
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getFrom(Ljava/time/temporal/TemporalAccessor;)J" />
+		<method name="getRangeUnit()Ljava/time/temporal/TemporalUnit;" />
+		<method name="isDateBased()Z" />
+		<method name="isSupportedBy(Ljava/time/temporal/TemporalAccessor;)Z" />
+		<method name="isTimeBased()Z" />
+		<method name="range()Ljava/time/temporal/ValueRange;" />
+		<method name="rangeRefinedBy(Ljava/time/temporal/TemporalAccessor;)Ljava/time/temporal/ValueRange;" />
+		<method name="resolve(Ljava/util/Map;Ljava/time/temporal/TemporalAccessor;Ljava/time/format/ResolverStyle;)Ljava/time/temporal/TemporalAccessor;" />
+	</class>
+	<class name="java/time/temporal/TemporalQueries" since="26">
+		<extends name="java/lang/Object" />
+		<method name="chronology()Ljava/time/temporal/TemporalQuery;" />
+		<method name="localDate()Ljava/time/temporal/TemporalQuery;" />
+		<method name="localTime()Ljava/time/temporal/TemporalQuery;" />
+		<method name="offset()Ljava/time/temporal/TemporalQuery;" />
+		<method name="precision()Ljava/time/temporal/TemporalQuery;" />
+		<method name="zone()Ljava/time/temporal/TemporalQuery;" />
+		<method name="zoneId()Ljava/time/temporal/TemporalQuery;" />
+	</class>
+	<class name="java/time/temporal/TemporalQuery" since="26">
+		<extends name="java/lang/Object" />
+		<method name="queryFrom(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/time/temporal/TemporalUnit" since="26">
+		<extends name="java/lang/Object" />
+		<method name="addTo(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;" />
+		<method name="between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)J" />
+		<method name="getDuration()Ljava/time/Duration;" />
+		<method name="isDateBased()Z" />
+		<method name="isDurationEstimated()Z" />
+		<method name="isSupportedBy(Ljava/time/temporal/Temporal;)Z" />
+		<method name="isTimeBased()Z" />
+	</class>
+	<class name="java/time/temporal/UnsupportedTemporalTypeException" since="26">
+		<extends name="java/time/DateTimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/time/temporal/ValueRange" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="checkValidIntValue(JLjava/time/temporal/TemporalField;)I" />
+		<method name="checkValidValue(JLjava/time/temporal/TemporalField;)J" />
+		<method name="getLargestMinimum()J" />
+		<method name="getMaximum()J" />
+		<method name="getMinimum()J" />
+		<method name="getSmallestMaximum()J" />
+		<method name="isFixed()Z" />
+		<method name="isIntValue()Z" />
+		<method name="isValidIntValue(J)Z" />
+		<method name="isValidValue(J)Z" />
+		<method name="of(JJ)Ljava/time/temporal/ValueRange;" />
+		<method name="of(JJJ)Ljava/time/temporal/ValueRange;" />
+		<method name="of(JJJJ)Ljava/time/temporal/ValueRange;" />
+	</class>
+	<class name="java/time/temporal/WeekFields" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="dayOfWeek()Ljava/time/temporal/TemporalField;" />
+		<method name="getFirstDayOfWeek()Ljava/time/DayOfWeek;" />
+		<method name="getMinimalDaysInFirstWeek()I" />
+		<method name="of(Ljava/time/DayOfWeek;I)Ljava/time/temporal/WeekFields;" />
+		<method name="of(Ljava/util/Locale;)Ljava/time/temporal/WeekFields;" />
+		<method name="weekBasedYear()Ljava/time/temporal/TemporalField;" />
+		<method name="weekOfMonth()Ljava/time/temporal/TemporalField;" />
+		<method name="weekOfWeekBasedYear()Ljava/time/temporal/TemporalField;" />
+		<method name="weekOfYear()Ljava/time/temporal/TemporalField;" />
+		<field name="ISO" />
+		<field name="SUNDAY_START" />
+		<field name="WEEK_BASED_YEARS" />
+	</class>
+	<class name="java/time/zone/ZoneOffsetTransition" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<method name="compareTo(Ljava/time/zone/ZoneOffsetTransition;)I" />
+		<method name="getDateTimeAfter()Ljava/time/LocalDateTime;" />
+		<method name="getDateTimeBefore()Ljava/time/LocalDateTime;" />
+		<method name="getDuration()Ljava/time/Duration;" />
+		<method name="getInstant()Ljava/time/Instant;" />
+		<method name="getOffsetAfter()Ljava/time/ZoneOffset;" />
+		<method name="getOffsetBefore()Ljava/time/ZoneOffset;" />
+		<method name="isGap()Z" />
+		<method name="isOverlap()Z" />
+		<method name="isValidOffset(Ljava/time/ZoneOffset;)Z" />
+		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneOffsetTransition;" />
+		<method name="toEpochSecond()J" />
+	</class>
+	<class name="java/time/zone/ZoneOffsetTransitionRule" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="createTransition(I)Ljava/time/zone/ZoneOffsetTransition;" />
+		<method name="getDayOfMonthIndicator()I" />
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;" />
+		<method name="getLocalTime()Ljava/time/LocalTime;" />
+		<method name="getMonth()Ljava/time/Month;" />
+		<method name="getOffsetAfter()Ljava/time/ZoneOffset;" />
+		<method name="getOffsetBefore()Ljava/time/ZoneOffset;" />
+		<method name="getStandardOffset()Ljava/time/ZoneOffset;" />
+		<method name="getTimeDefinition()Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;" />
+		<method name="isMidnightEndOfDay()Z" />
+		<method name="of(Ljava/time/Month;ILjava/time/DayOfWeek;Ljava/time/LocalTime;ZLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneOffsetTransitionRule;" />
+	</class>
+	<class name="java/time/zone/ZoneOffsetTransitionRule$TimeDefinition" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="createDateTime(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/LocalDateTime;" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;" />
+		<method name="values()[Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;" />
+		<field name="STANDARD" />
+		<field name="UTC" />
+		<field name="WALL" />
+	</class>
+	<class name="java/time/zone/ZoneRules" since="26">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="getDaylightSavings(Ljava/time/Instant;)Ljava/time/Duration;" />
+		<method name="getOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;" />
+		<method name="getOffset(Ljava/time/LocalDateTime;)Ljava/time/ZoneOffset;" />
+		<method name="getStandardOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;" />
+		<method name="getTransition(Ljava/time/LocalDateTime;)Ljava/time/zone/ZoneOffsetTransition;" />
+		<method name="getTransitionRules()Ljava/util/List;" />
+		<method name="getTransitions()Ljava/util/List;" />
+		<method name="getValidOffsets(Ljava/time/LocalDateTime;)Ljava/util/List;" />
+		<method name="isDaylightSavings(Ljava/time/Instant;)Z" />
+		<method name="isFixedOffset()Z" />
+		<method name="isValidOffset(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)Z" />
+		<method name="nextTransition(Ljava/time/Instant;)Ljava/time/zone/ZoneOffsetTransition;" />
+		<method name="of(Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneRules;" />
+		<method name="of(Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/time/zone/ZoneRules;" />
+		<method name="previousTransition(Ljava/time/Instant;)Ljava/time/zone/ZoneOffsetTransition;" />
+	</class>
+	<class name="java/time/zone/ZoneRulesException" since="26">
+		<extends name="java/time/DateTimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/AbstractCollection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Collection" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/AbstractList" since="1">
+		<extends name="java/util/AbstractCollection" />
+		<implements name="java/util/List" />
+		<method name="&lt;init&gt;()V" />
+		<method name="removeRange(II)V" />
+		<field name="modCount" />
+	</class>
+	<class name="java/util/AbstractMap" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Map" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/AbstractMap$SimpleEntry" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/Map$Entry" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map$Entry;)V" />
+	</class>
+	<class name="java/util/AbstractMap$SimpleImmutableEntry" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/Map$Entry" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map$Entry;)V" />
+	</class>
+	<class name="java/util/AbstractQueue" since="1">
+		<extends name="java/util/AbstractCollection" />
+		<implements name="java/util/Queue" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/AbstractSequentialList" since="1">
+		<extends name="java/util/AbstractList" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/AbstractSet" since="1">
+		<extends name="java/util/AbstractCollection" />
+		<implements name="java/util/Set" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/ArrayDeque" since="9">
+		<extends name="java/util/AbstractCollection" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/Deque" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="clone()Ljava/util/ArrayDeque;" />
+	</class>
+	<class name="java/util/ArrayList" since="1">
+		<extends name="java/util/AbstractList" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/RandomAccess" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="ensureCapacity(I)V" />
+		<method name="trimToSize()V" />
+	</class>
+	<class name="java/util/Arrays" since="1">
+		<extends name="java/lang/Object" />
+		<method name="asList([Ljava/lang/Object;)Ljava/util/List;" />
+		<method name="binarySearch([BB)I" />
+		<method name="binarySearch([BIIB)I" since="9" />
+		<method name="binarySearch([CC)I" />
+		<method name="binarySearch([CIIC)I" since="9" />
+		<method name="binarySearch([DD)I" />
+		<method name="binarySearch([DIID)I" since="9" />
+		<method name="binarySearch([FF)I" />
+		<method name="binarySearch([FIIF)I" since="9" />
+		<method name="binarySearch([II)I" />
+		<method name="binarySearch([IIII)I" since="9" />
+		<method name="binarySearch([JIIJ)I" since="9" />
+		<method name="binarySearch([JJ)I" />
+		<method name="binarySearch([Ljava/lang/Object;IILjava/lang/Object;)I" since="9" />
+		<method name="binarySearch([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I" since="9" />
+		<method name="binarySearch([Ljava/lang/Object;Ljava/lang/Object;)I" />
+		<method name="binarySearch([Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I" />
+		<method name="binarySearch([SIIS)I" since="9" />
+		<method name="binarySearch([SS)I" />
+		<method name="copyOf([BI)[B" since="9" />
+		<method name="copyOf([CI)[C" since="9" />
+		<method name="copyOf([DI)[D" since="9" />
+		<method name="copyOf([FI)[F" since="9" />
+		<method name="copyOf([II)[I" since="9" />
+		<method name="copyOf([JI)[J" since="9" />
+		<method name="copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;" since="9" />
+		<method name="copyOf([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;" since="9" />
+		<method name="copyOf([SI)[S" since="9" />
+		<method name="copyOf([ZI)[Z" since="9" />
+		<method name="copyOfRange([BII)[B" since="9" />
+		<method name="copyOfRange([CII)[C" since="9" />
+		<method name="copyOfRange([DII)[D" since="9" />
+		<method name="copyOfRange([FII)[F" since="9" />
+		<method name="copyOfRange([III)[I" since="9" />
+		<method name="copyOfRange([JII)[J" since="9" />
+		<method name="copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;" since="9" />
+		<method name="copyOfRange([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;" since="9" />
+		<method name="copyOfRange([SII)[S" since="9" />
+		<method name="copyOfRange([ZII)[Z" since="9" />
+		<method name="deepEquals([Ljava/lang/Object;[Ljava/lang/Object;)Z" />
+		<method name="deepHashCode([Ljava/lang/Object;)I" />
+		<method name="deepToString([Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="equals([B[B)Z" />
+		<method name="equals([C[C)Z" />
+		<method name="equals([D[D)Z" />
+		<method name="equals([F[F)Z" />
+		<method name="equals([I[I)Z" />
+		<method name="equals([J[J)Z" />
+		<method name="equals([Ljava/lang/Object;[Ljava/lang/Object;)Z" />
+		<method name="equals([S[S)Z" />
+		<method name="equals([Z[Z)Z" />
+		<method name="fill([BB)V" />
+		<method name="fill([BIIB)V" />
+		<method name="fill([CC)V" />
+		<method name="fill([CIIC)V" />
+		<method name="fill([DD)V" />
+		<method name="fill([DIID)V" />
+		<method name="fill([FF)V" />
+		<method name="fill([FIIF)V" />
+		<method name="fill([II)V" />
+		<method name="fill([IIII)V" />
+		<method name="fill([JIIJ)V" />
+		<method name="fill([JJ)V" />
+		<method name="fill([Ljava/lang/Object;IILjava/lang/Object;)V" />
+		<method name="fill([Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="fill([SIIS)V" />
+		<method name="fill([SS)V" />
+		<method name="fill([ZIIZ)V" />
+		<method name="fill([ZZ)V" />
+		<method name="hashCode([B)I" />
+		<method name="hashCode([C)I" />
+		<method name="hashCode([D)I" />
+		<method name="hashCode([F)I" />
+		<method name="hashCode([I)I" />
+		<method name="hashCode([J)I" />
+		<method name="hashCode([Ljava/lang/Object;)I" />
+		<method name="hashCode([S)I" />
+		<method name="hashCode([Z)I" />
+		<method name="parallelPrefix([DIILjava/util/function/DoubleBinaryOperator;)V" since="24" />
+		<method name="parallelPrefix([DLjava/util/function/DoubleBinaryOperator;)V" since="24" />
+		<method name="parallelPrefix([IIILjava/util/function/IntBinaryOperator;)V" since="24" />
+		<method name="parallelPrefix([ILjava/util/function/IntBinaryOperator;)V" since="24" />
+		<method name="parallelPrefix([JIILjava/util/function/LongBinaryOperator;)V" since="24" />
+		<method name="parallelPrefix([JLjava/util/function/LongBinaryOperator;)V" since="24" />
+		<method name="parallelPrefix([Ljava/lang/Object;IILjava/util/function/BinaryOperator;)V" since="24" />
+		<method name="parallelPrefix([Ljava/lang/Object;Ljava/util/function/BinaryOperator;)V" since="24" />
+		<method name="parallelSetAll([DLjava/util/function/IntToDoubleFunction;)V" since="24" />
+		<method name="parallelSetAll([ILjava/util/function/IntUnaryOperator;)V" since="24" />
+		<method name="parallelSetAll([JLjava/util/function/IntToLongFunction;)V" since="24" />
+		<method name="parallelSetAll([Ljava/lang/Object;Ljava/util/function/IntFunction;)V" since="24" />
+		<method name="parallelSort([B)V" since="24" />
+		<method name="parallelSort([BII)V" since="24" />
+		<method name="parallelSort([C)V" since="24" />
+		<method name="parallelSort([CII)V" since="24" />
+		<method name="parallelSort([D)V" since="24" />
+		<method name="parallelSort([DII)V" since="24" />
+		<method name="parallelSort([F)V" since="24" />
+		<method name="parallelSort([FII)V" since="24" />
+		<method name="parallelSort([I)V" since="24" />
+		<method name="parallelSort([III)V" since="24" />
+		<method name="parallelSort([J)V" since="24" />
+		<method name="parallelSort([JII)V" since="24" />
+		<method name="parallelSort([Ljava/lang/Comparable;)V" since="24" />
+		<method name="parallelSort([Ljava/lang/Comparable;II)V" since="24" />
+		<method name="parallelSort([Ljava/lang/Object;IILjava/util/Comparator;)V" since="24" />
+		<method name="parallelSort([Ljava/lang/Object;Ljava/util/Comparator;)V" since="24" />
+		<method name="parallelSort([S)V" since="24" />
+		<method name="parallelSort([SII)V" since="24" />
+		<method name="setAll([DLjava/util/function/IntToDoubleFunction;)V" since="24" />
+		<method name="setAll([ILjava/util/function/IntUnaryOperator;)V" since="24" />
+		<method name="setAll([JLjava/util/function/IntToLongFunction;)V" since="24" />
+		<method name="setAll([Ljava/lang/Object;Ljava/util/function/IntFunction;)V" since="24" />
+		<method name="sort([B)V" />
+		<method name="sort([BII)V" />
+		<method name="sort([C)V" />
+		<method name="sort([CII)V" />
+		<method name="sort([D)V" />
+		<method name="sort([DII)V" />
+		<method name="sort([F)V" />
+		<method name="sort([FII)V" />
+		<method name="sort([I)V" />
+		<method name="sort([III)V" />
+		<method name="sort([J)V" />
+		<method name="sort([JII)V" />
+		<method name="sort([Ljava/lang/Object;)V" />
+		<method name="sort([Ljava/lang/Object;II)V" />
+		<method name="sort([Ljava/lang/Object;IILjava/util/Comparator;)V" />
+		<method name="sort([Ljava/lang/Object;Ljava/util/Comparator;)V" />
+		<method name="sort([S)V" />
+		<method name="sort([SII)V" />
+		<method name="spliterator([D)Ljava/util/Spliterator$OfDouble;" since="24" />
+		<method name="spliterator([DII)Ljava/util/Spliterator$OfDouble;" since="24" />
+		<method name="spliterator([I)Ljava/util/Spliterator$OfInt;" since="24" />
+		<method name="spliterator([III)Ljava/util/Spliterator$OfInt;" since="24" />
+		<method name="spliterator([J)Ljava/util/Spliterator$OfLong;" since="24" />
+		<method name="spliterator([JII)Ljava/util/Spliterator$OfLong;" since="24" />
+		<method name="spliterator([Ljava/lang/Object;)Ljava/util/Spliterator;" since="24" />
+		<method name="spliterator([Ljava/lang/Object;II)Ljava/util/Spliterator;" since="24" />
+		<method name="stream([D)Ljava/util/stream/DoubleStream;" since="24" />
+		<method name="stream([DII)Ljava/util/stream/DoubleStream;" since="24" />
+		<method name="stream([I)Ljava/util/stream/IntStream;" since="24" />
+		<method name="stream([III)Ljava/util/stream/IntStream;" since="24" />
+		<method name="stream([J)Ljava/util/stream/LongStream;" since="24" />
+		<method name="stream([JII)Ljava/util/stream/LongStream;" since="24" />
+		<method name="stream([Ljava/lang/Object;)Ljava/util/stream/Stream;" since="24" />
+		<method name="stream([Ljava/lang/Object;II)Ljava/util/stream/Stream;" since="24" />
+		<method name="toString([B)Ljava/lang/String;" />
+		<method name="toString([C)Ljava/lang/String;" />
+		<method name="toString([D)Ljava/lang/String;" />
+		<method name="toString([F)Ljava/lang/String;" />
+		<method name="toString([I)Ljava/lang/String;" />
+		<method name="toString([J)Ljava/lang/String;" />
+		<method name="toString([Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="toString([S)Ljava/lang/String;" />
+		<method name="toString([Z)Ljava/lang/String;" />
+	</class>
+	<class name="java/util/Base64" since="26">
+		<extends name="java/lang/Object" />
+		<method name="getDecoder()Ljava/util/Base64$Decoder;" />
+		<method name="getEncoder()Ljava/util/Base64$Encoder;" />
+		<method name="getMimeDecoder()Ljava/util/Base64$Decoder;" />
+		<method name="getMimeEncoder()Ljava/util/Base64$Encoder;" />
+		<method name="getMimeEncoder(I[B)Ljava/util/Base64$Encoder;" />
+		<method name="getUrlDecoder()Ljava/util/Base64$Decoder;" />
+		<method name="getUrlEncoder()Ljava/util/Base64$Encoder;" />
+	</class>
+	<class name="java/util/Base64$Decoder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="decode(Ljava/lang/String;)[B" />
+		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;" />
+		<method name="decode([B)[B" />
+		<method name="decode([B[B)I" />
+		<method name="wrap(Ljava/io/InputStream;)Ljava/io/InputStream;" />
+	</class>
+	<class name="java/util/Base64$Encoder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="encode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;" />
+		<method name="encode([B)[B" />
+		<method name="encode([B[B)I" />
+		<method name="encodeToString([B)Ljava/lang/String;" />
+		<method name="withoutPadding()Ljava/util/Base64$Encoder;" />
+		<method name="wrap(Ljava/io/OutputStream;)Ljava/io/OutputStream;" />
+	</class>
+	<class name="java/util/BitSet" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="and(Ljava/util/BitSet;)V" />
+		<method name="andNot(Ljava/util/BitSet;)V" />
+		<method name="cardinality()I" />
+		<method name="clear()V" />
+		<method name="clear(I)V" />
+		<method name="clear(II)V" />
+		<method name="flip(I)V" />
+		<method name="flip(II)V" />
+		<method name="get(I)Z" />
+		<method name="get(II)Ljava/util/BitSet;" />
+		<method name="intersects(Ljava/util/BitSet;)Z" />
+		<method name="isEmpty()Z" />
+		<method name="length()I" />
+		<method name="nextClearBit(I)I" />
+		<method name="nextSetBit(I)I" />
+		<method name="or(Ljava/util/BitSet;)V" />
+		<method name="previousClearBit(I)I" since="19" />
+		<method name="previousSetBit(I)I" since="19" />
+		<method name="set(I)V" />
+		<method name="set(II)V" />
+		<method name="set(IIZ)V" />
+		<method name="set(IZ)V" />
+		<method name="size()I" />
+		<method name="stream()Ljava/util/stream/IntStream;" since="24" />
+		<method name="toByteArray()[B" since="19" />
+		<method name="toLongArray()[J" since="19" />
+		<method name="valueOf(Ljava/nio/ByteBuffer;)Ljava/util/BitSet;" since="19" />
+		<method name="valueOf(Ljava/nio/LongBuffer;)Ljava/util/BitSet;" since="19" />
+		<method name="valueOf([B)Ljava/util/BitSet;" since="19" />
+		<method name="valueOf([J)Ljava/util/BitSet;" since="19" />
+		<method name="xor(Ljava/util/BitSet;)V" />
+	</class>
+	<class name="java/util/Calendar" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/TimeZone;Ljava/util/Locale;)V" />
+		<method name="add(II)V" />
+		<method name="after(Ljava/lang/Object;)Z" />
+		<method name="before(Ljava/lang/Object;)Z" />
+		<method name="clear()V" />
+		<method name="clear(I)V" />
+		<method name="compareTo(Ljava/util/Calendar;)I" />
+		<method name="complete()V" />
+		<method name="computeFields()V" />
+		<method name="computeTime()V" />
+		<method name="get(I)I" />
+		<method name="getActualMaximum(I)I" />
+		<method name="getActualMinimum(I)I" />
+		<method name="getAvailableCalendarTypes()Ljava/util/Set;" since="26" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" />
+		<method name="getCalendarType()Ljava/lang/String;" since="26" />
+		<method name="getDisplayName(IILjava/util/Locale;)Ljava/lang/String;" since="9" />
+		<method name="getDisplayNames(IILjava/util/Locale;)Ljava/util/Map;" since="9" />
+		<method name="getFirstDayOfWeek()I" />
+		<method name="getGreatestMinimum(I)I" />
+		<method name="getInstance()Ljava/util/Calendar;" />
+		<method name="getInstance(Ljava/util/Locale;)Ljava/util/Calendar;" />
+		<method name="getInstance(Ljava/util/TimeZone;)Ljava/util/Calendar;" />
+		<method name="getInstance(Ljava/util/TimeZone;Ljava/util/Locale;)Ljava/util/Calendar;" />
+		<method name="getLeastMaximum(I)I" />
+		<method name="getMaximum(I)I" />
+		<method name="getMinimalDaysInFirstWeek()I" />
+		<method name="getMinimum(I)I" />
+		<method name="getTime()Ljava/util/Date;" />
+		<method name="getTimeInMillis()J" />
+		<method name="getTimeZone()Ljava/util/TimeZone;" />
+		<method name="getWeekYear()I" since="24" />
+		<method name="getWeeksInWeekYear()I" since="24" />
+		<method name="internalGet(I)I" />
+		<method name="isLenient()Z" />
+		<method name="isSet(I)Z" />
+		<method name="isWeekDateSupported()Z" since="24" />
+		<method name="roll(II)V" />
+		<method name="roll(IZ)V" />
+		<method name="set(II)V" />
+		<method name="set(III)V" />
+		<method name="set(IIIII)V" />
+		<method name="set(IIIIII)V" />
+		<method name="setFirstDayOfWeek(I)V" />
+		<method name="setLenient(Z)V" />
+		<method name="setMinimalDaysInFirstWeek(I)V" />
+		<method name="setTime(Ljava/util/Date;)V" />
+		<method name="setTimeInMillis(J)V" />
+		<method name="setTimeZone(Ljava/util/TimeZone;)V" />
+		<method name="setWeekDate(III)V" since="24" />
+		<method name="toInstant()Ljava/time/Instant;" since="26" />
+		<field name="ALL_STYLES" since="9" />
+		<field name="AM" />
+		<field name="AM_PM" />
+		<field name="APRIL" />
+		<field name="AUGUST" />
+		<field name="DATE" />
+		<field name="DAY_OF_MONTH" />
+		<field name="DAY_OF_WEEK" />
+		<field name="DAY_OF_WEEK_IN_MONTH" />
+		<field name="DAY_OF_YEAR" />
+		<field name="DECEMBER" />
+		<field name="DST_OFFSET" />
+		<field name="ERA" />
+		<field name="FEBRUARY" />
+		<field name="FIELD_COUNT" />
+		<field name="FRIDAY" />
+		<field name="HOUR" />
+		<field name="HOUR_OF_DAY" />
+		<field name="JANUARY" />
+		<field name="JULY" />
+		<field name="JUNE" />
+		<field name="LONG" since="9" />
+		<field name="LONG_FORMAT" since="26" />
+		<field name="LONG_STANDALONE" since="26" />
+		<field name="MARCH" />
+		<field name="MAY" />
+		<field name="MILLISECOND" />
+		<field name="MINUTE" />
+		<field name="MONDAY" />
+		<field name="MONTH" />
+		<field name="NARROW_FORMAT" since="26" />
+		<field name="NARROW_STANDALONE" since="26" />
+		<field name="NOVEMBER" />
+		<field name="OCTOBER" />
+		<field name="PM" />
+		<field name="SATURDAY" />
+		<field name="SECOND" />
+		<field name="SEPTEMBER" />
+		<field name="SHORT" since="9" />
+		<field name="SHORT_FORMAT" since="26" />
+		<field name="SHORT_STANDALONE" since="26" />
+		<field name="SUNDAY" />
+		<field name="THURSDAY" />
+		<field name="TUESDAY" />
+		<field name="UNDECIMBER" />
+		<field name="WEDNESDAY" />
+		<field name="WEEK_OF_MONTH" />
+		<field name="WEEK_OF_YEAR" />
+		<field name="YEAR" />
+		<field name="ZONE_OFFSET" />
+		<field name="areFieldsSet" />
+		<field name="fields" />
+		<field name="isSet" />
+		<field name="isTimeSet" />
+		<field name="time" />
+	</class>
+	<class name="java/util/Calendar$Builder" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="build()Ljava/util/Calendar;" />
+		<method name="set(II)Ljava/util/Calendar$Builder;" />
+		<method name="setCalendarType(Ljava/lang/String;)Ljava/util/Calendar$Builder;" />
+		<method name="setDate(III)Ljava/util/Calendar$Builder;" />
+		<method name="setFields([I)Ljava/util/Calendar$Builder;" />
+		<method name="setInstant(J)Ljava/util/Calendar$Builder;" />
+		<method name="setInstant(Ljava/util/Date;)Ljava/util/Calendar$Builder;" />
+		<method name="setLenient(Z)Ljava/util/Calendar$Builder;" />
+		<method name="setLocale(Ljava/util/Locale;)Ljava/util/Calendar$Builder;" />
+		<method name="setTimeOfDay(III)Ljava/util/Calendar$Builder;" />
+		<method name="setTimeOfDay(IIII)Ljava/util/Calendar$Builder;" />
+		<method name="setTimeZone(Ljava/util/TimeZone;)Ljava/util/Calendar$Builder;" />
+		<method name="setWeekDate(III)Ljava/util/Calendar$Builder;" />
+		<method name="setWeekDefinition(II)Ljava/util/Calendar$Builder;" />
+	</class>
+	<class name="java/util/Collection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Iterable" />
+		<method name="add(Ljava/lang/Object;)Z" />
+		<method name="addAll(Ljava/util/Collection;)Z" />
+		<method name="clear()V" />
+		<method name="contains(Ljava/lang/Object;)Z" />
+		<method name="containsAll(Ljava/util/Collection;)Z" />
+		<method name="isEmpty()Z" />
+		<method name="parallelStream()Ljava/util/stream/Stream;" since="24" />
+		<method name="remove(Ljava/lang/Object;)Z" />
+		<method name="removeAll(Ljava/util/Collection;)Z" />
+		<method name="removeIf(Ljava/util/function/Predicate;)Z" since="24" />
+		<method name="retainAll(Ljava/util/Collection;)Z" />
+		<method name="size()I" />
+		<method name="stream()Ljava/util/stream/Stream;" since="24" />
+		<method name="toArray()[Ljava/lang/Object;" />
+		<method name="toArray([Ljava/lang/Object;)[Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/Collections" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z" />
+		<method name="asLifoQueue(Ljava/util/Deque;)Ljava/util/Queue;" since="9" />
+		<method name="binarySearch(Ljava/util/List;Ljava/lang/Object;)I" />
+		<method name="binarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I" />
+		<method name="checkedCollection(Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection;" />
+		<method name="checkedList(Ljava/util/List;Ljava/lang/Class;)Ljava/util/List;" />
+		<method name="checkedMap(Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/Map;" />
+		<method name="checkedNavigableMap(Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/NavigableMap;" since="26" />
+		<method name="checkedNavigableSet(Ljava/util/NavigableSet;Ljava/lang/Class;)Ljava/util/NavigableSet;" since="26" />
+		<method name="checkedQueue(Ljava/util/Queue;Ljava/lang/Class;)Ljava/util/Queue;" since="26" />
+		<method name="checkedSet(Ljava/util/Set;Ljava/lang/Class;)Ljava/util/Set;" />
+		<method name="checkedSortedMap(Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/SortedMap;" />
+		<method name="checkedSortedSet(Ljava/util/SortedSet;Ljava/lang/Class;)Ljava/util/SortedSet;" />
+		<method name="copy(Ljava/util/List;Ljava/util/List;)V" />
+		<method name="disjoint(Ljava/util/Collection;Ljava/util/Collection;)Z" />
+		<method name="emptyEnumeration()Ljava/util/Enumeration;" since="19" />
+		<method name="emptyIterator()Ljava/util/Iterator;" since="19" />
+		<method name="emptyList()Ljava/util/List;" />
+		<method name="emptyListIterator()Ljava/util/ListIterator;" since="19" />
+		<method name="emptyMap()Ljava/util/Map;" />
+		<method name="emptyNavigableMap()Ljava/util/NavigableMap;" since="26" />
+		<method name="emptyNavigableSet()Ljava/util/NavigableSet;" since="26" />
+		<method name="emptySet()Ljava/util/Set;" />
+		<method name="emptySortedMap()Ljava/util/SortedMap;" since="26" />
+		<method name="emptySortedSet()Ljava/util/SortedSet;" since="26" />
+		<method name="enumeration(Ljava/util/Collection;)Ljava/util/Enumeration;" />
+		<method name="fill(Ljava/util/List;Ljava/lang/Object;)V" />
+		<method name="frequency(Ljava/util/Collection;Ljava/lang/Object;)I" />
+		<method name="indexOfSubList(Ljava/util/List;Ljava/util/List;)I" />
+		<method name="lastIndexOfSubList(Ljava/util/List;Ljava/util/List;)I" />
+		<method name="list(Ljava/util/Enumeration;)Ljava/util/ArrayList;" />
+		<method name="max(Ljava/util/Collection;)Ljava/lang/Object;" />
+		<method name="max(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;" />
+		<method name="min(Ljava/util/Collection;)Ljava/lang/Object;" />
+		<method name="min(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;" />
+		<method name="nCopies(ILjava/lang/Object;)Ljava/util/List;" />
+		<method name="newSetFromMap(Ljava/util/Map;)Ljava/util/Set;" since="9" />
+		<method name="replaceAll(Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="reverse(Ljava/util/List;)V" />
+		<method name="reverseOrder()Ljava/util/Comparator;" />
+		<method name="reverseOrder(Ljava/util/Comparator;)Ljava/util/Comparator;" />
+		<method name="rotate(Ljava/util/List;I)V" />
+		<method name="shuffle(Ljava/util/List;)V" />
+		<method name="shuffle(Ljava/util/List;Ljava/util/Random;)V" />
+		<method name="singleton(Ljava/lang/Object;)Ljava/util/Set;" />
+		<method name="singletonList(Ljava/lang/Object;)Ljava/util/List;" />
+		<method name="singletonMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" />
+		<method name="sort(Ljava/util/List;)V" />
+		<method name="sort(Ljava/util/List;Ljava/util/Comparator;)V" />
+		<method name="swap(Ljava/util/List;II)V" />
+		<method name="synchronizedCollection(Ljava/util/Collection;)Ljava/util/Collection;" />
+		<method name="synchronizedList(Ljava/util/List;)Ljava/util/List;" />
+		<method name="synchronizedMap(Ljava/util/Map;)Ljava/util/Map;" />
+		<method name="synchronizedNavigableMap(Ljava/util/NavigableMap;)Ljava/util/NavigableMap;" since="26" />
+		<method name="synchronizedNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;" since="26" />
+		<method name="synchronizedSet(Ljava/util/Set;)Ljava/util/Set;" />
+		<method name="synchronizedSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;" />
+		<method name="synchronizedSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;" />
+		<method name="unmodifiableCollection(Ljava/util/Collection;)Ljava/util/Collection;" />
+		<method name="unmodifiableList(Ljava/util/List;)Ljava/util/List;" />
+		<method name="unmodifiableMap(Ljava/util/Map;)Ljava/util/Map;" />
+		<method name="unmodifiableNavigableMap(Ljava/util/NavigableMap;)Ljava/util/NavigableMap;" since="26" />
+		<method name="unmodifiableNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;" since="26" />
+		<method name="unmodifiableSet(Ljava/util/Set;)Ljava/util/Set;" />
+		<method name="unmodifiableSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;" />
+		<method name="unmodifiableSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;" />
+		<field name="EMPTY_LIST" />
+		<field name="EMPTY_MAP" />
+		<field name="EMPTY_SET" />
+	</class>
+	<class name="java/util/Comparator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="compare(Ljava/lang/Object;Ljava/lang/Object;)I" />
+		<method name="comparing(Ljava/util/function/Function;)Ljava/util/Comparator;" since="24" />
+		<method name="comparing(Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator;" since="24" />
+		<method name="comparingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator;" since="24" />
+		<method name="comparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;" since="24" />
+		<method name="comparingLong(Ljava/util/function/ToLongFunction;)Ljava/util/Comparator;" since="24" />
+		<method name="naturalOrder()Ljava/util/Comparator;" since="24" />
+		<method name="nullsFirst(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24" />
+		<method name="nullsLast(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24" />
+		<method name="reverseOrder()Ljava/util/Comparator;" since="24" />
+		<method name="reversed()Ljava/util/Comparator;" since="24" />
+		<method name="thenComparing(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24" />
+		<method name="thenComparing(Ljava/util/function/Function;)Ljava/util/Comparator;" since="24" />
+		<method name="thenComparing(Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator;" since="24" />
+		<method name="thenComparingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator;" since="24" />
+		<method name="thenComparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;" since="24" />
+		<method name="thenComparingLong(Ljava/util/function/ToLongFunction;)Ljava/util/Comparator;" since="24" />
+	</class>
+	<class name="java/util/ConcurrentModificationException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="19" />
+	</class>
+	<class name="java/util/Currency" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="getAvailableCurrencies()Ljava/util/Set;" since="19" />
+		<method name="getCurrencyCode()Ljava/lang/String;" />
+		<method name="getDefaultFractionDigits()I" />
+		<method name="getDisplayName()Ljava/lang/String;" since="19" />
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;" since="19" />
+		<method name="getInstance(Ljava/lang/String;)Ljava/util/Currency;" />
+		<method name="getInstance(Ljava/util/Locale;)Ljava/util/Currency;" />
+		<method name="getNumericCode()I" since="24" />
+		<method name="getSymbol()Ljava/lang/String;" />
+		<method name="getSymbol(Ljava/util/Locale;)Ljava/lang/String;" />
+	</class>
+	<class name="java/util/Date" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(III)V" deprecated="15" />
+		<method name="&lt;init&gt;(IIIII)V" deprecated="15" />
+		<method name="&lt;init&gt;(IIIIII)V" deprecated="15" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="15" />
+		<method name="UTC(IIIIII)J" deprecated="15" />
+		<method name="after(Ljava/util/Date;)Z" />
+		<method name="before(Ljava/util/Date;)Z" />
+		<method name="compareTo(Ljava/util/Date;)I" />
+		<method name="from(Ljava/time/Instant;)Ljava/util/Date;" since="26" />
+		<method name="getDate()I" deprecated="15" />
+		<method name="getDay()I" deprecated="15" />
+		<method name="getHours()I" deprecated="15" />
+		<method name="getMinutes()I" deprecated="15" />
+		<method name="getMonth()I" deprecated="15" />
+		<method name="getSeconds()I" deprecated="15" />
+		<method name="getTime()J" />
+		<method name="getTimezoneOffset()I" deprecated="15" />
+		<method name="getYear()I" deprecated="15" />
+		<method name="parse(Ljava/lang/String;)J" deprecated="15" />
+		<method name="setDate(I)V" deprecated="15" />
+		<method name="setHours(I)V" deprecated="15" />
+		<method name="setMinutes(I)V" deprecated="15" />
+		<method name="setMonth(I)V" deprecated="15" />
+		<method name="setSeconds(I)V" deprecated="15" />
+		<method name="setTime(J)V" />
+		<method name="setYear(I)V" deprecated="15" />
+		<method name="toGMTString()Ljava/lang/String;" deprecated="15" />
+		<method name="toInstant()Ljava/time/Instant;" since="26" />
+		<method name="toLocaleString()Ljava/lang/String;" deprecated="15" />
+	</class>
+	<class name="java/util/Deque" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Queue" />
+		<method name="addFirst(Ljava/lang/Object;)V" />
+		<method name="addLast(Ljava/lang/Object;)V" />
+		<method name="descendingIterator()Ljava/util/Iterator;" />
+		<method name="getFirst()Ljava/lang/Object;" />
+		<method name="getLast()Ljava/lang/Object;" />
+		<method name="offerFirst(Ljava/lang/Object;)Z" />
+		<method name="offerLast(Ljava/lang/Object;)Z" />
+		<method name="peekFirst()Ljava/lang/Object;" />
+		<method name="peekLast()Ljava/lang/Object;" />
+		<method name="pollFirst()Ljava/lang/Object;" />
+		<method name="pollLast()Ljava/lang/Object;" />
+		<method name="pop()Ljava/lang/Object;" />
+		<method name="push(Ljava/lang/Object;)V" />
+		<method name="removeFirst()Ljava/lang/Object;" />
+		<method name="removeFirstOccurrence(Ljava/lang/Object;)Z" />
+		<method name="removeLast()Ljava/lang/Object;" />
+		<method name="removeLastOccurrence(Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/util/Dictionary" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="elements()Ljava/util/Enumeration;" />
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="isEmpty()Z" />
+		<method name="keys()Ljava/util/Enumeration;" />
+		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="size()I" />
+	</class>
+	<class name="java/util/DoubleSummaryStatistics" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/DoubleConsumer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="combine(Ljava/util/DoubleSummaryStatistics;)V" />
+		<method name="getAverage()D" />
+		<method name="getCount()J" />
+		<method name="getMax()D" />
+		<method name="getMin()D" />
+		<method name="getSum()D" />
+	</class>
+	<class name="java/util/DuplicateFormatFlagsException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getFlags()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/EmptyStackException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/EnumMap" since="1">
+		<extends name="java/util/AbstractMap" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" />
+		<method name="&lt;init&gt;(Ljava/util/EnumMap;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="clone()Ljava/util/EnumMap;" />
+		<method name="put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/EnumSet" since="1">
+		<extends name="java/util/AbstractSet" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="allOf(Ljava/lang/Class;)Ljava/util/EnumSet;" />
+		<method name="clone()Ljava/util/EnumSet;" />
+		<method name="complementOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;" />
+		<method name="copyOf(Ljava/util/Collection;)Ljava/util/EnumSet;" />
+		<method name="copyOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;" />
+		<method name="noneOf(Ljava/lang/Class;)Ljava/util/EnumSet;" />
+		<method name="of(Ljava/lang/Enum;)Ljava/util/EnumSet;" />
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;" />
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;" />
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;" />
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;" />
+		<method name="of(Ljava/lang/Enum;[Ljava/lang/Enum;)Ljava/util/EnumSet;" />
+		<method name="range(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;" />
+	</class>
+	<class name="java/util/Enumeration" since="1">
+		<extends name="java/lang/Object" />
+		<method name="hasMoreElements()Z" />
+		<method name="nextElement()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/EventListener" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/util/EventListenerProxy" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="&lt;init&gt;(Ljava/util/EventListener;)V" />
+		<method name="getListener()Ljava/util/EventListener;" />
+	</class>
+	<class name="java/util/EventObject" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="getSource()Ljava/lang/Object;" />
+		<field name="source" />
+	</class>
+	<class name="java/util/FormatFlagsConversionMismatchException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;C)V" />
+		<method name="getConversion()C" />
+		<method name="getFlags()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/Formattable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="formatTo(Ljava/util/Formatter;III)V" />
+	</class>
+	<class name="java/util/FormattableFlags" since="1">
+		<extends name="java/lang/Object" />
+		<field name="ALTERNATE" />
+		<field name="LEFT_JUSTIFY" />
+		<field name="UPPERCASE" />
+	</class>
+	<class name="java/util/Formatter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" />
+		<implements name="java/io/Flushable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;Ljava/util/Locale;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/lang/String;Ljava/util/Locale;)V" />
+		<method name="&lt;init&gt;(Ljava/io/PrintStream;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Appendable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Appendable;Ljava/util/Locale;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/util/Locale;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" />
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;" />
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;" />
+		<method name="ioException()Ljava/io/IOException;" />
+		<method name="locale()Ljava/util/Locale;" />
+		<method name="out()Ljava/lang/Appendable;" />
+	</class>
+	<class name="java/util/Formatter$BigDecimalLayoutForm" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/Formatter$BigDecimalLayoutForm;" />
+		<method name="values()[Ljava/util/Formatter$BigDecimalLayoutForm;" />
+		<field name="DECIMAL_FLOAT" />
+		<field name="SCIENTIFIC" />
+	</class>
+	<class name="java/util/FormatterClosedException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/GregorianCalendar" since="1">
+		<extends name="java/util/Calendar" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(IIIII)V" />
+		<method name="&lt;init&gt;(IIIIII)V" />
+		<method name="&lt;init&gt;(Ljava/util/Locale;)V" />
+		<method name="&lt;init&gt;(Ljava/util/TimeZone;)V" />
+		<method name="&lt;init&gt;(Ljava/util/TimeZone;Ljava/util/Locale;)V" />
+		<method name="from(Ljava/time/ZonedDateTime;)Ljava/util/GregorianCalendar;" since="26" />
+		<method name="getGregorianChange()Ljava/util/Date;" />
+		<method name="isLeapYear(I)Z" />
+		<method name="setGregorianChange(Ljava/util/Date;)V" />
+		<method name="toZonedDateTime()Ljava/time/ZonedDateTime;" since="26" />
+		<field name="AD" />
+		<field name="BC" />
+	</class>
+	<class name="java/util/HashMap" since="1">
+		<extends name="java/util/AbstractMap" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IF)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+	</class>
+	<class name="java/util/HashSet" since="1">
+		<extends name="java/util/AbstractSet" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IF)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/Hashtable" since="1">
+		<extends name="java/util/Dictionary" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/Map" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IF)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="contains(Ljava/lang/Object;)Z" />
+		<method name="rehash()V" />
+	</class>
+	<class name="java/util/IdentityHashMap" since="1">
+		<extends name="java/util/AbstractMap" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+	</class>
+	<class name="java/util/IllegalFormatCodePointException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getCodePoint()I" />
+	</class>
+	<class name="java/util/IllegalFormatConversionException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(CLjava/lang/Class;)V" />
+		<method name="getArgumentClass()Ljava/lang/Class;" />
+		<method name="getConversion()C" />
+	</class>
+	<class name="java/util/IllegalFormatException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+	</class>
+	<class name="java/util/IllegalFormatFlagsException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getFlags()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/IllegalFormatPrecisionException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getPrecision()I" />
+	</class>
+	<class name="java/util/IllegalFormatWidthException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getWidth()I" />
+	</class>
+	<class name="java/util/IllformedLocaleException" since="21">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="getErrorIndex()I" />
+	</class>
+	<class name="java/util/InputMismatchException" since="1">
+		<extends name="java/util/NoSuchElementException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/IntSummaryStatistics" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/IntConsumer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="combine(Ljava/util/IntSummaryStatistics;)V" />
+		<method name="getAverage()D" />
+		<method name="getCount()J" />
+		<method name="getMax()I" />
+		<method name="getMin()I" />
+		<method name="getSum()J" />
+	</class>
+	<class name="java/util/InvalidPropertiesFormatException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/Iterator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="forEachRemaining(Ljava/util/function/Consumer;)V" since="24" />
+		<method name="hasNext()Z" />
+		<method name="next()Ljava/lang/Object;" />
+		<method name="remove()V" />
+	</class>
+	<class name="java/util/LinkedHashMap" since="1">
+		<extends name="java/util/HashMap" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IF)V" />
+		<method name="&lt;init&gt;(IFZ)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="removeEldestEntry(Ljava/util/Map$Entry;)Z" />
+	</class>
+	<class name="java/util/LinkedHashSet" since="1">
+		<extends name="java/util/HashSet" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IF)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/LinkedList" since="1">
+		<extends name="java/util/AbstractSequentialList" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/Deque" since="9" />
+		<implements name="java/util/Queue" removed="24" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="addFirst(Ljava/lang/Object;)V" />
+		<method name="addLast(Ljava/lang/Object;)V" />
+		<method name="getFirst()Ljava/lang/Object;" />
+		<method name="getLast()Ljava/lang/Object;" />
+		<method name="removeFirst()Ljava/lang/Object;" />
+		<method name="removeLast()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/List" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Collection" />
+		<method name="add(ILjava/lang/Object;)V" />
+		<method name="addAll(ILjava/util/Collection;)Z" />
+		<method name="copyOf(Ljava/util/Collection;)Ljava/util/List;" since="31" />
+		<method name="get(I)Ljava/lang/Object;" />
+		<method name="indexOf(Ljava/lang/Object;)I" />
+		<method name="lastIndexOf(Ljava/lang/Object;)I" />
+		<method name="listIterator()Ljava/util/ListIterator;" />
+		<method name="listIterator(I)Ljava/util/ListIterator;" />
+		<method name="of()Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="of([Ljava/lang/Object;)Ljava/util/List;" since="30" />
+		<method name="remove(I)Ljava/lang/Object;" />
+		<method name="replaceAll(Ljava/util/function/UnaryOperator;)V" since="24" />
+		<method name="set(ILjava/lang/Object;)Ljava/lang/Object;" />
+		<method name="sort(Ljava/util/Comparator;)V" since="24" />
+		<method name="subList(II)Ljava/util/List;" />
+	</class>
+	<class name="java/util/ListIterator" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Iterator" />
+		<method name="add(Ljava/lang/Object;)V" />
+		<method name="hasPrevious()Z" />
+		<method name="nextIndex()I" />
+		<method name="previous()Ljava/lang/Object;" />
+		<method name="previousIndex()I" />
+		<method name="set(Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/util/ListResourceBundle" since="1">
+		<extends name="java/util/ResourceBundle" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getContents()[[Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/Locale" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="filter(Ljava/util/List;Ljava/util/Collection;)Ljava/util/List;" since="26" />
+		<method name="filter(Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List;" since="26" />
+		<method name="filterTags(Ljava/util/List;Ljava/util/Collection;)Ljava/util/List;" since="26" />
+		<method name="filterTags(Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List;" since="26" />
+		<method name="forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;" since="21" />
+		<method name="getAvailableLocales()[Ljava/util/Locale;" />
+		<method name="getCountry()Ljava/lang/String;" />
+		<method name="getDefault()Ljava/util/Locale;" />
+		<method name="getDefault(Ljava/util/Locale$Category;)Ljava/util/Locale;" since="24" />
+		<method name="getDisplayCountry()Ljava/lang/String;" />
+		<method name="getDisplayCountry(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getDisplayLanguage()Ljava/lang/String;" />
+		<method name="getDisplayLanguage(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getDisplayName()Ljava/lang/String;" />
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getDisplayScript()Ljava/lang/String;" since="21" />
+		<method name="getDisplayScript(Ljava/util/Locale;)Ljava/lang/String;" since="21" />
+		<method name="getDisplayVariant()Ljava/lang/String;" />
+		<method name="getDisplayVariant(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getExtension(C)Ljava/lang/String;" since="21" />
+		<method name="getExtensionKeys()Ljava/util/Set;" since="21" />
+		<method name="getISO3Country()Ljava/lang/String;" />
+		<method name="getISO3Language()Ljava/lang/String;" />
+		<method name="getISOCountries()[Ljava/lang/String;" />
+		<method name="getISOLanguages()[Ljava/lang/String;" />
+		<method name="getLanguage()Ljava/lang/String;" />
+		<method name="getScript()Ljava/lang/String;" since="21" />
+		<method name="getUnicodeLocaleAttributes()Ljava/util/Set;" since="21" />
+		<method name="getUnicodeLocaleKeys()Ljava/util/Set;" since="21" />
+		<method name="getUnicodeLocaleType(Ljava/lang/String;)Ljava/lang/String;" since="21" />
+		<method name="getVariant()Ljava/lang/String;" />
+		<method name="hasExtensions()Z" since="26" />
+		<method name="lookup(Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale;" since="26" />
+		<method name="lookupTag(Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String;" since="26" />
+		<method name="setDefault(Ljava/util/Locale$Category;Ljava/util/Locale;)V" since="24" />
+		<method name="setDefault(Ljava/util/Locale;)V" />
+		<method name="stripExtensions()Ljava/util/Locale;" since="26" />
+		<method name="toLanguageTag()Ljava/lang/String;" since="21" />
+		<field name="CANADA" />
+		<field name="CANADA_FRENCH" />
+		<field name="CHINA" />
+		<field name="CHINESE" />
+		<field name="ENGLISH" />
+		<field name="FRANCE" />
+		<field name="FRENCH" />
+		<field name="GERMAN" />
+		<field name="GERMANY" />
+		<field name="ITALIAN" />
+		<field name="ITALY" />
+		<field name="JAPAN" />
+		<field name="JAPANESE" />
+		<field name="KOREA" />
+		<field name="KOREAN" />
+		<field name="PRC" />
+		<field name="PRIVATE_USE_EXTENSION" since="21" />
+		<field name="ROOT" since="9" />
+		<field name="SIMPLIFIED_CHINESE" />
+		<field name="TAIWAN" />
+		<field name="TRADITIONAL_CHINESE" />
+		<field name="UK" />
+		<field name="UNICODE_LOCALE_EXTENSION" since="21" />
+		<field name="US" />
+	</class>
+	<class name="java/util/Locale$Builder" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addUnicodeLocaleAttribute(Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="build()Ljava/util/Locale;" />
+		<method name="clear()Ljava/util/Locale$Builder;" />
+		<method name="clearExtensions()Ljava/util/Locale$Builder;" />
+		<method name="removeUnicodeLocaleAttribute(Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="setExtension(CLjava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="setLanguage(Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="setLanguageTag(Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="setLocale(Ljava/util/Locale;)Ljava/util/Locale$Builder;" />
+		<method name="setRegion(Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="setScript(Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="setUnicodeLocaleKeyword(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+		<method name="setVariant(Ljava/lang/String;)Ljava/util/Locale$Builder;" />
+	</class>
+	<class name="java/util/Locale$Category" since="24">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/Locale$Category;" />
+		<method name="values()[Ljava/util/Locale$Category;" />
+		<field name="DISPLAY" />
+		<field name="FORMAT" />
+	</class>
+	<class name="java/util/Locale$FilteringMode" since="26">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/Locale$FilteringMode;" />
+		<method name="values()[Ljava/util/Locale$FilteringMode;" />
+		<field name="AUTOSELECT_FILTERING" />
+		<field name="EXTENDED_FILTERING" />
+		<field name="IGNORE_EXTENDED_RANGES" />
+		<field name="MAP_EXTENDED_RANGES" />
+		<field name="REJECT_EXTENDED_RANGES" />
+	</class>
+	<class name="java/util/Locale$LanguageRange" since="26">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;D)V" />
+		<method name="getRange()Ljava/lang/String;" />
+		<method name="getWeight()D" />
+		<method name="mapEquivalents(Ljava/util/List;Ljava/util/Map;)Ljava/util/List;" />
+		<method name="parse(Ljava/lang/String;)Ljava/util/List;" />
+		<method name="parse(Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;" />
+		<field name="MAX_WEIGHT" />
+		<field name="MIN_WEIGHT" />
+	</class>
+	<class name="java/util/LongSummaryStatistics" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/IntConsumer" />
+		<implements name="java/util/function/LongConsumer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="combine(Ljava/util/LongSummaryStatistics;)V" />
+		<method name="getAverage()D" />
+		<method name="getCount()J" />
+		<method name="getMax()J" />
+		<method name="getMin()J" />
+		<method name="getSum()J" />
+	</class>
+	<class name="java/util/Map" since="1">
+		<extends name="java/lang/Object" />
+		<method name="clear()V" />
+		<method name="compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;" since="24" />
+		<method name="computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="containsKey(Ljava/lang/Object;)Z" />
+		<method name="containsValue(Ljava/lang/Object;)Z" />
+		<method name="copyOf(Ljava/util/Map;)Ljava/util/Map;" since="31" />
+		<method name="entry(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map$Entry;" since="30" />
+		<method name="entrySet()Ljava/util/Set;" />
+		<method name="forEach(Ljava/util/function/BiConsumer;)V" since="24" />
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24" />
+		<method name="isEmpty()Z" />
+		<method name="keySet()Ljava/util/Set;" />
+		<method name="merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="of()Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30" />
+		<method name="ofEntries([Ljava/util/Map$Entry;)Ljava/util/Map;" since="30" />
+		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="putAll(Ljava/util/Map;)V" />
+		<method name="putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24" />
+		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="remove(Ljava/lang/Object;Ljava/lang/Object;)Z" since="24" />
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24" />
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" since="24" />
+		<method name="replaceAll(Ljava/util/function/BiFunction;)V" since="24" />
+		<method name="size()I" />
+		<method name="values()Ljava/util/Collection;" />
+	</class>
+	<class name="java/util/Map$Entry" since="1">
+		<extends name="java/lang/Object" />
+		<method name="comparingByKey()Ljava/util/Comparator;" since="24" />
+		<method name="comparingByKey(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24" />
+		<method name="comparingByValue()Ljava/util/Comparator;" since="24" />
+		<method name="comparingByValue(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24" />
+		<method name="getKey()Ljava/lang/Object;" />
+		<method name="getValue()Ljava/lang/Object;" />
+		<method name="setValue(Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/MissingFormatArgumentException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getFormatSpecifier()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/MissingFormatWidthException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getFormatSpecifier()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/MissingResourceException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getClassName()Ljava/lang/String;" />
+		<method name="getKey()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/NavigableMap" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/SortedMap" />
+		<method name="ceilingEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;" />
+		<method name="ceilingKey(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="descendingKeySet()Ljava/util/NavigableSet;" />
+		<method name="descendingMap()Ljava/util/NavigableMap;" />
+		<method name="firstEntry()Ljava/util/Map$Entry;" />
+		<method name="floorEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;" />
+		<method name="floorKey(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="headMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;" />
+		<method name="higherEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;" />
+		<method name="higherKey(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="lastEntry()Ljava/util/Map$Entry;" />
+		<method name="lowerEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;" />
+		<method name="lowerKey(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="navigableKeySet()Ljava/util/NavigableSet;" />
+		<method name="pollFirstEntry()Ljava/util/Map$Entry;" />
+		<method name="pollLastEntry()Ljava/util/Map$Entry;" />
+		<method name="subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableMap;" />
+		<method name="tailMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;" />
+	</class>
+	<class name="java/util/NavigableSet" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/SortedSet" />
+		<method name="ceiling(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="descendingIterator()Ljava/util/Iterator;" />
+		<method name="descendingSet()Ljava/util/NavigableSet;" />
+		<method name="floor(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="headSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;" />
+		<method name="higher(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="lower(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="pollFirst()Ljava/lang/Object;" />
+		<method name="pollLast()Ljava/lang/Object;" />
+		<method name="subSet(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableSet;" />
+		<method name="tailSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;" />
+	</class>
+	<class name="java/util/NoSuchElementException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/Objects" since="19">
+		<extends name="java/lang/Object" />
+		<method name="checkFromIndexSize(III)I" since="30" />
+		<method name="checkFromToIndex(III)I" since="30" />
+		<method name="checkIndex(II)I" since="30" />
+		<method name="compare(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I" />
+		<method name="deepEquals(Ljava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="hash([Ljava/lang/Object;)I" />
+		<method name="hashCode(Ljava/lang/Object;)I" />
+		<method name="isNull(Ljava/lang/Object;)Z" since="24" />
+		<method name="nonNull(Ljava/lang/Object;)Z" since="24" />
+		<method name="requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="requireNonNull(Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object;" since="24" />
+		<method name="requireNonNullElse(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="30" />
+		<method name="requireNonNullElseGet(Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object;" since="30" />
+		<method name="toString(Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="toString(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="java/util/Observable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addObserver(Ljava/util/Observer;)V" />
+		<method name="clearChanged()V" />
+		<method name="countObservers()I" />
+		<method name="deleteObserver(Ljava/util/Observer;)V" />
+		<method name="deleteObservers()V" />
+		<method name="hasChanged()Z" />
+		<method name="notifyObservers()V" />
+		<method name="notifyObservers(Ljava/lang/Object;)V" />
+		<method name="setChanged()V" />
+	</class>
+	<class name="java/util/Observer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="update(Ljava/util/Observable;Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/util/Optional" since="24">
+		<extends name="java/lang/Object" />
+		<method name="empty()Ljava/util/Optional;" />
+		<method name="filter(Ljava/util/function/Predicate;)Ljava/util/Optional;" />
+		<method name="flatMap(Ljava/util/function/Function;)Ljava/util/Optional;" />
+		<method name="get()Ljava/lang/Object;" />
+		<method name="ifPresent(Ljava/util/function/Consumer;)V" />
+		<method name="isPresent()Z" />
+		<method name="map(Ljava/util/function/Function;)Ljava/util/Optional;" />
+		<method name="of(Ljava/lang/Object;)Ljava/util/Optional;" />
+		<method name="ofNullable(Ljava/lang/Object;)Ljava/util/Optional;" />
+		<method name="orElse(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="orElseGet(Ljava/util/function/Supplier;)Ljava/lang/Object;" />
+		<method name="orElseThrow(Ljava/util/function/Supplier;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/OptionalDouble" since="24">
+		<extends name="java/lang/Object" />
+		<method name="empty()Ljava/util/OptionalDouble;" />
+		<method name="getAsDouble()D" />
+		<method name="ifPresent(Ljava/util/function/DoubleConsumer;)V" />
+		<method name="isPresent()Z" />
+		<method name="of(D)Ljava/util/OptionalDouble;" />
+		<method name="orElse(D)D" />
+		<method name="orElseGet(Ljava/util/function/DoubleSupplier;)D" />
+		<method name="orElseThrow(Ljava/util/function/Supplier;)D" />
+	</class>
+	<class name="java/util/OptionalInt" since="24">
+		<extends name="java/lang/Object" />
+		<method name="empty()Ljava/util/OptionalInt;" />
+		<method name="getAsInt()I" />
+		<method name="ifPresent(Ljava/util/function/IntConsumer;)V" />
+		<method name="isPresent()Z" />
+		<method name="of(I)Ljava/util/OptionalInt;" />
+		<method name="orElse(I)I" />
+		<method name="orElseGet(Ljava/util/function/IntSupplier;)I" />
+		<method name="orElseThrow(Ljava/util/function/Supplier;)I" />
+	</class>
+	<class name="java/util/OptionalLong" since="24">
+		<extends name="java/lang/Object" />
+		<method name="empty()Ljava/util/OptionalLong;" />
+		<method name="getAsLong()J" />
+		<method name="ifPresent(Ljava/util/function/LongConsumer;)V" />
+		<method name="isPresent()Z" />
+		<method name="of(J)Ljava/util/OptionalLong;" />
+		<method name="orElse(J)J" />
+		<method name="orElseGet(Ljava/util/function/LongSupplier;)J" />
+		<method name="orElseThrow(Ljava/util/function/Supplier;)J" />
+	</class>
+	<class name="java/util/PrimitiveIterator" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Iterator" />
+		<method name="forEachRemaining(Ljava/lang/Object;)V" />
+	</class>
+	<class name="java/util/PrimitiveIterator$OfDouble" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/PrimitiveIterator" />
+		<method name="forEachRemaining(Ljava/util/function/DoubleConsumer;)V" />
+		<method name="next()Ljava/lang/Double;" />
+		<method name="nextDouble()D" />
+	</class>
+	<class name="java/util/PrimitiveIterator$OfInt" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/PrimitiveIterator" />
+		<method name="forEachRemaining(Ljava/util/function/IntConsumer;)V" />
+		<method name="next()Ljava/lang/Integer;" />
+		<method name="nextInt()I" />
+	</class>
+	<class name="java/util/PrimitiveIterator$OfLong" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/PrimitiveIterator" />
+		<method name="forEachRemaining(Ljava/util/function/LongConsumer;)V" />
+		<method name="next()Ljava/lang/Long;" />
+		<method name="nextLong()J" />
+	</class>
+	<class name="java/util/PriorityQueue" since="1">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/util/Comparator;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Comparator;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/util/PriorityQueue;)V" />
+		<method name="&lt;init&gt;(Ljava/util/SortedSet;)V" />
+		<method name="comparator()Ljava/util/Comparator;" />
+	</class>
+	<class name="java/util/Properties" since="1">
+		<extends name="java/util/Hashtable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Properties;)V" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="list(Ljava/io/PrintStream;)V" />
+		<method name="list(Ljava/io/PrintWriter;)V" />
+		<method name="load(Ljava/io/InputStream;)V" />
+		<method name="load(Ljava/io/Reader;)V" since="9" />
+		<method name="loadFromXML(Ljava/io/InputStream;)V" />
+		<method name="propertyNames()Ljava/util/Enumeration;" />
+		<method name="save(Ljava/io/OutputStream;Ljava/lang/String;)V" deprecated="15" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="store(Ljava/io/OutputStream;Ljava/lang/String;)V" />
+		<method name="store(Ljava/io/Writer;Ljava/lang/String;)V" since="9" />
+		<method name="storeToXML(Ljava/io/OutputStream;Ljava/lang/String;)V" />
+		<method name="storeToXML(Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="stringPropertyNames()Ljava/util/Set;" since="9" />
+		<field name="defaults" />
+	</class>
+	<class name="java/util/PropertyPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/PropertyResourceBundle" since="1">
+		<extends name="java/util/ResourceBundle" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" since="9" />
+	</class>
+	<class name="java/util/Queue" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Collection" />
+		<method name="element()Ljava/lang/Object;" />
+		<method name="offer(Ljava/lang/Object;)Z" />
+		<method name="peek()Ljava/lang/Object;" />
+		<method name="poll()Ljava/lang/Object;" />
+		<method name="remove()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/Random" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="doubles()Ljava/util/stream/DoubleStream;" since="24" />
+		<method name="doubles(DD)Ljava/util/stream/DoubleStream;" since="24" />
+		<method name="doubles(J)Ljava/util/stream/DoubleStream;" since="24" />
+		<method name="doubles(JDD)Ljava/util/stream/DoubleStream;" since="24" />
+		<method name="ints()Ljava/util/stream/IntStream;" since="24" />
+		<method name="ints(II)Ljava/util/stream/IntStream;" since="24" />
+		<method name="ints(J)Ljava/util/stream/IntStream;" since="24" />
+		<method name="ints(JII)Ljava/util/stream/IntStream;" since="24" />
+		<method name="longs()Ljava/util/stream/LongStream;" since="24" />
+		<method name="longs(J)Ljava/util/stream/LongStream;" since="24" />
+		<method name="longs(JJ)Ljava/util/stream/LongStream;" since="24" />
+		<method name="longs(JJJ)Ljava/util/stream/LongStream;" since="24" />
+		<method name="next(I)I" />
+		<method name="nextBoolean()Z" />
+		<method name="nextBytes([B)V" />
+		<method name="nextDouble()D" />
+		<method name="nextFloat()F" />
+		<method name="nextGaussian()D" />
+		<method name="nextInt()I" />
+		<method name="nextInt(I)I" />
+		<method name="nextLong()J" />
+		<method name="setSeed(J)V" />
+	</class>
+	<class name="java/util/RandomAccess" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/util/ResourceBundle" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clearCache()V" since="9" />
+		<method name="clearCache(Ljava/lang/ClassLoader;)V" since="9" />
+		<method name="containsKey(Ljava/lang/String;)Z" since="9" />
+		<method name="getBaseBundleName()Ljava/lang/String;" since="26" />
+		<method name="getBundle(Ljava/lang/String;)Ljava/util/ResourceBundle;" />
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/ResourceBundle;" />
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;)Ljava/util/ResourceBundle;" />
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9" />
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9" />
+		<method name="getBundle(Ljava/lang/String;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9" />
+		<method name="getKeys()Ljava/util/Enumeration;" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;" />
+		<method name="handleGetObject(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="handleKeySet()Ljava/util/Set;" since="9" />
+		<method name="keySet()Ljava/util/Set;" since="9" />
+		<method name="setParent(Ljava/util/ResourceBundle;)V" />
+		<field name="parent" />
+	</class>
+	<class name="java/util/ResourceBundle$Control" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getCandidateLocales(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/List;" />
+		<method name="getControl(Ljava/util/List;)Ljava/util/ResourceBundle$Control;" />
+		<method name="getFallbackLocale(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/Locale;" />
+		<method name="getFormats(Ljava/lang/String;)Ljava/util/List;" />
+		<method name="getNoFallbackControl(Ljava/util/List;)Ljava/util/ResourceBundle$Control;" />
+		<method name="getTimeToLive(Ljava/lang/String;Ljava/util/Locale;)J" />
+		<method name="needsReload(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle;J)Z" />
+		<method name="newBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/util/ResourceBundle;" />
+		<method name="toBundleName(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="toResourceName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<field name="FORMAT_CLASS" />
+		<field name="FORMAT_DEFAULT" />
+		<field name="FORMAT_PROPERTIES" />
+		<field name="TTL_DONT_CACHE" />
+		<field name="TTL_NO_EXPIRATION_CONTROL" />
+	</class>
+	<class name="java/util/Scanner" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="19" />
+		<implements name="java/util/Iterator" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Readable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/ReadableByteChannel;)V" />
+		<method name="&lt;init&gt;(Ljava/nio/channels/ReadableByteChannel;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/nio/file/Path;)V" since="26" />
+		<method name="&lt;init&gt;(Ljava/nio/file/Path;Ljava/lang/String;)V" since="26" />
+		<method name="close()V" />
+		<method name="delimiter()Ljava/util/regex/Pattern;" />
+		<method name="findInLine(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="findInLine(Ljava/util/regex/Pattern;)Ljava/lang/String;" />
+		<method name="findWithinHorizon(Ljava/lang/String;I)Ljava/lang/String;" />
+		<method name="findWithinHorizon(Ljava/util/regex/Pattern;I)Ljava/lang/String;" />
+		<method name="hasNext(Ljava/lang/String;)Z" />
+		<method name="hasNext(Ljava/util/regex/Pattern;)Z" />
+		<method name="hasNextBigDecimal()Z" />
+		<method name="hasNextBigInteger()Z" />
+		<method name="hasNextBigInteger(I)Z" />
+		<method name="hasNextBoolean()Z" />
+		<method name="hasNextByte()Z" />
+		<method name="hasNextByte(I)Z" />
+		<method name="hasNextDouble()Z" />
+		<method name="hasNextFloat()Z" />
+		<method name="hasNextInt()Z" />
+		<method name="hasNextInt(I)Z" />
+		<method name="hasNextLine()Z" />
+		<method name="hasNextLong()Z" />
+		<method name="hasNextLong(I)Z" />
+		<method name="hasNextShort()Z" />
+		<method name="hasNextShort(I)Z" />
+		<method name="ioException()Ljava/io/IOException;" />
+		<method name="locale()Ljava/util/Locale;" />
+		<method name="match()Ljava/util/regex/MatchResult;" />
+		<method name="next()Ljava/lang/String;" />
+		<method name="next(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="next(Ljava/util/regex/Pattern;)Ljava/lang/String;" />
+		<method name="nextBigDecimal()Ljava/math/BigDecimal;" />
+		<method name="nextBigInteger()Ljava/math/BigInteger;" />
+		<method name="nextBigInteger(I)Ljava/math/BigInteger;" />
+		<method name="nextBoolean()Z" />
+		<method name="nextByte()B" />
+		<method name="nextByte(I)B" />
+		<method name="nextDouble()D" />
+		<method name="nextFloat()F" />
+		<method name="nextInt()I" />
+		<method name="nextInt(I)I" />
+		<method name="nextLine()Ljava/lang/String;" />
+		<method name="nextLong()J" />
+		<method name="nextLong(I)J" />
+		<method name="nextShort()S" />
+		<method name="nextShort(I)S" />
+		<method name="radix()I" />
+		<method name="reset()Ljava/util/Scanner;" since="9" />
+		<method name="skip(Ljava/lang/String;)Ljava/util/Scanner;" />
+		<method name="skip(Ljava/util/regex/Pattern;)Ljava/util/Scanner;" />
+		<method name="useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;" />
+		<method name="useDelimiter(Ljava/util/regex/Pattern;)Ljava/util/Scanner;" />
+		<method name="useLocale(Ljava/util/Locale;)Ljava/util/Scanner;" />
+		<method name="useRadix(I)Ljava/util/Scanner;" />
+	</class>
+	<class name="java/util/ServiceConfigurationError" since="9">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/ServiceLoader" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Iterable" />
+		<method name="load(Ljava/lang/Class;)Ljava/util/ServiceLoader;" />
+		<method name="load(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;" />
+		<method name="loadInstalled(Ljava/lang/Class;)Ljava/util/ServiceLoader;" />
+		<method name="reload()V" />
+	</class>
+	<class name="java/util/Set" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Collection" />
+		<method name="copyOf(Ljava/util/Collection;)Ljava/util/Set;" since="31" />
+		<method name="of()Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+		<method name="of([Ljava/lang/Object;)Ljava/util/Set;" since="30" />
+	</class>
+	<class name="java/util/SimpleTimeZone" since="1">
+		<extends name="java/util/TimeZone" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;IIIIIIII)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;IIIIIIIII)V" />
+		<method name="&lt;init&gt;(ILjava/lang/String;IIIIIIIIIII)V" />
+		<method name="setDSTSavings(I)V" />
+		<method name="setEndRule(III)V" />
+		<method name="setEndRule(IIII)V" />
+		<method name="setEndRule(IIIIZ)V" />
+		<method name="setStartRule(III)V" />
+		<method name="setStartRule(IIII)V" />
+		<method name="setStartRule(IIIIZ)V" />
+		<method name="setStartYear(I)V" />
+		<field name="STANDARD_TIME" />
+		<field name="UTC_TIME" />
+		<field name="WALL_TIME" />
+	</class>
+	<class name="java/util/SortedMap" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Map" />
+		<method name="comparator()Ljava/util/Comparator;" />
+		<method name="firstKey()Ljava/lang/Object;" />
+		<method name="headMap(Ljava/lang/Object;)Ljava/util/SortedMap;" />
+		<method name="lastKey()Ljava/lang/Object;" />
+		<method name="subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedMap;" />
+		<method name="tailMap(Ljava/lang/Object;)Ljava/util/SortedMap;" />
+	</class>
+	<class name="java/util/SortedSet" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Set" />
+		<method name="comparator()Ljava/util/Comparator;" />
+		<method name="first()Ljava/lang/Object;" />
+		<method name="headSet(Ljava/lang/Object;)Ljava/util/SortedSet;" />
+		<method name="last()Ljava/lang/Object;" />
+		<method name="subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedSet;" />
+		<method name="tailSet(Ljava/lang/Object;)Ljava/util/SortedSet;" />
+	</class>
+	<class name="java/util/Spliterator" since="24">
+		<extends name="java/lang/Object" />
+		<method name="characteristics()I" />
+		<method name="estimateSize()J" />
+		<method name="forEachRemaining(Ljava/util/function/Consumer;)V" />
+		<method name="getComparator()Ljava/util/Comparator;" />
+		<method name="getExactSizeIfKnown()J" />
+		<method name="hasCharacteristics(I)Z" />
+		<method name="tryAdvance(Ljava/util/function/Consumer;)Z" />
+		<method name="trySplit()Ljava/util/Spliterator;" />
+		<field name="CONCURRENT" />
+		<field name="DISTINCT" />
+		<field name="IMMUTABLE" />
+		<field name="NONNULL" />
+		<field name="ORDERED" />
+		<field name="SIZED" />
+		<field name="SORTED" />
+		<field name="SUBSIZED" />
+	</class>
+	<class name="java/util/Spliterator$OfDouble" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator$OfPrimitive" />
+		<method name="forEachRemaining(Ljava/util/function/DoubleConsumer;)V" />
+		<method name="tryAdvance(Ljava/util/function/DoubleConsumer;)Z" />
+		<method name="trySplit()Ljava/util/Spliterator$OfDouble;" />
+	</class>
+	<class name="java/util/Spliterator$OfInt" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator$OfPrimitive" />
+		<method name="forEachRemaining(Ljava/util/function/IntConsumer;)V" />
+		<method name="tryAdvance(Ljava/util/function/IntConsumer;)Z" />
+		<method name="trySplit()Ljava/util/Spliterator$OfInt;" />
+	</class>
+	<class name="java/util/Spliterator$OfLong" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator$OfPrimitive" />
+		<method name="forEachRemaining(Ljava/util/function/LongConsumer;)V" />
+		<method name="tryAdvance(Ljava/util/function/LongConsumer;)Z" />
+		<method name="trySplit()Ljava/util/Spliterator$OfLong;" />
+	</class>
+	<class name="java/util/Spliterator$OfPrimitive" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator" />
+		<method name="forEachRemaining(Ljava/lang/Object;)V" />
+		<method name="tryAdvance(Ljava/lang/Object;)Z" />
+		<method name="trySplit()Ljava/util/Spliterator$OfPrimitive;" />
+	</class>
+	<class name="java/util/Spliterators" since="24">
+		<extends name="java/lang/Object" />
+		<method name="emptyDoubleSpliterator()Ljava/util/Spliterator$OfDouble;" />
+		<method name="emptyIntSpliterator()Ljava/util/Spliterator$OfInt;" />
+		<method name="emptyLongSpliterator()Ljava/util/Spliterator$OfLong;" />
+		<method name="emptySpliterator()Ljava/util/Spliterator;" />
+		<method name="iterator(Ljava/util/Spliterator$OfDouble;)Ljava/util/PrimitiveIterator$OfDouble;" />
+		<method name="iterator(Ljava/util/Spliterator$OfInt;)Ljava/util/PrimitiveIterator$OfInt;" />
+		<method name="iterator(Ljava/util/Spliterator$OfLong;)Ljava/util/PrimitiveIterator$OfLong;" />
+		<method name="iterator(Ljava/util/Spliterator;)Ljava/util/Iterator;" />
+		<method name="spliterator(Ljava/util/Collection;I)Ljava/util/Spliterator;" />
+		<method name="spliterator(Ljava/util/Iterator;JI)Ljava/util/Spliterator;" />
+		<method name="spliterator(Ljava/util/PrimitiveIterator$OfDouble;JI)Ljava/util/Spliterator$OfDouble;" />
+		<method name="spliterator(Ljava/util/PrimitiveIterator$OfInt;JI)Ljava/util/Spliterator$OfInt;" />
+		<method name="spliterator(Ljava/util/PrimitiveIterator$OfLong;JI)Ljava/util/Spliterator$OfLong;" />
+		<method name="spliterator([DI)Ljava/util/Spliterator$OfDouble;" />
+		<method name="spliterator([DIII)Ljava/util/Spliterator$OfDouble;" />
+		<method name="spliterator([II)Ljava/util/Spliterator$OfInt;" />
+		<method name="spliterator([IIII)Ljava/util/Spliterator$OfInt;" />
+		<method name="spliterator([JI)Ljava/util/Spliterator$OfLong;" />
+		<method name="spliterator([JIII)Ljava/util/Spliterator$OfLong;" />
+		<method name="spliterator([Ljava/lang/Object;I)Ljava/util/Spliterator;" />
+		<method name="spliterator([Ljava/lang/Object;III)Ljava/util/Spliterator;" />
+		<method name="spliteratorUnknownSize(Ljava/util/Iterator;I)Ljava/util/Spliterator;" />
+		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfDouble;I)Ljava/util/Spliterator$OfDouble;" />
+		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfInt;I)Ljava/util/Spliterator$OfInt;" />
+		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfLong;I)Ljava/util/Spliterator$OfLong;" />
+	</class>
+	<class name="java/util/Spliterators$AbstractDoubleSpliterator" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator$OfDouble" />
+		<method name="&lt;init&gt;(JI)V" />
+	</class>
+	<class name="java/util/Spliterators$AbstractIntSpliterator" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator$OfInt" />
+		<method name="&lt;init&gt;(JI)V" />
+	</class>
+	<class name="java/util/Spliterators$AbstractLongSpliterator" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator$OfLong" />
+		<method name="&lt;init&gt;(JI)V" />
+	</class>
+	<class name="java/util/Spliterators$AbstractSpliterator" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Spliterator" />
+		<method name="&lt;init&gt;(JI)V" />
+	</class>
+	<class name="java/util/SplittableRandom" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="doubles()Ljava/util/stream/DoubleStream;" />
+		<method name="doubles(DD)Ljava/util/stream/DoubleStream;" />
+		<method name="doubles(J)Ljava/util/stream/DoubleStream;" />
+		<method name="doubles(JDD)Ljava/util/stream/DoubleStream;" />
+		<method name="ints()Ljava/util/stream/IntStream;" />
+		<method name="ints(II)Ljava/util/stream/IntStream;" />
+		<method name="ints(J)Ljava/util/stream/IntStream;" />
+		<method name="ints(JII)Ljava/util/stream/IntStream;" />
+		<method name="longs()Ljava/util/stream/LongStream;" />
+		<method name="longs(J)Ljava/util/stream/LongStream;" />
+		<method name="longs(JJ)Ljava/util/stream/LongStream;" />
+		<method name="longs(JJJ)Ljava/util/stream/LongStream;" />
+		<method name="nextBoolean()Z" />
+		<method name="nextDouble()D" />
+		<method name="nextDouble(D)D" />
+		<method name="nextDouble(DD)D" />
+		<method name="nextInt()I" />
+		<method name="nextInt(I)I" />
+		<method name="nextInt(II)I" />
+		<method name="nextLong()J" />
+		<method name="nextLong(J)J" />
+		<method name="nextLong(JJ)J" />
+		<method name="split()Ljava/util/SplittableRandom;" />
+	</class>
+	<class name="java/util/Stack" since="1">
+		<extends name="java/util/Vector" />
+		<method name="&lt;init&gt;()V" />
+		<method name="empty()Z" />
+		<method name="peek()Ljava/lang/Object;" />
+		<method name="pop()Ljava/lang/Object;" />
+		<method name="push(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="search(Ljava/lang/Object;)I" />
+	</class>
+	<class name="java/util/StringJoiner" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" />
+		<method name="add(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;" />
+		<method name="length()I" />
+		<method name="merge(Ljava/util/StringJoiner;)Ljava/util/StringJoiner;" />
+		<method name="setEmptyValue(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;" />
+	</class>
+	<class name="java/util/StringTokenizer" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Enumeration" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Z)V" />
+		<method name="countTokens()I" />
+		<method name="hasMoreTokens()Z" />
+		<method name="nextToken()Ljava/lang/String;" />
+		<method name="nextToken(Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="java/util/TimeZone" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAvailableIDs()[Ljava/lang/String;" />
+		<method name="getAvailableIDs(I)[Ljava/lang/String;" />
+		<method name="getDSTSavings()I" />
+		<method name="getDefault()Ljava/util/TimeZone;" />
+		<method name="getDisplayName()Ljava/lang/String;" />
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;" />
+		<method name="getDisplayName(ZI)Ljava/lang/String;" />
+		<method name="getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;" />
+		<method name="getID()Ljava/lang/String;" />
+		<method name="getOffset(IIIIII)I" />
+		<method name="getOffset(J)I" />
+		<method name="getRawOffset()I" />
+		<method name="getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;" />
+		<method name="getTimeZone(Ljava/time/ZoneId;)Ljava/util/TimeZone;" since="26" />
+		<method name="hasSameRules(Ljava/util/TimeZone;)Z" />
+		<method name="inDaylightTime(Ljava/util/Date;)Z" />
+		<method name="observesDaylightTime()Z" since="24" />
+		<method name="setDefault(Ljava/util/TimeZone;)V" />
+		<method name="setID(Ljava/lang/String;)V" />
+		<method name="setRawOffset(I)V" />
+		<method name="toZoneId()Ljava/time/ZoneId;" since="26" />
+		<method name="useDaylightTime()Z" />
+		<field name="LONG" />
+		<field name="SHORT" />
+	</class>
+	<class name="java/util/Timer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="cancel()V" />
+		<method name="purge()I" />
+		<method name="schedule(Ljava/util/TimerTask;J)V" />
+		<method name="schedule(Ljava/util/TimerTask;JJ)V" />
+		<method name="schedule(Ljava/util/TimerTask;Ljava/util/Date;)V" />
+		<method name="schedule(Ljava/util/TimerTask;Ljava/util/Date;J)V" />
+		<method name="scheduleAtFixedRate(Ljava/util/TimerTask;JJ)V" />
+		<method name="scheduleAtFixedRate(Ljava/util/TimerTask;Ljava/util/Date;J)V" />
+	</class>
+	<class name="java/util/TimerTask" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="cancel()Z" />
+		<method name="scheduledExecutionTime()J" />
+	</class>
+	<class name="java/util/TooManyListenersException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/TreeMap" since="1">
+		<extends name="java/util/AbstractMap" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/NavigableMap" since="9" />
+		<implements name="java/util/SortedMap" removed="24" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Comparator;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="&lt;init&gt;(Ljava/util/SortedMap;)V" />
+	</class>
+	<class name="java/util/TreeSet" since="1">
+		<extends name="java/util/AbstractSet" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/NavigableSet" since="9" />
+		<implements name="java/util/SortedSet" removed="9" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Comparator;)V" />
+		<method name="&lt;init&gt;(Ljava/util/SortedSet;)V" />
+	</class>
+	<class name="java/util/UUID" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Comparable" />
+		<method name="&lt;init&gt;(JJ)V" />
+		<method name="clockSequence()I" />
+		<method name="compareTo(Ljava/util/UUID;)I" />
+		<method name="fromString(Ljava/lang/String;)Ljava/util/UUID;" />
+		<method name="getLeastSignificantBits()J" />
+		<method name="getMostSignificantBits()J" />
+		<method name="nameUUIDFromBytes([B)Ljava/util/UUID;" />
+		<method name="node()J" />
+		<method name="randomUUID()Ljava/util/UUID;" />
+		<method name="timestamp()J" />
+		<method name="variant()I" />
+		<method name="version()I" />
+	</class>
+	<class name="java/util/UnknownFormatConversionException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getConversion()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/UnknownFormatFlagsException" since="1">
+		<extends name="java/util/IllegalFormatException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getFlags()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/Vector" since="1">
+		<extends name="java/util/AbstractList" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/RandomAccess" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="addElement(Ljava/lang/Object;)V" />
+		<method name="capacity()I" />
+		<method name="copyInto([Ljava/lang/Object;)V" />
+		<method name="elementAt(I)Ljava/lang/Object;" />
+		<method name="elements()Ljava/util/Enumeration;" />
+		<method name="ensureCapacity(I)V" />
+		<method name="firstElement()Ljava/lang/Object;" />
+		<method name="indexOf(Ljava/lang/Object;I)I" />
+		<method name="insertElementAt(Ljava/lang/Object;I)V" />
+		<method name="lastElement()Ljava/lang/Object;" />
+		<method name="lastIndexOf(Ljava/lang/Object;I)I" />
+		<method name="removeAllElements()V" />
+		<method name="removeElement(Ljava/lang/Object;)Z" />
+		<method name="removeElementAt(I)V" />
+		<method name="setElementAt(Ljava/lang/Object;I)V" />
+		<method name="setSize(I)V" />
+		<method name="trimToSize()V" />
+		<field name="capacityIncrement" />
+		<field name="elementCount" />
+		<field name="elementData" />
+	</class>
+	<class name="java/util/WeakHashMap" since="1">
+		<extends name="java/util/AbstractMap" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IF)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+	</class>
+	<class name="java/util/concurrent/AbstractExecutorService" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/ExecutorService" />
+		<method name="&lt;init&gt;()V" />
+		<method name="newTaskFor(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/RunnableFuture;" since="9" />
+		<method name="newTaskFor(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/RunnableFuture;" since="9" />
+	</class>
+	<class name="java/util/concurrent/ArrayBlockingQueue" since="1">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/BlockingQueue" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IZ)V" />
+		<method name="&lt;init&gt;(IZLjava/util/Collection;)V" />
+	</class>
+	<class name="java/util/concurrent/BlockingDeque" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Deque" />
+		<implements name="java/util/concurrent/BlockingQueue" />
+		<method name="offerFirst(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="offerLast(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="pollFirst(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" />
+		<method name="pollLast(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" />
+		<method name="putFirst(Ljava/lang/Object;)V" />
+		<method name="putLast(Ljava/lang/Object;)V" />
+		<method name="takeFirst()Ljava/lang/Object;" />
+		<method name="takeLast()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/concurrent/BlockingQueue" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Queue" />
+		<method name="drainTo(Ljava/util/Collection;)I" />
+		<method name="drainTo(Ljava/util/Collection;I)I" />
+		<method name="offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" />
+		<method name="put(Ljava/lang/Object;)V" />
+		<method name="remainingCapacity()I" />
+		<method name="take()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/concurrent/BrokenBarrierException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/concurrent/Callable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="call()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/concurrent/CancellationException" since="1">
+		<extends name="java/lang/IllegalStateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/concurrent/CompletableFuture" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/CompletionStage" />
+		<implements name="java/util/concurrent/Future" />
+		<method name="&lt;init&gt;()V" />
+		<method name="acceptEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="allOf([Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="anyOf([Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="applyToEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="complete(Ljava/lang/Object;)Z" />
+		<method name="completeAsync(Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture;" since="31" />
+		<method name="completeAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" since="31" />
+		<method name="completeExceptionally(Ljava/lang/Throwable;)Z" />
+		<method name="completeOnTimeout(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/CompletableFuture;" since="31" />
+		<method name="completedFuture(Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="completedStage(Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage;" since="31" />
+		<method name="copy()Ljava/util/concurrent/CompletableFuture;" since="31" />
+		<method name="defaultExecutor()Ljava/util/concurrent/Executor;" since="31" />
+		<method name="delayedExecutor(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Executor;" since="31" />
+		<method name="delayedExecutor(JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/Executor;" since="31" />
+		<method name="exceptionally(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="failedFuture(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture;" since="31" />
+		<method name="failedStage(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletionStage;" since="31" />
+		<method name="getNow(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getNumberOfDependents()I" />
+		<method name="handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="handleAsync(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="handleAsync(Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="isCompletedExceptionally()Z" />
+		<method name="join()Ljava/lang/Object;" />
+		<method name="minimalCompletionStage()Ljava/util/concurrent/CompletionStage;" since="31" />
+		<method name="newIncompleteFuture()Ljava/util/concurrent/CompletableFuture;" since="31" />
+		<method name="obtrudeException(Ljava/lang/Throwable;)V" />
+		<method name="obtrudeValue(Ljava/lang/Object;)V" />
+		<method name="orTimeout(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/CompletableFuture;" since="31" />
+		<method name="runAfterBoth(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="runAfterEither(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="runAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="runAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="supplyAsync(Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenAccept(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenAcceptBoth(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenApplyAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenCombine(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenComposeAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenRun(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenRunAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="thenRunAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;" />
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" />
+	</class>
+	<class name="java/util/concurrent/CompletableFuture$AsynchronousCompletionTask" since="24">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="java/util/concurrent/CompletionException" since="24">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/concurrent/CompletionService" since="1">
+		<extends name="java/lang/Object" />
+		<method name="poll()Ljava/util/concurrent/Future;" />
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Future;" />
+		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;" />
+		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;" />
+		<method name="take()Ljava/util/concurrent/Future;" />
+	</class>
+	<class name="java/util/concurrent/CompletionStage" since="24">
+		<extends name="java/lang/Object" />
+		<method name="acceptEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="applyToEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="exceptionally(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="handleAsync(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="handleAsync(Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="runAfterBoth(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="runAfterEither(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenAccept(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenAcceptBoth(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenApplyAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenCombine(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenComposeAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenRun(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenRunAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="thenRunAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="toCompletableFuture()Ljava/util/concurrent/CompletableFuture;" />
+		<method name="whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;" />
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentHashMap" since="1">
+		<extends name="java/util/AbstractMap" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/ConcurrentMap" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IF)V" since="9" />
+		<method name="&lt;init&gt;(IFI)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="contains(Ljava/lang/Object;)Z" />
+		<method name="elements()Ljava/util/Enumeration;" />
+		<method name="forEach(JLjava/util/function/BiConsumer;)V" since="24" />
+		<method name="forEach(JLjava/util/function/BiFunction;Ljava/util/function/Consumer;)V" since="24" />
+		<method name="forEachEntry(JLjava/util/function/Consumer;)V" since="24" />
+		<method name="forEachEntry(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24" />
+		<method name="forEachKey(JLjava/util/function/Consumer;)V" since="24" />
+		<method name="forEachKey(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24" />
+		<method name="forEachValue(JLjava/util/function/Consumer;)V" since="24" />
+		<method name="forEachValue(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24" />
+		<method name="keySet(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24" />
+		<method name="keys()Ljava/util/Enumeration;" />
+		<method name="mappingCount()J" since="24" />
+		<method name="newKeySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24" />
+		<method name="newKeySet(I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24" />
+		<method name="reduce(JLjava/util/function/BiFunction;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="reduceEntries(JLjava/util/function/BiFunction;)Ljava/util/Map$Entry;" since="24" />
+		<method name="reduceEntries(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="reduceEntriesToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24" />
+		<method name="reduceEntriesToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="reduceEntriesToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="reduceKeys(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="reduceKeys(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="reduceKeysToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24" />
+		<method name="reduceKeysToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="reduceKeysToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="reduceToDouble(JLjava/util/function/ToDoubleBiFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24" />
+		<method name="reduceToInt(JLjava/util/function/ToIntBiFunction;ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="reduceToLong(JLjava/util/function/ToLongBiFunction;JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="reduceValues(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="reduceValues(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="reduceValuesToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24" />
+		<method name="reduceValuesToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="reduceValuesToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="search(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24" />
+		<method name="searchEntries(JLjava/util/function/Function;)Ljava/lang/Object;" since="24" />
+		<method name="searchKeys(JLjava/util/function/Function;)Ljava/lang/Object;" since="24" />
+		<method name="searchValues(JLjava/util/function/Function;)Ljava/lang/Object;" since="24" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentHashMap$KeySetView" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Set" />
+		<method name="getMappedValue()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentLinkedDeque" since="21">
+		<extends name="java/util/AbstractCollection" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/Deque" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentLinkedQueue" since="1">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentMap" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Map" />
+		<method name="putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="remove(Ljava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentNavigableMap" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/NavigableMap" />
+		<implements name="java/util/concurrent/ConcurrentMap" />
+		<method name="descendingMap()Ljava/util/concurrent/ConcurrentNavigableMap;" />
+		<method name="headMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;" />
+		<method name="headMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;" />
+		<method name="keySet()Ljava/util/NavigableSet;" />
+		<method name="subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;" />
+		<method name="subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;" />
+		<method name="tailMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;" />
+		<method name="tailMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentSkipListMap" since="9">
+		<extends name="java/util/AbstractMap" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/concurrent/ConcurrentNavigableMap" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Comparator;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="&lt;init&gt;(Ljava/util/SortedMap;)V" />
+		<method name="clone()Ljava/util/concurrent/ConcurrentSkipListMap;" />
+	</class>
+	<class name="java/util/concurrent/ConcurrentSkipListSet" since="9">
+		<extends name="java/util/AbstractSet" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/NavigableSet" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Comparator;)V" />
+		<method name="&lt;init&gt;(Ljava/util/SortedSet;)V" />
+		<method name="clone()Ljava/util/concurrent/ConcurrentSkipListSet;" />
+		<method name="headSet(Ljava/lang/Object;)Ljava/util/NavigableSet;" />
+		<method name="subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/NavigableSet;" />
+		<method name="tailSet(Ljava/lang/Object;)Ljava/util/NavigableSet;" />
+	</class>
+	<class name="java/util/concurrent/CopyOnWriteArrayList" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/List" />
+		<implements name="java/util/RandomAccess" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="&lt;init&gt;([Ljava/lang/Object;)V" />
+		<method name="addAllAbsent(Ljava/util/Collection;)I" />
+		<method name="addIfAbsent(Ljava/lang/Object;)Z" />
+		<method name="indexOf(Ljava/lang/Object;I)I" />
+		<method name="lastIndexOf(Ljava/lang/Object;I)I" />
+	</class>
+	<class name="java/util/concurrent/CopyOnWriteArraySet" since="1">
+		<extends name="java/util/AbstractSet" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/concurrent/CountDownLatch" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="await()V" />
+		<method name="await(JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="countDown()V" />
+		<method name="getCount()J" />
+	</class>
+	<class name="java/util/concurrent/CountedCompleter" since="24">
+		<extends name="java/util/concurrent/ForkJoinTask" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/CountedCompleter;)V" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/CountedCompleter;I)V" />
+		<method name="addToPendingCount(I)V" />
+		<method name="compareAndSetPendingCount(II)Z" />
+		<method name="compute()V" />
+		<method name="decrementPendingCountUnlessZero()I" />
+		<method name="firstComplete()Ljava/util/concurrent/CountedCompleter;" />
+		<method name="getCompleter()Ljava/util/concurrent/CountedCompleter;" />
+		<method name="getPendingCount()I" />
+		<method name="getRoot()Ljava/util/concurrent/CountedCompleter;" />
+		<method name="helpComplete(I)V" />
+		<method name="nextComplete()Ljava/util/concurrent/CountedCompleter;" />
+		<method name="onCompletion(Ljava/util/concurrent/CountedCompleter;)V" />
+		<method name="onExceptionalCompletion(Ljava/lang/Throwable;Ljava/util/concurrent/CountedCompleter;)Z" />
+		<method name="propagateCompletion()V" />
+		<method name="quietlyCompleteRoot()V" />
+		<method name="setPendingCount(I)V" />
+		<method name="tryComplete()V" />
+	</class>
+	<class name="java/util/concurrent/CyclicBarrier" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/lang/Runnable;)V" />
+		<method name="await()I" />
+		<method name="await(JLjava/util/concurrent/TimeUnit;)I" />
+		<method name="getNumberWaiting()I" />
+		<method name="getParties()I" />
+		<method name="isBroken()Z" />
+		<method name="reset()V" />
+	</class>
+	<class name="java/util/concurrent/DelayQueue" since="1">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/util/concurrent/BlockingQueue" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="add(Ljava/util/concurrent/Delayed;)Z" />
+		<method name="offer(Ljava/util/concurrent/Delayed;)Z" />
+		<method name="offer(Ljava/util/concurrent/Delayed;JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="peek()Ljava/util/concurrent/Delayed;" />
+		<method name="poll()Ljava/util/concurrent/Delayed;" />
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Delayed;" />
+		<method name="put(Ljava/util/concurrent/Delayed;)V" />
+		<method name="take()Ljava/util/concurrent/Delayed;" />
+	</class>
+	<class name="java/util/concurrent/Delayed" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Comparable" />
+		<method name="getDelay(Ljava/util/concurrent/TimeUnit;)J" />
+	</class>
+	<class name="java/util/concurrent/Exchanger" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="exchange(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="exchange(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/concurrent/ExecutionException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/concurrent/Executor" since="1">
+		<extends name="java/lang/Object" />
+		<method name="execute(Ljava/lang/Runnable;)V" />
+	</class>
+	<class name="java/util/concurrent/ExecutorCompletionService" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/CompletionService" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/Executor;)V" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/Executor;Ljava/util/concurrent/BlockingQueue;)V" />
+	</class>
+	<class name="java/util/concurrent/ExecutorService" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/Executor" />
+		<method name="awaitTermination(JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="invokeAll(Ljava/util/Collection;)Ljava/util/List;" />
+		<method name="invokeAll(Ljava/util/Collection;JLjava/util/concurrent/TimeUnit;)Ljava/util/List;" />
+		<method name="invokeAny(Ljava/util/Collection;)Ljava/lang/Object;" />
+		<method name="invokeAny(Ljava/util/Collection;JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" />
+		<method name="isShutdown()Z" />
+		<method name="isTerminated()Z" />
+		<method name="shutdown()V" />
+		<method name="shutdownNow()Ljava/util/List;" />
+		<method name="submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;" />
+		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;" />
+		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;" />
+	</class>
+	<class name="java/util/concurrent/Executors" since="1">
+		<extends name="java/lang/Object" />
+		<method name="callable(Ljava/lang/Runnable;)Ljava/util/concurrent/Callable;" />
+		<method name="callable(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Callable;" />
+		<method name="callable(Ljava/security/PrivilegedAction;)Ljava/util/concurrent/Callable;" />
+		<method name="callable(Ljava/security/PrivilegedExceptionAction;)Ljava/util/concurrent/Callable;" />
+		<method name="defaultThreadFactory()Ljava/util/concurrent/ThreadFactory;" />
+		<method name="newCachedThreadPool()Ljava/util/concurrent/ExecutorService;" />
+		<method name="newCachedThreadPool(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;" />
+		<method name="newFixedThreadPool(I)Ljava/util/concurrent/ExecutorService;" />
+		<method name="newFixedThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;" />
+		<method name="newScheduledThreadPool(I)Ljava/util/concurrent/ScheduledExecutorService;" />
+		<method name="newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;" />
+		<method name="newSingleThreadExecutor()Ljava/util/concurrent/ExecutorService;" />
+		<method name="newSingleThreadExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;" />
+		<method name="newSingleThreadScheduledExecutor()Ljava/util/concurrent/ScheduledExecutorService;" />
+		<method name="newSingleThreadScheduledExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;" />
+		<method name="newWorkStealingPool()Ljava/util/concurrent/ExecutorService;" since="24" />
+		<method name="newWorkStealingPool(I)Ljava/util/concurrent/ExecutorService;" since="24" />
+		<method name="privilegedCallable(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Callable;" />
+		<method name="privilegedCallableUsingCurrentClassLoader(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Callable;" />
+		<method name="privilegedThreadFactory()Ljava/util/concurrent/ThreadFactory;" />
+		<method name="unconfigurableExecutorService(Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/ExecutorService;" />
+		<method name="unconfigurableScheduledExecutorService(Ljava/util/concurrent/ScheduledExecutorService;)Ljava/util/concurrent/ScheduledExecutorService;" />
+	</class>
+	<class name="java/util/concurrent/Flow" since="30">
+		<extends name="java/lang/Object" />
+		<method name="defaultBufferSize()I" />
+	</class>
+	<class name="java/util/concurrent/Flow$Processor" since="30">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/Flow$Publisher" />
+		<implements name="java/util/concurrent/Flow$Subscriber" />
+	</class>
+	<class name="java/util/concurrent/Flow$Publisher" since="30">
+		<extends name="java/lang/Object" />
+		<method name="subscribe(Ljava/util/concurrent/Flow$Subscriber;)V" />
+	</class>
+	<class name="java/util/concurrent/Flow$Subscriber" since="30">
+		<extends name="java/lang/Object" />
+		<method name="onComplete()V" />
+		<method name="onError(Ljava/lang/Throwable;)V" />
+		<method name="onNext(Ljava/lang/Object;)V" />
+		<method name="onSubscribe(Ljava/util/concurrent/Flow$Subscription;)V" />
+	</class>
+	<class name="java/util/concurrent/Flow$Subscription" since="30">
+		<extends name="java/lang/Object" />
+		<method name="cancel()V" />
+		<method name="request(J)V" />
+	</class>
+	<class name="java/util/concurrent/ForkJoinPool" since="21">
+		<extends name="java/util/concurrent/AbstractExecutorService" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;Ljava/lang/Thread$UncaughtExceptionHandler;Z)V" />
+		<method name="awaitQuiescence(JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="commonPool()Ljava/util/concurrent/ForkJoinPool;" since="24" />
+		<method name="drainTasksTo(Ljava/util/Collection;)I" />
+		<method name="execute(Ljava/util/concurrent/ForkJoinTask;)V" />
+		<method name="getActiveThreadCount()I" />
+		<method name="getAsyncMode()Z" />
+		<method name="getCommonPoolParallelism()I" since="24" />
+		<method name="getFactory()Ljava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;" />
+		<method name="getParallelism()I" />
+		<method name="getPoolSize()I" />
+		<method name="getQueuedSubmissionCount()I" />
+		<method name="getQueuedTaskCount()J" />
+		<method name="getRunningThreadCount()I" />
+		<method name="getStealCount()J" />
+		<method name="getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;" />
+		<method name="hasQueuedSubmissions()Z" />
+		<method name="invoke(Ljava/util/concurrent/ForkJoinTask;)Ljava/lang/Object;" />
+		<method name="isQuiescent()Z" />
+		<method name="isTerminating()Z" />
+		<method name="managedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V" />
+		<method name="pollSubmission()Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="submit(Ljava/lang/Runnable;)Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="submit(Ljava/util/concurrent/ForkJoinTask;)Ljava/util/concurrent/ForkJoinTask;" />
+		<field name="defaultForkJoinWorkerThreadFactory" />
+	</class>
+	<class name="java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory" since="21">
+		<extends name="java/lang/Object" />
+		<method name="newThread(Ljava/util/concurrent/ForkJoinPool;)Ljava/util/concurrent/ForkJoinWorkerThread;" />
+	</class>
+	<class name="java/util/concurrent/ForkJoinPool$ManagedBlocker" since="21">
+		<extends name="java/lang/Object" />
+		<method name="block()Z" />
+		<method name="isReleasable()Z" />
+	</class>
+	<class name="java/util/concurrent/ForkJoinTask" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/Future" />
+		<method name="&lt;init&gt;()V" />
+		<method name="adapt(Ljava/lang/Runnable;)Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="adapt(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="adapt(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="compareAndSetForkJoinTaskTag(SS)Z" since="24" />
+		<method name="complete(Ljava/lang/Object;)V" />
+		<method name="completeExceptionally(Ljava/lang/Throwable;)V" />
+		<method name="exec()Z" />
+		<method name="fork()Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="getException()Ljava/lang/Throwable;" />
+		<method name="getForkJoinTaskTag()S" since="24" />
+		<method name="getPool()Ljava/util/concurrent/ForkJoinPool;" />
+		<method name="getQueuedTaskCount()I" />
+		<method name="getRawResult()Ljava/lang/Object;" />
+		<method name="getSurplusQueuedTaskCount()I" />
+		<method name="helpQuiesce()V" />
+		<method name="inForkJoinPool()Z" />
+		<method name="invoke()Ljava/lang/Object;" />
+		<method name="invokeAll(Ljava/util/Collection;)Ljava/util/Collection;" />
+		<method name="invokeAll(Ljava/util/concurrent/ForkJoinTask;Ljava/util/concurrent/ForkJoinTask;)V" />
+		<method name="invokeAll([Ljava/util/concurrent/ForkJoinTask;)V" />
+		<method name="isCompletedAbnormally()Z" />
+		<method name="isCompletedNormally()Z" />
+		<method name="join()Ljava/lang/Object;" />
+		<method name="peekNextLocalTask()Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="pollNextLocalTask()Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="pollTask()Ljava/util/concurrent/ForkJoinTask;" />
+		<method name="quietlyComplete()V" since="24" />
+		<method name="quietlyInvoke()V" />
+		<method name="quietlyJoin()V" />
+		<method name="reinitialize()V" />
+		<method name="setForkJoinTaskTag(S)S" since="24" />
+		<method name="setRawResult(Ljava/lang/Object;)V" />
+		<method name="tryUnfork()Z" />
+	</class>
+	<class name="java/util/concurrent/ForkJoinWorkerThread" since="21">
+		<extends name="java/lang/Thread" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/ForkJoinPool;)V" />
+		<method name="getPool()Ljava/util/concurrent/ForkJoinPool;" />
+		<method name="getPoolIndex()I" />
+		<method name="onStart()V" />
+		<method name="onTermination(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/concurrent/Future" since="1">
+		<extends name="java/lang/Object" />
+		<method name="cancel(Z)Z" />
+		<method name="get()Ljava/lang/Object;" />
+		<method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" />
+		<method name="isCancelled()Z" />
+		<method name="isDone()Z" />
+	</class>
+	<class name="java/util/concurrent/FutureTask" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" removed="9" />
+		<implements name="java/util/concurrent/Future" removed="9" />
+		<implements name="java/util/concurrent/RunnableFuture" since="9" />
+		<method name="&lt;init&gt;(Ljava/lang/Runnable;Ljava/lang/Object;)V" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/Callable;)V" />
+		<method name="done()V" />
+		<method name="runAndReset()Z" />
+		<method name="set(Ljava/lang/Object;)V" />
+		<method name="setException(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/concurrent/LinkedBlockingDeque" since="9">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/BlockingDeque" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/concurrent/LinkedBlockingQueue" since="1">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/BlockingQueue" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/concurrent/LinkedTransferQueue" since="21">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/TransferQueue" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+	</class>
+	<class name="java/util/concurrent/Phaser" since="21">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/Phaser;)V" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/Phaser;I)V" />
+		<method name="arrive()I" />
+		<method name="arriveAndAwaitAdvance()I" />
+		<method name="arriveAndDeregister()I" />
+		<method name="awaitAdvance(I)I" />
+		<method name="awaitAdvanceInterruptibly(I)I" />
+		<method name="awaitAdvanceInterruptibly(IJLjava/util/concurrent/TimeUnit;)I" />
+		<method name="bulkRegister(I)I" />
+		<method name="forceTermination()V" />
+		<method name="getArrivedParties()I" />
+		<method name="getParent()Ljava/util/concurrent/Phaser;" />
+		<method name="getPhase()I" />
+		<method name="getRegisteredParties()I" />
+		<method name="getRoot()Ljava/util/concurrent/Phaser;" />
+		<method name="getUnarrivedParties()I" />
+		<method name="isTerminated()Z" />
+		<method name="onAdvance(II)Z" />
+		<method name="register()I" />
+	</class>
+	<class name="java/util/concurrent/PriorityBlockingQueue" since="1">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/BlockingQueue" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/util/Comparator;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="comparator()Ljava/util/Comparator;" />
+	</class>
+	<class name="java/util/concurrent/RecursiveAction" since="21">
+		<extends name="java/util/concurrent/ForkJoinTask" />
+		<method name="&lt;init&gt;()V" />
+		<method name="compute()V" />
+		<method name="getRawResult()Ljava/lang/Void;" />
+		<method name="setRawResult(Ljava/lang/Void;)V" />
+	</class>
+	<class name="java/util/concurrent/RecursiveTask" since="21">
+		<extends name="java/util/concurrent/ForkJoinTask" />
+		<method name="&lt;init&gt;()V" />
+		<method name="compute()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/concurrent/RejectedExecutionException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/concurrent/RejectedExecutionHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V" />
+	</class>
+	<class name="java/util/concurrent/RunnableFuture" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" />
+		<implements name="java/util/concurrent/Future" />
+	</class>
+	<class name="java/util/concurrent/RunnableScheduledFuture" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/RunnableFuture" />
+		<implements name="java/util/concurrent/ScheduledFuture" />
+		<method name="isPeriodic()Z" />
+	</class>
+	<class name="java/util/concurrent/ScheduledExecutorService" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/ExecutorService" />
+		<method name="schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;" />
+		<method name="schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;" />
+		<method name="scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;" />
+		<method name="scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;" />
+	</class>
+	<class name="java/util/concurrent/ScheduledFuture" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/Delayed" />
+		<implements name="java/util/concurrent/Future" />
+	</class>
+	<class name="java/util/concurrent/ScheduledThreadPoolExecutor" since="1">
+		<extends name="java/util/concurrent/ThreadPoolExecutor" />
+		<implements name="java/util/concurrent/ScheduledExecutorService" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(ILjava/util/concurrent/RejectedExecutionHandler;)V" />
+		<method name="&lt;init&gt;(ILjava/util/concurrent/ThreadFactory;)V" />
+		<method name="&lt;init&gt;(ILjava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V" />
+		<method name="decorateTask(Ljava/lang/Runnable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;" since="9" />
+		<method name="decorateTask(Ljava/util/concurrent/Callable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;" since="9" />
+		<method name="getContinueExistingPeriodicTasksAfterShutdownPolicy()Z" />
+		<method name="getExecuteExistingDelayedTasksAfterShutdownPolicy()Z" />
+		<method name="getRemoveOnCancelPolicy()Z" since="21" />
+		<method name="setContinueExistingPeriodicTasksAfterShutdownPolicy(Z)V" />
+		<method name="setExecuteExistingDelayedTasksAfterShutdownPolicy(Z)V" />
+		<method name="setRemoveOnCancelPolicy(Z)V" since="21" />
+	</class>
+	<class name="java/util/concurrent/Semaphore" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IZ)V" />
+		<method name="acquire()V" />
+		<method name="acquire(I)V" />
+		<method name="acquireUninterruptibly()V" />
+		<method name="acquireUninterruptibly(I)V" />
+		<method name="availablePermits()I" />
+		<method name="drainPermits()I" />
+		<method name="getQueueLength()I" />
+		<method name="getQueuedThreads()Ljava/util/Collection;" />
+		<method name="hasQueuedThreads()Z" />
+		<method name="isFair()Z" />
+		<method name="reducePermits(I)V" />
+		<method name="release()V" />
+		<method name="release(I)V" />
+		<method name="tryAcquire()Z" />
+		<method name="tryAcquire(I)Z" />
+		<method name="tryAcquire(IJLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="tryAcquire(JLjava/util/concurrent/TimeUnit;)Z" />
+	</class>
+	<class name="java/util/concurrent/SynchronousQueue" since="1">
+		<extends name="java/util/AbstractQueue" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/BlockingQueue" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Z)V" />
+	</class>
+	<class name="java/util/concurrent/ThreadFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;" />
+	</class>
+	<class name="java/util/concurrent/ThreadLocalRandom" since="21">
+		<extends name="java/util/Random" />
+		<method name="current()Ljava/util/concurrent/ThreadLocalRandom;" />
+		<method name="nextDouble(D)D" />
+		<method name="nextDouble(DD)D" />
+		<method name="nextInt(II)I" />
+		<method name="nextLong(J)J" />
+		<method name="nextLong(JJ)J" />
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor" since="1">
+		<extends name="java/util/concurrent/AbstractExecutorService" />
+		<method name="&lt;init&gt;(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;)V" />
+		<method name="&lt;init&gt;(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/RejectedExecutionHandler;)V" />
+		<method name="&lt;init&gt;(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V" />
+		<method name="&lt;init&gt;(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V" />
+		<method name="afterExecute(Ljava/lang/Runnable;Ljava/lang/Throwable;)V" />
+		<method name="allowCoreThreadTimeOut(Z)V" since="9" />
+		<method name="allowsCoreThreadTimeOut()Z" since="9" />
+		<method name="beforeExecute(Ljava/lang/Thread;Ljava/lang/Runnable;)V" />
+		<method name="getActiveCount()I" />
+		<method name="getCompletedTaskCount()J" />
+		<method name="getCorePoolSize()I" />
+		<method name="getKeepAliveTime(Ljava/util/concurrent/TimeUnit;)J" />
+		<method name="getLargestPoolSize()I" />
+		<method name="getMaximumPoolSize()I" />
+		<method name="getPoolSize()I" />
+		<method name="getQueue()Ljava/util/concurrent/BlockingQueue;" />
+		<method name="getRejectedExecutionHandler()Ljava/util/concurrent/RejectedExecutionHandler;" />
+		<method name="getTaskCount()J" />
+		<method name="getThreadFactory()Ljava/util/concurrent/ThreadFactory;" />
+		<method name="isTerminating()Z" />
+		<method name="prestartAllCoreThreads()I" />
+		<method name="prestartCoreThread()Z" />
+		<method name="purge()V" />
+		<method name="remove(Ljava/lang/Runnable;)Z" />
+		<method name="setCorePoolSize(I)V" />
+		<method name="setKeepAliveTime(JLjava/util/concurrent/TimeUnit;)V" />
+		<method name="setMaximumPoolSize(I)V" />
+		<method name="setRejectedExecutionHandler(Ljava/util/concurrent/RejectedExecutionHandler;)V" />
+		<method name="setThreadFactory(Ljava/util/concurrent/ThreadFactory;)V" />
+		<method name="terminated()V" />
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$AbortPolicy" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/RejectedExecutionHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$CallerRunsPolicy" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/RejectedExecutionHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$DiscardOldestPolicy" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/RejectedExecutionHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$DiscardPolicy" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/RejectedExecutionHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/concurrent/TimeUnit" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="convert(JLjava/util/concurrent/TimeUnit;)J" />
+		<method name="sleep(J)V" />
+		<method name="timedJoin(Ljava/lang/Thread;J)V" />
+		<method name="timedWait(Ljava/lang/Object;J)V" />
+		<method name="toDays(J)J" since="9" />
+		<method name="toHours(J)J" since="9" />
+		<method name="toMicros(J)J" />
+		<method name="toMillis(J)J" />
+		<method name="toMinutes(J)J" since="9" />
+		<method name="toNanos(J)J" />
+		<method name="toSeconds(J)J" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/concurrent/TimeUnit;" />
+		<method name="values()[Ljava/util/concurrent/TimeUnit;" />
+		<field name="DAYS" since="9" />
+		<field name="HOURS" since="9" />
+		<field name="MICROSECONDS" />
+		<field name="MILLISECONDS" />
+		<field name="MINUTES" since="9" />
+		<field name="NANOSECONDS" />
+		<field name="SECONDS" />
+	</class>
+	<class name="java/util/concurrent/TimeoutException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/concurrent/TransferQueue" since="21">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/concurrent/BlockingQueue" />
+		<method name="getWaitingConsumerCount()I" />
+		<method name="hasWaitingConsumer()Z" />
+		<method name="transfer(Ljava/lang/Object;)V" />
+		<method name="tryTransfer(Ljava/lang/Object;)Z" />
+		<method name="tryTransfer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicBoolean" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="compareAndSet(ZZ)Z" />
+		<method name="get()Z" />
+		<method name="getAndSet(Z)Z" />
+		<method name="lazySet(Z)V" since="9" />
+		<method name="set(Z)V" />
+		<method name="weakCompareAndSet(ZZ)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicInteger" since="1">
+		<extends name="java/lang/Number" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="accumulateAndGet(ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="addAndGet(I)I" />
+		<method name="compareAndSet(II)Z" />
+		<method name="decrementAndGet()I" />
+		<method name="get()I" />
+		<method name="getAndAccumulate(ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="getAndAdd(I)I" />
+		<method name="getAndDecrement()I" />
+		<method name="getAndIncrement()I" />
+		<method name="getAndSet(I)I" />
+		<method name="getAndUpdate(Ljava/util/function/IntUnaryOperator;)I" since="24" />
+		<method name="incrementAndGet()I" />
+		<method name="lazySet(I)V" since="9" />
+		<method name="set(I)V" />
+		<method name="updateAndGet(Ljava/util/function/IntUnaryOperator;)I" since="24" />
+		<method name="weakCompareAndSet(II)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicIntegerArray" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;([I)V" />
+		<method name="accumulateAndGet(IILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="addAndGet(II)I" />
+		<method name="compareAndSet(III)Z" />
+		<method name="decrementAndGet(I)I" />
+		<method name="get(I)I" />
+		<method name="getAndAccumulate(IILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="getAndAdd(II)I" />
+		<method name="getAndDecrement(I)I" />
+		<method name="getAndIncrement(I)I" />
+		<method name="getAndSet(II)I" />
+		<method name="getAndUpdate(ILjava/util/function/IntUnaryOperator;)I" since="24" />
+		<method name="incrementAndGet(I)I" />
+		<method name="lazySet(II)V" since="9" />
+		<method name="length()I" />
+		<method name="set(II)V" />
+		<method name="updateAndGet(ILjava/util/function/IntUnaryOperator;)I" since="24" />
+		<method name="weakCompareAndSet(III)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicIntegerFieldUpdater" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="accumulateAndGet(Ljava/lang/Object;ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="addAndGet(Ljava/lang/Object;I)I" />
+		<method name="compareAndSet(Ljava/lang/Object;II)Z" />
+		<method name="decrementAndGet(Ljava/lang/Object;)I" />
+		<method name="get(Ljava/lang/Object;)I" />
+		<method name="getAndAccumulate(Ljava/lang/Object;ILjava/util/function/IntBinaryOperator;)I" since="24" />
+		<method name="getAndAdd(Ljava/lang/Object;I)I" />
+		<method name="getAndDecrement(Ljava/lang/Object;)I" />
+		<method name="getAndIncrement(Ljava/lang/Object;)I" />
+		<method name="getAndSet(Ljava/lang/Object;I)I" />
+		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/IntUnaryOperator;)I" since="24" />
+		<method name="incrementAndGet(Ljava/lang/Object;)I" />
+		<method name="lazySet(Ljava/lang/Object;I)V" since="9" />
+		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;" />
+		<method name="set(Ljava/lang/Object;I)V" />
+		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/IntUnaryOperator;)I" since="24" />
+		<method name="weakCompareAndSet(Ljava/lang/Object;II)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicLong" since="1">
+		<extends name="java/lang/Number" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(J)V" />
+		<method name="accumulateAndGet(JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="addAndGet(J)J" />
+		<method name="compareAndSet(JJ)Z" />
+		<method name="decrementAndGet()J" />
+		<method name="get()J" />
+		<method name="getAndAccumulate(JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="getAndAdd(J)J" />
+		<method name="getAndDecrement()J" />
+		<method name="getAndIncrement()J" />
+		<method name="getAndSet(J)J" />
+		<method name="getAndUpdate(Ljava/util/function/LongUnaryOperator;)J" since="24" />
+		<method name="incrementAndGet()J" />
+		<method name="lazySet(J)V" since="9" />
+		<method name="set(J)V" />
+		<method name="updateAndGet(Ljava/util/function/LongUnaryOperator;)J" since="24" />
+		<method name="weakCompareAndSet(JJ)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicLongArray" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;([J)V" />
+		<method name="accumulateAndGet(IJLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="addAndGet(IJ)J" />
+		<method name="compareAndSet(IJJ)Z" />
+		<method name="decrementAndGet(I)J" />
+		<method name="get(I)J" />
+		<method name="getAndAccumulate(IJLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="getAndAdd(IJ)J" />
+		<method name="getAndDecrement(I)J" />
+		<method name="getAndIncrement(I)J" />
+		<method name="getAndSet(IJ)J" />
+		<method name="getAndUpdate(ILjava/util/function/LongUnaryOperator;)J" since="24" />
+		<method name="incrementAndGet(I)J" />
+		<method name="lazySet(IJ)V" since="9" />
+		<method name="length()I" />
+		<method name="set(IJ)V" />
+		<method name="updateAndGet(ILjava/util/function/LongUnaryOperator;)J" since="24" />
+		<method name="weakCompareAndSet(IJJ)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicLongFieldUpdater" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="accumulateAndGet(Ljava/lang/Object;JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="addAndGet(Ljava/lang/Object;J)J" />
+		<method name="compareAndSet(Ljava/lang/Object;JJ)Z" />
+		<method name="decrementAndGet(Ljava/lang/Object;)J" />
+		<method name="get(Ljava/lang/Object;)J" />
+		<method name="getAndAccumulate(Ljava/lang/Object;JLjava/util/function/LongBinaryOperator;)J" since="24" />
+		<method name="getAndAdd(Ljava/lang/Object;J)J" />
+		<method name="getAndDecrement(Ljava/lang/Object;)J" />
+		<method name="getAndIncrement(Ljava/lang/Object;)J" />
+		<method name="getAndSet(Ljava/lang/Object;J)J" />
+		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/LongUnaryOperator;)J" since="24" />
+		<method name="incrementAndGet(Ljava/lang/Object;)J" />
+		<method name="lazySet(Ljava/lang/Object;J)V" since="9" />
+		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;" />
+		<method name="set(Ljava/lang/Object;J)V" />
+		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/LongUnaryOperator;)J" since="24" />
+		<method name="weakCompareAndSet(Ljava/lang/Object;JJ)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicMarkableReference" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;Z)V" />
+		<method name="attemptMark(Ljava/lang/Object;Z)Z" />
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;ZZ)Z" />
+		<method name="get([Z)Ljava/lang/Object;" />
+		<method name="getReference()Ljava/lang/Object;" />
+		<method name="isMarked()Z" />
+		<method name="set(Ljava/lang/Object;Z)V" />
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;ZZ)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicReference" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" />
+		<method name="accumulateAndGet(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="get()Ljava/lang/Object;" />
+		<method name="getAndAccumulate(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="getAndSet(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getAndUpdate(Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="lazySet(Ljava/lang/Object;)V" since="9" />
+		<method name="set(Ljava/lang/Object;)V" />
+		<method name="updateAndGet(Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicReferenceArray" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;([Ljava/lang/Object;)V" />
+		<method name="accumulateAndGet(ILjava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="get(I)Ljava/lang/Object;" />
+		<method name="getAndAccumulate(ILjava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="getAndSet(ILjava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getAndUpdate(ILjava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="lazySet(ILjava/lang/Object;)V" since="9" />
+		<method name="length()I" />
+		<method name="set(ILjava/lang/Object;)V" />
+		<method name="updateAndGet(ILjava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="weakCompareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicReferenceFieldUpdater" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="accumulateAndGet(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getAndAccumulate(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="getAndSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="lazySet(Ljava/lang/Object;Ljava/lang/Object;)V" since="9" />
+		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;" />
+		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24" />
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicStampedReference" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;I)V" />
+		<method name="attemptStamp(Ljava/lang/Object;I)Z" />
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;II)Z" />
+		<method name="get([I)Ljava/lang/Object;" />
+		<method name="getReference()Ljava/lang/Object;" />
+		<method name="getStamp()I" />
+		<method name="set(Ljava/lang/Object;I)V" />
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;II)Z" />
+	</class>
+	<class name="java/util/concurrent/atomic/DoubleAccumulator" since="24">
+		<extends name="java/lang/Number" />
+		<method name="&lt;init&gt;(Ljava/util/function/DoubleBinaryOperator;D)V" />
+		<method name="accumulate(D)V" />
+		<method name="get()D" />
+		<method name="getThenReset()D" />
+		<method name="reset()V" />
+	</class>
+	<class name="java/util/concurrent/atomic/DoubleAdder" since="24">
+		<extends name="java/lang/Number" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(D)V" />
+		<method name="reset()V" />
+		<method name="sum()D" />
+		<method name="sumThenReset()D" />
+	</class>
+	<class name="java/util/concurrent/atomic/LongAccumulator" since="24">
+		<extends name="java/lang/Number" />
+		<method name="&lt;init&gt;(Ljava/util/function/LongBinaryOperator;J)V" />
+		<method name="accumulate(J)V" />
+		<method name="get()J" />
+		<method name="getThenReset()J" />
+		<method name="reset()V" />
+	</class>
+	<class name="java/util/concurrent/atomic/LongAdder" since="24">
+		<extends name="java/lang/Number" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(J)V" />
+		<method name="decrement()V" />
+		<method name="increment()V" />
+		<method name="reset()V" />
+		<method name="sum()J" />
+		<method name="sumThenReset()J" />
+	</class>
+	<class name="java/util/concurrent/locks/AbstractOwnableSynchronizer" since="5">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getExclusiveOwnerThread()Ljava/lang/Thread;" />
+		<method name="setExclusiveOwnerThread(Ljava/lang/Thread;)V" />
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedLongSynchronizer" since="9">
+		<extends name="java/util/concurrent/locks/AbstractOwnableSynchronizer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="acquire(J)V" />
+		<method name="acquireInterruptibly(J)V" />
+		<method name="acquireShared(J)V" />
+		<method name="acquireSharedInterruptibly(J)V" />
+		<method name="compareAndSetState(JJ)Z" />
+		<method name="getExclusiveQueuedThreads()Ljava/util/Collection;" />
+		<method name="getFirstQueuedThread()Ljava/lang/Thread;" />
+		<method name="getQueueLength()I" />
+		<method name="getQueuedThreads()Ljava/util/Collection;" />
+		<method name="getSharedQueuedThreads()Ljava/util/Collection;" />
+		<method name="getState()J" />
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)I" />
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Ljava/util/Collection;" />
+		<method name="hasContended()Z" />
+		<method name="hasQueuedPredecessors()Z" since="21" />
+		<method name="hasQueuedThreads()Z" />
+		<method name="hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Z" />
+		<method name="isHeldExclusively()Z" />
+		<method name="isQueued(Ljava/lang/Thread;)Z" />
+		<method name="owns(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Z" />
+		<method name="release(J)Z" />
+		<method name="releaseShared(J)Z" />
+		<method name="setState(J)V" />
+		<method name="tryAcquire(J)Z" />
+		<method name="tryAcquireNanos(JJ)Z" />
+		<method name="tryAcquireShared(J)J" />
+		<method name="tryAcquireSharedNanos(JJ)Z" />
+		<method name="tryRelease(J)Z" />
+		<method name="tryReleaseShared(J)Z" />
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/locks/Condition" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer;)V" />
+		<method name="getWaitQueueLength()I" />
+		<method name="getWaitingThreads()Ljava/util/Collection;" />
+		<method name="hasWaiters()Z" />
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedSynchronizer" since="1">
+		<extends name="java/lang/Object" removed="5" />
+		<extends name="java/util/concurrent/locks/AbstractOwnableSynchronizer" since="5" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="acquire(I)V" />
+		<method name="acquireInterruptibly(I)V" />
+		<method name="acquireShared(I)V" />
+		<method name="acquireSharedInterruptibly(I)V" />
+		<method name="compareAndSetState(II)Z" />
+		<method name="getExclusiveQueuedThreads()Ljava/util/Collection;" />
+		<method name="getFirstQueuedThread()Ljava/lang/Thread;" />
+		<method name="getQueueLength()I" />
+		<method name="getQueuedThreads()Ljava/util/Collection;" />
+		<method name="getSharedQueuedThreads()Ljava/util/Collection;" />
+		<method name="getState()I" />
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)I" />
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Ljava/util/Collection;" />
+		<method name="hasContended()Z" />
+		<method name="hasQueuedPredecessors()Z" since="21" />
+		<method name="hasQueuedThreads()Z" />
+		<method name="hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z" />
+		<method name="isHeldExclusively()Z" />
+		<method name="isQueued(Ljava/lang/Thread;)Z" />
+		<method name="owns(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z" />
+		<method name="release(I)Z" />
+		<method name="releaseShared(I)Z" />
+		<method name="setState(I)V" />
+		<method name="tryAcquire(I)Z" />
+		<method name="tryAcquireNanos(IJ)Z" />
+		<method name="tryAcquireShared(I)I" />
+		<method name="tryAcquireSharedNanos(IJ)Z" />
+		<method name="tryRelease(I)Z" />
+		<method name="tryReleaseShared(I)Z" />
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/locks/Condition" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)V" />
+		<method name="getWaitQueueLength()I" />
+		<method name="getWaitingThreads()Ljava/util/Collection;" />
+		<method name="hasWaiters()Z" />
+	</class>
+	<class name="java/util/concurrent/locks/Condition" since="1">
+		<extends name="java/lang/Object" />
+		<method name="await()V" />
+		<method name="await(JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="awaitNanos(J)J" />
+		<method name="awaitUninterruptibly()V" />
+		<method name="awaitUntil(Ljava/util/Date;)Z" />
+		<method name="signal()V" />
+		<method name="signalAll()V" />
+	</class>
+	<class name="java/util/concurrent/locks/Lock" since="1">
+		<extends name="java/lang/Object" />
+		<method name="lock()V" />
+		<method name="lockInterruptibly()V" />
+		<method name="newCondition()Ljava/util/concurrent/locks/Condition;" />
+		<method name="tryLock()Z" />
+		<method name="tryLock(JLjava/util/concurrent/TimeUnit;)Z" />
+		<method name="unlock()V" />
+	</class>
+	<class name="java/util/concurrent/locks/LockSupport" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getBlocker(Ljava/lang/Thread;)Ljava/lang/Object;" since="9" />
+		<method name="park()V" />
+		<method name="park(Ljava/lang/Object;)V" since="9" />
+		<method name="parkNanos(J)V" />
+		<method name="parkNanos(Ljava/lang/Object;J)V" since="9" />
+		<method name="parkUntil(J)V" />
+		<method name="parkUntil(Ljava/lang/Object;J)V" since="9" />
+		<method name="unpark(Ljava/lang/Thread;)V" />
+	</class>
+	<class name="java/util/concurrent/locks/ReadWriteLock" since="1">
+		<extends name="java/lang/Object" />
+		<method name="readLock()Ljava/util/concurrent/locks/Lock;" />
+		<method name="writeLock()Ljava/util/concurrent/locks/Lock;" />
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantLock" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/locks/Lock" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="getHoldCount()I" />
+		<method name="getOwner()Ljava/lang/Thread;" />
+		<method name="getQueueLength()I" />
+		<method name="getQueuedThreads()Ljava/util/Collection;" />
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/Condition;)I" />
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection;" />
+		<method name="hasQueuedThread(Ljava/lang/Thread;)Z" />
+		<method name="hasQueuedThreads()Z" />
+		<method name="hasWaiters(Ljava/util/concurrent/locks/Condition;)Z" />
+		<method name="isFair()Z" />
+		<method name="isHeldByCurrentThread()Z" />
+		<method name="isLocked()Z" />
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantReadWriteLock" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/locks/ReadWriteLock" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="getOwner()Ljava/lang/Thread;" />
+		<method name="getQueueLength()I" />
+		<method name="getQueuedReaderThreads()Ljava/util/Collection;" />
+		<method name="getQueuedThreads()Ljava/util/Collection;" />
+		<method name="getQueuedWriterThreads()Ljava/util/Collection;" />
+		<method name="getReadHoldCount()I" since="9" />
+		<method name="getReadLockCount()I" />
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/Condition;)I" />
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection;" />
+		<method name="getWriteHoldCount()I" />
+		<method name="hasQueuedThread(Ljava/lang/Thread;)Z" />
+		<method name="hasQueuedThreads()Z" />
+		<method name="hasWaiters(Ljava/util/concurrent/locks/Condition;)Z" />
+		<method name="isFair()Z" />
+		<method name="isWriteLocked()Z" />
+		<method name="isWriteLockedByCurrentThread()Z" />
+		<method name="readLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;" />
+		<method name="writeLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;" />
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/locks/Lock" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V" />
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/concurrent/locks/Lock" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V" />
+		<method name="getHoldCount()I" since="9" />
+		<method name="isHeldByCurrentThread()Z" since="9" />
+	</class>
+	<class name="java/util/concurrent/locks/StampedLock" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="asReadLock()Ljava/util/concurrent/locks/Lock;" />
+		<method name="asReadWriteLock()Ljava/util/concurrent/locks/ReadWriteLock;" />
+		<method name="asWriteLock()Ljava/util/concurrent/locks/Lock;" />
+		<method name="getReadLockCount()I" />
+		<method name="isReadLocked()Z" />
+		<method name="isWriteLocked()Z" />
+		<method name="readLock()J" />
+		<method name="readLockInterruptibly()J" />
+		<method name="tryConvertToOptimisticRead(J)J" />
+		<method name="tryConvertToReadLock(J)J" />
+		<method name="tryConvertToWriteLock(J)J" />
+		<method name="tryOptimisticRead()J" />
+		<method name="tryReadLock()J" />
+		<method name="tryReadLock(JLjava/util/concurrent/TimeUnit;)J" />
+		<method name="tryUnlockRead()Z" />
+		<method name="tryUnlockWrite()Z" />
+		<method name="tryWriteLock()J" />
+		<method name="tryWriteLock(JLjava/util/concurrent/TimeUnit;)J" />
+		<method name="unlock(J)V" />
+		<method name="unlockRead(J)V" />
+		<method name="unlockWrite(J)V" />
+		<method name="validate(J)Z" />
+		<method name="writeLock()J" />
+		<method name="writeLockInterruptibly()J" />
+	</class>
+	<class name="java/util/function/BiConsumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="andThen(Ljava/util/function/BiConsumer;)Ljava/util/function/BiConsumer;" />
+	</class>
+	<class name="java/util/function/BiFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="andThen(Ljava/util/function/Function;)Ljava/util/function/BiFunction;" />
+		<method name="apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/function/BiPredicate" since="24">
+		<extends name="java/lang/Object" />
+		<method name="and(Ljava/util/function/BiPredicate;)Ljava/util/function/BiPredicate;" />
+		<method name="negate()Ljava/util/function/BiPredicate;" />
+		<method name="or(Ljava/util/function/BiPredicate;)Ljava/util/function/BiPredicate;" />
+		<method name="test(Ljava/lang/Object;Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/util/function/BinaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/BiFunction" />
+		<method name="maxBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;" />
+		<method name="minBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;" />
+	</class>
+	<class name="java/util/function/BooleanSupplier" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getAsBoolean()Z" />
+	</class>
+	<class name="java/util/function/Consumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/lang/Object;)V" />
+		<method name="andThen(Ljava/util/function/Consumer;)Ljava/util/function/Consumer;" />
+	</class>
+	<class name="java/util/function/DoubleBinaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsDouble(DD)D" />
+	</class>
+	<class name="java/util/function/DoubleConsumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(D)V" />
+		<method name="andThen(Ljava/util/function/DoubleConsumer;)Ljava/util/function/DoubleConsumer;" />
+	</class>
+	<class name="java/util/function/DoubleFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="apply(D)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/function/DoublePredicate" since="24">
+		<extends name="java/lang/Object" />
+		<method name="and(Ljava/util/function/DoublePredicate;)Ljava/util/function/DoublePredicate;" />
+		<method name="negate()Ljava/util/function/DoublePredicate;" />
+		<method name="or(Ljava/util/function/DoublePredicate;)Ljava/util/function/DoublePredicate;" />
+		<method name="test(D)Z" />
+	</class>
+	<class name="java/util/function/DoubleSupplier" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getAsDouble()D" />
+	</class>
+	<class name="java/util/function/DoubleToIntFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsInt(D)I" />
+	</class>
+	<class name="java/util/function/DoubleToLongFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsLong(D)J" />
+	</class>
+	<class name="java/util/function/DoubleUnaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<method name="andThen(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;" />
+		<method name="applyAsDouble(D)D" />
+		<method name="compose(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;" />
+		<method name="identity()Ljava/util/function/DoubleUnaryOperator;" />
+	</class>
+	<class name="java/util/function/Function" since="24">
+		<extends name="java/lang/Object" />
+		<method name="andThen(Ljava/util/function/Function;)Ljava/util/function/Function;" />
+		<method name="apply(Ljava/lang/Object;)Ljava/lang/Object;" />
+		<method name="compose(Ljava/util/function/Function;)Ljava/util/function/Function;" />
+		<method name="identity()Ljava/util/function/Function;" />
+	</class>
+	<class name="java/util/function/IntBinaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsInt(II)I" />
+	</class>
+	<class name="java/util/function/IntConsumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(I)V" />
+		<method name="andThen(Ljava/util/function/IntConsumer;)Ljava/util/function/IntConsumer;" />
+	</class>
+	<class name="java/util/function/IntFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="apply(I)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/function/IntPredicate" since="24">
+		<extends name="java/lang/Object" />
+		<method name="and(Ljava/util/function/IntPredicate;)Ljava/util/function/IntPredicate;" />
+		<method name="negate()Ljava/util/function/IntPredicate;" />
+		<method name="or(Ljava/util/function/IntPredicate;)Ljava/util/function/IntPredicate;" />
+		<method name="test(I)Z" />
+	</class>
+	<class name="java/util/function/IntSupplier" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getAsInt()I" />
+	</class>
+	<class name="java/util/function/IntToDoubleFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsDouble(I)D" />
+	</class>
+	<class name="java/util/function/IntToLongFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsLong(I)J" />
+	</class>
+	<class name="java/util/function/IntUnaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<method name="andThen(Ljava/util/function/IntUnaryOperator;)Ljava/util/function/IntUnaryOperator;" />
+		<method name="applyAsInt(I)I" />
+		<method name="compose(Ljava/util/function/IntUnaryOperator;)Ljava/util/function/IntUnaryOperator;" />
+		<method name="identity()Ljava/util/function/IntUnaryOperator;" />
+	</class>
+	<class name="java/util/function/LongBinaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsLong(JJ)J" />
+	</class>
+	<class name="java/util/function/LongConsumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(J)V" />
+		<method name="andThen(Ljava/util/function/LongConsumer;)Ljava/util/function/LongConsumer;" />
+	</class>
+	<class name="java/util/function/LongFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="apply(J)Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/function/LongPredicate" since="24">
+		<extends name="java/lang/Object" />
+		<method name="and(Ljava/util/function/LongPredicate;)Ljava/util/function/LongPredicate;" />
+		<method name="negate()Ljava/util/function/LongPredicate;" />
+		<method name="or(Ljava/util/function/LongPredicate;)Ljava/util/function/LongPredicate;" />
+		<method name="test(J)Z" />
+	</class>
+	<class name="java/util/function/LongSupplier" since="24">
+		<extends name="java/lang/Object" />
+		<method name="getAsLong()J" />
+	</class>
+	<class name="java/util/function/LongToDoubleFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsDouble(J)D" />
+	</class>
+	<class name="java/util/function/LongToIntFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsInt(J)I" />
+	</class>
+	<class name="java/util/function/LongUnaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<method name="andThen(Ljava/util/function/LongUnaryOperator;)Ljava/util/function/LongUnaryOperator;" />
+		<method name="applyAsLong(J)J" />
+		<method name="compose(Ljava/util/function/LongUnaryOperator;)Ljava/util/function/LongUnaryOperator;" />
+		<method name="identity()Ljava/util/function/LongUnaryOperator;" />
+	</class>
+	<class name="java/util/function/ObjDoubleConsumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/lang/Object;D)V" />
+	</class>
+	<class name="java/util/function/ObjIntConsumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/lang/Object;I)V" />
+	</class>
+	<class name="java/util/function/ObjLongConsumer" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accept(Ljava/lang/Object;J)V" />
+	</class>
+	<class name="java/util/function/Predicate" since="24">
+		<extends name="java/lang/Object" />
+		<method name="and(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;" />
+		<method name="isEqual(Ljava/lang/Object;)Ljava/util/function/Predicate;" />
+		<method name="negate()Ljava/util/function/Predicate;" />
+		<method name="or(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;" />
+		<method name="test(Ljava/lang/Object;)Z" />
+	</class>
+	<class name="java/util/function/Supplier" since="24">
+		<extends name="java/lang/Object" />
+		<method name="get()Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/function/ToDoubleBiFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsDouble(Ljava/lang/Object;Ljava/lang/Object;)D" />
+	</class>
+	<class name="java/util/function/ToDoubleFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsDouble(Ljava/lang/Object;)D" />
+	</class>
+	<class name="java/util/function/ToIntBiFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsInt(Ljava/lang/Object;Ljava/lang/Object;)I" />
+	</class>
+	<class name="java/util/function/ToIntFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsInt(Ljava/lang/Object;)I" />
+	</class>
+	<class name="java/util/function/ToLongBiFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsLong(Ljava/lang/Object;Ljava/lang/Object;)J" />
+	</class>
+	<class name="java/util/function/ToLongFunction" since="24">
+		<extends name="java/lang/Object" />
+		<method name="applyAsLong(Ljava/lang/Object;)J" />
+	</class>
+	<class name="java/util/function/UnaryOperator" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/Function" />
+		<method name="identity()Ljava/util/function/UnaryOperator;" />
+	</class>
+	<class name="java/util/jar/Attributes" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="java/util/Map" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(Ljava/util/jar/Attributes;)V" />
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getValue(Ljava/util/jar/Attributes$Name;)Ljava/lang/String;" />
+		<method name="putValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<field name="map" />
+	</class>
+	<class name="java/util/jar/Attributes$Name" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<field name="CLASS_PATH" />
+		<field name="CONTENT_TYPE" />
+		<field name="EXTENSION_INSTALLATION" deprecated="26" />
+		<field name="EXTENSION_LIST" />
+		<field name="EXTENSION_NAME" />
+		<field name="IMPLEMENTATION_TITLE" />
+		<field name="IMPLEMENTATION_URL" deprecated="26" />
+		<field name="IMPLEMENTATION_VENDOR" />
+		<field name="IMPLEMENTATION_VENDOR_ID" deprecated="26" />
+		<field name="IMPLEMENTATION_VERSION" />
+		<field name="MAIN_CLASS" />
+		<field name="MANIFEST_VERSION" />
+		<field name="SEALED" />
+		<field name="SIGNATURE_VERSION" />
+		<field name="SPECIFICATION_TITLE" />
+		<field name="SPECIFICATION_VENDOR" />
+		<field name="SPECIFICATION_VERSION" />
+	</class>
+	<class name="java/util/jar/JarEntry" since="1">
+		<extends name="java/util/zip/ZipEntry" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/util/jar/JarEntry;)V" />
+		<method name="&lt;init&gt;(Ljava/util/zip/ZipEntry;)V" />
+		<method name="getAttributes()Ljava/util/jar/Attributes;" />
+		<method name="getCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getCodeSigners()[Ljava/security/CodeSigner;" />
+		<field name="CENATT" since="28" />
+		<field name="CENATX" since="28" />
+		<field name="CENCOM" since="28" />
+		<field name="CENCRC" since="28" />
+		<field name="CENDSK" since="28" />
+		<field name="CENEXT" since="28" />
+		<field name="CENFLG" since="28" />
+		<field name="CENHDR" since="28" />
+		<field name="CENHOW" since="28" />
+		<field name="CENLEN" since="28" />
+		<field name="CENNAM" since="28" />
+		<field name="CENOFF" since="28" />
+		<field name="CENSIG" since="28" />
+		<field name="CENSIZ" since="28" />
+		<field name="CENTIM" since="28" />
+		<field name="CENVEM" since="28" />
+		<field name="CENVER" since="28" />
+		<field name="ENDCOM" since="28" />
+		<field name="ENDHDR" since="28" />
+		<field name="ENDOFF" since="28" />
+		<field name="ENDSIG" since="28" />
+		<field name="ENDSIZ" since="28" />
+		<field name="ENDSUB" since="28" />
+		<field name="ENDTOT" since="28" />
+		<field name="EXTCRC" since="28" />
+		<field name="EXTHDR" since="28" />
+		<field name="EXTLEN" since="28" />
+		<field name="EXTSIG" since="28" />
+		<field name="EXTSIZ" since="28" />
+		<field name="LOCCRC" since="28" />
+		<field name="LOCEXT" since="28" />
+		<field name="LOCFLG" since="28" />
+		<field name="LOCHDR" since="28" />
+		<field name="LOCHOW" since="28" />
+		<field name="LOCLEN" since="28" />
+		<field name="LOCNAM" since="28" />
+		<field name="LOCSIG" since="28" />
+		<field name="LOCSIZ" since="28" />
+		<field name="LOCTIM" since="28" />
+		<field name="LOCVER" since="28" />
+	</class>
+	<class name="java/util/jar/JarException" since="1">
+		<extends name="java/util/zip/ZipException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/jar/JarFile" since="1">
+		<extends name="java/util/zip/ZipFile" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;Z)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;ZI)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+		<method name="getJarEntry(Ljava/lang/String;)Ljava/util/jar/JarEntry;" />
+		<method name="getManifest()Ljava/util/jar/Manifest;" />
+		<field name="CENATT" since="28" />
+		<field name="CENATX" since="28" />
+		<field name="CENCOM" since="28" />
+		<field name="CENCRC" since="28" />
+		<field name="CENDSK" since="28" />
+		<field name="CENEXT" since="28" />
+		<field name="CENFLG" since="28" />
+		<field name="CENHDR" since="28" />
+		<field name="CENHOW" since="28" />
+		<field name="CENLEN" since="28" />
+		<field name="CENNAM" since="28" />
+		<field name="CENOFF" since="28" />
+		<field name="CENSIG" since="28" />
+		<field name="CENSIZ" since="28" />
+		<field name="CENTIM" since="28" />
+		<field name="CENVEM" since="28" />
+		<field name="CENVER" since="28" />
+		<field name="ENDCOM" since="28" />
+		<field name="ENDHDR" since="28" />
+		<field name="ENDOFF" since="28" />
+		<field name="ENDSIG" since="28" />
+		<field name="ENDSIZ" since="28" />
+		<field name="ENDSUB" since="28" />
+		<field name="ENDTOT" since="28" />
+		<field name="EXTCRC" since="28" />
+		<field name="EXTHDR" since="28" />
+		<field name="EXTLEN" since="28" />
+		<field name="EXTSIG" since="28" />
+		<field name="EXTSIZ" since="28" />
+		<field name="LOCCRC" since="28" />
+		<field name="LOCEXT" since="28" />
+		<field name="LOCFLG" since="28" />
+		<field name="LOCHDR" since="28" />
+		<field name="LOCHOW" since="28" />
+		<field name="LOCLEN" since="28" />
+		<field name="LOCNAM" since="28" />
+		<field name="LOCSIG" since="28" />
+		<field name="LOCSIZ" since="28" />
+		<field name="LOCTIM" since="28" />
+		<field name="LOCVER" since="28" />
+		<field name="MANIFEST_NAME" />
+	</class>
+	<class name="java/util/jar/JarInputStream" since="1">
+		<extends name="java/util/zip/ZipInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Z)V" />
+		<method name="getManifest()Ljava/util/jar/Manifest;" />
+		<method name="getNextJarEntry()Ljava/util/jar/JarEntry;" />
+		<field name="CENATT" since="28" />
+		<field name="CENATX" since="28" />
+		<field name="CENCOM" since="28" />
+		<field name="CENCRC" since="28" />
+		<field name="CENDSK" since="28" />
+		<field name="CENEXT" since="28" />
+		<field name="CENFLG" since="28" />
+		<field name="CENHDR" since="28" />
+		<field name="CENHOW" since="28" />
+		<field name="CENLEN" since="28" />
+		<field name="CENNAM" since="28" />
+		<field name="CENOFF" since="28" />
+		<field name="CENSIG" since="28" />
+		<field name="CENSIZ" since="28" />
+		<field name="CENTIM" since="28" />
+		<field name="CENVEM" since="28" />
+		<field name="CENVER" since="28" />
+		<field name="ENDCOM" since="28" />
+		<field name="ENDHDR" since="28" />
+		<field name="ENDOFF" since="28" />
+		<field name="ENDSIG" since="28" />
+		<field name="ENDSIZ" since="28" />
+		<field name="ENDSUB" since="28" />
+		<field name="ENDTOT" since="28" />
+		<field name="EXTCRC" since="28" />
+		<field name="EXTHDR" since="28" />
+		<field name="EXTLEN" since="28" />
+		<field name="EXTSIG" since="28" />
+		<field name="EXTSIZ" since="28" />
+		<field name="LOCCRC" since="28" />
+		<field name="LOCEXT" since="28" />
+		<field name="LOCFLG" since="28" />
+		<field name="LOCHDR" since="28" />
+		<field name="LOCHOW" since="28" />
+		<field name="LOCLEN" since="28" />
+		<field name="LOCNAM" since="28" />
+		<field name="LOCSIG" since="28" />
+		<field name="LOCSIZ" since="28" />
+		<field name="LOCTIM" since="28" />
+		<field name="LOCVER" since="28" />
+	</class>
+	<class name="java/util/jar/JarOutputStream" since="1">
+		<extends name="java/util/zip/ZipOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/jar/Manifest;)V" />
+		<field name="CENATT" since="28" />
+		<field name="CENATX" since="28" />
+		<field name="CENCOM" since="28" />
+		<field name="CENCRC" since="28" />
+		<field name="CENDSK" since="28" />
+		<field name="CENEXT" since="28" />
+		<field name="CENFLG" since="28" />
+		<field name="CENHDR" since="28" />
+		<field name="CENHOW" since="28" />
+		<field name="CENLEN" since="28" />
+		<field name="CENNAM" since="28" />
+		<field name="CENOFF" since="28" />
+		<field name="CENSIG" since="28" />
+		<field name="CENSIZ" since="28" />
+		<field name="CENTIM" since="28" />
+		<field name="CENVEM" since="28" />
+		<field name="CENVER" since="28" />
+		<field name="ENDCOM" since="28" />
+		<field name="ENDHDR" since="28" />
+		<field name="ENDOFF" since="28" />
+		<field name="ENDSIG" since="28" />
+		<field name="ENDSIZ" since="28" />
+		<field name="ENDSUB" since="28" />
+		<field name="ENDTOT" since="28" />
+		<field name="EXTCRC" since="28" />
+		<field name="EXTHDR" since="28" />
+		<field name="EXTLEN" since="28" />
+		<field name="EXTSIG" since="28" />
+		<field name="EXTSIZ" since="28" />
+		<field name="LOCCRC" since="28" />
+		<field name="LOCEXT" since="28" />
+		<field name="LOCFLG" since="28" />
+		<field name="LOCHDR" since="28" />
+		<field name="LOCHOW" since="28" />
+		<field name="LOCLEN" since="28" />
+		<field name="LOCNAM" since="28" />
+		<field name="LOCSIG" since="28" />
+		<field name="LOCSIZ" since="28" />
+		<field name="LOCTIM" since="28" />
+		<field name="LOCVER" since="28" />
+	</class>
+	<class name="java/util/jar/Manifest" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/util/jar/Manifest;)V" />
+		<method name="clear()V" />
+		<method name="getAttributes(Ljava/lang/String;)Ljava/util/jar/Attributes;" />
+		<method name="getEntries()Ljava/util/Map;" />
+		<method name="getMainAttributes()Ljava/util/jar/Attributes;" />
+		<method name="read(Ljava/io/InputStream;)V" />
+		<method name="write(Ljava/io/OutputStream;)V" />
+	</class>
+	<class name="java/util/jar/Pack200" since="1">
+		<extends name="java/lang/Object" />
+		<method name="newPacker()Ljava/util/jar/Pack200$Packer;" />
+		<method name="newUnpacker()Ljava/util/jar/Pack200$Unpacker;" />
+	</class>
+	<class name="java/util/jar/Pack200$Packer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26" />
+		<method name="pack(Ljava/util/jar/JarFile;Ljava/io/OutputStream;)V" />
+		<method name="pack(Ljava/util/jar/JarInputStream;Ljava/io/OutputStream;)V" />
+		<method name="properties()Ljava/util/SortedMap;" />
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26" />
+		<field name="CLASS_ATTRIBUTE_PFX" />
+		<field name="CODE_ATTRIBUTE_PFX" />
+		<field name="DEFLATE_HINT" />
+		<field name="EFFORT" />
+		<field name="ERROR" />
+		<field name="FALSE" />
+		<field name="FIELD_ATTRIBUTE_PFX" />
+		<field name="KEEP" />
+		<field name="KEEP_FILE_ORDER" />
+		<field name="LATEST" />
+		<field name="METHOD_ATTRIBUTE_PFX" />
+		<field name="MODIFICATION_TIME" />
+		<field name="PASS" />
+		<field name="PASS_FILE_PFX" />
+		<field name="PROGRESS" />
+		<field name="SEGMENT_LIMIT" />
+		<field name="STRIP" />
+		<field name="TRUE" />
+		<field name="UNKNOWN_ATTRIBUTE" />
+	</class>
+	<class name="java/util/jar/Pack200$Unpacker" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26" />
+		<method name="properties()Ljava/util/SortedMap;" />
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26" />
+		<method name="unpack(Ljava/io/File;Ljava/util/jar/JarOutputStream;)V" />
+		<method name="unpack(Ljava/io/InputStream;Ljava/util/jar/JarOutputStream;)V" />
+		<field name="DEFLATE_HINT" />
+		<field name="FALSE" />
+		<field name="KEEP" />
+		<field name="PROGRESS" />
+		<field name="TRUE" />
+	</class>
+	<class name="java/util/logging/ConsoleHandler" since="1">
+		<extends name="java/util/logging/StreamHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/logging/ErrorManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="error(Ljava/lang/String;Ljava/lang/Exception;I)V" />
+		<field name="CLOSE_FAILURE" />
+		<field name="FLUSH_FAILURE" />
+		<field name="FORMAT_FAILURE" />
+		<field name="GENERIC_FAILURE" />
+		<field name="OPEN_FAILURE" />
+		<field name="WRITE_FAILURE" />
+	</class>
+	<class name="java/util/logging/FileHandler" since="1">
+		<extends name="java/util/logging/StreamHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;II)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;IIZ)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+	</class>
+	<class name="java/util/logging/Filter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="isLoggable(Ljava/util/logging/LogRecord;)Z" />
+	</class>
+	<class name="java/util/logging/Formatter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="format(Ljava/util/logging/LogRecord;)Ljava/lang/String;" />
+		<method name="formatMessage(Ljava/util/logging/LogRecord;)Ljava/lang/String;" />
+		<method name="getHead(Ljava/util/logging/Handler;)Ljava/lang/String;" />
+		<method name="getTail(Ljava/util/logging/Handler;)Ljava/lang/String;" />
+	</class>
+	<class name="java/util/logging/Handler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="close()V" />
+		<method name="flush()V" />
+		<method name="getEncoding()Ljava/lang/String;" />
+		<method name="getErrorManager()Ljava/util/logging/ErrorManager;" />
+		<method name="getFilter()Ljava/util/logging/Filter;" />
+		<method name="getFormatter()Ljava/util/logging/Formatter;" />
+		<method name="getLevel()Ljava/util/logging/Level;" />
+		<method name="isLoggable(Ljava/util/logging/LogRecord;)Z" />
+		<method name="publish(Ljava/util/logging/LogRecord;)V" />
+		<method name="reportError(Ljava/lang/String;Ljava/lang/Exception;I)V" />
+		<method name="setEncoding(Ljava/lang/String;)V" />
+		<method name="setErrorManager(Ljava/util/logging/ErrorManager;)V" />
+		<method name="setFilter(Ljava/util/logging/Filter;)V" />
+		<method name="setFormatter(Ljava/util/logging/Formatter;)V" />
+		<method name="setLevel(Ljava/util/logging/Level;)V" />
+	</class>
+	<class name="java/util/logging/Level" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="getLocalizedName()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getResourceBundleName()Ljava/lang/String;" />
+		<method name="intValue()I" />
+		<method name="parse(Ljava/lang/String;)Ljava/util/logging/Level;" />
+		<field name="ALL" />
+		<field name="CONFIG" />
+		<field name="FINE" />
+		<field name="FINER" />
+		<field name="FINEST" />
+		<field name="INFO" />
+		<field name="OFF" />
+		<field name="SEVERE" />
+		<field name="WARNING" />
+	</class>
+	<class name="java/util/logging/LogManager" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addLogger(Ljava/util/logging/Logger;)Z" />
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26" />
+		<method name="checkAccess()V" />
+		<method name="getLogManager()Ljava/util/logging/LogManager;" />
+		<method name="getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;" />
+		<method name="getLoggerNames()Ljava/util/Enumeration;" />
+		<method name="getLoggingMXBean()Ljava/util/logging/LoggingMXBean;" since="3" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="readConfiguration()V" />
+		<method name="readConfiguration(Ljava/io/InputStream;)V" />
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26" />
+		<method name="reset()V" />
+		<field name="LOGGING_MXBEAN_NAME" />
+	</class>
+	<class name="java/util/logging/LogRecord" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/util/logging/Level;Ljava/lang/String;)V" />
+		<method name="getLevel()Ljava/util/logging/Level;" />
+		<method name="getLoggerName()Ljava/lang/String;" />
+		<method name="getMessage()Ljava/lang/String;" />
+		<method name="getMillis()J" />
+		<method name="getParameters()[Ljava/lang/Object;" />
+		<method name="getResourceBundle()Ljava/util/ResourceBundle;" />
+		<method name="getResourceBundleName()Ljava/lang/String;" />
+		<method name="getSequenceNumber()J" />
+		<method name="getSourceClassName()Ljava/lang/String;" />
+		<method name="getSourceMethodName()Ljava/lang/String;" />
+		<method name="getThreadID()I" />
+		<method name="getThrown()Ljava/lang/Throwable;" />
+		<method name="setLevel(Ljava/util/logging/Level;)V" />
+		<method name="setLoggerName(Ljava/lang/String;)V" />
+		<method name="setMessage(Ljava/lang/String;)V" />
+		<method name="setMillis(J)V" />
+		<method name="setParameters([Ljava/lang/Object;)V" />
+		<method name="setResourceBundle(Ljava/util/ResourceBundle;)V" />
+		<method name="setResourceBundleName(Ljava/lang/String;)V" />
+		<method name="setSequenceNumber(J)V" />
+		<method name="setSourceClassName(Ljava/lang/String;)V" />
+		<method name="setSourceMethodName(Ljava/lang/String;)V" />
+		<method name="setThreadID(I)V" />
+		<method name="setThrown(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/logging/Logger" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="addHandler(Ljava/util/logging/Handler;)V" />
+		<method name="config(Ljava/lang/String;)V" />
+		<method name="config(Ljava/util/function/Supplier;)V" since="26" />
+		<method name="entering(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="entering(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="entering(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V" />
+		<method name="exiting(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="exiting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="fine(Ljava/lang/String;)V" />
+		<method name="fine(Ljava/util/function/Supplier;)V" since="26" />
+		<method name="finer(Ljava/lang/String;)V" />
+		<method name="finer(Ljava/util/function/Supplier;)V" since="26" />
+		<method name="finest(Ljava/lang/String;)V" />
+		<method name="finest(Ljava/util/function/Supplier;)V" since="26" />
+		<method name="getAnonymousLogger()Ljava/util/logging/Logger;" />
+		<method name="getAnonymousLogger(Ljava/lang/String;)Ljava/util/logging/Logger;" />
+		<method name="getFilter()Ljava/util/logging/Filter;" />
+		<method name="getGlobal()Ljava/util/logging/Logger;" since="19" />
+		<method name="getHandlers()[Ljava/util/logging/Handler;" />
+		<method name="getLevel()Ljava/util/logging/Level;" />
+		<method name="getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;" />
+		<method name="getLogger(Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getParent()Ljava/util/logging/Logger;" />
+		<method name="getResourceBundle()Ljava/util/ResourceBundle;" />
+		<method name="getResourceBundleName()Ljava/lang/String;" />
+		<method name="getUseParentHandlers()Z" />
+		<method name="info(Ljava/lang/String;)V" />
+		<method name="info(Ljava/util/function/Supplier;)V" since="26" />
+		<method name="isLoggable(Ljava/util/logging/Level;)Z" />
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;)V" />
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V" />
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/Throwable;Ljava/util/function/Supplier;)V" since="26" />
+		<method name="log(Ljava/util/logging/Level;Ljava/util/function/Supplier;)V" since="26" />
+		<method name="log(Ljava/util/logging/LogRecord;)V" />
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V" />
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/function/Supplier;)V" since="26" />
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Supplier;)V" since="26" />
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="26" />
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V" deprecated="26" />
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" deprecated="26" />
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V" deprecated="26" />
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/ResourceBundle;Ljava/lang/String;Ljava/lang/Throwable;)V" since="26" />
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/ResourceBundle;Ljava/lang/String;[Ljava/lang/Object;)V" since="26" />
+		<method name="removeHandler(Ljava/util/logging/Handler;)V" />
+		<method name="setFilter(Ljava/util/logging/Filter;)V" />
+		<method name="setLevel(Ljava/util/logging/Level;)V" />
+		<method name="setParent(Ljava/util/logging/Logger;)V" />
+		<method name="setResourceBundle(Ljava/util/ResourceBundle;)V" since="26" />
+		<method name="setUseParentHandlers(Z)V" />
+		<method name="severe(Ljava/lang/String;)V" />
+		<method name="severe(Ljava/util/function/Supplier;)V" since="26" />
+		<method name="throwing(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="warning(Ljava/lang/String;)V" />
+		<method name="warning(Ljava/util/function/Supplier;)V" since="26" />
+		<field name="GLOBAL_LOGGER_NAME" since="9" />
+		<field name="global" deprecated="15" />
+	</class>
+	<class name="java/util/logging/LoggingMXBean" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getLoggerLevel(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getLoggerNames()Ljava/util/List;" />
+		<method name="getParentLoggerName(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="setLoggerLevel(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/logging/LoggingPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/logging/MemoryHandler" since="1">
+		<extends name="java/util/logging/Handler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/util/logging/Handler;ILjava/util/logging/Level;)V" />
+		<method name="getPushLevel()Ljava/util/logging/Level;" />
+		<method name="push()V" />
+		<method name="setPushLevel(Ljava/util/logging/Level;)V" />
+	</class>
+	<class name="java/util/logging/SimpleFormatter" since="1">
+		<extends name="java/util/logging/Formatter" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/logging/SocketHandler" since="1">
+		<extends name="java/util/logging/StreamHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+	</class>
+	<class name="java/util/logging/StreamHandler" since="1">
+		<extends name="java/util/logging/Handler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/logging/Formatter;)V" />
+		<method name="setOutputStream(Ljava/io/OutputStream;)V" />
+	</class>
+	<class name="java/util/logging/XMLFormatter" since="1">
+		<extends name="java/util/logging/Formatter" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="java/util/prefs/AbstractPreferences" since="1">
+		<extends name="java/util/prefs/Preferences" />
+		<method name="&lt;init&gt;(Ljava/util/prefs/AbstractPreferences;Ljava/lang/String;)V" />
+		<method name="cachedChildren()[Ljava/util/prefs/AbstractPreferences;" />
+		<method name="childSpi(Ljava/lang/String;)Ljava/util/prefs/AbstractPreferences;" />
+		<method name="childrenNamesSpi()[Ljava/lang/String;" />
+		<method name="flushSpi()V" />
+		<method name="getChild(Ljava/lang/String;)Ljava/util/prefs/AbstractPreferences;" />
+		<method name="getSpi(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="isRemoved()Z" />
+		<method name="keysSpi()[Ljava/lang/String;" />
+		<method name="putSpi(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="removeNodeSpi()V" />
+		<method name="removeSpi(Ljava/lang/String;)V" />
+		<method name="syncSpi()V" />
+		<field name="lock" />
+		<field name="newNode" />
+	</class>
+	<class name="java/util/prefs/BackingStoreException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/prefs/InvalidPreferencesFormatException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="java/util/prefs/NodeChangeEvent" since="1">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljava/util/prefs/Preferences;Ljava/util/prefs/Preferences;)V" />
+		<method name="getChild()Ljava/util/prefs/Preferences;" />
+		<method name="getParent()Ljava/util/prefs/Preferences;" />
+	</class>
+	<class name="java/util/prefs/NodeChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="childAdded(Ljava/util/prefs/NodeChangeEvent;)V" />
+		<method name="childRemoved(Ljava/util/prefs/NodeChangeEvent;)V" />
+	</class>
+	<class name="java/util/prefs/PreferenceChangeEvent" since="1">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljava/util/prefs/Preferences;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getKey()Ljava/lang/String;" />
+		<method name="getNewValue()Ljava/lang/String;" />
+		<method name="getNode()Ljava/util/prefs/Preferences;" />
+	</class>
+	<class name="java/util/prefs/PreferenceChangeListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="preferenceChange(Ljava/util/prefs/PreferenceChangeEvent;)V" />
+	</class>
+	<class name="java/util/prefs/Preferences" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="absolutePath()Ljava/lang/String;" />
+		<method name="addNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V" />
+		<method name="addPreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V" />
+		<method name="childrenNames()[Ljava/lang/String;" />
+		<method name="clear()V" />
+		<method name="exportNode(Ljava/io/OutputStream;)V" />
+		<method name="exportSubtree(Ljava/io/OutputStream;)V" />
+		<method name="flush()V" />
+		<method name="get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getBoolean(Ljava/lang/String;Z)Z" />
+		<method name="getByteArray(Ljava/lang/String;[B)[B" />
+		<method name="getDouble(Ljava/lang/String;D)D" />
+		<method name="getFloat(Ljava/lang/String;F)F" />
+		<method name="getInt(Ljava/lang/String;I)I" />
+		<method name="getLong(Ljava/lang/String;J)J" />
+		<method name="importPreferences(Ljava/io/InputStream;)V" />
+		<method name="isUserNode()Z" />
+		<method name="keys()[Ljava/lang/String;" />
+		<method name="name()Ljava/lang/String;" />
+		<method name="node(Ljava/lang/String;)Ljava/util/prefs/Preferences;" />
+		<method name="nodeExists(Ljava/lang/String;)Z" />
+		<method name="parent()Ljava/util/prefs/Preferences;" />
+		<method name="put(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="putBoolean(Ljava/lang/String;Z)V" />
+		<method name="putByteArray(Ljava/lang/String;[B)V" />
+		<method name="putDouble(Ljava/lang/String;D)V" />
+		<method name="putFloat(Ljava/lang/String;F)V" />
+		<method name="putInt(Ljava/lang/String;I)V" />
+		<method name="putLong(Ljava/lang/String;J)V" />
+		<method name="remove(Ljava/lang/String;)V" />
+		<method name="removeNode()V" />
+		<method name="removeNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V" />
+		<method name="removePreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V" />
+		<method name="sync()V" />
+		<method name="systemNodeForPackage(Ljava/lang/Class;)Ljava/util/prefs/Preferences;" />
+		<method name="systemRoot()Ljava/util/prefs/Preferences;" />
+		<method name="userNodeForPackage(Ljava/lang/Class;)Ljava/util/prefs/Preferences;" />
+		<method name="userRoot()Ljava/util/prefs/Preferences;" />
+		<field name="MAX_KEY_LENGTH" />
+		<field name="MAX_NAME_LENGTH" />
+		<field name="MAX_VALUE_LENGTH" />
+	</class>
+	<class name="java/util/prefs/PreferencesFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="systemRoot()Ljava/util/prefs/Preferences;" />
+		<method name="userRoot()Ljava/util/prefs/Preferences;" />
+	</class>
+	<class name="java/util/regex/MatchResult" since="1">
+		<extends name="java/lang/Object" />
+		<method name="end()I" />
+		<method name="end(I)I" />
+		<method name="group()Ljava/lang/String;" />
+		<method name="group(I)Ljava/lang/String;" />
+		<method name="groupCount()I" />
+		<method name="start()I" />
+		<method name="start(I)I" />
+	</class>
+	<class name="java/util/regex/Matcher" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/regex/MatchResult" />
+		<method name="appendReplacement(Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher;" />
+		<method name="appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;" />
+		<method name="end(Ljava/lang/String;)I" since="26" />
+		<method name="find()Z" />
+		<method name="find(I)Z" />
+		<method name="group(Ljava/lang/String;)Ljava/lang/String;" since="26" />
+		<method name="hasAnchoringBounds()Z" />
+		<method name="hasTransparentBounds()Z" />
+		<method name="hitEnd()Z" />
+		<method name="lookingAt()Z" />
+		<method name="matches()Z" />
+		<method name="pattern()Ljava/util/regex/Pattern;" />
+		<method name="quoteReplacement(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="region(II)Ljava/util/regex/Matcher;" />
+		<method name="regionEnd()I" />
+		<method name="regionStart()I" />
+		<method name="replaceAll(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="replaceFirst(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="requireEnd()Z" />
+		<method name="reset()Ljava/util/regex/Matcher;" />
+		<method name="reset(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;" />
+		<method name="start(Ljava/lang/String;)I" since="26" />
+		<method name="toMatchResult()Ljava/util/regex/MatchResult;" />
+		<method name="useAnchoringBounds(Z)Ljava/util/regex/Matcher;" />
+		<method name="usePattern(Ljava/util/regex/Pattern;)Ljava/util/regex/Matcher;" />
+		<method name="useTransparentBounds(Z)Ljava/util/regex/Matcher;" />
+	</class>
+	<class name="java/util/regex/Pattern" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="asPredicate()Ljava/util/function/Predicate;" since="24" />
+		<method name="compile(Ljava/lang/String;)Ljava/util/regex/Pattern;" />
+		<method name="compile(Ljava/lang/String;I)Ljava/util/regex/Pattern;" />
+		<method name="flags()I" />
+		<method name="matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;" />
+		<method name="matches(Ljava/lang/String;Ljava/lang/CharSequence;)Z" />
+		<method name="pattern()Ljava/lang/String;" />
+		<method name="quote(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="split(Ljava/lang/CharSequence;)[Ljava/lang/String;" />
+		<method name="split(Ljava/lang/CharSequence;I)[Ljava/lang/String;" />
+		<method name="splitAsStream(Ljava/lang/CharSequence;)Ljava/util/stream/Stream;" since="24" />
+		<field name="CANON_EQ" />
+		<field name="CASE_INSENSITIVE" />
+		<field name="COMMENTS" />
+		<field name="DOTALL" />
+		<field name="LITERAL" />
+		<field name="MULTILINE" />
+		<field name="UNICODE_CASE" />
+		<field name="UNICODE_CHARACTER_CLASS" since="24" />
+		<field name="UNIX_LINES" />
+	</class>
+	<class name="java/util/regex/PatternSyntaxException" since="1">
+		<extends name="java/lang/IllegalArgumentException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;I)V" />
+		<method name="getDescription()Ljava/lang/String;" />
+		<method name="getIndex()I" />
+		<method name="getPattern()Ljava/lang/String;" />
+	</class>
+	<class name="java/util/stream/BaseStream" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/AutoCloseable" />
+		<method name="isParallel()Z" />
+		<method name="iterator()Ljava/util/Iterator;" />
+		<method name="onClose(Ljava/lang/Runnable;)Ljava/util/stream/BaseStream;" />
+		<method name="parallel()Ljava/util/stream/BaseStream;" />
+		<method name="sequential()Ljava/util/stream/BaseStream;" />
+		<method name="spliterator()Ljava/util/Spliterator;" />
+		<method name="unordered()Ljava/util/stream/BaseStream;" />
+	</class>
+	<class name="java/util/stream/Collector" since="24">
+		<extends name="java/lang/Object" />
+		<method name="accumulator()Ljava/util/function/BiConsumer;" />
+		<method name="characteristics()Ljava/util/Set;" />
+		<method name="combiner()Ljava/util/function/BinaryOperator;" />
+		<method name="finisher()Ljava/util/function/Function;" />
+		<method name="of(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;Ljava/util/function/Function;[Ljava/util/stream/Collector$Characteristics;)Ljava/util/stream/Collector;" />
+		<method name="of(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;[Ljava/util/stream/Collector$Characteristics;)Ljava/util/stream/Collector;" />
+		<method name="supplier()Ljava/util/function/Supplier;" />
+	</class>
+	<class name="java/util/stream/Collector$Characteristics" since="24">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/stream/Collector$Characteristics;" />
+		<method name="values()[Ljava/util/stream/Collector$Characteristics;" />
+		<field name="CONCURRENT" />
+		<field name="IDENTITY_FINISH" />
+		<field name="UNORDERED" />
+	</class>
+	<class name="java/util/stream/Collectors" since="24">
+		<extends name="java/lang/Object" />
+		<method name="averagingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;" />
+		<method name="averagingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;" />
+		<method name="averagingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;" />
+		<method name="collectingAndThen(Ljava/util/stream/Collector;Ljava/util/function/Function;)Ljava/util/stream/Collector;" />
+		<method name="counting()Ljava/util/stream/Collector;" />
+		<method name="groupingBy(Ljava/util/function/Function;)Ljava/util/stream/Collector;" />
+		<method name="groupingBy(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;" />
+		<method name="groupingBy(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;" />
+		<method name="groupingByConcurrent(Ljava/util/function/Function;)Ljava/util/stream/Collector;" />
+		<method name="groupingByConcurrent(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;" />
+		<method name="groupingByConcurrent(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;" />
+		<method name="joining()Ljava/util/stream/Collector;" />
+		<method name="joining(Ljava/lang/CharSequence;)Ljava/util/stream/Collector;" />
+		<method name="joining(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/stream/Collector;" />
+		<method name="mapping(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;" />
+		<method name="maxBy(Ljava/util/Comparator;)Ljava/util/stream/Collector;" />
+		<method name="minBy(Ljava/util/Comparator;)Ljava/util/stream/Collector;" />
+		<method name="partitioningBy(Ljava/util/function/Predicate;)Ljava/util/stream/Collector;" />
+		<method name="partitioningBy(Ljava/util/function/Predicate;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;" />
+		<method name="reducing(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;" />
+		<method name="reducing(Ljava/lang/Object;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;" />
+		<method name="reducing(Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;" />
+		<method name="summarizingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;" />
+		<method name="summarizingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;" />
+		<method name="summarizingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;" />
+		<method name="summingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;" />
+		<method name="summingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;" />
+		<method name="summingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;" />
+		<method name="toCollection(Ljava/util/function/Supplier;)Ljava/util/stream/Collector;" />
+		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;" />
+		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;" />
+		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;" />
+		<method name="toList()Ljava/util/stream/Collector;" />
+		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;" />
+		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;" />
+		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;" />
+		<method name="toSet()Ljava/util/stream/Collector;" />
+	</class>
+	<class name="java/util/stream/DoubleStream" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/stream/BaseStream" />
+		<method name="allMatch(Ljava/util/function/DoublePredicate;)Z" />
+		<method name="anyMatch(Ljava/util/function/DoublePredicate;)Z" />
+		<method name="average()Ljava/util/OptionalDouble;" />
+		<method name="boxed()Ljava/util/stream/Stream;" />
+		<method name="builder()Ljava/util/stream/DoubleStream$Builder;" />
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjDoubleConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;" />
+		<method name="concat(Ljava/util/stream/DoubleStream;Ljava/util/stream/DoubleStream;)Ljava/util/stream/DoubleStream;" />
+		<method name="count()J" />
+		<method name="distinct()Ljava/util/stream/DoubleStream;" />
+		<method name="empty()Ljava/util/stream/DoubleStream;" />
+		<method name="filter(Ljava/util/function/DoublePredicate;)Ljava/util/stream/DoubleStream;" />
+		<method name="findAny()Ljava/util/OptionalDouble;" />
+		<method name="findFirst()Ljava/util/OptionalDouble;" />
+		<method name="flatMap(Ljava/util/function/DoubleFunction;)Ljava/util/stream/DoubleStream;" />
+		<method name="forEach(Ljava/util/function/DoubleConsumer;)V" />
+		<method name="forEachOrdered(Ljava/util/function/DoubleConsumer;)V" />
+		<method name="generate(Ljava/util/function/DoubleSupplier;)Ljava/util/stream/DoubleStream;" />
+		<method name="iterate(DLjava/util/function/DoubleUnaryOperator;)Ljava/util/stream/DoubleStream;" />
+		<method name="iterator()Ljava/util/PrimitiveIterator$OfDouble;" />
+		<method name="limit(J)Ljava/util/stream/DoubleStream;" />
+		<method name="map(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/stream/DoubleStream;" />
+		<method name="mapToInt(Ljava/util/function/DoubleToIntFunction;)Ljava/util/stream/IntStream;" />
+		<method name="mapToLong(Ljava/util/function/DoubleToLongFunction;)Ljava/util/stream/LongStream;" />
+		<method name="mapToObj(Ljava/util/function/DoubleFunction;)Ljava/util/stream/Stream;" />
+		<method name="max()Ljava/util/OptionalDouble;" />
+		<method name="min()Ljava/util/OptionalDouble;" />
+		<method name="noneMatch(Ljava/util/function/DoublePredicate;)Z" />
+		<method name="of(D)Ljava/util/stream/DoubleStream;" />
+		<method name="of([D)Ljava/util/stream/DoubleStream;" />
+		<method name="parallel()Ljava/util/stream/DoubleStream;" />
+		<method name="peek(Ljava/util/function/DoubleConsumer;)Ljava/util/stream/DoubleStream;" />
+		<method name="reduce(DLjava/util/function/DoubleBinaryOperator;)D" />
+		<method name="reduce(Ljava/util/function/DoubleBinaryOperator;)Ljava/util/OptionalDouble;" />
+		<method name="sequential()Ljava/util/stream/DoubleStream;" />
+		<method name="skip(J)Ljava/util/stream/DoubleStream;" />
+		<method name="sorted()Ljava/util/stream/DoubleStream;" />
+		<method name="spliterator()Ljava/util/Spliterator$OfDouble;" />
+		<method name="sum()D" />
+		<method name="summaryStatistics()Ljava/util/DoubleSummaryStatistics;" />
+		<method name="toArray()[D" />
+	</class>
+	<class name="java/util/stream/DoubleStream$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/DoubleConsumer" />
+		<method name="add(D)Ljava/util/stream/DoubleStream$Builder;" />
+		<method name="build()Ljava/util/stream/DoubleStream;" />
+	</class>
+	<class name="java/util/stream/IntStream" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/stream/BaseStream" />
+		<method name="allMatch(Ljava/util/function/IntPredicate;)Z" />
+		<method name="anyMatch(Ljava/util/function/IntPredicate;)Z" />
+		<method name="asDoubleStream()Ljava/util/stream/DoubleStream;" />
+		<method name="asLongStream()Ljava/util/stream/LongStream;" />
+		<method name="average()Ljava/util/OptionalDouble;" />
+		<method name="boxed()Ljava/util/stream/Stream;" />
+		<method name="builder()Ljava/util/stream/IntStream$Builder;" />
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjIntConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;" />
+		<method name="concat(Ljava/util/stream/IntStream;Ljava/util/stream/IntStream;)Ljava/util/stream/IntStream;" />
+		<method name="count()J" />
+		<method name="distinct()Ljava/util/stream/IntStream;" />
+		<method name="empty()Ljava/util/stream/IntStream;" />
+		<method name="filter(Ljava/util/function/IntPredicate;)Ljava/util/stream/IntStream;" />
+		<method name="findAny()Ljava/util/OptionalInt;" />
+		<method name="findFirst()Ljava/util/OptionalInt;" />
+		<method name="flatMap(Ljava/util/function/IntFunction;)Ljava/util/stream/IntStream;" />
+		<method name="forEach(Ljava/util/function/IntConsumer;)V" />
+		<method name="forEachOrdered(Ljava/util/function/IntConsumer;)V" />
+		<method name="generate(Ljava/util/function/IntSupplier;)Ljava/util/stream/IntStream;" />
+		<method name="iterate(ILjava/util/function/IntUnaryOperator;)Ljava/util/stream/IntStream;" />
+		<method name="iterator()Ljava/util/PrimitiveIterator$OfInt;" />
+		<method name="limit(J)Ljava/util/stream/IntStream;" />
+		<method name="map(Ljava/util/function/IntUnaryOperator;)Ljava/util/stream/IntStream;" />
+		<method name="mapToDouble(Ljava/util/function/IntToDoubleFunction;)Ljava/util/stream/DoubleStream;" />
+		<method name="mapToLong(Ljava/util/function/IntToLongFunction;)Ljava/util/stream/LongStream;" />
+		<method name="mapToObj(Ljava/util/function/IntFunction;)Ljava/util/stream/Stream;" />
+		<method name="max()Ljava/util/OptionalInt;" />
+		<method name="min()Ljava/util/OptionalInt;" />
+		<method name="noneMatch(Ljava/util/function/IntPredicate;)Z" />
+		<method name="of(I)Ljava/util/stream/IntStream;" />
+		<method name="of([I)Ljava/util/stream/IntStream;" />
+		<method name="parallel()Ljava/util/stream/IntStream;" />
+		<method name="peek(Ljava/util/function/IntConsumer;)Ljava/util/stream/IntStream;" />
+		<method name="range(II)Ljava/util/stream/IntStream;" />
+		<method name="rangeClosed(II)Ljava/util/stream/IntStream;" />
+		<method name="reduce(ILjava/util/function/IntBinaryOperator;)I" />
+		<method name="reduce(Ljava/util/function/IntBinaryOperator;)Ljava/util/OptionalInt;" />
+		<method name="sequential()Ljava/util/stream/IntStream;" />
+		<method name="skip(J)Ljava/util/stream/IntStream;" />
+		<method name="sorted()Ljava/util/stream/IntStream;" />
+		<method name="spliterator()Ljava/util/Spliterator$OfInt;" />
+		<method name="sum()I" />
+		<method name="summaryStatistics()Ljava/util/IntSummaryStatistics;" />
+		<method name="toArray()[I" />
+	</class>
+	<class name="java/util/stream/IntStream$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/IntConsumer" />
+		<method name="add(I)Ljava/util/stream/IntStream$Builder;" />
+		<method name="build()Ljava/util/stream/IntStream;" />
+	</class>
+	<class name="java/util/stream/LongStream" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/stream/BaseStream" />
+		<method name="allMatch(Ljava/util/function/LongPredicate;)Z" />
+		<method name="anyMatch(Ljava/util/function/LongPredicate;)Z" />
+		<method name="asDoubleStream()Ljava/util/stream/DoubleStream;" />
+		<method name="average()Ljava/util/OptionalDouble;" />
+		<method name="boxed()Ljava/util/stream/Stream;" />
+		<method name="builder()Ljava/util/stream/LongStream$Builder;" />
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjLongConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;" />
+		<method name="concat(Ljava/util/stream/LongStream;Ljava/util/stream/LongStream;)Ljava/util/stream/LongStream;" />
+		<method name="count()J" />
+		<method name="distinct()Ljava/util/stream/LongStream;" />
+		<method name="empty()Ljava/util/stream/LongStream;" />
+		<method name="filter(Ljava/util/function/LongPredicate;)Ljava/util/stream/LongStream;" />
+		<method name="findAny()Ljava/util/OptionalLong;" />
+		<method name="findFirst()Ljava/util/OptionalLong;" />
+		<method name="flatMap(Ljava/util/function/LongFunction;)Ljava/util/stream/LongStream;" />
+		<method name="forEach(Ljava/util/function/LongConsumer;)V" />
+		<method name="forEachOrdered(Ljava/util/function/LongConsumer;)V" />
+		<method name="generate(Ljava/util/function/LongSupplier;)Ljava/util/stream/LongStream;" />
+		<method name="iterate(JLjava/util/function/LongUnaryOperator;)Ljava/util/stream/LongStream;" />
+		<method name="iterator()Ljava/util/PrimitiveIterator$OfLong;" />
+		<method name="limit(J)Ljava/util/stream/LongStream;" />
+		<method name="map(Ljava/util/function/LongUnaryOperator;)Ljava/util/stream/LongStream;" />
+		<method name="mapToDouble(Ljava/util/function/LongToDoubleFunction;)Ljava/util/stream/DoubleStream;" />
+		<method name="mapToInt(Ljava/util/function/LongToIntFunction;)Ljava/util/stream/IntStream;" />
+		<method name="mapToObj(Ljava/util/function/LongFunction;)Ljava/util/stream/Stream;" />
+		<method name="max()Ljava/util/OptionalLong;" />
+		<method name="min()Ljava/util/OptionalLong;" />
+		<method name="noneMatch(Ljava/util/function/LongPredicate;)Z" />
+		<method name="of(J)Ljava/util/stream/LongStream;" />
+		<method name="of([J)Ljava/util/stream/LongStream;" />
+		<method name="parallel()Ljava/util/stream/LongStream;" />
+		<method name="peek(Ljava/util/function/LongConsumer;)Ljava/util/stream/LongStream;" />
+		<method name="range(JJ)Ljava/util/stream/LongStream;" />
+		<method name="rangeClosed(JJ)Ljava/util/stream/LongStream;" />
+		<method name="reduce(JLjava/util/function/LongBinaryOperator;)J" />
+		<method name="reduce(Ljava/util/function/LongBinaryOperator;)Ljava/util/OptionalLong;" />
+		<method name="sequential()Ljava/util/stream/LongStream;" />
+		<method name="skip(J)Ljava/util/stream/LongStream;" />
+		<method name="sorted()Ljava/util/stream/LongStream;" />
+		<method name="spliterator()Ljava/util/Spliterator$OfLong;" />
+		<method name="sum()J" />
+		<method name="summaryStatistics()Ljava/util/LongSummaryStatistics;" />
+		<method name="toArray()[J" />
+	</class>
+	<class name="java/util/stream/LongStream$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/LongConsumer" />
+		<method name="add(J)Ljava/util/stream/LongStream$Builder;" />
+		<method name="build()Ljava/util/stream/LongStream;" />
+	</class>
+	<class name="java/util/stream/Stream" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/stream/BaseStream" />
+		<method name="allMatch(Ljava/util/function/Predicate;)Z" />
+		<method name="anyMatch(Ljava/util/function/Predicate;)Z" />
+		<method name="builder()Ljava/util/stream/Stream$Builder;" />
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;" />
+		<method name="collect(Ljava/util/stream/Collector;)Ljava/lang/Object;" />
+		<method name="concat(Ljava/util/stream/Stream;Ljava/util/stream/Stream;)Ljava/util/stream/Stream;" />
+		<method name="count()J" />
+		<method name="distinct()Ljava/util/stream/Stream;" />
+		<method name="empty()Ljava/util/stream/Stream;" />
+		<method name="filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;" />
+		<method name="findAny()Ljava/util/Optional;" />
+		<method name="findFirst()Ljava/util/Optional;" />
+		<method name="flatMap(Ljava/util/function/Function;)Ljava/util/stream/Stream;" />
+		<method name="flatMapToDouble(Ljava/util/function/Function;)Ljava/util/stream/DoubleStream;" />
+		<method name="flatMapToInt(Ljava/util/function/Function;)Ljava/util/stream/IntStream;" />
+		<method name="flatMapToLong(Ljava/util/function/Function;)Ljava/util/stream/LongStream;" />
+		<method name="forEach(Ljava/util/function/Consumer;)V" />
+		<method name="forEachOrdered(Ljava/util/function/Consumer;)V" />
+		<method name="generate(Ljava/util/function/Supplier;)Ljava/util/stream/Stream;" />
+		<method name="iterate(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/util/stream/Stream;" />
+		<method name="limit(J)Ljava/util/stream/Stream;" />
+		<method name="map(Ljava/util/function/Function;)Ljava/util/stream/Stream;" />
+		<method name="mapToDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/DoubleStream;" />
+		<method name="mapToInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/IntStream;" />
+		<method name="mapToLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/LongStream;" />
+		<method name="max(Ljava/util/Comparator;)Ljava/util/Optional;" />
+		<method name="min(Ljava/util/Comparator;)Ljava/util/Optional;" />
+		<method name="noneMatch(Ljava/util/function/Predicate;)Z" />
+		<method name="of(Ljava/lang/Object;)Ljava/util/stream/Stream;" />
+		<method name="of([Ljava/lang/Object;)Ljava/util/stream/Stream;" />
+		<method name="peek(Ljava/util/function/Consumer;)Ljava/util/stream/Stream;" />
+		<method name="reduce(Ljava/lang/Object;Ljava/util/function/BiFunction;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" />
+		<method name="reduce(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" />
+		<method name="reduce(Ljava/util/function/BinaryOperator;)Ljava/util/Optional;" />
+		<method name="skip(J)Ljava/util/stream/Stream;" />
+		<method name="sorted()Ljava/util/stream/Stream;" />
+		<method name="sorted(Ljava/util/Comparator;)Ljava/util/stream/Stream;" />
+		<method name="toArray()[Ljava/lang/Object;" />
+		<method name="toArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;" />
+	</class>
+	<class name="java/util/stream/Stream$Builder" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/function/Consumer" />
+		<method name="add(Ljava/lang/Object;)Ljava/util/stream/Stream$Builder;" />
+		<method name="build()Ljava/util/stream/Stream;" />
+	</class>
+	<class name="java/util/stream/StreamSupport" since="24">
+		<extends name="java/lang/Object" />
+		<method name="doubleStream(Ljava/util/Spliterator$OfDouble;Z)Ljava/util/stream/DoubleStream;" />
+		<method name="doubleStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/DoubleStream;" />
+		<method name="intStream(Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream;" />
+		<method name="intStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/IntStream;" />
+		<method name="longStream(Ljava/util/Spliterator$OfLong;Z)Ljava/util/stream/LongStream;" />
+		<method name="longStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/LongStream;" />
+		<method name="stream(Ljava/util/Spliterator;Z)Ljava/util/stream/Stream;" />
+		<method name="stream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/Stream;" />
+	</class>
+	<class name="java/util/zip/Adler32" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/zip/Checksum" />
+		<method name="&lt;init&gt;()V" />
+		<method name="update(Ljava/nio/ByteBuffer;)V" since="26" />
+		<method name="update([B)V" />
+	</class>
+	<class name="java/util/zip/CRC32" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/zip/Checksum" />
+		<method name="&lt;init&gt;()V" />
+		<method name="update(Ljava/nio/ByteBuffer;)V" since="26" />
+		<method name="update([B)V" />
+	</class>
+	<class name="java/util/zip/CheckedInputStream" since="1">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/util/zip/Checksum;)V" />
+		<method name="getChecksum()Ljava/util/zip/Checksum;" />
+	</class>
+	<class name="java/util/zip/CheckedOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/zip/Checksum;)V" />
+		<method name="getChecksum()Ljava/util/zip/Checksum;" />
+	</class>
+	<class name="java/util/zip/Checksum" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getValue()J" />
+		<method name="reset()V" />
+		<method name="update(I)V" />
+		<method name="update([BII)V" />
+	</class>
+	<class name="java/util/zip/DataFormatException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/zip/Deflater" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(IZ)V" />
+		<method name="deflate([B)I" />
+		<method name="deflate([BII)I" />
+		<method name="deflate([BIII)I" since="19" />
+		<method name="end()V" />
+		<method name="finish()V" />
+		<method name="finished()Z" />
+		<method name="getAdler()I" />
+		<method name="getBytesRead()J" />
+		<method name="getBytesWritten()J" />
+		<method name="getTotalIn()I" />
+		<method name="getTotalOut()I" />
+		<method name="needsInput()Z" />
+		<method name="reset()V" />
+		<method name="setDictionary([B)V" />
+		<method name="setDictionary([BII)V" />
+		<method name="setInput([B)V" />
+		<method name="setInput([BII)V" />
+		<method name="setLevel(I)V" />
+		<method name="setStrategy(I)V" />
+		<field name="BEST_COMPRESSION" />
+		<field name="BEST_SPEED" />
+		<field name="DEFAULT_COMPRESSION" />
+		<field name="DEFAULT_STRATEGY" />
+		<field name="DEFLATED" />
+		<field name="FILTERED" />
+		<field name="FULL_FLUSH" since="19" />
+		<field name="HUFFMAN_ONLY" />
+		<field name="NO_COMPRESSION" />
+		<field name="NO_FLUSH" since="19" />
+		<field name="SYNC_FLUSH" since="19" />
+	</class>
+	<class name="java/util/zip/DeflaterInputStream" since="9">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/util/zip/Deflater;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/util/zip/Deflater;I)V" />
+		<field name="buf" />
+		<field name="def" />
+	</class>
+	<class name="java/util/zip/DeflaterOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/zip/Deflater;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/zip/Deflater;I)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/zip/Deflater;IZ)V" since="19" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/zip/Deflater;Z)V" since="19" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Z)V" since="19" />
+		<method name="deflate()V" />
+		<method name="finish()V" />
+		<field name="buf" />
+		<field name="def" />
+	</class>
+	<class name="java/util/zip/GZIPInputStream" since="1">
+		<extends name="java/util/zip/InflaterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;I)V" />
+		<field name="GZIP_MAGIC" />
+		<field name="crc" />
+		<field name="eos" />
+	</class>
+	<class name="java/util/zip/GZIPOutputStream" since="1">
+		<extends name="java/util/zip/DeflaterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;I)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;IZ)V" since="19" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Z)V" since="19" />
+		<field name="crc" />
+	</class>
+	<class name="java/util/zip/Inflater" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Z)V" />
+		<method name="end()V" />
+		<method name="finished()Z" />
+		<method name="getAdler()I" />
+		<method name="getBytesRead()J" />
+		<method name="getBytesWritten()J" />
+		<method name="getRemaining()I" />
+		<method name="getTotalIn()I" />
+		<method name="getTotalOut()I" />
+		<method name="inflate([B)I" />
+		<method name="inflate([BII)I" />
+		<method name="needsDictionary()Z" />
+		<method name="needsInput()Z" />
+		<method name="reset()V" />
+		<method name="setDictionary([B)V" />
+		<method name="setDictionary([BII)V" />
+		<method name="setInput([B)V" />
+		<method name="setInput([BII)V" />
+	</class>
+	<class name="java/util/zip/InflaterInputStream" since="1">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/util/zip/Inflater;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V" />
+		<method name="fill()V" />
+		<field name="buf" />
+		<field name="closed" since="24" deprecated="29" />
+		<field name="inf" />
+		<field name="len" />
+	</class>
+	<class name="java/util/zip/InflaterOutputStream" since="9">
+		<extends name="java/io/FilterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/zip/Inflater;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/util/zip/Inflater;I)V" />
+		<method name="finish()V" />
+		<field name="buf" />
+		<field name="inf" />
+	</class>
+	<class name="java/util/zip/ZipEntry" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/util/zip/ZipEntry;)V" />
+		<method name="getComment()Ljava/lang/String;" />
+		<method name="getCompressedSize()J" />
+		<method name="getCrc()J" />
+		<method name="getCreationTime()Ljava/nio/file/attribute/FileTime;" since="26" />
+		<method name="getExtra()[B" />
+		<method name="getLastAccessTime()Ljava/nio/file/attribute/FileTime;" since="26" />
+		<method name="getLastModifiedTime()Ljava/nio/file/attribute/FileTime;" since="26" />
+		<method name="getMethod()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSize()J" />
+		<method name="getTime()J" />
+		<method name="isDirectory()Z" />
+		<method name="setComment(Ljava/lang/String;)V" />
+		<method name="setCompressedSize(J)V" />
+		<method name="setCrc(J)V" />
+		<method name="setCreationTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26" />
+		<method name="setExtra([B)V" />
+		<method name="setLastAccessTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26" />
+		<method name="setLastModifiedTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26" />
+		<method name="setMethod(I)V" />
+		<method name="setSize(J)V" />
+		<method name="setTime(J)V" />
+		<field name="CENATT" since="21" />
+		<field name="CENATX" since="21" />
+		<field name="CENCOM" since="21" />
+		<field name="CENCRC" since="21" />
+		<field name="CENDSK" since="21" />
+		<field name="CENEXT" since="21" />
+		<field name="CENFLG" since="21" />
+		<field name="CENHDR" since="21" />
+		<field name="CENHOW" since="21" />
+		<field name="CENLEN" since="21" />
+		<field name="CENNAM" since="21" />
+		<field name="CENOFF" since="21" />
+		<field name="CENSIG" since="21" />
+		<field name="CENSIZ" since="21" />
+		<field name="CENTIM" since="21" />
+		<field name="CENVEM" since="21" />
+		<field name="CENVER" since="21" />
+		<field name="DEFLATED" />
+		<field name="ENDCOM" since="21" />
+		<field name="ENDHDR" since="21" />
+		<field name="ENDOFF" since="21" />
+		<field name="ENDSIG" since="21" />
+		<field name="ENDSIZ" since="21" />
+		<field name="ENDSUB" since="21" />
+		<field name="ENDTOT" since="21" />
+		<field name="EXTCRC" since="21" />
+		<field name="EXTHDR" since="21" />
+		<field name="EXTLEN" since="21" />
+		<field name="EXTSIG" since="21" />
+		<field name="EXTSIZ" since="21" />
+		<field name="LOCCRC" since="21" />
+		<field name="LOCEXT" since="21" />
+		<field name="LOCFLG" since="21" />
+		<field name="LOCHDR" since="21" />
+		<field name="LOCHOW" since="21" />
+		<field name="LOCLEN" since="21" />
+		<field name="LOCNAM" since="21" />
+		<field name="LOCSIG" since="21" />
+		<field name="LOCSIZ" since="21" />
+		<field name="LOCTIM" since="21" />
+		<field name="LOCVER" since="21" />
+		<field name="STORED" />
+	</class>
+	<class name="java/util/zip/ZipError" since="9">
+		<extends name="java/lang/InternalError" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/zip/ZipException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="java/util/zip/ZipFile" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Closeable" since="19" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;I)V" />
+		<method name="&lt;init&gt;(Ljava/io/File;ILjava/nio/charset/Charset;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/nio/charset/Charset;)V" since="24" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/nio/charset/Charset;)V" since="24" />
+		<method name="close()V" />
+		<method name="entries()Ljava/util/Enumeration;" />
+		<method name="getComment()Ljava/lang/String;" since="19" />
+		<method name="getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;" />
+		<method name="getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="size()I" />
+		<method name="stream()Ljava/util/stream/Stream;" since="26" />
+		<field name="CENATT" since="21" />
+		<field name="CENATX" since="21" />
+		<field name="CENCOM" since="21" />
+		<field name="CENCRC" since="21" />
+		<field name="CENDSK" since="21" />
+		<field name="CENEXT" since="21" />
+		<field name="CENFLG" since="21" />
+		<field name="CENHDR" since="21" />
+		<field name="CENHOW" since="21" />
+		<field name="CENLEN" since="21" />
+		<field name="CENNAM" since="21" />
+		<field name="CENOFF" since="21" />
+		<field name="CENSIG" since="21" />
+		<field name="CENSIZ" since="21" />
+		<field name="CENTIM" since="21" />
+		<field name="CENVEM" since="21" />
+		<field name="CENVER" since="21" />
+		<field name="ENDCOM" since="21" />
+		<field name="ENDHDR" since="21" />
+		<field name="ENDOFF" since="21" />
+		<field name="ENDSIG" since="21" />
+		<field name="ENDSIZ" since="21" />
+		<field name="ENDSUB" since="21" />
+		<field name="ENDTOT" since="21" />
+		<field name="EXTCRC" since="21" />
+		<field name="EXTHDR" since="21" />
+		<field name="EXTLEN" since="21" />
+		<field name="EXTSIG" since="21" />
+		<field name="EXTSIZ" since="21" />
+		<field name="LOCCRC" since="21" />
+		<field name="LOCEXT" since="21" />
+		<field name="LOCFLG" since="21" />
+		<field name="LOCHDR" since="21" />
+		<field name="LOCHOW" since="21" />
+		<field name="LOCLEN" since="21" />
+		<field name="LOCNAM" since="21" />
+		<field name="LOCSIG" since="21" />
+		<field name="LOCSIZ" since="21" />
+		<field name="LOCTIM" since="21" />
+		<field name="LOCVER" since="21" />
+		<field name="OPEN_DELETE" />
+		<field name="OPEN_READ" />
+	</class>
+	<class name="java/util/zip/ZipInputStream" since="1">
+		<extends name="java/util/zip/InflaterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V" since="24" />
+		<method name="closeEntry()V" />
+		<method name="createZipEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;" />
+		<method name="getNextEntry()Ljava/util/zip/ZipEntry;" />
+		<field name="CENATT" since="21" />
+		<field name="CENATX" since="21" />
+		<field name="CENCOM" since="21" />
+		<field name="CENCRC" since="21" />
+		<field name="CENDSK" since="21" />
+		<field name="CENEXT" since="21" />
+		<field name="CENFLG" since="21" />
+		<field name="CENHDR" since="21" />
+		<field name="CENHOW" since="21" />
+		<field name="CENLEN" since="21" />
+		<field name="CENNAM" since="21" />
+		<field name="CENOFF" since="21" />
+		<field name="CENSIG" since="21" />
+		<field name="CENSIZ" since="21" />
+		<field name="CENTIM" since="21" />
+		<field name="CENVEM" since="21" />
+		<field name="CENVER" since="21" />
+		<field name="ENDCOM" since="21" />
+		<field name="ENDHDR" since="21" />
+		<field name="ENDOFF" since="21" />
+		<field name="ENDSIG" since="21" />
+		<field name="ENDSIZ" since="21" />
+		<field name="ENDSUB" since="21" />
+		<field name="ENDTOT" since="21" />
+		<field name="EXTCRC" since="21" />
+		<field name="EXTHDR" since="21" />
+		<field name="EXTLEN" since="21" />
+		<field name="EXTSIG" since="21" />
+		<field name="EXTSIZ" since="21" />
+		<field name="LOCCRC" since="21" />
+		<field name="LOCEXT" since="21" />
+		<field name="LOCFLG" since="21" />
+		<field name="LOCHDR" since="21" />
+		<field name="LOCHOW" since="21" />
+		<field name="LOCLEN" since="21" />
+		<field name="LOCNAM" since="21" />
+		<field name="LOCSIG" since="21" />
+		<field name="LOCSIZ" since="21" />
+		<field name="LOCTIM" since="21" />
+		<field name="LOCVER" since="21" />
+	</class>
+	<class name="java/util/zip/ZipOutputStream" since="1">
+		<extends name="java/util/zip/DeflaterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V" since="24" />
+		<method name="closeEntry()V" />
+		<method name="putNextEntry(Ljava/util/zip/ZipEntry;)V" />
+		<method name="setComment(Ljava/lang/String;)V" />
+		<method name="setLevel(I)V" />
+		<method name="setMethod(I)V" />
+		<field name="CENATT" since="21" />
+		<field name="CENATX" since="21" />
+		<field name="CENCOM" since="21" />
+		<field name="CENCRC" since="21" />
+		<field name="CENDSK" since="21" />
+		<field name="CENEXT" since="21" />
+		<field name="CENFLG" since="21" />
+		<field name="CENHDR" since="21" />
+		<field name="CENHOW" since="21" />
+		<field name="CENLEN" since="21" />
+		<field name="CENNAM" since="21" />
+		<field name="CENOFF" since="21" />
+		<field name="CENSIG" since="21" />
+		<field name="CENSIZ" since="21" />
+		<field name="CENTIM" since="21" />
+		<field name="CENVEM" since="21" />
+		<field name="CENVER" since="21" />
+		<field name="DEFLATED" />
+		<field name="ENDCOM" since="21" />
+		<field name="ENDHDR" since="21" />
+		<field name="ENDOFF" since="21" />
+		<field name="ENDSIG" since="21" />
+		<field name="ENDSIZ" since="21" />
+		<field name="ENDSUB" since="21" />
+		<field name="ENDTOT" since="21" />
+		<field name="EXTCRC" since="21" />
+		<field name="EXTHDR" since="21" />
+		<field name="EXTLEN" since="21" />
+		<field name="EXTSIG" since="21" />
+		<field name="EXTSIZ" since="21" />
+		<field name="LOCCRC" since="21" />
+		<field name="LOCEXT" since="21" />
+		<field name="LOCFLG" since="21" />
+		<field name="LOCHDR" since="21" />
+		<field name="LOCHOW" since="21" />
+		<field name="LOCLEN" since="21" />
+		<field name="LOCNAM" since="21" />
+		<field name="LOCSIG" since="21" />
+		<field name="LOCSIZ" since="21" />
+		<field name="LOCTIM" since="21" />
+		<field name="LOCVER" since="21" />
+		<field name="STORED" />
+	</class>
+	<class name="javax/crypto/AEADBadTagException" since="19">
+		<extends name="javax/crypto/BadPaddingException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/crypto/BadPaddingException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/crypto/Cipher" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/crypto/CipherSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="doFinal()[B" />
+		<method name="doFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I" />
+		<method name="doFinal([B)[B" />
+		<method name="doFinal([BI)I" />
+		<method name="doFinal([BII)[B" />
+		<method name="doFinal([BII[B)I" />
+		<method name="doFinal([BII[BI)I" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getBlockSize()I" />
+		<method name="getExemptionMechanism()Ljavax/crypto/ExemptionMechanism;" />
+		<method name="getIV()[B" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Cipher;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher;" />
+		<method name="getMaxAllowedKeyLength(Ljava/lang/String;)I" />
+		<method name="getMaxAllowedParameterSpec(Ljava/lang/String;)Ljava/security/spec/AlgorithmParameterSpec;" />
+		<method name="getOutputSize(I)I" />
+		<method name="getParameters()Ljava/security/AlgorithmParameters;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(ILjava/security/Key;)V" />
+		<method name="init(ILjava/security/Key;Ljava/security/AlgorithmParameters;)V" />
+		<method name="init(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V" />
+		<method name="init(ILjava/security/Key;Ljava/security/SecureRandom;)V" />
+		<method name="init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+		<method name="init(ILjava/security/cert/Certificate;)V" />
+		<method name="init(ILjava/security/cert/Certificate;Ljava/security/SecureRandom;)V" />
+		<method name="unwrap([BLjava/lang/String;I)Ljava/security/Key;" />
+		<method name="update(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I" />
+		<method name="update([B)[B" />
+		<method name="update([BII)[B" />
+		<method name="update([BII[B)I" />
+		<method name="update([BII[BI)I" />
+		<method name="updateAAD(Ljava/nio/ByteBuffer;)V" since="19" />
+		<method name="updateAAD([B)V" since="19" />
+		<method name="updateAAD([BII)V" since="19" />
+		<method name="wrap(Ljava/security/Key;)[B" />
+		<field name="DECRYPT_MODE" />
+		<field name="ENCRYPT_MODE" />
+		<field name="PRIVATE_KEY" />
+		<field name="PUBLIC_KEY" />
+		<field name="SECRET_KEY" />
+		<field name="UNWRAP_MODE" />
+		<field name="WRAP_MODE" />
+	</class>
+	<class name="javax/crypto/CipherInputStream" since="1">
+		<extends name="java/io/FilterInputStream" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljavax/crypto/Cipher;)V" />
+	</class>
+	<class name="javax/crypto/CipherOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V" />
+	</class>
+	<class name="javax/crypto/CipherSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineDoFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I" />
+		<method name="engineDoFinal([BII)[B" />
+		<method name="engineDoFinal([BII[BI)I" />
+		<method name="engineGetBlockSize()I" />
+		<method name="engineGetIV()[B" />
+		<method name="engineGetKeySize(Ljava/security/Key;)I" />
+		<method name="engineGetOutputSize(I)I" />
+		<method name="engineGetParameters()Ljava/security/AlgorithmParameters;" />
+		<method name="engineInit(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V" />
+		<method name="engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V" />
+		<method name="engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+		<method name="engineSetMode(Ljava/lang/String;)V" />
+		<method name="engineSetPadding(Ljava/lang/String;)V" />
+		<method name="engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;" />
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I" />
+		<method name="engineUpdate([BII)[B" />
+		<method name="engineUpdate([BII[BI)I" />
+		<method name="engineUpdateAAD(Ljava/nio/ByteBuffer;)V" since="19" />
+		<method name="engineUpdateAAD([BII)V" since="19" />
+		<method name="engineWrap(Ljava/security/Key;)[B" />
+	</class>
+	<class name="javax/crypto/EncryptedPrivateKeyInfo" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;[B)V" />
+		<method name="&lt;init&gt;(Ljava/security/AlgorithmParameters;[B)V" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="getAlgName()Ljava/lang/String;" />
+		<method name="getAlgParameters()Ljava/security/AlgorithmParameters;" />
+		<method name="getEncoded()[B" />
+		<method name="getEncryptedData()[B" />
+		<method name="getKeySpec(Ljava/security/Key;)Ljava/security/spec/PKCS8EncodedKeySpec;" />
+		<method name="getKeySpec(Ljava/security/Key;Ljava/lang/String;)Ljava/security/spec/PKCS8EncodedKeySpec;" />
+		<method name="getKeySpec(Ljava/security/Key;Ljava/security/Provider;)Ljava/security/spec/PKCS8EncodedKeySpec;" />
+		<method name="getKeySpec(Ljavax/crypto/Cipher;)Ljava/security/spec/PKCS8EncodedKeySpec;" />
+	</class>
+	<class name="javax/crypto/ExemptionMechanism" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/crypto/ExemptionMechanismSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="genExemptionBlob()[B" />
+		<method name="genExemptionBlob([B)I" />
+		<method name="genExemptionBlob([BI)I" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/ExemptionMechanism;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/ExemptionMechanism;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/ExemptionMechanism;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getOutputSize(I)I" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(Ljava/security/Key;)V" />
+		<method name="init(Ljava/security/Key;Ljava/security/AlgorithmParameters;)V" />
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="isCryptoAllowed(Ljava/security/Key;)Z" />
+	</class>
+	<class name="javax/crypto/ExemptionMechanismException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/crypto/ExemptionMechanismSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGenExemptionBlob()[B" />
+		<method name="engineGenExemptionBlob([BI)I" />
+		<method name="engineGetOutputSize(I)I" />
+		<method name="engineInit(Ljava/security/Key;)V" />
+		<method name="engineInit(Ljava/security/Key;Ljava/security/AlgorithmParameters;)V" />
+		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V" />
+	</class>
+	<class name="javax/crypto/IllegalBlockSizeException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/crypto/KeyAgreement" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/crypto/KeyAgreementSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="doPhase(Ljava/security/Key;Z)Ljava/security/Key;" />
+		<method name="generateSecret()[B" />
+		<method name="generateSecret(Ljava/lang/String;)Ljavax/crypto/SecretKey;" />
+		<method name="generateSecret([BI)I" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/KeyAgreement;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/KeyAgreement;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(Ljava/security/Key;)V" />
+		<method name="init(Ljava/security/Key;Ljava/security/SecureRandom;)V" />
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="javax/crypto/KeyAgreementSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineDoPhase(Ljava/security/Key;Z)Ljava/security/Key;" />
+		<method name="engineGenerateSecret()[B" />
+		<method name="engineGenerateSecret(Ljava/lang/String;)Ljavax/crypto/SecretKey;" />
+		<method name="engineGenerateSecret([BI)I" />
+		<method name="engineInit(Ljava/security/Key;Ljava/security/SecureRandom;)V" />
+		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="javax/crypto/KeyGenerator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/crypto/KeyGeneratorSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="generateKey()Ljavax/crypto/SecretKey;" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/KeyGenerator;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/KeyGenerator;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(I)V" />
+		<method name="init(ILjava/security/SecureRandom;)V" />
+		<method name="init(Ljava/security/SecureRandom;)V" />
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="javax/crypto/KeyGeneratorSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGenerateKey()Ljavax/crypto/SecretKey;" />
+		<method name="engineInit(ILjava/security/SecureRandom;)V" />
+		<method name="engineInit(Ljava/security/SecureRandom;)V" />
+		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="javax/crypto/Mac" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljavax/crypto/MacSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="doFinal()[B" />
+		<method name="doFinal([B)[B" />
+		<method name="doFinal([BI)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Mac;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Mac;" />
+		<method name="getMacLength()I" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(Ljava/security/Key;)V" />
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="reset()V" />
+		<method name="update(B)V" />
+		<method name="update(Ljava/nio/ByteBuffer;)V" />
+		<method name="update([B)V" />
+		<method name="update([BII)V" />
+	</class>
+	<class name="javax/crypto/MacSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineDoFinal()[B" />
+		<method name="engineGetMacLength()I" />
+		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V" />
+		<method name="engineReset()V" />
+		<method name="engineUpdate(B)V" />
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V" />
+		<method name="engineUpdate([BII)V" />
+	</class>
+	<class name="javax/crypto/NoSuchPaddingException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/crypto/NullCipher" since="1">
+		<extends name="javax/crypto/Cipher" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="javax/crypto/SealedObject" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/io/Serializable;Ljavax/crypto/Cipher;)V" />
+		<method name="&lt;init&gt;(Ljavax/crypto/SealedObject;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getObject(Ljava/security/Key;)Ljava/lang/Object;" />
+		<method name="getObject(Ljava/security/Key;Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getObject(Ljavax/crypto/Cipher;)Ljava/lang/Object;" />
+		<field name="encodedParams" />
+	</class>
+	<class name="javax/crypto/SecretKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/Key" />
+		<implements name="javax/security/auth/Destroyable" since="26" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="javax/crypto/SecretKeyFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/crypto/SecretKeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="generateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/SecretKeyFactory;" />
+		<method name="getKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="translateKey(Ljavax/crypto/SecretKey;)Ljavax/crypto/SecretKey;" />
+	</class>
+	<class name="javax/crypto/SecretKeyFactorySpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGenerateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;" />
+		<method name="engineGetKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;" />
+		<method name="engineTranslateKey(Ljavax/crypto/SecretKey;)Ljavax/crypto/SecretKey;" />
+	</class>
+	<class name="javax/crypto/ShortBufferException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/crypto/interfaces/DHKey" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getParams()Ljavax/crypto/spec/DHParameterSpec;" />
+	</class>
+	<class name="javax/crypto/interfaces/DHPrivateKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PrivateKey" />
+		<implements name="javax/crypto/interfaces/DHKey" />
+		<method name="getX()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="javax/crypto/interfaces/DHPublicKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/PublicKey" />
+		<implements name="javax/crypto/interfaces/DHKey" />
+		<method name="getY()Ljava/math/BigInteger;" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="javax/crypto/interfaces/PBEKey" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/crypto/SecretKey" />
+		<method name="getIterationCount()I" />
+		<method name="getPassword()[C" />
+		<method name="getSalt()[B" />
+		<field name="serialVersionUID" />
+	</class>
+	<class name="javax/crypto/spec/DESKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="&lt;init&gt;([BI)V" />
+		<method name="getKey()[B" />
+		<method name="isParityAdjusted([BI)Z" />
+		<method name="isWeak([BI)Z" />
+		<field name="DES_KEY_LEN" />
+	</class>
+	<class name="javax/crypto/spec/DESedeKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="&lt;init&gt;([BI)V" />
+		<method name="getKey()[B" />
+		<method name="isParityAdjusted([BI)Z" />
+		<field name="DES_EDE_KEY_LEN" />
+	</class>
+	<class name="javax/crypto/spec/DHGenParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="getExponentSize()I" />
+		<method name="getPrimeSize()I" />
+	</class>
+	<class name="javax/crypto/spec/DHParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;I)V" />
+		<method name="getG()Ljava/math/BigInteger;" />
+		<method name="getL()I" />
+		<method name="getP()Ljava/math/BigInteger;" />
+	</class>
+	<class name="javax/crypto/spec/DHPrivateKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getG()Ljava/math/BigInteger;" />
+		<method name="getP()Ljava/math/BigInteger;" />
+		<method name="getX()Ljava/math/BigInteger;" />
+	</class>
+	<class name="javax/crypto/spec/DHPublicKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V" />
+		<method name="getG()Ljava/math/BigInteger;" />
+		<method name="getP()Ljava/math/BigInteger;" />
+		<method name="getY()Ljava/math/BigInteger;" />
+	</class>
+	<class name="javax/crypto/spec/GCMParameterSpec" since="19">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(I[B)V" />
+		<method name="&lt;init&gt;(I[BII)V" />
+		<method name="getIV()[B" />
+		<method name="getTLen()I" />
+	</class>
+	<class name="javax/crypto/spec/IvParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="&lt;init&gt;([BII)V" />
+		<method name="getIV()[B" />
+	</class>
+	<class name="javax/crypto/spec/OAEPParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V" />
+		<method name="getDigestAlgorithm()Ljava/lang/String;" />
+		<method name="getMGFAlgorithm()Ljava/lang/String;" />
+		<method name="getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;" />
+		<method name="getPSource()Ljavax/crypto/spec/PSource;" />
+		<field name="DEFAULT" />
+	</class>
+	<class name="javax/crypto/spec/PBEKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/KeySpec" />
+		<method name="&lt;init&gt;([C)V" />
+		<method name="&lt;init&gt;([C[BI)V" />
+		<method name="&lt;init&gt;([C[BII)V" />
+		<method name="clearPassword()V" />
+		<method name="getIterationCount()I" />
+		<method name="getKeyLength()I" />
+		<method name="getPassword()[C" />
+		<method name="getSalt()[B" />
+	</class>
+	<class name="javax/crypto/spec/PBEParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;([BI)V" />
+		<method name="&lt;init&gt;([BILjava/security/spec/AlgorithmParameterSpec;)V" since="26" />
+		<method name="getIterationCount()I" />
+		<method name="getParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="26" />
+		<method name="getSalt()[B" />
+	</class>
+	<class name="javax/crypto/spec/PSource" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+	</class>
+	<class name="javax/crypto/spec/PSource$PSpecified" since="1">
+		<extends name="javax/crypto/spec/PSource" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="getValue()[B" />
+		<field name="DEFAULT" />
+	</class>
+	<class name="javax/crypto/spec/RC2ParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(I[B)V" />
+		<method name="&lt;init&gt;(I[BI)V" />
+		<method name="getEffectiveKeyBits()I" />
+		<method name="getIV()[B" />
+	</class>
+	<class name="javax/crypto/spec/RC5ParameterSpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/spec/AlgorithmParameterSpec" />
+		<method name="&lt;init&gt;(III)V" />
+		<method name="&lt;init&gt;(III[B)V" />
+		<method name="&lt;init&gt;(III[BI)V" />
+		<method name="getIV()[B" />
+		<method name="getRounds()I" />
+		<method name="getVersion()I" />
+		<method name="getWordSize()I" />
+	</class>
+	<class name="javax/crypto/spec/SecretKeySpec" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" removed="24" />
+		<implements name="java/security/spec/KeySpec" />
+		<implements name="javax/crypto/SecretKey" />
+		<method name="&lt;init&gt;([BIILjava/lang/String;)V" />
+		<method name="&lt;init&gt;([BLjava/lang/String;)V" />
+	</class>
+	<class name="javax/microedition/khronos/egl/EGL" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="javax/microedition/khronos/egl/EGL10" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/microedition/khronos/egl/EGL" />
+		<method name="eglChooseConfig(Ljavax/microedition/khronos/egl/EGLDisplay;[I[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z" />
+		<method name="eglCopyBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljava/lang/Object;)Z" />
+		<method name="eglCreateContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljavax/microedition/khronos/egl/EGLContext;[I)Ljavax/microedition/khronos/egl/EGLContext;" />
+		<method name="eglCreatePbufferSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;[I)Ljavax/microedition/khronos/egl/EGLSurface;" />
+		<method name="eglCreatePixmapSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;" deprecated="26" />
+		<method name="eglCreateWindowSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;" />
+		<method name="eglDestroyContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)Z" />
+		<method name="eglDestroySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z" />
+		<method name="eglGetConfigAttrib(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z" />
+		<method name="eglGetConfigs(Ljavax/microedition/khronos/egl/EGLDisplay;[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z" />
+		<method name="eglGetCurrentContext()Ljavax/microedition/khronos/egl/EGLContext;" />
+		<method name="eglGetCurrentDisplay()Ljavax/microedition/khronos/egl/EGLDisplay;" />
+		<method name="eglGetCurrentSurface(I)Ljavax/microedition/khronos/egl/EGLSurface;" />
+		<method name="eglGetDisplay(Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLDisplay;" />
+		<method name="eglGetError()I" />
+		<method name="eglInitialize(Ljavax/microedition/khronos/egl/EGLDisplay;[I)Z" />
+		<method name="eglMakeCurrent(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLContext;)Z" />
+		<method name="eglQueryContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;I[I)Z" />
+		<method name="eglQueryString(Ljavax/microedition/khronos/egl/EGLDisplay;I)Ljava/lang/String;" />
+		<method name="eglQuerySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;I[I)Z" />
+		<method name="eglSwapBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z" />
+		<method name="eglTerminate(Ljavax/microedition/khronos/egl/EGLDisplay;)Z" />
+		<method name="eglWaitGL()Z" />
+		<method name="eglWaitNative(ILjava/lang/Object;)Z" />
+		<field name="EGL_ALPHA_FORMAT" />
+		<field name="EGL_ALPHA_MASK_SIZE" />
+		<field name="EGL_ALPHA_SIZE" />
+		<field name="EGL_BAD_ACCESS" />
+		<field name="EGL_BAD_ALLOC" />
+		<field name="EGL_BAD_ATTRIBUTE" />
+		<field name="EGL_BAD_CONFIG" />
+		<field name="EGL_BAD_CONTEXT" />
+		<field name="EGL_BAD_CURRENT_SURFACE" />
+		<field name="EGL_BAD_DISPLAY" />
+		<field name="EGL_BAD_MATCH" />
+		<field name="EGL_BAD_NATIVE_PIXMAP" />
+		<field name="EGL_BAD_NATIVE_WINDOW" />
+		<field name="EGL_BAD_PARAMETER" />
+		<field name="EGL_BAD_SURFACE" />
+		<field name="EGL_BLUE_SIZE" />
+		<field name="EGL_BUFFER_SIZE" />
+		<field name="EGL_COLORSPACE" />
+		<field name="EGL_COLOR_BUFFER_TYPE" />
+		<field name="EGL_CONFIG_CAVEAT" />
+		<field name="EGL_CONFIG_ID" />
+		<field name="EGL_CORE_NATIVE_ENGINE" />
+		<field name="EGL_DEFAULT_DISPLAY" />
+		<field name="EGL_DEPTH_SIZE" />
+		<field name="EGL_DONT_CARE" />
+		<field name="EGL_DRAW" />
+		<field name="EGL_EXTENSIONS" />
+		<field name="EGL_GREEN_SIZE" />
+		<field name="EGL_HEIGHT" />
+		<field name="EGL_HORIZONTAL_RESOLUTION" />
+		<field name="EGL_LARGEST_PBUFFER" />
+		<field name="EGL_LEVEL" />
+		<field name="EGL_LUMINANCE_BUFFER" />
+		<field name="EGL_LUMINANCE_SIZE" />
+		<field name="EGL_MAX_PBUFFER_HEIGHT" />
+		<field name="EGL_MAX_PBUFFER_PIXELS" />
+		<field name="EGL_MAX_PBUFFER_WIDTH" />
+		<field name="EGL_NATIVE_RENDERABLE" />
+		<field name="EGL_NATIVE_VISUAL_ID" />
+		<field name="EGL_NATIVE_VISUAL_TYPE" />
+		<field name="EGL_NONE" />
+		<field name="EGL_NON_CONFORMANT_CONFIG" />
+		<field name="EGL_NOT_INITIALIZED" />
+		<field name="EGL_NO_CONTEXT" />
+		<field name="EGL_NO_DISPLAY" />
+		<field name="EGL_NO_SURFACE" />
+		<field name="EGL_PBUFFER_BIT" />
+		<field name="EGL_PIXEL_ASPECT_RATIO" />
+		<field name="EGL_PIXMAP_BIT" />
+		<field name="EGL_READ" />
+		<field name="EGL_RED_SIZE" />
+		<field name="EGL_RENDERABLE_TYPE" />
+		<field name="EGL_RENDER_BUFFER" />
+		<field name="EGL_RGB_BUFFER" />
+		<field name="EGL_SAMPLES" />
+		<field name="EGL_SAMPLE_BUFFERS" />
+		<field name="EGL_SINGLE_BUFFER" />
+		<field name="EGL_SLOW_CONFIG" />
+		<field name="EGL_STENCIL_SIZE" />
+		<field name="EGL_SUCCESS" />
+		<field name="EGL_SURFACE_TYPE" />
+		<field name="EGL_TRANSPARENT_BLUE_VALUE" />
+		<field name="EGL_TRANSPARENT_GREEN_VALUE" />
+		<field name="EGL_TRANSPARENT_RED_VALUE" />
+		<field name="EGL_TRANSPARENT_RGB" />
+		<field name="EGL_TRANSPARENT_TYPE" />
+		<field name="EGL_VENDOR" />
+		<field name="EGL_VERSION" />
+		<field name="EGL_VERTICAL_RESOLUTION" />
+		<field name="EGL_WIDTH" />
+		<field name="EGL_WINDOW_BIT" />
+	</class>
+	<class name="javax/microedition/khronos/egl/EGL11" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/microedition/khronos/egl/EGL10" />
+		<field name="EGL_CONTEXT_LOST" />
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLConfig" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLContext" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getEGL()Ljavax/microedition/khronos/egl/EGL;" />
+		<method name="getGL()Ljavax/microedition/khronos/opengles/GL;" />
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLDisplay" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLSurface" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL10" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/microedition/khronos/opengles/GL" />
+		<method name="glActiveTexture(I)V" />
+		<method name="glAlphaFunc(IF)V" />
+		<method name="glAlphaFuncx(II)V" />
+		<method name="glBindTexture(II)V" />
+		<method name="glBlendFunc(II)V" />
+		<method name="glClear(I)V" />
+		<method name="glClearColor(FFFF)V" />
+		<method name="glClearColorx(IIII)V" />
+		<method name="glClearDepthf(F)V" />
+		<method name="glClearDepthx(I)V" />
+		<method name="glClearStencil(I)V" />
+		<method name="glClientActiveTexture(I)V" />
+		<method name="glColor4f(FFFF)V" />
+		<method name="glColor4x(IIII)V" />
+		<method name="glColorMask(ZZZZ)V" />
+		<method name="glColorPointer(IIILjava/nio/Buffer;)V" />
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCopyTexImage2D(IIIIIIII)V" />
+		<method name="glCopyTexSubImage2D(IIIIIIII)V" />
+		<method name="glCullFace(I)V" />
+		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteTextures(I[II)V" />
+		<method name="glDepthFunc(I)V" />
+		<method name="glDepthMask(Z)V" />
+		<method name="glDepthRangef(FF)V" />
+		<method name="glDepthRangex(II)V" />
+		<method name="glDisable(I)V" />
+		<method name="glDisableClientState(I)V" />
+		<method name="glDrawArrays(III)V" />
+		<method name="glDrawElements(IIILjava/nio/Buffer;)V" />
+		<method name="glEnable(I)V" />
+		<method name="glEnableClientState(I)V" />
+		<method name="glFinish()V" />
+		<method name="glFlush()V" />
+		<method name="glFogf(IF)V" />
+		<method name="glFogfv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glFogfv(I[FI)V" />
+		<method name="glFogx(II)V" />
+		<method name="glFogxv(ILjava/nio/IntBuffer;)V" />
+		<method name="glFogxv(I[II)V" />
+		<method name="glFrontFace(I)V" />
+		<method name="glFrustumf(FFFFFF)V" />
+		<method name="glFrustumx(IIIIII)V" />
+		<method name="glGenTextures(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenTextures(I[II)V" />
+		<method name="glGetError()I" />
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetIntegerv(I[II)V" />
+		<method name="glGetString(I)Ljava/lang/String;" />
+		<method name="glHint(II)V" />
+		<method name="glLightModelf(IF)V" />
+		<method name="glLightModelfv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glLightModelfv(I[FI)V" />
+		<method name="glLightModelx(II)V" />
+		<method name="glLightModelxv(ILjava/nio/IntBuffer;)V" />
+		<method name="glLightModelxv(I[II)V" />
+		<method name="glLightf(IIF)V" />
+		<method name="glLightfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glLightfv(II[FI)V" />
+		<method name="glLightx(III)V" />
+		<method name="glLightxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glLightxv(II[II)V" />
+		<method name="glLineWidth(F)V" />
+		<method name="glLineWidthx(I)V" />
+		<method name="glLoadIdentity()V" />
+		<method name="glLoadMatrixf(Ljava/nio/FloatBuffer;)V" />
+		<method name="glLoadMatrixf([FI)V" />
+		<method name="glLoadMatrixx(Ljava/nio/IntBuffer;)V" />
+		<method name="glLoadMatrixx([II)V" />
+		<method name="glLogicOp(I)V" />
+		<method name="glMaterialf(IIF)V" />
+		<method name="glMaterialfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glMaterialfv(II[FI)V" />
+		<method name="glMaterialx(III)V" />
+		<method name="glMaterialxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glMaterialxv(II[II)V" />
+		<method name="glMatrixMode(I)V" />
+		<method name="glMultMatrixf(Ljava/nio/FloatBuffer;)V" />
+		<method name="glMultMatrixf([FI)V" />
+		<method name="glMultMatrixx(Ljava/nio/IntBuffer;)V" />
+		<method name="glMultMatrixx([II)V" />
+		<method name="glMultiTexCoord4f(IFFFF)V" />
+		<method name="glMultiTexCoord4x(IIIII)V" />
+		<method name="glNormal3f(FFF)V" />
+		<method name="glNormal3x(III)V" />
+		<method name="glNormalPointer(IILjava/nio/Buffer;)V" />
+		<method name="glOrthof(FFFFFF)V" />
+		<method name="glOrthox(IIIIII)V" />
+		<method name="glPixelStorei(II)V" />
+		<method name="glPointSize(F)V" />
+		<method name="glPointSizex(I)V" />
+		<method name="glPolygonOffset(FF)V" />
+		<method name="glPolygonOffsetx(II)V" />
+		<method name="glPopMatrix()V" />
+		<method name="glPushMatrix()V" />
+		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V" />
+		<method name="glRotatef(FFFF)V" />
+		<method name="glRotatex(IIII)V" />
+		<method name="glSampleCoverage(FZ)V" />
+		<method name="glSampleCoveragex(IZ)V" />
+		<method name="glScalef(FFF)V" />
+		<method name="glScalex(III)V" />
+		<method name="glScissor(IIII)V" />
+		<method name="glShadeModel(I)V" />
+		<method name="glStencilFunc(III)V" />
+		<method name="glStencilMask(I)V" />
+		<method name="glStencilOp(III)V" />
+		<method name="glTexCoordPointer(IIILjava/nio/Buffer;)V" />
+		<method name="glTexEnvf(IIF)V" />
+		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexEnvfv(II[FI)V" />
+		<method name="glTexEnvx(III)V" />
+		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexEnvxv(II[II)V" />
+		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glTexParameterf(IIF)V" />
+		<method name="glTexParameterx(III)V" />
+		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V" />
+		<method name="glTranslatef(FFF)V" />
+		<method name="glTranslatex(III)V" />
+		<method name="glVertexPointer(IIILjava/nio/Buffer;)V" />
+		<method name="glViewport(IIII)V" />
+		<field name="GL_ADD" />
+		<field name="GL_ALIASED_LINE_WIDTH_RANGE" />
+		<field name="GL_ALIASED_POINT_SIZE_RANGE" />
+		<field name="GL_ALPHA" />
+		<field name="GL_ALPHA_BITS" />
+		<field name="GL_ALPHA_TEST" />
+		<field name="GL_ALWAYS" />
+		<field name="GL_AMBIENT" />
+		<field name="GL_AMBIENT_AND_DIFFUSE" />
+		<field name="GL_AND" />
+		<field name="GL_AND_INVERTED" />
+		<field name="GL_AND_REVERSE" />
+		<field name="GL_BACK" />
+		<field name="GL_BLEND" />
+		<field name="GL_BLUE_BITS" />
+		<field name="GL_BYTE" />
+		<field name="GL_CCW" />
+		<field name="GL_CLAMP_TO_EDGE" />
+		<field name="GL_CLEAR" />
+		<field name="GL_COLOR_ARRAY" />
+		<field name="GL_COLOR_BUFFER_BIT" />
+		<field name="GL_COLOR_LOGIC_OP" />
+		<field name="GL_COLOR_MATERIAL" />
+		<field name="GL_COMPRESSED_TEXTURE_FORMATS" />
+		<field name="GL_CONSTANT_ATTENUATION" />
+		<field name="GL_COPY" />
+		<field name="GL_COPY_INVERTED" />
+		<field name="GL_CULL_FACE" />
+		<field name="GL_CW" />
+		<field name="GL_DECAL" />
+		<field name="GL_DECR" />
+		<field name="GL_DEPTH_BITS" />
+		<field name="GL_DEPTH_BUFFER_BIT" />
+		<field name="GL_DEPTH_TEST" />
+		<field name="GL_DIFFUSE" />
+		<field name="GL_DITHER" />
+		<field name="GL_DONT_CARE" />
+		<field name="GL_DST_ALPHA" />
+		<field name="GL_DST_COLOR" />
+		<field name="GL_EMISSION" />
+		<field name="GL_EQUAL" />
+		<field name="GL_EQUIV" />
+		<field name="GL_EXP" />
+		<field name="GL_EXP2" />
+		<field name="GL_EXTENSIONS" />
+		<field name="GL_FALSE" />
+		<field name="GL_FASTEST" />
+		<field name="GL_FIXED" />
+		<field name="GL_FLAT" />
+		<field name="GL_FLOAT" />
+		<field name="GL_FOG" />
+		<field name="GL_FOG_COLOR" />
+		<field name="GL_FOG_DENSITY" />
+		<field name="GL_FOG_END" />
+		<field name="GL_FOG_HINT" />
+		<field name="GL_FOG_MODE" />
+		<field name="GL_FOG_START" />
+		<field name="GL_FRONT" />
+		<field name="GL_FRONT_AND_BACK" />
+		<field name="GL_GEQUAL" />
+		<field name="GL_GREATER" />
+		<field name="GL_GREEN_BITS" />
+		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES" />
+		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE_OES" />
+		<field name="GL_INCR" />
+		<field name="GL_INVALID_ENUM" />
+		<field name="GL_INVALID_OPERATION" />
+		<field name="GL_INVALID_VALUE" />
+		<field name="GL_INVERT" />
+		<field name="GL_KEEP" />
+		<field name="GL_LEQUAL" />
+		<field name="GL_LESS" />
+		<field name="GL_LIGHT0" />
+		<field name="GL_LIGHT1" />
+		<field name="GL_LIGHT2" />
+		<field name="GL_LIGHT3" />
+		<field name="GL_LIGHT4" />
+		<field name="GL_LIGHT5" />
+		<field name="GL_LIGHT6" />
+		<field name="GL_LIGHT7" />
+		<field name="GL_LIGHTING" />
+		<field name="GL_LIGHT_MODEL_AMBIENT" />
+		<field name="GL_LIGHT_MODEL_TWO_SIDE" />
+		<field name="GL_LINEAR" />
+		<field name="GL_LINEAR_ATTENUATION" />
+		<field name="GL_LINEAR_MIPMAP_LINEAR" />
+		<field name="GL_LINEAR_MIPMAP_NEAREST" />
+		<field name="GL_LINES" />
+		<field name="GL_LINE_LOOP" />
+		<field name="GL_LINE_SMOOTH" />
+		<field name="GL_LINE_SMOOTH_HINT" />
+		<field name="GL_LINE_STRIP" />
+		<field name="GL_LUMINANCE" />
+		<field name="GL_LUMINANCE_ALPHA" />
+		<field name="GL_MAX_ELEMENTS_INDICES" />
+		<field name="GL_MAX_ELEMENTS_VERTICES" />
+		<field name="GL_MAX_LIGHTS" />
+		<field name="GL_MAX_MODELVIEW_STACK_DEPTH" />
+		<field name="GL_MAX_PROJECTION_STACK_DEPTH" />
+		<field name="GL_MAX_TEXTURE_SIZE" />
+		<field name="GL_MAX_TEXTURE_STACK_DEPTH" />
+		<field name="GL_MAX_TEXTURE_UNITS" />
+		<field name="GL_MAX_VIEWPORT_DIMS" />
+		<field name="GL_MODELVIEW" />
+		<field name="GL_MODULATE" />
+		<field name="GL_MULTISAMPLE" />
+		<field name="GL_NAND" />
+		<field name="GL_NEAREST" />
+		<field name="GL_NEAREST_MIPMAP_LINEAR" />
+		<field name="GL_NEAREST_MIPMAP_NEAREST" />
+		<field name="GL_NEVER" />
+		<field name="GL_NICEST" />
+		<field name="GL_NOOP" />
+		<field name="GL_NOR" />
+		<field name="GL_NORMALIZE" />
+		<field name="GL_NORMAL_ARRAY" />
+		<field name="GL_NOTEQUAL" />
+		<field name="GL_NO_ERROR" />
+		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS" />
+		<field name="GL_ONE" />
+		<field name="GL_ONE_MINUS_DST_ALPHA" />
+		<field name="GL_ONE_MINUS_DST_COLOR" />
+		<field name="GL_ONE_MINUS_SRC_ALPHA" />
+		<field name="GL_ONE_MINUS_SRC_COLOR" />
+		<field name="GL_OR" />
+		<field name="GL_OR_INVERTED" />
+		<field name="GL_OR_REVERSE" />
+		<field name="GL_OUT_OF_MEMORY" />
+		<field name="GL_PACK_ALIGNMENT" />
+		<field name="GL_PALETTE4_R5_G6_B5_OES" />
+		<field name="GL_PALETTE4_RGB5_A1_OES" />
+		<field name="GL_PALETTE4_RGB8_OES" />
+		<field name="GL_PALETTE4_RGBA4_OES" />
+		<field name="GL_PALETTE4_RGBA8_OES" />
+		<field name="GL_PALETTE8_R5_G6_B5_OES" />
+		<field name="GL_PALETTE8_RGB5_A1_OES" />
+		<field name="GL_PALETTE8_RGB8_OES" />
+		<field name="GL_PALETTE8_RGBA4_OES" />
+		<field name="GL_PALETTE8_RGBA8_OES" />
+		<field name="GL_PERSPECTIVE_CORRECTION_HINT" />
+		<field name="GL_POINTS" />
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE" />
+		<field name="GL_POINT_SIZE" />
+		<field name="GL_POINT_SMOOTH" />
+		<field name="GL_POINT_SMOOTH_HINT" />
+		<field name="GL_POLYGON_OFFSET_FILL" />
+		<field name="GL_POLYGON_SMOOTH_HINT" />
+		<field name="GL_POSITION" />
+		<field name="GL_PROJECTION" />
+		<field name="GL_QUADRATIC_ATTENUATION" />
+		<field name="GL_RED_BITS" />
+		<field name="GL_RENDERER" />
+		<field name="GL_REPEAT" />
+		<field name="GL_REPLACE" />
+		<field name="GL_RESCALE_NORMAL" />
+		<field name="GL_RGB" />
+		<field name="GL_RGBA" />
+		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE" />
+		<field name="GL_SAMPLE_ALPHA_TO_ONE" />
+		<field name="GL_SAMPLE_COVERAGE" />
+		<field name="GL_SCISSOR_TEST" />
+		<field name="GL_SET" />
+		<field name="GL_SHININESS" />
+		<field name="GL_SHORT" />
+		<field name="GL_SMOOTH" />
+		<field name="GL_SMOOTH_LINE_WIDTH_RANGE" />
+		<field name="GL_SMOOTH_POINT_SIZE_RANGE" />
+		<field name="GL_SPECULAR" />
+		<field name="GL_SPOT_CUTOFF" />
+		<field name="GL_SPOT_DIRECTION" />
+		<field name="GL_SPOT_EXPONENT" />
+		<field name="GL_SRC_ALPHA" />
+		<field name="GL_SRC_ALPHA_SATURATE" />
+		<field name="GL_SRC_COLOR" />
+		<field name="GL_STACK_OVERFLOW" />
+		<field name="GL_STACK_UNDERFLOW" />
+		<field name="GL_STENCIL_BITS" />
+		<field name="GL_STENCIL_BUFFER_BIT" />
+		<field name="GL_STENCIL_TEST" />
+		<field name="GL_SUBPIXEL_BITS" />
+		<field name="GL_TEXTURE" />
+		<field name="GL_TEXTURE0" />
+		<field name="GL_TEXTURE1" />
+		<field name="GL_TEXTURE10" />
+		<field name="GL_TEXTURE11" />
+		<field name="GL_TEXTURE12" />
+		<field name="GL_TEXTURE13" />
+		<field name="GL_TEXTURE14" />
+		<field name="GL_TEXTURE15" />
+		<field name="GL_TEXTURE16" />
+		<field name="GL_TEXTURE17" />
+		<field name="GL_TEXTURE18" />
+		<field name="GL_TEXTURE19" />
+		<field name="GL_TEXTURE2" />
+		<field name="GL_TEXTURE20" />
+		<field name="GL_TEXTURE21" />
+		<field name="GL_TEXTURE22" />
+		<field name="GL_TEXTURE23" />
+		<field name="GL_TEXTURE24" />
+		<field name="GL_TEXTURE25" />
+		<field name="GL_TEXTURE26" />
+		<field name="GL_TEXTURE27" />
+		<field name="GL_TEXTURE28" />
+		<field name="GL_TEXTURE29" />
+		<field name="GL_TEXTURE3" />
+		<field name="GL_TEXTURE30" />
+		<field name="GL_TEXTURE31" />
+		<field name="GL_TEXTURE4" />
+		<field name="GL_TEXTURE5" />
+		<field name="GL_TEXTURE6" />
+		<field name="GL_TEXTURE7" />
+		<field name="GL_TEXTURE8" />
+		<field name="GL_TEXTURE9" />
+		<field name="GL_TEXTURE_2D" />
+		<field name="GL_TEXTURE_COORD_ARRAY" />
+		<field name="GL_TEXTURE_ENV" />
+		<field name="GL_TEXTURE_ENV_COLOR" />
+		<field name="GL_TEXTURE_ENV_MODE" />
+		<field name="GL_TEXTURE_MAG_FILTER" />
+		<field name="GL_TEXTURE_MIN_FILTER" />
+		<field name="GL_TEXTURE_WRAP_S" />
+		<field name="GL_TEXTURE_WRAP_T" />
+		<field name="GL_TRIANGLES" />
+		<field name="GL_TRIANGLE_FAN" />
+		<field name="GL_TRIANGLE_STRIP" />
+		<field name="GL_TRUE" />
+		<field name="GL_UNPACK_ALIGNMENT" />
+		<field name="GL_UNSIGNED_BYTE" />
+		<field name="GL_UNSIGNED_SHORT" />
+		<field name="GL_UNSIGNED_SHORT_4_4_4_4" />
+		<field name="GL_UNSIGNED_SHORT_5_5_5_1" />
+		<field name="GL_UNSIGNED_SHORT_5_6_5" />
+		<field name="GL_VENDOR" />
+		<field name="GL_VERSION" />
+		<field name="GL_VERTEX_ARRAY" />
+		<field name="GL_XOR" />
+		<field name="GL_ZERO" />
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL10Ext" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/microedition/khronos/opengles/GL" />
+		<method name="glQueryMatrixxOES(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I" />
+		<method name="glQueryMatrixxOES([II[II)I" />
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL11" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/microedition/khronos/opengles/GL10" />
+		<method name="glBindBuffer(II)V" />
+		<method name="glBufferData(IILjava/nio/Buffer;I)V" />
+		<method name="glBufferSubData(IIILjava/nio/Buffer;)V" />
+		<method name="glClipPlanef(ILjava/nio/FloatBuffer;)V" />
+		<method name="glClipPlanef(I[FI)V" />
+		<method name="glClipPlanex(ILjava/nio/IntBuffer;)V" />
+		<method name="glClipPlanex(I[II)V" />
+		<method name="glColor4ub(BBBB)V" />
+		<method name="glColorPointer(IIII)V" />
+		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteBuffers(I[II)V" />
+		<method name="glDrawElements(IIII)V" />
+		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenBuffers(I[II)V" />
+		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetBooleanv(I[ZI)V" />
+		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetBufferParameteriv(II[II)V" />
+		<method name="glGetClipPlanef(ILjava/nio/FloatBuffer;)V" />
+		<method name="glGetClipPlanef(I[FI)V" />
+		<method name="glGetClipPlanex(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetClipPlanex(I[II)V" />
+		<method name="glGetFixedv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetFixedv(I[II)V" />
+		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glGetFloatv(I[FI)V" />
+		<method name="glGetLightfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetLightfv(II[FI)V" />
+		<method name="glGetLightxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetLightxv(II[II)V" />
+		<method name="glGetMaterialfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetMaterialfv(II[FI)V" />
+		<method name="glGetMaterialxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetMaterialxv(II[II)V" />
+		<method name="glGetPointerv(I[Ljava/nio/Buffer;)V" />
+		<method name="glGetTexEnviv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexEnviv(II[II)V" />
+		<method name="glGetTexEnvxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexEnvxv(II[II)V" />
+		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetTexParameterfv(II[FI)V" />
+		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameteriv(II[II)V" />
+		<method name="glGetTexParameterxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexParameterxv(II[II)V" />
+		<method name="glIsBuffer(I)Z" />
+		<method name="glIsEnabled(I)Z" />
+		<method name="glIsTexture(I)Z" />
+		<method name="glNormalPointer(III)V" />
+		<method name="glPointParameterf(IF)V" />
+		<method name="glPointParameterfv(ILjava/nio/FloatBuffer;)V" />
+		<method name="glPointParameterfv(I[FI)V" />
+		<method name="glPointParameterx(II)V" />
+		<method name="glPointParameterxv(ILjava/nio/IntBuffer;)V" />
+		<method name="glPointParameterxv(I[II)V" />
+		<method name="glPointSizePointerOES(IILjava/nio/Buffer;)V" />
+		<method name="glTexCoordPointer(IIII)V" />
+		<method name="glTexEnvi(III)V" />
+		<method name="glTexEnviv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexEnviv(II[II)V" />
+		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexParameterfv(II[FI)V" />
+		<method name="glTexParameteri(III)V" />
+		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameteriv(II[II)V" />
+		<method name="glTexParameterxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexParameterxv(II[II)V" />
+		<method name="glVertexPointer(IIII)V" />
+		<field name="GL_ACTIVE_TEXTURE" />
+		<field name="GL_ADD_SIGNED" />
+		<field name="GL_ALPHA_SCALE" />
+		<field name="GL_ALPHA_TEST_FUNC" />
+		<field name="GL_ALPHA_TEST_REF" />
+		<field name="GL_ARRAY_BUFFER" />
+		<field name="GL_ARRAY_BUFFER_BINDING" />
+		<field name="GL_BLEND_DST" />
+		<field name="GL_BLEND_SRC" />
+		<field name="GL_BUFFER_ACCESS" />
+		<field name="GL_BUFFER_SIZE" />
+		<field name="GL_BUFFER_USAGE" />
+		<field name="GL_CLIENT_ACTIVE_TEXTURE" />
+		<field name="GL_CLIP_PLANE0" />
+		<field name="GL_CLIP_PLANE1" />
+		<field name="GL_CLIP_PLANE2" />
+		<field name="GL_CLIP_PLANE3" />
+		<field name="GL_CLIP_PLANE4" />
+		<field name="GL_CLIP_PLANE5" />
+		<field name="GL_COLOR_ARRAY_BUFFER_BINDING" />
+		<field name="GL_COLOR_ARRAY_POINTER" />
+		<field name="GL_COLOR_ARRAY_SIZE" />
+		<field name="GL_COLOR_ARRAY_STRIDE" />
+		<field name="GL_COLOR_ARRAY_TYPE" />
+		<field name="GL_COLOR_CLEAR_VALUE" />
+		<field name="GL_COLOR_WRITEMASK" />
+		<field name="GL_COMBINE" />
+		<field name="GL_COMBINE_ALPHA" />
+		<field name="GL_COMBINE_RGB" />
+		<field name="GL_CONSTANT" />
+		<field name="GL_COORD_REPLACE_OES" />
+		<field name="GL_CULL_FACE_MODE" />
+		<field name="GL_CURRENT_COLOR" />
+		<field name="GL_CURRENT_NORMAL" />
+		<field name="GL_CURRENT_TEXTURE_COORDS" />
+		<field name="GL_DEPTH_CLEAR_VALUE" />
+		<field name="GL_DEPTH_FUNC" />
+		<field name="GL_DEPTH_RANGE" />
+		<field name="GL_DEPTH_WRITEMASK" />
+		<field name="GL_DOT3_RGB" />
+		<field name="GL_DOT3_RGBA" />
+		<field name="GL_DYNAMIC_DRAW" />
+		<field name="GL_ELEMENT_ARRAY_BUFFER" />
+		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING" />
+		<field name="GL_FRONT_FACE" />
+		<field name="GL_GENERATE_MIPMAP" />
+		<field name="GL_GENERATE_MIPMAP_HINT" />
+		<field name="GL_INTERPOLATE" />
+		<field name="GL_LINE_WIDTH" />
+		<field name="GL_LOGIC_OP_MODE" />
+		<field name="GL_MATRIX_MODE" />
+		<field name="GL_MAX_CLIP_PLANES" />
+		<field name="GL_MODELVIEW_MATRIX" />
+		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_MODELVIEW_STACK_DEPTH" />
+		<field name="GL_NORMAL_ARRAY_BUFFER_BINDING" />
+		<field name="GL_NORMAL_ARRAY_POINTER" />
+		<field name="GL_NORMAL_ARRAY_STRIDE" />
+		<field name="GL_NORMAL_ARRAY_TYPE" />
+		<field name="GL_OPERAND0_ALPHA" />
+		<field name="GL_OPERAND0_RGB" />
+		<field name="GL_OPERAND1_ALPHA" />
+		<field name="GL_OPERAND1_RGB" />
+		<field name="GL_OPERAND2_ALPHA" />
+		<field name="GL_OPERAND2_RGB" />
+		<field name="GL_POINT_DISTANCE_ATTENUATION" />
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE" />
+		<field name="GL_POINT_SIZE" />
+		<field name="GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_POINTER_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_STRIDE_OES" />
+		<field name="GL_POINT_SIZE_ARRAY_TYPE_OES" />
+		<field name="GL_POINT_SIZE_MAX" />
+		<field name="GL_POINT_SIZE_MIN" />
+		<field name="GL_POINT_SPRITE_OES" />
+		<field name="GL_POLYGON_OFFSET_FACTOR" />
+		<field name="GL_POLYGON_OFFSET_UNITS" />
+		<field name="GL_PREVIOUS" />
+		<field name="GL_PRIMARY_COLOR" />
+		<field name="GL_PROJECTION_MATRIX" />
+		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_PROJECTION_STACK_DEPTH" />
+		<field name="GL_RGB_SCALE" />
+		<field name="GL_SAMPLES" />
+		<field name="GL_SAMPLE_BUFFERS" />
+		<field name="GL_SAMPLE_COVERAGE_INVERT" />
+		<field name="GL_SAMPLE_COVERAGE_VALUE" />
+		<field name="GL_SCISSOR_BOX" />
+		<field name="GL_SHADE_MODEL" />
+		<field name="GL_SRC0_ALPHA" />
+		<field name="GL_SRC0_RGB" />
+		<field name="GL_SRC1_ALPHA" />
+		<field name="GL_SRC1_RGB" />
+		<field name="GL_SRC2_ALPHA" />
+		<field name="GL_SRC2_RGB" />
+		<field name="GL_STATIC_DRAW" />
+		<field name="GL_STENCIL_CLEAR_VALUE" />
+		<field name="GL_STENCIL_FAIL" />
+		<field name="GL_STENCIL_FUNC" />
+		<field name="GL_STENCIL_PASS_DEPTH_FAIL" />
+		<field name="GL_STENCIL_PASS_DEPTH_PASS" />
+		<field name="GL_STENCIL_REF" />
+		<field name="GL_STENCIL_VALUE_MASK" />
+		<field name="GL_STENCIL_WRITEMASK" />
+		<field name="GL_SUBTRACT" />
+		<field name="GL_TEXTURE_BINDING_2D" />
+		<field name="GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING" />
+		<field name="GL_TEXTURE_COORD_ARRAY_POINTER" />
+		<field name="GL_TEXTURE_COORD_ARRAY_SIZE" />
+		<field name="GL_TEXTURE_COORD_ARRAY_STRIDE" />
+		<field name="GL_TEXTURE_COORD_ARRAY_TYPE" />
+		<field name="GL_TEXTURE_MATRIX" />
+		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES" />
+		<field name="GL_TEXTURE_STACK_DEPTH" />
+		<field name="GL_VERTEX_ARRAY_BUFFER_BINDING" />
+		<field name="GL_VERTEX_ARRAY_POINTER" />
+		<field name="GL_VERTEX_ARRAY_SIZE" />
+		<field name="GL_VERTEX_ARRAY_STRIDE" />
+		<field name="GL_VERTEX_ARRAY_TYPE" />
+		<field name="GL_VIEWPORT" />
+		<field name="GL_WRITE_ONLY" />
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL11Ext" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/microedition/khronos/opengles/GL" />
+		<method name="glCurrentPaletteMatrixOES(I)V" />
+		<method name="glDrawTexfOES(FFFFF)V" />
+		<method name="glDrawTexfvOES(Ljava/nio/FloatBuffer;)V" />
+		<method name="glDrawTexfvOES([FI)V" />
+		<method name="glDrawTexiOES(IIIII)V" />
+		<method name="glDrawTexivOES(Ljava/nio/IntBuffer;)V" />
+		<method name="glDrawTexivOES([II)V" />
+		<method name="glDrawTexsOES(SSSSS)V" />
+		<method name="glDrawTexsvOES(Ljava/nio/ShortBuffer;)V" />
+		<method name="glDrawTexsvOES([SI)V" />
+		<method name="glDrawTexxOES(IIIII)V" />
+		<method name="glDrawTexxvOES(Ljava/nio/IntBuffer;)V" />
+		<method name="glDrawTexxvOES([II)V" />
+		<method name="glEnable(I)V" />
+		<method name="glEnableClientState(I)V" />
+		<method name="glLoadPaletteFromModelViewMatrixOES()V" />
+		<method name="glMatrixIndexPointerOES(IIII)V" />
+		<method name="glMatrixIndexPointerOES(IIILjava/nio/Buffer;)V" />
+		<method name="glTexParameterfv(II[FI)V" />
+		<method name="glWeightPointerOES(IIII)V" />
+		<method name="glWeightPointerOES(IIILjava/nio/Buffer;)V" />
+		<field name="GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_POINTER_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_SIZE_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_STRIDE_OES" />
+		<field name="GL_MATRIX_INDEX_ARRAY_TYPE_OES" />
+		<field name="GL_MATRIX_PALETTE_OES" />
+		<field name="GL_MAX_PALETTE_MATRICES_OES" />
+		<field name="GL_MAX_VERTEX_UNITS_OES" />
+		<field name="GL_TEXTURE_CROP_RECT_OES" />
+		<field name="GL_WEIGHT_ARRAY_BUFFER_BINDING_OES" />
+		<field name="GL_WEIGHT_ARRAY_OES" />
+		<field name="GL_WEIGHT_ARRAY_POINTER_OES" />
+		<field name="GL_WEIGHT_ARRAY_SIZE_OES" />
+		<field name="GL_WEIGHT_ARRAY_STRIDE_OES" />
+		<field name="GL_WEIGHT_ARRAY_TYPE_OES" />
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL11ExtensionPack" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/microedition/khronos/opengles/GL" />
+		<method name="glBindFramebufferOES(II)V" />
+		<method name="glBindRenderbufferOES(II)V" />
+		<method name="glBindTexture(II)V" />
+		<method name="glBlendEquation(I)V" />
+		<method name="glBlendEquationSeparate(II)V" />
+		<method name="glBlendFuncSeparate(IIII)V" />
+		<method name="glCheckFramebufferStatusOES(I)I" />
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V" />
+		<method name="glCopyTexImage2D(IIIIIIII)V" />
+		<method name="glDeleteFramebuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteFramebuffersOES(I[II)V" />
+		<method name="glDeleteRenderbuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glDeleteRenderbuffersOES(I[II)V" />
+		<method name="glEnable(I)V" />
+		<method name="glFramebufferRenderbufferOES(IIII)V" />
+		<method name="glFramebufferTexture2DOES(IIIII)V" />
+		<method name="glGenFramebuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenFramebuffersOES(I[II)V" />
+		<method name="glGenRenderbuffersOES(ILjava/nio/IntBuffer;)V" />
+		<method name="glGenRenderbuffersOES(I[II)V" />
+		<method name="glGenerateMipmapOES(I)V" />
+		<method name="glGetFramebufferAttachmentParameterivOES(IIILjava/nio/IntBuffer;)V" />
+		<method name="glGetFramebufferAttachmentParameterivOES(III[II)V" />
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V" />
+		<method name="glGetIntegerv(I[II)V" />
+		<method name="glGetRenderbufferParameterivOES(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetRenderbufferParameterivOES(II[II)V" />
+		<method name="glGetTexGenfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glGetTexGenfv(II[FI)V" />
+		<method name="glGetTexGeniv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexGeniv(II[II)V" />
+		<method name="glGetTexGenxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glGetTexGenxv(II[II)V" />
+		<method name="glIsFramebufferOES(I)Z" />
+		<method name="glIsRenderbufferOES(I)Z" />
+		<method name="glRenderbufferStorageOES(IIII)V" />
+		<method name="glStencilOp(III)V" />
+		<method name="glTexEnvf(IIF)V" />
+		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexEnvfv(II[FI)V" />
+		<method name="glTexEnvx(III)V" />
+		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexEnvxv(II[II)V" />
+		<method name="glTexGenf(IIF)V" />
+		<method name="glTexGenfv(IILjava/nio/FloatBuffer;)V" />
+		<method name="glTexGenfv(II[FI)V" />
+		<method name="glTexGeni(III)V" />
+		<method name="glTexGeniv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexGeniv(II[II)V" />
+		<method name="glTexGenx(III)V" />
+		<method name="glTexGenxv(IILjava/nio/IntBuffer;)V" />
+		<method name="glTexGenxv(II[II)V" />
+		<method name="glTexParameterf(IIF)V" />
+		<field name="GL_BLEND_DST_ALPHA" />
+		<field name="GL_BLEND_DST_RGB" />
+		<field name="GL_BLEND_EQUATION" />
+		<field name="GL_BLEND_EQUATION_ALPHA" />
+		<field name="GL_BLEND_EQUATION_RGB" />
+		<field name="GL_BLEND_SRC_ALPHA" />
+		<field name="GL_BLEND_SRC_RGB" />
+		<field name="GL_COLOR_ATTACHMENT0_OES" />
+		<field name="GL_COLOR_ATTACHMENT10_OES" />
+		<field name="GL_COLOR_ATTACHMENT11_OES" />
+		<field name="GL_COLOR_ATTACHMENT12_OES" />
+		<field name="GL_COLOR_ATTACHMENT13_OES" />
+		<field name="GL_COLOR_ATTACHMENT14_OES" />
+		<field name="GL_COLOR_ATTACHMENT15_OES" />
+		<field name="GL_COLOR_ATTACHMENT1_OES" />
+		<field name="GL_COLOR_ATTACHMENT2_OES" />
+		<field name="GL_COLOR_ATTACHMENT3_OES" />
+		<field name="GL_COLOR_ATTACHMENT4_OES" />
+		<field name="GL_COLOR_ATTACHMENT5_OES" />
+		<field name="GL_COLOR_ATTACHMENT6_OES" />
+		<field name="GL_COLOR_ATTACHMENT7_OES" />
+		<field name="GL_COLOR_ATTACHMENT8_OES" />
+		<field name="GL_COLOR_ATTACHMENT9_OES" />
+		<field name="GL_DECR_WRAP" />
+		<field name="GL_DEPTH_ATTACHMENT_OES" />
+		<field name="GL_DEPTH_COMPONENT" />
+		<field name="GL_DEPTH_COMPONENT16" />
+		<field name="GL_DEPTH_COMPONENT24" />
+		<field name="GL_DEPTH_COMPONENT32" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES" />
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES" />
+		<field name="GL_FRAMEBUFFER_BINDING_OES" />
+		<field name="GL_FRAMEBUFFER_COMPLETE_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES" />
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES" />
+		<field name="GL_FRAMEBUFFER_OES" />
+		<field name="GL_FRAMEBUFFER_UNSUPPORTED_OES" />
+		<field name="GL_FUNC_ADD" />
+		<field name="GL_FUNC_REVERSE_SUBTRACT" />
+		<field name="GL_FUNC_SUBTRACT" />
+		<field name="GL_INCR_WRAP" />
+		<field name="GL_INVALID_FRAMEBUFFER_OPERATION_OES" />
+		<field name="GL_MAX_COLOR_ATTACHMENTS_OES" />
+		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE" />
+		<field name="GL_MAX_RENDERBUFFER_SIZE_OES" />
+		<field name="GL_MIRRORED_REPEAT" />
+		<field name="GL_NORMAL_MAP" />
+		<field name="GL_REFLECTION_MAP" />
+		<field name="GL_RENDERBUFFER_ALPHA_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_BINDING_OES" />
+		<field name="GL_RENDERBUFFER_BLUE_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_DEPTH_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_GREEN_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_HEIGHT_OES" />
+		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES" />
+		<field name="GL_RENDERBUFFER_OES" />
+		<field name="GL_RENDERBUFFER_RED_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_STENCIL_SIZE_OES" />
+		<field name="GL_RENDERBUFFER_WIDTH_OES" />
+		<field name="GL_RGB565_OES" />
+		<field name="GL_RGB5_A1" />
+		<field name="GL_RGB8" />
+		<field name="GL_RGBA4" />
+		<field name="GL_RGBA8" />
+		<field name="GL_STENCIL_ATTACHMENT_OES" />
+		<field name="GL_STENCIL_INDEX" />
+		<field name="GL_STENCIL_INDEX1_OES" />
+		<field name="GL_STENCIL_INDEX4_OES" />
+		<field name="GL_STENCIL_INDEX8_OES" />
+		<field name="GL_STR" />
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP" />
+		<field name="GL_TEXTURE_CUBE_MAP" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y" />
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y" />
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z" />
+		<field name="GL_TEXTURE_GEN_MODE" />
+		<field name="GL_TEXTURE_GEN_STR" />
+	</class>
+	<class name="javax/net/ServerSocketFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createServerSocket()Ljava/net/ServerSocket;" />
+		<method name="createServerSocket(I)Ljava/net/ServerSocket;" />
+		<method name="createServerSocket(II)Ljava/net/ServerSocket;" />
+		<method name="createServerSocket(IILjava/net/InetAddress;)Ljava/net/ServerSocket;" />
+		<method name="getDefault()Ljavax/net/ServerSocketFactory;" />
+	</class>
+	<class name="javax/net/SocketFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createSocket()Ljava/net/Socket;" />
+		<method name="createSocket(Ljava/lang/String;I)Ljava/net/Socket;" />
+		<method name="createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;" />
+		<method name="createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;" />
+		<method name="createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;" />
+		<method name="getDefault()Ljavax/net/SocketFactory;" />
+	</class>
+	<class name="javax/net/ssl/CertPathTrustManagerParameters" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/ManagerFactoryParameters" />
+		<method name="&lt;init&gt;(Ljava/security/cert/CertPathParameters;)V" />
+		<method name="getParameters()Ljava/security/cert/CertPathParameters;" />
+	</class>
+	<class name="javax/net/ssl/ExtendedSSLSession" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/SSLSession" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getLocalSupportedSignatureAlgorithms()[Ljava/lang/String;" />
+		<method name="getPeerSupportedSignatureAlgorithms()[Ljava/lang/String;" />
+		<method name="getRequestedServerNames()Ljava/util/List;" />
+	</class>
+	<class name="javax/net/ssl/HandshakeCompletedEvent" since="1">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljavax/net/ssl/SSLSocket;Ljavax/net/ssl/SSLSession;)V" />
+		<method name="getCipherSuite()Ljava/lang/String;" />
+		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getLocalPrincipal()Ljava/security/Principal;" />
+		<method name="getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;" />
+		<method name="getPeerCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getPeerPrincipal()Ljava/security/Principal;" />
+		<method name="getSession()Ljavax/net/ssl/SSLSession;" />
+		<method name="getSocket()Ljavax/net/ssl/SSLSocket;" />
+	</class>
+	<class name="javax/net/ssl/HandshakeCompletedListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="handshakeCompleted(Ljavax/net/ssl/HandshakeCompletedEvent;)V" />
+	</class>
+	<class name="javax/net/ssl/HostnameVerifier" since="1">
+		<extends name="java/lang/Object" />
+		<method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z" />
+	</class>
+	<class name="javax/net/ssl/HttpsURLConnection" since="1">
+		<extends name="java/net/HttpURLConnection" />
+		<method name="&lt;init&gt;(Ljava/net/URL;)V" />
+		<method name="getCipherSuite()Ljava/lang/String;" />
+		<method name="getDefaultHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;" />
+		<method name="getDefaultSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;" />
+		<method name="getHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;" />
+		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getLocalPrincipal()Ljava/security/Principal;" />
+		<method name="getPeerPrincipal()Ljava/security/Principal;" />
+		<method name="getSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;" />
+		<method name="getServerCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="setDefaultHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V" />
+		<method name="setDefaultSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V" />
+		<method name="setHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V" />
+		<method name="setSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V" />
+		<field name="hostnameVerifier" />
+	</class>
+	<class name="javax/net/ssl/KeyManager" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="javax/net/ssl/KeyManagerFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/net/ssl/KeyManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getDefaultAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/KeyManagerFactory;" />
+		<method name="getKeyManagers()[Ljavax/net/ssl/KeyManager;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="init(Ljava/security/KeyStore;[C)V" />
+		<method name="init(Ljavax/net/ssl/ManagerFactoryParameters;)V" />
+	</class>
+	<class name="javax/net/ssl/KeyManagerFactorySpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGetKeyManagers()[Ljavax/net/ssl/KeyManager;" />
+		<method name="engineInit(Ljava/security/KeyStore;[C)V" />
+		<method name="engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V" />
+	</class>
+	<class name="javax/net/ssl/KeyStoreBuilderParameters" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/ManagerFactoryParameters" />
+		<method name="&lt;init&gt;(Ljava/security/KeyStore$Builder;)V" />
+		<method name="&lt;init&gt;(Ljava/util/List;)V" />
+		<method name="getParameters()Ljava/util/List;" />
+	</class>
+	<class name="javax/net/ssl/ManagerFactoryParameters" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="javax/net/ssl/SNIHostName" since="24">
+		<extends name="javax/net/ssl/SNIServerName" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="createSNIMatcher(Ljava/lang/String;)Ljavax/net/ssl/SNIMatcher;" />
+		<method name="getAsciiName()Ljava/lang/String;" />
+	</class>
+	<class name="javax/net/ssl/SNIMatcher" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getType()I" />
+		<method name="matches(Ljavax/net/ssl/SNIServerName;)Z" />
+	</class>
+	<class name="javax/net/ssl/SNIServerName" since="24">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I[B)V" />
+		<method name="getEncoded()[B" />
+		<method name="getType()I" />
+	</class>
+	<class name="javax/net/ssl/SSLContext" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/net/ssl/SSLContextSpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="createSSLEngine()Ljavax/net/ssl/SSLEngine;" />
+		<method name="createSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;" />
+		<method name="getClientSessionContext()Ljavax/net/ssl/SSLSessionContext;" />
+		<method name="getDefault()Ljavax/net/ssl/SSLContext;" since="9" />
+		<method name="getDefaultSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/SSLContext;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/SSLContext;" />
+		<method name="getProtocol()Ljava/lang/String;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getServerSessionContext()Ljavax/net/ssl/SSLSessionContext;" />
+		<method name="getServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;" />
+		<method name="getSocketFactory()Ljavax/net/ssl/SSLSocketFactory;" />
+		<method name="getSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9" />
+		<method name="init([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V" />
+		<method name="setDefault(Ljavax/net/ssl/SSLContext;)V" since="9" />
+	</class>
+	<class name="javax/net/ssl/SSLContextSpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineCreateSSLEngine()Ljavax/net/ssl/SSLEngine;" />
+		<method name="engineCreateSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;" />
+		<method name="engineGetClientSessionContext()Ljavax/net/ssl/SSLSessionContext;" />
+		<method name="engineGetDefaultSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9" />
+		<method name="engineGetServerSessionContext()Ljavax/net/ssl/SSLSessionContext;" />
+		<method name="engineGetServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;" />
+		<method name="engineGetSocketFactory()Ljavax/net/ssl/SSLSocketFactory;" />
+		<method name="engineGetSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9" />
+		<method name="engineInit([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLEngine" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="beginHandshake()V" />
+		<method name="closeInbound()V" />
+		<method name="closeOutbound()V" />
+		<method name="getApplicationProtocol()Ljava/lang/String;" since="29" />
+		<method name="getDelegatedTask()Ljava/lang/Runnable;" />
+		<method name="getEnableSessionCreation()Z" />
+		<method name="getEnabledCipherSuites()[Ljava/lang/String;" />
+		<method name="getEnabledProtocols()[Ljava/lang/String;" />
+		<method name="getHandshakeApplicationProtocol()Ljava/lang/String;" since="29" />
+		<method name="getHandshakeApplicationProtocolSelector()Ljava/util/function/BiFunction;" since="29" />
+		<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24" />
+		<method name="getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;" />
+		<method name="getNeedClientAuth()Z" />
+		<method name="getPeerHost()Ljava/lang/String;" />
+		<method name="getPeerPort()I" />
+		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9" />
+		<method name="getSession()Ljavax/net/ssl/SSLSession;" />
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;" />
+		<method name="getSupportedProtocols()[Ljava/lang/String;" />
+		<method name="getUseClientMode()Z" />
+		<method name="getWantClientAuth()Z" />
+		<method name="isInboundDone()Z" />
+		<method name="isOutboundDone()Z" />
+		<method name="setEnableSessionCreation(Z)V" />
+		<method name="setEnabledCipherSuites([Ljava/lang/String;)V" />
+		<method name="setEnabledProtocols([Ljava/lang/String;)V" />
+		<method name="setHandshakeApplicationProtocolSelector(Ljava/util/function/BiFunction;)V" since="29" />
+		<method name="setNeedClientAuth(Z)V" />
+		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9" />
+		<method name="setUseClientMode(Z)V" />
+		<method name="setWantClientAuth(Z)V" />
+		<method name="unwrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;" />
+		<method name="unwrap(Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;" />
+		<method name="unwrap(Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;II)Ljavax/net/ssl/SSLEngineResult;" />
+		<method name="wrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;" />
+		<method name="wrap([Ljava/nio/ByteBuffer;IILjava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;" />
+		<method name="wrap([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;" />
+	</class>
+	<class name="javax/net/ssl/SSLEngineResult" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/net/ssl/SSLEngineResult$Status;Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;II)V" />
+		<method name="bytesConsumed()I" />
+		<method name="bytesProduced()I" />
+		<method name="getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;" />
+		<method name="getStatus()Ljavax/net/ssl/SSLEngineResult$Status;" />
+	</class>
+	<class name="javax/net/ssl/SSLEngineResult$HandshakeStatus" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;" />
+		<method name="values()[Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;" />
+		<field name="FINISHED" />
+		<field name="NEED_TASK" />
+		<field name="NEED_UNWRAP" />
+		<field name="NEED_WRAP" />
+		<field name="NOT_HANDSHAKING" />
+	</class>
+	<class name="javax/net/ssl/SSLEngineResult$Status" since="1">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Ljavax/net/ssl/SSLEngineResult$Status;" />
+		<method name="values()[Ljavax/net/ssl/SSLEngineResult$Status;" />
+		<field name="BUFFER_OVERFLOW" />
+		<field name="BUFFER_UNDERFLOW" />
+		<field name="CLOSED" />
+		<field name="OK" />
+	</class>
+	<class name="javax/net/ssl/SSLException" since="1">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLHandshakeException" since="1">
+		<extends name="javax/net/ssl/SSLException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLKeyException" since="1">
+		<extends name="javax/net/ssl/SSLException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLParameters" since="9">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;[Ljava/lang/String;)V" />
+		<method name="getAlgorithmConstraints()Ljava/security/AlgorithmConstraints;" since="24" />
+		<method name="getApplicationProtocols()[Ljava/lang/String;" since="29" />
+		<method name="getCipherSuites()[Ljava/lang/String;" />
+		<method name="getEndpointIdentificationAlgorithm()Ljava/lang/String;" since="24" />
+		<method name="getNeedClientAuth()Z" />
+		<method name="getProtocols()[Ljava/lang/String;" />
+		<method name="getSNIMatchers()Ljava/util/Collection;" since="24" />
+		<method name="getServerNames()Ljava/util/List;" since="24" />
+		<method name="getUseCipherSuitesOrder()Z" since="24" />
+		<method name="getWantClientAuth()Z" />
+		<method name="setAlgorithmConstraints(Ljava/security/AlgorithmConstraints;)V" since="24" />
+		<method name="setApplicationProtocols([Ljava/lang/String;)V" since="29" />
+		<method name="setCipherSuites([Ljava/lang/String;)V" />
+		<method name="setEndpointIdentificationAlgorithm(Ljava/lang/String;)V" since="24" />
+		<method name="setNeedClientAuth(Z)V" />
+		<method name="setProtocols([Ljava/lang/String;)V" />
+		<method name="setSNIMatchers(Ljava/util/Collection;)V" since="24" />
+		<method name="setServerNames(Ljava/util/List;)V" since="24" />
+		<method name="setUseCipherSuitesOrder(Z)V" since="24" />
+		<method name="setWantClientAuth(Z)V" />
+	</class>
+	<class name="javax/net/ssl/SSLPeerUnverifiedException" since="1">
+		<extends name="javax/net/ssl/SSLException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLProtocolException" since="1">
+		<extends name="javax/net/ssl/SSLException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLServerSocket" since="1">
+		<extends name="java/net/ServerSocket" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="&lt;init&gt;(IILjava/net/InetAddress;)V" />
+		<method name="getEnableSessionCreation()Z" />
+		<method name="getEnabledCipherSuites()[Ljava/lang/String;" />
+		<method name="getEnabledProtocols()[Ljava/lang/String;" />
+		<method name="getNeedClientAuth()Z" />
+		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="24" />
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;" />
+		<method name="getSupportedProtocols()[Ljava/lang/String;" />
+		<method name="getUseClientMode()Z" />
+		<method name="getWantClientAuth()Z" />
+		<method name="setEnableSessionCreation(Z)V" />
+		<method name="setEnabledCipherSuites([Ljava/lang/String;)V" />
+		<method name="setEnabledProtocols([Ljava/lang/String;)V" />
+		<method name="setNeedClientAuth(Z)V" />
+		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="24" />
+		<method name="setUseClientMode(Z)V" />
+		<method name="setWantClientAuth(Z)V" />
+	</class>
+	<class name="javax/net/ssl/SSLServerSocketFactory" since="1">
+		<extends name="javax/net/ServerSocketFactory" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDefaultCipherSuites()[Ljava/lang/String;" />
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;" />
+	</class>
+	<class name="javax/net/ssl/SSLSession" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getApplicationBufferSize()I" />
+		<method name="getCipherSuite()Ljava/lang/String;" />
+		<method name="getCreationTime()J" />
+		<method name="getId()[B" />
+		<method name="getLastAccessedTime()J" />
+		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getLocalPrincipal()Ljava/security/Principal;" />
+		<method name="getPacketBufferSize()I" />
+		<method name="getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;" />
+		<method name="getPeerCertificates()[Ljava/security/cert/Certificate;" />
+		<method name="getPeerHost()Ljava/lang/String;" />
+		<method name="getPeerPort()I" />
+		<method name="getPeerPrincipal()Ljava/security/Principal;" />
+		<method name="getProtocol()Ljava/lang/String;" />
+		<method name="getSessionContext()Ljavax/net/ssl/SSLSessionContext;" />
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getValueNames()[Ljava/lang/String;" />
+		<method name="invalidate()V" />
+		<method name="isValid()Z" />
+		<method name="putValue(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="removeValue(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLSessionBindingEvent" since="1">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljavax/net/ssl/SSLSession;Ljava/lang/String;)V" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSession()Ljavax/net/ssl/SSLSession;" />
+	</class>
+	<class name="javax/net/ssl/SSLSessionBindingListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="valueBound(Ljavax/net/ssl/SSLSessionBindingEvent;)V" />
+		<method name="valueUnbound(Ljavax/net/ssl/SSLSessionBindingEvent;)V" />
+	</class>
+	<class name="javax/net/ssl/SSLSessionContext" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getIds()Ljava/util/Enumeration;" />
+		<method name="getSession([B)Ljavax/net/ssl/SSLSession;" />
+		<method name="getSessionCacheSize()I" />
+		<method name="getSessionTimeout()I" />
+		<method name="setSessionCacheSize(I)V" />
+		<method name="setSessionTimeout(I)V" />
+	</class>
+	<class name="javax/net/ssl/SSLSocket" since="1">
+		<extends name="java/net/Socket" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/net/InetAddress;I)V" />
+		<method name="&lt;init&gt;(Ljava/net/InetAddress;I)V" />
+		<method name="&lt;init&gt;(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V" />
+		<method name="addHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V" />
+		<method name="getApplicationProtocol()Ljava/lang/String;" since="29" />
+		<method name="getEnableSessionCreation()Z" />
+		<method name="getEnabledCipherSuites()[Ljava/lang/String;" />
+		<method name="getEnabledProtocols()[Ljava/lang/String;" />
+		<method name="getHandshakeApplicationProtocol()Ljava/lang/String;" since="29" />
+		<method name="getHandshakeApplicationProtocolSelector()Ljava/util/function/BiFunction;" since="29" />
+		<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24" />
+		<method name="getNeedClientAuth()Z" />
+		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9" />
+		<method name="getSession()Ljavax/net/ssl/SSLSession;" />
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;" />
+		<method name="getSupportedProtocols()[Ljava/lang/String;" />
+		<method name="getUseClientMode()Z" />
+		<method name="getWantClientAuth()Z" />
+		<method name="removeHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V" />
+		<method name="setEnableSessionCreation(Z)V" />
+		<method name="setEnabledCipherSuites([Ljava/lang/String;)V" />
+		<method name="setEnabledProtocols([Ljava/lang/String;)V" />
+		<method name="setHandshakeApplicationProtocolSelector(Ljava/util/function/BiFunction;)V" since="29" />
+		<method name="setNeedClientAuth(Z)V" />
+		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9" />
+		<method name="setUseClientMode(Z)V" />
+		<method name="setWantClientAuth(Z)V" />
+		<method name="startHandshake()V" />
+	</class>
+	<class name="javax/net/ssl/SSLSocketFactory" since="1">
+		<extends name="javax/net/SocketFactory" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;" />
+		<method name="getDefaultCipherSuites()[Ljava/lang/String;" />
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;" />
+	</class>
+	<class name="javax/net/ssl/StandardConstants" since="24">
+		<extends name="java/lang/Object" />
+		<field name="SNI_HOST_NAME" />
+	</class>
+	<class name="javax/net/ssl/TrustManager" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="javax/net/ssl/TrustManagerFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljavax/net/ssl/TrustManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V" />
+		<method name="getAlgorithm()Ljava/lang/String;" />
+		<method name="getDefaultAlgorithm()Ljava/lang/String;" />
+		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;" />
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/TrustManagerFactory;" />
+		<method name="getProvider()Ljava/security/Provider;" />
+		<method name="getTrustManagers()[Ljavax/net/ssl/TrustManager;" />
+		<method name="init(Ljava/security/KeyStore;)V" />
+		<method name="init(Ljavax/net/ssl/ManagerFactoryParameters;)V" />
+	</class>
+	<class name="javax/net/ssl/TrustManagerFactorySpi" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="engineGetTrustManagers()[Ljavax/net/ssl/TrustManager;" />
+		<method name="engineInit(Ljava/security/KeyStore;)V" />
+		<method name="engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V" />
+	</class>
+	<class name="javax/net/ssl/X509ExtendedKeyManager" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/X509KeyManager" />
+		<method name="&lt;init&gt;()V" />
+		<method name="chooseEngineClientAlias([Ljava/lang/String;[Ljava/security/Principal;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;" />
+		<method name="chooseEngineServerAlias(Ljava/lang/String;[Ljava/security/Principal;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;" />
+	</class>
+	<class name="javax/net/ssl/X509ExtendedTrustManager" since="24">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/X509TrustManager" />
+		<method name="&lt;init&gt;()V" />
+		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V" />
+		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V" />
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V" />
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V" />
+	</class>
+	<class name="javax/net/ssl/X509KeyManager" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/KeyManager" />
+		<method name="chooseClientAlias([Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;" />
+		<method name="chooseServerAlias(Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;" />
+		<method name="getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/X509Certificate;" />
+		<method name="getClientAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;" />
+		<method name="getPrivateKey(Ljava/lang/String;)Ljava/security/PrivateKey;" />
+		<method name="getServerAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;" />
+	</class>
+	<class name="javax/net/ssl/X509TrustManager" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/TrustManager" />
+		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V" />
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V" />
+		<method name="getAcceptedIssuers()[Ljava/security/cert/X509Certificate;" />
+	</class>
+	<class name="javax/security/auth/AuthPermission" since="1">
+		<extends name="java/security/BasicPermission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/auth/DestroyFailedException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/auth/Destroyable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="destroy()V" />
+		<method name="isDestroyed()Z" />
+	</class>
+	<class name="javax/security/auth/PrivateCredentialPermission" since="1">
+		<extends name="java/security/Permission" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getCredentialClass()Ljava/lang/String;" />
+		<method name="getPrincipals()[[Ljava/lang/String;" />
+	</class>
+	<class name="javax/security/auth/Subject" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(ZLjava/util/Set;Ljava/util/Set;Ljava/util/Set;)V" />
+		<method name="doAs(Ljavax/security/auth/Subject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;" />
+		<method name="doAs(Ljavax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;" />
+		<method name="doAsPrivileged(Ljavax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;" />
+		<method name="doAsPrivileged(Ljavax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;" />
+		<method name="getPrincipals()Ljava/util/Set;" />
+		<method name="getPrincipals(Ljava/lang/Class;)Ljava/util/Set;" />
+		<method name="getPrivateCredentials()Ljava/util/Set;" />
+		<method name="getPrivateCredentials(Ljava/lang/Class;)Ljava/util/Set;" />
+		<method name="getPublicCredentials()Ljava/util/Set;" />
+		<method name="getPublicCredentials(Ljava/lang/Class;)Ljava/util/Set;" />
+		<method name="getSubject(Ljava/security/AccessControlContext;)Ljavax/security/auth/Subject;" />
+		<method name="isReadOnly()Z" />
+		<method name="setReadOnly()V" />
+	</class>
+	<class name="javax/security/auth/SubjectDomainCombiner" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/DomainCombiner" />
+		<method name="&lt;init&gt;(Ljavax/security/auth/Subject;)V" />
+		<method name="getSubject()Ljavax/security/auth/Subject;" />
+	</class>
+	<class name="javax/security/auth/callback/Callback" since="1">
+		<extends name="java/lang/Object" />
+	</class>
+	<class name="javax/security/auth/callback/CallbackHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="handle([Ljavax/security/auth/callback/Callback;)V" />
+	</class>
+	<class name="javax/security/auth/callback/PasswordCallback" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="javax/security/auth/callback/Callback" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Z)V" />
+		<method name="clearPassword()V" />
+		<method name="getPassword()[C" />
+		<method name="getPrompt()Ljava/lang/String;" />
+		<method name="isEchoOn()Z" />
+		<method name="setPassword([C)V" />
+	</class>
+	<class name="javax/security/auth/callback/UnsupportedCallbackException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljavax/security/auth/callback/Callback;)V" />
+		<method name="&lt;init&gt;(Ljavax/security/auth/callback/Callback;Ljava/lang/String;)V" />
+		<method name="getCallback()Ljavax/security/auth/callback/Callback;" />
+	</class>
+	<class name="javax/security/auth/login/LoginException" since="1">
+		<extends name="java/security/GeneralSecurityException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/auth/x500/X500Principal" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/security/Principal" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/util/Map;)V" since="9" />
+		<method name="&lt;init&gt;([B)V" />
+		<method name="getEncoded()[B" />
+		<method name="getName(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getName(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/String;" since="9" />
+		<field name="CANONICAL" />
+		<field name="RFC1779" />
+		<field name="RFC2253" />
+	</class>
+	<class name="javax/security/cert/Certificate" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getEncoded()[B" />
+		<method name="getPublicKey()Ljava/security/PublicKey;" />
+		<method name="verify(Ljava/security/PublicKey;)V" />
+		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/cert/CertificateEncodingException" since="1">
+		<extends name="javax/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/cert/CertificateException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/cert/CertificateExpiredException" since="1">
+		<extends name="javax/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/cert/CertificateNotYetValidException" since="1">
+		<extends name="javax/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/cert/CertificateParsingException" since="1">
+		<extends name="javax/security/cert/CertificateException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/security/cert/X509Certificate" since="1">
+		<extends name="javax/security/cert/Certificate" />
+		<method name="&lt;init&gt;()V" />
+		<method name="checkValidity()V" />
+		<method name="checkValidity(Ljava/util/Date;)V" />
+		<method name="getInstance(Ljava/io/InputStream;)Ljavax/security/cert/X509Certificate;" />
+		<method name="getInstance([B)Ljavax/security/cert/X509Certificate;" />
+		<method name="getIssuerDN()Ljava/security/Principal;" />
+		<method name="getNotAfter()Ljava/util/Date;" />
+		<method name="getNotBefore()Ljava/util/Date;" />
+		<method name="getSerialNumber()Ljava/math/BigInteger;" />
+		<method name="getSigAlgName()Ljava/lang/String;" />
+		<method name="getSigAlgOID()Ljava/lang/String;" />
+		<method name="getSigAlgParams()[B" />
+		<method name="getSubjectDN()Ljava/security/Principal;" />
+		<method name="getVersion()I" />
+	</class>
+	<class name="javax/sql/CommonDataSource" since="9">
+		<extends name="java/lang/Object" />
+		<method name="getLogWriter()Ljava/io/PrintWriter;" />
+		<method name="getLoginTimeout()I" />
+		<method name="getParentLogger()Ljava/util/logging/Logger;" since="24" />
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V" />
+		<method name="setLoginTimeout(I)V" />
+	</class>
+	<class name="javax/sql/ConnectionEvent" since="1">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljavax/sql/PooledConnection;)V" />
+		<method name="&lt;init&gt;(Ljavax/sql/PooledConnection;Ljava/sql/SQLException;)V" />
+		<method name="getSQLException()Ljava/sql/SQLException;" />
+	</class>
+	<class name="javax/sql/ConnectionEventListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="connectionClosed(Ljavax/sql/ConnectionEvent;)V" />
+		<method name="connectionErrorOccurred(Ljavax/sql/ConnectionEvent;)V" />
+	</class>
+	<class name="javax/sql/ConnectionPoolDataSource" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="javax/sql/CommonDataSource" since="9" />
+		<method name="getLogWriter()Ljava/io/PrintWriter;" removed="9" />
+		<method name="getLoginTimeout()I" removed="9" />
+		<method name="getPooledConnection()Ljavax/sql/PooledConnection;" />
+		<method name="getPooledConnection(Ljava/lang/String;Ljava/lang/String;)Ljavax/sql/PooledConnection;" />
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V" removed="9" />
+		<method name="setLoginTimeout(I)V" removed="9" />
+	</class>
+	<class name="javax/sql/DataSource" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/Wrapper" since="9" />
+		<implements name="javax/sql/CommonDataSource" since="9" />
+		<method name="getConnection()Ljava/sql/Connection;" />
+		<method name="getConnection(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;" />
+		<method name="getLogWriter()Ljava/io/PrintWriter;" removed="9" />
+		<method name="getLoginTimeout()I" removed="9" />
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V" removed="9" />
+		<method name="setLoginTimeout(I)V" removed="9" />
+	</class>
+	<class name="javax/sql/PooledConnection" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addConnectionEventListener(Ljavax/sql/ConnectionEventListener;)V" />
+		<method name="addStatementEventListener(Ljavax/sql/StatementEventListener;)V" since="9" />
+		<method name="close()V" />
+		<method name="getConnection()Ljava/sql/Connection;" />
+		<method name="removeConnectionEventListener(Ljavax/sql/ConnectionEventListener;)V" />
+		<method name="removeStatementEventListener(Ljavax/sql/StatementEventListener;)V" since="9" />
+	</class>
+	<class name="javax/sql/RowSet" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/ResultSet" />
+		<method name="addRowSetListener(Ljavax/sql/RowSetListener;)V" />
+		<method name="clearParameters()V" />
+		<method name="execute()V" />
+		<method name="getCommand()Ljava/lang/String;" />
+		<method name="getDataSourceName()Ljava/lang/String;" />
+		<method name="getEscapeProcessing()Z" />
+		<method name="getMaxFieldSize()I" />
+		<method name="getMaxRows()I" />
+		<method name="getPassword()Ljava/lang/String;" />
+		<method name="getQueryTimeout()I" />
+		<method name="getTransactionIsolation()I" />
+		<method name="getTypeMap()Ljava/util/Map;" />
+		<method name="getUrl()Ljava/lang/String;" />
+		<method name="getUsername()Ljava/lang/String;" />
+		<method name="isReadOnly()Z" />
+		<method name="removeRowSetListener(Ljavax/sql/RowSetListener;)V" />
+		<method name="setArray(ILjava/sql/Array;)V" />
+		<method name="setAsciiStream(ILjava/io/InputStream;)V" since="9" />
+		<method name="setAsciiStream(ILjava/io/InputStream;I)V" />
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V" since="9" />
+		<method name="setBigDecimal(ILjava/math/BigDecimal;)V" />
+		<method name="setBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V" since="9" />
+		<method name="setBinaryStream(ILjava/io/InputStream;)V" since="9" />
+		<method name="setBinaryStream(ILjava/io/InputStream;I)V" />
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V" since="9" />
+		<method name="setBlob(ILjava/io/InputStream;)V" since="9" />
+		<method name="setBlob(ILjava/io/InputStream;J)V" since="9" />
+		<method name="setBlob(ILjava/sql/Blob;)V" />
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9" />
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9" />
+		<method name="setBlob(Ljava/lang/String;Ljava/sql/Blob;)V" since="9" />
+		<method name="setBoolean(IZ)V" />
+		<method name="setBoolean(Ljava/lang/String;Z)V" since="9" />
+		<method name="setByte(IB)V" />
+		<method name="setByte(Ljava/lang/String;B)V" since="9" />
+		<method name="setBytes(I[B)V" />
+		<method name="setBytes(Ljava/lang/String;[B)V" since="9" />
+		<method name="setCharacterStream(ILjava/io/Reader;)V" since="9" />
+		<method name="setCharacterStream(ILjava/io/Reader;I)V" />
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V" since="9" />
+		<method name="setClob(ILjava/io/Reader;)V" since="9" />
+		<method name="setClob(ILjava/io/Reader;J)V" since="9" />
+		<method name="setClob(ILjava/sql/Clob;)V" />
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="setClob(Ljava/lang/String;Ljava/sql/Clob;)V" since="9" />
+		<method name="setCommand(Ljava/lang/String;)V" />
+		<method name="setConcurrency(I)V" />
+		<method name="setDataSourceName(Ljava/lang/String;)V" />
+		<method name="setDate(ILjava/sql/Date;)V" />
+		<method name="setDate(ILjava/sql/Date;Ljava/util/Calendar;)V" />
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;)V" since="9" />
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;Ljava/util/Calendar;)V" since="9" />
+		<method name="setDouble(ID)V" />
+		<method name="setDouble(Ljava/lang/String;D)V" since="9" />
+		<method name="setEscapeProcessing(Z)V" />
+		<method name="setFloat(IF)V" />
+		<method name="setFloat(Ljava/lang/String;F)V" since="9" />
+		<method name="setInt(II)V" />
+		<method name="setInt(Ljava/lang/String;I)V" since="9" />
+		<method name="setLong(IJ)V" />
+		<method name="setLong(Ljava/lang/String;J)V" since="9" />
+		<method name="setMaxFieldSize(I)V" />
+		<method name="setMaxRows(I)V" />
+		<method name="setNCharacterStream(ILjava/io/Reader;)V" since="9" />
+		<method name="setNCharacterStream(ILjava/io/Reader;J)V" since="9" />
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="setNClob(ILjava/io/Reader;)V" since="9" />
+		<method name="setNClob(ILjava/io/Reader;J)V" since="9" />
+		<method name="setNClob(ILjava/sql/NClob;)V" since="9" />
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9" />
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9" />
+		<method name="setNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9" />
+		<method name="setNString(ILjava/lang/String;)V" since="9" />
+		<method name="setNString(Ljava/lang/String;Ljava/lang/String;)V" since="9" />
+		<method name="setNull(II)V" />
+		<method name="setNull(IILjava/lang/String;)V" />
+		<method name="setNull(Ljava/lang/String;I)V" since="9" />
+		<method name="setNull(Ljava/lang/String;ILjava/lang/String;)V" since="9" />
+		<method name="setObject(ILjava/lang/Object;)V" />
+		<method name="setObject(ILjava/lang/Object;I)V" />
+		<method name="setObject(ILjava/lang/Object;II)V" />
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;)V" since="9" />
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;I)V" since="9" />
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;II)V" since="9" />
+		<method name="setPassword(Ljava/lang/String;)V" />
+		<method name="setQueryTimeout(I)V" />
+		<method name="setReadOnly(Z)V" />
+		<method name="setRef(ILjava/sql/Ref;)V" />
+		<method name="setRowId(ILjava/sql/RowId;)V" since="9" />
+		<method name="setRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9" />
+		<method name="setSQLXML(ILjava/sql/SQLXML;)V" since="9" />
+		<method name="setSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9" />
+		<method name="setShort(IS)V" />
+		<method name="setShort(Ljava/lang/String;S)V" since="9" />
+		<method name="setString(ILjava/lang/String;)V" />
+		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V" since="9" />
+		<method name="setTime(ILjava/sql/Time;)V" />
+		<method name="setTime(ILjava/sql/Time;Ljava/util/Calendar;)V" />
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;)V" since="9" />
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;Ljava/util/Calendar;)V" since="9" />
+		<method name="setTimestamp(ILjava/sql/Timestamp;)V" />
+		<method name="setTimestamp(ILjava/sql/Timestamp;Ljava/util/Calendar;)V" />
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V" since="9" />
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;Ljava/util/Calendar;)V" since="9" />
+		<method name="setTransactionIsolation(I)V" />
+		<method name="setType(I)V" />
+		<method name="setTypeMap(Ljava/util/Map;)V" />
+		<method name="setURL(ILjava/net/URL;)V" since="9" />
+		<method name="setUrl(Ljava/lang/String;)V" />
+		<method name="setUsername(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/sql/RowSetEvent" since="1">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljavax/sql/RowSet;)V" />
+	</class>
+	<class name="javax/sql/RowSetInternal" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getConnection()Ljava/sql/Connection;" />
+		<method name="getOriginal()Ljava/sql/ResultSet;" />
+		<method name="getOriginalRow()Ljava/sql/ResultSet;" />
+		<method name="getParams()[Ljava/lang/Object;" />
+		<method name="setMetaData(Ljavax/sql/RowSetMetaData;)V" />
+	</class>
+	<class name="javax/sql/RowSetListener" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="cursorMoved(Ljavax/sql/RowSetEvent;)V" />
+		<method name="rowChanged(Ljavax/sql/RowSetEvent;)V" />
+		<method name="rowSetChanged(Ljavax/sql/RowSetEvent;)V" />
+	</class>
+	<class name="javax/sql/RowSetMetaData" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="java/sql/ResultSetMetaData" />
+		<method name="setAutoIncrement(IZ)V" />
+		<method name="setCaseSensitive(IZ)V" />
+		<method name="setCatalogName(ILjava/lang/String;)V" />
+		<method name="setColumnCount(I)V" />
+		<method name="setColumnDisplaySize(II)V" />
+		<method name="setColumnLabel(ILjava/lang/String;)V" />
+		<method name="setColumnName(ILjava/lang/String;)V" />
+		<method name="setColumnType(II)V" />
+		<method name="setColumnTypeName(ILjava/lang/String;)V" />
+		<method name="setCurrency(IZ)V" />
+		<method name="setNullable(II)V" />
+		<method name="setPrecision(II)V" />
+		<method name="setScale(II)V" />
+		<method name="setSchemaName(ILjava/lang/String;)V" />
+		<method name="setSearchable(IZ)V" />
+		<method name="setSigned(IZ)V" />
+		<method name="setTableName(ILjava/lang/String;)V" />
+	</class>
+	<class name="javax/sql/RowSetReader" since="1">
+		<extends name="java/lang/Object" />
+		<method name="readData(Ljavax/sql/RowSetInternal;)V" />
+	</class>
+	<class name="javax/sql/RowSetWriter" since="1">
+		<extends name="java/lang/Object" />
+		<method name="writeData(Ljavax/sql/RowSetInternal;)Z" />
+	</class>
+	<class name="javax/sql/StatementEvent" since="9">
+		<extends name="java/util/EventObject" />
+		<method name="&lt;init&gt;(Ljavax/sql/PooledConnection;Ljava/sql/PreparedStatement;)V" />
+		<method name="&lt;init&gt;(Ljavax/sql/PooledConnection;Ljava/sql/PreparedStatement;Ljava/sql/SQLException;)V" />
+		<method name="getSQLException()Ljava/sql/SQLException;" />
+		<method name="getStatement()Ljava/sql/PreparedStatement;" />
+	</class>
+	<class name="javax/sql/StatementEventListener" since="9">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/EventListener" />
+		<method name="statementClosed(Ljavax/sql/StatementEvent;)V" />
+		<method name="statementErrorOccurred(Ljavax/sql/StatementEvent;)V" />
+	</class>
+	<class name="javax/xml/XMLConstants" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" removed="8" />
+		<field name="DEFAULT_NS_PREFIX" />
+		<field name="FEATURE_SECURE_PROCESSING" />
+		<field name="NULL_NS_URI" />
+		<field name="RELAXNG_NS_URI" />
+		<field name="W3C_XML_SCHEMA_INSTANCE_NS_URI" />
+		<field name="W3C_XML_SCHEMA_NS_URI" />
+		<field name="W3C_XPATH_DATATYPE_NS_URI" />
+		<field name="XMLNS_ATTRIBUTE" />
+		<field name="XMLNS_ATTRIBUTE_NS_URI" />
+		<field name="XML_DTD_NS_URI" />
+		<field name="XML_NS_PREFIX" />
+		<field name="XML_NS_URI" />
+	</class>
+	<class name="javax/xml/datatype/DatatypeConfigurationException" since="8">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="javax/xml/datatype/DatatypeConstants" since="8">
+		<extends name="java/lang/Object" />
+		<field name="APRIL" />
+		<field name="AUGUST" />
+		<field name="DATE" />
+		<field name="DATETIME" />
+		<field name="DAYS" />
+		<field name="DECEMBER" />
+		<field name="DURATION" />
+		<field name="DURATION_DAYTIME" />
+		<field name="DURATION_YEARMONTH" />
+		<field name="EQUAL" />
+		<field name="FEBRUARY" />
+		<field name="FIELD_UNDEFINED" />
+		<field name="GDAY" />
+		<field name="GMONTH" />
+		<field name="GMONTHDAY" />
+		<field name="GREATER" />
+		<field name="GYEAR" />
+		<field name="GYEARMONTH" />
+		<field name="HOURS" />
+		<field name="INDETERMINATE" />
+		<field name="JANUARY" />
+		<field name="JULY" />
+		<field name="JUNE" />
+		<field name="LESSER" />
+		<field name="MARCH" />
+		<field name="MAX_TIMEZONE_OFFSET" />
+		<field name="MAY" />
+		<field name="MINUTES" />
+		<field name="MIN_TIMEZONE_OFFSET" />
+		<field name="MONTHS" />
+		<field name="NOVEMBER" />
+		<field name="OCTOBER" />
+		<field name="SECONDS" />
+		<field name="SEPTEMBER" />
+		<field name="TIME" />
+		<field name="YEARS" />
+	</class>
+	<class name="javax/xml/datatype/DatatypeConstants$Field" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getId()I" />
+	</class>
+	<class name="javax/xml/datatype/DatatypeFactory" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="newDuration(J)Ljavax/xml/datatype/Duration;" />
+		<method name="newDuration(Ljava/lang/String;)Ljavax/xml/datatype/Duration;" />
+		<method name="newDuration(ZIIIIII)Ljavax/xml/datatype/Duration;" />
+		<method name="newDuration(ZLjava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigDecimal;)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationDayTime(J)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationDayTime(Ljava/lang/String;)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationDayTime(ZIIII)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationDayTime(ZLjava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationYearMonth(J)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationYearMonth(Ljava/lang/String;)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationYearMonth(ZII)Ljavax/xml/datatype/Duration;" />
+		<method name="newDurationYearMonth(ZLjava/math/BigInteger;Ljava/math/BigInteger;)Ljavax/xml/datatype/Duration;" />
+		<method name="newInstance()Ljavax/xml/datatype/DatatypeFactory;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/datatype/DatatypeFactory;" since="9" />
+		<method name="newXMLGregorianCalendar()Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendar(IIIIIIII)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendar(Ljava/lang/String;)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendar(Ljava/math/BigInteger;IIIIILjava/math/BigDecimal;I)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendar(Ljava/util/GregorianCalendar;)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendarDate(IIII)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendarTime(IIII)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendarTime(IIIII)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="newXMLGregorianCalendarTime(IIILjava/math/BigDecimal;I)Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<field name="DATATYPEFACTORY_IMPLEMENTATION_CLASS" />
+		<field name="DATATYPEFACTORY_PROPERTY" />
+	</class>
+	<class name="javax/xml/datatype/Duration" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(Ljavax/xml/datatype/Duration;)Ljavax/xml/datatype/Duration;" />
+		<method name="addTo(Ljava/util/Calendar;)V" />
+		<method name="addTo(Ljava/util/Date;)V" />
+		<method name="compare(Ljavax/xml/datatype/Duration;)I" />
+		<method name="getDays()I" />
+		<method name="getField(Ljavax/xml/datatype/DatatypeConstants$Field;)Ljava/lang/Number;" />
+		<method name="getHours()I" />
+		<method name="getMinutes()I" />
+		<method name="getMonths()I" />
+		<method name="getSeconds()I" />
+		<method name="getSign()I" />
+		<method name="getTimeInMillis(Ljava/util/Calendar;)J" />
+		<method name="getTimeInMillis(Ljava/util/Date;)J" />
+		<method name="getXMLSchemaType()Ljavax/xml/namespace/QName;" />
+		<method name="getYears()I" />
+		<method name="isLongerThan(Ljavax/xml/datatype/Duration;)Z" />
+		<method name="isSet(Ljavax/xml/datatype/DatatypeConstants$Field;)Z" />
+		<method name="isShorterThan(Ljavax/xml/datatype/Duration;)Z" />
+		<method name="multiply(I)Ljavax/xml/datatype/Duration;" />
+		<method name="multiply(Ljava/math/BigDecimal;)Ljavax/xml/datatype/Duration;" />
+		<method name="negate()Ljavax/xml/datatype/Duration;" />
+		<method name="normalizeWith(Ljava/util/Calendar;)Ljavax/xml/datatype/Duration;" />
+		<method name="subtract(Ljavax/xml/datatype/Duration;)Ljavax/xml/datatype/Duration;" />
+	</class>
+	<class name="javax/xml/datatype/XMLGregorianCalendar" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(Ljavax/xml/datatype/Duration;)V" />
+		<method name="clear()V" />
+		<method name="compare(Ljavax/xml/datatype/XMLGregorianCalendar;)I" />
+		<method name="getDay()I" />
+		<method name="getEon()Ljava/math/BigInteger;" />
+		<method name="getEonAndYear()Ljava/math/BigInteger;" />
+		<method name="getFractionalSecond()Ljava/math/BigDecimal;" />
+		<method name="getHour()I" />
+		<method name="getMillisecond()I" />
+		<method name="getMinute()I" />
+		<method name="getMonth()I" />
+		<method name="getSecond()I" />
+		<method name="getTimeZone(I)Ljava/util/TimeZone;" />
+		<method name="getTimezone()I" />
+		<method name="getXMLSchemaType()Ljavax/xml/namespace/QName;" />
+		<method name="getYear()I" />
+		<method name="isValid()Z" />
+		<method name="normalize()Ljavax/xml/datatype/XMLGregorianCalendar;" />
+		<method name="reset()V" />
+		<method name="setDay(I)V" />
+		<method name="setFractionalSecond(Ljava/math/BigDecimal;)V" />
+		<method name="setHour(I)V" />
+		<method name="setMillisecond(I)V" />
+		<method name="setMinute(I)V" />
+		<method name="setMonth(I)V" />
+		<method name="setSecond(I)V" />
+		<method name="setTime(III)V" />
+		<method name="setTime(IIII)V" />
+		<method name="setTime(IIILjava/math/BigDecimal;)V" />
+		<method name="setTimezone(I)V" />
+		<method name="setYear(I)V" />
+		<method name="setYear(Ljava/math/BigInteger;)V" />
+		<method name="toGregorianCalendar()Ljava/util/GregorianCalendar;" />
+		<method name="toGregorianCalendar(Ljava/util/TimeZone;Ljava/util/Locale;Ljavax/xml/datatype/XMLGregorianCalendar;)Ljava/util/GregorianCalendar;" />
+		<method name="toXMLFormat()Ljava/lang/String;" />
+	</class>
+	<class name="javax/xml/namespace/NamespaceContext" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getNamespaceURI(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getPrefix(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getPrefixes(Ljava/lang/String;)Ljava/util/Iterator;" />
+	</class>
+	<class name="javax/xml/namespace/QName" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getLocalPart()Ljava/lang/String;" />
+		<method name="getNamespaceURI()Ljava/lang/String;" />
+		<method name="getPrefix()Ljava/lang/String;" />
+		<method name="valueOf(Ljava/lang/String;)Ljavax/xml/namespace/QName;" />
+	</class>
+	<class name="javax/xml/parsers/DocumentBuilder" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDOMImplementation()Lorg/w3c/dom/DOMImplementation;" />
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8" />
+		<method name="isNamespaceAware()Z" />
+		<method name="isValidating()Z" />
+		<method name="isXIncludeAware()Z" />
+		<method name="newDocument()Lorg/w3c/dom/Document;" />
+		<method name="parse(Ljava/io/File;)Lorg/w3c/dom/Document;" />
+		<method name="parse(Ljava/io/InputStream;)Lorg/w3c/dom/Document;" />
+		<method name="parse(Ljava/io/InputStream;Ljava/lang/String;)Lorg/w3c/dom/Document;" />
+		<method name="parse(Ljava/lang/String;)Lorg/w3c/dom/Document;" />
+		<method name="parse(Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;" />
+		<method name="reset()V" />
+		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V" />
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" />
+	</class>
+	<class name="javax/xml/parsers/DocumentBuilderFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8" />
+		<method name="isCoalescing()Z" />
+		<method name="isExpandEntityReferences()Z" />
+		<method name="isIgnoringComments()Z" />
+		<method name="isIgnoringElementContentWhitespace()Z" />
+		<method name="isNamespaceAware()Z" />
+		<method name="isValidating()Z" />
+		<method name="isXIncludeAware()Z" />
+		<method name="newDocumentBuilder()Ljavax/xml/parsers/DocumentBuilder;" />
+		<method name="newInstance()Ljavax/xml/parsers/DocumentBuilderFactory;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/DocumentBuilderFactory;" since="9" />
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setCoalescing(Z)V" />
+		<method name="setExpandEntityReferences(Z)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setIgnoringComments(Z)V" />
+		<method name="setIgnoringElementContentWhitespace(Z)V" />
+		<method name="setNamespaceAware(Z)V" />
+		<method name="setSchema(Ljavax/xml/validation/Schema;)V" since="8" />
+		<method name="setValidating(Z)V" />
+		<method name="setXIncludeAware(Z)V" />
+	</class>
+	<class name="javax/xml/parsers/FactoryConfigurationError" since="1">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getException()Ljava/lang/Exception;" />
+	</class>
+	<class name="javax/xml/parsers/ParserConfigurationException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/xml/parsers/SAXParser" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getParser()Lorg/xml/sax/Parser;" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8" />
+		<method name="getXMLReader()Lorg/xml/sax/XMLReader;" />
+		<method name="isNamespaceAware()Z" />
+		<method name="isValidating()Z" />
+		<method name="isXIncludeAware()Z" />
+		<method name="parse(Ljava/io/File;Lorg/xml/sax/HandlerBase;)V" />
+		<method name="parse(Ljava/io/File;Lorg/xml/sax/helpers/DefaultHandler;)V" />
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/HandlerBase;)V" />
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/HandlerBase;Ljava/lang/String;)V" />
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/helpers/DefaultHandler;)V" />
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/helpers/DefaultHandler;Ljava/lang/String;)V" />
+		<method name="parse(Ljava/lang/String;Lorg/xml/sax/HandlerBase;)V" />
+		<method name="parse(Ljava/lang/String;Lorg/xml/sax/helpers/DefaultHandler;)V" />
+		<method name="parse(Lorg/xml/sax/InputSource;Lorg/xml/sax/HandlerBase;)V" />
+		<method name="parse(Lorg/xml/sax/InputSource;Lorg/xml/sax/helpers/DefaultHandler;)V" />
+		<method name="reset()V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V" />
+	</class>
+	<class name="javax/xml/parsers/SAXParserFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8" />
+		<method name="isNamespaceAware()Z" />
+		<method name="isValidating()Z" />
+		<method name="isXIncludeAware()Z" />
+		<method name="newInstance()Ljavax/xml/parsers/SAXParserFactory;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/SAXParserFactory;" since="9" />
+		<method name="newSAXParser()Ljavax/xml/parsers/SAXParser;" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setNamespaceAware(Z)V" />
+		<method name="setSchema(Ljavax/xml/validation/Schema;)V" since="8" />
+		<method name="setValidating(Z)V" />
+		<method name="setXIncludeAware(Z)V" />
+	</class>
+	<class name="javax/xml/transform/ErrorListener" since="8">
+		<extends name="java/lang/Object" />
+		<method name="error(Ljavax/xml/transform/TransformerException;)V" />
+		<method name="fatalError(Ljavax/xml/transform/TransformerException;)V" />
+		<method name="warning(Ljavax/xml/transform/TransformerException;)V" />
+	</class>
+	<class name="javax/xml/transform/OutputKeys" since="8">
+		<extends name="java/lang/Object" />
+		<field name="CDATA_SECTION_ELEMENTS" />
+		<field name="DOCTYPE_PUBLIC" />
+		<field name="DOCTYPE_SYSTEM" />
+		<field name="ENCODING" />
+		<field name="INDENT" />
+		<field name="MEDIA_TYPE" />
+		<field name="METHOD" />
+		<field name="OMIT_XML_DECLARATION" />
+		<field name="STANDALONE" />
+		<field name="VERSION" />
+	</class>
+	<class name="javax/xml/transform/Result" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+		<field name="PI_DISABLE_OUTPUT_ESCAPING" />
+		<field name="PI_ENABLE_OUTPUT_ESCAPING" />
+	</class>
+	<class name="javax/xml/transform/Source" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/xml/transform/SourceLocator" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getColumnNumber()I" />
+		<method name="getLineNumber()I" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+	</class>
+	<class name="javax/xml/transform/Templates" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getOutputProperties()Ljava/util/Properties;" />
+		<method name="newTransformer()Ljavax/xml/transform/Transformer;" />
+	</class>
+	<class name="javax/xml/transform/Transformer" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clearParameters()V" />
+		<method name="getErrorListener()Ljavax/xml/transform/ErrorListener;" />
+		<method name="getOutputProperties()Ljava/util/Properties;" />
+		<method name="getOutputProperty(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getURIResolver()Ljavax/xml/transform/URIResolver;" />
+		<method name="reset()V" />
+		<method name="setErrorListener(Ljavax/xml/transform/ErrorListener;)V" />
+		<method name="setOutputProperties(Ljava/util/Properties;)V" />
+		<method name="setOutputProperty(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setURIResolver(Ljavax/xml/transform/URIResolver;)V" />
+		<method name="transform(Ljavax/xml/transform/Source;Ljavax/xml/transform/Result;)V" />
+	</class>
+	<class name="javax/xml/transform/TransformerConfigurationException" since="8">
+		<extends name="javax/xml/transform/TransformerException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="javax/xml/transform/TransformerException" since="8">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+		<method name="getException()Ljava/lang/Throwable;" />
+		<method name="getLocationAsString()Ljava/lang/String;" />
+		<method name="getLocator()Ljavax/xml/transform/SourceLocator;" />
+		<method name="getMessageAndLocation()Ljava/lang/String;" />
+		<method name="setLocator(Ljavax/xml/transform/SourceLocator;)V" />
+	</class>
+	<class name="javax/xml/transform/TransformerFactory" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAssociatedStylesheet(Ljavax/xml/transform/Source;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljavax/xml/transform/Source;" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getErrorListener()Ljavax/xml/transform/ErrorListener;" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getURIResolver()Ljavax/xml/transform/URIResolver;" />
+		<method name="newInstance()Ljavax/xml/transform/TransformerFactory;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/transform/TransformerFactory;" since="9" />
+		<method name="newTemplates(Ljavax/xml/transform/Source;)Ljavax/xml/transform/Templates;" />
+		<method name="newTransformer()Ljavax/xml/transform/Transformer;" />
+		<method name="newTransformer(Ljavax/xml/transform/Source;)Ljavax/xml/transform/Transformer;" />
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setErrorListener(Ljavax/xml/transform/ErrorListener;)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setURIResolver(Ljavax/xml/transform/URIResolver;)V" />
+	</class>
+	<class name="javax/xml/transform/TransformerFactoryConfigurationError" since="8">
+		<extends name="java/lang/Error" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getException()Ljava/lang/Exception;" />
+	</class>
+	<class name="javax/xml/transform/URIResolver" since="8">
+		<extends name="java/lang/Object" />
+		<method name="resolve(Ljava/lang/String;Ljava/lang/String;)Ljavax/xml/transform/Source;" />
+	</class>
+	<class name="javax/xml/transform/dom/DOMLocator" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="javax/xml/transform/SourceLocator" />
+		<method name="getOriginatingNode()Lorg/w3c/dom/Node;" />
+	</class>
+	<class name="javax/xml/transform/dom/DOMResult" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="javax/xml/transform/Result" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/w3c/dom/Node;)V" />
+		<method name="&lt;init&gt;(Lorg/w3c/dom/Node;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V" />
+		<method name="&lt;init&gt;(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;Ljava/lang/String;)V" />
+		<method name="getNextSibling()Lorg/w3c/dom/Node;" />
+		<method name="getNode()Lorg/w3c/dom/Node;" />
+		<method name="setNextSibling(Lorg/w3c/dom/Node;)V" />
+		<method name="setNode(Lorg/w3c/dom/Node;)V" />
+		<field name="FEATURE" />
+	</class>
+	<class name="javax/xml/transform/dom/DOMSource" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="javax/xml/transform/Source" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/w3c/dom/Node;)V" />
+		<method name="&lt;init&gt;(Lorg/w3c/dom/Node;Ljava/lang/String;)V" />
+		<method name="getNode()Lorg/w3c/dom/Node;" />
+		<method name="setNode(Lorg/w3c/dom/Node;)V" />
+		<field name="FEATURE" />
+	</class>
+	<class name="javax/xml/transform/sax/SAXResult" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="javax/xml/transform/Result" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/ContentHandler;)V" />
+		<method name="getHandler()Lorg/xml/sax/ContentHandler;" />
+		<method name="getLexicalHandler()Lorg/xml/sax/ext/LexicalHandler;" />
+		<method name="setHandler(Lorg/xml/sax/ContentHandler;)V" />
+		<method name="setLexicalHandler(Lorg/xml/sax/ext/LexicalHandler;)V" />
+		<field name="FEATURE" />
+	</class>
+	<class name="javax/xml/transform/sax/SAXSource" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="javax/xml/transform/Source" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/InputSource;)V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/XMLReader;Lorg/xml/sax/InputSource;)V" />
+		<method name="getInputSource()Lorg/xml/sax/InputSource;" />
+		<method name="getXMLReader()Lorg/xml/sax/XMLReader;" />
+		<method name="setInputSource(Lorg/xml/sax/InputSource;)V" />
+		<method name="setXMLReader(Lorg/xml/sax/XMLReader;)V" />
+		<method name="sourceToInputSource(Ljavax/xml/transform/Source;)Lorg/xml/sax/InputSource;" />
+		<field name="FEATURE" />
+	</class>
+	<class name="javax/xml/transform/sax/SAXTransformerFactory" since="8">
+		<extends name="javax/xml/transform/TransformerFactory" />
+		<method name="&lt;init&gt;()V" />
+		<method name="newTemplatesHandler()Ljavax/xml/transform/sax/TemplatesHandler;" />
+		<method name="newTransformerHandler()Ljavax/xml/transform/sax/TransformerHandler;" />
+		<method name="newTransformerHandler(Ljavax/xml/transform/Source;)Ljavax/xml/transform/sax/TransformerHandler;" />
+		<method name="newTransformerHandler(Ljavax/xml/transform/Templates;)Ljavax/xml/transform/sax/TransformerHandler;" />
+		<method name="newXMLFilter(Ljavax/xml/transform/Source;)Lorg/xml/sax/XMLFilter;" />
+		<method name="newXMLFilter(Ljavax/xml/transform/Templates;)Lorg/xml/sax/XMLFilter;" />
+		<field name="FEATURE" />
+		<field name="FEATURE_XMLFILTER" />
+	</class>
+	<class name="javax/xml/transform/sax/TemplatesHandler" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/ContentHandler" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="getTemplates()Ljavax/xml/transform/Templates;" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/xml/transform/sax/TransformerHandler" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/ContentHandler" />
+		<implements name="org/xml/sax/DTDHandler" />
+		<implements name="org/xml/sax/ext/LexicalHandler" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="getTransformer()Ljavax/xml/transform/Transformer;" />
+		<method name="setResult(Ljavax/xml/transform/Result;)V" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+	</class>
+	<class name="javax/xml/transform/stream/StreamResult" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="javax/xml/transform/Result" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/OutputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Writer;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getOutputStream()Ljava/io/OutputStream;" />
+		<method name="getWriter()Ljava/io/Writer;" />
+		<method name="setOutputStream(Ljava/io/OutputStream;)V" />
+		<method name="setSystemId(Ljava/io/File;)V" />
+		<method name="setWriter(Ljava/io/Writer;)V" />
+		<field name="FEATURE" />
+	</class>
+	<class name="javax/xml/transform/stream/StreamSource" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="javax/xml/transform/Source" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/File;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getInputStream()Ljava/io/InputStream;" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getReader()Ljava/io/Reader;" />
+		<method name="setInputStream(Ljava/io/InputStream;)V" />
+		<method name="setPublicId(Ljava/lang/String;)V" />
+		<method name="setReader(Ljava/io/Reader;)V" />
+		<method name="setSystemId(Ljava/io/File;)V" />
+		<field name="FEATURE" />
+	</class>
+	<class name="javax/xml/validation/Schema" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="newValidator()Ljavax/xml/validation/Validator;" />
+		<method name="newValidatorHandler()Ljavax/xml/validation/ValidatorHandler;" />
+	</class>
+	<class name="javax/xml/validation/SchemaFactory" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;" />
+		<method name="isSchemaLanguageSupported(Ljava/lang/String;)Z" />
+		<method name="newInstance(Ljava/lang/String;)Ljavax/xml/validation/SchemaFactory;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/validation/SchemaFactory;" since="9" />
+		<method name="newSchema()Ljavax/xml/validation/Schema;" />
+		<method name="newSchema(Ljava/io/File;)Ljavax/xml/validation/Schema;" />
+		<method name="newSchema(Ljava/net/URL;)Ljavax/xml/validation/Schema;" />
+		<method name="newSchema(Ljavax/xml/transform/Source;)Ljavax/xml/validation/Schema;" />
+		<method name="newSchema([Ljavax/xml/transform/Source;)Ljavax/xml/validation/Schema;" />
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V" />
+	</class>
+	<class name="javax/xml/validation/SchemaFactoryLoader" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="newFactory(Ljava/lang/String;)Ljavax/xml/validation/SchemaFactory;" />
+	</class>
+	<class name="javax/xml/validation/TypeInfoProvider" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAttributeTypeInfo(I)Lorg/w3c/dom/TypeInfo;" />
+		<method name="getElementTypeInfo()Lorg/w3c/dom/TypeInfo;" />
+		<method name="isIdAttribute(I)Z" />
+		<method name="isSpecified(I)Z" />
+	</class>
+	<class name="javax/xml/validation/Validator" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;" />
+		<method name="reset()V" />
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V" />
+		<method name="validate(Ljavax/xml/transform/Source;)V" />
+		<method name="validate(Ljavax/xml/transform/Source;Ljavax/xml/transform/Result;)V" />
+	</class>
+	<class name="javax/xml/validation/ValidatorHandler" since="8">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/ContentHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;" />
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;" />
+		<method name="getTypeInfoProvider()Ljavax/xml/validation/TypeInfoProvider;" />
+		<method name="setContentHandler(Lorg/xml/sax/ContentHandler;)V" />
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V" />
+	</class>
+	<class name="javax/xml/xpath/XPath" since="8">
+		<extends name="java/lang/Object" />
+		<method name="compile(Ljava/lang/String;)Ljavax/xml/xpath/XPathExpression;" />
+		<method name="evaluate(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="evaluate(Ljava/lang/String;Ljava/lang/Object;Ljavax/xml/namespace/QName;)Ljava/lang/Object;" />
+		<method name="evaluate(Ljava/lang/String;Lorg/xml/sax/InputSource;)Ljava/lang/String;" />
+		<method name="evaluate(Ljava/lang/String;Lorg/xml/sax/InputSource;Ljavax/xml/namespace/QName;)Ljava/lang/Object;" />
+		<method name="getNamespaceContext()Ljavax/xml/namespace/NamespaceContext;" />
+		<method name="getXPathFunctionResolver()Ljavax/xml/xpath/XPathFunctionResolver;" />
+		<method name="getXPathVariableResolver()Ljavax/xml/xpath/XPathVariableResolver;" />
+		<method name="reset()V" />
+		<method name="setNamespaceContext(Ljavax/xml/namespace/NamespaceContext;)V" />
+		<method name="setXPathFunctionResolver(Ljavax/xml/xpath/XPathFunctionResolver;)V" />
+		<method name="setXPathVariableResolver(Ljavax/xml/xpath/XPathVariableResolver;)V" />
+	</class>
+	<class name="javax/xml/xpath/XPathConstants" since="8">
+		<extends name="java/lang/Object" />
+		<field name="BOOLEAN" />
+		<field name="DOM_OBJECT_MODEL" />
+		<field name="NODE" />
+		<field name="NODESET" />
+		<field name="NUMBER" />
+		<field name="STRING" />
+	</class>
+	<class name="javax/xml/xpath/XPathException" since="8">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="javax/xml/xpath/XPathExpression" since="8">
+		<extends name="java/lang/Object" />
+		<method name="evaluate(Ljava/lang/Object;)Ljava/lang/String;" />
+		<method name="evaluate(Ljava/lang/Object;Ljavax/xml/namespace/QName;)Ljava/lang/Object;" />
+		<method name="evaluate(Lorg/xml/sax/InputSource;)Ljava/lang/String;" />
+		<method name="evaluate(Lorg/xml/sax/InputSource;Ljavax/xml/namespace/QName;)Ljava/lang/Object;" />
+	</class>
+	<class name="javax/xml/xpath/XPathExpressionException" since="8">
+		<extends name="javax/xml/xpath/XPathException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="javax/xml/xpath/XPathFactory" since="8">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="isObjectModelSupported(Ljava/lang/String;)Z" />
+		<method name="newInstance()Ljavax/xml/xpath/XPathFactory;" />
+		<method name="newInstance(Ljava/lang/String;)Ljavax/xml/xpath/XPathFactory;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/xpath/XPathFactory;" />
+		<method name="newXPath()Ljavax/xml/xpath/XPath;" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setXPathFunctionResolver(Ljavax/xml/xpath/XPathFunctionResolver;)V" />
+		<method name="setXPathVariableResolver(Ljavax/xml/xpath/XPathVariableResolver;)V" />
+		<field name="DEFAULT_OBJECT_MODEL_URI" />
+		<field name="DEFAULT_PROPERTY_NAME" />
+	</class>
+	<class name="javax/xml/xpath/XPathFactoryConfigurationException" since="8">
+		<extends name="javax/xml/xpath/XPathException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="javax/xml/xpath/XPathFunction" since="8">
+		<extends name="java/lang/Object" />
+		<method name="evaluate(Ljava/util/List;)Ljava/lang/Object;" />
+	</class>
+	<class name="javax/xml/xpath/XPathFunctionException" since="8">
+		<extends name="javax/xml/xpath/XPathExpressionException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="javax/xml/xpath/XPathFunctionResolver" since="8">
+		<extends name="java/lang/Object" />
+		<method name="resolveFunction(Ljavax/xml/namespace/QName;I)Ljavax/xml/xpath/XPathFunction;" />
+	</class>
+	<class name="javax/xml/xpath/XPathVariableResolver" since="8">
+		<extends name="java/lang/Object" />
+		<method name="resolveVariable(Ljavax/xml/namespace/QName;)Ljava/lang/Object;" />
+	</class>
+	<class name="junit/framework/Assert" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="assertEquals(BB)V" />
+		<method name="assertEquals(CC)V" />
+		<method name="assertEquals(DDD)V" />
+		<method name="assertEquals(FFF)V" />
+		<method name="assertEquals(II)V" />
+		<method name="assertEquals(JJ)V" />
+		<method name="assertEquals(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="assertEquals(Ljava/lang/String;BB)V" />
+		<method name="assertEquals(Ljava/lang/String;CC)V" />
+		<method name="assertEquals(Ljava/lang/String;DDD)V" />
+		<method name="assertEquals(Ljava/lang/String;FFF)V" />
+		<method name="assertEquals(Ljava/lang/String;II)V" />
+		<method name="assertEquals(Ljava/lang/String;JJ)V" />
+		<method name="assertEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="assertEquals(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="assertEquals(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="assertEquals(Ljava/lang/String;SS)V" />
+		<method name="assertEquals(Ljava/lang/String;ZZ)V" />
+		<method name="assertEquals(SS)V" />
+		<method name="assertEquals(ZZ)V" />
+		<method name="assertFalse(Ljava/lang/String;Z)V" />
+		<method name="assertFalse(Z)V" />
+		<method name="assertNotNull(Ljava/lang/Object;)V" />
+		<method name="assertNotNull(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="assertNotSame(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="assertNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="assertNull(Ljava/lang/Object;)V" />
+		<method name="assertNull(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="assertSame(Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="assertSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" />
+		<method name="assertTrue(Ljava/lang/String;Z)V" />
+		<method name="assertTrue(Z)V" />
+		<method name="fail()V" />
+		<method name="fail(Ljava/lang/String;)V" />
+		<method name="failNotEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" since="16" />
+		<method name="failNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" since="16" />
+		<method name="failSame(Ljava/lang/String;)V" since="16" />
+		<method name="format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String;" since="16" />
+	</class>
+	<class name="junit/framework/AssertionFailedError" since="1">
+		<extends name="java/lang/AssertionError" since="16" />
+		<extends name="java/lang/Error" removed="16" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="junit/framework/ComparisonFailure" since="1">
+		<extends name="junit/framework/AssertionFailedError" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getActual()Ljava/lang/String;" since="16" />
+		<method name="getExpected()Ljava/lang/String;" since="16" />
+	</class>
+	<class name="junit/framework/Protectable" since="1">
+		<extends name="java/lang/Object" />
+		<method name="protect()V" />
+	</class>
+	<class name="junit/framework/Test" since="1">
+		<extends name="java/lang/Object" />
+		<method name="countTestCases()I" />
+		<method name="run(Ljunit/framework/TestResult;)V" />
+	</class>
+	<class name="junit/framework/TestCase" since="1">
+		<extends name="junit/framework/Assert" />
+		<implements name="junit/framework/Test" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="createResult()Ljunit/framework/TestResult;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="run()Ljunit/framework/TestResult;" />
+		<method name="runBare()V" />
+		<method name="runTest()V" />
+		<method name="setName(Ljava/lang/String;)V" />
+		<method name="setUp()V" />
+		<method name="tearDown()V" />
+	</class>
+	<class name="junit/framework/TestFailure" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljunit/framework/Test;Ljava/lang/Throwable;)V" />
+		<method name="exceptionMessage()Ljava/lang/String;" />
+		<method name="failedTest()Ljunit/framework/Test;" />
+		<method name="isFailure()Z" />
+		<method name="thrownException()Ljava/lang/Throwable;" />
+		<method name="trace()Ljava/lang/String;" />
+		<field name="fFailedTest" />
+		<field name="fThrownException" />
+	</class>
+	<class name="junit/framework/TestListener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V" />
+		<method name="addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V" />
+		<method name="endTest(Ljunit/framework/Test;)V" />
+		<method name="startTest(Ljunit/framework/Test;)V" />
+	</class>
+	<class name="junit/framework/TestResult" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V" />
+		<method name="addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V" />
+		<method name="addListener(Ljunit/framework/TestListener;)V" />
+		<method name="endTest(Ljunit/framework/Test;)V" />
+		<method name="errorCount()I" />
+		<method name="errors()Ljava/util/Enumeration;" />
+		<method name="failureCount()I" />
+		<method name="failures()Ljava/util/Enumeration;" />
+		<method name="removeListener(Ljunit/framework/TestListener;)V" />
+		<method name="run(Ljunit/framework/TestCase;)V" />
+		<method name="runCount()I" />
+		<method name="runProtected(Ljunit/framework/Test;Ljunit/framework/Protectable;)V" />
+		<method name="shouldStop()Z" />
+		<method name="startTest(Ljunit/framework/Test;)V" />
+		<method name="stop()V" />
+		<method name="wasSuccessful()Z" />
+		<field name="fErrors" />
+		<field name="fFailures" />
+		<field name="fListeners" />
+		<field name="fRunTests" />
+	</class>
+	<class name="junit/framework/TestSuite" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="junit/framework/Test" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;([Ljava/lang/Class;)V" since="16" />
+		<method name="&lt;init&gt;([Ljava/lang/Class;Ljava/lang/String;)V" since="16" />
+		<method name="addTest(Ljunit/framework/Test;)V" />
+		<method name="addTestSuite(Ljava/lang/Class;)V" />
+		<method name="createTest(Ljava/lang/Class;Ljava/lang/String;)Ljunit/framework/Test;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getTestConstructor(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;" />
+		<method name="runTest(Ljunit/framework/Test;Ljunit/framework/TestResult;)V" />
+		<method name="setName(Ljava/lang/String;)V" />
+		<method name="testAt(I)Ljunit/framework/Test;" />
+		<method name="testCount()I" />
+		<method name="tests()Ljava/util/Enumeration;" />
+		<method name="warning(Ljava/lang/String;)Ljunit/framework/Test;" since="16" />
+	</class>
+	<class name="junit/runner/BaseTestRunner" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="junit/framework/TestListener" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clearStatus()V" />
+		<method name="elapsedTimeAsString(J)Ljava/lang/String;" />
+		<method name="extractClassName(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getFilteredTrace(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getFilteredTrace(Ljava/lang/Throwable;)Ljava/lang/String;" />
+		<method name="getLoader()Ljunit/runner/TestSuiteLoader;" deprecated="16" />
+		<method name="getPreference(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getPreference(Ljava/lang/String;I)I" />
+		<method name="getPreferences()Ljava/util/Properties;" />
+		<method name="getTest(Ljava/lang/String;)Ljunit/framework/Test;" />
+		<method name="inVAJava()Z" deprecated="16" />
+		<method name="loadSuiteClass(Ljava/lang/String;)Ljava/lang/Class;" />
+		<method name="processArguments([Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="runFailed(Ljava/lang/String;)V" />
+		<method name="savePreferences()V" />
+		<method name="setLoading(Z)V" />
+		<method name="setPreference(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setPreferences(Ljava/util/Properties;)V" />
+		<method name="showStackRaw()Z" />
+		<method name="testEnded(Ljava/lang/String;)V" />
+		<method name="testFailed(ILjunit/framework/Test;Ljava/lang/Throwable;)V" />
+		<method name="testStarted(Ljava/lang/String;)V" />
+		<method name="truncate(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="useReloadingTestSuiteLoader()Z" />
+		<field name="SUITE_METHODNAME" />
+	</class>
+	<class name="junit/runner/TestSuiteLoader" since="1">
+		<extends name="java/lang/Object" />
+		<method name="load(Ljava/lang/String;)Ljava/lang/Class;" />
+		<method name="reload(Ljava/lang/Class;)Ljava/lang/Class;" />
+	</class>
+	<class name="junit/runner/Version" since="1">
+		<extends name="java/lang/Object" />
+		<method name="id()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/commons/logging/Log" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="debug(Ljava/lang/Object;)V" />
+		<method name="debug(Ljava/lang/Object;Ljava/lang/Throwable;)V" />
+		<method name="error(Ljava/lang/Object;)V" />
+		<method name="error(Ljava/lang/Object;Ljava/lang/Throwable;)V" />
+		<method name="fatal(Ljava/lang/Object;)V" />
+		<method name="fatal(Ljava/lang/Object;Ljava/lang/Throwable;)V" />
+		<method name="info(Ljava/lang/Object;)V" />
+		<method name="info(Ljava/lang/Object;Ljava/lang/Throwable;)V" />
+		<method name="isDebugEnabled()Z" />
+		<method name="isErrorEnabled()Z" />
+		<method name="isFatalEnabled()Z" />
+		<method name="isInfoEnabled()Z" />
+		<method name="isTraceEnabled()Z" />
+		<method name="isWarnEnabled()Z" />
+		<method name="trace(Ljava/lang/Object;)V" />
+		<method name="trace(Ljava/lang/Object;Ljava/lang/Throwable;)V" />
+		<method name="warn(Ljava/lang/Object;)V" />
+		<method name="warn(Ljava/lang/Object;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/ConnectionClosedException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/ConnectionReuseStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="keepAlive(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z" />
+	</class>
+	<class name="org/apache/http/FormattedHeader" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/Header" />
+		<method name="getBuffer()Lorg/apache/http/util/CharArrayBuffer;" />
+		<method name="getValuePos()I" />
+	</class>
+	<class name="org/apache/http/Header" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getElements()[Lorg/apache/http/HeaderElement;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getValue()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/HeaderElement" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getParameter(I)Lorg/apache/http/NameValuePair;" />
+		<method name="getParameterByName(Ljava/lang/String;)Lorg/apache/http/NameValuePair;" />
+		<method name="getParameterCount()I" />
+		<method name="getParameters()[Lorg/apache/http/NameValuePair;" />
+		<method name="getValue()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/HeaderElementIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Iterator" />
+		<method name="nextElement()Lorg/apache/http/HeaderElement;" />
+	</class>
+	<class name="org/apache/http/HeaderIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Iterator" />
+		<method name="nextHeader()Lorg/apache/http/Header;" />
+	</class>
+	<class name="org/apache/http/HttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpConnection" />
+		<method name="flush()V" />
+		<method name="isResponseAvailable(I)Z" />
+		<method name="receiveResponseEntity(Lorg/apache/http/HttpResponse;)V" />
+		<method name="receiveResponseHeader()Lorg/apache/http/HttpResponse;" />
+		<method name="sendRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V" />
+		<method name="sendRequestHeader(Lorg/apache/http/HttpRequest;)V" />
+	</class>
+	<class name="org/apache/http/HttpConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="close()V" />
+		<method name="getMetrics()Lorg/apache/http/HttpConnectionMetrics;" />
+		<method name="getSocketTimeout()I" />
+		<method name="isOpen()Z" />
+		<method name="isStale()Z" />
+		<method name="setSocketTimeout(I)V" />
+		<method name="shutdown()V" />
+	</class>
+	<class name="org/apache/http/HttpConnectionMetrics" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getMetric(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getReceivedBytesCount()J" />
+		<method name="getRequestCount()J" />
+		<method name="getResponseCount()J" />
+		<method name="getSentBytesCount()J" />
+		<method name="reset()V" />
+	</class>
+	<class name="org/apache/http/HttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="consumeContent()V" />
+		<method name="getContent()Ljava/io/InputStream;" />
+		<method name="getContentEncoding()Lorg/apache/http/Header;" />
+		<method name="getContentLength()J" />
+		<method name="getContentType()Lorg/apache/http/Header;" />
+		<method name="isChunked()Z" />
+		<method name="isRepeatable()Z" />
+		<method name="isStreaming()Z" />
+		<method name="writeTo(Ljava/io/OutputStream;)V" />
+	</class>
+	<class name="org/apache/http/HttpEntityEnclosingRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequest" />
+		<method name="expectContinue()Z" />
+		<method name="getEntity()Lorg/apache/http/HttpEntity;" />
+		<method name="setEntity(Lorg/apache/http/HttpEntity;)V" />
+	</class>
+	<class name="org/apache/http/HttpException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/HttpHost" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;)V" />
+		<method name="getHostName()Ljava/lang/String;" />
+		<method name="getPort()I" />
+		<method name="getSchemeName()Ljava/lang/String;" />
+		<method name="toHostString()Ljava/lang/String;" />
+		<method name="toURI()Ljava/lang/String;" />
+		<field name="DEFAULT_SCHEME_NAME" />
+		<field name="hostname" />
+		<field name="lcHostname" />
+		<field name="port" />
+		<field name="schemeName" />
+	</class>
+	<class name="org/apache/http/HttpInetConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpConnection" />
+		<method name="getLocalAddress()Ljava/net/InetAddress;" />
+		<method name="getLocalPort()I" />
+		<method name="getRemoteAddress()Ljava/net/InetAddress;" />
+		<method name="getRemotePort()I" />
+	</class>
+	<class name="org/apache/http/HttpMessage" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="addHeader(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="addHeader(Lorg/apache/http/Header;)V" />
+		<method name="containsHeader(Ljava/lang/String;)Z" />
+		<method name="getAllHeaders()[Lorg/apache/http/Header;" />
+		<method name="getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;" />
+		<method name="getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;" />
+		<method name="getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;" />
+		<method name="getParams()Lorg/apache/http/params/HttpParams;" />
+		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;" />
+		<method name="headerIterator()Lorg/apache/http/HeaderIterator;" />
+		<method name="headerIterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;" />
+		<method name="removeHeader(Lorg/apache/http/Header;)V" />
+		<method name="removeHeaders(Ljava/lang/String;)V" />
+		<method name="setHeader(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setHeader(Lorg/apache/http/Header;)V" />
+		<method name="setHeaders([Lorg/apache/http/Header;)V" />
+		<method name="setParams(Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/HttpRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpMessage" />
+		<method name="getRequestLine()Lorg/apache/http/RequestLine;" />
+	</class>
+	<class name="org/apache/http/HttpRequestFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="newHttpRequest(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/HttpRequest;" />
+		<method name="newHttpRequest(Lorg/apache/http/RequestLine;)Lorg/apache/http/HttpRequest;" />
+	</class>
+	<class name="org/apache/http/HttpRequestInterceptor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V" />
+	</class>
+	<class name="org/apache/http/HttpResponse" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpMessage" />
+		<method name="getEntity()Lorg/apache/http/HttpEntity;" />
+		<method name="getLocale()Ljava/util/Locale;" />
+		<method name="getStatusLine()Lorg/apache/http/StatusLine;" />
+		<method name="setEntity(Lorg/apache/http/HttpEntity;)V" />
+		<method name="setLocale(Ljava/util/Locale;)V" />
+		<method name="setReasonPhrase(Ljava/lang/String;)V" />
+		<method name="setStatusCode(I)V" />
+		<method name="setStatusLine(Lorg/apache/http/ProtocolVersion;I)V" />
+		<method name="setStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V" />
+		<method name="setStatusLine(Lorg/apache/http/StatusLine;)V" />
+	</class>
+	<class name="org/apache/http/HttpResponseFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="newHttpResponse(Lorg/apache/http/ProtocolVersion;ILorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+		<method name="newHttpResponse(Lorg/apache/http/StatusLine;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+	</class>
+	<class name="org/apache/http/HttpResponseInterceptor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="process(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V" />
+	</class>
+	<class name="org/apache/http/HttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpConnection" />
+		<method name="flush()V" />
+		<method name="receiveRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V" />
+		<method name="receiveRequestHeader()Lorg/apache/http/HttpRequest;" />
+		<method name="sendResponseEntity(Lorg/apache/http/HttpResponse;)V" />
+		<method name="sendResponseHeader(Lorg/apache/http/HttpResponse;)V" />
+	</class>
+	<class name="org/apache/http/HttpStatus" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="SC_ACCEPTED" />
+		<field name="SC_BAD_GATEWAY" />
+		<field name="SC_BAD_REQUEST" />
+		<field name="SC_CONFLICT" />
+		<field name="SC_CONTINUE" />
+		<field name="SC_CREATED" />
+		<field name="SC_EXPECTATION_FAILED" />
+		<field name="SC_FAILED_DEPENDENCY" />
+		<field name="SC_FORBIDDEN" />
+		<field name="SC_GATEWAY_TIMEOUT" />
+		<field name="SC_GONE" />
+		<field name="SC_HTTP_VERSION_NOT_SUPPORTED" />
+		<field name="SC_INSUFFICIENT_SPACE_ON_RESOURCE" />
+		<field name="SC_INSUFFICIENT_STORAGE" />
+		<field name="SC_INTERNAL_SERVER_ERROR" />
+		<field name="SC_LENGTH_REQUIRED" />
+		<field name="SC_LOCKED" />
+		<field name="SC_METHOD_FAILURE" />
+		<field name="SC_METHOD_NOT_ALLOWED" />
+		<field name="SC_MOVED_PERMANENTLY" />
+		<field name="SC_MOVED_TEMPORARILY" />
+		<field name="SC_MULTIPLE_CHOICES" />
+		<field name="SC_MULTI_STATUS" />
+		<field name="SC_NON_AUTHORITATIVE_INFORMATION" />
+		<field name="SC_NOT_ACCEPTABLE" />
+		<field name="SC_NOT_FOUND" />
+		<field name="SC_NOT_IMPLEMENTED" />
+		<field name="SC_NOT_MODIFIED" />
+		<field name="SC_NO_CONTENT" />
+		<field name="SC_OK" />
+		<field name="SC_PARTIAL_CONTENT" />
+		<field name="SC_PAYMENT_REQUIRED" />
+		<field name="SC_PRECONDITION_FAILED" />
+		<field name="SC_PROCESSING" />
+		<field name="SC_PROXY_AUTHENTICATION_REQUIRED" />
+		<field name="SC_REQUESTED_RANGE_NOT_SATISFIABLE" />
+		<field name="SC_REQUEST_TIMEOUT" />
+		<field name="SC_REQUEST_TOO_LONG" />
+		<field name="SC_REQUEST_URI_TOO_LONG" />
+		<field name="SC_RESET_CONTENT" />
+		<field name="SC_SEE_OTHER" />
+		<field name="SC_SERVICE_UNAVAILABLE" />
+		<field name="SC_SWITCHING_PROTOCOLS" />
+		<field name="SC_TEMPORARY_REDIRECT" />
+		<field name="SC_UNAUTHORIZED" />
+		<field name="SC_UNPROCESSABLE_ENTITY" />
+		<field name="SC_UNSUPPORTED_MEDIA_TYPE" />
+		<field name="SC_USE_PROXY" />
+	</class>
+	<class name="org/apache/http/HttpVersion" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolVersion" />
+		<method name="&lt;init&gt;(II)V" />
+		<field name="HTTP" />
+		<field name="HTTP_0_9" />
+		<field name="HTTP_1_0" />
+		<field name="HTTP_1_1" />
+	</class>
+	<class name="org/apache/http/MalformedChunkCodingException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/MethodNotSupportedException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/HttpException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/NameValuePair" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getValue()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/NoHttpResponseException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/ParseException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/ProtocolException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/HttpException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/ProtocolVersion" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;II)V" />
+		<method name="compareToVersion(Lorg/apache/http/ProtocolVersion;)I" />
+		<method name="forVersion(II)Lorg/apache/http/ProtocolVersion;" />
+		<method name="getMajor()I" />
+		<method name="getMinor()I" />
+		<method name="getProtocol()Ljava/lang/String;" />
+		<method name="greaterEquals(Lorg/apache/http/ProtocolVersion;)Z" />
+		<method name="isComparable(Lorg/apache/http/ProtocolVersion;)Z" />
+		<method name="lessEquals(Lorg/apache/http/ProtocolVersion;)Z" />
+		<field name="major" />
+		<field name="minor" />
+		<field name="protocol" />
+	</class>
+	<class name="org/apache/http/ReasonPhraseCatalog" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getReason(ILjava/util/Locale;)Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/RequestLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getMethod()Ljava/lang/String;" />
+		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;" />
+		<method name="getUri()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/StatusLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;" />
+		<method name="getReasonPhrase()Ljava/lang/String;" />
+		<method name="getStatusCode()I" />
+	</class>
+	<class name="org/apache/http/TokenIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/util/Iterator" />
+		<method name="nextToken()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/UnsupportedHttpVersionException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/auth/AUTH" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="PROXY_AUTH" />
+		<field name="PROXY_AUTH_RESP" />
+		<field name="WWW_AUTH" />
+		<field name="WWW_AUTH_RESP" />
+	</class>
+	<class name="org/apache/http/auth/AuthScheme" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="authenticate(Lorg/apache/http/auth/Credentials;Lorg/apache/http/HttpRequest;)Lorg/apache/http/Header;" />
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getRealm()Ljava/lang/String;" />
+		<method name="getSchemeName()Ljava/lang/String;" />
+		<method name="isComplete()Z" />
+		<method name="isConnectionBased()Z" />
+		<method name="processChallenge(Lorg/apache/http/Header;)V" />
+	</class>
+	<class name="org/apache/http/auth/AuthSchemeFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="newInstance(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/auth/AuthScheme;" />
+	</class>
+	<class name="org/apache/http/auth/AuthSchemeRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAuthScheme(Ljava/lang/String;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/auth/AuthScheme;" />
+		<method name="getSchemeNames()Ljava/util/List;" />
+		<method name="register(Ljava/lang/String;Lorg/apache/http/auth/AuthSchemeFactory;)V" />
+		<method name="setItems(Ljava/util/Map;)V" />
+		<method name="unregister(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/auth/AuthScope" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;I)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/auth/AuthScope;)V" />
+		<method name="getHost()Ljava/lang/String;" />
+		<method name="getPort()I" />
+		<method name="getRealm()Ljava/lang/String;" />
+		<method name="getScheme()Ljava/lang/String;" />
+		<method name="match(Lorg/apache/http/auth/AuthScope;)I" />
+		<field name="ANY" />
+		<field name="ANY_HOST" />
+		<field name="ANY_PORT" />
+		<field name="ANY_REALM" />
+		<field name="ANY_SCHEME" />
+	</class>
+	<class name="org/apache/http/auth/AuthState" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAuthScheme()Lorg/apache/http/auth/AuthScheme;" />
+		<method name="getAuthScope()Lorg/apache/http/auth/AuthScope;" />
+		<method name="getCredentials()Lorg/apache/http/auth/Credentials;" />
+		<method name="invalidate()V" />
+		<method name="isValid()Z" />
+		<method name="setAuthScheme(Lorg/apache/http/auth/AuthScheme;)V" />
+		<method name="setAuthScope(Lorg/apache/http/auth/AuthScope;)V" />
+		<method name="setCredentials(Lorg/apache/http/auth/Credentials;)V" />
+	</class>
+	<class name="org/apache/http/auth/AuthenticationException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/auth/BasicUserPrincipal" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/Principal" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/auth/Credentials" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getPassword()Ljava/lang/String;" />
+		<method name="getUserPrincipal()Ljava/security/Principal;" />
+	</class>
+	<class name="org/apache/http/auth/InvalidCredentialsException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/auth/AuthenticationException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/auth/MalformedChallengeException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/auth/NTCredentials" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/auth/Credentials" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getDomain()Ljava/lang/String;" />
+		<method name="getUserName()Ljava/lang/String;" />
+		<method name="getWorkstation()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/auth/NTUserPrincipal" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/security/Principal" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getDomain()Ljava/lang/String;" />
+		<method name="getUsername()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/auth/UsernamePasswordCredentials" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/auth/Credentials" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getUserName()Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/auth/params/AuthPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="CREDENTIAL_CHARSET" />
+	</class>
+	<class name="org/apache/http/auth/params/AuthParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setCredentialCharset(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/auth/params/AuthParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getCredentialCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;" />
+		<method name="setCredentialCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/client/AuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getChallenges(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/util/Map;" />
+		<method name="isAuthenticationRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z" />
+		<method name="selectScheme(Ljava/util/Map;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/auth/AuthScheme;" />
+	</class>
+	<class name="org/apache/http/client/CircularRedirectException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/RedirectException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/client/ClientProtocolException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/client/CookieStore" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="addCookie(Lorg/apache/http/cookie/Cookie;)V" />
+		<method name="clear()V" />
+		<method name="clearExpired(Ljava/util/Date;)Z" />
+		<method name="getCookies()Ljava/util/List;" />
+	</class>
+	<class name="org/apache/http/client/CredentialsProvider" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="clear()V" />
+		<method name="getCredentials(Lorg/apache/http/auth/AuthScope;)Lorg/apache/http/auth/Credentials;" />
+		<method name="setCredentials(Lorg/apache/http/auth/AuthScope;Lorg/apache/http/auth/Credentials;)V" />
+	</class>
+	<class name="org/apache/http/client/HttpClient" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;)Lorg/apache/http/HttpResponse;" />
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;" />
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;" />
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpResponse;" />
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;" />
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;" />
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+		<method name="getConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;" />
+		<method name="getParams()Lorg/apache/http/params/HttpParams;" />
+	</class>
+	<class name="org/apache/http/client/HttpRequestRetryHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="retryRequest(Ljava/io/IOException;ILorg/apache/http/protocol/HttpContext;)Z" />
+	</class>
+	<class name="org/apache/http/client/HttpResponseException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/ClientProtocolException" />
+		<method name="&lt;init&gt;(ILjava/lang/String;)V" />
+		<method name="getStatusCode()I" />
+	</class>
+	<class name="org/apache/http/client/NonRepeatableRequestException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/client/RedirectException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/client/RedirectHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getLocationURI(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/net/URI;" />
+		<method name="isRedirectRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z" />
+	</class>
+	<class name="org/apache/http/client/RequestDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+	</class>
+	<class name="org/apache/http/client/ResponseHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="handleResponse(Lorg/apache/http/HttpResponse;)Ljava/lang/Object;" />
+	</class>
+	<class name="org/apache/http/client/UserTokenHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getUserToken(Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;" />
+	</class>
+	<class name="org/apache/http/client/entity/UrlEncodedFormEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/StringEntity" />
+		<method name="&lt;init&gt;(Ljava/util/List;)V" />
+		<method name="&lt;init&gt;(Ljava/util/List;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/client/methods/AbortableHttpRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="abort()V" />
+		<method name="setConnectionRequest(Lorg/apache/http/conn/ClientConnectionRequest;)V" />
+		<method name="setReleaseTrigger(Lorg/apache/http/conn/ConnectionReleaseTrigger;)V" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpDelete" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<field name="METHOD_NAME" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase" />
+		<implements name="org/apache/http/HttpEntityEnclosingRequest" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpGet" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<field name="METHOD_NAME" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpHead" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<field name="METHOD_NAME" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpOptions" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<method name="getAllowedMethods(Lorg/apache/http/HttpResponse;)Ljava/util/Set;" />
+		<field name="METHOD_NAME" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpPost" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<field name="METHOD_NAME" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpPut" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<field name="METHOD_NAME" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpRequestBase" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/client/methods/AbortableHttpRequest" />
+		<implements name="org/apache/http/client/methods/HttpUriRequest" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setURI(Ljava/net/URI;)V" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpTrace" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/net/URI;)V" />
+		<field name="METHOD_NAME" />
+	</class>
+	<class name="org/apache/http/client/methods/HttpUriRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequest" />
+		<method name="abort()V" />
+		<method name="getMethod()Ljava/lang/String;" />
+		<method name="getURI()Ljava/net/URI;" />
+		<method name="isAborted()Z" />
+	</class>
+	<class name="org/apache/http/client/params/AllClientPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/auth/params/AuthPNames" />
+		<implements name="org/apache/http/client/params/ClientPNames" />
+		<implements name="org/apache/http/conn/params/ConnConnectionPNames" />
+		<implements name="org/apache/http/conn/params/ConnManagerPNames" />
+		<implements name="org/apache/http/conn/params/ConnRoutePNames" />
+		<implements name="org/apache/http/cookie/params/CookieSpecPNames" />
+		<implements name="org/apache/http/params/CoreConnectionPNames" />
+		<implements name="org/apache/http/params/CoreProtocolPNames" />
+	</class>
+	<class name="org/apache/http/client/params/AuthPolicy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="BASIC" />
+		<field name="DIGEST" />
+		<field name="NTLM" />
+	</class>
+	<class name="org/apache/http/client/params/ClientPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="ALLOW_CIRCULAR_REDIRECTS" />
+		<field name="CONNECTION_MANAGER_FACTORY" />
+		<field name="CONNECTION_MANAGER_FACTORY_CLASS_NAME" />
+		<field name="COOKIE_POLICY" />
+		<field name="DEFAULT_HEADERS" />
+		<field name="DEFAULT_HOST" />
+		<field name="HANDLE_AUTHENTICATION" />
+		<field name="HANDLE_REDIRECTS" />
+		<field name="MAX_REDIRECTS" />
+		<field name="REJECT_RELATIVE_REDIRECT" />
+		<field name="VIRTUAL_HOST" />
+	</class>
+	<class name="org/apache/http/client/params/ClientParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setAllowCircularRedirects(Z)V" />
+		<method name="setConnectionManagerFactory(Lorg/apache/http/conn/ClientConnectionManagerFactory;)V" />
+		<method name="setConnectionManagerFactoryClassName(Ljava/lang/String;)V" />
+		<method name="setCookiePolicy(Ljava/lang/String;)V" />
+		<method name="setDefaultHeaders(Ljava/util/Collection;)V" />
+		<method name="setDefaultHost(Lorg/apache/http/HttpHost;)V" />
+		<method name="setHandleAuthentication(Z)V" />
+		<method name="setHandleRedirects(Z)V" />
+		<method name="setMaxRedirects(I)V" />
+		<method name="setRejectRelativeRedirect(Z)V" />
+		<method name="setVirtualHost(Lorg/apache/http/HttpHost;)V" />
+	</class>
+	<class name="org/apache/http/client/params/CookiePolicy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="BEST_MATCH" />
+		<field name="BROWSER_COMPATIBILITY" />
+		<field name="NETSCAPE" />
+		<field name="RFC_2109" />
+		<field name="RFC_2965" />
+	</class>
+	<class name="org/apache/http/client/params/HttpClientParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getCookiePolicy(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;" />
+		<method name="isAuthenticating(Lorg/apache/http/params/HttpParams;)Z" />
+		<method name="isRedirecting(Lorg/apache/http/params/HttpParams;)Z" />
+		<method name="setAuthenticating(Lorg/apache/http/params/HttpParams;Z)V" />
+		<method name="setCookiePolicy(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V" />
+		<method name="setRedirecting(Lorg/apache/http/params/HttpParams;Z)V" />
+	</class>
+	<class name="org/apache/http/client/protocol/ClientContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="AUTHSCHEME_REGISTRY" />
+		<field name="AUTH_SCHEME_PREF" />
+		<field name="COOKIESPEC_REGISTRY" />
+		<field name="COOKIE_ORIGIN" />
+		<field name="COOKIE_SPEC" />
+		<field name="COOKIE_STORE" />
+		<field name="CREDS_PROVIDER" />
+		<field name="PROXY_AUTH_STATE" />
+		<field name="TARGET_AUTH_STATE" />
+		<field name="USER_TOKEN" />
+	</class>
+	<class name="org/apache/http/client/protocol/ClientContextConfigurer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/protocol/ClientContext" />
+		<method name="&lt;init&gt;(Lorg/apache/http/protocol/HttpContext;)V" />
+		<method name="setAuthSchemePref(Ljava/util/List;)V" />
+		<method name="setAuthSchemeRegistry(Lorg/apache/http/auth/AuthSchemeRegistry;)V" />
+		<method name="setCookieSpecRegistry(Lorg/apache/http/cookie/CookieSpecRegistry;)V" />
+		<method name="setCookieStore(Lorg/apache/http/client/CookieStore;)V" />
+		<method name="setCredentialsProvider(Lorg/apache/http/client/CredentialsProvider;)V" />
+	</class>
+	<class name="org/apache/http/client/protocol/RequestAddCookies" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/client/protocol/RequestDefaultHeaders" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/client/protocol/RequestProxyAuthentication" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/client/protocol/RequestTargetAuthentication" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/client/protocol/ResponseProcessCookies" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpResponseInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/client/utils/CloneUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="clone(Ljava/lang/Object;)Ljava/lang/Object;" />
+	</class>
+	<class name="org/apache/http/client/utils/URIUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="createURI(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI;" />
+		<method name="resolve(Ljava/net/URI;Ljava/lang/String;)Ljava/net/URI;" />
+		<method name="resolve(Ljava/net/URI;Ljava/net/URI;)Ljava/net/URI;" />
+		<method name="rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;)Ljava/net/URI;" />
+		<method name="rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;Z)Ljava/net/URI;" />
+	</class>
+	<class name="org/apache/http/client/utils/URLEncodedUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="format(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="isEncoded(Lorg/apache/http/HttpEntity;)Z" />
+		<method name="parse(Ljava/net/URI;Ljava/lang/String;)Ljava/util/List;" />
+		<method name="parse(Ljava/util/List;Ljava/util/Scanner;Ljava/lang/String;)V" />
+		<method name="parse(Lorg/apache/http/HttpEntity;)Ljava/util/List;" />
+		<field name="CONTENT_TYPE" />
+	</class>
+	<class name="org/apache/http/conn/BasicEofSensorWatcher" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/EofSensorWatcher" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ManagedClientConnection;Z)V" />
+		<field name="attemptReuse" />
+		<field name="managedConn" />
+	</class>
+	<class name="org/apache/http/conn/BasicManagedEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/HttpEntityWrapper" />
+		<implements name="org/apache/http/conn/ConnectionReleaseTrigger" />
+		<implements name="org/apache/http/conn/EofSensorWatcher" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpEntity;Lorg/apache/http/conn/ManagedClientConnection;Z)V" />
+		<method name="releaseManagedConnection()V" />
+		<field name="attemptReuse" />
+		<field name="managedConn" />
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionManager" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="closeExpiredConnections()V" />
+		<method name="closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V" />
+		<method name="getSchemeRegistry()Lorg/apache/http/conn/scheme/SchemeRegistry;" />
+		<method name="releaseConnection(Lorg/apache/http/conn/ManagedClientConnection;JLjava/util/concurrent/TimeUnit;)V" />
+		<method name="requestConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ClientConnectionRequest;" />
+		<method name="shutdown()V" />
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionManagerFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="newInstance(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionManager;" />
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionOperator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="createConnection()Lorg/apache/http/conn/OperatedClientConnection;" />
+		<method name="openConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="updateSecureConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="abortRequest()V" />
+		<method name="getConnection(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/conn/ManagedClientConnection;" />
+	</class>
+	<class name="org/apache/http/conn/ConnectTimeoutException" since="1" deprecated="22">
+		<extends name="java/io/InterruptedIOException" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/ConnectionKeepAliveStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getKeepAliveDuration(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)J" />
+	</class>
+	<class name="org/apache/http/conn/ConnectionPoolTimeoutException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/conn/ConnectTimeoutException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/conn/ConnectionReleaseTrigger" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="abortConnection()V" />
+		<method name="releaseConnection()V" />
+	</class>
+	<class name="org/apache/http/conn/EofSensorInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream" />
+		<implements name="org/apache/http/conn/ConnectionReleaseTrigger" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;Lorg/apache/http/conn/EofSensorWatcher;)V" />
+		<method name="checkAbort()V" />
+		<method name="checkClose()V" />
+		<method name="checkEOF(I)V" />
+		<method name="isReadAllowed()Z" />
+		<field name="wrappedStream" />
+	</class>
+	<class name="org/apache/http/conn/EofSensorWatcher" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="eofDetected(Ljava/io/InputStream;)Z" />
+		<method name="streamAbort(Ljava/io/InputStream;)Z" />
+		<method name="streamClosed(Ljava/io/InputStream;)Z" />
+	</class>
+	<class name="org/apache/http/conn/HttpHostConnectException" since="1" deprecated="22" removed="23">
+		<extends name="java/net/ConnectException" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;Ljava/net/ConnectException;)V" />
+		<method name="getHost()Lorg/apache/http/HttpHost;" />
+	</class>
+	<class name="org/apache/http/conn/ManagedClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpClientConnection" />
+		<implements name="org/apache/http/HttpInetConnection" />
+		<implements name="org/apache/http/conn/ConnectionReleaseTrigger" />
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;" />
+		<method name="getSSLSession()Ljavax/net/ssl/SSLSession;" />
+		<method name="getState()Ljava/lang/Object;" />
+		<method name="isMarkedReusable()Z" />
+		<method name="isSecure()Z" />
+		<method name="layerProtocol(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="markReusable()V" />
+		<method name="open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setIdleDuration(JLjava/util/concurrent/TimeUnit;)V" />
+		<method name="setState(Ljava/lang/Object;)V" />
+		<method name="tunnelProxy(Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V" />
+		<method name="tunnelTarget(ZLorg/apache/http/params/HttpParams;)V" />
+		<method name="unmarkReusable()V" />
+	</class>
+	<class name="org/apache/http/conn/MultihomePlainSocketFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/scheme/SocketFactory" />
+		<method name="getSocketFactory()Lorg/apache/http/conn/MultihomePlainSocketFactory;" />
+	</class>
+	<class name="org/apache/http/conn/OperatedClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpClientConnection" />
+		<implements name="org/apache/http/HttpInetConnection" />
+		<method name="getSocket()Ljava/net/Socket;" />
+		<method name="getTargetHost()Lorg/apache/http/HttpHost;" />
+		<method name="isSecure()Z" />
+		<method name="openCompleted(ZLorg/apache/http/params/HttpParams;)V" />
+		<method name="opening(Ljava/net/Socket;Lorg/apache/http/HttpHost;)V" />
+		<method name="update(Ljava/net/Socket;Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnConnectionPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="MAX_STATUS_LINE_GARBAGE" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnConnectionParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setMaxStatusLineGarbage(I)V" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnManagerPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="MAX_CONNECTIONS_PER_ROUTE" />
+		<field name="MAX_TOTAL_CONNECTIONS" />
+		<field name="TIMEOUT" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnManagerParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setConnectionsPerRoute(Lorg/apache/http/conn/params/ConnPerRouteBean;)V" />
+		<method name="setMaxTotalConnections(I)V" />
+		<method name="setTimeout(J)V" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnManagerParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/params/ConnManagerPNames" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/params/ConnPerRoute;" />
+		<method name="getMaxTotalConnections(Lorg/apache/http/params/HttpParams;)I" />
+		<method name="getTimeout(Lorg/apache/http/params/HttpParams;)J" />
+		<method name="setMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/params/ConnPerRoute;)V" />
+		<method name="setMaxTotalConnections(Lorg/apache/http/params/HttpParams;I)V" />
+		<method name="setTimeout(Lorg/apache/http/params/HttpParams;J)V" />
+		<field name="DEFAULT_MAX_TOTAL_CONNECTIONS" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnPerRoute" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;)I" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnPerRouteBean" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/params/ConnPerRoute" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="getDefaultMax()I" />
+		<method name="setDefaultMaxPerRoute(I)V" />
+		<method name="setMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;I)V" />
+		<method name="setMaxForRoutes(Ljava/util/Map;)V" />
+		<field name="DEFAULT_MAX_CONNECTIONS_PER_ROUTE" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnRoutePNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="DEFAULT_PROXY" />
+		<field name="FORCED_ROUTE" />
+		<field name="LOCAL_ADDRESS" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnRouteParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setDefaultProxy(Lorg/apache/http/HttpHost;)V" />
+		<method name="setForcedRoute(Lorg/apache/http/conn/routing/HttpRoute;)V" />
+		<method name="setLocalAddress(Ljava/net/InetAddress;)V" />
+	</class>
+	<class name="org/apache/http/conn/params/ConnRouteParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/params/ConnRoutePNames" />
+		<method name="getDefaultProxy(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/HttpHost;" />
+		<method name="getForcedRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/routing/HttpRoute;" />
+		<method name="getLocalAddress(Lorg/apache/http/params/HttpParams;)Ljava/net/InetAddress;" />
+		<method name="setDefaultProxy(Lorg/apache/http/params/HttpParams;Lorg/apache/http/HttpHost;)V" />
+		<method name="setForcedRoute(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/routing/HttpRoute;)V" />
+		<method name="setLocalAddress(Lorg/apache/http/params/HttpParams;Ljava/net/InetAddress;)V" />
+		<field name="NO_HOST" />
+		<field name="NO_ROUTE" />
+	</class>
+	<class name="org/apache/http/conn/routing/BasicRouteDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/routing/HttpRouteDirector" />
+		<method name="&lt;init&gt;()V" />
+		<method name="directStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I" />
+		<method name="firstStep(Lorg/apache/http/conn/routing/RouteInfo;)I" />
+		<method name="proxiedStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I" />
+	</class>
+	<class name="org/apache/http/conn/routing/HttpRoute" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/conn/routing/RouteInfo" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/HttpHost;Z)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Z)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;[Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V" />
+	</class>
+	<class name="org/apache/http/conn/routing/HttpRouteDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="nextStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I" />
+		<field name="COMPLETE" />
+		<field name="CONNECT_PROXY" />
+		<field name="CONNECT_TARGET" />
+		<field name="LAYER_PROTOCOL" />
+		<field name="TUNNEL_PROXY" />
+		<field name="TUNNEL_TARGET" />
+		<field name="UNREACHABLE" />
+	</class>
+	<class name="org/apache/http/conn/routing/HttpRoutePlanner" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;" />
+	</class>
+	<class name="org/apache/http/conn/routing/RouteInfo" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getHopCount()I" />
+		<method name="getHopTarget(I)Lorg/apache/http/HttpHost;" />
+		<method name="getLayerType()Lorg/apache/http/conn/routing/RouteInfo$LayerType;" />
+		<method name="getLocalAddress()Ljava/net/InetAddress;" />
+		<method name="getProxyHost()Lorg/apache/http/HttpHost;" />
+		<method name="getTargetHost()Lorg/apache/http/HttpHost;" />
+		<method name="getTunnelType()Lorg/apache/http/conn/routing/RouteInfo$TunnelType;" />
+		<method name="isLayered()Z" />
+		<method name="isSecure()Z" />
+		<method name="isTunnelled()Z" />
+	</class>
+	<class name="org/apache/http/conn/routing/RouteInfo$LayerType" since="1" removed="23">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Lorg/apache/http/conn/routing/RouteInfo$LayerType;" />
+		<method name="values()[Lorg/apache/http/conn/routing/RouteInfo$LayerType;" />
+		<field name="LAYERED" />
+		<field name="PLAIN" />
+	</class>
+	<class name="org/apache/http/conn/routing/RouteInfo$TunnelType" since="1" removed="23">
+		<extends name="java/lang/Enum" />
+		<method name="valueOf(Ljava/lang/String;)Lorg/apache/http/conn/routing/RouteInfo$TunnelType;" />
+		<method name="values()[Lorg/apache/http/conn/routing/RouteInfo$TunnelType;" />
+		<field name="PLAIN" />
+		<field name="TUNNELLED" />
+	</class>
+	<class name="org/apache/http/conn/routing/RouteTracker" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/conn/routing/RouteInfo" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/routing/HttpRoute;)V" />
+		<method name="connectProxy(Lorg/apache/http/HttpHost;Z)V" />
+		<method name="connectTarget(Z)V" />
+		<method name="isConnected()Z" />
+		<method name="layerProtocol(Z)V" />
+		<method name="toRoute()Lorg/apache/http/conn/routing/HttpRoute;" />
+		<method name="tunnelProxy(Lorg/apache/http/HttpHost;Z)V" />
+		<method name="tunnelTarget(Z)V" />
+	</class>
+	<class name="org/apache/http/conn/scheme/HostNameResolver" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<method name="resolve(Ljava/lang/String;)Ljava/net/InetAddress;" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/scheme/LayeredSocketFactory" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/scheme/SocketFactory" />
+		<method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/scheme/PlainSocketFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/scheme/SocketFactory" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/scheme/HostNameResolver;)V" />
+		<method name="getSocketFactory()Lorg/apache/http/conn/scheme/PlainSocketFactory;" />
+	</class>
+	<class name="org/apache/http/conn/scheme/Scheme" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Lorg/apache/http/conn/scheme/SocketFactory;I)V" />
+		<method name="getDefaultPort()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getSocketFactory()Lorg/apache/http/conn/scheme/SocketFactory;" />
+		<method name="isLayered()Z" />
+		<method name="resolvePort(I)I" />
+	</class>
+	<class name="org/apache/http/conn/scheme/SchemeRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="get(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;" />
+		<method name="getScheme(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;" />
+		<method name="getScheme(Lorg/apache/http/HttpHost;)Lorg/apache/http/conn/scheme/Scheme;" />
+		<method name="getSchemeNames()Ljava/util/List;" />
+		<method name="register(Lorg/apache/http/conn/scheme/Scheme;)Lorg/apache/http/conn/scheme/Scheme;" />
+		<method name="setItems(Ljava/util/Map;)V" />
+		<method name="unregister(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;" />
+	</class>
+	<class name="org/apache/http/conn/scheme/SocketFactory" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<method name="connectSocket(Ljava/net/Socket;Ljava/lang/String;ILjava/net/InetAddress;ILorg/apache/http/params/HttpParams;)Ljava/net/Socket;" deprecated="29" />
+		<method name="createSocket()Ljava/net/Socket;" deprecated="29" />
+		<method name="isSecure(Ljava/net/Socket;)Z" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/ssl/AbstractVerifier" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/ssl/X509HostnameVerifier" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="acceptableCountryWildcard(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="countDots(Ljava/lang/String;)I" deprecated="29" />
+		<method name="getCNs(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;" deprecated="29" />
+		<method name="getDNSSubjectAlts(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;" deprecated="29" />
+		<method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)V" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/ssl/AllowAllHostnameVerifier" since="1" deprecated="22">
+		<extends name="org/apache/http/conn/ssl/AbstractVerifier" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/ssl/BrowserCompatHostnameVerifier" since="1" deprecated="22">
+		<extends name="org/apache/http/conn/ssl/AbstractVerifier" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/ssl/SSLSocketFactory" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/scheme/LayeredSocketFactory" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;Ljava/security/SecureRandom;Lorg/apache/http/conn/scheme/HostNameResolver;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/security/KeyStore;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/security/KeyStore;Ljava/lang/String;)V" deprecated="29" />
+		<method name="&lt;init&gt;(Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;)V" deprecated="29" />
+		<method name="getHostnameVerifier()Lorg/apache/http/conn/ssl/X509HostnameVerifier;" deprecated="29" />
+		<method name="getSocketFactory()Lorg/apache/http/conn/ssl/SSLSocketFactory;" deprecated="29" />
+		<method name="setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V" deprecated="29" />
+		<field name="ALLOW_ALL_HOSTNAME_VERIFIER" deprecated="29" />
+		<field name="BROWSER_COMPATIBLE_HOSTNAME_VERIFIER" deprecated="29" />
+		<field name="SSL" deprecated="29" />
+		<field name="SSLV2" deprecated="29" />
+		<field name="STRICT_HOSTNAME_VERIFIER" deprecated="29" />
+		<field name="TLS" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/ssl/StrictHostnameVerifier" since="1" deprecated="22">
+		<extends name="org/apache/http/conn/ssl/AbstractVerifier" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/ssl/X509HostnameVerifier" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<implements name="javax/net/ssl/HostnameVerifier" />
+		<method name="verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V" deprecated="29" />
+		<method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V" deprecated="29" />
+		<method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V" deprecated="29" />
+	</class>
+	<class name="org/apache/http/conn/util/InetAddressUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="isIPv4Address(Ljava/lang/String;)Z" />
+		<method name="isIPv6Address(Ljava/lang/String;)Z" />
+		<method name="isIPv6HexCompressedAddress(Ljava/lang/String;)Z" />
+		<method name="isIPv6StdAddress(Ljava/lang/String;)Z" />
+	</class>
+	<class name="org/apache/http/cookie/ClientCookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/Cookie" />
+		<method name="containsAttribute(Ljava/lang/String;)Z" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;" />
+		<field name="COMMENTURL_ATTR" />
+		<field name="COMMENT_ATTR" />
+		<field name="DISCARD_ATTR" />
+		<field name="DOMAIN_ATTR" />
+		<field name="EXPIRES_ATTR" />
+		<field name="MAX_AGE_ATTR" />
+		<field name="PATH_ATTR" />
+		<field name="PORT_ATTR" />
+		<field name="SECURE_ATTR" />
+		<field name="VERSION_ATTR" />
+	</class>
+	<class name="org/apache/http/cookie/Cookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getComment()Ljava/lang/String;" />
+		<method name="getCommentURL()Ljava/lang/String;" />
+		<method name="getDomain()Ljava/lang/String;" />
+		<method name="getExpiryDate()Ljava/util/Date;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getPorts()[I" />
+		<method name="getValue()Ljava/lang/String;" />
+		<method name="getVersion()I" />
+		<method name="isExpired(Ljava/util/Date;)Z" />
+		<method name="isPersistent()Z" />
+		<method name="isSecure()Z" />
+	</class>
+	<class name="org/apache/http/cookie/CookieAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z" />
+		<method name="parse(Lorg/apache/http/cookie/SetCookie;Ljava/lang/String;)V" />
+		<method name="validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V" />
+	</class>
+	<class name="org/apache/http/cookie/CookieIdentityComparator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/Comparator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="compare(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/Cookie;)I" />
+	</class>
+	<class name="org/apache/http/cookie/CookieOrigin" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;ILjava/lang/String;Z)V" />
+		<method name="getHost()Ljava/lang/String;" />
+		<method name="getPath()Ljava/lang/String;" />
+		<method name="getPort()I" />
+		<method name="isSecure()Z" />
+	</class>
+	<class name="org/apache/http/cookie/CookiePathComparator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/util/Comparator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="compare(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/Cookie;)I" />
+	</class>
+	<class name="org/apache/http/cookie/CookieSpec" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="formatCookies(Ljava/util/List;)Ljava/util/List;" />
+		<method name="getVersion()I" />
+		<method name="getVersionHeader()Lorg/apache/http/Header;" />
+		<method name="match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z" />
+		<method name="parse(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;" />
+		<method name="validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V" />
+	</class>
+	<class name="org/apache/http/cookie/CookieSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="newInstance(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;" />
+	</class>
+	<class name="org/apache/http/cookie/CookieSpecRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getCookieSpec(Ljava/lang/String;)Lorg/apache/http/cookie/CookieSpec;" />
+		<method name="getCookieSpec(Ljava/lang/String;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;" />
+		<method name="getSpecNames()Ljava/util/List;" />
+		<method name="register(Ljava/lang/String;Lorg/apache/http/cookie/CookieSpecFactory;)V" />
+		<method name="setItems(Ljava/util/Map;)V" />
+		<method name="unregister(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/cookie/MalformedCookieException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/cookie/SM" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="COOKIE" />
+		<field name="COOKIE2" />
+		<field name="SET_COOKIE" />
+		<field name="SET_COOKIE2" />
+	</class>
+	<class name="org/apache/http/cookie/SetCookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/Cookie" />
+		<method name="setComment(Ljava/lang/String;)V" />
+		<method name="setDomain(Ljava/lang/String;)V" />
+		<method name="setExpiryDate(Ljava/util/Date;)V" />
+		<method name="setPath(Ljava/lang/String;)V" />
+		<method name="setSecure(Z)V" />
+		<method name="setValue(Ljava/lang/String;)V" />
+		<method name="setVersion(I)V" />
+	</class>
+	<class name="org/apache/http/cookie/SetCookie2" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/SetCookie" />
+		<method name="setCommentURL(Ljava/lang/String;)V" />
+		<method name="setDiscard(Z)V" />
+		<method name="setPorts([I)V" />
+	</class>
+	<class name="org/apache/http/cookie/params/CookieSpecPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="DATE_PATTERNS" />
+		<field name="SINGLE_COOKIE_HEADER" />
+	</class>
+	<class name="org/apache/http/cookie/params/CookieSpecParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setDatePatterns(Ljava/util/Collection;)V" />
+		<method name="setSingleHeader(Z)V" />
+	</class>
+	<class name="org/apache/http/entity/AbstractHttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpEntity" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setChunked(Z)V" />
+		<method name="setContentEncoding(Ljava/lang/String;)V" />
+		<method name="setContentEncoding(Lorg/apache/http/Header;)V" />
+		<method name="setContentType(Ljava/lang/String;)V" />
+		<method name="setContentType(Lorg/apache/http/Header;)V" />
+		<field name="chunked" />
+		<field name="contentEncoding" />
+		<field name="contentType" />
+	</class>
+	<class name="org/apache/http/entity/BasicHttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity" />
+		<method name="&lt;init&gt;()V" />
+		<method name="setContent(Ljava/io/InputStream;)V" />
+		<method name="setContentLength(J)V" />
+	</class>
+	<class name="org/apache/http/entity/BufferedHttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/HttpEntityWrapper" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpEntity;)V" />
+	</class>
+	<class name="org/apache/http/entity/ByteArrayEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;([B)V" />
+		<field name="content" />
+	</class>
+	<class name="org/apache/http/entity/ContentLengthStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="determineLength(Lorg/apache/http/HttpMessage;)J" />
+		<field name="CHUNKED" />
+		<field name="IDENTITY" />
+	</class>
+	<class name="org/apache/http/entity/ContentProducer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="writeTo(Ljava/io/OutputStream;)V" />
+	</class>
+	<class name="org/apache/http/entity/EntityTemplate" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity" />
+		<method name="&lt;init&gt;(Lorg/apache/http/entity/ContentProducer;)V" />
+	</class>
+	<class name="org/apache/http/entity/FileEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/io/File;Ljava/lang/String;)V" />
+		<field name="file" />
+	</class>
+	<class name="org/apache/http/entity/HttpEntityWrapper" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpEntity" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpEntity;)V" />
+		<field name="wrappedEntity" />
+	</class>
+	<class name="org/apache/http/entity/InputStreamEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;J)V" />
+	</class>
+	<class name="org/apache/http/entity/SerializableEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity" />
+		<method name="&lt;init&gt;(Ljava/io/Serializable;Z)V" />
+	</class>
+	<class name="org/apache/http/entity/StringEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="content" />
+	</class>
+	<class name="org/apache/http/impl/AbstractHttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpClientConnection" />
+		<method name="&lt;init&gt;()V" />
+		<method name="assertOpen()V" />
+		<method name="createEntityDeserializer()Lorg/apache/http/impl/entity/EntityDeserializer;" />
+		<method name="createEntitySerializer()Lorg/apache/http/impl/entity/EntitySerializer;" />
+		<method name="createHttpResponseFactory()Lorg/apache/http/HttpResponseFactory;" />
+		<method name="createRequestWriter(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageWriter;" />
+		<method name="createResponseParser(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageParser;" />
+		<method name="doFlush()V" />
+		<method name="init(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/AbstractHttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpServerConnection" />
+		<method name="&lt;init&gt;()V" />
+		<method name="assertOpen()V" />
+		<method name="createEntityDeserializer()Lorg/apache/http/impl/entity/EntityDeserializer;" />
+		<method name="createEntitySerializer()Lorg/apache/http/impl/entity/EntitySerializer;" />
+		<method name="createHttpRequestFactory()Lorg/apache/http/HttpRequestFactory;" />
+		<method name="createRequestParser(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpRequestFactory;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageParser;" />
+		<method name="createResponseWriter(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageWriter;" />
+		<method name="doFlush()V" />
+		<method name="init(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/DefaultConnectionReuseStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/ConnectionReuseStrategy" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createTokenIterator(Lorg/apache/http/HeaderIterator;)Lorg/apache/http/TokenIterator;" />
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/SocketHttpClientConnection" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpRequestFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpResponseFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpResponseFactory" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/ReasonPhraseCatalog;)V" />
+		<method name="determineLocale(Lorg/apache/http/protocol/HttpContext;)Ljava/util/Locale;" />
+		<field name="reasonCatalog" />
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/SocketHttpServerConnection" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/EnglishReasonPhraseCatalog" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/ReasonPhraseCatalog" />
+		<method name="&lt;init&gt;()V" />
+		<field name="INSTANCE" />
+	</class>
+	<class name="org/apache/http/impl/HttpConnectionMetricsImpl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpConnectionMetrics" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/HttpTransportMetrics;Lorg/apache/http/io/HttpTransportMetrics;)V" />
+		<method name="incrementRequestCount()V" />
+		<method name="incrementResponseCount()V" />
+		<method name="setMetric(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<field name="RECEIVED_BYTES_COUNT" />
+		<field name="REQUEST_COUNT" />
+		<field name="RESPONSE_COUNT" />
+		<field name="SENT_BYTES_COUNT" />
+	</class>
+	<class name="org/apache/http/impl/NoConnectionReuseStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/ConnectionReuseStrategy" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/SocketHttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/AbstractHttpClientConnection" />
+		<implements name="org/apache/http/HttpInetConnection" />
+		<method name="&lt;init&gt;()V" />
+		<method name="assertNotOpen()V" />
+		<method name="bind(Ljava/net/Socket;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="createSessionInputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;" />
+		<method name="createSessionOutputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;" />
+		<method name="getSocket()Ljava/net/Socket;" />
+	</class>
+	<class name="org/apache/http/impl/SocketHttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/AbstractHttpServerConnection" />
+		<implements name="org/apache/http/HttpInetConnection" />
+		<method name="&lt;init&gt;()V" />
+		<method name="assertNotOpen()V" />
+		<method name="bind(Ljava/net/Socket;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="createHttpDataReceiver(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;" />
+		<method name="createHttpDataTransmitter(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;" />
+		<method name="getSocket()Ljava/net/Socket;" />
+	</class>
+	<class name="org/apache/http/impl/auth/AuthSchemeBase" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/auth/AuthScheme" />
+		<method name="&lt;init&gt;()V" />
+		<method name="isProxy()Z" />
+		<method name="parseChallenge(Lorg/apache/http/util/CharArrayBuffer;II)V" />
+	</class>
+	<class name="org/apache/http/impl/auth/BasicScheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/RFC2617Scheme" />
+		<method name="&lt;init&gt;()V" />
+		<method name="authenticate(Lorg/apache/http/auth/Credentials;Ljava/lang/String;Z)Lorg/apache/http/Header;" />
+	</class>
+	<class name="org/apache/http/impl/auth/BasicSchemeFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/auth/AuthSchemeFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/auth/DigestScheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/RFC2617Scheme" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createCnonce()Ljava/lang/String;" />
+		<method name="overrideParamter(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/impl/auth/DigestSchemeFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/auth/AuthSchemeFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/auth/NTLMEngine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="generateType1Msg(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="generateType3Msg(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/impl/auth/NTLMEngineException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/auth/AuthenticationException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/impl/auth/NTLMScheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/AuthSchemeBase" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/auth/NTLMEngine;)V" />
+	</class>
+	<class name="org/apache/http/impl/auth/RFC2617Scheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/AuthSchemeBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getParameters()Ljava/util/Map;" />
+	</class>
+	<class name="org/apache/http/impl/auth/UnsupportedDigestAlgorithmException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/impl/client/AbstractAuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/AuthenticationHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getAuthPreferences()Ljava/util/List;" />
+		<method name="parseChallenges([Lorg/apache/http/Header;)Ljava/util/Map;" />
+	</class>
+	<class name="org/apache/http/impl/client/AbstractHttpClient" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/HttpClient" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V" />
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V" />
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V" />
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V" />
+		<method name="clearRequestInterceptors()V" />
+		<method name="clearResponseInterceptors()V" />
+		<method name="createAuthSchemeRegistry()Lorg/apache/http/auth/AuthSchemeRegistry;" />
+		<method name="createClientConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;" />
+		<method name="createClientRequestDirector(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/client/RequestDirector;" />
+		<method name="createConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;" />
+		<method name="createConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;" />
+		<method name="createCookieSpecRegistry()Lorg/apache/http/cookie/CookieSpecRegistry;" />
+		<method name="createCookieStore()Lorg/apache/http/client/CookieStore;" />
+		<method name="createCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;" />
+		<method name="createHttpContext()Lorg/apache/http/protocol/HttpContext;" />
+		<method name="createHttpParams()Lorg/apache/http/params/HttpParams;" />
+		<method name="createHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;" />
+		<method name="createHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;" />
+		<method name="createHttpRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;" />
+		<method name="createProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;" />
+		<method name="createRedirectHandler()Lorg/apache/http/client/RedirectHandler;" />
+		<method name="createRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;" />
+		<method name="createTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;" />
+		<method name="createUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;" />
+		<method name="determineParams(Lorg/apache/http/HttpRequest;)Lorg/apache/http/params/HttpParams;" />
+		<method name="getAuthSchemes()Lorg/apache/http/auth/AuthSchemeRegistry;" />
+		<method name="getConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;" />
+		<method name="getConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;" />
+		<method name="getCookieSpecs()Lorg/apache/http/cookie/CookieSpecRegistry;" />
+		<method name="getCookieStore()Lorg/apache/http/client/CookieStore;" />
+		<method name="getCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;" />
+		<method name="getHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;" />
+		<method name="getHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;" />
+		<method name="getProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;" />
+		<method name="getRedirectHandler()Lorg/apache/http/client/RedirectHandler;" />
+		<method name="getRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;" />
+		<method name="getRequestInterceptor(I)Lorg/apache/http/HttpRequestInterceptor;" />
+		<method name="getRequestInterceptorCount()I" />
+		<method name="getResponseInterceptor(I)Lorg/apache/http/HttpResponseInterceptor;" />
+		<method name="getResponseInterceptorCount()I" />
+		<method name="getRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;" />
+		<method name="getTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;" />
+		<method name="getUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;" />
+		<method name="removeRequestInterceptorByClass(Ljava/lang/Class;)V" />
+		<method name="removeResponseInterceptorByClass(Ljava/lang/Class;)V" />
+		<method name="setAuthSchemes(Lorg/apache/http/auth/AuthSchemeRegistry;)V" />
+		<method name="setCookieSpecs(Lorg/apache/http/cookie/CookieSpecRegistry;)V" />
+		<method name="setCookieStore(Lorg/apache/http/client/CookieStore;)V" />
+		<method name="setCredentialsProvider(Lorg/apache/http/client/CredentialsProvider;)V" />
+		<method name="setHttpRequestRetryHandler(Lorg/apache/http/client/HttpRequestRetryHandler;)V" />
+		<method name="setKeepAliveStrategy(Lorg/apache/http/conn/ConnectionKeepAliveStrategy;)V" />
+		<method name="setParams(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setProxyAuthenticationHandler(Lorg/apache/http/client/AuthenticationHandler;)V" />
+		<method name="setRedirectHandler(Lorg/apache/http/client/RedirectHandler;)V" />
+		<method name="setReuseStrategy(Lorg/apache/http/ConnectionReuseStrategy;)V" />
+		<method name="setRoutePlanner(Lorg/apache/http/conn/routing/HttpRoutePlanner;)V" />
+		<method name="setTargetAuthenticationHandler(Lorg/apache/http/client/AuthenticationHandler;)V" />
+		<method name="setUserTokenHandler(Lorg/apache/http/client/UserTokenHandler;)V" />
+	</class>
+	<class name="org/apache/http/impl/client/BasicCookieStore" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/CookieStore" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addCookies([Lorg/apache/http/cookie/Cookie;)V" />
+	</class>
+	<class name="org/apache/http/impl/client/BasicCredentialsProvider" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/CredentialsProvider" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/client/BasicResponseHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/ResponseHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="handleResponse(Lorg/apache/http/HttpResponse;)Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/impl/client/ClientParamsStack" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/AbstractHttpParams" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/client/ClientParamsStack;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/client/ClientParamsStack;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="getApplicationParams()Lorg/apache/http/params/HttpParams;" />
+		<method name="getClientParams()Lorg/apache/http/params/HttpParams;" />
+		<method name="getOverrideParams()Lorg/apache/http/params/HttpParams;" />
+		<method name="getRequestParams()Lorg/apache/http/params/HttpParams;" />
+		<field name="applicationParams" />
+		<field name="clientParams" />
+		<field name="overrideParams" />
+		<field name="requestParams" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/ConnectionKeepAliveStrategy" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultHttpClient" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/AbstractHttpClient" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultHttpRequestRetryHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/HttpRequestRetryHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(IZ)V" />
+		<method name="getRetryCount()I" />
+		<method name="isRequestSentRetryEnabled()Z" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultProxyAuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/AbstractAuthenticationHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultRedirectHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/RedirectHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultRequestDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/RequestDirector" />
+		<method name="&lt;init&gt;(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="createConnectRequest(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpRequest;" />
+		<method name="createTunnelToProxy(Lorg/apache/http/conn/routing/HttpRoute;ILorg/apache/http/protocol/HttpContext;)Z" />
+		<method name="createTunnelToTarget(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)Z" />
+		<method name="determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;" />
+		<method name="establishRoute(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)V" />
+		<method name="handleResponse(Lorg/apache/http/impl/client/RoutedRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/impl/client/RoutedRequest;" />
+		<method name="releaseConnection()V" />
+		<method name="rewriteRequestURI(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V" />
+		<field name="connManager" />
+		<field name="httpProcessor" />
+		<field name="keepAliveStrategy" />
+		<field name="managedConn" />
+		<field name="params" />
+		<field name="redirectHandler" />
+		<field name="requestExec" />
+		<field name="retryHandler" />
+		<field name="reuseStrategy" />
+		<field name="routePlanner" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultTargetAuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/AbstractAuthenticationHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/client/DefaultUserTokenHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/client/UserTokenHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/client/EntityEnclosingRequestWrapper" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/RequestWrapper" />
+		<implements name="org/apache/http/HttpEntityEnclosingRequest" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpEntityEnclosingRequest;)V" />
+	</class>
+	<class name="org/apache/http/impl/client/RedirectLocations" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(Ljava/net/URI;)V" />
+		<method name="contains(Ljava/net/URI;)Z" />
+		<method name="remove(Ljava/net/URI;)Z" />
+	</class>
+	<class name="org/apache/http/impl/client/RequestWrapper" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage" />
+		<implements name="org/apache/http/client/methods/HttpUriRequest" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HttpRequest;)V" />
+		<method name="getExecCount()I" />
+		<method name="getOriginal()Lorg/apache/http/HttpRequest;" />
+		<method name="incrementExecCount()V" />
+		<method name="isRepeatable()Z" />
+		<method name="resetHeaders()V" />
+		<method name="setMethod(Ljava/lang/String;)V" />
+		<method name="setProtocolVersion(Lorg/apache/http/ProtocolVersion;)V" />
+		<method name="setURI(Ljava/net/URI;)V" />
+	</class>
+	<class name="org/apache/http/impl/client/RoutedRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V" />
+		<method name="getRequest()Lorg/apache/http/impl/client/RequestWrapper;" />
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;" />
+		<field name="request" />
+		<field name="route" />
+	</class>
+	<class name="org/apache/http/impl/client/TunnelRefusedException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/HttpException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Lorg/apache/http/HttpResponse;)V" />
+		<method name="getResponse()Lorg/apache/http/HttpResponse;" />
+	</class>
+	<class name="org/apache/http/impl/conn/AbstractClientConnAdapter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/ManagedClientConnection" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/conn/OperatedClientConnection;)V" />
+		<method name="assertNotAborted()V" />
+		<method name="assertValid(Lorg/apache/http/conn/OperatedClientConnection;)V" />
+		<method name="detach()V" />
+		<method name="getManager()Lorg/apache/http/conn/ClientConnectionManager;" />
+		<method name="getWrappedConnection()Lorg/apache/http/conn/OperatedClientConnection;" />
+	</class>
+	<class name="org/apache/http/impl/conn/AbstractPoolEntry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;)V" />
+		<method name="getState()Ljava/lang/Object;" />
+		<method name="layerProtocol(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setState(Ljava/lang/Object;)V" />
+		<method name="shutdownEntry()V" />
+		<method name="tunnelProxy(Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V" />
+		<method name="tunnelTarget(ZLorg/apache/http/params/HttpParams;)V" />
+		<field name="connOperator" />
+		<field name="connection" />
+		<field name="route" />
+		<field name="state" />
+		<field name="tracker" />
+	</class>
+	<class name="org/apache/http/impl/conn/AbstractPooledConnAdapter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractClientConnAdapter" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V" />
+		<method name="assertAttached()V" />
+		<field name="poolEntry" />
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/SocketHttpClientConnection" />
+		<implements name="org/apache/http/conn/OperatedClientConnection" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultClientConnectionOperator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/ClientConnectionOperator" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/scheme/SchemeRegistry;)V" />
+		<method name="prepareSocket(Ljava/net/Socket;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V" />
+		<field name="schemeRegistry" />
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultHttpRoutePlanner" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/routing/HttpRoutePlanner" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/scheme/SchemeRegistry;)V" />
+		<field name="schemeRegistry" />
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultResponseParser" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageParser" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/conn/IdleConnectionHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="add(Lorg/apache/http/HttpConnection;JLjava/util/concurrent/TimeUnit;)V" />
+		<method name="closeExpiredConnections()V" />
+		<method name="closeIdleConnections(J)V" />
+		<method name="remove(Lorg/apache/http/HttpConnection;)Z" />
+		<method name="removeAll()V" />
+	</class>
+	<class name="org/apache/http/impl/conn/LoggingSessionInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/io/SessionInputBuffer" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/impl/conn/Wire;)V" />
+	</class>
+	<class name="org/apache/http/impl/conn/LoggingSessionOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/io/SessionOutputBuffer" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/impl/conn/Wire;)V" />
+	</class>
+	<class name="org/apache/http/impl/conn/ProxySelectorRoutePlanner" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/routing/HttpRoutePlanner" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/scheme/SchemeRegistry;Ljava/net/ProxySelector;)V" />
+		<method name="chooseProxy(Ljava/util/List;Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Ljava/net/Proxy;" />
+		<method name="determineProxy(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpHost;" />
+		<method name="getHost(Ljava/net/InetSocketAddress;)Ljava/lang/String;" />
+		<method name="getProxySelector()Ljava/net/ProxySelector;" />
+		<method name="setProxySelector(Ljava/net/ProxySelector;)V" />
+		<field name="proxySelector" />
+		<field name="schemeRegistry" />
+	</class>
+	<class name="org/apache/http/impl/conn/SingleClientConnManager" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/ClientConnectionManager" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)V" />
+		<method name="assertStillUp()V" />
+		<method name="createConnectionOperator(Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionOperator;" />
+		<method name="getConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ManagedClientConnection;" />
+		<method name="revokeConnection()V" />
+		<field name="MISUSE_MESSAGE" />
+		<field name="alwaysShutDown" />
+		<field name="connOperator" />
+		<field name="connectionExpiresTime" />
+		<field name="isShutDown" />
+		<field name="lastReleaseTime" />
+		<field name="managedConn" />
+		<field name="schemeRegistry" />
+		<field name="uniquePoolEntry" />
+	</class>
+	<class name="org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter" since="1" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPooledConnAdapter" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/conn/SingleClientConnManager;Lorg/apache/http/impl/conn/SingleClientConnManager$PoolEntry;Lorg/apache/http/conn/routing/HttpRoute;)V" />
+	</class>
+	<class name="org/apache/http/impl/conn/SingleClientConnManager$PoolEntry" since="1" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPoolEntry" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/conn/SingleClientConnManager;)V" />
+		<method name="close()V" />
+		<method name="shutdown()V" />
+	</class>
+	<class name="org/apache/http/impl/conn/Wire" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/commons/logging/Log;)V" />
+		<method name="enabled()Z" />
+		<method name="input(I)V" />
+		<method name="input(Ljava/io/InputStream;)V" />
+		<method name="input(Ljava/lang/String;)V" />
+		<method name="input([B)V" />
+		<method name="input([BII)V" />
+		<method name="output(I)V" />
+		<method name="output(Ljava/io/InputStream;)V" />
+		<method name="output(Ljava/lang/String;)V" />
+		<method name="output([B)V" />
+		<method name="output([BII)V" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/AbstractConnPool" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/impl/conn/tsccm/RefQueueHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="closeConnection(Lorg/apache/http/conn/OperatedClientConnection;)V" />
+		<method name="closeExpiredConnections()V" />
+		<method name="closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V" />
+		<method name="deleteClosedConnections()V" />
+		<method name="enableConnectionGC()V" />
+		<method name="freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;ZJLjava/util/concurrent/TimeUnit;)V" />
+		<method name="getEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;" />
+		<method name="handleLostEntry(Lorg/apache/http/conn/routing/HttpRoute;)V" />
+		<method name="requestPoolEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/PoolEntryRequest;" />
+		<method name="shutdown()V" />
+		<field name="idleConnHandler" />
+		<field name="isShutDown" />
+		<field name="issuedConnections" />
+		<field name="numConnections" />
+		<field name="poolLock" />
+		<field name="refQueue" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/BasicPoolEntry" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPoolEntry" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/ref/ReferenceQueue;)V" />
+		<method name="getConnection()Lorg/apache/http/conn/OperatedClientConnection;" />
+		<method name="getPlannedRoute()Lorg/apache/http/conn/routing/HttpRoute;" />
+		<method name="getWeakRef()Lorg/apache/http/impl/conn/tsccm/BasicPoolEntryRef;" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/BasicPoolEntryRef" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/ref/WeakReference" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;Ljava/lang/ref/ReferenceQueue;)V" />
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPooledConnAdapter" />
+		<method name="&lt;init&gt;(Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V" />
+		<method name="getPoolEntry()Lorg/apache/http/impl/conn/AbstractPoolEntry;" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/ConnPoolByRoute" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/tsccm/AbstractConnPool" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="createEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Lorg/apache/http/conn/ClientConnectionOperator;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;" />
+		<method name="createFreeConnQueue()Ljava/util/Queue;" />
+		<method name="createRouteToPoolMap()Ljava/util/Map;" />
+		<method name="createWaitingThreadQueue()Ljava/util/Queue;" />
+		<method name="deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V" />
+		<method name="deleteLeastUsedEntry()V" />
+		<method name="getConnectionsInPool(Lorg/apache/http/conn/routing/HttpRoute;)I" />
+		<method name="getEntryBlocking(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;" />
+		<method name="getFreeEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;" />
+		<method name="getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;" />
+		<method name="newRouteSpecificPool(Lorg/apache/http/conn/routing/HttpRoute;)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;" />
+		<method name="newWaitingThread(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)Lorg/apache/http/impl/conn/tsccm/WaitingThread;" />
+		<method name="notifyWaitingThread(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V" />
+		<field name="freeConnections" />
+		<field name="maxTotalConnections" />
+		<field name="operator" />
+		<field name="routeToPool" />
+		<field name="waitingThreads" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/PoolEntryRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="abortRequest()V" />
+		<method name="getPoolEntry(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/RefQueueHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="handleReference(Ljava/lang/ref/Reference;)V" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/RefQueueWorker" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Runnable" />
+		<method name="&lt;init&gt;(Ljava/lang/ref/ReferenceQueue;Lorg/apache/http/impl/conn/tsccm/RefQueueHandler;)V" />
+		<method name="shutdown()V" />
+		<field name="refHandler" />
+		<field name="refQueue" />
+		<field name="workerThread" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/RouteSpecificPool" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/http/conn/routing/HttpRoute;I)V" />
+		<method name="allocEntry(Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;" />
+		<method name="createdEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V" />
+		<method name="deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)Z" />
+		<method name="dropEntry()V" />
+		<method name="freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V" />
+		<method name="getCapacity()I" />
+		<method name="getEntryCount()I" />
+		<method name="getMaxEntries()I" />
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;" />
+		<method name="hasThread()Z" />
+		<method name="isUnused()Z" />
+		<method name="nextThread()Lorg/apache/http/impl/conn/tsccm/WaitingThread;" />
+		<method name="queueThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V" />
+		<method name="removeThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V" />
+		<field name="freeEntries" />
+		<field name="maxEntries" />
+		<field name="numEntries" />
+		<field name="route" />
+		<field name="waitingThreads" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/conn/ClientConnectionManager" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)V" />
+		<method name="createConnectionOperator(Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionOperator;" />
+		<method name="createConnectionPool(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;" />
+		<method name="getConnectionsInPool()I" />
+		<method name="getConnectionsInPool(Lorg/apache/http/conn/routing/HttpRoute;)I" />
+		<field name="connOperator" />
+		<field name="connectionPool" />
+		<field name="schemeRegistry" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/WaitingThread" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V" />
+		<method name="await(Ljava/util/Date;)Z" />
+		<method name="getCondition()Ljava/util/concurrent/locks/Condition;" />
+		<method name="getPool()Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;" />
+		<method name="getThread()Ljava/lang/Thread;" />
+		<method name="interrupt()V" />
+		<method name="wakeup()V" />
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/WaitingThreadAborter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="abort()V" />
+		<method name="setWaitingThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/AbstractCookieSpec" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieSpec" />
+		<method name="&lt;init&gt;()V" />
+		<method name="findAttribHandler(Ljava/lang/String;)Lorg/apache/http/cookie/CookieAttributeHandler;" />
+		<method name="getAttribHandler(Ljava/lang/String;)Lorg/apache/http/cookie/CookieAttributeHandler;" />
+		<method name="getAttribHandlers()Ljava/util/Collection;" />
+		<method name="registerAttribHandler(Ljava/lang/String;Lorg/apache/http/cookie/CookieAttributeHandler;)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicClientCookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/cookie/ClientCookie" />
+		<implements name="org/apache/http/cookie/SetCookie" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicClientCookie2" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/BasicClientCookie" />
+		<implements name="org/apache/http/cookie/SetCookie2" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicCommentHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicDomainHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicExpiresHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" />
+		<method name="&lt;init&gt;([Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicMaxAgeHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicPathHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicSecureHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BestMatchSpec" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieSpec" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;Z)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BestMatchSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieSpecFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BrowserCompatSpec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/CookieSpecBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;)V" />
+		<field name="DATE_PATTERNS" />
+	</class>
+	<class name="org/apache/http/impl/cookie/BrowserCompatSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieSpecFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/CookieSpecBase" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieSpec" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getDefaultDomain(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;" />
+		<method name="getDefaultPath(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;" />
+		<method name="parse([Lorg/apache/http/HeaderElement;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;" />
+	</class>
+	<class name="org/apache/http/impl/cookie/DateParseException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/DateUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="formatDate(Ljava/util/Date;)Ljava/lang/String;" />
+		<method name="formatDate(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="parseDate(Ljava/lang/String;)Ljava/util/Date;" />
+		<method name="parseDate(Ljava/lang/String;[Ljava/lang/String;)Ljava/util/Date;" />
+		<method name="parseDate(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date;" />
+		<field name="GMT" />
+		<field name="PATTERN_ASCTIME" />
+		<field name="PATTERN_RFC1036" />
+		<field name="PATTERN_RFC1123" />
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDomainHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/BasicDomainHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDraftHeaderParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="parseHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;" />
+		<field name="DEFAULT" />
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDraftSpec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/CookieSpecBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;)V" />
+		<field name="EXPIRES_PATTERN" />
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDraftSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieSpecFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109DomainHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109Spec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/CookieSpecBase" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;Z)V" />
+		<method name="formatCookieAsVer(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/cookie/Cookie;I)V" />
+		<method name="formatParamAsVer(Lorg/apache/http/util/CharArrayBuffer;Ljava/lang/String;Ljava/lang/String;I)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109SpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieSpecFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109VersionHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965DomainAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+		<method name="domainMatch(Ljava/lang/String;Ljava/lang/String;)Z" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965PortAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965Spec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/RFC2109Spec" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;([Ljava/lang/String;Z)V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965SpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieSpecFactory" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965VersionAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/cookie/CookieAttributeHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/entity/EntityDeserializer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/http/entity/ContentLengthStrategy;)V" />
+		<method name="deserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/HttpEntity;" />
+		<method name="doDeserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/entity/BasicHttpEntity;" />
+	</class>
+	<class name="org/apache/http/impl/entity/EntitySerializer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/http/entity/ContentLengthStrategy;)V" />
+		<method name="doSerialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;)Ljava/io/OutputStream;" />
+		<method name="serialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;Lorg/apache/http/HttpEntity;)V" />
+	</class>
+	<class name="org/apache/http/impl/entity/LaxContentLengthStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/entity/ContentLengthStrategy" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/entity/StrictContentLengthStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/entity/ContentLengthStrategy" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/impl/io/AbstractMessageParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/io/HttpMessageParser" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="parseHead(Lorg/apache/http/io/SessionInputBuffer;)Lorg/apache/http/HttpMessage;" />
+		<method name="parseHeaders(Lorg/apache/http/io/SessionInputBuffer;IILorg/apache/http/message/LineParser;)[Lorg/apache/http/Header;" />
+		<field name="lineParser" />
+	</class>
+	<class name="org/apache/http/impl/io/AbstractMessageWriter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/io/HttpMessageWriter" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="writeHeadLine(Lorg/apache/http/HttpMessage;)V" />
+		<field name="lineBuf" />
+		<field name="lineFormatter" />
+		<field name="sessionBuffer" />
+	</class>
+	<class name="org/apache/http/impl/io/AbstractSessionInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/io/SessionInputBuffer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="fillBuffer()I" />
+		<method name="hasBufferedData()Z" />
+		<method name="init(Ljava/io/InputStream;ILorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/AbstractSessionOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/io/SessionOutputBuffer" />
+		<method name="&lt;init&gt;()V" />
+		<method name="flushBuffer()V" />
+		<method name="init(Ljava/io/OutputStream;ILorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/ChunkedInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;)V" />
+		<method name="getFooters()[Lorg/apache/http/Header;" />
+	</class>
+	<class name="org/apache/http/impl/io/ChunkedOutputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/OutputStream" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;I)V" />
+		<method name="finish()V" />
+		<method name="flushCache()V" />
+		<method name="flushCacheWithAppend([BII)V" />
+		<method name="writeClosingChunk()V" />
+	</class>
+	<class name="org/apache/http/impl/io/ContentLengthInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;J)V" />
+	</class>
+	<class name="org/apache/http/impl/io/ContentLengthOutputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/OutputStream" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;J)V" />
+	</class>
+	<class name="org/apache/http/impl/io/HttpRequestParser" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageParser" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpRequestFactory;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/HttpRequestWriter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageWriter" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/HttpResponseParser" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageParser" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/HttpResponseWriter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageWriter" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/HttpTransportMetricsImpl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/io/HttpTransportMetrics" />
+		<method name="&lt;init&gt;()V" />
+		<method name="incrementBytesTransferred(J)V" />
+		<method name="setBytesTransferred(J)V" />
+	</class>
+	<class name="org/apache/http/impl/io/IdentityInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionInputBuffer;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/IdentityOutputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/OutputStream" />
+		<method name="&lt;init&gt;(Lorg/apache/http/io/SessionOutputBuffer;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/SocketInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractSessionInputBuffer" />
+		<method name="&lt;init&gt;(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/impl/io/SocketOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractSessionOutputBuffer" />
+		<method name="&lt;init&gt;(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V" />
+	</class>
+	<class name="org/apache/http/io/HttpMessageParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="parse()Lorg/apache/http/HttpMessage;" />
+	</class>
+	<class name="org/apache/http/io/HttpMessageWriter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="write(Lorg/apache/http/HttpMessage;)V" />
+	</class>
+	<class name="org/apache/http/io/HttpTransportMetrics" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getBytesTransferred()J" />
+		<method name="reset()V" />
+	</class>
+	<class name="org/apache/http/io/SessionInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getMetrics()Lorg/apache/http/io/HttpTransportMetrics;" />
+		<method name="isDataAvailable(I)Z" />
+		<method name="read()I" />
+		<method name="read([B)I" />
+		<method name="read([BII)I" />
+		<method name="readLine()Ljava/lang/String;" />
+		<method name="readLine(Lorg/apache/http/util/CharArrayBuffer;)I" />
+	</class>
+	<class name="org/apache/http/io/SessionOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="flush()V" />
+		<method name="getMetrics()Lorg/apache/http/io/HttpTransportMetrics;" />
+		<method name="write(I)V" />
+		<method name="write([B)V" />
+		<method name="write([BII)V" />
+		<method name="writeLine(Ljava/lang/String;)V" />
+		<method name="writeLine(Lorg/apache/http/util/CharArrayBuffer;)V" />
+	</class>
+	<class name="org/apache/http/message/AbstractHttpMessage" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpMessage" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<field name="headergroup" />
+		<field name="params" />
+	</class>
+	<class name="org/apache/http/message/BasicHeader" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/Header" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicHeaderElement" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/HeaderElement" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicHeaderElementIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HeaderElementIterator" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HeaderIterator;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HeaderIterator;Lorg/apache/http/message/HeaderValueParser;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicHeaderIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HeaderIterator" />
+		<method name="&lt;init&gt;([Lorg/apache/http/Header;Ljava/lang/String;)V" />
+		<method name="filterHeader(I)Z" />
+		<method name="findNext(I)I" />
+		<field name="allHeaders" />
+		<field name="currentIndex" />
+		<field name="headerName" />
+	</class>
+	<class name="org/apache/http/message/BasicHeaderValueFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/message/HeaderValueFormatter" />
+		<method name="&lt;init&gt;()V" />
+		<method name="doFormatValue(Lorg/apache/http/util/CharArrayBuffer;Ljava/lang/String;Z)V" />
+		<method name="estimateElementsLen([Lorg/apache/http/HeaderElement;)I" />
+		<method name="estimateHeaderElementLen(Lorg/apache/http/HeaderElement;)I" />
+		<method name="estimateNameValuePairLen(Lorg/apache/http/NameValuePair;)I" />
+		<method name="estimateParametersLen([Lorg/apache/http/NameValuePair;)I" />
+		<method name="formatElements([Lorg/apache/http/HeaderElement;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;" />
+		<method name="formatHeaderElement(Lorg/apache/http/HeaderElement;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;" />
+		<method name="formatNameValuePair(Lorg/apache/http/NameValuePair;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;" />
+		<method name="formatParameters([Lorg/apache/http/NameValuePair;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;" />
+		<method name="isSeparator(C)Z" />
+		<method name="isUnsafe(C)Z" />
+		<field name="DEFAULT" />
+		<field name="SEPARATORS" />
+		<field name="UNSAFE_CHARS" />
+	</class>
+	<class name="org/apache/http/message/BasicHeaderValueParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/message/HeaderValueParser" />
+		<method name="&lt;init&gt;()V" />
+		<method name="createHeaderElement(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)Lorg/apache/http/HeaderElement;" />
+		<method name="createNameValuePair(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/NameValuePair;" />
+		<method name="parseElements(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)[Lorg/apache/http/HeaderElement;" />
+		<method name="parseHeaderElement(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)Lorg/apache/http/HeaderElement;" />
+		<method name="parseNameValuePair(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)Lorg/apache/http/NameValuePair;" />
+		<method name="parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;[C)Lorg/apache/http/NameValuePair;" />
+		<method name="parseParameters(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)[Lorg/apache/http/NameValuePair;" />
+		<field name="DEFAULT" />
+	</class>
+	<class name="org/apache/http/message/BasicHttpEntityEnclosingRequest" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/BasicHttpRequest" />
+		<implements name="org/apache/http/HttpEntityEnclosingRequest" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/RequestLine;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicHttpRequest" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage" />
+		<implements name="org/apache/http/HttpRequest" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/RequestLine;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicHttpResponse" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage" />
+		<implements name="org/apache/http/HttpResponse" />
+		<method name="&lt;init&gt;(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/StatusLine;)V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/StatusLine;Lorg/apache/http/ReasonPhraseCatalog;Ljava/util/Locale;)V" />
+		<method name="getReason(I)Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/message/BasicLineFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/message/LineFormatter" />
+		<method name="&lt;init&gt;()V" />
+		<method name="doFormatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)V" />
+		<method name="doFormatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)V" />
+		<method name="doFormatStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/StatusLine;)V" />
+		<method name="estimateProtocolVersionLen(Lorg/apache/http/ProtocolVersion;)I" />
+		<method name="formatHeader(Lorg/apache/http/Header;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;" />
+		<method name="formatProtocolVersion(Lorg/apache/http/ProtocolVersion;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;" />
+		<method name="formatRequestLine(Lorg/apache/http/RequestLine;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;" />
+		<method name="formatStatusLine(Lorg/apache/http/StatusLine;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;" />
+		<method name="initBuffer(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/util/CharArrayBuffer;" />
+		<field name="DEFAULT" />
+	</class>
+	<class name="org/apache/http/message/BasicLineParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/message/LineParser" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/ProtocolVersion;)V" />
+		<method name="createProtocolVersion(II)Lorg/apache/http/ProtocolVersion;" />
+		<method name="createRequestLine(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/RequestLine;" />
+		<method name="createStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)Lorg/apache/http/StatusLine;" />
+		<method name="parseHeader(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/Header;" />
+		<method name="parseProtocolVersion(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/ProtocolVersion;" />
+		<method name="parseRequestLine(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/RequestLine;" />
+		<method name="parseStatusLine(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/StatusLine;" />
+		<method name="skipWhitespace(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)V" />
+		<field name="DEFAULT" />
+		<field name="protocol" />
+	</class>
+	<class name="org/apache/http/message/BasicListHeaderIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HeaderIterator" />
+		<method name="&lt;init&gt;(Ljava/util/List;Ljava/lang/String;)V" />
+		<method name="filterHeader(I)Z" />
+		<method name="findNext(I)I" />
+		<field name="allHeaders" />
+		<field name="currentIndex" />
+		<field name="headerName" />
+		<field name="lastIndex" />
+	</class>
+	<class name="org/apache/http/message/BasicNameValuePair" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/NameValuePair" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicRequestLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/RequestLine" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicStatusLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/StatusLine" />
+		<method name="&lt;init&gt;(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/message/BasicTokenIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/TokenIterator" />
+		<method name="&lt;init&gt;(Lorg/apache/http/HeaderIterator;)V" />
+		<method name="createToken(Ljava/lang/String;II)Ljava/lang/String;" />
+		<method name="findNext(I)I" />
+		<method name="findTokenEnd(I)I" />
+		<method name="findTokenSeparator(I)I" />
+		<method name="findTokenStart(I)I" />
+		<method name="isHttpSeparator(C)Z" />
+		<method name="isTokenChar(C)Z" />
+		<method name="isTokenSeparator(C)Z" />
+		<method name="isWhitespace(C)Z" />
+		<field name="HTTP_SEPARATORS" />
+		<field name="currentHeader" />
+		<field name="currentToken" />
+		<field name="headerIt" />
+		<field name="searchPos" />
+	</class>
+	<class name="org/apache/http/message/BufferedHeader" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/FormattedHeader" />
+		<method name="&lt;init&gt;(Lorg/apache/http/util/CharArrayBuffer;)V" />
+	</class>
+	<class name="org/apache/http/message/HeaderGroup" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addHeader(Lorg/apache/http/Header;)V" />
+		<method name="clear()V" />
+		<method name="containsHeader(Ljava/lang/String;)Z" />
+		<method name="copy()Lorg/apache/http/message/HeaderGroup;" />
+		<method name="getAllHeaders()[Lorg/apache/http/Header;" />
+		<method name="getCondensedHeader(Ljava/lang/String;)Lorg/apache/http/Header;" />
+		<method name="getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;" />
+		<method name="getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;" />
+		<method name="getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;" />
+		<method name="iterator()Lorg/apache/http/HeaderIterator;" />
+		<method name="iterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;" />
+		<method name="removeHeader(Lorg/apache/http/Header;)V" />
+		<method name="setHeaders([Lorg/apache/http/Header;)V" />
+		<method name="updateHeader(Lorg/apache/http/Header;)V" />
+	</class>
+	<class name="org/apache/http/message/HeaderValueFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="formatElements(Lorg/apache/http/util/CharArrayBuffer;[Lorg/apache/http/HeaderElement;Z)Lorg/apache/http/util/CharArrayBuffer;" />
+		<method name="formatHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/HeaderElement;Z)Lorg/apache/http/util/CharArrayBuffer;" />
+		<method name="formatNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/NameValuePair;Z)Lorg/apache/http/util/CharArrayBuffer;" />
+		<method name="formatParameters(Lorg/apache/http/util/CharArrayBuffer;[Lorg/apache/http/NameValuePair;Z)Lorg/apache/http/util/CharArrayBuffer;" />
+	</class>
+	<class name="org/apache/http/message/HeaderValueParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="parseElements(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/HeaderElement;" />
+		<method name="parseHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;" />
+		<method name="parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/NameValuePair;" />
+		<method name="parseParameters(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/NameValuePair;" />
+	</class>
+	<class name="org/apache/http/message/LineFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="appendProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/util/CharArrayBuffer;" />
+		<method name="formatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)Lorg/apache/http/util/CharArrayBuffer;" />
+		<method name="formatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)Lorg/apache/http/util/CharArrayBuffer;" />
+		<method name="formatStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/StatusLine;)Lorg/apache/http/util/CharArrayBuffer;" />
+	</class>
+	<class name="org/apache/http/message/LineParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="hasProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Z" />
+		<method name="parseHeader(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/Header;" />
+		<method name="parseProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/ProtocolVersion;" />
+		<method name="parseRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/RequestLine;" />
+		<method name="parseStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/StatusLine;" />
+	</class>
+	<class name="org/apache/http/message/ParserCursor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(II)V" />
+		<method name="atEnd()Z" />
+		<method name="getLowerBound()I" />
+		<method name="getPos()I" />
+		<method name="getUpperBound()I" />
+		<method name="updatePos(I)V" />
+	</class>
+	<class name="org/apache/http/params/AbstractHttpParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/params/HttpParams" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/params/BasicHttpParams" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/AbstractHttpParams" />
+		<implements name="java/io/Serializable" />
+		<implements name="java/lang/Cloneable" />
+		<method name="&lt;init&gt;()V" />
+		<method name="clear()V" />
+		<method name="copyParams(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="isParameterSet(Ljava/lang/String;)Z" />
+		<method name="isParameterSetLocally(Ljava/lang/String;)Z" />
+		<method name="setParameters([Ljava/lang/String;Ljava/lang/Object;)V" />
+	</class>
+	<class name="org/apache/http/params/CoreConnectionPNames" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<field name="CONNECTION_TIMEOUT" deprecated="29" />
+		<field name="MAX_HEADER_COUNT" deprecated="29" />
+		<field name="MAX_LINE_LENGTH" deprecated="29" />
+		<field name="SOCKET_BUFFER_SIZE" deprecated="29" />
+		<field name="SO_LINGER" deprecated="29" />
+		<field name="SO_TIMEOUT" deprecated="29" />
+		<field name="STALE_CONNECTION_CHECK" deprecated="29" />
+		<field name="TCP_NODELAY" deprecated="29" />
+	</class>
+	<class name="org/apache/http/params/CoreProtocolPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="HTTP_CONTENT_CHARSET" />
+		<field name="HTTP_ELEMENT_CHARSET" />
+		<field name="ORIGIN_SERVER" />
+		<field name="PROTOCOL_VERSION" />
+		<field name="STRICT_TRANSFER_ENCODING" />
+		<field name="USER_AGENT" />
+		<field name="USE_EXPECT_CONTINUE" />
+		<field name="WAIT_FOR_CONTINUE" />
+	</class>
+	<class name="org/apache/http/params/DefaultedHttpParams" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/AbstractHttpParams" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V" />
+		<method name="getDefaults()Lorg/apache/http/params/HttpParams;" />
+	</class>
+	<class name="org/apache/http/params/HttpAbstractParamBean" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<field name="params" />
+	</class>
+	<class name="org/apache/http/params/HttpConnectionParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setConnectionTimeout(I)V" />
+		<method name="setLinger(I)V" />
+		<method name="setSoTimeout(I)V" />
+		<method name="setSocketBufferSize(I)V" />
+		<method name="setStaleCheckingEnabled(Z)V" />
+		<method name="setTcpNoDelay(Z)V" />
+	</class>
+	<class name="org/apache/http/params/HttpConnectionParams" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/params/CoreConnectionPNames" />
+		<method name="getConnectionTimeout(Lorg/apache/http/params/HttpParams;)I" deprecated="29" />
+		<method name="getLinger(Lorg/apache/http/params/HttpParams;)I" deprecated="29" />
+		<method name="getSoTimeout(Lorg/apache/http/params/HttpParams;)I" deprecated="29" />
+		<method name="getSocketBufferSize(Lorg/apache/http/params/HttpParams;)I" deprecated="29" />
+		<method name="getTcpNoDelay(Lorg/apache/http/params/HttpParams;)Z" deprecated="29" />
+		<method name="isStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;)Z" deprecated="29" />
+		<method name="setConnectionTimeout(Lorg/apache/http/params/HttpParams;I)V" deprecated="29" />
+		<method name="setLinger(Lorg/apache/http/params/HttpParams;I)V" deprecated="29" />
+		<method name="setSoTimeout(Lorg/apache/http/params/HttpParams;I)V" deprecated="29" />
+		<method name="setSocketBufferSize(Lorg/apache/http/params/HttpParams;I)V" deprecated="29" />
+		<method name="setStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;Z)V" deprecated="29" />
+		<method name="setTcpNoDelay(Lorg/apache/http/params/HttpParams;Z)V" deprecated="29" />
+	</class>
+	<class name="org/apache/http/params/HttpParams" since="1" deprecated="22">
+		<extends name="java/lang/Object" />
+		<method name="copy()Lorg/apache/http/params/HttpParams;" deprecated="29" />
+		<method name="getBooleanParameter(Ljava/lang/String;Z)Z" deprecated="29" />
+		<method name="getDoubleParameter(Ljava/lang/String;D)D" deprecated="29" />
+		<method name="getIntParameter(Ljava/lang/String;I)I" deprecated="29" />
+		<method name="getLongParameter(Ljava/lang/String;J)J" deprecated="29" />
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="29" />
+		<method name="isParameterFalse(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="isParameterTrue(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="removeParameter(Ljava/lang/String;)Z" deprecated="29" />
+		<method name="setBooleanParameter(Ljava/lang/String;Z)Lorg/apache/http/params/HttpParams;" deprecated="29" />
+		<method name="setDoubleParameter(Ljava/lang/String;D)Lorg/apache/http/params/HttpParams;" deprecated="29" />
+		<method name="setIntParameter(Ljava/lang/String;I)Lorg/apache/http/params/HttpParams;" deprecated="29" />
+		<method name="setLongParameter(Ljava/lang/String;J)Lorg/apache/http/params/HttpParams;" deprecated="29" />
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/http/params/HttpParams;" deprecated="29" />
+	</class>
+	<class name="org/apache/http/params/HttpProtocolParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean" />
+		<method name="&lt;init&gt;(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setContentCharset(Ljava/lang/String;)V" />
+		<method name="setHttpElementCharset(Ljava/lang/String;)V" />
+		<method name="setUseExpectContinue(Z)V" />
+		<method name="setUserAgent(Ljava/lang/String;)V" />
+		<method name="setVersion(Lorg/apache/http/HttpVersion;)V" />
+	</class>
+	<class name="org/apache/http/params/HttpProtocolParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/params/CoreProtocolPNames" />
+		<method name="getContentCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;" />
+		<method name="getHttpElementCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;" />
+		<method name="getUserAgent(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;" />
+		<method name="getVersion(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/ProtocolVersion;" />
+		<method name="setContentCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V" />
+		<method name="setHttpElementCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V" />
+		<method name="setUseExpectContinue(Lorg/apache/http/params/HttpParams;Z)V" />
+		<method name="setUserAgent(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V" />
+		<method name="setVersion(Lorg/apache/http/params/HttpParams;Lorg/apache/http/ProtocolVersion;)V" />
+		<method name="useExpectContinue(Lorg/apache/http/params/HttpParams;)Z" />
+	</class>
+	<class name="org/apache/http/protocol/BasicHttpContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/protocol/HttpContext" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/apache/http/protocol/HttpContext;)V" />
+	</class>
+	<class name="org/apache/http/protocol/BasicHttpProcessor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="java/lang/Cloneable" />
+		<implements name="org/apache/http/protocol/HttpProcessor" />
+		<implements name="org/apache/http/protocol/HttpRequestInterceptorList" />
+		<implements name="org/apache/http/protocol/HttpResponseInterceptorList" />
+		<method name="&lt;init&gt;()V" />
+		<method name="addInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V" />
+		<method name="addInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V" />
+		<method name="addInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V" />
+		<method name="addInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V" />
+		<method name="clearInterceptors()V" />
+		<method name="copy()Lorg/apache/http/protocol/BasicHttpProcessor;" />
+		<method name="copyInterceptors(Lorg/apache/http/protocol/BasicHttpProcessor;)V" />
+		<field name="requestInterceptors" />
+		<field name="responseInterceptors" />
+	</class>
+	<class name="org/apache/http/protocol/DefaultedHttpContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/protocol/HttpContext" />
+		<method name="&lt;init&gt;(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/protocol/HttpContext;)V" />
+		<method name="getDefaults()Lorg/apache/http/protocol/HttpContext;" />
+	</class>
+	<class name="org/apache/http/protocol/ExecutionContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<field name="HTTP_CONNECTION" />
+		<field name="HTTP_PROXY_HOST" />
+		<field name="HTTP_REQUEST" />
+		<field name="HTTP_REQ_SENT" />
+		<field name="HTTP_RESPONSE" />
+		<field name="HTTP_TARGET_HOST" />
+	</class>
+	<class name="org/apache/http/protocol/HTTP" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="isWhitespace(C)Z" />
+		<field name="ASCII" />
+		<field name="CHARSET_PARAM" />
+		<field name="CHUNK_CODING" />
+		<field name="CONN_CLOSE" />
+		<field name="CONN_DIRECTIVE" />
+		<field name="CONN_KEEP_ALIVE" />
+		<field name="CONTENT_ENCODING" />
+		<field name="CONTENT_LEN" />
+		<field name="CONTENT_TYPE" />
+		<field name="CR" />
+		<field name="DATE_HEADER" />
+		<field name="DEFAULT_CONTENT_CHARSET" />
+		<field name="DEFAULT_CONTENT_TYPE" />
+		<field name="DEFAULT_PROTOCOL_CHARSET" />
+		<field name="EXPECT_CONTINUE" />
+		<field name="EXPECT_DIRECTIVE" />
+		<field name="HT" />
+		<field name="IDENTITY_CODING" />
+		<field name="ISO_8859_1" />
+		<field name="LF" />
+		<field name="OCTET_STREAM_TYPE" />
+		<field name="PLAIN_TEXT_TYPE" />
+		<field name="SERVER_HEADER" />
+		<field name="SP" />
+		<field name="TARGET_HOST" />
+		<field name="TRANSFER_ENCODING" />
+		<field name="USER_AGENT" />
+		<field name="US_ASCII" />
+		<field name="UTF_16" />
+		<field name="UTF_8" />
+	</class>
+	<class name="org/apache/http/protocol/HttpContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="removeAttribute(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<field name="RESERVED_PREFIX" />
+	</class>
+	<class name="org/apache/http/protocol/HttpDateGenerator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getCurrentDate()Ljava/lang/String;" />
+		<field name="GMT" />
+		<field name="PATTERN_RFC1123" />
+	</class>
+	<class name="org/apache/http/protocol/HttpExpectationVerifier" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="verify(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V" />
+	</class>
+	<class name="org/apache/http/protocol/HttpProcessor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<implements name="org/apache/http/HttpResponseInterceptor" />
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestExecutor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="canResponseHaveBody(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;)Z" />
+		<method name="doReceiveResponse(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+		<method name="doSendRequest(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+		<method name="execute(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;" />
+		<method name="postProcess(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V" />
+		<method name="preProcess(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V" />
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="handle(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V" />
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestHandlerRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/protocol/HttpRequestHandlerResolver" />
+		<method name="&lt;init&gt;()V" />
+		<method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="15" />
+		<method name="register(Ljava/lang/String;Lorg/apache/http/protocol/HttpRequestHandler;)V" />
+		<method name="setHandlers(Ljava/util/Map;)V" />
+		<method name="unregister(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestHandlerResolver" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="lookup(Ljava/lang/String;)Lorg/apache/http/protocol/HttpRequestHandler;" />
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestInterceptorList" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V" />
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V" />
+		<method name="clearRequestInterceptors()V" />
+		<method name="getRequestInterceptor(I)Lorg/apache/http/HttpRequestInterceptor;" />
+		<method name="getRequestInterceptorCount()I" />
+		<method name="removeRequestInterceptorByClass(Ljava/lang/Class;)V" />
+		<method name="setInterceptors(Ljava/util/List;)V" />
+	</class>
+	<class name="org/apache/http/protocol/HttpResponseInterceptorList" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V" />
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V" />
+		<method name="clearResponseInterceptors()V" />
+		<method name="getResponseInterceptor(I)Lorg/apache/http/HttpResponseInterceptor;" />
+		<method name="getResponseInterceptorCount()I" />
+		<method name="removeResponseInterceptorByClass(Ljava/lang/Class;)V" />
+		<method name="setInterceptors(Ljava/util/List;)V" />
+	</class>
+	<class name="org/apache/http/protocol/HttpService" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/HttpResponseFactory;)V" />
+		<method name="doService(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V" />
+		<method name="getParams()Lorg/apache/http/params/HttpParams;" />
+		<method name="handleException(Lorg/apache/http/HttpException;Lorg/apache/http/HttpResponse;)V" />
+		<method name="handleRequest(Lorg/apache/http/HttpServerConnection;Lorg/apache/http/protocol/HttpContext;)V" />
+		<method name="setConnReuseStrategy(Lorg/apache/http/ConnectionReuseStrategy;)V" />
+		<method name="setExpectationVerifier(Lorg/apache/http/protocol/HttpExpectationVerifier;)V" />
+		<method name="setHandlerResolver(Lorg/apache/http/protocol/HttpRequestHandlerResolver;)V" />
+		<method name="setHttpProcessor(Lorg/apache/http/protocol/HttpProcessor;)V" />
+		<method name="setParams(Lorg/apache/http/params/HttpParams;)V" />
+		<method name="setResponseFactory(Lorg/apache/http/HttpResponseFactory;)V" />
+	</class>
+	<class name="org/apache/http/protocol/RequestConnControl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/RequestContent" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/RequestDate" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/RequestExpectContinue" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/RequestTargetHost" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/RequestUserAgent" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpRequestInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/ResponseConnControl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpResponseInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/ResponseContent" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpResponseInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/ResponseDate" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpResponseInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/ResponseServer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<implements name="org/apache/http/HttpResponseInterceptor" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/apache/http/protocol/SyncBasicHttpContext" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/protocol/BasicHttpContext" />
+		<method name="&lt;init&gt;(Lorg/apache/http/protocol/HttpContext;)V" />
+	</class>
+	<class name="org/apache/http/protocol/UriPatternMatcher" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="lookup(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="register(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="setHandlers(Ljava/util/Map;)V" />
+		<method name="unregister(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/apache/http/util/ByteArrayBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(I)V" />
+		<method name="append(Lorg/apache/http/util/CharArrayBuffer;II)V" />
+		<method name="append([BII)V" />
+		<method name="append([CII)V" />
+		<method name="buffer()[B" />
+		<method name="byteAt(I)I" />
+		<method name="capacity()I" />
+		<method name="clear()V" />
+		<method name="isEmpty()Z" />
+		<method name="isFull()Z" />
+		<method name="length()I" />
+		<method name="setLength(I)V" />
+		<method name="toByteArray()[B" />
+	</class>
+	<class name="org/apache/http/util/CharArrayBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(I)V" />
+		<method name="append(C)V" />
+		<method name="append(Ljava/lang/Object;)V" />
+		<method name="append(Ljava/lang/String;)V" />
+		<method name="append(Lorg/apache/http/util/ByteArrayBuffer;II)V" />
+		<method name="append(Lorg/apache/http/util/CharArrayBuffer;)V" />
+		<method name="append(Lorg/apache/http/util/CharArrayBuffer;II)V" />
+		<method name="append([BII)V" />
+		<method name="append([CII)V" />
+		<method name="buffer()[C" />
+		<method name="capacity()I" />
+		<method name="charAt(I)C" />
+		<method name="clear()V" />
+		<method name="ensureCapacity(I)V" />
+		<method name="indexOf(I)I" />
+		<method name="indexOf(III)I" />
+		<method name="isEmpty()Z" />
+		<method name="isFull()Z" />
+		<method name="length()I" />
+		<method name="setLength(I)V" />
+		<method name="substring(II)Ljava/lang/String;" />
+		<method name="substringTrimmed(II)Ljava/lang/String;" />
+		<method name="toCharArray()[C" />
+	</class>
+	<class name="org/apache/http/util/EncodingUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getAsciiBytes(Ljava/lang/String;)[B" />
+		<method name="getAsciiString([B)Ljava/lang/String;" />
+		<method name="getAsciiString([BII)Ljava/lang/String;" />
+		<method name="getBytes(Ljava/lang/String;Ljava/lang/String;)[B" />
+		<method name="getString([BIILjava/lang/String;)Ljava/lang/String;" />
+		<method name="getString([BLjava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/util/EntityUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="getContentCharSet(Lorg/apache/http/HttpEntity;)Ljava/lang/String;" />
+		<method name="toByteArray(Lorg/apache/http/HttpEntity;)[B" />
+		<method name="toString(Lorg/apache/http/HttpEntity;)Ljava/lang/String;" />
+		<method name="toString(Lorg/apache/http/HttpEntity;Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="org/apache/http/util/ExceptionUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="initCause(Ljava/lang/Throwable;Ljava/lang/Throwable;)V" />
+	</class>
+	<class name="org/apache/http/util/LangUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z" />
+		<method name="equals([Ljava/lang/Object;[Ljava/lang/Object;)Z" />
+		<method name="hashCode(II)I" />
+		<method name="hashCode(ILjava/lang/Object;)I" />
+		<method name="hashCode(IZ)I" />
+		<field name="HASH_OFFSET" />
+		<field name="HASH_SEED" />
+	</class>
+	<class name="org/apache/http/util/VersionInfo" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="fromMap(Ljava/lang/String;Ljava/util/Map;Ljava/lang/ClassLoader;)Lorg/apache/http/util/VersionInfo;" />
+		<method name="getClassloader()Ljava/lang/String;" />
+		<method name="getModule()Ljava/lang/String;" />
+		<method name="getPackage()Ljava/lang/String;" />
+		<method name="getRelease()Ljava/lang/String;" />
+		<method name="getTimestamp()Ljava/lang/String;" />
+		<method name="loadVersionInfo(Ljava/lang/String;Ljava/lang/ClassLoader;)Lorg/apache/http/util/VersionInfo;" />
+		<method name="loadVersionInfo([Ljava/lang/String;Ljava/lang/ClassLoader;)[Lorg/apache/http/util/VersionInfo;" />
+		<field name="PROPERTY_MODULE" />
+		<field name="PROPERTY_RELEASE" />
+		<field name="PROPERTY_TIMESTAMP" />
+		<field name="UNAVAILABLE" />
+		<field name="VERSION_PROPERTY_FILE" />
+	</class>
+	<class name="org/json/JSONArray" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Object;)V" since="19" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Collection;)V" />
+		<method name="&lt;init&gt;(Lorg/json/JSONTokener;)V" />
+		<method name="get(I)Ljava/lang/Object;" />
+		<method name="getBoolean(I)Z" />
+		<method name="getDouble(I)D" />
+		<method name="getInt(I)I" />
+		<method name="getJSONArray(I)Lorg/json/JSONArray;" />
+		<method name="getJSONObject(I)Lorg/json/JSONObject;" />
+		<method name="getLong(I)J" />
+		<method name="getString(I)Ljava/lang/String;" />
+		<method name="isNull(I)Z" />
+		<method name="join(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="length()I" />
+		<method name="opt(I)Ljava/lang/Object;" />
+		<method name="optBoolean(I)Z" />
+		<method name="optBoolean(IZ)Z" />
+		<method name="optDouble(I)D" />
+		<method name="optDouble(ID)D" />
+		<method name="optInt(I)I" />
+		<method name="optInt(II)I" />
+		<method name="optJSONArray(I)Lorg/json/JSONArray;" />
+		<method name="optJSONObject(I)Lorg/json/JSONObject;" />
+		<method name="optLong(I)J" />
+		<method name="optLong(IJ)J" />
+		<method name="optString(I)Ljava/lang/String;" />
+		<method name="optString(ILjava/lang/String;)Ljava/lang/String;" />
+		<method name="put(D)Lorg/json/JSONArray;" />
+		<method name="put(I)Lorg/json/JSONArray;" />
+		<method name="put(ID)Lorg/json/JSONArray;" />
+		<method name="put(II)Lorg/json/JSONArray;" />
+		<method name="put(IJ)Lorg/json/JSONArray;" />
+		<method name="put(ILjava/lang/Object;)Lorg/json/JSONArray;" />
+		<method name="put(IZ)Lorg/json/JSONArray;" />
+		<method name="put(J)Lorg/json/JSONArray;" />
+		<method name="put(Ljava/lang/Object;)Lorg/json/JSONArray;" />
+		<method name="put(Z)Lorg/json/JSONArray;" />
+		<method name="remove(I)Ljava/lang/Object;" since="19" />
+		<method name="toJSONObject(Lorg/json/JSONArray;)Lorg/json/JSONObject;" />
+		<method name="toString(I)Ljava/lang/String;" />
+	</class>
+	<class name="org/json/JSONException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Throwable;)V" since="27" />
+		<method name="&lt;init&gt;(Ljava/lang/Throwable;)V" since="27" />
+	</class>
+	<class name="org/json/JSONObject" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/util/Map;)V" />
+		<method name="&lt;init&gt;(Lorg/json/JSONObject;[Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Lorg/json/JSONTokener;)V" />
+		<method name="accumulate(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;" />
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getBoolean(Ljava/lang/String;)Z" />
+		<method name="getDouble(Ljava/lang/String;)D" />
+		<method name="getInt(Ljava/lang/String;)I" />
+		<method name="getJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;" />
+		<method name="getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;" />
+		<method name="getLong(Ljava/lang/String;)J" />
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="has(Ljava/lang/String;)Z" />
+		<method name="isNull(Ljava/lang/String;)Z" />
+		<method name="keys()Ljava/util/Iterator;" />
+		<method name="length()I" />
+		<method name="names()Lorg/json/JSONArray;" />
+		<method name="numberToString(Ljava/lang/Number;)Ljava/lang/String;" />
+		<method name="opt(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="optBoolean(Ljava/lang/String;)Z" />
+		<method name="optBoolean(Ljava/lang/String;Z)Z" />
+		<method name="optDouble(Ljava/lang/String;)D" />
+		<method name="optDouble(Ljava/lang/String;D)D" />
+		<method name="optInt(Ljava/lang/String;)I" />
+		<method name="optInt(Ljava/lang/String;I)I" />
+		<method name="optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;" />
+		<method name="optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;" />
+		<method name="optLong(Ljava/lang/String;)J" />
+		<method name="optLong(Ljava/lang/String;J)J" />
+		<method name="optString(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="put(Ljava/lang/String;D)Lorg/json/JSONObject;" />
+		<method name="put(Ljava/lang/String;I)Lorg/json/JSONObject;" />
+		<method name="put(Ljava/lang/String;J)Lorg/json/JSONObject;" />
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;" />
+		<method name="put(Ljava/lang/String;Z)Lorg/json/JSONObject;" />
+		<method name="putOpt(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;" />
+		<method name="quote(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="remove(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="toJSONArray(Lorg/json/JSONArray;)Lorg/json/JSONArray;" />
+		<method name="toString(I)Ljava/lang/String;" />
+		<method name="wrap(Ljava/lang/Object;)Ljava/lang/Object;" since="19" />
+		<field name="NULL" />
+	</class>
+	<class name="org/json/JSONStringer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="array()Lorg/json/JSONStringer;" />
+		<method name="endArray()Lorg/json/JSONStringer;" />
+		<method name="endObject()Lorg/json/JSONStringer;" />
+		<method name="key(Ljava/lang/String;)Lorg/json/JSONStringer;" />
+		<method name="object()Lorg/json/JSONStringer;" />
+		<method name="value(D)Lorg/json/JSONStringer;" />
+		<method name="value(J)Lorg/json/JSONStringer;" />
+		<method name="value(Ljava/lang/Object;)Lorg/json/JSONStringer;" />
+		<method name="value(Z)Lorg/json/JSONStringer;" />
+	</class>
+	<class name="org/json/JSONTokener" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="back()V" />
+		<method name="dehexchar(C)I" />
+		<method name="more()Z" />
+		<method name="next()C" />
+		<method name="next(C)C" />
+		<method name="next(I)Ljava/lang/String;" />
+		<method name="nextClean()C" />
+		<method name="nextString(C)Ljava/lang/String;" />
+		<method name="nextTo(C)Ljava/lang/String;" />
+		<method name="nextTo(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="nextValue()Ljava/lang/Object;" />
+		<method name="skipPast(Ljava/lang/String;)V" />
+		<method name="skipTo(C)C" />
+		<method name="syntaxError(Ljava/lang/String;)Lorg/json/JSONException;" />
+	</class>
+	<class name="org/w3c/dom/Attr" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getOwnerElement()Lorg/w3c/dom/Element;" />
+		<method name="getSchemaTypeInfo()Lorg/w3c/dom/TypeInfo;" since="8" />
+		<method name="getSpecified()Z" />
+		<method name="getValue()Ljava/lang/String;" />
+		<method name="isId()Z" since="8" />
+		<method name="setValue(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/w3c/dom/CDATASection" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Text" />
+	</class>
+	<class name="org/w3c/dom/CharacterData" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="appendData(Ljava/lang/String;)V" />
+		<method name="deleteData(II)V" />
+		<method name="getData()Ljava/lang/String;" />
+		<method name="getLength()I" />
+		<method name="insertData(ILjava/lang/String;)V" />
+		<method name="replaceData(IILjava/lang/String;)V" />
+		<method name="setData(Ljava/lang/String;)V" />
+		<method name="substringData(II)Ljava/lang/String;" />
+	</class>
+	<class name="org/w3c/dom/Comment" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/CharacterData" />
+	</class>
+	<class name="org/w3c/dom/DOMConfiguration" since="8">
+		<extends name="java/lang/Object" />
+		<method name="canSetParameter(Ljava/lang/String;Ljava/lang/Object;)Z" />
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getParameterNames()Lorg/w3c/dom/DOMStringList;" />
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" />
+	</class>
+	<class name="org/w3c/dom/DOMError" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getLocation()Lorg/w3c/dom/DOMLocator;" />
+		<method name="getMessage()Ljava/lang/String;" />
+		<method name="getRelatedData()Ljava/lang/Object;" />
+		<method name="getRelatedException()Ljava/lang/Object;" />
+		<method name="getSeverity()S" />
+		<method name="getType()Ljava/lang/String;" />
+		<field name="SEVERITY_ERROR" />
+		<field name="SEVERITY_FATAL_ERROR" />
+		<field name="SEVERITY_WARNING" />
+	</class>
+	<class name="org/w3c/dom/DOMErrorHandler" since="8">
+		<extends name="java/lang/Object" />
+		<method name="handleError(Lorg/w3c/dom/DOMError;)Z" />
+	</class>
+	<class name="org/w3c/dom/DOMException" since="1">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(SLjava/lang/String;)V" />
+		<field name="DOMSTRING_SIZE_ERR" />
+		<field name="HIERARCHY_REQUEST_ERR" />
+		<field name="INDEX_SIZE_ERR" />
+		<field name="INUSE_ATTRIBUTE_ERR" />
+		<field name="INVALID_ACCESS_ERR" />
+		<field name="INVALID_CHARACTER_ERR" />
+		<field name="INVALID_MODIFICATION_ERR" />
+		<field name="INVALID_STATE_ERR" />
+		<field name="NAMESPACE_ERR" />
+		<field name="NOT_FOUND_ERR" />
+		<field name="NOT_SUPPORTED_ERR" />
+		<field name="NO_DATA_ALLOWED_ERR" />
+		<field name="NO_MODIFICATION_ALLOWED_ERR" />
+		<field name="SYNTAX_ERR" />
+		<field name="TYPE_MISMATCH_ERR" since="8" />
+		<field name="VALIDATION_ERR" since="8" />
+		<field name="WRONG_DOCUMENT_ERR" />
+		<field name="code" />
+	</class>
+	<class name="org/w3c/dom/DOMImplementation" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createDocument(Ljava/lang/String;Ljava/lang/String;Lorg/w3c/dom/DocumentType;)Lorg/w3c/dom/Document;" />
+		<method name="createDocumentType(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/DocumentType;" />
+		<method name="getFeature(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;" since="8" />
+		<method name="hasFeature(Ljava/lang/String;Ljava/lang/String;)Z" />
+	</class>
+	<class name="org/w3c/dom/DOMImplementationList" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getLength()I" />
+		<method name="item(I)Lorg/w3c/dom/DOMImplementation;" />
+	</class>
+	<class name="org/w3c/dom/DOMImplementationSource" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getDOMImplementation(Ljava/lang/String;)Lorg/w3c/dom/DOMImplementation;" />
+		<method name="getDOMImplementationList(Ljava/lang/String;)Lorg/w3c/dom/DOMImplementationList;" />
+	</class>
+	<class name="org/w3c/dom/DOMLocator" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getByteOffset()I" />
+		<method name="getColumnNumber()I" />
+		<method name="getLineNumber()I" />
+		<method name="getRelatedNode()Lorg/w3c/dom/Node;" />
+		<method name="getUri()Ljava/lang/String;" />
+		<method name="getUtf16Offset()I" />
+	</class>
+	<class name="org/w3c/dom/DOMStringList" since="8">
+		<extends name="java/lang/Object" />
+		<method name="contains(Ljava/lang/String;)Z" />
+		<method name="getLength()I" />
+		<method name="item(I)Ljava/lang/String;" />
+	</class>
+	<class name="org/w3c/dom/Document" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="adoptNode(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" since="8" />
+		<method name="createAttribute(Ljava/lang/String;)Lorg/w3c/dom/Attr;" />
+		<method name="createAttributeNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Attr;" />
+		<method name="createCDATASection(Ljava/lang/String;)Lorg/w3c/dom/CDATASection;" />
+		<method name="createComment(Ljava/lang/String;)Lorg/w3c/dom/Comment;" />
+		<method name="createDocumentFragment()Lorg/w3c/dom/DocumentFragment;" />
+		<method name="createElement(Ljava/lang/String;)Lorg/w3c/dom/Element;" />
+		<method name="createElementNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;" />
+		<method name="createEntityReference(Ljava/lang/String;)Lorg/w3c/dom/EntityReference;" />
+		<method name="createProcessingInstruction(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/ProcessingInstruction;" />
+		<method name="createTextNode(Ljava/lang/String;)Lorg/w3c/dom/Text;" />
+		<method name="getDoctype()Lorg/w3c/dom/DocumentType;" />
+		<method name="getDocumentElement()Lorg/w3c/dom/Element;" />
+		<method name="getDocumentURI()Ljava/lang/String;" since="8" />
+		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;" since="8" />
+		<method name="getElementById(Ljava/lang/String;)Lorg/w3c/dom/Element;" />
+		<method name="getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;" />
+		<method name="getElementsByTagNameNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;" />
+		<method name="getImplementation()Lorg/w3c/dom/DOMImplementation;" />
+		<method name="getInputEncoding()Ljava/lang/String;" since="8" />
+		<method name="getStrictErrorChecking()Z" since="8" />
+		<method name="getXmlEncoding()Ljava/lang/String;" since="8" />
+		<method name="getXmlStandalone()Z" since="8" />
+		<method name="getXmlVersion()Ljava/lang/String;" since="8" />
+		<method name="importNode(Lorg/w3c/dom/Node;Z)Lorg/w3c/dom/Node;" />
+		<method name="normalizeDocument()V" since="8" />
+		<method name="renameNode(Lorg/w3c/dom/Node;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;" since="8" />
+		<method name="setDocumentURI(Ljava/lang/String;)V" since="8" />
+		<method name="setStrictErrorChecking(Z)V" since="8" />
+		<method name="setXmlStandalone(Z)V" since="8" />
+		<method name="setXmlVersion(Ljava/lang/String;)V" since="8" />
+	</class>
+	<class name="org/w3c/dom/DocumentFragment" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+	</class>
+	<class name="org/w3c/dom/DocumentType" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="getEntities()Lorg/w3c/dom/NamedNodeMap;" />
+		<method name="getInternalSubset()Ljava/lang/String;" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getNotations()Lorg/w3c/dom/NamedNodeMap;" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+	</class>
+	<class name="org/w3c/dom/Element" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getAttributeNS(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getAttributeNode(Ljava/lang/String;)Lorg/w3c/dom/Attr;" />
+		<method name="getAttributeNodeNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Attr;" />
+		<method name="getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;" />
+		<method name="getElementsByTagNameNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;" />
+		<method name="getSchemaTypeInfo()Lorg/w3c/dom/TypeInfo;" since="8" />
+		<method name="getTagName()Ljava/lang/String;" />
+		<method name="hasAttribute(Ljava/lang/String;)Z" />
+		<method name="hasAttributeNS(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="removeAttribute(Ljava/lang/String;)V" />
+		<method name="removeAttributeNS(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="removeAttributeNode(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;" />
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setAttributeNS(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setAttributeNode(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;" />
+		<method name="setAttributeNodeNS(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;" />
+		<method name="setIdAttribute(Ljava/lang/String;Z)V" since="8" />
+		<method name="setIdAttributeNS(Ljava/lang/String;Ljava/lang/String;Z)V" since="8" />
+		<method name="setIdAttributeNode(Lorg/w3c/dom/Attr;Z)V" since="8" />
+	</class>
+	<class name="org/w3c/dom/Entity" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="getInputEncoding()Ljava/lang/String;" since="8" />
+		<method name="getNotationName()Ljava/lang/String;" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="getXmlEncoding()Ljava/lang/String;" since="8" />
+		<method name="getXmlVersion()Ljava/lang/String;" since="8" />
+	</class>
+	<class name="org/w3c/dom/EntityReference" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+	</class>
+	<class name="org/w3c/dom/NameList" since="8">
+		<extends name="java/lang/Object" />
+		<method name="contains(Ljava/lang/String;)Z" />
+		<method name="containsNS(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="getLength()I" />
+		<method name="getName(I)Ljava/lang/String;" />
+		<method name="getNamespaceURI(I)Ljava/lang/String;" />
+	</class>
+	<class name="org/w3c/dom/NamedNodeMap" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getLength()I" />
+		<method name="getNamedItem(Ljava/lang/String;)Lorg/w3c/dom/Node;" />
+		<method name="getNamedItemNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;" />
+		<method name="item(I)Lorg/w3c/dom/Node;" />
+		<method name="removeNamedItem(Ljava/lang/String;)Lorg/w3c/dom/Node;" />
+		<method name="removeNamedItemNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;" />
+		<method name="setNamedItem(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" />
+		<method name="setNamedItemNS(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" />
+	</class>
+	<class name="org/w3c/dom/Node" since="1">
+		<extends name="java/lang/Object" />
+		<method name="appendChild(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" />
+		<method name="cloneNode(Z)Lorg/w3c/dom/Node;" />
+		<method name="compareDocumentPosition(Lorg/w3c/dom/Node;)S" since="8" />
+		<method name="getAttributes()Lorg/w3c/dom/NamedNodeMap;" />
+		<method name="getBaseURI()Ljava/lang/String;" since="8" />
+		<method name="getChildNodes()Lorg/w3c/dom/NodeList;" />
+		<method name="getFeature(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;" since="8" />
+		<method name="getFirstChild()Lorg/w3c/dom/Node;" />
+		<method name="getLastChild()Lorg/w3c/dom/Node;" />
+		<method name="getLocalName()Ljava/lang/String;" />
+		<method name="getNamespaceURI()Ljava/lang/String;" />
+		<method name="getNextSibling()Lorg/w3c/dom/Node;" />
+		<method name="getNodeName()Ljava/lang/String;" />
+		<method name="getNodeType()S" />
+		<method name="getNodeValue()Ljava/lang/String;" />
+		<method name="getOwnerDocument()Lorg/w3c/dom/Document;" />
+		<method name="getParentNode()Lorg/w3c/dom/Node;" />
+		<method name="getPrefix()Ljava/lang/String;" />
+		<method name="getPreviousSibling()Lorg/w3c/dom/Node;" />
+		<method name="getTextContent()Ljava/lang/String;" since="8" />
+		<method name="getUserData(Ljava/lang/String;)Ljava/lang/Object;" since="8" />
+		<method name="hasAttributes()Z" />
+		<method name="hasChildNodes()Z" />
+		<method name="insertBefore(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" />
+		<method name="isDefaultNamespace(Ljava/lang/String;)Z" since="8" />
+		<method name="isEqualNode(Lorg/w3c/dom/Node;)Z" since="8" />
+		<method name="isSameNode(Lorg/w3c/dom/Node;)Z" since="8" />
+		<method name="isSupported(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="lookupNamespaceURI(Ljava/lang/String;)Ljava/lang/String;" since="8" />
+		<method name="lookupPrefix(Ljava/lang/String;)Ljava/lang/String;" since="8" />
+		<method name="normalize()V" />
+		<method name="removeChild(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" />
+		<method name="replaceChild(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" />
+		<method name="setNodeValue(Ljava/lang/String;)V" />
+		<method name="setPrefix(Ljava/lang/String;)V" />
+		<method name="setTextContent(Ljava/lang/String;)V" since="8" />
+		<method name="setUserData(Ljava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/UserDataHandler;)Ljava/lang/Object;" since="8" />
+		<field name="ATTRIBUTE_NODE" />
+		<field name="CDATA_SECTION_NODE" />
+		<field name="COMMENT_NODE" />
+		<field name="DOCUMENT_FRAGMENT_NODE" />
+		<field name="DOCUMENT_NODE" />
+		<field name="DOCUMENT_POSITION_CONTAINED_BY" since="8" />
+		<field name="DOCUMENT_POSITION_CONTAINS" since="8" />
+		<field name="DOCUMENT_POSITION_DISCONNECTED" since="8" />
+		<field name="DOCUMENT_POSITION_FOLLOWING" since="8" />
+		<field name="DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" since="8" />
+		<field name="DOCUMENT_POSITION_PRECEDING" since="8" />
+		<field name="DOCUMENT_TYPE_NODE" />
+		<field name="ELEMENT_NODE" />
+		<field name="ENTITY_NODE" />
+		<field name="ENTITY_REFERENCE_NODE" />
+		<field name="NOTATION_NODE" />
+		<field name="PROCESSING_INSTRUCTION_NODE" />
+		<field name="TEXT_NODE" />
+	</class>
+	<class name="org/w3c/dom/NodeList" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getLength()I" />
+		<method name="item(I)Lorg/w3c/dom/Node;" />
+	</class>
+	<class name="org/w3c/dom/Notation" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+	</class>
+	<class name="org/w3c/dom/ProcessingInstruction" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/Node" />
+		<method name="getData()Ljava/lang/String;" />
+		<method name="getTarget()Ljava/lang/String;" />
+		<method name="setData(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/w3c/dom/Text" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/w3c/dom/CharacterData" />
+		<method name="getWholeText()Ljava/lang/String;" since="8" />
+		<method name="isElementContentWhitespace()Z" since="8" />
+		<method name="replaceWholeText(Ljava/lang/String;)Lorg/w3c/dom/Text;" since="8" />
+		<method name="splitText(I)Lorg/w3c/dom/Text;" />
+	</class>
+	<class name="org/w3c/dom/TypeInfo" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getTypeName()Ljava/lang/String;" />
+		<method name="getTypeNamespace()Ljava/lang/String;" />
+		<method name="isDerivedFrom(Ljava/lang/String;Ljava/lang/String;I)Z" />
+		<field name="DERIVATION_EXTENSION" />
+		<field name="DERIVATION_LIST" />
+		<field name="DERIVATION_RESTRICTION" />
+		<field name="DERIVATION_UNION" />
+	</class>
+	<class name="org/w3c/dom/UserDataHandler" since="8">
+		<extends name="java/lang/Object" />
+		<method name="handle(SLjava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V" />
+		<field name="NODE_ADOPTED" />
+		<field name="NODE_CLONED" />
+		<field name="NODE_DELETED" />
+		<field name="NODE_IMPORTED" />
+		<field name="NODE_RENAMED" />
+	</class>
+	<class name="org/w3c/dom/ls/DOMImplementationLS" since="8">
+		<extends name="java/lang/Object" />
+		<method name="createLSInput()Lorg/w3c/dom/ls/LSInput;" />
+		<method name="createLSOutput()Lorg/w3c/dom/ls/LSOutput;" />
+		<method name="createLSParser(SLjava/lang/String;)Lorg/w3c/dom/ls/LSParser;" />
+		<method name="createLSSerializer()Lorg/w3c/dom/ls/LSSerializer;" />
+		<field name="MODE_ASYNCHRONOUS" />
+		<field name="MODE_SYNCHRONOUS" />
+	</class>
+	<class name="org/w3c/dom/ls/LSException" since="8">
+		<extends name="java/lang/RuntimeException" />
+		<method name="&lt;init&gt;(SLjava/lang/String;)V" />
+		<field name="PARSE_ERR" />
+		<field name="SERIALIZE_ERR" />
+		<field name="code" />
+	</class>
+	<class name="org/w3c/dom/ls/LSInput" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getBaseURI()Ljava/lang/String;" />
+		<method name="getByteStream()Ljava/io/InputStream;" />
+		<method name="getCertifiedText()Z" />
+		<method name="getCharacterStream()Ljava/io/Reader;" />
+		<method name="getEncoding()Ljava/lang/String;" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getStringData()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="setBaseURI(Ljava/lang/String;)V" />
+		<method name="setByteStream(Ljava/io/InputStream;)V" />
+		<method name="setCertifiedText(Z)V" />
+		<method name="setCharacterStream(Ljava/io/Reader;)V" />
+		<method name="setEncoding(Ljava/lang/String;)V" />
+		<method name="setPublicId(Ljava/lang/String;)V" />
+		<method name="setStringData(Ljava/lang/String;)V" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/w3c/dom/ls/LSOutput" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getByteStream()Ljava/io/OutputStream;" />
+		<method name="getCharacterStream()Ljava/io/Writer;" />
+		<method name="getEncoding()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="setByteStream(Ljava/io/OutputStream;)V" />
+		<method name="setCharacterStream(Ljava/io/Writer;)V" />
+		<method name="setEncoding(Ljava/lang/String;)V" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/w3c/dom/ls/LSParser" since="8">
+		<extends name="java/lang/Object" />
+		<method name="abort()V" />
+		<method name="getAsync()Z" />
+		<method name="getBusy()Z" />
+		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;" />
+		<method name="getFilter()Lorg/w3c/dom/ls/LSParserFilter;" />
+		<method name="parse(Lorg/w3c/dom/ls/LSInput;)Lorg/w3c/dom/Document;" />
+		<method name="parseURI(Ljava/lang/String;)Lorg/w3c/dom/Document;" />
+		<method name="parseWithContext(Lorg/w3c/dom/ls/LSInput;Lorg/w3c/dom/Node;S)Lorg/w3c/dom/Node;" />
+		<method name="setFilter(Lorg/w3c/dom/ls/LSParserFilter;)V" />
+		<field name="ACTION_APPEND_AS_CHILDREN" />
+		<field name="ACTION_INSERT_AFTER" />
+		<field name="ACTION_INSERT_BEFORE" />
+		<field name="ACTION_REPLACE" />
+		<field name="ACTION_REPLACE_CHILDREN" />
+	</class>
+	<class name="org/w3c/dom/ls/LSParserFilter" since="8">
+		<extends name="java/lang/Object" />
+		<method name="acceptNode(Lorg/w3c/dom/Node;)S" />
+		<method name="getWhatToShow()I" />
+		<method name="startElement(Lorg/w3c/dom/Element;)S" />
+		<field name="FILTER_ACCEPT" />
+		<field name="FILTER_INTERRUPT" />
+		<field name="FILTER_REJECT" />
+		<field name="FILTER_SKIP" />
+	</class>
+	<class name="org/w3c/dom/ls/LSResourceResolver" since="8">
+		<extends name="java/lang/Object" />
+		<method name="resolveResource(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/ls/LSInput;" />
+	</class>
+	<class name="org/w3c/dom/ls/LSSerializer" since="8">
+		<extends name="java/lang/Object" />
+		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;" />
+		<method name="getNewLine()Ljava/lang/String;" />
+		<method name="setNewLine(Ljava/lang/String;)V" />
+		<method name="write(Lorg/w3c/dom/Node;Lorg/w3c/dom/ls/LSOutput;)Z" />
+		<method name="writeToString(Lorg/w3c/dom/Node;)Ljava/lang/String;" />
+		<method name="writeToURI(Lorg/w3c/dom/Node;Ljava/lang/String;)Z" />
+	</class>
+	<class name="org/xml/sax/AttributeList" since="1" deprecated="9">
+		<extends name="java/lang/Object" />
+		<method name="getLength()I" deprecated="29" />
+		<method name="getName(I)Ljava/lang/String;" deprecated="29" />
+		<method name="getType(I)Ljava/lang/String;" deprecated="29" />
+		<method name="getType(Ljava/lang/String;)Ljava/lang/String;" deprecated="29" />
+		<method name="getValue(I)Ljava/lang/String;" deprecated="29" />
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;" deprecated="29" />
+	</class>
+	<class name="org/xml/sax/Attributes" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getIndex(Ljava/lang/String;)I" />
+		<method name="getIndex(Ljava/lang/String;Ljava/lang/String;)I" />
+		<method name="getLength()I" />
+		<method name="getLocalName(I)Ljava/lang/String;" />
+		<method name="getQName(I)Ljava/lang/String;" />
+		<method name="getType(I)Ljava/lang/String;" />
+		<method name="getType(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getURI(I)Ljava/lang/String;" />
+		<method name="getValue(I)Ljava/lang/String;" />
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+	</class>
+	<class name="org/xml/sax/ContentHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="characters([CII)V" />
+		<method name="endDocument()V" />
+		<method name="endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="endPrefixMapping(Ljava/lang/String;)V" />
+		<method name="ignorableWhitespace([CII)V" />
+		<method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setDocumentLocator(Lorg/xml/sax/Locator;)V" />
+		<method name="skippedEntity(Ljava/lang/String;)V" />
+		<method name="startDocument()V" />
+		<method name="startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V" />
+		<method name="startPrefixMapping(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/DTDHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="notationDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="unparsedEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/DocumentHandler" since="1" deprecated="9">
+		<extends name="java/lang/Object" />
+		<method name="characters([CII)V" deprecated="29" />
+		<method name="endDocument()V" deprecated="29" />
+		<method name="endElement(Ljava/lang/String;)V" deprecated="29" />
+		<method name="ignorableWhitespace([CII)V" deprecated="29" />
+		<method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29" />
+		<method name="setDocumentLocator(Lorg/xml/sax/Locator;)V" deprecated="29" />
+		<method name="startDocument()V" deprecated="29" />
+		<method name="startElement(Ljava/lang/String;Lorg/xml/sax/AttributeList;)V" deprecated="29" />
+	</class>
+	<class name="org/xml/sax/EntityResolver" since="1">
+		<extends name="java/lang/Object" />
+		<method name="resolveEntity(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;" />
+	</class>
+	<class name="org/xml/sax/ErrorHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="error(Lorg/xml/sax/SAXParseException;)V" />
+		<method name="fatalError(Lorg/xml/sax/SAXParseException;)V" />
+		<method name="warning(Lorg/xml/sax/SAXParseException;)V" />
+	</class>
+	<class name="org/xml/sax/HandlerBase" since="1" deprecated="9">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/DTDHandler" />
+		<implements name="org/xml/sax/DocumentHandler" />
+		<implements name="org/xml/sax/EntityResolver" />
+		<implements name="org/xml/sax/ErrorHandler" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+	</class>
+	<class name="org/xml/sax/InputSource" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/io/InputStream;)V" />
+		<method name="&lt;init&gt;(Ljava/io/Reader;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="getByteStream()Ljava/io/InputStream;" />
+		<method name="getCharacterStream()Ljava/io/Reader;" />
+		<method name="getEncoding()Ljava/lang/String;" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+		<method name="setByteStream(Ljava/io/InputStream;)V" />
+		<method name="setCharacterStream(Ljava/io/Reader;)V" />
+		<method name="setEncoding(Ljava/lang/String;)V" />
+		<method name="setPublicId(Ljava/lang/String;)V" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/Locator" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getColumnNumber()I" />
+		<method name="getLineNumber()I" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+	</class>
+	<class name="org/xml/sax/Parser" since="1" deprecated="9">
+		<extends name="java/lang/Object" />
+		<method name="parse(Ljava/lang/String;)V" deprecated="29" />
+		<method name="parse(Lorg/xml/sax/InputSource;)V" deprecated="29" />
+		<method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V" deprecated="29" />
+		<method name="setDocumentHandler(Lorg/xml/sax/DocumentHandler;)V" deprecated="29" />
+		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V" deprecated="29" />
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" deprecated="29" />
+		<method name="setLocale(Ljava/util/Locale;)V" deprecated="29" />
+	</class>
+	<class name="org/xml/sax/SAXException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Exception;)V" />
+		<method name="getException()Ljava/lang/Exception;" />
+	</class>
+	<class name="org/xml/sax/SAXNotRecognizedException" since="1">
+		<extends name="org/xml/sax/SAXException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/SAXNotSupportedException" since="1">
+		<extends name="org/xml/sax/SAXException" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/SAXParseException" since="1">
+		<extends name="org/xml/sax/SAXException" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/Exception;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Lorg/xml/sax/Locator;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Lorg/xml/sax/Locator;Ljava/lang/Exception;)V" />
+		<method name="getColumnNumber()I" />
+		<method name="getLineNumber()I" />
+		<method name="getPublicId()Ljava/lang/String;" />
+		<method name="getSystemId()Ljava/lang/String;" />
+	</class>
+	<class name="org/xml/sax/XMLFilter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/XMLReader" />
+		<method name="getParent()Lorg/xml/sax/XMLReader;" />
+		<method name="setParent(Lorg/xml/sax/XMLReader;)V" />
+	</class>
+	<class name="org/xml/sax/XMLReader" since="1">
+		<extends name="java/lang/Object" />
+		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;" />
+		<method name="getDTDHandler()Lorg/xml/sax/DTDHandler;" />
+		<method name="getEntityResolver()Lorg/xml/sax/EntityResolver;" />
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="parse(Ljava/lang/String;)V" />
+		<method name="parse(Lorg/xml/sax/InputSource;)V" />
+		<method name="setContentHandler(Lorg/xml/sax/ContentHandler;)V" />
+		<method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V" />
+		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V" />
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V" />
+	</class>
+	<class name="org/xml/sax/ext/Attributes2" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/Attributes" />
+		<method name="isDeclared(I)Z" />
+		<method name="isDeclared(Ljava/lang/String;)Z" />
+		<method name="isDeclared(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="isSpecified(I)Z" />
+		<method name="isSpecified(Ljava/lang/String;)Z" />
+		<method name="isSpecified(Ljava/lang/String;Ljava/lang/String;)Z" />
+	</class>
+	<class name="org/xml/sax/ext/Attributes2Impl" since="1">
+		<extends name="org/xml/sax/helpers/AttributesImpl" />
+		<implements name="org/xml/sax/ext/Attributes2" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/Attributes;)V" />
+		<method name="setDeclared(IZ)V" />
+		<method name="setSpecified(IZ)V" />
+	</class>
+	<class name="org/xml/sax/ext/DeclHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="attributeDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="elementDecl(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="externalEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="internalEntityDecl(Ljava/lang/String;Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/ext/DefaultHandler2" since="1">
+		<extends name="org/xml/sax/helpers/DefaultHandler" />
+		<implements name="org/xml/sax/ext/DeclHandler" />
+		<implements name="org/xml/sax/ext/EntityResolver2" />
+		<implements name="org/xml/sax/ext/LexicalHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/xml/sax/ext/EntityResolver2" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/EntityResolver" />
+		<method name="getExternalSubset(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;" />
+		<method name="resolveEntity(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;" />
+	</class>
+	<class name="org/xml/sax/ext/LexicalHandler" since="1">
+		<extends name="java/lang/Object" />
+		<method name="comment([CII)V" />
+		<method name="endCDATA()V" />
+		<method name="endDTD()V" />
+		<method name="endEntity(Ljava/lang/String;)V" />
+		<method name="startCDATA()V" />
+		<method name="startDTD(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="startEntity(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/ext/Locator2" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/Locator" />
+		<method name="getEncoding()Ljava/lang/String;" />
+		<method name="getXMLVersion()Ljava/lang/String;" />
+	</class>
+	<class name="org/xml/sax/ext/Locator2Impl" since="1">
+		<extends name="org/xml/sax/helpers/LocatorImpl" />
+		<implements name="org/xml/sax/ext/Locator2" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/Locator;)V" />
+		<method name="setEncoding(Ljava/lang/String;)V" />
+		<method name="setXMLVersion(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/helpers/AttributeListImpl" since="1" deprecated="9">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/AttributeList" />
+		<method name="&lt;init&gt;()V" deprecated="29" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/AttributeList;)V" deprecated="29" />
+		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="29" />
+		<method name="clear()V" deprecated="29" />
+		<method name="removeAttribute(Ljava/lang/String;)V" deprecated="29" />
+		<method name="setAttributeList(Lorg/xml/sax/AttributeList;)V" deprecated="29" />
+	</class>
+	<class name="org/xml/sax/helpers/AttributesImpl" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/Attributes" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/Attributes;)V" />
+		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="clear()V" />
+		<method name="removeAttribute(I)V" />
+		<method name="setAttribute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setAttributes(Lorg/xml/sax/Attributes;)V" />
+		<method name="setLocalName(ILjava/lang/String;)V" />
+		<method name="setQName(ILjava/lang/String;)V" />
+		<method name="setType(ILjava/lang/String;)V" />
+		<method name="setURI(ILjava/lang/String;)V" />
+		<method name="setValue(ILjava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/helpers/DefaultHandler" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/ContentHandler" />
+		<implements name="org/xml/sax/DTDHandler" />
+		<implements name="org/xml/sax/EntityResolver" />
+		<implements name="org/xml/sax/ErrorHandler" />
+		<method name="&lt;init&gt;()V" />
+	</class>
+	<class name="org/xml/sax/helpers/LocatorImpl" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/Locator" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/Locator;)V" />
+		<method name="setColumnNumber(I)V" />
+		<method name="setLineNumber(I)V" />
+		<method name="setPublicId(Ljava/lang/String;)V" />
+		<method name="setSystemId(Ljava/lang/String;)V" />
+	</class>
+	<class name="org/xml/sax/helpers/NamespaceSupport" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="declarePrefix(Ljava/lang/String;Ljava/lang/String;)Z" />
+		<method name="getDeclaredPrefixes()Ljava/util/Enumeration;" />
+		<method name="getPrefix(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getPrefixes()Ljava/util/Enumeration;" />
+		<method name="getPrefixes(Ljava/lang/String;)Ljava/util/Enumeration;" />
+		<method name="getURI(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="isNamespaceDeclUris()Z" />
+		<method name="popContext()V" />
+		<method name="processName(Ljava/lang/String;[Ljava/lang/String;Z)[Ljava/lang/String;" />
+		<method name="pushContext()V" />
+		<method name="reset()V" />
+		<method name="setNamespaceDeclUris(Z)V" />
+		<field name="NSDECL" />
+		<field name="XMLNS" />
+	</class>
+	<class name="org/xml/sax/helpers/ParserAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/DocumentHandler" />
+		<implements name="org/xml/sax/XMLReader" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/Parser;)V" />
+	</class>
+	<class name="org/xml/sax/helpers/ParserFactory" since="1" deprecated="9">
+		<extends name="java/lang/Object" />
+		<method name="makeParser()Lorg/xml/sax/Parser;" deprecated="29" />
+		<method name="makeParser(Ljava/lang/String;)Lorg/xml/sax/Parser;" deprecated="29" />
+	</class>
+	<class name="org/xml/sax/helpers/XMLFilterImpl" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/ContentHandler" />
+		<implements name="org/xml/sax/DTDHandler" />
+		<implements name="org/xml/sax/EntityResolver" />
+		<implements name="org/xml/sax/ErrorHandler" />
+		<implements name="org/xml/sax/XMLFilter" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/XMLReader;)V" />
+	</class>
+	<class name="org/xml/sax/helpers/XMLReaderAdapter" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/ContentHandler" />
+		<implements name="org/xml/sax/Parser" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xml/sax/XMLReader;)V" />
+	</class>
+	<class name="org/xml/sax/helpers/XMLReaderFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="createXMLReader()Lorg/xml/sax/XMLReader;" />
+		<method name="createXMLReader(Ljava/lang/String;)Lorg/xml/sax/XMLReader;" />
+	</class>
+	<class name="org/xmlpull/v1/XmlPullParser" since="1">
+		<extends name="java/lang/Object" />
+		<method name="defineEntityReplacementText(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="getAttributeCount()I" />
+		<method name="getAttributeName(I)Ljava/lang/String;" />
+		<method name="getAttributeNamespace(I)Ljava/lang/String;" />
+		<method name="getAttributePrefix(I)Ljava/lang/String;" />
+		<method name="getAttributeType(I)Ljava/lang/String;" />
+		<method name="getAttributeValue(I)Ljava/lang/String;" />
+		<method name="getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getColumnNumber()I" />
+		<method name="getDepth()I" />
+		<method name="getEventType()I" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getInputEncoding()Ljava/lang/String;" />
+		<method name="getLineNumber()I" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getNamespace()Ljava/lang/String;" />
+		<method name="getNamespace(Ljava/lang/String;)Ljava/lang/String;" />
+		<method name="getNamespaceCount(I)I" />
+		<method name="getNamespacePrefix(I)Ljava/lang/String;" />
+		<method name="getNamespaceUri(I)Ljava/lang/String;" />
+		<method name="getPositionDescription()Ljava/lang/String;" />
+		<method name="getPrefix()Ljava/lang/String;" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="getText()Ljava/lang/String;" />
+		<method name="getTextCharacters([I)[C" />
+		<method name="isAttributeDefault(I)Z" />
+		<method name="isEmptyElementTag()Z" />
+		<method name="isWhitespace()Z" />
+		<method name="next()I" />
+		<method name="nextTag()I" />
+		<method name="nextText()Ljava/lang/String;" />
+		<method name="nextToken()I" />
+		<method name="require(ILjava/lang/String;Ljava/lang/String;)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setInput(Ljava/io/InputStream;Ljava/lang/String;)V" />
+		<method name="setInput(Ljava/io/Reader;)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<field name="CDSECT" />
+		<field name="COMMENT" />
+		<field name="DOCDECL" />
+		<field name="END_DOCUMENT" />
+		<field name="END_TAG" />
+		<field name="ENTITY_REF" />
+		<field name="FEATURE_PROCESS_DOCDECL" />
+		<field name="FEATURE_PROCESS_NAMESPACES" />
+		<field name="FEATURE_REPORT_NAMESPACE_ATTRIBUTES" />
+		<field name="FEATURE_VALIDATION" />
+		<field name="IGNORABLE_WHITESPACE" />
+		<field name="NO_NAMESPACE" />
+		<field name="PROCESSING_INSTRUCTION" />
+		<field name="START_DOCUMENT" />
+		<field name="START_TAG" />
+		<field name="TEXT" />
+		<field name="TYPES" />
+	</class>
+	<class name="org/xmlpull/v1/XmlPullParserException" since="1">
+		<extends name="java/lang/Exception" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/Throwable;)V" />
+		<method name="getColumnNumber()I" />
+		<method name="getDetail()Ljava/lang/Throwable;" />
+		<method name="getLineNumber()I" />
+		<field name="column" />
+		<field name="detail" />
+		<field name="row" />
+	</class>
+	<class name="org/xmlpull/v1/XmlPullParserFactory" since="1">
+		<extends name="java/lang/Object" />
+		<method name="&lt;init&gt;()V" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="isNamespaceAware()Z" />
+		<method name="isValidating()Z" />
+		<method name="newInstance()Lorg/xmlpull/v1/XmlPullParserFactory;" />
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/Class;)Lorg/xmlpull/v1/XmlPullParserFactory;" />
+		<method name="newPullParser()Lorg/xmlpull/v1/XmlPullParser;" />
+		<method name="newSerializer()Lorg/xmlpull/v1/XmlSerializer;" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setNamespaceAware(Z)V" />
+		<method name="setValidating(Z)V" />
+		<field name="PROPERTY_NAME" />
+		<field name="classNamesLocation" />
+		<field name="features" />
+		<field name="parserClasses" />
+		<field name="serializerClasses" />
+	</class>
+	<class name="org/xmlpull/v1/XmlSerializer" since="1">
+		<extends name="java/lang/Object" />
+		<method name="attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;" />
+		<method name="cdsect(Ljava/lang/String;)V" />
+		<method name="comment(Ljava/lang/String;)V" />
+		<method name="docdecl(Ljava/lang/String;)V" />
+		<method name="endDocument()V" />
+		<method name="endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;" />
+		<method name="entityRef(Ljava/lang/String;)V" />
+		<method name="flush()V" />
+		<method name="getDepth()I" />
+		<method name="getFeature(Ljava/lang/String;)Z" />
+		<method name="getName()Ljava/lang/String;" />
+		<method name="getNamespace()Ljava/lang/String;" />
+		<method name="getPrefix(Ljava/lang/String;Z)Ljava/lang/String;" />
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;" />
+		<method name="ignorableWhitespace(Ljava/lang/String;)V" />
+		<method name="processingInstruction(Ljava/lang/String;)V" />
+		<method name="setFeature(Ljava/lang/String;Z)V" />
+		<method name="setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V" />
+		<method name="setOutput(Ljava/io/Writer;)V" />
+		<method name="setPrefix(Ljava/lang/String;Ljava/lang/String;)V" />
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V" />
+		<method name="startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V" />
+		<method name="startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;" />
+		<method name="text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;" />
+		<method name="text([CII)Lorg/xmlpull/v1/XmlSerializer;" />
+	</class>
+	<class name="org/xmlpull/v1/sax2/Driver" since="1">
+		<extends name="java/lang/Object" />
+		<implements name="org/xml/sax/Attributes" />
+		<implements name="org/xml/sax/Locator" />
+		<implements name="org/xml/sax/XMLReader" />
+		<method name="&lt;init&gt;()V" />
+		<method name="&lt;init&gt;(Lorg/xmlpull/v1/XmlPullParser;)V" />
+		<method name="parseSubTree(Lorg/xmlpull/v1/XmlPullParser;)V" />
+		<method name="startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" />
+		<field name="APACHE_DYNAMIC_VALIDATION_FEATURE" />
+		<field name="APACHE_SCHEMA_VALIDATION_FEATURE" />
+		<field name="DECLARATION_HANDLER_PROPERTY" />
+		<field name="LEXICAL_HANDLER_PROPERTY" />
+		<field name="NAMESPACES_FEATURE" />
+		<field name="NAMESPACE_PREFIXES_FEATURE" />
+		<field name="VALIDATION_FEATURE" />
+		<field name="contentHandler" />
+		<field name="errorHandler" />
+		<field name="pp" />
+		<field name="systemId" />
+	</class>
+</api>
\ No newline at end of file
diff --git a/32/public/data/api-versions.xml b/32/public/data/api-versions.xml
new file mode 100644
index 0000000..04d49f8
--- /dev/null
+++ b/32/public/data/api-versions.xml
@@ -0,0 +1,88840 @@
+<?xml version="1.0" encoding="utf-8"?>
+<api version="2">
+	<class name="android/Manifest" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/Manifest$permission" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ACCEPT_HANDOVER" since="28"/>
+		<field name="ACCESS_BACKGROUND_LOCATION" since="29"/>
+		<field name="ACCESS_BLOBS_ACROSS_USERS" since="31"/>
+		<field name="ACCESS_CHECKIN_PROPERTIES"/>
+		<field name="ACCESS_COARSE_LOCATION"/>
+		<field name="ACCESS_FINE_LOCATION"/>
+		<field name="ACCESS_LOCATION_EXTRA_COMMANDS"/>
+		<field name="ACCESS_MEDIA_LOCATION" since="29"/>
+		<field name="ACCESS_MOCK_LOCATION" removed="23"/>
+		<field name="ACCESS_NETWORK_STATE"/>
+		<field name="ACCESS_NOTIFICATION_POLICY" since="23"/>
+		<field name="ACCESS_SURFACE_FLINGER" removed="23"/>
+		<field name="ACCESS_WIFI_STATE"/>
+		<field name="ACCOUNT_MANAGER" since="5"/>
+		<field name="ACTIVITY_RECOGNITION" since="29"/>
+		<field name="ADD_SYSTEM_SERVICE" removed="4"/>
+		<field name="ADD_VOICEMAIL" since="14"/>
+		<field name="ANSWER_PHONE_CALLS" since="26"/>
+		<field name="AUTHENTICATE_ACCOUNTS" since="5" removed="23"/>
+		<field name="BATTERY_STATS"/>
+		<field name="BIND_ACCESSIBILITY_SERVICE" since="16"/>
+		<field name="BIND_APPWIDGET" since="3"/>
+		<field name="BIND_AUTOFILL_SERVICE" since="26"/>
+		<field name="BIND_CALL_REDIRECTION_SERVICE" since="29"/>
+		<field name="BIND_CARRIER_MESSAGING_CLIENT_SERVICE" since="29"/>
+		<field name="BIND_CARRIER_MESSAGING_SERVICE" since="22" deprecated="23"/>
+		<field name="BIND_CARRIER_SERVICES" since="23"/>
+		<field name="BIND_CHOOSER_TARGET_SERVICE" since="23" deprecated="30"/>
+		<field name="BIND_COMPANION_DEVICE_SERVICE" since="31"/>
+		<field name="BIND_CONDITION_PROVIDER_SERVICE" since="24"/>
+		<field name="BIND_CONTROLS" since="30"/>
+		<field name="BIND_DEVICE_ADMIN" since="8"/>
+		<field name="BIND_DREAM_SERVICE" since="21"/>
+		<field name="BIND_INCALL_SERVICE" since="23"/>
+		<field name="BIND_INPUT_METHOD" since="3"/>
+		<field name="BIND_MIDI_DEVICE_SERVICE" since="23"/>
+		<field name="BIND_NFC_SERVICE" since="19"/>
+		<field name="BIND_NOTIFICATION_LISTENER_SERVICE" since="18"/>
+		<field name="BIND_PRINT_SERVICE" since="19"/>
+		<field name="BIND_QUICK_ACCESS_WALLET_SERVICE" since="30"/>
+		<field name="BIND_QUICK_SETTINGS_TILE" since="24"/>
+		<field name="BIND_REMOTEVIEWS" since="11"/>
+		<field name="BIND_SCREENING_SERVICE" since="24"/>
+		<field name="BIND_TELECOM_CONNECTION_SERVICE" since="23"/>
+		<field name="BIND_TEXT_SERVICE" since="14"/>
+		<field name="BIND_TV_INPUT" since="21"/>
+		<field name="BIND_VISUAL_VOICEMAIL_SERVICE" since="26"/>
+		<field name="BIND_VOICE_INTERACTION" since="21"/>
+		<field name="BIND_VPN_SERVICE" since="14"/>
+		<field name="BIND_VR_LISTENER_SERVICE" since="24"/>
+		<field name="BIND_WALLPAPER" since="8"/>
+		<field name="BLUETOOTH"/>
+		<field name="BLUETOOTH_ADMIN"/>
+		<field name="BLUETOOTH_ADVERTISE" since="31"/>
+		<field name="BLUETOOTH_CONNECT" since="31"/>
+		<field name="BLUETOOTH_PRIVILEGED" since="19"/>
+		<field name="BLUETOOTH_SCAN" since="31"/>
+		<field name="BODY_SENSORS" since="20"/>
+		<field name="BRICK" removed="23"/>
+		<field name="BROADCAST_PACKAGE_REMOVED"/>
+		<field name="BROADCAST_SMS" since="2"/>
+		<field name="BROADCAST_STICKY"/>
+		<field name="BROADCAST_WAP_PUSH" since="2"/>
+		<field name="CALL_COMPANION_APP" since="29"/>
+		<field name="CALL_PHONE"/>
+		<field name="CALL_PRIVILEGED"/>
+		<field name="CAMERA"/>
+		<field name="CAPTURE_AUDIO_OUTPUT" since="19"/>
+		<field name="CAPTURE_SECURE_VIDEO_OUTPUT" since="19" removed="29"/>
+		<field name="CAPTURE_VIDEO_OUTPUT" since="19" removed="29"/>
+		<field name="CHANGE_COMPONENT_ENABLED_STATE"/>
+		<field name="CHANGE_CONFIGURATION"/>
+		<field name="CHANGE_NETWORK_STATE"/>
+		<field name="CHANGE_WIFI_MULTICAST_STATE" since="4"/>
+		<field name="CHANGE_WIFI_STATE"/>
+		<field name="CLEAR_APP_CACHE"/>
+		<field name="CLEAR_APP_USER_DATA" removed="23"/>
+		<field name="CONTROL_LOCATION_UPDATES"/>
+		<field name="DELETE_CACHE_FILES"/>
+		<field name="DELETE_PACKAGES"/>
+		<field name="DEVICE_POWER" removed="23"/>
+		<field name="DIAGNOSTIC"/>
+		<field name="DISABLE_KEYGUARD"/>
+		<field name="DUMP"/>
+		<field name="EXPAND_STATUS_BAR"/>
+		<field name="FACTORY_TEST"/>
+		<field name="FLASHLIGHT" removed="24"/>
+		<field name="FORCE_BACK" removed="23"/>
+		<field name="FOREGROUND_SERVICE" since="28"/>
+		<field name="FOTA_UPDATE" removed="4"/>
+		<field name="GET_ACCOUNTS"/>
+		<field name="GET_ACCOUNTS_PRIVILEGED" since="23"/>
+		<field name="GET_PACKAGE_SIZE"/>
+		<field name="GET_TASKS" deprecated="21"/>
+		<field name="GET_TOP_ACTIVITY_INFO" since="18" removed="23"/>
+		<field name="GLOBAL_SEARCH" since="4"/>
+		<field name="HARDWARE_TEST" removed="23"/>
+		<field name="HIDE_OVERLAY_WINDOWS" since="31"/>
+		<field name="HIGH_SAMPLING_RATE_SENSORS" since="31"/>
+		<field name="INJECT_EVENTS" removed="23"/>
+		<field name="INSTALL_LOCATION_PROVIDER" since="4"/>
+		<field name="INSTALL_PACKAGES"/>
+		<field name="INSTALL_SHORTCUT" since="19"/>
+		<field name="INSTANT_APP_FOREGROUND_SERVICE" since="26"/>
+		<field name="INTERACT_ACROSS_PROFILES" since="30"/>
+		<field name="INTERNAL_SYSTEM_WINDOW" removed="23"/>
+		<field name="INTERNET"/>
+		<field name="KILL_BACKGROUND_PROCESSES" since="8"/>
+		<field name="LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" since="33"/>
+		<field name="LOADER_USAGE_STATS" since="30"/>
+		<field name="LOCATION_HARDWARE" since="18"/>
+		<field name="MANAGE_ACCOUNTS" since="5" removed="23"/>
+		<field name="MANAGE_APP_TOKENS" removed="23"/>
+		<field name="MANAGE_DOCUMENTS" since="19"/>
+		<field name="MANAGE_EXTERNAL_STORAGE" since="30"/>
+		<field name="MANAGE_MEDIA" since="31"/>
+		<field name="MANAGE_ONGOING_CALLS" since="31"/>
+		<field name="MANAGE_OWN_CALLS" since="26"/>
+		<field name="MASTER_CLEAR"/>
+		<field name="MEDIA_CONTENT_CONTROL" since="19"/>
+		<field name="MODIFY_AUDIO_SETTINGS"/>
+		<field name="MODIFY_PHONE_STATE"/>
+		<field name="MOUNT_FORMAT_FILESYSTEMS" since="3"/>
+		<field name="MOUNT_UNMOUNT_FILESYSTEMS"/>
+		<field name="NFC" since="9"/>
+		<field name="NFC_PREFERRED_PAYMENT_INFO" since="30"/>
+		<field name="NFC_TRANSACTION_EVENT" since="28"/>
+		<field name="PACKAGE_USAGE_STATS" since="23"/>
+		<field name="PERSISTENT_ACTIVITY" deprecated="15"/>
+		<field name="PROCESS_OUTGOING_CALLS" deprecated="29"/>
+		<field name="QUERY_ALL_PACKAGES" since="30"/>
+		<field name="READ_CALENDAR"/>
+		<field name="READ_CALL_LOG" since="16"/>
+		<field name="READ_CONTACTS"/>
+		<field name="READ_EXTERNAL_STORAGE" since="16"/>
+		<field name="READ_FRAME_BUFFER" removed="29"/>
+		<field name="READ_HISTORY_BOOKMARKS" since="4" removed="23"/>
+		<field name="READ_INPUT_STATE" deprecated="16"/>
+		<field name="READ_LOGS"/>
+		<field name="READ_OWNER_DATA" removed="9"/>
+		<field name="READ_PHONE_NUMBERS" since="26"/>
+		<field name="READ_PHONE_STATE"/>
+		<field name="READ_PRECISE_PHONE_STATE" since="30"/>
+		<field name="READ_PROFILE" since="14" removed="23"/>
+		<field name="READ_SMS"/>
+		<field name="READ_SOCIAL_STREAM" since="15" deprecated="21" removed="23"/>
+		<field name="READ_SYNC_SETTINGS"/>
+		<field name="READ_SYNC_STATS"/>
+		<field name="READ_USER_DICTIONARY" since="16" removed="23"/>
+		<field name="READ_VOICEMAIL" since="21"/>
+		<field name="REBOOT"/>
+		<field name="RECEIVE_BOOT_COMPLETED"/>
+		<field name="RECEIVE_MMS"/>
+		<field name="RECEIVE_SMS"/>
+		<field name="RECEIVE_WAP_PUSH"/>
+		<field name="RECORD_AUDIO"/>
+		<field name="REORDER_TASKS"/>
+		<field name="REQUEST_COMPANION_PROFILE_WATCH" since="31"/>
+		<field name="REQUEST_COMPANION_RUN_IN_BACKGROUND" since="26"/>
+		<field name="REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUND" since="31"/>
+		<field name="REQUEST_COMPANION_USE_DATA_IN_BACKGROUND" since="26"/>
+		<field name="REQUEST_DELETE_PACKAGES" since="26"/>
+		<field name="REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23"/>
+		<field name="REQUEST_INSTALL_PACKAGES" since="23"/>
+		<field name="REQUEST_OBSERVE_COMPANION_DEVICE_PRESENCE" since="31"/>
+		<field name="REQUEST_PASSWORD_COMPLEXITY" since="29"/>
+		<field name="RESTART_PACKAGES" deprecated="15"/>
+		<field name="SCHEDULE_EXACT_ALARM" since="31"/>
+		<field name="SEND_RESPOND_VIA_MESSAGE" since="18"/>
+		<field name="SEND_SMS"/>
+		<field name="SET_ACTIVITY_WATCHER" removed="23"/>
+		<field name="SET_ALARM" since="9"/>
+		<field name="SET_ALWAYS_FINISH"/>
+		<field name="SET_ANIMATION_SCALE"/>
+		<field name="SET_DEBUG_APP"/>
+		<field name="SET_ORIENTATION" removed="23"/>
+		<field name="SET_POINTER_SPEED" since="13" removed="23"/>
+		<field name="SET_PREFERRED_APPLICATIONS" deprecated="15"/>
+		<field name="SET_PROCESS_FOREGROUND" removed="4"/>
+		<field name="SET_PROCESS_LIMIT"/>
+		<field name="SET_TIME" since="8"/>
+		<field name="SET_TIME_ZONE"/>
+		<field name="SET_WALLPAPER"/>
+		<field name="SET_WALLPAPER_HINTS"/>
+		<field name="SIGNAL_PERSISTENT_PROCESSES"/>
+		<field name="SMS_FINANCIAL_TRANSACTIONS" since="29" deprecated="31"/>
+		<field name="START_FOREGROUND_SERVICES_FROM_BACKGROUND" since="31"/>
+		<field name="START_VIEW_PERMISSION_USAGE" since="29"/>
+		<field name="STATUS_BAR"/>
+		<field name="SUBSCRIBED_FEEDS_READ" removed="23"/>
+		<field name="SUBSCRIBED_FEEDS_WRITE" removed="23"/>
+		<field name="SYSTEM_ALERT_WINDOW"/>
+		<field name="TRANSMIT_IR" since="19"/>
+		<field name="UNINSTALL_SHORTCUT" since="19"/>
+		<field name="UPDATE_DEVICE_STATS" since="3"/>
+		<field name="UPDATE_PACKAGES_WITHOUT_USER_ACTION" since="31"/>
+		<field name="USE_BIOMETRIC" since="28"/>
+		<field name="USE_CREDENTIALS" since="5" removed="23"/>
+		<field name="USE_FINGERPRINT" since="23" deprecated="28"/>
+		<field name="USE_FULL_SCREEN_INTENT" since="29"/>
+		<field name="USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER" since="31"/>
+		<field name="USE_SIP" since="9"/>
+		<field name="UWB_RANGING" since="31"/>
+		<field name="VIBRATE"/>
+		<field name="WAKE_LOCK"/>
+		<field name="WRITE_APN_SETTINGS"/>
+		<field name="WRITE_CALENDAR"/>
+		<field name="WRITE_CALL_LOG" since="16"/>
+		<field name="WRITE_CONTACTS"/>
+		<field name="WRITE_EXTERNAL_STORAGE" since="4"/>
+		<field name="WRITE_GSERVICES"/>
+		<field name="WRITE_HISTORY_BOOKMARKS" since="4" removed="23"/>
+		<field name="WRITE_OWNER_DATA" removed="9"/>
+		<field name="WRITE_PROFILE" since="14" removed="23"/>
+		<field name="WRITE_SECURE_SETTINGS" since="3"/>
+		<field name="WRITE_SETTINGS"/>
+		<field name="WRITE_SMS" removed="23"/>
+		<field name="WRITE_SOCIAL_STREAM" since="15" deprecated="21" removed="23"/>
+		<field name="WRITE_SYNC_SETTINGS"/>
+		<field name="WRITE_USER_DICTIONARY" since="16" removed="23"/>
+		<field name="WRITE_VOICEMAIL" since="21"/>
+	</class>
+	<class name="android/Manifest$permission_group" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ACCESSIBILITY_FEATURES" since="18" removed="23"/>
+		<field name="ACCOUNTS" removed="23"/>
+		<field name="ACTIVITY_RECOGNITION" since="29"/>
+		<field name="AFFECTS_BATTERY" since="17" removed="23"/>
+		<field name="APP_INFO" since="17" removed="23"/>
+		<field name="AUDIO_SETTINGS" since="17" removed="23"/>
+		<field name="BLUETOOTH_NETWORK" since="17" removed="23"/>
+		<field name="BOOKMARKS" since="17" removed="23"/>
+		<field name="CALENDAR" since="17"/>
+		<field name="CALL_LOG" since="28"/>
+		<field name="CAMERA" since="17"/>
+		<field name="CONTACTS" since="23"/>
+		<field name="COST_MONEY" removed="23"/>
+		<field name="DEVELOPMENT_TOOLS" removed="23"/>
+		<field name="DEVICE_ALARMS" since="17" removed="23"/>
+		<field name="DISPLAY" since="17" removed="23"/>
+		<field name="HARDWARE_CONTROLS" removed="23"/>
+		<field name="LOCATION"/>
+		<field name="MESSAGES" removed="23"/>
+		<field name="MICROPHONE" since="17"/>
+		<field name="NEARBY_DEVICES" since="31"/>
+		<field name="NETWORK" removed="23"/>
+		<field name="PERSONAL_INFO" removed="23"/>
+		<field name="PHONE" since="23"/>
+		<field name="PHONE_CALLS" removed="23"/>
+		<field name="SCREENLOCK" since="17" removed="23"/>
+		<field name="SENSORS" since="23"/>
+		<field name="SMS" since="23"/>
+		<field name="SOCIAL_INFO" since="17" removed="23"/>
+		<field name="STATUS_BAR" since="17" removed="23"/>
+		<field name="STORAGE" since="4"/>
+		<field name="SYNC_SETTINGS" since="17" removed="23"/>
+		<field name="SYSTEM_CLOCK" since="17" removed="23"/>
+		<field name="SYSTEM_TOOLS" removed="23"/>
+		<field name="USER_DICTIONARY" since="17" removed="23"/>
+		<field name="VOICEMAIL" since="17" removed="23"/>
+		<field name="WALLPAPER" since="17" removed="23"/>
+		<field name="WRITE_USER_DICTIONARY" since="17" removed="23"/>
+	</class>
+	<class name="android/R" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/R$anim" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="accelerate_decelerate_interpolator"/>
+		<field name="accelerate_interpolator"/>
+		<field name="anticipate_interpolator" since="4"/>
+		<field name="anticipate_overshoot_interpolator" since="4"/>
+		<field name="bounce_interpolator" since="4"/>
+		<field name="cycle_interpolator" since="8"/>
+		<field name="decelerate_interpolator"/>
+		<field name="fade_in"/>
+		<field name="fade_out"/>
+		<field name="linear_interpolator" since="4"/>
+		<field name="overshoot_interpolator" since="4"/>
+		<field name="slide_in_left"/>
+		<field name="slide_out_right"/>
+	</class>
+	<class name="android/R$animator" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="fade_in"/>
+		<field name="fade_out"/>
+	</class>
+	<class name="android/R$array" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="emailAddressTypes"/>
+		<field name="imProtocols"/>
+		<field name="organizationTypes"/>
+		<field name="phoneTypes"/>
+		<field name="postalAddressTypes"/>
+	</class>
+	<class name="android/R$attr" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="absListViewStyle"/>
+		<field name="accessibilityEventTypes" since="14"/>
+		<field name="accessibilityFeedbackType" since="14"/>
+		<field name="accessibilityFlags" since="14"/>
+		<field name="accessibilityHeading" since="28"/>
+		<field name="accessibilityLiveRegion" since="19"/>
+		<field name="accessibilityPaneTitle" since="28"/>
+		<field name="accessibilityTraversalAfter" since="22"/>
+		<field name="accessibilityTraversalBefore" since="22"/>
+		<field name="accountPreferences" since="5"/>
+		<field name="accountType" since="5"/>
+		<field name="action"/>
+		<field name="actionBarDivider" since="14"/>
+		<field name="actionBarItemBackground" since="14"/>
+		<field name="actionBarPopupTheme" since="21"/>
+		<field name="actionBarSize" since="11"/>
+		<field name="actionBarSplitStyle" since="14"/>
+		<field name="actionBarStyle" since="11"/>
+		<field name="actionBarTabBarStyle" since="11"/>
+		<field name="actionBarTabStyle" since="11"/>
+		<field name="actionBarTabTextStyle" since="11"/>
+		<field name="actionBarTheme" since="21"/>
+		<field name="actionBarWidgetTheme" since="14"/>
+		<field name="actionButtonStyle" since="11"/>
+		<field name="actionDropDownStyle" since="11"/>
+		<field name="actionLayout" since="11"/>
+		<field name="actionMenuTextAppearance" since="11"/>
+		<field name="actionMenuTextColor" since="11"/>
+		<field name="actionModeBackground" since="11"/>
+		<field name="actionModeCloseButtonStyle" since="11"/>
+		<field name="actionModeCloseDrawable" since="11"/>
+		<field name="actionModeCopyDrawable" since="11"/>
+		<field name="actionModeCutDrawable" since="11"/>
+		<field name="actionModeFindDrawable" since="21"/>
+		<field name="actionModePasteDrawable" since="11"/>
+		<field name="actionModeSelectAllDrawable" since="14"/>
+		<field name="actionModeShareDrawable" since="21"/>
+		<field name="actionModeSplitBackground" since="14"/>
+		<field name="actionModeStyle" since="14"/>
+		<field name="actionModeWebSearchDrawable" since="21"/>
+		<field name="actionOverflowButtonStyle" since="11"/>
+		<field name="actionOverflowMenuStyle" since="21"/>
+		<field name="actionProviderClass" since="14"/>
+		<field name="actionViewClass" since="11"/>
+		<field name="activatedBackgroundIndicator" since="11"/>
+		<field name="activityCloseEnterAnimation"/>
+		<field name="activityCloseExitAnimation"/>
+		<field name="activityOpenEnterAnimation"/>
+		<field name="activityOpenExitAnimation"/>
+		<field name="addPrintersActivity" since="19"/>
+		<field name="addStatesFromChildren"/>
+		<field name="adjustViewBounds"/>
+		<field name="advancedPrintOptionsActivity" since="19"/>
+		<field name="alertDialogIcon" since="11"/>
+		<field name="alertDialogStyle"/>
+		<field name="alertDialogTheme" since="11"/>
+		<field name="alignmentMode" since="14"/>
+		<field name="allContactsName" since="11"/>
+		<field name="allowAudioPlaybackCapture" since="29"/>
+		<field name="allowBackup" since="4"/>
+		<field name="allowClearUserData"/>
+		<field name="allowClickWhenDisabled" since="31"/>
+		<field name="allowEmbedded" since="20"/>
+		<field name="allowNativeHeapPointerTagging" since="30"/>
+		<field name="allowParallelSyncs" since="11"/>
+		<field name="allowSingleTap" since="3"/>
+		<field name="allowTaskReparenting"/>
+		<field name="allowUndo" since="23"/>
+		<field name="alpha" since="11"/>
+		<field name="alphabeticModifiers" since="26"/>
+		<field name="alphabeticShortcut"/>
+		<field name="alwaysDrawnWithCache"/>
+		<field name="alwaysRetainTaskState"/>
+		<field name="amPmBackgroundColor" since="21" deprecated="23"/>
+		<field name="amPmTextColor" since="21" deprecated="23"/>
+		<field name="ambientShadowAlpha" since="21"/>
+		<field name="angle"/>
+		<field name="animateFirstView" since="11"/>
+		<field name="animateLayoutChanges" since="11"/>
+		<field name="animateOnClick" since="3"/>
+		<field name="animatedImageDrawable" since="30"/>
+		<field name="animation"/>
+		<field name="animationCache"/>
+		<field name="animationDuration"/>
+		<field name="animationOrder"/>
+		<field name="animationResolution" since="11" deprecated="16"/>
+		<field name="antialias"/>
+		<field name="anyDensity" since="4" deprecated="30"/>
+		<field name="apduServiceBanner" since="19"/>
+		<field name="apiKey"/>
+		<field name="appCategory" since="26"/>
+		<field name="appComponentFactory" since="28"/>
+		<field name="attributionTags" since="31"/>
+		<field name="attributionsAreUserVisible" since="31"/>
+		<field name="author" since="7"/>
+		<field name="authorities"/>
+		<field name="autoAdvanceViewId" since="11"/>
+		<field name="autoCompleteTextViewStyle"/>
+		<field name="autoLink"/>
+		<field name="autoMirrored" since="19"/>
+		<field name="autoRemoveFromRecents" since="21"/>
+		<field name="autoRevokePermissions" since="30"/>
+		<field name="autoSizeMaxTextSize" since="26"/>
+		<field name="autoSizeMinTextSize" since="26"/>
+		<field name="autoSizePresetSizes" since="26"/>
+		<field name="autoSizeStepGranularity" since="26"/>
+		<field name="autoSizeTextType" since="26"/>
+		<field name="autoStart" since="7"/>
+		<field name="autoText" deprecated="15"/>
+		<field name="autoUrlDetect" since="4"/>
+		<field name="autoVerify" since="23"/>
+		<field name="autofillHints" since="26"/>
+		<field name="autofilledHighlight" since="26"/>
+		<field name="background"/>
+		<field name="backgroundDimAmount"/>
+		<field name="backgroundDimEnabled" since="3"/>
+		<field name="backgroundSplit" since="14"/>
+		<field name="backgroundStacked" since="14"/>
+		<field name="backgroundTint" since="21"/>
+		<field name="backgroundTintMode" since="21"/>
+		<field name="backupAgent" since="4"/>
+		<field name="backupInForeground" since="24"/>
+		<field name="banner" since="21"/>
+		<field name="baseline" since="11"/>
+		<field name="baselineAlignBottom"/>
+		<field name="baselineAligned"/>
+		<field name="baselineAlignedChildIndex"/>
+		<field name="bitmap" since="24"/>
+		<field name="borderlessButtonStyle" since="11"/>
+		<field name="bottom"/>
+		<field name="bottomBright"/>
+		<field name="bottomDark"/>
+		<field name="bottomLeftRadius"/>
+		<field name="bottomMedium"/>
+		<field name="bottomOffset" since="3"/>
+		<field name="bottomRightRadius"/>
+		<field name="breadCrumbShortTitle" since="11"/>
+		<field name="breadCrumbTitle" since="11"/>
+		<field name="breakStrategy" since="23"/>
+		<field name="bufferType"/>
+		<field name="button"/>
+		<field name="buttonBarButtonStyle" since="11"/>
+		<field name="buttonBarNegativeButtonStyle" since="21"/>
+		<field name="buttonBarNeutralButtonStyle" since="21"/>
+		<field name="buttonBarPositiveButtonStyle" since="21"/>
+		<field name="buttonBarStyle" since="11"/>
+		<field name="buttonCornerRadius" since="28"/>
+		<field name="buttonGravity" since="24"/>
+		<field name="buttonStyle"/>
+		<field name="buttonStyleInset"/>
+		<field name="buttonStyleSmall"/>
+		<field name="buttonStyleToggle"/>
+		<field name="buttonTint" since="21"/>
+		<field name="buttonTintMode" since="21"/>
+		<field name="cacheColorHint"/>
+		<field name="calendarTextColor" since="21"/>
+		<field name="calendarViewShown" since="11"/>
+		<field name="calendarViewStyle" since="11"/>
+		<field name="canControlMagnification" since="24"/>
+		<field name="canPauseRecording" since="31"/>
+		<field name="canPerformGestures" since="24"/>
+		<field name="canRecord" since="24"/>
+		<field name="canRequestEnhancedWebAccessibility" since="18" deprecated="26"/>
+		<field name="canRequestFilterKeyEvents" since="18"/>
+		<field name="canRequestFingerprintGestures" since="26"/>
+		<field name="canRequestTouchExplorationMode" since="18"/>
+		<field name="canRetrieveWindowContent" since="14"/>
+		<field name="canTakeScreenshot" since="30"/>
+		<field name="candidatesTextStyleSpans" since="3"/>
+		<field name="cantSaveState" since="28"/>
+		<field name="capitalize" deprecated="15"/>
+		<field name="category" since="19"/>
+		<field name="centerBright"/>
+		<field name="centerColor"/>
+		<field name="centerDark"/>
+		<field name="centerMedium"/>
+		<field name="centerX"/>
+		<field name="centerY"/>
+		<field name="certDigest" since="26"/>
+		<field name="checkBoxPreferenceStyle"/>
+		<field name="checkMark"/>
+		<field name="checkMarkTint" since="21"/>
+		<field name="checkMarkTintMode" since="21"/>
+		<field name="checkable"/>
+		<field name="checkableBehavior"/>
+		<field name="checkboxStyle"/>
+		<field name="checked"/>
+		<field name="checkedButton"/>
+		<field name="checkedTextViewStyle" since="17"/>
+		<field name="childDivider"/>
+		<field name="childIndicator"/>
+		<field name="childIndicatorEnd" since="18"/>
+		<field name="childIndicatorLeft"/>
+		<field name="childIndicatorRight"/>
+		<field name="childIndicatorStart" since="18"/>
+		<field name="choiceMode"/>
+		<field name="classLoader" since="27"/>
+		<field name="clearTaskOnLaunch"/>
+		<field name="clickable"/>
+		<field name="clipChildren"/>
+		<field name="clipOrientation"/>
+		<field name="clipToOutline" since="31"/>
+		<field name="clipToPadding"/>
+		<field name="closeIcon" since="21"/>
+		<field name="codes" since="3" deprecated="29"/>
+		<field name="collapseColumns"/>
+		<field name="collapseContentDescription" since="22"/>
+		<field name="collapseIcon" since="24"/>
+		<field name="color"/>
+		<field name="colorAccent" since="21"/>
+		<field name="colorActivatedHighlight" since="14"/>
+		<field name="colorBackground"/>
+		<field name="colorBackgroundCacheHint" since="5"/>
+		<field name="colorBackgroundFloating" since="23"/>
+		<field name="colorButtonNormal" since="21"/>
+		<field name="colorControlActivated" since="21"/>
+		<field name="colorControlHighlight" since="21"/>
+		<field name="colorControlNormal" since="21"/>
+		<field name="colorEdgeEffect" since="21"/>
+		<field name="colorError" since="26"/>
+		<field name="colorFocusedHighlight" since="14"/>
+		<field name="colorForeground"/>
+		<field name="colorForegroundInverse"/>
+		<field name="colorLongPressedHighlight" since="14"/>
+		<field name="colorMode" since="26"/>
+		<field name="colorMultiSelectHighlight" since="14"/>
+		<field name="colorPressedHighlight" since="14"/>
+		<field name="colorPrimary" since="21"/>
+		<field name="colorPrimaryDark" since="21"/>
+		<field name="colorSecondary" since="25"/>
+		<field name="columnCount" since="14"/>
+		<field name="columnDelay"/>
+		<field name="columnOrderPreserved" since="14"/>
+		<field name="columnWidth"/>
+		<field name="commitIcon" since="21"/>
+		<field name="compatibleWidthLimitDp" since="13"/>
+		<field name="completionHint"/>
+		<field name="completionHintView"/>
+		<field name="completionThreshold"/>
+		<field name="configChanges"/>
+		<field name="configure" since="3"/>
+		<field name="constantSize"/>
+		<field name="content" since="3"/>
+		<field name="contentAgeHint" since="21"/>
+		<field name="contentAuthority" since="5"/>
+		<field name="contentDescription" since="4"/>
+		<field name="contentInsetEnd" since="21"/>
+		<field name="contentInsetEndWithActions" since="24"/>
+		<field name="contentInsetLeft" since="21"/>
+		<field name="contentInsetRight" since="21"/>
+		<field name="contentInsetStart" since="21"/>
+		<field name="contentInsetStartWithNavigation" since="24"/>
+		<field name="contextClickable" since="23"/>
+		<field name="contextDescription" since="25"/>
+		<field name="contextPopupMenuStyle" since="24"/>
+		<field name="contextUri" since="25"/>
+		<field name="controlX1" since="21"/>
+		<field name="controlX2" since="21"/>
+		<field name="controlY1" since="21"/>
+		<field name="controlY2" since="21"/>
+		<field name="countDown" since="24"/>
+		<field name="country" since="21"/>
+		<field name="cropToPadding"/>
+		<field name="crossProfile" since="30"/>
+		<field name="cursorVisible"/>
+		<field name="customNavigationLayout" since="11"/>
+		<field name="customTokens" since="11"/>
+		<field name="cycles"/>
+		<field name="dashGap"/>
+		<field name="dashWidth"/>
+		<field name="data"/>
+		<field name="dataExtractionRules" since="31"/>
+		<field name="datePickerDialogTheme" since="21"/>
+		<field name="datePickerMode" since="21"/>
+		<field name="datePickerStyle" since="11"/>
+		<field name="dateTextAppearance" since="11"/>
+		<field name="dayOfWeekBackground" since="21" deprecated="23"/>
+		<field name="dayOfWeekTextAppearance" since="21" deprecated="23"/>
+		<field name="debuggable"/>
+		<field name="defaultFocusHighlightEnabled" since="26"/>
+		<field name="defaultHeight" since="24"/>
+		<field name="defaultToDeviceProtectedStorage" since="24"/>
+		<field name="defaultValue"/>
+		<field name="defaultWidth" since="24"/>
+		<field name="delay"/>
+		<field name="dependency"/>
+		<field name="descendantFocusability"/>
+		<field name="description"/>
+		<field name="detachWallpaper" since="5"/>
+		<field name="detailColumn" since="5"/>
+		<field name="detailSocialSummary" since="5"/>
+		<field name="detailsElementBackground" since="11"/>
+		<field name="dial"/>
+		<field name="dialTint" since="31"/>
+		<field name="dialTintMode" since="31"/>
+		<field name="dialogCornerRadius" since="28"/>
+		<field name="dialogIcon"/>
+		<field name="dialogLayout"/>
+		<field name="dialogMessage"/>
+		<field name="dialogPreferenceStyle"/>
+		<field name="dialogPreferredPadding" since="22"/>
+		<field name="dialogTheme" since="11"/>
+		<field name="dialogTitle"/>
+		<field name="digits"/>
+		<field name="directBootAware" since="24"/>
+		<field name="direction"/>
+		<field name="directionDescriptions" since="14" deprecated="23"/>
+		<field name="directionPriority"/>
+		<field name="disableDependentsState"/>
+		<field name="disabledAlpha"/>
+		<field name="displayOptions" since="11"/>
+		<field name="dither"/>
+		<field name="divider"/>
+		<field name="dividerHeight"/>
+		<field name="dividerHorizontal" since="11"/>
+		<field name="dividerPadding" since="11"/>
+		<field name="dividerVertical" since="11"/>
+		<field name="documentLaunchMode" since="21"/>
+		<field name="drawSelectorOnTop"/>
+		<field name="drawable"/>
+		<field name="drawableBottom"/>
+		<field name="drawableEnd" since="14"/>
+		<field name="drawableLeft"/>
+		<field name="drawablePadding"/>
+		<field name="drawableRight"/>
+		<field name="drawableStart" since="14"/>
+		<field name="drawableTint" since="23"/>
+		<field name="drawableTintMode" since="23"/>
+		<field name="drawableTop"/>
+		<field name="drawingCacheQuality"/>
+		<field name="dropDownAnchor" since="3"/>
+		<field name="dropDownHeight" since="4"/>
+		<field name="dropDownHintAppearance"/>
+		<field name="dropDownHorizontalOffset" since="5"/>
+		<field name="dropDownItemStyle"/>
+		<field name="dropDownListViewStyle"/>
+		<field name="dropDownSelector"/>
+		<field name="dropDownSpinnerStyle" since="11"/>
+		<field name="dropDownVerticalOffset" since="5"/>
+		<field name="dropDownWidth" since="3"/>
+		<field name="duplicateParentState"/>
+		<field name="duration"/>
+		<field name="editTextBackground" since="11"/>
+		<field name="editTextColor" since="11"/>
+		<field name="editTextPreferenceStyle"/>
+		<field name="editTextStyle"/>
+		<field name="editable" deprecated="15"/>
+		<field name="editorExtras" since="3"/>
+		<field name="effectColor" since="31"/>
+		<field name="elegantTextHeight" since="21"/>
+		<field name="elevation" since="21"/>
+		<field name="ellipsize"/>
+		<field name="ems"/>
+		<field name="enableVrMode" since="24"/>
+		<field name="enabled" deprecated="15"/>
+		<field name="end" since="23"/>
+		<field name="endColor"/>
+		<field name="endX" since="24"/>
+		<field name="endY" since="24"/>
+		<field name="endYear" deprecated="16"/>
+		<field name="enforceNavigationBarContrast" since="29"/>
+		<field name="enforceStatusBarContrast" since="29"/>
+		<field name="enterFadeDuration" since="11"/>
+		<field name="entries"/>
+		<field name="entryValues"/>
+		<field name="eventsInterceptionEnabled" since="4"/>
+		<field name="excludeClass" since="21"/>
+		<field name="excludeFromRecents"/>
+		<field name="excludeId" since="21"/>
+		<field name="excludeName" since="21"/>
+		<field name="exitFadeDuration" since="11"/>
+		<field name="expandableListPreferredChildIndicatorLeft"/>
+		<field name="expandableListPreferredChildIndicatorRight"/>
+		<field name="expandableListPreferredChildPaddingLeft"/>
+		<field name="expandableListPreferredItemIndicatorLeft"/>
+		<field name="expandableListPreferredItemIndicatorRight"/>
+		<field name="expandableListPreferredItemPaddingLeft"/>
+		<field name="expandableListViewStyle"/>
+		<field name="expandableListViewWhiteStyle" since="8"/>
+		<field name="exported"/>
+		<field name="externalService" since="24"/>
+		<field name="extraTension" since="4"/>
+		<field name="extractNativeLibs" since="23"/>
+		<field name="factor"/>
+		<field name="fadeDuration" since="4"/>
+		<field name="fadeEnabled" since="4"/>
+		<field name="fadeOffset" since="4"/>
+		<field name="fadeScrollbars" since="5"/>
+		<field name="fadingEdge" deprecated="15"/>
+		<field name="fadingEdgeLength"/>
+		<field name="fadingMode" since="19"/>
+		<field name="fallbackLineSpacing" since="28"/>
+		<field name="fastScrollAlwaysVisible" since="11"/>
+		<field name="fastScrollEnabled" since="3"/>
+		<field name="fastScrollOverlayPosition" since="11"/>
+		<field name="fastScrollPreviewBackgroundLeft" since="11"/>
+		<field name="fastScrollPreviewBackgroundRight" since="11"/>
+		<field name="fastScrollStyle" since="21"/>
+		<field name="fastScrollTextColor" since="11"/>
+		<field name="fastScrollThumbDrawable" since="11"/>
+		<field name="fastScrollTrackDrawable" since="11"/>
+		<field name="fillAfter"/>
+		<field name="fillAlpha" since="21"/>
+		<field name="fillBefore"/>
+		<field name="fillColor" since="21"/>
+		<field name="fillEnabled" since="3"/>
+		<field name="fillType" since="24"/>
+		<field name="fillViewport"/>
+		<field name="filter"/>
+		<field name="filterTouchesWhenObscured" since="9"/>
+		<field name="fingerprintAuthDrawable" since="23"/>
+		<field name="finishOnCloseSystemDialogs" since="5"/>
+		<field name="finishOnTaskLaunch"/>
+		<field name="firstBaselineToTopHeight" since="28"/>
+		<field name="firstDayOfWeek" since="11"/>
+		<field name="fitsSystemWindows"/>
+		<field name="flipInterval"/>
+		<field name="focusable"/>
+		<field name="focusableInTouchMode"/>
+		<field name="focusedByDefault" since="26"/>
+		<field name="focusedMonthDateColor" since="11" deprecated="23"/>
+		<field name="font" since="26"/>
+		<field name="fontFamily" since="16"/>
+		<field name="fontFeatureSettings" since="21"/>
+		<field name="fontProviderAuthority" since="26" deprecated="31"/>
+		<field name="fontProviderCerts" since="26" deprecated="31"/>
+		<field name="fontProviderPackage" since="26" deprecated="31"/>
+		<field name="fontProviderQuery" since="26" deprecated="31"/>
+		<field name="fontProviderSystemFontFamily" since="31"/>
+		<field name="fontStyle" since="26"/>
+		<field name="fontVariationSettings" since="28"/>
+		<field name="fontWeight" since="26"/>
+		<field name="footerDividersEnabled" since="3"/>
+		<field name="forceDarkAllowed" since="29"/>
+		<field name="forceHasOverlappingRendering" since="24"/>
+		<field name="forceQueryable" since="30"/>
+		<field name="forceUriPermissions" since="29"/>
+		<field name="foreground"/>
+		<field name="foregroundGravity"/>
+		<field name="foregroundServiceType" since="29"/>
+		<field name="foregroundTint" since="21"/>
+		<field name="foregroundTintMode" since="21"/>
+		<field name="format"/>
+		<field name="format12Hour" since="17"/>
+		<field name="format24Hour" since="17"/>
+		<field name="fraction" since="23"/>
+		<field name="fragment" since="11"/>
+		<field name="fragmentAllowEnterTransitionOverlap" since="21"/>
+		<field name="fragmentAllowReturnTransitionOverlap" since="21"/>
+		<field name="fragmentCloseEnterAnimation" since="11"/>
+		<field name="fragmentCloseExitAnimation" since="11"/>
+		<field name="fragmentEnterTransition" since="21"/>
+		<field name="fragmentExitTransition" since="21"/>
+		<field name="fragmentFadeEnterAnimation" since="11"/>
+		<field name="fragmentFadeExitAnimation" since="11"/>
+		<field name="fragmentOpenEnterAnimation" since="11"/>
+		<field name="fragmentOpenExitAnimation" since="11"/>
+		<field name="fragmentReenterTransition" since="21"/>
+		<field name="fragmentReturnTransition" since="21"/>
+		<field name="fragmentSharedElementEnterTransition" since="21"/>
+		<field name="fragmentSharedElementReturnTransition" since="21"/>
+		<field name="freezesText"/>
+		<field name="fromAlpha"/>
+		<field name="fromDegrees"/>
+		<field name="fromId" since="21"/>
+		<field name="fromScene" since="19"/>
+		<field name="fromXDelta"/>
+		<field name="fromXScale"/>
+		<field name="fromYDelta"/>
+		<field name="fromYScale"/>
+		<field name="fullBackupContent" since="23"/>
+		<field name="fullBackupOnly" since="21"/>
+		<field name="fullBright"/>
+		<field name="fullDark"/>
+		<field name="functionalTest"/>
+		<field name="galleryItemBackground"/>
+		<field name="galleryStyle"/>
+		<field name="gestureColor" since="4"/>
+		<field name="gestureStrokeAngleThreshold" since="4"/>
+		<field name="gestureStrokeLengthThreshold" since="4"/>
+		<field name="gestureStrokeSquarenessThreshold" since="4"/>
+		<field name="gestureStrokeType" since="4"/>
+		<field name="gestureStrokeWidth" since="4"/>
+		<field name="glEsVersion" since="4"/>
+		<field name="goIcon" since="21"/>
+		<field name="gradientRadius"/>
+		<field name="grantUriPermissions"/>
+		<field name="gravity"/>
+		<field name="gridViewStyle"/>
+		<field name="groupIndicator"/>
+		<field name="gwpAsanMode" since="30"/>
+		<field name="hand_hour"/>
+		<field name="hand_hourTint" since="31"/>
+		<field name="hand_hourTintMode" since="31"/>
+		<field name="hand_minute"/>
+		<field name="hand_minuteTint" since="31"/>
+		<field name="hand_minuteTintMode" since="31"/>
+		<field name="hand_second" since="31"/>
+		<field name="hand_secondTint" since="31"/>
+		<field name="hand_secondTintMode" since="31"/>
+		<field name="handle" since="3"/>
+		<field name="handleProfiling"/>
+		<field name="hapticFeedbackEnabled" since="3"/>
+		<field name="hardwareAccelerated" since="11"/>
+		<field name="hasCode"/>
+		<field name="hasFragileUserData" since="29"/>
+		<field name="headerAmPmTextAppearance" since="21" deprecated="23"/>
+		<field name="headerBackground"/>
+		<field name="headerDayOfMonthTextAppearance" since="21" deprecated="23"/>
+		<field name="headerDividersEnabled" since="3"/>
+		<field name="headerMonthTextAppearance" since="21" deprecated="23"/>
+		<field name="headerTimeTextAppearance" since="21" deprecated="23"/>
+		<field name="headerYearTextAppearance" since="21" deprecated="23"/>
+		<field name="height"/>
+		<field name="hideOnContentScroll" since="21"/>
+		<field name="hint"/>
+		<field name="homeAsUpIndicator" since="11"/>
+		<field name="homeLayout" since="11"/>
+		<field name="horizontalDivider"/>
+		<field name="horizontalGap" since="3" deprecated="29"/>
+		<field name="horizontalScrollViewStyle" since="11"/>
+		<field name="horizontalSpacing"/>
+		<field name="host"/>
+		<field name="hotSpotX" since="24"/>
+		<field name="hotSpotY" since="24"/>
+		<field name="htmlDescription" since="30"/>
+		<field name="hyphenationFrequency" since="23"/>
+		<field name="icon"/>
+		<field name="iconPreview" since="3" deprecated="29"/>
+		<field name="iconSpaceReserved" since="26"/>
+		<field name="iconTint" since="26"/>
+		<field name="iconTintMode" since="26"/>
+		<field name="iconifiedByDefault" since="11"/>
+		<field name="id"/>
+		<field name="identifier" since="29"/>
+		<field name="ignoreGravity"/>
+		<field name="imageButtonStyle"/>
+		<field name="imageWellStyle"/>
+		<field name="imeActionId" since="3"/>
+		<field name="imeActionLabel" since="3"/>
+		<field name="imeExtractEnterAnimation" since="3"/>
+		<field name="imeExtractExitAnimation" since="3"/>
+		<field name="imeFullscreenBackground" since="3"/>
+		<field name="imeOptions" since="3"/>
+		<field name="imeSubtypeExtraValue" since="11"/>
+		<field name="imeSubtypeLocale" since="11"/>
+		<field name="imeSubtypeMode" since="11"/>
+		<field name="immersive" since="11"/>
+		<field name="importantForAccessibility" since="16"/>
+		<field name="importantForAutofill" since="26"/>
+		<field name="importantForContentCapture" since="30"/>
+		<field name="inAnimation"/>
+		<field name="includeFontPadding"/>
+		<field name="includeInGlobalSearch" since="4"/>
+		<field name="indeterminate"/>
+		<field name="indeterminateBehavior"/>
+		<field name="indeterminateDrawable"/>
+		<field name="indeterminateDuration"/>
+		<field name="indeterminateOnly"/>
+		<field name="indeterminateProgressStyle" since="11"/>
+		<field name="indeterminateTint" since="21"/>
+		<field name="indeterminateTintMode" since="21"/>
+		<field name="indicatorEnd" since="18"/>
+		<field name="indicatorLeft"/>
+		<field name="indicatorRight"/>
+		<field name="indicatorStart" since="18"/>
+		<field name="inflatedId"/>
+		<field name="inheritShowWhenLocked" since="29"/>
+		<field name="initOrder"/>
+		<field name="initialKeyguardLayout" since="17"/>
+		<field name="initialLayout" since="3"/>
+		<field name="innerRadius" since="3"/>
+		<field name="innerRadiusRatio"/>
+		<field name="inputMethod" deprecated="15"/>
+		<field name="inputType" since="3"/>
+		<field name="inset" since="21"/>
+		<field name="insetBottom"/>
+		<field name="insetLeft"/>
+		<field name="insetRight"/>
+		<field name="insetTop"/>
+		<field name="installLocation" since="8"/>
+		<field name="interactiveUiTimeout" since="29"/>
+		<field name="interpolator"/>
+		<field name="isAccessibilityTool" since="31"/>
+		<field name="isAlwaysSyncable" since="11"/>
+		<field name="isAsciiCapable" since="19"/>
+		<field name="isAuxiliary" since="14"/>
+		<field name="isDefault" since="3"/>
+		<field name="isFeatureSplit" since="26"/>
+		<field name="isGame" since="21"/>
+		<field name="isIndicator"/>
+		<field name="isLightTheme" since="29"/>
+		<field name="isModifier" since="3" deprecated="29"/>
+		<field name="isRepeatable" since="3" deprecated="29"/>
+		<field name="isScrollContainer" since="3"/>
+		<field name="isSplitRequired" since="29"/>
+		<field name="isStatic" since="26"/>
+		<field name="isSticky" since="3" deprecated="29"/>
+		<field name="isolatedProcess" since="16"/>
+		<field name="isolatedSplits" since="26"/>
+		<field name="itemBackground"/>
+		<field name="itemIconDisabledAlpha"/>
+		<field name="itemPadding" since="11"/>
+		<field name="itemTextAppearance"/>
+		<field name="justificationMode" since="26"/>
+		<field name="keepScreenOn"/>
+		<field name="key"/>
+		<field name="keyBackground" since="3" deprecated="29"/>
+		<field name="keyEdgeFlags" since="3" deprecated="29"/>
+		<field name="keyHeight" since="3" deprecated="29"/>
+		<field name="keyIcon" since="3" deprecated="29"/>
+		<field name="keyLabel" since="3" deprecated="29"/>
+		<field name="keyOutputText" since="3" deprecated="29"/>
+		<field name="keyPreviewHeight" since="3" deprecated="29"/>
+		<field name="keyPreviewLayout" since="3" deprecated="29"/>
+		<field name="keyPreviewOffset" since="3" deprecated="29"/>
+		<field name="keySet" since="19"/>
+		<field name="keyTextColor" since="3" deprecated="29"/>
+		<field name="keyTextSize" since="3" deprecated="29"/>
+		<field name="keyWidth" since="3" deprecated="29"/>
+		<field name="keyboardLayout" since="16"/>
+		<field name="keyboardMode" since="3" deprecated="29"/>
+		<field name="keyboardNavigationCluster" since="26"/>
+		<field name="keycode"/>
+		<field name="killAfterRestore" since="5"/>
+		<field name="knownCerts" since="31"/>
+		<field name="lStar" since="31"/>
+		<field name="label"/>
+		<field name="labelFor" since="17"/>
+		<field name="labelTextSize" since="3" deprecated="29"/>
+		<field name="languageTag" since="24"/>
+		<field name="largeHeap" since="11"/>
+		<field name="largeScreens" since="4"/>
+		<field name="largestWidthLimitDp" since="13"/>
+		<field name="lastBaselineToBottomHeight" since="28"/>
+		<field name="launchMode"/>
+		<field name="launchTaskBehindSourceAnimation" since="21"/>
+		<field name="launchTaskBehindTargetAnimation" since="21"/>
+		<field name="layerType" since="11"/>
+		<field name="layout"/>
+		<field name="layoutAnimation"/>
+		<field name="layoutDirection" since="17"/>
+		<field name="layoutMode" since="18"/>
+		<field name="layout_above"/>
+		<field name="layout_alignBaseline"/>
+		<field name="layout_alignBottom"/>
+		<field name="layout_alignEnd" since="17"/>
+		<field name="layout_alignLeft"/>
+		<field name="layout_alignParentBottom"/>
+		<field name="layout_alignParentEnd" since="17"/>
+		<field name="layout_alignParentLeft"/>
+		<field name="layout_alignParentRight"/>
+		<field name="layout_alignParentStart" since="17"/>
+		<field name="layout_alignParentTop"/>
+		<field name="layout_alignRight"/>
+		<field name="layout_alignStart" since="17"/>
+		<field name="layout_alignTop"/>
+		<field name="layout_alignWithParentIfMissing"/>
+		<field name="layout_below"/>
+		<field name="layout_centerHorizontal"/>
+		<field name="layout_centerInParent"/>
+		<field name="layout_centerVertical"/>
+		<field name="layout_column"/>
+		<field name="layout_columnSpan" since="14"/>
+		<field name="layout_columnWeight" since="21"/>
+		<field name="layout_gravity"/>
+		<field name="layout_height"/>
+		<field name="layout_margin"/>
+		<field name="layout_marginBottom"/>
+		<field name="layout_marginEnd" since="17"/>
+		<field name="layout_marginHorizontal" since="26"/>
+		<field name="layout_marginLeft"/>
+		<field name="layout_marginRight"/>
+		<field name="layout_marginStart" since="17"/>
+		<field name="layout_marginTop"/>
+		<field name="layout_marginVertical" since="26"/>
+		<field name="layout_row" since="14"/>
+		<field name="layout_rowSpan" since="14"/>
+		<field name="layout_rowWeight" since="21"/>
+		<field name="layout_scale"/>
+		<field name="layout_span"/>
+		<field name="layout_toEndOf" since="17"/>
+		<field name="layout_toLeftOf"/>
+		<field name="layout_toRightOf"/>
+		<field name="layout_toStartOf" since="17"/>
+		<field name="layout_weight"/>
+		<field name="layout_width"/>
+		<field name="layout_x"/>
+		<field name="layout_y"/>
+		<field name="left"/>
+		<field name="letterSpacing" since="21"/>
+		<field name="level" since="24"/>
+		<field name="lineHeight" since="28"/>
+		<field name="lineSpacingExtra"/>
+		<field name="lineSpacingMultiplier"/>
+		<field name="lines"/>
+		<field name="linksClickable"/>
+		<field name="listChoiceBackgroundIndicator" since="11"/>
+		<field name="listChoiceIndicatorMultiple"/>
+		<field name="listChoiceIndicatorSingle"/>
+		<field name="listDivider"/>
+		<field name="listDividerAlertDialog" since="11"/>
+		<field name="listMenuViewStyle" since="24"/>
+		<field name="listPopupWindowStyle" since="11"/>
+		<field name="listPreferredItemHeight"/>
+		<field name="listPreferredItemHeightLarge" since="14"/>
+		<field name="listPreferredItemHeightSmall" since="14"/>
+		<field name="listPreferredItemPaddingEnd" since="17"/>
+		<field name="listPreferredItemPaddingLeft" since="14"/>
+		<field name="listPreferredItemPaddingRight" since="14"/>
+		<field name="listPreferredItemPaddingStart" since="17"/>
+		<field name="listSelector"/>
+		<field name="listSeparatorTextViewStyle"/>
+		<field name="listViewStyle"/>
+		<field name="listViewWhiteStyle"/>
+		<field name="lockTaskMode" since="23"/>
+		<field name="logo" since="11"/>
+		<field name="logoDescription" since="23"/>
+		<field name="longClickable"/>
+		<field name="loopViews" since="11"/>
+		<field name="manageSpaceActivity"/>
+		<field name="mapViewStyle"/>
+		<field name="marqueeRepeatLimit" since="2"/>
+		<field name="matchOrder" since="21"/>
+		<field name="max"/>
+		<field name="maxAspectRatio" since="26"/>
+		<field name="maxButtonHeight" since="24"/>
+		<field name="maxDate" since="11"/>
+		<field name="maxEms"/>
+		<field name="maxHeight"/>
+		<field name="maxItemsPerRow"/>
+		<field name="maxLength"/>
+		<field name="maxLevel"/>
+		<field name="maxLines"/>
+		<field name="maxLongVersionCode" since="28"/>
+		<field name="maxRecents" since="21"/>
+		<field name="maxResizeHeight" since="31"/>
+		<field name="maxResizeWidth" since="31"/>
+		<field name="maxRows"/>
+		<field name="maxSdkVersion" since="4"/>
+		<field name="maxWidth"/>
+		<field name="maximumAngle" since="21"/>
+		<field name="measureAllChildren"/>
+		<field name="measureWithLargestChild" since="11"/>
+		<field name="mediaRouteButtonStyle" since="16"/>
+		<field name="mediaRouteTypes" since="16"/>
+		<field name="memtagMode" since="31"/>
+		<field name="menuCategory"/>
+		<field name="mimeGroup" since="30"/>
+		<field name="mimeType"/>
+		<field name="min" since="26"/>
+		<field name="minAspectRatio" since="29"/>
+		<field name="minDate" since="11"/>
+		<field name="minEms"/>
+		<field name="minHeight"/>
+		<field name="minLevel"/>
+		<field name="minLines"/>
+		<field name="minResizeHeight" since="14"/>
+		<field name="minResizeWidth" since="14"/>
+		<field name="minSdkVersion"/>
+		<field name="minWidth"/>
+		<field name="minimumHorizontalAngle" since="21"/>
+		<field name="minimumVerticalAngle" since="21"/>
+		<field name="mipMap" since="18"/>
+		<field name="mirrorForRtl" since="18"/>
+		<field name="mode"/>
+		<field name="moreIcon"/>
+		<field name="multiArch" since="21"/>
+		<field name="multiprocess"/>
+		<field name="name"/>
+		<field name="nativeHeapZeroInitialized" since="31"/>
+		<field name="navigationBarColor" since="21"/>
+		<field name="navigationBarDividerColor" since="27"/>
+		<field name="navigationContentDescription" since="21"/>
+		<field name="navigationIcon" since="21"/>
+		<field name="navigationMode" since="11"/>
+		<field name="negativeButtonText"/>
+		<field name="nestedScrollingEnabled" since="21"/>
+		<field name="networkSecurityConfig" since="24"/>
+		<field name="nextClusterForward" since="26"/>
+		<field name="nextFocusDown"/>
+		<field name="nextFocusForward" since="11"/>
+		<field name="nextFocusLeft"/>
+		<field name="nextFocusRight"/>
+		<field name="nextFocusUp"/>
+		<field name="noHistory" since="3"/>
+		<field name="nonInteractiveUiTimeout" since="29"/>
+		<field name="normalScreens" since="4"/>
+		<field name="notificationTimeout" since="14"/>
+		<field name="numColumns"/>
+		<field name="numStars"/>
+		<field name="numberPickerStyle" since="24"/>
+		<field name="numbersBackgroundColor" since="21"/>
+		<field name="numbersInnerTextColor" since="23"/>
+		<field name="numbersSelectorColor" since="21"/>
+		<field name="numbersTextColor" since="21"/>
+		<field name="numeric" deprecated="15"/>
+		<field name="numericModifiers" since="26"/>
+		<field name="numericShortcut"/>
+		<field name="offset" since="24"/>
+		<field name="onClick" since="4" deprecated="31"/>
+		<field name="oneshot"/>
+		<field name="opacity" since="11"/>
+		<field name="opticalInsetBottom" since="29"/>
+		<field name="opticalInsetLeft" since="29"/>
+		<field name="opticalInsetRight" since="29"/>
+		<field name="opticalInsetTop" since="29"/>
+		<field name="order"/>
+		<field name="orderInCategory"/>
+		<field name="ordering" since="11"/>
+		<field name="orderingFromXml"/>
+		<field name="orientation"/>
+		<field name="outAnimation"/>
+		<field name="outlineAmbientShadowColor" since="28"/>
+		<field name="outlineProvider" since="21"/>
+		<field name="outlineSpotShadowColor" since="28"/>
+		<field name="overScrollFooter" since="9"/>
+		<field name="overScrollHeader" since="9"/>
+		<field name="overScrollMode" since="9"/>
+		<field name="overlapAnchor" since="21"/>
+		<field name="overridesImplicitlyEnabledSubtype" since="14"/>
+		<field name="packageNames" since="14"/>
+		<field name="packageType" since="29"/>
+		<field name="padding"/>
+		<field name="paddingBottom"/>
+		<field name="paddingEnd" since="17"/>
+		<field name="paddingHorizontal" since="26"/>
+		<field name="paddingLeft"/>
+		<field name="paddingMode" since="21"/>
+		<field name="paddingRight"/>
+		<field name="paddingStart" since="17"/>
+		<field name="paddingTop"/>
+		<field name="paddingVertical" since="26"/>
+		<field name="panelBackground"/>
+		<field name="panelColorBackground"/>
+		<field name="panelColorForeground"/>
+		<field name="panelFullBackground"/>
+		<field name="panelTextAppearance"/>
+		<field name="parentActivityName" since="16"/>
+		<field name="password" deprecated="15"/>
+		<field name="passwordsActivity" since="31"/>
+		<field name="path"/>
+		<field name="pathAdvancedPattern" since="31"/>
+		<field name="pathData" since="21"/>
+		<field name="pathPattern"/>
+		<field name="pathPrefix"/>
+		<field name="pathSuffix" since="31"/>
+		<field name="patternPathData" since="21"/>
+		<field name="permission"/>
+		<field name="permissionFlags" since="17"/>
+		<field name="permissionGroup"/>
+		<field name="permissionGroupFlags" since="17"/>
+		<field name="persistableMode" since="21"/>
+		<field name="persistent"/>
+		<field name="persistentDrawingCache"/>
+		<field name="persistentWhenFeatureAvailable" since="26"/>
+		<field name="phoneNumber" deprecated="15"/>
+		<field name="pivotX"/>
+		<field name="pivotY"/>
+		<field name="pointerIcon" since="24"/>
+		<field name="popupAnimationStyle" since="9"/>
+		<field name="popupBackground"/>
+		<field name="popupCharacters" since="3" deprecated="29"/>
+		<field name="popupElevation" since="21"/>
+		<field name="popupEnterTransition" since="24"/>
+		<field name="popupExitTransition" since="24"/>
+		<field name="popupKeyboard" since="3" deprecated="29"/>
+		<field name="popupLayout" since="3" deprecated="29"/>
+		<field name="popupMenuStyle" since="11"/>
+		<field name="popupTheme" since="21"/>
+		<field name="popupWindowStyle"/>
+		<field name="port"/>
+		<field name="positiveButtonText"/>
+		<field name="preferMinimalPostProcessing" since="30"/>
+		<field name="preferenceCategoryStyle"/>
+		<field name="preferenceFragmentStyle" since="24"/>
+		<field name="preferenceInformationStyle"/>
+		<field name="preferenceLayoutChild"/>
+		<field name="preferenceScreenStyle"/>
+		<field name="preferenceStyle"/>
+		<field name="presentationTheme" since="17"/>
+		<field name="preserveLegacyExternalStorage" since="30"/>
+		<field name="previewImage" since="11"/>
+		<field name="previewLayout" since="31"/>
+		<field name="primaryContentAlpha" since="26"/>
+		<field name="priority"/>
+		<field name="privateImeOptions" since="3"/>
+		<field name="process"/>
+		<field name="progress"/>
+		<field name="progressBackgroundTint" since="21"/>
+		<field name="progressBackgroundTintMode" since="21"/>
+		<field name="progressBarPadding" since="11"/>
+		<field name="progressBarStyle"/>
+		<field name="progressBarStyleHorizontal"/>
+		<field name="progressBarStyleInverse" since="4"/>
+		<field name="progressBarStyleLarge"/>
+		<field name="progressBarStyleLargeInverse" since="4"/>
+		<field name="progressBarStyleSmall"/>
+		<field name="progressBarStyleSmallInverse" since="4"/>
+		<field name="progressBarStyleSmallTitle"/>
+		<field name="progressDrawable"/>
+		<field name="progressTint" since="21"/>
+		<field name="progressTintMode" since="21"/>
+		<field name="prompt"/>
+		<field name="propertyName" since="11"/>
+		<field name="propertyXName" since="21"/>
+		<field name="propertyYName" since="21"/>
+		<field name="protectionLevel"/>
+		<field name="publicKey" since="14"/>
+		<field name="queryActionMsg"/>
+		<field name="queryAfterZeroResults" since="4"/>
+		<field name="queryBackground" since="21"/>
+		<field name="queryHint" since="11"/>
+		<field name="quickContactBadgeStyleSmallWindowLarge" since="6"/>
+		<field name="quickContactBadgeStyleSmallWindowMedium" since="6"/>
+		<field name="quickContactBadgeStyleSmallWindowSmall" since="6"/>
+		<field name="quickContactBadgeStyleWindowLarge" since="6"/>
+		<field name="quickContactBadgeStyleWindowMedium" since="6"/>
+		<field name="quickContactBadgeStyleWindowSmall" since="6"/>
+		<field name="radioButtonStyle"/>
+		<field name="radius"/>
+		<field name="rating"/>
+		<field name="ratingBarStyle"/>
+		<field name="ratingBarStyleIndicator"/>
+		<field name="ratingBarStyleSmall"/>
+		<field name="readPermission"/>
+		<field name="recognitionService" since="21"/>
+		<field name="recreateOnConfigChanges" since="26"/>
+		<field name="recycleEnabled" since="26"/>
+		<field name="relinquishTaskIdentity" since="21"/>
+		<field name="reparent" since="21"/>
+		<field name="reparentWithOverlay" since="21"/>
+		<field name="repeatCount"/>
+		<field name="repeatMode"/>
+		<field name="reqFiveWayNav" since="3"/>
+		<field name="reqHardKeyboard" since="3"/>
+		<field name="reqKeyboardType" since="3"/>
+		<field name="reqNavigation" since="3"/>
+		<field name="reqTouchScreen" since="3"/>
+		<field name="requestLegacyExternalStorage" since="29"/>
+		<field name="requestRawExternalStorageAccess" since="31"/>
+		<field name="requireDeviceScreenOn" since="31"/>
+		<field name="requireDeviceUnlock" since="19"/>
+		<field name="required" since="5"/>
+		<field name="requiredAccountType" since="18"/>
+		<field name="requiredFeature" since="26"/>
+		<field name="requiredForAllUsers" since="18"/>
+		<field name="requiredNotFeature" since="26"/>
+		<field name="requiresFadingEdge" since="14"/>
+		<field name="requiresSmallestWidthDp" since="13"/>
+		<field name="resizeClip" since="22"/>
+		<field name="resizeMode" since="12"/>
+		<field name="resizeable" since="4"/>
+		<field name="resizeableActivity" since="24"/>
+		<field name="resource"/>
+		<field name="resourcesMap" since="30"/>
+		<field name="restoreAnyVersion" since="8"/>
+		<field name="restoreNeedsApplication" since="5" deprecated="15"/>
+		<field name="restrictedAccountType" since="18"/>
+		<field name="restrictionType" since="21"/>
+		<field name="resumeWhilePausing" since="21"/>
+		<field name="reversible" since="21"/>
+		<field name="revisionCode" since="22"/>
+		<field name="right"/>
+		<field name="ringtonePreferenceStyle"/>
+		<field name="ringtoneType"/>
+		<field name="rollbackDataPolicy" since="31"/>
+		<field name="rotation" since="11"/>
+		<field name="rotationAnimation" since="26"/>
+		<field name="rotationX" since="11"/>
+		<field name="rotationY" since="11"/>
+		<field name="roundIcon" since="25"/>
+		<field name="rowCount" since="14"/>
+		<field name="rowDelay"/>
+		<field name="rowEdgeFlags" since="3" deprecated="29"/>
+		<field name="rowHeight"/>
+		<field name="rowOrderPreserved" since="14"/>
+		<field name="saveEnabled"/>
+		<field name="scaleGravity"/>
+		<field name="scaleHeight"/>
+		<field name="scaleType"/>
+		<field name="scaleWidth"/>
+		<field name="scaleX" since="11"/>
+		<field name="scaleY" since="11"/>
+		<field name="scheme"/>
+		<field name="screenDensity" since="9"/>
+		<field name="screenOrientation"/>
+		<field name="screenReaderFocusable" since="28"/>
+		<field name="screenSize" since="9"/>
+		<field name="scrollHorizontally"/>
+		<field name="scrollIndicators" since="23"/>
+		<field name="scrollViewStyle"/>
+		<field name="scrollX"/>
+		<field name="scrollY"/>
+		<field name="scrollbarAlwaysDrawHorizontalTrack"/>
+		<field name="scrollbarAlwaysDrawVerticalTrack"/>
+		<field name="scrollbarDefaultDelayBeforeFade" since="5"/>
+		<field name="scrollbarFadeDuration" since="5"/>
+		<field name="scrollbarSize"/>
+		<field name="scrollbarStyle"/>
+		<field name="scrollbarThumbHorizontal"/>
+		<field name="scrollbarThumbVertical"/>
+		<field name="scrollbarTrackHorizontal"/>
+		<field name="scrollbarTrackVertical"/>
+		<field name="scrollbars"/>
+		<field name="scrollingCache"/>
+		<field name="searchButtonText" deprecated="15"/>
+		<field name="searchHintIcon" since="22"/>
+		<field name="searchIcon" since="21"/>
+		<field name="searchMode"/>
+		<field name="searchSettingsDescription" since="4"/>
+		<field name="searchSuggestAuthority"/>
+		<field name="searchSuggestIntentAction"/>
+		<field name="searchSuggestIntentData"/>
+		<field name="searchSuggestPath"/>
+		<field name="searchSuggestSelection"/>
+		<field name="searchSuggestThreshold" since="4"/>
+		<field name="searchViewStyle" since="21"/>
+		<field name="secondaryContentAlpha" since="26"/>
+		<field name="secondaryProgress"/>
+		<field name="secondaryProgressTint" since="21"/>
+		<field name="secondaryProgressTintMode" since="21"/>
+		<field name="secureElementName" since="29"/>
+		<field name="seekBarStyle"/>
+		<field name="segmentedButtonStyle" since="11"/>
+		<field name="selectAllOnFocus"/>
+		<field name="selectable"/>
+		<field name="selectableAsDefault" since="31"/>
+		<field name="selectableItemBackground" since="11"/>
+		<field name="selectableItemBackgroundBorderless" since="21"/>
+		<field name="selectedDateVerticalBar" since="11" deprecated="23"/>
+		<field name="selectedWeekBackgroundColor" since="11" deprecated="23"/>
+		<field name="selectionDividerHeight" since="29"/>
+		<field name="sessionService" since="21"/>
+		<field name="settingsActivity" since="3"/>
+		<field name="settingsSliceUri" since="29"/>
+		<field name="setupActivity" since="21"/>
+		<field name="shadowColor"/>
+		<field name="shadowDx"/>
+		<field name="shadowDy"/>
+		<field name="shadowRadius"/>
+		<field name="shape"/>
+		<field name="shareInterpolator"/>
+		<field name="sharedUserId" deprecated="29"/>
+		<field name="sharedUserLabel" since="3" deprecated="29"/>
+		<field name="shell" since="29"/>
+		<field name="shortcutDisabledMessage" since="25"/>
+		<field name="shortcutId" since="25"/>
+		<field name="shortcutLongLabel" since="25"/>
+		<field name="shortcutShortLabel" since="25"/>
+		<field name="shouldDisableView"/>
+		<field name="shouldUseDefaultUnfoldTransition" since="33"/>
+		<field name="showAsAction" since="11"/>
+		<field name="showDefault"/>
+		<field name="showDividers" since="11"/>
+		<field name="showForAllUsers" since="23"/>
+		<field name="showInInputMethodPicker" since="31"/>
+		<field name="showMetadataInPreview" since="25"/>
+		<field name="showOnLockScreen" since="17" deprecated="23"/>
+		<field name="showSilent"/>
+		<field name="showText" since="21"/>
+		<field name="showWeekNumber" since="11" deprecated="23"/>
+		<field name="showWhenLocked" since="27"/>
+		<field name="shownWeekCount" since="11" deprecated="23"/>
+		<field name="shrinkColumns"/>
+		<field name="singleLine" deprecated="15"/>
+		<field name="singleLineTitle" since="26"/>
+		<field name="singleUser" since="17"/>
+		<field name="slideEdge" since="21"/>
+		<field name="smallIcon" since="5"/>
+		<field name="smallScreens" since="4"/>
+		<field name="smoothScrollbar" since="3"/>
+		<field name="soundEffectsEnabled"/>
+		<field name="spacing"/>
+		<field name="spinnerDropDownItemStyle"/>
+		<field name="spinnerItemStyle"/>
+		<field name="spinnerMode" since="11"/>
+		<field name="spinnerStyle"/>
+		<field name="spinnersShown" since="11"/>
+		<field name="splashScreenTheme" since="31"/>
+		<field name="splitMotionEvents" since="11"/>
+		<field name="splitName" since="26"/>
+		<field name="splitTrack" since="21"/>
+		<field name="spotShadowAlpha" since="21"/>
+		<field name="src"/>
+		<field name="ssp" since="19"/>
+		<field name="sspAdvancedPattern" since="31"/>
+		<field name="sspPattern" since="19"/>
+		<field name="sspPrefix" since="19"/>
+		<field name="sspSuffix" since="31"/>
+		<field name="stackFromBottom"/>
+		<field name="stackViewStyle" since="21"/>
+		<field name="starStyle"/>
+		<field name="start" since="23"/>
+		<field name="startColor"/>
+		<field name="startDelay" since="19"/>
+		<field name="startOffset"/>
+		<field name="startX" since="24"/>
+		<field name="startY" since="24"/>
+		<field name="startYear" deprecated="16"/>
+		<field name="stateListAnimator" since="21"/>
+		<field name="stateNotNeeded"/>
+		<field name="state_above_anchor"/>
+		<field name="state_accelerated" since="11"/>
+		<field name="state_activated" since="11"/>
+		<field name="state_active"/>
+		<field name="state_checkable"/>
+		<field name="state_checked"/>
+		<field name="state_drag_can_accept" since="14"/>
+		<field name="state_drag_hovered" since="14"/>
+		<field name="state_empty"/>
+		<field name="state_enabled"/>
+		<field name="state_expanded"/>
+		<field name="state_first"/>
+		<field name="state_focused"/>
+		<field name="state_hovered" since="14"/>
+		<field name="state_last"/>
+		<field name="state_long_pressable" since="3" deprecated="29"/>
+		<field name="state_middle"/>
+		<field name="state_multiline" since="11"/>
+		<field name="state_pressed"/>
+		<field name="state_selected"/>
+		<field name="state_single"/>
+		<field name="state_window_focused"/>
+		<field name="staticWallpaperPreview" since="11"/>
+		<field name="statusBarColor" since="21"/>
+		<field name="stepSize"/>
+		<field name="stopWithTask" since="14"/>
+		<field name="streamType"/>
+		<field name="stretchColumns"/>
+		<field name="stretchMode"/>
+		<field name="strokeAlpha" since="21"/>
+		<field name="strokeColor" since="21"/>
+		<field name="strokeLineCap" since="21"/>
+		<field name="strokeLineJoin" since="21"/>
+		<field name="strokeMiterLimit" since="21"/>
+		<field name="strokeWidth" since="21"/>
+		<field name="subMenuArrow" since="24"/>
+		<field name="submitBackground" since="21"/>
+		<field name="subtitle" since="11"/>
+		<field name="subtitleTextAppearance" since="21"/>
+		<field name="subtitleTextColor" since="23"/>
+		<field name="subtitleTextStyle" since="11"/>
+		<field name="subtypeExtraValue" since="14"/>
+		<field name="subtypeId" since="17"/>
+		<field name="subtypeLocale" since="14"/>
+		<field name="suggestActionMsg"/>
+		<field name="suggestActionMsgColumn"/>
+		<field name="suggestionRowLayout" since="21"/>
+		<field name="summary"/>
+		<field name="summaryColumn" since="5"/>
+		<field name="summaryOff"/>
+		<field name="summaryOn"/>
+		<field name="supportsAssist" since="23"/>
+		<field name="supportsInlineSuggestions" since="30"/>
+		<field name="supportsLaunchVoiceAssistFromKeyguard" since="23"/>
+		<field name="supportsLocalInteraction" since="24"/>
+		<field name="supportsMultipleDisplays" since="29"/>
+		<field name="supportsPictureInPicture" since="24"/>
+		<field name="supportsRtl" since="17"/>
+		<field name="supportsSwitchingToNextInputMethod" since="19"/>
+		<field name="supportsUploading" since="5"/>
+		<field name="suppressesSpellChecker" since="31"/>
+		<field name="switchMinWidth" since="14"/>
+		<field name="switchPadding" since="14"/>
+		<field name="switchPreferenceStyle" since="14"/>
+		<field name="switchStyle" since="21"/>
+		<field name="switchTextAppearance" since="14"/>
+		<field name="switchTextOff" since="14"/>
+		<field name="switchTextOn" since="14"/>
+		<field name="syncable"/>
+		<field name="tabStripEnabled" since="8"/>
+		<field name="tabStripLeft" since="8"/>
+		<field name="tabStripRight" since="8"/>
+		<field name="tabWidgetStyle"/>
+		<field name="tag"/>
+		<field name="targetActivity"/>
+		<field name="targetCellHeight" since="31"/>
+		<field name="targetCellWidth" since="31"/>
+		<field name="targetClass"/>
+		<field name="targetDescriptions" since="14" deprecated="23"/>
+		<field name="targetId" since="19"/>
+		<field name="targetName" since="21"/>
+		<field name="targetPackage"/>
+		<field name="targetProcesses" since="26"/>
+		<field name="targetSandboxVersion" since="26" deprecated="29"/>
+		<field name="targetSdkVersion" since="4"/>
+		<field name="taskAffinity"/>
+		<field name="taskCloseEnterAnimation"/>
+		<field name="taskCloseExitAnimation"/>
+		<field name="taskOpenEnterAnimation"/>
+		<field name="taskOpenExitAnimation"/>
+		<field name="taskToBackEnterAnimation"/>
+		<field name="taskToBackExitAnimation"/>
+		<field name="taskToFrontEnterAnimation"/>
+		<field name="taskToFrontExitAnimation"/>
+		<field name="tension" since="4"/>
+		<field name="testOnly" since="4"/>
+		<field name="text"/>
+		<field name="textAlignment" since="17"/>
+		<field name="textAllCaps" since="14"/>
+		<field name="textAppearance"/>
+		<field name="textAppearanceButton"/>
+		<field name="textAppearanceInverse"/>
+		<field name="textAppearanceLarge"/>
+		<field name="textAppearanceLargeInverse"/>
+		<field name="textAppearanceLargePopupMenu" since="11"/>
+		<field name="textAppearanceListItem" since="14"/>
+		<field name="textAppearanceListItemSecondary" since="21"/>
+		<field name="textAppearanceListItemSmall" since="14"/>
+		<field name="textAppearanceMedium"/>
+		<field name="textAppearanceMediumInverse"/>
+		<field name="textAppearancePopupMenuHeader" since="24"/>
+		<field name="textAppearanceSearchResultSubtitle" since="5"/>
+		<field name="textAppearanceSearchResultTitle" since="5"/>
+		<field name="textAppearanceSmall"/>
+		<field name="textAppearanceSmallInverse"/>
+		<field name="textAppearanceSmallPopupMenu" since="11"/>
+		<field name="textCheckMark"/>
+		<field name="textCheckMarkInverse"/>
+		<field name="textColor"/>
+		<field name="textColorAlertDialogListItem" since="11"/>
+		<field name="textColorHighlight"/>
+		<field name="textColorHighlightInverse" since="11"/>
+		<field name="textColorHint"/>
+		<field name="textColorHintInverse"/>
+		<field name="textColorLink"/>
+		<field name="textColorLinkInverse" since="11"/>
+		<field name="textColorPrimary"/>
+		<field name="textColorPrimaryDisableOnly"/>
+		<field name="textColorPrimaryInverse"/>
+		<field name="textColorPrimaryInverseDisableOnly" since="4"/>
+		<field name="textColorPrimaryInverseNoDisable"/>
+		<field name="textColorPrimaryNoDisable"/>
+		<field name="textColorSecondary"/>
+		<field name="textColorSecondaryInverse"/>
+		<field name="textColorSecondaryInverseNoDisable"/>
+		<field name="textColorSecondaryNoDisable"/>
+		<field name="textColorTertiary"/>
+		<field name="textColorTertiaryInverse"/>
+		<field name="textCursorDrawable" since="12"/>
+		<field name="textDirection" since="17"/>
+		<field name="textEditNoPasteWindowLayout" since="11"/>
+		<field name="textEditPasteWindowLayout" since="11"/>
+		<field name="textEditSideNoPasteWindowLayout" since="11"/>
+		<field name="textEditSidePasteWindowLayout" since="11"/>
+		<field name="textEditSuggestionItemLayout" since="14"/>
+		<field name="textFilterEnabled"/>
+		<field name="textFontWeight" since="28"/>
+		<field name="textIsSelectable" since="11"/>
+		<field name="textLocale" since="29"/>
+		<field name="textOff"/>
+		<field name="textOn"/>
+		<field name="textScaleX"/>
+		<field name="textSelectHandle" since="9"/>
+		<field name="textSelectHandleLeft" since="9"/>
+		<field name="textSelectHandleRight" since="9"/>
+		<field name="textSelectHandleWindowStyle" since="9"/>
+		<field name="textSize"/>
+		<field name="textStyle"/>
+		<field name="textSuggestionsWindowStyle" since="14"/>
+		<field name="textViewStyle"/>
+		<field name="theme"/>
+		<field name="thickness" since="3"/>
+		<field name="thicknessRatio"/>
+		<field name="thumb"/>
+		<field name="thumbOffset"/>
+		<field name="thumbPosition" since="23"/>
+		<field name="thumbTextPadding" since="14"/>
+		<field name="thumbTint" since="21"/>
+		<field name="thumbTintMode" since="21"/>
+		<field name="thumbnail" since="5"/>
+		<field name="tickMark" since="24"/>
+		<field name="tickMarkTint" since="24"/>
+		<field name="tickMarkTintMode" since="24"/>
+		<field name="tileMode"/>
+		<field name="tileModeX" since="21"/>
+		<field name="tileModeY" since="21"/>
+		<field name="timePickerDialogTheme" since="21"/>
+		<field name="timePickerMode" since="21"/>
+		<field name="timePickerStyle" since="21"/>
+		<field name="timeZone" since="17"/>
+		<field name="tint"/>
+		<field name="tintMode" since="21"/>
+		<field name="title"/>
+		<field name="titleCondensed"/>
+		<field name="titleMargin" since="24"/>
+		<field name="titleMarginBottom" since="24"/>
+		<field name="titleMarginEnd" since="24"/>
+		<field name="titleMarginStart" since="24"/>
+		<field name="titleMarginTop" since="24"/>
+		<field name="titleTextAppearance" since="21"/>
+		<field name="titleTextColor" since="23"/>
+		<field name="titleTextStyle" since="11"/>
+		<field name="toAlpha"/>
+		<field name="toDegrees"/>
+		<field name="toId" since="21"/>
+		<field name="toScene" since="19"/>
+		<field name="toXDelta"/>
+		<field name="toXScale"/>
+		<field name="toYDelta"/>
+		<field name="toYScale"/>
+		<field name="toolbarStyle" since="21"/>
+		<field name="tooltipText" since="26"/>
+		<field name="top"/>
+		<field name="topBright"/>
+		<field name="topDark"/>
+		<field name="topLeftRadius"/>
+		<field name="topOffset" since="3"/>
+		<field name="topRightRadius"/>
+		<field name="touchscreenBlocksFocus" since="21"/>
+		<field name="track" since="14"/>
+		<field name="trackTint" since="23"/>
+		<field name="trackTintMode" since="23"/>
+		<field name="transcriptMode"/>
+		<field name="transformPivotX" since="11"/>
+		<field name="transformPivotY" since="11"/>
+		<field name="transition" since="19"/>
+		<field name="transitionGroup" since="21"/>
+		<field name="transitionName" since="21"/>
+		<field name="transitionOrdering" since="19"/>
+		<field name="transitionVisibilityMode" since="21"/>
+		<field name="translateX" since="21"/>
+		<field name="translateY" since="21"/>
+		<field name="translationX" since="11"/>
+		<field name="translationY" since="11"/>
+		<field name="translationZ" since="21"/>
+		<field name="trimPathEnd" since="21"/>
+		<field name="trimPathOffset" since="21"/>
+		<field name="trimPathStart" since="21"/>
+		<field name="ttcIndex" since="28"/>
+		<field name="tunerCount" since="24"/>
+		<field name="turnScreenOn" since="27"/>
+		<field name="type"/>
+		<field name="typeface"/>
+		<field name="uiOptions" since="14"/>
+		<field name="uncertainGestureColor" since="4"/>
+		<field name="unfocusedMonthDateColor" since="11" deprecated="23"/>
+		<field name="unselectedAlpha"/>
+		<field name="updatePeriodMillis" since="3"/>
+		<field name="use32bitAbi" since="24"/>
+		<field name="useAppZygote" since="29"/>
+		<field name="useDefaultMargins" since="14"/>
+		<field name="useEmbeddedDex" since="29"/>
+		<field name="useIntrinsicSizeAsMinimum" since="11"/>
+		<field name="useLevel"/>
+		<field name="userVisible" since="5"/>
+		<field name="usesCleartextTraffic" since="23"/>
+		<field name="usesPermissionFlags" since="31"/>
+		<field name="value"/>
+		<field name="valueFrom" since="11"/>
+		<field name="valueTo" since="11"/>
+		<field name="valueType" since="11"/>
+		<field name="variablePadding"/>
+		<field name="vendor" since="19"/>
+		<field name="version" since="24"/>
+		<field name="versionCode"/>
+		<field name="versionCodeMajor" since="28"/>
+		<field name="versionMajor" since="28"/>
+		<field name="versionName"/>
+		<field name="verticalCorrection" since="3" deprecated="29"/>
+		<field name="verticalDivider"/>
+		<field name="verticalGap" since="3" deprecated="29"/>
+		<field name="verticalScrollbarPosition" since="11"/>
+		<field name="verticalSpacing"/>
+		<field name="viewportHeight" since="21"/>
+		<field name="viewportWidth" since="21"/>
+		<field name="visibility"/>
+		<field name="visible"/>
+		<field name="visibleToInstantApps" since="26"/>
+		<field name="vmSafeMode" since="8"/>
+		<field name="voiceIcon" since="21"/>
+		<field name="voiceLanguage" since="3"/>
+		<field name="voiceLanguageModel" since="3"/>
+		<field name="voiceMaxResults" since="3"/>
+		<field name="voicePromptText" since="3"/>
+		<field name="voiceSearchMode" since="3"/>
+		<field name="wallpaperCloseEnterAnimation" since="5"/>
+		<field name="wallpaperCloseExitAnimation" since="5"/>
+		<field name="wallpaperIntraCloseEnterAnimation" since="5"/>
+		<field name="wallpaperIntraCloseExitAnimation" since="5"/>
+		<field name="wallpaperIntraOpenEnterAnimation" since="5"/>
+		<field name="wallpaperIntraOpenExitAnimation" since="5"/>
+		<field name="wallpaperOpenEnterAnimation" since="5"/>
+		<field name="wallpaperOpenExitAnimation" since="5"/>
+		<field name="webTextViewStyle" since="8"/>
+		<field name="webViewStyle"/>
+		<field name="weekDayTextAppearance" since="11"/>
+		<field name="weekNumberColor" since="11" deprecated="23"/>
+		<field name="weekSeparatorLineColor" since="11" deprecated="23"/>
+		<field name="weightSum"/>
+		<field name="widgetCategory" since="17"/>
+		<field name="widgetFeatures" since="28"/>
+		<field name="widgetLayout"/>
+		<field name="width"/>
+		<field name="windowActionBar" since="11"/>
+		<field name="windowActionBarOverlay" since="11"/>
+		<field name="windowActionModeOverlay" since="11"/>
+		<field name="windowActivityTransitions" since="21"/>
+		<field name="windowAllowEnterTransitionOverlap" since="21"/>
+		<field name="windowAllowReturnTransitionOverlap" since="21"/>
+		<field name="windowAnimationStyle"/>
+		<field name="windowBackground"/>
+		<field name="windowBackgroundBlurRadius" since="31"/>
+		<field name="windowBackgroundFallback" since="24"/>
+		<field name="windowBlurBehindEnabled" since="31"/>
+		<field name="windowBlurBehindRadius" since="31"/>
+		<field name="windowClipToOutline" since="21"/>
+		<field name="windowCloseOnTouchOutside" since="11"/>
+		<field name="windowContentOverlay"/>
+		<field name="windowContentTransitionManager" since="21"/>
+		<field name="windowContentTransitions" since="21"/>
+		<field name="windowDisablePreview" since="3"/>
+		<field name="windowDrawsSystemBarBackgrounds" since="21"/>
+		<field name="windowElevation" since="21"/>
+		<field name="windowEnableSplitTouch" since="11"/>
+		<field name="windowEnterAnimation"/>
+		<field name="windowEnterTransition" since="21"/>
+		<field name="windowExitAnimation"/>
+		<field name="windowExitTransition" since="21"/>
+		<field name="windowFrame"/>
+		<field name="windowFullscreen"/>
+		<field name="windowHideAnimation"/>
+		<field name="windowIsFloating"/>
+		<field name="windowIsTranslucent"/>
+		<field name="windowLayoutAffinity" since="31"/>
+		<field name="windowLayoutInDisplayCutoutMode" since="27"/>
+		<field name="windowLightNavigationBar" since="27"/>
+		<field name="windowLightStatusBar" since="23"/>
+		<field name="windowMinWidthMajor" since="11"/>
+		<field name="windowMinWidthMinor" since="11"/>
+		<field name="windowNoDisplay" since="3"/>
+		<field name="windowNoTitle"/>
+		<field name="windowOverscan" since="18" deprecated="30"/>
+		<field name="windowReenterTransition" since="21"/>
+		<field name="windowReturnTransition" since="21"/>
+		<field name="windowSharedElementEnterTransition" since="21"/>
+		<field name="windowSharedElementExitTransition" since="21"/>
+		<field name="windowSharedElementReenterTransition" since="21"/>
+		<field name="windowSharedElementReturnTransition" since="21"/>
+		<field name="windowSharedElementsUseOverlay" since="21"/>
+		<field name="windowShowAnimation"/>
+		<field name="windowShowWallpaper" since="5"/>
+		<field name="windowSoftInputMode" since="3"/>
+		<field name="windowSplashScreenAnimatedIcon" since="31"/>
+		<field name="windowSplashScreenAnimationDuration" since="31"/>
+		<field name="windowSplashScreenBackground" since="31"/>
+		<field name="windowSplashScreenBrandingImage" since="31"/>
+		<field name="windowSplashScreenIconBackgroundColor" since="31"/>
+		<field name="windowSplashscreenContent" since="26" deprecated="31"/>
+		<field name="windowSwipeToDismiss" since="20" deprecated="30"/>
+		<field name="windowTitleBackgroundStyle"/>
+		<field name="windowTitleSize"/>
+		<field name="windowTitleStyle"/>
+		<field name="windowTransitionBackgroundFadeDuration" since="21"/>
+		<field name="windowTranslucentNavigation" since="19"/>
+		<field name="windowTranslucentStatus" since="19"/>
+		<field name="writePermission"/>
+		<field name="x"/>
+		<field name="xlargeScreens" since="9"/>
+		<field name="y"/>
+		<field name="yearListItemTextAppearance" since="21" deprecated="23"/>
+		<field name="yearListSelectorColor" since="21" deprecated="23"/>
+		<field name="yesNoPreferenceStyle"/>
+		<field name="zAdjustment"/>
+		<field name="zygotePreloadName" since="29"/>
+	</class>
+	<class name="android/R$bool" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/R$color" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="background_dark"/>
+		<field name="background_light"/>
+		<field name="black"/>
+		<field name="darker_gray"/>
+		<field name="holo_blue_bright" since="14"/>
+		<field name="holo_blue_dark" since="14"/>
+		<field name="holo_blue_light" since="14"/>
+		<field name="holo_green_dark" since="14"/>
+		<field name="holo_green_light" since="14"/>
+		<field name="holo_orange_dark" since="14"/>
+		<field name="holo_orange_light" since="14"/>
+		<field name="holo_purple" since="14"/>
+		<field name="holo_red_dark" since="14"/>
+		<field name="holo_red_light" since="14"/>
+		<field name="primary_text_dark" deprecated="28"/>
+		<field name="primary_text_dark_nodisable" deprecated="28"/>
+		<field name="primary_text_light" deprecated="28"/>
+		<field name="primary_text_light_nodisable" deprecated="28"/>
+		<field name="secondary_text_dark" deprecated="28"/>
+		<field name="secondary_text_dark_nodisable" deprecated="28"/>
+		<field name="secondary_text_light" deprecated="28"/>
+		<field name="secondary_text_light_nodisable" deprecated="28"/>
+		<field name="system_accent1_0" since="31"/>
+		<field name="system_accent1_10" since="31"/>
+		<field name="system_accent1_100" since="31"/>
+		<field name="system_accent1_1000" since="31"/>
+		<field name="system_accent1_200" since="31"/>
+		<field name="system_accent1_300" since="31"/>
+		<field name="system_accent1_400" since="31"/>
+		<field name="system_accent1_50" since="31"/>
+		<field name="system_accent1_500" since="31"/>
+		<field name="system_accent1_600" since="31"/>
+		<field name="system_accent1_700" since="31"/>
+		<field name="system_accent1_800" since="31"/>
+		<field name="system_accent1_900" since="31"/>
+		<field name="system_accent2_0" since="31"/>
+		<field name="system_accent2_10" since="31"/>
+		<field name="system_accent2_100" since="31"/>
+		<field name="system_accent2_1000" since="31"/>
+		<field name="system_accent2_200" since="31"/>
+		<field name="system_accent2_300" since="31"/>
+		<field name="system_accent2_400" since="31"/>
+		<field name="system_accent2_50" since="31"/>
+		<field name="system_accent2_500" since="31"/>
+		<field name="system_accent2_600" since="31"/>
+		<field name="system_accent2_700" since="31"/>
+		<field name="system_accent2_800" since="31"/>
+		<field name="system_accent2_900" since="31"/>
+		<field name="system_accent3_0" since="31"/>
+		<field name="system_accent3_10" since="31"/>
+		<field name="system_accent3_100" since="31"/>
+		<field name="system_accent3_1000" since="31"/>
+		<field name="system_accent3_200" since="31"/>
+		<field name="system_accent3_300" since="31"/>
+		<field name="system_accent3_400" since="31"/>
+		<field name="system_accent3_50" since="31"/>
+		<field name="system_accent3_500" since="31"/>
+		<field name="system_accent3_600" since="31"/>
+		<field name="system_accent3_700" since="31"/>
+		<field name="system_accent3_800" since="31"/>
+		<field name="system_accent3_900" since="31"/>
+		<field name="system_neutral1_0" since="31"/>
+		<field name="system_neutral1_10" since="31"/>
+		<field name="system_neutral1_100" since="31"/>
+		<field name="system_neutral1_1000" since="31"/>
+		<field name="system_neutral1_200" since="31"/>
+		<field name="system_neutral1_300" since="31"/>
+		<field name="system_neutral1_400" since="31"/>
+		<field name="system_neutral1_50" since="31"/>
+		<field name="system_neutral1_500" since="31"/>
+		<field name="system_neutral1_600" since="31"/>
+		<field name="system_neutral1_700" since="31"/>
+		<field name="system_neutral1_800" since="31"/>
+		<field name="system_neutral1_900" since="31"/>
+		<field name="system_neutral2_0" since="31"/>
+		<field name="system_neutral2_10" since="31"/>
+		<field name="system_neutral2_100" since="31"/>
+		<field name="system_neutral2_1000" since="31"/>
+		<field name="system_neutral2_200" since="31"/>
+		<field name="system_neutral2_300" since="31"/>
+		<field name="system_neutral2_400" since="31"/>
+		<field name="system_neutral2_50" since="31"/>
+		<field name="system_neutral2_500" since="31"/>
+		<field name="system_neutral2_600" since="31"/>
+		<field name="system_neutral2_700" since="31"/>
+		<field name="system_neutral2_800" since="31"/>
+		<field name="system_neutral2_900" since="31"/>
+		<field name="tab_indicator_text"/>
+		<field name="tertiary_text_dark" deprecated="28"/>
+		<field name="tertiary_text_light" deprecated="28"/>
+		<field name="transparent"/>
+		<field name="white"/>
+		<field name="widget_edittext_dark"/>
+	</class>
+	<class name="android/R$dimen" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="app_icon_size"/>
+		<field name="dialog_min_width_major" since="11"/>
+		<field name="dialog_min_width_minor" since="11"/>
+		<field name="notification_large_icon_height" since="11"/>
+		<field name="notification_large_icon_width" since="11"/>
+		<field name="system_app_widget_background_radius" since="31"/>
+		<field name="system_app_widget_inner_radius" since="31"/>
+		<field name="thumbnail_height"/>
+		<field name="thumbnail_width"/>
+	</class>
+	<class name="android/R$drawable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="alert_dark_frame"/>
+		<field name="alert_light_frame"/>
+		<field name="arrow_down_float"/>
+		<field name="arrow_up_float"/>
+		<field name="bottom_bar"/>
+		<field name="btn_default"/>
+		<field name="btn_default_small"/>
+		<field name="btn_dialog"/>
+		<field name="btn_dropdown"/>
+		<field name="btn_minus"/>
+		<field name="btn_plus"/>
+		<field name="btn_radio"/>
+		<field name="btn_star"/>
+		<field name="btn_star_big_off"/>
+		<field name="btn_star_big_on"/>
+		<field name="button_onoff_indicator_off"/>
+		<field name="button_onoff_indicator_on"/>
+		<field name="checkbox_off_background"/>
+		<field name="checkbox_on_background"/>
+		<field name="dark_header" since="3"/>
+		<field name="dialog_frame"/>
+		<field name="dialog_holo_dark_frame" since="11"/>
+		<field name="dialog_holo_light_frame" since="11"/>
+		<field name="divider_horizontal_bright"/>
+		<field name="divider_horizontal_dark"/>
+		<field name="divider_horizontal_dim_dark"/>
+		<field name="divider_horizontal_textfield"/>
+		<field name="edit_text"/>
+		<field name="editbox_background"/>
+		<field name="editbox_background_normal"/>
+		<field name="editbox_dropdown_dark_frame"/>
+		<field name="editbox_dropdown_light_frame"/>
+		<field name="gallery_thumb"/>
+		<field name="ic_btn_speak_now" since="3"/>
+		<field name="ic_delete"/>
+		<field name="ic_dialog_alert"/>
+		<field name="ic_dialog_dialer"/>
+		<field name="ic_dialog_email"/>
+		<field name="ic_dialog_info"/>
+		<field name="ic_dialog_map"/>
+		<field name="ic_input_add"/>
+		<field name="ic_input_delete"/>
+		<field name="ic_input_get"/>
+		<field name="ic_lock_idle_alarm"/>
+		<field name="ic_lock_idle_charging"/>
+		<field name="ic_lock_idle_lock"/>
+		<field name="ic_lock_idle_low_battery"/>
+		<field name="ic_lock_lock"/>
+		<field name="ic_lock_power_off"/>
+		<field name="ic_lock_silent_mode"/>
+		<field name="ic_lock_silent_mode_off"/>
+		<field name="ic_media_ff"/>
+		<field name="ic_media_next"/>
+		<field name="ic_media_pause"/>
+		<field name="ic_media_play"/>
+		<field name="ic_media_previous"/>
+		<field name="ic_media_rew"/>
+		<field name="ic_menu_add"/>
+		<field name="ic_menu_agenda"/>
+		<field name="ic_menu_always_landscape_portrait"/>
+		<field name="ic_menu_call"/>
+		<field name="ic_menu_camera"/>
+		<field name="ic_menu_close_clear_cancel"/>
+		<field name="ic_menu_compass"/>
+		<field name="ic_menu_crop"/>
+		<field name="ic_menu_day"/>
+		<field name="ic_menu_delete"/>
+		<field name="ic_menu_directions"/>
+		<field name="ic_menu_edit"/>
+		<field name="ic_menu_gallery"/>
+		<field name="ic_menu_help"/>
+		<field name="ic_menu_info_details"/>
+		<field name="ic_menu_manage"/>
+		<field name="ic_menu_mapmode"/>
+		<field name="ic_menu_month"/>
+		<field name="ic_menu_more"/>
+		<field name="ic_menu_my_calendar"/>
+		<field name="ic_menu_mylocation"/>
+		<field name="ic_menu_myplaces"/>
+		<field name="ic_menu_preferences"/>
+		<field name="ic_menu_recent_history"/>
+		<field name="ic_menu_report_image"/>
+		<field name="ic_menu_revert"/>
+		<field name="ic_menu_rotate"/>
+		<field name="ic_menu_save"/>
+		<field name="ic_menu_search"/>
+		<field name="ic_menu_send"/>
+		<field name="ic_menu_set_as"/>
+		<field name="ic_menu_share"/>
+		<field name="ic_menu_slideshow"/>
+		<field name="ic_menu_sort_alphabetically"/>
+		<field name="ic_menu_sort_by_size"/>
+		<field name="ic_menu_today"/>
+		<field name="ic_menu_upload"/>
+		<field name="ic_menu_upload_you_tube"/>
+		<field name="ic_menu_view"/>
+		<field name="ic_menu_week"/>
+		<field name="ic_menu_zoom"/>
+		<field name="ic_notification_clear_all"/>
+		<field name="ic_notification_overlay"/>
+		<field name="ic_partial_secure"/>
+		<field name="ic_popup_disk_full"/>
+		<field name="ic_popup_reminder"/>
+		<field name="ic_popup_sync"/>
+		<field name="ic_search_category_default"/>
+		<field name="ic_secure"/>
+		<field name="list_selector_background"/>
+		<field name="menu_frame"/>
+		<field name="menu_full_frame"/>
+		<field name="menuitem_background"/>
+		<field name="picture_frame"/>
+		<field name="presence_audio_away" since="9"/>
+		<field name="presence_audio_busy" since="9"/>
+		<field name="presence_audio_online" since="9"/>
+		<field name="presence_away"/>
+		<field name="presence_busy"/>
+		<field name="presence_invisible"/>
+		<field name="presence_offline"/>
+		<field name="presence_online"/>
+		<field name="presence_video_away" since="9"/>
+		<field name="presence_video_busy" since="9"/>
+		<field name="presence_video_online" since="9"/>
+		<field name="progress_horizontal"/>
+		<field name="progress_indeterminate_horizontal"/>
+		<field name="radiobutton_off_background"/>
+		<field name="radiobutton_on_background"/>
+		<field name="screen_background_dark"/>
+		<field name="screen_background_dark_transparent" since="5"/>
+		<field name="screen_background_light"/>
+		<field name="screen_background_light_transparent" since="5"/>
+		<field name="spinner_background"/>
+		<field name="spinner_dropdown_background"/>
+		<field name="star_big_off"/>
+		<field name="star_big_on"/>
+		<field name="star_off"/>
+		<field name="star_on"/>
+		<field name="stat_notify_call_mute"/>
+		<field name="stat_notify_chat"/>
+		<field name="stat_notify_error"/>
+		<field name="stat_notify_missed_call"/>
+		<field name="stat_notify_more"/>
+		<field name="stat_notify_sdcard"/>
+		<field name="stat_notify_sdcard_prepare" since="5"/>
+		<field name="stat_notify_sdcard_usb"/>
+		<field name="stat_notify_sync"/>
+		<field name="stat_notify_sync_noanim"/>
+		<field name="stat_notify_voicemail"/>
+		<field name="stat_sys_data_bluetooth"/>
+		<field name="stat_sys_download"/>
+		<field name="stat_sys_download_done"/>
+		<field name="stat_sys_headset"/>
+		<field name="stat_sys_phone_call" deprecated="15"/>
+		<field name="stat_sys_phone_call_forward" deprecated="15"/>
+		<field name="stat_sys_phone_call_on_hold" deprecated="15"/>
+		<field name="stat_sys_speakerphone"/>
+		<field name="stat_sys_upload"/>
+		<field name="stat_sys_upload_done"/>
+		<field name="stat_sys_vp_phone_call" since="4" deprecated="15"/>
+		<field name="stat_sys_vp_phone_call_on_hold" since="4" deprecated="15"/>
+		<field name="stat_sys_warning"/>
+		<field name="status_bar_item_app_background"/>
+		<field name="status_bar_item_background"/>
+		<field name="sym_action_call"/>
+		<field name="sym_action_chat"/>
+		<field name="sym_action_email"/>
+		<field name="sym_call_incoming"/>
+		<field name="sym_call_missed"/>
+		<field name="sym_call_outgoing"/>
+		<field name="sym_contact_card"/>
+		<field name="sym_def_app_icon"/>
+		<field name="title_bar"/>
+		<field name="title_bar_tall" since="3"/>
+		<field name="toast_frame"/>
+		<field name="zoom_plate"/>
+	</class>
+	<class name="android/R$fraction" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/R$id" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="accessibilityActionContextClick" since="23"/>
+		<field name="accessibilityActionDragCancel" since="33"/>
+		<field name="accessibilityActionDragDrop" since="33"/>
+		<field name="accessibilityActionDragStart" since="33"/>
+		<field name="accessibilityActionHideTooltip" since="28"/>
+		<field name="accessibilityActionImeEnter" since="30"/>
+		<field name="accessibilityActionMoveWindow" since="26"/>
+		<field name="accessibilityActionPageDown" since="29"/>
+		<field name="accessibilityActionPageLeft" since="29"/>
+		<field name="accessibilityActionPageRight" since="29"/>
+		<field name="accessibilityActionPageUp" since="29"/>
+		<field name="accessibilityActionPressAndHold" since="30"/>
+		<field name="accessibilityActionScrollDown" since="23"/>
+		<field name="accessibilityActionScrollLeft" since="23"/>
+		<field name="accessibilityActionScrollRight" since="23"/>
+		<field name="accessibilityActionScrollToPosition" since="23"/>
+		<field name="accessibilityActionScrollUp" since="23"/>
+		<field name="accessibilityActionSetProgress" since="24"/>
+		<field name="accessibilityActionShowOnScreen" since="23"/>
+		<field name="accessibilityActionShowTooltip" since="28"/>
+		<field name="accessibilitySystemActionBack" since="30"/>
+		<field name="accessibilitySystemActionHome" since="30"/>
+		<field name="accessibilitySystemActionLockScreen" since="30"/>
+		<field name="accessibilitySystemActionNotifications" since="30"/>
+		<field name="accessibilitySystemActionPowerDialog" since="30"/>
+		<field name="accessibilitySystemActionQuickSettings" since="30"/>
+		<field name="accessibilitySystemActionRecents" since="30"/>
+		<field name="accessibilitySystemActionTakeScreenshot" since="30"/>
+		<field name="accessibilitySystemActionToggleSplitScreen" since="30"/>
+		<field name="addToDictionary" since="3"/>
+		<field name="autofill" since="26"/>
+		<field name="background"/>
+		<field name="button1"/>
+		<field name="button2"/>
+		<field name="button3"/>
+		<field name="candidatesArea" since="3"/>
+		<field name="checkbox"/>
+		<field name="closeButton" since="3"/>
+		<field name="content"/>
+		<field name="copy" since="3"/>
+		<field name="copyUrl" since="3"/>
+		<field name="custom" since="8"/>
+		<field name="cut" since="3"/>
+		<field name="edit"/>
+		<field name="empty"/>
+		<field name="extractArea" since="3"/>
+		<field name="hint"/>
+		<field name="home" since="11"/>
+		<field name="icon"/>
+		<field name="icon1"/>
+		<field name="icon2"/>
+		<field name="icon_frame" since="24"/>
+		<field name="input"/>
+		<field name="inputArea" since="3"/>
+		<field name="inputExtractEditText" since="3"/>
+		<field name="keyboardView" since="3" deprecated="29"/>
+		<field name="list"/>
+		<field name="list_container" since="24"/>
+		<field name="mask" since="21"/>
+		<field name="message"/>
+		<field name="navigationBarBackground" since="21"/>
+		<field name="paste" since="3"/>
+		<field name="pasteAsPlainText" since="23"/>
+		<field name="primary"/>
+		<field name="progress"/>
+		<field name="redo" since="23"/>
+		<field name="replaceText" since="23"/>
+		<field name="secondaryProgress"/>
+		<field name="selectAll" since="3"/>
+		<field name="selectTextMode" since="11"/>
+		<field name="selectedIcon"/>
+		<field name="shareText" since="23"/>
+		<field name="startSelectingText" since="3"/>
+		<field name="statusBarBackground" since="21"/>
+		<field name="stopSelectingText" since="3"/>
+		<field name="summary"/>
+		<field name="switchInputMethod" since="3"/>
+		<field name="switch_widget" since="24"/>
+		<field name="tabcontent"/>
+		<field name="tabhost"/>
+		<field name="tabs"/>
+		<field name="text1"/>
+		<field name="text2"/>
+		<field name="textAssist" since="26"/>
+		<field name="title"/>
+		<field name="toggle"/>
+		<field name="undo" since="23"/>
+		<field name="widget_frame"/>
+	</class>
+	<class name="android/R$integer" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="config_longAnimTime"/>
+		<field name="config_mediumAnimTime"/>
+		<field name="config_shortAnimTime"/>
+		<field name="status_bar_notification_info_maxnum" since="14"/>
+	</class>
+	<class name="android/R$interpolator" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="accelerate_cubic"/>
+		<field name="accelerate_decelerate"/>
+		<field name="accelerate_quad"/>
+		<field name="accelerate_quint"/>
+		<field name="anticipate"/>
+		<field name="anticipate_overshoot"/>
+		<field name="bounce"/>
+		<field name="cycle"/>
+		<field name="decelerate_cubic"/>
+		<field name="decelerate_quad"/>
+		<field name="decelerate_quint"/>
+		<field name="fast_out_extra_slow_in" since="28"/>
+		<field name="fast_out_linear_in" since="21"/>
+		<field name="fast_out_slow_in" since="21"/>
+		<field name="linear"/>
+		<field name="linear_out_slow_in" since="21"/>
+		<field name="overshoot"/>
+	</class>
+	<class name="android/R$layout" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="activity_list_item"/>
+		<field name="browser_link_context_header"/>
+		<field name="expandable_list_content"/>
+		<field name="list_content" since="11"/>
+		<field name="preference_category"/>
+		<field name="select_dialog_item"/>
+		<field name="select_dialog_multichoice"/>
+		<field name="select_dialog_singlechoice"/>
+		<field name="simple_dropdown_item_1line"/>
+		<field name="simple_expandable_list_item_1"/>
+		<field name="simple_expandable_list_item_2"/>
+		<field name="simple_gallery_item"/>
+		<field name="simple_list_item_1"/>
+		<field name="simple_list_item_2"/>
+		<field name="simple_list_item_activated_1" since="11"/>
+		<field name="simple_list_item_activated_2" since="11"/>
+		<field name="simple_list_item_checked"/>
+		<field name="simple_list_item_multiple_choice"/>
+		<field name="simple_list_item_single_choice"/>
+		<field name="simple_selectable_list_item" since="11"/>
+		<field name="simple_spinner_dropdown_item"/>
+		<field name="simple_spinner_item"/>
+		<field name="test_list_item"/>
+		<field name="two_line_list_item"/>
+	</class>
+	<class name="android/R$menu" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/R$mipmap" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="sym_def_app_icon"/>
+	</class>
+	<class name="android/R$plurals" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/R$raw" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/R$string" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="VideoView_error_button"/>
+		<field name="VideoView_error_text_invalid_progressive_playback" since="3"/>
+		<field name="VideoView_error_text_unknown"/>
+		<field name="VideoView_error_title"/>
+		<field name="autofill" since="27"/>
+		<field name="cancel"/>
+		<field name="copy"/>
+		<field name="copyUrl"/>
+		<field name="cut"/>
+		<field name="defaultMsisdnAlphaTag"/>
+		<field name="defaultVoiceMailAlphaTag"/>
+		<field name="dialog_alert_title" since="3"/>
+		<field name="emptyPhoneNumber"/>
+		<field name="fingerprint_icon_content_description" since="23"/>
+		<field name="httpErrorBadUrl"/>
+		<field name="httpErrorUnsupportedScheme"/>
+		<field name="no" deprecated="30"/>
+		<field name="ok"/>
+		<field name="paste"/>
+		<field name="paste_as_plain_text" since="26"/>
+		<field name="search_go"/>
+		<field name="selectAll"/>
+		<field name="selectTextMode" since="11"/>
+		<field name="status_bar_notification_info_overflow" since="14"/>
+		<field name="unknownName"/>
+		<field name="untitled"/>
+		<field name="yes" deprecated="30"/>
+	</class>
+	<class name="android/R$style" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="Animation"/>
+		<field name="Animation_Activity"/>
+		<field name="Animation_Dialog"/>
+		<field name="Animation_InputMethod" since="5"/>
+		<field name="Animation_Toast"/>
+		<field name="Animation_Translucent"/>
+		<field name="DeviceDefault_ButtonBar" since="14"/>
+		<field name="DeviceDefault_ButtonBar_AlertDialog" since="14"/>
+		<field name="DeviceDefault_Light_ButtonBar" since="14"/>
+		<field name="DeviceDefault_Light_ButtonBar_AlertDialog" since="14"/>
+		<field name="DeviceDefault_Light_SegmentedButton" since="14"/>
+		<field name="DeviceDefault_SegmentedButton" since="14"/>
+		<field name="Holo_ButtonBar" since="11"/>
+		<field name="Holo_ButtonBar_AlertDialog" since="11"/>
+		<field name="Holo_Light_ButtonBar" since="11"/>
+		<field name="Holo_Light_ButtonBar_AlertDialog" since="11"/>
+		<field name="Holo_Light_SegmentedButton" since="11"/>
+		<field name="Holo_SegmentedButton" since="11"/>
+		<field name="MediaButton"/>
+		<field name="MediaButton_Ffwd"/>
+		<field name="MediaButton_Next"/>
+		<field name="MediaButton_Pause"/>
+		<field name="MediaButton_Play"/>
+		<field name="MediaButton_Previous"/>
+		<field name="MediaButton_Rew"/>
+		<field name="TextAppearance"/>
+		<field name="TextAppearance_DeviceDefault" since="14"/>
+		<field name="TextAppearance_DeviceDefault_DialogWindowTitle" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Inverse" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Large" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Large_Inverse" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Medium" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Medium_Inverse" since="14"/>
+		<field name="TextAppearance_DeviceDefault_SearchResult_Subtitle" since="14"/>
+		<field name="TextAppearance_DeviceDefault_SearchResult_Title" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Small" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Small_Inverse" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Menu" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse" since="14" deprecated="21"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Title" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse" since="14" deprecated="21"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse" since="14" deprecated="21"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Title" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse" since="14" deprecated="21"/>
+		<field name="TextAppearance_DeviceDefault_Widget_Button" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_DropDownHint" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_DropDownItem" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_EditText" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_IconMenu_Item" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu_Large" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_PopupMenu_Small" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_TabWidget" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_TextView" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_TextView_PopupMenu" since="14"/>
+		<field name="TextAppearance_DeviceDefault_Widget_TextView_SpinnerItem" since="14"/>
+		<field name="TextAppearance_DeviceDefault_WindowTitle" since="14"/>
+		<field name="TextAppearance_DialogWindowTitle"/>
+		<field name="TextAppearance_Holo" since="13"/>
+		<field name="TextAppearance_Holo_DialogWindowTitle" since="13"/>
+		<field name="TextAppearance_Holo_Inverse" since="13"/>
+		<field name="TextAppearance_Holo_Large" since="13"/>
+		<field name="TextAppearance_Holo_Large_Inverse" since="13"/>
+		<field name="TextAppearance_Holo_Medium" since="13"/>
+		<field name="TextAppearance_Holo_Medium_Inverse" since="13"/>
+		<field name="TextAppearance_Holo_SearchResult_Subtitle" since="13"/>
+		<field name="TextAppearance_Holo_SearchResult_Title" since="13"/>
+		<field name="TextAppearance_Holo_Small" since="13"/>
+		<field name="TextAppearance_Holo_Small_Inverse" since="13"/>
+		<field name="TextAppearance_Holo_Widget" since="13"/>
+		<field name="TextAppearance_Holo_Widget_ActionBar_Menu" since="14"/>
+		<field name="TextAppearance_Holo_Widget_ActionBar_Subtitle" since="13"/>
+		<field name="TextAppearance_Holo_Widget_ActionBar_Subtitle_Inverse" since="14"/>
+		<field name="TextAppearance_Holo_Widget_ActionBar_Title" since="13"/>
+		<field name="TextAppearance_Holo_Widget_ActionBar_Title_Inverse" since="14"/>
+		<field name="TextAppearance_Holo_Widget_ActionMode_Subtitle" since="13"/>
+		<field name="TextAppearance_Holo_Widget_ActionMode_Subtitle_Inverse" since="14"/>
+		<field name="TextAppearance_Holo_Widget_ActionMode_Title" since="13"/>
+		<field name="TextAppearance_Holo_Widget_ActionMode_Title_Inverse" since="14"/>
+		<field name="TextAppearance_Holo_Widget_Button" since="13"/>
+		<field name="TextAppearance_Holo_Widget_DropDownHint" since="13"/>
+		<field name="TextAppearance_Holo_Widget_DropDownItem" since="13"/>
+		<field name="TextAppearance_Holo_Widget_EditText" since="13"/>
+		<field name="TextAppearance_Holo_Widget_IconMenu_Item" since="13"/>
+		<field name="TextAppearance_Holo_Widget_PopupMenu" since="13"/>
+		<field name="TextAppearance_Holo_Widget_PopupMenu_Large" since="13"/>
+		<field name="TextAppearance_Holo_Widget_PopupMenu_Small" since="13"/>
+		<field name="TextAppearance_Holo_Widget_TabWidget" since="13"/>
+		<field name="TextAppearance_Holo_Widget_TextView" since="13"/>
+		<field name="TextAppearance_Holo_Widget_TextView_PopupMenu" since="13"/>
+		<field name="TextAppearance_Holo_Widget_TextView_SpinnerItem" since="13"/>
+		<field name="TextAppearance_Holo_WindowTitle" since="13"/>
+		<field name="TextAppearance_Inverse"/>
+		<field name="TextAppearance_Large"/>
+		<field name="TextAppearance_Large_Inverse"/>
+		<field name="TextAppearance_Material" since="21"/>
+		<field name="TextAppearance_Material_Body1" since="21"/>
+		<field name="TextAppearance_Material_Body2" since="21"/>
+		<field name="TextAppearance_Material_Button" since="21"/>
+		<field name="TextAppearance_Material_Caption" since="21"/>
+		<field name="TextAppearance_Material_DialogWindowTitle" since="21"/>
+		<field name="TextAppearance_Material_Display1" since="21"/>
+		<field name="TextAppearance_Material_Display2" since="21"/>
+		<field name="TextAppearance_Material_Display3" since="21"/>
+		<field name="TextAppearance_Material_Display4" since="21"/>
+		<field name="TextAppearance_Material_Headline" since="21"/>
+		<field name="TextAppearance_Material_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Large" since="21"/>
+		<field name="TextAppearance_Material_Large_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Medium" since="21"/>
+		<field name="TextAppearance_Material_Medium_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Menu" since="21"/>
+		<field name="TextAppearance_Material_Notification" since="21"/>
+		<field name="TextAppearance_Material_Notification_Emphasis" since="21"/>
+		<field name="TextAppearance_Material_Notification_Info" since="21"/>
+		<field name="TextAppearance_Material_Notification_Line2" since="21"/>
+		<field name="TextAppearance_Material_Notification_Time" since="21"/>
+		<field name="TextAppearance_Material_Notification_Title" since="21"/>
+		<field name="TextAppearance_Material_SearchResult_Subtitle" since="21"/>
+		<field name="TextAppearance_Material_SearchResult_Title" since="21"/>
+		<field name="TextAppearance_Material_Small" since="21"/>
+		<field name="TextAppearance_Material_Small_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Subhead" since="21"/>
+		<field name="TextAppearance_Material_Title" since="21"/>
+		<field name="TextAppearance_Material_Widget" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionBar_Menu" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionBar_Subtitle" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionBar_Subtitle_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionBar_Title" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionBar_Title_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionMode_Subtitle" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionMode_Subtitle_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionMode_Title" since="21"/>
+		<field name="TextAppearance_Material_Widget_ActionMode_Title_Inverse" since="21"/>
+		<field name="TextAppearance_Material_Widget_Button" since="21"/>
+		<field name="TextAppearance_Material_Widget_Button_Borderless_Colored" since="24"/>
+		<field name="TextAppearance_Material_Widget_Button_Colored" since="24"/>
+		<field name="TextAppearance_Material_Widget_Button_Inverse" since="23"/>
+		<field name="TextAppearance_Material_Widget_DropDownHint" since="21"/>
+		<field name="TextAppearance_Material_Widget_DropDownItem" since="21"/>
+		<field name="TextAppearance_Material_Widget_EditText" since="21"/>
+		<field name="TextAppearance_Material_Widget_IconMenu_Item" since="21"/>
+		<field name="TextAppearance_Material_Widget_PopupMenu" since="21"/>
+		<field name="TextAppearance_Material_Widget_PopupMenu_Large" since="21"/>
+		<field name="TextAppearance_Material_Widget_PopupMenu_Small" since="21"/>
+		<field name="TextAppearance_Material_Widget_TabWidget" since="21"/>
+		<field name="TextAppearance_Material_Widget_TextView" since="21"/>
+		<field name="TextAppearance_Material_Widget_TextView_PopupMenu" since="21"/>
+		<field name="TextAppearance_Material_Widget_TextView_SpinnerItem" since="21"/>
+		<field name="TextAppearance_Material_Widget_Toolbar_Subtitle" since="21"/>
+		<field name="TextAppearance_Material_Widget_Toolbar_Title" since="21"/>
+		<field name="TextAppearance_Material_WindowTitle" since="21"/>
+		<field name="TextAppearance_Medium"/>
+		<field name="TextAppearance_Medium_Inverse"/>
+		<field name="TextAppearance_Small"/>
+		<field name="TextAppearance_Small_Inverse"/>
+		<field name="TextAppearance_StatusBar_EventContent" since="9"/>
+		<field name="TextAppearance_StatusBar_EventContent_Title" since="9"/>
+		<field name="TextAppearance_StatusBar_Icon" since="9"/>
+		<field name="TextAppearance_StatusBar_Title" since="9"/>
+		<field name="TextAppearance_SuggestionHighlight" since="14"/>
+		<field name="TextAppearance_Theme"/>
+		<field name="TextAppearance_Theme_Dialog"/>
+		<field name="TextAppearance_Widget"/>
+		<field name="TextAppearance_Widget_Button"/>
+		<field name="TextAppearance_Widget_DropDownHint"/>
+		<field name="TextAppearance_Widget_DropDownItem"/>
+		<field name="TextAppearance_Widget_EditText"/>
+		<field name="TextAppearance_Widget_IconMenu_Item"/>
+		<field name="TextAppearance_Widget_PopupMenu_Large" since="11"/>
+		<field name="TextAppearance_Widget_PopupMenu_Small" since="11"/>
+		<field name="TextAppearance_Widget_TabWidget"/>
+		<field name="TextAppearance_Widget_TextView"/>
+		<field name="TextAppearance_Widget_TextView_PopupMenu"/>
+		<field name="TextAppearance_Widget_TextView_SpinnerItem"/>
+		<field name="TextAppearance_WindowTitle"/>
+		<field name="Theme"/>
+		<field name="ThemeOverlay" since="21"/>
+		<field name="ThemeOverlay_DeviceDefault_Accent_DayNight" since="29"/>
+		<field name="ThemeOverlay_Material" since="21"/>
+		<field name="ThemeOverlay_Material_ActionBar" since="21"/>
+		<field name="ThemeOverlay_Material_Dark" since="21"/>
+		<field name="ThemeOverlay_Material_Dark_ActionBar" since="21"/>
+		<field name="ThemeOverlay_Material_Dialog" since="23"/>
+		<field name="ThemeOverlay_Material_Dialog_Alert" since="23"/>
+		<field name="ThemeOverlay_Material_Light" since="21"/>
+		<field name="Theme_Black"/>
+		<field name="Theme_Black_NoTitleBar"/>
+		<field name="Theme_Black_NoTitleBar_Fullscreen"/>
+		<field name="Theme_DeviceDefault" since="14"/>
+		<field name="Theme_DeviceDefault_DayNight" since="29"/>
+		<field name="Theme_DeviceDefault_Dialog" since="14"/>
+		<field name="Theme_DeviceDefault_DialogWhenLarge" since="14"/>
+		<field name="Theme_DeviceDefault_DialogWhenLarge_NoActionBar" since="14"/>
+		<field name="Theme_DeviceDefault_Dialog_Alert" since="22"/>
+		<field name="Theme_DeviceDefault_Dialog_MinWidth" since="14"/>
+		<field name="Theme_DeviceDefault_Dialog_NoActionBar" since="14"/>
+		<field name="Theme_DeviceDefault_Dialog_NoActionBar_MinWidth" since="14"/>
+		<field name="Theme_DeviceDefault_InputMethod" since="14"/>
+		<field name="Theme_DeviceDefault_Light" since="14"/>
+		<field name="Theme_DeviceDefault_Light_DarkActionBar" since="14"/>
+		<field name="Theme_DeviceDefault_Light_Dialog" since="14"/>
+		<field name="Theme_DeviceDefault_Light_DialogWhenLarge" since="14"/>
+		<field name="Theme_DeviceDefault_Light_DialogWhenLarge_NoActionBar" since="14"/>
+		<field name="Theme_DeviceDefault_Light_Dialog_Alert" since="22"/>
+		<field name="Theme_DeviceDefault_Light_Dialog_MinWidth" since="14"/>
+		<field name="Theme_DeviceDefault_Light_Dialog_NoActionBar" since="14"/>
+		<field name="Theme_DeviceDefault_Light_Dialog_NoActionBar_MinWidth" since="14"/>
+		<field name="Theme_DeviceDefault_Light_NoActionBar" since="14"/>
+		<field name="Theme_DeviceDefault_Light_NoActionBar_Fullscreen" since="14"/>
+		<field name="Theme_DeviceDefault_Light_NoActionBar_Overscan" since="18"/>
+		<field name="Theme_DeviceDefault_Light_NoActionBar_TranslucentDecor" since="19"/>
+		<field name="Theme_DeviceDefault_Light_Panel" since="14"/>
+		<field name="Theme_DeviceDefault_NoActionBar" since="14"/>
+		<field name="Theme_DeviceDefault_NoActionBar_Fullscreen" since="14"/>
+		<field name="Theme_DeviceDefault_NoActionBar_Overscan" since="18"/>
+		<field name="Theme_DeviceDefault_NoActionBar_TranslucentDecor" since="19"/>
+		<field name="Theme_DeviceDefault_Panel" since="14"/>
+		<field name="Theme_DeviceDefault_Settings" since="21"/>
+		<field name="Theme_DeviceDefault_Wallpaper" since="14"/>
+		<field name="Theme_DeviceDefault_Wallpaper_NoTitleBar" since="14"/>
+		<field name="Theme_Dialog"/>
+		<field name="Theme_Holo" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Dialog" since="11" deprecated="28"/>
+		<field name="Theme_Holo_DialogWhenLarge" since="11" deprecated="28"/>
+		<field name="Theme_Holo_DialogWhenLarge_NoActionBar" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Dialog_MinWidth" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Dialog_NoActionBar" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Dialog_NoActionBar_MinWidth" since="11" deprecated="28"/>
+		<field name="Theme_Holo_InputMethod" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light_DarkActionBar" since="14" deprecated="28"/>
+		<field name="Theme_Holo_Light_Dialog" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light_DialogWhenLarge" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light_DialogWhenLarge_NoActionBar" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light_Dialog_MinWidth" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light_Dialog_NoActionBar" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light_Dialog_NoActionBar_MinWidth" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Light_NoActionBar" since="13" deprecated="28"/>
+		<field name="Theme_Holo_Light_NoActionBar_Fullscreen" since="13" deprecated="28"/>
+		<field name="Theme_Holo_Light_NoActionBar_Overscan" since="18" deprecated="28"/>
+		<field name="Theme_Holo_Light_NoActionBar_TranslucentDecor" since="19" deprecated="28"/>
+		<field name="Theme_Holo_Light_Panel" since="11" deprecated="28"/>
+		<field name="Theme_Holo_NoActionBar" since="11" deprecated="28"/>
+		<field name="Theme_Holo_NoActionBar_Fullscreen" since="11" deprecated="28"/>
+		<field name="Theme_Holo_NoActionBar_Overscan" since="18" deprecated="28"/>
+		<field name="Theme_Holo_NoActionBar_TranslucentDecor" since="19" deprecated="28"/>
+		<field name="Theme_Holo_Panel" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Wallpaper" since="11" deprecated="28"/>
+		<field name="Theme_Holo_Wallpaper_NoTitleBar" since="11" deprecated="28"/>
+		<field name="Theme_InputMethod" since="3"/>
+		<field name="Theme_Light"/>
+		<field name="Theme_Light_NoTitleBar"/>
+		<field name="Theme_Light_NoTitleBar_Fullscreen"/>
+		<field name="Theme_Light_Panel" since="3"/>
+		<field name="Theme_Light_WallpaperSettings" since="5"/>
+		<field name="Theme_Material" since="21"/>
+		<field name="Theme_Material_Dialog" since="21"/>
+		<field name="Theme_Material_DialogWhenLarge" since="21"/>
+		<field name="Theme_Material_DialogWhenLarge_NoActionBar" since="21"/>
+		<field name="Theme_Material_Dialog_Alert" since="21"/>
+		<field name="Theme_Material_Dialog_MinWidth" since="21"/>
+		<field name="Theme_Material_Dialog_NoActionBar" since="21"/>
+		<field name="Theme_Material_Dialog_NoActionBar_MinWidth" since="21"/>
+		<field name="Theme_Material_Dialog_Presentation" since="21"/>
+		<field name="Theme_Material_InputMethod" since="21"/>
+		<field name="Theme_Material_Light" since="21"/>
+		<field name="Theme_Material_Light_DarkActionBar" since="21"/>
+		<field name="Theme_Material_Light_Dialog" since="21"/>
+		<field name="Theme_Material_Light_DialogWhenLarge" since="21"/>
+		<field name="Theme_Material_Light_DialogWhenLarge_DarkActionBar" since="24"/>
+		<field name="Theme_Material_Light_DialogWhenLarge_NoActionBar" since="21"/>
+		<field name="Theme_Material_Light_Dialog_Alert" since="21"/>
+		<field name="Theme_Material_Light_Dialog_MinWidth" since="21"/>
+		<field name="Theme_Material_Light_Dialog_NoActionBar" since="21"/>
+		<field name="Theme_Material_Light_Dialog_NoActionBar_MinWidth" since="21"/>
+		<field name="Theme_Material_Light_Dialog_Presentation" since="21"/>
+		<field name="Theme_Material_Light_LightStatusBar" since="23"/>
+		<field name="Theme_Material_Light_NoActionBar" since="21"/>
+		<field name="Theme_Material_Light_NoActionBar_Fullscreen" since="21"/>
+		<field name="Theme_Material_Light_NoActionBar_Overscan" since="21" deprecated="30"/>
+		<field name="Theme_Material_Light_NoActionBar_TranslucentDecor" since="21"/>
+		<field name="Theme_Material_Light_Panel" since="21"/>
+		<field name="Theme_Material_Light_Voice" since="21"/>
+		<field name="Theme_Material_NoActionBar" since="21"/>
+		<field name="Theme_Material_NoActionBar_Fullscreen" since="21"/>
+		<field name="Theme_Material_NoActionBar_Overscan" since="21" deprecated="30"/>
+		<field name="Theme_Material_NoActionBar_TranslucentDecor" since="21"/>
+		<field name="Theme_Material_Panel" since="21"/>
+		<field name="Theme_Material_Settings" since="21"/>
+		<field name="Theme_Material_Voice" since="21"/>
+		<field name="Theme_Material_Wallpaper" since="21"/>
+		<field name="Theme_Material_Wallpaper_NoTitleBar" since="21"/>
+		<field name="Theme_NoDisplay" since="3"/>
+		<field name="Theme_NoTitleBar"/>
+		<field name="Theme_NoTitleBar_Fullscreen"/>
+		<field name="Theme_NoTitleBar_OverlayActionModes" since="11"/>
+		<field name="Theme_Panel" since="3"/>
+		<field name="Theme_Translucent"/>
+		<field name="Theme_Translucent_NoTitleBar"/>
+		<field name="Theme_Translucent_NoTitleBar_Fullscreen"/>
+		<field name="Theme_Wallpaper" since="5"/>
+		<field name="Theme_WallpaperSettings" since="5"/>
+		<field name="Theme_Wallpaper_NoTitleBar" since="5"/>
+		<field name="Theme_Wallpaper_NoTitleBar_Fullscreen" since="5"/>
+		<field name="Theme_WithActionBar" since="11"/>
+		<field name="Widget"/>
+		<field name="Widget_AbsListView"/>
+		<field name="Widget_ActionBar" since="11"/>
+		<field name="Widget_ActionBar_TabBar" since="13"/>
+		<field name="Widget_ActionBar_TabText" since="13"/>
+		<field name="Widget_ActionBar_TabView" since="13"/>
+		<field name="Widget_ActionButton" since="11"/>
+		<field name="Widget_ActionButton_CloseMode" since="11"/>
+		<field name="Widget_ActionButton_Overflow" since="11"/>
+		<field name="Widget_AutoCompleteTextView"/>
+		<field name="Widget_Button"/>
+		<field name="Widget_Button_Inset"/>
+		<field name="Widget_Button_Small"/>
+		<field name="Widget_Button_Toggle"/>
+		<field name="Widget_CalendarView" since="11"/>
+		<field name="Widget_CompoundButton"/>
+		<field name="Widget_CompoundButton_CheckBox"/>
+		<field name="Widget_CompoundButton_RadioButton"/>
+		<field name="Widget_CompoundButton_Star"/>
+		<field name="Widget_DatePicker" since="11"/>
+		<field name="Widget_DeviceDefault" since="14"/>
+		<field name="Widget_DeviceDefault_ActionBar" since="14"/>
+		<field name="Widget_DeviceDefault_ActionBar_Solid" since="14"/>
+		<field name="Widget_DeviceDefault_ActionBar_TabBar" since="14"/>
+		<field name="Widget_DeviceDefault_ActionBar_TabText" since="14"/>
+		<field name="Widget_DeviceDefault_ActionBar_TabView" since="14"/>
+		<field name="Widget_DeviceDefault_ActionButton" since="14"/>
+		<field name="Widget_DeviceDefault_ActionButton_CloseMode" since="14"/>
+		<field name="Widget_DeviceDefault_ActionButton_Overflow" since="14"/>
+		<field name="Widget_DeviceDefault_ActionButton_TextButton" since="14"/>
+		<field name="Widget_DeviceDefault_ActionMode" since="14"/>
+		<field name="Widget_DeviceDefault_AutoCompleteTextView" since="14"/>
+		<field name="Widget_DeviceDefault_Button" since="14"/>
+		<field name="Widget_DeviceDefault_Button_Borderless" since="14"/>
+		<field name="Widget_DeviceDefault_Button_Borderless_Colored" since="28"/>
+		<field name="Widget_DeviceDefault_Button_Borderless_Small" since="14"/>
+		<field name="Widget_DeviceDefault_Button_Colored" since="28"/>
+		<field name="Widget_DeviceDefault_Button_Inset" since="14"/>
+		<field name="Widget_DeviceDefault_Button_Small" since="14"/>
+		<field name="Widget_DeviceDefault_Button_Toggle" since="14"/>
+		<field name="Widget_DeviceDefault_CalendarView" since="14"/>
+		<field name="Widget_DeviceDefault_CheckedTextView" since="17"/>
+		<field name="Widget_DeviceDefault_CompoundButton_CheckBox" since="14"/>
+		<field name="Widget_DeviceDefault_CompoundButton_RadioButton" since="14"/>
+		<field name="Widget_DeviceDefault_CompoundButton_Star" since="14"/>
+		<field name="Widget_DeviceDefault_DatePicker" since="14"/>
+		<field name="Widget_DeviceDefault_DropDownItem" since="14"/>
+		<field name="Widget_DeviceDefault_DropDownItem_Spinner" since="14"/>
+		<field name="Widget_DeviceDefault_EditText" since="14"/>
+		<field name="Widget_DeviceDefault_ExpandableListView" since="14"/>
+		<field name="Widget_DeviceDefault_FastScroll" since="21"/>
+		<field name="Widget_DeviceDefault_GridView" since="14"/>
+		<field name="Widget_DeviceDefault_HorizontalScrollView" since="14"/>
+		<field name="Widget_DeviceDefault_ImageButton" since="14"/>
+		<field name="Widget_DeviceDefault_Light" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_Solid" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_Solid_Inverse" since="14" deprecated="21"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabBar" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse" since="14" deprecated="21"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabText" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabText_Inverse" since="14" deprecated="21"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionBar_TabView_Inverse" since="14" deprecated="21"/>
+		<field name="Widget_DeviceDefault_Light_ActionButton" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionButton_CloseMode" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionButton_Overflow" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionMode" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ActionMode_Inverse" since="14" deprecated="21"/>
+		<field name="Widget_DeviceDefault_Light_AutoCompleteTextView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_Button" since="14"/>
+		<field name="Widget_DeviceDefault_Light_Button_Borderless_Small" since="14"/>
+		<field name="Widget_DeviceDefault_Light_Button_Inset" since="14"/>
+		<field name="Widget_DeviceDefault_Light_Button_Small" since="14"/>
+		<field name="Widget_DeviceDefault_Light_Button_Toggle" since="14"/>
+		<field name="Widget_DeviceDefault_Light_CalendarView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_CheckedTextView" since="17"/>
+		<field name="Widget_DeviceDefault_Light_CompoundButton_CheckBox" since="14"/>
+		<field name="Widget_DeviceDefault_Light_CompoundButton_RadioButton" since="14"/>
+		<field name="Widget_DeviceDefault_Light_CompoundButton_Star" since="14"/>
+		<field name="Widget_DeviceDefault_Light_DropDownItem" since="14"/>
+		<field name="Widget_DeviceDefault_Light_DropDownItem_Spinner" since="14"/>
+		<field name="Widget_DeviceDefault_Light_EditText" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ExpandableListView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_FastScroll" since="21"/>
+		<field name="Widget_DeviceDefault_Light_GridView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_HorizontalScrollView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ImageButton" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ListPopupWindow" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ListView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ListView_DropDown" since="14"/>
+		<field name="Widget_DeviceDefault_Light_MediaRouteButton" since="16"/>
+		<field name="Widget_DeviceDefault_Light_PopupMenu" since="14"/>
+		<field name="Widget_DeviceDefault_Light_PopupWindow" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Horizontal" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Inverse" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Large" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Large_Inverse" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Small" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Small_Inverse" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ProgressBar_Small_Title" since="14"/>
+		<field name="Widget_DeviceDefault_Light_RatingBar" since="14"/>
+		<field name="Widget_DeviceDefault_Light_RatingBar_Indicator" since="14"/>
+		<field name="Widget_DeviceDefault_Light_RatingBar_Small" since="14"/>
+		<field name="Widget_DeviceDefault_Light_ScrollView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_SeekBar" since="14"/>
+		<field name="Widget_DeviceDefault_Light_Spinner" since="14"/>
+		<field name="Widget_DeviceDefault_Light_StackView" since="21"/>
+		<field name="Widget_DeviceDefault_Light_Tab" since="14"/>
+		<field name="Widget_DeviceDefault_Light_TabWidget" since="14"/>
+		<field name="Widget_DeviceDefault_Light_TextView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_TextView_SpinnerItem" since="14"/>
+		<field name="Widget_DeviceDefault_Light_WebTextView" since="14"/>
+		<field name="Widget_DeviceDefault_Light_WebView" since="14"/>
+		<field name="Widget_DeviceDefault_ListPopupWindow" since="14"/>
+		<field name="Widget_DeviceDefault_ListView" since="14"/>
+		<field name="Widget_DeviceDefault_ListView_DropDown" since="14"/>
+		<field name="Widget_DeviceDefault_MediaRouteButton" since="16"/>
+		<field name="Widget_DeviceDefault_PopupMenu" since="14"/>
+		<field name="Widget_DeviceDefault_PopupWindow" since="14"/>
+		<field name="Widget_DeviceDefault_ProgressBar" since="14"/>
+		<field name="Widget_DeviceDefault_ProgressBar_Horizontal" since="14"/>
+		<field name="Widget_DeviceDefault_ProgressBar_Large" since="14"/>
+		<field name="Widget_DeviceDefault_ProgressBar_Small" since="14"/>
+		<field name="Widget_DeviceDefault_ProgressBar_Small_Title" since="14"/>
+		<field name="Widget_DeviceDefault_RatingBar" since="14"/>
+		<field name="Widget_DeviceDefault_RatingBar_Indicator" since="14"/>
+		<field name="Widget_DeviceDefault_RatingBar_Small" since="14"/>
+		<field name="Widget_DeviceDefault_ScrollView" since="14"/>
+		<field name="Widget_DeviceDefault_SeekBar" since="14"/>
+		<field name="Widget_DeviceDefault_Spinner" since="14"/>
+		<field name="Widget_DeviceDefault_StackView" since="21"/>
+		<field name="Widget_DeviceDefault_Tab" since="14"/>
+		<field name="Widget_DeviceDefault_TabWidget" since="14"/>
+		<field name="Widget_DeviceDefault_TextView" since="14"/>
+		<field name="Widget_DeviceDefault_TextView_SpinnerItem" since="14"/>
+		<field name="Widget_DeviceDefault_WebTextView" since="14"/>
+		<field name="Widget_DeviceDefault_WebView" since="14"/>
+		<field name="Widget_DropDownItem"/>
+		<field name="Widget_DropDownItem_Spinner"/>
+		<field name="Widget_EditText"/>
+		<field name="Widget_ExpandableListView"/>
+		<field name="Widget_FastScroll" since="21"/>
+		<field name="Widget_FragmentBreadCrumbs" since="11"/>
+		<field name="Widget_Gallery"/>
+		<field name="Widget_GridView"/>
+		<field name="Widget_Holo" since="11"/>
+		<field name="Widget_Holo_ActionBar" since="11"/>
+		<field name="Widget_Holo_ActionBar_Solid" since="14"/>
+		<field name="Widget_Holo_ActionBar_TabBar" since="13"/>
+		<field name="Widget_Holo_ActionBar_TabText" since="13"/>
+		<field name="Widget_Holo_ActionBar_TabView" since="13"/>
+		<field name="Widget_Holo_ActionButton" since="11"/>
+		<field name="Widget_Holo_ActionButton_CloseMode" since="11"/>
+		<field name="Widget_Holo_ActionButton_Overflow" since="11"/>
+		<field name="Widget_Holo_ActionButton_TextButton" since="11"/>
+		<field name="Widget_Holo_ActionMode" since="11"/>
+		<field name="Widget_Holo_AutoCompleteTextView" since="11"/>
+		<field name="Widget_Holo_Button" since="11"/>
+		<field name="Widget_Holo_Button_Borderless" since="11"/>
+		<field name="Widget_Holo_Button_Borderless_Small" since="14"/>
+		<field name="Widget_Holo_Button_Inset" since="11"/>
+		<field name="Widget_Holo_Button_Small" since="11"/>
+		<field name="Widget_Holo_Button_Toggle" since="11"/>
+		<field name="Widget_Holo_CalendarView" since="11"/>
+		<field name="Widget_Holo_CheckedTextView" since="17"/>
+		<field name="Widget_Holo_CompoundButton_CheckBox" since="11"/>
+		<field name="Widget_Holo_CompoundButton_RadioButton" since="11"/>
+		<field name="Widget_Holo_CompoundButton_Star" since="11"/>
+		<field name="Widget_Holo_DatePicker" since="11"/>
+		<field name="Widget_Holo_DropDownItem" since="11"/>
+		<field name="Widget_Holo_DropDownItem_Spinner" since="11"/>
+		<field name="Widget_Holo_EditText" since="11"/>
+		<field name="Widget_Holo_ExpandableListView" since="11"/>
+		<field name="Widget_Holo_GridView" since="11"/>
+		<field name="Widget_Holo_HorizontalScrollView" since="11"/>
+		<field name="Widget_Holo_ImageButton" since="11"/>
+		<field name="Widget_Holo_Light" since="11"/>
+		<field name="Widget_Holo_Light_ActionBar" since="11"/>
+		<field name="Widget_Holo_Light_ActionBar_Solid" since="14"/>
+		<field name="Widget_Holo_Light_ActionBar_Solid_Inverse" since="14"/>
+		<field name="Widget_Holo_Light_ActionBar_TabBar" since="13"/>
+		<field name="Widget_Holo_Light_ActionBar_TabBar_Inverse" since="14"/>
+		<field name="Widget_Holo_Light_ActionBar_TabText" since="13"/>
+		<field name="Widget_Holo_Light_ActionBar_TabText_Inverse" since="14"/>
+		<field name="Widget_Holo_Light_ActionBar_TabView" since="13"/>
+		<field name="Widget_Holo_Light_ActionBar_TabView_Inverse" since="14"/>
+		<field name="Widget_Holo_Light_ActionButton" since="11"/>
+		<field name="Widget_Holo_Light_ActionButton_CloseMode" since="11"/>
+		<field name="Widget_Holo_Light_ActionButton_Overflow" since="11"/>
+		<field name="Widget_Holo_Light_ActionMode" since="11"/>
+		<field name="Widget_Holo_Light_ActionMode_Inverse" since="14"/>
+		<field name="Widget_Holo_Light_AutoCompleteTextView" since="11"/>
+		<field name="Widget_Holo_Light_Button" since="11"/>
+		<field name="Widget_Holo_Light_Button_Borderless_Small" since="14"/>
+		<field name="Widget_Holo_Light_Button_Inset" since="11"/>
+		<field name="Widget_Holo_Light_Button_Small" since="11"/>
+		<field name="Widget_Holo_Light_Button_Toggle" since="11"/>
+		<field name="Widget_Holo_Light_CalendarView" since="11"/>
+		<field name="Widget_Holo_Light_CheckedTextView" since="17"/>
+		<field name="Widget_Holo_Light_CompoundButton_CheckBox" since="11"/>
+		<field name="Widget_Holo_Light_CompoundButton_RadioButton" since="11"/>
+		<field name="Widget_Holo_Light_CompoundButton_Star" since="11"/>
+		<field name="Widget_Holo_Light_DropDownItem" since="11"/>
+		<field name="Widget_Holo_Light_DropDownItem_Spinner" since="11"/>
+		<field name="Widget_Holo_Light_EditText" since="11"/>
+		<field name="Widget_Holo_Light_ExpandableListView" since="11"/>
+		<field name="Widget_Holo_Light_GridView" since="11"/>
+		<field name="Widget_Holo_Light_HorizontalScrollView" since="11"/>
+		<field name="Widget_Holo_Light_ImageButton" since="11"/>
+		<field name="Widget_Holo_Light_ListPopupWindow" since="11"/>
+		<field name="Widget_Holo_Light_ListView" since="11"/>
+		<field name="Widget_Holo_Light_ListView_DropDown" since="11"/>
+		<field name="Widget_Holo_Light_MediaRouteButton" since="16"/>
+		<field name="Widget_Holo_Light_PopupMenu" since="11"/>
+		<field name="Widget_Holo_Light_PopupWindow" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar_Horizontal" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar_Inverse" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar_Large" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar_Large_Inverse" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar_Small" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar_Small_Inverse" since="11"/>
+		<field name="Widget_Holo_Light_ProgressBar_Small_Title" since="11"/>
+		<field name="Widget_Holo_Light_RatingBar" since="11"/>
+		<field name="Widget_Holo_Light_RatingBar_Indicator" since="11"/>
+		<field name="Widget_Holo_Light_RatingBar_Small" since="11"/>
+		<field name="Widget_Holo_Light_ScrollView" since="11"/>
+		<field name="Widget_Holo_Light_SeekBar" since="11"/>
+		<field name="Widget_Holo_Light_Spinner" since="11"/>
+		<field name="Widget_Holo_Light_Tab" since="11"/>
+		<field name="Widget_Holo_Light_TabWidget" since="11"/>
+		<field name="Widget_Holo_Light_TextView" since="11"/>
+		<field name="Widget_Holo_Light_TextView_SpinnerItem" since="11"/>
+		<field name="Widget_Holo_Light_WebTextView" since="11"/>
+		<field name="Widget_Holo_Light_WebView" since="11"/>
+		<field name="Widget_Holo_ListPopupWindow" since="11"/>
+		<field name="Widget_Holo_ListView" since="11"/>
+		<field name="Widget_Holo_ListView_DropDown" since="11"/>
+		<field name="Widget_Holo_MediaRouteButton" since="16"/>
+		<field name="Widget_Holo_PopupMenu" since="11"/>
+		<field name="Widget_Holo_PopupWindow" since="11"/>
+		<field name="Widget_Holo_ProgressBar" since="11"/>
+		<field name="Widget_Holo_ProgressBar_Horizontal" since="11"/>
+		<field name="Widget_Holo_ProgressBar_Large" since="11"/>
+		<field name="Widget_Holo_ProgressBar_Small" since="11"/>
+		<field name="Widget_Holo_ProgressBar_Small_Title" since="11"/>
+		<field name="Widget_Holo_RatingBar" since="11"/>
+		<field name="Widget_Holo_RatingBar_Indicator" since="11"/>
+		<field name="Widget_Holo_RatingBar_Small" since="11"/>
+		<field name="Widget_Holo_ScrollView" since="11"/>
+		<field name="Widget_Holo_SeekBar" since="11"/>
+		<field name="Widget_Holo_Spinner" since="11"/>
+		<field name="Widget_Holo_Tab" since="11"/>
+		<field name="Widget_Holo_TabWidget" since="11"/>
+		<field name="Widget_Holo_TextView" since="11"/>
+		<field name="Widget_Holo_TextView_SpinnerItem" since="11"/>
+		<field name="Widget_Holo_WebTextView" since="11"/>
+		<field name="Widget_Holo_WebView" since="11"/>
+		<field name="Widget_ImageButton"/>
+		<field name="Widget_ImageWell"/>
+		<field name="Widget_KeyboardView" since="3" deprecated="29"/>
+		<field name="Widget_ListPopupWindow" since="11"/>
+		<field name="Widget_ListView"/>
+		<field name="Widget_ListView_DropDown"/>
+		<field name="Widget_ListView_Menu"/>
+		<field name="Widget_ListView_White"/>
+		<field name="Widget_Material" since="21"/>
+		<field name="Widget_Material_ActionBar" since="21"/>
+		<field name="Widget_Material_ActionBar_Solid" since="21"/>
+		<field name="Widget_Material_ActionBar_TabBar" since="21"/>
+		<field name="Widget_Material_ActionBar_TabText" since="21"/>
+		<field name="Widget_Material_ActionBar_TabView" since="21"/>
+		<field name="Widget_Material_ActionButton" since="21"/>
+		<field name="Widget_Material_ActionButton_CloseMode" since="21"/>
+		<field name="Widget_Material_ActionButton_Overflow" since="21"/>
+		<field name="Widget_Material_ActionMode" since="21"/>
+		<field name="Widget_Material_AutoCompleteTextView" since="21"/>
+		<field name="Widget_Material_Button" since="21"/>
+		<field name="Widget_Material_ButtonBar" since="21"/>
+		<field name="Widget_Material_ButtonBar_AlertDialog" since="21"/>
+		<field name="Widget_Material_Button_Borderless" since="21"/>
+		<field name="Widget_Material_Button_Borderless_Colored" since="21"/>
+		<field name="Widget_Material_Button_Borderless_Small" since="21"/>
+		<field name="Widget_Material_Button_Colored" since="23"/>
+		<field name="Widget_Material_Button_Inset" since="21"/>
+		<field name="Widget_Material_Button_Small" since="21"/>
+		<field name="Widget_Material_Button_Toggle" since="21"/>
+		<field name="Widget_Material_CalendarView" since="21"/>
+		<field name="Widget_Material_CheckedTextView" since="21"/>
+		<field name="Widget_Material_CompoundButton_CheckBox" since="21"/>
+		<field name="Widget_Material_CompoundButton_RadioButton" since="21"/>
+		<field name="Widget_Material_CompoundButton_Star" since="21"/>
+		<field name="Widget_Material_CompoundButton_Switch" since="24"/>
+		<field name="Widget_Material_DatePicker" since="21"/>
+		<field name="Widget_Material_DropDownItem" since="21"/>
+		<field name="Widget_Material_DropDownItem_Spinner" since="21"/>
+		<field name="Widget_Material_EditText" since="21"/>
+		<field name="Widget_Material_ExpandableListView" since="21"/>
+		<field name="Widget_Material_FastScroll" since="21"/>
+		<field name="Widget_Material_GridView" since="21"/>
+		<field name="Widget_Material_HorizontalScrollView" since="21"/>
+		<field name="Widget_Material_ImageButton" since="21"/>
+		<field name="Widget_Material_Light" since="21"/>
+		<field name="Widget_Material_Light_ActionBar" since="21"/>
+		<field name="Widget_Material_Light_ActionBar_Solid" since="21"/>
+		<field name="Widget_Material_Light_ActionBar_TabBar" since="21"/>
+		<field name="Widget_Material_Light_ActionBar_TabText" since="21"/>
+		<field name="Widget_Material_Light_ActionBar_TabView" since="21"/>
+		<field name="Widget_Material_Light_ActionButton" since="21"/>
+		<field name="Widget_Material_Light_ActionButton_CloseMode" since="21"/>
+		<field name="Widget_Material_Light_ActionButton_Overflow" since="21"/>
+		<field name="Widget_Material_Light_ActionMode" since="21"/>
+		<field name="Widget_Material_Light_AutoCompleteTextView" since="21"/>
+		<field name="Widget_Material_Light_Button" since="21"/>
+		<field name="Widget_Material_Light_ButtonBar" since="21"/>
+		<field name="Widget_Material_Light_ButtonBar_AlertDialog" since="21"/>
+		<field name="Widget_Material_Light_Button_Borderless" since="21"/>
+		<field name="Widget_Material_Light_Button_Borderless_Colored" since="21"/>
+		<field name="Widget_Material_Light_Button_Borderless_Small" since="21"/>
+		<field name="Widget_Material_Light_Button_Inset" since="21"/>
+		<field name="Widget_Material_Light_Button_Small" since="21"/>
+		<field name="Widget_Material_Light_Button_Toggle" since="21"/>
+		<field name="Widget_Material_Light_CalendarView" since="21"/>
+		<field name="Widget_Material_Light_CheckedTextView" since="21"/>
+		<field name="Widget_Material_Light_CompoundButton_CheckBox" since="21"/>
+		<field name="Widget_Material_Light_CompoundButton_RadioButton" since="21"/>
+		<field name="Widget_Material_Light_CompoundButton_Star" since="21"/>
+		<field name="Widget_Material_Light_CompoundButton_Switch" since="24"/>
+		<field name="Widget_Material_Light_DatePicker" since="21"/>
+		<field name="Widget_Material_Light_DropDownItem" since="21"/>
+		<field name="Widget_Material_Light_DropDownItem_Spinner" since="21"/>
+		<field name="Widget_Material_Light_EditText" since="21"/>
+		<field name="Widget_Material_Light_ExpandableListView" since="21"/>
+		<field name="Widget_Material_Light_FastScroll" since="21"/>
+		<field name="Widget_Material_Light_GridView" since="21"/>
+		<field name="Widget_Material_Light_HorizontalScrollView" since="21"/>
+		<field name="Widget_Material_Light_ImageButton" since="21"/>
+		<field name="Widget_Material_Light_ListPopupWindow" since="21"/>
+		<field name="Widget_Material_Light_ListView" since="21"/>
+		<field name="Widget_Material_Light_ListView_DropDown" since="21"/>
+		<field name="Widget_Material_Light_MediaRouteButton" since="21"/>
+		<field name="Widget_Material_Light_NumberPicker" since="24"/>
+		<field name="Widget_Material_Light_PopupMenu" since="21"/>
+		<field name="Widget_Material_Light_PopupMenu_Overflow" since="21"/>
+		<field name="Widget_Material_Light_PopupWindow" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar_Horizontal" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar_Inverse" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar_Large" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar_Large_Inverse" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar_Small" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar_Small_Inverse" since="21"/>
+		<field name="Widget_Material_Light_ProgressBar_Small_Title" since="21"/>
+		<field name="Widget_Material_Light_RatingBar" since="21"/>
+		<field name="Widget_Material_Light_RatingBar_Indicator" since="21"/>
+		<field name="Widget_Material_Light_RatingBar_Small" since="21"/>
+		<field name="Widget_Material_Light_ScrollView" since="21"/>
+		<field name="Widget_Material_Light_SearchView" since="21"/>
+		<field name="Widget_Material_Light_SeekBar" since="21"/>
+		<field name="Widget_Material_Light_SegmentedButton" since="21"/>
+		<field name="Widget_Material_Light_Spinner" since="21"/>
+		<field name="Widget_Material_Light_Spinner_Underlined" since="21"/>
+		<field name="Widget_Material_Light_StackView" since="21"/>
+		<field name="Widget_Material_Light_Tab" since="21"/>
+		<field name="Widget_Material_Light_TabWidget" since="21"/>
+		<field name="Widget_Material_Light_TextView" since="21"/>
+		<field name="Widget_Material_Light_TextView_SpinnerItem" since="21"/>
+		<field name="Widget_Material_Light_TimePicker" since="21"/>
+		<field name="Widget_Material_Light_WebTextView" since="21"/>
+		<field name="Widget_Material_Light_WebView" since="21"/>
+		<field name="Widget_Material_ListPopupWindow" since="21"/>
+		<field name="Widget_Material_ListView" since="21"/>
+		<field name="Widget_Material_ListView_DropDown" since="21"/>
+		<field name="Widget_Material_MediaRouteButton" since="21"/>
+		<field name="Widget_Material_NumberPicker" since="24"/>
+		<field name="Widget_Material_PopupMenu" since="21"/>
+		<field name="Widget_Material_PopupMenu_Overflow" since="21"/>
+		<field name="Widget_Material_PopupWindow" since="21"/>
+		<field name="Widget_Material_ProgressBar" since="21"/>
+		<field name="Widget_Material_ProgressBar_Horizontal" since="21"/>
+		<field name="Widget_Material_ProgressBar_Large" since="21"/>
+		<field name="Widget_Material_ProgressBar_Small" since="21"/>
+		<field name="Widget_Material_ProgressBar_Small_Title" since="21"/>
+		<field name="Widget_Material_RatingBar" since="21"/>
+		<field name="Widget_Material_RatingBar_Indicator" since="21"/>
+		<field name="Widget_Material_RatingBar_Small" since="21"/>
+		<field name="Widget_Material_ScrollView" since="21"/>
+		<field name="Widget_Material_SearchView" since="21"/>
+		<field name="Widget_Material_SeekBar" since="21"/>
+		<field name="Widget_Material_SeekBar_Discrete" since="24"/>
+		<field name="Widget_Material_SegmentedButton" since="21"/>
+		<field name="Widget_Material_Spinner" since="21"/>
+		<field name="Widget_Material_Spinner_Underlined" since="21"/>
+		<field name="Widget_Material_StackView" since="21"/>
+		<field name="Widget_Material_Tab" since="21"/>
+		<field name="Widget_Material_TabWidget" since="21"/>
+		<field name="Widget_Material_TextView" since="21"/>
+		<field name="Widget_Material_TextView_SpinnerItem" since="21"/>
+		<field name="Widget_Material_TimePicker" since="21"/>
+		<field name="Widget_Material_Toolbar" since="21"/>
+		<field name="Widget_Material_Toolbar_Button_Navigation" since="21"/>
+		<field name="Widget_Material_WebTextView" since="21"/>
+		<field name="Widget_Material_WebView" since="21"/>
+		<field name="Widget_PopupMenu" since="11"/>
+		<field name="Widget_PopupWindow"/>
+		<field name="Widget_ProgressBar"/>
+		<field name="Widget_ProgressBar_Horizontal"/>
+		<field name="Widget_ProgressBar_Inverse" since="4"/>
+		<field name="Widget_ProgressBar_Large"/>
+		<field name="Widget_ProgressBar_Large_Inverse" since="4"/>
+		<field name="Widget_ProgressBar_Small"/>
+		<field name="Widget_ProgressBar_Small_Inverse" since="4"/>
+		<field name="Widget_RatingBar"/>
+		<field name="Widget_ScrollView"/>
+		<field name="Widget_SeekBar"/>
+		<field name="Widget_Spinner"/>
+		<field name="Widget_Spinner_DropDown" since="11"/>
+		<field name="Widget_StackView" since="21"/>
+		<field name="Widget_TabWidget"/>
+		<field name="Widget_TextView"/>
+		<field name="Widget_TextView_PopupMenu"/>
+		<field name="Widget_TextView_SpinnerItem"/>
+		<field name="Widget_Toolbar" since="21"/>
+		<field name="Widget_Toolbar_Button_Navigation" since="21"/>
+		<field name="Widget_WebView"/>
+	</class>
+	<class name="android/R$transition" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="explode"/>
+		<field name="fade"/>
+		<field name="move"/>
+		<field name="no_transition"/>
+		<field name="slide_bottom"/>
+		<field name="slide_left"/>
+		<field name="slide_right"/>
+		<field name="slide_top"/>
+	</class>
+	<class name="android/R$xml" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityButtonController" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="isAccessibilityButtonAvailable()Z"/>
+		<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;)V"/>
+		<method name="registerAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;Landroid/os/Handler;)V"/>
+		<method name="unregisterAccessibilityButtonCallback(Landroid/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback;)V"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityButtonController$AccessibilityButtonCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAvailabilityChanged(Landroid/accessibilityservice/AccessibilityButtonController;Z)V"/>
+		<method name="onClicked(Landroid/accessibilityservice/AccessibilityButtonController;)V"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityGestureEvent" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="gestureIdToString(I)Ljava/lang/String;" since="31"/>
+		<method name="getDisplayId()I"/>
+		<method name="getGestureId()I"/>
+		<method name="getMotionEvents()Ljava/util/List;" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService" since="4">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="disableSelf()V" since="24"/>
+		<method name="dispatchGesture(Landroid/accessibilityservice/GestureDescription;Landroid/accessibilityservice/AccessibilityService$GestureResultCallback;Landroid/os/Handler;)Z" since="24"/>
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="21"/>
+		<method name="getAccessibilityButtonController()Landroid/accessibilityservice/AccessibilityButtonController;" since="26"/>
+		<method name="getAccessibilityButtonController(I)Landroid/accessibilityservice/AccessibilityButtonController;" since="30"/>
+		<method name="getFingerprintGestureController()Landroid/accessibilityservice/FingerprintGestureController;" since="26"/>
+		<method name="getMagnificationController()Landroid/accessibilityservice/AccessibilityService$MagnificationController;" since="24"/>
+		<method name="getRootInActiveWindow()Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
+		<method name="getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;" since="16"/>
+		<method name="getSoftKeyboardController()Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController;" since="24"/>
+		<method name="getSystemActions()Ljava/util/List;" since="30"/>
+		<method name="getWindows()Ljava/util/List;" since="21"/>
+		<method name="getWindowsOnAllDisplays()Landroid/util/SparseArray;" since="30"/>
+		<method name="onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V"/>
+		<method name="onGesture(I)Z" since="16" deprecated="30"/>
+		<method name="onGesture(Landroid/accessibilityservice/AccessibilityGestureEvent;)Z" since="30"/>
+		<method name="onInterrupt()V"/>
+		<method name="onKeyEvent(Landroid/view/KeyEvent;)Z" since="18"/>
+		<method name="onServiceConnected()V"/>
+		<method name="onSystemActionsChanged()V" since="30"/>
+		<method name="performGlobalAction(I)Z" since="16"/>
+		<method name="setAccessibilityFocusAppearance(II)V" since="31"/>
+		<method name="setGestureDetectionPassthroughRegion(ILandroid/graphics/Region;)V" since="30"/>
+		<method name="setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V"/>
+		<method name="setTouchExplorationPassthroughRegion(ILandroid/graphics/Region;)V" since="30"/>
+		<method name="takeScreenshot(ILjava/util/concurrent/Executor;Landroid/accessibilityservice/AccessibilityService$TakeScreenshotCallback;)V" since="30"/>
+		<field name="ERROR_TAKE_SCREENSHOT_INTERNAL_ERROR" since="30"/>
+		<field name="ERROR_TAKE_SCREENSHOT_INTERVAL_TIME_SHORT" since="30"/>
+		<field name="ERROR_TAKE_SCREENSHOT_INVALID_DISPLAY" since="30"/>
+		<field name="ERROR_TAKE_SCREENSHOT_NO_ACCESSIBILITY_ACCESS" since="30"/>
+		<field name="GESTURE_2_FINGER_DOUBLE_TAP" since="30"/>
+		<field name="GESTURE_2_FINGER_DOUBLE_TAP_AND_HOLD" since="30"/>
+		<field name="GESTURE_2_FINGER_SINGLE_TAP" since="30"/>
+		<field name="GESTURE_2_FINGER_SWIPE_DOWN" since="30"/>
+		<field name="GESTURE_2_FINGER_SWIPE_LEFT" since="30"/>
+		<field name="GESTURE_2_FINGER_SWIPE_RIGHT" since="30"/>
+		<field name="GESTURE_2_FINGER_SWIPE_UP" since="30"/>
+		<field name="GESTURE_2_FINGER_TRIPLE_TAP" since="30"/>
+		<field name="GESTURE_2_FINGER_TRIPLE_TAP_AND_HOLD" since="31"/>
+		<field name="GESTURE_3_FINGER_DOUBLE_TAP" since="30"/>
+		<field name="GESTURE_3_FINGER_DOUBLE_TAP_AND_HOLD" since="30"/>
+		<field name="GESTURE_3_FINGER_SINGLE_TAP" since="30"/>
+		<field name="GESTURE_3_FINGER_SINGLE_TAP_AND_HOLD" since="31"/>
+		<field name="GESTURE_3_FINGER_SWIPE_DOWN" since="30"/>
+		<field name="GESTURE_3_FINGER_SWIPE_LEFT" since="30"/>
+		<field name="GESTURE_3_FINGER_SWIPE_RIGHT" since="30"/>
+		<field name="GESTURE_3_FINGER_SWIPE_UP" since="30"/>
+		<field name="GESTURE_3_FINGER_TRIPLE_TAP" since="30"/>
+		<field name="GESTURE_3_FINGER_TRIPLE_TAP_AND_HOLD" since="31"/>
+		<field name="GESTURE_4_FINGER_DOUBLE_TAP" since="30"/>
+		<field name="GESTURE_4_FINGER_DOUBLE_TAP_AND_HOLD" since="30"/>
+		<field name="GESTURE_4_FINGER_SINGLE_TAP" since="30"/>
+		<field name="GESTURE_4_FINGER_SWIPE_DOWN" since="30"/>
+		<field name="GESTURE_4_FINGER_SWIPE_LEFT" since="30"/>
+		<field name="GESTURE_4_FINGER_SWIPE_RIGHT" since="30"/>
+		<field name="GESTURE_4_FINGER_SWIPE_UP" since="30"/>
+		<field name="GESTURE_4_FINGER_TRIPLE_TAP" since="30"/>
+		<field name="GESTURE_DOUBLE_TAP" since="30"/>
+		<field name="GESTURE_DOUBLE_TAP_AND_HOLD" since="30"/>
+		<field name="GESTURE_SWIPE_DOWN" since="16"/>
+		<field name="GESTURE_SWIPE_DOWN_AND_LEFT" since="16"/>
+		<field name="GESTURE_SWIPE_DOWN_AND_RIGHT" since="16"/>
+		<field name="GESTURE_SWIPE_DOWN_AND_UP" since="16"/>
+		<field name="GESTURE_SWIPE_LEFT" since="16"/>
+		<field name="GESTURE_SWIPE_LEFT_AND_DOWN" since="16"/>
+		<field name="GESTURE_SWIPE_LEFT_AND_RIGHT" since="16"/>
+		<field name="GESTURE_SWIPE_LEFT_AND_UP" since="16"/>
+		<field name="GESTURE_SWIPE_RIGHT" since="16"/>
+		<field name="GESTURE_SWIPE_RIGHT_AND_DOWN" since="16"/>
+		<field name="GESTURE_SWIPE_RIGHT_AND_LEFT" since="16"/>
+		<field name="GESTURE_SWIPE_RIGHT_AND_UP" since="16"/>
+		<field name="GESTURE_SWIPE_UP" since="16"/>
+		<field name="GESTURE_SWIPE_UP_AND_DOWN" since="16"/>
+		<field name="GESTURE_SWIPE_UP_AND_LEFT" since="16"/>
+		<field name="GESTURE_SWIPE_UP_AND_RIGHT" since="16"/>
+		<field name="GESTURE_UNKNOWN" since="31"/>
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_ALL_APPS" since="31"/>
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_BUTTON" since="31"/>
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_BUTTON_CHOOSER" since="31"/>
+		<field name="GLOBAL_ACTION_ACCESSIBILITY_SHORTCUT" since="31"/>
+		<field name="GLOBAL_ACTION_BACK" since="16"/>
+		<field name="GLOBAL_ACTION_DISMISS_NOTIFICATION_SHADE" since="31"/>
+		<field name="GLOBAL_ACTION_HOME" since="16"/>
+		<field name="GLOBAL_ACTION_KEYCODE_HEADSETHOOK" since="31"/>
+		<field name="GLOBAL_ACTION_LOCK_SCREEN" since="28"/>
+		<field name="GLOBAL_ACTION_NOTIFICATIONS" since="16"/>
+		<field name="GLOBAL_ACTION_POWER_DIALOG" since="21"/>
+		<field name="GLOBAL_ACTION_QUICK_SETTINGS" since="17"/>
+		<field name="GLOBAL_ACTION_RECENTS" since="16"/>
+		<field name="GLOBAL_ACTION_TAKE_SCREENSHOT" since="28"/>
+		<field name="GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN" since="24"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA" since="14"/>
+		<field name="SHOW_MODE_AUTO" since="24"/>
+		<field name="SHOW_MODE_HIDDEN" since="24"/>
+		<field name="SHOW_MODE_IGNORE_HARD_KEYBOARD" since="29"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$GestureResultCallback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCancelled(Landroid/accessibilityservice/GestureDescription;)V"/>
+		<method name="onCompleted(Landroid/accessibilityservice/GestureDescription;)V"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$MagnificationController" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;)V"/>
+		<method name="addListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;Landroid/os/Handler;)V"/>
+		<method name="getCenterX()F"/>
+		<method name="getCenterY()F"/>
+		<method name="getMagnificationRegion()Landroid/graphics/Region;"/>
+		<method name="getScale()F"/>
+		<method name="removeListener(Landroid/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener;)Z"/>
+		<method name="reset(Z)Z"/>
+		<method name="setCenter(FFZ)Z"/>
+		<method name="setScale(FZ)Z"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$MagnificationController$OnMagnificationChangedListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onMagnificationChanged(Landroid/accessibilityservice/AccessibilityService$MagnificationController;Landroid/graphics/Region;FFF)V"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$ScreenshotResult" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;"/>
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;"/>
+		<method name="getTimestamp()J"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$SoftKeyboardController" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;)V"/>
+		<method name="addOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;Landroid/os/Handler;)V"/>
+		<method name="getShowMode()I"/>
+		<method name="removeOnShowModeChangedListener(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener;)Z"/>
+		<method name="setShowMode(I)Z"/>
+		<method name="switchToInputMethod(Ljava/lang/String;)Z" since="30"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$SoftKeyboardController$OnShowModeChangedListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onShowModeChanged(Landroid/accessibilityservice/AccessibilityService$SoftKeyboardController;I)V"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityService$TakeScreenshotCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onFailure(I)V"/>
+		<method name="onSuccess(Landroid/accessibilityservice/AccessibilityService$ScreenshotResult;)V"/>
+	</class>
+	<class name="android/accessibilityservice/AccessibilityServiceInfo" since="4">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="capabilityToString(I)Ljava/lang/String;" since="18"/>
+		<method name="feedbackTypeToString(I)Ljava/lang/String;" since="14"/>
+		<method name="flagToString(I)Ljava/lang/String;" since="14"/>
+		<method name="getCanRetrieveWindowContent()Z" since="14" deprecated="18"/>
+		<method name="getCapabilities()I" since="18"/>
+		<method name="getDescription()Ljava/lang/String;" since="14" deprecated="16"/>
+		<method name="getId()Ljava/lang/String;" since="14"/>
+		<method name="getInteractiveUiTimeoutMillis()I" since="29"/>
+		<method name="getNonInteractiveUiTimeoutMillis()I" since="29"/>
+		<method name="getResolveInfo()Landroid/content/pm/ResolveInfo;" since="14"/>
+		<method name="getSettingsActivityName()Ljava/lang/String;" since="14"/>
+		<method name="isAccessibilityTool()Z" since="31"/>
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/String;" since="16"/>
+		<method name="loadSummary(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="26"/>
+		<method name="setInteractiveUiTimeoutMillis(I)V" since="29"/>
+		<method name="setNonInteractiveUiTimeoutMillis(I)V" since="29"/>
+		<field name="CAPABILITY_CAN_CONTROL_MAGNIFICATION" since="24"/>
+		<field name="CAPABILITY_CAN_PERFORM_GESTURES" since="24"/>
+		<field name="CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26"/>
+		<field name="CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS" since="18"/>
+		<field name="CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES" since="26"/>
+		<field name="CAPABILITY_CAN_REQUEST_TOUCH_EXPLORATION" since="18"/>
+		<field name="CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT" since="18"/>
+		<field name="CAPABILITY_CAN_TAKE_SCREENSHOT" since="30"/>
+		<field name="CREATOR"/>
+		<field name="DEFAULT"/>
+		<field name="FEEDBACK_ALL_MASK" since="14"/>
+		<field name="FEEDBACK_AUDIBLE"/>
+		<field name="FEEDBACK_BRAILLE" since="17"/>
+		<field name="FEEDBACK_GENERIC"/>
+		<field name="FEEDBACK_HAPTIC"/>
+		<field name="FEEDBACK_SPOKEN"/>
+		<field name="FEEDBACK_VISUAL"/>
+		<field name="FLAG_ENABLE_ACCESSIBILITY_VOLUME" since="26"/>
+		<field name="FLAG_INCLUDE_NOT_IMPORTANT_VIEWS" since="16"/>
+		<field name="FLAG_REPORT_VIEW_IDS" since="18"/>
+		<field name="FLAG_REQUEST_2_FINGER_PASSTHROUGH" since="31"/>
+		<field name="FLAG_REQUEST_ACCESSIBILITY_BUTTON" since="26"/>
+		<field name="FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY" since="18" deprecated="26"/>
+		<field name="FLAG_REQUEST_FILTER_KEY_EVENTS" since="18"/>
+		<field name="FLAG_REQUEST_FINGERPRINT_GESTURES" since="26"/>
+		<field name="FLAG_REQUEST_MULTI_FINGER_GESTURES" since="30"/>
+		<field name="FLAG_REQUEST_SHORTCUT_WARNING_DIALOG_SPOKEN_FEEDBACK" since="29"/>
+		<field name="FLAG_REQUEST_TOUCH_EXPLORATION_MODE" since="16"/>
+		<field name="FLAG_RETRIEVE_INTERACTIVE_WINDOWS" since="21"/>
+		<field name="FLAG_SEND_MOTION_EVENTS" since="31"/>
+		<field name="FLAG_SERVICE_HANDLES_DOUBLE_TAP" since="30"/>
+		<field name="eventTypes"/>
+		<field name="feedbackType"/>
+		<field name="flags"/>
+		<field name="notificationTimeout"/>
+		<field name="packageNames"/>
+	</class>
+	<class name="android/accessibilityservice/FingerprintGestureController" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="isGestureDetectionAvailable()Z"/>
+		<method name="registerFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;Landroid/os/Handler;)V"/>
+		<method name="unregisterFingerprintGestureCallback(Landroid/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback;)V"/>
+		<field name="FINGERPRINT_GESTURE_SWIPE_DOWN"/>
+		<field name="FINGERPRINT_GESTURE_SWIPE_LEFT"/>
+		<field name="FINGERPRINT_GESTURE_SWIPE_RIGHT"/>
+		<field name="FINGERPRINT_GESTURE_SWIPE_UP"/>
+	</class>
+	<class name="android/accessibilityservice/FingerprintGestureController$FingerprintGestureCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGestureDetected(I)V"/>
+		<method name="onGestureDetectionAvailabilityChanged(Z)V"/>
+	</class>
+	<class name="android/accessibilityservice/GestureDescription" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getDisplayId()I" since="30"/>
+		<method name="getMaxGestureDuration()J"/>
+		<method name="getMaxStrokeCount()I"/>
+		<method name="getStroke(I)Landroid/accessibilityservice/GestureDescription$StrokeDescription;"/>
+		<method name="getStrokeCount()I"/>
+	</class>
+	<class name="android/accessibilityservice/GestureDescription$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addStroke(Landroid/accessibilityservice/GestureDescription$StrokeDescription;)Landroid/accessibilityservice/GestureDescription$Builder;"/>
+		<method name="build()Landroid/accessibilityservice/GestureDescription;"/>
+		<method name="setDisplayId(I)Landroid/accessibilityservice/GestureDescription$Builder;" since="30"/>
+	</class>
+	<class name="android/accessibilityservice/GestureDescription$StrokeDescription" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Path;JJ)V"/>
+		<method name="&lt;init>(Landroid/graphics/Path;JJZ)V" since="26"/>
+		<method name="continueStroke(Landroid/graphics/Path;JJZ)Landroid/accessibilityservice/GestureDescription$StrokeDescription;" since="26"/>
+		<method name="getDuration()J"/>
+		<method name="getPath()Landroid/graphics/Path;"/>
+		<method name="getStartTime()J"/>
+		<method name="willContinue()Z" since="26"/>
+	</class>
+	<class name="android/accounts/AbstractAccountAuthenticator" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="addAccount(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
+		<method name="addAccountFromCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)Landroid/os/Bundle;" since="18"/>
+		<method name="confirmCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
+		<method name="editProperties(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;)Landroid/os/Bundle;"/>
+		<method name="finishSession(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26"/>
+		<method name="getAccountCredentialsForCloning(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;)Landroid/os/Bundle;" since="18"/>
+		<method name="getAccountRemovalAllowed(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;)Landroid/os/Bundle;"/>
+		<method name="getAuthToken(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
+		<method name="getAuthTokenLabel(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getIBinder()Landroid/os/IBinder;"/>
+		<method name="hasFeatures(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;[Ljava/lang/String;)Landroid/os/Bundle;"/>
+		<method name="isCredentialsUpdateSuggested(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;)Landroid/os/Bundle;" since="26"/>
+		<method name="startAddAccountSession(Landroid/accounts/AccountAuthenticatorResponse;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26"/>
+		<method name="startUpdateCredentialsSession(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="26"/>
+		<method name="updateCredentials(Landroid/accounts/AccountAuthenticatorResponse;Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;"/>
+		<field name="KEY_CUSTOM_TOKEN_EXPIRY" since="23"/>
+	</class>
+	<class name="android/accounts/Account" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+		<field name="name"/>
+		<field name="type"/>
+	</class>
+	<class name="android/accounts/AccountAuthenticatorActivity" since="5" deprecated="30">
+		<extends name="android/app/Activity"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="setAccountAuthenticatorResult(Landroid/os/Bundle;)V" deprecated="30"/>
+	</class>
+	<class name="android/accounts/AccountAuthenticatorResponse" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="onError(ILjava/lang/String;)V"/>
+		<method name="onRequestContinued()V"/>
+		<method name="onResult(Landroid/os/Bundle;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/accounts/AccountManager" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="addAccount(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
+		<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)Z"/>
+		<method name="addAccountExplicitly(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Ljava/util/Map;)Z" since="26"/>
+		<method name="addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z)V"/>
+		<method name="addOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;Landroid/os/Handler;Z[Ljava/lang/String;)V" since="26"/>
+		<method name="blockingGetAuthToken(Landroid/accounts/Account;Ljava/lang/String;Z)Ljava/lang/String;"/>
+		<method name="clearPassword(Landroid/accounts/Account;)V"/>
+		<method name="confirmCredentials(Landroid/accounts/Account;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
+		<method name="editProperties(Ljava/lang/String;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
+		<method name="finishSession(Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
+		<method name="get(Landroid/content/Context;)Landroid/accounts/AccountManager;"/>
+		<method name="getAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;)I" since="26"/>
+		<method name="getAccounts()[Landroid/accounts/Account;"/>
+		<method name="getAccountsAndVisibilityForPackage(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Map;" since="26"/>
+		<method name="getAccountsByType(Ljava/lang/String;)[Landroid/accounts/Account;"/>
+		<method name="getAccountsByTypeAndFeatures(Ljava/lang/String;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
+		<method name="getAccountsByTypeForPackage(Ljava/lang/String;Ljava/lang/String;)[Landroid/accounts/Account;" since="18"/>
+		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
+		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="14"/>
+		<method name="getAuthToken(Landroid/accounts/Account;Ljava/lang/String;ZLandroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="15"/>
+		<method name="getAuthTokenByFeatures(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/Bundle;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
+		<method name="getAuthenticatorTypes()[Landroid/accounts/AuthenticatorDescription;"/>
+		<method name="getPackagesAndVisibilityForAccount(Landroid/accounts/Account;)Ljava/util/Map;" since="26"/>
+		<method name="getPassword(Landroid/accounts/Account;)Ljava/lang/String;"/>
+		<method name="getPreviousName(Landroid/accounts/Account;)Ljava/lang/String;" since="21"/>
+		<method name="getUserData(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="hasFeatures(Landroid/accounts/Account;[Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="8"/>
+		<method name="invalidateAuthToken(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="isCredentialsUpdateSuggested(Landroid/accounts/Account;Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
+		<method name="newChooseAccountIntent(Landroid/accounts/Account;Ljava/util/ArrayList;[Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;" since="14" deprecated="23"/>
+		<method name="newChooseAccountIntent(Landroid/accounts/Account;Ljava/util/List;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;" since="23"/>
+		<method name="notifyAccountAuthenticated(Landroid/accounts/Account;)Z" since="23"/>
+		<method name="peekAuthToken(Landroid/accounts/Account;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="removeAccount(Landroid/accounts/Account;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" deprecated="22"/>
+		<method name="removeAccount(Landroid/accounts/Account;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="22"/>
+		<method name="removeAccountExplicitly(Landroid/accounts/Account;)Z" since="22"/>
+		<method name="removeOnAccountsUpdatedListener(Landroid/accounts/OnAccountsUpdateListener;)V"/>
+		<method name="renameAccount(Landroid/accounts/Account;Ljava/lang/String;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="21"/>
+		<method name="setAccountVisibility(Landroid/accounts/Account;Ljava/lang/String;I)Z" since="26"/>
+		<method name="setAuthToken(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setPassword(Landroid/accounts/Account;Ljava/lang/String;)V"/>
+		<method name="setUserData(Landroid/accounts/Account;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="startAddAccountSession(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
+		<method name="startUpdateCredentialsSession(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;" since="26"/>
+		<method name="updateCredentials(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Activity;Landroid/accounts/AccountManagerCallback;Landroid/os/Handler;)Landroid/accounts/AccountManagerFuture;"/>
+		<field name="ACTION_ACCOUNT_REMOVED" since="26"/>
+		<field name="ACTION_AUTHENTICATOR_INTENT"/>
+		<field name="AUTHENTICATOR_ATTRIBUTES_NAME"/>
+		<field name="AUTHENTICATOR_META_DATA_NAME"/>
+		<field name="ERROR_CODE_BAD_ARGUMENTS"/>
+		<field name="ERROR_CODE_BAD_AUTHENTICATION" since="18"/>
+		<field name="ERROR_CODE_BAD_REQUEST"/>
+		<field name="ERROR_CODE_CANCELED"/>
+		<field name="ERROR_CODE_INVALID_RESPONSE"/>
+		<field name="ERROR_CODE_NETWORK_ERROR"/>
+		<field name="ERROR_CODE_REMOTE_EXCEPTION"/>
+		<field name="ERROR_CODE_UNSUPPORTED_OPERATION"/>
+		<field name="KEY_ACCOUNTS"/>
+		<field name="KEY_ACCOUNT_AUTHENTICATOR_RESPONSE"/>
+		<field name="KEY_ACCOUNT_MANAGER_RESPONSE"/>
+		<field name="KEY_ACCOUNT_NAME"/>
+		<field name="KEY_ACCOUNT_SESSION_BUNDLE" since="26"/>
+		<field name="KEY_ACCOUNT_STATUS_TOKEN" since="26"/>
+		<field name="KEY_ACCOUNT_TYPE"/>
+		<field name="KEY_ANDROID_PACKAGE_NAME" since="14"/>
+		<field name="KEY_AUTHENTICATOR_TYPES"/>
+		<field name="KEY_AUTHTOKEN"/>
+		<field name="KEY_AUTH_FAILED_MESSAGE"/>
+		<field name="KEY_AUTH_TOKEN_LABEL"/>
+		<field name="KEY_BOOLEAN_RESULT"/>
+		<field name="KEY_CALLER_PID" since="11"/>
+		<field name="KEY_CALLER_UID" since="11"/>
+		<field name="KEY_ERROR_CODE"/>
+		<field name="KEY_ERROR_MESSAGE"/>
+		<field name="KEY_INTENT"/>
+		<field name="KEY_LAST_AUTHENTICATED_TIME" since="23"/>
+		<field name="KEY_PASSWORD"/>
+		<field name="KEY_USERDATA"/>
+		<field name="LOGIN_ACCOUNTS_CHANGED_ACTION" deprecated="26"/>
+		<field name="PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE" since="26"/>
+		<field name="PACKAGE_NAME_KEY_LEGACY_VISIBLE" since="26"/>
+		<field name="VISIBILITY_NOT_VISIBLE" since="26"/>
+		<field name="VISIBILITY_UNDEFINED" since="26"/>
+		<field name="VISIBILITY_USER_MANAGED_NOT_VISIBLE" since="26"/>
+		<field name="VISIBILITY_USER_MANAGED_VISIBLE" since="26"/>
+		<field name="VISIBILITY_VISIBLE" since="26"/>
+	</class>
+	<class name="android/accounts/AccountManagerCallback" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="run(Landroid/accounts/AccountManagerFuture;)V"/>
+	</class>
+	<class name="android/accounts/AccountManagerFuture" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="cancel(Z)Z"/>
+		<method name="getResult()Ljava/lang/Object;"/>
+		<method name="getResult(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
+		<method name="isCancelled()Z"/>
+		<method name="isDone()Z"/>
+	</class>
+	<class name="android/accounts/AccountsException" since="5">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/accounts/AuthenticatorDescription" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;IIII)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;IIIIZ)V" since="11"/>
+		<method name="newKey(Ljava/lang/String;)Landroid/accounts/AuthenticatorDescription;"/>
+		<field name="CREATOR"/>
+		<field name="accountPreferencesId"/>
+		<field name="customTokens" since="11"/>
+		<field name="iconId"/>
+		<field name="labelId"/>
+		<field name="packageName"/>
+		<field name="smallIconId"/>
+		<field name="type"/>
+	</class>
+	<class name="android/accounts/AuthenticatorException" since="5">
+		<extends name="android/accounts/AccountsException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/accounts/NetworkErrorException" since="5">
+		<extends name="android/accounts/AccountsException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/accounts/OnAccountsUpdateListener" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="onAccountsUpdated([Landroid/accounts/Account;)V"/>
+	</class>
+	<class name="android/accounts/OperationCanceledException" since="5">
+		<extends name="android/accounts/AccountsException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/animation/Animator" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="addListener(Landroid/animation/Animator$AnimatorListener;)V"/>
+		<method name="addPauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V" since="19"/>
+		<method name="cancel()V"/>
+		<method name="clone()Landroid/animation/Animator;"/>
+		<method name="end()V"/>
+		<method name="getDuration()J"/>
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" since="18"/>
+		<method name="getListeners()Ljava/util/ArrayList;"/>
+		<method name="getStartDelay()J"/>
+		<method name="getTotalDuration()J" since="24"/>
+		<method name="isPaused()Z" since="19"/>
+		<method name="isRunning()Z"/>
+		<method name="isStarted()Z" since="14"/>
+		<method name="pause()V" since="19"/>
+		<method name="removeAllListeners()V"/>
+		<method name="removeListener(Landroid/animation/Animator$AnimatorListener;)V"/>
+		<method name="removePauseListener(Landroid/animation/Animator$AnimatorPauseListener;)V" since="19"/>
+		<method name="resume()V" since="19"/>
+		<method name="setDuration(J)Landroid/animation/Animator;"/>
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)V"/>
+		<method name="setStartDelay(J)V"/>
+		<method name="setTarget(Ljava/lang/Object;)V"/>
+		<method name="setupEndValues()V"/>
+		<method name="setupStartValues()V"/>
+		<method name="start()V"/>
+		<field name="DURATION_INFINITE" since="24"/>
+	</class>
+	<class name="android/animation/Animator$AnimatorListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onAnimationCancel(Landroid/animation/Animator;)V"/>
+		<method name="onAnimationEnd(Landroid/animation/Animator;)V"/>
+		<method name="onAnimationEnd(Landroid/animation/Animator;Z)V" since="26"/>
+		<method name="onAnimationRepeat(Landroid/animation/Animator;)V"/>
+		<method name="onAnimationStart(Landroid/animation/Animator;)V"/>
+		<method name="onAnimationStart(Landroid/animation/Animator;Z)V" since="26"/>
+	</class>
+	<class name="android/animation/Animator$AnimatorPauseListener" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onAnimationPause(Landroid/animation/Animator;)V"/>
+		<method name="onAnimationResume(Landroid/animation/Animator;)V"/>
+	</class>
+	<class name="android/animation/AnimatorInflater" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="loadAnimator(Landroid/content/Context;I)Landroid/animation/Animator;"/>
+		<method name="loadStateListAnimator(Landroid/content/Context;I)Landroid/animation/StateListAnimator;" since="21"/>
+	</class>
+	<class name="android/animation/AnimatorListenerAdapter" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/Animator$AnimatorListener"/>
+		<implements name="android/animation/Animator$AnimatorPauseListener" since="19"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/animation/AnimatorSet" since="11">
+		<extends name="android/animation/Animator"/>
+		<method name="&lt;init>()V"/>
+		<method name="clone()Landroid/animation/AnimatorSet;"/>
+		<method name="getChildAnimations()Ljava/util/ArrayList;"/>
+		<method name="getCurrentPlayTime()J" since="26"/>
+		<method name="play(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
+		<method name="playSequentially(Ljava/util/List;)V"/>
+		<method name="playSequentially([Landroid/animation/Animator;)V"/>
+		<method name="playTogether(Ljava/util/Collection;)V"/>
+		<method name="playTogether([Landroid/animation/Animator;)V"/>
+		<method name="reverse()V" since="26"/>
+		<method name="setCurrentPlayTime(J)V" since="26"/>
+		<method name="setDuration(J)Landroid/animation/AnimatorSet;"/>
+	</class>
+	<class name="android/animation/AnimatorSet$Builder" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="after(J)Landroid/animation/AnimatorSet$Builder;"/>
+		<method name="after(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
+		<method name="before(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
+		<method name="with(Landroid/animation/Animator;)Landroid/animation/AnimatorSet$Builder;"/>
+	</class>
+	<class name="android/animation/ArgbEvaluator" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TypeEvaluator"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/animation/BidirectionalTypeConverter" since="21">
+		<extends name="android/animation/TypeConverter"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/Class;)V"/>
+		<method name="convertBack(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="invert()Landroid/animation/BidirectionalTypeConverter;"/>
+	</class>
+	<class name="android/animation/FloatArrayEvaluator" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TypeEvaluator"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([F)V"/>
+		<method name="evaluate(F[F[F)[F"/>
+	</class>
+	<class name="android/animation/FloatEvaluator" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TypeEvaluator"/>
+		<method name="&lt;init>()V"/>
+		<method name="evaluate(FLjava/lang/Number;Ljava/lang/Number;)Ljava/lang/Float;" since="14"/>
+	</class>
+	<class name="android/animation/IntArrayEvaluator" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TypeEvaluator"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([I)V"/>
+		<method name="evaluate(F[I[I)[I"/>
+	</class>
+	<class name="android/animation/IntEvaluator" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TypeEvaluator"/>
+		<method name="&lt;init>()V"/>
+		<method name="evaluate(FLjava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;" since="14"/>
+	</class>
+	<class name="android/animation/Keyframe" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="clone()Landroid/animation/Keyframe;"/>
+		<method name="getFraction()F"/>
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;"/>
+		<method name="getType()Ljava/lang/Class;"/>
+		<method name="getValue()Ljava/lang/Object;"/>
+		<method name="hasValue()Z"/>
+		<method name="ofFloat(F)Landroid/animation/Keyframe;"/>
+		<method name="ofFloat(FF)Landroid/animation/Keyframe;"/>
+		<method name="ofInt(F)Landroid/animation/Keyframe;"/>
+		<method name="ofInt(FI)Landroid/animation/Keyframe;"/>
+		<method name="ofObject(F)Landroid/animation/Keyframe;"/>
+		<method name="ofObject(FLjava/lang/Object;)Landroid/animation/Keyframe;"/>
+		<method name="setFraction(F)V"/>
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)V"/>
+		<method name="setValue(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/animation/LayoutTransition" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addChild(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
+		<method name="addTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V"/>
+		<method name="disableTransitionType(I)V" since="16"/>
+		<method name="enableTransitionType(I)V" since="16"/>
+		<method name="getAnimator(I)Landroid/animation/Animator;"/>
+		<method name="getDuration(I)J"/>
+		<method name="getInterpolator(I)Landroid/animation/TimeInterpolator;"/>
+		<method name="getStagger(I)J"/>
+		<method name="getStartDelay(I)J"/>
+		<method name="getTransitionListeners()Ljava/util/List;"/>
+		<method name="hideChild(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="16"/>
+		<method name="hideChild(Landroid/view/ViewGroup;Landroid/view/View;I)V" since="16"/>
+		<method name="isChangingLayout()Z"/>
+		<method name="isRunning()Z"/>
+		<method name="isTransitionTypeEnabled(I)Z" since="16"/>
+		<method name="removeChild(Landroid/view/ViewGroup;Landroid/view/View;)V"/>
+		<method name="removeTransitionListener(Landroid/animation/LayoutTransition$TransitionListener;)V"/>
+		<method name="setAnimateParentHierarchy(Z)V" since="14"/>
+		<method name="setAnimator(ILandroid/animation/Animator;)V"/>
+		<method name="setDuration(IJ)V"/>
+		<method name="setDuration(J)V"/>
+		<method name="setInterpolator(ILandroid/animation/TimeInterpolator;)V"/>
+		<method name="setStagger(IJ)V"/>
+		<method name="setStartDelay(IJ)V"/>
+		<method name="showChild(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="16"/>
+		<method name="showChild(Landroid/view/ViewGroup;Landroid/view/View;I)V" since="16"/>
+		<field name="APPEARING"/>
+		<field name="CHANGE_APPEARING"/>
+		<field name="CHANGE_DISAPPEARING"/>
+		<field name="CHANGING" since="16"/>
+		<field name="DISAPPEARING"/>
+	</class>
+	<class name="android/animation/LayoutTransition$TransitionListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="endTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V"/>
+		<method name="startTransition(Landroid/animation/LayoutTransition;Landroid/view/ViewGroup;Landroid/view/View;I)V"/>
+	</class>
+	<class name="android/animation/ObjectAnimator" since="11">
+		<extends name="android/animation/ValueAnimator"/>
+		<method name="&lt;init>()V"/>
+		<method name="clone()Landroid/animation/ObjectAnimator;"/>
+		<method name="getPropertyName()Ljava/lang/String;"/>
+		<method name="getTarget()Ljava/lang/Object;"/>
+		<method name="ofArgb(Ljava/lang/Object;Landroid/util/Property;[I)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofArgb(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofFloat(Ljava/lang/Object;Landroid/util/Property;Landroid/util/Property;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofFloat(Ljava/lang/Object;Landroid/util/Property;[F)Landroid/animation/ObjectAnimator;" since="14"/>
+		<method name="ofFloat(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofFloat(Ljava/lang/Object;Ljava/lang/String;[F)Landroid/animation/ObjectAnimator;"/>
+		<method name="ofInt(Ljava/lang/Object;Landroid/util/Property;Landroid/util/Property;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofInt(Ljava/lang/Object;Landroid/util/Property;[I)Landroid/animation/ObjectAnimator;" since="14"/>
+		<method name="ofInt(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofInt(Ljava/lang/Object;Ljava/lang/String;[I)Landroid/animation/ObjectAnimator;"/>
+		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofMultiFloat(Ljava/lang/Object;Ljava/lang/String;[[F)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofMultiInt(Ljava/lang/Object;Ljava/lang/String;[[I)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofObject(Ljava/lang/Object;Landroid/util/Property;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;" since="14"/>
+		<method name="ofObject(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/ObjectAnimator;" since="21"/>
+		<method name="ofObject(Ljava/lang/Object;Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ObjectAnimator;"/>
+		<method name="ofPropertyValuesHolder(Ljava/lang/Object;[Landroid/animation/PropertyValuesHolder;)Landroid/animation/ObjectAnimator;"/>
+		<method name="setAutoCancel(Z)V" since="18"/>
+		<method name="setDuration(J)Landroid/animation/ObjectAnimator;"/>
+		<method name="setProperty(Landroid/util/Property;)V" since="14"/>
+		<method name="setPropertyName(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/animation/PointFEvaluator" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TypeEvaluator"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/PointF;)V"/>
+		<method name="evaluate(FLandroid/graphics/PointF;Landroid/graphics/PointF;)Landroid/graphics/PointF;"/>
+	</class>
+	<class name="android/animation/PropertyValuesHolder" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="clone()Landroid/animation/PropertyValuesHolder;"/>
+		<method name="getPropertyName()Ljava/lang/String;"/>
+		<method name="ofFloat(Landroid/util/Property;[F)Landroid/animation/PropertyValuesHolder;" since="14"/>
+		<method name="ofFloat(Ljava/lang/String;[F)Landroid/animation/PropertyValuesHolder;"/>
+		<method name="ofInt(Landroid/util/Property;[I)Landroid/animation/PropertyValuesHolder;" since="14"/>
+		<method name="ofInt(Ljava/lang/String;[I)Landroid/animation/PropertyValuesHolder;"/>
+		<method name="ofKeyframe(Landroid/util/Property;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="14"/>
+		<method name="ofKeyframe(Ljava/lang/String;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;"/>
+		<method name="ofMultiFloat(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofMultiFloat(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofMultiFloat(Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofMultiFloat(Ljava/lang/String;[[F)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofMultiInt(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Landroid/animation/Keyframe;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofMultiInt(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofMultiInt(Ljava/lang/String;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofMultiInt(Ljava/lang/String;[[I)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofObject(Landroid/util/Property;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;" since="14"/>
+		<method name="ofObject(Ljava/lang/String;Landroid/animation/TypeConverter;Landroid/graphics/Path;)Landroid/animation/PropertyValuesHolder;" since="21"/>
+		<method name="ofObject(Ljava/lang/String;Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/PropertyValuesHolder;"/>
+		<method name="setConverter(Landroid/animation/TypeConverter;)V" since="21"/>
+		<method name="setEvaluator(Landroid/animation/TypeEvaluator;)V"/>
+		<method name="setFloatValues([F)V"/>
+		<method name="setIntValues([I)V"/>
+		<method name="setKeyframes([Landroid/animation/Keyframe;)V"/>
+		<method name="setObjectValues([Ljava/lang/Object;)V"/>
+		<method name="setProperty(Landroid/util/Property;)V" since="14"/>
+		<method name="setPropertyName(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/animation/RectEvaluator" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TypeEvaluator"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;)V" since="21"/>
+		<method name="evaluate(FLandroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/graphics/Rect;"/>
+	</class>
+	<class name="android/animation/StateListAnimator" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable" since="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="addState([ILandroid/animation/Animator;)V"/>
+		<method name="clone()Landroid/animation/StateListAnimator;" since="22"/>
+		<method name="jumpToCurrentState()V"/>
+	</class>
+	<class name="android/animation/TimeAnimator" since="16">
+		<extends name="android/animation/ValueAnimator"/>
+		<method name="&lt;init>()V"/>
+		<method name="setTimeListener(Landroid/animation/TimeAnimator$TimeListener;)V"/>
+	</class>
+	<class name="android/animation/TimeAnimator$TimeListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onTimeUpdate(Landroid/animation/TimeAnimator;JJ)V"/>
+	</class>
+	<class name="android/animation/TimeInterpolator" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="getInterpolation(F)F"/>
+	</class>
+	<class name="android/animation/TypeConverter" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/Class;)V"/>
+		<method name="convert(Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/animation/TypeEvaluator" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="evaluate(FLjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/animation/ValueAnimator" since="11">
+		<extends name="android/animation/Animator"/>
+		<method name="&lt;init>()V"/>
+		<method name="addUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V"/>
+		<method name="areAnimatorsEnabled()Z" since="26"/>
+		<method name="clone()Landroid/animation/ValueAnimator;"/>
+		<method name="getAnimatedFraction()F" since="12"/>
+		<method name="getAnimatedValue()Ljava/lang/Object;"/>
+		<method name="getAnimatedValue(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getCurrentPlayTime()J"/>
+		<method name="getFrameDelay()J"/>
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;"/>
+		<method name="getRepeatCount()I"/>
+		<method name="getRepeatMode()I"/>
+		<method name="getValues()[Landroid/animation/PropertyValuesHolder;"/>
+		<method name="ofArgb([I)Landroid/animation/ValueAnimator;" since="21"/>
+		<method name="ofFloat([F)Landroid/animation/ValueAnimator;"/>
+		<method name="ofInt([I)Landroid/animation/ValueAnimator;"/>
+		<method name="ofObject(Landroid/animation/TypeEvaluator;[Ljava/lang/Object;)Landroid/animation/ValueAnimator;"/>
+		<method name="ofPropertyValuesHolder([Landroid/animation/PropertyValuesHolder;)Landroid/animation/ValueAnimator;"/>
+		<method name="removeAllUpdateListeners()V"/>
+		<method name="removeUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)V"/>
+		<method name="reverse()V"/>
+		<method name="setCurrentFraction(F)V" since="22"/>
+		<method name="setCurrentPlayTime(J)V"/>
+		<method name="setDuration(J)Landroid/animation/ValueAnimator;"/>
+		<method name="setEvaluator(Landroid/animation/TypeEvaluator;)V"/>
+		<method name="setFloatValues([F)V"/>
+		<method name="setFrameDelay(J)V"/>
+		<method name="setIntValues([I)V"/>
+		<method name="setObjectValues([Ljava/lang/Object;)V"/>
+		<method name="setRepeatCount(I)V"/>
+		<method name="setRepeatMode(I)V"/>
+		<method name="setValues([Landroid/animation/PropertyValuesHolder;)V"/>
+		<field name="INFINITE"/>
+		<field name="RESTART"/>
+		<field name="REVERSE"/>
+	</class>
+	<class name="android/animation/ValueAnimator$AnimatorUpdateListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onAnimationUpdate(Landroid/animation/ValueAnimator;)V"/>
+	</class>
+	<class name="android/annotation/SuppressLint" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="value()[Ljava/lang/String;"/>
+	</class>
+	<class name="android/annotation/TargetApi" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="value()I"/>
+	</class>
+	<class name="android/app/ActionBar" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V"/>
+		<method name="addTab(Landroid/app/ActionBar$Tab;)V" deprecated="21"/>
+		<method name="addTab(Landroid/app/ActionBar$Tab;I)V" deprecated="21"/>
+		<method name="addTab(Landroid/app/ActionBar$Tab;IZ)V" deprecated="21"/>
+		<method name="addTab(Landroid/app/ActionBar$Tab;Z)V" deprecated="21"/>
+		<method name="getCustomView()Landroid/view/View;"/>
+		<method name="getDisplayOptions()I"/>
+		<method name="getElevation()F" since="21"/>
+		<method name="getHeight()I"/>
+		<method name="getHideOffset()I" since="21"/>
+		<method name="getNavigationItemCount()I" deprecated="21"/>
+		<method name="getNavigationMode()I" deprecated="21"/>
+		<method name="getSelectedNavigationIndex()I" deprecated="21"/>
+		<method name="getSelectedTab()Landroid/app/ActionBar$Tab;" deprecated="21"/>
+		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
+		<method name="getTabAt(I)Landroid/app/ActionBar$Tab;" deprecated="21"/>
+		<method name="getTabCount()I" deprecated="21"/>
+		<method name="getThemedContext()Landroid/content/Context;" since="14"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="hide()V"/>
+		<method name="isHideOnContentScrollEnabled()Z" since="21"/>
+		<method name="isShowing()Z"/>
+		<method name="newTab()Landroid/app/ActionBar$Tab;" deprecated="21"/>
+		<method name="removeAllTabs()V" deprecated="21"/>
+		<method name="removeOnMenuVisibilityListener(Landroid/app/ActionBar$OnMenuVisibilityListener;)V"/>
+		<method name="removeTab(Landroid/app/ActionBar$Tab;)V" deprecated="21"/>
+		<method name="removeTabAt(I)V" deprecated="21"/>
+		<method name="selectTab(Landroid/app/ActionBar$Tab;)V" deprecated="21"/>
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setCustomView(I)V"/>
+		<method name="setCustomView(Landroid/view/View;)V"/>
+		<method name="setCustomView(Landroid/view/View;Landroid/app/ActionBar$LayoutParams;)V"/>
+		<method name="setDisplayHomeAsUpEnabled(Z)V"/>
+		<method name="setDisplayOptions(I)V"/>
+		<method name="setDisplayOptions(II)V"/>
+		<method name="setDisplayShowCustomEnabled(Z)V"/>
+		<method name="setDisplayShowHomeEnabled(Z)V"/>
+		<method name="setDisplayShowTitleEnabled(Z)V"/>
+		<method name="setDisplayUseLogoEnabled(Z)V"/>
+		<method name="setElevation(F)V" since="21"/>
+		<method name="setHideOffset(I)V" since="21"/>
+		<method name="setHideOnContentScrollEnabled(Z)V" since="21"/>
+		<method name="setHomeActionContentDescription(I)V" since="18"/>
+		<method name="setHomeActionContentDescription(Ljava/lang/CharSequence;)V" since="18"/>
+		<method name="setHomeAsUpIndicator(I)V" since="18"/>
+		<method name="setHomeAsUpIndicator(Landroid/graphics/drawable/Drawable;)V" since="18"/>
+		<method name="setHomeButtonEnabled(Z)V" since="14"/>
+		<method name="setIcon(I)V" since="14"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="14"/>
+		<method name="setListNavigationCallbacks(Landroid/widget/SpinnerAdapter;Landroid/app/ActionBar$OnNavigationListener;)V" deprecated="21"/>
+		<method name="setLogo(I)V" since="14"/>
+		<method name="setLogo(Landroid/graphics/drawable/Drawable;)V" since="14"/>
+		<method name="setNavigationMode(I)V" deprecated="21"/>
+		<method name="setSelectedNavigationItem(I)V" deprecated="21"/>
+		<method name="setSplitBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="14"/>
+		<method name="setStackedBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="14"/>
+		<method name="setSubtitle(I)V"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setTitle(I)V"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="show()V"/>
+		<field name="DISPLAY_HOME_AS_UP"/>
+		<field name="DISPLAY_SHOW_CUSTOM"/>
+		<field name="DISPLAY_SHOW_HOME"/>
+		<field name="DISPLAY_SHOW_TITLE"/>
+		<field name="DISPLAY_USE_LOGO"/>
+		<field name="NAVIGATION_MODE_LIST" deprecated="21"/>
+		<field name="NAVIGATION_MODE_STANDARD" deprecated="21"/>
+		<field name="NAVIGATION_MODE_TABS" deprecated="21"/>
+	</class>
+	<class name="android/app/ActionBar$LayoutParams" since="11">
+		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(Landroid/app/ActionBar$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<field name="gravity"/>
+	</class>
+	<class name="android/app/ActionBar$OnMenuVisibilityListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onMenuVisibilityChanged(Z)V"/>
+	</class>
+	<class name="android/app/ActionBar$OnNavigationListener" since="11" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onNavigationItemSelected(IJ)Z" deprecated="29"/>
+	</class>
+	<class name="android/app/ActionBar$Tab" since="11" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="14" deprecated="29"/>
+		<method name="getCustomView()Landroid/view/View;" deprecated="29"/>
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;" deprecated="29"/>
+		<method name="getPosition()I" deprecated="29"/>
+		<method name="getTag()Ljava/lang/Object;" deprecated="29"/>
+		<method name="getText()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="select()V" deprecated="29"/>
+		<method name="setContentDescription(I)Landroid/app/ActionBar$Tab;" since="14" deprecated="29"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" since="14" deprecated="29"/>
+		<method name="setCustomView(I)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<method name="setCustomView(Landroid/view/View;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<method name="setIcon(I)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<method name="setTabListener(Landroid/app/ActionBar$TabListener;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<method name="setTag(Ljava/lang/Object;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<method name="setText(I)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/app/ActionBar$Tab;" deprecated="29"/>
+		<field name="INVALID_POSITION" deprecated="29"/>
+	</class>
+	<class name="android/app/ActionBar$TabListener" since="11" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onTabReselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29"/>
+		<method name="onTabSelected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29"/>
+		<method name="onTabUnselected(Landroid/app/ActionBar$Tab;Landroid/app/FragmentTransaction;)V" deprecated="29"/>
+	</class>
+	<class name="android/app/Activity" since="1">
+		<extends name="android/view/ContextThemeWrapper"/>
+		<implements name="android/content/ComponentCallbacks" removed="14"/>
+		<implements name="android/content/ComponentCallbacks2" since="14"/>
+		<implements name="android/view/KeyEvent$Callback"/>
+		<implements name="android/view/LayoutInflater$Factory" removed="11"/>
+		<implements name="android/view/LayoutInflater$Factory2" since="11"/>
+		<implements name="android/view/View$OnCreateContextMenuListener"/>
+		<implements name="android/view/Window$Callback"/>
+		<method name="&lt;init>()V"/>
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="closeContextMenu()V" since="3"/>
+		<method name="closeOptionsMenu()V"/>
+		<method name="createPendingResult(ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
+		<method name="dismissDialog(I)V" deprecated="15"/>
+		<method name="dismissKeyboardShortcutsHelper()V" since="24"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="11"/>
+		<method name="enterPictureInPictureMode()V" since="24" deprecated="26"/>
+		<method name="enterPictureInPictureMode(Landroid/app/PictureInPictureParams;)Z" since="26"/>
+		<method name="findViewById(I)Landroid/view/View;"/>
+		<method name="finish()V"/>
+		<method name="finishActivity(I)V"/>
+		<method name="finishActivityFromChild(Landroid/app/Activity;I)V" deprecated="30"/>
+		<method name="finishAffinity()V" since="16"/>
+		<method name="finishAfterTransition()V" since="21"/>
+		<method name="finishAndRemoveTask()V" since="21"/>
+		<method name="finishFromChild(Landroid/app/Activity;)V" deprecated="30"/>
+		<method name="getActionBar()Landroid/app/ActionBar;" since="11"/>
+		<method name="getApplication()Landroid/app/Application;"/>
+		<method name="getCallingActivity()Landroid/content/ComponentName;"/>
+		<method name="getCallingPackage()Ljava/lang/String;"/>
+		<method name="getChangingConfigurations()I"/>
+		<method name="getComponentName()Landroid/content/ComponentName;"/>
+		<method name="getContentScene()Landroid/transition/Scene;" since="21"/>
+		<method name="getContentTransitionManager()Landroid/transition/TransitionManager;" since="21"/>
+		<method name="getCurrentFocus()Landroid/view/View;"/>
+		<method name="getFragmentManager()Landroid/app/FragmentManager;" since="11" deprecated="28"/>
+		<method name="getInstanceCount()J" removed="11"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+		<method name="getLastNonConfigurationInstance()Ljava/lang/Object;" deprecated="15"/>
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
+		<method name="getLoaderManager()Landroid/app/LoaderManager;" since="11" deprecated="28"/>
+		<method name="getLocalClassName()Ljava/lang/String;"/>
+		<method name="getMaxNumPictureInPictureActions()I" since="26"/>
+		<method name="getMediaController()Landroid/media/session/MediaController;" since="21"/>
+		<method name="getMenuInflater()Landroid/view/MenuInflater;"/>
+		<method name="getParent()Landroid/app/Activity;"/>
+		<method name="getParentActivityIntent()Landroid/content/Intent;" since="16"/>
+		<method name="getPreferences(I)Landroid/content/SharedPreferences;"/>
+		<method name="getReferrer()Landroid/net/Uri;" since="22"/>
+		<method name="getRequestedOrientation()I"/>
+		<method name="getSearchEvent()Landroid/view/SearchEvent;" since="23"/>
+		<method name="getSplashScreen()Landroid/window/SplashScreen;" since="31"/>
+		<method name="getTaskId()I"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="getTitleColor()I"/>
+		<method name="getVoiceInteractor()Landroid/app/VoiceInteractor;" since="23"/>
+		<method name="getVolumeControlStream()I"/>
+		<method name="getWindow()Landroid/view/Window;"/>
+		<method name="getWindowManager()Landroid/view/WindowManager;"/>
+		<method name="hasWindowFocus()Z" since="3"/>
+		<method name="invalidateOptionsMenu()V" since="11"/>
+		<method name="isActivityTransitionRunning()Z" since="26"/>
+		<method name="isChangingConfigurations()Z" since="11"/>
+		<method name="isChild()Z"/>
+		<method name="isDestroyed()Z" since="17"/>
+		<method name="isFinishing()Z"/>
+		<method name="isImmersive()Z" since="18"/>
+		<method name="isInMultiWindowMode()Z" since="24"/>
+		<method name="isInPictureInPictureMode()Z" since="24"/>
+		<method name="isLaunchedFromBubble()Z" since="31"/>
+		<method name="isLocalVoiceInteractionSupported()Z" since="24"/>
+		<method name="isTaskRoot()Z"/>
+		<method name="isVoiceInteraction()Z" since="23"/>
+		<method name="isVoiceInteractionRoot()Z" since="23"/>
+		<method name="managedQuery(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="15"/>
+		<method name="moveTaskToBack(Z)Z"/>
+		<method name="navigateUpTo(Landroid/content/Intent;)Z" since="16"/>
+		<method name="navigateUpToFromChild(Landroid/app/Activity;Landroid/content/Intent;)Z" since="16" deprecated="30"/>
+		<method name="onActivityReenter(ILandroid/content/Intent;)V" since="21"/>
+		<method name="onActivityResult(IILandroid/content/Intent;)V"/>
+		<method name="onAttachFragment(Landroid/app/Fragment;)V" since="11" deprecated="28"/>
+		<method name="onBackPressed()V" since="5"/>
+		<method name="onChildTitleChanged(Landroid/app/Activity;Ljava/lang/CharSequence;)V"/>
+		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z"/>
+		<method name="onContextMenuClosed(Landroid/view/Menu;)V"/>
+		<method name="onCreate(Landroid/os/Bundle;)V"/>
+		<method name="onCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="onCreateDescription()Ljava/lang/CharSequence;"/>
+		<method name="onCreateDialog(I)Landroid/app/Dialog;" deprecated="15"/>
+		<method name="onCreateDialog(ILandroid/os/Bundle;)Landroid/app/Dialog;" since="8" deprecated="15"/>
+		<method name="onCreateNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16"/>
+		<method name="onCreateOptionsMenu(Landroid/view/Menu;)Z"/>
+		<method name="onCreateThumbnail(Landroid/graphics/Bitmap;Landroid/graphics/Canvas;)Z" deprecated="28"/>
+		<method name="onDestroy()V"/>
+		<method name="onEnterAnimationComplete()V" since="21"/>
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
+		<method name="onGetDirectActions(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" since="11"/>
+		<method name="onLocalVoiceInteractionStarted()V" since="24"/>
+		<method name="onLocalVoiceInteractionStopped()V" since="24"/>
+		<method name="onMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
+		<method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
+		<method name="onNavigateUp()Z" since="16"/>
+		<method name="onNavigateUpFromChild(Landroid/app/Activity;)Z" since="16" deprecated="30"/>
+		<method name="onNewIntent(Landroid/content/Intent;)V"/>
+		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
+		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V"/>
+		<method name="onPause()V"/>
+		<method name="onPerformDirectAction(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
+		<method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26"/>
+		<method name="onPictureInPictureRequested()Z" since="30"/>
+		<method name="onPictureInPictureUiStateChanged(Landroid/app/PictureInPictureUiState;)V" since="31"/>
+		<method name="onPostCreate(Landroid/os/Bundle;)V"/>
+		<method name="onPostCreate(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="onPostResume()V"/>
+		<method name="onPrepareDialog(ILandroid/app/Dialog;)V" deprecated="15"/>
+		<method name="onPrepareDialog(ILandroid/app/Dialog;Landroid/os/Bundle;)V" since="8" deprecated="15"/>
+		<method name="onPrepareNavigateUpTaskStack(Landroid/app/TaskStackBuilder;)V" since="16"/>
+		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)Z"/>
+		<method name="onProvideAssistContent(Landroid/app/assist/AssistContent;)V" since="23"/>
+		<method name="onProvideAssistData(Landroid/os/Bundle;)V" since="18"/>
+		<method name="onProvideReferrer()Landroid/net/Uri;" since="23"/>
+		<method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23"/>
+		<method name="onRestart()V"/>
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V"/>
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="onResume()V"/>
+		<method name="onRetainNonConfigurationInstance()Ljava/lang/Object;" deprecated="15"/>
+		<method name="onSaveInstanceState(Landroid/os/Bundle;)V"/>
+		<method name="onSaveInstanceState(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="onStart()V"/>
+		<method name="onStateNotSaved()V" since="23" deprecated="29"/>
+		<method name="onStop()V"/>
+		<method name="onTitleChanged(Ljava/lang/CharSequence;I)V"/>
+		<method name="onTopResumedActivityChanged(Z)V" since="29"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onUserInteraction()V" since="3"/>
+		<method name="onUserLeaveHint()V" since="3"/>
+		<method name="onVisibleBehindCanceled()V" since="21" deprecated="26"/>
+		<method name="openContextMenu(Landroid/view/View;)V"/>
+		<method name="openOptionsMenu()V"/>
+		<method name="overridePendingTransition(II)V" since="5"/>
+		<method name="postponeEnterTransition()V" since="21"/>
+		<method name="recreate()V" since="11"/>
+		<method name="registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="29"/>
+		<method name="registerForContextMenu(Landroid/view/View;)V"/>
+		<method name="releaseInstance()Z" since="21"/>
+		<method name="removeDialog(I)V" deprecated="15"/>
+		<method name="reportFullyDrawn()V" since="19"/>
+		<method name="requestDragAndDropPermissions(Landroid/view/DragEvent;)Landroid/view/DragAndDropPermissions;" since="24"/>
+		<method name="requestPermissions([Ljava/lang/String;I)V" since="23"/>
+		<method name="requestShowKeyboardShortcuts()V" since="24"/>
+		<method name="requestVisibleBehind(Z)Z" since="21" deprecated="26"/>
+		<method name="requestWindowFeature(I)Z"/>
+		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
+		<method name="runOnUiThread(Ljava/lang/Runnable;)V"/>
+		<method name="setActionBar(Landroid/widget/Toolbar;)V" since="21"/>
+		<method name="setContentTransitionManager(Landroid/transition/TransitionManager;)V" since="21"/>
+		<method name="setContentView(I)V"/>
+		<method name="setContentView(Landroid/view/View;)V"/>
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="setDefaultKeyMode(I)V"/>
+		<method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
+		<method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21"/>
+		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
+		<method name="setFeatureDrawableAlpha(II)V"/>
+		<method name="setFeatureDrawableResource(II)V"/>
+		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V"/>
+		<method name="setFinishOnTouchOutside(Z)V" since="11"/>
+		<method name="setImmersive(Z)V" since="18"/>
+		<method name="setInheritShowWhenLocked(Z)V" since="29"/>
+		<method name="setIntent(Landroid/content/Intent;)V"/>
+		<method name="setLocusContext(Landroid/content/LocusId;Landroid/os/Bundle;)V" since="30"/>
+		<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21"/>
+		<method name="setPersistent(Z)V" removed="11"/>
+		<method name="setPictureInPictureParams(Landroid/app/PictureInPictureParams;)V" since="26"/>
+		<method name="setProgress(I)V" deprecated="24"/>
+		<method name="setProgressBarIndeterminate(Z)V" deprecated="24"/>
+		<method name="setProgressBarIndeterminateVisibility(Z)V" deprecated="24"/>
+		<method name="setProgressBarVisibility(Z)V" deprecated="24"/>
+		<method name="setRequestedOrientation(I)V"/>
+		<method name="setResult(I)V"/>
+		<method name="setResult(ILandroid/content/Intent;)V"/>
+		<method name="setSecondaryProgress(I)V" deprecated="24"/>
+		<method name="setShowWhenLocked(Z)V" since="27"/>
+		<method name="setTaskDescription(Landroid/app/ActivityManager$TaskDescription;)V" since="21"/>
+		<method name="setTitle(I)V"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setTitleColor(I)V" deprecated="21"/>
+		<method name="setTranslucent(Z)Z" since="30"/>
+		<method name="setTurnScreenOn(Z)V" since="27"/>
+		<method name="setVisible(Z)V" since="3"/>
+		<method name="setVolumeControlStream(I)V"/>
+		<method name="setVrModeEnabled(ZLandroid/content/ComponentName;)V" since="24"/>
+		<method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23"/>
+		<method name="shouldUpRecreateTask(Landroid/content/Intent;)Z" since="16"/>
+		<method name="showAssist(Landroid/os/Bundle;)Z" since="23"/>
+		<method name="showDialog(I)V" deprecated="15"/>
+		<method name="showDialog(ILandroid/os/Bundle;)Z" since="8" deprecated="15"/>
+		<method name="showLockTaskEscapeMessage()V" since="23"/>
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
+		<method name="startActivityForResult(Landroid/content/Intent;I)V"/>
+		<method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16"/>
+		<method name="startActivityFromChild(Landroid/app/Activity;Landroid/content/Intent;I)V" deprecated="30"/>
+		<method name="startActivityFromChild(Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="30"/>
+		<method name="startActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;I)V" since="11" deprecated="28"/>
+		<method name="startActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="28"/>
+		<method name="startActivityIfNeeded(Landroid/content/Intent;I)Z"/>
+		<method name="startActivityIfNeeded(Landroid/content/Intent;ILandroid/os/Bundle;)Z" since="16"/>
+		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;III)V" since="5"/>
+		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="16"/>
+		<method name="startIntentSenderFromChild(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;III)V" since="5" deprecated="30"/>
+		<method name="startIntentSenderFromChild(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="16" deprecated="30"/>
+		<method name="startLocalVoiceInteraction(Landroid/os/Bundle;)V" since="24"/>
+		<method name="startLockTask()V" since="21"/>
+		<method name="startManagingCursor(Landroid/database/Cursor;)V" deprecated="15"/>
+		<method name="startNextMatchingActivity(Landroid/content/Intent;)Z"/>
+		<method name="startNextMatchingActivity(Landroid/content/Intent;Landroid/os/Bundle;)Z" since="16"/>
+		<method name="startPostponedEnterTransition()V" since="21"/>
+		<method name="startSearch(Ljava/lang/String;ZLandroid/os/Bundle;Z)V"/>
+		<method name="stopLocalVoiceInteraction()V" since="24"/>
+		<method name="stopLockTask()V" since="21"/>
+		<method name="stopManagingCursor(Landroid/database/Cursor;)V" deprecated="15"/>
+		<method name="takeKeyEvents(Z)V"/>
+		<method name="triggerSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="5"/>
+		<method name="unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="29"/>
+		<method name="unregisterForContextMenu(Landroid/view/View;)V"/>
+		<field name="DEFAULT_KEYS_DIALER"/>
+		<field name="DEFAULT_KEYS_DISABLE"/>
+		<field name="DEFAULT_KEYS_SEARCH_GLOBAL"/>
+		<field name="DEFAULT_KEYS_SEARCH_LOCAL"/>
+		<field name="DEFAULT_KEYS_SHORTCUT"/>
+		<field name="FOCUSED_STATE_SET"/>
+		<field name="RESULT_CANCELED"/>
+		<field name="RESULT_FIRST_USER"/>
+		<field name="RESULT_OK"/>
+	</class>
+	<class name="android/app/ActivityGroup" since="1" deprecated="13">
+		<extends name="android/app/Activity"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Z)V" deprecated="29"/>
+		<method name="getCurrentActivity()Landroid/app/Activity;" deprecated="29"/>
+		<method name="getLocalActivityManager()Landroid/app/LocalActivityManager;" deprecated="29"/>
+	</class>
+	<class name="android/app/ActivityManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addAppTask(Landroid/app/Activity;Landroid/content/Intent;Landroid/app/ActivityManager$TaskDescription;Landroid/graphics/Bitmap;)I" since="21"/>
+		<method name="appNotResponding(Ljava/lang/String;)V" since="30"/>
+		<method name="clearApplicationUserData()Z" since="19"/>
+		<method name="clearWatchHeapLimit()V" since="23"/>
+		<method name="dumpPackageState(Ljava/io/FileDescriptor;Ljava/lang/String;)V" since="19"/>
+		<method name="getAppTaskThumbnailSize()Landroid/util/Size;" since="21"/>
+		<method name="getAppTasks()Ljava/util/List;" since="21"/>
+		<method name="getDeviceConfigurationInfo()Landroid/content/pm/ConfigurationInfo;" since="3"/>
+		<method name="getHistoricalProcessExitReasons(Ljava/lang/String;II)Ljava/util/List;" since="30"/>
+		<method name="getLargeMemoryClass()I" since="11"/>
+		<method name="getLauncherLargeIconDensity()I" since="11"/>
+		<method name="getLauncherLargeIconSize()I" since="11"/>
+		<method name="getLockTaskModeState()I" since="23"/>
+		<method name="getMemoryClass()I" since="5"/>
+		<method name="getMemoryInfo(Landroid/app/ActivityManager$MemoryInfo;)V"/>
+		<method name="getMyMemoryState(Landroid/app/ActivityManager$RunningAppProcessInfo;)V" since="16"/>
+		<method name="getProcessMemoryInfo([I)[Landroid/os/Debug$MemoryInfo;" since="5"/>
+		<method name="getProcessesInErrorState()Ljava/util/List;"/>
+		<method name="getRecentTasks(II)Ljava/util/List;" deprecated="21"/>
+		<method name="getRunningAppProcesses()Ljava/util/List;" since="3"/>
+		<method name="getRunningServiceControlPanel(Landroid/content/ComponentName;)Landroid/app/PendingIntent;" since="5"/>
+		<method name="getRunningServices(I)Ljava/util/List;" deprecated="26"/>
+		<method name="getRunningTasks(I)Ljava/util/List;" deprecated="21"/>
+		<method name="isActivityStartAllowedOnDisplay(Landroid/content/Context;ILandroid/content/Intent;)Z" since="29"/>
+		<method name="isBackgroundRestricted()Z" since="28"/>
+		<method name="isInLockTaskMode()Z" since="21" deprecated="23"/>
+		<method name="isLowMemoryKillReportSupported()Z" since="30"/>
+		<method name="isLowRamDevice()Z" since="19"/>
+		<method name="isRunningInTestHarness()Z" since="11" deprecated="29"/>
+		<method name="isRunningInUserTestHarness()Z" since="29"/>
+		<method name="isUserAMonkey()Z" since="8"/>
+		<method name="killBackgroundProcesses(Ljava/lang/String;)V" since="8"/>
+		<method name="moveTaskToFront(II)V" since="11"/>
+		<method name="moveTaskToFront(IILandroid/os/Bundle;)V" since="16"/>
+		<method name="restartPackage(Ljava/lang/String;)V" since="3" deprecated="15"/>
+		<method name="setProcessStateSummary([B)V" since="30"/>
+		<method name="setVrThread(I)V" since="25"/>
+		<method name="setWatchHeapLimit(J)V" since="23"/>
+		<field name="ACTION_REPORT_HEAP_LIMIT" since="23"/>
+		<field name="LOCK_TASK_MODE_LOCKED" since="23"/>
+		<field name="LOCK_TASK_MODE_NONE" since="23"/>
+		<field name="LOCK_TASK_MODE_PINNED" since="23"/>
+		<field name="META_HOME_ALTERNATE" since="19"/>
+		<field name="MOVE_TASK_NO_USER_ACTION" since="12"/>
+		<field name="MOVE_TASK_WITH_HOME" since="11"/>
+		<field name="RECENT_IGNORE_UNAVAILABLE" since="11"/>
+		<field name="RECENT_WITH_EXCLUDED"/>
+	</class>
+	<class name="android/app/ActivityManager$AppTask" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="finishAndRemoveTask()V"/>
+		<method name="getTaskInfo()Landroid/app/ActivityManager$RecentTaskInfo;"/>
+		<method name="moveToFront()V"/>
+		<method name="setExcludeFromRecents(Z)V"/>
+		<method name="startActivity(Landroid/content/Context;Landroid/content/Intent;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/ActivityManager$MemoryInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+		<field name="availMem"/>
+		<field name="lowMemory"/>
+		<field name="threshold"/>
+		<field name="totalMem" since="16"/>
+	</class>
+	<class name="android/app/ActivityManager$ProcessErrorStateInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CRASHED"/>
+		<field name="CREATOR"/>
+		<field name="NOT_RESPONDING"/>
+		<field name="NO_ERROR"/>
+		<field name="condition"/>
+		<field name="crashData"/>
+		<field name="longMsg"/>
+		<field name="pid"/>
+		<field name="processName"/>
+		<field name="shortMsg"/>
+		<field name="stackTrace" since="8"/>
+		<field name="tag"/>
+		<field name="uid"/>
+	</class>
+	<class name="android/app/ActivityManager$RecentTaskInfo" since="1">
+		<extends name="android/app/TaskInfo" since="29"/>
+		<extends name="java/lang/Object" removed="29"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+		<field name="affiliatedTaskId" since="21" deprecated="29"/>
+		<field name="baseActivity" since="23" removed="29"/>
+		<field name="baseIntent" removed="29"/>
+		<field name="description" since="11" deprecated="29"/>
+		<field name="id" deprecated="29"/>
+		<field name="numActivities" since="23" removed="29"/>
+		<field name="origActivity" removed="29"/>
+		<field name="persistentId" since="12" deprecated="29"/>
+		<field name="taskDescription" since="21" removed="29"/>
+		<field name="topActivity" since="23" removed="29"/>
+	</class>
+	<class name="android/app/ActivityManager$RunningAppProcessInfo" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;I[Ljava/lang/String;)V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+		<field name="IMPORTANCE_BACKGROUND" deprecated="26"/>
+		<field name="IMPORTANCE_CACHED" since="26"/>
+		<field name="IMPORTANCE_CANT_SAVE_STATE" since="28"/>
+		<field name="IMPORTANCE_EMPTY" deprecated="26"/>
+		<field name="IMPORTANCE_FOREGROUND"/>
+		<field name="IMPORTANCE_FOREGROUND_SERVICE" since="23"/>
+		<field name="IMPORTANCE_GONE" since="21"/>
+		<field name="IMPORTANCE_PERCEPTIBLE" since="9"/>
+		<field name="IMPORTANCE_PERCEPTIBLE_PRE_26" since="26"/>
+		<field name="IMPORTANCE_SERVICE"/>
+		<field name="IMPORTANCE_TOP_SLEEPING" since="23"/>
+		<field name="IMPORTANCE_TOP_SLEEPING_PRE_28" since="28" deprecated="28"/>
+		<field name="IMPORTANCE_VISIBLE"/>
+		<field name="REASON_PROVIDER_IN_USE" since="5"/>
+		<field name="REASON_SERVICE_IN_USE" since="5"/>
+		<field name="REASON_UNKNOWN" since="5"/>
+		<field name="importance"/>
+		<field name="importanceReasonCode" since="5"/>
+		<field name="importanceReasonComponent" since="5"/>
+		<field name="importanceReasonPid" since="5"/>
+		<field name="lastTrimLevel" since="16"/>
+		<field name="lru"/>
+		<field name="pid"/>
+		<field name="pkgList"/>
+		<field name="processName"/>
+		<field name="uid" since="5"/>
+	</class>
+	<class name="android/app/ActivityManager$RunningServiceInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_FOREGROUND" since="5"/>
+		<field name="FLAG_PERSISTENT_PROCESS" since="5"/>
+		<field name="FLAG_STARTED" since="5"/>
+		<field name="FLAG_SYSTEM_PROCESS" since="5"/>
+		<field name="activeSince"/>
+		<field name="clientCount"/>
+		<field name="clientLabel" since="5"/>
+		<field name="clientPackage" since="5"/>
+		<field name="crashCount"/>
+		<field name="flags" since="5"/>
+		<field name="foreground"/>
+		<field name="lastActivityTime"/>
+		<field name="pid"/>
+		<field name="process"/>
+		<field name="restarting"/>
+		<field name="service"/>
+		<field name="started"/>
+		<field name="uid" since="5"/>
+	</class>
+	<class name="android/app/ActivityManager$RunningTaskInfo" since="1">
+		<extends name="android/app/TaskInfo" since="29"/>
+		<extends name="java/lang/Object" removed="29"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+		<field name="baseActivity" removed="29"/>
+		<field name="description" deprecated="29"/>
+		<field name="id" deprecated="29"/>
+		<field name="numActivities" removed="29"/>
+		<field name="numRunning" deprecated="29"/>
+		<field name="thumbnail" deprecated="29"/>
+		<field name="topActivity" removed="29"/>
+	</class>
+	<class name="android/app/ActivityManager$TaskDescription" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/ActivityManager$TaskDescription;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V" since="28"/>
+		<method name="&lt;init>(Ljava/lang/String;II)V" since="28"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/graphics/Bitmap;)V" deprecated="28"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/graphics/Bitmap;I)V" deprecated="28"/>
+		<method name="getIcon()Landroid/graphics/Bitmap;" deprecated="30"/>
+		<method name="getLabel()Ljava/lang/String;"/>
+		<method name="getPrimaryColor()I"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/ActivityOptions" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="getLaunchBounds()Landroid/graphics/Rect;" since="24"/>
+		<method name="getLaunchDisplayId()I" since="26"/>
+		<method name="getLockTaskMode()Z" since="28"/>
+		<method name="makeBasic()Landroid/app/ActivityOptions;" since="23"/>
+		<method name="makeClipRevealAnimation(Landroid/view/View;IIII)Landroid/app/ActivityOptions;" since="23"/>
+		<method name="makeCustomAnimation(Landroid/content/Context;II)Landroid/app/ActivityOptions;"/>
+		<method name="makeScaleUpAnimation(Landroid/view/View;IIII)Landroid/app/ActivityOptions;"/>
+		<method name="makeSceneTransitionAnimation(Landroid/app/Activity;Landroid/view/View;Ljava/lang/String;)Landroid/app/ActivityOptions;" since="21"/>
+		<method name="makeSceneTransitionAnimation(Landroid/app/Activity;[Landroid/util/Pair;)Landroid/app/ActivityOptions;" since="21"/>
+		<method name="makeTaskLaunchBehind()Landroid/app/ActivityOptions;" since="21"/>
+		<method name="makeThumbnailScaleUpAnimation(Landroid/view/View;Landroid/graphics/Bitmap;II)Landroid/app/ActivityOptions;"/>
+		<method name="requestUsageTimeReport(Landroid/app/PendingIntent;)V" since="23"/>
+		<method name="setAppVerificationBundle(Landroid/os/Bundle;)Landroid/app/ActivityOptions;" since="26"/>
+		<method name="setLaunchBounds(Landroid/graphics/Rect;)Landroid/app/ActivityOptions;" since="24"/>
+		<method name="setLaunchDisplayId(I)Landroid/app/ActivityOptions;" since="26"/>
+		<method name="setLockTaskEnabled(Z)Landroid/app/ActivityOptions;" since="28"/>
+		<method name="toBundle()Landroid/os/Bundle;"/>
+		<method name="update(Landroid/app/ActivityOptions;)V"/>
+		<field name="EXTRA_USAGE_TIME_REPORT" since="23"/>
+		<field name="EXTRA_USAGE_TIME_REPORT_PACKAGES" since="23"/>
+	</class>
+	<class name="android/app/AlarmManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="canScheduleExactAlarms()Z" since="31"/>
+		<method name="cancel(Landroid/app/AlarmManager$OnAlarmListener;)V" since="24"/>
+		<method name="cancel(Landroid/app/PendingIntent;)V"/>
+		<method name="getNextAlarmClock()Landroid/app/AlarmManager$AlarmClockInfo;" since="21"/>
+		<method name="set(IJLandroid/app/PendingIntent;)V"/>
+		<method name="set(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24"/>
+		<method name="setAlarmClock(Landroid/app/AlarmManager$AlarmClockInfo;Landroid/app/PendingIntent;)V" since="21"/>
+		<method name="setAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V" since="23"/>
+		<method name="setExact(IJLandroid/app/PendingIntent;)V" since="19"/>
+		<method name="setExact(IJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24"/>
+		<method name="setExactAndAllowWhileIdle(IJLandroid/app/PendingIntent;)V" since="23"/>
+		<method name="setInexactRepeating(IJJLandroid/app/PendingIntent;)V" since="3"/>
+		<method name="setRepeating(IJJLandroid/app/PendingIntent;)V"/>
+		<method name="setTime(J)V" since="8"/>
+		<method name="setTimeZone(Ljava/lang/String;)V"/>
+		<method name="setWindow(IJJLandroid/app/PendingIntent;)V" since="19"/>
+		<method name="setWindow(IJJLjava/lang/String;Landroid/app/AlarmManager$OnAlarmListener;Landroid/os/Handler;)V" since="24"/>
+		<field name="ACTION_NEXT_ALARM_CLOCK_CHANGED" since="21"/>
+		<field name="ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED" since="31"/>
+		<field name="ELAPSED_REALTIME"/>
+		<field name="ELAPSED_REALTIME_WAKEUP"/>
+		<field name="INTERVAL_DAY" since="3"/>
+		<field name="INTERVAL_FIFTEEN_MINUTES" since="3"/>
+		<field name="INTERVAL_HALF_DAY" since="3"/>
+		<field name="INTERVAL_HALF_HOUR" since="3"/>
+		<field name="INTERVAL_HOUR" since="3"/>
+		<field name="RTC"/>
+		<field name="RTC_WAKEUP"/>
+	</class>
+	<class name="android/app/AlarmManager$AlarmClockInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(JLandroid/app/PendingIntent;)V"/>
+		<method name="getShowIntent()Landroid/app/PendingIntent;"/>
+		<method name="getTriggerTime()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/AlarmManager$OnAlarmListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onAlarm()V"/>
+	</class>
+	<class name="android/app/AlertDialog" since="1">
+		<extends name="android/app/Dialog"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;ZLandroid/content/DialogInterface$OnCancelListener;)V"/>
+		<method name="getButton(I)Landroid/widget/Button;" since="3"/>
+		<method name="getListView()Landroid/widget/ListView;" since="3"/>
+		<method name="setButton(ILjava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" since="3"/>
+		<method name="setButton(ILjava/lang/CharSequence;Landroid/os/Message;)V" since="3"/>
+		<method name="setButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15"/>
+		<method name="setButton(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15"/>
+		<method name="setButton2(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15"/>
+		<method name="setButton2(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15"/>
+		<method name="setButton3(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)V" deprecated="15"/>
+		<method name="setButton3(Ljava/lang/CharSequence;Landroid/os/Message;)V" deprecated="15"/>
+		<method name="setCustomTitle(Landroid/view/View;)V"/>
+		<method name="setIcon(I)V"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setIconAttribute(I)V" since="11"/>
+		<method name="setInverseBackgroundForced(Z)V"/>
+		<method name="setMessage(Ljava/lang/CharSequence;)V"/>
+		<method name="setView(Landroid/view/View;)V"/>
+		<method name="setView(Landroid/view/View;IIII)V" since="3"/>
+		<field name="THEME_DEVICE_DEFAULT_DARK" since="14" deprecated="23"/>
+		<field name="THEME_DEVICE_DEFAULT_LIGHT" since="14" deprecated="23"/>
+		<field name="THEME_HOLO_DARK" since="11" deprecated="23"/>
+		<field name="THEME_HOLO_LIGHT" since="11" deprecated="23"/>
+		<field name="THEME_TRADITIONAL" since="11" deprecated="23"/>
+	</class>
+	<class name="android/app/AlertDialog$Builder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V" since="11"/>
+		<method name="create()Landroid/app/AlertDialog;"/>
+		<method name="getContext()Landroid/content/Context;" since="11"/>
+		<method name="setAdapter(Landroid/widget/ListAdapter;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setCancelable(Z)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setCursor(Landroid/database/Cursor;Landroid/content/DialogInterface$OnClickListener;Ljava/lang/String;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setCustomTitle(Landroid/view/View;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setIcon(I)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setIconAttribute(I)Landroid/app/AlertDialog$Builder;" since="11"/>
+		<method name="setInverseBackgroundForced(Z)Landroid/app/AlertDialog$Builder;" deprecated="23"/>
+		<method name="setItems(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setItems([Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setMessage(I)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setMultiChoiceItems(I[ZLandroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setMultiChoiceItems(Landroid/database/Cursor;Ljava/lang/String;Ljava/lang/String;Landroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setMultiChoiceItems([Ljava/lang/CharSequence;[ZLandroid/content/DialogInterface$OnMultiChoiceClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setNegativeButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setNegativeButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setNeutralButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setNeutralButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)Landroid/app/AlertDialog$Builder;" since="17"/>
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setOnKeyListener(Landroid/content/DialogInterface$OnKeyListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setPositiveButton(ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setSingleChoiceItems(IILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setSingleChoiceItems(Landroid/database/Cursor;ILjava/lang/String;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setSingleChoiceItems(Landroid/widget/ListAdapter;ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setSingleChoiceItems([Ljava/lang/CharSequence;ILandroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setTitle(I)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="setView(I)Landroid/app/AlertDialog$Builder;" since="21"/>
+		<method name="setView(Landroid/view/View;)Landroid/app/AlertDialog$Builder;"/>
+		<method name="show()Landroid/app/AlertDialog;"/>
+	</class>
+	<class name="android/app/AliasActivity" since="1" deprecated="30">
+		<extends name="android/app/Activity"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+	</class>
+	<class name="android/app/AppComponentFactory" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;"/>
+		<method name="instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application;"/>
+		<method name="instantiateClassLoader(Ljava/lang/ClassLoader;Landroid/content/pm/ApplicationInfo;)Ljava/lang/ClassLoader;" since="29"/>
+		<method name="instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider;"/>
+		<method name="instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver;"/>
+		<method name="instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service;"/>
+	</class>
+	<class name="android/app/AppOpsManager" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="checkOp(Ljava/lang/String;ILjava/lang/String;)I" deprecated="29"/>
+		<method name="checkOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" deprecated="29"/>
+		<method name="checkPackage(ILjava/lang/String;)V" deprecated="30"/>
+		<method name="finishOp(Ljava/lang/String;ILjava/lang/String;)V" deprecated="30"/>
+		<method name="finishOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" since="30"/>
+		<method name="finishProxyOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" since="31"/>
+		<method name="isOpActive(Ljava/lang/String;ILjava/lang/String;)Z" since="30"/>
+		<method name="noteOp(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30"/>
+		<method name="noteOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30"/>
+		<method name="noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30"/>
+		<method name="noteOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30"/>
+		<method name="noteProxyOp(Ljava/lang/String;Ljava/lang/String;)I" since="23" deprecated="30"/>
+		<method name="noteProxyOp(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I" since="30"/>
+		<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;)I" since="23" deprecated="30"/>
+		<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;I)I" since="29" deprecated="30"/>
+		<method name="noteProxyOpNoThrow(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)I" since="30"/>
+		<method name="permissionToOp(Ljava/lang/String;)Ljava/lang/String;" since="23"/>
+		<method name="setOnOpNotedCallback(Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpNotedCallback;)V" since="30"/>
+		<method name="startOp(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30"/>
+		<method name="startOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30"/>
+		<method name="startOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" deprecated="30"/>
+		<method name="startOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="30"/>
+		<method name="startProxyOp(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="31"/>
+		<method name="startProxyOpNoThrow(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" since="31"/>
+		<method name="startWatchingActive([Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/app/AppOpsManager$OnOpActiveChangedListener;)V" since="30"/>
+		<method name="startWatchingMode(Ljava/lang/String;Ljava/lang/String;ILandroid/app/AppOpsManager$OnOpChangedListener;)V" since="29"/>
+		<method name="startWatchingMode(Ljava/lang/String;Ljava/lang/String;Landroid/app/AppOpsManager$OnOpChangedListener;)V"/>
+		<method name="stopWatchingActive(Landroid/app/AppOpsManager$OnOpActiveChangedListener;)V" since="30"/>
+		<method name="stopWatchingMode(Landroid/app/AppOpsManager$OnOpChangedListener;)V"/>
+		<method name="unsafeCheckOp(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
+		<method name="unsafeCheckOpNoThrow(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
+		<method name="unsafeCheckOpRaw(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
+		<method name="unsafeCheckOpRawNoThrow(Ljava/lang/String;ILjava/lang/String;)I" since="29"/>
+		<field name="MODE_ALLOWED"/>
+		<field name="MODE_DEFAULT" since="21"/>
+		<field name="MODE_ERRORED"/>
+		<field name="MODE_FOREGROUND" since="29"/>
+		<field name="MODE_IGNORED"/>
+		<field name="OPSTR_ADD_VOICEMAIL" since="23"/>
+		<field name="OPSTR_ANSWER_PHONE_CALLS" since="26"/>
+		<field name="OPSTR_BODY_SENSORS" since="23"/>
+		<field name="OPSTR_CALL_PHONE" since="23"/>
+		<field name="OPSTR_CAMERA" since="23"/>
+		<field name="OPSTR_COARSE_LOCATION"/>
+		<field name="OPSTR_FINE_LOCATION"/>
+		<field name="OPSTR_GET_USAGE_STATS" since="21"/>
+		<field name="OPSTR_MOCK_LOCATION" since="23"/>
+		<field name="OPSTR_MONITOR_HIGH_POWER_LOCATION"/>
+		<field name="OPSTR_MONITOR_LOCATION"/>
+		<field name="OPSTR_PICTURE_IN_PICTURE" since="26"/>
+		<field name="OPSTR_PROCESS_OUTGOING_CALLS" since="26"/>
+		<field name="OPSTR_READ_CALENDAR" since="23"/>
+		<field name="OPSTR_READ_CALL_LOG" since="23"/>
+		<field name="OPSTR_READ_CELL_BROADCASTS" since="23"/>
+		<field name="OPSTR_READ_CONTACTS" since="23"/>
+		<field name="OPSTR_READ_EXTERNAL_STORAGE" since="23"/>
+		<field name="OPSTR_READ_PHONE_NUMBERS" since="26"/>
+		<field name="OPSTR_READ_PHONE_STATE" since="23"/>
+		<field name="OPSTR_READ_SMS" since="23"/>
+		<field name="OPSTR_RECEIVE_MMS" since="23"/>
+		<field name="OPSTR_RECEIVE_SMS" since="23"/>
+		<field name="OPSTR_RECEIVE_WAP_PUSH" since="23"/>
+		<field name="OPSTR_RECORD_AUDIO" since="23"/>
+		<field name="OPSTR_SEND_SMS" since="23"/>
+		<field name="OPSTR_SYSTEM_ALERT_WINDOW" since="23"/>
+		<field name="OPSTR_USE_FINGERPRINT" since="23"/>
+		<field name="OPSTR_USE_SIP" since="23"/>
+		<field name="OPSTR_WRITE_CALENDAR" since="23"/>
+		<field name="OPSTR_WRITE_CALL_LOG" since="23"/>
+		<field name="OPSTR_WRITE_CONTACTS" since="23"/>
+		<field name="OPSTR_WRITE_EXTERNAL_STORAGE" since="23"/>
+		<field name="OPSTR_WRITE_SETTINGS" since="23"/>
+		<field name="WATCH_FOREGROUND_CHANGES" since="29"/>
+	</class>
+	<class name="android/app/AppOpsManager$OnOpActiveChangedListener" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onOpActiveChanged(Ljava/lang/String;ILjava/lang/String;Z)V"/>
+	</class>
+	<class name="android/app/AppOpsManager$OnOpChangedListener" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onOpChanged(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/app/AppOpsManager$OnOpNotedCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAsyncNoted(Landroid/app/AsyncNotedAppOp;)V"/>
+		<method name="onNoted(Landroid/app/SyncNotedAppOp;)V"/>
+		<method name="onSelfNoted(Landroid/app/SyncNotedAppOp;)V"/>
+	</class>
+	<class name="android/app/Application" since="1">
+		<extends name="android/content/ContextWrapper"/>
+		<implements name="android/content/ComponentCallbacks" removed="14"/>
+		<implements name="android/content/ComponentCallbacks2" since="14"/>
+		<method name="&lt;init>()V"/>
+		<method name="getProcessName()Ljava/lang/String;" since="28"/>
+		<method name="onCreate()V"/>
+		<method name="onTerminate()V"/>
+		<method name="registerActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="14"/>
+		<method name="registerOnProvideAssistDataListener(Landroid/app/Application$OnProvideAssistDataListener;)V" since="18"/>
+		<method name="unregisterActivityLifecycleCallbacks(Landroid/app/Application$ActivityLifecycleCallbacks;)V" since="14"/>
+		<method name="unregisterOnProvideAssistDataListener(Landroid/app/Application$OnProvideAssistDataListener;)V" since="18"/>
+	</class>
+	<class name="android/app/Application$ActivityLifecycleCallbacks" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
+		<method name="onActivityDestroyed(Landroid/app/Activity;)V"/>
+		<method name="onActivityPaused(Landroid/app/Activity;)V"/>
+		<method name="onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+		<method name="onActivityPostDestroyed(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPostPaused(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPostResumed(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPostSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+		<method name="onActivityPostStarted(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPostStopped(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+		<method name="onActivityPreDestroyed(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPrePaused(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPreResumed(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPreSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V" since="29"/>
+		<method name="onActivityPreStarted(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityPreStopped(Landroid/app/Activity;)V" since="29"/>
+		<method name="onActivityResumed(Landroid/app/Activity;)V"/>
+		<method name="onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
+		<method name="onActivityStarted(Landroid/app/Activity;)V"/>
+		<method name="onActivityStopped(Landroid/app/Activity;)V"/>
+	</class>
+	<class name="android/app/Application$OnProvideAssistDataListener" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="onProvideAssistData(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/ApplicationErrorReport" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getErrorReportReceiver(Landroid/content/Context;Ljava/lang/String;I)Landroid/content/ComponentName;"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_ANR"/>
+		<field name="TYPE_BATTERY"/>
+		<field name="TYPE_CRASH"/>
+		<field name="TYPE_NONE"/>
+		<field name="TYPE_RUNNING_SERVICE"/>
+		<field name="anrInfo"/>
+		<field name="batteryInfo"/>
+		<field name="crashInfo"/>
+		<field name="installerPackageName"/>
+		<field name="packageName"/>
+		<field name="processName"/>
+		<field name="runningServiceInfo"/>
+		<field name="systemApp"/>
+		<field name="time"/>
+		<field name="type"/>
+	</class>
+	<class name="android/app/ApplicationErrorReport$AnrInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
+		<field name="activity"/>
+		<field name="cause"/>
+		<field name="info"/>
+	</class>
+	<class name="android/app/ApplicationErrorReport$BatteryInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
+		<field name="checkinDetails"/>
+		<field name="durationMicros"/>
+		<field name="usageDetails"/>
+		<field name="usagePercent"/>
+	</class>
+	<class name="android/app/ApplicationErrorReport$CrashInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
+		<field name="exceptionClassName"/>
+		<field name="exceptionMessage"/>
+		<field name="stackTrace"/>
+		<field name="throwClassName"/>
+		<field name="throwFileName"/>
+		<field name="throwLineNumber"/>
+		<field name="throwMethodName"/>
+	</class>
+	<class name="android/app/ApplicationErrorReport$RunningServiceInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
+		<field name="durationMillis"/>
+		<field name="serviceDetails"/>
+	</class>
+	<class name="android/app/ApplicationExitInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDefiningUid()I"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getImportance()I"/>
+		<method name="getPackageUid()I"/>
+		<method name="getPid()I"/>
+		<method name="getProcessName()Ljava/lang/String;"/>
+		<method name="getProcessStateSummary()[B"/>
+		<method name="getPss()J"/>
+		<method name="getRealUid()I"/>
+		<method name="getReason()I"/>
+		<method name="getRss()J"/>
+		<method name="getStatus()I"/>
+		<method name="getTimestamp()J"/>
+		<method name="getTraceInputStream()Ljava/io/InputStream;"/>
+		<method name="getUserHandle()Landroid/os/UserHandle;"/>
+		<field name="CREATOR"/>
+		<field name="REASON_ANR"/>
+		<field name="REASON_CRASH"/>
+		<field name="REASON_CRASH_NATIVE"/>
+		<field name="REASON_DEPENDENCY_DIED"/>
+		<field name="REASON_EXCESSIVE_RESOURCE_USAGE"/>
+		<field name="REASON_EXIT_SELF"/>
+		<field name="REASON_INITIALIZATION_FAILURE"/>
+		<field name="REASON_LOW_MEMORY"/>
+		<field name="REASON_OTHER"/>
+		<field name="REASON_PERMISSION_CHANGE"/>
+		<field name="REASON_SIGNALED"/>
+		<field name="REASON_UNKNOWN"/>
+		<field name="REASON_USER_REQUESTED"/>
+		<field name="REASON_USER_STOPPED"/>
+	</class>
+	<class name="android/app/AsyncNotedAppOp" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAttributionTag()Ljava/lang/String;"/>
+		<method name="getMessage()Ljava/lang/String;"/>
+		<method name="getNotingUid()I"/>
+		<method name="getOp()Ljava/lang/String;"/>
+		<method name="getTime()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/AuthenticationRequiredException" since="26">
+		<extends name="java/lang/SecurityException"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;Landroid/app/PendingIntent;)V"/>
+		<method name="getUserAction()Landroid/app/PendingIntent;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/AutomaticZenRule" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/net/Uri;Landroid/service/notification/ZenPolicy;IZ)V" since="29"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/content/ComponentName;Landroid/net/Uri;IZ)V" deprecated="29"/>
+		<method name="getConditionId()Landroid/net/Uri;"/>
+		<method name="getConfigurationActivity()Landroid/content/ComponentName;" since="29"/>
+		<method name="getCreationTime()J"/>
+		<method name="getInterruptionFilter()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getOwner()Landroid/content/ComponentName;"/>
+		<method name="getZenPolicy()Landroid/service/notification/ZenPolicy;" since="29"/>
+		<method name="isEnabled()Z"/>
+		<method name="setConditionId(Landroid/net/Uri;)V"/>
+		<method name="setConfigurationActivity(Landroid/content/ComponentName;)V" since="29"/>
+		<method name="setEnabled(Z)V"/>
+		<method name="setInterruptionFilter(I)V"/>
+		<method name="setName(Ljava/lang/String;)V"/>
+		<method name="setZenPolicy(Landroid/service/notification/ZenPolicy;)V" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/BackgroundServiceStartNotAllowedException" since="31">
+		<extends name="android/app/ServiceStartNotAllowedException"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/DatePickerDialog" since="1">
+		<extends name="android/app/AlertDialog"/>
+		<implements name="android/content/DialogInterface$OnClickListener"/>
+		<implements name="android/widget/DatePicker$OnDateChangedListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" since="24"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V" since="24"/>
+		<method name="&lt;init>(Landroid/content/Context;ILandroid/app/DatePickerDialog$OnDateSetListener;III)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/app/DatePickerDialog$OnDateSetListener;III)V"/>
+		<method name="getDatePicker()Landroid/widget/DatePicker;" since="11"/>
+		<method name="setOnDateSetListener(Landroid/app/DatePickerDialog$OnDateSetListener;)V" since="24"/>
+		<method name="updateDate(III)V"/>
+	</class>
+	<class name="android/app/DatePickerDialog$OnDateSetListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onDateSet(Landroid/widget/DatePicker;III)V"/>
+	</class>
+	<class name="android/app/Dialog" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/DialogInterface"/>
+		<implements name="android/view/KeyEvent$Callback"/>
+		<implements name="android/view/View$OnCreateContextMenuListener"/>
+		<implements name="android/view/Window$Callback"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;ZLandroid/content/DialogInterface$OnCancelListener;)V"/>
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="closeOptionsMenu()V"/>
+		<method name="create()V" since="21"/>
+		<method name="findViewById(I)Landroid/view/View;"/>
+		<method name="getActionBar()Landroid/app/ActionBar;" since="11"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getCurrentFocus()Landroid/view/View;"/>
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
+		<method name="getOwnerActivity()Landroid/app/Activity;"/>
+		<method name="getSearchEvent()Landroid/view/SearchEvent;" since="23"/>
+		<method name="getVolumeControlStream()I"/>
+		<method name="getWindow()Landroid/view/Window;"/>
+		<method name="hide()V"/>
+		<method name="invalidateOptionsMenu()V" since="11"/>
+		<method name="isShowing()Z"/>
+		<method name="onBackPressed()V" since="5"/>
+		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z"/>
+		<method name="onContextMenuClosed(Landroid/view/Menu;)V"/>
+		<method name="onCreate(Landroid/os/Bundle;)V"/>
+		<method name="onCreateOptionsMenu(Landroid/view/Menu;)Z"/>
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
+		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z" since="11"/>
+		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z"/>
+		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V"/>
+		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)Z"/>
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V"/>
+		<method name="onSaveInstanceState()Landroid/os/Bundle;"/>
+		<method name="onStart()V"/>
+		<method name="onStop()V"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="openContextMenu(Landroid/view/View;)V"/>
+		<method name="openOptionsMenu()V"/>
+		<method name="registerForContextMenu(Landroid/view/View;)V"/>
+		<method name="requestWindowFeature(I)Z"/>
+		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
+		<method name="setCancelMessage(Landroid/os/Message;)V"/>
+		<method name="setCancelable(Z)V"/>
+		<method name="setCanceledOnTouchOutside(Z)V"/>
+		<method name="setContentView(I)V"/>
+		<method name="setContentView(Landroid/view/View;)V"/>
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="setDismissMessage(Landroid/os/Message;)V"/>
+		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
+		<method name="setFeatureDrawableAlpha(II)V"/>
+		<method name="setFeatureDrawableResource(II)V"/>
+		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V"/>
+		<method name="setOnCancelListener(Landroid/content/DialogInterface$OnCancelListener;)V"/>
+		<method name="setOnDismissListener(Landroid/content/DialogInterface$OnDismissListener;)V"/>
+		<method name="setOnKeyListener(Landroid/content/DialogInterface$OnKeyListener;)V"/>
+		<method name="setOnShowListener(Landroid/content/DialogInterface$OnShowListener;)V" since="8"/>
+		<method name="setOwnerActivity(Landroid/app/Activity;)V"/>
+		<method name="setTitle(I)V"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setVolumeControlStream(I)V"/>
+		<method name="show()V"/>
+		<method name="takeKeyEvents(Z)V"/>
+		<method name="unregisterForContextMenu(Landroid/view/View;)V"/>
+	</class>
+	<class name="android/app/DialogFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment"/>
+		<implements name="android/content/DialogInterface$OnCancelListener"/>
+		<implements name="android/content/DialogInterface$OnDismissListener"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="dismiss()V" deprecated="29"/>
+		<method name="dismissAllowingStateLoss()V" since="12" deprecated="29"/>
+		<method name="getDialog()Landroid/app/Dialog;" deprecated="29"/>
+		<method name="getShowsDialog()Z" deprecated="29"/>
+		<method name="getTheme()I" deprecated="29"/>
+		<method name="isCancelable()Z" deprecated="29"/>
+		<method name="onCreateDialog(Landroid/os/Bundle;)Landroid/app/Dialog;" deprecated="29"/>
+		<method name="setCancelable(Z)V" deprecated="29"/>
+		<method name="setShowsDialog(Z)V" deprecated="29"/>
+		<method name="setStyle(II)V" deprecated="29"/>
+		<method name="show(Landroid/app/FragmentManager;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="show(Landroid/app/FragmentTransaction;Ljava/lang/String;)I" deprecated="29"/>
+		<field name="STYLE_NORMAL" deprecated="29"/>
+		<field name="STYLE_NO_FRAME" deprecated="29"/>
+		<field name="STYLE_NO_INPUT" deprecated="29"/>
+		<field name="STYLE_NO_TITLE" deprecated="29"/>
+	</class>
+	<class name="android/app/DirectAction" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getLocusId()Landroid/content/LocusId;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/DirectAction$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/DirectAction;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/app/DirectAction$Builder;"/>
+		<method name="setLocusId(Landroid/content/LocusId;)Landroid/app/DirectAction$Builder;"/>
+	</class>
+	<class name="android/app/DownloadManager" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZ)J" since="12" deprecated="29"/>
+		<method name="addCompletedDownload(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;Ljava/lang/String;JZLandroid/net/Uri;Landroid/net/Uri;)J" since="24" deprecated="29"/>
+		<method name="enqueue(Landroid/app/DownloadManager$Request;)J"/>
+		<method name="getMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;" since="11"/>
+		<method name="getMimeTypeForDownloadedFile(J)Ljava/lang/String;" since="11"/>
+		<method name="getRecommendedMaxBytesOverMobile(Landroid/content/Context;)Ljava/lang/Long;" since="11"/>
+		<method name="getUriForDownloadedFile(J)Landroid/net/Uri;" since="11"/>
+		<method name="openDownloadedFile(J)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="query(Landroid/app/DownloadManager$Query;)Landroid/database/Cursor;"/>
+		<method name="remove([J)I"/>
+		<field name="ACTION_DOWNLOAD_COMPLETE"/>
+		<field name="ACTION_NOTIFICATION_CLICKED"/>
+		<field name="ACTION_VIEW_DOWNLOADS"/>
+		<field name="COLUMN_BYTES_DOWNLOADED_SO_FAR"/>
+		<field name="COLUMN_DESCRIPTION"/>
+		<field name="COLUMN_ID"/>
+		<field name="COLUMN_LAST_MODIFIED_TIMESTAMP"/>
+		<field name="COLUMN_LOCAL_FILENAME" since="11" deprecated="24"/>
+		<field name="COLUMN_LOCAL_URI"/>
+		<field name="COLUMN_MEDIAPROVIDER_URI"/>
+		<field name="COLUMN_MEDIA_TYPE"/>
+		<field name="COLUMN_REASON"/>
+		<field name="COLUMN_STATUS"/>
+		<field name="COLUMN_TITLE"/>
+		<field name="COLUMN_TOTAL_SIZE_BYTES"/>
+		<field name="COLUMN_URI"/>
+		<field name="ERROR_CANNOT_RESUME"/>
+		<field name="ERROR_DEVICE_NOT_FOUND"/>
+		<field name="ERROR_FILE_ALREADY_EXISTS"/>
+		<field name="ERROR_FILE_ERROR"/>
+		<field name="ERROR_HTTP_DATA_ERROR"/>
+		<field name="ERROR_INSUFFICIENT_SPACE"/>
+		<field name="ERROR_TOO_MANY_REDIRECTS"/>
+		<field name="ERROR_UNHANDLED_HTTP_CODE"/>
+		<field name="ERROR_UNKNOWN"/>
+		<field name="EXTRA_DOWNLOAD_ID"/>
+		<field name="EXTRA_NOTIFICATION_CLICK_DOWNLOAD_IDS" since="11"/>
+		<field name="INTENT_EXTRAS_SORT_BY_SIZE" since="12"/>
+		<field name="PAUSED_QUEUED_FOR_WIFI"/>
+		<field name="PAUSED_UNKNOWN"/>
+		<field name="PAUSED_WAITING_FOR_NETWORK"/>
+		<field name="PAUSED_WAITING_TO_RETRY"/>
+		<field name="STATUS_FAILED"/>
+		<field name="STATUS_PAUSED"/>
+		<field name="STATUS_PENDING"/>
+		<field name="STATUS_RUNNING"/>
+		<field name="STATUS_SUCCESSFUL"/>
+	</class>
+	<class name="android/app/DownloadManager$Query" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="setFilterById([J)Landroid/app/DownloadManager$Query;"/>
+		<method name="setFilterByStatus(I)Landroid/app/DownloadManager$Query;"/>
+	</class>
+	<class name="android/app/DownloadManager$Request" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/Uri;)V"/>
+		<method name="addRequestHeader(Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
+		<method name="allowScanningByMediaScanner()V" since="11" deprecated="29"/>
+		<method name="setAllowedNetworkTypes(I)Landroid/app/DownloadManager$Request;"/>
+		<method name="setAllowedOverMetered(Z)Landroid/app/DownloadManager$Request;" since="16"/>
+		<method name="setAllowedOverRoaming(Z)Landroid/app/DownloadManager$Request;"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/app/DownloadManager$Request;"/>
+		<method name="setDestinationInExternalFilesDir(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
+		<method name="setDestinationInExternalPublicDir(Ljava/lang/String;Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
+		<method name="setDestinationUri(Landroid/net/Uri;)Landroid/app/DownloadManager$Request;"/>
+		<method name="setMimeType(Ljava/lang/String;)Landroid/app/DownloadManager$Request;"/>
+		<method name="setNotificationVisibility(I)Landroid/app/DownloadManager$Request;" since="11"/>
+		<method name="setRequiresCharging(Z)Landroid/app/DownloadManager$Request;" since="24"/>
+		<method name="setRequiresDeviceIdle(Z)Landroid/app/DownloadManager$Request;" since="24"/>
+		<method name="setShowRunningNotification(Z)Landroid/app/DownloadManager$Request;" deprecated="15"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/app/DownloadManager$Request;"/>
+		<method name="setVisibleInDownloadsUi(Z)Landroid/app/DownloadManager$Request;" deprecated="29"/>
+		<field name="NETWORK_MOBILE"/>
+		<field name="NETWORK_WIFI"/>
+		<field name="VISIBILITY_HIDDEN" since="11"/>
+		<field name="VISIBILITY_VISIBLE" since="11"/>
+		<field name="VISIBILITY_VISIBLE_NOTIFY_COMPLETED" since="11"/>
+		<field name="VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION" since="12"/>
+	</class>
+	<class name="android/app/ExpandableListActivity" since="1" deprecated="30">
+		<extends name="android/app/Activity"/>
+		<implements name="android/widget/ExpandableListView$OnChildClickListener"/>
+		<implements name="android/widget/ExpandableListView$OnGroupCollapseListener"/>
+		<implements name="android/widget/ExpandableListView$OnGroupExpandListener"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;" deprecated="30"/>
+		<method name="getExpandableListView()Landroid/widget/ExpandableListView;" deprecated="30"/>
+		<method name="getSelectedId()J" deprecated="30"/>
+		<method name="getSelectedPosition()J" deprecated="30"/>
+		<method name="setListAdapter(Landroid/widget/ExpandableListAdapter;)V" deprecated="30"/>
+		<method name="setSelectedChild(IIZ)Z" deprecated="30"/>
+		<method name="setSelectedGroup(I)V" deprecated="30"/>
+	</class>
+	<class name="android/app/ForegroundServiceStartNotAllowedException" since="31">
+		<extends name="android/app/ServiceStartNotAllowedException"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/Fragment" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/ComponentCallbacks" removed="14"/>
+		<implements name="android/content/ComponentCallbacks2" since="14"/>
+		<implements name="android/view/View$OnCreateContextMenuListener"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+		<method name="getActivity()Landroid/app/Activity;" deprecated="29"/>
+		<method name="getAllowEnterTransitionOverlap()Z" since="21" deprecated="29"/>
+		<method name="getAllowReturnTransitionOverlap()Z" since="21" deprecated="29"/>
+		<method name="getArguments()Landroid/os/Bundle;" deprecated="29"/>
+		<method name="getChildFragmentManager()Landroid/app/FragmentManager;" since="17" deprecated="29"/>
+		<method name="getContext()Landroid/content/Context;" since="23" deprecated="29"/>
+		<method name="getEnterTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+		<method name="getExitTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+		<method name="getFragmentManager()Landroid/app/FragmentManager;" deprecated="29"/>
+		<method name="getHost()Ljava/lang/Object;" since="23" deprecated="29"/>
+		<method name="getId()I" deprecated="29"/>
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="26" deprecated="29"/>
+		<method name="getLoaderManager()Landroid/app/LoaderManager;" deprecated="28"/>
+		<method name="getParentFragment()Landroid/app/Fragment;" since="17" deprecated="29"/>
+		<method name="getReenterTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+		<method name="getResources()Landroid/content/res/Resources;" deprecated="29"/>
+		<method name="getRetainInstance()Z" deprecated="29"/>
+		<method name="getReturnTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+		<method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+		<method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21" deprecated="29"/>
+		<method name="getString(I)Ljava/lang/String;" deprecated="29"/>
+		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;" deprecated="29"/>
+		<method name="getTag()Ljava/lang/String;" deprecated="29"/>
+		<method name="getTargetFragment()Landroid/app/Fragment;" deprecated="29"/>
+		<method name="getTargetRequestCode()I" deprecated="29"/>
+		<method name="getText(I)Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getUserVisibleHint()Z" since="15" deprecated="29"/>
+		<method name="getView()Landroid/view/View;" deprecated="29"/>
+		<method name="instantiate(Landroid/content/Context;Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+		<method name="instantiate(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;" deprecated="29"/>
+		<method name="isAdded()Z" deprecated="29"/>
+		<method name="isDetached()Z" since="13" deprecated="29"/>
+		<method name="isHidden()Z" deprecated="29"/>
+		<method name="isInLayout()Z" deprecated="29"/>
+		<method name="isRemoving()Z" deprecated="29"/>
+		<method name="isResumed()Z" deprecated="29"/>
+		<method name="isStateSaved()Z" since="26" deprecated="29"/>
+		<method name="isVisible()Z" deprecated="29"/>
+		<method name="onActivityCreated(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onActivityResult(IILandroid/content/Intent;)V" deprecated="29"/>
+		<method name="onAttach(Landroid/app/Activity;)V" deprecated="23"/>
+		<method name="onAttach(Landroid/content/Context;)V" since="23" deprecated="29"/>
+		<method name="onAttachFragment(Landroid/app/Fragment;)V" since="24" deprecated="29"/>
+		<method name="onContextItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+		<method name="onCreate(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onCreateAnimator(IZI)Landroid/animation/Animator;" deprecated="29"/>
+		<method name="onCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V" deprecated="29"/>
+		<method name="onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View;" deprecated="29"/>
+		<method name="onDestroy()V" deprecated="29"/>
+		<method name="onDestroyOptionsMenu()V" deprecated="29"/>
+		<method name="onDestroyView()V" deprecated="29"/>
+		<method name="onDetach()V" deprecated="29"/>
+		<method name="onGetLayoutInflater(Landroid/os/Bundle;)Landroid/view/LayoutInflater;" since="26" deprecated="29"/>
+		<method name="onHiddenChanged(Z)V" deprecated="29"/>
+		<method name="onInflate(Landroid/app/Activity;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="12" deprecated="23"/>
+		<method name="onInflate(Landroid/content/Context;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="23" deprecated="29"/>
+		<method name="onInflate(Landroid/util/AttributeSet;Landroid/os/Bundle;)V" deprecated="15"/>
+		<method name="onMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
+		<method name="onMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+		<method name="onOptionsItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+		<method name="onOptionsMenuClosed(Landroid/view/Menu;)V" deprecated="29"/>
+		<method name="onPause()V" deprecated="29"/>
+		<method name="onPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
+		<method name="onPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+		<method name="onPrepareOptionsMenu(Landroid/view/Menu;)V" deprecated="29"/>
+		<method name="onRequestPermissionsResult(I[Ljava/lang/String;[I)V" since="23" deprecated="29"/>
+		<method name="onResume()V" deprecated="29"/>
+		<method name="onSaveInstanceState(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onStart()V" deprecated="29"/>
+		<method name="onStop()V" deprecated="29"/>
+		<method name="onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V" since="13" deprecated="29"/>
+		<method name="onViewStateRestored(Landroid/os/Bundle;)V" since="17" deprecated="29"/>
+		<method name="postponeEnterTransition()V" since="26" deprecated="29"/>
+		<method name="registerForContextMenu(Landroid/view/View;)V" deprecated="29"/>
+		<method name="requestPermissions([Ljava/lang/String;I)V" since="23" deprecated="29"/>
+		<method name="setAllowEnterTransitionOverlap(Z)V" since="21" deprecated="29"/>
+		<method name="setAllowReturnTransitionOverlap(Z)V" since="21" deprecated="29"/>
+		<method name="setArguments(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="setEnterSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" deprecated="29"/>
+		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+		<method name="setExitSharedElementCallback(Landroid/app/SharedElementCallback;)V" since="21" deprecated="29"/>
+		<method name="setExitTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+		<method name="setHasOptionsMenu(Z)V" deprecated="29"/>
+		<method name="setInitialSavedState(Landroid/app/Fragment$SavedState;)V" since="13" deprecated="29"/>
+		<method name="setMenuVisibility(Z)V" since="14" deprecated="29"/>
+		<method name="setReenterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+		<method name="setRetainInstance(Z)V" deprecated="29"/>
+		<method name="setReturnTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+		<method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+		<method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21" deprecated="29"/>
+		<method name="setTargetFragment(Landroid/app/Fragment;I)V" deprecated="29"/>
+		<method name="setUserVisibleHint(Z)V" since="15" deprecated="29"/>
+		<method name="shouldShowRequestPermissionRationale(Ljava/lang/String;)Z" since="23" deprecated="29"/>
+		<method name="startActivity(Landroid/content/Intent;)V" deprecated="29"/>
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16" deprecated="29"/>
+		<method name="startActivityForResult(Landroid/content/Intent;I)V" deprecated="29"/>
+		<method name="startActivityForResult(Landroid/content/Intent;ILandroid/os/Bundle;)V" since="16" deprecated="29"/>
+		<method name="startIntentSenderForResult(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24" deprecated="29"/>
+		<method name="startPostponedEnterTransition()V" since="26" deprecated="29"/>
+		<method name="unregisterForContextMenu(Landroid/view/View;)V" deprecated="29"/>
+	</class>
+	<class name="android/app/Fragment$InstantiationException" since="11" deprecated="28">
+		<extends name="android/util/AndroidRuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V" deprecated="29"/>
+	</class>
+	<class name="android/app/Fragment$SavedState" since="13" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentBreadCrumbs" since="11" deprecated="21">
+		<extends name="android/view/ViewGroup"/>
+		<implements name="android/app/FragmentManager$OnBackStackChangedListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="setActivity(Landroid/app/Activity;)V" deprecated="29"/>
+		<method name="setMaxVisible(I)V" deprecated="29"/>
+		<method name="setOnBreadCrumbClickListener(Landroid/app/FragmentBreadCrumbs$OnBreadCrumbClickListener;)V" since="12" deprecated="29"/>
+		<method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" deprecated="29"/>
+		<method name="setTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentBreadCrumbs$OnBreadCrumbClickListener" since="12" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="onBreadCrumbClick(Landroid/app/FragmentManager$BackStackEntry;I)Z" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentContainer" since="23" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="onFindViewById(I)Landroid/view/View;" deprecated="29"/>
+		<method name="onHasView()Z" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentController" since="23" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="attachHost(Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="createController(Landroid/app/FragmentHostCallback;)Landroid/app/FragmentController;" deprecated="29"/>
+		<method name="dispatchActivityCreated()V" deprecated="29"/>
+		<method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V" deprecated="29"/>
+		<method name="dispatchContextItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+		<method name="dispatchCreate()V" deprecated="29"/>
+		<method name="dispatchCreateOptionsMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)Z" deprecated="29"/>
+		<method name="dispatchDestroy()V" deprecated="29"/>
+		<method name="dispatchDestroyView()V" deprecated="29"/>
+		<method name="dispatchLowMemory()V" deprecated="29"/>
+		<method name="dispatchMultiWindowModeChanged(Z)V" since="24" deprecated="26"/>
+		<method name="dispatchMultiWindowModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+		<method name="dispatchOptionsItemSelected(Landroid/view/MenuItem;)Z" deprecated="29"/>
+		<method name="dispatchOptionsMenuClosed(Landroid/view/Menu;)V" deprecated="29"/>
+		<method name="dispatchPause()V" deprecated="29"/>
+		<method name="dispatchPictureInPictureModeChanged(Z)V" since="24" deprecated="26"/>
+		<method name="dispatchPictureInPictureModeChanged(ZLandroid/content/res/Configuration;)V" since="26" deprecated="29"/>
+		<method name="dispatchPrepareOptionsMenu(Landroid/view/Menu;)Z" deprecated="29"/>
+		<method name="dispatchResume()V" deprecated="29"/>
+		<method name="dispatchStart()V" deprecated="29"/>
+		<method name="dispatchStop()V" deprecated="29"/>
+		<method name="dispatchTrimMemory(I)V" deprecated="29"/>
+		<method name="doLoaderDestroy()V" deprecated="29"/>
+		<method name="doLoaderStart()V" deprecated="29"/>
+		<method name="doLoaderStop(Z)V" deprecated="29"/>
+		<method name="dumpLoaders(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+		<method name="execPendingActions()Z" deprecated="29"/>
+		<method name="findFragmentByWho(Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+		<method name="getFragmentManager()Landroid/app/FragmentManager;" deprecated="29"/>
+		<method name="getLoaderManager()Landroid/app/LoaderManager;" deprecated="29"/>
+		<method name="noteStateNotSaved()V" deprecated="29"/>
+		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;" deprecated="29"/>
+		<method name="reportLoaderStart()V" deprecated="29"/>
+		<method name="restoreAllState(Landroid/os/Parcelable;Landroid/app/FragmentManagerNonConfig;)V" since="24" deprecated="29"/>
+		<method name="restoreAllState(Landroid/os/Parcelable;Ljava/util/List;)V" deprecated="24"/>
+		<method name="restoreLoaderNonConfig(Landroid/util/ArrayMap;)V" deprecated="29"/>
+		<method name="retainLoaderNonConfig()Landroid/util/ArrayMap;" deprecated="29"/>
+		<method name="retainNestedNonConfig()Landroid/app/FragmentManagerNonConfig;" since="24" deprecated="29"/>
+		<method name="retainNonConfig()Ljava/util/List;" deprecated="24"/>
+		<method name="saveAllState()Landroid/os/Parcelable;" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentHostCallback" since="23" deprecated="28">
+		<extends name="android/app/FragmentContainer"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;I)V" deprecated="29"/>
+		<method name="onAttachFragment(Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="onDump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+		<method name="onGetHost()Ljava/lang/Object;" deprecated="29"/>
+		<method name="onGetLayoutInflater()Landroid/view/LayoutInflater;" deprecated="29"/>
+		<method name="onGetWindowAnimations()I" deprecated="29"/>
+		<method name="onHasWindowAnimations()Z" deprecated="29"/>
+		<method name="onInvalidateOptionsMenu()V" deprecated="29"/>
+		<method name="onRequestPermissionsFromFragment(Landroid/app/Fragment;[Ljava/lang/String;I)V" deprecated="29"/>
+		<method name="onShouldSaveFragmentState(Landroid/app/Fragment;)Z" deprecated="29"/>
+		<method name="onStartActivityFromFragment(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onStartIntentSenderFromFragment(Landroid/app/Fragment;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V" since="24" deprecated="29"/>
+		<method name="onUseFragmentManagerInflaterFactory()Z" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentManager" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="addOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V" deprecated="29"/>
+		<method name="beginTransaction()Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+		<method name="enableDebugLogging(Z)V" deprecated="29"/>
+		<method name="executePendingTransactions()Z" deprecated="29"/>
+		<method name="findFragmentById(I)Landroid/app/Fragment;" deprecated="29"/>
+		<method name="findFragmentByTag(Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+		<method name="getBackStackEntryAt(I)Landroid/app/FragmentManager$BackStackEntry;" deprecated="29"/>
+		<method name="getBackStackEntryCount()I" deprecated="29"/>
+		<method name="getFragment(Landroid/os/Bundle;Ljava/lang/String;)Landroid/app/Fragment;" deprecated="29"/>
+		<method name="getFragments()Ljava/util/List;" since="26" deprecated="29"/>
+		<method name="getPrimaryNavigationFragment()Landroid/app/Fragment;" since="26" deprecated="29"/>
+		<method name="invalidateOptionsMenu()V" since="14" deprecated="29"/>
+		<method name="isDestroyed()Z" since="17" deprecated="29"/>
+		<method name="isStateSaved()Z" since="26" deprecated="29"/>
+		<method name="popBackStack()V" deprecated="29"/>
+		<method name="popBackStack(II)V" deprecated="29"/>
+		<method name="popBackStack(Ljava/lang/String;I)V" deprecated="29"/>
+		<method name="popBackStackImmediate()Z" deprecated="29"/>
+		<method name="popBackStackImmediate(II)Z" deprecated="29"/>
+		<method name="popBackStackImmediate(Ljava/lang/String;I)Z" deprecated="29"/>
+		<method name="putFragment(Landroid/os/Bundle;Ljava/lang/String;Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="registerFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;Z)V" since="26" deprecated="29"/>
+		<method name="removeOnBackStackChangedListener(Landroid/app/FragmentManager$OnBackStackChangedListener;)V" deprecated="29"/>
+		<method name="saveFragmentInstanceState(Landroid/app/Fragment;)Landroid/app/Fragment$SavedState;" since="13" deprecated="29"/>
+		<method name="unregisterFragmentLifecycleCallbacks(Landroid/app/FragmentManager$FragmentLifecycleCallbacks;)V" since="26" deprecated="29"/>
+		<field name="POP_BACK_STACK_INCLUSIVE" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentManager$BackStackEntry" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="getBreadCrumbShortTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getBreadCrumbShortTitleRes()I" deprecated="29"/>
+		<method name="getBreadCrumbTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getBreadCrumbTitleRes()I" deprecated="29"/>
+		<method name="getId()I" deprecated="29"/>
+		<method name="getName()Ljava/lang/String;" since="14" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentManager$FragmentLifecycleCallbacks" since="26" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="onFragmentActivityCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onFragmentAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V" deprecated="29"/>
+		<method name="onFragmentCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onFragmentDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="onFragmentDetached(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="onFragmentPaused(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="onFragmentPreAttached(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/content/Context;)V" deprecated="29"/>
+		<method name="onFragmentPreCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onFragmentResumed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="onFragmentSaveInstanceState(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onFragmentStarted(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="onFragmentStopped(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+		<method name="onFragmentViewCreated(Landroid/app/FragmentManager;Landroid/app/Fragment;Landroid/view/View;Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="onFragmentViewDestroyed(Landroid/app/FragmentManager;Landroid/app/Fragment;)V" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentManager$OnBackStackChangedListener" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="onBackStackChanged()V" deprecated="29"/>
+	</class>
+	<class name="android/app/FragmentManagerNonConfig" since="24" deprecated="28">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/app/FragmentTransaction" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="add(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="add(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="add(Landroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="addSharedElement(Landroid/view/View;Ljava/lang/String;)Landroid/app/FragmentTransaction;" since="21" deprecated="29"/>
+		<method name="addToBackStack(Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="attach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13" deprecated="29"/>
+		<method name="commit()I" deprecated="29"/>
+		<method name="commitAllowingStateLoss()I" deprecated="29"/>
+		<method name="commitNow()V" since="24" deprecated="29"/>
+		<method name="commitNowAllowingStateLoss()V" since="24" deprecated="29"/>
+		<method name="detach(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="13" deprecated="29"/>
+		<method name="disallowAddToBackStack()Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="hide(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="isAddToBackStackAllowed()Z" deprecated="29"/>
+		<method name="isEmpty()Z" deprecated="29"/>
+		<method name="remove(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="replace(ILandroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="replace(ILandroid/app/Fragment;Ljava/lang/String;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="runOnCommit(Ljava/lang/Runnable;)Landroid/app/FragmentTransaction;" since="26" deprecated="29"/>
+		<method name="setBreadCrumbShortTitle(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="setBreadCrumbShortTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="setBreadCrumbTitle(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="setBreadCrumbTitle(Ljava/lang/CharSequence;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="setCustomAnimations(II)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="setCustomAnimations(IIII)Landroid/app/FragmentTransaction;" since="13" deprecated="29"/>
+		<method name="setPrimaryNavigationFragment(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" since="26" deprecated="29"/>
+		<method name="setReorderingAllowed(Z)Landroid/app/FragmentTransaction;" since="26" deprecated="29"/>
+		<method name="setTransition(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="setTransitionStyle(I)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<method name="show(Landroid/app/Fragment;)Landroid/app/FragmentTransaction;" deprecated="29"/>
+		<field name="TRANSIT_ENTER_MASK" deprecated="29"/>
+		<field name="TRANSIT_EXIT_MASK" deprecated="29"/>
+		<field name="TRANSIT_FRAGMENT_CLOSE" deprecated="29"/>
+		<field name="TRANSIT_FRAGMENT_FADE" deprecated="29"/>
+		<field name="TRANSIT_FRAGMENT_OPEN" deprecated="29"/>
+		<field name="TRANSIT_NONE" deprecated="29"/>
+		<field name="TRANSIT_UNSET" deprecated="29"/>
+	</class>
+	<class name="android/app/GameManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getGameMode()I"/>
+		<field name="GAME_MODE_BATTERY"/>
+		<field name="GAME_MODE_PERFORMANCE"/>
+		<field name="GAME_MODE_STANDARD"/>
+		<field name="GAME_MODE_UNSUPPORTED"/>
+	</class>
+	<class name="android/app/Instrumentation" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="acquireLooperManager(Landroid/os/Looper;)Landroid/os/TestLooperManager;" since="26"/>
+		<method name="addMonitor(Landroid/app/Instrumentation$ActivityMonitor;)V"/>
+		<method name="addMonitor(Landroid/content/IntentFilter;Landroid/app/Instrumentation$ActivityResult;Z)Landroid/app/Instrumentation$ActivityMonitor;"/>
+		<method name="addMonitor(Ljava/lang/String;Landroid/app/Instrumentation$ActivityResult;Z)Landroid/app/Instrumentation$ActivityMonitor;"/>
+		<method name="addResults(Landroid/os/Bundle;)V" since="26"/>
+		<method name="callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
+		<method name="callActivityOnCreate(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="callActivityOnDestroy(Landroid/app/Activity;)V"/>
+		<method name="callActivityOnNewIntent(Landroid/app/Activity;Landroid/content/Intent;)V"/>
+		<method name="callActivityOnPause(Landroid/app/Activity;)V"/>
+		<method name="callActivityOnPictureInPictureRequested(Landroid/app/Activity;)V" since="30"/>
+		<method name="callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
+		<method name="callActivityOnPostCreate(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="callActivityOnRestart(Landroid/app/Activity;)V"/>
+		<method name="callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
+		<method name="callActivityOnRestoreInstanceState(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="callActivityOnResume(Landroid/app/Activity;)V"/>
+		<method name="callActivityOnSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V"/>
+		<method name="callActivityOnSaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="callActivityOnStart(Landroid/app/Activity;)V"/>
+		<method name="callActivityOnStop(Landroid/app/Activity;)V"/>
+		<method name="callActivityOnUserLeaving(Landroid/app/Activity;)V" since="3"/>
+		<method name="callApplicationOnCreate(Landroid/app/Application;)V"/>
+		<method name="checkMonitorHit(Landroid/app/Instrumentation$ActivityMonitor;I)Z"/>
+		<method name="endPerformanceSnapshot()V"/>
+		<method name="finish(ILandroid/os/Bundle;)V"/>
+		<method name="getAllocCounts()Landroid/os/Bundle;"/>
+		<method name="getBinderCounts()Landroid/os/Bundle;"/>
+		<method name="getComponentName()Landroid/content/ComponentName;"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getProcessName()Ljava/lang/String;" since="26"/>
+		<method name="getTargetContext()Landroid/content/Context;"/>
+		<method name="getUiAutomation()Landroid/app/UiAutomation;" since="18"/>
+		<method name="getUiAutomation(I)Landroid/app/UiAutomation;" since="24"/>
+		<method name="invokeContextMenuAction(Landroid/app/Activity;II)Z"/>
+		<method name="invokeMenuActionSync(Landroid/app/Activity;II)Z"/>
+		<method name="isProfiling()Z"/>
+		<method name="newActivity(Ljava/lang/Class;Landroid/content/Context;Landroid/os/IBinder;Landroid/app/Application;Landroid/content/Intent;Landroid/content/pm/ActivityInfo;Ljava/lang/CharSequence;Landroid/app/Activity;Ljava/lang/String;Ljava/lang/Object;)Landroid/app/Activity;"/>
+		<method name="newActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity;"/>
+		<method name="newApplication(Ljava/lang/Class;Landroid/content/Context;)Landroid/app/Application;"/>
+		<method name="newApplication(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;"/>
+		<method name="onCreate(Landroid/os/Bundle;)V"/>
+		<method name="onDestroy()V"/>
+		<method name="onException(Ljava/lang/Object;Ljava/lang/Throwable;)Z"/>
+		<method name="onStart()V"/>
+		<method name="removeMonitor(Landroid/app/Instrumentation$ActivityMonitor;)V"/>
+		<method name="runOnMainSync(Ljava/lang/Runnable;)V"/>
+		<method name="sendCharacterSync(I)V"/>
+		<method name="sendKeyDownUpSync(I)V"/>
+		<method name="sendKeySync(Landroid/view/KeyEvent;)V"/>
+		<method name="sendPointerSync(Landroid/view/MotionEvent;)V"/>
+		<method name="sendStatus(ILandroid/os/Bundle;)V"/>
+		<method name="sendStringSync(Ljava/lang/String;)V"/>
+		<method name="sendTrackballEventSync(Landroid/view/MotionEvent;)V"/>
+		<method name="setAutomaticPerformanceSnapshots()V"/>
+		<method name="setInTouchMode(Z)V"/>
+		<method name="start()V"/>
+		<method name="startActivitySync(Landroid/content/Intent;)Landroid/app/Activity;"/>
+		<method name="startActivitySync(Landroid/content/Intent;Landroid/os/Bundle;)Landroid/app/Activity;" since="28"/>
+		<method name="startAllocCounting()V" deprecated="23"/>
+		<method name="startPerformanceSnapshot()V"/>
+		<method name="startProfiling()V"/>
+		<method name="stopAllocCounting()V" deprecated="23"/>
+		<method name="stopProfiling()V"/>
+		<method name="waitForIdle(Ljava/lang/Runnable;)V"/>
+		<method name="waitForIdleSync()V"/>
+		<method name="waitForMonitor(Landroid/app/Instrumentation$ActivityMonitor;)Landroid/app/Activity;"/>
+		<method name="waitForMonitorWithTimeout(Landroid/app/Instrumentation$ActivityMonitor;J)Landroid/app/Activity;"/>
+		<field name="REPORT_KEY_IDENTIFIER"/>
+		<field name="REPORT_KEY_STREAMRESULT"/>
+	</class>
+	<class name="android/app/Instrumentation$ActivityMonitor" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="26"/>
+		<method name="&lt;init>(Landroid/content/IntentFilter;Landroid/app/Instrumentation$ActivityResult;Z)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation$ActivityResult;Z)V"/>
+		<method name="getFilter()Landroid/content/IntentFilter;"/>
+		<method name="getHits()I"/>
+		<method name="getLastActivity()Landroid/app/Activity;"/>
+		<method name="getResult()Landroid/app/Instrumentation$ActivityResult;"/>
+		<method name="isBlocking()Z"/>
+		<method name="onStartActivity(Landroid/content/Intent;)Landroid/app/Instrumentation$ActivityResult;" since="26"/>
+		<method name="waitForActivity()Landroid/app/Activity;"/>
+		<method name="waitForActivityWithTimeout(J)Landroid/app/Activity;"/>
+	</class>
+	<class name="android/app/Instrumentation$ActivityResult" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILandroid/content/Intent;)V"/>
+		<method name="getResultCode()I"/>
+		<method name="getResultData()Landroid/content/Intent;"/>
+	</class>
+	<class name="android/app/IntentService" since="3" deprecated="30">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="30"/>
+		<method name="onHandleIntent(Landroid/content/Intent;)V" deprecated="30"/>
+		<method name="setIntentRedelivery(Z)V" since="5" deprecated="30"/>
+	</class>
+	<class name="android/app/KeyguardManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createConfirmDeviceCredentialIntent(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/Intent;" since="21" deprecated="29"/>
+		<method name="exitKeyguardSecurely(Landroid/app/KeyguardManager$OnKeyguardExitResult;)V" deprecated="15"/>
+		<method name="inKeyguardRestrictedInputMode()Z" deprecated="28"/>
+		<method name="isDeviceLocked()Z" since="22"/>
+		<method name="isDeviceSecure()Z" since="23"/>
+		<method name="isKeyguardLocked()Z" since="16"/>
+		<method name="isKeyguardSecure()Z" since="16"/>
+		<method name="newKeyguardLock(Ljava/lang/String;)Landroid/app/KeyguardManager$KeyguardLock;" deprecated="15"/>
+		<method name="requestDismissKeyguard(Landroid/app/Activity;Landroid/app/KeyguardManager$KeyguardDismissCallback;)V" since="26"/>
+	</class>
+	<class name="android/app/KeyguardManager$KeyguardDismissCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDismissCancelled()V"/>
+		<method name="onDismissError()V"/>
+		<method name="onDismissSucceeded()V"/>
+	</class>
+	<class name="android/app/KeyguardManager$KeyguardLock" since="1" deprecated="15">
+		<extends name="java/lang/Object"/>
+		<method name="disableKeyguard()V" deprecated="29"/>
+		<method name="reenableKeyguard()V" deprecated="29"/>
+	</class>
+	<class name="android/app/KeyguardManager$OnKeyguardExitResult" since="1" deprecated="26">
+		<extends name="java/lang/Object"/>
+		<method name="onKeyguardExitResult(Z)V" deprecated="29"/>
+	</class>
+	<class name="android/app/LauncherActivity" since="1" deprecated="30">
+		<extends name="android/app/ListActivity"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="getTargetIntent()Landroid/content/Intent;" deprecated="30"/>
+		<method name="intentForPosition(I)Landroid/content/Intent;" since="3" deprecated="30"/>
+		<method name="itemForPosition(I)Landroid/app/LauncherActivity$ListItem;" since="4" deprecated="30"/>
+		<method name="makeListItems()Ljava/util/List;" since="3" deprecated="30"/>
+		<method name="onQueryPackageManager(Landroid/content/Intent;)Ljava/util/List;" since="5" deprecated="30"/>
+		<method name="onSetContentView()V" since="5" deprecated="30"/>
+	</class>
+	<class name="android/app/LauncherActivity$IconResizer" since="3" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/LauncherActivity;)V" deprecated="30"/>
+		<method name="createIconThumbnail(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;" deprecated="30"/>
+	</class>
+	<class name="android/app/LauncherActivity$ListItem" since="3" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<field name="className" deprecated="30"/>
+		<field name="extras" deprecated="30"/>
+		<field name="icon" deprecated="30"/>
+		<field name="label" deprecated="30"/>
+		<field name="packageName" deprecated="30"/>
+		<field name="resolveInfo" since="4" deprecated="30"/>
+	</class>
+	<class name="android/app/ListActivity" since="1" deprecated="30">
+		<extends name="android/app/Activity"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="getListAdapter()Landroid/widget/ListAdapter;" deprecated="30"/>
+		<method name="getListView()Landroid/widget/ListView;" deprecated="30"/>
+		<method name="getSelectedItemId()J" deprecated="30"/>
+		<method name="getSelectedItemPosition()I" deprecated="30"/>
+		<method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V" deprecated="30"/>
+		<method name="setListAdapter(Landroid/widget/ListAdapter;)V" deprecated="30"/>
+		<method name="setSelection(I)V" deprecated="30"/>
+	</class>
+	<class name="android/app/ListFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getListAdapter()Landroid/widget/ListAdapter;" deprecated="29"/>
+		<method name="getListView()Landroid/widget/ListView;" deprecated="29"/>
+		<method name="getSelectedItemId()J" deprecated="29"/>
+		<method name="getSelectedItemPosition()I" deprecated="29"/>
+		<method name="onListItemClick(Landroid/widget/ListView;Landroid/view/View;IJ)V" deprecated="29"/>
+		<method name="setEmptyText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setListAdapter(Landroid/widget/ListAdapter;)V" deprecated="29"/>
+		<method name="setListShown(Z)V" deprecated="29"/>
+		<method name="setListShownNoAnimation(Z)V" deprecated="29"/>
+		<method name="setSelection(I)V" deprecated="29"/>
+	</class>
+	<class name="android/app/LoaderManager" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="destroyLoader(I)V" deprecated="29"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+		<method name="enableDebugLogging(Z)V" deprecated="29"/>
+		<method name="getLoader(I)Landroid/content/Loader;" deprecated="29"/>
+		<method name="initLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;" deprecated="29"/>
+		<method name="restartLoader(ILandroid/os/Bundle;Landroid/app/LoaderManager$LoaderCallbacks;)Landroid/content/Loader;" deprecated="29"/>
+	</class>
+	<class name="android/app/LoaderManager$LoaderCallbacks" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="onCreateLoader(ILandroid/os/Bundle;)Landroid/content/Loader;" deprecated="29"/>
+		<method name="onLoadFinished(Landroid/content/Loader;Ljava/lang/Object;)V" deprecated="29"/>
+		<method name="onLoaderReset(Landroid/content/Loader;)V" deprecated="29"/>
+	</class>
+	<class name="android/app/LocalActivityManager" since="1" deprecated="13">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/Activity;Z)V" deprecated="29"/>
+		<method name="destroyActivity(Ljava/lang/String;Z)Landroid/view/Window;" deprecated="29"/>
+		<method name="dispatchCreate(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="dispatchDestroy(Z)V" deprecated="29"/>
+		<method name="dispatchPause(Z)V" deprecated="29"/>
+		<method name="dispatchResume()V" deprecated="29"/>
+		<method name="dispatchStop()V" deprecated="29"/>
+		<method name="getActivity(Ljava/lang/String;)Landroid/app/Activity;" deprecated="29"/>
+		<method name="getCurrentActivity()Landroid/app/Activity;" deprecated="29"/>
+		<method name="getCurrentId()Ljava/lang/String;" deprecated="29"/>
+		<method name="removeAllActivities()V" deprecated="29"/>
+		<method name="saveInstanceState()Landroid/os/Bundle;" deprecated="29"/>
+		<method name="startActivity(Ljava/lang/String;Landroid/content/Intent;)Landroid/view/Window;" deprecated="29"/>
+	</class>
+	<class name="android/app/MediaRouteActionProvider" since="16">
+		<extends name="android/view/ActionProvider"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="setExtendedSettingsClickListener(Landroid/view/View$OnClickListener;)V"/>
+		<method name="setRouteTypes(I)V"/>
+	</class>
+	<class name="android/app/MediaRouteButton" since="16">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getRouteTypes()I"/>
+		<method name="setExtendedSettingsClickListener(Landroid/view/View$OnClickListener;)V"/>
+		<method name="setRouteTypes(I)V"/>
+		<method name="showDialog()V"/>
+	</class>
+	<class name="android/app/NativeActivity" since="9">
+		<extends name="android/app/Activity"/>
+		<implements name="android/view/InputQueue$Callback"/>
+		<implements name="android/view/SurfaceHolder$Callback2"/>
+		<implements name="android/view/ViewTreeObserver$OnGlobalLayoutListener"/>
+		<method name="&lt;init>()V"/>
+		<field name="META_DATA_FUNC_NAME"/>
+		<field name="META_DATA_LIB_NAME"/>
+	</class>
+	<class name="android/app/Notification" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(ILjava/lang/CharSequence;J)V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="clone()Landroid/app/Notification;" since="9"/>
+		<method name="findRemoteInputActionPair(Z)Landroid/util/Pair;" since="30"/>
+		<method name="getAllowSystemGeneratedContextualActions()Z" since="29"/>
+		<method name="getBadgeIconType()I" since="26"/>
+		<method name="getBubbleMetadata()Landroid/app/Notification$BubbleMetadata;" since="29"/>
+		<method name="getChannelId()Ljava/lang/String;" since="26"/>
+		<method name="getContextualActions()Ljava/util/List;" since="30"/>
+		<method name="getGroup()Ljava/lang/String;" since="20"/>
+		<method name="getGroupAlertBehavior()I" since="26"/>
+		<method name="getLargeIcon()Landroid/graphics/drawable/Icon;" since="23"/>
+		<method name="getLocusId()Landroid/content/LocusId;" since="29"/>
+		<method name="getSettingsText()Ljava/lang/CharSequence;" since="26"/>
+		<method name="getShortcutId()Ljava/lang/String;" since="26"/>
+		<method name="getSmallIcon()Landroid/graphics/drawable/Icon;" since="23"/>
+		<method name="getSortKey()Ljava/lang/String;" since="20"/>
+		<method name="getTimeoutAfter()J" since="26"/>
+		<method name="hasImage()Z" since="31"/>
+		<method name="setLatestEventInfo(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="15" removed="23"/>
+		<field name="AUDIO_ATTRIBUTES_DEFAULT" since="21"/>
+		<field name="BADGE_ICON_LARGE" since="26"/>
+		<field name="BADGE_ICON_NONE" since="26"/>
+		<field name="BADGE_ICON_SMALL" since="26"/>
+		<field name="CATEGORY_ALARM" since="21"/>
+		<field name="CATEGORY_CALL" since="21"/>
+		<field name="CATEGORY_EMAIL" since="21"/>
+		<field name="CATEGORY_ERROR" since="21"/>
+		<field name="CATEGORY_EVENT" since="21"/>
+		<field name="CATEGORY_LOCATION_SHARING" since="31"/>
+		<field name="CATEGORY_MESSAGE" since="21"/>
+		<field name="CATEGORY_MISSED_CALL" since="31"/>
+		<field name="CATEGORY_NAVIGATION" since="28"/>
+		<field name="CATEGORY_PROGRESS" since="21"/>
+		<field name="CATEGORY_PROMO" since="21"/>
+		<field name="CATEGORY_RECOMMENDATION" since="21"/>
+		<field name="CATEGORY_REMINDER" since="23"/>
+		<field name="CATEGORY_SERVICE" since="21"/>
+		<field name="CATEGORY_SOCIAL" since="21"/>
+		<field name="CATEGORY_STATUS" since="21"/>
+		<field name="CATEGORY_STOPWATCH" since="31"/>
+		<field name="CATEGORY_SYSTEM" since="21"/>
+		<field name="CATEGORY_TRANSPORT" since="21"/>
+		<field name="CATEGORY_WORKOUT" since="31"/>
+		<field name="COLOR_DEFAULT" since="21"/>
+		<field name="CREATOR"/>
+		<field name="DEFAULT_ALL"/>
+		<field name="DEFAULT_LIGHTS"/>
+		<field name="DEFAULT_SOUND"/>
+		<field name="DEFAULT_VIBRATE"/>
+		<field name="EXTRA_ANSWER_COLOR" since="31"/>
+		<field name="EXTRA_ANSWER_INTENT" since="31"/>
+		<field name="EXTRA_AUDIO_CONTENTS_URI" since="26"/>
+		<field name="EXTRA_BACKGROUND_IMAGE_URI" since="21"/>
+		<field name="EXTRA_BIG_TEXT" since="21"/>
+		<field name="EXTRA_CALL_IS_VIDEO" since="31"/>
+		<field name="EXTRA_CALL_PERSON" since="31"/>
+		<field name="EXTRA_CHANNEL_GROUP_ID" since="28"/>
+		<field name="EXTRA_CHANNEL_ID" since="26"/>
+		<field name="EXTRA_CHRONOMETER_COUNT_DOWN" since="24"/>
+		<field name="EXTRA_COLORIZED" since="26"/>
+		<field name="EXTRA_COMPACT_ACTIONS" since="21"/>
+		<field name="EXTRA_CONVERSATION_TITLE" since="24"/>
+		<field name="EXTRA_DECLINE_COLOR" since="31"/>
+		<field name="EXTRA_DECLINE_INTENT" since="31"/>
+		<field name="EXTRA_HANG_UP_INTENT" since="31"/>
+		<field name="EXTRA_HISTORIC_MESSAGES" since="26"/>
+		<field name="EXTRA_INFO_TEXT" since="19"/>
+		<field name="EXTRA_IS_GROUP_CONVERSATION" since="28"/>
+		<field name="EXTRA_LARGE_ICON" since="19" deprecated="26"/>
+		<field name="EXTRA_LARGE_ICON_BIG" since="19"/>
+		<field name="EXTRA_MEDIA_SESSION" since="21"/>
+		<field name="EXTRA_MESSAGES" since="24"/>
+		<field name="EXTRA_MESSAGING_PERSON" since="28"/>
+		<field name="EXTRA_NOTIFICATION_ID" since="26"/>
+		<field name="EXTRA_NOTIFICATION_TAG" since="26"/>
+		<field name="EXTRA_PEOPLE" since="19" deprecated="28"/>
+		<field name="EXTRA_PEOPLE_LIST" since="28"/>
+		<field name="EXTRA_PICTURE" since="19"/>
+		<field name="EXTRA_PICTURE_CONTENT_DESCRIPTION" since="31"/>
+		<field name="EXTRA_PICTURE_ICON" since="31"/>
+		<field name="EXTRA_PROGRESS" since="19"/>
+		<field name="EXTRA_PROGRESS_INDETERMINATE" since="19"/>
+		<field name="EXTRA_PROGRESS_MAX" since="19"/>
+		<field name="EXTRA_REMOTE_INPUT_DRAFT" since="28"/>
+		<field name="EXTRA_REMOTE_INPUT_HISTORY" since="24"/>
+		<field name="EXTRA_SELF_DISPLAY_NAME" since="24" deprecated="28"/>
+		<field name="EXTRA_SHOW_BIG_PICTURE_WHEN_COLLAPSED" since="31"/>
+		<field name="EXTRA_SHOW_CHRONOMETER" since="19"/>
+		<field name="EXTRA_SHOW_WHEN" since="19"/>
+		<field name="EXTRA_SMALL_ICON" since="19" deprecated="26"/>
+		<field name="EXTRA_SUB_TEXT" since="19"/>
+		<field name="EXTRA_SUMMARY_TEXT" since="19"/>
+		<field name="EXTRA_TEMPLATE" since="21"/>
+		<field name="EXTRA_TEXT" since="19"/>
+		<field name="EXTRA_TEXT_LINES" since="19"/>
+		<field name="EXTRA_TITLE" since="19"/>
+		<field name="EXTRA_TITLE_BIG" since="19"/>
+		<field name="EXTRA_VERIFICATION_ICON" since="31"/>
+		<field name="EXTRA_VERIFICATION_TEXT" since="31"/>
+		<field name="FLAG_AUTO_CANCEL"/>
+		<field name="FLAG_BUBBLE" since="29"/>
+		<field name="FLAG_FOREGROUND_SERVICE" since="5"/>
+		<field name="FLAG_GROUP_SUMMARY" since="20"/>
+		<field name="FLAG_HIGH_PRIORITY" since="11" deprecated="16"/>
+		<field name="FLAG_INSISTENT"/>
+		<field name="FLAG_LOCAL_ONLY" since="20"/>
+		<field name="FLAG_NO_CLEAR"/>
+		<field name="FLAG_ONGOING_EVENT"/>
+		<field name="FLAG_ONLY_ALERT_ONCE"/>
+		<field name="FLAG_SHOW_LIGHTS" deprecated="26"/>
+		<field name="FOREGROUND_SERVICE_DEFAULT" since="31"/>
+		<field name="FOREGROUND_SERVICE_DEFERRED" since="31"/>
+		<field name="FOREGROUND_SERVICE_IMMEDIATE" since="31"/>
+		<field name="GROUP_ALERT_ALL" since="26"/>
+		<field name="GROUP_ALERT_CHILDREN" since="26"/>
+		<field name="GROUP_ALERT_SUMMARY" since="26"/>
+		<field name="INTENT_CATEGORY_NOTIFICATION_PREFERENCES" since="21"/>
+		<field name="PRIORITY_DEFAULT" since="16" deprecated="26"/>
+		<field name="PRIORITY_HIGH" since="16" deprecated="26"/>
+		<field name="PRIORITY_LOW" since="16" deprecated="26"/>
+		<field name="PRIORITY_MAX" since="16" deprecated="26"/>
+		<field name="PRIORITY_MIN" since="16" deprecated="26"/>
+		<field name="STREAM_DEFAULT" deprecated="21"/>
+		<field name="VISIBILITY_PRIVATE" since="21"/>
+		<field name="VISIBILITY_PUBLIC" since="21"/>
+		<field name="VISIBILITY_SECRET" since="21"/>
+		<field name="actions" since="19"/>
+		<field name="audioAttributes" since="21" deprecated="26"/>
+		<field name="audioStreamType" deprecated="21"/>
+		<field name="bigContentView" since="16" deprecated="24"/>
+		<field name="category" since="21"/>
+		<field name="color" since="21"/>
+		<field name="contentIntent"/>
+		<field name="contentView" deprecated="24"/>
+		<field name="defaults" deprecated="26"/>
+		<field name="deleteIntent"/>
+		<field name="extras" since="19"/>
+		<field name="flags"/>
+		<field name="fullScreenIntent" since="9"/>
+		<field name="headsUpContentView" since="21" deprecated="24"/>
+		<field name="icon" deprecated="23"/>
+		<field name="iconLevel"/>
+		<field name="largeIcon" since="11" deprecated="23"/>
+		<field name="ledARGB" deprecated="26"/>
+		<field name="ledOffMS" deprecated="26"/>
+		<field name="ledOnMS" deprecated="26"/>
+		<field name="number" deprecated="24"/>
+		<field name="priority" since="16" deprecated="26"/>
+		<field name="publicVersion" since="21"/>
+		<field name="sound" deprecated="26"/>
+		<field name="tickerText"/>
+		<field name="tickerView" since="11" deprecated="21"/>
+		<field name="vibrate" deprecated="26"/>
+		<field name="visibility" since="21"/>
+		<field name="when"/>
+	</class>
+	<class name="android/app/Notification$Action" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="23"/>
+		<method name="clone()Landroid/app/Notification$Action;"/>
+		<method name="getAllowGeneratedReplies()Z" since="24"/>
+		<method name="getDataOnlyRemoteInputs()[Landroid/app/RemoteInput;" since="26"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="20"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" since="23"/>
+		<method name="getRemoteInputs()[Landroid/app/RemoteInput;" since="20"/>
+		<method name="getSemanticAction()I" since="28"/>
+		<method name="isAuthenticationRequired()Z" since="31"/>
+		<method name="isContextual()Z" since="29"/>
+		<field name="CREATOR"/>
+		<field name="SEMANTIC_ACTION_ARCHIVE" since="28"/>
+		<field name="SEMANTIC_ACTION_CALL" since="28"/>
+		<field name="SEMANTIC_ACTION_DELETE" since="28"/>
+		<field name="SEMANTIC_ACTION_MARK_AS_READ" since="28"/>
+		<field name="SEMANTIC_ACTION_MARK_AS_UNREAD" since="28"/>
+		<field name="SEMANTIC_ACTION_MUTE" since="28"/>
+		<field name="SEMANTIC_ACTION_NONE" since="28"/>
+		<field name="SEMANTIC_ACTION_REPLY" since="28"/>
+		<field name="SEMANTIC_ACTION_THUMBS_DOWN" since="28"/>
+		<field name="SEMANTIC_ACTION_THUMBS_UP" since="28"/>
+		<field name="SEMANTIC_ACTION_UNMUTE" since="28"/>
+		<field name="actionIntent"/>
+		<field name="icon" deprecated="23"/>
+		<field name="title"/>
+	</class>
+	<class name="android/app/Notification$Action$Builder" since="20">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)V" deprecated="23"/>
+		<method name="&lt;init>(Landroid/app/Notification$Action;)V"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V" since="23"/>
+		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Action$Builder;"/>
+		<method name="addRemoteInput(Landroid/app/RemoteInput;)Landroid/app/Notification$Action$Builder;"/>
+		<method name="build()Landroid/app/Notification$Action;"/>
+		<method name="extend(Landroid/app/Notification$Action$Extender;)Landroid/app/Notification$Action$Builder;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="setAllowGeneratedReplies(Z)Landroid/app/Notification$Action$Builder;" since="24"/>
+		<method name="setAuthenticationRequired(Z)Landroid/app/Notification$Action$Builder;" since="31"/>
+		<method name="setContextual(Z)Landroid/app/Notification$Action$Builder;" since="29"/>
+		<method name="setSemanticAction(I)Landroid/app/Notification$Action$Builder;" since="28"/>
+	</class>
+	<class name="android/app/Notification$Action$Extender" since="20">
+		<extends name="java/lang/Object"/>
+		<method name="extend(Landroid/app/Notification$Action$Builder;)Landroid/app/Notification$Action$Builder;"/>
+	</class>
+	<class name="android/app/Notification$Action$WearableExtender" since="20">
+		<extends name="java/lang/Object"/>
+		<implements name="android/app/Notification$Action$Extender"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/Notification$Action;)V"/>
+		<method name="clone()Landroid/app/Notification$Action$WearableExtender;"/>
+		<method name="getCancelLabel()Ljava/lang/CharSequence;" since="22" deprecated="28"/>
+		<method name="getConfirmLabel()Ljava/lang/CharSequence;" since="22" deprecated="28"/>
+		<method name="getHintDisplayActionInline()Z" since="25"/>
+		<method name="getHintLaunchesActivity()Z" since="24"/>
+		<method name="getInProgressLabel()Ljava/lang/CharSequence;" since="22" deprecated="28"/>
+		<method name="isAvailableOffline()Z"/>
+		<method name="setAvailableOffline(Z)Landroid/app/Notification$Action$WearableExtender;"/>
+		<method name="setCancelLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28"/>
+		<method name="setConfirmLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28"/>
+		<method name="setHintDisplayActionInline(Z)Landroid/app/Notification$Action$WearableExtender;" since="25"/>
+		<method name="setHintLaunchesActivity(Z)Landroid/app/Notification$Action$WearableExtender;" since="24"/>
+		<method name="setInProgressLabel(Ljava/lang/CharSequence;)Landroid/app/Notification$Action$WearableExtender;" since="22" deprecated="28"/>
+	</class>
+	<class name="android/app/Notification$BigPictureStyle" since="16">
+		<extends name="android/app/Notification$Style"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
+		<method name="bigLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$BigPictureStyle;"/>
+		<method name="bigLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BigPictureStyle;" since="23"/>
+		<method name="bigPicture(Landroid/graphics/Bitmap;)Landroid/app/Notification$BigPictureStyle;"/>
+		<method name="bigPicture(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BigPictureStyle;" since="31"/>
+		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;" since="31"/>
+		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigPictureStyle;"/>
+		<method name="showBigPictureWhenCollapsed(Z)Landroid/app/Notification$BigPictureStyle;" since="31"/>
+	</class>
+	<class name="android/app/Notification$BigTextStyle" since="16">
+		<extends name="android/app/Notification$Style"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
+		<method name="bigText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
+		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
+		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$BigTextStyle;"/>
+	</class>
+	<class name="android/app/Notification$BubbleMetadata" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAutoExpandBubble()Z"/>
+		<method name="getDeleteIntent()Landroid/app/PendingIntent;"/>
+		<method name="getDesiredHeight()I"/>
+		<method name="getDesiredHeightResId()I"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getIntent()Landroid/app/PendingIntent;"/>
+		<method name="getShortcutId()Ljava/lang/String;" since="30"/>
+		<method name="isBubbleSuppressable()Z" since="31"/>
+		<method name="isBubbleSuppressed()Z" since="31"/>
+		<method name="isNotificationSuppressed()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/Notification$BubbleMetadata$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/app/PendingIntent;Landroid/graphics/drawable/Icon;)V" since="30"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="30"/>
+		<method name="build()Landroid/app/Notification$BubbleMetadata;"/>
+		<method name="setAutoExpandBubble(Z)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+		<method name="setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+		<method name="setDesiredHeight(I)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+		<method name="setDesiredHeightResId(I)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+		<method name="setIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+		<method name="setSuppressNotification(Z)Landroid/app/Notification$BubbleMetadata$Builder;"/>
+		<method name="setSuppressableBubble(Z)Landroid/app/Notification$BubbleMetadata$Builder;" since="31"/>
+	</class>
+	<class name="android/app/Notification$Builder" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="26"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V" since="26"/>
+		<method name="addAction(ILjava/lang/CharSequence;Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;" since="16" deprecated="23"/>
+		<method name="addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;" since="20"/>
+		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;" since="20"/>
+		<method name="addPerson(Landroid/app/Person;)Landroid/app/Notification$Builder;" since="28"/>
+		<method name="addPerson(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="21" deprecated="28"/>
+		<method name="build()Landroid/app/Notification;" since="16"/>
+		<method name="createBigContentView()Landroid/widget/RemoteViews;" since="24"/>
+		<method name="createContentView()Landroid/widget/RemoteViews;" since="24"/>
+		<method name="createHeadsUpContentView()Landroid/widget/RemoteViews;" since="24"/>
+		<method name="extend(Landroid/app/Notification$Extender;)Landroid/app/Notification$Builder;" since="20"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="20"/>
+		<method name="getNotification()Landroid/app/Notification;" deprecated="16"/>
+		<method name="getStyle()Landroid/app/Notification$Style;" since="28"/>
+		<method name="recoverBuilder(Landroid/content/Context;Landroid/app/Notification;)Landroid/app/Notification$Builder;" since="24"/>
+		<method name="setActions([Landroid/app/Notification$Action;)Landroid/app/Notification$Builder;" since="24"/>
+		<method name="setAllowSystemGeneratedContextualActions(Z)Landroid/app/Notification$Builder;" since="29"/>
+		<method name="setAutoCancel(Z)Landroid/app/Notification$Builder;"/>
+		<method name="setBadgeIconType(I)Landroid/app/Notification$Builder;" since="26"/>
+		<method name="setBubbleMetadata(Landroid/app/Notification$BubbleMetadata;)Landroid/app/Notification$Builder;" since="29"/>
+		<method name="setCategory(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="21"/>
+		<method name="setChannelId(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="26"/>
+		<method name="setChronometerCountDown(Z)Landroid/app/Notification$Builder;" since="24"/>
+		<method name="setColor(I)Landroid/app/Notification$Builder;" since="21"/>
+		<method name="setColorized(Z)Landroid/app/Notification$Builder;" since="26"/>
+		<method name="setContent(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" deprecated="24"/>
+		<method name="setContentInfo(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" deprecated="24"/>
+		<method name="setContentIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;"/>
+		<method name="setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;"/>
+		<method name="setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;"/>
+		<method name="setCustomBigContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24"/>
+		<method name="setCustomContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24"/>
+		<method name="setCustomHeadsUpContentView(Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" since="24"/>
+		<method name="setDefaults(I)Landroid/app/Notification$Builder;" deprecated="26"/>
+		<method name="setDeleteIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/app/Notification$Builder;" since="19"/>
+		<method name="setFlag(IZ)Landroid/app/Notification$Builder;" since="30"/>
+		<method name="setForegroundServiceBehavior(I)Landroid/app/Notification$Builder;" since="31"/>
+		<method name="setFullScreenIntent(Landroid/app/PendingIntent;Z)Landroid/app/Notification$Builder;"/>
+		<method name="setGroup(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="20"/>
+		<method name="setGroupAlertBehavior(I)Landroid/app/Notification$Builder;" since="26"/>
+		<method name="setGroupSummary(Z)Landroid/app/Notification$Builder;" since="20"/>
+		<method name="setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$Builder;"/>
+		<method name="setLargeIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;" since="23"/>
+		<method name="setLights(III)Landroid/app/Notification$Builder;" deprecated="26"/>
+		<method name="setLocalOnly(Z)Landroid/app/Notification$Builder;" since="20"/>
+		<method name="setLocusId(Landroid/content/LocusId;)Landroid/app/Notification$Builder;" since="29"/>
+		<method name="setNumber(I)Landroid/app/Notification$Builder;" deprecated="24"/>
+		<method name="setOngoing(Z)Landroid/app/Notification$Builder;"/>
+		<method name="setOnlyAlertOnce(Z)Landroid/app/Notification$Builder;"/>
+		<method name="setPriority(I)Landroid/app/Notification$Builder;" since="16" deprecated="26"/>
+		<method name="setProgress(IIZ)Landroid/app/Notification$Builder;" since="14"/>
+		<method name="setPublicVersion(Landroid/app/Notification;)Landroid/app/Notification$Builder;" since="21"/>
+		<method name="setRemoteInputHistory([Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="24"/>
+		<method name="setSettingsText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="26"/>
+		<method name="setShortcutId(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="26"/>
+		<method name="setShowWhen(Z)Landroid/app/Notification$Builder;" since="17"/>
+		<method name="setSmallIcon(I)Landroid/app/Notification$Builder;"/>
+		<method name="setSmallIcon(II)Landroid/app/Notification$Builder;"/>
+		<method name="setSmallIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$Builder;" since="23"/>
+		<method name="setSortKey(Ljava/lang/String;)Landroid/app/Notification$Builder;" since="20"/>
+		<method name="setSound(Landroid/net/Uri;)Landroid/app/Notification$Builder;" deprecated="26"/>
+		<method name="setSound(Landroid/net/Uri;I)Landroid/app/Notification$Builder;" deprecated="21"/>
+		<method name="setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)Landroid/app/Notification$Builder;" since="21" deprecated="26"/>
+		<method name="setStyle(Landroid/app/Notification$Style;)Landroid/app/Notification$Builder;" since="16"/>
+		<method name="setSubText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;" since="16"/>
+		<method name="setTicker(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;"/>
+		<method name="setTicker(Ljava/lang/CharSequence;Landroid/widget/RemoteViews;)Landroid/app/Notification$Builder;" deprecated="21"/>
+		<method name="setTimeoutAfter(J)Landroid/app/Notification$Builder;" since="26"/>
+		<method name="setUsesChronometer(Z)Landroid/app/Notification$Builder;" since="16"/>
+		<method name="setVibrate([J)Landroid/app/Notification$Builder;" deprecated="26"/>
+		<method name="setVisibility(I)Landroid/app/Notification$Builder;" since="21"/>
+		<method name="setWhen(J)Landroid/app/Notification$Builder;"/>
+	</class>
+	<class name="android/app/Notification$CallStyle" since="31">
+		<extends name="android/app/Notification$Style"/>
+		<method name="forIncomingCall(Landroid/app/Person;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)Landroid/app/Notification$CallStyle;"/>
+		<method name="forOngoingCall(Landroid/app/Person;Landroid/app/PendingIntent;)Landroid/app/Notification$CallStyle;"/>
+		<method name="forScreeningCall(Landroid/app/Person;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)Landroid/app/Notification$CallStyle;"/>
+		<method name="setAnswerButtonColorHint(I)Landroid/app/Notification$CallStyle;"/>
+		<method name="setDeclineButtonColorHint(I)Landroid/app/Notification$CallStyle;"/>
+		<method name="setIsVideo(Z)Landroid/app/Notification$CallStyle;"/>
+		<method name="setVerificationIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Notification$CallStyle;"/>
+		<method name="setVerificationText(Ljava/lang/CharSequence;)Landroid/app/Notification$CallStyle;"/>
+	</class>
+	<class name="android/app/Notification$CarExtender" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/app/Notification$Extender"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/Notification;)V"/>
+		<method name="getColor()I"/>
+		<method name="getLargeIcon()Landroid/graphics/Bitmap;"/>
+		<method name="getUnreadConversation()Landroid/app/Notification$CarExtender$UnreadConversation;"/>
+		<method name="setColor(I)Landroid/app/Notification$CarExtender;"/>
+		<method name="setLargeIcon(Landroid/graphics/Bitmap;)Landroid/app/Notification$CarExtender;"/>
+		<method name="setUnreadConversation(Landroid/app/Notification$CarExtender$UnreadConversation;)Landroid/app/Notification$CarExtender;"/>
+	</class>
+	<class name="android/app/Notification$CarExtender$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="addMessage(Ljava/lang/String;)Landroid/app/Notification$CarExtender$Builder;"/>
+		<method name="build()Landroid/app/Notification$CarExtender$UnreadConversation;"/>
+		<method name="setLatestTimestamp(J)Landroid/app/Notification$CarExtender$Builder;"/>
+		<method name="setReadPendingIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$CarExtender$Builder;"/>
+		<method name="setReplyAction(Landroid/app/PendingIntent;Landroid/app/RemoteInput;)Landroid/app/Notification$CarExtender$Builder;"/>
+	</class>
+	<class name="android/app/Notification$CarExtender$UnreadConversation" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getLatestTimestamp()J"/>
+		<method name="getMessages()[Ljava/lang/String;"/>
+		<method name="getParticipant()Ljava/lang/String;"/>
+		<method name="getParticipants()[Ljava/lang/String;"/>
+		<method name="getReadPendingIntent()Landroid/app/PendingIntent;"/>
+		<method name="getRemoteInput()Landroid/app/RemoteInput;"/>
+		<method name="getReplyPendingIntent()Landroid/app/PendingIntent;"/>
+	</class>
+	<class name="android/app/Notification$DecoratedCustomViewStyle" since="24">
+		<extends name="android/app/Notification$Style"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/app/Notification$DecoratedMediaCustomViewStyle" since="24">
+		<extends name="android/app/Notification$MediaStyle"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/app/Notification$Extender" since="20">
+		<extends name="java/lang/Object"/>
+		<method name="extend(Landroid/app/Notification$Builder;)Landroid/app/Notification$Builder;"/>
+	</class>
+	<class name="android/app/Notification$InboxStyle" since="16">
+		<extends name="android/app/Notification$Style"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
+		<method name="addLine(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;"/>
+		<method name="setBigContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;"/>
+		<method name="setSummaryText(Ljava/lang/CharSequence;)Landroid/app/Notification$InboxStyle;"/>
+	</class>
+	<class name="android/app/Notification$MediaStyle" since="21">
+		<extends name="android/app/Notification$Style"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/Notification$Builder;)V" deprecated="24"/>
+		<method name="setMediaSession(Landroid/media/session/MediaSession$Token;)Landroid/app/Notification$MediaStyle;"/>
+		<method name="setShowActionsInCompactView([I)Landroid/app/Notification$MediaStyle;"/>
+	</class>
+	<class name="android/app/Notification$MessagingStyle" since="24">
+		<extends name="android/app/Notification$Style"/>
+		<method name="&lt;init>(Landroid/app/Person;)V" since="28"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V" deprecated="28"/>
+		<method name="addHistoricMessage(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Notification$MessagingStyle;" since="26"/>
+		<method name="addMessage(Landroid/app/Notification$MessagingStyle$Message;)Landroid/app/Notification$MessagingStyle;"/>
+		<method name="addMessage(Ljava/lang/CharSequence;JLandroid/app/Person;)Landroid/app/Notification$MessagingStyle;" since="28"/>
+		<method name="addMessage(Ljava/lang/CharSequence;JLjava/lang/CharSequence;)Landroid/app/Notification$MessagingStyle;" deprecated="28"/>
+		<method name="getConversationTitle()Ljava/lang/CharSequence;"/>
+		<method name="getHistoricMessages()Ljava/util/List;" since="26"/>
+		<method name="getMessages()Ljava/util/List;"/>
+		<method name="getUser()Landroid/app/Person;" since="28"/>
+		<method name="getUserDisplayName()Ljava/lang/CharSequence;" deprecated="28"/>
+		<method name="isGroupConversation()Z" since="28"/>
+		<method name="setConversationTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$MessagingStyle;"/>
+		<method name="setGroupConversation(Z)Landroid/app/Notification$MessagingStyle;" since="28"/>
+		<field name="MAXIMUM_RETAINED_MESSAGES"/>
+	</class>
+	<class name="android/app/Notification$MessagingStyle$Message" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;JLandroid/app/Person;)V" since="28"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;JLjava/lang/CharSequence;)V" deprecated="28"/>
+		<method name="getDataMimeType()Ljava/lang/String;"/>
+		<method name="getDataUri()Landroid/net/Uri;"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="26"/>
+		<method name="getMessagesFromBundleArray([Landroid/os/Parcelable;)Ljava/util/List;" since="30"/>
+		<method name="getSender()Ljava/lang/CharSequence;" deprecated="28"/>
+		<method name="getSenderPerson()Landroid/app/Person;" since="28"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTimestamp()J"/>
+		<method name="setData(Ljava/lang/String;Landroid/net/Uri;)Landroid/app/Notification$MessagingStyle$Message;"/>
+	</class>
+	<class name="android/app/Notification$Style" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/app/Notification;"/>
+		<method name="checkBuilder()V"/>
+		<method name="getStandardView(I)Landroid/widget/RemoteViews;"/>
+		<method name="internalSetBigContentTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="internalSetSummaryText(Ljava/lang/CharSequence;)V"/>
+		<method name="setBuilder(Landroid/app/Notification$Builder;)V"/>
+		<field name="mBuilder"/>
+	</class>
+	<class name="android/app/Notification$WearableExtender" since="20">
+		<extends name="java/lang/Object"/>
+		<implements name="android/app/Notification$Extender"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/Notification;)V"/>
+		<method name="addAction(Landroid/app/Notification$Action;)Landroid/app/Notification$WearableExtender;"/>
+		<method name="addActions(Ljava/util/List;)Landroid/app/Notification$WearableExtender;"/>
+		<method name="addPage(Landroid/app/Notification;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
+		<method name="addPages(Ljava/util/List;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
+		<method name="clearActions()Landroid/app/Notification$WearableExtender;"/>
+		<method name="clearPages()Landroid/app/Notification$WearableExtender;" deprecated="29"/>
+		<method name="clone()Landroid/app/Notification$WearableExtender;"/>
+		<method name="getActions()Ljava/util/List;"/>
+		<method name="getBackground()Landroid/graphics/Bitmap;" deprecated="29"/>
+		<method name="getBridgeTag()Ljava/lang/String;" since="26"/>
+		<method name="getContentAction()I"/>
+		<method name="getContentIcon()I" deprecated="28"/>
+		<method name="getContentIconGravity()I" deprecated="28"/>
+		<method name="getContentIntentAvailableOffline()Z"/>
+		<method name="getCustomContentHeight()I" deprecated="28"/>
+		<method name="getCustomSizePreset()I" deprecated="28"/>
+		<method name="getDismissalId()Ljava/lang/String;" since="24"/>
+		<method name="getDisplayIntent()Landroid/app/PendingIntent;" deprecated="29"/>
+		<method name="getGravity()I" deprecated="28"/>
+		<method name="getHintAmbientBigPicture()Z" since="24" deprecated="29"/>
+		<method name="getHintAvoidBackgroundClipping()Z" since="22" deprecated="28"/>
+		<method name="getHintContentIntentLaunchesActivity()Z" since="24"/>
+		<method name="getHintHideIcon()Z" deprecated="28"/>
+		<method name="getHintScreenTimeout()I" since="22" deprecated="28"/>
+		<method name="getHintShowBackgroundOnly()Z" deprecated="28"/>
+		<method name="getPages()Ljava/util/List;" deprecated="29"/>
+		<method name="getStartScrollBottom()Z"/>
+		<method name="setBackground(Landroid/graphics/Bitmap;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
+		<method name="setBridgeTag(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="26"/>
+		<method name="setContentAction(I)Landroid/app/Notification$WearableExtender;"/>
+		<method name="setContentIcon(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
+		<method name="setContentIconGravity(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
+		<method name="setContentIntentAvailableOffline(Z)Landroid/app/Notification$WearableExtender;"/>
+		<method name="setCustomContentHeight(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
+		<method name="setCustomSizePreset(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
+		<method name="setDismissalId(Ljava/lang/String;)Landroid/app/Notification$WearableExtender;" since="24"/>
+		<method name="setDisplayIntent(Landroid/app/PendingIntent;)Landroid/app/Notification$WearableExtender;" deprecated="29"/>
+		<method name="setGravity(I)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
+		<method name="setHintAmbientBigPicture(Z)Landroid/app/Notification$WearableExtender;" since="24" deprecated="29"/>
+		<method name="setHintAvoidBackgroundClipping(Z)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28"/>
+		<method name="setHintContentIntentLaunchesActivity(Z)Landroid/app/Notification$WearableExtender;" since="24"/>
+		<method name="setHintHideIcon(Z)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
+		<method name="setHintScreenTimeout(I)Landroid/app/Notification$WearableExtender;" since="22" deprecated="28"/>
+		<method name="setHintShowBackgroundOnly(Z)Landroid/app/Notification$WearableExtender;" deprecated="28"/>
+		<method name="setStartScrollBottom(Z)Landroid/app/Notification$WearableExtender;"/>
+		<field name="SCREEN_TIMEOUT_LONG" since="22" deprecated="29"/>
+		<field name="SCREEN_TIMEOUT_SHORT" since="22" deprecated="29"/>
+		<field name="SIZE_DEFAULT" deprecated="29"/>
+		<field name="SIZE_FULL_SCREEN" deprecated="29"/>
+		<field name="SIZE_LARGE" deprecated="29"/>
+		<field name="SIZE_MEDIUM" deprecated="29"/>
+		<field name="SIZE_SMALL" deprecated="29"/>
+		<field name="SIZE_XSMALL" deprecated="29"/>
+		<field name="UNSET_ACTION_INDEX"/>
+	</class>
+	<class name="android/app/NotificationChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
+		<method name="canBubble()Z" since="29"/>
+		<method name="canBypassDnd()Z"/>
+		<method name="canShowBadge()Z"/>
+		<method name="enableLights(Z)V"/>
+		<method name="enableVibration(Z)V"/>
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
+		<method name="getConversationId()Ljava/lang/String;" since="30"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getGroup()Ljava/lang/String;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getImportance()I"/>
+		<method name="getLightColor()I"/>
+		<method name="getLockscreenVisibility()I"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="getParentChannelId()Ljava/lang/String;" since="30"/>
+		<method name="getSound()Landroid/net/Uri;"/>
+		<method name="getVibrationPattern()[J"/>
+		<method name="hasUserSetImportance()Z" since="29"/>
+		<method name="hasUserSetSound()Z" since="30"/>
+		<method name="isConversation()Z" since="31"/>
+		<method name="isDemoted()Z" since="31"/>
+		<method name="isImportantConversation()Z" since="30"/>
+		<method name="setAllowBubbles(Z)V" since="29"/>
+		<method name="setBypassDnd(Z)V"/>
+		<method name="setConversationId(Ljava/lang/String;Ljava/lang/String;)V" since="30"/>
+		<method name="setDescription(Ljava/lang/String;)V"/>
+		<method name="setGroup(Ljava/lang/String;)V"/>
+		<method name="setImportance(I)V"/>
+		<method name="setLightColor(I)V"/>
+		<method name="setLockscreenVisibility(I)V"/>
+		<method name="setName(Ljava/lang/CharSequence;)V"/>
+		<method name="setShowBadge(Z)V"/>
+		<method name="setSound(Landroid/net/Uri;Landroid/media/AudioAttributes;)V"/>
+		<method name="setVibrationPattern([J)V"/>
+		<method name="shouldShowLights()Z"/>
+		<method name="shouldVibrate()Z"/>
+		<field name="CREATOR"/>
+		<field name="DEFAULT_CHANNEL_ID"/>
+		<field name="EDIT_CONVERSATION" since="31"/>
+		<field name="EDIT_IMPORTANCE" since="31"/>
+		<field name="EDIT_LAUNCHER" since="31"/>
+		<field name="EDIT_LOCKED_DEVICE" since="31"/>
+		<field name="EDIT_SOUND" since="31"/>
+		<field name="EDIT_VIBRATION" since="31"/>
+		<field name="EDIT_ZEN" since="31"/>
+	</class>
+	<class name="android/app/NotificationChannelGroup" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;)V"/>
+		<method name="clone()Landroid/app/NotificationChannelGroup;"/>
+		<method name="getChannels()Ljava/util/List;"/>
+		<method name="getDescription()Ljava/lang/String;" since="28"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="isBlocked()Z" since="28"/>
+		<method name="setDescription(Ljava/lang/String;)V" since="28"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/NotificationManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addAutomaticZenRule(Landroid/app/AutomaticZenRule;)Ljava/lang/String;" since="24"/>
+		<method name="areBubblesAllowed()Z" since="29" deprecated="31"/>
+		<method name="areBubblesEnabled()Z" since="31"/>
+		<method name="areNotificationsEnabled()Z" since="24"/>
+		<method name="areNotificationsPaused()Z" since="29"/>
+		<method name="canNotifyAsPackage(Ljava/lang/String;)Z" since="29"/>
+		<method name="cancel(I)V"/>
+		<method name="cancel(Ljava/lang/String;I)V" since="5"/>
+		<method name="cancelAll()V"/>
+		<method name="cancelAsPackage(Ljava/lang/String;Ljava/lang/String;I)V" since="30"/>
+		<method name="createNotificationChannel(Landroid/app/NotificationChannel;)V" since="26"/>
+		<method name="createNotificationChannelGroup(Landroid/app/NotificationChannelGroup;)V" since="26"/>
+		<method name="createNotificationChannelGroups(Ljava/util/List;)V" since="26"/>
+		<method name="createNotificationChannels(Ljava/util/List;)V" since="26"/>
+		<method name="deleteNotificationChannel(Ljava/lang/String;)V" since="26"/>
+		<method name="deleteNotificationChannelGroup(Ljava/lang/String;)V" since="26"/>
+		<method name="getActiveNotifications()[Landroid/service/notification/StatusBarNotification;" since="23"/>
+		<method name="getAutomaticZenRule(Ljava/lang/String;)Landroid/app/AutomaticZenRule;" since="24"/>
+		<method name="getAutomaticZenRules()Ljava/util/Map;" since="24"/>
+		<method name="getBubblePreference()I" since="31"/>
+		<method name="getConsolidatedNotificationPolicy()Landroid/app/NotificationManager$Policy;" since="30"/>
+		<method name="getCurrentInterruptionFilter()I" since="23"/>
+		<method name="getImportance()I" since="24"/>
+		<method name="getNotificationChannel(Ljava/lang/String;)Landroid/app/NotificationChannel;" since="26"/>
+		<method name="getNotificationChannel(Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel;" since="30"/>
+		<method name="getNotificationChannelGroup(Ljava/lang/String;)Landroid/app/NotificationChannelGroup;" since="28"/>
+		<method name="getNotificationChannelGroups()Ljava/util/List;" since="26"/>
+		<method name="getNotificationChannels()Ljava/util/List;" since="26"/>
+		<method name="getNotificationDelegate()Ljava/lang/String;" since="29"/>
+		<method name="getNotificationPolicy()Landroid/app/NotificationManager$Policy;" since="23"/>
+		<method name="isNotificationListenerAccessGranted(Landroid/content/ComponentName;)Z" since="27"/>
+		<method name="isNotificationPolicyAccessGranted()Z" since="23"/>
+		<method name="notify(ILandroid/app/Notification;)V"/>
+		<method name="notify(Ljava/lang/String;ILandroid/app/Notification;)V" since="5"/>
+		<method name="notifyAsPackage(Ljava/lang/String;Ljava/lang/String;ILandroid/app/Notification;)V" since="29"/>
+		<method name="removeAutomaticZenRule(Ljava/lang/String;)Z" since="24"/>
+		<method name="setAutomaticZenRuleState(Ljava/lang/String;Landroid/service/notification/Condition;)V" since="29"/>
+		<method name="setInterruptionFilter(I)V" since="23"/>
+		<method name="setNotificationDelegate(Ljava/lang/String;)V" since="29"/>
+		<method name="setNotificationPolicy(Landroid/app/NotificationManager$Policy;)V" since="23"/>
+		<method name="shouldHideSilentStatusBarIcons()Z" since="29"/>
+		<method name="updateAutomaticZenRule(Ljava/lang/String;Landroid/app/AutomaticZenRule;)Z" since="24"/>
+		<field name="ACTION_APP_BLOCK_STATE_CHANGED" since="28"/>
+		<field name="ACTION_AUTOMATIC_ZEN_RULE" since="29"/>
+		<field name="ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED" since="30"/>
+		<field name="ACTION_INTERRUPTION_FILTER_CHANGED" since="23"/>
+		<field name="ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED" since="28"/>
+		<field name="ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED" since="28"/>
+		<field name="ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED" since="23"/>
+		<field name="ACTION_NOTIFICATION_POLICY_CHANGED" since="23"/>
+		<field name="AUTOMATIC_RULE_STATUS_DISABLED" since="30"/>
+		<field name="AUTOMATIC_RULE_STATUS_ENABLED" since="30"/>
+		<field name="AUTOMATIC_RULE_STATUS_REMOVED" since="30"/>
+		<field name="AUTOMATIC_RULE_STATUS_UNKNOWN" since="30"/>
+		<field name="BUBBLE_PREFERENCE_ALL" since="31"/>
+		<field name="BUBBLE_PREFERENCE_NONE" since="31"/>
+		<field name="BUBBLE_PREFERENCE_SELECTED" since="31"/>
+		<field name="EXTRA_AUTOMATIC_RULE_ID" since="29"/>
+		<field name="EXTRA_AUTOMATIC_ZEN_RULE_ID" since="30"/>
+		<field name="EXTRA_AUTOMATIC_ZEN_RULE_STATUS" since="30"/>
+		<field name="EXTRA_BLOCKED_STATE" since="28"/>
+		<field name="EXTRA_NOTIFICATION_CHANNEL_GROUP_ID" since="28"/>
+		<field name="EXTRA_NOTIFICATION_CHANNEL_ID" since="28"/>
+		<field name="IMPORTANCE_DEFAULT" since="24"/>
+		<field name="IMPORTANCE_HIGH" since="24"/>
+		<field name="IMPORTANCE_LOW" since="24"/>
+		<field name="IMPORTANCE_MAX" since="24"/>
+		<field name="IMPORTANCE_MIN" since="24"/>
+		<field name="IMPORTANCE_NONE" since="24"/>
+		<field name="IMPORTANCE_UNSPECIFIED" since="24"/>
+		<field name="INTERRUPTION_FILTER_ALARMS" since="23"/>
+		<field name="INTERRUPTION_FILTER_ALL" since="23"/>
+		<field name="INTERRUPTION_FILTER_NONE" since="23"/>
+		<field name="INTERRUPTION_FILTER_PRIORITY" since="23"/>
+		<field name="INTERRUPTION_FILTER_UNKNOWN" since="23"/>
+		<field name="META_DATA_AUTOMATIC_RULE_TYPE" since="29"/>
+		<field name="META_DATA_RULE_INSTANCE_LIMIT" since="29"/>
+	</class>
+	<class name="android/app/NotificationManager$Policy" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIII)V" since="24"/>
+		<method name="&lt;init>(IIIII)V" since="30"/>
+		<method name="priorityCategoriesToString(I)Ljava/lang/String;"/>
+		<method name="prioritySendersToString(I)Ljava/lang/String;"/>
+		<method name="suppressedEffectsToString(I)Ljava/lang/String;" since="24"/>
+		<field name="CONVERSATION_SENDERS_ANYONE" since="30"/>
+		<field name="CONVERSATION_SENDERS_IMPORTANT" since="30"/>
+		<field name="CONVERSATION_SENDERS_NONE" since="30"/>
+		<field name="CREATOR"/>
+		<field name="PRIORITY_CATEGORY_ALARMS" since="28"/>
+		<field name="PRIORITY_CATEGORY_CALLS"/>
+		<field name="PRIORITY_CATEGORY_CONVERSATIONS" since="30"/>
+		<field name="PRIORITY_CATEGORY_EVENTS"/>
+		<field name="PRIORITY_CATEGORY_MEDIA" since="28"/>
+		<field name="PRIORITY_CATEGORY_MESSAGES"/>
+		<field name="PRIORITY_CATEGORY_REMINDERS"/>
+		<field name="PRIORITY_CATEGORY_REPEAT_CALLERS"/>
+		<field name="PRIORITY_CATEGORY_SYSTEM" since="28"/>
+		<field name="PRIORITY_SENDERS_ANY"/>
+		<field name="PRIORITY_SENDERS_CONTACTS"/>
+		<field name="PRIORITY_SENDERS_STARRED"/>
+		<field name="SUPPRESSED_EFFECT_AMBIENT" since="28"/>
+		<field name="SUPPRESSED_EFFECT_BADGE" since="28"/>
+		<field name="SUPPRESSED_EFFECT_FULL_SCREEN_INTENT" since="28"/>
+		<field name="SUPPRESSED_EFFECT_LIGHTS" since="28"/>
+		<field name="SUPPRESSED_EFFECT_NOTIFICATION_LIST" since="28"/>
+		<field name="SUPPRESSED_EFFECT_PEEK" since="28"/>
+		<field name="SUPPRESSED_EFFECT_SCREEN_OFF" since="24" deprecated="28"/>
+		<field name="SUPPRESSED_EFFECT_SCREEN_ON" since="24" deprecated="28"/>
+		<field name="SUPPRESSED_EFFECT_STATUS_BAR" since="28"/>
+		<field name="priorityCallSenders"/>
+		<field name="priorityCategories"/>
+		<field name="priorityConversationSenders" since="30"/>
+		<field name="priorityMessageSenders"/>
+		<field name="suppressedVisualEffects" since="24"/>
+	</class>
+	<class name="android/app/PendingIntent" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="cancel()V"/>
+		<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;I)Landroid/app/PendingIntent;" since="11"/>
+		<method name="getActivities(Landroid/content/Context;I[Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;" since="16"/>
+		<method name="getActivity(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
+		<method name="getActivity(Landroid/content/Context;ILandroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/PendingIntent;" since="16"/>
+		<method name="getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
+		<method name="getCreatorPackage()Ljava/lang/String;" since="17"/>
+		<method name="getCreatorUid()I" since="17"/>
+		<method name="getCreatorUserHandle()Landroid/os/UserHandle;" since="17"/>
+		<method name="getForegroundService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;" since="26"/>
+		<method name="getIntentSender()Landroid/content/IntentSender;" since="4"/>
+		<method name="getService(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent;"/>
+		<method name="getTargetPackage()Ljava/lang/String;" deprecated="17"/>
+		<method name="isActivity()Z" since="31"/>
+		<method name="isBroadcast()Z" since="31"/>
+		<method name="isForegroundService()Z" since="31"/>
+		<method name="isImmutable()Z" since="31"/>
+		<method name="isService()Z" since="31"/>
+		<method name="readPendingIntentOrNullFromParcel(Landroid/os/Parcel;)Landroid/app/PendingIntent;"/>
+		<method name="send()V"/>
+		<method name="send(I)V"/>
+		<method name="send(ILandroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V"/>
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;)V"/>
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;)V"/>
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V" since="14"/>
+		<method name="send(Landroid/content/Context;ILandroid/content/Intent;Landroid/app/PendingIntent$OnFinished;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;)V" since="23"/>
+		<method name="writePendingIntentOrNullToParcel(Landroid/app/PendingIntent;Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_CANCEL_CURRENT"/>
+		<field name="FLAG_IMMUTABLE" since="23"/>
+		<field name="FLAG_MUTABLE" since="31"/>
+		<field name="FLAG_NO_CREATE"/>
+		<field name="FLAG_ONE_SHOT"/>
+		<field name="FLAG_UPDATE_CURRENT" since="3"/>
+	</class>
+	<class name="android/app/PendingIntent$CanceledException" since="1">
+		<extends name="android/util/AndroidException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/app/PendingIntent$OnFinished" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onSendFinished(Landroid/app/PendingIntent;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/Person" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getKey()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="getUri()Ljava/lang/String;"/>
+		<method name="isBot()Z"/>
+		<method name="isImportant()Z"/>
+		<method name="toBuilder()Landroid/app/Person$Builder;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/Person$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/app/Person;"/>
+		<method name="setBot(Z)Landroid/app/Person$Builder;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/Person$Builder;"/>
+		<method name="setImportant(Z)Landroid/app/Person$Builder;"/>
+		<method name="setKey(Ljava/lang/String;)Landroid/app/Person$Builder;"/>
+		<method name="setName(Ljava/lang/CharSequence;)Landroid/app/Person$Builder;"/>
+		<method name="setUri(Ljava/lang/String;)Landroid/app/Person$Builder;"/>
+	</class>
+	<class name="android/app/PictureInPictureParams" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/PictureInPictureParams$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/app/PictureInPictureParams;"/>
+		<method name="setActions(Ljava/util/List;)Landroid/app/PictureInPictureParams$Builder;"/>
+		<method name="setAspectRatio(Landroid/util/Rational;)Landroid/app/PictureInPictureParams$Builder;"/>
+		<method name="setAutoEnterEnabled(Z)Landroid/app/PictureInPictureParams$Builder;" since="31"/>
+		<method name="setSeamlessResizeEnabled(Z)Landroid/app/PictureInPictureParams$Builder;" since="31"/>
+		<method name="setSourceRectHint(Landroid/graphics/Rect;)Landroid/app/PictureInPictureParams$Builder;"/>
+	</class>
+	<class name="android/app/PictureInPictureUiState" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="isStashed()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/Presentation" since="17">
+		<extends name="android/app/Dialog"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/Display;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/Display;I)V"/>
+		<method name="getDisplay()Landroid/view/Display;"/>
+		<method name="getResources()Landroid/content/res/Resources;"/>
+		<method name="onDisplayChanged()V"/>
+		<method name="onDisplayRemoved()V"/>
+	</class>
+	<class name="android/app/ProgressDialog" since="1" deprecated="26">
+		<extends name="android/app/AlertDialog"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V" deprecated="29"/>
+		<method name="getMax()I" deprecated="29"/>
+		<method name="getProgress()I" deprecated="29"/>
+		<method name="getSecondaryProgress()I" deprecated="29"/>
+		<method name="incrementProgressBy(I)V" deprecated="29"/>
+		<method name="incrementSecondaryProgressBy(I)V" deprecated="29"/>
+		<method name="isIndeterminate()Z" deprecated="29"/>
+		<method name="setIndeterminate(Z)V" deprecated="29"/>
+		<method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="29"/>
+		<method name="setMax(I)V" deprecated="29"/>
+		<method name="setProgress(I)V" deprecated="29"/>
+		<method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="29"/>
+		<method name="setProgressNumberFormat(Ljava/lang/String;)V" since="11" deprecated="29"/>
+		<method name="setProgressPercentFormat(Ljava/text/NumberFormat;)V" since="11" deprecated="29"/>
+		<method name="setProgressStyle(I)V" deprecated="29"/>
+		<method name="setSecondaryProgress(I)V" deprecated="29"/>
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/app/ProgressDialog;" deprecated="29"/>
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Landroid/app/ProgressDialog;" deprecated="29"/>
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZ)Landroid/app/ProgressDialog;" deprecated="29"/>
+		<method name="show(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZLandroid/content/DialogInterface$OnCancelListener;)Landroid/app/ProgressDialog;" deprecated="29"/>
+		<field name="STYLE_HORIZONTAL" deprecated="29"/>
+		<field name="STYLE_SPINNER" deprecated="29"/>
+	</class>
+	<class name="android/app/RecoverableSecurityException" since="29">
+		<extends name="java/lang/SecurityException"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;Ljava/lang/CharSequence;Landroid/app/RemoteAction;)V"/>
+		<method name="getUserAction()Landroid/app/RemoteAction;"/>
+		<method name="getUserMessage()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/RemoteAction" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V"/>
+		<method name="clone()Landroid/app/RemoteAction;"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/PrintWriter;)V"/>
+		<method name="getActionIntent()Landroid/app/PendingIntent;"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="isEnabled()Z"/>
+		<method name="setEnabled(Z)V"/>
+		<method name="setShouldShowIcon(Z)V" since="28"/>
+		<method name="shouldShowIcon()Z" since="28"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/RemoteInput" since="20">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="addDataResultToIntent(Landroid/app/RemoteInput;Landroid/content/Intent;Ljava/util/Map;)V" since="26"/>
+		<method name="addResultsToIntent([Landroid/app/RemoteInput;Landroid/content/Intent;Landroid/os/Bundle;)V"/>
+		<method name="getAllowFreeFormInput()Z"/>
+		<method name="getAllowedDataTypes()Ljava/util/Set;" since="26"/>
+		<method name="getChoices()[Ljava/lang/CharSequence;"/>
+		<method name="getDataResultsFromIntent(Landroid/content/Intent;Ljava/lang/String;)Ljava/util/Map;" since="26"/>
+		<method name="getEditChoicesBeforeSending()I" since="29"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getResultKey()Ljava/lang/String;"/>
+		<method name="getResultsFromIntent(Landroid/content/Intent;)Landroid/os/Bundle;"/>
+		<method name="getResultsSource(Landroid/content/Intent;)I" since="28"/>
+		<method name="isDataOnly()Z" since="26"/>
+		<method name="setResultsSource(Landroid/content/Intent;I)V" since="28"/>
+		<field name="CREATOR"/>
+		<field name="EDIT_CHOICES_BEFORE_SENDING_AUTO" since="29"/>
+		<field name="EDIT_CHOICES_BEFORE_SENDING_DISABLED" since="29"/>
+		<field name="EDIT_CHOICES_BEFORE_SENDING_ENABLED" since="29"/>
+		<field name="EXTRA_RESULTS_DATA"/>
+		<field name="RESULTS_CLIP_LABEL"/>
+		<field name="SOURCE_CHOICE" since="28"/>
+		<field name="SOURCE_FREE_FORM_INPUT" since="28"/>
+	</class>
+	<class name="android/app/RemoteInput$Builder" since="20">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="addExtras(Landroid/os/Bundle;)Landroid/app/RemoteInput$Builder;"/>
+		<method name="build()Landroid/app/RemoteInput;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="setAllowDataType(Ljava/lang/String;Z)Landroid/app/RemoteInput$Builder;" since="26"/>
+		<method name="setAllowFreeFormInput(Z)Landroid/app/RemoteInput$Builder;"/>
+		<method name="setChoices([Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;"/>
+		<method name="setEditChoicesBeforeSending(I)Landroid/app/RemoteInput$Builder;" since="29"/>
+		<method name="setLabel(Ljava/lang/CharSequence;)Landroid/app/RemoteInput$Builder;"/>
+	</class>
+	<class name="android/app/SearchManager" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/DialogInterface$OnCancelListener"/>
+		<implements name="android/content/DialogInterface$OnDismissListener"/>
+		<method name="getGlobalSearchActivity()Landroid/content/ComponentName;" since="16"/>
+		<method name="getSearchableInfo(Landroid/content/ComponentName;)Landroid/app/SearchableInfo;" since="8"/>
+		<method name="getSearchablesInGlobalSearch()Ljava/util/List;" since="8"/>
+		<method name="setOnCancelListener(Landroid/app/SearchManager$OnCancelListener;)V"/>
+		<method name="setOnDismissListener(Landroid/app/SearchManager$OnDismissListener;)V"/>
+		<method name="startSearch(Ljava/lang/String;ZLandroid/content/ComponentName;Landroid/os/Bundle;Z)V"/>
+		<method name="stopSearch()V"/>
+		<method name="triggerSearch(Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;)V" since="5"/>
+		<field name="ACTION_KEY"/>
+		<field name="ACTION_MSG"/>
+		<field name="APP_DATA"/>
+		<field name="CURSOR_EXTRA_KEY_IN_PROGRESS" since="8"/>
+		<field name="EXTRA_DATA_KEY" since="4"/>
+		<field name="EXTRA_NEW_SEARCH" since="12"/>
+		<field name="EXTRA_SELECT_QUERY" since="8"/>
+		<field name="EXTRA_WEB_SEARCH_PENDINGINTENT" since="14"/>
+		<field name="FLAG_QUERY_REFINEMENT" since="11"/>
+		<field name="INTENT_ACTION_GLOBAL_SEARCH" since="8"/>
+		<field name="INTENT_ACTION_SEARCHABLES_CHANGED" since="4"/>
+		<field name="INTENT_ACTION_SEARCH_SETTINGS" since="8"/>
+		<field name="INTENT_ACTION_SEARCH_SETTINGS_CHANGED" since="4"/>
+		<field name="INTENT_ACTION_WEB_SEARCH_SETTINGS" since="4"/>
+		<field name="INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED" since="16"/>
+		<field name="MENU_KEY"/>
+		<field name="MENU_KEYCODE"/>
+		<field name="QUERY"/>
+		<field name="SHORTCUT_MIME_TYPE" since="4"/>
+		<field name="SUGGEST_COLUMN_AUDIO_CHANNEL_CONFIG" since="21"/>
+		<field name="SUGGEST_COLUMN_CONTENT_TYPE" since="21"/>
+		<field name="SUGGEST_COLUMN_DURATION" since="21"/>
+		<field name="SUGGEST_COLUMN_FLAGS" since="11"/>
+		<field name="SUGGEST_COLUMN_FORMAT"/>
+		<field name="SUGGEST_COLUMN_ICON_1"/>
+		<field name="SUGGEST_COLUMN_ICON_2"/>
+		<field name="SUGGEST_COLUMN_INTENT_ACTION"/>
+		<field name="SUGGEST_COLUMN_INTENT_DATA"/>
+		<field name="SUGGEST_COLUMN_INTENT_DATA_ID"/>
+		<field name="SUGGEST_COLUMN_INTENT_EXTRA_DATA" since="4"/>
+		<field name="SUGGEST_COLUMN_IS_LIVE" since="21"/>
+		<field name="SUGGEST_COLUMN_LAST_ACCESS_HINT" since="14"/>
+		<field name="SUGGEST_COLUMN_PRODUCTION_YEAR" since="21"/>
+		<field name="SUGGEST_COLUMN_PURCHASE_PRICE" since="21"/>
+		<field name="SUGGEST_COLUMN_QUERY"/>
+		<field name="SUGGEST_COLUMN_RATING_SCORE" since="21"/>
+		<field name="SUGGEST_COLUMN_RATING_STYLE" since="21"/>
+		<field name="SUGGEST_COLUMN_RENTAL_PRICE" since="21"/>
+		<field name="SUGGEST_COLUMN_RESULT_CARD_IMAGE" since="21"/>
+		<field name="SUGGEST_COLUMN_SHORTCUT_ID" since="4"/>
+		<field name="SUGGEST_COLUMN_SPINNER_WHILE_REFRESHING" since="4"/>
+		<field name="SUGGEST_COLUMN_TEXT_1"/>
+		<field name="SUGGEST_COLUMN_TEXT_2"/>
+		<field name="SUGGEST_COLUMN_TEXT_2_URL" since="8"/>
+		<field name="SUGGEST_COLUMN_VIDEO_HEIGHT" since="21"/>
+		<field name="SUGGEST_COLUMN_VIDEO_WIDTH" since="21"/>
+		<field name="SUGGEST_MIME_TYPE"/>
+		<field name="SUGGEST_NEVER_MAKE_SHORTCUT" since="4"/>
+		<field name="SUGGEST_PARAMETER_LIMIT" since="5"/>
+		<field name="SUGGEST_URI_PATH_QUERY"/>
+		<field name="SUGGEST_URI_PATH_SHORTCUT" since="4"/>
+		<field name="USER_QUERY" since="4"/>
+	</class>
+	<class name="android/app/SearchManager$OnCancelListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onCancel()V"/>
+	</class>
+	<class name="android/app/SearchManager$OnDismissListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onDismiss()V"/>
+	</class>
+	<class name="android/app/SearchableInfo" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="autoUrlDetect()Z"/>
+		<method name="getHintId()I"/>
+		<method name="getImeOptions()I"/>
+		<method name="getInputType()I"/>
+		<method name="getSearchActivity()Landroid/content/ComponentName;"/>
+		<method name="getSettingsDescriptionId()I"/>
+		<method name="getSuggestAuthority()Ljava/lang/String;"/>
+		<method name="getSuggestIntentAction()Ljava/lang/String;"/>
+		<method name="getSuggestIntentData()Ljava/lang/String;"/>
+		<method name="getSuggestPackage()Ljava/lang/String;"/>
+		<method name="getSuggestPath()Ljava/lang/String;"/>
+		<method name="getSuggestSelection()Ljava/lang/String;"/>
+		<method name="getSuggestThreshold()I"/>
+		<method name="getVoiceLanguageId()I"/>
+		<method name="getVoiceLanguageModeId()I"/>
+		<method name="getVoiceMaxResults()I"/>
+		<method name="getVoicePromptTextId()I"/>
+		<method name="getVoiceSearchEnabled()Z"/>
+		<method name="getVoiceSearchLaunchRecognizer()Z"/>
+		<method name="getVoiceSearchLaunchWebSearch()Z"/>
+		<method name="queryAfterZeroResults()Z"/>
+		<method name="shouldIncludeInGlobalSearch()Z"/>
+		<method name="shouldRewriteQueryFromData()Z"/>
+		<method name="shouldRewriteQueryFromText()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/Service" since="1">
+		<extends name="android/content/ContextWrapper"/>
+		<implements name="android/content/ComponentCallbacks" removed="14"/>
+		<implements name="android/content/ComponentCallbacks2" since="14"/>
+		<method name="&lt;init>()V"/>
+		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
+		<method name="getApplication()Landroid/app/Application;"/>
+		<method name="getForegroundServiceType()I" since="29"/>
+		<method name="onBind(Landroid/content/Intent;)Landroid/os/IBinder;"/>
+		<method name="onCreate()V"/>
+		<method name="onDestroy()V"/>
+		<method name="onRebind(Landroid/content/Intent;)V"/>
+		<method name="onStart(Landroid/content/Intent;I)V" deprecated="15"/>
+		<method name="onStartCommand(Landroid/content/Intent;II)I" since="5"/>
+		<method name="onTaskRemoved(Landroid/content/Intent;)V" since="14"/>
+		<method name="onUnbind(Landroid/content/Intent;)Z"/>
+		<method name="setForeground(Z)V" removed="11"/>
+		<method name="startForeground(ILandroid/app/Notification;)V" since="5"/>
+		<method name="startForeground(ILandroid/app/Notification;I)V" since="29"/>
+		<method name="stopForeground(I)V" since="24"/>
+		<method name="stopForeground(Z)V" since="5"/>
+		<method name="stopSelf()V"/>
+		<method name="stopSelf(I)V"/>
+		<method name="stopSelfResult(I)Z"/>
+		<field name="START_CONTINUATION_MASK" since="5"/>
+		<field name="START_FLAG_REDELIVERY" since="5"/>
+		<field name="START_FLAG_RETRY" since="5"/>
+		<field name="START_NOT_STICKY" since="5"/>
+		<field name="START_REDELIVER_INTENT" since="5"/>
+		<field name="START_STICKY" since="5"/>
+		<field name="START_STICKY_COMPATIBILITY" since="5"/>
+		<field name="STOP_FOREGROUND_DETACH" since="24"/>
+		<field name="STOP_FOREGROUND_REMOVE" since="24"/>
+	</class>
+	<class name="android/app/ServiceStartNotAllowedException" since="31">
+		<extends name="java/lang/IllegalStateException"/>
+	</class>
+	<class name="android/app/SharedElementCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCaptureSharedElementSnapshot(Landroid/view/View;Landroid/graphics/Matrix;Landroid/graphics/RectF;)Landroid/os/Parcelable;"/>
+		<method name="onCreateSnapshotView(Landroid/content/Context;Landroid/os/Parcelable;)Landroid/view/View;"/>
+		<method name="onMapSharedElements(Ljava/util/List;Ljava/util/Map;)V"/>
+		<method name="onRejectSharedElements(Ljava/util/List;)V"/>
+		<method name="onSharedElementEnd(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V"/>
+		<method name="onSharedElementStart(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V"/>
+		<method name="onSharedElementsArrived(Ljava/util/List;Ljava/util/List;Landroid/app/SharedElementCallback$OnSharedElementsReadyListener;)V" since="23"/>
+	</class>
+	<class name="android/app/SharedElementCallback$OnSharedElementsReadyListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onSharedElementsReady()V"/>
+	</class>
+	<class name="android/app/StatusBarManager" since="29">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/app/SyncNotedAppOp" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="getAttributionTag()Ljava/lang/String;"/>
+		<method name="getOp()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/TabActivity" since="1" deprecated="13">
+		<extends name="android/app/ActivityGroup"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getTabHost()Landroid/widget/TabHost;" deprecated="29"/>
+		<method name="getTabWidget()Landroid/widget/TabWidget;" deprecated="29"/>
+		<method name="setDefaultTab(I)V" deprecated="29"/>
+		<method name="setDefaultTab(Ljava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="android/app/TaskInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="isVisible()Z" since="33"/>
+		<field name="baseActivity"/>
+		<field name="baseIntent"/>
+		<field name="isRunning"/>
+		<field name="numActivities"/>
+		<field name="origActivity"/>
+		<field name="taskDescription"/>
+		<field name="taskId"/>
+		<field name="topActivity"/>
+	</class>
+	<class name="android/app/TaskStackBuilder" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="addNextIntent(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;"/>
+		<method name="addNextIntentWithParentStack(Landroid/content/Intent;)Landroid/app/TaskStackBuilder;"/>
+		<method name="addParentStack(Landroid/app/Activity;)Landroid/app/TaskStackBuilder;"/>
+		<method name="addParentStack(Landroid/content/ComponentName;)Landroid/app/TaskStackBuilder;"/>
+		<method name="addParentStack(Ljava/lang/Class;)Landroid/app/TaskStackBuilder;"/>
+		<method name="create(Landroid/content/Context;)Landroid/app/TaskStackBuilder;"/>
+		<method name="editIntentAt(I)Landroid/content/Intent;"/>
+		<method name="getIntentCount()I"/>
+		<method name="getIntents()[Landroid/content/Intent;"/>
+		<method name="getPendingIntent(II)Landroid/app/PendingIntent;"/>
+		<method name="getPendingIntent(IILandroid/os/Bundle;)Landroid/app/PendingIntent;"/>
+		<method name="startActivities()V"/>
+		<method name="startActivities(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/TimePickerDialog" since="1">
+		<extends name="android/app/AlertDialog"/>
+		<implements name="android/content/DialogInterface$OnClickListener"/>
+		<implements name="android/widget/TimePicker$OnTimeChangedListener"/>
+		<method name="&lt;init>(Landroid/content/Context;ILandroid/app/TimePickerDialog$OnTimeSetListener;IIZ)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/app/TimePickerDialog$OnTimeSetListener;IIZ)V"/>
+		<method name="updateTime(II)V"/>
+	</class>
+	<class name="android/app/TimePickerDialog$OnTimeSetListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onTimeSet(Landroid/widget/TimePicker;II)V"/>
+	</class>
+	<class name="android/app/UiAutomation" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="adoptShellPermissionIdentity()V" since="29"/>
+		<method name="adoptShellPermissionIdentity([Ljava/lang/String;)V" since="29"/>
+		<method name="clearWindowAnimationFrameStats()V" since="21"/>
+		<method name="clearWindowContentFrameStats(I)Z" since="21"/>
+		<method name="dropShellPermissionIdentity()V" since="29"/>
+		<method name="executeAndWaitForEvent(Ljava/lang/Runnable;Landroid/app/UiAutomation$AccessibilityEventFilter;J)Landroid/view/accessibility/AccessibilityEvent;"/>
+		<method name="executeShellCommand(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="21"/>
+		<method name="executeShellCommandRw(Ljava/lang/String;)[Landroid/os/ParcelFileDescriptor;" since="31"/>
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="21"/>
+		<method name="getRootInActiveWindow()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="getServiceInfo()Landroid/accessibilityservice/AccessibilityServiceInfo;"/>
+		<method name="getWindowAnimationFrameStats()Landroid/view/WindowAnimationFrameStats;" since="21"/>
+		<method name="getWindowContentFrameStats(I)Landroid/view/WindowContentFrameStats;" since="21"/>
+		<method name="getWindows()Ljava/util/List;" since="21"/>
+		<method name="getWindowsOnAllDisplays()Landroid/util/SparseArray;" since="30"/>
+		<method name="grantRuntimePermission(Ljava/lang/String;Ljava/lang/String;)V" since="28"/>
+		<method name="grantRuntimePermissionAsUser(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V" since="28"/>
+		<method name="injectInputEvent(Landroid/view/InputEvent;Z)Z"/>
+		<method name="performGlobalAction(I)Z"/>
+		<method name="revokeRuntimePermission(Ljava/lang/String;Ljava/lang/String;)V" since="28"/>
+		<method name="revokeRuntimePermissionAsUser(Ljava/lang/String;Ljava/lang/String;Landroid/os/UserHandle;)V" since="28"/>
+		<method name="setOnAccessibilityEventListener(Landroid/app/UiAutomation$OnAccessibilityEventListener;)V"/>
+		<method name="setRotation(I)Z"/>
+		<method name="setRunAsMonkey(Z)V"/>
+		<method name="setServiceInfo(Landroid/accessibilityservice/AccessibilityServiceInfo;)V"/>
+		<method name="takeScreenshot()Landroid/graphics/Bitmap;"/>
+		<method name="waitForIdle(JJ)V"/>
+		<field name="FLAG_DONT_SUPPRESS_ACCESSIBILITY_SERVICES" since="24"/>
+		<field name="FLAG_DONT_USE_ACCESSIBILITY" since="31"/>
+		<field name="ROTATION_FREEZE_0"/>
+		<field name="ROTATION_FREEZE_180"/>
+		<field name="ROTATION_FREEZE_270"/>
+		<field name="ROTATION_FREEZE_90"/>
+		<field name="ROTATION_FREEZE_CURRENT"/>
+		<field name="ROTATION_UNFREEZE"/>
+	</class>
+	<class name="android/app/UiAutomation$AccessibilityEventFilter" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Landroid/view/accessibility/AccessibilityEvent;)Z"/>
+	</class>
+	<class name="android/app/UiAutomation$OnAccessibilityEventListener" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="onAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V"/>
+	</class>
+	<class name="android/app/UiModeManager" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="disableCarMode(I)V"/>
+		<method name="enableCarMode(I)V"/>
+		<method name="getCurrentModeType()I"/>
+		<method name="getCustomNightModeEnd()Ljava/time/LocalTime;" since="30"/>
+		<method name="getCustomNightModeStart()Ljava/time/LocalTime;" since="30"/>
+		<method name="getNightMode()I"/>
+		<method name="setApplicationNightMode(I)V" since="31"/>
+		<method name="setCustomNightModeEnd(Ljava/time/LocalTime;)V" since="30"/>
+		<method name="setCustomNightModeStart(Ljava/time/LocalTime;)V" since="30"/>
+		<method name="setNightMode(I)V"/>
+		<field name="ACTION_ENTER_CAR_MODE"/>
+		<field name="ACTION_ENTER_DESK_MODE"/>
+		<field name="ACTION_EXIT_CAR_MODE"/>
+		<field name="ACTION_EXIT_DESK_MODE"/>
+		<field name="DISABLE_CAR_MODE_GO_HOME"/>
+		<field name="ENABLE_CAR_MODE_ALLOW_SLEEP" since="21"/>
+		<field name="ENABLE_CAR_MODE_GO_CAR_HOME"/>
+		<field name="MODE_NIGHT_AUTO"/>
+		<field name="MODE_NIGHT_CUSTOM" since="30"/>
+		<field name="MODE_NIGHT_NO"/>
+		<field name="MODE_NIGHT_YES"/>
+	</class>
+	<class name="android/app/VoiceInteractor" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getActiveRequest(Ljava/lang/String;)Landroid/app/VoiceInteractor$Request;"/>
+		<method name="getActiveRequests()[Landroid/app/VoiceInteractor$Request;"/>
+		<method name="isDestroyed()Z" since="29"/>
+		<method name="notifyDirectActionsChanged()V" since="29"/>
+		<method name="registerOnDestroyedCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)Z" since="29"/>
+		<method name="submitRequest(Landroid/app/VoiceInteractor$Request;)Z"/>
+		<method name="submitRequest(Landroid/app/VoiceInteractor$Request;Ljava/lang/String;)Z"/>
+		<method name="supportsCommands([Ljava/lang/String;)[Z"/>
+		<method name="unregisterOnDestroyedCallback(Ljava/lang/Runnable;)Z" since="29"/>
+	</class>
+	<class name="android/app/VoiceInteractor$AbortVoiceRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request"/>
+		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V"/>
+		<method name="onAbortResult(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/VoiceInteractor$CommandRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="onCommandResult(ZLandroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/VoiceInteractor$CompleteVoiceRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request"/>
+		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V"/>
+		<method name="onCompleteResult(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/VoiceInteractor$ConfirmationRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request"/>
+		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;Landroid/os/Bundle;)V"/>
+		<method name="onConfirmationResult(ZLandroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/VoiceInteractor$PickOptionRequest" since="23">
+		<extends name="android/app/VoiceInteractor$Request"/>
+		<method name="&lt;init>(Landroid/app/VoiceInteractor$Prompt;[Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
+		<method name="onPickOptionResult(Z[Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/app/VoiceInteractor$PickOptionRequest$Option" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;I)V"/>
+		<method name="addSynonym(Ljava/lang/CharSequence;)Landroid/app/VoiceInteractor$PickOptionRequest$Option;"/>
+		<method name="countSynonyms()I"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getIndex()I"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getSynonymAt(I)Ljava/lang/CharSequence;"/>
+		<method name="setExtras(Landroid/os/Bundle;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/VoiceInteractor$Prompt" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="&lt;init>([Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
+		<method name="countVoicePrompts()I"/>
+		<method name="getVisualPrompt()Ljava/lang/CharSequence;"/>
+		<method name="getVoicePromptAt(I)Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/VoiceInteractor$Request" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="getActivity()Landroid/app/Activity;"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="onAttached(Landroid/app/Activity;)V"/>
+		<method name="onCancel()V"/>
+		<method name="onDetached()V"/>
+	</class>
+	<class name="android/app/WallpaperColors" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;)V"/>
+		<method name="&lt;init>(Landroid/graphics/Color;Landroid/graphics/Color;Landroid/graphics/Color;I)V" since="31"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="fromBitmap(Landroid/graphics/Bitmap;)Landroid/app/WallpaperColors;"/>
+		<method name="fromDrawable(Landroid/graphics/drawable/Drawable;)Landroid/app/WallpaperColors;"/>
+		<method name="getColorHints()I" since="31"/>
+		<method name="getPrimaryColor()Landroid/graphics/Color;"/>
+		<method name="getSecondaryColor()Landroid/graphics/Color;"/>
+		<method name="getTertiaryColor()Landroid/graphics/Color;"/>
+		<field name="CREATOR"/>
+		<field name="HINT_SUPPORTS_DARK_TEXT" since="31"/>
+		<field name="HINT_SUPPORTS_DARK_THEME" since="31"/>
+	</class>
+	<class name="android/app/WallpaperInfo" since="7">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getComponent()Landroid/content/ComponentName;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
+		<method name="getServiceName()Ljava/lang/String;"/>
+		<method name="getSettingsActivity()Ljava/lang/String;"/>
+		<method name="getSettingsSliceUri()Landroid/net/Uri;" since="29"/>
+		<method name="getShowMetadataInPreview()Z" since="25"/>
+		<method name="loadAuthor(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<method name="loadContextDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" since="25"/>
+		<method name="loadContextUri(Landroid/content/pm/PackageManager;)Landroid/net/Uri;" since="25"/>
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<method name="loadThumbnail(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="shouldUseDefaultUnfoldTransition()Z" since="33"/>
+		<method name="supportsMultipleDisplays()Z" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/WallpaperManager" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="addOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;Landroid/os/Handler;)V" since="27"/>
+		<method name="clear()V"/>
+		<method name="clear(I)V" since="24"/>
+		<method name="clearWallpaper()V" since="28"/>
+		<method name="clearWallpaperOffsets(Landroid/os/IBinder;)V"/>
+		<method name="forgetLoadedWallpaper()V" since="14"/>
+		<method name="getBuiltInDrawable()Landroid/graphics/drawable/Drawable;" since="19"/>
+		<method name="getBuiltInDrawable(I)Landroid/graphics/drawable/Drawable;" since="24"/>
+		<method name="getBuiltInDrawable(IIZFF)Landroid/graphics/drawable/Drawable;" since="19"/>
+		<method name="getBuiltInDrawable(IIZFFI)Landroid/graphics/drawable/Drawable;" since="24"/>
+		<method name="getCropAndSetWallpaperIntent(Landroid/net/Uri;)Landroid/content/Intent;" since="19"/>
+		<method name="getDesiredMinimumHeight()I"/>
+		<method name="getDesiredMinimumWidth()I"/>
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getFastDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getInstance(Landroid/content/Context;)Landroid/app/WallpaperManager;"/>
+		<method name="getWallpaperColors(I)Landroid/app/WallpaperColors;" since="27"/>
+		<method name="getWallpaperFile(I)Landroid/os/ParcelFileDescriptor;" since="24"/>
+		<method name="getWallpaperId(I)I" since="24"/>
+		<method name="getWallpaperInfo()Landroid/app/WallpaperInfo;" since="7"/>
+		<method name="hasResourceWallpaper(I)Z" since="17"/>
+		<method name="isSetWallpaperAllowed()Z" since="24"/>
+		<method name="isWallpaperSupported()Z" since="23"/>
+		<method name="peekDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="peekFastDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="removeOnColorsChangedListener(Landroid/app/WallpaperManager$OnColorsChangedListener;)V" since="27"/>
+		<method name="sendWallpaperCommand(Landroid/os/IBinder;Ljava/lang/String;IIILandroid/os/Bundle;)V" since="7"/>
+		<method name="setBitmap(Landroid/graphics/Bitmap;)V"/>
+		<method name="setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Z)I" since="24"/>
+		<method name="setBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;ZI)I" since="24"/>
+		<method name="setDisplayPadding(Landroid/graphics/Rect;)V" since="28"/>
+		<method name="setResource(I)V"/>
+		<method name="setResource(II)I" since="24"/>
+		<method name="setStream(Ljava/io/InputStream;)V"/>
+		<method name="setStream(Ljava/io/InputStream;Landroid/graphics/Rect;Z)I" since="24"/>
+		<method name="setStream(Ljava/io/InputStream;Landroid/graphics/Rect;ZI)I" since="24"/>
+		<method name="setWallpaperOffsetSteps(FF)V" since="7"/>
+		<method name="setWallpaperOffsets(Landroid/os/IBinder;FF)V"/>
+		<method name="suggestDesiredDimensions(II)V"/>
+		<field name="ACTION_CHANGE_LIVE_WALLPAPER" since="16"/>
+		<field name="ACTION_CROP_AND_SET_WALLPAPER" since="19"/>
+		<field name="ACTION_LIVE_WALLPAPER_CHOOSER" since="7"/>
+		<field name="COMMAND_DROP" since="7"/>
+		<field name="COMMAND_SECONDARY_TAP" since="11"/>
+		<field name="COMMAND_TAP" since="7"/>
+		<field name="EXTRA_LIVE_WALLPAPER_COMPONENT" since="16"/>
+		<field name="FLAG_LOCK" since="24"/>
+		<field name="FLAG_SYSTEM" since="24"/>
+		<field name="WALLPAPER_PREVIEW_META_DATA" since="11"/>
+	</class>
+	<class name="android/app/WallpaperManager$OnColorsChangedListener" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="onColorsChanged(Landroid/app/WallpaperColors;I)V"/>
+	</class>
+	<class name="android/app/ZygotePreload" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="doPreload(Landroid/content/pm/ApplicationInfo;)V"/>
+	</class>
+	<class name="android/app/admin/ConnectEvent" since="26">
+		<extends name="android/app/admin/NetworkEvent"/>
+		<method name="getInetAddress()Ljava/net/InetAddress;"/>
+		<method name="getPort()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/admin/DelegatedAdminReceiver" since="29">
+		<extends name="android/content/BroadcastReceiver"/>
+		<method name="&lt;init>()V"/>
+		<method name="onChoosePrivateKeyAlias(Landroid/content/Context;Landroid/content/Intent;ILandroid/net/Uri;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="onNetworkLogsAvailable(Landroid/content/Context;Landroid/content/Intent;JI)V"/>
+		<method name="onSecurityLogsAvailable(Landroid/content/Context;Landroid/content/Intent;)V" since="31"/>
+	</class>
+	<class name="android/app/admin/DeviceAdminInfo" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getActivityInfo()Landroid/content/pm/ActivityInfo;"/>
+		<method name="getComponent()Landroid/content/ComponentName;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getReceiverName()Ljava/lang/String;"/>
+		<method name="getTagForPolicy(I)Ljava/lang/String;"/>
+		<method name="isVisible()Z"/>
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<method name="supportsTransferOwnership()Z" since="28"/>
+		<method name="usesPolicy(I)Z"/>
+		<field name="CREATOR"/>
+		<field name="USES_ENCRYPTED_STORAGE" since="11"/>
+		<field name="USES_POLICY_DISABLE_CAMERA" since="14"/>
+		<field name="USES_POLICY_DISABLE_KEYGUARD_FEATURES" since="17"/>
+		<field name="USES_POLICY_EXPIRE_PASSWORD" since="11"/>
+		<field name="USES_POLICY_FORCE_LOCK"/>
+		<field name="USES_POLICY_LIMIT_PASSWORD"/>
+		<field name="USES_POLICY_RESET_PASSWORD"/>
+		<field name="USES_POLICY_WATCH_LOGIN"/>
+		<field name="USES_POLICY_WIPE_DATA"/>
+	</class>
+	<class name="android/app/admin/DeviceAdminReceiver" since="8">
+		<extends name="android/content/BroadcastReceiver"/>
+		<method name="&lt;init>()V"/>
+		<method name="getManager(Landroid/content/Context;)Landroid/app/admin/DevicePolicyManager;"/>
+		<method name="getWho(Landroid/content/Context;)Landroid/content/ComponentName;"/>
+		<method name="onBugreportFailed(Landroid/content/Context;Landroid/content/Intent;I)V" since="24"/>
+		<method name="onBugreportShared(Landroid/content/Context;Landroid/content/Intent;Ljava/lang/String;)V" since="24"/>
+		<method name="onBugreportSharingDeclined(Landroid/content/Context;Landroid/content/Intent;)V" since="24"/>
+		<method name="onChoosePrivateKeyAlias(Landroid/content/Context;Landroid/content/Intent;ILandroid/net/Uri;Ljava/lang/String;)Ljava/lang/String;" since="23"/>
+		<method name="onComplianceAcknowledgementRequired(Landroid/content/Context;Landroid/content/Intent;)V" since="31"/>
+		<method name="onDisableRequested(Landroid/content/Context;Landroid/content/Intent;)Ljava/lang/CharSequence;"/>
+		<method name="onDisabled(Landroid/content/Context;Landroid/content/Intent;)V"/>
+		<method name="onEnabled(Landroid/content/Context;Landroid/content/Intent;)V"/>
+		<method name="onLockTaskModeEntering(Landroid/content/Context;Landroid/content/Intent;Ljava/lang/String;)V" since="21"/>
+		<method name="onLockTaskModeExiting(Landroid/content/Context;Landroid/content/Intent;)V" since="21"/>
+		<method name="onNetworkLogsAvailable(Landroid/content/Context;Landroid/content/Intent;JI)V" since="26"/>
+		<method name="onOperationSafetyStateChanged(Landroid/content/Context;IZ)V" since="31"/>
+		<method name="onPasswordChanged(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26"/>
+		<method name="onPasswordChanged(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
+		<method name="onPasswordExpiring(Landroid/content/Context;Landroid/content/Intent;)V" since="11" deprecated="26"/>
+		<method name="onPasswordExpiring(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
+		<method name="onPasswordFailed(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26"/>
+		<method name="onPasswordFailed(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
+		<method name="onPasswordSucceeded(Landroid/content/Context;Landroid/content/Intent;)V" deprecated="26"/>
+		<method name="onPasswordSucceeded(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
+		<method name="onProfileProvisioningComplete(Landroid/content/Context;Landroid/content/Intent;)V" since="21"/>
+		<method name="onReadyForUserInitialization(Landroid/content/Context;Landroid/content/Intent;)V" since="23" deprecated="24"/>
+		<method name="onSecurityLogsAvailable(Landroid/content/Context;Landroid/content/Intent;)V" since="24"/>
+		<method name="onSystemUpdatePending(Landroid/content/Context;Landroid/content/Intent;J)V" since="23"/>
+		<method name="onTransferAffiliatedProfileOwnershipComplete(Landroid/content/Context;Landroid/os/UserHandle;)V" since="28"/>
+		<method name="onTransferOwnershipComplete(Landroid/content/Context;Landroid/os/PersistableBundle;)V" since="28"/>
+		<method name="onUserAdded(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
+		<method name="onUserRemoved(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="26"/>
+		<method name="onUserStarted(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
+		<method name="onUserStopped(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
+		<method name="onUserSwitched(Landroid/content/Context;Landroid/content/Intent;Landroid/os/UserHandle;)V" since="28"/>
+		<field name="ACTION_CHOOSE_PRIVATE_KEY_ALIAS" since="29"/>
+		<field name="ACTION_DEVICE_ADMIN_DISABLED"/>
+		<field name="ACTION_DEVICE_ADMIN_DISABLE_REQUESTED"/>
+		<field name="ACTION_DEVICE_ADMIN_ENABLED"/>
+		<field name="ACTION_LOCK_TASK_ENTERING" since="21"/>
+		<field name="ACTION_LOCK_TASK_EXITING" since="21"/>
+		<field name="ACTION_NETWORK_LOGS_AVAILABLE" since="29"/>
+		<field name="ACTION_PASSWORD_CHANGED"/>
+		<field name="ACTION_PASSWORD_EXPIRING" since="11"/>
+		<field name="ACTION_PASSWORD_FAILED"/>
+		<field name="ACTION_PASSWORD_SUCCEEDED"/>
+		<field name="ACTION_PROFILE_PROVISIONING_COMPLETE" since="21"/>
+		<field name="ACTION_SECURITY_LOGS_AVAILABLE" since="31"/>
+		<field name="BUGREPORT_FAILURE_FAILED_COMPLETING" since="24"/>
+		<field name="BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE" since="24"/>
+		<field name="DEVICE_ADMIN_META_DATA"/>
+		<field name="EXTRA_DISABLE_WARNING"/>
+		<field name="EXTRA_LOCK_TASK_PACKAGE" since="21"/>
+		<field name="EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE" since="28"/>
+	</class>
+	<class name="android/app/admin/DeviceAdminService" since="26">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/app/admin/DevicePolicyManager" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="acknowledgeDeviceCompliant()V" since="31"/>
+		<method name="addCrossProfileIntentFilter(Landroid/content/ComponentName;Landroid/content/IntentFilter;I)V" since="21"/>
+		<method name="addCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
+		<method name="addOverrideApn(Landroid/content/ComponentName;Landroid/telephony/data/ApnSetting;)I" since="28"/>
+		<method name="addPersistentPreferredActivity(Landroid/content/ComponentName;Landroid/content/IntentFilter;Landroid/content/ComponentName;)V" since="21"/>
+		<method name="addUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
+		<method name="bindDeviceAdminServiceAsUser(Landroid/content/ComponentName;Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z" since="26"/>
+		<method name="canAdminGrantSensorsPermissions()Z" since="31"/>
+		<method name="canUsbDataSignalingBeDisabled()Z" since="31"/>
+		<method name="clearApplicationUserData(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/app/admin/DevicePolicyManager$OnClearApplicationUserDataListener;)V" since="28"/>
+		<method name="clearCrossProfileIntentFilters(Landroid/content/ComponentName;)V" since="21"/>
+		<method name="clearDeviceOwnerApp(Ljava/lang/String;)V" since="21" deprecated="26"/>
+		<method name="clearPackagePersistentPreferredActivities(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
+		<method name="clearProfileOwner(Landroid/content/ComponentName;)V" since="24" deprecated="26"/>
+		<method name="clearResetPasswordToken(Landroid/content/ComponentName;)Z" since="26"/>
+		<method name="clearUserRestriction(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
+		<method name="createAdminSupportIntent(Ljava/lang/String;)Landroid/content/Intent;" since="26"/>
+		<method name="createAndInitializeUser(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/Bundle;)Landroid/os/UserHandle;" since="21" deprecated="23" removed="24"/>
+		<method name="createAndManageUser(Landroid/content/ComponentName;Ljava/lang/String;Landroid/content/ComponentName;Landroid/os/PersistableBundle;I)Landroid/os/UserHandle;" since="24"/>
+		<method name="createUser(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/UserHandle;" since="21" deprecated="23" removed="24"/>
+		<method name="enableSystemApp(Landroid/content/ComponentName;Landroid/content/Intent;)I" since="21"/>
+		<method name="enableSystemApp(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
+		<method name="generateKeyPair(Landroid/content/ComponentName;Ljava/lang/String;Landroid/security/keystore/KeyGenParameterSpec;I)Landroid/security/AttestedKeyPair;" since="28"/>
+		<method name="getAccountTypesWithManagementDisabled()[Ljava/lang/String;" since="21"/>
+		<method name="getActiveAdmins()Ljava/util/List;"/>
+		<method name="getAffiliationIds(Landroid/content/ComponentName;)Ljava/util/Set;" since="26"/>
+		<method name="getAlwaysOnVpnLockdownWhitelist(Landroid/content/ComponentName;)Ljava/util/Set;" since="29"/>
+		<method name="getAlwaysOnVpnPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24"/>
+		<method name="getApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;)Landroid/os/Bundle;" since="21"/>
+		<method name="getApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="24" deprecated="26"/>
+		<method name="getAutoTimeEnabled(Landroid/content/ComponentName;)Z" since="30"/>
+		<method name="getAutoTimeRequired()Z" since="21" deprecated="30"/>
+		<method name="getAutoTimeZoneEnabled(Landroid/content/ComponentName;)Z" since="30"/>
+		<method name="getBindDeviceAdminTargetUsers(Landroid/content/ComponentName;)Ljava/util/List;" since="26"/>
+		<method name="getBluetoothContactSharingDisabled(Landroid/content/ComponentName;)Z" since="23"/>
+		<method name="getCameraDisabled(Landroid/content/ComponentName;)Z" since="14"/>
+		<method name="getCertInstallerPackage(Landroid/content/ComponentName;)Ljava/lang/String;" since="23" deprecated="26"/>
+		<method name="getCrossProfileCalendarPackages(Landroid/content/ComponentName;)Ljava/util/Set;" since="29"/>
+		<method name="getCrossProfileCallerIdDisabled(Landroid/content/ComponentName;)Z" since="21"/>
+		<method name="getCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;)Z" since="24"/>
+		<method name="getCrossProfilePackages(Landroid/content/ComponentName;)Ljava/util/Set;" since="30"/>
+		<method name="getCrossProfileWidgetProviders(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
+		<method name="getCurrentFailedPasswordAttempts()I"/>
+		<method name="getDelegatePackages(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="26"/>
+		<method name="getDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="26"/>
+		<method name="getDeviceOwnerLockScreenInfo()Ljava/lang/CharSequence;" since="24"/>
+		<method name="getEndUserSessionMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="28"/>
+		<method name="getEnrollmentSpecificId()Ljava/lang/String;" since="31"/>
+		<method name="getFactoryResetProtectionPolicy(Landroid/content/ComponentName;)Landroid/app/admin/FactoryResetProtectionPolicy;" since="30"/>
+		<method name="getGlobalPrivateDnsHost(Landroid/content/ComponentName;)Ljava/lang/String;" since="29"/>
+		<method name="getGlobalPrivateDnsMode(Landroid/content/ComponentName;)I" since="29"/>
+		<method name="getInstalledCaCerts(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
+		<method name="getKeepUninstalledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
+		<method name="getKeyPairGrants(Ljava/lang/String;)Ljava/util/Map;" since="31"/>
+		<method name="getKeyguardDisabledFeatures(Landroid/content/ComponentName;)I" since="17"/>
+		<method name="getLockTaskFeatures(Landroid/content/ComponentName;)I" since="28"/>
+		<method name="getLockTaskPackages(Landroid/content/ComponentName;)[Ljava/lang/String;" since="26"/>
+		<method name="getLongSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24"/>
+		<method name="getManagedProfileMaximumTimeOff(Landroid/content/ComponentName;)J" since="30"/>
+		<method name="getMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;)I"/>
+		<method name="getMaximumTimeToLock(Landroid/content/ComponentName;)J"/>
+		<method name="getMeteredDataDisabledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
+		<method name="getNearbyAppStreamingPolicy()I" since="31"/>
+		<method name="getNearbyNotificationStreamingPolicy()I" since="31"/>
+		<method name="getOrganizationColor(Landroid/content/ComponentName;)I" since="24" deprecated="31"/>
+		<method name="getOrganizationName(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24"/>
+		<method name="getOverrideApns(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
+		<method name="getParentProfileInstance(Landroid/content/ComponentName;)Landroid/app/admin/DevicePolicyManager;" since="24"/>
+		<method name="getPasswordComplexity()I" since="29"/>
+		<method name="getPasswordExpiration(Landroid/content/ComponentName;)J" since="11"/>
+		<method name="getPasswordExpirationTimeout(Landroid/content/ComponentName;)J" since="11"/>
+		<method name="getPasswordHistoryLength(Landroid/content/ComponentName;)I" since="11"/>
+		<method name="getPasswordMaximumLength(I)I"/>
+		<method name="getPasswordMinimumLength(Landroid/content/ComponentName;)I" deprecated="31"/>
+		<method name="getPasswordMinimumLetters(Landroid/content/ComponentName;)I" since="11" deprecated="31"/>
+		<method name="getPasswordMinimumLowerCase(Landroid/content/ComponentName;)I" since="11" deprecated="31"/>
+		<method name="getPasswordMinimumNonLetter(Landroid/content/ComponentName;)I" since="11" deprecated="31"/>
+		<method name="getPasswordMinimumNumeric(Landroid/content/ComponentName;)I" since="11" deprecated="31"/>
+		<method name="getPasswordMinimumSymbols(Landroid/content/ComponentName;)I" since="11" deprecated="31"/>
+		<method name="getPasswordMinimumUpperCase(Landroid/content/ComponentName;)I" since="11" deprecated="31"/>
+		<method name="getPasswordQuality(Landroid/content/ComponentName;)I" deprecated="31"/>
+		<method name="getPendingSystemUpdate(Landroid/content/ComponentName;)Landroid/app/admin/SystemUpdateInfo;" since="26"/>
+		<method name="getPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)I" since="23"/>
+		<method name="getPermissionPolicy(Landroid/content/ComponentName;)I" since="23"/>
+		<method name="getPermittedAccessibilityServices(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
+		<method name="getPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;)Ljava/util/List;" since="26"/>
+		<method name="getPermittedInputMethods(Landroid/content/ComponentName;)Ljava/util/List;" since="21"/>
+		<method name="getPersonalAppsSuspendedReasons(Landroid/content/ComponentName;)I" since="30"/>
+		<method name="getRequiredPasswordComplexity()I" since="31"/>
+		<method name="getRequiredStrongAuthTimeout(Landroid/content/ComponentName;)J" since="26"/>
+		<method name="getScreenCaptureDisabled(Landroid/content/ComponentName;)Z" since="21"/>
+		<method name="getSecondaryUsers(Landroid/content/ComponentName;)Ljava/util/List;" since="28"/>
+		<method name="getShortSupportMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="24"/>
+		<method name="getStartUserSessionMessage(Landroid/content/ComponentName;)Ljava/lang/CharSequence;" since="28"/>
+		<method name="getStorageEncryption(Landroid/content/ComponentName;)Z" since="11" deprecated="30"/>
+		<method name="getStorageEncryptionStatus()I" since="11"/>
+		<method name="getSystemUpdatePolicy()Landroid/app/admin/SystemUpdatePolicy;" since="23"/>
+		<method name="getTransferOwnershipBundle()Landroid/os/PersistableBundle;" since="28"/>
+		<method name="getTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;)Ljava/util/List;" since="23"/>
+		<method name="getUserControlDisabledPackages(Landroid/content/ComponentName;)Ljava/util/List;" since="30"/>
+		<method name="getUserRestrictions(Landroid/content/ComponentName;)Landroid/os/Bundle;" since="24"/>
+		<method name="getWifiMacAddress(Landroid/content/ComponentName;)Ljava/lang/String;" since="24"/>
+		<method name="grantKeyPairToApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z" since="30"/>
+		<method name="grantKeyPairToWifiAuth(Ljava/lang/String;)Z" since="31"/>
+		<method name="hasCaCertInstalled(Landroid/content/ComponentName;[B)Z" since="21"/>
+		<method name="hasGrantedPolicy(Landroid/content/ComponentName;I)Z" since="11"/>
+		<method name="hasKeyPair(Ljava/lang/String;)Z" since="31"/>
+		<method name="hasLockdownAdminConfiguredNetworks(Landroid/content/ComponentName;)Z" since="30"/>
+		<method name="installCaCert(Landroid/content/ComponentName;[B)Z" since="21"/>
+		<method name="installExistingPackage(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="28"/>
+		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;Ljava/security/cert/Certificate;Ljava/lang/String;)Z" since="21"/>
+		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;I)Z" since="28"/>
+		<method name="installKeyPair(Landroid/content/ComponentName;Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/lang/String;Z)Z" since="24"/>
+		<method name="installSystemUpdate(Landroid/content/ComponentName;Landroid/net/Uri;Ljava/util/concurrent/Executor;Landroid/app/admin/DevicePolicyManager$InstallSystemUpdateCallback;)V" since="29"/>
+		<method name="isActivePasswordSufficient()Z"/>
+		<method name="isActivePasswordSufficientForDeviceRequirement()Z" since="31"/>
+		<method name="isAdminActive(Landroid/content/ComponentName;)Z"/>
+		<method name="isAffiliatedUser()Z" since="28"/>
+		<method name="isAlwaysOnVpnLockdownEnabled(Landroid/content/ComponentName;)Z" since="29"/>
+		<method name="isApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
+		<method name="isBackupServiceEnabled(Landroid/content/ComponentName;)Z" since="26"/>
+		<method name="isCallerApplicationRestrictionsManagingPackage()Z" since="24" deprecated="26"/>
+		<method name="isCommonCriteriaModeEnabled(Landroid/content/ComponentName;)Z" since="30"/>
+		<method name="isComplianceAcknowledgementRequired()Z" since="31"/>
+		<method name="isDeviceIdAttestationSupported()Z" since="28"/>
+		<method name="isDeviceOwnerApp(Ljava/lang/String;)Z" since="18"/>
+		<method name="isEphemeralUser(Landroid/content/ComponentName;)Z" since="28"/>
+		<method name="isKeyPairGrantedToWifiAuth(Ljava/lang/String;)Z" since="31"/>
+		<method name="isLockTaskPermitted(Ljava/lang/String;)Z" since="21"/>
+		<method name="isLogoutEnabled()Z" since="28"/>
+		<method name="isManagedProfile(Landroid/content/ComponentName;)Z" since="24"/>
+		<method name="isMasterVolumeMuted(Landroid/content/ComponentName;)Z" since="21"/>
+		<method name="isNetworkLoggingEnabled(Landroid/content/ComponentName;)Z" since="26"/>
+		<method name="isOrganizationOwnedDeviceWithManagedProfile()Z" since="30"/>
+		<method name="isOverrideApnEnabled(Landroid/content/ComponentName;)Z" since="28"/>
+		<method name="isPackageSuspended(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="24"/>
+		<method name="isPreferentialNetworkServiceEnabled()Z" since="31"/>
+		<method name="isProfileOwnerApp(Ljava/lang/String;)Z" since="21"/>
+		<method name="isProvisioningAllowed(Ljava/lang/String;)Z" since="24"/>
+		<method name="isResetPasswordTokenActive(Landroid/content/ComponentName;)Z" since="26"/>
+		<method name="isSafeOperation(I)Z" since="31"/>
+		<method name="isSecurityLoggingEnabled(Landroid/content/ComponentName;)Z" since="24"/>
+		<method name="isUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
+		<method name="isUniqueDeviceAttestationSupported()Z" since="30"/>
+		<method name="isUsbDataSignalingEnabled()Z" since="31"/>
+		<method name="isUsingUnifiedPassword(Landroid/content/ComponentName;)Z" since="28"/>
+		<method name="listForegroundAffiliatedUsers()Ljava/util/List;" since="31"/>
+		<method name="lockNow()V"/>
+		<method name="lockNow(I)V" since="26"/>
+		<method name="logoutUser(Landroid/content/ComponentName;)I" since="28"/>
+		<method name="reboot(Landroid/content/ComponentName;)V" since="24"/>
+		<method name="removeActiveAdmin(Landroid/content/ComponentName;)V"/>
+		<method name="removeCrossProfileWidgetProvider(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
+		<method name="removeKeyPair(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="24"/>
+		<method name="removeOverrideApn(Landroid/content/ComponentName;I)Z" since="28"/>
+		<method name="removeUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z" since="21"/>
+		<method name="requestBugreport(Landroid/content/ComponentName;)Z" since="24"/>
+		<method name="resetPassword(Ljava/lang/String;I)Z" deprecated="30"/>
+		<method name="resetPasswordWithToken(Landroid/content/ComponentName;Ljava/lang/String;[BI)Z" since="26"/>
+		<method name="retrieveNetworkLogs(Landroid/content/ComponentName;J)Ljava/util/List;" since="26"/>
+		<method name="retrievePreRebootSecurityLogs(Landroid/content/ComponentName;)Ljava/util/List;" since="24"/>
+		<method name="retrieveSecurityLogs(Landroid/content/ComponentName;)Ljava/util/List;" since="24"/>
+		<method name="revokeKeyPairFromApp(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)Z" since="30"/>
+		<method name="revokeKeyPairFromWifiAuth(Ljava/lang/String;)Z" since="31"/>
+		<method name="setAccountManagementDisabled(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="21"/>
+		<method name="setAffiliationIds(Landroid/content/ComponentName;Ljava/util/Set;)V" since="26"/>
+		<method name="setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="24"/>
+		<method name="setAlwaysOnVpnPackage(Landroid/content/ComponentName;Ljava/lang/String;ZLjava/util/Set;)V" since="29"/>
+		<method name="setApplicationHidden(Landroid/content/ComponentName;Ljava/lang/String;Z)Z" since="21"/>
+		<method name="setApplicationRestrictions(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)V" since="21"/>
+		<method name="setApplicationRestrictionsManagingPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="24" deprecated="26"/>
+		<method name="setAutoTimeEnabled(Landroid/content/ComponentName;Z)V" since="30"/>
+		<method name="setAutoTimeRequired(Landroid/content/ComponentName;Z)V" since="21" deprecated="30"/>
+		<method name="setAutoTimeZoneEnabled(Landroid/content/ComponentName;Z)V" since="30"/>
+		<method name="setBackupServiceEnabled(Landroid/content/ComponentName;Z)V" since="26"/>
+		<method name="setBluetoothContactSharingDisabled(Landroid/content/ComponentName;Z)V" since="23"/>
+		<method name="setCameraDisabled(Landroid/content/ComponentName;Z)V" since="14"/>
+		<method name="setCertInstallerPackage(Landroid/content/ComponentName;Ljava/lang/String;)V" since="23" deprecated="26"/>
+		<method name="setCommonCriteriaModeEnabled(Landroid/content/ComponentName;Z)V" since="30"/>
+		<method name="setConfiguredNetworksLockdownState(Landroid/content/ComponentName;Z)V" since="30"/>
+		<method name="setCrossProfileCalendarPackages(Landroid/content/ComponentName;Ljava/util/Set;)V" since="29"/>
+		<method name="setCrossProfileCallerIdDisabled(Landroid/content/ComponentName;Z)V" since="21"/>
+		<method name="setCrossProfileContactsSearchDisabled(Landroid/content/ComponentName;Z)V" since="24"/>
+		<method name="setCrossProfilePackages(Landroid/content/ComponentName;Ljava/util/Set;)V" since="30"/>
+		<method name="setDefaultSmsApplication(Landroid/content/ComponentName;Ljava/lang/String;)V" since="29"/>
+		<method name="setDelegatedScopes(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)V" since="26"/>
+		<method name="setDeviceOwnerLockScreenInfo(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
+		<method name="setEndUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="28"/>
+		<method name="setFactoryResetProtectionPolicy(Landroid/content/ComponentName;Landroid/app/admin/FactoryResetProtectionPolicy;)V" since="30"/>
+		<method name="setGlobalPrivateDnsModeOpportunistic(Landroid/content/ComponentName;)I" since="29"/>
+		<method name="setGlobalPrivateDnsModeSpecifiedHost(Landroid/content/ComponentName;Ljava/lang/String;)I" since="29"/>
+		<method name="setGlobalSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="21"/>
+		<method name="setKeepUninstalledPackages(Landroid/content/ComponentName;Ljava/util/List;)V" since="28"/>
+		<method name="setKeyPairCertificate(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;Z)Z" since="28"/>
+		<method name="setKeyguardDisabled(Landroid/content/ComponentName;Z)Z" since="23"/>
+		<method name="setKeyguardDisabledFeatures(Landroid/content/ComponentName;I)V" since="17"/>
+		<method name="setLocationEnabled(Landroid/content/ComponentName;Z)V" since="30"/>
+		<method name="setLockTaskFeatures(Landroid/content/ComponentName;I)V" since="28"/>
+		<method name="setLockTaskPackages(Landroid/content/ComponentName;[Ljava/lang/String;)V" since="21"/>
+		<method name="setLogoutEnabled(Landroid/content/ComponentName;Z)V" since="28"/>
+		<method name="setLongSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
+		<method name="setManagedProfileMaximumTimeOff(Landroid/content/ComponentName;J)V" since="30"/>
+		<method name="setMasterVolumeMuted(Landroid/content/ComponentName;Z)V" since="21"/>
+		<method name="setMaximumFailedPasswordsForWipe(Landroid/content/ComponentName;I)V"/>
+		<method name="setMaximumTimeToLock(Landroid/content/ComponentName;J)V"/>
+		<method name="setMeteredDataDisabledPackages(Landroid/content/ComponentName;Ljava/util/List;)Ljava/util/List;" since="28"/>
+		<method name="setNearbyAppStreamingPolicy(I)V" since="31"/>
+		<method name="setNearbyNotificationStreamingPolicy(I)V" since="31"/>
+		<method name="setNetworkLoggingEnabled(Landroid/content/ComponentName;Z)V" since="26"/>
+		<method name="setOrganizationColor(Landroid/content/ComponentName;I)V" since="24" deprecated="31"/>
+		<method name="setOrganizationId(Ljava/lang/String;)V" since="31"/>
+		<method name="setOrganizationName(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
+		<method name="setOverrideApnsEnabled(Landroid/content/ComponentName;Z)V" since="28"/>
+		<method name="setPackagesSuspended(Landroid/content/ComponentName;[Ljava/lang/String;Z)[Ljava/lang/String;" since="24"/>
+		<method name="setPasswordExpirationTimeout(Landroid/content/ComponentName;J)V" since="11"/>
+		<method name="setPasswordHistoryLength(Landroid/content/ComponentName;I)V" since="11"/>
+		<method name="setPasswordMinimumLength(Landroid/content/ComponentName;I)V" deprecated="31"/>
+		<method name="setPasswordMinimumLetters(Landroid/content/ComponentName;I)V" since="11" deprecated="31"/>
+		<method name="setPasswordMinimumLowerCase(Landroid/content/ComponentName;I)V" since="11" deprecated="31"/>
+		<method name="setPasswordMinimumNonLetter(Landroid/content/ComponentName;I)V" since="11" deprecated="31"/>
+		<method name="setPasswordMinimumNumeric(Landroid/content/ComponentName;I)V" since="11" deprecated="31"/>
+		<method name="setPasswordMinimumSymbols(Landroid/content/ComponentName;I)V" since="11" deprecated="31"/>
+		<method name="setPasswordMinimumUpperCase(Landroid/content/ComponentName;I)V" since="11" deprecated="31"/>
+		<method name="setPasswordQuality(Landroid/content/ComponentName;I)V" deprecated="31"/>
+		<method name="setPermissionGrantState(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;I)Z" since="23"/>
+		<method name="setPermissionPolicy(Landroid/content/ComponentName;I)V" since="23"/>
+		<method name="setPermittedAccessibilityServices(Landroid/content/ComponentName;Ljava/util/List;)Z" since="21"/>
+		<method name="setPermittedCrossProfileNotificationListeners(Landroid/content/ComponentName;Ljava/util/List;)Z" since="26"/>
+		<method name="setPermittedInputMethods(Landroid/content/ComponentName;Ljava/util/List;)Z" since="21"/>
+		<method name="setPersonalAppsSuspended(Landroid/content/ComponentName;Z)V" since="30"/>
+		<method name="setPreferentialNetworkServiceEnabled(Z)V" since="31"/>
+		<method name="setProfileEnabled(Landroid/content/ComponentName;)V" since="21"/>
+		<method name="setProfileName(Landroid/content/ComponentName;Ljava/lang/String;)V" since="21"/>
+		<method name="setRecommendedGlobalProxy(Landroid/content/ComponentName;Landroid/net/ProxyInfo;)V" since="21"/>
+		<method name="setRequiredPasswordComplexity(I)V" since="31"/>
+		<method name="setRequiredStrongAuthTimeout(Landroid/content/ComponentName;J)V" since="26"/>
+		<method name="setResetPasswordToken(Landroid/content/ComponentName;[B)Z" since="26"/>
+		<method name="setRestrictionsProvider(Landroid/content/ComponentName;Landroid/content/ComponentName;)V" since="21"/>
+		<method name="setScreenCaptureDisabled(Landroid/content/ComponentName;Z)V" since="21"/>
+		<method name="setSecureSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="21"/>
+		<method name="setSecurityLoggingEnabled(Landroid/content/ComponentName;Z)V" since="24"/>
+		<method name="setShortSupportMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="24"/>
+		<method name="setStartUserSessionMessage(Landroid/content/ComponentName;Ljava/lang/CharSequence;)V" since="28"/>
+		<method name="setStatusBarDisabled(Landroid/content/ComponentName;Z)Z" since="23"/>
+		<method name="setStorageEncryption(Landroid/content/ComponentName;Z)I" since="11" deprecated="30"/>
+		<method name="setSystemSetting(Landroid/content/ComponentName;Ljava/lang/String;Ljava/lang/String;)V" since="28"/>
+		<method name="setSystemUpdatePolicy(Landroid/content/ComponentName;Landroid/app/admin/SystemUpdatePolicy;)V" since="23"/>
+		<method name="setTime(Landroid/content/ComponentName;J)Z" since="28"/>
+		<method name="setTimeZone(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="28"/>
+		<method name="setTrustAgentConfiguration(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/os/PersistableBundle;)V" since="23"/>
+		<method name="setUninstallBlocked(Landroid/content/ComponentName;Ljava/lang/String;Z)V" since="21"/>
+		<method name="setUsbDataSignalingEnabled(Z)V" since="31"/>
+		<method name="setUserControlDisabledPackages(Landroid/content/ComponentName;Ljava/util/List;)V" since="30"/>
+		<method name="setUserIcon(Landroid/content/ComponentName;Landroid/graphics/Bitmap;)V" since="23"/>
+		<method name="startUserInBackground(Landroid/content/ComponentName;Landroid/os/UserHandle;)I" since="28"/>
+		<method name="stopUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)I" since="28"/>
+		<method name="switchUser(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z" since="21"/>
+		<method name="transferOwnership(Landroid/content/ComponentName;Landroid/content/ComponentName;Landroid/os/PersistableBundle;)V" since="28"/>
+		<method name="uninstallAllUserCaCerts(Landroid/content/ComponentName;)V" since="21"/>
+		<method name="uninstallCaCert(Landroid/content/ComponentName;[B)V" since="21"/>
+		<method name="updateOverrideApn(Landroid/content/ComponentName;ILandroid/telephony/data/ApnSetting;)Z" since="28"/>
+		<method name="wipeData(I)V"/>
+		<method name="wipeData(ILjava/lang/CharSequence;)V" since="28"/>
+		<field name="ACTION_ADD_DEVICE_ADMIN"/>
+		<field name="ACTION_ADMIN_POLICY_COMPLIANCE" since="29"/>
+		<field name="ACTION_APPLICATION_DELEGATION_SCOPES_CHANGED" since="26"/>
+		<field name="ACTION_CHECK_POLICY_COMPLIANCE" since="30"/>
+		<field name="ACTION_DEVICE_ADMIN_SERVICE" since="26"/>
+		<field name="ACTION_DEVICE_OWNER_CHANGED" since="23"/>
+		<field name="ACTION_GET_PROVISIONING_MODE" since="29"/>
+		<field name="ACTION_MANAGED_PROFILE_PROVISIONED" since="23"/>
+		<field name="ACTION_PROFILE_OWNER_CHANGED" since="28"/>
+		<field name="ACTION_PROVISIONING_SUCCESSFUL" since="26"/>
+		<field name="ACTION_PROVISION_MANAGED_DEVICE" since="23" deprecated="31"/>
+		<field name="ACTION_PROVISION_MANAGED_PROFILE" since="21"/>
+		<field name="ACTION_SET_NEW_PARENT_PROFILE_PASSWORD" since="24"/>
+		<field name="ACTION_SET_NEW_PASSWORD"/>
+		<field name="ACTION_START_ENCRYPTION" since="11"/>
+		<field name="ACTION_SYSTEM_UPDATE_POLICY_CHANGED" since="23"/>
+		<field name="DELEGATION_APP_RESTRICTIONS" since="26"/>
+		<field name="DELEGATION_BLOCK_UNINSTALL" since="26"/>
+		<field name="DELEGATION_CERT_INSTALL" since="26"/>
+		<field name="DELEGATION_CERT_SELECTION" since="29"/>
+		<field name="DELEGATION_ENABLE_SYSTEM_APP" since="26"/>
+		<field name="DELEGATION_INSTALL_EXISTING_PACKAGE" since="28"/>
+		<field name="DELEGATION_KEEP_UNINSTALLED_PACKAGES" since="28"/>
+		<field name="DELEGATION_NETWORK_LOGGING" since="29"/>
+		<field name="DELEGATION_PACKAGE_ACCESS" since="26"/>
+		<field name="DELEGATION_PERMISSION_GRANT" since="26"/>
+		<field name="DELEGATION_SECURITY_LOGGING" since="31"/>
+		<field name="ENCRYPTION_STATUS_ACTIVATING" since="11"/>
+		<field name="ENCRYPTION_STATUS_ACTIVE" since="11"/>
+		<field name="ENCRYPTION_STATUS_ACTIVE_DEFAULT_KEY" since="23"/>
+		<field name="ENCRYPTION_STATUS_ACTIVE_PER_USER" since="24"/>
+		<field name="ENCRYPTION_STATUS_INACTIVE" since="11"/>
+		<field name="ENCRYPTION_STATUS_UNSUPPORTED" since="11"/>
+		<field name="EXTRA_ADD_EXPLANATION"/>
+		<field name="EXTRA_DELEGATION_SCOPES" since="26"/>
+		<field name="EXTRA_DEVICE_ADMIN"/>
+		<field name="EXTRA_DEVICE_PASSWORD_REQUIREMENT_ONLY" since="31"/>
+		<field name="EXTRA_PASSWORD_COMPLEXITY" since="29"/>
+		<field name="EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE" since="22"/>
+		<field name="EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE" since="21"/>
+		<field name="EXTRA_PROVISIONING_ALLOWED_PROVISIONING_MODES" since="31"/>
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME" since="23"/>
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE" since="23"/>
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM" since="21"/>
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER" since="21"/>
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION" since="21"/>
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME" since="21" deprecated="23"/>
+		<field name="EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM" since="23"/>
+		<field name="EXTRA_PROVISIONING_DISCLAIMERS" since="26"/>
+		<field name="EXTRA_PROVISIONING_DISCLAIMER_CONTENT" since="26"/>
+		<field name="EXTRA_PROVISIONING_DISCLAIMER_HEADER" since="26"/>
+		<field name="EXTRA_PROVISIONING_EMAIL_ADDRESS" since="21" deprecated="26"/>
+		<field name="EXTRA_PROVISIONING_IMEI" since="29"/>
+		<field name="EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION" since="26"/>
+		<field name="EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED" since="22"/>
+		<field name="EXTRA_PROVISIONING_LOCALE" since="21"/>
+		<field name="EXTRA_PROVISIONING_LOCAL_TIME" since="21"/>
+		<field name="EXTRA_PROVISIONING_LOGO_URI" since="24"/>
+		<field name="EXTRA_PROVISIONING_MAIN_COLOR" since="24" deprecated="31"/>
+		<field name="EXTRA_PROVISIONING_MODE" since="29"/>
+		<field name="EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT" since="31"/>
+		<field name="EXTRA_PROVISIONING_SERIAL_NUMBER" since="29"/>
+		<field name="EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS" since="29"/>
+		<field name="EXTRA_PROVISIONING_SKIP_ENCRYPTION" since="23"/>
+		<field name="EXTRA_PROVISIONING_SKIP_USER_CONSENT" since="26" deprecated="31"/>
+		<field name="EXTRA_PROVISIONING_TIME_ZONE" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY" since="29"/>
+		<field name="EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE" since="29"/>
+		<field name="EXTRA_PROVISIONING_WIFI_DOMAIN" since="29"/>
+		<field name="EXTRA_PROVISIONING_WIFI_EAP_METHOD" since="29"/>
+		<field name="EXTRA_PROVISIONING_WIFI_HIDDEN" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_IDENTITY" since="29"/>
+		<field name="EXTRA_PROVISIONING_WIFI_PAC_URL" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_PASSWORD" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_PHASE2_AUTH" since="29"/>
+		<field name="EXTRA_PROVISIONING_WIFI_PROXY_BYPASS" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_PROXY_HOST" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_PROXY_PORT" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_SECURITY_TYPE" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_SSID" since="21"/>
+		<field name="EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE" since="29"/>
+		<field name="FLAG_EVICT_CREDENTIAL_ENCRYPTION_KEY" since="26"/>
+		<field name="FLAG_MANAGED_CAN_ACCESS_PARENT" since="21"/>
+		<field name="FLAG_PARENT_CAN_ACCESS_MANAGED" since="21"/>
+		<field name="ID_TYPE_BASE_INFO" since="28"/>
+		<field name="ID_TYPE_IMEI" since="28"/>
+		<field name="ID_TYPE_INDIVIDUAL_ATTESTATION" since="30"/>
+		<field name="ID_TYPE_MEID" since="28"/>
+		<field name="ID_TYPE_SERIAL" since="28"/>
+		<field name="INSTALLKEY_REQUEST_CREDENTIALS_ACCESS" since="28"/>
+		<field name="INSTALLKEY_SET_USER_SELECTABLE" since="28"/>
+		<field name="KEYGUARD_DISABLE_BIOMETRICS" since="28"/>
+		<field name="KEYGUARD_DISABLE_FACE" since="28"/>
+		<field name="KEYGUARD_DISABLE_FEATURES_ALL" since="17"/>
+		<field name="KEYGUARD_DISABLE_FEATURES_NONE" since="17"/>
+		<field name="KEYGUARD_DISABLE_FINGERPRINT" since="21"/>
+		<field name="KEYGUARD_DISABLE_IRIS" since="28"/>
+		<field name="KEYGUARD_DISABLE_REMOTE_INPUT" since="24"/>
+		<field name="KEYGUARD_DISABLE_SECURE_CAMERA" since="17"/>
+		<field name="KEYGUARD_DISABLE_SECURE_NOTIFICATIONS" since="21"/>
+		<field name="KEYGUARD_DISABLE_TRUST_AGENTS" since="21"/>
+		<field name="KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS" since="21"/>
+		<field name="KEYGUARD_DISABLE_WIDGETS_ALL" since="17"/>
+		<field name="LEAVE_ALL_SYSTEM_APPS_ENABLED" since="28"/>
+		<field name="LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK" since="30"/>
+		<field name="LOCK_TASK_FEATURE_GLOBAL_ACTIONS" since="28"/>
+		<field name="LOCK_TASK_FEATURE_HOME" since="28"/>
+		<field name="LOCK_TASK_FEATURE_KEYGUARD" since="28"/>
+		<field name="LOCK_TASK_FEATURE_NONE" since="28"/>
+		<field name="LOCK_TASK_FEATURE_NOTIFICATIONS" since="28"/>
+		<field name="LOCK_TASK_FEATURE_OVERVIEW" since="28"/>
+		<field name="LOCK_TASK_FEATURE_SYSTEM_INFO" since="28"/>
+		<field name="MAKE_USER_EPHEMERAL" since="28"/>
+		<field name="MIME_TYPE_PROVISIONING_NFC" since="21"/>
+		<field name="NEARBY_STREAMING_DISABLED" since="31"/>
+		<field name="NEARBY_STREAMING_ENABLED" since="31"/>
+		<field name="NEARBY_STREAMING_NOT_CONTROLLED_BY_POLICY" since="31"/>
+		<field name="NEARBY_STREAMING_SAME_MANAGED_ACCOUNT_ONLY" since="31"/>
+		<field name="OPERATION_SAFETY_REASON_DRIVING_DISTRACTION" since="31"/>
+		<field name="PASSWORD_COMPLEXITY_HIGH" since="29"/>
+		<field name="PASSWORD_COMPLEXITY_LOW" since="29"/>
+		<field name="PASSWORD_COMPLEXITY_MEDIUM" since="29"/>
+		<field name="PASSWORD_COMPLEXITY_NONE" since="29"/>
+		<field name="PASSWORD_QUALITY_ALPHABETIC"/>
+		<field name="PASSWORD_QUALITY_ALPHANUMERIC"/>
+		<field name="PASSWORD_QUALITY_BIOMETRIC_WEAK" since="14"/>
+		<field name="PASSWORD_QUALITY_COMPLEX" since="11"/>
+		<field name="PASSWORD_QUALITY_NUMERIC"/>
+		<field name="PASSWORD_QUALITY_NUMERIC_COMPLEX" since="21"/>
+		<field name="PASSWORD_QUALITY_SOMETHING"/>
+		<field name="PASSWORD_QUALITY_UNSPECIFIED"/>
+		<field name="PERMISSION_GRANT_STATE_DEFAULT" since="23"/>
+		<field name="PERMISSION_GRANT_STATE_DENIED" since="23"/>
+		<field name="PERMISSION_GRANT_STATE_GRANTED" since="23"/>
+		<field name="PERMISSION_POLICY_AUTO_DENY" since="23"/>
+		<field name="PERMISSION_POLICY_AUTO_GRANT" since="23"/>
+		<field name="PERMISSION_POLICY_PROMPT" since="23"/>
+		<field name="PERSONAL_APPS_NOT_SUSPENDED" since="30"/>
+		<field name="PERSONAL_APPS_SUSPENDED_EXPLICITLY" since="30"/>
+		<field name="PERSONAL_APPS_SUSPENDED_PROFILE_TIMEOUT" since="30"/>
+		<field name="POLICY_DISABLE_CAMERA" since="26"/>
+		<field name="POLICY_DISABLE_SCREEN_CAPTURE" since="26"/>
+		<field name="PRIVATE_DNS_MODE_OFF" since="29"/>
+		<field name="PRIVATE_DNS_MODE_OPPORTUNISTIC" since="29"/>
+		<field name="PRIVATE_DNS_MODE_PROVIDER_HOSTNAME" since="29"/>
+		<field name="PRIVATE_DNS_MODE_UNKNOWN" since="29"/>
+		<field name="PRIVATE_DNS_SET_ERROR_FAILURE_SETTING" since="29"/>
+		<field name="PRIVATE_DNS_SET_ERROR_HOST_NOT_SERVING" since="29"/>
+		<field name="PRIVATE_DNS_SET_NO_ERROR" since="29"/>
+		<field name="PROVISIONING_MODE_FULLY_MANAGED_DEVICE" since="29"/>
+		<field name="PROVISIONING_MODE_MANAGED_PROFILE" since="29"/>
+		<field name="PROVISIONING_MODE_MANAGED_PROFILE_ON_PERSONAL_DEVICE" since="31"/>
+		<field name="RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT" since="23"/>
+		<field name="RESET_PASSWORD_REQUIRE_ENTRY"/>
+		<field name="SKIP_SETUP_WIZARD" since="24"/>
+		<field name="WIPE_EUICC" since="28"/>
+		<field name="WIPE_EXTERNAL_STORAGE" since="9"/>
+		<field name="WIPE_RESET_PROTECTION_DATA" since="22"/>
+		<field name="WIPE_SILENTLY" since="29"/>
+	</class>
+	<class name="android/app/admin/DevicePolicyManager$InstallSystemUpdateCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onInstallUpdateError(ILjava/lang/String;)V"/>
+		<field name="UPDATE_ERROR_BATTERY_LOW"/>
+		<field name="UPDATE_ERROR_FILE_NOT_FOUND"/>
+		<field name="UPDATE_ERROR_INCORRECT_OS_VERSION"/>
+		<field name="UPDATE_ERROR_UNKNOWN"/>
+		<field name="UPDATE_ERROR_UPDATE_FILE_INVALID"/>
+	</class>
+	<class name="android/app/admin/DevicePolicyManager$OnClearApplicationUserDataListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onApplicationUserDataCleared(Ljava/lang/String;Z)V"/>
+	</class>
+	<class name="android/app/admin/DnsEvent" since="26">
+		<extends name="android/app/admin/NetworkEvent"/>
+		<method name="getHostname()Ljava/lang/String;"/>
+		<method name="getInetAddresses()Ljava/util/List;"/>
+		<method name="getTotalResolvedAddressCount()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/admin/FactoryResetProtectionPolicy" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFactoryResetProtectionAccounts()Ljava/util/List;"/>
+		<method name="isFactoryResetProtectionEnabled()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/admin/FactoryResetProtectionPolicy$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/app/admin/FactoryResetProtectionPolicy;"/>
+		<method name="setFactoryResetProtectionAccounts(Ljava/util/List;)Landroid/app/admin/FactoryResetProtectionPolicy$Builder;"/>
+		<method name="setFactoryResetProtectionEnabled(Z)Landroid/app/admin/FactoryResetProtectionPolicy$Builder;"/>
+	</class>
+	<class name="android/app/admin/FreezePeriod" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/time/MonthDay;Ljava/time/MonthDay;)V"/>
+		<method name="getEnd()Ljava/time/MonthDay;"/>
+		<method name="getStart()Ljava/time/MonthDay;"/>
+	</class>
+	<class name="android/app/admin/NetworkEvent" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getId()J" since="28"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getTimestamp()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/admin/SecurityLog" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="LEVEL_ERROR" since="28"/>
+		<field name="LEVEL_INFO" since="28"/>
+		<field name="LEVEL_WARNING" since="28"/>
+		<field name="TAG_ADB_SHELL_CMD"/>
+		<field name="TAG_ADB_SHELL_INTERACTIVE"/>
+		<field name="TAG_APP_PROCESS_START"/>
+		<field name="TAG_CAMERA_POLICY_SET" since="30"/>
+		<field name="TAG_CERT_AUTHORITY_INSTALLED" since="28"/>
+		<field name="TAG_CERT_AUTHORITY_REMOVED" since="28"/>
+		<field name="TAG_CERT_VALIDATION_FAILURE" since="28"/>
+		<field name="TAG_CRYPTO_SELF_TEST_COMPLETED" since="28"/>
+		<field name="TAG_KEYGUARD_DISABLED_FEATURES_SET" since="28"/>
+		<field name="TAG_KEYGUARD_DISMISSED"/>
+		<field name="TAG_KEYGUARD_DISMISS_AUTH_ATTEMPT"/>
+		<field name="TAG_KEYGUARD_SECURED"/>
+		<field name="TAG_KEY_DESTRUCTION" since="28"/>
+		<field name="TAG_KEY_GENERATED" since="28"/>
+		<field name="TAG_KEY_IMPORT" since="28"/>
+		<field name="TAG_KEY_INTEGRITY_VIOLATION" since="28"/>
+		<field name="TAG_LOGGING_STARTED" since="28"/>
+		<field name="TAG_LOGGING_STOPPED" since="28"/>
+		<field name="TAG_LOG_BUFFER_SIZE_CRITICAL" since="28"/>
+		<field name="TAG_MAX_PASSWORD_ATTEMPTS_SET" since="28"/>
+		<field name="TAG_MAX_SCREEN_LOCK_TIMEOUT_SET" since="28"/>
+		<field name="TAG_MEDIA_MOUNT" since="28"/>
+		<field name="TAG_MEDIA_UNMOUNT" since="28"/>
+		<field name="TAG_OS_SHUTDOWN" since="28"/>
+		<field name="TAG_OS_STARTUP" since="28"/>
+		<field name="TAG_PASSWORD_COMPLEXITY_REQUIRED" since="31"/>
+		<field name="TAG_PASSWORD_COMPLEXITY_SET" since="28"/>
+		<field name="TAG_PASSWORD_EXPIRATION_SET" since="28"/>
+		<field name="TAG_PASSWORD_HISTORY_LENGTH_SET" since="28"/>
+		<field name="TAG_REMOTE_LOCK" since="28"/>
+		<field name="TAG_SYNC_RECV_FILE"/>
+		<field name="TAG_SYNC_SEND_FILE"/>
+		<field name="TAG_USER_RESTRICTION_ADDED" since="28"/>
+		<field name="TAG_USER_RESTRICTION_REMOVED" since="28"/>
+		<field name="TAG_WIPE_FAILURE" since="28"/>
+	</class>
+	<class name="android/app/admin/SecurityLog$SecurityEvent" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getData()Ljava/lang/Object;"/>
+		<method name="getId()J" since="28"/>
+		<method name="getLogLevel()I" since="28"/>
+		<method name="getTag()I"/>
+		<method name="getTimeNanos()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/admin/SystemUpdateInfo" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getReceivedTime()J"/>
+		<method name="getSecurityPatchState()I"/>
+		<field name="CREATOR"/>
+		<field name="SECURITY_PATCH_STATE_FALSE"/>
+		<field name="SECURITY_PATCH_STATE_TRUE"/>
+		<field name="SECURITY_PATCH_STATE_UNKNOWN"/>
+	</class>
+	<class name="android/app/admin/SystemUpdatePolicy" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createAutomaticInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;"/>
+		<method name="createPostponeInstallPolicy()Landroid/app/admin/SystemUpdatePolicy;"/>
+		<method name="createWindowedInstallPolicy(II)Landroid/app/admin/SystemUpdatePolicy;"/>
+		<method name="getFreezePeriods()Ljava/util/List;" since="28"/>
+		<method name="getInstallWindowEnd()I"/>
+		<method name="getInstallWindowStart()I"/>
+		<method name="getPolicyType()I"/>
+		<method name="setFreezePeriods(Ljava/util/List;)Landroid/app/admin/SystemUpdatePolicy;" since="28"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_INSTALL_AUTOMATIC"/>
+		<field name="TYPE_INSTALL_WINDOWED"/>
+		<field name="TYPE_POSTPONE"/>
+	</class>
+	<class name="android/app/admin/SystemUpdatePolicy$ValidationFailedException" since="28">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getErrorCode()I"/>
+		<field name="CREATOR"/>
+		<field name="ERROR_COMBINED_FREEZE_PERIOD_TOO_CLOSE"/>
+		<field name="ERROR_COMBINED_FREEZE_PERIOD_TOO_LONG"/>
+		<field name="ERROR_DUPLICATE_OR_OVERLAP"/>
+		<field name="ERROR_NEW_FREEZE_PERIOD_TOO_CLOSE"/>
+		<field name="ERROR_NEW_FREEZE_PERIOD_TOO_LONG"/>
+		<field name="ERROR_UNKNOWN"/>
+	</class>
+	<class name="android/app/admin/UnsafeStateException" since="31">
+		<extends name="java/lang/IllegalStateException"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getReasons()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchBatchResult" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getAll()Ljava/util/Map;"/>
+		<method name="getFailures()Ljava/util/Map;"/>
+		<method name="getSuccesses()Ljava/util/Map;"/>
+		<method name="isSuccess()Z"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchBatchResult$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchBatchResult;"/>
+		<method name="setFailure(Ljava/lang/Object;ILjava/lang/String;)Landroid/app/appsearch/AppSearchBatchResult$Builder;"/>
+		<method name="setResult(Ljava/lang/Object;Landroid/app/appsearch/AppSearchResult;)Landroid/app/appsearch/AppSearchBatchResult$Builder;"/>
+		<method name="setSuccess(Ljava/lang/Object;Ljava/lang/Object;)Landroid/app/appsearch/AppSearchBatchResult$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="createGlobalSearchSession(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="createSearchSession(Landroid/app/appsearch/AppSearchManager$SearchContext;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchManager$SearchContext" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDatabaseName()Ljava/lang/String;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchManager$SearchContext$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchManager$SearchContext;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchResult" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getErrorMessage()Ljava/lang/String;"/>
+		<method name="getResultCode()I"/>
+		<method name="getResultValue()Ljava/lang/Object;"/>
+		<method name="isSuccess()Z"/>
+		<method name="newFailedResult(ILjava/lang/String;)Landroid/app/appsearch/AppSearchResult;"/>
+		<method name="newSuccessfulResult(Ljava/lang/Object;)Landroid/app/appsearch/AppSearchResult;"/>
+		<field name="RESULT_INTERNAL_ERROR"/>
+		<field name="RESULT_INVALID_ARGUMENT"/>
+		<field name="RESULT_INVALID_SCHEMA"/>
+		<field name="RESULT_IO_ERROR"/>
+		<field name="RESULT_NOT_FOUND"/>
+		<field name="RESULT_OK"/>
+		<field name="RESULT_OUT_OF_SPACE"/>
+		<field name="RESULT_SECURITY_ERROR"/>
+		<field name="RESULT_UNKNOWN_ERROR"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getProperties()Ljava/util/List;"/>
+		<method name="getSchemaType()Ljava/lang/String;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$BooleanPropertyConfig" since="31">
+		<extends name="android/app/appsearch/AppSearchSchema$PropertyConfig"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$BooleanPropertyConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchSchema$BooleanPropertyConfig;"/>
+		<method name="setCardinality(I)Landroid/app/appsearch/AppSearchSchema$BooleanPropertyConfig$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="addProperty(Landroid/app/appsearch/AppSearchSchema$PropertyConfig;)Landroid/app/appsearch/AppSearchSchema$Builder;"/>
+		<method name="build()Landroid/app/appsearch/AppSearchSchema;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$BytesPropertyConfig" since="31">
+		<extends name="android/app/appsearch/AppSearchSchema$PropertyConfig"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$BytesPropertyConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchSchema$BytesPropertyConfig;"/>
+		<method name="setCardinality(I)Landroid/app/appsearch/AppSearchSchema$BytesPropertyConfig$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$DocumentPropertyConfig" since="31">
+		<extends name="android/app/appsearch/AppSearchSchema$PropertyConfig"/>
+		<method name="getSchemaType()Ljava/lang/String;"/>
+		<method name="shouldIndexNestedProperties()Z"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$DocumentPropertyConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchSchema$DocumentPropertyConfig;"/>
+		<method name="setCardinality(I)Landroid/app/appsearch/AppSearchSchema$DocumentPropertyConfig$Builder;"/>
+		<method name="setShouldIndexNestedProperties(Z)Landroid/app/appsearch/AppSearchSchema$DocumentPropertyConfig$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$DoublePropertyConfig" since="31">
+		<extends name="android/app/appsearch/AppSearchSchema$PropertyConfig"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$DoublePropertyConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchSchema$DoublePropertyConfig;"/>
+		<method name="setCardinality(I)Landroid/app/appsearch/AppSearchSchema$DoublePropertyConfig$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$LongPropertyConfig" since="31">
+		<extends name="android/app/appsearch/AppSearchSchema$PropertyConfig"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$LongPropertyConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchSchema$LongPropertyConfig;"/>
+		<method name="setCardinality(I)Landroid/app/appsearch/AppSearchSchema$LongPropertyConfig$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$PropertyConfig" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getCardinality()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<field name="CARDINALITY_OPTIONAL"/>
+		<field name="CARDINALITY_REPEATED"/>
+		<field name="CARDINALITY_REQUIRED"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$StringPropertyConfig" since="31">
+		<extends name="android/app/appsearch/AppSearchSchema$PropertyConfig"/>
+		<method name="getIndexingType()I"/>
+		<method name="getTokenizerType()I"/>
+		<field name="INDEXING_TYPE_EXACT_TERMS"/>
+		<field name="INDEXING_TYPE_NONE"/>
+		<field name="INDEXING_TYPE_PREFIXES"/>
+		<field name="TOKENIZER_TYPE_NONE"/>
+		<field name="TOKENIZER_TYPE_PLAIN"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSchema$StringPropertyConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/AppSearchSchema$StringPropertyConfig;"/>
+		<method name="setCardinality(I)Landroid/app/appsearch/AppSearchSchema$StringPropertyConfig$Builder;"/>
+		<method name="setIndexingType(I)Landroid/app/appsearch/AppSearchSchema$StringPropertyConfig$Builder;"/>
+		<method name="setTokenizerType(I)Landroid/app/appsearch/AppSearchSchema$StringPropertyConfig$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/AppSearchSession" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="getByDocumentId(Landroid/app/appsearch/GetByDocumentIdRequest;Ljava/util/concurrent/Executor;Landroid/app/appsearch/BatchResultCallback;)V"/>
+		<method name="getNamespaces(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="getSchema(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="getStorageInfo(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="put(Landroid/app/appsearch/PutDocumentsRequest;Ljava/util/concurrent/Executor;Landroid/app/appsearch/BatchResultCallback;)V"/>
+		<method name="remove(Landroid/app/appsearch/RemoveByDocumentIdRequest;Ljava/util/concurrent/Executor;Landroid/app/appsearch/BatchResultCallback;)V"/>
+		<method name="remove(Ljava/lang/String;Landroid/app/appsearch/SearchSpec;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="reportUsage(Landroid/app/appsearch/ReportUsageRequest;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="search(Ljava/lang/String;Landroid/app/appsearch/SearchSpec;)Landroid/app/appsearch/SearchResults;"/>
+		<method name="setSchema(Landroid/app/appsearch/SetSchemaRequest;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+	</class>
+	<class name="android/app/appsearch/BatchResultCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onResult(Landroid/app/appsearch/AppSearchBatchResult;)V"/>
+		<method name="onSystemError(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/app/appsearch/GenericDocument" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/appsearch/GenericDocument;)V"/>
+		<method name="getCreationTimestampMillis()J"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getMaxIndexedProperties()I"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getPropertyBoolean(Ljava/lang/String;)Z"/>
+		<method name="getPropertyBooleanArray(Ljava/lang/String;)[Z"/>
+		<method name="getPropertyBytes(Ljava/lang/String;)[B"/>
+		<method name="getPropertyBytesArray(Ljava/lang/String;)[[B"/>
+		<method name="getPropertyDocument(Ljava/lang/String;)Landroid/app/appsearch/GenericDocument;"/>
+		<method name="getPropertyDocumentArray(Ljava/lang/String;)[Landroid/app/appsearch/GenericDocument;"/>
+		<method name="getPropertyDouble(Ljava/lang/String;)D"/>
+		<method name="getPropertyDoubleArray(Ljava/lang/String;)[D"/>
+		<method name="getPropertyLong(Ljava/lang/String;)J"/>
+		<method name="getPropertyLongArray(Ljava/lang/String;)[J"/>
+		<method name="getPropertyNames()Ljava/util/Set;"/>
+		<method name="getPropertyString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getPropertyStringArray(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="getSchemaType()Ljava/lang/String;"/>
+		<method name="getScore()I"/>
+		<method name="getTtlMillis()J"/>
+	</class>
+	<class name="android/app/appsearch/GenericDocument$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/GenericDocument;"/>
+		<method name="setCreationTimestampMillis(J)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setPropertyBoolean(Ljava/lang/String;[Z)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setPropertyBytes(Ljava/lang/String;[[B)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setPropertyDocument(Ljava/lang/String;[Landroid/app/appsearch/GenericDocument;)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setPropertyDouble(Ljava/lang/String;[D)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setPropertyLong(Ljava/lang/String;[J)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setPropertyString(Ljava/lang/String;[Ljava/lang/String;)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setScore(I)Landroid/app/appsearch/GenericDocument$Builder;"/>
+		<method name="setTtlMillis(J)Landroid/app/appsearch/GenericDocument$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/GetByDocumentIdRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getIds()Ljava/util/Set;"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+		<method name="getProjections()Ljava/util/Map;"/>
+		<field name="PROJECTION_SCHEMA_TYPE_WILDCARD"/>
+	</class>
+	<class name="android/app/appsearch/GetByDocumentIdRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="addIds(Ljava/util/Collection;)Landroid/app/appsearch/GetByDocumentIdRequest$Builder;"/>
+		<method name="addIds([Ljava/lang/String;)Landroid/app/appsearch/GetByDocumentIdRequest$Builder;"/>
+		<method name="addProjection(Ljava/lang/String;Ljava/util/Collection;)Landroid/app/appsearch/GetByDocumentIdRequest$Builder;"/>
+		<method name="build()Landroid/app/appsearch/GetByDocumentIdRequest;"/>
+	</class>
+	<class name="android/app/appsearch/GetSchemaResponse" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getSchemas()Ljava/util/Set;"/>
+		<method name="getVersion()I"/>
+	</class>
+	<class name="android/app/appsearch/GetSchemaResponse$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addSchema(Landroid/app/appsearch/AppSearchSchema;)Landroid/app/appsearch/GetSchemaResponse$Builder;"/>
+		<method name="build()Landroid/app/appsearch/GetSchemaResponse;"/>
+		<method name="setVersion(I)Landroid/app/appsearch/GetSchemaResponse$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/GlobalSearchSession" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="reportSystemUsage(Landroid/app/appsearch/ReportSystemUsageRequest;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="search(Ljava/lang/String;Landroid/app/appsearch/SearchSpec;)Landroid/app/appsearch/SearchResults;"/>
+	</class>
+	<class name="android/app/appsearch/Migrator" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDowngrade(IILandroid/app/appsearch/GenericDocument;)Landroid/app/appsearch/GenericDocument;"/>
+		<method name="onUpgrade(IILandroid/app/appsearch/GenericDocument;)Landroid/app/appsearch/GenericDocument;"/>
+		<method name="shouldMigrate(II)Z"/>
+	</class>
+	<class name="android/app/appsearch/PackageIdentifier" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getSha256Certificate()[B"/>
+	</class>
+	<class name="android/app/appsearch/PutDocumentsRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getGenericDocuments()Ljava/util/List;"/>
+	</class>
+	<class name="android/app/appsearch/PutDocumentsRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addGenericDocuments(Ljava/util/Collection;)Landroid/app/appsearch/PutDocumentsRequest$Builder;"/>
+		<method name="addGenericDocuments([Landroid/app/appsearch/GenericDocument;)Landroid/app/appsearch/PutDocumentsRequest$Builder;"/>
+		<method name="build()Landroid/app/appsearch/PutDocumentsRequest;"/>
+	</class>
+	<class name="android/app/appsearch/RemoveByDocumentIdRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getIds()Ljava/util/Set;"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+	</class>
+	<class name="android/app/appsearch/RemoveByDocumentIdRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="addIds(Ljava/util/Collection;)Landroid/app/appsearch/RemoveByDocumentIdRequest$Builder;"/>
+		<method name="addIds([Ljava/lang/String;)Landroid/app/appsearch/RemoveByDocumentIdRequest$Builder;"/>
+		<method name="build()Landroid/app/appsearch/RemoveByDocumentIdRequest;"/>
+	</class>
+	<class name="android/app/appsearch/ReportSystemUsageRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDatabaseName()Ljava/lang/String;"/>
+		<method name="getDocumentId()Ljava/lang/String;"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getUsageTimestampMillis()J"/>
+	</class>
+	<class name="android/app/appsearch/ReportSystemUsageRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/ReportSystemUsageRequest;"/>
+		<method name="setUsageTimestampMillis(J)Landroid/app/appsearch/ReportSystemUsageRequest$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/ReportUsageRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDocumentId()Ljava/lang/String;"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+		<method name="getUsageTimestampMillis()J"/>
+	</class>
+	<class name="android/app/appsearch/ReportUsageRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/ReportUsageRequest;"/>
+		<method name="setUsageTimestampMillis(J)Landroid/app/appsearch/ReportUsageRequest$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/SearchResult" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDatabaseName()Ljava/lang/String;"/>
+		<method name="getGenericDocument()Landroid/app/appsearch/GenericDocument;"/>
+		<method name="getMatchInfos()Ljava/util/List;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getRankingSignal()D"/>
+	</class>
+	<class name="android/app/appsearch/SearchResult$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="addMatchInfo(Landroid/app/appsearch/SearchResult$MatchInfo;)Landroid/app/appsearch/SearchResult$Builder;"/>
+		<method name="build()Landroid/app/appsearch/SearchResult;"/>
+		<method name="setGenericDocument(Landroid/app/appsearch/GenericDocument;)Landroid/app/appsearch/SearchResult$Builder;"/>
+		<method name="setRankingSignal(D)Landroid/app/appsearch/SearchResult$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/SearchResult$MatchInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getExactMatch()Ljava/lang/CharSequence;"/>
+		<method name="getExactMatchRange()Landroid/app/appsearch/SearchResult$MatchRange;"/>
+		<method name="getFullText()Ljava/lang/String;"/>
+		<method name="getPropertyPath()Ljava/lang/String;"/>
+		<method name="getSnippet()Ljava/lang/CharSequence;"/>
+		<method name="getSnippetRange()Landroid/app/appsearch/SearchResult$MatchRange;"/>
+	</class>
+	<class name="android/app/appsearch/SearchResult$MatchInfo$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/app/appsearch/SearchResult$MatchInfo;"/>
+		<method name="setExactMatchRange(Landroid/app/appsearch/SearchResult$MatchRange;)Landroid/app/appsearch/SearchResult$MatchInfo$Builder;"/>
+		<method name="setSnippetRange(Landroid/app/appsearch/SearchResult$MatchRange;)Landroid/app/appsearch/SearchResult$MatchInfo$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/SearchResult$MatchRange" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getEnd()I"/>
+		<method name="getStart()I"/>
+	</class>
+	<class name="android/app/appsearch/SearchResults" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="getNextPage(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+	</class>
+	<class name="android/app/appsearch/SearchSpec" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getFilterNamespaces()Ljava/util/List;"/>
+		<method name="getFilterPackageNames()Ljava/util/List;"/>
+		<method name="getFilterSchemas()Ljava/util/List;"/>
+		<method name="getMaxSnippetSize()I"/>
+		<method name="getOrder()I"/>
+		<method name="getProjections()Ljava/util/Map;"/>
+		<method name="getRankingStrategy()I"/>
+		<method name="getResultCountPerPage()I"/>
+		<method name="getResultGroupingLimit()I"/>
+		<method name="getResultGroupingTypeFlags()I"/>
+		<method name="getSnippetCount()I"/>
+		<method name="getSnippetCountPerProperty()I"/>
+		<method name="getTermMatch()I"/>
+		<field name="GROUPING_TYPE_PER_NAMESPACE"/>
+		<field name="GROUPING_TYPE_PER_PACKAGE"/>
+		<field name="ORDER_ASCENDING"/>
+		<field name="ORDER_DESCENDING"/>
+		<field name="PROJECTION_SCHEMA_TYPE_WILDCARD"/>
+		<field name="RANKING_STRATEGY_CREATION_TIMESTAMP"/>
+		<field name="RANKING_STRATEGY_DOCUMENT_SCORE"/>
+		<field name="RANKING_STRATEGY_NONE"/>
+		<field name="RANKING_STRATEGY_RELEVANCE_SCORE"/>
+		<field name="RANKING_STRATEGY_SYSTEM_USAGE_COUNT"/>
+		<field name="RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP"/>
+		<field name="RANKING_STRATEGY_USAGE_COUNT"/>
+		<field name="RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP"/>
+		<field name="TERM_MATCH_EXACT_ONLY"/>
+		<field name="TERM_MATCH_PREFIX"/>
+	</class>
+	<class name="android/app/appsearch/SearchSpec$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addFilterNamespaces(Ljava/util/Collection;)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="addFilterNamespaces([Ljava/lang/String;)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="addFilterPackageNames(Ljava/util/Collection;)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="addFilterPackageNames([Ljava/lang/String;)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="addFilterSchemas(Ljava/util/Collection;)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="addFilterSchemas([Ljava/lang/String;)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="addProjection(Ljava/lang/String;Ljava/util/Collection;)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="build()Landroid/app/appsearch/SearchSpec;"/>
+		<method name="setMaxSnippetSize(I)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="setOrder(I)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="setRankingStrategy(I)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="setResultCountPerPage(I)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="setResultGrouping(II)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="setSnippetCount(I)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="setSnippetCountPerProperty(I)Landroid/app/appsearch/SearchSpec$Builder;"/>
+		<method name="setTermMatch(I)Landroid/app/appsearch/SearchSpec$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/SetSchemaRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getMigrators()Ljava/util/Map;"/>
+		<method name="getSchemas()Ljava/util/Set;"/>
+		<method name="getSchemasNotDisplayedBySystem()Ljava/util/Set;"/>
+		<method name="getSchemasVisibleToPackages()Ljava/util/Map;"/>
+		<method name="getVersion()I"/>
+		<method name="isForceOverride()Z"/>
+	</class>
+	<class name="android/app/appsearch/SetSchemaRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addSchemas(Ljava/util/Collection;)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+		<method name="addSchemas([Landroid/app/appsearch/AppSearchSchema;)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+		<method name="build()Landroid/app/appsearch/SetSchemaRequest;"/>
+		<method name="setForceOverride(Z)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+		<method name="setMigrator(Ljava/lang/String;Landroid/app/appsearch/Migrator;)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+		<method name="setMigrators(Ljava/util/Map;)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+		<method name="setSchemaTypeDisplayedBySystem(Ljava/lang/String;Z)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+		<method name="setSchemaTypeVisibilityForPackage(Ljava/lang/String;ZLandroid/app/appsearch/PackageIdentifier;)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+		<method name="setVersion(I)Landroid/app/appsearch/SetSchemaRequest$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/SetSchemaResponse" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDeletedTypes()Ljava/util/Set;"/>
+		<method name="getIncompatibleTypes()Ljava/util/Set;"/>
+		<method name="getMigratedTypes()Ljava/util/Set;"/>
+		<method name="getMigrationFailures()Ljava/util/List;"/>
+	</class>
+	<class name="android/app/appsearch/SetSchemaResponse$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addDeletedType(Ljava/lang/String;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="addDeletedTypes(Ljava/util/Collection;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="addIncompatibleType(Ljava/lang/String;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="addIncompatibleTypes(Ljava/util/Collection;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="addMigratedType(Ljava/lang/String;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="addMigratedTypes(Ljava/util/Collection;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="addMigrationFailure(Landroid/app/appsearch/SetSchemaResponse$MigrationFailure;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="addMigrationFailures(Ljava/util/Collection;)Landroid/app/appsearch/SetSchemaResponse$Builder;"/>
+		<method name="build()Landroid/app/appsearch/SetSchemaResponse;"/>
+	</class>
+	<class name="android/app/appsearch/SetSchemaResponse$MigrationFailure" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/appsearch/AppSearchResult;)V"/>
+		<method name="getAppSearchResult()Landroid/app/appsearch/AppSearchResult;"/>
+		<method name="getDocumentId()Ljava/lang/String;"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+		<method name="getSchemaType()Ljava/lang/String;"/>
+	</class>
+	<class name="android/app/appsearch/StorageInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getAliveDocumentsCount()I"/>
+		<method name="getAliveNamespacesCount()I"/>
+		<method name="getSizeBytes()J"/>
+	</class>
+	<class name="android/app/appsearch/StorageInfo$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/app/appsearch/StorageInfo;"/>
+		<method name="setAliveDocumentsCount(I)Landroid/app/appsearch/StorageInfo$Builder;"/>
+		<method name="setAliveNamespacesCount(I)Landroid/app/appsearch/StorageInfo$Builder;"/>
+		<method name="setSizeBytes(J)Landroid/app/appsearch/StorageInfo$Builder;"/>
+	</class>
+	<class name="android/app/appsearch/exceptions/AppSearchException" since="31">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="getResultCode()I"/>
+		<method name="toAppSearchResult()Landroid/app/appsearch/AppSearchResult;"/>
+	</class>
+	<class name="android/app/assist/AssistContent" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getClipData()Landroid/content/ClipData;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+		<method name="getStructuredData()Ljava/lang/String;"/>
+		<method name="getWebUri()Landroid/net/Uri;"/>
+		<method name="isAppProvidedIntent()Z"/>
+		<method name="isAppProvidedWebUri()Z" since="24"/>
+		<method name="setClipData(Landroid/content/ClipData;)V"/>
+		<method name="setIntent(Landroid/content/Intent;)V"/>
+		<method name="setStructuredData(Ljava/lang/String;)V"/>
+		<method name="setWebUri(Landroid/net/Uri;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/assist/AssistStructure" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAcquisitionEndTime()J" since="26"/>
+		<method name="getAcquisitionStartTime()J" since="26"/>
+		<method name="getActivityComponent()Landroid/content/ComponentName;"/>
+		<method name="getWindowNodeAt(I)Landroid/app/assist/AssistStructure$WindowNode;"/>
+		<method name="getWindowNodeCount()I"/>
+		<method name="isHomeActivity()Z" since="26"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/assist/AssistStructure$ViewNode" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getAlpha()F"/>
+		<method name="getAutofillHints()[Ljava/lang/String;" since="26"/>
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
+		<method name="getAutofillOptions()[Ljava/lang/CharSequence;" since="26"/>
+		<method name="getAutofillType()I" since="26"/>
+		<method name="getAutofillValue()Landroid/view/autofill/AutofillValue;" since="26"/>
+		<method name="getChildAt(I)Landroid/app/assist/AssistStructure$ViewNode;"/>
+		<method name="getChildCount()I"/>
+		<method name="getClassName()Ljava/lang/String;"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getElevation()F"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getHeight()I"/>
+		<method name="getHint()Ljava/lang/String;"/>
+		<method name="getHintIdEntry()Ljava/lang/String;" since="30"/>
+		<method name="getHtmlInfo()Landroid/view/ViewStructure$HtmlInfo;" since="26"/>
+		<method name="getId()I"/>
+		<method name="getIdEntry()Ljava/lang/String;"/>
+		<method name="getIdPackage()Ljava/lang/String;"/>
+		<method name="getIdType()Ljava/lang/String;"/>
+		<method name="getImportantForAutofill()I" since="28"/>
+		<method name="getInputType()I" since="26"/>
+		<method name="getLeft()I"/>
+		<method name="getLocaleList()Landroid/os/LocaleList;" since="26"/>
+		<method name="getMaxTextEms()I" since="28"/>
+		<method name="getMaxTextLength()I" since="28"/>
+		<method name="getMinTextEms()I" since="28"/>
+		<method name="getReceiveContentMimeTypes()[Ljava/lang/String;" since="31"/>
+		<method name="getScrollX()I"/>
+		<method name="getScrollY()I"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTextBackgroundColor()I"/>
+		<method name="getTextColor()I"/>
+		<method name="getTextIdEntry()Ljava/lang/String;" since="28"/>
+		<method name="getTextLineBaselines()[I"/>
+		<method name="getTextLineCharOffsets()[I"/>
+		<method name="getTextSelectionEnd()I"/>
+		<method name="getTextSelectionStart()I"/>
+		<method name="getTextSize()F"/>
+		<method name="getTextStyle()I"/>
+		<method name="getTop()I"/>
+		<method name="getTransformation()Landroid/graphics/Matrix;"/>
+		<method name="getVisibility()I"/>
+		<method name="getWebDomain()Ljava/lang/String;" since="26"/>
+		<method name="getWebScheme()Ljava/lang/String;" since="28"/>
+		<method name="getWidth()I"/>
+		<method name="isAccessibilityFocused()Z"/>
+		<method name="isActivated()Z"/>
+		<method name="isAssistBlocked()Z"/>
+		<method name="isCheckable()Z"/>
+		<method name="isChecked()Z"/>
+		<method name="isClickable()Z"/>
+		<method name="isContextClickable()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="isFocusable()Z"/>
+		<method name="isFocused()Z"/>
+		<method name="isLongClickable()Z"/>
+		<method name="isOpaque()Z" since="26"/>
+		<method name="isSelected()Z"/>
+		<field name="TEXT_COLOR_UNDEFINED"/>
+		<field name="TEXT_STYLE_BOLD"/>
+		<field name="TEXT_STYLE_ITALIC"/>
+		<field name="TEXT_STYLE_STRIKE_THRU"/>
+		<field name="TEXT_STYLE_UNDERLINE"/>
+	</class>
+	<class name="android/app/assist/AssistStructure$WindowNode" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getDisplayId()I"/>
+		<method name="getHeight()I"/>
+		<method name="getLeft()I"/>
+		<method name="getRootViewNode()Landroid/app/assist/AssistStructure$ViewNode;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="getTop()I"/>
+		<method name="getWidth()I"/>
+	</class>
+	<class name="android/app/backup/BackupAgent" since="8">
+		<extends name="android/content/ContextWrapper"/>
+		<method name="&lt;init>()V"/>
+		<method name="fullBackupFile(Ljava/io/File;Landroid/app/backup/FullBackupDataOutput;)V" since="14"/>
+		<method name="onBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V"/>
+		<method name="onCreate()V"/>
+		<method name="onDestroy()V"/>
+		<method name="onFullBackup(Landroid/app/backup/FullBackupDataOutput;)V" since="14"/>
+		<method name="onQuotaExceeded(JJ)V" since="24"/>
+		<method name="onRestore(Landroid/app/backup/BackupDataInput;ILandroid/os/ParcelFileDescriptor;)V"/>
+		<method name="onRestore(Landroid/app/backup/BackupDataInput;JLandroid/os/ParcelFileDescriptor;)V" since="28"/>
+		<method name="onRestoreFile(Landroid/os/ParcelFileDescriptor;JLjava/io/File;IJJ)V" since="14"/>
+		<method name="onRestoreFinished()V" since="21"/>
+		<field name="FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED" since="28"/>
+		<field name="FLAG_DEVICE_TO_DEVICE_TRANSFER" since="28"/>
+		<field name="TYPE_DIRECTORY" since="14"/>
+		<field name="TYPE_FILE" since="14"/>
+	</class>
+	<class name="android/app/backup/BackupAgentHelper" since="8">
+		<extends name="android/app/backup/BackupAgent"/>
+		<method name="&lt;init>()V"/>
+		<method name="addHelper(Ljava/lang/String;Landroid/app/backup/BackupHelper;)V"/>
+	</class>
+	<class name="android/app/backup/BackupDataInput" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getDataSize()I"/>
+		<method name="getKey()Ljava/lang/String;"/>
+		<method name="readEntityData([BII)I"/>
+		<method name="readNextHeader()Z"/>
+		<method name="skipEntityData()V"/>
+	</class>
+	<class name="android/app/backup/BackupDataInputStream" since="8">
+		<extends name="java/io/InputStream"/>
+		<method name="getKey()Ljava/lang/String;"/>
+		<method name="size()I"/>
+	</class>
+	<class name="android/app/backup/BackupDataOutput" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getQuota()J" since="26"/>
+		<method name="getTransportFlags()I" since="28"/>
+		<method name="writeEntityData([BI)I"/>
+		<method name="writeEntityHeader(Ljava/lang/String;I)I"/>
+	</class>
+	<class name="android/app/backup/BackupHelper" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="performBackup(Landroid/os/ParcelFileDescriptor;Landroid/app/backup/BackupDataOutput;Landroid/os/ParcelFileDescriptor;)V"/>
+		<method name="restoreEntity(Landroid/app/backup/BackupDataInputStream;)V"/>
+		<method name="writeNewStateDescription(Landroid/os/ParcelFileDescriptor;)V"/>
+	</class>
+	<class name="android/app/backup/BackupManager" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="dataChanged()V"/>
+		<method name="dataChanged(Ljava/lang/String;)V"/>
+		<method name="getUserForAncestralSerialNumber(J)Landroid/os/UserHandle;" since="29"/>
+		<method name="requestRestore(Landroid/app/backup/RestoreObserver;)I" deprecated="28"/>
+	</class>
+	<class name="android/app/backup/FileBackupHelper" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/app/backup/BackupHelper"/>
+		<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/app/backup/FullBackupDataOutput" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="getQuota()J" since="26"/>
+		<method name="getTransportFlags()I" since="28"/>
+	</class>
+	<class name="android/app/backup/RestoreObserver" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onUpdate(ILjava/lang/String;)V"/>
+		<method name="restoreFinished(I)V"/>
+		<method name="restoreStarting(I)V"/>
+	</class>
+	<class name="android/app/backup/SharedPreferencesBackupHelper" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/app/backup/BackupHelper"/>
+		<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/app/blob/BlobHandle" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createWithSha256([BLjava/lang/CharSequence;JLjava/lang/String;)Landroid/app/blob/BlobHandle;"/>
+		<method name="getExpiryTimeMillis()J"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getSha256Digest()[B"/>
+		<method name="getTag()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/blob/BlobStoreManager" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="abandonSession(J)V"/>
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;I)V"/>
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;IJ)V"/>
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;Ljava/lang/CharSequence;)V"/>
+		<method name="acquireLease(Landroid/app/blob/BlobHandle;Ljava/lang/CharSequence;J)V"/>
+		<method name="createSession(Landroid/app/blob/BlobHandle;)J"/>
+		<method name="getLeasedBlobs()Ljava/util/List;"/>
+		<method name="getRemainingLeaseQuotaBytes()J"/>
+		<method name="openBlob(Landroid/app/blob/BlobHandle;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openSession(J)Landroid/app/blob/BlobStoreManager$Session;"/>
+		<method name="releaseLease(Landroid/app/blob/BlobHandle;)V"/>
+	</class>
+	<class name="android/app/blob/BlobStoreManager$Session" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="abandon()V"/>
+		<method name="allowPackageAccess(Ljava/lang/String;[B)V"/>
+		<method name="allowPublicAccess()V"/>
+		<method name="allowSameSignatureAccess()V"/>
+		<method name="commit(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="getSize()J"/>
+		<method name="isPackageAccessAllowed(Ljava/lang/String;[B)Z"/>
+		<method name="isPublicAccessAllowed()Z"/>
+		<method name="isSameSignatureAccessAllowed()Z"/>
+		<method name="openRead()Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openWrite(JJ)Landroid/os/ParcelFileDescriptor;"/>
+	</class>
+	<class name="android/app/job/JobInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBackoffPolicy()I"/>
+		<method name="getClipData()Landroid/content/ClipData;" since="26"/>
+		<method name="getClipGrantFlags()I" since="26"/>
+		<method name="getEstimatedNetworkDownloadBytes()J" since="28"/>
+		<method name="getEstimatedNetworkUploadBytes()J" since="28"/>
+		<method name="getExtras()Landroid/os/PersistableBundle;"/>
+		<method name="getFlexMillis()J" since="24"/>
+		<method name="getId()I"/>
+		<method name="getInitialBackoffMillis()J"/>
+		<method name="getIntervalMillis()J"/>
+		<method name="getMaxExecutionDelayMillis()J"/>
+		<method name="getMinFlexMillis()J" since="24"/>
+		<method name="getMinLatencyMillis()J"/>
+		<method name="getMinPeriodMillis()J" since="24"/>
+		<method name="getNetworkType()I" deprecated="28"/>
+		<method name="getRequiredNetwork()Landroid/net/NetworkRequest;" since="28"/>
+		<method name="getService()Landroid/content/ComponentName;"/>
+		<method name="getTransientExtras()Landroid/os/Bundle;" since="26"/>
+		<method name="getTriggerContentMaxDelay()J" since="24"/>
+		<method name="getTriggerContentUpdateDelay()J" since="24"/>
+		<method name="getTriggerContentUris()[Landroid/app/job/JobInfo$TriggerContentUri;" since="24"/>
+		<method name="isExpedited()Z" since="31"/>
+		<method name="isImportantWhileForeground()Z" since="28"/>
+		<method name="isPeriodic()Z"/>
+		<method name="isPersisted()Z"/>
+		<method name="isPrefetch()Z" since="28"/>
+		<method name="isRequireBatteryNotLow()Z" since="26"/>
+		<method name="isRequireCharging()Z"/>
+		<method name="isRequireDeviceIdle()Z"/>
+		<method name="isRequireStorageNotLow()Z" since="26"/>
+		<field name="BACKOFF_POLICY_EXPONENTIAL"/>
+		<field name="BACKOFF_POLICY_LINEAR"/>
+		<field name="CREATOR"/>
+		<field name="DEFAULT_INITIAL_BACKOFF_MILLIS"/>
+		<field name="MAX_BACKOFF_DELAY_MILLIS"/>
+		<field name="NETWORK_BYTES_UNKNOWN" since="28"/>
+		<field name="NETWORK_TYPE_ANY"/>
+		<field name="NETWORK_TYPE_CELLULAR" since="28"/>
+		<field name="NETWORK_TYPE_METERED" since="26" deprecated="28"/>
+		<field name="NETWORK_TYPE_NONE"/>
+		<field name="NETWORK_TYPE_NOT_ROAMING" since="24"/>
+		<field name="NETWORK_TYPE_UNMETERED"/>
+	</class>
+	<class name="android/app/job/JobInfo$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILandroid/content/ComponentName;)V"/>
+		<method name="addTriggerContentUri(Landroid/app/job/JobInfo$TriggerContentUri;)Landroid/app/job/JobInfo$Builder;" since="24"/>
+		<method name="build()Landroid/app/job/JobInfo;"/>
+		<method name="setBackoffCriteria(JI)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setClipData(Landroid/content/ClipData;I)Landroid/app/job/JobInfo$Builder;" since="26"/>
+		<method name="setEstimatedNetworkBytes(JJ)Landroid/app/job/JobInfo$Builder;" since="28"/>
+		<method name="setExpedited(Z)Landroid/app/job/JobInfo$Builder;" since="31"/>
+		<method name="setExtras(Landroid/os/PersistableBundle;)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setImportantWhileForeground(Z)Landroid/app/job/JobInfo$Builder;" since="28" deprecated="31"/>
+		<method name="setMinimumLatency(J)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setOverrideDeadline(J)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setPeriodic(J)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setPeriodic(JJ)Landroid/app/job/JobInfo$Builder;" since="24"/>
+		<method name="setPersisted(Z)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setPrefetch(Z)Landroid/app/job/JobInfo$Builder;" since="28"/>
+		<method name="setRequiredNetwork(Landroid/net/NetworkRequest;)Landroid/app/job/JobInfo$Builder;" since="28"/>
+		<method name="setRequiredNetworkType(I)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setRequiresBatteryNotLow(Z)Landroid/app/job/JobInfo$Builder;" since="26"/>
+		<method name="setRequiresCharging(Z)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setRequiresDeviceIdle(Z)Landroid/app/job/JobInfo$Builder;"/>
+		<method name="setRequiresStorageNotLow(Z)Landroid/app/job/JobInfo$Builder;" since="26"/>
+		<method name="setTransientExtras(Landroid/os/Bundle;)Landroid/app/job/JobInfo$Builder;" since="26"/>
+		<method name="setTriggerContentMaxDelay(J)Landroid/app/job/JobInfo$Builder;" since="24"/>
+		<method name="setTriggerContentUpdateDelay(J)Landroid/app/job/JobInfo$Builder;" since="24"/>
+	</class>
+	<class name="android/app/job/JobInfo$TriggerContentUri" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/net/Uri;I)V"/>
+		<method name="getFlags()I"/>
+		<method name="getUri()Landroid/net/Uri;"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_NOTIFY_FOR_DESCENDANTS"/>
+	</class>
+	<class name="android/app/job/JobParameters" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="completeWork(Landroid/app/job/JobWorkItem;)V" since="26"/>
+		<method name="dequeueWork()Landroid/app/job/JobWorkItem;" since="26"/>
+		<method name="getClipData()Landroid/content/ClipData;" since="26"/>
+		<method name="getClipGrantFlags()I" since="26"/>
+		<method name="getExtras()Landroid/os/PersistableBundle;"/>
+		<method name="getJobId()I"/>
+		<method name="getNetwork()Landroid/net/Network;" since="28"/>
+		<method name="getStopReason()I" since="31"/>
+		<method name="getTransientExtras()Landroid/os/Bundle;" since="26"/>
+		<method name="getTriggeredContentAuthorities()[Ljava/lang/String;" since="24"/>
+		<method name="getTriggeredContentUris()[Landroid/net/Uri;" since="24"/>
+		<method name="isExpeditedJob()Z" since="31"/>
+		<method name="isOverrideDeadlineExpired()Z"/>
+		<field name="CREATOR"/>
+		<field name="STOP_REASON_APP_STANDBY" since="31"/>
+		<field name="STOP_REASON_BACKGROUND_RESTRICTION" since="31"/>
+		<field name="STOP_REASON_CANCELLED_BY_APP" since="31"/>
+		<field name="STOP_REASON_CONSTRAINT_BATTERY_NOT_LOW" since="31"/>
+		<field name="STOP_REASON_CONSTRAINT_CHARGING" since="31"/>
+		<field name="STOP_REASON_CONSTRAINT_CONNECTIVITY" since="31"/>
+		<field name="STOP_REASON_CONSTRAINT_DEVICE_IDLE" since="31"/>
+		<field name="STOP_REASON_CONSTRAINT_STORAGE_NOT_LOW" since="31"/>
+		<field name="STOP_REASON_DEVICE_STATE" since="31"/>
+		<field name="STOP_REASON_PREEMPT" since="31"/>
+		<field name="STOP_REASON_QUOTA" since="31"/>
+		<field name="STOP_REASON_SYSTEM_PROCESSING" since="31"/>
+		<field name="STOP_REASON_TIMEOUT" since="31"/>
+		<field name="STOP_REASON_UNDEFINED" since="31"/>
+		<field name="STOP_REASON_USER" since="31"/>
+	</class>
+	<class name="android/app/job/JobScheduler" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="cancel(I)V"/>
+		<method name="cancelAll()V"/>
+		<method name="enqueue(Landroid/app/job/JobInfo;Landroid/app/job/JobWorkItem;)I" since="26"/>
+		<method name="getAllPendingJobs()Ljava/util/List;"/>
+		<method name="getPendingJob(I)Landroid/app/job/JobInfo;" since="24"/>
+		<method name="schedule(Landroid/app/job/JobInfo;)I"/>
+		<field name="RESULT_FAILURE"/>
+		<field name="RESULT_SUCCESS"/>
+	</class>
+	<class name="android/app/job/JobService" since="21">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="jobFinished(Landroid/app/job/JobParameters;Z)V"/>
+		<method name="onStartJob(Landroid/app/job/JobParameters;)Z"/>
+		<method name="onStopJob(Landroid/app/job/JobParameters;)Z"/>
+		<field name="PERMISSION_BIND"/>
+	</class>
+	<class name="android/app/job/JobServiceEngine" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/Service;)V"/>
+		<method name="getBinder()Landroid/os/IBinder;"/>
+		<method name="jobFinished(Landroid/app/job/JobParameters;Z)V"/>
+		<method name="onStartJob(Landroid/app/job/JobParameters;)Z"/>
+		<method name="onStopJob(Landroid/app/job/JobParameters;)Z"/>
+	</class>
+	<class name="android/app/job/JobWorkItem" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/Intent;)V"/>
+		<method name="&lt;init>(Landroid/content/Intent;JJ)V" since="28"/>
+		<method name="getDeliveryCount()I"/>
+		<method name="getEstimatedNetworkDownloadBytes()J" since="28"/>
+		<method name="getEstimatedNetworkUploadBytes()J" since="28"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/people/ConversationStatus" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getActivity()I"/>
+		<method name="getAvailability()I"/>
+		<method name="getDescription()Ljava/lang/CharSequence;"/>
+		<method name="getEndTimeMillis()J"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getStartTimeMillis()J"/>
+		<field name="ACTIVITY_ANNIVERSARY"/>
+		<field name="ACTIVITY_AUDIO"/>
+		<field name="ACTIVITY_BIRTHDAY"/>
+		<field name="ACTIVITY_GAME"/>
+		<field name="ACTIVITY_LOCATION"/>
+		<field name="ACTIVITY_NEW_STORY"/>
+		<field name="ACTIVITY_OTHER"/>
+		<field name="ACTIVITY_UPCOMING_BIRTHDAY"/>
+		<field name="ACTIVITY_VIDEO"/>
+		<field name="AVAILABILITY_AVAILABLE"/>
+		<field name="AVAILABILITY_BUSY"/>
+		<field name="AVAILABILITY_OFFLINE"/>
+		<field name="AVAILABILITY_UNKNOWN"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/people/ConversationStatus$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="build()Landroid/app/people/ConversationStatus;"/>
+		<method name="setAvailability(I)Landroid/app/people/ConversationStatus$Builder;"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/app/people/ConversationStatus$Builder;"/>
+		<method name="setEndTimeMillis(J)Landroid/app/people/ConversationStatus$Builder;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/app/people/ConversationStatus$Builder;"/>
+		<method name="setStartTimeMillis(J)Landroid/app/people/ConversationStatus$Builder;"/>
+	</class>
+	<class name="android/app/people/PeopleManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="addOrUpdateStatus(Ljava/lang/String;Landroid/app/people/ConversationStatus;)V"/>
+		<method name="clearStatus(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="clearStatuses(Ljava/lang/String;)V"/>
+		<method name="getStatuses(Ljava/lang/String;)Ljava/util/List;"/>
+	</class>
+	<class name="android/app/role/RoleManager" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="createRequestRoleIntent(Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="isRoleAvailable(Ljava/lang/String;)Z"/>
+		<method name="isRoleHeld(Ljava/lang/String;)Z"/>
+		<field name="ROLE_ASSISTANT"/>
+		<field name="ROLE_BROWSER"/>
+		<field name="ROLE_CALL_REDIRECTION"/>
+		<field name="ROLE_CALL_SCREENING"/>
+		<field name="ROLE_DIALER"/>
+		<field name="ROLE_EMERGENCY"/>
+		<field name="ROLE_HOME"/>
+		<field name="ROLE_SMS"/>
+	</class>
+	<class name="android/app/slice/Slice" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getHints()Ljava/util/List;"/>
+		<method name="getItems()Ljava/util/List;"/>
+		<method name="getSpec()Landroid/app/slice/SliceSpec;"/>
+		<method name="getUri()Landroid/net/Uri;"/>
+		<method name="isCallerNeeded()Z"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_RANGE_VALUE"/>
+		<field name="EXTRA_TOGGLE_STATE"/>
+		<field name="HINT_ACTIONS"/>
+		<field name="HINT_ERROR"/>
+		<field name="HINT_HORIZONTAL"/>
+		<field name="HINT_KEYWORDS"/>
+		<field name="HINT_LARGE"/>
+		<field name="HINT_LAST_UPDATED"/>
+		<field name="HINT_LIST"/>
+		<field name="HINT_LIST_ITEM"/>
+		<field name="HINT_NO_TINT"/>
+		<field name="HINT_PARTIAL"/>
+		<field name="HINT_PERMISSION_REQUEST"/>
+		<field name="HINT_SEE_MORE"/>
+		<field name="HINT_SELECTED"/>
+		<field name="HINT_SHORTCUT"/>
+		<field name="HINT_SUMMARY"/>
+		<field name="HINT_TITLE"/>
+		<field name="HINT_TTL"/>
+		<field name="SUBTYPE_COLOR"/>
+		<field name="SUBTYPE_CONTENT_DESCRIPTION"/>
+		<field name="SUBTYPE_LAYOUT_DIRECTION"/>
+		<field name="SUBTYPE_MAX"/>
+		<field name="SUBTYPE_MESSAGE"/>
+		<field name="SUBTYPE_MILLIS"/>
+		<field name="SUBTYPE_PRIORITY"/>
+		<field name="SUBTYPE_RANGE"/>
+		<field name="SUBTYPE_SOURCE"/>
+		<field name="SUBTYPE_TOGGLE"/>
+		<field name="SUBTYPE_VALUE"/>
+	</class>
+	<class name="android/app/slice/Slice$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/slice/Slice$Builder;)V"/>
+		<method name="&lt;init>(Landroid/net/Uri;Landroid/app/slice/SliceSpec;)V"/>
+		<method name="addAction(Landroid/app/PendingIntent;Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addBundle(Landroid/os/Bundle;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addHints(Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addIcon(Landroid/graphics/drawable/Icon;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addInt(ILjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addLong(JLjava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addRemoteInput(Landroid/app/RemoteInput;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addSubSlice(Landroid/app/slice/Slice;Ljava/lang/String;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="addText(Ljava/lang/CharSequence;Ljava/lang/String;Ljava/util/List;)Landroid/app/slice/Slice$Builder;"/>
+		<method name="build()Landroid/app/slice/Slice;"/>
+		<method name="setCallerNeeded(Z)Landroid/app/slice/Slice$Builder;"/>
+	</class>
+	<class name="android/app/slice/SliceItem" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAction()Landroid/app/PendingIntent;"/>
+		<method name="getBundle()Landroid/os/Bundle;"/>
+		<method name="getFormat()Ljava/lang/String;"/>
+		<method name="getHints()Ljava/util/List;"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getInt()I"/>
+		<method name="getLong()J"/>
+		<method name="getRemoteInput()Landroid/app/RemoteInput;"/>
+		<method name="getSlice()Landroid/app/slice/Slice;"/>
+		<method name="getSubType()Ljava/lang/String;"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="hasHint(Ljava/lang/String;)Z"/>
+		<field name="CREATOR"/>
+		<field name="FORMAT_ACTION"/>
+		<field name="FORMAT_BUNDLE"/>
+		<field name="FORMAT_IMAGE"/>
+		<field name="FORMAT_INT"/>
+		<field name="FORMAT_LONG"/>
+		<field name="FORMAT_REMOTE_INPUT"/>
+		<field name="FORMAT_SLICE"/>
+		<field name="FORMAT_TEXT"/>
+	</class>
+	<class name="android/app/slice/SliceManager" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="bindSlice(Landroid/content/Intent;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
+		<method name="bindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
+		<method name="checkSlicePermission(Landroid/net/Uri;II)I"/>
+		<method name="getPinnedSlices()Ljava/util/List;"/>
+		<method name="getPinnedSpecs(Landroid/net/Uri;)Ljava/util/Set;"/>
+		<method name="getSliceDescendants(Landroid/net/Uri;)Ljava/util/Collection;"/>
+		<method name="grantSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V"/>
+		<method name="mapIntentToUri(Landroid/content/Intent;)Landroid/net/Uri;"/>
+		<method name="pinSlice(Landroid/net/Uri;Ljava/util/Set;)V"/>
+		<method name="revokeSlicePermission(Ljava/lang/String;Landroid/net/Uri;)V"/>
+		<method name="unpinSlice(Landroid/net/Uri;)V"/>
+		<field name="CATEGORY_SLICE"/>
+		<field name="SLICE_METADATA_KEY"/>
+	</class>
+	<class name="android/app/slice/SliceMetrics" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;)V"/>
+		<method name="logHidden()V"/>
+		<method name="logTouch(ILandroid/net/Uri;)V"/>
+		<method name="logVisible()V"/>
+	</class>
+	<class name="android/app/slice/SliceProvider" since="28">
+		<extends name="android/content/ContentProvider"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([Ljava/lang/String;)V"/>
+		<method name="onBindSlice(Landroid/net/Uri;Ljava/util/Set;)Landroid/app/slice/Slice;"/>
+		<method name="onCreatePermissionRequest(Landroid/net/Uri;)Landroid/app/PendingIntent;"/>
+		<method name="onGetSliceDescendants(Landroid/net/Uri;)Ljava/util/Collection;"/>
+		<method name="onMapIntentToUri(Landroid/content/Intent;)Landroid/net/Uri;"/>
+		<method name="onSlicePinned(Landroid/net/Uri;)V"/>
+		<method name="onSliceUnpinned(Landroid/net/Uri;)V"/>
+		<field name="SLICE_TYPE"/>
+	</class>
+	<class name="android/app/slice/SliceSpec" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="canRender(Landroid/app/slice/SliceSpec;)Z"/>
+		<method name="getRevision()I"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/usage/ConfigurationStats" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/app/usage/ConfigurationStats;)V"/>
+		<method name="getActivationCount()I"/>
+		<method name="getConfiguration()Landroid/content/res/Configuration;"/>
+		<method name="getFirstTimeStamp()J"/>
+		<method name="getLastTimeActive()J"/>
+		<method name="getLastTimeStamp()J"/>
+		<method name="getTotalTimeActive()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/usage/EventStats" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/app/usage/EventStats;)V"/>
+		<method name="add(Landroid/app/usage/EventStats;)V"/>
+		<method name="getCount()I"/>
+		<method name="getEventType()I"/>
+		<method name="getFirstTimeStamp()J"/>
+		<method name="getLastEventTime()J"/>
+		<method name="getLastTimeStamp()J"/>
+		<method name="getTotalTime()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/usage/ExternalStorageStats" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAppBytes()J"/>
+		<method name="getAudioBytes()J"/>
+		<method name="getImageBytes()J"/>
+		<method name="getTotalBytes()J"/>
+		<method name="getVideoBytes()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/usage/NetworkStats" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getNextBucket(Landroid/app/usage/NetworkStats$Bucket;)Z"/>
+		<method name="hasNextBucket()Z"/>
+	</class>
+	<class name="android/app/usage/NetworkStats$Bucket" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDefaultNetworkStatus()I" since="28"/>
+		<method name="getEndTimeStamp()J"/>
+		<method name="getMetered()I" since="26"/>
+		<method name="getRoaming()I" since="24"/>
+		<method name="getRxBytes()J"/>
+		<method name="getRxPackets()J"/>
+		<method name="getStartTimeStamp()J"/>
+		<method name="getState()I"/>
+		<method name="getTag()I" since="24"/>
+		<method name="getTxBytes()J"/>
+		<method name="getTxPackets()J"/>
+		<method name="getUid()I"/>
+		<field name="DEFAULT_NETWORK_ALL" since="28"/>
+		<field name="DEFAULT_NETWORK_NO" since="28"/>
+		<field name="DEFAULT_NETWORK_YES" since="28"/>
+		<field name="METERED_ALL" since="26"/>
+		<field name="METERED_NO" since="26"/>
+		<field name="METERED_YES" since="26"/>
+		<field name="ROAMING_ALL" since="24"/>
+		<field name="ROAMING_NO" since="24"/>
+		<field name="ROAMING_YES" since="24"/>
+		<field name="STATE_ALL"/>
+		<field name="STATE_DEFAULT"/>
+		<field name="STATE_FOREGROUND"/>
+		<field name="TAG_NONE" since="24"/>
+		<field name="UID_ALL"/>
+		<field name="UID_REMOVED"/>
+		<field name="UID_TETHERING"/>
+	</class>
+	<class name="android/app/usage/NetworkStatsManager" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="queryDetails(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;"/>
+		<method name="queryDetailsForUid(ILjava/lang/String;JJI)Landroid/app/usage/NetworkStats;"/>
+		<method name="queryDetailsForUidTag(ILjava/lang/String;JJII)Landroid/app/usage/NetworkStats;" since="24"/>
+		<method name="queryDetailsForUidTagState(ILjava/lang/String;JJIII)Landroid/app/usage/NetworkStats;" since="28"/>
+		<method name="querySummary(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats;"/>
+		<method name="querySummaryForDevice(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats$Bucket;"/>
+		<method name="querySummaryForUser(ILjava/lang/String;JJ)Landroid/app/usage/NetworkStats$Bucket;"/>
+		<method name="registerUsageCallback(ILjava/lang/String;JLandroid/app/usage/NetworkStatsManager$UsageCallback;)V" since="24"/>
+		<method name="registerUsageCallback(ILjava/lang/String;JLandroid/app/usage/NetworkStatsManager$UsageCallback;Landroid/os/Handler;)V" since="24"/>
+		<method name="unregisterUsageCallback(Landroid/app/usage/NetworkStatsManager$UsageCallback;)V" since="24"/>
+	</class>
+	<class name="android/app/usage/NetworkStatsManager$UsageCallback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onThresholdReached(ILjava/lang/String;)V"/>
+	</class>
+	<class name="android/app/usage/StorageStats" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAppBytes()J"/>
+		<method name="getCacheBytes()J"/>
+		<method name="getDataBytes()J"/>
+		<method name="getExternalCacheBytes()J" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/usage/StorageStatsManager" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getFreeBytes(Ljava/util/UUID;)J"/>
+		<method name="getTotalBytes(Ljava/util/UUID;)J"/>
+		<method name="queryExternalStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/ExternalStorageStats;"/>
+		<method name="queryStatsForPackage(Ljava/util/UUID;Ljava/lang/String;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;"/>
+		<method name="queryStatsForUid(Ljava/util/UUID;I)Landroid/app/usage/StorageStats;"/>
+		<method name="queryStatsForUser(Ljava/util/UUID;Landroid/os/UserHandle;)Landroid/app/usage/StorageStats;"/>
+	</class>
+	<class name="android/app/usage/UsageEvents" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getNextEvent(Landroid/app/usage/UsageEvents$Event;)Z"/>
+		<method name="hasNextEvent()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/usage/UsageEvents$Event" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAppStandbyBucket()I" since="28"/>
+		<method name="getClassName()Ljava/lang/String;"/>
+		<method name="getConfiguration()Landroid/content/res/Configuration;"/>
+		<method name="getEventType()I"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getShortcutId()Ljava/lang/String;" since="25"/>
+		<method name="getTimeStamp()J"/>
+		<field name="ACTIVITY_PAUSED" since="29"/>
+		<field name="ACTIVITY_RESUMED" since="29"/>
+		<field name="ACTIVITY_STOPPED" since="29"/>
+		<field name="CONFIGURATION_CHANGE"/>
+		<field name="DEVICE_SHUTDOWN" since="29"/>
+		<field name="DEVICE_STARTUP" since="29"/>
+		<field name="FOREGROUND_SERVICE_START" since="29"/>
+		<field name="FOREGROUND_SERVICE_STOP" since="29"/>
+		<field name="KEYGUARD_HIDDEN" since="28"/>
+		<field name="KEYGUARD_SHOWN" since="28"/>
+		<field name="MOVE_TO_BACKGROUND" deprecated="29"/>
+		<field name="MOVE_TO_FOREGROUND" deprecated="29"/>
+		<field name="NONE"/>
+		<field name="SCREEN_INTERACTIVE" since="28"/>
+		<field name="SCREEN_NON_INTERACTIVE" since="28"/>
+		<field name="SHORTCUT_INVOCATION" since="25"/>
+		<field name="STANDBY_BUCKET_CHANGED" since="28"/>
+		<field name="USER_INTERACTION" since="23"/>
+	</class>
+	<class name="android/app/usage/UsageStats" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/app/usage/UsageStats;)V"/>
+		<method name="add(Landroid/app/usage/UsageStats;)V"/>
+		<method name="getFirstTimeStamp()J"/>
+		<method name="getLastTimeForegroundServiceUsed()J" since="29"/>
+		<method name="getLastTimeStamp()J"/>
+		<method name="getLastTimeUsed()J"/>
+		<method name="getLastTimeVisible()J" since="29"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getTotalTimeForegroundServiceUsed()J" since="29"/>
+		<method name="getTotalTimeInForeground()J"/>
+		<method name="getTotalTimeVisible()J" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/app/usage/UsageStatsManager" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getAppStandbyBucket()I" since="28"/>
+		<method name="isAppInactive(Ljava/lang/String;)Z" since="23"/>
+		<method name="queryAndAggregateUsageStats(JJ)Ljava/util/Map;"/>
+		<method name="queryConfigurations(IJJ)Ljava/util/List;"/>
+		<method name="queryEventStats(IJJ)Ljava/util/List;" since="28"/>
+		<method name="queryEvents(JJ)Landroid/app/usage/UsageEvents;"/>
+		<method name="queryEventsForSelf(JJ)Landroid/app/usage/UsageEvents;" since="28"/>
+		<method name="queryUsageStats(IJJ)Ljava/util/List;"/>
+		<field name="INTERVAL_BEST"/>
+		<field name="INTERVAL_DAILY"/>
+		<field name="INTERVAL_MONTHLY"/>
+		<field name="INTERVAL_WEEKLY"/>
+		<field name="INTERVAL_YEARLY"/>
+		<field name="STANDBY_BUCKET_ACTIVE" since="28"/>
+		<field name="STANDBY_BUCKET_FREQUENT" since="28"/>
+		<field name="STANDBY_BUCKET_RARE" since="28"/>
+		<field name="STANDBY_BUCKET_RESTRICTED" since="30"/>
+		<field name="STANDBY_BUCKET_WORKING_SET" since="28"/>
+	</class>
+	<class name="android/appwidget/AppWidgetHost" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="allocateAppWidgetId()I"/>
+		<method name="clearViews()V" since="11"/>
+		<method name="createView(Landroid/content/Context;ILandroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetHostView;"/>
+		<method name="deleteAllHosts()V"/>
+		<method name="deleteAppWidgetId(I)V"/>
+		<method name="deleteHost()V"/>
+		<method name="getAppWidgetIds()[I" since="26"/>
+		<method name="onAppWidgetRemoved(I)V" since="30"/>
+		<method name="onCreateView(Landroid/content/Context;ILandroid/appwidget/AppWidgetProviderInfo;)Landroid/appwidget/AppWidgetHostView;"/>
+		<method name="onProviderChanged(ILandroid/appwidget/AppWidgetProviderInfo;)V"/>
+		<method name="onProvidersChanged()V" since="17"/>
+		<method name="startAppWidgetConfigureActivityForResult(Landroid/app/Activity;IIILandroid/os/Bundle;)V" since="21"/>
+		<method name="startListening()V"/>
+		<method name="stopListening()V"/>
+	</class>
+	<class name="android/appwidget/AppWidgetHostView" since="3">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;II)V"/>
+		<method name="getAppWidgetId()I"/>
+		<method name="getAppWidgetInfo()Landroid/appwidget/AppWidgetProviderInfo;"/>
+		<method name="getDefaultPaddingForWidget(Landroid/content/Context;Landroid/content/ComponentName;Landroid/graphics/Rect;)Landroid/graphics/Rect;" since="15"/>
+		<method name="getDefaultView()Landroid/view/View;"/>
+		<method name="getErrorView()Landroid/view/View;"/>
+		<method name="prepareView(Landroid/view/View;)V"/>
+		<method name="resetColorResources()V" since="31"/>
+		<method name="setAppWidget(ILandroid/appwidget/AppWidgetProviderInfo;)V"/>
+		<method name="setColorResources(Landroid/util/SparseIntArray;)V" since="31"/>
+		<method name="setExecutor(Ljava/util/concurrent/Executor;)V" since="26"/>
+		<method name="setOnLightBackground(Z)V" since="29"/>
+		<method name="updateAppWidget(Landroid/widget/RemoteViews;)V"/>
+		<method name="updateAppWidgetOptions(Landroid/os/Bundle;)V" since="16"/>
+		<method name="updateAppWidgetSize(Landroid/os/Bundle;IIII)V" since="16" deprecated="31"/>
+		<method name="updateAppWidgetSize(Landroid/os/Bundle;Ljava/util/List;)V" since="31"/>
+	</class>
+	<class name="android/appwidget/AppWidgetManager" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="bindAppWidgetId(ILandroid/content/ComponentName;)V" removed="16"/>
+		<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;)Z" since="16"/>
+		<method name="bindAppWidgetIdIfAllowed(ILandroid/content/ComponentName;Landroid/os/Bundle;)Z" since="17"/>
+		<method name="bindAppWidgetIdIfAllowed(ILandroid/os/UserHandle;Landroid/content/ComponentName;Landroid/os/Bundle;)Z" since="21"/>
+		<method name="getAppWidgetIds(Landroid/content/ComponentName;)[I"/>
+		<method name="getAppWidgetInfo(I)Landroid/appwidget/AppWidgetProviderInfo;"/>
+		<method name="getAppWidgetOptions(I)Landroid/os/Bundle;" since="16"/>
+		<method name="getInstalledProviders()Ljava/util/List;"/>
+		<method name="getInstalledProvidersForPackage(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
+		<method name="getInstalledProvidersForProfile(Landroid/os/UserHandle;)Ljava/util/List;" since="21"/>
+		<method name="getInstance(Landroid/content/Context;)Landroid/appwidget/AppWidgetManager;"/>
+		<method name="isRequestPinAppWidgetSupported()Z" since="26"/>
+		<method name="notifyAppWidgetViewDataChanged(II)V" since="11"/>
+		<method name="notifyAppWidgetViewDataChanged([II)V" since="11"/>
+		<method name="partiallyUpdateAppWidget(ILandroid/widget/RemoteViews;)V" since="11"/>
+		<method name="partiallyUpdateAppWidget([ILandroid/widget/RemoteViews;)V" since="11"/>
+		<method name="requestPinAppWidget(Landroid/content/ComponentName;Landroid/os/Bundle;Landroid/app/PendingIntent;)Z" since="26"/>
+		<method name="updateAppWidget(ILandroid/widget/RemoteViews;)V"/>
+		<method name="updateAppWidget(Landroid/content/ComponentName;Landroid/widget/RemoteViews;)V"/>
+		<method name="updateAppWidget([ILandroid/widget/RemoteViews;)V"/>
+		<method name="updateAppWidgetOptions(ILandroid/os/Bundle;)V" since="16"/>
+		<method name="updateAppWidgetProviderInfo(Landroid/content/ComponentName;Ljava/lang/String;)V" since="28"/>
+		<field name="ACTION_APPWIDGET_BIND" since="16"/>
+		<field name="ACTION_APPWIDGET_CONFIGURE"/>
+		<field name="ACTION_APPWIDGET_DELETED"/>
+		<field name="ACTION_APPWIDGET_DISABLED"/>
+		<field name="ACTION_APPWIDGET_ENABLED"/>
+		<field name="ACTION_APPWIDGET_HOST_RESTORED" since="21"/>
+		<field name="ACTION_APPWIDGET_OPTIONS_CHANGED" since="16"/>
+		<field name="ACTION_APPWIDGET_PICK"/>
+		<field name="ACTION_APPWIDGET_RESTORED" since="21"/>
+		<field name="ACTION_APPWIDGET_UPDATE"/>
+		<field name="EXTRA_APPWIDGET_ID"/>
+		<field name="EXTRA_APPWIDGET_IDS"/>
+		<field name="EXTRA_APPWIDGET_OLD_IDS" since="21"/>
+		<field name="EXTRA_APPWIDGET_OPTIONS" since="16"/>
+		<field name="EXTRA_APPWIDGET_PREVIEW" since="26"/>
+		<field name="EXTRA_APPWIDGET_PROVIDER" since="16"/>
+		<field name="EXTRA_APPWIDGET_PROVIDER_PROFILE" since="21"/>
+		<field name="EXTRA_CUSTOM_EXTRAS"/>
+		<field name="EXTRA_CUSTOM_INFO"/>
+		<field name="EXTRA_HOST_ID" since="21"/>
+		<field name="INVALID_APPWIDGET_ID"/>
+		<field name="META_DATA_APPWIDGET_PROVIDER"/>
+		<field name="OPTION_APPWIDGET_HOST_CATEGORY" since="17"/>
+		<field name="OPTION_APPWIDGET_MAX_HEIGHT" since="16"/>
+		<field name="OPTION_APPWIDGET_MAX_WIDTH" since="16"/>
+		<field name="OPTION_APPWIDGET_MIN_HEIGHT" since="16"/>
+		<field name="OPTION_APPWIDGET_MIN_WIDTH" since="16"/>
+		<field name="OPTION_APPWIDGET_RESTORE_COMPLETED" since="30"/>
+		<field name="OPTION_APPWIDGET_SIZES" since="31"/>
+	</class>
+	<class name="android/appwidget/AppWidgetProvider" since="3">
+		<extends name="android/content/BroadcastReceiver"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAppWidgetOptionsChanged(Landroid/content/Context;Landroid/appwidget/AppWidgetManager;ILandroid/os/Bundle;)V" since="16"/>
+		<method name="onDeleted(Landroid/content/Context;[I)V"/>
+		<method name="onDisabled(Landroid/content/Context;)V"/>
+		<method name="onEnabled(Landroid/content/Context;)V"/>
+		<method name="onRestored(Landroid/content/Context;[I[I)V" since="21"/>
+		<method name="onUpdate(Landroid/content/Context;Landroid/appwidget/AppWidgetManager;[I)V"/>
+	</class>
+	<class name="android/appwidget/AppWidgetProviderInfo" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="clone()Landroid/appwidget/AppWidgetProviderInfo;" since="17"/>
+		<method name="getActivityInfo()Landroid/content/pm/ActivityInfo;" since="31"/>
+		<method name="getProfile()Landroid/os/UserHandle;" since="21"/>
+		<method name="loadDescription(Landroid/content/Context;)Ljava/lang/CharSequence;" since="31"/>
+		<method name="loadIcon(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/String;" since="21"/>
+		<method name="loadPreviewImage(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<field name="CREATOR"/>
+		<field name="RESIZE_BOTH" since="12"/>
+		<field name="RESIZE_HORIZONTAL" since="12"/>
+		<field name="RESIZE_NONE" since="12"/>
+		<field name="RESIZE_VERTICAL" since="12"/>
+		<field name="WIDGET_CATEGORY_HOME_SCREEN" since="17"/>
+		<field name="WIDGET_CATEGORY_KEYGUARD" since="17"/>
+		<field name="WIDGET_CATEGORY_SEARCHBOX" since="21"/>
+		<field name="WIDGET_FEATURE_CONFIGURATION_OPTIONAL" since="31"/>
+		<field name="WIDGET_FEATURE_HIDE_FROM_PICKER" since="28"/>
+		<field name="WIDGET_FEATURE_RECONFIGURABLE" since="28"/>
+		<field name="autoAdvanceViewId" since="11"/>
+		<field name="configure"/>
+		<field name="descriptionRes" since="31"/>
+		<field name="icon"/>
+		<field name="initialKeyguardLayout" since="17"/>
+		<field name="initialLayout"/>
+		<field name="label" deprecated="21"/>
+		<field name="maxResizeHeight" since="31"/>
+		<field name="maxResizeWidth" since="31"/>
+		<field name="minHeight"/>
+		<field name="minResizeHeight" since="14"/>
+		<field name="minResizeWidth" since="14"/>
+		<field name="minWidth"/>
+		<field name="previewImage" since="11"/>
+		<field name="previewLayout" since="31"/>
+		<field name="provider"/>
+		<field name="resizeMode" since="12"/>
+		<field name="targetCellHeight" since="31"/>
+		<field name="targetCellWidth" since="31"/>
+		<field name="updatePeriodMillis"/>
+		<field name="widgetCategory" since="17"/>
+		<field name="widgetFeatures" since="28"/>
+	</class>
+	<class name="android/bluetooth/BluetoothA2dp" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<method name="isA2dpPlaying(Landroid/bluetooth/BluetoothDevice;)Z"/>
+		<field name="ACTION_CONNECTION_STATE_CHANGED"/>
+		<field name="ACTION_PLAYING_STATE_CHANGED"/>
+		<field name="STATE_NOT_PLAYING"/>
+		<field name="STATE_PLAYING"/>
+	</class>
+	<class name="android/bluetooth/BluetoothAdapter" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="cancelDiscovery()Z"/>
+		<method name="checkBluetoothAddress(Ljava/lang/String;)Z"/>
+		<method name="closeProfileProxy(ILandroid/bluetooth/BluetoothProfile;)V" since="11"/>
+		<method name="disable()Z"/>
+		<method name="enable()Z"/>
+		<method name="getAddress()Ljava/lang/String;"/>
+		<method name="getBluetoothLeAdvertiser()Landroid/bluetooth/le/BluetoothLeAdvertiser;" since="21"/>
+		<method name="getBluetoothLeScanner()Landroid/bluetooth/le/BluetoothLeScanner;" since="21"/>
+		<method name="getBondedDevices()Ljava/util/Set;"/>
+		<method name="getDefaultAdapter()Landroid/bluetooth/BluetoothAdapter;" deprecated="31"/>
+		<method name="getLeMaximumAdvertisingDataLength()I" since="26"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getProfileConnectionState(I)I" since="14"/>
+		<method name="getProfileProxy(Landroid/content/Context;Landroid/bluetooth/BluetoothProfile$ServiceListener;I)Z" since="11"/>
+		<method name="getRemoteDevice(Ljava/lang/String;)Landroid/bluetooth/BluetoothDevice;"/>
+		<method name="getRemoteDevice([B)Landroid/bluetooth/BluetoothDevice;" since="16"/>
+		<method name="getScanMode()I"/>
+		<method name="getState()I"/>
+		<method name="isDiscovering()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="isLe2MPhySupported()Z" since="26"/>
+		<method name="isLeCodedPhySupported()Z" since="26"/>
+		<method name="isLeExtendedAdvertisingSupported()Z" since="26"/>
+		<method name="isLePeriodicAdvertisingSupported()Z" since="26"/>
+		<method name="isMultipleAdvertisementSupported()Z" since="21"/>
+		<method name="isOffloadedFilteringSupported()Z" since="21"/>
+		<method name="isOffloadedScanBatchingSupported()Z" since="21"/>
+		<method name="listenUsingInsecureL2capChannel()Landroid/bluetooth/BluetoothServerSocket;" since="29"/>
+		<method name="listenUsingInsecureRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;" since="10"/>
+		<method name="listenUsingL2capChannel()Landroid/bluetooth/BluetoothServerSocket;" since="29"/>
+		<method name="listenUsingRfcommWithServiceRecord(Ljava/lang/String;Ljava/util/UUID;)Landroid/bluetooth/BluetoothServerSocket;"/>
+		<method name="setName(Ljava/lang/String;)Z"/>
+		<method name="startDiscovery()Z"/>
+		<method name="startLeScan(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z" since="18" deprecated="21"/>
+		<method name="startLeScan([Ljava/util/UUID;Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)Z" since="18" deprecated="21"/>
+		<method name="stopLeScan(Landroid/bluetooth/BluetoothAdapter$LeScanCallback;)V" since="18" deprecated="21"/>
+		<field name="ACTION_CONNECTION_STATE_CHANGED" since="11"/>
+		<field name="ACTION_DISCOVERY_FINISHED"/>
+		<field name="ACTION_DISCOVERY_STARTED"/>
+		<field name="ACTION_LOCAL_NAME_CHANGED"/>
+		<field name="ACTION_REQUEST_DISCOVERABLE"/>
+		<field name="ACTION_REQUEST_ENABLE"/>
+		<field name="ACTION_SCAN_MODE_CHANGED"/>
+		<field name="ACTION_STATE_CHANGED"/>
+		<field name="ERROR"/>
+		<field name="EXTRA_CONNECTION_STATE" since="11"/>
+		<field name="EXTRA_DISCOVERABLE_DURATION"/>
+		<field name="EXTRA_LOCAL_NAME"/>
+		<field name="EXTRA_PREVIOUS_CONNECTION_STATE" since="11"/>
+		<field name="EXTRA_PREVIOUS_SCAN_MODE"/>
+		<field name="EXTRA_PREVIOUS_STATE"/>
+		<field name="EXTRA_SCAN_MODE"/>
+		<field name="EXTRA_STATE"/>
+		<field name="SCAN_MODE_CONNECTABLE"/>
+		<field name="SCAN_MODE_CONNECTABLE_DISCOVERABLE"/>
+		<field name="SCAN_MODE_NONE"/>
+		<field name="STATE_CONNECTED" since="11"/>
+		<field name="STATE_CONNECTING" since="11"/>
+		<field name="STATE_DISCONNECTED" since="11"/>
+		<field name="STATE_DISCONNECTING" since="11"/>
+		<field name="STATE_OFF"/>
+		<field name="STATE_ON"/>
+		<field name="STATE_TURNING_OFF"/>
+		<field name="STATE_TURNING_ON"/>
+	</class>
+	<class name="android/bluetooth/BluetoothAdapter$LeScanCallback" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="onLeScan(Landroid/bluetooth/BluetoothDevice;I[B)V"/>
+	</class>
+	<class name="android/bluetooth/BluetoothAssignedNumbers" since="11">
+		<extends name="java/lang/Object"/>
+		<field name="AAMP_OF_AMERICA" since="19"/>
+		<field name="ACCEL_SEMICONDUCTOR"/>
+		<field name="ACE_SENSOR" since="19"/>
+		<field name="ADIDAS" since="19"/>
+		<field name="ADVANCED_PANMOBIL_SYSTEMS" since="19"/>
+		<field name="AIROHA_TECHNOLOGY" since="19"/>
+		<field name="ALCATEL"/>
+		<field name="ALPWISE" since="19"/>
+		<field name="AMICCOM_ELECTRONICS" since="19"/>
+		<field name="APLIX" since="19"/>
+		<field name="APPLE"/>
+		<field name="APT_LICENSING"/>
+		<field name="ARCHOS" since="19"/>
+		<field name="ARP_DEVICES" since="19"/>
+		<field name="ATHEROS_COMMUNICATIONS"/>
+		<field name="ATMEL"/>
+		<field name="AUSTCO_COMMUNICATION_SYSTEMS" since="19"/>
+		<field name="AUTONET_MOBILE" since="19"/>
+		<field name="AVAGO"/>
+		<field name="AVM_BERLIN"/>
+		<field name="A_AND_D_ENGINEERING" since="19"/>
+		<field name="A_AND_R_CAMBRIDGE" since="19"/>
+		<field name="BANDSPEED"/>
+		<field name="BAND_XI_INTERNATIONAL" since="19"/>
+		<field name="BDE_TECHNOLOGY" since="19"/>
+		<field name="BEATS_ELECTRONICS" since="19"/>
+		<field name="BEAUTIFUL_ENTERPRISE" since="19"/>
+		<field name="BEKEY" since="19"/>
+		<field name="BELKIN_INTERNATIONAL"/>
+		<field name="BINAURIC" since="19"/>
+		<field name="BIOSENTRONICS" since="19"/>
+		<field name="BLUEGIGA"/>
+		<field name="BLUERADIOS" since="19"/>
+		<field name="BLUETOOTH_SIG"/>
+		<field name="BLUETREK_TECHNOLOGIES" since="19"/>
+		<field name="BOSE" since="19"/>
+		<field name="BRIARTEK" since="19"/>
+		<field name="BROADCOM"/>
+		<field name="CAEN_RFID" since="19"/>
+		<field name="CAMBRIDGE_SILICON_RADIO"/>
+		<field name="CATC"/>
+		<field name="CINETIX" since="19"/>
+		<field name="CLARINOX_TECHNOLOGIES" since="19"/>
+		<field name="COLORFY" since="19"/>
+		<field name="COMMIL"/>
+		<field name="CONEXANT_SYSTEMS"/>
+		<field name="CONNECTBLUE" since="19"/>
+		<field name="CONTINENTAL_AUTOMOTIVE"/>
+		<field name="CONWISE_TECHNOLOGY"/>
+		<field name="CREATIVE_TECHNOLOGY" since="19"/>
+		<field name="C_TECHNOLOGIES"/>
+		<field name="DANLERS" since="19"/>
+		<field name="DELORME_PUBLISHING_COMPANY" since="19"/>
+		<field name="DEXCOM" since="19"/>
+		<field name="DIALOG_SEMICONDUCTOR" since="19"/>
+		<field name="DIGIANSWER"/>
+		<field name="ECLIPSE"/>
+		<field name="ECOTEST" since="19"/>
+		<field name="ELGATO_SYSTEMS" since="19"/>
+		<field name="EM_MICROELECTRONIC_MARIN"/>
+		<field name="EQUINOX_AG" since="19"/>
+		<field name="ERICSSON_TECHNOLOGY"/>
+		<field name="EVLUMA" since="19"/>
+		<field name="FREE2MOVE"/>
+		<field name="FUNAI_ELECTRIC" since="19"/>
+		<field name="GARMIN_INTERNATIONAL" since="19"/>
+		<field name="GCT_SEMICONDUCTOR"/>
+		<field name="GELO" since="19"/>
+		<field name="GENEQ" since="19"/>
+		<field name="GENERAL_MOTORS" since="19"/>
+		<field name="GENNUM"/>
+		<field name="GEOFORCE" since="19"/>
+		<field name="GIBSON_GUITARS" since="19"/>
+		<field name="GN_NETCOM" since="19"/>
+		<field name="GN_RESOUND" since="19"/>
+		<field name="GOOGLE" since="19"/>
+		<field name="GREEN_THROTTLE_GAMES" since="19"/>
+		<field name="GROUP_SENSE" since="19"/>
+		<field name="HANLYNN_TECHNOLOGIES" since="19"/>
+		<field name="HARMAN_INTERNATIONAL"/>
+		<field name="HEWLETT_PACKARD" since="19"/>
+		<field name="HITACHI"/>
+		<field name="HOSIDEN" since="19"/>
+		<field name="IBM"/>
+		<field name="INFINEON_TECHNOLOGIES"/>
+		<field name="INGENIEUR_SYSTEMGRUPPE_ZAHN" since="19"/>
+		<field name="INTEGRATED_SILICON_SOLUTION"/>
+		<field name="INTEGRATED_SYSTEM_SOLUTION"/>
+		<field name="INTEL"/>
+		<field name="INVENTEL"/>
+		<field name="IPEXTREME"/>
+		<field name="I_TECH_DYNAMIC_GLOBAL_DISTRIBUTION" since="19"/>
+		<field name="JAWBONE" since="19"/>
+		<field name="JIANGSU_TOPPOWER_AUTOMOTIVE_ELECTRONICS" since="19"/>
+		<field name="JOHNSON_CONTROLS" since="19"/>
+		<field name="J_AND_M"/>
+		<field name="KAWANTECH" since="19"/>
+		<field name="KC_TECHNOLOGY"/>
+		<field name="KENSINGTON_COMPUTER_PRODUCTS_GROUP" since="19"/>
+		<field name="LAIRD_TECHNOLOGIES" since="19"/>
+		<field name="LESSWIRE" since="19"/>
+		<field name="LG_ELECTRONICS" since="19"/>
+		<field name="LINAK" since="19"/>
+		<field name="LUCENT"/>
+		<field name="LUDUS_HELSINKI" since="19"/>
+		<field name="MACRONIX"/>
+		<field name="MAGNETI_MARELLI" since="19"/>
+		<field name="MANSELLA"/>
+		<field name="MARVELL"/>
+		<field name="MATSUSHITA_ELECTRIC"/>
+		<field name="MC10" since="19"/>
+		<field name="MEDIATEK"/>
+		<field name="MESO_INTERNATIONAL" since="19"/>
+		<field name="META_WATCH" since="19"/>
+		<field name="MEWTEL_TECHNOLOGY"/>
+		<field name="MICOMMAND" since="19"/>
+		<field name="MICROCHIP_TECHNOLOGY" since="19"/>
+		<field name="MICROSOFT"/>
+		<field name="MINDTREE" since="19"/>
+		<field name="MISFIT_WEARABLES" since="19"/>
+		<field name="MITEL_SEMICONDUCTOR"/>
+		<field name="MITSUBISHI_ELECTRIC"/>
+		<field name="MOBILIAN_CORPORATION"/>
+		<field name="MONSTER" since="19"/>
+		<field name="MOTOROLA"/>
+		<field name="MSTAR_SEMICONDUCTOR" since="19"/>
+		<field name="MUZIK" since="19"/>
+		<field name="NEC"/>
+		<field name="NEC_LIGHTING" since="19"/>
+		<field name="NEWLOGIC"/>
+		<field name="NIKE" since="19"/>
+		<field name="NINE_SOLUTIONS" since="19"/>
+		<field name="NOKIA_MOBILE_PHONES"/>
+		<field name="NORDIC_SEMICONDUCTOR"/>
+		<field name="NORWOOD_SYSTEMS"/>
+		<field name="ODM_TECHNOLOGY" since="19"/>
+		<field name="OMEGAWAVE" since="19"/>
+		<field name="ONSET_COMPUTER" since="19"/>
+		<field name="OPEN_INTERFACE"/>
+		<field name="OTL_DYNAMICS" since="19"/>
+		<field name="PANDA_OCEAN" since="19"/>
+		<field name="PARROT"/>
+		<field name="PARTHUS_TECHNOLOGIES"/>
+		<field name="PASSIF_SEMICONDUCTOR" since="19"/>
+		<field name="PETER_SYSTEMTECHNIK" since="19"/>
+		<field name="PHILIPS_SEMICONDUCTORS"/>
+		<field name="PLANTRONICS"/>
+		<field name="POLAR_ELECTRO" since="19"/>
+		<field name="POLAR_ELECTRO_EUROPE" since="19"/>
+		<field name="PROCTER_AND_GAMBLE" since="19"/>
+		<field name="QUALCOMM"/>
+		<field name="QUALCOMM_CONNECTED_EXPERIENCES" since="19"/>
+		<field name="QUALCOMM_INNOVATION_CENTER" since="19"/>
+		<field name="QUALCOMM_LABS" since="19"/>
+		<field name="QUALCOMM_TECHNOLOGIES" since="19"/>
+		<field name="QUINTIC" since="19"/>
+		<field name="QUUPPA" since="19"/>
+		<field name="RALINK_TECHNOLOGY"/>
+		<field name="RDA_MICROELECTRONICS" since="19"/>
+		<field name="REALTEK_SEMICONDUCTOR"/>
+		<field name="RED_M"/>
+		<field name="RENESAS_TECHNOLOGY"/>
+		<field name="RESEARCH_IN_MOTION"/>
+		<field name="RF_MICRO_DEVICES"/>
+		<field name="RIVIERAWAVES"/>
+		<field name="ROHDE_AND_SCHWARZ"/>
+		<field name="RTX_TELECOM"/>
+		<field name="SAMSUNG_ELECTRONICS" since="19"/>
+		<field name="SARIS_CYCLING_GROUP" since="19"/>
+		<field name="SEERS_TECHNOLOGY" since="19"/>
+		<field name="SEIKO_EPSON"/>
+		<field name="SELFLY" since="19"/>
+		<field name="SEMILINK" since="19"/>
+		<field name="SENNHEISER_COMMUNICATIONS" since="19"/>
+		<field name="SHANGHAI_SUPER_SMART_ELECTRONICS" since="19"/>
+		<field name="SHENZHEN_EXCELSECU_DATA_TECHNOLOGY" since="19"/>
+		<field name="SIGNIA_TECHNOLOGIES"/>
+		<field name="SILICON_WAVE"/>
+		<field name="SIRF_TECHNOLOGY"/>
+		<field name="SOCKET_MOBILE"/>
+		<field name="SONY_ERICSSON"/>
+		<field name="SOUND_ID" since="19"/>
+		<field name="SPORTS_TRACKING_TECHNOLOGIES" since="19"/>
+		<field name="SR_MEDIZINELEKTRONIK" since="19"/>
+		<field name="STACCATO_COMMUNICATIONS"/>
+		<field name="STALMART_TECHNOLOGY" since="19"/>
+		<field name="STARKEY_LABORATORIES" since="19"/>
+		<field name="STOLLMAN_E_PLUS_V" since="19"/>
+		<field name="STONESTREET_ONE"/>
+		<field name="ST_MICROELECTRONICS"/>
+		<field name="SUMMIT_DATA_COMMUNICATIONS" since="19"/>
+		<field name="SUUNTO" since="19"/>
+		<field name="SWIRL_NETWORKS" since="19"/>
+		<field name="SYMBOL_TECHNOLOGIES"/>
+		<field name="SYNOPSYS"/>
+		<field name="SYSTEMS_AND_CHIPS"/>
+		<field name="S_POWER_ELECTRONICS" since="19"/>
+		<field name="TAIXINGBANG_TECHNOLOGY" since="19"/>
+		<field name="TENOVIS"/>
+		<field name="TERAX"/>
+		<field name="TEXAS_INSTRUMENTS"/>
+		<field name="THINKOPTICS" since="19"/>
+		<field name="THREECOM"/>
+		<field name="THREE_DIJOY"/>
+		<field name="THREE_DSP"/>
+		<field name="TIMEKEEPING_SYSTEMS" since="19"/>
+		<field name="TIMEX_GROUP_USA" since="19"/>
+		<field name="TOPCORN_POSITIONING_SYSTEMS" since="19"/>
+		<field name="TOSHIBA"/>
+		<field name="TRANSILICA"/>
+		<field name="TRELAB" since="19"/>
+		<field name="TTPCOM"/>
+		<field name="TXTR" since="19"/>
+		<field name="TZERO_TECHNOLOGIES"/>
+		<field name="UNIVERSAL_ELECTRONICS" since="19"/>
+		<field name="VERTU" since="19"/>
+		<field name="VISTEON" since="19"/>
+		<field name="VIZIO"/>
+		<field name="VOYETRA_TURTLE_BEACH" since="19"/>
+		<field name="WAVEPLUS_TECHNOLOGY"/>
+		<field name="WICENTRIC"/>
+		<field name="WIDCOMM"/>
+		<field name="WUXI_VIMICRO" since="19"/>
+		<field name="ZEEVO"/>
+		<field name="ZER01_TV" since="19"/>
+		<field name="ZOMM" since="19"/>
+		<field name="ZSCAN_SOFTWARE" since="19"/>
+	</class>
+	<class name="android/bluetooth/BluetoothClass" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDeviceClass()I"/>
+		<method name="getMajorDeviceClass()I"/>
+		<method name="hasService(I)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/bluetooth/BluetoothClass$Device" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="AUDIO_VIDEO_CAMCORDER"/>
+		<field name="AUDIO_VIDEO_CAR_AUDIO"/>
+		<field name="AUDIO_VIDEO_HANDSFREE"/>
+		<field name="AUDIO_VIDEO_HEADPHONES"/>
+		<field name="AUDIO_VIDEO_HIFI_AUDIO"/>
+		<field name="AUDIO_VIDEO_LOUDSPEAKER"/>
+		<field name="AUDIO_VIDEO_MICROPHONE"/>
+		<field name="AUDIO_VIDEO_PORTABLE_AUDIO"/>
+		<field name="AUDIO_VIDEO_SET_TOP_BOX"/>
+		<field name="AUDIO_VIDEO_UNCATEGORIZED"/>
+		<field name="AUDIO_VIDEO_VCR"/>
+		<field name="AUDIO_VIDEO_VIDEO_CAMERA"/>
+		<field name="AUDIO_VIDEO_VIDEO_CONFERENCING"/>
+		<field name="AUDIO_VIDEO_VIDEO_DISPLAY_AND_LOUDSPEAKER"/>
+		<field name="AUDIO_VIDEO_VIDEO_GAMING_TOY"/>
+		<field name="AUDIO_VIDEO_VIDEO_MONITOR"/>
+		<field name="AUDIO_VIDEO_WEARABLE_HEADSET"/>
+		<field name="COMPUTER_DESKTOP"/>
+		<field name="COMPUTER_HANDHELD_PC_PDA"/>
+		<field name="COMPUTER_LAPTOP"/>
+		<field name="COMPUTER_PALM_SIZE_PC_PDA"/>
+		<field name="COMPUTER_SERVER"/>
+		<field name="COMPUTER_UNCATEGORIZED"/>
+		<field name="COMPUTER_WEARABLE"/>
+		<field name="HEALTH_BLOOD_PRESSURE"/>
+		<field name="HEALTH_DATA_DISPLAY"/>
+		<field name="HEALTH_GLUCOSE"/>
+		<field name="HEALTH_PULSE_OXIMETER"/>
+		<field name="HEALTH_PULSE_RATE"/>
+		<field name="HEALTH_THERMOMETER"/>
+		<field name="HEALTH_UNCATEGORIZED"/>
+		<field name="HEALTH_WEIGHING"/>
+		<field name="PHONE_CELLULAR"/>
+		<field name="PHONE_CORDLESS"/>
+		<field name="PHONE_ISDN"/>
+		<field name="PHONE_MODEM_OR_GATEWAY"/>
+		<field name="PHONE_SMART"/>
+		<field name="PHONE_UNCATEGORIZED"/>
+		<field name="TOY_CONTROLLER"/>
+		<field name="TOY_DOLL_ACTION_FIGURE"/>
+		<field name="TOY_GAME"/>
+		<field name="TOY_ROBOT"/>
+		<field name="TOY_UNCATEGORIZED"/>
+		<field name="TOY_VEHICLE"/>
+		<field name="WEARABLE_GLASSES"/>
+		<field name="WEARABLE_HELMET"/>
+		<field name="WEARABLE_JACKET"/>
+		<field name="WEARABLE_PAGER"/>
+		<field name="WEARABLE_UNCATEGORIZED"/>
+		<field name="WEARABLE_WRIST_WATCH"/>
+	</class>
+	<class name="android/bluetooth/BluetoothClass$Device$Major" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="AUDIO_VIDEO"/>
+		<field name="COMPUTER"/>
+		<field name="HEALTH"/>
+		<field name="IMAGING"/>
+		<field name="MISC"/>
+		<field name="NETWORKING"/>
+		<field name="PERIPHERAL"/>
+		<field name="PHONE"/>
+		<field name="TOY"/>
+		<field name="UNCATEGORIZED"/>
+		<field name="WEARABLE"/>
+	</class>
+	<class name="android/bluetooth/BluetoothClass$Service" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="AUDIO"/>
+		<field name="CAPTURE"/>
+		<field name="INFORMATION"/>
+		<field name="LIMITED_DISCOVERABILITY"/>
+		<field name="NETWORKING"/>
+		<field name="OBJECT_TRANSFER"/>
+		<field name="POSITIONING"/>
+		<field name="RENDER"/>
+		<field name="TELEPHONY"/>
+	</class>
+	<class name="android/bluetooth/BluetoothDevice" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;)Landroid/bluetooth/BluetoothGatt;" since="18"/>
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;I)Landroid/bluetooth/BluetoothGatt;" since="23"/>
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;II)Landroid/bluetooth/BluetoothGatt;" since="26"/>
+		<method name="connectGatt(Landroid/content/Context;ZLandroid/bluetooth/BluetoothGattCallback;IILandroid/os/Handler;)Landroid/bluetooth/BluetoothGatt;" since="26"/>
+		<method name="createBond()Z" since="19"/>
+		<method name="createInsecureL2capChannel(I)Landroid/bluetooth/BluetoothSocket;" since="29"/>
+		<method name="createInsecureRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;" since="10"/>
+		<method name="createL2capChannel(I)Landroid/bluetooth/BluetoothSocket;" since="29"/>
+		<method name="createRfcommSocketToServiceRecord(Ljava/util/UUID;)Landroid/bluetooth/BluetoothSocket;"/>
+		<method name="fetchUuidsWithSdp()Z" since="15"/>
+		<method name="getAddress()Ljava/lang/String;"/>
+		<method name="getAlias()Ljava/lang/String;" since="30"/>
+		<method name="getBluetoothClass()Landroid/bluetooth/BluetoothClass;"/>
+		<method name="getBondState()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getType()I" since="18"/>
+		<method name="getUuids()[Landroid/os/ParcelUuid;" since="15"/>
+		<method name="setAlias(Ljava/lang/String;)I" since="31"/>
+		<method name="setPairingConfirmation(Z)Z" since="19"/>
+		<method name="setPin([B)Z" since="19"/>
+		<field name="ACTION_ACL_CONNECTED"/>
+		<field name="ACTION_ACL_DISCONNECTED"/>
+		<field name="ACTION_ACL_DISCONNECT_REQUESTED"/>
+		<field name="ACTION_ALIAS_CHANGED" since="30"/>
+		<field name="ACTION_BOND_STATE_CHANGED"/>
+		<field name="ACTION_CLASS_CHANGED"/>
+		<field name="ACTION_FOUND"/>
+		<field name="ACTION_NAME_CHANGED"/>
+		<field name="ACTION_PAIRING_REQUEST" since="19"/>
+		<field name="ACTION_UUID" since="15"/>
+		<field name="ADDRESS_TYPE_PUBLIC" since="31"/>
+		<field name="ADDRESS_TYPE_RANDOM" since="31"/>
+		<field name="BOND_BONDED"/>
+		<field name="BOND_BONDING"/>
+		<field name="BOND_NONE"/>
+		<field name="CREATOR"/>
+		<field name="DEVICE_TYPE_CLASSIC" since="18"/>
+		<field name="DEVICE_TYPE_DUAL" since="18"/>
+		<field name="DEVICE_TYPE_LE" since="18"/>
+		<field name="DEVICE_TYPE_UNKNOWN" since="18"/>
+		<field name="ERROR"/>
+		<field name="EXTRA_BOND_STATE"/>
+		<field name="EXTRA_CLASS"/>
+		<field name="EXTRA_DEVICE"/>
+		<field name="EXTRA_NAME"/>
+		<field name="EXTRA_PAIRING_KEY" since="19"/>
+		<field name="EXTRA_PAIRING_VARIANT" since="19"/>
+		<field name="EXTRA_PREVIOUS_BOND_STATE"/>
+		<field name="EXTRA_RSSI"/>
+		<field name="EXTRA_UUID" since="15"/>
+		<field name="PAIRING_VARIANT_PASSKEY_CONFIRMATION" since="19"/>
+		<field name="PAIRING_VARIANT_PIN" since="19"/>
+		<field name="PHY_LE_1M" since="26"/>
+		<field name="PHY_LE_1M_MASK" since="26"/>
+		<field name="PHY_LE_2M" since="26"/>
+		<field name="PHY_LE_2M_MASK" since="26"/>
+		<field name="PHY_LE_CODED" since="26"/>
+		<field name="PHY_LE_CODED_MASK" since="26"/>
+		<field name="PHY_OPTION_NO_PREFERRED" since="26"/>
+		<field name="PHY_OPTION_S2" since="26"/>
+		<field name="PHY_OPTION_S8" since="26"/>
+		<field name="TRANSPORT_AUTO" since="23"/>
+		<field name="TRANSPORT_BREDR" since="23"/>
+		<field name="TRANSPORT_LE" since="23"/>
+	</class>
+	<class name="android/bluetooth/BluetoothGatt" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<method name="abortReliableWrite()V" since="19"/>
+		<method name="abortReliableWrite(Landroid/bluetooth/BluetoothDevice;)V" deprecated="19"/>
+		<method name="beginReliableWrite()Z"/>
+		<method name="close()V"/>
+		<method name="connect()Z"/>
+		<method name="disconnect()V"/>
+		<method name="discoverServices()Z"/>
+		<method name="executeReliableWrite()Z"/>
+		<method name="getDevice()Landroid/bluetooth/BluetoothDevice;"/>
+		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;"/>
+		<method name="getServices()Ljava/util/List;"/>
+		<method name="readCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z"/>
+		<method name="readDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z"/>
+		<method name="readPhy()V" since="26"/>
+		<method name="readRemoteRssi()Z"/>
+		<method name="requestConnectionPriority(I)Z" since="21"/>
+		<method name="requestMtu(I)Z" since="21"/>
+		<method name="setCharacteristicNotification(Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z"/>
+		<method name="setPreferredPhy(III)V" since="26"/>
+		<method name="writeCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z"/>
+		<method name="writeDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z"/>
+		<field name="CONNECTION_PRIORITY_BALANCED" since="21"/>
+		<field name="CONNECTION_PRIORITY_HIGH" since="21"/>
+		<field name="CONNECTION_PRIORITY_LOW_POWER" since="21"/>
+		<field name="GATT_CONNECTION_CONGESTED" since="21"/>
+		<field name="GATT_FAILURE"/>
+		<field name="GATT_INSUFFICIENT_AUTHENTICATION"/>
+		<field name="GATT_INSUFFICIENT_ENCRYPTION"/>
+		<field name="GATT_INVALID_ATTRIBUTE_LENGTH"/>
+		<field name="GATT_INVALID_OFFSET"/>
+		<field name="GATT_READ_NOT_PERMITTED"/>
+		<field name="GATT_REQUEST_NOT_SUPPORTED"/>
+		<field name="GATT_SUCCESS"/>
+		<field name="GATT_WRITE_NOT_PERMITTED"/>
+	</class>
+	<class name="android/bluetooth/BluetoothGattCallback" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCharacteristicChanged(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;)V"/>
+		<method name="onCharacteristicRead(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V"/>
+		<method name="onCharacteristicWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattCharacteristic;I)V"/>
+		<method name="onConnectionStateChange(Landroid/bluetooth/BluetoothGatt;II)V"/>
+		<method name="onDescriptorRead(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattDescriptor;I)V"/>
+		<method name="onDescriptorWrite(Landroid/bluetooth/BluetoothGatt;Landroid/bluetooth/BluetoothGattDescriptor;I)V"/>
+		<method name="onMtuChanged(Landroid/bluetooth/BluetoothGatt;II)V" since="21"/>
+		<method name="onPhyRead(Landroid/bluetooth/BluetoothGatt;III)V" since="26"/>
+		<method name="onPhyUpdate(Landroid/bluetooth/BluetoothGatt;III)V" since="26"/>
+		<method name="onReadRemoteRssi(Landroid/bluetooth/BluetoothGatt;II)V"/>
+		<method name="onReliableWriteCompleted(Landroid/bluetooth/BluetoothGatt;I)V"/>
+		<method name="onServiceChanged(Landroid/bluetooth/BluetoothGatt;)V" since="31"/>
+		<method name="onServicesDiscovered(Landroid/bluetooth/BluetoothGatt;I)V"/>
+	</class>
+	<class name="android/bluetooth/BluetoothGattCharacteristic" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="24"/>
+		<method name="&lt;init>(Ljava/util/UUID;II)V"/>
+		<method name="addDescriptor(Landroid/bluetooth/BluetoothGattDescriptor;)Z"/>
+		<method name="getDescriptor(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattDescriptor;"/>
+		<method name="getDescriptors()Ljava/util/List;"/>
+		<method name="getFloatValue(II)Ljava/lang/Float;"/>
+		<method name="getInstanceId()I"/>
+		<method name="getIntValue(II)Ljava/lang/Integer;"/>
+		<method name="getPermissions()I"/>
+		<method name="getProperties()I"/>
+		<method name="getService()Landroid/bluetooth/BluetoothGattService;"/>
+		<method name="getStringValue(I)Ljava/lang/String;"/>
+		<method name="getUuid()Ljava/util/UUID;"/>
+		<method name="getValue()[B"/>
+		<method name="getWriteType()I"/>
+		<method name="setValue(III)Z"/>
+		<method name="setValue(IIII)Z"/>
+		<method name="setValue(Ljava/lang/String;)Z"/>
+		<method name="setValue([B)Z"/>
+		<method name="setWriteType(I)V"/>
+		<field name="CREATOR" since="24"/>
+		<field name="FORMAT_FLOAT"/>
+		<field name="FORMAT_SFLOAT"/>
+		<field name="FORMAT_SINT16"/>
+		<field name="FORMAT_SINT32"/>
+		<field name="FORMAT_SINT8"/>
+		<field name="FORMAT_UINT16"/>
+		<field name="FORMAT_UINT32"/>
+		<field name="FORMAT_UINT8"/>
+		<field name="PERMISSION_READ"/>
+		<field name="PERMISSION_READ_ENCRYPTED"/>
+		<field name="PERMISSION_READ_ENCRYPTED_MITM"/>
+		<field name="PERMISSION_WRITE"/>
+		<field name="PERMISSION_WRITE_ENCRYPTED"/>
+		<field name="PERMISSION_WRITE_ENCRYPTED_MITM"/>
+		<field name="PERMISSION_WRITE_SIGNED"/>
+		<field name="PERMISSION_WRITE_SIGNED_MITM"/>
+		<field name="PROPERTY_BROADCAST"/>
+		<field name="PROPERTY_EXTENDED_PROPS"/>
+		<field name="PROPERTY_INDICATE"/>
+		<field name="PROPERTY_NOTIFY"/>
+		<field name="PROPERTY_READ"/>
+		<field name="PROPERTY_SIGNED_WRITE"/>
+		<field name="PROPERTY_WRITE"/>
+		<field name="PROPERTY_WRITE_NO_RESPONSE"/>
+		<field name="WRITE_TYPE_DEFAULT"/>
+		<field name="WRITE_TYPE_NO_RESPONSE"/>
+		<field name="WRITE_TYPE_SIGNED"/>
+		<field name="mDescriptors"/>
+	</class>
+	<class name="android/bluetooth/BluetoothGattDescriptor" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="24"/>
+		<method name="&lt;init>(Ljava/util/UUID;I)V"/>
+		<method name="getCharacteristic()Landroid/bluetooth/BluetoothGattCharacteristic;"/>
+		<method name="getPermissions()I"/>
+		<method name="getUuid()Ljava/util/UUID;"/>
+		<method name="getValue()[B"/>
+		<method name="setValue([B)Z"/>
+		<field name="CREATOR" since="24"/>
+		<field name="DISABLE_NOTIFICATION_VALUE"/>
+		<field name="ENABLE_INDICATION_VALUE"/>
+		<field name="ENABLE_NOTIFICATION_VALUE"/>
+		<field name="PERMISSION_READ"/>
+		<field name="PERMISSION_READ_ENCRYPTED"/>
+		<field name="PERMISSION_READ_ENCRYPTED_MITM"/>
+		<field name="PERMISSION_WRITE"/>
+		<field name="PERMISSION_WRITE_ENCRYPTED"/>
+		<field name="PERMISSION_WRITE_ENCRYPTED_MITM"/>
+		<field name="PERMISSION_WRITE_SIGNED"/>
+		<field name="PERMISSION_WRITE_SIGNED_MITM"/>
+	</class>
+	<class name="android/bluetooth/BluetoothGattServer" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<method name="addService(Landroid/bluetooth/BluetoothGattService;)Z"/>
+		<method name="cancelConnection(Landroid/bluetooth/BluetoothDevice;)V"/>
+		<method name="clearServices()V"/>
+		<method name="close()V"/>
+		<method name="connect(Landroid/bluetooth/BluetoothDevice;Z)Z"/>
+		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;"/>
+		<method name="getServices()Ljava/util/List;"/>
+		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z"/>
+		<method name="readPhy(Landroid/bluetooth/BluetoothDevice;)V" since="26"/>
+		<method name="removeService(Landroid/bluetooth/BluetoothGattService;)Z"/>
+		<method name="sendResponse(Landroid/bluetooth/BluetoothDevice;III[B)Z"/>
+		<method name="setPreferredPhy(Landroid/bluetooth/BluetoothDevice;III)V" since="26"/>
+	</class>
+	<class name="android/bluetooth/BluetoothGattServerCallback" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCharacteristicReadRequest(Landroid/bluetooth/BluetoothDevice;IILandroid/bluetooth/BluetoothGattCharacteristic;)V"/>
+		<method name="onCharacteristicWriteRequest(Landroid/bluetooth/BluetoothDevice;ILandroid/bluetooth/BluetoothGattCharacteristic;ZZI[B)V"/>
+		<method name="onConnectionStateChange(Landroid/bluetooth/BluetoothDevice;II)V"/>
+		<method name="onDescriptorReadRequest(Landroid/bluetooth/BluetoothDevice;IILandroid/bluetooth/BluetoothGattDescriptor;)V"/>
+		<method name="onDescriptorWriteRequest(Landroid/bluetooth/BluetoothDevice;ILandroid/bluetooth/BluetoothGattDescriptor;ZZI[B)V"/>
+		<method name="onExecuteWrite(Landroid/bluetooth/BluetoothDevice;IZ)V"/>
+		<method name="onMtuChanged(Landroid/bluetooth/BluetoothDevice;I)V" since="22"/>
+		<method name="onNotificationSent(Landroid/bluetooth/BluetoothDevice;I)V" since="21"/>
+		<method name="onPhyRead(Landroid/bluetooth/BluetoothDevice;III)V" since="26"/>
+		<method name="onPhyUpdate(Landroid/bluetooth/BluetoothDevice;III)V" since="26"/>
+		<method name="onServiceAdded(ILandroid/bluetooth/BluetoothGattService;)V"/>
+	</class>
+	<class name="android/bluetooth/BluetoothGattService" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="24"/>
+		<method name="&lt;init>(Ljava/util/UUID;I)V"/>
+		<method name="addCharacteristic(Landroid/bluetooth/BluetoothGattCharacteristic;)Z"/>
+		<method name="addService(Landroid/bluetooth/BluetoothGattService;)Z"/>
+		<method name="getCharacteristic(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattCharacteristic;"/>
+		<method name="getCharacteristics()Ljava/util/List;"/>
+		<method name="getIncludedServices()Ljava/util/List;"/>
+		<method name="getInstanceId()I"/>
+		<method name="getType()I"/>
+		<method name="getUuid()Ljava/util/UUID;"/>
+		<field name="CREATOR" since="24"/>
+		<field name="SERVICE_TYPE_PRIMARY"/>
+		<field name="SERVICE_TYPE_SECONDARY"/>
+		<field name="mCharacteristics"/>
+		<field name="mIncludedServices"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHeadset" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<method name="isAudioConnected(Landroid/bluetooth/BluetoothDevice;)Z"/>
+		<method name="isNoiseReductionSupported(Landroid/bluetooth/BluetoothDevice;)Z" since="31"/>
+		<method name="isVoiceRecognitionSupported(Landroid/bluetooth/BluetoothDevice;)Z" since="31"/>
+		<method name="sendVendorSpecificResultCode(Landroid/bluetooth/BluetoothDevice;Ljava/lang/String;Ljava/lang/String;)Z" since="19"/>
+		<method name="startVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z"/>
+		<method name="stopVoiceRecognition(Landroid/bluetooth/BluetoothDevice;)Z"/>
+		<field name="ACTION_AUDIO_STATE_CHANGED"/>
+		<field name="ACTION_CONNECTION_STATE_CHANGED"/>
+		<field name="ACTION_VENDOR_SPECIFIC_HEADSET_EVENT"/>
+		<field name="AT_CMD_TYPE_ACTION"/>
+		<field name="AT_CMD_TYPE_BASIC"/>
+		<field name="AT_CMD_TYPE_READ"/>
+		<field name="AT_CMD_TYPE_SET"/>
+		<field name="AT_CMD_TYPE_TEST"/>
+		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_ARGS"/>
+		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD"/>
+		<field name="EXTRA_VENDOR_SPECIFIC_HEADSET_EVENT_CMD_TYPE"/>
+		<field name="STATE_AUDIO_CONNECTED"/>
+		<field name="STATE_AUDIO_CONNECTING"/>
+		<field name="STATE_AUDIO_DISCONNECTED"/>
+		<field name="VENDOR_RESULT_CODE_COMMAND_ANDROID" since="19"/>
+		<field name="VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHealth" since="14" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<method name="connectChannelToSource(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z" deprecated="29"/>
+		<method name="disconnectChannel(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;I)Z" deprecated="29"/>
+		<method name="getMainChannelFd(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothHealthAppConfiguration;)Landroid/os/ParcelFileDescriptor;" deprecated="29"/>
+		<method name="registerSinkAppConfiguration(Ljava/lang/String;ILandroid/bluetooth/BluetoothHealthCallback;)Z" deprecated="29"/>
+		<method name="unregisterAppConfiguration(Landroid/bluetooth/BluetoothHealthAppConfiguration;)Z" deprecated="29"/>
+		<field name="APP_CONFIG_REGISTRATION_FAILURE" deprecated="29"/>
+		<field name="APP_CONFIG_REGISTRATION_SUCCESS" deprecated="29"/>
+		<field name="APP_CONFIG_UNREGISTRATION_FAILURE" deprecated="29"/>
+		<field name="APP_CONFIG_UNREGISTRATION_SUCCESS" deprecated="29"/>
+		<field name="CHANNEL_TYPE_RELIABLE" deprecated="29"/>
+		<field name="CHANNEL_TYPE_STREAMING" deprecated="29"/>
+		<field name="SINK_ROLE" deprecated="29"/>
+		<field name="SOURCE_ROLE" deprecated="29"/>
+		<field name="STATE_CHANNEL_CONNECTED" deprecated="29"/>
+		<field name="STATE_CHANNEL_CONNECTING" deprecated="29"/>
+		<field name="STATE_CHANNEL_DISCONNECTED" deprecated="29"/>
+		<field name="STATE_CHANNEL_DISCONNECTING" deprecated="29"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHealthAppConfiguration" since="14" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDataType()I" deprecated="29"/>
+		<method name="getName()Ljava/lang/String;" deprecated="29"/>
+		<method name="getRole()I" deprecated="29"/>
+		<field name="CREATOR" deprecated="29"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHealthCallback" since="14" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="onHealthAppConfigurationStatusChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;I)V" deprecated="29"/>
+		<method name="onHealthChannelStateChange(Landroid/bluetooth/BluetoothHealthAppConfiguration;Landroid/bluetooth/BluetoothDevice;IILandroid/os/ParcelFileDescriptor;I)V" deprecated="29"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHearingAid" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<field name="ACTION_CONNECTION_STATE_CHANGED"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHidDevice" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<method name="connect(Landroid/bluetooth/BluetoothDevice;)Z"/>
+		<method name="disconnect(Landroid/bluetooth/BluetoothDevice;)Z"/>
+		<method name="registerApp(Landroid/bluetooth/BluetoothHidDeviceAppSdpSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Landroid/bluetooth/BluetoothHidDeviceAppQosSettings;Ljava/util/concurrent/Executor;Landroid/bluetooth/BluetoothHidDevice$Callback;)Z"/>
+		<method name="replyReport(Landroid/bluetooth/BluetoothDevice;BB[B)Z"/>
+		<method name="reportError(Landroid/bluetooth/BluetoothDevice;B)Z"/>
+		<method name="sendReport(Landroid/bluetooth/BluetoothDevice;I[B)Z"/>
+		<method name="unregisterApp()Z"/>
+		<field name="ACTION_CONNECTION_STATE_CHANGED"/>
+		<field name="ERROR_RSP_INVALID_PARAM"/>
+		<field name="ERROR_RSP_INVALID_RPT_ID"/>
+		<field name="ERROR_RSP_NOT_READY"/>
+		<field name="ERROR_RSP_SUCCESS"/>
+		<field name="ERROR_RSP_UNKNOWN"/>
+		<field name="ERROR_RSP_UNSUPPORTED_REQ"/>
+		<field name="PROTOCOL_BOOT_MODE"/>
+		<field name="PROTOCOL_REPORT_MODE"/>
+		<field name="REPORT_TYPE_FEATURE"/>
+		<field name="REPORT_TYPE_INPUT"/>
+		<field name="REPORT_TYPE_OUTPUT"/>
+		<field name="SUBCLASS1_COMBO"/>
+		<field name="SUBCLASS1_KEYBOARD"/>
+		<field name="SUBCLASS1_MOUSE"/>
+		<field name="SUBCLASS1_NONE"/>
+		<field name="SUBCLASS2_CARD_READER"/>
+		<field name="SUBCLASS2_DIGITIZER_TABLET"/>
+		<field name="SUBCLASS2_GAMEPAD"/>
+		<field name="SUBCLASS2_JOYSTICK"/>
+		<field name="SUBCLASS2_REMOTE_CONTROL"/>
+		<field name="SUBCLASS2_SENSING_DEVICE"/>
+		<field name="SUBCLASS2_UNCATEGORIZED"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHidDevice$Callback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAppStatusChanged(Landroid/bluetooth/BluetoothDevice;Z)V"/>
+		<method name="onConnectionStateChanged(Landroid/bluetooth/BluetoothDevice;I)V"/>
+		<method name="onGetReport(Landroid/bluetooth/BluetoothDevice;BBI)V"/>
+		<method name="onInterruptData(Landroid/bluetooth/BluetoothDevice;B[B)V"/>
+		<method name="onSetProtocol(Landroid/bluetooth/BluetoothDevice;B)V"/>
+		<method name="onSetReport(Landroid/bluetooth/BluetoothDevice;BB[B)V"/>
+		<method name="onVirtualCableUnplug(Landroid/bluetooth/BluetoothDevice;)V"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHidDeviceAppQosSettings" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="getDelayVariation()I"/>
+		<method name="getLatency()I"/>
+		<method name="getPeakBandwidth()I"/>
+		<method name="getServiceType()I"/>
+		<method name="getTokenBucketSize()I"/>
+		<method name="getTokenRate()I"/>
+		<field name="CREATOR"/>
+		<field name="MAX"/>
+		<field name="SERVICE_BEST_EFFORT"/>
+		<field name="SERVICE_GUARANTEED"/>
+		<field name="SERVICE_NO_TRAFFIC"/>
+	</class>
+	<class name="android/bluetooth/BluetoothHidDeviceAppSdpSettings" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;B[B)V"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getDescriptors()[B"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getProvider()Ljava/lang/String;"/>
+		<method name="getSubclass()B"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/bluetooth/BluetoothLeAudio" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/bluetooth/BluetoothProfile"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<field name="ACTION_LE_AUDIO_CONNECTION_STATE_CHANGED"/>
+	</class>
+	<class name="android/bluetooth/BluetoothManager" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="getAdapter()Landroid/bluetooth/BluetoothAdapter;"/>
+		<method name="getConnectedDevices(I)Ljava/util/List;"/>
+		<method name="getConnectionState(Landroid/bluetooth/BluetoothDevice;I)I"/>
+		<method name="getDevicesMatchingConnectionStates(I[I)Ljava/util/List;"/>
+		<method name="openGattServer(Landroid/content/Context;Landroid/bluetooth/BluetoothGattServerCallback;)Landroid/bluetooth/BluetoothGattServer;"/>
+	</class>
+	<class name="android/bluetooth/BluetoothProfile" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="getConnectedDevices()Ljava/util/List;"/>
+		<method name="getConnectionState(Landroid/bluetooth/BluetoothDevice;)I"/>
+		<method name="getDevicesMatchingConnectionStates([I)Ljava/util/List;"/>
+		<field name="A2DP"/>
+		<field name="EXTRA_PREVIOUS_STATE"/>
+		<field name="EXTRA_STATE"/>
+		<field name="GATT" since="18"/>
+		<field name="GATT_SERVER" since="18"/>
+		<field name="HEADSET"/>
+		<field name="HEALTH" since="14" deprecated="29"/>
+		<field name="HEARING_AID" since="29"/>
+		<field name="HID_DEVICE" since="28"/>
+		<field name="SAP" since="23"/>
+		<field name="STATE_CONNECTED"/>
+		<field name="STATE_CONNECTING"/>
+		<field name="STATE_DISCONNECTED"/>
+		<field name="STATE_DISCONNECTING"/>
+	</class>
+	<class name="android/bluetooth/BluetoothProfile$ServiceListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onServiceConnected(ILandroid/bluetooth/BluetoothProfile;)V"/>
+		<method name="onServiceDisconnected(I)V"/>
+	</class>
+	<class name="android/bluetooth/BluetoothServerSocket" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="accept()Landroid/bluetooth/BluetoothSocket;"/>
+		<method name="accept(I)Landroid/bluetooth/BluetoothSocket;"/>
+		<method name="getPsm()I" since="29"/>
+	</class>
+	<class name="android/bluetooth/BluetoothSocket" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="connect()V"/>
+		<method name="getConnectionType()I" since="23"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getMaxReceivePacketSize()I" since="23"/>
+		<method name="getMaxTransmitPacketSize()I" since="23"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="getRemoteDevice()Landroid/bluetooth/BluetoothDevice;"/>
+		<method name="isConnected()Z" since="14"/>
+		<field name="TYPE_L2CAP" since="23"/>
+		<field name="TYPE_RFCOMM" since="23"/>
+		<field name="TYPE_SCO" since="23"/>
+	</class>
+	<class name="android/bluetooth/BluetoothStatusCodes" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_BLUETOOTH_NOT_ALLOWED"/>
+		<field name="ERROR_BLUETOOTH_NOT_ENABLED"/>
+		<field name="ERROR_DEVICE_NOT_BONDED"/>
+		<field name="ERROR_MISSING_BLUETOOTH_CONNECT_PERMISSION"/>
+		<field name="ERROR_UNKNOWN"/>
+		<field name="SUCCESS"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertiseCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onStartFailure(I)V"/>
+		<method name="onStartSuccess(Landroid/bluetooth/le/AdvertiseSettings;)V"/>
+		<field name="ADVERTISE_FAILED_ALREADY_STARTED"/>
+		<field name="ADVERTISE_FAILED_DATA_TOO_LARGE"/>
+		<field name="ADVERTISE_FAILED_FEATURE_UNSUPPORTED"/>
+		<field name="ADVERTISE_FAILED_INTERNAL_ERROR"/>
+		<field name="ADVERTISE_FAILED_TOO_MANY_ADVERTISERS"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertiseData" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getIncludeDeviceName()Z"/>
+		<method name="getIncludeTxPowerLevel()Z"/>
+		<method name="getManufacturerSpecificData()Landroid/util/SparseArray;"/>
+		<method name="getServiceData()Ljava/util/Map;"/>
+		<method name="getServiceSolicitationUuids()Ljava/util/List;" since="31"/>
+		<method name="getServiceUuids()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertiseData$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addManufacturerData(I[B)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
+		<method name="addServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
+		<method name="addServiceSolicitationUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;" since="31"/>
+		<method name="addServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
+		<method name="build()Landroid/bluetooth/le/AdvertiseData;"/>
+		<method name="setIncludeDeviceName(Z)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
+		<method name="setIncludeTxPowerLevel(Z)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertiseSettings" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getMode()I"/>
+		<method name="getTimeout()I"/>
+		<method name="getTxPowerLevel()I"/>
+		<method name="isConnectable()Z"/>
+		<field name="ADVERTISE_MODE_BALANCED"/>
+		<field name="ADVERTISE_MODE_LOW_LATENCY"/>
+		<field name="ADVERTISE_MODE_LOW_POWER"/>
+		<field name="ADVERTISE_TX_POWER_HIGH"/>
+		<field name="ADVERTISE_TX_POWER_LOW"/>
+		<field name="ADVERTISE_TX_POWER_MEDIUM"/>
+		<field name="ADVERTISE_TX_POWER_ULTRA_LOW"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertiseSettings$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/bluetooth/le/AdvertiseSettings;"/>
+		<method name="setAdvertiseMode(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
+		<method name="setConnectable(Z)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
+		<method name="setTimeout(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
+		<method name="setTxPowerLevel(I)Landroid/bluetooth/le/AdvertiseSettings$Builder;"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSet" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="enableAdvertising(ZII)V"/>
+		<method name="setAdvertisingData(Landroid/bluetooth/le/AdvertiseData;)V"/>
+		<method name="setAdvertisingParameters(Landroid/bluetooth/le/AdvertisingSetParameters;)V"/>
+		<method name="setPeriodicAdvertisingData(Landroid/bluetooth/le/AdvertiseData;)V"/>
+		<method name="setPeriodicAdvertisingEnabled(Z)V"/>
+		<method name="setPeriodicAdvertisingParameters(Landroid/bluetooth/le/PeriodicAdvertisingParameters;)V"/>
+		<method name="setScanResponseData(Landroid/bluetooth/le/AdvertiseData;)V"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSetCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAdvertisingDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
+		<method name="onAdvertisingEnabled(Landroid/bluetooth/le/AdvertisingSet;ZI)V"/>
+		<method name="onAdvertisingParametersUpdated(Landroid/bluetooth/le/AdvertisingSet;II)V"/>
+		<method name="onAdvertisingSetStarted(Landroid/bluetooth/le/AdvertisingSet;II)V"/>
+		<method name="onAdvertisingSetStopped(Landroid/bluetooth/le/AdvertisingSet;)V"/>
+		<method name="onPeriodicAdvertisingDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
+		<method name="onPeriodicAdvertisingEnabled(Landroid/bluetooth/le/AdvertisingSet;ZI)V"/>
+		<method name="onPeriodicAdvertisingParametersUpdated(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
+		<method name="onScanResponseDataSet(Landroid/bluetooth/le/AdvertisingSet;I)V"/>
+		<field name="ADVERTISE_FAILED_ALREADY_STARTED"/>
+		<field name="ADVERTISE_FAILED_DATA_TOO_LARGE"/>
+		<field name="ADVERTISE_FAILED_FEATURE_UNSUPPORTED"/>
+		<field name="ADVERTISE_FAILED_INTERNAL_ERROR"/>
+		<field name="ADVERTISE_FAILED_TOO_MANY_ADVERTISERS"/>
+		<field name="ADVERTISE_SUCCESS"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSetParameters" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getInterval()I"/>
+		<method name="getPrimaryPhy()I"/>
+		<method name="getSecondaryPhy()I"/>
+		<method name="getTxPowerLevel()I"/>
+		<method name="includeTxPower()Z"/>
+		<method name="isAnonymous()Z"/>
+		<method name="isConnectable()Z"/>
+		<method name="isLegacy()Z"/>
+		<method name="isScannable()Z"/>
+		<field name="CREATOR"/>
+		<field name="INTERVAL_HIGH"/>
+		<field name="INTERVAL_LOW"/>
+		<field name="INTERVAL_MAX"/>
+		<field name="INTERVAL_MEDIUM"/>
+		<field name="INTERVAL_MIN"/>
+		<field name="TX_POWER_HIGH"/>
+		<field name="TX_POWER_LOW"/>
+		<field name="TX_POWER_MAX"/>
+		<field name="TX_POWER_MEDIUM"/>
+		<field name="TX_POWER_MIN"/>
+		<field name="TX_POWER_ULTRA_LOW"/>
+	</class>
+	<class name="android/bluetooth/le/AdvertisingSetParameters$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/bluetooth/le/AdvertisingSetParameters;"/>
+		<method name="setAnonymous(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setConnectable(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setIncludeTxPower(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setInterval(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setLegacyMode(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setPrimaryPhy(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setScannable(Z)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setSecondaryPhy(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+		<method name="setTxPowerLevel(I)Landroid/bluetooth/le/AdvertisingSetParameters$Builder;"/>
+	</class>
+	<class name="android/bluetooth/le/BluetoothLeAdvertiser" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V"/>
+		<method name="startAdvertising(Landroid/bluetooth/le/AdvertiseSettings;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseCallback;)V"/>
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/AdvertisingSetCallback;)V" since="26"/>
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;IILandroid/bluetooth/le/AdvertisingSetCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertisingSetCallback;)V" since="26"/>
+		<method name="startAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/PeriodicAdvertisingParameters;Landroid/bluetooth/le/AdvertiseData;Landroid/bluetooth/le/AdvertisingSetCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="stopAdvertising(Landroid/bluetooth/le/AdvertiseCallback;)V"/>
+		<method name="stopAdvertisingSet(Landroid/bluetooth/le/AdvertisingSetCallback;)V" since="26"/>
+	</class>
+	<class name="android/bluetooth/le/BluetoothLeScanner" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="flushPendingScanResults(Landroid/bluetooth/le/ScanCallback;)V"/>
+		<method name="startScan(Landroid/bluetooth/le/ScanCallback;)V"/>
+		<method name="startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/app/PendingIntent;)I" since="26"/>
+		<method name="startScan(Ljava/util/List;Landroid/bluetooth/le/ScanSettings;Landroid/bluetooth/le/ScanCallback;)V"/>
+		<method name="stopScan(Landroid/app/PendingIntent;)V" since="26"/>
+		<method name="stopScan(Landroid/bluetooth/le/ScanCallback;)V"/>
+		<field name="EXTRA_CALLBACK_TYPE" since="26"/>
+		<field name="EXTRA_ERROR_CODE" since="26"/>
+		<field name="EXTRA_LIST_SCAN_RESULT" since="26"/>
+	</class>
+	<class name="android/bluetooth/le/PeriodicAdvertisingParameters" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getIncludeTxPower()Z"/>
+		<method name="getInterval()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/bluetooth/le/PeriodicAdvertisingParameters$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/bluetooth/le/PeriodicAdvertisingParameters;"/>
+		<method name="setIncludeTxPower(Z)Landroid/bluetooth/le/PeriodicAdvertisingParameters$Builder;"/>
+		<method name="setInterval(I)Landroid/bluetooth/le/PeriodicAdvertisingParameters$Builder;"/>
+	</class>
+	<class name="android/bluetooth/le/ScanCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onBatchScanResults(Ljava/util/List;)V"/>
+		<method name="onScanFailed(I)V"/>
+		<method name="onScanResult(ILandroid/bluetooth/le/ScanResult;)V"/>
+		<field name="SCAN_FAILED_ALREADY_STARTED"/>
+		<field name="SCAN_FAILED_APPLICATION_REGISTRATION_FAILED"/>
+		<field name="SCAN_FAILED_FEATURE_UNSUPPORTED"/>
+		<field name="SCAN_FAILED_INTERNAL_ERROR"/>
+	</class>
+	<class name="android/bluetooth/le/ScanFilter" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDeviceAddress()Ljava/lang/String;"/>
+		<method name="getDeviceName()Ljava/lang/String;"/>
+		<method name="getManufacturerData()[B"/>
+		<method name="getManufacturerDataMask()[B"/>
+		<method name="getManufacturerId()I"/>
+		<method name="getServiceData()[B"/>
+		<method name="getServiceDataMask()[B"/>
+		<method name="getServiceDataUuid()Landroid/os/ParcelUuid;"/>
+		<method name="getServiceSolicitationUuid()Landroid/os/ParcelUuid;" since="29"/>
+		<method name="getServiceSolicitationUuidMask()Landroid/os/ParcelUuid;" since="29"/>
+		<method name="getServiceUuid()Landroid/os/ParcelUuid;"/>
+		<method name="getServiceUuidMask()Landroid/os/ParcelUuid;"/>
+		<method name="matches(Landroid/bluetooth/le/ScanResult;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/bluetooth/le/ScanFilter$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/bluetooth/le/ScanFilter;"/>
+		<method name="setDeviceAddress(Ljava/lang/String;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+		<method name="setDeviceName(Ljava/lang/String;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+		<method name="setManufacturerData(I[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+		<method name="setManufacturerData(I[B[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+		<method name="setServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+		<method name="setServiceData(Landroid/os/ParcelUuid;[B[B)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+		<method name="setServiceSolicitationUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" since="29"/>
+		<method name="setServiceSolicitationUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;" since="29"/>
+		<method name="setServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+		<method name="setServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/bluetooth/le/ScanFilter$Builder;"/>
+	</class>
+	<class name="android/bluetooth/le/ScanRecord" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getAdvertiseFlags()I"/>
+		<method name="getBytes()[B"/>
+		<method name="getDeviceName()Ljava/lang/String;"/>
+		<method name="getManufacturerSpecificData()Landroid/util/SparseArray;"/>
+		<method name="getManufacturerSpecificData(I)[B"/>
+		<method name="getServiceData()Ljava/util/Map;"/>
+		<method name="getServiceData(Landroid/os/ParcelUuid;)[B"/>
+		<method name="getServiceSolicitationUuids()Ljava/util/List;" since="29"/>
+		<method name="getServiceUuids()Ljava/util/List;"/>
+		<method name="getTxPowerLevel()I"/>
+	</class>
+	<class name="android/bluetooth/le/ScanResult" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/bluetooth/BluetoothDevice;IIIIIIILandroid/bluetooth/le/ScanRecord;J)V" since="26"/>
+		<method name="&lt;init>(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/le/ScanRecord;IJ)V" deprecated="26"/>
+		<method name="getAdvertisingSid()I" since="26"/>
+		<method name="getDataStatus()I" since="26"/>
+		<method name="getDevice()Landroid/bluetooth/BluetoothDevice;"/>
+		<method name="getPeriodicAdvertisingInterval()I" since="26"/>
+		<method name="getPrimaryPhy()I" since="26"/>
+		<method name="getRssi()I"/>
+		<method name="getScanRecord()Landroid/bluetooth/le/ScanRecord;"/>
+		<method name="getSecondaryPhy()I" since="26"/>
+		<method name="getTimestampNanos()J"/>
+		<method name="getTxPower()I" since="26"/>
+		<method name="isConnectable()Z" since="26"/>
+		<method name="isLegacy()Z" since="26"/>
+		<field name="CREATOR"/>
+		<field name="DATA_COMPLETE" since="26"/>
+		<field name="DATA_TRUNCATED" since="26"/>
+		<field name="PERIODIC_INTERVAL_NOT_PRESENT" since="26"/>
+		<field name="PHY_UNUSED" since="26"/>
+		<field name="SID_NOT_PRESENT" since="26"/>
+		<field name="TX_POWER_NOT_PRESENT" since="26"/>
+	</class>
+	<class name="android/bluetooth/le/ScanSettings" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCallbackType()I"/>
+		<method name="getLegacy()Z" since="26"/>
+		<method name="getPhy()I" since="26"/>
+		<method name="getReportDelayMillis()J"/>
+		<method name="getScanMode()I"/>
+		<method name="getScanResultType()I"/>
+		<field name="CALLBACK_TYPE_ALL_MATCHES"/>
+		<field name="CALLBACK_TYPE_FIRST_MATCH" since="23"/>
+		<field name="CALLBACK_TYPE_MATCH_LOST" since="23"/>
+		<field name="CREATOR"/>
+		<field name="MATCH_MODE_AGGRESSIVE" since="23"/>
+		<field name="MATCH_MODE_STICKY" since="23"/>
+		<field name="MATCH_NUM_FEW_ADVERTISEMENT" since="23"/>
+		<field name="MATCH_NUM_MAX_ADVERTISEMENT" since="23"/>
+		<field name="MATCH_NUM_ONE_ADVERTISEMENT" since="23"/>
+		<field name="PHY_LE_ALL_SUPPORTED" since="26"/>
+		<field name="SCAN_MODE_BALANCED"/>
+		<field name="SCAN_MODE_LOW_LATENCY"/>
+		<field name="SCAN_MODE_LOW_POWER"/>
+		<field name="SCAN_MODE_OPPORTUNISTIC" since="23"/>
+	</class>
+	<class name="android/bluetooth/le/ScanSettings$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/bluetooth/le/ScanSettings;"/>
+		<method name="setCallbackType(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23"/>
+		<method name="setLegacy(Z)Landroid/bluetooth/le/ScanSettings$Builder;" since="26"/>
+		<method name="setMatchMode(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23"/>
+		<method name="setNumOfMatches(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="23"/>
+		<method name="setPhy(I)Landroid/bluetooth/le/ScanSettings$Builder;" since="26"/>
+		<method name="setReportDelay(J)Landroid/bluetooth/le/ScanSettings$Builder;"/>
+		<method name="setScanMode(I)Landroid/bluetooth/le/ScanSettings$Builder;"/>
+	</class>
+	<class name="android/companion/AssociationRequest" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="DEVICE_PROFILE_WATCH" since="31"/>
+	</class>
+	<class name="android/companion/AssociationRequest$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addDeviceFilter(Landroid/companion/DeviceFilter;)Landroid/companion/AssociationRequest$Builder;"/>
+		<method name="build()Landroid/companion/AssociationRequest;"/>
+		<method name="checkNotUsed()V" since="28" removed="29"/>
+		<method name="markUsed()V" since="28" removed="29"/>
+		<method name="setDeviceProfile(Ljava/lang/String;)Landroid/companion/AssociationRequest$Builder;" since="31"/>
+		<method name="setSingleDevice(Z)Landroid/companion/AssociationRequest$Builder;"/>
+	</class>
+	<class name="android/companion/BluetoothDeviceFilter" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/companion/DeviceFilter"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/companion/BluetoothDeviceFilter$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addServiceUuid(Landroid/os/ParcelUuid;Landroid/os/ParcelUuid;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
+		<method name="build()Landroid/companion/BluetoothDeviceFilter;"/>
+		<method name="checkNotUsed()V" since="28" removed="29"/>
+		<method name="markUsed()V" since="28" removed="29"/>
+		<method name="setAddress(Ljava/lang/String;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
+		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothDeviceFilter$Builder;"/>
+	</class>
+	<class name="android/companion/BluetoothLeDeviceFilter" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/companion/DeviceFilter"/>
+		<method name="getRenamePrefixLengthLimit()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/companion/BluetoothLeDeviceFilter$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/companion/BluetoothLeDeviceFilter;"/>
+		<method name="checkNotUsed()V" since="28" removed="29"/>
+		<method name="markUsed()V" since="28" removed="29"/>
+		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
+		<method name="setRawDataFilter([B[B)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
+		<method name="setRenameFromBytes(Ljava/lang/String;Ljava/lang/String;IILjava/nio/ByteOrder;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
+		<method name="setRenameFromName(Ljava/lang/String;Ljava/lang/String;II)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
+		<method name="setScanFilter(Landroid/bluetooth/le/ScanFilter;)Landroid/companion/BluetoothLeDeviceFilter$Builder;"/>
+	</class>
+	<class name="android/companion/CompanionDeviceManager" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="associate(Landroid/companion/AssociationRequest;Landroid/companion/CompanionDeviceManager$Callback;Landroid/os/Handler;)V"/>
+		<method name="disassociate(Ljava/lang/String;)V"/>
+		<method name="getAssociations()Ljava/util/List;"/>
+		<method name="hasNotificationAccess(Landroid/content/ComponentName;)Z"/>
+		<method name="requestNotificationAccess(Landroid/content/ComponentName;)V"/>
+		<method name="startObservingDevicePresence(Ljava/lang/String;)V" since="31"/>
+		<method name="stopObservingDevicePresence(Ljava/lang/String;)V" since="31"/>
+		<field name="EXTRA_DEVICE"/>
+	</class>
+	<class name="android/companion/CompanionDeviceManager$Callback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDeviceFound(Landroid/content/IntentSender;)V"/>
+		<method name="onFailure(Ljava/lang/CharSequence;)V"/>
+	</class>
+	<class name="android/companion/CompanionDeviceService" since="31">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDeviceAppeared(Ljava/lang/String;)V"/>
+		<method name="onDeviceDisappeared(Ljava/lang/String;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/companion/DeviceFilter" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+	</class>
+	<class name="android/companion/DeviceNotAssociatedException" since="31">
+		<extends name="java/lang/RuntimeException"/>
+	</class>
+	<class name="android/companion/WifiDeviceFilter" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/companion/DeviceFilter"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/companion/WifiDeviceFilter$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/companion/WifiDeviceFilter;"/>
+		<method name="checkNotUsed()V" since="28" removed="29"/>
+		<method name="markUsed()V" since="28" removed="29"/>
+		<method name="setBssid(Landroid/net/MacAddress;)Landroid/companion/WifiDeviceFilter$Builder;" since="30"/>
+		<method name="setBssidMask(Landroid/net/MacAddress;)Landroid/companion/WifiDeviceFilter$Builder;" since="30"/>
+		<method name="setNamePattern(Ljava/util/regex/Pattern;)Landroid/companion/WifiDeviceFilter$Builder;"/>
+	</class>
+	<class name="android/content/AbstractThreadedSyncAdapter" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Z)V"/>
+		<method name="&lt;init>(Landroid/content/Context;ZZ)V" since="11"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getSyncAdapterBinder()Landroid/os/IBinder;"/>
+		<method name="onPerformSync(Landroid/accounts/Account;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/ContentProviderClient;Landroid/content/SyncResult;)V"/>
+		<method name="onSecurityException(Landroid/accounts/Account;Landroid/os/Bundle;Ljava/lang/String;Landroid/content/SyncResult;)V" since="23"/>
+		<method name="onSyncCanceled()V" since="8"/>
+		<method name="onSyncCanceled(Ljava/lang/Thread;)V" since="11"/>
+		<method name="onUnsyncableAccount()Z" since="28"/>
+		<field name="LOG_SYNC_DETAILS" deprecated="15"/>
+	</class>
+	<class name="android/content/ActivityNotFoundException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/content/AsyncQueryHandler" since="1">
+		<extends name="android/os/Handler"/>
+		<method name="&lt;init>(Landroid/content/ContentResolver;)V"/>
+		<method name="cancelOperation(I)V"/>
+		<method name="createHandler(Landroid/os/Looper;)Landroid/os/Handler;"/>
+		<method name="onDeleteComplete(ILjava/lang/Object;I)V"/>
+		<method name="onInsertComplete(ILjava/lang/Object;Landroid/net/Uri;)V"/>
+		<method name="onQueryComplete(ILjava/lang/Object;Landroid/database/Cursor;)V"/>
+		<method name="onUpdateComplete(ILjava/lang/Object;I)V"/>
+		<method name="startDelete(ILjava/lang/Object;Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)V"/>
+		<method name="startInsert(ILjava/lang/Object;Landroid/net/Uri;Landroid/content/ContentValues;)V"/>
+		<method name="startQuery(ILjava/lang/Object;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="startUpdate(ILjava/lang/Object;Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/content/AsyncQueryHandler$WorkerArgs" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="cookie"/>
+		<field name="handler"/>
+		<field name="orderBy"/>
+		<field name="projection"/>
+		<field name="result"/>
+		<field name="selection"/>
+		<field name="selectionArgs"/>
+		<field name="uri"/>
+		<field name="values"/>
+	</class>
+	<class name="android/content/AsyncQueryHandler$WorkerHandler" since="1">
+		<extends name="android/os/Handler"/>
+		<method name="&lt;init>(Landroid/content/AsyncQueryHandler;Landroid/os/Looper;)V"/>
+	</class>
+	<class name="android/content/AsyncTaskLoader" since="11" deprecated="28">
+		<extends name="android/content/Loader"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="cancelLoad()Z" removed="16"/>
+		<method name="cancelLoadInBackground()V" since="16" deprecated="29"/>
+		<method name="isLoadInBackgroundCanceled()Z" since="16" deprecated="29"/>
+		<method name="loadInBackground()Ljava/lang/Object;" deprecated="29"/>
+		<method name="onCanceled(Ljava/lang/Object;)V" deprecated="29"/>
+		<method name="onLoadInBackground()Ljava/lang/Object;" deprecated="29"/>
+		<method name="setUpdateThrottle(J)V" deprecated="29"/>
+	</class>
+	<class name="android/content/AttributionSource" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="checkCallingUid()Z"/>
+		<method name="enforceCallingUid()V"/>
+		<method name="getAttributionTag()Ljava/lang/String;"/>
+		<method name="getNext()Landroid/content/AttributionSource;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getUid()I"/>
+		<method name="isTrusted(Landroid/content/Context;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/AttributionSource$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/content/AttributionSource;"/>
+		<method name="setAttributionTag(Ljava/lang/String;)Landroid/content/AttributionSource$Builder;"/>
+		<method name="setNext(Landroid/content/AttributionSource;)Landroid/content/AttributionSource$Builder;"/>
+		<method name="setPackageName(Ljava/lang/String;)Landroid/content/AttributionSource$Builder;"/>
+	</class>
+	<class name="android/content/BroadcastReceiver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="abortBroadcast()V"/>
+		<method name="clearAbortBroadcast()V"/>
+		<method name="getAbortBroadcast()Z"/>
+		<method name="getDebugUnregister()Z"/>
+		<method name="getResultCode()I"/>
+		<method name="getResultData()Ljava/lang/String;"/>
+		<method name="getResultExtras(Z)Landroid/os/Bundle;"/>
+		<method name="goAsync()Landroid/content/BroadcastReceiver$PendingResult;" since="11"/>
+		<method name="isInitialStickyBroadcast()Z" since="5"/>
+		<method name="isOrderedBroadcast()Z" since="5"/>
+		<method name="onReceive(Landroid/content/Context;Landroid/content/Intent;)V"/>
+		<method name="peekService(Landroid/content/Context;Landroid/content/Intent;)Landroid/os/IBinder;" since="3"/>
+		<method name="setDebugUnregister(Z)V"/>
+		<method name="setOrderedHint(Z)V"/>
+		<method name="setResult(ILjava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="setResultCode(I)V"/>
+		<method name="setResultData(Ljava/lang/String;)V"/>
+		<method name="setResultExtras(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/content/BroadcastReceiver$PendingResult" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="abortBroadcast()V"/>
+		<method name="clearAbortBroadcast()V"/>
+		<method name="finish()V"/>
+		<method name="getAbortBroadcast()Z"/>
+		<method name="getResultCode()I"/>
+		<method name="getResultData()Ljava/lang/String;"/>
+		<method name="getResultExtras(Z)Landroid/os/Bundle;"/>
+		<method name="setResult(ILjava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="setResultCode(I)V"/>
+		<method name="setResultData(Ljava/lang/String;)V"/>
+		<method name="setResultExtras(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/content/ClipData" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/ClipData;)V" since="16"/>
+		<method name="&lt;init>(Landroid/content/ClipDescription;Landroid/content/ClipData$Item;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;[Ljava/lang/String;Landroid/content/ClipData$Item;)V"/>
+		<method name="addItem(Landroid/content/ClipData$Item;)V"/>
+		<method name="addItem(Landroid/content/ContentResolver;Landroid/content/ClipData$Item;)V" since="26"/>
+		<method name="getDescription()Landroid/content/ClipDescription;"/>
+		<method name="getItemAt(I)Landroid/content/ClipData$Item;"/>
+		<method name="getItemCount()I"/>
+		<method name="newHtmlText(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)Landroid/content/ClipData;" since="16"/>
+		<method name="newIntent(Ljava/lang/CharSequence;Landroid/content/Intent;)Landroid/content/ClipData;"/>
+		<method name="newPlainText(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Landroid/content/ClipData;"/>
+		<method name="newRawUri(Ljava/lang/CharSequence;Landroid/net/Uri;)Landroid/content/ClipData;"/>
+		<method name="newUri(Landroid/content/ContentResolver;Ljava/lang/CharSequence;Landroid/net/Uri;)Landroid/content/ClipData;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/ClipData$Item" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Intent;)V"/>
+		<method name="&lt;init>(Landroid/net/Uri;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/content/Intent;Landroid/net/Uri;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/String;)V" since="16"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/String;Landroid/content/Intent;Landroid/net/Uri;)V" since="16"/>
+		<method name="coerceToHtmlText(Landroid/content/Context;)Ljava/lang/String;" since="16"/>
+		<method name="coerceToStyledText(Landroid/content/Context;)Ljava/lang/CharSequence;" since="16"/>
+		<method name="coerceToText(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
+		<method name="getHtmlText()Ljava/lang/String;" since="16"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTextLinks()Landroid/view/textclassifier/TextLinks;" since="31"/>
+		<method name="getUri()Landroid/net/Uri;"/>
+	</class>
+	<class name="android/content/ClipDescription" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/ClipDescription;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;[Ljava/lang/String;)V"/>
+		<method name="compareMimeTypes(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="filterMimeTypes(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="getClassificationStatus()I" since="31"/>
+		<method name="getConfidenceScore(Ljava/lang/String;)F" since="31"/>
+		<method name="getExtras()Landroid/os/PersistableBundle;" since="24"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getMimeType(I)Ljava/lang/String;"/>
+		<method name="getMimeTypeCount()I"/>
+		<method name="getTimestamp()J" since="26"/>
+		<method name="hasMimeType(Ljava/lang/String;)Z"/>
+		<method name="isStyledText()Z" since="31"/>
+		<method name="setExtras(Landroid/os/PersistableBundle;)V" since="24"/>
+		<field name="CLASSIFICATION_COMPLETE" since="31"/>
+		<field name="CLASSIFICATION_NOT_COMPLETE" since="31"/>
+		<field name="CLASSIFICATION_NOT_PERFORMED" since="31"/>
+		<field name="CREATOR"/>
+		<field name="MIMETYPE_TEXT_HTML" since="16"/>
+		<field name="MIMETYPE_TEXT_INTENT"/>
+		<field name="MIMETYPE_TEXT_PLAIN"/>
+		<field name="MIMETYPE_TEXT_URILIST"/>
+		<field name="MIMETYPE_UNKNOWN" since="30"/>
+	</class>
+	<class name="android/content/ClipboardManager" since="11">
+		<extends name="android/text/ClipboardManager"/>
+		<method name="addPrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V"/>
+		<method name="clearPrimaryClip()V" since="28"/>
+		<method name="getPrimaryClip()Landroid/content/ClipData;"/>
+		<method name="getPrimaryClipDescription()Landroid/content/ClipDescription;"/>
+		<method name="hasPrimaryClip()Z"/>
+		<method name="removePrimaryClipChangedListener(Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;)V"/>
+		<method name="setPrimaryClip(Landroid/content/ClipData;)V"/>
+	</class>
+	<class name="android/content/ClipboardManager$OnPrimaryClipChangedListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onPrimaryClipChanged()V"/>
+	</class>
+	<class name="android/content/ComponentCallbacks" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V"/>
+		<method name="onLowMemory()V"/>
+	</class>
+	<class name="android/content/ComponentCallbacks2" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/ComponentCallbacks"/>
+		<method name="onTrimMemory(I)V"/>
+		<field name="TRIM_MEMORY_BACKGROUND"/>
+		<field name="TRIM_MEMORY_COMPLETE"/>
+		<field name="TRIM_MEMORY_MODERATE"/>
+		<field name="TRIM_MEMORY_RUNNING_CRITICAL" since="16"/>
+		<field name="TRIM_MEMORY_RUNNING_LOW" since="16"/>
+		<field name="TRIM_MEMORY_RUNNING_MODERATE" since="16"/>
+		<field name="TRIM_MEMORY_UI_HIDDEN"/>
+	</class>
+	<class name="android/content/ComponentName" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/Cloneable" since="8"/>
+		<implements name="java/lang/Comparable" since="4"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/Class;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="clone()Landroid/content/ComponentName;" since="8"/>
+		<method name="compareTo(Landroid/content/ComponentName;)I" since="4"/>
+		<method name="createRelative(Landroid/content/Context;Ljava/lang/String;)Landroid/content/ComponentName;" since="23"/>
+		<method name="createRelative(Ljava/lang/String;Ljava/lang/String;)Landroid/content/ComponentName;" since="23"/>
+		<method name="flattenToShortString()Ljava/lang/String;"/>
+		<method name="flattenToString()Ljava/lang/String;"/>
+		<method name="getClassName()Ljava/lang/String;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getShortClassName()Ljava/lang/String;"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)Landroid/content/ComponentName;"/>
+		<method name="toShortString()Ljava/lang/String;"/>
+		<method name="unflattenFromString(Ljava/lang/String;)Landroid/content/ComponentName;"/>
+		<method name="writeToParcel(Landroid/content/ComponentName;Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/ContentProvider" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/ComponentCallbacks" removed="14"/>
+		<implements name="android/content/ComponentCallbacks2" since="14"/>
+		<method name="&lt;init>()V"/>
+		<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="29"/>
+		<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5"/>
+		<method name="attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V"/>
+		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11"/>
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29"/>
+		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
+		<method name="clearCallingIdentity()Landroid/content/ContentProvider$CallingIdentity;" since="29"/>
+		<method name="delete(Landroid/net/Uri;Landroid/os/Bundle;)I" since="30"/>
+		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
+		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="18"/>
+		<method name="getCallingAttributionSource()Landroid/content/AttributionSource;" since="31"/>
+		<method name="getCallingAttributionTag()Ljava/lang/String;" since="30"/>
+		<method name="getCallingPackage()Ljava/lang/String;" since="19"/>
+		<method name="getCallingPackageUnchecked()Ljava/lang/String;" since="30"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getPathPermissions()[Landroid/content/pm/PathPermission;" since="4"/>
+		<method name="getReadPermission()Ljava/lang/String;"/>
+		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
+		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;"/>
+		<method name="getWritePermission()Ljava/lang/String;"/>
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;"/>
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;" since="30"/>
+		<method name="isTemporary()Z"/>
+		<method name="onCallingPackageChanged()V" since="30"/>
+		<method name="onCreate()Z"/>
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" since="3"/>
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
+		<method name="openFileHelper(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openPipeHelper(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;Landroid/content/ContentProvider$PipeDataWriter;)Landroid/os/ParcelFileDescriptor;" since="11"/>
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26"/>
+		<method name="requireContext()Landroid/content/Context;" since="30"/>
+		<method name="restoreCallingIdentity(Landroid/content/ContentProvider$CallingIdentity;)V" since="29"/>
+		<method name="setPathPermissions([Landroid/content/pm/PathPermission;)V" since="4"/>
+		<method name="setReadPermission(Ljava/lang/String;)V"/>
+		<method name="setWritePermission(Ljava/lang/String;)V"/>
+		<method name="shutdown()V" since="11"/>
+		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I" since="30"/>
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
+	</class>
+	<class name="android/content/ContentProvider$CallingIdentity" since="29">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/content/ContentProvider$PipeDataWriter" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="writeDataToPipe(Landroid/os/ParcelFileDescriptor;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/content/ContentProviderClient" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="24"/>
+		<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="29"/>
+		<method name="applyBatch(Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;"/>
+		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="17"/>
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29"/>
+		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
+		<method name="delete(Landroid/net/Uri;Landroid/os/Bundle;)I" since="30"/>
+		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
+		<method name="getLocalContentProvider()Landroid/content/ContentProvider;"/>
+		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
+		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;"/>
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;"/>
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;" since="30"/>
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26"/>
+		<method name="release()Z" deprecated="24"/>
+		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I" since="30"/>
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
+	</class>
+	<class name="android/content/ContentProviderOperation" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="apply(Landroid/content/ContentProvider;[Landroid/content/ContentProviderResult;I)Landroid/content/ContentProviderResult;"/>
+		<method name="getUri()Landroid/net/Uri;"/>
+		<method name="isAssertQuery()Z" since="23"/>
+		<method name="isCall()Z" since="30"/>
+		<method name="isDelete()Z" since="23"/>
+		<method name="isExceptionAllowed()Z" since="30"/>
+		<method name="isInsert()Z" since="23"/>
+		<method name="isReadOperation()Z"/>
+		<method name="isUpdate()Z" since="23"/>
+		<method name="isWriteOperation()Z"/>
+		<method name="isYieldAllowed()Z"/>
+		<method name="newAssertQuery(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="newCall(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="newDelete(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="newInsert(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="newUpdate(Landroid/net/Uri;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="resolveExtrasBackReferences([Landroid/content/ContentProviderResult;I)Landroid/os/Bundle;" since="30"/>
+		<method name="resolveSelectionArgsBackReferences([Landroid/content/ContentProviderResult;I)[Ljava/lang/String;"/>
+		<method name="resolveValueBackReferences([Landroid/content/ContentProviderResult;I)Landroid/content/ContentValues;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/ContentProviderOperation$Builder" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="build()Landroid/content/ContentProviderOperation;"/>
+		<method name="withExceptionAllowed(Z)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="withExpectedCount(I)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="withExtra(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="withExtraBackReference(Ljava/lang/String;I)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="withExtraBackReference(Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="withExtras(Landroid/os/Bundle;)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="withSelection(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="withSelectionBackReference(II)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="withSelectionBackReference(IILjava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="withValue(Ljava/lang/String;Ljava/lang/Object;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="withValueBackReference(Ljava/lang/String;I)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="withValueBackReference(Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentProviderOperation$Builder;" since="30"/>
+		<method name="withValueBackReferences(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="withValues(Landroid/content/ContentValues;)Landroid/content/ContentProviderOperation$Builder;"/>
+		<method name="withYieldAllowed(Z)Landroid/content/ContentProviderOperation$Builder;"/>
+	</class>
+	<class name="android/content/ContentProviderResult" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/net/Uri;)V"/>
+		<method name="&lt;init>(Landroid/os/Bundle;)V" since="30"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="30"/>
+		<field name="CREATOR"/>
+		<field name="count"/>
+		<field name="exception" since="30"/>
+		<field name="extras" since="30"/>
+		<field name="uri"/>
+	</class>
+	<class name="android/content/ContentQueryMap" since="1">
+		<extends name="java/util/Observable"/>
+		<method name="&lt;init>(Landroid/database/Cursor;Ljava/lang/String;ZLandroid/os/Handler;)V"/>
+		<method name="close()V"/>
+		<method name="getRows()Ljava/util/Map;"/>
+		<method name="getValues(Ljava/lang/String;)Landroid/content/ContentValues;"/>
+		<method name="requery()V"/>
+		<method name="setKeepUpdated(Z)V"/>
+	</class>
+	<class name="android/content/ContentResolver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="acquireContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;" since="5"/>
+		<method name="acquireContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;" since="5"/>
+		<method name="acquireUnstableContentProviderClient(Landroid/net/Uri;)Landroid/content/ContentProviderClient;" since="16"/>
+		<method name="acquireUnstableContentProviderClient(Ljava/lang/String;)Landroid/content/ContentProviderClient;" since="16"/>
+		<method name="addPeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V" since="8"/>
+		<method name="addStatusChangeListener(ILandroid/content/SyncStatusObserver;)Ljava/lang/Object;" since="5"/>
+		<method name="applyBatch(Ljava/lang/String;Ljava/util/ArrayList;)[Landroid/content/ContentProviderResult;" since="5"/>
+		<method name="bulkInsert(Landroid/net/Uri;[Landroid/content/ContentValues;)I"/>
+		<method name="call(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="11"/>
+		<method name="call(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/os/Bundle;" since="29"/>
+		<method name="cancelSync(Landroid/accounts/Account;Ljava/lang/String;)V" since="5"/>
+		<method name="cancelSync(Landroid/content/SyncRequest;)V" since="21"/>
+		<method name="cancelSync(Landroid/net/Uri;)V" deprecated="15"/>
+		<method name="canonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
+		<method name="delete(Landroid/net/Uri;Landroid/os/Bundle;)I" since="30"/>
+		<method name="delete(Landroid/net/Uri;Ljava/lang/String;[Ljava/lang/String;)I"/>
+		<method name="getCurrentSync()Landroid/content/SyncInfo;" since="8" deprecated="15"/>
+		<method name="getCurrentSyncs()Ljava/util/List;" since="11"/>
+		<method name="getIsSyncable(Landroid/accounts/Account;Ljava/lang/String;)I" since="5"/>
+		<method name="getMasterSyncAutomatically()Z" since="5"/>
+		<method name="getOutgoingPersistedUriPermissions()Ljava/util/List;" since="19"/>
+		<method name="getPeriodicSyncs(Landroid/accounts/Account;Ljava/lang/String;)Ljava/util/List;" since="8"/>
+		<method name="getPersistedUriPermissions()Ljava/util/List;" since="19"/>
+		<method name="getStreamTypes(Landroid/net/Uri;Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
+		<method name="getSyncAdapterTypes()[Landroid/content/SyncAdapterType;" since="5"/>
+		<method name="getSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
+		<method name="getType(Landroid/net/Uri;)Ljava/lang/String;"/>
+		<method name="getTypeInfo(Ljava/lang/String;)Landroid/content/ContentResolver$MimeTypeInfo;" since="29"/>
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;"/>
+		<method name="insert(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)Landroid/net/Uri;" since="30"/>
+		<method name="isSyncActive(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
+		<method name="isSyncPending(Landroid/accounts/Account;Ljava/lang/String;)Z" since="5"/>
+		<method name="loadThumbnail(Landroid/net/Uri;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
+		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;)V"/>
+		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;I)V" since="24"/>
+		<method name="notifyChange(Landroid/net/Uri;Landroid/database/ContentObserver;Z)V" deprecated="30"/>
+		<method name="notifyChange(Ljava/util/Collection;Landroid/database/ContentObserver;I)V" since="30"/>
+		<method name="openAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
+		<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;" since="3"/>
+		<method name="openAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
+		<method name="openFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="29"/>
+		<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;" since="19"/>
+		<method name="openInputStream(Landroid/net/Uri;)Ljava/io/InputStream;"/>
+		<method name="openOutputStream(Landroid/net/Uri;)Ljava/io/OutputStream;"/>
+		<method name="openOutputStream(Landroid/net/Uri;Ljava/lang/String;)Ljava/io/OutputStream;" since="3"/>
+		<method name="openTypedAssetFile(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/res/AssetFileDescriptor;" since="11"/>
+		<method name="openTypedAssetFileDescriptor(Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="19"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="26"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="refresh(Landroid/net/Uri;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Z" since="26"/>
+		<method name="registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;)V"/>
+		<method name="releasePersistableUriPermission(Landroid/net/Uri;I)V" since="19"/>
+		<method name="removePeriodicSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V" since="8"/>
+		<method name="removeStatusChangeListener(Ljava/lang/Object;)V" since="5"/>
+		<method name="requestSync(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;)V" since="5"/>
+		<method name="requestSync(Landroid/content/SyncRequest;)V" since="19"/>
+		<method name="setIsSyncable(Landroid/accounts/Account;Ljava/lang/String;I)V" since="5"/>
+		<method name="setMasterSyncAutomatically(Z)V" since="5"/>
+		<method name="setSyncAutomatically(Landroid/accounts/Account;Ljava/lang/String;Z)V" since="5"/>
+		<method name="startSync(Landroid/net/Uri;Landroid/os/Bundle;)V" deprecated="15"/>
+		<method name="takePersistableUriPermission(Landroid/net/Uri;I)V" since="19"/>
+		<method name="uncanonicalize(Landroid/net/Uri;)Landroid/net/Uri;" since="19"/>
+		<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V"/>
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Landroid/os/Bundle;)I" since="30"/>
+		<method name="update(Landroid/net/Uri;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
+		<method name="validateSyncExtrasBundle(Landroid/os/Bundle;)V"/>
+		<method name="wrap(Landroid/content/ContentProvider;)Landroid/content/ContentResolver;" since="29"/>
+		<method name="wrap(Landroid/content/ContentProviderClient;)Landroid/content/ContentResolver;" since="29"/>
+		<field name="ANY_CURSOR_ITEM_TYPE" since="21"/>
+		<field name="CURSOR_DIR_BASE_TYPE"/>
+		<field name="CURSOR_ITEM_BASE_TYPE"/>
+		<field name="EXTRA_HONORED_ARGS" since="26"/>
+		<field name="EXTRA_REFRESH_SUPPORTED" since="26"/>
+		<field name="EXTRA_SIZE" since="21"/>
+		<field name="EXTRA_TOTAL_COUNT" since="26"/>
+		<field name="NOTIFY_DELETE" since="30"/>
+		<field name="NOTIFY_INSERT" since="30"/>
+		<field name="NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS" since="24"/>
+		<field name="NOTIFY_SYNC_TO_NETWORK" since="24"/>
+		<field name="NOTIFY_UPDATE" since="30"/>
+		<field name="QUERY_ARG_GROUP_COLUMNS" since="30"/>
+		<field name="QUERY_ARG_LIMIT" since="26"/>
+		<field name="QUERY_ARG_OFFSET" since="26"/>
+		<field name="QUERY_ARG_SORT_COLLATION" since="26"/>
+		<field name="QUERY_ARG_SORT_COLUMNS" since="26"/>
+		<field name="QUERY_ARG_SORT_DIRECTION" since="26"/>
+		<field name="QUERY_ARG_SORT_LOCALE" since="30"/>
+		<field name="QUERY_ARG_SQL_GROUP_BY" since="30"/>
+		<field name="QUERY_ARG_SQL_HAVING" since="30"/>
+		<field name="QUERY_ARG_SQL_LIMIT" since="30"/>
+		<field name="QUERY_ARG_SQL_SELECTION" since="26"/>
+		<field name="QUERY_ARG_SQL_SELECTION_ARGS" since="26"/>
+		<field name="QUERY_ARG_SQL_SORT_ORDER" since="26"/>
+		<field name="QUERY_SORT_DIRECTION_ASCENDING" since="26"/>
+		<field name="QUERY_SORT_DIRECTION_DESCENDING" since="26"/>
+		<field name="SCHEME_ANDROID_RESOURCE"/>
+		<field name="SCHEME_CONTENT"/>
+		<field name="SCHEME_FILE"/>
+		<field name="SYNC_EXTRAS_ACCOUNT" deprecated="15"/>
+		<field name="SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS"/>
+		<field name="SYNC_EXTRAS_DO_NOT_RETRY" since="8"/>
+		<field name="SYNC_EXTRAS_EXPEDITED"/>
+		<field name="SYNC_EXTRAS_FORCE" deprecated="15"/>
+		<field name="SYNC_EXTRAS_IGNORE_BACKOFF" since="8"/>
+		<field name="SYNC_EXTRAS_IGNORE_SETTINGS" since="8"/>
+		<field name="SYNC_EXTRAS_INITIALIZE" since="5"/>
+		<field name="SYNC_EXTRAS_MANUAL" since="5"/>
+		<field name="SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS"/>
+		<field name="SYNC_EXTRAS_REQUIRE_CHARGING" since="24"/>
+		<field name="SYNC_EXTRAS_SCHEDULE_AS_EXPEDITED_JOB" since="31"/>
+		<field name="SYNC_EXTRAS_UPLOAD"/>
+		<field name="SYNC_OBSERVER_TYPE_ACTIVE" since="8"/>
+		<field name="SYNC_OBSERVER_TYPE_PENDING" since="8"/>
+		<field name="SYNC_OBSERVER_TYPE_SETTINGS" since="8"/>
+	</class>
+	<class name="android/content/ContentResolver$MimeTypeInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="android/content/ContentUris" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="appendId(Landroid/net/Uri$Builder;J)Landroid/net/Uri$Builder;"/>
+		<method name="parseId(Landroid/net/Uri;)J"/>
+		<method name="removeId(Landroid/net/Uri;)Landroid/net/Uri;" since="29"/>
+		<method name="withAppendedId(Landroid/net/Uri;J)Landroid/net/Uri;"/>
+	</class>
+	<class name="android/content/ContentValues" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/content/ContentValues;)V"/>
+		<method name="clear()V"/>
+		<method name="containsKey(Ljava/lang/String;)Z"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getAsBoolean(Ljava/lang/String;)Ljava/lang/Boolean;"/>
+		<method name="getAsByte(Ljava/lang/String;)Ljava/lang/Byte;"/>
+		<method name="getAsByteArray(Ljava/lang/String;)[B"/>
+		<method name="getAsDouble(Ljava/lang/String;)Ljava/lang/Double;"/>
+		<method name="getAsFloat(Ljava/lang/String;)Ljava/lang/Float;"/>
+		<method name="getAsInteger(Ljava/lang/String;)Ljava/lang/Integer;"/>
+		<method name="getAsLong(Ljava/lang/String;)Ljava/lang/Long;"/>
+		<method name="getAsShort(Ljava/lang/String;)Ljava/lang/Short;"/>
+		<method name="getAsString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isEmpty()Z" since="30"/>
+		<method name="keySet()Ljava/util/Set;" since="11"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Boolean;)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Byte;)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Double;)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Float;)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Integer;)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Long;)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Short;)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="put(Ljava/lang/String;[B)V"/>
+		<method name="putAll(Landroid/content/ContentValues;)V"/>
+		<method name="putNull(Ljava/lang/String;)V"/>
+		<method name="remove(Ljava/lang/String;)V"/>
+		<method name="size()I"/>
+		<method name="valueSet()Ljava/util/Set;"/>
+		<field name="CREATOR"/>
+		<field name="TAG"/>
+	</class>
+	<class name="android/content/Context" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="bindIsolatedService(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z" since="29"/>
+		<method name="bindService(Landroid/content/Intent;ILjava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z" since="29"/>
+		<method name="bindService(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z"/>
+		<method name="bindServiceAsUser(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z" since="30"/>
+		<method name="checkCallingOrSelfPermission(Ljava/lang/String;)I"/>
+		<method name="checkCallingOrSelfUriPermission(Landroid/net/Uri;I)I"/>
+		<method name="checkCallingOrSelfUriPermissions(Ljava/util/List;I)[I" since="31"/>
+		<method name="checkCallingPermission(Ljava/lang/String;)I"/>
+		<method name="checkCallingUriPermission(Landroid/net/Uri;I)I"/>
+		<method name="checkCallingUriPermissions(Ljava/util/List;I)[I" since="31"/>
+		<method name="checkPermission(Ljava/lang/String;II)I"/>
+		<method name="checkSelfPermission(Ljava/lang/String;)I" since="23"/>
+		<method name="checkUriPermission(Landroid/net/Uri;III)I"/>
+		<method name="checkUriPermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;III)I"/>
+		<method name="checkUriPermissions(Ljava/util/List;III)[I" since="31"/>
+		<method name="clearWallpaper()V" deprecated="15"/>
+		<method name="createAttributionContext(Ljava/lang/String;)Landroid/content/Context;" since="30"/>
+		<method name="createConfigurationContext(Landroid/content/res/Configuration;)Landroid/content/Context;" since="17"/>
+		<method name="createContext(Landroid/content/ContextParams;)Landroid/content/Context;" since="31"/>
+		<method name="createContextForSplit(Ljava/lang/String;)Landroid/content/Context;" since="26"/>
+		<method name="createDeviceProtectedStorageContext()Landroid/content/Context;" since="24"/>
+		<method name="createDisplayContext(Landroid/view/Display;)Landroid/content/Context;" since="17"/>
+		<method name="createPackageContext(Ljava/lang/String;I)Landroid/content/Context;"/>
+		<method name="createWindowContext(ILandroid/os/Bundle;)Landroid/content/Context;" since="30"/>
+		<method name="createWindowContext(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;" since="31"/>
+		<method name="databaseList()[Ljava/lang/String;"/>
+		<method name="deleteDatabase(Ljava/lang/String;)Z"/>
+		<method name="deleteFile(Ljava/lang/String;)Z"/>
+		<method name="deleteSharedPreferences(Ljava/lang/String;)Z" since="24"/>
+		<method name="enforceCallingOrSelfPermission(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="enforceCallingOrSelfUriPermission(Landroid/net/Uri;ILjava/lang/String;)V"/>
+		<method name="enforceCallingPermission(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="enforceCallingUriPermission(Landroid/net/Uri;ILjava/lang/String;)V"/>
+		<method name="enforcePermission(Ljava/lang/String;IILjava/lang/String;)V"/>
+		<method name="enforceUriPermission(Landroid/net/Uri;IIILjava/lang/String;)V"/>
+		<method name="enforceUriPermission(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;)V"/>
+		<method name="fileList()[Ljava/lang/String;"/>
+		<method name="getApplicationContext()Landroid/content/Context;"/>
+		<method name="getApplicationInfo()Landroid/content/pm/ApplicationInfo;" since="4"/>
+		<method name="getAssets()Landroid/content/res/AssetManager;"/>
+		<method name="getAttributionSource()Landroid/content/AttributionSource;" since="31"/>
+		<method name="getAttributionTag()Ljava/lang/String;" since="30"/>
+		<method name="getCacheDir()Ljava/io/File;"/>
+		<method name="getClassLoader()Ljava/lang/ClassLoader;"/>
+		<method name="getCodeCacheDir()Ljava/io/File;" since="21"/>
+		<method name="getColor(I)I" since="23"/>
+		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;" since="23"/>
+		<method name="getContentResolver()Landroid/content/ContentResolver;"/>
+		<method name="getDataDir()Ljava/io/File;" since="24"/>
+		<method name="getDatabasePath(Ljava/lang/String;)Ljava/io/File;"/>
+		<method name="getDir(Ljava/lang/String;I)Ljava/io/File;"/>
+		<method name="getDisplay()Landroid/view/Display;" since="30"/>
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="getExternalCacheDir()Ljava/io/File;" since="8"/>
+		<method name="getExternalCacheDirs()[Ljava/io/File;" since="19"/>
+		<method name="getExternalFilesDir(Ljava/lang/String;)Ljava/io/File;" since="8"/>
+		<method name="getExternalFilesDirs(Ljava/lang/String;)[Ljava/io/File;" since="19"/>
+		<method name="getExternalMediaDirs()[Ljava/io/File;" since="21" deprecated="30"/>
+		<method name="getFileStreamPath(Ljava/lang/String;)Ljava/io/File;"/>
+		<method name="getFilesDir()Ljava/io/File;"/>
+		<method name="getMainExecutor()Ljava/util/concurrent/Executor;" since="28"/>
+		<method name="getMainLooper()Landroid/os/Looper;"/>
+		<method name="getNoBackupFilesDir()Ljava/io/File;" since="21"/>
+		<method name="getObbDir()Ljava/io/File;" since="11"/>
+		<method name="getObbDirs()[Ljava/io/File;" since="19"/>
+		<method name="getOpPackageName()Ljava/lang/String;" since="29"/>
+		<method name="getPackageCodePath()Ljava/lang/String;" since="8"/>
+		<method name="getPackageManager()Landroid/content/pm/PackageManager;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getPackageResourcePath()Ljava/lang/String;" since="8"/>
+		<method name="getParams()Landroid/content/ContextParams;" since="31"/>
+		<method name="getResources()Landroid/content/res/Resources;"/>
+		<method name="getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;"/>
+		<method name="getString(I)Ljava/lang/String;"/>
+		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="getSystemService(Ljava/lang/Class;)Ljava/lang/Object;" since="23"/>
+		<method name="getSystemService(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getSystemServiceName(Ljava/lang/Class;)Ljava/lang/String;" since="23"/>
+		<method name="getText(I)Ljava/lang/CharSequence;"/>
+		<method name="getTheme()Landroid/content/res/Resources$Theme;"/>
+		<method name="getWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="15"/>
+		<method name="getWallpaperDesiredMinimumHeight()I" deprecated="15"/>
+		<method name="getWallpaperDesiredMinimumWidth()I" deprecated="15"/>
+		<method name="grantUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V"/>
+		<method name="isDeviceProtectedStorage()Z" since="24"/>
+		<method name="isRestricted()Z" since="4"/>
+		<method name="isUiContext()Z" since="31"/>
+		<method name="moveDatabaseFrom(Landroid/content/Context;Ljava/lang/String;)Z" since="24"/>
+		<method name="moveSharedPreferencesFrom(Landroid/content/Context;Ljava/lang/String;)Z" since="24"/>
+		<method name="obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;"/>
+		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;"/>
+		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;"/>
+		<method name="obtainStyledAttributes([I)Landroid/content/res/TypedArray;"/>
+		<method name="openFileInput(Ljava/lang/String;)Ljava/io/FileInputStream;"/>
+		<method name="openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;"/>
+		<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="openOrCreateDatabase(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11"/>
+		<method name="peekWallpaper()Landroid/graphics/drawable/Drawable;" deprecated="15"/>
+		<method name="registerComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14"/>
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;"/>
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;" since="26"/>
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;"/>
+		<method name="registerReceiver(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;" since="26"/>
+		<method name="removeStickyBroadcast(Landroid/content/Intent;)V" deprecated="21"/>
+		<method name="removeStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" deprecated="21"/>
+		<method name="revokeUriPermission(Landroid/net/Uri;I)V"/>
+		<method name="revokeUriPermission(Ljava/lang/String;Landroid/net/Uri;I)V" since="26"/>
+		<method name="sendBroadcast(Landroid/content/Intent;)V"/>
+		<method name="sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V"/>
+		<method name="sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17"/>
+		<method name="sendBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V" since="17"/>
+		<method name="sendBroadcastWithMultiplePermissions(Landroid/content/Intent;[Ljava/lang/String;)V" since="30"/>
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V"/>
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="30"/>
+		<method name="sendOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17"/>
+		<method name="sendStickyBroadcast(Landroid/content/Intent;)V" deprecated="21"/>
+		<method name="sendStickyBroadcast(Landroid/content/Intent;Landroid/os/Bundle;)V" since="31" deprecated="31"/>
+		<method name="sendStickyBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;)V" since="17" deprecated="21"/>
+		<method name="sendStickyOrderedBroadcast(Landroid/content/Intent;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="5" deprecated="21"/>
+		<method name="sendStickyOrderedBroadcastAsUser(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V" since="17" deprecated="21"/>
+		<method name="setTheme(I)V"/>
+		<method name="setWallpaper(Landroid/graphics/Bitmap;)V" deprecated="15"/>
+		<method name="setWallpaper(Ljava/io/InputStream;)V" deprecated="15"/>
+		<method name="startActivities([Landroid/content/Intent;)V" since="11"/>
+		<method name="startActivities([Landroid/content/Intent;Landroid/os/Bundle;)V" since="16"/>
+		<method name="startActivity(Landroid/content/Intent;)V"/>
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;)V" since="16"/>
+		<method name="startForegroundService(Landroid/content/Intent;)Landroid/content/ComponentName;" since="26"/>
+		<method name="startInstrumentation(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)Z"/>
+		<method name="startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;III)V" since="5"/>
+		<method name="startIntentSender(Landroid/content/IntentSender;Landroid/content/Intent;IIILandroid/os/Bundle;)V" since="16"/>
+		<method name="startService(Landroid/content/Intent;)Landroid/content/ComponentName;"/>
+		<method name="stopService(Landroid/content/Intent;)Z"/>
+		<method name="unbindService(Landroid/content/ServiceConnection;)V"/>
+		<method name="unregisterComponentCallbacks(Landroid/content/ComponentCallbacks;)V" since="14"/>
+		<method name="unregisterReceiver(Landroid/content/BroadcastReceiver;)V"/>
+		<method name="updateServiceGroup(Landroid/content/ServiceConnection;II)V" since="29"/>
+		<field name="ACCESSIBILITY_SERVICE" since="4"/>
+		<field name="ACCOUNT_SERVICE" since="5"/>
+		<field name="ACTIVITY_SERVICE"/>
+		<field name="ALARM_SERVICE"/>
+		<field name="APPWIDGET_SERVICE" since="21"/>
+		<field name="APP_OPS_SERVICE" since="19"/>
+		<field name="APP_SEARCH_SERVICE" since="31"/>
+		<field name="AUDIO_SERVICE"/>
+		<field name="BATTERY_SERVICE" since="21"/>
+		<field name="BIND_ABOVE_CLIENT" since="14"/>
+		<field name="BIND_ADJUST_WITH_ACTIVITY" since="14"/>
+		<field name="BIND_ALLOW_OOM_MANAGEMENT" since="14"/>
+		<field name="BIND_AUTO_CREATE"/>
+		<field name="BIND_DEBUG_UNBIND"/>
+		<field name="BIND_EXTERNAL_SERVICE" since="24"/>
+		<field name="BIND_IMPORTANT" since="14"/>
+		<field name="BIND_INCLUDE_CAPABILITIES" since="29"/>
+		<field name="BIND_NOT_FOREGROUND" since="8"/>
+		<field name="BIND_NOT_PERCEPTIBLE" since="29"/>
+		<field name="BIND_WAIVE_PRIORITY" since="14"/>
+		<field name="BIOMETRIC_SERVICE" since="29"/>
+		<field name="BLOB_STORE_SERVICE" since="30"/>
+		<field name="BLUETOOTH_SERVICE" since="18"/>
+		<field name="BUGREPORT_SERVICE" since="31"/>
+		<field name="CAMERA_SERVICE" since="21"/>
+		<field name="CAPTIONING_SERVICE" since="19"/>
+		<field name="CARRIER_CONFIG_SERVICE" since="23"/>
+		<field name="CLIPBOARD_SERVICE"/>
+		<field name="COMPANION_DEVICE_SERVICE" since="26"/>
+		<field name="CONNECTIVITY_DIAGNOSTICS_SERVICE" since="30"/>
+		<field name="CONNECTIVITY_SERVICE"/>
+		<field name="CONSUMER_IR_SERVICE" since="19"/>
+		<field name="CONTEXT_IGNORE_SECURITY"/>
+		<field name="CONTEXT_INCLUDE_CODE"/>
+		<field name="CONTEXT_RESTRICTED" since="4"/>
+		<field name="CROSS_PROFILE_APPS_SERVICE" since="28"/>
+		<field name="DEVICE_POLICY_SERVICE" since="8"/>
+		<field name="DISPLAY_HASH_SERVICE" since="31"/>
+		<field name="DISPLAY_SERVICE" since="17"/>
+		<field name="DOMAIN_VERIFICATION_SERVICE" since="31"/>
+		<field name="DOWNLOAD_SERVICE" since="9"/>
+		<field name="DROPBOX_SERVICE" since="8"/>
+		<field name="EUICC_SERVICE" since="28"/>
+		<field name="FILE_INTEGRITY_SERVICE" since="30"/>
+		<field name="FINGERPRINT_SERVICE" since="23"/>
+		<field name="GAME_SERVICE" since="31"/>
+		<field name="HARDWARE_PROPERTIES_SERVICE" since="24"/>
+		<field name="INPUT_METHOD_SERVICE" since="3"/>
+		<field name="INPUT_SERVICE" since="16"/>
+		<field name="IPSEC_SERVICE" since="28"/>
+		<field name="JOB_SCHEDULER_SERVICE" since="21"/>
+		<field name="KEYGUARD_SERVICE"/>
+		<field name="LAUNCHER_APPS_SERVICE" since="21"/>
+		<field name="LAYOUT_INFLATER_SERVICE"/>
+		<field name="LOCATION_SERVICE"/>
+		<field name="MEDIA_COMMUNICATION_SERVICE" since="31"/>
+		<field name="MEDIA_METRICS_SERVICE" since="31"/>
+		<field name="MEDIA_PROJECTION_SERVICE" since="21"/>
+		<field name="MEDIA_ROUTER_SERVICE" since="16"/>
+		<field name="MEDIA_SESSION_SERVICE" since="21"/>
+		<field name="MIDI_SERVICE" since="23"/>
+		<field name="MODE_APPEND"/>
+		<field name="MODE_ENABLE_WRITE_AHEAD_LOGGING" since="16"/>
+		<field name="MODE_MULTI_PROCESS" since="11" deprecated="23"/>
+		<field name="MODE_NO_LOCALIZED_COLLATORS" since="24"/>
+		<field name="MODE_PRIVATE"/>
+		<field name="MODE_WORLD_READABLE" deprecated="17"/>
+		<field name="MODE_WORLD_WRITEABLE" deprecated="17"/>
+		<field name="NETWORK_STATS_SERVICE" since="23"/>
+		<field name="NFC_SERVICE" since="10"/>
+		<field name="NOTIFICATION_SERVICE"/>
+		<field name="NSD_SERVICE" since="16"/>
+		<field name="PEOPLE_SERVICE" since="31"/>
+		<field name="PERFORMANCE_HINT_SERVICE" since="31"/>
+		<field name="POWER_SERVICE"/>
+		<field name="PRINT_SERVICE" since="19"/>
+		<field name="RECEIVER_VISIBLE_TO_INSTANT_APPS" since="26"/>
+		<field name="RESTRICTIONS_SERVICE" since="21"/>
+		<field name="ROLE_SERVICE" since="29"/>
+		<field name="SEARCH_SERVICE"/>
+		<field name="SENSOR_SERVICE"/>
+		<field name="SHORTCUT_SERVICE" since="25"/>
+		<field name="STORAGE_SERVICE" since="9"/>
+		<field name="STORAGE_STATS_SERVICE" since="26"/>
+		<field name="SYSTEM_HEALTH_SERVICE" since="24"/>
+		<field name="TELECOM_SERVICE" since="21"/>
+		<field name="TELEPHONY_IMS_SERVICE" since="30"/>
+		<field name="TELEPHONY_SERVICE"/>
+		<field name="TELEPHONY_SUBSCRIPTION_SERVICE" since="22"/>
+		<field name="TEXT_CLASSIFICATION_SERVICE" since="26"/>
+		<field name="TEXT_SERVICES_MANAGER_SERVICE" since="14"/>
+		<field name="TV_INPUT_SERVICE" since="21"/>
+		<field name="UI_MODE_SERVICE" since="8"/>
+		<field name="USAGE_STATS_SERVICE" since="22"/>
+		<field name="USB_SERVICE" since="12"/>
+		<field name="USER_SERVICE" since="17"/>
+		<field name="VIBRATOR_MANAGER_SERVICE" since="31"/>
+		<field name="VIBRATOR_SERVICE" deprecated="31"/>
+		<field name="VPN_MANAGEMENT_SERVICE" since="30"/>
+		<field name="WALLPAPER_SERVICE"/>
+		<field name="WIFI_AWARE_SERVICE" since="26"/>
+		<field name="WIFI_P2P_SERVICE" since="14"/>
+		<field name="WIFI_RTT_RANGING_SERVICE" since="28"/>
+		<field name="WIFI_SERVICE"/>
+		<field name="WINDOW_SERVICE"/>
+	</class>
+	<class name="android/content/ContextParams" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getAttributionTag()Ljava/lang/String;"/>
+		<method name="getNextAttributionSource()Landroid/content/AttributionSource;"/>
+	</class>
+	<class name="android/content/ContextParams$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/ContextParams;)V"/>
+		<method name="build()Landroid/content/ContextParams;"/>
+		<method name="setAttributionTag(Ljava/lang/String;)Landroid/content/ContextParams$Builder;"/>
+		<method name="setNextAttributionSource(Landroid/content/AttributionSource;)Landroid/content/ContextParams$Builder;"/>
+	</class>
+	<class name="android/content/ContextWrapper" since="1">
+		<extends name="android/content/Context"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="attachBaseContext(Landroid/content/Context;)V"/>
+		<method name="getBaseContext()Landroid/content/Context;"/>
+		<method name="getPackageCodePath()Ljava/lang/String;"/>
+		<method name="getPackageResourcePath()Ljava/lang/String;"/>
+		<method name="sendOrderedBroadcast(Landroid/content/Intent;ILjava/lang/String;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/Bundle;)V" since="30"/>
+	</class>
+	<class name="android/content/CursorLoader" since="11" deprecated="28">
+		<extends name="android/content/AsyncTaskLoader"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="deliverResult(Landroid/database/Cursor;)V" deprecated="29"/>
+		<method name="getProjection()[Ljava/lang/String;" deprecated="29"/>
+		<method name="getSelection()Ljava/lang/String;" deprecated="29"/>
+		<method name="getSelectionArgs()[Ljava/lang/String;" deprecated="29"/>
+		<method name="getSortOrder()Ljava/lang/String;" deprecated="29"/>
+		<method name="getUri()Landroid/net/Uri;" deprecated="29"/>
+		<method name="loadInBackground()Landroid/database/Cursor;" deprecated="29"/>
+		<method name="onCanceled(Landroid/database/Cursor;)V" deprecated="29"/>
+		<method name="setProjection([Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setSelection(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setSelectionArgs([Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setSortOrder(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setUri(Landroid/net/Uri;)V" deprecated="29"/>
+	</class>
+	<class name="android/content/DialogInterface" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="dismiss()V"/>
+		<field name="BUTTON1" deprecated="15"/>
+		<field name="BUTTON2" deprecated="15"/>
+		<field name="BUTTON3" deprecated="15"/>
+		<field name="BUTTON_NEGATIVE" since="3"/>
+		<field name="BUTTON_NEUTRAL" since="3"/>
+		<field name="BUTTON_POSITIVE" since="3"/>
+	</class>
+	<class name="android/content/DialogInterface$OnCancelListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onCancel(Landroid/content/DialogInterface;)V"/>
+	</class>
+	<class name="android/content/DialogInterface$OnClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onClick(Landroid/content/DialogInterface;I)V"/>
+	</class>
+	<class name="android/content/DialogInterface$OnDismissListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onDismiss(Landroid/content/DialogInterface;)V"/>
+	</class>
+	<class name="android/content/DialogInterface$OnKeyListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onKey(Landroid/content/DialogInterface;ILandroid/view/KeyEvent;)Z"/>
+	</class>
+	<class name="android/content/DialogInterface$OnMultiChoiceClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onClick(Landroid/content/DialogInterface;IZ)V"/>
+	</class>
+	<class name="android/content/DialogInterface$OnShowListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="onShow(Landroid/content/DialogInterface;)V"/>
+	</class>
+	<class name="android/content/Entity" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/ContentValues;)V"/>
+		<method name="addSubValue(Landroid/net/Uri;Landroid/content/ContentValues;)V"/>
+		<method name="getEntityValues()Landroid/content/ContentValues;"/>
+		<method name="getSubValues()Ljava/util/ArrayList;"/>
+	</class>
+	<class name="android/content/Entity$NamedContentValues" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/Uri;Landroid/content/ContentValues;)V"/>
+		<field name="uri"/>
+		<field name="values"/>
+	</class>
+	<class name="android/content/EntityIterator" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Iterator"/>
+		<method name="close()V"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="android/content/Intent" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/Cloneable" since="8"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/Class;)V"/>
+		<method name="&lt;init>(Landroid/content/Intent;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;Landroid/content/Context;Ljava/lang/Class;)V"/>
+		<method name="addCategory(Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="addFlags(I)Landroid/content/Intent;"/>
+		<method name="cloneFilter()Landroid/content/Intent;"/>
+		<method name="createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;)Landroid/content/Intent;"/>
+		<method name="createChooser(Landroid/content/Intent;Ljava/lang/CharSequence;Landroid/content/IntentSender;)Landroid/content/Intent;" since="22"/>
+		<method name="fillIn(Landroid/content/Intent;I)I"/>
+		<method name="filterEquals(Landroid/content/Intent;)Z"/>
+		<method name="filterHashCode()I"/>
+		<method name="getAction()Ljava/lang/String;"/>
+		<method name="getBooleanArrayExtra(Ljava/lang/String;)[Z"/>
+		<method name="getBooleanExtra(Ljava/lang/String;Z)Z"/>
+		<method name="getBundleExtra(Ljava/lang/String;)Landroid/os/Bundle;"/>
+		<method name="getByteArrayExtra(Ljava/lang/String;)[B"/>
+		<method name="getByteExtra(Ljava/lang/String;B)B"/>
+		<method name="getCategories()Ljava/util/Set;"/>
+		<method name="getCharArrayExtra(Ljava/lang/String;)[C"/>
+		<method name="getCharExtra(Ljava/lang/String;C)C"/>
+		<method name="getCharSequenceArrayExtra(Ljava/lang/String;)[Ljava/lang/CharSequence;" since="8"/>
+		<method name="getCharSequenceArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;" since="8"/>
+		<method name="getCharSequenceExtra(Ljava/lang/String;)Ljava/lang/CharSequence;"/>
+		<method name="getClipData()Landroid/content/ClipData;" since="16"/>
+		<method name="getComponent()Landroid/content/ComponentName;"/>
+		<method name="getData()Landroid/net/Uri;"/>
+		<method name="getDataString()Ljava/lang/String;"/>
+		<method name="getDoubleArrayExtra(Ljava/lang/String;)[D"/>
+		<method name="getDoubleExtra(Ljava/lang/String;D)D"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getFlags()I"/>
+		<method name="getFloatArrayExtra(Ljava/lang/String;)[F"/>
+		<method name="getFloatExtra(Ljava/lang/String;F)F"/>
+		<method name="getIdentifier()Ljava/lang/String;" since="29"/>
+		<method name="getIntArrayExtra(Ljava/lang/String;)[I"/>
+		<method name="getIntExtra(Ljava/lang/String;I)I"/>
+		<method name="getIntegerArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="getIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="15"/>
+		<method name="getIntentOld(Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="getLongArrayExtra(Ljava/lang/String;)[J"/>
+		<method name="getLongExtra(Ljava/lang/String;J)J"/>
+		<method name="getPackage()Ljava/lang/String;" since="4"/>
+		<method name="getParcelableArrayExtra(Ljava/lang/String;)[Landroid/os/Parcelable;"/>
+		<method name="getParcelableArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="getParcelableExtra(Ljava/lang/String;)Landroid/os/Parcelable;"/>
+		<method name="getScheme()Ljava/lang/String;"/>
+		<method name="getSelector()Landroid/content/Intent;" since="15"/>
+		<method name="getSerializableExtra(Ljava/lang/String;)Ljava/io/Serializable;"/>
+		<method name="getShortArrayExtra(Ljava/lang/String;)[S"/>
+		<method name="getShortExtra(Ljava/lang/String;S)S"/>
+		<method name="getSourceBounds()Landroid/graphics/Rect;" since="7"/>
+		<method name="getStringArrayExtra(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="getStringArrayListExtra(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="getStringExtra(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="hasCategory(Ljava/lang/String;)Z"/>
+		<method name="hasExtra(Ljava/lang/String;)Z"/>
+		<method name="hasFileDescriptors()Z"/>
+		<method name="makeMainActivity(Landroid/content/ComponentName;)Landroid/content/Intent;" since="11"/>
+		<method name="makeMainSelectorActivity(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;" since="15"/>
+		<method name="makeRestartActivityTask(Landroid/content/ComponentName;)Landroid/content/Intent;" since="11"/>
+		<method name="normalizeMimeType(Ljava/lang/String;)Ljava/lang/String;" since="16"/>
+		<method name="parseIntent(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/content/Intent;"/>
+		<method name="parseUri(Ljava/lang/String;I)Landroid/content/Intent;" since="4"/>
+		<method name="putCharSequenceArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;" since="8"/>
+		<method name="putExtra(Ljava/lang/String;B)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;C)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;D)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;F)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;I)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;J)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;Ljava/io/Serializable;)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;S)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;Z)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[B)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[C)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[D)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[F)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[I)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[J)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[Landroid/os/Parcelable;)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[Ljava/lang/CharSequence;)Landroid/content/Intent;" since="8"/>
+		<method name="putExtra(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[S)Landroid/content/Intent;"/>
+		<method name="putExtra(Ljava/lang/String;[Z)Landroid/content/Intent;"/>
+		<method name="putExtras(Landroid/content/Intent;)Landroid/content/Intent;"/>
+		<method name="putExtras(Landroid/os/Bundle;)Landroid/content/Intent;"/>
+		<method name="putIntegerArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"/>
+		<method name="putParcelableArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"/>
+		<method name="putStringArrayListExtra(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="removeCategory(Ljava/lang/String;)V"/>
+		<method name="removeExtra(Ljava/lang/String;)V"/>
+		<method name="removeFlags(I)V" since="26"/>
+		<method name="replaceExtras(Landroid/content/Intent;)Landroid/content/Intent;" since="3"/>
+		<method name="replaceExtras(Landroid/os/Bundle;)Landroid/content/Intent;" since="3"/>
+		<method name="resolveActivity(Landroid/content/pm/PackageManager;)Landroid/content/ComponentName;"/>
+		<method name="resolveActivityInfo(Landroid/content/pm/PackageManager;I)Landroid/content/pm/ActivityInfo;"/>
+		<method name="resolveType(Landroid/content/ContentResolver;)Ljava/lang/String;"/>
+		<method name="resolveType(Landroid/content/Context;)Ljava/lang/String;"/>
+		<method name="resolveTypeIfNeeded(Landroid/content/ContentResolver;)Ljava/lang/String;"/>
+		<method name="setAction(Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="setClass(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;"/>
+		<method name="setClassName(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="setClassName(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="setClipData(Landroid/content/ClipData;)V" since="16"/>
+		<method name="setComponent(Landroid/content/ComponentName;)Landroid/content/Intent;"/>
+		<method name="setData(Landroid/net/Uri;)Landroid/content/Intent;"/>
+		<method name="setDataAndNormalize(Landroid/net/Uri;)Landroid/content/Intent;" since="16"/>
+		<method name="setDataAndType(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="setDataAndTypeAndNormalize(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;" since="16"/>
+		<method name="setExtrasClassLoader(Ljava/lang/ClassLoader;)V"/>
+		<method name="setFlags(I)Landroid/content/Intent;"/>
+		<method name="setIdentifier(Ljava/lang/String;)Landroid/content/Intent;" since="29"/>
+		<method name="setPackage(Ljava/lang/String;)Landroid/content/Intent;" since="4"/>
+		<method name="setSelector(Landroid/content/Intent;)V" since="15"/>
+		<method name="setSourceBounds(Landroid/graphics/Rect;)V" since="7"/>
+		<method name="setType(Ljava/lang/String;)Landroid/content/Intent;"/>
+		<method name="setTypeAndNormalize(Ljava/lang/String;)Landroid/content/Intent;" since="16"/>
+		<method name="toURI()Ljava/lang/String;" deprecated="15"/>
+		<method name="toUri(I)Ljava/lang/String;" since="4"/>
+		<field name="ACTION_AIRPLANE_MODE_CHANGED"/>
+		<field name="ACTION_ALL_APPS"/>
+		<field name="ACTION_ANSWER"/>
+		<field name="ACTION_APPLICATION_PREFERENCES" since="24"/>
+		<field name="ACTION_APPLICATION_RESTRICTIONS_CHANGED" since="21"/>
+		<field name="ACTION_APP_ERROR" since="14"/>
+		<field name="ACTION_ASSIST" since="16"/>
+		<field name="ACTION_ATTACH_DATA"/>
+		<field name="ACTION_AUTO_REVOKE_PERMISSIONS" since="30"/>
+		<field name="ACTION_BATTERY_CHANGED"/>
+		<field name="ACTION_BATTERY_LOW"/>
+		<field name="ACTION_BATTERY_OKAY" since="4"/>
+		<field name="ACTION_BOOT_COMPLETED"/>
+		<field name="ACTION_BUG_REPORT"/>
+		<field name="ACTION_CALL"/>
+		<field name="ACTION_CALL_BUTTON"/>
+		<field name="ACTION_CAMERA_BUTTON"/>
+		<field name="ACTION_CARRIER_SETUP" since="26"/>
+		<field name="ACTION_CHOOSER"/>
+		<field name="ACTION_CLOSE_SYSTEM_DIALOGS" deprecated="31"/>
+		<field name="ACTION_CONFIGURATION_CHANGED"/>
+		<field name="ACTION_CREATE_DOCUMENT" since="19"/>
+		<field name="ACTION_CREATE_REMINDER" since="30"/>
+		<field name="ACTION_CREATE_SHORTCUT"/>
+		<field name="ACTION_DATE_CHANGED"/>
+		<field name="ACTION_DEFAULT"/>
+		<field name="ACTION_DEFINE" since="29"/>
+		<field name="ACTION_DELETE"/>
+		<field name="ACTION_DEVICE_STORAGE_LOW" deprecated="26"/>
+		<field name="ACTION_DEVICE_STORAGE_OK" deprecated="26"/>
+		<field name="ACTION_DIAL"/>
+		<field name="ACTION_DOCK_EVENT" since="5"/>
+		<field name="ACTION_DREAMING_STARTED" since="17"/>
+		<field name="ACTION_DREAMING_STOPPED" since="17"/>
+		<field name="ACTION_EDIT"/>
+		<field name="ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" since="8"/>
+		<field name="ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE" since="8"/>
+		<field name="ACTION_FACTORY_TEST"/>
+		<field name="ACTION_GET_CONTENT"/>
+		<field name="ACTION_GET_RESTRICTION_ENTRIES" since="18"/>
+		<field name="ACTION_GTALK_SERVICE_CONNECTED"/>
+		<field name="ACTION_GTALK_SERVICE_DISCONNECTED"/>
+		<field name="ACTION_HEADSET_PLUG"/>
+		<field name="ACTION_INPUT_METHOD_CHANGED" since="3"/>
+		<field name="ACTION_INSERT"/>
+		<field name="ACTION_INSERT_OR_EDIT"/>
+		<field name="ACTION_INSTALL_FAILURE" since="27"/>
+		<field name="ACTION_INSTALL_PACKAGE" since="14" deprecated="29"/>
+		<field name="ACTION_LOCALE_CHANGED" since="7"/>
+		<field name="ACTION_LOCKED_BOOT_COMPLETED" since="24"/>
+		<field name="ACTION_MAIN"/>
+		<field name="ACTION_MANAGED_PROFILE_ADDED" since="21"/>
+		<field name="ACTION_MANAGED_PROFILE_AVAILABLE" since="24"/>
+		<field name="ACTION_MANAGED_PROFILE_REMOVED" since="21"/>
+		<field name="ACTION_MANAGED_PROFILE_UNAVAILABLE" since="24"/>
+		<field name="ACTION_MANAGED_PROFILE_UNLOCKED" since="24"/>
+		<field name="ACTION_MANAGE_NETWORK_USAGE" since="14"/>
+		<field name="ACTION_MANAGE_PACKAGE_STORAGE"/>
+		<field name="ACTION_MANAGE_UNUSED_APPS" since="31"/>
+		<field name="ACTION_MEDIA_BAD_REMOVAL"/>
+		<field name="ACTION_MEDIA_BUTTON"/>
+		<field name="ACTION_MEDIA_CHECKING" since="3"/>
+		<field name="ACTION_MEDIA_EJECT"/>
+		<field name="ACTION_MEDIA_MOUNTED"/>
+		<field name="ACTION_MEDIA_NOFS" since="3"/>
+		<field name="ACTION_MEDIA_REMOVED"/>
+		<field name="ACTION_MEDIA_SCANNER_FINISHED"/>
+		<field name="ACTION_MEDIA_SCANNER_SCAN_FILE" deprecated="29"/>
+		<field name="ACTION_MEDIA_SCANNER_STARTED"/>
+		<field name="ACTION_MEDIA_SHARED"/>
+		<field name="ACTION_MEDIA_UNMOUNTABLE"/>
+		<field name="ACTION_MEDIA_UNMOUNTED"/>
+		<field name="ACTION_MY_PACKAGE_REPLACED" since="12"/>
+		<field name="ACTION_MY_PACKAGE_SUSPENDED" since="28"/>
+		<field name="ACTION_MY_PACKAGE_UNSUSPENDED" since="28"/>
+		<field name="ACTION_NEW_OUTGOING_CALL" deprecated="29"/>
+		<field name="ACTION_OPEN_DOCUMENT" since="19"/>
+		<field name="ACTION_OPEN_DOCUMENT_TREE" since="21"/>
+		<field name="ACTION_PACKAGES_SUSPENDED" since="24"/>
+		<field name="ACTION_PACKAGES_UNSUSPENDED" since="24"/>
+		<field name="ACTION_PACKAGE_ADDED"/>
+		<field name="ACTION_PACKAGE_CHANGED"/>
+		<field name="ACTION_PACKAGE_DATA_CLEARED" since="3"/>
+		<field name="ACTION_PACKAGE_FIRST_LAUNCH" since="12"/>
+		<field name="ACTION_PACKAGE_FULLY_REMOVED" since="14"/>
+		<field name="ACTION_PACKAGE_INSTALL" deprecated="15"/>
+		<field name="ACTION_PACKAGE_NEEDS_VERIFICATION" since="14"/>
+		<field name="ACTION_PACKAGE_REMOVED"/>
+		<field name="ACTION_PACKAGE_REPLACED" since="3"/>
+		<field name="ACTION_PACKAGE_RESTARTED"/>
+		<field name="ACTION_PACKAGE_VERIFIED" since="17"/>
+		<field name="ACTION_PASTE" since="11"/>
+		<field name="ACTION_PICK"/>
+		<field name="ACTION_PICK_ACTIVITY"/>
+		<field name="ACTION_POWER_CONNECTED" since="4"/>
+		<field name="ACTION_POWER_DISCONNECTED" since="4"/>
+		<field name="ACTION_POWER_USAGE_SUMMARY" since="4"/>
+		<field name="ACTION_PROCESS_TEXT" since="23"/>
+		<field name="ACTION_PROFILE_ACCESSIBLE" since="31"/>
+		<field name="ACTION_PROFILE_INACCESSIBLE" since="31"/>
+		<field name="ACTION_PROVIDER_CHANGED"/>
+		<field name="ACTION_QUICK_CLOCK" since="17"/>
+		<field name="ACTION_QUICK_VIEW" since="24"/>
+		<field name="ACTION_REBOOT"/>
+		<field name="ACTION_RUN"/>
+		<field name="ACTION_SCREEN_OFF"/>
+		<field name="ACTION_SCREEN_ON"/>
+		<field name="ACTION_SEARCH"/>
+		<field name="ACTION_SEARCH_LONG_PRESS" since="3"/>
+		<field name="ACTION_SEND"/>
+		<field name="ACTION_SENDTO"/>
+		<field name="ACTION_SEND_MULTIPLE" since="4"/>
+		<field name="ACTION_SET_WALLPAPER"/>
+		<field name="ACTION_SHOW_APP_INFO" since="24"/>
+		<field name="ACTION_SHUTDOWN" since="4"/>
+		<field name="ACTION_SYNC"/>
+		<field name="ACTION_SYSTEM_TUTORIAL" since="3"/>
+		<field name="ACTION_TIMEZONE_CHANGED"/>
+		<field name="ACTION_TIME_CHANGED"/>
+		<field name="ACTION_TIME_TICK"/>
+		<field name="ACTION_TRANSLATE" since="29"/>
+		<field name="ACTION_UID_REMOVED"/>
+		<field name="ACTION_UMS_CONNECTED" deprecated="15"/>
+		<field name="ACTION_UMS_DISCONNECTED" deprecated="15"/>
+		<field name="ACTION_UNINSTALL_PACKAGE" since="14" deprecated="29"/>
+		<field name="ACTION_USER_BACKGROUND" since="17"/>
+		<field name="ACTION_USER_FOREGROUND" since="17"/>
+		<field name="ACTION_USER_INITIALIZE" since="17"/>
+		<field name="ACTION_USER_PRESENT" since="3"/>
+		<field name="ACTION_USER_UNLOCKED" since="24"/>
+		<field name="ACTION_VIEW"/>
+		<field name="ACTION_VIEW_LOCUS" since="29"/>
+		<field name="ACTION_VIEW_PERMISSION_USAGE" since="29"/>
+		<field name="ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD" since="31"/>
+		<field name="ACTION_VOICE_COMMAND"/>
+		<field name="ACTION_WALLPAPER_CHANGED" deprecated="16"/>
+		<field name="ACTION_WEB_SEARCH"/>
+		<field name="CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET" since="30"/>
+		<field name="CATEGORY_ALTERNATIVE"/>
+		<field name="CATEGORY_APP_BROWSER" since="15"/>
+		<field name="CATEGORY_APP_CALCULATOR" since="15"/>
+		<field name="CATEGORY_APP_CALENDAR" since="15"/>
+		<field name="CATEGORY_APP_CONTACTS" since="15"/>
+		<field name="CATEGORY_APP_EMAIL" since="15"/>
+		<field name="CATEGORY_APP_FILES" since="29"/>
+		<field name="CATEGORY_APP_GALLERY" since="15"/>
+		<field name="CATEGORY_APP_MAPS" since="15"/>
+		<field name="CATEGORY_APP_MARKET" since="11"/>
+		<field name="CATEGORY_APP_MESSAGING" since="15"/>
+		<field name="CATEGORY_APP_MUSIC" since="15"/>
+		<field name="CATEGORY_BROWSABLE"/>
+		<field name="CATEGORY_CAR_DOCK" since="5"/>
+		<field name="CATEGORY_CAR_MODE" since="8"/>
+		<field name="CATEGORY_DEFAULT"/>
+		<field name="CATEGORY_DESK_DOCK" since="5"/>
+		<field name="CATEGORY_DEVELOPMENT_PREFERENCE"/>
+		<field name="CATEGORY_EMBED"/>
+		<field name="CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST"/>
+		<field name="CATEGORY_GADGET" removed="3"/>
+		<field name="CATEGORY_HE_DESK_DOCK" since="11"/>
+		<field name="CATEGORY_HOME"/>
+		<field name="CATEGORY_INFO" since="3"/>
+		<field name="CATEGORY_LAUNCHER"/>
+		<field name="CATEGORY_LEANBACK_LAUNCHER" since="21"/>
+		<field name="CATEGORY_LE_DESK_DOCK" since="11"/>
+		<field name="CATEGORY_MONKEY"/>
+		<field name="CATEGORY_OPENABLE"/>
+		<field name="CATEGORY_PREFERENCE"/>
+		<field name="CATEGORY_SAMPLE_CODE"/>
+		<field name="CATEGORY_SECONDARY_HOME" since="29"/>
+		<field name="CATEGORY_SELECTED_ALTERNATIVE"/>
+		<field name="CATEGORY_TAB"/>
+		<field name="CATEGORY_TEST"/>
+		<field name="CATEGORY_TYPED_OPENABLE" since="26"/>
+		<field name="CATEGORY_UNIT_TEST"/>
+		<field name="CATEGORY_VOICE" since="23"/>
+		<field name="CATEGORY_VR_HOME" since="26"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_ALARM_COUNT"/>
+		<field name="EXTRA_ALLOW_MULTIPLE" since="18"/>
+		<field name="EXTRA_ALLOW_REPLACE" since="14" deprecated="16"/>
+		<field name="EXTRA_ALTERNATE_INTENTS" since="23"/>
+		<field name="EXTRA_ASSIST_CONTEXT" since="18"/>
+		<field name="EXTRA_ASSIST_INPUT_DEVICE_ID" since="23"/>
+		<field name="EXTRA_ASSIST_INPUT_HINT_KEYBOARD" since="21"/>
+		<field name="EXTRA_ASSIST_PACKAGE" since="18"/>
+		<field name="EXTRA_ASSIST_UID" since="23"/>
+		<field name="EXTRA_ATTRIBUTION_TAGS" since="31"/>
+		<field name="EXTRA_AUTO_LAUNCH_SINGLE_CHOICE" since="29"/>
+		<field name="EXTRA_BCC"/>
+		<field name="EXTRA_BUG_REPORT" since="14"/>
+		<field name="EXTRA_CC"/>
+		<field name="EXTRA_CHANGED_COMPONENT_NAME" since="5" deprecated="15"/>
+		<field name="EXTRA_CHANGED_COMPONENT_NAME_LIST" since="7"/>
+		<field name="EXTRA_CHANGED_PACKAGE_LIST" since="8"/>
+		<field name="EXTRA_CHANGED_UID_LIST" since="8"/>
+		<field name="EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER" since="23"/>
+		<field name="EXTRA_CHOOSER_TARGETS" since="24"/>
+		<field name="EXTRA_CHOSEN_COMPONENT" since="22"/>
+		<field name="EXTRA_CHOSEN_COMPONENT_INTENT_SENDER" since="22"/>
+		<field name="EXTRA_COMPONENT_NAME" since="26"/>
+		<field name="EXTRA_CONTENT_ANNOTATIONS" since="26"/>
+		<field name="EXTRA_CONTENT_QUERY" since="29"/>
+		<field name="EXTRA_DATA_REMOVED" since="3"/>
+		<field name="EXTRA_DOCK_STATE" since="5"/>
+		<field name="EXTRA_DOCK_STATE_CAR" since="5"/>
+		<field name="EXTRA_DOCK_STATE_DESK" since="5"/>
+		<field name="EXTRA_DOCK_STATE_HE_DESK" since="11"/>
+		<field name="EXTRA_DOCK_STATE_LE_DESK" since="11"/>
+		<field name="EXTRA_DOCK_STATE_UNDOCKED" since="5"/>
+		<field name="EXTRA_DONT_KILL_APP"/>
+		<field name="EXTRA_DURATION_MILLIS" since="29"/>
+		<field name="EXTRA_EMAIL"/>
+		<field name="EXTRA_END_TIME" since="31"/>
+		<field name="EXTRA_EXCLUDE_COMPONENTS" since="24"/>
+		<field name="EXTRA_FROM_STORAGE" since="26"/>
+		<field name="EXTRA_HTML_TEXT" since="16"/>
+		<field name="EXTRA_INDEX" since="24"/>
+		<field name="EXTRA_INITIAL_INTENTS" since="5"/>
+		<field name="EXTRA_INSTALLER_PACKAGE_NAME" since="14"/>
+		<field name="EXTRA_INTENT"/>
+		<field name="EXTRA_KEY_EVENT"/>
+		<field name="EXTRA_LOCAL_ONLY" since="11"/>
+		<field name="EXTRA_LOCUS_ID" since="29"/>
+		<field name="EXTRA_MIME_TYPES" since="19"/>
+		<field name="EXTRA_NOT_UNKNOWN_SOURCE" since="14"/>
+		<field name="EXTRA_ORIGINATING_URI" since="17"/>
+		<field name="EXTRA_PACKAGE_NAME" since="24"/>
+		<field name="EXTRA_PERMISSION_GROUP_NAME" since="31"/>
+		<field name="EXTRA_PHONE_NUMBER"/>
+		<field name="EXTRA_PROCESS_TEXT" since="23"/>
+		<field name="EXTRA_PROCESS_TEXT_READONLY" since="23"/>
+		<field name="EXTRA_QUICK_VIEW_FEATURES" since="26"/>
+		<field name="EXTRA_QUIET_MODE" since="24"/>
+		<field name="EXTRA_REFERRER" since="17"/>
+		<field name="EXTRA_REFERRER_NAME" since="22"/>
+		<field name="EXTRA_REMOTE_INTENT_TOKEN" since="5"/>
+		<field name="EXTRA_REPLACEMENT_EXTRAS" since="21"/>
+		<field name="EXTRA_REPLACING" since="3"/>
+		<field name="EXTRA_RESTRICTIONS_BUNDLE" since="18"/>
+		<field name="EXTRA_RESTRICTIONS_INTENT" since="18"/>
+		<field name="EXTRA_RESTRICTIONS_LIST" since="18"/>
+		<field name="EXTRA_RESULT_RECEIVER" since="23"/>
+		<field name="EXTRA_RETURN_RESULT" since="14"/>
+		<field name="EXTRA_SHORTCUT_ICON" deprecated="26"/>
+		<field name="EXTRA_SHORTCUT_ICON_RESOURCE" deprecated="26"/>
+		<field name="EXTRA_SHORTCUT_ID" since="29"/>
+		<field name="EXTRA_SHORTCUT_INTENT" deprecated="26"/>
+		<field name="EXTRA_SHORTCUT_NAME" deprecated="26"/>
+		<field name="EXTRA_SHUTDOWN_USERSPACE_ONLY" since="19"/>
+		<field name="EXTRA_SPLIT_NAME" since="27"/>
+		<field name="EXTRA_START_TIME" since="31"/>
+		<field name="EXTRA_STREAM"/>
+		<field name="EXTRA_SUBJECT"/>
+		<field name="EXTRA_SUSPENDED_PACKAGE_EXTRAS" since="28"/>
+		<field name="EXTRA_TEMPLATE"/>
+		<field name="EXTRA_TEXT"/>
+		<field name="EXTRA_TIME" since="30"/>
+		<field name="EXTRA_TIMEZONE" since="30"/>
+		<field name="EXTRA_TITLE"/>
+		<field name="EXTRA_UID"/>
+		<field name="EXTRA_USER" since="21"/>
+		<field name="EXTRA_USER_INITIATED" since="31"/>
+		<field name="FILL_IN_ACTION"/>
+		<field name="FILL_IN_CATEGORIES"/>
+		<field name="FILL_IN_CLIP_DATA" since="16"/>
+		<field name="FILL_IN_COMPONENT"/>
+		<field name="FILL_IN_DATA"/>
+		<field name="FILL_IN_IDENTIFIER" since="29"/>
+		<field name="FILL_IN_PACKAGE" since="4"/>
+		<field name="FILL_IN_SELECTOR" since="15"/>
+		<field name="FILL_IN_SOURCE_BOUNDS" since="7"/>
+		<field name="FLAG_ACTIVITY_BROUGHT_TO_FRONT"/>
+		<field name="FLAG_ACTIVITY_CLEAR_TASK" since="11"/>
+		<field name="FLAG_ACTIVITY_CLEAR_TOP"/>
+		<field name="FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET" since="3" deprecated="21"/>
+		<field name="FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS"/>
+		<field name="FLAG_ACTIVITY_FORWARD_RESULT"/>
+		<field name="FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY"/>
+		<field name="FLAG_ACTIVITY_LAUNCH_ADJACENT" since="24"/>
+		<field name="FLAG_ACTIVITY_MATCH_EXTERNAL" since="28"/>
+		<field name="FLAG_ACTIVITY_MULTIPLE_TASK"/>
+		<field name="FLAG_ACTIVITY_NEW_DOCUMENT" since="21"/>
+		<field name="FLAG_ACTIVITY_NEW_TASK"/>
+		<field name="FLAG_ACTIVITY_NO_ANIMATION" since="5"/>
+		<field name="FLAG_ACTIVITY_NO_HISTORY"/>
+		<field name="FLAG_ACTIVITY_NO_USER_ACTION" since="3"/>
+		<field name="FLAG_ACTIVITY_PREVIOUS_IS_TOP"/>
+		<field name="FLAG_ACTIVITY_REORDER_TO_FRONT" since="3"/>
+		<field name="FLAG_ACTIVITY_REQUIRE_DEFAULT" since="30"/>
+		<field name="FLAG_ACTIVITY_REQUIRE_NON_BROWSER" since="30"/>
+		<field name="FLAG_ACTIVITY_RESET_TASK_IF_NEEDED"/>
+		<field name="FLAG_ACTIVITY_RETAIN_IN_RECENTS" since="21"/>
+		<field name="FLAG_ACTIVITY_SINGLE_TOP"/>
+		<field name="FLAG_ACTIVITY_TASK_ON_HOME" since="11"/>
+		<field name="FLAG_DEBUG_LOG_RESOLUTION"/>
+		<field name="FLAG_DIRECT_BOOT_AUTO" since="29"/>
+		<field name="FLAG_EXCLUDE_STOPPED_PACKAGES" since="12"/>
+		<field name="FLAG_FROM_BACKGROUND"/>
+		<field name="FLAG_GRANT_PERSISTABLE_URI_PERMISSION" since="19"/>
+		<field name="FLAG_GRANT_PREFIX_URI_PERMISSION" since="21"/>
+		<field name="FLAG_GRANT_READ_URI_PERMISSION"/>
+		<field name="FLAG_GRANT_WRITE_URI_PERMISSION"/>
+		<field name="FLAG_INCLUDE_STOPPED_PACKAGES" since="12"/>
+		<field name="FLAG_RECEIVER_FOREGROUND" since="16"/>
+		<field name="FLAG_RECEIVER_NO_ABORT" since="19"/>
+		<field name="FLAG_RECEIVER_REGISTERED_ONLY"/>
+		<field name="FLAG_RECEIVER_REPLACE_PENDING" since="8"/>
+		<field name="FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS" since="26"/>
+		<field name="METADATA_DOCK_HOME" since="5"/>
+		<field name="URI_ALLOW_UNSAFE" since="22"/>
+		<field name="URI_ANDROID_APP_SCHEME" since="22"/>
+		<field name="URI_INTENT_SCHEME" since="4"/>
+	</class>
+	<class name="android/content/Intent$FilterComparison" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Intent;)V"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+	</class>
+	<class name="android/content/Intent$ShortcutIconResource" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="fromContext(Landroid/content/Context;I)Landroid/content/Intent$ShortcutIconResource;"/>
+		<field name="CREATOR"/>
+		<field name="packageName"/>
+		<field name="resourceName"/>
+	</class>
+	<class name="android/content/IntentFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/IntentFilter;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="actionsIterator()Ljava/util/Iterator;"/>
+		<method name="addAction(Ljava/lang/String;)V"/>
+		<method name="addCategory(Ljava/lang/String;)V"/>
+		<method name="addDataAuthority(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="addDataPath(Ljava/lang/String;I)V"/>
+		<method name="addDataScheme(Ljava/lang/String;)V"/>
+		<method name="addDataSchemeSpecificPart(Ljava/lang/String;I)V" since="19"/>
+		<method name="addDataType(Ljava/lang/String;)V"/>
+		<method name="authoritiesIterator()Ljava/util/Iterator;"/>
+		<method name="categoriesIterator()Ljava/util/Iterator;"/>
+		<method name="countActions()I"/>
+		<method name="countCategories()I"/>
+		<method name="countDataAuthorities()I"/>
+		<method name="countDataPaths()I"/>
+		<method name="countDataSchemeSpecificParts()I" since="19"/>
+		<method name="countDataSchemes()I"/>
+		<method name="countDataTypes()I"/>
+		<method name="create(Ljava/lang/String;Ljava/lang/String;)Landroid/content/IntentFilter;"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getAction(I)Ljava/lang/String;"/>
+		<method name="getCategory(I)Ljava/lang/String;"/>
+		<method name="getDataAuthority(I)Landroid/content/IntentFilter$AuthorityEntry;"/>
+		<method name="getDataPath(I)Landroid/os/PatternMatcher;"/>
+		<method name="getDataScheme(I)Ljava/lang/String;"/>
+		<method name="getDataSchemeSpecificPart(I)Landroid/os/PatternMatcher;" since="19"/>
+		<method name="getDataType(I)Ljava/lang/String;"/>
+		<method name="getPriority()I"/>
+		<method name="hasAction(Ljava/lang/String;)Z"/>
+		<method name="hasCategory(Ljava/lang/String;)Z"/>
+		<method name="hasDataAuthority(Landroid/net/Uri;)Z"/>
+		<method name="hasDataPath(Ljava/lang/String;)Z"/>
+		<method name="hasDataScheme(Ljava/lang/String;)Z"/>
+		<method name="hasDataSchemeSpecificPart(Ljava/lang/String;)Z" since="19"/>
+		<method name="hasDataType(Ljava/lang/String;)Z"/>
+		<method name="match(Landroid/content/ContentResolver;Landroid/content/Intent;ZLjava/lang/String;)I"/>
+		<method name="match(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;Ljava/util/Set;Ljava/lang/String;)I"/>
+		<method name="matchAction(Ljava/lang/String;)Z"/>
+		<method name="matchCategories(Ljava/util/Set;)Ljava/lang/String;"/>
+		<method name="matchData(Ljava/lang/String;Ljava/lang/String;Landroid/net/Uri;)I"/>
+		<method name="matchDataAuthority(Landroid/net/Uri;)I"/>
+		<method name="pathsIterator()Ljava/util/Iterator;"/>
+		<method name="readFromXml(Lorg/xmlpull/v1/XmlPullParser;)V"/>
+		<method name="schemeSpecificPartsIterator()Ljava/util/Iterator;" since="19"/>
+		<method name="schemesIterator()Ljava/util/Iterator;"/>
+		<method name="setPriority(I)V"/>
+		<method name="typesIterator()Ljava/util/Iterator;"/>
+		<method name="writeToXml(Lorg/xmlpull/v1/XmlSerializer;)V"/>
+		<field name="CREATOR"/>
+		<field name="MATCH_ADJUSTMENT_MASK"/>
+		<field name="MATCH_ADJUSTMENT_NORMAL"/>
+		<field name="MATCH_CATEGORY_EMPTY"/>
+		<field name="MATCH_CATEGORY_HOST"/>
+		<field name="MATCH_CATEGORY_MASK"/>
+		<field name="MATCH_CATEGORY_PATH"/>
+		<field name="MATCH_CATEGORY_PORT"/>
+		<field name="MATCH_CATEGORY_SCHEME"/>
+		<field name="MATCH_CATEGORY_SCHEME_SPECIFIC_PART" since="19"/>
+		<field name="MATCH_CATEGORY_TYPE"/>
+		<field name="NO_MATCH_ACTION"/>
+		<field name="NO_MATCH_CATEGORY"/>
+		<field name="NO_MATCH_DATA"/>
+		<field name="NO_MATCH_TYPE"/>
+		<field name="SYSTEM_HIGH_PRIORITY"/>
+		<field name="SYSTEM_LOW_PRIORITY"/>
+	</class>
+	<class name="android/content/IntentFilter$AuthorityEntry" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getPort()I"/>
+		<method name="match(Landroid/net/Uri;)I"/>
+	</class>
+	<class name="android/content/IntentFilter$MalformedMimeTypeException" since="1">
+		<extends name="android/util/AndroidException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/content/IntentSender" since="4">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCreatorPackage()Ljava/lang/String;" since="17"/>
+		<method name="getCreatorUid()I" since="17"/>
+		<method name="getCreatorUserHandle()Landroid/os/UserHandle;" since="17"/>
+		<method name="getTargetPackage()Ljava/lang/String;" since="9" deprecated="17"/>
+		<method name="readIntentSenderOrNullFromParcel(Landroid/os/Parcel;)Landroid/content/IntentSender;"/>
+		<method name="sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;)V"/>
+		<method name="sendIntent(Landroid/content/Context;ILandroid/content/Intent;Landroid/content/IntentSender$OnFinished;Landroid/os/Handler;Ljava/lang/String;)V" since="14"/>
+		<method name="writeIntentSenderOrNullToParcel(Landroid/content/IntentSender;Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/IntentSender$OnFinished" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="onSendFinished(Landroid/content/IntentSender;Landroid/content/Intent;ILjava/lang/String;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/content/IntentSender$SendIntentException" since="4">
+		<extends name="android/util/AndroidException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/content/Loader" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="abandon()V" deprecated="29"/>
+		<method name="cancelLoad()Z" since="16" deprecated="29"/>
+		<method name="commitContentChanged()V" since="18" deprecated="29"/>
+		<method name="dataToString(Ljava/lang/Object;)Ljava/lang/String;" deprecated="29"/>
+		<method name="deliverCancellation()V" since="16" deprecated="29"/>
+		<method name="deliverResult(Ljava/lang/Object;)V" deprecated="29"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" deprecated="29"/>
+		<method name="forceLoad()V" deprecated="29"/>
+		<method name="getContext()Landroid/content/Context;" deprecated="29"/>
+		<method name="getId()I" deprecated="29"/>
+		<method name="isAbandoned()Z" deprecated="29"/>
+		<method name="isReset()Z" deprecated="29"/>
+		<method name="isStarted()Z" deprecated="29"/>
+		<method name="onAbandon()V" deprecated="29"/>
+		<method name="onCancelLoad()Z" since="16" deprecated="29"/>
+		<method name="onContentChanged()V" deprecated="29"/>
+		<method name="onForceLoad()V" deprecated="29"/>
+		<method name="onReset()V" deprecated="29"/>
+		<method name="onStartLoading()V" deprecated="29"/>
+		<method name="onStopLoading()V" deprecated="29"/>
+		<method name="registerListener(ILandroid/content/Loader$OnLoadCompleteListener;)V" deprecated="29"/>
+		<method name="registerOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16" deprecated="29"/>
+		<method name="reset()V" deprecated="29"/>
+		<method name="rollbackContentChanged()V" since="18" deprecated="29"/>
+		<method name="startLoading()V" deprecated="29"/>
+		<method name="stopLoading()V" deprecated="29"/>
+		<method name="takeContentChanged()Z" deprecated="29"/>
+		<method name="unregisterListener(Landroid/content/Loader$OnLoadCompleteListener;)V" deprecated="29"/>
+		<method name="unregisterOnLoadCanceledListener(Landroid/content/Loader$OnLoadCanceledListener;)V" since="16" deprecated="29"/>
+	</class>
+	<class name="android/content/Loader$ForceLoadContentObserver" since="11" deprecated="28">
+		<extends name="android/database/ContentObserver"/>
+		<method name="&lt;init>(Landroid/content/Loader;)V" deprecated="29"/>
+	</class>
+	<class name="android/content/Loader$OnLoadCanceledListener" since="16" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="onLoadCanceled(Landroid/content/Loader;)V" deprecated="29"/>
+	</class>
+	<class name="android/content/Loader$OnLoadCompleteListener" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="onLoadComplete(Landroid/content/Loader;Ljava/lang/Object;)V" deprecated="29"/>
+	</class>
+	<class name="android/content/LocusId" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/MutableContextWrapper" since="1">
+		<extends name="android/content/ContextWrapper"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="setBaseContext(Landroid/content/Context;)V"/>
+	</class>
+	<class name="android/content/OperationApplicationException" since="5">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="getNumSuccessfulYieldPoints()I"/>
+	</class>
+	<class name="android/content/PeriodicSync" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/accounts/Account;Ljava/lang/String;Landroid/os/Bundle;J)V"/>
+		<field name="CREATOR"/>
+		<field name="account"/>
+		<field name="authority"/>
+		<field name="extras"/>
+		<field name="period"/>
+	</class>
+	<class name="android/content/QuickViewConstants" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="FEATURE_DELETE" since="28"/>
+		<field name="FEATURE_DOWNLOAD"/>
+		<field name="FEATURE_EDIT"/>
+		<field name="FEATURE_PRINT"/>
+		<field name="FEATURE_SEND"/>
+		<field name="FEATURE_VIEW"/>
+	</class>
+	<class name="android/content/ReceiverCallNotAllowedException" since="1">
+		<extends name="android/util/AndroidRuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/content/RestrictionEntry" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ILjava/lang/String;)V" since="21"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V" since="21"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[Ljava/lang/String;)V"/>
+		<method name="createBundleArrayEntry(Ljava/lang/String;[Landroid/content/RestrictionEntry;)Landroid/content/RestrictionEntry;" since="23"/>
+		<method name="createBundleEntry(Ljava/lang/String;[Landroid/content/RestrictionEntry;)Landroid/content/RestrictionEntry;" since="23"/>
+		<method name="getAllSelectedStrings()[Ljava/lang/String;"/>
+		<method name="getChoiceEntries()[Ljava/lang/String;"/>
+		<method name="getChoiceValues()[Ljava/lang/String;"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getIntValue()I" since="21"/>
+		<method name="getKey()Ljava/lang/String;"/>
+		<method name="getRestrictions()[Landroid/content/RestrictionEntry;" since="23"/>
+		<method name="getSelectedState()Z"/>
+		<method name="getSelectedString()Ljava/lang/String;"/>
+		<method name="getTitle()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+		<method name="setAllSelectedStrings([Ljava/lang/String;)V"/>
+		<method name="setChoiceEntries(Landroid/content/Context;I)V"/>
+		<method name="setChoiceEntries([Ljava/lang/String;)V"/>
+		<method name="setChoiceValues(Landroid/content/Context;I)V"/>
+		<method name="setChoiceValues([Ljava/lang/String;)V"/>
+		<method name="setDescription(Ljava/lang/String;)V"/>
+		<method name="setIntValue(I)V" since="21"/>
+		<method name="setRestrictions([Landroid/content/RestrictionEntry;)V" since="23"/>
+		<method name="setSelectedState(Z)V"/>
+		<method name="setSelectedString(Ljava/lang/String;)V"/>
+		<method name="setTitle(Ljava/lang/String;)V"/>
+		<method name="setType(I)V"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_BOOLEAN"/>
+		<field name="TYPE_BUNDLE" since="23"/>
+		<field name="TYPE_BUNDLE_ARRAY" since="23"/>
+		<field name="TYPE_CHOICE"/>
+		<field name="TYPE_INTEGER" since="21"/>
+		<field name="TYPE_MULTI_SELECT"/>
+		<field name="TYPE_NULL"/>
+		<field name="TYPE_STRING" since="21"/>
+	</class>
+	<class name="android/content/RestrictionsManager" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="convertRestrictionsToBundle(Ljava/util/List;)Landroid/os/Bundle;" since="23"/>
+		<method name="createLocalApprovalIntent()Landroid/content/Intent;"/>
+		<method name="getApplicationRestrictions()Landroid/os/Bundle;"/>
+		<method name="getManifestRestrictions(Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="hasRestrictionsProvider()Z"/>
+		<method name="notifyPermissionResponse(Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
+		<method name="requestPermission(Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
+		<field name="ACTION_PERMISSION_RESPONSE_RECEIVED"/>
+		<field name="ACTION_REQUEST_LOCAL_APPROVAL"/>
+		<field name="ACTION_REQUEST_PERMISSION"/>
+		<field name="EXTRA_PACKAGE_NAME"/>
+		<field name="EXTRA_REQUEST_BUNDLE"/>
+		<field name="EXTRA_REQUEST_ID"/>
+		<field name="EXTRA_REQUEST_TYPE"/>
+		<field name="EXTRA_RESPONSE_BUNDLE"/>
+		<field name="META_DATA_APP_RESTRICTIONS"/>
+		<field name="REQUEST_KEY_APPROVE_LABEL"/>
+		<field name="REQUEST_KEY_DATA"/>
+		<field name="REQUEST_KEY_DENY_LABEL"/>
+		<field name="REQUEST_KEY_ICON"/>
+		<field name="REQUEST_KEY_ID"/>
+		<field name="REQUEST_KEY_MESSAGE"/>
+		<field name="REQUEST_KEY_NEW_REQUEST"/>
+		<field name="REQUEST_KEY_TITLE"/>
+		<field name="REQUEST_TYPE_APPROVAL"/>
+		<field name="RESPONSE_KEY_ERROR_CODE"/>
+		<field name="RESPONSE_KEY_MESSAGE"/>
+		<field name="RESPONSE_KEY_RESPONSE_TIMESTAMP"/>
+		<field name="RESPONSE_KEY_RESULT"/>
+		<field name="RESULT_APPROVED"/>
+		<field name="RESULT_DENIED"/>
+		<field name="RESULT_ERROR"/>
+		<field name="RESULT_ERROR_BAD_REQUEST"/>
+		<field name="RESULT_ERROR_INTERNAL"/>
+		<field name="RESULT_ERROR_NETWORK"/>
+		<field name="RESULT_NO_RESPONSE"/>
+		<field name="RESULT_UNKNOWN_REQUEST"/>
+	</class>
+	<class name="android/content/SearchRecentSuggestionsProvider" since="1">
+		<extends name="android/content/ContentProvider"/>
+		<method name="&lt;init>()V"/>
+		<method name="setupSuggestions(Ljava/lang/String;I)V"/>
+		<field name="DATABASE_MODE_2LINES"/>
+		<field name="DATABASE_MODE_QUERIES"/>
+	</class>
+	<class name="android/content/ServiceConnection" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onBindingDied(Landroid/content/ComponentName;)V" since="26"/>
+		<method name="onNullBinding(Landroid/content/ComponentName;)V" since="28"/>
+		<method name="onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V"/>
+		<method name="onServiceDisconnected(Landroid/content/ComponentName;)V"/>
+	</class>
+	<class name="android/content/SharedPreferences" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="contains(Ljava/lang/String;)Z"/>
+		<method name="edit()Landroid/content/SharedPreferences$Editor;"/>
+		<method name="getAll()Ljava/util/Map;"/>
+		<method name="getBoolean(Ljava/lang/String;Z)Z"/>
+		<method name="getFloat(Ljava/lang/String;F)F"/>
+		<method name="getInt(Ljava/lang/String;I)I"/>
+		<method name="getLong(Ljava/lang/String;J)J"/>
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;" since="11"/>
+		<method name="registerOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V"/>
+		<method name="unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V"/>
+	</class>
+	<class name="android/content/SharedPreferences$Editor" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="apply()V" since="9"/>
+		<method name="clear()Landroid/content/SharedPreferences$Editor;"/>
+		<method name="commit()Z"/>
+		<method name="putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor;"/>
+		<method name="putFloat(Ljava/lang/String;F)Landroid/content/SharedPreferences$Editor;"/>
+		<method name="putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;"/>
+		<method name="putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor;"/>
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;"/>
+		<method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)Landroid/content/SharedPreferences$Editor;" since="11"/>
+		<method name="remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;"/>
+	</class>
+	<class name="android/content/SharedPreferences$OnSharedPreferenceChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/content/SyncAdapterType" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ZZ)V"/>
+		<method name="allowParallelSyncs()Z" since="11"/>
+		<method name="getSettingsActivity()Ljava/lang/String;" since="14"/>
+		<method name="isAlwaysSyncable()Z" since="11"/>
+		<method name="isUserVisible()Z"/>
+		<method name="newKey(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SyncAdapterType;"/>
+		<method name="supportsUploading()Z"/>
+		<field name="CREATOR"/>
+		<field name="accountType"/>
+		<field name="authority"/>
+		<field name="isKey"/>
+	</class>
+	<class name="android/content/SyncContext" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="getSyncContextBinder()Landroid/os/IBinder;"/>
+		<method name="onFinished(Landroid/content/SyncResult;)V"/>
+	</class>
+	<class name="android/content/SyncInfo" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="11"/>
+		<field name="account"/>
+		<field name="authority"/>
+		<field name="startTime"/>
+	</class>
+	<class name="android/content/SyncRequest" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/SyncRequest$Builder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/content/SyncRequest;"/>
+		<method name="setDisallowMetered(Z)Landroid/content/SyncRequest$Builder;"/>
+		<method name="setExpedited(Z)Landroid/content/SyncRequest$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/content/SyncRequest$Builder;"/>
+		<method name="setIgnoreBackoff(Z)Landroid/content/SyncRequest$Builder;"/>
+		<method name="setIgnoreSettings(Z)Landroid/content/SyncRequest$Builder;"/>
+		<method name="setManual(Z)Landroid/content/SyncRequest$Builder;"/>
+		<method name="setNoRetry(Z)Landroid/content/SyncRequest$Builder;"/>
+		<method name="setRequiresCharging(Z)Landroid/content/SyncRequest$Builder;" since="24"/>
+		<method name="setScheduleAsExpeditedJob(Z)Landroid/content/SyncRequest$Builder;" since="31"/>
+		<method name="setSyncAdapter(Landroid/accounts/Account;Ljava/lang/String;)Landroid/content/SyncRequest$Builder;"/>
+		<method name="syncOnce()Landroid/content/SyncRequest$Builder;"/>
+		<method name="syncPeriodic(JJ)Landroid/content/SyncRequest$Builder;"/>
+	</class>
+	<class name="android/content/SyncResult" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="clear()V"/>
+		<method name="hasError()Z"/>
+		<method name="hasHardError()Z"/>
+		<method name="hasSoftError()Z"/>
+		<method name="madeSomeProgress()Z"/>
+		<method name="toDebugString()Ljava/lang/String;"/>
+		<field name="ALREADY_IN_PROGRESS"/>
+		<field name="CREATOR"/>
+		<field name="databaseError"/>
+		<field name="delayUntil" since="8"/>
+		<field name="fullSyncRequested"/>
+		<field name="moreRecordsToGet"/>
+		<field name="partialSyncUnavailable"/>
+		<field name="stats"/>
+		<field name="syncAlreadyInProgress"/>
+		<field name="tooManyDeletions"/>
+		<field name="tooManyRetries"/>
+	</class>
+	<class name="android/content/SyncStats" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="clear()V"/>
+		<field name="CREATOR"/>
+		<field name="numAuthExceptions"/>
+		<field name="numConflictDetectedExceptions"/>
+		<field name="numDeletes"/>
+		<field name="numEntries"/>
+		<field name="numInserts"/>
+		<field name="numIoExceptions"/>
+		<field name="numParseExceptions"/>
+		<field name="numSkippedEntries"/>
+		<field name="numUpdates"/>
+	</class>
+	<class name="android/content/SyncStatusObserver" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="onStatusChanged(I)V"/>
+	</class>
+	<class name="android/content/UriMatcher" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="addURI(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="match(Landroid/net/Uri;)I"/>
+		<field name="NO_MATCH"/>
+	</class>
+	<class name="android/content/UriPermission" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getPersistedTime()J"/>
+		<method name="getUri()Landroid/net/Uri;"/>
+		<method name="isReadPermission()Z"/>
+		<method name="isWritePermission()Z"/>
+		<field name="CREATOR"/>
+		<field name="INVALID_TIME"/>
+	</class>
+	<class name="android/content/pm/ActivityInfo" since="1">
+		<extends name="android/content/pm/ComponentInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/ActivityInfo;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getThemeResource()I"/>
+		<field name="COLOR_MODE_DEFAULT" since="26"/>
+		<field name="COLOR_MODE_HDR" since="26"/>
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT" since="26"/>
+		<field name="CONFIG_COLOR_MODE" since="26"/>
+		<field name="CONFIG_DENSITY" since="17"/>
+		<field name="CONFIG_FONT_SCALE"/>
+		<field name="CONFIG_FONT_WEIGHT_ADJUSTMENT" since="31"/>
+		<field name="CONFIG_KEYBOARD"/>
+		<field name="CONFIG_KEYBOARD_HIDDEN"/>
+		<field name="CONFIG_LAYOUT_DIRECTION" since="17"/>
+		<field name="CONFIG_LOCALE"/>
+		<field name="CONFIG_MCC"/>
+		<field name="CONFIG_MNC"/>
+		<field name="CONFIG_NAVIGATION"/>
+		<field name="CONFIG_ORIENTATION"/>
+		<field name="CONFIG_SCREEN_LAYOUT" since="4"/>
+		<field name="CONFIG_SCREEN_SIZE" since="13"/>
+		<field name="CONFIG_SMALLEST_SCREEN_SIZE" since="13"/>
+		<field name="CONFIG_TOUCHSCREEN"/>
+		<field name="CONFIG_UI_MODE" since="8"/>
+		<field name="CREATOR"/>
+		<field name="DOCUMENT_LAUNCH_ALWAYS" since="21"/>
+		<field name="DOCUMENT_LAUNCH_INTO_EXISTING" since="21"/>
+		<field name="DOCUMENT_LAUNCH_NEVER" since="21"/>
+		<field name="DOCUMENT_LAUNCH_NONE" since="21"/>
+		<field name="FLAG_ALLOW_TASK_REPARENTING"/>
+		<field name="FLAG_ALWAYS_RETAIN_TASK_STATE"/>
+		<field name="FLAG_AUTO_REMOVE_FROM_RECENTS" since="21"/>
+		<field name="FLAG_CLEAR_TASK_ON_LAUNCH"/>
+		<field name="FLAG_ENABLE_VR_MODE" since="24"/>
+		<field name="FLAG_EXCLUDE_FROM_RECENTS"/>
+		<field name="FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS" since="5"/>
+		<field name="FLAG_FINISH_ON_TASK_LAUNCH"/>
+		<field name="FLAG_HARDWARE_ACCELERATED" since="11"/>
+		<field name="FLAG_IMMERSIVE" since="18"/>
+		<field name="FLAG_MULTIPROCESS"/>
+		<field name="FLAG_NO_HISTORY" since="3"/>
+		<field name="FLAG_PREFER_MINIMAL_POST_PROCESSING" since="30"/>
+		<field name="FLAG_RELINQUISH_TASK_IDENTITY" since="21"/>
+		<field name="FLAG_RESUME_WHILE_PAUSING" since="21"/>
+		<field name="FLAG_SINGLE_USER" since="17"/>
+		<field name="FLAG_STATE_NOT_NEEDED"/>
+		<field name="LAUNCH_MULTIPLE"/>
+		<field name="LAUNCH_SINGLE_INSTANCE"/>
+		<field name="LAUNCH_SINGLE_INSTANCE_PER_TASK" since="31"/>
+		<field name="LAUNCH_SINGLE_TASK"/>
+		<field name="LAUNCH_SINGLE_TOP"/>
+		<field name="PERSIST_ACROSS_REBOOTS" since="21"/>
+		<field name="PERSIST_NEVER" since="21"/>
+		<field name="PERSIST_ROOT_ONLY" since="21"/>
+		<field name="SCREEN_ORIENTATION_BEHIND"/>
+		<field name="SCREEN_ORIENTATION_FULL_SENSOR" since="9"/>
+		<field name="SCREEN_ORIENTATION_FULL_USER" since="18"/>
+		<field name="SCREEN_ORIENTATION_LANDSCAPE"/>
+		<field name="SCREEN_ORIENTATION_LOCKED" since="18"/>
+		<field name="SCREEN_ORIENTATION_NOSENSOR"/>
+		<field name="SCREEN_ORIENTATION_PORTRAIT"/>
+		<field name="SCREEN_ORIENTATION_REVERSE_LANDSCAPE" since="9"/>
+		<field name="SCREEN_ORIENTATION_REVERSE_PORTRAIT" since="9"/>
+		<field name="SCREEN_ORIENTATION_SENSOR"/>
+		<field name="SCREEN_ORIENTATION_SENSOR_LANDSCAPE" since="9"/>
+		<field name="SCREEN_ORIENTATION_SENSOR_PORTRAIT" since="9"/>
+		<field name="SCREEN_ORIENTATION_UNSPECIFIED"/>
+		<field name="SCREEN_ORIENTATION_USER"/>
+		<field name="SCREEN_ORIENTATION_USER_LANDSCAPE" since="18"/>
+		<field name="SCREEN_ORIENTATION_USER_PORTRAIT" since="18"/>
+		<field name="UIOPTION_SPLIT_ACTION_BAR_WHEN_NARROW" since="14"/>
+		<field name="colorMode" since="26"/>
+		<field name="configChanges"/>
+		<field name="documentLaunchMode" since="21"/>
+		<field name="flags"/>
+		<field name="launchMode"/>
+		<field name="maxRecents" since="21"/>
+		<field name="parentActivityName" since="16"/>
+		<field name="permission"/>
+		<field name="persistableMode" since="21"/>
+		<field name="screenOrientation"/>
+		<field name="softInputMode" since="3"/>
+		<field name="targetActivity"/>
+		<field name="taskAffinity"/>
+		<field name="theme"/>
+		<field name="uiOptions" since="14"/>
+		<field name="windowLayout" since="24"/>
+	</class>
+	<class name="android/content/pm/ActivityInfo$WindowLayout" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IFIFIII)V"/>
+		<field name="gravity"/>
+		<field name="height"/>
+		<field name="heightFraction"/>
+		<field name="minHeight"/>
+		<field name="minWidth"/>
+		<field name="width"/>
+		<field name="widthFraction"/>
+	</class>
+	<class name="android/content/pm/ApkChecksum" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getInstallerCertificate()Ljava/security/cert/Certificate;"/>
+		<method name="getInstallerPackageName()Ljava/lang/String;"/>
+		<method name="getSplitName()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+		<method name="getValue()[B"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/ApplicationInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/ApplicationInfo;)V"/>
+		<method name="areAttributionsUserVisible()Z" since="31"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getCategoryTitle(Landroid/content/Context;I)Ljava/lang/CharSequence;" since="26"/>
+		<method name="getGwpAsanMode()I" since="30"/>
+		<method name="getMemtagMode()I" since="31"/>
+		<method name="getNativeHeapZeroInitialized()I" since="31"/>
+		<method name="getRequestRawExternalStorageAccess()I" since="31"/>
+		<method name="isProfileable()Z" since="31"/>
+		<method name="isProfileableByShell()Z" since="29"/>
+		<method name="isResourceOverlay()Z" since="29"/>
+		<method name="isVirtualPreload()Z" since="27"/>
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<field name="CATEGORY_ACCESSIBILITY" since="31"/>
+		<field name="CATEGORY_AUDIO" since="26"/>
+		<field name="CATEGORY_GAME" since="26"/>
+		<field name="CATEGORY_IMAGE" since="26"/>
+		<field name="CATEGORY_MAPS" since="26"/>
+		<field name="CATEGORY_NEWS" since="26"/>
+		<field name="CATEGORY_PRODUCTIVITY" since="26"/>
+		<field name="CATEGORY_SOCIAL" since="26"/>
+		<field name="CATEGORY_UNDEFINED" since="26"/>
+		<field name="CATEGORY_VIDEO" since="26"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_ALLOW_BACKUP" since="8"/>
+		<field name="FLAG_ALLOW_CLEAR_USER_DATA"/>
+		<field name="FLAG_ALLOW_TASK_REPARENTING"/>
+		<field name="FLAG_DEBUGGABLE"/>
+		<field name="FLAG_EXTERNAL_STORAGE" since="8"/>
+		<field name="FLAG_EXTRACT_NATIVE_LIBS" since="23"/>
+		<field name="FLAG_FACTORY_TEST"/>
+		<field name="FLAG_FULL_BACKUP_ONLY" since="21"/>
+		<field name="FLAG_HARDWARE_ACCELERATED" since="23"/>
+		<field name="FLAG_HAS_CODE"/>
+		<field name="FLAG_INSTALLED" since="17"/>
+		<field name="FLAG_IS_DATA_ONLY" since="17"/>
+		<field name="FLAG_IS_GAME" since="21" deprecated="26"/>
+		<field name="FLAG_KILL_AFTER_RESTORE" since="8"/>
+		<field name="FLAG_LARGE_HEAP" since="11"/>
+		<field name="FLAG_MULTIARCH" since="21"/>
+		<field name="FLAG_PERSISTENT"/>
+		<field name="FLAG_RESIZEABLE_FOR_SCREENS" since="4"/>
+		<field name="FLAG_RESTORE_ANY_VERSION" since="8"/>
+		<field name="FLAG_STOPPED" since="12"/>
+		<field name="FLAG_SUPPORTS_LARGE_SCREENS" since="4"/>
+		<field name="FLAG_SUPPORTS_NORMAL_SCREENS" since="4"/>
+		<field name="FLAG_SUPPORTS_RTL" since="17"/>
+		<field name="FLAG_SUPPORTS_SCREEN_DENSITIES" since="4" deprecated="30"/>
+		<field name="FLAG_SUPPORTS_SMALL_SCREENS" since="4"/>
+		<field name="FLAG_SUPPORTS_XLARGE_SCREENS" since="11"/>
+		<field name="FLAG_SUSPENDED" since="24"/>
+		<field name="FLAG_SYSTEM"/>
+		<field name="FLAG_TEST_ONLY" since="4"/>
+		<field name="FLAG_UPDATED_SYSTEM_APP" since="4"/>
+		<field name="FLAG_USES_CLEARTEXT_TRAFFIC" since="23"/>
+		<field name="FLAG_VM_SAFE_MODE" since="8"/>
+		<field name="GWP_ASAN_ALWAYS" since="30"/>
+		<field name="GWP_ASAN_DEFAULT" since="30"/>
+		<field name="GWP_ASAN_NEVER" since="30"/>
+		<field name="MEMTAG_ASYNC" since="31"/>
+		<field name="MEMTAG_DEFAULT" since="31"/>
+		<field name="MEMTAG_OFF" since="31"/>
+		<field name="MEMTAG_SYNC" since="31"/>
+		<field name="RAW_EXTERNAL_STORAGE_ACCESS_DEFAULT" since="31"/>
+		<field name="RAW_EXTERNAL_STORAGE_ACCESS_NOT_REQUESTED" since="31"/>
+		<field name="RAW_EXTERNAL_STORAGE_ACCESS_REQUESTED" since="31"/>
+		<field name="ZEROINIT_DEFAULT" since="31"/>
+		<field name="ZEROINIT_DISABLED" since="31"/>
+		<field name="ZEROINIT_ENABLED" since="31"/>
+		<field name="appComponentFactory" since="28"/>
+		<field name="backupAgentName" since="8"/>
+		<field name="category" since="26"/>
+		<field name="className"/>
+		<field name="compatibleWidthLimitDp" since="13"/>
+		<field name="compileSdkVersion" since="31"/>
+		<field name="compileSdkVersionCodename" since="31"/>
+		<field name="dataDir"/>
+		<field name="descriptionRes"/>
+		<field name="deviceProtectedDataDir" since="24"/>
+		<field name="enabled"/>
+		<field name="flags"/>
+		<field name="largestWidthLimitDp" since="13"/>
+		<field name="manageSpaceActivityName"/>
+		<field name="minSdkVersion" since="24"/>
+		<field name="nativeLibraryDir" since="9"/>
+		<field name="permission"/>
+		<field name="processName"/>
+		<field name="publicSourceDir"/>
+		<field name="requiresSmallestWidthDp" since="13"/>
+		<field name="sharedLibraryFiles"/>
+		<field name="sourceDir"/>
+		<field name="splitNames" since="26"/>
+		<field name="splitPublicSourceDirs" since="21"/>
+		<field name="splitSourceDirs" since="21"/>
+		<field name="storageUuid" since="26"/>
+		<field name="targetSdkVersion" since="4"/>
+		<field name="taskAffinity"/>
+		<field name="theme"/>
+		<field name="uiOptions" since="14"/>
+		<field name="uid"/>
+	</class>
+	<class name="android/content/pm/ApplicationInfo$DisplayNameComparator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Comparator"/>
+		<method name="&lt;init>(Landroid/content/pm/PackageManager;)V"/>
+		<method name="compare(Landroid/content/pm/ApplicationInfo;Landroid/content/pm/ApplicationInfo;)I"/>
+	</class>
+	<class name="android/content/pm/Attribution" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getLabel()I"/>
+		<method name="getTag()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/ChangedPackages" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ILjava/util/List;)V"/>
+		<method name="getPackageNames()Ljava/util/List;"/>
+		<method name="getSequenceNumber()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/Checksum" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I[B)V"/>
+		<method name="getType()I"/>
+		<method name="getValue()[B"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256"/>
+		<field name="TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512"/>
+		<field name="TYPE_WHOLE_MD5" deprecated="31"/>
+		<field name="TYPE_WHOLE_MERKLE_ROOT_4K_SHA256"/>
+		<field name="TYPE_WHOLE_SHA1" deprecated="31"/>
+		<field name="TYPE_WHOLE_SHA256" deprecated="31"/>
+		<field name="TYPE_WHOLE_SHA512" deprecated="31"/>
+	</class>
+	<class name="android/content/pm/ComponentInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/ComponentInfo;)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getBannerResource()I" since="20"/>
+		<method name="getIconResource()I"/>
+		<method name="getLogoResource()I" since="19"/>
+		<method name="isEnabled()Z" since="11"/>
+		<field name="applicationInfo"/>
+		<field name="attributionTags" since="31"/>
+		<field name="descriptionRes" since="8"/>
+		<field name="directBootAware" since="24"/>
+		<field name="enabled"/>
+		<field name="exported"/>
+		<field name="processName"/>
+		<field name="splitName" since="26"/>
+	</class>
+	<class name="android/content/pm/ConfigurationInfo" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/ConfigurationInfo;)V"/>
+		<method name="getGlEsVersion()Ljava/lang/String;" since="4"/>
+		<field name="CREATOR"/>
+		<field name="GL_ES_VERSION_UNDEFINED" since="4"/>
+		<field name="INPUT_FEATURE_FIVE_WAY_NAV"/>
+		<field name="INPUT_FEATURE_HARD_KEYBOARD"/>
+		<field name="reqGlEsVersion" since="4"/>
+		<field name="reqInputFeatures"/>
+		<field name="reqKeyboardType"/>
+		<field name="reqNavigation"/>
+		<field name="reqTouchScreen"/>
+	</class>
+	<class name="android/content/pm/CrossProfileApps" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="canInteractAcrossProfiles()Z" since="30"/>
+		<method name="canRequestInteractAcrossProfiles()Z" since="30"/>
+		<method name="createRequestInteractAcrossProfilesIntent()Landroid/content/Intent;" since="30"/>
+		<method name="getProfileSwitchingIconDrawable(Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getProfileSwitchingLabel(Landroid/os/UserHandle;)Ljava/lang/CharSequence;"/>
+		<method name="getTargetUserProfiles()Ljava/util/List;"/>
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/app/Activity;)V" since="30"/>
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/app/Activity;Landroid/os/Bundle;)V" since="30"/>
+		<method name="startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;)V"/>
+		<field name="ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED" since="30"/>
+	</class>
+	<class name="android/content/pm/FeatureGroupInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/FeatureGroupInfo;)V"/>
+		<field name="CREATOR"/>
+		<field name="features"/>
+	</class>
+	<class name="android/content/pm/FeatureInfo" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/FeatureInfo;)V"/>
+		<method name="getGlEsVersion()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_REQUIRED"/>
+		<field name="GL_ES_VERSION_UNDEFINED"/>
+		<field name="flags"/>
+		<field name="name"/>
+		<field name="reqGlEsVersion"/>
+		<field name="version" since="24"/>
+	</class>
+	<class name="android/content/pm/IPackageInstallObserver" since="1" removed="4">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/IInterface"/>
+		<method name="packageInstalled(Ljava/lang/String;I)V"/>
+	</class>
+	<class name="android/content/pm/IPackageInstallObserver$Stub" since="1" removed="4">
+		<extends name="android/os/Binder"/>
+		<implements name="android/content/pm/IPackageInstallObserver"/>
+		<method name="&lt;init>()V"/>
+		<method name="asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallObserver;"/>
+	</class>
+	<class name="android/content/pm/InstallSourceInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getInitiatingPackageName()Ljava/lang/String;"/>
+		<method name="getInitiatingPackageSigningInfo()Landroid/content/pm/SigningInfo;"/>
+		<method name="getInstallingPackageName()Ljava/lang/String;"/>
+		<method name="getOriginatingPackageName()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/InstrumentationInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/InstrumentationInfo;)V"/>
+		<field name="CREATOR"/>
+		<field name="dataDir"/>
+		<field name="functionalTest"/>
+		<field name="handleProfiling"/>
+		<field name="publicSourceDir"/>
+		<field name="sourceDir"/>
+		<field name="splitNames" since="26"/>
+		<field name="splitPublicSourceDirs" since="21"/>
+		<field name="splitSourceDirs" since="21"/>
+		<field name="targetPackage"/>
+		<field name="targetProcesses" since="26"/>
+	</class>
+	<class name="android/content/pm/LabeledIntent" since="5">
+		<extends name="android/content/Intent"/>
+		<method name="&lt;init>(Landroid/content/Intent;Ljava/lang/String;II)V"/>
+		<method name="&lt;init>(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;II)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
+		<method name="getIconResource()I"/>
+		<method name="getLabelResource()I"/>
+		<method name="getNonLocalizedLabel()Ljava/lang/CharSequence;"/>
+		<method name="getSourcePackage()Ljava/lang/String;"/>
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/LauncherActivityInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getActivityInfo()Landroid/content/pm/ActivityInfo;" since="31"/>
+		<method name="getApplicationInfo()Landroid/content/pm/ApplicationInfo;"/>
+		<method name="getBadgedIcon(I)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getComponentName()Landroid/content/ComponentName;"/>
+		<method name="getFirstInstallTime()J"/>
+		<method name="getIcon(I)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getLoadingProgress()F" since="31"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getUser()Landroid/os/UserHandle;"/>
+	</class>
+	<class name="android/content/pm/LauncherApps" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;"/>
+		<method name="getAllPackageInstallerSessions()Ljava/util/List;" since="29"/>
+		<method name="getApplicationInfo(Ljava/lang/String;ILandroid/os/UserHandle;)Landroid/content/pm/ApplicationInfo;" since="26"/>
+		<method name="getPinItemRequest(Landroid/content/Intent;)Landroid/content/pm/LauncherApps$PinItemRequest;" since="26"/>
+		<method name="getProfiles()Ljava/util/List;" since="26"/>
+		<method name="getShortcutBadgedIconDrawable(Landroid/content/pm/ShortcutInfo;I)Landroid/graphics/drawable/Drawable;" since="25"/>
+		<method name="getShortcutConfigActivityIntent(Landroid/content/pm/LauncherActivityInfo;)Landroid/content/IntentSender;" since="26"/>
+		<method name="getShortcutConfigActivityList(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
+		<method name="getShortcutIconDrawable(Landroid/content/pm/ShortcutInfo;I)Landroid/graphics/drawable/Drawable;" since="25"/>
+		<method name="getShortcutIntent(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/PendingIntent;" since="31"/>
+		<method name="getShortcuts(Landroid/content/pm/LauncherApps$ShortcutQuery;Landroid/os/UserHandle;)Ljava/util/List;" since="25"/>
+		<method name="getSuspendedPackageLauncherExtras(Ljava/lang/String;Landroid/os/UserHandle;)Landroid/os/Bundle;" since="28"/>
+		<method name="hasShortcutHostPermission()Z" since="25"/>
+		<method name="isActivityEnabled(Landroid/content/ComponentName;Landroid/os/UserHandle;)Z"/>
+		<method name="isPackageEnabled(Ljava/lang/String;Landroid/os/UserHandle;)Z"/>
+		<method name="pinShortcuts(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V" since="25"/>
+		<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;)V"/>
+		<method name="registerCallback(Landroid/content/pm/LauncherApps$Callback;Landroid/os/Handler;)V"/>
+		<method name="registerPackageInstallerSessionCallback(Ljava/util/concurrent/Executor;Landroid/content/pm/PackageInstaller$SessionCallback;)V" since="29"/>
+		<method name="resolveActivity(Landroid/content/Intent;Landroid/os/UserHandle;)Landroid/content/pm/LauncherActivityInfo;"/>
+		<method name="shouldHideFromSuggestions(Ljava/lang/String;Landroid/os/UserHandle;)Z" since="29"/>
+		<method name="startAppDetailsActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V"/>
+		<method name="startMainActivity(Landroid/content/ComponentName;Landroid/os/UserHandle;Landroid/graphics/Rect;Landroid/os/Bundle;)V"/>
+		<method name="startPackageInstallerSessionDetailsActivity(Landroid/content/pm/PackageInstaller$SessionInfo;Landroid/graphics/Rect;Landroid/os/Bundle;)V" since="29"/>
+		<method name="startShortcut(Landroid/content/pm/ShortcutInfo;Landroid/graphics/Rect;Landroid/os/Bundle;)V" since="25"/>
+		<method name="startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;Landroid/os/UserHandle;)V" since="25"/>
+		<method name="unregisterCallback(Landroid/content/pm/LauncherApps$Callback;)V"/>
+		<method name="unregisterPackageInstallerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V" since="29"/>
+		<field name="ACTION_CONFIRM_PIN_APPWIDGET" since="26"/>
+		<field name="ACTION_CONFIRM_PIN_SHORTCUT" since="26"/>
+		<field name="EXTRA_PIN_ITEM_REQUEST" since="26"/>
+	</class>
+	<class name="android/content/pm/LauncherApps$Callback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onPackageAdded(Ljava/lang/String;Landroid/os/UserHandle;)V"/>
+		<method name="onPackageChanged(Ljava/lang/String;Landroid/os/UserHandle;)V"/>
+		<method name="onPackageLoadingProgressChanged(Ljava/lang/String;Landroid/os/UserHandle;F)V" since="31"/>
+		<method name="onPackageRemoved(Ljava/lang/String;Landroid/os/UserHandle;)V"/>
+		<method name="onPackagesAvailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V"/>
+		<method name="onPackagesSuspended([Ljava/lang/String;Landroid/os/UserHandle;)V" since="24"/>
+		<method name="onPackagesSuspended([Ljava/lang/String;Landroid/os/UserHandle;Landroid/os/Bundle;)V" since="28" deprecated="30"/>
+		<method name="onPackagesUnavailable([Ljava/lang/String;Landroid/os/UserHandle;Z)V"/>
+		<method name="onPackagesUnsuspended([Ljava/lang/String;Landroid/os/UserHandle;)V" since="24"/>
+		<method name="onShortcutsChanged(Ljava/lang/String;Ljava/util/List;Landroid/os/UserHandle;)V" since="25"/>
+	</class>
+	<class name="android/content/pm/LauncherApps$PinItemRequest" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="accept()Z"/>
+		<method name="accept(Landroid/os/Bundle;)Z"/>
+		<method name="getAppWidgetProviderInfo(Landroid/content/Context;)Landroid/appwidget/AppWidgetProviderInfo;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getRequestType()I"/>
+		<method name="getShortcutInfo()Landroid/content/pm/ShortcutInfo;"/>
+		<method name="isValid()Z"/>
+		<field name="CREATOR"/>
+		<field name="REQUEST_TYPE_APPWIDGET"/>
+		<field name="REQUEST_TYPE_SHORTCUT"/>
+	</class>
+	<class name="android/content/pm/LauncherApps$ShortcutQuery" since="25">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="setActivity(Landroid/content/ComponentName;)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
+		<method name="setChangedSince(J)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
+		<method name="setLocusIds(Ljava/util/List;)Landroid/content/pm/LauncherApps$ShortcutQuery;" since="30"/>
+		<method name="setPackage(Ljava/lang/String;)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
+		<method name="setQueryFlags(I)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
+		<method name="setShortcutIds(Ljava/util/List;)Landroid/content/pm/LauncherApps$ShortcutQuery;"/>
+		<field name="FLAG_GET_KEY_FIELDS_ONLY"/>
+		<field name="FLAG_MATCH_CACHED" since="30"/>
+		<field name="FLAG_MATCH_DYNAMIC"/>
+		<field name="FLAG_MATCH_MANIFEST"/>
+		<field name="FLAG_MATCH_PINNED"/>
+		<field name="FLAG_MATCH_PINNED_BY_ANY_LAUNCHER" since="28"/>
+	</class>
+	<class name="android/content/pm/ModuleInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="isHidden()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/PackageInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getLongVersionCode()J" since="28"/>
+		<method name="setLongVersionCode(J)V" since="28"/>
+		<field name="CREATOR"/>
+		<field name="INSTALL_LOCATION_AUTO" since="21"/>
+		<field name="INSTALL_LOCATION_INTERNAL_ONLY" since="21"/>
+		<field name="INSTALL_LOCATION_PREFER_EXTERNAL" since="21"/>
+		<field name="REQUESTED_PERMISSION_GRANTED" since="16"/>
+		<field name="REQUESTED_PERMISSION_NEVER_FOR_LOCATION" since="31"/>
+		<field name="REQUESTED_PERMISSION_REQUIRED" since="16" removed="23"/>
+		<field name="activities"/>
+		<field name="applicationInfo"/>
+		<field name="attributions" since="31"/>
+		<field name="baseRevisionCode" since="22"/>
+		<field name="configPreferences" since="3"/>
+		<field name="featureGroups" since="21"/>
+		<field name="firstInstallTime" since="9"/>
+		<field name="gids"/>
+		<field name="installLocation" since="21"/>
+		<field name="instrumentation"/>
+		<field name="isApex" since="29"/>
+		<field name="lastUpdateTime" since="9"/>
+		<field name="packageName"/>
+		<field name="permissions"/>
+		<field name="providers"/>
+		<field name="receivers"/>
+		<field name="reqFeatures" since="5"/>
+		<field name="requestedPermissions"/>
+		<field name="requestedPermissionsFlags" since="16"/>
+		<field name="services"/>
+		<field name="sharedUserId" since="3"/>
+		<field name="sharedUserLabel" since="3"/>
+		<field name="signatures" deprecated="28"/>
+		<field name="signingInfo" since="28"/>
+		<field name="splitNames" since="21"/>
+		<field name="splitRevisionCodes" since="22"/>
+		<field name="versionCode" deprecated="28"/>
+		<field name="versionName"/>
+	</class>
+	<class name="android/content/pm/PackageInstaller" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="abandonSession(I)V"/>
+		<method name="createSession(Landroid/content/pm/PackageInstaller$SessionParams;)I"/>
+		<method name="getActiveStagedSession()Landroid/content/pm/PackageInstaller$SessionInfo;" since="29" deprecated="30"/>
+		<method name="getActiveStagedSessions()Ljava/util/List;" since="30"/>
+		<method name="getAllSessions()Ljava/util/List;"/>
+		<method name="getMySessions()Ljava/util/List;"/>
+		<method name="getSessionInfo(I)Landroid/content/pm/PackageInstaller$SessionInfo;"/>
+		<method name="getStagedSessions()Ljava/util/List;" since="29"/>
+		<method name="installExistingPackage(Ljava/lang/String;ILandroid/content/IntentSender;)V" since="29"/>
+		<method name="openSession(I)Landroid/content/pm/PackageInstaller$Session;"/>
+		<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V"/>
+		<method name="registerSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;Landroid/os/Handler;)V"/>
+		<method name="uninstall(Landroid/content/pm/VersionedPackage;Landroid/content/IntentSender;)V" since="26"/>
+		<method name="uninstall(Ljava/lang/String;Landroid/content/IntentSender;)V"/>
+		<method name="uninstallExistingPackage(Ljava/lang/String;Landroid/content/IntentSender;)V" since="31"/>
+		<method name="unregisterSessionCallback(Landroid/content/pm/PackageInstaller$SessionCallback;)V"/>
+		<method name="updateSessionAppIcon(ILandroid/graphics/Bitmap;)V"/>
+		<method name="updateSessionAppLabel(ILjava/lang/CharSequence;)V"/>
+		<field name="ACTION_SESSION_COMMITTED" since="26"/>
+		<field name="ACTION_SESSION_DETAILS"/>
+		<field name="ACTION_SESSION_UPDATED" since="29"/>
+		<field name="EXTRA_OTHER_PACKAGE_NAME"/>
+		<field name="EXTRA_PACKAGE_NAME"/>
+		<field name="EXTRA_SESSION" since="26"/>
+		<field name="EXTRA_SESSION_ID"/>
+		<field name="EXTRA_STATUS"/>
+		<field name="EXTRA_STATUS_MESSAGE"/>
+		<field name="EXTRA_STORAGE_PATH"/>
+		<field name="STATUS_FAILURE"/>
+		<field name="STATUS_FAILURE_ABORTED"/>
+		<field name="STATUS_FAILURE_BLOCKED"/>
+		<field name="STATUS_FAILURE_CONFLICT"/>
+		<field name="STATUS_FAILURE_INCOMPATIBLE"/>
+		<field name="STATUS_FAILURE_INVALID"/>
+		<field name="STATUS_FAILURE_STORAGE"/>
+		<field name="STATUS_PENDING_USER_ACTION"/>
+		<field name="STATUS_SUCCESS"/>
+	</class>
+	<class name="android/content/pm/PackageInstaller$Session" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="abandon()V"/>
+		<method name="addChildSessionId(I)V" since="29"/>
+		<method name="commit(Landroid/content/IntentSender;)V"/>
+		<method name="fsync(Ljava/io/OutputStream;)V"/>
+		<method name="getChildSessionIds()[I" since="29"/>
+		<method name="getNames()[Ljava/lang/String;"/>
+		<method name="getParentSessionId()I" since="29"/>
+		<method name="isMultiPackage()Z" since="29"/>
+		<method name="isStaged()Z" since="29"/>
+		<method name="openRead(Ljava/lang/String;)Ljava/io/InputStream;"/>
+		<method name="openWrite(Ljava/lang/String;JJ)Ljava/io/OutputStream;"/>
+		<method name="removeChildSessionId(I)V" since="29"/>
+		<method name="removeSplit(Ljava/lang/String;)V" since="24"/>
+		<method name="setChecksums(Ljava/lang/String;Ljava/util/List;[B)V" since="31" deprecated="31"/>
+		<method name="setStagingProgress(F)V"/>
+		<method name="transfer(Ljava/lang/String;)V" since="27"/>
+	</class>
+	<class name="android/content/pm/PackageInstaller$SessionCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onActiveChanged(IZ)V"/>
+		<method name="onBadgingChanged(I)V"/>
+		<method name="onCreated(I)V"/>
+		<method name="onFinished(IZ)V"/>
+		<method name="onProgressChanged(IF)V"/>
+	</class>
+	<class name="android/content/pm/PackageInstaller$SessionInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createDetailsIntent()Landroid/content/Intent;"/>
+		<method name="getAppIcon()Landroid/graphics/Bitmap;"/>
+		<method name="getAppLabel()Ljava/lang/CharSequence;"/>
+		<method name="getAppPackageName()Ljava/lang/String;"/>
+		<method name="getChildSessionIds()[I" since="29"/>
+		<method name="getCreatedMillis()J" since="30"/>
+		<method name="getInstallLocation()I" since="27"/>
+		<method name="getInstallReason()I" since="26"/>
+		<method name="getInstallerAttributionTag()Ljava/lang/String;" since="31"/>
+		<method name="getInstallerPackageName()Ljava/lang/String;"/>
+		<method name="getMode()I" since="27"/>
+		<method name="getOriginatingUid()I" since="27"/>
+		<method name="getOriginatingUri()Landroid/net/Uri;" since="27"/>
+		<method name="getParentSessionId()I" since="29"/>
+		<method name="getProgress()F"/>
+		<method name="getReferrerUri()Landroid/net/Uri;" since="27"/>
+		<method name="getRequireUserAction()I" since="31"/>
+		<method name="getSessionId()I"/>
+		<method name="getSize()J" since="27"/>
+		<method name="getStagedSessionErrorCode()I" since="29"/>
+		<method name="getStagedSessionErrorMessage()Ljava/lang/String;" since="29"/>
+		<method name="getUpdatedMillis()J" since="29"/>
+		<method name="getUser()Landroid/os/UserHandle;" since="29"/>
+		<method name="hasParentSessionId()Z" since="30"/>
+		<method name="isActive()Z"/>
+		<method name="isCommitted()Z" since="29"/>
+		<method name="isMultiPackage()Z" since="29"/>
+		<method name="isSealed()Z" since="26"/>
+		<method name="isStaged()Z" since="29"/>
+		<method name="isStagedSessionActive()Z" since="30"/>
+		<method name="isStagedSessionApplied()Z" since="29"/>
+		<method name="isStagedSessionFailed()Z" since="29"/>
+		<method name="isStagedSessionReady()Z" since="29"/>
+		<field name="CREATOR"/>
+		<field name="INVALID_ID" since="29"/>
+		<field name="STAGED_SESSION_ACTIVATION_FAILED" since="29"/>
+		<field name="STAGED_SESSION_CONFLICT" since="31"/>
+		<field name="STAGED_SESSION_NO_ERROR" since="29"/>
+		<field name="STAGED_SESSION_UNKNOWN" since="29"/>
+		<field name="STAGED_SESSION_VERIFICATION_FAILED" since="29"/>
+	</class>
+	<class name="android/content/pm/PackageInstaller$SessionParams" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="setAppIcon(Landroid/graphics/Bitmap;)V"/>
+		<method name="setAppLabel(Ljava/lang/CharSequence;)V"/>
+		<method name="setAppPackageName(Ljava/lang/String;)V"/>
+		<method name="setAutoRevokePermissionsMode(Z)V" since="30" deprecated="31"/>
+		<method name="setInstallLocation(I)V"/>
+		<method name="setInstallReason(I)V" since="26"/>
+		<method name="setInstallScenario(I)V" since="31"/>
+		<method name="setMultiPackage()V" since="29"/>
+		<method name="setOriginatingUid(I)V" since="24"/>
+		<method name="setOriginatingUri(Landroid/net/Uri;)V"/>
+		<method name="setReferrerUri(Landroid/net/Uri;)V"/>
+		<method name="setRequireUserAction(I)V" since="31"/>
+		<method name="setSize(J)V"/>
+		<method name="setWhitelistedRestrictedPermissions(Ljava/util/Set;)V" since="29"/>
+		<field name="CREATOR"/>
+		<field name="MODE_FULL_INSTALL"/>
+		<field name="MODE_INHERIT_EXISTING"/>
+		<field name="RESTRICTED_PERMISSIONS_ALL" since="29"/>
+		<field name="USER_ACTION_NOT_REQUIRED" since="31"/>
+		<field name="USER_ACTION_REQUIRED" since="31"/>
+		<field name="USER_ACTION_UNSPECIFIED" since="31"/>
+	</class>
+	<class name="android/content/pm/PackageItemInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/PackageItemInfo;)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="dumpBack(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="dumpFront(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="loadBanner(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="20"/>
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<method name="loadLogo(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="9"/>
+		<method name="loadUnbadgedIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" since="22"/>
+		<method name="loadXmlMetaData(Landroid/content/pm/PackageManager;Ljava/lang/String;)Landroid/content/res/XmlResourceParser;"/>
+		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
+		<field name="banner" since="20"/>
+		<field name="icon"/>
+		<field name="labelRes"/>
+		<field name="logo" since="9"/>
+		<field name="metaData"/>
+		<field name="name"/>
+		<field name="nonLocalizedLabel"/>
+		<field name="packageName"/>
+	</class>
+	<class name="android/content/pm/PackageItemInfo$DisplayNameComparator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Comparator"/>
+		<method name="&lt;init>(Landroid/content/pm/PackageManager;)V"/>
+		<method name="compare(Landroid/content/pm/PackageItemInfo;Landroid/content/pm/PackageItemInfo;)I"/>
+	</class>
+	<class name="android/content/pm/PackageManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="addPackageToPreferred(Ljava/lang/String;)V" deprecated="15"/>
+		<method name="addPermission(Landroid/content/pm/PermissionInfo;)Z"/>
+		<method name="addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z" since="8"/>
+		<method name="addPreferredActivity(Landroid/content/IntentFilter;I[Landroid/content/ComponentName;Landroid/content/ComponentName;)V" deprecated="15"/>
+		<method name="addWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;I)Z" since="29"/>
+		<method name="canRequestPackageInstalls()Z" since="26"/>
+		<method name="canonicalToCurrentPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8"/>
+		<method name="checkPermission(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="checkSignatures(II)I" since="5"/>
+		<method name="checkSignatures(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="clearInstantAppCookie()V" since="26"/>
+		<method name="clearPackagePreferredActivities(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="currentToCanonicalPackageNames([Ljava/lang/String;)[Ljava/lang/String;" since="8"/>
+		<method name="extendVerificationTimeout(IIJ)V" since="17"/>
+		<method name="getActivityBanner(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" since="20"/>
+		<method name="getActivityBanner(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;" since="20"/>
+		<method name="getActivityIcon(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getActivityIcon(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getActivityInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;"/>
+		<method name="getActivityLogo(Landroid/content/ComponentName;)Landroid/graphics/drawable/Drawable;" since="9"/>
+		<method name="getActivityLogo(Landroid/content/Intent;)Landroid/graphics/drawable/Drawable;" since="9"/>
+		<method name="getAllPermissionGroups(I)Ljava/util/List;"/>
+		<method name="getApplicationBanner(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" since="20"/>
+		<method name="getApplicationBanner(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="20"/>
+		<method name="getApplicationEnabledSetting(Ljava/lang/String;)I"/>
+		<method name="getApplicationIcon(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getApplicationIcon(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo;"/>
+		<method name="getApplicationLabel(Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;"/>
+		<method name="getApplicationLogo(Landroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;" since="9"/>
+		<method name="getApplicationLogo(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="9"/>
+		<method name="getBackgroundPermissionOptionLabel()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getChangedPackages(I)Landroid/content/pm/ChangedPackages;" since="26"/>
+		<method name="getComponentEnabledSetting(Landroid/content/ComponentName;)I"/>
+		<method name="getDefaultActivityIcon()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getDrawable(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getGroupOfPlatformPermission(Ljava/lang/String;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="getInstallSourceInfo(Ljava/lang/String;)Landroid/content/pm/InstallSourceInfo;" since="30"/>
+		<method name="getInstalledApplications(I)Ljava/util/List;"/>
+		<method name="getInstalledModules(I)Ljava/util/List;" since="29"/>
+		<method name="getInstalledPackages(I)Ljava/util/List;"/>
+		<method name="getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String;" since="5" deprecated="30"/>
+		<method name="getInstantAppCookie()[B" since="26"/>
+		<method name="getInstantAppCookieMaxBytes()I" since="26"/>
+		<method name="getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;"/>
+		<method name="getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="3"/>
+		<method name="getLeanbackLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;" since="21"/>
+		<method name="getMimeGroup(Ljava/lang/String;)Ljava/util/Set;" since="30"/>
+		<method name="getModuleInfo(Ljava/lang/String;I)Landroid/content/pm/ModuleInfo;" since="29"/>
+		<method name="getNameForUid(I)Ljava/lang/String;"/>
+		<method name="getPackageArchiveInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"/>
+		<method name="getPackageGids(Ljava/lang/String;)[I"/>
+		<method name="getPackageGids(Ljava/lang/String;I)[I" since="24"/>
+		<method name="getPackageInfo(Landroid/content/pm/VersionedPackage;I)Landroid/content/pm/PackageInfo;" since="26"/>
+		<method name="getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;"/>
+		<method name="getPackageInstaller()Landroid/content/pm/PackageInstaller;" since="21"/>
+		<method name="getPackageUid(Ljava/lang/String;I)I" since="24"/>
+		<method name="getPackagesForUid(I)[Ljava/lang/String;"/>
+		<method name="getPackagesHoldingPermissions([Ljava/lang/String;I)Ljava/util/List;" since="18"/>
+		<method name="getPermissionGroupInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionGroupInfo;"/>
+		<method name="getPermissionInfo(Ljava/lang/String;I)Landroid/content/pm/PermissionInfo;"/>
+		<method name="getPlatformPermissionsForGroup(Ljava/lang/String;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="getPreferredActivities(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)I" deprecated="29"/>
+		<method name="getPreferredPackages(I)Ljava/util/List;" deprecated="29"/>
+		<method name="getProperty(Ljava/lang/String;Landroid/content/ComponentName;)Landroid/content/pm/PackageManager$Property;" since="31"/>
+		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Landroid/content/pm/PackageManager$Property;" since="31"/>
+		<method name="getProviderInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ProviderInfo;" since="9"/>
+		<method name="getReceiverInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ActivityInfo;"/>
+		<method name="getResourcesForActivity(Landroid/content/ComponentName;)Landroid/content/res/Resources;"/>
+		<method name="getResourcesForApplication(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;"/>
+		<method name="getResourcesForApplication(Landroid/content/pm/ApplicationInfo;Landroid/content/res/Configuration;)Landroid/content/res/Resources;" since="31"/>
+		<method name="getResourcesForApplication(Ljava/lang/String;)Landroid/content/res/Resources;"/>
+		<method name="getServiceInfo(Landroid/content/ComponentName;I)Landroid/content/pm/ServiceInfo;"/>
+		<method name="getSharedLibraries(I)Ljava/util/List;" since="26"/>
+		<method name="getSuspendedPackageAppExtras()Landroid/os/Bundle;" since="28"/>
+		<method name="getSyntheticAppDetailsActivityEnabled(Ljava/lang/String;)Z" since="29"/>
+		<method name="getSystemAvailableFeatures()[Landroid/content/pm/FeatureInfo;" since="5"/>
+		<method name="getSystemSharedLibraryNames()[Ljava/lang/String;" since="3"/>
+		<method name="getTargetSdkVersion(Ljava/lang/String;)I" since="31"/>
+		<method name="getText(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;"/>
+		<method name="getUserBadgedDrawableForDensity(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;Landroid/graphics/Rect;I)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="getUserBadgedIcon(Landroid/graphics/drawable/Drawable;Landroid/os/UserHandle;)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="getUserBadgedLabel(Ljava/lang/CharSequence;Landroid/os/UserHandle;)Ljava/lang/CharSequence;" since="21"/>
+		<method name="getWhitelistedRestrictedPermissions(Ljava/lang/String;I)Ljava/util/Set;" since="29"/>
+		<method name="getXml(Ljava/lang/String;ILandroid/content/pm/ApplicationInfo;)Landroid/content/res/XmlResourceParser;"/>
+		<method name="hasSigningCertificate(I[BI)Z" since="28"/>
+		<method name="hasSigningCertificate(Ljava/lang/String;[BI)Z" since="28"/>
+		<method name="hasSystemFeature(Ljava/lang/String;)Z" since="5"/>
+		<method name="hasSystemFeature(Ljava/lang/String;I)Z" since="24"/>
+		<method name="installPackage(Landroid/net/Uri;)V" removed="4"/>
+		<method name="installPackage(Landroid/net/Uri;Landroid/content/pm/IPackageInstallObserver;I)V" removed="4"/>
+		<method name="isAutoRevokeWhitelisted()Z" since="30"/>
+		<method name="isAutoRevokeWhitelisted(Ljava/lang/String;)Z" since="30"/>
+		<method name="isDefaultApplicationIcon(Landroid/graphics/drawable/Drawable;)Z" since="30"/>
+		<method name="isDeviceUpgrading()Z" since="29"/>
+		<method name="isInstantApp()Z" since="26"/>
+		<method name="isInstantApp(Ljava/lang/String;)Z" since="26"/>
+		<method name="isPackageSuspended()Z" since="28"/>
+		<method name="isPackageSuspended(Ljava/lang/String;)Z" since="29"/>
+		<method name="isPermissionRevokedByPolicy(Ljava/lang/String;Ljava/lang/String;)Z" since="23"/>
+		<method name="isSafeMode()Z" since="3"/>
+		<method name="queryActivityProperty(Ljava/lang/String;)Ljava/util/List;" since="31"/>
+		<method name="queryApplicationProperty(Ljava/lang/String;)Ljava/util/List;" since="31"/>
+		<method name="queryBroadcastReceivers(Landroid/content/Intent;I)Ljava/util/List;"/>
+		<method name="queryContentProviders(Ljava/lang/String;II)Ljava/util/List;"/>
+		<method name="queryInstrumentation(Ljava/lang/String;I)Ljava/util/List;"/>
+		<method name="queryIntentActivities(Landroid/content/Intent;I)Ljava/util/List;"/>
+		<method name="queryIntentActivityOptions(Landroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I)Ljava/util/List;"/>
+		<method name="queryIntentContentProviders(Landroid/content/Intent;I)Ljava/util/List;" since="19"/>
+		<method name="queryIntentServices(Landroid/content/Intent;I)Ljava/util/List;"/>
+		<method name="queryPermissionsByGroup(Ljava/lang/String;I)Ljava/util/List;"/>
+		<method name="queryProviderProperty(Ljava/lang/String;)Ljava/util/List;" since="31"/>
+		<method name="queryReceiverProperty(Ljava/lang/String;)Ljava/util/List;" since="31"/>
+		<method name="queryServiceProperty(Ljava/lang/String;)Ljava/util/List;" since="31"/>
+		<method name="removePackageFromPreferred(Ljava/lang/String;)V" deprecated="15"/>
+		<method name="removePermission(Ljava/lang/String;)V"/>
+		<method name="removeWhitelistedRestrictedPermission(Ljava/lang/String;Ljava/lang/String;I)Z" since="29"/>
+		<method name="requestChecksums(Ljava/lang/String;ZILjava/util/List;Landroid/content/pm/PackageManager$OnChecksumsReadyListener;)V" since="31"/>
+		<method name="resolveActivity(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;"/>
+		<method name="resolveContentProvider(Ljava/lang/String;I)Landroid/content/pm/ProviderInfo;"/>
+		<method name="resolveService(Landroid/content/Intent;I)Landroid/content/pm/ResolveInfo;"/>
+		<method name="setApplicationCategoryHint(Ljava/lang/String;I)V" since="26"/>
+		<method name="setApplicationEnabledSetting(Ljava/lang/String;II)V"/>
+		<method name="setAutoRevokeWhitelisted(Ljava/lang/String;Z)Z" since="30"/>
+		<method name="setComponentEnabledSetting(Landroid/content/ComponentName;II)V"/>
+		<method name="setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V" since="11"/>
+		<method name="setMimeGroup(Ljava/lang/String;Ljava/util/Set;)V" since="30"/>
+		<method name="updateInstantAppCookie([B)V" since="26"/>
+		<method name="verifyPendingInstall(II)V" since="14"/>
+		<field name="CERT_INPUT_RAW_X509" since="28"/>
+		<field name="CERT_INPUT_SHA256" since="28"/>
+		<field name="COMPONENT_ENABLED_STATE_DEFAULT"/>
+		<field name="COMPONENT_ENABLED_STATE_DISABLED"/>
+		<field name="COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED" since="18"/>
+		<field name="COMPONENT_ENABLED_STATE_DISABLED_USER" since="14"/>
+		<field name="COMPONENT_ENABLED_STATE_ENABLED"/>
+		<field name="DONT_KILL_APP"/>
+		<field name="EXTRA_VERIFICATION_ID" since="14"/>
+		<field name="EXTRA_VERIFICATION_RESULT" since="17"/>
+		<field name="FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS" since="26"/>
+		<field name="FEATURE_APP_WIDGETS" since="18"/>
+		<field name="FEATURE_AUDIO_LOW_LATENCY" since="9"/>
+		<field name="FEATURE_AUDIO_OUTPUT" since="21"/>
+		<field name="FEATURE_AUDIO_PRO" since="23"/>
+		<field name="FEATURE_AUTOFILL" since="26"/>
+		<field name="FEATURE_AUTOMOTIVE" since="23"/>
+		<field name="FEATURE_BACKUP" since="20"/>
+		<field name="FEATURE_BLUETOOTH" since="8"/>
+		<field name="FEATURE_BLUETOOTH_LE" since="18"/>
+		<field name="FEATURE_CAMERA" since="7"/>
+		<field name="FEATURE_CAMERA_ANY" since="17"/>
+		<field name="FEATURE_CAMERA_AR" since="28"/>
+		<field name="FEATURE_CAMERA_AUTOFOCUS" since="7"/>
+		<field name="FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING" since="21"/>
+		<field name="FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR" since="21"/>
+		<field name="FEATURE_CAMERA_CAPABILITY_RAW" since="21"/>
+		<field name="FEATURE_CAMERA_CONCURRENT" since="30"/>
+		<field name="FEATURE_CAMERA_EXTERNAL" since="20"/>
+		<field name="FEATURE_CAMERA_FLASH" since="7"/>
+		<field name="FEATURE_CAMERA_FRONT" since="9"/>
+		<field name="FEATURE_CAMERA_LEVEL_FULL" since="21"/>
+		<field name="FEATURE_CANT_SAVE_STATE" since="28"/>
+		<field name="FEATURE_COMPANION_DEVICE_SETUP" since="26"/>
+		<field name="FEATURE_CONNECTION_SERVICE" since="21"/>
+		<field name="FEATURE_CONSUMER_IR" since="19"/>
+		<field name="FEATURE_CONTROLS" since="30"/>
+		<field name="FEATURE_DEVICE_ADMIN" since="19"/>
+		<field name="FEATURE_EMBEDDED" since="26"/>
+		<field name="FEATURE_ETHERNET" since="24"/>
+		<field name="FEATURE_FACE" since="29"/>
+		<field name="FEATURE_FAKETOUCH" since="11"/>
+		<field name="FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT" since="13"/>
+		<field name="FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND" since="13"/>
+		<field name="FEATURE_FINGERPRINT" since="23"/>
+		<field name="FEATURE_FREEFORM_WINDOW_MANAGEMENT" since="24"/>
+		<field name="FEATURE_GAMEPAD" since="21"/>
+		<field name="FEATURE_HARDWARE_KEYSTORE" since="31"/>
+		<field name="FEATURE_HIFI_SENSORS" since="23"/>
+		<field name="FEATURE_HOME_SCREEN" since="18"/>
+		<field name="FEATURE_IDENTITY_CREDENTIAL_HARDWARE" since="31"/>
+		<field name="FEATURE_IDENTITY_CREDENTIAL_HARDWARE_DIRECT_ACCESS" since="31"/>
+		<field name="FEATURE_INPUT_METHODS" since="18"/>
+		<field name="FEATURE_IPSEC_TUNNELS" since="29"/>
+		<field name="FEATURE_IRIS" since="29"/>
+		<field name="FEATURE_KEYSTORE_APP_ATTEST_KEY" since="31"/>
+		<field name="FEATURE_KEYSTORE_LIMITED_USE_KEY" since="31"/>
+		<field name="FEATURE_KEYSTORE_SINGLE_USE_KEY" since="31"/>
+		<field name="FEATURE_LEANBACK" since="21"/>
+		<field name="FEATURE_LEANBACK_ONLY" since="26"/>
+		<field name="FEATURE_LIVE_TV" since="21"/>
+		<field name="FEATURE_LIVE_WALLPAPER" since="7"/>
+		<field name="FEATURE_LOCATION" since="8"/>
+		<field name="FEATURE_LOCATION_GPS" since="8"/>
+		<field name="FEATURE_LOCATION_NETWORK" since="8"/>
+		<field name="FEATURE_MANAGED_USERS" since="21"/>
+		<field name="FEATURE_MICROPHONE" since="8"/>
+		<field name="FEATURE_MIDI" since="23"/>
+		<field name="FEATURE_NFC" since="9"/>
+		<field name="FEATURE_NFC_BEAM" since="29"/>
+		<field name="FEATURE_NFC_HOST_CARD_EMULATION" since="19"/>
+		<field name="FEATURE_NFC_HOST_CARD_EMULATION_NFCF" since="24"/>
+		<field name="FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE" since="29"/>
+		<field name="FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC" since="29"/>
+		<field name="FEATURE_OPENGLES_DEQP_LEVEL" since="31"/>
+		<field name="FEATURE_OPENGLES_EXTENSION_PACK" since="21"/>
+		<field name="FEATURE_PC" since="27"/>
+		<field name="FEATURE_PICTURE_IN_PICTURE" since="24"/>
+		<field name="FEATURE_PRINTING" since="20"/>
+		<field name="FEATURE_RAM_LOW" since="27"/>
+		<field name="FEATURE_RAM_NORMAL" since="27"/>
+		<field name="FEATURE_SCREEN_LANDSCAPE" since="13"/>
+		<field name="FEATURE_SCREEN_PORTRAIT" since="13"/>
+		<field name="FEATURE_SECURELY_REMOVES_USERS" since="21"/>
+		<field name="FEATURE_SECURE_LOCK_SCREEN" since="29"/>
+		<field name="FEATURE_SECURITY_MODEL_COMPATIBLE" since="31"/>
+		<field name="FEATURE_SENSOR_ACCELEROMETER" since="8"/>
+		<field name="FEATURE_SENSOR_AMBIENT_TEMPERATURE" since="21"/>
+		<field name="FEATURE_SENSOR_BAROMETER" since="9"/>
+		<field name="FEATURE_SENSOR_COMPASS" since="8"/>
+		<field name="FEATURE_SENSOR_GYROSCOPE" since="9"/>
+		<field name="FEATURE_SENSOR_HEART_RATE" since="20"/>
+		<field name="FEATURE_SENSOR_HEART_RATE_ECG" since="21"/>
+		<field name="FEATURE_SENSOR_HINGE_ANGLE" since="30"/>
+		<field name="FEATURE_SENSOR_LIGHT" since="7"/>
+		<field name="FEATURE_SENSOR_PROXIMITY" since="7"/>
+		<field name="FEATURE_SENSOR_RELATIVE_HUMIDITY" since="21"/>
+		<field name="FEATURE_SENSOR_STEP_COUNTER" since="19"/>
+		<field name="FEATURE_SENSOR_STEP_DETECTOR" since="19"/>
+		<field name="FEATURE_SE_OMAPI_ESE" since="30"/>
+		<field name="FEATURE_SE_OMAPI_SD" since="30"/>
+		<field name="FEATURE_SE_OMAPI_UICC" since="30"/>
+		<field name="FEATURE_SIP" since="9"/>
+		<field name="FEATURE_SIP_VOIP" since="9"/>
+		<field name="FEATURE_STRONGBOX_KEYSTORE" since="28"/>
+		<field name="FEATURE_TELEPHONY" since="7"/>
+		<field name="FEATURE_TELEPHONY_CDMA" since="7"/>
+		<field name="FEATURE_TELEPHONY_EUICC" since="28"/>
+		<field name="FEATURE_TELEPHONY_GSM" since="7"/>
+		<field name="FEATURE_TELEPHONY_IMS" since="29"/>
+		<field name="FEATURE_TELEPHONY_MBMS" since="28"/>
+		<field name="FEATURE_TELEVISION" since="16" deprecated="21"/>
+		<field name="FEATURE_TOUCHSCREEN" since="8"/>
+		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH" since="7"/>
+		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT" since="8"/>
+		<field name="FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND" since="9"/>
+		<field name="FEATURE_USB_ACCESSORY" since="12"/>
+		<field name="FEATURE_USB_HOST" since="12"/>
+		<field name="FEATURE_VERIFIED_BOOT" since="21"/>
+		<field name="FEATURE_VR_HEADTRACKING" since="26"/>
+		<field name="FEATURE_VR_MODE" since="24" deprecated="28"/>
+		<field name="FEATURE_VR_MODE_HIGH_PERFORMANCE" since="24"/>
+		<field name="FEATURE_VULKAN_DEQP_LEVEL" since="30"/>
+		<field name="FEATURE_VULKAN_HARDWARE_COMPUTE" since="26"/>
+		<field name="FEATURE_VULKAN_HARDWARE_LEVEL" since="24"/>
+		<field name="FEATURE_VULKAN_HARDWARE_VERSION" since="24"/>
+		<field name="FEATURE_WATCH" since="20"/>
+		<field name="FEATURE_WEBVIEW" since="20"/>
+		<field name="FEATURE_WIFI" since="8"/>
+		<field name="FEATURE_WIFI_AWARE" since="26"/>
+		<field name="FEATURE_WIFI_DIRECT" since="14"/>
+		<field name="FEATURE_WIFI_PASSPOINT" since="27"/>
+		<field name="FEATURE_WIFI_RTT" since="28"/>
+		<field name="FLAG_PERMISSION_WHITELIST_INSTALLER" since="29"/>
+		<field name="FLAG_PERMISSION_WHITELIST_SYSTEM" since="29"/>
+		<field name="FLAG_PERMISSION_WHITELIST_UPGRADE" since="29"/>
+		<field name="FORWARD_LOCK_PACKAGE" removed="4"/>
+		<field name="GET_ACTIVITIES"/>
+		<field name="GET_ATTRIBUTIONS" since="31"/>
+		<field name="GET_CONFIGURATIONS" since="3"/>
+		<field name="GET_DISABLED_COMPONENTS" deprecated="24"/>
+		<field name="GET_DISABLED_UNTIL_USED_COMPONENTS" since="18" deprecated="24"/>
+		<field name="GET_GIDS"/>
+		<field name="GET_INSTRUMENTATION"/>
+		<field name="GET_INTENT_FILTERS" deprecated="31"/>
+		<field name="GET_META_DATA"/>
+		<field name="GET_PERMISSIONS"/>
+		<field name="GET_PROVIDERS"/>
+		<field name="GET_RECEIVERS"/>
+		<field name="GET_RESOLVED_FILTER"/>
+		<field name="GET_SERVICES"/>
+		<field name="GET_SHARED_LIBRARY_FILES"/>
+		<field name="GET_SIGNATURES" deprecated="28"/>
+		<field name="GET_SIGNING_CERTIFICATES" since="28"/>
+		<field name="GET_UNINSTALLED_PACKAGES" since="3" deprecated="24"/>
+		<field name="GET_URI_PERMISSION_PATTERNS"/>
+		<field name="INSTALL_FAILED_ALREADY_EXISTS" removed="4"/>
+		<field name="INSTALL_FAILED_CONFLICTING_PROVIDER" since="3" removed="4"/>
+		<field name="INSTALL_FAILED_DEXOPT" removed="4"/>
+		<field name="INSTALL_FAILED_DUPLICATE_PACKAGE" removed="4"/>
+		<field name="INSTALL_FAILED_INSUFFICIENT_STORAGE" removed="4"/>
+		<field name="INSTALL_FAILED_INVALID_APK" removed="4"/>
+		<field name="INSTALL_FAILED_INVALID_URI" removed="4"/>
+		<field name="INSTALL_FAILED_MISSING_SHARED_LIBRARY" removed="4"/>
+		<field name="INSTALL_FAILED_NO_SHARED_USER" removed="4"/>
+		<field name="INSTALL_FAILED_OLDER_SDK" removed="4"/>
+		<field name="INSTALL_FAILED_REPLACE_COULDNT_DELETE" removed="4"/>
+		<field name="INSTALL_FAILED_SHARED_USER_INCOMPATIBLE" removed="4"/>
+		<field name="INSTALL_FAILED_UPDATE_INCOMPATIBLE" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_BAD_MANIFEST" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_MANIFEST_EMPTY" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_MANIFEST_MALFORMED" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_NOT_APK" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_NO_CERTIFICATES" removed="4"/>
+		<field name="INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION" removed="4"/>
+		<field name="INSTALL_REASON_DEVICE_RESTORE" since="26"/>
+		<field name="INSTALL_REASON_DEVICE_SETUP" since="26"/>
+		<field name="INSTALL_REASON_POLICY" since="26"/>
+		<field name="INSTALL_REASON_UNKNOWN" since="26"/>
+		<field name="INSTALL_REASON_USER" since="26"/>
+		<field name="INSTALL_SCENARIO_BULK" since="31"/>
+		<field name="INSTALL_SCENARIO_BULK_SECONDARY" since="31"/>
+		<field name="INSTALL_SCENARIO_DEFAULT" since="31"/>
+		<field name="INSTALL_SCENARIO_FAST" since="31"/>
+		<field name="INSTALL_SUCCEEDED" removed="4"/>
+		<field name="MATCH_ALL" since="23"/>
+		<field name="MATCH_APEX" since="29"/>
+		<field name="MATCH_DEFAULT_ONLY"/>
+		<field name="MATCH_DIRECT_BOOT_AUTO" since="29"/>
+		<field name="MATCH_DIRECT_BOOT_AWARE" since="24"/>
+		<field name="MATCH_DIRECT_BOOT_UNAWARE" since="24"/>
+		<field name="MATCH_DISABLED_COMPONENTS" since="24"/>
+		<field name="MATCH_DISABLED_UNTIL_USED_COMPONENTS" since="24"/>
+		<field name="MATCH_SYSTEM_ONLY" since="24"/>
+		<field name="MATCH_UNINSTALLED_PACKAGES" since="24"/>
+		<field name="MAXIMUM_VERIFICATION_TIMEOUT" since="17"/>
+		<field name="PERMISSION_DENIED"/>
+		<field name="PERMISSION_GRANTED"/>
+		<field name="PKG_INSTALL_COMPLETE" removed="8"/>
+		<field name="PKG_INSTALL_INCOMPLETE" removed="8"/>
+		<field name="PROPERTY_MEDIA_CAPABILITIES" since="31"/>
+		<field name="REPLACE_EXISTING_PACKAGE" removed="4"/>
+		<field name="SIGNATURE_FIRST_NOT_SIGNED"/>
+		<field name="SIGNATURE_MATCH"/>
+		<field name="SIGNATURE_NEITHER_SIGNED"/>
+		<field name="SIGNATURE_NO_MATCH"/>
+		<field name="SIGNATURE_SECOND_NOT_SIGNED"/>
+		<field name="SIGNATURE_UNKNOWN_PACKAGE"/>
+		<field name="SYNCHRONOUS" since="30"/>
+		<field name="TRUST_ALL" since="31"/>
+		<field name="TRUST_NONE" since="31"/>
+		<field name="VERIFICATION_ALLOW" since="14"/>
+		<field name="VERIFICATION_REJECT" since="14"/>
+		<field name="VERSION_CODE_HIGHEST" since="26"/>
+	</class>
+	<class name="android/content/pm/PackageManager$NameNotFoundException" since="1">
+		<extends name="android/util/AndroidException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/content/pm/PackageManager$OnChecksumsReadyListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onChecksumsReady(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/content/pm/PackageManager$Property" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBoolean()Z"/>
+		<method name="getClassName()Ljava/lang/String;"/>
+		<method name="getFloat()F"/>
+		<method name="getInteger()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getResourceId()I"/>
+		<method name="getString()Ljava/lang/String;"/>
+		<method name="isBoolean()Z"/>
+		<method name="isFloat()Z"/>
+		<method name="isInteger()Z"/>
+		<method name="isResourceId()Z"/>
+		<method name="isString()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/PackageStats" since="1" deprecated="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/pm/PackageStats;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+		<field name="CREATOR" deprecated="29"/>
+		<field name="cacheSize" deprecated="29"/>
+		<field name="codeSize" deprecated="29"/>
+		<field name="dataSize" deprecated="29"/>
+		<field name="externalCacheSize" since="11" deprecated="29"/>
+		<field name="externalCodeSize" since="14" deprecated="29"/>
+		<field name="externalDataSize" since="11" deprecated="29"/>
+		<field name="externalMediaSize" since="11" deprecated="29"/>
+		<field name="externalObbSize" since="11" deprecated="29"/>
+		<field name="packageName" deprecated="29"/>
+	</class>
+	<class name="android/content/pm/PathPermission" since="4">
+		<extends name="android/os/PatternMatcher"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getReadPermission()Ljava/lang/String;"/>
+		<method name="getWritePermission()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/PermissionGroupInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/pm/PermissionGroupInfo;)V" deprecated="29"/>
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_PERSONAL_INFO" since="17"/>
+		<field name="descriptionRes"/>
+		<field name="flags" since="17"/>
+		<field name="nonLocalizedDescription"/>
+		<field name="priority" since="17"/>
+	</class>
+	<class name="android/content/pm/PermissionInfo" since="1">
+		<extends name="android/content/pm/PackageItemInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/pm/PermissionInfo;)V" deprecated="29"/>
+		<method name="getProtection()I" since="28"/>
+		<method name="getProtectionFlags()I" since="28"/>
+		<method name="loadDescription(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_COSTS_MONEY" since="17"/>
+		<field name="FLAG_HARD_RESTRICTED" since="29"/>
+		<field name="FLAG_IMMUTABLY_RESTRICTED" since="29"/>
+		<field name="FLAG_INSTALLED" since="23"/>
+		<field name="FLAG_SOFT_RESTRICTED" since="29"/>
+		<field name="PROTECTION_DANGEROUS"/>
+		<field name="PROTECTION_FLAG_APPOP" since="21"/>
+		<field name="PROTECTION_FLAG_DEVELOPMENT" since="16"/>
+		<field name="PROTECTION_FLAG_INSTALLER" since="23"/>
+		<field name="PROTECTION_FLAG_INSTANT" since="27"/>
+		<field name="PROTECTION_FLAG_PRE23" since="23"/>
+		<field name="PROTECTION_FLAG_PREINSTALLED" since="23"/>
+		<field name="PROTECTION_FLAG_PRIVILEGED" since="23"/>
+		<field name="PROTECTION_FLAG_RUNTIME_ONLY" since="26"/>
+		<field name="PROTECTION_FLAG_SETUP" since="24"/>
+		<field name="PROTECTION_FLAG_SYSTEM" since="16" deprecated="23"/>
+		<field name="PROTECTION_FLAG_VERIFIER" since="23"/>
+		<field name="PROTECTION_INTERNAL" since="31"/>
+		<field name="PROTECTION_MASK_BASE" since="16" deprecated="28"/>
+		<field name="PROTECTION_MASK_FLAGS" since="16" deprecated="28"/>
+		<field name="PROTECTION_NORMAL"/>
+		<field name="PROTECTION_SIGNATURE"/>
+		<field name="PROTECTION_SIGNATURE_OR_SYSTEM" deprecated="23"/>
+		<field name="descriptionRes"/>
+		<field name="flags" since="17"/>
+		<field name="group"/>
+		<field name="nonLocalizedDescription"/>
+		<field name="protectionLevel" deprecated="28"/>
+	</class>
+	<class name="android/content/pm/ProviderInfo" since="1">
+		<extends name="android/content/pm/ComponentInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/ProviderInfo;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="19"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_SINGLE_USER" since="17"/>
+		<field name="authority"/>
+		<field name="flags" since="17"/>
+		<field name="forceUriPermissions" since="29"/>
+		<field name="grantUriPermissions"/>
+		<field name="initOrder"/>
+		<field name="isSyncable" deprecated="15"/>
+		<field name="multiprocess"/>
+		<field name="pathPermissions" since="4"/>
+		<field name="readPermission"/>
+		<field name="uriPermissionPatterns"/>
+		<field name="writePermission"/>
+	</class>
+	<class name="android/content/pm/ResolveInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/ResolveInfo;)V" since="17"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getIconResource()I"/>
+		<method name="isCrossProfileIntentForwarderActivity()Z" since="30"/>
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+		<field name="activityInfo"/>
+		<field name="filter"/>
+		<field name="icon"/>
+		<field name="isDefault"/>
+		<field name="isInstantAppAvailable" since="26"/>
+		<field name="labelRes"/>
+		<field name="match"/>
+		<field name="nonLocalizedLabel"/>
+		<field name="preferredOrder"/>
+		<field name="priority"/>
+		<field name="providerInfo" since="19"/>
+		<field name="resolvePackageName" since="5"/>
+		<field name="serviceInfo"/>
+		<field name="specificIndex"/>
+	</class>
+	<class name="android/content/pm/ResolveInfo$DisplayNameComparator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Comparator"/>
+		<method name="&lt;init>(Landroid/content/pm/PackageManager;)V"/>
+		<method name="compare(Landroid/content/pm/ResolveInfo;Landroid/content/pm/ResolveInfo;)I"/>
+	</class>
+	<class name="android/content/pm/ServiceInfo" since="1">
+		<extends name="android/content/pm/ComponentInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/ServiceInfo;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="5"/>
+		<method name="getForegroundServiceType()I" since="29"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_EXTERNAL_SERVICE" since="24"/>
+		<field name="FLAG_ISOLATED_PROCESS" since="16"/>
+		<field name="FLAG_SINGLE_USER" since="17"/>
+		<field name="FLAG_STOP_WITH_TASK" since="14"/>
+		<field name="FLAG_USE_APP_ZYGOTE" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_CAMERA" since="30"/>
+		<field name="FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_DATA_SYNC" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_LOCATION" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_MANIFEST" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_MICROPHONE" since="30"/>
+		<field name="FOREGROUND_SERVICE_TYPE_NONE" since="29"/>
+		<field name="FOREGROUND_SERVICE_TYPE_PHONE_CALL" since="29"/>
+		<field name="flags" since="14"/>
+		<field name="permission"/>
+	</class>
+	<class name="android/content/pm/SharedLibraryInfo" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDeclaringPackage()Landroid/content/pm/VersionedPackage;"/>
+		<method name="getDependentPackages()Ljava/util/List;"/>
+		<method name="getLongVersion()J" since="28"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+		<method name="getVersion()I" deprecated="28"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_BUILTIN"/>
+		<field name="TYPE_DYNAMIC"/>
+		<field name="TYPE_STATIC"/>
+		<field name="VERSION_UNDEFINED"/>
+	</class>
+	<class name="android/content/pm/ShortcutInfo" since="25">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getActivity()Landroid/content/ComponentName;"/>
+		<method name="getCategories()Ljava/util/Set;"/>
+		<method name="getDisabledMessage()Ljava/lang/CharSequence;"/>
+		<method name="getDisabledReason()I" since="28"/>
+		<method name="getExtras()Landroid/os/PersistableBundle;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+		<method name="getIntents()[Landroid/content/Intent;"/>
+		<method name="getLastChangedTimestamp()J"/>
+		<method name="getLocusId()Landroid/content/LocusId;" since="29"/>
+		<method name="getLongLabel()Ljava/lang/CharSequence;"/>
+		<method name="getPackage()Ljava/lang/String;"/>
+		<method name="getRank()I"/>
+		<method name="getShortLabel()Ljava/lang/CharSequence;"/>
+		<method name="getUserHandle()Landroid/os/UserHandle;"/>
+		<method name="hasKeyFieldsOnly()Z"/>
+		<method name="isCached()Z" since="30"/>
+		<method name="isDeclaredInManifest()Z"/>
+		<method name="isDynamic()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="isImmutable()Z"/>
+		<method name="isPinned()Z"/>
+		<field name="CREATOR"/>
+		<field name="DISABLED_REASON_APP_CHANGED" since="28"/>
+		<field name="DISABLED_REASON_BACKUP_NOT_SUPPORTED" since="28"/>
+		<field name="DISABLED_REASON_BY_APP" since="28"/>
+		<field name="DISABLED_REASON_NOT_DISABLED" since="28"/>
+		<field name="DISABLED_REASON_OTHER_RESTORE_ISSUE" since="28"/>
+		<field name="DISABLED_REASON_SIGNATURE_MISMATCH" since="28"/>
+		<field name="DISABLED_REASON_UNKNOWN" since="28"/>
+		<field name="DISABLED_REASON_VERSION_LOWER" since="28"/>
+		<field name="SHORTCUT_CATEGORY_CONVERSATION"/>
+	</class>
+	<class name="android/content/pm/ShortcutInfo$Builder" since="25">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
+		<method name="build()Landroid/content/pm/ShortcutInfo;"/>
+		<method name="setActivity(Landroid/content/ComponentName;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setCategories(Ljava/util/Set;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setDisabledMessage(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setExtras(Landroid/os/PersistableBundle;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setIntent(Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setIntents([Landroid/content/Intent;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setLocusId(Landroid/content/LocusId;)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
+		<method name="setLongLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setLongLived(Z)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
+		<method name="setPerson(Landroid/app/Person;)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
+		<method name="setPersons([Landroid/app/Person;)Landroid/content/pm/ShortcutInfo$Builder;" since="29"/>
+		<method name="setRank(I)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setShortLabel(Ljava/lang/CharSequence;)Landroid/content/pm/ShortcutInfo$Builder;"/>
+		<method name="setStartingTheme(I)Landroid/content/pm/ShortcutInfo$Builder;" since="31"/>
+	</class>
+	<class name="android/content/pm/ShortcutManager" since="25">
+		<extends name="java/lang/Object"/>
+		<method name="addDynamicShortcuts(Ljava/util/List;)Z"/>
+		<method name="createShortcutResultIntent(Landroid/content/pm/ShortcutInfo;)Landroid/content/Intent;" since="26"/>
+		<method name="disableShortcuts(Ljava/util/List;)V"/>
+		<method name="disableShortcuts(Ljava/util/List;Ljava/lang/CharSequence;)V"/>
+		<method name="enableShortcuts(Ljava/util/List;)V"/>
+		<method name="getDynamicShortcuts()Ljava/util/List;"/>
+		<method name="getIconMaxHeight()I"/>
+		<method name="getIconMaxWidth()I"/>
+		<method name="getManifestShortcuts()Ljava/util/List;"/>
+		<method name="getMaxShortcutCountPerActivity()I"/>
+		<method name="getPinnedShortcuts()Ljava/util/List;"/>
+		<method name="getShortcuts(I)Ljava/util/List;" since="30"/>
+		<method name="isRateLimitingActive()Z"/>
+		<method name="isRequestPinShortcutSupported()Z" since="26"/>
+		<method name="pushDynamicShortcut(Landroid/content/pm/ShortcutInfo;)V" since="30"/>
+		<method name="removeAllDynamicShortcuts()V"/>
+		<method name="removeDynamicShortcuts(Ljava/util/List;)V"/>
+		<method name="removeLongLivedShortcuts(Ljava/util/List;)V" since="30"/>
+		<method name="reportShortcutUsed(Ljava/lang/String;)V"/>
+		<method name="requestPinShortcut(Landroid/content/pm/ShortcutInfo;Landroid/content/IntentSender;)Z" since="26"/>
+		<method name="setDynamicShortcuts(Ljava/util/List;)Z"/>
+		<method name="updateShortcuts(Ljava/util/List;)Z"/>
+		<field name="FLAG_MATCH_CACHED" since="30"/>
+		<field name="FLAG_MATCH_DYNAMIC" since="30"/>
+		<field name="FLAG_MATCH_MANIFEST" since="30"/>
+		<field name="FLAG_MATCH_PINNED" since="30"/>
+	</class>
+	<class name="android/content/pm/Signature" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="toByteArray()[B"/>
+		<method name="toChars()[C"/>
+		<method name="toChars([C[I)[C"/>
+		<method name="toCharsString()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/SigningInfo" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/pm/SigningInfo;)V"/>
+		<method name="getApkContentsSigners()[Landroid/content/pm/Signature;"/>
+		<method name="getSigningCertificateHistory()[Landroid/content/pm/Signature;"/>
+		<method name="hasMultipleSigners()Z"/>
+		<method name="hasPastSigningCertificates()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/VersionedPackage" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;J)V" since="28"/>
+		<method name="getLongVersionCode()J" since="28"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getVersionCode()I" deprecated="28"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/pm/verify/domain/DomainVerificationManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDomainVerificationUserState(Ljava/lang/String;)Landroid/content/pm/verify/domain/DomainVerificationUserState;"/>
+	</class>
+	<class name="android/content/pm/verify/domain/DomainVerificationUserState" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getHostToStateMap()Ljava/util/Map;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getUser()Landroid/os/UserHandle;"/>
+		<method name="isLinkHandlingAllowed()Z"/>
+		<field name="CREATOR"/>
+		<field name="DOMAIN_STATE_NONE"/>
+		<field name="DOMAIN_STATE_SELECTED"/>
+		<field name="DOMAIN_STATE_VERIFIED"/>
+	</class>
+	<class name="android/content/res/AssetFileDescriptor" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="3"/>
+		<implements name="java/io/Closeable" since="19"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;JJ)V"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;JJLandroid/os/Bundle;)V" since="19"/>
+		<method name="close()V"/>
+		<method name="createInputStream()Ljava/io/FileInputStream;" since="3"/>
+		<method name="createOutputStream()Ljava/io/FileOutputStream;" since="3"/>
+		<method name="getDeclaredLength()J" since="3"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="19"/>
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
+		<method name="getLength()J"/>
+		<method name="getParcelFileDescriptor()Landroid/os/ParcelFileDescriptor;"/>
+		<method name="getStartOffset()J"/>
+		<field name="CREATOR" since="3"/>
+		<field name="UNKNOWN_LENGTH" since="3"/>
+	</class>
+	<class name="android/content/res/AssetFileDescriptor$AutoCloseInputStream" since="3">
+		<extends name="android/os/ParcelFileDescriptor$AutoCloseInputStream"/>
+		<method name="&lt;init>(Landroid/content/res/AssetFileDescriptor;)V"/>
+	</class>
+	<class name="android/content/res/AssetFileDescriptor$AutoCloseOutputStream" since="3">
+		<extends name="android/os/ParcelFileDescriptor$AutoCloseOutputStream"/>
+		<method name="&lt;init>(Landroid/content/res/AssetFileDescriptor;)V"/>
+	</class>
+	<class name="android/content/res/AssetManager" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="21"/>
+		<method name="close()V"/>
+		<method name="getLocales()[Ljava/lang/String;"/>
+		<method name="list(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="open(Ljava/lang/String;)Ljava/io/InputStream;"/>
+		<method name="open(Ljava/lang/String;I)Ljava/io/InputStream;"/>
+		<method name="openFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
+		<method name="openNonAssetFd(ILjava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
+		<method name="openNonAssetFd(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"/>
+		<method name="openXmlResourceParser(ILjava/lang/String;)Landroid/content/res/XmlResourceParser;"/>
+		<method name="openXmlResourceParser(Ljava/lang/String;)Landroid/content/res/XmlResourceParser;"/>
+		<field name="ACCESS_BUFFER"/>
+		<field name="ACCESS_RANDOM"/>
+		<field name="ACCESS_STREAMING"/>
+		<field name="ACCESS_UNKNOWN"/>
+	</class>
+	<class name="android/content/res/AssetManager$AssetInputStream" since="1">
+		<extends name="java/io/InputStream"/>
+		<method name="getAssetInt()I" removed="21"/>
+	</class>
+	<class name="android/content/res/ColorStateList" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>([[I[I)V"/>
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;)Landroid/content/res/ColorStateList;" deprecated="23"/>
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;" since="23"/>
+		<method name="getChangingConfigurations()I" since="23"/>
+		<method name="getColorForState([II)I"/>
+		<method name="getDefaultColor()I"/>
+		<method name="isOpaque()Z" since="21"/>
+		<method name="isStateful()Z"/>
+		<method name="valueOf(I)Landroid/content/res/ColorStateList;"/>
+		<method name="withAlpha(I)Landroid/content/res/ColorStateList;"/>
+		<method name="withLStar(F)Landroid/content/res/ColorStateList;" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/content/res/Configuration" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/res/Configuration;)V"/>
+		<method name="compareTo(Landroid/content/res/Configuration;)I"/>
+		<method name="diff(Landroid/content/res/Configuration;)I"/>
+		<method name="equals(Landroid/content/res/Configuration;)Z"/>
+		<method name="getLayoutDirection()I" since="17"/>
+		<method name="getLocales()Landroid/os/LocaleList;" since="24"/>
+		<method name="isLayoutSizeAtLeast(I)Z" since="11"/>
+		<method name="isNightModeActive()Z" since="30"/>
+		<method name="isScreenHdr()Z" since="26"/>
+		<method name="isScreenRound()Z" since="23"/>
+		<method name="isScreenWideColorGamut()Z" since="26"/>
+		<method name="needNewResources(II)Z"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="8"/>
+		<method name="setLayoutDirection(Ljava/util/Locale;)V" since="17"/>
+		<method name="setLocale(Ljava/util/Locale;)V" since="17"/>
+		<method name="setLocales(Landroid/os/LocaleList;)V" since="24"/>
+		<method name="setTo(Landroid/content/res/Configuration;)V" since="8"/>
+		<method name="setToDefaults()V"/>
+		<method name="updateFrom(Landroid/content/res/Configuration;)I"/>
+		<field name="COLOR_MODE_HDR_MASK" since="26"/>
+		<field name="COLOR_MODE_HDR_NO" since="26"/>
+		<field name="COLOR_MODE_HDR_SHIFT" since="26"/>
+		<field name="COLOR_MODE_HDR_UNDEFINED" since="26"/>
+		<field name="COLOR_MODE_HDR_YES" since="26"/>
+		<field name="COLOR_MODE_UNDEFINED" since="26"/>
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_MASK" since="26"/>
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_NO" since="26"/>
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_UNDEFINED" since="26"/>
+		<field name="COLOR_MODE_WIDE_COLOR_GAMUT_YES" since="26"/>
+		<field name="CREATOR"/>
+		<field name="DENSITY_DPI_UNDEFINED" since="17"/>
+		<field name="FONT_WEIGHT_ADJUSTMENT_UNDEFINED" since="31"/>
+		<field name="HARDKEYBOARDHIDDEN_NO" since="3"/>
+		<field name="HARDKEYBOARDHIDDEN_UNDEFINED" since="3"/>
+		<field name="HARDKEYBOARDHIDDEN_YES" since="3"/>
+		<field name="KEYBOARDHIDDEN_NO"/>
+		<field name="KEYBOARDHIDDEN_UNDEFINED"/>
+		<field name="KEYBOARDHIDDEN_YES"/>
+		<field name="KEYBOARD_12KEY"/>
+		<field name="KEYBOARD_NOKEYS"/>
+		<field name="KEYBOARD_QWERTY"/>
+		<field name="KEYBOARD_UNDEFINED"/>
+		<field name="MNC_ZERO" since="19"/>
+		<field name="NAVIGATIONHIDDEN_NO" since="5"/>
+		<field name="NAVIGATIONHIDDEN_UNDEFINED" since="5"/>
+		<field name="NAVIGATIONHIDDEN_YES" since="5"/>
+		<field name="NAVIGATION_DPAD"/>
+		<field name="NAVIGATION_NONAV"/>
+		<field name="NAVIGATION_TRACKBALL"/>
+		<field name="NAVIGATION_UNDEFINED"/>
+		<field name="NAVIGATION_WHEEL"/>
+		<field name="ORIENTATION_LANDSCAPE"/>
+		<field name="ORIENTATION_PORTRAIT"/>
+		<field name="ORIENTATION_SQUARE" deprecated="16"/>
+		<field name="ORIENTATION_UNDEFINED"/>
+		<field name="SCREENLAYOUT_LAYOUTDIR_LTR" since="17"/>
+		<field name="SCREENLAYOUT_LAYOUTDIR_MASK" since="17"/>
+		<field name="SCREENLAYOUT_LAYOUTDIR_RTL" since="17"/>
+		<field name="SCREENLAYOUT_LAYOUTDIR_SHIFT" since="17"/>
+		<field name="SCREENLAYOUT_LAYOUTDIR_UNDEFINED" since="17"/>
+		<field name="SCREENLAYOUT_LONG_MASK" since="4"/>
+		<field name="SCREENLAYOUT_LONG_NO" since="4"/>
+		<field name="SCREENLAYOUT_LONG_UNDEFINED" since="4"/>
+		<field name="SCREENLAYOUT_LONG_YES" since="4"/>
+		<field name="SCREENLAYOUT_ROUND_MASK" since="23"/>
+		<field name="SCREENLAYOUT_ROUND_NO" since="23"/>
+		<field name="SCREENLAYOUT_ROUND_UNDEFINED" since="23"/>
+		<field name="SCREENLAYOUT_ROUND_YES" since="23"/>
+		<field name="SCREENLAYOUT_SIZE_LARGE" since="4"/>
+		<field name="SCREENLAYOUT_SIZE_MASK" since="4"/>
+		<field name="SCREENLAYOUT_SIZE_NORMAL" since="4"/>
+		<field name="SCREENLAYOUT_SIZE_SMALL" since="4"/>
+		<field name="SCREENLAYOUT_SIZE_UNDEFINED" since="4"/>
+		<field name="SCREENLAYOUT_SIZE_XLARGE" since="9"/>
+		<field name="SCREENLAYOUT_UNDEFINED" since="17"/>
+		<field name="SCREEN_HEIGHT_DP_UNDEFINED" since="13"/>
+		<field name="SCREEN_WIDTH_DP_UNDEFINED" since="13"/>
+		<field name="SMALLEST_SCREEN_WIDTH_DP_UNDEFINED" since="13"/>
+		<field name="TOUCHSCREEN_FINGER"/>
+		<field name="TOUCHSCREEN_NOTOUCH"/>
+		<field name="TOUCHSCREEN_STYLUS" deprecated="16"/>
+		<field name="TOUCHSCREEN_UNDEFINED"/>
+		<field name="UI_MODE_NIGHT_MASK" since="8"/>
+		<field name="UI_MODE_NIGHT_NO" since="8"/>
+		<field name="UI_MODE_NIGHT_UNDEFINED" since="8"/>
+		<field name="UI_MODE_NIGHT_YES" since="8"/>
+		<field name="UI_MODE_TYPE_APPLIANCE" since="16"/>
+		<field name="UI_MODE_TYPE_CAR" since="8"/>
+		<field name="UI_MODE_TYPE_DESK" since="8"/>
+		<field name="UI_MODE_TYPE_MASK" since="8"/>
+		<field name="UI_MODE_TYPE_NORMAL" since="8"/>
+		<field name="UI_MODE_TYPE_TELEVISION" since="13"/>
+		<field name="UI_MODE_TYPE_UNDEFINED" since="8"/>
+		<field name="UI_MODE_TYPE_VR_HEADSET" since="26"/>
+		<field name="UI_MODE_TYPE_WATCH" since="20"/>
+		<field name="colorMode" since="26"/>
+		<field name="densityDpi" since="17"/>
+		<field name="fontScale"/>
+		<field name="fontWeightAdjustment" since="31"/>
+		<field name="hardKeyboardHidden" since="3"/>
+		<field name="keyboard"/>
+		<field name="keyboardHidden"/>
+		<field name="locale" deprecated="24"/>
+		<field name="mcc"/>
+		<field name="mnc"/>
+		<field name="navigation"/>
+		<field name="navigationHidden" since="5"/>
+		<field name="orientation"/>
+		<field name="screenHeightDp" since="13"/>
+		<field name="screenLayout" since="4"/>
+		<field name="screenWidthDp" since="13"/>
+		<field name="smallestScreenWidthDp" since="13"/>
+		<field name="touchscreen"/>
+		<field name="uiMode" since="8"/>
+	</class>
+	<class name="android/content/res/ObbInfo" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="OBB_OVERLAY"/>
+		<field name="filename"/>
+		<field name="flags"/>
+		<field name="packageName"/>
+		<field name="version"/>
+	</class>
+	<class name="android/content/res/ObbScanner" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="getObbInfo(Ljava/lang/String;)Landroid/content/res/ObbInfo;"/>
+	</class>
+	<class name="android/content/res/Resources" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V" deprecated="25"/>
+		<method name="addLoaders([Landroid/content/res/loader/ResourcesLoader;)V" since="30"/>
+		<method name="finishPreloading()V"/>
+		<method name="flushLayoutCache()V"/>
+		<method name="getAnimation(I)Landroid/content/res/XmlResourceParser;"/>
+		<method name="getAssets()Landroid/content/res/AssetManager;"/>
+		<method name="getAttributeSetSourceResId(Landroid/util/AttributeSet;)I" since="29"/>
+		<method name="getBoolean(I)Z" since="3"/>
+		<method name="getColor(I)I" deprecated="23"/>
+		<method name="getColor(ILandroid/content/res/Resources$Theme;)I" since="23"/>
+		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;" deprecated="23"/>
+		<method name="getColorStateList(ILandroid/content/res/Resources$Theme;)Landroid/content/res/ColorStateList;" since="23"/>
+		<method name="getConfiguration()Landroid/content/res/Configuration;"/>
+		<method name="getDimension(I)F"/>
+		<method name="getDimensionPixelOffset(I)I"/>
+		<method name="getDimensionPixelSize(I)I"/>
+		<method name="getDisplayMetrics()Landroid/util/DisplayMetrics;"/>
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" deprecated="22"/>
+		<method name="getDrawable(ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="getDrawableForDensity(II)Landroid/graphics/drawable/Drawable;" since="15" deprecated="22"/>
+		<method name="getDrawableForDensity(IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="getFloat(I)F" since="29"/>
+		<method name="getFont(I)Landroid/graphics/Typeface;" since="26"/>
+		<method name="getFraction(III)F" since="3"/>
+		<method name="getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="getIntArray(I)[I"/>
+		<method name="getInteger(I)I"/>
+		<method name="getLayout(I)Landroid/content/res/XmlResourceParser;"/>
+		<method name="getMovie(I)Landroid/graphics/Movie;" deprecated="29"/>
+		<method name="getQuantityString(II)Ljava/lang/String;"/>
+		<method name="getQuantityString(II[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="getQuantityText(II)Ljava/lang/CharSequence;"/>
+		<method name="getResourceEntryName(I)Ljava/lang/String;"/>
+		<method name="getResourceName(I)Ljava/lang/String;"/>
+		<method name="getResourcePackageName(I)Ljava/lang/String;"/>
+		<method name="getResourceTypeName(I)Ljava/lang/String;"/>
+		<method name="getString(I)Ljava/lang/String;"/>
+		<method name="getString(I[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="getStringArray(I)[Ljava/lang/String;"/>
+		<method name="getSystem()Landroid/content/res/Resources;"/>
+		<method name="getText(I)Ljava/lang/CharSequence;"/>
+		<method name="getText(ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getTextArray(I)[Ljava/lang/CharSequence;"/>
+		<method name="getValue(ILandroid/util/TypedValue;Z)V"/>
+		<method name="getValue(Ljava/lang/String;Landroid/util/TypedValue;Z)V"/>
+		<method name="getValueForDensity(IILandroid/util/TypedValue;Z)V" since="15"/>
+		<method name="getXml(I)Landroid/content/res/XmlResourceParser;"/>
+		<method name="newTheme()Landroid/content/res/Resources$Theme;"/>
+		<method name="obtainAttributes(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;"/>
+		<method name="obtainTypedArray(I)Landroid/content/res/TypedArray;"/>
+		<method name="openRawResource(I)Ljava/io/InputStream;"/>
+		<method name="openRawResource(ILandroid/util/TypedValue;)Ljava/io/InputStream;" since="3"/>
+		<method name="openRawResourceFd(I)Landroid/content/res/AssetFileDescriptor;"/>
+		<method name="parseBundleExtra(Ljava/lang/String;Landroid/util/AttributeSet;Landroid/os/Bundle;)V" since="3"/>
+		<method name="parseBundleExtras(Landroid/content/res/XmlResourceParser;Landroid/os/Bundle;)V" since="3"/>
+		<method name="removeLoaders([Landroid/content/res/loader/ResourcesLoader;)V" since="30"/>
+		<method name="updateConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;)V" deprecated="25"/>
+		<field name="ID_NULL" since="29"/>
+	</class>
+	<class name="android/content/res/Resources$NotFoundException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V" since="24"/>
+	</class>
+	<class name="android/content/res/Resources$Theme" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="applyStyle(IZ)V"/>
+		<method name="dump(ILjava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getAttributeResolutionStack(III)[I" since="29"/>
+		<method name="getChangingConfigurations()I" since="23"/>
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="getExplicitStyle(Landroid/util/AttributeSet;)I" since="29"/>
+		<method name="getResources()Landroid/content/res/Resources;" since="21"/>
+		<method name="obtainStyledAttributes(I[I)Landroid/content/res/TypedArray;"/>
+		<method name="obtainStyledAttributes(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;"/>
+		<method name="obtainStyledAttributes([I)Landroid/content/res/TypedArray;"/>
+		<method name="rebase()V" since="29"/>
+		<method name="resolveAttribute(ILandroid/util/TypedValue;Z)Z"/>
+		<method name="setTo(Landroid/content/res/Resources$Theme;)V"/>
+	</class>
+	<class name="android/content/res/TypedArray" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="31"/>
+		<method name="getBoolean(IZ)Z"/>
+		<method name="getChangingConfigurations()I" since="21"/>
+		<method name="getColor(II)I"/>
+		<method name="getColorStateList(I)Landroid/content/res/ColorStateList;"/>
+		<method name="getDimension(IF)F"/>
+		<method name="getDimensionPixelOffset(II)I"/>
+		<method name="getDimensionPixelSize(II)I"/>
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getFloat(IF)F"/>
+		<method name="getFont(I)Landroid/graphics/Typeface;" since="26"/>
+		<method name="getFraction(IIIF)F"/>
+		<method name="getIndex(I)I"/>
+		<method name="getIndexCount()I"/>
+		<method name="getInt(II)I"/>
+		<method name="getInteger(II)I"/>
+		<method name="getLayoutDimension(II)I" since="3"/>
+		<method name="getLayoutDimension(ILjava/lang/String;)I"/>
+		<method name="getNonResourceString(I)Ljava/lang/String;"/>
+		<method name="getPositionDescription()Ljava/lang/String;"/>
+		<method name="getResourceId(II)I"/>
+		<method name="getResources()Landroid/content/res/Resources;"/>
+		<method name="getSourceResourceId(II)I" since="29"/>
+		<method name="getString(I)Ljava/lang/String;"/>
+		<method name="getText(I)Ljava/lang/CharSequence;"/>
+		<method name="getTextArray(I)[Ljava/lang/CharSequence;"/>
+		<method name="getType(I)I" since="21"/>
+		<method name="getValue(ILandroid/util/TypedValue;)Z"/>
+		<method name="hasValue(I)Z"/>
+		<method name="hasValueOrEmpty(I)Z" since="22"/>
+		<method name="length()I"/>
+		<method name="peekValue(I)Landroid/util/TypedValue;"/>
+		<method name="recycle()V"/>
+	</class>
+	<class name="android/content/res/XmlResourceParser" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/util/AttributeSet"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<implements name="org/xmlpull/v1/XmlPullParser"/>
+		<method name="close()V"/>
+	</class>
+	<class name="android/content/res/loader/AssetsProvider" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="loadAssetFd(Ljava/lang/String;I)Landroid/content/res/AssetFileDescriptor;"/>
+	</class>
+	<class name="android/content/res/loader/ResourcesLoader" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addProvider(Landroid/content/res/loader/ResourcesProvider;)V"/>
+		<method name="clearProviders()V"/>
+		<method name="getProviders()Ljava/util/List;"/>
+		<method name="removeProvider(Landroid/content/res/loader/ResourcesProvider;)V"/>
+		<method name="setProviders(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/content/res/loader/ResourcesProvider" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="empty(Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;"/>
+		<method name="loadFromApk(Landroid/os/ParcelFileDescriptor;)Landroid/content/res/loader/ResourcesProvider;"/>
+		<method name="loadFromApk(Landroid/os/ParcelFileDescriptor;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;"/>
+		<method name="loadFromDirectory(Ljava/lang/String;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;"/>
+		<method name="loadFromSplit(Landroid/content/Context;Ljava/lang/String;)Landroid/content/res/loader/ResourcesProvider;"/>
+		<method name="loadFromTable(Landroid/os/ParcelFileDescriptor;Landroid/content/res/loader/AssetsProvider;)Landroid/content/res/loader/ResourcesProvider;"/>
+	</class>
+	<class name="android/database/AbstractCursor" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/database/CrossProcessCursor"/>
+		<method name="&lt;init>()V"/>
+		<method name="checkPosition()V"/>
+		<method name="getNotificationUri()Landroid/net/Uri;" since="11"/>
+		<method name="getUpdatedField(I)Ljava/lang/Object;" deprecated="15"/>
+		<method name="isFieldUpdated(I)Z" deprecated="15"/>
+		<method name="onChange(Z)V"/>
+		<field name="mClosed" deprecated="23"/>
+		<field name="mContentResolver" deprecated="23"/>
+		<field name="mCurrentRowID" deprecated="16" removed="23"/>
+		<field name="mPos" deprecated="23"/>
+		<field name="mRowIdColumnIndex" deprecated="16" removed="23"/>
+		<field name="mUpdatedRows" deprecated="15" removed="23"/>
+	</class>
+	<class name="android/database/AbstractCursor$SelfContentObserver" since="1">
+		<extends name="android/database/ContentObserver"/>
+		<method name="&lt;init>(Landroid/database/AbstractCursor;)V"/>
+	</class>
+	<class name="android/database/AbstractWindowedCursor" since="1">
+		<extends name="android/database/AbstractCursor"/>
+		<method name="&lt;init>()V"/>
+		<method name="hasWindow()Z"/>
+		<method name="isBlob(I)Z" deprecated="15"/>
+		<method name="isFloat(I)Z" since="5" deprecated="15"/>
+		<method name="isLong(I)Z" since="5" deprecated="15"/>
+		<method name="isString(I)Z" since="5" deprecated="15"/>
+		<method name="setWindow(Landroid/database/CursorWindow;)V"/>
+		<field name="mWindow"/>
+	</class>
+	<class name="android/database/CharArrayBuffer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>([C)V"/>
+		<field name="data"/>
+		<field name="sizeCopied"/>
+	</class>
+	<class name="android/database/ContentObservable" since="1">
+		<extends name="android/database/Observable"/>
+		<method name="&lt;init>()V"/>
+		<method name="dispatchChange(Z)V" deprecated="16"/>
+		<method name="dispatchChange(ZLandroid/net/Uri;)V" since="16"/>
+		<method name="notifyChange(Z)V" deprecated="16"/>
+		<method name="registerObserver(Landroid/database/ContentObserver;)V"/>
+	</class>
+	<class name="android/database/ContentObserver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/os/Handler;)V"/>
+		<method name="deliverSelfNotifications()Z"/>
+		<method name="dispatchChange(Z)V" deprecated="16"/>
+		<method name="dispatchChange(ZLandroid/net/Uri;)V" since="16"/>
+		<method name="dispatchChange(ZLandroid/net/Uri;I)V" since="30"/>
+		<method name="dispatchChange(ZLjava/util/Collection;I)V" since="30"/>
+		<method name="onChange(Z)V"/>
+		<method name="onChange(ZLandroid/net/Uri;)V" since="16"/>
+		<method name="onChange(ZLandroid/net/Uri;I)V" since="30"/>
+		<method name="onChange(ZLjava/util/Collection;I)V" since="30"/>
+	</class>
+	<class name="android/database/CrossProcessCursor" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/database/Cursor"/>
+		<method name="fillWindow(ILandroid/database/CursorWindow;)V"/>
+		<method name="getWindow()Landroid/database/CursorWindow;"/>
+		<method name="onMove(II)Z"/>
+	</class>
+	<class name="android/database/CrossProcessCursorWrapper" since="15">
+		<extends name="android/database/CursorWrapper"/>
+		<implements name="android/database/CrossProcessCursor"/>
+		<method name="&lt;init>(Landroid/database/Cursor;)V"/>
+	</class>
+	<class name="android/database/Cursor" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="16"/>
+		<method name="close()V"/>
+		<method name="copyStringToBuffer(ILandroid/database/CharArrayBuffer;)V"/>
+		<method name="deactivate()V" deprecated="16"/>
+		<method name="getBlob(I)[B"/>
+		<method name="getColumnCount()I"/>
+		<method name="getColumnIndex(Ljava/lang/String;)I"/>
+		<method name="getColumnIndexOrThrow(Ljava/lang/String;)I"/>
+		<method name="getColumnName(I)Ljava/lang/String;"/>
+		<method name="getColumnNames()[Ljava/lang/String;"/>
+		<method name="getCount()I"/>
+		<method name="getDouble(I)D"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getFloat(I)F"/>
+		<method name="getInt(I)I"/>
+		<method name="getLong(I)J"/>
+		<method name="getNotificationUri()Landroid/net/Uri;" since="19"/>
+		<method name="getNotificationUris()Ljava/util/List;" since="29"/>
+		<method name="getPosition()I"/>
+		<method name="getShort(I)S"/>
+		<method name="getString(I)Ljava/lang/String;"/>
+		<method name="getType(I)I" since="11"/>
+		<method name="getWantsAllOnMoveCalls()Z"/>
+		<method name="isAfterLast()Z"/>
+		<method name="isBeforeFirst()Z"/>
+		<method name="isClosed()Z"/>
+		<method name="isFirst()Z"/>
+		<method name="isLast()Z"/>
+		<method name="isNull(I)Z"/>
+		<method name="move(I)Z"/>
+		<method name="moveToFirst()Z"/>
+		<method name="moveToLast()Z"/>
+		<method name="moveToNext()Z"/>
+		<method name="moveToPosition(I)Z"/>
+		<method name="moveToPrevious()Z"/>
+		<method name="registerContentObserver(Landroid/database/ContentObserver;)V"/>
+		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V"/>
+		<method name="requery()Z" deprecated="15"/>
+		<method name="respond(Landroid/os/Bundle;)Landroid/os/Bundle;"/>
+		<method name="setExtras(Landroid/os/Bundle;)V" since="23"/>
+		<method name="setNotificationUri(Landroid/content/ContentResolver;Landroid/net/Uri;)V"/>
+		<method name="setNotificationUris(Landroid/content/ContentResolver;Ljava/util/List;)V" since="29"/>
+		<method name="unregisterContentObserver(Landroid/database/ContentObserver;)V"/>
+		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V"/>
+		<field name="FIELD_TYPE_BLOB" since="11"/>
+		<field name="FIELD_TYPE_FLOAT" since="11"/>
+		<field name="FIELD_TYPE_INTEGER" since="11"/>
+		<field name="FIELD_TYPE_NULL" since="11"/>
+		<field name="FIELD_TYPE_STRING" since="11"/>
+	</class>
+	<class name="android/database/CursorIndexOutOfBoundsException" since="1">
+		<extends name="java/lang/IndexOutOfBoundsException"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/CursorJoiner" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Iterable"/>
+		<implements name="java/util/Iterator"/>
+		<method name="&lt;init>(Landroid/database/Cursor;[Ljava/lang/String;Landroid/database/Cursor;[Ljava/lang/String;)V"/>
+		<method name="next()Landroid/database/CursorJoiner$Result;"/>
+	</class>
+	<class name="android/database/CursorJoiner$Result" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/database/CursorJoiner$Result;"/>
+		<method name="values()[Landroid/database/CursorJoiner$Result;"/>
+		<field name="BOTH"/>
+		<field name="LEFT"/>
+		<field name="RIGHT"/>
+	</class>
+	<class name="android/database/CursorWindow" since="1">
+		<extends name="android/database/sqlite/SQLiteClosable"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="15"/>
+		<method name="&lt;init>(Ljava/lang/String;J)V" since="28"/>
+		<method name="&lt;init>(Z)V" deprecated="15"/>
+		<method name="allocRow()Z"/>
+		<method name="clear()V"/>
+		<method name="close()V" removed="16"/>
+		<method name="copyStringToBuffer(IILandroid/database/CharArrayBuffer;)V"/>
+		<method name="freeLastRow()V"/>
+		<method name="getBlob(II)[B"/>
+		<method name="getDouble(II)D"/>
+		<method name="getFloat(II)F"/>
+		<method name="getInt(II)I"/>
+		<method name="getLong(II)J"/>
+		<method name="getNumRows()I"/>
+		<method name="getShort(II)S"/>
+		<method name="getStartPosition()I"/>
+		<method name="getString(II)Ljava/lang/String;"/>
+		<method name="getType(II)I" since="11"/>
+		<method name="isBlob(II)Z" deprecated="15"/>
+		<method name="isFloat(II)Z" since="5" deprecated="15"/>
+		<method name="isLong(II)Z" since="5" deprecated="15"/>
+		<method name="isNull(II)Z" deprecated="15"/>
+		<method name="isString(II)Z" since="5" deprecated="15"/>
+		<method name="newFromParcel(Landroid/os/Parcel;)Landroid/database/CursorWindow;"/>
+		<method name="putBlob([BII)Z"/>
+		<method name="putDouble(DII)Z"/>
+		<method name="putLong(JII)Z"/>
+		<method name="putNull(II)Z"/>
+		<method name="putString(Ljava/lang/String;II)Z"/>
+		<method name="setNumColumns(I)Z"/>
+		<method name="setStartPosition(I)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/database/CursorWrapper" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/database/Cursor"/>
+		<method name="&lt;init>(Landroid/database/Cursor;)V"/>
+		<method name="getWrappedCursor()Landroid/database/Cursor;" since="11"/>
+	</class>
+	<class name="android/database/DataSetObservable" since="1">
+		<extends name="android/database/Observable"/>
+		<method name="&lt;init>()V"/>
+		<method name="notifyChanged()V"/>
+		<method name="notifyInvalidated()V"/>
+	</class>
+	<class name="android/database/DataSetObserver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onChanged()V"/>
+		<method name="onInvalidated()V"/>
+	</class>
+	<class name="android/database/DatabaseErrorHandler" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onCorruption(Landroid/database/sqlite/SQLiteDatabase;)V"/>
+	</class>
+	<class name="android/database/DatabaseUtils" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="appendEscapedSQLString(Ljava/lang/StringBuilder;Ljava/lang/String;)V"/>
+		<method name="appendSelectionArgs([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;" since="11"/>
+		<method name="appendValueToSql(Ljava/lang/StringBuilder;Ljava/lang/Object;)V"/>
+		<method name="bindObjectToProgram(Landroid/database/sqlite/SQLiteProgram;ILjava/lang/Object;)V"/>
+		<method name="blobFileDescriptorForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="11"/>
+		<method name="blobFileDescriptorForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;" since="11"/>
+		<method name="concatenateWhere(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
+		<method name="createDbFromSqlStatements(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="cursorDoubleToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
+		<method name="cursorDoubleToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
+		<method name="cursorDoubleToCursorValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
+		<method name="cursorFloatToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
+		<method name="cursorIntToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
+		<method name="cursorIntToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
+		<method name="cursorIntToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
+		<method name="cursorLongToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
+		<method name="cursorLongToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
+		<method name="cursorLongToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
+		<method name="cursorRowToContentValues(Landroid/database/Cursor;Landroid/content/ContentValues;)V"/>
+		<method name="cursorShortToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
+		<method name="cursorStringToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;)V"/>
+		<method name="cursorStringToContentValues(Landroid/database/Cursor;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;)V"/>
+		<method name="cursorStringToContentValuesIfPresent(Landroid/database/Cursor;Landroid/content/ContentValues;Ljava/lang/String;)V" since="8"/>
+		<method name="cursorStringToInsertHelper(Landroid/database/Cursor;Ljava/lang/String;Landroid/database/DatabaseUtils$InsertHelper;I)V"/>
+		<method name="dumpCurrentRow(Landroid/database/Cursor;)V"/>
+		<method name="dumpCurrentRow(Landroid/database/Cursor;Ljava/io/PrintStream;)V"/>
+		<method name="dumpCurrentRow(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V"/>
+		<method name="dumpCurrentRowToString(Landroid/database/Cursor;)Ljava/lang/String;"/>
+		<method name="dumpCursor(Landroid/database/Cursor;)V"/>
+		<method name="dumpCursor(Landroid/database/Cursor;Ljava/io/PrintStream;)V"/>
+		<method name="dumpCursor(Landroid/database/Cursor;Ljava/lang/StringBuilder;)V"/>
+		<method name="dumpCursorToString(Landroid/database/Cursor;)Ljava/lang/String;"/>
+		<method name="getCollationKey(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getHexCollationKey(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getSqlStatementType(Ljava/lang/String;)I" since="11"/>
+		<method name="longForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)J"/>
+		<method name="longForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)J"/>
+		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)J"/>
+		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;)J" since="11"/>
+		<method name="queryNumEntries(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)J" since="11"/>
+		<method name="readExceptionFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="readExceptionWithFileNotFoundExceptionFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="readExceptionWithOperationApplicationExceptionFromParcel(Landroid/os/Parcel;)V" since="5"/>
+		<method name="sqlEscapeString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="stringForQuery(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="stringForQuery(Landroid/database/sqlite/SQLiteStatement;[Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="writeExceptionToParcel(Landroid/os/Parcel;Ljava/lang/Exception;)V"/>
+		<field name="STATEMENT_ABORT" since="11"/>
+		<field name="STATEMENT_ATTACH" since="11"/>
+		<field name="STATEMENT_BEGIN" since="11"/>
+		<field name="STATEMENT_COMMIT" since="11"/>
+		<field name="STATEMENT_DDL" since="11"/>
+		<field name="STATEMENT_OTHER" since="11"/>
+		<field name="STATEMENT_PRAGMA" since="11"/>
+		<field name="STATEMENT_SELECT" since="11"/>
+		<field name="STATEMENT_UNPREPARED" since="11"/>
+		<field name="STATEMENT_UPDATE" since="11"/>
+	</class>
+	<class name="android/database/DatabaseUtils$InsertHelper" since="1" deprecated="17">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="bind(ID)V" deprecated="29"/>
+		<method name="bind(IF)V" deprecated="29"/>
+		<method name="bind(II)V" deprecated="29"/>
+		<method name="bind(IJ)V" deprecated="29"/>
+		<method name="bind(ILjava/lang/String;)V" deprecated="29"/>
+		<method name="bind(IZ)V" deprecated="29"/>
+		<method name="bind(I[B)V" deprecated="29"/>
+		<method name="bindNull(I)V" deprecated="29"/>
+		<method name="close()V" deprecated="29"/>
+		<method name="execute()J" deprecated="29"/>
+		<method name="getColumnIndex(Ljava/lang/String;)I" deprecated="29"/>
+		<method name="insert(Landroid/content/ContentValues;)J" deprecated="29"/>
+		<method name="prepareForInsert()V" deprecated="29"/>
+		<method name="prepareForReplace()V" deprecated="29"/>
+		<method name="replace(Landroid/content/ContentValues;)J" deprecated="29"/>
+		<field name="TABLE_INFO_PRAGMA_DEFAULT_INDEX" removed="17"/>
+	</class>
+	<class name="android/database/DefaultDatabaseErrorHandler" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/database/DatabaseErrorHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/database/MatrixCursor" since="1">
+		<extends name="android/database/AbstractCursor"/>
+		<method name="&lt;init>([Ljava/lang/String;)V"/>
+		<method name="&lt;init>([Ljava/lang/String;I)V"/>
+		<method name="addRow(Ljava/lang/Iterable;)V"/>
+		<method name="addRow([Ljava/lang/Object;)V"/>
+		<method name="newRow()Landroid/database/MatrixCursor$RowBuilder;"/>
+	</class>
+	<class name="android/database/MatrixCursor$RowBuilder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="add(Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;"/>
+		<method name="add(Ljava/lang/String;Ljava/lang/Object;)Landroid/database/MatrixCursor$RowBuilder;" since="19"/>
+	</class>
+	<class name="android/database/MergeCursor" since="1">
+		<extends name="android/database/AbstractCursor"/>
+		<method name="&lt;init>([Landroid/database/Cursor;)V"/>
+	</class>
+	<class name="android/database/Observable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="registerObserver(Ljava/lang/Object;)V"/>
+		<method name="unregisterAll()V"/>
+		<method name="unregisterObserver(Ljava/lang/Object;)V"/>
+		<field name="mObservers"/>
+	</class>
+	<class name="android/database/SQLException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16"/>
+	</class>
+	<class name="android/database/StaleDataException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteAbortException" since="1">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteAccessPermException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteBlobTooBigException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteCantOpenDatabaseException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteClosable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="16"/>
+		<method name="&lt;init>()V"/>
+		<method name="acquireReference()V"/>
+		<method name="onAllReferencesReleased()V"/>
+		<method name="onAllReferencesReleasedFromContainer()V" deprecated="16"/>
+		<method name="releaseReference()V"/>
+		<method name="releaseReferenceFromContainer()V" deprecated="16"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteConstraintException" since="1">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteCursor" since="1">
+		<extends name="android/database/AbstractWindowedCursor"/>
+		<method name="&lt;init>(Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" since="11"/>
+		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)V" deprecated="15"/>
+		<method name="getDatabase()Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="setFillWindowForwardOnly(Z)V" since="28"/>
+		<method name="setSelectionArguments([Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteCursorDriver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="cursorClosed()V"/>
+		<method name="cursorDeactivated()V"/>
+		<method name="cursorRequeried(Landroid/database/Cursor;)V"/>
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="setBindArguments([Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase" since="1">
+		<extends name="android/database/sqlite/SQLiteClosable"/>
+		<method name="beginTransaction()V"/>
+		<method name="beginTransactionNonExclusive()V" since="11"/>
+		<method name="beginTransactionWithListener(Landroid/database/sqlite/SQLiteTransactionListener;)V" since="5"/>
+		<method name="beginTransactionWithListenerNonExclusive(Landroid/database/sqlite/SQLiteTransactionListener;)V" since="11"/>
+		<method name="close()V" removed="16"/>
+		<method name="compileStatement(Ljava/lang/String;)Landroid/database/sqlite/SQLiteStatement;"/>
+		<method name="create(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="createInMemory(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;" since="27"/>
+		<method name="delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I"/>
+		<method name="deleteDatabase(Ljava/io/File;)Z" since="16"/>
+		<method name="disableWriteAheadLogging()V" since="16"/>
+		<method name="enableWriteAheadLogging()Z" since="11"/>
+		<method name="endTransaction()V"/>
+		<method name="execPerConnectionSQL(Ljava/lang/String;[Ljava/lang/Object;)V" since="30"/>
+		<method name="execSQL(Ljava/lang/String;)V"/>
+		<method name="execSQL(Ljava/lang/String;[Ljava/lang/Object;)V"/>
+		<method name="findEditTable(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getAttachedDbs()Ljava/util/List;" since="11"/>
+		<method name="getMaximumSize()J"/>
+		<method name="getPageSize()J"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getSyncedTables()Ljava/util/Map;" deprecated="15"/>
+		<method name="getVersion()I"/>
+		<method name="inTransaction()Z"/>
+		<method name="insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
+		<method name="insertOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
+		<method name="insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J" since="8"/>
+		<method name="isDatabaseIntegrityOk()Z" since="11"/>
+		<method name="isDbLockedByCurrentThread()Z"/>
+		<method name="isDbLockedByOtherThreads()Z" deprecated="16"/>
+		<method name="isOpen()Z"/>
+		<method name="isReadOnly()Z"/>
+		<method name="isWriteAheadLoggingEnabled()Z" since="16"/>
+		<method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+		<method name="markTableSyncable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+		<method name="needUpgrade(I)Z"/>
+		<method name="openDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$OpenParams;)Landroid/database/sqlite/SQLiteDatabase;" since="27"/>
+		<method name="openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="openDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11"/>
+		<method name="openOrCreateDatabase(Ljava/io/File;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="openOrCreateDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="openOrCreateDatabase(Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;" since="11"/>
+		<method name="query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="queryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="rawQuery(Ljava/lang/String;[Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="rawQueryWithFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="releaseMemory()I"/>
+		<method name="replace(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
+		<method name="replaceOrThrow(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J"/>
+		<method name="setCustomAggregateFunction(Ljava/lang/String;Ljava/util/function/BinaryOperator;)V" since="30"/>
+		<method name="setCustomScalarFunction(Ljava/lang/String;Ljava/util/function/UnaryOperator;)V" since="30"/>
+		<method name="setForeignKeyConstraintsEnabled(Z)V" since="16"/>
+		<method name="setLocale(Ljava/util/Locale;)V"/>
+		<method name="setLockingEnabled(Z)V" deprecated="16"/>
+		<method name="setMaxSqlCacheSize(I)V" since="11"/>
+		<method name="setMaximumSize(J)J"/>
+		<method name="setPageSize(J)V"/>
+		<method name="setTransactionSuccessful()V"/>
+		<method name="setVersion(I)V"/>
+		<method name="update(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I"/>
+		<method name="updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I" since="8"/>
+		<method name="validateSql(Ljava/lang/String;Landroid/os/CancellationSignal;)V" since="24"/>
+		<method name="yieldIfContended()Z" deprecated="15"/>
+		<method name="yieldIfContendedSafely()Z" since="3"/>
+		<method name="yieldIfContendedSafely(J)Z" since="5"/>
+		<field name="CONFLICT_ABORT" since="8"/>
+		<field name="CONFLICT_FAIL" since="8"/>
+		<field name="CONFLICT_IGNORE" since="8"/>
+		<field name="CONFLICT_NONE" since="8"/>
+		<field name="CONFLICT_REPLACE" since="8"/>
+		<field name="CONFLICT_ROLLBACK" since="8"/>
+		<field name="CREATE_IF_NECESSARY"/>
+		<field name="ENABLE_WRITE_AHEAD_LOGGING" since="16"/>
+		<field name="MAX_SQL_CACHE_SIZE" since="11"/>
+		<field name="NO_LOCALIZED_COLLATORS"/>
+		<field name="OPEN_READONLY"/>
+		<field name="OPEN_READWRITE"/>
+		<field name="SQLITE_MAX_LIKE_PATTERN_LENGTH"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase$CursorFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor;"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase$OpenParams" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="getCursorFactory()Landroid/database/sqlite/SQLiteDatabase$CursorFactory;"/>
+		<method name="getErrorHandler()Landroid/database/DatabaseErrorHandler;"/>
+		<method name="getIdleConnectionTimeout()J"/>
+		<method name="getJournalMode()Ljava/lang/String;" since="28"/>
+		<method name="getLookasideSlotCount()I"/>
+		<method name="getLookasideSlotSize()I"/>
+		<method name="getOpenFlags()I"/>
+		<method name="getSynchronousMode()Ljava/lang/String;" since="28"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabase$OpenParams$Builder" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V"/>
+		<method name="addOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
+		<method name="build()Landroid/database/sqlite/SQLiteDatabase$OpenParams;"/>
+		<method name="removeOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
+		<method name="setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
+		<method name="setErrorHandler(Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
+		<method name="setIdleConnectionTimeout(J)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" deprecated="29"/>
+		<method name="setJournalMode(Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" since="28"/>
+		<method name="setLookasideConfig(II)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
+		<method name="setOpenFlags(I)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;"/>
+		<method name="setSynchronousMode(Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase$OpenParams$Builder;" since="28"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabaseCorruptException" since="1">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDatabaseLockedException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDatatypeMismatchException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDiskIOException" since="1">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteDoneException" since="1">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteException" since="1">
+		<extends name="android/database/SQLException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteFullException" since="1">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteMisuseException" since="1">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteOpenHelper" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;ILandroid/database/DatabaseErrorHandler;)V" since="11"/>
+		<method name="close()V"/>
+		<method name="getDatabaseName()Ljava/lang/String;" since="14"/>
+		<method name="getReadableDatabase()Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="getWritableDatabase()Landroid/database/sqlite/SQLiteDatabase;"/>
+		<method name="onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V" since="16"/>
+		<method name="onCreate(Landroid/database/sqlite/SQLiteDatabase;)V"/>
+		<method name="onDowngrade(Landroid/database/sqlite/SQLiteDatabase;II)V" since="11"/>
+		<method name="onOpen(Landroid/database/sqlite/SQLiteDatabase;)V"/>
+		<method name="onUpgrade(Landroid/database/sqlite/SQLiteDatabase;II)V"/>
+		<method name="setIdleConnectionTimeout(J)V" since="27" deprecated="29"/>
+		<method name="setLookasideConfig(II)V" since="27"/>
+		<method name="setOpenParams(Landroid/database/sqlite/SQLiteDatabase$OpenParams;)V" since="28"/>
+		<method name="setWriteAheadLoggingEnabled(Z)V" since="16"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteOutOfMemoryException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteProgram" since="1">
+		<extends name="android/database/sqlite/SQLiteClosable"/>
+		<method name="bindAllArgsAsStrings([Ljava/lang/String;)V" since="11"/>
+		<method name="bindBlob(I[B)V"/>
+		<method name="bindDouble(ID)V"/>
+		<method name="bindLong(IJ)V"/>
+		<method name="bindNull(I)V"/>
+		<method name="bindString(ILjava/lang/String;)V"/>
+		<method name="clearBindings()V"/>
+		<method name="close()V" removed="16"/>
+		<method name="compile(Ljava/lang/String;Z)V" deprecated="15" removed="16"/>
+		<method name="getUniqueId()I" deprecated="15"/>
+		<method name="native_bind_blob(I[B)V" removed="16"/>
+		<method name="native_bind_double(ID)V" removed="16"/>
+		<method name="native_bind_long(IJ)V" removed="16"/>
+		<method name="native_bind_null(I)V" removed="16"/>
+		<method name="native_bind_string(ILjava/lang/String;)V" removed="16"/>
+		<method name="native_compile(Ljava/lang/String;)V" deprecated="15" removed="16"/>
+		<method name="native_finalize()V" deprecated="15" removed="16"/>
+		<field name="mDatabase" deprecated="15" removed="16"/>
+		<field name="nHandle" deprecated="15" removed="16"/>
+		<field name="nStatement" deprecated="15" removed="16"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteQuery" since="1">
+		<extends name="android/database/sqlite/SQLiteProgram"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteQueryBuilder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="appendColumns(Ljava/lang/StringBuilder;[Ljava/lang/String;)V"/>
+		<method name="appendWhere(Ljava/lang/CharSequence;)V"/>
+		<method name="appendWhereEscapeString(Ljava/lang/String;)V"/>
+		<method name="appendWhereStandalone(Ljava/lang/CharSequence;)V" since="29"/>
+		<method name="buildQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
+		<method name="buildQuery([Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="buildQueryString(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="buildUnionQuery([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="11"/>
+		<method name="buildUnionSubQuery(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Set;ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="delete(Landroid/database/sqlite/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)I" since="29"/>
+		<method name="getCursorFactory()Landroid/database/sqlite/SQLiteDatabase$CursorFactory;" since="29"/>
+		<method name="getProjectionGreylist()Ljava/util/Collection;" since="30"/>
+		<method name="getProjectionMap()Ljava/util/Map;" since="29"/>
+		<method name="getTables()Ljava/lang/String;"/>
+		<method name="insert(Landroid/database/sqlite/SQLiteDatabase;Landroid/content/ContentValues;)J" since="30"/>
+		<method name="isDistinct()Z" since="29"/>
+		<method name="isStrict()Z" since="29"/>
+		<method name="isStrictColumns()Z" since="30"/>
+		<method name="isStrictGrammar()Z" since="30"/>
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="query(Landroid/database/sqlite/SQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="16"/>
+		<method name="setCursorFactory(Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)V"/>
+		<method name="setDistinct(Z)V"/>
+		<method name="setProjectionGreylist(Ljava/util/Collection;)V" since="30"/>
+		<method name="setProjectionMap(Ljava/util/Map;)V"/>
+		<method name="setStrict(Z)V" since="14"/>
+		<method name="setStrictColumns(Z)V" since="30"/>
+		<method name="setStrictGrammar(Z)V" since="30"/>
+		<method name="setTables(Ljava/lang/String;)V"/>
+		<method name="update(Landroid/database/sqlite/SQLiteDatabase;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;)I" since="29"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteReadOnlyDatabaseException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteStatement" since="1">
+		<extends name="android/database/sqlite/SQLiteProgram"/>
+		<method name="execute()V"/>
+		<method name="executeInsert()J"/>
+		<method name="executeUpdateDelete()I" since="11"/>
+		<method name="simpleQueryForBlobFileDescriptor()Landroid/os/ParcelFileDescriptor;" since="11"/>
+		<method name="simpleQueryForLong()J"/>
+		<method name="simpleQueryForString()Ljava/lang/String;"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteTableLockedException" since="11">
+		<extends name="android/database/sqlite/SQLiteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/database/sqlite/SQLiteTransactionListener" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="onBegin()V"/>
+		<method name="onCommit()V"/>
+		<method name="onRollback()V"/>
+	</class>
+	<class name="android/drm/DrmConvertedStatus" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I[BI)V" deprecated="30"/>
+		<field name="STATUS_ERROR" deprecated="30"/>
+		<field name="STATUS_INPUTDATA_ERROR" deprecated="30"/>
+		<field name="STATUS_OK" deprecated="30"/>
+		<field name="convertedData" deprecated="30"/>
+		<field name="offset" deprecated="30"/>
+		<field name="statusCode" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmErrorEvent" since="11" deprecated="30">
+		<extends name="android/drm/DrmEvent"/>
+		<method name="&lt;init>(IILjava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(IILjava/lang/String;Ljava/util/HashMap;)V" since="12" deprecated="30"/>
+		<field name="TYPE_ACQUIRE_DRM_INFO_FAILED" since="12" deprecated="30"/>
+		<field name="TYPE_NOT_SUPPORTED" deprecated="30"/>
+		<field name="TYPE_NO_INTERNET_CONNECTION" deprecated="30"/>
+		<field name="TYPE_OUT_OF_MEMORY" deprecated="30"/>
+		<field name="TYPE_PROCESS_DRM_INFO_FAILED" deprecated="30"/>
+		<field name="TYPE_REMOVE_ALL_RIGHTS_FAILED" deprecated="30"/>
+		<field name="TYPE_RIGHTS_NOT_INSTALLED" deprecated="30"/>
+		<field name="TYPE_RIGHTS_RENEWAL_NOT_ALLOWED" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmEvent" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IILjava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(IILjava/lang/String;Ljava/util/HashMap;)V" since="12" deprecated="30"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;" since="12" deprecated="30"/>
+		<method name="getMessage()Ljava/lang/String;" deprecated="30"/>
+		<method name="getType()I" deprecated="30"/>
+		<method name="getUniqueId()I" deprecated="30"/>
+		<field name="DRM_INFO_OBJECT" since="12" deprecated="30"/>
+		<field name="DRM_INFO_STATUS_OBJECT" deprecated="30"/>
+		<field name="TYPE_ALL_RIGHTS_REMOVED" deprecated="30"/>
+		<field name="TYPE_DRM_INFO_PROCESSED" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmInfo" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(I[BLjava/lang/String;)V" deprecated="30"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" deprecated="30"/>
+		<method name="getData()[B" deprecated="30"/>
+		<method name="getInfoType()I" deprecated="30"/>
+		<method name="getMimeType()Ljava/lang/String;" deprecated="30"/>
+		<method name="iterator()Ljava/util/Iterator;" deprecated="30"/>
+		<method name="keyIterator()Ljava/util/Iterator;" deprecated="30"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmInfoEvent" since="11" deprecated="30">
+		<extends name="android/drm/DrmEvent"/>
+		<method name="&lt;init>(IILjava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(IILjava/lang/String;Ljava/util/HashMap;)V" since="12" deprecated="30"/>
+		<field name="TYPE_ACCOUNT_ALREADY_REGISTERED" deprecated="30"/>
+		<field name="TYPE_ALREADY_REGISTERED_BY_ANOTHER_ACCOUNT" deprecated="30"/>
+		<field name="TYPE_REMOVE_RIGHTS" deprecated="30"/>
+		<field name="TYPE_RIGHTS_INSTALLED" deprecated="30"/>
+		<field name="TYPE_RIGHTS_REMOVED" since="12" deprecated="30"/>
+		<field name="TYPE_WAIT_FOR_RIGHTS" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmInfoRequest" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILjava/lang/String;)V" deprecated="30"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" deprecated="30"/>
+		<method name="getInfoType()I" deprecated="30"/>
+		<method name="getMimeType()Ljava/lang/String;" deprecated="30"/>
+		<method name="iterator()Ljava/util/Iterator;" deprecated="30"/>
+		<method name="keyIterator()Ljava/util/Iterator;" deprecated="30"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="30"/>
+		<field name="ACCOUNT_ID" deprecated="30"/>
+		<field name="SUBSCRIPTION_ID" deprecated="30"/>
+		<field name="TYPE_REGISTRATION_INFO" deprecated="30"/>
+		<field name="TYPE_RIGHTS_ACQUISITION_INFO" deprecated="30"/>
+		<field name="TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO" deprecated="30"/>
+		<field name="TYPE_UNREGISTRATION_INFO" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmInfoStatus" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IILandroid/drm/ProcessedData;Ljava/lang/String;)V" deprecated="30"/>
+		<field name="STATUS_ERROR" deprecated="30"/>
+		<field name="STATUS_OK" deprecated="30"/>
+		<field name="data" deprecated="30"/>
+		<field name="infoType" deprecated="30"/>
+		<field name="mimeType" deprecated="30"/>
+		<field name="statusCode" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmManagerClient" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="24"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="30"/>
+		<method name="acquireDrmInfo(Landroid/drm/DrmInfoRequest;)Landroid/drm/DrmInfo;" deprecated="30"/>
+		<method name="acquireRights(Landroid/drm/DrmInfoRequest;)I" deprecated="30"/>
+		<method name="canHandle(Landroid/net/Uri;Ljava/lang/String;)Z" deprecated="30"/>
+		<method name="canHandle(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="30"/>
+		<method name="checkRightsStatus(Landroid/net/Uri;)I" deprecated="30"/>
+		<method name="checkRightsStatus(Landroid/net/Uri;I)I" deprecated="30"/>
+		<method name="checkRightsStatus(Ljava/lang/String;)I" deprecated="30"/>
+		<method name="checkRightsStatus(Ljava/lang/String;I)I" deprecated="30"/>
+		<method name="closeConvertSession(I)Landroid/drm/DrmConvertedStatus;" deprecated="30"/>
+		<method name="convertData(I[B)Landroid/drm/DrmConvertedStatus;" deprecated="30"/>
+		<method name="getAvailableDrmEngines()[Ljava/lang/String;" deprecated="30"/>
+		<method name="getAvailableDrmSupportInfo()Ljava/util/Collection;" since="30" deprecated="30"/>
+		<method name="getConstraints(Landroid/net/Uri;I)Landroid/content/ContentValues;" deprecated="30"/>
+		<method name="getConstraints(Ljava/lang/String;I)Landroid/content/ContentValues;" deprecated="30"/>
+		<method name="getDrmObjectType(Landroid/net/Uri;Ljava/lang/String;)I" deprecated="30"/>
+		<method name="getDrmObjectType(Ljava/lang/String;Ljava/lang/String;)I" deprecated="30"/>
+		<method name="getMetadata(Landroid/net/Uri;)Landroid/content/ContentValues;" deprecated="30"/>
+		<method name="getMetadata(Ljava/lang/String;)Landroid/content/ContentValues;" deprecated="30"/>
+		<method name="getOriginalMimeType(Landroid/net/Uri;)Ljava/lang/String;" deprecated="30"/>
+		<method name="getOriginalMimeType(Ljava/lang/String;)Ljava/lang/String;" deprecated="30"/>
+		<method name="openConvertSession(Ljava/lang/String;)I" deprecated="30"/>
+		<method name="processDrmInfo(Landroid/drm/DrmInfo;)I" deprecated="30"/>
+		<method name="release()V" since="16" deprecated="24"/>
+		<method name="removeAllRights()I" deprecated="30"/>
+		<method name="removeRights(Landroid/net/Uri;)I" deprecated="30"/>
+		<method name="removeRights(Ljava/lang/String;)I" deprecated="30"/>
+		<method name="saveRights(Landroid/drm/DrmRights;Ljava/lang/String;Ljava/lang/String;)I" deprecated="30"/>
+		<method name="setOnErrorListener(Landroid/drm/DrmManagerClient$OnErrorListener;)V" deprecated="30"/>
+		<method name="setOnEventListener(Landroid/drm/DrmManagerClient$OnEventListener;)V" deprecated="30"/>
+		<method name="setOnInfoListener(Landroid/drm/DrmManagerClient$OnInfoListener;)V" deprecated="30"/>
+		<field name="ERROR_NONE" deprecated="30"/>
+		<field name="ERROR_UNKNOWN" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmManagerClient$OnErrorListener" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="onError(Landroid/drm/DrmManagerClient;Landroid/drm/DrmErrorEvent;)V" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmManagerClient$OnEventListener" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="onEvent(Landroid/drm/DrmManagerClient;Landroid/drm/DrmEvent;)V" since="12" deprecated="30"/>
+		<method name="onEvent(Landroid/drm/DrmManagerClient;Landroid/drm/DrmEvent;Ljava/util/HashMap;)V" removed="12"/>
+	</class>
+	<class name="android/drm/DrmManagerClient$OnInfoListener" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="onInfo(Landroid/drm/DrmManagerClient;Landroid/drm/DrmInfoEvent;)V" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmRights" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/drm/ProcessedData;Ljava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+		<method name="getAccountId()Ljava/lang/String;" deprecated="30"/>
+		<method name="getData()[B" deprecated="30"/>
+		<method name="getMimeType()Ljava/lang/String;" deprecated="30"/>
+		<method name="getSubscriptionId()Ljava/lang/String;" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmStore" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="16"/>
+	</class>
+	<class name="android/drm/DrmStore$Action" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="16"/>
+		<field name="DEFAULT" deprecated="30"/>
+		<field name="DISPLAY" deprecated="30"/>
+		<field name="EXECUTE" deprecated="30"/>
+		<field name="OUTPUT" deprecated="30"/>
+		<field name="PLAY" deprecated="30"/>
+		<field name="PREVIEW" deprecated="30"/>
+		<field name="RINGTONE" deprecated="30"/>
+		<field name="TRANSFER" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmStore$ConstraintsColumns" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<field name="EXTENDED_METADATA" deprecated="30"/>
+		<field name="LICENSE_AVAILABLE_TIME" deprecated="30"/>
+		<field name="LICENSE_EXPIRY_TIME" deprecated="30"/>
+		<field name="LICENSE_START_TIME" deprecated="30"/>
+		<field name="MAX_REPEAT_COUNT" deprecated="30"/>
+		<field name="REMAINING_REPEAT_COUNT" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmStore$DrmObjectType" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="16"/>
+		<field name="CONTENT" deprecated="30"/>
+		<field name="RIGHTS_OBJECT" deprecated="30"/>
+		<field name="TRIGGER_OBJECT" deprecated="30"/>
+		<field name="UNKNOWN" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmStore$Playback" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="16"/>
+		<field name="PAUSE" deprecated="30"/>
+		<field name="RESUME" deprecated="30"/>
+		<field name="START" deprecated="30"/>
+		<field name="STOP" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmStore$RightsStatus" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="16"/>
+		<field name="RIGHTS_EXPIRED" deprecated="30"/>
+		<field name="RIGHTS_INVALID" deprecated="30"/>
+		<field name="RIGHTS_NOT_ACQUIRED" deprecated="30"/>
+		<field name="RIGHTS_VALID" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmSupportInfo" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="addFileSuffix(Ljava/lang/String;)V" deprecated="30"/>
+		<method name="addMimeType(Ljava/lang/String;)V" deprecated="30"/>
+		<method name="getDescriprition()Ljava/lang/String;" deprecated="16"/>
+		<method name="getDescription()Ljava/lang/String;" since="16" deprecated="30"/>
+		<method name="getFileSuffixIterator()Ljava/util/Iterator;" deprecated="30"/>
+		<method name="getMimeTypeIterator()Ljava/util/Iterator;" deprecated="30"/>
+		<method name="setDescription(Ljava/lang/String;)V" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmUtils" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="getExtendedMetadataParser([B)Landroid/drm/DrmUtils$ExtendedMetadataParser;" deprecated="30"/>
+	</class>
+	<class name="android/drm/DrmUtils$ExtendedMetadataParser" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/String;" deprecated="30"/>
+		<method name="iterator()Ljava/util/Iterator;" deprecated="30"/>
+		<method name="keyIterator()Ljava/util/Iterator;" deprecated="30"/>
+	</class>
+	<class name="android/drm/ProcessedData" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="getAccountId()Ljava/lang/String;" deprecated="30"/>
+		<method name="getData()[B" deprecated="30"/>
+		<method name="getSubscriptionId()Ljava/lang/String;" deprecated="30"/>
+	</class>
+	<class name="android/gesture/Gesture" since="4">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="addStroke(Landroid/gesture/GestureStroke;)V"/>
+		<method name="getBoundingBox()Landroid/graphics/RectF;"/>
+		<method name="getID()J"/>
+		<method name="getLength()F"/>
+		<method name="getStrokes()Ljava/util/ArrayList;"/>
+		<method name="getStrokesCount()I"/>
+		<method name="toBitmap(IIII)Landroid/graphics/Bitmap;"/>
+		<method name="toBitmap(IIIII)Landroid/graphics/Bitmap;"/>
+		<method name="toPath()Landroid/graphics/Path;"/>
+		<method name="toPath(IIII)Landroid/graphics/Path;"/>
+		<method name="toPath(Landroid/graphics/Path;)Landroid/graphics/Path;"/>
+		<method name="toPath(Landroid/graphics/Path;IIII)Landroid/graphics/Path;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/gesture/GestureLibraries" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="fromFile(Ljava/io/File;)Landroid/gesture/GestureLibrary;"/>
+		<method name="fromFile(Ljava/lang/String;)Landroid/gesture/GestureLibrary;"/>
+		<method name="fromFileDescriptor(Landroid/os/ParcelFileDescriptor;)Landroid/gesture/GestureLibrary;" since="30"/>
+		<method name="fromPrivateFile(Landroid/content/Context;Ljava/lang/String;)Landroid/gesture/GestureLibrary;"/>
+		<method name="fromRawResource(Landroid/content/Context;I)Landroid/gesture/GestureLibrary;"/>
+	</class>
+	<class name="android/gesture/GestureLibrary" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
+		<method name="getGestureEntries()Ljava/util/Set;"/>
+		<method name="getGestures(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="getOrientationStyle()I"/>
+		<method name="getSequenceType()I"/>
+		<method name="isReadOnly()Z"/>
+		<method name="load()Z"/>
+		<method name="recognize(Landroid/gesture/Gesture;)Ljava/util/ArrayList;"/>
+		<method name="removeEntry(Ljava/lang/String;)V"/>
+		<method name="removeGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
+		<method name="save()Z"/>
+		<method name="setOrientationStyle(I)V"/>
+		<method name="setSequenceType(I)V"/>
+		<field name="mStore"/>
+	</class>
+	<class name="android/gesture/GestureOverlayView" since="4">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="addOnGestureListener(Landroid/gesture/GestureOverlayView$OnGestureListener;)V"/>
+		<method name="addOnGesturePerformedListener(Landroid/gesture/GestureOverlayView$OnGesturePerformedListener;)V"/>
+		<method name="addOnGesturingListener(Landroid/gesture/GestureOverlayView$OnGesturingListener;)V"/>
+		<method name="cancelClearAnimation()V"/>
+		<method name="cancelGesture()V"/>
+		<method name="clear(Z)V"/>
+		<method name="getCurrentStroke()Ljava/util/ArrayList;"/>
+		<method name="getFadeOffset()J"/>
+		<method name="getGesture()Landroid/gesture/Gesture;"/>
+		<method name="getGestureColor()I"/>
+		<method name="getGesturePath()Landroid/graphics/Path;"/>
+		<method name="getGesturePath(Landroid/graphics/Path;)Landroid/graphics/Path;"/>
+		<method name="getGestureStrokeAngleThreshold()F"/>
+		<method name="getGestureStrokeLengthThreshold()F"/>
+		<method name="getGestureStrokeSquarenessTreshold()F"/>
+		<method name="getGestureStrokeType()I"/>
+		<method name="getGestureStrokeWidth()F"/>
+		<method name="getOrientation()I"/>
+		<method name="getUncertainGestureColor()I"/>
+		<method name="isEventsInterceptionEnabled()Z"/>
+		<method name="isFadeEnabled()Z"/>
+		<method name="isGestureVisible()Z"/>
+		<method name="isGesturing()Z"/>
+		<method name="removeAllOnGestureListeners()V"/>
+		<method name="removeAllOnGesturePerformedListeners()V"/>
+		<method name="removeAllOnGesturingListeners()V"/>
+		<method name="removeOnGestureListener(Landroid/gesture/GestureOverlayView$OnGestureListener;)V"/>
+		<method name="removeOnGesturePerformedListener(Landroid/gesture/GestureOverlayView$OnGesturePerformedListener;)V"/>
+		<method name="removeOnGesturingListener(Landroid/gesture/GestureOverlayView$OnGesturingListener;)V"/>
+		<method name="setEventsInterceptionEnabled(Z)V"/>
+		<method name="setFadeEnabled(Z)V"/>
+		<method name="setFadeOffset(J)V"/>
+		<method name="setGesture(Landroid/gesture/Gesture;)V"/>
+		<method name="setGestureColor(I)V"/>
+		<method name="setGestureStrokeAngleThreshold(F)V"/>
+		<method name="setGestureStrokeLengthThreshold(F)V"/>
+		<method name="setGestureStrokeSquarenessTreshold(F)V"/>
+		<method name="setGestureStrokeType(I)V"/>
+		<method name="setGestureStrokeWidth(F)V"/>
+		<method name="setGestureVisible(Z)V"/>
+		<method name="setOrientation(I)V"/>
+		<method name="setUncertainGestureColor(I)V"/>
+		<field name="GESTURE_STROKE_TYPE_MULTIPLE"/>
+		<field name="GESTURE_STROKE_TYPE_SINGLE"/>
+		<field name="ORIENTATION_HORIZONTAL"/>
+		<field name="ORIENTATION_VERTICAL"/>
+	</class>
+	<class name="android/gesture/GestureOverlayView$OnGestureListener" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="onGesture(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
+		<method name="onGestureCancelled(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
+		<method name="onGestureEnded(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
+		<method name="onGestureStarted(Landroid/gesture/GestureOverlayView;Landroid/view/MotionEvent;)V"/>
+	</class>
+	<class name="android/gesture/GestureOverlayView$OnGesturePerformedListener" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="onGesturePerformed(Landroid/gesture/GestureOverlayView;Landroid/gesture/Gesture;)V"/>
+	</class>
+	<class name="android/gesture/GestureOverlayView$OnGesturingListener" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="onGesturingEnded(Landroid/gesture/GestureOverlayView;)V"/>
+		<method name="onGesturingStarted(Landroid/gesture/GestureOverlayView;)V"/>
+	</class>
+	<class name="android/gesture/GesturePoint" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(FFJ)V"/>
+		<field name="timestamp"/>
+		<field name="x"/>
+		<field name="y"/>
+	</class>
+	<class name="android/gesture/GestureStore" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
+		<method name="getGestureEntries()Ljava/util/Set;"/>
+		<method name="getGestures(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="getOrientationStyle()I"/>
+		<method name="getSequenceType()I"/>
+		<method name="hasChanged()Z"/>
+		<method name="load(Ljava/io/InputStream;)V"/>
+		<method name="load(Ljava/io/InputStream;Z)V"/>
+		<method name="recognize(Landroid/gesture/Gesture;)Ljava/util/ArrayList;"/>
+		<method name="removeEntry(Ljava/lang/String;)V"/>
+		<method name="removeGesture(Ljava/lang/String;Landroid/gesture/Gesture;)V"/>
+		<method name="save(Ljava/io/OutputStream;)V"/>
+		<method name="save(Ljava/io/OutputStream;Z)V"/>
+		<method name="setOrientationStyle(I)V"/>
+		<method name="setSequenceType(I)V"/>
+		<field name="ORIENTATION_INVARIANT"/>
+		<field name="ORIENTATION_SENSITIVE"/>
+		<field name="SEQUENCE_INVARIANT"/>
+		<field name="SEQUENCE_SENSITIVE"/>
+	</class>
+	<class name="android/gesture/GestureStroke" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/ArrayList;)V"/>
+		<method name="clearPath()V"/>
+		<method name="computeOrientedBoundingBox()Landroid/gesture/OrientedBoundingBox;"/>
+		<method name="getPath()Landroid/graphics/Path;"/>
+		<method name="toPath(FFI)Landroid/graphics/Path;"/>
+		<field name="boundingBox"/>
+		<field name="length"/>
+		<field name="points"/>
+	</class>
+	<class name="android/gesture/GestureUtils" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="computeOrientedBoundingBox(Ljava/util/ArrayList;)Landroid/gesture/OrientedBoundingBox;"/>
+		<method name="computeOrientedBoundingBox([F)Landroid/gesture/OrientedBoundingBox;"/>
+		<method name="spatialSampling(Landroid/gesture/Gesture;I)[F"/>
+		<method name="spatialSampling(Landroid/gesture/Gesture;IZ)[F"/>
+		<method name="temporalSampling(Landroid/gesture/GestureStroke;I)[F"/>
+	</class>
+	<class name="android/gesture/OrientedBoundingBox" since="4">
+		<extends name="java/lang/Object"/>
+		<field name="centerX"/>
+		<field name="centerY"/>
+		<field name="height"/>
+		<field name="orientation"/>
+		<field name="squareness"/>
+		<field name="width"/>
+	</class>
+	<class name="android/gesture/Prediction" since="4">
+		<extends name="java/lang/Object"/>
+		<field name="name"/>
+		<field name="score"/>
+	</class>
+	<class name="android/graphics/AvoidXfermode" since="1" deprecated="16" removed="24">
+		<extends name="android/graphics/Xfermode"/>
+		<method name="&lt;init>(IILandroid/graphics/AvoidXfermode$Mode;)V"/>
+	</class>
+	<class name="android/graphics/AvoidXfermode$Mode" since="1" removed="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/AvoidXfermode$Mode;"/>
+		<method name="values()[Landroid/graphics/AvoidXfermode$Mode;"/>
+		<field name="AVOID"/>
+		<field name="TARGET"/>
+	</class>
+	<class name="android/graphics/Bitmap" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="asShared()Landroid/graphics/Bitmap;" since="31"/>
+		<method name="compress(Landroid/graphics/Bitmap$CompressFormat;ILjava/io/OutputStream;)Z"/>
+		<method name="copy(Landroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;"/>
+		<method name="copyPixelsFromBuffer(Ljava/nio/Buffer;)V" since="3"/>
+		<method name="copyPixelsToBuffer(Ljava/nio/Buffer;)V"/>
+		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"/>
+		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;" since="26"/>
+		<method name="createBitmap(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="26"/>
+		<method name="createBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;"/>
+		<method name="createBitmap(Landroid/graphics/Bitmap;IIII)Landroid/graphics/Bitmap;"/>
+		<method name="createBitmap(Landroid/graphics/Bitmap;IIIILandroid/graphics/Matrix;Z)Landroid/graphics/Bitmap;"/>
+		<method name="createBitmap(Landroid/graphics/Picture;)Landroid/graphics/Bitmap;" since="28"/>
+		<method name="createBitmap(Landroid/graphics/Picture;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="28"/>
+		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17"/>
+		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;Z)Landroid/graphics/Bitmap;" since="26"/>
+		<method name="createBitmap(Landroid/util/DisplayMetrics;IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="26"/>
+		<method name="createBitmap(Landroid/util/DisplayMetrics;[IIIIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17"/>
+		<method name="createBitmap(Landroid/util/DisplayMetrics;[IIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;" since="17"/>
+		<method name="createBitmap([IIIIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"/>
+		<method name="createBitmap([IIILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"/>
+		<method name="createScaledBitmap(Landroid/graphics/Bitmap;IIZ)Landroid/graphics/Bitmap;"/>
+		<method name="eraseColor(I)V"/>
+		<method name="eraseColor(J)V" since="29"/>
+		<method name="extractAlpha()Landroid/graphics/Bitmap;"/>
+		<method name="extractAlpha(Landroid/graphics/Paint;[I)Landroid/graphics/Bitmap;"/>
+		<method name="getAllocationByteCount()I" since="19"/>
+		<method name="getByteCount()I" since="12"/>
+		<method name="getColor(II)Landroid/graphics/Color;" since="29"/>
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;" since="26"/>
+		<method name="getConfig()Landroid/graphics/Bitmap$Config;"/>
+		<method name="getDensity()I" since="4"/>
+		<method name="getGenerationId()I" since="12"/>
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" since="31"/>
+		<method name="getHeight()I"/>
+		<method name="getNinePatchChunk()[B"/>
+		<method name="getPixel(II)I"/>
+		<method name="getPixels([IIIIIII)V"/>
+		<method name="getRowBytes()I"/>
+		<method name="getScaledHeight(I)I" since="4"/>
+		<method name="getScaledHeight(Landroid/graphics/Canvas;)I" since="4"/>
+		<method name="getScaledHeight(Landroid/util/DisplayMetrics;)I" since="4"/>
+		<method name="getScaledWidth(I)I" since="4"/>
+		<method name="getScaledWidth(Landroid/graphics/Canvas;)I" since="4"/>
+		<method name="getScaledWidth(Landroid/util/DisplayMetrics;)I" since="4"/>
+		<method name="getWidth()I"/>
+		<method name="hasAlpha()Z"/>
+		<method name="hasMipMap()Z" since="17"/>
+		<method name="isMutable()Z"/>
+		<method name="isPremultiplied()Z" since="17"/>
+		<method name="isRecycled()Z"/>
+		<method name="prepareToDraw()V" since="4"/>
+		<method name="reconfigure(IILandroid/graphics/Bitmap$Config;)V" since="19"/>
+		<method name="recycle()V"/>
+		<method name="sameAs(Landroid/graphics/Bitmap;)Z" since="12"/>
+		<method name="setColorSpace(Landroid/graphics/ColorSpace;)V" since="29"/>
+		<method name="setConfig(Landroid/graphics/Bitmap$Config;)V" since="19"/>
+		<method name="setDensity(I)V" since="4"/>
+		<method name="setHasAlpha(Z)V" since="12"/>
+		<method name="setHasMipMap(Z)V" since="17"/>
+		<method name="setHeight(I)V" since="19"/>
+		<method name="setPixel(III)V"/>
+		<method name="setPixels([IIIIIII)V"/>
+		<method name="setPremultiplied(Z)V" since="19"/>
+		<method name="setWidth(I)V" since="19"/>
+		<method name="wrapHardwareBuffer(Landroid/hardware/HardwareBuffer;Landroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;" since="29"/>
+		<field name="CREATOR"/>
+		<field name="DENSITY_NONE" since="4"/>
+	</class>
+	<class name="android/graphics/Bitmap$CompressFormat" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$CompressFormat;"/>
+		<method name="values()[Landroid/graphics/Bitmap$CompressFormat;"/>
+		<field name="JPEG"/>
+		<field name="PNG"/>
+		<field name="WEBP" since="14" deprecated="30"/>
+		<field name="WEBP_LOSSLESS" since="30"/>
+		<field name="WEBP_LOSSY" since="30"/>
+	</class>
+	<class name="android/graphics/Bitmap$Config" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;"/>
+		<method name="values()[Landroid/graphics/Bitmap$Config;"/>
+		<field name="ALPHA_8"/>
+		<field name="ARGB_4444" deprecated="29"/>
+		<field name="ARGB_8888"/>
+		<field name="HARDWARE" since="26"/>
+		<field name="RGBA_F16" since="26"/>
+		<field name="RGB_565"/>
+	</class>
+	<class name="android/graphics/BitmapFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="decodeByteArray([BII)Landroid/graphics/Bitmap;"/>
+		<method name="decodeByteArray([BIILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeFile(Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeFileDescriptor(Ljava/io/FileDescriptor;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeFileDescriptor(Ljava/io/FileDescriptor;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeResource(Landroid/content/res/Resources;I)Landroid/graphics/Bitmap;"/>
+		<method name="decodeResource(Landroid/content/res/Resources;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="4"/>
+		<method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeStream(Ljava/io/InputStream;Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
+	</class>
+	<class name="android/graphics/BitmapFactory$Options" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="requestCancelDecode()V" deprecated="24"/>
+		<field name="inBitmap" since="11"/>
+		<field name="inDensity" since="4"/>
+		<field name="inDither" deprecated="24"/>
+		<field name="inInputShareable" since="4" deprecated="21"/>
+		<field name="inJustDecodeBounds"/>
+		<field name="inMutable" since="11"/>
+		<field name="inPreferQualityOverSpeed" since="10" deprecated="24"/>
+		<field name="inPreferredColorSpace" since="26"/>
+		<field name="inPreferredConfig"/>
+		<field name="inPremultiplied" since="19"/>
+		<field name="inPurgeable" since="4" deprecated="21"/>
+		<field name="inSampleSize"/>
+		<field name="inScaled" since="4"/>
+		<field name="inScreenDensity" since="4"/>
+		<field name="inTargetDensity" since="4"/>
+		<field name="inTempStorage"/>
+		<field name="mCancel" deprecated="24"/>
+		<field name="outColorSpace" since="26"/>
+		<field name="outConfig" since="26"/>
+		<field name="outHeight"/>
+		<field name="outMimeType"/>
+		<field name="outWidth"/>
+	</class>
+	<class name="android/graphics/BitmapRegionDecoder" since="10">
+		<extends name="java/lang/Object"/>
+		<method name="decodeRegion(Landroid/graphics/Rect;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;"/>
+		<method name="getHeight()I"/>
+		<method name="getWidth()I"/>
+		<method name="isRecycled()Z"/>
+		<method name="newInstance(Landroid/os/ParcelFileDescriptor;)Landroid/graphics/BitmapRegionDecoder;" since="31"/>
+		<method name="newInstance(Ljava/io/FileDescriptor;Z)Landroid/graphics/BitmapRegionDecoder;" deprecated="31"/>
+		<method name="newInstance(Ljava/io/InputStream;)Landroid/graphics/BitmapRegionDecoder;" since="31"/>
+		<method name="newInstance(Ljava/io/InputStream;Z)Landroid/graphics/BitmapRegionDecoder;" deprecated="31"/>
+		<method name="newInstance(Ljava/lang/String;)Landroid/graphics/BitmapRegionDecoder;" since="31"/>
+		<method name="newInstance(Ljava/lang/String;Z)Landroid/graphics/BitmapRegionDecoder;" deprecated="31"/>
+		<method name="newInstance([BII)Landroid/graphics/BitmapRegionDecoder;" since="31"/>
+		<method name="newInstance([BIIZ)Landroid/graphics/BitmapRegionDecoder;" deprecated="31"/>
+		<method name="recycle()V"/>
+	</class>
+	<class name="android/graphics/BitmapShader" since="1">
+		<extends name="android/graphics/Shader"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V"/>
+	</class>
+	<class name="android/graphics/BlendMode" since="29">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/BlendMode;"/>
+		<method name="values()[Landroid/graphics/BlendMode;"/>
+		<field name="CLEAR"/>
+		<field name="COLOR"/>
+		<field name="COLOR_BURN"/>
+		<field name="COLOR_DODGE"/>
+		<field name="DARKEN"/>
+		<field name="DIFFERENCE"/>
+		<field name="DST"/>
+		<field name="DST_ATOP"/>
+		<field name="DST_IN"/>
+		<field name="DST_OUT"/>
+		<field name="DST_OVER"/>
+		<field name="EXCLUSION"/>
+		<field name="HARD_LIGHT"/>
+		<field name="HUE"/>
+		<field name="LIGHTEN"/>
+		<field name="LUMINOSITY"/>
+		<field name="MODULATE"/>
+		<field name="MULTIPLY"/>
+		<field name="OVERLAY"/>
+		<field name="PLUS"/>
+		<field name="SATURATION"/>
+		<field name="SCREEN"/>
+		<field name="SOFT_LIGHT"/>
+		<field name="SRC"/>
+		<field name="SRC_ATOP"/>
+		<field name="SRC_IN"/>
+		<field name="SRC_OUT"/>
+		<field name="SRC_OVER"/>
+		<field name="XOR"/>
+	</class>
+	<class name="android/graphics/BlendModeColorFilter" since="29">
+		<extends name="android/graphics/ColorFilter"/>
+		<method name="&lt;init>(ILandroid/graphics/BlendMode;)V"/>
+		<method name="getColor()I"/>
+		<method name="getMode()Landroid/graphics/BlendMode;"/>
+	</class>
+	<class name="android/graphics/BlurMaskFilter" since="1">
+		<extends name="android/graphics/MaskFilter"/>
+		<method name="&lt;init>(FLandroid/graphics/BlurMaskFilter$Blur;)V"/>
+	</class>
+	<class name="android/graphics/BlurMaskFilter$Blur" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/BlurMaskFilter$Blur;"/>
+		<method name="values()[Landroid/graphics/BlurMaskFilter$Blur;"/>
+		<field name="INNER"/>
+		<field name="NORMAL"/>
+		<field name="OUTER"/>
+		<field name="SOLID"/>
+	</class>
+	<class name="android/graphics/Camera" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="applyToCanvas(Landroid/graphics/Canvas;)V"/>
+		<method name="dotWithNormal(FFF)F"/>
+		<method name="getLocationX()F" since="16"/>
+		<method name="getLocationY()F" since="16"/>
+		<method name="getLocationZ()F" since="16"/>
+		<method name="getMatrix(Landroid/graphics/Matrix;)V"/>
+		<method name="restore()V"/>
+		<method name="rotate(FFF)V" since="12"/>
+		<method name="rotateX(F)V"/>
+		<method name="rotateY(F)V"/>
+		<method name="rotateZ(F)V"/>
+		<method name="save()V"/>
+		<method name="setLocation(FFF)V" since="12"/>
+		<method name="translate(FFF)V"/>
+	</class>
+	<class name="android/graphics/Canvas" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;)V"/>
+		<method name="&lt;init>(Ljavax/microedition/khronos/opengles/GL;)V" removed="11"/>
+		<method name="clipOutPath(Landroid/graphics/Path;)Z" since="26"/>
+		<method name="clipOutRect(FFFF)Z" since="26"/>
+		<method name="clipOutRect(IIII)Z" since="26"/>
+		<method name="clipOutRect(Landroid/graphics/Rect;)Z" since="26"/>
+		<method name="clipOutRect(Landroid/graphics/RectF;)Z" since="26"/>
+		<method name="clipPath(Landroid/graphics/Path;)Z"/>
+		<method name="clipPath(Landroid/graphics/Path;Landroid/graphics/Region$Op;)Z" deprecated="26"/>
+		<method name="clipRect(FFFF)Z"/>
+		<method name="clipRect(FFFFLandroid/graphics/Region$Op;)Z" deprecated="26"/>
+		<method name="clipRect(IIII)Z"/>
+		<method name="clipRect(Landroid/graphics/Rect;)Z"/>
+		<method name="clipRect(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z" deprecated="26"/>
+		<method name="clipRect(Landroid/graphics/RectF;)Z"/>
+		<method name="clipRect(Landroid/graphics/RectF;Landroid/graphics/Region$Op;)Z" deprecated="26"/>
+		<method name="clipRegion(Landroid/graphics/Region;)Z" deprecated="21" removed="26"/>
+		<method name="clipRegion(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z" deprecated="21" removed="26"/>
+		<method name="concat(Landroid/graphics/Matrix;)V"/>
+		<method name="disableZ()V" since="29"/>
+		<method name="drawARGB(IIII)V"/>
+		<method name="drawArc(FFFFFFZLandroid/graphics/Paint;)V" since="21"/>
+		<method name="drawArc(Landroid/graphics/RectF;FFZLandroid/graphics/Paint;)V"/>
+		<method name="drawBitmap(Landroid/graphics/Bitmap;FFLandroid/graphics/Paint;)V"/>
+		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Matrix;Landroid/graphics/Paint;)V"/>
+		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
+		<method name="drawBitmap(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
+		<method name="drawBitmap([IIIFFIIZLandroid/graphics/Paint;)V" since="3" deprecated="21"/>
+		<method name="drawBitmap([IIIIIIIZLandroid/graphics/Paint;)V" deprecated="21"/>
+		<method name="drawBitmapMesh(Landroid/graphics/Bitmap;II[FI[IILandroid/graphics/Paint;)V"/>
+		<method name="drawCircle(FFFLandroid/graphics/Paint;)V"/>
+		<method name="drawColor(I)V"/>
+		<method name="drawColor(ILandroid/graphics/BlendMode;)V" since="29"/>
+		<method name="drawColor(ILandroid/graphics/PorterDuff$Mode;)V"/>
+		<method name="drawColor(J)V" since="29"/>
+		<method name="drawColor(JLandroid/graphics/BlendMode;)V" since="29"/>
+		<method name="drawDoubleRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/RectF;FFLandroid/graphics/Paint;)V" since="29"/>
+		<method name="drawDoubleRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/RectF;[FLandroid/graphics/Paint;)V" since="29"/>
+		<method name="drawGlyphs([II[FIILandroid/graphics/fonts/Font;Landroid/graphics/Paint;)V" since="31"/>
+		<method name="drawLine(FFFFLandroid/graphics/Paint;)V"/>
+		<method name="drawLines([FIILandroid/graphics/Paint;)V"/>
+		<method name="drawLines([FLandroid/graphics/Paint;)V"/>
+		<method name="drawOval(FFFFLandroid/graphics/Paint;)V" since="21"/>
+		<method name="drawOval(Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
+		<method name="drawPaint(Landroid/graphics/Paint;)V"/>
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V" since="31"/>
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/RectF;Landroid/graphics/Paint;)V" since="31"/>
+		<method name="drawPath(Landroid/graphics/Path;Landroid/graphics/Paint;)V"/>
+		<method name="drawPicture(Landroid/graphics/Picture;)V"/>
+		<method name="drawPicture(Landroid/graphics/Picture;Landroid/graphics/Rect;)V"/>
+		<method name="drawPicture(Landroid/graphics/Picture;Landroid/graphics/RectF;)V"/>
+		<method name="drawPoint(FFLandroid/graphics/Paint;)V"/>
+		<method name="drawPoints([FIILandroid/graphics/Paint;)V"/>
+		<method name="drawPoints([FLandroid/graphics/Paint;)V"/>
+		<method name="drawPosText(Ljava/lang/String;[FLandroid/graphics/Paint;)V" deprecated="16"/>
+		<method name="drawPosText([CII[FLandroid/graphics/Paint;)V" deprecated="16"/>
+		<method name="drawRGB(III)V"/>
+		<method name="drawRect(FFFFLandroid/graphics/Paint;)V"/>
+		<method name="drawRect(Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
+		<method name="drawRect(Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
+		<method name="drawRenderNode(Landroid/graphics/RenderNode;)V" since="29"/>
+		<method name="drawRoundRect(FFFFFFLandroid/graphics/Paint;)V" since="21"/>
+		<method name="drawRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Paint;)V"/>
+		<method name="drawText(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V"/>
+		<method name="drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V"/>
+		<method name="drawText(Ljava/lang/String;IIFFLandroid/graphics/Paint;)V"/>
+		<method name="drawText([CIIFFLandroid/graphics/Paint;)V"/>
+		<method name="drawTextOnPath(Ljava/lang/String;Landroid/graphics/Path;FFLandroid/graphics/Paint;)V"/>
+		<method name="drawTextOnPath([CIILandroid/graphics/Path;FFLandroid/graphics/Paint;)V"/>
+		<method name="drawTextRun(Landroid/graphics/text/MeasuredText;IIIIFFZLandroid/graphics/Paint;)V" since="29"/>
+		<method name="drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V" since="23"/>
+		<method name="drawTextRun([CIIIIFFZLandroid/graphics/Paint;)V" since="23"/>
+		<method name="drawVertices(Landroid/graphics/Canvas$VertexMode;I[FI[FI[II[SIILandroid/graphics/Paint;)V"/>
+		<method name="enableZ()V" since="29"/>
+		<method name="freeGlCaches()V" removed="11"/>
+		<method name="getClipBounds()Landroid/graphics/Rect;"/>
+		<method name="getClipBounds(Landroid/graphics/Rect;)Z"/>
+		<method name="getDensity()I" since="4"/>
+		<method name="getDrawFilter()Landroid/graphics/DrawFilter;"/>
+		<method name="getGL()Ljavax/microedition/khronos/opengles/GL;" removed="11"/>
+		<method name="getHeight()I"/>
+		<method name="getMatrix()Landroid/graphics/Matrix;" deprecated="16"/>
+		<method name="getMatrix(Landroid/graphics/Matrix;)V" deprecated="16"/>
+		<method name="getMaximumBitmapHeight()I" since="14"/>
+		<method name="getMaximumBitmapWidth()I" since="14"/>
+		<method name="getSaveCount()I"/>
+		<method name="getWidth()I"/>
+		<method name="isHardwareAccelerated()Z" since="11"/>
+		<method name="isOpaque()Z"/>
+		<method name="quickReject(FFFF)Z" since="30"/>
+		<method name="quickReject(FFFFLandroid/graphics/Canvas$EdgeType;)Z" deprecated="30"/>
+		<method name="quickReject(Landroid/graphics/Path;)Z" since="30"/>
+		<method name="quickReject(Landroid/graphics/Path;Landroid/graphics/Canvas$EdgeType;)Z" deprecated="30"/>
+		<method name="quickReject(Landroid/graphics/RectF;)Z" since="30"/>
+		<method name="quickReject(Landroid/graphics/RectF;Landroid/graphics/Canvas$EdgeType;)Z" deprecated="30"/>
+		<method name="restore()V"/>
+		<method name="restoreToCount(I)V"/>
+		<method name="rotate(F)V"/>
+		<method name="rotate(FFF)V"/>
+		<method name="save()I"/>
+		<method name="save(I)I" deprecated="26" removed="28"/>
+		<method name="saveLayer(FFFFLandroid/graphics/Paint;)I" since="21"/>
+		<method name="saveLayer(FFFFLandroid/graphics/Paint;I)I" deprecated="26"/>
+		<method name="saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;)I" since="21"/>
+		<method name="saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I" deprecated="26"/>
+		<method name="saveLayerAlpha(FFFFI)I" since="21"/>
+		<method name="saveLayerAlpha(FFFFII)I" deprecated="26"/>
+		<method name="saveLayerAlpha(Landroid/graphics/RectF;I)I" since="21"/>
+		<method name="saveLayerAlpha(Landroid/graphics/RectF;II)I" deprecated="26"/>
+		<method name="scale(FF)V"/>
+		<method name="scale(FFFF)V"/>
+		<method name="setBitmap(Landroid/graphics/Bitmap;)V"/>
+		<method name="setDensity(I)V" since="4"/>
+		<method name="setDrawFilter(Landroid/graphics/DrawFilter;)V"/>
+		<method name="setMatrix(Landroid/graphics/Matrix;)V"/>
+		<method name="setViewport(II)V" removed="11"/>
+		<method name="skew(FF)V"/>
+		<method name="translate(FF)V"/>
+		<field name="ALL_SAVE_FLAG"/>
+		<field name="CLIP_SAVE_FLAG" deprecated="26" removed="28"/>
+		<field name="CLIP_TO_LAYER_SAVE_FLAG" deprecated="26" removed="28"/>
+		<field name="FULL_COLOR_LAYER_SAVE_FLAG" deprecated="26" removed="28"/>
+		<field name="HAS_ALPHA_LAYER_SAVE_FLAG" deprecated="26" removed="28"/>
+		<field name="MATRIX_SAVE_FLAG" deprecated="26" removed="28"/>
+	</class>
+	<class name="android/graphics/Canvas$EdgeType" since="1" deprecated="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Canvas$EdgeType;"/>
+		<method name="values()[Landroid/graphics/Canvas$EdgeType;"/>
+		<field name="AA" deprecated="30"/>
+		<field name="BW" deprecated="30"/>
+	</class>
+	<class name="android/graphics/Canvas$VertexMode" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Canvas$VertexMode;"/>
+		<method name="values()[Landroid/graphics/Canvas$VertexMode;"/>
+		<field name="TRIANGLES"/>
+		<field name="TRIANGLE_FAN"/>
+		<field name="TRIANGLE_STRIP"/>
+	</class>
+	<class name="android/graphics/Color" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="HSVToColor(I[F)I"/>
+		<method name="HSVToColor([F)I"/>
+		<method name="RGBToHSV(III[F)V"/>
+		<method name="alpha()F" since="26"/>
+		<method name="alpha(I)I"/>
+		<method name="alpha(J)F" since="26"/>
+		<method name="argb(FFFF)I" since="26"/>
+		<method name="argb(IIII)I"/>
+		<method name="blue()F" since="26"/>
+		<method name="blue(I)I"/>
+		<method name="blue(J)F" since="26"/>
+		<method name="colorSpace(J)Landroid/graphics/ColorSpace;" since="26"/>
+		<method name="colorToHSV(I[F)V"/>
+		<method name="convert(FFFFLandroid/graphics/ColorSpace$Connector;)J" since="26"/>
+		<method name="convert(FFFFLandroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;)J" since="26"/>
+		<method name="convert(ILandroid/graphics/ColorSpace;)J" since="26"/>
+		<method name="convert(JLandroid/graphics/ColorSpace$Connector;)J" since="26"/>
+		<method name="convert(JLandroid/graphics/ColorSpace;)J" since="26"/>
+		<method name="convert(Landroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26"/>
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;" since="26"/>
+		<method name="getComponent(I)F" since="26"/>
+		<method name="getComponentCount()I" since="26"/>
+		<method name="getComponents()[F" since="26"/>
+		<method name="getComponents([F)[F" since="26"/>
+		<method name="getModel()Landroid/graphics/ColorSpace$Model;" since="26"/>
+		<method name="green()F" since="26"/>
+		<method name="green(I)I"/>
+		<method name="green(J)F" since="26"/>
+		<method name="isInColorSpace(JLandroid/graphics/ColorSpace;)Z" since="26"/>
+		<method name="isSrgb()Z" since="26"/>
+		<method name="isSrgb(J)Z" since="26"/>
+		<method name="isWideGamut()Z" since="26"/>
+		<method name="isWideGamut(J)Z" since="26"/>
+		<method name="luminance()F" since="26"/>
+		<method name="luminance(I)F" since="24"/>
+		<method name="luminance(J)F" since="26"/>
+		<method name="pack()J" since="26"/>
+		<method name="pack(FFF)J" since="26"/>
+		<method name="pack(FFFF)J" since="26"/>
+		<method name="pack(FFFFLandroid/graphics/ColorSpace;)J" since="26"/>
+		<method name="pack(I)J" since="26"/>
+		<method name="parseColor(Ljava/lang/String;)I"/>
+		<method name="red()F" since="26"/>
+		<method name="red(I)I"/>
+		<method name="red(J)F" since="26"/>
+		<method name="rgb(FFF)I" since="26"/>
+		<method name="rgb(III)I"/>
+		<method name="toArgb()I" since="26"/>
+		<method name="toArgb(J)I" since="26"/>
+		<method name="valueOf(FFF)Landroid/graphics/Color;" since="26"/>
+		<method name="valueOf(FFFF)Landroid/graphics/Color;" since="26"/>
+		<method name="valueOf(FFFFLandroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26"/>
+		<method name="valueOf(I)Landroid/graphics/Color;" since="26"/>
+		<method name="valueOf(J)Landroid/graphics/Color;" since="26"/>
+		<method name="valueOf([FLandroid/graphics/ColorSpace;)Landroid/graphics/Color;" since="26"/>
+		<field name="BLACK"/>
+		<field name="BLUE"/>
+		<field name="CYAN"/>
+		<field name="DKGRAY"/>
+		<field name="GRAY"/>
+		<field name="GREEN"/>
+		<field name="LTGRAY"/>
+		<field name="MAGENTA"/>
+		<field name="RED"/>
+		<field name="TRANSPARENT"/>
+		<field name="WHITE"/>
+		<field name="YELLOW"/>
+	</class>
+	<class name="android/graphics/ColorFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="26"/>
+	</class>
+	<class name="android/graphics/ColorMatrix" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/ColorMatrix;)V"/>
+		<method name="&lt;init>([F)V"/>
+		<method name="getArray()[F"/>
+		<method name="postConcat(Landroid/graphics/ColorMatrix;)V"/>
+		<method name="preConcat(Landroid/graphics/ColorMatrix;)V"/>
+		<method name="reset()V"/>
+		<method name="set(Landroid/graphics/ColorMatrix;)V"/>
+		<method name="set([F)V"/>
+		<method name="setConcat(Landroid/graphics/ColorMatrix;Landroid/graphics/ColorMatrix;)V"/>
+		<method name="setRGB2YUV()V"/>
+		<method name="setRotate(IF)V"/>
+		<method name="setSaturation(F)V"/>
+		<method name="setScale(FFFF)V"/>
+		<method name="setYUV2RGB()V"/>
+	</class>
+	<class name="android/graphics/ColorMatrixColorFilter" since="1">
+		<extends name="android/graphics/ColorFilter"/>
+		<method name="&lt;init>(Landroid/graphics/ColorMatrix;)V"/>
+		<method name="&lt;init>([F)V"/>
+		<method name="getColorMatrix(Landroid/graphics/ColorMatrix;)V" since="26"/>
+	</class>
+	<class name="android/graphics/ColorSpace" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="adapt(Landroid/graphics/ColorSpace;[F)Landroid/graphics/ColorSpace;"/>
+		<method name="adapt(Landroid/graphics/ColorSpace;[FLandroid/graphics/ColorSpace$Adaptation;)Landroid/graphics/ColorSpace;"/>
+		<method name="cctToXyz(I)[F" since="31"/>
+		<method name="chromaticAdaptation(Landroid/graphics/ColorSpace$Adaptation;[F[F)[F" since="31"/>
+		<method name="connect(Landroid/graphics/ColorSpace;)Landroid/graphics/ColorSpace$Connector;"/>
+		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)Landroid/graphics/ColorSpace$Connector;"/>
+		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;)Landroid/graphics/ColorSpace$Connector;"/>
+		<method name="connect(Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace;Landroid/graphics/ColorSpace$RenderIntent;)Landroid/graphics/ColorSpace$Connector;"/>
+		<method name="fromXyz(FFF)[F"/>
+		<method name="fromXyz([F)[F"/>
+		<method name="get(Landroid/graphics/ColorSpace$Named;)Landroid/graphics/ColorSpace;"/>
+		<method name="getComponentCount()I"/>
+		<method name="getId()I"/>
+		<method name="getMaxValue(I)F"/>
+		<method name="getMinValue(I)F"/>
+		<method name="getModel()Landroid/graphics/ColorSpace$Model;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="isSrgb()Z"/>
+		<method name="isWideGamut()Z"/>
+		<method name="match([FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)Landroid/graphics/ColorSpace;"/>
+		<method name="toXyz(FFF)[F"/>
+		<method name="toXyz([F)[F"/>
+		<field name="ILLUMINANT_A"/>
+		<field name="ILLUMINANT_B"/>
+		<field name="ILLUMINANT_C"/>
+		<field name="ILLUMINANT_D50"/>
+		<field name="ILLUMINANT_D55"/>
+		<field name="ILLUMINANT_D60"/>
+		<field name="ILLUMINANT_D65"/>
+		<field name="ILLUMINANT_D75"/>
+		<field name="ILLUMINANT_E"/>
+		<field name="MAX_ID"/>
+		<field name="MIN_ID"/>
+	</class>
+	<class name="android/graphics/ColorSpace$Adaptation" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Adaptation;"/>
+		<method name="values()[Landroid/graphics/ColorSpace$Adaptation;"/>
+		<field name="BRADFORD"/>
+		<field name="CIECAT02"/>
+		<field name="VON_KRIES"/>
+	</class>
+	<class name="android/graphics/ColorSpace$Connector" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getDestination()Landroid/graphics/ColorSpace;"/>
+		<method name="getRenderIntent()Landroid/graphics/ColorSpace$RenderIntent;"/>
+		<method name="getSource()Landroid/graphics/ColorSpace;"/>
+		<method name="transform(FFF)[F"/>
+		<method name="transform([F)[F"/>
+	</class>
+	<class name="android/graphics/ColorSpace$Model" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="getComponentCount()I"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Model;"/>
+		<method name="values()[Landroid/graphics/ColorSpace$Model;"/>
+		<field name="CMYK"/>
+		<field name="LAB"/>
+		<field name="RGB"/>
+		<field name="XYZ"/>
+	</class>
+	<class name="android/graphics/ColorSpace$Named" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$Named;"/>
+		<method name="values()[Landroid/graphics/ColorSpace$Named;"/>
+		<field name="ACES"/>
+		<field name="ACESCG"/>
+		<field name="ADOBE_RGB"/>
+		<field name="BT2020"/>
+		<field name="BT709"/>
+		<field name="CIE_LAB"/>
+		<field name="CIE_XYZ"/>
+		<field name="DCI_P3"/>
+		<field name="DISPLAY_P3"/>
+		<field name="EXTENDED_SRGB"/>
+		<field name="LINEAR_EXTENDED_SRGB"/>
+		<field name="LINEAR_SRGB"/>
+		<field name="NTSC_1953"/>
+		<field name="PRO_PHOTO_RGB"/>
+		<field name="SMPTE_C"/>
+		<field name="SRGB"/>
+	</class>
+	<class name="android/graphics/ColorSpace$RenderIntent" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/ColorSpace$RenderIntent;"/>
+		<method name="values()[Landroid/graphics/ColorSpace$RenderIntent;"/>
+		<field name="ABSOLUTE"/>
+		<field name="PERCEPTUAL"/>
+		<field name="RELATIVE"/>
+		<field name="SATURATION"/>
+	</class>
+	<class name="android/graphics/ColorSpace$Rgb" since="26">
+		<extends name="android/graphics/ColorSpace"/>
+		<method name="&lt;init>(Ljava/lang/String;[FD)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[F[FD)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[F[FLandroid/graphics/ColorSpace$Rgb$TransferParameters;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[F[FLjava/util/function/DoubleUnaryOperator;Ljava/util/function/DoubleUnaryOperator;FF)V"/>
+		<method name="fromLinear(FFF)[F"/>
+		<method name="fromLinear([F)[F"/>
+		<method name="getEotf()Ljava/util/function/DoubleUnaryOperator;"/>
+		<method name="getInverseTransform()[F"/>
+		<method name="getInverseTransform([F)[F"/>
+		<method name="getOetf()Ljava/util/function/DoubleUnaryOperator;"/>
+		<method name="getPrimaries()[F"/>
+		<method name="getPrimaries([F)[F"/>
+		<method name="getTransferParameters()Landroid/graphics/ColorSpace$Rgb$TransferParameters;"/>
+		<method name="getTransform()[F"/>
+		<method name="getTransform([F)[F"/>
+		<method name="getWhitePoint()[F"/>
+		<method name="getWhitePoint([F)[F"/>
+		<method name="toLinear(FFF)[F"/>
+		<method name="toLinear([F)[F"/>
+	</class>
+	<class name="android/graphics/ColorSpace$Rgb$TransferParameters" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(DDDDD)V"/>
+		<method name="&lt;init>(DDDDDDD)V"/>
+		<field name="a"/>
+		<field name="b"/>
+		<field name="c"/>
+		<field name="d"/>
+		<field name="e"/>
+		<field name="f"/>
+		<field name="g"/>
+	</class>
+	<class name="android/graphics/ComposePathEffect" since="1">
+		<extends name="android/graphics/PathEffect"/>
+		<method name="&lt;init>(Landroid/graphics/PathEffect;Landroid/graphics/PathEffect;)V"/>
+	</class>
+	<class name="android/graphics/ComposeShader" since="1">
+		<extends name="android/graphics/Shader"/>
+		<method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/PorterDuff$Mode;)V"/>
+		<method name="&lt;init>(Landroid/graphics/Shader;Landroid/graphics/Shader;Landroid/graphics/Xfermode;)V" deprecated="29"/>
+	</class>
+	<class name="android/graphics/CornerPathEffect" since="1">
+		<extends name="android/graphics/PathEffect"/>
+		<method name="&lt;init>(F)V"/>
+	</class>
+	<class name="android/graphics/DashPathEffect" since="1">
+		<extends name="android/graphics/PathEffect"/>
+		<method name="&lt;init>([FF)V"/>
+	</class>
+	<class name="android/graphics/DiscretePathEffect" since="1">
+		<extends name="android/graphics/PathEffect"/>
+		<method name="&lt;init>(FF)V"/>
+	</class>
+	<class name="android/graphics/DrawFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/graphics/EmbossMaskFilter" since="1">
+		<extends name="android/graphics/MaskFilter"/>
+		<method name="&lt;init>([FFFF)V" deprecated="28"/>
+	</class>
+	<class name="android/graphics/HardwareRenderer" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="clearContent()V"/>
+		<method name="createRenderRequest()Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+		<method name="destroy()V"/>
+		<method name="isOpaque()Z"/>
+		<method name="notifyFramePending()V"/>
+		<method name="setContentRoot(Landroid/graphics/RenderNode;)V"/>
+		<method name="setLightSourceAlpha(FF)V"/>
+		<method name="setLightSourceGeometry(FFFF)V"/>
+		<method name="setName(Ljava/lang/String;)V"/>
+		<method name="setOpaque(Z)V"/>
+		<method name="setSurface(Landroid/view/Surface;)V"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+		<field name="SYNC_CONTEXT_IS_STOPPED"/>
+		<field name="SYNC_FRAME_DROPPED"/>
+		<field name="SYNC_LOST_SURFACE_REWARD_IF_FOUND"/>
+		<field name="SYNC_OK"/>
+		<field name="SYNC_REDRAW_REQUESTED"/>
+	</class>
+	<class name="android/graphics/HardwareRenderer$FrameRenderRequest" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="setFrameCommitCallback(Ljava/util/concurrent/Executor;Ljava/lang/Runnable;)Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+		<method name="setVsyncTime(J)Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+		<method name="setWaitForPresent(Z)Landroid/graphics/HardwareRenderer$FrameRenderRequest;"/>
+		<method name="syncAndDraw()I"/>
+	</class>
+	<class name="android/graphics/ImageDecoder" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="createSource(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/ImageDecoder$Source;"/>
+		<method name="createSource(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/ImageDecoder$Source;"/>
+		<method name="createSource(Landroid/content/res/Resources;I)Landroid/graphics/ImageDecoder$Source;"/>
+		<method name="createSource(Ljava/io/File;)Landroid/graphics/ImageDecoder$Source;"/>
+		<method name="createSource(Ljava/nio/ByteBuffer;)Landroid/graphics/ImageDecoder$Source;"/>
+		<method name="createSource(Ljava/util/concurrent/Callable;)Landroid/graphics/ImageDecoder$Source;" since="29"/>
+		<method name="createSource([B)Landroid/graphics/ImageDecoder$Source;" since="31"/>
+		<method name="createSource([BII)Landroid/graphics/ImageDecoder$Source;" since="31"/>
+		<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeBitmap(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/Bitmap;"/>
+		<method name="decodeDrawable(Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="decodeDrawable(Landroid/graphics/ImageDecoder$Source;Landroid/graphics/ImageDecoder$OnHeaderDecodedListener;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getAllocator()I"/>
+		<method name="getCrop()Landroid/graphics/Rect;"/>
+		<method name="getMemorySizePolicy()I"/>
+		<method name="getOnPartialImageListener()Landroid/graphics/ImageDecoder$OnPartialImageListener;"/>
+		<method name="getPostProcessor()Landroid/graphics/PostProcessor;"/>
+		<method name="isDecodeAsAlphaMaskEnabled()Z"/>
+		<method name="isMimeTypeSupported(Ljava/lang/String;)Z" since="29"/>
+		<method name="isMutableRequired()Z"/>
+		<method name="isUnpremultipliedRequired()Z"/>
+		<method name="setAllocator(I)V"/>
+		<method name="setCrop(Landroid/graphics/Rect;)V"/>
+		<method name="setDecodeAsAlphaMaskEnabled(Z)V"/>
+		<method name="setMemorySizePolicy(I)V"/>
+		<method name="setMutableRequired(Z)V"/>
+		<method name="setOnPartialImageListener(Landroid/graphics/ImageDecoder$OnPartialImageListener;)V"/>
+		<method name="setPostProcessor(Landroid/graphics/PostProcessor;)V"/>
+		<method name="setTargetColorSpace(Landroid/graphics/ColorSpace;)V"/>
+		<method name="setTargetSampleSize(I)V"/>
+		<method name="setTargetSize(II)V"/>
+		<method name="setUnpremultipliedRequired(Z)V"/>
+		<field name="ALLOCATOR_DEFAULT"/>
+		<field name="ALLOCATOR_HARDWARE"/>
+		<field name="ALLOCATOR_SHARED_MEMORY"/>
+		<field name="ALLOCATOR_SOFTWARE"/>
+		<field name="MEMORY_POLICY_DEFAULT"/>
+		<field name="MEMORY_POLICY_LOW_RAM"/>
+	</class>
+	<class name="android/graphics/ImageDecoder$DecodeException" since="28">
+		<extends name="java/io/IOException"/>
+		<method name="getError()I"/>
+		<method name="getSource()Landroid/graphics/ImageDecoder$Source;"/>
+		<field name="SOURCE_EXCEPTION"/>
+		<field name="SOURCE_INCOMPLETE"/>
+		<field name="SOURCE_MALFORMED_DATA"/>
+	</class>
+	<class name="android/graphics/ImageDecoder$ImageInfo" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;"/>
+		<method name="getMimeType()Ljava/lang/String;"/>
+		<method name="getSize()Landroid/util/Size;"/>
+		<method name="isAnimated()Z"/>
+	</class>
+	<class name="android/graphics/ImageDecoder$OnHeaderDecodedListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onHeaderDecoded(Landroid/graphics/ImageDecoder;Landroid/graphics/ImageDecoder$ImageInfo;Landroid/graphics/ImageDecoder$Source;)V"/>
+	</class>
+	<class name="android/graphics/ImageDecoder$OnPartialImageListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onPartialImage(Landroid/graphics/ImageDecoder$DecodeException;)Z"/>
+	</class>
+	<class name="android/graphics/ImageDecoder$Source" since="28">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/graphics/ImageFormat" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getBitsPerPixel(I)I"/>
+		<field name="DEPTH16" since="23"/>
+		<field name="DEPTH_JPEG" since="29"/>
+		<field name="DEPTH_POINT_CLOUD" since="23"/>
+		<field name="FLEX_RGBA_8888" since="23"/>
+		<field name="FLEX_RGB_888" since="23"/>
+		<field name="HEIC" since="29"/>
+		<field name="JPEG"/>
+		<field name="NV16"/>
+		<field name="NV21"/>
+		<field name="PRIVATE" since="23"/>
+		<field name="RAW10" since="21"/>
+		<field name="RAW12" since="23"/>
+		<field name="RAW_PRIVATE" since="24"/>
+		<field name="RAW_SENSOR" since="21"/>
+		<field name="RGB_565"/>
+		<field name="UNKNOWN"/>
+		<field name="Y8" since="29"/>
+		<field name="YCBCR_P010" since="31"/>
+		<field name="YUV_420_888" since="19"/>
+		<field name="YUV_422_888" since="23"/>
+		<field name="YUV_444_888" since="23"/>
+		<field name="YUY2"/>
+		<field name="YV12" since="9"/>
+	</class>
+	<class name="android/graphics/Insets" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="add(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+		<method name="max(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+		<method name="min(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+		<method name="of(IIII)Landroid/graphics/Insets;"/>
+		<method name="of(Landroid/graphics/Rect;)Landroid/graphics/Insets;"/>
+		<method name="subtract(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/graphics/Insets;"/>
+		<field name="CREATOR"/>
+		<field name="NONE"/>
+		<field name="bottom"/>
+		<field name="left"/>
+		<field name="right"/>
+		<field name="top"/>
+	</class>
+	<class name="android/graphics/Interpolator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getKeyFrameCount()I"/>
+		<method name="getValueCount()I"/>
+		<method name="reset(I)V"/>
+		<method name="reset(II)V"/>
+		<method name="setKeyFrame(II[F)V"/>
+		<method name="setKeyFrame(II[F[F)V"/>
+		<method name="setRepeatMirror(FZ)V"/>
+		<method name="timeToValues(I[F)Landroid/graphics/Interpolator$Result;"/>
+		<method name="timeToValues([F)Landroid/graphics/Interpolator$Result;"/>
+	</class>
+	<class name="android/graphics/Interpolator$Result" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Interpolator$Result;"/>
+		<method name="values()[Landroid/graphics/Interpolator$Result;"/>
+		<field name="FREEZE_END"/>
+		<field name="FREEZE_START"/>
+		<field name="NORMAL"/>
+	</class>
+	<class name="android/graphics/LayerRasterizer" since="1" deprecated="21" removed="26">
+		<extends name="android/graphics/Rasterizer"/>
+		<method name="&lt;init>()V"/>
+		<method name="addLayer(Landroid/graphics/Paint;)V"/>
+		<method name="addLayer(Landroid/graphics/Paint;FF)V"/>
+	</class>
+	<class name="android/graphics/LightingColorFilter" since="1">
+		<extends name="android/graphics/ColorFilter"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getColorAdd()I" since="26"/>
+		<method name="getColorMultiply()I" since="26"/>
+	</class>
+	<class name="android/graphics/LinearGradient" since="1">
+		<extends name="android/graphics/Shader"/>
+		<method name="&lt;init>(FFFFIILandroid/graphics/Shader$TileMode;)V"/>
+		<method name="&lt;init>(FFFFJJLandroid/graphics/Shader$TileMode;)V" since="29"/>
+		<method name="&lt;init>(FFFF[I[FLandroid/graphics/Shader$TileMode;)V"/>
+		<method name="&lt;init>(FFFF[J[FLandroid/graphics/Shader$TileMode;)V" since="29"/>
+	</class>
+	<class name="android/graphics/MaskFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/graphics/Matrix" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/Matrix;)V"/>
+		<method name="dump(Ljava/io/PrintWriter;)V" since="31"/>
+		<method name="getValues([F)V"/>
+		<method name="invert(Landroid/graphics/Matrix;)Z"/>
+		<method name="isAffine()Z" since="21"/>
+		<method name="isIdentity()Z"/>
+		<method name="mapPoints([F)V"/>
+		<method name="mapPoints([FI[FII)V"/>
+		<method name="mapPoints([F[F)V"/>
+		<method name="mapRadius(F)F"/>
+		<method name="mapRect(Landroid/graphics/RectF;)Z"/>
+		<method name="mapRect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z"/>
+		<method name="mapVectors([F)V"/>
+		<method name="mapVectors([FI[FII)V"/>
+		<method name="mapVectors([F[F)V"/>
+		<method name="postConcat(Landroid/graphics/Matrix;)Z"/>
+		<method name="postRotate(F)Z"/>
+		<method name="postRotate(FFF)Z"/>
+		<method name="postScale(FF)Z"/>
+		<method name="postScale(FFFF)Z"/>
+		<method name="postSkew(FF)Z"/>
+		<method name="postSkew(FFFF)Z"/>
+		<method name="postTranslate(FF)Z"/>
+		<method name="preConcat(Landroid/graphics/Matrix;)Z"/>
+		<method name="preRotate(F)Z"/>
+		<method name="preRotate(FFF)Z"/>
+		<method name="preScale(FF)Z"/>
+		<method name="preScale(FFFF)Z"/>
+		<method name="preSkew(FF)Z"/>
+		<method name="preSkew(FFFF)Z"/>
+		<method name="preTranslate(FF)Z"/>
+		<method name="rectStaysRect()Z"/>
+		<method name="reset()V"/>
+		<method name="set(Landroid/graphics/Matrix;)V"/>
+		<method name="setConcat(Landroid/graphics/Matrix;Landroid/graphics/Matrix;)Z"/>
+		<method name="setPolyToPoly([FI[FII)Z"/>
+		<method name="setRectToRect(Landroid/graphics/RectF;Landroid/graphics/RectF;Landroid/graphics/Matrix$ScaleToFit;)Z"/>
+		<method name="setRotate(F)V"/>
+		<method name="setRotate(FFF)V"/>
+		<method name="setScale(FF)V"/>
+		<method name="setScale(FFFF)V"/>
+		<method name="setSinCos(FF)V"/>
+		<method name="setSinCos(FFFF)V"/>
+		<method name="setSkew(FF)V"/>
+		<method name="setSkew(FFFF)V"/>
+		<method name="setTranslate(FF)V"/>
+		<method name="setValues([F)V"/>
+		<method name="toShortString()Ljava/lang/String;"/>
+		<field name="IDENTITY_MATRIX" since="31"/>
+		<field name="MPERSP_0"/>
+		<field name="MPERSP_1"/>
+		<field name="MPERSP_2"/>
+		<field name="MSCALE_X"/>
+		<field name="MSCALE_Y"/>
+		<field name="MSKEW_X"/>
+		<field name="MSKEW_Y"/>
+		<field name="MTRANS_X"/>
+		<field name="MTRANS_Y"/>
+	</class>
+	<class name="android/graphics/Matrix$ScaleToFit" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Matrix$ScaleToFit;"/>
+		<method name="values()[Landroid/graphics/Matrix$ScaleToFit;"/>
+		<field name="CENTER"/>
+		<field name="END"/>
+		<field name="FILL"/>
+		<field name="START"/>
+	</class>
+	<class name="android/graphics/Movie" since="1" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="decodeByteArray([BII)Landroid/graphics/Movie;" deprecated="29"/>
+		<method name="decodeFile(Ljava/lang/String;)Landroid/graphics/Movie;" deprecated="29"/>
+		<method name="decodeStream(Ljava/io/InputStream;)Landroid/graphics/Movie;" deprecated="29"/>
+		<method name="draw(Landroid/graphics/Canvas;FF)V" deprecated="29"/>
+		<method name="draw(Landroid/graphics/Canvas;FFLandroid/graphics/Paint;)V" deprecated="29"/>
+		<method name="duration()I" deprecated="29"/>
+		<method name="height()I" deprecated="29"/>
+		<method name="isOpaque()Z" deprecated="29"/>
+		<method name="setTime(I)Z" deprecated="29"/>
+		<method name="width()I" deprecated="29"/>
+	</class>
+	<class name="android/graphics/NinePatch" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;[B)V" since="19"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;[BLjava/lang/String;)V"/>
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;)V"/>
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/RectF;)V"/>
+		<method name="getBitmap()Landroid/graphics/Bitmap;" since="19"/>
+		<method name="getDensity()I" since="4"/>
+		<method name="getHeight()I"/>
+		<method name="getName()Ljava/lang/String;" since="19"/>
+		<method name="getPaint()Landroid/graphics/Paint;" since="19"/>
+		<method name="getTransparentRegion(Landroid/graphics/Rect;)Landroid/graphics/Region;"/>
+		<method name="getWidth()I"/>
+		<method name="hasAlpha()Z"/>
+		<method name="isNinePatchChunk([B)Z"/>
+		<method name="setPaint(Landroid/graphics/Paint;)V"/>
+	</class>
+	<class name="android/graphics/Outline" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/Outline;)V"/>
+		<method name="canClip()Z"/>
+		<method name="getAlpha()F"/>
+		<method name="getRadius()F" since="24"/>
+		<method name="getRect(Landroid/graphics/Rect;)Z" since="24"/>
+		<method name="isEmpty()Z"/>
+		<method name="offset(II)V" since="22"/>
+		<method name="set(Landroid/graphics/Outline;)V"/>
+		<method name="setAlpha(F)V"/>
+		<method name="setConvexPath(Landroid/graphics/Path;)V" deprecated="30"/>
+		<method name="setEmpty()V"/>
+		<method name="setOval(IIII)V"/>
+		<method name="setOval(Landroid/graphics/Rect;)V"/>
+		<method name="setPath(Landroid/graphics/Path;)V" since="30"/>
+		<method name="setRect(IIII)V"/>
+		<method name="setRect(Landroid/graphics/Rect;)V"/>
+		<method name="setRoundRect(IIIIF)V"/>
+		<method name="setRoundRect(Landroid/graphics/Rect;F)V"/>
+	</class>
+	<class name="android/graphics/Paint" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/graphics/Paint;)V"/>
+		<method name="ascent()F"/>
+		<method name="breakText(Ljava/lang/CharSequence;IIZF[F)I"/>
+		<method name="breakText(Ljava/lang/String;ZF[F)I"/>
+		<method name="breakText([CIIF[F)I"/>
+		<method name="clearShadowLayer()V"/>
+		<method name="descent()F"/>
+		<method name="equalsForTextMeasurement(Landroid/graphics/Paint;)Z" since="28"/>
+		<method name="getAlpha()I"/>
+		<method name="getBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getColor()I"/>
+		<method name="getColorFilter()Landroid/graphics/ColorFilter;"/>
+		<method name="getColorLong()J" since="29"/>
+		<method name="getEndHyphenEdit()I" since="29"/>
+		<method name="getFillPath(Landroid/graphics/Path;Landroid/graphics/Path;)Z"/>
+		<method name="getFlags()I"/>
+		<method name="getFontFeatureSettings()Ljava/lang/String;" since="21"/>
+		<method name="getFontMetrics()Landroid/graphics/Paint$FontMetrics;"/>
+		<method name="getFontMetrics(Landroid/graphics/Paint$FontMetrics;)F"/>
+		<method name="getFontMetricsInt()Landroid/graphics/Paint$FontMetricsInt;"/>
+		<method name="getFontMetricsInt(Landroid/graphics/Paint$FontMetricsInt;)I"/>
+		<method name="getFontSpacing()F"/>
+		<method name="getFontVariationSettings()Ljava/lang/String;" since="26"/>
+		<method name="getHinting()I" since="14"/>
+		<method name="getLetterSpacing()F" since="21"/>
+		<method name="getMaskFilter()Landroid/graphics/MaskFilter;"/>
+		<method name="getOffsetForAdvance(Ljava/lang/CharSequence;IIIIZF)I" since="23"/>
+		<method name="getOffsetForAdvance([CIIIIZF)I" since="23"/>
+		<method name="getPathEffect()Landroid/graphics/PathEffect;"/>
+		<method name="getRasterizer()Landroid/graphics/Rasterizer;" deprecated="21" removed="26"/>
+		<method name="getRunAdvance(Ljava/lang/CharSequence;IIIIZI)F" since="23"/>
+		<method name="getRunAdvance([CIIIIZI)F" since="23"/>
+		<method name="getShader()Landroid/graphics/Shader;"/>
+		<method name="getShadowLayerColor()I" since="29"/>
+		<method name="getShadowLayerColorLong()J" since="29"/>
+		<method name="getShadowLayerDx()F" since="29"/>
+		<method name="getShadowLayerDy()F" since="29"/>
+		<method name="getShadowLayerRadius()F" since="29"/>
+		<method name="getStartHyphenEdit()I" since="29"/>
+		<method name="getStrikeThruPosition()F" since="29"/>
+		<method name="getStrikeThruThickness()F" since="29"/>
+		<method name="getStrokeCap()Landroid/graphics/Paint$Cap;"/>
+		<method name="getStrokeJoin()Landroid/graphics/Paint$Join;"/>
+		<method name="getStrokeMiter()F"/>
+		<method name="getStrokeWidth()F"/>
+		<method name="getStyle()Landroid/graphics/Paint$Style;"/>
+		<method name="getTextAlign()Landroid/graphics/Paint$Align;"/>
+		<method name="getTextBounds(Ljava/lang/CharSequence;IILandroid/graphics/Rect;)V" since="29"/>
+		<method name="getTextBounds(Ljava/lang/String;IILandroid/graphics/Rect;)V"/>
+		<method name="getTextBounds([CIILandroid/graphics/Rect;)V"/>
+		<method name="getTextLocale()Ljava/util/Locale;" since="17"/>
+		<method name="getTextLocales()Landroid/os/LocaleList;" since="24"/>
+		<method name="getTextPath(Ljava/lang/String;IIFFLandroid/graphics/Path;)V"/>
+		<method name="getTextPath([CIIFFLandroid/graphics/Path;)V"/>
+		<method name="getTextRunAdvances([CIIIIZ[FI)F" since="29"/>
+		<method name="getTextRunCursor(Ljava/lang/CharSequence;IIZII)I" since="29"/>
+		<method name="getTextRunCursor([CIIZII)I" since="29"/>
+		<method name="getTextScaleX()F"/>
+		<method name="getTextSize()F"/>
+		<method name="getTextSkewX()F"/>
+		<method name="getTextWidths(Ljava/lang/CharSequence;II[F)I"/>
+		<method name="getTextWidths(Ljava/lang/String;II[F)I"/>
+		<method name="getTextWidths(Ljava/lang/String;[F)I"/>
+		<method name="getTextWidths([CII[F)I"/>
+		<method name="getTypeface()Landroid/graphics/Typeface;"/>
+		<method name="getUnderlinePosition()F" since="29"/>
+		<method name="getUnderlineThickness()F" since="29"/>
+		<method name="getWordSpacing()F" since="29"/>
+		<method name="getXfermode()Landroid/graphics/Xfermode;"/>
+		<method name="hasGlyph(Ljava/lang/String;)Z" since="23"/>
+		<method name="isAntiAlias()Z"/>
+		<method name="isDither()Z"/>
+		<method name="isElegantTextHeight()Z" since="21"/>
+		<method name="isFakeBoldText()Z"/>
+		<method name="isFilterBitmap()Z"/>
+		<method name="isLinearText()Z" deprecated="16"/>
+		<method name="isStrikeThruText()Z"/>
+		<method name="isSubpixelText()Z"/>
+		<method name="isUnderlineText()Z"/>
+		<method name="measureText(Ljava/lang/CharSequence;II)F"/>
+		<method name="measureText(Ljava/lang/String;)F"/>
+		<method name="measureText(Ljava/lang/String;II)F"/>
+		<method name="measureText([CII)F"/>
+		<method name="reset()V"/>
+		<method name="set(Landroid/graphics/Paint;)V"/>
+		<method name="setARGB(IIII)V"/>
+		<method name="setAlpha(I)V"/>
+		<method name="setAntiAlias(Z)V"/>
+		<method name="setBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setColor(I)V"/>
+		<method name="setColor(J)V" since="29"/>
+		<method name="setColorFilter(Landroid/graphics/ColorFilter;)Landroid/graphics/ColorFilter;"/>
+		<method name="setDither(Z)V"/>
+		<method name="setElegantTextHeight(Z)V" since="21"/>
+		<method name="setEndHyphenEdit(I)V" since="29"/>
+		<method name="setFakeBoldText(Z)V"/>
+		<method name="setFilterBitmap(Z)V"/>
+		<method name="setFlags(I)V"/>
+		<method name="setFontFeatureSettings(Ljava/lang/String;)V" since="21"/>
+		<method name="setFontVariationSettings(Ljava/lang/String;)Z" since="26"/>
+		<method name="setHinting(I)V" since="14"/>
+		<method name="setLetterSpacing(F)V" since="21"/>
+		<method name="setLinearText(Z)V" deprecated="16"/>
+		<method name="setMaskFilter(Landroid/graphics/MaskFilter;)Landroid/graphics/MaskFilter;"/>
+		<method name="setPathEffect(Landroid/graphics/PathEffect;)Landroid/graphics/PathEffect;"/>
+		<method name="setRasterizer(Landroid/graphics/Rasterizer;)Landroid/graphics/Rasterizer;" deprecated="21" removed="26"/>
+		<method name="setShader(Landroid/graphics/Shader;)Landroid/graphics/Shader;"/>
+		<method name="setShadowLayer(FFFI)V"/>
+		<method name="setShadowLayer(FFFJ)V" since="29"/>
+		<method name="setStartHyphenEdit(I)V" since="29"/>
+		<method name="setStrikeThruText(Z)V"/>
+		<method name="setStrokeCap(Landroid/graphics/Paint$Cap;)V"/>
+		<method name="setStrokeJoin(Landroid/graphics/Paint$Join;)V"/>
+		<method name="setStrokeMiter(F)V"/>
+		<method name="setStrokeWidth(F)V"/>
+		<method name="setStyle(Landroid/graphics/Paint$Style;)V"/>
+		<method name="setSubpixelText(Z)V"/>
+		<method name="setTextAlign(Landroid/graphics/Paint$Align;)V"/>
+		<method name="setTextLocale(Ljava/util/Locale;)V" since="17"/>
+		<method name="setTextLocales(Landroid/os/LocaleList;)V" since="24"/>
+		<method name="setTextScaleX(F)V"/>
+		<method name="setTextSize(F)V"/>
+		<method name="setTextSkewX(F)V"/>
+		<method name="setTypeface(Landroid/graphics/Typeface;)Landroid/graphics/Typeface;"/>
+		<method name="setUnderlineText(Z)V"/>
+		<method name="setWordSpacing(F)V" since="29"/>
+		<method name="setXfermode(Landroid/graphics/Xfermode;)Landroid/graphics/Xfermode;"/>
+		<field name="ANTI_ALIAS_FLAG"/>
+		<field name="CURSOR_AFTER" since="29"/>
+		<field name="CURSOR_AT" since="29"/>
+		<field name="CURSOR_AT_OR_AFTER" since="29"/>
+		<field name="CURSOR_AT_OR_BEFORE" since="29"/>
+		<field name="CURSOR_BEFORE" since="29"/>
+		<field name="DEV_KERN_TEXT_FLAG"/>
+		<field name="DITHER_FLAG"/>
+		<field name="EMBEDDED_BITMAP_TEXT_FLAG" since="19"/>
+		<field name="END_HYPHEN_EDIT_INSERT_ARMENIAN_HYPHEN" since="29"/>
+		<field name="END_HYPHEN_EDIT_INSERT_HYPHEN" since="29"/>
+		<field name="END_HYPHEN_EDIT_INSERT_MAQAF" since="29"/>
+		<field name="END_HYPHEN_EDIT_INSERT_UCAS_HYPHEN" since="29"/>
+		<field name="END_HYPHEN_EDIT_INSERT_ZWJ_AND_HYPHEN" since="29"/>
+		<field name="END_HYPHEN_EDIT_NO_EDIT" since="29"/>
+		<field name="END_HYPHEN_EDIT_REPLACE_WITH_HYPHEN" since="29"/>
+		<field name="FAKE_BOLD_TEXT_FLAG"/>
+		<field name="FILTER_BITMAP_FLAG"/>
+		<field name="HINTING_OFF" since="14"/>
+		<field name="HINTING_ON" since="14"/>
+		<field name="LINEAR_TEXT_FLAG"/>
+		<field name="START_HYPHEN_EDIT_INSERT_HYPHEN" since="29"/>
+		<field name="START_HYPHEN_EDIT_INSERT_ZWJ" since="29"/>
+		<field name="START_HYPHEN_EDIT_NO_EDIT" since="29"/>
+		<field name="STRIKE_THRU_TEXT_FLAG"/>
+		<field name="SUBPIXEL_TEXT_FLAG"/>
+		<field name="UNDERLINE_TEXT_FLAG"/>
+	</class>
+	<class name="android/graphics/Paint$Align" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Align;"/>
+		<method name="values()[Landroid/graphics/Paint$Align;"/>
+		<field name="CENTER"/>
+		<field name="LEFT"/>
+		<field name="RIGHT"/>
+	</class>
+	<class name="android/graphics/Paint$Cap" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Cap;"/>
+		<method name="values()[Landroid/graphics/Paint$Cap;"/>
+		<field name="BUTT"/>
+		<field name="ROUND"/>
+		<field name="SQUARE"/>
+	</class>
+	<class name="android/graphics/Paint$FontMetrics" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ascent"/>
+		<field name="bottom"/>
+		<field name="descent"/>
+		<field name="leading"/>
+		<field name="top"/>
+	</class>
+	<class name="android/graphics/Paint$FontMetricsInt" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ascent"/>
+		<field name="bottom"/>
+		<field name="descent"/>
+		<field name="leading"/>
+		<field name="top"/>
+	</class>
+	<class name="android/graphics/Paint$Join" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Join;"/>
+		<method name="values()[Landroid/graphics/Paint$Join;"/>
+		<field name="BEVEL"/>
+		<field name="MITER"/>
+		<field name="ROUND"/>
+	</class>
+	<class name="android/graphics/Paint$Style" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Paint$Style;"/>
+		<method name="values()[Landroid/graphics/Paint$Style;"/>
+		<field name="FILL"/>
+		<field name="FILL_AND_STROKE"/>
+		<field name="STROKE"/>
+	</class>
+	<class name="android/graphics/PaintFlagsDrawFilter" since="1">
+		<extends name="android/graphics/DrawFilter"/>
+		<method name="&lt;init>(II)V"/>
+	</class>
+	<class name="android/graphics/ParcelableColorSpace" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/graphics/ColorSpace;)V"/>
+		<method name="getColorSpace()Landroid/graphics/ColorSpace;"/>
+		<method name="isParcelable(Landroid/graphics/ColorSpace;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/graphics/Path" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/Path;)V"/>
+		<method name="addArc(FFFFFF)V" since="21"/>
+		<method name="addArc(Landroid/graphics/RectF;FF)V"/>
+		<method name="addCircle(FFFLandroid/graphics/Path$Direction;)V"/>
+		<method name="addOval(FFFFLandroid/graphics/Path$Direction;)V" since="21"/>
+		<method name="addOval(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V"/>
+		<method name="addPath(Landroid/graphics/Path;)V"/>
+		<method name="addPath(Landroid/graphics/Path;FF)V"/>
+		<method name="addPath(Landroid/graphics/Path;Landroid/graphics/Matrix;)V"/>
+		<method name="addRect(FFFFLandroid/graphics/Path$Direction;)V"/>
+		<method name="addRect(Landroid/graphics/RectF;Landroid/graphics/Path$Direction;)V"/>
+		<method name="addRoundRect(FFFFFFLandroid/graphics/Path$Direction;)V" since="21"/>
+		<method name="addRoundRect(FFFF[FLandroid/graphics/Path$Direction;)V" since="21"/>
+		<method name="addRoundRect(Landroid/graphics/RectF;FFLandroid/graphics/Path$Direction;)V"/>
+		<method name="addRoundRect(Landroid/graphics/RectF;[FLandroid/graphics/Path$Direction;)V"/>
+		<method name="approximate(F)[F" since="26"/>
+		<method name="arcTo(FFFFFFZ)V" since="21"/>
+		<method name="arcTo(Landroid/graphics/RectF;FF)V"/>
+		<method name="arcTo(Landroid/graphics/RectF;FFZ)V"/>
+		<method name="close()V"/>
+		<method name="computeBounds(Landroid/graphics/RectF;Z)V"/>
+		<method name="cubicTo(FFFFFF)V"/>
+		<method name="getFillType()Landroid/graphics/Path$FillType;"/>
+		<method name="incReserve(I)V"/>
+		<method name="isConvex()Z" since="21" deprecated="30"/>
+		<method name="isEmpty()Z"/>
+		<method name="isInverseFillType()Z"/>
+		<method name="isRect(Landroid/graphics/RectF;)Z"/>
+		<method name="lineTo(FF)V"/>
+		<method name="moveTo(FF)V"/>
+		<method name="offset(FF)V"/>
+		<method name="offset(FFLandroid/graphics/Path;)V"/>
+		<method name="op(Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z" since="19"/>
+		<method name="op(Landroid/graphics/Path;Landroid/graphics/Path;Landroid/graphics/Path$Op;)Z" since="19"/>
+		<method name="quadTo(FFFF)V"/>
+		<method name="rCubicTo(FFFFFF)V"/>
+		<method name="rLineTo(FF)V"/>
+		<method name="rMoveTo(FF)V"/>
+		<method name="rQuadTo(FFFF)V"/>
+		<method name="reset()V"/>
+		<method name="rewind()V"/>
+		<method name="set(Landroid/graphics/Path;)V"/>
+		<method name="setFillType(Landroid/graphics/Path$FillType;)V"/>
+		<method name="setLastPoint(FF)V"/>
+		<method name="toggleInverseFillType()V"/>
+		<method name="transform(Landroid/graphics/Matrix;)V"/>
+		<method name="transform(Landroid/graphics/Matrix;Landroid/graphics/Path;)V"/>
+	</class>
+	<class name="android/graphics/Path$Direction" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$Direction;"/>
+		<method name="values()[Landroid/graphics/Path$Direction;"/>
+		<field name="CCW"/>
+		<field name="CW"/>
+	</class>
+	<class name="android/graphics/Path$FillType" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$FillType;"/>
+		<method name="values()[Landroid/graphics/Path$FillType;"/>
+		<field name="EVEN_ODD"/>
+		<field name="INVERSE_EVEN_ODD"/>
+		<field name="INVERSE_WINDING"/>
+		<field name="WINDING"/>
+	</class>
+	<class name="android/graphics/Path$Op" since="19">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Path$Op;"/>
+		<method name="values()[Landroid/graphics/Path$Op;"/>
+		<field name="DIFFERENCE"/>
+		<field name="INTERSECT"/>
+		<field name="REVERSE_DIFFERENCE"/>
+		<field name="UNION"/>
+		<field name="XOR"/>
+	</class>
+	<class name="android/graphics/PathDashPathEffect" since="1">
+		<extends name="android/graphics/PathEffect"/>
+		<method name="&lt;init>(Landroid/graphics/Path;FFLandroid/graphics/PathDashPathEffect$Style;)V"/>
+	</class>
+	<class name="android/graphics/PathDashPathEffect$Style" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/PathDashPathEffect$Style;"/>
+		<method name="values()[Landroid/graphics/PathDashPathEffect$Style;"/>
+		<field name="MORPH"/>
+		<field name="ROTATE"/>
+		<field name="TRANSLATE"/>
+	</class>
+	<class name="android/graphics/PathEffect" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/graphics/PathMeasure" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/Path;Z)V"/>
+		<method name="getLength()F"/>
+		<method name="getMatrix(FLandroid/graphics/Matrix;I)Z"/>
+		<method name="getPosTan(F[F[F)Z"/>
+		<method name="getSegment(FFLandroid/graphics/Path;Z)Z"/>
+		<method name="isClosed()Z"/>
+		<method name="nextContour()Z"/>
+		<method name="setPath(Landroid/graphics/Path;Z)V"/>
+		<field name="POSITION_MATRIX_FLAG"/>
+		<field name="TANGENT_MATRIX_FLAG"/>
+	</class>
+	<class name="android/graphics/Picture" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/Picture;)V"/>
+		<method name="beginRecording(II)Landroid/graphics/Canvas;"/>
+		<method name="createFromStream(Ljava/io/InputStream;)Landroid/graphics/Picture;" deprecated="18" removed="29"/>
+		<method name="draw(Landroid/graphics/Canvas;)V"/>
+		<method name="endRecording()V"/>
+		<method name="getHeight()I"/>
+		<method name="getWidth()I"/>
+		<method name="requiresHardwareAcceleration()Z" since="28"/>
+		<method name="writeToStream(Ljava/io/OutputStream;)V" deprecated="18" removed="29"/>
+	</class>
+	<class name="android/graphics/PixelFormat" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="formatHasAlpha(I)Z"/>
+		<method name="getPixelFormatInfo(ILandroid/graphics/PixelFormat;)V"/>
+		<field name="A_8" deprecated="19"/>
+		<field name="JPEG" deprecated="15"/>
+		<field name="LA_88" deprecated="16"/>
+		<field name="L_8" deprecated="19"/>
+		<field name="OPAQUE"/>
+		<field name="RGBA_1010102" since="26"/>
+		<field name="RGBA_4444" deprecated="16"/>
+		<field name="RGBA_5551" deprecated="16"/>
+		<field name="RGBA_8888"/>
+		<field name="RGBA_F16" since="26"/>
+		<field name="RGBX_8888"/>
+		<field name="RGB_332" deprecated="16"/>
+		<field name="RGB_565"/>
+		<field name="RGB_888"/>
+		<field name="TRANSLUCENT"/>
+		<field name="TRANSPARENT"/>
+		<field name="UNKNOWN"/>
+		<field name="YCbCr_420_SP" deprecated="15"/>
+		<field name="YCbCr_422_I" since="5" deprecated="15"/>
+		<field name="YCbCr_422_SP" deprecated="15"/>
+		<field name="bitsPerPixel"/>
+		<field name="bytesPerPixel"/>
+	</class>
+	<class name="android/graphics/PixelXorXfermode" since="1" deprecated="16" removed="24">
+		<extends name="android/graphics/Xfermode"/>
+		<method name="&lt;init>(I)V"/>
+	</class>
+	<class name="android/graphics/Point" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="13"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/graphics/Point;)V"/>
+		<method name="equals(II)Z"/>
+		<method name="negate()V"/>
+		<method name="offset(II)V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="13"/>
+		<method name="set(II)V"/>
+		<field name="CREATOR" since="13"/>
+		<field name="x"/>
+		<field name="y"/>
+	</class>
+	<class name="android/graphics/PointF" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="13"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(FF)V"/>
+		<method name="&lt;init>(Landroid/graphics/Point;)V"/>
+		<method name="&lt;init>(Landroid/graphics/PointF;)V" since="30"/>
+		<method name="equals(FF)Z"/>
+		<method name="length()F"/>
+		<method name="length(FF)F"/>
+		<method name="negate()V"/>
+		<method name="offset(FF)V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="13"/>
+		<method name="set(FF)V"/>
+		<method name="set(Landroid/graphics/PointF;)V"/>
+		<field name="CREATOR" since="13"/>
+		<field name="x"/>
+		<field name="y"/>
+	</class>
+	<class name="android/graphics/PorterDuff" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/graphics/PorterDuff$Mode" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/PorterDuff$Mode;"/>
+		<method name="values()[Landroid/graphics/PorterDuff$Mode;"/>
+		<field name="ADD" since="11"/>
+		<field name="CLEAR"/>
+		<field name="DARKEN"/>
+		<field name="DST"/>
+		<field name="DST_ATOP"/>
+		<field name="DST_IN"/>
+		<field name="DST_OUT"/>
+		<field name="DST_OVER"/>
+		<field name="LIGHTEN"/>
+		<field name="MULTIPLY"/>
+		<field name="OVERLAY" since="11"/>
+		<field name="SCREEN"/>
+		<field name="SRC"/>
+		<field name="SRC_ATOP"/>
+		<field name="SRC_IN"/>
+		<field name="SRC_OUT"/>
+		<field name="SRC_OVER"/>
+		<field name="XOR"/>
+	</class>
+	<class name="android/graphics/PorterDuffColorFilter" since="1">
+		<extends name="android/graphics/ColorFilter"/>
+		<method name="&lt;init>(ILandroid/graphics/PorterDuff$Mode;)V"/>
+	</class>
+	<class name="android/graphics/PorterDuffXfermode" since="1">
+		<extends name="android/graphics/Xfermode"/>
+		<method name="&lt;init>(Landroid/graphics/PorterDuff$Mode;)V"/>
+	</class>
+	<class name="android/graphics/PostProcessor" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onPostProcess(Landroid/graphics/Canvas;)I"/>
+	</class>
+	<class name="android/graphics/RadialGradient" since="1">
+		<extends name="android/graphics/Shader"/>
+		<method name="&lt;init>(FFFFFF[J[FLandroid/graphics/Shader$TileMode;)V" since="31"/>
+		<method name="&lt;init>(FFFIILandroid/graphics/Shader$TileMode;)V"/>
+		<method name="&lt;init>(FFFJJLandroid/graphics/Shader$TileMode;)V" since="29"/>
+		<method name="&lt;init>(FFF[I[FLandroid/graphics/Shader$TileMode;)V"/>
+		<method name="&lt;init>(FFF[J[FLandroid/graphics/Shader$TileMode;)V" since="29"/>
+	</class>
+	<class name="android/graphics/Rasterizer" since="1" deprecated="21" removed="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/graphics/RecordingCanvas" since="29">
+		<extends name="android/graphics/Canvas"/>
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/Rect;Landroid/graphics/Paint;)V"/>
+		<method name="drawPatch(Landroid/graphics/NinePatch;Landroid/graphics/RectF;Landroid/graphics/Paint;)V"/>
+	</class>
+	<class name="android/graphics/Rect" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;)V"/>
+		<method name="centerX()I"/>
+		<method name="centerY()I"/>
+		<method name="contains(II)Z"/>
+		<method name="contains(IIII)Z"/>
+		<method name="contains(Landroid/graphics/Rect;)Z"/>
+		<method name="exactCenterX()F"/>
+		<method name="exactCenterY()F"/>
+		<method name="flattenToString()Ljava/lang/String;" since="7"/>
+		<method name="height()I"/>
+		<method name="inset(II)V"/>
+		<method name="inset(IIII)V" since="31"/>
+		<method name="inset(Landroid/graphics/Insets;)V" since="31"/>
+		<method name="intersect(IIII)Z"/>
+		<method name="intersect(Landroid/graphics/Rect;)Z"/>
+		<method name="intersects(IIII)Z"/>
+		<method name="intersects(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z"/>
+		<method name="isEmpty()Z"/>
+		<method name="offset(II)V"/>
+		<method name="offsetTo(II)V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="set(IIII)V"/>
+		<method name="set(Landroid/graphics/Rect;)V"/>
+		<method name="setEmpty()V"/>
+		<method name="setIntersect(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z"/>
+		<method name="sort()V"/>
+		<method name="toShortString()Ljava/lang/String;" since="3"/>
+		<method name="unflattenFromString(Ljava/lang/String;)Landroid/graphics/Rect;" since="7"/>
+		<method name="union(II)V"/>
+		<method name="union(IIII)V"/>
+		<method name="union(Landroid/graphics/Rect;)V"/>
+		<method name="width()I"/>
+		<field name="CREATOR"/>
+		<field name="bottom"/>
+		<field name="left"/>
+		<field name="right"/>
+		<field name="top"/>
+	</class>
+	<class name="android/graphics/RectF" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(FFFF)V"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;)V"/>
+		<method name="&lt;init>(Landroid/graphics/RectF;)V"/>
+		<method name="centerX()F"/>
+		<method name="centerY()F"/>
+		<method name="contains(FF)Z"/>
+		<method name="contains(FFFF)Z"/>
+		<method name="contains(Landroid/graphics/RectF;)Z"/>
+		<method name="height()F"/>
+		<method name="inset(FF)V"/>
+		<method name="intersect(FFFF)Z"/>
+		<method name="intersect(Landroid/graphics/RectF;)Z"/>
+		<method name="intersects(FFFF)Z"/>
+		<method name="intersects(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z"/>
+		<method name="isEmpty()Z"/>
+		<method name="offset(FF)V"/>
+		<method name="offsetTo(FF)V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="3"/>
+		<method name="round(Landroid/graphics/Rect;)V"/>
+		<method name="roundOut(Landroid/graphics/Rect;)V"/>
+		<method name="set(FFFF)V"/>
+		<method name="set(Landroid/graphics/Rect;)V"/>
+		<method name="set(Landroid/graphics/RectF;)V"/>
+		<method name="setEmpty()V"/>
+		<method name="setIntersect(Landroid/graphics/RectF;Landroid/graphics/RectF;)Z"/>
+		<method name="sort()V"/>
+		<method name="toShortString()Ljava/lang/String;" since="14"/>
+		<method name="union(FF)V"/>
+		<method name="union(FFFF)V"/>
+		<method name="union(Landroid/graphics/RectF;)V"/>
+		<method name="width()F"/>
+		<field name="CREATOR" since="3"/>
+		<field name="bottom"/>
+		<field name="left"/>
+		<field name="right"/>
+		<field name="top"/>
+	</class>
+	<class name="android/graphics/Region" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;)V"/>
+		<method name="&lt;init>(Landroid/graphics/Region;)V"/>
+		<method name="contains(II)Z"/>
+		<method name="getBoundaryPath()Landroid/graphics/Path;"/>
+		<method name="getBoundaryPath(Landroid/graphics/Path;)Z"/>
+		<method name="getBounds()Landroid/graphics/Rect;"/>
+		<method name="getBounds(Landroid/graphics/Rect;)Z"/>
+		<method name="isComplex()Z"/>
+		<method name="isEmpty()Z"/>
+		<method name="isRect()Z"/>
+		<method name="op(IIIILandroid/graphics/Region$Op;)Z"/>
+		<method name="op(Landroid/graphics/Rect;Landroid/graphics/Region$Op;)Z"/>
+		<method name="op(Landroid/graphics/Rect;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z"/>
+		<method name="op(Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z"/>
+		<method name="op(Landroid/graphics/Region;Landroid/graphics/Region;Landroid/graphics/Region$Op;)Z"/>
+		<method name="quickContains(IIII)Z"/>
+		<method name="quickContains(Landroid/graphics/Rect;)Z"/>
+		<method name="quickReject(IIII)Z"/>
+		<method name="quickReject(Landroid/graphics/Rect;)Z"/>
+		<method name="quickReject(Landroid/graphics/Region;)Z"/>
+		<method name="set(IIII)Z"/>
+		<method name="set(Landroid/graphics/Rect;)Z"/>
+		<method name="set(Landroid/graphics/Region;)Z"/>
+		<method name="setEmpty()V"/>
+		<method name="setPath(Landroid/graphics/Path;Landroid/graphics/Region;)Z"/>
+		<method name="translate(II)V"/>
+		<method name="translate(IILandroid/graphics/Region;)V"/>
+		<method name="union(Landroid/graphics/Rect;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/graphics/Region$Op" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Region$Op;"/>
+		<method name="values()[Landroid/graphics/Region$Op;"/>
+		<field name="DIFFERENCE"/>
+		<field name="INTERSECT"/>
+		<field name="REPLACE"/>
+		<field name="REVERSE_DIFFERENCE"/>
+		<field name="UNION"/>
+		<field name="XOR"/>
+	</class>
+	<class name="android/graphics/RegionIterator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Region;)V"/>
+		<method name="next(Landroid/graphics/Rect;)Z"/>
+	</class>
+	<class name="android/graphics/RenderEffect" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="createBitmapEffect(Landroid/graphics/Bitmap;)Landroid/graphics/RenderEffect;"/>
+		<method name="createBitmapEffect(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Rect;)Landroid/graphics/RenderEffect;"/>
+		<method name="createBlendModeEffect(Landroid/graphics/RenderEffect;Landroid/graphics/RenderEffect;Landroid/graphics/BlendMode;)Landroid/graphics/RenderEffect;"/>
+		<method name="createBlurEffect(FFLandroid/graphics/RenderEffect;Landroid/graphics/Shader$TileMode;)Landroid/graphics/RenderEffect;"/>
+		<method name="createBlurEffect(FFLandroid/graphics/Shader$TileMode;)Landroid/graphics/RenderEffect;"/>
+		<method name="createChainEffect(Landroid/graphics/RenderEffect;Landroid/graphics/RenderEffect;)Landroid/graphics/RenderEffect;"/>
+		<method name="createColorFilterEffect(Landroid/graphics/ColorFilter;)Landroid/graphics/RenderEffect;"/>
+		<method name="createColorFilterEffect(Landroid/graphics/ColorFilter;Landroid/graphics/RenderEffect;)Landroid/graphics/RenderEffect;"/>
+		<method name="createOffsetEffect(FF)Landroid/graphics/RenderEffect;"/>
+		<method name="createOffsetEffect(FFLandroid/graphics/RenderEffect;)Landroid/graphics/RenderEffect;"/>
+		<method name="createShaderEffect(Landroid/graphics/Shader;)Landroid/graphics/RenderEffect;"/>
+	</class>
+	<class name="android/graphics/RenderNode" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="beginRecording()Landroid/graphics/RecordingCanvas;"/>
+		<method name="beginRecording(II)Landroid/graphics/RecordingCanvas;"/>
+		<method name="computeApproximateMemoryUsage()J"/>
+		<method name="discardDisplayList()V"/>
+		<method name="endRecording()V"/>
+		<method name="getAlpha()F"/>
+		<method name="getAmbientShadowColor()I"/>
+		<method name="getBottom()I"/>
+		<method name="getCameraDistance()F"/>
+		<method name="getClipToBounds()Z"/>
+		<method name="getClipToOutline()Z"/>
+		<method name="getElevation()F"/>
+		<method name="getHeight()I"/>
+		<method name="getInverseMatrix(Landroid/graphics/Matrix;)V"/>
+		<method name="getLeft()I"/>
+		<method name="getMatrix(Landroid/graphics/Matrix;)V"/>
+		<method name="getPivotX()F"/>
+		<method name="getPivotY()F"/>
+		<method name="getRight()I"/>
+		<method name="getRotationX()F"/>
+		<method name="getRotationY()F"/>
+		<method name="getRotationZ()F"/>
+		<method name="getScaleX()F"/>
+		<method name="getScaleY()F"/>
+		<method name="getSpotShadowColor()I"/>
+		<method name="getTop()I"/>
+		<method name="getTranslationX()F"/>
+		<method name="getTranslationY()F"/>
+		<method name="getTranslationZ()F"/>
+		<method name="getUniqueId()J"/>
+		<method name="getUseCompositingLayer()Z"/>
+		<method name="getWidth()I"/>
+		<method name="hasDisplayList()Z"/>
+		<method name="hasIdentityMatrix()Z"/>
+		<method name="hasOverlappingRendering()Z"/>
+		<method name="hasShadow()Z"/>
+		<method name="isForceDarkAllowed()Z"/>
+		<method name="isPivotExplicitlySet()Z"/>
+		<method name="offsetLeftAndRight(I)Z"/>
+		<method name="offsetTopAndBottom(I)Z"/>
+		<method name="resetPivot()Z"/>
+		<method name="setAlpha(F)Z"/>
+		<method name="setAmbientShadowColor(I)Z"/>
+		<method name="setCameraDistance(F)Z"/>
+		<method name="setClipRect(Landroid/graphics/Rect;)Z"/>
+		<method name="setClipToBounds(Z)Z"/>
+		<method name="setClipToOutline(Z)Z"/>
+		<method name="setElevation(F)Z"/>
+		<method name="setForceDarkAllowed(Z)Z"/>
+		<method name="setHasOverlappingRendering(Z)Z"/>
+		<method name="setOutline(Landroid/graphics/Outline;)Z"/>
+		<method name="setPivotX(F)Z"/>
+		<method name="setPivotY(F)Z"/>
+		<method name="setPosition(IIII)Z"/>
+		<method name="setPosition(Landroid/graphics/Rect;)Z"/>
+		<method name="setProjectBackwards(Z)Z"/>
+		<method name="setProjectionReceiver(Z)Z"/>
+		<method name="setRenderEffect(Landroid/graphics/RenderEffect;)Z" since="31"/>
+		<method name="setRotationX(F)Z"/>
+		<method name="setRotationY(F)Z"/>
+		<method name="setRotationZ(F)Z"/>
+		<method name="setScaleX(F)Z"/>
+		<method name="setScaleY(F)Z"/>
+		<method name="setSpotShadowColor(I)Z"/>
+		<method name="setTranslationX(F)Z"/>
+		<method name="setTranslationY(F)Z"/>
+		<method name="setTranslationZ(F)Z"/>
+		<method name="setUseCompositingLayer(ZLandroid/graphics/Paint;)Z"/>
+	</class>
+	<class name="android/graphics/Shader" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="26"/>
+		<method name="getLocalMatrix(Landroid/graphics/Matrix;)Z"/>
+		<method name="setLocalMatrix(Landroid/graphics/Matrix;)V"/>
+	</class>
+	<class name="android/graphics/Shader$TileMode" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/Shader$TileMode;"/>
+		<method name="values()[Landroid/graphics/Shader$TileMode;"/>
+		<field name="CLAMP"/>
+		<field name="DECAL" since="31"/>
+		<field name="MIRROR"/>
+		<field name="REPEAT"/>
+	</class>
+	<class name="android/graphics/SumPathEffect" since="1">
+		<extends name="android/graphics/PathEffect"/>
+		<method name="&lt;init>(Landroid/graphics/PathEffect;Landroid/graphics/PathEffect;)V"/>
+	</class>
+	<class name="android/graphics/SurfaceTexture" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IZ)V" since="19"/>
+		<method name="&lt;init>(Z)V" since="26"/>
+		<method name="attachToGLContext(I)V" since="16"/>
+		<method name="detachFromGLContext()V" since="16"/>
+		<method name="getTimestamp()J" since="14"/>
+		<method name="getTransformMatrix([F)V"/>
+		<method name="isReleased()Z" since="26"/>
+		<method name="release()V" since="14"/>
+		<method name="releaseTexImage()V" since="19"/>
+		<method name="setDefaultBufferSize(II)V" since="15"/>
+		<method name="setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;)V"/>
+		<method name="setOnFrameAvailableListener(Landroid/graphics/SurfaceTexture$OnFrameAvailableListener;Landroid/os/Handler;)V" since="21"/>
+		<method name="updateTexImage()V"/>
+	</class>
+	<class name="android/graphics/SurfaceTexture$OnFrameAvailableListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onFrameAvailable(Landroid/graphics/SurfaceTexture;)V"/>
+	</class>
+	<class name="android/graphics/SurfaceTexture$OutOfResourcesException" since="11" deprecated="19">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="android/graphics/SweepGradient" since="1">
+		<extends name="android/graphics/Shader"/>
+		<method name="&lt;init>(FFII)V"/>
+		<method name="&lt;init>(FFJJ)V" since="29"/>
+		<method name="&lt;init>(FF[I[F)V"/>
+		<method name="&lt;init>(FF[J[F)V" since="29"/>
+	</class>
+	<class name="android/graphics/Typeface" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;"/>
+		<method name="create(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface;" since="28"/>
+		<method name="create(Ljava/lang/String;I)Landroid/graphics/Typeface;"/>
+		<method name="createFromAsset(Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/graphics/Typeface;"/>
+		<method name="createFromFile(Ljava/io/File;)Landroid/graphics/Typeface;" since="4"/>
+		<method name="createFromFile(Ljava/lang/String;)Landroid/graphics/Typeface;" since="4"/>
+		<method name="defaultFromStyle(I)Landroid/graphics/Typeface;"/>
+		<method name="getStyle()I"/>
+		<method name="getWeight()I" since="28"/>
+		<method name="isBold()Z"/>
+		<method name="isItalic()Z"/>
+		<field name="BOLD"/>
+		<field name="BOLD_ITALIC"/>
+		<field name="DEFAULT"/>
+		<field name="DEFAULT_BOLD"/>
+		<field name="ITALIC"/>
+		<field name="MONOSPACE"/>
+		<field name="NORMAL"/>
+		<field name="SANS_SERIF"/>
+		<field name="SERIF"/>
+	</class>
+	<class name="android/graphics/Typeface$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/res/AssetManager;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/graphics/Typeface;"/>
+		<method name="setFallback(Ljava/lang/String;)Landroid/graphics/Typeface$Builder;"/>
+		<method name="setFontVariationSettings(Ljava/lang/String;)Landroid/graphics/Typeface$Builder;"/>
+		<method name="setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/Typeface$Builder;"/>
+		<method name="setItalic(Z)Landroid/graphics/Typeface$Builder;"/>
+		<method name="setTtcIndex(I)Landroid/graphics/Typeface$Builder;"/>
+		<method name="setWeight(I)Landroid/graphics/Typeface$Builder;"/>
+	</class>
+	<class name="android/graphics/Typeface$CustomFallbackBuilder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/fonts/FontFamily;)V"/>
+		<method name="addCustomFallback(Landroid/graphics/fonts/FontFamily;)Landroid/graphics/Typeface$CustomFallbackBuilder;"/>
+		<method name="build()Landroid/graphics/Typeface;"/>
+		<method name="getMaxCustomFallbackCount()I"/>
+		<method name="setStyle(Landroid/graphics/fonts/FontStyle;)Landroid/graphics/Typeface$CustomFallbackBuilder;"/>
+		<method name="setSystemFallback(Ljava/lang/String;)Landroid/graphics/Typeface$CustomFallbackBuilder;"/>
+	</class>
+	<class name="android/graphics/Xfermode" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/graphics/YuvImage" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>([BIII[I)V"/>
+		<method name="compressToJpeg(Landroid/graphics/Rect;ILjava/io/OutputStream;)Z"/>
+		<method name="getHeight()I"/>
+		<method name="getStrides()[I"/>
+		<method name="getWidth()I"/>
+		<method name="getYuvData()[B"/>
+		<method name="getYuvFormat()I"/>
+	</class>
+	<class name="android/graphics/drawable/AdaptiveIconDrawable" since="26">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<implements name="android/graphics/drawable/Drawable$Callback"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getExtraInsetFraction()F"/>
+		<method name="getForeground()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getIconMask()Landroid/graphics/Path;"/>
+		<method name="setOpacity(I)V"/>
+	</class>
+	<class name="android/graphics/drawable/Animatable" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="isRunning()Z"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+	</class>
+	<class name="android/graphics/drawable/Animatable2" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/graphics/drawable/Animatable"/>
+		<method name="clearAnimationCallbacks()V"/>
+		<method name="registerAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)V"/>
+		<method name="unregisterAnimationCallback(Landroid/graphics/drawable/Animatable2$AnimationCallback;)Z"/>
+	</class>
+	<class name="android/graphics/drawable/Animatable2$AnimationCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAnimationEnd(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="onAnimationStart(Landroid/graphics/drawable/Drawable;)V"/>
+	</class>
+	<class name="android/graphics/drawable/AnimatedImageDrawable" since="28">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<implements name="android/graphics/drawable/Animatable2"/>
+		<method name="&lt;init>()V"/>
+		<method name="getRepeatCount()I"/>
+		<method name="setRepeatCount(I)V"/>
+		<field name="REPEAT_INFINITE"/>
+	</class>
+	<class name="android/graphics/drawable/AnimatedStateListDrawable" since="21">
+		<extends name="android/graphics/drawable/StateListDrawable"/>
+		<method name="&lt;init>()V"/>
+		<method name="addState([ILandroid/graphics/drawable/Drawable;I)V"/>
+		<method name="addTransition(IILandroid/graphics/drawable/Drawable;Z)V"/>
+	</class>
+	<class name="android/graphics/drawable/AnimatedVectorDrawable" since="21">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<implements name="android/graphics/drawable/Animatable" removed="23"/>
+		<implements name="android/graphics/drawable/Animatable2" since="23"/>
+		<method name="&lt;init>()V"/>
+		<method name="reset()V" since="23"/>
+	</class>
+	<class name="android/graphics/drawable/AnimationDrawable" since="1">
+		<extends name="android/graphics/drawable/DrawableContainer"/>
+		<implements name="android/graphics/drawable/Animatable" since="4"/>
+		<implements name="java/lang/Runnable"/>
+		<method name="&lt;init>()V"/>
+		<method name="addFrame(Landroid/graphics/drawable/Drawable;I)V"/>
+		<method name="getDuration(I)I"/>
+		<method name="getFrame(I)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getNumberOfFrames()I"/>
+		<method name="isOneShot()Z"/>
+		<method name="isRunning()Z"/>
+		<method name="setOneShot(Z)V"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+	</class>
+	<class name="android/graphics/drawable/BitmapDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;)V" since="4" deprecated="18"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;)V" since="4"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;Ljava/io/InputStream;)V" since="5"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;Ljava/lang/String;)V" since="5"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="15"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="15"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="15"/>
+		<method name="getBitmap()Landroid/graphics/Bitmap;"/>
+		<method name="getGravity()I"/>
+		<method name="getPaint()Landroid/graphics/Paint;"/>
+		<method name="getTileModeX()Landroid/graphics/Shader$TileMode;"/>
+		<method name="getTileModeY()Landroid/graphics/Shader$TileMode;"/>
+		<method name="hasAntiAlias()Z" since="18"/>
+		<method name="hasMipMap()Z" since="18"/>
+		<method name="setAntiAlias(Z)V"/>
+		<method name="setBitmap(Landroid/graphics/Bitmap;)V" since="31"/>
+		<method name="setGravity(I)V"/>
+		<method name="setMipMap(Z)V" since="18"/>
+		<method name="setTargetDensity(I)V" since="4"/>
+		<method name="setTargetDensity(Landroid/graphics/Canvas;)V" since="4"/>
+		<method name="setTargetDensity(Landroid/util/DisplayMetrics;)V" since="4"/>
+		<method name="setTileModeX(Landroid/graphics/Shader$TileMode;)V"/>
+		<method name="setTileModeXY(Landroid/graphics/Shader$TileMode;Landroid/graphics/Shader$TileMode;)V"/>
+		<method name="setTileModeY(Landroid/graphics/Shader$TileMode;)V"/>
+	</class>
+	<class name="android/graphics/drawable/ClipDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23"/>
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;II)V"/>
+		<field name="HORIZONTAL"/>
+		<field name="VERTICAL"/>
+	</class>
+	<class name="android/graphics/drawable/ColorDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getAlpha()I"/>
+		<method name="getColor()I" since="11"/>
+		<method name="setColor(I)V" since="11"/>
+	</class>
+	<class name="android/graphics/drawable/ColorStateListDrawable" since="29">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<implements name="android/graphics/drawable/Drawable$Callback"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/res/ColorStateList;)V"/>
+		<method name="clearAlpha()V"/>
+		<method name="getColorStateList()Landroid/content/res/ColorStateList;"/>
+		<method name="hasFocusStateSpecified()Z"/>
+		<method name="setColorStateList(Landroid/content/res/ColorStateList;)V"/>
+	</class>
+	<class name="android/graphics/drawable/Drawable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="applyTheme(Landroid/content/res/Resources$Theme;)V" since="21"/>
+		<method name="canApplyTheme()Z" since="21"/>
+		<method name="clearColorFilter()V"/>
+		<method name="copyBounds()Landroid/graphics/Rect;"/>
+		<method name="copyBounds(Landroid/graphics/Rect;)V"/>
+		<method name="createFromPath(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="createFromResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Ljava/lang/String;)Landroid/graphics/drawable/Drawable;" since="4"/>
+		<method name="createFromResourceStream(Landroid/content/res/Resources;Landroid/util/TypedValue;Ljava/io/InputStream;Ljava/lang/String;Landroid/graphics/BitmapFactory$Options;)Landroid/graphics/drawable/Drawable;" since="5" deprecated="28"/>
+		<method name="createFromStream(Ljava/io/InputStream;Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="createFromXml(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="createFromXmlInner(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
+		<method name="draw(Landroid/graphics/Canvas;)V"/>
+		<method name="getAlpha()I" since="19"/>
+		<method name="getBounds()Landroid/graphics/Rect;"/>
+		<method name="getCallback()Landroid/graphics/drawable/Drawable$Callback;" since="11"/>
+		<method name="getChangingConfigurations()I"/>
+		<method name="getColorFilter()Landroid/graphics/ColorFilter;" since="21"/>
+		<method name="getConstantState()Landroid/graphics/drawable/Drawable$ConstantState;"/>
+		<method name="getCurrent()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getDirtyBounds()Landroid/graphics/Rect;" since="21"/>
+		<method name="getHotspotBounds(Landroid/graphics/Rect;)V" since="23"/>
+		<method name="getIntrinsicHeight()I"/>
+		<method name="getIntrinsicWidth()I"/>
+		<method name="getLayoutDirection()I" since="23"/>
+		<method name="getLevel()I"/>
+		<method name="getMinimumHeight()I"/>
+		<method name="getMinimumWidth()I"/>
+		<method name="getOpacity()I" deprecated="29"/>
+		<method name="getOpticalInsets()Landroid/graphics/Insets;" since="29"/>
+		<method name="getOutline(Landroid/graphics/Outline;)V" since="21"/>
+		<method name="getPadding(Landroid/graphics/Rect;)Z"/>
+		<method name="getState()[I"/>
+		<method name="getTransparentRegion()Landroid/graphics/Region;"/>
+		<method name="hasFocusStateSpecified()Z" since="31"/>
+		<method name="inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)V"/>
+		<method name="inflate(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;Landroid/content/res/Resources$Theme;)V" since="21"/>
+		<method name="invalidateSelf()V"/>
+		<method name="isAutoMirrored()Z" since="19"/>
+		<method name="isFilterBitmap()Z" since="23"/>
+		<method name="isProjected()Z" since="29"/>
+		<method name="isStateful()Z"/>
+		<method name="isVisible()Z"/>
+		<method name="jumpToCurrentState()V" since="11"/>
+		<method name="mutate()Landroid/graphics/drawable/Drawable;" since="3"/>
+		<method name="onBoundsChange(Landroid/graphics/Rect;)V"/>
+		<method name="onLayoutDirectionChanged(I)Z" since="23"/>
+		<method name="onLevelChange(I)Z"/>
+		<method name="onStateChange([I)Z"/>
+		<method name="resolveOpacity(II)I"/>
+		<method name="scheduleSelf(Ljava/lang/Runnable;J)V"/>
+		<method name="setAlpha(I)V"/>
+		<method name="setAutoMirrored(Z)V" since="19"/>
+		<method name="setBounds(IIII)V"/>
+		<method name="setBounds(Landroid/graphics/Rect;)V"/>
+		<method name="setCallback(Landroid/graphics/drawable/Drawable$Callback;)V"/>
+		<method name="setChangingConfigurations(I)V"/>
+		<method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V" deprecated="29"/>
+		<method name="setColorFilter(Landroid/graphics/ColorFilter;)V"/>
+		<method name="setDither(Z)V" deprecated="23"/>
+		<method name="setFilterBitmap(Z)V"/>
+		<method name="setHotspot(FF)V" since="21"/>
+		<method name="setHotspotBounds(IIII)V" since="21"/>
+		<method name="setLayoutDirection(I)Z" since="23"/>
+		<method name="setLevel(I)Z"/>
+		<method name="setState([I)Z"/>
+		<method name="setTint(I)V" since="21"/>
+		<method name="setTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setVisible(ZZ)Z"/>
+		<method name="unscheduleSelf(Ljava/lang/Runnable;)V"/>
+	</class>
+	<class name="android/graphics/drawable/Drawable$Callback" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="invalidateDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="scheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;J)V"/>
+		<method name="unscheduleDrawable(Landroid/graphics/drawable/Drawable;Ljava/lang/Runnable;)V"/>
+	</class>
+	<class name="android/graphics/drawable/Drawable$ConstantState" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="canApplyTheme()Z" since="21"/>
+		<method name="getChangingConfigurations()I"/>
+		<method name="newDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="newDrawable(Landroid/content/res/Resources;)Landroid/graphics/drawable/Drawable;" since="5"/>
+		<method name="newDrawable(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;" since="21"/>
+	</class>
+	<class name="android/graphics/drawable/DrawableContainer" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<implements name="android/graphics/drawable/Drawable$Callback"/>
+		<method name="&lt;init>()V"/>
+		<method name="selectDrawable(I)Z"/>
+		<method name="setConstantState(Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;)V"/>
+		<method name="setEnterFadeDuration(I)V" since="11"/>
+		<method name="setExitFadeDuration(I)V" since="11"/>
+	</class>
+	<class name="android/graphics/drawable/DrawableContainer$DrawableContainerState" since="1">
+		<extends name="android/graphics/drawable/Drawable$ConstantState"/>
+		<method name="addChild(Landroid/graphics/drawable/Drawable;)I"/>
+		<method name="canConstantState()Z"/>
+		<method name="computeConstantSize()V" since="11"/>
+		<method name="getChild(I)Landroid/graphics/drawable/Drawable;" since="19"/>
+		<method name="getChildCount()I"/>
+		<method name="getChildren()[Landroid/graphics/drawable/Drawable;"/>
+		<method name="getConstantHeight()I"/>
+		<method name="getConstantMinimumHeight()I"/>
+		<method name="getConstantMinimumWidth()I"/>
+		<method name="getConstantPadding()Landroid/graphics/Rect;"/>
+		<method name="getConstantWidth()I"/>
+		<method name="getEnterFadeDuration()I" since="11"/>
+		<method name="getExitFadeDuration()I" since="11"/>
+		<method name="getOpacity()I"/>
+		<method name="growArray(II)V"/>
+		<method name="isConstantSize()Z"/>
+		<method name="isStateful()Z"/>
+		<method name="setConstantSize(Z)V"/>
+		<method name="setEnterFadeDuration(I)V" since="11"/>
+		<method name="setExitFadeDuration(I)V" since="11"/>
+		<method name="setVariablePadding(Z)V"/>
+	</class>
+	<class name="android/graphics/drawable/DrawableWrapper" since="23">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<implements name="android/graphics/drawable/Drawable$Callback"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="setDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+	</class>
+	<class name="android/graphics/drawable/GradientDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/GradientDrawable$Orientation;[I)V"/>
+		<method name="getColor()Landroid/content/res/ColorStateList;" since="24"/>
+		<method name="getColors()[I" since="24"/>
+		<method name="getCornerRadii()[F" since="24"/>
+		<method name="getCornerRadius()F" since="24"/>
+		<method name="getGradientCenterX()F" since="24"/>
+		<method name="getGradientCenterY()F" since="24"/>
+		<method name="getGradientRadius()F" since="21"/>
+		<method name="getGradientType()I" since="24"/>
+		<method name="getInnerRadius()I" since="29"/>
+		<method name="getInnerRadiusRatio()F" since="29"/>
+		<method name="getOrientation()Landroid/graphics/drawable/GradientDrawable$Orientation;" since="16"/>
+		<method name="getShape()I" since="24"/>
+		<method name="getThickness()I" since="29"/>
+		<method name="getThicknessRatio()F" since="29"/>
+		<method name="getUseLevel()Z" since="24"/>
+		<method name="setColor(I)V"/>
+		<method name="setColor(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setColors([I)V" since="16"/>
+		<method name="setColors([I[F)V" since="29"/>
+		<method name="setCornerRadii([F)V"/>
+		<method name="setCornerRadius(F)V"/>
+		<method name="setGradientCenter(FF)V"/>
+		<method name="setGradientRadius(F)V"/>
+		<method name="setGradientType(I)V"/>
+		<method name="setInnerRadius(I)V" since="29"/>
+		<method name="setInnerRadiusRatio(F)V" since="29"/>
+		<method name="setOrientation(Landroid/graphics/drawable/GradientDrawable$Orientation;)V" since="16"/>
+		<method name="setPadding(IIII)V" since="29"/>
+		<method name="setShape(I)V"/>
+		<method name="setSize(II)V"/>
+		<method name="setStroke(II)V"/>
+		<method name="setStroke(IIFF)V"/>
+		<method name="setStroke(ILandroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setStroke(ILandroid/content/res/ColorStateList;FF)V" since="21"/>
+		<method name="setThickness(I)V" since="29"/>
+		<method name="setThicknessRatio(F)V" since="29"/>
+		<method name="setUseLevel(Z)V"/>
+		<field name="LINE"/>
+		<field name="LINEAR_GRADIENT"/>
+		<field name="OVAL"/>
+		<field name="RADIAL_GRADIENT"/>
+		<field name="RECTANGLE"/>
+		<field name="RING"/>
+		<field name="SWEEP_GRADIENT"/>
+	</class>
+	<class name="android/graphics/drawable/GradientDrawable$Orientation" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/graphics/drawable/GradientDrawable$Orientation;"/>
+		<method name="values()[Landroid/graphics/drawable/GradientDrawable$Orientation;"/>
+		<field name="BL_TR"/>
+		<field name="BOTTOM_TOP"/>
+		<field name="BR_TL"/>
+		<field name="LEFT_RIGHT"/>
+		<field name="RIGHT_LEFT"/>
+		<field name="TL_BR"/>
+		<field name="TOP_BOTTOM"/>
+		<field name="TR_BL"/>
+	</class>
+	<class name="android/graphics/drawable/Icon" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createWithAdaptiveBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;" since="26"/>
+		<method name="createWithAdaptiveBitmapContentUri(Landroid/net/Uri;)Landroid/graphics/drawable/Icon;" since="30"/>
+		<method name="createWithAdaptiveBitmapContentUri(Ljava/lang/String;)Landroid/graphics/drawable/Icon;" since="30"/>
+		<method name="createWithBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/drawable/Icon;"/>
+		<method name="createWithContentUri(Landroid/net/Uri;)Landroid/graphics/drawable/Icon;"/>
+		<method name="createWithContentUri(Ljava/lang/String;)Landroid/graphics/drawable/Icon;"/>
+		<method name="createWithData([BII)Landroid/graphics/drawable/Icon;"/>
+		<method name="createWithFilePath(Ljava/lang/String;)Landroid/graphics/drawable/Icon;"/>
+		<method name="createWithResource(Landroid/content/Context;I)Landroid/graphics/drawable/Icon;"/>
+		<method name="createWithResource(Ljava/lang/String;I)Landroid/graphics/drawable/Icon;"/>
+		<method name="getResId()I" since="28"/>
+		<method name="getResPackage()Ljava/lang/String;" since="28"/>
+		<method name="getType()I" since="28"/>
+		<method name="getUri()Landroid/net/Uri;" since="28"/>
+		<method name="loadDrawable(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadDrawableAsync(Landroid/content/Context;Landroid/graphics/drawable/Icon$OnDrawableLoadedListener;Landroid/os/Handler;)V"/>
+		<method name="loadDrawableAsync(Landroid/content/Context;Landroid/os/Message;)V"/>
+		<method name="setTint(I)Landroid/graphics/drawable/Icon;"/>
+		<method name="setTintBlendMode(Landroid/graphics/BlendMode;)Landroid/graphics/drawable/Icon;" since="29"/>
+		<method name="setTintList(Landroid/content/res/ColorStateList;)Landroid/graphics/drawable/Icon;"/>
+		<method name="setTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/graphics/drawable/Icon;"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_ADAPTIVE_BITMAP" since="28"/>
+		<field name="TYPE_BITMAP" since="28"/>
+		<field name="TYPE_DATA" since="28"/>
+		<field name="TYPE_RESOURCE" since="28"/>
+		<field name="TYPE_URI" since="28"/>
+		<field name="TYPE_URI_ADAPTIVE_BITMAP" since="30"/>
+	</class>
+	<class name="android/graphics/drawable/Icon$OnDrawableLoadedListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onDrawableLoaded(Landroid/graphics/drawable/Drawable;)V"/>
+	</class>
+	<class name="android/graphics/drawable/InsetDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23"/>
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;F)V" since="26"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;FFFF)V" since="26"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;I)V"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;IIII)V"/>
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="19" removed="23"/>
+	</class>
+	<class name="android/graphics/drawable/LayerDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<implements name="android/graphics/drawable/Drawable$Callback"/>
+		<method name="&lt;init>([Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="addLayer(Landroid/graphics/drawable/Drawable;)I" since="23"/>
+		<method name="findDrawableByLayerId(I)Landroid/graphics/drawable/Drawable;"/>
+		<method name="findIndexByLayerId(I)I" since="23"/>
+		<method name="getBottomPadding()I" since="23"/>
+		<method name="getDrawable(I)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getEndPadding()I" since="23"/>
+		<method name="getId(I)I"/>
+		<method name="getLayerGravity(I)I" since="23"/>
+		<method name="getLayerHeight(I)I" since="23"/>
+		<method name="getLayerInsetBottom(I)I" since="23"/>
+		<method name="getLayerInsetEnd(I)I" since="23"/>
+		<method name="getLayerInsetLeft(I)I" since="23"/>
+		<method name="getLayerInsetRight(I)I" since="23"/>
+		<method name="getLayerInsetStart(I)I" since="23"/>
+		<method name="getLayerInsetTop(I)I" since="23"/>
+		<method name="getLayerWidth(I)I" since="23"/>
+		<method name="getLeftPadding()I" since="23"/>
+		<method name="getNumberOfLayers()I"/>
+		<method name="getPaddingMode()I" since="21"/>
+		<method name="getRightPadding()I" since="23"/>
+		<method name="getStartPadding()I" since="23"/>
+		<method name="getTopPadding()I" since="23"/>
+		<method name="setDrawable(ILandroid/graphics/drawable/Drawable;)V" since="23"/>
+		<method name="setDrawableByLayerId(ILandroid/graphics/drawable/Drawable;)Z"/>
+		<method name="setId(II)V"/>
+		<method name="setLayerGravity(II)V" since="23"/>
+		<method name="setLayerHeight(II)V" since="23"/>
+		<method name="setLayerInset(IIIII)V"/>
+		<method name="setLayerInsetBottom(II)V" since="23"/>
+		<method name="setLayerInsetEnd(II)V" since="23"/>
+		<method name="setLayerInsetLeft(II)V" since="23"/>
+		<method name="setLayerInsetRelative(IIIII)V" since="23"/>
+		<method name="setLayerInsetRight(II)V" since="23"/>
+		<method name="setLayerInsetStart(II)V" since="23"/>
+		<method name="setLayerInsetTop(II)V" since="23"/>
+		<method name="setLayerSize(III)V" since="23"/>
+		<method name="setLayerWidth(II)V" since="23"/>
+		<method name="setOpacity(I)V" since="11"/>
+		<method name="setPadding(IIII)V" since="23"/>
+		<method name="setPaddingMode(I)V" since="21"/>
+		<method name="setPaddingRelative(IIII)V" since="23"/>
+		<field name="INSET_UNDEFINED" since="24"/>
+		<field name="PADDING_MODE_NEST" since="21"/>
+		<field name="PADDING_MODE_STACK" since="21"/>
+	</class>
+	<class name="android/graphics/drawable/LevelListDrawable" since="1">
+		<extends name="android/graphics/drawable/DrawableContainer"/>
+		<method name="&lt;init>()V"/>
+		<method name="addLevel(IILandroid/graphics/drawable/Drawable;)V"/>
+	</class>
+	<class name="android/graphics/drawable/NinePatchDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" since="4"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/graphics/NinePatch;)V" since="4"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;[BLandroid/graphics/Rect;Ljava/lang/String;)V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/graphics/NinePatch;)V" deprecated="15"/>
+		<method name="getPaint()Landroid/graphics/Paint;"/>
+		<method name="setTargetDensity(I)V" since="4"/>
+		<method name="setTargetDensity(Landroid/graphics/Canvas;)V" since="4"/>
+		<method name="setTargetDensity(Landroid/util/DisplayMetrics;)V" since="4"/>
+	</class>
+	<class name="android/graphics/drawable/PaintDrawable" since="1">
+		<extends name="android/graphics/drawable/ShapeDrawable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="setCornerRadii([F)V"/>
+		<method name="setCornerRadius(F)V"/>
+	</class>
+	<class name="android/graphics/drawable/PictureDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<method name="&lt;init>(Landroid/graphics/Picture;)V"/>
+		<method name="getPicture()Landroid/graphics/Picture;"/>
+		<method name="setPicture(Landroid/graphics/Picture;)V"/>
+	</class>
+	<class name="android/graphics/drawable/RippleDrawable" since="21">
+		<extends name="android/graphics/drawable/LayerDrawable"/>
+		<method name="&lt;init>(Landroid/content/res/ColorStateList;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="getEffectColor()Landroid/content/res/ColorStateList;" since="31"/>
+		<method name="getRadius()I" since="23"/>
+		<method name="setColor(Landroid/content/res/ColorStateList;)V"/>
+		<method name="setEffectColor(Landroid/content/res/ColorStateList;)V" since="31"/>
+		<method name="setRadius(I)V" since="23"/>
+		<field name="RADIUS_AUTO" since="23"/>
+	</class>
+	<class name="android/graphics/drawable/RotateDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23"/>
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="3" removed="23"/>
+		<method name="getFromDegrees()F" since="21"/>
+		<method name="getPivotX()F" since="21"/>
+		<method name="getPivotY()F" since="21"/>
+		<method name="getToDegrees()F" since="21"/>
+		<method name="isPivotXRelative()Z" since="21"/>
+		<method name="isPivotYRelative()Z" since="21"/>
+		<method name="setDrawable(Landroid/graphics/drawable/Drawable;)V" since="21" removed="23"/>
+		<method name="setFromDegrees(F)V" since="21"/>
+		<method name="setPivotX(F)V" since="21"/>
+		<method name="setPivotXRelative(Z)V" since="21"/>
+		<method name="setPivotY(F)V" since="21"/>
+		<method name="setPivotYRelative(Z)V" since="21"/>
+		<method name="setToDegrees(F)V" since="21"/>
+	</class>
+	<class name="android/graphics/drawable/ScaleDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable" removed="23"/>
+		<extends name="android/graphics/drawable/DrawableWrapper" since="23"/>
+		<implements name="android/graphics/drawable/Drawable$Callback" removed="23"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;IFF)V"/>
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;" since="3" removed="23"/>
+	</class>
+	<class name="android/graphics/drawable/ShapeDrawable" since="1">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/shapes/Shape;)V"/>
+		<method name="getPaint()Landroid/graphics/Paint;"/>
+		<method name="getShaderFactory()Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;"/>
+		<method name="getShape()Landroid/graphics/drawable/shapes/Shape;"/>
+		<method name="inflateTag(Ljava/lang/String;Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/util/AttributeSet;)Z"/>
+		<method name="onDraw(Landroid/graphics/drawable/shapes/Shape;Landroid/graphics/Canvas;Landroid/graphics/Paint;)V"/>
+		<method name="setIntrinsicHeight(I)V"/>
+		<method name="setIntrinsicWidth(I)V"/>
+		<method name="setPadding(IIII)V"/>
+		<method name="setPadding(Landroid/graphics/Rect;)V"/>
+		<method name="setShaderFactory(Landroid/graphics/drawable/ShapeDrawable$ShaderFactory;)V"/>
+		<method name="setShape(Landroid/graphics/drawable/shapes/Shape;)V"/>
+	</class>
+	<class name="android/graphics/drawable/ShapeDrawable$ShaderFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="resize(II)Landroid/graphics/Shader;"/>
+	</class>
+	<class name="android/graphics/drawable/StateListDrawable" since="1">
+		<extends name="android/graphics/drawable/DrawableContainer"/>
+		<method name="&lt;init>()V"/>
+		<method name="addState([ILandroid/graphics/drawable/Drawable;)V"/>
+		<method name="findStateDrawableIndex([I)I" since="29"/>
+		<method name="getStateCount()I" since="29"/>
+		<method name="getStateDrawable(I)Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getStateSet(I)[I" since="29"/>
+	</class>
+	<class name="android/graphics/drawable/TransitionDrawable" since="1">
+		<extends name="android/graphics/drawable/LayerDrawable"/>
+		<method name="&lt;init>([Landroid/graphics/drawable/Drawable;)V" since="3"/>
+		<method name="isCrossFadeEnabled()Z"/>
+		<method name="resetTransition()V"/>
+		<method name="reverseTransition(I)V"/>
+		<method name="setCrossFadeEnabled(Z)V"/>
+		<method name="startTransition(I)V"/>
+	</class>
+	<class name="android/graphics/drawable/VectorDrawable" since="21">
+		<extends name="android/graphics/drawable/Drawable"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/graphics/drawable/shapes/ArcShape" since="1">
+		<extends name="android/graphics/drawable/shapes/RectShape"/>
+		<method name="&lt;init>(FF)V"/>
+		<method name="clone()Landroid/graphics/drawable/shapes/ArcShape;" since="26"/>
+		<method name="getStartAngle()F" since="26"/>
+		<method name="getSweepAngle()F" since="26"/>
+	</class>
+	<class name="android/graphics/drawable/shapes/OvalShape" since="1">
+		<extends name="android/graphics/drawable/shapes/RectShape"/>
+		<method name="&lt;init>()V"/>
+		<method name="clone()Landroid/graphics/drawable/shapes/OvalShape;" since="26"/>
+	</class>
+	<class name="android/graphics/drawable/shapes/PathShape" since="1">
+		<extends name="android/graphics/drawable/shapes/Shape"/>
+		<method name="&lt;init>(Landroid/graphics/Path;FF)V"/>
+		<method name="clone()Landroid/graphics/drawable/shapes/PathShape;" since="3"/>
+	</class>
+	<class name="android/graphics/drawable/shapes/RectShape" since="1">
+		<extends name="android/graphics/drawable/shapes/Shape"/>
+		<method name="&lt;init>()V"/>
+		<method name="clone()Landroid/graphics/drawable/shapes/RectShape;" since="3"/>
+		<method name="rect()Landroid/graphics/RectF;"/>
+	</class>
+	<class name="android/graphics/drawable/shapes/RoundRectShape" since="1">
+		<extends name="android/graphics/drawable/shapes/RectShape"/>
+		<method name="&lt;init>([FLandroid/graphics/RectF;[F)V"/>
+		<method name="clone()Landroid/graphics/drawable/shapes/RoundRectShape;" since="3"/>
+	</class>
+	<class name="android/graphics/drawable/shapes/Shape" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="clone()Landroid/graphics/drawable/shapes/Shape;" since="3"/>
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Paint;)V"/>
+		<method name="getHeight()F"/>
+		<method name="getOutline(Landroid/graphics/Outline;)V" since="21"/>
+		<method name="getWidth()F"/>
+		<method name="hasAlpha()Z"/>
+		<method name="onResize(FF)V"/>
+		<method name="resize(FF)V"/>
+	</class>
+	<class name="android/graphics/fonts/Font" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getAxes()[Landroid/graphics/fonts/FontVariationAxis;"/>
+		<method name="getBuffer()Ljava/nio/ByteBuffer;"/>
+		<method name="getFile()Ljava/io/File;"/>
+		<method name="getGlyphBounds(ILandroid/graphics/Paint;Landroid/graphics/RectF;)F" since="31"/>
+		<method name="getLocaleList()Landroid/os/LocaleList;"/>
+		<method name="getMetrics(Landroid/graphics/Paint;Landroid/graphics/Paint$FontMetrics;)V" since="31"/>
+		<method name="getSourceIdentifier()I" since="31"/>
+		<method name="getStyle()Landroid/graphics/fonts/FontStyle;"/>
+		<method name="getTtcIndex()I"/>
+	</class>
+	<class name="android/graphics/fonts/Font$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/res/AssetManager;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;I)V"/>
+		<method name="&lt;init>(Landroid/graphics/fonts/Font;)V" since="31"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;JJ)V"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/nio/ByteBuffer;)V"/>
+		<method name="build()Landroid/graphics/fonts/Font;"/>
+		<method name="setFontVariationSettings(Ljava/lang/String;)Landroid/graphics/fonts/Font$Builder;"/>
+		<method name="setFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Landroid/graphics/fonts/Font$Builder;"/>
+		<method name="setSlant(I)Landroid/graphics/fonts/Font$Builder;"/>
+		<method name="setTtcIndex(I)Landroid/graphics/fonts/Font$Builder;"/>
+		<method name="setWeight(I)Landroid/graphics/fonts/Font$Builder;"/>
+	</class>
+	<class name="android/graphics/fonts/FontFamily" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getFont(I)Landroid/graphics/fonts/Font;"/>
+		<method name="getSize()I"/>
+	</class>
+	<class name="android/graphics/fonts/FontFamily$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/fonts/Font;)V"/>
+		<method name="addFont(Landroid/graphics/fonts/Font;)Landroid/graphics/fonts/FontFamily$Builder;"/>
+		<method name="build()Landroid/graphics/fonts/FontFamily;"/>
+	</class>
+	<class name="android/graphics/fonts/FontStyle" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getSlant()I"/>
+		<method name="getWeight()I"/>
+		<field name="FONT_SLANT_ITALIC"/>
+		<field name="FONT_SLANT_UPRIGHT"/>
+		<field name="FONT_WEIGHT_BLACK"/>
+		<field name="FONT_WEIGHT_BOLD"/>
+		<field name="FONT_WEIGHT_EXTRA_BOLD"/>
+		<field name="FONT_WEIGHT_EXTRA_LIGHT"/>
+		<field name="FONT_WEIGHT_LIGHT"/>
+		<field name="FONT_WEIGHT_MAX"/>
+		<field name="FONT_WEIGHT_MEDIUM"/>
+		<field name="FONT_WEIGHT_MIN"/>
+		<field name="FONT_WEIGHT_NORMAL"/>
+		<field name="FONT_WEIGHT_SEMI_BOLD"/>
+		<field name="FONT_WEIGHT_THIN"/>
+	</class>
+	<class name="android/graphics/fonts/FontVariationAxis" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;F)V"/>
+		<method name="fromFontVariationSettings(Ljava/lang/String;)[Landroid/graphics/fonts/FontVariationAxis;"/>
+		<method name="getStyleValue()F"/>
+		<method name="getTag()Ljava/lang/String;"/>
+		<method name="toFontVariationSettings([Landroid/graphics/fonts/FontVariationAxis;)Ljava/lang/String;"/>
+	</class>
+	<class name="android/graphics/fonts/SystemFonts" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getAvailableFonts()Ljava/util/Set;"/>
+	</class>
+	<class name="android/graphics/pdf/PdfDocument" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="close()V"/>
+		<method name="finishPage(Landroid/graphics/pdf/PdfDocument$Page;)V"/>
+		<method name="getPages()Ljava/util/List;"/>
+		<method name="startPage(Landroid/graphics/pdf/PdfDocument$PageInfo;)Landroid/graphics/pdf/PdfDocument$Page;"/>
+		<method name="writeTo(Ljava/io/OutputStream;)V"/>
+	</class>
+	<class name="android/graphics/pdf/PdfDocument$Page" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getCanvas()Landroid/graphics/Canvas;"/>
+		<method name="getInfo()Landroid/graphics/pdf/PdfDocument$PageInfo;"/>
+	</class>
+	<class name="android/graphics/pdf/PdfDocument$PageInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getContentRect()Landroid/graphics/Rect;"/>
+		<method name="getPageHeight()I"/>
+		<method name="getPageNumber()I"/>
+		<method name="getPageWidth()I"/>
+	</class>
+	<class name="android/graphics/pdf/PdfDocument$PageInfo$Builder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="create()Landroid/graphics/pdf/PdfDocument$PageInfo;"/>
+		<method name="setContentRect(Landroid/graphics/Rect;)Landroid/graphics/pdf/PdfDocument$PageInfo$Builder;"/>
+	</class>
+	<class name="android/graphics/pdf/PdfRenderer" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
+		<method name="getPageCount()I"/>
+		<method name="openPage(I)Landroid/graphics/pdf/PdfRenderer$Page;"/>
+		<method name="shouldScaleForPrinting()Z"/>
+	</class>
+	<class name="android/graphics/pdf/PdfRenderer$Page" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getHeight()I"/>
+		<method name="getIndex()I"/>
+		<method name="getWidth()I"/>
+		<method name="render(Landroid/graphics/Bitmap;Landroid/graphics/Rect;Landroid/graphics/Matrix;I)V"/>
+		<field name="RENDER_MODE_FOR_DISPLAY"/>
+		<field name="RENDER_MODE_FOR_PRINT"/>
+	</class>
+	<class name="android/graphics/text/LineBreaker" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="computeLineBreaks(Landroid/graphics/text/MeasuredText;Landroid/graphics/text/LineBreaker$ParagraphConstraints;I)Landroid/graphics/text/LineBreaker$Result;"/>
+		<field name="BREAK_STRATEGY_BALANCED"/>
+		<field name="BREAK_STRATEGY_HIGH_QUALITY"/>
+		<field name="BREAK_STRATEGY_SIMPLE"/>
+		<field name="HYPHENATION_FREQUENCY_FULL"/>
+		<field name="HYPHENATION_FREQUENCY_NONE"/>
+		<field name="HYPHENATION_FREQUENCY_NORMAL"/>
+		<field name="JUSTIFICATION_MODE_INTER_WORD"/>
+		<field name="JUSTIFICATION_MODE_NONE"/>
+	</class>
+	<class name="android/graphics/text/LineBreaker$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/graphics/text/LineBreaker;"/>
+		<method name="setBreakStrategy(I)Landroid/graphics/text/LineBreaker$Builder;"/>
+		<method name="setHyphenationFrequency(I)Landroid/graphics/text/LineBreaker$Builder;"/>
+		<method name="setIndents([I)Landroid/graphics/text/LineBreaker$Builder;"/>
+		<method name="setJustificationMode(I)Landroid/graphics/text/LineBreaker$Builder;"/>
+	</class>
+	<class name="android/graphics/text/LineBreaker$ParagraphConstraints" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDefaultTabStop()F"/>
+		<method name="getFirstWidth()F"/>
+		<method name="getFirstWidthLineCount()I"/>
+		<method name="getTabStops()[F"/>
+		<method name="getWidth()F"/>
+		<method name="setIndent(FI)V"/>
+		<method name="setTabStops([FF)V"/>
+		<method name="setWidth(F)V"/>
+	</class>
+	<class name="android/graphics/text/LineBreaker$Result" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getEndLineHyphenEdit(I)I"/>
+		<method name="getLineAscent(I)F"/>
+		<method name="getLineBreakOffset(I)I"/>
+		<method name="getLineCount()I"/>
+		<method name="getLineDescent(I)F"/>
+		<method name="getLineWidth(I)F"/>
+		<method name="getStartLineHyphenEdit(I)I"/>
+		<method name="hasLineTab(I)Z"/>
+	</class>
+	<class name="android/graphics/text/MeasuredText" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getBounds(IILandroid/graphics/Rect;)V"/>
+		<method name="getCharWidthAt(I)F"/>
+		<method name="getWidth(II)F"/>
+	</class>
+	<class name="android/graphics/text/MeasuredText$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/text/MeasuredText;)V"/>
+		<method name="&lt;init>([C)V"/>
+		<method name="appendReplacementRun(Landroid/graphics/Paint;IF)Landroid/graphics/text/MeasuredText$Builder;"/>
+		<method name="appendStyleRun(Landroid/graphics/Paint;IZ)Landroid/graphics/text/MeasuredText$Builder;"/>
+		<method name="build()Landroid/graphics/text/MeasuredText;"/>
+		<method name="setComputeHyphenation(Z)Landroid/graphics/text/MeasuredText$Builder;"/>
+		<method name="setComputeLayout(Z)Landroid/graphics/text/MeasuredText$Builder;"/>
+	</class>
+	<class name="android/graphics/text/PositionedGlyphs" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getAdvance()F"/>
+		<method name="getAscent()F"/>
+		<method name="getDescent()F"/>
+		<method name="getFont(I)Landroid/graphics/fonts/Font;"/>
+		<method name="getGlyphId(I)I"/>
+		<method name="getGlyphX(I)F"/>
+		<method name="getGlyphY(I)F"/>
+		<method name="getOffsetX()F"/>
+		<method name="getOffsetY()F"/>
+		<method name="glyphCount()I"/>
+	</class>
+	<class name="android/graphics/text/TextRunShaper" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="shapeTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)Landroid/graphics/text/PositionedGlyphs;"/>
+		<method name="shapeTextRun([CIIIIFFZLandroid/graphics/Paint;)Landroid/graphics/text/PositionedGlyphs;"/>
+	</class>
+	<class name="android/hardware/BatteryState" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getCapacity()F"/>
+		<method name="getStatus()I"/>
+		<method name="isPresent()Z"/>
+		<field name="STATUS_CHARGING"/>
+		<field name="STATUS_DISCHARGING"/>
+		<field name="STATUS_FULL"/>
+		<field name="STATUS_NOT_CHARGING"/>
+		<field name="STATUS_UNKNOWN"/>
+	</class>
+	<class name="android/hardware/Camera" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="addCallbackBuffer([B)V" since="8" deprecated="29"/>
+		<method name="autoFocus(Landroid/hardware/Camera$AutoFocusCallback;)V" deprecated="29"/>
+		<method name="cancelAutoFocus()V" since="5" deprecated="29"/>
+		<method name="enableShutterSound(Z)Z" since="17" deprecated="29"/>
+		<method name="getCameraInfo(ILandroid/hardware/Camera$CameraInfo;)V" since="9" deprecated="29"/>
+		<method name="getNumberOfCameras()I" since="9" deprecated="29"/>
+		<method name="getParameters()Landroid/hardware/Camera$Parameters;" deprecated="29"/>
+		<method name="lock()V" since="5" deprecated="29"/>
+		<method name="open()Landroid/hardware/Camera;" deprecated="29"/>
+		<method name="open(I)Landroid/hardware/Camera;" since="9" deprecated="29"/>
+		<method name="reconnect()V" since="8" deprecated="29"/>
+		<method name="release()V" deprecated="29"/>
+		<method name="setAutoFocusMoveCallback(Landroid/hardware/Camera$AutoFocusMoveCallback;)V" since="16" deprecated="29"/>
+		<method name="setDisplayOrientation(I)V" since="8" deprecated="29"/>
+		<method name="setErrorCallback(Landroid/hardware/Camera$ErrorCallback;)V" deprecated="29"/>
+		<method name="setFaceDetectionListener(Landroid/hardware/Camera$FaceDetectionListener;)V" since="14" deprecated="29"/>
+		<method name="setOneShotPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" since="3" deprecated="29"/>
+		<method name="setParameters(Landroid/hardware/Camera$Parameters;)V" deprecated="29"/>
+		<method name="setPreviewCallback(Landroid/hardware/Camera$PreviewCallback;)V" deprecated="29"/>
+		<method name="setPreviewCallbackWithBuffer(Landroid/hardware/Camera$PreviewCallback;)V" since="8" deprecated="29"/>
+		<method name="setPreviewDisplay(Landroid/view/SurfaceHolder;)V" deprecated="29"/>
+		<method name="setPreviewTexture(Landroid/graphics/SurfaceTexture;)V" since="11" deprecated="29"/>
+		<method name="setZoomChangeListener(Landroid/hardware/Camera$OnZoomChangeListener;)V" since="8" deprecated="29"/>
+		<method name="startFaceDetection()V" since="14" deprecated="29"/>
+		<method name="startPreview()V" deprecated="29"/>
+		<method name="startSmoothZoom(I)V" since="8" deprecated="29"/>
+		<method name="stopFaceDetection()V" since="14" deprecated="29"/>
+		<method name="stopPreview()V" deprecated="29"/>
+		<method name="stopSmoothZoom()V" since="8" deprecated="29"/>
+		<method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" deprecated="29"/>
+		<method name="takePicture(Landroid/hardware/Camera$ShutterCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;Landroid/hardware/Camera$PictureCallback;)V" since="5" deprecated="29"/>
+		<method name="unlock()V" since="5" deprecated="29"/>
+		<field name="ACTION_NEW_PICTURE" since="14" deprecated="24"/>
+		<field name="ACTION_NEW_VIDEO" since="14" deprecated="24"/>
+		<field name="CAMERA_ERROR_EVICTED" since="23" deprecated="29"/>
+		<field name="CAMERA_ERROR_SERVER_DIED" deprecated="29"/>
+		<field name="CAMERA_ERROR_UNKNOWN" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$Area" since="14" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;I)V" deprecated="29"/>
+		<field name="rect" deprecated="29"/>
+		<field name="weight" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$AutoFocusCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onAutoFocus(ZLandroid/hardware/Camera;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$AutoFocusMoveCallback" since="16" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onAutoFocusMoving(ZLandroid/hardware/Camera;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$CameraInfo" since="9" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<field name="CAMERA_FACING_BACK" deprecated="29"/>
+		<field name="CAMERA_FACING_FRONT" deprecated="29"/>
+		<field name="canDisableShutterSound" since="17" deprecated="29"/>
+		<field name="facing" deprecated="29"/>
+		<field name="orientation" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$ErrorCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onError(ILandroid/hardware/Camera;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$Face" since="14" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<field name="id" deprecated="29"/>
+		<field name="leftEye" deprecated="29"/>
+		<field name="mouth" deprecated="29"/>
+		<field name="rect" deprecated="29"/>
+		<field name="rightEye" deprecated="29"/>
+		<field name="score" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$FaceDetectionListener" since="14" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onFaceDetection([Landroid/hardware/Camera$Face;Landroid/hardware/Camera;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$OnZoomChangeListener" since="8" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onZoomChange(IZLandroid/hardware/Camera;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$Parameters" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="flatten()Ljava/lang/String;" deprecated="29"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="getAntibanding()Ljava/lang/String;" since="5" deprecated="29"/>
+		<method name="getAutoExposureLock()Z" since="14" deprecated="29"/>
+		<method name="getAutoWhiteBalanceLock()Z" since="14" deprecated="29"/>
+		<method name="getColorEffect()Ljava/lang/String;" since="5" deprecated="29"/>
+		<method name="getExposureCompensation()I" since="8" deprecated="29"/>
+		<method name="getExposureCompensationStep()F" since="8" deprecated="29"/>
+		<method name="getFlashMode()Ljava/lang/String;" since="5" deprecated="29"/>
+		<method name="getFocalLength()F" since="8" deprecated="29"/>
+		<method name="getFocusAreas()Ljava/util/List;" since="14" deprecated="29"/>
+		<method name="getFocusDistances([F)V" since="9" deprecated="29"/>
+		<method name="getFocusMode()Ljava/lang/String;" since="5" deprecated="29"/>
+		<method name="getHorizontalViewAngle()F" since="8" deprecated="29"/>
+		<method name="getInt(Ljava/lang/String;)I" deprecated="29"/>
+		<method name="getJpegQuality()I" since="5" deprecated="29"/>
+		<method name="getJpegThumbnailQuality()I" since="5" deprecated="29"/>
+		<method name="getJpegThumbnailSize()Landroid/hardware/Camera$Size;" since="5" deprecated="29"/>
+		<method name="getMaxExposureCompensation()I" since="8" deprecated="29"/>
+		<method name="getMaxNumDetectedFaces()I" since="14" deprecated="29"/>
+		<method name="getMaxNumFocusAreas()I" since="14" deprecated="29"/>
+		<method name="getMaxNumMeteringAreas()I" since="14" deprecated="29"/>
+		<method name="getMaxZoom()I" since="8" deprecated="29"/>
+		<method name="getMeteringAreas()Ljava/util/List;" since="14" deprecated="29"/>
+		<method name="getMinExposureCompensation()I" since="8" deprecated="29"/>
+		<method name="getPictureFormat()I" deprecated="29"/>
+		<method name="getPictureSize()Landroid/hardware/Camera$Size;" deprecated="29"/>
+		<method name="getPreferredPreviewSizeForVideo()Landroid/hardware/Camera$Size;" since="11" deprecated="29"/>
+		<method name="getPreviewFormat()I" deprecated="29"/>
+		<method name="getPreviewFpsRange([I)V" since="9" deprecated="29"/>
+		<method name="getPreviewFrameRate()I" deprecated="15"/>
+		<method name="getPreviewSize()Landroid/hardware/Camera$Size;" deprecated="29"/>
+		<method name="getSceneMode()Ljava/lang/String;" since="5" deprecated="29"/>
+		<method name="getSupportedAntibanding()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedColorEffects()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedFlashModes()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedFocusModes()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedJpegThumbnailSizes()Ljava/util/List;" since="8" deprecated="29"/>
+		<method name="getSupportedPictureFormats()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedPictureSizes()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedPreviewFormats()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedPreviewFpsRange()Ljava/util/List;" since="9" deprecated="29"/>
+		<method name="getSupportedPreviewFrameRates()Ljava/util/List;" since="5" deprecated="15"/>
+		<method name="getSupportedPreviewSizes()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedSceneModes()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getSupportedVideoSizes()Ljava/util/List;" since="11" deprecated="29"/>
+		<method name="getSupportedWhiteBalance()Ljava/util/List;" since="5" deprecated="29"/>
+		<method name="getVerticalViewAngle()F" since="8" deprecated="29"/>
+		<method name="getVideoStabilization()Z" since="15" deprecated="29"/>
+		<method name="getWhiteBalance()Ljava/lang/String;" since="5" deprecated="29"/>
+		<method name="getZoom()I" since="8" deprecated="29"/>
+		<method name="getZoomRatios()Ljava/util/List;" since="8" deprecated="29"/>
+		<method name="isAutoExposureLockSupported()Z" since="14" deprecated="29"/>
+		<method name="isAutoWhiteBalanceLockSupported()Z" since="14" deprecated="29"/>
+		<method name="isSmoothZoomSupported()Z" since="8" deprecated="29"/>
+		<method name="isVideoSnapshotSupported()Z" since="14" deprecated="29"/>
+		<method name="isVideoStabilizationSupported()Z" since="15" deprecated="29"/>
+		<method name="isZoomSupported()Z" since="8" deprecated="29"/>
+		<method name="remove(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="removeGpsData()V" since="5" deprecated="29"/>
+		<method name="set(Ljava/lang/String;I)V" deprecated="29"/>
+		<method name="set(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setAntibanding(Ljava/lang/String;)V" since="5" deprecated="29"/>
+		<method name="setAutoExposureLock(Z)V" since="14" deprecated="29"/>
+		<method name="setAutoWhiteBalanceLock(Z)V" since="14" deprecated="29"/>
+		<method name="setColorEffect(Ljava/lang/String;)V" since="5" deprecated="29"/>
+		<method name="setExposureCompensation(I)V" since="8" deprecated="29"/>
+		<method name="setFlashMode(Ljava/lang/String;)V" since="5" deprecated="29"/>
+		<method name="setFocusAreas(Ljava/util/List;)V" since="14" deprecated="29"/>
+		<method name="setFocusMode(Ljava/lang/String;)V" since="5" deprecated="29"/>
+		<method name="setGpsAltitude(D)V" since="5" deprecated="29"/>
+		<method name="setGpsLatitude(D)V" since="5" deprecated="29"/>
+		<method name="setGpsLongitude(D)V" since="5" deprecated="29"/>
+		<method name="setGpsProcessingMethod(Ljava/lang/String;)V" since="8" deprecated="29"/>
+		<method name="setGpsTimestamp(J)V" since="5" deprecated="29"/>
+		<method name="setJpegQuality(I)V" since="5" deprecated="29"/>
+		<method name="setJpegThumbnailQuality(I)V" since="5" deprecated="29"/>
+		<method name="setJpegThumbnailSize(II)V" since="5" deprecated="29"/>
+		<method name="setMeteringAreas(Ljava/util/List;)V" since="14" deprecated="29"/>
+		<method name="setPictureFormat(I)V" deprecated="29"/>
+		<method name="setPictureSize(II)V" deprecated="29"/>
+		<method name="setPreviewFormat(I)V" deprecated="29"/>
+		<method name="setPreviewFpsRange(II)V" since="9" deprecated="29"/>
+		<method name="setPreviewFrameRate(I)V" deprecated="15"/>
+		<method name="setPreviewSize(II)V" deprecated="29"/>
+		<method name="setRecordingHint(Z)V" since="14" deprecated="29"/>
+		<method name="setRotation(I)V" since="5" deprecated="29"/>
+		<method name="setSceneMode(Ljava/lang/String;)V" since="5" deprecated="29"/>
+		<method name="setVideoStabilization(Z)V" since="15" deprecated="29"/>
+		<method name="setWhiteBalance(Ljava/lang/String;)V" since="5" deprecated="29"/>
+		<method name="setZoom(I)V" since="8" deprecated="29"/>
+		<method name="unflatten(Ljava/lang/String;)V" deprecated="29"/>
+		<field name="ANTIBANDING_50HZ" since="5" deprecated="29"/>
+		<field name="ANTIBANDING_60HZ" since="5" deprecated="29"/>
+		<field name="ANTIBANDING_AUTO" since="5" deprecated="29"/>
+		<field name="ANTIBANDING_OFF" since="5" deprecated="29"/>
+		<field name="EFFECT_AQUA" since="5" deprecated="29"/>
+		<field name="EFFECT_BLACKBOARD" since="5" deprecated="29"/>
+		<field name="EFFECT_MONO" since="5" deprecated="29"/>
+		<field name="EFFECT_NEGATIVE" since="5" deprecated="29"/>
+		<field name="EFFECT_NONE" since="5" deprecated="29"/>
+		<field name="EFFECT_POSTERIZE" since="5" deprecated="29"/>
+		<field name="EFFECT_SEPIA" since="5" deprecated="29"/>
+		<field name="EFFECT_SOLARIZE" since="5" deprecated="29"/>
+		<field name="EFFECT_WHITEBOARD" since="5" deprecated="29"/>
+		<field name="FLASH_MODE_AUTO" since="5" deprecated="29"/>
+		<field name="FLASH_MODE_OFF" since="5" deprecated="29"/>
+		<field name="FLASH_MODE_ON" since="5" deprecated="29"/>
+		<field name="FLASH_MODE_RED_EYE" since="5" deprecated="29"/>
+		<field name="FLASH_MODE_TORCH" since="5" deprecated="29"/>
+		<field name="FOCUS_DISTANCE_FAR_INDEX" since="9" deprecated="29"/>
+		<field name="FOCUS_DISTANCE_NEAR_INDEX" since="9" deprecated="29"/>
+		<field name="FOCUS_DISTANCE_OPTIMAL_INDEX" since="9" deprecated="29"/>
+		<field name="FOCUS_MODE_AUTO" since="5" deprecated="29"/>
+		<field name="FOCUS_MODE_CONTINUOUS_PICTURE" since="14" deprecated="29"/>
+		<field name="FOCUS_MODE_CONTINUOUS_VIDEO" since="9" deprecated="29"/>
+		<field name="FOCUS_MODE_EDOF" since="8" deprecated="29"/>
+		<field name="FOCUS_MODE_FIXED" since="5" deprecated="29"/>
+		<field name="FOCUS_MODE_INFINITY" since="5" deprecated="29"/>
+		<field name="FOCUS_MODE_MACRO" since="5" deprecated="29"/>
+		<field name="PREVIEW_FPS_MAX_INDEX" since="9" deprecated="29"/>
+		<field name="PREVIEW_FPS_MIN_INDEX" since="9" deprecated="29"/>
+		<field name="SCENE_MODE_ACTION" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_AUTO" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_BARCODE" since="8" deprecated="29"/>
+		<field name="SCENE_MODE_BEACH" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_CANDLELIGHT" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_FIREWORKS" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_HDR" since="17" deprecated="29"/>
+		<field name="SCENE_MODE_LANDSCAPE" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_NIGHT" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_NIGHT_PORTRAIT" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_PARTY" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_PORTRAIT" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_SNOW" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_SPORTS" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_STEADYPHOTO" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_SUNSET" since="5" deprecated="29"/>
+		<field name="SCENE_MODE_THEATRE" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_AUTO" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_CLOUDY_DAYLIGHT" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_DAYLIGHT" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_FLUORESCENT" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_INCANDESCENT" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_SHADE" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_TWILIGHT" since="5" deprecated="29"/>
+		<field name="WHITE_BALANCE_WARM_FLUORESCENT" since="5" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$PictureCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onPictureTaken([BLandroid/hardware/Camera;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$PreviewCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onPreviewFrame([BLandroid/hardware/Camera;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$ShutterCallback" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="onShutter()V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/Camera$Size" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/hardware/Camera;II)V" deprecated="29"/>
+		<field name="height" deprecated="29"/>
+		<field name="width" deprecated="29"/>
+	</class>
+	<class name="android/hardware/ConsumerIrManager" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getCarrierFrequencies()[Landroid/hardware/ConsumerIrManager$CarrierFrequencyRange;"/>
+		<method name="hasIrEmitter()Z"/>
+		<method name="transmit(I[I)V"/>
+	</class>
+	<class name="android/hardware/ConsumerIrManager$CarrierFrequencyRange" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/hardware/ConsumerIrManager;II)V"/>
+		<method name="getMaxFrequency()I"/>
+		<method name="getMinFrequency()I"/>
+	</class>
+	<class name="android/hardware/GeomagneticField" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(FFFJ)V"/>
+		<method name="getDeclination()F"/>
+		<method name="getFieldStrength()F"/>
+		<method name="getHorizontalStrength()F"/>
+		<method name="getInclination()F"/>
+		<method name="getX()F"/>
+		<method name="getY()F"/>
+		<method name="getZ()F"/>
+	</class>
+	<class name="android/hardware/HardwareBuffer" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="create(IIIIJ)Landroid/hardware/HardwareBuffer;"/>
+		<method name="getFormat()I"/>
+		<method name="getHeight()I"/>
+		<method name="getLayers()I"/>
+		<method name="getUsage()J"/>
+		<method name="getWidth()I"/>
+		<method name="isClosed()Z"/>
+		<method name="isSupported(IIIIJ)Z" since="29"/>
+		<field name="BLOB"/>
+		<field name="CREATOR"/>
+		<field name="DS_24UI8" since="28"/>
+		<field name="DS_FP32UI8" since="28"/>
+		<field name="D_16" since="28"/>
+		<field name="D_24" since="28"/>
+		<field name="D_FP32" since="28"/>
+		<field name="RGBA_1010102"/>
+		<field name="RGBA_8888"/>
+		<field name="RGBA_FP16"/>
+		<field name="RGBX_8888"/>
+		<field name="RGB_565"/>
+		<field name="RGB_888"/>
+		<field name="S_UI8" since="28"/>
+		<field name="USAGE_CPU_READ_OFTEN"/>
+		<field name="USAGE_CPU_READ_RARELY"/>
+		<field name="USAGE_CPU_WRITE_OFTEN"/>
+		<field name="USAGE_CPU_WRITE_RARELY"/>
+		<field name="USAGE_GPU_COLOR_OUTPUT"/>
+		<field name="USAGE_GPU_CUBE_MAP" since="28"/>
+		<field name="USAGE_GPU_DATA_BUFFER"/>
+		<field name="USAGE_GPU_MIPMAP_COMPLETE" since="28"/>
+		<field name="USAGE_GPU_SAMPLED_IMAGE"/>
+		<field name="USAGE_PROTECTED_CONTENT"/>
+		<field name="USAGE_SENSOR_DIRECT_DATA"/>
+		<field name="USAGE_VIDEO_ENCODE"/>
+		<field name="YCBCR_420_888" since="30"/>
+	</class>
+	<class name="android/hardware/Sensor" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="getFifoMaxEventCount()I" since="19"/>
+		<method name="getFifoReservedEventCount()I" since="19"/>
+		<method name="getHighestDirectReportRateLevel()I" since="26"/>
+		<method name="getId()I" since="24"/>
+		<method name="getMaxDelay()I" since="21"/>
+		<method name="getMaximumRange()F"/>
+		<method name="getMinDelay()I" since="9"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPower()F"/>
+		<method name="getReportingMode()I" since="21"/>
+		<method name="getResolution()F"/>
+		<method name="getStringType()Ljava/lang/String;" since="20"/>
+		<method name="getType()I"/>
+		<method name="getVendor()Ljava/lang/String;"/>
+		<method name="getVersion()I"/>
+		<method name="isAdditionalInfoSupported()Z" since="24"/>
+		<method name="isDirectChannelTypeSupported(I)Z" since="26"/>
+		<method name="isDynamicSensor()Z" since="24"/>
+		<method name="isWakeUpSensor()Z" since="21"/>
+		<field name="REPORTING_MODE_CONTINUOUS" since="21"/>
+		<field name="REPORTING_MODE_ONE_SHOT" since="21"/>
+		<field name="REPORTING_MODE_ON_CHANGE" since="21"/>
+		<field name="REPORTING_MODE_SPECIAL_TRIGGER" since="21"/>
+		<field name="STRING_TYPE_ACCELEROMETER" since="20"/>
+		<field name="STRING_TYPE_ACCELEROMETER_UNCALIBRATED" since="26"/>
+		<field name="STRING_TYPE_AMBIENT_TEMPERATURE" since="20"/>
+		<field name="STRING_TYPE_GAME_ROTATION_VECTOR" since="20"/>
+		<field name="STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR" since="20"/>
+		<field name="STRING_TYPE_GRAVITY" since="20"/>
+		<field name="STRING_TYPE_GYROSCOPE" since="20"/>
+		<field name="STRING_TYPE_GYROSCOPE_UNCALIBRATED" since="20"/>
+		<field name="STRING_TYPE_HEART_BEAT" since="24"/>
+		<field name="STRING_TYPE_HEART_RATE" since="20"/>
+		<field name="STRING_TYPE_HINGE_ANGLE" since="30"/>
+		<field name="STRING_TYPE_LIGHT" since="20"/>
+		<field name="STRING_TYPE_LINEAR_ACCELERATION" since="20"/>
+		<field name="STRING_TYPE_LOW_LATENCY_OFFBODY_DETECT" since="26"/>
+		<field name="STRING_TYPE_MAGNETIC_FIELD" since="20"/>
+		<field name="STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED" since="20"/>
+		<field name="STRING_TYPE_MOTION_DETECT" since="24"/>
+		<field name="STRING_TYPE_ORIENTATION" since="20" deprecated="20"/>
+		<field name="STRING_TYPE_POSE_6DOF" since="24"/>
+		<field name="STRING_TYPE_PRESSURE" since="20"/>
+		<field name="STRING_TYPE_PROXIMITY" since="20"/>
+		<field name="STRING_TYPE_RELATIVE_HUMIDITY" since="20"/>
+		<field name="STRING_TYPE_ROTATION_VECTOR" since="20"/>
+		<field name="STRING_TYPE_SIGNIFICANT_MOTION" since="20"/>
+		<field name="STRING_TYPE_STATIONARY_DETECT" since="24"/>
+		<field name="STRING_TYPE_STEP_COUNTER" since="20"/>
+		<field name="STRING_TYPE_STEP_DETECTOR" since="20"/>
+		<field name="STRING_TYPE_TEMPERATURE" since="20" deprecated="20"/>
+		<field name="TYPE_ACCELEROMETER"/>
+		<field name="TYPE_ACCELEROMETER_UNCALIBRATED" since="26"/>
+		<field name="TYPE_ALL"/>
+		<field name="TYPE_AMBIENT_TEMPERATURE" since="14"/>
+		<field name="TYPE_DEVICE_PRIVATE_BASE" since="24"/>
+		<field name="TYPE_GAME_ROTATION_VECTOR" since="18"/>
+		<field name="TYPE_GEOMAGNETIC_ROTATION_VECTOR" since="19"/>
+		<field name="TYPE_GRAVITY" since="9"/>
+		<field name="TYPE_GYROSCOPE"/>
+		<field name="TYPE_GYROSCOPE_UNCALIBRATED" since="18"/>
+		<field name="TYPE_HEART_BEAT" since="24"/>
+		<field name="TYPE_HEART_RATE" since="20"/>
+		<field name="TYPE_HINGE_ANGLE" since="30"/>
+		<field name="TYPE_LIGHT"/>
+		<field name="TYPE_LINEAR_ACCELERATION" since="9"/>
+		<field name="TYPE_LOW_LATENCY_OFFBODY_DETECT" since="26"/>
+		<field name="TYPE_MAGNETIC_FIELD"/>
+		<field name="TYPE_MAGNETIC_FIELD_UNCALIBRATED" since="18"/>
+		<field name="TYPE_MOTION_DETECT" since="24"/>
+		<field name="TYPE_ORIENTATION" deprecated="15"/>
+		<field name="TYPE_POSE_6DOF" since="24"/>
+		<field name="TYPE_PRESSURE"/>
+		<field name="TYPE_PROXIMITY"/>
+		<field name="TYPE_RELATIVE_HUMIDITY" since="14"/>
+		<field name="TYPE_ROTATION_VECTOR" since="9"/>
+		<field name="TYPE_SIGNIFICANT_MOTION" since="18"/>
+		<field name="TYPE_STATIONARY_DETECT" since="24"/>
+		<field name="TYPE_STEP_COUNTER" since="19"/>
+		<field name="TYPE_STEP_DETECTOR" since="19"/>
+		<field name="TYPE_TEMPERATURE" deprecated="15"/>
+	</class>
+	<class name="android/hardware/SensorAdditionalInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="TYPE_FRAME_BEGIN"/>
+		<field name="TYPE_FRAME_END"/>
+		<field name="TYPE_INTERNAL_TEMPERATURE"/>
+		<field name="TYPE_SAMPLING"/>
+		<field name="TYPE_SENSOR_PLACEMENT"/>
+		<field name="TYPE_UNTRACKED_DELAY"/>
+		<field name="TYPE_VEC3_CALIBRATION"/>
+		<field name="floatValues"/>
+		<field name="intValues"/>
+		<field name="sensor"/>
+		<field name="serial"/>
+		<field name="type"/>
+	</class>
+	<class name="android/hardware/SensorDirectChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+		<method name="configure(Landroid/hardware/Sensor;I)I"/>
+		<field name="RATE_FAST"/>
+		<field name="RATE_NORMAL"/>
+		<field name="RATE_STOP"/>
+		<field name="RATE_VERY_FAST"/>
+		<field name="TYPE_HARDWARE_BUFFER"/>
+		<field name="TYPE_MEMORY_FILE"/>
+	</class>
+	<class name="android/hardware/SensorEvent" since="3">
+		<extends name="java/lang/Object"/>
+		<field name="accuracy"/>
+		<field name="sensor"/>
+		<field name="timestamp"/>
+		<field name="values"/>
+	</class>
+	<class name="android/hardware/SensorEventCallback" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/hardware/SensorEventListener2"/>
+		<method name="&lt;init>()V"/>
+		<method name="onSensorAdditionalInfo(Landroid/hardware/SensorAdditionalInfo;)V"/>
+	</class>
+	<class name="android/hardware/SensorEventListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onAccuracyChanged(Landroid/hardware/Sensor;I)V"/>
+		<method name="onSensorChanged(Landroid/hardware/SensorEvent;)V"/>
+	</class>
+	<class name="android/hardware/SensorEventListener2" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/hardware/SensorEventListener"/>
+		<method name="onFlushCompleted(Landroid/hardware/Sensor;)V"/>
+	</class>
+	<class name="android/hardware/SensorListener" since="1" deprecated="3">
+		<extends name="java/lang/Object"/>
+		<method name="onAccuracyChanged(II)V" deprecated="29"/>
+		<method name="onSensorChanged(I[F)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/SensorManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="cancelTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18"/>
+		<method name="createDirectChannel(Landroid/hardware/HardwareBuffer;)Landroid/hardware/SensorDirectChannel;" since="26"/>
+		<method name="createDirectChannel(Landroid/os/MemoryFile;)Landroid/hardware/SensorDirectChannel;" since="26"/>
+		<method name="flush(Landroid/hardware/SensorEventListener;)Z" since="19"/>
+		<method name="getAltitude(FF)F" since="9"/>
+		<method name="getAngleChange([F[F[F)V" since="9"/>
+		<method name="getDefaultSensor(I)Landroid/hardware/Sensor;" since="3"/>
+		<method name="getDefaultSensor(IZ)Landroid/hardware/Sensor;" since="21"/>
+		<method name="getDynamicSensorList(I)Ljava/util/List;" since="24"/>
+		<method name="getInclination([F)F" since="3"/>
+		<method name="getOrientation([F[F)[F" since="3"/>
+		<method name="getQuaternionFromVector([F[F)V" since="9"/>
+		<method name="getRotationMatrix([F[F[F[F)Z" since="3"/>
+		<method name="getRotationMatrixFromVector([F[F)V" since="9"/>
+		<method name="getSensorList(I)Ljava/util/List;" since="3"/>
+		<method name="getSensors()I" deprecated="15"/>
+		<method name="isDynamicSensorDiscoverySupported()Z" since="24"/>
+		<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24"/>
+		<method name="registerDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;Landroid/os/Handler;)V" since="24"/>
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;I)Z" since="3"/>
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;II)Z" since="19"/>
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;IILandroid/os/Handler;)Z" since="19"/>
+		<method name="registerListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;ILandroid/os/Handler;)Z" since="3"/>
+		<method name="registerListener(Landroid/hardware/SensorListener;I)Z" deprecated="15"/>
+		<method name="registerListener(Landroid/hardware/SensorListener;II)Z" deprecated="15"/>
+		<method name="remapCoordinateSystem([FII[F)Z" since="3"/>
+		<method name="requestTriggerSensor(Landroid/hardware/TriggerEventListener;Landroid/hardware/Sensor;)Z" since="18"/>
+		<method name="unregisterDynamicSensorCallback(Landroid/hardware/SensorManager$DynamicSensorCallback;)V" since="24"/>
+		<method name="unregisterListener(Landroid/hardware/SensorEventListener;)V" since="3"/>
+		<method name="unregisterListener(Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V" since="3"/>
+		<method name="unregisterListener(Landroid/hardware/SensorListener;)V" deprecated="15"/>
+		<method name="unregisterListener(Landroid/hardware/SensorListener;I)V" deprecated="15"/>
+		<field name="AXIS_MINUS_X" since="3"/>
+		<field name="AXIS_MINUS_Y" since="3"/>
+		<field name="AXIS_MINUS_Z" since="3"/>
+		<field name="AXIS_X" since="3"/>
+		<field name="AXIS_Y" since="3"/>
+		<field name="AXIS_Z" since="3"/>
+		<field name="DATA_X" deprecated="15"/>
+		<field name="DATA_Y" deprecated="15"/>
+		<field name="DATA_Z" deprecated="15"/>
+		<field name="GRAVITY_DEATH_STAR_I"/>
+		<field name="GRAVITY_EARTH"/>
+		<field name="GRAVITY_JUPITER"/>
+		<field name="GRAVITY_MARS"/>
+		<field name="GRAVITY_MERCURY"/>
+		<field name="GRAVITY_MOON"/>
+		<field name="GRAVITY_NEPTUNE"/>
+		<field name="GRAVITY_PLUTO"/>
+		<field name="GRAVITY_SATURN"/>
+		<field name="GRAVITY_SUN"/>
+		<field name="GRAVITY_THE_ISLAND"/>
+		<field name="GRAVITY_URANUS"/>
+		<field name="GRAVITY_VENUS"/>
+		<field name="LIGHT_CLOUDY"/>
+		<field name="LIGHT_FULLMOON"/>
+		<field name="LIGHT_NO_MOON"/>
+		<field name="LIGHT_OVERCAST"/>
+		<field name="LIGHT_SHADE"/>
+		<field name="LIGHT_SUNLIGHT"/>
+		<field name="LIGHT_SUNLIGHT_MAX"/>
+		<field name="LIGHT_SUNRISE"/>
+		<field name="MAGNETIC_FIELD_EARTH_MAX"/>
+		<field name="MAGNETIC_FIELD_EARTH_MIN"/>
+		<field name="PRESSURE_STANDARD_ATMOSPHERE" since="9"/>
+		<field name="RAW_DATA_INDEX" deprecated="15"/>
+		<field name="RAW_DATA_X" deprecated="15"/>
+		<field name="RAW_DATA_Y" deprecated="15"/>
+		<field name="RAW_DATA_Z" deprecated="15"/>
+		<field name="SENSOR_ACCELEROMETER" deprecated="15"/>
+		<field name="SENSOR_ALL" deprecated="15"/>
+		<field name="SENSOR_DELAY_FASTEST"/>
+		<field name="SENSOR_DELAY_GAME"/>
+		<field name="SENSOR_DELAY_NORMAL"/>
+		<field name="SENSOR_DELAY_UI"/>
+		<field name="SENSOR_LIGHT" deprecated="15"/>
+		<field name="SENSOR_MAGNETIC_FIELD" deprecated="15"/>
+		<field name="SENSOR_MAX" deprecated="15"/>
+		<field name="SENSOR_MIN" deprecated="15"/>
+		<field name="SENSOR_ORIENTATION" deprecated="15"/>
+		<field name="SENSOR_ORIENTATION_RAW" deprecated="15"/>
+		<field name="SENSOR_PROXIMITY" deprecated="15"/>
+		<field name="SENSOR_STATUS_ACCURACY_HIGH"/>
+		<field name="SENSOR_STATUS_ACCURACY_LOW"/>
+		<field name="SENSOR_STATUS_ACCURACY_MEDIUM"/>
+		<field name="SENSOR_STATUS_NO_CONTACT" since="20"/>
+		<field name="SENSOR_STATUS_UNRELIABLE"/>
+		<field name="SENSOR_TEMPERATURE" deprecated="15"/>
+		<field name="SENSOR_TRICORDER" deprecated="15"/>
+		<field name="STANDARD_GRAVITY"/>
+	</class>
+	<class name="android/hardware/SensorManager$DynamicSensorCallback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDynamicSensorConnected(Landroid/hardware/Sensor;)V"/>
+		<method name="onDynamicSensorDisconnected(Landroid/hardware/Sensor;)V"/>
+	</class>
+	<class name="android/hardware/SensorPrivacyManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="supportsSensorToggle(I)Z"/>
+	</class>
+	<class name="android/hardware/SensorPrivacyManager$Sensors" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="CAMERA"/>
+		<field name="MICROPHONE"/>
+	</class>
+	<class name="android/hardware/TriggerEvent" since="18">
+		<extends name="java/lang/Object"/>
+		<field name="sensor"/>
+		<field name="timestamp"/>
+		<field name="values"/>
+	</class>
+	<class name="android/hardware/TriggerEventListener" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onTrigger(Landroid/hardware/TriggerEvent;)V"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricManager" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="canAuthenticate()I" deprecated="30"/>
+		<method name="canAuthenticate(I)I" since="30"/>
+		<method name="getStrings(I)Landroid/hardware/biometrics/BiometricManager$Strings;" since="31"/>
+		<field name="BIOMETRIC_ERROR_HW_UNAVAILABLE"/>
+		<field name="BIOMETRIC_ERROR_NONE_ENROLLED"/>
+		<field name="BIOMETRIC_ERROR_NO_HARDWARE"/>
+		<field name="BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED" since="30"/>
+		<field name="BIOMETRIC_SUCCESS"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricManager$Authenticators" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="BIOMETRIC_STRONG"/>
+		<field name="BIOMETRIC_WEAK"/>
+		<field name="DEVICE_CREDENTIAL"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricManager$Strings" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getButtonLabel()Ljava/lang/CharSequence;"/>
+		<method name="getPromptMessage()Ljava/lang/CharSequence;"/>
+		<method name="getSettingName()Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="authenticate(Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V"/>
+		<method name="authenticate(Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/hardware/biometrics/BiometricPrompt$AuthenticationCallback;)V"/>
+		<method name="getAllowedAuthenticators()I" since="30"/>
+		<method name="getDescription()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getNegativeButtonText()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getSubtitle()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getTitle()Ljava/lang/CharSequence;" since="30"/>
+		<method name="isConfirmationRequired()Z" since="30"/>
+		<field name="AUTHENTICATION_RESULT_TYPE_BIOMETRIC" since="30"/>
+		<field name="AUTHENTICATION_RESULT_TYPE_DEVICE_CREDENTIAL" since="30"/>
+		<field name="BIOMETRIC_ACQUIRED_GOOD"/>
+		<field name="BIOMETRIC_ACQUIRED_IMAGER_DIRTY"/>
+		<field name="BIOMETRIC_ACQUIRED_INSUFFICIENT"/>
+		<field name="BIOMETRIC_ACQUIRED_PARTIAL"/>
+		<field name="BIOMETRIC_ACQUIRED_TOO_FAST"/>
+		<field name="BIOMETRIC_ACQUIRED_TOO_SLOW"/>
+		<field name="BIOMETRIC_ERROR_CANCELED"/>
+		<field name="BIOMETRIC_ERROR_HW_NOT_PRESENT"/>
+		<field name="BIOMETRIC_ERROR_HW_UNAVAILABLE"/>
+		<field name="BIOMETRIC_ERROR_LOCKOUT"/>
+		<field name="BIOMETRIC_ERROR_LOCKOUT_PERMANENT"/>
+		<field name="BIOMETRIC_ERROR_NO_BIOMETRICS"/>
+		<field name="BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL" since="29"/>
+		<field name="BIOMETRIC_ERROR_NO_SPACE"/>
+		<field name="BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED" since="30"/>
+		<field name="BIOMETRIC_ERROR_TIMEOUT"/>
+		<field name="BIOMETRIC_ERROR_UNABLE_TO_PROCESS"/>
+		<field name="BIOMETRIC_ERROR_USER_CANCELED"/>
+		<field name="BIOMETRIC_ERROR_VENDOR"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$AuthenticationCallback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAuthenticationError(ILjava/lang/CharSequence;)V"/>
+		<method name="onAuthenticationFailed()V"/>
+		<method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V"/>
+		<method name="onAuthenticationSucceeded(Landroid/hardware/biometrics/BiometricPrompt$AuthenticationResult;)V"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$AuthenticationResult" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getAuthenticationType()I" since="30"/>
+		<method name="getCryptoObject()Landroid/hardware/biometrics/BiometricPrompt$CryptoObject;"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="build()Landroid/hardware/biometrics/BiometricPrompt;"/>
+		<method name="setAllowedAuthenticators(I)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="30"/>
+		<method name="setConfirmationRequired(Z)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="29"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
+		<method name="setDeviceCredentialAllowed(Z)Landroid/hardware/biometrics/BiometricPrompt$Builder;" since="29" deprecated="30"/>
+		<method name="setNegativeButton(Ljava/lang/CharSequence;Ljava/util/concurrent/Executor;Landroid/content/DialogInterface$OnClickListener;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/hardware/biometrics/BiometricPrompt$Builder;"/>
+	</class>
+	<class name="android/hardware/biometrics/BiometricPrompt$CryptoObject" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/security/identity/IdentityCredential;)V" since="30"/>
+		<method name="&lt;init>(Ljava/security/Signature;)V"/>
+		<method name="&lt;init>(Ljavax/crypto/Cipher;)V"/>
+		<method name="&lt;init>(Ljavax/crypto/Mac;)V"/>
+		<method name="getCipher()Ljavax/crypto/Cipher;"/>
+		<method name="getIdentityCredential()Landroid/security/identity/IdentityCredential;" since="30"/>
+		<method name="getMac()Ljavax/crypto/Mac;"/>
+		<method name="getSignature()Ljava/security/Signature;"/>
+	</class>
+	<class name="android/hardware/camera2/CameraAccessException" since="21">
+		<extends name="android/util/AndroidException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(ILjava/lang/Throwable;)V"/>
+		<method name="getReason()I"/>
+		<field name="CAMERA_DISABLED"/>
+		<field name="CAMERA_DISCONNECTED"/>
+		<field name="CAMERA_ERROR"/>
+		<field name="CAMERA_IN_USE" since="23"/>
+		<field name="MAX_CAMERAS_IN_USE" since="23"/>
+	</class>
+	<class name="android/hardware/camera2/CameraCaptureSession" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="&lt;init>()V"/>
+		<method name="abortCaptures()V"/>
+		<method name="capture(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
+		<method name="captureBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
+		<method name="captureBurstRequests(Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
+		<method name="captureSingleRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
+		<method name="finalizeOutputConfigurations(Ljava/util/List;)V" since="26"/>
+		<method name="getDevice()Landroid/hardware/camera2/CameraDevice;"/>
+		<method name="getInputSurface()Landroid/view/Surface;" since="23"/>
+		<method name="isReprocessable()Z" since="23"/>
+		<method name="prepare(Landroid/view/Surface;)V" since="23"/>
+		<method name="setRepeatingBurst(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
+		<method name="setRepeatingBurstRequests(Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
+		<method name="setRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;Landroid/os/Handler;)I"/>
+		<method name="setSingleRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$CaptureCallback;)I" since="28"/>
+		<method name="stopRepeating()V"/>
+		<method name="supportsOfflineProcessing(Landroid/view/Surface;)Z" since="30"/>
+		<method name="switchToOffline(Ljava/util/Collection;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraOfflineSession$CameraOfflineSessionCallback;)Landroid/hardware/camera2/CameraOfflineSession;" since="30"/>
+		<method name="updateOutputConfiguration(Landroid/hardware/camera2/params/OutputConfiguration;)V" since="28"/>
+	</class>
+	<class name="android/hardware/camera2/CameraCaptureSession$CaptureCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCaptureBufferLost(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/view/Surface;J)V" since="24"/>
+		<method name="onCaptureCompleted(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/TotalCaptureResult;)V"/>
+		<method name="onCaptureFailed(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureFailure;)V"/>
+		<method name="onCaptureProgressed(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;Landroid/hardware/camera2/CaptureResult;)V"/>
+		<method name="onCaptureSequenceAborted(Landroid/hardware/camera2/CameraCaptureSession;I)V"/>
+		<method name="onCaptureSequenceCompleted(Landroid/hardware/camera2/CameraCaptureSession;IJ)V"/>
+		<method name="onCaptureStarted(Landroid/hardware/camera2/CameraCaptureSession;Landroid/hardware/camera2/CaptureRequest;JJ)V"/>
+	</class>
+	<class name="android/hardware/camera2/CameraCaptureSession$StateCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onActive(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
+		<method name="onCaptureQueueEmpty(Landroid/hardware/camera2/CameraCaptureSession;)V" since="26"/>
+		<method name="onClosed(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
+		<method name="onConfigureFailed(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
+		<method name="onConfigured(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
+		<method name="onReady(Landroid/hardware/camera2/CameraCaptureSession;)V"/>
+		<method name="onSurfacePrepared(Landroid/hardware/camera2/CameraCaptureSession;Landroid/view/Surface;)V" since="23"/>
+	</class>
+	<class name="android/hardware/camera2/CameraCharacteristics" since="21">
+		<extends name="android/hardware/camera2/CameraMetadata"/>
+		<method name="get(Landroid/hardware/camera2/CameraCharacteristics$Key;)Ljava/lang/Object;"/>
+		<method name="getAvailableCaptureRequestKeys()Ljava/util/List;"/>
+		<method name="getAvailableCaptureResultKeys()Ljava/util/List;"/>
+		<method name="getAvailablePhysicalCameraRequestKeys()Ljava/util/List;" since="28"/>
+		<method name="getAvailableSessionKeys()Ljava/util/List;" since="28"/>
+		<method name="getKeysNeedingPermission()Ljava/util/List;" since="29"/>
+		<method name="getPhysicalCameraIds()Ljava/util/Set;" since="28"/>
+		<method name="getRecommendedStreamConfigurationMap(I)Landroid/hardware/camera2/params/RecommendedStreamConfigurationMap;" since="29"/>
+		<field name="COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES"/>
+		<field name="CONTROL_AE_AVAILABLE_ANTIBANDING_MODES"/>
+		<field name="CONTROL_AE_AVAILABLE_MODES"/>
+		<field name="CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES"/>
+		<field name="CONTROL_AE_COMPENSATION_RANGE"/>
+		<field name="CONTROL_AE_COMPENSATION_STEP"/>
+		<field name="CONTROL_AE_LOCK_AVAILABLE" since="23"/>
+		<field name="CONTROL_AF_AVAILABLE_MODES"/>
+		<field name="CONTROL_AVAILABLE_EFFECTS"/>
+		<field name="CONTROL_AVAILABLE_EXTENDED_SCENE_MODE_CAPABILITIES" since="30"/>
+		<field name="CONTROL_AVAILABLE_MODES" since="23"/>
+		<field name="CONTROL_AVAILABLE_SCENE_MODES"/>
+		<field name="CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES"/>
+		<field name="CONTROL_AWB_AVAILABLE_MODES"/>
+		<field name="CONTROL_AWB_LOCK_AVAILABLE" since="23"/>
+		<field name="CONTROL_MAX_REGIONS_AE"/>
+		<field name="CONTROL_MAX_REGIONS_AF"/>
+		<field name="CONTROL_MAX_REGIONS_AWB"/>
+		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE" since="24"/>
+		<field name="CONTROL_ZOOM_RATIO_RANGE" since="30"/>
+		<field name="DEPTH_DEPTH_IS_EXCLUSIVE" since="23"/>
+		<field name="DISTORTION_CORRECTION_AVAILABLE_MODES" since="28"/>
+		<field name="EDGE_AVAILABLE_EDGE_MODES"/>
+		<field name="FLASH_INFO_AVAILABLE"/>
+		<field name="HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES"/>
+		<field name="INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP" since="33"/>
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL"/>
+		<field name="INFO_VERSION" since="28"/>
+		<field name="JPEG_AVAILABLE_THUMBNAIL_SIZES"/>
+		<field name="LENS_DISTORTION" since="28"/>
+		<field name="LENS_DISTORTION_MAXIMUM_RESOLUTION" since="31"/>
+		<field name="LENS_FACING"/>
+		<field name="LENS_INFO_AVAILABLE_APERTURES"/>
+		<field name="LENS_INFO_AVAILABLE_FILTER_DENSITIES"/>
+		<field name="LENS_INFO_AVAILABLE_FOCAL_LENGTHS"/>
+		<field name="LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION"/>
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION"/>
+		<field name="LENS_INFO_HYPERFOCAL_DISTANCE"/>
+		<field name="LENS_INFO_MINIMUM_FOCUS_DISTANCE"/>
+		<field name="LENS_INTRINSIC_CALIBRATION" since="23"/>
+		<field name="LENS_INTRINSIC_CALIBRATION_MAXIMUM_RESOLUTION" since="31"/>
+		<field name="LENS_POSE_REFERENCE" since="28"/>
+		<field name="LENS_POSE_ROTATION" since="23"/>
+		<field name="LENS_POSE_TRANSLATION" since="23"/>
+		<field name="LENS_RADIAL_DISTORTION" since="23" deprecated="28"/>
+		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE" since="28"/>
+		<field name="NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES"/>
+		<field name="REPROCESS_MAX_CAPTURE_STALL" since="23"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES"/>
+		<field name="REQUEST_MAX_NUM_INPUT_STREAMS" since="23"/>
+		<field name="REQUEST_MAX_NUM_OUTPUT_PROC"/>
+		<field name="REQUEST_MAX_NUM_OUTPUT_PROC_STALLING"/>
+		<field name="REQUEST_MAX_NUM_OUTPUT_RAW"/>
+		<field name="REQUEST_PARTIAL_RESULT_COUNT"/>
+		<field name="REQUEST_PIPELINE_MAX_DEPTH"/>
+		<field name="SCALER_AVAILABLE_MAX_DIGITAL_ZOOM"/>
+		<field name="SCALER_AVAILABLE_ROTATE_AND_CROP_MODES" since="31"/>
+		<field name="SCALER_CROPPING_TYPE"/>
+		<field name="SCALER_DEFAULT_SECURE_IMAGE_SIZE" since="31"/>
+		<field name="SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS" since="30"/>
+		<field name="SCALER_MANDATORY_MAXIMUM_RESOLUTION_STREAM_COMBINATIONS" since="31"/>
+		<field name="SCALER_MANDATORY_STREAM_COMBINATIONS" since="29"/>
+		<field name="SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP" since="31"/>
+		<field name="SCALER_STREAM_CONFIGURATION_MAP"/>
+		<field name="SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION" since="31"/>
+		<field name="SENSOR_AVAILABLE_TEST_PATTERN_MODES"/>
+		<field name="SENSOR_BLACK_LEVEL_PATTERN"/>
+		<field name="SENSOR_CALIBRATION_TRANSFORM1"/>
+		<field name="SENSOR_CALIBRATION_TRANSFORM2"/>
+		<field name="SENSOR_COLOR_TRANSFORM1"/>
+		<field name="SENSOR_COLOR_TRANSFORM2"/>
+		<field name="SENSOR_FORWARD_MATRIX1"/>
+		<field name="SENSOR_FORWARD_MATRIX2"/>
+		<field name="SENSOR_INFO_ACTIVE_ARRAY_SIZE"/>
+		<field name="SENSOR_INFO_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION" since="31"/>
+		<field name="SENSOR_INFO_BINNING_FACTOR" since="31"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT"/>
+		<field name="SENSOR_INFO_EXPOSURE_TIME_RANGE"/>
+		<field name="SENSOR_INFO_LENS_SHADING_APPLIED" since="23"/>
+		<field name="SENSOR_INFO_MAX_FRAME_DURATION"/>
+		<field name="SENSOR_INFO_PHYSICAL_SIZE"/>
+		<field name="SENSOR_INFO_PIXEL_ARRAY_SIZE"/>
+		<field name="SENSOR_INFO_PIXEL_ARRAY_SIZE_MAXIMUM_RESOLUTION" since="31"/>
+		<field name="SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE" since="23"/>
+		<field name="SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE_MAXIMUM_RESOLUTION" since="31"/>
+		<field name="SENSOR_INFO_SENSITIVITY_RANGE"/>
+		<field name="SENSOR_INFO_TIMESTAMP_SOURCE"/>
+		<field name="SENSOR_INFO_WHITE_LEVEL"/>
+		<field name="SENSOR_MAX_ANALOG_SENSITIVITY"/>
+		<field name="SENSOR_OPTICAL_BLACK_REGIONS" since="24"/>
+		<field name="SENSOR_ORIENTATION"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT2"/>
+		<field name="SHADING_AVAILABLE_MODES" since="23"/>
+		<field name="STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES"/>
+		<field name="STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES"/>
+		<field name="STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES" since="23"/>
+		<field name="STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES" since="28"/>
+		<field name="STATISTICS_INFO_MAX_FACE_COUNT"/>
+		<field name="SYNC_MAX_LATENCY"/>
+		<field name="TONEMAP_AVAILABLE_TONE_MAP_MODES"/>
+		<field name="TONEMAP_MAX_CURVE_POINTS"/>
+	</class>
+	<class name="android/hardware/camera2/CameraCharacteristics$Key" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
+		<method name="getName()Ljava/lang/String;"/>
+	</class>
+	<class name="android/hardware/camera2/CameraConstrainedHighSpeedCaptureSession" since="23">
+		<extends name="android/hardware/camera2/CameraCaptureSession"/>
+		<method name="&lt;init>()V"/>
+		<method name="createHighSpeedRequestList(Landroid/hardware/camera2/CaptureRequest;)Ljava/util/List;"/>
+	</class>
+	<class name="android/hardware/camera2/CameraDevice" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;"/>
+		<method name="createCaptureRequest(ILjava/util/Set;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="28"/>
+		<method name="createCaptureSession(Landroid/hardware/camera2/params/SessionConfiguration;)V" since="28"/>
+		<method name="createCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" deprecated="30"/>
+		<method name="createCaptureSessionByOutputConfigurations(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="24" deprecated="30"/>
+		<method name="createConstrainedHighSpeedCaptureSession(Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="23" deprecated="30"/>
+		<method name="createExtensionSession(Landroid/hardware/camera2/params/ExtensionSessionConfiguration;)V" since="31"/>
+		<method name="createReprocessCaptureRequest(Landroid/hardware/camera2/TotalCaptureResult;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="23"/>
+		<method name="createReprocessableCaptureSession(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="23" deprecated="30"/>
+		<method name="createReprocessableCaptureSessionByConfigurations(Landroid/hardware/camera2/params/InputConfiguration;Ljava/util/List;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;Landroid/os/Handler;)V" since="24" deprecated="30"/>
+		<method name="getCameraAudioRestriction()I" since="30"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="isSessionConfigurationSupported(Landroid/hardware/camera2/params/SessionConfiguration;)Z" since="29"/>
+		<method name="setCameraAudioRestriction(I)V" since="30"/>
+		<field name="AUDIO_RESTRICTION_NONE" since="30"/>
+		<field name="AUDIO_RESTRICTION_VIBRATION" since="30"/>
+		<field name="AUDIO_RESTRICTION_VIBRATION_SOUND" since="30"/>
+		<field name="TEMPLATE_MANUAL"/>
+		<field name="TEMPLATE_PREVIEW"/>
+		<field name="TEMPLATE_RECORD"/>
+		<field name="TEMPLATE_STILL_CAPTURE"/>
+		<field name="TEMPLATE_VIDEO_SNAPSHOT"/>
+		<field name="TEMPLATE_ZERO_SHUTTER_LAG"/>
+	</class>
+	<class name="android/hardware/camera2/CameraDevice$StateCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onClosed(Landroid/hardware/camera2/CameraDevice;)V"/>
+		<method name="onDisconnected(Landroid/hardware/camera2/CameraDevice;)V"/>
+		<method name="onError(Landroid/hardware/camera2/CameraDevice;I)V"/>
+		<method name="onOpened(Landroid/hardware/camera2/CameraDevice;)V"/>
+		<field name="ERROR_CAMERA_DEVICE"/>
+		<field name="ERROR_CAMERA_DISABLED"/>
+		<field name="ERROR_CAMERA_IN_USE"/>
+		<field name="ERROR_CAMERA_SERVICE"/>
+		<field name="ERROR_MAX_CAMERAS_IN_USE"/>
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionCharacteristics" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getEstimatedCaptureLatencyRangeMillis(ILandroid/util/Size;I)Landroid/util/Range;"/>
+		<method name="getExtensionSupportedSizes(II)Ljava/util/List;"/>
+		<method name="getExtensionSupportedSizes(ILjava/lang/Class;)Ljava/util/List;"/>
+		<method name="getSupportedExtensions()Ljava/util/List;"/>
+		<field name="EXTENSION_AUTOMATIC"/>
+		<field name="EXTENSION_BEAUTY"/>
+		<field name="EXTENSION_BOKEH"/>
+		<field name="EXTENSION_HDR"/>
+		<field name="EXTENSION_NIGHT"/>
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionSession" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="capture(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$ExtensionCaptureCallback;)I"/>
+		<method name="getDevice()Landroid/hardware/camera2/CameraDevice;"/>
+		<method name="setRepeatingRequest(Landroid/hardware/camera2/CaptureRequest;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$ExtensionCaptureCallback;)I"/>
+		<method name="stopRepeating()V"/>
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionSession$ExtensionCaptureCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCaptureFailed(Landroid/hardware/camera2/CameraExtensionSession;Landroid/hardware/camera2/CaptureRequest;)V"/>
+		<method name="onCaptureProcessStarted(Landroid/hardware/camera2/CameraExtensionSession;Landroid/hardware/camera2/CaptureRequest;)V"/>
+		<method name="onCaptureSequenceAborted(Landroid/hardware/camera2/CameraExtensionSession;I)V"/>
+		<method name="onCaptureSequenceCompleted(Landroid/hardware/camera2/CameraExtensionSession;I)V"/>
+		<method name="onCaptureStarted(Landroid/hardware/camera2/CameraExtensionSession;Landroid/hardware/camera2/CaptureRequest;J)V"/>
+	</class>
+	<class name="android/hardware/camera2/CameraExtensionSession$StateCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onClosed(Landroid/hardware/camera2/CameraExtensionSession;)V"/>
+		<method name="onConfigureFailed(Landroid/hardware/camera2/CameraExtensionSession;)V"/>
+		<method name="onConfigured(Landroid/hardware/camera2/CameraExtensionSession;)V"/>
+	</class>
+	<class name="android/hardware/camera2/CameraManager" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getCameraCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraCharacteristics;"/>
+		<method name="getCameraExtensionCharacteristics(Ljava/lang/String;)Landroid/hardware/camera2/CameraExtensionCharacteristics;" since="31"/>
+		<method name="getCameraIdList()[Ljava/lang/String;"/>
+		<method name="getConcurrentCameraIds()Ljava/util/Set;" since="30"/>
+		<method name="isConcurrentSessionConfigurationSupported(Ljava/util/Map;)Z" since="30"/>
+		<method name="openCamera(Ljava/lang/String;Landroid/hardware/camera2/CameraDevice$StateCallback;Landroid/os/Handler;)V"/>
+		<method name="openCamera(Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraDevice$StateCallback;)V" since="28"/>
+		<method name="registerAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;Landroid/os/Handler;)V"/>
+		<method name="registerAvailabilityCallback(Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V" since="28"/>
+		<method name="registerTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;Landroid/os/Handler;)V" since="23"/>
+		<method name="registerTorchCallback(Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraManager$TorchCallback;)V" since="28"/>
+		<method name="setTorchMode(Ljava/lang/String;Z)V" since="23"/>
+		<method name="unregisterAvailabilityCallback(Landroid/hardware/camera2/CameraManager$AvailabilityCallback;)V"/>
+		<method name="unregisterTorchCallback(Landroid/hardware/camera2/CameraManager$TorchCallback;)V" since="23"/>
+	</class>
+	<class name="android/hardware/camera2/CameraManager$AvailabilityCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCameraAccessPrioritiesChanged()V" since="29"/>
+		<method name="onCameraAvailable(Ljava/lang/String;)V"/>
+		<method name="onCameraUnavailable(Ljava/lang/String;)V"/>
+		<method name="onPhysicalCameraAvailable(Ljava/lang/String;Ljava/lang/String;)V" since="30"/>
+		<method name="onPhysicalCameraUnavailable(Ljava/lang/String;Ljava/lang/String;)V" since="30"/>
+	</class>
+	<class name="android/hardware/camera2/CameraManager$TorchCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onTorchModeChanged(Ljava/lang/String;Z)V"/>
+		<method name="onTorchModeUnavailable(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/hardware/camera2/CameraMetadata" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getKeys()Ljava/util/List;"/>
+		<field name="COLOR_CORRECTION_ABERRATION_MODE_FAST"/>
+		<field name="COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY"/>
+		<field name="COLOR_CORRECTION_ABERRATION_MODE_OFF"/>
+		<field name="COLOR_CORRECTION_MODE_FAST"/>
+		<field name="COLOR_CORRECTION_MODE_HIGH_QUALITY"/>
+		<field name="COLOR_CORRECTION_MODE_TRANSFORM_MATRIX"/>
+		<field name="CONTROL_AE_ANTIBANDING_MODE_50HZ"/>
+		<field name="CONTROL_AE_ANTIBANDING_MODE_60HZ"/>
+		<field name="CONTROL_AE_ANTIBANDING_MODE_AUTO"/>
+		<field name="CONTROL_AE_ANTIBANDING_MODE_OFF"/>
+		<field name="CONTROL_AE_MODE_OFF"/>
+		<field name="CONTROL_AE_MODE_ON"/>
+		<field name="CONTROL_AE_MODE_ON_ALWAYS_FLASH"/>
+		<field name="CONTROL_AE_MODE_ON_AUTO_FLASH"/>
+		<field name="CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE"/>
+		<field name="CONTROL_AE_MODE_ON_EXTERNAL_FLASH" since="28"/>
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL" since="23"/>
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_IDLE"/>
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER_START"/>
+		<field name="CONTROL_AE_STATE_CONVERGED"/>
+		<field name="CONTROL_AE_STATE_FLASH_REQUIRED"/>
+		<field name="CONTROL_AE_STATE_INACTIVE"/>
+		<field name="CONTROL_AE_STATE_LOCKED"/>
+		<field name="CONTROL_AE_STATE_PRECAPTURE"/>
+		<field name="CONTROL_AE_STATE_SEARCHING"/>
+		<field name="CONTROL_AF_MODE_AUTO"/>
+		<field name="CONTROL_AF_MODE_CONTINUOUS_PICTURE"/>
+		<field name="CONTROL_AF_MODE_CONTINUOUS_VIDEO"/>
+		<field name="CONTROL_AF_MODE_EDOF"/>
+		<field name="CONTROL_AF_MODE_MACRO"/>
+		<field name="CONTROL_AF_MODE_OFF"/>
+		<field name="CONTROL_AF_SCENE_CHANGE_DETECTED" since="28"/>
+		<field name="CONTROL_AF_SCENE_CHANGE_NOT_DETECTED" since="28"/>
+		<field name="CONTROL_AF_STATE_ACTIVE_SCAN"/>
+		<field name="CONTROL_AF_STATE_FOCUSED_LOCKED"/>
+		<field name="CONTROL_AF_STATE_INACTIVE"/>
+		<field name="CONTROL_AF_STATE_NOT_FOCUSED_LOCKED"/>
+		<field name="CONTROL_AF_STATE_PASSIVE_FOCUSED"/>
+		<field name="CONTROL_AF_STATE_PASSIVE_SCAN"/>
+		<field name="CONTROL_AF_STATE_PASSIVE_UNFOCUSED"/>
+		<field name="CONTROL_AF_TRIGGER_CANCEL"/>
+		<field name="CONTROL_AF_TRIGGER_IDLE"/>
+		<field name="CONTROL_AF_TRIGGER_START"/>
+		<field name="CONTROL_AWB_MODE_AUTO"/>
+		<field name="CONTROL_AWB_MODE_CLOUDY_DAYLIGHT"/>
+		<field name="CONTROL_AWB_MODE_DAYLIGHT"/>
+		<field name="CONTROL_AWB_MODE_FLUORESCENT"/>
+		<field name="CONTROL_AWB_MODE_INCANDESCENT"/>
+		<field name="CONTROL_AWB_MODE_OFF"/>
+		<field name="CONTROL_AWB_MODE_SHADE"/>
+		<field name="CONTROL_AWB_MODE_TWILIGHT"/>
+		<field name="CONTROL_AWB_MODE_WARM_FLUORESCENT"/>
+		<field name="CONTROL_AWB_STATE_CONVERGED"/>
+		<field name="CONTROL_AWB_STATE_INACTIVE"/>
+		<field name="CONTROL_AWB_STATE_LOCKED"/>
+		<field name="CONTROL_AWB_STATE_SEARCHING"/>
+		<field name="CONTROL_CAPTURE_INTENT_CUSTOM"/>
+		<field name="CONTROL_CAPTURE_INTENT_MANUAL"/>
+		<field name="CONTROL_CAPTURE_INTENT_MOTION_TRACKING" since="28"/>
+		<field name="CONTROL_CAPTURE_INTENT_PREVIEW"/>
+		<field name="CONTROL_CAPTURE_INTENT_STILL_CAPTURE"/>
+		<field name="CONTROL_CAPTURE_INTENT_VIDEO_RECORD"/>
+		<field name="CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT"/>
+		<field name="CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG"/>
+		<field name="CONTROL_EFFECT_MODE_AQUA"/>
+		<field name="CONTROL_EFFECT_MODE_BLACKBOARD"/>
+		<field name="CONTROL_EFFECT_MODE_MONO"/>
+		<field name="CONTROL_EFFECT_MODE_NEGATIVE"/>
+		<field name="CONTROL_EFFECT_MODE_OFF"/>
+		<field name="CONTROL_EFFECT_MODE_POSTERIZE"/>
+		<field name="CONTROL_EFFECT_MODE_SEPIA"/>
+		<field name="CONTROL_EFFECT_MODE_SOLARIZE"/>
+		<field name="CONTROL_EFFECT_MODE_WHITEBOARD"/>
+		<field name="CONTROL_EXTENDED_SCENE_MODE_BOKEH_CONTINUOUS" since="30"/>
+		<field name="CONTROL_EXTENDED_SCENE_MODE_BOKEH_STILL_CAPTURE" since="30"/>
+		<field name="CONTROL_EXTENDED_SCENE_MODE_DISABLED" since="30"/>
+		<field name="CONTROL_MODE_AUTO"/>
+		<field name="CONTROL_MODE_OFF"/>
+		<field name="CONTROL_MODE_OFF_KEEP_STATE"/>
+		<field name="CONTROL_MODE_USE_EXTENDED_SCENE_MODE" since="30"/>
+		<field name="CONTROL_MODE_USE_SCENE_MODE"/>
+		<field name="CONTROL_SCENE_MODE_ACTION"/>
+		<field name="CONTROL_SCENE_MODE_BARCODE"/>
+		<field name="CONTROL_SCENE_MODE_BEACH"/>
+		<field name="CONTROL_SCENE_MODE_CANDLELIGHT"/>
+		<field name="CONTROL_SCENE_MODE_DISABLED"/>
+		<field name="CONTROL_SCENE_MODE_FACE_PRIORITY"/>
+		<field name="CONTROL_SCENE_MODE_FIREWORKS"/>
+		<field name="CONTROL_SCENE_MODE_HDR" since="22"/>
+		<field name="CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO" deprecated="23"/>
+		<field name="CONTROL_SCENE_MODE_LANDSCAPE"/>
+		<field name="CONTROL_SCENE_MODE_NIGHT"/>
+		<field name="CONTROL_SCENE_MODE_NIGHT_PORTRAIT"/>
+		<field name="CONTROL_SCENE_MODE_PARTY"/>
+		<field name="CONTROL_SCENE_MODE_PORTRAIT"/>
+		<field name="CONTROL_SCENE_MODE_SNOW"/>
+		<field name="CONTROL_SCENE_MODE_SPORTS"/>
+		<field name="CONTROL_SCENE_MODE_STEADYPHOTO"/>
+		<field name="CONTROL_SCENE_MODE_SUNSET"/>
+		<field name="CONTROL_SCENE_MODE_THEATRE"/>
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE_OFF"/>
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE_ON"/>
+		<field name="DISTORTION_CORRECTION_MODE_FAST" since="28"/>
+		<field name="DISTORTION_CORRECTION_MODE_HIGH_QUALITY" since="28"/>
+		<field name="DISTORTION_CORRECTION_MODE_OFF" since="28"/>
+		<field name="EDGE_MODE_FAST"/>
+		<field name="EDGE_MODE_HIGH_QUALITY"/>
+		<field name="EDGE_MODE_OFF"/>
+		<field name="EDGE_MODE_ZERO_SHUTTER_LAG" since="23"/>
+		<field name="FLASH_MODE_OFF"/>
+		<field name="FLASH_MODE_SINGLE"/>
+		<field name="FLASH_MODE_TORCH"/>
+		<field name="FLASH_STATE_CHARGING"/>
+		<field name="FLASH_STATE_FIRED"/>
+		<field name="FLASH_STATE_PARTIAL"/>
+		<field name="FLASH_STATE_READY"/>
+		<field name="FLASH_STATE_UNAVAILABLE"/>
+		<field name="HOT_PIXEL_MODE_FAST"/>
+		<field name="HOT_PIXEL_MODE_HIGH_QUALITY"/>
+		<field name="HOT_PIXEL_MODE_OFF"/>
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_3" since="24"/>
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL" since="28"/>
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_FULL"/>
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY"/>
+		<field name="INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED"/>
+		<field name="LENS_FACING_BACK"/>
+		<field name="LENS_FACING_EXTERNAL" since="23"/>
+		<field name="LENS_FACING_FRONT"/>
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE"/>
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED"/>
+		<field name="LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED"/>
+		<field name="LENS_OPTICAL_STABILIZATION_MODE_OFF"/>
+		<field name="LENS_OPTICAL_STABILIZATION_MODE_ON"/>
+		<field name="LENS_POSE_REFERENCE_GYROSCOPE" since="28"/>
+		<field name="LENS_POSE_REFERENCE_PRIMARY_CAMERA" since="28"/>
+		<field name="LENS_POSE_REFERENCE_UNDEFINED" since="30"/>
+		<field name="LENS_STATE_MOVING"/>
+		<field name="LENS_STATE_STATIONARY"/>
+		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE" since="28"/>
+		<field name="LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED" since="28"/>
+		<field name="NOISE_REDUCTION_MODE_FAST"/>
+		<field name="NOISE_REDUCTION_MODE_HIGH_QUALITY"/>
+		<field name="NOISE_REDUCTION_MODE_MINIMAL" since="23"/>
+		<field name="NOISE_REDUCTION_MODE_OFF"/>
+		<field name="NOISE_REDUCTION_MODE_ZERO_SHUTTER_LAG" since="23"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE" since="22"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO" since="23"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_DEPTH_OUTPUT" since="23"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA" since="28"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME" since="28"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING" since="28"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_OFFLINE_PROCESSING" since="30"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING" since="23"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_RAW"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS" since="22"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING" since="31"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA" since="29"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA" since="30"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR" since="31"/>
+		<field name="REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING" since="23"/>
+		<field name="SCALER_CROPPING_TYPE_CENTER_ONLY"/>
+		<field name="SCALER_CROPPING_TYPE_FREEFORM"/>
+		<field name="SCALER_ROTATE_AND_CROP_180" since="31"/>
+		<field name="SCALER_ROTATE_AND_CROP_270" since="31"/>
+		<field name="SCALER_ROTATE_AND_CROP_90" since="31"/>
+		<field name="SCALER_ROTATE_AND_CROP_AUTO" since="31"/>
+		<field name="SCALER_ROTATE_AND_CROP_NONE" since="31"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO" since="29"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR" since="29"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB"/>
+		<field name="SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB"/>
+		<field name="SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME"/>
+		<field name="SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN"/>
+		<field name="SENSOR_PIXEL_MODE_DEFAULT" since="31"/>
+		<field name="SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION" since="31"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D50"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D55"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D65"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_D75"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_FLASH"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_SHADE"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN"/>
+		<field name="SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT"/>
+		<field name="SENSOR_TEST_PATTERN_MODE_COLOR_BARS"/>
+		<field name="SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY"/>
+		<field name="SENSOR_TEST_PATTERN_MODE_CUSTOM1"/>
+		<field name="SENSOR_TEST_PATTERN_MODE_OFF"/>
+		<field name="SENSOR_TEST_PATTERN_MODE_PN9"/>
+		<field name="SENSOR_TEST_PATTERN_MODE_SOLID_COLOR"/>
+		<field name="SHADING_MODE_FAST"/>
+		<field name="SHADING_MODE_HIGH_QUALITY"/>
+		<field name="SHADING_MODE_OFF"/>
+		<field name="STATISTICS_FACE_DETECT_MODE_FULL"/>
+		<field name="STATISTICS_FACE_DETECT_MODE_OFF"/>
+		<field name="STATISTICS_FACE_DETECT_MODE_SIMPLE"/>
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE_OFF"/>
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE_ON"/>
+		<field name="STATISTICS_OIS_DATA_MODE_OFF" since="28"/>
+		<field name="STATISTICS_OIS_DATA_MODE_ON" since="28"/>
+		<field name="STATISTICS_SCENE_FLICKER_50HZ"/>
+		<field name="STATISTICS_SCENE_FLICKER_60HZ"/>
+		<field name="STATISTICS_SCENE_FLICKER_NONE"/>
+		<field name="SYNC_MAX_LATENCY_PER_FRAME_CONTROL"/>
+		<field name="SYNC_MAX_LATENCY_UNKNOWN"/>
+		<field name="TONEMAP_MODE_CONTRAST_CURVE"/>
+		<field name="TONEMAP_MODE_FAST"/>
+		<field name="TONEMAP_MODE_GAMMA_VALUE" since="23"/>
+		<field name="TONEMAP_MODE_HIGH_QUALITY"/>
+		<field name="TONEMAP_MODE_PRESET_CURVE" since="23"/>
+		<field name="TONEMAP_PRESET_CURVE_REC709" since="23"/>
+		<field name="TONEMAP_PRESET_CURVE_SRGB" since="23"/>
+	</class>
+	<class name="android/hardware/camera2/CameraOfflineSession" since="30">
+		<extends name="android/hardware/camera2/CameraCaptureSession"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/hardware/camera2/CameraOfflineSession$CameraOfflineSessionCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onClosed(Landroid/hardware/camera2/CameraOfflineSession;)V"/>
+		<method name="onError(Landroid/hardware/camera2/CameraOfflineSession;I)V"/>
+		<method name="onIdle(Landroid/hardware/camera2/CameraOfflineSession;)V"/>
+		<method name="onReady(Landroid/hardware/camera2/CameraOfflineSession;)V"/>
+		<method name="onSwitchFailed(Landroid/hardware/camera2/CameraOfflineSession;)V"/>
+		<field name="STATUS_INTERNAL_ERROR"/>
+	</class>
+	<class name="android/hardware/camera2/CaptureFailure" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getFrameNumber()J"/>
+		<method name="getPhysicalCameraId()Ljava/lang/String;" since="29"/>
+		<method name="getReason()I"/>
+		<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;"/>
+		<method name="getSequenceId()I"/>
+		<method name="wasImageCaptured()Z"/>
+		<field name="REASON_ERROR"/>
+		<field name="REASON_FLUSHED"/>
+	</class>
+	<class name="android/hardware/camera2/CaptureRequest" since="21">
+		<extends name="android/hardware/camera2/CameraMetadata"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;"/>
+		<method name="getTag()Ljava/lang/Object;"/>
+		<method name="isReprocess()Z" since="23"/>
+		<field name="BLACK_LEVEL_LOCK"/>
+		<field name="COLOR_CORRECTION_ABERRATION_MODE"/>
+		<field name="COLOR_CORRECTION_GAINS"/>
+		<field name="COLOR_CORRECTION_MODE"/>
+		<field name="COLOR_CORRECTION_TRANSFORM"/>
+		<field name="CONTROL_AE_ANTIBANDING_MODE"/>
+		<field name="CONTROL_AE_EXPOSURE_COMPENSATION"/>
+		<field name="CONTROL_AE_LOCK"/>
+		<field name="CONTROL_AE_MODE"/>
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER"/>
+		<field name="CONTROL_AE_REGIONS"/>
+		<field name="CONTROL_AE_TARGET_FPS_RANGE"/>
+		<field name="CONTROL_AF_MODE"/>
+		<field name="CONTROL_AF_REGIONS"/>
+		<field name="CONTROL_AF_TRIGGER"/>
+		<field name="CONTROL_AWB_LOCK"/>
+		<field name="CONTROL_AWB_MODE"/>
+		<field name="CONTROL_AWB_REGIONS"/>
+		<field name="CONTROL_CAPTURE_INTENT"/>
+		<field name="CONTROL_EFFECT_MODE"/>
+		<field name="CONTROL_ENABLE_ZSL" since="26"/>
+		<field name="CONTROL_EXTENDED_SCENE_MODE" since="30"/>
+		<field name="CONTROL_MODE"/>
+		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST" since="24"/>
+		<field name="CONTROL_SCENE_MODE"/>
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE"/>
+		<field name="CONTROL_ZOOM_RATIO" since="30"/>
+		<field name="CREATOR"/>
+		<field name="DISTORTION_CORRECTION_MODE" since="28"/>
+		<field name="EDGE_MODE"/>
+		<field name="FLASH_MODE"/>
+		<field name="HOT_PIXEL_MODE"/>
+		<field name="JPEG_GPS_LOCATION"/>
+		<field name="JPEG_ORIENTATION"/>
+		<field name="JPEG_QUALITY"/>
+		<field name="JPEG_THUMBNAIL_QUALITY"/>
+		<field name="JPEG_THUMBNAIL_SIZE"/>
+		<field name="LENS_APERTURE"/>
+		<field name="LENS_FILTER_DENSITY"/>
+		<field name="LENS_FOCAL_LENGTH"/>
+		<field name="LENS_FOCUS_DISTANCE"/>
+		<field name="LENS_OPTICAL_STABILIZATION_MODE"/>
+		<field name="NOISE_REDUCTION_MODE"/>
+		<field name="REPROCESS_EFFECTIVE_EXPOSURE_FACTOR" since="23"/>
+		<field name="SCALER_CROP_REGION"/>
+		<field name="SCALER_ROTATE_AND_CROP" since="31"/>
+		<field name="SENSOR_EXPOSURE_TIME"/>
+		<field name="SENSOR_FRAME_DURATION"/>
+		<field name="SENSOR_PIXEL_MODE" since="31"/>
+		<field name="SENSOR_SENSITIVITY"/>
+		<field name="SENSOR_TEST_PATTERN_DATA"/>
+		<field name="SENSOR_TEST_PATTERN_MODE"/>
+		<field name="SHADING_MODE"/>
+		<field name="STATISTICS_FACE_DETECT_MODE"/>
+		<field name="STATISTICS_HOT_PIXEL_MAP_MODE"/>
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE"/>
+		<field name="STATISTICS_OIS_DATA_MODE" since="28"/>
+		<field name="TONEMAP_CURVE"/>
+		<field name="TONEMAP_GAMMA" since="23"/>
+		<field name="TONEMAP_MODE"/>
+		<field name="TONEMAP_PRESET_CURVE" since="23"/>
+	</class>
+	<class name="android/hardware/camera2/CaptureRequest$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="addTarget(Landroid/view/Surface;)V"/>
+		<method name="build()Landroid/hardware/camera2/CaptureRequest;"/>
+		<method name="get(Landroid/hardware/camera2/CaptureRequest$Key;)Ljava/lang/Object;"/>
+		<method name="getPhysicalCameraKey(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/String;)Ljava/lang/Object;" since="28"/>
+		<method name="removeTarget(Landroid/view/Surface;)V"/>
+		<method name="set(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;)V"/>
+		<method name="setPhysicalCameraKey(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;Ljava/lang/String;)Landroid/hardware/camera2/CaptureRequest$Builder;" since="28"/>
+		<method name="setTag(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/hardware/camera2/CaptureRequest$Key" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
+		<method name="getName()Ljava/lang/String;"/>
+	</class>
+	<class name="android/hardware/camera2/CaptureResult" since="21">
+		<extends name="android/hardware/camera2/CameraMetadata"/>
+		<method name="get(Landroid/hardware/camera2/CaptureResult$Key;)Ljava/lang/Object;"/>
+		<method name="getCameraId()Ljava/lang/String;" since="31"/>
+		<method name="getFrameNumber()J"/>
+		<method name="getRequest()Landroid/hardware/camera2/CaptureRequest;"/>
+		<method name="getSequenceId()I"/>
+		<field name="BLACK_LEVEL_LOCK"/>
+		<field name="COLOR_CORRECTION_ABERRATION_MODE"/>
+		<field name="COLOR_CORRECTION_GAINS"/>
+		<field name="COLOR_CORRECTION_MODE"/>
+		<field name="COLOR_CORRECTION_TRANSFORM"/>
+		<field name="CONTROL_AE_ANTIBANDING_MODE"/>
+		<field name="CONTROL_AE_EXPOSURE_COMPENSATION"/>
+		<field name="CONTROL_AE_LOCK"/>
+		<field name="CONTROL_AE_MODE"/>
+		<field name="CONTROL_AE_PRECAPTURE_TRIGGER"/>
+		<field name="CONTROL_AE_REGIONS"/>
+		<field name="CONTROL_AE_STATE"/>
+		<field name="CONTROL_AE_TARGET_FPS_RANGE"/>
+		<field name="CONTROL_AF_MODE"/>
+		<field name="CONTROL_AF_REGIONS"/>
+		<field name="CONTROL_AF_SCENE_CHANGE" since="28"/>
+		<field name="CONTROL_AF_STATE"/>
+		<field name="CONTROL_AF_TRIGGER"/>
+		<field name="CONTROL_AWB_LOCK"/>
+		<field name="CONTROL_AWB_MODE"/>
+		<field name="CONTROL_AWB_REGIONS"/>
+		<field name="CONTROL_AWB_STATE"/>
+		<field name="CONTROL_CAPTURE_INTENT"/>
+		<field name="CONTROL_EFFECT_MODE"/>
+		<field name="CONTROL_ENABLE_ZSL" since="26"/>
+		<field name="CONTROL_EXTENDED_SCENE_MODE" since="30"/>
+		<field name="CONTROL_MODE"/>
+		<field name="CONTROL_POST_RAW_SENSITIVITY_BOOST" since="24"/>
+		<field name="CONTROL_SCENE_MODE"/>
+		<field name="CONTROL_VIDEO_STABILIZATION_MODE"/>
+		<field name="CONTROL_ZOOM_RATIO" since="30"/>
+		<field name="DISTORTION_CORRECTION_MODE" since="28"/>
+		<field name="EDGE_MODE"/>
+		<field name="FLASH_MODE"/>
+		<field name="FLASH_STATE"/>
+		<field name="HOT_PIXEL_MODE"/>
+		<field name="JPEG_GPS_LOCATION"/>
+		<field name="JPEG_ORIENTATION"/>
+		<field name="JPEG_QUALITY"/>
+		<field name="JPEG_THUMBNAIL_QUALITY"/>
+		<field name="JPEG_THUMBNAIL_SIZE"/>
+		<field name="LENS_APERTURE"/>
+		<field name="LENS_DISTORTION" since="28"/>
+		<field name="LENS_FILTER_DENSITY"/>
+		<field name="LENS_FOCAL_LENGTH"/>
+		<field name="LENS_FOCUS_DISTANCE"/>
+		<field name="LENS_FOCUS_RANGE"/>
+		<field name="LENS_INTRINSIC_CALIBRATION" since="23"/>
+		<field name="LENS_OPTICAL_STABILIZATION_MODE"/>
+		<field name="LENS_POSE_ROTATION" since="23"/>
+		<field name="LENS_POSE_TRANSLATION" since="23"/>
+		<field name="LENS_RADIAL_DISTORTION" since="23" deprecated="28"/>
+		<field name="LENS_STATE"/>
+		<field name="LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID" since="29"/>
+		<field name="NOISE_REDUCTION_MODE"/>
+		<field name="REPROCESS_EFFECTIVE_EXPOSURE_FACTOR" since="23"/>
+		<field name="REQUEST_PIPELINE_DEPTH"/>
+		<field name="SCALER_CROP_REGION"/>
+		<field name="SCALER_ROTATE_AND_CROP" since="31"/>
+		<field name="SENSOR_DYNAMIC_BLACK_LEVEL" since="24"/>
+		<field name="SENSOR_DYNAMIC_WHITE_LEVEL" since="24"/>
+		<field name="SENSOR_EXPOSURE_TIME"/>
+		<field name="SENSOR_FRAME_DURATION"/>
+		<field name="SENSOR_GREEN_SPLIT"/>
+		<field name="SENSOR_NEUTRAL_COLOR_POINT"/>
+		<field name="SENSOR_NOISE_PROFILE"/>
+		<field name="SENSOR_PIXEL_MODE" since="31"/>
+		<field name="SENSOR_RAW_BINNING_FACTOR_USED" since="31"/>
+		<field name="SENSOR_ROLLING_SHUTTER_SKEW"/>
+		<field name="SENSOR_SENSITIVITY"/>
+		<field name="SENSOR_TEST_PATTERN_DATA"/>
+		<field name="SENSOR_TEST_PATTERN_MODE"/>
+		<field name="SENSOR_TIMESTAMP"/>
+		<field name="SHADING_MODE"/>
+		<field name="STATISTICS_FACES"/>
+		<field name="STATISTICS_FACE_DETECT_MODE"/>
+		<field name="STATISTICS_HOT_PIXEL_MAP"/>
+		<field name="STATISTICS_HOT_PIXEL_MAP_MODE"/>
+		<field name="STATISTICS_LENS_SHADING_CORRECTION_MAP"/>
+		<field name="STATISTICS_LENS_SHADING_MAP_MODE"/>
+		<field name="STATISTICS_OIS_DATA_MODE" since="28"/>
+		<field name="STATISTICS_OIS_SAMPLES" since="28"/>
+		<field name="STATISTICS_SCENE_FLICKER"/>
+		<field name="TONEMAP_CURVE"/>
+		<field name="TONEMAP_GAMMA" since="23"/>
+		<field name="TONEMAP_MODE"/>
+		<field name="TONEMAP_PRESET_CURVE" since="23"/>
+	</class>
+	<class name="android/hardware/camera2/CaptureResult$Key" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="29"/>
+		<method name="getName()Ljava/lang/String;"/>
+	</class>
+	<class name="android/hardware/camera2/DngCreator" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="&lt;init>(Landroid/hardware/camera2/CameraCharacteristics;Landroid/hardware/camera2/CaptureResult;)V"/>
+		<method name="setDescription(Ljava/lang/String;)Landroid/hardware/camera2/DngCreator;"/>
+		<method name="setLocation(Landroid/location/Location;)Landroid/hardware/camera2/DngCreator;"/>
+		<method name="setOrientation(I)Landroid/hardware/camera2/DngCreator;"/>
+		<method name="setThumbnail(Landroid/graphics/Bitmap;)Landroid/hardware/camera2/DngCreator;"/>
+		<method name="setThumbnail(Landroid/media/Image;)Landroid/hardware/camera2/DngCreator;"/>
+		<method name="writeByteBuffer(Ljava/io/OutputStream;Landroid/util/Size;Ljava/nio/ByteBuffer;J)V"/>
+		<method name="writeImage(Ljava/io/OutputStream;Landroid/media/Image;)V"/>
+		<method name="writeInputStream(Ljava/io/OutputStream;Landroid/util/Size;Ljava/io/InputStream;J)V"/>
+		<field name="MAX_THUMBNAIL_DIMENSION"/>
+	</class>
+	<class name="android/hardware/camera2/MultiResolutionImageReader" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="&lt;init>(Ljava/util/Collection;II)V"/>
+		<method name="flush()V"/>
+		<method name="getStreamInfoForImageReader(Landroid/media/ImageReader;)Landroid/hardware/camera2/params/MultiResolutionStreamInfo;"/>
+		<method name="getSurface()Landroid/view/Surface;"/>
+		<method name="setOnImageAvailableListener(Landroid/media/ImageReader$OnImageAvailableListener;Ljava/util/concurrent/Executor;)V"/>
+	</class>
+	<class name="android/hardware/camera2/TotalCaptureResult" since="21">
+		<extends name="android/hardware/camera2/CaptureResult"/>
+		<method name="getPartialResults()Ljava/util/List;"/>
+		<method name="getPhysicalCameraResults()Ljava/util/Map;" since="28" deprecated="31"/>
+		<method name="getPhysicalCameraTotalResults()Ljava/util/Map;" since="31"/>
+	</class>
+	<class name="android/hardware/camera2/params/BlackLevelPattern" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="copyTo([II)V"/>
+		<method name="getOffsetForIndex(II)I"/>
+		<field name="COUNT"/>
+	</class>
+	<class name="android/hardware/camera2/params/Capability" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getMaxStreamingSize()Landroid/util/Size;"/>
+		<method name="getMode()I"/>
+		<method name="getZoomRatioRange()Landroid/util/Range;"/>
+	</class>
+	<class name="android/hardware/camera2/params/ColorSpaceTransform" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>([I)V"/>
+		<method name="&lt;init>([Landroid/util/Rational;)V"/>
+		<method name="copyElements([II)V"/>
+		<method name="copyElements([Landroid/util/Rational;I)V"/>
+		<method name="getElement(II)Landroid/util/Rational;"/>
+	</class>
+	<class name="android/hardware/camera2/params/DeviceStateSensorOrientationMap" since="33">
+		<extends name="java/lang/Object"/>
+		<method name="getSensorOrientation(J)I"/>
+		<field name="FOLDED"/>
+		<field name="NORMAL"/>
+	</class>
+	<class name="android/hardware/camera2/params/ExtensionSessionConfiguration" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$StateCallback;)V"/>
+		<method name="getExecutor()Ljava/util/concurrent/Executor;"/>
+		<method name="getExtension()I"/>
+		<method name="getOutputConfigurations()Ljava/util/List;"/>
+		<method name="getStateCallback()Landroid/hardware/camera2/CameraExtensionSession$StateCallback;"/>
+	</class>
+	<class name="android/hardware/camera2/params/Face" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getBounds()Landroid/graphics/Rect;"/>
+		<method name="getId()I"/>
+		<method name="getLeftEyePosition()Landroid/graphics/Point;"/>
+		<method name="getMouthPosition()Landroid/graphics/Point;"/>
+		<method name="getRightEyePosition()Landroid/graphics/Point;"/>
+		<method name="getScore()I"/>
+		<field name="ID_UNSUPPORTED"/>
+		<field name="SCORE_MAX"/>
+		<field name="SCORE_MIN"/>
+	</class>
+	<class name="android/hardware/camera2/params/InputConfiguration" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;I)V" since="31"/>
+		<method name="getFormat()I"/>
+		<method name="getHeight()I"/>
+		<method name="getWidth()I"/>
+		<method name="isMultiResolution()Z" since="31"/>
+	</class>
+	<class name="android/hardware/camera2/params/LensShadingMap" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="copyGainFactors([FI)V"/>
+		<method name="getColumnCount()I"/>
+		<method name="getGainFactor(III)F"/>
+		<method name="getGainFactorCount()I"/>
+		<method name="getGainFactorVector(II)Landroid/hardware/camera2/params/RggbChannelVector;"/>
+		<method name="getRowCount()I"/>
+		<field name="MINIMUM_GAIN_FACTOR"/>
+	</class>
+	<class name="android/hardware/camera2/params/MandatoryStreamCombination" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getDescription()Ljava/lang/CharSequence;"/>
+		<method name="getStreamsInformation()Ljava/util/List;"/>
+		<method name="isReprocessable()Z"/>
+	</class>
+	<class name="android/hardware/camera2/params/MandatoryStreamCombination$MandatoryStreamInformation" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getAvailableSizes()Ljava/util/List;"/>
+		<method name="getFormat()I"/>
+		<method name="isInput()Z"/>
+		<method name="isMaximumSize()Z" since="31"/>
+		<method name="isUltraHighResolution()Z" since="31"/>
+	</class>
+	<class name="android/hardware/camera2/params/MeteringRectangle" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IIIII)V"/>
+		<method name="&lt;init>(Landroid/graphics/Point;Landroid/util/Size;I)V"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;I)V"/>
+		<method name="equals(Landroid/hardware/camera2/params/MeteringRectangle;)Z"/>
+		<method name="getHeight()I"/>
+		<method name="getMeteringWeight()I"/>
+		<method name="getRect()Landroid/graphics/Rect;"/>
+		<method name="getSize()Landroid/util/Size;"/>
+		<method name="getUpperLeftPoint()Landroid/graphics/Point;"/>
+		<method name="getWidth()I"/>
+		<method name="getX()I"/>
+		<method name="getY()I"/>
+		<field name="METERING_WEIGHT_DONT_CARE"/>
+		<field name="METERING_WEIGHT_MAX"/>
+		<field name="METERING_WEIGHT_MIN"/>
+	</class>
+	<class name="android/hardware/camera2/params/MultiResolutionStreamConfigurationMap" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getInputFormats()[I"/>
+		<method name="getInputInfo(I)Ljava/util/Collection;"/>
+		<method name="getOutputFormats()[I"/>
+		<method name="getOutputInfo(I)Ljava/util/Collection;"/>
+	</class>
+	<class name="android/hardware/camera2/params/MultiResolutionStreamInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IILjava/lang/String;)V"/>
+		<method name="getHeight()I"/>
+		<method name="getPhysicalCameraId()Ljava/lang/String;"/>
+		<method name="getWidth()I"/>
+	</class>
+	<class name="android/hardware/camera2/params/OisSample" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(JFF)V"/>
+		<method name="getTimestamp()J"/>
+		<method name="getXshift()F"/>
+		<method name="getYshift()F"/>
+	</class>
+	<class name="android/hardware/camera2/params/OutputConfiguration" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ILandroid/view/Surface;)V"/>
+		<method name="&lt;init>(Landroid/util/Size;Ljava/lang/Class;)V" since="26"/>
+		<method name="&lt;init>(Landroid/view/Surface;)V"/>
+		<method name="addSensorPixelModeUsed(I)V" since="31"/>
+		<method name="addSurface(Landroid/view/Surface;)V" since="26"/>
+		<method name="createInstancesForMultiResolutionOutput(Landroid/hardware/camera2/MultiResolutionImageReader;)Ljava/util/Collection;" since="31"/>
+		<method name="enableSurfaceSharing()V" since="26"/>
+		<method name="getMaxSharedSurfaceCount()I" since="28"/>
+		<method name="getSurface()Landroid/view/Surface;"/>
+		<method name="getSurfaceGroupId()I"/>
+		<method name="getSurfaces()Ljava/util/List;" since="26"/>
+		<method name="removeSensorPixelModeUsed(I)V" since="31"/>
+		<method name="removeSurface(Landroid/view/Surface;)V" since="28"/>
+		<method name="setPhysicalCameraId(Ljava/lang/String;)V" since="28"/>
+		<field name="CREATOR"/>
+		<field name="SURFACE_GROUP_ID_NONE"/>
+	</class>
+	<class name="android/hardware/camera2/params/RecommendedStreamConfigurationMap" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getHighResolutionOutputSizes(I)Ljava/util/Set;"/>
+		<method name="getHighSpeedVideoFpsRanges()Ljava/util/Set;"/>
+		<method name="getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)Ljava/util/Set;"/>
+		<method name="getHighSpeedVideoSizes()Ljava/util/Set;"/>
+		<method name="getHighSpeedVideoSizesFor(Landroid/util/Range;)Ljava/util/Set;"/>
+		<method name="getInputFormats()Ljava/util/Set;"/>
+		<method name="getInputSizes(I)Ljava/util/Set;"/>
+		<method name="getOutputFormats()Ljava/util/Set;"/>
+		<method name="getOutputMinFrameDuration(ILandroid/util/Size;)J"/>
+		<method name="getOutputMinFrameDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
+		<method name="getOutputSizes(I)Ljava/util/Set;"/>
+		<method name="getOutputSizes(Ljava/lang/Class;)Ljava/util/Set;"/>
+		<method name="getOutputStallDuration(ILandroid/util/Size;)J"/>
+		<method name="getOutputStallDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
+		<method name="getRecommendedUseCase()I"/>
+		<method name="getValidOutputFormatsForInput(I)Ljava/util/Set;"/>
+		<method name="isOutputSupportedFor(I)Z"/>
+		<method name="isOutputSupportedFor(Landroid/view/Surface;)Z"/>
+		<field name="USECASE_LOW_LATENCY_SNAPSHOT"/>
+		<field name="USECASE_PREVIEW"/>
+		<field name="USECASE_RAW"/>
+		<field name="USECASE_RECORD"/>
+		<field name="USECASE_SNAPSHOT"/>
+		<field name="USECASE_VIDEO_SNAPSHOT"/>
+		<field name="USECASE_ZSL"/>
+	</class>
+	<class name="android/hardware/camera2/params/RggbChannelVector" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(FFFF)V"/>
+		<method name="copyTo([FI)V"/>
+		<method name="getBlue()F"/>
+		<method name="getComponent(I)F"/>
+		<method name="getGreenEven()F"/>
+		<method name="getGreenOdd()F"/>
+		<method name="getRed()F"/>
+		<field name="BLUE"/>
+		<field name="COUNT"/>
+		<field name="GREEN_EVEN"/>
+		<field name="GREEN_ODD"/>
+		<field name="RED"/>
+	</class>
+	<class name="android/hardware/camera2/params/SessionConfiguration" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="29"/>
+		<method name="&lt;init>(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraCaptureSession$StateCallback;)V"/>
+		<method name="getExecutor()Ljava/util/concurrent/Executor;"/>
+		<method name="getInputConfiguration()Landroid/hardware/camera2/params/InputConfiguration;"/>
+		<method name="getOutputConfigurations()Ljava/util/List;"/>
+		<method name="getSessionParameters()Landroid/hardware/camera2/CaptureRequest;"/>
+		<method name="getSessionType()I"/>
+		<method name="getStateCallback()Landroid/hardware/camera2/CameraCaptureSession$StateCallback;"/>
+		<method name="setInputConfiguration(Landroid/hardware/camera2/params/InputConfiguration;)V"/>
+		<method name="setSessionParameters(Landroid/hardware/camera2/CaptureRequest;)V"/>
+		<field name="CREATOR" since="29"/>
+		<field name="SESSION_HIGH_SPEED"/>
+		<field name="SESSION_REGULAR"/>
+	</class>
+	<class name="android/hardware/camera2/params/StreamConfigurationMap" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getHighResolutionOutputSizes(I)[Landroid/util/Size;" since="23"/>
+		<method name="getHighSpeedVideoFpsRanges()[Landroid/util/Range;"/>
+		<method name="getHighSpeedVideoFpsRangesFor(Landroid/util/Size;)[Landroid/util/Range;"/>
+		<method name="getHighSpeedVideoSizes()[Landroid/util/Size;"/>
+		<method name="getHighSpeedVideoSizesFor(Landroid/util/Range;)[Landroid/util/Size;"/>
+		<method name="getInputFormats()[I" since="23"/>
+		<method name="getInputSizes(I)[Landroid/util/Size;" since="23"/>
+		<method name="getOutputFormats()[I"/>
+		<method name="getOutputMinFrameDuration(ILandroid/util/Size;)J"/>
+		<method name="getOutputMinFrameDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
+		<method name="getOutputSizes(I)[Landroid/util/Size;"/>
+		<method name="getOutputSizes(Ljava/lang/Class;)[Landroid/util/Size;"/>
+		<method name="getOutputStallDuration(ILandroid/util/Size;)J"/>
+		<method name="getOutputStallDuration(Ljava/lang/Class;Landroid/util/Size;)J"/>
+		<method name="getValidOutputFormatsForInput(I)[I" since="23"/>
+		<method name="isOutputSupportedFor(I)Z"/>
+		<method name="isOutputSupportedFor(Landroid/view/Surface;)Z"/>
+		<method name="isOutputSupportedFor(Ljava/lang/Class;)Z"/>
+	</class>
+	<class name="android/hardware/camera2/params/TonemapCurve" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>([F[F[F)V"/>
+		<method name="copyColorCurve(I[FI)V"/>
+		<method name="getPoint(II)Landroid/graphics/PointF;"/>
+		<method name="getPointCount(I)I"/>
+		<field name="CHANNEL_BLUE"/>
+		<field name="CHANNEL_GREEN"/>
+		<field name="CHANNEL_RED"/>
+		<field name="LEVEL_BLACK"/>
+		<field name="LEVEL_WHITE"/>
+		<field name="POINT_SIZE"/>
+	</class>
+	<class name="android/hardware/display/DeviceProductInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V"/>
+		<method name="getConnectionToSinkType()I"/>
+		<method name="getManufactureWeek()I"/>
+		<method name="getManufactureYear()I"/>
+		<method name="getManufacturerPnpId()Ljava/lang/String;"/>
+		<method name="getModelYear()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getProductId()Ljava/lang/String;"/>
+		<field name="CONNECTION_TO_SINK_BUILT_IN"/>
+		<field name="CONNECTION_TO_SINK_DIRECT"/>
+		<field name="CONNECTION_TO_SINK_TRANSITIVE"/>
+		<field name="CONNECTION_TO_SINK_UNKNOWN"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/hardware/display/DisplayManager" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;I)Landroid/hardware/display/VirtualDisplay;" since="19"/>
+		<method name="createVirtualDisplay(Ljava/lang/String;IIILandroid/view/Surface;ILandroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;" since="21"/>
+		<method name="getDisplay(I)Landroid/view/Display;"/>
+		<method name="getDisplays()[Landroid/view/Display;"/>
+		<method name="getDisplays(Ljava/lang/String;)[Landroid/view/Display;"/>
+		<method name="getMatchContentFrameRateUserPreference()I" since="31"/>
+		<method name="registerDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;Landroid/os/Handler;)V"/>
+		<method name="unregisterDisplayListener(Landroid/hardware/display/DisplayManager$DisplayListener;)V"/>
+		<field name="DISPLAY_CATEGORY_PRESENTATION"/>
+		<field name="MATCH_CONTENT_FRAMERATE_ALWAYS" since="31"/>
+		<field name="MATCH_CONTENT_FRAMERATE_NEVER" since="31"/>
+		<field name="MATCH_CONTENT_FRAMERATE_SEAMLESSS_ONLY" since="31"/>
+		<field name="MATCH_CONTENT_FRAMERATE_UNKNOWN" since="31"/>
+		<field name="VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR" since="21"/>
+		<field name="VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY" since="20"/>
+		<field name="VIRTUAL_DISPLAY_FLAG_PRESENTATION" since="19"/>
+		<field name="VIRTUAL_DISPLAY_FLAG_PUBLIC" since="19"/>
+		<field name="VIRTUAL_DISPLAY_FLAG_SECURE" since="19"/>
+	</class>
+	<class name="android/hardware/display/DisplayManager$DisplayListener" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="onDisplayAdded(I)V"/>
+		<method name="onDisplayChanged(I)V"/>
+		<method name="onDisplayRemoved(I)V"/>
+	</class>
+	<class name="android/hardware/display/VirtualDisplay" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getDisplay()Landroid/view/Display;"/>
+		<method name="getSurface()Landroid/view/Surface;" since="20"/>
+		<method name="release()V"/>
+		<method name="resize(III)V" since="21"/>
+		<method name="setSurface(Landroid/view/Surface;)V" since="20"/>
+	</class>
+	<class name="android/hardware/display/VirtualDisplay$Callback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onPaused()V"/>
+		<method name="onResumed()V"/>
+		<method name="onStopped()V"/>
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager" since="23" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="authenticate(Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;Landroid/os/CancellationSignal;ILandroid/hardware/fingerprint/FingerprintManager$AuthenticationCallback;Landroid/os/Handler;)V" deprecated="28"/>
+		<method name="hasEnrolledFingerprints()Z" deprecated="28"/>
+		<method name="isHardwareDetected()Z" deprecated="28"/>
+		<field name="FINGERPRINT_ACQUIRED_GOOD"/>
+		<field name="FINGERPRINT_ACQUIRED_IMAGER_DIRTY"/>
+		<field name="FINGERPRINT_ACQUIRED_INSUFFICIENT"/>
+		<field name="FINGERPRINT_ACQUIRED_PARTIAL"/>
+		<field name="FINGERPRINT_ACQUIRED_TOO_FAST"/>
+		<field name="FINGERPRINT_ACQUIRED_TOO_SLOW"/>
+		<field name="FINGERPRINT_ERROR_CANCELED"/>
+		<field name="FINGERPRINT_ERROR_HW_NOT_PRESENT" since="28"/>
+		<field name="FINGERPRINT_ERROR_HW_UNAVAILABLE"/>
+		<field name="FINGERPRINT_ERROR_LOCKOUT"/>
+		<field name="FINGERPRINT_ERROR_LOCKOUT_PERMANENT" since="27"/>
+		<field name="FINGERPRINT_ERROR_NO_FINGERPRINTS" since="28"/>
+		<field name="FINGERPRINT_ERROR_NO_SPACE"/>
+		<field name="FINGERPRINT_ERROR_TIMEOUT"/>
+		<field name="FINGERPRINT_ERROR_UNABLE_TO_PROCESS"/>
+		<field name="FINGERPRINT_ERROR_USER_CANCELED" since="27"/>
+		<field name="FINGERPRINT_ERROR_VENDOR" since="27"/>
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationCallback" since="23" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="onAuthenticationError(ILjava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="onAuthenticationFailed()V" deprecated="29"/>
+		<method name="onAuthenticationHelp(ILjava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="onAuthenticationSucceeded(Landroid/hardware/fingerprint/FingerprintManager$AuthenticationResult;)V" deprecated="29"/>
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager$AuthenticationResult" since="23" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="getCryptoObject()Landroid/hardware/fingerprint/FingerprintManager$CryptoObject;" deprecated="29"/>
+	</class>
+	<class name="android/hardware/fingerprint/FingerprintManager$CryptoObject" since="23" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/Signature;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljavax/crypto/Cipher;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljavax/crypto/Mac;)V" deprecated="29"/>
+		<method name="getCipher()Ljavax/crypto/Cipher;" deprecated="29"/>
+		<method name="getMac()Ljavax/crypto/Mac;" deprecated="29"/>
+		<method name="getSignature()Ljava/security/Signature;" deprecated="29"/>
+	</class>
+	<class name="android/hardware/input/InputManager" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="getInputDevice(I)Landroid/view/InputDevice;"/>
+		<method name="getInputDeviceIds()[I"/>
+		<method name="getMaximumObscuringOpacityForTouch()F" since="31"/>
+		<method name="registerInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;Landroid/os/Handler;)V"/>
+		<method name="unregisterInputDeviceListener(Landroid/hardware/input/InputManager$InputDeviceListener;)V"/>
+		<method name="verifyInputEvent(Landroid/view/InputEvent;)Landroid/view/VerifiedInputEvent;" since="30"/>
+		<field name="ACTION_QUERY_KEYBOARD_LAYOUTS"/>
+		<field name="META_DATA_KEYBOARD_LAYOUTS"/>
+	</class>
+	<class name="android/hardware/input/InputManager$InputDeviceListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onInputDeviceAdded(I)V"/>
+		<method name="onInputDeviceChanged(I)V"/>
+		<method name="onInputDeviceRemoved(I)V"/>
+	</class>
+	<class name="android/hardware/lights/Light" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getId()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getOrdinal()I"/>
+		<method name="getType()I"/>
+		<method name="hasBrightnessControl()Z"/>
+		<method name="hasRgbControl()Z"/>
+		<field name="CREATOR"/>
+		<field name="LIGHT_CAPABILITY_BRIGHTNESS"/>
+		<field name="LIGHT_CAPABILITY_RGB"/>
+		<field name="LIGHT_TYPE_INPUT"/>
+		<field name="LIGHT_TYPE_MICROPHONE"/>
+		<field name="LIGHT_TYPE_PLAYER_ID"/>
+	</class>
+	<class name="android/hardware/lights/LightState" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getColor()I"/>
+		<method name="getPlayerId()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/hardware/lights/LightState$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/hardware/lights/LightState;"/>
+		<method name="setColor(I)Landroid/hardware/lights/LightState$Builder;"/>
+		<method name="setPlayerId(I)Landroid/hardware/lights/LightState$Builder;"/>
+	</class>
+	<class name="android/hardware/lights/LightsManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getLightState(Landroid/hardware/lights/Light;)Landroid/hardware/lights/LightState;"/>
+		<method name="getLights()Ljava/util/List;"/>
+		<method name="openSession()Landroid/hardware/lights/LightsManager$LightsSession;"/>
+	</class>
+	<class name="android/hardware/lights/LightsManager$LightsSession" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="requestLights(Landroid/hardware/lights/LightsRequest;)V"/>
+	</class>
+	<class name="android/hardware/lights/LightsRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getLightStates()Ljava/util/List;"/>
+		<method name="getLights()Ljava/util/List;"/>
+		<method name="getLightsAndStates()Ljava/util/Map;"/>
+	</class>
+	<class name="android/hardware/lights/LightsRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addLight(Landroid/hardware/lights/Light;Landroid/hardware/lights/LightState;)Landroid/hardware/lights/LightsRequest$Builder;"/>
+		<method name="build()Landroid/hardware/lights/LightsRequest;"/>
+		<method name="clearLight(Landroid/hardware/lights/Light;)Landroid/hardware/lights/LightsRequest$Builder;"/>
+	</class>
+	<class name="android/hardware/location/GeofenceHardware" since="18" removed="21">
+		<extends name="java/lang/Object"/>
+		<method name="addGeofence(IILandroid/hardware/location/GeofenceHardwareRequest;Landroid/hardware/location/GeofenceHardwareCallback;)Z"/>
+		<method name="getMonitoringTypes()[I"/>
+		<method name="getStatusOfMonitoringType(I)I"/>
+		<method name="pauseGeofence(II)Z"/>
+		<method name="registerForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z"/>
+		<method name="removeGeofence(II)Z"/>
+		<method name="resumeGeofence(III)Z"/>
+		<method name="unregisterForMonitorStateChangeCallback(ILandroid/hardware/location/GeofenceHardwareMonitorCallback;)Z"/>
+		<field name="GEOFENCE_ENTERED"/>
+		<field name="GEOFENCE_ERROR_ID_EXISTS"/>
+		<field name="GEOFENCE_ERROR_ID_UNKNOWN"/>
+		<field name="GEOFENCE_ERROR_INVALID_TRANSITION"/>
+		<field name="GEOFENCE_ERROR_TOO_MANY_GEOFENCES"/>
+		<field name="GEOFENCE_EXITED"/>
+		<field name="GEOFENCE_FAILURE"/>
+		<field name="GEOFENCE_SUCCESS"/>
+		<field name="GEOFENCE_UNCERTAIN"/>
+		<field name="MONITORING_TYPE_GPS_HARDWARE"/>
+		<field name="MONITOR_CURRENTLY_AVAILABLE"/>
+		<field name="MONITOR_CURRENTLY_UNAVAILABLE"/>
+		<field name="MONITOR_UNSUPPORTED"/>
+	</class>
+	<class name="android/hardware/location/GeofenceHardwareCallback" since="18" removed="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGeofenceAdd(II)V"/>
+		<method name="onGeofencePause(II)V"/>
+		<method name="onGeofenceRemove(II)V"/>
+		<method name="onGeofenceResume(II)V"/>
+		<method name="onGeofenceTransition(IILandroid/location/Location;JI)V"/>
+	</class>
+	<class name="android/hardware/location/GeofenceHardwareMonitorCallback" since="18" removed="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onMonitoringSystemChange(IZLandroid/location/Location;)V"/>
+	</class>
+	<class name="android/hardware/location/GeofenceHardwareRequest" since="18" removed="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="createCircularGeofence(DDD)Landroid/hardware/location/GeofenceHardwareRequest;"/>
+		<method name="getLastTransition()I"/>
+		<method name="getLatitude()D"/>
+		<method name="getLongitude()D"/>
+		<method name="getMonitorTransitions()I"/>
+		<method name="getNotificationResponsiveness()I"/>
+		<method name="getRadius()D"/>
+		<method name="getUnknownTimer()I"/>
+		<method name="setLastTransition(I)V"/>
+		<method name="setMonitorTransitions(I)V"/>
+		<method name="setNotificationResponsiveness(I)V"/>
+		<method name="setUnknownTimer(I)V"/>
+	</class>
+	<class name="android/hardware/usb/UsbAccessory" since="12">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getManufacturer()Ljava/lang/String;"/>
+		<method name="getModel()Ljava/lang/String;"/>
+		<method name="getSerial()Ljava/lang/String;"/>
+		<method name="getUri()Ljava/lang/String;"/>
+		<method name="getVersion()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/hardware/usb/UsbConfiguration" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getId()I"/>
+		<method name="getInterface(I)Landroid/hardware/usb/UsbInterface;"/>
+		<method name="getInterfaceCount()I"/>
+		<method name="getMaxPower()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="isRemoteWakeup()Z"/>
+		<method name="isSelfPowered()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/hardware/usb/UsbConstants" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="USB_CLASS_APP_SPEC"/>
+		<field name="USB_CLASS_AUDIO"/>
+		<field name="USB_CLASS_CDC_DATA"/>
+		<field name="USB_CLASS_COMM"/>
+		<field name="USB_CLASS_CONTENT_SEC"/>
+		<field name="USB_CLASS_CSCID"/>
+		<field name="USB_CLASS_HID"/>
+		<field name="USB_CLASS_HUB"/>
+		<field name="USB_CLASS_MASS_STORAGE"/>
+		<field name="USB_CLASS_MISC"/>
+		<field name="USB_CLASS_PER_INTERFACE"/>
+		<field name="USB_CLASS_PHYSICA"/>
+		<field name="USB_CLASS_PRINTER"/>
+		<field name="USB_CLASS_STILL_IMAGE"/>
+		<field name="USB_CLASS_VENDOR_SPEC"/>
+		<field name="USB_CLASS_VIDEO"/>
+		<field name="USB_CLASS_WIRELESS_CONTROLLER"/>
+		<field name="USB_DIR_IN"/>
+		<field name="USB_DIR_OUT"/>
+		<field name="USB_ENDPOINT_DIR_MASK"/>
+		<field name="USB_ENDPOINT_NUMBER_MASK"/>
+		<field name="USB_ENDPOINT_XFERTYPE_MASK"/>
+		<field name="USB_ENDPOINT_XFER_BULK"/>
+		<field name="USB_ENDPOINT_XFER_CONTROL"/>
+		<field name="USB_ENDPOINT_XFER_INT"/>
+		<field name="USB_ENDPOINT_XFER_ISOC"/>
+		<field name="USB_INTERFACE_SUBCLASS_BOOT"/>
+		<field name="USB_SUBCLASS_VENDOR_SPEC"/>
+		<field name="USB_TYPE_CLASS"/>
+		<field name="USB_TYPE_MASK"/>
+		<field name="USB_TYPE_RESERVED"/>
+		<field name="USB_TYPE_STANDARD"/>
+		<field name="USB_TYPE_VENDOR"/>
+	</class>
+	<class name="android/hardware/usb/UsbDevice" since="12">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getConfiguration(I)Landroid/hardware/usb/UsbConfiguration;" since="21"/>
+		<method name="getConfigurationCount()I" since="21"/>
+		<method name="getDeviceClass()I"/>
+		<method name="getDeviceId()I"/>
+		<method name="getDeviceId(Ljava/lang/String;)I"/>
+		<method name="getDeviceName()Ljava/lang/String;"/>
+		<method name="getDeviceName(I)Ljava/lang/String;"/>
+		<method name="getDeviceProtocol()I"/>
+		<method name="getDeviceSubclass()I"/>
+		<method name="getInterface(I)Landroid/hardware/usb/UsbInterface;"/>
+		<method name="getInterfaceCount()I"/>
+		<method name="getManufacturerName()Ljava/lang/String;" since="21"/>
+		<method name="getProductId()I"/>
+		<method name="getProductName()Ljava/lang/String;" since="21"/>
+		<method name="getSerialNumber()Ljava/lang/String;" since="21"/>
+		<method name="getVendorId()I"/>
+		<method name="getVersion()Ljava/lang/String;" since="23"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/hardware/usb/UsbDeviceConnection" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BII)I"/>
+		<method name="bulkTransfer(Landroid/hardware/usb/UsbEndpoint;[BIII)I" since="18"/>
+		<method name="claimInterface(Landroid/hardware/usb/UsbInterface;Z)Z"/>
+		<method name="close()V"/>
+		<method name="controlTransfer(IIII[BII)I"/>
+		<method name="controlTransfer(IIII[BIII)I" since="18"/>
+		<method name="getFileDescriptor()I"/>
+		<method name="getRawDescriptors()[B" since="13"/>
+		<method name="getSerial()Ljava/lang/String;"/>
+		<method name="releaseInterface(Landroid/hardware/usb/UsbInterface;)Z"/>
+		<method name="requestWait()Landroid/hardware/usb/UsbRequest;"/>
+		<method name="requestWait(J)Landroid/hardware/usb/UsbRequest;" since="26"/>
+		<method name="setConfiguration(Landroid/hardware/usb/UsbConfiguration;)Z" since="21"/>
+		<method name="setInterface(Landroid/hardware/usb/UsbInterface;)Z" since="21"/>
+	</class>
+	<class name="android/hardware/usb/UsbEndpoint" since="12">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAddress()I"/>
+		<method name="getAttributes()I"/>
+		<method name="getDirection()I"/>
+		<method name="getEndpointNumber()I"/>
+		<method name="getInterval()I"/>
+		<method name="getMaxPacketSize()I"/>
+		<method name="getType()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/hardware/usb/UsbInterface" since="12">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAlternateSetting()I" since="21"/>
+		<method name="getEndpoint(I)Landroid/hardware/usb/UsbEndpoint;"/>
+		<method name="getEndpointCount()I"/>
+		<method name="getId()I"/>
+		<method name="getInterfaceClass()I"/>
+		<method name="getInterfaceProtocol()I"/>
+		<method name="getInterfaceSubclass()I"/>
+		<method name="getName()Ljava/lang/String;" since="21"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/hardware/usb/UsbManager" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="getAccessoryList()[Landroid/hardware/usb/UsbAccessory;"/>
+		<method name="getDeviceList()Ljava/util/HashMap;"/>
+		<method name="hasPermission(Landroid/hardware/usb/UsbAccessory;)Z"/>
+		<method name="hasPermission(Landroid/hardware/usb/UsbDevice;)Z"/>
+		<method name="openAccessory(Landroid/hardware/usb/UsbAccessory;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openDevice(Landroid/hardware/usb/UsbDevice;)Landroid/hardware/usb/UsbDeviceConnection;"/>
+		<method name="requestPermission(Landroid/hardware/usb/UsbAccessory;Landroid/app/PendingIntent;)V"/>
+		<method name="requestPermission(Landroid/hardware/usb/UsbDevice;Landroid/app/PendingIntent;)V"/>
+		<field name="ACTION_USB_ACCESSORY_ATTACHED"/>
+		<field name="ACTION_USB_ACCESSORY_DETACHED"/>
+		<field name="ACTION_USB_DEVICE_ATTACHED"/>
+		<field name="ACTION_USB_DEVICE_DETACHED"/>
+		<field name="EXTRA_ACCESSORY"/>
+		<field name="EXTRA_DEVICE"/>
+		<field name="EXTRA_PERMISSION_GRANTED"/>
+	</class>
+	<class name="android/hardware/usb/UsbRequest" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="cancel()Z"/>
+		<method name="close()V"/>
+		<method name="getClientData()Ljava/lang/Object;"/>
+		<method name="getEndpoint()Landroid/hardware/usb/UsbEndpoint;"/>
+		<method name="initialize(Landroid/hardware/usb/UsbDeviceConnection;Landroid/hardware/usb/UsbEndpoint;)Z"/>
+		<method name="queue(Ljava/nio/ByteBuffer;)Z" since="26"/>
+		<method name="queue(Ljava/nio/ByteBuffer;I)Z" deprecated="26"/>
+		<method name="setClientData(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/icu/lang/UCharacter" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/lang/UCharacterEnums$ECharacterCategory"/>
+		<implements name="android/icu/lang/UCharacterEnums$ECharacterDirection"/>
+		<method name="charCount(I)I"/>
+		<method name="codePointAt(Ljava/lang/CharSequence;I)I"/>
+		<method name="codePointAt([CI)I"/>
+		<method name="codePointAt([CII)I"/>
+		<method name="codePointBefore(Ljava/lang/CharSequence;I)I"/>
+		<method name="codePointBefore([CI)I"/>
+		<method name="codePointBefore([CII)I"/>
+		<method name="codePointCount(Ljava/lang/CharSequence;II)I"/>
+		<method name="codePointCount([CII)I"/>
+		<method name="digit(I)I"/>
+		<method name="digit(II)I"/>
+		<method name="foldCase(II)I"/>
+		<method name="foldCase(IZ)I"/>
+		<method name="foldCase(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<method name="foldCase(Ljava/lang/String;Z)Ljava/lang/String;"/>
+		<method name="forDigit(II)C"/>
+		<method name="getAge(I)Landroid/icu/util/VersionInfo;"/>
+		<method name="getBidiPairedBracket(I)I"/>
+		<method name="getCharFromExtendedName(Ljava/lang/String;)I"/>
+		<method name="getCharFromName(Ljava/lang/String;)I"/>
+		<method name="getCharFromNameAlias(Ljava/lang/String;)I"/>
+		<method name="getCodePoint(C)I"/>
+		<method name="getCodePoint(CC)I"/>
+		<method name="getCombiningClass(I)I"/>
+		<method name="getDirection(I)I"/>
+		<method name="getDirectionality(I)B"/>
+		<method name="getExtendedName(I)Ljava/lang/String;"/>
+		<method name="getExtendedNameIterator()Landroid/icu/util/ValueIterator;"/>
+		<method name="getHanNumericValue(I)I"/>
+		<method name="getIntPropertyMaxValue(I)I"/>
+		<method name="getIntPropertyMinValue(I)I"/>
+		<method name="getIntPropertyValue(II)I"/>
+		<method name="getMirror(I)I"/>
+		<method name="getName(I)Ljava/lang/String;"/>
+		<method name="getName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getNameAlias(I)Ljava/lang/String;"/>
+		<method name="getNameIterator()Landroid/icu/util/ValueIterator;"/>
+		<method name="getNumericValue(I)I"/>
+		<method name="getPropertyEnum(Ljava/lang/CharSequence;)I"/>
+		<method name="getPropertyName(II)Ljava/lang/String;"/>
+		<method name="getPropertyValueEnum(ILjava/lang/CharSequence;)I"/>
+		<method name="getPropertyValueName(III)Ljava/lang/String;"/>
+		<method name="getType(I)I"/>
+		<method name="getTypeIterator()Landroid/icu/util/RangeValueIterator;"/>
+		<method name="getUnicodeNumericValue(I)D"/>
+		<method name="getUnicodeVersion()Landroid/icu/util/VersionInfo;"/>
+		<method name="hasBinaryProperty(II)Z"/>
+		<method name="isBMP(I)Z"/>
+		<method name="isBaseForm(I)Z"/>
+		<method name="isDefined(I)Z"/>
+		<method name="isDigit(I)Z"/>
+		<method name="isHighSurrogate(C)Z"/>
+		<method name="isISOControl(I)Z"/>
+		<method name="isIdentifierIgnorable(I)Z"/>
+		<method name="isJavaIdentifierPart(I)Z"/>
+		<method name="isJavaIdentifierStart(I)Z"/>
+		<method name="isLegal(I)Z"/>
+		<method name="isLegal(Ljava/lang/String;)Z"/>
+		<method name="isLetter(I)Z"/>
+		<method name="isLetterOrDigit(I)Z"/>
+		<method name="isLowSurrogate(C)Z"/>
+		<method name="isLowerCase(I)Z"/>
+		<method name="isMirrored(I)Z"/>
+		<method name="isPrintable(I)Z"/>
+		<method name="isSpaceChar(I)Z"/>
+		<method name="isSupplementary(I)Z"/>
+		<method name="isSupplementaryCodePoint(I)Z"/>
+		<method name="isSurrogatePair(CC)Z"/>
+		<method name="isTitleCase(I)Z"/>
+		<method name="isUAlphabetic(I)Z"/>
+		<method name="isULowercase(I)Z"/>
+		<method name="isUUppercase(I)Z"/>
+		<method name="isUWhiteSpace(I)Z"/>
+		<method name="isUnicodeIdentifierPart(I)Z"/>
+		<method name="isUnicodeIdentifierStart(I)Z"/>
+		<method name="isUpperCase(I)Z"/>
+		<method name="isValidCodePoint(I)Z"/>
+		<method name="isWhitespace(I)Z"/>
+		<method name="offsetByCodePoints(Ljava/lang/CharSequence;II)I"/>
+		<method name="offsetByCodePoints([CIIII)I"/>
+		<method name="toChars(I)[C"/>
+		<method name="toChars(I[CI)I"/>
+		<method name="toCodePoint(CC)I"/>
+		<method name="toLowerCase(I)I"/>
+		<method name="toLowerCase(Landroid/icu/util/ULocale;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toLowerCase(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toLowerCase(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+		<method name="toTitleCase(I)I"/>
+		<method name="toTitleCase(Landroid/icu/util/ULocale;Ljava/lang/String;Landroid/icu/text/BreakIterator;)Ljava/lang/String;"/>
+		<method name="toTitleCase(Landroid/icu/util/ULocale;Ljava/lang/String;Landroid/icu/text/BreakIterator;I)Ljava/lang/String;"/>
+		<method name="toTitleCase(Ljava/lang/String;Landroid/icu/text/BreakIterator;)Ljava/lang/String;"/>
+		<method name="toTitleCase(Ljava/util/Locale;Ljava/lang/String;Landroid/icu/text/BreakIterator;)Ljava/lang/String;"/>
+		<method name="toTitleCase(Ljava/util/Locale;Ljava/lang/String;Landroid/icu/text/BreakIterator;I)Ljava/lang/String;"/>
+		<method name="toUpperCase(I)I"/>
+		<method name="toUpperCase(Landroid/icu/util/ULocale;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toUpperCase(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toUpperCase(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="FOLD_CASE_DEFAULT"/>
+		<field name="FOLD_CASE_EXCLUDE_SPECIAL_I"/>
+		<field name="MAX_CODE_POINT"/>
+		<field name="MAX_HIGH_SURROGATE"/>
+		<field name="MAX_LOW_SURROGATE"/>
+		<field name="MAX_RADIX"/>
+		<field name="MAX_SURROGATE"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_CODE_POINT"/>
+		<field name="MIN_HIGH_SURROGATE"/>
+		<field name="MIN_LOW_SURROGATE"/>
+		<field name="MIN_RADIX"/>
+		<field name="MIN_SUPPLEMENTARY_CODE_POINT"/>
+		<field name="MIN_SURROGATE"/>
+		<field name="MIN_VALUE"/>
+		<field name="NO_NUMERIC_VALUE"/>
+		<field name="REPLACEMENT_CHAR"/>
+		<field name="SUPPLEMENTARY_MIN_VALUE"/>
+		<field name="TITLECASE_NO_BREAK_ADJUSTMENT"/>
+		<field name="TITLECASE_NO_LOWERCASE"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$BidiPairedBracketType" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="CLOSE"/>
+		<field name="NONE"/>
+		<field name="OPEN"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$DecompositionType" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="CANONICAL"/>
+		<field name="CIRCLE"/>
+		<field name="COMPAT"/>
+		<field name="FINAL"/>
+		<field name="FONT"/>
+		<field name="FRACTION"/>
+		<field name="INITIAL"/>
+		<field name="ISOLATED"/>
+		<field name="MEDIAL"/>
+		<field name="NARROW"/>
+		<field name="NOBREAK"/>
+		<field name="NONE"/>
+		<field name="SMALL"/>
+		<field name="SQUARE"/>
+		<field name="SUB"/>
+		<field name="SUPER"/>
+		<field name="VERTICAL"/>
+		<field name="WIDE"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$EastAsianWidth" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="AMBIGUOUS"/>
+		<field name="FULLWIDTH"/>
+		<field name="HALFWIDTH"/>
+		<field name="NARROW"/>
+		<field name="NEUTRAL"/>
+		<field name="WIDE"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$GraphemeClusterBreak" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="CONTROL"/>
+		<field name="CR"/>
+		<field name="EXTEND"/>
+		<field name="E_BASE" since="26"/>
+		<field name="E_BASE_GAZ" since="26"/>
+		<field name="E_MODIFIER" since="26"/>
+		<field name="GLUE_AFTER_ZWJ" since="26"/>
+		<field name="L"/>
+		<field name="LF"/>
+		<field name="LV"/>
+		<field name="LVT"/>
+		<field name="OTHER"/>
+		<field name="PREPEND"/>
+		<field name="REGIONAL_INDICATOR"/>
+		<field name="SPACING_MARK"/>
+		<field name="T"/>
+		<field name="V"/>
+		<field name="ZWJ" since="26"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$HangulSyllableType" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="LEADING_JAMO"/>
+		<field name="LVT_SYLLABLE"/>
+		<field name="LV_SYLLABLE"/>
+		<field name="NOT_APPLICABLE"/>
+		<field name="TRAILING_JAMO"/>
+		<field name="VOWEL_JAMO"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$IndicPositionalCategory" since="29">
+		<extends name="java/lang/Object"/>
+		<field name="BOTTOM"/>
+		<field name="BOTTOM_AND_LEFT"/>
+		<field name="BOTTOM_AND_RIGHT"/>
+		<field name="LEFT"/>
+		<field name="LEFT_AND_RIGHT"/>
+		<field name="NA"/>
+		<field name="OVERSTRUCK"/>
+		<field name="RIGHT"/>
+		<field name="TOP"/>
+		<field name="TOP_AND_BOTTOM"/>
+		<field name="TOP_AND_BOTTOM_AND_LEFT" since="30"/>
+		<field name="TOP_AND_BOTTOM_AND_RIGHT"/>
+		<field name="TOP_AND_LEFT"/>
+		<field name="TOP_AND_LEFT_AND_RIGHT"/>
+		<field name="TOP_AND_RIGHT"/>
+		<field name="VISUAL_ORDER_LEFT"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$IndicSyllabicCategory" since="29">
+		<extends name="java/lang/Object"/>
+		<field name="AVAGRAHA"/>
+		<field name="BINDU"/>
+		<field name="BRAHMI_JOINING_NUMBER"/>
+		<field name="CANTILLATION_MARK"/>
+		<field name="CONSONANT"/>
+		<field name="CONSONANT_DEAD"/>
+		<field name="CONSONANT_FINAL"/>
+		<field name="CONSONANT_HEAD_LETTER"/>
+		<field name="CONSONANT_INITIAL_POSTFIXED"/>
+		<field name="CONSONANT_KILLER"/>
+		<field name="CONSONANT_MEDIAL"/>
+		<field name="CONSONANT_PLACEHOLDER"/>
+		<field name="CONSONANT_PRECEDING_REPHA"/>
+		<field name="CONSONANT_PREFIXED"/>
+		<field name="CONSONANT_SUBJOINED"/>
+		<field name="CONSONANT_SUCCEEDING_REPHA"/>
+		<field name="CONSONANT_WITH_STACKER"/>
+		<field name="GEMINATION_MARK"/>
+		<field name="INVISIBLE_STACKER"/>
+		<field name="JOINER"/>
+		<field name="MODIFYING_LETTER"/>
+		<field name="NON_JOINER"/>
+		<field name="NUKTA"/>
+		<field name="NUMBER"/>
+		<field name="NUMBER_JOINER"/>
+		<field name="OTHER"/>
+		<field name="PURE_KILLER"/>
+		<field name="REGISTER_SHIFTER"/>
+		<field name="SYLLABLE_MODIFIER"/>
+		<field name="TONE_LETTER"/>
+		<field name="TONE_MARK"/>
+		<field name="VIRAMA"/>
+		<field name="VISARGA"/>
+		<field name="VOWEL"/>
+		<field name="VOWEL_DEPENDENT"/>
+		<field name="VOWEL_INDEPENDENT"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$JoiningGroup" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="AFRICAN_FEH" since="26"/>
+		<field name="AFRICAN_NOON" since="26"/>
+		<field name="AFRICAN_QAF" since="26"/>
+		<field name="AIN"/>
+		<field name="ALAPH"/>
+		<field name="ALEF"/>
+		<field name="BEH"/>
+		<field name="BETH"/>
+		<field name="BURUSHASKI_YEH_BARREE"/>
+		<field name="DAL"/>
+		<field name="DALATH_RISH"/>
+		<field name="E"/>
+		<field name="FARSI_YEH"/>
+		<field name="FE"/>
+		<field name="FEH"/>
+		<field name="FINAL_SEMKATH"/>
+		<field name="GAF"/>
+		<field name="GAMAL"/>
+		<field name="HAH"/>
+		<field name="HAMZA_ON_HEH_GOAL"/>
+		<field name="HANIFI_ROHINGYA_KINNA_YA" since="29"/>
+		<field name="HANIFI_ROHINGYA_PA" since="29"/>
+		<field name="HE"/>
+		<field name="HEH"/>
+		<field name="HEH_GOAL"/>
+		<field name="HETH"/>
+		<field name="KAF"/>
+		<field name="KAPH"/>
+		<field name="KHAPH"/>
+		<field name="KNOTTED_HEH"/>
+		<field name="LAM"/>
+		<field name="LAMADH"/>
+		<field name="MALAYALAM_BHA" since="28"/>
+		<field name="MALAYALAM_JA" since="28"/>
+		<field name="MALAYALAM_LLA" since="28"/>
+		<field name="MALAYALAM_LLLA" since="28"/>
+		<field name="MALAYALAM_NGA" since="28"/>
+		<field name="MALAYALAM_NNA" since="28"/>
+		<field name="MALAYALAM_NNNA" since="28"/>
+		<field name="MALAYALAM_NYA" since="28"/>
+		<field name="MALAYALAM_RA" since="28"/>
+		<field name="MALAYALAM_SSA" since="28"/>
+		<field name="MALAYALAM_TTA" since="28"/>
+		<field name="MANICHAEAN_ALEPH"/>
+		<field name="MANICHAEAN_AYIN"/>
+		<field name="MANICHAEAN_BETH"/>
+		<field name="MANICHAEAN_DALETH"/>
+		<field name="MANICHAEAN_DHAMEDH"/>
+		<field name="MANICHAEAN_FIVE"/>
+		<field name="MANICHAEAN_GIMEL"/>
+		<field name="MANICHAEAN_HETH"/>
+		<field name="MANICHAEAN_HUNDRED"/>
+		<field name="MANICHAEAN_KAPH"/>
+		<field name="MANICHAEAN_LAMEDH"/>
+		<field name="MANICHAEAN_MEM"/>
+		<field name="MANICHAEAN_NUN"/>
+		<field name="MANICHAEAN_ONE"/>
+		<field name="MANICHAEAN_PE"/>
+		<field name="MANICHAEAN_QOPH"/>
+		<field name="MANICHAEAN_RESH"/>
+		<field name="MANICHAEAN_SADHE"/>
+		<field name="MANICHAEAN_SAMEKH"/>
+		<field name="MANICHAEAN_TAW"/>
+		<field name="MANICHAEAN_TEN"/>
+		<field name="MANICHAEAN_TETH"/>
+		<field name="MANICHAEAN_THAMEDH"/>
+		<field name="MANICHAEAN_TWENTY"/>
+		<field name="MANICHAEAN_WAW"/>
+		<field name="MANICHAEAN_YODH"/>
+		<field name="MANICHAEAN_ZAYIN"/>
+		<field name="MEEM"/>
+		<field name="MIM"/>
+		<field name="NOON"/>
+		<field name="NO_JOINING_GROUP"/>
+		<field name="NUN"/>
+		<field name="NYA"/>
+		<field name="PE"/>
+		<field name="QAF"/>
+		<field name="QAPH"/>
+		<field name="REH"/>
+		<field name="REVERSED_PE"/>
+		<field name="ROHINGYA_YEH"/>
+		<field name="SAD"/>
+		<field name="SADHE"/>
+		<field name="SEEN"/>
+		<field name="SEMKATH"/>
+		<field name="SHIN"/>
+		<field name="STRAIGHT_WAW"/>
+		<field name="SWASH_KAF"/>
+		<field name="SYRIAC_WAW"/>
+		<field name="TAH"/>
+		<field name="TAW"/>
+		<field name="TEH_MARBUTA"/>
+		<field name="TEH_MARBUTA_GOAL"/>
+		<field name="TETH"/>
+		<field name="WAW"/>
+		<field name="YEH"/>
+		<field name="YEH_BARREE"/>
+		<field name="YEH_WITH_TAIL"/>
+		<field name="YUDH"/>
+		<field name="YUDH_HE"/>
+		<field name="ZAIN"/>
+		<field name="ZHAIN"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$JoiningType" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="DUAL_JOINING"/>
+		<field name="JOIN_CAUSING"/>
+		<field name="LEFT_JOINING"/>
+		<field name="NON_JOINING"/>
+		<field name="RIGHT_JOINING"/>
+		<field name="TRANSPARENT"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$LineBreak" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="ALPHABETIC"/>
+		<field name="AMBIGUOUS"/>
+		<field name="BREAK_AFTER"/>
+		<field name="BREAK_BEFORE"/>
+		<field name="BREAK_BOTH"/>
+		<field name="BREAK_SYMBOLS"/>
+		<field name="CARRIAGE_RETURN"/>
+		<field name="CLOSE_PARENTHESIS"/>
+		<field name="CLOSE_PUNCTUATION"/>
+		<field name="COMBINING_MARK"/>
+		<field name="COMPLEX_CONTEXT"/>
+		<field name="CONDITIONAL_JAPANESE_STARTER"/>
+		<field name="CONTINGENT_BREAK"/>
+		<field name="EXCLAMATION"/>
+		<field name="E_BASE" since="26"/>
+		<field name="E_MODIFIER" since="26"/>
+		<field name="GLUE"/>
+		<field name="H2"/>
+		<field name="H3"/>
+		<field name="HEBREW_LETTER"/>
+		<field name="HYPHEN"/>
+		<field name="IDEOGRAPHIC"/>
+		<field name="INFIX_NUMERIC"/>
+		<field name="INSEPARABLE"/>
+		<field name="INSEPERABLE"/>
+		<field name="JL"/>
+		<field name="JT"/>
+		<field name="JV"/>
+		<field name="LINE_FEED"/>
+		<field name="MANDATORY_BREAK"/>
+		<field name="NEXT_LINE"/>
+		<field name="NONSTARTER"/>
+		<field name="NUMERIC"/>
+		<field name="OPEN_PUNCTUATION"/>
+		<field name="POSTFIX_NUMERIC"/>
+		<field name="PREFIX_NUMERIC"/>
+		<field name="QUOTATION"/>
+		<field name="REGIONAL_INDICATOR"/>
+		<field name="SPACE"/>
+		<field name="SURROGATE"/>
+		<field name="UNKNOWN"/>
+		<field name="WORD_JOINER"/>
+		<field name="ZWJ" since="26"/>
+		<field name="ZWSPACE"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$NumericType" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="DECIMAL"/>
+		<field name="DIGIT"/>
+		<field name="NONE"/>
+		<field name="NUMERIC"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$SentenceBreak" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="ATERM"/>
+		<field name="CLOSE"/>
+		<field name="CR"/>
+		<field name="EXTEND"/>
+		<field name="FORMAT"/>
+		<field name="LF"/>
+		<field name="LOWER"/>
+		<field name="NUMERIC"/>
+		<field name="OLETTER"/>
+		<field name="OTHER"/>
+		<field name="SCONTINUE"/>
+		<field name="SEP"/>
+		<field name="SP"/>
+		<field name="STERM"/>
+		<field name="UPPER"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$UnicodeBlock" since="24">
+		<extends name="java/lang/Character$Subset"/>
+		<method name="forName(Ljava/lang/String;)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
+		<method name="getID()I"/>
+		<method name="getInstance(I)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
+		<method name="of(I)Landroid/icu/lang/UCharacter$UnicodeBlock;"/>
+		<field name="ADLAM" since="26"/>
+		<field name="ADLAM_ID" since="26"/>
+		<field name="AEGEAN_NUMBERS"/>
+		<field name="AEGEAN_NUMBERS_ID"/>
+		<field name="AHOM"/>
+		<field name="AHOM_ID"/>
+		<field name="ALCHEMICAL_SYMBOLS"/>
+		<field name="ALCHEMICAL_SYMBOLS_ID"/>
+		<field name="ALPHABETIC_PRESENTATION_FORMS"/>
+		<field name="ALPHABETIC_PRESENTATION_FORMS_ID"/>
+		<field name="ANATOLIAN_HIEROGLYPHS"/>
+		<field name="ANATOLIAN_HIEROGLYPHS_ID"/>
+		<field name="ANCIENT_GREEK_MUSICAL_NOTATION"/>
+		<field name="ANCIENT_GREEK_MUSICAL_NOTATION_ID"/>
+		<field name="ANCIENT_GREEK_NUMBERS"/>
+		<field name="ANCIENT_GREEK_NUMBERS_ID"/>
+		<field name="ANCIENT_SYMBOLS"/>
+		<field name="ANCIENT_SYMBOLS_ID"/>
+		<field name="ARABIC"/>
+		<field name="ARABIC_EXTENDED_A"/>
+		<field name="ARABIC_EXTENDED_A_ID"/>
+		<field name="ARABIC_ID"/>
+		<field name="ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS"/>
+		<field name="ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS_ID"/>
+		<field name="ARABIC_PRESENTATION_FORMS_A"/>
+		<field name="ARABIC_PRESENTATION_FORMS_A_ID"/>
+		<field name="ARABIC_PRESENTATION_FORMS_B"/>
+		<field name="ARABIC_PRESENTATION_FORMS_B_ID"/>
+		<field name="ARABIC_SUPPLEMENT"/>
+		<field name="ARABIC_SUPPLEMENT_ID"/>
+		<field name="ARMENIAN"/>
+		<field name="ARMENIAN_ID"/>
+		<field name="ARROWS"/>
+		<field name="ARROWS_ID"/>
+		<field name="AVESTAN"/>
+		<field name="AVESTAN_ID"/>
+		<field name="BALINESE"/>
+		<field name="BALINESE_ID"/>
+		<field name="BAMUM"/>
+		<field name="BAMUM_ID"/>
+		<field name="BAMUM_SUPPLEMENT"/>
+		<field name="BAMUM_SUPPLEMENT_ID"/>
+		<field name="BASIC_LATIN"/>
+		<field name="BASIC_LATIN_ID"/>
+		<field name="BASSA_VAH"/>
+		<field name="BASSA_VAH_ID"/>
+		<field name="BATAK"/>
+		<field name="BATAK_ID"/>
+		<field name="BENGALI"/>
+		<field name="BENGALI_ID"/>
+		<field name="BHAIKSUKI" since="26"/>
+		<field name="BHAIKSUKI_ID" since="26"/>
+		<field name="BLOCK_ELEMENTS"/>
+		<field name="BLOCK_ELEMENTS_ID"/>
+		<field name="BOPOMOFO"/>
+		<field name="BOPOMOFO_EXTENDED"/>
+		<field name="BOPOMOFO_EXTENDED_ID"/>
+		<field name="BOPOMOFO_ID"/>
+		<field name="BOX_DRAWING"/>
+		<field name="BOX_DRAWING_ID"/>
+		<field name="BRAHMI"/>
+		<field name="BRAHMI_ID"/>
+		<field name="BRAILLE_PATTERNS"/>
+		<field name="BRAILLE_PATTERNS_ID"/>
+		<field name="BUGINESE"/>
+		<field name="BUGINESE_ID"/>
+		<field name="BUHID"/>
+		<field name="BUHID_ID"/>
+		<field name="BYZANTINE_MUSICAL_SYMBOLS"/>
+		<field name="BYZANTINE_MUSICAL_SYMBOLS_ID"/>
+		<field name="CARIAN"/>
+		<field name="CARIAN_ID"/>
+		<field name="CAUCASIAN_ALBANIAN"/>
+		<field name="CAUCASIAN_ALBANIAN_ID"/>
+		<field name="CHAKMA"/>
+		<field name="CHAKMA_ID"/>
+		<field name="CHAM"/>
+		<field name="CHAM_ID"/>
+		<field name="CHEROKEE"/>
+		<field name="CHEROKEE_ID"/>
+		<field name="CHEROKEE_SUPPLEMENT"/>
+		<field name="CHEROKEE_SUPPLEMENT_ID"/>
+		<field name="CHESS_SYMBOLS" since="29"/>
+		<field name="CHESS_SYMBOLS_ID" since="29"/>
+		<field name="CHORASMIAN" since="30"/>
+		<field name="CHORASMIAN_ID" since="30"/>
+		<field name="CJK_COMPATIBILITY"/>
+		<field name="CJK_COMPATIBILITY_FORMS"/>
+		<field name="CJK_COMPATIBILITY_FORMS_ID"/>
+		<field name="CJK_COMPATIBILITY_ID"/>
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS"/>
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_ID"/>
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT"/>
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT_ID"/>
+		<field name="CJK_RADICALS_SUPPLEMENT"/>
+		<field name="CJK_RADICALS_SUPPLEMENT_ID"/>
+		<field name="CJK_STROKES"/>
+		<field name="CJK_STROKES_ID"/>
+		<field name="CJK_SYMBOLS_AND_PUNCTUATION"/>
+		<field name="CJK_SYMBOLS_AND_PUNCTUATION_ID"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A_ID"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B_ID"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C_ID"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D_ID"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E_ID"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F" since="28"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F_ID" since="28"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G" since="30"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G_ID" since="30"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_ID"/>
+		<field name="COMBINING_DIACRITICAL_MARKS"/>
+		<field name="COMBINING_DIACRITICAL_MARKS_EXTENDED"/>
+		<field name="COMBINING_DIACRITICAL_MARKS_EXTENDED_ID"/>
+		<field name="COMBINING_DIACRITICAL_MARKS_ID"/>
+		<field name="COMBINING_DIACRITICAL_MARKS_SUPPLEMENT"/>
+		<field name="COMBINING_DIACRITICAL_MARKS_SUPPLEMENT_ID"/>
+		<field name="COMBINING_HALF_MARKS"/>
+		<field name="COMBINING_HALF_MARKS_ID"/>
+		<field name="COMBINING_MARKS_FOR_SYMBOLS"/>
+		<field name="COMBINING_MARKS_FOR_SYMBOLS_ID"/>
+		<field name="COMMON_INDIC_NUMBER_FORMS"/>
+		<field name="COMMON_INDIC_NUMBER_FORMS_ID"/>
+		<field name="CONTROL_PICTURES"/>
+		<field name="CONTROL_PICTURES_ID"/>
+		<field name="COPTIC"/>
+		<field name="COPTIC_EPACT_NUMBERS"/>
+		<field name="COPTIC_EPACT_NUMBERS_ID"/>
+		<field name="COPTIC_ID"/>
+		<field name="COUNTING_ROD_NUMERALS"/>
+		<field name="COUNTING_ROD_NUMERALS_ID"/>
+		<field name="CUNEIFORM"/>
+		<field name="CUNEIFORM_ID"/>
+		<field name="CUNEIFORM_NUMBERS_AND_PUNCTUATION"/>
+		<field name="CUNEIFORM_NUMBERS_AND_PUNCTUATION_ID"/>
+		<field name="CURRENCY_SYMBOLS"/>
+		<field name="CURRENCY_SYMBOLS_ID"/>
+		<field name="CYPRIOT_SYLLABARY"/>
+		<field name="CYPRIOT_SYLLABARY_ID"/>
+		<field name="CYRILLIC"/>
+		<field name="CYRILLIC_EXTENDED_A"/>
+		<field name="CYRILLIC_EXTENDED_A_ID"/>
+		<field name="CYRILLIC_EXTENDED_B"/>
+		<field name="CYRILLIC_EXTENDED_B_ID"/>
+		<field name="CYRILLIC_EXTENDED_C" since="26"/>
+		<field name="CYRILLIC_EXTENDED_C_ID" since="26"/>
+		<field name="CYRILLIC_ID"/>
+		<field name="CYRILLIC_SUPPLEMENT"/>
+		<field name="CYRILLIC_SUPPLEMENTARY"/>
+		<field name="CYRILLIC_SUPPLEMENTARY_ID"/>
+		<field name="CYRILLIC_SUPPLEMENT_ID"/>
+		<field name="DESERET"/>
+		<field name="DESERET_ID"/>
+		<field name="DEVANAGARI"/>
+		<field name="DEVANAGARI_EXTENDED"/>
+		<field name="DEVANAGARI_EXTENDED_ID"/>
+		<field name="DEVANAGARI_ID"/>
+		<field name="DINGBATS"/>
+		<field name="DINGBATS_ID"/>
+		<field name="DIVES_AKURU" since="30"/>
+		<field name="DIVES_AKURU_ID" since="30"/>
+		<field name="DOGRA" since="29"/>
+		<field name="DOGRA_ID" since="29"/>
+		<field name="DOMINO_TILES"/>
+		<field name="DOMINO_TILES_ID"/>
+		<field name="DUPLOYAN"/>
+		<field name="DUPLOYAN_ID"/>
+		<field name="EARLY_DYNASTIC_CUNEIFORM"/>
+		<field name="EARLY_DYNASTIC_CUNEIFORM_ID"/>
+		<field name="EGYPTIAN_HIEROGLYPHS"/>
+		<field name="EGYPTIAN_HIEROGLYPHS_ID"/>
+		<field name="EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS" since="30"/>
+		<field name="EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS_ID" since="30"/>
+		<field name="ELBASAN"/>
+		<field name="ELBASAN_ID"/>
+		<field name="ELYMAIC" since="30"/>
+		<field name="ELYMAIC_ID" since="30"/>
+		<field name="EMOTICONS"/>
+		<field name="EMOTICONS_ID"/>
+		<field name="ENCLOSED_ALPHANUMERICS"/>
+		<field name="ENCLOSED_ALPHANUMERICS_ID"/>
+		<field name="ENCLOSED_ALPHANUMERIC_SUPPLEMENT"/>
+		<field name="ENCLOSED_ALPHANUMERIC_SUPPLEMENT_ID"/>
+		<field name="ENCLOSED_CJK_LETTERS_AND_MONTHS"/>
+		<field name="ENCLOSED_CJK_LETTERS_AND_MONTHS_ID"/>
+		<field name="ENCLOSED_IDEOGRAPHIC_SUPPLEMENT"/>
+		<field name="ENCLOSED_IDEOGRAPHIC_SUPPLEMENT_ID"/>
+		<field name="ETHIOPIC"/>
+		<field name="ETHIOPIC_EXTENDED"/>
+		<field name="ETHIOPIC_EXTENDED_A"/>
+		<field name="ETHIOPIC_EXTENDED_A_ID"/>
+		<field name="ETHIOPIC_EXTENDED_ID"/>
+		<field name="ETHIOPIC_ID"/>
+		<field name="ETHIOPIC_SUPPLEMENT"/>
+		<field name="ETHIOPIC_SUPPLEMENT_ID"/>
+		<field name="GENERAL_PUNCTUATION"/>
+		<field name="GENERAL_PUNCTUATION_ID"/>
+		<field name="GEOMETRIC_SHAPES"/>
+		<field name="GEOMETRIC_SHAPES_EXTENDED"/>
+		<field name="GEOMETRIC_SHAPES_EXTENDED_ID"/>
+		<field name="GEOMETRIC_SHAPES_ID"/>
+		<field name="GEORGIAN"/>
+		<field name="GEORGIAN_EXTENDED" since="29"/>
+		<field name="GEORGIAN_EXTENDED_ID" since="29"/>
+		<field name="GEORGIAN_ID"/>
+		<field name="GEORGIAN_SUPPLEMENT"/>
+		<field name="GEORGIAN_SUPPLEMENT_ID"/>
+		<field name="GLAGOLITIC"/>
+		<field name="GLAGOLITIC_ID"/>
+		<field name="GLAGOLITIC_SUPPLEMENT" since="26"/>
+		<field name="GLAGOLITIC_SUPPLEMENT_ID" since="26"/>
+		<field name="GOTHIC"/>
+		<field name="GOTHIC_ID"/>
+		<field name="GRANTHA"/>
+		<field name="GRANTHA_ID"/>
+		<field name="GREEK"/>
+		<field name="GREEK_EXTENDED"/>
+		<field name="GREEK_EXTENDED_ID"/>
+		<field name="GREEK_ID"/>
+		<field name="GUJARATI"/>
+		<field name="GUJARATI_ID"/>
+		<field name="GUNJALA_GONDI" since="29"/>
+		<field name="GUNJALA_GONDI_ID" since="29"/>
+		<field name="GURMUKHI"/>
+		<field name="GURMUKHI_ID"/>
+		<field name="HALFWIDTH_AND_FULLWIDTH_FORMS"/>
+		<field name="HALFWIDTH_AND_FULLWIDTH_FORMS_ID"/>
+		<field name="HANGUL_COMPATIBILITY_JAMO"/>
+		<field name="HANGUL_COMPATIBILITY_JAMO_ID"/>
+		<field name="HANGUL_JAMO"/>
+		<field name="HANGUL_JAMO_EXTENDED_A"/>
+		<field name="HANGUL_JAMO_EXTENDED_A_ID"/>
+		<field name="HANGUL_JAMO_EXTENDED_B"/>
+		<field name="HANGUL_JAMO_EXTENDED_B_ID"/>
+		<field name="HANGUL_JAMO_ID"/>
+		<field name="HANGUL_SYLLABLES"/>
+		<field name="HANGUL_SYLLABLES_ID"/>
+		<field name="HANIFI_ROHINGYA" since="29"/>
+		<field name="HANIFI_ROHINGYA_ID" since="29"/>
+		<field name="HANUNOO"/>
+		<field name="HANUNOO_ID"/>
+		<field name="HATRAN"/>
+		<field name="HATRAN_ID"/>
+		<field name="HEBREW"/>
+		<field name="HEBREW_ID"/>
+		<field name="HIGH_PRIVATE_USE_SURROGATES"/>
+		<field name="HIGH_PRIVATE_USE_SURROGATES_ID"/>
+		<field name="HIGH_SURROGATES"/>
+		<field name="HIGH_SURROGATES_ID"/>
+		<field name="HIRAGANA"/>
+		<field name="HIRAGANA_ID"/>
+		<field name="IDEOGRAPHIC_DESCRIPTION_CHARACTERS"/>
+		<field name="IDEOGRAPHIC_DESCRIPTION_CHARACTERS_ID"/>
+		<field name="IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION" since="26"/>
+		<field name="IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION_ID" since="26"/>
+		<field name="IMPERIAL_ARAMAIC"/>
+		<field name="IMPERIAL_ARAMAIC_ID"/>
+		<field name="INDIC_SIYAQ_NUMBERS" since="29"/>
+		<field name="INDIC_SIYAQ_NUMBERS_ID" since="29"/>
+		<field name="INSCRIPTIONAL_PAHLAVI"/>
+		<field name="INSCRIPTIONAL_PAHLAVI_ID"/>
+		<field name="INSCRIPTIONAL_PARTHIAN"/>
+		<field name="INSCRIPTIONAL_PARTHIAN_ID"/>
+		<field name="INVALID_CODE"/>
+		<field name="INVALID_CODE_ID"/>
+		<field name="IPA_EXTENSIONS"/>
+		<field name="IPA_EXTENSIONS_ID"/>
+		<field name="JAVANESE"/>
+		<field name="JAVANESE_ID"/>
+		<field name="KAITHI"/>
+		<field name="KAITHI_ID"/>
+		<field name="KANA_EXTENDED_A" since="28"/>
+		<field name="KANA_EXTENDED_A_ID" since="28"/>
+		<field name="KANA_SUPPLEMENT"/>
+		<field name="KANA_SUPPLEMENT_ID"/>
+		<field name="KANBUN"/>
+		<field name="KANBUN_ID"/>
+		<field name="KANGXI_RADICALS"/>
+		<field name="KANGXI_RADICALS_ID"/>
+		<field name="KANNADA"/>
+		<field name="KANNADA_ID"/>
+		<field name="KATAKANA"/>
+		<field name="KATAKANA_ID"/>
+		<field name="KATAKANA_PHONETIC_EXTENSIONS"/>
+		<field name="KATAKANA_PHONETIC_EXTENSIONS_ID"/>
+		<field name="KAYAH_LI"/>
+		<field name="KAYAH_LI_ID"/>
+		<field name="KHAROSHTHI"/>
+		<field name="KHAROSHTHI_ID"/>
+		<field name="KHITAN_SMALL_SCRIPT" since="30"/>
+		<field name="KHITAN_SMALL_SCRIPT_ID" since="30"/>
+		<field name="KHMER"/>
+		<field name="KHMER_ID"/>
+		<field name="KHMER_SYMBOLS"/>
+		<field name="KHMER_SYMBOLS_ID"/>
+		<field name="KHOJKI"/>
+		<field name="KHOJKI_ID"/>
+		<field name="KHUDAWADI"/>
+		<field name="KHUDAWADI_ID"/>
+		<field name="LAO"/>
+		<field name="LAO_ID"/>
+		<field name="LATIN_1_SUPPLEMENT"/>
+		<field name="LATIN_1_SUPPLEMENT_ID"/>
+		<field name="LATIN_EXTENDED_A"/>
+		<field name="LATIN_EXTENDED_ADDITIONAL"/>
+		<field name="LATIN_EXTENDED_ADDITIONAL_ID"/>
+		<field name="LATIN_EXTENDED_A_ID"/>
+		<field name="LATIN_EXTENDED_B"/>
+		<field name="LATIN_EXTENDED_B_ID"/>
+		<field name="LATIN_EXTENDED_C"/>
+		<field name="LATIN_EXTENDED_C_ID"/>
+		<field name="LATIN_EXTENDED_D"/>
+		<field name="LATIN_EXTENDED_D_ID"/>
+		<field name="LATIN_EXTENDED_E"/>
+		<field name="LATIN_EXTENDED_E_ID"/>
+		<field name="LEPCHA"/>
+		<field name="LEPCHA_ID"/>
+		<field name="LETTERLIKE_SYMBOLS"/>
+		<field name="LETTERLIKE_SYMBOLS_ID"/>
+		<field name="LIMBU"/>
+		<field name="LIMBU_ID"/>
+		<field name="LINEAR_A"/>
+		<field name="LINEAR_A_ID"/>
+		<field name="LINEAR_B_IDEOGRAMS"/>
+		<field name="LINEAR_B_IDEOGRAMS_ID"/>
+		<field name="LINEAR_B_SYLLABARY"/>
+		<field name="LINEAR_B_SYLLABARY_ID"/>
+		<field name="LISU"/>
+		<field name="LISU_ID"/>
+		<field name="LISU_SUPPLEMENT" since="30"/>
+		<field name="LISU_SUPPLEMENT_ID" since="30"/>
+		<field name="LOW_SURROGATES"/>
+		<field name="LOW_SURROGATES_ID"/>
+		<field name="LYCIAN"/>
+		<field name="LYCIAN_ID"/>
+		<field name="LYDIAN"/>
+		<field name="LYDIAN_ID"/>
+		<field name="MAHAJANI"/>
+		<field name="MAHAJANI_ID"/>
+		<field name="MAHJONG_TILES"/>
+		<field name="MAHJONG_TILES_ID"/>
+		<field name="MAKASAR" since="29"/>
+		<field name="MAKASAR_ID" since="29"/>
+		<field name="MALAYALAM"/>
+		<field name="MALAYALAM_ID"/>
+		<field name="MANDAIC"/>
+		<field name="MANDAIC_ID"/>
+		<field name="MANICHAEAN"/>
+		<field name="MANICHAEAN_ID"/>
+		<field name="MARCHEN" since="26"/>
+		<field name="MARCHEN_ID" since="26"/>
+		<field name="MASARAM_GONDI" since="28"/>
+		<field name="MASARAM_GONDI_ID" since="28"/>
+		<field name="MATHEMATICAL_ALPHANUMERIC_SYMBOLS"/>
+		<field name="MATHEMATICAL_ALPHANUMERIC_SYMBOLS_ID"/>
+		<field name="MATHEMATICAL_OPERATORS"/>
+		<field name="MATHEMATICAL_OPERATORS_ID"/>
+		<field name="MAYAN_NUMERALS" since="29"/>
+		<field name="MAYAN_NUMERALS_ID" since="29"/>
+		<field name="MEDEFAIDRIN" since="29"/>
+		<field name="MEDEFAIDRIN_ID" since="29"/>
+		<field name="MEETEI_MAYEK"/>
+		<field name="MEETEI_MAYEK_EXTENSIONS"/>
+		<field name="MEETEI_MAYEK_EXTENSIONS_ID"/>
+		<field name="MEETEI_MAYEK_ID"/>
+		<field name="MENDE_KIKAKUI"/>
+		<field name="MENDE_KIKAKUI_ID"/>
+		<field name="MEROITIC_CURSIVE"/>
+		<field name="MEROITIC_CURSIVE_ID"/>
+		<field name="MEROITIC_HIEROGLYPHS"/>
+		<field name="MEROITIC_HIEROGLYPHS_ID"/>
+		<field name="MIAO"/>
+		<field name="MIAO_ID"/>
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A"/>
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A_ID"/>
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B"/>
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B_ID"/>
+		<field name="MISCELLANEOUS_SYMBOLS"/>
+		<field name="MISCELLANEOUS_SYMBOLS_AND_ARROWS"/>
+		<field name="MISCELLANEOUS_SYMBOLS_AND_ARROWS_ID"/>
+		<field name="MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS"/>
+		<field name="MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS_ID"/>
+		<field name="MISCELLANEOUS_SYMBOLS_ID"/>
+		<field name="MISCELLANEOUS_TECHNICAL"/>
+		<field name="MISCELLANEOUS_TECHNICAL_ID"/>
+		<field name="MODI"/>
+		<field name="MODIFIER_TONE_LETTERS"/>
+		<field name="MODIFIER_TONE_LETTERS_ID"/>
+		<field name="MODI_ID"/>
+		<field name="MONGOLIAN"/>
+		<field name="MONGOLIAN_ID"/>
+		<field name="MONGOLIAN_SUPPLEMENT" since="26"/>
+		<field name="MONGOLIAN_SUPPLEMENT_ID" since="26"/>
+		<field name="MRO"/>
+		<field name="MRO_ID"/>
+		<field name="MULTANI"/>
+		<field name="MULTANI_ID"/>
+		<field name="MUSICAL_SYMBOLS"/>
+		<field name="MUSICAL_SYMBOLS_ID"/>
+		<field name="MYANMAR"/>
+		<field name="MYANMAR_EXTENDED_A"/>
+		<field name="MYANMAR_EXTENDED_A_ID"/>
+		<field name="MYANMAR_EXTENDED_B"/>
+		<field name="MYANMAR_EXTENDED_B_ID"/>
+		<field name="MYANMAR_ID"/>
+		<field name="NABATAEAN"/>
+		<field name="NABATAEAN_ID"/>
+		<field name="NANDINAGARI" since="30"/>
+		<field name="NANDINAGARI_ID" since="30"/>
+		<field name="NEWA" since="26"/>
+		<field name="NEWA_ID" since="26"/>
+		<field name="NEW_TAI_LUE"/>
+		<field name="NEW_TAI_LUE_ID"/>
+		<field name="NKO"/>
+		<field name="NKO_ID"/>
+		<field name="NO_BLOCK"/>
+		<field name="NUMBER_FORMS"/>
+		<field name="NUMBER_FORMS_ID"/>
+		<field name="NUSHU" since="28"/>
+		<field name="NUSHU_ID" since="28"/>
+		<field name="NYIAKENG_PUACHUE_HMONG" since="30"/>
+		<field name="NYIAKENG_PUACHUE_HMONG_ID" since="30"/>
+		<field name="OGHAM"/>
+		<field name="OGHAM_ID"/>
+		<field name="OLD_HUNGARIAN"/>
+		<field name="OLD_HUNGARIAN_ID"/>
+		<field name="OLD_ITALIC"/>
+		<field name="OLD_ITALIC_ID"/>
+		<field name="OLD_NORTH_ARABIAN"/>
+		<field name="OLD_NORTH_ARABIAN_ID"/>
+		<field name="OLD_PERMIC"/>
+		<field name="OLD_PERMIC_ID"/>
+		<field name="OLD_PERSIAN"/>
+		<field name="OLD_PERSIAN_ID"/>
+		<field name="OLD_SOGDIAN" since="29"/>
+		<field name="OLD_SOGDIAN_ID" since="29"/>
+		<field name="OLD_SOUTH_ARABIAN"/>
+		<field name="OLD_SOUTH_ARABIAN_ID"/>
+		<field name="OLD_TURKIC"/>
+		<field name="OLD_TURKIC_ID"/>
+		<field name="OL_CHIKI"/>
+		<field name="OL_CHIKI_ID"/>
+		<field name="OPTICAL_CHARACTER_RECOGNITION"/>
+		<field name="OPTICAL_CHARACTER_RECOGNITION_ID"/>
+		<field name="ORIYA"/>
+		<field name="ORIYA_ID"/>
+		<field name="ORNAMENTAL_DINGBATS"/>
+		<field name="ORNAMENTAL_DINGBATS_ID"/>
+		<field name="OSAGE" since="26"/>
+		<field name="OSAGE_ID" since="26"/>
+		<field name="OSMANYA"/>
+		<field name="OSMANYA_ID"/>
+		<field name="OTTOMAN_SIYAQ_NUMBERS" since="30"/>
+		<field name="OTTOMAN_SIYAQ_NUMBERS_ID" since="30"/>
+		<field name="PAHAWH_HMONG"/>
+		<field name="PAHAWH_HMONG_ID"/>
+		<field name="PALMYRENE"/>
+		<field name="PALMYRENE_ID"/>
+		<field name="PAU_CIN_HAU"/>
+		<field name="PAU_CIN_HAU_ID"/>
+		<field name="PHAGS_PA"/>
+		<field name="PHAGS_PA_ID"/>
+		<field name="PHAISTOS_DISC"/>
+		<field name="PHAISTOS_DISC_ID"/>
+		<field name="PHOENICIAN"/>
+		<field name="PHOENICIAN_ID"/>
+		<field name="PHONETIC_EXTENSIONS"/>
+		<field name="PHONETIC_EXTENSIONS_ID"/>
+		<field name="PHONETIC_EXTENSIONS_SUPPLEMENT"/>
+		<field name="PHONETIC_EXTENSIONS_SUPPLEMENT_ID"/>
+		<field name="PLAYING_CARDS"/>
+		<field name="PLAYING_CARDS_ID"/>
+		<field name="PRIVATE_USE"/>
+		<field name="PRIVATE_USE_AREA"/>
+		<field name="PRIVATE_USE_AREA_ID"/>
+		<field name="PRIVATE_USE_ID"/>
+		<field name="PSALTER_PAHLAVI"/>
+		<field name="PSALTER_PAHLAVI_ID"/>
+		<field name="REJANG"/>
+		<field name="REJANG_ID"/>
+		<field name="RUMI_NUMERAL_SYMBOLS"/>
+		<field name="RUMI_NUMERAL_SYMBOLS_ID"/>
+		<field name="RUNIC"/>
+		<field name="RUNIC_ID"/>
+		<field name="SAMARITAN"/>
+		<field name="SAMARITAN_ID"/>
+		<field name="SAURASHTRA"/>
+		<field name="SAURASHTRA_ID"/>
+		<field name="SHARADA"/>
+		<field name="SHARADA_ID"/>
+		<field name="SHAVIAN"/>
+		<field name="SHAVIAN_ID"/>
+		<field name="SHORTHAND_FORMAT_CONTROLS"/>
+		<field name="SHORTHAND_FORMAT_CONTROLS_ID"/>
+		<field name="SIDDHAM"/>
+		<field name="SIDDHAM_ID"/>
+		<field name="SINHALA"/>
+		<field name="SINHALA_ARCHAIC_NUMBERS"/>
+		<field name="SINHALA_ARCHAIC_NUMBERS_ID"/>
+		<field name="SINHALA_ID"/>
+		<field name="SMALL_FORM_VARIANTS"/>
+		<field name="SMALL_FORM_VARIANTS_ID"/>
+		<field name="SMALL_KANA_EXTENSION" since="30"/>
+		<field name="SMALL_KANA_EXTENSION_ID" since="30"/>
+		<field name="SOGDIAN" since="29"/>
+		<field name="SOGDIAN_ID" since="29"/>
+		<field name="SORA_SOMPENG"/>
+		<field name="SORA_SOMPENG_ID"/>
+		<field name="SOYOMBO" since="28"/>
+		<field name="SOYOMBO_ID" since="28"/>
+		<field name="SPACING_MODIFIER_LETTERS"/>
+		<field name="SPACING_MODIFIER_LETTERS_ID"/>
+		<field name="SPECIALS"/>
+		<field name="SPECIALS_ID"/>
+		<field name="SUNDANESE"/>
+		<field name="SUNDANESE_ID"/>
+		<field name="SUNDANESE_SUPPLEMENT"/>
+		<field name="SUNDANESE_SUPPLEMENT_ID"/>
+		<field name="SUPERSCRIPTS_AND_SUBSCRIPTS"/>
+		<field name="SUPERSCRIPTS_AND_SUBSCRIPTS_ID"/>
+		<field name="SUPPLEMENTAL_ARROWS_A"/>
+		<field name="SUPPLEMENTAL_ARROWS_A_ID"/>
+		<field name="SUPPLEMENTAL_ARROWS_B"/>
+		<field name="SUPPLEMENTAL_ARROWS_B_ID"/>
+		<field name="SUPPLEMENTAL_ARROWS_C"/>
+		<field name="SUPPLEMENTAL_ARROWS_C_ID"/>
+		<field name="SUPPLEMENTAL_MATHEMATICAL_OPERATORS"/>
+		<field name="SUPPLEMENTAL_MATHEMATICAL_OPERATORS_ID"/>
+		<field name="SUPPLEMENTAL_PUNCTUATION"/>
+		<field name="SUPPLEMENTAL_PUNCTUATION_ID"/>
+		<field name="SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS"/>
+		<field name="SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS_ID"/>
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A"/>
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A_ID"/>
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B"/>
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B_ID"/>
+		<field name="SUTTON_SIGNWRITING"/>
+		<field name="SUTTON_SIGNWRITING_ID"/>
+		<field name="SYLOTI_NAGRI"/>
+		<field name="SYLOTI_NAGRI_ID"/>
+		<field name="SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A" since="30"/>
+		<field name="SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A_ID" since="30"/>
+		<field name="SYMBOLS_FOR_LEGACY_COMPUTING" since="30"/>
+		<field name="SYMBOLS_FOR_LEGACY_COMPUTING_ID" since="30"/>
+		<field name="SYRIAC"/>
+		<field name="SYRIAC_ID"/>
+		<field name="SYRIAC_SUPPLEMENT" since="28"/>
+		<field name="SYRIAC_SUPPLEMENT_ID" since="28"/>
+		<field name="TAGALOG"/>
+		<field name="TAGALOG_ID"/>
+		<field name="TAGBANWA"/>
+		<field name="TAGBANWA_ID"/>
+		<field name="TAGS"/>
+		<field name="TAGS_ID"/>
+		<field name="TAI_LE"/>
+		<field name="TAI_LE_ID"/>
+		<field name="TAI_THAM"/>
+		<field name="TAI_THAM_ID"/>
+		<field name="TAI_VIET"/>
+		<field name="TAI_VIET_ID"/>
+		<field name="TAI_XUAN_JING_SYMBOLS"/>
+		<field name="TAI_XUAN_JING_SYMBOLS_ID"/>
+		<field name="TAKRI"/>
+		<field name="TAKRI_ID"/>
+		<field name="TAMIL"/>
+		<field name="TAMIL_ID"/>
+		<field name="TAMIL_SUPPLEMENT" since="30"/>
+		<field name="TAMIL_SUPPLEMENT_ID" since="30"/>
+		<field name="TANGUT" since="26"/>
+		<field name="TANGUT_COMPONENTS" since="26"/>
+		<field name="TANGUT_COMPONENTS_ID" since="26"/>
+		<field name="TANGUT_ID" since="26"/>
+		<field name="TANGUT_SUPPLEMENT" since="30"/>
+		<field name="TANGUT_SUPPLEMENT_ID" since="30"/>
+		<field name="TELUGU"/>
+		<field name="TELUGU_ID"/>
+		<field name="THAANA"/>
+		<field name="THAANA_ID"/>
+		<field name="THAI"/>
+		<field name="THAI_ID"/>
+		<field name="TIBETAN"/>
+		<field name="TIBETAN_ID"/>
+		<field name="TIFINAGH"/>
+		<field name="TIFINAGH_ID"/>
+		<field name="TIRHUTA"/>
+		<field name="TIRHUTA_ID"/>
+		<field name="TRANSPORT_AND_MAP_SYMBOLS"/>
+		<field name="TRANSPORT_AND_MAP_SYMBOLS_ID"/>
+		<field name="UGARITIC"/>
+		<field name="UGARITIC_ID"/>
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS"/>
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED"/>
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_ID"/>
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_ID"/>
+		<field name="VAI"/>
+		<field name="VAI_ID"/>
+		<field name="VARIATION_SELECTORS"/>
+		<field name="VARIATION_SELECTORS_ID"/>
+		<field name="VARIATION_SELECTORS_SUPPLEMENT"/>
+		<field name="VARIATION_SELECTORS_SUPPLEMENT_ID"/>
+		<field name="VEDIC_EXTENSIONS"/>
+		<field name="VEDIC_EXTENSIONS_ID"/>
+		<field name="VERTICAL_FORMS"/>
+		<field name="VERTICAL_FORMS_ID"/>
+		<field name="WANCHO" since="30"/>
+		<field name="WANCHO_ID" since="30"/>
+		<field name="WARANG_CITI"/>
+		<field name="WARANG_CITI_ID"/>
+		<field name="YEZIDI" since="30"/>
+		<field name="YEZIDI_ID" since="30"/>
+		<field name="YIJING_HEXAGRAM_SYMBOLS"/>
+		<field name="YIJING_HEXAGRAM_SYMBOLS_ID"/>
+		<field name="YI_RADICALS"/>
+		<field name="YI_RADICALS_ID"/>
+		<field name="YI_SYLLABLES"/>
+		<field name="YI_SYLLABLES_ID"/>
+		<field name="ZANABAZAR_SQUARE" since="28"/>
+		<field name="ZANABAZAR_SQUARE_ID" since="28"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$VerticalOrientation" since="29">
+		<extends name="java/lang/Object"/>
+		<field name="ROTATED"/>
+		<field name="TRANSFORMED_ROTATED"/>
+		<field name="TRANSFORMED_UPRIGHT"/>
+		<field name="UPRIGHT"/>
+	</class>
+	<class name="android/icu/lang/UCharacter$WordBreak" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="ALETTER"/>
+		<field name="CR"/>
+		<field name="DOUBLE_QUOTE"/>
+		<field name="EXTEND"/>
+		<field name="EXTENDNUMLET"/>
+		<field name="E_BASE" since="26"/>
+		<field name="E_BASE_GAZ" since="26"/>
+		<field name="E_MODIFIER" since="26"/>
+		<field name="FORMAT"/>
+		<field name="GLUE_AFTER_ZWJ" since="26"/>
+		<field name="HEBREW_LETTER"/>
+		<field name="KATAKANA"/>
+		<field name="LF"/>
+		<field name="MIDLETTER"/>
+		<field name="MIDNUM"/>
+		<field name="MIDNUMLET"/>
+		<field name="NEWLINE"/>
+		<field name="NUMERIC"/>
+		<field name="OTHER"/>
+		<field name="REGIONAL_INDICATOR"/>
+		<field name="SINGLE_QUOTE"/>
+		<field name="WSEGSPACE" since="29"/>
+		<field name="ZWJ" since="26"/>
+	</class>
+	<class name="android/icu/lang/UCharacterCategory" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/lang/UCharacterEnums$ECharacterCategory"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/lang/UCharacterDirection" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/lang/UCharacterEnums$ECharacterDirection"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/lang/UCharacterEnums" since="24">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/icu/lang/UCharacterEnums$ECharacterCategory" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="COMBINING_SPACING_MARK"/>
+		<field name="CONNECTOR_PUNCTUATION"/>
+		<field name="CONTROL"/>
+		<field name="CURRENCY_SYMBOL"/>
+		<field name="DASH_PUNCTUATION"/>
+		<field name="DECIMAL_DIGIT_NUMBER"/>
+		<field name="ENCLOSING_MARK"/>
+		<field name="END_PUNCTUATION"/>
+		<field name="FINAL_PUNCTUATION"/>
+		<field name="FINAL_QUOTE_PUNCTUATION"/>
+		<field name="FORMAT"/>
+		<field name="GENERAL_OTHER_TYPES"/>
+		<field name="INITIAL_PUNCTUATION"/>
+		<field name="INITIAL_QUOTE_PUNCTUATION"/>
+		<field name="LETTER_NUMBER"/>
+		<field name="LINE_SEPARATOR"/>
+		<field name="LOWERCASE_LETTER"/>
+		<field name="MATH_SYMBOL"/>
+		<field name="MODIFIER_LETTER"/>
+		<field name="MODIFIER_SYMBOL"/>
+		<field name="NON_SPACING_MARK"/>
+		<field name="OTHER_LETTER"/>
+		<field name="OTHER_NUMBER"/>
+		<field name="OTHER_PUNCTUATION"/>
+		<field name="OTHER_SYMBOL"/>
+		<field name="PARAGRAPH_SEPARATOR"/>
+		<field name="PRIVATE_USE"/>
+		<field name="SPACE_SEPARATOR"/>
+		<field name="START_PUNCTUATION"/>
+		<field name="SURROGATE"/>
+		<field name="TITLECASE_LETTER"/>
+		<field name="UNASSIGNED"/>
+		<field name="UPPERCASE_LETTER"/>
+	</class>
+	<class name="android/icu/lang/UCharacterEnums$ECharacterDirection" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="ARABIC_NUMBER"/>
+		<field name="BLOCK_SEPARATOR"/>
+		<field name="BOUNDARY_NEUTRAL"/>
+		<field name="COMMON_NUMBER_SEPARATOR"/>
+		<field name="DIRECTIONALITY_ARABIC_NUMBER"/>
+		<field name="DIRECTIONALITY_BOUNDARY_NEUTRAL"/>
+		<field name="DIRECTIONALITY_COMMON_NUMBER_SEPARATOR"/>
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER"/>
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR"/>
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR"/>
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT"/>
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING"/>
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE"/>
+		<field name="DIRECTIONALITY_NONSPACING_MARK"/>
+		<field name="DIRECTIONALITY_OTHER_NEUTRALS"/>
+		<field name="DIRECTIONALITY_PARAGRAPH_SEPARATOR"/>
+		<field name="DIRECTIONALITY_POP_DIRECTIONAL_FORMAT"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE"/>
+		<field name="DIRECTIONALITY_SEGMENT_SEPARATOR"/>
+		<field name="DIRECTIONALITY_UNDEFINED"/>
+		<field name="DIRECTIONALITY_WHITESPACE"/>
+		<field name="DIR_NON_SPACING_MARK"/>
+		<field name="EUROPEAN_NUMBER"/>
+		<field name="EUROPEAN_NUMBER_SEPARATOR"/>
+		<field name="EUROPEAN_NUMBER_TERMINATOR"/>
+		<field name="FIRST_STRONG_ISOLATE"/>
+		<field name="LEFT_TO_RIGHT"/>
+		<field name="LEFT_TO_RIGHT_EMBEDDING"/>
+		<field name="LEFT_TO_RIGHT_ISOLATE"/>
+		<field name="LEFT_TO_RIGHT_OVERRIDE"/>
+		<field name="OTHER_NEUTRAL"/>
+		<field name="POP_DIRECTIONAL_FORMAT"/>
+		<field name="POP_DIRECTIONAL_ISOLATE"/>
+		<field name="RIGHT_TO_LEFT"/>
+		<field name="RIGHT_TO_LEFT_ARABIC"/>
+		<field name="RIGHT_TO_LEFT_EMBEDDING"/>
+		<field name="RIGHT_TO_LEFT_ISOLATE"/>
+		<field name="RIGHT_TO_LEFT_OVERRIDE"/>
+		<field name="SEGMENT_SEPARATOR"/>
+		<field name="WHITE_SPACE_NEUTRAL"/>
+	</class>
+	<class name="android/icu/lang/UProperty" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="AGE"/>
+		<field name="ALPHABETIC"/>
+		<field name="ASCII_HEX_DIGIT"/>
+		<field name="BIDI_CLASS"/>
+		<field name="BIDI_CONTROL"/>
+		<field name="BIDI_MIRRORED"/>
+		<field name="BIDI_MIRRORING_GLYPH"/>
+		<field name="BIDI_PAIRED_BRACKET"/>
+		<field name="BIDI_PAIRED_BRACKET_TYPE"/>
+		<field name="BINARY_START"/>
+		<field name="BLOCK"/>
+		<field name="CANONICAL_COMBINING_CLASS"/>
+		<field name="CASED"/>
+		<field name="CASE_FOLDING"/>
+		<field name="CASE_IGNORABLE"/>
+		<field name="CASE_SENSITIVE"/>
+		<field name="CHANGES_WHEN_CASEFOLDED"/>
+		<field name="CHANGES_WHEN_CASEMAPPED"/>
+		<field name="CHANGES_WHEN_LOWERCASED"/>
+		<field name="CHANGES_WHEN_NFKC_CASEFOLDED"/>
+		<field name="CHANGES_WHEN_TITLECASED"/>
+		<field name="CHANGES_WHEN_UPPERCASED"/>
+		<field name="DASH"/>
+		<field name="DECOMPOSITION_TYPE"/>
+		<field name="DEFAULT_IGNORABLE_CODE_POINT"/>
+		<field name="DEPRECATED"/>
+		<field name="DIACRITIC"/>
+		<field name="DOUBLE_START"/>
+		<field name="EAST_ASIAN_WIDTH"/>
+		<field name="EMOJI" since="28"/>
+		<field name="EMOJI_COMPONENT" since="28"/>
+		<field name="EMOJI_MODIFIER" since="28"/>
+		<field name="EMOJI_MODIFIER_BASE" since="28"/>
+		<field name="EMOJI_PRESENTATION" since="28"/>
+		<field name="EXTENDED_PICTOGRAPHIC" since="29"/>
+		<field name="EXTENDER"/>
+		<field name="FULL_COMPOSITION_EXCLUSION"/>
+		<field name="GENERAL_CATEGORY"/>
+		<field name="GENERAL_CATEGORY_MASK"/>
+		<field name="GRAPHEME_BASE"/>
+		<field name="GRAPHEME_CLUSTER_BREAK"/>
+		<field name="GRAPHEME_EXTEND"/>
+		<field name="GRAPHEME_LINK"/>
+		<field name="HANGUL_SYLLABLE_TYPE"/>
+		<field name="HEX_DIGIT"/>
+		<field name="HYPHEN"/>
+		<field name="IDEOGRAPHIC"/>
+		<field name="IDS_BINARY_OPERATOR"/>
+		<field name="IDS_TRINARY_OPERATOR"/>
+		<field name="ID_CONTINUE"/>
+		<field name="ID_START"/>
+		<field name="INDIC_POSITIONAL_CATEGORY" since="29"/>
+		<field name="INDIC_SYLLABIC_CATEGORY" since="29"/>
+		<field name="INT_START"/>
+		<field name="JOINING_GROUP"/>
+		<field name="JOINING_TYPE"/>
+		<field name="JOIN_CONTROL"/>
+		<field name="LEAD_CANONICAL_COMBINING_CLASS"/>
+		<field name="LINE_BREAK"/>
+		<field name="LOGICAL_ORDER_EXCEPTION"/>
+		<field name="LOWERCASE"/>
+		<field name="LOWERCASE_MAPPING"/>
+		<field name="MASK_START"/>
+		<field name="MATH"/>
+		<field name="NAME"/>
+		<field name="NFC_INERT"/>
+		<field name="NFC_QUICK_CHECK"/>
+		<field name="NFD_INERT"/>
+		<field name="NFD_QUICK_CHECK"/>
+		<field name="NFKC_INERT"/>
+		<field name="NFKC_QUICK_CHECK"/>
+		<field name="NFKD_INERT"/>
+		<field name="NFKD_QUICK_CHECK"/>
+		<field name="NONCHARACTER_CODE_POINT"/>
+		<field name="NUMERIC_TYPE"/>
+		<field name="NUMERIC_VALUE"/>
+		<field name="OTHER_PROPERTY_START"/>
+		<field name="PATTERN_SYNTAX"/>
+		<field name="PATTERN_WHITE_SPACE"/>
+		<field name="POSIX_ALNUM"/>
+		<field name="POSIX_BLANK"/>
+		<field name="POSIX_GRAPH"/>
+		<field name="POSIX_PRINT"/>
+		<field name="POSIX_XDIGIT"/>
+		<field name="PREPENDED_CONCATENATION_MARK" since="28"/>
+		<field name="QUOTATION_MARK"/>
+		<field name="RADICAL"/>
+		<field name="REGIONAL_INDICATOR" since="28"/>
+		<field name="SCRIPT"/>
+		<field name="SCRIPT_EXTENSIONS"/>
+		<field name="SEGMENT_STARTER"/>
+		<field name="SENTENCE_BREAK"/>
+		<field name="SIMPLE_CASE_FOLDING"/>
+		<field name="SIMPLE_LOWERCASE_MAPPING"/>
+		<field name="SIMPLE_TITLECASE_MAPPING"/>
+		<field name="SIMPLE_UPPERCASE_MAPPING"/>
+		<field name="SOFT_DOTTED"/>
+		<field name="STRING_START"/>
+		<field name="S_TERM"/>
+		<field name="TERMINAL_PUNCTUATION"/>
+		<field name="TITLECASE_MAPPING"/>
+		<field name="TRAIL_CANONICAL_COMBINING_CLASS"/>
+		<field name="UNIFIED_IDEOGRAPH"/>
+		<field name="UPPERCASE"/>
+		<field name="UPPERCASE_MAPPING"/>
+		<field name="VARIATION_SELECTOR"/>
+		<field name="VERTICAL_ORIENTATION" since="29"/>
+		<field name="WHITE_SPACE"/>
+		<field name="WORD_BREAK"/>
+		<field name="XID_CONTINUE"/>
+		<field name="XID_START"/>
+	</class>
+	<class name="android/icu/lang/UProperty$NameChoice" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="LONG"/>
+		<field name="SHORT"/>
+	</class>
+	<class name="android/icu/lang/UScript" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="breaksBetweenLetters(I)Z"/>
+		<method name="getCode(Landroid/icu/util/ULocale;)[I"/>
+		<method name="getCode(Ljava/lang/String;)[I"/>
+		<method name="getCode(Ljava/util/Locale;)[I"/>
+		<method name="getCodeFromName(Ljava/lang/String;)I"/>
+		<method name="getName(I)Ljava/lang/String;"/>
+		<method name="getSampleString(I)Ljava/lang/String;"/>
+		<method name="getScript(I)I"/>
+		<method name="getScriptExtensions(ILjava/util/BitSet;)I"/>
+		<method name="getShortName(I)Ljava/lang/String;"/>
+		<method name="getUsage(I)Landroid/icu/lang/UScript$ScriptUsage;"/>
+		<method name="hasScript(II)Z"/>
+		<method name="isCased(I)Z"/>
+		<method name="isRightToLeft(I)Z"/>
+		<field name="ADLAM" since="26"/>
+		<field name="AFAKA"/>
+		<field name="AHOM"/>
+		<field name="ANATOLIAN_HIEROGLYPHS"/>
+		<field name="ARABIC"/>
+		<field name="ARMENIAN"/>
+		<field name="AVESTAN"/>
+		<field name="BALINESE"/>
+		<field name="BAMUM"/>
+		<field name="BASSA_VAH"/>
+		<field name="BATAK"/>
+		<field name="BENGALI"/>
+		<field name="BHAIKSUKI" since="26"/>
+		<field name="BLISSYMBOLS"/>
+		<field name="BOOK_PAHLAVI"/>
+		<field name="BOPOMOFO"/>
+		<field name="BRAHMI"/>
+		<field name="BRAILLE"/>
+		<field name="BUGINESE"/>
+		<field name="BUHID"/>
+		<field name="CANADIAN_ABORIGINAL"/>
+		<field name="CARIAN"/>
+		<field name="CAUCASIAN_ALBANIAN"/>
+		<field name="CHAKMA"/>
+		<field name="CHAM"/>
+		<field name="CHEROKEE"/>
+		<field name="CHORASMIAN" since="30"/>
+		<field name="CIRTH"/>
+		<field name="COMMON"/>
+		<field name="COPTIC"/>
+		<field name="CUNEIFORM"/>
+		<field name="CYPRIOT"/>
+		<field name="CYRILLIC"/>
+		<field name="DEMOTIC_EGYPTIAN"/>
+		<field name="DESERET"/>
+		<field name="DEVANAGARI"/>
+		<field name="DIVES_AKURU" since="30"/>
+		<field name="DOGRA" since="29"/>
+		<field name="DUPLOYAN"/>
+		<field name="EASTERN_SYRIAC"/>
+		<field name="EGYPTIAN_HIEROGLYPHS"/>
+		<field name="ELBASAN"/>
+		<field name="ELYMAIC" since="30"/>
+		<field name="ESTRANGELO_SYRIAC"/>
+		<field name="ETHIOPIC"/>
+		<field name="GEORGIAN"/>
+		<field name="GLAGOLITIC"/>
+		<field name="GOTHIC"/>
+		<field name="GRANTHA"/>
+		<field name="GREEK"/>
+		<field name="GUJARATI"/>
+		<field name="GUNJALA_GONDI" since="29"/>
+		<field name="GURMUKHI"/>
+		<field name="HAN"/>
+		<field name="HANGUL"/>
+		<field name="HANIFI_ROHINGYA" since="29"/>
+		<field name="HANUNOO"/>
+		<field name="HAN_WITH_BOPOMOFO" since="26"/>
+		<field name="HARAPPAN_INDUS"/>
+		<field name="HATRAN"/>
+		<field name="HEBREW"/>
+		<field name="HIERATIC_EGYPTIAN"/>
+		<field name="HIRAGANA"/>
+		<field name="IMPERIAL_ARAMAIC"/>
+		<field name="INHERITED"/>
+		<field name="INSCRIPTIONAL_PAHLAVI"/>
+		<field name="INSCRIPTIONAL_PARTHIAN"/>
+		<field name="INVALID_CODE"/>
+		<field name="JAMO" since="26"/>
+		<field name="JAPANESE"/>
+		<field name="JAVANESE"/>
+		<field name="JURCHEN"/>
+		<field name="KAITHI"/>
+		<field name="KANNADA"/>
+		<field name="KATAKANA"/>
+		<field name="KATAKANA_OR_HIRAGANA"/>
+		<field name="KAYAH_LI"/>
+		<field name="KHAROSHTHI"/>
+		<field name="KHITAN_SMALL_SCRIPT" since="30"/>
+		<field name="KHMER"/>
+		<field name="KHOJKI"/>
+		<field name="KHUDAWADI"/>
+		<field name="KHUTSURI"/>
+		<field name="KOREAN"/>
+		<field name="KPELLE"/>
+		<field name="LANNA"/>
+		<field name="LAO"/>
+		<field name="LATIN"/>
+		<field name="LATIN_FRAKTUR"/>
+		<field name="LATIN_GAELIC"/>
+		<field name="LEPCHA"/>
+		<field name="LIMBU"/>
+		<field name="LINEAR_A"/>
+		<field name="LINEAR_B"/>
+		<field name="LISU"/>
+		<field name="LOMA"/>
+		<field name="LYCIAN"/>
+		<field name="LYDIAN"/>
+		<field name="MAHAJANI"/>
+		<field name="MAKASAR" since="29"/>
+		<field name="MALAYALAM"/>
+		<field name="MANDAEAN"/>
+		<field name="MANDAIC"/>
+		<field name="MANICHAEAN"/>
+		<field name="MARCHEN" since="26"/>
+		<field name="MASARAM_GONDI" since="28"/>
+		<field name="MATHEMATICAL_NOTATION"/>
+		<field name="MAYAN_HIEROGLYPHS"/>
+		<field name="MEDEFAIDRIN" since="29"/>
+		<field name="MEITEI_MAYEK"/>
+		<field name="MENDE"/>
+		<field name="MEROITIC"/>
+		<field name="MEROITIC_CURSIVE"/>
+		<field name="MEROITIC_HIEROGLYPHS"/>
+		<field name="MIAO"/>
+		<field name="MODI"/>
+		<field name="MONGOLIAN"/>
+		<field name="MOON"/>
+		<field name="MRO"/>
+		<field name="MULTANI"/>
+		<field name="MYANMAR"/>
+		<field name="NABATAEAN"/>
+		<field name="NAKHI_GEBA"/>
+		<field name="NANDINAGARI" since="30"/>
+		<field name="NEWA" since="26"/>
+		<field name="NEW_TAI_LUE"/>
+		<field name="NKO"/>
+		<field name="NUSHU"/>
+		<field name="NYIAKENG_PUACHUE_HMONG" since="30"/>
+		<field name="OGHAM"/>
+		<field name="OLD_CHURCH_SLAVONIC_CYRILLIC"/>
+		<field name="OLD_HUNGARIAN"/>
+		<field name="OLD_ITALIC"/>
+		<field name="OLD_NORTH_ARABIAN"/>
+		<field name="OLD_PERMIC"/>
+		<field name="OLD_PERSIAN"/>
+		<field name="OLD_SOGDIAN" since="29"/>
+		<field name="OLD_SOUTH_ARABIAN"/>
+		<field name="OL_CHIKI"/>
+		<field name="ORIYA"/>
+		<field name="ORKHON"/>
+		<field name="OSAGE" since="26"/>
+		<field name="OSMANYA"/>
+		<field name="PAHAWH_HMONG"/>
+		<field name="PALMYRENE"/>
+		<field name="PAU_CIN_HAU"/>
+		<field name="PHAGS_PA"/>
+		<field name="PHOENICIAN"/>
+		<field name="PHONETIC_POLLARD"/>
+		<field name="PSALTER_PAHLAVI"/>
+		<field name="REJANG"/>
+		<field name="RONGORONGO"/>
+		<field name="RUNIC"/>
+		<field name="SAMARITAN"/>
+		<field name="SARATI"/>
+		<field name="SAURASHTRA"/>
+		<field name="SHARADA"/>
+		<field name="SHAVIAN"/>
+		<field name="SIDDHAM"/>
+		<field name="SIGN_WRITING"/>
+		<field name="SIMPLIFIED_HAN"/>
+		<field name="SINDHI"/>
+		<field name="SINHALA"/>
+		<field name="SOGDIAN" since="29"/>
+		<field name="SORA_SOMPENG"/>
+		<field name="SOYOMBO" since="28"/>
+		<field name="SUNDANESE"/>
+		<field name="SYLOTI_NAGRI"/>
+		<field name="SYMBOLS"/>
+		<field name="SYMBOLS_EMOJI" since="26"/>
+		<field name="SYRIAC"/>
+		<field name="TAGALOG"/>
+		<field name="TAGBANWA"/>
+		<field name="TAI_LE"/>
+		<field name="TAI_VIET"/>
+		<field name="TAKRI"/>
+		<field name="TAMIL"/>
+		<field name="TANGUT"/>
+		<field name="TELUGU"/>
+		<field name="TENGWAR"/>
+		<field name="THAANA"/>
+		<field name="THAI"/>
+		<field name="TIBETAN"/>
+		<field name="TIFINAGH"/>
+		<field name="TIRHUTA"/>
+		<field name="TRADITIONAL_HAN"/>
+		<field name="UCAS"/>
+		<field name="UGARITIC"/>
+		<field name="UNKNOWN"/>
+		<field name="UNWRITTEN_LANGUAGES"/>
+		<field name="VAI"/>
+		<field name="VISIBLE_SPEECH"/>
+		<field name="WANCHO" since="30"/>
+		<field name="WARANG_CITI"/>
+		<field name="WESTERN_SYRIAC"/>
+		<field name="WOLEAI"/>
+		<field name="YEZIDI" since="30"/>
+		<field name="YI"/>
+		<field name="ZANABAZAR_SQUARE" since="28"/>
+	</class>
+	<class name="android/icu/lang/UScript$ScriptUsage" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/lang/UScript$ScriptUsage;"/>
+		<method name="values()[Landroid/icu/lang/UScript$ScriptUsage;"/>
+		<field name="ASPIRATIONAL"/>
+		<field name="EXCLUDED"/>
+		<field name="LIMITED_USE"/>
+		<field name="NOT_ENCODED"/>
+		<field name="RECOMMENDED"/>
+		<field name="UNKNOWN"/>
+	</class>
+	<class name="android/icu/math/BigDecimal" since="24">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(D)V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/math/BigDecimal;)V"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;)V"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;I)V"/>
+		<method name="&lt;init>([C)V"/>
+		<method name="&lt;init>([CII)V"/>
+		<method name="abs()Landroid/icu/math/BigDecimal;"/>
+		<method name="abs(Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="add(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="add(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="byteValueExact()B"/>
+		<method name="compareTo(Landroid/icu/math/BigDecimal;)I"/>
+		<method name="compareTo(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)I"/>
+		<method name="divide(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="divide(Landroid/icu/math/BigDecimal;I)Landroid/icu/math/BigDecimal;"/>
+		<method name="divide(Landroid/icu/math/BigDecimal;II)Landroid/icu/math/BigDecimal;"/>
+		<method name="divide(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="divideInteger(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="divideInteger(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="format(II)Ljava/lang/String;"/>
+		<method name="format(IIIIII)Ljava/lang/String;"/>
+		<method name="intValueExact()I"/>
+		<method name="longValueExact()J"/>
+		<method name="max(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="max(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="min(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="min(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="movePointLeft(I)Landroid/icu/math/BigDecimal;"/>
+		<method name="movePointRight(I)Landroid/icu/math/BigDecimal;"/>
+		<method name="multiply(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="multiply(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="negate()Landroid/icu/math/BigDecimal;"/>
+		<method name="negate(Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="plus()Landroid/icu/math/BigDecimal;"/>
+		<method name="plus(Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="pow(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="pow(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="remainder(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="remainder(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="scale()I"/>
+		<method name="setScale(I)Landroid/icu/math/BigDecimal;"/>
+		<method name="setScale(II)Landroid/icu/math/BigDecimal;"/>
+		<method name="shortValueExact()S"/>
+		<method name="signum()I"/>
+		<method name="subtract(Landroid/icu/math/BigDecimal;)Landroid/icu/math/BigDecimal;"/>
+		<method name="subtract(Landroid/icu/math/BigDecimal;Landroid/icu/math/MathContext;)Landroid/icu/math/BigDecimal;"/>
+		<method name="toBigDecimal()Ljava/math/BigDecimal;"/>
+		<method name="toBigInteger()Ljava/math/BigInteger;"/>
+		<method name="toBigIntegerExact()Ljava/math/BigInteger;"/>
+		<method name="toCharArray()[C"/>
+		<method name="unscaledValue()Ljava/math/BigInteger;"/>
+		<method name="valueOf(D)Landroid/icu/math/BigDecimal;"/>
+		<method name="valueOf(J)Landroid/icu/math/BigDecimal;"/>
+		<method name="valueOf(JI)Landroid/icu/math/BigDecimal;"/>
+		<field name="ONE"/>
+		<field name="ROUND_CEILING"/>
+		<field name="ROUND_DOWN"/>
+		<field name="ROUND_FLOOR"/>
+		<field name="ROUND_HALF_DOWN"/>
+		<field name="ROUND_HALF_EVEN"/>
+		<field name="ROUND_HALF_UP"/>
+		<field name="ROUND_UNNECESSARY"/>
+		<field name="ROUND_UP"/>
+		<field name="TEN"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="android/icu/math/MathContext" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IIZ)V"/>
+		<method name="&lt;init>(IIZI)V"/>
+		<method name="getDigits()I"/>
+		<method name="getForm()I"/>
+		<method name="getLostDigits()Z"/>
+		<method name="getRoundingMode()I"/>
+		<field name="DEFAULT"/>
+		<field name="ENGINEERING"/>
+		<field name="PLAIN"/>
+		<field name="ROUND_CEILING"/>
+		<field name="ROUND_DOWN"/>
+		<field name="ROUND_FLOOR"/>
+		<field name="ROUND_HALF_DOWN"/>
+		<field name="ROUND_HALF_EVEN"/>
+		<field name="ROUND_HALF_UP"/>
+		<field name="ROUND_UNNECESSARY"/>
+		<field name="ROUND_UP"/>
+		<field name="SCIENTIFIC"/>
+	</class>
+	<class name="android/icu/number/CompactNotation" since="30">
+		<extends name="android/icu/number/Notation"/>
+	</class>
+	<class name="android/icu/number/CurrencyPrecision" since="30">
+		<extends name="android/icu/number/Precision"/>
+		<method name="withCurrency(Landroid/icu/util/Currency;)Landroid/icu/number/Precision;"/>
+	</class>
+	<class name="android/icu/number/FormattedNumber" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/text/FormattedValue" since="31"/>
+		<implements name="java/lang/CharSequence" removed="31"/>
+		<method name="toBigDecimal()Ljava/math/BigDecimal;"/>
+		<method name="toCharacterIterator()Ljava/text/AttributedCharacterIterator;"/>
+	</class>
+	<class name="android/icu/number/FormattedNumberRange" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/text/FormattedValue" since="31"/>
+		<implements name="java/lang/CharSequence" removed="31"/>
+		<method name="getFirstBigDecimal()Ljava/math/BigDecimal;"/>
+		<method name="getIdentityResult()Landroid/icu/number/NumberRangeFormatter$RangeIdentityResult;"/>
+		<method name="getSecondBigDecimal()Ljava/math/BigDecimal;"/>
+		<method name="toCharacterIterator()Ljava/text/AttributedCharacterIterator;"/>
+	</class>
+	<class name="android/icu/number/FractionPrecision" since="30">
+		<extends name="android/icu/number/Precision"/>
+		<method name="withMaxDigits(I)Landroid/icu/number/Precision;"/>
+		<method name="withMinDigits(I)Landroid/icu/number/Precision;"/>
+	</class>
+	<class name="android/icu/number/IntegerWidth" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="truncateAt(I)Landroid/icu/number/IntegerWidth;"/>
+		<method name="zeroFillTo(I)Landroid/icu/number/IntegerWidth;"/>
+	</class>
+	<class name="android/icu/number/LocalizedNumberFormatter" since="30">
+		<extends name="android/icu/number/NumberFormatterSettings"/>
+		<method name="format(D)Landroid/icu/number/FormattedNumber;"/>
+		<method name="format(J)Landroid/icu/number/FormattedNumber;"/>
+		<method name="format(Landroid/icu/util/Measure;)Landroid/icu/number/FormattedNumber;"/>
+		<method name="format(Ljava/lang/Number;)Landroid/icu/number/FormattedNumber;"/>
+		<method name="toFormat()Ljava/text/Format;"/>
+	</class>
+	<class name="android/icu/number/LocalizedNumberRangeFormatter" since="30">
+		<extends name="android/icu/number/NumberRangeFormatterSettings"/>
+		<method name="formatRange(DD)Landroid/icu/number/FormattedNumberRange;"/>
+		<method name="formatRange(II)Landroid/icu/number/FormattedNumberRange;"/>
+		<method name="formatRange(Ljava/lang/Number;Ljava/lang/Number;)Landroid/icu/number/FormattedNumberRange;"/>
+	</class>
+	<class name="android/icu/number/Notation" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="compactLong()Landroid/icu/number/CompactNotation;"/>
+		<method name="compactShort()Landroid/icu/number/CompactNotation;"/>
+		<method name="engineering()Landroid/icu/number/ScientificNotation;"/>
+		<method name="scientific()Landroid/icu/number/ScientificNotation;"/>
+		<method name="simple()Landroid/icu/number/SimpleNotation;"/>
+	</class>
+	<class name="android/icu/number/NumberFormatter" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="with()Landroid/icu/number/UnlocalizedNumberFormatter;"/>
+		<method name="withLocale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+		<method name="withLocale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+	</class>
+	<class name="android/icu/number/NumberFormatter$DecimalSeparatorDisplay" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$DecimalSeparatorDisplay;"/>
+		<method name="values()[Landroid/icu/number/NumberFormatter$DecimalSeparatorDisplay;"/>
+		<field name="ALWAYS"/>
+		<field name="AUTO"/>
+	</class>
+	<class name="android/icu/number/NumberFormatter$GroupingStrategy" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$GroupingStrategy;"/>
+		<method name="values()[Landroid/icu/number/NumberFormatter$GroupingStrategy;"/>
+		<field name="AUTO"/>
+		<field name="MIN2"/>
+		<field name="OFF"/>
+		<field name="ON_ALIGNED"/>
+		<field name="THOUSANDS"/>
+	</class>
+	<class name="android/icu/number/NumberFormatter$SignDisplay" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$SignDisplay;"/>
+		<method name="values()[Landroid/icu/number/NumberFormatter$SignDisplay;"/>
+		<field name="ACCOUNTING"/>
+		<field name="ACCOUNTING_ALWAYS"/>
+		<field name="ACCOUNTING_EXCEPT_ZERO"/>
+		<field name="ALWAYS"/>
+		<field name="AUTO"/>
+		<field name="EXCEPT_ZERO"/>
+		<field name="NEVER"/>
+	</class>
+	<class name="android/icu/number/NumberFormatter$UnitWidth" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberFormatter$UnitWidth;"/>
+		<method name="values()[Landroid/icu/number/NumberFormatter$UnitWidth;"/>
+		<field name="FULL_NAME"/>
+		<field name="HIDDEN"/>
+		<field name="ISO_CODE"/>
+		<field name="NARROW"/>
+		<field name="SHORT"/>
+	</class>
+	<class name="android/icu/number/NumberFormatterSettings" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="decimal(Landroid/icu/number/NumberFormatter$DecimalSeparatorDisplay;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="grouping(Landroid/icu/number/NumberFormatter$GroupingStrategy;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="integerWidth(Landroid/icu/number/IntegerWidth;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="notation(Landroid/icu/number/Notation;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="perUnit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="precision(Landroid/icu/number/Precision;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="roundingMode(Ljava/math/RoundingMode;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="scale(Landroid/icu/number/Scale;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="sign(Landroid/icu/number/NumberFormatter$SignDisplay;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="symbols(Landroid/icu/text/DecimalFormatSymbols;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="symbols(Landroid/icu/text/NumberingSystem;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="unit(Landroid/icu/util/MeasureUnit;)Landroid/icu/number/NumberFormatterSettings;"/>
+		<method name="unitWidth(Landroid/icu/number/NumberFormatter$UnitWidth;)Landroid/icu/number/NumberFormatterSettings;"/>
+	</class>
+	<class name="android/icu/number/NumberRangeFormatter" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="with()Landroid/icu/number/UnlocalizedNumberRangeFormatter;"/>
+		<method name="withLocale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+		<method name="withLocale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+	</class>
+	<class name="android/icu/number/NumberRangeFormatter$RangeCollapse" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberRangeFormatter$RangeCollapse;"/>
+		<method name="values()[Landroid/icu/number/NumberRangeFormatter$RangeCollapse;"/>
+		<field name="ALL"/>
+		<field name="AUTO"/>
+		<field name="NONE"/>
+		<field name="UNIT"/>
+	</class>
+	<class name="android/icu/number/NumberRangeFormatter$RangeIdentityFallback" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberRangeFormatter$RangeIdentityFallback;"/>
+		<method name="values()[Landroid/icu/number/NumberRangeFormatter$RangeIdentityFallback;"/>
+		<field name="APPROXIMATELY"/>
+		<field name="APPROXIMATELY_OR_SINGLE_VALUE"/>
+		<field name="RANGE"/>
+		<field name="SINGLE_VALUE"/>
+	</class>
+	<class name="android/icu/number/NumberRangeFormatter$RangeIdentityResult" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/number/NumberRangeFormatter$RangeIdentityResult;"/>
+		<method name="values()[Landroid/icu/number/NumberRangeFormatter$RangeIdentityResult;"/>
+		<field name="EQUAL_AFTER_ROUNDING"/>
+		<field name="EQUAL_BEFORE_ROUNDING"/>
+		<field name="NOT_EQUAL"/>
+	</class>
+	<class name="android/icu/number/NumberRangeFormatterSettings" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="collapse(Landroid/icu/number/NumberRangeFormatter$RangeCollapse;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+		<method name="identityFallback(Landroid/icu/number/NumberRangeFormatter$RangeIdentityFallback;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+		<method name="numberFormatterBoth(Landroid/icu/number/UnlocalizedNumberFormatter;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+		<method name="numberFormatterFirst(Landroid/icu/number/UnlocalizedNumberFormatter;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+		<method name="numberFormatterSecond(Landroid/icu/number/UnlocalizedNumberFormatter;)Landroid/icu/number/NumberRangeFormatterSettings;"/>
+	</class>
+	<class name="android/icu/number/Precision" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="currency(Landroid/icu/util/Currency$CurrencyUsage;)Landroid/icu/number/CurrencyPrecision;"/>
+		<method name="fixedFraction(I)Landroid/icu/number/FractionPrecision;"/>
+		<method name="fixedSignificantDigits(I)Landroid/icu/number/Precision;"/>
+		<method name="increment(Ljava/math/BigDecimal;)Landroid/icu/number/Precision;"/>
+		<method name="integer()Landroid/icu/number/FractionPrecision;"/>
+		<method name="maxFraction(I)Landroid/icu/number/FractionPrecision;"/>
+		<method name="maxSignificantDigits(I)Landroid/icu/number/Precision;"/>
+		<method name="minFraction(I)Landroid/icu/number/FractionPrecision;"/>
+		<method name="minMaxFraction(II)Landroid/icu/number/FractionPrecision;"/>
+		<method name="minMaxSignificantDigits(II)Landroid/icu/number/Precision;"/>
+		<method name="minSignificantDigits(I)Landroid/icu/number/Precision;"/>
+		<method name="unlimited()Landroid/icu/number/Precision;"/>
+	</class>
+	<class name="android/icu/number/Scale" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="byBigDecimal(Ljava/math/BigDecimal;)Landroid/icu/number/Scale;"/>
+		<method name="byDouble(D)Landroid/icu/number/Scale;"/>
+		<method name="byDoubleAndPowerOfTen(DI)Landroid/icu/number/Scale;"/>
+		<method name="none()Landroid/icu/number/Scale;"/>
+		<method name="powerOfTen(I)Landroid/icu/number/Scale;"/>
+	</class>
+	<class name="android/icu/number/ScientificNotation" since="30">
+		<extends name="android/icu/number/Notation"/>
+		<method name="withExponentSignDisplay(Landroid/icu/number/NumberFormatter$SignDisplay;)Landroid/icu/number/ScientificNotation;"/>
+		<method name="withMinExponentDigits(I)Landroid/icu/number/ScientificNotation;"/>
+	</class>
+	<class name="android/icu/number/SimpleNotation" since="30">
+		<extends name="android/icu/number/Notation"/>
+	</class>
+	<class name="android/icu/number/UnlocalizedNumberFormatter" since="30">
+		<extends name="android/icu/number/NumberFormatterSettings"/>
+		<method name="locale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+		<method name="locale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberFormatter;"/>
+	</class>
+	<class name="android/icu/number/UnlocalizedNumberRangeFormatter" since="30">
+		<extends name="android/icu/number/NumberRangeFormatterSettings"/>
+		<method name="locale(Landroid/icu/util/ULocale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+		<method name="locale(Ljava/util/Locale;)Landroid/icu/number/LocalizedNumberRangeFormatter;"/>
+	</class>
+	<class name="android/icu/text/AlphabeticIndex" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Iterable"/>
+		<method name="&lt;init>(Landroid/icu/text/RuleBasedCollator;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="addLabels(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="addLabels([Landroid/icu/util/ULocale;)Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="addLabels([Ljava/util/Locale;)Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="addRecord(Ljava/lang/CharSequence;Ljava/lang/Object;)Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="buildImmutableIndex()Landroid/icu/text/AlphabeticIndex$ImmutableIndex;"/>
+		<method name="clearRecords()Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="getBucketCount()I"/>
+		<method name="getBucketIndex(Ljava/lang/CharSequence;)I"/>
+		<method name="getBucketLabels()Ljava/util/List;"/>
+		<method name="getCollator()Landroid/icu/text/RuleBasedCollator;"/>
+		<method name="getInflowLabel()Ljava/lang/String;"/>
+		<method name="getMaxLabelCount()I"/>
+		<method name="getOverflowLabel()Ljava/lang/String;"/>
+		<method name="getRecordCount()I"/>
+		<method name="getUnderflowLabel()Ljava/lang/String;"/>
+		<method name="setInflowLabel(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="setMaxLabelCount(I)Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="setOverflowLabel(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex;"/>
+		<method name="setUnderflowLabel(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex;"/>
+	</class>
+	<class name="android/icu/text/AlphabeticIndex$Bucket" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Iterable"/>
+		<method name="getLabel()Ljava/lang/String;"/>
+		<method name="getLabelType()Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;"/>
+		<method name="size()I"/>
+	</class>
+	<class name="android/icu/text/AlphabeticIndex$Bucket$LabelType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;"/>
+		<method name="values()[Landroid/icu/text/AlphabeticIndex$Bucket$LabelType;"/>
+		<field name="INFLOW"/>
+		<field name="NORMAL"/>
+		<field name="OVERFLOW"/>
+		<field name="UNDERFLOW"/>
+	</class>
+	<class name="android/icu/text/AlphabeticIndex$ImmutableIndex" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Iterable"/>
+		<method name="getBucket(I)Landroid/icu/text/AlphabeticIndex$Bucket;"/>
+		<method name="getBucketCount()I"/>
+		<method name="getBucketIndex(Ljava/lang/CharSequence;)I"/>
+	</class>
+	<class name="android/icu/text/AlphabeticIndex$Record" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getData()Ljava/lang/Object;"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="android/icu/text/Bidi" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;)V"/>
+		<method name="&lt;init>([CI[BIII)V"/>
+		<method name="baseIsLeftToRight()Z"/>
+		<method name="countParagraphs()I"/>
+		<method name="countRuns()I"/>
+		<method name="createLineBidi(II)Landroid/icu/text/Bidi;"/>
+		<method name="getBaseDirection(Ljava/lang/CharSequence;)B"/>
+		<method name="getBaseLevel()I"/>
+		<method name="getCustomClassifier()Landroid/icu/text/BidiClassifier;"/>
+		<method name="getCustomizedClass(I)I"/>
+		<method name="getDirection()B"/>
+		<method name="getLength()I"/>
+		<method name="getLevelAt(I)B"/>
+		<method name="getLevels()[B"/>
+		<method name="getLogicalIndex(I)I"/>
+		<method name="getLogicalMap()[I"/>
+		<method name="getLogicalRun(I)Landroid/icu/text/BidiRun;"/>
+		<method name="getParaLevel()B"/>
+		<method name="getParagraph(I)Landroid/icu/text/BidiRun;"/>
+		<method name="getParagraphByIndex(I)Landroid/icu/text/BidiRun;"/>
+		<method name="getParagraphIndex(I)I"/>
+		<method name="getProcessedLength()I"/>
+		<method name="getReorderingMode()I"/>
+		<method name="getReorderingOptions()I"/>
+		<method name="getResultLength()I"/>
+		<method name="getRunCount()I"/>
+		<method name="getRunLevel(I)I"/>
+		<method name="getRunLimit(I)I"/>
+		<method name="getRunStart(I)I"/>
+		<method name="getText()[C"/>
+		<method name="getTextAsString()Ljava/lang/String;"/>
+		<method name="getVisualIndex(I)I"/>
+		<method name="getVisualMap()[I"/>
+		<method name="getVisualRun(I)Landroid/icu/text/BidiRun;"/>
+		<method name="invertMap([I)[I"/>
+		<method name="isInverse()Z"/>
+		<method name="isLeftToRight()Z"/>
+		<method name="isMixed()Z"/>
+		<method name="isOrderParagraphsLTR()Z"/>
+		<method name="isRightToLeft()Z"/>
+		<method name="orderParagraphsLTR(Z)V"/>
+		<method name="reorderLogical([B)[I"/>
+		<method name="reorderVisual([B)[I"/>
+		<method name="reorderVisually([BI[Ljava/lang/Object;II)V"/>
+		<method name="requiresBidi([CII)Z"/>
+		<method name="setContext(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setCustomClassifier(Landroid/icu/text/BidiClassifier;)V"/>
+		<method name="setInverse(Z)V"/>
+		<method name="setLine(II)Landroid/icu/text/Bidi;"/>
+		<method name="setPara(Ljava/lang/String;B[B)V"/>
+		<method name="setPara(Ljava/text/AttributedCharacterIterator;)V"/>
+		<method name="setPara([CB[B)V"/>
+		<method name="setReorderingMode(I)V"/>
+		<method name="setReorderingOptions(I)V"/>
+		<method name="writeReordered(I)Ljava/lang/String;"/>
+		<method name="writeReverse(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<field name="DIRECTION_DEFAULT_LEFT_TO_RIGHT"/>
+		<field name="DIRECTION_DEFAULT_RIGHT_TO_LEFT"/>
+		<field name="DIRECTION_LEFT_TO_RIGHT"/>
+		<field name="DIRECTION_RIGHT_TO_LEFT"/>
+		<field name="DO_MIRRORING"/>
+		<field name="INSERT_LRM_FOR_NUMERIC"/>
+		<field name="KEEP_BASE_COMBINING"/>
+		<field name="LEVEL_DEFAULT_LTR"/>
+		<field name="LEVEL_DEFAULT_RTL"/>
+		<field name="LEVEL_OVERRIDE"/>
+		<field name="LTR"/>
+		<field name="MAP_NOWHERE"/>
+		<field name="MAX_EXPLICIT_LEVEL"/>
+		<field name="MIXED"/>
+		<field name="NEUTRAL"/>
+		<field name="OPTION_DEFAULT"/>
+		<field name="OPTION_INSERT_MARKS"/>
+		<field name="OPTION_REMOVE_CONTROLS"/>
+		<field name="OPTION_STREAMING"/>
+		<field name="OUTPUT_REVERSE"/>
+		<field name="REMOVE_BIDI_CONTROLS"/>
+		<field name="REORDER_DEFAULT"/>
+		<field name="REORDER_GROUP_NUMBERS_WITH_R"/>
+		<field name="REORDER_INVERSE_FOR_NUMBERS_SPECIAL"/>
+		<field name="REORDER_INVERSE_LIKE_DIRECT"/>
+		<field name="REORDER_INVERSE_NUMBERS_AS_L"/>
+		<field name="REORDER_NUMBERS_SPECIAL"/>
+		<field name="REORDER_RUNS_ONLY"/>
+		<field name="RTL"/>
+	</class>
+	<class name="android/icu/text/BidiClassifier" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="classify(I)I"/>
+		<method name="getContext()Ljava/lang/Object;"/>
+		<method name="setContext(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/icu/text/BidiRun" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getDirection()B"/>
+		<method name="getEmbeddingLevel()B"/>
+		<method name="getLength()I"/>
+		<method name="getLimit()I"/>
+		<method name="getStart()I"/>
+		<method name="isEvenRun()Z"/>
+		<method name="isOddRun()Z"/>
+	</class>
+	<class name="android/icu/text/BreakIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="current()I"/>
+		<method name="first()I"/>
+		<method name="following(I)I"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCharacterInstance()Landroid/icu/text/BreakIterator;"/>
+		<method name="getCharacterInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="getCharacterInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="getLineInstance()Landroid/icu/text/BreakIterator;"/>
+		<method name="getLineInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="getLineInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="getRuleStatus()I"/>
+		<method name="getRuleStatusVec([I)I"/>
+		<method name="getSentenceInstance()Landroid/icu/text/BreakIterator;"/>
+		<method name="getSentenceInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="getSentenceInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="getText()Ljava/text/CharacterIterator;"/>
+		<method name="getTitleInstance()Landroid/icu/text/BreakIterator;" deprecated="29"/>
+		<method name="getTitleInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;" deprecated="29"/>
+		<method name="getTitleInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;" deprecated="29"/>
+		<method name="getWordInstance()Landroid/icu/text/BreakIterator;"/>
+		<method name="getWordInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="getWordInstance(Ljava/util/Locale;)Landroid/icu/text/BreakIterator;"/>
+		<method name="isBoundary(I)Z"/>
+		<method name="last()I"/>
+		<method name="next()I"/>
+		<method name="next(I)I"/>
+		<method name="preceding(I)I"/>
+		<method name="previous()I"/>
+		<method name="setText(Ljava/lang/CharSequence;)V" since="29"/>
+		<method name="setText(Ljava/lang/String;)V"/>
+		<method name="setText(Ljava/text/CharacterIterator;)V"/>
+		<field name="DONE"/>
+		<field name="KIND_CHARACTER"/>
+		<field name="KIND_LINE"/>
+		<field name="KIND_SENTENCE"/>
+		<field name="KIND_TITLE" deprecated="29"/>
+		<field name="KIND_WORD"/>
+		<field name="WORD_IDEO"/>
+		<field name="WORD_IDEO_LIMIT"/>
+		<field name="WORD_KANA"/>
+		<field name="WORD_KANA_LIMIT"/>
+		<field name="WORD_LETTER"/>
+		<field name="WORD_LETTER_LIMIT"/>
+		<field name="WORD_NONE"/>
+		<field name="WORD_NONE_LIMIT"/>
+		<field name="WORD_NUMBER"/>
+		<field name="WORD_NUMBER_LIMIT"/>
+	</class>
+	<class name="android/icu/text/CaseMap" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="fold()Landroid/icu/text/CaseMap$Fold;"/>
+		<method name="omitUnchangedText()Landroid/icu/text/CaseMap;"/>
+		<method name="toLower()Landroid/icu/text/CaseMap$Lower;"/>
+		<method name="toTitle()Landroid/icu/text/CaseMap$Title;"/>
+		<method name="toUpper()Landroid/icu/text/CaseMap$Upper;"/>
+	</class>
+	<class name="android/icu/text/CaseMap$Fold" since="29">
+		<extends name="android/icu/text/CaseMap"/>
+		<method name="apply(Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="apply(Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+		<method name="omitUnchangedText()Landroid/icu/text/CaseMap$Fold;"/>
+		<method name="turkic()Landroid/icu/text/CaseMap$Fold;"/>
+	</class>
+	<class name="android/icu/text/CaseMap$Lower" since="29">
+		<extends name="android/icu/text/CaseMap"/>
+		<method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+		<method name="omitUnchangedText()Landroid/icu/text/CaseMap$Lower;"/>
+	</class>
+	<class name="android/icu/text/CaseMap$Title" since="29">
+		<extends name="android/icu/text/CaseMap"/>
+		<method name="adjustToCased()Landroid/icu/text/CaseMap$Title;"/>
+		<method name="apply(Ljava/util/Locale;Landroid/icu/text/BreakIterator;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="apply(Ljava/util/Locale;Landroid/icu/text/BreakIterator;Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+		<method name="noBreakAdjustment()Landroid/icu/text/CaseMap$Title;"/>
+		<method name="noLowercase()Landroid/icu/text/CaseMap$Title;"/>
+		<method name="omitUnchangedText()Landroid/icu/text/CaseMap$Title;"/>
+		<method name="sentences()Landroid/icu/text/CaseMap$Title;"/>
+		<method name="wholeString()Landroid/icu/text/CaseMap$Title;"/>
+	</class>
+	<class name="android/icu/text/CaseMap$Upper" since="29">
+		<extends name="android/icu/text/CaseMap"/>
+		<method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="apply(Ljava/util/Locale;Ljava/lang/CharSequence;Ljava/lang/Appendable;Landroid/icu/text/Edits;)Ljava/lang/Appendable;"/>
+		<method name="omitUnchangedText()Landroid/icu/text/CaseMap$Upper;"/>
+	</class>
+	<class name="android/icu/text/CollationElementIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getMaxExpansion(I)I"/>
+		<method name="getOffset()I"/>
+		<method name="next()I"/>
+		<method name="previous()I"/>
+		<method name="primaryOrder(I)I"/>
+		<method name="reset()V"/>
+		<method name="secondaryOrder(I)I"/>
+		<method name="setOffset(I)V"/>
+		<method name="setText(Landroid/icu/text/UCharacterIterator;)V"/>
+		<method name="setText(Ljava/lang/String;)V"/>
+		<method name="setText(Ljava/text/CharacterIterator;)V"/>
+		<method name="tertiaryOrder(I)I"/>
+		<field name="IGNORABLE"/>
+		<field name="NULLORDER"/>
+	</class>
+	<class name="android/icu/text/CollationKey" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
+		<method name="compareTo(Landroid/icu/text/CollationKey;)I"/>
+		<method name="equals(Landroid/icu/text/CollationKey;)Z"/>
+		<method name="getBound(II)Landroid/icu/text/CollationKey;"/>
+		<method name="getSourceString()Ljava/lang/String;"/>
+		<method name="merge(Landroid/icu/text/CollationKey;)Landroid/icu/text/CollationKey;"/>
+		<method name="toByteArray()[B"/>
+	</class>
+	<class name="android/icu/text/CollationKey$BoundMode" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="LOWER"/>
+		<field name="UPPER"/>
+		<field name="UPPER_LONG"/>
+	</class>
+	<class name="android/icu/text/Collator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/util/Freezable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/Comparator"/>
+		<method name="&lt;init>()V"/>
+		<method name="cloneAsThawed()Landroid/icu/text/Collator;"/>
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="equals(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="freeze()Landroid/icu/text/Collator;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getAvailableULocales()[Landroid/icu/util/ULocale;"/>
+		<method name="getCollationKey(Ljava/lang/String;)Landroid/icu/text/CollationKey;"/>
+		<method name="getDecomposition()I"/>
+		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/util/Locale;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getEquivalentReorderCodes(I)[I"/>
+		<method name="getFunctionalEquivalent(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;"/>
+		<method name="getFunctionalEquivalent(Ljava/lang/String;Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
+		<method name="getInstance()Landroid/icu/text/Collator;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/Collator;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/Collator;"/>
+		<method name="getKeywordValues(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="getKeywordValuesForLocale(Ljava/lang/String;Landroid/icu/util/ULocale;Z)[Ljava/lang/String;"/>
+		<method name="getKeywords()[Ljava/lang/String;"/>
+		<method name="getMaxVariable()I"/>
+		<method name="getReorderCodes()[I"/>
+		<method name="getStrength()I"/>
+		<method name="getTailoredSet()Landroid/icu/text/UnicodeSet;"/>
+		<method name="getUCAVersion()Landroid/icu/util/VersionInfo;"/>
+		<method name="getVariableTop()I"/>
+		<method name="getVersion()Landroid/icu/util/VersionInfo;"/>
+		<method name="setDecomposition(I)V"/>
+		<method name="setMaxVariable(I)Landroid/icu/text/Collator;"/>
+		<method name="setReorderCodes([I)V"/>
+		<method name="setStrength(I)V"/>
+		<field name="CANONICAL_DECOMPOSITION"/>
+		<field name="FULL_DECOMPOSITION"/>
+		<field name="IDENTICAL"/>
+		<field name="NO_DECOMPOSITION"/>
+		<field name="PRIMARY"/>
+		<field name="QUATERNARY"/>
+		<field name="SECONDARY"/>
+		<field name="TERTIARY"/>
+	</class>
+	<class name="android/icu/text/Collator$ReorderCodes" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="CURRENCY"/>
+		<field name="DEFAULT"/>
+		<field name="DIGIT"/>
+		<field name="FIRST"/>
+		<field name="NONE"/>
+		<field name="OTHERS"/>
+		<field name="PUNCTUATION"/>
+		<field name="SPACE"/>
+		<field name="SYMBOL"/>
+	</class>
+	<class name="android/icu/text/CompactDecimalFormat" since="24">
+		<extends name="android/icu/text/DecimalFormat"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)Landroid/icu/text/CompactDecimalFormat;"/>
+		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/CompactDecimalFormat$CompactStyle;)Landroid/icu/text/CompactDecimalFormat;"/>
+	</class>
+	<class name="android/icu/text/CompactDecimalFormat$CompactStyle" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/CompactDecimalFormat$CompactStyle;"/>
+		<method name="values()[Landroid/icu/text/CompactDecimalFormat$CompactStyle;"/>
+		<field name="LONG"/>
+		<field name="SHORT"/>
+	</class>
+	<class name="android/icu/text/ConstrainedFieldPosition" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="constrainClass(Ljava/lang/Class;)V"/>
+		<method name="constrainField(Ljava/text/Format$Field;)V"/>
+		<method name="getField()Ljava/text/Format$Field;"/>
+		<method name="getFieldValue()Ljava/lang/Object;"/>
+		<method name="getInt64IterationContext()J"/>
+		<method name="getLimit()I"/>
+		<method name="getStart()I"/>
+		<method name="matchesField(Ljava/text/Format$Field;Ljava/lang/Object;)Z"/>
+		<method name="reset()V"/>
+		<method name="setInt64IterationContext(J)V"/>
+		<method name="setState(Ljava/text/Format$Field;Ljava/lang/Object;II)V"/>
+	</class>
+	<class name="android/icu/text/CurrencyPluralInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="getCurrencyPluralPattern(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getInstance()Landroid/icu/text/CurrencyPluralInfo;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/CurrencyPluralInfo;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/CurrencyPluralInfo;"/>
+		<method name="getLocale()Landroid/icu/util/ULocale;"/>
+		<method name="getPluralRules()Landroid/icu/text/PluralRules;"/>
+		<method name="setCurrencyPluralPattern(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setLocale(Landroid/icu/util/ULocale;)V"/>
+		<method name="setPluralRules(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/icu/text/DateFormat" since="24">
+		<extends name="android/icu/text/UFormat"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(Ljava/util/Date;)Ljava/lang/String;"/>
+		<method name="format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getBooleanAttribute(Landroid/icu/text/DateFormat$BooleanAttribute;)Z"/>
+		<method name="getCalendar()Landroid/icu/util/Calendar;"/>
+		<method name="getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;"/>
+		<method name="getDateInstance()Landroid/icu/text/DateFormat;"/>
+		<method name="getDateInstance(I)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateInstance(ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateInstance(Landroid/icu/util/Calendar;I)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateInstance(Landroid/icu/util/Calendar;ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateInstance(Landroid/icu/util/Calendar;ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeInstance()Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeInstance(II)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeInstance(IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeInstance(IILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeInstance(Landroid/icu/util/Calendar;II)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeInstance(Landroid/icu/util/Calendar;IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeInstance(Landroid/icu/util/Calendar;IILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getInstance()Landroid/icu/text/DateFormat;"/>
+		<method name="getInstance(Landroid/icu/util/Calendar;)Landroid/icu/text/DateFormat;"/>
+		<method name="getInstance(Landroid/icu/util/Calendar;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getInstanceForSkeleton(Landroid/icu/util/Calendar;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getInstanceForSkeleton(Landroid/icu/util/Calendar;Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getInstanceForSkeleton(Ljava/lang/String;)Landroid/icu/text/DateFormat;"/>
+		<method name="getInstanceForSkeleton(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getInstanceForSkeleton(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getNumberFormat()Landroid/icu/text/NumberFormat;"/>
+		<method name="getPatternInstance(Landroid/icu/util/Calendar;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getPatternInstance(Landroid/icu/util/Calendar;Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getPatternInstance(Ljava/lang/String;)Landroid/icu/text/DateFormat;"/>
+		<method name="getPatternInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getPatternInstance(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeInstance()Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeInstance(I)Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeInstance(ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeInstance(ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeInstance(Landroid/icu/util/Calendar;I)Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeInstance(Landroid/icu/util/Calendar;ILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeInstance(Landroid/icu/util/Calendar;ILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getTimeZone()Landroid/icu/util/TimeZone;"/>
+		<method name="isCalendarLenient()Z"/>
+		<method name="isLenient()Z"/>
+		<method name="parse(Ljava/lang/String;)Ljava/util/Date;"/>
+		<method name="parse(Ljava/lang/String;Landroid/icu/util/Calendar;Ljava/text/ParsePosition;)V"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;"/>
+		<method name="setBooleanAttribute(Landroid/icu/text/DateFormat$BooleanAttribute;Z)Landroid/icu/text/DateFormat;"/>
+		<method name="setCalendar(Landroid/icu/util/Calendar;)V"/>
+		<method name="setCalendarLenient(Z)V"/>
+		<method name="setContext(Landroid/icu/text/DisplayContext;)V"/>
+		<method name="setLenient(Z)V"/>
+		<method name="setNumberFormat(Landroid/icu/text/NumberFormat;)V"/>
+		<method name="setTimeZone(Landroid/icu/util/TimeZone;)V"/>
+		<field name="ABBR_GENERIC_TZ"/>
+		<field name="ABBR_MONTH"/>
+		<field name="ABBR_MONTH_DAY"/>
+		<field name="ABBR_MONTH_WEEKDAY_DAY"/>
+		<field name="ABBR_QUARTER"/>
+		<field name="ABBR_SPECIFIC_TZ"/>
+		<field name="ABBR_UTC_TZ"/>
+		<field name="ABBR_WEEKDAY"/>
+		<field name="AM_PM_FIELD"/>
+		<field name="AM_PM_MIDNIGHT_NOON_FIELD" since="28"/>
+		<field name="DATE_FIELD"/>
+		<field name="DAY"/>
+		<field name="DAY_OF_WEEK_FIELD"/>
+		<field name="DAY_OF_WEEK_IN_MONTH_FIELD"/>
+		<field name="DAY_OF_YEAR_FIELD"/>
+		<field name="DEFAULT"/>
+		<field name="DOW_LOCAL_FIELD"/>
+		<field name="ERA_FIELD"/>
+		<field name="EXTENDED_YEAR_FIELD"/>
+		<field name="FLEXIBLE_DAY_PERIOD_FIELD" since="28"/>
+		<field name="FRACTIONAL_SECOND_FIELD"/>
+		<field name="FULL"/>
+		<field name="GENERIC_TZ"/>
+		<field name="HOUR"/>
+		<field name="HOUR0_FIELD"/>
+		<field name="HOUR1_FIELD"/>
+		<field name="HOUR24"/>
+		<field name="HOUR24_MINUTE"/>
+		<field name="HOUR24_MINUTE_SECOND"/>
+		<field name="HOUR_MINUTE"/>
+		<field name="HOUR_MINUTE_SECOND"/>
+		<field name="HOUR_OF_DAY0_FIELD"/>
+		<field name="HOUR_OF_DAY1_FIELD"/>
+		<field name="JULIAN_DAY_FIELD"/>
+		<field name="LOCATION_TZ"/>
+		<field name="LONG"/>
+		<field name="MEDIUM"/>
+		<field name="MILLISECONDS_IN_DAY_FIELD"/>
+		<field name="MILLISECOND_FIELD"/>
+		<field name="MINUTE"/>
+		<field name="MINUTE_FIELD"/>
+		<field name="MINUTE_SECOND"/>
+		<field name="MONTH"/>
+		<field name="MONTH_DAY"/>
+		<field name="MONTH_FIELD"/>
+		<field name="MONTH_WEEKDAY_DAY"/>
+		<field name="NONE"/>
+		<field name="NUM_MONTH"/>
+		<field name="NUM_MONTH_DAY"/>
+		<field name="NUM_MONTH_WEEKDAY_DAY"/>
+		<field name="QUARTER"/>
+		<field name="QUARTER_FIELD"/>
+		<field name="RELATIVE"/>
+		<field name="RELATIVE_DEFAULT"/>
+		<field name="RELATIVE_FULL"/>
+		<field name="RELATIVE_LONG"/>
+		<field name="RELATIVE_MEDIUM"/>
+		<field name="RELATIVE_SHORT"/>
+		<field name="SECOND"/>
+		<field name="SECOND_FIELD"/>
+		<field name="SHORT"/>
+		<field name="SPECIFIC_TZ"/>
+		<field name="STANDALONE_DAY_FIELD"/>
+		<field name="STANDALONE_MONTH_FIELD"/>
+		<field name="STANDALONE_QUARTER_FIELD"/>
+		<field name="TIMEZONE_FIELD"/>
+		<field name="TIMEZONE_GENERIC_FIELD"/>
+		<field name="TIMEZONE_ISO_FIELD"/>
+		<field name="TIMEZONE_ISO_LOCAL_FIELD"/>
+		<field name="TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD"/>
+		<field name="TIMEZONE_RFC_FIELD"/>
+		<field name="TIMEZONE_SPECIAL_FIELD"/>
+		<field name="WEEKDAY"/>
+		<field name="WEEK_OF_MONTH_FIELD"/>
+		<field name="WEEK_OF_YEAR_FIELD"/>
+		<field name="YEAR"/>
+		<field name="YEAR_ABBR_MONTH"/>
+		<field name="YEAR_ABBR_MONTH_DAY"/>
+		<field name="YEAR_ABBR_MONTH_WEEKDAY_DAY"/>
+		<field name="YEAR_ABBR_QUARTER"/>
+		<field name="YEAR_FIELD"/>
+		<field name="YEAR_MONTH"/>
+		<field name="YEAR_MONTH_DAY"/>
+		<field name="YEAR_MONTH_WEEKDAY_DAY"/>
+		<field name="YEAR_NAME_FIELD"/>
+		<field name="YEAR_NUM_MONTH"/>
+		<field name="YEAR_NUM_MONTH_DAY"/>
+		<field name="YEAR_NUM_MONTH_WEEKDAY_DAY"/>
+		<field name="YEAR_QUARTER"/>
+		<field name="YEAR_WOY_FIELD"/>
+		<field name="calendar"/>
+		<field name="numberFormat"/>
+	</class>
+	<class name="android/icu/text/DateFormat$BooleanAttribute" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DateFormat$BooleanAttribute;"/>
+		<method name="values()[Landroid/icu/text/DateFormat$BooleanAttribute;"/>
+		<field name="PARSE_ALLOW_NUMERIC"/>
+		<field name="PARSE_ALLOW_WHITESPACE"/>
+		<field name="PARSE_MULTIPLE_PATTERNS_FOR_MATCH" since="26"/>
+		<field name="PARSE_PARTIAL_LITERAL_MATCH" since="26"/>
+		<field name="PARSE_PARTIAL_MATCH" since="28" removed="29"/>
+	</class>
+	<class name="android/icu/text/DateFormat$Field" since="24">
+		<extends name="java/text/Format$Field"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getCalendarField()I"/>
+		<method name="ofCalendarField(I)Landroid/icu/text/DateFormat$Field;"/>
+		<field name="AM_PM"/>
+		<field name="AM_PM_MIDNIGHT_NOON" since="28"/>
+		<field name="DAY_OF_MONTH"/>
+		<field name="DAY_OF_WEEK"/>
+		<field name="DAY_OF_WEEK_IN_MONTH"/>
+		<field name="DAY_OF_YEAR"/>
+		<field name="DOW_LOCAL"/>
+		<field name="ERA"/>
+		<field name="EXTENDED_YEAR"/>
+		<field name="FLEXIBLE_DAY_PERIOD" since="28"/>
+		<field name="HOUR0"/>
+		<field name="HOUR1"/>
+		<field name="HOUR_OF_DAY0"/>
+		<field name="HOUR_OF_DAY1"/>
+		<field name="JULIAN_DAY"/>
+		<field name="MILLISECOND"/>
+		<field name="MILLISECONDS_IN_DAY"/>
+		<field name="MINUTE"/>
+		<field name="MONTH"/>
+		<field name="QUARTER"/>
+		<field name="SECOND"/>
+		<field name="TIME_ZONE"/>
+		<field name="WEEK_OF_MONTH"/>
+		<field name="WEEK_OF_YEAR"/>
+		<field name="YEAR"/>
+		<field name="YEAR_WOY"/>
+	</class>
+	<class name="android/icu/text/DateFormatSymbols" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/icu/util/Calendar;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/Calendar;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/lang/Class;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/util/ResourceBundle;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/ResourceBundle;Ljava/util/Locale;)V"/>
+		<method name="getAmPmStrings()[Ljava/lang/String;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getEraNames()[Ljava/lang/String;"/>
+		<method name="getEras()[Ljava/lang/String;"/>
+		<method name="getInstance()Landroid/icu/text/DateFormatSymbols;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormatSymbols;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/DateFormatSymbols;"/>
+		<method name="getLocalPatternChars()Ljava/lang/String;"/>
+		<method name="getMonths()[Ljava/lang/String;"/>
+		<method name="getMonths(II)[Ljava/lang/String;"/>
+		<method name="getNarrowEras()[Ljava/lang/String;" since="31"/>
+		<method name="getQuarters(II)[Ljava/lang/String;"/>
+		<method name="getShortMonths()[Ljava/lang/String;"/>
+		<method name="getShortWeekdays()[Ljava/lang/String;"/>
+		<method name="getWeekdays()[Ljava/lang/String;"/>
+		<method name="getWeekdays(II)[Ljava/lang/String;"/>
+		<method name="getYearNames(II)[Ljava/lang/String;"/>
+		<method name="getZodiacNames(II)[Ljava/lang/String;"/>
+		<method name="getZoneStrings()[[Ljava/lang/String;"/>
+		<method name="initializeData(Landroid/icu/util/ULocale;Ljava/lang/String;)V"/>
+		<method name="setAmPmStrings([Ljava/lang/String;)V"/>
+		<method name="setEraNames([Ljava/lang/String;)V"/>
+		<method name="setEras([Ljava/lang/String;)V"/>
+		<method name="setLocalPatternChars(Ljava/lang/String;)V"/>
+		<method name="setMonths([Ljava/lang/String;)V"/>
+		<method name="setMonths([Ljava/lang/String;II)V"/>
+		<method name="setNarrowEras([Ljava/lang/String;)V" since="31"/>
+		<method name="setQuarters([Ljava/lang/String;II)V"/>
+		<method name="setShortMonths([Ljava/lang/String;)V"/>
+		<method name="setShortWeekdays([Ljava/lang/String;)V"/>
+		<method name="setWeekdays([Ljava/lang/String;)V"/>
+		<method name="setWeekdays([Ljava/lang/String;II)V"/>
+		<method name="setYearNames([Ljava/lang/String;II)V"/>
+		<method name="setZodiacNames([Ljava/lang/String;II)V"/>
+		<method name="setZoneStrings([[Ljava/lang/String;)V"/>
+		<field name="ABBREVIATED"/>
+		<field name="FORMAT"/>
+		<field name="NARROW"/>
+		<field name="SHORT"/>
+		<field name="STANDALONE"/>
+		<field name="WIDE"/>
+	</class>
+	<class name="android/icu/text/DateIntervalFormat" since="24">
+		<extends name="android/icu/text/UFormat"/>
+		<method name="format(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(Landroid/icu/util/DateInterval;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="formatToValue(Landroid/icu/util/Calendar;Landroid/icu/util/Calendar;)Landroid/icu/text/DateIntervalFormat$FormattedDateInterval;" since="31"/>
+		<method name="formatToValue(Landroid/icu/util/DateInterval;)Landroid/icu/text/DateIntervalFormat$FormattedDateInterval;" since="31"/>
+		<method name="getDateFormat()Landroid/icu/text/DateFormat;"/>
+		<method name="getDateIntervalInfo()Landroid/icu/text/DateIntervalInfo;"/>
+		<method name="getInstance(Ljava/lang/String;)Landroid/icu/text/DateIntervalFormat;"/>
+		<method name="getInstance(Ljava/lang/String;Landroid/icu/text/DateIntervalInfo;)Landroid/icu/text/DateIntervalFormat;"/>
+		<method name="getInstance(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateIntervalFormat;"/>
+		<method name="getInstance(Ljava/lang/String;Landroid/icu/util/ULocale;Landroid/icu/text/DateIntervalInfo;)Landroid/icu/text/DateIntervalFormat;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateIntervalFormat;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/util/Locale;Landroid/icu/text/DateIntervalInfo;)Landroid/icu/text/DateIntervalFormat;"/>
+		<method name="getTimeZone()Landroid/icu/util/TimeZone;"/>
+		<method name="setDateIntervalInfo(Landroid/icu/text/DateIntervalInfo;)V"/>
+		<method name="setTimeZone(Landroid/icu/util/TimeZone;)V"/>
+	</class>
+	<class name="android/icu/text/DateIntervalFormat$FormattedDateInterval" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/text/FormattedValue"/>
+	</class>
+	<class name="android/icu/text/DateIntervalInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/util/Freezable"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="cloneAsThawed()Landroid/icu/text/DateIntervalInfo;"/>
+		<method name="freeze()Landroid/icu/text/DateIntervalInfo;"/>
+		<method name="getDefaultOrder()Z"/>
+		<method name="getFallbackIntervalPattern()Ljava/lang/String;"/>
+		<method name="getIntervalPattern(Ljava/lang/String;I)Landroid/icu/text/DateIntervalInfo$PatternInfo;"/>
+		<method name="setFallbackIntervalPattern(Ljava/lang/String;)V"/>
+		<method name="setIntervalPattern(Ljava/lang/String;ILjava/lang/String;)V"/>
+	</class>
+	<class name="android/icu/text/DateIntervalInfo$PatternInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Z)V"/>
+		<method name="firstDateInPtnIsLaterDate()Z"/>
+		<method name="getFirstPart()Ljava/lang/String;"/>
+		<method name="getSecondPart()Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/text/DateTimePatternGenerator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/util/Freezable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="addPattern(Ljava/lang/String;ZLandroid/icu/text/DateTimePatternGenerator$PatternInfo;)Landroid/icu/text/DateTimePatternGenerator;"/>
+		<method name="cloneAsThawed()Landroid/icu/text/DateTimePatternGenerator;"/>
+		<method name="freeze()Landroid/icu/text/DateTimePatternGenerator;"/>
+		<method name="getAppendItemFormat(I)Ljava/lang/String;"/>
+		<method name="getAppendItemName(I)Ljava/lang/String;"/>
+		<method name="getBaseSkeleton(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getBaseSkeletons(Ljava/util/Set;)Ljava/util/Set;"/>
+		<method name="getBestPattern(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getBestPattern(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<method name="getDateTimeFormat()Ljava/lang/String;"/>
+		<method name="getDecimal()Ljava/lang/String;"/>
+		<method name="getEmptyInstance()Landroid/icu/text/DateTimePatternGenerator;"/>
+		<method name="getFieldDisplayName(ILandroid/icu/text/DateTimePatternGenerator$DisplayWidth;)Ljava/lang/String;" since="30"/>
+		<method name="getInstance()Landroid/icu/text/DateTimePatternGenerator;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DateTimePatternGenerator;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/DateTimePatternGenerator;"/>
+		<method name="getSkeleton(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getSkeletons(Ljava/util/Map;)Ljava/util/Map;"/>
+		<method name="replaceFieldTypes(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="replaceFieldTypes(Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;"/>
+		<method name="setAppendItemFormat(ILjava/lang/String;)V"/>
+		<method name="setAppendItemName(ILjava/lang/String;)V"/>
+		<method name="setDateTimeFormat(Ljava/lang/String;)V"/>
+		<method name="setDecimal(Ljava/lang/String;)V"/>
+		<field name="DAY"/>
+		<field name="DAYPERIOD"/>
+		<field name="DAY_OF_WEEK_IN_MONTH"/>
+		<field name="DAY_OF_YEAR"/>
+		<field name="ERA"/>
+		<field name="FRACTIONAL_SECOND"/>
+		<field name="HOUR"/>
+		<field name="MATCH_ALL_FIELDS_LENGTH"/>
+		<field name="MATCH_HOUR_FIELD_LENGTH"/>
+		<field name="MATCH_NO_OPTIONS"/>
+		<field name="MINUTE"/>
+		<field name="MONTH"/>
+		<field name="QUARTER"/>
+		<field name="SECOND"/>
+		<field name="WEEKDAY"/>
+		<field name="WEEK_OF_MONTH"/>
+		<field name="WEEK_OF_YEAR"/>
+		<field name="YEAR"/>
+		<field name="ZONE"/>
+	</class>
+	<class name="android/icu/text/DateTimePatternGenerator$DisplayWidth" since="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DateTimePatternGenerator$DisplayWidth;"/>
+		<method name="values()[Landroid/icu/text/DateTimePatternGenerator$DisplayWidth;"/>
+		<field name="ABBREVIATED"/>
+		<field name="NARROW"/>
+		<field name="WIDE"/>
+	</class>
+	<class name="android/icu/text/DateTimePatternGenerator$PatternInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="BASE_CONFLICT"/>
+		<field name="CONFLICT"/>
+		<field name="OK"/>
+		<field name="conflictingPattern"/>
+		<field name="status"/>
+	</class>
+	<class name="android/icu/text/DecimalFormat" since="24">
+		<extends name="android/icu/text/NumberFormat"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/text/DecimalFormatSymbols;Landroid/icu/text/CurrencyPluralInfo;I)V"/>
+		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="areSignificantDigitsUsed()Z"/>
+		<method name="getCurrencyPluralInfo()Landroid/icu/text/CurrencyPluralInfo;"/>
+		<method name="getCurrencyUsage()Landroid/icu/util/Currency$CurrencyUsage;"/>
+		<method name="getDecimalFormatSymbols()Landroid/icu/text/DecimalFormatSymbols;"/>
+		<method name="getFormatWidth()I"/>
+		<method name="getGroupingSize()I"/>
+		<method name="getMathContext()Ljava/math/MathContext;"/>
+		<method name="getMathContextICU()Landroid/icu/math/MathContext;"/>
+		<method name="getMaximumSignificantDigits()I"/>
+		<method name="getMinimumExponentDigits()B"/>
+		<method name="getMinimumGroupingDigits()I" since="31"/>
+		<method name="getMinimumSignificantDigits()I"/>
+		<method name="getMultiplier()I"/>
+		<method name="getNegativePrefix()Ljava/lang/String;"/>
+		<method name="getNegativeSuffix()Ljava/lang/String;"/>
+		<method name="getPadCharacter()C"/>
+		<method name="getPadPosition()I"/>
+		<method name="getParseMaxDigits()I" deprecated="28"/>
+		<method name="getPositivePrefix()Ljava/lang/String;"/>
+		<method name="getPositiveSuffix()Ljava/lang/String;"/>
+		<method name="getRoundingIncrement()Ljava/math/BigDecimal;"/>
+		<method name="getSecondaryGroupingSize()I"/>
+		<method name="isDecimalPatternMatchRequired()Z"/>
+		<method name="isDecimalSeparatorAlwaysShown()Z"/>
+		<method name="isExponentSignAlwaysShown()Z"/>
+		<method name="isParseBigDecimal()Z"/>
+		<method name="isParseCaseSensitive()Z" since="31"/>
+		<method name="isParseNoExponent()Z" since="31"/>
+		<method name="isScientificNotation()Z"/>
+		<method name="isSignAlwaysShown()Z" since="31"/>
+		<method name="setCurrencyPluralInfo(Landroid/icu/text/CurrencyPluralInfo;)V"/>
+		<method name="setCurrencyUsage(Landroid/icu/util/Currency$CurrencyUsage;)V"/>
+		<method name="setDecimalFormatSymbols(Landroid/icu/text/DecimalFormatSymbols;)V"/>
+		<method name="setDecimalPatternMatchRequired(Z)V"/>
+		<method name="setDecimalSeparatorAlwaysShown(Z)V"/>
+		<method name="setExponentSignAlwaysShown(Z)V"/>
+		<method name="setFormatWidth(I)V"/>
+		<method name="setGroupingSize(I)V"/>
+		<method name="setMathContext(Ljava/math/MathContext;)V"/>
+		<method name="setMathContextICU(Landroid/icu/math/MathContext;)V"/>
+		<method name="setMaximumSignificantDigits(I)V"/>
+		<method name="setMinimumExponentDigits(B)V"/>
+		<method name="setMinimumGroupingDigits(I)V" since="31"/>
+		<method name="setMinimumSignificantDigits(I)V"/>
+		<method name="setMultiplier(I)V"/>
+		<method name="setNegativePrefix(Ljava/lang/String;)V"/>
+		<method name="setNegativeSuffix(Ljava/lang/String;)V"/>
+		<method name="setPadCharacter(C)V"/>
+		<method name="setPadPosition(I)V"/>
+		<method name="setParseBigDecimal(Z)V"/>
+		<method name="setParseCaseSensitive(Z)V" since="31"/>
+		<method name="setParseMaxDigits(I)V" deprecated="28"/>
+		<method name="setParseNoExponent(Z)V" since="31"/>
+		<method name="setPositivePrefix(Ljava/lang/String;)V"/>
+		<method name="setPositiveSuffix(Ljava/lang/String;)V"/>
+		<method name="setRoundingIncrement(D)V"/>
+		<method name="setRoundingIncrement(Landroid/icu/math/BigDecimal;)V"/>
+		<method name="setRoundingIncrement(Ljava/math/BigDecimal;)V"/>
+		<method name="setScientificNotation(Z)V"/>
+		<method name="setSecondaryGroupingSize(I)V"/>
+		<method name="setSignAlwaysShown(Z)V" since="31"/>
+		<method name="setSignificantDigitsUsed(Z)V"/>
+		<method name="toLocalizedPattern()Ljava/lang/String;"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+		<field name="PAD_AFTER_PREFIX"/>
+		<field name="PAD_AFTER_SUFFIX"/>
+		<field name="PAD_BEFORE_PREFIX"/>
+		<field name="PAD_BEFORE_SUFFIX"/>
+	</class>
+	<class name="android/icu/text/DecimalFormatSymbols" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="forNumberingSystem(Landroid/icu/util/ULocale;Landroid/icu/text/NumberingSystem;)Landroid/icu/text/DecimalFormatSymbols;" since="29"/>
+		<method name="forNumberingSystem(Ljava/util/Locale;Landroid/icu/text/NumberingSystem;)Landroid/icu/text/DecimalFormatSymbols;" since="29"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCurrency()Landroid/icu/util/Currency;"/>
+		<method name="getCurrencySymbol()Ljava/lang/String;"/>
+		<method name="getDecimalSeparator()C"/>
+		<method name="getDecimalSeparatorString()Ljava/lang/String;" since="28"/>
+		<method name="getDigit()C"/>
+		<method name="getDigitStrings()[Ljava/lang/String;" since="28"/>
+		<method name="getDigits()[C"/>
+		<method name="getExponentMultiplicationSign()Ljava/lang/String;"/>
+		<method name="getExponentSeparator()Ljava/lang/String;"/>
+		<method name="getGroupingSeparator()C"/>
+		<method name="getGroupingSeparatorString()Ljava/lang/String;" since="28"/>
+		<method name="getInfinity()Ljava/lang/String;"/>
+		<method name="getInstance()Landroid/icu/text/DecimalFormatSymbols;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/DecimalFormatSymbols;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/DecimalFormatSymbols;"/>
+		<method name="getInternationalCurrencySymbol()Ljava/lang/String;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getMinusSign()C"/>
+		<method name="getMinusSignString()Ljava/lang/String;" since="28"/>
+		<method name="getMonetaryDecimalSeparator()C"/>
+		<method name="getMonetaryDecimalSeparatorString()Ljava/lang/String;" since="28"/>
+		<method name="getMonetaryGroupingSeparator()C"/>
+		<method name="getMonetaryGroupingSeparatorString()Ljava/lang/String;" since="28"/>
+		<method name="getNaN()Ljava/lang/String;"/>
+		<method name="getPadEscape()C"/>
+		<method name="getPatternForCurrencySpacing(IZ)Ljava/lang/String;"/>
+		<method name="getPatternSeparator()C"/>
+		<method name="getPerMill()C"/>
+		<method name="getPerMillString()Ljava/lang/String;" since="28"/>
+		<method name="getPercent()C"/>
+		<method name="getPercentString()Ljava/lang/String;" since="28"/>
+		<method name="getPlusSign()C"/>
+		<method name="getPlusSignString()Ljava/lang/String;" since="28"/>
+		<method name="getSignificantDigit()C"/>
+		<method name="getULocale()Landroid/icu/util/ULocale;"/>
+		<method name="getZeroDigit()C"/>
+		<method name="setCurrency(Landroid/icu/util/Currency;)V"/>
+		<method name="setCurrencySymbol(Ljava/lang/String;)V"/>
+		<method name="setDecimalSeparator(C)V"/>
+		<method name="setDecimalSeparatorString(Ljava/lang/String;)V" since="28"/>
+		<method name="setDigit(C)V"/>
+		<method name="setDigitStrings([Ljava/lang/String;)V" since="28"/>
+		<method name="setExponentMultiplicationSign(Ljava/lang/String;)V"/>
+		<method name="setExponentSeparator(Ljava/lang/String;)V"/>
+		<method name="setGroupingSeparator(C)V"/>
+		<method name="setGroupingSeparatorString(Ljava/lang/String;)V" since="28"/>
+		<method name="setInfinity(Ljava/lang/String;)V"/>
+		<method name="setInternationalCurrencySymbol(Ljava/lang/String;)V"/>
+		<method name="setMinusSign(C)V"/>
+		<method name="setMinusSignString(Ljava/lang/String;)V" since="28"/>
+		<method name="setMonetaryDecimalSeparator(C)V"/>
+		<method name="setMonetaryDecimalSeparatorString(Ljava/lang/String;)V" since="28"/>
+		<method name="setMonetaryGroupingSeparator(C)V"/>
+		<method name="setMonetaryGroupingSeparatorString(Ljava/lang/String;)V" since="28"/>
+		<method name="setNaN(Ljava/lang/String;)V"/>
+		<method name="setPadEscape(C)V"/>
+		<method name="setPatternForCurrencySpacing(IZLjava/lang/String;)V"/>
+		<method name="setPatternSeparator(C)V"/>
+		<method name="setPerMill(C)V"/>
+		<method name="setPerMillString(Ljava/lang/String;)V" since="28"/>
+		<method name="setPercent(C)V"/>
+		<method name="setPercentString(Ljava/lang/String;)V" since="28"/>
+		<method name="setPlusSign(C)V"/>
+		<method name="setPlusSignString(Ljava/lang/String;)V" since="28"/>
+		<method name="setSignificantDigit(C)V"/>
+		<method name="setZeroDigit(C)V"/>
+		<field name="CURRENCY_SPC_CURRENCY_MATCH"/>
+		<field name="CURRENCY_SPC_INSERT"/>
+		<field name="CURRENCY_SPC_SURROUNDING_MATCH"/>
+	</class>
+	<class name="android/icu/text/DisplayContext" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="type()Landroid/icu/text/DisplayContext$Type;"/>
+		<method name="value()I"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DisplayContext;"/>
+		<method name="values()[Landroid/icu/text/DisplayContext;"/>
+		<field name="CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE"/>
+		<field name="CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE"/>
+		<field name="CAPITALIZATION_FOR_STANDALONE"/>
+		<field name="CAPITALIZATION_FOR_UI_LIST_OR_MENU"/>
+		<field name="CAPITALIZATION_NONE"/>
+		<field name="DIALECT_NAMES"/>
+		<field name="LENGTH_FULL"/>
+		<field name="LENGTH_SHORT"/>
+		<field name="NO_SUBSTITUTE" since="28"/>
+		<field name="STANDARD_NAMES"/>
+		<field name="SUBSTITUTE" since="28"/>
+	</class>
+	<class name="android/icu/text/DisplayContext$Type" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/DisplayContext$Type;"/>
+		<method name="values()[Landroid/icu/text/DisplayContext$Type;"/>
+		<field name="CAPITALIZATION"/>
+		<field name="DIALECT_HANDLING"/>
+		<field name="DISPLAY_LENGTH"/>
+		<field name="SUBSTITUTE_HANDLING" since="28"/>
+	</class>
+	<class name="android/icu/text/Edits" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addReplace(II)V"/>
+		<method name="addUnchanged(I)V"/>
+		<method name="getCoarseChangesIterator()Landroid/icu/text/Edits$Iterator;"/>
+		<method name="getCoarseIterator()Landroid/icu/text/Edits$Iterator;"/>
+		<method name="getFineChangesIterator()Landroid/icu/text/Edits$Iterator;"/>
+		<method name="getFineIterator()Landroid/icu/text/Edits$Iterator;"/>
+		<method name="hasChanges()Z"/>
+		<method name="lengthDelta()I"/>
+		<method name="mergeAndAppend(Landroid/icu/text/Edits;Landroid/icu/text/Edits;)Landroid/icu/text/Edits;"/>
+		<method name="numberOfChanges()I"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="android/icu/text/Edits$Iterator" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="destinationIndex()I"/>
+		<method name="destinationIndexFromSourceIndex(I)I"/>
+		<method name="findDestinationIndex(I)Z"/>
+		<method name="findSourceIndex(I)Z"/>
+		<method name="hasChange()Z"/>
+		<method name="newLength()I"/>
+		<method name="next()Z"/>
+		<method name="oldLength()I"/>
+		<method name="replacementIndex()I"/>
+		<method name="sourceIndex()I"/>
+		<method name="sourceIndexFromDestinationIndex(I)I"/>
+	</class>
+	<class name="android/icu/text/FormattedValue" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="appendTo(Ljava/lang/Appendable;)Ljava/lang/Appendable;"/>
+		<method name="nextPosition(Landroid/icu/text/ConstrainedFieldPosition;)Z"/>
+		<method name="toCharacterIterator()Ljava/text/AttributedCharacterIterator;"/>
+	</class>
+	<class name="android/icu/text/IDNA" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getUTS46Instance(I)Landroid/icu/text/IDNA;"/>
+		<method name="labelToASCII(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
+		<method name="labelToUnicode(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
+		<method name="nameToASCII(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
+		<method name="nameToUnicode(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;Landroid/icu/text/IDNA$Info;)Ljava/lang/StringBuilder;"/>
+		<field name="CHECK_BIDI"/>
+		<field name="CHECK_CONTEXTJ"/>
+		<field name="CHECK_CONTEXTO"/>
+		<field name="DEFAULT"/>
+		<field name="NONTRANSITIONAL_TO_ASCII"/>
+		<field name="NONTRANSITIONAL_TO_UNICODE"/>
+		<field name="USE_STD3_RULES"/>
+	</class>
+	<class name="android/icu/text/IDNA$Error" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/IDNA$Error;"/>
+		<method name="values()[Landroid/icu/text/IDNA$Error;"/>
+		<field name="BIDI"/>
+		<field name="CONTEXTJ"/>
+		<field name="CONTEXTO_DIGITS"/>
+		<field name="CONTEXTO_PUNCTUATION"/>
+		<field name="DISALLOWED"/>
+		<field name="DOMAIN_NAME_TOO_LONG"/>
+		<field name="EMPTY_LABEL"/>
+		<field name="HYPHEN_3_4"/>
+		<field name="INVALID_ACE_LABEL"/>
+		<field name="LABEL_HAS_DOT"/>
+		<field name="LABEL_TOO_LONG"/>
+		<field name="LEADING_COMBINING_MARK"/>
+		<field name="LEADING_HYPHEN"/>
+		<field name="PUNYCODE"/>
+		<field name="TRAILING_HYPHEN"/>
+	</class>
+	<class name="android/icu/text/IDNA$Info" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getErrors()Ljava/util/Set;"/>
+		<method name="hasErrors()Z"/>
+		<method name="isTransitionalDifferent()Z"/>
+	</class>
+	<class name="android/icu/text/ListFormatter" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="format(Ljava/util/Collection;)Ljava/lang/String;"/>
+		<method name="format([Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="getInstance()Landroid/icu/text/ListFormatter;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/ListFormatter;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/ListFormatter;"/>
+		<method name="getPatternForNumItems(I)Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/text/LocaleDisplayNames" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;"/>
+		<method name="getDialectHandling()Landroid/icu/text/LocaleDisplayNames$DialectHandling;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/LocaleDisplayNames;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/LocaleDisplayNames$DialectHandling;)Landroid/icu/text/LocaleDisplayNames;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/LocaleDisplayNames;"/>
+		<method name="getInstance(Ljava/util/Locale;[Landroid/icu/text/DisplayContext;)Landroid/icu/text/LocaleDisplayNames;"/>
+		<method name="getLocale()Landroid/icu/util/ULocale;"/>
+		<method name="getUiList(Ljava/util/Set;ZLjava/util/Comparator;)Ljava/util/List;" since="26"/>
+		<method name="getUiListCompareWholeItems(Ljava/util/Set;Ljava/util/Comparator;)Ljava/util/List;" since="26"/>
+		<method name="keyDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="keyValueDisplayName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="languageDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="localeDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="localeDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="localeDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="regionDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="scriptDisplayName(I)Ljava/lang/String;"/>
+		<method name="scriptDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="variantDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/text/LocaleDisplayNames$DialectHandling" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/LocaleDisplayNames$DialectHandling;"/>
+		<method name="values()[Landroid/icu/text/LocaleDisplayNames$DialectHandling;"/>
+		<field name="DIALECT_NAMES"/>
+		<field name="STANDARD_NAMES"/>
+	</class>
+	<class name="android/icu/text/LocaleDisplayNames$UiListItem" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getComparator(Ljava/util/Comparator;Z)Ljava/util/Comparator;"/>
+		<field name="minimized"/>
+		<field name="modified"/>
+		<field name="nameInDisplayLocale"/>
+		<field name="nameInSelf"/>
+	</class>
+	<class name="android/icu/text/MeasureFormat" since="24">
+		<extends name="android/icu/text/UFormat"/>
+		<method name="formatMeasurePerUnit(Landroid/icu/util/Measure;Landroid/icu/util/MeasureUnit;Ljava/lang/StringBuilder;Ljava/text/FieldPosition;)Ljava/lang/StringBuilder;" since="26"/>
+		<method name="formatMeasures(Ljava/lang/StringBuilder;Ljava/text/FieldPosition;[Landroid/icu/util/Measure;)Ljava/lang/StringBuilder;"/>
+		<method name="formatMeasures([Landroid/icu/util/Measure;)Ljava/lang/String;"/>
+		<method name="getCurrencyFormat()Landroid/icu/text/MeasureFormat;"/>
+		<method name="getCurrencyFormat(Landroid/icu/util/ULocale;)Landroid/icu/text/MeasureFormat;"/>
+		<method name="getCurrencyFormat(Ljava/util/Locale;)Landroid/icu/text/MeasureFormat;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$FormatWidth;)Landroid/icu/text/MeasureFormat;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/MeasureFormat$FormatWidth;Landroid/icu/text/NumberFormat;)Landroid/icu/text/MeasureFormat;"/>
+		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/MeasureFormat$FormatWidth;)Landroid/icu/text/MeasureFormat;"/>
+		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/MeasureFormat$FormatWidth;Landroid/icu/text/NumberFormat;)Landroid/icu/text/MeasureFormat;"/>
+		<method name="getLocale()Landroid/icu/util/ULocale;"/>
+		<method name="getNumberFormat()Landroid/icu/text/NumberFormat;"/>
+		<method name="getUnitDisplayName(Landroid/icu/util/MeasureUnit;)Ljava/lang/String;" since="28"/>
+		<method name="getWidth()Landroid/icu/text/MeasureFormat$FormatWidth;"/>
+		<method name="parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Landroid/icu/util/Measure;" removed="32"/>
+	</class>
+	<class name="android/icu/text/MeasureFormat$FormatWidth" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MeasureFormat$FormatWidth;"/>
+		<method name="values()[Landroid/icu/text/MeasureFormat$FormatWidth;"/>
+		<field name="NARROW"/>
+		<field name="NUMERIC"/>
+		<field name="SHORT"/>
+		<field name="WIDE"/>
+	</class>
+	<class name="android/icu/text/MessageFormat" since="24">
+		<extends name="android/icu/text/UFormat"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="applyPattern(Ljava/lang/String;Landroid/icu/text/MessagePattern$ApostropheMode;)V"/>
+		<method name="autoQuoteApostrophe(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="format(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/String;"/>
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="format(Ljava/util/Map;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format([Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="getApostropheMode()Landroid/icu/text/MessagePattern$ApostropheMode;"/>
+		<method name="getArgumentNames()Ljava/util/Set;"/>
+		<method name="getFormatByArgumentName(Ljava/lang/String;)Ljava/text/Format;"/>
+		<method name="getFormats()[Ljava/text/Format;"/>
+		<method name="getFormatsByArgumentIndex()[Ljava/text/Format;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getULocale()Landroid/icu/util/ULocale;"/>
+		<method name="parse(Ljava/lang/String;)[Ljava/lang/Object;"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)[Ljava/lang/Object;"/>
+		<method name="parseToMap(Ljava/lang/String;)Ljava/util/Map;"/>
+		<method name="parseToMap(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Map;"/>
+		<method name="setFormat(ILjava/text/Format;)V"/>
+		<method name="setFormatByArgumentIndex(ILjava/text/Format;)V"/>
+		<method name="setFormatByArgumentName(Ljava/lang/String;Ljava/text/Format;)V"/>
+		<method name="setFormats([Ljava/text/Format;)V"/>
+		<method name="setFormatsByArgumentIndex([Ljava/text/Format;)V"/>
+		<method name="setFormatsByArgumentName(Ljava/util/Map;)V"/>
+		<method name="setLocale(Landroid/icu/util/ULocale;)V"/>
+		<method name="setLocale(Ljava/util/Locale;)V"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+		<method name="usesNamedArguments()Z"/>
+	</class>
+	<class name="android/icu/text/MessageFormat$Field" since="24">
+		<extends name="java/text/Format$Field"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="ARGUMENT"/>
+	</class>
+	<class name="android/icu/text/MessagePattern" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/util/Freezable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/icu/text/MessagePattern$ApostropheMode;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="autoQuoteApostropheDeep()Ljava/lang/String;"/>
+		<method name="clear()V"/>
+		<method name="clearPatternAndSetApostropheMode(Landroid/icu/text/MessagePattern$ApostropheMode;)V"/>
+		<method name="cloneAsThawed()Landroid/icu/text/MessagePattern;"/>
+		<method name="countParts()I"/>
+		<method name="freeze()Landroid/icu/text/MessagePattern;"/>
+		<method name="getApostropheMode()Landroid/icu/text/MessagePattern$ApostropheMode;"/>
+		<method name="getLimitPartIndex(I)I"/>
+		<method name="getNumericValue(Landroid/icu/text/MessagePattern$Part;)D"/>
+		<method name="getPart(I)Landroid/icu/text/MessagePattern$Part;"/>
+		<method name="getPartType(I)Landroid/icu/text/MessagePattern$Part$Type;"/>
+		<method name="getPatternIndex(I)I"/>
+		<method name="getPatternString()Ljava/lang/String;"/>
+		<method name="getPluralOffset(I)D"/>
+		<method name="getSubstring(Landroid/icu/text/MessagePattern$Part;)Ljava/lang/String;"/>
+		<method name="hasNamedArguments()Z"/>
+		<method name="hasNumberedArguments()Z"/>
+		<method name="parse(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
+		<method name="parseChoiceStyle(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
+		<method name="parsePluralStyle(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
+		<method name="parseSelectStyle(Ljava/lang/String;)Landroid/icu/text/MessagePattern;"/>
+		<method name="partSubstringMatches(Landroid/icu/text/MessagePattern$Part;Ljava/lang/String;)Z"/>
+		<method name="validateArgumentName(Ljava/lang/String;)I"/>
+		<field name="ARG_NAME_NOT_NUMBER"/>
+		<field name="ARG_NAME_NOT_VALID"/>
+		<field name="NO_NUMERIC_VALUE"/>
+	</class>
+	<class name="android/icu/text/MessagePattern$ApostropheMode" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MessagePattern$ApostropheMode;"/>
+		<method name="values()[Landroid/icu/text/MessagePattern$ApostropheMode;"/>
+		<field name="DOUBLE_OPTIONAL"/>
+		<field name="DOUBLE_REQUIRED"/>
+	</class>
+	<class name="android/icu/text/MessagePattern$ArgType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="hasPluralStyle()Z"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MessagePattern$ArgType;"/>
+		<method name="values()[Landroid/icu/text/MessagePattern$ArgType;"/>
+		<field name="CHOICE"/>
+		<field name="NONE"/>
+		<field name="PLURAL"/>
+		<field name="SELECT"/>
+		<field name="SELECTORDINAL"/>
+		<field name="SIMPLE"/>
+	</class>
+	<class name="android/icu/text/MessagePattern$Part" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getArgType()Landroid/icu/text/MessagePattern$ArgType;"/>
+		<method name="getIndex()I"/>
+		<method name="getLength()I"/>
+		<method name="getLimit()I"/>
+		<method name="getType()Landroid/icu/text/MessagePattern$Part$Type;"/>
+		<method name="getValue()I"/>
+	</class>
+	<class name="android/icu/text/MessagePattern$Part$Type" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="hasNumericValue()Z"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/MessagePattern$Part$Type;"/>
+		<method name="values()[Landroid/icu/text/MessagePattern$Part$Type;"/>
+		<field name="ARG_DOUBLE"/>
+		<field name="ARG_INT"/>
+		<field name="ARG_LIMIT"/>
+		<field name="ARG_NAME"/>
+		<field name="ARG_NUMBER"/>
+		<field name="ARG_SELECTOR"/>
+		<field name="ARG_START"/>
+		<field name="ARG_STYLE"/>
+		<field name="ARG_TYPE"/>
+		<field name="INSERT_CHAR"/>
+		<field name="MSG_LIMIT"/>
+		<field name="MSG_START"/>
+		<field name="REPLACE_NUMBER"/>
+		<field name="SKIP_SYNTAX"/>
+	</class>
+	<class name="android/icu/text/Normalizer" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="compare(III)I"/>
+		<method name="compare(ILjava/lang/String;I)I"/>
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;I)I"/>
+		<method name="compare([CII[CIII)I"/>
+		<method name="compare([C[CI)I"/>
+		<field name="COMPARE_CODE_POINT_ORDER"/>
+		<field name="COMPARE_IGNORE_CASE"/>
+		<field name="FOLD_CASE_DEFAULT"/>
+		<field name="FOLD_CASE_EXCLUDE_SPECIAL_I"/>
+		<field name="INPUT_IS_FCD"/>
+		<field name="MAYBE"/>
+		<field name="NO"/>
+		<field name="YES"/>
+	</class>
+	<class name="android/icu/text/Normalizer$QuickCheckResult" since="24">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/icu/text/Normalizer2" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="append(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
+		<method name="composePair(II)I"/>
+		<method name="getCombiningClass(I)I"/>
+		<method name="getDecomposition(I)Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/io/InputStream;Ljava/lang/String;Landroid/icu/text/Normalizer2$Mode;)Landroid/icu/text/Normalizer2;" deprecated="31"/>
+		<method name="getNFCInstance()Landroid/icu/text/Normalizer2;"/>
+		<method name="getNFDInstance()Landroid/icu/text/Normalizer2;"/>
+		<method name="getNFKCCasefoldInstance()Landroid/icu/text/Normalizer2;"/>
+		<method name="getNFKCInstance()Landroid/icu/text/Normalizer2;"/>
+		<method name="getNFKDInstance()Landroid/icu/text/Normalizer2;"/>
+		<method name="getRawDecomposition(I)Ljava/lang/String;"/>
+		<method name="hasBoundaryAfter(I)Z"/>
+		<method name="hasBoundaryBefore(I)Z"/>
+		<method name="isInert(I)Z"/>
+		<method name="isNormalized(Ljava/lang/CharSequence;)Z"/>
+		<method name="normalize(Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="normalize(Ljava/lang/CharSequence;Ljava/lang/Appendable;)Ljava/lang/Appendable;"/>
+		<method name="normalize(Ljava/lang/CharSequence;Ljava/lang/StringBuilder;)Ljava/lang/StringBuilder;"/>
+		<method name="normalizeSecondAndAppend(Ljava/lang/StringBuilder;Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
+		<method name="quickCheck(Ljava/lang/CharSequence;)Landroid/icu/text/Normalizer$QuickCheckResult;"/>
+		<method name="spanQuickCheckYes(Ljava/lang/CharSequence;)I"/>
+	</class>
+	<class name="android/icu/text/Normalizer2$Mode" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/Normalizer2$Mode;"/>
+		<method name="values()[Landroid/icu/text/Normalizer2$Mode;"/>
+		<field name="COMPOSE"/>
+		<field name="COMPOSE_CONTIGUOUS"/>
+		<field name="DECOMPOSE"/>
+		<field name="FCD"/>
+	</class>
+	<class name="android/icu/text/NumberFormat" since="24">
+		<extends name="android/icu/text/UFormat"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(D)Ljava/lang/String;"/>
+		<method name="format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(J)Ljava/lang/String;"/>
+		<method name="format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(Landroid/icu/math/BigDecimal;)Ljava/lang/String;"/>
+		<method name="format(Landroid/icu/math/BigDecimal;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(Landroid/icu/util/CurrencyAmount;)Ljava/lang/String;"/>
+		<method name="format(Landroid/icu/util/CurrencyAmount;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(Ljava/math/BigDecimal;)Ljava/lang/String;"/>
+		<method name="format(Ljava/math/BigDecimal;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(Ljava/math/BigInteger;)Ljava/lang/String;"/>
+		<method name="format(Ljava/math/BigInteger;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getContext(Landroid/icu/text/DisplayContext$Type;)Landroid/icu/text/DisplayContext;"/>
+		<method name="getCurrency()Landroid/icu/util/Currency;"/>
+		<method name="getCurrencyInstance()Landroid/icu/text/NumberFormat;"/>
+		<method name="getCurrencyInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getCurrencyInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getInstance()Landroid/icu/text/NumberFormat;"/>
+		<method name="getInstance(I)Landroid/icu/text/NumberFormat;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;I)Landroid/icu/text/NumberFormat;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getInstance(Ljava/util/Locale;I)Landroid/icu/text/NumberFormat;"/>
+		<method name="getIntegerInstance()Landroid/icu/text/NumberFormat;"/>
+		<method name="getIntegerInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getIntegerInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getMaximumFractionDigits()I"/>
+		<method name="getMaximumIntegerDigits()I"/>
+		<method name="getMinimumFractionDigits()I"/>
+		<method name="getMinimumIntegerDigits()I"/>
+		<method name="getNumberInstance()Landroid/icu/text/NumberFormat;"/>
+		<method name="getNumberInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getNumberInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getPattern(Landroid/icu/util/ULocale;I)Ljava/lang/String;"/>
+		<method name="getPercentInstance()Landroid/icu/text/NumberFormat;"/>
+		<method name="getPercentInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getPercentInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getRoundingMode()I"/>
+		<method name="getScientificInstance()Landroid/icu/text/NumberFormat;"/>
+		<method name="getScientificInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="getScientificInstance(Ljava/util/Locale;)Landroid/icu/text/NumberFormat;"/>
+		<method name="isGroupingUsed()Z"/>
+		<method name="isParseIntegerOnly()Z"/>
+		<method name="isParseStrict()Z"/>
+		<method name="parse(Ljava/lang/String;)Ljava/lang/Number;"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;"/>
+		<method name="parseCurrency(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Landroid/icu/util/CurrencyAmount;"/>
+		<method name="setContext(Landroid/icu/text/DisplayContext;)V"/>
+		<method name="setCurrency(Landroid/icu/util/Currency;)V"/>
+		<method name="setGroupingUsed(Z)V"/>
+		<method name="setMaximumFractionDigits(I)V"/>
+		<method name="setMaximumIntegerDigits(I)V"/>
+		<method name="setMinimumFractionDigits(I)V"/>
+		<method name="setMinimumIntegerDigits(I)V"/>
+		<method name="setParseIntegerOnly(Z)V"/>
+		<method name="setParseStrict(Z)V"/>
+		<method name="setRoundingMode(I)V"/>
+		<field name="ACCOUNTINGCURRENCYSTYLE"/>
+		<field name="CASHCURRENCYSTYLE"/>
+		<field name="CURRENCYSTYLE"/>
+		<field name="FRACTION_FIELD"/>
+		<field name="INTEGERSTYLE"/>
+		<field name="INTEGER_FIELD"/>
+		<field name="ISOCURRENCYSTYLE"/>
+		<field name="NUMBERSTYLE"/>
+		<field name="PERCENTSTYLE"/>
+		<field name="PLURALCURRENCYSTYLE"/>
+		<field name="SCIENTIFICSTYLE"/>
+		<field name="STANDARDCURRENCYSTYLE" since="26"/>
+	</class>
+	<class name="android/icu/text/NumberFormat$Field" since="24">
+		<extends name="java/text/Format$Field"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="COMPACT" since="31"/>
+		<field name="CURRENCY"/>
+		<field name="DECIMAL_SEPARATOR"/>
+		<field name="EXPONENT"/>
+		<field name="EXPONENT_SIGN"/>
+		<field name="EXPONENT_SYMBOL"/>
+		<field name="FRACTION"/>
+		<field name="GROUPING_SEPARATOR"/>
+		<field name="INTEGER"/>
+		<field name="MEASURE_UNIT" since="31"/>
+		<field name="PERCENT"/>
+		<field name="PERMILLE"/>
+		<field name="SIGN"/>
+	</class>
+	<class name="android/icu/text/NumberingSystem" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAvailableNames()[Ljava/lang/String;"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getInstance()Landroid/icu/text/NumberingSystem;"/>
+		<method name="getInstance(IZLjava/lang/String;)Landroid/icu/text/NumberingSystem;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/NumberingSystem;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/NumberingSystem;"/>
+		<method name="getInstanceByName(Ljava/lang/String;)Landroid/icu/text/NumberingSystem;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getRadix()I"/>
+		<method name="isAlgorithmic()Z"/>
+		<method name="isValidDigitString(Ljava/lang/String;)Z"/>
+		<field name="LATIN" since="29"/>
+	</class>
+	<class name="android/icu/text/PluralFormat" since="24">
+		<extends name="android/icu/text/UFormat"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/icu/text/PluralRules;)V"/>
+		<method name="&lt;init>(Landroid/icu/text/PluralRules;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;Landroid/icu/text/PluralRules$PluralType;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;Landroid/icu/text/PluralRules;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="equals(Landroid/icu/text/PluralFormat;)Z"/>
+		<method name="format(D)Ljava/lang/String;"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;"/>
+		<method name="setNumberFormat(Landroid/icu/text/NumberFormat;)V"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/text/PluralRules" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="createRules(Ljava/lang/String;)Landroid/icu/text/PluralRules;"/>
+		<method name="equals(Landroid/icu/text/PluralRules;)Z"/>
+		<method name="forLocale(Landroid/icu/util/ULocale;)Landroid/icu/text/PluralRules;"/>
+		<method name="forLocale(Landroid/icu/util/ULocale;Landroid/icu/text/PluralRules$PluralType;)Landroid/icu/text/PluralRules;"/>
+		<method name="forLocale(Ljava/util/Locale;)Landroid/icu/text/PluralRules;"/>
+		<method name="forLocale(Ljava/util/Locale;Landroid/icu/text/PluralRules$PluralType;)Landroid/icu/text/PluralRules;"/>
+		<method name="getAllKeywordValues(Ljava/lang/String;)Ljava/util/Collection;"/>
+		<method name="getKeywords()Ljava/util/Set;"/>
+		<method name="getSamples(Ljava/lang/String;)Ljava/util/Collection;"/>
+		<method name="getUniqueKeywordValue(Ljava/lang/String;)D"/>
+		<method name="parseDescription(Ljava/lang/String;)Landroid/icu/text/PluralRules;"/>
+		<method name="select(D)Ljava/lang/String;"/>
+		<method name="select(Landroid/icu/number/FormattedNumber;)Ljava/lang/String;" since="31"/>
+		<field name="DEFAULT"/>
+		<field name="KEYWORD_FEW"/>
+		<field name="KEYWORD_MANY"/>
+		<field name="KEYWORD_ONE"/>
+		<field name="KEYWORD_OTHER"/>
+		<field name="KEYWORD_TWO"/>
+		<field name="KEYWORD_ZERO"/>
+		<field name="NO_UNIQUE_VALUE"/>
+	</class>
+	<class name="android/icu/text/PluralRules$PluralType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/PluralRules$PluralType;"/>
+		<method name="values()[Landroid/icu/text/PluralRules$PluralType;"/>
+		<field name="CARDINAL"/>
+		<field name="ORDINAL"/>
+	</class>
+	<class name="android/icu/text/RelativeDateTimeFormatter" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="combineDateAndTime(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="format(DLandroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;)Ljava/lang/String;"/>
+		<method name="format(DLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;)Ljava/lang/String;" since="28"/>
+		<method name="format(Landroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;)Ljava/lang/String;"/>
+		<method name="formatNumeric(DLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;)Ljava/lang/String;" since="28"/>
+		<method name="formatNumericToValue(DLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;)Landroid/icu/text/RelativeDateTimeFormatter$FormattedRelativeDateTime;" since="31"/>
+		<method name="formatToValue(DLandroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;)Landroid/icu/text/RelativeDateTimeFormatter$FormattedRelativeDateTime;" since="31"/>
+		<method name="formatToValue(DLandroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;)Landroid/icu/text/RelativeDateTimeFormatter$FormattedRelativeDateTime;" since="31"/>
+		<method name="formatToValue(Landroid/icu/text/RelativeDateTimeFormatter$Direction;Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;)Landroid/icu/text/RelativeDateTimeFormatter$FormattedRelativeDateTime;" since="31"/>
+		<method name="getCapitalizationContext()Landroid/icu/text/DisplayContext;"/>
+		<method name="getFormatStyle()Landroid/icu/text/RelativeDateTimeFormatter$Style;"/>
+		<method name="getInstance()Landroid/icu/text/RelativeDateTimeFormatter;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/NumberFormat;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;Landroid/icu/text/NumberFormat;Landroid/icu/text/RelativeDateTimeFormatter$Style;Landroid/icu/text/DisplayContext;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
+		<method name="getInstance(Ljava/util/Locale;Landroid/icu/text/NumberFormat;)Landroid/icu/text/RelativeDateTimeFormatter;"/>
+		<method name="getNumberFormat()Landroid/icu/text/NumberFormat;"/>
+	</class>
+	<class name="android/icu/text/RelativeDateTimeFormatter$AbsoluteUnit" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;"/>
+		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$AbsoluteUnit;"/>
+		<field name="DAY"/>
+		<field name="FRIDAY"/>
+		<field name="HOUR" since="31"/>
+		<field name="MINUTE" since="31"/>
+		<field name="MONDAY"/>
+		<field name="MONTH"/>
+		<field name="NOW"/>
+		<field name="QUARTER" since="28"/>
+		<field name="SATURDAY"/>
+		<field name="SUNDAY"/>
+		<field name="THURSDAY"/>
+		<field name="TUESDAY"/>
+		<field name="WEDNESDAY"/>
+		<field name="WEEK"/>
+		<field name="YEAR"/>
+	</class>
+	<class name="android/icu/text/RelativeDateTimeFormatter$Direction" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$Direction;"/>
+		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$Direction;"/>
+		<field name="LAST"/>
+		<field name="LAST_2"/>
+		<field name="NEXT"/>
+		<field name="NEXT_2"/>
+		<field name="PLAIN"/>
+		<field name="THIS"/>
+	</class>
+	<class name="android/icu/text/RelativeDateTimeFormatter$FormattedRelativeDateTime" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/text/FormattedValue"/>
+	</class>
+	<class name="android/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit" since="28">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;"/>
+		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$RelativeDateTimeUnit;"/>
+		<field name="DAY"/>
+		<field name="FRIDAY"/>
+		<field name="HOUR"/>
+		<field name="MINUTE"/>
+		<field name="MONDAY"/>
+		<field name="MONTH"/>
+		<field name="QUARTER"/>
+		<field name="SATURDAY"/>
+		<field name="SECOND"/>
+		<field name="SUNDAY"/>
+		<field name="THURSDAY"/>
+		<field name="TUESDAY"/>
+		<field name="WEDNESDAY"/>
+		<field name="WEEK"/>
+		<field name="YEAR"/>
+	</class>
+	<class name="android/icu/text/RelativeDateTimeFormatter$RelativeUnit" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;"/>
+		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$RelativeUnit;"/>
+		<field name="DAYS"/>
+		<field name="HOURS"/>
+		<field name="MINUTES"/>
+		<field name="MONTHS"/>
+		<field name="QUARTERS" since="28" removed="29"/>
+		<field name="SECONDS"/>
+		<field name="WEEKS"/>
+		<field name="YEARS"/>
+	</class>
+	<class name="android/icu/text/RelativeDateTimeFormatter$Style" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/RelativeDateTimeFormatter$Style;"/>
+		<method name="values()[Landroid/icu/text/RelativeDateTimeFormatter$Style;"/>
+		<field name="LONG"/>
+		<field name="NARROW"/>
+		<field name="SHORT"/>
+	</class>
+	<class name="android/icu/text/Replaceable" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="char32At(I)I"/>
+		<method name="charAt(I)C"/>
+		<method name="copy(III)V"/>
+		<method name="getChars(II[CI)V"/>
+		<method name="hasMetaData()Z"/>
+		<method name="length()I"/>
+		<method name="replace(IILjava/lang/String;)V"/>
+		<method name="replace(II[CII)V"/>
+	</class>
+	<class name="android/icu/text/RuleBasedCollator" since="24">
+		<extends name="android/icu/text/Collator"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="cloneAsThawed()Landroid/icu/text/RuleBasedCollator;"/>
+		<method name="getCollationElementIterator(Landroid/icu/text/UCharacterIterator;)Landroid/icu/text/CollationElementIterator;"/>
+		<method name="getCollationElementIterator(Ljava/lang/String;)Landroid/icu/text/CollationElementIterator;"/>
+		<method name="getCollationElementIterator(Ljava/text/CharacterIterator;)Landroid/icu/text/CollationElementIterator;"/>
+		<method name="getContractionsAndExpansions(Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet;Z)V"/>
+		<method name="getNumericCollation()Z"/>
+		<method name="getRules()Ljava/lang/String;"/>
+		<method name="getRules(Z)Ljava/lang/String;"/>
+		<method name="isAlternateHandlingShifted()Z"/>
+		<method name="isCaseLevel()Z"/>
+		<method name="isFrenchCollation()Z"/>
+		<method name="isLowerCaseFirst()Z"/>
+		<method name="isUpperCaseFirst()Z"/>
+		<method name="setAlternateHandlingDefault()V"/>
+		<method name="setAlternateHandlingShifted(Z)V"/>
+		<method name="setCaseFirstDefault()V"/>
+		<method name="setCaseLevel(Z)V"/>
+		<method name="setCaseLevelDefault()V"/>
+		<method name="setDecompositionDefault()V"/>
+		<method name="setFrenchCollation(Z)V"/>
+		<method name="setFrenchCollationDefault()V"/>
+		<method name="setLowerCaseFirst(Z)V"/>
+		<method name="setMaxVariable(I)Landroid/icu/text/RuleBasedCollator;"/>
+		<method name="setNumericCollation(Z)V"/>
+		<method name="setNumericCollationDefault()V"/>
+		<method name="setStrengthDefault()V"/>
+		<method name="setUpperCaseFirst(Z)V"/>
+	</class>
+	<class name="android/icu/text/ScientificNumberFormatter" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="format(Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="getMarkupInstance(Landroid/icu/text/DecimalFormat;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/ScientificNumberFormatter;"/>
+		<method name="getMarkupInstance(Landroid/icu/util/ULocale;Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/ScientificNumberFormatter;"/>
+		<method name="getSuperscriptInstance(Landroid/icu/text/DecimalFormat;)Landroid/icu/text/ScientificNumberFormatter;"/>
+		<method name="getSuperscriptInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/ScientificNumberFormatter;"/>
+	</class>
+	<class name="android/icu/text/SearchIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/text/CharacterIterator;Landroid/icu/text/BreakIterator;)V"/>
+		<method name="first()I"/>
+		<method name="following(I)I"/>
+		<method name="getBreakIterator()Landroid/icu/text/BreakIterator;"/>
+		<method name="getElementComparisonType()Landroid/icu/text/SearchIterator$ElementComparisonType;"/>
+		<method name="getIndex()I"/>
+		<method name="getMatchLength()I"/>
+		<method name="getMatchStart()I"/>
+		<method name="getMatchedText()Ljava/lang/String;"/>
+		<method name="getTarget()Ljava/text/CharacterIterator;"/>
+		<method name="handleNext(I)I"/>
+		<method name="handlePrevious(I)I"/>
+		<method name="isOverlapping()Z"/>
+		<method name="last()I"/>
+		<method name="next()I"/>
+		<method name="preceding(I)I"/>
+		<method name="previous()I"/>
+		<method name="reset()V"/>
+		<method name="setBreakIterator(Landroid/icu/text/BreakIterator;)V"/>
+		<method name="setElementComparisonType(Landroid/icu/text/SearchIterator$ElementComparisonType;)V"/>
+		<method name="setIndex(I)V"/>
+		<method name="setMatchLength(I)V"/>
+		<method name="setOverlapping(Z)V"/>
+		<method name="setTarget(Ljava/text/CharacterIterator;)V"/>
+		<field name="DONE"/>
+		<field name="breakIterator"/>
+		<field name="matchLength"/>
+		<field name="targetText"/>
+	</class>
+	<class name="android/icu/text/SearchIterator$ElementComparisonType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/SearchIterator$ElementComparisonType;"/>
+		<method name="values()[Landroid/icu/text/SearchIterator$ElementComparisonType;"/>
+		<field name="ANY_BASE_WEIGHT_IS_WILDCARD"/>
+		<field name="PATTERN_BASE_WEIGHT_IS_WILDCARD"/>
+		<field name="STANDARD_ELEMENT_COMPARISON"/>
+	</class>
+	<class name="android/icu/text/SelectFormat" since="24">
+		<extends name="java/text/Format"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="format(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/text/SimpleDateFormat" since="24">
+		<extends name="android/icu/text/DateFormat"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/text/DateFormatSymbols;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
+		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="get2DigitYearStart()Ljava/util/Date;"/>
+		<method name="getDateFormatSymbols()Landroid/icu/text/DateFormatSymbols;"/>
+		<method name="getNumberFormat(C)Landroid/icu/text/NumberFormat;"/>
+		<method name="getSymbols()Landroid/icu/text/DateFormatSymbols;"/>
+		<method name="getTimeZoneFormat()Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="matchQuarterString(Ljava/lang/String;II[Ljava/lang/String;Landroid/icu/util/Calendar;)I"/>
+		<method name="matchString(Ljava/lang/String;II[Ljava/lang/String;Landroid/icu/util/Calendar;)I"/>
+		<method name="patternCharToDateFormatField(C)Landroid/icu/text/DateFormat$Field;"/>
+		<method name="set2DigitYearStart(Ljava/util/Date;)V"/>
+		<method name="setDateFormatSymbols(Landroid/icu/text/DateFormatSymbols;)V"/>
+		<method name="setNumberFormat(Ljava/lang/String;Landroid/icu/text/NumberFormat;)V"/>
+		<method name="setTimeZoneFormat(Landroid/icu/text/TimeZoneFormat;)V"/>
+		<method name="subFormat(CIILjava/text/FieldPosition;Landroid/icu/text/DateFormatSymbols;Landroid/icu/util/Calendar;)Ljava/lang/String;"/>
+		<method name="subParse(Ljava/lang/String;ICIZZ[ZLandroid/icu/util/Calendar;)I"/>
+		<method name="toLocalizedPattern()Ljava/lang/String;"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+		<method name="zeroPaddingNumber(JII)Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/text/StringPrepParseException" since="24">
+		<extends name="java/text/ParseException"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;II)V"/>
+		<method name="getError()I"/>
+		<field name="ACE_PREFIX_ERROR"/>
+		<field name="BUFFER_OVERFLOW_ERROR"/>
+		<field name="CHECK_BIDI_ERROR"/>
+		<field name="DOMAIN_NAME_TOO_LONG_ERROR"/>
+		<field name="ILLEGAL_CHAR_FOUND"/>
+		<field name="INVALID_CHAR_FOUND"/>
+		<field name="LABEL_TOO_LONG_ERROR"/>
+		<field name="PROHIBITED_ERROR"/>
+		<field name="STD3_ASCII_RULES_ERROR"/>
+		<field name="UNASSIGNED_ERROR"/>
+		<field name="VERIFICATION_ERROR"/>
+		<field name="ZERO_LENGTH_LABEL"/>
+	</class>
+	<class name="android/icu/text/StringSearch" since="24">
+		<extends name="android/icu/text/SearchIterator"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Landroid/icu/text/RuleBasedCollator;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Landroid/icu/text/RuleBasedCollator;Landroid/icu/text/BreakIterator;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/CharacterIterator;Ljava/util/Locale;)V"/>
+		<method name="getCollator()Landroid/icu/text/RuleBasedCollator;"/>
+		<method name="getPattern()Ljava/lang/String;"/>
+		<method name="isCanonical()Z"/>
+		<method name="setCanonical(Z)V"/>
+		<method name="setCollator(Landroid/icu/text/RuleBasedCollator;)V"/>
+		<method name="setPattern(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/icu/text/SymbolTable" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="lookup(Ljava/lang/String;)[C"/>
+		<method name="lookupMatcher(I)Landroid/icu/text/UnicodeMatcher;"/>
+		<method name="parseReference(Ljava/lang/String;Ljava/text/ParsePosition;I)Ljava/lang/String;"/>
+		<field name="SYMBOL_REF"/>
+	</class>
+	<class name="android/icu/text/TimeZoneFormat" since="24">
+		<extends name="android/icu/text/UFormat"/>
+		<implements name="android/icu/util/Freezable"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="cloneAsThawed()Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="format(Landroid/icu/text/TimeZoneFormat$Style;Landroid/icu/util/TimeZone;J)Ljava/lang/String;"/>
+		<method name="format(Landroid/icu/text/TimeZoneFormat$Style;Landroid/icu/util/TimeZone;JLandroid/icu/util/Output;)Ljava/lang/String;"/>
+		<method name="formatOffsetISO8601Basic(IZZZ)Ljava/lang/String;"/>
+		<method name="formatOffsetISO8601Extended(IZZZ)Ljava/lang/String;"/>
+		<method name="formatOffsetLocalizedGMT(I)Ljava/lang/String;"/>
+		<method name="formatOffsetShortLocalizedGMT(I)Ljava/lang/String;"/>
+		<method name="freeze()Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="getDefaultParseOptions()Ljava/util/EnumSet;"/>
+		<method name="getGMTOffsetDigits()Ljava/lang/String;"/>
+		<method name="getGMTOffsetPattern(Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;)Ljava/lang/String;"/>
+		<method name="getGMTPattern()Ljava/lang/String;"/>
+		<method name="getGMTZeroFormat()Ljava/lang/String;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="getTimeZoneNames()Landroid/icu/text/TimeZoneNames;"/>
+		<method name="parse(Landroid/icu/text/TimeZoneFormat$Style;Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/util/Output;)Landroid/icu/util/TimeZone;"/>
+		<method name="parse(Landroid/icu/text/TimeZoneFormat$Style;Ljava/lang/String;Ljava/text/ParsePosition;Ljava/util/EnumSet;Landroid/icu/util/Output;)Landroid/icu/util/TimeZone;"/>
+		<method name="parse(Ljava/lang/String;)Landroid/icu/util/TimeZone;"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Landroid/icu/util/TimeZone;"/>
+		<method name="parseOffsetISO8601(Ljava/lang/String;Ljava/text/ParsePosition;)I"/>
+		<method name="parseOffsetLocalizedGMT(Ljava/lang/String;Ljava/text/ParsePosition;)I"/>
+		<method name="parseOffsetShortLocalizedGMT(Ljava/lang/String;Ljava/text/ParsePosition;)I"/>
+		<method name="setDefaultParseOptions(Ljava/util/EnumSet;)Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="setGMTOffsetDigits(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="setGMTOffsetPattern(Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="setGMTPattern(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="setGMTZeroFormat(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat;"/>
+		<method name="setTimeZoneNames(Landroid/icu/text/TimeZoneNames;)Landroid/icu/text/TimeZoneFormat;"/>
+	</class>
+	<class name="android/icu/text/TimeZoneFormat$GMTOffsetPatternType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;"/>
+		<method name="values()[Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;"/>
+		<field name="NEGATIVE_H"/>
+		<field name="NEGATIVE_HM"/>
+		<field name="NEGATIVE_HMS"/>
+		<field name="POSITIVE_H"/>
+		<field name="POSITIVE_HM"/>
+		<field name="POSITIVE_HMS"/>
+	</class>
+	<class name="android/icu/text/TimeZoneFormat$ParseOption" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$ParseOption;"/>
+		<method name="values()[Landroid/icu/text/TimeZoneFormat$ParseOption;"/>
+		<field name="ALL_STYLES"/>
+		<field name="TZ_DATABASE_ABBREVIATIONS"/>
+	</class>
+	<class name="android/icu/text/TimeZoneFormat$Style" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$Style;"/>
+		<method name="values()[Landroid/icu/text/TimeZoneFormat$Style;"/>
+		<field name="EXEMPLAR_LOCATION"/>
+		<field name="GENERIC_LOCATION"/>
+		<field name="GENERIC_LONG"/>
+		<field name="GENERIC_SHORT"/>
+		<field name="ISO_BASIC_FIXED"/>
+		<field name="ISO_BASIC_FULL"/>
+		<field name="ISO_BASIC_LOCAL_FIXED"/>
+		<field name="ISO_BASIC_LOCAL_FULL"/>
+		<field name="ISO_BASIC_LOCAL_SHORT"/>
+		<field name="ISO_BASIC_SHORT"/>
+		<field name="ISO_EXTENDED_FIXED"/>
+		<field name="ISO_EXTENDED_FULL"/>
+		<field name="ISO_EXTENDED_LOCAL_FIXED"/>
+		<field name="ISO_EXTENDED_LOCAL_FULL"/>
+		<field name="LOCALIZED_GMT"/>
+		<field name="LOCALIZED_GMT_SHORT"/>
+		<field name="SPECIFIC_LONG"/>
+		<field name="SPECIFIC_SHORT"/>
+		<field name="ZONE_ID"/>
+		<field name="ZONE_ID_SHORT"/>
+	</class>
+	<class name="android/icu/text/TimeZoneFormat$TimeType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneFormat$TimeType;"/>
+		<method name="values()[Landroid/icu/text/TimeZoneFormat$TimeType;"/>
+		<field name="DAYLIGHT"/>
+		<field name="STANDARD"/>
+		<field name="UNKNOWN"/>
+	</class>
+	<class name="android/icu/text/TimeZoneNames" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="getAvailableMetaZoneIDs()Ljava/util/Set;"/>
+		<method name="getAvailableMetaZoneIDs(Ljava/lang/String;)Ljava/util/Set;"/>
+		<method name="getDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;J)Ljava/lang/String;"/>
+		<method name="getExemplarLocationName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/text/TimeZoneNames;"/>
+		<method name="getMetaZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;"/>
+		<method name="getMetaZoneID(Ljava/lang/String;J)Ljava/lang/String;"/>
+		<method name="getReferenceZoneID(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getTZDBInstance(Landroid/icu/util/ULocale;)Landroid/icu/text/TimeZoneNames;"/>
+		<method name="getTimeZoneDisplayName(Ljava/lang/String;Landroid/icu/text/TimeZoneNames$NameType;)Ljava/lang/String;"/>
+	</class>
+	<class name="android/icu/text/TimeZoneNames$NameType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/TimeZoneNames$NameType;"/>
+		<method name="values()[Landroid/icu/text/TimeZoneNames$NameType;"/>
+		<field name="EXEMPLAR_LOCATION"/>
+		<field name="LONG_DAYLIGHT"/>
+		<field name="LONG_GENERIC"/>
+		<field name="LONG_STANDARD"/>
+		<field name="SHORT_DAYLIGHT"/>
+		<field name="SHORT_GENERIC"/>
+		<field name="SHORT_STANDARD"/>
+	</class>
+	<class name="android/icu/text/Transliterator" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="createFromRules(Ljava/lang/String;Ljava/lang/String;I)Landroid/icu/text/Transliterator;"/>
+		<method name="filteredTransliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;Z)V"/>
+		<method name="finishTransliteration(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;)V"/>
+		<method name="getAvailableIDs()Ljava/util/Enumeration;"/>
+		<method name="getAvailableSources()Ljava/util/Enumeration;"/>
+		<method name="getAvailableTargets(Ljava/lang/String;)Ljava/util/Enumeration;"/>
+		<method name="getAvailableVariants(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Enumeration;"/>
+		<method name="getDisplayName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getElements()[Landroid/icu/text/Transliterator;"/>
+		<method name="getFilter()Landroid/icu/text/UnicodeFilter;"/>
+		<method name="getID()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Landroid/icu/text/Transliterator;"/>
+		<method name="getInstance(Ljava/lang/String;I)Landroid/icu/text/Transliterator;"/>
+		<method name="getInverse()Landroid/icu/text/Transliterator;"/>
+		<method name="getMaximumContextLength()I"/>
+		<method name="getSourceSet()Landroid/icu/text/UnicodeSet;"/>
+		<method name="getTargetSet()Landroid/icu/text/UnicodeSet;"/>
+		<method name="setFilter(Landroid/icu/text/UnicodeFilter;)V"/>
+		<method name="toRules(Z)Ljava/lang/String;"/>
+		<method name="transliterate(Landroid/icu/text/Replaceable;)V"/>
+		<method name="transliterate(Landroid/icu/text/Replaceable;II)I"/>
+		<method name="transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;)V"/>
+		<method name="transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;I)V"/>
+		<method name="transliterate(Landroid/icu/text/Replaceable;Landroid/icu/text/Transliterator$Position;Ljava/lang/String;)V"/>
+		<method name="transliterate(Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="FORWARD"/>
+		<field name="REVERSE"/>
+	</class>
+	<class name="android/icu/text/Transliterator$Position" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="&lt;init>(Landroid/icu/text/Transliterator$Position;)V"/>
+		<method name="set(Landroid/icu/text/Transliterator$Position;)V"/>
+		<method name="validate(I)V"/>
+		<field name="contextLimit"/>
+		<field name="contextStart"/>
+		<field name="limit"/>
+		<field name="start"/>
+	</class>
+	<class name="android/icu/text/UCharacterIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="current()I"/>
+		<method name="currentCodePoint()I"/>
+		<method name="getCharacterIterator()Ljava/text/CharacterIterator;"/>
+		<method name="getIndex()I"/>
+		<method name="getInstance(Landroid/icu/text/Replaceable;)Landroid/icu/text/UCharacterIterator;"/>
+		<method name="getInstance(Ljava/lang/String;)Landroid/icu/text/UCharacterIterator;"/>
+		<method name="getInstance(Ljava/lang/StringBuffer;)Landroid/icu/text/UCharacterIterator;"/>
+		<method name="getInstance(Ljava/text/CharacterIterator;)Landroid/icu/text/UCharacterIterator;"/>
+		<method name="getInstance([C)Landroid/icu/text/UCharacterIterator;"/>
+		<method name="getInstance([CII)Landroid/icu/text/UCharacterIterator;"/>
+		<method name="getLength()I"/>
+		<method name="getText()Ljava/lang/String;"/>
+		<method name="getText([C)I"/>
+		<method name="getText([CI)I"/>
+		<method name="moveCodePointIndex(I)I"/>
+		<method name="moveIndex(I)I"/>
+		<method name="next()I"/>
+		<method name="nextCodePoint()I"/>
+		<method name="previous()I"/>
+		<method name="previousCodePoint()I"/>
+		<method name="setIndex(I)V"/>
+		<method name="setToLimit()V"/>
+		<method name="setToStart()V"/>
+		<field name="DONE"/>
+	</class>
+	<class name="android/icu/text/UFormat" since="24">
+		<extends name="java/text/Format"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/icu/text/UnicodeFilter" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/text/UnicodeMatcher"/>
+		<method name="contains(I)Z"/>
+	</class>
+	<class name="android/icu/text/UnicodeMatcher" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="addMatchSetTo(Landroid/icu/text/UnicodeSet;)V"/>
+		<method name="matches(Landroid/icu/text/Replaceable;[IIZ)I"/>
+		<method name="matchesIndexValue(I)Z"/>
+		<method name="toPattern(Z)Ljava/lang/String;"/>
+		<field name="ETHER"/>
+		<field name="U_MATCH"/>
+		<field name="U_MISMATCH"/>
+		<field name="U_PARTIAL_MATCH"/>
+	</class>
+	<class name="android/icu/text/UnicodeSet" since="24">
+		<extends name="android/icu/text/UnicodeFilter"/>
+		<implements name="android/icu/util/Freezable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/lang/Iterable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/icu/text/UnicodeSet;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/text/SymbolTable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/ParsePosition;Landroid/icu/text/SymbolTable;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+		<method name="&lt;init>([I)V"/>
+		<method name="_generatePattern(Ljava/lang/StringBuffer;Z)Ljava/lang/StringBuffer;"/>
+		<method name="_generatePattern(Ljava/lang/StringBuffer;ZZ)Ljava/lang/StringBuffer;"/>
+		<method name="add(I)Landroid/icu/text/UnicodeSet;"/>
+		<method name="add(II)Landroid/icu/text/UnicodeSet;"/>
+		<method name="add(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="add(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="addAll(II)Landroid/icu/text/UnicodeSet;"/>
+		<method name="addAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="addAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="addAll(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="addAll([Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="addAllTo(Ljava/util/Collection;)Ljava/util/Collection;"/>
+		<method name="applyIntPropertyValue(II)Landroid/icu/text/UnicodeSet;"/>
+		<method name="applyPattern(Ljava/lang/String;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="applyPattern(Ljava/lang/String;I)Landroid/icu/text/UnicodeSet;"/>
+		<method name="applyPattern(Ljava/lang/String;Z)Landroid/icu/text/UnicodeSet;"/>
+		<method name="applyPropertyAlias(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="applyPropertyAlias(Ljava/lang/String;Ljava/lang/String;Landroid/icu/text/SymbolTable;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="charAt(I)I"/>
+		<method name="clear()Landroid/icu/text/UnicodeSet;"/>
+		<method name="cloneAsThawed()Landroid/icu/text/UnicodeSet;"/>
+		<method name="closeOver(I)Landroid/icu/text/UnicodeSet;"/>
+		<method name="compact()Landroid/icu/text/UnicodeSet;"/>
+		<method name="compareTo(Landroid/icu/text/UnicodeSet;)I"/>
+		<method name="compareTo(Landroid/icu/text/UnicodeSet;Landroid/icu/text/UnicodeSet$ComparisonStyle;)I"/>
+		<method name="compareTo(Ljava/lang/Iterable;)I"/>
+		<method name="complement()Landroid/icu/text/UnicodeSet;"/>
+		<method name="complement(I)Landroid/icu/text/UnicodeSet;"/>
+		<method name="complement(II)Landroid/icu/text/UnicodeSet;"/>
+		<method name="complement(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="complementAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="complementAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="contains(II)Z"/>
+		<method name="contains(Ljava/lang/CharSequence;)Z"/>
+		<method name="containsAll(Landroid/icu/text/UnicodeSet;)Z"/>
+		<method name="containsAll(Ljava/lang/Iterable;)Z"/>
+		<method name="containsAll(Ljava/lang/String;)Z"/>
+		<method name="containsNone(II)Z"/>
+		<method name="containsNone(Landroid/icu/text/UnicodeSet;)Z"/>
+		<method name="containsNone(Ljava/lang/CharSequence;)Z"/>
+		<method name="containsNone(Ljava/lang/Iterable;)Z"/>
+		<method name="containsSome(II)Z"/>
+		<method name="containsSome(Landroid/icu/text/UnicodeSet;)Z"/>
+		<method name="containsSome(Ljava/lang/CharSequence;)Z"/>
+		<method name="containsSome(Ljava/lang/Iterable;)Z"/>
+		<method name="freeze()Landroid/icu/text/UnicodeSet;"/>
+		<method name="from(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="fromAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="getRangeCount()I"/>
+		<method name="getRangeEnd(I)I"/>
+		<method name="getRangeStart(I)I"/>
+		<method name="indexOf(I)I"/>
+		<method name="isEmpty()Z"/>
+		<method name="ranges()Ljava/lang/Iterable;"/>
+		<method name="remove(I)Landroid/icu/text/UnicodeSet;"/>
+		<method name="remove(II)Landroid/icu/text/UnicodeSet;"/>
+		<method name="remove(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="removeAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="removeAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="removeAll(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="removeAllStrings()Landroid/icu/text/UnicodeSet;"/>
+		<method name="retain(I)Landroid/icu/text/UnicodeSet;"/>
+		<method name="retain(II)Landroid/icu/text/UnicodeSet;"/>
+		<method name="retain(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="retainAll(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="retainAll(Ljava/lang/CharSequence;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="retainAll(Ljava/lang/Iterable;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="set(II)Landroid/icu/text/UnicodeSet;"/>
+		<method name="set(Landroid/icu/text/UnicodeSet;)Landroid/icu/text/UnicodeSet;"/>
+		<method name="size()I"/>
+		<method name="span(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;)I"/>
+		<method name="span(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSet$SpanCondition;)I"/>
+		<method name="spanBack(Ljava/lang/CharSequence;ILandroid/icu/text/UnicodeSet$SpanCondition;)I"/>
+		<method name="spanBack(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSet$SpanCondition;)I"/>
+		<method name="strings()Ljava/util/Collection;"/>
+		<field name="ADD_CASE_MAPPINGS"/>
+		<field name="ALL_CODE_POINTS"/>
+		<field name="CASE"/>
+		<field name="CASE_INSENSITIVE"/>
+		<field name="EMPTY"/>
+		<field name="IGNORE_SPACE"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_VALUE"/>
+	</class>
+	<class name="android/icu/text/UnicodeSet$ComparisonStyle" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSet$ComparisonStyle;"/>
+		<method name="values()[Landroid/icu/text/UnicodeSet$ComparisonStyle;"/>
+		<field name="LEXICOGRAPHIC"/>
+		<field name="LONGER_FIRST"/>
+		<field name="SHORTER_FIRST"/>
+	</class>
+	<class name="android/icu/text/UnicodeSet$EntryRange" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="codepoint"/>
+		<field name="codepointEnd"/>
+	</class>
+	<class name="android/icu/text/UnicodeSet$SpanCondition" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSet$SpanCondition;"/>
+		<method name="values()[Landroid/icu/text/UnicodeSet$SpanCondition;"/>
+		<field name="CONDITION_COUNT"/>
+		<field name="CONTAINED"/>
+		<field name="NOT_CONTAINED"/>
+		<field name="SIMPLE"/>
+	</class>
+	<class name="android/icu/text/UnicodeSetIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/icu/text/UnicodeSet;)V"/>
+		<method name="getString()Ljava/lang/String;"/>
+		<method name="next()Z"/>
+		<method name="nextRange()Z"/>
+		<method name="reset()V"/>
+		<method name="reset(Landroid/icu/text/UnicodeSet;)V"/>
+		<field name="IS_STRING"/>
+		<field name="codepoint"/>
+		<field name="codepointEnd"/>
+		<field name="string"/>
+	</class>
+	<class name="android/icu/text/UnicodeSetSpanner" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/icu/text/UnicodeSet;)V"/>
+		<method name="countIn(Ljava/lang/CharSequence;)I"/>
+		<method name="countIn(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;)I"/>
+		<method name="countIn(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;Landroid/icu/text/UnicodeSet$SpanCondition;)I"/>
+		<method name="deleteFrom(Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="deleteFrom(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSet$SpanCondition;)Ljava/lang/String;"/>
+		<method name="getUnicodeSet()Landroid/icu/text/UnicodeSet;"/>
+		<method name="replaceFrom(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="replaceFrom(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;)Ljava/lang/String;"/>
+		<method name="replaceFrom(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$CountMethod;Landroid/icu/text/UnicodeSet$SpanCondition;)Ljava/lang/String;"/>
+		<method name="trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="trim(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$TrimOption;)Ljava/lang/CharSequence;"/>
+		<method name="trim(Ljava/lang/CharSequence;Landroid/icu/text/UnicodeSetSpanner$TrimOption;Landroid/icu/text/UnicodeSet$SpanCondition;)Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="android/icu/text/UnicodeSetSpanner$CountMethod" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSetSpanner$CountMethod;"/>
+		<method name="values()[Landroid/icu/text/UnicodeSetSpanner$CountMethod;"/>
+		<field name="MIN_ELEMENTS"/>
+		<field name="WHOLE_SPAN"/>
+	</class>
+	<class name="android/icu/text/UnicodeSetSpanner$TrimOption" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/text/UnicodeSetSpanner$TrimOption;"/>
+		<method name="values()[Landroid/icu/text/UnicodeSetSpanner$TrimOption;"/>
+		<field name="BOTH"/>
+		<field name="LEADING"/>
+		<field name="TRAILING"/>
+	</class>
+	<class name="android/icu/util/BuddhistCalendar" since="24">
+		<extends name="android/icu/util/GregorianCalendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<field name="BE"/>
+	</class>
+	<class name="android/icu/util/Calendar" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="add(II)V"/>
+		<method name="after(Ljava/lang/Object;)Z"/>
+		<method name="before(Ljava/lang/Object;)Z"/>
+		<method name="clear()V"/>
+		<method name="clear(I)V"/>
+		<method name="compareTo(Landroid/icu/util/Calendar;)I"/>
+		<method name="complete()V"/>
+		<method name="computeFields()V"/>
+		<method name="computeGregorianFields(I)V"/>
+		<method name="computeGregorianMonthStart(II)I"/>
+		<method name="computeJulianDay()I"/>
+		<method name="computeMillisInDay()I" deprecated="26"/>
+		<method name="computeTime()V"/>
+		<method name="computeZoneOffset(JI)I" deprecated="26"/>
+		<method name="fieldDifference(Ljava/util/Date;I)I"/>
+		<method name="fieldName(I)Ljava/lang/String;"/>
+		<method name="floorDivide(II)I"/>
+		<method name="floorDivide(II[I)I"/>
+		<method name="floorDivide(JI[I)I"/>
+		<method name="floorDivide(JJ)J"/>
+		<method name="get(I)I"/>
+		<method name="getActualMaximum(I)I"/>
+		<method name="getActualMinimum(I)I"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getDateTimeFormat(IILandroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDateTimeFormat(IILjava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getFieldCount()I"/>
+		<method name="getFieldResolutionTable()[[[I"/>
+		<method name="getFirstDayOfWeek()I"/>
+		<method name="getGreatestMinimum(I)I"/>
+		<method name="getGregorianDayOfMonth()I"/>
+		<method name="getGregorianDayOfYear()I"/>
+		<method name="getGregorianMonth()I"/>
+		<method name="getGregorianYear()I"/>
+		<method name="getInstance()Landroid/icu/util/Calendar;"/>
+		<method name="getInstance(Landroid/icu/util/TimeZone;)Landroid/icu/util/Calendar;"/>
+		<method name="getInstance(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;"/>
+		<method name="getInstance(Landroid/icu/util/TimeZone;Ljava/util/Locale;)Landroid/icu/util/Calendar;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Calendar;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/util/Calendar;"/>
+		<method name="getKeywordValuesForLocale(Ljava/lang/String;Landroid/icu/util/ULocale;Z)[Ljava/lang/String;"/>
+		<method name="getLeastMaximum(I)I"/>
+		<method name="getLimit(II)I"/>
+		<method name="getMaximum(I)I"/>
+		<method name="getMinimalDaysInFirstWeek()I"/>
+		<method name="getMinimum(I)I"/>
+		<method name="getRepeatedWallTimeOption()I"/>
+		<method name="getSkippedWallTimeOption()I"/>
+		<method name="getStamp(I)I"/>
+		<method name="getTime()Ljava/util/Date;"/>
+		<method name="getTimeInMillis()J"/>
+		<method name="getTimeZone()Landroid/icu/util/TimeZone;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="getWeekData()Landroid/icu/util/Calendar$WeekData;"/>
+		<method name="getWeekDataForRegion(Ljava/lang/String;)Landroid/icu/util/Calendar$WeekData;"/>
+		<method name="gregorianMonthLength(II)I"/>
+		<method name="gregorianPreviousMonthLength(II)I"/>
+		<method name="handleComputeFields(I)V"/>
+		<method name="handleComputeJulianDay(I)I"/>
+		<method name="handleComputeMonthStart(IIZ)I"/>
+		<method name="handleCreateFields()[I"/>
+		<method name="handleGetDateFormat(Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+		<method name="handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="handleGetDateFormat(Ljava/lang/String;Ljava/util/Locale;)Landroid/icu/text/DateFormat;"/>
+		<method name="handleGetExtendedYear()I"/>
+		<method name="handleGetLimit(II)I"/>
+		<method name="handleGetMonthLength(II)I"/>
+		<method name="handleGetYearLength(I)I"/>
+		<method name="internalGet(I)I"/>
+		<method name="internalGet(II)I"/>
+		<method name="internalGetTimeInMillis()J"/>
+		<method name="internalSet(II)V"/>
+		<method name="isEquivalentTo(Landroid/icu/util/Calendar;)Z"/>
+		<method name="isGregorianLeapYear(I)Z"/>
+		<method name="isLenient()Z"/>
+		<method name="isSet(I)Z"/>
+		<method name="isWeekend()Z"/>
+		<method name="isWeekend(Ljava/util/Date;)Z"/>
+		<method name="julianDayToDayOfWeek(I)I"/>
+		<method name="julianDayToMillis(I)J"/>
+		<method name="millisToJulianDay(J)I"/>
+		<method name="newerField(II)I"/>
+		<method name="newestStamp(III)I"/>
+		<method name="pinField(I)V"/>
+		<method name="prepareGetActual(IZ)V"/>
+		<method name="resolveFields([[[I)I"/>
+		<method name="roll(II)V"/>
+		<method name="roll(IZ)V"/>
+		<method name="set(II)V"/>
+		<method name="set(III)V"/>
+		<method name="set(IIIII)V"/>
+		<method name="set(IIIIII)V"/>
+		<method name="setFirstDayOfWeek(I)V"/>
+		<method name="setLenient(Z)V"/>
+		<method name="setMinimalDaysInFirstWeek(I)V"/>
+		<method name="setRepeatedWallTimeOption(I)V"/>
+		<method name="setSkippedWallTimeOption(I)V"/>
+		<method name="setTime(Ljava/util/Date;)V"/>
+		<method name="setTimeInMillis(J)V"/>
+		<method name="setTimeZone(Landroid/icu/util/TimeZone;)V"/>
+		<method name="setWeekData(Landroid/icu/util/Calendar$WeekData;)Landroid/icu/util/Calendar;"/>
+		<method name="validateField(I)V"/>
+		<method name="validateField(III)V"/>
+		<method name="validateFields()V"/>
+		<method name="weekNumber(II)I"/>
+		<method name="weekNumber(III)I"/>
+		<field name="AM"/>
+		<field name="AM_PM"/>
+		<field name="APRIL"/>
+		<field name="AUGUST"/>
+		<field name="BASE_FIELD_COUNT" deprecated="26"/>
+		<field name="DATE"/>
+		<field name="DAY_OF_MONTH"/>
+		<field name="DAY_OF_WEEK"/>
+		<field name="DAY_OF_WEEK_IN_MONTH"/>
+		<field name="DAY_OF_YEAR"/>
+		<field name="DECEMBER"/>
+		<field name="DOW_LOCAL"/>
+		<field name="DST_OFFSET"/>
+		<field name="EPOCH_JULIAN_DAY"/>
+		<field name="ERA"/>
+		<field name="EXTENDED_YEAR"/>
+		<field name="FEBRUARY"/>
+		<field name="FRIDAY"/>
+		<field name="GREATEST_MINIMUM"/>
+		<field name="HOUR"/>
+		<field name="HOUR_OF_DAY"/>
+		<field name="INTERNALLY_SET"/>
+		<field name="IS_LEAP_MONTH"/>
+		<field name="JANUARY"/>
+		<field name="JAN_1_1_JULIAN_DAY"/>
+		<field name="JULIAN_DAY"/>
+		<field name="JULY"/>
+		<field name="JUNE"/>
+		<field name="LEAST_MAXIMUM"/>
+		<field name="MARCH"/>
+		<field name="MAXIMUM"/>
+		<field name="MAX_DATE"/>
+		<field name="MAX_FIELD_COUNT" deprecated="26"/>
+		<field name="MAX_JULIAN"/>
+		<field name="MAX_MILLIS"/>
+		<field name="MAY"/>
+		<field name="MILLISECOND"/>
+		<field name="MILLISECONDS_IN_DAY"/>
+		<field name="MINIMUM"/>
+		<field name="MINIMUM_USER_STAMP"/>
+		<field name="MINUTE"/>
+		<field name="MIN_DATE"/>
+		<field name="MIN_JULIAN"/>
+		<field name="MIN_MILLIS"/>
+		<field name="MONDAY"/>
+		<field name="MONTH"/>
+		<field name="NOVEMBER"/>
+		<field name="OCTOBER"/>
+		<field name="ONE_DAY"/>
+		<field name="ONE_HOUR"/>
+		<field name="ONE_MINUTE"/>
+		<field name="ONE_SECOND"/>
+		<field name="ONE_WEEK"/>
+		<field name="PM"/>
+		<field name="RESOLVE_REMAP"/>
+		<field name="SATURDAY"/>
+		<field name="SECOND"/>
+		<field name="SEPTEMBER"/>
+		<field name="SUNDAY"/>
+		<field name="THURSDAY"/>
+		<field name="TUESDAY"/>
+		<field name="UNDECIMBER"/>
+		<field name="UNSET"/>
+		<field name="WALLTIME_FIRST"/>
+		<field name="WALLTIME_LAST"/>
+		<field name="WALLTIME_NEXT_VALID"/>
+		<field name="WEDNESDAY"/>
+		<field name="WEEK_OF_MONTH"/>
+		<field name="WEEK_OF_YEAR"/>
+		<field name="YEAR"/>
+		<field name="YEAR_WOY"/>
+		<field name="ZONE_OFFSET"/>
+	</class>
+	<class name="android/icu/util/Calendar$WeekData" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<field name="firstDayOfWeek"/>
+		<field name="minimalDaysInFirstWeek"/>
+		<field name="weekendCease"/>
+		<field name="weekendCeaseMillis"/>
+		<field name="weekendOnset"/>
+		<field name="weekendOnsetMillis"/>
+	</class>
+	<class name="android/icu/util/ChineseCalendar" since="24">
+		<extends name="android/icu/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="&lt;init>(IIIII)V"/>
+		<method name="&lt;init>(IIIIIII)V"/>
+		<method name="&lt;init>(IIIIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="handleGetDateFormat(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Landroid/icu/text/DateFormat;"/>
+	</class>
+	<class name="android/icu/util/CopticCalendar" since="24">
+		<extends name="android/icu/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<field name="AMSHIR"/>
+		<field name="BABA"/>
+		<field name="BARAMHAT"/>
+		<field name="BARAMOUDA"/>
+		<field name="BASHANS"/>
+		<field name="EPEP"/>
+		<field name="HATOR"/>
+		<field name="KIAHK"/>
+		<field name="MESRA"/>
+		<field name="NASIE"/>
+		<field name="PAONA"/>
+		<field name="TOBA"/>
+		<field name="TOUT"/>
+	</class>
+	<class name="android/icu/util/Currency" since="24">
+		<extends name="android/icu/util/MeasureUnit"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="fromJavaCurrency(Ljava/util/Currency;)Landroid/icu/util/Currency;" since="29"/>
+		<method name="getAvailableCurrencies()Ljava/util/Set;"/>
+		<method name="getAvailableCurrencyCodes(Landroid/icu/util/ULocale;Ljava/util/Date;)[Ljava/lang/String;"/>
+		<method name="getAvailableCurrencyCodes(Ljava/util/Locale;Ljava/util/Date;)[Ljava/lang/String;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getAvailableULocales()[Landroid/icu/util/ULocale;"/>
+		<method name="getCurrencyCode()Ljava/lang/String;"/>
+		<method name="getDefaultFractionDigits()I"/>
+		<method name="getDefaultFractionDigits(Landroid/icu/util/Currency$CurrencyUsage;)I"/>
+		<method name="getDisplayName()Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/Currency;"/>
+		<method name="getInstance(Ljava/lang/String;)Landroid/icu/util/Currency;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/icu/util/Currency;"/>
+		<method name="getKeywordValuesForLocale(Ljava/lang/String;Landroid/icu/util/ULocale;Z)[Ljava/lang/String;"/>
+		<method name="getName(Landroid/icu/util/ULocale;ILjava/lang/String;[Z)Ljava/lang/String;"/>
+		<method name="getName(Landroid/icu/util/ULocale;I[Z)Ljava/lang/String;"/>
+		<method name="getName(Ljava/util/Locale;ILjava/lang/String;[Z)Ljava/lang/String;"/>
+		<method name="getName(Ljava/util/Locale;I[Z)Ljava/lang/String;"/>
+		<method name="getNumericCode()I"/>
+		<method name="getRoundingIncrement()D"/>
+		<method name="getRoundingIncrement(Landroid/icu/util/Currency$CurrencyUsage;)D"/>
+		<method name="getSymbol()Ljava/lang/String;"/>
+		<method name="getSymbol(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getSymbol(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="isAvailable(Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)Z"/>
+		<method name="toJavaCurrency()Ljava/util/Currency;" since="29"/>
+		<field name="LONG_NAME"/>
+		<field name="NARROW_SYMBOL_NAME" since="30"/>
+		<field name="PLURAL_LONG_NAME"/>
+		<field name="SYMBOL_NAME"/>
+	</class>
+	<class name="android/icu/util/Currency$CurrencyUsage" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/Currency$CurrencyUsage;"/>
+		<method name="values()[Landroid/icu/util/Currency$CurrencyUsage;"/>
+		<field name="CASH"/>
+		<field name="STANDARD"/>
+	</class>
+	<class name="android/icu/util/CurrencyAmount" since="24">
+		<extends name="android/icu/util/Measure"/>
+		<method name="&lt;init>(DLandroid/icu/util/Currency;)V"/>
+		<method name="&lt;init>(DLjava/util/Currency;)V" since="29"/>
+		<method name="&lt;init>(Ljava/lang/Number;Landroid/icu/util/Currency;)V"/>
+		<method name="&lt;init>(Ljava/lang/Number;Ljava/util/Currency;)V" since="29"/>
+		<method name="getCurrency()Landroid/icu/util/Currency;"/>
+	</class>
+	<class name="android/icu/util/DateInterval" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(JJ)V"/>
+		<method name="getFromDate()J"/>
+		<method name="getToDate()J"/>
+	</class>
+	<class name="android/icu/util/EthiopicCalendar" since="26">
+		<extends name="android/icu/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="isAmeteAlemEra()Z"/>
+		<method name="setAmeteAlemEra(Z)V"/>
+		<field name="GENBOT"/>
+		<field name="HAMLE"/>
+		<field name="HEDAR"/>
+		<field name="MEGABIT"/>
+		<field name="MESKEREM"/>
+		<field name="MIAZIA"/>
+		<field name="NEHASSE"/>
+		<field name="PAGUMEN"/>
+		<field name="SENE"/>
+		<field name="TAHSAS"/>
+		<field name="TEKEMT"/>
+		<field name="TER"/>
+		<field name="YEKATIT"/>
+	</class>
+	<class name="android/icu/util/Freezable" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="cloneAsThawed()Ljava/lang/Object;"/>
+		<method name="freeze()Ljava/lang/Object;"/>
+		<method name="isFrozen()Z"/>
+	</class>
+	<class name="android/icu/util/GregorianCalendar" since="24">
+		<extends name="android/icu/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIII)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="getGregorianChange()Ljava/util/Date;"/>
+		<method name="isLeapYear(I)Z"/>
+		<method name="setGregorianChange(Ljava/util/Date;)V"/>
+		<field name="AD"/>
+		<field name="BC"/>
+		<field name="invertGregorian"/>
+		<field name="isGregorian"/>
+	</class>
+	<class name="android/icu/util/HebrewCalendar" since="24">
+		<extends name="android/icu/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<field name="ADAR"/>
+		<field name="ADAR_1"/>
+		<field name="AV"/>
+		<field name="ELUL"/>
+		<field name="HESHVAN"/>
+		<field name="IYAR"/>
+		<field name="KISLEV"/>
+		<field name="NISAN"/>
+		<field name="SHEVAT"/>
+		<field name="SIVAN"/>
+		<field name="TAMUZ"/>
+		<field name="TEVET"/>
+		<field name="TISHRI"/>
+	</class>
+	<class name="android/icu/util/ICUUncheckedIOException" since="24">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/icu/util/IllformedLocaleException" since="28">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getErrorIndex()I"/>
+	</class>
+	<class name="android/icu/util/IndianCalendar" since="24">
+		<extends name="android/icu/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<field name="AGRAHAYANA"/>
+		<field name="ASADHA"/>
+		<field name="ASVINA"/>
+		<field name="BHADRA"/>
+		<field name="CHAITRA"/>
+		<field name="IE"/>
+		<field name="JYAISTHA"/>
+		<field name="KARTIKA"/>
+		<field name="MAGHA"/>
+		<field name="PAUSA"/>
+		<field name="PHALGUNA"/>
+		<field name="SRAVANA"/>
+		<field name="VAISAKHA"/>
+	</class>
+	<class name="android/icu/util/IslamicCalendar" since="24">
+		<extends name="android/icu/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="getCalculationType()Landroid/icu/util/IslamicCalendar$CalculationType;"/>
+		<method name="setCalculationType(Landroid/icu/util/IslamicCalendar$CalculationType;)V"/>
+		<field name="DHU_AL_HIJJAH"/>
+		<field name="DHU_AL_QIDAH"/>
+		<field name="JUMADA_1"/>
+		<field name="JUMADA_2"/>
+		<field name="MUHARRAM"/>
+		<field name="RABI_1"/>
+		<field name="RABI_2"/>
+		<field name="RAJAB"/>
+		<field name="RAMADAN"/>
+		<field name="SAFAR"/>
+		<field name="SHABAN"/>
+		<field name="SHAWWAL"/>
+	</class>
+	<class name="android/icu/util/IslamicCalendar$CalculationType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/IslamicCalendar$CalculationType;"/>
+		<method name="values()[Landroid/icu/util/IslamicCalendar$CalculationType;"/>
+		<field name="ISLAMIC"/>
+		<field name="ISLAMIC_CIVIL"/>
+		<field name="ISLAMIC_TBLA"/>
+		<field name="ISLAMIC_UMALQURA"/>
+	</class>
+	<class name="android/icu/util/JapaneseCalendar" since="24">
+		<extends name="android/icu/util/GregorianCalendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<field name="CURRENT_ERA" deprecated="29" removed="30"/>
+		<field name="HEISEI"/>
+		<field name="MEIJI"/>
+		<field name="REIWA" since="30"/>
+		<field name="SHOWA"/>
+		<field name="TAISHO"/>
+	</class>
+	<class name="android/icu/util/LocaleData" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getCLDRVersion()Landroid/icu/util/VersionInfo;"/>
+		<method name="getDelimiter(I)Ljava/lang/String;"/>
+		<method name="getInstance()Landroid/icu/util/LocaleData;"/>
+		<method name="getInstance(Landroid/icu/util/ULocale;)Landroid/icu/util/LocaleData;"/>
+		<method name="getMeasurementSystem(Landroid/icu/util/ULocale;)Landroid/icu/util/LocaleData$MeasurementSystem;"/>
+		<method name="getNoSubstitute()Z"/>
+		<method name="getPaperSize(Landroid/icu/util/ULocale;)Landroid/icu/util/LocaleData$PaperSize;"/>
+		<method name="setNoSubstitute(Z)V"/>
+		<field name="ALT_QUOTATION_END"/>
+		<field name="ALT_QUOTATION_START"/>
+		<field name="QUOTATION_END"/>
+		<field name="QUOTATION_START"/>
+	</class>
+	<class name="android/icu/util/LocaleData$MeasurementSystem" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="SI"/>
+		<field name="UK"/>
+		<field name="US"/>
+	</class>
+	<class name="android/icu/util/LocaleData$PaperSize" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getHeight()I"/>
+		<method name="getWidth()I"/>
+	</class>
+	<class name="android/icu/util/Measure" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Number;Landroid/icu/util/MeasureUnit;)V"/>
+		<method name="getNumber()Ljava/lang/Number;"/>
+		<method name="getUnit()Landroid/icu/util/MeasureUnit;"/>
+	</class>
+	<class name="android/icu/util/MeasureUnit" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="getAvailable()Ljava/util/Set;"/>
+		<method name="getAvailable(Ljava/lang/String;)Ljava/util/Set;"/>
+		<method name="getAvailableTypes()Ljava/util/Set;"/>
+		<method name="getSubtype()Ljava/lang/String;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<field name="ACRE"/>
+		<field name="ACRE_FOOT"/>
+		<field name="AMPERE"/>
+		<field name="ARC_MINUTE"/>
+		<field name="ARC_SECOND"/>
+		<field name="ASTRONOMICAL_UNIT"/>
+		<field name="ATMOSPHERE" since="30"/>
+		<field name="BIT"/>
+		<field name="BUSHEL"/>
+		<field name="BYTE"/>
+		<field name="CALORIE"/>
+		<field name="CARAT"/>
+		<field name="CELSIUS"/>
+		<field name="CENTILITER"/>
+		<field name="CENTIMETER"/>
+		<field name="CENTURY" since="26"/>
+		<field name="CUBIC_CENTIMETER"/>
+		<field name="CUBIC_FOOT"/>
+		<field name="CUBIC_INCH"/>
+		<field name="CUBIC_KILOMETER"/>
+		<field name="CUBIC_METER"/>
+		<field name="CUBIC_MILE"/>
+		<field name="CUBIC_YARD"/>
+		<field name="CUP"/>
+		<field name="CUP_METRIC" since="26"/>
+		<field name="DAY"/>
+		<field name="DECADE" since="31"/>
+		<field name="DECILITER"/>
+		<field name="DECIMETER"/>
+		<field name="DEGREE"/>
+		<field name="DOT_PER_CENTIMETER" since="31"/>
+		<field name="DOT_PER_INCH" since="31"/>
+		<field name="EM" since="31"/>
+		<field name="FAHRENHEIT"/>
+		<field name="FATHOM"/>
+		<field name="FLUID_OUNCE"/>
+		<field name="FOODCALORIE"/>
+		<field name="FOOT"/>
+		<field name="FURLONG"/>
+		<field name="GALLON"/>
+		<field name="GALLON_IMPERIAL" since="28"/>
+		<field name="GENERIC_TEMPERATURE" since="26"/>
+		<field name="GIGABIT"/>
+		<field name="GIGABYTE"/>
+		<field name="GIGAHERTZ"/>
+		<field name="GIGAWATT"/>
+		<field name="GRAM"/>
+		<field name="G_FORCE"/>
+		<field name="HECTARE"/>
+		<field name="HECTOLITER"/>
+		<field name="HECTOPASCAL"/>
+		<field name="HERTZ"/>
+		<field name="HORSEPOWER"/>
+		<field name="HOUR"/>
+		<field name="INCH"/>
+		<field name="INCH_HG"/>
+		<field name="JOULE"/>
+		<field name="KARAT"/>
+		<field name="KELVIN"/>
+		<field name="KILOBIT"/>
+		<field name="KILOBYTE"/>
+		<field name="KILOCALORIE"/>
+		<field name="KILOGRAM"/>
+		<field name="KILOHERTZ"/>
+		<field name="KILOJOULE"/>
+		<field name="KILOMETER"/>
+		<field name="KILOMETER_PER_HOUR"/>
+		<field name="KILOWATT"/>
+		<field name="KILOWATT_HOUR"/>
+		<field name="KNOT" since="26"/>
+		<field name="LIGHT_YEAR"/>
+		<field name="LITER"/>
+		<field name="LITER_PER_100KILOMETERS" since="26"/>
+		<field name="LITER_PER_KILOMETER"/>
+		<field name="LUX"/>
+		<field name="MEGABIT"/>
+		<field name="MEGABYTE"/>
+		<field name="MEGAHERTZ"/>
+		<field name="MEGALITER"/>
+		<field name="MEGAPIXEL" since="31"/>
+		<field name="MEGAWATT"/>
+		<field name="METER"/>
+		<field name="METER_PER_SECOND"/>
+		<field name="METER_PER_SECOND_SQUARED"/>
+		<field name="METRIC_TON"/>
+		<field name="MICROGRAM"/>
+		<field name="MICROMETER"/>
+		<field name="MICROSECOND"/>
+		<field name="MILE"/>
+		<field name="MILE_PER_GALLON"/>
+		<field name="MILE_PER_GALLON_IMPERIAL" since="28"/>
+		<field name="MILE_PER_HOUR"/>
+		<field name="MILE_SCANDINAVIAN" since="26"/>
+		<field name="MILLIAMPERE"/>
+		<field name="MILLIBAR"/>
+		<field name="MILLIGRAM"/>
+		<field name="MILLIGRAM_PER_DECILITER" since="28"/>
+		<field name="MILLILITER"/>
+		<field name="MILLIMETER"/>
+		<field name="MILLIMETER_OF_MERCURY"/>
+		<field name="MILLIMOLE_PER_LITER" since="28"/>
+		<field name="MILLISECOND"/>
+		<field name="MILLIWATT"/>
+		<field name="MINUTE"/>
+		<field name="MONTH"/>
+		<field name="NANOMETER"/>
+		<field name="NANOSECOND"/>
+		<field name="NAUTICAL_MILE"/>
+		<field name="OHM"/>
+		<field name="OUNCE"/>
+		<field name="OUNCE_TROY"/>
+		<field name="PARSEC"/>
+		<field name="PART_PER_MILLION" since="28"/>
+		<field name="PERCENT" since="30"/>
+		<field name="PERMILLE" since="30"/>
+		<field name="PETABYTE" since="30"/>
+		<field name="PICOMETER"/>
+		<field name="PINT"/>
+		<field name="PINT_METRIC" since="26"/>
+		<field name="PIXEL" since="31"/>
+		<field name="PIXEL_PER_CENTIMETER" since="31"/>
+		<field name="PIXEL_PER_INCH" since="31"/>
+		<field name="POINT" since="29"/>
+		<field name="POUND"/>
+		<field name="POUND_PER_SQUARE_INCH"/>
+		<field name="QUART"/>
+		<field name="RADIAN"/>
+		<field name="REVOLUTION_ANGLE" since="26"/>
+		<field name="SECOND"/>
+		<field name="SQUARE_CENTIMETER"/>
+		<field name="SQUARE_FOOT"/>
+		<field name="SQUARE_INCH"/>
+		<field name="SQUARE_KILOMETER"/>
+		<field name="SQUARE_METER"/>
+		<field name="SQUARE_MILE"/>
+		<field name="SQUARE_YARD"/>
+		<field name="STONE"/>
+		<field name="TABLESPOON"/>
+		<field name="TEASPOON"/>
+		<field name="TERABIT"/>
+		<field name="TERABYTE"/>
+		<field name="TON"/>
+		<field name="VOLT"/>
+		<field name="WATT"/>
+		<field name="WEEK"/>
+		<field name="YARD"/>
+		<field name="YEAR"/>
+	</class>
+	<class name="android/icu/util/Output" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<field name="value"/>
+	</class>
+	<class name="android/icu/util/RangeValueIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="next(Landroid/icu/util/RangeValueIterator$Element;)Z"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="android/icu/util/RangeValueIterator$Element" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="limit"/>
+		<field name="start"/>
+		<field name="value"/>
+	</class>
+	<class name="android/icu/util/TaiwanCalendar" since="24">
+		<extends name="android/icu/util/GregorianCalendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;)V"/>
+		<method name="&lt;init>(Ljava/util/Date;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<field name="BEFORE_MINGUO"/>
+		<field name="MINGUO"/>
+	</class>
+	<class name="android/icu/util/TimeUnit" since="24">
+		<extends name="android/icu/util/MeasureUnit"/>
+		<method name="values()[Landroid/icu/util/TimeUnit;"/>
+	</class>
+	<class name="android/icu/util/TimeZone" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/icu/util/Freezable"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="cloneAsThawed()Landroid/icu/util/TimeZone;"/>
+		<method name="countEquivalentIDs(Ljava/lang/String;)I"/>
+		<method name="freeze()Landroid/icu/util/TimeZone;"/>
+		<method name="getAvailableIDs()[Ljava/lang/String;"/>
+		<method name="getAvailableIDs(I)[Ljava/lang/String;"/>
+		<method name="getAvailableIDs(Landroid/icu/util/TimeZone$SystemTimeZoneType;Ljava/lang/String;Ljava/lang/Integer;)Ljava/util/Set;"/>
+		<method name="getAvailableIDs(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="getCanonicalID(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getCanonicalID(Ljava/lang/String;[Z)Ljava/lang/String;"/>
+		<method name="getDSTSavings()I"/>
+		<method name="getDefault()Landroid/icu/util/TimeZone;"/>
+		<method name="getDisplayName()Ljava/lang/String;"/>
+		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(ZI)Ljava/lang/String;"/>
+		<method name="getDisplayName(ZILandroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getEquivalentID(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<method name="getFrozenTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;"/>
+		<method name="getID()Ljava/lang/String;"/>
+		<method name="getIDForWindowsID(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getOffset(IIIIII)I"/>
+		<method name="getOffset(J)I"/>
+		<method name="getOffset(JZ[I)V"/>
+		<method name="getRawOffset()I"/>
+		<method name="getRegion(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getTZDataVersion()Ljava/lang/String;"/>
+		<method name="getTimeZone(Ljava/lang/String;)Landroid/icu/util/TimeZone;"/>
+		<method name="getTimeZone(Ljava/lang/String;I)Landroid/icu/util/TimeZone;"/>
+		<method name="getWindowsID(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="hasSameRules(Landroid/icu/util/TimeZone;)Z"/>
+		<method name="inDaylightTime(Ljava/util/Date;)Z"/>
+		<method name="observesDaylightTime()Z"/>
+		<method name="setID(Ljava/lang/String;)V"/>
+		<method name="setRawOffset(I)V"/>
+		<method name="useDaylightTime()Z"/>
+		<field name="GENERIC_LOCATION"/>
+		<field name="GMT_ZONE"/>
+		<field name="LONG"/>
+		<field name="LONG_GENERIC"/>
+		<field name="LONG_GMT"/>
+		<field name="SHORT"/>
+		<field name="SHORT_COMMONLY_USED"/>
+		<field name="SHORT_GENERIC"/>
+		<field name="SHORT_GMT"/>
+		<field name="TIMEZONE_ICU" since="26"/>
+		<field name="TIMEZONE_JDK" since="26"/>
+		<field name="UNKNOWN_ZONE"/>
+		<field name="UNKNOWN_ZONE_ID"/>
+	</class>
+	<class name="android/icu/util/TimeZone$SystemTimeZoneType" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/TimeZone$SystemTimeZoneType;"/>
+		<method name="values()[Landroid/icu/util/TimeZone$SystemTimeZoneType;"/>
+		<field name="ANY" since="28"/>
+		<field name="CANONICAL" since="28"/>
+		<field name="CANONICAL_LOCATION" since="28"/>
+	</class>
+	<class name="android/icu/util/ULocale" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="acceptLanguage(Ljava/lang/String;[Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
+		<method name="acceptLanguage(Ljava/lang/String;[Z)Landroid/icu/util/ULocale;"/>
+		<method name="acceptLanguage([Landroid/icu/util/ULocale;[Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
+		<method name="acceptLanguage([Landroid/icu/util/ULocale;[Z)Landroid/icu/util/ULocale;"/>
+		<method name="addLikelySubtags(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;"/>
+		<method name="canonicalize(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="compareTo(Landroid/icu/util/ULocale;)I"/>
+		<method name="createCanonical(Ljava/lang/String;)Landroid/icu/util/ULocale;"/>
+		<method name="forLanguageTag(Ljava/lang/String;)Landroid/icu/util/ULocale;"/>
+		<method name="forLocale(Ljava/util/Locale;)Landroid/icu/util/ULocale;"/>
+		<method name="getAvailableLocales()[Landroid/icu/util/ULocale;"/>
+		<method name="getAvailableLocalesByType(Landroid/icu/util/ULocale$AvailableType;)Ljava/util/Collection;" since="31"/>
+		<method name="getBaseName()Ljava/lang/String;"/>
+		<method name="getBaseName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getCharacterOrientation()Ljava/lang/String;"/>
+		<method name="getCountry()Ljava/lang/String;"/>
+		<method name="getCountry(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDefault()Landroid/icu/util/ULocale;"/>
+		<method name="getDefault(Landroid/icu/util/ULocale$Category;)Landroid/icu/util/ULocale;"/>
+		<method name="getDisplayCountry()Ljava/lang/String;"/>
+		<method name="getDisplayCountry(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayCountry(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayCountry(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayKeyword(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayKeyword(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayKeyword(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayKeywordValue(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayKeywordValue(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayKeywordValue(Ljava/lang/String;Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayKeywordValue(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayLanguage()Ljava/lang/String;"/>
+		<method name="getDisplayLanguage(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayLanguage(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayLanguage(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayLanguageWithDialect()Ljava/lang/String;"/>
+		<method name="getDisplayLanguageWithDialect(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayLanguageWithDialect(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayLanguageWithDialect(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayName()Ljava/lang/String;"/>
+		<method name="getDisplayName(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayNameWithDialect()Ljava/lang/String;"/>
+		<method name="getDisplayNameWithDialect(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayNameWithDialect(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayNameWithDialect(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayScript()Ljava/lang/String;"/>
+		<method name="getDisplayScript(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayScript(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayScript(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDisplayVariant()Ljava/lang/String;"/>
+		<method name="getDisplayVariant(Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayVariant(Ljava/lang/String;Landroid/icu/util/ULocale;)Ljava/lang/String;"/>
+		<method name="getDisplayVariant(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getExtension(C)Ljava/lang/String;"/>
+		<method name="getExtensionKeys()Ljava/util/Set;"/>
+		<method name="getFallback()Landroid/icu/util/ULocale;"/>
+		<method name="getFallback(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getISO3Country()Ljava/lang/String;"/>
+		<method name="getISO3Country(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getISO3Language()Ljava/lang/String;"/>
+		<method name="getISO3Language(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getISOCountries()[Ljava/lang/String;"/>
+		<method name="getISOLanguages()[Ljava/lang/String;"/>
+		<method name="getKeywordValue(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getKeywordValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getKeywords()Ljava/util/Iterator;"/>
+		<method name="getKeywords(Ljava/lang/String;)Ljava/util/Iterator;"/>
+		<method name="getLanguage()Ljava/lang/String;"/>
+		<method name="getLanguage(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getLineOrientation()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getScript()Ljava/lang/String;"/>
+		<method name="getScript(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getUnicodeLocaleAttributes()Ljava/util/Set;"/>
+		<method name="getUnicodeLocaleKeys()Ljava/util/Set;"/>
+		<method name="getUnicodeLocaleType(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getVariant()Ljava/lang/String;"/>
+		<method name="getVariant(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isRightToLeft()Z"/>
+		<method name="minimizeSubtags(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale;"/>
+		<method name="setKeywordValue(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/ULocale;"/>
+		<method name="setKeywordValue(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toLanguageTag()Ljava/lang/String;"/>
+		<method name="toLegacyKey(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toLegacyType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toLocale()Ljava/util/Locale;"/>
+		<method name="toUnicodeLocaleKey(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toUnicodeLocaleType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="CANADA"/>
+		<field name="CANADA_FRENCH"/>
+		<field name="CHINA"/>
+		<field name="CHINESE"/>
+		<field name="ENGLISH"/>
+		<field name="FRANCE"/>
+		<field name="FRENCH"/>
+		<field name="GERMAN"/>
+		<field name="GERMANY"/>
+		<field name="ITALIAN"/>
+		<field name="ITALY"/>
+		<field name="JAPAN"/>
+		<field name="JAPANESE"/>
+		<field name="KOREA"/>
+		<field name="KOREAN"/>
+		<field name="PRC"/>
+		<field name="PRIVATE_USE_EXTENSION"/>
+		<field name="ROOT"/>
+		<field name="SIMPLIFIED_CHINESE"/>
+		<field name="TAIWAN"/>
+		<field name="TRADITIONAL_CHINESE"/>
+		<field name="UK"/>
+		<field name="UNICODE_LOCALE_EXTENSION"/>
+		<field name="US"/>
+	</class>
+	<class name="android/icu/util/ULocale$AvailableType" since="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/ULocale$AvailableType;"/>
+		<method name="values()[Landroid/icu/util/ULocale$AvailableType;"/>
+		<field name="DEFAULT"/>
+		<field name="ONLY_LEGACY_ALIASES"/>
+		<field name="WITH_LEGACY_ALIASES"/>
+	</class>
+	<class name="android/icu/util/ULocale$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addUnicodeLocaleAttribute(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="build()Landroid/icu/util/ULocale;"/>
+		<method name="clear()Landroid/icu/util/ULocale$Builder;"/>
+		<method name="clearExtensions()Landroid/icu/util/ULocale$Builder;"/>
+		<method name="removeUnicodeLocaleAttribute(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setExtension(CLjava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setLanguage(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setLanguageTag(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setLocale(Landroid/icu/util/ULocale;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setRegion(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setScript(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setUnicodeLocaleKeyword(Ljava/lang/String;Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+		<method name="setVariant(Ljava/lang/String;)Landroid/icu/util/ULocale$Builder;"/>
+	</class>
+	<class name="android/icu/util/ULocale$Category" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/icu/util/ULocale$Category;"/>
+		<method name="values()[Landroid/icu/util/ULocale$Category;"/>
+		<field name="DISPLAY"/>
+		<field name="FORMAT"/>
+	</class>
+	<class name="android/icu/util/UniversalTimeScale" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="bigDecimalFrom(DI)Landroid/icu/math/BigDecimal;"/>
+		<method name="bigDecimalFrom(JI)Landroid/icu/math/BigDecimal;"/>
+		<method name="bigDecimalFrom(Landroid/icu/math/BigDecimal;I)Landroid/icu/math/BigDecimal;"/>
+		<method name="from(JI)J"/>
+		<method name="getTimeScaleValue(II)J"/>
+		<method name="toBigDecimal(JI)Landroid/icu/math/BigDecimal;"/>
+		<method name="toBigDecimal(Landroid/icu/math/BigDecimal;I)Landroid/icu/math/BigDecimal;"/>
+		<method name="toLong(JI)J"/>
+		<field name="DB2_TIME"/>
+		<field name="DOTNET_DATE_TIME"/>
+		<field name="EPOCH_OFFSET_PLUS_1_VALUE"/>
+		<field name="EPOCH_OFFSET_VALUE"/>
+		<field name="EXCEL_TIME"/>
+		<field name="FROM_MAX_VALUE"/>
+		<field name="FROM_MIN_VALUE"/>
+		<field name="ICU4C_TIME"/>
+		<field name="JAVA_TIME"/>
+		<field name="MAC_OLD_TIME"/>
+		<field name="MAC_TIME"/>
+		<field name="MAX_SCALE" deprecated="28"/>
+		<field name="TO_MAX_VALUE"/>
+		<field name="TO_MIN_VALUE"/>
+		<field name="UNITS_VALUE"/>
+		<field name="UNIX_MICROSECONDS_TIME"/>
+		<field name="UNIX_TIME"/>
+		<field name="WINDOWS_FILE_TIME"/>
+	</class>
+	<class name="android/icu/util/ValueIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="next(Landroid/icu/util/ValueIterator$Element;)Z"/>
+		<method name="reset()V"/>
+		<method name="setRange(II)V"/>
+	</class>
+	<class name="android/icu/util/ValueIterator$Element" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="integer"/>
+		<field name="value"/>
+	</class>
+	<class name="android/icu/util/VersionInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="compareTo(Landroid/icu/util/VersionInfo;)I"/>
+		<method name="getInstance(I)Landroid/icu/util/VersionInfo;"/>
+		<method name="getInstance(II)Landroid/icu/util/VersionInfo;"/>
+		<method name="getInstance(III)Landroid/icu/util/VersionInfo;"/>
+		<method name="getInstance(IIII)Landroid/icu/util/VersionInfo;"/>
+		<method name="getInstance(Ljava/lang/String;)Landroid/icu/util/VersionInfo;"/>
+		<method name="getMajor()I"/>
+		<method name="getMicro()I"/>
+		<method name="getMilli()I"/>
+		<method name="getMinor()I"/>
+		<field name="ICU_VERSION"/>
+		<field name="UCOL_BUILDER_VERSION"/>
+		<field name="UCOL_RUNTIME_VERSION"/>
+		<field name="UNICODE_10_0" since="28"/>
+		<field name="UNICODE_11_0" since="29"/>
+		<field name="UNICODE_12_0" since="30"/>
+		<field name="UNICODE_12_1" since="30"/>
+		<field name="UNICODE_13_0" since="30"/>
+		<field name="UNICODE_1_0"/>
+		<field name="UNICODE_1_0_1"/>
+		<field name="UNICODE_1_1_0"/>
+		<field name="UNICODE_1_1_5"/>
+		<field name="UNICODE_2_0"/>
+		<field name="UNICODE_2_1_2"/>
+		<field name="UNICODE_2_1_5"/>
+		<field name="UNICODE_2_1_8"/>
+		<field name="UNICODE_2_1_9"/>
+		<field name="UNICODE_3_0"/>
+		<field name="UNICODE_3_0_1"/>
+		<field name="UNICODE_3_1_0"/>
+		<field name="UNICODE_3_1_1"/>
+		<field name="UNICODE_3_2"/>
+		<field name="UNICODE_4_0"/>
+		<field name="UNICODE_4_0_1"/>
+		<field name="UNICODE_4_1"/>
+		<field name="UNICODE_5_0"/>
+		<field name="UNICODE_5_1"/>
+		<field name="UNICODE_5_2"/>
+		<field name="UNICODE_6_0"/>
+		<field name="UNICODE_6_1"/>
+		<field name="UNICODE_6_2"/>
+		<field name="UNICODE_6_3"/>
+		<field name="UNICODE_7_0"/>
+		<field name="UNICODE_8_0"/>
+		<field name="UNICODE_9_0" since="26"/>
+	</class>
+	<class name="android/inputmethodservice/AbstractInputMethodService" since="3">
+		<extends name="android/app/Service"/>
+		<implements name="android/view/KeyEvent$Callback"/>
+		<method name="&lt;init>()V"/>
+		<method name="getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;" since="5"/>
+		<method name="onCreateInputMethodInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl;"/>
+		<method name="onCreateInputMethodSessionInterface()Landroid/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl;"/>
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="17"/>
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/inputmethod/InputMethod"/>
+		<method name="&lt;init>(Landroid/inputmethodservice/AbstractInputMethodService;)V"/>
+	</class>
+	<class name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/inputmethod/InputMethodSession"/>
+		<method name="&lt;init>(Landroid/inputmethodservice/AbstractInputMethodService;)V"/>
+		<method name="isEnabled()Z"/>
+		<method name="isRevoked()Z"/>
+		<method name="revokeSelf()V"/>
+		<method name="setEnabled(Z)V"/>
+	</class>
+	<class name="android/inputmethodservice/ExtractEditText" since="3">
+		<extends name="android/widget/EditText"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="finishInternalChanges()V"/>
+		<method name="hasVerticalScrollBar()Z"/>
+		<method name="startInternalChanges()V"/>
+	</class>
+	<class name="android/inputmethodservice/InputMethodService" since="3">
+		<extends name="android/inputmethodservice/AbstractInputMethodService"/>
+		<method name="&lt;init>()V"/>
+		<method name="enableHardwareAcceleration()Z" since="17" deprecated="21"/>
+		<method name="getBackDisposition()I" since="11"/>
+		<method name="getCandidatesHiddenVisibility()I"/>
+		<method name="getCurrentInputBinding()Landroid/view/inputmethod/InputBinding;"/>
+		<method name="getCurrentInputConnection()Landroid/view/inputmethod/InputConnection;"/>
+		<method name="getCurrentInputEditorInfo()Landroid/view/inputmethod/EditorInfo;"/>
+		<method name="getCurrentInputStarted()Z"/>
+		<method name="getInputMethodWindowRecommendedHeight()I" since="21" deprecated="29"/>
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
+		<method name="getMaxWidth()I"/>
+		<method name="getTextForImeAction(I)Ljava/lang/CharSequence;"/>
+		<method name="getWindow()Landroid/app/Dialog;"/>
+		<method name="hideStatusIcon()V"/>
+		<method name="hideWindow()V"/>
+		<method name="isExtractViewShown()Z"/>
+		<method name="isFullscreenMode()Z"/>
+		<method name="isInputViewShown()Z"/>
+		<method name="isShowInputRequested()Z"/>
+		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="onBindInput()V"/>
+		<method name="onComputeInsets(Landroid/inputmethodservice/InputMethodService$Insets;)V"/>
+		<method name="onConfigureWindow(Landroid/view/Window;ZZ)V"/>
+		<method name="onCreateCandidatesView()Landroid/view/View;"/>
+		<method name="onCreateExtractTextView()Landroid/view/View;"/>
+		<method name="onCreateInlineSuggestionsRequest(Landroid/os/Bundle;)Landroid/view/inputmethod/InlineSuggestionsRequest;" since="30"/>
+		<method name="onCreateInputView()Landroid/view/View;"/>
+		<method name="onCurrentInputMethodSubtypeChanged(Landroid/view/inputmethod/InputMethodSubtype;)V" since="11"/>
+		<method name="onDisplayCompletions([Landroid/view/inputmethod/CompletionInfo;)V"/>
+		<method name="onEvaluateFullscreenMode()Z"/>
+		<method name="onEvaluateInputViewShown()Z"/>
+		<method name="onExtractTextContextMenuItem(I)Z"/>
+		<method name="onExtractedCursorMovement(II)V"/>
+		<method name="onExtractedSelectionChanged(II)V"/>
+		<method name="onExtractedTextClicked()V"/>
+		<method name="onExtractingInputChanged(Landroid/view/inputmethod/EditorInfo;)V"/>
+		<method name="onFinishCandidatesView(Z)V"/>
+		<method name="onFinishInput()V"/>
+		<method name="onFinishInputView(Z)V"/>
+		<method name="onInitializeInterface()V"/>
+		<method name="onInlineSuggestionsResponse(Landroid/view/inputmethod/InlineSuggestionsResponse;)Z" since="30"/>
+		<method name="onShowInputRequested(IZ)Z"/>
+		<method name="onStartCandidatesView(Landroid/view/inputmethod/EditorInfo;Z)V"/>
+		<method name="onStartInput(Landroid/view/inputmethod/EditorInfo;Z)V"/>
+		<method name="onStartInputView(Landroid/view/inputmethod/EditorInfo;Z)V"/>
+		<method name="onUnbindInput()V"/>
+		<method name="onUpdateCursor(Landroid/graphics/Rect;)V" deprecated="21"/>
+		<method name="onUpdateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21"/>
+		<method name="onUpdateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V"/>
+		<method name="onUpdateExtractingViews(Landroid/view/inputmethod/EditorInfo;)V"/>
+		<method name="onUpdateExtractingVisibility(Landroid/view/inputmethod/EditorInfo;)V"/>
+		<method name="onUpdateSelection(IIIIII)V"/>
+		<method name="onViewClicked(Z)V" since="14" deprecated="29"/>
+		<method name="onWindowHidden()V"/>
+		<method name="onWindowShown()V"/>
+		<method name="requestHideSelf(I)V"/>
+		<method name="requestShowSelf(I)V" since="28"/>
+		<method name="sendDefaultEditorAction(Z)Z"/>
+		<method name="sendDownUpKeyEvents(I)V"/>
+		<method name="sendKeyChar(C)V"/>
+		<method name="setBackDisposition(I)V" since="11"/>
+		<method name="setCandidatesView(Landroid/view/View;)V"/>
+		<method name="setCandidatesViewShown(Z)V"/>
+		<method name="setExtractView(Landroid/view/View;)V"/>
+		<method name="setExtractViewShown(Z)V"/>
+		<method name="setInputView(Landroid/view/View;)V"/>
+		<method name="shouldOfferSwitchingToNextInputMethod()Z" since="28"/>
+		<method name="showStatusIcon(I)V"/>
+		<method name="showWindow(Z)V"/>
+		<method name="switchInputMethod(Ljava/lang/String;)V"/>
+		<method name="switchInputMethod(Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V" since="28"/>
+		<method name="switchToNextInputMethod(Z)Z" since="28"/>
+		<method name="switchToPreviousInputMethod()Z" since="28"/>
+		<method name="updateFullscreenMode()V"/>
+		<method name="updateInputViewShown()V"/>
+		<field name="BACK_DISPOSITION_ADJUST_NOTHING" since="28"/>
+		<field name="BACK_DISPOSITION_DEFAULT" since="11"/>
+		<field name="BACK_DISPOSITION_WILL_DISMISS" since="11" deprecated="28"/>
+		<field name="BACK_DISPOSITION_WILL_NOT_DISMISS" since="11" deprecated="28"/>
+	</class>
+	<class name="android/inputmethodservice/InputMethodService$InputMethodImpl" since="3">
+		<extends name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodImpl"/>
+		<method name="&lt;init>(Landroid/inputmethodservice/InputMethodService;)V"/>
+	</class>
+	<class name="android/inputmethodservice/InputMethodService$InputMethodSessionImpl" since="3">
+		<extends name="android/inputmethodservice/AbstractInputMethodService$AbstractInputMethodSessionImpl"/>
+		<method name="&lt;init>(Landroid/inputmethodservice/InputMethodService;)V"/>
+	</class>
+	<class name="android/inputmethodservice/InputMethodService$Insets" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="TOUCHABLE_INSETS_CONTENT"/>
+		<field name="TOUCHABLE_INSETS_FRAME"/>
+		<field name="TOUCHABLE_INSETS_REGION" since="11"/>
+		<field name="TOUCHABLE_INSETS_VISIBLE"/>
+		<field name="contentTopInsets"/>
+		<field name="touchableInsets"/>
+		<field name="touchableRegion" since="11"/>
+		<field name="visibleTopInsets"/>
+	</class>
+	<class name="android/inputmethodservice/Keyboard" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;II)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;IIII)V" since="11" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;ILjava/lang/CharSequence;II)V" deprecated="29"/>
+		<method name="createKeyFromXml(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Key;" deprecated="29"/>
+		<method name="createRowFromXml(Landroid/content/res/Resources;Landroid/content/res/XmlResourceParser;)Landroid/inputmethodservice/Keyboard$Row;" deprecated="29"/>
+		<method name="getHeight()I" deprecated="29"/>
+		<method name="getHorizontalGap()I" deprecated="29"/>
+		<method name="getKeyHeight()I" deprecated="29"/>
+		<method name="getKeyWidth()I" deprecated="29"/>
+		<method name="getKeys()Ljava/util/List;" deprecated="29"/>
+		<method name="getMinWidth()I" deprecated="29"/>
+		<method name="getModifierKeys()Ljava/util/List;" deprecated="29"/>
+		<method name="getNearestKeys(II)[I" deprecated="29"/>
+		<method name="getShiftKeyIndex()I" deprecated="29"/>
+		<method name="getVerticalGap()I" deprecated="29"/>
+		<method name="isShifted()Z" deprecated="29"/>
+		<method name="setHorizontalGap(I)V" deprecated="29"/>
+		<method name="setKeyHeight(I)V" deprecated="29"/>
+		<method name="setKeyWidth(I)V" deprecated="29"/>
+		<method name="setShifted(Z)Z" deprecated="29"/>
+		<method name="setVerticalGap(I)V" deprecated="29"/>
+		<field name="EDGE_BOTTOM" deprecated="29"/>
+		<field name="EDGE_LEFT" deprecated="29"/>
+		<field name="EDGE_RIGHT" deprecated="29"/>
+		<field name="EDGE_TOP" deprecated="29"/>
+		<field name="KEYCODE_ALT" deprecated="29"/>
+		<field name="KEYCODE_CANCEL" deprecated="29"/>
+		<field name="KEYCODE_DELETE" deprecated="29"/>
+		<field name="KEYCODE_DONE" deprecated="29"/>
+		<field name="KEYCODE_MODE_CHANGE" deprecated="29"/>
+		<field name="KEYCODE_SHIFT" deprecated="29"/>
+	</class>
+	<class name="android/inputmethodservice/Keyboard$Key" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard$Row;IILandroid/content/res/XmlResourceParser;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/inputmethodservice/Keyboard$Row;)V" deprecated="29"/>
+		<method name="getCurrentDrawableState()[I" deprecated="29"/>
+		<method name="isInside(II)Z" deprecated="29"/>
+		<method name="onPressed()V" deprecated="29"/>
+		<method name="onReleased(Z)V" deprecated="29"/>
+		<method name="squaredDistanceFrom(II)I" deprecated="29"/>
+		<field name="codes" deprecated="29"/>
+		<field name="edgeFlags" deprecated="29"/>
+		<field name="gap" deprecated="29"/>
+		<field name="height" deprecated="29"/>
+		<field name="icon" deprecated="29"/>
+		<field name="iconPreview" deprecated="29"/>
+		<field name="label" deprecated="29"/>
+		<field name="modifier" deprecated="29"/>
+		<field name="on" deprecated="29"/>
+		<field name="popupCharacters" deprecated="29"/>
+		<field name="popupResId" deprecated="29"/>
+		<field name="pressed" deprecated="29"/>
+		<field name="repeatable" deprecated="29"/>
+		<field name="sticky" deprecated="29"/>
+		<field name="text" deprecated="29"/>
+		<field name="width" deprecated="29"/>
+		<field name="x" deprecated="29"/>
+		<field name="y" deprecated="29"/>
+	</class>
+	<class name="android/inputmethodservice/Keyboard$Row" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/res/Resources;Landroid/inputmethodservice/Keyboard;Landroid/content/res/XmlResourceParser;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/inputmethodservice/Keyboard;)V" deprecated="29"/>
+		<field name="defaultHeight" deprecated="29"/>
+		<field name="defaultHorizontalGap" deprecated="29"/>
+		<field name="defaultWidth" deprecated="29"/>
+		<field name="mode" deprecated="29"/>
+		<field name="rowEdgeFlags" deprecated="29"/>
+		<field name="verticalGap" deprecated="29"/>
+	</class>
+	<class name="android/inputmethodservice/KeyboardView" since="3" deprecated="29">
+		<extends name="android/view/View"/>
+		<implements name="android/view/View$OnClickListener"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="closing()V" deprecated="29"/>
+		<method name="getKeyboard()Landroid/inputmethodservice/Keyboard;" deprecated="29"/>
+		<method name="getOnKeyboardActionListener()Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;" deprecated="29"/>
+		<method name="handleBack()Z" deprecated="29"/>
+		<method name="invalidateAllKeys()V" since="4" deprecated="29"/>
+		<method name="invalidateKey(I)V" since="4" deprecated="29"/>
+		<method name="isPreviewEnabled()Z" deprecated="29"/>
+		<method name="isProximityCorrectionEnabled()Z" deprecated="29"/>
+		<method name="isShifted()Z" deprecated="29"/>
+		<method name="onLongPress(Landroid/inputmethodservice/Keyboard$Key;)Z" deprecated="29"/>
+		<method name="setKeyboard(Landroid/inputmethodservice/Keyboard;)V" deprecated="29"/>
+		<method name="setOnKeyboardActionListener(Landroid/inputmethodservice/KeyboardView$OnKeyboardActionListener;)V" deprecated="29"/>
+		<method name="setPopupOffset(II)V" deprecated="29"/>
+		<method name="setPopupParent(Landroid/view/View;)V" deprecated="29"/>
+		<method name="setPreviewEnabled(Z)V" deprecated="29"/>
+		<method name="setProximityCorrectionEnabled(Z)V" deprecated="29"/>
+		<method name="setShifted(Z)Z" deprecated="29"/>
+		<method name="setVerticalCorrection(I)V" deprecated="29"/>
+		<method name="swipeDown()V" deprecated="29"/>
+		<method name="swipeLeft()V" deprecated="29"/>
+		<method name="swipeRight()V" deprecated="29"/>
+		<method name="swipeUp()V" deprecated="29"/>
+	</class>
+	<class name="android/inputmethodservice/KeyboardView$OnKeyboardActionListener" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onKey(I[I)V" deprecated="29"/>
+		<method name="onPress(I)V" deprecated="29"/>
+		<method name="onRelease(I)V" deprecated="29"/>
+		<method name="onText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="swipeDown()V" deprecated="29"/>
+		<method name="swipeLeft()V" deprecated="29"/>
+		<method name="swipeRight()V" deprecated="29"/>
+		<method name="swipeUp()V" deprecated="29"/>
+	</class>
+	<class name="android/location/Address" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="clearLatitude()V"/>
+		<method name="clearLongitude()V"/>
+		<method name="getAddressLine(I)Ljava/lang/String;"/>
+		<method name="getAdminArea()Ljava/lang/String;"/>
+		<method name="getCountryCode()Ljava/lang/String;"/>
+		<method name="getCountryName()Ljava/lang/String;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getFeatureName()Ljava/lang/String;"/>
+		<method name="getLatitude()D"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getLocality()Ljava/lang/String;"/>
+		<method name="getLongitude()D"/>
+		<method name="getMaxAddressLineIndex()I"/>
+		<method name="getPhone()Ljava/lang/String;"/>
+		<method name="getPostalCode()Ljava/lang/String;"/>
+		<method name="getPremises()Ljava/lang/String;" since="4"/>
+		<method name="getSubAdminArea()Ljava/lang/String;"/>
+		<method name="getSubLocality()Ljava/lang/String;" since="4"/>
+		<method name="getSubThoroughfare()Ljava/lang/String;" since="4"/>
+		<method name="getThoroughfare()Ljava/lang/String;"/>
+		<method name="getUrl()Ljava/lang/String;"/>
+		<method name="hasLatitude()Z"/>
+		<method name="hasLongitude()Z"/>
+		<method name="setAddressLine(ILjava/lang/String;)V"/>
+		<method name="setAdminArea(Ljava/lang/String;)V"/>
+		<method name="setCountryCode(Ljava/lang/String;)V"/>
+		<method name="setCountryName(Ljava/lang/String;)V"/>
+		<method name="setExtras(Landroid/os/Bundle;)V"/>
+		<method name="setFeatureName(Ljava/lang/String;)V"/>
+		<method name="setLatitude(D)V"/>
+		<method name="setLocality(Ljava/lang/String;)V"/>
+		<method name="setLongitude(D)V"/>
+		<method name="setPhone(Ljava/lang/String;)V"/>
+		<method name="setPostalCode(Ljava/lang/String;)V"/>
+		<method name="setPremises(Ljava/lang/String;)V" since="4"/>
+		<method name="setSubAdminArea(Ljava/lang/String;)V"/>
+		<method name="setSubLocality(Ljava/lang/String;)V" since="4"/>
+		<method name="setSubThoroughfare(Ljava/lang/String;)V" since="4"/>
+		<method name="setThoroughfare(Ljava/lang/String;)V"/>
+		<method name="setUrl(Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/location/Criteria" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/location/Criteria;)V"/>
+		<method name="getAccuracy()I"/>
+		<method name="getBearingAccuracy()I" since="9"/>
+		<method name="getHorizontalAccuracy()I" since="9"/>
+		<method name="getPowerRequirement()I"/>
+		<method name="getSpeedAccuracy()I" since="9"/>
+		<method name="getVerticalAccuracy()I" since="9"/>
+		<method name="isAltitudeRequired()Z"/>
+		<method name="isBearingRequired()Z"/>
+		<method name="isCostAllowed()Z"/>
+		<method name="isSpeedRequired()Z"/>
+		<method name="setAccuracy(I)V"/>
+		<method name="setAltitudeRequired(Z)V"/>
+		<method name="setBearingAccuracy(I)V" since="9"/>
+		<method name="setBearingRequired(Z)V"/>
+		<method name="setCostAllowed(Z)V"/>
+		<method name="setHorizontalAccuracy(I)V" since="9"/>
+		<method name="setPowerRequirement(I)V"/>
+		<method name="setSpeedAccuracy(I)V" since="9"/>
+		<method name="setSpeedRequired(Z)V"/>
+		<method name="setVerticalAccuracy(I)V" since="9"/>
+		<field name="ACCURACY_COARSE"/>
+		<field name="ACCURACY_FINE"/>
+		<field name="ACCURACY_HIGH" since="9"/>
+		<field name="ACCURACY_LOW" since="9"/>
+		<field name="ACCURACY_MEDIUM" since="9"/>
+		<field name="CREATOR"/>
+		<field name="NO_REQUIREMENT"/>
+		<field name="POWER_HIGH"/>
+		<field name="POWER_LOW"/>
+		<field name="POWER_MEDIUM"/>
+	</class>
+	<class name="android/location/Geocoder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/util/Locale;)V"/>
+		<method name="getFromLocation(DDI)Ljava/util/List;"/>
+		<method name="getFromLocationName(Ljava/lang/String;I)Ljava/util/List;"/>
+		<method name="getFromLocationName(Ljava/lang/String;IDDDD)Ljava/util/List;"/>
+		<method name="isPresent()Z" since="9"/>
+	</class>
+	<class name="android/location/GnssAntennaInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCarrierFrequencyMHz()D"/>
+		<method name="getPhaseCenterOffset()Landroid/location/GnssAntennaInfo$PhaseCenterOffset;"/>
+		<method name="getPhaseCenterVariationCorrections()Landroid/location/GnssAntennaInfo$SphericalCorrections;"/>
+		<method name="getSignalGainCorrections()Landroid/location/GnssAntennaInfo$SphericalCorrections;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/location/GnssAntennaInfo$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(DLandroid/location/GnssAntennaInfo$PhaseCenterOffset;)V" since="31"/>
+		<method name="&lt;init>(Landroid/location/GnssAntennaInfo;)V" since="31"/>
+		<method name="build()Landroid/location/GnssAntennaInfo;"/>
+		<method name="setCarrierFrequencyMHz(D)Landroid/location/GnssAntennaInfo$Builder;"/>
+		<method name="setPhaseCenterOffset(Landroid/location/GnssAntennaInfo$PhaseCenterOffset;)Landroid/location/GnssAntennaInfo$Builder;"/>
+		<method name="setPhaseCenterVariationCorrections(Landroid/location/GnssAntennaInfo$SphericalCorrections;)Landroid/location/GnssAntennaInfo$Builder;"/>
+		<method name="setSignalGainCorrections(Landroid/location/GnssAntennaInfo$SphericalCorrections;)Landroid/location/GnssAntennaInfo$Builder;"/>
+	</class>
+	<class name="android/location/GnssAntennaInfo$Listener" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onGnssAntennaInfoReceived(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/location/GnssAntennaInfo$PhaseCenterOffset" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(DDDDDD)V"/>
+		<method name="getXOffsetMm()D"/>
+		<method name="getXOffsetUncertaintyMm()D"/>
+		<method name="getYOffsetMm()D"/>
+		<method name="getYOffsetUncertaintyMm()D"/>
+		<method name="getZOffsetMm()D"/>
+		<method name="getZOffsetUncertaintyMm()D"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/location/GnssAntennaInfo$SphericalCorrections" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>([[D[[D)V"/>
+		<method name="getCorrectionUncertaintiesArray()[[D"/>
+		<method name="getCorrectionsArray()[[D"/>
+		<method name="getDeltaPhi()D"/>
+		<method name="getDeltaTheta()D"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/location/GnssCapabilities" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="31"/>
+		<method name="hasAntennaInfo()Z" since="31"/>
+		<method name="hasGnssAntennaInfo()Z" deprecated="31"/>
+		<method name="hasMeasurements()Z" since="31"/>
+		<method name="hasNavigationMessages()Z" since="31"/>
+		<field name="CREATOR" since="31"/>
+	</class>
+	<class name="android/location/GnssCapabilities$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/location/GnssCapabilities;)V"/>
+		<method name="build()Landroid/location/GnssCapabilities;"/>
+		<method name="setHasAntennaInfo(Z)Landroid/location/GnssCapabilities$Builder;"/>
+		<method name="setHasMeasurements(Z)Landroid/location/GnssCapabilities$Builder;"/>
+		<method name="setHasNavigationMessages(Z)Landroid/location/GnssCapabilities$Builder;"/>
+	</class>
+	<class name="android/location/GnssClock" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBiasNanos()D"/>
+		<method name="getBiasUncertaintyNanos()D"/>
+		<method name="getDriftNanosPerSecond()D"/>
+		<method name="getDriftUncertaintyNanosPerSecond()D"/>
+		<method name="getElapsedRealtimeNanos()J" since="29"/>
+		<method name="getElapsedRealtimeUncertaintyNanos()D" since="29"/>
+		<method name="getFullBiasNanos()J"/>
+		<method name="getHardwareClockDiscontinuityCount()I"/>
+		<method name="getLeapSecond()I"/>
+		<method name="getReferenceCarrierFrequencyHzForIsb()D" since="30"/>
+		<method name="getReferenceCodeTypeForIsb()Ljava/lang/String;" since="30"/>
+		<method name="getReferenceConstellationTypeForIsb()I" since="30"/>
+		<method name="getTimeNanos()J"/>
+		<method name="getTimeUncertaintyNanos()D"/>
+		<method name="hasBiasNanos()Z"/>
+		<method name="hasBiasUncertaintyNanos()Z"/>
+		<method name="hasDriftNanosPerSecond()Z"/>
+		<method name="hasDriftUncertaintyNanosPerSecond()Z"/>
+		<method name="hasElapsedRealtimeNanos()Z" since="29"/>
+		<method name="hasElapsedRealtimeUncertaintyNanos()Z" since="29"/>
+		<method name="hasFullBiasNanos()Z"/>
+		<method name="hasLeapSecond()Z"/>
+		<method name="hasReferenceCarrierFrequencyHzForIsb()Z" since="30"/>
+		<method name="hasReferenceCodeTypeForIsb()Z" since="30"/>
+		<method name="hasReferenceConstellationTypeForIsb()Z" since="30"/>
+		<method name="hasTimeUncertaintyNanos()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/location/GnssMeasurement" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAccumulatedDeltaRangeMeters()D"/>
+		<method name="getAccumulatedDeltaRangeState()I"/>
+		<method name="getAccumulatedDeltaRangeUncertaintyMeters()D"/>
+		<method name="getAutomaticGainControlLevelDb()D" since="26"/>
+		<method name="getBasebandCn0DbHz()D" since="30"/>
+		<method name="getCarrierCycles()J" deprecated="28"/>
+		<method name="getCarrierFrequencyHz()F"/>
+		<method name="getCarrierPhase()D" deprecated="28"/>
+		<method name="getCarrierPhaseUncertainty()D" deprecated="28"/>
+		<method name="getCn0DbHz()D"/>
+		<method name="getCodeType()Ljava/lang/String;" since="29"/>
+		<method name="getConstellationType()I"/>
+		<method name="getFullInterSignalBiasNanos()D" since="30"/>
+		<method name="getFullInterSignalBiasUncertaintyNanos()D" since="30"/>
+		<method name="getMultipathIndicator()I"/>
+		<method name="getPseudorangeRateMetersPerSecond()D"/>
+		<method name="getPseudorangeRateUncertaintyMetersPerSecond()D"/>
+		<method name="getReceivedSvTimeNanos()J"/>
+		<method name="getReceivedSvTimeUncertaintyNanos()J"/>
+		<method name="getSatelliteInterSignalBiasNanos()D" since="30"/>
+		<method name="getSatelliteInterSignalBiasUncertaintyNanos()D" since="30"/>
+		<method name="getSnrInDb()D"/>
+		<method name="getState()I"/>
+		<method name="getSvid()I"/>
+		<method name="getTimeOffsetNanos()D"/>
+		<method name="hasAutomaticGainControlLevelDb()Z" since="26"/>
+		<method name="hasBasebandCn0DbHz()Z" since="30"/>
+		<method name="hasCarrierCycles()Z" deprecated="28"/>
+		<method name="hasCarrierFrequencyHz()Z"/>
+		<method name="hasCarrierPhase()Z" deprecated="28"/>
+		<method name="hasCarrierPhaseUncertainty()Z" deprecated="28"/>
+		<method name="hasCodeType()Z" since="29"/>
+		<method name="hasFullInterSignalBiasNanos()Z" since="30"/>
+		<method name="hasFullInterSignalBiasUncertaintyNanos()Z" since="30"/>
+		<method name="hasSatelliteInterSignalBiasNanos()Z" since="30"/>
+		<method name="hasSatelliteInterSignalBiasUncertaintyNanos()Z" since="30"/>
+		<method name="hasSnrInDb()Z"/>
+		<field name="ADR_STATE_CYCLE_SLIP"/>
+		<field name="ADR_STATE_HALF_CYCLE_REPORTED" since="28"/>
+		<field name="ADR_STATE_HALF_CYCLE_RESOLVED" since="28"/>
+		<field name="ADR_STATE_RESET"/>
+		<field name="ADR_STATE_UNKNOWN"/>
+		<field name="ADR_STATE_VALID"/>
+		<field name="CREATOR"/>
+		<field name="MULTIPATH_INDICATOR_DETECTED"/>
+		<field name="MULTIPATH_INDICATOR_NOT_DETECTED"/>
+		<field name="MULTIPATH_INDICATOR_UNKNOWN"/>
+		<field name="STATE_2ND_CODE_LOCK" since="29"/>
+		<field name="STATE_BDS_D2_BIT_SYNC"/>
+		<field name="STATE_BDS_D2_SUBFRAME_SYNC"/>
+		<field name="STATE_BIT_SYNC"/>
+		<field name="STATE_CODE_LOCK"/>
+		<field name="STATE_GAL_E1BC_CODE_LOCK"/>
+		<field name="STATE_GAL_E1B_PAGE_SYNC"/>
+		<field name="STATE_GAL_E1C_2ND_CODE_LOCK"/>
+		<field name="STATE_GLO_STRING_SYNC"/>
+		<field name="STATE_GLO_TOD_DECODED"/>
+		<field name="STATE_GLO_TOD_KNOWN" since="26"/>
+		<field name="STATE_MSEC_AMBIGUOUS"/>
+		<field name="STATE_SBAS_SYNC"/>
+		<field name="STATE_SUBFRAME_SYNC"/>
+		<field name="STATE_SYMBOL_SYNC"/>
+		<field name="STATE_TOW_DECODED"/>
+		<field name="STATE_TOW_KNOWN" since="26"/>
+		<field name="STATE_UNKNOWN"/>
+	</class>
+	<class name="android/location/GnssMeasurementRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="isFullTracking()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/location/GnssMeasurementRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/location/GnssMeasurementRequest;)V"/>
+		<method name="build()Landroid/location/GnssMeasurementRequest;"/>
+		<method name="setFullTracking(Z)Landroid/location/GnssMeasurementRequest$Builder;"/>
+	</class>
+	<class name="android/location/GnssMeasurementsEvent" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getClock()Landroid/location/GnssClock;"/>
+		<method name="getMeasurements()Ljava/util/Collection;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/location/GnssMeasurementsEvent$Callback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGnssMeasurementsReceived(Landroid/location/GnssMeasurementsEvent;)V"/>
+		<method name="onStatusChanged(I)V" deprecated="31"/>
+		<field name="STATUS_LOCATION_DISABLED" deprecated="31"/>
+		<field name="STATUS_NOT_ALLOWED" since="28" deprecated="31"/>
+		<field name="STATUS_NOT_SUPPORTED" deprecated="31"/>
+		<field name="STATUS_READY" deprecated="31"/>
+	</class>
+	<class name="android/location/GnssNavigationMessage" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getData()[B"/>
+		<method name="getMessageId()I"/>
+		<method name="getStatus()I"/>
+		<method name="getSubmessageId()I"/>
+		<method name="getSvid()I"/>
+		<method name="getType()I"/>
+		<field name="CREATOR"/>
+		<field name="STATUS_PARITY_PASSED"/>
+		<field name="STATUS_PARITY_REBUILT"/>
+		<field name="STATUS_UNKNOWN"/>
+		<field name="TYPE_BDS_CNAV1" since="30"/>
+		<field name="TYPE_BDS_CNAV2" since="30"/>
+		<field name="TYPE_BDS_D1"/>
+		<field name="TYPE_BDS_D2"/>
+		<field name="TYPE_GAL_F"/>
+		<field name="TYPE_GAL_I"/>
+		<field name="TYPE_GLO_L1CA"/>
+		<field name="TYPE_GPS_CNAV2"/>
+		<field name="TYPE_GPS_L1CA"/>
+		<field name="TYPE_GPS_L2CNAV"/>
+		<field name="TYPE_GPS_L5CNAV"/>
+		<field name="TYPE_IRN_L5CA" since="30"/>
+		<field name="TYPE_QZS_L1CA" since="30"/>
+		<field name="TYPE_SBS" since="30"/>
+		<field name="TYPE_UNKNOWN"/>
+	</class>
+	<class name="android/location/GnssNavigationMessage$Callback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGnssNavigationMessageReceived(Landroid/location/GnssNavigationMessage;)V"/>
+		<method name="onStatusChanged(I)V" deprecated="31"/>
+		<field name="STATUS_LOCATION_DISABLED" deprecated="31"/>
+		<field name="STATUS_NOT_SUPPORTED" deprecated="31"/>
+		<field name="STATUS_READY" deprecated="31"/>
+	</class>
+	<class name="android/location/GnssStatus" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="31"/>
+		<method name="getAzimuthDegrees(I)F"/>
+		<method name="getBasebandCn0DbHz(I)F" since="30"/>
+		<method name="getCarrierFrequencyHz(I)F" since="26"/>
+		<method name="getCn0DbHz(I)F"/>
+		<method name="getConstellationType(I)I"/>
+		<method name="getElevationDegrees(I)F"/>
+		<method name="getSatelliteCount()I"/>
+		<method name="getSvid(I)I"/>
+		<method name="hasAlmanacData(I)Z"/>
+		<method name="hasBasebandCn0DbHz(I)Z" since="30"/>
+		<method name="hasCarrierFrequencyHz(I)Z" since="26"/>
+		<method name="hasEphemerisData(I)Z"/>
+		<method name="usedInFix(I)Z"/>
+		<field name="CONSTELLATION_BEIDOU"/>
+		<field name="CONSTELLATION_GALILEO"/>
+		<field name="CONSTELLATION_GLONASS"/>
+		<field name="CONSTELLATION_GPS"/>
+		<field name="CONSTELLATION_IRNSS" since="29"/>
+		<field name="CONSTELLATION_QZSS"/>
+		<field name="CONSTELLATION_SBAS"/>
+		<field name="CONSTELLATION_UNKNOWN"/>
+		<field name="CREATOR" since="31"/>
+	</class>
+	<class name="android/location/GnssStatus$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addSatellite(IIFFFZZZZFZF)Landroid/location/GnssStatus$Builder;"/>
+		<method name="build()Landroid/location/GnssStatus;"/>
+		<method name="clearSatellites()Landroid/location/GnssStatus$Builder;"/>
+	</class>
+	<class name="android/location/GnssStatus$Callback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onFirstFix(I)V"/>
+		<method name="onSatelliteStatusChanged(Landroid/location/GnssStatus;)V"/>
+		<method name="onStarted()V"/>
+		<method name="onStopped()V"/>
+	</class>
+	<class name="android/location/GpsSatellite" since="3" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="getAzimuth()F" deprecated="29"/>
+		<method name="getElevation()F" deprecated="29"/>
+		<method name="getPrn()I" deprecated="29"/>
+		<method name="getSnr()F" deprecated="29"/>
+		<method name="hasAlmanac()Z" deprecated="29"/>
+		<method name="hasEphemeris()Z" deprecated="29"/>
+		<method name="usedInFix()Z" deprecated="29"/>
+	</class>
+	<class name="android/location/GpsStatus" since="3" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="create(Landroid/location/GnssStatus;I)Landroid/location/GpsStatus;" since="30" deprecated="30"/>
+		<method name="getMaxSatellites()I" deprecated="29"/>
+		<method name="getSatellites()Ljava/lang/Iterable;" deprecated="29"/>
+		<method name="getTimeToFirstFix()I" deprecated="29"/>
+		<field name="GPS_EVENT_FIRST_FIX" deprecated="29"/>
+		<field name="GPS_EVENT_SATELLITE_STATUS" deprecated="29"/>
+		<field name="GPS_EVENT_STARTED" deprecated="29"/>
+		<field name="GPS_EVENT_STOPPED" deprecated="29"/>
+	</class>
+	<class name="android/location/GpsStatus$Listener" since="3" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="onGpsStatusChanged(I)V" deprecated="29"/>
+	</class>
+	<class name="android/location/GpsStatus$NmeaListener" since="5" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="onNmeaReceived(JLjava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="android/location/Location" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/location/Location;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="bearingTo(Landroid/location/Location;)F"/>
+		<method name="convert(DI)Ljava/lang/String;"/>
+		<method name="convert(Ljava/lang/String;)D"/>
+		<method name="distanceBetween(DDDD[F)V"/>
+		<method name="distanceTo(Landroid/location/Location;)F"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V" since="3"/>
+		<method name="getAccuracy()F"/>
+		<method name="getAltitude()D"/>
+		<method name="getBearing()F"/>
+		<method name="getBearingAccuracyDegrees()F" since="26"/>
+		<method name="getElapsedRealtimeNanos()J" since="17"/>
+		<method name="getElapsedRealtimeUncertaintyNanos()D" since="29"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getLatitude()D"/>
+		<method name="getLongitude()D"/>
+		<method name="getProvider()Ljava/lang/String;"/>
+		<method name="getSpeed()F"/>
+		<method name="getSpeedAccuracyMetersPerSecond()F" since="26"/>
+		<method name="getTime()J"/>
+		<method name="getVerticalAccuracyMeters()F" since="26"/>
+		<method name="hasAccuracy()Z"/>
+		<method name="hasAltitude()Z"/>
+		<method name="hasBearing()Z"/>
+		<method name="hasBearingAccuracy()Z" since="26"/>
+		<method name="hasElapsedRealtimeUncertaintyNanos()Z" since="29"/>
+		<method name="hasSpeed()Z"/>
+		<method name="hasSpeedAccuracy()Z" since="26"/>
+		<method name="hasVerticalAccuracy()Z" since="26"/>
+		<method name="isFromMockProvider()Z" since="18" deprecated="31"/>
+		<method name="isMock()Z" since="31"/>
+		<method name="removeAccuracy()V" deprecated="26"/>
+		<method name="removeAltitude()V" deprecated="26"/>
+		<method name="removeBearing()V" deprecated="26"/>
+		<method name="removeSpeed()V" deprecated="26"/>
+		<method name="reset()V"/>
+		<method name="set(Landroid/location/Location;)V"/>
+		<method name="setAccuracy(F)V"/>
+		<method name="setAltitude(D)V"/>
+		<method name="setBearing(F)V"/>
+		<method name="setBearingAccuracyDegrees(F)V" since="26"/>
+		<method name="setElapsedRealtimeNanos(J)V" since="17"/>
+		<method name="setElapsedRealtimeUncertaintyNanos(D)V" since="29"/>
+		<method name="setExtras(Landroid/os/Bundle;)V"/>
+		<method name="setLatitude(D)V"/>
+		<method name="setLongitude(D)V"/>
+		<method name="setMock(Z)V" since="31"/>
+		<method name="setProvider(Ljava/lang/String;)V"/>
+		<method name="setSpeed(F)V"/>
+		<method name="setSpeedAccuracyMetersPerSecond(F)V" since="26"/>
+		<method name="setTime(J)V"/>
+		<method name="setVerticalAccuracyMeters(F)V" since="26"/>
+		<field name="CREATOR"/>
+		<field name="FORMAT_DEGREES"/>
+		<field name="FORMAT_MINUTES"/>
+		<field name="FORMAT_SECONDS"/>
+	</class>
+	<class name="android/location/LocationListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onFlushComplete(I)V" since="31"/>
+		<method name="onLocationChanged(Landroid/location/Location;)V"/>
+		<method name="onLocationChanged(Ljava/util/List;)V" since="31"/>
+		<method name="onProviderDisabled(Ljava/lang/String;)V"/>
+		<method name="onProviderEnabled(Ljava/lang/String;)V"/>
+		<method name="onStatusChanged(Ljava/lang/String;ILandroid/os/Bundle;)V" deprecated="29"/>
+	</class>
+	<class name="android/location/LocationManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addGpsStatusListener(Landroid/location/GpsStatus$Listener;)Z" since="3" deprecated="24"/>
+		<method name="addNmeaListener(Landroid/location/GpsStatus$NmeaListener;)Z" since="5" deprecated="24"/>
+		<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;)Z" since="24" deprecated="30"/>
+		<method name="addNmeaListener(Landroid/location/OnNmeaMessageListener;Landroid/os/Handler;)Z" since="24"/>
+		<method name="addNmeaListener(Ljava/util/concurrent/Executor;Landroid/location/OnNmeaMessageListener;)Z" since="30"/>
+		<method name="addProximityAlert(DDFJLandroid/app/PendingIntent;)V"/>
+		<method name="addTestProvider(Ljava/lang/String;Landroid/location/provider/ProviderProperties;)V" since="31"/>
+		<method name="addTestProvider(Ljava/lang/String;Landroid/location/provider/ProviderProperties;Ljava/util/Set;)V" since="31"/>
+		<method name="addTestProvider(Ljava/lang/String;ZZZZZZZII)V" since="3"/>
+		<method name="clearTestProviderEnabled(Ljava/lang/String;)V" since="3" deprecated="29"/>
+		<method name="clearTestProviderLocation(Ljava/lang/String;)V" since="3" deprecated="29"/>
+		<method name="clearTestProviderStatus(Ljava/lang/String;)V" since="3" deprecated="29"/>
+		<method name="getAllProviders()Ljava/util/List;"/>
+		<method name="getBestProvider(Landroid/location/Criteria;Z)Ljava/lang/String;"/>
+		<method name="getCurrentLocation(Ljava/lang/String;Landroid/location/LocationRequest;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="getCurrentLocation(Ljava/lang/String;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="30"/>
+		<method name="getGnssAntennaInfos()Ljava/util/List;" since="31"/>
+		<method name="getGnssCapabilities()Landroid/location/GnssCapabilities;" since="30"/>
+		<method name="getGnssHardwareModelName()Ljava/lang/String;" since="28"/>
+		<method name="getGnssYearOfHardware()I" since="28"/>
+		<method name="getGpsStatus(Landroid/location/GpsStatus;)Landroid/location/GpsStatus;" since="3" deprecated="24"/>
+		<method name="getLastKnownLocation(Ljava/lang/String;)Landroid/location/Location;"/>
+		<method name="getProvider(Ljava/lang/String;)Landroid/location/LocationProvider;" deprecated="31"/>
+		<method name="getProviderProperties(Ljava/lang/String;)Landroid/location/provider/ProviderProperties;" since="31"/>
+		<method name="getProviders(Landroid/location/Criteria;Z)Ljava/util/List;"/>
+		<method name="getProviders(Z)Ljava/util/List;"/>
+		<method name="hasProvider(Ljava/lang/String;)Z" since="31"/>
+		<method name="isLocationEnabled()Z" since="28"/>
+		<method name="isProviderEnabled(Ljava/lang/String;)Z"/>
+		<method name="registerAntennaInfoListener(Ljava/util/concurrent/Executor;Landroid/location/GnssAntennaInfo$Listener;)Z" since="30"/>
+		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementRequest;Ljava/util/concurrent/Executor;Landroid/location/GnssMeasurementsEvent$Callback;)Z" since="31"/>
+		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)Z" since="24" deprecated="30"/>
+		<method name="registerGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;Landroid/os/Handler;)Z" since="24"/>
+		<method name="registerGnssMeasurementsCallback(Ljava/util/concurrent/Executor;Landroid/location/GnssMeasurementsEvent$Callback;)Z" since="30"/>
+		<method name="registerGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;)Z" since="24" deprecated="30"/>
+		<method name="registerGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;Landroid/os/Handler;)Z" since="24"/>
+		<method name="registerGnssNavigationMessageCallback(Ljava/util/concurrent/Executor;Landroid/location/GnssNavigationMessage$Callback;)Z" since="30"/>
+		<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;)Z" since="24" deprecated="30"/>
+		<method name="registerGnssStatusCallback(Landroid/location/GnssStatus$Callback;Landroid/os/Handler;)Z" since="24"/>
+		<method name="registerGnssStatusCallback(Ljava/util/concurrent/Executor;Landroid/location/GnssStatus$Callback;)Z" since="30"/>
+		<method name="removeGpsStatusListener(Landroid/location/GpsStatus$Listener;)V" since="3" deprecated="24"/>
+		<method name="removeNmeaListener(Landroid/location/GpsStatus$NmeaListener;)V" since="5" deprecated="24"/>
+		<method name="removeNmeaListener(Landroid/location/OnNmeaMessageListener;)V" since="24"/>
+		<method name="removeProximityAlert(Landroid/app/PendingIntent;)V"/>
+		<method name="removeTestProvider(Ljava/lang/String;)V" since="3"/>
+		<method name="removeUpdates(Landroid/app/PendingIntent;)V" since="3"/>
+		<method name="removeUpdates(Landroid/location/LocationListener;)V"/>
+		<method name="requestFlush(Ljava/lang/String;Landroid/app/PendingIntent;I)V" since="31"/>
+		<method name="requestFlush(Ljava/lang/String;Landroid/location/LocationListener;I)V" since="31"/>
+		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Landroid/app/PendingIntent;)V" since="9" deprecated="31"/>
+		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9" deprecated="31"/>
+		<method name="requestLocationUpdates(JFLandroid/location/Criteria;Ljava/util/concurrent/Executor;Landroid/location/LocationListener;)V" since="30" deprecated="31"/>
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/app/PendingIntent;)V" since="3"/>
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;)V"/>
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLandroid/location/LocationListener;Landroid/os/Looper;)V"/>
+		<method name="requestLocationUpdates(Ljava/lang/String;JFLjava/util/concurrent/Executor;Landroid/location/LocationListener;)V" since="30"/>
+		<method name="requestLocationUpdates(Ljava/lang/String;Landroid/location/LocationRequest;Landroid/app/PendingIntent;)V" since="31"/>
+		<method name="requestLocationUpdates(Ljava/lang/String;Landroid/location/LocationRequest;Ljava/util/concurrent/Executor;Landroid/location/LocationListener;)V" since="31"/>
+		<method name="requestSingleUpdate(Landroid/location/Criteria;Landroid/app/PendingIntent;)V" since="9" deprecated="30"/>
+		<method name="requestSingleUpdate(Landroid/location/Criteria;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9" deprecated="30"/>
+		<method name="requestSingleUpdate(Ljava/lang/String;Landroid/app/PendingIntent;)V" since="9" deprecated="30"/>
+		<method name="requestSingleUpdate(Ljava/lang/String;Landroid/location/LocationListener;Landroid/os/Looper;)V" since="9" deprecated="30"/>
+		<method name="sendExtraCommand(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Z" since="3"/>
+		<method name="setTestProviderEnabled(Ljava/lang/String;Z)V" since="3"/>
+		<method name="setTestProviderLocation(Ljava/lang/String;Landroid/location/Location;)V" since="3"/>
+		<method name="setTestProviderStatus(Ljava/lang/String;ILandroid/os/Bundle;J)V" since="3" deprecated="29"/>
+		<method name="unregisterAntennaInfoListener(Landroid/location/GnssAntennaInfo$Listener;)V" since="30"/>
+		<method name="unregisterGnssMeasurementsCallback(Landroid/location/GnssMeasurementsEvent$Callback;)V" since="24"/>
+		<method name="unregisterGnssNavigationMessageCallback(Landroid/location/GnssNavigationMessage$Callback;)V" since="24"/>
+		<method name="unregisterGnssStatusCallback(Landroid/location/GnssStatus$Callback;)V" since="24"/>
+		<field name="ACTION_GNSS_CAPABILITIES_CHANGED" since="31"/>
+		<field name="EXTRA_GNSS_CAPABILITIES" since="31"/>
+		<field name="EXTRA_LOCATION_ENABLED" since="30"/>
+		<field name="EXTRA_PROVIDER_ENABLED" since="30"/>
+		<field name="EXTRA_PROVIDER_NAME" since="29"/>
+		<field name="FUSED_PROVIDER" since="31"/>
+		<field name="GPS_PROVIDER"/>
+		<field name="KEY_FLUSH_COMPLETE" since="31"/>
+		<field name="KEY_LOCATIONS" since="31"/>
+		<field name="KEY_LOCATION_CHANGED" since="3"/>
+		<field name="KEY_PROVIDER_ENABLED" since="3"/>
+		<field name="KEY_PROXIMITY_ENTERING"/>
+		<field name="KEY_STATUS_CHANGED" since="3" deprecated="29"/>
+		<field name="MODE_CHANGED_ACTION" since="19"/>
+		<field name="NETWORK_PROVIDER"/>
+		<field name="PASSIVE_PROVIDER" since="8"/>
+		<field name="PROVIDERS_CHANGED_ACTION" since="9"/>
+	</class>
+	<class name="android/location/LocationProvider" since="1" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="getAccuracy()I" deprecated="31"/>
+		<method name="getName()Ljava/lang/String;" deprecated="31"/>
+		<method name="getPowerRequirement()I" deprecated="31"/>
+		<method name="hasMonetaryCost()Z" deprecated="31"/>
+		<method name="meetsCriteria(Landroid/location/Criteria;)Z" deprecated="31"/>
+		<method name="requiresCell()Z" deprecated="31"/>
+		<method name="requiresNetwork()Z" deprecated="31"/>
+		<method name="requiresSatellite()Z" deprecated="31"/>
+		<method name="supportsAltitude()Z" deprecated="31"/>
+		<method name="supportsBearing()Z" deprecated="31"/>
+		<method name="supportsSpeed()Z" deprecated="31"/>
+		<field name="AVAILABLE" deprecated="29"/>
+		<field name="OUT_OF_SERVICE" deprecated="29"/>
+		<field name="TEMPORARILY_UNAVAILABLE" deprecated="29"/>
+	</class>
+	<class name="android/location/LocationRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDurationMillis()J"/>
+		<method name="getIntervalMillis()J"/>
+		<method name="getMaxUpdateDelayMillis()J"/>
+		<method name="getMaxUpdates()I"/>
+		<method name="getMinUpdateDistanceMeters()F"/>
+		<method name="getMinUpdateIntervalMillis()J"/>
+		<method name="getQuality()I"/>
+		<field name="CREATOR"/>
+		<field name="PASSIVE_INTERVAL"/>
+		<field name="QUALITY_BALANCED_POWER_ACCURACY"/>
+		<field name="QUALITY_HIGH_ACCURACY"/>
+		<field name="QUALITY_LOW_POWER"/>
+	</class>
+	<class name="android/location/LocationRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(Landroid/location/LocationRequest;)V"/>
+		<method name="build()Landroid/location/LocationRequest;"/>
+		<method name="clearMinUpdateIntervalMillis()Landroid/location/LocationRequest$Builder;"/>
+		<method name="setDurationMillis(J)Landroid/location/LocationRequest$Builder;"/>
+		<method name="setIntervalMillis(J)Landroid/location/LocationRequest$Builder;"/>
+		<method name="setMaxUpdateDelayMillis(J)Landroid/location/LocationRequest$Builder;"/>
+		<method name="setMaxUpdates(I)Landroid/location/LocationRequest$Builder;"/>
+		<method name="setMinUpdateDistanceMeters(F)Landroid/location/LocationRequest$Builder;"/>
+		<method name="setMinUpdateIntervalMillis(J)Landroid/location/LocationRequest$Builder;"/>
+		<method name="setQuality(I)Landroid/location/LocationRequest$Builder;"/>
+	</class>
+	<class name="android/location/OnNmeaMessageListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onNmeaMessage(Ljava/lang/String;J)V"/>
+	</class>
+	<class name="android/location/SettingInjectorService" since="19">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="onGetEnabled()Z"/>
+		<method name="onGetSummary()Ljava/lang/String;" deprecated="21"/>
+		<method name="refreshSettings(Landroid/content/Context;)V" since="29"/>
+		<field name="ACTION_INJECTED_SETTING_CHANGED"/>
+		<field name="ACTION_SERVICE_INTENT"/>
+		<field name="ATTRIBUTES_NAME"/>
+		<field name="META_DATA_NAME"/>
+	</class>
+	<class name="android/location/provider/ProviderProperties" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAccuracy()I"/>
+		<method name="getPowerUsage()I"/>
+		<method name="hasAltitudeSupport()Z"/>
+		<method name="hasBearingSupport()Z"/>
+		<method name="hasCellRequirement()Z"/>
+		<method name="hasMonetaryCost()Z"/>
+		<method name="hasNetworkRequirement()Z"/>
+		<method name="hasSatelliteRequirement()Z"/>
+		<method name="hasSpeedSupport()Z"/>
+		<field name="ACCURACY_COARSE"/>
+		<field name="ACCURACY_FINE"/>
+		<field name="CREATOR"/>
+		<field name="POWER_USAGE_HIGH"/>
+		<field name="POWER_USAGE_LOW"/>
+		<field name="POWER_USAGE_MEDIUM"/>
+	</class>
+	<class name="android/location/provider/ProviderProperties$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/location/provider/ProviderProperties;)V"/>
+		<method name="build()Landroid/location/provider/ProviderProperties;"/>
+		<method name="setAccuracy(I)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setHasAltitudeSupport(Z)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setHasBearingSupport(Z)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setHasCellRequirement(Z)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setHasMonetaryCost(Z)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setHasNetworkRequirement(Z)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setHasSatelliteRequirement(Z)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setHasSpeedSupport(Z)Landroid/location/provider/ProviderProperties$Builder;"/>
+		<method name="setPowerUsage(I)Landroid/location/provider/ProviderProperties$Builder;"/>
+	</class>
+	<class name="android/media/ApplicationMediaCapabilities" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createFromXml(Lorg/xmlpull/v1/XmlPullParser;)Landroid/media/ApplicationMediaCapabilities;"/>
+		<method name="getSupportedHdrTypes()Ljava/util/List;"/>
+		<method name="getSupportedVideoMimeTypes()Ljava/util/List;"/>
+		<method name="getUnsupportedHdrTypes()Ljava/util/List;"/>
+		<method name="getUnsupportedVideoMimeTypes()Ljava/util/List;"/>
+		<method name="isFormatSpecified(Ljava/lang/String;)Z"/>
+		<method name="isHdrTypeSupported(Ljava/lang/String;)Z"/>
+		<method name="isVideoMimeTypeSupported(Ljava/lang/String;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/ApplicationMediaCapabilities$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addSupportedHdrType(Ljava/lang/String;)Landroid/media/ApplicationMediaCapabilities$Builder;"/>
+		<method name="addSupportedVideoMimeType(Ljava/lang/String;)Landroid/media/ApplicationMediaCapabilities$Builder;"/>
+		<method name="addUnsupportedHdrType(Ljava/lang/String;)Landroid/media/ApplicationMediaCapabilities$Builder;"/>
+		<method name="addUnsupportedVideoMimeType(Ljava/lang/String;)Landroid/media/ApplicationMediaCapabilities$Builder;"/>
+		<method name="build()Landroid/media/ApplicationMediaCapabilities;"/>
+	</class>
+	<class name="android/media/AsyncPlayer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="play(Landroid/content/Context;Landroid/net/Uri;ZI)V" deprecated="23"/>
+		<method name="play(Landroid/content/Context;Landroid/net/Uri;ZLandroid/media/AudioAttributes;)V" since="23"/>
+		<method name="stop()V"/>
+	</class>
+	<class name="android/media/AudioAttributes" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="areHapticChannelsMuted()Z" since="29"/>
+		<method name="getAllowedCapturePolicy()I" since="29"/>
+		<method name="getContentType()I"/>
+		<method name="getFlags()I"/>
+		<method name="getSpatializationBehavior()I" since="33"/>
+		<method name="getUsage()I"/>
+		<method name="getVolumeControlStream()I" since="26"/>
+		<method name="isContentSpatialized()Z" since="33"/>
+		<field name="ALLOW_CAPTURE_BY_ALL" since="29"/>
+		<field name="ALLOW_CAPTURE_BY_NONE" since="29"/>
+		<field name="ALLOW_CAPTURE_BY_SYSTEM" since="29"/>
+		<field name="CONTENT_TYPE_MOVIE"/>
+		<field name="CONTENT_TYPE_MUSIC"/>
+		<field name="CONTENT_TYPE_SONIFICATION"/>
+		<field name="CONTENT_TYPE_SPEECH"/>
+		<field name="CONTENT_TYPE_UNKNOWN"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_AUDIBILITY_ENFORCED"/>
+		<field name="FLAG_HW_AV_SYNC"/>
+		<field name="FLAG_LOW_LATENCY" since="24" deprecated="26"/>
+		<field name="SPATIALIZATION_BEHAVIOR_AUTO" since="33"/>
+		<field name="SPATIALIZATION_BEHAVIOR_NEVER" since="33"/>
+		<field name="USAGE_ALARM"/>
+		<field name="USAGE_ASSISTANCE_ACCESSIBILITY"/>
+		<field name="USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
+		<field name="USAGE_ASSISTANCE_SONIFICATION"/>
+		<field name="USAGE_ASSISTANT" since="26"/>
+		<field name="USAGE_GAME"/>
+		<field name="USAGE_MEDIA"/>
+		<field name="USAGE_NOTIFICATION"/>
+		<field name="USAGE_NOTIFICATION_COMMUNICATION_DELAYED"/>
+		<field name="USAGE_NOTIFICATION_COMMUNICATION_INSTANT"/>
+		<field name="USAGE_NOTIFICATION_COMMUNICATION_REQUEST"/>
+		<field name="USAGE_NOTIFICATION_EVENT"/>
+		<field name="USAGE_NOTIFICATION_RINGTONE"/>
+		<field name="USAGE_UNKNOWN"/>
+		<field name="USAGE_VOICE_COMMUNICATION"/>
+		<field name="USAGE_VOICE_COMMUNICATION_SIGNALLING"/>
+	</class>
+	<class name="android/media/AudioAttributes$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/media/AudioAttributes;)V"/>
+		<method name="build()Landroid/media/AudioAttributes;"/>
+		<method name="setAllowedCapturePolicy(I)Landroid/media/AudioAttributes$Builder;" since="29"/>
+		<method name="setContentType(I)Landroid/media/AudioAttributes$Builder;"/>
+		<method name="setFlags(I)Landroid/media/AudioAttributes$Builder;"/>
+		<method name="setHapticChannelsMuted(Z)Landroid/media/AudioAttributes$Builder;" since="29"/>
+		<method name="setIsContentSpatialized(Z)Landroid/media/AudioAttributes$Builder;" since="33"/>
+		<method name="setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;"/>
+		<method name="setSpatializationBehavior(I)Landroid/media/AudioAttributes$Builder;" since="33"/>
+		<method name="setUsage(I)Landroid/media/AudioAttributes$Builder;"/>
+	</class>
+	<class name="android/media/AudioDescriptor" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDescriptor()[B"/>
+		<method name="getEncapsulationType()I"/>
+		<method name="getStandard()I"/>
+		<field name="STANDARD_EDID"/>
+		<field name="STANDARD_NONE"/>
+	</class>
+	<class name="android/media/AudioDeviceCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAudioDevicesAdded([Landroid/media/AudioDeviceInfo;)V"/>
+		<method name="onAudioDevicesRemoved([Landroid/media/AudioDeviceInfo;)V"/>
+	</class>
+	<class name="android/media/AudioDeviceInfo" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getAddress()Ljava/lang/String;" since="28"/>
+		<method name="getAudioDescriptors()Ljava/util/List;" since="31"/>
+		<method name="getAudioProfiles()Ljava/util/List;" since="31"/>
+		<method name="getChannelCounts()[I"/>
+		<method name="getChannelIndexMasks()[I"/>
+		<method name="getChannelMasks()[I"/>
+		<method name="getEncapsulationMetadataTypes()[I" since="30"/>
+		<method name="getEncapsulationModes()[I" since="30"/>
+		<method name="getEncodings()[I"/>
+		<method name="getId()I"/>
+		<method name="getProductName()Ljava/lang/CharSequence;"/>
+		<method name="getSampleRates()[I"/>
+		<method name="getType()I"/>
+		<method name="isSink()Z"/>
+		<method name="isSource()Z"/>
+		<field name="TYPE_AUX_LINE"/>
+		<field name="TYPE_BLE_HEADSET" since="31"/>
+		<field name="TYPE_BLE_SPEAKER" since="31"/>
+		<field name="TYPE_BLUETOOTH_A2DP"/>
+		<field name="TYPE_BLUETOOTH_SCO"/>
+		<field name="TYPE_BUILTIN_EARPIECE"/>
+		<field name="TYPE_BUILTIN_MIC"/>
+		<field name="TYPE_BUILTIN_SPEAKER"/>
+		<field name="TYPE_BUILTIN_SPEAKER_SAFE" since="30"/>
+		<field name="TYPE_BUS" since="24"/>
+		<field name="TYPE_DOCK"/>
+		<field name="TYPE_FM"/>
+		<field name="TYPE_FM_TUNER"/>
+		<field name="TYPE_HDMI"/>
+		<field name="TYPE_HDMI_ARC"/>
+		<field name="TYPE_HDMI_EARC" since="31"/>
+		<field name="TYPE_HEARING_AID" since="28"/>
+		<field name="TYPE_IP"/>
+		<field name="TYPE_LINE_ANALOG"/>
+		<field name="TYPE_LINE_DIGITAL"/>
+		<field name="TYPE_REMOTE_SUBMIX" since="31"/>
+		<field name="TYPE_TELEPHONY"/>
+		<field name="TYPE_TV_TUNER"/>
+		<field name="TYPE_UNKNOWN"/>
+		<field name="TYPE_USB_ACCESSORY"/>
+		<field name="TYPE_USB_DEVICE"/>
+		<field name="TYPE_USB_HEADSET" since="26"/>
+		<field name="TYPE_WIRED_HEADPHONES"/>
+		<field name="TYPE_WIRED_HEADSET"/>
+	</class>
+	<class name="android/media/AudioFocusRequest" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="acceptsDelayedFocusGain()Z"/>
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
+		<method name="getFocusGain()I"/>
+		<method name="willPauseWhenDucked()Z"/>
+	</class>
+	<class name="android/media/AudioFocusRequest$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/media/AudioFocusRequest;)V"/>
+		<method name="build()Landroid/media/AudioFocusRequest;"/>
+		<method name="setAcceptsDelayedFocusGain(Z)Landroid/media/AudioFocusRequest$Builder;"/>
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioFocusRequest$Builder;"/>
+		<method name="setFocusGain(I)Landroid/media/AudioFocusRequest$Builder;"/>
+		<method name="setForceDucking(Z)Landroid/media/AudioFocusRequest$Builder;" since="28"/>
+		<method name="setOnAudioFocusChangeListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;)Landroid/media/AudioFocusRequest$Builder;"/>
+		<method name="setOnAudioFocusChangeListener(Landroid/media/AudioManager$OnAudioFocusChangeListener;Landroid/os/Handler;)Landroid/media/AudioFocusRequest$Builder;"/>
+		<method name="setWillPauseWhenDucked(Z)Landroid/media/AudioFocusRequest$Builder;"/>
+	</class>
+	<class name="android/media/AudioFormat" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="24"/>
+		<method name="&lt;init>()V" removed="21"/>
+		<method name="getChannelCount()I" since="23"/>
+		<method name="getChannelIndexMask()I" since="23"/>
+		<method name="getChannelMask()I" since="21"/>
+		<method name="getEncoding()I" since="21"/>
+		<method name="getFrameSizeInBytes()I" since="29"/>
+		<method name="getSampleRate()I" since="21"/>
+		<field name="CHANNEL_CONFIGURATION_DEFAULT" deprecated="15"/>
+		<field name="CHANNEL_CONFIGURATION_INVALID" deprecated="15"/>
+		<field name="CHANNEL_CONFIGURATION_MONO" deprecated="15"/>
+		<field name="CHANNEL_CONFIGURATION_STEREO" deprecated="15"/>
+		<field name="CHANNEL_INVALID" since="5"/>
+		<field name="CHANNEL_IN_BACK" since="5"/>
+		<field name="CHANNEL_IN_BACK_PROCESSED" since="5"/>
+		<field name="CHANNEL_IN_DEFAULT" since="5"/>
+		<field name="CHANNEL_IN_FRONT" since="5"/>
+		<field name="CHANNEL_IN_FRONT_PROCESSED" since="5"/>
+		<field name="CHANNEL_IN_LEFT" since="5"/>
+		<field name="CHANNEL_IN_LEFT_PROCESSED" since="5"/>
+		<field name="CHANNEL_IN_MONO" since="5"/>
+		<field name="CHANNEL_IN_PRESSURE" since="5"/>
+		<field name="CHANNEL_IN_RIGHT" since="5"/>
+		<field name="CHANNEL_IN_RIGHT_PROCESSED" since="5"/>
+		<field name="CHANNEL_IN_STEREO" since="5"/>
+		<field name="CHANNEL_IN_VOICE_DNLINK" since="5"/>
+		<field name="CHANNEL_IN_VOICE_UPLINK" since="5"/>
+		<field name="CHANNEL_IN_X_AXIS" since="5"/>
+		<field name="CHANNEL_IN_Y_AXIS" since="5"/>
+		<field name="CHANNEL_IN_Z_AXIS" since="5"/>
+		<field name="CHANNEL_OUT_5POINT1" since="5"/>
+		<field name="CHANNEL_OUT_5POINT1POINT2" since="33"/>
+		<field name="CHANNEL_OUT_5POINT1POINT4" since="33"/>
+		<field name="CHANNEL_OUT_7POINT1" since="5" deprecated="23"/>
+		<field name="CHANNEL_OUT_7POINT1POINT2" since="33"/>
+		<field name="CHANNEL_OUT_7POINT1POINT4" since="33"/>
+		<field name="CHANNEL_OUT_7POINT1_SURROUND" since="23"/>
+		<field name="CHANNEL_OUT_9POINT1POINT4" since="33"/>
+		<field name="CHANNEL_OUT_9POINT1POINT6" since="33"/>
+		<field name="CHANNEL_OUT_BACK_CENTER" since="5"/>
+		<field name="CHANNEL_OUT_BACK_LEFT" since="5"/>
+		<field name="CHANNEL_OUT_BACK_RIGHT" since="5"/>
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_RIGHT" since="33"/>
+		<field name="CHANNEL_OUT_DEFAULT" since="5"/>
+		<field name="CHANNEL_OUT_FRONT_CENTER" since="5"/>
+		<field name="CHANNEL_OUT_FRONT_LEFT" since="5"/>
+		<field name="CHANNEL_OUT_FRONT_LEFT_OF_CENTER" since="5"/>
+		<field name="CHANNEL_OUT_FRONT_RIGHT" since="5"/>
+		<field name="CHANNEL_OUT_FRONT_RIGHT_OF_CENTER" since="5"/>
+		<field name="CHANNEL_OUT_FRONT_WIDE_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_FRONT_WIDE_RIGHT" since="33"/>
+		<field name="CHANNEL_OUT_LOW_FREQUENCY" since="5"/>
+		<field name="CHANNEL_OUT_LOW_FREQUENCY_2" since="33"/>
+		<field name="CHANNEL_OUT_MONO" since="5"/>
+		<field name="CHANNEL_OUT_QUAD" since="5"/>
+		<field name="CHANNEL_OUT_SIDE_LEFT" since="21"/>
+		<field name="CHANNEL_OUT_SIDE_RIGHT" since="21"/>
+		<field name="CHANNEL_OUT_STEREO" since="5"/>
+		<field name="CHANNEL_OUT_SURROUND" since="5"/>
+		<field name="CHANNEL_OUT_TOP_BACK_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_TOP_BACK_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_BACK_RIGHT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_TOP_FRONT_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_TOP_FRONT_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_FRONT_RIGHT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_SIDE_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_SIDE_RIGHT" since="33"/>
+		<field name="CREATOR" since="24"/>
+		<field name="ENCODING_AAC_ELD" since="28"/>
+		<field name="ENCODING_AAC_HE_V1" since="28"/>
+		<field name="ENCODING_AAC_HE_V2" since="28"/>
+		<field name="ENCODING_AAC_LC" since="28"/>
+		<field name="ENCODING_AAC_XHE" since="28"/>
+		<field name="ENCODING_AC3" since="21"/>
+		<field name="ENCODING_AC4" since="28"/>
+		<field name="ENCODING_DEFAULT"/>
+		<field name="ENCODING_DOLBY_MAT" since="29"/>
+		<field name="ENCODING_DOLBY_TRUEHD" since="25"/>
+		<field name="ENCODING_DRA" since="31"/>
+		<field name="ENCODING_DTS" since="23"/>
+		<field name="ENCODING_DTS_HD" since="23"/>
+		<field name="ENCODING_DTS_UHD" since="31"/>
+		<field name="ENCODING_E_AC3" since="21"/>
+		<field name="ENCODING_E_AC3_JOC" since="28"/>
+		<field name="ENCODING_IEC61937" since="24"/>
+		<field name="ENCODING_INVALID"/>
+		<field name="ENCODING_MP3" since="28"/>
+		<field name="ENCODING_MPEGH_BL_L3" since="31"/>
+		<field name="ENCODING_MPEGH_BL_L4" since="31"/>
+		<field name="ENCODING_MPEGH_LC_L3" since="31"/>
+		<field name="ENCODING_MPEGH_LC_L4" since="31"/>
+		<field name="ENCODING_OPUS" since="30"/>
+		<field name="ENCODING_PCM_16BIT"/>
+		<field name="ENCODING_PCM_24BIT_PACKED" since="31"/>
+		<field name="ENCODING_PCM_32BIT" since="31"/>
+		<field name="ENCODING_PCM_8BIT"/>
+		<field name="ENCODING_PCM_FLOAT" since="21"/>
+		<field name="SAMPLE_RATE_UNSPECIFIED" since="24"/>
+	</class>
+	<class name="android/media/AudioFormat$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/media/AudioFormat;)V"/>
+		<method name="build()Landroid/media/AudioFormat;"/>
+		<method name="setChannelIndexMask(I)Landroid/media/AudioFormat$Builder;" since="23"/>
+		<method name="setChannelMask(I)Landroid/media/AudioFormat$Builder;"/>
+		<method name="setEncoding(I)Landroid/media/AudioFormat$Builder;"/>
+		<method name="setSampleRate(I)Landroid/media/AudioFormat$Builder;"/>
+	</class>
+	<class name="android/media/AudioManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="abandonAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;)I" since="8" deprecated="26"/>
+		<method name="abandonAudioFocusRequest(Landroid/media/AudioFocusRequest;)I" since="26"/>
+		<method name="addOnCommunicationDeviceChangedListener(Ljava/util/concurrent/Executor;Landroid/media/AudioManager$OnCommunicationDeviceChangedListener;)V" since="31"/>
+		<method name="addOnModeChangedListener(Ljava/util/concurrent/Executor;Landroid/media/AudioManager$OnModeChangedListener;)V" since="31"/>
+		<method name="adjustStreamVolume(III)V"/>
+		<method name="adjustSuggestedStreamVolume(III)V"/>
+		<method name="adjustVolume(II)V"/>
+		<method name="clearCommunicationDevice()V" since="31"/>
+		<method name="dispatchMediaKeyEvent(Landroid/view/KeyEvent;)V" since="19"/>
+		<method name="generateAudioSessionId()I" since="21"/>
+		<method name="getActivePlaybackConfigurations()Ljava/util/List;" since="26"/>
+		<method name="getActiveRecordingConfigurations()Ljava/util/List;" since="24"/>
+		<method name="getAllowedCapturePolicy()I" since="29"/>
+		<method name="getAudioHwSyncForSession(I)I" since="31"/>
+		<method name="getAvailableCommunicationDevices()Ljava/util/List;" since="31"/>
+		<method name="getCommunicationDevice()Landroid/media/AudioDeviceInfo;" since="31"/>
+		<method name="getDevices(I)[Landroid/media/AudioDeviceInfo;" since="23"/>
+		<method name="getEncodedSurroundMode()I" since="31"/>
+		<method name="getMicrophones()Ljava/util/List;" since="28"/>
+		<method name="getMode()I"/>
+		<method name="getParameters(Ljava/lang/String;)Ljava/lang/String;" since="5"/>
+		<method name="getPlaybackOffloadSupport(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)I" since="31"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" since="17"/>
+		<method name="getRingerMode()I"/>
+		<method name="getRouting(I)I" deprecated="15"/>
+		<method name="getSpatializer()Landroid/media/Spatializer;" since="33"/>
+		<method name="getStreamMaxVolume(I)I"/>
+		<method name="getStreamMinVolume(I)I" since="28"/>
+		<method name="getStreamVolume(I)I"/>
+		<method name="getStreamVolumeDb(III)F" since="28"/>
+		<method name="getVibrateSetting(I)I" deprecated="16"/>
+		<method name="isBluetoothA2dpOn()Z" since="3" deprecated="26"/>
+		<method name="isBluetoothScoAvailableOffCall()Z" since="8"/>
+		<method name="isBluetoothScoOn()Z"/>
+		<method name="isCallScreeningModeSupported()Z" since="30"/>
+		<method name="isHapticPlaybackSupported()Z" since="29"/>
+		<method name="isMicrophoneMute()Z"/>
+		<method name="isMusicActive()Z"/>
+		<method name="isOffloadedPlaybackSupported(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)Z" since="29"/>
+		<method name="isSpeakerphoneOn()Z"/>
+		<method name="isStreamMute(I)Z" since="23"/>
+		<method name="isSurroundFormatEnabled(I)Z" since="31"/>
+		<method name="isVolumeFixed()Z" since="21"/>
+		<method name="isWiredHeadsetOn()Z" since="5" deprecated="15"/>
+		<method name="loadSoundEffects()V"/>
+		<method name="playSoundEffect(I)V"/>
+		<method name="playSoundEffect(IF)V" since="3"/>
+		<method name="registerAudioDeviceCallback(Landroid/media/AudioDeviceCallback;Landroid/os/Handler;)V" since="23"/>
+		<method name="registerAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="registerAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;Landroid/os/Handler;)V" since="24"/>
+		<method name="registerMediaButtonEventReceiver(Landroid/app/PendingIntent;)V" since="18" deprecated="21"/>
+		<method name="registerMediaButtonEventReceiver(Landroid/content/ComponentName;)V" since="8" deprecated="21"/>
+		<method name="registerRemoteControlClient(Landroid/media/RemoteControlClient;)V" since="14" deprecated="21"/>
+		<method name="registerRemoteController(Landroid/media/RemoteController;)Z" since="19" deprecated="21"/>
+		<method name="removeOnCommunicationDeviceChangedListener(Landroid/media/AudioManager$OnCommunicationDeviceChangedListener;)V" since="31"/>
+		<method name="removeOnModeChangedListener(Landroid/media/AudioManager$OnModeChangedListener;)V" since="31"/>
+		<method name="requestAudioFocus(Landroid/media/AudioFocusRequest;)I" since="26"/>
+		<method name="requestAudioFocus(Landroid/media/AudioManager$OnAudioFocusChangeListener;II)I" since="8" deprecated="26"/>
+		<method name="setAllowedCapturePolicy(I)V" since="29"/>
+		<method name="setBluetoothA2dpOn(Z)V" since="3" deprecated="15"/>
+		<method name="setBluetoothScoOn(Z)V"/>
+		<method name="setCommunicationDevice(Landroid/media/AudioDeviceInfo;)Z" since="31"/>
+		<method name="setEncodedSurroundMode(I)Z" since="31"/>
+		<method name="setMicrophoneMute(Z)V"/>
+		<method name="setMode(I)V"/>
+		<method name="setParameters(Ljava/lang/String;)V" since="5"/>
+		<method name="setRingerMode(I)V"/>
+		<method name="setRouting(III)V" deprecated="15"/>
+		<method name="setSpeakerphoneOn(Z)V"/>
+		<method name="setStreamMute(IZ)V" deprecated="23"/>
+		<method name="setStreamSolo(IZ)V" deprecated="23"/>
+		<method name="setStreamVolume(III)V"/>
+		<method name="setSurroundFormatEnabled(IZ)Z" since="31"/>
+		<method name="setVibrateSetting(II)V" deprecated="16"/>
+		<method name="setWiredHeadsetOn(Z)V" since="5" deprecated="15"/>
+		<method name="shouldVibrate(I)Z" deprecated="16"/>
+		<method name="startBluetoothSco()V" since="8"/>
+		<method name="stopBluetoothSco()V" since="8"/>
+		<method name="unloadSoundEffects()V"/>
+		<method name="unregisterAudioDeviceCallback(Landroid/media/AudioDeviceCallback;)V" since="23"/>
+		<method name="unregisterAudioPlaybackCallback(Landroid/media/AudioManager$AudioPlaybackCallback;)V" since="26"/>
+		<method name="unregisterAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;)V" since="24"/>
+		<method name="unregisterMediaButtonEventReceiver(Landroid/app/PendingIntent;)V" since="18" deprecated="21"/>
+		<method name="unregisterMediaButtonEventReceiver(Landroid/content/ComponentName;)V" since="8" deprecated="21"/>
+		<method name="unregisterRemoteControlClient(Landroid/media/RemoteControlClient;)V" since="14" deprecated="21"/>
+		<method name="unregisterRemoteController(Landroid/media/RemoteController;)V" since="19" deprecated="21"/>
+		<field name="ACTION_AUDIO_BECOMING_NOISY" since="3"/>
+		<field name="ACTION_HDMI_AUDIO_PLUG" since="21"/>
+		<field name="ACTION_HEADSET_PLUG" since="21"/>
+		<field name="ACTION_MICROPHONE_MUTE_CHANGED" since="28"/>
+		<field name="ACTION_SCO_AUDIO_STATE_CHANGED" since="8" deprecated="15"/>
+		<field name="ACTION_SCO_AUDIO_STATE_UPDATED" since="14"/>
+		<field name="ACTION_SPEAKERPHONE_STATE_CHANGED" since="29"/>
+		<field name="ADJUST_LOWER"/>
+		<field name="ADJUST_MUTE" since="23"/>
+		<field name="ADJUST_RAISE"/>
+		<field name="ADJUST_SAME"/>
+		<field name="ADJUST_TOGGLE_MUTE" since="23"/>
+		<field name="ADJUST_UNMUTE" since="23"/>
+		<field name="AUDIOFOCUS_GAIN" since="8"/>
+		<field name="AUDIOFOCUS_GAIN_TRANSIENT" since="8"/>
+		<field name="AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE" since="19"/>
+		<field name="AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK" since="8"/>
+		<field name="AUDIOFOCUS_LOSS" since="8"/>
+		<field name="AUDIOFOCUS_LOSS_TRANSIENT" since="8"/>
+		<field name="AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK" since="8"/>
+		<field name="AUDIOFOCUS_NONE" since="26"/>
+		<field name="AUDIOFOCUS_REQUEST_DELAYED" since="26"/>
+		<field name="AUDIOFOCUS_REQUEST_FAILED" since="8"/>
+		<field name="AUDIOFOCUS_REQUEST_GRANTED" since="8"/>
+		<field name="AUDIO_SESSION_ID_GENERATE" since="21"/>
+		<field name="ENCODED_SURROUND_OUTPUT_ALWAYS" since="31"/>
+		<field name="ENCODED_SURROUND_OUTPUT_AUTO" since="31"/>
+		<field name="ENCODED_SURROUND_OUTPUT_MANUAL" since="31"/>
+		<field name="ENCODED_SURROUND_OUTPUT_NEVER" since="31"/>
+		<field name="ENCODED_SURROUND_OUTPUT_UNKNOWN" since="31"/>
+		<field name="ERROR" since="21"/>
+		<field name="ERROR_DEAD_OBJECT" since="21"/>
+		<field name="EXTRA_AUDIO_PLUG_STATE" since="21"/>
+		<field name="EXTRA_ENCODINGS" since="21"/>
+		<field name="EXTRA_MAX_CHANNEL_COUNT" since="21"/>
+		<field name="EXTRA_RINGER_MODE"/>
+		<field name="EXTRA_SCO_AUDIO_PREVIOUS_STATE" since="14"/>
+		<field name="EXTRA_SCO_AUDIO_STATE" since="8"/>
+		<field name="EXTRA_VIBRATE_SETTING" deprecated="16"/>
+		<field name="EXTRA_VIBRATE_TYPE" deprecated="16"/>
+		<field name="FLAG_ALLOW_RINGER_MODES"/>
+		<field name="FLAG_PLAY_SOUND"/>
+		<field name="FLAG_REMOVE_SOUND_AND_VIBRATE"/>
+		<field name="FLAG_SHOW_UI"/>
+		<field name="FLAG_VIBRATE"/>
+		<field name="FX_BACK" since="31"/>
+		<field name="FX_FOCUS_NAVIGATION_DOWN"/>
+		<field name="FX_FOCUS_NAVIGATION_LEFT"/>
+		<field name="FX_FOCUS_NAVIGATION_RIGHT"/>
+		<field name="FX_FOCUS_NAVIGATION_UP"/>
+		<field name="FX_KEYPRESS_DELETE" since="3"/>
+		<field name="FX_KEYPRESS_INVALID" since="19"/>
+		<field name="FX_KEYPRESS_RETURN" since="3"/>
+		<field name="FX_KEYPRESS_SPACEBAR" since="3"/>
+		<field name="FX_KEYPRESS_STANDARD" since="3"/>
+		<field name="FX_KEY_CLICK"/>
+		<field name="GET_DEVICES_ALL" since="23"/>
+		<field name="GET_DEVICES_INPUTS" since="23"/>
+		<field name="GET_DEVICES_OUTPUTS" since="23"/>
+		<field name="MODE_CALL_SCREENING" since="30"/>
+		<field name="MODE_CURRENT"/>
+		<field name="MODE_INVALID"/>
+		<field name="MODE_IN_CALL"/>
+		<field name="MODE_IN_COMMUNICATION" since="11"/>
+		<field name="MODE_NORMAL"/>
+		<field name="MODE_RINGTONE"/>
+		<field name="NUM_STREAMS" deprecated="15"/>
+		<field name="PLAYBACK_OFFLOAD_GAPLESS_SUPPORTED" since="31"/>
+		<field name="PLAYBACK_OFFLOAD_NOT_SUPPORTED" since="31"/>
+		<field name="PLAYBACK_OFFLOAD_SUPPORTED" since="31"/>
+		<field name="PROPERTY_OUTPUT_FRAMES_PER_BUFFER" since="17"/>
+		<field name="PROPERTY_OUTPUT_SAMPLE_RATE" since="17"/>
+		<field name="PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED" since="24"/>
+		<field name="PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND" since="23"/>
+		<field name="PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND" since="23"/>
+		<field name="RINGER_MODE_CHANGED_ACTION"/>
+		<field name="RINGER_MODE_NORMAL"/>
+		<field name="RINGER_MODE_SILENT"/>
+		<field name="RINGER_MODE_VIBRATE"/>
+		<field name="ROUTE_ALL" deprecated="15"/>
+		<field name="ROUTE_BLUETOOTH" deprecated="15"/>
+		<field name="ROUTE_BLUETOOTH_A2DP" since="3" deprecated="15"/>
+		<field name="ROUTE_BLUETOOTH_SCO" since="3" deprecated="15"/>
+		<field name="ROUTE_EARPIECE" deprecated="15"/>
+		<field name="ROUTE_HEADSET" deprecated="15"/>
+		<field name="ROUTE_SPEAKER" deprecated="15"/>
+		<field name="SCO_AUDIO_STATE_CONNECTED" since="8"/>
+		<field name="SCO_AUDIO_STATE_CONNECTING" since="14"/>
+		<field name="SCO_AUDIO_STATE_DISCONNECTED" since="8"/>
+		<field name="SCO_AUDIO_STATE_ERROR" since="8"/>
+		<field name="STREAM_ACCESSIBILITY" since="26"/>
+		<field name="STREAM_ALARM"/>
+		<field name="STREAM_DTMF" since="5"/>
+		<field name="STREAM_MUSIC"/>
+		<field name="STREAM_NOTIFICATION" since="3"/>
+		<field name="STREAM_RING"/>
+		<field name="STREAM_SYSTEM"/>
+		<field name="STREAM_VOICE_CALL"/>
+		<field name="USE_DEFAULT_STREAM_TYPE"/>
+		<field name="VIBRATE_SETTING_CHANGED_ACTION" deprecated="16"/>
+		<field name="VIBRATE_SETTING_OFF" deprecated="16"/>
+		<field name="VIBRATE_SETTING_ON" deprecated="16"/>
+		<field name="VIBRATE_SETTING_ONLY_SILENT" deprecated="16"/>
+		<field name="VIBRATE_TYPE_NOTIFICATION" deprecated="16"/>
+		<field name="VIBRATE_TYPE_RINGER" deprecated="16"/>
+	</class>
+	<class name="android/media/AudioManager$AudioPlaybackCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onPlaybackConfigChanged(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/media/AudioManager$AudioRecordingCallback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onRecordingConfigChanged(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/media/AudioManager$OnAudioFocusChangeListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="onAudioFocusChange(I)V"/>
+	</class>
+	<class name="android/media/AudioManager$OnCommunicationDeviceChangedListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onCommunicationDeviceChanged(Landroid/media/AudioDeviceInfo;)V"/>
+	</class>
+	<class name="android/media/AudioManager$OnModeChangedListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onModeChanged(I)V"/>
+	</class>
+	<class name="android/media/AudioMetadata" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="createMap()Landroid/media/AudioMetadataMap;"/>
+	</class>
+	<class name="android/media/AudioMetadata$Format" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="KEY_ATMOS_PRESENT"/>
+		<field name="KEY_AUDIO_ENCODING"/>
+		<field name="KEY_BIT_RATE"/>
+		<field name="KEY_BIT_WIDTH"/>
+		<field name="KEY_CHANNEL_MASK"/>
+		<field name="KEY_MIME"/>
+		<field name="KEY_PRESENTATION_CONTENT_CLASSIFIER" since="31"/>
+		<field name="KEY_PRESENTATION_ID" since="31"/>
+		<field name="KEY_PRESENTATION_LANGUAGE" since="31"/>
+		<field name="KEY_PROGRAM_ID" since="31"/>
+		<field name="KEY_SAMPLE_RATE"/>
+	</class>
+	<class name="android/media/AudioMetadata$Key" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getValueClass()Ljava/lang/Class;"/>
+	</class>
+	<class name="android/media/AudioMetadataMap" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/AudioMetadataReadMap"/>
+		<method name="remove(Landroid/media/AudioMetadata$Key;)Ljava/lang/Object;"/>
+		<method name="set(Landroid/media/AudioMetadata$Key;Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/media/AudioMetadataReadMap" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="containsKey(Landroid/media/AudioMetadata$Key;)Z"/>
+		<method name="dup()Landroid/media/AudioMetadataMap;"/>
+		<method name="get(Landroid/media/AudioMetadata$Key;)Ljava/lang/Object;"/>
+		<method name="size()I"/>
+	</class>
+	<class name="android/media/AudioPlaybackCaptureConfiguration" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getExcludeUids()[I"/>
+		<method name="getExcludeUsages()[I"/>
+		<method name="getMatchingUids()[I"/>
+		<method name="getMatchingUsages()[I"/>
+		<method name="getMediaProjection()Landroid/media/projection/MediaProjection;"/>
+	</class>
+	<class name="android/media/AudioPlaybackCaptureConfiguration$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/media/projection/MediaProjection;)V"/>
+		<method name="addMatchingUid(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+		<method name="addMatchingUsage(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+		<method name="build()Landroid/media/AudioPlaybackCaptureConfiguration;"/>
+		<method name="excludeUid(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+		<method name="excludeUsage(I)Landroid/media/AudioPlaybackCaptureConfiguration$Builder;"/>
+	</class>
+	<class name="android/media/AudioPlaybackConfiguration" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
+		<method name="getAudioDeviceInfo()Landroid/media/AudioDeviceInfo;" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/AudioPresentation" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getLabels()Ljava/util/Map;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getMasteringIndication()I"/>
+		<method name="getPresentationId()I" since="29"/>
+		<method name="getProgramId()I" since="29"/>
+		<method name="hasAudioDescription()Z"/>
+		<method name="hasDialogueEnhancement()Z"/>
+		<method name="hasSpokenSubtitles()Z"/>
+		<field name="CONTENT_COMMENTARY" since="31"/>
+		<field name="CONTENT_DIALOG" since="31"/>
+		<field name="CONTENT_EMERGENCY" since="31"/>
+		<field name="CONTENT_HEARING_IMPAIRED" since="31"/>
+		<field name="CONTENT_MAIN" since="31"/>
+		<field name="CONTENT_MUSIC_AND_EFFECTS" since="31"/>
+		<field name="CONTENT_UNKNOWN" since="31"/>
+		<field name="CONTENT_VISUALLY_IMPAIRED" since="31"/>
+		<field name="CONTENT_VOICEOVER" since="31"/>
+		<field name="MASTERED_FOR_3D"/>
+		<field name="MASTERED_FOR_HEADPHONE"/>
+		<field name="MASTERED_FOR_STEREO"/>
+		<field name="MASTERED_FOR_SURROUND"/>
+		<field name="MASTERING_NOT_INDICATED"/>
+	</class>
+	<class name="android/media/AudioPresentation$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/media/AudioPresentation;"/>
+		<method name="setHasAudioDescription(Z)Landroid/media/AudioPresentation$Builder;"/>
+		<method name="setHasDialogueEnhancement(Z)Landroid/media/AudioPresentation$Builder;"/>
+		<method name="setHasSpokenSubtitles(Z)Landroid/media/AudioPresentation$Builder;"/>
+		<method name="setLabels(Ljava/util/Map;)Landroid/media/AudioPresentation$Builder;"/>
+		<method name="setLocale(Landroid/icu/util/ULocale;)Landroid/media/AudioPresentation$Builder;"/>
+		<method name="setMasteringIndication(I)Landroid/media/AudioPresentation$Builder;"/>
+		<method name="setProgramId(I)Landroid/media/AudioPresentation$Builder;"/>
+	</class>
+	<class name="android/media/AudioProfile" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getChannelIndexMasks()[I"/>
+		<method name="getChannelMasks()[I"/>
+		<method name="getEncapsulationType()I"/>
+		<method name="getFormat()I"/>
+		<method name="getSampleRates()[I"/>
+		<field name="AUDIO_ENCAPSULATION_TYPE_IEC61937"/>
+		<field name="AUDIO_ENCAPSULATION_TYPE_NONE"/>
+	</class>
+	<class name="android/media/AudioRecord" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/AudioRecordingMonitor" since="29"/>
+		<implements name="android/media/AudioRouting" since="24"/>
+		<implements name="android/media/MicrophoneDirection" since="29"/>
+		<method name="&lt;init>(IIIII)V"/>
+		<method name="addOnRoutingChangedListener(Landroid/media/AudioRecord$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24"/>
+		<method name="getActiveMicrophones()Ljava/util/List;" since="28"/>
+		<method name="getAudioFormat()I"/>
+		<method name="getAudioSessionId()I" since="16"/>
+		<method name="getAudioSource()I"/>
+		<method name="getBufferSizeInFrames()I" since="23"/>
+		<method name="getChannelConfiguration()I"/>
+		<method name="getChannelCount()I"/>
+		<method name="getFormat()Landroid/media/AudioFormat;" since="23"/>
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31"/>
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28"/>
+		<method name="getMinBufferSize(III)I"/>
+		<method name="getNotificationMarkerPosition()I"/>
+		<method name="getPositionNotificationPeriod()I"/>
+		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
+		<method name="getRecordingState()I"/>
+		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
+		<method name="getSampleRate()I"/>
+		<method name="getState()I"/>
+		<method name="getTimestamp(Landroid/media/AudioTimestamp;I)I" since="24"/>
+		<method name="isPrivacySensitive()Z" since="30"/>
+		<method name="read(Ljava/nio/ByteBuffer;I)I"/>
+		<method name="read(Ljava/nio/ByteBuffer;II)I" since="23"/>
+		<method name="read([BII)I"/>
+		<method name="read([BIII)I" since="23"/>
+		<method name="read([FIII)I" since="23"/>
+		<method name="read([SII)I"/>
+		<method name="read([SIII)I" since="23"/>
+		<method name="release()V"/>
+		<method name="removeOnRoutingChangedListener(Landroid/media/AudioRecord$OnRoutingChangedListener;)V" since="23" deprecated="24"/>
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31"/>
+		<method name="setNotificationMarkerPosition(I)I"/>
+		<method name="setPositionNotificationPeriod(I)I"/>
+		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z" since="23"/>
+		<method name="setRecordPositionUpdateListener(Landroid/media/AudioRecord$OnRecordPositionUpdateListener;)V"/>
+		<method name="setRecordPositionUpdateListener(Landroid/media/AudioRecord$OnRecordPositionUpdateListener;Landroid/os/Handler;)V"/>
+		<method name="startRecording()V"/>
+		<method name="startRecording(Landroid/media/MediaSyncEvent;)V" since="16"/>
+		<method name="stop()V"/>
+		<field name="ERROR"/>
+		<field name="ERROR_BAD_VALUE"/>
+		<field name="ERROR_DEAD_OBJECT" since="24"/>
+		<field name="ERROR_INVALID_OPERATION"/>
+		<field name="READ_BLOCKING" since="23"/>
+		<field name="READ_NON_BLOCKING" since="23"/>
+		<field name="RECORDSTATE_RECORDING"/>
+		<field name="RECORDSTATE_STOPPED"/>
+		<field name="STATE_INITIALIZED"/>
+		<field name="STATE_UNINITIALIZED"/>
+		<field name="SUCCESS"/>
+	</class>
+	<class name="android/media/AudioRecord$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/media/AudioRecord;"/>
+		<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioRecord$Builder;"/>
+		<method name="setAudioPlaybackCaptureConfig(Landroid/media/AudioPlaybackCaptureConfiguration;)Landroid/media/AudioRecord$Builder;" since="29"/>
+		<method name="setAudioSource(I)Landroid/media/AudioRecord$Builder;"/>
+		<method name="setBufferSizeInBytes(I)Landroid/media/AudioRecord$Builder;"/>
+		<method name="setContext(Landroid/content/Context;)Landroid/media/AudioRecord$Builder;" since="31"/>
+		<method name="setPrivacySensitive(Z)Landroid/media/AudioRecord$Builder;" since="30"/>
+	</class>
+	<class name="android/media/AudioRecord$MetricsConstants" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="CHANNELS"/>
+		<field name="ENCODING"/>
+		<field name="LATENCY" deprecated="29"/>
+		<field name="SAMPLERATE"/>
+		<field name="SOURCE"/>
+	</class>
+	<class name="android/media/AudioRecord$OnRecordPositionUpdateListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onMarkerReached(Landroid/media/AudioRecord;)V"/>
+		<method name="onPeriodicNotification(Landroid/media/AudioRecord;)V"/>
+	</class>
+	<class name="android/media/AudioRecord$OnRoutingChangedListener" since="23" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24"/>
+		<method name="onRoutingChanged(Landroid/media/AudioRecord;)V" deprecated="29"/>
+	</class>
+	<class name="android/media/AudioRecordingConfiguration" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAudioDevice()Landroid/media/AudioDeviceInfo;"/>
+		<method name="getAudioSource()I" since="29"/>
+		<method name="getClientAudioSessionId()I"/>
+		<method name="getClientAudioSource()I"/>
+		<method name="getClientEffects()Ljava/util/List;" since="29"/>
+		<method name="getClientFormat()Landroid/media/AudioFormat;"/>
+		<method name="getEffects()Ljava/util/List;" since="29"/>
+		<method name="getFormat()Landroid/media/AudioFormat;"/>
+		<method name="isClientSilenced()Z" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/AudioRecordingMonitor" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getActiveRecordingConfiguration()Landroid/media/AudioRecordingConfiguration;"/>
+		<method name="registerAudioRecordingCallback(Ljava/util/concurrent/Executor;Landroid/media/AudioManager$AudioRecordingCallback;)V"/>
+		<method name="unregisterAudioRecordingCallback(Landroid/media/AudioManager$AudioRecordingCallback;)V"/>
+	</class>
+	<class name="android/media/AudioRouting" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="addOnRoutingChangedListener(Landroid/media/AudioRouting$OnRoutingChangedListener;Landroid/os/Handler;)V"/>
+		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;"/>
+		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;"/>
+		<method name="removeOnRoutingChangedListener(Landroid/media/AudioRouting$OnRoutingChangedListener;)V"/>
+		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z"/>
+	</class>
+	<class name="android/media/AudioRouting$OnRoutingChangedListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onRoutingChanged(Landroid/media/AudioRouting;)V"/>
+	</class>
+	<class name="android/media/AudioTimestamp" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="TIMEBASE_BOOTTIME" since="24"/>
+		<field name="TIMEBASE_MONOTONIC" since="24"/>
+		<field name="framePosition"/>
+		<field name="nanoTime"/>
+	</class>
+	<class name="android/media/AudioTrack" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/AudioRouting" since="24"/>
+		<implements name="android/media/VolumeAutomation" since="26"/>
+		<method name="&lt;init>(IIIIII)V" deprecated="26"/>
+		<method name="&lt;init>(IIIIIII)V" since="9" deprecated="26"/>
+		<method name="&lt;init>(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;III)V" since="21"/>
+		<method name="addOnCodecFormatChangedListener(Ljava/util/concurrent/Executor;Landroid/media/AudioTrack$OnCodecFormatChangedListener;)V" since="30"/>
+		<method name="addOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;Landroid/os/Handler;)V" since="23" deprecated="24"/>
+		<method name="attachAuxEffect(I)I" since="9"/>
+		<method name="flush()V"/>
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" since="29"/>
+		<method name="getAudioDescriptionMixLeveldB()F" since="30"/>
+		<method name="getAudioFormat()I"/>
+		<method name="getAudioSessionId()I" since="9"/>
+		<method name="getBufferCapacityInFrames()I" since="24"/>
+		<method name="getBufferSizeInFrames()I" since="23"/>
+		<method name="getChannelConfiguration()I"/>
+		<method name="getChannelCount()I"/>
+		<method name="getDualMonoMode()I" since="30"/>
+		<method name="getFormat()Landroid/media/AudioFormat;" since="23"/>
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31"/>
+		<method name="getMaxVolume()F"/>
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28"/>
+		<method name="getMinBufferSize(III)I"/>
+		<method name="getMinVolume()F"/>
+		<method name="getNativeFrameCount()I" deprecated="19"/>
+		<method name="getNativeOutputSampleRate(I)I"/>
+		<method name="getNotificationMarkerPosition()I"/>
+		<method name="getOffloadDelay()I" since="29"/>
+		<method name="getOffloadPadding()I" since="29"/>
+		<method name="getPerformanceMode()I" since="26"/>
+		<method name="getPlayState()I"/>
+		<method name="getPlaybackHeadPosition()I"/>
+		<method name="getPlaybackParams()Landroid/media/PlaybackParams;" since="23"/>
+		<method name="getPlaybackRate()I"/>
+		<method name="getPositionNotificationPeriod()I"/>
+		<method name="getPreferredDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
+		<method name="getRoutedDevice()Landroid/media/AudioDeviceInfo;" since="23"/>
+		<method name="getSampleRate()I"/>
+		<method name="getStartThresholdInFrames()I" since="31"/>
+		<method name="getState()I"/>
+		<method name="getStreamType()I"/>
+		<method name="getTimestamp(Landroid/media/AudioTimestamp;)Z" since="19"/>
+		<method name="getUnderrunCount()I" since="24"/>
+		<method name="isDirectPlaybackSupported(Landroid/media/AudioFormat;Landroid/media/AudioAttributes;)Z" since="29"/>
+		<method name="isOffloadedPlayback()Z" since="29"/>
+		<method name="pause()V"/>
+		<method name="play()V"/>
+		<method name="registerStreamEventCallback(Ljava/util/concurrent/Executor;Landroid/media/AudioTrack$StreamEventCallback;)V" since="29"/>
+		<method name="release()V"/>
+		<method name="reloadStaticData()I"/>
+		<method name="removeOnCodecFormatChangedListener(Landroid/media/AudioTrack$OnCodecFormatChangedListener;)V" since="30"/>
+		<method name="removeOnRoutingChangedListener(Landroid/media/AudioTrack$OnRoutingChangedListener;)V" since="23" deprecated="24"/>
+		<method name="setAudioDescriptionMixLeveldB(F)Z" since="30"/>
+		<method name="setAuxEffectSendLevel(F)I" since="9"/>
+		<method name="setBufferSizeInFrames(I)I" since="24"/>
+		<method name="setDualMonoMode(I)Z" since="30"/>
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31"/>
+		<method name="setLoopPoints(III)I"/>
+		<method name="setNotificationMarkerPosition(I)I"/>
+		<method name="setOffloadDelayPadding(II)V" since="29"/>
+		<method name="setOffloadEndOfStream()V" since="29"/>
+		<method name="setPlaybackHeadPosition(I)I"/>
+		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
+		<method name="setPlaybackPositionUpdateListener(Landroid/media/AudioTrack$OnPlaybackPositionUpdateListener;)V"/>
+		<method name="setPlaybackPositionUpdateListener(Landroid/media/AudioTrack$OnPlaybackPositionUpdateListener;Landroid/os/Handler;)V"/>
+		<method name="setPlaybackRate(I)I"/>
+		<method name="setPositionNotificationPeriod(I)I"/>
+		<method name="setPreferredDevice(Landroid/media/AudioDeviceInfo;)Z" since="23"/>
+		<method name="setPresentation(Landroid/media/AudioPresentation;)I" since="28"/>
+		<method name="setStartThresholdInFrames(I)I" since="31"/>
+		<method name="setState(I)V" deprecated="19"/>
+		<method name="setStereoVolume(FF)I" deprecated="21"/>
+		<method name="setVolume(F)I" since="21"/>
+		<method name="stop()V"/>
+		<method name="unregisterStreamEventCallback(Landroid/media/AudioTrack$StreamEventCallback;)V" since="29"/>
+		<method name="write(Ljava/nio/ByteBuffer;II)I" since="21"/>
+		<method name="write(Ljava/nio/ByteBuffer;IIJ)I" since="23"/>
+		<method name="write([BII)I"/>
+		<method name="write([BIII)I" since="23"/>
+		<method name="write([FIII)I" since="21"/>
+		<method name="write([SII)I"/>
+		<method name="write([SIII)I" since="23"/>
+		<field name="DUAL_MONO_MODE_LL" since="30"/>
+		<field name="DUAL_MONO_MODE_LR" since="30"/>
+		<field name="DUAL_MONO_MODE_OFF" since="30"/>
+		<field name="DUAL_MONO_MODE_RR" since="30"/>
+		<field name="ENCAPSULATION_METADATA_TYPE_DVB_AD_DESCRIPTOR" since="30"/>
+		<field name="ENCAPSULATION_METADATA_TYPE_FRAMEWORK_TUNER" since="30"/>
+		<field name="ENCAPSULATION_MODE_ELEMENTARY_STREAM" since="30"/>
+		<field name="ENCAPSULATION_MODE_NONE" since="30"/>
+		<field name="ERROR"/>
+		<field name="ERROR_BAD_VALUE"/>
+		<field name="ERROR_DEAD_OBJECT" since="24"/>
+		<field name="ERROR_INVALID_OPERATION"/>
+		<field name="MODE_STATIC"/>
+		<field name="MODE_STREAM"/>
+		<field name="PERFORMANCE_MODE_LOW_LATENCY" since="26"/>
+		<field name="PERFORMANCE_MODE_NONE" since="26"/>
+		<field name="PERFORMANCE_MODE_POWER_SAVING" since="26"/>
+		<field name="PLAYSTATE_PAUSED"/>
+		<field name="PLAYSTATE_PLAYING"/>
+		<field name="PLAYSTATE_STOPPED"/>
+		<field name="STATE_INITIALIZED"/>
+		<field name="STATE_NO_STATIC_DATA"/>
+		<field name="STATE_UNINITIALIZED"/>
+		<field name="SUCCESS"/>
+		<field name="WRITE_BLOCKING" since="21"/>
+		<field name="WRITE_NON_BLOCKING" since="21"/>
+	</class>
+	<class name="android/media/AudioTrack$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/media/AudioTrack;"/>
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/AudioTrack$Builder;"/>
+		<method name="setAudioFormat(Landroid/media/AudioFormat;)Landroid/media/AudioTrack$Builder;"/>
+		<method name="setBufferSizeInBytes(I)Landroid/media/AudioTrack$Builder;"/>
+		<method name="setEncapsulationMode(I)Landroid/media/AudioTrack$Builder;" since="30"/>
+		<method name="setOffloadedPlayback(Z)Landroid/media/AudioTrack$Builder;" since="29"/>
+		<method name="setPerformanceMode(I)Landroid/media/AudioTrack$Builder;" since="26"/>
+		<method name="setSessionId(I)Landroid/media/AudioTrack$Builder;"/>
+		<method name="setTransferMode(I)Landroid/media/AudioTrack$Builder;"/>
+	</class>
+	<class name="android/media/AudioTrack$MetricsConstants" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="CHANNELMASK" deprecated="29"/>
+		<field name="CONTENTTYPE"/>
+		<field name="SAMPLERATE" deprecated="29"/>
+		<field name="STREAMTYPE"/>
+		<field name="USAGE"/>
+	</class>
+	<class name="android/media/AudioTrack$OnCodecFormatChangedListener" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onCodecFormatChanged(Landroid/media/AudioTrack;Landroid/media/AudioMetadataReadMap;)V"/>
+	</class>
+	<class name="android/media/AudioTrack$OnPlaybackPositionUpdateListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onMarkerReached(Landroid/media/AudioTrack;)V"/>
+		<method name="onPeriodicNotification(Landroid/media/AudioTrack;)V"/>
+	</class>
+	<class name="android/media/AudioTrack$OnRoutingChangedListener" since="23" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/AudioRouting$OnRoutingChangedListener" since="24"/>
+		<method name="onRoutingChanged(Landroid/media/AudioTrack;)V" deprecated="29"/>
+	</class>
+	<class name="android/media/AudioTrack$StreamEventCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDataRequest(Landroid/media/AudioTrack;I)V"/>
+		<method name="onPresentationEnded(Landroid/media/AudioTrack;)V"/>
+		<method name="onTearDown(Landroid/media/AudioTrack;)V"/>
+	</class>
+	<class name="android/media/CamcorderProfile" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="get(I)Landroid/media/CamcorderProfile;" deprecated="31"/>
+		<method name="get(II)Landroid/media/CamcorderProfile;" since="9" deprecated="31"/>
+		<method name="getAll(Ljava/lang/String;I)Landroid/media/EncoderProfiles;" since="31"/>
+		<method name="hasProfile(I)Z" since="11"/>
+		<method name="hasProfile(II)Z" since="11"/>
+		<field name="QUALITY_1080P" since="11"/>
+		<field name="QUALITY_2160P" since="21"/>
+		<field name="QUALITY_2K" since="30"/>
+		<field name="QUALITY_480P" since="11"/>
+		<field name="QUALITY_4KDCI" since="30"/>
+		<field name="QUALITY_720P" since="11"/>
+		<field name="QUALITY_8KUHD" since="31"/>
+		<field name="QUALITY_CIF" since="11"/>
+		<field name="QUALITY_HIGH"/>
+		<field name="QUALITY_HIGH_SPEED_1080P" since="21"/>
+		<field name="QUALITY_HIGH_SPEED_2160P" since="21"/>
+		<field name="QUALITY_HIGH_SPEED_480P" since="21"/>
+		<field name="QUALITY_HIGH_SPEED_4KDCI" since="30"/>
+		<field name="QUALITY_HIGH_SPEED_720P" since="21"/>
+		<field name="QUALITY_HIGH_SPEED_CIF" since="30"/>
+		<field name="QUALITY_HIGH_SPEED_HIGH" since="21"/>
+		<field name="QUALITY_HIGH_SPEED_LOW" since="21"/>
+		<field name="QUALITY_HIGH_SPEED_VGA" since="30"/>
+		<field name="QUALITY_LOW"/>
+		<field name="QUALITY_QCIF" since="11"/>
+		<field name="QUALITY_QHD" since="30"/>
+		<field name="QUALITY_QVGA" since="15"/>
+		<field name="QUALITY_TIME_LAPSE_1080P" since="11"/>
+		<field name="QUALITY_TIME_LAPSE_2160P" since="21"/>
+		<field name="QUALITY_TIME_LAPSE_2K" since="30"/>
+		<field name="QUALITY_TIME_LAPSE_480P" since="11"/>
+		<field name="QUALITY_TIME_LAPSE_4KDCI" since="30"/>
+		<field name="QUALITY_TIME_LAPSE_720P" since="11"/>
+		<field name="QUALITY_TIME_LAPSE_8KUHD" since="31"/>
+		<field name="QUALITY_TIME_LAPSE_CIF" since="11"/>
+		<field name="QUALITY_TIME_LAPSE_HIGH" since="11"/>
+		<field name="QUALITY_TIME_LAPSE_LOW" since="11"/>
+		<field name="QUALITY_TIME_LAPSE_QCIF" since="11"/>
+		<field name="QUALITY_TIME_LAPSE_QHD" since="30"/>
+		<field name="QUALITY_TIME_LAPSE_QVGA" since="15"/>
+		<field name="QUALITY_TIME_LAPSE_VGA" since="30"/>
+		<field name="QUALITY_VGA" since="30"/>
+		<field name="audioBitRate"/>
+		<field name="audioChannels"/>
+		<field name="audioCodec"/>
+		<field name="audioSampleRate"/>
+		<field name="duration"/>
+		<field name="fileFormat"/>
+		<field name="quality"/>
+		<field name="videoBitRate"/>
+		<field name="videoCodec"/>
+		<field name="videoFrameHeight"/>
+		<field name="videoFrameRate"/>
+		<field name="videoFrameWidth"/>
+	</class>
+	<class name="android/media/CameraProfile" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getJpegEncodingQualityParameter(I)I"/>
+		<method name="getJpegEncodingQualityParameter(II)I" since="9"/>
+		<field name="QUALITY_HIGH"/>
+		<field name="QUALITY_LOW"/>
+		<field name="QUALITY_MEDIUM"/>
+	</class>
+	<class name="android/media/DeniedByServerException" since="18">
+		<extends name="android/media/MediaDrmException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/DrmInitData" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="get(Ljava/util/UUID;)Landroid/media/DrmInitData$SchemeInitData;" deprecated="30"/>
+		<method name="getSchemeInitDataAt(I)Landroid/media/DrmInitData$SchemeInitData;" since="30"/>
+		<method name="getSchemeInitDataCount()I" since="30"/>
+	</class>
+	<class name="android/media/DrmInitData$SchemeInitData" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/UUID;Ljava/lang/String;[B)V" since="31"/>
+		<field name="UUID_NIL" since="30"/>
+		<field name="data"/>
+		<field name="mimeType"/>
+		<field name="uuid" since="30"/>
+	</class>
+	<class name="android/media/EncoderProfiles" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getAudioProfiles()Ljava/util/List;"/>
+		<method name="getDefaultDurationSeconds()I"/>
+		<method name="getRecommendedFileFormat()I"/>
+		<method name="getVideoProfiles()Ljava/util/List;"/>
+	</class>
+	<class name="android/media/EncoderProfiles$AudioProfile" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getBitrate()I"/>
+		<method name="getChannels()I"/>
+		<method name="getCodec()I"/>
+		<method name="getMediaType()Ljava/lang/String;"/>
+		<method name="getProfile()I"/>
+		<method name="getSampleRate()I"/>
+	</class>
+	<class name="android/media/EncoderProfiles$VideoProfile" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getBitrate()I"/>
+		<method name="getCodec()I"/>
+		<method name="getFrameRate()I"/>
+		<method name="getHeight()I"/>
+		<method name="getMediaType()Ljava/lang/String;"/>
+		<method name="getProfile()I"/>
+		<method name="getWidth()I"/>
+	</class>
+	<class name="android/media/ExifInterface" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/io/File;)V" since="29"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;)V" since="24"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V" since="24"/>
+		<method name="&lt;init>(Ljava/io/InputStream;I)V" since="30"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getAltitude(D)D" since="9"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getAttributeBytes(Ljava/lang/String;)[B" since="29"/>
+		<method name="getAttributeDouble(Ljava/lang/String;D)D" since="8"/>
+		<method name="getAttributeInt(Ljava/lang/String;I)I"/>
+		<method name="getAttributeRange(Ljava/lang/String;)[J" since="29"/>
+		<method name="getDateTime()J" since="31"/>
+		<method name="getDateTimeDigitized()J" since="31"/>
+		<method name="getDateTimeOriginal()J" since="31"/>
+		<method name="getGpsDateTime()J" since="31"/>
+		<method name="getLatLong([F)Z"/>
+		<method name="getThumbnail()[B"/>
+		<method name="getThumbnailBitmap()Landroid/graphics/Bitmap;" since="26"/>
+		<method name="getThumbnailBytes()[B" since="26"/>
+		<method name="getThumbnailRange()[J" since="24"/>
+		<method name="hasAttribute(Ljava/lang/String;)Z" since="29"/>
+		<method name="hasThumbnail()Z"/>
+		<method name="isSupportedMimeType(Ljava/lang/String;)Z" since="30"/>
+		<method name="isThumbnailCompressed()Z" since="26"/>
+		<method name="saveAttributes()V"/>
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="ORIENTATION_FLIP_HORIZONTAL"/>
+		<field name="ORIENTATION_FLIP_VERTICAL"/>
+		<field name="ORIENTATION_NORMAL"/>
+		<field name="ORIENTATION_ROTATE_180"/>
+		<field name="ORIENTATION_ROTATE_270"/>
+		<field name="ORIENTATION_ROTATE_90"/>
+		<field name="ORIENTATION_TRANSPOSE"/>
+		<field name="ORIENTATION_TRANSVERSE"/>
+		<field name="ORIENTATION_UNDEFINED"/>
+		<field name="STREAM_TYPE_EXIF_DATA_ONLY" since="30"/>
+		<field name="STREAM_TYPE_FULL_IMAGE_DATA" since="30"/>
+		<field name="TAG_APERTURE" since="11" deprecated="24"/>
+		<field name="TAG_APERTURE_VALUE" since="24"/>
+		<field name="TAG_ARTIST" since="24"/>
+		<field name="TAG_BITS_PER_SAMPLE" since="24"/>
+		<field name="TAG_BRIGHTNESS_VALUE" since="24"/>
+		<field name="TAG_CFA_PATTERN" since="24"/>
+		<field name="TAG_COLOR_SPACE" since="24"/>
+		<field name="TAG_COMPONENTS_CONFIGURATION" since="24"/>
+		<field name="TAG_COMPRESSED_BITS_PER_PIXEL" since="24"/>
+		<field name="TAG_COMPRESSION" since="24"/>
+		<field name="TAG_CONTRAST" since="24"/>
+		<field name="TAG_COPYRIGHT" since="24"/>
+		<field name="TAG_CUSTOM_RENDERED" since="24"/>
+		<field name="TAG_DATETIME"/>
+		<field name="TAG_DATETIME_DIGITIZED" since="23"/>
+		<field name="TAG_DATETIME_ORIGINAL" since="24"/>
+		<field name="TAG_DEFAULT_CROP_SIZE" since="26"/>
+		<field name="TAG_DEVICE_SETTING_DESCRIPTION" since="24"/>
+		<field name="TAG_DIGITAL_ZOOM_RATIO" since="24"/>
+		<field name="TAG_DNG_VERSION" since="26"/>
+		<field name="TAG_EXIF_VERSION" since="24"/>
+		<field name="TAG_EXPOSURE_BIAS_VALUE" since="24"/>
+		<field name="TAG_EXPOSURE_INDEX" since="24"/>
+		<field name="TAG_EXPOSURE_MODE" since="24"/>
+		<field name="TAG_EXPOSURE_PROGRAM" since="24"/>
+		<field name="TAG_EXPOSURE_TIME" since="11"/>
+		<field name="TAG_FILE_SOURCE" since="24"/>
+		<field name="TAG_FLASH"/>
+		<field name="TAG_FLASHPIX_VERSION" since="24"/>
+		<field name="TAG_FLASH_ENERGY" since="24"/>
+		<field name="TAG_FOCAL_LENGTH" since="8"/>
+		<field name="TAG_FOCAL_LENGTH_IN_35MM_FILM" since="24"/>
+		<field name="TAG_FOCAL_PLANE_RESOLUTION_UNIT" since="24"/>
+		<field name="TAG_FOCAL_PLANE_X_RESOLUTION" since="24"/>
+		<field name="TAG_FOCAL_PLANE_Y_RESOLUTION" since="24"/>
+		<field name="TAG_F_NUMBER" since="24"/>
+		<field name="TAG_GAIN_CONTROL" since="24"/>
+		<field name="TAG_GPS_ALTITUDE" since="9"/>
+		<field name="TAG_GPS_ALTITUDE_REF" since="9"/>
+		<field name="TAG_GPS_AREA_INFORMATION" since="24"/>
+		<field name="TAG_GPS_DATESTAMP" since="8"/>
+		<field name="TAG_GPS_DEST_BEARING" since="24"/>
+		<field name="TAG_GPS_DEST_BEARING_REF" since="24"/>
+		<field name="TAG_GPS_DEST_DISTANCE" since="24"/>
+		<field name="TAG_GPS_DEST_DISTANCE_REF" since="24"/>
+		<field name="TAG_GPS_DEST_LATITUDE" since="24"/>
+		<field name="TAG_GPS_DEST_LATITUDE_REF" since="24"/>
+		<field name="TAG_GPS_DEST_LONGITUDE" since="24"/>
+		<field name="TAG_GPS_DEST_LONGITUDE_REF" since="24"/>
+		<field name="TAG_GPS_DIFFERENTIAL" since="24"/>
+		<field name="TAG_GPS_DOP" since="24"/>
+		<field name="TAG_GPS_IMG_DIRECTION" since="24"/>
+		<field name="TAG_GPS_IMG_DIRECTION_REF" since="24"/>
+		<field name="TAG_GPS_LATITUDE"/>
+		<field name="TAG_GPS_LATITUDE_REF"/>
+		<field name="TAG_GPS_LONGITUDE"/>
+		<field name="TAG_GPS_LONGITUDE_REF"/>
+		<field name="TAG_GPS_MAP_DATUM" since="24"/>
+		<field name="TAG_GPS_MEASURE_MODE" since="24"/>
+		<field name="TAG_GPS_PROCESSING_METHOD" since="8"/>
+		<field name="TAG_GPS_SATELLITES" since="24"/>
+		<field name="TAG_GPS_SPEED" since="24"/>
+		<field name="TAG_GPS_SPEED_REF" since="24"/>
+		<field name="TAG_GPS_STATUS" since="24"/>
+		<field name="TAG_GPS_TIMESTAMP" since="8"/>
+		<field name="TAG_GPS_TRACK" since="24"/>
+		<field name="TAG_GPS_TRACK_REF" since="24"/>
+		<field name="TAG_GPS_VERSION_ID" since="24"/>
+		<field name="TAG_IMAGE_DESCRIPTION" since="24"/>
+		<field name="TAG_IMAGE_LENGTH"/>
+		<field name="TAG_IMAGE_UNIQUE_ID" since="24"/>
+		<field name="TAG_IMAGE_WIDTH"/>
+		<field name="TAG_INTEROPERABILITY_INDEX" since="24"/>
+		<field name="TAG_ISO" since="11" deprecated="24"/>
+		<field name="TAG_ISO_SPEED_RATINGS" since="24"/>
+		<field name="TAG_JPEG_INTERCHANGE_FORMAT" since="24"/>
+		<field name="TAG_JPEG_INTERCHANGE_FORMAT_LENGTH" since="24"/>
+		<field name="TAG_LIGHT_SOURCE" since="24"/>
+		<field name="TAG_MAKE"/>
+		<field name="TAG_MAKER_NOTE" since="24"/>
+		<field name="TAG_MAX_APERTURE_VALUE" since="24"/>
+		<field name="TAG_METERING_MODE" since="24"/>
+		<field name="TAG_MODEL"/>
+		<field name="TAG_NEW_SUBFILE_TYPE" since="26"/>
+		<field name="TAG_OECF" since="24"/>
+		<field name="TAG_OFFSET_TIME" since="30"/>
+		<field name="TAG_OFFSET_TIME_DIGITIZED" since="30"/>
+		<field name="TAG_OFFSET_TIME_ORIGINAL" since="30"/>
+		<field name="TAG_ORF_ASPECT_FRAME" since="26"/>
+		<field name="TAG_ORF_PREVIEW_IMAGE_LENGTH" since="26"/>
+		<field name="TAG_ORF_PREVIEW_IMAGE_START" since="26"/>
+		<field name="TAG_ORF_THUMBNAIL_IMAGE" since="26"/>
+		<field name="TAG_ORIENTATION"/>
+		<field name="TAG_PHOTOMETRIC_INTERPRETATION" since="24"/>
+		<field name="TAG_PIXEL_X_DIMENSION" since="24"/>
+		<field name="TAG_PIXEL_Y_DIMENSION" since="24"/>
+		<field name="TAG_PLANAR_CONFIGURATION" since="24"/>
+		<field name="TAG_PRIMARY_CHROMATICITIES" since="24"/>
+		<field name="TAG_REFERENCE_BLACK_WHITE" since="24"/>
+		<field name="TAG_RELATED_SOUND_FILE" since="24"/>
+		<field name="TAG_RESOLUTION_UNIT" since="24"/>
+		<field name="TAG_ROWS_PER_STRIP" since="24"/>
+		<field name="TAG_RW2_ISO" since="26"/>
+		<field name="TAG_RW2_JPG_FROM_RAW" since="26"/>
+		<field name="TAG_RW2_SENSOR_BOTTOM_BORDER" since="26"/>
+		<field name="TAG_RW2_SENSOR_LEFT_BORDER" since="26"/>
+		<field name="TAG_RW2_SENSOR_RIGHT_BORDER" since="26"/>
+		<field name="TAG_RW2_SENSOR_TOP_BORDER" since="26"/>
+		<field name="TAG_SAMPLES_PER_PIXEL" since="24"/>
+		<field name="TAG_SATURATION" since="24"/>
+		<field name="TAG_SCENE_CAPTURE_TYPE" since="24"/>
+		<field name="TAG_SCENE_TYPE" since="24"/>
+		<field name="TAG_SENSING_METHOD" since="24"/>
+		<field name="TAG_SHARPNESS" since="24"/>
+		<field name="TAG_SHUTTER_SPEED_VALUE" since="24"/>
+		<field name="TAG_SOFTWARE" since="24"/>
+		<field name="TAG_SPATIAL_FREQUENCY_RESPONSE" since="24"/>
+		<field name="TAG_SPECTRAL_SENSITIVITY" since="24"/>
+		<field name="TAG_STRIP_BYTE_COUNTS" since="24"/>
+		<field name="TAG_STRIP_OFFSETS" since="24"/>
+		<field name="TAG_SUBFILE_TYPE" since="26"/>
+		<field name="TAG_SUBJECT_AREA" since="24"/>
+		<field name="TAG_SUBJECT_DISTANCE" since="24"/>
+		<field name="TAG_SUBJECT_DISTANCE_RANGE" since="24"/>
+		<field name="TAG_SUBJECT_LOCATION" since="24"/>
+		<field name="TAG_SUBSEC_TIME" since="23"/>
+		<field name="TAG_SUBSEC_TIME_DIG" since="23" deprecated="24"/>
+		<field name="TAG_SUBSEC_TIME_DIGITIZED" since="24"/>
+		<field name="TAG_SUBSEC_TIME_ORIG" since="23" deprecated="24"/>
+		<field name="TAG_SUBSEC_TIME_ORIGINAL" since="24"/>
+		<field name="TAG_THUMBNAIL_IMAGE_LENGTH" since="24"/>
+		<field name="TAG_THUMBNAIL_IMAGE_WIDTH" since="24"/>
+		<field name="TAG_THUMBNAIL_ORIENTATION" since="30"/>
+		<field name="TAG_TRANSFER_FUNCTION" since="24"/>
+		<field name="TAG_USER_COMMENT" since="24"/>
+		<field name="TAG_WHITE_BALANCE"/>
+		<field name="TAG_WHITE_POINT" since="24"/>
+		<field name="TAG_XMP" since="29"/>
+		<field name="TAG_X_RESOLUTION" since="24"/>
+		<field name="TAG_Y_CB_CR_COEFFICIENTS" since="24"/>
+		<field name="TAG_Y_CB_CR_POSITIONING" since="24"/>
+		<field name="TAG_Y_CB_CR_SUB_SAMPLING" since="24"/>
+		<field name="TAG_Y_RESOLUTION" since="24"/>
+		<field name="WHITEBALANCE_AUTO"/>
+		<field name="WHITEBALANCE_MANUAL"/>
+	</class>
+	<class name="android/media/FaceDetector" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="findFaces(Landroid/graphics/Bitmap;[Landroid/media/FaceDetector$Face;)I"/>
+	</class>
+	<class name="android/media/FaceDetector$Face" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="confidence()F"/>
+		<method name="eyesDistance()F"/>
+		<method name="getMidPoint(Landroid/graphics/PointF;)V"/>
+		<method name="pose(I)F"/>
+		<field name="CONFIDENCE_THRESHOLD"/>
+		<field name="EULER_X"/>
+		<field name="EULER_Y"/>
+		<field name="EULER_Z"/>
+	</class>
+	<class name="android/media/Image" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getCropRect()Landroid/graphics/Rect;" since="21"/>
+		<method name="getFormat()I"/>
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;" since="28"/>
+		<method name="getHeight()I"/>
+		<method name="getPlanes()[Landroid/media/Image$Plane;"/>
+		<method name="getTimestamp()J"/>
+		<method name="getWidth()I"/>
+		<method name="setCropRect(Landroid/graphics/Rect;)V" since="21"/>
+		<method name="setTimestamp(J)V" since="23"/>
+	</class>
+	<class name="android/media/Image$Plane" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getBuffer()Ljava/nio/ByteBuffer;"/>
+		<method name="getPixelStride()I"/>
+		<method name="getRowStride()I"/>
+	</class>
+	<class name="android/media/ImageReader" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="acquireLatestImage()Landroid/media/Image;"/>
+		<method name="acquireNextImage()Landroid/media/Image;"/>
+		<method name="discardFreeBuffers()V" since="28"/>
+		<method name="getHeight()I"/>
+		<method name="getImageFormat()I"/>
+		<method name="getMaxImages()I"/>
+		<method name="getSurface()Landroid/view/Surface;"/>
+		<method name="getWidth()I"/>
+		<method name="newInstance(IIII)Landroid/media/ImageReader;"/>
+		<method name="newInstance(IIIIJ)Landroid/media/ImageReader;" since="29"/>
+		<method name="setOnImageAvailableListener(Landroid/media/ImageReader$OnImageAvailableListener;Landroid/os/Handler;)V"/>
+	</class>
+	<class name="android/media/ImageReader$OnImageAvailableListener" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onImageAvailable(Landroid/media/ImageReader;)V"/>
+	</class>
+	<class name="android/media/ImageWriter" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="dequeueInputImage()Landroid/media/Image;"/>
+		<method name="getFormat()I"/>
+		<method name="getMaxImages()I"/>
+		<method name="newInstance(Landroid/view/Surface;I)Landroid/media/ImageWriter;"/>
+		<method name="newInstance(Landroid/view/Surface;II)Landroid/media/ImageWriter;" since="29"/>
+		<method name="queueInputImage(Landroid/media/Image;)V"/>
+		<method name="setOnImageReleasedListener(Landroid/media/ImageWriter$OnImageReleasedListener;Landroid/os/Handler;)V"/>
+	</class>
+	<class name="android/media/ImageWriter$OnImageReleasedListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onImageReleased(Landroid/media/ImageWriter;)V"/>
+	</class>
+	<class name="android/media/JetPlayer" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="clearQueue()Z"/>
+		<method name="closeJetFile()Z"/>
+		<method name="getJetPlayer()Landroid/media/JetPlayer;"/>
+		<method name="getMaxTracks()I"/>
+		<method name="loadJetFile(Landroid/content/res/AssetFileDescriptor;)Z"/>
+		<method name="loadJetFile(Ljava/lang/String;)Z"/>
+		<method name="pause()Z"/>
+		<method name="play()Z"/>
+		<method name="queueJetSegment(IIIIIB)Z"/>
+		<method name="queueJetSegmentMuteArray(IIII[ZB)Z"/>
+		<method name="release()V"/>
+		<method name="setEventListener(Landroid/media/JetPlayer$OnJetEventListener;)V"/>
+		<method name="setEventListener(Landroid/media/JetPlayer$OnJetEventListener;Landroid/os/Handler;)V"/>
+		<method name="setMuteArray([ZZ)Z"/>
+		<method name="setMuteFlag(IZZ)Z"/>
+		<method name="setMuteFlags(IZ)Z"/>
+		<method name="triggerClip(I)Z"/>
+	</class>
+	<class name="android/media/JetPlayer$OnJetEventListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onJetEvent(Landroid/media/JetPlayer;SBBBB)V"/>
+		<method name="onJetNumQueuedSegmentUpdate(Landroid/media/JetPlayer;I)V"/>
+		<method name="onJetPauseUpdate(Landroid/media/JetPlayer;I)V"/>
+		<method name="onJetUserIdUpdate(Landroid/media/JetPlayer;II)V"/>
+	</class>
+	<class name="android/media/MediaActionSound" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="load(I)V"/>
+		<method name="play(I)V"/>
+		<method name="release()V"/>
+		<field name="FOCUS_COMPLETE"/>
+		<field name="SHUTTER_CLICK"/>
+		<field name="START_VIDEO_RECORDING"/>
+		<field name="STOP_VIDEO_RECORDING"/>
+	</class>
+	<class name="android/media/MediaCas" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;ILjava/lang/String;I)V" since="30"/>
+		<method name="&lt;init>(Landroid/content/Context;ILjava/lang/String;ILandroid/os/Handler;Landroid/media/MediaCas$EventListener;)V" since="31"/>
+		<method name="enumeratePlugins()[Landroid/media/MediaCas$PluginDescriptor;"/>
+		<method name="isSystemIdSupported(I)Z"/>
+		<method name="openSession()Landroid/media/MediaCas$Session;"/>
+		<method name="openSession(II)Landroid/media/MediaCas$Session;" since="30"/>
+		<method name="processEmm([B)V"/>
+		<method name="processEmm([BII)V"/>
+		<method name="provision(Ljava/lang/String;)V"/>
+		<method name="refreshEntitlements(I[B)V"/>
+		<method name="sendEvent(II[B)V"/>
+		<method name="setEventListener(Landroid/media/MediaCas$EventListener;Landroid/os/Handler;)V"/>
+		<method name="setPrivateData([B)V"/>
+		<field name="PLUGIN_STATUS_PHYSICAL_MODULE_CHANGED" since="30"/>
+		<field name="PLUGIN_STATUS_SESSION_NUMBER_CHANGED" since="30"/>
+		<field name="SCRAMBLING_MODE_AES128" since="30"/>
+		<field name="SCRAMBLING_MODE_AES_ECB" since="30"/>
+		<field name="SCRAMBLING_MODE_AES_SCTE52" since="30"/>
+		<field name="SCRAMBLING_MODE_DVB_CISSA_V1" since="30"/>
+		<field name="SCRAMBLING_MODE_DVB_CSA1" since="30"/>
+		<field name="SCRAMBLING_MODE_DVB_CSA2" since="30"/>
+		<field name="SCRAMBLING_MODE_DVB_CSA3_ENHANCE" since="30"/>
+		<field name="SCRAMBLING_MODE_DVB_CSA3_MINIMAL" since="30"/>
+		<field name="SCRAMBLING_MODE_DVB_CSA3_STANDARD" since="30"/>
+		<field name="SCRAMBLING_MODE_DVB_IDSA" since="30"/>
+		<field name="SCRAMBLING_MODE_MULTI2" since="30"/>
+		<field name="SCRAMBLING_MODE_RESERVED" since="30"/>
+		<field name="SCRAMBLING_MODE_TDES_ECB" since="30"/>
+		<field name="SCRAMBLING_MODE_TDES_SCTE52" since="30"/>
+		<field name="SESSION_USAGE_LIVE" since="30"/>
+		<field name="SESSION_USAGE_PLAYBACK" since="30"/>
+		<field name="SESSION_USAGE_RECORD" since="30"/>
+		<field name="SESSION_USAGE_TIMESHIFT" since="30"/>
+	</class>
+	<class name="android/media/MediaCas$EventListener" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="onEvent(Landroid/media/MediaCas;II[B)V"/>
+		<method name="onPluginStatusUpdate(Landroid/media/MediaCas;II)V" since="30"/>
+		<method name="onResourceLost(Landroid/media/MediaCas;)V" since="30"/>
+		<method name="onSessionEvent(Landroid/media/MediaCas;Landroid/media/MediaCas$Session;II[B)V" since="29"/>
+	</class>
+	<class name="android/media/MediaCas$PluginDescriptor" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSystemId()I"/>
+	</class>
+	<class name="android/media/MediaCas$Session" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getSessionId()[B" since="30"/>
+		<method name="processEcm([B)V"/>
+		<method name="processEcm([BII)V"/>
+		<method name="sendSessionEvent(II[B)V" since="29"/>
+		<method name="setPrivateData([B)V"/>
+	</class>
+	<class name="android/media/MediaCasException" since="26">
+		<extends name="java/lang/Exception"/>
+	</class>
+	<class name="android/media/MediaCasException$DeniedByServerException" since="26">
+		<extends name="android/media/MediaCasException"/>
+	</class>
+	<class name="android/media/MediaCasException$InsufficientResourceException" since="30">
+		<extends name="android/media/MediaCasException"/>
+	</class>
+	<class name="android/media/MediaCasException$NotProvisionedException" since="26">
+		<extends name="android/media/MediaCasException"/>
+	</class>
+	<class name="android/media/MediaCasException$ResourceBusyException" since="26">
+		<extends name="android/media/MediaCasException"/>
+	</class>
+	<class name="android/media/MediaCasException$UnsupportedCasException" since="26">
+		<extends name="android/media/MediaCasException"/>
+	</class>
+	<class name="android/media/MediaCasStateException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="getDiagnosticInfo()Ljava/lang/String;"/>
+	</class>
+	<class name="android/media/MediaCodec" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;ILandroid/media/MediaDescrambler;)V" since="26"/>
+		<method name="configure(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V"/>
+		<method name="createByCodecName(Ljava/lang/String;)Landroid/media/MediaCodec;"/>
+		<method name="createDecoderByType(Ljava/lang/String;)Landroid/media/MediaCodec;"/>
+		<method name="createEncoderByType(Ljava/lang/String;)Landroid/media/MediaCodec;"/>
+		<method name="createInputSurface()Landroid/view/Surface;" since="18"/>
+		<method name="createPersistentInputSurface()Landroid/view/Surface;" since="23"/>
+		<method name="dequeueInputBuffer(J)I"/>
+		<method name="dequeueOutputBuffer(Landroid/media/MediaCodec$BufferInfo;J)I"/>
+		<method name="flush()V"/>
+		<method name="getCanonicalName()Ljava/lang/String;" since="29"/>
+		<method name="getCodecInfo()Landroid/media/MediaCodecInfo;" since="18"/>
+		<method name="getInputBuffer(I)Ljava/nio/ByteBuffer;" since="21"/>
+		<method name="getInputBuffers()[Ljava/nio/ByteBuffer;" deprecated="21"/>
+		<method name="getInputFormat()Landroid/media/MediaFormat;" since="21"/>
+		<method name="getInputImage(I)Landroid/media/Image;" since="21"/>
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
+		<method name="getName()Ljava/lang/String;" since="18"/>
+		<method name="getOutputBuffer(I)Ljava/nio/ByteBuffer;" since="21"/>
+		<method name="getOutputBuffers()[Ljava/nio/ByteBuffer;" deprecated="21"/>
+		<method name="getOutputFormat()Landroid/media/MediaFormat;"/>
+		<method name="getOutputFormat(I)Landroid/media/MediaFormat;" since="21"/>
+		<method name="getOutputFrame(I)Landroid/media/MediaCodec$OutputFrame;" since="30"/>
+		<method name="getOutputImage(I)Landroid/media/Image;" since="21"/>
+		<method name="getParameterDescriptor(Ljava/lang/String;)Landroid/media/MediaCodec$ParameterDescriptor;" since="31"/>
+		<method name="getQueueRequest(I)Landroid/media/MediaCodec$QueueRequest;" since="30"/>
+		<method name="getSupportedVendorParameters()Ljava/util/List;" since="31"/>
+		<method name="mapHardwareBuffer(Landroid/hardware/HardwareBuffer;)Landroid/media/Image;" since="30"/>
+		<method name="queueInputBuffer(IIIJI)V"/>
+		<method name="queueSecureInputBuffer(IILandroid/media/MediaCodec$CryptoInfo;JI)V"/>
+		<method name="release()V"/>
+		<method name="releaseOutputBuffer(IJ)V" since="21"/>
+		<method name="releaseOutputBuffer(IZ)V"/>
+		<method name="reset()V" since="21"/>
+		<method name="setAudioPresentation(Landroid/media/AudioPresentation;)V" since="29"/>
+		<method name="setCallback(Landroid/media/MediaCodec$Callback;)V" since="21"/>
+		<method name="setCallback(Landroid/media/MediaCodec$Callback;Landroid/os/Handler;)V" since="23"/>
+		<method name="setInputSurface(Landroid/view/Surface;)V" since="23"/>
+		<method name="setOnFirstTunnelFrameReadyListener(Landroid/os/Handler;Landroid/media/MediaCodec$OnFirstTunnelFrameReadyListener;)V" since="31"/>
+		<method name="setOnFrameRenderedListener(Landroid/media/MediaCodec$OnFrameRenderedListener;Landroid/os/Handler;)V" since="23"/>
+		<method name="setOutputSurface(Landroid/view/Surface;)V" since="23"/>
+		<method name="setParameters(Landroid/os/Bundle;)V" since="19"/>
+		<method name="setVideoScalingMode(I)V"/>
+		<method name="signalEndOfInputStream()V" since="18"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+		<method name="subscribeToVendorParameters(Ljava/util/List;)V" since="31"/>
+		<method name="unsubscribeFromVendorParameters(Ljava/util/List;)V" since="31"/>
+		<field name="BUFFER_FLAG_CODEC_CONFIG"/>
+		<field name="BUFFER_FLAG_END_OF_STREAM"/>
+		<field name="BUFFER_FLAG_KEY_FRAME" since="21"/>
+		<field name="BUFFER_FLAG_PARTIAL_FRAME" since="26"/>
+		<field name="BUFFER_FLAG_SYNC_FRAME" deprecated="21"/>
+		<field name="CONFIGURE_FLAG_ENCODE"/>
+		<field name="CONFIGURE_FLAG_USE_BLOCK_MODEL" since="30"/>
+		<field name="CRYPTO_MODE_AES_CBC" since="24"/>
+		<field name="CRYPTO_MODE_AES_CTR"/>
+		<field name="CRYPTO_MODE_UNENCRYPTED"/>
+		<field name="INFO_OUTPUT_BUFFERS_CHANGED" deprecated="21"/>
+		<field name="INFO_OUTPUT_FORMAT_CHANGED"/>
+		<field name="INFO_TRY_AGAIN_LATER"/>
+		<field name="PARAMETER_KEY_HDR10_PLUS_INFO" since="29"/>
+		<field name="PARAMETER_KEY_LOW_LATENCY" since="30"/>
+		<field name="PARAMETER_KEY_OFFSET_TIME" since="29"/>
+		<field name="PARAMETER_KEY_REQUEST_SYNC_FRAME" since="19"/>
+		<field name="PARAMETER_KEY_SUSPEND" since="19"/>
+		<field name="PARAMETER_KEY_SUSPEND_TIME" since="29"/>
+		<field name="PARAMETER_KEY_TUNNEL_PEEK" since="31"/>
+		<field name="PARAMETER_KEY_VIDEO_BITRATE" since="19"/>
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT"/>
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING"/>
+	</class>
+	<class name="android/media/MediaCodec$BufferInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="set(IIJI)V"/>
+		<field name="flags"/>
+		<field name="offset"/>
+		<field name="presentationTimeUs"/>
+		<field name="size"/>
+	</class>
+	<class name="android/media/MediaCodec$Callback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onError(Landroid/media/MediaCodec;Landroid/media/MediaCodec$CodecException;)V"/>
+		<method name="onInputBufferAvailable(Landroid/media/MediaCodec;I)V"/>
+		<method name="onOutputBufferAvailable(Landroid/media/MediaCodec;ILandroid/media/MediaCodec$BufferInfo;)V"/>
+		<method name="onOutputFormatChanged(Landroid/media/MediaCodec;Landroid/media/MediaFormat;)V"/>
+	</class>
+	<class name="android/media/MediaCodec$CodecException" since="21">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="getDiagnosticInfo()Ljava/lang/String;"/>
+		<method name="getErrorCode()I" since="23"/>
+		<method name="isRecoverable()Z"/>
+		<method name="isTransient()Z"/>
+		<field name="ERROR_INSUFFICIENT_RESOURCE" since="23"/>
+		<field name="ERROR_RECLAIMED" since="23"/>
+	</class>
+	<class name="android/media/MediaCodec$CryptoException" since="16">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="getErrorCode()I"/>
+		<field name="ERROR_FRAME_TOO_LARGE" since="29" deprecated="31"/>
+		<field name="ERROR_INSUFFICIENT_OUTPUT_PROTECTION" since="21" deprecated="31"/>
+		<field name="ERROR_INSUFFICIENT_SECURITY" since="29" deprecated="31"/>
+		<field name="ERROR_KEY_EXPIRED" since="19" deprecated="31"/>
+		<field name="ERROR_LOST_STATE" since="29" deprecated="31"/>
+		<field name="ERROR_NO_KEY" since="19" deprecated="31"/>
+		<field name="ERROR_RESOURCE_BUSY" since="19" deprecated="31"/>
+		<field name="ERROR_SESSION_NOT_OPENED" since="23" deprecated="31"/>
+		<field name="ERROR_UNSUPPORTED_OPERATION" since="24" deprecated="31"/>
+	</class>
+	<class name="android/media/MediaCodec$CryptoInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getPattern()Landroid/media/MediaCodec$CryptoInfo$Pattern;" since="31"/>
+		<method name="set(I[I[I[B[BI)V"/>
+		<method name="setPattern(Landroid/media/MediaCodec$CryptoInfo$Pattern;)V" since="24"/>
+		<field name="iv"/>
+		<field name="key"/>
+		<field name="mode"/>
+		<field name="numBytesOfClearData"/>
+		<field name="numBytesOfEncryptedData"/>
+		<field name="numSubSamples"/>
+	</class>
+	<class name="android/media/MediaCodec$CryptoInfo$Pattern" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getEncryptBlocks()I"/>
+		<method name="getSkipBlocks()I"/>
+		<method name="set(II)V"/>
+	</class>
+	<class name="android/media/MediaCodec$IncompatibleWithBlockModelException" since="30">
+		<extends name="java/lang/RuntimeException"/>
+	</class>
+	<class name="android/media/MediaCodec$LinearBlock" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="isCodecCopyFreeCompatible([Ljava/lang/String;)Z"/>
+		<method name="isMappable()Z"/>
+		<method name="map()Ljava/nio/ByteBuffer;"/>
+		<method name="obtain(I[Ljava/lang/String;)Landroid/media/MediaCodec$LinearBlock;"/>
+		<method name="recycle()V"/>
+	</class>
+	<class name="android/media/MediaCodec$MetricsConstants" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="CODEC"/>
+		<field name="ENCODER"/>
+		<field name="HEIGHT"/>
+		<field name="MIME_TYPE"/>
+		<field name="MODE"/>
+		<field name="MODE_AUDIO"/>
+		<field name="MODE_VIDEO"/>
+		<field name="ROTATION"/>
+		<field name="SECURE"/>
+		<field name="WIDTH"/>
+	</class>
+	<class name="android/media/MediaCodec$OnFirstTunnelFrameReadyListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onFirstTunnelFrameReady(Landroid/media/MediaCodec;)V"/>
+	</class>
+	<class name="android/media/MediaCodec$OnFrameRenderedListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onFrameRendered(Landroid/media/MediaCodec;JJ)V"/>
+	</class>
+	<class name="android/media/MediaCodec$OutputFrame" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getChangedKeys()Ljava/util/Set;"/>
+		<method name="getFlags()I"/>
+		<method name="getFormat()Landroid/media/MediaFormat;"/>
+		<method name="getHardwareBuffer()Landroid/hardware/HardwareBuffer;"/>
+		<method name="getLinearBlock()Landroid/media/MediaCodec$LinearBlock;"/>
+		<method name="getPresentationTimeUs()J"/>
+	</class>
+	<class name="android/media/MediaCodec$ParameterDescriptor" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+	</class>
+	<class name="android/media/MediaCodec$QueueRequest" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="queue()V"/>
+		<method name="setByteBufferParameter(Ljava/lang/String;Ljava/nio/ByteBuffer;)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setEncryptedLinearBlock(Landroid/media/MediaCodec$LinearBlock;IILandroid/media/MediaCodec$CryptoInfo;)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setFlags(I)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setFloatParameter(Ljava/lang/String;F)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setHardwareBuffer(Landroid/hardware/HardwareBuffer;)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setIntegerParameter(Ljava/lang/String;I)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setLinearBlock(Landroid/media/MediaCodec$LinearBlock;II)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setLongParameter(Ljava/lang/String;J)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setPresentationTimeUs(J)Landroid/media/MediaCodec$QueueRequest;"/>
+		<method name="setStringParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaCodec$QueueRequest;"/>
+	</class>
+	<class name="android/media/MediaCodecInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="getCanonicalName()Ljava/lang/String;" since="29"/>
+		<method name="getCapabilitiesForType(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSupportedTypes()[Ljava/lang/String;"/>
+		<method name="isAlias()Z" since="29"/>
+		<method name="isEncoder()Z"/>
+		<method name="isHardwareAccelerated()Z" since="29"/>
+		<method name="isSoftwareOnly()Z" since="29"/>
+		<method name="isVendor()Z" since="29"/>
+	</class>
+	<class name="android/media/MediaCodecInfo$AudioCapabilities" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getBitrateRange()Landroid/util/Range;"/>
+		<method name="getInputChannelCountRanges()[Landroid/util/Range;" since="31"/>
+		<method name="getMaxInputChannelCount()I"/>
+		<method name="getMinInputChannelCount()I" since="31"/>
+		<method name="getSupportedSampleRateRanges()[Landroid/util/Range;"/>
+		<method name="getSupportedSampleRates()[I"/>
+		<method name="isSampleRateSupported(I)Z"/>
+	</class>
+	<class name="android/media/MediaCodecInfo$CodecCapabilities" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="createFromProfileLevel(Ljava/lang/String;II)Landroid/media/MediaCodecInfo$CodecCapabilities;" since="21"/>
+		<method name="getAudioCapabilities()Landroid/media/MediaCodecInfo$AudioCapabilities;" since="21"/>
+		<method name="getDefaultFormat()Landroid/media/MediaFormat;" since="21"/>
+		<method name="getEncoderCapabilities()Landroid/media/MediaCodecInfo$EncoderCapabilities;" since="21"/>
+		<method name="getMaxSupportedInstances()I" since="23"/>
+		<method name="getMimeType()Ljava/lang/String;" since="21"/>
+		<method name="getVideoCapabilities()Landroid/media/MediaCodecInfo$VideoCapabilities;" since="21"/>
+		<method name="isFeatureRequired(Ljava/lang/String;)Z" since="21"/>
+		<method name="isFeatureSupported(Ljava/lang/String;)Z" since="19"/>
+		<method name="isFormatSupported(Landroid/media/MediaFormat;)Z" since="21"/>
+		<field name="COLOR_Format12bitRGB444" deprecated="23"/>
+		<field name="COLOR_Format16bitARGB1555" deprecated="23"/>
+		<field name="COLOR_Format16bitARGB4444" deprecated="23"/>
+		<field name="COLOR_Format16bitBGR565" deprecated="23"/>
+		<field name="COLOR_Format16bitRGB565"/>
+		<field name="COLOR_Format18BitBGR666" deprecated="23"/>
+		<field name="COLOR_Format18bitARGB1665" deprecated="23"/>
+		<field name="COLOR_Format18bitRGB666" deprecated="23"/>
+		<field name="COLOR_Format19bitARGB1666" deprecated="23"/>
+		<field name="COLOR_Format24BitABGR6666" deprecated="23"/>
+		<field name="COLOR_Format24BitARGB6666" deprecated="23"/>
+		<field name="COLOR_Format24bitARGB1887" deprecated="23"/>
+		<field name="COLOR_Format24bitBGR888"/>
+		<field name="COLOR_Format24bitRGB888" deprecated="23"/>
+		<field name="COLOR_Format25bitARGB1888" deprecated="23"/>
+		<field name="COLOR_Format32bitABGR8888" since="23"/>
+		<field name="COLOR_Format32bitARGB8888" deprecated="23"/>
+		<field name="COLOR_Format32bitBGRA8888" deprecated="23"/>
+		<field name="COLOR_Format8bitRGB332" deprecated="23"/>
+		<field name="COLOR_FormatCbYCrY" deprecated="23"/>
+		<field name="COLOR_FormatCrYCbY" deprecated="23"/>
+		<field name="COLOR_FormatL16"/>
+		<field name="COLOR_FormatL2" deprecated="23"/>
+		<field name="COLOR_FormatL24" deprecated="23"/>
+		<field name="COLOR_FormatL32" deprecated="23"/>
+		<field name="COLOR_FormatL4" deprecated="23"/>
+		<field name="COLOR_FormatL8"/>
+		<field name="COLOR_FormatMonochrome" deprecated="23"/>
+		<field name="COLOR_FormatRGBAFlexible" since="23"/>
+		<field name="COLOR_FormatRGBFlexible" since="23"/>
+		<field name="COLOR_FormatRawBayer10bit"/>
+		<field name="COLOR_FormatRawBayer8bit"/>
+		<field name="COLOR_FormatRawBayer8bitcompressed"/>
+		<field name="COLOR_FormatSurface" since="18"/>
+		<field name="COLOR_FormatYCbYCr" deprecated="23"/>
+		<field name="COLOR_FormatYCrYCb" deprecated="23"/>
+		<field name="COLOR_FormatYUV411PackedPlanar" deprecated="23"/>
+		<field name="COLOR_FormatYUV411Planar" deprecated="23"/>
+		<field name="COLOR_FormatYUV420Flexible" since="21"/>
+		<field name="COLOR_FormatYUV420PackedPlanar" deprecated="23"/>
+		<field name="COLOR_FormatYUV420PackedSemiPlanar" deprecated="23"/>
+		<field name="COLOR_FormatYUV420Planar" deprecated="23"/>
+		<field name="COLOR_FormatYUV420SemiPlanar" deprecated="23"/>
+		<field name="COLOR_FormatYUV422Flexible" since="23"/>
+		<field name="COLOR_FormatYUV422PackedPlanar" deprecated="23"/>
+		<field name="COLOR_FormatYUV422PackedSemiPlanar" deprecated="23"/>
+		<field name="COLOR_FormatYUV422Planar" deprecated="23"/>
+		<field name="COLOR_FormatYUV422SemiPlanar" deprecated="23"/>
+		<field name="COLOR_FormatYUV444Flexible" since="23"/>
+		<field name="COLOR_FormatYUV444Interleaved" deprecated="23"/>
+		<field name="COLOR_QCOM_FormatYUV420SemiPlanar" deprecated="23"/>
+		<field name="COLOR_TI_FormatYUV420PackedSemiPlanar" deprecated="23"/>
+		<field name="FEATURE_AdaptivePlayback" since="19"/>
+		<field name="FEATURE_DynamicTimestamp" since="29"/>
+		<field name="FEATURE_FrameParsing" since="29"/>
+		<field name="FEATURE_IntraRefresh" since="24"/>
+		<field name="FEATURE_LowLatency" since="30"/>
+		<field name="FEATURE_MultipleFrames" since="29"/>
+		<field name="FEATURE_PartialFrame" since="26"/>
+		<field name="FEATURE_QpBounds" since="31"/>
+		<field name="FEATURE_SecurePlayback" since="21"/>
+		<field name="FEATURE_TunneledPlayback" since="21"/>
+		<field name="colorFormats"/>
+		<field name="profileLevels"/>
+	</class>
+	<class name="android/media/MediaCodecInfo$CodecProfileLevel" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="AACObjectELD"/>
+		<field name="AACObjectERLC"/>
+		<field name="AACObjectERScalable" since="26"/>
+		<field name="AACObjectHE"/>
+		<field name="AACObjectHE_PS"/>
+		<field name="AACObjectLC"/>
+		<field name="AACObjectLD"/>
+		<field name="AACObjectLTP"/>
+		<field name="AACObjectMain"/>
+		<field name="AACObjectSSR"/>
+		<field name="AACObjectScalable"/>
+		<field name="AACObjectXHE" since="28"/>
+		<field name="AV1Level2" since="29"/>
+		<field name="AV1Level21" since="29"/>
+		<field name="AV1Level22" since="29"/>
+		<field name="AV1Level23" since="29"/>
+		<field name="AV1Level3" since="29"/>
+		<field name="AV1Level31" since="29"/>
+		<field name="AV1Level32" since="29"/>
+		<field name="AV1Level33" since="29"/>
+		<field name="AV1Level4" since="29"/>
+		<field name="AV1Level41" since="29"/>
+		<field name="AV1Level42" since="29"/>
+		<field name="AV1Level43" since="29"/>
+		<field name="AV1Level5" since="29"/>
+		<field name="AV1Level51" since="29"/>
+		<field name="AV1Level52" since="29"/>
+		<field name="AV1Level53" since="29"/>
+		<field name="AV1Level6" since="29"/>
+		<field name="AV1Level61" since="29"/>
+		<field name="AV1Level62" since="29"/>
+		<field name="AV1Level63" since="29"/>
+		<field name="AV1Level7" since="29"/>
+		<field name="AV1Level71" since="29"/>
+		<field name="AV1Level72" since="29"/>
+		<field name="AV1Level73" since="29"/>
+		<field name="AV1ProfileMain10" since="29"/>
+		<field name="AV1ProfileMain10HDR10" since="29"/>
+		<field name="AV1ProfileMain10HDR10Plus" since="29"/>
+		<field name="AV1ProfileMain8" since="29"/>
+		<field name="AVCLevel1"/>
+		<field name="AVCLevel11"/>
+		<field name="AVCLevel12"/>
+		<field name="AVCLevel13"/>
+		<field name="AVCLevel1b"/>
+		<field name="AVCLevel2"/>
+		<field name="AVCLevel21"/>
+		<field name="AVCLevel22"/>
+		<field name="AVCLevel3"/>
+		<field name="AVCLevel31"/>
+		<field name="AVCLevel32"/>
+		<field name="AVCLevel4"/>
+		<field name="AVCLevel41"/>
+		<field name="AVCLevel42"/>
+		<field name="AVCLevel5"/>
+		<field name="AVCLevel51"/>
+		<field name="AVCLevel52" since="21"/>
+		<field name="AVCLevel6" since="29"/>
+		<field name="AVCLevel61" since="29"/>
+		<field name="AVCLevel62" since="29"/>
+		<field name="AVCProfileBaseline"/>
+		<field name="AVCProfileConstrainedBaseline" since="27"/>
+		<field name="AVCProfileConstrainedHigh" since="27"/>
+		<field name="AVCProfileExtended"/>
+		<field name="AVCProfileHigh"/>
+		<field name="AVCProfileHigh10"/>
+		<field name="AVCProfileHigh422"/>
+		<field name="AVCProfileHigh444"/>
+		<field name="AVCProfileMain"/>
+		<field name="DolbyVisionLevelFhd24" since="24"/>
+		<field name="DolbyVisionLevelFhd30" since="24"/>
+		<field name="DolbyVisionLevelFhd60" since="24"/>
+		<field name="DolbyVisionLevelHd24" since="24"/>
+		<field name="DolbyVisionLevelHd30" since="24"/>
+		<field name="DolbyVisionLevelUhd24" since="24"/>
+		<field name="DolbyVisionLevelUhd30" since="24"/>
+		<field name="DolbyVisionLevelUhd48" since="24"/>
+		<field name="DolbyVisionLevelUhd60" since="24"/>
+		<field name="DolbyVisionProfileDvav110" since="30"/>
+		<field name="DolbyVisionProfileDvavPen" since="24"/>
+		<field name="DolbyVisionProfileDvavPer" since="24"/>
+		<field name="DolbyVisionProfileDvavSe" since="27"/>
+		<field name="DolbyVisionProfileDvheDen" since="24"/>
+		<field name="DolbyVisionProfileDvheDer" since="24"/>
+		<field name="DolbyVisionProfileDvheDtb" since="24"/>
+		<field name="DolbyVisionProfileDvheDth" since="24"/>
+		<field name="DolbyVisionProfileDvheDtr" since="24"/>
+		<field name="DolbyVisionProfileDvheSt" since="27"/>
+		<field name="DolbyVisionProfileDvheStn" since="24"/>
+		<field name="H263Level10"/>
+		<field name="H263Level20"/>
+		<field name="H263Level30"/>
+		<field name="H263Level40"/>
+		<field name="H263Level45"/>
+		<field name="H263Level50"/>
+		<field name="H263Level60"/>
+		<field name="H263Level70"/>
+		<field name="H263ProfileBackwardCompatible"/>
+		<field name="H263ProfileBaseline"/>
+		<field name="H263ProfileH320Coding"/>
+		<field name="H263ProfileHighCompression"/>
+		<field name="H263ProfileHighLatency"/>
+		<field name="H263ProfileISWV2"/>
+		<field name="H263ProfileISWV3"/>
+		<field name="H263ProfileInterlace"/>
+		<field name="H263ProfileInternet"/>
+		<field name="HEVCHighTierLevel1" since="21"/>
+		<field name="HEVCHighTierLevel2" since="21"/>
+		<field name="HEVCHighTierLevel21" since="21"/>
+		<field name="HEVCHighTierLevel3" since="21"/>
+		<field name="HEVCHighTierLevel31" since="21"/>
+		<field name="HEVCHighTierLevel4" since="21"/>
+		<field name="HEVCHighTierLevel41" since="21"/>
+		<field name="HEVCHighTierLevel5" since="21"/>
+		<field name="HEVCHighTierLevel51" since="21"/>
+		<field name="HEVCHighTierLevel52" since="21"/>
+		<field name="HEVCHighTierLevel6" since="21"/>
+		<field name="HEVCHighTierLevel61" since="21"/>
+		<field name="HEVCHighTierLevel62" since="21"/>
+		<field name="HEVCMainTierLevel1" since="21"/>
+		<field name="HEVCMainTierLevel2" since="21"/>
+		<field name="HEVCMainTierLevel21" since="21"/>
+		<field name="HEVCMainTierLevel3" since="21"/>
+		<field name="HEVCMainTierLevel31" since="21"/>
+		<field name="HEVCMainTierLevel4" since="21"/>
+		<field name="HEVCMainTierLevel41" since="21"/>
+		<field name="HEVCMainTierLevel5" since="21"/>
+		<field name="HEVCMainTierLevel51" since="21"/>
+		<field name="HEVCMainTierLevel52" since="21"/>
+		<field name="HEVCMainTierLevel6" since="21"/>
+		<field name="HEVCMainTierLevel61" since="21"/>
+		<field name="HEVCMainTierLevel62" since="21"/>
+		<field name="HEVCProfileMain" since="21"/>
+		<field name="HEVCProfileMain10" since="21"/>
+		<field name="HEVCProfileMain10HDR10" since="24"/>
+		<field name="HEVCProfileMain10HDR10Plus" since="29"/>
+		<field name="HEVCProfileMainStill" since="28"/>
+		<field name="MPEG2LevelH14" since="23"/>
+		<field name="MPEG2LevelHL" since="23"/>
+		<field name="MPEG2LevelHP" since="24"/>
+		<field name="MPEG2LevelLL" since="23"/>
+		<field name="MPEG2LevelML" since="23"/>
+		<field name="MPEG2Profile422" since="23"/>
+		<field name="MPEG2ProfileHigh" since="23"/>
+		<field name="MPEG2ProfileMain" since="23"/>
+		<field name="MPEG2ProfileSNR" since="23"/>
+		<field name="MPEG2ProfileSimple" since="23"/>
+		<field name="MPEG2ProfileSpatial" since="23"/>
+		<field name="MPEG4Level0"/>
+		<field name="MPEG4Level0b"/>
+		<field name="MPEG4Level1"/>
+		<field name="MPEG4Level2"/>
+		<field name="MPEG4Level3"/>
+		<field name="MPEG4Level3b" since="24"/>
+		<field name="MPEG4Level4"/>
+		<field name="MPEG4Level4a"/>
+		<field name="MPEG4Level5"/>
+		<field name="MPEG4Level6" since="24"/>
+		<field name="MPEG4ProfileAdvancedCoding"/>
+		<field name="MPEG4ProfileAdvancedCore"/>
+		<field name="MPEG4ProfileAdvancedRealTime"/>
+		<field name="MPEG4ProfileAdvancedScalable"/>
+		<field name="MPEG4ProfileAdvancedSimple"/>
+		<field name="MPEG4ProfileBasicAnimated"/>
+		<field name="MPEG4ProfileCore"/>
+		<field name="MPEG4ProfileCoreScalable"/>
+		<field name="MPEG4ProfileHybrid"/>
+		<field name="MPEG4ProfileMain"/>
+		<field name="MPEG4ProfileNbit"/>
+		<field name="MPEG4ProfileScalableTexture"/>
+		<field name="MPEG4ProfileSimple"/>
+		<field name="MPEG4ProfileSimpleFBA"/>
+		<field name="MPEG4ProfileSimpleFace"/>
+		<field name="MPEG4ProfileSimpleScalable"/>
+		<field name="VP8Level_Version0" since="18"/>
+		<field name="VP8Level_Version1" since="18"/>
+		<field name="VP8Level_Version2" since="18"/>
+		<field name="VP8Level_Version3" since="18"/>
+		<field name="VP8ProfileMain" since="18"/>
+		<field name="VP9Level1" since="24"/>
+		<field name="VP9Level11" since="24"/>
+		<field name="VP9Level2" since="24"/>
+		<field name="VP9Level21" since="24"/>
+		<field name="VP9Level3" since="24"/>
+		<field name="VP9Level31" since="24"/>
+		<field name="VP9Level4" since="24"/>
+		<field name="VP9Level41" since="24"/>
+		<field name="VP9Level5" since="24"/>
+		<field name="VP9Level51" since="24"/>
+		<field name="VP9Level52" since="24"/>
+		<field name="VP9Level6" since="24"/>
+		<field name="VP9Level61" since="24"/>
+		<field name="VP9Level62" since="24"/>
+		<field name="VP9Profile0" since="24"/>
+		<field name="VP9Profile1" since="24"/>
+		<field name="VP9Profile2" since="24"/>
+		<field name="VP9Profile2HDR" since="24"/>
+		<field name="VP9Profile2HDR10Plus" since="29"/>
+		<field name="VP9Profile3" since="24"/>
+		<field name="VP9Profile3HDR" since="24"/>
+		<field name="VP9Profile3HDR10Plus" since="29"/>
+		<field name="level"/>
+		<field name="profile"/>
+	</class>
+	<class name="android/media/MediaCodecInfo$EncoderCapabilities" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getComplexityRange()Landroid/util/Range;"/>
+		<method name="getQualityRange()Landroid/util/Range;" since="28"/>
+		<method name="isBitrateModeSupported(I)Z"/>
+		<field name="BITRATE_MODE_CBR"/>
+		<field name="BITRATE_MODE_CBR_FD" since="31"/>
+		<field name="BITRATE_MODE_CQ"/>
+		<field name="BITRATE_MODE_VBR"/>
+	</class>
+	<class name="android/media/MediaCodecInfo$VideoCapabilities" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="areSizeAndRateSupported(IID)Z"/>
+		<method name="getAchievableFrameRatesFor(II)Landroid/util/Range;" since="23"/>
+		<method name="getBitrateRange()Landroid/util/Range;"/>
+		<method name="getHeightAlignment()I"/>
+		<method name="getSupportedFrameRates()Landroid/util/Range;"/>
+		<method name="getSupportedFrameRatesFor(II)Landroid/util/Range;"/>
+		<method name="getSupportedHeights()Landroid/util/Range;"/>
+		<method name="getSupportedHeightsFor(I)Landroid/util/Range;"/>
+		<method name="getSupportedPerformancePoints()Ljava/util/List;" since="29"/>
+		<method name="getSupportedWidths()Landroid/util/Range;"/>
+		<method name="getSupportedWidthsFor(I)Landroid/util/Range;"/>
+		<method name="getWidthAlignment()I"/>
+		<method name="isSizeSupported(II)Z"/>
+	</class>
+	<class name="android/media/MediaCodecInfo$VideoCapabilities$PerformancePoint" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="covers(Landroid/media/MediaCodecInfo$VideoCapabilities$PerformancePoint;)Z"/>
+		<method name="covers(Landroid/media/MediaFormat;)Z"/>
+		<field name="FHD_100"/>
+		<field name="FHD_120"/>
+		<field name="FHD_200"/>
+		<field name="FHD_24"/>
+		<field name="FHD_240"/>
+		<field name="FHD_25"/>
+		<field name="FHD_30"/>
+		<field name="FHD_50"/>
+		<field name="FHD_60"/>
+		<field name="HD_100"/>
+		<field name="HD_120"/>
+		<field name="HD_200"/>
+		<field name="HD_24"/>
+		<field name="HD_240"/>
+		<field name="HD_25"/>
+		<field name="HD_30"/>
+		<field name="HD_50"/>
+		<field name="HD_60"/>
+		<field name="SD_24"/>
+		<field name="SD_25"/>
+		<field name="SD_30"/>
+		<field name="SD_48"/>
+		<field name="SD_50"/>
+		<field name="SD_60"/>
+		<field name="UHD_100"/>
+		<field name="UHD_120"/>
+		<field name="UHD_200"/>
+		<field name="UHD_24"/>
+		<field name="UHD_240"/>
+		<field name="UHD_25"/>
+		<field name="UHD_30"/>
+		<field name="UHD_50"/>
+		<field name="UHD_60"/>
+	</class>
+	<class name="android/media/MediaCodecList" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V" since="21"/>
+		<method name="findDecoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21"/>
+		<method name="findEncoderForFormat(Landroid/media/MediaFormat;)Ljava/lang/String;" since="21"/>
+		<method name="getCodecCount()I" deprecated="21"/>
+		<method name="getCodecInfoAt(I)Landroid/media/MediaCodecInfo;" deprecated="21"/>
+		<method name="getCodecInfos()[Landroid/media/MediaCodecInfo;" since="21"/>
+		<field name="ALL_CODECS" since="21"/>
+		<field name="REGULAR_CODECS" since="21"/>
+	</class>
+	<class name="android/media/MediaCommunicationManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getSession2Tokens()Ljava/util/List;"/>
+		<method name="getVersion()I"/>
+	</class>
+	<class name="android/media/MediaController2" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="cancelSessionCommand(Ljava/lang/Object;)V"/>
+		<method name="getConnectedToken()Landroid/media/Session2Token;"/>
+		<method name="isPlaybackActive()Z"/>
+		<method name="sendSessionCommand(Landroid/media/Session2Command;Landroid/os/Bundle;)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/media/MediaController2$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/media/Session2Token;)V"/>
+		<method name="build()Landroid/media/MediaController2;"/>
+		<method name="setConnectionHints(Landroid/os/Bundle;)Landroid/media/MediaController2$Builder;"/>
+		<method name="setControllerCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaController2$ControllerCallback;)Landroid/media/MediaController2$Builder;"/>
+	</class>
+	<class name="android/media/MediaController2$ControllerCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCommandResult(Landroid/media/MediaController2;Ljava/lang/Object;Landroid/media/Session2Command;Landroid/media/Session2Command$Result;)V"/>
+		<method name="onConnected(Landroid/media/MediaController2;Landroid/media/Session2CommandGroup;)V"/>
+		<method name="onDisconnected(Landroid/media/MediaController2;)V"/>
+		<method name="onPlaybackActiveChanged(Landroid/media/MediaController2;Z)V"/>
+		<method name="onSessionCommand(Landroid/media/MediaController2;Landroid/media/Session2Command;Landroid/os/Bundle;)Landroid/media/Session2Command$Result;"/>
+	</class>
+	<class name="android/media/MediaCrypto" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/UUID;[B)V"/>
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;)Z"/>
+		<method name="release()V"/>
+		<method name="requiresSecureDecoderComponent(Ljava/lang/String;)Z"/>
+		<method name="setMediaDrmSession([B)V" since="23"/>
+	</class>
+	<class name="android/media/MediaCryptoException" since="16">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/MediaDataSource" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getSize()J"/>
+		<method name="readAt(J[BII)I"/>
+	</class>
+	<class name="android/media/MediaDescrambler" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="descramble(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;Landroid/media/MediaCodec$CryptoInfo;)I"/>
+		<method name="requiresSecureDecoderComponent(Ljava/lang/String;)Z"/>
+		<method name="setMediaCasSession(Landroid/media/MediaCas$Session;)V"/>
+		<field name="SCRAMBLE_CONTROL_EVEN_KEY" since="28"/>
+		<field name="SCRAMBLE_CONTROL_ODD_KEY" since="28"/>
+		<field name="SCRAMBLE_CONTROL_RESERVED" since="28"/>
+		<field name="SCRAMBLE_CONTROL_UNSCRAMBLED" since="28"/>
+		<field name="SCRAMBLE_FLAG_PES_HEADER" since="28"/>
+	</class>
+	<class name="android/media/MediaDescription" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDescription()Ljava/lang/CharSequence;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getIconBitmap()Landroid/graphics/Bitmap;"/>
+		<method name="getIconUri()Landroid/net/Uri;"/>
+		<method name="getMediaId()Ljava/lang/String;"/>
+		<method name="getMediaUri()Landroid/net/Uri;" since="23"/>
+		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<field name="BT_FOLDER_TYPE_ALBUMS" since="26"/>
+		<field name="BT_FOLDER_TYPE_ARTISTS" since="26"/>
+		<field name="BT_FOLDER_TYPE_GENRES" since="26"/>
+		<field name="BT_FOLDER_TYPE_MIXED" since="26"/>
+		<field name="BT_FOLDER_TYPE_PLAYLISTS" since="26"/>
+		<field name="BT_FOLDER_TYPE_TITLES" since="26"/>
+		<field name="BT_FOLDER_TYPE_YEARS" since="26"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_BT_FOLDER_TYPE" since="26"/>
+	</class>
+	<class name="android/media/MediaDescription$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/media/MediaDescription;"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/MediaDescription$Builder;"/>
+		<method name="setIconBitmap(Landroid/graphics/Bitmap;)Landroid/media/MediaDescription$Builder;"/>
+		<method name="setIconUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;"/>
+		<method name="setMediaId(Ljava/lang/String;)Landroid/media/MediaDescription$Builder;"/>
+		<method name="setMediaUri(Landroid/net/Uri;)Landroid/media/MediaDescription$Builder;" since="23"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/media/MediaDescription$Builder;"/>
+	</class>
+	<class name="android/media/MediaDrm" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="28"/>
+		<method name="&lt;init>(Ljava/util/UUID;)V"/>
+		<method name="clearOnEventListener()V" since="29"/>
+		<method name="clearOnExpirationUpdateListener()V" since="29"/>
+		<method name="clearOnKeyStatusChangeListener()V" since="29"/>
+		<method name="clearOnSessionLostStateListener()V" since="29"/>
+		<method name="closeSession([B)V"/>
+		<method name="getConnectedHdcpLevel()I" since="28"/>
+		<method name="getCryptoSession([BLjava/lang/String;Ljava/lang/String;)Landroid/media/MediaDrm$CryptoSession;"/>
+		<method name="getKeyRequest([B[BLjava/lang/String;ILjava/util/HashMap;)Landroid/media/MediaDrm$KeyRequest;"/>
+		<method name="getLogMessages()Ljava/util/List;" since="31"/>
+		<method name="getMaxHdcpLevel()I" since="28"/>
+		<method name="getMaxSecurityLevel()I" since="28"/>
+		<method name="getMaxSessionCount()I" since="28"/>
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="28"/>
+		<method name="getOfflineLicenseKeySetIds()Ljava/util/List;" since="29"/>
+		<method name="getOfflineLicenseState([B)I" since="29"/>
+		<method name="getOpenSessionCount()I" since="28"/>
+		<method name="getPlaybackComponent([B)Landroid/media/MediaDrm$PlaybackComponent;" since="31"/>
+		<method name="getPropertyByteArray(Ljava/lang/String;)[B"/>
+		<method name="getPropertyString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getProvisionRequest()Landroid/media/MediaDrm$ProvisionRequest;"/>
+		<method name="getSecureStop([B)[B" since="22"/>
+		<method name="getSecureStopIds()Ljava/util/List;" since="28"/>
+		<method name="getSecureStops()Ljava/util/List;"/>
+		<method name="getSecurityLevel([B)I" since="28"/>
+		<method name="getSupportedCryptoSchemes()Ljava/util/List;" since="30"/>
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;)Z"/>
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;Ljava/lang/String;)Z" since="19"/>
+		<method name="isCryptoSchemeSupported(Ljava/util/UUID;Ljava/lang/String;I)Z" since="29"/>
+		<method name="openSession()[B"/>
+		<method name="openSession(I)[B" since="28"/>
+		<method name="provideKeyResponse([B[B)[B"/>
+		<method name="provideProvisionResponse([B)V"/>
+		<method name="queryKeyStatus([B)Ljava/util/HashMap;"/>
+		<method name="release()V" deprecated="28"/>
+		<method name="releaseAllSecureStops()V" since="22" deprecated="28"/>
+		<method name="releaseSecureStops([B)V"/>
+		<method name="removeAllSecureStops()V" since="28"/>
+		<method name="removeKeys([B)V"/>
+		<method name="removeOfflineLicense([B)V" since="29"/>
+		<method name="removeSecureStop([B)V" since="28"/>
+		<method name="requiresSecureDecoder(Ljava/lang/String;)Z" since="31"/>
+		<method name="requiresSecureDecoder(Ljava/lang/String;I)Z" since="31"/>
+		<method name="restoreKeys([B[B)V"/>
+		<method name="setOnEventListener(Landroid/media/MediaDrm$OnEventListener;)V"/>
+		<method name="setOnEventListener(Landroid/media/MediaDrm$OnEventListener;Landroid/os/Handler;)V" since="29"/>
+		<method name="setOnEventListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnEventListener;)V" since="29"/>
+		<method name="setOnExpirationUpdateListener(Landroid/media/MediaDrm$OnExpirationUpdateListener;Landroid/os/Handler;)V" since="23"/>
+		<method name="setOnExpirationUpdateListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnExpirationUpdateListener;)V" since="29"/>
+		<method name="setOnKeyStatusChangeListener(Landroid/media/MediaDrm$OnKeyStatusChangeListener;Landroid/os/Handler;)V" since="23"/>
+		<method name="setOnKeyStatusChangeListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnKeyStatusChangeListener;)V" since="29"/>
+		<method name="setOnSessionLostStateListener(Landroid/media/MediaDrm$OnSessionLostStateListener;Landroid/os/Handler;)V" since="29"/>
+		<method name="setOnSessionLostStateListener(Ljava/util/concurrent/Executor;Landroid/media/MediaDrm$OnSessionLostStateListener;)V" since="29"/>
+		<method name="setPropertyByteArray(Ljava/lang/String;[B)V"/>
+		<method name="setPropertyString(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="EVENT_KEY_EXPIRED" deprecated="26"/>
+		<field name="EVENT_KEY_REQUIRED"/>
+		<field name="EVENT_PROVISION_REQUIRED" deprecated="23"/>
+		<field name="EVENT_SESSION_RECLAIMED" since="23"/>
+		<field name="EVENT_VENDOR_DEFINED"/>
+		<field name="HDCP_LEVEL_UNKNOWN" since="28"/>
+		<field name="HDCP_NONE" since="28"/>
+		<field name="HDCP_NO_DIGITAL_OUTPUT" since="28"/>
+		<field name="HDCP_V1" since="28"/>
+		<field name="HDCP_V2" since="28"/>
+		<field name="HDCP_V2_1" since="28"/>
+		<field name="HDCP_V2_2" since="28"/>
+		<field name="HDCP_V2_3" since="29"/>
+		<field name="KEY_TYPE_OFFLINE"/>
+		<field name="KEY_TYPE_RELEASE"/>
+		<field name="KEY_TYPE_STREAMING"/>
+		<field name="OFFLINE_LICENSE_STATE_RELEASED" since="29"/>
+		<field name="OFFLINE_LICENSE_STATE_UNKNOWN" since="29"/>
+		<field name="OFFLINE_LICENSE_STATE_USABLE" since="29"/>
+		<field name="PROPERTY_ALGORITHMS"/>
+		<field name="PROPERTY_DESCRIPTION"/>
+		<field name="PROPERTY_DEVICE_UNIQUE_ID"/>
+		<field name="PROPERTY_VENDOR"/>
+		<field name="PROPERTY_VERSION"/>
+		<field name="SECURITY_LEVEL_HW_SECURE_ALL" since="28"/>
+		<field name="SECURITY_LEVEL_HW_SECURE_CRYPTO" since="28"/>
+		<field name="SECURITY_LEVEL_HW_SECURE_DECODE" since="28"/>
+		<field name="SECURITY_LEVEL_SW_SECURE_CRYPTO" since="28"/>
+		<field name="SECURITY_LEVEL_SW_SECURE_DECODE" since="28"/>
+		<field name="SECURITY_LEVEL_UNKNOWN" since="28"/>
+	</class>
+	<class name="android/media/MediaDrm$CryptoSession" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="decrypt([B[B[B)[B"/>
+		<method name="encrypt([B[B[B)[B"/>
+		<method name="sign([B[B)[B"/>
+		<method name="verify([B[B[B)Z"/>
+	</class>
+	<class name="android/media/MediaDrm$ErrorCodes" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_CERTIFICATE_MALFORMED"/>
+		<field name="ERROR_CERTIFICATE_MISSING"/>
+		<field name="ERROR_CRYPTO_LIBRARY"/>
+		<field name="ERROR_FRAME_TOO_LARGE"/>
+		<field name="ERROR_GENERIC_OEM"/>
+		<field name="ERROR_GENERIC_PLUGIN"/>
+		<field name="ERROR_INIT_DATA"/>
+		<field name="ERROR_INSUFFICIENT_OUTPUT_PROTECTION"/>
+		<field name="ERROR_INSUFFICIENT_SECURITY"/>
+		<field name="ERROR_KEY_EXPIRED"/>
+		<field name="ERROR_KEY_NOT_LOADED"/>
+		<field name="ERROR_LICENSE_PARSE"/>
+		<field name="ERROR_LICENSE_POLICY"/>
+		<field name="ERROR_LICENSE_RELEASE"/>
+		<field name="ERROR_LICENSE_REQUEST_REJECTED"/>
+		<field name="ERROR_LICENSE_RESTORE"/>
+		<field name="ERROR_LICENSE_STATE"/>
+		<field name="ERROR_LOST_STATE"/>
+		<field name="ERROR_MEDIA_FRAMEWORK"/>
+		<field name="ERROR_NO_KEY"/>
+		<field name="ERROR_PROVISIONING_CERTIFICATE"/>
+		<field name="ERROR_PROVISIONING_CONFIG"/>
+		<field name="ERROR_PROVISIONING_PARSE"/>
+		<field name="ERROR_PROVISIONING_REQUEST_REJECTED"/>
+		<field name="ERROR_PROVISIONING_RETRY"/>
+		<field name="ERROR_RESOURCE_BUSY"/>
+		<field name="ERROR_RESOURCE_CONTENTION"/>
+		<field name="ERROR_SECURE_STOP_RELEASE"/>
+		<field name="ERROR_SESSION_NOT_OPENED"/>
+		<field name="ERROR_STORAGE_READ"/>
+		<field name="ERROR_STORAGE_WRITE"/>
+		<field name="ERROR_UNKNOWN"/>
+		<field name="ERROR_UNSUPPORTED_OPERATION"/>
+		<field name="ERROR_ZERO_SUBSAMPLES"/>
+	</class>
+	<class name="android/media/MediaDrm$HdcpLevel" since="28" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/media/MediaDrm$KeyRequest" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="getData()[B"/>
+		<method name="getDefaultUrl()Ljava/lang/String;"/>
+		<method name="getRequestType()I" since="23"/>
+		<field name="REQUEST_TYPE_INITIAL" since="23"/>
+		<field name="REQUEST_TYPE_NONE" since="28"/>
+		<field name="REQUEST_TYPE_RELEASE" since="23"/>
+		<field name="REQUEST_TYPE_RENEWAL" since="23"/>
+		<field name="REQUEST_TYPE_UPDATE" since="28"/>
+	</class>
+	<class name="android/media/MediaDrm$KeyStatus" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getKeyId()[B"/>
+		<method name="getStatusCode()I"/>
+		<field name="STATUS_EXPIRED"/>
+		<field name="STATUS_INTERNAL_ERROR"/>
+		<field name="STATUS_OUTPUT_NOT_ALLOWED"/>
+		<field name="STATUS_PENDING"/>
+		<field name="STATUS_USABLE"/>
+		<field name="STATUS_USABLE_IN_FUTURE" since="29"/>
+	</class>
+	<class name="android/media/MediaDrm$LogMessage" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getMessage()Ljava/lang/String;"/>
+		<method name="getPriority()I"/>
+		<method name="getTimestampMillis()J"/>
+	</class>
+	<class name="android/media/MediaDrm$MediaDrmStateException" since="21">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="getDiagnosticInfo()Ljava/lang/String;"/>
+		<method name="getErrorCode()I" since="31"/>
+		<method name="isTransient()Z" since="31"/>
+	</class>
+	<class name="android/media/MediaDrm$MetricsConstants" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="CLOSE_SESSION_ERROR_COUNT"/>
+		<field name="CLOSE_SESSION_ERROR_LIST"/>
+		<field name="CLOSE_SESSION_OK_COUNT"/>
+		<field name="EVENT_KEY_EXPIRED_COUNT"/>
+		<field name="EVENT_KEY_NEEDED_COUNT"/>
+		<field name="EVENT_PROVISION_REQUIRED_COUNT"/>
+		<field name="EVENT_SESSION_RECLAIMED_COUNT"/>
+		<field name="EVENT_VENDOR_DEFINED_COUNT"/>
+		<field name="GET_DEVICE_UNIQUE_ID_ERROR_COUNT"/>
+		<field name="GET_DEVICE_UNIQUE_ID_ERROR_LIST"/>
+		<field name="GET_DEVICE_UNIQUE_ID_OK_COUNT"/>
+		<field name="GET_KEY_REQUEST_ERROR_COUNT"/>
+		<field name="GET_KEY_REQUEST_ERROR_LIST"/>
+		<field name="GET_KEY_REQUEST_OK_COUNT"/>
+		<field name="GET_KEY_REQUEST_OK_TIME_MICROS"/>
+		<field name="GET_PROVISION_REQUEST_ERROR_COUNT"/>
+		<field name="GET_PROVISION_REQUEST_ERROR_LIST"/>
+		<field name="GET_PROVISION_REQUEST_OK_COUNT"/>
+		<field name="KEY_STATUS_EXPIRED_COUNT"/>
+		<field name="KEY_STATUS_INTERNAL_ERROR_COUNT"/>
+		<field name="KEY_STATUS_OUTPUT_NOT_ALLOWED_COUNT"/>
+		<field name="KEY_STATUS_PENDING_COUNT"/>
+		<field name="KEY_STATUS_USABLE_COUNT"/>
+		<field name="OPEN_SESSION_ERROR_COUNT"/>
+		<field name="OPEN_SESSION_ERROR_LIST"/>
+		<field name="OPEN_SESSION_OK_COUNT"/>
+		<field name="PROVIDE_KEY_RESPONSE_ERROR_COUNT"/>
+		<field name="PROVIDE_KEY_RESPONSE_ERROR_LIST"/>
+		<field name="PROVIDE_KEY_RESPONSE_OK_COUNT"/>
+		<field name="PROVIDE_KEY_RESPONSE_OK_TIME_MICROS"/>
+		<field name="PROVIDE_PROVISION_RESPONSE_ERROR_COUNT"/>
+		<field name="PROVIDE_PROVISION_RESPONSE_ERROR_LIST"/>
+		<field name="PROVIDE_PROVISION_RESPONSE_OK_COUNT"/>
+		<field name="SESSION_END_TIMES_MS"/>
+		<field name="SESSION_START_TIMES_MS"/>
+	</class>
+	<class name="android/media/MediaDrm$OnEventListener" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="onEvent(Landroid/media/MediaDrm;[BII[B)V"/>
+	</class>
+	<class name="android/media/MediaDrm$OnExpirationUpdateListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onExpirationUpdate(Landroid/media/MediaDrm;[BJ)V"/>
+	</class>
+	<class name="android/media/MediaDrm$OnKeyStatusChangeListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onKeyStatusChange(Landroid/media/MediaDrm;[BLjava/util/List;Z)V"/>
+	</class>
+	<class name="android/media/MediaDrm$OnSessionLostStateListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onSessionLostState(Landroid/media/MediaDrm;[B)V"/>
+	</class>
+	<class name="android/media/MediaDrm$PlaybackComponent" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;"/>
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V"/>
+	</class>
+	<class name="android/media/MediaDrm$ProvisionRequest" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="getData()[B"/>
+		<method name="getDefaultUrl()Ljava/lang/String;"/>
+	</class>
+	<class name="android/media/MediaDrm$SecurityLevel" since="28" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/media/MediaDrm$SessionException" since="29">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="getErrorCode()I" deprecated="31"/>
+		<method name="isTransient()Z" since="31"/>
+		<field name="ERROR_RESOURCE_CONTENTION" deprecated="31"/>
+		<field name="ERROR_UNKNOWN" deprecated="31"/>
+	</class>
+	<class name="android/media/MediaDrmException" since="18">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/MediaDrmResetException" since="23">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/MediaExtractor" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="advance()Z"/>
+		<method name="getAudioPresentations(I)Ljava/util/List;" since="28"/>
+		<method name="getCachedDuration()J"/>
+		<method name="getCasInfo(I)Landroid/media/MediaExtractor$CasInfo;" since="26"/>
+		<method name="getDrmInitData()Landroid/media/DrmInitData;" since="24"/>
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31"/>
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
+		<method name="getPsshInfo()Ljava/util/Map;" since="18"/>
+		<method name="getSampleCryptoInfo(Landroid/media/MediaCodec$CryptoInfo;)Z"/>
+		<method name="getSampleFlags()I"/>
+		<method name="getSampleSize()J" since="28"/>
+		<method name="getSampleTime()J"/>
+		<method name="getSampleTrackIndex()I"/>
+		<method name="getTrackCount()I"/>
+		<method name="getTrackFormat(I)Landroid/media/MediaFormat;"/>
+		<method name="hasCacheReachedEndOfStream()Z"/>
+		<method name="readSampleData(Ljava/nio/ByteBuffer;I)I"/>
+		<method name="release()V"/>
+		<method name="seekTo(JI)V"/>
+		<method name="selectTrack(I)V"/>
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;)V"/>
+		<method name="setDataSource(Landroid/content/res/AssetFileDescriptor;)V" since="24"/>
+		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23"/>
+		<method name="setDataSource(Ljava/io/FileDescriptor;)V"/>
+		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V"/>
+		<method name="setDataSource(Ljava/lang/String;)V"/>
+		<method name="setDataSource(Ljava/lang/String;Ljava/util/Map;)V"/>
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31"/>
+		<method name="setMediaCas(Landroid/media/MediaCas;)V" since="26"/>
+		<method name="unselectTrack(I)V"/>
+		<field name="SAMPLE_FLAG_ENCRYPTED"/>
+		<field name="SAMPLE_FLAG_PARTIAL_FRAME" since="26"/>
+		<field name="SAMPLE_FLAG_SYNC"/>
+		<field name="SEEK_TO_CLOSEST_SYNC"/>
+		<field name="SEEK_TO_NEXT_SYNC"/>
+		<field name="SEEK_TO_PREVIOUS_SYNC"/>
+	</class>
+	<class name="android/media/MediaExtractor$CasInfo" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getPrivateData()[B" since="29"/>
+		<method name="getSession()Landroid/media/MediaCas$Session;"/>
+		<method name="getSystemId()I"/>
+	</class>
+	<class name="android/media/MediaExtractor$MetricsConstants" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="FORMAT"/>
+		<field name="MIME_TYPE"/>
+		<field name="TRACKS"/>
+	</class>
+	<class name="android/media/MediaFeature" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/media/MediaFeature$HdrType" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="DOLBY_VISION"/>
+		<field name="HDR10"/>
+		<field name="HDR10_PLUS"/>
+		<field name="HLG"/>
+	</class>
+	<class name="android/media/MediaFormat" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/media/MediaFormat;)V" since="29"/>
+		<method name="containsFeature(Ljava/lang/String;)Z" since="29"/>
+		<method name="containsKey(Ljava/lang/String;)Z"/>
+		<method name="createAudioFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;"/>
+		<method name="createSubtitleFormat(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaFormat;" since="19"/>
+		<method name="createVideoFormat(Ljava/lang/String;II)Landroid/media/MediaFormat;"/>
+		<method name="getByteBuffer(Ljava/lang/String;)Ljava/nio/ByteBuffer;"/>
+		<method name="getByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;" since="29"/>
+		<method name="getFeatureEnabled(Ljava/lang/String;)Z" since="21"/>
+		<method name="getFeatures()Ljava/util/Set;" since="29"/>
+		<method name="getFloat(Ljava/lang/String;)F"/>
+		<method name="getFloat(Ljava/lang/String;F)F" since="29"/>
+		<method name="getInteger(Ljava/lang/String;)I"/>
+		<method name="getInteger(Ljava/lang/String;I)I" since="29"/>
+		<method name="getKeys()Ljava/util/Set;" since="29"/>
+		<method name="getLong(Ljava/lang/String;)J"/>
+		<method name="getLong(Ljava/lang/String;J)J" since="29"/>
+		<method name="getNumber(Ljava/lang/String;)Ljava/lang/Number;" since="29"/>
+		<method name="getNumber(Ljava/lang/String;Ljava/lang/Number;)Ljava/lang/Number;" since="29"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="29"/>
+		<method name="getValueTypeForKey(Ljava/lang/String;)I" since="29"/>
+		<method name="removeFeature(Ljava/lang/String;)V" since="29"/>
+		<method name="removeKey(Ljava/lang/String;)V" since="29"/>
+		<method name="setByteBuffer(Ljava/lang/String;Ljava/nio/ByteBuffer;)V"/>
+		<method name="setFeatureEnabled(Ljava/lang/String;Z)V" since="21"/>
+		<method name="setFloat(Ljava/lang/String;F)V"/>
+		<method name="setInteger(Ljava/lang/String;I)V"/>
+		<method name="setLong(Ljava/lang/String;J)V"/>
+		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="COLOR_RANGE_FULL" since="24"/>
+		<field name="COLOR_RANGE_LIMITED" since="24"/>
+		<field name="COLOR_STANDARD_BT2020" since="24"/>
+		<field name="COLOR_STANDARD_BT601_NTSC" since="24"/>
+		<field name="COLOR_STANDARD_BT601_PAL" since="24"/>
+		<field name="COLOR_STANDARD_BT709" since="24"/>
+		<field name="COLOR_TRANSFER_HLG" since="24"/>
+		<field name="COLOR_TRANSFER_LINEAR" since="24"/>
+		<field name="COLOR_TRANSFER_SDR_VIDEO" since="24"/>
+		<field name="COLOR_TRANSFER_ST2084" since="24"/>
+		<field name="KEY_AAC_DRC_ALBUM_MODE" since="30"/>
+		<field name="KEY_AAC_DRC_ATTENUATION_FACTOR" since="21"/>
+		<field name="KEY_AAC_DRC_BOOST_FACTOR" since="21"/>
+		<field name="KEY_AAC_DRC_EFFECT_TYPE" since="28"/>
+		<field name="KEY_AAC_DRC_HEAVY_COMPRESSION" since="21"/>
+		<field name="KEY_AAC_DRC_OUTPUT_LOUDNESS" since="30"/>
+		<field name="KEY_AAC_DRC_TARGET_REFERENCE_LEVEL" since="21"/>
+		<field name="KEY_AAC_ENCODED_TARGET_LEVEL" since="21"/>
+		<field name="KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT" since="21"/>
+		<field name="KEY_AAC_PROFILE"/>
+		<field name="KEY_AAC_SBR_MODE" since="21"/>
+		<field name="KEY_ALLOW_FRAME_DROP" since="31"/>
+		<field name="KEY_AUDIO_SESSION_ID" since="21"/>
+		<field name="KEY_BITRATE_MODE" since="21"/>
+		<field name="KEY_BIT_RATE"/>
+		<field name="KEY_CAPTION_SERVICE_NUMBER" since="30"/>
+		<field name="KEY_CAPTURE_RATE" since="21"/>
+		<field name="KEY_CHANNEL_COUNT"/>
+		<field name="KEY_CHANNEL_MASK"/>
+		<field name="KEY_CODECS_STRING" since="30"/>
+		<field name="KEY_COLOR_FORMAT"/>
+		<field name="KEY_COLOR_RANGE" since="24"/>
+		<field name="KEY_COLOR_STANDARD" since="24"/>
+		<field name="KEY_COLOR_TRANSFER" since="24"/>
+		<field name="KEY_COLOR_TRANSFER_REQUEST" since="31"/>
+		<field name="KEY_COMPLEXITY" since="21"/>
+		<field name="KEY_CREATE_INPUT_SURFACE_SUSPENDED" since="29"/>
+		<field name="KEY_DURATION"/>
+		<field name="KEY_ENCODER_DELAY" since="30"/>
+		<field name="KEY_ENCODER_PADDING" since="30"/>
+		<field name="KEY_FLAC_COMPRESSION_LEVEL"/>
+		<field name="KEY_FRAME_RATE"/>
+		<field name="KEY_GRID_COLUMNS" since="28"/>
+		<field name="KEY_GRID_ROWS" since="28"/>
+		<field name="KEY_HAPTIC_CHANNEL_COUNT" since="29"/>
+		<field name="KEY_HARDWARE_AV_SYNC_ID" since="30"/>
+		<field name="KEY_HDR10_PLUS_INFO" since="29"/>
+		<field name="KEY_HDR_STATIC_INFO" since="24"/>
+		<field name="KEY_HEIGHT"/>
+		<field name="KEY_INTRA_REFRESH_PERIOD" since="24"/>
+		<field name="KEY_IS_ADTS"/>
+		<field name="KEY_IS_AUTOSELECT" since="19"/>
+		<field name="KEY_IS_DEFAULT" since="19"/>
+		<field name="KEY_IS_FORCED_SUBTITLE" since="19"/>
+		<field name="KEY_I_FRAME_INTERVAL"/>
+		<field name="KEY_LANGUAGE" since="19"/>
+		<field name="KEY_LATENCY" since="26"/>
+		<field name="KEY_LEVEL" since="23"/>
+		<field name="KEY_LOW_LATENCY" since="30"/>
+		<field name="KEY_MAX_B_FRAMES" since="29"/>
+		<field name="KEY_MAX_FPS_TO_ENCODER" since="29"/>
+		<field name="KEY_MAX_HEIGHT" since="19"/>
+		<field name="KEY_MAX_INPUT_SIZE"/>
+		<field name="KEY_MAX_OUTPUT_CHANNEL_COUNT" since="33"/>
+		<field name="KEY_MAX_PTS_GAP_TO_ENCODER" since="29"/>
+		<field name="KEY_MAX_WIDTH" since="19"/>
+		<field name="KEY_MIME"/>
+		<field name="KEY_MPEGH_COMPATIBLE_SETS" since="31"/>
+		<field name="KEY_MPEGH_PROFILE_LEVEL_INDICATION" since="31"/>
+		<field name="KEY_MPEGH_REFERENCE_CHANNEL_LAYOUT" since="31"/>
+		<field name="KEY_OPERATING_RATE" since="23"/>
+		<field name="KEY_OUTPUT_REORDER_DEPTH" since="28"/>
+		<field name="KEY_PCM_ENCODING" since="24"/>
+		<field name="KEY_PIXEL_ASPECT_RATIO_HEIGHT" since="30"/>
+		<field name="KEY_PIXEL_ASPECT_RATIO_WIDTH" since="30"/>
+		<field name="KEY_PREPEND_HEADER_TO_SYNC_FRAMES" since="29"/>
+		<field name="KEY_PRIORITY" since="23"/>
+		<field name="KEY_PROFILE" since="21"/>
+		<field name="KEY_PUSH_BLANK_BUFFERS_ON_STOP" since="19"/>
+		<field name="KEY_QUALITY" since="28"/>
+		<field name="KEY_REPEAT_PREVIOUS_FRAME_AFTER" since="19"/>
+		<field name="KEY_ROTATION" since="23"/>
+		<field name="KEY_SAMPLE_RATE"/>
+		<field name="KEY_SLICE_HEIGHT" since="23"/>
+		<field name="KEY_SLOW_MOTION_MARKERS" since="31"/>
+		<field name="KEY_STRIDE" since="23"/>
+		<field name="KEY_TEMPORAL_LAYERING" since="21"/>
+		<field name="KEY_TILE_HEIGHT" since="28"/>
+		<field name="KEY_TILE_WIDTH" since="28"/>
+		<field name="KEY_TRACK_ID" since="24"/>
+		<field name="KEY_VIDEO_QP_B_MAX" since="31"/>
+		<field name="KEY_VIDEO_QP_B_MIN" since="31"/>
+		<field name="KEY_VIDEO_QP_I_MAX" since="31"/>
+		<field name="KEY_VIDEO_QP_I_MIN" since="31"/>
+		<field name="KEY_VIDEO_QP_MAX" since="31"/>
+		<field name="KEY_VIDEO_QP_MIN" since="31"/>
+		<field name="KEY_VIDEO_QP_P_MAX" since="31"/>
+		<field name="KEY_VIDEO_QP_P_MIN" since="31"/>
+		<field name="KEY_WIDTH"/>
+		<field name="MIMETYPE_AUDIO_AAC" since="21"/>
+		<field name="MIMETYPE_AUDIO_AC3" since="21"/>
+		<field name="MIMETYPE_AUDIO_AC4" since="29"/>
+		<field name="MIMETYPE_AUDIO_AMR_NB" since="21"/>
+		<field name="MIMETYPE_AUDIO_AMR_WB" since="21"/>
+		<field name="MIMETYPE_AUDIO_EAC3" since="23"/>
+		<field name="MIMETYPE_AUDIO_EAC3_JOC" since="29"/>
+		<field name="MIMETYPE_AUDIO_FLAC" since="21"/>
+		<field name="MIMETYPE_AUDIO_G711_ALAW" since="21"/>
+		<field name="MIMETYPE_AUDIO_G711_MLAW" since="21"/>
+		<field name="MIMETYPE_AUDIO_MPEG" since="21"/>
+		<field name="MIMETYPE_AUDIO_MPEGH_MHA1" since="31"/>
+		<field name="MIMETYPE_AUDIO_MPEGH_MHM1" since="31"/>
+		<field name="MIMETYPE_AUDIO_MSGSM" since="21"/>
+		<field name="MIMETYPE_AUDIO_OPUS" since="21"/>
+		<field name="MIMETYPE_AUDIO_QCELP" since="21"/>
+		<field name="MIMETYPE_AUDIO_RAW" since="21"/>
+		<field name="MIMETYPE_AUDIO_SCRAMBLED" since="26"/>
+		<field name="MIMETYPE_AUDIO_VORBIS" since="21"/>
+		<field name="MIMETYPE_IMAGE_ANDROID_HEIC" since="28"/>
+		<field name="MIMETYPE_TEXT_CEA_608" since="21"/>
+		<field name="MIMETYPE_TEXT_CEA_708" since="28"/>
+		<field name="MIMETYPE_TEXT_SUBRIP" since="28"/>
+		<field name="MIMETYPE_TEXT_VTT" since="21"/>
+		<field name="MIMETYPE_VIDEO_AV1" since="29"/>
+		<field name="MIMETYPE_VIDEO_AVC" since="21"/>
+		<field name="MIMETYPE_VIDEO_DOLBY_VISION" since="24"/>
+		<field name="MIMETYPE_VIDEO_H263" since="21"/>
+		<field name="MIMETYPE_VIDEO_HEVC" since="21"/>
+		<field name="MIMETYPE_VIDEO_MPEG2" since="21"/>
+		<field name="MIMETYPE_VIDEO_MPEG4" since="21"/>
+		<field name="MIMETYPE_VIDEO_RAW" since="21"/>
+		<field name="MIMETYPE_VIDEO_SCRAMBLED" since="26"/>
+		<field name="MIMETYPE_VIDEO_VP8" since="21"/>
+		<field name="MIMETYPE_VIDEO_VP9" since="21"/>
+		<field name="TYPE_BYTE_BUFFER" since="29"/>
+		<field name="TYPE_FLOAT" since="29"/>
+		<field name="TYPE_INTEGER" since="29"/>
+		<field name="TYPE_LONG" since="29"/>
+		<field name="TYPE_NULL" since="29"/>
+		<field name="TYPE_STRING" since="29"/>
+	</class>
+	<class name="android/media/MediaMetadata" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="containsKey(Ljava/lang/String;)Z"/>
+		<method name="getBitmap(Ljava/lang/String;)Landroid/graphics/Bitmap;"/>
+		<method name="getBitmapDimensionLimit()I" since="31"/>
+		<method name="getDescription()Landroid/media/MediaDescription;"/>
+		<method name="getLong(Ljava/lang/String;)J"/>
+		<method name="getRating(Ljava/lang/String;)Landroid/media/Rating;"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getText(Ljava/lang/String;)Ljava/lang/CharSequence;"/>
+		<method name="keySet()Ljava/util/Set;"/>
+		<method name="size()I"/>
+		<field name="CREATOR"/>
+		<field name="METADATA_KEY_ALBUM"/>
+		<field name="METADATA_KEY_ALBUM_ART"/>
+		<field name="METADATA_KEY_ALBUM_ARTIST"/>
+		<field name="METADATA_KEY_ALBUM_ART_URI"/>
+		<field name="METADATA_KEY_ART"/>
+		<field name="METADATA_KEY_ARTIST"/>
+		<field name="METADATA_KEY_ART_URI"/>
+		<field name="METADATA_KEY_AUTHOR"/>
+		<field name="METADATA_KEY_BT_FOLDER_TYPE" since="26"/>
+		<field name="METADATA_KEY_COMPILATION"/>
+		<field name="METADATA_KEY_COMPOSER"/>
+		<field name="METADATA_KEY_DATE"/>
+		<field name="METADATA_KEY_DISC_NUMBER"/>
+		<field name="METADATA_KEY_DISPLAY_DESCRIPTION"/>
+		<field name="METADATA_KEY_DISPLAY_ICON"/>
+		<field name="METADATA_KEY_DISPLAY_ICON_URI"/>
+		<field name="METADATA_KEY_DISPLAY_SUBTITLE"/>
+		<field name="METADATA_KEY_DISPLAY_TITLE"/>
+		<field name="METADATA_KEY_DURATION"/>
+		<field name="METADATA_KEY_GENRE"/>
+		<field name="METADATA_KEY_MEDIA_ID"/>
+		<field name="METADATA_KEY_MEDIA_URI" since="26"/>
+		<field name="METADATA_KEY_NUM_TRACKS"/>
+		<field name="METADATA_KEY_RATING"/>
+		<field name="METADATA_KEY_TITLE"/>
+		<field name="METADATA_KEY_TRACK_NUMBER"/>
+		<field name="METADATA_KEY_USER_RATING"/>
+		<field name="METADATA_KEY_WRITER"/>
+		<field name="METADATA_KEY_YEAR"/>
+	</class>
+	<class name="android/media/MediaMetadata$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/media/MediaMetadata;)V"/>
+		<method name="build()Landroid/media/MediaMetadata;"/>
+		<method name="putBitmap(Ljava/lang/String;Landroid/graphics/Bitmap;)Landroid/media/MediaMetadata$Builder;"/>
+		<method name="putLong(Ljava/lang/String;J)Landroid/media/MediaMetadata$Builder;"/>
+		<method name="putRating(Ljava/lang/String;Landroid/media/Rating;)Landroid/media/MediaMetadata$Builder;"/>
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)Landroid/media/MediaMetadata$Builder;"/>
+		<method name="putText(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/media/MediaMetadata$Builder;"/>
+		<method name="setBitmapDimensionLimit(I)Landroid/media/MediaMetadata$Builder;" since="31"/>
+	</class>
+	<class name="android/media/MediaMetadataEditor" since="19" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="addEditableKey(I)V" deprecated="29"/>
+		<method name="apply()V" deprecated="29"/>
+		<method name="clear()V" deprecated="29"/>
+		<method name="getBitmap(ILandroid/graphics/Bitmap;)Landroid/graphics/Bitmap;" deprecated="29"/>
+		<method name="getEditableKeys()[I" deprecated="29"/>
+		<method name="getLong(IJ)J" deprecated="29"/>
+		<method name="getObject(ILjava/lang/Object;)Ljava/lang/Object;" deprecated="29"/>
+		<method name="getString(ILjava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+		<method name="putLong(IJ)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+		<method name="putObject(ILjava/lang/Object;)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+		<method name="putString(ILjava/lang/String;)Landroid/media/MediaMetadataEditor;" deprecated="29"/>
+		<method name="removeEditableKeys()V" deprecated="29"/>
+		<field name="BITMAP_KEY_ARTWORK" deprecated="29"/>
+		<field name="RATING_KEY_BY_OTHERS" deprecated="29"/>
+		<field name="RATING_KEY_BY_USER" deprecated="29"/>
+	</class>
+	<class name="android/media/MediaMetadataRetriever" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="29"/>
+		<method name="&lt;init>()V"/>
+		<method name="extractMetadata(I)Ljava/lang/String;"/>
+		<method name="getEmbeddedPicture()[B"/>
+		<method name="getFrameAtIndex(I)Landroid/graphics/Bitmap;" since="28"/>
+		<method name="getFrameAtIndex(ILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28"/>
+		<method name="getFrameAtTime()Landroid/graphics/Bitmap;"/>
+		<method name="getFrameAtTime(J)Landroid/graphics/Bitmap;"/>
+		<method name="getFrameAtTime(JI)Landroid/graphics/Bitmap;"/>
+		<method name="getFrameAtTime(JILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="30"/>
+		<method name="getFramesAtIndex(II)Ljava/util/List;" since="28"/>
+		<method name="getFramesAtIndex(IILandroid/media/MediaMetadataRetriever$BitmapParams;)Ljava/util/List;" since="28"/>
+		<method name="getImageAtIndex(I)Landroid/graphics/Bitmap;" since="28"/>
+		<method name="getImageAtIndex(ILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28"/>
+		<method name="getPrimaryImage()Landroid/graphics/Bitmap;" since="28"/>
+		<method name="getPrimaryImage(Landroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="28"/>
+		<method name="getScaledFrameAtTime(JIII)Landroid/graphics/Bitmap;" since="27"/>
+		<method name="getScaledFrameAtTime(JIIILandroid/media/MediaMetadataRetriever$BitmapParams;)Landroid/graphics/Bitmap;" since="30"/>
+		<method name="release()V"/>
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;)V"/>
+		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23"/>
+		<method name="setDataSource(Ljava/io/FileDescriptor;)V"/>
+		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V"/>
+		<method name="setDataSource(Ljava/lang/String;)V"/>
+		<method name="setDataSource(Ljava/lang/String;Ljava/util/Map;)V" since="14"/>
+		<field name="METADATA_KEY_ALBUM"/>
+		<field name="METADATA_KEY_ALBUMARTIST"/>
+		<field name="METADATA_KEY_ARTIST"/>
+		<field name="METADATA_KEY_AUTHOR"/>
+		<field name="METADATA_KEY_BITRATE" since="14"/>
+		<field name="METADATA_KEY_BITS_PER_SAMPLE" since="31"/>
+		<field name="METADATA_KEY_CAPTURE_FRAMERATE" since="23"/>
+		<field name="METADATA_KEY_CD_TRACK_NUMBER"/>
+		<field name="METADATA_KEY_COLOR_RANGE" since="30"/>
+		<field name="METADATA_KEY_COLOR_STANDARD" since="30"/>
+		<field name="METADATA_KEY_COLOR_TRANSFER" since="30"/>
+		<field name="METADATA_KEY_COMPILATION"/>
+		<field name="METADATA_KEY_COMPOSER"/>
+		<field name="METADATA_KEY_DATE"/>
+		<field name="METADATA_KEY_DISC_NUMBER"/>
+		<field name="METADATA_KEY_DURATION"/>
+		<field name="METADATA_KEY_EXIF_LENGTH" since="29"/>
+		<field name="METADATA_KEY_EXIF_OFFSET" since="29"/>
+		<field name="METADATA_KEY_GENRE"/>
+		<field name="METADATA_KEY_HAS_AUDIO" since="14"/>
+		<field name="METADATA_KEY_HAS_IMAGE" since="28"/>
+		<field name="METADATA_KEY_HAS_VIDEO" since="14"/>
+		<field name="METADATA_KEY_IMAGE_COUNT" since="28"/>
+		<field name="METADATA_KEY_IMAGE_HEIGHT" since="28"/>
+		<field name="METADATA_KEY_IMAGE_PRIMARY" since="28"/>
+		<field name="METADATA_KEY_IMAGE_ROTATION" since="28"/>
+		<field name="METADATA_KEY_IMAGE_WIDTH" since="28"/>
+		<field name="METADATA_KEY_LOCATION" since="15"/>
+		<field name="METADATA_KEY_MIMETYPE"/>
+		<field name="METADATA_KEY_NUM_TRACKS"/>
+		<field name="METADATA_KEY_SAMPLERATE" since="31"/>
+		<field name="METADATA_KEY_TITLE"/>
+		<field name="METADATA_KEY_VIDEO_FRAME_COUNT" since="28"/>
+		<field name="METADATA_KEY_VIDEO_HEIGHT" since="14"/>
+		<field name="METADATA_KEY_VIDEO_ROTATION" since="17"/>
+		<field name="METADATA_KEY_VIDEO_WIDTH" since="14"/>
+		<field name="METADATA_KEY_WRITER"/>
+		<field name="METADATA_KEY_XMP_LENGTH" since="31"/>
+		<field name="METADATA_KEY_XMP_OFFSET" since="31"/>
+		<field name="METADATA_KEY_YEAR"/>
+		<field name="OPTION_CLOSEST"/>
+		<field name="OPTION_CLOSEST_SYNC"/>
+		<field name="OPTION_NEXT_SYNC"/>
+		<field name="OPTION_PREVIOUS_SYNC"/>
+	</class>
+	<class name="android/media/MediaMetadataRetriever$BitmapParams" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getActualConfig()Landroid/graphics/Bitmap$Config;"/>
+		<method name="getPreferredConfig()Landroid/graphics/Bitmap$Config;"/>
+		<method name="setPreferredConfig(Landroid/graphics/Bitmap$Config;)V"/>
+	</class>
+	<class name="android/media/MediaMuxer" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;I)V" since="26"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="addTrack(Landroid/media/MediaFormat;)I"/>
+		<method name="release()V"/>
+		<method name="setLocation(FF)V" since="19"/>
+		<method name="setOrientationHint(I)V"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+		<method name="writeSampleData(ILjava/nio/ByteBuffer;Landroid/media/MediaCodec$BufferInfo;)V"/>
+	</class>
+	<class name="android/media/MediaMuxer$OutputFormat" since="18">
+		<extends name="java/lang/Object"/>
+		<field name="MUXER_OUTPUT_3GPP" since="26"/>
+		<field name="MUXER_OUTPUT_HEIF" since="28"/>
+		<field name="MUXER_OUTPUT_MPEG_4"/>
+		<field name="MUXER_OUTPUT_OGG" since="29"/>
+		<field name="MUXER_OUTPUT_WEBM" since="21"/>
+	</class>
+	<class name="android/media/MediaParser" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="advance(Landroid/media/MediaParser$SeekableInputReader;)Z"/>
+		<method name="create(Landroid/media/MediaParser$OutputConsumer;[Ljava/lang/String;)Landroid/media/MediaParser;"/>
+		<method name="createByName(Ljava/lang/String;Landroid/media/MediaParser$OutputConsumer;)Landroid/media/MediaParser;"/>
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31"/>
+		<method name="getParserName()Ljava/lang/String;"/>
+		<method name="getParserNames(Landroid/media/MediaFormat;)Ljava/util/List;"/>
+		<method name="release()V"/>
+		<method name="seek(Landroid/media/MediaParser$SeekPoint;)V"/>
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31"/>
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)Landroid/media/MediaParser;"/>
+		<method name="supportsParameter(Ljava/lang/String;)Z"/>
+		<field name="PARAMETER_ADTS_ENABLE_CBR_SEEKING"/>
+		<field name="PARAMETER_AMR_ENABLE_CBR_SEEKING"/>
+		<field name="PARAMETER_FLAC_DISABLE_ID3"/>
+		<field name="PARAMETER_MATROSKA_DISABLE_CUES_SEEKING"/>
+		<field name="PARAMETER_MP3_DISABLE_ID3"/>
+		<field name="PARAMETER_MP3_ENABLE_CBR_SEEKING"/>
+		<field name="PARAMETER_MP3_ENABLE_INDEX_SEEKING"/>
+		<field name="PARAMETER_MP4_IGNORE_EDIT_LISTS"/>
+		<field name="PARAMETER_MP4_IGNORE_TFDT_BOX"/>
+		<field name="PARAMETER_MP4_TREAT_VIDEO_FRAMES_AS_KEYFRAMES"/>
+		<field name="PARAMETER_TS_ALLOW_NON_IDR_AVC_KEYFRAMES"/>
+		<field name="PARAMETER_TS_DETECT_ACCESS_UNITS"/>
+		<field name="PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS"/>
+		<field name="PARAMETER_TS_IGNORE_AAC_STREAM"/>
+		<field name="PARAMETER_TS_IGNORE_AVC_STREAM"/>
+		<field name="PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM"/>
+		<field name="PARAMETER_TS_MODE"/>
+		<field name="PARSER_NAME_AC3"/>
+		<field name="PARSER_NAME_AC4"/>
+		<field name="PARSER_NAME_ADTS"/>
+		<field name="PARSER_NAME_AMR"/>
+		<field name="PARSER_NAME_FLAC"/>
+		<field name="PARSER_NAME_FLV"/>
+		<field name="PARSER_NAME_FMP4"/>
+		<field name="PARSER_NAME_MATROSKA"/>
+		<field name="PARSER_NAME_MP3"/>
+		<field name="PARSER_NAME_MP4"/>
+		<field name="PARSER_NAME_OGG"/>
+		<field name="PARSER_NAME_PS"/>
+		<field name="PARSER_NAME_TS"/>
+		<field name="PARSER_NAME_UNKNOWN"/>
+		<field name="PARSER_NAME_WAV"/>
+		<field name="SAMPLE_FLAG_DECODE_ONLY"/>
+		<field name="SAMPLE_FLAG_ENCRYPTED"/>
+		<field name="SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA"/>
+		<field name="SAMPLE_FLAG_KEY_FRAME"/>
+		<field name="SAMPLE_FLAG_LAST_SAMPLE"/>
+	</class>
+	<class name="android/media/MediaParser$InputReader" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getLength()J"/>
+		<method name="getPosition()J"/>
+		<method name="read([BII)I"/>
+	</class>
+	<class name="android/media/MediaParser$OutputConsumer" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onSampleCompleted(IJIIILandroid/media/MediaCodec$CryptoInfo;)V"/>
+		<method name="onSampleDataFound(ILandroid/media/MediaParser$InputReader;)V"/>
+		<method name="onSeekMapFound(Landroid/media/MediaParser$SeekMap;)V"/>
+		<method name="onTrackCountFound(I)V"/>
+		<method name="onTrackDataFound(ILandroid/media/MediaParser$TrackData;)V"/>
+	</class>
+	<class name="android/media/MediaParser$ParsingException" since="30">
+		<extends name="java/io/IOException"/>
+	</class>
+	<class name="android/media/MediaParser$SeekMap" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getDurationMicros()J"/>
+		<method name="getSeekPoints(J)Landroid/util/Pair;"/>
+		<method name="isSeekable()Z"/>
+		<field name="UNKNOWN_DURATION"/>
+	</class>
+	<class name="android/media/MediaParser$SeekPoint" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="START"/>
+		<field name="position"/>
+		<field name="timeMicros"/>
+	</class>
+	<class name="android/media/MediaParser$SeekableInputReader" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/MediaParser$InputReader"/>
+		<method name="seekToPosition(J)V"/>
+	</class>
+	<class name="android/media/MediaParser$TrackData" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="drmInitData"/>
+		<field name="mediaFormat"/>
+	</class>
+	<class name="android/media/MediaParser$UnrecognizedInputFormatException" since="30">
+		<extends name="java/io/IOException"/>
+	</class>
+	<class name="android/media/MediaPlayer" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/AudioRouting" since="28"/>
+		<implements name="android/media/VolumeAutomation" since="26"/>
+		<method name="&lt;init>()V"/>
+		<method name="addTimedTextSource(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;)V" since="16"/>
+		<method name="addTimedTextSource(Ljava/io/FileDescriptor;JJLjava/lang/String;)V" since="16"/>
+		<method name="addTimedTextSource(Ljava/io/FileDescriptor;Ljava/lang/String;)V" since="16"/>
+		<method name="addTimedTextSource(Ljava/lang/String;Ljava/lang/String;)V" since="16"/>
+		<method name="attachAuxEffect(I)V" since="9"/>
+		<method name="clearOnMediaTimeDiscontinuityListener()V" since="28"/>
+		<method name="clearOnSubtitleDataListener()V" since="28"/>
+		<method name="create(Landroid/content/Context;I)Landroid/media/MediaPlayer;"/>
+		<method name="create(Landroid/content/Context;ILandroid/media/AudioAttributes;I)Landroid/media/MediaPlayer;" since="21"/>
+		<method name="create(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/MediaPlayer;"/>
+		<method name="create(Landroid/content/Context;Landroid/net/Uri;Landroid/view/SurfaceHolder;)Landroid/media/MediaPlayer;"/>
+		<method name="create(Landroid/content/Context;Landroid/net/Uri;Landroid/view/SurfaceHolder;Landroid/media/AudioAttributes;I)Landroid/media/MediaPlayer;" since="21"/>
+		<method name="deselectTrack(I)V" since="16"/>
+		<method name="getAudioSessionId()I" since="9"/>
+		<method name="getCurrentPosition()I"/>
+		<method name="getDrmInfo()Landroid/media/MediaPlayer$DrmInfo;" since="26"/>
+		<method name="getDrmPropertyString(Ljava/lang/String;)Ljava/lang/String;" since="26"/>
+		<method name="getDuration()I"/>
+		<method name="getKeyRequest([B[BLjava/lang/String;ILjava/util/Map;)Landroid/media/MediaDrm$KeyRequest;" since="26"/>
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
+		<method name="getPlaybackParams()Landroid/media/PlaybackParams;" since="23"/>
+		<method name="getSelectedTrack(I)I" since="21"/>
+		<method name="getSyncParams()Landroid/media/SyncParams;" since="23"/>
+		<method name="getTimestamp()Landroid/media/MediaTimestamp;" since="23"/>
+		<method name="getTrackInfo()[Landroid/media/MediaPlayer$TrackInfo;" since="16"/>
+		<method name="getVideoHeight()I"/>
+		<method name="getVideoWidth()I"/>
+		<method name="isLooping()Z" since="3"/>
+		<method name="isPlaying()Z"/>
+		<method name="pause()V"/>
+		<method name="prepare()V"/>
+		<method name="prepareAsync()V"/>
+		<method name="prepareDrm(Ljava/util/UUID;)V" since="26"/>
+		<method name="provideKeyResponse([B[B)[B" since="26"/>
+		<method name="release()V"/>
+		<method name="releaseDrm()V" since="26"/>
+		<method name="reset()V"/>
+		<method name="restoreKeys([B)V" since="26"/>
+		<method name="seekTo(I)V"/>
+		<method name="seekTo(JI)V" since="26"/>
+		<method name="selectTrack(I)V" since="16"/>
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="21"/>
+		<method name="setAudioSessionId(I)V" since="9"/>
+		<method name="setAudioStreamType(I)V" deprecated="26"/>
+		<method name="setAuxEffectSendLevel(F)V" since="9"/>
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;)V"/>
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;)V" since="14"/>
+		<method name="setDataSource(Landroid/content/Context;Landroid/net/Uri;Ljava/util/Map;Ljava/util/List;)V" since="26"/>
+		<method name="setDataSource(Landroid/content/res/AssetFileDescriptor;)V" since="24"/>
+		<method name="setDataSource(Landroid/media/MediaDataSource;)V" since="23"/>
+		<method name="setDataSource(Ljava/io/FileDescriptor;)V"/>
+		<method name="setDataSource(Ljava/io/FileDescriptor;JJ)V"/>
+		<method name="setDataSource(Ljava/lang/String;)V"/>
+		<method name="setDisplay(Landroid/view/SurfaceHolder;)V"/>
+		<method name="setDrmPropertyString(Ljava/lang/String;Ljava/lang/String;)V" since="26"/>
+		<method name="setLooping(Z)V"/>
+		<method name="setNextMediaPlayer(Landroid/media/MediaPlayer;)V" since="16"/>
+		<method name="setOnBufferingUpdateListener(Landroid/media/MediaPlayer$OnBufferingUpdateListener;)V"/>
+		<method name="setOnCompletionListener(Landroid/media/MediaPlayer$OnCompletionListener;)V"/>
+		<method name="setOnDrmConfigHelper(Landroid/media/MediaPlayer$OnDrmConfigHelper;)V" since="26"/>
+		<method name="setOnDrmInfoListener(Landroid/media/MediaPlayer$OnDrmInfoListener;)V" since="26"/>
+		<method name="setOnDrmInfoListener(Landroid/media/MediaPlayer$OnDrmInfoListener;Landroid/os/Handler;)V" since="26"/>
+		<method name="setOnDrmPreparedListener(Landroid/media/MediaPlayer$OnDrmPreparedListener;)V" since="26"/>
+		<method name="setOnDrmPreparedListener(Landroid/media/MediaPlayer$OnDrmPreparedListener;Landroid/os/Handler;)V" since="26"/>
+		<method name="setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V"/>
+		<method name="setOnInfoListener(Landroid/media/MediaPlayer$OnInfoListener;)V" since="3"/>
+		<method name="setOnMediaTimeDiscontinuityListener(Landroid/media/MediaPlayer$OnMediaTimeDiscontinuityListener;)V" since="28"/>
+		<method name="setOnMediaTimeDiscontinuityListener(Landroid/media/MediaPlayer$OnMediaTimeDiscontinuityListener;Landroid/os/Handler;)V" since="28"/>
+		<method name="setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V"/>
+		<method name="setOnSeekCompleteListener(Landroid/media/MediaPlayer$OnSeekCompleteListener;)V"/>
+		<method name="setOnSubtitleDataListener(Landroid/media/MediaPlayer$OnSubtitleDataListener;)V" since="28"/>
+		<method name="setOnSubtitleDataListener(Landroid/media/MediaPlayer$OnSubtitleDataListener;Landroid/os/Handler;)V" since="28"/>
+		<method name="setOnTimedMetaDataAvailableListener(Landroid/media/MediaPlayer$OnTimedMetaDataAvailableListener;)V" since="23"/>
+		<method name="setOnTimedTextListener(Landroid/media/MediaPlayer$OnTimedTextListener;)V" since="16"/>
+		<method name="setOnVideoSizeChangedListener(Landroid/media/MediaPlayer$OnVideoSizeChangedListener;)V" since="3"/>
+		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
+		<method name="setScreenOnWhilePlaying(Z)V"/>
+		<method name="setSurface(Landroid/view/Surface;)V" since="14"/>
+		<method name="setSyncParams(Landroid/media/SyncParams;)V" since="23"/>
+		<method name="setVideoScalingMode(I)V" since="16"/>
+		<method name="setVolume(FF)V"/>
+		<method name="setWakeMode(Landroid/content/Context;I)V"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+		<field name="MEDIA_ERROR_IO" since="17"/>
+		<field name="MEDIA_ERROR_MALFORMED" since="17"/>
+		<field name="MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK" since="3"/>
+		<field name="MEDIA_ERROR_SERVER_DIED"/>
+		<field name="MEDIA_ERROR_TIMED_OUT" since="17"/>
+		<field name="MEDIA_ERROR_UNKNOWN"/>
+		<field name="MEDIA_ERROR_UNSUPPORTED" since="17"/>
+		<field name="MEDIA_INFO_AUDIO_NOT_PLAYING" since="26"/>
+		<field name="MEDIA_INFO_BAD_INTERLEAVING" since="3"/>
+		<field name="MEDIA_INFO_BUFFERING_END" since="9"/>
+		<field name="MEDIA_INFO_BUFFERING_START" since="9"/>
+		<field name="MEDIA_INFO_METADATA_UPDATE" since="5"/>
+		<field name="MEDIA_INFO_NOT_SEEKABLE" since="3"/>
+		<field name="MEDIA_INFO_STARTED_AS_NEXT" since="28"/>
+		<field name="MEDIA_INFO_SUBTITLE_TIMED_OUT" since="19"/>
+		<field name="MEDIA_INFO_UNKNOWN" since="3"/>
+		<field name="MEDIA_INFO_UNSUPPORTED_SUBTITLE" since="19"/>
+		<field name="MEDIA_INFO_VIDEO_NOT_PLAYING" since="26"/>
+		<field name="MEDIA_INFO_VIDEO_RENDERING_START" since="17"/>
+		<field name="MEDIA_INFO_VIDEO_TRACK_LAGGING" since="3"/>
+		<field name="MEDIA_MIMETYPE_TEXT_SUBRIP" since="16" deprecated="28"/>
+		<field name="PREPARE_DRM_STATUS_PREPARATION_ERROR" since="26"/>
+		<field name="PREPARE_DRM_STATUS_PROVISIONING_NETWORK_ERROR" since="26"/>
+		<field name="PREPARE_DRM_STATUS_PROVISIONING_SERVER_ERROR" since="26"/>
+		<field name="PREPARE_DRM_STATUS_SUCCESS" since="26"/>
+		<field name="SEEK_CLOSEST" since="26"/>
+		<field name="SEEK_CLOSEST_SYNC" since="26"/>
+		<field name="SEEK_NEXT_SYNC" since="26"/>
+		<field name="SEEK_PREVIOUS_SYNC" since="26"/>
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT" since="16"/>
+		<field name="VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING" since="16"/>
+	</class>
+	<class name="android/media/MediaPlayer$DrmInfo" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getPssh()Ljava/util/Map;"/>
+		<method name="getSupportedSchemes()[Ljava/util/UUID;"/>
+	</class>
+	<class name="android/media/MediaPlayer$MetricsConstants" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="CODEC_AUDIO"/>
+		<field name="CODEC_VIDEO"/>
+		<field name="DURATION"/>
+		<field name="ERRORS"/>
+		<field name="ERROR_CODE"/>
+		<field name="FRAMES"/>
+		<field name="FRAMES_DROPPED"/>
+		<field name="HEIGHT"/>
+		<field name="MIME_TYPE_AUDIO"/>
+		<field name="MIME_TYPE_VIDEO"/>
+		<field name="PLAYING"/>
+		<field name="WIDTH"/>
+	</class>
+	<class name="android/media/MediaPlayer$NoDrmSchemeException" since="26">
+		<extends name="android/media/MediaDrmException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnBufferingUpdateListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onBufferingUpdate(Landroid/media/MediaPlayer;I)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnCompletionListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onCompletion(Landroid/media/MediaPlayer;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnDrmConfigHelper" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="onDrmConfig(Landroid/media/MediaPlayer;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnDrmInfoListener" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="onDrmInfo(Landroid/media/MediaPlayer;Landroid/media/MediaPlayer$DrmInfo;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnDrmPreparedListener" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="onDrmPrepared(Landroid/media/MediaPlayer;I)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnErrorListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onError(Landroid/media/MediaPlayer;II)Z"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnInfoListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onInfo(Landroid/media/MediaPlayer;II)Z"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnMediaTimeDiscontinuityListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onMediaTimeDiscontinuity(Landroid/media/MediaPlayer;Landroid/media/MediaTimestamp;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnPreparedListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onPrepared(Landroid/media/MediaPlayer;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnSeekCompleteListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onSeekComplete(Landroid/media/MediaPlayer;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnSubtitleDataListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onSubtitleData(Landroid/media/MediaPlayer;Landroid/media/SubtitleData;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnTimedMetaDataAvailableListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onTimedMetaDataAvailable(Landroid/media/MediaPlayer;Landroid/media/TimedMetaData;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnTimedTextListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onTimedText(Landroid/media/MediaPlayer;Landroid/media/TimedText;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$OnVideoSizeChangedListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onVideoSizeChanged(Landroid/media/MediaPlayer;II)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$ProvisioningNetworkErrorException" since="26">
+		<extends name="android/media/MediaDrmException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$ProvisioningServerErrorException" since="26">
+		<extends name="android/media/MediaDrmException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/MediaPlayer$TrackInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFormat()Landroid/media/MediaFormat;" since="19"/>
+		<method name="getLanguage()Ljava/lang/String;"/>
+		<method name="getTrackType()I"/>
+		<field name="MEDIA_TRACK_TYPE_AUDIO"/>
+		<field name="MEDIA_TRACK_TYPE_METADATA" since="23"/>
+		<field name="MEDIA_TRACK_TYPE_SUBTITLE" since="21"/>
+		<field name="MEDIA_TRACK_TYPE_TIMEDTEXT"/>
+		<field name="MEDIA_TRACK_TYPE_UNKNOWN"/>
+		<field name="MEDIA_TRACK_TYPE_VIDEO"/>
+	</class>
+	<class name="android/media/MediaRecorder" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/AudioRecordingMonitor" since="29"/>
+		<implements name="android/media/AudioRouting" since="28"/>
+		<implements name="android/media/MicrophoneDirection" since="29"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" since="31"/>
+		<method name="getActiveMicrophones()Ljava/util/List;" since="28"/>
+		<method name="getAudioSourceMax()I" since="4"/>
+		<method name="getLogSessionId()Landroid/media/metrics/LogSessionId;" since="31"/>
+		<method name="getMaxAmplitude()I"/>
+		<method name="getMetrics()Landroid/os/PersistableBundle;" since="26"/>
+		<method name="getSurface()Landroid/view/Surface;" since="21"/>
+		<method name="isPrivacySensitive()Z" since="30"/>
+		<method name="pause()V" since="24"/>
+		<method name="prepare()V"/>
+		<method name="release()V"/>
+		<method name="reset()V"/>
+		<method name="resume()V" since="24"/>
+		<method name="setAudioChannels(I)V" since="8"/>
+		<method name="setAudioEncoder(I)V"/>
+		<method name="setAudioEncodingBitRate(I)V" since="8"/>
+		<method name="setAudioProfile(Landroid/media/EncoderProfiles$AudioProfile;)V" since="31"/>
+		<method name="setAudioSamplingRate(I)V" since="8"/>
+		<method name="setAudioSource(I)V"/>
+		<method name="setAuxiliaryOutputFile(Ljava/io/FileDescriptor;)V" since="11" deprecated="15" removed="16"/>
+		<method name="setAuxiliaryOutputFile(Ljava/lang/String;)V" since="11" deprecated="15" removed="16"/>
+		<method name="setCamera(Landroid/hardware/Camera;)V" since="3" deprecated="21"/>
+		<method name="setCaptureRate(D)V" since="11"/>
+		<method name="setInputSurface(Landroid/view/Surface;)V" since="23"/>
+		<method name="setLocation(FF)V" since="14"/>
+		<method name="setLogSessionId(Landroid/media/metrics/LogSessionId;)V" since="31"/>
+		<method name="setMaxDuration(I)V" since="3"/>
+		<method name="setMaxFileSize(J)V" since="3"/>
+		<method name="setNextOutputFile(Ljava/io/File;)V" since="26"/>
+		<method name="setNextOutputFile(Ljava/io/FileDescriptor;)V" since="26"/>
+		<method name="setOnErrorListener(Landroid/media/MediaRecorder$OnErrorListener;)V" since="3"/>
+		<method name="setOnInfoListener(Landroid/media/MediaRecorder$OnInfoListener;)V" since="3"/>
+		<method name="setOrientationHint(I)V" since="9"/>
+		<method name="setOutputFile(Ljava/io/File;)V" since="26"/>
+		<method name="setOutputFile(Ljava/io/FileDescriptor;)V" since="3"/>
+		<method name="setOutputFile(Ljava/lang/String;)V"/>
+		<method name="setOutputFormat(I)V"/>
+		<method name="setPreviewDisplay(Landroid/view/Surface;)V"/>
+		<method name="setPrivacySensitive(Z)V" since="30"/>
+		<method name="setProfile(Landroid/media/CamcorderProfile;)V" since="8"/>
+		<method name="setVideoEncoder(I)V" since="3"/>
+		<method name="setVideoEncodingBitRate(I)V" since="8"/>
+		<method name="setVideoEncodingProfileLevel(II)V" since="26"/>
+		<method name="setVideoFrameRate(I)V" since="3"/>
+		<method name="setVideoProfile(Landroid/media/EncoderProfiles$VideoProfile;)V" since="31"/>
+		<method name="setVideoSize(II)V" since="3"/>
+		<method name="setVideoSource(I)V" since="3"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+		<field name="MEDIA_ERROR_SERVER_DIED" since="17"/>
+		<field name="MEDIA_RECORDER_ERROR_UNKNOWN" since="3"/>
+		<field name="MEDIA_RECORDER_INFO_MAX_DURATION_REACHED" since="3"/>
+		<field name="MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING" since="26"/>
+		<field name="MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED" since="3"/>
+		<field name="MEDIA_RECORDER_INFO_NEXT_OUTPUT_FILE_STARTED" since="26"/>
+		<field name="MEDIA_RECORDER_INFO_UNKNOWN" since="3"/>
+	</class>
+	<class name="android/media/MediaRecorder$AudioEncoder" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="AAC" since="10"/>
+		<field name="AAC_ELD" since="16"/>
+		<field name="AMR_NB"/>
+		<field name="AMR_WB" since="10"/>
+		<field name="DEFAULT"/>
+		<field name="HE_AAC" since="16"/>
+		<field name="OPUS" since="29"/>
+		<field name="VORBIS" since="21"/>
+	</class>
+	<class name="android/media/MediaRecorder$AudioSource" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="CAMCORDER" since="7"/>
+		<field name="DEFAULT"/>
+		<field name="MIC"/>
+		<field name="REMOTE_SUBMIX" since="19"/>
+		<field name="UNPROCESSED" since="24"/>
+		<field name="VOICE_CALL" since="4"/>
+		<field name="VOICE_COMMUNICATION" since="11"/>
+		<field name="VOICE_DOWNLINK" since="4"/>
+		<field name="VOICE_PERFORMANCE" since="29"/>
+		<field name="VOICE_RECOGNITION" since="7"/>
+		<field name="VOICE_UPLINK" since="4"/>
+	</class>
+	<class name="android/media/MediaRecorder$MetricsConstants" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="AUDIO_BITRATE"/>
+		<field name="AUDIO_CHANNELS"/>
+		<field name="AUDIO_SAMPLERATE"/>
+		<field name="AUDIO_TIMESCALE"/>
+		<field name="CAPTURE_FPS"/>
+		<field name="CAPTURE_FPS_ENABLE"/>
+		<field name="FRAMERATE"/>
+		<field name="HEIGHT"/>
+		<field name="MOVIE_TIMESCALE"/>
+		<field name="ROTATION"/>
+		<field name="VIDEO_BITRATE"/>
+		<field name="VIDEO_IFRAME_INTERVAL"/>
+		<field name="VIDEO_LEVEL"/>
+		<field name="VIDEO_PROFILE"/>
+		<field name="VIDEO_TIMESCALE"/>
+		<field name="WIDTH"/>
+	</class>
+	<class name="android/media/MediaRecorder$OnErrorListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onError(Landroid/media/MediaRecorder;II)V"/>
+	</class>
+	<class name="android/media/MediaRecorder$OnInfoListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onInfo(Landroid/media/MediaRecorder;II)V"/>
+	</class>
+	<class name="android/media/MediaRecorder$OutputFormat" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="AAC_ADTS" since="16"/>
+		<field name="AMR_NB" since="10"/>
+		<field name="AMR_WB" since="10"/>
+		<field name="DEFAULT"/>
+		<field name="MPEG_2_TS" since="26"/>
+		<field name="MPEG_4"/>
+		<field name="OGG" since="29"/>
+		<field name="RAW_AMR" since="3" deprecated="16"/>
+		<field name="THREE_GPP"/>
+		<field name="WEBM" since="21"/>
+	</class>
+	<class name="android/media/MediaRecorder$VideoEncoder" since="3">
+		<extends name="java/lang/Object"/>
+		<field name="DEFAULT"/>
+		<field name="H263"/>
+		<field name="H264"/>
+		<field name="HEVC" since="24"/>
+		<field name="MPEG_4_SP"/>
+		<field name="VP8" since="21"/>
+	</class>
+	<class name="android/media/MediaRecorder$VideoSource" since="3">
+		<extends name="java/lang/Object"/>
+		<field name="CAMERA"/>
+		<field name="DEFAULT"/>
+		<field name="SURFACE" since="21"/>
+	</class>
+	<class name="android/media/MediaRoute2Info" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getClientPackageName()Ljava/lang/String;"/>
+		<method name="getConnectionState()I"/>
+		<method name="getDescription()Ljava/lang/CharSequence;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getFeatures()Ljava/util/List;"/>
+		<method name="getIconUri()Landroid/net/Uri;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="getVolume()I"/>
+		<method name="getVolumeHandling()I"/>
+		<method name="getVolumeMax()I"/>
+		<method name="isSystemRoute()Z"/>
+		<field name="CONNECTION_STATE_CONNECTED"/>
+		<field name="CONNECTION_STATE_CONNECTING"/>
+		<field name="CONNECTION_STATE_DISCONNECTED"/>
+		<field name="CREATOR"/>
+		<field name="FEATURE_LIVE_AUDIO"/>
+		<field name="FEATURE_LIVE_VIDEO"/>
+		<field name="FEATURE_REMOTE_AUDIO_PLAYBACK"/>
+		<field name="FEATURE_REMOTE_PLAYBACK"/>
+		<field name="FEATURE_REMOTE_VIDEO_PLAYBACK"/>
+		<field name="PLAYBACK_VOLUME_FIXED"/>
+		<field name="PLAYBACK_VOLUME_VARIABLE"/>
+	</class>
+	<class name="android/media/MediaRoute2Info$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/media/MediaRoute2Info;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;)V"/>
+		<method name="addFeature(Ljava/lang/String;)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="addFeatures(Ljava/util/Collection;)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="build()Landroid/media/MediaRoute2Info;"/>
+		<method name="clearFeatures()Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setClientPackageName(Ljava/lang/String;)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setConnectionState(I)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setIconUri(Landroid/net/Uri;)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setVolume(I)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setVolumeHandling(I)Landroid/media/MediaRoute2Info$Builder;"/>
+		<method name="setVolumeMax(I)Landroid/media/MediaRoute2Info$Builder;"/>
+	</class>
+	<class name="android/media/MediaRoute2ProviderService" since="30">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAllSessionInfo()Ljava/util/List;"/>
+		<method name="getSessionInfo(Ljava/lang/String;)Landroid/media/RoutingSessionInfo;"/>
+		<method name="notifyRequestFailed(JI)V"/>
+		<method name="notifyRoutes(Ljava/util/Collection;)V"/>
+		<method name="notifySessionCreated(JLandroid/media/RoutingSessionInfo;)V"/>
+		<method name="notifySessionReleased(Ljava/lang/String;)V"/>
+		<method name="notifySessionUpdated(Landroid/media/RoutingSessionInfo;)V"/>
+		<method name="onCreateSession(JLjava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="onDeselectRoute(JLjava/lang/String;Ljava/lang/String;)V"/>
+		<method name="onDiscoveryPreferenceChanged(Landroid/media/RouteDiscoveryPreference;)V"/>
+		<method name="onReleaseSession(JLjava/lang/String;)V"/>
+		<method name="onSelectRoute(JLjava/lang/String;Ljava/lang/String;)V"/>
+		<method name="onSetRouteVolume(JLjava/lang/String;I)V"/>
+		<method name="onSetSessionVolume(JLjava/lang/String;I)V"/>
+		<method name="onTransferToRoute(JLjava/lang/String;Ljava/lang/String;)V"/>
+		<field name="REASON_INVALID_COMMAND"/>
+		<field name="REASON_NETWORK_ERROR"/>
+		<field name="REASON_REJECTED"/>
+		<field name="REASON_ROUTE_NOT_AVAILABLE"/>
+		<field name="REASON_UNKNOWN_ERROR"/>
+		<field name="REQUEST_ID_NONE"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/media/MediaRouter" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="addCallback(ILandroid/media/MediaRouter$Callback;)V"/>
+		<method name="addCallback(ILandroid/media/MediaRouter$Callback;I)V" since="18"/>
+		<method name="addUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V"/>
+		<method name="clearUserRoutes()V"/>
+		<method name="createRouteCategory(IZ)Landroid/media/MediaRouter$RouteCategory;"/>
+		<method name="createRouteCategory(Ljava/lang/CharSequence;Z)Landroid/media/MediaRouter$RouteCategory;"/>
+		<method name="createUserRoute(Landroid/media/MediaRouter$RouteCategory;)Landroid/media/MediaRouter$UserRouteInfo;"/>
+		<method name="getCategoryAt(I)Landroid/media/MediaRouter$RouteCategory;"/>
+		<method name="getCategoryCount()I"/>
+		<method name="getDefaultRoute()Landroid/media/MediaRouter$RouteInfo;" since="18"/>
+		<method name="getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;"/>
+		<method name="getRouteCount()I"/>
+		<method name="getSelectedRoute(I)Landroid/media/MediaRouter$RouteInfo;"/>
+		<method name="removeCallback(Landroid/media/MediaRouter$Callback;)V"/>
+		<method name="removeUserRoute(Landroid/media/MediaRouter$UserRouteInfo;)V"/>
+		<method name="selectRoute(ILandroid/media/MediaRouter$RouteInfo;)V"/>
+		<field name="CALLBACK_FLAG_PERFORM_ACTIVE_SCAN" since="18"/>
+		<field name="CALLBACK_FLAG_UNFILTERED_EVENTS" since="18"/>
+		<field name="ROUTE_TYPE_LIVE_AUDIO"/>
+		<field name="ROUTE_TYPE_LIVE_VIDEO" since="17"/>
+		<field name="ROUTE_TYPE_USER"/>
+	</class>
+	<class name="android/media/MediaRouter$Callback" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onRouteAdded(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
+		<method name="onRouteChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
+		<method name="onRouteGrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;I)V"/>
+		<method name="onRoutePresentationDisplayChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V" since="17"/>
+		<method name="onRouteRemoved(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
+		<method name="onRouteSelected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V"/>
+		<method name="onRouteUngrouped(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;Landroid/media/MediaRouter$RouteGroup;)V"/>
+		<method name="onRouteUnselected(Landroid/media/MediaRouter;ILandroid/media/MediaRouter$RouteInfo;)V"/>
+		<method name="onRouteVolumeChanged(Landroid/media/MediaRouter;Landroid/media/MediaRouter$RouteInfo;)V"/>
+	</class>
+	<class name="android/media/MediaRouter$RouteCategory" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="getName(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
+		<method name="getRoutes(Ljava/util/List;)Ljava/util/List;"/>
+		<method name="getSupportedTypes()I"/>
+		<method name="isGroupable()Z"/>
+	</class>
+	<class name="android/media/MediaRouter$RouteGroup" since="16">
+		<extends name="android/media/MediaRouter$RouteInfo"/>
+		<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;)V"/>
+		<method name="addRoute(Landroid/media/MediaRouter$RouteInfo;I)V"/>
+		<method name="getRouteAt(I)Landroid/media/MediaRouter$RouteInfo;"/>
+		<method name="getRouteCount()I"/>
+		<method name="removeRoute(I)V"/>
+		<method name="removeRoute(Landroid/media/MediaRouter$RouteInfo;)V"/>
+		<method name="setIconDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setIconResource(I)V"/>
+	</class>
+	<class name="android/media/MediaRouter$RouteInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="getCategory()Landroid/media/MediaRouter$RouteCategory;"/>
+		<method name="getDescription()Ljava/lang/CharSequence;" since="18"/>
+		<method name="getDeviceType()I" since="24"/>
+		<method name="getGroup()Landroid/media/MediaRouter$RouteGroup;"/>
+		<method name="getIconDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="getName(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
+		<method name="getPlaybackStream()I"/>
+		<method name="getPlaybackType()I"/>
+		<method name="getPresentationDisplay()Landroid/view/Display;" since="17"/>
+		<method name="getStatus()Ljava/lang/CharSequence;"/>
+		<method name="getSupportedTypes()I"/>
+		<method name="getTag()Ljava/lang/Object;"/>
+		<method name="getVolume()I"/>
+		<method name="getVolumeHandling()I"/>
+		<method name="getVolumeMax()I"/>
+		<method name="isConnecting()Z" since="18"/>
+		<method name="isEnabled()Z" since="17"/>
+		<method name="requestSetVolume(I)V"/>
+		<method name="requestUpdateVolume(I)V"/>
+		<method name="setTag(Ljava/lang/Object;)V"/>
+		<field name="DEVICE_TYPE_BLUETOOTH" since="24"/>
+		<field name="DEVICE_TYPE_SPEAKER" since="24"/>
+		<field name="DEVICE_TYPE_TV" since="24"/>
+		<field name="DEVICE_TYPE_UNKNOWN" since="24"/>
+		<field name="PLAYBACK_TYPE_LOCAL"/>
+		<field name="PLAYBACK_TYPE_REMOTE"/>
+		<field name="PLAYBACK_VOLUME_FIXED"/>
+		<field name="PLAYBACK_VOLUME_VARIABLE"/>
+	</class>
+	<class name="android/media/MediaRouter$SimpleCallback" since="16">
+		<extends name="android/media/MediaRouter$Callback"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/media/MediaRouter$UserRouteInfo" since="16">
+		<extends name="android/media/MediaRouter$RouteInfo"/>
+		<method name="getRemoteControlClient()Landroid/media/RemoteControlClient;"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)V" since="18"/>
+		<method name="setIconDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setIconResource(I)V"/>
+		<method name="setName(I)V"/>
+		<method name="setName(Ljava/lang/CharSequence;)V"/>
+		<method name="setPlaybackStream(I)V"/>
+		<method name="setPlaybackType(I)V"/>
+		<method name="setRemoteControlClient(Landroid/media/RemoteControlClient;)V"/>
+		<method name="setStatus(Ljava/lang/CharSequence;)V"/>
+		<method name="setVolume(I)V"/>
+		<method name="setVolumeCallback(Landroid/media/MediaRouter$VolumeCallback;)V"/>
+		<method name="setVolumeHandling(I)V"/>
+		<method name="setVolumeMax(I)V"/>
+	</class>
+	<class name="android/media/MediaRouter$VolumeCallback" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onVolumeSetRequest(Landroid/media/MediaRouter$RouteInfo;I)V"/>
+		<method name="onVolumeUpdateRequest(Landroid/media/MediaRouter$RouteInfo;I)V"/>
+	</class>
+	<class name="android/media/MediaRouter2" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getController(Ljava/lang/String;)Landroid/media/MediaRouter2$RoutingController;" since="31"/>
+		<method name="getControllers()Ljava/util/List;"/>
+		<method name="getInstance(Landroid/content/Context;)Landroid/media/MediaRouter2;"/>
+		<method name="getRoutes()Ljava/util/List;"/>
+		<method name="getSystemController()Landroid/media/MediaRouter2$RoutingController;"/>
+		<method name="registerControllerCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaRouter2$ControllerCallback;)V"/>
+		<method name="registerRouteCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaRouter2$RouteCallback;Landroid/media/RouteDiscoveryPreference;)V"/>
+		<method name="registerTransferCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaRouter2$TransferCallback;)V"/>
+		<method name="setOnGetControllerHintsListener(Landroid/media/MediaRouter2$OnGetControllerHintsListener;)V"/>
+		<method name="stop()V"/>
+		<method name="transferTo(Landroid/media/MediaRoute2Info;)V"/>
+		<method name="unregisterControllerCallback(Landroid/media/MediaRouter2$ControllerCallback;)V"/>
+		<method name="unregisterRouteCallback(Landroid/media/MediaRouter2$RouteCallback;)V"/>
+		<method name="unregisterTransferCallback(Landroid/media/MediaRouter2$TransferCallback;)V"/>
+	</class>
+	<class name="android/media/MediaRouter2$ControllerCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onControllerUpdated(Landroid/media/MediaRouter2$RoutingController;)V"/>
+	</class>
+	<class name="android/media/MediaRouter2$OnGetControllerHintsListener" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onGetControllerHints(Landroid/media/MediaRoute2Info;)Landroid/os/Bundle;"/>
+	</class>
+	<class name="android/media/MediaRouter2$RouteCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onRoutesAdded(Ljava/util/List;)V"/>
+		<method name="onRoutesChanged(Ljava/util/List;)V"/>
+		<method name="onRoutesRemoved(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/media/MediaRouter2$RoutingController" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="deselectRoute(Landroid/media/MediaRoute2Info;)V"/>
+		<method name="getControlHints()Landroid/os/Bundle;"/>
+		<method name="getDeselectableRoutes()Ljava/util/List;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getSelectableRoutes()Ljava/util/List;"/>
+		<method name="getSelectedRoutes()Ljava/util/List;"/>
+		<method name="getVolume()I"/>
+		<method name="getVolumeHandling()I"/>
+		<method name="getVolumeMax()I"/>
+		<method name="isReleased()Z"/>
+		<method name="release()V"/>
+		<method name="selectRoute(Landroid/media/MediaRoute2Info;)V"/>
+		<method name="setVolume(I)V"/>
+	</class>
+	<class name="android/media/MediaRouter2$TransferCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onStop(Landroid/media/MediaRouter2$RoutingController;)V"/>
+		<method name="onTransfer(Landroid/media/MediaRouter2$RoutingController;Landroid/media/MediaRouter2$RoutingController;)V"/>
+		<method name="onTransferFailure(Landroid/media/MediaRoute2Info;)V"/>
+	</class>
+	<class name="android/media/MediaScannerConnection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/ServiceConnection"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/media/MediaScannerConnection$MediaScannerConnectionClient;)V"/>
+		<method name="connect()V"/>
+		<method name="disconnect()V"/>
+		<method name="isConnected()Z"/>
+		<method name="scanFile(Landroid/content/Context;[Ljava/lang/String;[Ljava/lang/String;Landroid/media/MediaScannerConnection$OnScanCompletedListener;)V" since="8"/>
+		<method name="scanFile(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/MediaScannerConnection$MediaScannerConnectionClient" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/MediaScannerConnection$OnScanCompletedListener" since="8"/>
+		<method name="onMediaScannerConnected()V"/>
+		<method name="onScanCompleted(Ljava/lang/String;Landroid/net/Uri;)V" removed="30"/>
+	</class>
+	<class name="android/media/MediaScannerConnection$OnScanCompletedListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="onScanCompleted(Ljava/lang/String;Landroid/net/Uri;)V"/>
+	</class>
+	<class name="android/media/MediaSession2" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="broadcastSessionCommand(Landroid/media/Session2Command;Landroid/os/Bundle;)V"/>
+		<method name="cancelSessionCommand(Landroid/media/MediaSession2$ControllerInfo;Ljava/lang/Object;)V"/>
+		<method name="getConnectedControllers()Ljava/util/List;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getToken()Landroid/media/Session2Token;"/>
+		<method name="isPlaybackActive()Z"/>
+		<method name="sendSessionCommand(Landroid/media/MediaSession2$ControllerInfo;Landroid/media/Session2Command;Landroid/os/Bundle;)Ljava/lang/Object;"/>
+		<method name="setPlaybackActive(Z)V"/>
+	</class>
+	<class name="android/media/MediaSession2$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="build()Landroid/media/MediaSession2;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/MediaSession2$Builder;"/>
+		<method name="setId(Ljava/lang/String;)Landroid/media/MediaSession2$Builder;"/>
+		<method name="setSessionActivity(Landroid/app/PendingIntent;)Landroid/media/MediaSession2$Builder;"/>
+		<method name="setSessionCallback(Ljava/util/concurrent/Executor;Landroid/media/MediaSession2$SessionCallback;)Landroid/media/MediaSession2$Builder;"/>
+	</class>
+	<class name="android/media/MediaSession2$ControllerInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getConnectionHints()Landroid/os/Bundle;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getRemoteUserInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;"/>
+		<method name="getUid()I"/>
+	</class>
+	<class name="android/media/MediaSession2$SessionCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCommandResult(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;Ljava/lang/Object;Landroid/media/Session2Command;Landroid/media/Session2Command$Result;)V"/>
+		<method name="onConnect(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;)Landroid/media/Session2CommandGroup;"/>
+		<method name="onDisconnected(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;)V"/>
+		<method name="onPostConnect(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;)V"/>
+		<method name="onSessionCommand(Landroid/media/MediaSession2;Landroid/media/MediaSession2$ControllerInfo;Landroid/media/Session2Command;Landroid/os/Bundle;)Landroid/media/Session2Command$Result;"/>
+	</class>
+	<class name="android/media/MediaSession2Service" since="29">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="addSession(Landroid/media/MediaSession2;)V"/>
+		<method name="getSessions()Ljava/util/List;"/>
+		<method name="onGetSession(Landroid/media/MediaSession2$ControllerInfo;)Landroid/media/MediaSession2;"/>
+		<method name="onUpdateNotification(Landroid/media/MediaSession2;)Landroid/media/MediaSession2Service$MediaNotification;"/>
+		<method name="removeSession(Landroid/media/MediaSession2;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/media/MediaSession2Service$MediaNotification" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILandroid/app/Notification;)V"/>
+		<method name="getNotification()Landroid/app/Notification;"/>
+		<method name="getNotificationId()I"/>
+	</class>
+	<class name="android/media/MediaSync" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="createInputSurface()Landroid/view/Surface;"/>
+		<method name="flush()V"/>
+		<method name="getPlaybackParams()Landroid/media/PlaybackParams;"/>
+		<method name="getSyncParams()Landroid/media/SyncParams;"/>
+		<method name="getTimestamp()Landroid/media/MediaTimestamp;"/>
+		<method name="queueAudio(Ljava/nio/ByteBuffer;IJ)V"/>
+		<method name="release()V"/>
+		<method name="setAudioTrack(Landroid/media/AudioTrack;)V"/>
+		<method name="setCallback(Landroid/media/MediaSync$Callback;Landroid/os/Handler;)V"/>
+		<method name="setOnErrorListener(Landroid/media/MediaSync$OnErrorListener;Landroid/os/Handler;)V"/>
+		<method name="setPlaybackParams(Landroid/media/PlaybackParams;)V"/>
+		<method name="setSurface(Landroid/view/Surface;)V"/>
+		<method name="setSyncParams(Landroid/media/SyncParams;)V"/>
+		<field name="MEDIASYNC_ERROR_AUDIOTRACK_FAIL"/>
+		<field name="MEDIASYNC_ERROR_SURFACE_FAIL"/>
+	</class>
+	<class name="android/media/MediaSync$Callback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAudioBufferConsumed(Landroid/media/MediaSync;Ljava/nio/ByteBuffer;I)V"/>
+	</class>
+	<class name="android/media/MediaSync$OnErrorListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onError(Landroid/media/MediaSync;II)V"/>
+	</class>
+	<class name="android/media/MediaSyncEvent" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="31"/>
+		<method name="createEvent(I)Landroid/media/MediaSyncEvent;"/>
+		<method name="getAudioSessionId()I"/>
+		<method name="getType()I"/>
+		<method name="setAudioSessionId(I)Landroid/media/MediaSyncEvent;"/>
+		<field name="CREATOR" since="31"/>
+		<field name="SYNC_EVENT_NONE"/>
+		<field name="SYNC_EVENT_PRESENTATION_COMPLETE"/>
+	</class>
+	<class name="android/media/MediaTimestamp" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(JJF)V" since="29"/>
+		<method name="getAnchorMediaTimeUs()J"/>
+		<method name="getAnchorSystemNanoTime()J" since="29"/>
+		<method name="getAnchorSytemNanoTime()J" deprecated="29"/>
+		<method name="getMediaClockRate()F"/>
+		<field name="TIMESTAMP_UNKNOWN" since="28"/>
+	</class>
+	<class name="android/media/MicrophoneDirection" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="setPreferredMicrophoneDirection(I)Z"/>
+		<method name="setPreferredMicrophoneFieldDimension(F)Z"/>
+		<field name="MIC_DIRECTION_AWAY_FROM_USER"/>
+		<field name="MIC_DIRECTION_EXTERNAL"/>
+		<field name="MIC_DIRECTION_TOWARDS_USER"/>
+		<field name="MIC_DIRECTION_UNSPECIFIED"/>
+	</class>
+	<class name="android/media/MicrophoneInfo" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getAddress()Ljava/lang/String;"/>
+		<method name="getChannelMapping()Ljava/util/List;"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getDirectionality()I"/>
+		<method name="getFrequencyResponse()Ljava/util/List;"/>
+		<method name="getGroup()I"/>
+		<method name="getId()I"/>
+		<method name="getIndexInTheGroup()I"/>
+		<method name="getLocation()I"/>
+		<method name="getMaxSpl()F"/>
+		<method name="getMinSpl()F"/>
+		<method name="getOrientation()Landroid/media/MicrophoneInfo$Coordinate3F;"/>
+		<method name="getPosition()Landroid/media/MicrophoneInfo$Coordinate3F;"/>
+		<method name="getSensitivity()F"/>
+		<method name="getType()I"/>
+		<field name="CHANNEL_MAPPING_DIRECT"/>
+		<field name="CHANNEL_MAPPING_PROCESSED"/>
+		<field name="DIRECTIONALITY_BI_DIRECTIONAL"/>
+		<field name="DIRECTIONALITY_CARDIOID"/>
+		<field name="DIRECTIONALITY_HYPER_CARDIOID"/>
+		<field name="DIRECTIONALITY_OMNI"/>
+		<field name="DIRECTIONALITY_SUPER_CARDIOID"/>
+		<field name="DIRECTIONALITY_UNKNOWN"/>
+		<field name="GROUP_UNKNOWN"/>
+		<field name="INDEX_IN_THE_GROUP_UNKNOWN"/>
+		<field name="LOCATION_MAINBODY"/>
+		<field name="LOCATION_MAINBODY_MOVABLE"/>
+		<field name="LOCATION_PERIPHERAL"/>
+		<field name="LOCATION_UNKNOWN"/>
+		<field name="ORIENTATION_UNKNOWN"/>
+		<field name="POSITION_UNKNOWN"/>
+		<field name="SENSITIVITY_UNKNOWN"/>
+		<field name="SPL_UNKNOWN"/>
+	</class>
+	<class name="android/media/MicrophoneInfo$Coordinate3F" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="x"/>
+		<field name="y"/>
+		<field name="z"/>
+	</class>
+	<class name="android/media/NotProvisionedException" since="18">
+		<extends name="android/media/MediaDrmException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/PlaybackParams" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="allowDefaults()Landroid/media/PlaybackParams;"/>
+		<method name="getAudioFallbackMode()I"/>
+		<method name="getPitch()F"/>
+		<method name="getSpeed()F"/>
+		<method name="setAudioFallbackMode(I)Landroid/media/PlaybackParams;"/>
+		<method name="setPitch(F)Landroid/media/PlaybackParams;"/>
+		<method name="setSpeed(F)Landroid/media/PlaybackParams;"/>
+		<field name="AUDIO_FALLBACK_MODE_DEFAULT"/>
+		<field name="AUDIO_FALLBACK_MODE_FAIL"/>
+		<field name="AUDIO_FALLBACK_MODE_MUTE"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/Rating" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getPercentRating()F"/>
+		<method name="getRatingStyle()I"/>
+		<method name="getStarRating()F"/>
+		<method name="hasHeart()Z"/>
+		<method name="isRated()Z"/>
+		<method name="isThumbUp()Z"/>
+		<method name="newHeartRating(Z)Landroid/media/Rating;"/>
+		<method name="newPercentageRating(F)Landroid/media/Rating;"/>
+		<method name="newStarRating(IF)Landroid/media/Rating;"/>
+		<method name="newThumbRating(Z)Landroid/media/Rating;"/>
+		<method name="newUnratedRating(I)Landroid/media/Rating;"/>
+		<field name="CREATOR"/>
+		<field name="RATING_3_STARS"/>
+		<field name="RATING_4_STARS"/>
+		<field name="RATING_5_STARS"/>
+		<field name="RATING_HEART"/>
+		<field name="RATING_NONE" since="21"/>
+		<field name="RATING_PERCENTAGE"/>
+		<field name="RATING_THUMB_UP_DOWN"/>
+	</class>
+	<class name="android/media/RemoteControlClient" since="14" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/PendingIntent;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/app/PendingIntent;Landroid/os/Looper;)V" deprecated="29"/>
+		<method name="editMetadata(Z)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+		<method name="getMediaSession()Landroid/media/session/MediaSession;" since="21" deprecated="29"/>
+		<method name="setMetadataUpdateListener(Landroid/media/RemoteControlClient$OnMetadataUpdateListener;)V" since="19" deprecated="29"/>
+		<method name="setOnGetPlaybackPositionListener(Landroid/media/RemoteControlClient$OnGetPlaybackPositionListener;)V" since="18" deprecated="29"/>
+		<method name="setPlaybackPositionUpdateListener(Landroid/media/RemoteControlClient$OnPlaybackPositionUpdateListener;)V" since="18" deprecated="29"/>
+		<method name="setPlaybackState(I)V" deprecated="29"/>
+		<method name="setPlaybackState(IJF)V" since="18" deprecated="29"/>
+		<method name="setTransportControlFlags(I)V" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_FAST_FORWARD" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_NEXT" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_PAUSE" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_PLAY" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_PLAY_PAUSE" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_POSITION_UPDATE" since="18" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_PREVIOUS" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_RATING" since="19" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_REWIND" deprecated="29"/>
+		<field name="FLAG_KEY_MEDIA_STOP" deprecated="29"/>
+		<field name="PLAYSTATE_BUFFERING" deprecated="29"/>
+		<field name="PLAYSTATE_ERROR" deprecated="29"/>
+		<field name="PLAYSTATE_FAST_FORWARDING" deprecated="29"/>
+		<field name="PLAYSTATE_PAUSED" deprecated="29"/>
+		<field name="PLAYSTATE_PLAYING" deprecated="29"/>
+		<field name="PLAYSTATE_REWINDING" deprecated="29"/>
+		<field name="PLAYSTATE_SKIPPING_BACKWARDS" deprecated="29"/>
+		<field name="PLAYSTATE_SKIPPING_FORWARDS" deprecated="29"/>
+		<field name="PLAYSTATE_STOPPED" deprecated="29"/>
+	</class>
+	<class name="android/media/RemoteControlClient$MetadataEditor" since="14" deprecated="21">
+		<extends name="android/media/MediaMetadataEditor" since="19"/>
+		<extends name="java/lang/Object" removed="19"/>
+		<method name="apply()V" deprecated="29"/>
+		<method name="clear()V" deprecated="29"/>
+		<method name="putBitmap(ILandroid/graphics/Bitmap;)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+		<method name="putLong(IJ)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+		<method name="putObject(ILjava/lang/Object;)Landroid/media/RemoteControlClient$MetadataEditor;" since="21" deprecated="29"/>
+		<method name="putString(ILjava/lang/String;)Landroid/media/RemoteControlClient$MetadataEditor;" deprecated="29"/>
+		<field name="BITMAP_KEY_ARTWORK" deprecated="29"/>
+	</class>
+	<class name="android/media/RemoteControlClient$OnGetPlaybackPositionListener" since="18" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onGetPlaybackPosition()J" deprecated="29"/>
+	</class>
+	<class name="android/media/RemoteControlClient$OnMetadataUpdateListener" since="19" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onMetadataUpdate(ILjava/lang/Object;)V" deprecated="29"/>
+	</class>
+	<class name="android/media/RemoteControlClient$OnPlaybackPositionUpdateListener" since="18" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onPlaybackPositionUpdate(J)V" deprecated="29"/>
+	</class>
+	<class name="android/media/RemoteController" since="19" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/media/RemoteController$OnClientUpdateListener;Landroid/os/Looper;)V" deprecated="29"/>
+		<method name="clearArtworkConfiguration()Z" deprecated="29"/>
+		<method name="editMetadata()Landroid/media/RemoteController$MetadataEditor;" deprecated="29"/>
+		<method name="getEstimatedMediaPosition()J" deprecated="29"/>
+		<method name="seekTo(J)Z" deprecated="29"/>
+		<method name="sendMediaKeyEvent(Landroid/view/KeyEvent;)Z" deprecated="29"/>
+		<method name="setArtworkConfiguration(II)Z" deprecated="29"/>
+		<method name="setSynchronizationMode(I)Z" deprecated="29"/>
+		<field name="POSITION_SYNCHRONIZATION_CHECK" deprecated="29"/>
+		<field name="POSITION_SYNCHRONIZATION_NONE" deprecated="29"/>
+	</class>
+	<class name="android/media/RemoteController$MetadataEditor" since="19" deprecated="29">
+		<extends name="android/media/MediaMetadataEditor"/>
+	</class>
+	<class name="android/media/RemoteController$OnClientUpdateListener" since="19" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onClientChange(Z)V" deprecated="29"/>
+		<method name="onClientMetadataUpdate(Landroid/media/RemoteController$MetadataEditor;)V" deprecated="29"/>
+		<method name="onClientPlaybackStateUpdate(I)V" deprecated="29"/>
+		<method name="onClientPlaybackStateUpdate(IJJF)V" deprecated="29"/>
+		<method name="onClientTransportControlUpdate(I)V" deprecated="29"/>
+	</class>
+	<class name="android/media/ResourceBusyException" since="19">
+		<extends name="android/media/MediaDrmException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/Ringtone" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;" since="21"/>
+		<method name="getStreamType()I" deprecated="21"/>
+		<method name="getTitle(Landroid/content/Context;)Ljava/lang/String;"/>
+		<method name="getVolume()F" since="28"/>
+		<method name="isHapticGeneratorEnabled()Z" since="31"/>
+		<method name="isLooping()Z" since="28"/>
+		<method name="isPlaying()Z"/>
+		<method name="play()V"/>
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="21"/>
+		<method name="setHapticGeneratorEnabled(Z)Z" since="31"/>
+		<method name="setLooping(Z)V" since="28"/>
+		<method name="setStreamType(I)V" deprecated="21"/>
+		<method name="setVolume(F)V" since="28"/>
+		<method name="stop()V"/>
+	</class>
+	<class name="android/media/RingtoneManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/Activity;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="getActualDefaultRingtoneUri(Landroid/content/Context;I)Landroid/net/Uri;"/>
+		<method name="getCursor()Landroid/database/Cursor;"/>
+		<method name="getDefaultType(Landroid/net/Uri;)I"/>
+		<method name="getDefaultUri(I)Landroid/net/Uri;"/>
+		<method name="getIncludeDrm()Z" deprecated="19"/>
+		<method name="getRingtone(I)Landroid/media/Ringtone;"/>
+		<method name="getRingtone(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/Ringtone;"/>
+		<method name="getRingtonePosition(Landroid/net/Uri;)I"/>
+		<method name="getRingtoneUri(I)Landroid/net/Uri;"/>
+		<method name="getStopPreviousRingtone()Z"/>
+		<method name="getValidRingtoneUri(Landroid/content/Context;)Landroid/net/Uri;"/>
+		<method name="hasHapticChannels(I)Z" since="29"/>
+		<method name="hasHapticChannels(Landroid/net/Uri;)Z" since="29"/>
+		<method name="inferStreamType()I" since="3"/>
+		<method name="isDefault(Landroid/net/Uri;)Z"/>
+		<method name="openDefaultRingtoneUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/content/res/AssetFileDescriptor;" since="29"/>
+		<method name="setActualDefaultRingtoneUri(Landroid/content/Context;ILandroid/net/Uri;)V"/>
+		<method name="setIncludeDrm(Z)V" deprecated="19"/>
+		<method name="setStopPreviousRingtone(Z)V"/>
+		<method name="setType(I)V"/>
+		<method name="stopPreviousRingtone()V"/>
+		<field name="ACTION_RINGTONE_PICKER"/>
+		<field name="EXTRA_RINGTONE_DEFAULT_URI"/>
+		<field name="EXTRA_RINGTONE_EXISTING_URI"/>
+		<field name="EXTRA_RINGTONE_INCLUDE_DRM" deprecated="19"/>
+		<field name="EXTRA_RINGTONE_PICKED_URI"/>
+		<field name="EXTRA_RINGTONE_SHOW_DEFAULT"/>
+		<field name="EXTRA_RINGTONE_SHOW_SILENT"/>
+		<field name="EXTRA_RINGTONE_TITLE"/>
+		<field name="EXTRA_RINGTONE_TYPE"/>
+		<field name="ID_COLUMN_INDEX"/>
+		<field name="TITLE_COLUMN_INDEX"/>
+		<field name="TYPE_ALARM"/>
+		<field name="TYPE_ALL"/>
+		<field name="TYPE_NOTIFICATION"/>
+		<field name="TYPE_RINGTONE"/>
+		<field name="URI_COLUMN_INDEX"/>
+	</class>
+	<class name="android/media/RouteDiscoveryPreference" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getPreferredFeatures()Ljava/util/List;"/>
+		<method name="shouldPerformActiveScan()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/RouteDiscoveryPreference$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/media/RouteDiscoveryPreference;)V"/>
+		<method name="&lt;init>(Ljava/util/List;Z)V"/>
+		<method name="build()Landroid/media/RouteDiscoveryPreference;"/>
+		<method name="setPreferredFeatures(Ljava/util/List;)Landroid/media/RouteDiscoveryPreference$Builder;"/>
+		<method name="setShouldPerformActiveScan(Z)Landroid/media/RouteDiscoveryPreference$Builder;"/>
+	</class>
+	<class name="android/media/RoutingSessionInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getClientPackageName()Ljava/lang/String;"/>
+		<method name="getControlHints()Landroid/os/Bundle;"/>
+		<method name="getDeselectableRoutes()Ljava/util/List;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<method name="getSelectableRoutes()Ljava/util/List;"/>
+		<method name="getSelectedRoutes()Ljava/util/List;"/>
+		<method name="getTransferableRoutes()Ljava/util/List;"/>
+		<method name="getVolume()I"/>
+		<method name="getVolumeHandling()I"/>
+		<method name="getVolumeMax()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/RoutingSessionInfo$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/media/RoutingSessionInfo;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="addDeselectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="addSelectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="addSelectedRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="addTransferableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="build()Landroid/media/RoutingSessionInfo;"/>
+		<method name="clearDeselectableRoutes()Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="clearSelectableRoutes()Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="clearSelectedRoutes()Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="clearTransferableRoutes()Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="removeDeselectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="removeSelectableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="removeSelectedRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="removeTransferableRoute(Ljava/lang/String;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="setControlHints(Landroid/os/Bundle;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="setName(Ljava/lang/CharSequence;)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="setVolume(I)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="setVolumeHandling(I)Landroid/media/RoutingSessionInfo$Builder;"/>
+		<method name="setVolumeMax(I)Landroid/media/RoutingSessionInfo$Builder;"/>
+	</class>
+	<class name="android/media/Session2Command" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="getCommandCode()I"/>
+		<method name="getCustomAction()Ljava/lang/String;"/>
+		<method name="getCustomExtras()Landroid/os/Bundle;"/>
+		<field name="COMMAND_CODE_CUSTOM"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/Session2Command$Result" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILandroid/os/Bundle;)V"/>
+		<method name="getResultCode()I"/>
+		<method name="getResultData()Landroid/os/Bundle;"/>
+		<field name="RESULT_ERROR_UNKNOWN_ERROR"/>
+		<field name="RESULT_INFO_SKIPPED"/>
+		<field name="RESULT_SUCCESS"/>
+	</class>
+	<class name="android/media/Session2CommandGroup" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCommands()Ljava/util/Set;"/>
+		<method name="hasCommand(I)Z"/>
+		<method name="hasCommand(Landroid/media/Session2Command;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/Session2CommandGroup$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/media/Session2CommandGroup;)V"/>
+		<method name="addCommand(Landroid/media/Session2Command;)Landroid/media/Session2CommandGroup$Builder;"/>
+		<method name="build()Landroid/media/Session2CommandGroup;"/>
+		<method name="removeCommand(Landroid/media/Session2Command;)Landroid/media/Session2CommandGroup$Builder;"/>
+	</class>
+	<class name="android/media/Session2Token" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;)V"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getServiceName()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+		<method name="getUid()I"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_SESSION"/>
+		<field name="TYPE_SESSION_SERVICE"/>
+	</class>
+	<class name="android/media/SoundPool" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(III)V" deprecated="21"/>
+		<method name="autoPause()V" since="8"/>
+		<method name="autoResume()V" since="8"/>
+		<method name="load(Landroid/content/Context;II)I"/>
+		<method name="load(Landroid/content/res/AssetFileDescriptor;I)I" since="3"/>
+		<method name="load(Ljava/io/FileDescriptor;JJI)I" since="3"/>
+		<method name="load(Ljava/lang/String;I)I"/>
+		<method name="pause(I)V"/>
+		<method name="play(IFFIIF)I"/>
+		<method name="release()V"/>
+		<method name="resume(I)V"/>
+		<method name="setLoop(II)V"/>
+		<method name="setOnLoadCompleteListener(Landroid/media/SoundPool$OnLoadCompleteListener;)V" since="8"/>
+		<method name="setPriority(II)V"/>
+		<method name="setRate(IF)V"/>
+		<method name="setVolume(IFF)V"/>
+		<method name="stop(I)V"/>
+		<method name="unload(I)Z"/>
+	</class>
+	<class name="android/media/SoundPool$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/media/SoundPool;"/>
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)Landroid/media/SoundPool$Builder;"/>
+		<method name="setMaxStreams(I)Landroid/media/SoundPool$Builder;"/>
+	</class>
+	<class name="android/media/SoundPool$OnLoadCompleteListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="onLoadComplete(Landroid/media/SoundPool;II)V"/>
+	</class>
+	<class name="android/media/Spatializer" since="33">
+		<extends name="java/lang/Object"/>
+		<method name="addOnSpatializerStateChangedListener(Ljava/util/concurrent/Executor;Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V"/>
+		<method name="canBeSpatialized(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;)Z"/>
+		<method name="getImmersiveAudioLevel()I"/>
+		<method name="isAvailable()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="removeOnSpatializerStateChangedListener(Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V"/>
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL"/>
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_NONE"/>
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_OTHER"/>
+	</class>
+	<class name="android/media/Spatializer$OnSpatializerStateChangedListener" since="33">
+		<method name="onSpatializerAvailableChanged(Landroid/media/Spatializer;Z)V"/>
+		<method name="onSpatializerEnabledChanged(Landroid/media/Spatializer;Z)V"/>
+	</class>
+	<class name="android/media/SubtitleData" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IJJ[B)V" since="29"/>
+		<method name="getData()[B"/>
+		<method name="getDurationUs()J"/>
+		<method name="getStartTimeUs()J"/>
+		<method name="getTrackIndex()I"/>
+	</class>
+	<class name="android/media/SyncParams" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="allowDefaults()Landroid/media/SyncParams;"/>
+		<method name="getAudioAdjustMode()I"/>
+		<method name="getFrameRate()F"/>
+		<method name="getSyncSource()I"/>
+		<method name="getTolerance()F"/>
+		<method name="setAudioAdjustMode(I)Landroid/media/SyncParams;"/>
+		<method name="setFrameRate(F)Landroid/media/SyncParams;"/>
+		<method name="setSyncSource(I)Landroid/media/SyncParams;"/>
+		<method name="setTolerance(F)Landroid/media/SyncParams;"/>
+		<field name="AUDIO_ADJUST_MODE_DEFAULT"/>
+		<field name="AUDIO_ADJUST_MODE_RESAMPLE"/>
+		<field name="AUDIO_ADJUST_MODE_STRETCH"/>
+		<field name="SYNC_SOURCE_AUDIO"/>
+		<field name="SYNC_SOURCE_DEFAULT"/>
+		<field name="SYNC_SOURCE_SYSTEM_CLOCK"/>
+		<field name="SYNC_SOURCE_VSYNC"/>
+	</class>
+	<class name="android/media/ThumbnailUtils" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="createAudioThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
+		<method name="createAudioThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" since="29" deprecated="29"/>
+		<method name="createImageThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
+		<method name="createImageThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" since="29" deprecated="29"/>
+		<method name="createVideoThumbnail(Ljava/io/File;Landroid/util/Size;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;" since="29"/>
+		<method name="createVideoThumbnail(Ljava/lang/String;I)Landroid/graphics/Bitmap;" deprecated="29"/>
+		<method name="extractThumbnail(Landroid/graphics/Bitmap;II)Landroid/graphics/Bitmap;"/>
+		<method name="extractThumbnail(Landroid/graphics/Bitmap;III)Landroid/graphics/Bitmap;"/>
+		<field name="OPTIONS_RECYCLE_INPUT"/>
+	</class>
+	<class name="android/media/TimedMetaData" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(J[B)V" since="29"/>
+		<method name="getMetaData()[B"/>
+		<method name="getTimestamp()J"/>
+	</class>
+	<class name="android/media/TimedText" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="getBounds()Landroid/graphics/Rect;"/>
+		<method name="getText()Ljava/lang/String;"/>
+	</class>
+	<class name="android/media/ToneGenerator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getAudioSessionId()I" since="16"/>
+		<method name="release()V"/>
+		<method name="startTone(I)Z"/>
+		<method name="startTone(II)Z" since="5"/>
+		<method name="stopTone()V"/>
+		<field name="MAX_VOLUME"/>
+		<field name="MIN_VOLUME"/>
+		<field name="TONE_CDMA_ABBR_ALERT" since="4"/>
+		<field name="TONE_CDMA_ABBR_INTERCEPT" since="4"/>
+		<field name="TONE_CDMA_ABBR_REORDER" since="4"/>
+		<field name="TONE_CDMA_ALERT_AUTOREDIAL_LITE" since="4"/>
+		<field name="TONE_CDMA_ALERT_CALL_GUARD" since="4"/>
+		<field name="TONE_CDMA_ALERT_INCALL_LITE" since="4"/>
+		<field name="TONE_CDMA_ALERT_NETWORK_LITE" since="4"/>
+		<field name="TONE_CDMA_ANSWER" since="4"/>
+		<field name="TONE_CDMA_CALLDROP_LITE" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT3" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT5" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT6" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PAT7" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING" since="4"/>
+		<field name="TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI" since="4"/>
+		<field name="TONE_CDMA_CONFIRM" since="4"/>
+		<field name="TONE_CDMA_DIAL_TONE_LITE" since="4"/>
+		<field name="TONE_CDMA_EMERGENCY_RINGBACK" since="4"/>
+		<field name="TONE_CDMA_HIGH_L" since="4"/>
+		<field name="TONE_CDMA_HIGH_PBX_L" since="4"/>
+		<field name="TONE_CDMA_HIGH_PBX_SLS" since="4"/>
+		<field name="TONE_CDMA_HIGH_PBX_SS" since="4"/>
+		<field name="TONE_CDMA_HIGH_PBX_SSL" since="4"/>
+		<field name="TONE_CDMA_HIGH_PBX_S_X4" since="4"/>
+		<field name="TONE_CDMA_HIGH_SLS" since="4"/>
+		<field name="TONE_CDMA_HIGH_SS" since="4"/>
+		<field name="TONE_CDMA_HIGH_SSL" since="4"/>
+		<field name="TONE_CDMA_HIGH_SS_2" since="4"/>
+		<field name="TONE_CDMA_HIGH_S_X4" since="4"/>
+		<field name="TONE_CDMA_INTERCEPT" since="4"/>
+		<field name="TONE_CDMA_KEYPAD_VOLUME_KEY_LITE" since="4"/>
+		<field name="TONE_CDMA_LOW_L" since="4"/>
+		<field name="TONE_CDMA_LOW_PBX_L" since="4"/>
+		<field name="TONE_CDMA_LOW_PBX_SLS" since="4"/>
+		<field name="TONE_CDMA_LOW_PBX_SS" since="4"/>
+		<field name="TONE_CDMA_LOW_PBX_SSL" since="4"/>
+		<field name="TONE_CDMA_LOW_PBX_S_X4" since="4"/>
+		<field name="TONE_CDMA_LOW_SLS" since="4"/>
+		<field name="TONE_CDMA_LOW_SS" since="4"/>
+		<field name="TONE_CDMA_LOW_SSL" since="4"/>
+		<field name="TONE_CDMA_LOW_SS_2" since="4"/>
+		<field name="TONE_CDMA_LOW_S_X4" since="4"/>
+		<field name="TONE_CDMA_MED_L" since="4"/>
+		<field name="TONE_CDMA_MED_PBX_L" since="4"/>
+		<field name="TONE_CDMA_MED_PBX_SLS" since="4"/>
+		<field name="TONE_CDMA_MED_PBX_SS" since="4"/>
+		<field name="TONE_CDMA_MED_PBX_SSL" since="4"/>
+		<field name="TONE_CDMA_MED_PBX_S_X4" since="4"/>
+		<field name="TONE_CDMA_MED_SLS" since="4"/>
+		<field name="TONE_CDMA_MED_SS" since="4"/>
+		<field name="TONE_CDMA_MED_SSL" since="4"/>
+		<field name="TONE_CDMA_MED_SS_2" since="4"/>
+		<field name="TONE_CDMA_MED_S_X4" since="4"/>
+		<field name="TONE_CDMA_NETWORK_BUSY" since="4"/>
+		<field name="TONE_CDMA_NETWORK_BUSY_ONE_SHOT" since="4"/>
+		<field name="TONE_CDMA_NETWORK_CALLWAITING" since="4"/>
+		<field name="TONE_CDMA_NETWORK_USA_RINGBACK" since="4"/>
+		<field name="TONE_CDMA_ONE_MIN_BEEP" since="4"/>
+		<field name="TONE_CDMA_PIP" since="4"/>
+		<field name="TONE_CDMA_PRESSHOLDKEY_LITE" since="4"/>
+		<field name="TONE_CDMA_REORDER" since="4"/>
+		<field name="TONE_CDMA_SIGNAL_OFF" since="4"/>
+		<field name="TONE_CDMA_SOFT_ERROR_LITE" since="4"/>
+		<field name="TONE_DTMF_0"/>
+		<field name="TONE_DTMF_1"/>
+		<field name="TONE_DTMF_2"/>
+		<field name="TONE_DTMF_3"/>
+		<field name="TONE_DTMF_4"/>
+		<field name="TONE_DTMF_5"/>
+		<field name="TONE_DTMF_6"/>
+		<field name="TONE_DTMF_7"/>
+		<field name="TONE_DTMF_8"/>
+		<field name="TONE_DTMF_9"/>
+		<field name="TONE_DTMF_A"/>
+		<field name="TONE_DTMF_B"/>
+		<field name="TONE_DTMF_C"/>
+		<field name="TONE_DTMF_D"/>
+		<field name="TONE_DTMF_P"/>
+		<field name="TONE_DTMF_S"/>
+		<field name="TONE_PROP_ACK"/>
+		<field name="TONE_PROP_BEEP"/>
+		<field name="TONE_PROP_BEEP2"/>
+		<field name="TONE_PROP_NACK"/>
+		<field name="TONE_PROP_PROMPT"/>
+		<field name="TONE_SUP_BUSY"/>
+		<field name="TONE_SUP_CALL_WAITING"/>
+		<field name="TONE_SUP_CONFIRM" since="4"/>
+		<field name="TONE_SUP_CONGESTION"/>
+		<field name="TONE_SUP_CONGESTION_ABBREV" since="4"/>
+		<field name="TONE_SUP_DIAL"/>
+		<field name="TONE_SUP_ERROR"/>
+		<field name="TONE_SUP_INTERCEPT" since="4"/>
+		<field name="TONE_SUP_INTERCEPT_ABBREV" since="4"/>
+		<field name="TONE_SUP_PIP" since="4"/>
+		<field name="TONE_SUP_RADIO_ACK"/>
+		<field name="TONE_SUP_RADIO_NOTAVAIL"/>
+		<field name="TONE_SUP_RINGTONE"/>
+	</class>
+	<class name="android/media/UnsupportedSchemeException" since="18">
+		<extends name="android/media/MediaDrmException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/media/VolumeAutomation" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="createVolumeShaper(Landroid/media/VolumeShaper$Configuration;)Landroid/media/VolumeShaper;"/>
+	</class>
+	<class name="android/media/VolumeProvider" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIILjava/lang/String;)V" since="30"/>
+		<method name="getCurrentVolume()I"/>
+		<method name="getMaxVolume()I"/>
+		<method name="getVolumeControl()I"/>
+		<method name="getVolumeControlId()Ljava/lang/String;" since="30"/>
+		<method name="onAdjustVolume(I)V"/>
+		<method name="onSetVolumeTo(I)V"/>
+		<method name="setCurrentVolume(I)V"/>
+		<field name="VOLUME_CONTROL_ABSOLUTE"/>
+		<field name="VOLUME_CONTROL_FIXED"/>
+		<field name="VOLUME_CONTROL_RELATIVE"/>
+	</class>
+	<class name="android/media/VolumeShaper" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="apply(Landroid/media/VolumeShaper$Operation;)V"/>
+		<method name="getVolume()F"/>
+		<method name="replace(Landroid/media/VolumeShaper$Configuration;Landroid/media/VolumeShaper$Operation;Z)V"/>
+	</class>
+	<class name="android/media/VolumeShaper$Configuration" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDuration()J"/>
+		<method name="getInterpolatorType()I"/>
+		<method name="getMaximumCurvePoints()I"/>
+		<method name="getTimes()[F"/>
+		<method name="getVolumes()[F"/>
+		<field name="CREATOR"/>
+		<field name="CUBIC_RAMP"/>
+		<field name="INTERPOLATOR_TYPE_CUBIC"/>
+		<field name="INTERPOLATOR_TYPE_CUBIC_MONOTONIC"/>
+		<field name="INTERPOLATOR_TYPE_LINEAR"/>
+		<field name="INTERPOLATOR_TYPE_STEP"/>
+		<field name="LINEAR_RAMP"/>
+		<field name="SCURVE_RAMP"/>
+		<field name="SINE_RAMP"/>
+	</class>
+	<class name="android/media/VolumeShaper$Configuration$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/media/VolumeShaper$Configuration;)V"/>
+		<method name="build()Landroid/media/VolumeShaper$Configuration;"/>
+		<method name="invertVolumes()Landroid/media/VolumeShaper$Configuration$Builder;"/>
+		<method name="reflectTimes()Landroid/media/VolumeShaper$Configuration$Builder;"/>
+		<method name="scaleToEndVolume(F)Landroid/media/VolumeShaper$Configuration$Builder;"/>
+		<method name="scaleToStartVolume(F)Landroid/media/VolumeShaper$Configuration$Builder;"/>
+		<method name="setCurve([F[F)Landroid/media/VolumeShaper$Configuration$Builder;"/>
+		<method name="setDuration(J)Landroid/media/VolumeShaper$Configuration$Builder;"/>
+		<method name="setInterpolatorType(I)Landroid/media/VolumeShaper$Configuration$Builder;"/>
+	</class>
+	<class name="android/media/VolumeShaper$Operation" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="PLAY"/>
+		<field name="REVERSE"/>
+	</class>
+	<class name="android/media/audiofx/AcousticEchoCanceler" since="16">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="create(I)Landroid/media/audiofx/AcousticEchoCanceler;"/>
+		<method name="isAvailable()Z"/>
+	</class>
+	<class name="android/media/audiofx/AudioEffect" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="getDescriptor()Landroid/media/audiofx/AudioEffect$Descriptor;"/>
+		<method name="getEnabled()Z"/>
+		<method name="getId()I"/>
+		<method name="hasControl()Z"/>
+		<method name="queryEffects()[Landroid/media/audiofx/AudioEffect$Descriptor;"/>
+		<method name="release()V"/>
+		<method name="setControlStatusListener(Landroid/media/audiofx/AudioEffect$OnControlStatusChangeListener;)V"/>
+		<method name="setEnableStatusListener(Landroid/media/audiofx/AudioEffect$OnEnableStatusChangeListener;)V"/>
+		<method name="setEnabled(Z)I"/>
+		<field name="ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION"/>
+		<field name="ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL"/>
+		<field name="ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION"/>
+		<field name="ALREADY_EXISTS"/>
+		<field name="CONTENT_TYPE_GAME"/>
+		<field name="CONTENT_TYPE_MOVIE"/>
+		<field name="CONTENT_TYPE_MUSIC"/>
+		<field name="CONTENT_TYPE_VOICE"/>
+		<field name="EFFECT_AUXILIARY"/>
+		<field name="EFFECT_INSERT"/>
+		<field name="EFFECT_POST_PROCESSING" since="30"/>
+		<field name="EFFECT_PRE_PROCESSING" since="30"/>
+		<field name="EFFECT_TYPE_AEC" since="18"/>
+		<field name="EFFECT_TYPE_AGC" since="18"/>
+		<field name="EFFECT_TYPE_BASS_BOOST" since="18"/>
+		<field name="EFFECT_TYPE_DYNAMICS_PROCESSING" since="28"/>
+		<field name="EFFECT_TYPE_ENV_REVERB" since="18"/>
+		<field name="EFFECT_TYPE_EQUALIZER" since="18"/>
+		<field name="EFFECT_TYPE_HAPTIC_GENERATOR" since="31"/>
+		<field name="EFFECT_TYPE_LOUDNESS_ENHANCER" since="19"/>
+		<field name="EFFECT_TYPE_NS" since="18"/>
+		<field name="EFFECT_TYPE_PRESET_REVERB" since="18"/>
+		<field name="EFFECT_TYPE_VIRTUALIZER" since="18"/>
+		<field name="ERROR"/>
+		<field name="ERROR_BAD_VALUE"/>
+		<field name="ERROR_DEAD_OBJECT"/>
+		<field name="ERROR_INVALID_OPERATION"/>
+		<field name="ERROR_NO_INIT"/>
+		<field name="ERROR_NO_MEMORY"/>
+		<field name="EXTRA_AUDIO_SESSION"/>
+		<field name="EXTRA_CONTENT_TYPE"/>
+		<field name="EXTRA_PACKAGE_NAME"/>
+		<field name="SUCCESS"/>
+	</class>
+	<class name="android/media/audiofx/AudioEffect$Descriptor" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="connectMode"/>
+		<field name="implementor"/>
+		<field name="name"/>
+		<field name="type"/>
+		<field name="uuid"/>
+	</class>
+	<class name="android/media/audiofx/AudioEffect$OnControlStatusChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onControlStatusChange(Landroid/media/audiofx/AudioEffect;Z)V"/>
+	</class>
+	<class name="android/media/audiofx/AudioEffect$OnEnableStatusChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onEnableStatusChange(Landroid/media/audiofx/AudioEffect;Z)V"/>
+	</class>
+	<class name="android/media/audiofx/AutomaticGainControl" since="16">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="create(I)Landroid/media/audiofx/AutomaticGainControl;"/>
+		<method name="isAvailable()Z"/>
+	</class>
+	<class name="android/media/audiofx/BassBoost" since="9">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getProperties()Landroid/media/audiofx/BassBoost$Settings;"/>
+		<method name="getRoundedStrength()S"/>
+		<method name="getStrengthSupported()Z"/>
+		<method name="setParameterListener(Landroid/media/audiofx/BassBoost$OnParameterChangeListener;)V"/>
+		<method name="setProperties(Landroid/media/audiofx/BassBoost$Settings;)V"/>
+		<method name="setStrength(S)V"/>
+		<field name="PARAM_STRENGTH"/>
+		<field name="PARAM_STRENGTH_SUPPORTED"/>
+	</class>
+	<class name="android/media/audiofx/BassBoost$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onParameterChange(Landroid/media/audiofx/BassBoost;IIS)V"/>
+	</class>
+	<class name="android/media/audiofx/BassBoost$Settings" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="strength"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing" since="28">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IILandroid/media/audiofx/DynamicsProcessing$Config;)V"/>
+		<method name="getChannelByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Channel;"/>
+		<method name="getChannelCount()I"/>
+		<method name="getConfig()Landroid/media/audiofx/DynamicsProcessing$Config;"/>
+		<method name="getInputGainByChannelIndex(I)F"/>
+		<method name="getLimiterByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Limiter;"/>
+		<method name="getMbcBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
+		<method name="getMbcByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Mbc;"/>
+		<method name="getPostEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
+		<method name="getPostEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
+		<method name="getPreEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
+		<method name="getPreEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
+		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
+		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
+		<method name="setInputGainAllChannelsTo(F)V"/>
+		<method name="setInputGainbyChannel(IF)V"/>
+		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
+		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
+		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
+		<method name="setMbcBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
+		<method name="setMbcBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
+		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
+		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPostEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPostEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPreEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPreEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<field name="VARIANT_FAVOR_FREQUENCY_RESOLUTION"/>
+		<field name="VARIANT_FAVOR_TIME_RESOLUTION"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$BandBase" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ZF)V"/>
+		<method name="getCutoffFrequency()F"/>
+		<method name="isEnabled()Z"/>
+		<method name="setCutoffFrequency(F)V"/>
+		<method name="setEnabled(Z)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$BandStage" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$Stage"/>
+		<method name="&lt;init>(ZZI)V"/>
+		<method name="getBandCount()I"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Channel" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(FZIZIZIZ)V"/>
+		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
+		<method name="getInputGain()F"/>
+		<method name="getLimiter()Landroid/media/audiofx/DynamicsProcessing$Limiter;"/>
+		<method name="getMbc()Landroid/media/audiofx/DynamicsProcessing$Mbc;"/>
+		<method name="getMbcBand(I)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
+		<method name="getPostEq()Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
+		<method name="getPostEqBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
+		<method name="getPreEq()Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
+		<method name="getPreEqBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
+		<method name="setInputGain(F)V"/>
+		<method name="setLimiter(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
+		<method name="setMbc(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
+		<method name="setMbcBand(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
+		<method name="setPostEq(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPostEqBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPreEq(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPreEqBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Config" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getChannelByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Channel;"/>
+		<method name="getInputGainByChannelIndex(I)F"/>
+		<method name="getLimiterByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Limiter;"/>
+		<method name="getMbcBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
+		<method name="getMbcBandCount()I"/>
+		<method name="getMbcByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Mbc;"/>
+		<method name="getPostEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
+		<method name="getPostEqBandCount()I"/>
+		<method name="getPostEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
+		<method name="getPreEqBandByChannelIndex(II)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
+		<method name="getPreEqBandCount()I"/>
+		<method name="getPreEqByChannelIndex(I)Landroid/media/audiofx/DynamicsProcessing$Eq;"/>
+		<method name="getPreferredFrameDuration()F"/>
+		<method name="getVariant()I"/>
+		<method name="isLimiterInUse()Z"/>
+		<method name="isMbcInUse()Z"/>
+		<method name="isPostEqInUse()Z"/>
+		<method name="isPreEqInUse()Z"/>
+		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
+		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)V"/>
+		<method name="setInputGainAllChannelsTo(F)V"/>
+		<method name="setInputGainByChannelIndex(IF)V"/>
+		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
+		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
+		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
+		<method name="setMbcBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
+		<method name="setMbcBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
+		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
+		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPostEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPostEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="setPreEqBandAllChannelsTo(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPreEqBandByChannelIndex(IILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Config$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IIZIZIZIZ)V"/>
+		<method name="build()Landroid/media/audiofx/DynamicsProcessing$Config;"/>
+		<method name="setAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Channel;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setChannelTo(ILandroid/media/audiofx/DynamicsProcessing$Channel;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setInputGainAllChannelsTo(F)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setInputGainByChannelIndex(IF)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setLimiterAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Limiter;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setLimiterByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Limiter;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setMbcAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Mbc;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setMbcByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Mbc;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setPostEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setPostEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setPreEqAllChannelsTo(Landroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setPreEqByChannelIndex(ILandroid/media/audiofx/DynamicsProcessing$Eq;)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+		<method name="setPreferredFrameDuration(F)Landroid/media/audiofx/DynamicsProcessing$Config$Builder;"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Eq" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandStage"/>
+		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Eq;)V"/>
+		<method name="&lt;init>(ZZI)V"/>
+		<method name="getBand(I)Landroid/media/audiofx/DynamicsProcessing$EqBand;"/>
+		<method name="setBand(ILandroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$EqBand" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandBase"/>
+		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$EqBand;)V"/>
+		<method name="&lt;init>(ZFF)V"/>
+		<method name="getGain()F"/>
+		<method name="setGain(F)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Limiter" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$Stage"/>
+		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Limiter;)V"/>
+		<method name="&lt;init>(ZZIFFFFF)V"/>
+		<method name="getAttackTime()F"/>
+		<method name="getLinkGroup()I"/>
+		<method name="getPostGain()F"/>
+		<method name="getRatio()F"/>
+		<method name="getReleaseTime()F"/>
+		<method name="getThreshold()F"/>
+		<method name="setAttackTime(F)V"/>
+		<method name="setLinkGroup(I)V"/>
+		<method name="setPostGain(F)V"/>
+		<method name="setRatio(F)V"/>
+		<method name="setReleaseTime(F)V"/>
+		<method name="setThreshold(F)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Mbc" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandStage"/>
+		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$Mbc;)V"/>
+		<method name="&lt;init>(ZZI)V"/>
+		<method name="getBand(I)Landroid/media/audiofx/DynamicsProcessing$MbcBand;"/>
+		<method name="setBand(ILandroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$MbcBand" since="28">
+		<extends name="android/media/audiofx/DynamicsProcessing$BandBase"/>
+		<method name="&lt;init>(Landroid/media/audiofx/DynamicsProcessing$MbcBand;)V"/>
+		<method name="&lt;init>(ZFFFFFFFFFF)V"/>
+		<method name="getAttackTime()F"/>
+		<method name="getExpanderRatio()F"/>
+		<method name="getKneeWidth()F"/>
+		<method name="getNoiseGateThreshold()F"/>
+		<method name="getPostGain()F"/>
+		<method name="getPreGain()F"/>
+		<method name="getRatio()F"/>
+		<method name="getReleaseTime()F"/>
+		<method name="getThreshold()F"/>
+		<method name="setAttackTime(F)V"/>
+		<method name="setExpanderRatio(F)V"/>
+		<method name="setKneeWidth(F)V"/>
+		<method name="setNoiseGateThreshold(F)V"/>
+		<method name="setPostGain(F)V"/>
+		<method name="setPreGain(F)V"/>
+		<method name="setRatio(F)V"/>
+		<method name="setReleaseTime(F)V"/>
+		<method name="setThreshold(F)V"/>
+	</class>
+	<class name="android/media/audiofx/DynamicsProcessing$Stage" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ZZ)V"/>
+		<method name="isEnabled()Z"/>
+		<method name="isInUse()Z"/>
+		<method name="setEnabled(Z)V"/>
+	</class>
+	<class name="android/media/audiofx/EnvironmentalReverb" since="9">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getDecayHFRatio()S"/>
+		<method name="getDecayTime()I"/>
+		<method name="getDensity()S"/>
+		<method name="getDiffusion()S"/>
+		<method name="getProperties()Landroid/media/audiofx/EnvironmentalReverb$Settings;"/>
+		<method name="getReflectionsDelay()I"/>
+		<method name="getReflectionsLevel()S"/>
+		<method name="getReverbDelay()I"/>
+		<method name="getReverbLevel()S"/>
+		<method name="getRoomHFLevel()S"/>
+		<method name="getRoomLevel()S"/>
+		<method name="setDecayHFRatio(S)V"/>
+		<method name="setDecayTime(I)V"/>
+		<method name="setDensity(S)V"/>
+		<method name="setDiffusion(S)V"/>
+		<method name="setParameterListener(Landroid/media/audiofx/EnvironmentalReverb$OnParameterChangeListener;)V"/>
+		<method name="setProperties(Landroid/media/audiofx/EnvironmentalReverb$Settings;)V"/>
+		<method name="setReflectionsDelay(I)V"/>
+		<method name="setReflectionsLevel(S)V"/>
+		<method name="setReverbDelay(I)V"/>
+		<method name="setReverbLevel(S)V"/>
+		<method name="setRoomHFLevel(S)V"/>
+		<method name="setRoomLevel(S)V"/>
+		<field name="PARAM_DECAY_HF_RATIO"/>
+		<field name="PARAM_DECAY_TIME"/>
+		<field name="PARAM_DENSITY"/>
+		<field name="PARAM_DIFFUSION"/>
+		<field name="PARAM_REFLECTIONS_DELAY"/>
+		<field name="PARAM_REFLECTIONS_LEVEL"/>
+		<field name="PARAM_REVERB_DELAY"/>
+		<field name="PARAM_REVERB_LEVEL"/>
+		<field name="PARAM_ROOM_HF_LEVEL"/>
+		<field name="PARAM_ROOM_LEVEL"/>
+	</class>
+	<class name="android/media/audiofx/EnvironmentalReverb$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onParameterChange(Landroid/media/audiofx/EnvironmentalReverb;III)V"/>
+	</class>
+	<class name="android/media/audiofx/EnvironmentalReverb$Settings" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="decayHFRatio"/>
+		<field name="decayTime"/>
+		<field name="density"/>
+		<field name="diffusion"/>
+		<field name="reflectionsDelay"/>
+		<field name="reflectionsLevel"/>
+		<field name="reverbDelay"/>
+		<field name="reverbLevel"/>
+		<field name="roomHFLevel"/>
+		<field name="roomLevel"/>
+	</class>
+	<class name="android/media/audiofx/Equalizer" since="9">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getBand(I)S"/>
+		<method name="getBandFreqRange(S)[I"/>
+		<method name="getBandLevel(S)S"/>
+		<method name="getBandLevelRange()[S"/>
+		<method name="getCenterFreq(S)I"/>
+		<method name="getCurrentPreset()S"/>
+		<method name="getNumberOfBands()S"/>
+		<method name="getNumberOfPresets()S"/>
+		<method name="getPresetName(S)Ljava/lang/String;"/>
+		<method name="getProperties()Landroid/media/audiofx/Equalizer$Settings;"/>
+		<method name="setBandLevel(SS)V"/>
+		<method name="setParameterListener(Landroid/media/audiofx/Equalizer$OnParameterChangeListener;)V"/>
+		<method name="setProperties(Landroid/media/audiofx/Equalizer$Settings;)V"/>
+		<method name="usePreset(S)V"/>
+		<field name="PARAM_BAND_FREQ_RANGE"/>
+		<field name="PARAM_BAND_LEVEL"/>
+		<field name="PARAM_CENTER_FREQ"/>
+		<field name="PARAM_CURRENT_PRESET"/>
+		<field name="PARAM_GET_BAND"/>
+		<field name="PARAM_GET_NUM_OF_PRESETS"/>
+		<field name="PARAM_GET_PRESET_NAME"/>
+		<field name="PARAM_LEVEL_RANGE"/>
+		<field name="PARAM_NUM_BANDS"/>
+		<field name="PARAM_STRING_SIZE_MAX"/>
+	</class>
+	<class name="android/media/audiofx/Equalizer$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onParameterChange(Landroid/media/audiofx/Equalizer;IIII)V"/>
+	</class>
+	<class name="android/media/audiofx/Equalizer$Settings" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="bandLevels"/>
+		<field name="curPreset"/>
+		<field name="numBands"/>
+	</class>
+	<class name="android/media/audiofx/HapticGenerator" since="31">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="create(I)Landroid/media/audiofx/HapticGenerator;"/>
+		<method name="isAvailable()Z"/>
+	</class>
+	<class name="android/media/audiofx/LoudnessEnhancer" since="19">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getTargetGain()F"/>
+		<method name="setTargetGain(I)V"/>
+		<field name="PARAM_TARGET_GAIN_MB"/>
+	</class>
+	<class name="android/media/audiofx/NoiseSuppressor" since="16">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="create(I)Landroid/media/audiofx/NoiseSuppressor;"/>
+		<method name="isAvailable()Z"/>
+	</class>
+	<class name="android/media/audiofx/PresetReverb" since="9">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getPreset()S"/>
+		<method name="getProperties()Landroid/media/audiofx/PresetReverb$Settings;"/>
+		<method name="setParameterListener(Landroid/media/audiofx/PresetReverb$OnParameterChangeListener;)V"/>
+		<method name="setPreset(S)V"/>
+		<method name="setProperties(Landroid/media/audiofx/PresetReverb$Settings;)V"/>
+		<field name="PARAM_PRESET"/>
+		<field name="PRESET_LARGEHALL"/>
+		<field name="PRESET_LARGEROOM"/>
+		<field name="PRESET_MEDIUMHALL"/>
+		<field name="PRESET_MEDIUMROOM"/>
+		<field name="PRESET_NONE"/>
+		<field name="PRESET_PLATE"/>
+		<field name="PRESET_SMALLROOM"/>
+	</class>
+	<class name="android/media/audiofx/PresetReverb$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onParameterChange(Landroid/media/audiofx/PresetReverb;IIS)V"/>
+	</class>
+	<class name="android/media/audiofx/PresetReverb$Settings" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="preset"/>
+	</class>
+	<class name="android/media/audiofx/Virtualizer" since="9">
+		<extends name="android/media/audiofx/AudioEffect"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="canVirtualize(II)Z" since="21"/>
+		<method name="forceVirtualizationMode(I)Z" since="21"/>
+		<method name="getProperties()Landroid/media/audiofx/Virtualizer$Settings;"/>
+		<method name="getRoundedStrength()S"/>
+		<method name="getSpeakerAngles(II[I)Z" since="21"/>
+		<method name="getStrengthSupported()Z"/>
+		<method name="getVirtualizationMode()I" since="21"/>
+		<method name="setParameterListener(Landroid/media/audiofx/Virtualizer$OnParameterChangeListener;)V"/>
+		<method name="setProperties(Landroid/media/audiofx/Virtualizer$Settings;)V"/>
+		<method name="setStrength(S)V"/>
+		<field name="PARAM_STRENGTH"/>
+		<field name="PARAM_STRENGTH_SUPPORTED"/>
+		<field name="VIRTUALIZATION_MODE_AUTO" since="21"/>
+		<field name="VIRTUALIZATION_MODE_BINAURAL" since="21"/>
+		<field name="VIRTUALIZATION_MODE_OFF" since="21"/>
+		<field name="VIRTUALIZATION_MODE_TRANSAURAL" since="21"/>
+	</class>
+	<class name="android/media/audiofx/Virtualizer$OnParameterChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onParameterChange(Landroid/media/audiofx/Virtualizer;IIS)V"/>
+	</class>
+	<class name="android/media/audiofx/Virtualizer$Settings" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="strength"/>
+	</class>
+	<class name="android/media/audiofx/Visualizer" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getCaptureSize()I"/>
+		<method name="getCaptureSizeRange()[I"/>
+		<method name="getEnabled()Z"/>
+		<method name="getFft([B)I"/>
+		<method name="getMaxCaptureRate()I"/>
+		<method name="getMeasurementMode()I" since="19"/>
+		<method name="getMeasurementPeakRms(Landroid/media/audiofx/Visualizer$MeasurementPeakRms;)I" since="19"/>
+		<method name="getSamplingRate()I"/>
+		<method name="getScalingMode()I" since="16"/>
+		<method name="getWaveForm([B)I"/>
+		<method name="release()V"/>
+		<method name="setCaptureSize(I)I"/>
+		<method name="setDataCaptureListener(Landroid/media/audiofx/Visualizer$OnDataCaptureListener;IZZ)I"/>
+		<method name="setEnabled(Z)I"/>
+		<method name="setMeasurementMode(I)I" since="19"/>
+		<method name="setScalingMode(I)I" since="16"/>
+		<field name="ALREADY_EXISTS"/>
+		<field name="ERROR"/>
+		<field name="ERROR_BAD_VALUE"/>
+		<field name="ERROR_DEAD_OBJECT"/>
+		<field name="ERROR_INVALID_OPERATION"/>
+		<field name="ERROR_NO_INIT"/>
+		<field name="ERROR_NO_MEMORY"/>
+		<field name="MEASUREMENT_MODE_NONE" since="19"/>
+		<field name="MEASUREMENT_MODE_PEAK_RMS" since="19"/>
+		<field name="SCALING_MODE_AS_PLAYED" since="16"/>
+		<field name="SCALING_MODE_NORMALIZED" since="16"/>
+		<field name="STATE_ENABLED"/>
+		<field name="STATE_INITIALIZED"/>
+		<field name="STATE_UNINITIALIZED"/>
+		<field name="SUCCESS"/>
+	</class>
+	<class name="android/media/audiofx/Visualizer$MeasurementPeakRms" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="mPeak"/>
+		<field name="mRms"/>
+	</class>
+	<class name="android/media/audiofx/Visualizer$OnDataCaptureListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onFftDataCapture(Landroid/media/audiofx/Visualizer;[BI)V"/>
+		<method name="onWaveFormDataCapture(Landroid/media/audiofx/Visualizer;[BI)V"/>
+	</class>
+	<class name="android/media/browse/MediaBrowser" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;Landroid/media/browse/MediaBrowser$ConnectionCallback;Landroid/os/Bundle;)V"/>
+		<method name="connect()V"/>
+		<method name="disconnect()V"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getItem(Ljava/lang/String;Landroid/media/browse/MediaBrowser$ItemCallback;)V" since="23"/>
+		<method name="getRoot()Ljava/lang/String;"/>
+		<method name="getServiceComponent()Landroid/content/ComponentName;"/>
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
+		<method name="isConnected()Z"/>
+		<method name="subscribe(Ljava/lang/String;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V"/>
+		<method name="subscribe(Ljava/lang/String;Landroid/os/Bundle;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V" since="24"/>
+		<method name="unsubscribe(Ljava/lang/String;)V"/>
+		<method name="unsubscribe(Ljava/lang/String;Landroid/media/browse/MediaBrowser$SubscriptionCallback;)V" since="24"/>
+		<field name="EXTRA_PAGE" since="24"/>
+		<field name="EXTRA_PAGE_SIZE" since="24"/>
+	</class>
+	<class name="android/media/browse/MediaBrowser$ConnectionCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onConnected()V"/>
+		<method name="onConnectionFailed()V"/>
+		<method name="onConnectionSuspended()V"/>
+	</class>
+	<class name="android/media/browse/MediaBrowser$ItemCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onError(Ljava/lang/String;)V"/>
+		<method name="onItemLoaded(Landroid/media/browse/MediaBrowser$MediaItem;)V"/>
+	</class>
+	<class name="android/media/browse/MediaBrowser$MediaItem" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/media/MediaDescription;I)V"/>
+		<method name="getDescription()Landroid/media/MediaDescription;"/>
+		<method name="getFlags()I"/>
+		<method name="getMediaId()Ljava/lang/String;"/>
+		<method name="isBrowsable()Z"/>
+		<method name="isPlayable()Z"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_BROWSABLE"/>
+		<field name="FLAG_PLAYABLE"/>
+	</class>
+	<class name="android/media/browse/MediaBrowser$SubscriptionCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onChildrenLoaded(Ljava/lang/String;Ljava/util/List;)V"/>
+		<method name="onChildrenLoaded(Ljava/lang/String;Ljava/util/List;Landroid/os/Bundle;)V" since="24"/>
+		<method name="onError(Ljava/lang/String;)V"/>
+		<method name="onError(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+	</class>
+	<class name="android/media/effect/Effect" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="apply(IIII)V"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="release()V"/>
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setUpdateListener(Landroid/media/effect/EffectUpdateListener;)V"/>
+	</class>
+	<class name="android/media/effect/EffectContext" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="createWithCurrentGlContext()Landroid/media/effect/EffectContext;"/>
+		<method name="getFactory()Landroid/media/effect/EffectFactory;"/>
+		<method name="release()V"/>
+	</class>
+	<class name="android/media/effect/EffectFactory" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="createEffect(Ljava/lang/String;)Landroid/media/effect/Effect;"/>
+		<method name="isEffectSupported(Ljava/lang/String;)Z"/>
+		<field name="EFFECT_AUTOFIX"/>
+		<field name="EFFECT_BACKDROPPER"/>
+		<field name="EFFECT_BITMAPOVERLAY"/>
+		<field name="EFFECT_BLACKWHITE"/>
+		<field name="EFFECT_BRIGHTNESS"/>
+		<field name="EFFECT_CONTRAST"/>
+		<field name="EFFECT_CROP"/>
+		<field name="EFFECT_CROSSPROCESS"/>
+		<field name="EFFECT_DOCUMENTARY"/>
+		<field name="EFFECT_DUOTONE"/>
+		<field name="EFFECT_FILLLIGHT"/>
+		<field name="EFFECT_FISHEYE"/>
+		<field name="EFFECT_FLIP"/>
+		<field name="EFFECT_GRAIN"/>
+		<field name="EFFECT_GRAYSCALE"/>
+		<field name="EFFECT_LOMOISH"/>
+		<field name="EFFECT_NEGATIVE"/>
+		<field name="EFFECT_POSTERIZE"/>
+		<field name="EFFECT_REDEYE"/>
+		<field name="EFFECT_ROTATE"/>
+		<field name="EFFECT_SATURATE"/>
+		<field name="EFFECT_SEPIA"/>
+		<field name="EFFECT_SHARPEN"/>
+		<field name="EFFECT_STRAIGHTEN"/>
+		<field name="EFFECT_TEMPERATURE"/>
+		<field name="EFFECT_TINT"/>
+		<field name="EFFECT_VIGNETTE"/>
+	</class>
+	<class name="android/media/effect/EffectUpdateListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onEffectUpdated(Landroid/media/effect/Effect;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/media/metrics/Event" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getMetricsBundle()Landroid/os/Bundle;"/>
+		<method name="getTimeSinceCreatedMillis()J"/>
+	</class>
+	<class name="android/media/metrics/LogSessionId" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getStringId()Ljava/lang/String;"/>
+		<field name="LOG_SESSION_ID_NONE"/>
+	</class>
+	<class name="android/media/metrics/MediaMetricsManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="createPlaybackSession()Landroid/media/metrics/PlaybackSession;"/>
+		<method name="createRecordingSession()Landroid/media/metrics/RecordingSession;"/>
+		<field name="INVALID_TIMESTAMP"/>
+	</class>
+	<class name="android/media/metrics/NetworkEvent" since="31">
+		<extends name="android/media/metrics/Event"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getNetworkType()I"/>
+		<field name="CREATOR"/>
+		<field name="NETWORK_TYPE_2G"/>
+		<field name="NETWORK_TYPE_3G"/>
+		<field name="NETWORK_TYPE_4G"/>
+		<field name="NETWORK_TYPE_5G_NSA"/>
+		<field name="NETWORK_TYPE_5G_SA"/>
+		<field name="NETWORK_TYPE_ETHERNET"/>
+		<field name="NETWORK_TYPE_OFFLINE"/>
+		<field name="NETWORK_TYPE_OTHER"/>
+		<field name="NETWORK_TYPE_UNKNOWN"/>
+		<field name="NETWORK_TYPE_WIFI"/>
+	</class>
+	<class name="android/media/metrics/NetworkEvent$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/media/metrics/NetworkEvent;"/>
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/NetworkEvent$Builder;"/>
+		<method name="setNetworkType(I)Landroid/media/metrics/NetworkEvent$Builder;"/>
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/NetworkEvent$Builder;"/>
+	</class>
+	<class name="android/media/metrics/PlaybackErrorEvent" since="31">
+		<extends name="android/media/metrics/Event"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getErrorCode()I"/>
+		<method name="getSubErrorCode()I"/>
+		<field name="CREATOR"/>
+		<field name="ERROR_AUDIO_TRACK_INIT_FAILED"/>
+		<field name="ERROR_AUDIO_TRACK_OTHER"/>
+		<field name="ERROR_AUDIO_TRACK_WRITE_FAILED"/>
+		<field name="ERROR_DECODER_INIT_FAILED"/>
+		<field name="ERROR_DECODING_FAILED"/>
+		<field name="ERROR_DECODING_FORMAT_EXCEEDS_CAPABILITIES"/>
+		<field name="ERROR_DECODING_FORMAT_UNSUPPORTED"/>
+		<field name="ERROR_DECODING_OTHER"/>
+		<field name="ERROR_DRM_CONTENT_ERROR"/>
+		<field name="ERROR_DRM_DEVICE_REVOKED"/>
+		<field name="ERROR_DRM_DISALLOWED_OPERATION"/>
+		<field name="ERROR_DRM_LICENSE_ACQUISITION_FAILED"/>
+		<field name="ERROR_DRM_OTHER"/>
+		<field name="ERROR_DRM_PROVISIONING_FAILED"/>
+		<field name="ERROR_DRM_SCHEME_UNSUPPORTED"/>
+		<field name="ERROR_DRM_SYSTEM_ERROR"/>
+		<field name="ERROR_IO_BAD_HTTP_STATUS"/>
+		<field name="ERROR_IO_CONNECTION_CLOSED"/>
+		<field name="ERROR_IO_CONNECTION_TIMEOUT"/>
+		<field name="ERROR_IO_DNS_FAILED"/>
+		<field name="ERROR_IO_FILE_NOT_FOUND"/>
+		<field name="ERROR_IO_NETWORK_CONNECTION_FAILED"/>
+		<field name="ERROR_IO_NETWORK_UNAVAILABLE"/>
+		<field name="ERROR_IO_NO_PERMISSION"/>
+		<field name="ERROR_IO_OTHER"/>
+		<field name="ERROR_OTHER"/>
+		<field name="ERROR_PARSING_CONTAINER_MALFORMED"/>
+		<field name="ERROR_PARSING_CONTAINER_UNSUPPORTED"/>
+		<field name="ERROR_PARSING_MANIFEST_MALFORMED"/>
+		<field name="ERROR_PARSING_MANIFEST_UNSUPPORTED"/>
+		<field name="ERROR_PARSING_OTHER"/>
+		<field name="ERROR_PLAYER_BEHIND_LIVE_WINDOW"/>
+		<field name="ERROR_PLAYER_OTHER"/>
+		<field name="ERROR_PLAYER_REMOTE"/>
+		<field name="ERROR_RUNTIME"/>
+		<field name="ERROR_UNKNOWN"/>
+	</class>
+	<class name="android/media/metrics/PlaybackErrorEvent$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/media/metrics/PlaybackErrorEvent;"/>
+		<method name="setErrorCode(I)Landroid/media/metrics/PlaybackErrorEvent$Builder;"/>
+		<method name="setException(Ljava/lang/Exception;)Landroid/media/metrics/PlaybackErrorEvent$Builder;"/>
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/PlaybackErrorEvent$Builder;"/>
+		<method name="setSubErrorCode(I)Landroid/media/metrics/PlaybackErrorEvent$Builder;"/>
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/PlaybackErrorEvent$Builder;"/>
+	</class>
+	<class name="android/media/metrics/PlaybackMetrics" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAudioUnderrunCount()I"/>
+		<method name="getContentType()I"/>
+		<method name="getDrmSessionId()[B"/>
+		<method name="getDrmType()I"/>
+		<method name="getExperimentIds()[J"/>
+		<method name="getLocalBytesRead()J"/>
+		<method name="getMediaDurationMillis()J"/>
+		<method name="getMetricsBundle()Landroid/os/Bundle;"/>
+		<method name="getNetworkBytesRead()J"/>
+		<method name="getNetworkTransferDurationMillis()J"/>
+		<method name="getPlaybackType()I"/>
+		<method name="getPlayerName()Ljava/lang/String;"/>
+		<method name="getPlayerVersion()Ljava/lang/String;"/>
+		<method name="getStreamSource()I"/>
+		<method name="getStreamType()I"/>
+		<method name="getVideoFramesDropped()I"/>
+		<method name="getVideoFramesPlayed()I"/>
+		<field name="CONTENT_TYPE_AD"/>
+		<field name="CONTENT_TYPE_MAIN"/>
+		<field name="CONTENT_TYPE_OTHER"/>
+		<field name="CONTENT_TYPE_UNKNOWN"/>
+		<field name="CREATOR"/>
+		<field name="DRM_TYPE_CLEARKEY"/>
+		<field name="DRM_TYPE_NONE"/>
+		<field name="DRM_TYPE_OTHER"/>
+		<field name="DRM_TYPE_PLAY_READY"/>
+		<field name="DRM_TYPE_WIDEVINE_L1"/>
+		<field name="DRM_TYPE_WIDEVINE_L3"/>
+		<field name="DRM_TYPE_WV_L3_FALLBACK"/>
+		<field name="PLAYBACK_TYPE_LIVE"/>
+		<field name="PLAYBACK_TYPE_OTHER"/>
+		<field name="PLAYBACK_TYPE_UNKNOWN"/>
+		<field name="PLAYBACK_TYPE_VOD"/>
+		<field name="STREAM_SOURCE_DEVICE"/>
+		<field name="STREAM_SOURCE_MIXED"/>
+		<field name="STREAM_SOURCE_NETWORK"/>
+		<field name="STREAM_SOURCE_UNKNOWN"/>
+		<field name="STREAM_TYPE_DASH"/>
+		<field name="STREAM_TYPE_HLS"/>
+		<field name="STREAM_TYPE_OTHER"/>
+		<field name="STREAM_TYPE_PROGRESSIVE"/>
+		<field name="STREAM_TYPE_SS"/>
+		<field name="STREAM_TYPE_UNKNOWN"/>
+	</class>
+	<class name="android/media/metrics/PlaybackMetrics$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addExperimentId(J)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="build()Landroid/media/metrics/PlaybackMetrics;"/>
+		<method name="setAudioUnderrunCount(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setContentType(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setDrmSessionId([B)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setDrmType(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setLocalBytesRead(J)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setMediaDurationMillis(J)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setNetworkBytesRead(J)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setNetworkTransferDurationMillis(J)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setPlaybackType(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setPlayerName(Ljava/lang/String;)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setPlayerVersion(Ljava/lang/String;)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setStreamSource(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setStreamType(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setVideoFramesDropped(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+		<method name="setVideoFramesPlayed(I)Landroid/media/metrics/PlaybackMetrics$Builder;"/>
+	</class>
+	<class name="android/media/metrics/PlaybackSession" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getSessionId()Landroid/media/metrics/LogSessionId;"/>
+		<method name="reportNetworkEvent(Landroid/media/metrics/NetworkEvent;)V"/>
+		<method name="reportPlaybackErrorEvent(Landroid/media/metrics/PlaybackErrorEvent;)V"/>
+		<method name="reportPlaybackMetrics(Landroid/media/metrics/PlaybackMetrics;)V"/>
+		<method name="reportPlaybackStateEvent(Landroid/media/metrics/PlaybackStateEvent;)V"/>
+		<method name="reportTrackChangeEvent(Landroid/media/metrics/TrackChangeEvent;)V"/>
+	</class>
+	<class name="android/media/metrics/PlaybackStateEvent" since="31">
+		<extends name="android/media/metrics/Event"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getState()I"/>
+		<field name="CREATOR"/>
+		<field name="STATE_ABANDONED"/>
+		<field name="STATE_BUFFERING"/>
+		<field name="STATE_ENDED"/>
+		<field name="STATE_FAILED"/>
+		<field name="STATE_INTERRUPTED_BY_AD"/>
+		<field name="STATE_JOINING_BACKGROUND"/>
+		<field name="STATE_JOINING_FOREGROUND"/>
+		<field name="STATE_NOT_STARTED"/>
+		<field name="STATE_PAUSED"/>
+		<field name="STATE_PAUSED_BUFFERING"/>
+		<field name="STATE_PLAYING"/>
+		<field name="STATE_SEEKING"/>
+		<field name="STATE_STOPPED"/>
+		<field name="STATE_SUPPRESSED"/>
+		<field name="STATE_SUPPRESSED_BUFFERING"/>
+	</class>
+	<class name="android/media/metrics/PlaybackStateEvent$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/media/metrics/PlaybackStateEvent;"/>
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/PlaybackStateEvent$Builder;"/>
+		<method name="setState(I)Landroid/media/metrics/PlaybackStateEvent$Builder;"/>
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/PlaybackStateEvent$Builder;"/>
+	</class>
+	<class name="android/media/metrics/RecordingSession" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getSessionId()Landroid/media/metrics/LogSessionId;"/>
+	</class>
+	<class name="android/media/metrics/TrackChangeEvent" since="31">
+		<extends name="android/media/metrics/Event"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAudioSampleRate()I"/>
+		<method name="getBitrate()I"/>
+		<method name="getChannelCount()I"/>
+		<method name="getCodecName()Ljava/lang/String;"/>
+		<method name="getContainerMimeType()Ljava/lang/String;"/>
+		<method name="getHeight()I"/>
+		<method name="getLanguage()Ljava/lang/String;"/>
+		<method name="getLanguageRegion()Ljava/lang/String;"/>
+		<method name="getSampleMimeType()Ljava/lang/String;"/>
+		<method name="getTrackChangeReason()I"/>
+		<method name="getTrackState()I"/>
+		<method name="getTrackType()I"/>
+		<method name="getVideoFrameRate()F"/>
+		<method name="getWidth()I"/>
+		<field name="CREATOR"/>
+		<field name="TRACK_CHANGE_REASON_ADAPTIVE"/>
+		<field name="TRACK_CHANGE_REASON_INITIAL"/>
+		<field name="TRACK_CHANGE_REASON_MANUAL"/>
+		<field name="TRACK_CHANGE_REASON_OTHER"/>
+		<field name="TRACK_CHANGE_REASON_UNKNOWN"/>
+		<field name="TRACK_STATE_OFF"/>
+		<field name="TRACK_STATE_ON"/>
+		<field name="TRACK_TYPE_AUDIO"/>
+		<field name="TRACK_TYPE_TEXT"/>
+		<field name="TRACK_TYPE_VIDEO"/>
+	</class>
+	<class name="android/media/metrics/TrackChangeEvent$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/media/metrics/TrackChangeEvent;"/>
+		<method name="setAudioSampleRate(I)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setBitrate(I)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setChannelCount(I)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setCodecName(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setContainerMimeType(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setHeight(I)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setLanguage(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setLanguageRegion(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setMetricsBundle(Landroid/os/Bundle;)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setSampleMimeType(Ljava/lang/String;)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setTimeSinceCreatedMillis(J)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setTrackChangeReason(I)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setTrackState(I)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setVideoFrameRate(F)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+		<method name="setWidth(I)Landroid/media/metrics/TrackChangeEvent$Builder;"/>
+	</class>
+	<class name="android/media/midi/MidiDevice" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="connectPorts(Landroid/media/midi/MidiInputPort;I)Landroid/media/midi/MidiDevice$MidiConnection;"/>
+		<method name="getInfo()Landroid/media/midi/MidiDeviceInfo;"/>
+		<method name="openInputPort(I)Landroid/media/midi/MidiInputPort;"/>
+		<method name="openOutputPort(I)Landroid/media/midi/MidiOutputPort;"/>
+	</class>
+	<class name="android/media/midi/MidiDevice$MidiConnection" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+	</class>
+	<class name="android/media/midi/MidiDeviceInfo" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getId()I"/>
+		<method name="getInputPortCount()I"/>
+		<method name="getOutputPortCount()I"/>
+		<method name="getPorts()[Landroid/media/midi/MidiDeviceInfo$PortInfo;"/>
+		<method name="getProperties()Landroid/os/Bundle;"/>
+		<method name="getType()I"/>
+		<method name="isPrivate()Z"/>
+		<field name="CREATOR"/>
+		<field name="PROPERTY_BLUETOOTH_DEVICE"/>
+		<field name="PROPERTY_MANUFACTURER"/>
+		<field name="PROPERTY_NAME"/>
+		<field name="PROPERTY_PRODUCT"/>
+		<field name="PROPERTY_SERIAL_NUMBER"/>
+		<field name="PROPERTY_USB_DEVICE"/>
+		<field name="PROPERTY_VERSION"/>
+		<field name="TYPE_BLUETOOTH"/>
+		<field name="TYPE_USB"/>
+		<field name="TYPE_VIRTUAL"/>
+	</class>
+	<class name="android/media/midi/MidiDeviceInfo$PortInfo" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPortNumber()I"/>
+		<method name="getType()I"/>
+		<field name="TYPE_INPUT"/>
+		<field name="TYPE_OUTPUT"/>
+	</class>
+	<class name="android/media/midi/MidiDeviceService" since="23">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDeviceInfo()Landroid/media/midi/MidiDeviceInfo;"/>
+		<method name="getOutputPortReceivers()[Landroid/media/midi/MidiReceiver;"/>
+		<method name="onClose()V"/>
+		<method name="onDeviceStatusChanged(Landroid/media/midi/MidiDeviceStatus;)V"/>
+		<method name="onGetInputPortReceivers()[Landroid/media/midi/MidiReceiver;"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/media/midi/MidiDeviceStatus" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDeviceInfo()Landroid/media/midi/MidiDeviceInfo;"/>
+		<method name="getOutputPortOpenCount(I)I"/>
+		<method name="isInputPortOpen(I)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/midi/MidiInputPort" since="23">
+		<extends name="android/media/midi/MidiReceiver"/>
+		<implements name="java/io/Closeable"/>
+		<method name="getPortNumber()I"/>
+	</class>
+	<class name="android/media/midi/MidiManager" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getDevices()[Landroid/media/midi/MidiDeviceInfo;"/>
+		<method name="openBluetoothDevice(Landroid/bluetooth/BluetoothDevice;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V"/>
+		<method name="openDevice(Landroid/media/midi/MidiDeviceInfo;Landroid/media/midi/MidiManager$OnDeviceOpenedListener;Landroid/os/Handler;)V"/>
+		<method name="registerDeviceCallback(Landroid/media/midi/MidiManager$DeviceCallback;Landroid/os/Handler;)V"/>
+		<method name="unregisterDeviceCallback(Landroid/media/midi/MidiManager$DeviceCallback;)V"/>
+	</class>
+	<class name="android/media/midi/MidiManager$DeviceCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDeviceAdded(Landroid/media/midi/MidiDeviceInfo;)V"/>
+		<method name="onDeviceRemoved(Landroid/media/midi/MidiDeviceInfo;)V"/>
+		<method name="onDeviceStatusChanged(Landroid/media/midi/MidiDeviceStatus;)V"/>
+	</class>
+	<class name="android/media/midi/MidiManager$OnDeviceOpenedListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onDeviceOpened(Landroid/media/midi/MidiDevice;)V"/>
+	</class>
+	<class name="android/media/midi/MidiOutputPort" since="23">
+		<extends name="android/media/midi/MidiSender"/>
+		<implements name="java/io/Closeable"/>
+		<method name="getPortNumber()I"/>
+	</class>
+	<class name="android/media/midi/MidiReceiver" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="flush()V"/>
+		<method name="getMaxMessageSize()I"/>
+		<method name="onFlush()V"/>
+		<method name="onSend([BIIJ)V"/>
+		<method name="send([BII)V"/>
+		<method name="send([BIIJ)V"/>
+	</class>
+	<class name="android/media/midi/MidiSender" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="connect(Landroid/media/midi/MidiReceiver;)V"/>
+		<method name="disconnect(Landroid/media/midi/MidiReceiver;)V"/>
+		<method name="onConnect(Landroid/media/midi/MidiReceiver;)V"/>
+		<method name="onDisconnect(Landroid/media/midi/MidiReceiver;)V"/>
+	</class>
+	<class name="android/media/projection/MediaProjection" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="createVirtualDisplay(Ljava/lang/String;IIIILandroid/view/Surface;Landroid/hardware/display/VirtualDisplay$Callback;Landroid/os/Handler;)Landroid/hardware/display/VirtualDisplay;"/>
+		<method name="registerCallback(Landroid/media/projection/MediaProjection$Callback;Landroid/os/Handler;)V"/>
+		<method name="stop()V"/>
+		<method name="unregisterCallback(Landroid/media/projection/MediaProjection$Callback;)V"/>
+	</class>
+	<class name="android/media/projection/MediaProjection$Callback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onStop()V"/>
+	</class>
+	<class name="android/media/projection/MediaProjectionManager" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="createScreenCaptureIntent()Landroid/content/Intent;"/>
+		<method name="getMediaProjection(ILandroid/content/Intent;)Landroid/media/projection/MediaProjection;"/>
+	</class>
+	<class name="android/media/session/MediaController" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/media/session/MediaSession$Token;)V"/>
+		<method name="adjustVolume(II)V"/>
+		<method name="dispatchMediaButtonEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getFlags()J"/>
+		<method name="getMetadata()Landroid/media/MediaMetadata;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getPlaybackInfo()Landroid/media/session/MediaController$PlaybackInfo;"/>
+		<method name="getPlaybackState()Landroid/media/session/PlaybackState;"/>
+		<method name="getQueue()Ljava/util/List;"/>
+		<method name="getQueueTitle()Ljava/lang/CharSequence;"/>
+		<method name="getRatingType()I"/>
+		<method name="getSessionActivity()Landroid/app/PendingIntent;"/>
+		<method name="getSessionInfo()Landroid/os/Bundle;" since="29"/>
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
+		<method name="getTag()Ljava/lang/String;" since="30"/>
+		<method name="getTransportControls()Landroid/media/session/MediaController$TransportControls;"/>
+		<method name="registerCallback(Landroid/media/session/MediaController$Callback;)V"/>
+		<method name="registerCallback(Landroid/media/session/MediaController$Callback;Landroid/os/Handler;)V"/>
+		<method name="sendCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V"/>
+		<method name="setVolumeTo(II)V"/>
+		<method name="unregisterCallback(Landroid/media/session/MediaController$Callback;)V"/>
+	</class>
+	<class name="android/media/session/MediaController$Callback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAudioInfoChanged(Landroid/media/session/MediaController$PlaybackInfo;)V"/>
+		<method name="onExtrasChanged(Landroid/os/Bundle;)V"/>
+		<method name="onMetadataChanged(Landroid/media/MediaMetadata;)V"/>
+		<method name="onPlaybackStateChanged(Landroid/media/session/PlaybackState;)V"/>
+		<method name="onQueueChanged(Ljava/util/List;)V"/>
+		<method name="onQueueTitleChanged(Ljava/lang/CharSequence;)V"/>
+		<method name="onSessionDestroyed()V"/>
+		<method name="onSessionEvent(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/media/session/MediaController$PlaybackInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="29"/>
+		<method name="getAudioAttributes()Landroid/media/AudioAttributes;"/>
+		<method name="getCurrentVolume()I"/>
+		<method name="getMaxVolume()I"/>
+		<method name="getPlaybackType()I"/>
+		<method name="getVolumeControl()I"/>
+		<method name="getVolumeControlId()Ljava/lang/String;" since="30"/>
+		<field name="CREATOR" since="29"/>
+		<field name="PLAYBACK_TYPE_LOCAL"/>
+		<field name="PLAYBACK_TYPE_REMOTE"/>
+	</class>
+	<class name="android/media/session/MediaController$TransportControls" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="fastForward()V"/>
+		<method name="pause()V"/>
+		<method name="play()V"/>
+		<method name="playFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="playFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="playFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23"/>
+		<method name="prepare()V" since="24"/>
+		<method name="prepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+		<method name="prepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+		<method name="prepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="24"/>
+		<method name="rewind()V"/>
+		<method name="seekTo(J)V"/>
+		<method name="sendCustomAction(Landroid/media/session/PlaybackState$CustomAction;Landroid/os/Bundle;)V"/>
+		<method name="sendCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="setPlaybackSpeed(F)V" since="29"/>
+		<method name="setRating(Landroid/media/Rating;)V"/>
+		<method name="skipToNext()V"/>
+		<method name="skipToPrevious()V"/>
+		<method name="skipToQueueItem(J)V"/>
+		<method name="stop()V"/>
+	</class>
+	<class name="android/media/session/MediaSession" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)V" since="29"/>
+		<method name="getController()Landroid/media/session/MediaController;"/>
+		<method name="getCurrentControllerInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;" since="28"/>
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
+		<method name="isActive()Z"/>
+		<method name="release()V"/>
+		<method name="sendSessionEvent(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="setActive(Z)V"/>
+		<method name="setCallback(Landroid/media/session/MediaSession$Callback;)V"/>
+		<method name="setCallback(Landroid/media/session/MediaSession$Callback;Landroid/os/Handler;)V"/>
+		<method name="setExtras(Landroid/os/Bundle;)V"/>
+		<method name="setFlags(I)V"/>
+		<method name="setMediaButtonBroadcastReceiver(Landroid/content/ComponentName;)V" since="31"/>
+		<method name="setMediaButtonReceiver(Landroid/app/PendingIntent;)V" deprecated="31"/>
+		<method name="setMetadata(Landroid/media/MediaMetadata;)V"/>
+		<method name="setPlaybackState(Landroid/media/session/PlaybackState;)V"/>
+		<method name="setPlaybackToLocal(Landroid/media/AudioAttributes;)V"/>
+		<method name="setPlaybackToRemote(Landroid/media/VolumeProvider;)V"/>
+		<method name="setQueue(Ljava/util/List;)V"/>
+		<method name="setQueueTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setRatingType(I)V" since="22"/>
+		<method name="setSessionActivity(Landroid/app/PendingIntent;)V"/>
+		<field name="FLAG_HANDLES_MEDIA_BUTTONS" deprecated="26"/>
+		<field name="FLAG_HANDLES_TRANSPORT_CONTROLS" deprecated="26"/>
+	</class>
+	<class name="android/media/session/MediaSession$Callback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCommand(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/ResultReceiver;)V"/>
+		<method name="onCustomAction(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="onFastForward()V"/>
+		<method name="onMediaButtonEvent(Landroid/content/Intent;)Z"/>
+		<method name="onPause()V"/>
+		<method name="onPlay()V"/>
+		<method name="onPlayFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="onPlayFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="onPlayFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23"/>
+		<method name="onPrepare()V" since="24"/>
+		<method name="onPrepareFromMediaId(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+		<method name="onPrepareFromSearch(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+		<method name="onPrepareFromUri(Landroid/net/Uri;Landroid/os/Bundle;)V" since="24"/>
+		<method name="onRewind()V"/>
+		<method name="onSeekTo(J)V"/>
+		<method name="onSetPlaybackSpeed(F)V" since="29"/>
+		<method name="onSetRating(Landroid/media/Rating;)V"/>
+		<method name="onSkipToNext()V"/>
+		<method name="onSkipToPrevious()V"/>
+		<method name="onSkipToQueueItem(J)V"/>
+		<method name="onStop()V"/>
+	</class>
+	<class name="android/media/session/MediaSession$QueueItem" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/media/MediaDescription;J)V"/>
+		<method name="getDescription()Landroid/media/MediaDescription;"/>
+		<method name="getQueueId()J"/>
+		<field name="CREATOR"/>
+		<field name="UNKNOWN_ID"/>
+	</class>
+	<class name="android/media/session/MediaSession$Token" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/session/MediaSessionManager" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;)V"/>
+		<method name="addOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;Landroid/content/ComponentName;Landroid/os/Handler;)V"/>
+		<method name="addOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;)V" since="29"/>
+		<method name="addOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;Landroid/os/Handler;)V" since="29"/>
+		<method name="getActiveSessions(Landroid/content/ComponentName;)Ljava/util/List;"/>
+		<method name="getSession2Tokens()Ljava/util/List;" since="29"/>
+		<method name="isTrustedForMediaControl(Landroid/media/session/MediaSessionManager$RemoteUserInfo;)Z" since="28"/>
+		<method name="notifySession2Created(Landroid/media/Session2Token;)V" since="29" deprecated="31"/>
+		<method name="removeOnActiveSessionsChangedListener(Landroid/media/session/MediaSessionManager$OnActiveSessionsChangedListener;)V"/>
+		<method name="removeOnSession2TokensChangedListener(Landroid/media/session/MediaSessionManager$OnSession2TokensChangedListener;)V" since="29"/>
+	</class>
+	<class name="android/media/session/MediaSessionManager$OnActiveSessionsChangedListener" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="onActiveSessionsChanged(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/media/session/MediaSessionManager$OnSession2TokensChangedListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onSession2TokensChanged(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/media/session/MediaSessionManager$RemoteUserInfo" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;II)V"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getPid()I"/>
+		<method name="getUid()I"/>
+	</class>
+	<class name="android/media/session/PlaybackState" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getActions()J"/>
+		<method name="getActiveQueueItemId()J"/>
+		<method name="getBufferedPosition()J"/>
+		<method name="getCustomActions()Ljava/util/List;"/>
+		<method name="getErrorMessage()Ljava/lang/CharSequence;"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="22"/>
+		<method name="getLastPositionUpdateTime()J"/>
+		<method name="getPlaybackSpeed()F"/>
+		<method name="getPosition()J"/>
+		<method name="getState()I"/>
+		<method name="isActive()Z" since="31"/>
+		<field name="ACTION_FAST_FORWARD"/>
+		<field name="ACTION_PAUSE"/>
+		<field name="ACTION_PLAY"/>
+		<field name="ACTION_PLAY_FROM_MEDIA_ID"/>
+		<field name="ACTION_PLAY_FROM_SEARCH"/>
+		<field name="ACTION_PLAY_FROM_URI" since="23"/>
+		<field name="ACTION_PLAY_PAUSE"/>
+		<field name="ACTION_PREPARE" since="24"/>
+		<field name="ACTION_PREPARE_FROM_MEDIA_ID" since="24"/>
+		<field name="ACTION_PREPARE_FROM_SEARCH" since="24"/>
+		<field name="ACTION_PREPARE_FROM_URI" since="24"/>
+		<field name="ACTION_REWIND"/>
+		<field name="ACTION_SEEK_TO"/>
+		<field name="ACTION_SET_PLAYBACK_SPEED" since="31"/>
+		<field name="ACTION_SET_RATING"/>
+		<field name="ACTION_SKIP_TO_NEXT"/>
+		<field name="ACTION_SKIP_TO_PREVIOUS"/>
+		<field name="ACTION_SKIP_TO_QUEUE_ITEM"/>
+		<field name="ACTION_STOP"/>
+		<field name="CREATOR"/>
+		<field name="PLAYBACK_POSITION_UNKNOWN"/>
+		<field name="STATE_BUFFERING"/>
+		<field name="STATE_CONNECTING"/>
+		<field name="STATE_ERROR"/>
+		<field name="STATE_FAST_FORWARDING"/>
+		<field name="STATE_NONE"/>
+		<field name="STATE_PAUSED"/>
+		<field name="STATE_PLAYING"/>
+		<field name="STATE_REWINDING"/>
+		<field name="STATE_SKIPPING_TO_NEXT"/>
+		<field name="STATE_SKIPPING_TO_PREVIOUS"/>
+		<field name="STATE_SKIPPING_TO_QUEUE_ITEM"/>
+		<field name="STATE_STOPPED"/>
+	</class>
+	<class name="android/media/session/PlaybackState$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/media/session/PlaybackState;)V"/>
+		<method name="addCustomAction(Landroid/media/session/PlaybackState$CustomAction;)Landroid/media/session/PlaybackState$Builder;"/>
+		<method name="addCustomAction(Ljava/lang/String;Ljava/lang/String;I)Landroid/media/session/PlaybackState$Builder;"/>
+		<method name="build()Landroid/media/session/PlaybackState;"/>
+		<method name="setActions(J)Landroid/media/session/PlaybackState$Builder;"/>
+		<method name="setActiveQueueItemId(J)Landroid/media/session/PlaybackState$Builder;"/>
+		<method name="setBufferedPosition(J)Landroid/media/session/PlaybackState$Builder;"/>
+		<method name="setErrorMessage(Ljava/lang/CharSequence;)Landroid/media/session/PlaybackState$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/session/PlaybackState$Builder;" since="22"/>
+		<method name="setState(IJF)Landroid/media/session/PlaybackState$Builder;"/>
+		<method name="setState(IJFJ)Landroid/media/session/PlaybackState$Builder;"/>
+	</class>
+	<class name="android/media/session/PlaybackState$CustomAction" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAction()Ljava/lang/String;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getIcon()I"/>
+		<method name="getName()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/media/session/PlaybackState$CustomAction$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
+		<method name="build()Landroid/media/session/PlaybackState$CustomAction;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/session/PlaybackState$CustomAction$Builder;"/>
+	</class>
+	<class name="android/media/tv/TvContentRating" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="contains(Landroid/media/tv/TvContentRating;)Z" since="24"/>
+		<method name="createRating(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/media/tv/TvContentRating;"/>
+		<method name="flattenToString()Ljava/lang/String;"/>
+		<method name="getDomain()Ljava/lang/String;"/>
+		<method name="getMainRating()Ljava/lang/String;"/>
+		<method name="getRatingSystem()Ljava/lang/String;"/>
+		<method name="getSubRatings()Ljava/util/List;"/>
+		<method name="unflattenFromString(Ljava/lang/String;)Landroid/media/tv/TvContentRating;"/>
+		<field name="UNRATED" since="23"/>
+	</class>
+	<class name="android/media/tv/TvContract" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="buildChannelLogoUri(J)Landroid/net/Uri;"/>
+		<method name="buildChannelLogoUri(Landroid/net/Uri;)Landroid/net/Uri;"/>
+		<method name="buildChannelUri(J)Landroid/net/Uri;"/>
+		<method name="buildChannelUriForPassthroughInput(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildChannelsUriForInput(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildInputId(Landroid/content/ComponentName;)Ljava/lang/String;"/>
+		<method name="buildPreviewProgramUri(J)Landroid/net/Uri;" since="26"/>
+		<method name="buildPreviewProgramsUriForChannel(J)Landroid/net/Uri;" since="26"/>
+		<method name="buildPreviewProgramsUriForChannel(Landroid/net/Uri;)Landroid/net/Uri;" since="26"/>
+		<method name="buildProgramUri(J)Landroid/net/Uri;"/>
+		<method name="buildProgramsUriForChannel(J)Landroid/net/Uri;"/>
+		<method name="buildProgramsUriForChannel(JJJ)Landroid/net/Uri;"/>
+		<method name="buildProgramsUriForChannel(Landroid/net/Uri;)Landroid/net/Uri;"/>
+		<method name="buildProgramsUriForChannel(Landroid/net/Uri;JJ)Landroid/net/Uri;"/>
+		<method name="buildRecordedProgramUri(J)Landroid/net/Uri;" since="24"/>
+		<method name="buildWatchNextProgramUri(J)Landroid/net/Uri;" since="26"/>
+		<method name="isChannelUri(Landroid/net/Uri;)Z" since="24"/>
+		<method name="isChannelUriForPassthroughInput(Landroid/net/Uri;)Z" since="24"/>
+		<method name="isChannelUriForTunerInput(Landroid/net/Uri;)Z" since="24"/>
+		<method name="isProgramUri(Landroid/net/Uri;)Z" since="24"/>
+		<method name="isRecordedProgramUri(Landroid/net/Uri;)Z" since="27"/>
+		<method name="requestChannelBrowsable(Landroid/content/Context;J)V" since="26"/>
+		<field name="ACTION_INITIALIZE_PROGRAMS" since="26"/>
+		<field name="ACTION_PREVIEW_PROGRAM_ADDED_TO_WATCH_NEXT" since="26"/>
+		<field name="ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED" since="26"/>
+		<field name="ACTION_REQUEST_CHANNEL_BROWSABLE" since="26"/>
+		<field name="ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" since="26"/>
+		<field name="AUTHORITY"/>
+		<field name="EXTRA_CHANNEL_ID" since="26"/>
+		<field name="EXTRA_PREVIEW_PROGRAM_ID" since="26"/>
+		<field name="EXTRA_WATCH_NEXT_PROGRAM_ID" since="26"/>
+	</class>
+	<class name="android/media/tv/TvContract$BaseTvColumns" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="COLUMN_PACKAGE_NAME"/>
+	</class>
+	<class name="android/media/tv/TvContract$Channels" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
+		<method name="getVideoResolution(Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="COLUMN_APP_LINK_COLOR" since="23"/>
+		<field name="COLUMN_APP_LINK_ICON_URI" since="23"/>
+		<field name="COLUMN_APP_LINK_INTENT_URI" since="23"/>
+		<field name="COLUMN_APP_LINK_POSTER_ART_URI" since="23"/>
+		<field name="COLUMN_APP_LINK_TEXT" since="23"/>
+		<field name="COLUMN_BROADCAST_GENRE" since="31"/>
+		<field name="COLUMN_BROWSABLE" since="26"/>
+		<field name="COLUMN_CHANNEL_LIST_ID" since="31"/>
+		<field name="COLUMN_DESCRIPTION"/>
+		<field name="COLUMN_DISPLAY_NAME"/>
+		<field name="COLUMN_DISPLAY_NUMBER"/>
+		<field name="COLUMN_GLOBAL_CONTENT_ID" since="30"/>
+		<field name="COLUMN_INPUT_ID"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" since="23"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" since="23"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" since="23"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_ID" since="26"/>
+		<field name="COLUMN_LOCKED" since="26"/>
+		<field name="COLUMN_NETWORK_AFFILIATION"/>
+		<field name="COLUMN_ORIGINAL_NETWORK_ID"/>
+		<field name="COLUMN_REMOTE_CONTROL_KEY_PRESET_NUMBER" since="31"/>
+		<field name="COLUMN_SCRAMBLED" since="31"/>
+		<field name="COLUMN_SEARCHABLE"/>
+		<field name="COLUMN_SERVICE_ID"/>
+		<field name="COLUMN_SERVICE_TYPE"/>
+		<field name="COLUMN_TRANSIENT" since="26"/>
+		<field name="COLUMN_TRANSPORT_STREAM_ID"/>
+		<field name="COLUMN_TYPE"/>
+		<field name="COLUMN_VERSION_NUMBER"/>
+		<field name="COLUMN_VIDEO_FORMAT"/>
+		<field name="COLUMN_VIDEO_RESOLUTION" since="31"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="SERVICE_TYPE_AUDIO"/>
+		<field name="SERVICE_TYPE_AUDIO_VIDEO"/>
+		<field name="SERVICE_TYPE_OTHER"/>
+		<field name="TYPE_1SEG"/>
+		<field name="TYPE_ATSC3_T" since="30"/>
+		<field name="TYPE_ATSC_C"/>
+		<field name="TYPE_ATSC_M_H"/>
+		<field name="TYPE_ATSC_T"/>
+		<field name="TYPE_CMMB"/>
+		<field name="TYPE_DTMB"/>
+		<field name="TYPE_DVB_C"/>
+		<field name="TYPE_DVB_C2"/>
+		<field name="TYPE_DVB_H"/>
+		<field name="TYPE_DVB_S"/>
+		<field name="TYPE_DVB_S2"/>
+		<field name="TYPE_DVB_SH"/>
+		<field name="TYPE_DVB_T"/>
+		<field name="TYPE_DVB_T2"/>
+		<field name="TYPE_ISDB_C"/>
+		<field name="TYPE_ISDB_S"/>
+		<field name="TYPE_ISDB_S3" since="29"/>
+		<field name="TYPE_ISDB_T"/>
+		<field name="TYPE_ISDB_TB"/>
+		<field name="TYPE_NTSC"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_PAL"/>
+		<field name="TYPE_PREVIEW" since="26"/>
+		<field name="TYPE_SECAM"/>
+		<field name="TYPE_S_DMB"/>
+		<field name="TYPE_T_DMB"/>
+		<field name="VIDEO_FORMAT_1080I"/>
+		<field name="VIDEO_FORMAT_1080P"/>
+		<field name="VIDEO_FORMAT_2160P"/>
+		<field name="VIDEO_FORMAT_240P"/>
+		<field name="VIDEO_FORMAT_360P"/>
+		<field name="VIDEO_FORMAT_4320P"/>
+		<field name="VIDEO_FORMAT_480I"/>
+		<field name="VIDEO_FORMAT_480P"/>
+		<field name="VIDEO_FORMAT_576I"/>
+		<field name="VIDEO_FORMAT_576P"/>
+		<field name="VIDEO_FORMAT_720P"/>
+		<field name="VIDEO_RESOLUTION_ED"/>
+		<field name="VIDEO_RESOLUTION_FHD"/>
+		<field name="VIDEO_RESOLUTION_HD"/>
+		<field name="VIDEO_RESOLUTION_SD"/>
+		<field name="VIDEO_RESOLUTION_UHD"/>
+	</class>
+	<class name="android/media/tv/TvContract$Channels$Logo" since="21">
+		<extends name="java/lang/Object"/>
+		<field name="CONTENT_DIRECTORY"/>
+	</class>
+	<class name="android/media/tv/TvContract$PreviewPrograms" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
+		<field name="ASPECT_RATIO_16_9"/>
+		<field name="ASPECT_RATIO_1_1"/>
+		<field name="ASPECT_RATIO_2_3"/>
+		<field name="ASPECT_RATIO_3_2"/>
+		<field name="ASPECT_RATIO_4_3"/>
+		<field name="AVAILABILITY_AVAILABLE"/>
+		<field name="AVAILABILITY_FREE_WITH_SUBSCRIPTION"/>
+		<field name="AVAILABILITY_PAID_CONTENT"/>
+		<field name="COLUMN_AUDIO_LANGUAGE"/>
+		<field name="COLUMN_AUTHOR"/>
+		<field name="COLUMN_AVAILABILITY"/>
+		<field name="COLUMN_BROWSABLE"/>
+		<field name="COLUMN_CANONICAL_GENRE"/>
+		<field name="COLUMN_CHANNEL_ID"/>
+		<field name="COLUMN_CONTENT_ID"/>
+		<field name="COLUMN_CONTENT_RATING"/>
+		<field name="COLUMN_DURATION_MILLIS"/>
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER"/>
+		<field name="COLUMN_EPISODE_TITLE"/>
+		<field name="COLUMN_INTENT_URI"/>
+		<field name="COLUMN_INTERACTION_COUNT"/>
+		<field name="COLUMN_INTERACTION_TYPE"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_ID"/>
+		<field name="COLUMN_ITEM_COUNT"/>
+		<field name="COLUMN_LAST_PLAYBACK_POSITION_MILLIS"/>
+		<field name="COLUMN_LIVE"/>
+		<field name="COLUMN_LOGO_URI"/>
+		<field name="COLUMN_LONG_DESCRIPTION"/>
+		<field name="COLUMN_OFFER_PRICE"/>
+		<field name="COLUMN_POSTER_ART_ASPECT_RATIO"/>
+		<field name="COLUMN_POSTER_ART_URI"/>
+		<field name="COLUMN_PREVIEW_VIDEO_URI"/>
+		<field name="COLUMN_RELEASE_DATE"/>
+		<field name="COLUMN_REVIEW_RATING"/>
+		<field name="COLUMN_REVIEW_RATING_STYLE"/>
+		<field name="COLUMN_SEARCHABLE"/>
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
+		<field name="COLUMN_SEASON_TITLE"/>
+		<field name="COLUMN_SERIES_ID" since="29"/>
+		<field name="COLUMN_SHORT_DESCRIPTION"/>
+		<field name="COLUMN_SPLIT_ID" since="30"/>
+		<field name="COLUMN_STARTING_PRICE"/>
+		<field name="COLUMN_THUMBNAIL_ASPECT_RATIO"/>
+		<field name="COLUMN_THUMBNAIL_URI"/>
+		<field name="COLUMN_TITLE"/>
+		<field name="COLUMN_TRANSIENT"/>
+		<field name="COLUMN_TYPE"/>
+		<field name="COLUMN_VERSION_NUMBER"/>
+		<field name="COLUMN_VIDEO_HEIGHT"/>
+		<field name="COLUMN_VIDEO_WIDTH"/>
+		<field name="COLUMN_WEIGHT"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="INTERACTION_TYPE_FANS"/>
+		<field name="INTERACTION_TYPE_FOLLOWERS"/>
+		<field name="INTERACTION_TYPE_LIKES"/>
+		<field name="INTERACTION_TYPE_LISTENS"/>
+		<field name="INTERACTION_TYPE_THUMBS"/>
+		<field name="INTERACTION_TYPE_VIEWERS"/>
+		<field name="INTERACTION_TYPE_VIEWS"/>
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE"/>
+		<field name="REVIEW_RATING_STYLE_STARS"/>
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN"/>
+		<field name="TYPE_ALBUM"/>
+		<field name="TYPE_ARTIST"/>
+		<field name="TYPE_CHANNEL"/>
+		<field name="TYPE_CLIP"/>
+		<field name="TYPE_EVENT"/>
+		<field name="TYPE_MOVIE"/>
+		<field name="TYPE_PLAYLIST"/>
+		<field name="TYPE_STATION"/>
+		<field name="TYPE_TRACK"/>
+		<field name="TYPE_TV_EPISODE"/>
+		<field name="TYPE_TV_SEASON"/>
+		<field name="TYPE_TV_SERIES"/>
+	</class>
+	<class name="android/media/tv/TvContract$Programs" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
+		<field name="COLUMN_AUDIO_LANGUAGE"/>
+		<field name="COLUMN_BROADCAST_GENRE"/>
+		<field name="COLUMN_CANONICAL_GENRE"/>
+		<field name="COLUMN_CHANNEL_ID"/>
+		<field name="COLUMN_CONTENT_RATING"/>
+		<field name="COLUMN_END_TIME_UTC_MILLIS"/>
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER" since="24"/>
+		<field name="COLUMN_EPISODE_NUMBER" deprecated="24"/>
+		<field name="COLUMN_EPISODE_TITLE"/>
+		<field name="COLUMN_EVENT_ID" since="30"/>
+		<field name="COLUMN_GLOBAL_CONTENT_ID" since="30"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1" since="23"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2" since="23"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3" since="23"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4" since="23"/>
+		<field name="COLUMN_LONG_DESCRIPTION"/>
+		<field name="COLUMN_POSTER_ART_URI"/>
+		<field name="COLUMN_RECORDING_PROHIBITED" since="24"/>
+		<field name="COLUMN_REVIEW_RATING" since="26"/>
+		<field name="COLUMN_REVIEW_RATING_STYLE" since="26"/>
+		<field name="COLUMN_SEARCHABLE" since="23"/>
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER" since="24"/>
+		<field name="COLUMN_SEASON_NUMBER" deprecated="24"/>
+		<field name="COLUMN_SEASON_TITLE" since="24"/>
+		<field name="COLUMN_SERIES_ID" since="29"/>
+		<field name="COLUMN_SHORT_DESCRIPTION"/>
+		<field name="COLUMN_SPLIT_ID" since="30"/>
+		<field name="COLUMN_START_TIME_UTC_MILLIS"/>
+		<field name="COLUMN_THUMBNAIL_URI"/>
+		<field name="COLUMN_TITLE"/>
+		<field name="COLUMN_VERSION_NUMBER"/>
+		<field name="COLUMN_VIDEO_HEIGHT"/>
+		<field name="COLUMN_VIDEO_WIDTH"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE" since="26"/>
+		<field name="REVIEW_RATING_STYLE_STARS" since="26"/>
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" since="26"/>
+	</class>
+	<class name="android/media/tv/TvContract$Programs$Genres" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="decode(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="encode([Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isCanonical(Ljava/lang/String;)Z" since="24"/>
+		<field name="ANIMAL_WILDLIFE"/>
+		<field name="ARTS" since="22"/>
+		<field name="COMEDY"/>
+		<field name="DRAMA"/>
+		<field name="EDUCATION"/>
+		<field name="ENTERTAINMENT" since="22"/>
+		<field name="FAMILY_KIDS"/>
+		<field name="GAMING"/>
+		<field name="LIFE_STYLE" since="22"/>
+		<field name="MOVIES"/>
+		<field name="MUSIC" since="22"/>
+		<field name="NEWS"/>
+		<field name="PREMIER" since="22"/>
+		<field name="SHOPPING"/>
+		<field name="SPORTS"/>
+		<field name="TECH_SCIENCE" since="22"/>
+		<field name="TRAVEL"/>
+	</class>
+	<class name="android/media/tv/TvContract$RecordedPrograms" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
+		<field name="COLUMN_AUDIO_LANGUAGE"/>
+		<field name="COLUMN_BROADCAST_GENRE"/>
+		<field name="COLUMN_CANONICAL_GENRE"/>
+		<field name="COLUMN_CHANNEL_ID"/>
+		<field name="COLUMN_CONTENT_RATING"/>
+		<field name="COLUMN_END_TIME_UTC_MILLIS"/>
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER"/>
+		<field name="COLUMN_EPISODE_TITLE"/>
+		<field name="COLUMN_INPUT_ID"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4"/>
+		<field name="COLUMN_LONG_DESCRIPTION"/>
+		<field name="COLUMN_POSTER_ART_URI"/>
+		<field name="COLUMN_RECORDING_DATA_BYTES"/>
+		<field name="COLUMN_RECORDING_DATA_URI"/>
+		<field name="COLUMN_RECORDING_DURATION_MILLIS"/>
+		<field name="COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS"/>
+		<field name="COLUMN_REVIEW_RATING" since="26"/>
+		<field name="COLUMN_REVIEW_RATING_STYLE" since="26"/>
+		<field name="COLUMN_SEARCHABLE"/>
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
+		<field name="COLUMN_SEASON_TITLE"/>
+		<field name="COLUMN_SERIES_ID" since="29"/>
+		<field name="COLUMN_SHORT_DESCRIPTION"/>
+		<field name="COLUMN_SPLIT_ID" since="30"/>
+		<field name="COLUMN_START_TIME_UTC_MILLIS"/>
+		<field name="COLUMN_THUMBNAIL_URI"/>
+		<field name="COLUMN_TITLE"/>
+		<field name="COLUMN_VERSION_NUMBER"/>
+		<field name="COLUMN_VIDEO_HEIGHT"/>
+		<field name="COLUMN_VIDEO_WIDTH"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE" since="26"/>
+		<field name="REVIEW_RATING_STYLE_STARS" since="26"/>
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN" since="26"/>
+	</class>
+	<class name="android/media/tv/TvContract$WatchNextPrograms" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/media/tv/TvContract$BaseTvColumns"/>
+		<field name="ASPECT_RATIO_16_9"/>
+		<field name="ASPECT_RATIO_1_1"/>
+		<field name="ASPECT_RATIO_2_3"/>
+		<field name="ASPECT_RATIO_3_2"/>
+		<field name="ASPECT_RATIO_4_3"/>
+		<field name="AVAILABILITY_AVAILABLE"/>
+		<field name="AVAILABILITY_FREE_WITH_SUBSCRIPTION"/>
+		<field name="AVAILABILITY_PAID_CONTENT"/>
+		<field name="COLUMN_AUDIO_LANGUAGE"/>
+		<field name="COLUMN_AUTHOR"/>
+		<field name="COLUMN_AVAILABILITY"/>
+		<field name="COLUMN_BROWSABLE"/>
+		<field name="COLUMN_CANONICAL_GENRE"/>
+		<field name="COLUMN_CONTENT_ID"/>
+		<field name="COLUMN_CONTENT_RATING"/>
+		<field name="COLUMN_DURATION_MILLIS"/>
+		<field name="COLUMN_EPISODE_DISPLAY_NUMBER"/>
+		<field name="COLUMN_EPISODE_TITLE"/>
+		<field name="COLUMN_INTENT_URI"/>
+		<field name="COLUMN_INTERACTION_COUNT"/>
+		<field name="COLUMN_INTERACTION_TYPE"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_DATA"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG1"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG2"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG3"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_FLAG4"/>
+		<field name="COLUMN_INTERNAL_PROVIDER_ID"/>
+		<field name="COLUMN_ITEM_COUNT"/>
+		<field name="COLUMN_LAST_ENGAGEMENT_TIME_UTC_MILLIS"/>
+		<field name="COLUMN_LAST_PLAYBACK_POSITION_MILLIS"/>
+		<field name="COLUMN_LIVE"/>
+		<field name="COLUMN_LOGO_URI"/>
+		<field name="COLUMN_LONG_DESCRIPTION"/>
+		<field name="COLUMN_OFFER_PRICE"/>
+		<field name="COLUMN_POSTER_ART_ASPECT_RATIO"/>
+		<field name="COLUMN_POSTER_ART_URI"/>
+		<field name="COLUMN_PREVIEW_VIDEO_URI"/>
+		<field name="COLUMN_RELEASE_DATE"/>
+		<field name="COLUMN_REVIEW_RATING"/>
+		<field name="COLUMN_REVIEW_RATING_STYLE"/>
+		<field name="COLUMN_SEARCHABLE"/>
+		<field name="COLUMN_SEASON_DISPLAY_NUMBER"/>
+		<field name="COLUMN_SEASON_TITLE"/>
+		<field name="COLUMN_SERIES_ID" since="29"/>
+		<field name="COLUMN_SHORT_DESCRIPTION"/>
+		<field name="COLUMN_SPLIT_ID" since="30"/>
+		<field name="COLUMN_STARTING_PRICE"/>
+		<field name="COLUMN_THUMBNAIL_ASPECT_RATIO"/>
+		<field name="COLUMN_THUMBNAIL_URI"/>
+		<field name="COLUMN_TITLE"/>
+		<field name="COLUMN_TRANSIENT"/>
+		<field name="COLUMN_TYPE"/>
+		<field name="COLUMN_VERSION_NUMBER"/>
+		<field name="COLUMN_VIDEO_HEIGHT"/>
+		<field name="COLUMN_VIDEO_WIDTH"/>
+		<field name="COLUMN_WATCH_NEXT_TYPE"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="INTERACTION_TYPE_FANS"/>
+		<field name="INTERACTION_TYPE_FOLLOWERS"/>
+		<field name="INTERACTION_TYPE_LIKES"/>
+		<field name="INTERACTION_TYPE_LISTENS"/>
+		<field name="INTERACTION_TYPE_THUMBS"/>
+		<field name="INTERACTION_TYPE_VIEWERS"/>
+		<field name="INTERACTION_TYPE_VIEWS"/>
+		<field name="REVIEW_RATING_STYLE_PERCENTAGE"/>
+		<field name="REVIEW_RATING_STYLE_STARS"/>
+		<field name="REVIEW_RATING_STYLE_THUMBS_UP_DOWN"/>
+		<field name="TYPE_ALBUM"/>
+		<field name="TYPE_ARTIST"/>
+		<field name="TYPE_CHANNEL"/>
+		<field name="TYPE_CLIP"/>
+		<field name="TYPE_EVENT"/>
+		<field name="TYPE_MOVIE"/>
+		<field name="TYPE_PLAYLIST"/>
+		<field name="TYPE_STATION"/>
+		<field name="TYPE_TRACK"/>
+		<field name="TYPE_TV_EPISODE"/>
+		<field name="TYPE_TV_SEASON"/>
+		<field name="TYPE_TV_SERIES"/>
+		<field name="WATCH_NEXT_TYPE_CONTINUE"/>
+		<field name="WATCH_NEXT_TYPE_NEW"/>
+		<field name="WATCH_NEXT_TYPE_NEXT"/>
+		<field name="WATCH_NEXT_TYPE_WATCHLIST"/>
+	</class>
+	<class name="android/media/tv/TvInputInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="canPauseRecording()Z" since="31"/>
+		<method name="canRecord()Z" since="24"/>
+		<method name="createSettingsIntent()Landroid/content/Intent;" deprecated="26"/>
+		<method name="createSetupIntent()Landroid/content/Intent;"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="24"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getParentId()Ljava/lang/String;"/>
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
+		<method name="getTunerCount()I" since="24"/>
+		<method name="getType()I"/>
+		<method name="isHidden(Landroid/content/Context;)Z" since="24"/>
+		<method name="isPassthroughInput()Z"/>
+		<method name="loadCustomLabel(Landroid/content/Context;)Ljava/lang/CharSequence;" since="24"/>
+		<method name="loadIcon(Landroid/content/Context;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/Context;)Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_INPUT_ID"/>
+		<field name="TYPE_COMPONENT"/>
+		<field name="TYPE_COMPOSITE"/>
+		<field name="TYPE_DISPLAY_PORT"/>
+		<field name="TYPE_DVI"/>
+		<field name="TYPE_HDMI"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_SCART"/>
+		<field name="TYPE_SVIDEO"/>
+		<field name="TYPE_TUNER"/>
+		<field name="TYPE_VGA"/>
+	</class>
+	<class name="android/media/tv/TvInputInfo$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/ComponentName;)V"/>
+		<method name="build()Landroid/media/tv/TvInputInfo;"/>
+		<method name="setCanPauseRecording(Z)Landroid/media/tv/TvInputInfo$Builder;" since="31"/>
+		<method name="setCanRecord(Z)Landroid/media/tv/TvInputInfo$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/media/tv/TvInputInfo$Builder;"/>
+		<method name="setTunerCount(I)Landroid/media/tv/TvInputInfo$Builder;"/>
+	</class>
+	<class name="android/media/tv/TvInputManager" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getBlockedRatings()Ljava/util/List;" since="28"/>
+		<method name="getInputState(Ljava/lang/String;)I"/>
+		<method name="getTvInputInfo(Ljava/lang/String;)Landroid/media/tv/TvInputInfo;"/>
+		<method name="getTvInputList()Ljava/util/List;"/>
+		<method name="isParentalControlsEnabled()Z"/>
+		<method name="isRatingBlocked(Landroid/media/tv/TvContentRating;)Z"/>
+		<method name="registerCallback(Landroid/media/tv/TvInputManager$TvInputCallback;Landroid/os/Handler;)V"/>
+		<method name="unregisterCallback(Landroid/media/tv/TvInputManager$TvInputCallback;)V"/>
+		<method name="updateTvInputInfo(Landroid/media/tv/TvInputInfo;)V" since="24"/>
+		<field name="ACTION_BLOCKED_RATINGS_CHANGED"/>
+		<field name="ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED"/>
+		<field name="ACTION_QUERY_CONTENT_RATING_SYSTEMS"/>
+		<field name="ACTION_SETUP_INPUTS" since="24"/>
+		<field name="ACTION_VIEW_RECORDING_SCHEDULES" since="26"/>
+		<field name="INPUT_STATE_CONNECTED"/>
+		<field name="INPUT_STATE_CONNECTED_STANDBY"/>
+		<field name="INPUT_STATE_DISCONNECTED"/>
+		<field name="META_DATA_CONTENT_RATING_SYSTEMS"/>
+		<field name="RECORDING_ERROR_INSUFFICIENT_SPACE" since="24"/>
+		<field name="RECORDING_ERROR_RESOURCE_BUSY" since="24"/>
+		<field name="RECORDING_ERROR_UNKNOWN" since="24"/>
+		<field name="TIME_SHIFT_INVALID_TIME" since="23"/>
+		<field name="TIME_SHIFT_STATUS_AVAILABLE" since="23"/>
+		<field name="TIME_SHIFT_STATUS_UNAVAILABLE" since="23"/>
+		<field name="TIME_SHIFT_STATUS_UNKNOWN" since="23"/>
+		<field name="TIME_SHIFT_STATUS_UNSUPPORTED" since="23"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_AUDIO_ONLY" since="23"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_BUFFERING"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_BLACKOUT" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_CARD_INVALID" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_CARD_MUTE" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_INSUFFICIENT_OUTPUT_PROTECTION" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_LICENSE_EXPIRED" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_NEED_ACTIVATION" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_NEED_PAIRING" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_NO_CARD" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_PVR_RECORDING_NOT_ALLOWED" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_REBOOTING" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_CAS_UNKNOWN" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_INSUFFICIENT_RESOURCE" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_NOT_CONNECTED" since="30"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_TUNING"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_UNKNOWN"/>
+		<field name="VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL"/>
+	</class>
+	<class name="android/media/tv/TvInputManager$TvInputCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onInputAdded(Ljava/lang/String;)V"/>
+		<method name="onInputRemoved(Ljava/lang/String;)V"/>
+		<method name="onInputStateChanged(Ljava/lang/String;I)V"/>
+		<method name="onInputUpdated(Ljava/lang/String;)V" since="24"/>
+		<method name="onTvInputInfoUpdated(Landroid/media/tv/TvInputInfo;)V" since="24"/>
+	</class>
+	<class name="android/media/tv/TvInputService" since="21">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCreateRecordingSession(Ljava/lang/String;)Landroid/media/tv/TvInputService$RecordingSession;" since="24"/>
+		<method name="onCreateRecordingSession(Ljava/lang/String;Ljava/lang/String;)Landroid/media/tv/TvInputService$RecordingSession;" since="30"/>
+		<method name="onCreateSession(Ljava/lang/String;)Landroid/media/tv/TvInputService$Session;"/>
+		<method name="onCreateSession(Ljava/lang/String;Ljava/lang/String;)Landroid/media/tv/TvInputService$Session;" since="30"/>
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_BACKGROUND" since="30"/>
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_LIVE" since="30"/>
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK" since="30"/>
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_RECORD" since="30"/>
+		<field name="PRIORITY_HINT_USE_CASE_TYPE_SCAN" since="30"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/media/tv/TvInputService$HardwareSession" since="21">
+		<extends name="android/media/tv/TvInputService$Session"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="getHardwareInputId()Ljava/lang/String;"/>
+		<method name="onHardwareVideoAvailable()V"/>
+		<method name="onHardwareVideoUnavailable(I)V"/>
+	</class>
+	<class name="android/media/tv/TvInputService$RecordingSession" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="notifyError(I)V"/>
+		<method name="notifyRecordingStopped(Landroid/net/Uri;)V"/>
+		<method name="notifyTuned(Landroid/net/Uri;)V"/>
+		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="onPauseRecording(Landroid/os/Bundle;)V" since="31"/>
+		<method name="onRelease()V"/>
+		<method name="onResumeRecording(Landroid/os/Bundle;)V" since="31"/>
+		<method name="onStartRecording(Landroid/net/Uri;)V"/>
+		<method name="onStartRecording(Landroid/net/Uri;Landroid/os/Bundle;)V" since="30"/>
+		<method name="onStopRecording()V"/>
+		<method name="onTune(Landroid/net/Uri;)V"/>
+		<method name="onTune(Landroid/net/Uri;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/media/tv/TvInputService$Session" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/KeyEvent$Callback"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="layoutSurface(IIII)V" since="23"/>
+		<method name="notifyChannelRetuned(Landroid/net/Uri;)V"/>
+		<method name="notifyContentAllowed()V"/>
+		<method name="notifyContentBlocked(Landroid/media/tv/TvContentRating;)V"/>
+		<method name="notifyTimeShiftStatusChanged(I)V" since="23"/>
+		<method name="notifyTrackSelected(ILjava/lang/String;)V"/>
+		<method name="notifyTracksChanged(Ljava/util/List;)V"/>
+		<method name="notifyVideoAvailable()V"/>
+		<method name="notifyVideoUnavailable(I)V"/>
+		<method name="onAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+		<method name="onCreateOverlayView()Landroid/view/View;"/>
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onOverlayViewSizeChanged(II)V" since="23"/>
+		<method name="onRelease()V"/>
+		<method name="onSelectTrack(ILjava/lang/String;)Z"/>
+		<method name="onSetCaptionEnabled(Z)V"/>
+		<method name="onSetStreamVolume(F)V"/>
+		<method name="onSetSurface(Landroid/view/Surface;)Z"/>
+		<method name="onSurfaceChanged(III)V"/>
+		<method name="onTimeShiftGetCurrentPosition()J" since="23"/>
+		<method name="onTimeShiftGetStartPosition()J" since="23"/>
+		<method name="onTimeShiftPause()V" since="23"/>
+		<method name="onTimeShiftPlay(Landroid/net/Uri;)V" since="24"/>
+		<method name="onTimeShiftResume()V" since="23"/>
+		<method name="onTimeShiftSeekTo(J)V" since="23"/>
+		<method name="onTimeShiftSetPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onTune(Landroid/net/Uri;)Z"/>
+		<method name="onTune(Landroid/net/Uri;Landroid/os/Bundle;)Z" since="24"/>
+		<method name="onUnblockContent(Landroid/media/tv/TvContentRating;)V"/>
+		<method name="setOverlayViewEnabled(Z)V"/>
+	</class>
+	<class name="android/media/tv/TvRecordingClient" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Landroid/media/tv/TvRecordingClient$RecordingCallback;Landroid/os/Handler;)V"/>
+		<method name="pauseRecording()V" since="31"/>
+		<method name="pauseRecording(Landroid/os/Bundle;)V" since="31"/>
+		<method name="release()V"/>
+		<method name="resumeRecording()V" since="31"/>
+		<method name="resumeRecording(Landroid/os/Bundle;)V" since="31"/>
+		<method name="sendAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="startRecording(Landroid/net/Uri;)V"/>
+		<method name="startRecording(Landroid/net/Uri;Landroid/os/Bundle;)V" since="30"/>
+		<method name="stopRecording()V"/>
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;)V"/>
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/media/tv/TvRecordingClient$RecordingCallback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onConnectionFailed(Ljava/lang/String;)V"/>
+		<method name="onDisconnected(Ljava/lang/String;)V"/>
+		<method name="onError(I)V"/>
+		<method name="onRecordingStopped(Landroid/net/Uri;)V"/>
+		<method name="onTuned(Landroid/net/Uri;)V"/>
+	</class>
+	<class name="android/media/tv/TvTrackInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAudioChannelCount()I"/>
+		<method name="getAudioSampleRate()I"/>
+		<method name="getDescription()Ljava/lang/CharSequence;" since="23"/>
+		<method name="getEncoding()Ljava/lang/String;" since="30"/>
+		<method name="getExtra()Landroid/os/Bundle;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getLanguage()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+		<method name="getVideoActiveFormatDescription()B" since="24"/>
+		<method name="getVideoFrameRate()F"/>
+		<method name="getVideoHeight()I"/>
+		<method name="getVideoPixelAspectRatio()F" since="23"/>
+		<method name="getVideoWidth()I"/>
+		<method name="isAudioDescription()Z" since="30"/>
+		<method name="isEncrypted()Z" since="30"/>
+		<method name="isHardOfHearing()Z" since="30"/>
+		<method name="isSpokenSubtitle()Z" since="30"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_AUDIO"/>
+		<field name="TYPE_SUBTITLE"/>
+		<field name="TYPE_VIDEO"/>
+	</class>
+	<class name="android/media/tv/TvTrackInfo$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="build()Landroid/media/tv/TvTrackInfo;"/>
+		<method name="setAudioChannelCount(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
+		<method name="setAudioDescription(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
+		<method name="setAudioSampleRate(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/media/tv/TvTrackInfo$Builder;" since="23"/>
+		<method name="setEncoding(Ljava/lang/String;)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
+		<method name="setEncrypted(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
+		<method name="setExtra(Landroid/os/Bundle;)Landroid/media/tv/TvTrackInfo$Builder;"/>
+		<method name="setHardOfHearing(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
+		<method name="setLanguage(Ljava/lang/String;)Landroid/media/tv/TvTrackInfo$Builder;"/>
+		<method name="setSpokenSubtitle(Z)Landroid/media/tv/TvTrackInfo$Builder;" since="30"/>
+		<method name="setVideoActiveFormatDescription(B)Landroid/media/tv/TvTrackInfo$Builder;" since="24"/>
+		<method name="setVideoFrameRate(F)Landroid/media/tv/TvTrackInfo$Builder;"/>
+		<method name="setVideoHeight(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
+		<method name="setVideoPixelAspectRatio(F)Landroid/media/tv/TvTrackInfo$Builder;" since="23"/>
+		<method name="setVideoWidth(I)Landroid/media/tv/TvTrackInfo$Builder;"/>
+	</class>
+	<class name="android/media/tv/TvView" since="21">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="dispatchUnhandledInputEvent(Landroid/view/InputEvent;)Z"/>
+		<method name="getSelectedTrack(I)Ljava/lang/String;"/>
+		<method name="getTracks(I)Ljava/util/List;"/>
+		<method name="onUnhandledInputEvent(Landroid/view/InputEvent;)Z"/>
+		<method name="reset()V"/>
+		<method name="selectTrack(ILjava/lang/String;)V"/>
+		<method name="sendAppPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+		<method name="setCallback(Landroid/media/tv/TvView$TvInputCallback;)V"/>
+		<method name="setCaptionEnabled(Z)V"/>
+		<method name="setOnUnhandledInputEventListener(Landroid/media/tv/TvView$OnUnhandledInputEventListener;)V"/>
+		<method name="setStreamVolume(F)V"/>
+		<method name="setTimeShiftPositionCallback(Landroid/media/tv/TvView$TimeShiftPositionCallback;)V" since="23"/>
+		<method name="setZOrderMediaOverlay(Z)V" since="24"/>
+		<method name="setZOrderOnTop(Z)V" since="24"/>
+		<method name="timeShiftPause()V" since="23"/>
+		<method name="timeShiftPlay(Ljava/lang/String;Landroid/net/Uri;)V" since="24"/>
+		<method name="timeShiftResume()V" since="23"/>
+		<method name="timeShiftSeekTo(J)V" since="23"/>
+		<method name="timeShiftSetPlaybackParams(Landroid/media/PlaybackParams;)V" since="23"/>
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;)V"/>
+		<method name="tune(Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;)V" since="24"/>
+	</class>
+	<class name="android/media/tv/TvView$OnUnhandledInputEventListener" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="onUnhandledInputEvent(Landroid/view/InputEvent;)Z"/>
+	</class>
+	<class name="android/media/tv/TvView$TimeShiftPositionCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onTimeShiftCurrentPositionChanged(Ljava/lang/String;J)V"/>
+		<method name="onTimeShiftStartPositionChanged(Ljava/lang/String;J)V"/>
+	</class>
+	<class name="android/media/tv/TvView$TvInputCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onChannelRetuned(Ljava/lang/String;Landroid/net/Uri;)V"/>
+		<method name="onConnectionFailed(Ljava/lang/String;)V"/>
+		<method name="onContentAllowed(Ljava/lang/String;)V"/>
+		<method name="onContentBlocked(Ljava/lang/String;Landroid/media/tv/TvContentRating;)V"/>
+		<method name="onDisconnected(Ljava/lang/String;)V"/>
+		<method name="onTimeShiftStatusChanged(Ljava/lang/String;I)V" since="23"/>
+		<method name="onTrackSelected(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="onTracksChanged(Ljava/lang/String;Ljava/util/List;)V"/>
+		<method name="onVideoAvailable(Ljava/lang/String;)V"/>
+		<method name="onVideoSizeChanged(Ljava/lang/String;II)V"/>
+		<method name="onVideoUnavailable(Ljava/lang/String;I)V"/>
+	</class>
+	<class name="android/mtp/MtpConstants" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="isAbstractObject(I)Z"/>
+		<field name="ASSOCIATION_TYPE_GENERIC_FOLDER"/>
+		<field name="FORMAT_3GP_CONTAINER"/>
+		<field name="FORMAT_AAC"/>
+		<field name="FORMAT_ABSTRACT_AUDIO_ALBUM"/>
+		<field name="FORMAT_ABSTRACT_AUDIO_PLAYLIST"/>
+		<field name="FORMAT_ABSTRACT_AV_PLAYLIST"/>
+		<field name="FORMAT_ABSTRACT_DOCUMENT"/>
+		<field name="FORMAT_ABSTRACT_IMAGE_ALBUM"/>
+		<field name="FORMAT_ABSTRACT_MEDIACAST"/>
+		<field name="FORMAT_ABSTRACT_MULTIMEDIA_ALBUM"/>
+		<field name="FORMAT_ABSTRACT_VIDEO_ALBUM"/>
+		<field name="FORMAT_ABSTRACT_VIDEO_PLAYLIST"/>
+		<field name="FORMAT_AIFF"/>
+		<field name="FORMAT_ASF"/>
+		<field name="FORMAT_ASSOCIATION"/>
+		<field name="FORMAT_ASX_PLAYLIST"/>
+		<field name="FORMAT_AUDIBLE"/>
+		<field name="FORMAT_AVI"/>
+		<field name="FORMAT_BMP"/>
+		<field name="FORMAT_DEFINED" since="24"/>
+		<field name="FORMAT_DNG" since="24"/>
+		<field name="FORMAT_DPOF"/>
+		<field name="FORMAT_EXECUTABLE"/>
+		<field name="FORMAT_EXIF_JPEG"/>
+		<field name="FORMAT_FLAC"/>
+		<field name="FORMAT_GIF"/>
+		<field name="FORMAT_HTML"/>
+		<field name="FORMAT_JFIF"/>
+		<field name="FORMAT_JP2"/>
+		<field name="FORMAT_JPX"/>
+		<field name="FORMAT_M3U_PLAYLIST"/>
+		<field name="FORMAT_MP2"/>
+		<field name="FORMAT_MP3"/>
+		<field name="FORMAT_MP4_CONTAINER"/>
+		<field name="FORMAT_MPEG"/>
+		<field name="FORMAT_MPL_PLAYLIST"/>
+		<field name="FORMAT_MS_EXCEL_SPREADSHEET"/>
+		<field name="FORMAT_MS_POWERPOINT_PRESENTATION"/>
+		<field name="FORMAT_MS_WORD_DOCUMENT"/>
+		<field name="FORMAT_OGG"/>
+		<field name="FORMAT_PICT"/>
+		<field name="FORMAT_PLS_PLAYLIST"/>
+		<field name="FORMAT_PNG"/>
+		<field name="FORMAT_SCRIPT"/>
+		<field name="FORMAT_TEXT"/>
+		<field name="FORMAT_TIFF"/>
+		<field name="FORMAT_TIFF_EP"/>
+		<field name="FORMAT_UNDEFINED"/>
+		<field name="FORMAT_UNDEFINED_AUDIO"/>
+		<field name="FORMAT_UNDEFINED_COLLECTION"/>
+		<field name="FORMAT_UNDEFINED_DOCUMENT"/>
+		<field name="FORMAT_UNDEFINED_FIRMWARE"/>
+		<field name="FORMAT_UNDEFINED_VIDEO"/>
+		<field name="FORMAT_WAV"/>
+		<field name="FORMAT_WINDOWS_IMAGE_FORMAT"/>
+		<field name="FORMAT_WMA"/>
+		<field name="FORMAT_WMV"/>
+		<field name="FORMAT_WPL_PLAYLIST"/>
+		<field name="FORMAT_XML_DOCUMENT"/>
+		<field name="OPERATION_CLOSE_SESSION" since="24"/>
+		<field name="OPERATION_COPY_OBJECT" since="24"/>
+		<field name="OPERATION_DELETE_OBJECT" since="24"/>
+		<field name="OPERATION_FORMAT_STORE" since="24"/>
+		<field name="OPERATION_GET_DEVICE_INFO" since="24"/>
+		<field name="OPERATION_GET_DEVICE_PROP_DESC" since="24"/>
+		<field name="OPERATION_GET_DEVICE_PROP_VALUE" since="24"/>
+		<field name="OPERATION_GET_NUM_OBJECTS" since="24"/>
+		<field name="OPERATION_GET_OBJECT" since="24"/>
+		<field name="OPERATION_GET_OBJECT_HANDLES" since="24"/>
+		<field name="OPERATION_GET_OBJECT_INFO" since="24"/>
+		<field name="OPERATION_GET_OBJECT_PROPS_SUPPORTED" since="24"/>
+		<field name="OPERATION_GET_OBJECT_PROP_DESC" since="24"/>
+		<field name="OPERATION_GET_OBJECT_PROP_VALUE" since="24"/>
+		<field name="OPERATION_GET_OBJECT_REFERENCES" since="24"/>
+		<field name="OPERATION_GET_PARTIAL_OBJECT" since="24"/>
+		<field name="OPERATION_GET_PARTIAL_OBJECT_64" since="24"/>
+		<field name="OPERATION_GET_STORAGE_INFO" since="24"/>
+		<field name="OPERATION_GET_STORAGE_I_DS" since="24"/>
+		<field name="OPERATION_GET_THUMB" since="24"/>
+		<field name="OPERATION_INITIATE_CAPTURE" since="24"/>
+		<field name="OPERATION_INITIATE_OPEN_CAPTURE" since="24"/>
+		<field name="OPERATION_MOVE_OBJECT" since="24"/>
+		<field name="OPERATION_OPEN_SESSION" since="24"/>
+		<field name="OPERATION_POWER_DOWN" since="24"/>
+		<field name="OPERATION_RESET_DEVICE" since="24"/>
+		<field name="OPERATION_RESET_DEVICE_PROP_VALUE" since="24"/>
+		<field name="OPERATION_SELF_TEST" since="24"/>
+		<field name="OPERATION_SEND_OBJECT" since="24"/>
+		<field name="OPERATION_SEND_OBJECT_INFO" since="24"/>
+		<field name="OPERATION_SET_DEVICE_PROP_VALUE" since="24"/>
+		<field name="OPERATION_SET_OBJECT_PROP_VALUE" since="24"/>
+		<field name="OPERATION_SET_OBJECT_PROTECTION" since="24"/>
+		<field name="OPERATION_SET_OBJECT_REFERENCES" since="24"/>
+		<field name="OPERATION_SKIP" since="24"/>
+		<field name="OPERATION_TERMINATE_OPEN_CAPTURE" since="24"/>
+		<field name="PROTECTION_STATUS_NONE"/>
+		<field name="PROTECTION_STATUS_NON_TRANSFERABLE_DATA"/>
+		<field name="PROTECTION_STATUS_READ_ONLY"/>
+		<field name="PROTECTION_STATUS_READ_ONLY_DATA"/>
+	</class>
+	<class name="android/mtp/MtpDevice" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/hardware/usb/UsbDevice;)V"/>
+		<method name="close()V"/>
+		<method name="deleteObject(I)Z"/>
+		<method name="getDeviceId()I"/>
+		<method name="getDeviceInfo()Landroid/mtp/MtpDeviceInfo;"/>
+		<method name="getDeviceName()Ljava/lang/String;"/>
+		<method name="getObject(II)[B"/>
+		<method name="getObjectHandles(III)[I"/>
+		<method name="getObjectInfo(I)Landroid/mtp/MtpObjectInfo;"/>
+		<method name="getParent(I)J"/>
+		<method name="getPartialObject(IJJ[B)J" since="24"/>
+		<method name="getPartialObject64(IJJ[B)J" since="24"/>
+		<method name="getStorageId(I)J"/>
+		<method name="getStorageIds()[I"/>
+		<method name="getStorageInfo(I)Landroid/mtp/MtpStorageInfo;"/>
+		<method name="getThumbnail(I)[B"/>
+		<method name="importFile(ILandroid/os/ParcelFileDescriptor;)Z" since="24"/>
+		<method name="importFile(ILjava/lang/String;)Z"/>
+		<method name="open(Landroid/hardware/usb/UsbDeviceConnection;)Z"/>
+		<method name="readEvent(Landroid/os/CancellationSignal;)Landroid/mtp/MtpEvent;" since="24"/>
+		<method name="sendObject(IJLandroid/os/ParcelFileDescriptor;)Z" since="24"/>
+		<method name="sendObjectInfo(Landroid/mtp/MtpObjectInfo;)Landroid/mtp/MtpObjectInfo;" since="24"/>
+	</class>
+	<class name="android/mtp/MtpDeviceInfo" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="getEventsSupported()[I" since="24"/>
+		<method name="getManufacturer()Ljava/lang/String;"/>
+		<method name="getModel()Ljava/lang/String;"/>
+		<method name="getOperationsSupported()[I" since="24"/>
+		<method name="getSerialNumber()Ljava/lang/String;"/>
+		<method name="getVersion()Ljava/lang/String;"/>
+		<method name="isEventSupported(I)Z" since="24"/>
+		<method name="isOperationSupported(I)Z" since="24"/>
+	</class>
+	<class name="android/mtp/MtpEvent" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getDevicePropCode()I"/>
+		<method name="getEventCode()I"/>
+		<method name="getObjectFormatCode()I"/>
+		<method name="getObjectHandle()I"/>
+		<method name="getObjectPropCode()I"/>
+		<method name="getParameter1()I"/>
+		<method name="getParameter2()I"/>
+		<method name="getParameter3()I"/>
+		<method name="getStorageId()I"/>
+		<method name="getTransactionId()I"/>
+		<field name="EVENT_CANCEL_TRANSACTION"/>
+		<field name="EVENT_CAPTURE_COMPLETE"/>
+		<field name="EVENT_DEVICE_INFO_CHANGED"/>
+		<field name="EVENT_DEVICE_PROP_CHANGED"/>
+		<field name="EVENT_DEVICE_RESET"/>
+		<field name="EVENT_OBJECT_ADDED"/>
+		<field name="EVENT_OBJECT_INFO_CHANGED"/>
+		<field name="EVENT_OBJECT_PROP_CHANGED"/>
+		<field name="EVENT_OBJECT_PROP_DESC_CHANGED"/>
+		<field name="EVENT_OBJECT_REFERENCES_CHANGED"/>
+		<field name="EVENT_OBJECT_REMOVED"/>
+		<field name="EVENT_REQUEST_OBJECT_TRANSFER"/>
+		<field name="EVENT_STORAGE_INFO_CHANGED"/>
+		<field name="EVENT_STORE_ADDED"/>
+		<field name="EVENT_STORE_FULL"/>
+		<field name="EVENT_STORE_REMOVED"/>
+		<field name="EVENT_UNDEFINED"/>
+		<field name="EVENT_UNREPORTED_STATUS"/>
+	</class>
+	<class name="android/mtp/MtpObjectInfo" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="getAssociationDesc()I"/>
+		<method name="getAssociationType()I"/>
+		<method name="getCompressedSize()I"/>
+		<method name="getCompressedSizeLong()J" since="24"/>
+		<method name="getDateCreated()J"/>
+		<method name="getDateModified()J"/>
+		<method name="getFormat()I"/>
+		<method name="getImagePixDepth()I"/>
+		<method name="getImagePixDepthLong()J" since="24"/>
+		<method name="getImagePixHeight()I"/>
+		<method name="getImagePixHeightLong()J" since="24"/>
+		<method name="getImagePixWidth()I"/>
+		<method name="getImagePixWidthLong()J" since="24"/>
+		<method name="getKeywords()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getObjectHandle()I"/>
+		<method name="getParent()I"/>
+		<method name="getProtectionStatus()I"/>
+		<method name="getSequenceNumber()I"/>
+		<method name="getSequenceNumberLong()J" since="24"/>
+		<method name="getStorageId()I"/>
+		<method name="getThumbCompressedSize()I"/>
+		<method name="getThumbCompressedSizeLong()J" since="24"/>
+		<method name="getThumbFormat()I"/>
+		<method name="getThumbPixHeight()I"/>
+		<method name="getThumbPixHeightLong()J" since="24"/>
+		<method name="getThumbPixWidth()I"/>
+		<method name="getThumbPixWidthLong()J" since="24"/>
+	</class>
+	<class name="android/mtp/MtpObjectInfo$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/mtp/MtpObjectInfo;)V"/>
+		<method name="build()Landroid/mtp/MtpObjectInfo;"/>
+		<method name="setAssociationDesc(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setAssociationType(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setCompressedSize(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setDateCreated(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setDateModified(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setFormat(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setImagePixDepth(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setImagePixHeight(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setImagePixWidth(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setKeywords(Ljava/lang/String;)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setName(Ljava/lang/String;)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setObjectHandle(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setParent(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setProtectionStatus(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setSequenceNumber(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setStorageId(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setThumbCompressedSize(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setThumbFormat(I)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setThumbPixHeight(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+		<method name="setThumbPixWidth(J)Landroid/mtp/MtpObjectInfo$Builder;"/>
+	</class>
+	<class name="android/mtp/MtpStorageInfo" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getFreeSpace()J"/>
+		<method name="getMaxCapacity()J"/>
+		<method name="getStorageId()I"/>
+		<method name="getVolumeIdentifier()Ljava/lang/String;"/>
+	</class>
+	<class name="android/net/CaptivePortal" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="ignoreNetwork()V"/>
+		<method name="reportCaptivePortalDismissed()V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/ConnectivityDiagnosticsManager" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="registerConnectivityDiagnosticsCallback(Landroid/net/NetworkRequest;Ljava/util/concurrent/Executor;Landroid/net/ConnectivityDiagnosticsManager$ConnectivityDiagnosticsCallback;)V"/>
+		<method name="unregisterConnectivityDiagnosticsCallback(Landroid/net/ConnectivityDiagnosticsManager$ConnectivityDiagnosticsCallback;)V"/>
+	</class>
+	<class name="android/net/ConnectivityDiagnosticsManager$ConnectivityDiagnosticsCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onConnectivityReportAvailable(Landroid/net/ConnectivityDiagnosticsManager$ConnectivityReport;)V"/>
+		<method name="onDataStallSuspected(Landroid/net/ConnectivityDiagnosticsManager$DataStallReport;)V"/>
+		<method name="onNetworkConnectivityReported(Landroid/net/Network;Z)V"/>
+	</class>
+	<class name="android/net/ConnectivityDiagnosticsManager$ConnectivityReport" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/net/Network;JLandroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/os/PersistableBundle;)V"/>
+		<method name="getAdditionalInfo()Landroid/os/PersistableBundle;"/>
+		<method name="getLinkProperties()Landroid/net/LinkProperties;"/>
+		<method name="getNetwork()Landroid/net/Network;"/>
+		<method name="getNetworkCapabilities()Landroid/net/NetworkCapabilities;"/>
+		<method name="getReportTimestamp()J"/>
+		<field name="CREATOR"/>
+		<field name="KEY_NETWORK_PROBES_ATTEMPTED_BITMASK"/>
+		<field name="KEY_NETWORK_PROBES_SUCCEEDED_BITMASK"/>
+		<field name="KEY_NETWORK_VALIDATION_RESULT"/>
+		<field name="NETWORK_PROBE_DNS"/>
+		<field name="NETWORK_PROBE_FALLBACK"/>
+		<field name="NETWORK_PROBE_HTTP"/>
+		<field name="NETWORK_PROBE_HTTPS"/>
+		<field name="NETWORK_PROBE_PRIVATE_DNS"/>
+		<field name="NETWORK_VALIDATION_RESULT_INVALID"/>
+		<field name="NETWORK_VALIDATION_RESULT_PARTIALLY_VALID"/>
+		<field name="NETWORK_VALIDATION_RESULT_SKIPPED"/>
+		<field name="NETWORK_VALIDATION_RESULT_VALID"/>
+	</class>
+	<class name="android/net/ConnectivityDiagnosticsManager$DataStallReport" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/net/Network;JILandroid/net/LinkProperties;Landroid/net/NetworkCapabilities;Landroid/os/PersistableBundle;)V"/>
+		<method name="getDetectionMethod()I"/>
+		<method name="getLinkProperties()Landroid/net/LinkProperties;"/>
+		<method name="getNetwork()Landroid/net/Network;"/>
+		<method name="getNetworkCapabilities()Landroid/net/NetworkCapabilities;"/>
+		<method name="getReportTimestamp()J"/>
+		<method name="getStallDetails()Landroid/os/PersistableBundle;"/>
+		<field name="CREATOR"/>
+		<field name="DETECTION_METHOD_DNS_EVENTS"/>
+		<field name="DETECTION_METHOD_TCP_METRICS"/>
+		<field name="KEY_DNS_CONSECUTIVE_TIMEOUTS"/>
+		<field name="KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS"/>
+		<field name="KEY_TCP_PACKET_FAIL_RATE"/>
+	</class>
+	<class name="android/net/ConnectivityManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addDefaultNetworkActiveListener(Landroid/net/ConnectivityManager$OnNetworkActiveListener;)V" since="21"/>
+		<method name="bindProcessToNetwork(Landroid/net/Network;)Z" since="23"/>
+		<method name="createSocketKeepalive(Landroid/net/Network;Landroid/net/IpSecManager$UdpEncapsulationSocket;Ljava/net/InetAddress;Ljava/net/InetAddress;Ljava/util/concurrent/Executor;Landroid/net/SocketKeepalive$Callback;)Landroid/net/SocketKeepalive;" since="29"/>
+		<method name="getActiveNetwork()Landroid/net/Network;" since="23"/>
+		<method name="getActiveNetworkInfo()Landroid/net/NetworkInfo;" deprecated="29"/>
+		<method name="getAllNetworkInfo()[Landroid/net/NetworkInfo;" deprecated="23"/>
+		<method name="getAllNetworks()[Landroid/net/Network;" since="21" deprecated="31"/>
+		<method name="getBackgroundDataSetting()Z" since="3" deprecated="15"/>
+		<method name="getBoundNetworkForProcess()Landroid/net/Network;" since="23"/>
+		<method name="getConnectionOwnerUid(ILjava/net/InetSocketAddress;Ljava/net/InetSocketAddress;)I" since="29"/>
+		<method name="getDefaultProxy()Landroid/net/ProxyInfo;" since="23"/>
+		<method name="getLinkProperties(Landroid/net/Network;)Landroid/net/LinkProperties;" since="21"/>
+		<method name="getMultipathPreference(Landroid/net/Network;)I" since="26"/>
+		<method name="getNetworkCapabilities(Landroid/net/Network;)Landroid/net/NetworkCapabilities;" since="21"/>
+		<method name="getNetworkInfo(I)Landroid/net/NetworkInfo;" deprecated="23"/>
+		<method name="getNetworkInfo(Landroid/net/Network;)Landroid/net/NetworkInfo;" since="21" deprecated="29"/>
+		<method name="getNetworkPreference()I" deprecated="21"/>
+		<method name="getNetworkWatchlistConfigHash()[B" since="28"/>
+		<method name="getProcessDefaultNetwork()Landroid/net/Network;" since="21" deprecated="23"/>
+		<method name="getRestrictBackgroundStatus()I" since="24"/>
+		<method name="isActiveNetworkMetered()Z" since="16"/>
+		<method name="isDefaultNetworkActive()Z" since="21"/>
+		<method name="isNetworkTypeValid(I)Z" deprecated="23"/>
+		<method name="registerBestMatchingNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V" since="31"/>
+		<method name="registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V" since="24"/>
+		<method name="registerDefaultNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/app/PendingIntent;)V" since="23"/>
+		<method name="registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;)V" since="21"/>
+		<method name="registerNetworkCallback(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="releaseNetworkRequest(Landroid/app/PendingIntent;)V" since="22"/>
+		<method name="removeDefaultNetworkActiveListener(Landroid/net/ConnectivityManager$OnNetworkActiveListener;)V" since="21"/>
+		<method name="reportBadNetwork(Landroid/net/Network;)V" since="21" deprecated="23"/>
+		<method name="reportNetworkConnectivity(Landroid/net/Network;Z)V" since="23"/>
+		<method name="requestBandwidthUpdate(Landroid/net/Network;)Z" since="23"/>
+		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/app/PendingIntent;)V" since="22"/>
+		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;)V" since="21"/>
+		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;I)V" since="26"/>
+		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="requestNetwork(Landroid/net/NetworkRequest;Landroid/net/ConnectivityManager$NetworkCallback;Landroid/os/Handler;I)V" since="26"/>
+		<method name="requestRouteToHost(II)Z" deprecated="21" removed="26"/>
+		<method name="setNetworkPreference(I)V" deprecated="21"/>
+		<method name="setProcessDefaultNetwork(Landroid/net/Network;)Z" since="21" deprecated="23"/>
+		<method name="startUsingNetworkFeature(ILjava/lang/String;)I" deprecated="21" removed="26"/>
+		<method name="stopUsingNetworkFeature(ILjava/lang/String;)I" deprecated="21" removed="26"/>
+		<method name="unregisterNetworkCallback(Landroid/app/PendingIntent;)V" since="23"/>
+		<method name="unregisterNetworkCallback(Landroid/net/ConnectivityManager$NetworkCallback;)V" since="21"/>
+		<field name="ACTION_BACKGROUND_DATA_SETTING_CHANGED" since="3" deprecated="16"/>
+		<field name="ACTION_CAPTIVE_PORTAL_SIGN_IN" since="23"/>
+		<field name="ACTION_RESTRICT_BACKGROUND_CHANGED" since="24"/>
+		<field name="CONNECTIVITY_ACTION" deprecated="28"/>
+		<field name="DEFAULT_NETWORK_PREFERENCE" deprecated="18"/>
+		<field name="EXTRA_CAPTIVE_PORTAL" since="23"/>
+		<field name="EXTRA_CAPTIVE_PORTAL_URL" since="24"/>
+		<field name="EXTRA_EXTRA_INFO" deprecated="29"/>
+		<field name="EXTRA_IS_FAILOVER" deprecated="29"/>
+		<field name="EXTRA_NETWORK" since="22"/>
+		<field name="EXTRA_NETWORK_INFO" deprecated="15"/>
+		<field name="EXTRA_NETWORK_REQUEST" since="22"/>
+		<field name="EXTRA_NETWORK_TYPE" since="17" deprecated="29"/>
+		<field name="EXTRA_NO_CONNECTIVITY"/>
+		<field name="EXTRA_OTHER_NETWORK_INFO" deprecated="29"/>
+		<field name="EXTRA_REASON"/>
+		<field name="MULTIPATH_PREFERENCE_HANDOVER" since="26"/>
+		<field name="MULTIPATH_PREFERENCE_PERFORMANCE" since="26"/>
+		<field name="MULTIPATH_PREFERENCE_RELIABILITY" since="26"/>
+		<field name="RESTRICT_BACKGROUND_STATUS_DISABLED" since="24"/>
+		<field name="RESTRICT_BACKGROUND_STATUS_ENABLED" since="24"/>
+		<field name="RESTRICT_BACKGROUND_STATUS_WHITELISTED" since="24"/>
+		<field name="TYPE_BLUETOOTH" since="13" deprecated="28"/>
+		<field name="TYPE_DUMMY" since="14" deprecated="28"/>
+		<field name="TYPE_ETHERNET" since="13" deprecated="28"/>
+		<field name="TYPE_MOBILE" deprecated="28"/>
+		<field name="TYPE_MOBILE_DUN" since="8" deprecated="28"/>
+		<field name="TYPE_MOBILE_HIPRI" since="8" deprecated="23"/>
+		<field name="TYPE_MOBILE_MMS" since="8" deprecated="23"/>
+		<field name="TYPE_MOBILE_SUPL" since="8" deprecated="23"/>
+		<field name="TYPE_VPN" since="21" deprecated="28"/>
+		<field name="TYPE_WIFI" deprecated="28"/>
+		<field name="TYPE_WIMAX" since="8" deprecated="28"/>
+	</class>
+	<class name="android/net/ConnectivityManager$NetworkCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V" since="31"/>
+		<method name="onAvailable(Landroid/net/Network;)V"/>
+		<method name="onBlockedStatusChanged(Landroid/net/Network;Z)V" since="29"/>
+		<method name="onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V"/>
+		<method name="onLinkPropertiesChanged(Landroid/net/Network;Landroid/net/LinkProperties;)V"/>
+		<method name="onLosing(Landroid/net/Network;I)V"/>
+		<method name="onLost(Landroid/net/Network;)V"/>
+		<method name="onUnavailable()V" since="26"/>
+		<field name="FLAG_INCLUDE_LOCATION_INFO" since="31"/>
+	</class>
+	<class name="android/net/ConnectivityManager$OnNetworkActiveListener" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="onNetworkActive()V"/>
+	</class>
+	<class name="android/net/Credentials" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="getGid()I"/>
+		<method name="getPid()I"/>
+		<method name="getUid()I"/>
+	</class>
+	<class name="android/net/DhcpInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<field name="CREATOR" since="30"/>
+		<field name="dns1"/>
+		<field name="dns2"/>
+		<field name="gateway"/>
+		<field name="ipAddress"/>
+		<field name="leaseDuration"/>
+		<field name="netmask"/>
+		<field name="serverAddress"/>
+	</class>
+	<class name="android/net/DnsResolver" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getInstance()Landroid/net/DnsResolver;"/>
+		<method name="query(Landroid/net/Network;Ljava/lang/String;IILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+		<method name="query(Landroid/net/Network;Ljava/lang/String;ILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+		<method name="rawQuery(Landroid/net/Network;Ljava/lang/String;IIILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+		<method name="rawQuery(Landroid/net/Network;[BILjava/util/concurrent/Executor;Landroid/os/CancellationSignal;Landroid/net/DnsResolver$Callback;)V"/>
+		<field name="CLASS_IN"/>
+		<field name="ERROR_PARSE"/>
+		<field name="ERROR_SYSTEM"/>
+		<field name="FLAG_EMPTY"/>
+		<field name="FLAG_NO_CACHE_LOOKUP"/>
+		<field name="FLAG_NO_CACHE_STORE"/>
+		<field name="FLAG_NO_RETRY"/>
+		<field name="TYPE_A"/>
+		<field name="TYPE_AAAA"/>
+	</class>
+	<class name="android/net/DnsResolver$Callback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onAnswer(Ljava/lang/Object;I)V"/>
+		<method name="onError(Landroid/net/DnsResolver$DnsException;)V"/>
+	</class>
+	<class name="android/net/DnsResolver$DnsException" since="29">
+		<extends name="java/lang/Exception"/>
+		<field name="code"/>
+	</class>
+	<class name="android/net/Ikev2VpnProfile" since="30">
+		<extends name="android/net/PlatformVpnProfile"/>
+		<method name="getAllowedAlgorithms()Ljava/util/List;"/>
+		<method name="getMaxMtu()I"/>
+		<method name="getPassword()Ljava/lang/String;"/>
+		<method name="getPresharedKey()[B"/>
+		<method name="getProxyInfo()Landroid/net/ProxyInfo;"/>
+		<method name="getRsaPrivateKey()Ljava/security/PrivateKey;"/>
+		<method name="getServerAddr()Ljava/lang/String;"/>
+		<method name="getServerRootCaCert()Ljava/security/cert/X509Certificate;"/>
+		<method name="getUserCert()Ljava/security/cert/X509Certificate;"/>
+		<method name="getUserIdentity()Ljava/lang/String;"/>
+		<method name="getUsername()Ljava/lang/String;"/>
+		<method name="isBypassable()Z"/>
+		<method name="isMetered()Z"/>
+	</class>
+	<class name="android/net/Ikev2VpnProfile$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="build()Landroid/net/Ikev2VpnProfile;"/>
+		<method name="setAllowedAlgorithms(Ljava/util/List;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+		<method name="setAuthDigitalSignature(Ljava/security/cert/X509Certificate;Ljava/security/PrivateKey;Ljava/security/cert/X509Certificate;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+		<method name="setAuthPsk([B)Landroid/net/Ikev2VpnProfile$Builder;"/>
+		<method name="setAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/security/cert/X509Certificate;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+		<method name="setBypassable(Z)Landroid/net/Ikev2VpnProfile$Builder;"/>
+		<method name="setMaxMtu(I)Landroid/net/Ikev2VpnProfile$Builder;"/>
+		<method name="setMetered(Z)Landroid/net/Ikev2VpnProfile$Builder;"/>
+		<method name="setProxy(Landroid/net/ProxyInfo;)Landroid/net/Ikev2VpnProfile$Builder;"/>
+	</class>
+	<class name="android/net/InetAddresses" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="isNumericAddress(Ljava/lang/String;)Z"/>
+		<method name="parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;"/>
+	</class>
+	<class name="android/net/IpPrefix" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="contains(Ljava/net/InetAddress;)Z" since="23"/>
+		<method name="getAddress()Ljava/net/InetAddress;"/>
+		<method name="getPrefixLength()I"/>
+		<method name="getRawAddress()[B"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/IpSecAlgorithm" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[BI)V"/>
+		<method name="getKey()[B"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSupportedAlgorithms()Ljava/util/Set;" since="31"/>
+		<method name="getTruncationLengthBits()I"/>
+		<field name="AUTH_AES_CMAC" since="31"/>
+		<field name="AUTH_AES_XCBC" since="31"/>
+		<field name="AUTH_CRYPT_AES_GCM"/>
+		<field name="AUTH_CRYPT_CHACHA20_POLY1305" since="31"/>
+		<field name="AUTH_HMAC_MD5"/>
+		<field name="AUTH_HMAC_SHA1"/>
+		<field name="AUTH_HMAC_SHA256"/>
+		<field name="AUTH_HMAC_SHA384"/>
+		<field name="AUTH_HMAC_SHA512"/>
+		<field name="CREATOR"/>
+		<field name="CRYPT_AES_CBC"/>
+		<field name="CRYPT_AES_CTR" since="31"/>
+	</class>
+	<class name="android/net/IpSecManager" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;)Landroid/net/IpSecManager$SecurityParameterIndex;"/>
+		<method name="allocateSecurityParameterIndex(Ljava/net/InetAddress;I)Landroid/net/IpSecManager$SecurityParameterIndex;"/>
+		<method name="applyTransportModeTransform(Ljava/io/FileDescriptor;ILandroid/net/IpSecTransform;)V"/>
+		<method name="applyTransportModeTransform(Ljava/net/DatagramSocket;ILandroid/net/IpSecTransform;)V"/>
+		<method name="applyTransportModeTransform(Ljava/net/Socket;ILandroid/net/IpSecTransform;)V"/>
+		<method name="openUdpEncapsulationSocket()Landroid/net/IpSecManager$UdpEncapsulationSocket;"/>
+		<method name="openUdpEncapsulationSocket(I)Landroid/net/IpSecManager$UdpEncapsulationSocket;"/>
+		<method name="removeTransportModeTransforms(Ljava/io/FileDescriptor;)V"/>
+		<method name="removeTransportModeTransforms(Ljava/net/DatagramSocket;)V"/>
+		<method name="removeTransportModeTransforms(Ljava/net/Socket;)V"/>
+		<field name="DIRECTION_IN"/>
+		<field name="DIRECTION_OUT"/>
+	</class>
+	<class name="android/net/IpSecManager$ResourceUnavailableException" since="28">
+		<extends name="android/util/AndroidException"/>
+	</class>
+	<class name="android/net/IpSecManager$SecurityParameterIndex" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getSpi()I"/>
+	</class>
+	<class name="android/net/IpSecManager$SpiUnavailableException" since="28">
+		<extends name="android/util/AndroidException"/>
+		<method name="getSpi()I"/>
+	</class>
+	<class name="android/net/IpSecManager$UdpEncapsulationSocket" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
+		<method name="getPort()I"/>
+	</class>
+	<class name="android/net/IpSecTransform" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+	</class>
+	<class name="android/net/IpSecTransform$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="buildTransportModeTransform(Ljava/net/InetAddress;Landroid/net/IpSecManager$SecurityParameterIndex;)Landroid/net/IpSecTransform;"/>
+		<method name="setAuthenticatedEncryption(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;"/>
+		<method name="setAuthentication(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;"/>
+		<method name="setEncryption(Landroid/net/IpSecAlgorithm;)Landroid/net/IpSecTransform$Builder;"/>
+		<method name="setIpv4Encapsulation(Landroid/net/IpSecManager$UdpEncapsulationSocket;I)Landroid/net/IpSecTransform$Builder;"/>
+	</class>
+	<class name="android/net/LinkAddress" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAddress()Ljava/net/InetAddress;"/>
+		<method name="getFlags()I"/>
+		<method name="getPrefixLength()I"/>
+		<method name="getScope()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/LinkProperties" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" since="29"/>
+		<method name="addRoute(Landroid/net/RouteInfo;)Z" since="29"/>
+		<method name="clear()V" since="29"/>
+		<method name="getDhcpServerAddress()Ljava/net/Inet4Address;" since="30"/>
+		<method name="getDnsServers()Ljava/util/List;"/>
+		<method name="getDomains()Ljava/lang/String;"/>
+		<method name="getHttpProxy()Landroid/net/ProxyInfo;"/>
+		<method name="getInterfaceName()Ljava/lang/String;"/>
+		<method name="getLinkAddresses()Ljava/util/List;"/>
+		<method name="getMtu()I" since="29"/>
+		<method name="getNat64Prefix()Landroid/net/IpPrefix;" since="30"/>
+		<method name="getPrivateDnsServerName()Ljava/lang/String;" since="28"/>
+		<method name="getRoutes()Ljava/util/List;"/>
+		<method name="isPrivateDnsActive()Z" since="28"/>
+		<method name="isWakeOnLanSupported()Z" since="30"/>
+		<method name="setDhcpServerAddress(Ljava/net/Inet4Address;)V" since="30"/>
+		<method name="setDnsServers(Ljava/util/Collection;)V" since="29"/>
+		<method name="setDomains(Ljava/lang/String;)V" since="29"/>
+		<method name="setHttpProxy(Landroid/net/ProxyInfo;)V" since="29"/>
+		<method name="setInterfaceName(Ljava/lang/String;)V" since="29"/>
+		<method name="setLinkAddresses(Ljava/util/Collection;)V" since="29"/>
+		<method name="setMtu(I)V" since="29"/>
+		<method name="setNat64Prefix(Landroid/net/IpPrefix;)V" since="30"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/LocalServerSocket" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="28"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="accept()Landroid/net/LocalSocket;"/>
+		<method name="close()V"/>
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
+		<method name="getLocalSocketAddress()Landroid/net/LocalSocketAddress;"/>
+	</class>
+	<class name="android/net/LocalSocket" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="17"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V" since="19"/>
+		<method name="bind(Landroid/net/LocalSocketAddress;)V"/>
+		<method name="close()V"/>
+		<method name="connect(Landroid/net/LocalSocketAddress;)V"/>
+		<method name="connect(Landroid/net/LocalSocketAddress;I)V"/>
+		<method name="getAncillaryFileDescriptors()[Ljava/io/FileDescriptor;"/>
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getLocalSocketAddress()Landroid/net/LocalSocketAddress;"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="getPeerCredentials()Landroid/net/Credentials;"/>
+		<method name="getReceiveBufferSize()I"/>
+		<method name="getRemoteSocketAddress()Landroid/net/LocalSocketAddress;"/>
+		<method name="getSendBufferSize()I"/>
+		<method name="getSoTimeout()I"/>
+		<method name="isBound()Z"/>
+		<method name="isClosed()Z"/>
+		<method name="isConnected()Z"/>
+		<method name="isInputShutdown()Z"/>
+		<method name="isOutputShutdown()Z"/>
+		<method name="setFileDescriptorsForSend([Ljava/io/FileDescriptor;)V"/>
+		<method name="setReceiveBufferSize(I)V"/>
+		<method name="setSendBufferSize(I)V"/>
+		<method name="setSoTimeout(I)V"/>
+		<method name="shutdownInput()V"/>
+		<method name="shutdownOutput()V"/>
+		<field name="SOCKET_DGRAM" since="19"/>
+		<field name="SOCKET_SEQPACKET" since="19"/>
+		<field name="SOCKET_STREAM" since="19"/>
+	</class>
+	<class name="android/net/LocalSocketAddress" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/net/LocalSocketAddress$Namespace;)V"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getNamespace()Landroid/net/LocalSocketAddress$Namespace;"/>
+	</class>
+	<class name="android/net/LocalSocketAddress$Namespace" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/net/LocalSocketAddress$Namespace;"/>
+		<method name="values()[Landroid/net/LocalSocketAddress$Namespace;"/>
+		<field name="ABSTRACT"/>
+		<field name="FILESYSTEM"/>
+		<field name="RESERVED"/>
+	</class>
+	<class name="android/net/MacAddress" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="fromBytes([B)Landroid/net/MacAddress;"/>
+		<method name="fromString(Ljava/lang/String;)Landroid/net/MacAddress;"/>
+		<method name="getAddressType()I"/>
+		<method name="getLinkLocalIpv6FromEui48Mac()Ljava/net/Inet6Address;" since="30"/>
+		<method name="isLocallyAssigned()Z"/>
+		<method name="matches(Landroid/net/MacAddress;Landroid/net/MacAddress;)Z" since="30"/>
+		<method name="toByteArray()[B"/>
+		<method name="toOuiString()Ljava/lang/String;"/>
+		<field name="BROADCAST_ADDRESS"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_BROADCAST"/>
+		<field name="TYPE_MULTICAST"/>
+		<field name="TYPE_UNICAST"/>
+	</class>
+	<class name="android/net/MailTo" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getBody()Ljava/lang/String;"/>
+		<method name="getCc()Ljava/lang/String;"/>
+		<method name="getHeaders()Ljava/util/Map;"/>
+		<method name="getSubject()Ljava/lang/String;"/>
+		<method name="getTo()Ljava/lang/String;"/>
+		<method name="isMailTo(Ljava/lang/String;)Z"/>
+		<method name="parse(Ljava/lang/String;)Landroid/net/MailTo;"/>
+		<field name="MAILTO_SCHEME"/>
+	</class>
+	<class name="android/net/Network" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="bindSocket(Ljava/io/FileDescriptor;)V" since="23"/>
+		<method name="bindSocket(Ljava/net/DatagramSocket;)V" since="22"/>
+		<method name="bindSocket(Ljava/net/Socket;)V"/>
+		<method name="fromNetworkHandle(J)Landroid/net/Network;" since="28"/>
+		<method name="getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;"/>
+		<method name="getByName(Ljava/lang/String;)Ljava/net/InetAddress;"/>
+		<method name="getNetworkHandle()J" since="23"/>
+		<method name="getSocketFactory()Ljavax/net/SocketFactory;"/>
+		<method name="openConnection(Ljava/net/URL;)Ljava/net/URLConnection;"/>
+		<method name="openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;" since="23"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/NetworkCapabilities" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" since="30"/>
+		<method name="&lt;init>(Landroid/net/NetworkCapabilities;)V"/>
+		<method name="getCapabilities()[I" since="31"/>
+		<method name="getLinkDownstreamBandwidthKbps()I"/>
+		<method name="getLinkUpstreamBandwidthKbps()I"/>
+		<method name="getNetworkSpecifier()Landroid/net/NetworkSpecifier;" since="30"/>
+		<method name="getOwnerUid()I" since="30"/>
+		<method name="getSignalStrength()I" since="29"/>
+		<method name="getTransportInfo()Landroid/net/TransportInfo;" since="29"/>
+		<method name="hasCapability(I)Z"/>
+		<method name="hasTransport(I)Z"/>
+		<field name="CREATOR"/>
+		<field name="NET_CAPABILITY_CAPTIVE_PORTAL" since="23"/>
+		<field name="NET_CAPABILITY_CBS"/>
+		<field name="NET_CAPABILITY_DUN"/>
+		<field name="NET_CAPABILITY_EIMS"/>
+		<field name="NET_CAPABILITY_ENTERPRISE" since="31"/>
+		<field name="NET_CAPABILITY_FOREGROUND" since="28"/>
+		<field name="NET_CAPABILITY_FOTA"/>
+		<field name="NET_CAPABILITY_HEAD_UNIT" since="31"/>
+		<field name="NET_CAPABILITY_IA"/>
+		<field name="NET_CAPABILITY_IMS"/>
+		<field name="NET_CAPABILITY_INTERNET"/>
+		<field name="NET_CAPABILITY_MCX" since="29"/>
+		<field name="NET_CAPABILITY_MMS"/>
+		<field name="NET_CAPABILITY_NOT_CONGESTED" since="28"/>
+		<field name="NET_CAPABILITY_NOT_METERED"/>
+		<field name="NET_CAPABILITY_NOT_RESTRICTED"/>
+		<field name="NET_CAPABILITY_NOT_ROAMING" since="28"/>
+		<field name="NET_CAPABILITY_NOT_SUSPENDED" since="28"/>
+		<field name="NET_CAPABILITY_NOT_VPN"/>
+		<field name="NET_CAPABILITY_RCS"/>
+		<field name="NET_CAPABILITY_SUPL"/>
+		<field name="NET_CAPABILITY_TEMPORARILY_NOT_METERED" since="30"/>
+		<field name="NET_CAPABILITY_TRUSTED"/>
+		<field name="NET_CAPABILITY_VALIDATED" since="23"/>
+		<field name="NET_CAPABILITY_WIFI_P2P"/>
+		<field name="NET_CAPABILITY_XCAP"/>
+		<field name="SIGNAL_STRENGTH_UNSPECIFIED" since="29"/>
+		<field name="TRANSPORT_BLUETOOTH"/>
+		<field name="TRANSPORT_CELLULAR"/>
+		<field name="TRANSPORT_ETHERNET"/>
+		<field name="TRANSPORT_LOWPAN" since="27"/>
+		<field name="TRANSPORT_USB" since="31"/>
+		<field name="TRANSPORT_VPN"/>
+		<field name="TRANSPORT_WIFI"/>
+		<field name="TRANSPORT_WIFI_AWARE" since="26"/>
+	</class>
+	<class name="android/net/NetworkInfo" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I)V" removed="3"/>
+		<method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;)V" since="30" deprecated="30"/>
+		<method name="getDetailedState()Landroid/net/NetworkInfo$DetailedState;" deprecated="29"/>
+		<method name="getExtraInfo()Ljava/lang/String;" deprecated="29"/>
+		<method name="getReason()Ljava/lang/String;" deprecated="28"/>
+		<method name="getState()Landroid/net/NetworkInfo$State;" deprecated="28"/>
+		<method name="getSubtype()I" since="3" deprecated="29"/>
+		<method name="getSubtypeName()Ljava/lang/String;" since="3" deprecated="29"/>
+		<method name="getType()I" deprecated="28"/>
+		<method name="getTypeName()Ljava/lang/String;" deprecated="28"/>
+		<method name="isAvailable()Z" deprecated="28"/>
+		<method name="isConnected()Z" deprecated="29"/>
+		<method name="isConnectedOrConnecting()Z" deprecated="28"/>
+		<method name="isFailover()Z" deprecated="28"/>
+		<method name="isRoaming()Z" since="3" deprecated="28"/>
+		<method name="setDetailedState(Landroid/net/NetworkInfo$DetailedState;Ljava/lang/String;Ljava/lang/String;)V" since="30" deprecated="30"/>
+		<field name="CREATOR" since="24" deprecated="29"/>
+	</class>
+	<class name="android/net/NetworkInfo$DetailedState" since="1" deprecated="29">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$DetailedState;"/>
+		<method name="values()[Landroid/net/NetworkInfo$DetailedState;"/>
+		<field name="AUTHENTICATING" deprecated="29"/>
+		<field name="BLOCKED" since="14" deprecated="29"/>
+		<field name="CAPTIVE_PORTAL_CHECK" since="17" deprecated="29"/>
+		<field name="CONNECTED" deprecated="29"/>
+		<field name="CONNECTING" deprecated="29"/>
+		<field name="DISCONNECTED" deprecated="29"/>
+		<field name="DISCONNECTING" deprecated="29"/>
+		<field name="FAILED" deprecated="29"/>
+		<field name="IDLE" deprecated="29"/>
+		<field name="OBTAINING_IPADDR" deprecated="29"/>
+		<field name="SCANNING" deprecated="29"/>
+		<field name="SUSPENDED" deprecated="29"/>
+		<field name="VERIFYING_POOR_LINK" since="16" deprecated="29"/>
+	</class>
+	<class name="android/net/NetworkInfo$State" since="1" deprecated="29">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/net/NetworkInfo$State;"/>
+		<method name="values()[Landroid/net/NetworkInfo$State;"/>
+		<field name="CONNECTED" deprecated="29"/>
+		<field name="CONNECTING" deprecated="29"/>
+		<field name="DISCONNECTED" deprecated="29"/>
+		<field name="DISCONNECTING" deprecated="29"/>
+		<field name="SUSPENDED" deprecated="29"/>
+		<field name="UNKNOWN" deprecated="29"/>
+	</class>
+	<class name="android/net/NetworkRequest" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="canBeSatisfiedBy(Landroid/net/NetworkCapabilities;)Z" since="30"/>
+		<method name="getCapabilities()[I" since="31"/>
+		<method name="getNetworkSpecifier()Landroid/net/NetworkSpecifier;" since="30"/>
+		<method name="getTransportTypes()[I" since="31"/>
+		<method name="hasCapability(I)Z" since="28"/>
+		<method name="hasTransport(I)Z" since="28"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/NetworkRequest$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/NetworkRequest;)V" since="31"/>
+		<method name="addCapability(I)Landroid/net/NetworkRequest$Builder;"/>
+		<method name="addTransportType(I)Landroid/net/NetworkRequest$Builder;"/>
+		<method name="build()Landroid/net/NetworkRequest;"/>
+		<method name="clearCapabilities()Landroid/net/NetworkRequest$Builder;" since="30"/>
+		<method name="removeCapability(I)Landroid/net/NetworkRequest$Builder;"/>
+		<method name="removeTransportType(I)Landroid/net/NetworkRequest$Builder;"/>
+		<method name="setIncludeOtherUidNetworks(Z)Landroid/net/NetworkRequest$Builder;" since="31"/>
+		<method name="setNetworkSpecifier(Landroid/net/NetworkSpecifier;)Landroid/net/NetworkRequest$Builder;" since="26"/>
+		<method name="setNetworkSpecifier(Ljava/lang/String;)Landroid/net/NetworkRequest$Builder;" deprecated="30"/>
+	</class>
+	<class name="android/net/NetworkSpecifier" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="29"/>
+	</class>
+	<class name="android/net/ParseException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="31"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="31"/>
+		<field name="response"/>
+	</class>
+	<class name="android/net/PlatformVpnProfile" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getType()I"/>
+		<method name="getTypeString()Ljava/lang/String;"/>
+		<field name="TYPE_IKEV2_IPSEC_PSK"/>
+		<field name="TYPE_IKEV2_IPSEC_RSA"/>
+		<field name="TYPE_IKEV2_IPSEC_USER_PASS"/>
+	</class>
+	<class name="android/net/Proxy" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDefaultHost()Ljava/lang/String;" deprecated="15"/>
+		<method name="getDefaultPort()I" deprecated="15"/>
+		<method name="getHost(Landroid/content/Context;)Ljava/lang/String;" deprecated="15"/>
+		<method name="getPort(Landroid/content/Context;)I" deprecated="15"/>
+		<field name="EXTRA_PROXY_INFO" since="21" deprecated="23" removed="31"/>
+		<field name="PROXY_CHANGE_ACTION"/>
+	</class>
+	<class name="android/net/ProxyInfo" since="21" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/net/ProxyInfo;)V" since="30"/>
+		<method name="buildDirectProxy(Ljava/lang/String;I)Landroid/net/ProxyInfo;"/>
+		<method name="buildDirectProxy(Ljava/lang/String;ILjava/util/List;)Landroid/net/ProxyInfo;"/>
+		<method name="buildPacProxy(Landroid/net/Uri;)Landroid/net/ProxyInfo;"/>
+		<method name="buildPacProxy(Landroid/net/Uri;I)Landroid/net/ProxyInfo;" since="30"/>
+		<method name="getExclusionList()[Ljava/lang/String;"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getPacFileUrl()Landroid/net/Uri;"/>
+		<method name="getPort()I"/>
+		<method name="isValid()Z" since="30"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/PskKeyManager" since="21" removed="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="chooseClientKeyIdentity(Ljava/lang/String;Ljava/net/Socket;)Ljava/lang/String;"/>
+		<method name="chooseClientKeyIdentity(Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
+		<method name="chooseServerKeyIdentityHint(Ljava/net/Socket;)Ljava/lang/String;"/>
+		<method name="chooseServerKeyIdentityHint(Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
+		<method name="getKey(Ljava/lang/String;Ljava/lang/String;Ljava/net/Socket;)Ljavax/crypto/SecretKey;"/>
+		<method name="getKey(Ljava/lang/String;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)Ljavax/crypto/SecretKey;"/>
+		<field name="MAX_IDENTITY_HINT_LENGTH_BYTES"/>
+		<field name="MAX_IDENTITY_LENGTH_BYTES"/>
+		<field name="MAX_KEY_LENGTH_BYTES"/>
+	</class>
+	<class name="android/net/RouteInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDestination()Landroid/net/IpPrefix;"/>
+		<method name="getGateway()Ljava/net/InetAddress;"/>
+		<method name="getInterface()Ljava/lang/String;"/>
+		<method name="hasGateway()Z" since="29"/>
+		<method name="isDefaultRoute()Z"/>
+		<method name="matches(Ljava/net/InetAddress;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/SSLCertificateSocketFactory" since="1" deprecated="29">
+		<extends name="javax/net/ssl/SSLSocketFactory"/>
+		<method name="&lt;init>(I)V" deprecated="15"/>
+		<method name="getDefault(I)Ljavax/net/SocketFactory;" deprecated="29"/>
+		<method name="getDefault(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8" deprecated="29"/>
+		<method name="getHttpSocketFactory(ILandroid/net/SSLSessionCache;)Lorg/apache/http/conn/ssl/SSLSocketFactory;" since="8" deprecated="22" removed="23"/>
+		<method name="getInsecure(ILandroid/net/SSLSessionCache;)Ljavax/net/ssl/SSLSocketFactory;" since="8" deprecated="29"/>
+		<method name="getNpnSelectedProtocol(Ljava/net/Socket;)[B" since="16" deprecated="29"/>
+		<method name="setHostname(Ljava/net/Socket;Ljava/lang/String;)V" since="17" deprecated="29"/>
+		<method name="setKeyManagers([Ljavax/net/ssl/KeyManager;)V" since="14" deprecated="29"/>
+		<method name="setNpnProtocols([[B)V" since="16" deprecated="29"/>
+		<method name="setTrustManagers([Ljavax/net/ssl/TrustManager;)V" since="14" deprecated="29"/>
+		<method name="setUseSessionTickets(Ljava/net/Socket;Z)V" since="17" deprecated="29"/>
+	</class>
+	<class name="android/net/SSLSessionCache" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+	</class>
+	<class name="android/net/SocketKeepalive" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="start(I)V"/>
+		<method name="stop()V"/>
+		<field name="ERROR_HARDWARE_ERROR"/>
+		<field name="ERROR_INSUFFICIENT_RESOURCES"/>
+		<field name="ERROR_INVALID_INTERVAL"/>
+		<field name="ERROR_INVALID_IP_ADDRESS"/>
+		<field name="ERROR_INVALID_LENGTH"/>
+		<field name="ERROR_INVALID_NETWORK"/>
+		<field name="ERROR_INVALID_PORT"/>
+		<field name="ERROR_INVALID_SOCKET"/>
+		<field name="ERROR_SOCKET_NOT_IDLE"/>
+		<field name="ERROR_UNSUPPORTED"/>
+	</class>
+	<class name="android/net/SocketKeepalive$Callback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDataReceived()V"/>
+		<method name="onError(I)V"/>
+		<method name="onStarted()V"/>
+		<method name="onStopped()V"/>
+	</class>
+	<class name="android/net/TelephonyNetworkSpecifier" since="30">
+		<extends name="android/net/NetworkSpecifier"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getSubscriptionId()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/TelephonyNetworkSpecifier$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/TelephonyNetworkSpecifier;"/>
+		<method name="setSubscriptionId(I)Landroid/net/TelephonyNetworkSpecifier$Builder;"/>
+	</class>
+	<class name="android/net/TrafficStats" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="clearThreadStatsTag()V" since="14"/>
+		<method name="clearThreadStatsUid()V" since="28"/>
+		<method name="getAndSetThreadStatsTag(I)I" since="26"/>
+		<method name="getMobileRxBytes()J"/>
+		<method name="getMobileRxPackets()J"/>
+		<method name="getMobileTxBytes()J"/>
+		<method name="getMobileTxPackets()J"/>
+		<method name="getRxBytes(Ljava/lang/String;)J" since="31"/>
+		<method name="getRxPackets(Ljava/lang/String;)J" since="30"/>
+		<method name="getThreadStatsTag()I" since="14"/>
+		<method name="getThreadStatsUid()I" since="28"/>
+		<method name="getTotalRxBytes()J"/>
+		<method name="getTotalRxPackets()J"/>
+		<method name="getTotalTxBytes()J"/>
+		<method name="getTotalTxPackets()J"/>
+		<method name="getTxBytes(Ljava/lang/String;)J" since="31"/>
+		<method name="getTxPackets(Ljava/lang/String;)J" since="30"/>
+		<method name="getUidRxBytes(I)J"/>
+		<method name="getUidRxPackets(I)J" since="12"/>
+		<method name="getUidTcpRxBytes(I)J" since="12" deprecated="18"/>
+		<method name="getUidTcpRxSegments(I)J" since="12" deprecated="18"/>
+		<method name="getUidTcpTxBytes(I)J" since="12" deprecated="18"/>
+		<method name="getUidTcpTxSegments(I)J" since="12" deprecated="18"/>
+		<method name="getUidTxBytes(I)J"/>
+		<method name="getUidTxPackets(I)J" since="12"/>
+		<method name="getUidUdpRxBytes(I)J" since="12" deprecated="18"/>
+		<method name="getUidUdpRxPackets(I)J" since="12" deprecated="18"/>
+		<method name="getUidUdpTxBytes(I)J" since="12" deprecated="18"/>
+		<method name="getUidUdpTxPackets(I)J" since="12" deprecated="18"/>
+		<method name="incrementOperationCount(I)V" since="14"/>
+		<method name="incrementOperationCount(II)V" since="14"/>
+		<method name="setThreadStatsTag(I)V" since="14"/>
+		<method name="setThreadStatsUid(I)V" since="28"/>
+		<method name="tagDatagramSocket(Ljava/net/DatagramSocket;)V" since="24"/>
+		<method name="tagFileDescriptor(Ljava/io/FileDescriptor;)V" since="28"/>
+		<method name="tagSocket(Ljava/net/Socket;)V" since="14"/>
+		<method name="untagDatagramSocket(Ljava/net/DatagramSocket;)V" since="24"/>
+		<method name="untagFileDescriptor(Ljava/io/FileDescriptor;)V" since="28"/>
+		<method name="untagSocket(Ljava/net/Socket;)V" since="14"/>
+		<field name="UNSUPPORTED"/>
+	</class>
+	<class name="android/net/TransportInfo" since="29">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/net/Uri" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="buildUpon()Landroid/net/Uri$Builder;"/>
+		<method name="compareTo(Landroid/net/Uri;)I"/>
+		<method name="decode(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="encode(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="fromFile(Ljava/io/File;)Landroid/net/Uri;"/>
+		<method name="fromParts(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getAuthority()Ljava/lang/String;"/>
+		<method name="getBooleanQueryParameter(Ljava/lang/String;Z)Z" since="11"/>
+		<method name="getEncodedAuthority()Ljava/lang/String;"/>
+		<method name="getEncodedFragment()Ljava/lang/String;"/>
+		<method name="getEncodedPath()Ljava/lang/String;"/>
+		<method name="getEncodedQuery()Ljava/lang/String;"/>
+		<method name="getEncodedSchemeSpecificPart()Ljava/lang/String;"/>
+		<method name="getEncodedUserInfo()Ljava/lang/String;"/>
+		<method name="getFragment()Ljava/lang/String;"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getLastPathSegment()Ljava/lang/String;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getPathSegments()Ljava/util/List;"/>
+		<method name="getPort()I"/>
+		<method name="getQuery()Ljava/lang/String;"/>
+		<method name="getQueryParameter(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getQueryParameterNames()Ljava/util/Set;" since="11"/>
+		<method name="getQueryParameters(Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="getScheme()Ljava/lang/String;"/>
+		<method name="getSchemeSpecificPart()Ljava/lang/String;"/>
+		<method name="getUserInfo()Ljava/lang/String;"/>
+		<method name="isAbsolute()Z"/>
+		<method name="isHierarchical()Z"/>
+		<method name="isOpaque()Z"/>
+		<method name="isRelative()Z"/>
+		<method name="normalizeScheme()Landroid/net/Uri;" since="16"/>
+		<method name="parse(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="withAppendedPath(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="writeToParcel(Landroid/os/Parcel;Landroid/net/Uri;)V"/>
+		<field name="CREATOR"/>
+		<field name="EMPTY"/>
+	</class>
+	<class name="android/net/Uri$Builder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="appendEncodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="appendPath(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="appendQueryParameter(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="authority(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="build()Landroid/net/Uri;"/>
+		<method name="clearQuery()Landroid/net/Uri$Builder;" since="11"/>
+		<method name="encodedAuthority(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="encodedFragment(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="encodedOpaquePart(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="encodedPath(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="encodedQuery(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="fragment(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="opaquePart(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="path(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="query(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+		<method name="scheme(Ljava/lang/String;)Landroid/net/Uri$Builder;"/>
+	</class>
+	<class name="android/net/UrlQuerySanitizer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="addSanitizedEntry(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="clear()V"/>
+		<method name="decodeHexDigit(C)I"/>
+		<method name="getAllButNulAndAngleBracketsLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getAllButNulLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getAllButWhitespaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getAllIllegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getAllowUnregisteredParamaters()Z"/>
+		<method name="getAmpAndSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getAmpLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getEffectiveValueSanitizer(Ljava/lang/String;)Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getParameterList()Ljava/util/List;"/>
+		<method name="getParameterSet()Ljava/util/Set;"/>
+		<method name="getPreferFirstRepeatedParameter()Z"/>
+		<method name="getSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getUnregisteredParameterValueSanitizer()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getUrlAndSpaceLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getUrlLegal()Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getValueSanitizer(Ljava/lang/String;)Landroid/net/UrlQuerySanitizer$ValueSanitizer;"/>
+		<method name="hasParameter(Ljava/lang/String;)Z"/>
+		<method name="isHexDigit(C)Z"/>
+		<method name="parseEntry(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="parseQuery(Ljava/lang/String;)V"/>
+		<method name="parseUrl(Ljava/lang/String;)V"/>
+		<method name="registerParameter(Ljava/lang/String;Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V"/>
+		<method name="registerParameters([Ljava/lang/String;Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V"/>
+		<method name="setAllowUnregisteredParamaters(Z)V"/>
+		<method name="setPreferFirstRepeatedParameter(Z)V"/>
+		<method name="setUnregisteredParameterValueSanitizer(Landroid/net/UrlQuerySanitizer$ValueSanitizer;)V"/>
+		<method name="unescape(Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="android/net/UrlQuerySanitizer$IllegalCharacterValueSanitizer" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/UrlQuerySanitizer$ValueSanitizer"/>
+		<method name="&lt;init>(I)V"/>
+		<field name="ALL_BUT_NUL_AND_ANGLE_BRACKETS_LEGAL"/>
+		<field name="ALL_BUT_NUL_LEGAL"/>
+		<field name="ALL_BUT_WHITESPACE_LEGAL"/>
+		<field name="ALL_ILLEGAL"/>
+		<field name="ALL_OK"/>
+		<field name="ALL_WHITESPACE_OK"/>
+		<field name="AMP_AND_SPACE_LEGAL"/>
+		<field name="AMP_LEGAL"/>
+		<field name="AMP_OK"/>
+		<field name="DQUOTE_OK"/>
+		<field name="GT_OK"/>
+		<field name="LT_OK"/>
+		<field name="NON_7_BIT_ASCII_OK"/>
+		<field name="NUL_OK"/>
+		<field name="OTHER_WHITESPACE_OK"/>
+		<field name="PCT_OK"/>
+		<field name="SCRIPT_URL_OK"/>
+		<field name="SPACE_LEGAL"/>
+		<field name="SPACE_OK"/>
+		<field name="SQUOTE_OK"/>
+		<field name="URL_AND_SPACE_LEGAL"/>
+		<field name="URL_LEGAL"/>
+	</class>
+	<class name="android/net/UrlQuerySanitizer$ParameterValuePair" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/UrlQuerySanitizer;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="mParameter"/>
+		<field name="mValue"/>
+	</class>
+	<class name="android/net/UrlQuerySanitizer$ValueSanitizer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="sanitize(Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="android/net/VpnManager" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="deleteProvisionedVpnProfile()V"/>
+		<method name="provisionVpnProfile(Landroid/net/PlatformVpnProfile;)Landroid/content/Intent;"/>
+		<method name="startProvisionedVpnProfile()V"/>
+		<method name="stopProvisionedVpnProfile()V"/>
+	</class>
+	<class name="android/net/VpnService" since="14">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="isAlwaysOn()Z" since="29"/>
+		<method name="isLockdownEnabled()Z" since="29"/>
+		<method name="onRevoke()V"/>
+		<method name="prepare(Landroid/content/Context;)Landroid/content/Intent;"/>
+		<method name="protect(I)Z"/>
+		<method name="protect(Ljava/net/DatagramSocket;)Z"/>
+		<method name="protect(Ljava/net/Socket;)Z"/>
+		<method name="setUnderlyingNetworks([Landroid/net/Network;)Z" since="22"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA_SUPPORTS_ALWAYS_ON" since="27"/>
+	</class>
+	<class name="android/net/VpnService$Builder" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/VpnService;)V"/>
+		<method name="addAddress(Ljava/lang/String;I)Landroid/net/VpnService$Builder;"/>
+		<method name="addAddress(Ljava/net/InetAddress;I)Landroid/net/VpnService$Builder;"/>
+		<method name="addAllowedApplication(Ljava/lang/String;)Landroid/net/VpnService$Builder;" since="21"/>
+		<method name="addDisallowedApplication(Ljava/lang/String;)Landroid/net/VpnService$Builder;" since="21"/>
+		<method name="addDnsServer(Ljava/lang/String;)Landroid/net/VpnService$Builder;"/>
+		<method name="addDnsServer(Ljava/net/InetAddress;)Landroid/net/VpnService$Builder;"/>
+		<method name="addRoute(Ljava/lang/String;I)Landroid/net/VpnService$Builder;"/>
+		<method name="addRoute(Ljava/net/InetAddress;I)Landroid/net/VpnService$Builder;"/>
+		<method name="addSearchDomain(Ljava/lang/String;)Landroid/net/VpnService$Builder;"/>
+		<method name="allowBypass()Landroid/net/VpnService$Builder;" since="21"/>
+		<method name="allowFamily(I)Landroid/net/VpnService$Builder;" since="21"/>
+		<method name="establish()Landroid/os/ParcelFileDescriptor;"/>
+		<method name="setBlocking(Z)Landroid/net/VpnService$Builder;" since="21"/>
+		<method name="setConfigureIntent(Landroid/app/PendingIntent;)Landroid/net/VpnService$Builder;"/>
+		<method name="setHttpProxy(Landroid/net/ProxyInfo;)Landroid/net/VpnService$Builder;" since="29"/>
+		<method name="setMetered(Z)Landroid/net/VpnService$Builder;" since="29"/>
+		<method name="setMtu(I)Landroid/net/VpnService$Builder;"/>
+		<method name="setSession(Ljava/lang/String;)Landroid/net/VpnService$Builder;"/>
+		<method name="setUnderlyingNetworks([Landroid/net/Network;)Landroid/net/VpnService$Builder;" since="22"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getEapAkaConfig()Landroid/net/eap/EapSessionConfig$EapAkaConfig;"/>
+		<method name="getEapAkaPrimeConfig()Landroid/net/eap/EapSessionConfig$EapAkaPrimeConfig;"/>
+		<method name="getEapIdentity()[B"/>
+		<method name="getEapMsChapV2Config()Landroid/net/eap/EapSessionConfig$EapMsChapV2Config;"/>
+		<method name="getEapSimConfig()Landroid/net/eap/EapSessionConfig$EapSimConfig;"/>
+		<method name="getEapTtlsConfig()Landroid/net/eap/EapSessionConfig$EapTtlsConfig;"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/eap/EapSessionConfig;"/>
+		<method name="setEapAkaConfig(II)Landroid/net/eap/EapSessionConfig$Builder;"/>
+		<method name="setEapAkaPrimeConfig(IILjava/lang/String;Z)Landroid/net/eap/EapSessionConfig$Builder;"/>
+		<method name="setEapIdentity([B)Landroid/net/eap/EapSessionConfig$Builder;"/>
+		<method name="setEapMsChapV2Config(Ljava/lang/String;Ljava/lang/String;)Landroid/net/eap/EapSessionConfig$Builder;"/>
+		<method name="setEapSimConfig(II)Landroid/net/eap/EapSessionConfig$Builder;"/>
+		<method name="setEapTtlsConfig(Ljava/security/cert/X509Certificate;Landroid/net/eap/EapSessionConfig;)Landroid/net/eap/EapSessionConfig$Builder;"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig$EapAkaConfig" since="31">
+		<extends name="android/net/eap/EapSessionConfig$EapMethodConfig"/>
+		<method name="getAppType()I"/>
+		<method name="getSubId()I"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig$EapAkaPrimeConfig" since="31">
+		<extends name="android/net/eap/EapSessionConfig$EapAkaConfig"/>
+		<method name="allowsMismatchedNetworkNames()Z"/>
+		<method name="getNetworkName()Ljava/lang/String;"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig$EapMethodConfig" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getMethodType()I"/>
+		<field name="EAP_TYPE_AKA"/>
+		<field name="EAP_TYPE_AKA_PRIME"/>
+		<field name="EAP_TYPE_MSCHAP_V2"/>
+		<field name="EAP_TYPE_SIM"/>
+		<field name="EAP_TYPE_TTLS"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig$EapMsChapV2Config" since="31">
+		<extends name="android/net/eap/EapSessionConfig$EapMethodConfig"/>
+		<method name="getPassword()Ljava/lang/String;"/>
+		<method name="getUsername()Ljava/lang/String;"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig$EapSimConfig" since="31">
+		<extends name="android/net/eap/EapSessionConfig$EapMethodConfig"/>
+		<method name="getAppType()I"/>
+		<method name="getSubId()I"/>
+	</class>
+	<class name="android/net/eap/EapSessionConfig$EapTtlsConfig" since="31">
+		<extends name="android/net/eap/EapSessionConfig$EapMethodConfig"/>
+		<method name="getInnerEapSessionConfig()Landroid/net/eap/EapSessionConfig;"/>
+		<method name="getServerCaCert()Ljava/security/cert/X509Certificate;"/>
+	</class>
+	<class name="android/net/http/AndroidHttpClient" since="8" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/HttpClient"/>
+		<method name="close()V"/>
+		<method name="disableCurlLogging()V"/>
+		<method name="enableCurlLogging(Ljava/lang/String;I)V"/>
+		<method name="getCompressedEntity([BLandroid/content/ContentResolver;)Lorg/apache/http/entity/AbstractHttpEntity;"/>
+		<method name="getMinGzipSize(Landroid/content/ContentResolver;)J"/>
+		<method name="getUngzippedContent(Lorg/apache/http/HttpEntity;)Ljava/io/InputStream;"/>
+		<method name="modifyRequestToAcceptGzipResponse(Lorg/apache/http/HttpRequest;)V"/>
+		<method name="newInstance(Ljava/lang/String;)Landroid/net/http/AndroidHttpClient;" deprecated="22"/>
+		<method name="newInstance(Ljava/lang/String;Landroid/content/Context;)Landroid/net/http/AndroidHttpClient;" deprecated="22"/>
+		<method name="parseDate(Ljava/lang/String;)J"/>
+		<field name="DEFAULT_SYNC_MIN_GZIP_BYTES"/>
+	</class>
+	<class name="android/net/http/HttpResponseCache" since="14">
+		<extends name="java/net/ResponseCache"/>
+		<implements name="java/io/Closeable"/>
+		<method name="delete()V"/>
+		<method name="flush()V"/>
+		<method name="getHitCount()I"/>
+		<method name="getInstalled()Landroid/net/http/HttpResponseCache;"/>
+		<method name="getNetworkCount()I"/>
+		<method name="getRequestCount()I"/>
+		<method name="install(Ljava/io/File;J)Landroid/net/http/HttpResponseCache;"/>
+		<method name="maxSize()J"/>
+		<method name="size()J"/>
+	</class>
+	<class name="android/net/http/SslCertificate" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Date;Ljava/util/Date;)V" since="8" deprecated="15"/>
+		<method name="&lt;init>(Ljava/security/cert/X509Certificate;)V"/>
+		<method name="getIssuedBy()Landroid/net/http/SslCertificate$DName;"/>
+		<method name="getIssuedTo()Landroid/net/http/SslCertificate$DName;"/>
+		<method name="getValidNotAfter()Ljava/lang/String;" deprecated="15"/>
+		<method name="getValidNotAfterDate()Ljava/util/Date;" since="8"/>
+		<method name="getValidNotBefore()Ljava/lang/String;" deprecated="15"/>
+		<method name="getValidNotBeforeDate()Ljava/util/Date;" since="8"/>
+		<method name="getX509Certificate()Ljava/security/cert/X509Certificate;" since="29"/>
+		<method name="restoreState(Landroid/os/Bundle;)Landroid/net/http/SslCertificate;"/>
+		<method name="saveState(Landroid/net/http/SslCertificate;)Landroid/os/Bundle;"/>
+	</class>
+	<class name="android/net/http/SslCertificate$DName" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/http/SslCertificate;Ljava/lang/String;)V"/>
+		<method name="getCName()Ljava/lang/String;"/>
+		<method name="getDName()Ljava/lang/String;"/>
+		<method name="getOName()Ljava/lang/String;"/>
+		<method name="getUName()Ljava/lang/String;"/>
+	</class>
+	<class name="android/net/http/SslError" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILandroid/net/http/SslCertificate;)V" deprecated="15"/>
+		<method name="&lt;init>(ILandroid/net/http/SslCertificate;Ljava/lang/String;)V" since="14"/>
+		<method name="&lt;init>(ILjava/security/cert/X509Certificate;)V" deprecated="15"/>
+		<method name="&lt;init>(ILjava/security/cert/X509Certificate;Ljava/lang/String;)V" since="14"/>
+		<method name="addError(I)Z"/>
+		<method name="getCertificate()Landroid/net/http/SslCertificate;"/>
+		<method name="getPrimaryError()I"/>
+		<method name="getUrl()Ljava/lang/String;" since="14"/>
+		<method name="hasError(I)Z"/>
+		<field name="SSL_DATE_INVALID" since="14"/>
+		<field name="SSL_EXPIRED"/>
+		<field name="SSL_IDMISMATCH"/>
+		<field name="SSL_INVALID" since="14"/>
+		<field name="SSL_MAX_ERROR" deprecated="15"/>
+		<field name="SSL_NOTYETVALID"/>
+		<field name="SSL_UNTRUSTED"/>
+	</class>
+	<class name="android/net/http/X509TrustManagerExtensions" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/net/ssl/X509TrustManager;)V"/>
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="isSameTrustConfiguration(Ljava/lang/String;Ljava/lang/String;)Z" since="28"/>
+		<method name="isUserAddedCertificate(Ljava/security/cert/X509Certificate;)Z" since="21"/>
+	</class>
+	<class name="android/net/ipsec/ike/ChildSaProposal" since="31">
+		<extends name="android/net/ipsec/ike/SaProposal"/>
+		<method name="getSupportedEncryptionAlgorithms()Ljava/util/Set;"/>
+		<method name="getSupportedIntegrityAlgorithms()Ljava/util/Set;"/>
+	</class>
+	<class name="android/net/ipsec/ike/ChildSaProposal$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addDhGroup(I)Landroid/net/ipsec/ike/ChildSaProposal$Builder;"/>
+		<method name="addEncryptionAlgorithm(II)Landroid/net/ipsec/ike/ChildSaProposal$Builder;"/>
+		<method name="addIntegrityAlgorithm(I)Landroid/net/ipsec/ike/ChildSaProposal$Builder;"/>
+		<method name="build()Landroid/net/ipsec/ike/ChildSaProposal;"/>
+	</class>
+	<class name="android/net/ipsec/ike/ChildSessionCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onClosed()V"/>
+		<method name="onClosedWithException(Landroid/net/ipsec/ike/exceptions/IkeException;)V"/>
+		<method name="onIpSecTransformCreated(Landroid/net/IpSecTransform;I)V"/>
+		<method name="onIpSecTransformDeleted(Landroid/net/IpSecTransform;I)V"/>
+		<method name="onOpened(Landroid/net/ipsec/ike/ChildSessionConfiguration;)V"/>
+	</class>
+	<class name="android/net/ipsec/ike/ChildSessionConfiguration" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getInboundTrafficSelectors()Ljava/util/List;"/>
+		<method name="getOutboundTrafficSelectors()Ljava/util/List;"/>
+	</class>
+	<class name="android/net/ipsec/ike/ChildSessionConfiguration$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/List;Ljava/util/List;)V"/>
+		<method name="build()Landroid/net/ipsec/ike/ChildSessionConfiguration;"/>
+	</class>
+	<class name="android/net/ipsec/ike/ChildSessionParams" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getChildSaProposals()Ljava/util/List;"/>
+		<method name="getHardLifetimeSeconds()I"/>
+		<method name="getInboundTrafficSelectors()Ljava/util/List;"/>
+		<method name="getOutboundTrafficSelectors()Ljava/util/List;"/>
+		<method name="getSoftLifetimeSeconds()I"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeDerAsn1DnIdentification" since="31">
+		<extends name="android/net/ipsec/ike/IkeIdentification"/>
+		<method name="&lt;init>(Ljavax/security/auth/x500/X500Principal;)V"/>
+		<field name="derAsn1Dn"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeFqdnIdentification" since="31">
+		<extends name="android/net/ipsec/ike/IkeIdentification"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="fqdn"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeIdentification" since="31">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeIpv4AddrIdentification" since="31">
+		<extends name="android/net/ipsec/ike/IkeIdentification"/>
+		<method name="&lt;init>(Ljava/net/Inet4Address;)V"/>
+		<field name="ipv4Address"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeIpv6AddrIdentification" since="31">
+		<extends name="android/net/ipsec/ike/IkeIdentification"/>
+		<method name="&lt;init>(Ljava/net/Inet6Address;)V"/>
+		<field name="ipv6Address"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeKeyIdIdentification" since="31">
+		<extends name="android/net/ipsec/ike/IkeIdentification"/>
+		<method name="&lt;init>([B)V"/>
+		<field name="keyId"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeRfc822AddrIdentification" since="31">
+		<extends name="android/net/ipsec/ike/IkeIdentification"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="rfc822Name"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSaProposal" since="31">
+		<extends name="android/net/ipsec/ike/SaProposal"/>
+		<method name="getPseudorandomFunctions()Ljava/util/List;"/>
+		<method name="getSupportedEncryptionAlgorithms()Ljava/util/Set;"/>
+		<method name="getSupportedIntegrityAlgorithms()Ljava/util/Set;"/>
+		<method name="getSupportedPseudorandomFunctions()Ljava/util/Set;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSaProposal$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addDhGroup(I)Landroid/net/ipsec/ike/IkeSaProposal$Builder;"/>
+		<method name="addEncryptionAlgorithm(II)Landroid/net/ipsec/ike/IkeSaProposal$Builder;"/>
+		<method name="addIntegrityAlgorithm(I)Landroid/net/ipsec/ike/IkeSaProposal$Builder;"/>
+		<method name="addPseudorandomFunction(I)Landroid/net/ipsec/ike/IkeSaProposal$Builder;"/>
+		<method name="build()Landroid/net/ipsec/ike/IkeSaProposal;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSession" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/net/ipsec/ike/IkeSessionParams;Landroid/net/ipsec/ike/ChildSessionParams;Ljava/util/concurrent/Executor;Landroid/net/ipsec/ike/IkeSessionCallback;Landroid/net/ipsec/ike/ChildSessionCallback;)V"/>
+		<method name="closeChildSession(Landroid/net/ipsec/ike/ChildSessionCallback;)V"/>
+		<method name="kill()V"/>
+		<method name="openChildSession(Landroid/net/ipsec/ike/ChildSessionParams;Landroid/net/ipsec/ike/ChildSessionCallback;)V"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onClosed()V"/>
+		<method name="onClosedWithException(Landroid/net/ipsec/ike/exceptions/IkeException;)V"/>
+		<method name="onError(Landroid/net/ipsec/ike/exceptions/IkeException;)V"/>
+		<method name="onOpened(Landroid/net/ipsec/ike/IkeSessionConfiguration;)V"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionConfiguration" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getIkeSessionConnectionInfo()Landroid/net/ipsec/ike/IkeSessionConnectionInfo;"/>
+		<method name="getRemoteApplicationVersion()Ljava/lang/String;"/>
+		<method name="getRemoteVendorIds()Ljava/util/List;"/>
+		<method name="isIkeExtensionEnabled(I)Z"/>
+		<field name="EXTENSION_TYPE_FRAGMENTATION"/>
+		<field name="EXTENSION_TYPE_MOBIKE"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionConfiguration$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/ipsec/ike/IkeSessionConnectionInfo;)V"/>
+		<method name="addIkeExtension(I)Landroid/net/ipsec/ike/IkeSessionConfiguration$Builder;"/>
+		<method name="addRemoteVendorId([B)Landroid/net/ipsec/ike/IkeSessionConfiguration$Builder;"/>
+		<method name="build()Landroid/net/ipsec/ike/IkeSessionConfiguration;"/>
+		<method name="clearIkeExtensions()Landroid/net/ipsec/ike/IkeSessionConfiguration$Builder;"/>
+		<method name="clearRemoteApplicationVersion()Landroid/net/ipsec/ike/IkeSessionConfiguration$Builder;"/>
+		<method name="clearRemoteVendorIds()Landroid/net/ipsec/ike/IkeSessionConfiguration$Builder;"/>
+		<method name="setRemoteApplicationVersion(Ljava/lang/String;)Landroid/net/ipsec/ike/IkeSessionConfiguration$Builder;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionConnectionInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;Ljava/net/InetAddress;Landroid/net/Network;)V"/>
+		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
+		<method name="getNetwork()Landroid/net/Network;"/>
+		<method name="getRemoteAddress()Ljava/net/InetAddress;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionParams" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDpdDelaySeconds()I"/>
+		<method name="getHardLifetimeSeconds()I"/>
+		<method name="getIkeSaProposals()Ljava/util/List;"/>
+		<method name="getLocalAuthConfig()Landroid/net/ipsec/ike/IkeSessionParams$IkeAuthConfig;"/>
+		<method name="getLocalIdentification()Landroid/net/ipsec/ike/IkeIdentification;"/>
+		<method name="getNattKeepAliveDelaySeconds()I"/>
+		<method name="getNetwork()Landroid/net/Network;"/>
+		<method name="getRemoteAuthConfig()Landroid/net/ipsec/ike/IkeSessionParams$IkeAuthConfig;"/>
+		<method name="getRemoteIdentification()Landroid/net/ipsec/ike/IkeIdentification;"/>
+		<method name="getRetransmissionTimeoutsMillis()[I"/>
+		<method name="getServerHostname()Ljava/lang/String;"/>
+		<method name="getSoftLifetimeSeconds()I"/>
+		<method name="hasIkeOption(I)Z"/>
+		<field name="IKE_OPTION_ACCEPT_ANY_REMOTE_ID"/>
+		<field name="IKE_OPTION_EAP_ONLY_AUTH"/>
+		<field name="IKE_OPTION_FORCE_PORT_4500"/>
+		<field name="IKE_OPTION_MOBIKE"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionParams$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/ipsec/ike/IkeSessionParams;)V"/>
+		<method name="addIkeOption(I)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="addIkeSaProposal(Landroid/net/ipsec/ike/IkeSaProposal;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="build()Landroid/net/ipsec/ike/IkeSessionParams;"/>
+		<method name="removeIkeOption(I)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setAuthDigitalSignature(Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;Ljava/security/PrivateKey;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setAuthDigitalSignature(Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;Ljava/util/List;Ljava/security/PrivateKey;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setAuthEap(Ljava/security/cert/X509Certificate;Landroid/net/eap/EapSessionConfig;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setAuthPsk([B)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setDpdDelaySeconds(I)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setLifetimeSeconds(II)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setLocalIdentification(Landroid/net/ipsec/ike/IkeIdentification;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setNattKeepAliveDelaySeconds(I)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setNetwork(Landroid/net/Network;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setRemoteIdentification(Landroid/net/ipsec/ike/IkeIdentification;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setRetransmissionTimeoutsMillis([I)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+		<method name="setServerHostname(Ljava/lang/String;)Landroid/net/ipsec/ike/IkeSessionParams$Builder;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionParams$IkeAuthConfig" since="31">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionParams$IkeAuthDigitalSignLocalConfig" since="31">
+		<extends name="android/net/ipsec/ike/IkeSessionParams$IkeAuthConfig"/>
+		<method name="getClientEndCertificate()Ljava/security/cert/X509Certificate;"/>
+		<method name="getIntermediateCertificates()Ljava/util/List;"/>
+		<method name="getPrivateKey()Ljava/security/PrivateKey;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionParams$IkeAuthDigitalSignRemoteConfig" since="31">
+		<extends name="android/net/ipsec/ike/IkeSessionParams$IkeAuthConfig"/>
+		<method name="getRemoteCaCert()Ljava/security/cert/X509Certificate;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionParams$IkeAuthEapConfig" since="31">
+		<extends name="android/net/ipsec/ike/IkeSessionParams$IkeAuthConfig"/>
+		<method name="getEapConfig()Landroid/net/eap/EapSessionConfig;"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeSessionParams$IkeAuthPskConfig" since="31">
+		<extends name="android/net/ipsec/ike/IkeSessionParams$IkeAuthConfig"/>
+		<method name="getPsk()[B"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeTrafficSelector" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IILjava/net/InetAddress;Ljava/net/InetAddress;)V"/>
+		<field name="endPort"/>
+		<field name="endingAddress"/>
+		<field name="startPort"/>
+		<field name="startingAddress"/>
+	</class>
+	<class name="android/net/ipsec/ike/IkeTunnelConnectionParams" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/ipsec/ike/IkeSessionParams;Landroid/net/ipsec/ike/TunnelModeChildSessionParams;)V"/>
+		<method name="getIkeSessionParams()Landroid/net/ipsec/ike/IkeSessionParams;"/>
+		<method name="getTunnelModeChildSessionParams()Landroid/net/ipsec/ike/TunnelModeChildSessionParams;"/>
+	</class>
+	<class name="android/net/ipsec/ike/SaProposal" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getDhGroups()Ljava/util/List;"/>
+		<method name="getEncryptionAlgorithms()Ljava/util/List;"/>
+		<method name="getIntegrityAlgorithms()Ljava/util/List;"/>
+		<method name="getSupportedDhGroups()Ljava/util/Set;"/>
+		<field name="DH_GROUP_1024_BIT_MODP"/>
+		<field name="DH_GROUP_1536_BIT_MODP"/>
+		<field name="DH_GROUP_2048_BIT_MODP"/>
+		<field name="DH_GROUP_3072_BIT_MODP"/>
+		<field name="DH_GROUP_4096_BIT_MODP"/>
+		<field name="DH_GROUP_CURVE_25519"/>
+		<field name="DH_GROUP_NONE"/>
+		<field name="ENCRYPTION_ALGORITHM_3DES"/>
+		<field name="ENCRYPTION_ALGORITHM_AES_CBC"/>
+		<field name="ENCRYPTION_ALGORITHM_AES_CTR"/>
+		<field name="ENCRYPTION_ALGORITHM_AES_GCM_12"/>
+		<field name="ENCRYPTION_ALGORITHM_AES_GCM_16"/>
+		<field name="ENCRYPTION_ALGORITHM_AES_GCM_8"/>
+		<field name="ENCRYPTION_ALGORITHM_CHACHA20_POLY1305"/>
+		<field name="INTEGRITY_ALGORITHM_AES_CMAC_96"/>
+		<field name="INTEGRITY_ALGORITHM_AES_XCBC_96"/>
+		<field name="INTEGRITY_ALGORITHM_HMAC_SHA1_96"/>
+		<field name="INTEGRITY_ALGORITHM_HMAC_SHA2_256_128"/>
+		<field name="INTEGRITY_ALGORITHM_HMAC_SHA2_384_192"/>
+		<field name="INTEGRITY_ALGORITHM_HMAC_SHA2_512_256"/>
+		<field name="INTEGRITY_ALGORITHM_NONE"/>
+		<field name="KEY_LEN_AES_128"/>
+		<field name="KEY_LEN_AES_192"/>
+		<field name="KEY_LEN_AES_256"/>
+		<field name="KEY_LEN_UNUSED"/>
+		<field name="PSEUDORANDOM_FUNCTION_AES128_CMAC"/>
+		<field name="PSEUDORANDOM_FUNCTION_AES128_XCBC"/>
+		<field name="PSEUDORANDOM_FUNCTION_HMAC_SHA1"/>
+		<field name="PSEUDORANDOM_FUNCTION_SHA2_256"/>
+		<field name="PSEUDORANDOM_FUNCTION_SHA2_384"/>
+		<field name="PSEUDORANDOM_FUNCTION_SHA2_512"/>
+	</class>
+	<class name="android/net/ipsec/ike/TransportModeChildSessionParams" since="31">
+		<extends name="android/net/ipsec/ike/ChildSessionParams"/>
+	</class>
+	<class name="android/net/ipsec/ike/TransportModeChildSessionParams$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/ipsec/ike/TransportModeChildSessionParams;)V"/>
+		<method name="addChildSaProposal(Landroid/net/ipsec/ike/ChildSaProposal;)Landroid/net/ipsec/ike/TransportModeChildSessionParams$Builder;"/>
+		<method name="addInboundTrafficSelectors(Landroid/net/ipsec/ike/IkeTrafficSelector;)Landroid/net/ipsec/ike/TransportModeChildSessionParams$Builder;"/>
+		<method name="addOutboundTrafficSelectors(Landroid/net/ipsec/ike/IkeTrafficSelector;)Landroid/net/ipsec/ike/TransportModeChildSessionParams$Builder;"/>
+		<method name="build()Landroid/net/ipsec/ike/TransportModeChildSessionParams;"/>
+		<method name="setLifetimeSeconds(II)Landroid/net/ipsec/ike/TransportModeChildSessionParams$Builder;"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams" since="31">
+		<extends name="android/net/ipsec/ike/ChildSessionParams"/>
+		<method name="getConfigurationRequests()Ljava/util/List;"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/ipsec/ike/TunnelModeChildSessionParams;)V"/>
+		<method name="addChildSaProposal(Landroid/net/ipsec/ike/ChildSaProposal;)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="addInboundTrafficSelectors(Landroid/net/ipsec/ike/IkeTrafficSelector;)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="addInternalAddressRequest(I)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="addInternalAddressRequest(Ljava/net/Inet4Address;)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="addInternalAddressRequest(Ljava/net/Inet6Address;I)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="addInternalDhcpServerRequest(I)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="addInternalDnsServerRequest(I)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="addOutboundTrafficSelectors(Landroid/net/ipsec/ike/IkeTrafficSelector;)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+		<method name="build()Landroid/net/ipsec/ike/TunnelModeChildSessionParams;"/>
+		<method name="setLifetimeSeconds(II)Landroid/net/ipsec/ike/TunnelModeChildSessionParams$Builder;"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$ConfigRequestIpv4Address" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/ipsec/ike/TunnelModeChildSessionParams$TunnelModeChildConfigRequest"/>
+		<method name="getAddress()Ljava/net/Inet4Address;"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$ConfigRequestIpv4DhcpServer" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/ipsec/ike/TunnelModeChildSessionParams$TunnelModeChildConfigRequest"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$ConfigRequestIpv4DnsServer" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/ipsec/ike/TunnelModeChildSessionParams$TunnelModeChildConfigRequest"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$ConfigRequestIpv4Netmask" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/ipsec/ike/TunnelModeChildSessionParams$TunnelModeChildConfigRequest"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$ConfigRequestIpv6Address" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/ipsec/ike/TunnelModeChildSessionParams$TunnelModeChildConfigRequest"/>
+		<method name="getAddress()Ljava/net/Inet6Address;"/>
+		<method name="getPrefixLength()I"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$ConfigRequestIpv6DnsServer" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/ipsec/ike/TunnelModeChildSessionParams$TunnelModeChildConfigRequest"/>
+	</class>
+	<class name="android/net/ipsec/ike/TunnelModeChildSessionParams$TunnelModeChildConfigRequest" since="31">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/IkeException" since="31">
+		<extends name="java/lang/Exception"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/IkeInternalException" since="31">
+		<extends name="android/net/ipsec/ike/exceptions/IkeNonProtocolException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/IkeNetworkLostException" since="31">
+		<extends name="android/net/ipsec/ike/exceptions/IkeNonProtocolException"/>
+		<method name="&lt;init>(Landroid/net/Network;)V"/>
+		<method name="getNetwork()Landroid/net/Network;"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/IkeNonProtocolException" since="31">
+		<extends name="android/net/ipsec/ike/exceptions/IkeException"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/IkeProtocolException" since="31">
+		<extends name="android/net/ipsec/ike/exceptions/IkeException"/>
+		<method name="getErrorType()I"/>
+		<field name="ERROR_TYPE_AUTHENTICATION_FAILED"/>
+		<field name="ERROR_TYPE_CHILD_SA_NOT_FOUND"/>
+		<field name="ERROR_TYPE_FAILED_CP_REQUIRED"/>
+		<field name="ERROR_TYPE_INTERNAL_ADDRESS_FAILURE"/>
+		<field name="ERROR_TYPE_INVALID_IKE_SPI"/>
+		<field name="ERROR_TYPE_INVALID_KE_PAYLOAD"/>
+		<field name="ERROR_TYPE_INVALID_MAJOR_VERSION"/>
+		<field name="ERROR_TYPE_INVALID_MESSAGE_ID"/>
+		<field name="ERROR_TYPE_INVALID_SELECTORS"/>
+		<field name="ERROR_TYPE_INVALID_SYNTAX"/>
+		<field name="ERROR_TYPE_NO_ADDITIONAL_SAS"/>
+		<field name="ERROR_TYPE_NO_PROPOSAL_CHOSEN"/>
+		<field name="ERROR_TYPE_SINGLE_PAIR_REQUIRED"/>
+		<field name="ERROR_TYPE_TEMPORARY_FAILURE"/>
+		<field name="ERROR_TYPE_TS_UNACCEPTABLE"/>
+		<field name="ERROR_TYPE_UNSUPPORTED_CRITICAL_PAYLOAD"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/InvalidKeException" since="31">
+		<extends name="android/net/ipsec/ike/exceptions/IkeProtocolException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getDhGroup()I"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/InvalidMajorVersionException" since="31">
+		<extends name="android/net/ipsec/ike/exceptions/IkeProtocolException"/>
+		<method name="&lt;init>(B)V"/>
+		<method name="getMajorVersion()B"/>
+	</class>
+	<class name="android/net/ipsec/ike/exceptions/InvalidSelectorsException" since="31">
+		<extends name="android/net/ipsec/ike/exceptions/IkeProtocolException"/>
+		<method name="&lt;init>(I[B)V"/>
+		<method name="getIpSecPacketInfo()[B"/>
+		<method name="getIpSecSpi()I"/>
+	</class>
+	<class name="android/net/nsd/NsdManager" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="discoverServices(Ljava/lang/String;ILandroid/net/nsd/NsdManager$DiscoveryListener;)V"/>
+		<method name="registerService(Landroid/net/nsd/NsdServiceInfo;ILandroid/net/nsd/NsdManager$RegistrationListener;)V"/>
+		<method name="resolveService(Landroid/net/nsd/NsdServiceInfo;Landroid/net/nsd/NsdManager$ResolveListener;)V"/>
+		<method name="stopServiceDiscovery(Landroid/net/nsd/NsdManager$DiscoveryListener;)V"/>
+		<method name="unregisterService(Landroid/net/nsd/NsdManager$RegistrationListener;)V"/>
+		<field name="ACTION_NSD_STATE_CHANGED"/>
+		<field name="EXTRA_NSD_STATE"/>
+		<field name="FAILURE_ALREADY_ACTIVE"/>
+		<field name="FAILURE_INTERNAL_ERROR"/>
+		<field name="FAILURE_MAX_LIMIT"/>
+		<field name="NSD_STATE_DISABLED"/>
+		<field name="NSD_STATE_ENABLED"/>
+		<field name="PROTOCOL_DNS_SD"/>
+	</class>
+	<class name="android/net/nsd/NsdManager$DiscoveryListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onDiscoveryStarted(Ljava/lang/String;)V"/>
+		<method name="onDiscoveryStopped(Ljava/lang/String;)V"/>
+		<method name="onServiceFound(Landroid/net/nsd/NsdServiceInfo;)V"/>
+		<method name="onServiceLost(Landroid/net/nsd/NsdServiceInfo;)V"/>
+		<method name="onStartDiscoveryFailed(Ljava/lang/String;I)V"/>
+		<method name="onStopDiscoveryFailed(Ljava/lang/String;I)V"/>
+	</class>
+	<class name="android/net/nsd/NsdManager$RegistrationListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onRegistrationFailed(Landroid/net/nsd/NsdServiceInfo;I)V"/>
+		<method name="onServiceRegistered(Landroid/net/nsd/NsdServiceInfo;)V"/>
+		<method name="onServiceUnregistered(Landroid/net/nsd/NsdServiceInfo;)V"/>
+		<method name="onUnregistrationFailed(Landroid/net/nsd/NsdServiceInfo;I)V"/>
+	</class>
+	<class name="android/net/nsd/NsdManager$ResolveListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onResolveFailed(Landroid/net/nsd/NsdServiceInfo;I)V"/>
+		<method name="onServiceResolved(Landroid/net/nsd/NsdServiceInfo;)V"/>
+	</class>
+	<class name="android/net/nsd/NsdServiceInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAttributes()Ljava/util/Map;" since="21"/>
+		<method name="getHost()Ljava/net/InetAddress;"/>
+		<method name="getPort()I"/>
+		<method name="getServiceName()Ljava/lang/String;"/>
+		<method name="getServiceType()Ljava/lang/String;"/>
+		<method name="removeAttribute(Ljava/lang/String;)V" since="21"/>
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V" since="21"/>
+		<method name="setHost(Ljava/net/InetAddress;)V"/>
+		<method name="setPort(I)V"/>
+		<method name="setServiceName(Ljava/lang/String;)V"/>
+		<method name="setServiceType(Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/rtp/AudioCodec" since="12" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="getCodec(ILjava/lang/String;Ljava/lang/String;)Landroid/net/rtp/AudioCodec;" deprecated="31"/>
+		<method name="getCodecs()[Landroid/net/rtp/AudioCodec;" deprecated="31"/>
+		<field name="AMR" deprecated="31"/>
+		<field name="GSM" deprecated="31"/>
+		<field name="GSM_EFR" deprecated="31"/>
+		<field name="PCMA" deprecated="31"/>
+		<field name="PCMU" deprecated="31"/>
+		<field name="fmtp" deprecated="31"/>
+		<field name="rtpmap" deprecated="31"/>
+		<field name="type" deprecated="31"/>
+	</class>
+	<class name="android/net/rtp/AudioGroup" since="12" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" since="30" deprecated="31"/>
+		<method name="clear()V" deprecated="31"/>
+		<method name="getMode()I" deprecated="31"/>
+		<method name="getStreams()[Landroid/net/rtp/AudioStream;" deprecated="31"/>
+		<method name="sendDtmf(I)V" deprecated="31"/>
+		<method name="setMode(I)V" deprecated="31"/>
+		<field name="MODE_ECHO_SUPPRESSION" deprecated="31"/>
+		<field name="MODE_MUTED" deprecated="31"/>
+		<field name="MODE_NORMAL" deprecated="31"/>
+		<field name="MODE_ON_HOLD" deprecated="31"/>
+	</class>
+	<class name="android/net/rtp/AudioStream" since="12" deprecated="31">
+		<extends name="android/net/rtp/RtpStream"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;)V" deprecated="31"/>
+		<method name="getCodec()Landroid/net/rtp/AudioCodec;" deprecated="31"/>
+		<method name="getDtmfType()I" deprecated="31"/>
+		<method name="getGroup()Landroid/net/rtp/AudioGroup;" deprecated="31"/>
+		<method name="join(Landroid/net/rtp/AudioGroup;)V" deprecated="31"/>
+		<method name="setCodec(Landroid/net/rtp/AudioCodec;)V" deprecated="31"/>
+		<method name="setDtmfType(I)V" deprecated="31"/>
+	</class>
+	<class name="android/net/rtp/RtpStream" since="12" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="associate(Ljava/net/InetAddress;I)V" deprecated="31"/>
+		<method name="getLocalAddress()Ljava/net/InetAddress;" deprecated="31"/>
+		<method name="getLocalPort()I" deprecated="31"/>
+		<method name="getMode()I" deprecated="31"/>
+		<method name="getRemoteAddress()Ljava/net/InetAddress;" deprecated="31"/>
+		<method name="getRemotePort()I" deprecated="31"/>
+		<method name="isBusy()Z" deprecated="31"/>
+		<method name="release()V" deprecated="31"/>
+		<method name="setMode(I)V" deprecated="31"/>
+		<field name="MODE_NORMAL" deprecated="31"/>
+		<field name="MODE_RECEIVE_ONLY" deprecated="31"/>
+		<field name="MODE_SEND_ONLY" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipAudioCall" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/net/sip/SipProfile;)V" deprecated="31"/>
+		<method name="answerCall(I)V" deprecated="31"/>
+		<method name="attachCall(Landroid/net/sip/SipSession;Ljava/lang/String;)V" deprecated="31"/>
+		<method name="close()V" deprecated="31"/>
+		<method name="continueCall(I)V" deprecated="31"/>
+		<method name="endCall()V" deprecated="31"/>
+		<method name="getLocalProfile()Landroid/net/sip/SipProfile;" deprecated="31"/>
+		<method name="getPeerProfile()Landroid/net/sip/SipProfile;" deprecated="31"/>
+		<method name="getState()I" deprecated="31"/>
+		<method name="holdCall(I)V" deprecated="31"/>
+		<method name="isInCall()Z" deprecated="31"/>
+		<method name="isMuted()Z" deprecated="31"/>
+		<method name="isOnHold()Z" deprecated="31"/>
+		<method name="makeCall(Landroid/net/sip/SipProfile;Landroid/net/sip/SipSession;I)V" deprecated="31"/>
+		<method name="sendDtmf(I)V" deprecated="31"/>
+		<method name="sendDtmf(ILandroid/os/Message;)V" deprecated="31"/>
+		<method name="setListener(Landroid/net/sip/SipAudioCall$Listener;)V" deprecated="31"/>
+		<method name="setListener(Landroid/net/sip/SipAudioCall$Listener;Z)V" deprecated="31"/>
+		<method name="setSpeakerMode(Z)V" deprecated="31"/>
+		<method name="startAudio()V" deprecated="31"/>
+		<method name="toggleMute()V" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipAudioCall$Listener" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="onCallBusy(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+		<method name="onCallEnded(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+		<method name="onCallEstablished(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+		<method name="onCallHeld(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+		<method name="onCalling(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+		<method name="onChanged(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+		<method name="onError(Landroid/net/sip/SipAudioCall;ILjava/lang/String;)V" deprecated="31"/>
+		<method name="onReadyToCall(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+		<method name="onRinging(Landroid/net/sip/SipAudioCall;Landroid/net/sip/SipProfile;)V" deprecated="31"/>
+		<method name="onRingingBack(Landroid/net/sip/SipAudioCall;)V" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipErrorCode" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="toString(I)Ljava/lang/String;" deprecated="31"/>
+		<field name="CLIENT_ERROR" deprecated="31"/>
+		<field name="CROSS_DOMAIN_AUTHENTICATION" deprecated="31"/>
+		<field name="DATA_CONNECTION_LOST" deprecated="31"/>
+		<field name="INVALID_CREDENTIALS" deprecated="31"/>
+		<field name="INVALID_REMOTE_URI" deprecated="31"/>
+		<field name="IN_PROGRESS" deprecated="31"/>
+		<field name="NO_ERROR" deprecated="31"/>
+		<field name="PEER_NOT_REACHABLE" deprecated="31"/>
+		<field name="SERVER_ERROR" deprecated="31"/>
+		<field name="SERVER_UNREACHABLE" deprecated="31"/>
+		<field name="SOCKET_ERROR" deprecated="31"/>
+		<field name="TIME_OUT" deprecated="31"/>
+		<field name="TRANSACTION_TERMINTED" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipException" since="9" deprecated="31">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipManager" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="close(Ljava/lang/String;)V" deprecated="31"/>
+		<method name="createSipSession(Landroid/net/sip/SipProfile;Landroid/net/sip/SipSession$Listener;)Landroid/net/sip/SipSession;" deprecated="31"/>
+		<method name="getCallId(Landroid/content/Intent;)Ljava/lang/String;" deprecated="31"/>
+		<method name="getOfferSessionDescription(Landroid/content/Intent;)Ljava/lang/String;" deprecated="31"/>
+		<method name="getSessionFor(Landroid/content/Intent;)Landroid/net/sip/SipSession;" deprecated="31"/>
+		<method name="isApiSupported(Landroid/content/Context;)Z" deprecated="31"/>
+		<method name="isIncomingCallIntent(Landroid/content/Intent;)Z" deprecated="31"/>
+		<method name="isOpened(Ljava/lang/String;)Z" deprecated="31"/>
+		<method name="isRegistered(Ljava/lang/String;)Z" deprecated="31"/>
+		<method name="isSipWifiOnly(Landroid/content/Context;)Z" deprecated="31"/>
+		<method name="isVoipSupported(Landroid/content/Context;)Z" deprecated="31"/>
+		<method name="makeAudioCall(Landroid/net/sip/SipProfile;Landroid/net/sip/SipProfile;Landroid/net/sip/SipAudioCall$Listener;I)Landroid/net/sip/SipAudioCall;" deprecated="31"/>
+		<method name="makeAudioCall(Ljava/lang/String;Ljava/lang/String;Landroid/net/sip/SipAudioCall$Listener;I)Landroid/net/sip/SipAudioCall;" deprecated="31"/>
+		<method name="newInstance(Landroid/content/Context;)Landroid/net/sip/SipManager;" deprecated="31"/>
+		<method name="open(Landroid/net/sip/SipProfile;)V" deprecated="31"/>
+		<method name="open(Landroid/net/sip/SipProfile;Landroid/app/PendingIntent;Landroid/net/sip/SipRegistrationListener;)V" deprecated="31"/>
+		<method name="register(Landroid/net/sip/SipProfile;ILandroid/net/sip/SipRegistrationListener;)V" deprecated="31"/>
+		<method name="setRegistrationListener(Ljava/lang/String;Landroid/net/sip/SipRegistrationListener;)V" deprecated="31"/>
+		<method name="takeAudioCall(Landroid/content/Intent;Landroid/net/sip/SipAudioCall$Listener;)Landroid/net/sip/SipAudioCall;" deprecated="31"/>
+		<method name="unregister(Landroid/net/sip/SipProfile;Landroid/net/sip/SipRegistrationListener;)V" deprecated="31"/>
+		<field name="EXTRA_CALL_ID" deprecated="31"/>
+		<field name="EXTRA_OFFER_SD" deprecated="31"/>
+		<field name="INCOMING_CALL_RESULT_CODE" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipProfile" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="getAuthUserName()Ljava/lang/String;" since="12" deprecated="31"/>
+		<method name="getAutoRegistration()Z" deprecated="31"/>
+		<method name="getDisplayName()Ljava/lang/String;" deprecated="31"/>
+		<method name="getPassword()Ljava/lang/String;" deprecated="31"/>
+		<method name="getPort()I" deprecated="31"/>
+		<method name="getProfileName()Ljava/lang/String;" deprecated="31"/>
+		<method name="getProtocol()Ljava/lang/String;" deprecated="31"/>
+		<method name="getProxyAddress()Ljava/lang/String;" deprecated="31"/>
+		<method name="getSendKeepAlive()Z" deprecated="31"/>
+		<method name="getSipDomain()Ljava/lang/String;" deprecated="31"/>
+		<method name="getUriString()Ljava/lang/String;" deprecated="31"/>
+		<method name="getUserName()Ljava/lang/String;" deprecated="31"/>
+		<method name="setCallingUid(I)V" since="30" deprecated="31"/>
+		<field name="CREATOR" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipProfile$Builder" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/sip/SipProfile;)V" deprecated="31"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" deprecated="31"/>
+		<method name="build()Landroid/net/sip/SipProfile;" deprecated="31"/>
+		<method name="setAuthUserName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" since="12" deprecated="31"/>
+		<method name="setAutoRegistration(Z)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+		<method name="setDisplayName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+		<method name="setOutboundProxy(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+		<method name="setPassword(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+		<method name="setPort(I)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+		<method name="setProfileName(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+		<method name="setProtocol(Ljava/lang/String;)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+		<method name="setSendKeepAlive(Z)Landroid/net/sip/SipProfile$Builder;" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipRegistrationListener" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="onRegistering(Ljava/lang/String;)V" deprecated="31"/>
+		<method name="onRegistrationDone(Ljava/lang/String;J)V" deprecated="31"/>
+		<method name="onRegistrationFailed(Ljava/lang/String;ILjava/lang/String;)V" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipSession" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="answerCall(Ljava/lang/String;I)V" deprecated="31"/>
+		<method name="changeCall(Ljava/lang/String;I)V" deprecated="31"/>
+		<method name="endCall()V" deprecated="31"/>
+		<method name="getCallId()Ljava/lang/String;" deprecated="31"/>
+		<method name="getLocalIp()Ljava/lang/String;" deprecated="31"/>
+		<method name="getLocalProfile()Landroid/net/sip/SipProfile;" deprecated="31"/>
+		<method name="getPeerProfile()Landroid/net/sip/SipProfile;" deprecated="31"/>
+		<method name="getState()I" deprecated="31"/>
+		<method name="isInCall()Z" deprecated="31"/>
+		<method name="makeCall(Landroid/net/sip/SipProfile;Ljava/lang/String;I)V" deprecated="31"/>
+		<method name="register(I)V" deprecated="31"/>
+		<method name="setListener(Landroid/net/sip/SipSession$Listener;)V" deprecated="31"/>
+		<method name="unregister()V" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipSession$Listener" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="onCallBusy(Landroid/net/sip/SipSession;)V" deprecated="31"/>
+		<method name="onCallChangeFailed(Landroid/net/sip/SipSession;ILjava/lang/String;)V" deprecated="31"/>
+		<method name="onCallEnded(Landroid/net/sip/SipSession;)V" deprecated="31"/>
+		<method name="onCallEstablished(Landroid/net/sip/SipSession;Ljava/lang/String;)V" deprecated="31"/>
+		<method name="onCalling(Landroid/net/sip/SipSession;)V" deprecated="31"/>
+		<method name="onError(Landroid/net/sip/SipSession;ILjava/lang/String;)V" deprecated="31"/>
+		<method name="onRegistering(Landroid/net/sip/SipSession;)V" deprecated="31"/>
+		<method name="onRegistrationDone(Landroid/net/sip/SipSession;I)V" deprecated="31"/>
+		<method name="onRegistrationFailed(Landroid/net/sip/SipSession;ILjava/lang/String;)V" deprecated="31"/>
+		<method name="onRegistrationTimeout(Landroid/net/sip/SipSession;)V" deprecated="31"/>
+		<method name="onRinging(Landroid/net/sip/SipSession;Landroid/net/sip/SipProfile;Ljava/lang/String;)V" deprecated="31"/>
+		<method name="onRingingBack(Landroid/net/sip/SipSession;)V" deprecated="31"/>
+	</class>
+	<class name="android/net/sip/SipSession$State" since="9" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="toString(I)Ljava/lang/String;" deprecated="31"/>
+		<field name="DEREGISTERING" deprecated="31"/>
+		<field name="INCOMING_CALL" deprecated="31"/>
+		<field name="INCOMING_CALL_ANSWERING" deprecated="31"/>
+		<field name="IN_CALL" deprecated="31"/>
+		<field name="NOT_DEFINED" deprecated="31"/>
+		<field name="OUTGOING_CALL" deprecated="31"/>
+		<field name="OUTGOING_CALL_CANCELING" deprecated="31"/>
+		<field name="OUTGOING_CALL_RING_BACK" deprecated="31"/>
+		<field name="PINGING" deprecated="31"/>
+		<field name="READY_TO_CALL" deprecated="31"/>
+		<field name="REGISTERING" deprecated="31"/>
+	</class>
+	<class name="android/net/ssl/SSLEngines" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="exportKeyingMaterial(Ljavax/net/ssl/SSLEngine;Ljava/lang/String;[BI)[B" since="31"/>
+		<method name="isSupportedEngine(Ljavax/net/ssl/SSLEngine;)Z"/>
+		<method name="setUseSessionTickets(Ljavax/net/ssl/SSLEngine;Z)V"/>
+	</class>
+	<class name="android/net/ssl/SSLSockets" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="exportKeyingMaterial(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;[BI)[B" since="31"/>
+		<method name="isSupportedSocket(Ljavax/net/ssl/SSLSocket;)Z"/>
+		<method name="setUseSessionTickets(Ljavax/net/ssl/SSLSocket;Z)V"/>
+	</class>
+	<class name="android/net/vcn/VcnConfig" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getGatewayConnectionConfigs()Ljava/util/Set;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/vcn/VcnConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="addGatewayConnectionConfig(Landroid/net/vcn/VcnGatewayConnectionConfig;)Landroid/net/vcn/VcnConfig$Builder;"/>
+		<method name="build()Landroid/net/vcn/VcnConfig;"/>
+	</class>
+	<class name="android/net/vcn/VcnGatewayConnectionConfig" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getExposedCapabilities()[I"/>
+		<method name="getGatewayConnectionName()Ljava/lang/String;"/>
+		<method name="getMaxMtu()I"/>
+		<method name="getRetryIntervalsMillis()[J"/>
+	</class>
+	<class name="android/net/vcn/VcnGatewayConnectionConfig$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/net/ipsec/ike/IkeTunnelConnectionParams;)V"/>
+		<method name="addExposedCapability(I)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;"/>
+		<method name="build()Landroid/net/vcn/VcnGatewayConnectionConfig;"/>
+		<method name="removeExposedCapability(I)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;"/>
+		<method name="setMaxMtu(I)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;"/>
+		<method name="setRetryIntervalsMillis([J)Landroid/net/vcn/VcnGatewayConnectionConfig$Builder;"/>
+	</class>
+	<class name="android/net/vcn/VcnManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="clearVcnConfig(Landroid/os/ParcelUuid;)V"/>
+		<method name="getConfiguredSubscriptionGroups()Ljava/util/List;"/>
+		<method name="registerVcnStatusCallback(Landroid/os/ParcelUuid;Ljava/util/concurrent/Executor;Landroid/net/vcn/VcnManager$VcnStatusCallback;)V"/>
+		<method name="setVcnConfig(Landroid/os/ParcelUuid;Landroid/net/vcn/VcnConfig;)V"/>
+		<method name="unregisterVcnStatusCallback(Landroid/net/vcn/VcnManager$VcnStatusCallback;)V"/>
+		<field name="VCN_ERROR_CODE_CONFIG_ERROR"/>
+		<field name="VCN_ERROR_CODE_INTERNAL_ERROR"/>
+		<field name="VCN_ERROR_CODE_NETWORK_ERROR"/>
+		<field name="VCN_STATUS_CODE_ACTIVE"/>
+		<field name="VCN_STATUS_CODE_INACTIVE"/>
+		<field name="VCN_STATUS_CODE_NOT_CONFIGURED"/>
+		<field name="VCN_STATUS_CODE_SAFE_MODE"/>
+	</class>
+	<class name="android/net/vcn/VcnManager$VcnStatusCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGatewayConnectionError(Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="onStatusChanged(I)V"/>
+	</class>
+	<class name="android/net/wifi/EasyConnectStatusCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_AUTHENTICATION"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_BUSY"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_CANNOT_FIND_NETWORK"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_CONFIGURATION"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_ENROLLEE_AUTHENTICATION"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_ENROLLEE_FAILED_TO_SCAN_NETWORK_CHANNEL" since="31"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_ENROLLEE_REJECTED_CONFIGURATION"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_GENERIC"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_INVALID_NETWORK"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_INVALID_URI"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_NOT_COMPATIBLE"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_NOT_SUPPORTED"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_TIMEOUT"/>
+		<field name="EASY_CONNECT_EVENT_FAILURE_URI_GENERATION" since="31"/>
+	</class>
+	<class name="android/net/wifi/ScanResult" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" since="30"/>
+		<method name="&lt;init>(Landroid/net/wifi/ScanResult;)V" since="30"/>
+		<method name="convertChannelToFrequencyMhzIfSupported(II)I" since="31"/>
+		<method name="convertFrequencyMhzToChannelIfSupported(I)I" since="31"/>
+		<method name="getInformationElements()Ljava/util/List;" since="30"/>
+		<method name="getWifiStandard()I" since="30"/>
+		<method name="is80211mcResponder()Z" since="23"/>
+		<method name="isPasspointNetwork()Z" since="23"/>
+		<field name="BSSID"/>
+		<field name="CHANNEL_WIDTH_160MHZ" since="23"/>
+		<field name="CHANNEL_WIDTH_20MHZ" since="23"/>
+		<field name="CHANNEL_WIDTH_40MHZ" since="23"/>
+		<field name="CHANNEL_WIDTH_80MHZ" since="23"/>
+		<field name="CHANNEL_WIDTH_80MHZ_PLUS_MHZ" since="23"/>
+		<field name="CREATOR" since="30"/>
+		<field name="SSID"/>
+		<field name="UNSPECIFIED" since="31"/>
+		<field name="WIFI_BAND_24_GHZ" since="31"/>
+		<field name="WIFI_BAND_5_GHZ" since="31"/>
+		<field name="WIFI_BAND_60_GHZ" since="31"/>
+		<field name="WIFI_BAND_6_GHZ" since="31"/>
+		<field name="WIFI_STANDARD_11AC" since="30"/>
+		<field name="WIFI_STANDARD_11AD" since="31"/>
+		<field name="WIFI_STANDARD_11AX" since="30"/>
+		<field name="WIFI_STANDARD_11N" since="30"/>
+		<field name="WIFI_STANDARD_LEGACY" since="30"/>
+		<field name="WIFI_STANDARD_UNKNOWN" since="30"/>
+		<field name="capabilities"/>
+		<field name="centerFreq0" since="23"/>
+		<field name="centerFreq1" since="23"/>
+		<field name="channelWidth" since="23"/>
+		<field name="frequency"/>
+		<field name="level"/>
+		<field name="operatorFriendlyName" since="23" deprecated="31"/>
+		<field name="timestamp" since="17"/>
+		<field name="venueName" since="23" deprecated="31"/>
+	</class>
+	<class name="android/net/wifi/ScanResult$InformationElement" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="31"/>
+		<method name="&lt;init>(Landroid/net/wifi/ScanResult$InformationElement;)V"/>
+		<method name="getBytes()Ljava/nio/ByteBuffer;"/>
+		<method name="getId()I"/>
+		<method name="getIdExt()I"/>
+		<field name="CREATOR" since="31"/>
+	</class>
+	<class name="android/net/wifi/SoftApConfiguration" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBssid()Landroid/net/MacAddress;"/>
+		<method name="getPassphrase()Ljava/lang/String;"/>
+		<method name="getSecurityType()I"/>
+		<method name="getSsid()Ljava/lang/String;"/>
+		<method name="isHiddenSsid()Z"/>
+		<field name="CREATOR"/>
+		<field name="SECURITY_TYPE_OPEN"/>
+		<field name="SECURITY_TYPE_WPA2_PSK"/>
+		<field name="SECURITY_TYPE_WPA3_SAE"/>
+		<field name="SECURITY_TYPE_WPA3_SAE_TRANSITION"/>
+	</class>
+	<class name="android/net/wifi/SupplicantState" since="1">
+		<extends name="java/lang/Enum"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="isValidState(Landroid/net/wifi/SupplicantState;)Z"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/net/wifi/SupplicantState;"/>
+		<method name="values()[Landroid/net/wifi/SupplicantState;"/>
+		<field name="ASSOCIATED"/>
+		<field name="ASSOCIATING"/>
+		<field name="AUTHENTICATING" since="14"/>
+		<field name="COMPLETED"/>
+		<field name="DISCONNECTED"/>
+		<field name="DORMANT"/>
+		<field name="FOUR_WAY_HANDSHAKE"/>
+		<field name="GROUP_HANDSHAKE"/>
+		<field name="INACTIVE"/>
+		<field name="INTERFACE_DISABLED" since="14"/>
+		<field name="INVALID"/>
+		<field name="SCANNING"/>
+		<field name="UNINITIALIZED"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/net/wifi/WifiConfiguration;)V" since="30" deprecated="30"/>
+		<method name="getHttpProxy()Landroid/net/ProxyInfo;" since="26" deprecated="29"/>
+		<method name="getKey()Ljava/lang/String;" since="30" deprecated="30"/>
+		<method name="getRandomizedMacAddress()Landroid/net/MacAddress;" since="29" deprecated="29"/>
+		<method name="isPasspoint()Z" since="23" deprecated="29"/>
+		<method name="setHttpProxy(Landroid/net/ProxyInfo;)V" since="26" deprecated="29"/>
+		<method name="setSecurityParams(I)V" since="30" deprecated="30"/>
+		<field name="BSSID" deprecated="29"/>
+		<field name="FQDN" since="21" deprecated="29"/>
+		<field name="SECURITY_TYPE_EAP" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_EAP_SUITE_B" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_EAP_WPA3_ENTERPRISE" since="31" deprecated="31"/>
+		<field name="SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT" since="31" deprecated="31"/>
+		<field name="SECURITY_TYPE_OPEN" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_OWE" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_PSK" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_SAE" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_WAPI_CERT" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_WAPI_PSK" since="30" deprecated="30"/>
+		<field name="SECURITY_TYPE_WEP" since="30" deprecated="30"/>
+		<field name="SSID" deprecated="29"/>
+		<field name="allowedAuthAlgorithms" deprecated="29"/>
+		<field name="allowedGroupCiphers" deprecated="29"/>
+		<field name="allowedGroupManagementCiphers" since="29" deprecated="29"/>
+		<field name="allowedKeyManagement" deprecated="29"/>
+		<field name="allowedPairwiseCiphers" deprecated="29"/>
+		<field name="allowedProtocols" deprecated="29"/>
+		<field name="allowedSuiteBCiphers" since="29" deprecated="29"/>
+		<field name="enterpriseConfig" since="18" deprecated="29"/>
+		<field name="hiddenSSID" deprecated="29"/>
+		<field name="isHomeProviderNetwork" since="26" deprecated="29"/>
+		<field name="networkId" deprecated="29"/>
+		<field name="preSharedKey" deprecated="29"/>
+		<field name="priority" deprecated="26"/>
+		<field name="providerFriendlyName" since="23" deprecated="29"/>
+		<field name="roamingConsortiumIds" since="23" deprecated="29"/>
+		<field name="status" deprecated="29"/>
+		<field name="wepKeys" deprecated="28"/>
+		<field name="wepTxKeyIndex" deprecated="28"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration$AuthAlgorithm" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="LEAP" deprecated="29"/>
+		<field name="OPEN" deprecated="29"/>
+		<field name="SAE" since="30" deprecated="30"/>
+		<field name="SHARED" deprecated="28"/>
+		<field name="strings" deprecated="29"/>
+		<field name="varName" deprecated="29"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration$GroupCipher" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="CCMP" deprecated="29"/>
+		<field name="GCMP_128" since="31" deprecated="31"/>
+		<field name="GCMP_256" since="29" deprecated="29"/>
+		<field name="SMS4" since="30" deprecated="30"/>
+		<field name="TKIP" deprecated="29"/>
+		<field name="WEP104" deprecated="28"/>
+		<field name="WEP40" deprecated="28"/>
+		<field name="strings" deprecated="29"/>
+		<field name="varName" deprecated="29"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration$GroupMgmtCipher" since="29" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="BIP_CMAC_256" deprecated="29"/>
+		<field name="BIP_GMAC_128" deprecated="29"/>
+		<field name="BIP_GMAC_256" deprecated="29"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration$KeyMgmt" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="IEEE8021X" deprecated="29"/>
+		<field name="NONE" deprecated="29"/>
+		<field name="OWE" since="29" deprecated="29"/>
+		<field name="SAE" since="29" deprecated="29"/>
+		<field name="SUITE_B_192" since="29" deprecated="29"/>
+		<field name="WPA_EAP" deprecated="29"/>
+		<field name="WPA_PSK" deprecated="29"/>
+		<field name="strings" deprecated="29"/>
+		<field name="varName" deprecated="29"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration$PairwiseCipher" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="CCMP" deprecated="29"/>
+		<field name="GCMP_128" since="31" deprecated="31"/>
+		<field name="GCMP_256" since="29" deprecated="29"/>
+		<field name="NONE" deprecated="29"/>
+		<field name="SMS4" since="30" deprecated="30"/>
+		<field name="TKIP" deprecated="28"/>
+		<field name="strings" deprecated="29"/>
+		<field name="varName" deprecated="29"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration$Protocol" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="RSN" deprecated="29"/>
+		<field name="WAPI" since="30" deprecated="30"/>
+		<field name="WPA" deprecated="28"/>
+		<field name="strings" deprecated="29"/>
+		<field name="varName" deprecated="29"/>
+	</class>
+	<class name="android/net/wifi/WifiConfiguration$Status" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="CURRENT" deprecated="29"/>
+		<field name="DISABLED" deprecated="29"/>
+		<field name="ENABLED" deprecated="29"/>
+		<field name="strings" deprecated="29"/>
+	</class>
+	<class name="android/net/wifi/WifiEnterpriseConfig" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/WifiEnterpriseConfig;)V"/>
+		<method name="getAltSubjectMatch()Ljava/lang/String;" since="23"/>
+		<method name="getAnonymousIdentity()Ljava/lang/String;"/>
+		<method name="getCaCertificate()Ljava/security/cert/X509Certificate;"/>
+		<method name="getCaCertificates()[Ljava/security/cert/X509Certificate;" since="24"/>
+		<method name="getClientCertificate()Ljava/security/cert/X509Certificate;"/>
+		<method name="getClientCertificateChain()[Ljava/security/cert/X509Certificate;" since="26"/>
+		<method name="getClientKeyPairAlias()Ljava/lang/String;" since="31"/>
+		<method name="getClientPrivateKey()Ljava/security/PrivateKey;" since="30"/>
+		<method name="getDecoratedIdentityPrefix()Ljava/lang/String;" since="31"/>
+		<method name="getDomainSuffixMatch()Ljava/lang/String;" since="23"/>
+		<method name="getEapMethod()I"/>
+		<method name="getIdentity()Ljava/lang/String;"/>
+		<method name="getPassword()Ljava/lang/String;"/>
+		<method name="getPhase2Method()I"/>
+		<method name="getPlmn()Ljava/lang/String;" since="23"/>
+		<method name="getRealm()Ljava/lang/String;" since="23"/>
+		<method name="getSubjectMatch()Ljava/lang/String;" deprecated="23"/>
+		<method name="isAuthenticationSimBased()Z" since="30"/>
+		<method name="isEapMethodServerCertUsed()Z" since="31"/>
+		<method name="isServerCertValidationEnabled()Z" since="31"/>
+		<method name="setAltSubjectMatch(Ljava/lang/String;)V" since="23"/>
+		<method name="setAnonymousIdentity(Ljava/lang/String;)V"/>
+		<method name="setCaCertificate(Ljava/security/cert/X509Certificate;)V"/>
+		<method name="setCaCertificates([Ljava/security/cert/X509Certificate;)V" since="24"/>
+		<method name="setClientKeyEntry(Ljava/security/PrivateKey;Ljava/security/cert/X509Certificate;)V"/>
+		<method name="setClientKeyEntryWithCertificateChain(Ljava/security/PrivateKey;[Ljava/security/cert/X509Certificate;)V" since="26"/>
+		<method name="setClientKeyPairAlias(Ljava/lang/String;)V" since="31"/>
+		<method name="setDecoratedIdentityPrefix(Ljava/lang/String;)V" since="31"/>
+		<method name="setDomainSuffixMatch(Ljava/lang/String;)V" since="23"/>
+		<method name="setEapMethod(I)V"/>
+		<method name="setIdentity(Ljava/lang/String;)V"/>
+		<method name="setPassword(Ljava/lang/String;)V"/>
+		<method name="setPhase2Method(I)V"/>
+		<method name="setPlmn(Ljava/lang/String;)V" since="23"/>
+		<method name="setRealm(Ljava/lang/String;)V" since="23"/>
+		<method name="setSubjectMatch(Ljava/lang/String;)V" deprecated="23"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_WAPI_AS_CERTIFICATE_DATA" since="30"/>
+		<field name="EXTRA_WAPI_AS_CERTIFICATE_NAME" since="30"/>
+		<field name="EXTRA_WAPI_USER_CERTIFICATE_DATA" since="30"/>
+		<field name="EXTRA_WAPI_USER_CERTIFICATE_NAME" since="30"/>
+		<field name="WAPI_AS_CERTIFICATE" since="30"/>
+		<field name="WAPI_USER_CERTIFICATE" since="30"/>
+	</class>
+	<class name="android/net/wifi/WifiEnterpriseConfig$Eap" since="18">
+		<extends name="java/lang/Object"/>
+		<field name="AKA" since="21"/>
+		<field name="AKA_PRIME" since="23"/>
+		<field name="NONE"/>
+		<field name="PEAP"/>
+		<field name="PWD"/>
+		<field name="SIM" since="21"/>
+		<field name="TLS"/>
+		<field name="TTLS"/>
+		<field name="UNAUTH_TLS" since="24"/>
+		<field name="WAPI_CERT" since="30"/>
+	</class>
+	<class name="android/net/wifi/WifiEnterpriseConfig$Phase2" since="18">
+		<extends name="java/lang/Object"/>
+		<field name="AKA" since="26"/>
+		<field name="AKA_PRIME" since="26"/>
+		<field name="GTC"/>
+		<field name="MSCHAP"/>
+		<field name="MSCHAPV2"/>
+		<field name="NONE"/>
+		<field name="PAP"/>
+		<field name="SIM" since="26"/>
+	</class>
+	<class name="android/net/wifi/WifiInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/TransportInfo" since="31"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getApplicableRedactions()J" since="31"/>
+		<method name="getBSSID()Ljava/lang/String;"/>
+		<method name="getCurrentSecurityType()I" since="31"/>
+		<method name="getDetailedStateOf(Landroid/net/wifi/SupplicantState;)Landroid/net/NetworkInfo$DetailedState;"/>
+		<method name="getFrequency()I" since="21"/>
+		<method name="getHiddenSSID()Z"/>
+		<method name="getInformationElements()Ljava/util/List;" since="31"/>
+		<method name="getIpAddress()I" deprecated="31"/>
+		<method name="getLinkSpeed()I"/>
+		<method name="getMacAddress()Ljava/lang/String;"/>
+		<method name="getMaxSupportedRxLinkSpeedMbps()I" since="30"/>
+		<method name="getMaxSupportedTxLinkSpeedMbps()I" since="30"/>
+		<method name="getNetworkId()I"/>
+		<method name="getPasspointFqdn()Ljava/lang/String;" since="29"/>
+		<method name="getPasspointProviderFriendlyName()Ljava/lang/String;" since="29"/>
+		<method name="getRssi()I"/>
+		<method name="getRxLinkSpeedMbps()I" since="29"/>
+		<method name="getSSID()Ljava/lang/String;"/>
+		<method name="getSubscriptionId()I" since="31"/>
+		<method name="getSupplicantState()Landroid/net/wifi/SupplicantState;"/>
+		<method name="getTxLinkSpeedMbps()I" since="29"/>
+		<method name="getWifiStandard()I" since="30"/>
+		<method name="makeCopy(J)Landroid/net/TransportInfo;" since="31" removed="32"/>
+		<method name="makeCopy(J)Landroid/net/wifi/WifiInfo;" since="31"/>
+		<field name="FREQUENCY_UNITS" since="21"/>
+		<field name="LINK_SPEED_UNITS"/>
+		<field name="LINK_SPEED_UNKNOWN" since="29"/>
+		<field name="SECURITY_TYPE_EAP" since="31"/>
+		<field name="SECURITY_TYPE_EAP_WPA3_ENTERPRISE" since="31"/>
+		<field name="SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT" since="31"/>
+		<field name="SECURITY_TYPE_OPEN" since="31"/>
+		<field name="SECURITY_TYPE_OSEN" since="31"/>
+		<field name="SECURITY_TYPE_OWE" since="31"/>
+		<field name="SECURITY_TYPE_PASSPOINT_R1_R2" since="31"/>
+		<field name="SECURITY_TYPE_PASSPOINT_R3" since="31"/>
+		<field name="SECURITY_TYPE_PSK" since="31"/>
+		<field name="SECURITY_TYPE_SAE" since="31"/>
+		<field name="SECURITY_TYPE_UNKNOWN" since="31"/>
+		<field name="SECURITY_TYPE_WAPI_CERT" since="31"/>
+		<field name="SECURITY_TYPE_WAPI_PSK" since="31"/>
+		<field name="SECURITY_TYPE_WEP" since="31"/>
+	</class>
+	<class name="android/net/wifi/WifiInfo$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/wifi/WifiInfo;"/>
+		<method name="setBssid(Ljava/lang/String;)Landroid/net/wifi/WifiInfo$Builder;"/>
+		<method name="setCurrentSecurityType(I)Landroid/net/wifi/WifiInfo$Builder;" since="31"/>
+		<method name="setNetworkId(I)Landroid/net/wifi/WifiInfo$Builder;"/>
+		<method name="setRssi(I)Landroid/net/wifi/WifiInfo$Builder;"/>
+		<method name="setSsid([B)Landroid/net/wifi/WifiInfo$Builder;"/>
+	</class>
+	<class name="android/net/wifi/WifiManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addNetwork(Landroid/net/wifi/WifiConfiguration;)I" deprecated="29"/>
+		<method name="addNetworkPrivileged(Landroid/net/wifi/WifiConfiguration;)Landroid/net/wifi/WifiManager$AddNetworkResult;" since="31"/>
+		<method name="addNetworkSuggestions(Ljava/util/List;)I" since="29"/>
+		<method name="addOrUpdatePasspointConfiguration(Landroid/net/wifi/hotspot2/PasspointConfiguration;)V" since="26"/>
+		<method name="addSuggestionConnectionStatusListener(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$SuggestionConnectionStatusListener;)V" since="30"/>
+		<method name="addSuggestionUserApprovalStatusListener(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$SuggestionUserApprovalStatusListener;)V" since="31"/>
+		<method name="calculateSignalLevel(I)I" since="30"/>
+		<method name="calculateSignalLevel(II)I" deprecated="30"/>
+		<method name="cancelWps(Landroid/net/wifi/WifiManager$WpsCallback;)V" since="21" deprecated="28"/>
+		<method name="compareSignalLevel(II)I"/>
+		<method name="createMulticastLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$MulticastLock;" since="4"/>
+		<method name="createWifiLock(ILjava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;" since="3"/>
+		<method name="createWifiLock(Ljava/lang/String;)Landroid/net/wifi/WifiManager$WifiLock;" deprecated="29"/>
+		<method name="disableNetwork(I)Z" deprecated="29"/>
+		<method name="disconnect()Z" deprecated="29"/>
+		<method name="enableNetwork(IZ)Z" deprecated="29"/>
+		<method name="flushPasspointAnqpCache()V" since="31"/>
+		<method name="getCallerConfiguredNetworks()Ljava/util/List;" since="31"/>
+		<method name="getConfiguredNetworks()Ljava/util/List;" deprecated="29"/>
+		<method name="getConnectionInfo()Landroid/net/wifi/WifiInfo;" deprecated="31"/>
+		<method name="getDhcpInfo()Landroid/net/DhcpInfo;" deprecated="31"/>
+		<method name="getMaxNumberOfNetworkSuggestionsPerApp()I" since="29"/>
+		<method name="getMaxSignalLevel()I" since="30"/>
+		<method name="getNetworkSuggestions()Ljava/util/List;" since="30"/>
+		<method name="getPasspointConfigurations()Ljava/util/List;" since="26" deprecated="29"/>
+		<method name="getScanResults()Ljava/util/List;"/>
+		<method name="getWifiState()I"/>
+		<method name="is24GHzBandSupported()Z" since="31"/>
+		<method name="is5GHzBandSupported()Z" since="21"/>
+		<method name="is60GHzBandSupported()Z" since="31"/>
+		<method name="is6GHzBandSupported()Z" since="30"/>
+		<method name="isAutoWakeupEnabled()Z" since="30"/>
+		<method name="isBridgedApConcurrencySupported()Z" since="31"/>
+		<method name="isCarrierNetworkOffloadEnabled(IZ)Z" since="31"/>
+		<method name="isDecoratedIdentitySupported()Z" since="31"/>
+		<method name="isDeviceToApRttSupported()Z" since="21" deprecated="29"/>
+		<method name="isEasyConnectEnrolleeResponderModeSupported()Z" since="31"/>
+		<method name="isEasyConnectSupported()Z" since="29"/>
+		<method name="isEnhancedOpenSupported()Z" since="29"/>
+		<method name="isEnhancedPowerReportingSupported()Z" since="21"/>
+		<method name="isMakeBeforeBreakWifiSwitchingSupported()Z" since="31"/>
+		<method name="isP2pSupported()Z" since="21"/>
+		<method name="isPasspointTermsAndConditionsSupported()Z" since="31"/>
+		<method name="isPreferredNetworkOffloadSupported()Z" since="21"/>
+		<method name="isScanAlwaysAvailable()Z" since="18" deprecated="29"/>
+		<method name="isScanThrottleEnabled()Z" since="30"/>
+		<method name="isStaApConcurrencySupported()Z" since="30"/>
+		<method name="isStaBridgedApConcurrencySupported()Z" since="31"/>
+		<method name="isStaConcurrencyForLocalOnlyConnectionsSupported()Z" since="31"/>
+		<method name="isTdlsSupported()Z" since="21"/>
+		<method name="isWapiSupported()Z" since="30"/>
+		<method name="isWifiDisplayR2Supported()Z" since="31"/>
+		<method name="isWifiEnabled()Z"/>
+		<method name="isWifiStandardSupported(I)Z" since="30"/>
+		<method name="isWpa3SaeH2eSupported()Z" since="31"/>
+		<method name="isWpa3SaePublicKeySupported()Z" since="31"/>
+		<method name="isWpa3SaeSupported()Z" since="29"/>
+		<method name="isWpa3SuiteBSupported()Z" since="29"/>
+		<method name="pingSupplicant()Z" deprecated="26"/>
+		<method name="reassociate()Z" deprecated="29"/>
+		<method name="reconnect()Z" deprecated="29"/>
+		<method name="registerScanResultsCallback(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$ScanResultsCallback;)V" since="30"/>
+		<method name="registerSubsystemRestartTrackingCallback(Ljava/util/concurrent/Executor;Landroid/net/wifi/WifiManager$SubsystemRestartTrackingCallback;)V" since="31"/>
+		<method name="removeNetwork(I)Z" deprecated="29"/>
+		<method name="removeNetworkSuggestions(Ljava/util/List;)I" since="29"/>
+		<method name="removeNonCallerConfiguredNetworks()Z" since="31"/>
+		<method name="removePasspointConfiguration(Ljava/lang/String;)V" since="26" deprecated="29"/>
+		<method name="removeSuggestionConnectionStatusListener(Landroid/net/wifi/WifiManager$SuggestionConnectionStatusListener;)V" since="30"/>
+		<method name="removeSuggestionUserApprovalStatusListener(Landroid/net/wifi/WifiManager$SuggestionUserApprovalStatusListener;)V" since="31"/>
+		<method name="saveConfiguration()Z" deprecated="26"/>
+		<method name="setTdlsEnabled(Ljava/net/InetAddress;Z)V" since="19"/>
+		<method name="setTdlsEnabledWithMacAddress(Ljava/lang/String;Z)V" since="19"/>
+		<method name="setWifiEnabled(Z)Z" deprecated="29"/>
+		<method name="startLocalOnlyHotspot(Landroid/net/wifi/WifiManager$LocalOnlyHotspotCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="startScan()Z" deprecated="28"/>
+		<method name="startWps(Landroid/net/wifi/WpsInfo;Landroid/net/wifi/WifiManager$WpsCallback;)V" since="21" deprecated="28"/>
+		<method name="unregisterScanResultsCallback(Landroid/net/wifi/WifiManager$ScanResultsCallback;)V" since="30"/>
+		<method name="unregisterSubsystemRestartTrackingCallback(Landroid/net/wifi/WifiManager$SubsystemRestartTrackingCallback;)V" since="31"/>
+		<method name="updateNetwork(Landroid/net/wifi/WifiConfiguration;)I" deprecated="29"/>
+		<field name="ACTION_PICK_WIFI_NETWORK"/>
+		<field name="ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE" since="18"/>
+		<field name="ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION" since="29"/>
+		<field name="ACTION_WIFI_SCAN_AVAILABILITY_CHANGED" since="30"/>
+		<field name="ERROR_AUTHENTICATING" deprecated="28"/>
+		<field name="EXTRA_BSSID" deprecated="28"/>
+		<field name="EXTRA_NETWORK_INFO"/>
+		<field name="EXTRA_NETWORK_SUGGESTION" since="29"/>
+		<field name="EXTRA_NEW_RSSI"/>
+		<field name="EXTRA_NEW_STATE" deprecated="28"/>
+		<field name="EXTRA_PREVIOUS_WIFI_STATE"/>
+		<field name="EXTRA_RESULTS_UPDATED" since="23"/>
+		<field name="EXTRA_SCAN_AVAILABLE" since="30"/>
+		<field name="EXTRA_SUPPLICANT_CONNECTED" deprecated="28"/>
+		<field name="EXTRA_SUPPLICANT_ERROR" deprecated="28"/>
+		<field name="EXTRA_WIFI_INFO" since="14" deprecated="28"/>
+		<field name="EXTRA_WIFI_STATE"/>
+		<field name="NETWORK_IDS_CHANGED_ACTION"/>
+		<field name="NETWORK_STATE_CHANGED_ACTION"/>
+		<field name="RSSI_CHANGED_ACTION"/>
+		<field name="SCAN_RESULTS_AVAILABLE_ACTION"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_DUPLICATE" since="29"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_EXCEEDS_MAX_PER_APP" since="29"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_INVALID" since="30"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_ERROR_ADD_NOT_ALLOWED" since="30"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_ERROR_APP_DISALLOWED" since="29"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_ERROR_INTERNAL" since="29"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_ERROR_REMOVE_INVALID" since="29"/>
+		<field name="STATUS_NETWORK_SUGGESTIONS_SUCCESS" since="29"/>
+		<field name="STATUS_SUGGESTION_APPROVAL_APPROVED_BY_CARRIER_PRIVILEGE" since="31"/>
+		<field name="STATUS_SUGGESTION_APPROVAL_APPROVED_BY_USER" since="31"/>
+		<field name="STATUS_SUGGESTION_APPROVAL_PENDING" since="31"/>
+		<field name="STATUS_SUGGESTION_APPROVAL_REJECTED_BY_USER" since="31"/>
+		<field name="STATUS_SUGGESTION_APPROVAL_UNKNOWN" since="31"/>
+		<field name="STATUS_SUGGESTION_CONNECTION_FAILURE_ASSOCIATION" since="30"/>
+		<field name="STATUS_SUGGESTION_CONNECTION_FAILURE_AUTHENTICATION" since="30"/>
+		<field name="STATUS_SUGGESTION_CONNECTION_FAILURE_IP_PROVISIONING" since="30"/>
+		<field name="STATUS_SUGGESTION_CONNECTION_FAILURE_UNKNOWN" since="30"/>
+		<field name="SUPPLICANT_CONNECTION_CHANGE_ACTION" deprecated="28"/>
+		<field name="SUPPLICANT_STATE_CHANGED_ACTION" deprecated="28"/>
+		<field name="UNKNOWN_SSID" since="30"/>
+		<field name="WIFI_MODE_FULL" since="3" deprecated="29"/>
+		<field name="WIFI_MODE_FULL_HIGH_PERF" since="12"/>
+		<field name="WIFI_MODE_FULL_LOW_LATENCY" since="29"/>
+		<field name="WIFI_MODE_SCAN_ONLY" since="3" deprecated="29"/>
+		<field name="WIFI_STATE_CHANGED_ACTION"/>
+		<field name="WIFI_STATE_DISABLED"/>
+		<field name="WIFI_STATE_DISABLING"/>
+		<field name="WIFI_STATE_ENABLED"/>
+		<field name="WIFI_STATE_ENABLING"/>
+		<field name="WIFI_STATE_UNKNOWN"/>
+		<field name="WPS_AUTH_FAILURE" since="21" deprecated="28"/>
+		<field name="WPS_OVERLAP_ERROR" since="21" deprecated="28"/>
+		<field name="WPS_TIMED_OUT" since="21" deprecated="28"/>
+		<field name="WPS_TKIP_ONLY_PROHIBITED" since="21" deprecated="28"/>
+		<field name="WPS_WEP_PROHIBITED" since="21" deprecated="28"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$AddNetworkResult" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(II)V"/>
+		<field name="CREATOR"/>
+		<field name="STATUS_ADD_PASSPOINT_FAILURE"/>
+		<field name="STATUS_ADD_WIFI_CONFIG_FAILURE"/>
+		<field name="STATUS_FAILURE_UNKNOWN"/>
+		<field name="STATUS_FAILURE_UPDATE_NETWORK_KEYS"/>
+		<field name="STATUS_INVALID_CONFIGURATION"/>
+		<field name="STATUS_INVALID_CONFIGURATION_ENTERPRISE"/>
+		<field name="STATUS_NO_PERMISSION"/>
+		<field name="STATUS_NO_PERMISSION_MODIFY_CONFIG"/>
+		<field name="STATUS_NO_PERMISSION_MODIFY_MAC_RANDOMIZATION"/>
+		<field name="STATUS_NO_PERMISSION_MODIFY_PROXY_SETTING"/>
+		<field name="STATUS_SUCCESS"/>
+		<field name="networkId"/>
+		<field name="statusCode"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$LocalOnlyHotspotCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onFailed(I)V"/>
+		<method name="onStarted(Landroid/net/wifi/WifiManager$LocalOnlyHotspotReservation;)V"/>
+		<method name="onStopped()V"/>
+		<field name="ERROR_GENERIC"/>
+		<field name="ERROR_INCOMPATIBLE_MODE"/>
+		<field name="ERROR_NO_CHANNEL"/>
+		<field name="ERROR_TETHERING_DISALLOWED"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$LocalOnlyHotspotReservation" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getSoftApConfiguration()Landroid/net/wifi/SoftApConfiguration;" since="30"/>
+		<method name="getWifiConfiguration()Landroid/net/wifi/WifiConfiguration;" deprecated="30"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$MulticastLock" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="acquire()V"/>
+		<method name="isHeld()Z"/>
+		<method name="release()V"/>
+		<method name="setReferenceCounted(Z)V"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$ScanResultsCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onScanResultsAvailable()V"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$SubsystemRestartTrackingCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onSubsystemRestarted()V"/>
+		<method name="onSubsystemRestarting()V"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$SuggestionConnectionStatusListener" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onConnectionStatus(Landroid/net/wifi/WifiNetworkSuggestion;I)V"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$SuggestionUserApprovalStatusListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onUserApprovalStatusChange(I)V"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$WifiLock" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="acquire()V"/>
+		<method name="isHeld()Z"/>
+		<method name="release()V"/>
+		<method name="setReferenceCounted(Z)V"/>
+		<method name="setWorkSource(Landroid/os/WorkSource;)V" since="9"/>
+	</class>
+	<class name="android/net/wifi/WifiManager$WpsCallback" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="onFailed(I)V" deprecated="28"/>
+		<method name="onStarted(Ljava/lang/String;)V" deprecated="28"/>
+		<method name="onSucceeded()V" deprecated="28"/>
+	</class>
+	<class name="android/net/wifi/WifiNetworkSpecifier" since="29">
+		<extends name="android/net/NetworkSpecifier"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="canBeSatisfiedBy(Landroid/net/NetworkSpecifier;)Z" since="31" removed="32"/>
+		<method name="getBand()I" since="31"/>
+		<method name="redact()Landroid/net/NetworkSpecifier;" since="31" removed="32"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/WifiNetworkSpecifier$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/wifi/WifiNetworkSpecifier;"/>
+		<method name="setBand(I)Landroid/net/wifi/WifiNetworkSpecifier$Builder;" since="31"/>
+		<method name="setBssid(Landroid/net/MacAddress;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setBssidPattern(Landroid/net/MacAddress;Landroid/net/MacAddress;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setIsEnhancedOpen(Z)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setIsHiddenSsid(Z)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setSsid(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setSsidPattern(Landroid/os/PatternMatcher;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setWpa2EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setWpa2Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+		<method name="setWpa3Enterprise192BitModeConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;" since="31"/>
+		<method name="setWpa3EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;" deprecated="31"/>
+		<method name="setWpa3EnterpriseStandardModeConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;" since="31"/>
+		<method name="setWpa3Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSpecifier$Builder;"/>
+	</class>
+	<class name="android/net/wifi/WifiNetworkSuggestion" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBssid()Landroid/net/MacAddress;" since="30"/>
+		<method name="getEnterpriseConfig()Landroid/net/wifi/WifiEnterpriseConfig;" since="30"/>
+		<method name="getPassphrase()Ljava/lang/String;" since="30"/>
+		<method name="getPasspointConfig()Landroid/net/wifi/hotspot2/PasspointConfiguration;" since="30"/>
+		<method name="getPriority()I" since="30"/>
+		<method name="getPriorityGroup()I" since="31"/>
+		<method name="getSsid()Ljava/lang/String;" since="30"/>
+		<method name="getSubscriptionId()I" since="31"/>
+		<method name="isAppInteractionRequired()Z" since="30"/>
+		<method name="isCarrierMerged()Z" since="31"/>
+		<method name="isCredentialSharedWithUser()Z" since="30"/>
+		<method name="isEnhancedOpen()Z" since="30"/>
+		<method name="isHiddenSsid()Z" since="30"/>
+		<method name="isInitialAutojoinEnabled()Z" since="30"/>
+		<method name="isMetered()Z" since="30"/>
+		<method name="isUntrusted()Z" since="30"/>
+		<method name="isUserInteractionRequired()Z" since="30"/>
+		<field name="CREATOR"/>
+		<field name="RANDOMIZATION_NON_PERSISTENT" since="31"/>
+		<field name="RANDOMIZATION_PERSISTENT" since="31"/>
+	</class>
+	<class name="android/net/wifi/WifiNetworkSuggestion$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/wifi/WifiNetworkSuggestion;"/>
+		<method name="setBssid(Landroid/net/MacAddress;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setCarrierMerged(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="31"/>
+		<method name="setCredentialSharedWithUser(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="30"/>
+		<method name="setIsAppInteractionRequired(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setIsEnhancedOpen(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setIsHiddenSsid(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setIsInitialAutojoinEnabled(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="30"/>
+		<method name="setIsMetered(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setIsUserInteractionRequired(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setIsWpa3SaeH2eOnlyModeEnabled(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="31"/>
+		<method name="setMacRandomizationSetting(I)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="31"/>
+		<method name="setPasspointConfig(Landroid/net/wifi/hotspot2/PasspointConfiguration;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="30"/>
+		<method name="setPriority(I)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setPriorityGroup(I)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="31"/>
+		<method name="setSsid(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setSubscriptionId(I)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="31"/>
+		<method name="setUntrusted(Z)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="30"/>
+		<method name="setWapiEnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="30"/>
+		<method name="setWapiPassphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="30"/>
+		<method name="setWpa2EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setWpa2Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+		<method name="setWpa3Enterprise192BitModeConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="31"/>
+		<method name="setWpa3EnterpriseConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" deprecated="31"/>
+		<method name="setWpa3EnterpriseStandardModeConfig(Landroid/net/wifi/WifiEnterpriseConfig;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;" since="31"/>
+		<method name="setWpa3Passphrase(Ljava/lang/String;)Landroid/net/wifi/WifiNetworkSuggestion$Builder;"/>
+	</class>
+	<class name="android/net/wifi/WpsInfo" since="14" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" deprecated="28"/>
+		<method name="&lt;init>(Landroid/net/wifi/WpsInfo;)V" deprecated="28"/>
+		<field name="BSSID" since="21" deprecated="28"/>
+		<field name="CREATOR" deprecated="28"/>
+		<field name="DISPLAY" deprecated="28"/>
+		<field name="INVALID" deprecated="28"/>
+		<field name="KEYPAD" deprecated="28"/>
+		<field name="LABEL" deprecated="28"/>
+		<field name="PBC" deprecated="28"/>
+		<field name="pin" deprecated="28"/>
+		<field name="setup" deprecated="28"/>
+	</class>
+	<class name="android/net/wifi/aware/AttachCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAttachFailed()V"/>
+		<method name="onAttached(Landroid/net/wifi/aware/WifiAwareSession;)V"/>
+	</class>
+	<class name="android/net/wifi/aware/AwareResources" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="getAvailableDataPathsCount()I"/>
+		<method name="getAvailablePublishSessionsCount()I"/>
+		<method name="getAvailableSubscribeSessionsCount()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/aware/Characteristics" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getMaxMatchFilterLength()I"/>
+		<method name="getMaxServiceNameLength()I"/>
+		<method name="getMaxServiceSpecificInfoLength()I"/>
+		<method name="getSupportedCipherSuites()I" since="30"/>
+		<method name="isInstantCommunicationModeSupported()Z" since="31"/>
+		<field name="CREATOR"/>
+		<field name="WIFI_AWARE_CIPHER_SUITE_NCS_SK_128" since="30"/>
+		<field name="WIFI_AWARE_CIPHER_SUITE_NCS_SK_256" since="30"/>
+	</class>
+	<class name="android/net/wifi/aware/DiscoverySession" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="createNetworkSpecifierOpen(Landroid/net/wifi/aware/PeerHandle;)Landroid/net/NetworkSpecifier;" deprecated="29"/>
+		<method name="createNetworkSpecifierPassphrase(Landroid/net/wifi/aware/PeerHandle;Ljava/lang/String;)Landroid/net/NetworkSpecifier;" deprecated="29"/>
+		<method name="sendMessage(Landroid/net/wifi/aware/PeerHandle;I[B)V"/>
+	</class>
+	<class name="android/net/wifi/aware/DiscoverySessionCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onMessageReceived(Landroid/net/wifi/aware/PeerHandle;[B)V"/>
+		<method name="onMessageSendFailed(I)V"/>
+		<method name="onMessageSendSucceeded(I)V"/>
+		<method name="onPublishStarted(Landroid/net/wifi/aware/PublishDiscoverySession;)V"/>
+		<method name="onServiceDiscovered(Landroid/net/wifi/aware/PeerHandle;[BLjava/util/List;)V"/>
+		<method name="onServiceDiscoveredWithinRange(Landroid/net/wifi/aware/PeerHandle;[BLjava/util/List;I)V" since="28"/>
+		<method name="onServiceLost(Landroid/net/wifi/aware/PeerHandle;I)V" since="31"/>
+		<method name="onSessionConfigFailed()V"/>
+		<method name="onSessionConfigUpdated()V"/>
+		<method name="onSessionTerminated()V"/>
+		<method name="onSubscribeStarted(Landroid/net/wifi/aware/SubscribeDiscoverySession;)V"/>
+	</class>
+	<class name="android/net/wifi/aware/IdentityChangedListener" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onIdentityChanged([B)V"/>
+	</class>
+	<class name="android/net/wifi/aware/ParcelablePeerHandle" since="29">
+		<extends name="android/net/wifi/aware/PeerHandle"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/net/wifi/aware/PeerHandle;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/aware/PeerHandle" since="26">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/net/wifi/aware/PublishConfig" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="PUBLISH_TYPE_SOLICITED"/>
+		<field name="PUBLISH_TYPE_UNSOLICITED"/>
+	</class>
+	<class name="android/net/wifi/aware/PublishConfig$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/wifi/aware/PublishConfig;"/>
+		<method name="setMatchFilter(Ljava/util/List;)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
+		<method name="setPublishType(I)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
+		<method name="setRangingEnabled(Z)Landroid/net/wifi/aware/PublishConfig$Builder;" since="28"/>
+		<method name="setServiceName(Ljava/lang/String;)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
+		<method name="setServiceSpecificInfo([B)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
+		<method name="setTerminateNotificationEnabled(Z)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
+		<method name="setTtlSec(I)Landroid/net/wifi/aware/PublishConfig$Builder;"/>
+	</class>
+	<class name="android/net/wifi/aware/PublishDiscoverySession" since="26">
+		<extends name="android/net/wifi/aware/DiscoverySession"/>
+		<method name="updatePublish(Landroid/net/wifi/aware/PublishConfig;)V"/>
+	</class>
+	<class name="android/net/wifi/aware/SubscribeConfig" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="SUBSCRIBE_TYPE_ACTIVE"/>
+		<field name="SUBSCRIBE_TYPE_PASSIVE"/>
+	</class>
+	<class name="android/net/wifi/aware/SubscribeConfig$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/wifi/aware/SubscribeConfig;"/>
+		<method name="setMatchFilter(Ljava/util/List;)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
+		<method name="setMaxDistanceMm(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;" since="28"/>
+		<method name="setMinDistanceMm(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;" since="28"/>
+		<method name="setServiceName(Ljava/lang/String;)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
+		<method name="setServiceSpecificInfo([B)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
+		<method name="setSubscribeType(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
+		<method name="setTerminateNotificationEnabled(Z)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
+		<method name="setTtlSec(I)Landroid/net/wifi/aware/SubscribeConfig$Builder;"/>
+	</class>
+	<class name="android/net/wifi/aware/SubscribeDiscoverySession" since="26">
+		<extends name="android/net/wifi/aware/DiscoverySession"/>
+		<method name="updateSubscribe(Landroid/net/wifi/aware/SubscribeConfig;)V"/>
+	</class>
+	<class name="android/net/wifi/aware/WifiAwareManager" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="attach(Landroid/net/wifi/aware/AttachCallback;Landroid/net/wifi/aware/IdentityChangedListener;Landroid/os/Handler;)V"/>
+		<method name="attach(Landroid/net/wifi/aware/AttachCallback;Landroid/os/Handler;)V"/>
+		<method name="getAvailableAwareResources()Landroid/net/wifi/aware/AwareResources;" since="31"/>
+		<method name="getCharacteristics()Landroid/net/wifi/aware/Characteristics;"/>
+		<method name="isAvailable()Z"/>
+		<method name="isDeviceAttached()Z" since="31"/>
+		<method name="isInstantCommunicationModeEnabled()Z" since="31"/>
+		<field name="ACTION_WIFI_AWARE_STATE_CHANGED"/>
+		<field name="WIFI_AWARE_DATA_PATH_ROLE_INITIATOR"/>
+		<field name="WIFI_AWARE_DATA_PATH_ROLE_RESPONDER"/>
+		<field name="WIFI_AWARE_DISCOVERY_LOST_REASON_PEER_NOT_VISIBLE" since="31"/>
+		<field name="WIFI_AWARE_DISCOVERY_LOST_REASON_UNKNOWN" since="31"/>
+	</class>
+	<class name="android/net/wifi/aware/WifiAwareNetworkInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/net/TransportInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getPeerIpv6Addr()Ljava/net/Inet6Address;"/>
+		<method name="getPort()I"/>
+		<method name="getTransportProtocol()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/aware/WifiAwareNetworkSpecifier" since="29">
+		<extends name="android/net/NetworkSpecifier"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="canBeSatisfiedBy(Landroid/net/NetworkSpecifier;)Z" since="31" removed="32"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/aware/WifiAwareNetworkSpecifier$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/wifi/aware/DiscoverySession;Landroid/net/wifi/aware/PeerHandle;)V"/>
+		<method name="&lt;init>(Landroid/net/wifi/aware/PublishDiscoverySession;)V" since="31"/>
+		<method name="build()Landroid/net/wifi/aware/WifiAwareNetworkSpecifier;"/>
+		<method name="setPmk([B)Landroid/net/wifi/aware/WifiAwareNetworkSpecifier$Builder;" since="30"/>
+		<method name="setPort(I)Landroid/net/wifi/aware/WifiAwareNetworkSpecifier$Builder;"/>
+		<method name="setPskPassphrase(Ljava/lang/String;)Landroid/net/wifi/aware/WifiAwareNetworkSpecifier$Builder;"/>
+		<method name="setTransportProtocol(I)Landroid/net/wifi/aware/WifiAwareNetworkSpecifier$Builder;"/>
+	</class>
+	<class name="android/net/wifi/aware/WifiAwareSession" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="createNetworkSpecifierOpen(I[B)Landroid/net/NetworkSpecifier;" deprecated="31"/>
+		<method name="createNetworkSpecifierPassphrase(I[BLjava/lang/String;)Landroid/net/NetworkSpecifier;" deprecated="31"/>
+		<method name="publish(Landroid/net/wifi/aware/PublishConfig;Landroid/net/wifi/aware/DiscoverySessionCallback;Landroid/os/Handler;)V"/>
+		<method name="subscribe(Landroid/net/wifi/aware/SubscribeConfig;Landroid/net/wifi/aware/DiscoverySessionCallback;Landroid/os/Handler;)V"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/ConfigParser" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="parsePasspointConfig(Ljava/lang/String;[B)Landroid/net/wifi/hotspot2/PasspointConfiguration;"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/PasspointConfiguration" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/hotspot2/PasspointConfiguration;)V"/>
+		<method name="getCredential()Landroid/net/wifi/hotspot2/pps/Credential;"/>
+		<method name="getDecoratedIdentityPrefix()Ljava/lang/String;" since="31"/>
+		<method name="getHomeSp()Landroid/net/wifi/hotspot2/pps/HomeSp;"/>
+		<method name="getSubscriptionExpirationTimeMillis()J" since="30"/>
+		<method name="getUniqueId()Ljava/lang/String;" since="30"/>
+		<method name="isOsuProvisioned()Z" since="30"/>
+		<method name="setCredential(Landroid/net/wifi/hotspot2/pps/Credential;)V"/>
+		<method name="setDecoratedIdentityPrefix(Ljava/lang/String;)V" since="31"/>
+		<method name="setHomeSp(Landroid/net/wifi/hotspot2/pps/HomeSp;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/omadm/PpsMoParser" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="parseMoText(Ljava/lang/String;)Landroid/net/wifi/hotspot2/PasspointConfiguration;"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/pps/Credential" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential;)V"/>
+		<method name="getCaCertificate()Ljava/security/cert/X509Certificate;"/>
+		<method name="getCertCredential()Landroid/net/wifi/hotspot2/pps/Credential$CertificateCredential;"/>
+		<method name="getClientCertificateChain()[Ljava/security/cert/X509Certificate;"/>
+		<method name="getClientPrivateKey()Ljava/security/PrivateKey;"/>
+		<method name="getRealm()Ljava/lang/String;"/>
+		<method name="getSimCredential()Landroid/net/wifi/hotspot2/pps/Credential$SimCredential;"/>
+		<method name="getUserCredential()Landroid/net/wifi/hotspot2/pps/Credential$UserCredential;"/>
+		<method name="setCaCertificate(Ljava/security/cert/X509Certificate;)V"/>
+		<method name="setCertCredential(Landroid/net/wifi/hotspot2/pps/Credential$CertificateCredential;)V"/>
+		<method name="setClientCertificateChain([Ljava/security/cert/X509Certificate;)V"/>
+		<method name="setClientPrivateKey(Ljava/security/PrivateKey;)V"/>
+		<method name="setRealm(Ljava/lang/String;)V"/>
+		<method name="setSimCredential(Landroid/net/wifi/hotspot2/pps/Credential$SimCredential;)V"/>
+		<method name="setUserCredential(Landroid/net/wifi/hotspot2/pps/Credential$UserCredential;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/pps/Credential$CertificateCredential" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential$CertificateCredential;)V"/>
+		<method name="getCertSha256Fingerprint()[B"/>
+		<method name="getCertType()Ljava/lang/String;"/>
+		<method name="setCertSha256Fingerprint([B)V"/>
+		<method name="setCertType(Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/pps/Credential$SimCredential" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential$SimCredential;)V"/>
+		<method name="getEapType()I"/>
+		<method name="getImsi()Ljava/lang/String;"/>
+		<method name="setEapType(I)V"/>
+		<method name="setImsi(Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/pps/Credential$UserCredential" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/Credential$UserCredential;)V"/>
+		<method name="getEapType()I"/>
+		<method name="getNonEapInnerMethod()Ljava/lang/String;"/>
+		<method name="getPassword()Ljava/lang/String;"/>
+		<method name="getUsername()Ljava/lang/String;"/>
+		<method name="setEapType(I)V"/>
+		<method name="setNonEapInnerMethod(Ljava/lang/String;)V"/>
+		<method name="setPassword(Ljava/lang/String;)V"/>
+		<method name="setUsername(Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/hotspot2/pps/HomeSp" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/hotspot2/pps/HomeSp;)V"/>
+		<method name="getFqdn()Ljava/lang/String;"/>
+		<method name="getFriendlyName()Ljava/lang/String;"/>
+		<method name="getMatchAllOis()[J" since="31"/>
+		<method name="getMatchAnyOis()[J" since="31"/>
+		<method name="getOtherHomePartnersList()Ljava/util/Collection;" since="31"/>
+		<method name="getRoamingConsortiumOis()[J"/>
+		<method name="setFqdn(Ljava/lang/String;)V"/>
+		<method name="setFriendlyName(Ljava/lang/String;)V"/>
+		<method name="setMatchAllOis([J)V" since="31"/>
+		<method name="setMatchAnyOis([J)V" since="31"/>
+		<method name="setOtherHomePartnersList(Ljava/util/Collection;)V" since="31"/>
+		<method name="setRoamingConsortiumOis([J)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pConfig" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pConfig;)V"/>
+		<method name="getGroupOwnerBand()I" since="30"/>
+		<method name="getNetworkId()I" since="30"/>
+		<method name="getNetworkName()Ljava/lang/String;" since="30"/>
+		<method name="getPassphrase()Ljava/lang/String;" since="30"/>
+		<field name="CREATOR"/>
+		<field name="GROUP_OWNER_BAND_2GHZ" since="29"/>
+		<field name="GROUP_OWNER_BAND_5GHZ" since="29"/>
+		<field name="GROUP_OWNER_BAND_AUTO" since="29"/>
+		<field name="GROUP_OWNER_INTENT_AUTO" since="30"/>
+		<field name="GROUP_OWNER_INTENT_MAX" since="30"/>
+		<field name="GROUP_OWNER_INTENT_MIN" since="30"/>
+		<field name="deviceAddress"/>
+		<field name="groupOwnerIntent"/>
+		<field name="wps"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pConfig$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/net/wifi/p2p/WifiP2pConfig;"/>
+		<method name="enablePersistentMode(Z)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+		<method name="setDeviceAddress(Landroid/net/MacAddress;)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+		<method name="setGroupOperatingBand(I)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+		<method name="setGroupOperatingFrequency(I)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+		<method name="setNetworkName(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+		<method name="setPassphrase(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pConfig$Builder;"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pDevice" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
+		<method name="getWfdInfo()Landroid/net/wifi/p2p/WifiP2pWfdInfo;" since="30"/>
+		<method name="isGroupOwner()Z"/>
+		<method name="isServiceDiscoveryCapable()Z"/>
+		<method name="update(Landroid/net/wifi/p2p/WifiP2pDevice;)V" since="30"/>
+		<method name="wpsDisplaySupported()Z"/>
+		<method name="wpsKeypadSupported()Z"/>
+		<method name="wpsPbcSupported()Z"/>
+		<field name="AVAILABLE"/>
+		<field name="CONNECTED"/>
+		<field name="CREATOR"/>
+		<field name="FAILED"/>
+		<field name="INVITED"/>
+		<field name="UNAVAILABLE"/>
+		<field name="deviceAddress"/>
+		<field name="deviceName"/>
+		<field name="primaryDeviceType"/>
+		<field name="secondaryDeviceType"/>
+		<field name="status"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pDeviceList" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pDeviceList;)V"/>
+		<method name="get(Ljava/lang/String;)Landroid/net/wifi/p2p/WifiP2pDevice;" since="18"/>
+		<method name="getDeviceList()Ljava/util/Collection;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pGroup" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pGroup;)V"/>
+		<method name="getClientList()Ljava/util/Collection;"/>
+		<method name="getFrequency()I" since="29"/>
+		<method name="getInterface()Ljava/lang/String;"/>
+		<method name="getNetworkId()I" since="30"/>
+		<method name="getNetworkName()Ljava/lang/String;"/>
+		<method name="getOwner()Landroid/net/wifi/p2p/WifiP2pDevice;"/>
+		<method name="getPassphrase()Ljava/lang/String;"/>
+		<method name="isGroupOwner()Z"/>
+		<field name="CREATOR"/>
+		<field name="NETWORK_ID_PERSISTENT" since="30"/>
+		<field name="NETWORK_ID_TEMPORARY" since="30"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pInfo;)V"/>
+		<field name="CREATOR"/>
+		<field name="groupFormed"/>
+		<field name="groupOwnerAddress"/>
+		<field name="isGroupOwner"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="addLocalService(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<method name="addServiceRequest(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<method name="cancelConnect(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
+		<method name="clearLocalServices(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<method name="clearServiceRequests(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<method name="connect(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pConfig;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
+		<method name="createGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pConfig;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="29"/>
+		<method name="createGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
+		<method name="discoverPeers(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
+		<method name="discoverServices(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<method name="initialize(Landroid/content/Context;Landroid/os/Looper;Landroid/net/wifi/p2p/WifiP2pManager$ChannelListener;)Landroid/net/wifi/p2p/WifiP2pManager$Channel;"/>
+		<method name="removeGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V"/>
+		<method name="removeLocalService(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<method name="removeServiceRequest(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<method name="requestConnectionInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ConnectionInfoListener;)V"/>
+		<method name="requestDeviceInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$DeviceInfoListener;)V" since="29"/>
+		<method name="requestDiscoveryState(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$DiscoveryStateListener;)V" since="29"/>
+		<method name="requestGroupInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$GroupInfoListener;)V"/>
+		<method name="requestNetworkInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$NetworkInfoListener;)V" since="29"/>
+		<method name="requestP2pState(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$P2pStateListener;)V" since="29"/>
+		<method name="requestPeers(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$PeerListListener;)V"/>
+		<method name="setDnsSdResponseListeners(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$DnsSdServiceResponseListener;Landroid/net/wifi/p2p/WifiP2pManager$DnsSdTxtRecordListener;)V" since="16"/>
+		<method name="setServiceResponseListener(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ServiceResponseListener;)V" since="16"/>
+		<method name="setUpnpServiceResponseListener(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$UpnpServiceResponseListener;)V" since="16"/>
+		<method name="stopPeerDiscovery(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V" since="16"/>
+		<field name="BUSY"/>
+		<field name="ERROR"/>
+		<field name="EXTRA_DISCOVERY_STATE" since="16"/>
+		<field name="EXTRA_NETWORK_INFO"/>
+		<field name="EXTRA_P2P_DEVICE_LIST" since="18"/>
+		<field name="EXTRA_WIFI_P2P_DEVICE"/>
+		<field name="EXTRA_WIFI_P2P_GROUP" since="18"/>
+		<field name="EXTRA_WIFI_P2P_INFO"/>
+		<field name="EXTRA_WIFI_STATE"/>
+		<field name="NO_SERVICE_REQUESTS" since="16"/>
+		<field name="P2P_UNSUPPORTED"/>
+		<field name="WIFI_P2P_CONNECTION_CHANGED_ACTION"/>
+		<field name="WIFI_P2P_DISCOVERY_CHANGED_ACTION" since="16"/>
+		<field name="WIFI_P2P_DISCOVERY_STARTED" since="16"/>
+		<field name="WIFI_P2P_DISCOVERY_STOPPED" since="16"/>
+		<field name="WIFI_P2P_PEERS_CHANGED_ACTION"/>
+		<field name="WIFI_P2P_STATE_CHANGED_ACTION"/>
+		<field name="WIFI_P2P_STATE_DISABLED"/>
+		<field name="WIFI_P2P_STATE_ENABLED"/>
+		<field name="WIFI_P2P_THIS_DEVICE_CHANGED_ACTION"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$ActionListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onFailure(I)V"/>
+		<method name="onSuccess()V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$Channel" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="27"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$ChannelListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onChannelDisconnected()V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$ConnectionInfoListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onConnectionInfoAvailable(Landroid/net/wifi/p2p/WifiP2pInfo;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$DeviceInfoListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onDeviceInfoAvailable(Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$DiscoveryStateListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onDiscoveryStateAvailable(I)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$DnsSdServiceResponseListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onDnsSdServiceAvailable(Ljava/lang/String;Ljava/lang/String;Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$DnsSdTxtRecordListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onDnsSdTxtRecordAvailable(Ljava/lang/String;Ljava/util/Map;Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$GroupInfoListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onGroupInfoAvailable(Landroid/net/wifi/p2p/WifiP2pGroup;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$NetworkInfoListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onNetworkInfoAvailable(Landroid/net/NetworkInfo;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$P2pStateListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onP2pStateAvailable(I)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$PeerListListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onPeersAvailable(Landroid/net/wifi/p2p/WifiP2pDeviceList;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$ServiceResponseListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onServiceAvailable(I[BLandroid/net/wifi/p2p/WifiP2pDevice;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pManager$UpnpServiceResponseListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onUpnpServiceAvailable(Ljava/util/List;Landroid/net/wifi/p2p/WifiP2pDevice;)V"/>
+	</class>
+	<class name="android/net/wifi/p2p/WifiP2pWfdInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/net/wifi/p2p/WifiP2pWfdInfo;)V"/>
+		<method name="getControlPort()I"/>
+		<method name="getDeviceInfo()I" since="31"/>
+		<method name="getDeviceType()I"/>
+		<method name="getMaxThroughput()I"/>
+		<method name="getR2DeviceInfo()I" since="31"/>
+		<method name="getR2DeviceType()I" since="31"/>
+		<method name="isContentProtectionSupported()Z"/>
+		<method name="isCoupledSinkSupportedAtSink()Z" since="31"/>
+		<method name="isCoupledSinkSupportedAtSource()Z" since="31"/>
+		<method name="isEnabled()Z"/>
+		<method name="isR2Supported()Z" since="31"/>
+		<method name="isSessionAvailable()Z"/>
+		<method name="setContentProtectionSupported(Z)V"/>
+		<method name="setControlPort(I)V"/>
+		<method name="setCoupledSinkSupportAtSink(Z)V" since="31"/>
+		<method name="setCoupledSinkSupportAtSource(Z)V" since="31"/>
+		<method name="setDeviceType(I)Z"/>
+		<method name="setEnabled(Z)V"/>
+		<method name="setMaxThroughput(I)V"/>
+		<method name="setR2DeviceType(I)Z" since="31"/>
+		<method name="setSessionAvailable(Z)V"/>
+		<field name="CREATOR"/>
+		<field name="DEVICE_INFO_AUDIO_ONLY_SUPPORT_AT_SOURCE" since="31"/>
+		<field name="DEVICE_INFO_AUDIO_UNSUPPORTED_AT_PRIMARY_SINK" since="31"/>
+		<field name="DEVICE_INFO_CONTENT_PROTECTION_SUPPORT" since="31"/>
+		<field name="DEVICE_INFO_COUPLED_SINK_SUPPORT_AT_SINK" since="31"/>
+		<field name="DEVICE_INFO_COUPLED_SINK_SUPPORT_AT_SOURCE" since="31"/>
+		<field name="DEVICE_INFO_DEVICE_TYPE_MASK" since="31"/>
+		<field name="DEVICE_INFO_PREFERRED_CONNECTIVITY_MASK" since="31"/>
+		<field name="DEVICE_INFO_SESSION_AVAILABLE_MASK" since="31"/>
+		<field name="DEVICE_INFO_TDLS_PERSISTENT_GROUP" since="31"/>
+		<field name="DEVICE_INFO_TDLS_PERSISTENT_GROUP_REINVOKE" since="31"/>
+		<field name="DEVICE_INFO_TIME_SYNCHRONIZATION_SUPPORT" since="31"/>
+		<field name="DEVICE_INFO_WFD_SERVICE_DISCOVERY_SUPPORT" since="31"/>
+		<field name="DEVICE_TYPE_PRIMARY_SINK"/>
+		<field name="DEVICE_TYPE_SECONDARY_SINK"/>
+		<field name="DEVICE_TYPE_SOURCE_OR_PRIMARY_SINK"/>
+		<field name="DEVICE_TYPE_WFD_SOURCE"/>
+		<field name="PREFERRED_CONNECTIVITY_P2P" since="31"/>
+		<field name="PREFERRED_CONNECTIVITY_TDLS" since="31"/>
+	</class>
+	<class name="android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo" since="16">
+		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo;"/>
+	</class>
+	<class name="android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest" since="16">
+		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest"/>
+		<method name="newInstance()Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
+		<method name="newInstance(Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest;"/>
+	</class>
+	<class name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="SERVICE_TYPE_ALL"/>
+		<field name="SERVICE_TYPE_BONJOUR"/>
+		<field name="SERVICE_TYPE_UPNP"/>
+		<field name="SERVICE_TYPE_VENDOR_SPECIFIC"/>
+	</class>
+	<class name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="newInstance(I)Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;"/>
+		<method name="newInstance(ILjava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pServiceRequest;"/>
+	</class>
+	<class name="android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo" since="16">
+		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceInfo"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo;"/>
+	</class>
+	<class name="android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest" since="16">
+		<extends name="android/net/wifi/p2p/nsd/WifiP2pServiceRequest"/>
+		<method name="newInstance()Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest;"/>
+		<method name="newInstance(Ljava/lang/String;)Landroid/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest;"/>
+	</class>
+	<class name="android/net/wifi/rtt/CivicLocationKeys" since="29">
+		<extends name="java/lang/Object"/>
+		<field name="ADDITIONAL_CODE"/>
+		<field name="APT"/>
+		<field name="BOROUGH"/>
+		<field name="BRANCH_ROAD_NAME"/>
+		<field name="BUILDING"/>
+		<field name="CITY"/>
+		<field name="COUNTY"/>
+		<field name="DESK"/>
+		<field name="FLOOR"/>
+		<field name="GROUP_OF_STREETS"/>
+		<field name="HNO"/>
+		<field name="HNS"/>
+		<field name="LANGUAGE"/>
+		<field name="LMK"/>
+		<field name="LOC"/>
+		<field name="NAM"/>
+		<field name="NEIGHBORHOOD"/>
+		<field name="PCN"/>
+		<field name="POD"/>
+		<field name="POSTAL_CODE"/>
+		<field name="PO_BOX"/>
+		<field name="PRD"/>
+		<field name="PRIMARY_ROAD_NAME"/>
+		<field name="ROAD_SECTION"/>
+		<field name="ROOM"/>
+		<field name="SCRIPT"/>
+		<field name="STATE"/>
+		<field name="STREET_NAME_POST_MODIFIER"/>
+		<field name="STREET_NAME_PRE_MODIFIER"/>
+		<field name="STS"/>
+		<field name="SUBBRANCH_ROAD_NAME"/>
+		<field name="TYPE_OF_PLACE"/>
+	</class>
+	<class name="android/net/wifi/rtt/RangingRequest" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDefaultRttBurstSize()I" since="31"/>
+		<method name="getMaxPeers()I"/>
+		<method name="getMaxRttBurstSize()I" since="31"/>
+		<method name="getMinRttBurstSize()I" since="31"/>
+		<method name="getRttBurstSize()I" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/net/wifi/rtt/RangingRequest$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addAccessPoint(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
+		<method name="addAccessPoints(Ljava/util/List;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
+		<method name="addNon80211mcCapableAccessPoint(Landroid/net/wifi/ScanResult;)Landroid/net/wifi/rtt/RangingRequest$Builder;" since="31"/>
+		<method name="addNon80211mcCapableAccessPoints(Ljava/util/List;)Landroid/net/wifi/rtt/RangingRequest$Builder;" since="31"/>
+		<method name="addWifiAwarePeer(Landroid/net/MacAddress;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
+		<method name="addWifiAwarePeer(Landroid/net/wifi/aware/PeerHandle;)Landroid/net/wifi/rtt/RangingRequest$Builder;"/>
+		<method name="build()Landroid/net/wifi/rtt/RangingRequest;"/>
+		<method name="setRttBurstSize(I)Landroid/net/wifi/rtt/RangingRequest$Builder;" since="31"/>
+	</class>
+	<class name="android/net/wifi/rtt/RangingResult" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDistanceMm()I"/>
+		<method name="getDistanceStdDevMm()I"/>
+		<method name="getMacAddress()Landroid/net/MacAddress;"/>
+		<method name="getNumAttemptedMeasurements()I"/>
+		<method name="getNumSuccessfulMeasurements()I"/>
+		<method name="getPeerHandle()Landroid/net/wifi/aware/PeerHandle;"/>
+		<method name="getRangingTimestampMillis()J"/>
+		<method name="getRssi()I"/>
+		<method name="getStatus()I"/>
+		<method name="getUnverifiedResponderLocation()Landroid/net/wifi/rtt/ResponderLocation;" since="29"/>
+		<method name="is80211mcMeasurement()Z" since="31"/>
+		<field name="CREATOR"/>
+		<field name="STATUS_FAIL"/>
+		<field name="STATUS_RESPONDER_DOES_NOT_SUPPORT_IEEE80211MC"/>
+		<field name="STATUS_SUCCESS"/>
+	</class>
+	<class name="android/net/wifi/rtt/RangingResultCallback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onRangingFailure(I)V"/>
+		<method name="onRangingResults(Ljava/util/List;)V"/>
+		<field name="STATUS_CODE_FAIL"/>
+		<field name="STATUS_CODE_FAIL_RTT_NOT_AVAILABLE"/>
+	</class>
+	<class name="android/net/wifi/rtt/ResponderLocation" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAltitude()D"/>
+		<method name="getAltitudeType()I"/>
+		<method name="getAltitudeUncertainty()D"/>
+		<method name="getColocatedBssids()Ljava/util/List;"/>
+		<method name="getDatum()I"/>
+		<method name="getExpectedToMove()I"/>
+		<method name="getFloorNumber()D"/>
+		<method name="getHeightAboveFloorMeters()D"/>
+		<method name="getHeightAboveFloorUncertaintyMeters()D"/>
+		<method name="getLatitude()D"/>
+		<method name="getLatitudeUncertainty()D"/>
+		<method name="getLciVersion()I"/>
+		<method name="getLongitude()D"/>
+		<method name="getLongitudeUncertainty()D"/>
+		<method name="getMapImageMimeType()Ljava/lang/String;"/>
+		<method name="getMapImageUri()Landroid/net/Uri;"/>
+		<method name="getRegisteredLocationAgreementIndication()Z"/>
+		<method name="isLciSubelementValid()Z"/>
+		<method name="isZaxisSubelementValid()Z"/>
+		<method name="toCivicLocationAddress()Landroid/location/Address;"/>
+		<method name="toCivicLocationSparseArray()Landroid/util/SparseArray;"/>
+		<method name="toLocation()Landroid/location/Location;"/>
+		<field name="ALTITUDE_FLOORS"/>
+		<field name="ALTITUDE_METERS"/>
+		<field name="ALTITUDE_UNDEFINED"/>
+		<field name="CREATOR"/>
+		<field name="DATUM_NAD83_MLLW"/>
+		<field name="DATUM_NAD83_NAV88"/>
+		<field name="DATUM_UNDEFINED"/>
+		<field name="DATUM_WGS84"/>
+		<field name="LCI_VERSION_1"/>
+		<field name="LOCATION_FIXED"/>
+		<field name="LOCATION_MOVEMENT_UNKNOWN"/>
+		<field name="LOCATION_RESERVED"/>
+		<field name="LOCATION_VARIABLE"/>
+	</class>
+	<class name="android/net/wifi/rtt/WifiRttManager" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="isAvailable()Z"/>
+		<method name="startRanging(Landroid/net/wifi/rtt/RangingRequest;Ljava/util/concurrent/Executor;Landroid/net/wifi/rtt/RangingResultCallback;)V"/>
+		<field name="ACTION_WIFI_RTT_STATE_CHANGED"/>
+	</class>
+	<class name="android/nfc/FormatException" since="9">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="16"/>
+	</class>
+	<class name="android/nfc/NdefMessage" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/nfc/NdefRecord;[Landroid/nfc/NdefRecord;)V" since="16"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="&lt;init>([Landroid/nfc/NdefRecord;)V"/>
+		<method name="getByteArrayLength()I" since="16"/>
+		<method name="getRecords()[Landroid/nfc/NdefRecord;"/>
+		<method name="toByteArray()[B"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/nfc/NdefRecord" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(S[B[B[B)V"/>
+		<method name="&lt;init>([B)V" deprecated="16"/>
+		<method name="createApplicationRecord(Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="14"/>
+		<method name="createExternal(Ljava/lang/String;Ljava/lang/String;[B)Landroid/nfc/NdefRecord;" since="16"/>
+		<method name="createMime(Ljava/lang/String;[B)Landroid/nfc/NdefRecord;" since="16"/>
+		<method name="createTextRecord(Ljava/lang/String;Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="21"/>
+		<method name="createUri(Landroid/net/Uri;)Landroid/nfc/NdefRecord;" since="14"/>
+		<method name="createUri(Ljava/lang/String;)Landroid/nfc/NdefRecord;" since="14"/>
+		<method name="getId()[B"/>
+		<method name="getPayload()[B"/>
+		<method name="getTnf()S"/>
+		<method name="getType()[B"/>
+		<method name="toByteArray()[B" deprecated="16"/>
+		<method name="toMimeType()Ljava/lang/String;" since="16"/>
+		<method name="toUri()Landroid/net/Uri;" since="16"/>
+		<field name="CREATOR"/>
+		<field name="RTD_ALTERNATIVE_CARRIER"/>
+		<field name="RTD_HANDOVER_CARRIER"/>
+		<field name="RTD_HANDOVER_REQUEST"/>
+		<field name="RTD_HANDOVER_SELECT"/>
+		<field name="RTD_SMART_POSTER"/>
+		<field name="RTD_TEXT"/>
+		<field name="RTD_URI"/>
+		<field name="TNF_ABSOLUTE_URI"/>
+		<field name="TNF_EMPTY"/>
+		<field name="TNF_EXTERNAL_TYPE"/>
+		<field name="TNF_MIME_MEDIA"/>
+		<field name="TNF_UNCHANGED"/>
+		<field name="TNF_UNKNOWN"/>
+		<field name="TNF_WELL_KNOWN"/>
+	</class>
+	<class name="android/nfc/NfcAdapter" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="disableForegroundDispatch(Landroid/app/Activity;)V" since="10"/>
+		<method name="disableForegroundNdefPush(Landroid/app/Activity;)V" since="10" deprecated="15"/>
+		<method name="disableReaderMode(Landroid/app/Activity;)V" since="19"/>
+		<method name="enableForegroundDispatch(Landroid/app/Activity;Landroid/app/PendingIntent;[Landroid/content/IntentFilter;[[Ljava/lang/String;)V" since="10"/>
+		<method name="enableForegroundNdefPush(Landroid/app/Activity;Landroid/nfc/NdefMessage;)V" since="10" deprecated="15"/>
+		<method name="enableReaderMode(Landroid/app/Activity;Landroid/nfc/NfcAdapter$ReaderCallback;ILandroid/os/Bundle;)V" since="19"/>
+		<method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;" deprecated="15" removed="16"/>
+		<method name="getDefaultAdapter(Landroid/content/Context;)Landroid/nfc/NfcAdapter;" since="10"/>
+		<method name="ignore(Landroid/nfc/Tag;ILandroid/nfc/NfcAdapter$OnTagRemovedListener;Landroid/os/Handler;)Z" since="24"/>
+		<method name="invokeBeam(Landroid/app/Activity;)Z" since="21" deprecated="29"/>
+		<method name="isEnabled()Z"/>
+		<method name="isNdefPushEnabled()Z" since="16" deprecated="29"/>
+		<method name="isSecureNfcEnabled()Z" since="29"/>
+		<method name="isSecureNfcSupported()Z" since="29"/>
+		<method name="setBeamPushUris([Landroid/net/Uri;Landroid/app/Activity;)V" since="16" deprecated="29"/>
+		<method name="setBeamPushUrisCallback(Landroid/nfc/NfcAdapter$CreateBeamUrisCallback;Landroid/app/Activity;)V" since="16" deprecated="29"/>
+		<method name="setNdefPushMessage(Landroid/nfc/NdefMessage;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29"/>
+		<method name="setNdefPushMessageCallback(Landroid/nfc/NfcAdapter$CreateNdefMessageCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29"/>
+		<method name="setOnNdefPushCompleteCallback(Landroid/nfc/NfcAdapter$OnNdefPushCompleteCallback;Landroid/app/Activity;[Landroid/app/Activity;)V" since="14" deprecated="29"/>
+		<field name="ACTION_ADAPTER_STATE_CHANGED" since="18"/>
+		<field name="ACTION_NDEF_DISCOVERED" since="10"/>
+		<field name="ACTION_PREFERRED_PAYMENT_CHANGED" since="30"/>
+		<field name="ACTION_TAG_DISCOVERED"/>
+		<field name="ACTION_TECH_DISCOVERED" since="10"/>
+		<field name="ACTION_TRANSACTION_DETECTED" since="28"/>
+		<field name="EXTRA_ADAPTER_STATE" since="18"/>
+		<field name="EXTRA_AID" since="28"/>
+		<field name="EXTRA_DATA" since="28"/>
+		<field name="EXTRA_ID"/>
+		<field name="EXTRA_NDEF_MESSAGES"/>
+		<field name="EXTRA_PREFERRED_PAYMENT_CHANGED_REASON" since="30"/>
+		<field name="EXTRA_READER_PRESENCE_CHECK_DELAY" since="19"/>
+		<field name="EXTRA_SECURE_ELEMENT_NAME" since="28"/>
+		<field name="EXTRA_TAG" since="10"/>
+		<field name="FLAG_READER_NFC_A" since="19"/>
+		<field name="FLAG_READER_NFC_B" since="19"/>
+		<field name="FLAG_READER_NFC_BARCODE" since="19"/>
+		<field name="FLAG_READER_NFC_F" since="19"/>
+		<field name="FLAG_READER_NFC_V" since="19"/>
+		<field name="FLAG_READER_NO_PLATFORM_SOUNDS" since="19"/>
+		<field name="FLAG_READER_SKIP_NDEF_CHECK" since="19"/>
+		<field name="PREFERRED_PAYMENT_CHANGED" since="30"/>
+		<field name="PREFERRED_PAYMENT_LOADED" since="30"/>
+		<field name="PREFERRED_PAYMENT_UPDATED" since="30"/>
+		<field name="STATE_OFF" since="18"/>
+		<field name="STATE_ON" since="18"/>
+		<field name="STATE_TURNING_OFF" since="18"/>
+		<field name="STATE_TURNING_ON" since="18"/>
+	</class>
+	<class name="android/nfc/NfcAdapter$CreateBeamUrisCallback" since="16" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="createBeamUris(Landroid/nfc/NfcEvent;)[Landroid/net/Uri;" deprecated="29"/>
+	</class>
+	<class name="android/nfc/NfcAdapter$CreateNdefMessageCallback" since="14" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="createNdefMessage(Landroid/nfc/NfcEvent;)Landroid/nfc/NdefMessage;" deprecated="29"/>
+	</class>
+	<class name="android/nfc/NfcAdapter$OnNdefPushCompleteCallback" since="14" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onNdefPushComplete(Landroid/nfc/NfcEvent;)V" deprecated="29"/>
+	</class>
+	<class name="android/nfc/NfcAdapter$OnTagRemovedListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onTagRemoved()V"/>
+	</class>
+	<class name="android/nfc/NfcAdapter$ReaderCallback" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onTagDiscovered(Landroid/nfc/Tag;)V"/>
+	</class>
+	<class name="android/nfc/NfcEvent" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="nfcAdapter"/>
+		<field name="peerLlcpMajorVersion" since="23"/>
+		<field name="peerLlcpMinorVersion" since="23"/>
+	</class>
+	<class name="android/nfc/NfcManager" since="10">
+		<extends name="java/lang/Object"/>
+		<method name="getDefaultAdapter()Landroid/nfc/NfcAdapter;"/>
+	</class>
+	<class name="android/nfc/Tag" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getId()[B"/>
+		<method name="getTechList()[Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/nfc/TagLostException" since="10">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/nfc/cardemulation/CardEmulation" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="categoryAllowsForegroundPreference(Ljava/lang/String;)Z" since="21"/>
+		<method name="getAidsForPreferredPaymentService()Ljava/util/List;" since="30"/>
+		<method name="getAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Ljava/util/List;" since="21"/>
+		<method name="getDescriptionForPreferredPaymentService()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/CardEmulation;"/>
+		<method name="getRouteDestinationForPreferredPaymentService()Ljava/lang/String;" since="30"/>
+		<method name="getSelectionModeForCategory(Ljava/lang/String;)I"/>
+		<method name="isDefaultServiceForAid(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
+		<method name="isDefaultServiceForCategory(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
+		<method name="registerAidsForService(Landroid/content/ComponentName;Ljava/lang/String;Ljava/util/List;)Z" since="21"/>
+		<method name="removeAidsForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="21"/>
+		<method name="setOffHostForService(Landroid/content/ComponentName;Ljava/lang/String;)Z" since="29"/>
+		<method name="setPreferredService(Landroid/app/Activity;Landroid/content/ComponentName;)Z" since="21"/>
+		<method name="supportsAidPrefixRegistration()Z" since="21"/>
+		<method name="unsetOffHostForService(Landroid/content/ComponentName;)Z" since="29"/>
+		<method name="unsetPreferredService(Landroid/app/Activity;)Z" since="21"/>
+		<field name="ACTION_CHANGE_DEFAULT"/>
+		<field name="CATEGORY_OTHER"/>
+		<field name="CATEGORY_PAYMENT"/>
+		<field name="EXTRA_CATEGORY"/>
+		<field name="EXTRA_SERVICE_COMPONENT"/>
+		<field name="SELECTION_MODE_ALWAYS_ASK"/>
+		<field name="SELECTION_MODE_ASK_IF_CONFLICT"/>
+		<field name="SELECTION_MODE_PREFER_DEFAULT"/>
+	</class>
+	<class name="android/nfc/cardemulation/HostApduService" since="19">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="notifyUnhandled()V"/>
+		<method name="onDeactivated(I)V"/>
+		<method name="processCommandApdu([BLandroid/os/Bundle;)[B"/>
+		<method name="sendResponseApdu([B)V"/>
+		<field name="DEACTIVATION_DESELECTED"/>
+		<field name="DEACTIVATION_LINK_LOSS"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/nfc/cardemulation/HostNfcFService" since="24">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDeactivated(I)V"/>
+		<method name="processNfcFPacket([BLandroid/os/Bundle;)[B"/>
+		<method name="sendResponsePacket([B)V"/>
+		<field name="DEACTIVATION_LINK_LOSS"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/nfc/cardemulation/NfcFCardEmulation" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="disableService(Landroid/app/Activity;)Z"/>
+		<method name="enableService(Landroid/app/Activity;Landroid/content/ComponentName;)Z"/>
+		<method name="getInstance(Landroid/nfc/NfcAdapter;)Landroid/nfc/cardemulation/NfcFCardEmulation;"/>
+		<method name="getNfcid2ForService(Landroid/content/ComponentName;)Ljava/lang/String;"/>
+		<method name="getSystemCodeForService(Landroid/content/ComponentName;)Ljava/lang/String;"/>
+		<method name="registerSystemCodeForService(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
+		<method name="setNfcid2ForService(Landroid/content/ComponentName;Ljava/lang/String;)Z"/>
+		<method name="unregisterSystemCodeForService(Landroid/content/ComponentName;)Z"/>
+	</class>
+	<class name="android/nfc/cardemulation/OffHostApduService" since="19">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/nfc/tech/IsoDep" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/IsoDep;"/>
+		<method name="getHiLayerResponse()[B"/>
+		<method name="getHistoricalBytes()[B"/>
+		<method name="getMaxTransceiveLength()I" since="14"/>
+		<method name="getTimeout()I" since="14"/>
+		<method name="isExtendedLengthApduSupported()Z" since="16"/>
+		<method name="setTimeout(I)V"/>
+		<method name="transceive([B)[B"/>
+	</class>
+	<class name="android/nfc/tech/MifareClassic" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="authenticateSectorWithKeyA(I[B)Z"/>
+		<method name="authenticateSectorWithKeyB(I[B)Z"/>
+		<method name="blockToSector(I)I"/>
+		<method name="decrement(II)V"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/MifareClassic;"/>
+		<method name="getBlockCount()I"/>
+		<method name="getBlockCountInSector(I)I"/>
+		<method name="getMaxTransceiveLength()I" since="14"/>
+		<method name="getSectorCount()I"/>
+		<method name="getSize()I"/>
+		<method name="getTimeout()I" since="14"/>
+		<method name="getType()I"/>
+		<method name="increment(II)V"/>
+		<method name="readBlock(I)[B"/>
+		<method name="restore(I)V"/>
+		<method name="sectorToBlock(I)I"/>
+		<method name="setTimeout(I)V" since="14"/>
+		<method name="transceive([B)[B"/>
+		<method name="transfer(I)V"/>
+		<method name="writeBlock(I[B)V"/>
+		<field name="BLOCK_SIZE"/>
+		<field name="KEY_DEFAULT"/>
+		<field name="KEY_MIFARE_APPLICATION_DIRECTORY"/>
+		<field name="KEY_NFC_FORUM"/>
+		<field name="SIZE_1K"/>
+		<field name="SIZE_2K"/>
+		<field name="SIZE_4K"/>
+		<field name="SIZE_MINI"/>
+		<field name="TYPE_CLASSIC"/>
+		<field name="TYPE_PLUS"/>
+		<field name="TYPE_PRO"/>
+		<field name="TYPE_UNKNOWN"/>
+	</class>
+	<class name="android/nfc/tech/MifareUltralight" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/MifareUltralight;"/>
+		<method name="getMaxTransceiveLength()I" since="14"/>
+		<method name="getTimeout()I" since="14"/>
+		<method name="getType()I"/>
+		<method name="readPages(I)[B"/>
+		<method name="setTimeout(I)V" since="14"/>
+		<method name="transceive([B)[B"/>
+		<method name="writePage(I[B)V"/>
+		<field name="PAGE_SIZE"/>
+		<field name="TYPE_ULTRALIGHT"/>
+		<field name="TYPE_ULTRALIGHT_C"/>
+		<field name="TYPE_UNKNOWN"/>
+	</class>
+	<class name="android/nfc/tech/Ndef" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="canMakeReadOnly()Z"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/Ndef;"/>
+		<method name="getCachedNdefMessage()Landroid/nfc/NdefMessage;"/>
+		<method name="getMaxSize()I"/>
+		<method name="getNdefMessage()Landroid/nfc/NdefMessage;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="isWritable()Z"/>
+		<method name="makeReadOnly()Z"/>
+		<method name="writeNdefMessage(Landroid/nfc/NdefMessage;)V"/>
+		<field name="MIFARE_CLASSIC"/>
+		<field name="NFC_FORUM_TYPE_1"/>
+		<field name="NFC_FORUM_TYPE_2"/>
+		<field name="NFC_FORUM_TYPE_3"/>
+		<field name="NFC_FORUM_TYPE_4"/>
+	</class>
+	<class name="android/nfc/tech/NdefFormatable" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="format(Landroid/nfc/NdefMessage;)V"/>
+		<method name="formatReadOnly(Landroid/nfc/NdefMessage;)V"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NdefFormatable;"/>
+	</class>
+	<class name="android/nfc/tech/NfcA" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcA;"/>
+		<method name="getAtqa()[B"/>
+		<method name="getMaxTransceiveLength()I" since="14"/>
+		<method name="getSak()S"/>
+		<method name="getTimeout()I" since="14"/>
+		<method name="setTimeout(I)V" since="14"/>
+		<method name="transceive([B)[B"/>
+	</class>
+	<class name="android/nfc/tech/NfcB" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcB;"/>
+		<method name="getApplicationData()[B"/>
+		<method name="getMaxTransceiveLength()I" since="14"/>
+		<method name="getProtocolInfo()[B"/>
+		<method name="transceive([B)[B"/>
+	</class>
+	<class name="android/nfc/tech/NfcBarcode" since="17">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcBarcode;"/>
+		<method name="getBarcode()[B"/>
+		<method name="getType()I"/>
+		<field name="TYPE_KOVIO"/>
+		<field name="TYPE_UNKNOWN"/>
+	</class>
+	<class name="android/nfc/tech/NfcF" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcF;"/>
+		<method name="getManufacturer()[B"/>
+		<method name="getMaxTransceiveLength()I" since="14"/>
+		<method name="getSystemCode()[B"/>
+		<method name="getTimeout()I" since="14"/>
+		<method name="setTimeout(I)V" since="14"/>
+		<method name="transceive([B)[B"/>
+	</class>
+	<class name="android/nfc/tech/NfcV" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="android/nfc/tech/TagTechnology"/>
+		<method name="get(Landroid/nfc/Tag;)Landroid/nfc/tech/NfcV;"/>
+		<method name="getDsfId()B"/>
+		<method name="getMaxTransceiveLength()I" since="14"/>
+		<method name="getResponseFlags()B"/>
+		<method name="transceive([B)[B"/>
+	</class>
+	<class name="android/nfc/tech/TagTechnology" since="10">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="connect()V"/>
+		<method name="getTag()Landroid/nfc/Tag;"/>
+		<method name="isConnected()Z"/>
+	</class>
+	<class name="android/opengl/EGL14" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="eglBindAPI(I)Z"/>
+		<method name="eglBindTexImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z"/>
+		<method name="eglChooseConfig(Landroid/opengl/EGLDisplay;[II[Landroid/opengl/EGLConfig;II[II)Z"/>
+		<method name="eglCopyBuffers(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z"/>
+		<method name="eglCreateContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Landroid/opengl/EGLContext;[II)Landroid/opengl/EGLContext;"/>
+		<method name="eglCreatePbufferFromClientBuffer(Landroid/opengl/EGLDisplay;IILandroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;"/>
+		<method name="eglCreatePbufferSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;[II)Landroid/opengl/EGLSurface;"/>
+		<method name="eglCreatePixmapSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Landroid/opengl/EGLSurface;" deprecated="26"/>
+		<method name="eglCreateWindowSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/lang/Object;[II)Landroid/opengl/EGLSurface;"/>
+		<method name="eglDestroyContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;)Z"/>
+		<method name="eglDestroySurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z"/>
+		<method name="eglGetConfigAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;I[II)Z"/>
+		<method name="eglGetConfigs(Landroid/opengl/EGLDisplay;[Landroid/opengl/EGLConfig;II[II)Z"/>
+		<method name="eglGetCurrentContext()Landroid/opengl/EGLContext;"/>
+		<method name="eglGetCurrentDisplay()Landroid/opengl/EGLDisplay;"/>
+		<method name="eglGetCurrentSurface(I)Landroid/opengl/EGLSurface;"/>
+		<method name="eglGetDisplay(I)Landroid/opengl/EGLDisplay;"/>
+		<method name="eglGetError()I"/>
+		<method name="eglInitialize(Landroid/opengl/EGLDisplay;[II[II)Z"/>
+		<method name="eglMakeCurrent(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;Landroid/opengl/EGLSurface;Landroid/opengl/EGLContext;)Z"/>
+		<method name="eglQueryAPI()I"/>
+		<method name="eglQueryContext(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;I[II)Z"/>
+		<method name="eglQueryString(Landroid/opengl/EGLDisplay;I)Ljava/lang/String;"/>
+		<method name="eglQuerySurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I[II)Z"/>
+		<method name="eglReleaseTexImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;I)Z"/>
+		<method name="eglReleaseThread()Z"/>
+		<method name="eglSurfaceAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;II)Z"/>
+		<method name="eglSwapBuffers(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;)Z"/>
+		<method name="eglSwapInterval(Landroid/opengl/EGLDisplay;I)Z"/>
+		<method name="eglTerminate(Landroid/opengl/EGLDisplay;)Z"/>
+		<method name="eglWaitClient()Z"/>
+		<method name="eglWaitGL()Z"/>
+		<method name="eglWaitNative(I)Z"/>
+		<field name="EGL_ALPHA_MASK_SIZE"/>
+		<field name="EGL_ALPHA_SIZE"/>
+		<field name="EGL_BACK_BUFFER"/>
+		<field name="EGL_BAD_ACCESS"/>
+		<field name="EGL_BAD_ALLOC"/>
+		<field name="EGL_BAD_ATTRIBUTE"/>
+		<field name="EGL_BAD_CONFIG"/>
+		<field name="EGL_BAD_CONTEXT"/>
+		<field name="EGL_BAD_CURRENT_SURFACE"/>
+		<field name="EGL_BAD_DISPLAY"/>
+		<field name="EGL_BAD_MATCH"/>
+		<field name="EGL_BAD_NATIVE_PIXMAP"/>
+		<field name="EGL_BAD_NATIVE_WINDOW"/>
+		<field name="EGL_BAD_PARAMETER"/>
+		<field name="EGL_BAD_SURFACE"/>
+		<field name="EGL_BIND_TO_TEXTURE_RGB"/>
+		<field name="EGL_BIND_TO_TEXTURE_RGBA"/>
+		<field name="EGL_BLUE_SIZE"/>
+		<field name="EGL_BUFFER_DESTROYED"/>
+		<field name="EGL_BUFFER_PRESERVED"/>
+		<field name="EGL_BUFFER_SIZE"/>
+		<field name="EGL_CLIENT_APIS"/>
+		<field name="EGL_COLOR_BUFFER_TYPE"/>
+		<field name="EGL_CONFIG_CAVEAT"/>
+		<field name="EGL_CONFIG_ID"/>
+		<field name="EGL_CONFORMANT"/>
+		<field name="EGL_CONTEXT_CLIENT_TYPE"/>
+		<field name="EGL_CONTEXT_CLIENT_VERSION"/>
+		<field name="EGL_CONTEXT_LOST"/>
+		<field name="EGL_CORE_NATIVE_ENGINE"/>
+		<field name="EGL_DEFAULT_DISPLAY"/>
+		<field name="EGL_DEPTH_SIZE"/>
+		<field name="EGL_DISPLAY_SCALING"/>
+		<field name="EGL_DRAW"/>
+		<field name="EGL_EXTENSIONS"/>
+		<field name="EGL_FALSE"/>
+		<field name="EGL_GREEN_SIZE"/>
+		<field name="EGL_HEIGHT"/>
+		<field name="EGL_HORIZONTAL_RESOLUTION"/>
+		<field name="EGL_LARGEST_PBUFFER"/>
+		<field name="EGL_LEVEL"/>
+		<field name="EGL_LUMINANCE_BUFFER"/>
+		<field name="EGL_LUMINANCE_SIZE"/>
+		<field name="EGL_MATCH_NATIVE_PIXMAP"/>
+		<field name="EGL_MAX_PBUFFER_HEIGHT"/>
+		<field name="EGL_MAX_PBUFFER_PIXELS"/>
+		<field name="EGL_MAX_PBUFFER_WIDTH"/>
+		<field name="EGL_MAX_SWAP_INTERVAL"/>
+		<field name="EGL_MIN_SWAP_INTERVAL"/>
+		<field name="EGL_MIPMAP_LEVEL"/>
+		<field name="EGL_MIPMAP_TEXTURE"/>
+		<field name="EGL_MULTISAMPLE_RESOLVE"/>
+		<field name="EGL_MULTISAMPLE_RESOLVE_BOX"/>
+		<field name="EGL_MULTISAMPLE_RESOLVE_BOX_BIT"/>
+		<field name="EGL_MULTISAMPLE_RESOLVE_DEFAULT"/>
+		<field name="EGL_NATIVE_RENDERABLE"/>
+		<field name="EGL_NATIVE_VISUAL_ID"/>
+		<field name="EGL_NATIVE_VISUAL_TYPE"/>
+		<field name="EGL_NONE"/>
+		<field name="EGL_NON_CONFORMANT_CONFIG"/>
+		<field name="EGL_NOT_INITIALIZED"/>
+		<field name="EGL_NO_CONTEXT"/>
+		<field name="EGL_NO_DISPLAY"/>
+		<field name="EGL_NO_SURFACE"/>
+		<field name="EGL_NO_TEXTURE"/>
+		<field name="EGL_OPENGL_API"/>
+		<field name="EGL_OPENGL_BIT"/>
+		<field name="EGL_OPENGL_ES2_BIT"/>
+		<field name="EGL_OPENGL_ES_API"/>
+		<field name="EGL_OPENGL_ES_BIT"/>
+		<field name="EGL_OPENVG_API"/>
+		<field name="EGL_OPENVG_BIT"/>
+		<field name="EGL_OPENVG_IMAGE"/>
+		<field name="EGL_PBUFFER_BIT"/>
+		<field name="EGL_PIXEL_ASPECT_RATIO"/>
+		<field name="EGL_PIXMAP_BIT"/>
+		<field name="EGL_READ"/>
+		<field name="EGL_RED_SIZE"/>
+		<field name="EGL_RENDERABLE_TYPE"/>
+		<field name="EGL_RENDER_BUFFER"/>
+		<field name="EGL_RGB_BUFFER"/>
+		<field name="EGL_SAMPLES"/>
+		<field name="EGL_SAMPLE_BUFFERS"/>
+		<field name="EGL_SINGLE_BUFFER"/>
+		<field name="EGL_SLOW_CONFIG"/>
+		<field name="EGL_STENCIL_SIZE"/>
+		<field name="EGL_SUCCESS"/>
+		<field name="EGL_SURFACE_TYPE"/>
+		<field name="EGL_SWAP_BEHAVIOR"/>
+		<field name="EGL_SWAP_BEHAVIOR_PRESERVED_BIT"/>
+		<field name="EGL_TEXTURE_2D"/>
+		<field name="EGL_TEXTURE_FORMAT"/>
+		<field name="EGL_TEXTURE_RGB"/>
+		<field name="EGL_TEXTURE_RGBA"/>
+		<field name="EGL_TEXTURE_TARGET"/>
+		<field name="EGL_TRANSPARENT_BLUE_VALUE"/>
+		<field name="EGL_TRANSPARENT_GREEN_VALUE"/>
+		<field name="EGL_TRANSPARENT_RED_VALUE"/>
+		<field name="EGL_TRANSPARENT_RGB"/>
+		<field name="EGL_TRANSPARENT_TYPE"/>
+		<field name="EGL_TRUE"/>
+		<field name="EGL_VENDOR"/>
+		<field name="EGL_VERSION"/>
+		<field name="EGL_VERTICAL_RESOLUTION"/>
+		<field name="EGL_VG_ALPHA_FORMAT"/>
+		<field name="EGL_VG_ALPHA_FORMAT_NONPRE"/>
+		<field name="EGL_VG_ALPHA_FORMAT_PRE"/>
+		<field name="EGL_VG_ALPHA_FORMAT_PRE_BIT"/>
+		<field name="EGL_VG_COLORSPACE"/>
+		<field name="EGL_VG_COLORSPACE_LINEAR"/>
+		<field name="EGL_VG_COLORSPACE_LINEAR_BIT"/>
+		<field name="EGL_VG_COLORSPACE_sRGB"/>
+		<field name="EGL_WIDTH"/>
+		<field name="EGL_WINDOW_BIT"/>
+	</class>
+	<class name="android/opengl/EGL15" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="eglClientWaitSync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;IJ)I"/>
+		<method name="eglCreateImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLContext;IJ[JI)Landroid/opengl/EGLImage;"/>
+		<method name="eglCreatePlatformPixmapSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/nio/Buffer;[JI)Landroid/opengl/EGLSurface;"/>
+		<method name="eglCreatePlatformWindowSurface(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLConfig;Ljava/nio/Buffer;[JI)Landroid/opengl/EGLSurface;"/>
+		<method name="eglCreateSync(Landroid/opengl/EGLDisplay;I[JI)Landroid/opengl/EGLSync;"/>
+		<method name="eglDestroyImage(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLImage;)Z"/>
+		<method name="eglDestroySync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;)Z"/>
+		<method name="eglGetPlatformDisplay(IJ[JI)Landroid/opengl/EGLDisplay;"/>
+		<method name="eglGetSyncAttrib(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;I[JI)Z"/>
+		<method name="eglWaitSync(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSync;I)Z"/>
+		<field name="EGL_CL_EVENT_HANDLE"/>
+		<field name="EGL_CONDITION_SATISFIED"/>
+		<field name="EGL_CONTEXT_MAJOR_VERSION"/>
+		<field name="EGL_CONTEXT_MINOR_VERSION"/>
+		<field name="EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT"/>
+		<field name="EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT"/>
+		<field name="EGL_CONTEXT_OPENGL_DEBUG"/>
+		<field name="EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE"/>
+		<field name="EGL_CONTEXT_OPENGL_PROFILE_MASK"/>
+		<field name="EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY"/>
+		<field name="EGL_CONTEXT_OPENGL_ROBUST_ACCESS"/>
+		<field name="EGL_FOREVER"/>
+		<field name="EGL_GL_COLORSPACE"/>
+		<field name="EGL_GL_COLORSPACE_LINEAR"/>
+		<field name="EGL_GL_COLORSPACE_SRGB"/>
+		<field name="EGL_GL_RENDERBUFFER"/>
+		<field name="EGL_GL_TEXTURE_2D"/>
+		<field name="EGL_GL_TEXTURE_3D"/>
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/>
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X"/>
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/>
+		<field name="EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/>
+		<field name="EGL_GL_TEXTURE_LEVEL"/>
+		<field name="EGL_GL_TEXTURE_ZOFFSET"/>
+		<field name="EGL_IMAGE_PRESERVED"/>
+		<field name="EGL_LOSE_CONTEXT_ON_RESET"/>
+		<field name="EGL_NO_CONTEXT"/>
+		<field name="EGL_NO_DISPLAY"/>
+		<field name="EGL_NO_IMAGE"/>
+		<field name="EGL_NO_RESET_NOTIFICATION"/>
+		<field name="EGL_NO_SURFACE"/>
+		<field name="EGL_NO_SYNC"/>
+		<field name="EGL_OPENGL_ES3_BIT"/>
+		<field name="EGL_PLATFORM_ANDROID_KHR"/>
+		<field name="EGL_SIGNALED"/>
+		<field name="EGL_SYNC_CL_EVENT"/>
+		<field name="EGL_SYNC_CL_EVENT_COMPLETE"/>
+		<field name="EGL_SYNC_CONDITION"/>
+		<field name="EGL_SYNC_FENCE"/>
+		<field name="EGL_SYNC_FLUSH_COMMANDS_BIT"/>
+		<field name="EGL_SYNC_PRIOR_COMMANDS_COMPLETE"/>
+		<field name="EGL_SYNC_STATUS"/>
+		<field name="EGL_SYNC_TYPE"/>
+		<field name="EGL_TIMEOUT_EXPIRED"/>
+		<field name="EGL_UNSIGNALED"/>
+	</class>
+	<class name="android/opengl/EGLConfig" since="17">
+		<extends name="android/opengl/EGLObjectHandle"/>
+	</class>
+	<class name="android/opengl/EGLContext" since="17">
+		<extends name="android/opengl/EGLObjectHandle"/>
+	</class>
+	<class name="android/opengl/EGLDisplay" since="17">
+		<extends name="android/opengl/EGLObjectHandle"/>
+	</class>
+	<class name="android/opengl/EGLExt" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="eglPresentationTimeANDROID(Landroid/opengl/EGLDisplay;Landroid/opengl/EGLSurface;J)Z"/>
+		<field name="EGL_CONTEXT_FLAGS_KHR"/>
+		<field name="EGL_CONTEXT_MAJOR_VERSION_KHR"/>
+		<field name="EGL_CONTEXT_MINOR_VERSION_KHR"/>
+		<field name="EGL_OPENGL_ES3_BIT_KHR"/>
+		<field name="EGL_RECORDABLE_ANDROID" since="26"/>
+	</class>
+	<class name="android/opengl/EGLImage" since="29">
+		<extends name="android/opengl/EGLObjectHandle"/>
+	</class>
+	<class name="android/opengl/EGLObjectHandle" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V" deprecated="21"/>
+		<method name="&lt;init>(J)V" since="21"/>
+		<method name="getHandle()I" deprecated="21"/>
+		<method name="getNativeHandle()J" since="21"/>
+	</class>
+	<class name="android/opengl/EGLSurface" since="17">
+		<extends name="android/opengl/EGLObjectHandle"/>
+	</class>
+	<class name="android/opengl/EGLSync" since="29">
+		<extends name="android/opengl/EGLObjectHandle"/>
+	</class>
+	<class name="android/opengl/ETC1" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="decodeBlock(Ljava/nio/Buffer;Ljava/nio/Buffer;)V"/>
+		<method name="decodeImage(Ljava/nio/Buffer;Ljava/nio/Buffer;IIII)V"/>
+		<method name="encodeBlock(Ljava/nio/Buffer;ILjava/nio/Buffer;)V"/>
+		<method name="encodeImage(Ljava/nio/Buffer;IIIILjava/nio/Buffer;)V"/>
+		<method name="formatHeader(Ljava/nio/Buffer;II)V"/>
+		<method name="getEncodedDataSize(II)I"/>
+		<method name="getHeight(Ljava/nio/Buffer;)I"/>
+		<method name="getWidth(Ljava/nio/Buffer;)I"/>
+		<method name="isValid(Ljava/nio/Buffer;)Z"/>
+		<field name="DECODED_BLOCK_SIZE"/>
+		<field name="ENCODED_BLOCK_SIZE"/>
+		<field name="ETC1_RGB8_OES"/>
+		<field name="ETC_PKM_HEADER_SIZE"/>
+	</class>
+	<class name="android/opengl/ETC1Util" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="compressTexture(Ljava/nio/Buffer;IIII)Landroid/opengl/ETC1Util$ETC1Texture;"/>
+		<method name="createTexture(Ljava/io/InputStream;)Landroid/opengl/ETC1Util$ETC1Texture;"/>
+		<method name="isETC1Supported()Z"/>
+		<method name="loadTexture(IIIIILandroid/opengl/ETC1Util$ETC1Texture;)V"/>
+		<method name="loadTexture(IIIIILjava/io/InputStream;)V"/>
+		<method name="writeTexture(Landroid/opengl/ETC1Util$ETC1Texture;Ljava/io/OutputStream;)V"/>
+	</class>
+	<class name="android/opengl/ETC1Util$ETC1Texture" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IILjava/nio/ByteBuffer;)V"/>
+		<method name="getData()Ljava/nio/ByteBuffer;"/>
+		<method name="getHeight()I"/>
+		<method name="getWidth()I"/>
+	</class>
+	<class name="android/opengl/GLDebugHelper" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="wrap(Ljavax/microedition/khronos/egl/EGL;ILjava/io/Writer;)Ljavax/microedition/khronos/egl/EGL;"/>
+		<method name="wrap(Ljavax/microedition/khronos/opengles/GL;ILjava/io/Writer;)Ljavax/microedition/khronos/opengles/GL;"/>
+		<field name="CONFIG_CHECK_GL_ERROR"/>
+		<field name="CONFIG_CHECK_THREAD"/>
+		<field name="CONFIG_LOG_ARGUMENT_NAMES"/>
+		<field name="ERROR_WRONG_THREAD"/>
+	</class>
+	<class name="android/opengl/GLES10" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="glActiveTexture(I)V"/>
+		<method name="glAlphaFunc(IF)V"/>
+		<method name="glAlphaFuncx(II)V"/>
+		<method name="glBindTexture(II)V"/>
+		<method name="glBlendFunc(II)V"/>
+		<method name="glClear(I)V"/>
+		<method name="glClearColor(FFFF)V"/>
+		<method name="glClearColorx(IIII)V"/>
+		<method name="glClearDepthf(F)V"/>
+		<method name="glClearDepthx(I)V"/>
+		<method name="glClearStencil(I)V"/>
+		<method name="glClientActiveTexture(I)V"/>
+		<method name="glColor4f(FFFF)V"/>
+		<method name="glColor4x(IIII)V"/>
+		<method name="glColorMask(ZZZZ)V"/>
+		<method name="glColorPointer(IIILjava/nio/Buffer;)V"/>
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCopyTexImage2D(IIIIIIII)V"/>
+		<method name="glCopyTexSubImage2D(IIIIIIII)V"/>
+		<method name="glCullFace(I)V"/>
+		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteTextures(I[II)V"/>
+		<method name="glDepthFunc(I)V"/>
+		<method name="glDepthMask(Z)V"/>
+		<method name="glDepthRangef(FF)V"/>
+		<method name="glDepthRangex(II)V"/>
+		<method name="glDisable(I)V"/>
+		<method name="glDisableClientState(I)V"/>
+		<method name="glDrawArrays(III)V"/>
+		<method name="glDrawElements(IIILjava/nio/Buffer;)V"/>
+		<method name="glEnable(I)V"/>
+		<method name="glEnableClientState(I)V"/>
+		<method name="glFinish()V"/>
+		<method name="glFlush()V"/>
+		<method name="glFogf(IF)V"/>
+		<method name="glFogfv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glFogfv(I[FI)V"/>
+		<method name="glFogx(II)V"/>
+		<method name="glFogxv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glFogxv(I[II)V"/>
+		<method name="glFrontFace(I)V"/>
+		<method name="glFrustumf(FFFFFF)V"/>
+		<method name="glFrustumx(IIIIII)V"/>
+		<method name="glGenTextures(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenTextures(I[II)V"/>
+		<method name="glGetError()I"/>
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetIntegerv(I[II)V"/>
+		<method name="glGetString(I)Ljava/lang/String;"/>
+		<method name="glHint(II)V"/>
+		<method name="glLightModelf(IF)V"/>
+		<method name="glLightModelfv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glLightModelfv(I[FI)V"/>
+		<method name="glLightModelx(II)V"/>
+		<method name="glLightModelxv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glLightModelxv(I[II)V"/>
+		<method name="glLightf(IIF)V"/>
+		<method name="glLightfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glLightfv(II[FI)V"/>
+		<method name="glLightx(III)V"/>
+		<method name="glLightxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glLightxv(II[II)V"/>
+		<method name="glLineWidth(F)V"/>
+		<method name="glLineWidthx(I)V"/>
+		<method name="glLoadIdentity()V"/>
+		<method name="glLoadMatrixf(Ljava/nio/FloatBuffer;)V"/>
+		<method name="glLoadMatrixf([FI)V"/>
+		<method name="glLoadMatrixx(Ljava/nio/IntBuffer;)V"/>
+		<method name="glLoadMatrixx([II)V"/>
+		<method name="glLogicOp(I)V"/>
+		<method name="glMaterialf(IIF)V"/>
+		<method name="glMaterialfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glMaterialfv(II[FI)V"/>
+		<method name="glMaterialx(III)V"/>
+		<method name="glMaterialxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glMaterialxv(II[II)V"/>
+		<method name="glMatrixMode(I)V"/>
+		<method name="glMultMatrixf(Ljava/nio/FloatBuffer;)V"/>
+		<method name="glMultMatrixf([FI)V"/>
+		<method name="glMultMatrixx(Ljava/nio/IntBuffer;)V"/>
+		<method name="glMultMatrixx([II)V"/>
+		<method name="glMultiTexCoord4f(IFFFF)V"/>
+		<method name="glMultiTexCoord4x(IIIII)V"/>
+		<method name="glNormal3f(FFF)V"/>
+		<method name="glNormal3x(III)V"/>
+		<method name="glNormalPointer(IILjava/nio/Buffer;)V"/>
+		<method name="glOrthof(FFFFFF)V"/>
+		<method name="glOrthox(IIIIII)V"/>
+		<method name="glPixelStorei(II)V"/>
+		<method name="glPointSize(F)V"/>
+		<method name="glPointSizex(I)V"/>
+		<method name="glPolygonOffset(FF)V"/>
+		<method name="glPolygonOffsetx(II)V"/>
+		<method name="glPopMatrix()V"/>
+		<method name="glPushMatrix()V"/>
+		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V"/>
+		<method name="glRotatef(FFFF)V"/>
+		<method name="glRotatex(IIII)V"/>
+		<method name="glSampleCoverage(FZ)V"/>
+		<method name="glSampleCoveragex(IZ)V"/>
+		<method name="glScalef(FFF)V"/>
+		<method name="glScalex(III)V"/>
+		<method name="glScissor(IIII)V"/>
+		<method name="glShadeModel(I)V"/>
+		<method name="glStencilFunc(III)V"/>
+		<method name="glStencilMask(I)V"/>
+		<method name="glStencilOp(III)V"/>
+		<method name="glTexCoordPointer(IIILjava/nio/Buffer;)V"/>
+		<method name="glTexEnvf(IIF)V"/>
+		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexEnvfv(II[FI)V"/>
+		<method name="glTexEnvx(III)V"/>
+		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexEnvxv(II[II)V"/>
+		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glTexParameterf(IIF)V"/>
+		<method name="glTexParameterx(III)V"/>
+		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glTranslatef(FFF)V"/>
+		<method name="glTranslatex(III)V"/>
+		<method name="glVertexPointer(IIILjava/nio/Buffer;)V"/>
+		<method name="glViewport(IIII)V"/>
+		<field name="GL_ADD"/>
+		<field name="GL_ALIASED_LINE_WIDTH_RANGE"/>
+		<field name="GL_ALIASED_POINT_SIZE_RANGE"/>
+		<field name="GL_ALPHA"/>
+		<field name="GL_ALPHA_BITS"/>
+		<field name="GL_ALPHA_TEST"/>
+		<field name="GL_ALWAYS"/>
+		<field name="GL_AMBIENT"/>
+		<field name="GL_AMBIENT_AND_DIFFUSE"/>
+		<field name="GL_AND"/>
+		<field name="GL_AND_INVERTED"/>
+		<field name="GL_AND_REVERSE"/>
+		<field name="GL_BACK"/>
+		<field name="GL_BLEND"/>
+		<field name="GL_BLUE_BITS"/>
+		<field name="GL_BYTE"/>
+		<field name="GL_CCW"/>
+		<field name="GL_CLAMP_TO_EDGE"/>
+		<field name="GL_CLEAR"/>
+		<field name="GL_COLOR_ARRAY"/>
+		<field name="GL_COLOR_BUFFER_BIT"/>
+		<field name="GL_COLOR_LOGIC_OP"/>
+		<field name="GL_COLOR_MATERIAL"/>
+		<field name="GL_COMPRESSED_TEXTURE_FORMATS"/>
+		<field name="GL_CONSTANT_ATTENUATION"/>
+		<field name="GL_COPY"/>
+		<field name="GL_COPY_INVERTED"/>
+		<field name="GL_CULL_FACE"/>
+		<field name="GL_CW"/>
+		<field name="GL_DECAL"/>
+		<field name="GL_DECR"/>
+		<field name="GL_DEPTH_BITS"/>
+		<field name="GL_DEPTH_BUFFER_BIT"/>
+		<field name="GL_DEPTH_TEST"/>
+		<field name="GL_DIFFUSE"/>
+		<field name="GL_DITHER"/>
+		<field name="GL_DONT_CARE"/>
+		<field name="GL_DST_ALPHA"/>
+		<field name="GL_DST_COLOR"/>
+		<field name="GL_EMISSION"/>
+		<field name="GL_EQUAL"/>
+		<field name="GL_EQUIV"/>
+		<field name="GL_EXP"/>
+		<field name="GL_EXP2"/>
+		<field name="GL_EXTENSIONS"/>
+		<field name="GL_FALSE"/>
+		<field name="GL_FASTEST"/>
+		<field name="GL_FIXED"/>
+		<field name="GL_FLAT"/>
+		<field name="GL_FLOAT"/>
+		<field name="GL_FOG"/>
+		<field name="GL_FOG_COLOR"/>
+		<field name="GL_FOG_DENSITY"/>
+		<field name="GL_FOG_END"/>
+		<field name="GL_FOG_HINT"/>
+		<field name="GL_FOG_MODE"/>
+		<field name="GL_FOG_START"/>
+		<field name="GL_FRONT"/>
+		<field name="GL_FRONT_AND_BACK"/>
+		<field name="GL_GEQUAL"/>
+		<field name="GL_GREATER"/>
+		<field name="GL_GREEN_BITS"/>
+		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES"/>
+		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE_OES"/>
+		<field name="GL_INCR"/>
+		<field name="GL_INVALID_ENUM"/>
+		<field name="GL_INVALID_OPERATION"/>
+		<field name="GL_INVALID_VALUE"/>
+		<field name="GL_INVERT"/>
+		<field name="GL_KEEP"/>
+		<field name="GL_LEQUAL"/>
+		<field name="GL_LESS"/>
+		<field name="GL_LIGHT0"/>
+		<field name="GL_LIGHT1"/>
+		<field name="GL_LIGHT2"/>
+		<field name="GL_LIGHT3"/>
+		<field name="GL_LIGHT4"/>
+		<field name="GL_LIGHT5"/>
+		<field name="GL_LIGHT6"/>
+		<field name="GL_LIGHT7"/>
+		<field name="GL_LIGHTING"/>
+		<field name="GL_LIGHT_MODEL_AMBIENT"/>
+		<field name="GL_LIGHT_MODEL_TWO_SIDE"/>
+		<field name="GL_LINEAR"/>
+		<field name="GL_LINEAR_ATTENUATION"/>
+		<field name="GL_LINEAR_MIPMAP_LINEAR"/>
+		<field name="GL_LINEAR_MIPMAP_NEAREST"/>
+		<field name="GL_LINES"/>
+		<field name="GL_LINE_LOOP"/>
+		<field name="GL_LINE_SMOOTH"/>
+		<field name="GL_LINE_SMOOTH_HINT"/>
+		<field name="GL_LINE_STRIP"/>
+		<field name="GL_LUMINANCE"/>
+		<field name="GL_LUMINANCE_ALPHA"/>
+		<field name="GL_MAX_ELEMENTS_INDICES"/>
+		<field name="GL_MAX_ELEMENTS_VERTICES"/>
+		<field name="GL_MAX_LIGHTS"/>
+		<field name="GL_MAX_MODELVIEW_STACK_DEPTH"/>
+		<field name="GL_MAX_PROJECTION_STACK_DEPTH"/>
+		<field name="GL_MAX_TEXTURE_SIZE"/>
+		<field name="GL_MAX_TEXTURE_STACK_DEPTH"/>
+		<field name="GL_MAX_TEXTURE_UNITS"/>
+		<field name="GL_MAX_VIEWPORT_DIMS"/>
+		<field name="GL_MODELVIEW"/>
+		<field name="GL_MODULATE"/>
+		<field name="GL_MULTISAMPLE"/>
+		<field name="GL_NAND"/>
+		<field name="GL_NEAREST"/>
+		<field name="GL_NEAREST_MIPMAP_LINEAR"/>
+		<field name="GL_NEAREST_MIPMAP_NEAREST"/>
+		<field name="GL_NEVER"/>
+		<field name="GL_NICEST"/>
+		<field name="GL_NOOP"/>
+		<field name="GL_NOR"/>
+		<field name="GL_NORMALIZE"/>
+		<field name="GL_NORMAL_ARRAY"/>
+		<field name="GL_NOTEQUAL"/>
+		<field name="GL_NO_ERROR"/>
+		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"/>
+		<field name="GL_ONE"/>
+		<field name="GL_ONE_MINUS_DST_ALPHA"/>
+		<field name="GL_ONE_MINUS_DST_COLOR"/>
+		<field name="GL_ONE_MINUS_SRC_ALPHA"/>
+		<field name="GL_ONE_MINUS_SRC_COLOR"/>
+		<field name="GL_OR"/>
+		<field name="GL_OR_INVERTED"/>
+		<field name="GL_OR_REVERSE"/>
+		<field name="GL_OUT_OF_MEMORY"/>
+		<field name="GL_PACK_ALIGNMENT"/>
+		<field name="GL_PALETTE4_R5_G6_B5_OES"/>
+		<field name="GL_PALETTE4_RGB5_A1_OES"/>
+		<field name="GL_PALETTE4_RGB8_OES"/>
+		<field name="GL_PALETTE4_RGBA4_OES"/>
+		<field name="GL_PALETTE4_RGBA8_OES"/>
+		<field name="GL_PALETTE8_R5_G6_B5_OES"/>
+		<field name="GL_PALETTE8_RGB5_A1_OES"/>
+		<field name="GL_PALETTE8_RGB8_OES"/>
+		<field name="GL_PALETTE8_RGBA4_OES"/>
+		<field name="GL_PALETTE8_RGBA8_OES"/>
+		<field name="GL_PERSPECTIVE_CORRECTION_HINT"/>
+		<field name="GL_POINTS"/>
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
+		<field name="GL_POINT_SIZE"/>
+		<field name="GL_POINT_SMOOTH"/>
+		<field name="GL_POINT_SMOOTH_HINT"/>
+		<field name="GL_POLYGON_OFFSET_FILL"/>
+		<field name="GL_POLYGON_SMOOTH_HINT"/>
+		<field name="GL_POSITION"/>
+		<field name="GL_PROJECTION"/>
+		<field name="GL_QUADRATIC_ATTENUATION"/>
+		<field name="GL_RED_BITS"/>
+		<field name="GL_RENDERER"/>
+		<field name="GL_REPEAT"/>
+		<field name="GL_REPLACE"/>
+		<field name="GL_RESCALE_NORMAL"/>
+		<field name="GL_RGB"/>
+		<field name="GL_RGBA"/>
+		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"/>
+		<field name="GL_SAMPLE_ALPHA_TO_ONE"/>
+		<field name="GL_SAMPLE_COVERAGE"/>
+		<field name="GL_SCISSOR_TEST"/>
+		<field name="GL_SET"/>
+		<field name="GL_SHININESS"/>
+		<field name="GL_SHORT"/>
+		<field name="GL_SMOOTH"/>
+		<field name="GL_SMOOTH_LINE_WIDTH_RANGE"/>
+		<field name="GL_SMOOTH_POINT_SIZE_RANGE"/>
+		<field name="GL_SPECULAR"/>
+		<field name="GL_SPOT_CUTOFF"/>
+		<field name="GL_SPOT_DIRECTION"/>
+		<field name="GL_SPOT_EXPONENT"/>
+		<field name="GL_SRC_ALPHA"/>
+		<field name="GL_SRC_ALPHA_SATURATE"/>
+		<field name="GL_SRC_COLOR"/>
+		<field name="GL_STACK_OVERFLOW"/>
+		<field name="GL_STACK_UNDERFLOW"/>
+		<field name="GL_STENCIL_BITS"/>
+		<field name="GL_STENCIL_BUFFER_BIT"/>
+		<field name="GL_STENCIL_TEST"/>
+		<field name="GL_SUBPIXEL_BITS"/>
+		<field name="GL_TEXTURE"/>
+		<field name="GL_TEXTURE0"/>
+		<field name="GL_TEXTURE1"/>
+		<field name="GL_TEXTURE10"/>
+		<field name="GL_TEXTURE11"/>
+		<field name="GL_TEXTURE12"/>
+		<field name="GL_TEXTURE13"/>
+		<field name="GL_TEXTURE14"/>
+		<field name="GL_TEXTURE15"/>
+		<field name="GL_TEXTURE16"/>
+		<field name="GL_TEXTURE17"/>
+		<field name="GL_TEXTURE18"/>
+		<field name="GL_TEXTURE19"/>
+		<field name="GL_TEXTURE2"/>
+		<field name="GL_TEXTURE20"/>
+		<field name="GL_TEXTURE21"/>
+		<field name="GL_TEXTURE22"/>
+		<field name="GL_TEXTURE23"/>
+		<field name="GL_TEXTURE24"/>
+		<field name="GL_TEXTURE25"/>
+		<field name="GL_TEXTURE26"/>
+		<field name="GL_TEXTURE27"/>
+		<field name="GL_TEXTURE28"/>
+		<field name="GL_TEXTURE29"/>
+		<field name="GL_TEXTURE3"/>
+		<field name="GL_TEXTURE30"/>
+		<field name="GL_TEXTURE31"/>
+		<field name="GL_TEXTURE4"/>
+		<field name="GL_TEXTURE5"/>
+		<field name="GL_TEXTURE6"/>
+		<field name="GL_TEXTURE7"/>
+		<field name="GL_TEXTURE8"/>
+		<field name="GL_TEXTURE9"/>
+		<field name="GL_TEXTURE_2D"/>
+		<field name="GL_TEXTURE_COORD_ARRAY"/>
+		<field name="GL_TEXTURE_ENV"/>
+		<field name="GL_TEXTURE_ENV_COLOR"/>
+		<field name="GL_TEXTURE_ENV_MODE"/>
+		<field name="GL_TEXTURE_MAG_FILTER"/>
+		<field name="GL_TEXTURE_MIN_FILTER"/>
+		<field name="GL_TEXTURE_WRAP_S"/>
+		<field name="GL_TEXTURE_WRAP_T"/>
+		<field name="GL_TRIANGLES"/>
+		<field name="GL_TRIANGLE_FAN"/>
+		<field name="GL_TRIANGLE_STRIP"/>
+		<field name="GL_TRUE"/>
+		<field name="GL_UNPACK_ALIGNMENT"/>
+		<field name="GL_UNSIGNED_BYTE"/>
+		<field name="GL_UNSIGNED_SHORT"/>
+		<field name="GL_UNSIGNED_SHORT_4_4_4_4"/>
+		<field name="GL_UNSIGNED_SHORT_5_5_5_1"/>
+		<field name="GL_UNSIGNED_SHORT_5_6_5"/>
+		<field name="GL_VENDOR"/>
+		<field name="GL_VERSION"/>
+		<field name="GL_VERTEX_ARRAY"/>
+		<field name="GL_XOR"/>
+		<field name="GL_ZERO"/>
+	</class>
+	<class name="android/opengl/GLES10Ext" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="glQueryMatrixxOES(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I"/>
+		<method name="glQueryMatrixxOES([II[II)I"/>
+	</class>
+	<class name="android/opengl/GLES11" since="4">
+		<extends name="android/opengl/GLES10"/>
+		<method name="&lt;init>()V"/>
+		<method name="glBindBuffer(II)V"/>
+		<method name="glBufferData(IILjava/nio/Buffer;I)V"/>
+		<method name="glBufferSubData(IIILjava/nio/Buffer;)V"/>
+		<method name="glClipPlanef(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glClipPlanef(I[FI)V"/>
+		<method name="glClipPlanex(ILjava/nio/IntBuffer;)V"/>
+		<method name="glClipPlanex(I[II)V"/>
+		<method name="glColor4ub(BBBB)V"/>
+		<method name="glColorPointer(IIII)V"/>
+		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteBuffers(I[II)V"/>
+		<method name="glDrawElements(IIII)V"/>
+		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenBuffers(I[II)V"/>
+		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetBooleanv(I[ZI)V"/>
+		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetBufferParameteriv(II[II)V"/>
+		<method name="glGetClipPlanef(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetClipPlanef(I[FI)V"/>
+		<method name="glGetClipPlanex(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetClipPlanex(I[II)V"/>
+		<method name="glGetFixedv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetFixedv(I[II)V"/>
+		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetFloatv(I[FI)V"/>
+		<method name="glGetLightfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetLightfv(II[FI)V"/>
+		<method name="glGetLightxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetLightxv(II[II)V"/>
+		<method name="glGetMaterialfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetMaterialfv(II[FI)V"/>
+		<method name="glGetMaterialxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetMaterialxv(II[II)V"/>
+		<method name="glGetTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetTexEnvfv(II[FI)V"/>
+		<method name="glGetTexEnviv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexEnviv(II[II)V"/>
+		<method name="glGetTexEnvxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexEnvxv(II[II)V"/>
+		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetTexParameterfv(II[FI)V"/>
+		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameteriv(II[II)V"/>
+		<method name="glGetTexParameterxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameterxv(II[II)V"/>
+		<method name="glIsBuffer(I)Z"/>
+		<method name="glIsEnabled(I)Z"/>
+		<method name="glIsTexture(I)Z"/>
+		<method name="glNormalPointer(III)V"/>
+		<method name="glPointParameterf(IF)V"/>
+		<method name="glPointParameterfv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glPointParameterfv(I[FI)V"/>
+		<method name="glPointParameterx(II)V"/>
+		<method name="glPointParameterxv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glPointParameterxv(I[II)V"/>
+		<method name="glPointSizePointerOES(IILjava/nio/Buffer;)V"/>
+		<method name="glTexCoordPointer(IIII)V"/>
+		<method name="glTexEnvi(III)V"/>
+		<method name="glTexEnviv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexEnviv(II[II)V"/>
+		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexParameterfv(II[FI)V"/>
+		<method name="glTexParameteri(III)V"/>
+		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameteriv(II[II)V"/>
+		<method name="glTexParameterxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameterxv(II[II)V"/>
+		<method name="glVertexPointer(IIII)V"/>
+		<field name="GL_ACTIVE_TEXTURE"/>
+		<field name="GL_ADD_SIGNED"/>
+		<field name="GL_ALPHA_SCALE"/>
+		<field name="GL_ALPHA_TEST_FUNC"/>
+		<field name="GL_ALPHA_TEST_REF"/>
+		<field name="GL_ARRAY_BUFFER"/>
+		<field name="GL_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_BLEND_DST"/>
+		<field name="GL_BLEND_SRC"/>
+		<field name="GL_BUFFER_ACCESS"/>
+		<field name="GL_BUFFER_SIZE"/>
+		<field name="GL_BUFFER_USAGE"/>
+		<field name="GL_CLIENT_ACTIVE_TEXTURE"/>
+		<field name="GL_CLIP_PLANE0"/>
+		<field name="GL_CLIP_PLANE1"/>
+		<field name="GL_CLIP_PLANE2"/>
+		<field name="GL_CLIP_PLANE3"/>
+		<field name="GL_CLIP_PLANE4"/>
+		<field name="GL_CLIP_PLANE5"/>
+		<field name="GL_COLOR_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_COLOR_ARRAY_POINTER"/>
+		<field name="GL_COLOR_ARRAY_SIZE"/>
+		<field name="GL_COLOR_ARRAY_STRIDE"/>
+		<field name="GL_COLOR_ARRAY_TYPE"/>
+		<field name="GL_COLOR_CLEAR_VALUE"/>
+		<field name="GL_COLOR_WRITEMASK"/>
+		<field name="GL_COMBINE"/>
+		<field name="GL_COMBINE_ALPHA"/>
+		<field name="GL_COMBINE_RGB"/>
+		<field name="GL_CONSTANT"/>
+		<field name="GL_COORD_REPLACE_OES"/>
+		<field name="GL_CULL_FACE_MODE"/>
+		<field name="GL_CURRENT_COLOR"/>
+		<field name="GL_CURRENT_NORMAL"/>
+		<field name="GL_CURRENT_TEXTURE_COORDS"/>
+		<field name="GL_DEPTH_CLEAR_VALUE"/>
+		<field name="GL_DEPTH_FUNC"/>
+		<field name="GL_DEPTH_RANGE"/>
+		<field name="GL_DEPTH_WRITEMASK"/>
+		<field name="GL_DOT3_RGB"/>
+		<field name="GL_DOT3_RGBA"/>
+		<field name="GL_DYNAMIC_DRAW"/>
+		<field name="GL_ELEMENT_ARRAY_BUFFER"/>
+		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_FRONT_FACE"/>
+		<field name="GL_GENERATE_MIPMAP"/>
+		<field name="GL_GENERATE_MIPMAP_HINT"/>
+		<field name="GL_INTERPOLATE"/>
+		<field name="GL_LINE_WIDTH"/>
+		<field name="GL_LOGIC_OP_MODE"/>
+		<field name="GL_MATRIX_MODE"/>
+		<field name="GL_MAX_CLIP_PLANES"/>
+		<field name="GL_MODELVIEW_MATRIX"/>
+		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_MODELVIEW_STACK_DEPTH"/>
+		<field name="GL_NORMAL_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_NORMAL_ARRAY_POINTER"/>
+		<field name="GL_NORMAL_ARRAY_STRIDE"/>
+		<field name="GL_NORMAL_ARRAY_TYPE"/>
+		<field name="GL_OPERAND0_ALPHA"/>
+		<field name="GL_OPERAND0_RGB"/>
+		<field name="GL_OPERAND1_ALPHA"/>
+		<field name="GL_OPERAND1_RGB"/>
+		<field name="GL_OPERAND2_ALPHA"/>
+		<field name="GL_OPERAND2_RGB"/>
+		<field name="GL_POINT_DISTANCE_ATTENUATION"/>
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
+		<field name="GL_POINT_SIZE"/>
+		<field name="GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_POINTER_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_STRIDE_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_TYPE_OES"/>
+		<field name="GL_POINT_SIZE_MAX"/>
+		<field name="GL_POINT_SIZE_MIN"/>
+		<field name="GL_POINT_SPRITE_OES"/>
+		<field name="GL_POLYGON_OFFSET_FACTOR"/>
+		<field name="GL_POLYGON_OFFSET_UNITS"/>
+		<field name="GL_PREVIOUS"/>
+		<field name="GL_PRIMARY_COLOR"/>
+		<field name="GL_PROJECTION_MATRIX"/>
+		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_PROJECTION_STACK_DEPTH"/>
+		<field name="GL_RGB_SCALE"/>
+		<field name="GL_SAMPLES"/>
+		<field name="GL_SAMPLE_BUFFERS"/>
+		<field name="GL_SAMPLE_COVERAGE_INVERT"/>
+		<field name="GL_SAMPLE_COVERAGE_VALUE"/>
+		<field name="GL_SCISSOR_BOX"/>
+		<field name="GL_SHADE_MODEL"/>
+		<field name="GL_SRC0_ALPHA"/>
+		<field name="GL_SRC0_RGB"/>
+		<field name="GL_SRC1_ALPHA"/>
+		<field name="GL_SRC1_RGB"/>
+		<field name="GL_SRC2_ALPHA"/>
+		<field name="GL_SRC2_RGB"/>
+		<field name="GL_STATIC_DRAW"/>
+		<field name="GL_STENCIL_CLEAR_VALUE"/>
+		<field name="GL_STENCIL_FAIL"/>
+		<field name="GL_STENCIL_FUNC"/>
+		<field name="GL_STENCIL_PASS_DEPTH_FAIL"/>
+		<field name="GL_STENCIL_PASS_DEPTH_PASS"/>
+		<field name="GL_STENCIL_REF"/>
+		<field name="GL_STENCIL_VALUE_MASK"/>
+		<field name="GL_STENCIL_WRITEMASK"/>
+		<field name="GL_SUBTRACT"/>
+		<field name="GL_TEXTURE_BINDING_2D"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_POINTER"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_SIZE"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_STRIDE"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_TYPE"/>
+		<field name="GL_TEXTURE_MATRIX"/>
+		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_TEXTURE_STACK_DEPTH"/>
+		<field name="GL_VERTEX_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_VERTEX_ARRAY_POINTER"/>
+		<field name="GL_VERTEX_ARRAY_SIZE"/>
+		<field name="GL_VERTEX_ARRAY_STRIDE"/>
+		<field name="GL_VERTEX_ARRAY_TYPE"/>
+		<field name="GL_VIEWPORT"/>
+		<field name="GL_WRITE_ONLY"/>
+	</class>
+	<class name="android/opengl/GLES11Ext" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="glAlphaFuncxOES(II)V"/>
+		<method name="glBindFramebufferOES(II)V"/>
+		<method name="glBindRenderbufferOES(II)V"/>
+		<method name="glBlendEquationOES(I)V"/>
+		<method name="glBlendEquationSeparateOES(II)V"/>
+		<method name="glBlendFuncSeparateOES(IIII)V"/>
+		<method name="glCheckFramebufferStatusOES(I)I"/>
+		<method name="glClearColorxOES(IIII)V"/>
+		<method name="glClearDepthfOES(F)V"/>
+		<method name="glClearDepthxOES(I)V"/>
+		<method name="glClipPlanefOES(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glClipPlanefOES(I[FI)V"/>
+		<method name="glClipPlanexOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glClipPlanexOES(I[II)V"/>
+		<method name="glColor4xOES(IIII)V"/>
+		<method name="glCurrentPaletteMatrixOES(I)V"/>
+		<method name="glDeleteFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteFramebuffersOES(I[II)V"/>
+		<method name="glDeleteRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteRenderbuffersOES(I[II)V"/>
+		<method name="glDepthRangefOES(FF)V"/>
+		<method name="glDepthRangexOES(II)V"/>
+		<method name="glDrawTexfOES(FFFFF)V"/>
+		<method name="glDrawTexfvOES(Ljava/nio/FloatBuffer;)V"/>
+		<method name="glDrawTexfvOES([FI)V"/>
+		<method name="glDrawTexiOES(IIIII)V"/>
+		<method name="glDrawTexivOES(Ljava/nio/IntBuffer;)V"/>
+		<method name="glDrawTexivOES([II)V"/>
+		<method name="glDrawTexsOES(SSSSS)V"/>
+		<method name="glDrawTexsvOES(Ljava/nio/ShortBuffer;)V"/>
+		<method name="glDrawTexsvOES([SI)V"/>
+		<method name="glDrawTexxOES(IIIII)V"/>
+		<method name="glDrawTexxvOES(Ljava/nio/IntBuffer;)V"/>
+		<method name="glDrawTexxvOES([II)V"/>
+		<method name="glEGLImageTargetRenderbufferStorageOES(ILjava/nio/Buffer;)V"/>
+		<method name="glEGLImageTargetTexture2DOES(ILjava/nio/Buffer;)V"/>
+		<method name="glFogxOES(II)V"/>
+		<method name="glFogxvOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glFogxvOES(I[II)V"/>
+		<method name="glFramebufferRenderbufferOES(IIII)V"/>
+		<method name="glFramebufferTexture2DOES(IIIII)V"/>
+		<method name="glFrustumfOES(FFFFFF)V"/>
+		<method name="glFrustumxOES(IIIIII)V"/>
+		<method name="glGenFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenFramebuffersOES(I[II)V"/>
+		<method name="glGenRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenRenderbuffersOES(I[II)V"/>
+		<method name="glGenerateMipmapOES(I)V"/>
+		<method name="glGetClipPlanefOES(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetClipPlanefOES(I[FI)V"/>
+		<method name="glGetClipPlanexOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetClipPlanexOES(I[II)V"/>
+		<method name="glGetFixedvOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetFixedvOES(I[II)V"/>
+		<method name="glGetFramebufferAttachmentParameterivOES(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetFramebufferAttachmentParameterivOES(III[II)V"/>
+		<method name="glGetLightxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetLightxvOES(II[II)V"/>
+		<method name="glGetMaterialxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetMaterialxvOES(II[II)V"/>
+		<method name="glGetRenderbufferParameterivOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetRenderbufferParameterivOES(II[II)V"/>
+		<method name="glGetTexEnvxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexEnvxvOES(II[II)V"/>
+		<method name="glGetTexGenfvOES(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetTexGenfvOES(II[FI)V"/>
+		<method name="glGetTexGenivOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexGenivOES(II[II)V"/>
+		<method name="glGetTexGenxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexGenxvOES(II[II)V"/>
+		<method name="glGetTexParameterxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameterxvOES(II[II)V"/>
+		<method name="glIsFramebufferOES(I)Z"/>
+		<method name="glIsRenderbufferOES(I)Z"/>
+		<method name="glLightModelxOES(II)V"/>
+		<method name="glLightModelxvOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glLightModelxvOES(I[II)V"/>
+		<method name="glLightxOES(III)V"/>
+		<method name="glLightxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glLightxvOES(II[II)V"/>
+		<method name="glLineWidthxOES(I)V"/>
+		<method name="glLoadMatrixxOES(Ljava/nio/IntBuffer;)V"/>
+		<method name="glLoadMatrixxOES([II)V"/>
+		<method name="glLoadPaletteFromModelViewMatrixOES()V"/>
+		<method name="glMaterialxOES(III)V"/>
+		<method name="glMaterialxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glMaterialxvOES(II[II)V"/>
+		<method name="glMatrixIndexPointerOES(IIILjava/nio/Buffer;)V"/>
+		<method name="glMultMatrixxOES(Ljava/nio/IntBuffer;)V"/>
+		<method name="glMultMatrixxOES([II)V"/>
+		<method name="glMultiTexCoord4xOES(IIIII)V"/>
+		<method name="glNormal3xOES(III)V"/>
+		<method name="glOrthofOES(FFFFFF)V"/>
+		<method name="glOrthoxOES(IIIIII)V"/>
+		<method name="glPointParameterxOES(II)V"/>
+		<method name="glPointParameterxvOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glPointParameterxvOES(I[II)V"/>
+		<method name="glPointSizexOES(I)V"/>
+		<method name="glPolygonOffsetxOES(II)V"/>
+		<method name="glRenderbufferStorageOES(IIII)V"/>
+		<method name="glRotatexOES(IIII)V"/>
+		<method name="glSampleCoveragexOES(IZ)V"/>
+		<method name="glScalexOES(III)V"/>
+		<method name="glTexEnvxOES(III)V"/>
+		<method name="glTexEnvxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexEnvxvOES(II[II)V"/>
+		<method name="glTexGenfOES(IIF)V"/>
+		<method name="glTexGenfvOES(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexGenfvOES(II[FI)V"/>
+		<method name="glTexGeniOES(III)V"/>
+		<method name="glTexGenivOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexGenivOES(II[II)V"/>
+		<method name="glTexGenxOES(III)V"/>
+		<method name="glTexGenxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexGenxvOES(II[II)V"/>
+		<method name="glTexParameterxOES(III)V"/>
+		<method name="glTexParameterxvOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameterxvOES(II[II)V"/>
+		<method name="glTranslatexOES(III)V"/>
+		<method name="glWeightPointerOES(IIILjava/nio/Buffer;)V"/>
+		<field name="GL_3DC_XY_AMD"/>
+		<field name="GL_3DC_X_AMD"/>
+		<field name="GL_ATC_RGBA_EXPLICIT_ALPHA_AMD"/>
+		<field name="GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD"/>
+		<field name="GL_ATC_RGB_AMD"/>
+		<field name="GL_BGRA"/>
+		<field name="GL_BLEND_DST_ALPHA_OES"/>
+		<field name="GL_BLEND_DST_RGB_OES"/>
+		<field name="GL_BLEND_EQUATION_ALPHA_OES"/>
+		<field name="GL_BLEND_EQUATION_OES"/>
+		<field name="GL_BLEND_EQUATION_RGB_OES"/>
+		<field name="GL_BLEND_SRC_ALPHA_OES"/>
+		<field name="GL_BLEND_SRC_RGB_OES"/>
+		<field name="GL_BUFFER_ACCESS_OES"/>
+		<field name="GL_BUFFER_MAPPED_OES"/>
+		<field name="GL_BUFFER_MAP_POINTER_OES"/>
+		<field name="GL_COLOR_ATTACHMENT0_OES"/>
+		<field name="GL_CURRENT_PALETTE_MATRIX_OES"/>
+		<field name="GL_DECR_WRAP_OES"/>
+		<field name="GL_DEPTH24_STENCIL8_OES"/>
+		<field name="GL_DEPTH_ATTACHMENT_OES"/>
+		<field name="GL_DEPTH_COMPONENT16_OES"/>
+		<field name="GL_DEPTH_COMPONENT24_OES"/>
+		<field name="GL_DEPTH_COMPONENT32_OES"/>
+		<field name="GL_DEPTH_STENCIL_OES"/>
+		<field name="GL_ETC1_RGB8_OES"/>
+		<field name="GL_FIXED_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES"/>
+		<field name="GL_FRAMEBUFFER_BINDING_OES"/>
+		<field name="GL_FRAMEBUFFER_COMPLETE_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES"/>
+		<field name="GL_FRAMEBUFFER_OES"/>
+		<field name="GL_FRAMEBUFFER_UNSUPPORTED_OES"/>
+		<field name="GL_FUNC_ADD_OES"/>
+		<field name="GL_FUNC_REVERSE_SUBTRACT_OES"/>
+		<field name="GL_FUNC_SUBTRACT_OES"/>
+		<field name="GL_INCR_WRAP_OES"/>
+		<field name="GL_INVALID_FRAMEBUFFER_OPERATION_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_POINTER_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_SIZE_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_STRIDE_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_TYPE_OES"/>
+		<field name="GL_MATRIX_PALETTE_OES"/>
+		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES"/>
+		<field name="GL_MAX_PALETTE_MATRICES_OES"/>
+		<field name="GL_MAX_RENDERBUFFER_SIZE_OES"/>
+		<field name="GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT"/>
+		<field name="GL_MAX_VERTEX_UNITS_OES"/>
+		<field name="GL_MIRRORED_REPEAT_OES"/>
+		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_NONE_OES"/>
+		<field name="GL_NORMAL_MAP_OES"/>
+		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_REFLECTION_MAP_OES"/>
+		<field name="GL_RENDERBUFFER_ALPHA_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_BINDING_OES"/>
+		<field name="GL_RENDERBUFFER_BLUE_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_DEPTH_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_GREEN_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_HEIGHT_OES"/>
+		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES"/>
+		<field name="GL_RENDERBUFFER_OES"/>
+		<field name="GL_RENDERBUFFER_RED_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_STENCIL_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_WIDTH_OES"/>
+		<field name="GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES" since="15"/>
+		<field name="GL_RGB565_OES"/>
+		<field name="GL_RGB5_A1_OES"/>
+		<field name="GL_RGB8_OES"/>
+		<field name="GL_RGBA4_OES"/>
+		<field name="GL_RGBA8_OES"/>
+		<field name="GL_SAMPLER_EXTERNAL_OES" since="15"/>
+		<field name="GL_STENCIL_ATTACHMENT_OES"/>
+		<field name="GL_STENCIL_INDEX1_OES"/>
+		<field name="GL_STENCIL_INDEX4_OES"/>
+		<field name="GL_STENCIL_INDEX8_OES"/>
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP_OES"/>
+		<field name="GL_TEXTURE_BINDING_EXTERNAL_OES" since="15"/>
+		<field name="GL_TEXTURE_CROP_RECT_OES"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES"/>
+		<field name="GL_TEXTURE_CUBE_MAP_OES"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES"/>
+		<field name="GL_TEXTURE_EXTERNAL_OES" since="15"/>
+		<field name="GL_TEXTURE_GEN_MODE_OES"/>
+		<field name="GL_TEXTURE_GEN_STR_OES"/>
+		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_TEXTURE_MAX_ANISOTROPY_EXT"/>
+		<field name="GL_UNSIGNED_INT_24_8_OES"/>
+		<field name="GL_WEIGHT_ARRAY_BUFFER_BINDING_OES"/>
+		<field name="GL_WEIGHT_ARRAY_OES"/>
+		<field name="GL_WEIGHT_ARRAY_POINTER_OES"/>
+		<field name="GL_WEIGHT_ARRAY_SIZE_OES"/>
+		<field name="GL_WEIGHT_ARRAY_STRIDE_OES"/>
+		<field name="GL_WEIGHT_ARRAY_TYPE_OES"/>
+		<field name="GL_WRITE_ONLY_OES"/>
+	</class>
+	<class name="android/opengl/GLES20" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="glActiveTexture(I)V"/>
+		<method name="glAttachShader(II)V"/>
+		<method name="glBindAttribLocation(IILjava/lang/String;)V"/>
+		<method name="glBindBuffer(II)V"/>
+		<method name="glBindFramebuffer(II)V"/>
+		<method name="glBindRenderbuffer(II)V"/>
+		<method name="glBindTexture(II)V"/>
+		<method name="glBlendColor(FFFF)V"/>
+		<method name="glBlendEquation(I)V"/>
+		<method name="glBlendEquationSeparate(II)V"/>
+		<method name="glBlendFunc(II)V"/>
+		<method name="glBlendFuncSeparate(IIII)V"/>
+		<method name="glBufferData(IILjava/nio/Buffer;I)V"/>
+		<method name="glBufferSubData(IIILjava/nio/Buffer;)V"/>
+		<method name="glCheckFramebufferStatus(I)I"/>
+		<method name="glClear(I)V"/>
+		<method name="glClearColor(FFFF)V"/>
+		<method name="glClearDepthf(F)V"/>
+		<method name="glClearStencil(I)V"/>
+		<method name="glColorMask(ZZZZ)V"/>
+		<method name="glCompileShader(I)V"/>
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCopyTexImage2D(IIIIIIII)V"/>
+		<method name="glCopyTexSubImage2D(IIIIIIII)V"/>
+		<method name="glCreateProgram()I"/>
+		<method name="glCreateShader(I)I"/>
+		<method name="glCullFace(I)V"/>
+		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteBuffers(I[II)V"/>
+		<method name="glDeleteFramebuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteFramebuffers(I[II)V"/>
+		<method name="glDeleteProgram(I)V"/>
+		<method name="glDeleteRenderbuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteRenderbuffers(I[II)V"/>
+		<method name="glDeleteShader(I)V"/>
+		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteTextures(I[II)V"/>
+		<method name="glDepthFunc(I)V"/>
+		<method name="glDepthMask(Z)V"/>
+		<method name="glDepthRangef(FF)V"/>
+		<method name="glDetachShader(II)V"/>
+		<method name="glDisable(I)V"/>
+		<method name="glDisableVertexAttribArray(I)V"/>
+		<method name="glDrawArrays(III)V"/>
+		<method name="glDrawElements(IIII)V" since="9"/>
+		<method name="glDrawElements(IIILjava/nio/Buffer;)V"/>
+		<method name="glEnable(I)V"/>
+		<method name="glEnableVertexAttribArray(I)V"/>
+		<method name="glFinish()V"/>
+		<method name="glFlush()V"/>
+		<method name="glFramebufferRenderbuffer(IIII)V"/>
+		<method name="glFramebufferTexture2D(IIIII)V"/>
+		<method name="glFrontFace(I)V"/>
+		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenBuffers(I[II)V"/>
+		<method name="glGenFramebuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenFramebuffers(I[II)V"/>
+		<method name="glGenRenderbuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenRenderbuffers(I[II)V"/>
+		<method name="glGenTextures(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenTextures(I[II)V"/>
+		<method name="glGenerateMipmap(I)V"/>
+		<method name="glGetActiveAttrib(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" removed="21"/>
+		<method name="glGetActiveAttrib(III[II[II[II[BI)V"/>
+		<method name="glGetActiveAttrib(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;" since="17"/>
+		<method name="glGetActiveAttrib(II[II[II)Ljava/lang/String;" since="17"/>
+		<method name="glGetActiveUniform(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" removed="21"/>
+		<method name="glGetActiveUniform(III[II[II[II[BI)V"/>
+		<method name="glGetActiveUniform(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;" since="17"/>
+		<method name="glGetActiveUniform(II[II[II)Ljava/lang/String;" since="17"/>
+		<method name="glGetAttachedShaders(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
+		<method name="glGetAttachedShaders(II[II[II)V"/>
+		<method name="glGetAttribLocation(ILjava/lang/String;)I"/>
+		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetBooleanv(I[ZI)V"/>
+		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetBufferParameteriv(II[II)V"/>
+		<method name="glGetError()I"/>
+		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetFloatv(I[FI)V"/>
+		<method name="glGetFramebufferAttachmentParameteriv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetFramebufferAttachmentParameteriv(III[II)V"/>
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetIntegerv(I[II)V"/>
+		<method name="glGetProgramInfoLog(I)Ljava/lang/String;"/>
+		<method name="glGetProgramiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetProgramiv(II[II)V"/>
+		<method name="glGetRenderbufferParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetRenderbufferParameteriv(II[II)V"/>
+		<method name="glGetShaderInfoLog(I)Ljava/lang/String;"/>
+		<method name="glGetShaderPrecisionFormat(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
+		<method name="glGetShaderPrecisionFormat(II[II[II)V"/>
+		<method name="glGetShaderSource(I)Ljava/lang/String;" since="17"/>
+		<method name="glGetShaderSource(IILjava/nio/IntBuffer;B)V" removed="21"/>
+		<method name="glGetShaderSource(II[II[BI)V"/>
+		<method name="glGetShaderiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetShaderiv(II[II)V"/>
+		<method name="glGetString(I)Ljava/lang/String;"/>
+		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetTexParameterfv(II[FI)V"/>
+		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameteriv(II[II)V"/>
+		<method name="glGetUniformLocation(ILjava/lang/String;)I"/>
+		<method name="glGetUniformfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetUniformfv(II[FI)V"/>
+		<method name="glGetUniformiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetUniformiv(II[II)V"/>
+		<method name="glGetVertexAttribfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetVertexAttribfv(II[FI)V"/>
+		<method name="glGetVertexAttribiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetVertexAttribiv(II[II)V"/>
+		<method name="glHint(II)V"/>
+		<method name="glIsBuffer(I)Z"/>
+		<method name="glIsEnabled(I)Z"/>
+		<method name="glIsFramebuffer(I)Z"/>
+		<method name="glIsProgram(I)Z"/>
+		<method name="glIsRenderbuffer(I)Z"/>
+		<method name="glIsShader(I)Z"/>
+		<method name="glIsTexture(I)Z"/>
+		<method name="glLineWidth(F)V"/>
+		<method name="glLinkProgram(I)V"/>
+		<method name="glPixelStorei(II)V"/>
+		<method name="glPolygonOffset(FF)V"/>
+		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V"/>
+		<method name="glReleaseShaderCompiler()V"/>
+		<method name="glRenderbufferStorage(IIII)V"/>
+		<method name="glSampleCoverage(FZ)V"/>
+		<method name="glScissor(IIII)V"/>
+		<method name="glShaderBinary(ILjava/nio/IntBuffer;ILjava/nio/Buffer;I)V"/>
+		<method name="glShaderBinary(I[IIILjava/nio/Buffer;I)V"/>
+		<method name="glShaderSource(ILjava/lang/String;)V"/>
+		<method name="glStencilFunc(III)V"/>
+		<method name="glStencilFuncSeparate(IIII)V"/>
+		<method name="glStencilMask(I)V"/>
+		<method name="glStencilMaskSeparate(II)V"/>
+		<method name="glStencilOp(III)V"/>
+		<method name="glStencilOpSeparate(IIII)V"/>
+		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glTexParameterf(IIF)V"/>
+		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexParameterfv(II[FI)V"/>
+		<method name="glTexParameteri(III)V"/>
+		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameteriv(II[II)V"/>
+		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glUniform1f(IF)V"/>
+		<method name="glUniform1fv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glUniform1fv(II[FI)V"/>
+		<method name="glUniform1i(II)V"/>
+		<method name="glUniform1iv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform1iv(II[II)V"/>
+		<method name="glUniform2f(IFF)V"/>
+		<method name="glUniform2fv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glUniform2fv(II[FI)V"/>
+		<method name="glUniform2i(III)V"/>
+		<method name="glUniform2iv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform2iv(II[II)V"/>
+		<method name="glUniform3f(IFFF)V"/>
+		<method name="glUniform3fv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glUniform3fv(II[FI)V"/>
+		<method name="glUniform3i(IIII)V"/>
+		<method name="glUniform3iv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform3iv(II[II)V"/>
+		<method name="glUniform4f(IFFFF)V"/>
+		<method name="glUniform4fv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glUniform4fv(II[FI)V"/>
+		<method name="glUniform4i(IIIII)V"/>
+		<method name="glUniform4iv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform4iv(II[II)V"/>
+		<method name="glUniformMatrix2fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix2fv(IIZ[FI)V"/>
+		<method name="glUniformMatrix3fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix3fv(IIZ[FI)V"/>
+		<method name="glUniformMatrix4fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix4fv(IIZ[FI)V"/>
+		<method name="glUseProgram(I)V"/>
+		<method name="glValidateProgram(I)V"/>
+		<method name="glVertexAttrib1f(IF)V"/>
+		<method name="glVertexAttrib1fv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glVertexAttrib1fv(I[FI)V"/>
+		<method name="glVertexAttrib2f(IFF)V"/>
+		<method name="glVertexAttrib2fv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glVertexAttrib2fv(I[FI)V"/>
+		<method name="glVertexAttrib3f(IFFF)V"/>
+		<method name="glVertexAttrib3fv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glVertexAttrib3fv(I[FI)V"/>
+		<method name="glVertexAttrib4f(IFFFF)V"/>
+		<method name="glVertexAttrib4fv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glVertexAttrib4fv(I[FI)V"/>
+		<method name="glVertexAttribPointer(IIIZII)V" since="9"/>
+		<method name="glVertexAttribPointer(IIIZILjava/nio/Buffer;)V"/>
+		<method name="glViewport(IIII)V"/>
+		<field name="GL_ACTIVE_ATTRIBUTES"/>
+		<field name="GL_ACTIVE_ATTRIBUTE_MAX_LENGTH"/>
+		<field name="GL_ACTIVE_TEXTURE"/>
+		<field name="GL_ACTIVE_UNIFORMS"/>
+		<field name="GL_ACTIVE_UNIFORM_MAX_LENGTH"/>
+		<field name="GL_ALIASED_LINE_WIDTH_RANGE"/>
+		<field name="GL_ALIASED_POINT_SIZE_RANGE"/>
+		<field name="GL_ALPHA"/>
+		<field name="GL_ALPHA_BITS"/>
+		<field name="GL_ALWAYS"/>
+		<field name="GL_ARRAY_BUFFER"/>
+		<field name="GL_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_ATTACHED_SHADERS"/>
+		<field name="GL_BACK"/>
+		<field name="GL_BLEND"/>
+		<field name="GL_BLEND_COLOR"/>
+		<field name="GL_BLEND_DST_ALPHA"/>
+		<field name="GL_BLEND_DST_RGB"/>
+		<field name="GL_BLEND_EQUATION"/>
+		<field name="GL_BLEND_EQUATION_ALPHA"/>
+		<field name="GL_BLEND_EQUATION_RGB"/>
+		<field name="GL_BLEND_SRC_ALPHA"/>
+		<field name="GL_BLEND_SRC_RGB"/>
+		<field name="GL_BLUE_BITS"/>
+		<field name="GL_BOOL"/>
+		<field name="GL_BOOL_VEC2"/>
+		<field name="GL_BOOL_VEC3"/>
+		<field name="GL_BOOL_VEC4"/>
+		<field name="GL_BUFFER_SIZE"/>
+		<field name="GL_BUFFER_USAGE"/>
+		<field name="GL_BYTE"/>
+		<field name="GL_CCW"/>
+		<field name="GL_CLAMP_TO_EDGE"/>
+		<field name="GL_COLOR_ATTACHMENT0"/>
+		<field name="GL_COLOR_BUFFER_BIT"/>
+		<field name="GL_COLOR_CLEAR_VALUE"/>
+		<field name="GL_COLOR_WRITEMASK"/>
+		<field name="GL_COMPILE_STATUS"/>
+		<field name="GL_COMPRESSED_TEXTURE_FORMATS"/>
+		<field name="GL_CONSTANT_ALPHA"/>
+		<field name="GL_CONSTANT_COLOR"/>
+		<field name="GL_CULL_FACE"/>
+		<field name="GL_CULL_FACE_MODE"/>
+		<field name="GL_CURRENT_PROGRAM"/>
+		<field name="GL_CURRENT_VERTEX_ATTRIB"/>
+		<field name="GL_CW"/>
+		<field name="GL_DECR"/>
+		<field name="GL_DECR_WRAP"/>
+		<field name="GL_DELETE_STATUS"/>
+		<field name="GL_DEPTH_ATTACHMENT"/>
+		<field name="GL_DEPTH_BITS"/>
+		<field name="GL_DEPTH_BUFFER_BIT"/>
+		<field name="GL_DEPTH_CLEAR_VALUE"/>
+		<field name="GL_DEPTH_COMPONENT"/>
+		<field name="GL_DEPTH_COMPONENT16"/>
+		<field name="GL_DEPTH_FUNC"/>
+		<field name="GL_DEPTH_RANGE"/>
+		<field name="GL_DEPTH_TEST"/>
+		<field name="GL_DEPTH_WRITEMASK"/>
+		<field name="GL_DITHER"/>
+		<field name="GL_DONT_CARE"/>
+		<field name="GL_DST_ALPHA"/>
+		<field name="GL_DST_COLOR"/>
+		<field name="GL_DYNAMIC_DRAW"/>
+		<field name="GL_ELEMENT_ARRAY_BUFFER"/>
+		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_EQUAL"/>
+		<field name="GL_EXTENSIONS"/>
+		<field name="GL_FALSE"/>
+		<field name="GL_FASTEST"/>
+		<field name="GL_FIXED"/>
+		<field name="GL_FLOAT"/>
+		<field name="GL_FLOAT_MAT2"/>
+		<field name="GL_FLOAT_MAT3"/>
+		<field name="GL_FLOAT_MAT4"/>
+		<field name="GL_FLOAT_VEC2"/>
+		<field name="GL_FLOAT_VEC3"/>
+		<field name="GL_FLOAT_VEC4"/>
+		<field name="GL_FRAGMENT_SHADER"/>
+		<field name="GL_FRAMEBUFFER"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL"/>
+		<field name="GL_FRAMEBUFFER_BINDING"/>
+		<field name="GL_FRAMEBUFFER_COMPLETE"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"/>
+		<field name="GL_FRAMEBUFFER_UNSUPPORTED"/>
+		<field name="GL_FRONT"/>
+		<field name="GL_FRONT_AND_BACK"/>
+		<field name="GL_FRONT_FACE"/>
+		<field name="GL_FUNC_ADD"/>
+		<field name="GL_FUNC_REVERSE_SUBTRACT"/>
+		<field name="GL_FUNC_SUBTRACT"/>
+		<field name="GL_GENERATE_MIPMAP_HINT"/>
+		<field name="GL_GEQUAL"/>
+		<field name="GL_GREATER"/>
+		<field name="GL_GREEN_BITS"/>
+		<field name="GL_HIGH_FLOAT"/>
+		<field name="GL_HIGH_INT"/>
+		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT"/>
+		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE"/>
+		<field name="GL_INCR"/>
+		<field name="GL_INCR_WRAP"/>
+		<field name="GL_INFO_LOG_LENGTH"/>
+		<field name="GL_INT"/>
+		<field name="GL_INT_VEC2"/>
+		<field name="GL_INT_VEC3"/>
+		<field name="GL_INT_VEC4"/>
+		<field name="GL_INVALID_ENUM"/>
+		<field name="GL_INVALID_FRAMEBUFFER_OPERATION"/>
+		<field name="GL_INVALID_OPERATION"/>
+		<field name="GL_INVALID_VALUE"/>
+		<field name="GL_INVERT"/>
+		<field name="GL_KEEP"/>
+		<field name="GL_LEQUAL"/>
+		<field name="GL_LESS"/>
+		<field name="GL_LINEAR"/>
+		<field name="GL_LINEAR_MIPMAP_LINEAR"/>
+		<field name="GL_LINEAR_MIPMAP_NEAREST"/>
+		<field name="GL_LINES"/>
+		<field name="GL_LINE_LOOP"/>
+		<field name="GL_LINE_STRIP"/>
+		<field name="GL_LINE_WIDTH"/>
+		<field name="GL_LINK_STATUS"/>
+		<field name="GL_LOW_FLOAT"/>
+		<field name="GL_LOW_INT"/>
+		<field name="GL_LUMINANCE"/>
+		<field name="GL_LUMINANCE_ALPHA"/>
+		<field name="GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS"/>
+		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE"/>
+		<field name="GL_MAX_FRAGMENT_UNIFORM_VECTORS"/>
+		<field name="GL_MAX_RENDERBUFFER_SIZE"/>
+		<field name="GL_MAX_TEXTURE_IMAGE_UNITS"/>
+		<field name="GL_MAX_TEXTURE_SIZE"/>
+		<field name="GL_MAX_VARYING_VECTORS"/>
+		<field name="GL_MAX_VERTEX_ATTRIBS"/>
+		<field name="GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS"/>
+		<field name="GL_MAX_VERTEX_UNIFORM_VECTORS"/>
+		<field name="GL_MAX_VIEWPORT_DIMS"/>
+		<field name="GL_MEDIUM_FLOAT"/>
+		<field name="GL_MEDIUM_INT"/>
+		<field name="GL_MIRRORED_REPEAT"/>
+		<field name="GL_NEAREST"/>
+		<field name="GL_NEAREST_MIPMAP_LINEAR"/>
+		<field name="GL_NEAREST_MIPMAP_NEAREST"/>
+		<field name="GL_NEVER"/>
+		<field name="GL_NICEST"/>
+		<field name="GL_NONE"/>
+		<field name="GL_NOTEQUAL"/>
+		<field name="GL_NO_ERROR"/>
+		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"/>
+		<field name="GL_NUM_SHADER_BINARY_FORMATS"/>
+		<field name="GL_ONE"/>
+		<field name="GL_ONE_MINUS_CONSTANT_ALPHA"/>
+		<field name="GL_ONE_MINUS_CONSTANT_COLOR"/>
+		<field name="GL_ONE_MINUS_DST_ALPHA"/>
+		<field name="GL_ONE_MINUS_DST_COLOR"/>
+		<field name="GL_ONE_MINUS_SRC_ALPHA"/>
+		<field name="GL_ONE_MINUS_SRC_COLOR"/>
+		<field name="GL_OUT_OF_MEMORY"/>
+		<field name="GL_PACK_ALIGNMENT"/>
+		<field name="GL_POINTS"/>
+		<field name="GL_POLYGON_OFFSET_FACTOR"/>
+		<field name="GL_POLYGON_OFFSET_FILL"/>
+		<field name="GL_POLYGON_OFFSET_UNITS"/>
+		<field name="GL_RED_BITS"/>
+		<field name="GL_RENDERBUFFER"/>
+		<field name="GL_RENDERBUFFER_ALPHA_SIZE"/>
+		<field name="GL_RENDERBUFFER_BINDING"/>
+		<field name="GL_RENDERBUFFER_BLUE_SIZE"/>
+		<field name="GL_RENDERBUFFER_DEPTH_SIZE"/>
+		<field name="GL_RENDERBUFFER_GREEN_SIZE"/>
+		<field name="GL_RENDERBUFFER_HEIGHT"/>
+		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT"/>
+		<field name="GL_RENDERBUFFER_RED_SIZE"/>
+		<field name="GL_RENDERBUFFER_STENCIL_SIZE"/>
+		<field name="GL_RENDERBUFFER_WIDTH"/>
+		<field name="GL_RENDERER"/>
+		<field name="GL_REPEAT"/>
+		<field name="GL_REPLACE"/>
+		<field name="GL_RGB"/>
+		<field name="GL_RGB565"/>
+		<field name="GL_RGB5_A1"/>
+		<field name="GL_RGBA"/>
+		<field name="GL_RGBA4"/>
+		<field name="GL_SAMPLER_2D"/>
+		<field name="GL_SAMPLER_CUBE"/>
+		<field name="GL_SAMPLES"/>
+		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"/>
+		<field name="GL_SAMPLE_BUFFERS"/>
+		<field name="GL_SAMPLE_COVERAGE"/>
+		<field name="GL_SAMPLE_COVERAGE_INVERT"/>
+		<field name="GL_SAMPLE_COVERAGE_VALUE"/>
+		<field name="GL_SCISSOR_BOX"/>
+		<field name="GL_SCISSOR_TEST"/>
+		<field name="GL_SHADER_BINARY_FORMATS"/>
+		<field name="GL_SHADER_COMPILER"/>
+		<field name="GL_SHADER_SOURCE_LENGTH"/>
+		<field name="GL_SHADER_TYPE"/>
+		<field name="GL_SHADING_LANGUAGE_VERSION"/>
+		<field name="GL_SHORT"/>
+		<field name="GL_SRC_ALPHA"/>
+		<field name="GL_SRC_ALPHA_SATURATE"/>
+		<field name="GL_SRC_COLOR"/>
+		<field name="GL_STATIC_DRAW"/>
+		<field name="GL_STENCIL_ATTACHMENT"/>
+		<field name="GL_STENCIL_BACK_FAIL"/>
+		<field name="GL_STENCIL_BACK_FUNC"/>
+		<field name="GL_STENCIL_BACK_PASS_DEPTH_FAIL"/>
+		<field name="GL_STENCIL_BACK_PASS_DEPTH_PASS"/>
+		<field name="GL_STENCIL_BACK_REF"/>
+		<field name="GL_STENCIL_BACK_VALUE_MASK"/>
+		<field name="GL_STENCIL_BACK_WRITEMASK"/>
+		<field name="GL_STENCIL_BITS"/>
+		<field name="GL_STENCIL_BUFFER_BIT"/>
+		<field name="GL_STENCIL_CLEAR_VALUE"/>
+		<field name="GL_STENCIL_FAIL"/>
+		<field name="GL_STENCIL_FUNC"/>
+		<field name="GL_STENCIL_INDEX" deprecated="18"/>
+		<field name="GL_STENCIL_INDEX8"/>
+		<field name="GL_STENCIL_PASS_DEPTH_FAIL"/>
+		<field name="GL_STENCIL_PASS_DEPTH_PASS"/>
+		<field name="GL_STENCIL_REF"/>
+		<field name="GL_STENCIL_TEST"/>
+		<field name="GL_STENCIL_VALUE_MASK"/>
+		<field name="GL_STENCIL_WRITEMASK"/>
+		<field name="GL_STREAM_DRAW"/>
+		<field name="GL_SUBPIXEL_BITS"/>
+		<field name="GL_TEXTURE"/>
+		<field name="GL_TEXTURE0"/>
+		<field name="GL_TEXTURE1"/>
+		<field name="GL_TEXTURE10"/>
+		<field name="GL_TEXTURE11"/>
+		<field name="GL_TEXTURE12"/>
+		<field name="GL_TEXTURE13"/>
+		<field name="GL_TEXTURE14"/>
+		<field name="GL_TEXTURE15"/>
+		<field name="GL_TEXTURE16"/>
+		<field name="GL_TEXTURE17"/>
+		<field name="GL_TEXTURE18"/>
+		<field name="GL_TEXTURE19"/>
+		<field name="GL_TEXTURE2"/>
+		<field name="GL_TEXTURE20"/>
+		<field name="GL_TEXTURE21"/>
+		<field name="GL_TEXTURE22"/>
+		<field name="GL_TEXTURE23"/>
+		<field name="GL_TEXTURE24"/>
+		<field name="GL_TEXTURE25"/>
+		<field name="GL_TEXTURE26"/>
+		<field name="GL_TEXTURE27"/>
+		<field name="GL_TEXTURE28"/>
+		<field name="GL_TEXTURE29"/>
+		<field name="GL_TEXTURE3"/>
+		<field name="GL_TEXTURE30"/>
+		<field name="GL_TEXTURE31"/>
+		<field name="GL_TEXTURE4"/>
+		<field name="GL_TEXTURE5"/>
+		<field name="GL_TEXTURE6"/>
+		<field name="GL_TEXTURE7"/>
+		<field name="GL_TEXTURE8"/>
+		<field name="GL_TEXTURE9"/>
+		<field name="GL_TEXTURE_2D"/>
+		<field name="GL_TEXTURE_BINDING_2D"/>
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP"/>
+		<field name="GL_TEXTURE_CUBE_MAP"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/>
+		<field name="GL_TEXTURE_MAG_FILTER"/>
+		<field name="GL_TEXTURE_MIN_FILTER"/>
+		<field name="GL_TEXTURE_WRAP_S"/>
+		<field name="GL_TEXTURE_WRAP_T"/>
+		<field name="GL_TRIANGLES"/>
+		<field name="GL_TRIANGLE_FAN"/>
+		<field name="GL_TRIANGLE_STRIP"/>
+		<field name="GL_TRUE"/>
+		<field name="GL_UNPACK_ALIGNMENT"/>
+		<field name="GL_UNSIGNED_BYTE"/>
+		<field name="GL_UNSIGNED_INT"/>
+		<field name="GL_UNSIGNED_SHORT"/>
+		<field name="GL_UNSIGNED_SHORT_4_4_4_4"/>
+		<field name="GL_UNSIGNED_SHORT_5_5_5_1"/>
+		<field name="GL_UNSIGNED_SHORT_5_6_5"/>
+		<field name="GL_VALIDATE_STATUS"/>
+		<field name="GL_VENDOR"/>
+		<field name="GL_VERSION"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_ENABLED"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_NORMALIZED"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_POINTER"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_SIZE"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_STRIDE"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_TYPE"/>
+		<field name="GL_VERTEX_SHADER"/>
+		<field name="GL_VIEWPORT"/>
+		<field name="GL_ZERO"/>
+	</class>
+	<class name="android/opengl/GLES30" since="18">
+		<extends name="android/opengl/GLES20"/>
+		<method name="&lt;init>()V"/>
+		<method name="glBeginQuery(II)V"/>
+		<method name="glBeginTransformFeedback(I)V"/>
+		<method name="glBindBufferBase(III)V"/>
+		<method name="glBindBufferRange(IIIII)V"/>
+		<method name="glBindSampler(II)V"/>
+		<method name="glBindTransformFeedback(II)V"/>
+		<method name="glBindVertexArray(I)V"/>
+		<method name="glBlitFramebuffer(IIIIIIIIII)V"/>
+		<method name="glClearBufferfi(IIFI)V"/>
+		<method name="glClearBufferfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glClearBufferfv(II[FI)V"/>
+		<method name="glClearBufferiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glClearBufferiv(II[II)V"/>
+		<method name="glClearBufferuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glClearBufferuiv(II[II)V"/>
+		<method name="glClientWaitSync(JIJ)I"/>
+		<method name="glCompressedTexImage3D(IIIIIIIII)V"/>
+		<method name="glCompressedTexImage3D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCompressedTexSubImage3D(IIIIIIIIIII)V"/>
+		<method name="glCompressedTexSubImage3D(IIIIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCopyBufferSubData(IIIII)V"/>
+		<method name="glCopyTexSubImage3D(IIIIIIIII)V"/>
+		<method name="glDeleteQueries(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteQueries(I[II)V"/>
+		<method name="glDeleteSamplers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteSamplers(I[II)V"/>
+		<method name="glDeleteSync(J)V"/>
+		<method name="glDeleteTransformFeedbacks(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteTransformFeedbacks(I[II)V"/>
+		<method name="glDeleteVertexArrays(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteVertexArrays(I[II)V"/>
+		<method name="glDrawArraysInstanced(IIII)V"/>
+		<method name="glDrawBuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDrawBuffers(I[II)V"/>
+		<method name="glDrawElementsInstanced(IIIII)V"/>
+		<method name="glDrawElementsInstanced(IIILjava/nio/Buffer;I)V"/>
+		<method name="glDrawRangeElements(IIIIII)V"/>
+		<method name="glDrawRangeElements(IIIIILjava/nio/Buffer;)V"/>
+		<method name="glEndQuery(I)V"/>
+		<method name="glEndTransformFeedback()V"/>
+		<method name="glFenceSync(II)J"/>
+		<method name="glFlushMappedBufferRange(III)V"/>
+		<method name="glFramebufferTextureLayer(IIIII)V"/>
+		<method name="glGenQueries(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenQueries(I[II)V"/>
+		<method name="glGenSamplers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenSamplers(I[II)V"/>
+		<method name="glGenTransformFeedbacks(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenTransformFeedbacks(I[II)V"/>
+		<method name="glGenVertexArrays(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenVertexArrays(I[II)V"/>
+		<method name="glGetActiveUniformBlockName(II)Ljava/lang/String;"/>
+		<method name="glGetActiveUniformBlockName(III[II[BI)V"/>
+		<method name="glGetActiveUniformBlockName(IILjava/nio/Buffer;Ljava/nio/Buffer;)V"/>
+		<method name="glGetActiveUniformBlockiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetActiveUniformBlockiv(III[II)V"/>
+		<method name="glGetActiveUniformsiv(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetActiveUniformsiv(II[III[II)V"/>
+		<method name="glGetBufferParameteri64v(IILjava/nio/LongBuffer;)V"/>
+		<method name="glGetBufferParameteri64v(II[JI)V"/>
+		<method name="glGetBufferPointerv(II)Ljava/nio/Buffer;"/>
+		<method name="glGetFragDataLocation(ILjava/lang/String;)I"/>
+		<method name="glGetInteger64i_v(IILjava/nio/LongBuffer;)V"/>
+		<method name="glGetInteger64i_v(II[JI)V"/>
+		<method name="glGetInteger64v(ILjava/nio/LongBuffer;)V"/>
+		<method name="glGetInteger64v(I[JI)V"/>
+		<method name="glGetIntegeri_v(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetIntegeri_v(II[II)V"/>
+		<method name="glGetInternalformativ(IIIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetInternalformativ(IIII[II)V"/>
+		<method name="glGetProgramBinary(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/Buffer;)V"/>
+		<method name="glGetProgramBinary(II[II[IILjava/nio/Buffer;)V"/>
+		<method name="glGetQueryObjectuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetQueryObjectuiv(II[II)V"/>
+		<method name="glGetQueryiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetQueryiv(II[II)V"/>
+		<method name="glGetSamplerParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetSamplerParameterfv(II[FI)V"/>
+		<method name="glGetSamplerParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetSamplerParameteriv(II[II)V"/>
+		<method name="glGetStringi(II)Ljava/lang/String;"/>
+		<method name="glGetSynciv(JIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
+		<method name="glGetSynciv(JII[II[II)V"/>
+		<method name="glGetTransformFeedbackVarying(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;B)V" deprecated="24"/>
+		<method name="glGetTransformFeedbackVarying(IIILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)V" since="24"/>
+		<method name="glGetTransformFeedbackVarying(III[II[II[II[BI)V"/>
+		<method name="glGetTransformFeedbackVarying(IILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)Ljava/lang/String;"/>
+		<method name="glGetTransformFeedbackVarying(II[II[II)Ljava/lang/String;"/>
+		<method name="glGetUniformBlockIndex(ILjava/lang/String;)I"/>
+		<method name="glGetUniformIndices(I[Ljava/lang/String;Ljava/nio/IntBuffer;)V"/>
+		<method name="glGetUniformIndices(I[Ljava/lang/String;[II)V"/>
+		<method name="glGetUniformuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetUniformuiv(II[II)V"/>
+		<method name="glGetVertexAttribIiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetVertexAttribIiv(II[II)V"/>
+		<method name="glGetVertexAttribIuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetVertexAttribIuiv(II[II)V"/>
+		<method name="glInvalidateFramebuffer(IILjava/nio/IntBuffer;)V"/>
+		<method name="glInvalidateFramebuffer(II[II)V"/>
+		<method name="glInvalidateSubFramebuffer(IILjava/nio/IntBuffer;IIII)V"/>
+		<method name="glInvalidateSubFramebuffer(II[IIIIII)V"/>
+		<method name="glIsQuery(I)Z"/>
+		<method name="glIsSampler(I)Z"/>
+		<method name="glIsSync(J)Z"/>
+		<method name="glIsTransformFeedback(I)Z"/>
+		<method name="glIsVertexArray(I)Z"/>
+		<method name="glMapBufferRange(IIII)Ljava/nio/Buffer;"/>
+		<method name="glPauseTransformFeedback()V"/>
+		<method name="glProgramBinary(IILjava/nio/Buffer;I)V"/>
+		<method name="glProgramParameteri(III)V"/>
+		<method name="glReadBuffer(I)V"/>
+		<method name="glReadPixels(IIIIIII)V" since="24"/>
+		<method name="glRenderbufferStorageMultisample(IIIII)V"/>
+		<method name="glResumeTransformFeedback()V"/>
+		<method name="glSamplerParameterf(IIF)V"/>
+		<method name="glSamplerParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glSamplerParameterfv(II[FI)V"/>
+		<method name="glSamplerParameteri(III)V"/>
+		<method name="glSamplerParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glSamplerParameteriv(II[II)V"/>
+		<method name="glTexImage3D(IIIIIIIIII)V"/>
+		<method name="glTexImage3D(IIIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glTexStorage2D(IIIII)V"/>
+		<method name="glTexStorage3D(IIIIII)V"/>
+		<method name="glTexSubImage3D(IIIIIIIIIII)V"/>
+		<method name="glTexSubImage3D(IIIIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glTransformFeedbackVaryings(I[Ljava/lang/String;I)V"/>
+		<method name="glUniform1ui(II)V"/>
+		<method name="glUniform1uiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform1uiv(II[II)V"/>
+		<method name="glUniform2ui(III)V"/>
+		<method name="glUniform2uiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform2uiv(II[II)V"/>
+		<method name="glUniform3ui(IIII)V"/>
+		<method name="glUniform3uiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform3uiv(II[II)V"/>
+		<method name="glUniform4ui(IIIII)V"/>
+		<method name="glUniform4uiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glUniform4uiv(II[II)V"/>
+		<method name="glUniformBlockBinding(III)V"/>
+		<method name="glUniformMatrix2x3fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix2x3fv(IIZ[FI)V"/>
+		<method name="glUniformMatrix2x4fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix2x4fv(IIZ[FI)V"/>
+		<method name="glUniformMatrix3x2fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix3x2fv(IIZ[FI)V"/>
+		<method name="glUniformMatrix3x4fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix3x4fv(IIZ[FI)V"/>
+		<method name="glUniformMatrix4x2fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix4x2fv(IIZ[FI)V"/>
+		<method name="glUniformMatrix4x3fv(IIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glUniformMatrix4x3fv(IIZ[FI)V"/>
+		<method name="glUnmapBuffer(I)Z"/>
+		<method name="glVertexAttribDivisor(II)V"/>
+		<method name="glVertexAttribI4i(IIIII)V"/>
+		<method name="glVertexAttribI4iv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glVertexAttribI4iv(I[II)V"/>
+		<method name="glVertexAttribI4ui(IIIII)V"/>
+		<method name="glVertexAttribI4uiv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glVertexAttribI4uiv(I[II)V"/>
+		<method name="glVertexAttribIPointer(IIIII)V"/>
+		<method name="glVertexAttribIPointer(IIIILjava/nio/Buffer;)V"/>
+		<method name="glWaitSync(JIJ)V"/>
+		<field name="GL_ACTIVE_UNIFORM_BLOCKS"/>
+		<field name="GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH"/>
+		<field name="GL_ALREADY_SIGNALED"/>
+		<field name="GL_ANY_SAMPLES_PASSED"/>
+		<field name="GL_ANY_SAMPLES_PASSED_CONSERVATIVE"/>
+		<field name="GL_BLUE"/>
+		<field name="GL_BUFFER_ACCESS_FLAGS"/>
+		<field name="GL_BUFFER_MAPPED"/>
+		<field name="GL_BUFFER_MAP_LENGTH"/>
+		<field name="GL_BUFFER_MAP_OFFSET"/>
+		<field name="GL_BUFFER_MAP_POINTER"/>
+		<field name="GL_COLOR"/>
+		<field name="GL_COLOR_ATTACHMENT1"/>
+		<field name="GL_COLOR_ATTACHMENT10"/>
+		<field name="GL_COLOR_ATTACHMENT11"/>
+		<field name="GL_COLOR_ATTACHMENT12"/>
+		<field name="GL_COLOR_ATTACHMENT13"/>
+		<field name="GL_COLOR_ATTACHMENT14"/>
+		<field name="GL_COLOR_ATTACHMENT15"/>
+		<field name="GL_COLOR_ATTACHMENT2"/>
+		<field name="GL_COLOR_ATTACHMENT3"/>
+		<field name="GL_COLOR_ATTACHMENT4"/>
+		<field name="GL_COLOR_ATTACHMENT5"/>
+		<field name="GL_COLOR_ATTACHMENT6"/>
+		<field name="GL_COLOR_ATTACHMENT7"/>
+		<field name="GL_COLOR_ATTACHMENT8"/>
+		<field name="GL_COLOR_ATTACHMENT9"/>
+		<field name="GL_COMPARE_REF_TO_TEXTURE"/>
+		<field name="GL_COMPRESSED_R11_EAC"/>
+		<field name="GL_COMPRESSED_RG11_EAC"/>
+		<field name="GL_COMPRESSED_RGB8_ETC2"/>
+		<field name="GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2"/>
+		<field name="GL_COMPRESSED_RGBA8_ETC2_EAC"/>
+		<field name="GL_COMPRESSED_SIGNED_R11_EAC"/>
+		<field name="GL_COMPRESSED_SIGNED_RG11_EAC"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC"/>
+		<field name="GL_COMPRESSED_SRGB8_ETC2"/>
+		<field name="GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2"/>
+		<field name="GL_CONDITION_SATISFIED"/>
+		<field name="GL_COPY_READ_BUFFER"/>
+		<field name="GL_COPY_READ_BUFFER_BINDING"/>
+		<field name="GL_COPY_WRITE_BUFFER"/>
+		<field name="GL_COPY_WRITE_BUFFER_BINDING"/>
+		<field name="GL_CURRENT_QUERY"/>
+		<field name="GL_DEPTH"/>
+		<field name="GL_DEPTH24_STENCIL8"/>
+		<field name="GL_DEPTH32F_STENCIL8"/>
+		<field name="GL_DEPTH_COMPONENT24"/>
+		<field name="GL_DEPTH_COMPONENT32F"/>
+		<field name="GL_DEPTH_STENCIL"/>
+		<field name="GL_DEPTH_STENCIL_ATTACHMENT"/>
+		<field name="GL_DRAW_BUFFER0"/>
+		<field name="GL_DRAW_BUFFER1"/>
+		<field name="GL_DRAW_BUFFER10"/>
+		<field name="GL_DRAW_BUFFER11"/>
+		<field name="GL_DRAW_BUFFER12"/>
+		<field name="GL_DRAW_BUFFER13"/>
+		<field name="GL_DRAW_BUFFER14"/>
+		<field name="GL_DRAW_BUFFER15"/>
+		<field name="GL_DRAW_BUFFER2"/>
+		<field name="GL_DRAW_BUFFER3"/>
+		<field name="GL_DRAW_BUFFER4"/>
+		<field name="GL_DRAW_BUFFER5"/>
+		<field name="GL_DRAW_BUFFER6"/>
+		<field name="GL_DRAW_BUFFER7"/>
+		<field name="GL_DRAW_BUFFER8"/>
+		<field name="GL_DRAW_BUFFER9"/>
+		<field name="GL_DRAW_FRAMEBUFFER"/>
+		<field name="GL_DRAW_FRAMEBUFFER_BINDING"/>
+		<field name="GL_DYNAMIC_COPY"/>
+		<field name="GL_DYNAMIC_READ"/>
+		<field name="GL_FLOAT_32_UNSIGNED_INT_24_8_REV"/>
+		<field name="GL_FLOAT_MAT2x3"/>
+		<field name="GL_FLOAT_MAT2x4"/>
+		<field name="GL_FLOAT_MAT3x2"/>
+		<field name="GL_FLOAT_MAT3x4"/>
+		<field name="GL_FLOAT_MAT4x2"/>
+		<field name="GL_FLOAT_MAT4x3"/>
+		<field name="GL_FRAGMENT_SHADER_DERIVATIVE_HINT"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER"/>
+		<field name="GL_FRAMEBUFFER_DEFAULT"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"/>
+		<field name="GL_FRAMEBUFFER_UNDEFINED"/>
+		<field name="GL_GREEN"/>
+		<field name="GL_HALF_FLOAT"/>
+		<field name="GL_INTERLEAVED_ATTRIBS"/>
+		<field name="GL_INT_2_10_10_10_REV"/>
+		<field name="GL_INT_SAMPLER_2D"/>
+		<field name="GL_INT_SAMPLER_2D_ARRAY"/>
+		<field name="GL_INT_SAMPLER_3D"/>
+		<field name="GL_INT_SAMPLER_CUBE"/>
+		<field name="GL_INVALID_INDEX"/>
+		<field name="GL_MAJOR_VERSION"/>
+		<field name="GL_MAP_FLUSH_EXPLICIT_BIT"/>
+		<field name="GL_MAP_INVALIDATE_BUFFER_BIT"/>
+		<field name="GL_MAP_INVALIDATE_RANGE_BIT"/>
+		<field name="GL_MAP_READ_BIT"/>
+		<field name="GL_MAP_UNSYNCHRONIZED_BIT"/>
+		<field name="GL_MAP_WRITE_BIT"/>
+		<field name="GL_MAX"/>
+		<field name="GL_MAX_3D_TEXTURE_SIZE"/>
+		<field name="GL_MAX_ARRAY_TEXTURE_LAYERS"/>
+		<field name="GL_MAX_COLOR_ATTACHMENTS"/>
+		<field name="GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_COMBINED_UNIFORM_BLOCKS"/>
+		<field name="GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_DRAW_BUFFERS"/>
+		<field name="GL_MAX_ELEMENTS_INDICES"/>
+		<field name="GL_MAX_ELEMENTS_VERTICES"/>
+		<field name="GL_MAX_ELEMENT_INDEX"/>
+		<field name="GL_MAX_FRAGMENT_INPUT_COMPONENTS"/>
+		<field name="GL_MAX_FRAGMENT_UNIFORM_BLOCKS"/>
+		<field name="GL_MAX_FRAGMENT_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_PROGRAM_TEXEL_OFFSET"/>
+		<field name="GL_MAX_SAMPLES"/>
+		<field name="GL_MAX_SERVER_WAIT_TIMEOUT"/>
+		<field name="GL_MAX_TEXTURE_LOD_BIAS"/>
+		<field name="GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS"/>
+		<field name="GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS"/>
+		<field name="GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS"/>
+		<field name="GL_MAX_UNIFORM_BLOCK_SIZE"/>
+		<field name="GL_MAX_UNIFORM_BUFFER_BINDINGS"/>
+		<field name="GL_MAX_VARYING_COMPONENTS"/>
+		<field name="GL_MAX_VERTEX_OUTPUT_COMPONENTS"/>
+		<field name="GL_MAX_VERTEX_UNIFORM_BLOCKS"/>
+		<field name="GL_MAX_VERTEX_UNIFORM_COMPONENTS"/>
+		<field name="GL_MIN"/>
+		<field name="GL_MINOR_VERSION"/>
+		<field name="GL_MIN_PROGRAM_TEXEL_OFFSET"/>
+		<field name="GL_NUM_EXTENSIONS"/>
+		<field name="GL_NUM_PROGRAM_BINARY_FORMATS"/>
+		<field name="GL_NUM_SAMPLE_COUNTS"/>
+		<field name="GL_OBJECT_TYPE"/>
+		<field name="GL_PACK_ROW_LENGTH"/>
+		<field name="GL_PACK_SKIP_PIXELS"/>
+		<field name="GL_PACK_SKIP_ROWS"/>
+		<field name="GL_PIXEL_PACK_BUFFER"/>
+		<field name="GL_PIXEL_PACK_BUFFER_BINDING"/>
+		<field name="GL_PIXEL_UNPACK_BUFFER"/>
+		<field name="GL_PIXEL_UNPACK_BUFFER_BINDING"/>
+		<field name="GL_PRIMITIVE_RESTART_FIXED_INDEX"/>
+		<field name="GL_PROGRAM_BINARY_FORMATS"/>
+		<field name="GL_PROGRAM_BINARY_LENGTH"/>
+		<field name="GL_PROGRAM_BINARY_RETRIEVABLE_HINT"/>
+		<field name="GL_QUERY_RESULT"/>
+		<field name="GL_QUERY_RESULT_AVAILABLE"/>
+		<field name="GL_R11F_G11F_B10F"/>
+		<field name="GL_R16F"/>
+		<field name="GL_R16I"/>
+		<field name="GL_R16UI"/>
+		<field name="GL_R32F"/>
+		<field name="GL_R32I"/>
+		<field name="GL_R32UI"/>
+		<field name="GL_R8"/>
+		<field name="GL_R8I"/>
+		<field name="GL_R8UI"/>
+		<field name="GL_R8_SNORM"/>
+		<field name="GL_RASTERIZER_DISCARD"/>
+		<field name="GL_READ_BUFFER"/>
+		<field name="GL_READ_FRAMEBUFFER"/>
+		<field name="GL_READ_FRAMEBUFFER_BINDING"/>
+		<field name="GL_RED"/>
+		<field name="GL_RED_INTEGER"/>
+		<field name="GL_RENDERBUFFER_SAMPLES"/>
+		<field name="GL_RG"/>
+		<field name="GL_RG16F"/>
+		<field name="GL_RG16I"/>
+		<field name="GL_RG16UI"/>
+		<field name="GL_RG32F"/>
+		<field name="GL_RG32I"/>
+		<field name="GL_RG32UI"/>
+		<field name="GL_RG8"/>
+		<field name="GL_RG8I"/>
+		<field name="GL_RG8UI"/>
+		<field name="GL_RG8_SNORM"/>
+		<field name="GL_RGB10_A2"/>
+		<field name="GL_RGB10_A2UI"/>
+		<field name="GL_RGB16F"/>
+		<field name="GL_RGB16I"/>
+		<field name="GL_RGB16UI"/>
+		<field name="GL_RGB32F"/>
+		<field name="GL_RGB32I"/>
+		<field name="GL_RGB32UI"/>
+		<field name="GL_RGB8"/>
+		<field name="GL_RGB8I"/>
+		<field name="GL_RGB8UI"/>
+		<field name="GL_RGB8_SNORM"/>
+		<field name="GL_RGB9_E5"/>
+		<field name="GL_RGBA16F"/>
+		<field name="GL_RGBA16I"/>
+		<field name="GL_RGBA16UI"/>
+		<field name="GL_RGBA32F"/>
+		<field name="GL_RGBA32I"/>
+		<field name="GL_RGBA32UI"/>
+		<field name="GL_RGBA8"/>
+		<field name="GL_RGBA8I"/>
+		<field name="GL_RGBA8UI"/>
+		<field name="GL_RGBA8_SNORM"/>
+		<field name="GL_RGBA_INTEGER"/>
+		<field name="GL_RGB_INTEGER"/>
+		<field name="GL_RG_INTEGER"/>
+		<field name="GL_SAMPLER_2D_ARRAY"/>
+		<field name="GL_SAMPLER_2D_ARRAY_SHADOW"/>
+		<field name="GL_SAMPLER_2D_SHADOW"/>
+		<field name="GL_SAMPLER_3D"/>
+		<field name="GL_SAMPLER_BINDING"/>
+		<field name="GL_SAMPLER_CUBE_SHADOW"/>
+		<field name="GL_SEPARATE_ATTRIBS"/>
+		<field name="GL_SIGNALED"/>
+		<field name="GL_SIGNED_NORMALIZED"/>
+		<field name="GL_SRGB"/>
+		<field name="GL_SRGB8"/>
+		<field name="GL_SRGB8_ALPHA8"/>
+		<field name="GL_STATIC_COPY"/>
+		<field name="GL_STATIC_READ"/>
+		<field name="GL_STENCIL"/>
+		<field name="GL_STREAM_COPY"/>
+		<field name="GL_STREAM_READ"/>
+		<field name="GL_SYNC_CONDITION"/>
+		<field name="GL_SYNC_FENCE"/>
+		<field name="GL_SYNC_FLAGS"/>
+		<field name="GL_SYNC_FLUSH_COMMANDS_BIT"/>
+		<field name="GL_SYNC_GPU_COMMANDS_COMPLETE"/>
+		<field name="GL_SYNC_STATUS"/>
+		<field name="GL_TEXTURE_2D_ARRAY"/>
+		<field name="GL_TEXTURE_3D"/>
+		<field name="GL_TEXTURE_BASE_LEVEL"/>
+		<field name="GL_TEXTURE_BINDING_2D_ARRAY"/>
+		<field name="GL_TEXTURE_BINDING_3D"/>
+		<field name="GL_TEXTURE_COMPARE_FUNC"/>
+		<field name="GL_TEXTURE_COMPARE_MODE"/>
+		<field name="GL_TEXTURE_IMMUTABLE_FORMAT"/>
+		<field name="GL_TEXTURE_IMMUTABLE_LEVELS"/>
+		<field name="GL_TEXTURE_MAX_LEVEL"/>
+		<field name="GL_TEXTURE_MAX_LOD"/>
+		<field name="GL_TEXTURE_MIN_LOD"/>
+		<field name="GL_TEXTURE_SWIZZLE_A"/>
+		<field name="GL_TEXTURE_SWIZZLE_B"/>
+		<field name="GL_TEXTURE_SWIZZLE_G"/>
+		<field name="GL_TEXTURE_SWIZZLE_R"/>
+		<field name="GL_TEXTURE_WRAP_R"/>
+		<field name="GL_TIMEOUT_EXPIRED"/>
+		<field name="GL_TIMEOUT_IGNORED"/>
+		<field name="GL_TRANSFORM_FEEDBACK"/>
+		<field name="GL_TRANSFORM_FEEDBACK_ACTIVE"/>
+		<field name="GL_TRANSFORM_FEEDBACK_BINDING"/>
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER"/>
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_BINDING"/>
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_MODE"/>
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_SIZE"/>
+		<field name="GL_TRANSFORM_FEEDBACK_BUFFER_START"/>
+		<field name="GL_TRANSFORM_FEEDBACK_PAUSED"/>
+		<field name="GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN"/>
+		<field name="GL_TRANSFORM_FEEDBACK_VARYINGS"/>
+		<field name="GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH"/>
+		<field name="GL_UNIFORM_ARRAY_STRIDE"/>
+		<field name="GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS"/>
+		<field name="GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES"/>
+		<field name="GL_UNIFORM_BLOCK_BINDING"/>
+		<field name="GL_UNIFORM_BLOCK_DATA_SIZE"/>
+		<field name="GL_UNIFORM_BLOCK_INDEX"/>
+		<field name="GL_UNIFORM_BLOCK_NAME_LENGTH"/>
+		<field name="GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER"/>
+		<field name="GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER"/>
+		<field name="GL_UNIFORM_BUFFER"/>
+		<field name="GL_UNIFORM_BUFFER_BINDING"/>
+		<field name="GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT"/>
+		<field name="GL_UNIFORM_BUFFER_SIZE"/>
+		<field name="GL_UNIFORM_BUFFER_START"/>
+		<field name="GL_UNIFORM_IS_ROW_MAJOR"/>
+		<field name="GL_UNIFORM_MATRIX_STRIDE"/>
+		<field name="GL_UNIFORM_NAME_LENGTH"/>
+		<field name="GL_UNIFORM_OFFSET"/>
+		<field name="GL_UNIFORM_SIZE"/>
+		<field name="GL_UNIFORM_TYPE"/>
+		<field name="GL_UNPACK_IMAGE_HEIGHT"/>
+		<field name="GL_UNPACK_ROW_LENGTH"/>
+		<field name="GL_UNPACK_SKIP_IMAGES"/>
+		<field name="GL_UNPACK_SKIP_PIXELS"/>
+		<field name="GL_UNPACK_SKIP_ROWS"/>
+		<field name="GL_UNSIGNALED"/>
+		<field name="GL_UNSIGNED_INT_10F_11F_11F_REV"/>
+		<field name="GL_UNSIGNED_INT_24_8"/>
+		<field name="GL_UNSIGNED_INT_2_10_10_10_REV"/>
+		<field name="GL_UNSIGNED_INT_5_9_9_9_REV"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_ARRAY"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_3D"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE"/>
+		<field name="GL_UNSIGNED_INT_VEC2"/>
+		<field name="GL_UNSIGNED_INT_VEC3"/>
+		<field name="GL_UNSIGNED_INT_VEC4"/>
+		<field name="GL_UNSIGNED_NORMALIZED"/>
+		<field name="GL_VERTEX_ARRAY_BINDING"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_DIVISOR"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_INTEGER"/>
+		<field name="GL_WAIT_FAILED"/>
+	</class>
+	<class name="android/opengl/GLES31" since="21">
+		<extends name="android/opengl/GLES30"/>
+		<method name="glActiveShaderProgram(II)V"/>
+		<method name="glBindImageTexture(IIIZIII)V"/>
+		<method name="glBindProgramPipeline(I)V"/>
+		<method name="glBindVertexBuffer(IIJI)V"/>
+		<method name="glCreateShaderProgramv(I[Ljava/lang/String;)I"/>
+		<method name="glDeleteProgramPipelines(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteProgramPipelines(I[II)V"/>
+		<method name="glDispatchCompute(III)V"/>
+		<method name="glDispatchComputeIndirect(J)V"/>
+		<method name="glDrawArraysIndirect(IJ)V"/>
+		<method name="glDrawElementsIndirect(IIJ)V"/>
+		<method name="glFramebufferParameteri(III)V"/>
+		<method name="glGenProgramPipelines(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenProgramPipelines(I[II)V"/>
+		<method name="glGetBooleani_v(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetBooleani_v(II[ZI)V"/>
+		<method name="glGetFramebufferParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetFramebufferParameteriv(II[II)V"/>
+		<method name="glGetMultisamplefv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetMultisamplefv(II[FI)V"/>
+		<method name="glGetProgramInterfaceiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetProgramInterfaceiv(III[II)V"/>
+		<method name="glGetProgramPipelineInfoLog(I)Ljava/lang/String;"/>
+		<method name="glGetProgramPipelineiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetProgramPipelineiv(II[II)V"/>
+		<method name="glGetProgramResourceIndex(IILjava/lang/String;)I"/>
+		<method name="glGetProgramResourceLocation(IILjava/lang/String;)I"/>
+		<method name="glGetProgramResourceName(III)Ljava/lang/String;"/>
+		<method name="glGetProgramResourceiv(IIIILjava/nio/IntBuffer;ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;)V"/>
+		<method name="glGetProgramResourceiv(IIII[III[II[II)V"/>
+		<method name="glGetTexLevelParameterfv(IIILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetTexLevelParameterfv(III[FI)V"/>
+		<method name="glGetTexLevelParameteriv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexLevelParameteriv(III[II)V"/>
+		<method name="glIsProgramPipeline(I)Z"/>
+		<method name="glMemoryBarrier(I)V"/>
+		<method name="glMemoryBarrierByRegion(I)V"/>
+		<method name="glProgramUniform1f(IIF)V"/>
+		<method name="glProgramUniform1fv(IIILjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniform1fv(III[FI)V"/>
+		<method name="glProgramUniform1i(III)V"/>
+		<method name="glProgramUniform1iv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform1iv(III[II)V"/>
+		<method name="glProgramUniform1ui(III)V"/>
+		<method name="glProgramUniform1uiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform1uiv(III[II)V"/>
+		<method name="glProgramUniform2f(IIFF)V"/>
+		<method name="glProgramUniform2fv(IIILjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniform2fv(III[FI)V"/>
+		<method name="glProgramUniform2i(IIII)V"/>
+		<method name="glProgramUniform2iv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform2iv(III[II)V"/>
+		<method name="glProgramUniform2ui(IIII)V"/>
+		<method name="glProgramUniform2uiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform2uiv(III[II)V"/>
+		<method name="glProgramUniform3f(IIFFF)V"/>
+		<method name="glProgramUniform3fv(IIILjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniform3fv(III[FI)V"/>
+		<method name="glProgramUniform3i(IIIII)V"/>
+		<method name="glProgramUniform3iv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform3iv(III[II)V"/>
+		<method name="glProgramUniform3ui(IIIII)V"/>
+		<method name="glProgramUniform3uiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform3uiv(III[II)V"/>
+		<method name="glProgramUniform4f(IIFFFF)V"/>
+		<method name="glProgramUniform4fv(IIILjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniform4fv(III[FI)V"/>
+		<method name="glProgramUniform4i(IIIIII)V"/>
+		<method name="glProgramUniform4iv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform4iv(III[II)V"/>
+		<method name="glProgramUniform4ui(IIIIII)V"/>
+		<method name="glProgramUniform4uiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glProgramUniform4uiv(III[II)V"/>
+		<method name="glProgramUniformMatrix2fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix2fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix2x3fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix2x3fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix2x4fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix2x4fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix3fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix3fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix3x2fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix3x2fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix3x4fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix3x4fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix4fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix4fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix4x2fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix4x2fv(IIIZ[FI)V"/>
+		<method name="glProgramUniformMatrix4x3fv(IIIZLjava/nio/FloatBuffer;)V"/>
+		<method name="glProgramUniformMatrix4x3fv(IIIZ[FI)V"/>
+		<method name="glSampleMaski(II)V"/>
+		<method name="glTexStorage2DMultisample(IIIIIZ)V"/>
+		<method name="glUseProgramStages(III)V"/>
+		<method name="glValidateProgramPipeline(I)V"/>
+		<method name="glVertexAttribBinding(II)V"/>
+		<method name="glVertexAttribFormat(IIIZI)V"/>
+		<method name="glVertexAttribIFormat(IIII)V"/>
+		<method name="glVertexBindingDivisor(II)V"/>
+		<field name="GL_ACTIVE_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_ACTIVE_PROGRAM"/>
+		<field name="GL_ACTIVE_RESOURCES"/>
+		<field name="GL_ACTIVE_VARIABLES"/>
+		<field name="GL_ALL_BARRIER_BITS" since="24"/>
+		<field name="GL_ALL_SHADER_BITS"/>
+		<field name="GL_ARRAY_SIZE"/>
+		<field name="GL_ARRAY_STRIDE"/>
+		<field name="GL_ATOMIC_COUNTER_BARRIER_BIT"/>
+		<field name="GL_ATOMIC_COUNTER_BUFFER"/>
+		<field name="GL_ATOMIC_COUNTER_BUFFER_BINDING"/>
+		<field name="GL_ATOMIC_COUNTER_BUFFER_INDEX"/>
+		<field name="GL_ATOMIC_COUNTER_BUFFER_SIZE"/>
+		<field name="GL_ATOMIC_COUNTER_BUFFER_START"/>
+		<field name="GL_BLOCK_INDEX"/>
+		<field name="GL_BUFFER_BINDING"/>
+		<field name="GL_BUFFER_DATA_SIZE"/>
+		<field name="GL_BUFFER_UPDATE_BARRIER_BIT"/>
+		<field name="GL_BUFFER_VARIABLE"/>
+		<field name="GL_COMMAND_BARRIER_BIT"/>
+		<field name="GL_COMPUTE_SHADER"/>
+		<field name="GL_COMPUTE_SHADER_BIT"/>
+		<field name="GL_COMPUTE_WORK_GROUP_SIZE"/>
+		<field name="GL_DEPTH_STENCIL_TEXTURE_MODE"/>
+		<field name="GL_DISPATCH_INDIRECT_BUFFER"/>
+		<field name="GL_DISPATCH_INDIRECT_BUFFER_BINDING"/>
+		<field name="GL_DRAW_INDIRECT_BUFFER"/>
+		<field name="GL_DRAW_INDIRECT_BUFFER_BINDING"/>
+		<field name="GL_ELEMENT_ARRAY_BARRIER_BIT" since="24"/>
+		<field name="GL_FRAGMENT_SHADER_BIT"/>
+		<field name="GL_FRAMEBUFFER_BARRIER_BIT"/>
+		<field name="GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS"/>
+		<field name="GL_FRAMEBUFFER_DEFAULT_HEIGHT"/>
+		<field name="GL_FRAMEBUFFER_DEFAULT_SAMPLES"/>
+		<field name="GL_FRAMEBUFFER_DEFAULT_WIDTH"/>
+		<field name="GL_IMAGE_2D"/>
+		<field name="GL_IMAGE_2D_ARRAY"/>
+		<field name="GL_IMAGE_3D"/>
+		<field name="GL_IMAGE_BINDING_ACCESS"/>
+		<field name="GL_IMAGE_BINDING_FORMAT"/>
+		<field name="GL_IMAGE_BINDING_LAYER"/>
+		<field name="GL_IMAGE_BINDING_LAYERED"/>
+		<field name="GL_IMAGE_BINDING_LEVEL"/>
+		<field name="GL_IMAGE_BINDING_NAME"/>
+		<field name="GL_IMAGE_CUBE"/>
+		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS"/>
+		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE"/>
+		<field name="GL_IMAGE_FORMAT_COMPATIBILITY_TYPE"/>
+		<field name="GL_INT_IMAGE_2D"/>
+		<field name="GL_INT_IMAGE_2D_ARRAY"/>
+		<field name="GL_INT_IMAGE_3D"/>
+		<field name="GL_INT_IMAGE_CUBE"/>
+		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE"/>
+		<field name="GL_IS_ROW_MAJOR"/>
+		<field name="GL_LOCATION"/>
+		<field name="GL_MATRIX_STRIDE"/>
+		<field name="GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS"/>
+		<field name="GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE"/>
+		<field name="GL_MAX_COLOR_TEXTURE_SAMPLES"/>
+		<field name="GL_MAX_COMBINED_ATOMIC_COUNTERS"/>
+		<field name="GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_COMBINED_IMAGE_UNIFORMS"/>
+		<field name="GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES"/>
+		<field name="GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS"/>
+		<field name="GL_MAX_COMPUTE_ATOMIC_COUNTERS"/>
+		<field name="GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_MAX_COMPUTE_IMAGE_UNIFORMS"/>
+		<field name="GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS"/>
+		<field name="GL_MAX_COMPUTE_SHARED_MEMORY_SIZE"/>
+		<field name="GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS"/>
+		<field name="GL_MAX_COMPUTE_UNIFORM_BLOCKS"/>
+		<field name="GL_MAX_COMPUTE_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_COMPUTE_WORK_GROUP_COUNT"/>
+		<field name="GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS"/>
+		<field name="GL_MAX_COMPUTE_WORK_GROUP_SIZE"/>
+		<field name="GL_MAX_DEPTH_TEXTURE_SAMPLES"/>
+		<field name="GL_MAX_FRAGMENT_ATOMIC_COUNTERS"/>
+		<field name="GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_MAX_FRAGMENT_IMAGE_UNIFORMS"/>
+		<field name="GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS"/>
+		<field name="GL_MAX_FRAMEBUFFER_HEIGHT"/>
+		<field name="GL_MAX_FRAMEBUFFER_SAMPLES"/>
+		<field name="GL_MAX_FRAMEBUFFER_WIDTH"/>
+		<field name="GL_MAX_IMAGE_UNITS"/>
+		<field name="GL_MAX_INTEGER_SAMPLES"/>
+		<field name="GL_MAX_NAME_LENGTH"/>
+		<field name="GL_MAX_NUM_ACTIVE_VARIABLES"/>
+		<field name="GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET"/>
+		<field name="GL_MAX_SAMPLE_MASK_WORDS"/>
+		<field name="GL_MAX_SHADER_STORAGE_BLOCK_SIZE"/>
+		<field name="GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS"/>
+		<field name="GL_MAX_UNIFORM_LOCATIONS"/>
+		<field name="GL_MAX_VERTEX_ATOMIC_COUNTERS"/>
+		<field name="GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_MAX_VERTEX_ATTRIB_BINDINGS"/>
+		<field name="GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET"/>
+		<field name="GL_MAX_VERTEX_ATTRIB_STRIDE"/>
+		<field name="GL_MAX_VERTEX_IMAGE_UNIFORMS"/>
+		<field name="GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS"/>
+		<field name="GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET"/>
+		<field name="GL_NAME_LENGTH"/>
+		<field name="GL_NUM_ACTIVE_VARIABLES"/>
+		<field name="GL_OFFSET"/>
+		<field name="GL_PIXEL_BUFFER_BARRIER_BIT"/>
+		<field name="GL_PROGRAM_INPUT"/>
+		<field name="GL_PROGRAM_OUTPUT"/>
+		<field name="GL_PROGRAM_PIPELINE_BINDING"/>
+		<field name="GL_PROGRAM_SEPARABLE"/>
+		<field name="GL_READ_ONLY"/>
+		<field name="GL_READ_WRITE"/>
+		<field name="GL_REFERENCED_BY_COMPUTE_SHADER"/>
+		<field name="GL_REFERENCED_BY_FRAGMENT_SHADER"/>
+		<field name="GL_REFERENCED_BY_VERTEX_SHADER"/>
+		<field name="GL_SAMPLER_2D_MULTISAMPLE"/>
+		<field name="GL_SAMPLE_MASK"/>
+		<field name="GL_SAMPLE_MASK_VALUE"/>
+		<field name="GL_SAMPLE_POSITION"/>
+		<field name="GL_SHADER_IMAGE_ACCESS_BARRIER_BIT" since="24"/>
+		<field name="GL_SHADER_STORAGE_BARRIER_BIT"/>
+		<field name="GL_SHADER_STORAGE_BLOCK"/>
+		<field name="GL_SHADER_STORAGE_BUFFER"/>
+		<field name="GL_SHADER_STORAGE_BUFFER_BINDING"/>
+		<field name="GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT"/>
+		<field name="GL_SHADER_STORAGE_BUFFER_SIZE"/>
+		<field name="GL_SHADER_STORAGE_BUFFER_START"/>
+		<field name="GL_STENCIL_INDEX"/>
+		<field name="GL_TEXTURE_2D_MULTISAMPLE"/>
+		<field name="GL_TEXTURE_ALPHA_SIZE"/>
+		<field name="GL_TEXTURE_ALPHA_TYPE"/>
+		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE"/>
+		<field name="GL_TEXTURE_BLUE_SIZE"/>
+		<field name="GL_TEXTURE_BLUE_TYPE"/>
+		<field name="GL_TEXTURE_COMPRESSED"/>
+		<field name="GL_TEXTURE_DEPTH"/>
+		<field name="GL_TEXTURE_DEPTH_SIZE"/>
+		<field name="GL_TEXTURE_DEPTH_TYPE"/>
+		<field name="GL_TEXTURE_FETCH_BARRIER_BIT"/>
+		<field name="GL_TEXTURE_FIXED_SAMPLE_LOCATIONS"/>
+		<field name="GL_TEXTURE_GREEN_SIZE"/>
+		<field name="GL_TEXTURE_GREEN_TYPE"/>
+		<field name="GL_TEXTURE_HEIGHT"/>
+		<field name="GL_TEXTURE_INTERNAL_FORMAT"/>
+		<field name="GL_TEXTURE_RED_SIZE"/>
+		<field name="GL_TEXTURE_RED_TYPE"/>
+		<field name="GL_TEXTURE_SAMPLES"/>
+		<field name="GL_TEXTURE_SHARED_SIZE"/>
+		<field name="GL_TEXTURE_STENCIL_SIZE"/>
+		<field name="GL_TEXTURE_UPDATE_BARRIER_BIT"/>
+		<field name="GL_TEXTURE_WIDTH"/>
+		<field name="GL_TOP_LEVEL_ARRAY_SIZE"/>
+		<field name="GL_TOP_LEVEL_ARRAY_STRIDE"/>
+		<field name="GL_TRANSFORM_FEEDBACK_BARRIER_BIT"/>
+		<field name="GL_TRANSFORM_FEEDBACK_VARYING"/>
+		<field name="GL_TYPE"/>
+		<field name="GL_UNIFORM"/>
+		<field name="GL_UNIFORM_BARRIER_BIT"/>
+		<field name="GL_UNIFORM_BLOCK"/>
+		<field name="GL_UNSIGNED_INT_ATOMIC_COUNTER"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_2D"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_2D_ARRAY"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_3D"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_CUBE"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE"/>
+		<field name="GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT" since="24"/>
+		<field name="GL_VERTEX_ATTRIB_BINDING"/>
+		<field name="GL_VERTEX_ATTRIB_RELATIVE_OFFSET"/>
+		<field name="GL_VERTEX_BINDING_BUFFER"/>
+		<field name="GL_VERTEX_BINDING_DIVISOR"/>
+		<field name="GL_VERTEX_BINDING_OFFSET"/>
+		<field name="GL_VERTEX_BINDING_STRIDE"/>
+		<field name="GL_VERTEX_SHADER_BIT"/>
+		<field name="GL_WRITE_ONLY"/>
+	</class>
+	<class name="android/opengl/GLES31Ext" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="glBlendBarrierKHR()V"/>
+		<method name="glBlendEquationSeparateiEXT(III)V"/>
+		<method name="glBlendEquationiEXT(II)V"/>
+		<method name="glBlendFuncSeparateiEXT(IIIII)V"/>
+		<method name="glBlendFunciEXT(III)V"/>
+		<method name="glColorMaskiEXT(IZZZZ)V"/>
+		<method name="glCopyImageSubDataEXT(IIIIIIIIIIIIIII)V"/>
+		<method name="glDebugMessageCallbackKHR(Landroid/opengl/GLES31Ext$DebugProcKHR;)V"/>
+		<method name="glDebugMessageControlKHR(IIIILjava/nio/IntBuffer;Z)V"/>
+		<method name="glDebugMessageControlKHR(IIII[IIZ)V"/>
+		<method name="glDebugMessageInsertKHR(IIIILjava/lang/String;)V"/>
+		<method name="glDisableiEXT(II)V"/>
+		<method name="glEnableiEXT(II)V"/>
+		<method name="glFramebufferTextureEXT(IIII)V"/>
+		<method name="glGetDebugMessageCallbackKHR()Landroid/opengl/GLES31Ext$DebugProcKHR;"/>
+		<method name="glGetDebugMessageLogKHR(II[II[II[II[II[II[BI)I"/>
+		<method name="glGetDebugMessageLogKHR(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;"/>
+		<method name="glGetDebugMessageLogKHR(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I"/>
+		<method name="glGetDebugMessageLogKHR(I[II[II[II[II)[Ljava/lang/String;"/>
+		<method name="glGetObjectLabelKHR(II)Ljava/lang/String;"/>
+		<method name="glGetObjectPtrLabelKHR(J)Ljava/lang/String;"/>
+		<method name="glGetSamplerParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetSamplerParameterIivEXT(II[II)V"/>
+		<method name="glGetSamplerParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetSamplerParameterIuivEXT(II[II)V"/>
+		<method name="glGetTexParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameterIivEXT(II[II)V"/>
+		<method name="glGetTexParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameterIuivEXT(II[II)V"/>
+		<method name="glIsEnablediEXT(II)Z"/>
+		<method name="glMinSampleShadingOES(F)V"/>
+		<method name="glObjectLabelKHR(IIILjava/lang/String;)V"/>
+		<method name="glObjectPtrLabelKHR(JLjava/lang/String;)V"/>
+		<method name="glPatchParameteriEXT(II)V"/>
+		<method name="glPopDebugGroupKHR()V"/>
+		<method name="glPrimitiveBoundingBoxEXT(FFFFFFFF)V"/>
+		<method name="glPushDebugGroupKHR(IIILjava/lang/String;)V"/>
+		<method name="glSamplerParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glSamplerParameterIivEXT(II[II)V"/>
+		<method name="glSamplerParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glSamplerParameterIuivEXT(II[II)V"/>
+		<method name="glTexBufferEXT(III)V"/>
+		<method name="glTexBufferRangeEXT(IIIII)V"/>
+		<method name="glTexParameterIivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameterIivEXT(II[II)V"/>
+		<method name="glTexParameterIuivEXT(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameterIuivEXT(II[II)V"/>
+		<method name="glTexStorage3DMultisampleOES(IIIIIIZ)V"/>
+		<field name="GL_BLEND_ADVANCED_COHERENT_KHR"/>
+		<field name="GL_BUFFER_KHR"/>
+		<field name="GL_CLAMP_TO_BORDER_EXT"/>
+		<field name="GL_COLORBURN_KHR"/>
+		<field name="GL_COLORDODGE_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x10_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x5_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x6_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x8_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x10_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x12_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_4x4_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x4_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x5_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x5_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x6_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x5_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x6_KHR"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x8_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR"/>
+		<field name="GL_CONTEXT_FLAG_DEBUG_BIT_KHR"/>
+		<field name="GL_DARKEN_KHR"/>
+		<field name="GL_DEBUG_CALLBACK_FUNCTION_KHR"/>
+		<field name="GL_DEBUG_CALLBACK_USER_PARAM_KHR"/>
+		<field name="GL_DEBUG_GROUP_STACK_DEPTH_KHR"/>
+		<field name="GL_DEBUG_LOGGED_MESSAGES_KHR"/>
+		<field name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR"/>
+		<field name="GL_DEBUG_OUTPUT_KHR"/>
+		<field name="GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR"/>
+		<field name="GL_DEBUG_SEVERITY_HIGH_KHR"/>
+		<field name="GL_DEBUG_SEVERITY_LOW_KHR"/>
+		<field name="GL_DEBUG_SEVERITY_MEDIUM_KHR"/>
+		<field name="GL_DEBUG_SEVERITY_NOTIFICATION_KHR"/>
+		<field name="GL_DEBUG_SOURCE_API_KHR"/>
+		<field name="GL_DEBUG_SOURCE_APPLICATION_KHR"/>
+		<field name="GL_DEBUG_SOURCE_OTHER_KHR"/>
+		<field name="GL_DEBUG_SOURCE_SHADER_COMPILER_KHR"/>
+		<field name="GL_DEBUG_SOURCE_THIRD_PARTY_KHR"/>
+		<field name="GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR"/>
+		<field name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR"/>
+		<field name="GL_DEBUG_TYPE_ERROR_KHR"/>
+		<field name="GL_DEBUG_TYPE_MARKER_KHR"/>
+		<field name="GL_DEBUG_TYPE_OTHER_KHR"/>
+		<field name="GL_DEBUG_TYPE_PERFORMANCE_KHR"/>
+		<field name="GL_DEBUG_TYPE_POP_GROUP_KHR"/>
+		<field name="GL_DEBUG_TYPE_PORTABILITY_KHR"/>
+		<field name="GL_DEBUG_TYPE_PUSH_GROUP_KHR"/>
+		<field name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR"/>
+		<field name="GL_DECODE_EXT"/>
+		<field name="GL_DIFFERENCE_KHR"/>
+		<field name="GL_EXCLUSION_KHR"/>
+		<field name="GL_FIRST_VERTEX_CONVENTION_EXT"/>
+		<field name="GL_FRACTIONAL_EVEN_EXT"/>
+		<field name="GL_FRACTIONAL_ODD_EXT"/>
+		<field name="GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT"/>
+		<field name="GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT"/>
+		<field name="GL_GEOMETRY_LINKED_INPUT_TYPE_EXT"/>
+		<field name="GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT"/>
+		<field name="GL_GEOMETRY_LINKED_VERTICES_OUT_EXT"/>
+		<field name="GL_GEOMETRY_SHADER_BIT_EXT"/>
+		<field name="GL_GEOMETRY_SHADER_EXT"/>
+		<field name="GL_GEOMETRY_SHADER_INVOCATIONS_EXT"/>
+		<field name="GL_HARDLIGHT_KHR"/>
+		<field name="GL_HSL_COLOR_KHR"/>
+		<field name="GL_HSL_HUE_KHR"/>
+		<field name="GL_HSL_LUMINOSITY_KHR"/>
+		<field name="GL_HSL_SATURATION_KHR"/>
+		<field name="GL_IMAGE_BUFFER_EXT"/>
+		<field name="GL_IMAGE_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_INT_IMAGE_BUFFER_EXT"/>
+		<field name="GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES"/>
+		<field name="GL_INT_SAMPLER_BUFFER_EXT"/>
+		<field name="GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_ISOLINES_EXT"/>
+		<field name="GL_IS_PER_PATCH_EXT"/>
+		<field name="GL_LAST_VERTEX_CONVENTION_EXT"/>
+		<field name="GL_LAYER_PROVOKING_VERTEX_EXT"/>
+		<field name="GL_LIGHTEN_KHR"/>
+		<field name="GL_LINES_ADJACENCY_EXT"/>
+		<field name="GL_LINE_STRIP_ADJACENCY_EXT"/>
+		<field name="GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT"/>
+		<field name="GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT"/>
+		<field name="GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT"/>
+		<field name="GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR"/>
+		<field name="GL_MAX_DEBUG_LOGGED_MESSAGES_KHR"/>
+		<field name="GL_MAX_DEBUG_MESSAGE_LENGTH_KHR"/>
+		<field name="GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES"/>
+		<field name="GL_MAX_FRAMEBUFFER_LAYERS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT"/>
+		<field name="GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT"/>
+		<field name="GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT"/>
+		<field name="GL_MAX_LABEL_LENGTH_KHR"/>
+		<field name="GL_MAX_PATCH_VERTICES_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT"/>
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT"/>
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TESS_GEN_LEVEL_EXT"/>
+		<field name="GL_MAX_TESS_PATCH_COMPONENTS_EXT"/>
+		<field name="GL_MAX_TEXTURE_BUFFER_SIZE_EXT"/>
+		<field name="GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES"/>
+		<field name="GL_MIN_SAMPLE_SHADING_VALUE_OES"/>
+		<field name="GL_MULTIPLY_KHR"/>
+		<field name="GL_OVERLAY_KHR"/>
+		<field name="GL_PATCHES_EXT"/>
+		<field name="GL_PATCH_VERTICES_EXT"/>
+		<field name="GL_PRIMITIVES_GENERATED_EXT"/>
+		<field name="GL_PRIMITIVE_BOUNDING_BOX_EXT"/>
+		<field name="GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"/>
+		<field name="GL_PROGRAM_KHR"/>
+		<field name="GL_QUADS_EXT"/>
+		<field name="GL_QUERY_KHR"/>
+		<field name="GL_REFERENCED_BY_GEOMETRY_SHADER_EXT"/>
+		<field name="GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT"/>
+		<field name="GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT"/>
+		<field name="GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES"/>
+		<field name="GL_SAMPLER_BUFFER_EXT"/>
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT"/>
+		<field name="GL_SAMPLER_KHR"/>
+		<field name="GL_SAMPLE_SHADING_OES"/>
+		<field name="GL_SCREEN_KHR"/>
+		<field name="GL_SHADER_KHR"/>
+		<field name="GL_SKIP_DECODE_EXT"/>
+		<field name="GL_SOFTLIGHT_KHR"/>
+		<field name="GL_STACK_OVERFLOW_KHR"/>
+		<field name="GL_STACK_UNDERFLOW_KHR"/>
+		<field name="GL_STENCIL_INDEX8_OES"/>
+		<field name="GL_STENCIL_INDEX_OES"/>
+		<field name="GL_TESS_CONTROL_OUTPUT_VERTICES_EXT"/>
+		<field name="GL_TESS_CONTROL_SHADER_BIT_EXT"/>
+		<field name="GL_TESS_CONTROL_SHADER_EXT"/>
+		<field name="GL_TESS_EVALUATION_SHADER_BIT_EXT"/>
+		<field name="GL_TESS_EVALUATION_SHADER_EXT"/>
+		<field name="GL_TESS_GEN_MODE_EXT"/>
+		<field name="GL_TESS_GEN_POINT_MODE_EXT"/>
+		<field name="GL_TESS_GEN_SPACING_EXT"/>
+		<field name="GL_TESS_GEN_VERTEX_ORDER_EXT"/>
+		<field name="GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES"/>
+		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES"/>
+		<field name="GL_TEXTURE_BINDING_BUFFER_EXT"/>
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_TEXTURE_BORDER_COLOR_EXT"/>
+		<field name="GL_TEXTURE_BUFFER_BINDING_EXT"/>
+		<field name="GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT"/>
+		<field name="GL_TEXTURE_BUFFER_EXT"/>
+		<field name="GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT"/>
+		<field name="GL_TEXTURE_BUFFER_OFFSET_EXT"/>
+		<field name="GL_TEXTURE_BUFFER_SIZE_EXT"/>
+		<field name="GL_TEXTURE_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_TEXTURE_SRGB_DECODE_EXT"/>
+		<field name="GL_TRIANGLES_ADJACENCY_EXT"/>
+		<field name="GL_TRIANGLE_STRIP_ADJACENCY_EXT"/>
+		<field name="GL_UNDEFINED_VERTEX_EXT"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_BUFFER_EXT"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT"/>
+		<field name="GL_VERTEX_ARRAY_KHR"/>
+	</class>
+	<class name="android/opengl/GLES31Ext$DebugProcKHR" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="onMessage(IIIILjava/lang/String;)V"/>
+	</class>
+	<class name="android/opengl/GLES32" since="24">
+		<extends name="android/opengl/GLES31"/>
+		<method name="glBlendBarrier()V"/>
+		<method name="glBlendEquationSeparatei(III)V"/>
+		<method name="glBlendEquationi(II)V"/>
+		<method name="glBlendFuncSeparatei(IIIII)V"/>
+		<method name="glBlendFunci(III)V"/>
+		<method name="glColorMaski(IZZZZ)V"/>
+		<method name="glCopyImageSubData(IIIIIIIIIIIIIII)V"/>
+		<method name="glDebugMessageCallback(Landroid/opengl/GLES32$DebugProc;)V"/>
+		<method name="glDebugMessageControl(IIIILjava/nio/IntBuffer;Z)V"/>
+		<method name="glDebugMessageControl(IIII[IIZ)V"/>
+		<method name="glDebugMessageInsert(IIIIILjava/lang/String;)V"/>
+		<method name="glDisablei(II)V"/>
+		<method name="glDrawElementsBaseVertex(IIILjava/nio/Buffer;I)V"/>
+		<method name="glDrawElementsInstancedBaseVertex(IIIIII)V"/>
+		<method name="glDrawElementsInstancedBaseVertex(IIILjava/nio/Buffer;II)V"/>
+		<method name="glDrawRangeElementsBaseVertex(IIIIILjava/nio/Buffer;I)V"/>
+		<method name="glEnablei(II)V"/>
+		<method name="glFramebufferTexture(IIII)V"/>
+		<method name="glGetDebugMessageLog(II[II[II[II[II[II[BI)I"/>
+		<method name="glGetDebugMessageLog(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)[Ljava/lang/String;"/>
+		<method name="glGetDebugMessageLog(ILjava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;Ljava/nio/ByteBuffer;)I"/>
+		<method name="glGetDebugMessageLog(I[II[II[II[II)[Ljava/lang/String;"/>
+		<method name="glGetGraphicsResetStatus()I"/>
+		<method name="glGetObjectLabel(II)Ljava/lang/String;"/>
+		<method name="glGetObjectPtrLabel(J)Ljava/lang/String;"/>
+		<method name="glGetPointerv(I)J"/>
+		<method name="glGetSamplerParameterIiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetSamplerParameterIiv(II[II)V"/>
+		<method name="glGetSamplerParameterIuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetSamplerParameterIuiv(II[II)V"/>
+		<method name="glGetTexParameterIiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameterIiv(II[II)V"/>
+		<method name="glGetTexParameterIuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameterIuiv(II[II)V"/>
+		<method name="glGetnUniformfv(IIILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetnUniformfv(III[FI)V"/>
+		<method name="glGetnUniformiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetnUniformiv(III[II)V"/>
+		<method name="glGetnUniformuiv(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetnUniformuiv(III[II)V"/>
+		<method name="glIsEnabledi(II)Z"/>
+		<method name="glMinSampleShading(F)V"/>
+		<method name="glObjectLabel(IIILjava/lang/String;)V"/>
+		<method name="glObjectPtrLabel(JLjava/lang/String;)V"/>
+		<method name="glPatchParameteri(II)V"/>
+		<method name="glPopDebugGroup()V"/>
+		<method name="glPrimitiveBoundingBox(FFFFFFFF)V"/>
+		<method name="glPushDebugGroup(IIILjava/lang/String;)V"/>
+		<method name="glReadnPixels(IIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glSamplerParameterIiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glSamplerParameterIiv(II[II)V"/>
+		<method name="glSamplerParameterIuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glSamplerParameterIuiv(II[II)V"/>
+		<method name="glTexBuffer(III)V"/>
+		<method name="glTexBufferRange(IIIII)V"/>
+		<method name="glTexParameterIiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameterIiv(II[II)V"/>
+		<method name="glTexParameterIuiv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameterIuiv(II[II)V"/>
+		<method name="glTexStorage3DMultisample(IIIIIIZ)V"/>
+		<field name="GL_BUFFER"/>
+		<field name="GL_CLAMP_TO_BORDER"/>
+		<field name="GL_COLORBURN"/>
+		<field name="GL_COLORDODGE"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x10"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x5"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x6"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_10x8"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x10"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_12x12"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_4x4"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x4"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_5x5"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x5"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_6x6"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x5"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x6"/>
+		<field name="GL_COMPRESSED_RGBA_ASTC_8x8"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6"/>
+		<field name="GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8"/>
+		<field name="GL_CONTEXT_FLAGS"/>
+		<field name="GL_CONTEXT_FLAG_DEBUG_BIT"/>
+		<field name="GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT"/>
+		<field name="GL_CONTEXT_LOST"/>
+		<field name="GL_DARKEN"/>
+		<field name="GL_DEBUG_CALLBACK_FUNCTION"/>
+		<field name="GL_DEBUG_CALLBACK_USER_PARAM"/>
+		<field name="GL_DEBUG_GROUP_STACK_DEPTH"/>
+		<field name="GL_DEBUG_LOGGED_MESSAGES"/>
+		<field name="GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH"/>
+		<field name="GL_DEBUG_OUTPUT"/>
+		<field name="GL_DEBUG_OUTPUT_SYNCHRONOUS"/>
+		<field name="GL_DEBUG_SEVERITY_HIGH"/>
+		<field name="GL_DEBUG_SEVERITY_LOW"/>
+		<field name="GL_DEBUG_SEVERITY_MEDIUM"/>
+		<field name="GL_DEBUG_SEVERITY_NOTIFICATION"/>
+		<field name="GL_DEBUG_SOURCE_API"/>
+		<field name="GL_DEBUG_SOURCE_APPLICATION"/>
+		<field name="GL_DEBUG_SOURCE_OTHER"/>
+		<field name="GL_DEBUG_SOURCE_SHADER_COMPILER"/>
+		<field name="GL_DEBUG_SOURCE_THIRD_PARTY"/>
+		<field name="GL_DEBUG_SOURCE_WINDOW_SYSTEM"/>
+		<field name="GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR"/>
+		<field name="GL_DEBUG_TYPE_ERROR"/>
+		<field name="GL_DEBUG_TYPE_MARKER"/>
+		<field name="GL_DEBUG_TYPE_OTHER"/>
+		<field name="GL_DEBUG_TYPE_PERFORMANCE"/>
+		<field name="GL_DEBUG_TYPE_POP_GROUP"/>
+		<field name="GL_DEBUG_TYPE_PORTABILITY"/>
+		<field name="GL_DEBUG_TYPE_PUSH_GROUP"/>
+		<field name="GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR"/>
+		<field name="GL_DIFFERENCE"/>
+		<field name="GL_EXCLUSION"/>
+		<field name="GL_FIRST_VERTEX_CONVENTION"/>
+		<field name="GL_FRACTIONAL_EVEN"/>
+		<field name="GL_FRACTIONAL_ODD"/>
+		<field name="GL_FRAGMENT_INTERPOLATION_OFFSET_BITS"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_LAYERED"/>
+		<field name="GL_FRAMEBUFFER_DEFAULT_LAYERS"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS"/>
+		<field name="GL_GEOMETRY_INPUT_TYPE"/>
+		<field name="GL_GEOMETRY_OUTPUT_TYPE"/>
+		<field name="GL_GEOMETRY_SHADER"/>
+		<field name="GL_GEOMETRY_SHADER_BIT"/>
+		<field name="GL_GEOMETRY_SHADER_INVOCATIONS"/>
+		<field name="GL_GEOMETRY_VERTICES_OUT"/>
+		<field name="GL_GUILTY_CONTEXT_RESET"/>
+		<field name="GL_HARDLIGHT"/>
+		<field name="GL_HSL_COLOR"/>
+		<field name="GL_HSL_HUE"/>
+		<field name="GL_HSL_LUMINOSITY"/>
+		<field name="GL_HSL_SATURATION"/>
+		<field name="GL_IMAGE_BUFFER"/>
+		<field name="GL_IMAGE_CUBE_MAP_ARRAY"/>
+		<field name="GL_INNOCENT_CONTEXT_RESET"/>
+		<field name="GL_INT_IMAGE_BUFFER"/>
+		<field name="GL_INT_IMAGE_CUBE_MAP_ARRAY"/>
+		<field name="GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY"/>
+		<field name="GL_INT_SAMPLER_BUFFER"/>
+		<field name="GL_INT_SAMPLER_CUBE_MAP_ARRAY"/>
+		<field name="GL_ISOLINES"/>
+		<field name="GL_IS_PER_PATCH"/>
+		<field name="GL_LAST_VERTEX_CONVENTION"/>
+		<field name="GL_LAYER_PROVOKING_VERTEX"/>
+		<field name="GL_LIGHTEN"/>
+		<field name="GL_LINES_ADJACENCY"/>
+		<field name="GL_LINE_STRIP_ADJACENCY"/>
+		<field name="GL_LOSE_CONTEXT_ON_RESET"/>
+		<field name="GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_DEBUG_GROUP_STACK_DEPTH"/>
+		<field name="GL_MAX_DEBUG_LOGGED_MESSAGES"/>
+		<field name="GL_MAX_DEBUG_MESSAGE_LENGTH"/>
+		<field name="GL_MAX_FRAGMENT_INTERPOLATION_OFFSET"/>
+		<field name="GL_MAX_FRAMEBUFFER_LAYERS"/>
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTERS"/>
+		<field name="GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_MAX_GEOMETRY_IMAGE_UNIFORMS"/>
+		<field name="GL_MAX_GEOMETRY_INPUT_COMPONENTS"/>
+		<field name="GL_MAX_GEOMETRY_OUTPUT_COMPONENTS"/>
+		<field name="GL_MAX_GEOMETRY_OUTPUT_VERTICES"/>
+		<field name="GL_MAX_GEOMETRY_SHADER_INVOCATIONS"/>
+		<field name="GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS"/>
+		<field name="GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS"/>
+		<field name="GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS"/>
+		<field name="GL_MAX_GEOMETRY_UNIFORM_BLOCKS"/>
+		<field name="GL_MAX_GEOMETRY_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_LABEL_LENGTH"/>
+		<field name="GL_MAX_PATCH_VERTICES"/>
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS"/>
+		<field name="GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS"/>
+		<field name="GL_MAX_TESS_CONTROL_INPUT_COMPONENTS"/>
+		<field name="GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS"/>
+		<field name="GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS"/>
+		<field name="GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS"/>
+		<field name="GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS"/>
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS"/>
+		<field name="GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS"/>
+		<field name="GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS"/>
+		<field name="GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS"/>
+		<field name="GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS"/>
+		<field name="GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS"/>
+		<field name="GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS"/>
+		<field name="GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS"/>
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS"/>
+		<field name="GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS"/>
+		<field name="GL_MAX_TESS_GEN_LEVEL"/>
+		<field name="GL_MAX_TESS_PATCH_COMPONENTS"/>
+		<field name="GL_MAX_TEXTURE_BUFFER_SIZE"/>
+		<field name="GL_MIN_FRAGMENT_INTERPOLATION_OFFSET"/>
+		<field name="GL_MIN_SAMPLE_SHADING_VALUE"/>
+		<field name="GL_MULTIPLY"/>
+		<field name="GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY"/>
+		<field name="GL_MULTISAMPLE_LINE_WIDTH_RANGE"/>
+		<field name="GL_NO_RESET_NOTIFICATION"/>
+		<field name="GL_OVERLAY"/>
+		<field name="GL_PATCHES"/>
+		<field name="GL_PATCH_VERTICES"/>
+		<field name="GL_PRIMITIVES_GENERATED"/>
+		<field name="GL_PRIMITIVE_BOUNDING_BOX"/>
+		<field name="GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED"/>
+		<field name="GL_PROGRAM"/>
+		<field name="GL_PROGRAM_PIPELINE"/>
+		<field name="GL_QUADS"/>
+		<field name="GL_QUERY"/>
+		<field name="GL_REFERENCED_BY_GEOMETRY_SHADER"/>
+		<field name="GL_REFERENCED_BY_TESS_CONTROL_SHADER"/>
+		<field name="GL_REFERENCED_BY_TESS_EVALUATION_SHADER"/>
+		<field name="GL_RESET_NOTIFICATION_STRATEGY"/>
+		<field name="GL_SAMPLER"/>
+		<field name="GL_SAMPLER_2D_MULTISAMPLE_ARRAY"/>
+		<field name="GL_SAMPLER_BUFFER"/>
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY"/>
+		<field name="GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW"/>
+		<field name="GL_SAMPLE_SHADING"/>
+		<field name="GL_SCREEN"/>
+		<field name="GL_SHADER"/>
+		<field name="GL_SOFTLIGHT"/>
+		<field name="GL_STACK_OVERFLOW"/>
+		<field name="GL_STACK_UNDERFLOW"/>
+		<field name="GL_TESS_CONTROL_OUTPUT_VERTICES"/>
+		<field name="GL_TESS_CONTROL_SHADER"/>
+		<field name="GL_TESS_CONTROL_SHADER_BIT"/>
+		<field name="GL_TESS_EVALUATION_SHADER"/>
+		<field name="GL_TESS_EVALUATION_SHADER_BIT"/>
+		<field name="GL_TESS_GEN_MODE"/>
+		<field name="GL_TESS_GEN_POINT_MODE"/>
+		<field name="GL_TESS_GEN_SPACING"/>
+		<field name="GL_TESS_GEN_VERTEX_ORDER"/>
+		<field name="GL_TEXTURE_2D_MULTISAMPLE_ARRAY"/>
+		<field name="GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY"/>
+		<field name="GL_TEXTURE_BINDING_BUFFER"/>
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP_ARRAY"/>
+		<field name="GL_TEXTURE_BORDER_COLOR"/>
+		<field name="GL_TEXTURE_BUFFER"/>
+		<field name="GL_TEXTURE_BUFFER_BINDING"/>
+		<field name="GL_TEXTURE_BUFFER_DATA_STORE_BINDING"/>
+		<field name="GL_TEXTURE_BUFFER_OFFSET"/>
+		<field name="GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT"/>
+		<field name="GL_TEXTURE_BUFFER_SIZE"/>
+		<field name="GL_TEXTURE_CUBE_MAP_ARRAY"/>
+		<field name="GL_TRIANGLES_ADJACENCY"/>
+		<field name="GL_TRIANGLE_STRIP_ADJACENCY"/>
+		<field name="GL_UNDEFINED_VERTEX"/>
+		<field name="GL_UNKNOWN_CONTEXT_RESET"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_BUFFER"/>
+		<field name="GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_BUFFER"/>
+		<field name="GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY"/>
+		<field name="GL_VERTEX_ARRAY"/>
+	</class>
+	<class name="android/opengl/GLES32$DebugProc" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onMessage(IIIILjava/lang/String;)V"/>
+	</class>
+	<class name="android/opengl/GLException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+	</class>
+	<class name="android/opengl/GLSurfaceView" since="3">
+		<extends name="android/view/SurfaceView"/>
+		<implements name="android/view/SurfaceHolder$Callback" removed="24"/>
+		<implements name="android/view/SurfaceHolder$Callback2" since="24"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getDebugFlags()I"/>
+		<method name="getPreserveEGLContextOnPause()Z" since="11"/>
+		<method name="getRenderMode()I"/>
+		<method name="onPause()V"/>
+		<method name="onResume()V"/>
+		<method name="queueEvent(Ljava/lang/Runnable;)V"/>
+		<method name="requestRender()V"/>
+		<method name="setDebugFlags(I)V"/>
+		<method name="setEGLConfigChooser(IIIIII)V"/>
+		<method name="setEGLConfigChooser(Landroid/opengl/GLSurfaceView$EGLConfigChooser;)V"/>
+		<method name="setEGLConfigChooser(Z)V"/>
+		<method name="setEGLContextClientVersion(I)V" since="8"/>
+		<method name="setEGLContextFactory(Landroid/opengl/GLSurfaceView$EGLContextFactory;)V" since="5"/>
+		<method name="setEGLWindowSurfaceFactory(Landroid/opengl/GLSurfaceView$EGLWindowSurfaceFactory;)V" since="5"/>
+		<method name="setGLWrapper(Landroid/opengl/GLSurfaceView$GLWrapper;)V"/>
+		<method name="setPreserveEGLContextOnPause(Z)V" since="11"/>
+		<method name="setRenderMode(I)V"/>
+		<method name="setRenderer(Landroid/opengl/GLSurfaceView$Renderer;)V"/>
+		<field name="DEBUG_CHECK_GL_ERROR"/>
+		<field name="DEBUG_LOG_GL_CALLS"/>
+		<field name="RENDERMODE_CONTINUOUSLY"/>
+		<field name="RENDERMODE_WHEN_DIRTY"/>
+	</class>
+	<class name="android/opengl/GLSurfaceView$EGLConfigChooser" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="chooseConfig(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;)Ljavax/microedition/khronos/egl/EGLConfig;"/>
+	</class>
+	<class name="android/opengl/GLSurfaceView$EGLContextFactory" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="createContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;)Ljavax/microedition/khronos/egl/EGLContext;"/>
+		<method name="destroyContext(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)V"/>
+	</class>
+	<class name="android/opengl/GLSurfaceView$EGLWindowSurfaceFactory" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="createWindowSurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLSurface;"/>
+		<method name="destroySurface(Ljavax/microedition/khronos/egl/EGL10;Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)V"/>
+	</class>
+	<class name="android/opengl/GLSurfaceView$GLWrapper" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="wrap(Ljavax/microedition/khronos/opengles/GL;)Ljavax/microedition/khronos/opengles/GL;"/>
+	</class>
+	<class name="android/opengl/GLSurfaceView$Renderer" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onDrawFrame(Ljavax/microedition/khronos/opengles/GL10;)V"/>
+		<method name="onSurfaceChanged(Ljavax/microedition/khronos/opengles/GL10;II)V"/>
+		<method name="onSurfaceCreated(Ljavax/microedition/khronos/opengles/GL10;Ljavax/microedition/khronos/egl/EGLConfig;)V"/>
+	</class>
+	<class name="android/opengl/GLU" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="gluErrorString(I)Ljava/lang/String;"/>
+		<method name="gluLookAt(Ljavax/microedition/khronos/opengles/GL10;FFFFFFFFF)V"/>
+		<method name="gluOrtho2D(Ljavax/microedition/khronos/opengles/GL10;FFFF)V"/>
+		<method name="gluPerspective(Ljavax/microedition/khronos/opengles/GL10;FFFF)V"/>
+		<method name="gluProject(FFF[FI[FI[II[FI)I"/>
+		<method name="gluUnProject(FFF[FI[FI[II[FI)I"/>
+	</class>
+	<class name="android/opengl/GLUtils" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getEGLErrorString(I)Ljava/lang/String;" since="14"/>
+		<method name="getInternalFormat(Landroid/graphics/Bitmap;)I"/>
+		<method name="getType(Landroid/graphics/Bitmap;)I"/>
+		<method name="texImage2D(IIILandroid/graphics/Bitmap;I)V"/>
+		<method name="texImage2D(IIILandroid/graphics/Bitmap;II)V"/>
+		<method name="texImage2D(IILandroid/graphics/Bitmap;I)V"/>
+		<method name="texSubImage2D(IIIILandroid/graphics/Bitmap;)V"/>
+		<method name="texSubImage2D(IIIILandroid/graphics/Bitmap;II)V"/>
+	</class>
+	<class name="android/opengl/Matrix" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="19"/>
+		<method name="frustumM([FIFFFFFF)V"/>
+		<method name="invertM([FI[FI)Z"/>
+		<method name="length(FFF)F"/>
+		<method name="multiplyMM([FI[FI[FI)V"/>
+		<method name="multiplyMV([FI[FI[FI)V"/>
+		<method name="orthoM([FIFFFFFF)V"/>
+		<method name="perspectiveM([FIFFFF)V" since="14"/>
+		<method name="rotateM([FIFFFF)V"/>
+		<method name="rotateM([FI[FIFFFF)V"/>
+		<method name="scaleM([FIFFF)V"/>
+		<method name="scaleM([FI[FIFFF)V"/>
+		<method name="setIdentityM([FI)V"/>
+		<method name="setLookAtM([FIFFFFFFFFF)V" since="8"/>
+		<method name="setRotateEulerM([FIFFF)V"/>
+		<method name="setRotateM([FIFFFF)V"/>
+		<method name="translateM([FIFFF)V"/>
+		<method name="translateM([FI[FIFFF)V"/>
+		<method name="transposeM([FI[FI)V"/>
+	</class>
+	<class name="android/opengl/Visibility" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="computeBoundingSphere([FII[FI)V"/>
+		<method name="frustumCullSpheres([FI[FII[III)I"/>
+		<method name="visibilityTest([FI[FI[CII)I"/>
+	</class>
+	<class name="android/os/AsyncTask" since="3" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="cancel(Z)Z" deprecated="30"/>
+		<method name="doInBackground([Ljava/lang/Object;)Ljava/lang/Object;" deprecated="30"/>
+		<method name="execute(Ljava/lang/Runnable;)V" since="11" deprecated="30"/>
+		<method name="execute([Ljava/lang/Object;)Landroid/os/AsyncTask;" deprecated="30"/>
+		<method name="executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/os/AsyncTask;" since="11" deprecated="30"/>
+		<method name="get()Ljava/lang/Object;" deprecated="30"/>
+		<method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;" deprecated="30"/>
+		<method name="getStatus()Landroid/os/AsyncTask$Status;" deprecated="30"/>
+		<method name="isCancelled()Z" deprecated="30"/>
+		<method name="onCancelled()V" deprecated="30"/>
+		<method name="onCancelled(Ljava/lang/Object;)V" since="11" deprecated="30"/>
+		<method name="onPostExecute(Ljava/lang/Object;)V" deprecated="30"/>
+		<method name="onPreExecute()V" deprecated="30"/>
+		<method name="onProgressUpdate([Ljava/lang/Object;)V" deprecated="30"/>
+		<method name="publishProgress([Ljava/lang/Object;)V" deprecated="30"/>
+		<field name="SERIAL_EXECUTOR" since="11" deprecated="30"/>
+		<field name="THREAD_POOL_EXECUTOR" since="11" deprecated="30"/>
+	</class>
+	<class name="android/os/AsyncTask$Status" since="3" deprecated="30">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/os/AsyncTask$Status;"/>
+		<method name="values()[Landroid/os/AsyncTask$Status;"/>
+		<field name="FINISHED" deprecated="30"/>
+		<field name="PENDING" deprecated="30"/>
+		<field name="RUNNING" deprecated="30"/>
+	</class>
+	<class name="android/os/BadParcelableException" since="1">
+		<extends name="android/util/AndroidRuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/os/BaseBundle" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="clear()V"/>
+		<method name="containsKey(Ljava/lang/String;)Z"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getBoolean(Ljava/lang/String;)Z" since="22"/>
+		<method name="getBoolean(Ljava/lang/String;Z)Z" since="22"/>
+		<method name="getBooleanArray(Ljava/lang/String;)[Z" since="22"/>
+		<method name="getDouble(Ljava/lang/String;)D"/>
+		<method name="getDouble(Ljava/lang/String;D)D"/>
+		<method name="getDoubleArray(Ljava/lang/String;)[D"/>
+		<method name="getInt(Ljava/lang/String;)I"/>
+		<method name="getInt(Ljava/lang/String;I)I"/>
+		<method name="getIntArray(Ljava/lang/String;)[I"/>
+		<method name="getLong(Ljava/lang/String;)J"/>
+		<method name="getLong(Ljava/lang/String;J)J"/>
+		<method name="getLongArray(Ljava/lang/String;)[J"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="isEmpty()Z"/>
+		<method name="keySet()Ljava/util/Set;"/>
+		<method name="putAll(Landroid/os/PersistableBundle;)V"/>
+		<method name="putBoolean(Ljava/lang/String;Z)V" since="22"/>
+		<method name="putBooleanArray(Ljava/lang/String;[Z)V" since="22"/>
+		<method name="putDouble(Ljava/lang/String;D)V"/>
+		<method name="putDoubleArray(Ljava/lang/String;[D)V"/>
+		<method name="putInt(Ljava/lang/String;I)V"/>
+		<method name="putIntArray(Ljava/lang/String;[I)V"/>
+		<method name="putLong(Ljava/lang/String;J)V"/>
+		<method name="putLongArray(Ljava/lang/String;[J)V"/>
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="putStringArray(Ljava/lang/String;[Ljava/lang/String;)V"/>
+		<method name="remove(Ljava/lang/String;)V"/>
+		<method name="size()I"/>
+	</class>
+	<class name="android/os/BatteryManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="23"/>
+		<method name="computeChargeTimeRemaining()J" since="28"/>
+		<method name="getIntProperty(I)I" since="21"/>
+		<method name="getLongProperty(I)J" since="21"/>
+		<method name="isCharging()Z" since="23"/>
+		<field name="ACTION_CHARGING" since="23"/>
+		<field name="ACTION_DISCHARGING" since="23"/>
+		<field name="BATTERY_HEALTH_COLD" since="11"/>
+		<field name="BATTERY_HEALTH_DEAD"/>
+		<field name="BATTERY_HEALTH_GOOD"/>
+		<field name="BATTERY_HEALTH_OVERHEAT"/>
+		<field name="BATTERY_HEALTH_OVER_VOLTAGE"/>
+		<field name="BATTERY_HEALTH_UNKNOWN"/>
+		<field name="BATTERY_HEALTH_UNSPECIFIED_FAILURE"/>
+		<field name="BATTERY_PLUGGED_AC"/>
+		<field name="BATTERY_PLUGGED_USB"/>
+		<field name="BATTERY_PLUGGED_WIRELESS" since="17"/>
+		<field name="BATTERY_PROPERTY_CAPACITY" since="21"/>
+		<field name="BATTERY_PROPERTY_CHARGE_COUNTER" since="21"/>
+		<field name="BATTERY_PROPERTY_CURRENT_AVERAGE" since="21"/>
+		<field name="BATTERY_PROPERTY_CURRENT_NOW" since="21"/>
+		<field name="BATTERY_PROPERTY_ENERGY_COUNTER" since="21"/>
+		<field name="BATTERY_PROPERTY_STATUS" since="26"/>
+		<field name="BATTERY_STATUS_CHARGING"/>
+		<field name="BATTERY_STATUS_DISCHARGING"/>
+		<field name="BATTERY_STATUS_FULL"/>
+		<field name="BATTERY_STATUS_NOT_CHARGING"/>
+		<field name="BATTERY_STATUS_UNKNOWN"/>
+		<field name="EXTRA_BATTERY_LOW" since="28"/>
+		<field name="EXTRA_HEALTH" since="5"/>
+		<field name="EXTRA_ICON_SMALL" since="5"/>
+		<field name="EXTRA_LEVEL" since="5"/>
+		<field name="EXTRA_PLUGGED" since="5"/>
+		<field name="EXTRA_PRESENT" since="5"/>
+		<field name="EXTRA_SCALE" since="5"/>
+		<field name="EXTRA_STATUS" since="5"/>
+		<field name="EXTRA_TECHNOLOGY" since="5"/>
+		<field name="EXTRA_TEMPERATURE" since="5"/>
+		<field name="EXTRA_VOLTAGE" since="5"/>
+	</class>
+	<class name="android/os/Binder" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/IBinder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="29"/>
+		<method name="attachInterface(Landroid/os/IInterface;Ljava/lang/String;)V"/>
+		<method name="clearCallingIdentity()J"/>
+		<method name="clearCallingWorkSource()J" since="29"/>
+		<method name="dump(Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V"/>
+		<method name="flushPendingCommands()V"/>
+		<method name="getCallingPid()I"/>
+		<method name="getCallingUid()I"/>
+		<method name="getCallingUidOrThrow()I" since="29"/>
+		<method name="getCallingUserHandle()Landroid/os/UserHandle;" since="17"/>
+		<method name="getCallingWorkSourceUid()I" since="29"/>
+		<method name="joinThreadPool()V"/>
+		<method name="onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z"/>
+		<method name="restoreCallingIdentity(J)V"/>
+		<method name="restoreCallingWorkSource(J)V" since="29"/>
+		<method name="setCallingWorkSourceUid(I)J" since="29"/>
+	</class>
+	<class name="android/os/BugreportManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="cancelBugreport()V"/>
+		<method name="startConnectivityBugreport(Landroid/os/ParcelFileDescriptor;Ljava/util/concurrent/Executor;Landroid/os/BugreportManager$BugreportCallback;)V"/>
+	</class>
+	<class name="android/os/BugreportManager$BugreportCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onEarlyReportFinished()V"/>
+		<method name="onError(I)V"/>
+		<method name="onFinished()V"/>
+		<method name="onProgress(F)V"/>
+		<field name="BUGREPORT_ERROR_ANOTHER_REPORT_IN_PROGRESS"/>
+		<field name="BUGREPORT_ERROR_INVALID_INPUT"/>
+		<field name="BUGREPORT_ERROR_RUNTIME"/>
+		<field name="BUGREPORT_ERROR_USER_CONSENT_TIMED_OUT"/>
+		<field name="BUGREPORT_ERROR_USER_DENIED_CONSENT"/>
+	</class>
+	<class name="android/os/Build" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFingerprintedPartitions()Ljava/util/List;" since="29"/>
+		<method name="getRadioVersion()Ljava/lang/String;" since="14"/>
+		<method name="getSerial()Ljava/lang/String;" since="26"/>
+		<field name="BOARD"/>
+		<field name="BOOTLOADER" since="8"/>
+		<field name="BRAND"/>
+		<field name="CPU_ABI" since="4" deprecated="21"/>
+		<field name="CPU_ABI2" since="8" deprecated="21"/>
+		<field name="DEVICE"/>
+		<field name="DISPLAY" since="3"/>
+		<field name="FINGERPRINT"/>
+		<field name="HARDWARE" since="8"/>
+		<field name="HOST"/>
+		<field name="ID"/>
+		<field name="MANUFACTURER" since="4"/>
+		<field name="MODEL"/>
+		<field name="ODM_SKU" since="31"/>
+		<field name="PRODUCT"/>
+		<field name="RADIO" since="8" deprecated="15"/>
+		<field name="SERIAL" since="9" deprecated="26"/>
+		<field name="SKU" since="31"/>
+		<field name="SOC_MANUFACTURER" since="31"/>
+		<field name="SOC_MODEL" since="31"/>
+		<field name="SUPPORTED_32_BIT_ABIS" since="21"/>
+		<field name="SUPPORTED_64_BIT_ABIS" since="21"/>
+		<field name="SUPPORTED_ABIS" since="21"/>
+		<field name="TAGS"/>
+		<field name="TIME"/>
+		<field name="TYPE"/>
+		<field name="UNKNOWN" since="8"/>
+		<field name="USER"/>
+	</class>
+	<class name="android/os/Build$Partition" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getBuildTimeMillis()J"/>
+		<method name="getFingerprint()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<field name="PARTITION_NAME_SYSTEM"/>
+	</class>
+	<class name="android/os/Build$VERSION" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="BASE_OS" since="23"/>
+		<field name="CODENAME" since="4"/>
+		<field name="INCREMENTAL"/>
+		<field name="MEDIA_PERFORMANCE_CLASS" since="31"/>
+		<field name="PREVIEW_SDK_INT" since="23"/>
+		<field name="RELEASE"/>
+		<field name="RELEASE_OR_CODENAME" since="30"/>
+		<field name="SDK" deprecated="15"/>
+		<field name="SDK_INT" since="4"/>
+		<field name="SECURITY_PATCH" since="23"/>
+	</class>
+	<class name="android/os/Build$VERSION_CODES" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="BASE"/>
+		<field name="BASE_1_1"/>
+		<field name="CUPCAKE"/>
+		<field name="CUR_DEVELOPMENT"/>
+		<field name="DONUT"/>
+		<field name="ECLAIR" since="5"/>
+		<field name="ECLAIR_0_1" since="6"/>
+		<field name="ECLAIR_MR1" since="7"/>
+		<field name="FROYO" since="8"/>
+		<field name="GINGERBREAD" since="9"/>
+		<field name="GINGERBREAD_MR1" since="10"/>
+		<field name="HONEYCOMB" since="11"/>
+		<field name="HONEYCOMB_MR1" since="12"/>
+		<field name="HONEYCOMB_MR2" since="13"/>
+		<field name="ICE_CREAM_SANDWICH" since="14"/>
+		<field name="ICE_CREAM_SANDWICH_MR1" since="15"/>
+		<field name="JELLY_BEAN" since="16"/>
+		<field name="JELLY_BEAN_MR1" since="17"/>
+		<field name="JELLY_BEAN_MR2" since="18"/>
+		<field name="KITKAT" since="19"/>
+		<field name="KITKAT_WATCH" since="20"/>
+		<field name="LOLLIPOP" since="21"/>
+		<field name="LOLLIPOP_MR1" since="22"/>
+		<field name="M" since="23"/>
+		<field name="N" since="24"/>
+		<field name="N_MR1" since="25"/>
+		<field name="O" since="26"/>
+		<field name="O_MR1" since="27"/>
+		<field name="P" since="28"/>
+		<field name="Q" since="29"/>
+		<field name="R" since="30"/>
+		<field name="S" since="31"/>
+		<field name="S_V2" since="33"/>
+	</class>
+	<class name="android/os/Bundle" since="1">
+		<extends name="android/os/BaseBundle" since="21"/>
+		<extends name="java/lang/Object" removed="21"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/os/Bundle;)V"/>
+		<method name="&lt;init>(Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="&lt;init>(Ljava/lang/ClassLoader;)V"/>
+		<method name="clear()V"/>
+		<method name="containsKey(Ljava/lang/String;)Z" removed="21"/>
+		<method name="deepCopy()Landroid/os/Bundle;" since="26"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;" removed="21"/>
+		<method name="getBinder(Ljava/lang/String;)Landroid/os/IBinder;" since="18"/>
+		<method name="getBoolean(Ljava/lang/String;)Z" removed="22"/>
+		<method name="getBoolean(Ljava/lang/String;Z)Z" removed="22"/>
+		<method name="getBooleanArray(Ljava/lang/String;)[Z" removed="22"/>
+		<method name="getBundle(Ljava/lang/String;)Landroid/os/Bundle;"/>
+		<method name="getByte(Ljava/lang/String;)B"/>
+		<method name="getByte(Ljava/lang/String;B)Ljava/lang/Byte;"/>
+		<method name="getByteArray(Ljava/lang/String;)[B"/>
+		<method name="getChar(Ljava/lang/String;)C"/>
+		<method name="getChar(Ljava/lang/String;C)C"/>
+		<method name="getCharArray(Ljava/lang/String;)[C"/>
+		<method name="getCharSequence(Ljava/lang/String;)Ljava/lang/CharSequence;"/>
+		<method name="getCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="12"/>
+		<method name="getCharSequenceArray(Ljava/lang/String;)[Ljava/lang/CharSequence;" since="8"/>
+		<method name="getCharSequenceArrayList(Ljava/lang/String;)Ljava/util/ArrayList;" since="8"/>
+		<method name="getClassLoader()Ljava/lang/ClassLoader;" since="11"/>
+		<method name="getDouble(Ljava/lang/String;)D" removed="21"/>
+		<method name="getDouble(Ljava/lang/String;D)D" removed="21"/>
+		<method name="getDoubleArray(Ljava/lang/String;)[D" removed="21"/>
+		<method name="getFloat(Ljava/lang/String;)F"/>
+		<method name="getFloat(Ljava/lang/String;F)F"/>
+		<method name="getFloatArray(Ljava/lang/String;)[F"/>
+		<method name="getInt(Ljava/lang/String;)I" removed="21"/>
+		<method name="getInt(Ljava/lang/String;I)I" removed="21"/>
+		<method name="getIntArray(Ljava/lang/String;)[I" removed="21"/>
+		<method name="getIntegerArrayList(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="getLong(Ljava/lang/String;)J" removed="21"/>
+		<method name="getLong(Ljava/lang/String;J)J" removed="21"/>
+		<method name="getLongArray(Ljava/lang/String;)[J" removed="21"/>
+		<method name="getParcelable(Ljava/lang/String;)Landroid/os/Parcelable;"/>
+		<method name="getParcelableArray(Ljava/lang/String;)[Landroid/os/Parcelable;"/>
+		<method name="getParcelableArrayList(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="getSerializable(Ljava/lang/String;)Ljava/io/Serializable;"/>
+		<method name="getShort(Ljava/lang/String;)S"/>
+		<method name="getShort(Ljava/lang/String;S)S"/>
+		<method name="getShortArray(Ljava/lang/String;)[S"/>
+		<method name="getSize(Ljava/lang/String;)Landroid/util/Size;" since="21"/>
+		<method name="getSizeF(Ljava/lang/String;)Landroid/util/SizeF;" since="21"/>
+		<method name="getSparseParcelableArray(Ljava/lang/String;)Landroid/util/SparseArray;"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;" removed="21"/>
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="12" removed="21"/>
+		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;" removed="21"/>
+		<method name="getStringArrayList(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="hasFileDescriptors()Z"/>
+		<method name="isEmpty()Z" removed="21"/>
+		<method name="keySet()Ljava/util/Set;" removed="21"/>
+		<method name="putAll(Landroid/os/Bundle;)V"/>
+		<method name="putBinder(Ljava/lang/String;Landroid/os/IBinder;)V" since="18"/>
+		<method name="putBoolean(Ljava/lang/String;Z)V" removed="22"/>
+		<method name="putBooleanArray(Ljava/lang/String;[Z)V" removed="22"/>
+		<method name="putBundle(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="putByte(Ljava/lang/String;B)V"/>
+		<method name="putByteArray(Ljava/lang/String;[B)V"/>
+		<method name="putChar(Ljava/lang/String;C)V"/>
+		<method name="putCharArray(Ljava/lang/String;[C)V"/>
+		<method name="putCharSequence(Ljava/lang/String;Ljava/lang/CharSequence;)V"/>
+		<method name="putCharSequenceArray(Ljava/lang/String;[Ljava/lang/CharSequence;)V" since="8"/>
+		<method name="putCharSequenceArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V" since="8"/>
+		<method name="putDouble(Ljava/lang/String;D)V" removed="21"/>
+		<method name="putDoubleArray(Ljava/lang/String;[D)V" removed="21"/>
+		<method name="putFloat(Ljava/lang/String;F)V"/>
+		<method name="putFloatArray(Ljava/lang/String;[F)V"/>
+		<method name="putInt(Ljava/lang/String;I)V" removed="21"/>
+		<method name="putIntArray(Ljava/lang/String;[I)V" removed="21"/>
+		<method name="putIntegerArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V"/>
+		<method name="putLong(Ljava/lang/String;J)V" removed="21"/>
+		<method name="putLongArray(Ljava/lang/String;[J)V" removed="21"/>
+		<method name="putParcelable(Ljava/lang/String;Landroid/os/Parcelable;)V"/>
+		<method name="putParcelableArray(Ljava/lang/String;[Landroid/os/Parcelable;)V"/>
+		<method name="putParcelableArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V"/>
+		<method name="putSerializable(Ljava/lang/String;Ljava/io/Serializable;)V"/>
+		<method name="putShort(Ljava/lang/String;S)V"/>
+		<method name="putShortArray(Ljava/lang/String;[S)V"/>
+		<method name="putSize(Ljava/lang/String;Landroid/util/Size;)V" since="21"/>
+		<method name="putSizeF(Ljava/lang/String;Landroid/util/SizeF;)V" since="21"/>
+		<method name="putSparseParcelableArray(Ljava/lang/String;Landroid/util/SparseArray;)V"/>
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V" removed="21"/>
+		<method name="putStringArray(Ljava/lang/String;[Ljava/lang/String;)V" removed="21"/>
+		<method name="putStringArrayList(Ljava/lang/String;Ljava/util/ArrayList;)V"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="remove(Ljava/lang/String;)V"/>
+		<method name="setClassLoader(Ljava/lang/ClassLoader;)V"/>
+		<method name="size()I" removed="21"/>
+		<field name="CREATOR"/>
+		<field name="EMPTY"/>
+	</class>
+	<class name="android/os/CancellationSignal" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="cancel()V"/>
+		<method name="isCanceled()Z"/>
+		<method name="setOnCancelListener(Landroid/os/CancellationSignal$OnCancelListener;)V"/>
+		<method name="throwIfCanceled()V"/>
+	</class>
+	<class name="android/os/CancellationSignal$OnCancelListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onCancel()V"/>
+	</class>
+	<class name="android/os/CombinedVibration" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createParallel(Landroid/os/VibrationEffect;)Landroid/os/CombinedVibration;"/>
+		<method name="startParallel()Landroid/os/CombinedVibration$ParallelCombination;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/CombinedVibration$ParallelCombination" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="addVibrator(ILandroid/os/VibrationEffect;)Landroid/os/CombinedVibration$ParallelCombination;"/>
+		<method name="combine()Landroid/os/CombinedVibration;"/>
+	</class>
+	<class name="android/os/ConditionVariable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="block()V"/>
+		<method name="block(J)Z"/>
+		<method name="close()V"/>
+		<method name="open()V"/>
+	</class>
+	<class name="android/os/CountDownTimer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(JJ)V"/>
+		<method name="cancel()V"/>
+		<method name="onFinish()V"/>
+		<method name="onTick(J)V"/>
+		<method name="start()Landroid/os/CountDownTimer;"/>
+	</class>
+	<class name="android/os/CpuUsageInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getActive()J"/>
+		<method name="getTotal()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/DeadObjectException" since="1">
+		<extends name="android/os/RemoteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="23"/>
+	</class>
+	<class name="android/os/DeadSystemException" since="24">
+		<extends name="android/os/DeadObjectException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/os/Debug" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="attachJvmtiAgent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V" since="28"/>
+		<method name="changeDebugPort(I)V" deprecated="15"/>
+		<method name="dumpHprofData(Ljava/lang/String;)V" since="3"/>
+		<method name="dumpService(Ljava/lang/String;Ljava/io/FileDescriptor;[Ljava/lang/String;)Z" since="8"/>
+		<method name="enableEmulatorTraceOutput()V"/>
+		<method name="getBinderDeathObjectCount()I"/>
+		<method name="getBinderLocalObjectCount()I"/>
+		<method name="getBinderProxyObjectCount()I"/>
+		<method name="getBinderReceivedTransactions()I"/>
+		<method name="getBinderSentTransactions()I"/>
+		<method name="getGlobalAllocCount()I" deprecated="23"/>
+		<method name="getGlobalAllocSize()I" deprecated="23"/>
+		<method name="getGlobalClassInitCount()I" since="8" deprecated="23"/>
+		<method name="getGlobalClassInitTime()I" since="8" deprecated="23"/>
+		<method name="getGlobalExternalAllocCount()I" deprecated="15"/>
+		<method name="getGlobalExternalAllocSize()I" deprecated="15"/>
+		<method name="getGlobalExternalFreedCount()I" deprecated="15"/>
+		<method name="getGlobalExternalFreedSize()I" deprecated="15"/>
+		<method name="getGlobalFreedCount()I" deprecated="23"/>
+		<method name="getGlobalFreedSize()I" deprecated="23"/>
+		<method name="getGlobalGcInvocationCount()I" deprecated="23"/>
+		<method name="getLoadedClassCount()I"/>
+		<method name="getMemoryInfo(Landroid/os/Debug$MemoryInfo;)V"/>
+		<method name="getNativeHeapAllocatedSize()J"/>
+		<method name="getNativeHeapFreeSize()J"/>
+		<method name="getNativeHeapSize()J"/>
+		<method name="getPss()J" since="14"/>
+		<method name="getRuntimeStat(Ljava/lang/String;)Ljava/lang/String;" since="23"/>
+		<method name="getRuntimeStats()Ljava/util/Map;" since="23"/>
+		<method name="getThreadAllocCount()I" deprecated="23"/>
+		<method name="getThreadAllocSize()I" deprecated="23"/>
+		<method name="getThreadExternalAllocCount()I" deprecated="15"/>
+		<method name="getThreadExternalAllocSize()I" deprecated="15"/>
+		<method name="getThreadGcInvocationCount()I" deprecated="23"/>
+		<method name="isDebuggerConnected()Z"/>
+		<method name="printLoadedClasses(I)V"/>
+		<method name="resetAllCounts()V" deprecated="23"/>
+		<method name="resetGlobalAllocCount()V" deprecated="23"/>
+		<method name="resetGlobalAllocSize()V" deprecated="23"/>
+		<method name="resetGlobalClassInitCount()V" since="8" deprecated="23"/>
+		<method name="resetGlobalClassInitTime()V" since="8" deprecated="23"/>
+		<method name="resetGlobalExternalAllocCount()V" deprecated="15"/>
+		<method name="resetGlobalExternalAllocSize()V" deprecated="15"/>
+		<method name="resetGlobalExternalFreedCount()V" deprecated="15"/>
+		<method name="resetGlobalExternalFreedSize()V" deprecated="15"/>
+		<method name="resetGlobalFreedCount()V" deprecated="23"/>
+		<method name="resetGlobalFreedSize()V" deprecated="23"/>
+		<method name="resetGlobalGcInvocationCount()V" deprecated="23"/>
+		<method name="resetThreadAllocCount()V" deprecated="23"/>
+		<method name="resetThreadAllocSize()V" deprecated="23"/>
+		<method name="resetThreadExternalAllocCount()V" deprecated="15"/>
+		<method name="resetThreadExternalAllocSize()V" deprecated="15"/>
+		<method name="resetThreadGcInvocationCount()V" deprecated="23"/>
+		<method name="setAllocationLimit(I)I" deprecated="15"/>
+		<method name="setGlobalAllocationLimit(I)I" deprecated="15"/>
+		<method name="startAllocCounting()V" deprecated="18"/>
+		<method name="startMethodTracing()V"/>
+		<method name="startMethodTracing(Ljava/lang/String;)V"/>
+		<method name="startMethodTracing(Ljava/lang/String;I)V"/>
+		<method name="startMethodTracing(Ljava/lang/String;II)V"/>
+		<method name="startMethodTracingSampling(Ljava/lang/String;II)V" since="21"/>
+		<method name="startNativeTracing()V"/>
+		<method name="stopAllocCounting()V" deprecated="18"/>
+		<method name="stopMethodTracing()V"/>
+		<method name="stopNativeTracing()V"/>
+		<method name="threadCpuTimeNanos()J"/>
+		<method name="waitForDebugger()V"/>
+		<method name="waitingForDebugger()Z"/>
+		<field name="SHOW_CLASSLOADER"/>
+		<field name="SHOW_FULL_DETAIL"/>
+		<field name="SHOW_INITIALIZED"/>
+		<field name="TRACE_COUNT_ALLOCS" deprecated="23"/>
+	</class>
+	<class name="android/os/Debug$InstructionCount" since="1" deprecated="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="collect()Z" deprecated="29"/>
+		<method name="globalMethodInvocations()I" deprecated="29"/>
+		<method name="globalTotal()I" deprecated="29"/>
+		<method name="resetAndStart()Z" deprecated="29"/>
+	</class>
+	<class name="android/os/Debug$MemoryInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="5"/>
+		<method name="&lt;init>()V"/>
+		<method name="getMemoryStat(Ljava/lang/String;)Ljava/lang/String;" since="23"/>
+		<method name="getMemoryStats()Ljava/util/Map;" since="23"/>
+		<method name="getOtherLabel(I)Ljava/lang/String;" since="14" removed="19"/>
+		<method name="getOtherPrivateDirty(I)I" since="14" removed="19"/>
+		<method name="getOtherPss(I)I" since="14" removed="19"/>
+		<method name="getOtherSharedDirty(I)I" since="14" removed="19"/>
+		<method name="getTotalPrivateClean()I" since="19"/>
+		<method name="getTotalPrivateDirty()I" since="5"/>
+		<method name="getTotalPss()I" since="5"/>
+		<method name="getTotalSharedClean()I" since="19"/>
+		<method name="getTotalSharedDirty()I" since="5"/>
+		<method name="getTotalSwappablePss()I" since="19"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V" since="5"/>
+		<field name="CREATOR" since="5"/>
+		<field name="dalvikPrivateDirty"/>
+		<field name="dalvikPss"/>
+		<field name="dalvikSharedDirty"/>
+		<field name="nativePrivateDirty"/>
+		<field name="nativePss"/>
+		<field name="nativeSharedDirty"/>
+		<field name="otherPrivateDirty"/>
+		<field name="otherPss"/>
+		<field name="otherSharedDirty"/>
+	</class>
+	<class name="android/os/DropBoxManager" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addData(Ljava/lang/String;[BI)V"/>
+		<method name="addFile(Ljava/lang/String;Ljava/io/File;I)V"/>
+		<method name="addText(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getNextEntry(Ljava/lang/String;J)Landroid/os/DropBoxManager$Entry;"/>
+		<method name="isTagEnabled(Ljava/lang/String;)Z"/>
+		<field name="ACTION_DROPBOX_ENTRY_ADDED" since="11"/>
+		<field name="EXTRA_DROPPED_COUNT" since="29"/>
+		<field name="EXTRA_TAG" since="11"/>
+		<field name="EXTRA_TIME" since="11"/>
+		<field name="IS_EMPTY"/>
+		<field name="IS_GZIPPED"/>
+		<field name="IS_TEXT"/>
+	</class>
+	<class name="android/os/DropBoxManager$Entry" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/io/Closeable" since="9"/>
+		<method name="&lt;init>(Ljava/lang/String;J)V"/>
+		<method name="&lt;init>(Ljava/lang/String;JLandroid/os/ParcelFileDescriptor;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;JLjava/io/File;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;JLjava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;J[BI)V"/>
+		<method name="close()V"/>
+		<method name="getFlags()I"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getTag()Ljava/lang/String;"/>
+		<method name="getText(I)Ljava/lang/String;"/>
+		<method name="getTimeMillis()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/Environment" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDataDirectory()Ljava/io/File;"/>
+		<method name="getDownloadCacheDirectory()Ljava/io/File;"/>
+		<method name="getExternalStorageDirectory()Ljava/io/File;" deprecated="29"/>
+		<method name="getExternalStoragePublicDirectory(Ljava/lang/String;)Ljava/io/File;" since="8" deprecated="29"/>
+		<method name="getExternalStorageState()Ljava/lang/String;"/>
+		<method name="getExternalStorageState(Ljava/io/File;)Ljava/lang/String;" since="21"/>
+		<method name="getRootDirectory()Ljava/io/File;"/>
+		<method name="getStorageDirectory()Ljava/io/File;" since="30"/>
+		<method name="getStorageState(Ljava/io/File;)Ljava/lang/String;" since="19" deprecated="21"/>
+		<method name="isExternalStorageEmulated()Z" since="11"/>
+		<method name="isExternalStorageEmulated(Ljava/io/File;)Z" since="21"/>
+		<method name="isExternalStorageLegacy()Z" since="29"/>
+		<method name="isExternalStorageLegacy(Ljava/io/File;)Z" since="29"/>
+		<method name="isExternalStorageManager()Z" since="30"/>
+		<method name="isExternalStorageManager(Ljava/io/File;)Z" since="30"/>
+		<method name="isExternalStorageRemovable()Z" since="9"/>
+		<method name="isExternalStorageRemovable(Ljava/io/File;)Z" since="21"/>
+		<field name="DIRECTORY_ALARMS" since="8"/>
+		<field name="DIRECTORY_AUDIOBOOKS" since="29"/>
+		<field name="DIRECTORY_DCIM" since="8"/>
+		<field name="DIRECTORY_DOCUMENTS" since="19"/>
+		<field name="DIRECTORY_DOWNLOADS" since="8"/>
+		<field name="DIRECTORY_MOVIES" since="8"/>
+		<field name="DIRECTORY_MUSIC" since="8"/>
+		<field name="DIRECTORY_NOTIFICATIONS" since="8"/>
+		<field name="DIRECTORY_PICTURES" since="8"/>
+		<field name="DIRECTORY_PODCASTS" since="8"/>
+		<field name="DIRECTORY_RECORDINGS" since="31"/>
+		<field name="DIRECTORY_RINGTONES" since="8"/>
+		<field name="DIRECTORY_SCREENSHOTS" since="29"/>
+		<field name="MEDIA_BAD_REMOVAL"/>
+		<field name="MEDIA_CHECKING" since="3"/>
+		<field name="MEDIA_EJECTING" since="23"/>
+		<field name="MEDIA_MOUNTED"/>
+		<field name="MEDIA_MOUNTED_READ_ONLY"/>
+		<field name="MEDIA_NOFS" since="3"/>
+		<field name="MEDIA_REMOVED"/>
+		<field name="MEDIA_SHARED"/>
+		<field name="MEDIA_UNKNOWN" since="19"/>
+		<field name="MEDIA_UNMOUNTABLE"/>
+		<field name="MEDIA_UNMOUNTED"/>
+	</class>
+	<class name="android/os/FileObserver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/io/File;)V" since="29"/>
+		<method name="&lt;init>(Ljava/io/File;I)V" since="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/util/List;)V" since="29"/>
+		<method name="&lt;init>(Ljava/util/List;I)V" since="29"/>
+		<method name="onEvent(ILjava/lang/String;)V"/>
+		<method name="startWatching()V"/>
+		<method name="stopWatching()V"/>
+		<field name="ACCESS"/>
+		<field name="ALL_EVENTS"/>
+		<field name="ATTRIB"/>
+		<field name="CLOSE_NOWRITE"/>
+		<field name="CLOSE_WRITE"/>
+		<field name="CREATE"/>
+		<field name="DELETE"/>
+		<field name="DELETE_SELF"/>
+		<field name="MODIFY"/>
+		<field name="MOVED_FROM"/>
+		<field name="MOVED_TO"/>
+		<field name="MOVE_SELF"/>
+		<field name="OPEN"/>
+	</class>
+	<class name="android/os/FileUriExposedException" since="24">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/os/FileUtils" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="closeQuietly(Ljava/io/FileDescriptor;)V" deprecated="30"/>
+		<method name="closeQuietly(Ljava/lang/AutoCloseable;)V" deprecated="30"/>
+		<method name="copy(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;)J"/>
+		<method name="copy(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J"/>
+		<method name="copy(Ljava/io/InputStream;Ljava/io/OutputStream;)J"/>
+		<method name="copy(Ljava/io/InputStream;Ljava/io/OutputStream;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Landroid/os/FileUtils$ProgressListener;)J"/>
+	</class>
+	<class name="android/os/FileUtils$ProgressListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onProgress(J)V"/>
+	</class>
+	<class name="android/os/Handler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/os/Handler$Callback;)V" since="3" deprecated="30"/>
+		<method name="&lt;init>(Landroid/os/Looper;)V"/>
+		<method name="&lt;init>(Landroid/os/Looper;Landroid/os/Handler$Callback;)V" since="3"/>
+		<method name="createAsync(Landroid/os/Looper;)Landroid/os/Handler;" since="28"/>
+		<method name="createAsync(Landroid/os/Looper;Landroid/os/Handler$Callback;)Landroid/os/Handler;" since="28"/>
+		<method name="dispatchMessage(Landroid/os/Message;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getLooper()Landroid/os/Looper;"/>
+		<method name="getMessageName(Landroid/os/Message;)Ljava/lang/String;" since="14"/>
+		<method name="handleMessage(Landroid/os/Message;)V"/>
+		<method name="hasCallbacks(Ljava/lang/Runnable;)Z" since="29"/>
+		<method name="hasMessages(I)Z"/>
+		<method name="hasMessages(ILjava/lang/Object;)Z"/>
+		<method name="obtainMessage()Landroid/os/Message;"/>
+		<method name="obtainMessage(I)Landroid/os/Message;"/>
+		<method name="obtainMessage(III)Landroid/os/Message;"/>
+		<method name="obtainMessage(IIILjava/lang/Object;)Landroid/os/Message;"/>
+		<method name="obtainMessage(ILjava/lang/Object;)Landroid/os/Message;"/>
+		<method name="post(Ljava/lang/Runnable;)Z"/>
+		<method name="postAtFrontOfQueue(Ljava/lang/Runnable;)Z"/>
+		<method name="postAtTime(Ljava/lang/Runnable;J)Z"/>
+		<method name="postAtTime(Ljava/lang/Runnable;Ljava/lang/Object;J)Z"/>
+		<method name="postDelayed(Ljava/lang/Runnable;J)Z"/>
+		<method name="postDelayed(Ljava/lang/Runnable;Ljava/lang/Object;J)Z" since="28"/>
+		<method name="removeCallbacks(Ljava/lang/Runnable;)V"/>
+		<method name="removeCallbacks(Ljava/lang/Runnable;Ljava/lang/Object;)V"/>
+		<method name="removeCallbacksAndMessages(Ljava/lang/Object;)V"/>
+		<method name="removeMessages(I)V"/>
+		<method name="removeMessages(ILjava/lang/Object;)V"/>
+		<method name="sendEmptyMessage(I)Z"/>
+		<method name="sendEmptyMessageAtTime(IJ)Z"/>
+		<method name="sendEmptyMessageDelayed(IJ)Z"/>
+		<method name="sendMessage(Landroid/os/Message;)Z"/>
+		<method name="sendMessageAtFrontOfQueue(Landroid/os/Message;)Z"/>
+		<method name="sendMessageAtTime(Landroid/os/Message;J)Z"/>
+		<method name="sendMessageDelayed(Landroid/os/Message;J)Z"/>
+	</class>
+	<class name="android/os/Handler$Callback" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="handleMessage(Landroid/os/Message;)Z"/>
+	</class>
+	<class name="android/os/HandlerThread" since="1">
+		<extends name="java/lang/Thread"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getLooper()Landroid/os/Looper;"/>
+		<method name="getThreadId()I"/>
+		<method name="onLooperPrepared()V"/>
+		<method name="quit()Z" since="5"/>
+		<method name="quitSafely()Z" since="18"/>
+	</class>
+	<class name="android/os/HardwarePropertiesManager" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getCpuUsages()[Landroid/os/CpuUsageInfo;"/>
+		<method name="getDeviceTemperatures(II)[F"/>
+		<method name="getFanSpeeds()[F"/>
+		<field name="DEVICE_TEMPERATURE_BATTERY"/>
+		<field name="DEVICE_TEMPERATURE_CPU"/>
+		<field name="DEVICE_TEMPERATURE_GPU"/>
+		<field name="DEVICE_TEMPERATURE_SKIN"/>
+		<field name="TEMPERATURE_CURRENT"/>
+		<field name="TEMPERATURE_SHUTDOWN"/>
+		<field name="TEMPERATURE_THROTTLING"/>
+		<field name="TEMPERATURE_THROTTLING_BELOW_VR_MIN"/>
+		<field name="UNDEFINED_TEMPERATURE"/>
+	</class>
+	<class name="android/os/IBinder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="dump(Ljava/io/FileDescriptor;[Ljava/lang/String;)V" since="3"/>
+		<method name="dumpAsync(Ljava/io/FileDescriptor;[Ljava/lang/String;)V" since="13"/>
+		<method name="getInterfaceDescriptor()Ljava/lang/String;"/>
+		<method name="getSuggestedMaxIpcSizeBytes()I" since="30"/>
+		<method name="isBinderAlive()Z"/>
+		<method name="linkToDeath(Landroid/os/IBinder$DeathRecipient;I)V"/>
+		<method name="pingBinder()Z"/>
+		<method name="queryLocalInterface(Ljava/lang/String;)Landroid/os/IInterface;"/>
+		<method name="transact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z"/>
+		<method name="unlinkToDeath(Landroid/os/IBinder$DeathRecipient;I)Z"/>
+		<field name="DUMP_TRANSACTION"/>
+		<field name="FIRST_CALL_TRANSACTION"/>
+		<field name="FLAG_ONEWAY"/>
+		<field name="INTERFACE_TRANSACTION"/>
+		<field name="LAST_CALL_TRANSACTION"/>
+		<field name="LIKE_TRANSACTION" since="15"/>
+		<field name="PING_TRANSACTION"/>
+		<field name="TWEET_TRANSACTION" since="13"/>
+	</class>
+	<class name="android/os/IBinder$DeathRecipient" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="binderDied()V"/>
+	</class>
+	<class name="android/os/IInterface" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="asBinder()Landroid/os/IBinder;"/>
+	</class>
+	<class name="android/os/LimitExceededException" since="30">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/os/LocaleList" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>([Ljava/util/Locale;)V"/>
+		<method name="forLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList;"/>
+		<method name="get(I)Ljava/util/Locale;"/>
+		<method name="getAdjustedDefault()Landroid/os/LocaleList;"/>
+		<method name="getDefault()Landroid/os/LocaleList;"/>
+		<method name="getEmptyLocaleList()Landroid/os/LocaleList;"/>
+		<method name="getFirstMatch([Ljava/lang/String;)Ljava/util/Locale;"/>
+		<method name="indexOf(Ljava/util/Locale;)I"/>
+		<method name="isEmpty()Z"/>
+		<method name="isPseudoLocale(Landroid/icu/util/ULocale;)Z" since="29"/>
+		<method name="setDefault(Landroid/os/LocaleList;)V"/>
+		<method name="size()I"/>
+		<method name="toLanguageTags()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/Looper" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getMainLooper()Landroid/os/Looper;"/>
+		<method name="getQueue()Landroid/os/MessageQueue;" since="23"/>
+		<method name="getThread()Ljava/lang/Thread;" since="3"/>
+		<method name="isCurrentThread()Z" since="23"/>
+		<method name="loop()V"/>
+		<method name="myLooper()Landroid/os/Looper;"/>
+		<method name="myQueue()Landroid/os/MessageQueue;"/>
+		<method name="prepare()V"/>
+		<method name="prepareMainLooper()V" deprecated="30"/>
+		<method name="quit()V"/>
+		<method name="quitSafely()V" since="18"/>
+		<method name="setMessageLogging(Landroid/util/Printer;)V"/>
+	</class>
+	<class name="android/os/MemoryFile" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="allowPurging(Z)Z" deprecated="27"/>
+		<method name="close()V"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="isPurgingAllowed()Z" deprecated="27"/>
+		<method name="length()I"/>
+		<method name="readBytes([BIII)I"/>
+		<method name="writeBytes([BIII)V"/>
+	</class>
+	<class name="android/os/Message" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="copyFrom(Landroid/os/Message;)V"/>
+		<method name="getCallback()Ljava/lang/Runnable;"/>
+		<method name="getData()Landroid/os/Bundle;"/>
+		<method name="getTarget()Landroid/os/Handler;"/>
+		<method name="getWhen()J"/>
+		<method name="isAsynchronous()Z" since="22"/>
+		<method name="obtain()Landroid/os/Message;"/>
+		<method name="obtain(Landroid/os/Handler;)Landroid/os/Message;"/>
+		<method name="obtain(Landroid/os/Handler;I)Landroid/os/Message;"/>
+		<method name="obtain(Landroid/os/Handler;III)Landroid/os/Message;"/>
+		<method name="obtain(Landroid/os/Handler;IIILjava/lang/Object;)Landroid/os/Message;"/>
+		<method name="obtain(Landroid/os/Handler;ILjava/lang/Object;)Landroid/os/Message;"/>
+		<method name="obtain(Landroid/os/Handler;Ljava/lang/Runnable;)Landroid/os/Message;"/>
+		<method name="obtain(Landroid/os/Message;)Landroid/os/Message;"/>
+		<method name="peekData()Landroid/os/Bundle;"/>
+		<method name="recycle()V"/>
+		<method name="sendToTarget()V"/>
+		<method name="setAsynchronous(Z)V" since="22"/>
+		<method name="setData(Landroid/os/Bundle;)V"/>
+		<method name="setTarget(Landroid/os/Handler;)V"/>
+		<field name="CREATOR"/>
+		<field name="arg1"/>
+		<field name="arg2"/>
+		<field name="obj"/>
+		<field name="replyTo"/>
+		<field name="sendingUid" since="21"/>
+		<field name="what"/>
+	</class>
+	<class name="android/os/MessageQueue" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V"/>
+		<method name="addOnFileDescriptorEventListener(Ljava/io/FileDescriptor;ILandroid/os/MessageQueue$OnFileDescriptorEventListener;)V" since="23"/>
+		<method name="isIdle()Z" since="23"/>
+		<method name="removeIdleHandler(Landroid/os/MessageQueue$IdleHandler;)V"/>
+		<method name="removeOnFileDescriptorEventListener(Ljava/io/FileDescriptor;)V" since="23"/>
+	</class>
+	<class name="android/os/MessageQueue$IdleHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="queueIdle()Z"/>
+	</class>
+	<class name="android/os/MessageQueue$OnFileDescriptorEventListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onFileDescriptorEvents(Ljava/io/FileDescriptor;I)I"/>
+		<field name="EVENT_ERROR"/>
+		<field name="EVENT_INPUT"/>
+		<field name="EVENT_OUTPUT"/>
+	</class>
+	<class name="android/os/Messenger" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Handler;)V"/>
+		<method name="&lt;init>(Landroid/os/IBinder;)V"/>
+		<method name="getBinder()Landroid/os/IBinder;"/>
+		<method name="readMessengerOrNullFromParcel(Landroid/os/Parcel;)Landroid/os/Messenger;"/>
+		<method name="send(Landroid/os/Message;)V"/>
+		<method name="writeMessengerOrNullToParcel(Landroid/os/Messenger;Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/NetworkOnMainThreadException" since="11">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/os/OperationCanceledException" since="16">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/os/OutcomeReceiver" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onError(Ljava/lang/Throwable;)V"/>
+		<method name="onResult(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/os/Parcel" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="appendFrom(Landroid/os/Parcel;II)V"/>
+		<method name="createBinderArray()[Landroid/os/IBinder;"/>
+		<method name="createBinderArrayList()Ljava/util/ArrayList;"/>
+		<method name="createBooleanArray()[Z"/>
+		<method name="createByteArray()[B"/>
+		<method name="createCharArray()[C"/>
+		<method name="createDoubleArray()[D"/>
+		<method name="createFloatArray()[F"/>
+		<method name="createIntArray()[I"/>
+		<method name="createLongArray()[J"/>
+		<method name="createStringArray()[Ljava/lang/String;"/>
+		<method name="createStringArrayList()Ljava/util/ArrayList;"/>
+		<method name="createTypedArray(Landroid/os/Parcelable$Creator;)[Ljava/lang/Object;"/>
+		<method name="createTypedArrayList(Landroid/os/Parcelable$Creator;)Ljava/util/ArrayList;"/>
+		<method name="createTypedArrayMap(Landroid/os/Parcelable$Creator;)Landroid/util/ArrayMap;" since="29"/>
+		<method name="createTypedSparseArray(Landroid/os/Parcelable$Creator;)Landroid/util/SparseArray;" since="29"/>
+		<method name="dataAvail()I"/>
+		<method name="dataCapacity()I"/>
+		<method name="dataPosition()I"/>
+		<method name="dataSize()I"/>
+		<method name="enforceInterface(Ljava/lang/String;)V"/>
+		<method name="hasFileDescriptors()Z"/>
+		<method name="marshall()[B"/>
+		<method name="obtain()Landroid/os/Parcel;"/>
+		<method name="obtain(I)Landroid/os/Parcel;" removed="21"/>
+		<method name="readArray(Ljava/lang/ClassLoader;)[Ljava/lang/Object;"/>
+		<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;"/>
+		<method name="readBinderArray([Landroid/os/IBinder;)V"/>
+		<method name="readBinderList(Ljava/util/List;)V"/>
+		<method name="readBoolean()Z" since="29"/>
+		<method name="readBooleanArray([Z)V"/>
+		<method name="readBundle()Landroid/os/Bundle;"/>
+		<method name="readBundle(Ljava/lang/ClassLoader;)Landroid/os/Bundle;"/>
+		<method name="readByte()B"/>
+		<method name="readByteArray([B)V"/>
+		<method name="readCharArray([C)V"/>
+		<method name="readDouble()D"/>
+		<method name="readDoubleArray([D)V"/>
+		<method name="readException()V"/>
+		<method name="readException(ILjava/lang/String;)V"/>
+		<method name="readFileDescriptor()Landroid/os/ParcelFileDescriptor;"/>
+		<method name="readFloat()F"/>
+		<method name="readFloatArray([F)V"/>
+		<method name="readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;"/>
+		<method name="readInt()I"/>
+		<method name="readIntArray([I)V"/>
+		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;)V"/>
+		<method name="readLong()J"/>
+		<method name="readLongArray([J)V"/>
+		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V"/>
+		<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;"/>
+		<method name="readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;"/>
+		<method name="readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;" since="30"/>
+		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;" since="29"/>
+		<method name="readPersistableBundle()Landroid/os/PersistableBundle;" since="21"/>
+		<method name="readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;" since="21"/>
+		<method name="readSerializable()Ljava/io/Serializable;"/>
+		<method name="readSize()Landroid/util/Size;" since="21"/>
+		<method name="readSizeF()Landroid/util/SizeF;" since="21"/>
+		<method name="readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;"/>
+		<method name="readSparseBooleanArray()Landroid/util/SparseBooleanArray;"/>
+		<method name="readString()Ljava/lang/String;"/>
+		<method name="readStringArray([Ljava/lang/String;)V"/>
+		<method name="readStringList(Ljava/util/List;)V"/>
+		<method name="readStrongBinder()Landroid/os/IBinder;"/>
+		<method name="readTypedArray([Ljava/lang/Object;Landroid/os/Parcelable$Creator;)V"/>
+		<method name="readTypedList(Ljava/util/List;Landroid/os/Parcelable$Creator;)V"/>
+		<method name="readTypedObject(Landroid/os/Parcelable$Creator;)Ljava/lang/Object;" since="23"/>
+		<method name="readValue(Ljava/lang/ClassLoader;)Ljava/lang/Object;"/>
+		<method name="recycle()V"/>
+		<method name="setDataCapacity(I)V"/>
+		<method name="setDataPosition(I)V"/>
+		<method name="setDataSize(I)V"/>
+		<method name="unmarshall([BII)V"/>
+		<method name="writeArray([Ljava/lang/Object;)V"/>
+		<method name="writeBinderArray([Landroid/os/IBinder;)V"/>
+		<method name="writeBinderList(Ljava/util/List;)V"/>
+		<method name="writeBoolean(Z)V" since="29"/>
+		<method name="writeBooleanArray([Z)V"/>
+		<method name="writeBundle(Landroid/os/Bundle;)V"/>
+		<method name="writeByte(B)V"/>
+		<method name="writeByteArray([B)V"/>
+		<method name="writeByteArray([BII)V"/>
+		<method name="writeCharArray([C)V"/>
+		<method name="writeDouble(D)V"/>
+		<method name="writeDoubleArray([D)V"/>
+		<method name="writeException(Ljava/lang/Exception;)V"/>
+		<method name="writeFileDescriptor(Ljava/io/FileDescriptor;)V"/>
+		<method name="writeFloat(F)V"/>
+		<method name="writeFloatArray([F)V"/>
+		<method name="writeInt(I)V"/>
+		<method name="writeIntArray([I)V"/>
+		<method name="writeInterfaceToken(Ljava/lang/String;)V"/>
+		<method name="writeList(Ljava/util/List;)V"/>
+		<method name="writeLong(J)V"/>
+		<method name="writeLongArray([J)V"/>
+		<method name="writeMap(Ljava/util/Map;)V"/>
+		<method name="writeNoException()V"/>
+		<method name="writeParcelable(Landroid/os/Parcelable;I)V"/>
+		<method name="writeParcelableArray([Landroid/os/Parcelable;I)V"/>
+		<method name="writeParcelableCreator(Landroid/os/Parcelable;)V" since="30"/>
+		<method name="writeParcelableList(Ljava/util/List;I)V" since="29"/>
+		<method name="writePersistableBundle(Landroid/os/PersistableBundle;)V" since="21"/>
+		<method name="writeSerializable(Ljava/io/Serializable;)V"/>
+		<method name="writeSize(Landroid/util/Size;)V" since="21"/>
+		<method name="writeSizeF(Landroid/util/SizeF;)V" since="21"/>
+		<method name="writeSparseArray(Landroid/util/SparseArray;)V"/>
+		<method name="writeSparseBooleanArray(Landroid/util/SparseBooleanArray;)V"/>
+		<method name="writeString(Ljava/lang/String;)V"/>
+		<method name="writeStringArray([Ljava/lang/String;)V"/>
+		<method name="writeStringList(Ljava/util/List;)V"/>
+		<method name="writeStrongBinder(Landroid/os/IBinder;)V"/>
+		<method name="writeStrongInterface(Landroid/os/IInterface;)V"/>
+		<method name="writeTypedArray([Landroid/os/Parcelable;I)V"/>
+		<method name="writeTypedArrayMap(Landroid/util/ArrayMap;I)V" since="29"/>
+		<method name="writeTypedList(Ljava/util/List;)V"/>
+		<method name="writeTypedObject(Landroid/os/Parcelable;I)V" since="23"/>
+		<method name="writeTypedSparseArray(Landroid/util/SparseArray;I)V" since="29"/>
+		<method name="writeValue(Ljava/lang/Object;)V"/>
+		<field name="STRING_CREATOR"/>
+	</class>
+	<class name="android/os/ParcelFileDescriptor" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/io/Closeable" since="16"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
+		<method name="adoptFd(I)Landroid/os/ParcelFileDescriptor;" since="13"/>
+		<method name="canDetectErrors()Z" since="19"/>
+		<method name="checkError()V" since="19"/>
+		<method name="close()V"/>
+		<method name="closeWithError(Ljava/lang/String;)V" since="19"/>
+		<method name="createPipe()[Landroid/os/ParcelFileDescriptor;" since="9"/>
+		<method name="createReliablePipe()[Landroid/os/ParcelFileDescriptor;" since="19"/>
+		<method name="createReliableSocketPair()[Landroid/os/ParcelFileDescriptor;" since="19"/>
+		<method name="createSocketPair()[Landroid/os/ParcelFileDescriptor;" since="19"/>
+		<method name="detachFd()I" since="12"/>
+		<method name="dup()Landroid/os/ParcelFileDescriptor;" since="14"/>
+		<method name="dup(Ljava/io/FileDescriptor;)Landroid/os/ParcelFileDescriptor;" since="13"/>
+		<method name="fromDatagramSocket(Ljava/net/DatagramSocket;)Landroid/os/ParcelFileDescriptor;" since="14"/>
+		<method name="fromFd(I)Landroid/os/ParcelFileDescriptor;" since="13"/>
+		<method name="fromSocket(Ljava/net/Socket;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="getFd()I" since="12"/>
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
+		<method name="getStatSize()J" since="3"/>
+		<method name="open(Ljava/io/File;I)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="open(Ljava/io/File;ILandroid/os/Handler;Landroid/os/ParcelFileDescriptor$OnCloseListener;)Landroid/os/ParcelFileDescriptor;" since="19"/>
+		<method name="parseMode(Ljava/lang/String;)I" since="19"/>
+		<method name="wrap(Landroid/os/ParcelFileDescriptor;Landroid/os/Handler;Landroid/os/ParcelFileDescriptor$OnCloseListener;)Landroid/os/ParcelFileDescriptor;" since="30"/>
+		<field name="CREATOR"/>
+		<field name="MODE_APPEND" since="3"/>
+		<field name="MODE_CREATE"/>
+		<field name="MODE_READ_ONLY"/>
+		<field name="MODE_READ_WRITE"/>
+		<field name="MODE_TRUNCATE"/>
+		<field name="MODE_WORLD_READABLE" deprecated="19"/>
+		<field name="MODE_WORLD_WRITEABLE" deprecated="19"/>
+		<field name="MODE_WRITE_ONLY"/>
+	</class>
+	<class name="android/os/ParcelFileDescriptor$AutoCloseInputStream" since="1">
+		<extends name="java/io/FileInputStream"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
+	</class>
+	<class name="android/os/ParcelFileDescriptor$AutoCloseOutputStream" since="1">
+		<extends name="java/io/FileOutputStream"/>
+		<method name="&lt;init>(Landroid/os/ParcelFileDescriptor;)V"/>
+	</class>
+	<class name="android/os/ParcelFileDescriptor$FileDescriptorDetachedException" since="19">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/os/ParcelFileDescriptor$OnCloseListener" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onClose(Ljava/io/IOException;)V"/>
+	</class>
+	<class name="android/os/ParcelFormatException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/os/ParcelUuid" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/util/UUID;)V"/>
+		<method name="fromString(Ljava/lang/String;)Landroid/os/ParcelUuid;"/>
+		<method name="getUuid()Ljava/util/UUID;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/Parcelable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="describeContents()I"/>
+		<method name="writeToParcel(Landroid/os/Parcel;I)V"/>
+		<field name="CONTENTS_FILE_DESCRIPTOR"/>
+		<field name="PARCELABLE_WRITE_RETURN_VALUE"/>
+	</class>
+	<class name="android/os/Parcelable$ClassLoaderCreator" since="13">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable$Creator"/>
+		<method name="createFromParcel(Landroid/os/Parcel;Ljava/lang/ClassLoader;)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/os/Parcelable$Creator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object;"/>
+		<method name="newArray(I)[Ljava/lang/Object;"/>
+	</class>
+	<class name="android/os/PatternMatcher" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+		<method name="match(Ljava/lang/String;)Z"/>
+		<field name="CREATOR"/>
+		<field name="PATTERN_ADVANCED_GLOB" since="26"/>
+		<field name="PATTERN_LITERAL"/>
+		<field name="PATTERN_PREFIX"/>
+		<field name="PATTERN_SIMPLE_GLOB"/>
+		<field name="PATTERN_SUFFIX" since="31"/>
+	</class>
+	<class name="android/os/PerformanceHintManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="createHintSession([IJ)Landroid/os/PerformanceHintManager$Session;"/>
+		<method name="getPreferredUpdateRateNanos()J"/>
+	</class>
+	<class name="android/os/PerformanceHintManager$Session" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="reportActualWorkDuration(J)V"/>
+		<method name="updateTargetWorkDuration(J)V"/>
+	</class>
+	<class name="android/os/PersistableBundle" since="21">
+		<extends name="android/os/BaseBundle"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/os/PersistableBundle;)V"/>
+		<method name="deepCopy()Landroid/os/PersistableBundle;" since="26"/>
+		<method name="getPersistableBundle(Ljava/lang/String;)Landroid/os/PersistableBundle;"/>
+		<method name="putPersistableBundle(Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
+		<method name="readFromStream(Ljava/io/InputStream;)Landroid/os/PersistableBundle;" since="30"/>
+		<method name="writeToStream(Ljava/io/OutputStream;)V" since="30"/>
+		<field name="CREATOR"/>
+		<field name="EMPTY"/>
+	</class>
+	<class name="android/os/PowerManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29"/>
+		<method name="addThermalStatusListener(Ljava/util/concurrent/Executor;Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29"/>
+		<method name="getBatteryDischargePrediction()Ljava/time/Duration;" since="31"/>
+		<method name="getCurrentThermalStatus()I" since="29"/>
+		<method name="getLocationPowerSaveMode()I" since="28"/>
+		<method name="getThermalHeadroom(I)F" since="30"/>
+		<method name="goToSleep(J)V" removed="21"/>
+		<method name="isBatteryDischargePredictionPersonalized()Z" since="31"/>
+		<method name="isDeviceIdleMode()Z" since="23"/>
+		<method name="isIgnoringBatteryOptimizations(Ljava/lang/String;)Z" since="23"/>
+		<method name="isInteractive()Z" since="20"/>
+		<method name="isPowerSaveMode()Z" since="21"/>
+		<method name="isRebootingUserspaceSupported()Z" since="30"/>
+		<method name="isScreenOn()Z" since="7" deprecated="20"/>
+		<method name="isSustainedPerformanceModeSupported()Z" since="24"/>
+		<method name="isWakeLockLevelSupported(I)Z" since="21"/>
+		<method name="newWakeLock(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;"/>
+		<method name="reboot(Ljava/lang/String;)V" since="8"/>
+		<method name="removeThermalStatusListener(Landroid/os/PowerManager$OnThermalStatusChangedListener;)V" since="29"/>
+		<method name="userActivity(JZ)V" removed="21"/>
+		<method name="wakeUp(J)V" since="17" removed="21"/>
+		<field name="ACQUIRE_CAUSES_WAKEUP"/>
+		<field name="ACTION_DEVICE_IDLE_MODE_CHANGED" since="23"/>
+		<field name="ACTION_POWER_SAVE_MODE_CHANGED" since="21"/>
+		<field name="FULL_WAKE_LOCK" deprecated="17"/>
+		<field name="LOCATION_MODE_ALL_DISABLED_WHEN_SCREEN_OFF" since="28"/>
+		<field name="LOCATION_MODE_FOREGROUND_ONLY" since="28"/>
+		<field name="LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF" since="28"/>
+		<field name="LOCATION_MODE_NO_CHANGE" since="28"/>
+		<field name="LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF" since="29"/>
+		<field name="ON_AFTER_RELEASE"/>
+		<field name="PARTIAL_WAKE_LOCK"/>
+		<field name="PROXIMITY_SCREEN_OFF_WAKE_LOCK" since="21"/>
+		<field name="RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY" since="21"/>
+		<field name="SCREEN_BRIGHT_WAKE_LOCK" deprecated="15"/>
+		<field name="SCREEN_DIM_WAKE_LOCK" deprecated="17"/>
+		<field name="THERMAL_STATUS_CRITICAL" since="29"/>
+		<field name="THERMAL_STATUS_EMERGENCY" since="29"/>
+		<field name="THERMAL_STATUS_LIGHT" since="29"/>
+		<field name="THERMAL_STATUS_MODERATE" since="29"/>
+		<field name="THERMAL_STATUS_NONE" since="29"/>
+		<field name="THERMAL_STATUS_SEVERE" since="29"/>
+		<field name="THERMAL_STATUS_SHUTDOWN" since="29"/>
+	</class>
+	<class name="android/os/PowerManager$OnThermalStatusChangedListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onThermalStatusChanged(I)V"/>
+	</class>
+	<class name="android/os/PowerManager$WakeLock" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="acquire()V"/>
+		<method name="acquire(J)V"/>
+		<method name="isHeld()Z"/>
+		<method name="release()V"/>
+		<method name="release(I)V" since="21"/>
+		<method name="setReferenceCounted(Z)V"/>
+		<method name="setWorkSource(Landroid/os/WorkSource;)V" since="9"/>
+	</class>
+	<class name="android/os/Process" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getElapsedCpuTime()J"/>
+		<method name="getExclusiveCores()[I" since="24"/>
+		<method name="getGidForName(Ljava/lang/String;)I"/>
+		<method name="getStartElapsedRealtime()J" since="24"/>
+		<method name="getStartUptimeMillis()J" since="24"/>
+		<method name="getThreadPriority(I)I"/>
+		<method name="getUidForName(Ljava/lang/String;)I"/>
+		<method name="is64Bit()Z" since="23"/>
+		<method name="isApplicationUid(I)Z" since="24"/>
+		<method name="isIsolated()Z" since="28"/>
+		<method name="killProcess(I)V"/>
+		<method name="myPid()I"/>
+		<method name="myTid()I"/>
+		<method name="myUid()I" since="2"/>
+		<method name="myUserHandle()Landroid/os/UserHandle;" since="17"/>
+		<method name="sendSignal(II)V"/>
+		<method name="setThreadPriority(I)V"/>
+		<method name="setThreadPriority(II)V"/>
+		<method name="supportsProcesses()Z" deprecated="15"/>
+		<field name="BLUETOOTH_GID" removed="18"/>
+		<field name="BLUETOOTH_UID" since="29"/>
+		<field name="FIRST_APPLICATION_UID"/>
+		<field name="INVALID_UID" since="29"/>
+		<field name="LAST_APPLICATION_UID"/>
+		<field name="PHONE_UID"/>
+		<field name="ROOT_UID" since="29"/>
+		<field name="SHELL_UID" since="29"/>
+		<field name="SIGNAL_KILL"/>
+		<field name="SIGNAL_QUIT"/>
+		<field name="SIGNAL_USR1"/>
+		<field name="SYSTEM_UID"/>
+		<field name="THREAD_PRIORITY_AUDIO"/>
+		<field name="THREAD_PRIORITY_BACKGROUND"/>
+		<field name="THREAD_PRIORITY_DEFAULT"/>
+		<field name="THREAD_PRIORITY_DISPLAY"/>
+		<field name="THREAD_PRIORITY_FOREGROUND"/>
+		<field name="THREAD_PRIORITY_LESS_FAVORABLE"/>
+		<field name="THREAD_PRIORITY_LOWEST"/>
+		<field name="THREAD_PRIORITY_MORE_FAVORABLE"/>
+		<field name="THREAD_PRIORITY_URGENT_AUDIO"/>
+		<field name="THREAD_PRIORITY_URGENT_DISPLAY"/>
+		<field name="THREAD_PRIORITY_VIDEO" since="28"/>
+		<field name="WIFI_UID" since="30"/>
+	</class>
+	<class name="android/os/ProxyFileDescriptorCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onFsync()V"/>
+		<method name="onGetSize()J"/>
+		<method name="onRead(JI[B)I"/>
+		<method name="onRelease()V"/>
+		<method name="onWrite(JI[B)I"/>
+	</class>
+	<class name="android/os/RecoverySystem" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="23"/>
+		<method name="installPackage(Landroid/content/Context;Ljava/io/File;)V"/>
+		<method name="rebootWipeCache(Landroid/content/Context;)V" since="14"/>
+		<method name="rebootWipeUserData(Landroid/content/Context;)V"/>
+		<method name="verifyPackage(Ljava/io/File;Landroid/os/RecoverySystem$ProgressListener;Ljava/io/File;)V"/>
+	</class>
+	<class name="android/os/RecoverySystem$ProgressListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="onProgress(I)V"/>
+	</class>
+	<class name="android/os/RemoteCallbackList" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="beginBroadcast()I"/>
+		<method name="finishBroadcast()V"/>
+		<method name="getBroadcastCookie(I)Ljava/lang/Object;" since="4"/>
+		<method name="getBroadcastItem(I)Landroid/os/IInterface;"/>
+		<method name="getRegisteredCallbackCookie(I)Ljava/lang/Object;" since="26"/>
+		<method name="getRegisteredCallbackCount()I" since="17"/>
+		<method name="getRegisteredCallbackItem(I)Landroid/os/IInterface;" since="26"/>
+		<method name="kill()V"/>
+		<method name="onCallbackDied(Landroid/os/IInterface;)V"/>
+		<method name="onCallbackDied(Landroid/os/IInterface;Ljava/lang/Object;)V" since="4"/>
+		<method name="register(Landroid/os/IInterface;)Z"/>
+		<method name="register(Landroid/os/IInterface;Ljava/lang/Object;)Z" since="4"/>
+		<method name="unregister(Landroid/os/IInterface;)Z"/>
+	</class>
+	<class name="android/os/RemoteException" since="1">
+		<extends name="android/util/AndroidException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="15"/>
+		<method name="rethrowAsRuntimeException()Ljava/lang/RuntimeException;" since="30"/>
+		<method name="rethrowFromSystemServer()Ljava/lang/RuntimeException;" since="30"/>
+	</class>
+	<class name="android/os/ResultReceiver" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Handler;)V"/>
+		<method name="onReceiveResult(ILandroid/os/Bundle;)V"/>
+		<method name="send(ILandroid/os/Bundle;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/SharedMemory" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/io/Closeable"/>
+		<method name="create(Ljava/lang/String;I)Landroid/os/SharedMemory;"/>
+		<method name="getSize()I"/>
+		<method name="map(III)Ljava/nio/ByteBuffer;"/>
+		<method name="mapReadOnly()Ljava/nio/ByteBuffer;"/>
+		<method name="mapReadWrite()Ljava/nio/ByteBuffer;"/>
+		<method name="setProtect(I)Z"/>
+		<method name="unmap(Ljava/nio/ByteBuffer;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/StatFs" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getAvailableBlocks()I" deprecated="18"/>
+		<method name="getAvailableBlocksLong()J" since="18"/>
+		<method name="getAvailableBytes()J" since="18"/>
+		<method name="getBlockCount()I" deprecated="18"/>
+		<method name="getBlockCountLong()J" since="18"/>
+		<method name="getBlockSize()I" deprecated="18"/>
+		<method name="getBlockSizeLong()J" since="18"/>
+		<method name="getFreeBlocks()I" deprecated="18"/>
+		<method name="getFreeBlocksLong()J" since="18"/>
+		<method name="getFreeBytes()J" since="18"/>
+		<method name="getTotalBytes()J" since="18"/>
+		<method name="restat(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/os/StrictMode" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="allowThreadDiskReads()Landroid/os/StrictMode$ThreadPolicy;"/>
+		<method name="allowThreadDiskWrites()Landroid/os/StrictMode$ThreadPolicy;"/>
+		<method name="enableDefaults()V"/>
+		<method name="getThreadPolicy()Landroid/os/StrictMode$ThreadPolicy;"/>
+		<method name="getVmPolicy()Landroid/os/StrictMode$VmPolicy;"/>
+		<method name="noteSlowCall(Ljava/lang/String;)V" since="11"/>
+		<method name="setThreadPolicy(Landroid/os/StrictMode$ThreadPolicy;)V"/>
+		<method name="setVmPolicy(Landroid/os/StrictMode$VmPolicy;)V"/>
+	</class>
+	<class name="android/os/StrictMode$OnThreadViolationListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onThreadViolation(Landroid/os/strictmode/Violation;)V"/>
+	</class>
+	<class name="android/os/StrictMode$OnVmViolationListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onVmViolation(Landroid/os/strictmode/Violation;)V"/>
+	</class>
+	<class name="android/os/StrictMode$ThreadPolicy" since="9">
+		<extends name="java/lang/Object"/>
+		<field name="LAX"/>
+	</class>
+	<class name="android/os/StrictMode$ThreadPolicy$Builder" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/StrictMode$ThreadPolicy;)V"/>
+		<method name="build()Landroid/os/StrictMode$ThreadPolicy;"/>
+		<method name="detectAll()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="detectCustomSlowCalls()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
+		<method name="detectDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="detectDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="detectNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="detectResourceMismatches()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="23"/>
+		<method name="detectUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="26"/>
+		<method name="penaltyDeath()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="penaltyDeathOnNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
+		<method name="penaltyDialog()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="penaltyDropBox()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="penaltyFlashScreen()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
+		<method name="penaltyListener(Ljava/util/concurrent/Executor;Landroid/os/StrictMode$OnThreadViolationListener;)Landroid/os/StrictMode$ThreadPolicy$Builder;" since="28"/>
+		<method name="penaltyLog()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="permitAll()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="permitCustomSlowCalls()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="11"/>
+		<method name="permitDiskReads()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="permitDiskWrites()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="permitNetwork()Landroid/os/StrictMode$ThreadPolicy$Builder;"/>
+		<method name="permitResourceMismatches()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="23"/>
+		<method name="permitUnbufferedIo()Landroid/os/StrictMode$ThreadPolicy$Builder;" since="26"/>
+	</class>
+	<class name="android/os/StrictMode$VmPolicy" since="9">
+		<extends name="java/lang/Object"/>
+		<field name="LAX"/>
+	</class>
+	<class name="android/os/StrictMode$VmPolicy$Builder" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/StrictMode$VmPolicy;)V" since="11"/>
+		<method name="build()Landroid/os/StrictMode$VmPolicy;"/>
+		<method name="detectActivityLeaks()Landroid/os/StrictMode$VmPolicy$Builder;" since="11"/>
+		<method name="detectAll()Landroid/os/StrictMode$VmPolicy$Builder;"/>
+		<method name="detectCleartextNetwork()Landroid/os/StrictMode$VmPolicy$Builder;" since="23"/>
+		<method name="detectContentUriWithoutPermission()Landroid/os/StrictMode$VmPolicy$Builder;" since="26"/>
+		<method name="detectCredentialProtectedWhileLocked()Landroid/os/StrictMode$VmPolicy$Builder;" since="29"/>
+		<method name="detectFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;" since="18"/>
+		<method name="detectImplicitDirectBoot()Landroid/os/StrictMode$VmPolicy$Builder;" since="29"/>
+		<method name="detectIncorrectContextUse()Landroid/os/StrictMode$VmPolicy$Builder;" since="31"/>
+		<method name="detectLeakedClosableObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="11"/>
+		<method name="detectLeakedRegistrationObjects()Landroid/os/StrictMode$VmPolicy$Builder;" since="16"/>
+		<method name="detectLeakedSqlLiteObjects()Landroid/os/StrictMode$VmPolicy$Builder;"/>
+		<method name="detectNonSdkApiUsage()Landroid/os/StrictMode$VmPolicy$Builder;" since="28"/>
+		<method name="detectUnsafeIntentLaunch()Landroid/os/StrictMode$VmPolicy$Builder;" since="31"/>
+		<method name="detectUntaggedSockets()Landroid/os/StrictMode$VmPolicy$Builder;" since="26"/>
+		<method name="penaltyDeath()Landroid/os/StrictMode$VmPolicy$Builder;"/>
+		<method name="penaltyDeathOnCleartextNetwork()Landroid/os/StrictMode$VmPolicy$Builder;" since="23"/>
+		<method name="penaltyDeathOnFileUriExposure()Landroid/os/StrictMode$VmPolicy$Builder;" since="24"/>
+		<method name="penaltyDropBox()Landroid/os/StrictMode$VmPolicy$Builder;"/>
+		<method name="penaltyListener(Ljava/util/concurrent/Executor;Landroid/os/StrictMode$OnVmViolationListener;)Landroid/os/StrictMode$VmPolicy$Builder;" since="28"/>
+		<method name="penaltyLog()Landroid/os/StrictMode$VmPolicy$Builder;"/>
+		<method name="permitNonSdkApiUsage()Landroid/os/StrictMode$VmPolicy$Builder;" since="28"/>
+		<method name="permitUnsafeIntentLaunch()Landroid/os/StrictMode$VmPolicy$Builder;" since="31"/>
+		<method name="setClassInstanceLimit(Ljava/lang/Class;I)Landroid/os/StrictMode$VmPolicy$Builder;" since="11"/>
+	</class>
+	<class name="android/os/SystemClock" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="currentGnssTimeClock()Ljava/time/Clock;" since="29"/>
+		<method name="currentThreadTimeMillis()J"/>
+		<method name="elapsedRealtime()J"/>
+		<method name="elapsedRealtimeNanos()J" since="17"/>
+		<method name="setCurrentTimeMillis(J)Z"/>
+		<method name="sleep(J)V"/>
+		<method name="uptimeMillis()J"/>
+	</class>
+	<class name="android/os/TestLooperManager" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="execute(Landroid/os/Message;)V"/>
+		<method name="getMessageQueue()Landroid/os/MessageQueue;"/>
+		<method name="hasMessages(Landroid/os/Handler;Ljava/lang/Object;I)Z"/>
+		<method name="hasMessages(Landroid/os/Handler;Ljava/lang/Object;Ljava/lang/Runnable;)Z"/>
+		<method name="next()Landroid/os/Message;"/>
+		<method name="recycle(Landroid/os/Message;)V"/>
+		<method name="release()V"/>
+	</class>
+	<class name="android/os/TokenWatcher" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/os/Handler;Ljava/lang/String;)V"/>
+		<method name="acquire(Landroid/os/IBinder;Ljava/lang/String;)V"/>
+		<method name="acquired()V"/>
+		<method name="cleanup(Landroid/os/IBinder;Z)V"/>
+		<method name="dump()V"/>
+		<method name="dump(Ljava/io/PrintWriter;)V" since="16"/>
+		<method name="isAcquired()Z"/>
+		<method name="release(Landroid/os/IBinder;)V"/>
+		<method name="released()V"/>
+	</class>
+	<class name="android/os/Trace" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="beginAsyncSection(Ljava/lang/String;I)V" since="29"/>
+		<method name="beginSection(Ljava/lang/String;)V"/>
+		<method name="endAsyncSection(Ljava/lang/String;I)V" since="29"/>
+		<method name="endSection()V"/>
+		<method name="isEnabled()Z" since="29"/>
+		<method name="setCounter(Ljava/lang/String;J)V" since="29"/>
+	</class>
+	<class name="android/os/TransactionTooLargeException" since="15">
+		<extends name="android/os/RemoteException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="23"/>
+	</class>
+	<class name="android/os/UserHandle" since="17">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getUserHandleForUid(I)Landroid/os/UserHandle;" since="24"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)Landroid/os/UserHandle;"/>
+		<method name="writeToParcel(Landroid/os/UserHandle;Landroid/os/Parcel;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/UserManager" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="createUserCreationIntent(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)Landroid/content/Intent;" since="24"/>
+		<method name="getApplicationRestrictions(Ljava/lang/String;)Landroid/os/Bundle;" since="18"/>
+		<method name="getSerialNumberForUser(Landroid/os/UserHandle;)J"/>
+		<method name="getUserCount()I"/>
+		<method name="getUserCreationTime(Landroid/os/UserHandle;)J" since="23"/>
+		<method name="getUserForSerialNumber(J)Landroid/os/UserHandle;"/>
+		<method name="getUserName()Ljava/lang/String;"/>
+		<method name="getUserProfiles()Ljava/util/List;" since="21"/>
+		<method name="getUserRestrictions()Landroid/os/Bundle;" since="18"/>
+		<method name="getUserRestrictions(Landroid/os/UserHandle;)Landroid/os/Bundle;" since="18"/>
+		<method name="hasUserRestriction(Ljava/lang/String;)Z" since="21"/>
+		<method name="isDemoUser()Z" since="25"/>
+		<method name="isHeadlessSystemUserMode()Z" since="31"/>
+		<method name="isManagedProfile()Z" since="30"/>
+		<method name="isQuietModeEnabled(Landroid/os/UserHandle;)Z" since="24"/>
+		<method name="isSystemUser()Z" since="23"/>
+		<method name="isUserAGoat()Z"/>
+		<method name="isUserForeground()Z" since="31"/>
+		<method name="isUserRunning(Landroid/os/UserHandle;)Z"/>
+		<method name="isUserRunningOrStopping(Landroid/os/UserHandle;)Z"/>
+		<method name="isUserUnlocked()Z" since="24"/>
+		<method name="isUserUnlocked(Landroid/os/UserHandle;)Z" since="24"/>
+		<method name="requestQuietModeEnabled(ZLandroid/os/UserHandle;)Z" since="28"/>
+		<method name="requestQuietModeEnabled(ZLandroid/os/UserHandle;I)Z" since="30"/>
+		<method name="setRestrictionsChallenge(Ljava/lang/String;)Z" since="19" deprecated="23"/>
+		<method name="setUserRestriction(Ljava/lang/String;Z)V" since="18" deprecated="21"/>
+		<method name="setUserRestrictions(Landroid/os/Bundle;)V" since="18" deprecated="21"/>
+		<method name="setUserRestrictions(Landroid/os/Bundle;Landroid/os/UserHandle;)V" since="18" deprecated="21"/>
+		<method name="supportsMultipleUsers()Z" since="24"/>
+		<field name="ALLOW_PARENT_PROFILE_APP_LINKING" since="23"/>
+		<field name="DISALLOW_ADD_MANAGED_PROFILE" since="26" deprecated="30"/>
+		<field name="DISALLOW_ADD_USER" since="21"/>
+		<field name="DISALLOW_ADJUST_VOLUME" since="21"/>
+		<field name="DISALLOW_AIRPLANE_MODE" since="28"/>
+		<field name="DISALLOW_AMBIENT_DISPLAY" since="28"/>
+		<field name="DISALLOW_APPS_CONTROL" since="21"/>
+		<field name="DISALLOW_AUTOFILL" since="26"/>
+		<field name="DISALLOW_BLUETOOTH" since="26"/>
+		<field name="DISALLOW_BLUETOOTH_SHARING" since="26"/>
+		<field name="DISALLOW_CAMERA_TOGGLE" since="31"/>
+		<field name="DISALLOW_CONFIG_BLUETOOTH" since="18"/>
+		<field name="DISALLOW_CONFIG_BRIGHTNESS" since="28"/>
+		<field name="DISALLOW_CONFIG_CELL_BROADCASTS" since="21"/>
+		<field name="DISALLOW_CONFIG_CREDENTIALS" since="18"/>
+		<field name="DISALLOW_CONFIG_DATE_TIME" since="28"/>
+		<field name="DISALLOW_CONFIG_LOCALE" since="28"/>
+		<field name="DISALLOW_CONFIG_LOCATION" since="28"/>
+		<field name="DISALLOW_CONFIG_MOBILE_NETWORKS" since="21"/>
+		<field name="DISALLOW_CONFIG_PRIVATE_DNS" since="29"/>
+		<field name="DISALLOW_CONFIG_SCREEN_TIMEOUT" since="28"/>
+		<field name="DISALLOW_CONFIG_TETHERING" since="21"/>
+		<field name="DISALLOW_CONFIG_VPN" since="21"/>
+		<field name="DISALLOW_CONFIG_WIFI" since="18"/>
+		<field name="DISALLOW_CONTENT_CAPTURE" since="29"/>
+		<field name="DISALLOW_CONTENT_SUGGESTIONS" since="29"/>
+		<field name="DISALLOW_CREATE_WINDOWS" since="21"/>
+		<field name="DISALLOW_CROSS_PROFILE_COPY_PASTE" since="21"/>
+		<field name="DISALLOW_DATA_ROAMING" since="24"/>
+		<field name="DISALLOW_DEBUGGING_FEATURES" since="21"/>
+		<field name="DISALLOW_FACTORY_RESET" since="21"/>
+		<field name="DISALLOW_FUN" since="23"/>
+		<field name="DISALLOW_INSTALL_APPS" since="18"/>
+		<field name="DISALLOW_INSTALL_UNKNOWN_SOURCES" since="18"/>
+		<field name="DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY" since="29"/>
+		<field name="DISALLOW_MICROPHONE_TOGGLE" since="31"/>
+		<field name="DISALLOW_MODIFY_ACCOUNTS" since="18"/>
+		<field name="DISALLOW_MOUNT_PHYSICAL_MEDIA" since="21"/>
+		<field name="DISALLOW_NETWORK_RESET" since="23"/>
+		<field name="DISALLOW_OUTGOING_BEAM" since="22"/>
+		<field name="DISALLOW_OUTGOING_CALLS" since="21"/>
+		<field name="DISALLOW_PRINTING" since="28"/>
+		<field name="DISALLOW_REMOVE_MANAGED_PROFILE" since="26" deprecated="30"/>
+		<field name="DISALLOW_REMOVE_USER" since="18"/>
+		<field name="DISALLOW_SAFE_BOOT" since="23"/>
+		<field name="DISALLOW_SET_USER_ICON" since="24"/>
+		<field name="DISALLOW_SET_WALLPAPER" since="24"/>
+		<field name="DISALLOW_SHARE_INTO_MANAGED_PROFILE" since="28"/>
+		<field name="DISALLOW_SHARE_LOCATION" since="18"/>
+		<field name="DISALLOW_SMS" since="21"/>
+		<field name="DISALLOW_SYSTEM_ERROR_DIALOGS" since="28"/>
+		<field name="DISALLOW_UNIFIED_PASSWORD" since="28"/>
+		<field name="DISALLOW_UNINSTALL_APPS" since="18"/>
+		<field name="DISALLOW_UNMUTE_MICROPHONE" since="21"/>
+		<field name="DISALLOW_USB_FILE_TRANSFER" since="18"/>
+		<field name="DISALLOW_USER_SWITCH" since="28"/>
+		<field name="ENSURE_VERIFY_APPS" since="21"/>
+		<field name="KEY_RESTRICTIONS_PENDING" since="22"/>
+		<field name="QUIET_MODE_DISABLE_ONLY_IF_CREDENTIAL_NOT_REQUIRED" since="30"/>
+		<field name="USER_CREATION_FAILED_NOT_PERMITTED" since="24"/>
+		<field name="USER_CREATION_FAILED_NO_MORE_USERS" since="24"/>
+		<field name="USER_OPERATION_ERROR_CURRENT_USER" since="28"/>
+		<field name="USER_OPERATION_ERROR_LOW_STORAGE" since="28"/>
+		<field name="USER_OPERATION_ERROR_MANAGED_PROFILE" since="28"/>
+		<field name="USER_OPERATION_ERROR_MAX_RUNNING_USERS" since="28"/>
+		<field name="USER_OPERATION_ERROR_MAX_USERS" since="28"/>
+		<field name="USER_OPERATION_ERROR_UNKNOWN" since="28"/>
+		<field name="USER_OPERATION_SUCCESS" since="28"/>
+	</class>
+	<class name="android/os/UserManager$UserOperationException" since="28">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="getUserOperationResult()I"/>
+	</class>
+	<class name="android/os/VibrationAttributes" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFlags()I"/>
+		<method name="getUsage()I"/>
+		<method name="getUsageClass()I"/>
+		<method name="isFlagSet(I)Z"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_BYPASS_INTERRUPTION_POLICY"/>
+		<field name="USAGE_ALARM"/>
+		<field name="USAGE_CLASS_ALARM"/>
+		<field name="USAGE_CLASS_FEEDBACK"/>
+		<field name="USAGE_CLASS_MASK"/>
+		<field name="USAGE_CLASS_UNKNOWN"/>
+		<field name="USAGE_COMMUNICATION_REQUEST"/>
+		<field name="USAGE_HARDWARE_FEEDBACK"/>
+		<field name="USAGE_NOTIFICATION"/>
+		<field name="USAGE_PHYSICAL_EMULATION"/>
+		<field name="USAGE_RINGTONE"/>
+		<field name="USAGE_TOUCH"/>
+		<field name="USAGE_UNKNOWN"/>
+	</class>
+	<class name="android/os/VibrationAttributes$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/VibrationAttributes;)V"/>
+		<method name="build()Landroid/os/VibrationAttributes;"/>
+		<method name="setFlags(II)Landroid/os/VibrationAttributes$Builder;"/>
+		<method name="setUsage(I)Landroid/os/VibrationAttributes$Builder;"/>
+	</class>
+	<class name="android/os/VibrationEffect" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createOneShot(JI)Landroid/os/VibrationEffect;"/>
+		<method name="createPredefined(I)Landroid/os/VibrationEffect;" since="29"/>
+		<method name="createWaveform([JI)Landroid/os/VibrationEffect;"/>
+		<method name="createWaveform([J[II)Landroid/os/VibrationEffect;"/>
+		<method name="startComposition()Landroid/os/VibrationEffect$Composition;" since="30"/>
+		<field name="CREATOR"/>
+		<field name="DEFAULT_AMPLITUDE"/>
+		<field name="EFFECT_CLICK" since="29"/>
+		<field name="EFFECT_DOUBLE_CLICK" since="29"/>
+		<field name="EFFECT_HEAVY_CLICK" since="29"/>
+		<field name="EFFECT_TICK" since="29"/>
+	</class>
+	<class name="android/os/VibrationEffect$Composition" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="addPrimitive(I)Landroid/os/VibrationEffect$Composition;"/>
+		<method name="addPrimitive(IF)Landroid/os/VibrationEffect$Composition;"/>
+		<method name="addPrimitive(IFI)Landroid/os/VibrationEffect$Composition;"/>
+		<method name="compose()Landroid/os/VibrationEffect;"/>
+		<field name="PRIMITIVE_CLICK"/>
+		<field name="PRIMITIVE_LOW_TICK" since="31"/>
+		<field name="PRIMITIVE_QUICK_FALL"/>
+		<field name="PRIMITIVE_QUICK_RISE"/>
+		<field name="PRIMITIVE_SLOW_RISE"/>
+		<field name="PRIMITIVE_SPIN" since="31"/>
+		<field name="PRIMITIVE_THUD" since="31"/>
+		<field name="PRIMITIVE_TICK"/>
+	</class>
+	<class name="android/os/Vibrator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="areAllEffectsSupported([I)I" since="30"/>
+		<method name="areAllPrimitivesSupported([I)Z" since="30"/>
+		<method name="areEffectsSupported([I)[I" since="30"/>
+		<method name="arePrimitivesSupported([I)[Z" since="30"/>
+		<method name="cancel()V"/>
+		<method name="getId()I" since="31"/>
+		<method name="getPrimitiveDurations([I)[I" since="31"/>
+		<method name="hasAmplitudeControl()Z" since="26"/>
+		<method name="hasVibrator()Z" since="11"/>
+		<method name="vibrate(J)V" deprecated="26"/>
+		<method name="vibrate(JLandroid/media/AudioAttributes;)V" since="21" deprecated="26"/>
+		<method name="vibrate(Landroid/os/VibrationEffect;)V" since="26"/>
+		<method name="vibrate(Landroid/os/VibrationEffect;Landroid/media/AudioAttributes;)V" since="26"/>
+		<method name="vibrate([JI)V" deprecated="26"/>
+		<method name="vibrate([JILandroid/media/AudioAttributes;)V" since="21" deprecated="26"/>
+		<field name="VIBRATION_EFFECT_SUPPORT_NO" since="30"/>
+		<field name="VIBRATION_EFFECT_SUPPORT_UNKNOWN" since="30"/>
+		<field name="VIBRATION_EFFECT_SUPPORT_YES" since="30"/>
+	</class>
+	<class name="android/os/VibratorManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="getDefaultVibrator()Landroid/os/Vibrator;"/>
+		<method name="getVibrator(I)Landroid/os/Vibrator;"/>
+		<method name="getVibratorIds()[I"/>
+		<method name="vibrate(Landroid/os/CombinedVibration;)V"/>
+		<method name="vibrate(Landroid/os/CombinedVibration;Landroid/os/VibrationAttributes;)V"/>
+	</class>
+	<class name="android/os/WorkSource" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/WorkSource;)V"/>
+		<method name="add(Landroid/os/WorkSource;)Z"/>
+		<method name="clear()V"/>
+		<method name="diff(Landroid/os/WorkSource;)Z"/>
+		<method name="remove(Landroid/os/WorkSource;)Z"/>
+		<method name="set(Landroid/os/WorkSource;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/health/HealthStats" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getDataType()Ljava/lang/String;"/>
+		<method name="getMeasurement(I)J"/>
+		<method name="getMeasurementKeyAt(I)I"/>
+		<method name="getMeasurementKeyCount()I"/>
+		<method name="getMeasurements(I)Ljava/util/Map;"/>
+		<method name="getMeasurementsKeyAt(I)I"/>
+		<method name="getMeasurementsKeyCount()I"/>
+		<method name="getStats(I)Ljava/util/Map;"/>
+		<method name="getStatsKeyAt(I)I"/>
+		<method name="getStatsKeyCount()I"/>
+		<method name="getTimer(I)Landroid/os/health/TimerStat;"/>
+		<method name="getTimerCount(I)I"/>
+		<method name="getTimerKeyAt(I)I"/>
+		<method name="getTimerKeyCount()I"/>
+		<method name="getTimerTime(I)J"/>
+		<method name="getTimers(I)Ljava/util/Map;"/>
+		<method name="getTimersKeyAt(I)I"/>
+		<method name="getTimersKeyCount()I"/>
+		<method name="hasMeasurement(I)Z"/>
+		<method name="hasMeasurements(I)Z"/>
+		<method name="hasStats(I)Z"/>
+		<method name="hasTimer(I)Z"/>
+		<method name="hasTimers(I)Z"/>
+	</class>
+	<class name="android/os/health/PackageHealthStats" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="MEASUREMENTS_WAKEUP_ALARMS_COUNT"/>
+		<field name="STATS_SERVICES"/>
+	</class>
+	<class name="android/os/health/PidHealthStats" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="MEASUREMENT_WAKE_NESTING_COUNT"/>
+		<field name="MEASUREMENT_WAKE_START_MS"/>
+		<field name="MEASUREMENT_WAKE_SUM_MS"/>
+	</class>
+	<class name="android/os/health/ProcessHealthStats" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="MEASUREMENT_ANR_COUNT"/>
+		<field name="MEASUREMENT_CRASHES_COUNT"/>
+		<field name="MEASUREMENT_FOREGROUND_MS"/>
+		<field name="MEASUREMENT_STARTS_COUNT"/>
+		<field name="MEASUREMENT_SYSTEM_TIME_MS"/>
+		<field name="MEASUREMENT_USER_TIME_MS"/>
+	</class>
+	<class name="android/os/health/ServiceHealthStats" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="MEASUREMENT_LAUNCH_COUNT"/>
+		<field name="MEASUREMENT_START_SERVICE_COUNT"/>
+	</class>
+	<class name="android/os/health/SystemHealthManager" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="takeMyUidSnapshot()Landroid/os/health/HealthStats;"/>
+		<method name="takeUidSnapshot(I)Landroid/os/health/HealthStats;"/>
+		<method name="takeUidSnapshots([I)[Landroid/os/health/HealthStats;"/>
+	</class>
+	<class name="android/os/health/TimerStat" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(IJ)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getCount()I"/>
+		<method name="getTime()J"/>
+		<method name="setCount(I)V"/>
+		<method name="setTime(J)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/os/health/UidHealthStats" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="MEASUREMENT_BLUETOOTH_IDLE_MS"/>
+		<field name="MEASUREMENT_BLUETOOTH_POWER_MAMS"/>
+		<field name="MEASUREMENT_BLUETOOTH_RX_BYTES"/>
+		<field name="MEASUREMENT_BLUETOOTH_RX_MS"/>
+		<field name="MEASUREMENT_BLUETOOTH_RX_PACKETS"/>
+		<field name="MEASUREMENT_BLUETOOTH_TX_BYTES"/>
+		<field name="MEASUREMENT_BLUETOOTH_TX_MS"/>
+		<field name="MEASUREMENT_BLUETOOTH_TX_PACKETS"/>
+		<field name="MEASUREMENT_BUTTON_USER_ACTIVITY_COUNT"/>
+		<field name="MEASUREMENT_CPU_POWER_MAMS" deprecated="26"/>
+		<field name="MEASUREMENT_MOBILE_IDLE_MS"/>
+		<field name="MEASUREMENT_MOBILE_POWER_MAMS"/>
+		<field name="MEASUREMENT_MOBILE_RX_BYTES"/>
+		<field name="MEASUREMENT_MOBILE_RX_MS"/>
+		<field name="MEASUREMENT_MOBILE_RX_PACKETS"/>
+		<field name="MEASUREMENT_MOBILE_TX_BYTES"/>
+		<field name="MEASUREMENT_MOBILE_TX_MS"/>
+		<field name="MEASUREMENT_MOBILE_TX_PACKETS"/>
+		<field name="MEASUREMENT_OTHER_USER_ACTIVITY_COUNT"/>
+		<field name="MEASUREMENT_REALTIME_BATTERY_MS"/>
+		<field name="MEASUREMENT_REALTIME_SCREEN_OFF_BATTERY_MS"/>
+		<field name="MEASUREMENT_SYSTEM_CPU_TIME_MS"/>
+		<field name="MEASUREMENT_TOUCH_USER_ACTIVITY_COUNT"/>
+		<field name="MEASUREMENT_UPTIME_BATTERY_MS"/>
+		<field name="MEASUREMENT_UPTIME_SCREEN_OFF_BATTERY_MS"/>
+		<field name="MEASUREMENT_USER_CPU_TIME_MS"/>
+		<field name="MEASUREMENT_WIFI_FULL_LOCK_MS"/>
+		<field name="MEASUREMENT_WIFI_IDLE_MS"/>
+		<field name="MEASUREMENT_WIFI_MULTICAST_MS"/>
+		<field name="MEASUREMENT_WIFI_POWER_MAMS"/>
+		<field name="MEASUREMENT_WIFI_RUNNING_MS"/>
+		<field name="MEASUREMENT_WIFI_RX_BYTES"/>
+		<field name="MEASUREMENT_WIFI_RX_MS"/>
+		<field name="MEASUREMENT_WIFI_RX_PACKETS"/>
+		<field name="MEASUREMENT_WIFI_TX_BYTES"/>
+		<field name="MEASUREMENT_WIFI_TX_MS"/>
+		<field name="MEASUREMENT_WIFI_TX_PACKETS"/>
+		<field name="STATS_PACKAGES"/>
+		<field name="STATS_PIDS"/>
+		<field name="STATS_PROCESSES"/>
+		<field name="TIMERS_JOBS"/>
+		<field name="TIMERS_SENSORS"/>
+		<field name="TIMERS_SYNCS"/>
+		<field name="TIMERS_WAKELOCKS_DRAW"/>
+		<field name="TIMERS_WAKELOCKS_FULL"/>
+		<field name="TIMERS_WAKELOCKS_PARTIAL"/>
+		<field name="TIMERS_WAKELOCKS_WINDOW"/>
+		<field name="TIMER_AUDIO"/>
+		<field name="TIMER_BLUETOOTH_SCAN"/>
+		<field name="TIMER_CAMERA"/>
+		<field name="TIMER_FLASHLIGHT"/>
+		<field name="TIMER_FOREGROUND_ACTIVITY"/>
+		<field name="TIMER_GPS_SENSOR"/>
+		<field name="TIMER_MOBILE_RADIO_ACTIVE"/>
+		<field name="TIMER_PROCESS_STATE_BACKGROUND_MS"/>
+		<field name="TIMER_PROCESS_STATE_CACHED_MS"/>
+		<field name="TIMER_PROCESS_STATE_FOREGROUND_MS"/>
+		<field name="TIMER_PROCESS_STATE_FOREGROUND_SERVICE_MS"/>
+		<field name="TIMER_PROCESS_STATE_TOP_MS"/>
+		<field name="TIMER_PROCESS_STATE_TOP_SLEEPING_MS"/>
+		<field name="TIMER_VIBRATOR"/>
+		<field name="TIMER_VIDEO"/>
+		<field name="TIMER_WIFI_SCAN"/>
+	</class>
+	<class name="android/os/storage/OnObbStateChangeListener" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onObbStateChange(Ljava/lang/String;I)V"/>
+		<field name="ERROR_ALREADY_MOUNTED"/>
+		<field name="ERROR_COULD_NOT_MOUNT"/>
+		<field name="ERROR_COULD_NOT_UNMOUNT"/>
+		<field name="ERROR_INTERNAL"/>
+		<field name="ERROR_NOT_MOUNTED"/>
+		<field name="ERROR_PERMISSION_DENIED"/>
+		<field name="MOUNTED"/>
+		<field name="UNMOUNTED"/>
+	</class>
+	<class name="android/os/storage/StorageManager" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="allocateBytes(Ljava/io/FileDescriptor;J)V" since="26"/>
+		<method name="allocateBytes(Ljava/util/UUID;J)V" since="26"/>
+		<method name="getAllocatableBytes(Ljava/util/UUID;)J" since="26"/>
+		<method name="getCacheQuotaBytes(Ljava/util/UUID;)J" since="26"/>
+		<method name="getCacheSizeBytes(Ljava/util/UUID;)J" since="26"/>
+		<method name="getManageSpaceActivityIntent(Ljava/lang/String;I)Landroid/app/PendingIntent;" since="31"/>
+		<method name="getMountedObbPath(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getPrimaryStorageVolume()Landroid/os/storage/StorageVolume;" since="24"/>
+		<method name="getRecentStorageVolumes()Ljava/util/List;" since="30"/>
+		<method name="getStorageVolume(Landroid/net/Uri;)Landroid/os/storage/StorageVolume;" since="29"/>
+		<method name="getStorageVolume(Ljava/io/File;)Landroid/os/storage/StorageVolume;" since="24"/>
+		<method name="getStorageVolumes()Ljava/util/List;" since="24"/>
+		<method name="getUuidForPath(Ljava/io/File;)Ljava/util/UUID;" since="26"/>
+		<method name="isAllocationSupported(Ljava/io/FileDescriptor;)Z" since="27"/>
+		<method name="isCacheBehaviorGroup(Ljava/io/File;)Z" since="26"/>
+		<method name="isCacheBehaviorTombstone(Ljava/io/File;)Z" since="26"/>
+		<method name="isCheckpointSupported()Z" since="30"/>
+		<method name="isEncrypted(Ljava/io/File;)Z" since="24"/>
+		<method name="isObbMounted(Ljava/lang/String;)Z"/>
+		<method name="mountObb(Ljava/lang/String;Ljava/lang/String;Landroid/os/storage/OnObbStateChangeListener;)Z"/>
+		<method name="openProxyFileDescriptor(ILandroid/os/ProxyFileDescriptorCallback;Landroid/os/Handler;)Landroid/os/ParcelFileDescriptor;" since="26"/>
+		<method name="registerStorageVolumeCallback(Ljava/util/concurrent/Executor;Landroid/os/storage/StorageManager$StorageVolumeCallback;)V" since="30"/>
+		<method name="setCacheBehaviorGroup(Ljava/io/File;Z)V" since="26"/>
+		<method name="setCacheBehaviorTombstone(Ljava/io/File;Z)V" since="26"/>
+		<method name="unmountObb(Ljava/lang/String;ZLandroid/os/storage/OnObbStateChangeListener;)Z"/>
+		<method name="unregisterStorageVolumeCallback(Landroid/os/storage/StorageManager$StorageVolumeCallback;)V" since="30"/>
+		<field name="ACTION_CLEAR_APP_CACHE" since="30"/>
+		<field name="ACTION_MANAGE_STORAGE" since="25"/>
+		<field name="EXTRA_REQUESTED_BYTES" since="26"/>
+		<field name="EXTRA_UUID" since="26"/>
+		<field name="UUID_DEFAULT" since="26"/>
+	</class>
+	<class name="android/os/storage/StorageManager$StorageVolumeCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onStateChanged(Landroid/os/storage/StorageVolume;)V"/>
+	</class>
+	<class name="android/os/storage/StorageVolume" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createAccessIntent(Ljava/lang/String;)Landroid/content/Intent;" deprecated="29"/>
+		<method name="createOpenDocumentTreeIntent()Landroid/content/Intent;" since="29"/>
+		<method name="getDescription(Landroid/content/Context;)Ljava/lang/String;"/>
+		<method name="getDirectory()Ljava/io/File;" since="30"/>
+		<method name="getMediaStoreVolumeName()Ljava/lang/String;" since="30"/>
+		<method name="getState()Ljava/lang/String;"/>
+		<method name="getStorageUuid()Ljava/util/UUID;" since="31"/>
+		<method name="getUuid()Ljava/lang/String;"/>
+		<method name="isEmulated()Z"/>
+		<method name="isPrimary()Z"/>
+		<method name="isRemovable()Z"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_STORAGE_VOLUME"/>
+	</class>
+	<class name="android/os/strictmode/CleartextNetworkViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/ContentUriWithoutPermissionViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/CredentialProtectedWhileLockedViolation" since="29">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/CustomViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/DiskReadViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/DiskWriteViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/FileUriExposedViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/ImplicitDirectBootViolation" since="29">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/IncorrectContextUseViolation" since="31">
+		<extends name="android/os/strictmode/Violation"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/os/strictmode/InstanceCountViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+		<method name="getNumberOfInstances()J"/>
+	</class>
+	<class name="android/os/strictmode/IntentReceiverLeakedViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/LeakedClosableViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/NetworkViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/NonSdkApiUsedViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/ResourceMismatchViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/ServiceConnectionLeakedViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/SqliteObjectLeakedViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/UnbufferedIoViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/UnsafeIntentLaunchViolation" since="31">
+		<extends name="android/os/strictmode/Violation"/>
+		<method name="&lt;init>(Landroid/content/Intent;)V"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+	</class>
+	<class name="android/os/strictmode/UntaggedSocketViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/os/strictmode/Violation" since="28">
+		<extends name="java/lang/Throwable"/>
+	</class>
+	<class name="android/os/strictmode/WebViewMethodCalledOnWrongThreadViolation" since="28">
+		<extends name="android/os/strictmode/Violation"/>
+	</class>
+	<class name="android/preference/CheckBoxPreference" since="1" deprecated="29">
+		<extends name="android/preference/Preference" removed="14"/>
+		<extends name="android/preference/TwoStatePreference" since="14"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getDisableDependentsState()Z" removed="14"/>
+		<method name="getSummaryOff()Ljava/lang/CharSequence;" removed="14"/>
+		<method name="getSummaryOn()Ljava/lang/CharSequence;" removed="14"/>
+		<method name="isChecked()Z" removed="14"/>
+		<method name="setChecked(Z)V" removed="14"/>
+		<method name="setDisableDependentsState(Z)V" removed="14"/>
+		<method name="setSummaryOff(I)V" removed="14"/>
+		<method name="setSummaryOff(Ljava/lang/CharSequence;)V" removed="14"/>
+		<method name="setSummaryOn(I)V" removed="14"/>
+		<method name="setSummaryOn(Ljava/lang/CharSequence;)V" removed="14"/>
+	</class>
+	<class name="android/preference/DialogPreference" since="1" deprecated="29">
+		<extends name="android/preference/Preference"/>
+		<implements name="android/content/DialogInterface$OnClickListener"/>
+		<implements name="android/content/DialogInterface$OnDismissListener"/>
+		<implements name="android/preference/PreferenceManager$OnActivityDestroyListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" since="21" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getDialog()Landroid/app/Dialog;" since="3" deprecated="29"/>
+		<method name="getDialogIcon()Landroid/graphics/drawable/Drawable;" deprecated="29"/>
+		<method name="getDialogLayoutResource()I" deprecated="29"/>
+		<method name="getDialogMessage()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getDialogTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getNegativeButtonText()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getPositiveButtonText()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="onBindDialogView(Landroid/view/View;)V" deprecated="29"/>
+		<method name="onCreateDialogView()Landroid/view/View;" deprecated="29"/>
+		<method name="onDialogClosed(Z)V" deprecated="29"/>
+		<method name="onPrepareDialogBuilder(Landroid/app/AlertDialog$Builder;)V" deprecated="29"/>
+		<method name="setDialogIcon(I)V" deprecated="29"/>
+		<method name="setDialogIcon(Landroid/graphics/drawable/Drawable;)V" deprecated="29"/>
+		<method name="setDialogLayoutResource(I)V" deprecated="29"/>
+		<method name="setDialogMessage(I)V" deprecated="29"/>
+		<method name="setDialogMessage(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setDialogTitle(I)V" deprecated="29"/>
+		<method name="setDialogTitle(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setNegativeButtonText(I)V" deprecated="29"/>
+		<method name="setNegativeButtonText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setPositiveButtonText(I)V" deprecated="29"/>
+		<method name="setPositiveButtonText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="showDialog(Landroid/os/Bundle;)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/EditTextPreference" since="1" deprecated="29">
+		<extends name="android/preference/DialogPreference"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getEditText()Landroid/widget/EditText;" deprecated="29"/>
+		<method name="getText()Ljava/lang/String;" deprecated="29"/>
+		<method name="onAddEditTextToDialogView(Landroid/view/View;Landroid/widget/EditText;)V" deprecated="29"/>
+		<method name="setText(Ljava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/ListPreference" since="1" deprecated="29">
+		<extends name="android/preference/DialogPreference"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="findIndexOfValue(Ljava/lang/String;)I" deprecated="29"/>
+		<method name="getEntries()[Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getEntry()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getEntryValues()[Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getValue()Ljava/lang/String;" deprecated="29"/>
+		<method name="setEntries(I)V" deprecated="29"/>
+		<method name="setEntries([Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setEntryValues(I)V" deprecated="29"/>
+		<method name="setEntryValues([Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setValue(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setValueIndex(I)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/MultiSelectListPreference" since="11" deprecated="29">
+		<extends name="android/preference/DialogPreference"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="findIndexOfValue(Ljava/lang/String;)I" deprecated="29"/>
+		<method name="getEntries()[Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getEntryValues()[Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getValues()Ljava/util/Set;" deprecated="29"/>
+		<method name="setEntries(I)V" deprecated="29"/>
+		<method name="setEntries([Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setEntryValues(I)V" deprecated="29"/>
+		<method name="setEntryValues([Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setValues(Ljava/util/Set;)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/Preference" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="callChangeListener(Ljava/lang/Object;)Z" deprecated="29"/>
+		<method name="compareTo(Landroid/preference/Preference;)I" deprecated="29"/>
+		<method name="findPreferenceInHierarchy(Ljava/lang/String;)Landroid/preference/Preference;" deprecated="29"/>
+		<method name="getContext()Landroid/content/Context;" deprecated="29"/>
+		<method name="getDependency()Ljava/lang/String;" deprecated="29"/>
+		<method name="getEditor()Landroid/content/SharedPreferences$Editor;" deprecated="29"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="11" deprecated="29"/>
+		<method name="getFragment()Ljava/lang/String;" since="11" deprecated="29"/>
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;" since="11" deprecated="29"/>
+		<method name="getIntent()Landroid/content/Intent;" deprecated="29"/>
+		<method name="getKey()Ljava/lang/String;" deprecated="29"/>
+		<method name="getLayoutResource()I" deprecated="29"/>
+		<method name="getOnPreferenceChangeListener()Landroid/preference/Preference$OnPreferenceChangeListener;" deprecated="29"/>
+		<method name="getOnPreferenceClickListener()Landroid/preference/Preference$OnPreferenceClickListener;" deprecated="29"/>
+		<method name="getOrder()I" deprecated="29"/>
+		<method name="getParent()Landroid/preference/PreferenceGroup;" since="26" deprecated="29"/>
+		<method name="getPersistedBoolean(Z)Z" deprecated="29"/>
+		<method name="getPersistedFloat(F)F" deprecated="29"/>
+		<method name="getPersistedInt(I)I" deprecated="29"/>
+		<method name="getPersistedLong(J)J" deprecated="29"/>
+		<method name="getPersistedString(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="getPersistedStringSet(Ljava/util/Set;)Ljava/util/Set;" since="24" deprecated="29"/>
+		<method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26" deprecated="29"/>
+		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="29"/>
+		<method name="getSharedPreferences()Landroid/content/SharedPreferences;" deprecated="29"/>
+		<method name="getShouldDisableView()Z" deprecated="29"/>
+		<method name="getSummary()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getTitle()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getTitleRes()I" since="14" deprecated="29"/>
+		<method name="getView(Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;" deprecated="29"/>
+		<method name="getWidgetLayoutResource()I" deprecated="29"/>
+		<method name="hasKey()Z" deprecated="29"/>
+		<method name="isEnabled()Z" deprecated="29"/>
+		<method name="isIconSpaceReserved()Z" since="26" deprecated="29"/>
+		<method name="isPersistent()Z" deprecated="29"/>
+		<method name="isRecycleEnabled()Z" since="26" deprecated="29"/>
+		<method name="isSelectable()Z" deprecated="29"/>
+		<method name="isSingleLineTitle()Z" since="26" deprecated="29"/>
+		<method name="notifyChanged()V" deprecated="29"/>
+		<method name="notifyDependencyChange(Z)V" deprecated="29"/>
+		<method name="notifyHierarchyChanged()V" deprecated="29"/>
+		<method name="onAttachedToActivity()V" deprecated="29"/>
+		<method name="onAttachedToHierarchy(Landroid/preference/PreferenceManager;)V" deprecated="29"/>
+		<method name="onBindView(Landroid/view/View;)V" deprecated="29"/>
+		<method name="onClick()V" deprecated="29"/>
+		<method name="onCreateView(Landroid/view/ViewGroup;)Landroid/view/View;" deprecated="29"/>
+		<method name="onDependencyChanged(Landroid/preference/Preference;Z)V" deprecated="29"/>
+		<method name="onGetDefaultValue(Landroid/content/res/TypedArray;I)Ljava/lang/Object;" deprecated="29"/>
+		<method name="onParentChanged(Landroid/preference/Preference;Z)V" since="19" deprecated="29"/>
+		<method name="onPrepareForRemoval()V" deprecated="29"/>
+		<method name="onRestoreInstanceState(Landroid/os/Parcelable;)V" deprecated="29"/>
+		<method name="onSaveInstanceState()Landroid/os/Parcelable;" deprecated="29"/>
+		<method name="onSetInitialValue(ZLjava/lang/Object;)V" deprecated="29"/>
+		<method name="peekExtras()Landroid/os/Bundle;" since="11" deprecated="29"/>
+		<method name="persistBoolean(Z)Z" deprecated="29"/>
+		<method name="persistFloat(F)Z" deprecated="29"/>
+		<method name="persistInt(I)Z" deprecated="29"/>
+		<method name="persistLong(J)Z" deprecated="29"/>
+		<method name="persistString(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="persistStringSet(Ljava/util/Set;)Z" since="24" deprecated="29"/>
+		<method name="restoreHierarchyState(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="saveHierarchyState(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="setDefaultValue(Ljava/lang/Object;)V" deprecated="29"/>
+		<method name="setDependency(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setEnabled(Z)V" deprecated="29"/>
+		<method name="setFragment(Ljava/lang/String;)V" since="11" deprecated="29"/>
+		<method name="setIcon(I)V" since="11" deprecated="29"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)V" since="11" deprecated="29"/>
+		<method name="setIconSpaceReserved(Z)V" since="26" deprecated="29"/>
+		<method name="setIntent(Landroid/content/Intent;)V" deprecated="29"/>
+		<method name="setKey(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setLayoutResource(I)V" deprecated="29"/>
+		<method name="setOnPreferenceChangeListener(Landroid/preference/Preference$OnPreferenceChangeListener;)V" deprecated="29"/>
+		<method name="setOnPreferenceClickListener(Landroid/preference/Preference$OnPreferenceClickListener;)V" deprecated="29"/>
+		<method name="setOrder(I)V" deprecated="29"/>
+		<method name="setPersistent(Z)V" deprecated="29"/>
+		<method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26" deprecated="29"/>
+		<method name="setRecycleEnabled(Z)V" since="26" deprecated="29"/>
+		<method name="setSelectable(Z)V" deprecated="29"/>
+		<method name="setShouldDisableView(Z)V" deprecated="29"/>
+		<method name="setSingleLineTitle(Z)V" since="26" deprecated="29"/>
+		<method name="setSummary(I)V" deprecated="29"/>
+		<method name="setSummary(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setTitle(I)V" deprecated="29"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setWidgetLayoutResource(I)V" deprecated="29"/>
+		<method name="shouldCommit()Z" deprecated="29"/>
+		<method name="shouldDisableDependents()Z" deprecated="29"/>
+		<method name="shouldPersist()Z" deprecated="29"/>
+		<field name="DEFAULT_ORDER" deprecated="29"/>
+	</class>
+	<class name="android/preference/Preference$BaseSavedState" since="1" deprecated="29">
+		<extends name="android/view/AbsSavedState"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/os/Parcelable;)V" deprecated="29"/>
+		<field name="CREATOR" deprecated="29"/>
+	</class>
+	<class name="android/preference/Preference$OnPreferenceChangeListener" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onPreferenceChange(Landroid/preference/Preference;Ljava/lang/Object;)Z" deprecated="29"/>
+	</class>
+	<class name="android/preference/Preference$OnPreferenceClickListener" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onPreferenceClick(Landroid/preference/Preference;)Z" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceActivity" since="1" deprecated="29">
+		<extends name="android/app/ListActivity"/>
+		<implements name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="15"/>
+		<method name="addPreferencesFromResource(I)V" deprecated="15"/>
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="15"/>
+		<method name="finishPreferencePanel(Landroid/app/Fragment;ILandroid/content/Intent;)V" since="11" deprecated="29"/>
+		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="15"/>
+		<method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="15"/>
+		<method name="hasHeaders()Z" since="11" deprecated="29"/>
+		<method name="invalidateHeaders()V" since="11" deprecated="29"/>
+		<method name="isMultiPane()Z" since="11" deprecated="29"/>
+		<method name="isValidFragment(Ljava/lang/String;)Z" since="19" deprecated="29"/>
+		<method name="loadHeadersFromResource(ILjava/util/List;)V" since="11" deprecated="29"/>
+		<method name="onBuildHeaders(Ljava/util/List;)V" since="11" deprecated="29"/>
+		<method name="onBuildStartFragmentIntent(Ljava/lang/String;Landroid/os/Bundle;II)Landroid/content/Intent;" since="14" deprecated="29"/>
+		<method name="onGetInitialHeader()Landroid/preference/PreferenceActivity$Header;" since="11" deprecated="29"/>
+		<method name="onGetNewHeader()Landroid/preference/PreferenceActivity$Header;" since="11" deprecated="29"/>
+		<method name="onHeaderClick(Landroid/preference/PreferenceActivity$Header;I)V" since="11" deprecated="29"/>
+		<method name="onIsHidingHeaders()Z" since="11" deprecated="29"/>
+		<method name="onIsMultiPane()Z" since="11" deprecated="29"/>
+		<method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="15"/>
+		<method name="setListFooter(Landroid/view/View;)V" since="11" deprecated="29"/>
+		<method name="setParentTitle(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)V" since="11" deprecated="29"/>
+		<method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="15"/>
+		<method name="showBreadCrumbs(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V" since="11" deprecated="29"/>
+		<method name="startPreferenceFragment(Landroid/app/Fragment;Z)V" since="11" deprecated="29"/>
+		<method name="startPreferencePanel(Ljava/lang/String;Landroid/os/Bundle;ILjava/lang/CharSequence;Landroid/app/Fragment;I)V" since="11" deprecated="29"/>
+		<method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;I)V" since="11" deprecated="29"/>
+		<method name="startWithFragment(Ljava/lang/String;Landroid/os/Bundle;Landroid/app/Fragment;III)V" since="14" deprecated="29"/>
+		<method name="switchToHeader(Landroid/preference/PreferenceActivity$Header;)V" since="11" deprecated="29"/>
+		<method name="switchToHeader(Ljava/lang/String;Landroid/os/Bundle;)V" since="11" deprecated="29"/>
+		<field name="EXTRA_NO_HEADERS" since="11" deprecated="29"/>
+		<field name="EXTRA_SHOW_FRAGMENT" since="11" deprecated="29"/>
+		<field name="EXTRA_SHOW_FRAGMENT_ARGUMENTS" since="11" deprecated="29"/>
+		<field name="EXTRA_SHOW_FRAGMENT_SHORT_TITLE" since="14" deprecated="29"/>
+		<field name="EXTRA_SHOW_FRAGMENT_TITLE" since="14" deprecated="29"/>
+		<field name="HEADER_ID_UNDEFINED" since="11" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceActivity$Header" since="11" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getBreadCrumbShortTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getBreadCrumbTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getSummary(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getTitle(Landroid/content/res/Resources;)Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V" deprecated="29"/>
+		<field name="CREATOR" deprecated="29"/>
+		<field name="breadCrumbShortTitle" deprecated="29"/>
+		<field name="breadCrumbShortTitleRes" deprecated="29"/>
+		<field name="breadCrumbTitle" deprecated="29"/>
+		<field name="breadCrumbTitleRes" deprecated="29"/>
+		<field name="extras" deprecated="29"/>
+		<field name="fragment" deprecated="29"/>
+		<field name="fragmentArguments" deprecated="29"/>
+		<field name="iconRes" deprecated="29"/>
+		<field name="id" deprecated="29"/>
+		<field name="intent" deprecated="29"/>
+		<field name="summary" deprecated="29"/>
+		<field name="summaryRes" deprecated="29"/>
+		<field name="title" deprecated="29"/>
+		<field name="titleRes" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceCategory" since="1" deprecated="29">
+		<extends name="android/preference/PreferenceGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceDataStore" since="26" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="getBoolean(Ljava/lang/String;Z)Z" deprecated="29"/>
+		<method name="getFloat(Ljava/lang/String;F)F" deprecated="29"/>
+		<method name="getInt(Ljava/lang/String;I)I" deprecated="29"/>
+		<method name="getLong(Ljava/lang/String;J)J" deprecated="29"/>
+		<method name="getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="getStringSet(Ljava/lang/String;Ljava/util/Set;)Ljava/util/Set;" deprecated="29"/>
+		<method name="putBoolean(Ljava/lang/String;Z)V" deprecated="29"/>
+		<method name="putFloat(Ljava/lang/String;F)V" deprecated="29"/>
+		<method name="putInt(Ljava/lang/String;I)V" deprecated="29"/>
+		<method name="putLong(Ljava/lang/String;J)V" deprecated="29"/>
+		<method name="putString(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="putStringSet(Ljava/lang/String;Ljava/util/Set;)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="addPreferencesFromIntent(Landroid/content/Intent;)V" deprecated="29"/>
+		<method name="addPreferencesFromResource(I)V" deprecated="29"/>
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29"/>
+		<method name="getPreferenceManager()Landroid/preference/PreferenceManager;" deprecated="29"/>
+		<method name="getPreferenceScreen()Landroid/preference/PreferenceScreen;" deprecated="29"/>
+		<method name="onPreferenceTreeClick(Landroid/preference/PreferenceScreen;Landroid/preference/Preference;)Z" deprecated="29"/>
+		<method name="setPreferenceScreen(Landroid/preference/PreferenceScreen;)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceFragment$OnPreferenceStartFragmentCallback" since="11" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="onPreferenceStartFragment(Landroid/preference/PreferenceFragment;Landroid/preference/Preference;)Z" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceGroup" since="1" deprecated="29">
+		<extends name="android/preference/Preference"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="addItemFromInflater(Landroid/preference/Preference;)V" deprecated="29"/>
+		<method name="addPreference(Landroid/preference/Preference;)Z" deprecated="29"/>
+		<method name="dispatchRestoreInstanceState(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="dispatchSaveInstanceState(Landroid/os/Bundle;)V" deprecated="29"/>
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29"/>
+		<method name="getPreference(I)Landroid/preference/Preference;" deprecated="29"/>
+		<method name="getPreferenceCount()I" deprecated="29"/>
+		<method name="isOnSameScreenAsChildren()Z" deprecated="29"/>
+		<method name="isOrderingAsAdded()Z" deprecated="29"/>
+		<method name="onPrepareAddPreference(Landroid/preference/Preference;)Z" deprecated="29"/>
+		<method name="removeAll()V" deprecated="29"/>
+		<method name="removePreference(Landroid/preference/Preference;)Z" deprecated="29"/>
+		<method name="setOrderingAsAdded(Z)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceManager" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="createPreferenceScreen(Landroid/content/Context;)Landroid/preference/PreferenceScreen;" deprecated="29"/>
+		<method name="findPreference(Ljava/lang/CharSequence;)Landroid/preference/Preference;" deprecated="29"/>
+		<method name="getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;" deprecated="29"/>
+		<method name="getDefaultSharedPreferencesName(Landroid/content/Context;)Ljava/lang/String;" since="24" deprecated="29"/>
+		<method name="getPreferenceDataStore()Landroid/preference/PreferenceDataStore;" since="26" deprecated="29"/>
+		<method name="getSharedPreferences()Landroid/content/SharedPreferences;" deprecated="29"/>
+		<method name="getSharedPreferencesMode()I" deprecated="29"/>
+		<method name="getSharedPreferencesName()Ljava/lang/String;" deprecated="29"/>
+		<method name="isStorageDefault()Z" since="24" deprecated="29"/>
+		<method name="isStorageDeviceProtected()Z" since="24" deprecated="29"/>
+		<method name="setDefaultValues(Landroid/content/Context;IZ)V" deprecated="29"/>
+		<method name="setDefaultValues(Landroid/content/Context;Ljava/lang/String;IIZ)V" deprecated="29"/>
+		<method name="setPreferenceDataStore(Landroid/preference/PreferenceDataStore;)V" since="26" deprecated="29"/>
+		<method name="setSharedPreferencesMode(I)V" deprecated="29"/>
+		<method name="setSharedPreferencesName(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setStorageDefault()V" since="24" deprecated="29"/>
+		<method name="setStorageDeviceProtected()V" since="24" deprecated="29"/>
+		<field name="KEY_HAS_SET_DEFAULT_VALUES" deprecated="29"/>
+		<field name="METADATA_KEY_PREFERENCES" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceManager$OnActivityDestroyListener" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onActivityDestroy()V" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceManager$OnActivityResultListener" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onActivityResult(IILandroid/content/Intent;)Z" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceManager$OnActivityStopListener" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onActivityStop()V" deprecated="29"/>
+	</class>
+	<class name="android/preference/PreferenceScreen" since="1" deprecated="29">
+		<extends name="android/preference/PreferenceGroup"/>
+		<implements name="android/content/DialogInterface$OnDismissListener"/>
+		<implements name="android/widget/AdapterView$OnItemClickListener"/>
+		<method name="bind(Landroid/widget/ListView;)V" deprecated="29"/>
+		<method name="getDialog()Landroid/app/Dialog;" deprecated="29"/>
+		<method name="getRootAdapter()Landroid/widget/ListAdapter;" deprecated="29"/>
+		<method name="onCreateRootAdapter()Landroid/widget/ListAdapter;" deprecated="29"/>
+	</class>
+	<class name="android/preference/RingtonePreference" since="1" deprecated="29">
+		<extends name="android/preference/Preference"/>
+		<implements name="android/preference/PreferenceManager$OnActivityResultListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getRingtoneType()I" deprecated="29"/>
+		<method name="getShowDefault()Z" deprecated="29"/>
+		<method name="getShowSilent()Z" deprecated="29"/>
+		<method name="onPrepareRingtonePickerIntent(Landroid/content/Intent;)V" deprecated="29"/>
+		<method name="onRestoreRingtone()Landroid/net/Uri;" deprecated="29"/>
+		<method name="onSaveRingtone(Landroid/net/Uri;)V" deprecated="29"/>
+		<method name="setRingtoneType(I)V" deprecated="29"/>
+		<method name="setShowDefault(Z)V" deprecated="29"/>
+		<method name="setShowSilent(Z)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/SwitchPreference" since="14" deprecated="29">
+		<extends name="android/preference/TwoStatePreference"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getSwitchTextOff()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getSwitchTextOn()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="setSwitchTextOff(I)V" deprecated="29"/>
+		<method name="setSwitchTextOff(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setSwitchTextOn(I)V" deprecated="29"/>
+		<method name="setSwitchTextOn(Ljava/lang/CharSequence;)V" deprecated="29"/>
+	</class>
+	<class name="android/preference/TwoStatePreference" since="14" deprecated="29">
+		<extends name="android/preference/Preference"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getDisableDependentsState()Z" deprecated="29"/>
+		<method name="getSummaryOff()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getSummaryOn()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="isChecked()Z" deprecated="29"/>
+		<method name="setChecked(Z)V" deprecated="29"/>
+		<method name="setDisableDependentsState(Z)V" deprecated="29"/>
+		<method name="setSummaryOff(I)V" deprecated="29"/>
+		<method name="setSummaryOff(Ljava/lang/CharSequence;)V" deprecated="29"/>
+		<method name="setSummaryOn(I)V" deprecated="29"/>
+		<method name="setSummaryOn(Ljava/lang/CharSequence;)V" deprecated="29"/>
+	</class>
+	<class name="android/print/PageRange" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getEnd()I"/>
+		<method name="getStart()I"/>
+		<field name="ALL_PAGES"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/print/PrintAttributes" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getColorMode()I"/>
+		<method name="getDuplexMode()I" since="23"/>
+		<method name="getMediaSize()Landroid/print/PrintAttributes$MediaSize;"/>
+		<method name="getMinMargins()Landroid/print/PrintAttributes$Margins;"/>
+		<method name="getResolution()Landroid/print/PrintAttributes$Resolution;"/>
+		<field name="COLOR_MODE_COLOR"/>
+		<field name="COLOR_MODE_MONOCHROME"/>
+		<field name="CREATOR"/>
+		<field name="DUPLEX_MODE_LONG_EDGE" since="23"/>
+		<field name="DUPLEX_MODE_NONE" since="23"/>
+		<field name="DUPLEX_MODE_SHORT_EDGE" since="23"/>
+	</class>
+	<class name="android/print/PrintAttributes$Builder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/print/PrintAttributes;"/>
+		<method name="setColorMode(I)Landroid/print/PrintAttributes$Builder;"/>
+		<method name="setDuplexMode(I)Landroid/print/PrintAttributes$Builder;" since="23"/>
+		<method name="setMediaSize(Landroid/print/PrintAttributes$MediaSize;)Landroid/print/PrintAttributes$Builder;"/>
+		<method name="setMinMargins(Landroid/print/PrintAttributes$Margins;)Landroid/print/PrintAttributes$Builder;"/>
+		<method name="setResolution(Landroid/print/PrintAttributes$Resolution;)Landroid/print/PrintAttributes$Builder;"/>
+	</class>
+	<class name="android/print/PrintAttributes$Margins" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="getBottomMils()I"/>
+		<method name="getLeftMils()I"/>
+		<method name="getRightMils()I"/>
+		<method name="getTopMils()I"/>
+		<field name="NO_MARGINS"/>
+	</class>
+	<class name="android/print/PrintAttributes$MediaSize" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;II)V"/>
+		<method name="asLandscape()Landroid/print/PrintAttributes$MediaSize;"/>
+		<method name="asPortrait()Landroid/print/PrintAttributes$MediaSize;"/>
+		<method name="getHeightMils()I"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getLabel(Landroid/content/pm/PackageManager;)Ljava/lang/String;"/>
+		<method name="getWidthMils()I"/>
+		<method name="isPortrait()Z"/>
+		<field name="ANSI_C" since="31"/>
+		<field name="ANSI_D" since="31"/>
+		<field name="ANSI_E" since="31"/>
+		<field name="ANSI_F" since="31"/>
+		<field name="ISO_A0"/>
+		<field name="ISO_A1"/>
+		<field name="ISO_A10"/>
+		<field name="ISO_A2"/>
+		<field name="ISO_A3"/>
+		<field name="ISO_A4"/>
+		<field name="ISO_A5"/>
+		<field name="ISO_A6"/>
+		<field name="ISO_A7"/>
+		<field name="ISO_A8"/>
+		<field name="ISO_A9"/>
+		<field name="ISO_B0"/>
+		<field name="ISO_B1"/>
+		<field name="ISO_B10"/>
+		<field name="ISO_B2"/>
+		<field name="ISO_B3"/>
+		<field name="ISO_B4"/>
+		<field name="ISO_B5"/>
+		<field name="ISO_B6"/>
+		<field name="ISO_B7"/>
+		<field name="ISO_B8"/>
+		<field name="ISO_B9"/>
+		<field name="ISO_C0"/>
+		<field name="ISO_C1"/>
+		<field name="ISO_C10"/>
+		<field name="ISO_C2"/>
+		<field name="ISO_C3"/>
+		<field name="ISO_C4"/>
+		<field name="ISO_C5"/>
+		<field name="ISO_C6"/>
+		<field name="ISO_C7"/>
+		<field name="ISO_C8"/>
+		<field name="ISO_C9"/>
+		<field name="JIS_B0"/>
+		<field name="JIS_B1"/>
+		<field name="JIS_B10"/>
+		<field name="JIS_B2"/>
+		<field name="JIS_B3"/>
+		<field name="JIS_B4"/>
+		<field name="JIS_B5"/>
+		<field name="JIS_B6"/>
+		<field name="JIS_B7"/>
+		<field name="JIS_B8"/>
+		<field name="JIS_B9"/>
+		<field name="JIS_EXEC"/>
+		<field name="JPN_CHOU2"/>
+		<field name="JPN_CHOU3"/>
+		<field name="JPN_CHOU4"/>
+		<field name="JPN_HAGAKI"/>
+		<field name="JPN_KAHU"/>
+		<field name="JPN_KAKU2"/>
+		<field name="JPN_OE_PHOTO_L" since="31"/>
+		<field name="JPN_OUFUKU"/>
+		<field name="JPN_YOU4"/>
+		<field name="NA_ARCH_A" since="31"/>
+		<field name="NA_ARCH_B" since="31"/>
+		<field name="NA_ARCH_C" since="31"/>
+		<field name="NA_ARCH_D" since="31"/>
+		<field name="NA_ARCH_E" since="31"/>
+		<field name="NA_ARCH_E1" since="31"/>
+		<field name="NA_FOOLSCAP"/>
+		<field name="NA_GOVT_LETTER"/>
+		<field name="NA_INDEX_3X5"/>
+		<field name="NA_INDEX_4X6"/>
+		<field name="NA_INDEX_5X8"/>
+		<field name="NA_JUNIOR_LEGAL"/>
+		<field name="NA_LEDGER"/>
+		<field name="NA_LEGAL"/>
+		<field name="NA_LETTER"/>
+		<field name="NA_MONARCH"/>
+		<field name="NA_QUARTO"/>
+		<field name="NA_SUPER_B" since="31"/>
+		<field name="NA_TABLOID"/>
+		<field name="OM_DAI_PA_KAI"/>
+		<field name="OM_JUURO_KU_KAI"/>
+		<field name="OM_PA_KAI"/>
+		<field name="PRC_1"/>
+		<field name="PRC_10"/>
+		<field name="PRC_16K"/>
+		<field name="PRC_2"/>
+		<field name="PRC_3"/>
+		<field name="PRC_4"/>
+		<field name="PRC_5"/>
+		<field name="PRC_6"/>
+		<field name="PRC_7"/>
+		<field name="PRC_8"/>
+		<field name="PRC_9"/>
+		<field name="ROC_16K"/>
+		<field name="ROC_8K"/>
+		<field name="UNKNOWN_LANDSCAPE"/>
+		<field name="UNKNOWN_PORTRAIT"/>
+	</class>
+	<class name="android/print/PrintAttributes$Resolution" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;II)V"/>
+		<method name="getHorizontalDpi()I"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getLabel()Ljava/lang/String;"/>
+		<method name="getVerticalDpi()I"/>
+	</class>
+	<class name="android/print/PrintDocumentAdapter" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onFinish()V"/>
+		<method name="onLayout(Landroid/print/PrintAttributes;Landroid/print/PrintAttributes;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$LayoutResultCallback;Landroid/os/Bundle;)V"/>
+		<method name="onStart()V"/>
+		<method name="onWrite([Landroid/print/PageRange;Landroid/os/ParcelFileDescriptor;Landroid/os/CancellationSignal;Landroid/print/PrintDocumentAdapter$WriteResultCallback;)V"/>
+		<field name="EXTRA_PRINT_PREVIEW"/>
+	</class>
+	<class name="android/print/PrintDocumentAdapter$LayoutResultCallback" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onLayoutCancelled()V"/>
+		<method name="onLayoutFailed(Ljava/lang/CharSequence;)V"/>
+		<method name="onLayoutFinished(Landroid/print/PrintDocumentInfo;Z)V"/>
+	</class>
+	<class name="android/print/PrintDocumentAdapter$WriteResultCallback" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onWriteCancelled()V"/>
+		<method name="onWriteFailed(Ljava/lang/CharSequence;)V"/>
+		<method name="onWriteFinished([Landroid/print/PageRange;)V"/>
+	</class>
+	<class name="android/print/PrintDocumentInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getContentType()I"/>
+		<method name="getDataSize()J"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPageCount()I"/>
+		<field name="CONTENT_TYPE_DOCUMENT"/>
+		<field name="CONTENT_TYPE_PHOTO"/>
+		<field name="CONTENT_TYPE_UNKNOWN"/>
+		<field name="CREATOR"/>
+		<field name="PAGE_COUNT_UNKNOWN"/>
+	</class>
+	<class name="android/print/PrintDocumentInfo$Builder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/print/PrintDocumentInfo;"/>
+		<method name="setContentType(I)Landroid/print/PrintDocumentInfo$Builder;"/>
+		<method name="setPageCount(I)Landroid/print/PrintDocumentInfo$Builder;"/>
+	</class>
+	<class name="android/print/PrintJob" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="getId()Landroid/print/PrintJobId;"/>
+		<method name="getInfo()Landroid/print/PrintJobInfo;"/>
+		<method name="isBlocked()Z"/>
+		<method name="isCancelled()Z"/>
+		<method name="isCompleted()Z"/>
+		<method name="isFailed()Z"/>
+		<method name="isQueued()Z"/>
+		<method name="isStarted()Z"/>
+		<method name="restart()V"/>
+	</class>
+	<class name="android/print/PrintJobId" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/print/PrintJobInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAdvancedIntOption(Ljava/lang/String;)I" since="26"/>
+		<method name="getAdvancedStringOption(Ljava/lang/String;)Ljava/lang/String;" since="26"/>
+		<method name="getAttributes()Landroid/print/PrintAttributes;"/>
+		<method name="getCopies()I"/>
+		<method name="getCreationTime()J"/>
+		<method name="getId()Landroid/print/PrintJobId;"/>
+		<method name="getLabel()Ljava/lang/String;"/>
+		<method name="getPages()[Landroid/print/PageRange;"/>
+		<method name="getPrinterId()Landroid/print/PrinterId;"/>
+		<method name="getState()I"/>
+		<method name="hasAdvancedOption(Ljava/lang/String;)Z" since="26"/>
+		<field name="CREATOR"/>
+		<field name="STATE_BLOCKED"/>
+		<field name="STATE_CANCELED"/>
+		<field name="STATE_COMPLETED"/>
+		<field name="STATE_CREATED"/>
+		<field name="STATE_FAILED"/>
+		<field name="STATE_QUEUED"/>
+		<field name="STATE_STARTED"/>
+	</class>
+	<class name="android/print/PrintJobInfo$Builder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/print/PrintJobInfo;)V"/>
+		<method name="build()Landroid/print/PrintJobInfo;"/>
+		<method name="putAdvancedOption(Ljava/lang/String;I)V"/>
+		<method name="putAdvancedOption(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setAttributes(Landroid/print/PrintAttributes;)V"/>
+		<method name="setCopies(I)V"/>
+		<method name="setPages([Landroid/print/PageRange;)V"/>
+	</class>
+	<class name="android/print/PrintManager" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getPrintJobs()Ljava/util/List;"/>
+		<method name="print(Ljava/lang/String;Landroid/print/PrintDocumentAdapter;Landroid/print/PrintAttributes;)Landroid/print/PrintJob;"/>
+	</class>
+	<class name="android/print/PrinterCapabilitiesInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getColorModes()I"/>
+		<method name="getDefaults()Landroid/print/PrintAttributes;"/>
+		<method name="getDuplexModes()I" since="23"/>
+		<method name="getMediaSizes()Ljava/util/List;"/>
+		<method name="getMinMargins()Landroid/print/PrintAttributes$Margins;"/>
+		<method name="getResolutions()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/print/PrinterCapabilitiesInfo$Builder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/print/PrinterId;)V"/>
+		<method name="addMediaSize(Landroid/print/PrintAttributes$MediaSize;Z)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
+		<method name="addResolution(Landroid/print/PrintAttributes$Resolution;Z)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
+		<method name="build()Landroid/print/PrinterCapabilitiesInfo;"/>
+		<method name="setColorModes(II)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
+		<method name="setDuplexModes(II)Landroid/print/PrinterCapabilitiesInfo$Builder;" since="23"/>
+		<method name="setMinMargins(Landroid/print/PrintAttributes$Margins;)Landroid/print/PrinterCapabilitiesInfo$Builder;"/>
+	</class>
+	<class name="android/print/PrinterId" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getLocalId()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/print/PrinterInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCapabilities()Landroid/print/PrinterCapabilitiesInfo;"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getId()Landroid/print/PrinterId;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getStatus()I"/>
+		<field name="CREATOR"/>
+		<field name="STATUS_BUSY"/>
+		<field name="STATUS_IDLE"/>
+		<field name="STATUS_UNAVAILABLE"/>
+	</class>
+	<class name="android/print/PrinterInfo$Builder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/print/PrinterId;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Landroid/print/PrinterInfo;)V"/>
+		<method name="build()Landroid/print/PrinterInfo;"/>
+		<method name="setCapabilities(Landroid/print/PrinterCapabilitiesInfo;)Landroid/print/PrinterInfo$Builder;"/>
+		<method name="setDescription(Ljava/lang/String;)Landroid/print/PrinterInfo$Builder;"/>
+		<method name="setHasCustomPrinterIcon(Z)Landroid/print/PrinterInfo$Builder;" since="24"/>
+		<method name="setIconResourceId(I)Landroid/print/PrinterInfo$Builder;" since="24"/>
+		<method name="setInfoIntent(Landroid/app/PendingIntent;)Landroid/print/PrinterInfo$Builder;" since="24"/>
+		<method name="setName(Ljava/lang/String;)Landroid/print/PrinterInfo$Builder;"/>
+		<method name="setStatus(I)Landroid/print/PrinterInfo$Builder;"/>
+	</class>
+	<class name="android/print/pdf/PrintedPdfDocument" since="19">
+		<extends name="android/graphics/pdf/PdfDocument"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/print/PrintAttributes;)V"/>
+		<method name="getPageContentRect()Landroid/graphics/Rect;"/>
+		<method name="getPageHeight()I"/>
+		<method name="getPageWidth()I"/>
+		<method name="startPage(I)Landroid/graphics/pdf/PdfDocument$Page;"/>
+	</class>
+	<class name="android/printservice/CustomPrinterIconCallback" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onCustomPrinterIconLoaded(Landroid/graphics/drawable/Icon;)Z"/>
+	</class>
+	<class name="android/printservice/PrintDocument" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getData()Landroid/os/ParcelFileDescriptor;"/>
+		<method name="getInfo()Landroid/print/PrintDocumentInfo;"/>
+	</class>
+	<class name="android/printservice/PrintJob" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="block(Ljava/lang/String;)Z"/>
+		<method name="cancel()Z"/>
+		<method name="complete()Z"/>
+		<method name="fail(Ljava/lang/String;)Z"/>
+		<method name="getAdvancedIntOption(Ljava/lang/String;)I"/>
+		<method name="getAdvancedStringOption(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getDocument()Landroid/printservice/PrintDocument;"/>
+		<method name="getId()Landroid/print/PrintJobId;"/>
+		<method name="getInfo()Landroid/print/PrintJobInfo;"/>
+		<method name="getTag()Ljava/lang/String;"/>
+		<method name="hasAdvancedOption(Ljava/lang/String;)Z"/>
+		<method name="isBlocked()Z"/>
+		<method name="isCancelled()Z"/>
+		<method name="isCompleted()Z"/>
+		<method name="isFailed()Z"/>
+		<method name="isQueued()Z"/>
+		<method name="isStarted()Z"/>
+		<method name="setProgress(F)V" since="24"/>
+		<method name="setStatus(I)V" since="24"/>
+		<method name="setStatus(Ljava/lang/CharSequence;)V" since="24"/>
+		<method name="setTag(Ljava/lang/String;)Z"/>
+		<method name="start()Z"/>
+	</class>
+	<class name="android/printservice/PrintService" since="19">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="generatePrinterId(Ljava/lang/String;)Landroid/print/PrinterId;"/>
+		<method name="getActivePrintJobs()Ljava/util/List;"/>
+		<method name="onConnected()V"/>
+		<method name="onCreatePrinterDiscoverySession()Landroid/printservice/PrinterDiscoverySession;"/>
+		<method name="onDisconnected()V"/>
+		<method name="onPrintJobQueued(Landroid/printservice/PrintJob;)V"/>
+		<method name="onRequestCancelPrintJob(Landroid/printservice/PrintJob;)V"/>
+		<field name="EXTRA_CAN_SELECT_PRINTER" since="26"/>
+		<field name="EXTRA_PRINTER_INFO" since="21"/>
+		<field name="EXTRA_PRINT_DOCUMENT_INFO" since="23"/>
+		<field name="EXTRA_PRINT_JOB_INFO"/>
+		<field name="EXTRA_SELECT_PRINTER" since="26"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/printservice/PrinterDiscoverySession" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addPrinters(Ljava/util/List;)V"/>
+		<method name="getPrinters()Ljava/util/List;"/>
+		<method name="getTrackedPrinters()Ljava/util/List;"/>
+		<method name="isDestroyed()Z"/>
+		<method name="isPrinterDiscoveryStarted()Z"/>
+		<method name="onDestroy()V"/>
+		<method name="onRequestCustomPrinterIcon(Landroid/print/PrinterId;Landroid/os/CancellationSignal;Landroid/printservice/CustomPrinterIconCallback;)V" since="24"/>
+		<method name="onStartPrinterDiscovery(Ljava/util/List;)V"/>
+		<method name="onStartPrinterStateTracking(Landroid/print/PrinterId;)V"/>
+		<method name="onStopPrinterDiscovery()V"/>
+		<method name="onStopPrinterStateTracking(Landroid/print/PrinterId;)V"/>
+		<method name="onValidatePrinters(Ljava/util/List;)V"/>
+		<method name="removePrinters(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/provider/AlarmClock" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ACTION_DISMISS_ALARM" since="23"/>
+		<field name="ACTION_DISMISS_TIMER" since="28"/>
+		<field name="ACTION_SET_ALARM"/>
+		<field name="ACTION_SET_TIMER" since="19"/>
+		<field name="ACTION_SHOW_ALARMS" since="19"/>
+		<field name="ACTION_SHOW_TIMERS" since="26"/>
+		<field name="ACTION_SNOOZE_ALARM" since="23"/>
+		<field name="ALARM_SEARCH_MODE_ALL" since="23"/>
+		<field name="ALARM_SEARCH_MODE_LABEL" since="23"/>
+		<field name="ALARM_SEARCH_MODE_NEXT" since="23"/>
+		<field name="ALARM_SEARCH_MODE_TIME" since="23"/>
+		<field name="EXTRA_ALARM_SEARCH_MODE" since="23"/>
+		<field name="EXTRA_ALARM_SNOOZE_DURATION" since="23"/>
+		<field name="EXTRA_DAYS" since="19"/>
+		<field name="EXTRA_HOUR"/>
+		<field name="EXTRA_IS_PM" since="23"/>
+		<field name="EXTRA_LENGTH" since="19"/>
+		<field name="EXTRA_MESSAGE"/>
+		<field name="EXTRA_MINUTES"/>
+		<field name="EXTRA_RINGTONE" since="19"/>
+		<field name="EXTRA_SKIP_UI" since="11"/>
+		<field name="EXTRA_VIBRATE" since="19"/>
+		<field name="VALUE_RINGTONE_SILENT" since="19"/>
+	</class>
+	<class name="android/provider/BaseColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="_COUNT"/>
+		<field name="_ID"/>
+	</class>
+	<class name="android/provider/BlockedNumberContract" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="canCurrentUserBlockNumbers(Landroid/content/Context;)Z"/>
+		<method name="isBlocked(Landroid/content/Context;Ljava/lang/String;)Z"/>
+		<method name="unblock(Landroid/content/Context;Ljava/lang/String;)I"/>
+		<field name="AUTHORITY"/>
+		<field name="AUTHORITY_URI"/>
+	</class>
+	<class name="android/provider/BlockedNumberContract$BlockedNumbers" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="COLUMN_E164_NUMBER"/>
+		<field name="COLUMN_ID"/>
+		<field name="COLUMN_ORIGINAL_NUMBER"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/Browser" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addSearchUrl(Landroid/content/ContentResolver;Ljava/lang/String;)V" removed="23"/>
+		<method name="canClearHistory(Landroid/content/ContentResolver;)Z" removed="23"/>
+		<method name="clearHistory(Landroid/content/ContentResolver;)V" removed="23"/>
+		<method name="clearSearches(Landroid/content/ContentResolver;)V" removed="23"/>
+		<method name="deleteFromHistory(Landroid/content/ContentResolver;Ljava/lang/String;)V" removed="23"/>
+		<method name="deleteHistoryTimeFrame(Landroid/content/ContentResolver;JJ)V" removed="23"/>
+		<method name="getAllBookmarks(Landroid/content/ContentResolver;)Landroid/database/Cursor;" removed="23"/>
+		<method name="getAllVisitedUrls(Landroid/content/ContentResolver;)Landroid/database/Cursor;" removed="23"/>
+		<method name="requestAllIcons(Landroid/content/ContentResolver;Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V" removed="23"/>
+		<method name="saveBookmark(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V" removed="23"/>
+		<method name="sendString(Landroid/content/Context;Ljava/lang/String;)V"/>
+		<method name="truncateHistory(Landroid/content/ContentResolver;)V" removed="23"/>
+		<method name="updateVisitedHistory(Landroid/content/ContentResolver;Ljava/lang/String;Z)V" removed="23"/>
+		<field name="BOOKMARKS_URI" removed="23"/>
+		<field name="EXTRA_APPLICATION_ID" since="3"/>
+		<field name="EXTRA_CREATE_NEW_TAB" since="12"/>
+		<field name="EXTRA_HEADERS" since="8"/>
+		<field name="HISTORY_PROJECTION" removed="23"/>
+		<field name="HISTORY_PROJECTION_BOOKMARK_INDEX" removed="23"/>
+		<field name="HISTORY_PROJECTION_DATE_INDEX" removed="23"/>
+		<field name="HISTORY_PROJECTION_FAVICON_INDEX" removed="23"/>
+		<field name="HISTORY_PROJECTION_ID_INDEX" removed="23"/>
+		<field name="HISTORY_PROJECTION_TITLE_INDEX" removed="23"/>
+		<field name="HISTORY_PROJECTION_URL_INDEX" removed="23"/>
+		<field name="HISTORY_PROJECTION_VISITS_INDEX" removed="23"/>
+		<field name="INITIAL_ZOOM_LEVEL"/>
+		<field name="SEARCHES_PROJECTION" removed="23"/>
+		<field name="SEARCHES_PROJECTION_DATE_INDEX" removed="23"/>
+		<field name="SEARCHES_PROJECTION_SEARCH_INDEX" removed="23"/>
+		<field name="SEARCHES_URI" removed="23"/>
+		<field name="TRUNCATE_HISTORY_PROJECTION" removed="23"/>
+		<field name="TRUNCATE_HISTORY_PROJECTION_ID_INDEX" removed="23"/>
+		<field name="TRUNCATE_N_OLDEST" removed="23"/>
+	</class>
+	<class name="android/provider/Browser$BookmarkColumns" since="1" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="&lt;init>()V"/>
+		<field name="BOOKMARK"/>
+		<field name="CREATED"/>
+		<field name="DATE"/>
+		<field name="FAVICON"/>
+		<field name="TITLE"/>
+		<field name="URL"/>
+		<field name="VISITS"/>
+	</class>
+	<class name="android/provider/Browser$SearchColumns" since="1" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="&lt;init>()V"/>
+		<field name="DATE"/>
+		<field name="SEARCH"/>
+		<field name="URL" deprecated="15"/>
+	</class>
+	<class name="android/provider/CalendarContract" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="startViewCalendarEventInManagedProfile(Landroid/content/Context;JJJZI)Z" since="29"/>
+		<field name="ACCOUNT_TYPE_LOCAL"/>
+		<field name="ACTION_EVENT_REMINDER"/>
+		<field name="ACTION_HANDLE_CUSTOM_EVENT" since="16"/>
+		<field name="ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT" since="29"/>
+		<field name="AUTHORITY"/>
+		<field name="CALLER_IS_SYNCADAPTER"/>
+		<field name="CONTENT_URI"/>
+		<field name="EXTRA_CUSTOM_APP_URI" since="16"/>
+		<field name="EXTRA_EVENT_ALL_DAY"/>
+		<field name="EXTRA_EVENT_BEGIN_TIME"/>
+		<field name="EXTRA_EVENT_END_TIME"/>
+		<field name="EXTRA_EVENT_ID" since="29"/>
+	</class>
+	<class name="android/provider/CalendarContract$Attendees" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$AttendeesColumns"/>
+		<implements name="android/provider/CalendarContract$EventsColumns"/>
+		<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$AttendeesColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="ATTENDEE_EMAIL"/>
+		<field name="ATTENDEE_IDENTITY" since="16"/>
+		<field name="ATTENDEE_ID_NAMESPACE" since="16"/>
+		<field name="ATTENDEE_NAME"/>
+		<field name="ATTENDEE_RELATIONSHIP"/>
+		<field name="ATTENDEE_STATUS"/>
+		<field name="ATTENDEE_STATUS_ACCEPTED"/>
+		<field name="ATTENDEE_STATUS_DECLINED"/>
+		<field name="ATTENDEE_STATUS_INVITED"/>
+		<field name="ATTENDEE_STATUS_NONE"/>
+		<field name="ATTENDEE_STATUS_TENTATIVE"/>
+		<field name="ATTENDEE_TYPE"/>
+		<field name="EVENT_ID"/>
+		<field name="RELATIONSHIP_ATTENDEE"/>
+		<field name="RELATIONSHIP_NONE"/>
+		<field name="RELATIONSHIP_ORGANIZER"/>
+		<field name="RELATIONSHIP_PERFORMER"/>
+		<field name="RELATIONSHIP_SPEAKER"/>
+		<field name="TYPE_NONE"/>
+		<field name="TYPE_OPTIONAL"/>
+		<field name="TYPE_REQUIRED"/>
+		<field name="TYPE_RESOURCE" since="15"/>
+	</class>
+	<class name="android/provider/CalendarContract$CalendarAlerts" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$CalendarAlertsColumns"/>
+		<implements name="android/provider/CalendarContract$CalendarColumns"/>
+		<implements name="android/provider/CalendarContract$EventsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="CONTENT_URI_BY_INSTANCE"/>
+	</class>
+	<class name="android/provider/CalendarContract$CalendarAlertsColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="ALARM_TIME"/>
+		<field name="BEGIN"/>
+		<field name="CREATION_TIME"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="END"/>
+		<field name="EVENT_ID"/>
+		<field name="MINUTES"/>
+		<field name="NOTIFY_TIME"/>
+		<field name="RECEIVED_TIME"/>
+		<field name="STATE"/>
+		<field name="STATE_DISMISSED"/>
+		<field name="STATE_FIRED"/>
+		<field name="STATE_SCHEDULED"/>
+	</class>
+	<class name="android/provider/CalendarContract$CalendarCache" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/CalendarContract$CalendarCacheColumns"/>
+		<field name="KEY_TIMEZONE_INSTANCES"/>
+		<field name="KEY_TIMEZONE_INSTANCES_PREVIOUS"/>
+		<field name="KEY_TIMEZONE_TYPE"/>
+		<field name="TIMEZONE_TYPE_AUTO"/>
+		<field name="TIMEZONE_TYPE_HOME"/>
+		<field name="URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$CalendarCacheColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="KEY"/>
+		<field name="VALUE"/>
+	</class>
+	<class name="android/provider/CalendarContract$CalendarColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="ALLOWED_ATTENDEE_TYPES" since="15"/>
+		<field name="ALLOWED_AVAILABILITY" since="15"/>
+		<field name="ALLOWED_REMINDERS"/>
+		<field name="CALENDAR_ACCESS_LEVEL"/>
+		<field name="CALENDAR_COLOR"/>
+		<field name="CALENDAR_COLOR_KEY" since="15"/>
+		<field name="CALENDAR_DISPLAY_NAME"/>
+		<field name="CALENDAR_TIME_ZONE"/>
+		<field name="CAL_ACCESS_CONTRIBUTOR"/>
+		<field name="CAL_ACCESS_EDITOR"/>
+		<field name="CAL_ACCESS_FREEBUSY"/>
+		<field name="CAL_ACCESS_NONE"/>
+		<field name="CAL_ACCESS_OVERRIDE"/>
+		<field name="CAL_ACCESS_OWNER"/>
+		<field name="CAL_ACCESS_READ"/>
+		<field name="CAL_ACCESS_RESPOND"/>
+		<field name="CAL_ACCESS_ROOT"/>
+		<field name="CAN_MODIFY_TIME_ZONE"/>
+		<field name="CAN_ORGANIZER_RESPOND"/>
+		<field name="IS_PRIMARY" since="17"/>
+		<field name="MAX_REMINDERS"/>
+		<field name="OWNER_ACCOUNT"/>
+		<field name="SYNC_EVENTS"/>
+		<field name="VISIBLE"/>
+	</class>
+	<class name="android/provider/CalendarContract$CalendarEntity" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$CalendarColumns"/>
+		<implements name="android/provider/CalendarContract$SyncColumns"/>
+		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$CalendarSyncColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="CAL_SYNC1"/>
+		<field name="CAL_SYNC10"/>
+		<field name="CAL_SYNC2"/>
+		<field name="CAL_SYNC3"/>
+		<field name="CAL_SYNC4"/>
+		<field name="CAL_SYNC5"/>
+		<field name="CAL_SYNC6"/>
+		<field name="CAL_SYNC7"/>
+		<field name="CAL_SYNC8"/>
+		<field name="CAL_SYNC9"/>
+	</class>
+	<class name="android/provider/CalendarContract$Calendars" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$CalendarColumns"/>
+		<implements name="android/provider/CalendarContract$SyncColumns"/>
+		<field name="CALENDAR_LOCATION"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="ENTERPRISE_CONTENT_URI" since="29"/>
+		<field name="NAME"/>
+	</class>
+	<class name="android/provider/CalendarContract$Colors" since="15">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/CalendarContract$ColorsColumns"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$ColorsColumns" since="15">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/SyncStateContract$Columns"/>
+		<field name="COLOR"/>
+		<field name="COLOR_KEY"/>
+		<field name="COLOR_TYPE"/>
+		<field name="TYPE_CALENDAR"/>
+		<field name="TYPE_EVENT"/>
+	</class>
+	<class name="android/provider/CalendarContract$EventDays" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/CalendarContract$EventDaysColumns"/>
+		<method name="query(Landroid/content/ContentResolver;II[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$EventDaysColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="ENDDAY"/>
+		<field name="STARTDAY"/>
+	</class>
+	<class name="android/provider/CalendarContract$Events" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$CalendarColumns"/>
+		<implements name="android/provider/CalendarContract$EventsColumns"/>
+		<implements name="android/provider/CalendarContract$SyncColumns"/>
+		<field name="CONTENT_EXCEPTION_URI"/>
+		<field name="CONTENT_URI"/>
+		<field name="ENTERPRISE_CONTENT_URI" since="29"/>
+	</class>
+	<class name="android/provider/CalendarContract$EventsColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="ACCESS_CONFIDENTIAL"/>
+		<field name="ACCESS_DEFAULT"/>
+		<field name="ACCESS_LEVEL"/>
+		<field name="ACCESS_PRIVATE"/>
+		<field name="ACCESS_PUBLIC"/>
+		<field name="ALL_DAY"/>
+		<field name="AVAILABILITY"/>
+		<field name="AVAILABILITY_BUSY"/>
+		<field name="AVAILABILITY_FREE"/>
+		<field name="AVAILABILITY_TENTATIVE" since="15"/>
+		<field name="CALENDAR_ID"/>
+		<field name="CAN_INVITE_OTHERS"/>
+		<field name="CUSTOM_APP_PACKAGE" since="16"/>
+		<field name="CUSTOM_APP_URI" since="16"/>
+		<field name="DESCRIPTION"/>
+		<field name="DISPLAY_COLOR" since="16"/>
+		<field name="DTEND"/>
+		<field name="DTSTART"/>
+		<field name="DURATION"/>
+		<field name="EVENT_COLOR"/>
+		<field name="EVENT_COLOR_KEY" since="15"/>
+		<field name="EVENT_END_TIMEZONE"/>
+		<field name="EVENT_LOCATION"/>
+		<field name="EVENT_TIMEZONE"/>
+		<field name="EXDATE"/>
+		<field name="EXRULE"/>
+		<field name="GUESTS_CAN_INVITE_OTHERS"/>
+		<field name="GUESTS_CAN_MODIFY"/>
+		<field name="GUESTS_CAN_SEE_GUESTS"/>
+		<field name="HAS_ALARM"/>
+		<field name="HAS_ATTENDEE_DATA"/>
+		<field name="HAS_EXTENDED_PROPERTIES"/>
+		<field name="IS_ORGANIZER" since="17"/>
+		<field name="LAST_DATE"/>
+		<field name="LAST_SYNCED"/>
+		<field name="ORGANIZER"/>
+		<field name="ORIGINAL_ALL_DAY"/>
+		<field name="ORIGINAL_ID"/>
+		<field name="ORIGINAL_INSTANCE_TIME"/>
+		<field name="ORIGINAL_SYNC_ID"/>
+		<field name="RDATE"/>
+		<field name="RRULE"/>
+		<field name="SELF_ATTENDEE_STATUS"/>
+		<field name="STATUS"/>
+		<field name="STATUS_CANCELED"/>
+		<field name="STATUS_CONFIRMED"/>
+		<field name="STATUS_TENTATIVE"/>
+		<field name="SYNC_DATA1"/>
+		<field name="SYNC_DATA10"/>
+		<field name="SYNC_DATA2"/>
+		<field name="SYNC_DATA3"/>
+		<field name="SYNC_DATA4"/>
+		<field name="SYNC_DATA5"/>
+		<field name="SYNC_DATA6"/>
+		<field name="SYNC_DATA7"/>
+		<field name="SYNC_DATA8"/>
+		<field name="SYNC_DATA9"/>
+		<field name="TITLE"/>
+		<field name="UID_2445" since="17"/>
+	</class>
+	<class name="android/provider/CalendarContract$EventsEntity" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$EventsColumns"/>
+		<implements name="android/provider/CalendarContract$SyncColumns"/>
+		<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentProviderClient;)Landroid/content/EntityIterator;"/>
+		<method name="newEntityIterator(Landroid/database/Cursor;Landroid/content/ContentResolver;)Landroid/content/EntityIterator;"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$ExtendedProperties" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$EventsColumns"/>
+		<implements name="android/provider/CalendarContract$ExtendedPropertiesColumns"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$ExtendedPropertiesColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="EVENT_ID"/>
+		<field name="NAME"/>
+		<field name="VALUE"/>
+	</class>
+	<class name="android/provider/CalendarContract$Instances" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$CalendarColumns"/>
+		<implements name="android/provider/CalendarContract$EventsColumns"/>
+		<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJ)Landroid/database/Cursor;"/>
+		<method name="query(Landroid/content/ContentResolver;[Ljava/lang/String;JJLjava/lang/String;)Landroid/database/Cursor;"/>
+		<field name="BEGIN"/>
+		<field name="CONTENT_BY_DAY_URI"/>
+		<field name="CONTENT_SEARCH_BY_DAY_URI"/>
+		<field name="CONTENT_SEARCH_URI"/>
+		<field name="CONTENT_URI"/>
+		<field name="END"/>
+		<field name="END_DAY"/>
+		<field name="END_MINUTE"/>
+		<field name="ENTERPRISE_CONTENT_BY_DAY_URI" since="29"/>
+		<field name="ENTERPRISE_CONTENT_SEARCH_BY_DAY_URI" since="29"/>
+		<field name="ENTERPRISE_CONTENT_SEARCH_URI" since="29"/>
+		<field name="ENTERPRISE_CONTENT_URI" since="29"/>
+		<field name="EVENT_ID"/>
+		<field name="START_DAY"/>
+		<field name="START_MINUTE"/>
+	</class>
+	<class name="android/provider/CalendarContract$Reminders" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/CalendarContract$EventsColumns"/>
+		<implements name="android/provider/CalendarContract$RemindersColumns"/>
+		<method name="query(Landroid/content/ContentResolver;J[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CalendarContract$RemindersColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="EVENT_ID"/>
+		<field name="METHOD"/>
+		<field name="METHOD_ALARM" since="16"/>
+		<field name="METHOD_ALERT"/>
+		<field name="METHOD_DEFAULT"/>
+		<field name="METHOD_EMAIL"/>
+		<field name="METHOD_SMS"/>
+		<field name="MINUTES"/>
+		<field name="MINUTES_DEFAULT"/>
+	</class>
+	<class name="android/provider/CalendarContract$SyncColumns" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/CalendarContract$CalendarSyncColumns"/>
+		<field name="ACCOUNT_NAME"/>
+		<field name="ACCOUNT_TYPE"/>
+		<field name="CAN_PARTIALLY_UPDATE"/>
+		<field name="DELETED"/>
+		<field name="DIRTY"/>
+		<field name="MUTATORS" since="18"/>
+		<field name="_SYNC_ID"/>
+	</class>
+	<class name="android/provider/CalendarContract$SyncState" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/SyncStateContract$Columns"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CallLog" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="AUTHORITY"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/CallLog$Calls" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getLastOutgoingCall(Landroid/content/Context;)Ljava/lang/String;" since="8"/>
+		<field name="ANSWERED_EXTERNALLY_TYPE" since="25"/>
+		<field name="AUTO_MISSED_EMERGENCY_CALL" since="31"/>
+		<field name="AUTO_MISSED_MAXIMUM_DIALING" since="31"/>
+		<field name="AUTO_MISSED_MAXIMUM_RINGING" since="31"/>
+		<field name="BLOCKED_TYPE" since="24"/>
+		<field name="BLOCK_REASON" since="29"/>
+		<field name="BLOCK_REASON_BLOCKED_NUMBER" since="29"/>
+		<field name="BLOCK_REASON_CALL_SCREENING_SERVICE" since="29"/>
+		<field name="BLOCK_REASON_DIRECT_TO_VOICEMAIL" since="29"/>
+		<field name="BLOCK_REASON_NOT_BLOCKED" since="29"/>
+		<field name="BLOCK_REASON_NOT_IN_CONTACTS" since="29"/>
+		<field name="BLOCK_REASON_PAY_PHONE" since="29"/>
+		<field name="BLOCK_REASON_RESTRICTED_NUMBER" since="29"/>
+		<field name="BLOCK_REASON_UNKNOWN_NUMBER" since="29"/>
+		<field name="CACHED_FORMATTED_NUMBER" since="21"/>
+		<field name="CACHED_LOOKUP_URI" since="21"/>
+		<field name="CACHED_MATCHED_NUMBER" since="21"/>
+		<field name="CACHED_NAME"/>
+		<field name="CACHED_NORMALIZED_NUMBER" since="21"/>
+		<field name="CACHED_NUMBER_LABEL"/>
+		<field name="CACHED_NUMBER_TYPE"/>
+		<field name="CACHED_PHOTO_ID" since="21"/>
+		<field name="CACHED_PHOTO_URI" since="23"/>
+		<field name="CALL_SCREENING_APP_NAME" since="29"/>
+		<field name="CALL_SCREENING_COMPONENT_NAME" since="29"/>
+		<field name="COMPOSER_PHOTO_URI" since="31"/>
+		<field name="CONTENT_FILTER_URI"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="CONTENT_URI_WITH_VOICEMAIL" since="21"/>
+		<field name="COUNTRY_ISO" since="21"/>
+		<field name="DATA_USAGE" since="21"/>
+		<field name="DATE"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="DURATION"/>
+		<field name="EXTRA_CALL_TYPE_FILTER" since="21"/>
+		<field name="FEATURES" since="21"/>
+		<field name="FEATURES_ASSISTED_DIALING_USED" since="30"/>
+		<field name="FEATURES_HD_CALL" since="26"/>
+		<field name="FEATURES_PULLED_EXTERNALLY" since="25"/>
+		<field name="FEATURES_RTT" since="28"/>
+		<field name="FEATURES_VIDEO" since="21"/>
+		<field name="FEATURES_VOLTE" since="30"/>
+		<field name="FEATURES_WIFI" since="26"/>
+		<field name="GEOCODED_LOCATION" since="21"/>
+		<field name="INCOMING_TYPE"/>
+		<field name="IS_READ" since="14"/>
+		<field name="LAST_MODIFIED" since="24"/>
+		<field name="LIMIT_PARAM_KEY" since="17"/>
+		<field name="LOCATION" since="31"/>
+		<field name="MISSED_REASON" since="31"/>
+		<field name="MISSED_REASON_NOT_MISSED" since="31"/>
+		<field name="MISSED_TYPE"/>
+		<field name="NEW"/>
+		<field name="NUMBER"/>
+		<field name="NUMBER_PRESENTATION" since="19"/>
+		<field name="OFFSET_PARAM_KEY" since="17"/>
+		<field name="OUTGOING_TYPE"/>
+		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="21"/>
+		<field name="PHONE_ACCOUNT_ID" since="21"/>
+		<field name="POST_DIAL_DIGITS" since="24"/>
+		<field name="PRESENTATION_ALLOWED" since="19"/>
+		<field name="PRESENTATION_PAYPHONE" since="19"/>
+		<field name="PRESENTATION_RESTRICTED" since="19"/>
+		<field name="PRESENTATION_UNKNOWN" since="19"/>
+		<field name="PRIORITY" since="31"/>
+		<field name="PRIORITY_NORMAL" since="31"/>
+		<field name="PRIORITY_URGENT" since="31"/>
+		<field name="REJECTED_TYPE" since="24"/>
+		<field name="SUBJECT" since="31"/>
+		<field name="TRANSCRIPTION" since="21"/>
+		<field name="TYPE"/>
+		<field name="USER_MISSED_CALL_FILTERS_TIMEOUT" since="31"/>
+		<field name="USER_MISSED_CALL_SCREENING_SERVICE_SILENCED" since="31"/>
+		<field name="USER_MISSED_DND_MODE" since="31"/>
+		<field name="USER_MISSED_LOW_RING_VOLUME" since="31"/>
+		<field name="USER_MISSED_NO_ANSWER" since="31"/>
+		<field name="USER_MISSED_NO_VIBRATE" since="31"/>
+		<field name="USER_MISSED_SHORT_RING" since="31"/>
+		<field name="VIA_NUMBER" since="24"/>
+		<field name="VOICEMAIL_TYPE" since="21"/>
+		<field name="VOICEMAIL_URI" since="21"/>
+	</class>
+	<class name="android/provider/CallLog$Locations" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="AUTHORITY"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="LATITUDE"/>
+		<field name="LONGITUDE"/>
+	</class>
+	<class name="android/provider/Contacts" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="AUTHORITY" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="KIND_EMAIL" deprecated="15"/>
+		<field name="KIND_IM" deprecated="15"/>
+		<field name="KIND_ORGANIZATION" deprecated="15"/>
+		<field name="KIND_PHONE" deprecated="15"/>
+		<field name="KIND_POSTAL" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$ContactMethods" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$ContactMethodsColumns"/>
+		<implements name="android/provider/Contacts$PeopleColumns"/>
+		<method name="addPostalLocation(Landroid/content/Context;JDD)V" deprecated="15"/>
+		<method name="decodeImProtocol(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15"/>
+		<method name="encodeCustomImProtocol(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="encodePredefinedImProtocol(I)Ljava/lang/String;" deprecated="15"/>
+		<method name="getDisplayLabel(Landroid/content/Context;IILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+		<field name="CONTENT_EMAIL_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_EMAIL_TYPE" deprecated="15"/>
+		<field name="CONTENT_EMAIL_URI" deprecated="15"/>
+		<field name="CONTENT_IM_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_POSTAL_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_POSTAL_TYPE" deprecated="15"/>
+		<field name="CONTENT_TYPE" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="PERSON_ID" deprecated="15"/>
+		<field name="POSTAL_LOCATION_LATITUDE" deprecated="15"/>
+		<field name="POSTAL_LOCATION_LONGITUDE" deprecated="15"/>
+		<field name="PROTOCOL_AIM" deprecated="15"/>
+		<field name="PROTOCOL_GOOGLE_TALK" deprecated="15"/>
+		<field name="PROTOCOL_ICQ" deprecated="15"/>
+		<field name="PROTOCOL_JABBER" deprecated="15"/>
+		<field name="PROTOCOL_MSN" deprecated="15"/>
+		<field name="PROTOCOL_QQ" deprecated="15"/>
+		<field name="PROTOCOL_SKYPE" deprecated="15"/>
+		<field name="PROTOCOL_YAHOO" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$ContactMethodsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="AUX_DATA" deprecated="15"/>
+		<field name="DATA" deprecated="15"/>
+		<field name="ISPRIMARY" deprecated="15"/>
+		<field name="KIND" deprecated="15"/>
+		<field name="LABEL" deprecated="15"/>
+		<field name="TYPE" deprecated="15"/>
+		<field name="TYPE_CUSTOM" deprecated="15"/>
+		<field name="TYPE_HOME" deprecated="15"/>
+		<field name="TYPE_OTHER" deprecated="15"/>
+		<field name="TYPE_WORK" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Extensions" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$ExtensionsColumns"/>
+		<field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_TYPE" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="PERSON_ID" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$ExtensionsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="NAME" deprecated="15"/>
+		<field name="VALUE" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$GroupMembership" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$GroupsColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="15"/>
+		<field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_TYPE" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="GROUP_ID" deprecated="15"/>
+		<field name="GROUP_SYNC_ACCOUNT" deprecated="15"/>
+		<field name="GROUP_SYNC_ACCOUNT_TYPE" since="5" deprecated="15"/>
+		<field name="GROUP_SYNC_ID" deprecated="15"/>
+		<field name="PERSON_ID" deprecated="15"/>
+		<field name="RAW_CONTENT_URI" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Groups" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$GroupsColumns"/>
+		<field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_TYPE" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="DELETED_CONTENT_URI" deprecated="15"/>
+		<field name="GROUP_ANDROID_STARRED" deprecated="15"/>
+		<field name="GROUP_MY_CONTACTS" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$GroupsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="NAME" deprecated="15"/>
+		<field name="NOTES" deprecated="15"/>
+		<field name="SHOULD_SYNC" deprecated="15"/>
+		<field name="SYSTEM_ID" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Intents" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<field name="ATTACH_IMAGE" deprecated="15"/>
+		<field name="EXTRA_CREATE_DESCRIPTION" since="3" deprecated="15"/>
+		<field name="EXTRA_FORCE_CREATE" since="3" deprecated="15"/>
+		<field name="SEARCH_SUGGESTION_CLICKED" deprecated="15"/>
+		<field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED" deprecated="15"/>
+		<field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED" deprecated="15"/>
+		<field name="SHOW_OR_CREATE_CONTACT" since="3" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Intents$Insert" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<field name="ACTION" deprecated="15"/>
+		<field name="COMPANY" deprecated="15"/>
+		<field name="EMAIL" deprecated="15"/>
+		<field name="EMAIL_ISPRIMARY" deprecated="15"/>
+		<field name="EMAIL_TYPE" deprecated="15"/>
+		<field name="FULL_MODE" deprecated="15"/>
+		<field name="IM_HANDLE" deprecated="15"/>
+		<field name="IM_ISPRIMARY" deprecated="15"/>
+		<field name="IM_PROTOCOL" deprecated="15"/>
+		<field name="JOB_TITLE" deprecated="15"/>
+		<field name="NAME" deprecated="15"/>
+		<field name="NOTES" deprecated="15"/>
+		<field name="PHONE" deprecated="15"/>
+		<field name="PHONETIC_NAME" since="3" deprecated="15"/>
+		<field name="PHONE_ISPRIMARY" deprecated="15"/>
+		<field name="PHONE_TYPE" deprecated="15"/>
+		<field name="POSTAL" deprecated="15"/>
+		<field name="POSTAL_ISPRIMARY" deprecated="15"/>
+		<field name="POSTAL_TYPE" deprecated="15"/>
+		<field name="SECONDARY_EMAIL" since="3" deprecated="15"/>
+		<field name="SECONDARY_EMAIL_TYPE" since="3" deprecated="15"/>
+		<field name="SECONDARY_PHONE" since="3" deprecated="15"/>
+		<field name="SECONDARY_PHONE_TYPE" since="3" deprecated="15"/>
+		<field name="TERTIARY_EMAIL" since="3" deprecated="15"/>
+		<field name="TERTIARY_EMAIL_TYPE" since="3" deprecated="15"/>
+		<field name="TERTIARY_PHONE" since="3" deprecated="15"/>
+		<field name="TERTIARY_PHONE_TYPE" since="3" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Intents$UI" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<field name="FILTER_CONTACTS_ACTION" deprecated="15"/>
+		<field name="FILTER_TEXT_EXTRA_KEY" deprecated="15"/>
+		<field name="GROUP_NAME_EXTRA_KEY" deprecated="15"/>
+		<field name="LIST_ALL_CONTACTS_ACTION" deprecated="15"/>
+		<field name="LIST_CONTACTS_WITH_PHONES_ACTION" deprecated="15"/>
+		<field name="LIST_DEFAULT" deprecated="15"/>
+		<field name="LIST_FREQUENT_ACTION" deprecated="15"/>
+		<field name="LIST_GROUP_ACTION" deprecated="15"/>
+		<field name="LIST_STARRED_ACTION" deprecated="15"/>
+		<field name="LIST_STREQUENT_ACTION" deprecated="15"/>
+		<field name="TITLE_EXTRA_KEY" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$OrganizationColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="COMPANY" deprecated="15"/>
+		<field name="ISPRIMARY" deprecated="15"/>
+		<field name="LABEL" deprecated="15"/>
+		<field name="PERSON_ID" deprecated="15"/>
+		<field name="TITLE" deprecated="15"/>
+		<field name="TYPE" deprecated="15"/>
+		<field name="TYPE_CUSTOM" deprecated="15"/>
+		<field name="TYPE_OTHER" deprecated="15"/>
+		<field name="TYPE_WORK" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Organizations" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$OrganizationColumns"/>
+		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+		<field name="CONTENT_DIRECTORY" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$People" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$PeopleColumns"/>
+		<implements name="android/provider/Contacts$PhonesColumns"/>
+		<implements name="android/provider/Contacts$PresenceColumns"/>
+		<method name="addToGroup(Landroid/content/ContentResolver;JJ)Landroid/net/Uri;" deprecated="15"/>
+		<method name="addToGroup(Landroid/content/ContentResolver;JLjava/lang/String;)Landroid/net/Uri;" deprecated="15"/>
+		<method name="addToMyContactsGroup(Landroid/content/ContentResolver;J)Landroid/net/Uri;" deprecated="15"/>
+		<method name="createPersonInMyContactsGroup(Landroid/content/ContentResolver;Landroid/content/ContentValues;)Landroid/net/Uri;" deprecated="15"/>
+		<method name="loadContactPhoto(Landroid/content/Context;Landroid/net/Uri;ILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" deprecated="15"/>
+		<method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="15"/>
+		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;" deprecated="15"/>
+		<method name="queryGroups(Landroid/content/ContentResolver;J)Landroid/database/Cursor;" deprecated="15"/>
+		<method name="setPhotoData(Landroid/content/ContentResolver;Landroid/net/Uri;[B)V" deprecated="15"/>
+		<field name="CONTENT_FILTER_URI" deprecated="15"/>
+		<field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_TYPE" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="DELETED_CONTENT_URI" deprecated="15"/>
+		<field name="PRIMARY_EMAIL_ID" deprecated="15"/>
+		<field name="PRIMARY_ORGANIZATION_ID" deprecated="15"/>
+		<field name="PRIMARY_PHONE_ID" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$People$ContactMethods" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$ContactMethodsColumns"/>
+		<implements name="android/provider/Contacts$PeopleColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$People$Extensions" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$ExtensionsColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="PERSON_ID" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$People$Phones" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$PeopleColumns"/>
+		<implements name="android/provider/Contacts$PhonesColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$PeopleColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="CUSTOM_RINGTONE" deprecated="15"/>
+		<field name="DISPLAY_NAME" deprecated="15"/>
+		<field name="LAST_TIME_CONTACTED" deprecated="15"/>
+		<field name="NAME" deprecated="15"/>
+		<field name="NOTES" deprecated="15"/>
+		<field name="PHONETIC_NAME" since="3" deprecated="15"/>
+		<field name="PHOTO_VERSION" deprecated="15"/>
+		<field name="SEND_TO_VOICEMAIL" deprecated="15"/>
+		<field name="STARRED" deprecated="15"/>
+		<field name="TIMES_CONTACTED" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Phones" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$PeopleColumns"/>
+		<implements name="android/provider/Contacts$PhonesColumns"/>
+		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+		<method name="getDisplayLabel(Landroid/content/Context;ILjava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" deprecated="15"/>
+		<field name="CONTENT_FILTER_URL" deprecated="15"/>
+		<field name="CONTENT_ITEM_TYPE" deprecated="15"/>
+		<field name="CONTENT_TYPE" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="PERSON_ID" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$PhonesColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="ISPRIMARY" deprecated="15"/>
+		<field name="LABEL" deprecated="15"/>
+		<field name="NUMBER" deprecated="15"/>
+		<field name="NUMBER_KEY" deprecated="15"/>
+		<field name="TYPE" deprecated="15"/>
+		<field name="TYPE_CUSTOM" deprecated="15"/>
+		<field name="TYPE_FAX_HOME" deprecated="15"/>
+		<field name="TYPE_FAX_WORK" deprecated="15"/>
+		<field name="TYPE_HOME" deprecated="15"/>
+		<field name="TYPE_MOBILE" deprecated="15"/>
+		<field name="TYPE_OTHER" deprecated="15"/>
+		<field name="TYPE_PAGER" deprecated="15"/>
+		<field name="TYPE_WORK" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$Photos" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$PhotosColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$PhotosColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="DATA" deprecated="15"/>
+		<field name="DOWNLOAD_REQUIRED" deprecated="15"/>
+		<field name="EXISTS_ON_SERVER" deprecated="15"/>
+		<field name="LOCAL_VERSION" deprecated="15"/>
+		<field name="PERSON_ID" deprecated="15"/>
+		<field name="SYNC_ERROR" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$PresenceColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="AVAILABLE" since="8" deprecated="29"/>
+		<field name="AWAY" since="8" deprecated="29"/>
+		<field name="DO_NOT_DISTURB" since="8" deprecated="29"/>
+		<field name="IDLE" since="8" deprecated="29"/>
+		<field name="IM_ACCOUNT" deprecated="15"/>
+		<field name="IM_HANDLE" deprecated="15"/>
+		<field name="IM_PROTOCOL" deprecated="15"/>
+		<field name="INVISIBLE" since="8" deprecated="29"/>
+		<field name="OFFLINE" since="8" deprecated="29"/>
+		<field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="29"/>
+		<field name="PRESENCE_STATUS" since="8" deprecated="29"/>
+		<field name="PRIORITY" since="8" deprecated="29"/>
+	</class>
+	<class name="android/provider/Contacts$Settings" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Contacts$SettingsColumns"/>
+		<method name="getSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="setSetting(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+		<field name="CONTENT_DIRECTORY" deprecated="15"/>
+		<field name="CONTENT_URI" deprecated="15"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="15"/>
+		<field name="SYNC_EVERYTHING" deprecated="15"/>
+	</class>
+	<class name="android/provider/Contacts$SettingsColumns" since="1" deprecated="5">
+		<extends name="java/lang/Object"/>
+		<field name="KEY" deprecated="15"/>
+		<field name="VALUE" deprecated="15"/>
+		<field name="_SYNC_ACCOUNT" deprecated="15"/>
+		<field name="_SYNC_ACCOUNT_TYPE" since="5" deprecated="15"/>
+	</class>
+	<class name="android/provider/ContactsContract" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="isProfileId(J)Z" since="14"/>
+		<field name="AUTHORITY"/>
+		<field name="AUTHORITY_URI"/>
+		<field name="CALLER_IS_SYNCADAPTER"/>
+		<field name="DEFERRED_SNIPPETING" since="21"/>
+		<field name="DEFERRED_SNIPPETING_QUERY" since="21"/>
+		<field name="DIRECTORY_PARAM_KEY" since="11"/>
+		<field name="LIMIT_PARAM_KEY" since="11"/>
+		<field name="PRIMARY_ACCOUNT_NAME" since="14"/>
+		<field name="PRIMARY_ACCOUNT_TYPE" since="14"/>
+		<field name="REMOVE_DUPLICATE_ENTRIES" since="21"/>
+		<field name="STREQUENT_PHONE_ONLY" since="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$AggregationExceptions" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="RAW_CONTACT_ID1"/>
+		<field name="RAW_CONTACT_ID2"/>
+		<field name="TYPE"/>
+		<field name="TYPE_AUTOMATIC"/>
+		<field name="TYPE_KEEP_SEPARATE"/>
+		<field name="TYPE_KEEP_TOGETHER"/>
+	</class>
+	<class name="android/provider/ContactsContract$BaseSyncColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="SYNC1"/>
+		<field name="SYNC2"/>
+		<field name="SYNC3"/>
+		<field name="SYNC4"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds" since="5">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$BaseTypes" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="TYPE_CUSTOM"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Callable" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="&lt;init>()V"/>
+		<field name="CONTENT_FILTER_URI"/>
+		<field name="CONTENT_URI"/>
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$CommonColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$BaseTypes"/>
+		<field name="DATA"/>
+		<field name="LABEL"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Contactables" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="&lt;init>()V"/>
+		<field name="CONTENT_FILTER_URI"/>
+		<field name="CONTENT_URI"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="VISIBLE_CONTACTS_ONLY"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Email" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getTypeLabelResource(I)I"/>
+		<field name="ADDRESS" since="11"/>
+		<field name="CONTENT_FILTER_URI"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_LOOKUP_URI"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="DISPLAY_NAME"/>
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
+		<field name="ENTERPRISE_CONTENT_LOOKUP_URI" since="23"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="TYPE_HOME"/>
+		<field name="TYPE_MOBILE"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_WORK"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Event" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="21"/>
+		<method name="getTypeResource(Ljava/lang/Integer;)I"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="START_DATE"/>
+		<field name="TYPE_ANNIVERSARY"/>
+		<field name="TYPE_BIRTHDAY"/>
+		<field name="TYPE_OTHER"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$GroupMembership" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="GROUP_ROW_ID"/>
+		<field name="GROUP_SOURCE_ID"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Identity" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="IDENTITY"/>
+		<field name="NAMESPACE"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Im" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getProtocolLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getProtocolLabelResource(I)I"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getTypeLabelResource(I)I"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CUSTOM_PROTOCOL"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="PROTOCOL"/>
+		<field name="PROTOCOL_AIM" deprecated="31"/>
+		<field name="PROTOCOL_CUSTOM"/>
+		<field name="PROTOCOL_GOOGLE_TALK" deprecated="31"/>
+		<field name="PROTOCOL_ICQ" deprecated="31"/>
+		<field name="PROTOCOL_JABBER" deprecated="31"/>
+		<field name="PROTOCOL_MSN" deprecated="31"/>
+		<field name="PROTOCOL_NETMEETING" deprecated="31"/>
+		<field name="PROTOCOL_QQ" deprecated="31"/>
+		<field name="PROTOCOL_SKYPE" deprecated="31"/>
+		<field name="PROTOCOL_YAHOO" deprecated="31"/>
+		<field name="TYPE_HOME"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_WORK"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Nickname" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="NAME"/>
+		<field name="TYPE_DEFAULT"/>
+		<field name="TYPE_INITIALS"/>
+		<field name="TYPE_MAIDEN_NAME" since="9"/>
+		<field name="TYPE_MAINDEN_NAME" deprecated="15"/>
+		<field name="TYPE_OTHER_NAME"/>
+		<field name="TYPE_SHORT_NAME"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Note" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="NOTE"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Organization" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getTypeLabelResource(I)I"/>
+		<field name="COMPANY"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="DEPARTMENT"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="JOB_DESCRIPTION"/>
+		<field name="OFFICE_LOCATION"/>
+		<field name="PHONETIC_NAME"/>
+		<field name="PHONETIC_NAME_STYLE" since="24"/>
+		<field name="SYMBOL"/>
+		<field name="TITLE"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_WORK"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Phone" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getTypeLabelResource(I)I"/>
+		<field name="CONTENT_FILTER_URI"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="NORMALIZED_NUMBER" since="16"/>
+		<field name="NUMBER"/>
+		<field name="SEARCH_DISPLAY_NAME_KEY" since="16"/>
+		<field name="SEARCH_PHONE_NUMBER_KEY" since="16"/>
+		<field name="TYPE_ASSISTANT"/>
+		<field name="TYPE_CALLBACK"/>
+		<field name="TYPE_CAR"/>
+		<field name="TYPE_COMPANY_MAIN"/>
+		<field name="TYPE_FAX_HOME"/>
+		<field name="TYPE_FAX_WORK"/>
+		<field name="TYPE_HOME"/>
+		<field name="TYPE_ISDN"/>
+		<field name="TYPE_MAIN"/>
+		<field name="TYPE_MMS"/>
+		<field name="TYPE_MOBILE"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_OTHER_FAX"/>
+		<field name="TYPE_PAGER"/>
+		<field name="TYPE_RADIO"/>
+		<field name="TYPE_TELEX"/>
+		<field name="TYPE_TTY_TDD"/>
+		<field name="TYPE_WORK"/>
+		<field name="TYPE_WORK_MOBILE"/>
+		<field name="TYPE_WORK_PAGER"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Photo" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="PHOTO"/>
+		<field name="PHOTO_FILE_ID" since="14"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Relation" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;" since="11"/>
+		<method name="getTypeLabelResource(I)I" since="11"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="NAME"/>
+		<field name="TYPE_ASSISTANT"/>
+		<field name="TYPE_BROTHER"/>
+		<field name="TYPE_CHILD"/>
+		<field name="TYPE_DOMESTIC_PARTNER"/>
+		<field name="TYPE_FATHER"/>
+		<field name="TYPE_FRIEND"/>
+		<field name="TYPE_MANAGER"/>
+		<field name="TYPE_MOTHER"/>
+		<field name="TYPE_PARENT"/>
+		<field name="TYPE_PARTNER"/>
+		<field name="TYPE_REFERRED_BY"/>
+		<field name="TYPE_RELATIVE"/>
+		<field name="TYPE_SISTER"/>
+		<field name="TYPE_SPOUSE"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$SipAddress" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getTypeLabelResource(I)I"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="SIP_ADDRESS"/>
+		<field name="TYPE_HOME"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_WORK"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$StructuredName" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="DISPLAY_NAME"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="FAMILY_NAME"/>
+		<field name="FULL_NAME_STYLE" since="21"/>
+		<field name="GIVEN_NAME"/>
+		<field name="MIDDLE_NAME"/>
+		<field name="PHONETIC_FAMILY_NAME"/>
+		<field name="PHONETIC_GIVEN_NAME"/>
+		<field name="PHONETIC_MIDDLE_NAME"/>
+		<field name="PHONETIC_NAME_STYLE" since="24"/>
+		<field name="PREFIX"/>
+		<field name="SUFFIX"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$StructuredPostal" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getTypeLabel(Landroid/content/res/Resources;ILjava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getTypeLabelResource(I)I"/>
+		<field name="CITY"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="COUNTRY"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="FORMATTED_ADDRESS"/>
+		<field name="NEIGHBORHOOD"/>
+		<field name="POBOX"/>
+		<field name="POSTCODE"/>
+		<field name="REGION"/>
+		<field name="STREET"/>
+		<field name="TYPE_HOME"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_WORK"/>
+	</class>
+	<class name="android/provider/ContactsContract$CommonDataKinds$Website" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$CommonDataKinds$CommonColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="TYPE_BLOG"/>
+		<field name="TYPE_FTP"/>
+		<field name="TYPE_HOME"/>
+		<field name="TYPE_HOMEPAGE"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_PROFILE"/>
+		<field name="TYPE_WORK"/>
+		<field name="URL"/>
+	</class>
+	<class name="android/provider/ContactsContract$ContactNameColumns" since="11">
+		<extends name="java/lang/Object"/>
+		<field name="DISPLAY_NAME_ALTERNATIVE"/>
+		<field name="DISPLAY_NAME_PRIMARY"/>
+		<field name="DISPLAY_NAME_SOURCE"/>
+		<field name="PHONETIC_NAME"/>
+		<field name="PHONETIC_NAME_STYLE"/>
+		<field name="SORT_KEY_ALTERNATIVE"/>
+		<field name="SORT_KEY_PRIMARY"/>
+	</class>
+	<class name="android/provider/ContactsContract$ContactOptionsColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="CUSTOM_RINGTONE"/>
+		<field name="LAST_TIME_CONTACTED" deprecated="29"/>
+		<field name="PINNED" since="21"/>
+		<field name="SEND_TO_VOICEMAIL"/>
+		<field name="STARRED"/>
+		<field name="TIMES_CONTACTED" deprecated="29"/>
+	</class>
+	<class name="android/provider/ContactsContract$ContactStatusColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="CONTACT_CHAT_CAPABILITY" since="11"/>
+		<field name="CONTACT_PRESENCE"/>
+		<field name="CONTACT_STATUS"/>
+		<field name="CONTACT_STATUS_ICON"/>
+		<field name="CONTACT_STATUS_LABEL"/>
+		<field name="CONTACT_STATUS_RES_PACKAGE"/>
+		<field name="CONTACT_STATUS_TIMESTAMP"/>
+	</class>
+	<class name="android/provider/ContactsContract$Contacts" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11"/>
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
+		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
+		<implements name="android/provider/ContactsContract$ContactsColumns"/>
+		<method name="getLookupUri(JLjava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
+		<method name="isEnterpriseContactId(J)Z" since="21"/>
+		<method name="lookupContact(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
+		<method name="markAsContacted(Landroid/content/ContentResolver;J)V" deprecated="16"/>
+		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;)Ljava/io/InputStream;"/>
+		<method name="openContactPhotoInputStream(Landroid/content/ContentResolver;Landroid/net/Uri;Z)Ljava/io/InputStream;" since="14"/>
+		<field name="CONTENT_FILTER_URI"/>
+		<field name="CONTENT_FREQUENT_URI" since="21" deprecated="29"/>
+		<field name="CONTENT_GROUP_URI"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_LOOKUP_URI"/>
+		<field name="CONTENT_MULTI_VCARD_URI" since="21"/>
+		<field name="CONTENT_STREQUENT_FILTER_URI"/>
+		<field name="CONTENT_STREQUENT_URI"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="CONTENT_VCARD_TYPE"/>
+		<field name="CONTENT_VCARD_URI"/>
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="24"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="QUERY_PARAMETER_VCARD_NO_PHOTO" since="23"/>
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$AggregationSuggestions" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns" since="11"/>
+		<implements name="android/provider/ContactsContract$ContactStatusColumns" since="11"/>
+		<implements name="android/provider/ContactsContract$ContactsColumns"/>
+		<field name="CONTENT_DIRECTORY"/>
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$AggregationSuggestions$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addNameParameter(Ljava/lang/String;)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;"/>
+		<method name="build()Landroid/net/Uri;"/>
+		<method name="setContactId(J)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;"/>
+		<method name="setLimit(I)Landroid/provider/ContactsContract$Contacts$AggregationSuggestions$Builder;"/>
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$Data" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumns"/>
+		<field name="CONTENT_DIRECTORY"/>
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$Entity" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$BaseSyncColumns"/>
+		<implements name="android/provider/ContactsContract$ContactNameColumns"/>
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
+		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
+		<implements name="android/provider/ContactsContract$ContactsColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumns"/>
+		<implements name="android/provider/ContactsContract$DataUsageStatColumns" since="21"/>
+		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
+		<implements name="android/provider/ContactsContract$StatusColumns"/>
+		<implements name="android/provider/ContactsContract$SyncColumns"/>
+		<field name="CONTENT_DIRECTORY"/>
+		<field name="DATA_ID"/>
+		<field name="RAW_CONTACT_ID"/>
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$Photo" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumns" removed="11"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins" since="11"/>
+		<field name="CONTENT_DIRECTORY"/>
+		<field name="DISPLAY_PHOTO" since="14"/>
+		<field name="PHOTO" since="11"/>
+		<field name="PHOTO_FILE_ID" since="14"/>
+	</class>
+	<class name="android/provider/ContactsContract$Contacts$StreamItems" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$ContactsColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="CONTACT_LAST_UPDATED_TIMESTAMP" since="18"/>
+		<field name="DISPLAY_NAME"/>
+		<field name="HAS_PHONE_NUMBER"/>
+		<field name="IN_DEFAULT_DIRECTORY" since="21"/>
+		<field name="IN_VISIBLE_GROUP"/>
+		<field name="IS_USER_PROFILE" since="14"/>
+		<field name="LOOKUP_KEY"/>
+		<field name="NAME_RAW_CONTACT_ID" since="21"/>
+		<field name="PHOTO_FILE_ID" since="14"/>
+		<field name="PHOTO_ID"/>
+		<field name="PHOTO_THUMBNAIL_URI" since="11"/>
+		<field name="PHOTO_URI" since="11"/>
+	</class>
+	<class name="android/provider/ContactsContract$Data" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$DataColumnsWithJoins"/>
+		<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_COUNTS" since="21"/>
+		<field name="EXTRA_ADDRESS_BOOK_INDEX_TITLES" since="21"/>
+		<field name="VISIBLE_CONTACTS_ONLY" since="18"/>
+	</class>
+	<class name="android/provider/ContactsContract$DataColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="CARRIER_PRESENCE" since="23" deprecated="31"/>
+		<field name="CARRIER_PRESENCE_VT_CAPABLE" since="23" deprecated="31"/>
+		<field name="DATA1"/>
+		<field name="DATA10"/>
+		<field name="DATA11"/>
+		<field name="DATA12"/>
+		<field name="DATA13"/>
+		<field name="DATA14"/>
+		<field name="DATA15"/>
+		<field name="DATA2"/>
+		<field name="DATA3"/>
+		<field name="DATA4"/>
+		<field name="DATA5"/>
+		<field name="DATA6"/>
+		<field name="DATA7"/>
+		<field name="DATA8"/>
+		<field name="DATA9"/>
+		<field name="DATA_VERSION"/>
+		<field name="IS_PRIMARY"/>
+		<field name="IS_READ_ONLY" since="11"/>
+		<field name="IS_SUPER_PRIMARY"/>
+		<field name="MIMETYPE"/>
+		<field name="PREFERRED_PHONE_ACCOUNT_COMPONENT_NAME" since="28"/>
+		<field name="PREFERRED_PHONE_ACCOUNT_ID" since="28"/>
+		<field name="RAW_CONTACT_ID"/>
+		<field name="RES_PACKAGE" since="21"/>
+		<field name="SYNC1"/>
+		<field name="SYNC2"/>
+		<field name="SYNC3"/>
+		<field name="SYNC4"/>
+	</class>
+	<class name="android/provider/ContactsContract$DataColumnsWithJoins" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11"/>
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
+		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
+		<implements name="android/provider/ContactsContract$ContactsColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumns"/>
+		<implements name="android/provider/ContactsContract$DataUsageStatColumns" since="18"/>
+		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
+		<implements name="android/provider/ContactsContract$StatusColumns"/>
+	</class>
+	<class name="android/provider/ContactsContract$DataUsageFeedback" since="14" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<field name="DELETE_USAGE_URI" since="16" deprecated="29"/>
+		<field name="FEEDBACK_URI" deprecated="29"/>
+		<field name="USAGE_TYPE" deprecated="29"/>
+		<field name="USAGE_TYPE_CALL" deprecated="29"/>
+		<field name="USAGE_TYPE_LONG_TEXT" deprecated="29"/>
+		<field name="USAGE_TYPE_SHORT_TEXT" deprecated="29"/>
+	</class>
+	<class name="android/provider/ContactsContract$DataUsageStatColumns" since="18">
+		<extends name="java/lang/Object"/>
+		<field name="LAST_TIME_USED" deprecated="29"/>
+		<field name="TIMES_USED" deprecated="29"/>
+	</class>
+	<class name="android/provider/ContactsContract$DeletedContacts" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$DeletedContactsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DAYS_KEPT_MILLISECONDS"/>
+	</class>
+	<class name="android/provider/ContactsContract$DeletedContactsColumns" since="18">
+		<extends name="java/lang/Object"/>
+		<field name="CONTACT_DELETED_TIMESTAMP"/>
+		<field name="CONTACT_ID"/>
+	</class>
+	<class name="android/provider/ContactsContract$Directory" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="isEnterpriseDirectoryId(J)Z" since="24"/>
+		<method name="isRemoteDirectoryId(J)Z" since="24"/>
+		<method name="notifyDirectoryChange(Landroid/content/ContentResolver;)V"/>
+		<field name="ACCOUNT_NAME"/>
+		<field name="ACCOUNT_TYPE"/>
+		<field name="CALLER_PACKAGE_PARAM_KEY" since="26"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT"/>
+		<field name="DIRECTORY_AUTHORITY"/>
+		<field name="DISPLAY_NAME"/>
+		<field name="ENTERPRISE_CONTENT_URI" since="24"/>
+		<field name="ENTERPRISE_DEFAULT" since="24"/>
+		<field name="ENTERPRISE_LOCAL_INVISIBLE" since="24"/>
+		<field name="EXPORT_SUPPORT"/>
+		<field name="EXPORT_SUPPORT_ANY_ACCOUNT"/>
+		<field name="EXPORT_SUPPORT_NONE"/>
+		<field name="EXPORT_SUPPORT_SAME_ACCOUNT_ONLY"/>
+		<field name="LOCAL_INVISIBLE"/>
+		<field name="PACKAGE_NAME"/>
+		<field name="PHOTO_SUPPORT"/>
+		<field name="PHOTO_SUPPORT_FULL"/>
+		<field name="PHOTO_SUPPORT_FULL_SIZE_ONLY"/>
+		<field name="PHOTO_SUPPORT_NONE"/>
+		<field name="PHOTO_SUPPORT_THUMBNAIL_ONLY"/>
+		<field name="SHORTCUT_SUPPORT"/>
+		<field name="SHORTCUT_SUPPORT_DATA_ITEMS_ONLY"/>
+		<field name="SHORTCUT_SUPPORT_FULL"/>
+		<field name="SHORTCUT_SUPPORT_NONE"/>
+		<field name="TYPE_RESOURCE_ID"/>
+	</class>
+	<class name="android/provider/ContactsContract$DisplayNameSources" since="11">
+		<extends name="java/lang/Object"/>
+		<field name="EMAIL"/>
+		<field name="NICKNAME"/>
+		<field name="ORGANIZATION"/>
+		<field name="PHONE"/>
+		<field name="STRUCTURED_NAME"/>
+		<field name="STRUCTURED_PHONETIC_NAME" since="23"/>
+		<field name="UNDEFINED"/>
+	</class>
+	<class name="android/provider/ContactsContract$DisplayPhoto" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="CONTENT_MAX_DIMENSIONS_URI"/>
+		<field name="CONTENT_URI"/>
+		<field name="DISPLAY_MAX_DIM"/>
+		<field name="THUMBNAIL_MAX_DIM"/>
+	</class>
+	<class name="android/provider/ContactsContract$FullNameStyle" since="11">
+		<extends name="java/lang/Object"/>
+		<field name="CHINESE"/>
+		<field name="CJK"/>
+		<field name="JAPANESE"/>
+		<field name="KOREAN"/>
+		<field name="UNDEFINED"/>
+		<field name="WESTERN"/>
+	</class>
+	<class name="android/provider/ContactsContract$Groups" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$GroupsColumns"/>
+		<implements name="android/provider/ContactsContract$SyncColumns"/>
+		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_SUMMARY_URI"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/ContactsContract$GroupsColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="AUTO_ADD" since="11"/>
+		<field name="DATA_SET" since="14"/>
+		<field name="DELETED"/>
+		<field name="FAVORITES" since="11"/>
+		<field name="GROUP_IS_READ_ONLY" since="11"/>
+		<field name="GROUP_VISIBLE"/>
+		<field name="NOTES"/>
+		<field name="RES_PACKAGE" since="21"/>
+		<field name="SHOULD_SYNC"/>
+		<field name="SUMMARY_COUNT"/>
+		<field name="SUMMARY_WITH_PHONES"/>
+		<field name="SYSTEM_ID"/>
+		<field name="TITLE"/>
+		<field name="TITLE_RES" since="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$Intents" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ACTION_VOICE_SEND_MESSAGE_TO_CONTACTS" since="24"/>
+		<field name="ATTACH_IMAGE"/>
+		<field name="CONTACTS_DATABASE_CREATED" since="18"/>
+		<field name="EXTRA_CREATE_DESCRIPTION"/>
+		<field name="EXTRA_FORCE_CREATE"/>
+		<field name="EXTRA_RECIPIENT_CONTACT_CHAT_ID" since="24"/>
+		<field name="EXTRA_RECIPIENT_CONTACT_NAME" since="24"/>
+		<field name="EXTRA_RECIPIENT_CONTACT_URI" since="24"/>
+		<field name="INVITE_CONTACT" since="14"/>
+		<field name="METADATA_ACCOUNT_TYPE" since="24"/>
+		<field name="METADATA_MIMETYPE" since="24"/>
+		<field name="SEARCH_SUGGESTION_CLICKED"/>
+		<field name="SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED"/>
+		<field name="SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED"/>
+		<field name="SHOW_OR_CREATE_CONTACT"/>
+	</class>
+	<class name="android/provider/ContactsContract$Intents$Insert" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ACTION"/>
+		<field name="COMPANY"/>
+		<field name="DATA" since="11"/>
+		<field name="EMAIL"/>
+		<field name="EMAIL_ISPRIMARY"/>
+		<field name="EMAIL_TYPE"/>
+		<field name="EXTRA_ACCOUNT" since="23"/>
+		<field name="EXTRA_DATA_SET" since="23"/>
+		<field name="FULL_MODE"/>
+		<field name="IM_HANDLE"/>
+		<field name="IM_ISPRIMARY"/>
+		<field name="IM_PROTOCOL"/>
+		<field name="JOB_TITLE"/>
+		<field name="NAME"/>
+		<field name="NOTES"/>
+		<field name="PHONE"/>
+		<field name="PHONETIC_NAME"/>
+		<field name="PHONE_ISPRIMARY"/>
+		<field name="PHONE_TYPE"/>
+		<field name="POSTAL"/>
+		<field name="POSTAL_ISPRIMARY"/>
+		<field name="POSTAL_TYPE"/>
+		<field name="SECONDARY_EMAIL"/>
+		<field name="SECONDARY_EMAIL_TYPE"/>
+		<field name="SECONDARY_PHONE"/>
+		<field name="SECONDARY_PHONE_TYPE"/>
+		<field name="TERTIARY_EMAIL"/>
+		<field name="TERTIARY_EMAIL_TYPE"/>
+		<field name="TERTIARY_PHONE"/>
+		<field name="TERTIARY_PHONE_TYPE"/>
+	</class>
+	<class name="android/provider/ContactsContract$PhoneLookup" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="26"/>
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
+		<implements name="android/provider/ContactsContract$ContactsColumns"/>
+		<implements name="android/provider/ContactsContract$PhoneLookupColumns"/>
+		<field name="CONTENT_FILTER_URI"/>
+		<field name="ENTERPRISE_CONTENT_FILTER_URI" since="21"/>
+		<field name="QUERY_PARAMETER_SIP_ADDRESS" since="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$PhoneLookupColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="CONTACT_ID" since="24"/>
+		<field name="DATA_ID" since="24"/>
+		<field name="LABEL"/>
+		<field name="NORMALIZED_NUMBER" since="16"/>
+		<field name="NUMBER"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="android/provider/ContactsContract$PhoneticNameStyle" since="11">
+		<extends name="java/lang/Object"/>
+		<field name="JAPANESE"/>
+		<field name="KOREAN"/>
+		<field name="PINYIN"/>
+		<field name="UNDEFINED"/>
+	</class>
+	<class name="android/provider/ContactsContract$PinnedPositions" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="pin(Landroid/content/ContentResolver;JI)V"/>
+		<method name="undemote(Landroid/content/ContentResolver;J)V"/>
+		<field name="DEMOTED"/>
+		<field name="UNPINNED"/>
+	</class>
+	<class name="android/provider/ContactsContract$Presence" since="5" deprecated="5">
+		<extends name="android/provider/ContactsContract$StatusUpdates"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+	</class>
+	<class name="android/provider/ContactsContract$PresenceColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="CUSTOM_PROTOCOL"/>
+		<field name="DATA_ID"/>
+		<field name="IM_ACCOUNT"/>
+		<field name="IM_HANDLE"/>
+		<field name="PROTOCOL"/>
+	</class>
+	<class name="android/provider/ContactsContract$Profile" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$ContactNameColumns"/>
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
+		<implements name="android/provider/ContactsContract$ContactStatusColumns"/>
+		<implements name="android/provider/ContactsContract$ContactsColumns"/>
+		<field name="CONTENT_RAW_CONTACTS_URI"/>
+		<field name="CONTENT_URI"/>
+		<field name="CONTENT_VCARD_URI"/>
+		<field name="MIN_ID"/>
+	</class>
+	<class name="android/provider/ContactsContract$ProfileSyncState" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/SyncStateContract$Columns"/>
+		<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B"/>
+		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;"/>
+		<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
+		<method name="set(Landroid/content/ContentProviderClient;Landroid/accounts/Account;[B)V"/>
+		<field name="CONTENT_DIRECTORY"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/ContactsContract$ProviderStatus" since="23">
+		<extends name="java/lang/Object"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATABASE_CREATION_TIMESTAMP" since="26"/>
+		<field name="STATUS"/>
+		<field name="STATUS_BUSY"/>
+		<field name="STATUS_EMPTY"/>
+		<field name="STATUS_NORMAL"/>
+	</class>
+	<class name="android/provider/ContactsContract$QuickContact" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="showQuickContact(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;I[Ljava/lang/String;)V"/>
+		<method name="showQuickContact(Landroid/content/Context;Landroid/graphics/Rect;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;)V" since="23"/>
+		<method name="showQuickContact(Landroid/content/Context;Landroid/view/View;Landroid/net/Uri;I[Ljava/lang/String;)V"/>
+		<method name="showQuickContact(Landroid/content/Context;Landroid/view/View;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;)V" since="23"/>
+		<field name="ACTION_QUICK_CONTACT" since="21"/>
+		<field name="EXTRA_EXCLUDE_MIMES" since="21"/>
+		<field name="EXTRA_MODE" since="23"/>
+		<field name="EXTRA_PRIORITIZED_MIMETYPE" since="23"/>
+		<field name="MODE_LARGE"/>
+		<field name="MODE_MEDIUM"/>
+		<field name="MODE_SMALL"/>
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$ContactNameColumns" since="11"/>
+		<implements name="android/provider/ContactsContract$ContactOptionsColumns"/>
+		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
+		<implements name="android/provider/ContactsContract$SyncColumns"/>
+		<method name="getContactLookupUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;"/>
+		<method name="getLocalAccountName(Landroid/content/Context;)Ljava/lang/String;" since="30"/>
+		<method name="getLocalAccountType(Landroid/content/Context;)Ljava/lang/String;" since="30"/>
+		<method name="newEntityIterator(Landroid/database/Cursor;)Landroid/content/EntityIterator;" since="8"/>
+		<field name="AGGREGATION_MODE_DEFAULT"/>
+		<field name="AGGREGATION_MODE_DISABLED"/>
+		<field name="AGGREGATION_MODE_IMMEDIATE" deprecated="15"/>
+		<field name="AGGREGATION_MODE_SUSPENDED"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$Data" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumns"/>
+		<field name="CONTENT_DIRECTORY"/>
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$DisplayPhoto" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="CONTENT_DIRECTORY"/>
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$Entity" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumns"/>
+		<field name="CONTENT_DIRECTORY"/>
+		<field name="DATA_ID"/>
+	</class>
+	<class name="android/provider/ContactsContract$RawContacts$StreamItems" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$RawContactsColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="ACCOUNT_TYPE_AND_DATA_SET" since="21"/>
+		<field name="AGGREGATION_MODE"/>
+		<field name="BACKUP_ID" since="24"/>
+		<field name="CONTACT_ID"/>
+		<field name="DATA_SET" since="14"/>
+		<field name="DELETED"/>
+		<field name="METADATA_DIRTY" since="24" deprecated="30"/>
+		<field name="RAW_CONTACT_IS_READ_ONLY" since="11"/>
+		<field name="RAW_CONTACT_IS_USER_PROFILE" since="14"/>
+	</class>
+	<class name="android/provider/ContactsContract$RawContactsEntity" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$DataColumns"/>
+		<implements name="android/provider/ContactsContract$RawContactsColumns"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATA_ID"/>
+		<field name="PROFILE_CONTENT_URI" since="14"/>
+	</class>
+	<class name="android/provider/ContactsContract$SearchSnippets" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="DEFERRED_SNIPPETING_KEY"/>
+		<field name="SNIPPET"/>
+	</class>
+	<class name="android/provider/ContactsContract$Settings" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$SettingsColumns"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/ContactsContract$SettingsColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="ACCOUNT_NAME"/>
+		<field name="ACCOUNT_TYPE"/>
+		<field name="ANY_UNSYNCED"/>
+		<field name="DATA_SET" since="14"/>
+		<field name="SHOULD_SYNC"/>
+		<field name="UNGROUPED_COUNT"/>
+		<field name="UNGROUPED_VISIBLE"/>
+		<field name="UNGROUPED_WITH_PHONES"/>
+	</class>
+	<class name="android/provider/ContactsContract$SimAccount" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAccountName()Ljava/lang/String;"/>
+		<method name="getAccountType()Ljava/lang/String;"/>
+		<method name="getEfType()I"/>
+		<method name="getSimSlotIndex()I"/>
+		<field name="ADN_EF_TYPE"/>
+		<field name="CREATOR"/>
+		<field name="FDN_EF_TYPE"/>
+		<field name="SDN_EF_TYPE"/>
+		<field name="UNKNOWN_EF_TYPE"/>
+	</class>
+	<class name="android/provider/ContactsContract$SimContacts" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getSimAccounts(Landroid/content/ContentResolver;)Ljava/util/List;"/>
+		<field name="ACTION_SIM_ACCOUNTS_CHANGED"/>
+	</class>
+	<class name="android/provider/ContactsContract$StatusColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<field name="AVAILABLE" since="8"/>
+		<field name="AWAY" since="8"/>
+		<field name="CAPABILITY_HAS_CAMERA" since="11"/>
+		<field name="CAPABILITY_HAS_VIDEO" since="11"/>
+		<field name="CAPABILITY_HAS_VOICE" since="11"/>
+		<field name="CHAT_CAPABILITY" since="11"/>
+		<field name="DO_NOT_DISTURB" since="8"/>
+		<field name="IDLE" since="8"/>
+		<field name="INVISIBLE" since="8"/>
+		<field name="OFFLINE" since="8"/>
+		<field name="PRESENCE"/>
+		<field name="PRESENCE_CUSTOM_STATUS" since="8" deprecated="15"/>
+		<field name="PRESENCE_STATUS" since="8" deprecated="15"/>
+		<field name="STATUS"/>
+		<field name="STATUS_ICON"/>
+		<field name="STATUS_LABEL"/>
+		<field name="STATUS_RES_PACKAGE"/>
+		<field name="STATUS_TIMESTAMP"/>
+	</class>
+	<class name="android/provider/ContactsContract$StatusUpdates" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$PresenceColumns"/>
+		<implements name="android/provider/ContactsContract$StatusColumns"/>
+		<method name="getPresenceIconResourceId(I)I"/>
+		<method name="getPresencePrecedence(I)I"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="PROFILE_CONTENT_URI" since="14"/>
+	</class>
+	<class name="android/provider/ContactsContract$StreamItemPhotos" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$StreamItemPhotosColumns"/>
+		<field name="PHOTO" deprecated="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$StreamItemPhotosColumns" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="PHOTO_FILE_ID" deprecated="21"/>
+		<field name="PHOTO_URI" deprecated="21"/>
+		<field name="SORT_INDEX" deprecated="21"/>
+		<field name="STREAM_ITEM_ID" deprecated="21"/>
+		<field name="SYNC1" deprecated="21"/>
+		<field name="SYNC2" deprecated="21"/>
+		<field name="SYNC3" deprecated="21"/>
+		<field name="SYNC4" deprecated="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$StreamItems" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$StreamItemsColumns"/>
+		<field name="CONTENT_ITEM_TYPE" deprecated="21"/>
+		<field name="CONTENT_LIMIT_URI" deprecated="21"/>
+		<field name="CONTENT_PHOTO_URI" deprecated="21"/>
+		<field name="CONTENT_TYPE" deprecated="21"/>
+		<field name="CONTENT_URI" deprecated="21"/>
+		<field name="MAX_ITEMS" deprecated="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$StreamItems$StreamItemPhotos" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/ContactsContract$StreamItemPhotosColumns"/>
+		<field name="CONTENT_DIRECTORY" deprecated="21"/>
+		<field name="CONTENT_ITEM_TYPE" deprecated="21"/>
+		<field name="CONTENT_TYPE" deprecated="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$StreamItemsColumns" since="15" deprecated="21" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="ACCOUNT_NAME" deprecated="21"/>
+		<field name="ACCOUNT_TYPE" deprecated="21"/>
+		<field name="COMMENTS" deprecated="21"/>
+		<field name="CONTACT_ID" deprecated="21"/>
+		<field name="CONTACT_LOOKUP_KEY" deprecated="21"/>
+		<field name="DATA_SET" deprecated="21"/>
+		<field name="RAW_CONTACT_ID" deprecated="21"/>
+		<field name="RAW_CONTACT_SOURCE_ID" deprecated="21"/>
+		<field name="RES_ICON" deprecated="21"/>
+		<field name="RES_LABEL" deprecated="21"/>
+		<field name="RES_PACKAGE" deprecated="21"/>
+		<field name="SYNC1" deprecated="21"/>
+		<field name="SYNC2" deprecated="21"/>
+		<field name="SYNC3" deprecated="21"/>
+		<field name="SYNC4" deprecated="21"/>
+		<field name="TEXT" deprecated="21"/>
+		<field name="TIMESTAMP" deprecated="21"/>
+	</class>
+	<class name="android/provider/ContactsContract$SyncColumns" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/ContactsContract$BaseSyncColumns"/>
+		<field name="ACCOUNT_NAME"/>
+		<field name="ACCOUNT_TYPE"/>
+		<field name="DIRTY"/>
+		<field name="SOURCE_ID"/>
+		<field name="VERSION"/>
+	</class>
+	<class name="android/provider/ContactsContract$SyncState" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/SyncStateContract$Columns"/>
+		<method name="get(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)[B"/>
+		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/accounts/Account;)Landroid/util/Pair;"/>
+		<method name="newSetOperation(Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
+		<method name="set(Landroid/content/ContentProviderClient;Landroid/accounts/Account;[B)V"/>
+		<field name="CONTENT_DIRECTORY"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/DocumentsContract" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="buildChildDocumentsUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildChildDocumentsUriUsingTree(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
+		<method name="buildDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildDocumentUriUsingTree(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
+		<method name="buildRecentDocumentsUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildRootUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildRootsUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildSearchDocumentsUri(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="buildTreeDocumentUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
+		<method name="copyDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri;" since="24"/>
+		<method name="createDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
+		<method name="createWebLinkIntent(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/os/Bundle;)Landroid/content/IntentSender;" since="26"/>
+		<method name="deleteDocument(Landroid/content/ContentResolver;Landroid/net/Uri;)Z"/>
+		<method name="ejectRoot(Landroid/content/ContentResolver;Landroid/net/Uri;)V" since="26"/>
+		<method name="findDocumentPath(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/provider/DocumentsContract$Path;" since="26"/>
+		<method name="getDocumentId(Landroid/net/Uri;)Ljava/lang/String;"/>
+		<method name="getDocumentMetadata(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/os/Bundle;" since="29"/>
+		<method name="getDocumentThumbnail(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/graphics/Bitmap;"/>
+		<method name="getRootId(Landroid/net/Uri;)Ljava/lang/String;"/>
+		<method name="getSearchDocumentsQuery(Landroid/net/Uri;)Ljava/lang/String;"/>
+		<method name="getTreeDocumentId(Landroid/net/Uri;)Ljava/lang/String;" since="21"/>
+		<method name="isChildDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Z" since="29"/>
+		<method name="isDocumentUri(Landroid/content/Context;Landroid/net/Uri;)Z"/>
+		<method name="isRootUri(Landroid/content/Context;Landroid/net/Uri;)Z" since="29"/>
+		<method name="isRootsUri(Landroid/content/Context;Landroid/net/Uri;)Z" since="29"/>
+		<method name="isTreeUri(Landroid/net/Uri;)Z" since="24"/>
+		<method name="moveDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;Landroid/net/Uri;)Landroid/net/Uri;" since="24"/>
+		<method name="removeDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Landroid/net/Uri;)Z" since="24"/>
+		<method name="renameDocument(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;" since="21"/>
+		<field name="ACTION_DOCUMENT_SETTINGS" since="26"/>
+		<field name="EXTRA_ERROR"/>
+		<field name="EXTRA_EXCLUDE_SELF" since="23"/>
+		<field name="EXTRA_INFO"/>
+		<field name="EXTRA_INITIAL_URI" since="26"/>
+		<field name="EXTRA_LOADING"/>
+		<field name="EXTRA_ORIENTATION" since="24"/>
+		<field name="EXTRA_PROMPT" since="23"/>
+		<field name="METADATA_EXIF" since="29"/>
+		<field name="METADATA_TREE_COUNT" since="29"/>
+		<field name="METADATA_TREE_SIZE" since="29"/>
+		<field name="METADATA_TYPES" since="29"/>
+		<field name="PROVIDER_INTERFACE"/>
+		<field name="QUERY_ARG_DISPLAY_NAME" since="29"/>
+		<field name="QUERY_ARG_EXCLUDE_MEDIA" since="29"/>
+		<field name="QUERY_ARG_FILE_SIZE_OVER" since="29"/>
+		<field name="QUERY_ARG_LAST_MODIFIED_AFTER" since="29"/>
+		<field name="QUERY_ARG_MIME_TYPES" since="29"/>
+	</class>
+	<class name="android/provider/DocumentsContract$Document" since="19">
+		<extends name="java/lang/Object"/>
+		<field name="COLUMN_DISPLAY_NAME"/>
+		<field name="COLUMN_DOCUMENT_ID"/>
+		<field name="COLUMN_FLAGS"/>
+		<field name="COLUMN_ICON"/>
+		<field name="COLUMN_LAST_MODIFIED"/>
+		<field name="COLUMN_MIME_TYPE"/>
+		<field name="COLUMN_SIZE"/>
+		<field name="COLUMN_SUMMARY"/>
+		<field name="FLAG_DIR_BLOCKS_OPEN_DOCUMENT_TREE" since="30"/>
+		<field name="FLAG_DIR_PREFERS_GRID"/>
+		<field name="FLAG_DIR_PREFERS_LAST_MODIFIED"/>
+		<field name="FLAG_DIR_SUPPORTS_CREATE"/>
+		<field name="FLAG_PARTIAL" since="29"/>
+		<field name="FLAG_SUPPORTS_COPY" since="24"/>
+		<field name="FLAG_SUPPORTS_DELETE"/>
+		<field name="FLAG_SUPPORTS_METADATA" since="29"/>
+		<field name="FLAG_SUPPORTS_MOVE" since="24"/>
+		<field name="FLAG_SUPPORTS_REMOVE" since="24"/>
+		<field name="FLAG_SUPPORTS_RENAME" since="21"/>
+		<field name="FLAG_SUPPORTS_SETTINGS" since="26"/>
+		<field name="FLAG_SUPPORTS_THUMBNAIL"/>
+		<field name="FLAG_SUPPORTS_WRITE"/>
+		<field name="FLAG_VIRTUAL_DOCUMENT" since="24"/>
+		<field name="FLAG_WEB_LINKABLE" since="26"/>
+		<field name="MIME_TYPE_DIR"/>
+	</class>
+	<class name="android/provider/DocumentsContract$Path" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/List;)V"/>
+		<method name="getPath()Ljava/util/List;"/>
+		<method name="getRootId()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/provider/DocumentsContract$Root" since="19">
+		<extends name="java/lang/Object"/>
+		<field name="COLUMN_AVAILABLE_BYTES"/>
+		<field name="COLUMN_CAPACITY_BYTES" since="24"/>
+		<field name="COLUMN_DOCUMENT_ID"/>
+		<field name="COLUMN_FLAGS"/>
+		<field name="COLUMN_ICON"/>
+		<field name="COLUMN_MIME_TYPES"/>
+		<field name="COLUMN_QUERY_ARGS" since="29"/>
+		<field name="COLUMN_ROOT_ID"/>
+		<field name="COLUMN_SUMMARY"/>
+		<field name="COLUMN_TITLE"/>
+		<field name="FLAG_EMPTY" since="29"/>
+		<field name="FLAG_LOCAL_ONLY"/>
+		<field name="FLAG_SUPPORTS_CREATE"/>
+		<field name="FLAG_SUPPORTS_EJECT" since="26"/>
+		<field name="FLAG_SUPPORTS_IS_CHILD" since="21"/>
+		<field name="FLAG_SUPPORTS_RECENTS"/>
+		<field name="FLAG_SUPPORTS_SEARCH"/>
+		<field name="MIME_TYPE_ITEM" since="26"/>
+	</class>
+	<class name="android/provider/DocumentsProvider" since="19">
+		<extends name="android/content/ContentProvider"/>
+		<method name="&lt;init>()V"/>
+		<method name="copyDocument(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="24"/>
+		<method name="createDocument(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="createWebLinkIntent(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/IntentSender;" since="26"/>
+		<method name="deleteDocument(Ljava/lang/String;)V"/>
+		<method name="ejectRoot(Ljava/lang/String;)V" since="26"/>
+		<method name="findDocumentPath(Ljava/lang/String;Ljava/lang/String;)Landroid/provider/DocumentsContract$Path;" since="26"/>
+		<method name="getDocumentMetadata(Ljava/lang/String;)Landroid/os/Bundle;" since="29"/>
+		<method name="getDocumentStreamTypes(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" since="24"/>
+		<method name="getDocumentType(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isChildDocument(Ljava/lang/String;Ljava/lang/String;)Z" since="21"/>
+		<method name="moveDocument(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="24"/>
+		<method name="openDocument(Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor;"/>
+		<method name="openDocumentThumbnail(Ljava/lang/String;Landroid/graphics/Point;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;"/>
+		<method name="openTypedDocument(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/content/res/AssetFileDescriptor;" since="24"/>
+		<method name="queryChildDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/database/Cursor;" since="26"/>
+		<method name="queryChildDocuments(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="queryDocument(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="queryRecentDocuments(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="queryRecentDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;)Landroid/database/Cursor;" since="29"/>
+		<method name="queryRoots([Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="querySearchDocuments(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor;"/>
+		<method name="querySearchDocuments(Ljava/lang/String;[Ljava/lang/String;Landroid/os/Bundle;)Landroid/database/Cursor;" since="29"/>
+		<method name="removeDocument(Ljava/lang/String;Ljava/lang/String;)V" since="24"/>
+		<method name="renameDocument(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="revokeDocumentPermission(Ljava/lang/String;)V" since="21"/>
+	</class>
+	<class name="android/provider/FontRequest" since="26" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="31"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V" deprecated="31"/>
+		<method name="getCertificates()Ljava/util/List;" deprecated="31"/>
+		<method name="getProviderAuthority()Ljava/lang/String;" deprecated="31"/>
+		<method name="getProviderPackage()Ljava/lang/String;" deprecated="31"/>
+		<method name="getQuery()Ljava/lang/String;" deprecated="31"/>
+	</class>
+	<class name="android/provider/FontsContract" since="26" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroid/provider/FontsContract$FontInfo;)Landroid/graphics/Typeface;" deprecated="31"/>
+		<method name="fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/provider/FontRequest;)Landroid/provider/FontsContract$FontFamilyResult;" deprecated="31"/>
+		<method name="requestFonts(Landroid/content/Context;Landroid/provider/FontRequest;Landroid/os/Handler;Landroid/os/CancellationSignal;Landroid/provider/FontsContract$FontRequestCallback;)V" deprecated="31"/>
+	</class>
+	<class name="android/provider/FontsContract$Columns" since="26" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="FILE_ID" deprecated="31"/>
+		<field name="ITALIC" deprecated="31"/>
+		<field name="RESULT_CODE" deprecated="31"/>
+		<field name="RESULT_CODE_FONT_NOT_FOUND" deprecated="31"/>
+		<field name="RESULT_CODE_FONT_UNAVAILABLE" deprecated="31"/>
+		<field name="RESULT_CODE_MALFORMED_QUERY" deprecated="31"/>
+		<field name="RESULT_CODE_OK" deprecated="31"/>
+		<field name="TTC_INDEX" deprecated="31"/>
+		<field name="VARIATION_SETTINGS" deprecated="31"/>
+		<field name="WEIGHT" deprecated="31"/>
+	</class>
+	<class name="android/provider/FontsContract$FontFamilyResult" since="26" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="getFonts()[Landroid/provider/FontsContract$FontInfo;" deprecated="31"/>
+		<method name="getStatusCode()I" deprecated="31"/>
+		<field name="STATUS_OK" deprecated="31"/>
+		<field name="STATUS_REJECTED" deprecated="31"/>
+		<field name="STATUS_UNEXPECTED_DATA_PROVIDED" deprecated="31"/>
+		<field name="STATUS_WRONG_CERTIFICATES" deprecated="31"/>
+	</class>
+	<class name="android/provider/FontsContract$FontInfo" since="26" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="getAxes()[Landroid/graphics/fonts/FontVariationAxis;" deprecated="31"/>
+		<method name="getResultCode()I" deprecated="31"/>
+		<method name="getTtcIndex()I" deprecated="31"/>
+		<method name="getUri()Landroid/net/Uri;" deprecated="31"/>
+		<method name="getWeight()I" deprecated="31"/>
+		<method name="isItalic()Z" deprecated="31"/>
+	</class>
+	<class name="android/provider/FontsContract$FontRequestCallback" since="26" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="onTypefaceRequestFailed(I)V" deprecated="31"/>
+		<method name="onTypefaceRetrieved(Landroid/graphics/Typeface;)V" deprecated="31"/>
+		<field name="FAIL_REASON_FONT_LOAD_ERROR" deprecated="31"/>
+		<field name="FAIL_REASON_FONT_NOT_FOUND" deprecated="31"/>
+		<field name="FAIL_REASON_FONT_UNAVAILABLE" deprecated="31"/>
+		<field name="FAIL_REASON_MALFORMED_QUERY" deprecated="31"/>
+		<field name="FAIL_REASON_PROVIDER_NOT_FOUND" deprecated="31"/>
+		<field name="FAIL_REASON_WRONG_CERTIFICATES" deprecated="31"/>
+	</class>
+	<class name="android/provider/LiveFolders" since="3" deprecated="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="ACTION_CREATE_LIVE_FOLDER" deprecated="29"/>
+		<field name="DESCRIPTION" deprecated="29"/>
+		<field name="DISPLAY_MODE_GRID" deprecated="29"/>
+		<field name="DISPLAY_MODE_LIST" deprecated="29"/>
+		<field name="EXTRA_LIVE_FOLDER_BASE_INTENT" deprecated="29"/>
+		<field name="EXTRA_LIVE_FOLDER_DISPLAY_MODE" deprecated="29"/>
+		<field name="EXTRA_LIVE_FOLDER_ICON" deprecated="29"/>
+		<field name="EXTRA_LIVE_FOLDER_NAME" deprecated="29"/>
+		<field name="ICON_BITMAP" deprecated="29"/>
+		<field name="ICON_PACKAGE" deprecated="29"/>
+		<field name="ICON_RESOURCE" deprecated="29"/>
+		<field name="INTENT" deprecated="29"/>
+		<field name="NAME" deprecated="29"/>
+	</class>
+	<class name="android/provider/MediaStore" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="canManageMedia(Landroid/content/Context;)Z" since="31"/>
+		<method name="createDeleteRequest(Landroid/content/ContentResolver;Ljava/util/Collection;)Landroid/app/PendingIntent;" since="30"/>
+		<method name="createFavoriteRequest(Landroid/content/ContentResolver;Ljava/util/Collection;Z)Landroid/app/PendingIntent;" since="30"/>
+		<method name="createTrashRequest(Landroid/content/ContentResolver;Ljava/util/Collection;Z)Landroid/app/PendingIntent;" since="30"/>
+		<method name="createWriteRequest(Landroid/content/ContentResolver;Ljava/util/Collection;)Landroid/app/PendingIntent;" since="30"/>
+		<method name="getDocumentUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/net/Uri;" since="26"/>
+		<method name="getExternalVolumeNames(Landroid/content/Context;)Ljava/util/Set;" since="29"/>
+		<method name="getGeneration(Landroid/content/Context;Ljava/lang/String;)J" since="30"/>
+		<method name="getMediaScannerUri()Landroid/net/Uri;"/>
+		<method name="getMediaUri(Landroid/content/Context;Landroid/net/Uri;)Landroid/net/Uri;" since="29"/>
+		<method name="getOriginalMediaFormatFileDescriptor(Landroid/content/Context;Landroid/os/ParcelFileDescriptor;)Landroid/os/ParcelFileDescriptor;" since="31"/>
+		<method name="getRecentExternalVolumeNames(Landroid/content/Context;)Ljava/util/Set;" since="30"/>
+		<method name="getRedactedUri(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/net/Uri;" since="31"/>
+		<method name="getRedactedUri(Landroid/content/ContentResolver;Ljava/util/List;)Ljava/util/List;" since="31"/>
+		<method name="getRequireOriginal(Landroid/net/Uri;)Z" since="30"/>
+		<method name="getVersion(Landroid/content/Context;)Ljava/lang/String;" since="12"/>
+		<method name="getVersion(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;" since="29"/>
+		<method name="getVolumeName(Landroid/net/Uri;)Ljava/lang/String;" since="29"/>
+		<method name="isCurrentSystemGallery(Landroid/content/ContentResolver;ILjava/lang/String;)Z" since="31"/>
+		<method name="setIncludePending(Landroid/net/Uri;)Landroid/net/Uri;" since="29" deprecated="30"/>
+		<method name="setRequireOriginal(Landroid/net/Uri;)Landroid/net/Uri;" since="29"/>
+		<field name="ACTION_IMAGE_CAPTURE" since="3"/>
+		<field name="ACTION_IMAGE_CAPTURE_SECURE" since="17"/>
+		<field name="ACTION_REVIEW" since="29"/>
+		<field name="ACTION_REVIEW_SECURE" since="29"/>
+		<field name="ACTION_VIDEO_CAPTURE" since="3"/>
+		<field name="AUTHORITY"/>
+		<field name="AUTHORITY_URI" since="29"/>
+		<field name="EXTRA_ACCEPT_ORIGINAL_MEDIA_FORMAT" since="31"/>
+		<field name="EXTRA_BRIGHTNESS" since="29"/>
+		<field name="EXTRA_DURATION_LIMIT" since="8"/>
+		<field name="EXTRA_FINISH_ON_COMPLETION" since="3"/>
+		<field name="EXTRA_FULL_SCREEN" since="8"/>
+		<field name="EXTRA_MEDIA_ALBUM" since="3"/>
+		<field name="EXTRA_MEDIA_ARTIST" since="3"/>
+		<field name="EXTRA_MEDIA_CAPABILITIES" since="31"/>
+		<field name="EXTRA_MEDIA_CAPABILITIES_UID" since="31"/>
+		<field name="EXTRA_MEDIA_FOCUS" since="3"/>
+		<field name="EXTRA_MEDIA_GENRE" since="21"/>
+		<field name="EXTRA_MEDIA_PLAYLIST" since="21" deprecated="31"/>
+		<field name="EXTRA_MEDIA_RADIO_CHANNEL" since="21"/>
+		<field name="EXTRA_MEDIA_TITLE" since="3"/>
+		<field name="EXTRA_OUTPUT" since="3"/>
+		<field name="EXTRA_SCREEN_ORIENTATION" since="3"/>
+		<field name="EXTRA_SHOW_ACTION_ICONS" since="8"/>
+		<field name="EXTRA_SIZE_LIMIT" since="8"/>
+		<field name="EXTRA_VIDEO_QUALITY" since="3"/>
+		<field name="INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH" since="9"/>
+		<field name="INTENT_ACTION_MEDIA_SEARCH" since="3"/>
+		<field name="INTENT_ACTION_MUSIC_PLAYER" since="8" deprecated="15"/>
+		<field name="INTENT_ACTION_STILL_IMAGE_CAMERA" since="3"/>
+		<field name="INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE" since="17"/>
+		<field name="INTENT_ACTION_TEXT_OPEN_FROM_SEARCH" since="17"/>
+		<field name="INTENT_ACTION_VIDEO_CAMERA" since="3"/>
+		<field name="INTENT_ACTION_VIDEO_PLAY_FROM_SEARCH" since="17"/>
+		<field name="MATCH_DEFAULT" since="30"/>
+		<field name="MATCH_EXCLUDE" since="30"/>
+		<field name="MATCH_INCLUDE" since="30"/>
+		<field name="MATCH_ONLY" since="30"/>
+		<field name="MEDIA_IGNORE_FILENAME" since="9"/>
+		<field name="MEDIA_SCANNER_VOLUME"/>
+		<field name="META_DATA_REVIEW_GALLERY_PREWARM_SERVICE" since="30"/>
+		<field name="META_DATA_STILL_IMAGE_CAMERA_PREWARM_SERVICE" since="23"/>
+		<field name="QUERY_ARG_INCLUDE_RECENTLY_UNMOUNTED_VOLUMES" since="31"/>
+		<field name="QUERY_ARG_MATCH_FAVORITE" since="30"/>
+		<field name="QUERY_ARG_MATCH_PENDING" since="30"/>
+		<field name="QUERY_ARG_MATCH_TRASHED" since="30"/>
+		<field name="QUERY_ARG_RELATED_URI" since="30"/>
+		<field name="UNKNOWN_STRING" since="8"/>
+		<field name="VOLUME_EXTERNAL" since="29"/>
+		<field name="VOLUME_EXTERNAL_PRIMARY" since="29"/>
+		<field name="VOLUME_INTERNAL" since="29"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="keyFor(Ljava/lang/String;)Ljava/lang/String;" deprecated="30"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$AlbumColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="ALBUM"/>
+		<field name="ALBUM_ART" deprecated="29"/>
+		<field name="ALBUM_ID"/>
+		<field name="ALBUM_KEY" deprecated="30"/>
+		<field name="ARTIST"/>
+		<field name="ARTIST_ID" since="29"/>
+		<field name="ARTIST_KEY" since="30" deprecated="30"/>
+		<field name="FIRST_YEAR"/>
+		<field name="LAST_YEAR"/>
+		<field name="NUMBER_OF_SONGS"/>
+		<field name="NUMBER_OF_SONGS_FOR_ARTIST" since="3"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Albums" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/MediaStore$Audio$AlbumColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="ENTRY_CONTENT_TYPE"/>
+		<field name="EXTERNAL_CONTENT_URI"/>
+		<field name="INTERNAL_CONTENT_URI"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$ArtistColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="ARTIST"/>
+		<field name="ARTIST_KEY" deprecated="30"/>
+		<field name="NUMBER_OF_ALBUMS"/>
+		<field name="NUMBER_OF_TRACKS"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Artists" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/MediaStore$Audio$ArtistColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="ENTRY_CONTENT_TYPE"/>
+		<field name="EXTERNAL_CONTENT_URI"/>
+		<field name="INTERNAL_CONTENT_URI"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Artists$Albums" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns" since="31"/>
+		<implements name="android/provider/MediaStore$Audio$AlbumColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$AudioColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$MediaColumns"/>
+		<field name="ALBUM" removed="30"/>
+		<field name="ALBUM_ART" removed="14"/>
+		<field name="ALBUM_ID"/>
+		<field name="ALBUM_KEY" deprecated="30"/>
+		<field name="ARTIST" removed="30"/>
+		<field name="ARTIST_ID"/>
+		<field name="ARTIST_KEY" deprecated="30"/>
+		<field name="BOOKMARK" since="8"/>
+		<field name="COMPOSER" removed="30"/>
+		<field name="DURATION" removed="29"/>
+		<field name="GENRE" since="30"/>
+		<field name="GENRE_ID" since="30"/>
+		<field name="GENRE_KEY" since="30" deprecated="30"/>
+		<field name="IS_ALARM"/>
+		<field name="IS_AUDIOBOOK" since="29"/>
+		<field name="IS_MUSIC"/>
+		<field name="IS_NOTIFICATION"/>
+		<field name="IS_PODCAST" since="8"/>
+		<field name="IS_RECORDING" since="31"/>
+		<field name="IS_RINGTONE"/>
+		<field name="TITLE_KEY" deprecated="30"/>
+		<field name="TITLE_RESOURCE_URI" since="30"/>
+		<field name="TRACK"/>
+		<field name="YEAR"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Genres" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/MediaStore$Audio$GenresColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getContentUriForAudioId(Ljava/lang/String;I)Landroid/net/Uri;" since="11"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="ENTRY_CONTENT_TYPE"/>
+		<field name="EXTERNAL_CONTENT_URI"/>
+		<field name="INTERNAL_CONTENT_URI"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Genres$Members" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$Audio$AudioColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;"/>
+		<field name="AUDIO_ID"/>
+		<field name="CONTENT_DIRECTORY"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="GENRE_ID"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$GenresColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="NAME"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Media" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$Audio$AudioColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;" since="30"/>
+		<method name="getContentUriForPath(Ljava/lang/String;)Landroid/net/Uri;" deprecated="29"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="ENTRY_CONTENT_TYPE" since="21"/>
+		<field name="EXTERNAL_CONTENT_URI"/>
+		<field name="EXTRA_MAX_BYTES" since="3"/>
+		<field name="INTERNAL_CONTENT_URI"/>
+		<field name="RECORD_SOUND_ACTION"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Playlists" since="1" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/MediaStore$Audio$PlaylistsColumns"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;" deprecated="31"/>
+		<field name="CONTENT_TYPE" deprecated="31"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="31"/>
+		<field name="ENTRY_CONTENT_TYPE" deprecated="31"/>
+		<field name="EXTERNAL_CONTENT_URI" deprecated="31"/>
+		<field name="INTERNAL_CONTENT_URI" deprecated="31"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Playlists$Members" since="1" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$Audio$AudioColumns"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;" deprecated="31"/>
+		<method name="moveItem(Landroid/content/ContentResolver;JII)Z" since="8" deprecated="31"/>
+		<field name="AUDIO_ID" deprecated="31"/>
+		<field name="CONTENT_DIRECTORY" deprecated="31"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="31"/>
+		<field name="PLAYLIST_ID" deprecated="31"/>
+		<field name="PLAY_ORDER" deprecated="31"/>
+		<field name="_ID" deprecated="31"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$PlaylistsColumns" since="1" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$MediaColumns" since="30"/>
+		<field name="DATA" deprecated="29"/>
+		<field name="DATE_ADDED" deprecated="31"/>
+		<field name="DATE_MODIFIED" deprecated="31"/>
+		<field name="NAME" deprecated="31"/>
+	</class>
+	<class name="android/provider/MediaStore$Audio$Radio" since="21">
+		<extends name="java/lang/Object"/>
+		<field name="ENTRY_CONTENT_TYPE"/>
+	</class>
+	<class name="android/provider/MediaStore$DownloadColumns" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$MediaColumns"/>
+		<field name="DOWNLOAD_URI"/>
+		<field name="REFERER_URI"/>
+	</class>
+	<class name="android/provider/MediaStore$Downloads" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$DownloadColumns"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;" since="30"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="EXTERNAL_CONTENT_URI"/>
+		<field name="INTERNAL_CONTENT_URI"/>
+	</class>
+	<class name="android/provider/MediaStore$Files" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;"/>
+	</class>
+	<class name="android/provider/MediaStore$Files$FileColumns" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$MediaColumns"/>
+		<field name="MEDIA_TYPE"/>
+		<field name="MEDIA_TYPE_AUDIO"/>
+		<field name="MEDIA_TYPE_DOCUMENT" since="30"/>
+		<field name="MEDIA_TYPE_IMAGE"/>
+		<field name="MEDIA_TYPE_NONE"/>
+		<field name="MEDIA_TYPE_PLAYLIST" deprecated="31"/>
+		<field name="MEDIA_TYPE_SUBTITLE" since="30"/>
+		<field name="MEDIA_TYPE_VIDEO"/>
+		<field name="MIME_TYPE"/>
+		<field name="PARENT"/>
+		<field name="TITLE" removed="30"/>
+	</class>
+	<class name="android/provider/MediaStore$Images" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/provider/MediaStore$Images$ImageColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$MediaColumns"/>
+		<field name="BUCKET_DISPLAY_NAME" removed="29"/>
+		<field name="BUCKET_ID" removed="29"/>
+		<field name="DATE_TAKEN" removed="29"/>
+		<field name="DESCRIPTION"/>
+		<field name="EXPOSURE_TIME" since="30"/>
+		<field name="F_NUMBER" since="30"/>
+		<field name="ISO" since="30"/>
+		<field name="IS_PRIVATE"/>
+		<field name="LATITUDE" deprecated="29"/>
+		<field name="LONGITUDE" deprecated="29"/>
+		<field name="MINI_THUMB_MAGIC" deprecated="29"/>
+		<field name="ORIENTATION" removed="29"/>
+		<field name="PICASA_ID" deprecated="29"/>
+		<field name="SCENE_CAPTURE_TYPE" since="30"/>
+	</class>
+	<class name="android/provider/MediaStore$Images$Media" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$Images$ImageColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getBitmap(Landroid/content/ContentResolver;Landroid/net/Uri;)Landroid/graphics/Bitmap;" deprecated="29"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;" since="30"/>
+		<method name="insertImage(Landroid/content/ContentResolver;Landroid/graphics/Bitmap;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="insertImage(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="EXTERNAL_CONTENT_URI"/>
+		<field name="INTERNAL_CONTENT_URI"/>
+	</class>
+	<class name="android/provider/MediaStore$Images$Thumbnails" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V" since="5" deprecated="29"/>
+		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8" deprecated="29"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;" deprecated="29"/>
+		<method name="getKindSize(I)Landroid/util/Size;" since="30" deprecated="30"/>
+		<method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="5" deprecated="29"/>
+		<method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8" deprecated="29"/>
+		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+		<method name="queryMiniThumbnail(Landroid/content/ContentResolver;JI[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+		<method name="queryMiniThumbnails(Landroid/content/ContentResolver;Landroid/net/Uri;I[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+		<field name="DATA" deprecated="29"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="29"/>
+		<field name="EXTERNAL_CONTENT_URI" deprecated="29"/>
+		<field name="FULL_SCREEN_KIND" deprecated="29"/>
+		<field name="HEIGHT" deprecated="29"/>
+		<field name="IMAGE_ID" deprecated="29"/>
+		<field name="INTERNAL_CONTENT_URI" deprecated="29"/>
+		<field name="KIND" deprecated="29"/>
+		<field name="MICRO_KIND" deprecated="29"/>
+		<field name="MINI_KIND" deprecated="29"/>
+		<field name="THUMB_DATA" since="5" deprecated="29"/>
+		<field name="WIDTH" deprecated="29"/>
+	</class>
+	<class name="android/provider/MediaStore$MediaColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="ALBUM" since="30"/>
+		<field name="ALBUM_ARTIST" since="30"/>
+		<field name="ARTIST" since="30"/>
+		<field name="AUTHOR" since="30"/>
+		<field name="BITRATE" since="30"/>
+		<field name="BUCKET_DISPLAY_NAME" since="29"/>
+		<field name="BUCKET_ID" since="29"/>
+		<field name="CAPTURE_FRAMERATE" since="30"/>
+		<field name="CD_TRACK_NUMBER" since="30"/>
+		<field name="COMPILATION" since="30"/>
+		<field name="COMPOSER" since="30"/>
+		<field name="DATA" deprecated="29"/>
+		<field name="DATE_ADDED"/>
+		<field name="DATE_EXPIRES" since="29"/>
+		<field name="DATE_MODIFIED"/>
+		<field name="DATE_TAKEN" since="29"/>
+		<field name="DISC_NUMBER" since="30"/>
+		<field name="DISPLAY_NAME"/>
+		<field name="DOCUMENT_ID" since="29"/>
+		<field name="DURATION" since="29"/>
+		<field name="GENERATION_ADDED" since="30"/>
+		<field name="GENERATION_MODIFIED" since="30"/>
+		<field name="GENRE" since="30"/>
+		<field name="HEIGHT" since="16"/>
+		<field name="INSTANCE_ID" since="29"/>
+		<field name="IS_DOWNLOAD" since="30"/>
+		<field name="IS_DRM" since="30"/>
+		<field name="IS_FAVORITE" since="30"/>
+		<field name="IS_PENDING" since="29"/>
+		<field name="IS_TRASHED" since="30"/>
+		<field name="MIME_TYPE"/>
+		<field name="NUM_TRACKS" since="30"/>
+		<field name="ORIENTATION" since="29"/>
+		<field name="ORIGINAL_DOCUMENT_ID" since="29"/>
+		<field name="OWNER_PACKAGE_NAME" since="29"/>
+		<field name="RELATIVE_PATH" since="29"/>
+		<field name="RESOLUTION" since="30"/>
+		<field name="SIZE"/>
+		<field name="TITLE"/>
+		<field name="VOLUME_NAME" since="29"/>
+		<field name="WIDTH" since="16"/>
+		<field name="WRITER" since="30"/>
+		<field name="XMP" since="30"/>
+		<field name="YEAR" since="30"/>
+	</class>
+	<class name="android/provider/MediaStore$Video" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;)Landroid/database/Cursor;" deprecated="29"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/MediaStore$Video$Media" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$Video$VideoColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="getContentUri(Ljava/lang/String;J)Landroid/net/Uri;" since="30"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="EXTERNAL_CONTENT_URI"/>
+		<field name="INTERNAL_CONTENT_URI"/>
+	</class>
+	<class name="android/provider/MediaStore$Video$Thumbnails" since="5" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;J)V" deprecated="29"/>
+		<method name="cancelThumbnailRequest(Landroid/content/ContentResolver;JJ)V" since="8" deprecated="29"/>
+		<method name="getContentUri(Ljava/lang/String;)Landroid/net/Uri;" deprecated="29"/>
+		<method name="getKindSize(I)Landroid/util/Size;" since="30" deprecated="30"/>
+		<method name="getThumbnail(Landroid/content/ContentResolver;JILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" deprecated="29"/>
+		<method name="getThumbnail(Landroid/content/ContentResolver;JJILandroid/graphics/BitmapFactory$Options;)Landroid/graphics/Bitmap;" since="8" deprecated="29"/>
+		<field name="DATA" deprecated="29"/>
+		<field name="DEFAULT_SORT_ORDER" deprecated="29"/>
+		<field name="EXTERNAL_CONTENT_URI" deprecated="29"/>
+		<field name="FULL_SCREEN_KIND" deprecated="29"/>
+		<field name="HEIGHT" deprecated="29"/>
+		<field name="INTERNAL_CONTENT_URI" deprecated="29"/>
+		<field name="KIND" deprecated="29"/>
+		<field name="MICRO_KIND" deprecated="29"/>
+		<field name="MINI_KIND" deprecated="29"/>
+		<field name="VIDEO_ID" deprecated="29"/>
+		<field name="WIDTH" deprecated="29"/>
+	</class>
+	<class name="android/provider/MediaStore$Video$VideoColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/MediaStore$MediaColumns"/>
+		<field name="ALBUM" removed="30"/>
+		<field name="ARTIST" removed="30"/>
+		<field name="BOOKMARK" since="3"/>
+		<field name="BUCKET_DISPLAY_NAME" since="3" removed="29"/>
+		<field name="BUCKET_ID" since="3" removed="29"/>
+		<field name="CATEGORY"/>
+		<field name="COLOR_RANGE" since="30"/>
+		<field name="COLOR_STANDARD" since="30"/>
+		<field name="COLOR_TRANSFER" since="30"/>
+		<field name="DATE_TAKEN" removed="29"/>
+		<field name="DESCRIPTION"/>
+		<field name="DURATION" removed="29"/>
+		<field name="IS_PRIVATE"/>
+		<field name="LANGUAGE"/>
+		<field name="LATITUDE" deprecated="29"/>
+		<field name="LONGITUDE" deprecated="29"/>
+		<field name="MINI_THUMB_MAGIC" deprecated="29"/>
+		<field name="RESOLUTION" removed="30"/>
+		<field name="TAGS"/>
+	</class>
+	<class name="android/provider/OpenableColumns" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="DISPLAY_NAME"/>
+		<field name="SIZE"/>
+	</class>
+	<class name="android/provider/SearchRecentSuggestions" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;I)V"/>
+		<method name="clearHistory()V"/>
+		<method name="saveRecentQuery(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="truncateHistory(Landroid/content/ContentResolver;I)V"/>
+		<field name="QUERIES_PROJECTION_1LINE"/>
+		<field name="QUERIES_PROJECTION_2LINE"/>
+		<field name="QUERIES_PROJECTION_DATE_INDEX"/>
+		<field name="QUERIES_PROJECTION_DISPLAY1_INDEX"/>
+		<field name="QUERIES_PROJECTION_DISPLAY2_INDEX"/>
+		<field name="QUERIES_PROJECTION_QUERY_INDEX"/>
+	</class>
+	<class name="android/provider/Settings" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="canDrawOverlays(Landroid/content/Context;)Z" since="23"/>
+		<field name="ACTION_ACCESSIBILITY_SETTINGS" since="5"/>
+		<field name="ACTION_ADD_ACCOUNT" since="8"/>
+		<field name="ACTION_AIRPLANE_MODE_SETTINGS" since="3"/>
+		<field name="ACTION_APN_SETTINGS"/>
+		<field name="ACTION_APPLICATION_DETAILS_SETTINGS" since="9"/>
+		<field name="ACTION_APPLICATION_DEVELOPMENT_SETTINGS" since="3"/>
+		<field name="ACTION_APPLICATION_SETTINGS"/>
+		<field name="ACTION_APP_NOTIFICATION_BUBBLE_SETTINGS" since="29"/>
+		<field name="ACTION_APP_NOTIFICATION_SETTINGS" since="26"/>
+		<field name="ACTION_APP_OPEN_BY_DEFAULT_SETTINGS" since="31"/>
+		<field name="ACTION_APP_SEARCH_SETTINGS" since="29"/>
+		<field name="ACTION_APP_USAGE_SETTINGS" since="29"/>
+		<field name="ACTION_AUTO_ROTATE_SETTINGS" since="31"/>
+		<field name="ACTION_BATTERY_SAVER_SETTINGS" since="22"/>
+		<field name="ACTION_BIOMETRIC_ENROLL" since="30"/>
+		<field name="ACTION_BLUETOOTH_SETTINGS"/>
+		<field name="ACTION_CAPTIONING_SETTINGS" since="19"/>
+		<field name="ACTION_CAST_SETTINGS" since="21"/>
+		<field name="ACTION_CHANNEL_NOTIFICATION_SETTINGS" since="26"/>
+		<field name="ACTION_CONDITION_PROVIDER_SETTINGS" since="30"/>
+		<field name="ACTION_DATA_ROAMING_SETTINGS" since="3"/>
+		<field name="ACTION_DATA_USAGE_SETTINGS" since="28"/>
+		<field name="ACTION_DATE_SETTINGS"/>
+		<field name="ACTION_DEVICE_INFO_SETTINGS" since="8"/>
+		<field name="ACTION_DISPLAY_SETTINGS"/>
+		<field name="ACTION_DREAM_SETTINGS" since="18"/>
+		<field name="ACTION_FINGERPRINT_ENROLL" since="28" deprecated="30"/>
+		<field name="ACTION_HARD_KEYBOARD_SETTINGS" since="24"/>
+		<field name="ACTION_HOME_SETTINGS" since="21"/>
+		<field name="ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS" since="24"/>
+		<field name="ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS" since="23"/>
+		<field name="ACTION_INPUT_METHOD_SETTINGS" since="3"/>
+		<field name="ACTION_INPUT_METHOD_SUBTYPE_SETTINGS" since="11"/>
+		<field name="ACTION_INTERNAL_STORAGE_SETTINGS" since="3"/>
+		<field name="ACTION_LOCALE_SETTINGS"/>
+		<field name="ACTION_LOCATION_SOURCE_SETTINGS"/>
+		<field name="ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS" since="9"/>
+		<field name="ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION" since="30"/>
+		<field name="ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS" since="31"/>
+		<field name="ACTION_MANAGE_APPLICATIONS_SETTINGS" since="3"/>
+		<field name="ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION" since="30"/>
+		<field name="ACTION_MANAGE_DEFAULT_APPS_SETTINGS" since="24"/>
+		<field name="ACTION_MANAGE_OVERLAY_PERMISSION" since="23"/>
+		<field name="ACTION_MANAGE_UNKNOWN_APP_SOURCES" since="26"/>
+		<field name="ACTION_MANAGE_WRITE_SETTINGS" since="23"/>
+		<field name="ACTION_MEMORY_CARD_SETTINGS" since="3"/>
+		<field name="ACTION_NETWORK_OPERATOR_SETTINGS" since="3"/>
+		<field name="ACTION_NFCSHARING_SETTINGS" since="14"/>
+		<field name="ACTION_NFC_PAYMENT_SETTINGS" since="19"/>
+		<field name="ACTION_NFC_SETTINGS" since="16"/>
+		<field name="ACTION_NIGHT_DISPLAY_SETTINGS" since="26"/>
+		<field name="ACTION_NOTIFICATION_ASSISTANT_SETTINGS" since="29"/>
+		<field name="ACTION_NOTIFICATION_LISTENER_DETAIL_SETTINGS" since="30"/>
+		<field name="ACTION_NOTIFICATION_LISTENER_SETTINGS" since="22"/>
+		<field name="ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS" since="23"/>
+		<field name="ACTION_PRINT_SETTINGS" since="19"/>
+		<field name="ACTION_PRIVACY_SETTINGS" since="5"/>
+		<field name="ACTION_PROCESS_WIFI_EASY_CONNECT_URI" since="29"/>
+		<field name="ACTION_QUICK_ACCESS_WALLET_SETTINGS" since="30"/>
+		<field name="ACTION_QUICK_LAUNCH_SETTINGS" since="3"/>
+		<field name="ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" since="23"/>
+		<field name="ACTION_REQUEST_MANAGE_MEDIA" since="31"/>
+		<field name="ACTION_REQUEST_SCHEDULE_EXACT_ALARM" since="31"/>
+		<field name="ACTION_REQUEST_SET_AUTOFILL_SERVICE" since="26"/>
+		<field name="ACTION_SEARCH_SETTINGS" since="8"/>
+		<field name="ACTION_SECURITY_SETTINGS"/>
+		<field name="ACTION_SETTINGS"/>
+		<field name="ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY" since="33"/>
+		<field name="ACTION_SHOW_REGULATORY_INFO" since="21"/>
+		<field name="ACTION_SHOW_WORK_POLICY_INFO" since="30"/>
+		<field name="ACTION_SOUND_SETTINGS"/>
+		<field name="ACTION_STORAGE_VOLUME_ACCESS_SETTINGS" since="28" deprecated="29"/>
+		<field name="ACTION_SYNC_SETTINGS" since="3"/>
+		<field name="ACTION_USAGE_ACCESS_SETTINGS" since="21"/>
+		<field name="ACTION_USER_DICTIONARY_SETTINGS" since="3"/>
+		<field name="ACTION_VOICE_CONTROL_AIRPLANE_MODE" since="23"/>
+		<field name="ACTION_VOICE_CONTROL_BATTERY_SAVER_MODE" since="23"/>
+		<field name="ACTION_VOICE_CONTROL_DO_NOT_DISTURB_MODE" since="23"/>
+		<field name="ACTION_VOICE_INPUT_SETTINGS" since="21"/>
+		<field name="ACTION_VPN_SETTINGS" since="24"/>
+		<field name="ACTION_VR_LISTENER_SETTINGS" since="24"/>
+		<field name="ACTION_WEBVIEW_SETTINGS" since="24"/>
+		<field name="ACTION_WIFI_ADD_NETWORKS" since="30"/>
+		<field name="ACTION_WIFI_IP_SETTINGS" since="3"/>
+		<field name="ACTION_WIFI_SETTINGS"/>
+		<field name="ACTION_WIRELESS_SETTINGS"/>
+		<field name="ACTION_ZEN_MODE_PRIORITY_SETTINGS" since="26"/>
+		<field name="ADD_WIFI_RESULT_ADD_OR_UPDATE_FAILED" since="30"/>
+		<field name="ADD_WIFI_RESULT_ALREADY_EXISTS" since="30"/>
+		<field name="ADD_WIFI_RESULT_SUCCESS" since="30"/>
+		<field name="AUTHORITY"/>
+		<field name="EXTRA_ACCOUNT_TYPES" since="18"/>
+		<field name="EXTRA_AIRPLANE_MODE_ENABLED" since="23"/>
+		<field name="EXTRA_APP_PACKAGE" since="26"/>
+		<field name="EXTRA_AUTHORITIES" since="8"/>
+		<field name="EXTRA_BATTERY_SAVER_MODE_ENABLED" since="23"/>
+		<field name="EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED" since="30"/>
+		<field name="EXTRA_CHANNEL_FILTER_LIST" since="31"/>
+		<field name="EXTRA_CHANNEL_ID" since="26"/>
+		<field name="EXTRA_CONVERSATION_ID" since="30"/>
+		<field name="EXTRA_DO_NOT_DISTURB_MODE_ENABLED" since="23"/>
+		<field name="EXTRA_DO_NOT_DISTURB_MODE_MINUTES" since="23"/>
+		<field name="EXTRA_EASY_CONNECT_ATTEMPTED_SSID" since="30"/>
+		<field name="EXTRA_EASY_CONNECT_BAND_LIST" since="30"/>
+		<field name="EXTRA_EASY_CONNECT_CHANNEL_LIST" since="30"/>
+		<field name="EXTRA_EASY_CONNECT_ERROR_CODE" since="30"/>
+		<field name="EXTRA_INPUT_METHOD_ID" since="11"/>
+		<field name="EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME" since="30"/>
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY" since="33"/>
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI" since="33"/>
+		<field name="EXTRA_SUB_ID" since="28"/>
+		<field name="EXTRA_WIFI_NETWORK_LIST" since="30"/>
+		<field name="EXTRA_WIFI_NETWORK_RESULT_LIST" since="30"/>
+		<field name="INTENT_CATEGORY_USAGE_ACCESS_CONFIG" since="23"/>
+		<field name="METADATA_USAGE_ACCESS_REASON" since="23"/>
+	</class>
+	<class name="android/provider/Settings$Global" since="17">
+		<extends name="android/provider/Settings$NameValueTable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F"/>
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F"/>
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I"/>
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I"/>
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J"/>
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J"/>
+		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z"/>
+		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z"/>
+		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z"/>
+		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<field name="ADB_ENABLED"/>
+		<field name="AIRPLANE_MODE_ON"/>
+		<field name="AIRPLANE_MODE_RADIOS"/>
+		<field name="ALWAYS_FINISH_ACTIVITIES"/>
+		<field name="ANIMATOR_DURATION_SCALE"/>
+		<field name="APPLY_RAMPING_RINGER" since="29"/>
+		<field name="AUTO_TIME"/>
+		<field name="AUTO_TIME_ZONE"/>
+		<field name="BLUETOOTH_ON"/>
+		<field name="BOOT_COUNT" since="24"/>
+		<field name="CONTACT_METADATA_SYNC_ENABLED" since="24"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATA_ROAMING"/>
+		<field name="DEBUG_APP"/>
+		<field name="DEVELOPMENT_SETTINGS_ENABLED"/>
+		<field name="DEVICE_NAME" since="25"/>
+		<field name="DEVICE_PROVISIONED"/>
+		<field name="HTTP_PROXY"/>
+		<field name="INSTALL_NON_MARKET_APPS" deprecated="21"/>
+		<field name="MODE_RINGER"/>
+		<field name="NETWORK_PREFERENCE"/>
+		<field name="RADIO_BLUETOOTH"/>
+		<field name="RADIO_CELL"/>
+		<field name="RADIO_NFC"/>
+		<field name="RADIO_WIFI"/>
+		<field name="SHOW_PROCESSES" deprecated="25"/>
+		<field name="STAY_ON_WHILE_PLUGGED_IN"/>
+		<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
+		<field name="TRANSITION_ANIMATION_SCALE"/>
+		<field name="USB_MASS_STORAGE_ENABLED"/>
+		<field name="USE_GOOGLE_MAIL"/>
+		<field name="WAIT_FOR_DEBUGGER"/>
+		<field name="WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN" since="23"/>
+		<field name="WIFI_MAX_DHCP_RETRY_COUNT"/>
+		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS"/>
+		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="26"/>
+		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="30"/>
+		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="30"/>
+		<field name="WIFI_ON"/>
+		<field name="WIFI_SLEEP_POLICY" deprecated="30"/>
+		<field name="WIFI_SLEEP_POLICY_DEFAULT" deprecated="30"/>
+		<field name="WIFI_SLEEP_POLICY_NEVER" deprecated="30"/>
+		<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED" deprecated="30"/>
+		<field name="WIFI_WATCHDOG_ON"/>
+		<field name="WINDOW_ANIMATION_SCALE"/>
+	</class>
+	<class name="android/provider/Settings$NameValueTable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="getUriFor(Landroid/net/Uri;Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="putString(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<field name="NAME"/>
+		<field name="VALUE"/>
+	</class>
+	<class name="android/provider/Settings$Panel" since="29">
+		<extends name="java/lang/Object"/>
+		<field name="ACTION_INTERNET_CONNECTIVITY"/>
+		<field name="ACTION_NFC"/>
+		<field name="ACTION_VOLUME"/>
+		<field name="ACTION_WIFI"/>
+	</class>
+	<class name="android/provider/Settings$Secure" since="3">
+		<extends name="android/provider/Settings$NameValueTable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F"/>
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F"/>
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I"/>
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I"/>
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J"/>
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J"/>
+		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="isLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;)Z" since="8" deprecated="19"/>
+		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z"/>
+		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z"/>
+		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z"/>
+		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="setLocationProviderEnabled(Landroid/content/ContentResolver;Ljava/lang/String;Z)V" since="8" deprecated="19"/>
+		<field name="ACCESSIBILITY_DISPLAY_INVERSION_ENABLED" since="21"/>
+		<field name="ACCESSIBILITY_ENABLED" since="4"/>
+		<field name="ACCESSIBILITY_SPEAK_PASSWORD" since="15" deprecated="26"/>
+		<field name="ADB_ENABLED" deprecated="17"/>
+		<field name="ALLOWED_GEOLOCATION_ORIGINS" since="8"/>
+		<field name="ALLOW_MOCK_LOCATION" deprecated="23"/>
+		<field name="ANDROID_ID"/>
+		<field name="BACKGROUND_DATA" deprecated="15"/>
+		<field name="BLUETOOTH_ON" deprecated="17"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATA_ROAMING" deprecated="17"/>
+		<field name="DEFAULT_INPUT_METHOD"/>
+		<field name="DEVELOPMENT_SETTINGS_ENABLED" since="16" deprecated="17"/>
+		<field name="DEVICE_PROVISIONED" deprecated="17"/>
+		<field name="ENABLED_ACCESSIBILITY_SERVICES" since="4"/>
+		<field name="ENABLED_INPUT_METHODS"/>
+		<field name="HTTP_PROXY" deprecated="17"/>
+		<field name="INPUT_METHOD_SELECTOR_VISIBILITY" since="11"/>
+		<field name="INSTALL_NON_MARKET_APPS" deprecated="17"/>
+		<field name="LOCATION_MODE" since="19" deprecated="28"/>
+		<field name="LOCATION_MODE_BATTERY_SAVING" since="19" deprecated="28"/>
+		<field name="LOCATION_MODE_HIGH_ACCURACY" since="19" deprecated="28"/>
+		<field name="LOCATION_MODE_OFF" since="19" deprecated="28"/>
+		<field name="LOCATION_MODE_SENSORS_ONLY" since="19" deprecated="28"/>
+		<field name="LOCATION_PROVIDERS_ALLOWED" deprecated="19"/>
+		<field name="LOCK_PATTERN_ENABLED" since="8" deprecated="23"/>
+		<field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="8" deprecated="17"/>
+		<field name="LOCK_PATTERN_VISIBLE" since="8" deprecated="23"/>
+		<field name="LOGGING_ID" deprecated="15"/>
+		<field name="NETWORK_PREFERENCE" deprecated="17"/>
+		<field name="PARENTAL_CONTROL_ENABLED"/>
+		<field name="PARENTAL_CONTROL_LAST_UPDATE"/>
+		<field name="PARENTAL_CONTROL_REDIRECT_URL"/>
+		<field name="RTT_CALLING_MODE" since="28"/>
+		<field name="SECURE_FRP_MODE" since="30"/>
+		<field name="SELECTED_INPUT_METHOD_SUBTYPE" since="11"/>
+		<field name="SETTINGS_CLASSNAME"/>
+		<field name="SKIP_FIRST_USE_HINTS" since="21"/>
+		<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
+		<field name="TOUCH_EXPLORATION_ENABLED" since="14"/>
+		<field name="TTS_DEFAULT_COUNTRY" since="4" deprecated="15"/>
+		<field name="TTS_DEFAULT_LANG" since="4" deprecated="15"/>
+		<field name="TTS_DEFAULT_PITCH" since="4"/>
+		<field name="TTS_DEFAULT_RATE" since="4"/>
+		<field name="TTS_DEFAULT_SYNTH" since="4"/>
+		<field name="TTS_DEFAULT_VARIANT" since="4" deprecated="15"/>
+		<field name="TTS_ENABLED_PLUGINS" since="8"/>
+		<field name="TTS_USE_DEFAULTS" since="4" deprecated="15"/>
+		<field name="USB_MASS_STORAGE_ENABLED" deprecated="17"/>
+		<field name="USE_GOOGLE_MAIL" deprecated="17"/>
+		<field name="WIFI_MAX_DHCP_RETRY_COUNT" deprecated="17"/>
+		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" deprecated="17"/>
+		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="17"/>
+		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="17"/>
+		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="17"/>
+		<field name="WIFI_ON" deprecated="17"/>
+		<field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_AP_COUNT" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_ON" deprecated="17"/>
+		<field name="WIFI_WATCHDOG_PING_COUNT" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_WATCH_LIST" deprecated="15"/>
+	</class>
+	<class name="android/provider/Settings$SettingNotFoundException" since="1">
+		<extends name="android/util/AndroidException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/provider/Settings$System" since="1">
+		<extends name="android/provider/Settings$NameValueTable"/>
+		<method name="&lt;init>()V"/>
+		<method name="canWrite(Landroid/content/Context;)Z" since="23"/>
+		<method name="getConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)V"/>
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;)F"/>
+		<method name="getFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)F"/>
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;)I"/>
+		<method name="getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I"/>
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;)J" since="3"/>
+		<method name="getLong(Landroid/content/ContentResolver;Ljava/lang/String;J)J" since="3"/>
+		<method name="getShowGTalkServiceStatus(Landroid/content/ContentResolver;)Z" deprecated="17"/>
+		<method name="getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getUriFor(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<method name="putConfiguration(Landroid/content/ContentResolver;Landroid/content/res/Configuration;)Z"/>
+		<method name="putFloat(Landroid/content/ContentResolver;Ljava/lang/String;F)Z"/>
+		<method name="putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z"/>
+		<method name="putLong(Landroid/content/ContentResolver;Ljava/lang/String;J)Z" since="3"/>
+		<method name="putString(Landroid/content/ContentResolver;Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="setShowGTalkServiceStatus(Landroid/content/ContentResolver;Z)V" deprecated="17"/>
+		<field name="ACCELEROMETER_ROTATION" since="3"/>
+		<field name="ADB_ENABLED" deprecated="15"/>
+		<field name="AIRPLANE_MODE_ON" deprecated="17"/>
+		<field name="AIRPLANE_MODE_RADIOS" deprecated="17"/>
+		<field name="ALARM_ALERT" since="5"/>
+		<field name="ALWAYS_FINISH_ACTIVITIES" deprecated="17"/>
+		<field name="ANDROID_ID" deprecated="15"/>
+		<field name="ANIMATOR_DURATION_SCALE" since="16" deprecated="17"/>
+		<field name="APPEND_FOR_LAST_AUDIBLE" removed="23"/>
+		<field name="AUTO_TIME" deprecated="17"/>
+		<field name="AUTO_TIME_ZONE" since="11" deprecated="17"/>
+		<field name="BLUETOOTH_DISCOVERABILITY"/>
+		<field name="BLUETOOTH_DISCOVERABILITY_TIMEOUT"/>
+		<field name="BLUETOOTH_ON" deprecated="15"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATA_ROAMING" deprecated="15"/>
+		<field name="DATE_FORMAT" deprecated="31"/>
+		<field name="DEBUG_APP" deprecated="17"/>
+		<field name="DEFAULT_ALARM_ALERT_URI" since="5"/>
+		<field name="DEFAULT_NOTIFICATION_URI"/>
+		<field name="DEFAULT_RINGTONE_URI"/>
+		<field name="DEVICE_PROVISIONED" deprecated="15"/>
+		<field name="DIM_SCREEN" deprecated="17"/>
+		<field name="DTMF_TONE_TYPE_WHEN_DIALING" since="23"/>
+		<field name="DTMF_TONE_WHEN_DIALING"/>
+		<field name="END_BUTTON_BEHAVIOR"/>
+		<field name="FONT_SCALE"/>
+		<field name="HAPTIC_FEEDBACK_ENABLED" since="3"/>
+		<field name="HTTP_PROXY" deprecated="15"/>
+		<field name="INSTALL_NON_MARKET_APPS" deprecated="15"/>
+		<field name="LOCATION_PROVIDERS_ALLOWED" deprecated="15"/>
+		<field name="LOCK_PATTERN_ENABLED" deprecated="15"/>
+		<field name="LOCK_PATTERN_TACTILE_FEEDBACK_ENABLED" since="3" deprecated="15"/>
+		<field name="LOCK_PATTERN_VISIBLE" deprecated="15"/>
+		<field name="LOGGING_ID" deprecated="15"/>
+		<field name="MODE_RINGER" deprecated="17"/>
+		<field name="MODE_RINGER_STREAMS_AFFECTED"/>
+		<field name="MUTE_STREAMS_AFFECTED"/>
+		<field name="NETWORK_PREFERENCE" deprecated="15"/>
+		<field name="NEXT_ALARM_FORMATTED" deprecated="21"/>
+		<field name="NOTIFICATION_SOUND"/>
+		<field name="PARENTAL_CONTROL_ENABLED" deprecated="15"/>
+		<field name="PARENTAL_CONTROL_LAST_UPDATE" deprecated="15"/>
+		<field name="PARENTAL_CONTROL_REDIRECT_URL" deprecated="15"/>
+		<field name="RADIO_BLUETOOTH" deprecated="17"/>
+		<field name="RADIO_CELL" deprecated="17"/>
+		<field name="RADIO_NFC" since="14" deprecated="17"/>
+		<field name="RADIO_WIFI" deprecated="17"/>
+		<field name="RINGTONE"/>
+		<field name="SCREEN_BRIGHTNESS"/>
+		<field name="SCREEN_BRIGHTNESS_MODE" since="8"/>
+		<field name="SCREEN_BRIGHTNESS_MODE_AUTOMATIC" since="8"/>
+		<field name="SCREEN_BRIGHTNESS_MODE_MANUAL" since="8"/>
+		<field name="SCREEN_OFF_TIMEOUT"/>
+		<field name="SETTINGS_CLASSNAME" deprecated="15"/>
+		<field name="SETUP_WIZARD_HAS_RUN"/>
+		<field name="SHOW_GTALK_SERVICE_STATUS"/>
+		<field name="SHOW_PROCESSES" deprecated="17"/>
+		<field name="SHOW_WEB_SUGGESTIONS" since="4" deprecated="15"/>
+		<field name="SOUND_EFFECTS_ENABLED"/>
+		<field name="STAY_ON_WHILE_PLUGGED_IN" deprecated="17"/>
+		<field name="SYS_PROP_SETTING_VERSION" removed="24"/>
+		<field name="TEXT_AUTO_CAPS"/>
+		<field name="TEXT_AUTO_PUNCTUATE"/>
+		<field name="TEXT_AUTO_REPLACE"/>
+		<field name="TEXT_SHOW_PASSWORD"/>
+		<field name="TIME_12_24"/>
+		<field name="TRANSITION_ANIMATION_SCALE" deprecated="17"/>
+		<field name="USB_MASS_STORAGE_ENABLED" deprecated="15"/>
+		<field name="USER_ROTATION" since="11"/>
+		<field name="USE_GOOGLE_MAIL" deprecated="15"/>
+		<field name="VIBRATE_ON"/>
+		<field name="VIBRATE_WHEN_RINGING" since="23"/>
+		<field name="VOLUME_ALARM" removed="23"/>
+		<field name="VOLUME_BLUETOOTH_SCO" since="8" removed="23"/>
+		<field name="VOLUME_MUSIC" removed="23"/>
+		<field name="VOLUME_NOTIFICATION" since="3" removed="23"/>
+		<field name="VOLUME_RING" removed="23"/>
+		<field name="VOLUME_SETTINGS" removed="23"/>
+		<field name="VOLUME_SYSTEM" removed="23"/>
+		<field name="VOLUME_VOICE" removed="23"/>
+		<field name="WAIT_FOR_DEBUGGER" deprecated="17"/>
+		<field name="WALLPAPER_ACTIVITY" deprecated="17"/>
+		<field name="WIFI_MAX_DHCP_RETRY_COUNT" since="3" deprecated="15"/>
+		<field name="WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS" since="3" deprecated="15"/>
+		<field name="WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON" deprecated="15"/>
+		<field name="WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY" deprecated="15"/>
+		<field name="WIFI_NUM_OPEN_NETWORKS_KEPT" deprecated="15"/>
+		<field name="WIFI_ON" deprecated="15"/>
+		<field name="WIFI_SLEEP_POLICY" since="3" deprecated="17"/>
+		<field name="WIFI_SLEEP_POLICY_DEFAULT" since="3" deprecated="17"/>
+		<field name="WIFI_SLEEP_POLICY_NEVER" since="3" deprecated="17"/>
+		<field name="WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED" since="3" deprecated="17"/>
+		<field name="WIFI_STATIC_DNS1" deprecated="17"/>
+		<field name="WIFI_STATIC_DNS2" deprecated="17"/>
+		<field name="WIFI_STATIC_GATEWAY" deprecated="17"/>
+		<field name="WIFI_STATIC_IP" deprecated="17"/>
+		<field name="WIFI_STATIC_NETMASK" deprecated="17"/>
+		<field name="WIFI_USE_STATIC_IP" deprecated="17"/>
+		<field name="WIFI_WATCHDOG_ACCEPTABLE_PACKET_LOSS_PERCENTAGE" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_AP_COUNT" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_DELAY_MS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_ENABLED" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_INITIAL_IGNORED_PING_COUNT" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_MAX_AP_CHECKS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_ON" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_PING_COUNT" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_PING_DELAY_MS" deprecated="15"/>
+		<field name="WIFI_WATCHDOG_PING_TIMEOUT_MS" deprecated="15"/>
+		<field name="WINDOW_ANIMATION_SCALE" deprecated="17"/>
+	</class>
+	<class name="android/provider/SettingsSlicesContract" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="AUTHORITY"/>
+		<field name="BASE_URI"/>
+		<field name="KEY_AIRPLANE_MODE"/>
+		<field name="KEY_BATTERY_SAVER"/>
+		<field name="KEY_BLUETOOTH"/>
+		<field name="KEY_LOCATION"/>
+		<field name="KEY_WIFI"/>
+		<field name="PATH_SETTING_ACTION"/>
+		<field name="PATH_SETTING_INTENT"/>
+	</class>
+	<class name="android/provider/SimPhonebookContract" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="AUTHORITY"/>
+		<field name="AUTHORITY_URI"/>
+	</class>
+	<class name="android/provider/SimPhonebookContract$ElementaryFiles" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getItemUri(II)Landroid/net/Uri;"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="EF_ADN"/>
+		<field name="EF_FDN"/>
+		<field name="EF_SDN"/>
+		<field name="EF_TYPE"/>
+		<field name="EF_UNKNOWN"/>
+		<field name="MAX_RECORDS"/>
+		<field name="NAME_MAX_LENGTH"/>
+		<field name="PHONE_NUMBER_MAX_LENGTH"/>
+		<field name="RECORD_COUNT"/>
+		<field name="SLOT_INDEX"/>
+		<field name="SUBSCRIPTION_ID"/>
+	</class>
+	<class name="android/provider/SimPhonebookContract$SimRecords" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getContentUri(II)Landroid/net/Uri;"/>
+		<method name="getEncodedNameLength(Landroid/content/ContentResolver;Ljava/lang/String;)I"/>
+		<method name="getItemUri(III)Landroid/net/Uri;"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="ELEMENTARY_FILE_TYPE"/>
+		<field name="ERROR_NAME_UNSUPPORTED"/>
+		<field name="NAME"/>
+		<field name="PHONE_NUMBER"/>
+		<field name="RECORD_NUMBER"/>
+		<field name="SUBSCRIPTION_ID"/>
+	</class>
+	<class name="android/provider/SyncStateContract" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/provider/SyncStateContract$Columns" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="ACCOUNT_NAME"/>
+		<field name="ACCOUNT_TYPE"/>
+		<field name="DATA"/>
+	</class>
+	<class name="android/provider/SyncStateContract$Constants" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/SyncStateContract$Columns"/>
+		<method name="&lt;init>()V"/>
+		<field name="CONTENT_DIRECTORY"/>
+	</class>
+	<class name="android/provider/SyncStateContract$Helpers" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="get(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;)[B"/>
+		<method name="getWithUri(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;)Landroid/util/Pair;"/>
+		<method name="insert(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;[B)Landroid/net/Uri;"/>
+		<method name="newSetOperation(Landroid/net/Uri;Landroid/accounts/Account;[B)Landroid/content/ContentProviderOperation;"/>
+		<method name="newUpdateOperation(Landroid/net/Uri;[B)Landroid/content/ContentProviderOperation;"/>
+		<method name="set(Landroid/content/ContentProviderClient;Landroid/net/Uri;Landroid/accounts/Account;[B)V"/>
+		<method name="update(Landroid/content/ContentProviderClient;Landroid/net/Uri;[B)V"/>
+	</class>
+	<class name="android/provider/Telephony" since="19">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/provider/Telephony$BaseMmsColumns" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="CONTENT_CLASS"/>
+		<field name="CONTENT_LOCATION"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CREATOR" since="21"/>
+		<field name="DATE"/>
+		<field name="DATE_SENT"/>
+		<field name="DELIVERY_REPORT"/>
+		<field name="DELIVERY_TIME"/>
+		<field name="EXPIRY"/>
+		<field name="LOCKED"/>
+		<field name="MESSAGE_BOX"/>
+		<field name="MESSAGE_BOX_ALL"/>
+		<field name="MESSAGE_BOX_DRAFTS"/>
+		<field name="MESSAGE_BOX_FAILED" since="21"/>
+		<field name="MESSAGE_BOX_INBOX"/>
+		<field name="MESSAGE_BOX_OUTBOX"/>
+		<field name="MESSAGE_BOX_SENT"/>
+		<field name="MESSAGE_CLASS"/>
+		<field name="MESSAGE_ID"/>
+		<field name="MESSAGE_SIZE"/>
+		<field name="MESSAGE_TYPE"/>
+		<field name="MMS_VERSION"/>
+		<field name="PRIORITY"/>
+		<field name="READ"/>
+		<field name="READ_REPORT"/>
+		<field name="READ_STATUS"/>
+		<field name="REPORT_ALLOWED"/>
+		<field name="RESPONSE_STATUS"/>
+		<field name="RESPONSE_TEXT"/>
+		<field name="RETRIEVE_STATUS"/>
+		<field name="RETRIEVE_TEXT"/>
+		<field name="RETRIEVE_TEXT_CHARSET"/>
+		<field name="SEEN"/>
+		<field name="STATUS"/>
+		<field name="SUBJECT"/>
+		<field name="SUBJECT_CHARSET"/>
+		<field name="SUBSCRIPTION_ID" since="22"/>
+		<field name="TEXT_ONLY"/>
+		<field name="THREAD_ID"/>
+		<field name="TRANSACTION_ID"/>
+	</class>
+	<class name="android/provider/Telephony$CanonicalAddressesColumns" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="ADDRESS"/>
+	</class>
+	<class name="android/provider/Telephony$CarrierId" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="getSpecificCarrierIdUriForSubscriptionId(I)Landroid/net/Uri;" since="29"/>
+		<method name="getUriForSubscriptionId(I)Landroid/net/Uri;"/>
+		<field name="CARRIER_ID"/>
+		<field name="CARRIER_NAME"/>
+		<field name="CONTENT_URI"/>
+		<field name="SPECIFIC_CARRIER_ID" since="29"/>
+		<field name="SPECIFIC_CARRIER_ID_NAME" since="29"/>
+	</class>
+	<class name="android/provider/Telephony$Carriers" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="APN"/>
+		<field name="AUTH_TYPE"/>
+		<field name="BEARER" deprecated="28"/>
+		<field name="CARRIER_ENABLED"/>
+		<field name="CARRIER_ID" since="29"/>
+		<field name="CONTENT_URI"/>
+		<field name="CURRENT"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="MCC" deprecated="29"/>
+		<field name="MMSC"/>
+		<field name="MMSPORT"/>
+		<field name="MMSPROXY"/>
+		<field name="MNC" deprecated="29"/>
+		<field name="MVNO_MATCH_DATA" deprecated="29"/>
+		<field name="MVNO_TYPE" deprecated="29"/>
+		<field name="NAME"/>
+		<field name="NETWORK_TYPE_BITMASK" since="28"/>
+		<field name="NUMERIC" deprecated="29"/>
+		<field name="PASSWORD"/>
+		<field name="PORT"/>
+		<field name="PROTOCOL"/>
+		<field name="PROXY"/>
+		<field name="ROAMING_PROTOCOL"/>
+		<field name="SERVER"/>
+		<field name="SIM_APN_URI" since="29"/>
+		<field name="SUBSCRIPTION_ID" since="22"/>
+		<field name="TYPE"/>
+		<field name="USER"/>
+	</class>
+	<class name="android/provider/Telephony$Mms" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/Telephony$BaseMmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="REPORT_REQUEST_URI"/>
+		<field name="REPORT_STATUS_URI"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Addr" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="getAddrUriForMessage(Ljava/lang/String;)Landroid/net/Uri;" since="30"/>
+		<field name="ADDRESS"/>
+		<field name="CHARSET"/>
+		<field name="CONTACT_ID"/>
+		<field name="MSG_ID"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Draft" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/Telephony$BaseMmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Inbox" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/Telephony$BaseMmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Intents" since="19">
+		<extends name="java/lang/Object"/>
+		<field name="CONTENT_CHANGED_ACTION"/>
+		<field name="DELETED_CONTENTS"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Outbox" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/Telephony$BaseMmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Part" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="getPartUriForMessage(Ljava/lang/String;)Landroid/net/Uri;" since="30"/>
+		<field name="CHARSET"/>
+		<field name="CONTENT_DISPOSITION"/>
+		<field name="CONTENT_ID"/>
+		<field name="CONTENT_LOCATION"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI" since="29"/>
+		<field name="CT_START"/>
+		<field name="CT_TYPE"/>
+		<field name="FILENAME"/>
+		<field name="MSG_ID"/>
+		<field name="NAME"/>
+		<field name="SEQ"/>
+		<field name="TEXT"/>
+		<field name="_DATA"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Rate" since="19">
+		<extends name="java/lang/Object"/>
+		<field name="CONTENT_URI"/>
+		<field name="SENT_TIME"/>
+	</class>
+	<class name="android/provider/Telephony$Mms$Sent" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/Telephony$BaseMmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$MmsSms" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="CONTENT_CONVERSATIONS_URI"/>
+		<field name="CONTENT_DRAFT_URI"/>
+		<field name="CONTENT_FILTER_BYPHONE_URI"/>
+		<field name="CONTENT_LOCKED_URI"/>
+		<field name="CONTENT_UNDELIVERED_URI"/>
+		<field name="CONTENT_URI"/>
+		<field name="ERR_TYPE_GENERIC"/>
+		<field name="ERR_TYPE_GENERIC_PERMANENT"/>
+		<field name="ERR_TYPE_MMS_PROTO_PERMANENT"/>
+		<field name="ERR_TYPE_MMS_PROTO_TRANSIENT"/>
+		<field name="ERR_TYPE_SMS_PROTO_PERMANENT"/>
+		<field name="ERR_TYPE_SMS_PROTO_TRANSIENT"/>
+		<field name="ERR_TYPE_TRANSPORT_FAILURE"/>
+		<field name="MMS_PROTO"/>
+		<field name="NO_ERROR"/>
+		<field name="SEARCH_URI"/>
+		<field name="SMS_PROTO"/>
+		<field name="TYPE_DISCRIMINATOR_COLUMN"/>
+	</class>
+	<class name="android/provider/Telephony$MmsSms$PendingMessages" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DUE_TIME"/>
+		<field name="ERROR_CODE"/>
+		<field name="ERROR_TYPE"/>
+		<field name="LAST_TRY"/>
+		<field name="MSG_ID"/>
+		<field name="MSG_TYPE"/>
+		<field name="PROTO_TYPE"/>
+		<field name="RETRY_INDEX"/>
+		<field name="SUBSCRIPTION_ID" since="22"/>
+	</class>
+	<class name="android/provider/Telephony$ServiceStateTable" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getUriForSubscriptionId(I)Landroid/net/Uri;"/>
+		<method name="getUriForSubscriptionIdAndField(ILjava/lang/String;)Landroid/net/Uri;"/>
+		<field name="AUTHORITY"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATA_NETWORK_TYPE" since="31"/>
+		<field name="DATA_REG_STATE" since="31"/>
+		<field name="DUPLEX_MODE" since="31"/>
+		<field name="IS_MANUAL_NETWORK_SELECTION"/>
+		<field name="VOICE_OPERATOR_NUMERIC"/>
+		<field name="VOICE_REG_STATE"/>
+	</class>
+	<class name="android/provider/Telephony$Sms" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
+		<method name="getDefaultSmsPackage(Landroid/content/Context;)Ljava/lang/String;"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$Sms$Conversations" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="MESSAGE_COUNT"/>
+		<field name="SNIPPET"/>
+	</class>
+	<class name="android/provider/Telephony$Sms$Draft" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$Sms$Inbox" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$Sms$Intents" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getMessagesFromIntent(Landroid/content/Intent;)[Landroid/telephony/SmsMessage;"/>
+		<field name="ACTION_CHANGE_DEFAULT"/>
+		<field name="ACTION_DEFAULT_SMS_PACKAGE_CHANGED" since="24"/>
+		<field name="ACTION_EXTERNAL_PROVIDER_CHANGE" since="24"/>
+		<field name="DATA_SMS_RECEIVED_ACTION"/>
+		<field name="EXTRA_IS_DEFAULT_SMS_APP" since="24"/>
+		<field name="EXTRA_PACKAGE_NAME"/>
+		<field name="RESULT_SMS_DATABASE_ERROR" since="30"/>
+		<field name="RESULT_SMS_DISPATCH_FAILURE" since="30"/>
+		<field name="RESULT_SMS_DUPLICATED"/>
+		<field name="RESULT_SMS_GENERIC_ERROR"/>
+		<field name="RESULT_SMS_HANDLED"/>
+		<field name="RESULT_SMS_INVALID_URI" since="30"/>
+		<field name="RESULT_SMS_NULL_MESSAGE" since="30"/>
+		<field name="RESULT_SMS_NULL_PDU" since="30"/>
+		<field name="RESULT_SMS_OUT_OF_MEMORY"/>
+		<field name="RESULT_SMS_RECEIVED_WHILE_ENCRYPTED" since="30"/>
+		<field name="RESULT_SMS_UNSUPPORTED"/>
+		<field name="SECRET_CODE_ACTION" since="28" deprecated="29"/>
+		<field name="SIM_FULL_ACTION"/>
+		<field name="SMS_CB_RECEIVED_ACTION"/>
+		<field name="SMS_DELIVER_ACTION"/>
+		<field name="SMS_EMERGENCY_CB_RECEIVED_ACTION" removed="24"/>
+		<field name="SMS_RECEIVED_ACTION"/>
+		<field name="SMS_REJECTED_ACTION"/>
+		<field name="SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED_ACTION"/>
+		<field name="WAP_PUSH_DELIVER_ACTION"/>
+		<field name="WAP_PUSH_RECEIVED_ACTION"/>
+	</class>
+	<class name="android/provider/Telephony$Sms$Outbox" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$Sms$Sent" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/Telephony$TextBasedSmsColumns"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+	</class>
+	<class name="android/provider/Telephony$TextBasedSmsColumns" since="19">
+		<extends name="java/lang/Object"/>
+		<field name="ADDRESS"/>
+		<field name="BODY"/>
+		<field name="CREATOR" since="21"/>
+		<field name="DATE"/>
+		<field name="DATE_SENT"/>
+		<field name="ERROR_CODE"/>
+		<field name="LOCKED"/>
+		<field name="MESSAGE_TYPE_ALL"/>
+		<field name="MESSAGE_TYPE_DRAFT"/>
+		<field name="MESSAGE_TYPE_FAILED"/>
+		<field name="MESSAGE_TYPE_INBOX"/>
+		<field name="MESSAGE_TYPE_OUTBOX"/>
+		<field name="MESSAGE_TYPE_QUEUED"/>
+		<field name="MESSAGE_TYPE_SENT"/>
+		<field name="PERSON"/>
+		<field name="PROTOCOL"/>
+		<field name="READ"/>
+		<field name="REPLY_PATH_PRESENT"/>
+		<field name="SEEN"/>
+		<field name="SERVICE_CENTER"/>
+		<field name="STATUS"/>
+		<field name="STATUS_COMPLETE"/>
+		<field name="STATUS_FAILED"/>
+		<field name="STATUS_NONE"/>
+		<field name="STATUS_PENDING"/>
+		<field name="SUBJECT"/>
+		<field name="SUBSCRIPTION_ID" since="22"/>
+		<field name="THREAD_ID"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="android/provider/Telephony$Threads" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/Telephony$ThreadsColumns"/>
+		<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/lang/String;)J" since="23"/>
+		<method name="getOrCreateThreadId(Landroid/content/Context;Ljava/util/Set;)J" since="23"/>
+		<field name="BROADCAST_THREAD"/>
+		<field name="COMMON_THREAD"/>
+		<field name="CONTENT_URI"/>
+		<field name="OBSOLETE_THREADS_URI"/>
+	</class>
+	<class name="android/provider/Telephony$ThreadsColumns" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<field name="ARCHIVED" since="21"/>
+		<field name="DATE"/>
+		<field name="ERROR"/>
+		<field name="HAS_ATTACHMENT"/>
+		<field name="MESSAGE_COUNT"/>
+		<field name="READ"/>
+		<field name="RECIPIENT_IDS"/>
+		<field name="SNIPPET"/>
+		<field name="SNIPPET_CHARSET"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="android/provider/UserDictionary" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="AUTHORITY"/>
+		<field name="CONTENT_URI"/>
+	</class>
+	<class name="android/provider/UserDictionary$Words" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="&lt;init>()V"/>
+		<method name="addWord(Landroid/content/Context;Ljava/lang/String;II)V" deprecated="16"/>
+		<method name="addWord(Landroid/content/Context;Ljava/lang/String;ILjava/lang/String;Ljava/util/Locale;)V" since="16"/>
+		<field name="APP_ID"/>
+		<field name="CONTENT_ITEM_TYPE"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CONTENT_URI"/>
+		<field name="DEFAULT_SORT_ORDER"/>
+		<field name="FREQUENCY"/>
+		<field name="LOCALE"/>
+		<field name="LOCALE_TYPE_ALL" deprecated="16"/>
+		<field name="LOCALE_TYPE_CURRENT" deprecated="16"/>
+		<field name="SHORTCUT" since="16"/>
+		<field name="WORD"/>
+		<field name="_ID"/>
+	</class>
+	<class name="android/provider/VoicemailContract" since="14">
+		<extends name="java/lang/Object"/>
+		<field name="ACTION_FETCH_VOICEMAIL"/>
+		<field name="ACTION_NEW_VOICEMAIL"/>
+		<field name="ACTION_SYNC_VOICEMAIL" since="24"/>
+		<field name="AUTHORITY"/>
+		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="25"/>
+		<field name="EXTRA_SELF_CHANGE"/>
+		<field name="PARAM_KEY_SOURCE_PACKAGE"/>
+	</class>
+	<class name="android/provider/VoicemailContract$Status" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<field name="CONFIGURATION_STATE"/>
+		<field name="CONFIGURATION_STATE_CAN_BE_CONFIGURED"/>
+		<field name="CONFIGURATION_STATE_CONFIGURING" since="25"/>
+		<field name="CONFIGURATION_STATE_DISABLED" since="25"/>
+		<field name="CONFIGURATION_STATE_FAILED" since="25"/>
+		<field name="CONFIGURATION_STATE_NOT_CONFIGURED"/>
+		<field name="CONFIGURATION_STATE_OK"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATA_CHANNEL_STATE"/>
+		<field name="DATA_CHANNEL_STATE_BAD_CONFIGURATION" since="24"/>
+		<field name="DATA_CHANNEL_STATE_COMMUNICATION_ERROR" since="24"/>
+		<field name="DATA_CHANNEL_STATE_NO_CONNECTION"/>
+		<field name="DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED" since="24"/>
+		<field name="DATA_CHANNEL_STATE_OK"/>
+		<field name="DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR" since="24"/>
+		<field name="DATA_CHANNEL_STATE_SERVER_ERROR" since="24"/>
+		<field name="DIR_TYPE"/>
+		<field name="ITEM_TYPE"/>
+		<field name="NOTIFICATION_CHANNEL_STATE"/>
+		<field name="NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING"/>
+		<field name="NOTIFICATION_CHANNEL_STATE_NO_CONNECTION"/>
+		<field name="NOTIFICATION_CHANNEL_STATE_OK"/>
+		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="23"/>
+		<field name="PHONE_ACCOUNT_ID" since="23"/>
+		<field name="QUOTA_OCCUPIED" since="24"/>
+		<field name="QUOTA_TOTAL" since="24"/>
+		<field name="QUOTA_UNAVAILABLE" since="24"/>
+		<field name="SETTINGS_URI"/>
+		<field name="SOURCE_PACKAGE"/>
+		<field name="SOURCE_TYPE" since="25"/>
+		<field name="VOICEMAIL_ACCESS_URI"/>
+	</class>
+	<class name="android/provider/VoicemailContract$Voicemails" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/provider/BaseColumns"/>
+		<implements name="android/provider/OpenableColumns"/>
+		<method name="buildSourceUri(Ljava/lang/String;)Landroid/net/Uri;"/>
+		<field name="ARCHIVED" since="26"/>
+		<field name="BACKED_UP" since="26"/>
+		<field name="CONTENT_URI"/>
+		<field name="DATE"/>
+		<field name="DELETED" since="23"/>
+		<field name="DIRTY" since="23"/>
+		<field name="DIRTY_RETAIN" since="28"/>
+		<field name="DIR_TYPE"/>
+		<field name="DURATION"/>
+		<field name="HAS_CONTENT"/>
+		<field name="IS_OMTP_VOICEMAIL" since="26"/>
+		<field name="IS_READ"/>
+		<field name="ITEM_TYPE"/>
+		<field name="LAST_MODIFIED" since="24"/>
+		<field name="MIME_TYPE"/>
+		<field name="NEW" since="28"/>
+		<field name="NUMBER"/>
+		<field name="PHONE_ACCOUNT_COMPONENT_NAME" since="23"/>
+		<field name="PHONE_ACCOUNT_ID" since="23"/>
+		<field name="RESTORED" since="26"/>
+		<field name="SOURCE_DATA"/>
+		<field name="SOURCE_PACKAGE"/>
+		<field name="TRANSCRIPTION" since="21"/>
+	</class>
+	<class name="android/renderscript/Allocation" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="copy1DRangeFrom(IILandroid/renderscript/Allocation;I)V" since="14" deprecated="31"/>
+		<method name="copy1DRangeFrom(IILjava/lang/Object;)V" since="21" deprecated="31"/>
+		<method name="copy1DRangeFrom(II[B)V" deprecated="31"/>
+		<method name="copy1DRangeFrom(II[F)V" deprecated="31"/>
+		<method name="copy1DRangeFrom(II[I)V" deprecated="31"/>
+		<method name="copy1DRangeFrom(II[S)V" deprecated="31"/>
+		<method name="copy1DRangeFromUnchecked(IILjava/lang/Object;)V" since="21" deprecated="31"/>
+		<method name="copy1DRangeFromUnchecked(II[B)V" deprecated="31"/>
+		<method name="copy1DRangeFromUnchecked(II[F)V" deprecated="31"/>
+		<method name="copy1DRangeFromUnchecked(II[I)V" deprecated="31"/>
+		<method name="copy1DRangeFromUnchecked(II[S)V" deprecated="31"/>
+		<method name="copy1DRangeTo(IILjava/lang/Object;)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeTo(II[B)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeTo(II[F)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeTo(II[I)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeTo(II[S)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeToUnchecked(IILjava/lang/Object;)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeToUnchecked(II[B)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeToUnchecked(II[F)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeToUnchecked(II[I)V" since="23" deprecated="31"/>
+		<method name="copy1DRangeToUnchecked(II[S)V" since="23" deprecated="31"/>
+		<method name="copy2DRangeFrom(IIIILandroid/renderscript/Allocation;II)V" since="14" deprecated="31"/>
+		<method name="copy2DRangeFrom(IIIILjava/lang/Object;)V" since="21" deprecated="31"/>
+		<method name="copy2DRangeFrom(IIII[B)V" deprecated="31"/>
+		<method name="copy2DRangeFrom(IIII[F)V" deprecated="31"/>
+		<method name="copy2DRangeFrom(IIII[I)V" deprecated="31"/>
+		<method name="copy2DRangeFrom(IIII[S)V" deprecated="31"/>
+		<method name="copy2DRangeFrom(IILandroid/graphics/Bitmap;)V" deprecated="31"/>
+		<method name="copy2DRangeTo(IIIILjava/lang/Object;)V" since="23" deprecated="31"/>
+		<method name="copy2DRangeTo(IIII[B)V" since="23" deprecated="31"/>
+		<method name="copy2DRangeTo(IIII[F)V" since="23" deprecated="31"/>
+		<method name="copy2DRangeTo(IIII[I)V" since="23" deprecated="31"/>
+		<method name="copy2DRangeTo(IIII[S)V" since="23" deprecated="31"/>
+		<method name="copy3DRangeFrom(IIIIIILandroid/renderscript/Allocation;III)V" since="23" deprecated="31"/>
+		<method name="copy3DRangeFrom(IIIIIILjava/lang/Object;)V" since="23" deprecated="31"/>
+		<method name="copy3DRangeTo(IIIIIILjava/lang/Object;)V" since="23" deprecated="31"/>
+		<method name="copyFrom(Landroid/graphics/Bitmap;)V" deprecated="31"/>
+		<method name="copyFrom(Landroid/renderscript/Allocation;)V" since="18" deprecated="31"/>
+		<method name="copyFrom(Ljava/lang/Object;)V" since="21" deprecated="31"/>
+		<method name="copyFrom([B)V" deprecated="31"/>
+		<method name="copyFrom([F)V" deprecated="31"/>
+		<method name="copyFrom([I)V" deprecated="31"/>
+		<method name="copyFrom([Landroid/renderscript/BaseObj;)V" deprecated="31"/>
+		<method name="copyFrom([S)V" deprecated="31"/>
+		<method name="copyFromUnchecked(Ljava/lang/Object;)V" since="21" deprecated="31"/>
+		<method name="copyFromUnchecked([B)V" deprecated="31"/>
+		<method name="copyFromUnchecked([F)V" deprecated="31"/>
+		<method name="copyFromUnchecked([I)V" deprecated="31"/>
+		<method name="copyFromUnchecked([S)V" deprecated="31"/>
+		<method name="copyTo(Landroid/graphics/Bitmap;)V" deprecated="31"/>
+		<method name="copyTo(Ljava/lang/Object;)V" since="21" deprecated="31"/>
+		<method name="copyTo([B)V" deprecated="31"/>
+		<method name="copyTo([F)V" deprecated="31"/>
+		<method name="copyTo([I)V" deprecated="31"/>
+		<method name="copyTo([S)V" deprecated="31"/>
+		<method name="createAllocations(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;II)[Landroid/renderscript/Allocation;" since="24" deprecated="31"/>
+		<method name="createCubemapFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createCubemapFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createCubemapFromCubeFaces(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createCubemapFromCubeFaces(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createFromBitmap(Landroid/renderscript/RenderScript;Landroid/graphics/Bitmap;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createFromBitmapResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createFromBitmapResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;ILandroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createFromString(Landroid/renderscript/RenderScript;Ljava/lang/String;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createSized(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createSized(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;II)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Type;Landroid/renderscript/Allocation$MipmapControl;I)Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="generateMipmaps()V" deprecated="31"/>
+		<method name="getByteBuffer()Ljava/nio/ByteBuffer;" since="24" deprecated="31"/>
+		<method name="getBytesSize()I" since="16" deprecated="31"/>
+		<method name="getElement()Landroid/renderscript/Element;" since="16" deprecated="31"/>
+		<method name="getStride()J" since="24" deprecated="31"/>
+		<method name="getSurface()Landroid/view/Surface;" since="16" deprecated="31"/>
+		<method name="getTimeStamp()J" since="24" deprecated="31"/>
+		<method name="getType()Landroid/renderscript/Type;" deprecated="31"/>
+		<method name="getUsage()I" since="16" deprecated="31"/>
+		<method name="ioReceive()V" since="16" deprecated="31"/>
+		<method name="ioSend()V" since="16" deprecated="31"/>
+		<method name="resize(I)V" deprecated="18"/>
+		<method name="setAutoPadding(Z)V" since="23" deprecated="31"/>
+		<method name="setFromFieldPacker(IIIILandroid/renderscript/FieldPacker;)V" since="23" deprecated="31"/>
+		<method name="setFromFieldPacker(IILandroid/renderscript/FieldPacker;)V" deprecated="31"/>
+		<method name="setFromFieldPacker(ILandroid/renderscript/FieldPacker;)V" deprecated="31"/>
+		<method name="setOnBufferAvailableListener(Landroid/renderscript/Allocation$OnBufferAvailableListener;)V" since="19" deprecated="31"/>
+		<method name="setSurface(Landroid/view/Surface;)V" since="16" deprecated="31"/>
+		<method name="syncAll(I)V" deprecated="31"/>
+		<field name="USAGE_GRAPHICS_CONSTANTS" deprecated="31"/>
+		<field name="USAGE_GRAPHICS_RENDER_TARGET" since="14" deprecated="31"/>
+		<field name="USAGE_GRAPHICS_TEXTURE" deprecated="31"/>
+		<field name="USAGE_GRAPHICS_VERTEX" deprecated="31"/>
+		<field name="USAGE_IO_INPUT" since="16" deprecated="31"/>
+		<field name="USAGE_IO_OUTPUT" since="16" deprecated="31"/>
+		<field name="USAGE_SCRIPT" deprecated="31"/>
+		<field name="USAGE_SHARED" since="18" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Allocation$MipmapControl" since="11" deprecated="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Allocation$MipmapControl;"/>
+		<method name="values()[Landroid/renderscript/Allocation$MipmapControl;"/>
+		<field name="MIPMAP_FULL" deprecated="31"/>
+		<field name="MIPMAP_NONE" deprecated="31"/>
+		<field name="MIPMAP_ON_SYNC_TO_TEXTURE" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Allocation$OnBufferAvailableListener" since="19" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="onBufferAvailable(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/AllocationAdapter" since="11" deprecated="31">
+		<extends name="android/renderscript/Allocation"/>
+		<method name="create1D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;" since="14" deprecated="31"/>
+		<method name="create2D(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;)Landroid/renderscript/AllocationAdapter;" deprecated="31"/>
+		<method name="createTyped(Landroid/renderscript/RenderScript;Landroid/renderscript/Allocation;Landroid/renderscript/Type;)Landroid/renderscript/AllocationAdapter;" since="23" deprecated="31"/>
+		<method name="readData([F)V" removed="14"/>
+		<method name="readData([I)V" removed="14"/>
+		<method name="setFace(Landroid/renderscript/Type$CubemapFace;)V" deprecated="31"/>
+		<method name="setLOD(I)V" deprecated="31"/>
+		<method name="setX(I)V" since="23" deprecated="31"/>
+		<method name="setY(I)V" deprecated="31"/>
+		<method name="setZ(I)V" deprecated="31"/>
+		<method name="subData(ILandroid/renderscript/FieldPacker;)V" removed="14"/>
+		<method name="subData1D(II[B)V" removed="14"/>
+		<method name="subData1D(II[F)V" removed="14"/>
+		<method name="subData1D(II[I)V" removed="14"/>
+		<method name="subData1D(II[S)V" removed="14"/>
+		<method name="subData2D(IIII[F)V" removed="14"/>
+		<method name="subData2D(IIII[I)V" removed="14"/>
+		<method name="subElementData(IILandroid/renderscript/FieldPacker;)V" removed="14"/>
+	</class>
+	<class name="android/renderscript/BaseObj" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="destroy()V" deprecated="31"/>
+		<method name="getName()Ljava/lang/String;" since="14" deprecated="31"/>
+		<method name="setName(Ljava/lang/String;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Byte2" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(BB)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Byte3" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(BBB)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Byte4" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(BBBB)V" since="14" deprecated="31"/>
+		<field name="w" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Double2" since="14" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(DD)V" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Double3" since="14" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(DDD)V" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Double4" since="14" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(DDDD)V" deprecated="31"/>
+		<field name="w" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Element" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="ALLOCATION(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="A_8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="BOOLEAN(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="ELEMENT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="F16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31"/>
+		<method name="F16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31"/>
+		<method name="F16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31"/>
+		<method name="F16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="23" deprecated="31"/>
+		<method name="F32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="F32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="F32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="F32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="F64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="F64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="F64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="F64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="FONT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="16" deprecated="31"/>
+		<method name="I16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="I16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="I32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="I64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="I8_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I8_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="I8_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="MATRIX4X4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="16"/>
+		<method name="MATRIX_2X2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="MATRIX_3X3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="MATRIX_4X4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="MESH(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="PROGRAM_FRAGMENT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="PROGRAM_RASTER(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="PROGRAM_STORE(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="PROGRAM_VERTEX(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="RGBA_4444(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="RGBA_5551(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="RGBA_8888(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="RGB_565(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="RGB_888(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="SAMPLER(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="SCRIPT(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="TYPE(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="U16(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="U16_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U16_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U16_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U32(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="U32_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U32_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U32_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U64(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="U64_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U64_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U64_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U8(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="U8_2(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U8_3(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="14" deprecated="31"/>
+		<method name="U8_4(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="YUV(Landroid/renderscript/RenderScript;)Landroid/renderscript/Element;" since="19" deprecated="31"/>
+		<method name="createPixel(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;Landroid/renderscript/Element$DataKind;)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="createVector(Landroid/renderscript/RenderScript;Landroid/renderscript/Element$DataType;I)Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="getBytesSize()I" since="16" deprecated="31"/>
+		<method name="getDataKind()Landroid/renderscript/Element$DataKind;" since="16" deprecated="31"/>
+		<method name="getDataType()Landroid/renderscript/Element$DataType;" since="16" deprecated="31"/>
+		<method name="getSubElement(I)Landroid/renderscript/Element;" since="16" deprecated="31"/>
+		<method name="getSubElementArraySize(I)I" since="16" deprecated="31"/>
+		<method name="getSubElementCount()I" since="16" deprecated="31"/>
+		<method name="getSubElementName(I)Ljava/lang/String;" since="16" deprecated="31"/>
+		<method name="getSubElementOffsetBytes(I)I" since="16" deprecated="31"/>
+		<method name="getVectorSize()I" since="16" deprecated="31"/>
+		<method name="isCompatible(Landroid/renderscript/Element;)Z" since="14" deprecated="31"/>
+		<method name="isComplex()Z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Element$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="31"/>
+		<method name="add(Landroid/renderscript/Element;Ljava/lang/String;)Landroid/renderscript/Element$Builder;" deprecated="31"/>
+		<method name="add(Landroid/renderscript/Element;Ljava/lang/String;I)Landroid/renderscript/Element$Builder;" deprecated="31"/>
+		<method name="create()Landroid/renderscript/Element;" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Element$DataKind" since="11" deprecated="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Element$DataKind;"/>
+		<method name="values()[Landroid/renderscript/Element$DataKind;"/>
+		<field name="PIXEL_A" deprecated="31"/>
+		<field name="PIXEL_DEPTH" since="14" deprecated="31"/>
+		<field name="PIXEL_L" deprecated="31"/>
+		<field name="PIXEL_LA" deprecated="31"/>
+		<field name="PIXEL_RGB" deprecated="31"/>
+		<field name="PIXEL_RGBA" deprecated="31"/>
+		<field name="PIXEL_YUV" since="18" deprecated="31"/>
+		<field name="USER" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Element$DataType" since="11" deprecated="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Element$DataType;"/>
+		<method name="values()[Landroid/renderscript/Element$DataType;"/>
+		<field name="BOOLEAN" deprecated="31"/>
+		<field name="FLOAT_16" since="23" deprecated="31"/>
+		<field name="FLOAT_32" deprecated="31"/>
+		<field name="FLOAT_64" deprecated="31"/>
+		<field name="MATRIX_2X2" deprecated="31"/>
+		<field name="MATRIX_3X3" deprecated="31"/>
+		<field name="MATRIX_4X4" deprecated="31"/>
+		<field name="NONE" since="16" deprecated="31"/>
+		<field name="RS_ALLOCATION" deprecated="31"/>
+		<field name="RS_ELEMENT" deprecated="31"/>
+		<field name="RS_FONT" since="16" deprecated="31"/>
+		<field name="RS_MESH" deprecated="31"/>
+		<field name="RS_PROGRAM_FRAGMENT" deprecated="31"/>
+		<field name="RS_PROGRAM_RASTER" deprecated="31"/>
+		<field name="RS_PROGRAM_STORE" deprecated="31"/>
+		<field name="RS_PROGRAM_VERTEX" deprecated="31"/>
+		<field name="RS_SAMPLER" deprecated="31"/>
+		<field name="RS_SCRIPT" deprecated="31"/>
+		<field name="RS_TYPE" deprecated="31"/>
+		<field name="SIGNED_16" deprecated="31"/>
+		<field name="SIGNED_32" deprecated="31"/>
+		<field name="SIGNED_64" deprecated="31"/>
+		<field name="SIGNED_8" deprecated="31"/>
+		<field name="UNSIGNED_16" deprecated="31"/>
+		<field name="UNSIGNED_32" deprecated="31"/>
+		<field name="UNSIGNED_4_4_4_4" deprecated="31"/>
+		<field name="UNSIGNED_5_5_5_1" deprecated="31"/>
+		<field name="UNSIGNED_5_6_5" deprecated="31"/>
+		<field name="UNSIGNED_64" deprecated="31"/>
+		<field name="UNSIGNED_8" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/FieldPacker" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V" deprecated="31"/>
+		<method name="&lt;init>([B)V" since="18" deprecated="31"/>
+		<method name="addBoolean(Z)V" deprecated="31"/>
+		<method name="addF32(F)V" deprecated="31"/>
+		<method name="addF32(Landroid/renderscript/Float2;)V" deprecated="31"/>
+		<method name="addF32(Landroid/renderscript/Float3;)V" deprecated="31"/>
+		<method name="addF32(Landroid/renderscript/Float4;)V" deprecated="31"/>
+		<method name="addF64(D)V" deprecated="31"/>
+		<method name="addF64(Landroid/renderscript/Double2;)V" since="14" deprecated="31"/>
+		<method name="addF64(Landroid/renderscript/Double3;)V" since="14" deprecated="31"/>
+		<method name="addF64(Landroid/renderscript/Double4;)V" since="14" deprecated="31"/>
+		<method name="addI16(Landroid/renderscript/Short2;)V" deprecated="31"/>
+		<method name="addI16(Landroid/renderscript/Short3;)V" deprecated="31"/>
+		<method name="addI16(Landroid/renderscript/Short4;)V" deprecated="31"/>
+		<method name="addI16(S)V" deprecated="31"/>
+		<method name="addI32(I)V" deprecated="31"/>
+		<method name="addI32(Landroid/renderscript/Int2;)V" deprecated="31"/>
+		<method name="addI32(Landroid/renderscript/Int3;)V" deprecated="31"/>
+		<method name="addI32(Landroid/renderscript/Int4;)V" deprecated="31"/>
+		<method name="addI64(J)V" deprecated="31"/>
+		<method name="addI64(Landroid/renderscript/Long2;)V" since="14" deprecated="31"/>
+		<method name="addI64(Landroid/renderscript/Long3;)V" since="14" deprecated="31"/>
+		<method name="addI64(Landroid/renderscript/Long4;)V" since="14" deprecated="31"/>
+		<method name="addI8(B)V" deprecated="31"/>
+		<method name="addI8(Landroid/renderscript/Byte2;)V" deprecated="31"/>
+		<method name="addI8(Landroid/renderscript/Byte3;)V" deprecated="31"/>
+		<method name="addI8(Landroid/renderscript/Byte4;)V" deprecated="31"/>
+		<method name="addMatrix(Landroid/renderscript/Matrix2f;)V" deprecated="31"/>
+		<method name="addMatrix(Landroid/renderscript/Matrix3f;)V" deprecated="31"/>
+		<method name="addMatrix(Landroid/renderscript/Matrix4f;)V" deprecated="31"/>
+		<method name="addObj(Landroid/renderscript/BaseObj;)V" deprecated="31"/>
+		<method name="addU16(I)V" deprecated="31"/>
+		<method name="addU16(Landroid/renderscript/Int2;)V" deprecated="31"/>
+		<method name="addU16(Landroid/renderscript/Int3;)V" deprecated="31"/>
+		<method name="addU16(Landroid/renderscript/Int4;)V" deprecated="31"/>
+		<method name="addU32(J)V" deprecated="31"/>
+		<method name="addU32(Landroid/renderscript/Long2;)V" deprecated="31"/>
+		<method name="addU32(Landroid/renderscript/Long3;)V" deprecated="31"/>
+		<method name="addU32(Landroid/renderscript/Long4;)V" deprecated="31"/>
+		<method name="addU64(J)V" deprecated="31"/>
+		<method name="addU64(Landroid/renderscript/Long2;)V" since="14" deprecated="31"/>
+		<method name="addU64(Landroid/renderscript/Long3;)V" since="14" deprecated="31"/>
+		<method name="addU64(Landroid/renderscript/Long4;)V" since="14" deprecated="31"/>
+		<method name="addU8(Landroid/renderscript/Short2;)V" deprecated="31"/>
+		<method name="addU8(Landroid/renderscript/Short3;)V" deprecated="31"/>
+		<method name="addU8(Landroid/renderscript/Short4;)V" deprecated="31"/>
+		<method name="addU8(S)V" deprecated="31"/>
+		<method name="align(I)V" deprecated="31"/>
+		<method name="getData()[B" deprecated="31"/>
+		<method name="reset()V" deprecated="31"/>
+		<method name="reset(I)V" deprecated="31"/>
+		<method name="skip(I)V" deprecated="31"/>
+		<method name="subBoolean()Z" since="18" deprecated="31"/>
+		<method name="subByte2()Landroid/renderscript/Byte2;" since="18" deprecated="31"/>
+		<method name="subByte3()Landroid/renderscript/Byte3;" since="18" deprecated="31"/>
+		<method name="subByte4()Landroid/renderscript/Byte4;" since="18" deprecated="31"/>
+		<method name="subDouble2()Landroid/renderscript/Double2;" since="18" deprecated="31"/>
+		<method name="subDouble3()Landroid/renderscript/Double3;" since="18" deprecated="31"/>
+		<method name="subDouble4()Landroid/renderscript/Double4;" since="18" deprecated="31"/>
+		<method name="subF32()F" since="18" deprecated="31"/>
+		<method name="subF64()D" since="18" deprecated="31"/>
+		<method name="subFloat2()Landroid/renderscript/Float2;" since="18" deprecated="31"/>
+		<method name="subFloat3()Landroid/renderscript/Float3;" since="18" deprecated="31"/>
+		<method name="subFloat4()Landroid/renderscript/Float4;" since="18" deprecated="31"/>
+		<method name="subI16()S" since="18" deprecated="31"/>
+		<method name="subI32()I" since="18" deprecated="31"/>
+		<method name="subI64()J" since="18" deprecated="31"/>
+		<method name="subI8()B" since="18" deprecated="31"/>
+		<method name="subInt2()Landroid/renderscript/Int2;" since="18" deprecated="31"/>
+		<method name="subInt3()Landroid/renderscript/Int3;" since="18" deprecated="31"/>
+		<method name="subInt4()Landroid/renderscript/Int4;" since="18" deprecated="31"/>
+		<method name="subLong2()Landroid/renderscript/Long2;" since="18" deprecated="31"/>
+		<method name="subLong3()Landroid/renderscript/Long3;" since="18" deprecated="31"/>
+		<method name="subLong4()Landroid/renderscript/Long4;" since="18" deprecated="31"/>
+		<method name="subMatrix2f()Landroid/renderscript/Matrix2f;" since="18" deprecated="31"/>
+		<method name="subMatrix3f()Landroid/renderscript/Matrix3f;" since="18" deprecated="31"/>
+		<method name="subMatrix4f()Landroid/renderscript/Matrix4f;" since="18" deprecated="31"/>
+		<method name="subShort2()Landroid/renderscript/Short2;" since="18" deprecated="31"/>
+		<method name="subShort3()Landroid/renderscript/Short3;" since="18" deprecated="31"/>
+		<method name="subShort4()Landroid/renderscript/Short4;" since="18" deprecated="31"/>
+		<method name="subalign(I)V" since="18" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/FileA3D" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/AssetManager;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16"/>
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/io/File;)Landroid/renderscript/FileA3D;" deprecated="16"/>
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Ljava/lang/String;)Landroid/renderscript/FileA3D;" deprecated="16"/>
+		<method name="createFromResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)Landroid/renderscript/FileA3D;" deprecated="16"/>
+		<method name="getIndexEntry(I)Landroid/renderscript/FileA3D$IndexEntry;" deprecated="16"/>
+		<method name="getIndexEntryCount()I" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/FileA3D$EntryType" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/FileA3D$EntryType;"/>
+		<method name="values()[Landroid/renderscript/FileA3D$EntryType;"/>
+		<field name="MESH"/>
+		<field name="UNKNOWN"/>
+	</class>
+	<class name="android/renderscript/FileA3D$IndexEntry" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="getEntryType()Landroid/renderscript/FileA3D$EntryType;" deprecated="16"/>
+		<method name="getMesh()Landroid/renderscript/Mesh;" deprecated="16"/>
+		<method name="getName()Ljava/lang/String;" deprecated="16"/>
+		<method name="getObject()Landroid/renderscript/BaseObj;" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/Float2" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(FF)V" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Float3" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(FFF)V" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Float4" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(FFFF)V" deprecated="31"/>
+		<field name="w" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Font" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;Landroid/renderscript/Font$Style;F)Landroid/renderscript/Font;" deprecated="16"/>
+		<method name="createFromAsset(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;F)Landroid/renderscript/Font;" deprecated="16"/>
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/io/File;F)Landroid/renderscript/Font;" deprecated="16"/>
+		<method name="createFromFile(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;Ljava/lang/String;F)Landroid/renderscript/Font;" deprecated="16"/>
+		<method name="createFromResource(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;IF)Landroid/renderscript/Font;" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/Font$Style" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Font$Style;"/>
+		<method name="values()[Landroid/renderscript/Font$Style;"/>
+		<field name="BOLD"/>
+		<field name="BOLD_ITALIC"/>
+		<field name="ITALIC"/>
+		<field name="NORMAL"/>
+	</class>
+	<class name="android/renderscript/Int2" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(II)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Int3" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(III)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Int4" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(IIII)V" since="14" deprecated="31"/>
+		<field name="w" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Long2" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(JJ)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Long3" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(JJJ)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Long4" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(JJJJ)V" since="14" deprecated="31"/>
+		<field name="w" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Matrix2f" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>([F)V" deprecated="31"/>
+		<method name="get(II)F" deprecated="31"/>
+		<method name="getArray()[F" deprecated="31"/>
+		<method name="load(Landroid/renderscript/Matrix2f;)V" deprecated="31"/>
+		<method name="loadIdentity()V" deprecated="31"/>
+		<method name="loadMultiply(Landroid/renderscript/Matrix2f;Landroid/renderscript/Matrix2f;)V" deprecated="31"/>
+		<method name="loadRotate(F)V" deprecated="31"/>
+		<method name="loadScale(FF)V" deprecated="31"/>
+		<method name="multiply(Landroid/renderscript/Matrix2f;)V" deprecated="31"/>
+		<method name="rotate(F)V" deprecated="31"/>
+		<method name="scale(FF)V" deprecated="31"/>
+		<method name="set(IIF)V" deprecated="31"/>
+		<method name="transpose()V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Matrix3f" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>([F)V" deprecated="31"/>
+		<method name="get(II)F" deprecated="31"/>
+		<method name="getArray()[F" deprecated="31"/>
+		<method name="load(Landroid/renderscript/Matrix3f;)V" deprecated="31"/>
+		<method name="loadIdentity()V" deprecated="31"/>
+		<method name="loadMultiply(Landroid/renderscript/Matrix3f;Landroid/renderscript/Matrix3f;)V" deprecated="31"/>
+		<method name="loadRotate(F)V" deprecated="31"/>
+		<method name="loadRotate(FFFF)V" deprecated="31"/>
+		<method name="loadScale(FF)V" deprecated="31"/>
+		<method name="loadScale(FFF)V" deprecated="31"/>
+		<method name="loadTranslate(FF)V" deprecated="31"/>
+		<method name="multiply(Landroid/renderscript/Matrix3f;)V" deprecated="31"/>
+		<method name="rotate(F)V" deprecated="31"/>
+		<method name="rotate(FFFF)V" deprecated="31"/>
+		<method name="scale(FF)V" deprecated="31"/>
+		<method name="scale(FFF)V" deprecated="31"/>
+		<method name="set(IIF)V" deprecated="31"/>
+		<method name="translate(FF)V" deprecated="31"/>
+		<method name="transpose()V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Matrix4f" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>([F)V" deprecated="31"/>
+		<method name="get(II)F" deprecated="31"/>
+		<method name="getArray()[F" deprecated="31"/>
+		<method name="inverse()Z" deprecated="31"/>
+		<method name="inverseTranspose()Z" deprecated="31"/>
+		<method name="load(Landroid/renderscript/Matrix4f;)V" deprecated="31"/>
+		<method name="loadFrustum(FFFFFF)V" deprecated="31"/>
+		<method name="loadIdentity()V" deprecated="31"/>
+		<method name="loadMultiply(Landroid/renderscript/Matrix4f;Landroid/renderscript/Matrix4f;)V" deprecated="31"/>
+		<method name="loadOrtho(FFFFFF)V" deprecated="31"/>
+		<method name="loadOrthoWindow(II)V" deprecated="31"/>
+		<method name="loadPerspective(FFFF)V" deprecated="31"/>
+		<method name="loadProjectionNormalized(II)V" deprecated="31"/>
+		<method name="loadRotate(FFFF)V" deprecated="31"/>
+		<method name="loadScale(FFF)V" deprecated="31"/>
+		<method name="loadTranslate(FFF)V" deprecated="31"/>
+		<method name="multiply(Landroid/renderscript/Matrix4f;)V" deprecated="31"/>
+		<method name="rotate(FFFF)V" deprecated="31"/>
+		<method name="scale(FFF)V" deprecated="31"/>
+		<method name="set(IIF)V" deprecated="31"/>
+		<method name="translate(FFF)V" deprecated="31"/>
+		<method name="transpose()V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Mesh" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="getIndexSetAllocation(I)Landroid/renderscript/Allocation;" deprecated="16"/>
+		<method name="getPrimitive(I)Landroid/renderscript/Mesh$Primitive;" deprecated="16"/>
+		<method name="getPrimitiveCount()I" deprecated="16"/>
+		<method name="getVertexAllocation(I)Landroid/renderscript/Allocation;" deprecated="16"/>
+		<method name="getVertexAllocationCount()I" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/Mesh$AllocationBuilder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
+		<method name="addIndexSetAllocation(Landroid/renderscript/Allocation;Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16"/>
+		<method name="addIndexSetType(Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16"/>
+		<method name="addVertexAllocation(Landroid/renderscript/Allocation;)Landroid/renderscript/Mesh$AllocationBuilder;" deprecated="16"/>
+		<method name="create()Landroid/renderscript/Mesh;" deprecated="16"/>
+		<method name="getCurrentIndexSetIndex()I" deprecated="16"/>
+		<method name="getCurrentVertexTypeIndex()I" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/Mesh$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;I)V" deprecated="16"/>
+		<method name="addIndexSetType(Landroid/renderscript/Element;ILandroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
+		<method name="addIndexSetType(Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
+		<method name="addIndexSetType(Landroid/renderscript/Type;Landroid/renderscript/Mesh$Primitive;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
+		<method name="addVertexType(Landroid/renderscript/Element;I)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
+		<method name="addVertexType(Landroid/renderscript/Type;)Landroid/renderscript/Mesh$Builder;" deprecated="16"/>
+		<method name="create()Landroid/renderscript/Mesh;" deprecated="16"/>
+		<method name="getCurrentIndexSetIndex()I" deprecated="16"/>
+		<method name="getCurrentVertexTypeIndex()I" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/Mesh$Primitive" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Mesh$Primitive;"/>
+		<method name="values()[Landroid/renderscript/Mesh$Primitive;"/>
+		<field name="LINE"/>
+		<field name="LINE_STRIP"/>
+		<field name="POINT"/>
+		<field name="TRIANGLE"/>
+		<field name="TRIANGLE_FAN"/>
+		<field name="TRIANGLE_STRIP"/>
+	</class>
+	<class name="android/renderscript/Mesh$TriangleMeshBuilder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;II)V" deprecated="16"/>
+		<method name="addTriangle(III)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
+		<method name="addVertex(FF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
+		<method name="addVertex(FFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
+		<method name="create(Z)Landroid/renderscript/Mesh;" deprecated="16"/>
+		<method name="setColor(FFFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
+		<method name="setNormal(FFF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
+		<method name="setTexture(FF)Landroid/renderscript/Mesh$TriangleMeshBuilder;" deprecated="16"/>
+		<field name="COLOR" deprecated="16"/>
+		<field name="NORMAL" deprecated="16"/>
+		<field name="TEXTURE_0" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/Program" since="11" removed="18">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="bindConstants(Landroid/renderscript/Allocation;I)V"/>
+		<method name="bindSampler(Landroid/renderscript/Sampler;I)V"/>
+		<method name="bindTexture(Landroid/renderscript/Allocation;I)V"/>
+		<method name="getConstant(I)Landroid/renderscript/Type;" since="16"/>
+		<method name="getConstantCount()I" since="16"/>
+		<method name="getTextureCount()I" since="16"/>
+		<method name="getTextureName(I)Ljava/lang/String;" since="16"/>
+		<method name="getTextureType(I)Landroid/renderscript/Program$TextureType;" since="16"/>
+	</class>
+	<class name="android/renderscript/Program$BaseProgramBuilder" since="11" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
+		<method name="addConstant(Landroid/renderscript/Type;)Landroid/renderscript/Program$BaseProgramBuilder;"/>
+		<method name="addTexture(Landroid/renderscript/Program$TextureType;)Landroid/renderscript/Program$BaseProgramBuilder;"/>
+		<method name="addTexture(Landroid/renderscript/Program$TextureType;Ljava/lang/String;)Landroid/renderscript/Program$BaseProgramBuilder;" since="16"/>
+		<method name="getCurrentConstantIndex()I"/>
+		<method name="getCurrentTextureIndex()I"/>
+		<method name="initProgram(Landroid/renderscript/Program;)V"/>
+		<method name="setShader(Landroid/content/res/Resources;I)Landroid/renderscript/Program$BaseProgramBuilder;"/>
+		<method name="setShader(Ljava/lang/String;)Landroid/renderscript/Program$BaseProgramBuilder;"/>
+	</class>
+	<class name="android/renderscript/Program$TextureType" since="11" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Program$TextureType;"/>
+		<method name="values()[Landroid/renderscript/Program$TextureType;"/>
+		<field name="TEXTURE_2D"/>
+		<field name="TEXTURE_CUBE"/>
+	</class>
+	<class name="android/renderscript/ProgramFragment" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program"/>
+	</class>
+	<class name="android/renderscript/ProgramFragment$Builder" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program$BaseProgramBuilder"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
+		<method name="create()Landroid/renderscript/ProgramFragment;" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/ProgramFragment"/>
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
+		<method name="create()Landroid/renderscript/ProgramFragmentFixedFunction;" deprecated="16"/>
+		<method name="setPointSpriteTexCoordinateReplacement(Z)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16"/>
+		<method name="setTexture(Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;I)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16"/>
+		<method name="setVaryingColor(Z)Landroid/renderscript/ProgramFragmentFixedFunction$Builder;" deprecated="16"/>
+		<field name="MAX_TEXTURE" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;"/>
+		<method name="values()[Landroid/renderscript/ProgramFragmentFixedFunction$Builder$EnvMode;"/>
+		<field name="DECAL"/>
+		<field name="MODULATE"/>
+		<field name="REPLACE"/>
+	</class>
+	<class name="android/renderscript/ProgramFragmentFixedFunction$Builder$Format" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;"/>
+		<method name="values()[Landroid/renderscript/ProgramFragmentFixedFunction$Builder$Format;"/>
+		<field name="ALPHA"/>
+		<field name="LUMINANCE_ALPHA"/>
+		<field name="RGB"/>
+		<field name="RGBA"/>
+	</class>
+	<class name="android/renderscript/ProgramRaster" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="CULL_BACK(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
+		<method name="CULL_FRONT(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
+		<method name="CULL_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramRaster;" deprecated="16"/>
+		<method name="getCullMode()Landroid/renderscript/ProgramRaster$CullMode;" since="16" deprecated="16"/>
+		<method name="isPointSpriteEnabled()Z" since="16" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramRaster$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
+		<method name="create()Landroid/renderscript/ProgramRaster;" deprecated="16"/>
+		<method name="setCullMode(Landroid/renderscript/ProgramRaster$CullMode;)Landroid/renderscript/ProgramRaster$Builder;" deprecated="16"/>
+		<method name="setPointSpriteEnabled(Z)Landroid/renderscript/ProgramRaster$Builder;" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramRaster$CullMode" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramRaster$CullMode;"/>
+		<method name="values()[Landroid/renderscript/ProgramRaster$CullMode;"/>
+		<field name="BACK"/>
+		<field name="FRONT"/>
+		<field name="NONE"/>
+	</class>
+	<class name="android/renderscript/ProgramStore" since="11" removed="18">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="BLEND_ALPHA_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
+		<method name="BLEND_ALPHA_DEPTH_TEST(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
+		<method name="BLEND_NONE_DEPTH_NONE(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
+		<method name="BLEND_NONE_DEPTH_TEST(Landroid/renderscript/RenderScript;)Landroid/renderscript/ProgramStore;"/>
+		<method name="getBlendDstFunc()Landroid/renderscript/ProgramStore$BlendDstFunc;" since="16"/>
+		<method name="getBlendSrcFunc()Landroid/renderscript/ProgramStore$BlendSrcFunc;" since="16"/>
+		<method name="getDepthFunc()Landroid/renderscript/ProgramStore$DepthFunc;" since="16"/>
+		<method name="isColorMaskAlphaEnabled()Z" since="16"/>
+		<method name="isColorMaskBlueEnabled()Z" since="16"/>
+		<method name="isColorMaskGreenEnabled()Z" since="16"/>
+		<method name="isColorMaskRedEnabled()Z" since="16"/>
+		<method name="isDepthMaskEnabled()Z" since="16"/>
+		<method name="isDitherEnabled()Z" since="16"/>
+	</class>
+	<class name="android/renderscript/ProgramStore$BlendDstFunc" since="11" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$BlendDstFunc;"/>
+		<method name="values()[Landroid/renderscript/ProgramStore$BlendDstFunc;"/>
+		<field name="DST_ALPHA"/>
+		<field name="ONE"/>
+		<field name="ONE_MINUS_DST_ALPHA"/>
+		<field name="ONE_MINUS_SRC_ALPHA"/>
+		<field name="ONE_MINUS_SRC_COLOR"/>
+		<field name="SRC_ALPHA"/>
+		<field name="SRC_COLOR"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="android/renderscript/ProgramStore$BlendSrcFunc" since="11" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$BlendSrcFunc;"/>
+		<method name="values()[Landroid/renderscript/ProgramStore$BlendSrcFunc;"/>
+		<field name="DST_ALPHA"/>
+		<field name="DST_COLOR"/>
+		<field name="ONE"/>
+		<field name="ONE_MINUS_DST_ALPHA"/>
+		<field name="ONE_MINUS_DST_COLOR"/>
+		<field name="ONE_MINUS_SRC_ALPHA"/>
+		<field name="SRC_ALPHA"/>
+		<field name="SRC_ALPHA_SATURATE"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="android/renderscript/ProgramStore$Builder" since="11" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V"/>
+		<method name="create()Landroid/renderscript/ProgramStore;"/>
+		<method name="setBlendFunc(Landroid/renderscript/ProgramStore$BlendSrcFunc;Landroid/renderscript/ProgramStore$BlendDstFunc;)Landroid/renderscript/ProgramStore$Builder;"/>
+		<method name="setColorMaskEnabled(ZZZZ)Landroid/renderscript/ProgramStore$Builder;"/>
+		<method name="setDepthFunc(Landroid/renderscript/ProgramStore$DepthFunc;)Landroid/renderscript/ProgramStore$Builder;"/>
+		<method name="setDepthMaskEnabled(Z)Landroid/renderscript/ProgramStore$Builder;"/>
+		<method name="setDitherEnabled(Z)Landroid/renderscript/ProgramStore$Builder;"/>
+	</class>
+	<class name="android/renderscript/ProgramStore$DepthFunc" since="11" removed="18">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/ProgramStore$DepthFunc;"/>
+		<method name="values()[Landroid/renderscript/ProgramStore$DepthFunc;"/>
+		<field name="ALWAYS"/>
+		<field name="EQUAL"/>
+		<field name="GREATER"/>
+		<field name="GREATER_OR_EQUAL"/>
+		<field name="LESS"/>
+		<field name="LESS_OR_EQUAL"/>
+		<field name="NOT_EQUAL"/>
+	</class>
+	<class name="android/renderscript/ProgramVertex" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program"/>
+		<method name="getInput(I)Landroid/renderscript/Element;" since="16" deprecated="16"/>
+		<method name="getInputCount()I" since="16" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramVertex$Builder" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/Program$BaseProgramBuilder"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
+		<method name="addInput(Landroid/renderscript/Element;)Landroid/renderscript/ProgramVertex$Builder;" deprecated="16"/>
+		<method name="create()Landroid/renderscript/ProgramVertex;" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramVertexFixedFunction" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/ProgramVertex"/>
+		<method name="bindConstants(Landroid/renderscript/ProgramVertexFixedFunction$Constants;)V" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramVertexFixedFunction$Builder" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
+		<method name="create()Landroid/renderscript/ProgramVertexFixedFunction;" deprecated="16"/>
+		<method name="setTextureMatrixEnable(Z)Landroid/renderscript/ProgramVertexFixedFunction$Builder;" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/ProgramVertexFixedFunction$Constants" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="16"/>
+		<method name="destroy()V" deprecated="16"/>
+		<method name="setModelview(Landroid/renderscript/Matrix4f;)V" deprecated="16"/>
+		<method name="setProjection(Landroid/renderscript/Matrix4f;)V" deprecated="16"/>
+		<method name="setTexture(Landroid/renderscript/Matrix4f;)V" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/RSDriverException" since="11" deprecated="31">
+		<extends name="android/renderscript/RSRuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RSIllegalArgumentException" since="11" deprecated="31">
+		<extends name="android/renderscript/RSRuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RSInvalidStateException" since="11" deprecated="31">
+		<extends name="android/renderscript/RSRuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RSRuntimeException" since="11" deprecated="31">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RSSurfaceView" since="11" deprecated="16" removed="18">
+		<extends name="android/view/SurfaceView"/>
+		<implements name="android/view/SurfaceHolder$Callback"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="16"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="16"/>
+		<method name="createRenderScriptGL(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
+		<method name="destroyRenderScriptGL()V" deprecated="16"/>
+		<method name="getRenderScriptGL()Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
+		<method name="pause()V" deprecated="16"/>
+		<method name="resume()V" deprecated="16"/>
+		<method name="setRenderScriptGL(Landroid/renderscript/RenderScriptGL;)V" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/RSTextureView" since="14" deprecated="16" removed="18">
+		<extends name="android/view/TextureView"/>
+		<implements name="android/view/TextureView$SurfaceTextureListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="16"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="16"/>
+		<method name="createRenderScriptGL(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
+		<method name="destroyRenderScriptGL()V" deprecated="16"/>
+		<method name="getRenderScriptGL()Landroid/renderscript/RenderScriptGL;" deprecated="16"/>
+		<method name="pause()V" deprecated="16"/>
+		<method name="resume()V" deprecated="16"/>
+		<method name="setRenderScriptGL(Landroid/renderscript/RenderScriptGL;)V" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/RenderScript" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="contextDump()V" deprecated="31"/>
+		<method name="create(Landroid/content/Context;)Landroid/renderscript/RenderScript;" deprecated="31"/>
+		<method name="create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;)Landroid/renderscript/RenderScript;" since="18" deprecated="31"/>
+		<method name="create(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;I)Landroid/renderscript/RenderScript;" since="21" deprecated="31"/>
+		<method name="createMultiContext(Landroid/content/Context;Landroid/renderscript/RenderScript$ContextType;II)Landroid/renderscript/RenderScript;" since="23" deprecated="31"/>
+		<method name="destroy()V" deprecated="31"/>
+		<method name="finish()V" deprecated="31"/>
+		<method name="getApplicationContext()Landroid/content/Context;" deprecated="31"/>
+		<method name="getErrorHandler()Landroid/renderscript/RenderScript$RSErrorHandler;" deprecated="31"/>
+		<method name="getMessageHandler()Landroid/renderscript/RenderScript$RSMessageHandler;" deprecated="31"/>
+		<method name="getMinorVersion()J" since="23" deprecated="31"/>
+		<method name="releaseAllContexts()V" since="23" deprecated="31"/>
+		<method name="sendMessage(I[I)V" since="18" deprecated="31"/>
+		<method name="setErrorHandler(Landroid/renderscript/RenderScript$RSErrorHandler;)V" deprecated="31"/>
+		<method name="setMessageHandler(Landroid/renderscript/RenderScript$RSMessageHandler;)V" deprecated="31"/>
+		<method name="setPriority(Landroid/renderscript/RenderScript$Priority;)V" deprecated="31"/>
+		<field name="CREATE_FLAG_LOW_LATENCY" since="21" deprecated="31"/>
+		<field name="CREATE_FLAG_LOW_POWER" since="21" deprecated="31"/>
+		<field name="CREATE_FLAG_NONE" since="21" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RenderScript$ContextType" since="18" deprecated="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/RenderScript$ContextType;"/>
+		<method name="values()[Landroid/renderscript/RenderScript$ContextType;"/>
+		<field name="DEBUG" deprecated="31"/>
+		<field name="NORMAL" deprecated="31"/>
+		<field name="PROFILE" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RenderScript$Priority" since="11" deprecated="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/RenderScript$Priority;"/>
+		<method name="values()[Landroid/renderscript/RenderScript$Priority;"/>
+		<field name="LOW" deprecated="31"/>
+		<field name="NORMAL" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RenderScript$RSErrorHandler" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<field name="mErrorMessage" deprecated="31"/>
+		<field name="mErrorNum" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RenderScript$RSMessageHandler" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<field name="mData" deprecated="31"/>
+		<field name="mID" deprecated="31"/>
+		<field name="mLength" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/RenderScriptGL" since="11" deprecated="16" removed="18">
+		<extends name="android/renderscript/RenderScript"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/renderscript/RenderScriptGL$SurfaceConfig;)V" deprecated="16"/>
+		<method name="bindProgramFragment(Landroid/renderscript/ProgramFragment;)V" deprecated="16"/>
+		<method name="bindProgramRaster(Landroid/renderscript/ProgramRaster;)V" deprecated="16"/>
+		<method name="bindProgramStore(Landroid/renderscript/ProgramStore;)V" deprecated="16"/>
+		<method name="bindProgramVertex(Landroid/renderscript/ProgramVertex;)V" deprecated="16"/>
+		<method name="bindRootScript(Landroid/renderscript/Script;)V" deprecated="16"/>
+		<method name="getHeight()I" deprecated="16"/>
+		<method name="getWidth()I" deprecated="16"/>
+		<method name="pause()V" deprecated="16"/>
+		<method name="resume()V" deprecated="16"/>
+		<method name="setSurface(Landroid/view/SurfaceHolder;II)V" deprecated="16"/>
+		<method name="setSurfaceTexture(Landroid/graphics/SurfaceTexture;II)V" since="14" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/RenderScriptGL$SurfaceConfig" since="11" deprecated="16" removed="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="16"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScriptGL$SurfaceConfig;)V" deprecated="16"/>
+		<method name="setAlpha(II)V" deprecated="16"/>
+		<method name="setColor(II)V" deprecated="16"/>
+		<method name="setDepth(II)V" deprecated="16"/>
+		<method name="setSamples(IIF)V" deprecated="16"/>
+	</class>
+	<class name="android/renderscript/Sampler" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="CLAMP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31"/>
+		<method name="CLAMP_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31"/>
+		<method name="CLAMP_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31"/>
+		<method name="MIRRORED_REPEAT_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18" deprecated="31"/>
+		<method name="MIRRORED_REPEAT_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18" deprecated="31"/>
+		<method name="MIRRORED_REPEAT_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" since="18" deprecated="31"/>
+		<method name="WRAP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31"/>
+		<method name="WRAP_LINEAR_MIP_LINEAR(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31"/>
+		<method name="WRAP_NEAREST(Landroid/renderscript/RenderScript;)Landroid/renderscript/Sampler;" deprecated="31"/>
+		<method name="getAnisotropy()F" since="16" deprecated="31"/>
+		<method name="getMagnification()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31"/>
+		<method name="getMinification()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31"/>
+		<method name="getWrapS()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31"/>
+		<method name="getWrapT()Landroid/renderscript/Sampler$Value;" since="16" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Sampler$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="31"/>
+		<method name="create()Landroid/renderscript/Sampler;" deprecated="31"/>
+		<method name="setAnisotropy(F)V" deprecated="31"/>
+		<method name="setMagnification(Landroid/renderscript/Sampler$Value;)V" deprecated="31"/>
+		<method name="setMinification(Landroid/renderscript/Sampler$Value;)V" deprecated="31"/>
+		<method name="setWrapS(Landroid/renderscript/Sampler$Value;)V" deprecated="31"/>
+		<method name="setWrapT(Landroid/renderscript/Sampler$Value;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Sampler$Value" since="11" deprecated="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Sampler$Value;"/>
+		<method name="values()[Landroid/renderscript/Sampler$Value;"/>
+		<field name="CLAMP" deprecated="31"/>
+		<field name="LINEAR" deprecated="31"/>
+		<field name="LINEAR_MIP_LINEAR" deprecated="31"/>
+		<field name="LINEAR_MIP_NEAREST" deprecated="31"/>
+		<field name="MIRRORED_REPEAT" since="18" deprecated="31"/>
+		<field name="NEAREST" deprecated="31"/>
+		<field name="WRAP" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Script" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="bindAllocation(Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="createFieldID(ILandroid/renderscript/Element;)Landroid/renderscript/Script$FieldID;" since="17" deprecated="31"/>
+		<method name="createInvokeID(I)Landroid/renderscript/Script$InvokeID;" since="23" deprecated="31"/>
+		<method name="createKernelID(IILandroid/renderscript/Element;Landroid/renderscript/Element;)Landroid/renderscript/Script$KernelID;" since="17" deprecated="31"/>
+		<method name="forEach(ILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;)V" since="14" deprecated="31"/>
+		<method name="forEach(ILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;Landroid/renderscript/Script$LaunchOptions;)V" since="18" deprecated="31"/>
+		<method name="forEach(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;)V" since="23" deprecated="31"/>
+		<method name="forEach(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/FieldPacker;Landroid/renderscript/Script$LaunchOptions;)V" since="23" deprecated="31"/>
+		<method name="getVarB(I)Z" since="18" deprecated="31"/>
+		<method name="getVarD(I)D" since="18" deprecated="31"/>
+		<method name="getVarF(I)F" since="18" deprecated="31"/>
+		<method name="getVarI(I)I" since="18" deprecated="31"/>
+		<method name="getVarJ(I)J" since="18" deprecated="31"/>
+		<method name="getVarV(ILandroid/renderscript/FieldPacker;)V" since="18" deprecated="31"/>
+		<method name="invoke(I)V" deprecated="31"/>
+		<method name="invoke(ILandroid/renderscript/FieldPacker;)V" deprecated="31"/>
+		<method name="reduce(I[Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="24" deprecated="31"/>
+		<method name="setTimeZone(Ljava/lang/String;)V" deprecated="31"/>
+		<method name="setVar(ID)V" deprecated="31"/>
+		<method name="setVar(IF)V" deprecated="31"/>
+		<method name="setVar(II)V" deprecated="31"/>
+		<method name="setVar(IJ)V" deprecated="31"/>
+		<method name="setVar(ILandroid/renderscript/BaseObj;)V" deprecated="31"/>
+		<method name="setVar(ILandroid/renderscript/FieldPacker;)V" deprecated="31"/>
+		<method name="setVar(ILandroid/renderscript/FieldPacker;Landroid/renderscript/Element;[I)V" since="16" deprecated="31"/>
+		<method name="setVar(IZ)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Script$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/renderscript/Script$FieldBase" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="getAllocation()Landroid/renderscript/Allocation;" deprecated="31"/>
+		<method name="getElement()Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="getType()Landroid/renderscript/Type;" deprecated="31"/>
+		<method name="init(Landroid/renderscript/RenderScript;I)V" deprecated="31"/>
+		<method name="init(Landroid/renderscript/RenderScript;II)V" deprecated="31"/>
+		<method name="updateAllocation()V" deprecated="31"/>
+		<field name="mAllocation" deprecated="31"/>
+		<field name="mElement" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Script$FieldID" since="17" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+	</class>
+	<class name="android/renderscript/Script$InvokeID" since="23" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+	</class>
+	<class name="android/renderscript/Script$KernelID" since="17" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+	</class>
+	<class name="android/renderscript/Script$LaunchOptions" since="18" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="getXEnd()I" deprecated="31"/>
+		<method name="getXStart()I" deprecated="31"/>
+		<method name="getYEnd()I" deprecated="31"/>
+		<method name="getYStart()I" deprecated="31"/>
+		<method name="getZEnd()I" deprecated="31"/>
+		<method name="getZStart()I" deprecated="31"/>
+		<method name="setX(II)Landroid/renderscript/Script$LaunchOptions;" deprecated="31"/>
+		<method name="setY(II)Landroid/renderscript/Script$LaunchOptions;" deprecated="31"/>
+		<method name="setZ(II)Landroid/renderscript/Script$LaunchOptions;" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptC" since="11" deprecated="31">
+		<extends name="android/renderscript/Script"/>
+		<method name="&lt;init>(ILandroid/renderscript/RenderScript;)V" deprecated="31"/>
+		<method name="&lt;init>(JLandroid/renderscript/RenderScript;)V" since="21" deprecated="31"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;Landroid/content/res/Resources;I)V" deprecated="31"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;Ljava/lang/String;[B[B)V" since="21" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptGroup" since="17" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="execute()V" deprecated="23"/>
+		<method name="execute([Ljava/lang/Object;)[Ljava/lang/Object;" since="23" deprecated="31"/>
+		<method name="setInput(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Allocation;)V" deprecated="23"/>
+		<method name="setOutput(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Allocation;)V" deprecated="23"/>
+	</class>
+	<class name="android/renderscript/ScriptGroup$Binding" since="23" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/Script$FieldID;Ljava/lang/Object;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptGroup$Builder" since="17" deprecated="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="29"/>
+		<method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29"/>
+		<method name="addConnection(Landroid/renderscript/Type;Landroid/renderscript/Script$KernelID;Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29"/>
+		<method name="addKernel(Landroid/renderscript/Script$KernelID;)Landroid/renderscript/ScriptGroup$Builder;" deprecated="29"/>
+		<method name="create()Landroid/renderscript/ScriptGroup;" deprecated="29"/>
+	</class>
+	<class name="android/renderscript/ScriptGroup$Builder2" since="23" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;)V" deprecated="31"/>
+		<method name="addInput()Landroid/renderscript/ScriptGroup$Input;" deprecated="31"/>
+		<method name="addInvoke(Landroid/renderscript/Script$InvokeID;[Ljava/lang/Object;)Landroid/renderscript/ScriptGroup$Closure;" deprecated="31"/>
+		<method name="addKernel(Landroid/renderscript/Script$KernelID;Landroid/renderscript/Type;[Ljava/lang/Object;)Landroid/renderscript/ScriptGroup$Closure;" deprecated="31"/>
+		<method name="create(Ljava/lang/String;[Landroid/renderscript/ScriptGroup$Future;)Landroid/renderscript/ScriptGroup;" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptGroup$Closure" since="23" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="getGlobal(Landroid/renderscript/Script$FieldID;)Landroid/renderscript/ScriptGroup$Future;" deprecated="31"/>
+		<method name="getReturn()Landroid/renderscript/ScriptGroup$Future;" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptGroup$Future" since="23" deprecated="31">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/renderscript/ScriptGroup$Input" since="23" deprecated="31">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsic" since="17" deprecated="31">
+		<extends name="android/renderscript/Script"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsic3DLUT" since="18" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsic3DLUT;" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setLUT(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicBLAS" since="23" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="BNNM(Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;II)V" deprecated="31"/>
+		<method name="CGBMV(IIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CGEMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CGEMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CGERC(Landroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CGERU(Landroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CHBMV(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CHEMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CHEMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CHER(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CHER2(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CHER2K(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CHERK(IIFLandroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CHPMV(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CHPR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CHPR2(ILandroid/renderscript/Float2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CSYMM(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CSYR2K(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CSYRK(IILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Float2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CTRMM(IIIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="CTRSM(IIIILandroid/renderscript/Float2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="CTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DGBMV(IIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DGEMM(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DGEMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DGER(DLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DSBMV(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DSPMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DSPR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DSPR2(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DSYMM(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DSYMV(IDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IDLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DSYR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DSYR2(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DSYR2K(IIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DSYRK(IIDLandroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DTRMM(IIIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="DTRSM(IIIIDLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="DTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="SGBMV(IIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="SGEMM(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SGEMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="SGER(FLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SSBMV(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="SSPMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="SSPR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SSPR2(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SSYMM(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SSYMV(IFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;IFLandroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="SSYR(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SSYR2(IFLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SSYR2K(IIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="SSYRK(IIFLandroid/renderscript/Allocation;FLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="STBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="STBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="STPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="STPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="STRMM(IIIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="STRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="STRSM(IIIIFLandroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="STRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZGBMV(IIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZGEMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZGEMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZGERC(Landroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZGERU(Landroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZHBMV(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZHEMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZHEMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZHER(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZHER2(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZHER2K(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZHERK(IIDLandroid/renderscript/Allocation;DLandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZHPMV(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZHPR(IDLandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZHPR2(ILandroid/renderscript/Double2;Landroid/renderscript/Allocation;ILandroid/renderscript/Allocation;ILandroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZSYMM(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZSYR2K(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZSYRK(IILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Double2;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZTBMV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZTBSV(IIIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZTPMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZTPSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZTRMM(IIIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZTRMV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="ZTRSM(IIIILandroid/renderscript/Double2;Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="ZTRSV(IIILandroid/renderscript/Allocation;Landroid/renderscript/Allocation;I)V" deprecated="31"/>
+		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicBLAS;" deprecated="31"/>
+		<field name="CONJ_TRANSPOSE" deprecated="31"/>
+		<field name="LEFT" deprecated="31"/>
+		<field name="LOWER" deprecated="31"/>
+		<field name="NON_UNIT" deprecated="31"/>
+		<field name="NO_TRANSPOSE" deprecated="31"/>
+		<field name="RIGHT" deprecated="31"/>
+		<field name="TRANSPOSE" deprecated="31"/>
+		<field name="UNIT" deprecated="31"/>
+		<field name="UPPER" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicBlend" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlend;" deprecated="31"/>
+		<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachAdd(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachClear(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachClear(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachDst(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachDst(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachDstAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachDstAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachDstIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachDstIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachDstOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachDstOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachDstOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachDstOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachMultiply(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachMultiply(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachSrc(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachSrc(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachSrcAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachSrcAtop(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachSrcIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachSrcIn(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachSrcOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachSrcOut(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachSrcOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachSrcOver(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachSubtract(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachSubtract(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEachXor(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEachXor(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getKernelIDAdd()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDClear()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDDst()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDDstAtop()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDDstIn()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDDstOut()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDDstOver()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDMultiply()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDSrc()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDSrcAtop()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDSrcIn()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDSrcOut()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDSrcOver()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDSubtract()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="getKernelIDXor()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicBlur" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicBlur;" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31"/>
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="setRadius(F)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicColorMatrix" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" since="19" deprecated="31"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicColorMatrix;" deprecated="19"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setAdd(FFFF)V" since="19" deprecated="31"/>
+		<method name="setAdd(Landroid/renderscript/Float4;)V" since="19" deprecated="31"/>
+		<method name="setColorMatrix(Landroid/renderscript/Matrix3f;)V" deprecated="31"/>
+		<method name="setColorMatrix(Landroid/renderscript/Matrix4f;)V" deprecated="31"/>
+		<method name="setGreyscale()V" deprecated="31"/>
+		<method name="setRGBtoYUV()V" deprecated="31"/>
+		<method name="setYUVtoRGB()V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicConvolve3x3" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve3x3;" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31"/>
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setCoefficients([F)V" deprecated="31"/>
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicConvolve5x5" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicConvolve5x5;" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31"/>
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setCoefficients([F)V" deprecated="31"/>
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicHistogram" since="19" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicHistogram;" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="forEach_Dot(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach_Dot(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31"/>
+		<method name="getKernelID_Separate()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setDotCoefficients(FFFF)V" deprecated="31"/>
+		<method name="setOutput(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicLUT" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicLUT;" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" since="21" deprecated="31"/>
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setAlpha(II)V" deprecated="31"/>
+		<method name="setBlue(II)V" deprecated="31"/>
+		<method name="setGreen(II)V" deprecated="31"/>
+		<method name="setRed(II)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicResize" since="20" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;)Landroid/renderscript/ScriptIntrinsicResize;" deprecated="31"/>
+		<method name="forEach_bicubic(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="forEach_bicubic(Landroid/renderscript/Allocation;Landroid/renderscript/Script$LaunchOptions;)V" deprecated="31"/>
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31"/>
+		<method name="getKernelID_bicubic()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/ScriptIntrinsicYuvToRGB" since="17" deprecated="31">
+		<extends name="android/renderscript/ScriptIntrinsic"/>
+		<method name="create(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)Landroid/renderscript/ScriptIntrinsicYuvToRGB;" deprecated="31"/>
+		<method name="forEach(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+		<method name="getFieldID_Input()Landroid/renderscript/Script$FieldID;" deprecated="31"/>
+		<method name="getKernelID()Landroid/renderscript/Script$KernelID;" deprecated="31"/>
+		<method name="setInput(Landroid/renderscript/Allocation;)V" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Short2" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(SS)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Short3" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(SSS)V" since="14" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Short4" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(SSSS)V" since="14" deprecated="31"/>
+		<field name="w" deprecated="31"/>
+		<field name="x" deprecated="31"/>
+		<field name="y" deprecated="31"/>
+		<field name="z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Type" since="11" deprecated="31">
+		<extends name="android/renderscript/BaseObj"/>
+		<method name="createX(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;I)Landroid/renderscript/Type;" since="21" deprecated="31"/>
+		<method name="createXY(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;II)Landroid/renderscript/Type;" since="21" deprecated="31"/>
+		<method name="createXYZ(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;III)Landroid/renderscript/Type;" since="21" deprecated="31"/>
+		<method name="getCount()I" deprecated="31"/>
+		<method name="getElement()Landroid/renderscript/Element;" deprecated="31"/>
+		<method name="getX()I" deprecated="31"/>
+		<method name="getY()I" deprecated="31"/>
+		<method name="getYuv()I" since="18" deprecated="31"/>
+		<method name="getZ()I" deprecated="31"/>
+		<method name="hasFaces()Z" deprecated="31"/>
+		<method name="hasMipmaps()Z" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Type$Builder" since="11" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/renderscript/RenderScript;Landroid/renderscript/Element;)V" deprecated="31"/>
+		<method name="create()Landroid/renderscript/Type;" deprecated="31"/>
+		<method name="setFaces(Z)Landroid/renderscript/Type$Builder;" deprecated="31"/>
+		<method name="setMipmaps(Z)Landroid/renderscript/Type$Builder;" deprecated="31"/>
+		<method name="setX(I)Landroid/renderscript/Type$Builder;" deprecated="31"/>
+		<method name="setY(I)Landroid/renderscript/Type$Builder;" deprecated="31"/>
+		<method name="setYuvFormat(I)Landroid/renderscript/Type$Builder;" since="18" deprecated="31"/>
+		<method name="setZ(I)Landroid/renderscript/Type$Builder;" since="18" deprecated="31"/>
+	</class>
+	<class name="android/renderscript/Type$CubemapFace" since="11" deprecated="31">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/renderscript/Type$CubemapFace;"/>
+		<method name="values()[Landroid/renderscript/Type$CubemapFace;"/>
+		<field name="NEGATIVE_X" deprecated="31"/>
+		<field name="NEGATIVE_Y" deprecated="31"/>
+		<field name="NEGATIVE_Z" deprecated="31"/>
+		<field name="POSITIVE_X" since="14" deprecated="31"/>
+		<field name="POSITIVE_Y" since="14" deprecated="31"/>
+		<field name="POSITIVE_Z" since="14" deprecated="31"/>
+		<field name="POSITVE_X" deprecated="29"/>
+		<field name="POSITVE_Y" deprecated="29"/>
+		<field name="POSITVE_Z" deprecated="29"/>
+	</class>
+	<class name="android/sax/Element" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getChild(Ljava/lang/String;)Landroid/sax/Element;"/>
+		<method name="getChild(Ljava/lang/String;Ljava/lang/String;)Landroid/sax/Element;"/>
+		<method name="requireChild(Ljava/lang/String;)Landroid/sax/Element;"/>
+		<method name="requireChild(Ljava/lang/String;Ljava/lang/String;)Landroid/sax/Element;"/>
+		<method name="setElementListener(Landroid/sax/ElementListener;)V"/>
+		<method name="setEndElementListener(Landroid/sax/EndElementListener;)V"/>
+		<method name="setEndTextElementListener(Landroid/sax/EndTextElementListener;)V"/>
+		<method name="setStartElementListener(Landroid/sax/StartElementListener;)V"/>
+		<method name="setTextElementListener(Landroid/sax/TextElementListener;)V"/>
+	</class>
+	<class name="android/sax/ElementListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/sax/EndElementListener"/>
+		<implements name="android/sax/StartElementListener"/>
+	</class>
+	<class name="android/sax/EndElementListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="end()V"/>
+	</class>
+	<class name="android/sax/EndTextElementListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="end(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/sax/RootElement" since="1">
+		<extends name="android/sax/Element"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;"/>
+	</class>
+	<class name="android/sax/StartElementListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="start(Lorg/xml/sax/Attributes;)V"/>
+	</class>
+	<class name="android/sax/TextElementListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/sax/EndTextElementListener"/>
+		<implements name="android/sax/StartElementListener"/>
+	</class>
+	<class name="android/se/omapi/Channel" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+		<method name="getSelectResponse()[B"/>
+		<method name="getSession()Landroid/se/omapi/Session;"/>
+		<method name="isBasicChannel()Z"/>
+		<method name="selectNext()Z"/>
+		<method name="transmit([B)[B"/>
+	</class>
+	<class name="android/se/omapi/Reader" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="closeSessions()V"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSEService()Landroid/se/omapi/SEService;"/>
+		<method name="isSecureElementPresent()Z"/>
+		<method name="openSession()Landroid/se/omapi/Session;"/>
+	</class>
+	<class name="android/se/omapi/SEService" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/se/omapi/SEService$OnConnectedListener;)V"/>
+		<method name="getReaders()[Landroid/se/omapi/Reader;"/>
+		<method name="getUiccReader(I)Landroid/se/omapi/Reader;" since="30"/>
+		<method name="getVersion()Ljava/lang/String;"/>
+		<method name="isConnected()Z"/>
+		<method name="shutdown()V"/>
+		<field name="ACTION_SECURE_ELEMENT_STATE_CHANGED" since="31"/>
+		<field name="EXTRA_READER_NAME" since="31"/>
+		<field name="EXTRA_READER_STATE" since="31"/>
+	</class>
+	<class name="android/se/omapi/SEService$OnConnectedListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onConnected()V"/>
+	</class>
+	<class name="android/se/omapi/Session" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="close()V"/>
+		<method name="closeChannels()V"/>
+		<method name="getATR()[B"/>
+		<method name="getReader()Landroid/se/omapi/Reader;"/>
+		<method name="isClosed()Z"/>
+		<method name="openBasicChannel([B)Landroid/se/omapi/Channel;"/>
+		<method name="openBasicChannel([BB)Landroid/se/omapi/Channel;"/>
+		<method name="openLogicalChannel([B)Landroid/se/omapi/Channel;"/>
+		<method name="openLogicalChannel([BB)Landroid/se/omapi/Channel;"/>
+	</class>
+	<class name="android/security/AppUriAuthenticationPolicy" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAppAndUriMappings()Ljava/util/Map;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/security/AppUriAuthenticationPolicy$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addAppAndUriMapping(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;)Landroid/security/AppUriAuthenticationPolicy$Builder;"/>
+		<method name="build()Landroid/security/AppUriAuthenticationPolicy;"/>
+	</class>
+	<class name="android/security/AttestedKeyPair" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/KeyPair;Ljava/util/List;)V" since="30"/>
+		<method name="getAttestationRecord()Ljava/util/List;"/>
+		<method name="getKeyPair()Ljava/security/KeyPair;"/>
+	</class>
+	<class name="android/security/ConfirmationAlreadyPresentingException" since="28">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/security/ConfirmationCallback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCanceled()V"/>
+		<method name="onConfirmed([B)V"/>
+		<method name="onDismissed()V"/>
+		<method name="onError(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/ConfirmationNotAvailableException" since="28">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/security/ConfirmationPrompt" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="cancelPrompt()V"/>
+		<method name="isSupported(Landroid/content/Context;)Z"/>
+		<method name="presentPrompt(Ljava/util/concurrent/Executor;Landroid/security/ConfirmationCallback;)V"/>
+	</class>
+	<class name="android/security/ConfirmationPrompt$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="build()Landroid/security/ConfirmationPrompt;"/>
+		<method name="setExtraData([B)Landroid/security/ConfirmationPrompt$Builder;"/>
+		<method name="setPromptText(Ljava/lang/CharSequence;)Landroid/security/ConfirmationPrompt$Builder;"/>
+	</class>
+	<class name="android/security/FileIntegrityManager" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="isApkVeritySupported()Z"/>
+		<method name="isAppSourceCertificateTrusted(Ljava/security/cert/X509Certificate;)Z"/>
+	</class>
+	<class name="android/security/KeyChain" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="choosePrivateKeyAlias(Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Landroid/net/Uri;Ljava/lang/String;)V" since="23"/>
+		<method name="choosePrivateKeyAlias(Landroid/app/Activity;Landroid/security/KeyChainAliasCallback;[Ljava/lang/String;[Ljava/security/Principal;Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="createInstallIntent()Landroid/content/Intent;"/>
+		<method name="createManageCredentialsIntent(Landroid/security/AppUriAuthenticationPolicy;)Landroid/content/Intent;" since="31"/>
+		<method name="getCertificateChain(Landroid/content/Context;Ljava/lang/String;)[Ljava/security/cert/X509Certificate;"/>
+		<method name="getCredentialManagementAppPolicy(Landroid/content/Context;)Landroid/security/AppUriAuthenticationPolicy;" since="31"/>
+		<method name="getPrivateKey(Landroid/content/Context;Ljava/lang/String;)Ljava/security/PrivateKey;"/>
+		<method name="isBoundKeyAlgorithm(Ljava/lang/String;)Z" since="18" deprecated="23"/>
+		<method name="isCredentialManagementApp(Landroid/content/Context;)Z" since="31"/>
+		<method name="isKeyAlgorithmSupported(Ljava/lang/String;)Z" since="18"/>
+		<method name="removeCredentialManagementApp(Landroid/content/Context;)Z" since="31"/>
+		<field name="ACTION_KEYCHAIN_CHANGED" since="26"/>
+		<field name="ACTION_KEY_ACCESS_CHANGED" since="26"/>
+		<field name="ACTION_STORAGE_CHANGED" since="16" deprecated="26"/>
+		<field name="ACTION_TRUST_STORE_CHANGED" since="26"/>
+		<field name="EXTRA_CERTIFICATE"/>
+		<field name="EXTRA_KEY_ACCESSIBLE" since="26"/>
+		<field name="EXTRA_KEY_ALIAS" since="26"/>
+		<field name="EXTRA_NAME"/>
+		<field name="EXTRA_PKCS12"/>
+		<field name="KEY_ALIAS_SELECTION_DENIED" since="30"/>
+	</class>
+	<class name="android/security/KeyChainAliasCallback" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="alias(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/security/KeyChainException" since="14">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/KeyPairGeneratorSpec" since="18" deprecated="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="19" deprecated="29"/>
+		<method name="getContext()Landroid/content/Context;" deprecated="29"/>
+		<method name="getEndDate()Ljava/util/Date;" deprecated="29"/>
+		<method name="getKeySize()I" since="19" deprecated="29"/>
+		<method name="getKeyType()Ljava/lang/String;" since="19" deprecated="29"/>
+		<method name="getKeystoreAlias()Ljava/lang/String;" deprecated="29"/>
+		<method name="getSerialNumber()Ljava/math/BigInteger;" deprecated="29"/>
+		<method name="getStartDate()Ljava/util/Date;" deprecated="29"/>
+		<method name="getSubjectDN()Ljavax/security/auth/x500/X500Principal;" deprecated="29"/>
+		<method name="isEncryptionRequired()Z" deprecated="29"/>
+	</class>
+	<class name="android/security/KeyPairGeneratorSpec$Builder" since="18" deprecated="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="build()Landroid/security/KeyPairGeneratorSpec;" deprecated="29"/>
+		<method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29"/>
+		<method name="setAlias(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+		<method name="setEncryptionRequired()Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+		<method name="setEndDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+		<method name="setKeySize(I)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29"/>
+		<method name="setKeyType(Ljava/lang/String;)Landroid/security/KeyPairGeneratorSpec$Builder;" since="19" deprecated="29"/>
+		<method name="setSerialNumber(Ljava/math/BigInteger;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+		<method name="setStartDate(Ljava/util/Date;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+		<method name="setSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/KeyPairGeneratorSpec$Builder;" deprecated="29"/>
+	</class>
+	<class name="android/security/KeyStoreParameter" since="18" deprecated="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$ProtectionParameter"/>
+		<method name="isEncryptionRequired()Z" deprecated="29"/>
+	</class>
+	<class name="android/security/KeyStoreParameter$Builder" since="18" deprecated="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="build()Landroid/security/KeyStoreParameter;" deprecated="29"/>
+		<method name="setEncryptionRequired(Z)Landroid/security/KeyStoreParameter$Builder;" deprecated="29"/>
+	</class>
+	<class name="android/security/NetworkSecurityPolicy" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getInstance()Landroid/security/NetworkSecurityPolicy;"/>
+		<method name="isCleartextTrafficPermitted()Z"/>
+		<method name="isCleartextTrafficPermitted(Ljava/lang/String;)Z" since="24"/>
+	</class>
+	<class name="android/security/identity/AccessControlProfile" since="30">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/security/identity/AccessControlProfile$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/security/identity/AccessControlProfileId;)V"/>
+		<method name="build()Landroid/security/identity/AccessControlProfile;"/>
+		<method name="setReaderCertificate(Ljava/security/cert/X509Certificate;)Landroid/security/identity/AccessControlProfile$Builder;"/>
+		<method name="setUserAuthenticationRequired(Z)Landroid/security/identity/AccessControlProfile$Builder;"/>
+		<method name="setUserAuthenticationTimeout(J)Landroid/security/identity/AccessControlProfile$Builder;"/>
+	</class>
+	<class name="android/security/identity/AccessControlProfileId" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getId()I"/>
+	</class>
+	<class name="android/security/identity/AlreadyPersonalizedException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/CipherSuiteNotSupportedException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/DocTypeNotSupportedException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/EphemeralPublicKeyNotFoundException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/IdentityCredential" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="createEphemeralKeyPair()Ljava/security/KeyPair;"/>
+		<method name="decryptMessageFromReader([B)[B"/>
+		<method name="delete([B)[B" since="31"/>
+		<method name="encryptMessageToReader([B)[B"/>
+		<method name="getAuthKeysNeedingCertification()Ljava/util/Collection;"/>
+		<method name="getAuthenticationDataUsageCount()[I"/>
+		<method name="getCredentialKeyCertificateChain()Ljava/util/Collection;"/>
+		<method name="getEntries([BLjava/util/Map;[B[B)Landroid/security/identity/ResultData;"/>
+		<method name="proveOwnership([B)[B" since="31"/>
+		<method name="setAllowUsingExhaustedKeys(Z)V"/>
+		<method name="setAllowUsingExpiredKeys(Z)V" since="31"/>
+		<method name="setAvailableAuthenticationKeys(II)V"/>
+		<method name="setReaderEphemeralPublicKey(Ljava/security/PublicKey;)V"/>
+		<method name="storeStaticAuthenticationData(Ljava/security/cert/X509Certificate;Ljava/time/Instant;[B)V" since="31"/>
+		<method name="storeStaticAuthenticationData(Ljava/security/cert/X509Certificate;[B)V" deprecated="31"/>
+		<method name="update(Landroid/security/identity/PersonalizationData;)[B" since="31"/>
+	</class>
+	<class name="android/security/identity/IdentityCredentialException" since="30">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/IdentityCredentialStore" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="createCredential(Ljava/lang/String;Ljava/lang/String;)Landroid/security/identity/WritableIdentityCredential;"/>
+		<method name="deleteCredentialByName(Ljava/lang/String;)[B" deprecated="31"/>
+		<method name="getCredentialByName(Ljava/lang/String;I)Landroid/security/identity/IdentityCredential;"/>
+		<method name="getDirectAccessInstance(Landroid/content/Context;)Landroid/security/identity/IdentityCredentialStore;"/>
+		<method name="getInstance(Landroid/content/Context;)Landroid/security/identity/IdentityCredentialStore;"/>
+		<method name="getSupportedDocTypes()[Ljava/lang/String;"/>
+		<field name="CIPHERSUITE_ECDHE_HKDF_ECDSA_WITH_AES_256_GCM_SHA256"/>
+	</class>
+	<class name="android/security/identity/InvalidReaderSignatureException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/InvalidRequestMessageException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/MessageDecryptionException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/NoAuthenticationKeyAvailableException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/PersonalizationData" since="30">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/security/identity/PersonalizationData$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addAccessControlProfile(Landroid/security/identity/AccessControlProfile;)Landroid/security/identity/PersonalizationData$Builder;"/>
+		<method name="build()Landroid/security/identity/PersonalizationData;"/>
+		<method name="putEntry(Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;[B)Landroid/security/identity/PersonalizationData$Builder;"/>
+	</class>
+	<class name="android/security/identity/ResultData" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getAuthenticatedData()[B"/>
+		<method name="getEntry(Ljava/lang/String;Ljava/lang/String;)[B"/>
+		<method name="getEntryNames(Ljava/lang/String;)Ljava/util/Collection;"/>
+		<method name="getMessageAuthenticationCode()[B"/>
+		<method name="getNamespaces()Ljava/util/Collection;"/>
+		<method name="getRetrievedEntryNames(Ljava/lang/String;)Ljava/util/Collection;"/>
+		<method name="getStaticAuthenticationData()[B"/>
+		<method name="getStatus(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<field name="STATUS_NOT_IN_REQUEST_MESSAGE"/>
+		<field name="STATUS_NOT_REQUESTED"/>
+		<field name="STATUS_NO_ACCESS_CONTROL_PROFILES"/>
+		<field name="STATUS_NO_SUCH_ENTRY"/>
+		<field name="STATUS_OK"/>
+		<field name="STATUS_READER_AUTHENTICATION_FAILED"/>
+		<field name="STATUS_USER_AUTHENTICATION_FAILED"/>
+	</class>
+	<class name="android/security/identity/SessionTranscriptMismatchException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/UnknownAuthenticationKeyException" since="30">
+		<extends name="android/security/identity/IdentityCredentialException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/identity/WritableIdentityCredential" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getCredentialKeyCertificateChain([B)Ljava/util/Collection;"/>
+		<method name="personalize(Landroid/security/identity/PersonalizationData;)[B"/>
+	</class>
+	<class name="android/security/keystore/BackendBusyException" since="31">
+		<extends name="java/security/ProviderException"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(JLjava/lang/String;)V"/>
+		<method name="&lt;init>(JLjava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="getBackOffHintMillis()J"/>
+	</class>
+	<class name="android/security/keystore/KeyExpiredException" since="23">
+		<extends name="java/security/InvalidKeyException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/keystore/KeyGenParameterSpec" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;"/>
+		<method name="getAttestKeyAlias()Ljava/lang/String;" since="31"/>
+		<method name="getAttestationChallenge()[B" since="24"/>
+		<method name="getBlockModes()[Ljava/lang/String;"/>
+		<method name="getCertificateNotAfter()Ljava/util/Date;"/>
+		<method name="getCertificateNotBefore()Ljava/util/Date;"/>
+		<method name="getCertificateSerialNumber()Ljava/math/BigInteger;"/>
+		<method name="getCertificateSubject()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getDigests()[Ljava/lang/String;"/>
+		<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
+		<method name="getKeySize()I"/>
+		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;"/>
+		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;"/>
+		<method name="getKeyValidityStart()Ljava/util/Date;"/>
+		<method name="getKeystoreAlias()Ljava/lang/String;"/>
+		<method name="getMaxUsageCount()I" since="31"/>
+		<method name="getPurposes()I"/>
+		<method name="getSignaturePaddings()[Ljava/lang/String;"/>
+		<method name="getUserAuthenticationType()I" since="30"/>
+		<method name="getUserAuthenticationValidityDurationSeconds()I"/>
+		<method name="isDevicePropertiesAttestationIncluded()Z" since="31"/>
+		<method name="isDigestsSpecified()Z"/>
+		<method name="isInvalidatedByBiometricEnrollment()Z" since="24"/>
+		<method name="isRandomizedEncryptionRequired()Z"/>
+		<method name="isStrongBoxBacked()Z" since="28"/>
+		<method name="isUnlockedDeviceRequired()Z" since="28"/>
+		<method name="isUserAuthenticationRequired()Z"/>
+		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24"/>
+		<method name="isUserConfirmationRequired()Z" since="28"/>
+		<method name="isUserPresenceRequired()Z" since="28"/>
+	</class>
+	<class name="android/security/keystore/KeyGenParameterSpec$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="build()Landroid/security/keystore/KeyGenParameterSpec;"/>
+		<method name="setAlgorithmParameterSpec(Ljava/security/spec/AlgorithmParameterSpec;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setAttestKeyAlias(Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="31"/>
+		<method name="setAttestationChallenge([B)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24"/>
+		<method name="setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setCertificateNotAfter(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setCertificateNotBefore(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setCertificateSerialNumber(Ljava/math/BigInteger;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setCertificateSubject(Ljavax/security/auth/x500/X500Principal;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setDevicePropertiesAttestationIncluded(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="31"/>
+		<method name="setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setInvalidatedByBiometricEnrollment(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24"/>
+		<method name="setIsStrongBoxBacked(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
+		<method name="setKeySize(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setKeyValidityEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setKeyValidityForConsumptionEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setKeyValidityForOriginationEnd(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setKeyValidityStart(Ljava/util/Date;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setMaxUsageCount(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="31"/>
+		<method name="setRandomizedEncryptionRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setSignaturePaddings([Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setUnlockedDeviceRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
+		<method name="setUserAuthenticationParameters(II)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="30"/>
+		<method name="setUserAuthenticationRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;"/>
+		<method name="setUserAuthenticationValidWhileOnBody(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="24"/>
+		<method name="setUserAuthenticationValidityDurationSeconds(I)Landroid/security/keystore/KeyGenParameterSpec$Builder;" deprecated="30"/>
+		<method name="setUserConfirmationRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
+		<method name="setUserPresenceRequired(Z)Landroid/security/keystore/KeyGenParameterSpec$Builder;" since="28"/>
+	</class>
+	<class name="android/security/keystore/KeyInfo" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="getBlockModes()[Ljava/lang/String;"/>
+		<method name="getDigests()[Ljava/lang/String;"/>
+		<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
+		<method name="getKeySize()I"/>
+		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;"/>
+		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;"/>
+		<method name="getKeyValidityStart()Ljava/util/Date;"/>
+		<method name="getKeystoreAlias()Ljava/lang/String;"/>
+		<method name="getOrigin()I"/>
+		<method name="getPurposes()I"/>
+		<method name="getRemainingUsageCount()I" since="31"/>
+		<method name="getSecurityLevel()I" since="31"/>
+		<method name="getSignaturePaddings()[Ljava/lang/String;"/>
+		<method name="getUserAuthenticationType()I" since="30"/>
+		<method name="getUserAuthenticationValidityDurationSeconds()I"/>
+		<method name="isInsideSecureHardware()Z" deprecated="31"/>
+		<method name="isInvalidatedByBiometricEnrollment()Z" since="24"/>
+		<method name="isTrustedUserPresenceRequired()Z" since="28"/>
+		<method name="isUserAuthenticationRequired()Z"/>
+		<method name="isUserAuthenticationRequirementEnforcedBySecureHardware()Z"/>
+		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24"/>
+		<method name="isUserConfirmationRequired()Z" since="28"/>
+	</class>
+	<class name="android/security/keystore/KeyNotYetValidException" since="23">
+		<extends name="java/security/InvalidKeyException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/keystore/KeyPermanentlyInvalidatedException" since="23">
+		<extends name="java/security/InvalidKeyException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/keystore/KeyProperties" since="23">
+		<extends name="java/lang/Object"/>
+		<field name="AUTH_BIOMETRIC_STRONG" since="30"/>
+		<field name="AUTH_DEVICE_CREDENTIAL" since="30"/>
+		<field name="BLOCK_MODE_CBC"/>
+		<field name="BLOCK_MODE_CTR"/>
+		<field name="BLOCK_MODE_ECB"/>
+		<field name="BLOCK_MODE_GCM"/>
+		<field name="DIGEST_MD5"/>
+		<field name="DIGEST_NONE"/>
+		<field name="DIGEST_SHA1"/>
+		<field name="DIGEST_SHA224"/>
+		<field name="DIGEST_SHA256"/>
+		<field name="DIGEST_SHA384"/>
+		<field name="DIGEST_SHA512"/>
+		<field name="ENCRYPTION_PADDING_NONE"/>
+		<field name="ENCRYPTION_PADDING_PKCS7"/>
+		<field name="ENCRYPTION_PADDING_RSA_OAEP"/>
+		<field name="ENCRYPTION_PADDING_RSA_PKCS1"/>
+		<field name="KEY_ALGORITHM_3DES" since="28" deprecated="28"/>
+		<field name="KEY_ALGORITHM_AES"/>
+		<field name="KEY_ALGORITHM_EC"/>
+		<field name="KEY_ALGORITHM_HMAC_SHA1"/>
+		<field name="KEY_ALGORITHM_HMAC_SHA224"/>
+		<field name="KEY_ALGORITHM_HMAC_SHA256"/>
+		<field name="KEY_ALGORITHM_HMAC_SHA384"/>
+		<field name="KEY_ALGORITHM_HMAC_SHA512"/>
+		<field name="KEY_ALGORITHM_RSA"/>
+		<field name="ORIGIN_GENERATED"/>
+		<field name="ORIGIN_IMPORTED"/>
+		<field name="ORIGIN_SECURELY_IMPORTED" since="28"/>
+		<field name="ORIGIN_UNKNOWN"/>
+		<field name="PURPOSE_AGREE_KEY" since="31"/>
+		<field name="PURPOSE_ATTEST_KEY" since="31"/>
+		<field name="PURPOSE_DECRYPT"/>
+		<field name="PURPOSE_ENCRYPT"/>
+		<field name="PURPOSE_SIGN"/>
+		<field name="PURPOSE_VERIFY"/>
+		<field name="PURPOSE_WRAP_KEY" since="28"/>
+		<field name="SECURITY_LEVEL_SOFTWARE" since="31"/>
+		<field name="SECURITY_LEVEL_STRONGBOX" since="31"/>
+		<field name="SECURITY_LEVEL_TRUSTED_ENVIRONMENT" since="31"/>
+		<field name="SECURITY_LEVEL_UNKNOWN" since="31"/>
+		<field name="SECURITY_LEVEL_UNKNOWN_SECURE" since="31"/>
+		<field name="SIGNATURE_PADDING_RSA_PKCS1"/>
+		<field name="SIGNATURE_PADDING_RSA_PSS"/>
+		<field name="UNRESTRICTED_USAGE_COUNT" since="31"/>
+	</class>
+	<class name="android/security/keystore/KeyProtection" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$ProtectionParameter"/>
+		<method name="getBlockModes()[Ljava/lang/String;"/>
+		<method name="getDigests()[Ljava/lang/String;"/>
+		<method name="getEncryptionPaddings()[Ljava/lang/String;"/>
+		<method name="getKeyValidityForConsumptionEnd()Ljava/util/Date;"/>
+		<method name="getKeyValidityForOriginationEnd()Ljava/util/Date;"/>
+		<method name="getKeyValidityStart()Ljava/util/Date;"/>
+		<method name="getMaxUsageCount()I" since="31"/>
+		<method name="getPurposes()I"/>
+		<method name="getSignaturePaddings()[Ljava/lang/String;"/>
+		<method name="getUserAuthenticationType()I" since="30"/>
+		<method name="getUserAuthenticationValidityDurationSeconds()I"/>
+		<method name="isDigestsSpecified()Z"/>
+		<method name="isInvalidatedByBiometricEnrollment()Z" since="24"/>
+		<method name="isRandomizedEncryptionRequired()Z"/>
+		<method name="isUnlockedDeviceRequired()Z" since="28"/>
+		<method name="isUserAuthenticationRequired()Z"/>
+		<method name="isUserAuthenticationValidWhileOnBody()Z" since="24"/>
+		<method name="isUserConfirmationRequired()Z" since="28"/>
+		<method name="isUserPresenceRequired()Z" since="28"/>
+	</class>
+	<class name="android/security/keystore/KeyProtection$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/security/keystore/KeyProtection;"/>
+		<method name="setBlockModes([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setDigests([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setEncryptionPaddings([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setInvalidatedByBiometricEnrollment(Z)Landroid/security/keystore/KeyProtection$Builder;" since="24"/>
+		<method name="setIsStrongBoxBacked(Z)Landroid/security/keystore/KeyProtection$Builder;" since="31"/>
+		<method name="setKeyValidityEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setKeyValidityForConsumptionEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setKeyValidityForOriginationEnd(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setKeyValidityStart(Ljava/util/Date;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setMaxUsageCount(I)Landroid/security/keystore/KeyProtection$Builder;" since="31"/>
+		<method name="setRandomizedEncryptionRequired(Z)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setSignaturePaddings([Ljava/lang/String;)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setUnlockedDeviceRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28"/>
+		<method name="setUserAuthenticationParameters(II)Landroid/security/keystore/KeyProtection$Builder;" since="30"/>
+		<method name="setUserAuthenticationRequired(Z)Landroid/security/keystore/KeyProtection$Builder;"/>
+		<method name="setUserAuthenticationValidWhileOnBody(Z)Landroid/security/keystore/KeyProtection$Builder;" since="24"/>
+		<method name="setUserAuthenticationValidityDurationSeconds(I)Landroid/security/keystore/KeyProtection$Builder;" deprecated="30"/>
+		<method name="setUserConfirmationRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28"/>
+		<method name="setUserPresenceRequired(Z)Landroid/security/keystore/KeyProtection$Builder;" since="28"/>
+	</class>
+	<class name="android/security/keystore/SecureKeyImportUnavailableException" since="28">
+		<extends name="java/security/ProviderException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/keystore/StrongBoxUnavailableException" since="28">
+		<extends name="java/security/ProviderException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/keystore/UserNotAuthenticatedException" since="23">
+		<extends name="java/security/InvalidKeyException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/keystore/UserPresenceUnavailableException" since="28">
+		<extends name="java/security/InvalidKeyException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/security/keystore/WrappedKeyEntry" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$Entry"/>
+		<method name="&lt;init>([BLjava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="getAlgorithmParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;"/>
+		<method name="getTransformation()Ljava/lang/String;"/>
+		<method name="getWrappedKeyBytes()[B"/>
+		<method name="getWrappingKeyAlias()Ljava/lang/String;"/>
+	</class>
+	<class name="android/service/autofill/AutofillService" since="26">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFillEventHistory()Landroid/service/autofill/FillEventHistory;"/>
+		<method name="onConnected()V"/>
+		<method name="onDisconnected()V"/>
+		<method name="onFillRequest(Landroid/service/autofill/FillRequest;Landroid/os/CancellationSignal;Landroid/service/autofill/FillCallback;)V"/>
+		<method name="onSaveRequest(Landroid/service/autofill/SaveRequest;Landroid/service/autofill/SaveCallback;)V"/>
+		<method name="onSavedDatasetsInfoRequest(Landroid/service/autofill/SavedDatasetsInfoCallback;)V" since="31"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/service/autofill/BatchUpdates" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/BatchUpdates$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/service/autofill/BatchUpdates;"/>
+		<method name="transformChild(ILandroid/service/autofill/Transformation;)Landroid/service/autofill/BatchUpdates$Builder;"/>
+		<method name="updateTemplate(Landroid/widget/RemoteViews;)Landroid/service/autofill/BatchUpdates$Builder;"/>
+	</class>
+	<class name="android/service/autofill/CharSequenceTransformation" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/Transformation"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/CharSequenceTransformation$Builder" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;Ljava/lang/String;)V"/>
+		<method name="addField(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;Ljava/lang/String;)Landroid/service/autofill/CharSequenceTransformation$Builder;"/>
+		<method name="build()Landroid/service/autofill/CharSequenceTransformation;"/>
+	</class>
+	<class name="android/service/autofill/CustomDescription" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/CustomDescription$Builder" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/widget/RemoteViews;)V"/>
+		<method name="addChild(ILandroid/service/autofill/Transformation;)Landroid/service/autofill/CustomDescription$Builder;"/>
+		<method name="addOnClickAction(ILandroid/service/autofill/OnClickAction;)Landroid/service/autofill/CustomDescription$Builder;" since="29"/>
+		<method name="batchUpdate(Landroid/service/autofill/Validator;Landroid/service/autofill/BatchUpdates;)Landroid/service/autofill/CustomDescription$Builder;" since="28"/>
+		<method name="build()Landroid/service/autofill/CustomDescription;"/>
+	</class>
+	<class name="android/service/autofill/Dataset" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/Dataset$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/widget/RemoteViews;)V"/>
+		<method name="build()Landroid/service/autofill/Dataset;"/>
+		<method name="setAuthentication(Landroid/content/IntentSender;)Landroid/service/autofill/Dataset$Builder;"/>
+		<method name="setId(Ljava/lang/String;)Landroid/service/autofill/Dataset$Builder;"/>
+		<method name="setInlinePresentation(Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="30"/>
+		<method name="setInlinePresentation(Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="31"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;)Landroid/service/autofill/Dataset$Builder;"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/widget/RemoteViews;)Landroid/service/autofill/Dataset$Builder;"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="30"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="31"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;)Landroid/service/autofill/Dataset$Builder;" since="28"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;Landroid/widget/RemoteViews;)Landroid/service/autofill/Dataset$Builder;" since="28"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="30"/>
+		<method name="setValue(Landroid/view/autofill/AutofillId;Landroid/view/autofill/AutofillValue;Ljava/util/regex/Pattern;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/Dataset$Builder;" since="31"/>
+	</class>
+	<class name="android/service/autofill/DateTransformation" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/Transformation"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Landroid/icu/text/DateFormat;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/DateValueSanitizer" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/Sanitizer"/>
+		<method name="&lt;init>(Landroid/icu/text/DateFormat;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/FieldClassification" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getMatches()Ljava/util/List;"/>
+	</class>
+	<class name="android/service/autofill/FieldClassification$Match" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getCategoryId()Ljava/lang/String;"/>
+		<method name="getScore()F"/>
+	</class>
+	<class name="android/service/autofill/FillCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="onFailure(Ljava/lang/CharSequence;)V"/>
+		<method name="onSuccess(Landroid/service/autofill/FillResponse;)V"/>
+	</class>
+	<class name="android/service/autofill/FillContext" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFocusedId()Landroid/view/autofill/AutofillId;" since="29"/>
+		<method name="getRequestId()I"/>
+		<method name="getStructure()Landroid/app/assist/AssistStructure;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/FillEventHistory" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getClientState()Landroid/os/Bundle;" deprecated="28"/>
+		<method name="getEvents()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/FillEventHistory$Event" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getChangedFields()Ljava/util/Map;" since="28"/>
+		<method name="getClientState()Landroid/os/Bundle;" since="28"/>
+		<method name="getDatasetId()Ljava/lang/String;"/>
+		<method name="getFieldsClassification()Ljava/util/Map;" since="28"/>
+		<method name="getIgnoredDatasetIds()Ljava/util/Set;" since="28"/>
+		<method name="getManuallyEnteredField()Ljava/util/Map;" since="28"/>
+		<method name="getNoSaveUiReason()I" since="31"/>
+		<method name="getSelectedDatasetIds()Ljava/util/Set;" since="28"/>
+		<method name="getType()I"/>
+		<field name="NO_SAVE_UI_REASON_DATASET_MATCH" since="31"/>
+		<field name="NO_SAVE_UI_REASON_FIELD_VALIDATION_FAILED" since="31"/>
+		<field name="NO_SAVE_UI_REASON_HAS_EMPTY_REQUIRED" since="31"/>
+		<field name="NO_SAVE_UI_REASON_NONE" since="31"/>
+		<field name="NO_SAVE_UI_REASON_NO_SAVE_INFO" since="31"/>
+		<field name="NO_SAVE_UI_REASON_NO_VALUE_CHANGED" since="31"/>
+		<field name="NO_SAVE_UI_REASON_WITH_DELAY_SAVE_FLAG" since="31"/>
+		<field name="TYPE_AUTHENTICATION_SELECTED"/>
+		<field name="TYPE_CONTEXT_COMMITTED" since="28"/>
+		<field name="TYPE_DATASETS_SHOWN" since="30"/>
+		<field name="TYPE_DATASET_AUTHENTICATION_SELECTED"/>
+		<field name="TYPE_DATASET_SELECTED"/>
+		<field name="TYPE_SAVE_SHOWN"/>
+	</class>
+	<class name="android/service/autofill/FillRequest" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getClientState()Landroid/os/Bundle;"/>
+		<method name="getFillContexts()Ljava/util/List;"/>
+		<method name="getFlags()I"/>
+		<method name="getId()I"/>
+		<method name="getInlineSuggestionsRequest()Landroid/view/inputmethod/InlineSuggestionsRequest;" since="30"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_COMPATIBILITY_MODE_REQUEST" since="29"/>
+		<field name="FLAG_MANUAL_REQUEST"/>
+	</class>
+	<class name="android/service/autofill/FillResponse" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_DISABLE_ACTIVITY_ONLY" since="28"/>
+		<field name="FLAG_TRACK_CONTEXT_COMMITED" since="28"/>
+	</class>
+	<class name="android/service/autofill/FillResponse$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addDataset(Landroid/service/autofill/Dataset;)Landroid/service/autofill/FillResponse$Builder;"/>
+		<method name="build()Landroid/service/autofill/FillResponse;"/>
+		<method name="disableAutofill(J)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
+		<method name="setAuthentication([Landroid/view/autofill/AutofillId;Landroid/content/IntentSender;Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;"/>
+		<method name="setAuthentication([Landroid/view/autofill/AutofillId;Landroid/content/IntentSender;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/FillResponse$Builder;" since="30"/>
+		<method name="setAuthentication([Landroid/view/autofill/AutofillId;Landroid/content/IntentSender;Landroid/widget/RemoteViews;Landroid/service/autofill/InlinePresentation;Landroid/service/autofill/InlinePresentation;)Landroid/service/autofill/FillResponse$Builder;" since="31"/>
+		<method name="setClientState(Landroid/os/Bundle;)Landroid/service/autofill/FillResponse$Builder;"/>
+		<method name="setFieldClassificationIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
+		<method name="setFlags(I)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
+		<method name="setFooter(Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
+		<method name="setHeader(Landroid/widget/RemoteViews;)Landroid/service/autofill/FillResponse$Builder;" since="28"/>
+		<method name="setIgnoredIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/FillResponse$Builder;"/>
+		<method name="setPresentationCancelIds([I)Landroid/service/autofill/FillResponse$Builder;" since="30"/>
+		<method name="setSaveInfo(Landroid/service/autofill/SaveInfo;)Landroid/service/autofill/FillResponse$Builder;"/>
+		<method name="setUserData(Landroid/service/autofill/UserData;)Landroid/service/autofill/FillResponse$Builder;" since="29"/>
+	</class>
+	<class name="android/service/autofill/ImageTransformation" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/Transformation"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/ImageTransformation$Builder" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;I)V" deprecated="28"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;ILjava/lang/CharSequence;)V" since="28"/>
+		<method name="addOption(Ljava/util/regex/Pattern;I)Landroid/service/autofill/ImageTransformation$Builder;" deprecated="28"/>
+		<method name="addOption(Ljava/util/regex/Pattern;ILjava/lang/CharSequence;)Landroid/service/autofill/ImageTransformation$Builder;" since="28"/>
+		<method name="build()Landroid/service/autofill/ImageTransformation;"/>
+	</class>
+	<class name="android/service/autofill/InlinePresentation" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/app/slice/Slice;Landroid/widget/inline/InlinePresentationSpec;Z)V"/>
+		<method name="createTooltipPresentation(Landroid/app/slice/Slice;Landroid/widget/inline/InlinePresentationSpec;)Landroid/service/autofill/InlinePresentation;" since="31"/>
+		<method name="getInlinePresentationSpec()Landroid/widget/inline/InlinePresentationSpec;"/>
+		<method name="getSlice()Landroid/app/slice/Slice;"/>
+		<method name="isPinned()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/LuhnChecksumValidator" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/Validator"/>
+		<method name="&lt;init>([Landroid/view/autofill/AutofillId;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/OnClickAction" since="29">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/service/autofill/RegexValidator" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/Validator"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;Ljava/util/regex/Pattern;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/Sanitizer" since="28">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/service/autofill/SaveCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="onFailure(Ljava/lang/CharSequence;)V"/>
+		<method name="onSuccess()V"/>
+		<method name="onSuccess(Landroid/content/IntentSender;)V" since="28"/>
+	</class>
+	<class name="android/service/autofill/SaveInfo" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_DELAY_SAVE" since="29"/>
+		<field name="FLAG_DONT_SAVE_ON_FINISH" since="28"/>
+		<field name="FLAG_SAVE_ON_ALL_VIEWS_INVISIBLE"/>
+		<field name="NEGATIVE_BUTTON_STYLE_CANCEL"/>
+		<field name="NEGATIVE_BUTTON_STYLE_NEVER" since="30"/>
+		<field name="NEGATIVE_BUTTON_STYLE_REJECT"/>
+		<field name="POSITIVE_BUTTON_STYLE_CONTINUE" since="30"/>
+		<field name="POSITIVE_BUTTON_STYLE_SAVE" since="30"/>
+		<field name="SAVE_DATA_TYPE_ADDRESS"/>
+		<field name="SAVE_DATA_TYPE_CREDIT_CARD"/>
+		<field name="SAVE_DATA_TYPE_DEBIT_CARD" since="30"/>
+		<field name="SAVE_DATA_TYPE_EMAIL_ADDRESS"/>
+		<field name="SAVE_DATA_TYPE_GENERIC"/>
+		<field name="SAVE_DATA_TYPE_GENERIC_CARD" since="30"/>
+		<field name="SAVE_DATA_TYPE_PASSWORD"/>
+		<field name="SAVE_DATA_TYPE_PAYMENT_CARD" since="30"/>
+		<field name="SAVE_DATA_TYPE_USERNAME"/>
+	</class>
+	<class name="android/service/autofill/SaveInfo$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V" since="27"/>
+		<method name="&lt;init>(I[Landroid/view/autofill/AutofillId;)V"/>
+		<method name="addSanitizer(Landroid/service/autofill/Sanitizer;[Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;" since="28"/>
+		<method name="build()Landroid/service/autofill/SaveInfo;"/>
+		<method name="setCustomDescription(Landroid/service/autofill/CustomDescription;)Landroid/service/autofill/SaveInfo$Builder;" since="27"/>
+		<method name="setDescription(Ljava/lang/CharSequence;)Landroid/service/autofill/SaveInfo$Builder;"/>
+		<method name="setFlags(I)Landroid/service/autofill/SaveInfo$Builder;"/>
+		<method name="setNegativeAction(ILandroid/content/IntentSender;)Landroid/service/autofill/SaveInfo$Builder;"/>
+		<method name="setOptionalIds([Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;"/>
+		<method name="setPositiveAction(I)Landroid/service/autofill/SaveInfo$Builder;" since="30"/>
+		<method name="setTriggerId(Landroid/view/autofill/AutofillId;)Landroid/service/autofill/SaveInfo$Builder;" since="28"/>
+		<method name="setValidator(Landroid/service/autofill/Validator;)Landroid/service/autofill/SaveInfo$Builder;" since="27"/>
+	</class>
+	<class name="android/service/autofill/SaveRequest" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getClientState()Landroid/os/Bundle;"/>
+		<method name="getDatasetIds()Ljava/util/List;" since="28"/>
+		<method name="getFillContexts()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/SavedDatasetsInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getCount()I"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_PASSWORDS"/>
+	</class>
+	<class name="android/service/autofill/SavedDatasetsInfoCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onError(I)V"/>
+		<method name="onSuccess(Ljava/util/Set;)V"/>
+		<field name="ERROR_NEEDS_USER_ACTION"/>
+		<field name="ERROR_OTHER"/>
+		<field name="ERROR_UNSUPPORTED"/>
+	</class>
+	<class name="android/service/autofill/TextValueSanitizer" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/Sanitizer"/>
+		<method name="&lt;init>(Ljava/util/regex/Pattern;Ljava/lang/String;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/Transformation" since="27">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/service/autofill/UserData" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFieldClassificationAlgorithm()Ljava/lang/String;"/>
+		<method name="getFieldClassificationAlgorithmForCategory(Ljava/lang/String;)Ljava/lang/String;" since="29"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getMaxCategoryCount()I"/>
+		<method name="getMaxFieldClassificationIdsSize()I"/>
+		<method name="getMaxUserDataSize()I"/>
+		<method name="getMaxValueLength()I"/>
+		<method name="getMinValueLength()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/UserData$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="add(Ljava/lang/String;Ljava/lang/String;)Landroid/service/autofill/UserData$Builder;"/>
+		<method name="build()Landroid/service/autofill/UserData;"/>
+		<method name="setFieldClassificationAlgorithm(Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;"/>
+		<method name="setFieldClassificationAlgorithmForCategory(Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Landroid/service/autofill/UserData$Builder;" since="29"/>
+	</class>
+	<class name="android/service/autofill/Validator" since="27">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/service/autofill/Validators" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="and([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;"/>
+		<method name="not(Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;" since="28"/>
+		<method name="or([Landroid/service/autofill/Validator;)Landroid/service/autofill/Validator;"/>
+	</class>
+	<class name="android/service/autofill/VisibilitySetterAction" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/service/autofill/OnClickAction"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/autofill/VisibilitySetterAction$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="build()Landroid/service/autofill/VisibilitySetterAction;"/>
+		<method name="setVisibility(II)Landroid/service/autofill/VisibilitySetterAction$Builder;"/>
+	</class>
+	<class name="android/service/carrier/CarrierIdentifier" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V" since="29"/>
+		<method name="&lt;init>([BLjava/lang/String;Ljava/lang/String;)V" since="28"/>
+		<method name="getCarrierId()I" since="29"/>
+		<method name="getGid1()Ljava/lang/String;"/>
+		<method name="getGid2()Ljava/lang/String;"/>
+		<method name="getImsi()Ljava/lang/String;"/>
+		<method name="getMcc()Ljava/lang/String;"/>
+		<method name="getMnc()Ljava/lang/String;"/>
+		<method name="getSpecificCarrierId()I" since="29"/>
+		<method name="getSpn()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/carrier/CarrierMessagingClientService" since="29">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService" since="22">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onDownloadMms(Landroid/net/Uri;ILandroid/net/Uri;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V"/>
+		<method name="onFilterSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="24"/>
+		<method name="onReceiveTextSms(Landroid/service/carrier/MessagePdu;Ljava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="24"/>
+		<method name="onSendDataSms([BILjava/lang/String;IILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23"/>
+		<method name="onSendDataSms([BILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23"/>
+		<method name="onSendMms(Landroid/net/Uri;ILandroid/net/Uri;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V"/>
+		<method name="onSendMultipartTextSms(Ljava/util/List;ILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23"/>
+		<method name="onSendMultipartTextSms(Ljava/util/List;ILjava/lang/String;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23"/>
+		<method name="onSendTextSms(Ljava/lang/String;ILjava/lang/String;ILandroid/service/carrier/CarrierMessagingService$ResultCallback;)V" since="23"/>
+		<method name="onSendTextSms(Ljava/lang/String;ILjava/lang/String;Landroid/service/carrier/CarrierMessagingService$ResultCallback;)V" deprecated="23"/>
+		<field name="DOWNLOAD_STATUS_ERROR"/>
+		<field name="DOWNLOAD_STATUS_OK"/>
+		<field name="DOWNLOAD_STATUS_RETRY_ON_CARRIER_NETWORK"/>
+		<field name="RECEIVE_OPTIONS_DEFAULT" since="24"/>
+		<field name="RECEIVE_OPTIONS_DROP" since="24"/>
+		<field name="RECEIVE_OPTIONS_SKIP_NOTIFY_WHEN_CREDENTIAL_PROTECTED_STORAGE_UNAVAILABLE" since="24"/>
+		<field name="SEND_FLAG_REQUEST_DELIVERY_STATUS" since="23"/>
+		<field name="SEND_STATUS_ERROR"/>
+		<field name="SEND_STATUS_OK"/>
+		<field name="SEND_STATUS_RETRY_ON_CARRIER_NETWORK"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$ResultCallback" since="22">
+		<extends name="java/lang/Object"/>
+		<method name="onReceiveResult(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$SendMmsResult" since="22">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I[B)V"/>
+		<method name="getSendConfPdu()[B"/>
+		<method name="getSendStatus()I"/>
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$SendMultipartSmsResult" since="22">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I[I)V"/>
+		<method name="getMessageRefs()[I"/>
+		<method name="getSendStatus()I"/>
+	</class>
+	<class name="android/service/carrier/CarrierMessagingService$SendSmsResult" since="22">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getMessageRef()I"/>
+		<method name="getSendStatus()I"/>
+	</class>
+	<class name="android/service/carrier/CarrierService" since="23">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="notifyCarrierNetworkChange(Z)V"/>
+		<method name="onLoadConfig(Landroid/service/carrier/CarrierIdentifier;)Landroid/os/PersistableBundle;"/>
+		<field name="CARRIER_SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/service/carrier/MessagePdu" since="22">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/util/List;)V"/>
+		<method name="getPdus()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/chooser/ChooserTarget" since="23" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/graphics/drawable/Icon;FLandroid/content/ComponentName;Landroid/os/Bundle;)V" deprecated="30"/>
+		<method name="getComponentName()Landroid/content/ComponentName;" deprecated="30"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;" deprecated="30"/>
+		<method name="getIntentExtras()Landroid/os/Bundle;" deprecated="30"/>
+		<method name="getScore()F" deprecated="30"/>
+		<method name="getTitle()Ljava/lang/CharSequence;" deprecated="30"/>
+		<field name="CREATOR" deprecated="30"/>
+	</class>
+	<class name="android/service/chooser/ChooserTargetService" since="23" deprecated="30">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="onGetChooserTargets(Landroid/content/ComponentName;Landroid/content/IntentFilter;)Ljava/util/List;" deprecated="30"/>
+		<field name="BIND_PERMISSION" deprecated="30"/>
+		<field name="META_DATA_NAME" deprecated="30"/>
+		<field name="SERVICE_INTERFACE" deprecated="30"/>
+	</class>
+	<class name="android/service/controls/Control" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAppIntent()Landroid/app/PendingIntent;"/>
+		<method name="getControlId()Ljava/lang/String;"/>
+		<method name="getControlTemplate()Landroid/service/controls/templates/ControlTemplate;"/>
+		<method name="getCustomColor()Landroid/content/res/ColorStateList;"/>
+		<method name="getCustomIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getDeviceType()I"/>
+		<method name="getStatus()I"/>
+		<method name="getStatusText()Ljava/lang/CharSequence;"/>
+		<method name="getStructure()Ljava/lang/CharSequence;"/>
+		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="getZone()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+		<field name="STATUS_DISABLED"/>
+		<field name="STATUS_ERROR"/>
+		<field name="STATUS_NOT_FOUND"/>
+		<field name="STATUS_OK"/>
+		<field name="STATUS_UNKNOWN"/>
+	</class>
+	<class name="android/service/controls/Control$StatefulBuilder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/service/controls/Control;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/app/PendingIntent;)V"/>
+		<method name="build()Landroid/service/controls/Control;"/>
+		<method name="setAppIntent(Landroid/app/PendingIntent;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setControlId(Ljava/lang/String;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setControlTemplate(Landroid/service/controls/templates/ControlTemplate;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setCustomColor(Landroid/content/res/ColorStateList;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setCustomIcon(Landroid/graphics/drawable/Icon;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setDeviceType(I)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setStatus(I)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setStatusText(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setStructure(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;"/>
+		<method name="setZone(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatefulBuilder;"/>
+	</class>
+	<class name="android/service/controls/Control$StatelessBuilder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/service/controls/Control;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/app/PendingIntent;)V"/>
+		<method name="build()Landroid/service/controls/Control;"/>
+		<method name="setAppIntent(Landroid/app/PendingIntent;)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setControlId(Ljava/lang/String;)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setCustomColor(Landroid/content/res/ColorStateList;)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setCustomIcon(Landroid/graphics/drawable/Icon;)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setDeviceType(I)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setStructure(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;"/>
+		<method name="setZone(Ljava/lang/CharSequence;)Landroid/service/controls/Control$StatelessBuilder;"/>
+	</class>
+	<class name="android/service/controls/ControlsProviderService" since="30">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="createPublisherFor(Ljava/util/List;)Ljava/util/concurrent/Flow$Publisher;"/>
+		<method name="createPublisherForAllAvailable()Ljava/util/concurrent/Flow$Publisher;"/>
+		<method name="createPublisherForSuggested()Ljava/util/concurrent/Flow$Publisher;"/>
+		<method name="performControlAction(Ljava/lang/String;Landroid/service/controls/actions/ControlAction;Ljava/util/function/Consumer;)V"/>
+		<method name="requestAddControl(Landroid/content/Context;Landroid/content/ComponentName;Landroid/service/controls/Control;)V"/>
+		<field name="SERVICE_CONTROLS"/>
+		<field name="TAG"/>
+	</class>
+	<class name="android/service/controls/DeviceTypes" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="validDeviceType(I)Z"/>
+		<field name="TYPE_AC_HEATER"/>
+		<field name="TYPE_AC_UNIT"/>
+		<field name="TYPE_AIR_FRESHENER"/>
+		<field name="TYPE_AIR_PURIFIER"/>
+		<field name="TYPE_AWNING"/>
+		<field name="TYPE_BLINDS"/>
+		<field name="TYPE_CAMERA"/>
+		<field name="TYPE_CLOSET"/>
+		<field name="TYPE_COFFEE_MAKER"/>
+		<field name="TYPE_CURTAIN"/>
+		<field name="TYPE_DEHUMIDIFIER"/>
+		<field name="TYPE_DISHWASHER"/>
+		<field name="TYPE_DISPLAY"/>
+		<field name="TYPE_DOOR"/>
+		<field name="TYPE_DOORBELL"/>
+		<field name="TYPE_DRAWER"/>
+		<field name="TYPE_DRYER"/>
+		<field name="TYPE_FAN"/>
+		<field name="TYPE_GARAGE"/>
+		<field name="TYPE_GATE"/>
+		<field name="TYPE_GENERIC_ARM_DISARM"/>
+		<field name="TYPE_GENERIC_LOCK_UNLOCK"/>
+		<field name="TYPE_GENERIC_ON_OFF"/>
+		<field name="TYPE_GENERIC_OPEN_CLOSE"/>
+		<field name="TYPE_GENERIC_START_STOP"/>
+		<field name="TYPE_GENERIC_TEMP_SETTING"/>
+		<field name="TYPE_GENERIC_VIEWSTREAM"/>
+		<field name="TYPE_HEATER"/>
+		<field name="TYPE_HOOD"/>
+		<field name="TYPE_HUMIDIFIER"/>
+		<field name="TYPE_KETTLE"/>
+		<field name="TYPE_LIGHT"/>
+		<field name="TYPE_LOCK"/>
+		<field name="TYPE_MICROWAVE"/>
+		<field name="TYPE_MOP"/>
+		<field name="TYPE_MOWER"/>
+		<field name="TYPE_MULTICOOKER"/>
+		<field name="TYPE_OUTLET"/>
+		<field name="TYPE_PERGOLA"/>
+		<field name="TYPE_RADIATOR"/>
+		<field name="TYPE_REFRIGERATOR"/>
+		<field name="TYPE_REMOTE_CONTROL"/>
+		<field name="TYPE_ROUTINE"/>
+		<field name="TYPE_SECURITY_SYSTEM"/>
+		<field name="TYPE_SET_TOP"/>
+		<field name="TYPE_SHOWER"/>
+		<field name="TYPE_SHUTTER"/>
+		<field name="TYPE_SPRINKLER"/>
+		<field name="TYPE_STANDMIXER"/>
+		<field name="TYPE_STYLER"/>
+		<field name="TYPE_SWITCH"/>
+		<field name="TYPE_THERMOSTAT"/>
+		<field name="TYPE_TV"/>
+		<field name="TYPE_UNKNOWN"/>
+		<field name="TYPE_VACUUM"/>
+		<field name="TYPE_VALVE"/>
+		<field name="TYPE_WASHER"/>
+		<field name="TYPE_WATER_HEATER"/>
+		<field name="TYPE_WINDOW"/>
+	</class>
+	<class name="android/service/controls/actions/BooleanAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ZLjava/lang/String;)V"/>
+		<method name="getNewState()Z"/>
+	</class>
+	<class name="android/service/controls/actions/CommandAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/service/controls/actions/ControlAction" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getActionType()I"/>
+		<method name="getChallengeValue()Ljava/lang/String;"/>
+		<method name="getErrorAction()Landroid/service/controls/actions/ControlAction;"/>
+		<method name="getTemplateId()Ljava/lang/String;"/>
+		<method name="isValidResponse(I)Z"/>
+		<field name="RESPONSE_CHALLENGE_ACK"/>
+		<field name="RESPONSE_CHALLENGE_PASSPHRASE"/>
+		<field name="RESPONSE_CHALLENGE_PIN"/>
+		<field name="RESPONSE_FAIL"/>
+		<field name="RESPONSE_OK"/>
+		<field name="RESPONSE_UNKNOWN"/>
+		<field name="TYPE_BOOLEAN"/>
+		<field name="TYPE_COMMAND"/>
+		<field name="TYPE_ERROR"/>
+		<field name="TYPE_FLOAT"/>
+		<field name="TYPE_MODE"/>
+	</class>
+	<class name="android/service/controls/actions/FloatAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction"/>
+		<method name="&lt;init>(Ljava/lang/String;F)V"/>
+		<method name="&lt;init>(Ljava/lang/String;FLjava/lang/String;)V"/>
+		<method name="getNewValue()F"/>
+	</class>
+	<class name="android/service/controls/actions/ModeAction" since="30">
+		<extends name="android/service/controls/actions/ControlAction"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="getNewMode()I"/>
+	</class>
+	<class name="android/service/controls/templates/ControlButton" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ZLjava/lang/CharSequence;)V"/>
+		<method name="getActionDescription()Ljava/lang/CharSequence;"/>
+		<method name="isChecked()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/controls/templates/ControlTemplate" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getErrorTemplate()Landroid/service/controls/templates/ControlTemplate;"/>
+		<method name="getNoTemplateObject()Landroid/service/controls/templates/ControlTemplate;"/>
+		<method name="getTemplateId()Ljava/lang/String;"/>
+		<method name="getTemplateType()I"/>
+		<field name="TYPE_ERROR"/>
+		<field name="TYPE_NO_TEMPLATE"/>
+		<field name="TYPE_RANGE"/>
+		<field name="TYPE_STATELESS"/>
+		<field name="TYPE_TEMPERATURE"/>
+		<field name="TYPE_THUMBNAIL" since="31"/>
+		<field name="TYPE_TOGGLE"/>
+		<field name="TYPE_TOGGLE_RANGE"/>
+	</class>
+	<class name="android/service/controls/templates/RangeTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate"/>
+		<method name="&lt;init>(Ljava/lang/String;FFFFLjava/lang/CharSequence;)V"/>
+		<method name="getCurrentValue()F"/>
+		<method name="getFormatString()Ljava/lang/CharSequence;"/>
+		<method name="getMaxValue()F"/>
+		<method name="getMinValue()F"/>
+		<method name="getStepValue()F"/>
+	</class>
+	<class name="android/service/controls/templates/StatelessTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/service/controls/templates/TemperatureControlTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/service/controls/templates/ControlTemplate;III)V"/>
+		<method name="getCurrentActiveMode()I"/>
+		<method name="getCurrentMode()I"/>
+		<method name="getModes()I"/>
+		<method name="getTemplate()Landroid/service/controls/templates/ControlTemplate;"/>
+		<field name="FLAG_MODE_COOL"/>
+		<field name="FLAG_MODE_ECO"/>
+		<field name="FLAG_MODE_HEAT"/>
+		<field name="FLAG_MODE_HEAT_COOL"/>
+		<field name="FLAG_MODE_OFF"/>
+		<field name="MODE_COOL"/>
+		<field name="MODE_ECO"/>
+		<field name="MODE_HEAT"/>
+		<field name="MODE_HEAT_COOL"/>
+		<field name="MODE_OFF"/>
+		<field name="MODE_UNKNOWN"/>
+	</class>
+	<class name="android/service/controls/templates/ThumbnailTemplate" since="31">
+		<extends name="android/service/controls/templates/ControlTemplate"/>
+		<method name="&lt;init>(Ljava/lang/String;ZLandroid/graphics/drawable/Icon;Ljava/lang/CharSequence;)V"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getThumbnail()Landroid/graphics/drawable/Icon;"/>
+		<method name="isActive()Z"/>
+	</class>
+	<class name="android/service/controls/templates/ToggleRangeTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/service/controls/templates/ControlButton;Landroid/service/controls/templates/RangeTemplate;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ZLjava/lang/CharSequence;Landroid/service/controls/templates/RangeTemplate;)V"/>
+		<method name="getActionDescription()Ljava/lang/CharSequence;"/>
+		<method name="getRange()Landroid/service/controls/templates/RangeTemplate;"/>
+		<method name="isChecked()Z"/>
+	</class>
+	<class name="android/service/controls/templates/ToggleTemplate" since="30">
+		<extends name="android/service/controls/templates/ControlTemplate"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/service/controls/templates/ControlButton;)V"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="isChecked()Z"/>
+	</class>
+	<class name="android/service/dreams/DreamService" since="17">
+		<extends name="android/app/Service"/>
+		<implements name="android/view/Window$Callback"/>
+		<method name="&lt;init>()V"/>
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="findViewById(I)Landroid/view/View;"/>
+		<method name="finish()V"/>
+		<method name="getWindow()Landroid/view/Window;"/>
+		<method name="getWindowManager()Landroid/view/WindowManager;"/>
+		<method name="isFullscreen()Z"/>
+		<method name="isInteractive()Z"/>
+		<method name="isScreenBright()Z"/>
+		<method name="onDreamingStarted()V"/>
+		<method name="onDreamingStopped()V"/>
+		<method name="onWakeUp()V" since="21"/>
+		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
+		<method name="setContentView(I)V"/>
+		<method name="setContentView(Landroid/view/View;)V"/>
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="setFullscreen(Z)V"/>
+		<method name="setInteractive(Z)V"/>
+		<method name="setScreenBright(Z)V"/>
+		<method name="wakeUp()V" since="21"/>
+		<field name="DREAM_META_DATA"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/service/media/CameraPrewarmService" since="23">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCooldown(Z)V"/>
+		<method name="onPrewarm()V"/>
+	</class>
+	<class name="android/service/media/MediaBrowserService" since="21">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="getBrowserRootHints()Landroid/os/Bundle;" since="24"/>
+		<method name="getCurrentBrowserInfo()Landroid/media/session/MediaSessionManager$RemoteUserInfo;" since="28"/>
+		<method name="getSessionToken()Landroid/media/session/MediaSession$Token;"/>
+		<method name="notifyChildrenChanged(Ljava/lang/String;)V"/>
+		<method name="notifyChildrenChanged(Ljava/lang/String;Landroid/os/Bundle;)V" since="24"/>
+		<method name="onGetRoot(Ljava/lang/String;ILandroid/os/Bundle;)Landroid/service/media/MediaBrowserService$BrowserRoot;"/>
+		<method name="onLoadChildren(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;)V"/>
+		<method name="onLoadChildren(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;Landroid/os/Bundle;)V" since="24"/>
+		<method name="onLoadItem(Ljava/lang/String;Landroid/service/media/MediaBrowserService$Result;)V" since="23"/>
+		<method name="setSessionToken(Landroid/media/session/MediaSession$Token;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/service/media/MediaBrowserService$BrowserRoot" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getRootId()Ljava/lang/String;"/>
+		<field name="EXTRA_OFFLINE" since="24"/>
+		<field name="EXTRA_RECENT" since="24"/>
+		<field name="EXTRA_SUGGESTED" since="24"/>
+	</class>
+	<class name="android/service/media/MediaBrowserService$Result" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="detach()V"/>
+		<method name="sendResult(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/service/notification/Condition" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/net/Uri;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;III)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="copy()Landroid/service/notification/Condition;"/>
+		<method name="isValidId(Landroid/net/Uri;Ljava/lang/String;)Z"/>
+		<method name="newId(Landroid/content/Context;)Landroid/net/Uri$Builder;"/>
+		<method name="relevanceToString(I)Ljava/lang/String;"/>
+		<method name="stateToString(I)Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_RELEVANT_ALWAYS"/>
+		<field name="FLAG_RELEVANT_NOW"/>
+		<field name="SCHEME"/>
+		<field name="STATE_ERROR"/>
+		<field name="STATE_FALSE"/>
+		<field name="STATE_TRUE"/>
+		<field name="STATE_UNKNOWN"/>
+		<field name="flags"/>
+		<field name="icon"/>
+		<field name="id"/>
+		<field name="line1"/>
+		<field name="line2"/>
+		<field name="state"/>
+		<field name="summary"/>
+	</class>
+	<class name="android/service/notification/ConditionProviderService" since="24" deprecated="29">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="notifyCondition(Landroid/service/notification/Condition;)V" deprecated="29"/>
+		<method name="notifyConditions([Landroid/service/notification/Condition;)V" deprecated="29"/>
+		<method name="onConnected()V" deprecated="29"/>
+		<method name="onRequestConditions(I)V" deprecated="29"/>
+		<method name="onSubscribe(Landroid/net/Uri;)V" deprecated="29"/>
+		<method name="onUnsubscribe(Landroid/net/Uri;)V" deprecated="29"/>
+		<method name="requestRebind(Landroid/content/ComponentName;)V" since="26" deprecated="29"/>
+		<method name="requestUnbind()V" since="26" deprecated="29"/>
+		<field name="EXTRA_RULE_ID" deprecated="29"/>
+		<field name="META_DATA_CONFIGURATION_ACTIVITY" deprecated="29"/>
+		<field name="META_DATA_RULE_INSTANCE_LIMIT" deprecated="29"/>
+		<field name="META_DATA_RULE_TYPE" deprecated="29"/>
+		<field name="SERVICE_INTERFACE" deprecated="29"/>
+	</class>
+	<class name="android/service/notification/NotificationListenerService" since="18">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="cancelAllNotifications()V"/>
+		<method name="cancelNotification(Ljava/lang/String;)V" since="21"/>
+		<method name="cancelNotification(Ljava/lang/String;Ljava/lang/String;I)V" deprecated="21"/>
+		<method name="cancelNotifications([Ljava/lang/String;)V" since="21"/>
+		<method name="clearRequestedListenerHints()V" since="29"/>
+		<method name="getActiveNotifications()[Landroid/service/notification/StatusBarNotification;"/>
+		<method name="getActiveNotifications([Ljava/lang/String;)[Landroid/service/notification/StatusBarNotification;" since="21"/>
+		<method name="getCurrentInterruptionFilter()I" since="21"/>
+		<method name="getCurrentListenerHints()I" since="21"/>
+		<method name="getCurrentRanking()Landroid/service/notification/NotificationListenerService$RankingMap;" since="21"/>
+		<method name="getNotificationChannelGroups(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
+		<method name="getNotificationChannels(Ljava/lang/String;Landroid/os/UserHandle;)Ljava/util/List;" since="26"/>
+		<method name="getSnoozedNotifications()[Landroid/service/notification/StatusBarNotification;" since="26"/>
+		<method name="migrateNotificationFilter(ILjava/util/List;)V" since="31"/>
+		<method name="onInterruptionFilterChanged(I)V" since="21"/>
+		<method name="onListenerConnected()V" since="21"/>
+		<method name="onListenerDisconnected()V" since="24"/>
+		<method name="onListenerHintsChanged(I)V" since="21"/>
+		<method name="onNotificationChannelGroupModified(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannelGroup;I)V" since="26"/>
+		<method name="onNotificationChannelModified(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;I)V" since="26"/>
+		<method name="onNotificationPosted(Landroid/service/notification/StatusBarNotification;)V"/>
+		<method name="onNotificationPosted(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21"/>
+		<method name="onNotificationRankingUpdate(Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21"/>
+		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;)V"/>
+		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;)V" since="21"/>
+		<method name="onNotificationRemoved(Landroid/service/notification/StatusBarNotification;Landroid/service/notification/NotificationListenerService$RankingMap;I)V" since="26"/>
+		<method name="onSilentStatusBarIconsVisibilityChanged(Z)V" since="29"/>
+		<method name="requestInterruptionFilter(I)V" since="21"/>
+		<method name="requestListenerHints(I)V" since="21"/>
+		<method name="requestRebind(Landroid/content/ComponentName;)V" since="24"/>
+		<method name="requestUnbind()V" since="24"/>
+		<method name="setNotificationsShown([Ljava/lang/String;)V" since="23"/>
+		<method name="snoozeNotification(Ljava/lang/String;J)V" since="26"/>
+		<method name="updateNotificationChannel(Ljava/lang/String;Landroid/os/UserHandle;Landroid/app/NotificationChannel;)V" since="26"/>
+		<field name="FLAG_FILTER_TYPE_ALERTING" since="31"/>
+		<field name="FLAG_FILTER_TYPE_CONVERSATIONS" since="31"/>
+		<field name="FLAG_FILTER_TYPE_ONGOING" since="31"/>
+		<field name="FLAG_FILTER_TYPE_SILENT" since="31"/>
+		<field name="HINT_HOST_DISABLE_CALL_EFFECTS" since="24"/>
+		<field name="HINT_HOST_DISABLE_EFFECTS" since="21"/>
+		<field name="HINT_HOST_DISABLE_NOTIFICATION_EFFECTS" since="24"/>
+		<field name="INTERRUPTION_FILTER_ALARMS" since="23"/>
+		<field name="INTERRUPTION_FILTER_ALL" since="21"/>
+		<field name="INTERRUPTION_FILTER_NONE" since="21"/>
+		<field name="INTERRUPTION_FILTER_PRIORITY" since="21"/>
+		<field name="INTERRUPTION_FILTER_UNKNOWN" since="23"/>
+		<field name="META_DATA_DEFAULT_FILTER_TYPES" since="31"/>
+		<field name="META_DATA_DISABLED_FILTER_TYPES" since="31"/>
+		<field name="NOTIFICATION_CHANNEL_OR_GROUP_ADDED" since="26"/>
+		<field name="NOTIFICATION_CHANNEL_OR_GROUP_DELETED" since="26"/>
+		<field name="NOTIFICATION_CHANNEL_OR_GROUP_UPDATED" since="26"/>
+		<field name="REASON_APP_CANCEL" since="26"/>
+		<field name="REASON_APP_CANCEL_ALL" since="26"/>
+		<field name="REASON_CANCEL" since="26"/>
+		<field name="REASON_CANCEL_ALL" since="26"/>
+		<field name="REASON_CHANNEL_BANNED" since="26"/>
+		<field name="REASON_CHANNEL_REMOVED" since="31"/>
+		<field name="REASON_CLEAR_DATA" since="31"/>
+		<field name="REASON_CLICK" since="26"/>
+		<field name="REASON_ERROR" since="26"/>
+		<field name="REASON_GROUP_OPTIMIZATION" since="26"/>
+		<field name="REASON_GROUP_SUMMARY_CANCELED" since="26"/>
+		<field name="REASON_LISTENER_CANCEL" since="26"/>
+		<field name="REASON_LISTENER_CANCEL_ALL" since="26"/>
+		<field name="REASON_PACKAGE_BANNED" since="26"/>
+		<field name="REASON_PACKAGE_CHANGED" since="26"/>
+		<field name="REASON_PACKAGE_SUSPENDED" since="26"/>
+		<field name="REASON_PROFILE_TURNED_OFF" since="26"/>
+		<field name="REASON_SNOOZED" since="26"/>
+		<field name="REASON_TIMEOUT" since="26"/>
+		<field name="REASON_UNAUTOBUNDLED" since="26"/>
+		<field name="REASON_USER_STOPPED" since="26"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SUPPRESSED_EFFECT_SCREEN_OFF" since="24" deprecated="28"/>
+		<field name="SUPPRESSED_EFFECT_SCREEN_ON" since="24" deprecated="28"/>
+	</class>
+	<class name="android/service/notification/NotificationListenerService$Ranking" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="canBubble()Z" since="29"/>
+		<method name="canShowBadge()Z" since="26"/>
+		<method name="getChannel()Landroid/app/NotificationChannel;" since="26"/>
+		<method name="getConversationShortcutInfo()Landroid/content/pm/ShortcutInfo;" since="31"/>
+		<method name="getImportance()I" since="24"/>
+		<method name="getImportanceExplanation()Ljava/lang/CharSequence;" since="24"/>
+		<method name="getKey()Ljava/lang/String;"/>
+		<method name="getLastAudiblyAlertedMillis()J" since="29"/>
+		<method name="getLockscreenVisibilityOverride()I" since="31"/>
+		<method name="getOverrideGroupKey()Ljava/lang/String;" since="24"/>
+		<method name="getRank()I"/>
+		<method name="getSmartActions()Ljava/util/List;" since="29"/>
+		<method name="getSmartReplies()Ljava/util/List;" since="29"/>
+		<method name="getSuppressedVisualEffects()I" since="24"/>
+		<method name="getUserSentiment()I" since="28"/>
+		<method name="isAmbient()Z"/>
+		<method name="isConversation()Z" since="31"/>
+		<method name="isSuspended()Z" since="28"/>
+		<method name="matchesInterruptionFilter()Z"/>
+		<field name="USER_SENTIMENT_NEGATIVE" since="28"/>
+		<field name="USER_SENTIMENT_NEUTRAL" since="28"/>
+		<field name="USER_SENTIMENT_POSITIVE" since="28"/>
+		<field name="VISIBILITY_NO_OVERRIDE" since="31"/>
+	</class>
+	<class name="android/service/notification/NotificationListenerService$RankingMap" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getOrderedKeys()[Ljava/lang/String;"/>
+		<method name="getRanking(Ljava/lang/String;Landroid/service/notification/NotificationListenerService$Ranking;)Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/notification/StatusBarNotification" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;IIILandroid/app/Notification;Landroid/os/UserHandle;J)V" deprecated="26"/>
+		<method name="clone()Landroid/service/notification/StatusBarNotification;"/>
+		<method name="getGroupKey()Ljava/lang/String;" since="21"/>
+		<method name="getId()I"/>
+		<method name="getKey()Ljava/lang/String;" since="20"/>
+		<method name="getNotification()Landroid/app/Notification;"/>
+		<method name="getOpPkg()Ljava/lang/String;" since="29"/>
+		<method name="getOverrideGroupKey()Ljava/lang/String;" since="24"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getPostTime()J"/>
+		<method name="getTag()Ljava/lang/String;"/>
+		<method name="getUid()I" since="29"/>
+		<method name="getUser()Landroid/os/UserHandle;" since="21"/>
+		<method name="getUserId()I" deprecated="21"/>
+		<method name="isAppGroup()Z" since="30"/>
+		<method name="isClearable()Z"/>
+		<method name="isGroup()Z" since="24"/>
+		<method name="isOngoing()Z"/>
+		<method name="setOverrideGroupKey(Ljava/lang/String;)V" since="24"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/notification/ZenPolicy" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getPriorityCallSenders()I"/>
+		<method name="getPriorityCategoryAlarms()I"/>
+		<method name="getPriorityCategoryCalls()I"/>
+		<method name="getPriorityCategoryConversations()I" since="30"/>
+		<method name="getPriorityCategoryEvents()I"/>
+		<method name="getPriorityCategoryMedia()I"/>
+		<method name="getPriorityCategoryMessages()I"/>
+		<method name="getPriorityCategoryReminders()I"/>
+		<method name="getPriorityCategoryRepeatCallers()I"/>
+		<method name="getPriorityCategorySystem()I"/>
+		<method name="getPriorityConversationSenders()I" since="30"/>
+		<method name="getPriorityMessageSenders()I"/>
+		<method name="getVisualEffectAmbient()I"/>
+		<method name="getVisualEffectBadge()I"/>
+		<method name="getVisualEffectFullScreenIntent()I"/>
+		<method name="getVisualEffectLights()I"/>
+		<method name="getVisualEffectNotificationList()I"/>
+		<method name="getVisualEffectPeek()I"/>
+		<method name="getVisualEffectStatusBar()I"/>
+		<field name="CONVERSATION_SENDERS_ANYONE" since="30"/>
+		<field name="CONVERSATION_SENDERS_IMPORTANT" since="30"/>
+		<field name="CONVERSATION_SENDERS_NONE" since="30"/>
+		<field name="CONVERSATION_SENDERS_UNSET" since="30"/>
+		<field name="CREATOR"/>
+		<field name="PEOPLE_TYPE_ANYONE"/>
+		<field name="PEOPLE_TYPE_CONTACTS"/>
+		<field name="PEOPLE_TYPE_NONE"/>
+		<field name="PEOPLE_TYPE_STARRED"/>
+		<field name="PEOPLE_TYPE_UNSET"/>
+		<field name="STATE_ALLOW"/>
+		<field name="STATE_DISALLOW"/>
+		<field name="STATE_UNSET"/>
+	</class>
+	<class name="android/service/notification/ZenPolicy$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="allowAlarms(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowAllSounds()Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowCalls(I)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowConversations(I)Landroid/service/notification/ZenPolicy$Builder;" since="30"/>
+		<method name="allowEvents(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowMedia(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowMessages(I)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowReminders(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowRepeatCallers(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="allowSystem(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="build()Landroid/service/notification/ZenPolicy;"/>
+		<method name="disallowAllSounds()Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="hideAllVisualEffects()Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showAllVisualEffects()Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showBadges(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showFullScreenIntent(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showInAmbientDisplay(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showInNotificationList(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showLights(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showPeeking(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+		<method name="showStatusBarIcons(Z)Landroid/service/notification/ZenPolicy$Builder;"/>
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onFailure(Landroid/service/quickaccesswallet/GetWalletCardsError;)V"/>
+		<method name="onSuccess(Landroid/service/quickaccesswallet/GetWalletCardsResponse;)V"/>
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsError" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;)V"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getMessage()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsRequest" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="getCardHeightPx()I"/>
+		<method name="getCardWidthPx()I"/>
+		<method name="getIconSizePx()I"/>
+		<method name="getMaxCards()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/quickaccesswallet/GetWalletCardsResponse" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/util/List;I)V"/>
+		<method name="getSelectedIndex()I"/>
+		<method name="getWalletCards()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/quickaccesswallet/QuickAccessWalletService" since="30">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onWalletCardSelected(Landroid/service/quickaccesswallet/SelectWalletCardRequest;)V"/>
+		<method name="onWalletCardsRequested(Landroid/service/quickaccesswallet/GetWalletCardsRequest;Landroid/service/quickaccesswallet/GetWalletCardsCallback;)V"/>
+		<method name="onWalletDismissed()V"/>
+		<method name="sendWalletServiceEvent(Landroid/service/quickaccesswallet/WalletServiceEvent;)V"/>
+		<field name="ACTION_VIEW_WALLET"/>
+		<field name="ACTION_VIEW_WALLET_SETTINGS"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/service/quickaccesswallet/SelectWalletCardRequest" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getCardId()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/quickaccesswallet/WalletCard" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCardIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getCardId()Ljava/lang/String;"/>
+		<method name="getCardImage()Landroid/graphics/drawable/Icon;"/>
+		<method name="getCardLabel()Ljava/lang/CharSequence;"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getPendingIntent()Landroid/app/PendingIntent;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/quickaccesswallet/WalletCard$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/graphics/drawable/Icon;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V"/>
+		<method name="build()Landroid/service/quickaccesswallet/WalletCard;"/>
+		<method name="setCardIcon(Landroid/graphics/drawable/Icon;)Landroid/service/quickaccesswallet/WalletCard$Builder;"/>
+		<method name="setCardLabel(Ljava/lang/CharSequence;)Landroid/service/quickaccesswallet/WalletCard$Builder;"/>
+	</class>
+	<class name="android/service/quickaccesswallet/WalletServiceEvent" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getEventType()I"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_NFC_PAYMENT_STARTED"/>
+	</class>
+	<class name="android/service/quicksettings/Tile" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getState()I"/>
+		<method name="getStateDescription()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getSubtitle()Ljava/lang/CharSequence;" since="29"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)V"/>
+		<method name="setLabel(Ljava/lang/CharSequence;)V"/>
+		<method name="setState(I)V"/>
+		<method name="setStateDescription(Ljava/lang/CharSequence;)V" since="30"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V" since="29"/>
+		<method name="updateTile()V"/>
+		<field name="CREATOR"/>
+		<field name="STATE_ACTIVE"/>
+		<field name="STATE_INACTIVE"/>
+		<field name="STATE_UNAVAILABLE"/>
+	</class>
+	<class name="android/service/quicksettings/TileService" since="24">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="getQsTile()Landroid/service/quicksettings/Tile;"/>
+		<method name="isLocked()Z"/>
+		<method name="isSecure()Z"/>
+		<method name="onClick()V"/>
+		<method name="onStartListening()V"/>
+		<method name="onStopListening()V"/>
+		<method name="onTileAdded()V"/>
+		<method name="onTileRemoved()V"/>
+		<method name="requestListeningState(Landroid/content/Context;Landroid/content/ComponentName;)V"/>
+		<method name="showDialog(Landroid/app/Dialog;)V"/>
+		<method name="startActivityAndCollapse(Landroid/content/Intent;)V"/>
+		<method name="unlockAndRun(Ljava/lang/Runnable;)V"/>
+		<field name="ACTION_QS_TILE"/>
+		<field name="ACTION_QS_TILE_PREFERENCES"/>
+		<field name="META_DATA_ACTIVE_TILE"/>
+		<field name="META_DATA_TOGGLEABLE_TILE" since="30"/>
+	</class>
+	<class name="android/service/restrictions/RestrictionsReceiver" since="21">
+		<extends name="android/content/BroadcastReceiver"/>
+		<method name="&lt;init>()V"/>
+		<method name="onRequestPermission(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
+	</class>
+	<class name="android/service/textservice/SpellCheckerService" since="14">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="createSession()Landroid/service/textservice/SpellCheckerService$Session;"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/service/textservice/SpellCheckerService$Session" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getBundle()Landroid/os/Bundle;"/>
+		<method name="getLocale()Ljava/lang/String;"/>
+		<method name="getSupportedAttributes()I" since="31"/>
+		<method name="onCancel()V"/>
+		<method name="onClose()V" since="15"/>
+		<method name="onCreate()V"/>
+		<method name="onGetSentenceSuggestionsMultiple([Landroid/view/textservice/TextInfo;I)[Landroid/view/textservice/SentenceSuggestionsInfo;" since="16"/>
+		<method name="onGetSuggestions(Landroid/view/textservice/TextInfo;I)Landroid/view/textservice/SuggestionsInfo;"/>
+		<method name="onGetSuggestionsMultiple([Landroid/view/textservice/TextInfo;IZ)[Landroid/view/textservice/SuggestionsInfo;"/>
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector" since="21" removed="31">
+		<extends name="java/lang/Object"/>
+		<method name="createEnrollIntent()Landroid/content/Intent;"/>
+		<method name="createReEnrollIntent()Landroid/content/Intent;"/>
+		<method name="createUnEnrollIntent()Landroid/content/Intent;"/>
+		<method name="getParameter(I)I" since="30"/>
+		<method name="getSupportedAudioCapabilities()I" since="30"/>
+		<method name="getSupportedRecognitionModes()I"/>
+		<method name="queryParameter(I)Landroid/service/voice/AlwaysOnHotwordDetector$ModelParamRange;" since="30"/>
+		<method name="setParameter(II)I" since="30"/>
+		<method name="startRecognition(I)Z"/>
+		<method name="stopRecognition()Z"/>
+		<field name="AUDIO_CAPABILITY_ECHO_CANCELLATION" since="30"/>
+		<field name="AUDIO_CAPABILITY_NOISE_SUPPRESSION" since="30"/>
+		<field name="MODEL_PARAM_THRESHOLD_FACTOR" since="30"/>
+		<field name="RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS"/>
+		<field name="RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO"/>
+		<field name="RECOGNITION_FLAG_ENABLE_AUDIO_ECHO_CANCELLATION" since="30"/>
+		<field name="RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION" since="30"/>
+		<field name="RECOGNITION_MODE_USER_IDENTIFICATION"/>
+		<field name="RECOGNITION_MODE_VOICE_TRIGGER"/>
+		<field name="STATE_HARDWARE_UNAVAILABLE"/>
+		<field name="STATE_KEYPHRASE_ENROLLED"/>
+		<field name="STATE_KEYPHRASE_UNENROLLED"/>
+		<field name="STATE_KEYPHRASE_UNSUPPORTED" deprecated="30"/>
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector$Callback" since="21" removed="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAvailabilityChanged(I)V"/>
+		<method name="onDetected(Landroid/service/voice/AlwaysOnHotwordDetector$EventPayload;)V"/>
+		<method name="onError()V"/>
+		<method name="onRecognitionPaused()V"/>
+		<method name="onRecognitionResumed()V"/>
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector$EventPayload" since="21" removed="31">
+		<extends name="java/lang/Object"/>
+		<method name="getCaptureAudioFormat()Landroid/media/AudioFormat;"/>
+		<method name="getTriggerAudio()[B"/>
+	</class>
+	<class name="android/service/voice/AlwaysOnHotwordDetector$ModelParamRange" since="30" removed="31">
+		<extends name="java/lang/Object"/>
+		<method name="getEnd()I"/>
+		<method name="getStart()I"/>
+	</class>
+	<class name="android/service/voice/VisibleActivityInfo" since="33">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getActivityId()Landroid/service/voice/VoiceInteractionSession$ActivityId;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionService" since="21">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="createAlwaysOnHotwordDetector(Ljava/lang/String;Ljava/util/Locale;Landroid/service/voice/AlwaysOnHotwordDetector$Callback;)Landroid/service/voice/AlwaysOnHotwordDetector;" removed="31"/>
+		<method name="getDisabledShowContext()I" since="23"/>
+		<method name="isActiveService(Landroid/content/Context;Landroid/content/ComponentName;)Z"/>
+		<method name="onGetSupportedVoiceActions(Ljava/util/Set;)Ljava/util/Set;" since="29"/>
+		<method name="onLaunchVoiceAssistFromKeyguard()V" since="23"/>
+		<method name="onReady()V"/>
+		<method name="onShutdown()V"/>
+		<method name="setDisabledShowContext(I)V" since="23"/>
+		<method name="setUiHints(Landroid/os/Bundle;)V" since="29"/>
+		<method name="showSession(Landroid/os/Bundle;I)V" since="23"/>
+		<method name="startSession(Landroid/os/Bundle;)V" removed="23"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/ComponentCallbacks2" since="23"/>
+		<implements name="android/view/KeyEvent$Callback"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/os/Handler;)V"/>
+		<method name="closeSystemDialogs()V" since="23"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="23"/>
+		<method name="finish()V"/>
+		<method name="getContext()Landroid/content/Context;" since="23"/>
+		<method name="getDisabledShowContext()I" since="23"/>
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="23"/>
+		<method name="getUserDisabledShowContext()I" since="23"/>
+		<method name="getWindow()Landroid/app/Dialog;" since="23"/>
+		<method name="hide()V" since="23"/>
+		<method name="onAssistStructureFailure(Ljava/lang/Throwable;)V" since="23"/>
+		<method name="onBackPressed()V" since="23"/>
+		<method name="onCancelRequest(Landroid/service/voice/VoiceInteractionSession$Request;)V" since="23"/>
+		<method name="onCloseSystemDialogs()V"/>
+		<method name="onComputeInsets(Landroid/service/voice/VoiceInteractionSession$Insets;)V" since="23"/>
+		<method name="onCreate()V" since="23"/>
+		<method name="onCreate(Landroid/os/Bundle;)V" removed="23"/>
+		<method name="onCreateContentView()Landroid/view/View;" since="23"/>
+		<method name="onDestroy()V"/>
+		<method name="onDirectActionsInvalidated(Landroid/service/voice/VoiceInteractionSession$ActivityId;)V" since="29"/>
+		<method name="onGetSupportedCommands([Ljava/lang/String;)[Z" since="23"/>
+		<method name="onHandleAssist(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;)V" since="23" deprecated="29"/>
+		<method name="onHandleAssist(Landroid/service/voice/VoiceInteractionSession$AssistState;)V" since="29"/>
+		<method name="onHandleAssistSecondary(Landroid/os/Bundle;Landroid/app/assist/AssistStructure;Landroid/app/assist/AssistContent;II)V" since="24" deprecated="29"/>
+		<method name="onHandleScreenshot(Landroid/graphics/Bitmap;)V" since="23"/>
+		<method name="onHide()V" since="23"/>
+		<method name="onLockscreenShown()V" since="23"/>
+		<method name="onPrepareShow(Landroid/os/Bundle;I)V" since="26"/>
+		<method name="onRequestAbortVoice(Landroid/service/voice/VoiceInteractionSession$AbortVoiceRequest;)V" since="23"/>
+		<method name="onRequestCommand(Landroid/service/voice/VoiceInteractionSession$CommandRequest;)V" since="23"/>
+		<method name="onRequestCompleteVoice(Landroid/service/voice/VoiceInteractionSession$CompleteVoiceRequest;)V" since="23"/>
+		<method name="onRequestConfirmation(Landroid/service/voice/VoiceInteractionSession$ConfirmationRequest;)V" since="23"/>
+		<method name="onRequestPickOption(Landroid/service/voice/VoiceInteractionSession$PickOptionRequest;)V" since="23"/>
+		<method name="onShow(Landroid/os/Bundle;I)V" since="23"/>
+		<method name="onTaskFinished(Landroid/content/Intent;I)V" since="23"/>
+		<method name="onTaskStarted(Landroid/content/Intent;I)V" since="23"/>
+		<method name="performDirectAction(Landroid/app/DirectAction;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="registerVisibleActivityCallback(Ljava/util/concurrent/Executor;Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33"/>
+		<method name="requestDirectActions(Landroid/service/voice/VoiceInteractionSession$ActivityId;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="setContentView(Landroid/view/View;)V"/>
+		<method name="setDisabledShowContext(I)V" since="23"/>
+		<method name="setKeepAwake(Z)V" since="23"/>
+		<method name="setTheme(I)V" since="23"/>
+		<method name="setUiEnabled(Z)V" since="26"/>
+		<method name="show(Landroid/os/Bundle;I)V" since="23"/>
+		<method name="startAssistantActivity(Landroid/content/Intent;)V" since="26"/>
+		<method name="startVoiceActivity(Landroid/content/Intent;)V" since="23"/>
+		<method name="unregisterVisibleActivityCallback(Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33"/>
+		<field name="SHOW_SOURCE_ACTIVITY" since="24"/>
+		<field name="SHOW_SOURCE_APPLICATION" since="23"/>
+		<field name="SHOW_SOURCE_ASSIST_GESTURE" since="23"/>
+		<field name="SHOW_SOURCE_AUTOMOTIVE_SYSTEM_UI" since="29"/>
+		<field name="SHOW_SOURCE_NOTIFICATION" since="29"/>
+		<field name="SHOW_SOURCE_PUSH_TO_TALK" since="29"/>
+		<field name="SHOW_WITH_ASSIST" since="23"/>
+		<field name="SHOW_WITH_SCREENSHOT" since="23"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$AbortVoiceRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
+		<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23"/>
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
+		<method name="sendAbortResult(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$ActivityId" since="29">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$AssistState" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getActivityId()Landroid/service/voice/VoiceInteractionSession$ActivityId;"/>
+		<method name="getAssistContent()Landroid/app/assist/AssistContent;"/>
+		<method name="getAssistData()Landroid/os/Bundle;"/>
+		<method name="getAssistStructure()Landroid/app/assist/AssistStructure;"/>
+		<method name="getCount()I"/>
+		<method name="getIndex()I"/>
+		<method name="isFocused()Z"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$CommandRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
+		<method name="getCommand()Ljava/lang/String;"/>
+		<method name="sendIntermediateResult(Landroid/os/Bundle;)V"/>
+		<method name="sendResult(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$CompleteVoiceRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
+		<method name="getMessage()Ljava/lang/CharSequence;" deprecated="23"/>
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
+		<method name="sendCompleteResult(Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$ConfirmationRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
+		<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23"/>
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
+		<method name="sendConfirmationResult(ZLandroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$Insets" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="TOUCHABLE_INSETS_CONTENT"/>
+		<field name="TOUCHABLE_INSETS_FRAME"/>
+		<field name="TOUCHABLE_INSETS_REGION"/>
+		<field name="contentInsets"/>
+		<field name="touchableInsets"/>
+		<field name="touchableRegion"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$PickOptionRequest" since="23">
+		<extends name="android/service/voice/VoiceInteractionSession$Request"/>
+		<method name="getOptions()[Landroid/app/VoiceInteractor$PickOptionRequest$Option;"/>
+		<method name="getPrompt()Ljava/lang/CharSequence;" deprecated="23"/>
+		<method name="getVoicePrompt()Landroid/app/VoiceInteractor$Prompt;"/>
+		<method name="sendIntermediatePickOptionResult([Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
+		<method name="sendPickOptionResult([Landroid/app/VoiceInteractor$PickOptionRequest$Option;Landroid/os/Bundle;)V"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$Request" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="getCallingPackage()Ljava/lang/String;"/>
+		<method name="getCallingUid()I"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="isActive()Z"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSession$VisibleActivityCallback" since="33">
+		<method name="onInvisible(Landroid/service/voice/VoiceInteractionSession$ActivityId;)V"/>
+		<method name="onVisible(Landroid/service/voice/VisibleActivityInfo;)V"/>
+	</class>
+	<class name="android/service/voice/VoiceInteractionSessionService" since="21">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onNewSession(Landroid/os/Bundle;)Landroid/service/voice/VoiceInteractionSession;"/>
+	</class>
+	<class name="android/service/vr/VrListenerService" since="24">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="isVrModePackageEnabled(Landroid/content/Context;Landroid/content/ComponentName;)Z"/>
+		<method name="onCurrentVrActivityChanged(Landroid/content/ComponentName;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/service/wallpaper/WallpaperService" since="7">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCreateEngine()Landroid/service/wallpaper/WallpaperService$Engine;"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/service/wallpaper/WallpaperService$Engine" since="7">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/service/wallpaper/WallpaperService;)V"/>
+		<method name="dump(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V" since="14"/>
+		<method name="getDesiredMinimumHeight()I"/>
+		<method name="getDesiredMinimumWidth()I"/>
+		<method name="getDisplayContext()Landroid/content/Context;" since="29"/>
+		<method name="getSurfaceHolder()Landroid/view/SurfaceHolder;"/>
+		<method name="isPreview()Z"/>
+		<method name="isVisible()Z"/>
+		<method name="notifyColorsChanged()V" since="27"/>
+		<method name="onApplyWindowInsets(Landroid/view/WindowInsets;)V" since="21"/>
+		<method name="onCommand(Ljava/lang/String;IIILandroid/os/Bundle;Z)Landroid/os/Bundle;"/>
+		<method name="onComputeColors()Landroid/app/WallpaperColors;" since="27"/>
+		<method name="onCreate(Landroid/view/SurfaceHolder;)V"/>
+		<method name="onDesiredSizeChanged(II)V"/>
+		<method name="onDestroy()V"/>
+		<method name="onOffsetsChanged(FFFFII)V"/>
+		<method name="onSurfaceChanged(Landroid/view/SurfaceHolder;III)V"/>
+		<method name="onSurfaceCreated(Landroid/view/SurfaceHolder;)V"/>
+		<method name="onSurfaceDestroyed(Landroid/view/SurfaceHolder;)V"/>
+		<method name="onSurfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V" since="9"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)V"/>
+		<method name="onVisibilityChanged(Z)V"/>
+		<method name="onZoomChanged(F)V" since="30"/>
+		<method name="setOffsetNotificationsEnabled(Z)V" since="15"/>
+		<method name="setTouchEventsEnabled(Z)V"/>
+	</class>
+	<class name="android/speech/RecognitionListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="onBeginningOfSpeech()V"/>
+		<method name="onBufferReceived([B)V"/>
+		<method name="onEndOfSpeech()V"/>
+		<method name="onError(I)V"/>
+		<method name="onEvent(ILandroid/os/Bundle;)V"/>
+		<method name="onPartialResults(Landroid/os/Bundle;)V"/>
+		<method name="onReadyForSpeech(Landroid/os/Bundle;)V"/>
+		<method name="onResults(Landroid/os/Bundle;)V"/>
+		<method name="onRmsChanged(F)V"/>
+	</class>
+	<class name="android/speech/RecognitionService" since="8">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCancel(Landroid/speech/RecognitionService$Callback;)V"/>
+		<method name="onStartListening(Landroid/content/Intent;Landroid/speech/RecognitionService$Callback;)V"/>
+		<method name="onStopListening(Landroid/speech/RecognitionService$Callback;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/speech/RecognitionService$Callback" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="beginningOfSpeech()V"/>
+		<method name="bufferReceived([B)V"/>
+		<method name="endOfSpeech()V"/>
+		<method name="error(I)V"/>
+		<method name="getCallingAttributionSource()Landroid/content/AttributionSource;" since="31"/>
+		<method name="getCallingUid()I" since="23"/>
+		<method name="partialResults(Landroid/os/Bundle;)V"/>
+		<method name="readyForSpeech(Landroid/os/Bundle;)V"/>
+		<method name="results(Landroid/os/Bundle;)V"/>
+		<method name="rmsChanged(F)V"/>
+	</class>
+	<class name="android/speech/RecognizerIntent" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="getVoiceDetailsIntent(Landroid/content/Context;)Landroid/content/Intent;" since="8"/>
+		<field name="ACTION_GET_LANGUAGE_DETAILS" since="8"/>
+		<field name="ACTION_RECOGNIZE_SPEECH"/>
+		<field name="ACTION_VOICE_SEARCH_HANDS_FREE" since="16"/>
+		<field name="ACTION_WEB_SEARCH"/>
+		<field name="DETAILS_META_DATA" since="8"/>
+		<field name="EXTRA_AUDIO_INJECT_SOURCE" since="31"/>
+		<field name="EXTRA_CALLING_PACKAGE" since="8"/>
+		<field name="EXTRA_CONFIDENCE_SCORES" since="14"/>
+		<field name="EXTRA_LANGUAGE"/>
+		<field name="EXTRA_LANGUAGE_MODEL"/>
+		<field name="EXTRA_LANGUAGE_PREFERENCE" since="8"/>
+		<field name="EXTRA_MAX_RESULTS"/>
+		<field name="EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE" since="8"/>
+		<field name="EXTRA_ORIGIN" since="14"/>
+		<field name="EXTRA_PARTIAL_RESULTS" since="8"/>
+		<field name="EXTRA_PREFER_OFFLINE" since="23"/>
+		<field name="EXTRA_PROMPT"/>
+		<field name="EXTRA_RESULTS"/>
+		<field name="EXTRA_RESULTS_PENDINGINTENT"/>
+		<field name="EXTRA_RESULTS_PENDINGINTENT_BUNDLE"/>
+		<field name="EXTRA_SECURE" since="16"/>
+		<field name="EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS" since="8"/>
+		<field name="EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS" since="8"/>
+		<field name="EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS" since="8"/>
+		<field name="EXTRA_SUPPORTED_LANGUAGES" since="8"/>
+		<field name="EXTRA_WEB_SEARCH_ONLY" since="11"/>
+		<field name="LANGUAGE_MODEL_FREE_FORM"/>
+		<field name="LANGUAGE_MODEL_WEB_SEARCH"/>
+		<field name="RESULT_AUDIO_ERROR"/>
+		<field name="RESULT_CLIENT_ERROR"/>
+		<field name="RESULT_NETWORK_ERROR"/>
+		<field name="RESULT_NO_MATCH"/>
+		<field name="RESULT_SERVER_ERROR"/>
+	</class>
+	<class name="android/speech/RecognizerResultsIntent" since="10">
+		<extends name="java/lang/Object"/>
+		<field name="ACTION_VOICE_SEARCH_RESULTS"/>
+		<field name="EXTRA_VOICE_SEARCH_RESULT_HTML"/>
+		<field name="EXTRA_VOICE_SEARCH_RESULT_HTML_BASE_URLS"/>
+		<field name="EXTRA_VOICE_SEARCH_RESULT_HTTP_HEADERS"/>
+		<field name="EXTRA_VOICE_SEARCH_RESULT_STRINGS"/>
+		<field name="EXTRA_VOICE_SEARCH_RESULT_URLS"/>
+		<field name="URI_SCHEME_INLINE"/>
+	</class>
+	<class name="android/speech/SpeechRecognizer" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="createOnDeviceSpeechRecognizer(Landroid/content/Context;)Landroid/speech/SpeechRecognizer;" since="31"/>
+		<method name="createSpeechRecognizer(Landroid/content/Context;)Landroid/speech/SpeechRecognizer;"/>
+		<method name="createSpeechRecognizer(Landroid/content/Context;Landroid/content/ComponentName;)Landroid/speech/SpeechRecognizer;"/>
+		<method name="destroy()V"/>
+		<method name="isOnDeviceRecognitionAvailable(Landroid/content/Context;)Z" since="31"/>
+		<method name="isRecognitionAvailable(Landroid/content/Context;)Z"/>
+		<method name="setRecognitionListener(Landroid/speech/RecognitionListener;)V"/>
+		<method name="startListening(Landroid/content/Intent;)V"/>
+		<method name="stopListening()V"/>
+		<field name="CONFIDENCE_SCORES" since="14"/>
+		<field name="ERROR_AUDIO"/>
+		<field name="ERROR_CLIENT"/>
+		<field name="ERROR_INSUFFICIENT_PERMISSIONS"/>
+		<field name="ERROR_LANGUAGE_NOT_SUPPORTED" since="31"/>
+		<field name="ERROR_LANGUAGE_UNAVAILABLE" since="31"/>
+		<field name="ERROR_NETWORK"/>
+		<field name="ERROR_NETWORK_TIMEOUT"/>
+		<field name="ERROR_NO_MATCH"/>
+		<field name="ERROR_RECOGNIZER_BUSY"/>
+		<field name="ERROR_SERVER"/>
+		<field name="ERROR_SERVER_DISCONNECTED" since="31"/>
+		<field name="ERROR_SPEECH_TIMEOUT"/>
+		<field name="ERROR_TOO_MANY_REQUESTS" since="31"/>
+		<field name="RESULTS_RECOGNITION"/>
+	</class>
+	<class name="android/speech/tts/SynthesisCallback" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="audioAvailable([BII)I"/>
+		<method name="done()I"/>
+		<method name="error()V"/>
+		<method name="error(I)V" since="21"/>
+		<method name="getMaxBufferSize()I"/>
+		<method name="hasFinished()Z" since="21"/>
+		<method name="hasStarted()Z" since="21"/>
+		<method name="rangeStart(III)V" since="26"/>
+		<method name="start(III)I"/>
+	</class>
+	<class name="android/speech/tts/SynthesisRequest" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/os/Bundle;)V" since="21"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="getCallerUid()I" since="19"/>
+		<method name="getCharSequenceText()Ljava/lang/CharSequence;" since="21"/>
+		<method name="getCountry()Ljava/lang/String;"/>
+		<method name="getLanguage()Ljava/lang/String;"/>
+		<method name="getParams()Landroid/os/Bundle;"/>
+		<method name="getPitch()I"/>
+		<method name="getSpeechRate()I"/>
+		<method name="getText()Ljava/lang/String;" deprecated="21"/>
+		<method name="getVariant()Ljava/lang/String;"/>
+		<method name="getVoiceName()Ljava/lang/String;" since="21"/>
+	</class>
+	<class name="android/speech/tts/TextToSpeech" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/speech/tts/TextToSpeech$OnInitListener;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/speech/tts/TextToSpeech$OnInitListener;Ljava/lang/String;)V" since="14"/>
+		<method name="addEarcon(Ljava/lang/String;Landroid/net/Uri;)I" since="31"/>
+		<method name="addEarcon(Ljava/lang/String;Ljava/io/File;)I" since="21"/>
+		<method name="addEarcon(Ljava/lang/String;Ljava/lang/String;)I" deprecated="21"/>
+		<method name="addEarcon(Ljava/lang/String;Ljava/lang/String;I)I"/>
+		<method name="addSpeech(Ljava/lang/CharSequence;Landroid/net/Uri;)I" since="31"/>
+		<method name="addSpeech(Ljava/lang/CharSequence;Ljava/io/File;)I" since="21"/>
+		<method name="addSpeech(Ljava/lang/CharSequence;Ljava/lang/String;I)I" since="21"/>
+		<method name="addSpeech(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="addSpeech(Ljava/lang/String;Ljava/lang/String;I)I"/>
+		<method name="areDefaultsEnforced()Z" since="8" deprecated="21"/>
+		<method name="getAvailableLanguages()Ljava/util/Set;" since="21"/>
+		<method name="getDefaultEngine()Ljava/lang/String;" since="8"/>
+		<method name="getDefaultLanguage()Ljava/util/Locale;" since="18" deprecated="21"/>
+		<method name="getDefaultVoice()Landroid/speech/tts/Voice;" since="21"/>
+		<method name="getEngines()Ljava/util/List;" since="14"/>
+		<method name="getFeatures(Ljava/util/Locale;)Ljava/util/Set;" since="15" deprecated="21"/>
+		<method name="getLanguage()Ljava/util/Locale;" deprecated="21"/>
+		<method name="getMaxSpeechInputLength()I" since="18"/>
+		<method name="getVoice()Landroid/speech/tts/Voice;" since="21"/>
+		<method name="getVoices()Ljava/util/Set;" since="21"/>
+		<method name="isLanguageAvailable(Ljava/util/Locale;)I"/>
+		<method name="isSpeaking()Z"/>
+		<method name="playEarcon(Ljava/lang/String;ILandroid/os/Bundle;Ljava/lang/String;)I" since="21"/>
+		<method name="playEarcon(Ljava/lang/String;ILjava/util/HashMap;)I" deprecated="21"/>
+		<method name="playSilence(JILjava/util/HashMap;)I" deprecated="21"/>
+		<method name="playSilentUtterance(JILjava/lang/String;)I" since="21"/>
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)I" since="21"/>
+		<method name="setEngineByPackageName(Ljava/lang/String;)I" since="8" deprecated="15"/>
+		<method name="setLanguage(Ljava/util/Locale;)I"/>
+		<method name="setOnUtteranceCompletedListener(Landroid/speech/tts/TextToSpeech$OnUtteranceCompletedListener;)I" deprecated="15"/>
+		<method name="setOnUtteranceProgressListener(Landroid/speech/tts/UtteranceProgressListener;)I" since="15"/>
+		<method name="setPitch(F)I"/>
+		<method name="setSpeechRate(F)I"/>
+		<method name="setVoice(Landroid/speech/tts/Voice;)I" since="21"/>
+		<method name="shutdown()V"/>
+		<method name="speak(Ljava/lang/CharSequence;ILandroid/os/Bundle;Ljava/lang/String;)I" since="21"/>
+		<method name="speak(Ljava/lang/String;ILjava/util/HashMap;)I" deprecated="21"/>
+		<method name="stop()I"/>
+		<method name="synthesizeToFile(Ljava/lang/CharSequence;Landroid/os/Bundle;Landroid/os/ParcelFileDescriptor;Ljava/lang/String;)I" since="30"/>
+		<method name="synthesizeToFile(Ljava/lang/CharSequence;Landroid/os/Bundle;Ljava/io/File;Ljava/lang/String;)I" since="21"/>
+		<method name="synthesizeToFile(Ljava/lang/String;Ljava/util/HashMap;Ljava/lang/String;)I" deprecated="21"/>
+		<field name="ACTION_TTS_QUEUE_PROCESSING_COMPLETED"/>
+		<field name="ERROR"/>
+		<field name="ERROR_INVALID_REQUEST" since="21"/>
+		<field name="ERROR_NETWORK" since="21"/>
+		<field name="ERROR_NETWORK_TIMEOUT" since="21"/>
+		<field name="ERROR_NOT_INSTALLED_YET" since="21"/>
+		<field name="ERROR_OUTPUT" since="21"/>
+		<field name="ERROR_SERVICE" since="21"/>
+		<field name="ERROR_SYNTHESIS" since="21"/>
+		<field name="LANG_AVAILABLE"/>
+		<field name="LANG_COUNTRY_AVAILABLE"/>
+		<field name="LANG_COUNTRY_VAR_AVAILABLE"/>
+		<field name="LANG_MISSING_DATA"/>
+		<field name="LANG_NOT_SUPPORTED"/>
+		<field name="QUEUE_ADD"/>
+		<field name="QUEUE_FLUSH"/>
+		<field name="STOPPED" since="21"/>
+		<field name="SUCCESS"/>
+	</class>
+	<class name="android/speech/tts/TextToSpeech$Engine" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/speech/tts/TextToSpeech;)V"/>
+		<field name="ACTION_CHECK_TTS_DATA"/>
+		<field name="ACTION_GET_SAMPLE_TEXT" since="18"/>
+		<field name="ACTION_INSTALL_TTS_DATA"/>
+		<field name="ACTION_TTS_DATA_INSTALLED"/>
+		<field name="CHECK_VOICE_DATA_BAD_DATA" deprecated="18"/>
+		<field name="CHECK_VOICE_DATA_FAIL"/>
+		<field name="CHECK_VOICE_DATA_MISSING_DATA" deprecated="18"/>
+		<field name="CHECK_VOICE_DATA_MISSING_VOLUME" deprecated="18"/>
+		<field name="CHECK_VOICE_DATA_PASS"/>
+		<field name="DEFAULT_STREAM"/>
+		<field name="EXTRA_AVAILABLE_VOICES" since="8"/>
+		<field name="EXTRA_CHECK_VOICE_DATA_FOR" since="8" deprecated="18"/>
+		<field name="EXTRA_SAMPLE_TEXT" since="18"/>
+		<field name="EXTRA_TTS_DATA_INSTALLED" deprecated="18"/>
+		<field name="EXTRA_UNAVAILABLE_VOICES" since="8"/>
+		<field name="EXTRA_VOICE_DATA_FILES" deprecated="18"/>
+		<field name="EXTRA_VOICE_DATA_FILES_INFO" deprecated="18"/>
+		<field name="EXTRA_VOICE_DATA_ROOT_DIRECTORY" deprecated="18"/>
+		<field name="INTENT_ACTION_TTS_SERVICE" since="14"/>
+		<field name="KEY_FEATURE_EMBEDDED_SYNTHESIS" since="15" deprecated="21"/>
+		<field name="KEY_FEATURE_NETWORK_RETRIES_COUNT" since="21"/>
+		<field name="KEY_FEATURE_NETWORK_SYNTHESIS" since="15" deprecated="21"/>
+		<field name="KEY_FEATURE_NETWORK_TIMEOUT_MS" since="21"/>
+		<field name="KEY_FEATURE_NOT_INSTALLED" since="21"/>
+		<field name="KEY_PARAM_PAN" since="11"/>
+		<field name="KEY_PARAM_SESSION_ID" since="21"/>
+		<field name="KEY_PARAM_STREAM"/>
+		<field name="KEY_PARAM_UTTERANCE_ID"/>
+		<field name="KEY_PARAM_VOLUME" since="11"/>
+		<field name="SERVICE_META_DATA" since="14"/>
+	</class>
+	<class name="android/speech/tts/TextToSpeech$EngineInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="icon"/>
+		<field name="label"/>
+		<field name="name"/>
+	</class>
+	<class name="android/speech/tts/TextToSpeech$OnInitListener" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="onInit(I)V"/>
+	</class>
+	<class name="android/speech/tts/TextToSpeech$OnUtteranceCompletedListener" since="4" deprecated="18">
+		<extends name="java/lang/Object"/>
+		<method name="onUtteranceCompleted(Ljava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="android/speech/tts/TextToSpeechService" since="14">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGetDefaultVoiceNameFor(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="onGetFeaturesForLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Set;" since="15"/>
+		<method name="onGetLanguage()[Ljava/lang/String;"/>
+		<method name="onGetVoices()Ljava/util/List;" since="21"/>
+		<method name="onIsLanguageAvailable(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="onIsValidVoiceName(Ljava/lang/String;)I" since="21"/>
+		<method name="onLoadLanguage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="onLoadVoice(Ljava/lang/String;)I" since="21"/>
+		<method name="onStop()V"/>
+		<method name="onSynthesizeText(Landroid/speech/tts/SynthesisRequest;Landroid/speech/tts/SynthesisCallback;)V"/>
+	</class>
+	<class name="android/speech/tts/UtteranceProgressListener" since="15">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAudioAvailable(Ljava/lang/String;[B)V" since="24"/>
+		<method name="onBeginSynthesis(Ljava/lang/String;III)V" since="24"/>
+		<method name="onDone(Ljava/lang/String;)V"/>
+		<method name="onError(Ljava/lang/String;)V" deprecated="21"/>
+		<method name="onError(Ljava/lang/String;I)V" since="21"/>
+		<method name="onRangeStart(Ljava/lang/String;III)V" since="26"/>
+		<method name="onStart(Ljava/lang/String;)V"/>
+		<method name="onStop(Ljava/lang/String;Z)V" since="23"/>
+	</class>
+	<class name="android/speech/tts/Voice" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;IIZLjava/util/Set;)V"/>
+		<method name="getFeatures()Ljava/util/Set;"/>
+		<method name="getLatency()I"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getQuality()I"/>
+		<method name="isNetworkConnectionRequired()Z"/>
+		<field name="CREATOR"/>
+		<field name="LATENCY_HIGH"/>
+		<field name="LATENCY_LOW"/>
+		<field name="LATENCY_NORMAL"/>
+		<field name="LATENCY_VERY_HIGH"/>
+		<field name="LATENCY_VERY_LOW"/>
+		<field name="QUALITY_HIGH"/>
+		<field name="QUALITY_LOW"/>
+		<field name="QUALITY_NORMAL"/>
+		<field name="QUALITY_VERY_HIGH"/>
+		<field name="QUALITY_VERY_LOW"/>
+	</class>
+	<class name="android/system/ErrnoException" since="21">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="rethrowAsIOException()Ljava/io/IOException;" since="30"/>
+		<method name="rethrowAsSocketException()Ljava/net/SocketException;" since="30"/>
+		<field name="errno"/>
+	</class>
+	<class name="android/system/Int64Ref" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(J)V"/>
+		<field name="value"/>
+	</class>
+	<class name="android/system/Os" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/io/FileDescriptor;Ljava/net/InetSocketAddress;)Ljava/io/FileDescriptor;"/>
+		<method name="access(Ljava/lang/String;I)Z"/>
+		<method name="bind(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V"/>
+		<method name="bind(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V" since="29"/>
+		<method name="chmod(Ljava/lang/String;I)V"/>
+		<method name="chown(Ljava/lang/String;II)V"/>
+		<method name="close(Ljava/io/FileDescriptor;)V"/>
+		<method name="connect(Ljava/io/FileDescriptor;Ljava/net/InetAddress;I)V"/>
+		<method name="connect(Ljava/io/FileDescriptor;Ljava/net/SocketAddress;)V" since="29"/>
+		<method name="dup(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;"/>
+		<method name="dup2(Ljava/io/FileDescriptor;I)Ljava/io/FileDescriptor;"/>
+		<method name="environ()[Ljava/lang/String;"/>
+		<method name="execv(Ljava/lang/String;[Ljava/lang/String;)V"/>
+		<method name="execve(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V"/>
+		<method name="fchmod(Ljava/io/FileDescriptor;I)V"/>
+		<method name="fchown(Ljava/io/FileDescriptor;II)V"/>
+		<method name="fcntlInt(Ljava/io/FileDescriptor;II)I" since="30"/>
+		<method name="fdatasync(Ljava/io/FileDescriptor;)V"/>
+		<method name="fstat(Ljava/io/FileDescriptor;)Landroid/system/StructStat;"/>
+		<method name="fstatvfs(Ljava/io/FileDescriptor;)Landroid/system/StructStatVfs;"/>
+		<method name="fsync(Ljava/io/FileDescriptor;)V"/>
+		<method name="ftruncate(Ljava/io/FileDescriptor;J)V"/>
+		<method name="gai_strerror(I)Ljava/lang/String;"/>
+		<method name="getegid()I"/>
+		<method name="getenv(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="geteuid()I"/>
+		<method name="getgid()I"/>
+		<method name="getpeername(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;"/>
+		<method name="getpid()I"/>
+		<method name="getppid()I"/>
+		<method name="getsockname(Ljava/io/FileDescriptor;)Ljava/net/SocketAddress;"/>
+		<method name="getsockoptTimeval(Ljava/io/FileDescriptor;II)Landroid/system/StructTimeval;" since="29"/>
+		<method name="gettid()I"/>
+		<method name="getuid()I"/>
+		<method name="getxattr(Ljava/lang/String;Ljava/lang/String;)[B" since="26"/>
+		<method name="if_indextoname(I)Ljava/lang/String;"/>
+		<method name="if_nametoindex(Ljava/lang/String;)I" since="26"/>
+		<method name="inet_pton(ILjava/lang/String;)Ljava/net/InetAddress;"/>
+		<method name="isatty(Ljava/io/FileDescriptor;)Z"/>
+		<method name="kill(II)V"/>
+		<method name="lchown(Ljava/lang/String;II)V"/>
+		<method name="link(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="listen(Ljava/io/FileDescriptor;I)V"/>
+		<method name="listxattr(Ljava/lang/String;)[Ljava/lang/String;" since="26"/>
+		<method name="lseek(Ljava/io/FileDescriptor;JI)J"/>
+		<method name="lstat(Ljava/lang/String;)Landroid/system/StructStat;"/>
+		<method name="memfd_create(Ljava/lang/String;I)Ljava/io/FileDescriptor;" since="30"/>
+		<method name="mincore(JJ[B)V"/>
+		<method name="mkdir(Ljava/lang/String;I)V"/>
+		<method name="mkfifo(Ljava/lang/String;I)V"/>
+		<method name="mlock(JJ)V"/>
+		<method name="mmap(JJIILjava/io/FileDescriptor;J)J"/>
+		<method name="msync(JJI)V"/>
+		<method name="munlock(JJ)V"/>
+		<method name="munmap(JJ)V"/>
+		<method name="open(Ljava/lang/String;II)Ljava/io/FileDescriptor;"/>
+		<method name="pipe()[Ljava/io/FileDescriptor;"/>
+		<method name="poll([Landroid/system/StructPollfd;I)I"/>
+		<method name="posix_fallocate(Ljava/io/FileDescriptor;JJ)V"/>
+		<method name="prctl(IJJJJ)I"/>
+		<method name="pread(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I"/>
+		<method name="pread(Ljava/io/FileDescriptor;[BIIJ)I"/>
+		<method name="pwrite(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;J)I"/>
+		<method name="pwrite(Ljava/io/FileDescriptor;[BIIJ)I"/>
+		<method name="read(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I"/>
+		<method name="read(Ljava/io/FileDescriptor;[BII)I"/>
+		<method name="readlink(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="readv(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I"/>
+		<method name="recvfrom(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetSocketAddress;)I"/>
+		<method name="recvfrom(Ljava/io/FileDescriptor;[BIIILjava/net/InetSocketAddress;)I"/>
+		<method name="recvmsg(Ljava/io/FileDescriptor;Landroid/system/StructMsghdr;I)I" since="31"/>
+		<method name="remove(Ljava/lang/String;)V"/>
+		<method name="removexattr(Ljava/lang/String;Ljava/lang/String;)V" since="26"/>
+		<method name="rename(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="sendfile(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/system/Int64Ref;J)J" since="28"/>
+		<method name="sendfile(Ljava/io/FileDescriptor;Ljava/io/FileDescriptor;Landroid/util/MutableLong;J)J" removed="28"/>
+		<method name="sendmsg(Ljava/io/FileDescriptor;Landroid/system/StructMsghdr;I)I" since="31"/>
+		<method name="sendto(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;ILjava/net/InetAddress;I)I"/>
+		<method name="sendto(Ljava/io/FileDescriptor;[BIIILjava/net/InetAddress;I)I"/>
+		<method name="sendto(Ljava/io/FileDescriptor;[BIIILjava/net/SocketAddress;)I" since="29"/>
+		<method name="setegid(I)V" deprecated="29"/>
+		<method name="setenv(Ljava/lang/String;Ljava/lang/String;Z)V"/>
+		<method name="seteuid(I)V" deprecated="29"/>
+		<method name="setgid(I)V" deprecated="29"/>
+		<method name="setsid()I"/>
+		<method name="setsockoptInt(Ljava/io/FileDescriptor;III)V" since="26"/>
+		<method name="setsockoptTimeval(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V" since="29"/>
+		<method name="setuid(I)V" deprecated="29"/>
+		<method name="setxattr(Ljava/lang/String;Ljava/lang/String;[BI)V" since="26"/>
+		<method name="shutdown(Ljava/io/FileDescriptor;I)V"/>
+		<method name="socket(III)Ljava/io/FileDescriptor;"/>
+		<method name="socketpair(IIILjava/io/FileDescriptor;Ljava/io/FileDescriptor;)V"/>
+		<method name="stat(Ljava/lang/String;)Landroid/system/StructStat;"/>
+		<method name="statvfs(Ljava/lang/String;)Landroid/system/StructStatVfs;"/>
+		<method name="strerror(I)Ljava/lang/String;"/>
+		<method name="strsignal(I)Ljava/lang/String;"/>
+		<method name="symlink(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="sysconf(I)J"/>
+		<method name="tcdrain(Ljava/io/FileDescriptor;)V"/>
+		<method name="tcsendbreak(Ljava/io/FileDescriptor;I)V"/>
+		<method name="umask(I)I"/>
+		<method name="uname()Landroid/system/StructUtsname;"/>
+		<method name="unsetenv(Ljava/lang/String;)V"/>
+		<method name="waitpid(ILandroid/util/MutableInt;I)I" removed="28"/>
+		<method name="write(Ljava/io/FileDescriptor;Ljava/nio/ByteBuffer;)I"/>
+		<method name="write(Ljava/io/FileDescriptor;[BII)I"/>
+		<method name="writev(Ljava/io/FileDescriptor;[Ljava/lang/Object;[I[I)I"/>
+	</class>
+	<class name="android/system/OsConstants" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="S_ISBLK(I)Z"/>
+		<method name="S_ISCHR(I)Z"/>
+		<method name="S_ISDIR(I)Z"/>
+		<method name="S_ISFIFO(I)Z"/>
+		<method name="S_ISLNK(I)Z"/>
+		<method name="S_ISREG(I)Z"/>
+		<method name="S_ISSOCK(I)Z"/>
+		<method name="WCOREDUMP(I)Z"/>
+		<method name="WEXITSTATUS(I)I"/>
+		<method name="WIFEXITED(I)Z"/>
+		<method name="WIFSIGNALED(I)Z"/>
+		<method name="WIFSTOPPED(I)Z"/>
+		<method name="WSTOPSIG(I)I"/>
+		<method name="WTERMSIG(I)I"/>
+		<method name="errnoName(I)Ljava/lang/String;"/>
+		<method name="gaiName(I)Ljava/lang/String;"/>
+		<field name="AF_INET"/>
+		<field name="AF_INET6"/>
+		<field name="AF_NETLINK" since="29"/>
+		<field name="AF_PACKET" since="29"/>
+		<field name="AF_UNIX"/>
+		<field name="AF_UNSPEC"/>
+		<field name="AF_VSOCK" since="31"/>
+		<field name="AI_ADDRCONFIG"/>
+		<field name="AI_ALL"/>
+		<field name="AI_CANONNAME"/>
+		<field name="AI_NUMERICHOST"/>
+		<field name="AI_NUMERICSERV"/>
+		<field name="AI_PASSIVE"/>
+		<field name="AI_V4MAPPED"/>
+		<field name="ARPHRD_ETHER" since="29"/>
+		<field name="CAP_AUDIT_CONTROL"/>
+		<field name="CAP_AUDIT_WRITE"/>
+		<field name="CAP_BLOCK_SUSPEND"/>
+		<field name="CAP_CHOWN"/>
+		<field name="CAP_DAC_OVERRIDE"/>
+		<field name="CAP_DAC_READ_SEARCH"/>
+		<field name="CAP_FOWNER"/>
+		<field name="CAP_FSETID"/>
+		<field name="CAP_IPC_LOCK"/>
+		<field name="CAP_IPC_OWNER"/>
+		<field name="CAP_KILL"/>
+		<field name="CAP_LAST_CAP"/>
+		<field name="CAP_LEASE"/>
+		<field name="CAP_LINUX_IMMUTABLE"/>
+		<field name="CAP_MAC_ADMIN"/>
+		<field name="CAP_MAC_OVERRIDE"/>
+		<field name="CAP_MKNOD"/>
+		<field name="CAP_NET_ADMIN"/>
+		<field name="CAP_NET_BIND_SERVICE"/>
+		<field name="CAP_NET_BROADCAST"/>
+		<field name="CAP_NET_RAW"/>
+		<field name="CAP_SETFCAP"/>
+		<field name="CAP_SETGID"/>
+		<field name="CAP_SETPCAP"/>
+		<field name="CAP_SETUID"/>
+		<field name="CAP_SYSLOG"/>
+		<field name="CAP_SYS_ADMIN"/>
+		<field name="CAP_SYS_BOOT"/>
+		<field name="CAP_SYS_CHROOT"/>
+		<field name="CAP_SYS_MODULE"/>
+		<field name="CAP_SYS_NICE"/>
+		<field name="CAP_SYS_PACCT"/>
+		<field name="CAP_SYS_PTRACE"/>
+		<field name="CAP_SYS_RAWIO"/>
+		<field name="CAP_SYS_RESOURCE"/>
+		<field name="CAP_SYS_TIME"/>
+		<field name="CAP_SYS_TTY_CONFIG"/>
+		<field name="CAP_WAKE_ALARM"/>
+		<field name="E2BIG"/>
+		<field name="EACCES"/>
+		<field name="EADDRINUSE"/>
+		<field name="EADDRNOTAVAIL"/>
+		<field name="EAFNOSUPPORT"/>
+		<field name="EAGAIN"/>
+		<field name="EAI_AGAIN"/>
+		<field name="EAI_BADFLAGS"/>
+		<field name="EAI_FAIL"/>
+		<field name="EAI_FAMILY"/>
+		<field name="EAI_MEMORY"/>
+		<field name="EAI_NODATA"/>
+		<field name="EAI_NONAME"/>
+		<field name="EAI_OVERFLOW"/>
+		<field name="EAI_SERVICE"/>
+		<field name="EAI_SOCKTYPE"/>
+		<field name="EAI_SYSTEM"/>
+		<field name="EALREADY"/>
+		<field name="EBADF"/>
+		<field name="EBADMSG"/>
+		<field name="EBUSY"/>
+		<field name="ECANCELED"/>
+		<field name="ECHILD"/>
+		<field name="ECONNABORTED"/>
+		<field name="ECONNREFUSED"/>
+		<field name="ECONNRESET"/>
+		<field name="EDEADLK"/>
+		<field name="EDESTADDRREQ"/>
+		<field name="EDOM"/>
+		<field name="EDQUOT"/>
+		<field name="EEXIST"/>
+		<field name="EFAULT"/>
+		<field name="EFBIG"/>
+		<field name="EHOSTUNREACH"/>
+		<field name="EIDRM"/>
+		<field name="EILSEQ"/>
+		<field name="EINPROGRESS"/>
+		<field name="EINTR"/>
+		<field name="EINVAL"/>
+		<field name="EIO"/>
+		<field name="EISCONN"/>
+		<field name="EISDIR"/>
+		<field name="ELOOP"/>
+		<field name="EMFILE"/>
+		<field name="EMLINK"/>
+		<field name="EMSGSIZE"/>
+		<field name="EMULTIHOP"/>
+		<field name="ENAMETOOLONG"/>
+		<field name="ENETDOWN"/>
+		<field name="ENETRESET"/>
+		<field name="ENETUNREACH"/>
+		<field name="ENFILE"/>
+		<field name="ENOBUFS"/>
+		<field name="ENODATA"/>
+		<field name="ENODEV"/>
+		<field name="ENOENT"/>
+		<field name="ENOEXEC"/>
+		<field name="ENOLCK"/>
+		<field name="ENOLINK"/>
+		<field name="ENOMEM"/>
+		<field name="ENOMSG"/>
+		<field name="ENONET" since="31"/>
+		<field name="ENOPROTOOPT"/>
+		<field name="ENOSPC"/>
+		<field name="ENOSR"/>
+		<field name="ENOSTR"/>
+		<field name="ENOSYS"/>
+		<field name="ENOTCONN"/>
+		<field name="ENOTDIR"/>
+		<field name="ENOTEMPTY"/>
+		<field name="ENOTSOCK"/>
+		<field name="ENOTSUP"/>
+		<field name="ENOTTY"/>
+		<field name="ENXIO"/>
+		<field name="EOPNOTSUPP"/>
+		<field name="EOVERFLOW"/>
+		<field name="EPERM"/>
+		<field name="EPIPE"/>
+		<field name="EPROTO"/>
+		<field name="EPROTONOSUPPORT"/>
+		<field name="EPROTOTYPE"/>
+		<field name="ERANGE"/>
+		<field name="EROFS"/>
+		<field name="ESPIPE"/>
+		<field name="ESRCH"/>
+		<field name="ESTALE"/>
+		<field name="ETH_P_ALL" since="29"/>
+		<field name="ETH_P_ARP" since="29"/>
+		<field name="ETH_P_IP" since="29"/>
+		<field name="ETH_P_IPV6" since="29"/>
+		<field name="ETIME"/>
+		<field name="ETIMEDOUT"/>
+		<field name="ETXTBSY"/>
+		<field name="EXDEV"/>
+		<field name="EXIT_FAILURE"/>
+		<field name="EXIT_SUCCESS"/>
+		<field name="FD_CLOEXEC"/>
+		<field name="FIONREAD"/>
+		<field name="F_DUPFD"/>
+		<field name="F_DUPFD_CLOEXEC" since="27"/>
+		<field name="F_GETFD"/>
+		<field name="F_GETFL"/>
+		<field name="F_GETLK"/>
+		<field name="F_GETLK64"/>
+		<field name="F_GETOWN"/>
+		<field name="F_OK"/>
+		<field name="F_RDLCK"/>
+		<field name="F_SETFD"/>
+		<field name="F_SETFL"/>
+		<field name="F_SETLK"/>
+		<field name="F_SETLK64"/>
+		<field name="F_SETLKW"/>
+		<field name="F_SETLKW64"/>
+		<field name="F_SETOWN"/>
+		<field name="F_UNLCK"/>
+		<field name="F_WRLCK"/>
+		<field name="ICMP6_ECHO_REPLY" since="29"/>
+		<field name="ICMP6_ECHO_REQUEST" since="29"/>
+		<field name="ICMP_ECHO" since="29"/>
+		<field name="ICMP_ECHOREPLY" since="29"/>
+		<field name="IFA_F_DADFAILED"/>
+		<field name="IFA_F_DEPRECATED"/>
+		<field name="IFA_F_HOMEADDRESS"/>
+		<field name="IFA_F_NODAD"/>
+		<field name="IFA_F_OPTIMISTIC"/>
+		<field name="IFA_F_PERMANENT"/>
+		<field name="IFA_F_SECONDARY"/>
+		<field name="IFA_F_TEMPORARY"/>
+		<field name="IFA_F_TENTATIVE"/>
+		<field name="IFF_ALLMULTI"/>
+		<field name="IFF_AUTOMEDIA"/>
+		<field name="IFF_BROADCAST"/>
+		<field name="IFF_DEBUG"/>
+		<field name="IFF_DYNAMIC"/>
+		<field name="IFF_LOOPBACK"/>
+		<field name="IFF_MASTER"/>
+		<field name="IFF_MULTICAST"/>
+		<field name="IFF_NOARP"/>
+		<field name="IFF_NOTRAILERS"/>
+		<field name="IFF_POINTOPOINT"/>
+		<field name="IFF_PORTSEL"/>
+		<field name="IFF_PROMISC"/>
+		<field name="IFF_RUNNING"/>
+		<field name="IFF_SLAVE"/>
+		<field name="IFF_UP"/>
+		<field name="IPPROTO_ICMP"/>
+		<field name="IPPROTO_ICMPV6"/>
+		<field name="IPPROTO_IP"/>
+		<field name="IPPROTO_IPV6"/>
+		<field name="IPPROTO_RAW"/>
+		<field name="IPPROTO_TCP"/>
+		<field name="IPPROTO_UDP"/>
+		<field name="IPV6_CHECKSUM"/>
+		<field name="IPV6_MULTICAST_HOPS"/>
+		<field name="IPV6_MULTICAST_IF"/>
+		<field name="IPV6_MULTICAST_LOOP"/>
+		<field name="IPV6_RECVDSTOPTS"/>
+		<field name="IPV6_RECVHOPLIMIT"/>
+		<field name="IPV6_RECVHOPOPTS"/>
+		<field name="IPV6_RECVPKTINFO"/>
+		<field name="IPV6_RECVRTHDR"/>
+		<field name="IPV6_RECVTCLASS"/>
+		<field name="IPV6_TCLASS"/>
+		<field name="IPV6_UNICAST_HOPS"/>
+		<field name="IPV6_V6ONLY"/>
+		<field name="IP_MULTICAST_IF"/>
+		<field name="IP_MULTICAST_LOOP"/>
+		<field name="IP_MULTICAST_TTL"/>
+		<field name="IP_TOS"/>
+		<field name="IP_TTL"/>
+		<field name="MAP_ANONYMOUS" since="30"/>
+		<field name="MAP_FIXED"/>
+		<field name="MAP_PRIVATE"/>
+		<field name="MAP_SHARED"/>
+		<field name="MCAST_BLOCK_SOURCE"/>
+		<field name="MCAST_JOIN_GROUP"/>
+		<field name="MCAST_JOIN_SOURCE_GROUP"/>
+		<field name="MCAST_LEAVE_GROUP"/>
+		<field name="MCAST_LEAVE_SOURCE_GROUP"/>
+		<field name="MCAST_UNBLOCK_SOURCE"/>
+		<field name="MCL_CURRENT"/>
+		<field name="MCL_FUTURE"/>
+		<field name="MFD_CLOEXEC" since="30"/>
+		<field name="MSG_CTRUNC"/>
+		<field name="MSG_DONTROUTE"/>
+		<field name="MSG_EOR"/>
+		<field name="MSG_OOB"/>
+		<field name="MSG_PEEK"/>
+		<field name="MSG_TRUNC"/>
+		<field name="MSG_WAITALL"/>
+		<field name="MS_ASYNC"/>
+		<field name="MS_INVALIDATE"/>
+		<field name="MS_SYNC"/>
+		<field name="NETLINK_INET_DIAG" since="29"/>
+		<field name="NETLINK_NETFILTER" since="30"/>
+		<field name="NETLINK_ROUTE" since="29"/>
+		<field name="NI_DGRAM"/>
+		<field name="NI_NAMEREQD"/>
+		<field name="NI_NOFQDN"/>
+		<field name="NI_NUMERICHOST"/>
+		<field name="NI_NUMERICSERV"/>
+		<field name="O_ACCMODE"/>
+		<field name="O_APPEND"/>
+		<field name="O_CLOEXEC" since="27"/>
+		<field name="O_CREAT"/>
+		<field name="O_DSYNC" since="27"/>
+		<field name="O_EXCL"/>
+		<field name="O_NOCTTY"/>
+		<field name="O_NOFOLLOW"/>
+		<field name="O_NONBLOCK"/>
+		<field name="O_RDONLY"/>
+		<field name="O_RDWR"/>
+		<field name="O_SYNC"/>
+		<field name="O_TRUNC"/>
+		<field name="O_WRONLY"/>
+		<field name="POLLERR"/>
+		<field name="POLLHUP"/>
+		<field name="POLLIN"/>
+		<field name="POLLNVAL"/>
+		<field name="POLLOUT"/>
+		<field name="POLLPRI"/>
+		<field name="POLLRDBAND"/>
+		<field name="POLLRDNORM"/>
+		<field name="POLLWRBAND"/>
+		<field name="POLLWRNORM"/>
+		<field name="PROT_EXEC"/>
+		<field name="PROT_NONE"/>
+		<field name="PROT_READ"/>
+		<field name="PROT_WRITE"/>
+		<field name="PR_GET_DUMPABLE"/>
+		<field name="PR_SET_DUMPABLE"/>
+		<field name="PR_SET_NO_NEW_PRIVS"/>
+		<field name="RTMGRP_NEIGH" since="29"/>
+		<field name="RT_SCOPE_HOST"/>
+		<field name="RT_SCOPE_LINK"/>
+		<field name="RT_SCOPE_NOWHERE"/>
+		<field name="RT_SCOPE_SITE"/>
+		<field name="RT_SCOPE_UNIVERSE"/>
+		<field name="R_OK"/>
+		<field name="SEEK_CUR"/>
+		<field name="SEEK_END"/>
+		<field name="SEEK_SET"/>
+		<field name="SHUT_RD"/>
+		<field name="SHUT_RDWR"/>
+		<field name="SHUT_WR"/>
+		<field name="SIGABRT"/>
+		<field name="SIGALRM"/>
+		<field name="SIGBUS"/>
+		<field name="SIGCHLD"/>
+		<field name="SIGCONT"/>
+		<field name="SIGFPE"/>
+		<field name="SIGHUP"/>
+		<field name="SIGILL"/>
+		<field name="SIGINT"/>
+		<field name="SIGIO"/>
+		<field name="SIGKILL"/>
+		<field name="SIGPIPE"/>
+		<field name="SIGPROF"/>
+		<field name="SIGPWR"/>
+		<field name="SIGQUIT"/>
+		<field name="SIGRTMAX"/>
+		<field name="SIGRTMIN"/>
+		<field name="SIGSEGV"/>
+		<field name="SIGSTKFLT"/>
+		<field name="SIGSTOP"/>
+		<field name="SIGSYS"/>
+		<field name="SIGTERM"/>
+		<field name="SIGTRAP"/>
+		<field name="SIGTSTP"/>
+		<field name="SIGTTIN"/>
+		<field name="SIGTTOU"/>
+		<field name="SIGURG"/>
+		<field name="SIGUSR1"/>
+		<field name="SIGUSR2"/>
+		<field name="SIGVTALRM"/>
+		<field name="SIGWINCH"/>
+		<field name="SIGXCPU"/>
+		<field name="SIGXFSZ"/>
+		<field name="SIOCGIFADDR"/>
+		<field name="SIOCGIFBRDADDR"/>
+		<field name="SIOCGIFDSTADDR"/>
+		<field name="SIOCGIFNETMASK"/>
+		<field name="SOCK_CLOEXEC" since="29"/>
+		<field name="SOCK_DGRAM"/>
+		<field name="SOCK_NONBLOCK" since="29"/>
+		<field name="SOCK_RAW"/>
+		<field name="SOCK_SEQPACKET"/>
+		<field name="SOCK_STREAM"/>
+		<field name="SOL_SOCKET"/>
+		<field name="SOL_UDP" since="31"/>
+		<field name="SO_BINDTODEVICE"/>
+		<field name="SO_BROADCAST"/>
+		<field name="SO_DEBUG"/>
+		<field name="SO_DONTROUTE"/>
+		<field name="SO_ERROR"/>
+		<field name="SO_KEEPALIVE"/>
+		<field name="SO_LINGER"/>
+		<field name="SO_OOBINLINE"/>
+		<field name="SO_PASSCRED"/>
+		<field name="SO_PEERCRED"/>
+		<field name="SO_RCVBUF"/>
+		<field name="SO_RCVLOWAT"/>
+		<field name="SO_RCVTIMEO"/>
+		<field name="SO_REUSEADDR"/>
+		<field name="SO_SNDBUF"/>
+		<field name="SO_SNDLOWAT"/>
+		<field name="SO_SNDTIMEO"/>
+		<field name="SO_TYPE"/>
+		<field name="STDERR_FILENO"/>
+		<field name="STDIN_FILENO"/>
+		<field name="STDOUT_FILENO"/>
+		<field name="ST_MANDLOCK" since="23"/>
+		<field name="ST_NOATIME" since="23"/>
+		<field name="ST_NODEV" since="23"/>
+		<field name="ST_NODIRATIME" since="23"/>
+		<field name="ST_NOEXEC" since="23"/>
+		<field name="ST_NOSUID" since="23"/>
+		<field name="ST_RDONLY" since="23"/>
+		<field name="ST_RELATIME" since="23"/>
+		<field name="ST_SYNCHRONOUS" since="23"/>
+		<field name="S_IFBLK"/>
+		<field name="S_IFCHR"/>
+		<field name="S_IFDIR"/>
+		<field name="S_IFIFO"/>
+		<field name="S_IFLNK"/>
+		<field name="S_IFMT"/>
+		<field name="S_IFREG"/>
+		<field name="S_IFSOCK"/>
+		<field name="S_IRGRP"/>
+		<field name="S_IROTH"/>
+		<field name="S_IRUSR"/>
+		<field name="S_IRWXG"/>
+		<field name="S_IRWXO"/>
+		<field name="S_IRWXU"/>
+		<field name="S_ISGID"/>
+		<field name="S_ISUID"/>
+		<field name="S_ISVTX"/>
+		<field name="S_IWGRP"/>
+		<field name="S_IWOTH"/>
+		<field name="S_IWUSR"/>
+		<field name="S_IXGRP"/>
+		<field name="S_IXOTH"/>
+		<field name="S_IXUSR"/>
+		<field name="TCP_NODELAY"/>
+		<field name="TCP_USER_TIMEOUT" since="26"/>
+		<field name="UDP_GRO" since="31"/>
+		<field name="UDP_SEGMENT" since="31"/>
+		<field name="VMADDR_CID_ANY" since="31"/>
+		<field name="VMADDR_CID_HOST" since="31"/>
+		<field name="VMADDR_CID_LOCAL" since="31"/>
+		<field name="VMADDR_PORT_ANY" since="31"/>
+		<field name="WCONTINUED"/>
+		<field name="WEXITED"/>
+		<field name="WNOHANG"/>
+		<field name="WNOWAIT"/>
+		<field name="WSTOPPED"/>
+		<field name="WUNTRACED"/>
+		<field name="W_OK"/>
+		<field name="X_OK"/>
+		<field name="_SC_2_CHAR_TERM"/>
+		<field name="_SC_2_C_BIND"/>
+		<field name="_SC_2_C_DEV"/>
+		<field name="_SC_2_C_VERSION"/>
+		<field name="_SC_2_FORT_DEV"/>
+		<field name="_SC_2_FORT_RUN"/>
+		<field name="_SC_2_LOCALEDEF"/>
+		<field name="_SC_2_SW_DEV"/>
+		<field name="_SC_2_UPE"/>
+		<field name="_SC_2_VERSION"/>
+		<field name="_SC_AIO_LISTIO_MAX"/>
+		<field name="_SC_AIO_MAX"/>
+		<field name="_SC_AIO_PRIO_DELTA_MAX"/>
+		<field name="_SC_ARG_MAX"/>
+		<field name="_SC_ASYNCHRONOUS_IO"/>
+		<field name="_SC_ATEXIT_MAX"/>
+		<field name="_SC_AVPHYS_PAGES"/>
+		<field name="_SC_BC_BASE_MAX"/>
+		<field name="_SC_BC_DIM_MAX"/>
+		<field name="_SC_BC_SCALE_MAX"/>
+		<field name="_SC_BC_STRING_MAX"/>
+		<field name="_SC_CHILD_MAX"/>
+		<field name="_SC_CLK_TCK"/>
+		<field name="_SC_COLL_WEIGHTS_MAX"/>
+		<field name="_SC_DELAYTIMER_MAX"/>
+		<field name="_SC_EXPR_NEST_MAX"/>
+		<field name="_SC_FSYNC"/>
+		<field name="_SC_GETGR_R_SIZE_MAX"/>
+		<field name="_SC_GETPW_R_SIZE_MAX"/>
+		<field name="_SC_IOV_MAX"/>
+		<field name="_SC_JOB_CONTROL"/>
+		<field name="_SC_LINE_MAX"/>
+		<field name="_SC_LOGIN_NAME_MAX"/>
+		<field name="_SC_MAPPED_FILES"/>
+		<field name="_SC_MEMLOCK"/>
+		<field name="_SC_MEMLOCK_RANGE"/>
+		<field name="_SC_MEMORY_PROTECTION"/>
+		<field name="_SC_MESSAGE_PASSING"/>
+		<field name="_SC_MQ_OPEN_MAX"/>
+		<field name="_SC_MQ_PRIO_MAX"/>
+		<field name="_SC_NGROUPS_MAX"/>
+		<field name="_SC_NPROCESSORS_CONF"/>
+		<field name="_SC_NPROCESSORS_ONLN"/>
+		<field name="_SC_OPEN_MAX"/>
+		<field name="_SC_PAGESIZE"/>
+		<field name="_SC_PAGE_SIZE"/>
+		<field name="_SC_PASS_MAX"/>
+		<field name="_SC_PHYS_PAGES"/>
+		<field name="_SC_PRIORITIZED_IO"/>
+		<field name="_SC_PRIORITY_SCHEDULING"/>
+		<field name="_SC_REALTIME_SIGNALS"/>
+		<field name="_SC_RE_DUP_MAX"/>
+		<field name="_SC_RTSIG_MAX"/>
+		<field name="_SC_SAVED_IDS"/>
+		<field name="_SC_SEMAPHORES"/>
+		<field name="_SC_SEM_NSEMS_MAX"/>
+		<field name="_SC_SEM_VALUE_MAX"/>
+		<field name="_SC_SHARED_MEMORY_OBJECTS"/>
+		<field name="_SC_SIGQUEUE_MAX"/>
+		<field name="_SC_STREAM_MAX"/>
+		<field name="_SC_SYNCHRONIZED_IO"/>
+		<field name="_SC_THREADS"/>
+		<field name="_SC_THREAD_ATTR_STACKADDR"/>
+		<field name="_SC_THREAD_ATTR_STACKSIZE"/>
+		<field name="_SC_THREAD_DESTRUCTOR_ITERATIONS"/>
+		<field name="_SC_THREAD_KEYS_MAX"/>
+		<field name="_SC_THREAD_PRIORITY_SCHEDULING"/>
+		<field name="_SC_THREAD_PRIO_INHERIT"/>
+		<field name="_SC_THREAD_PRIO_PROTECT"/>
+		<field name="_SC_THREAD_SAFE_FUNCTIONS"/>
+		<field name="_SC_THREAD_STACK_MIN"/>
+		<field name="_SC_THREAD_THREADS_MAX"/>
+		<field name="_SC_TIMERS"/>
+		<field name="_SC_TIMER_MAX"/>
+		<field name="_SC_TTY_NAME_MAX"/>
+		<field name="_SC_TZNAME_MAX"/>
+		<field name="_SC_VERSION"/>
+		<field name="_SC_XBS5_ILP32_OFF32"/>
+		<field name="_SC_XBS5_ILP32_OFFBIG"/>
+		<field name="_SC_XBS5_LP64_OFF64"/>
+		<field name="_SC_XBS5_LPBIG_OFFBIG"/>
+		<field name="_SC_XOPEN_CRYPT"/>
+		<field name="_SC_XOPEN_ENH_I18N"/>
+		<field name="_SC_XOPEN_LEGACY"/>
+		<field name="_SC_XOPEN_REALTIME"/>
+		<field name="_SC_XOPEN_REALTIME_THREADS"/>
+		<field name="_SC_XOPEN_SHM"/>
+		<field name="_SC_XOPEN_UNIX"/>
+		<field name="_SC_XOPEN_VERSION"/>
+		<field name="_SC_XOPEN_XCU_VERSION"/>
+	</class>
+	<class name="android/system/StructCmsghdr" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IIS)V"/>
+		<method name="&lt;init>(II[B)V"/>
+		<field name="cmsg_data"/>
+		<field name="cmsg_level"/>
+		<field name="cmsg_type"/>
+	</class>
+	<class name="android/system/StructMsghdr" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/net/SocketAddress;[Ljava/nio/ByteBuffer;[Landroid/system/StructCmsghdr;I)V"/>
+		<field name="msg_control"/>
+		<field name="msg_flags"/>
+		<field name="msg_iov"/>
+		<field name="msg_name"/>
+	</class>
+	<class name="android/system/StructPollfd" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="events"/>
+		<field name="fd"/>
+		<field name="revents"/>
+		<field name="userData"/>
+	</class>
+	<class name="android/system/StructStat" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(JJIJIIJJJJJJJ)V"/>
+		<method name="&lt;init>(JJIJIIJJLandroid/system/StructTimespec;Landroid/system/StructTimespec;Landroid/system/StructTimespec;JJ)V" since="27"/>
+		<field name="st_atim" since="27"/>
+		<field name="st_atime"/>
+		<field name="st_blksize"/>
+		<field name="st_blocks"/>
+		<field name="st_ctim" since="27"/>
+		<field name="st_ctime"/>
+		<field name="st_dev"/>
+		<field name="st_gid"/>
+		<field name="st_ino"/>
+		<field name="st_mode"/>
+		<field name="st_mtim" since="27"/>
+		<field name="st_mtime"/>
+		<field name="st_nlink"/>
+		<field name="st_rdev"/>
+		<field name="st_size"/>
+		<field name="st_uid"/>
+	</class>
+	<class name="android/system/StructStatVfs" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(JJJJJJJJJJJ)V"/>
+		<field name="f_bavail"/>
+		<field name="f_bfree"/>
+		<field name="f_blocks"/>
+		<field name="f_bsize"/>
+		<field name="f_favail"/>
+		<field name="f_ffree"/>
+		<field name="f_files"/>
+		<field name="f_flag"/>
+		<field name="f_frsize"/>
+		<field name="f_fsid"/>
+		<field name="f_namemax"/>
+	</class>
+	<class name="android/system/StructTimespec" since="27">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(JJ)V"/>
+		<method name="compareTo(Landroid/system/StructTimespec;)I"/>
+		<field name="tv_nsec"/>
+		<field name="tv_sec"/>
+	</class>
+	<class name="android/system/StructTimeval" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="fromMillis(J)Landroid/system/StructTimeval;"/>
+		<method name="toMillis()J"/>
+		<field name="tv_sec"/>
+		<field name="tv_usec"/>
+	</class>
+	<class name="android/system/StructUtsname" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="machine"/>
+		<field name="nodename"/>
+		<field name="release"/>
+		<field name="sysname"/>
+		<field name="version"/>
+	</class>
+	<class name="android/telecom/Call" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="addConferenceParticipants(Ljava/util/List;)V" since="31"/>
+		<method name="answer(I)V"/>
+		<method name="conference(Landroid/telecom/Call;)V"/>
+		<method name="deflect(Landroid/net/Uri;)V" since="28"/>
+		<method name="disconnect()V"/>
+		<method name="getCannedTextResponses()Ljava/util/List;"/>
+		<method name="getChildren()Ljava/util/List;"/>
+		<method name="getConferenceableCalls()Ljava/util/List;"/>
+		<method name="getDetails()Landroid/telecom/Call$Details;"/>
+		<method name="getGenericConferenceActiveChildCall()Landroid/telecom/Call;" since="30"/>
+		<method name="getParent()Landroid/telecom/Call;"/>
+		<method name="getRemainingPostDialSequence()Ljava/lang/String;"/>
+		<method name="getRttCall()Landroid/telecom/Call$RttCall;" since="26"/>
+		<method name="getState()I" deprecated="31"/>
+		<method name="getVideoCall()Landroid/telecom/InCallService$VideoCall;"/>
+		<method name="handoverTo(Landroid/telecom/PhoneAccountHandle;ILandroid/os/Bundle;)V" since="28"/>
+		<method name="hold()V"/>
+		<method name="isRttActive()Z" since="26"/>
+		<method name="mergeConference()V"/>
+		<method name="phoneAccountSelected(Landroid/telecom/PhoneAccountHandle;Z)V"/>
+		<method name="playDtmfTone(C)V"/>
+		<method name="postDialContinue(Z)V"/>
+		<method name="pullExternalCall()V" since="25"/>
+		<method name="putExtras(Landroid/os/Bundle;)V" since="25"/>
+		<method name="registerCallback(Landroid/telecom/Call$Callback;)V"/>
+		<method name="registerCallback(Landroid/telecom/Call$Callback;Landroid/os/Handler;)V"/>
+		<method name="reject(I)V" since="30"/>
+		<method name="reject(ZLjava/lang/String;)V"/>
+		<method name="removeExtras(Ljava/util/List;)V" since="25"/>
+		<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
+		<method name="respondToRttRequest(IZ)V" since="26"/>
+		<method name="sendCallEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
+		<method name="sendRttRequest()V" since="26"/>
+		<method name="splitFromConference()V"/>
+		<method name="stopDtmfTone()V"/>
+		<method name="stopRtt()V" since="26"/>
+		<method name="swapConference()V"/>
+		<method name="unhold()V"/>
+		<method name="unregisterCallback(Landroid/telecom/Call$Callback;)V"/>
+		<field name="AVAILABLE_PHONE_ACCOUNTS" deprecated="29"/>
+		<field name="EVENT_CLEAR_DIAGNOSTIC_MESSAGE" since="31"/>
+		<field name="EVENT_DISPLAY_DIAGNOSTIC_MESSAGE" since="31"/>
+		<field name="EXTRA_DIAGNOSTIC_MESSAGE" since="31"/>
+		<field name="EXTRA_DIAGNOSTIC_MESSAGE_ID" since="31"/>
+		<field name="EXTRA_LAST_EMERGENCY_CALLBACK_TIME_MILLIS" since="26"/>
+		<field name="EXTRA_SILENT_RINGING_REQUESTED" since="29"/>
+		<field name="EXTRA_SUGGESTED_PHONE_ACCOUNTS" since="29"/>
+		<field name="REJECT_REASON_DECLINED" since="30"/>
+		<field name="REJECT_REASON_UNWANTED" since="30"/>
+		<field name="STATE_ACTIVE"/>
+		<field name="STATE_AUDIO_PROCESSING" since="30"/>
+		<field name="STATE_CONNECTING"/>
+		<field name="STATE_DIALING"/>
+		<field name="STATE_DISCONNECTED"/>
+		<field name="STATE_DISCONNECTING"/>
+		<field name="STATE_HOLDING"/>
+		<field name="STATE_NEW"/>
+		<field name="STATE_PULLING_CALL" since="25"/>
+		<field name="STATE_RINGING"/>
+		<field name="STATE_SELECT_PHONE_ACCOUNT"/>
+		<field name="STATE_SIMULATED_RINGING" since="30"/>
+	</class>
+	<class name="android/telecom/Call$Callback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCallDestroyed(Landroid/telecom/Call;)V"/>
+		<method name="onCannedTextResponsesLoaded(Landroid/telecom/Call;Ljava/util/List;)V"/>
+		<method name="onChildrenChanged(Landroid/telecom/Call;Ljava/util/List;)V"/>
+		<method name="onConferenceableCallsChanged(Landroid/telecom/Call;Ljava/util/List;)V"/>
+		<method name="onConnectionEvent(Landroid/telecom/Call;Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
+		<method name="onDetailsChanged(Landroid/telecom/Call;Landroid/telecom/Call$Details;)V"/>
+		<method name="onHandoverComplete(Landroid/telecom/Call;)V" since="28"/>
+		<method name="onHandoverFailed(Landroid/telecom/Call;I)V" since="28"/>
+		<method name="onParentChanged(Landroid/telecom/Call;Landroid/telecom/Call;)V"/>
+		<method name="onPostDialWait(Landroid/telecom/Call;Ljava/lang/String;)V"/>
+		<method name="onRttInitiationFailure(Landroid/telecom/Call;I)V" since="26"/>
+		<method name="onRttModeChanged(Landroid/telecom/Call;I)V" since="26"/>
+		<method name="onRttRequest(Landroid/telecom/Call;I)V" since="26"/>
+		<method name="onRttStatusChanged(Landroid/telecom/Call;ZLandroid/telecom/Call$RttCall;)V" since="26"/>
+		<method name="onStateChanged(Landroid/telecom/Call;I)V"/>
+		<method name="onVideoCallChanged(Landroid/telecom/Call;Landroid/telecom/InCallService$VideoCall;)V"/>
+		<field name="HANDOVER_FAILURE_DEST_APP_REJECTED" since="28"/>
+		<field name="HANDOVER_FAILURE_NOT_SUPPORTED" since="28"/>
+		<field name="HANDOVER_FAILURE_ONGOING_EMERGENCY_CALL" since="28"/>
+		<field name="HANDOVER_FAILURE_UNKNOWN" since="28"/>
+		<field name="HANDOVER_FAILURE_USER_REJECTED" since="28"/>
+	</class>
+	<class name="android/telecom/Call$Details" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="can(I)Z"/>
+		<method name="can(II)Z"/>
+		<method name="capabilitiesToString(I)Ljava/lang/String;"/>
+		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
+		<method name="getCallCapabilities()I"/>
+		<method name="getCallDirection()I" since="29"/>
+		<method name="getCallProperties()I"/>
+		<method name="getCallerDisplayName()Ljava/lang/String;"/>
+		<method name="getCallerDisplayNamePresentation()I"/>
+		<method name="getCallerNumberVerificationStatus()I" since="30"/>
+		<method name="getConnectTimeMillis()J"/>
+		<method name="getContactDisplayName()Ljava/lang/String;" since="30"/>
+		<method name="getCreationTimeMillis()J" since="26"/>
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getGatewayInfo()Landroid/telecom/GatewayInfo;"/>
+		<method name="getHandle()Landroid/net/Uri;"/>
+		<method name="getHandlePresentation()I"/>
+		<method name="getIntentExtras()Landroid/os/Bundle;"/>
+		<method name="getState()I" since="31"/>
+		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
+		<method name="getVideoState()I"/>
+		<method name="hasProperty(I)Z"/>
+		<method name="hasProperty(II)Z"/>
+		<method name="propertiesToString(I)Ljava/lang/String;"/>
+		<field name="CAPABILITY_ADD_PARTICIPANT" since="31"/>
+		<field name="CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO" since="24"/>
+		<field name="CAPABILITY_CAN_PAUSE_VIDEO"/>
+		<field name="CAPABILITY_CAN_PULL_CALL" since="25"/>
+		<field name="CAPABILITY_DISCONNECT_FROM_CONFERENCE"/>
+		<field name="CAPABILITY_HOLD"/>
+		<field name="CAPABILITY_MANAGE_CONFERENCE"/>
+		<field name="CAPABILITY_MERGE_CONFERENCE"/>
+		<field name="CAPABILITY_MUTE"/>
+		<field name="CAPABILITY_RESPOND_VIA_TEXT"/>
+		<field name="CAPABILITY_SEPARATE_FROM_CONFERENCE"/>
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL"/>
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_RX"/>
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_TX"/>
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL"/>
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_RX"/>
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_TX"/>
+		<field name="CAPABILITY_SUPPORT_DEFLECT" since="28"/>
+		<field name="CAPABILITY_SUPPORT_HOLD"/>
+		<field name="CAPABILITY_SWAP_CONFERENCE"/>
+		<field name="DIRECTION_INCOMING" since="29"/>
+		<field name="DIRECTION_OUTGOING" since="29"/>
+		<field name="DIRECTION_UNKNOWN" since="29"/>
+		<field name="PROPERTY_ASSISTED_DIALING" since="30"/>
+		<field name="PROPERTY_CONFERENCE"/>
+		<field name="PROPERTY_CROSS_SIM" since="31"/>
+		<field name="PROPERTY_EMERGENCY_CALLBACK_MODE"/>
+		<field name="PROPERTY_ENTERPRISE_CALL" since="24"/>
+		<field name="PROPERTY_GENERIC_CONFERENCE"/>
+		<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25"/>
+		<field name="PROPERTY_HIGH_DEF_AUDIO"/>
+		<field name="PROPERTY_IS_ADHOC_CONFERENCE" since="31"/>
+		<field name="PROPERTY_IS_EXTERNAL_CALL" since="25"/>
+		<field name="PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL" since="29"/>
+		<field name="PROPERTY_RTT" since="28"/>
+		<field name="PROPERTY_SELF_MANAGED" since="26"/>
+		<field name="PROPERTY_VOIP_AUDIO_MODE" since="29"/>
+		<field name="PROPERTY_WIFI"/>
+	</class>
+	<class name="android/telecom/Call$RttCall" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getRttAudioMode()I"/>
+		<method name="read()Ljava/lang/String;"/>
+		<method name="readImmediately()Ljava/lang/String;" since="27"/>
+		<method name="setRttMode(I)V"/>
+		<method name="write(Ljava/lang/String;)V"/>
+		<field name="RTT_MODE_FULL"/>
+		<field name="RTT_MODE_HCO"/>
+		<field name="RTT_MODE_VCO"/>
+	</class>
+	<class name="android/telecom/CallAudioState" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ZII)V"/>
+		<method name="audioRouteToString(I)Ljava/lang/String;"/>
+		<method name="getActiveBluetoothDevice()Landroid/bluetooth/BluetoothDevice;" since="28"/>
+		<method name="getRoute()I"/>
+		<method name="getSupportedBluetoothDevices()Ljava/util/Collection;" since="28"/>
+		<method name="getSupportedRouteMask()I"/>
+		<method name="isMuted()Z"/>
+		<field name="CREATOR"/>
+		<field name="ROUTE_BLUETOOTH"/>
+		<field name="ROUTE_EARPIECE"/>
+		<field name="ROUTE_SPEAKER"/>
+		<field name="ROUTE_WIRED_HEADSET"/>
+		<field name="ROUTE_WIRED_OR_EARPIECE"/>
+	</class>
+	<class name="android/telecom/CallRedirectionService" since="29">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="cancelCall()V"/>
+		<method name="onPlaceCall(Landroid/net/Uri;Landroid/telecom/PhoneAccountHandle;Z)V"/>
+		<method name="placeCallUnmodified()V"/>
+		<method name="redirectCall(Landroid/net/Uri;Landroid/telecom/PhoneAccountHandle;Z)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/telecom/CallScreeningService" since="24">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onScreenCall(Landroid/telecom/Call$Details;)V"/>
+		<method name="respondToCall(Landroid/telecom/Call$Details;Landroid/telecom/CallScreeningService$CallResponse;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/telecom/CallScreeningService$CallResponse" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getCallComposerAttachmentsToShow()I" since="31"/>
+		<method name="getDisallowCall()Z"/>
+		<method name="getRejectCall()Z"/>
+		<method name="getSilenceCall()Z" since="29"/>
+		<method name="getSkipCallLog()Z"/>
+		<method name="getSkipNotification()Z"/>
+		<field name="CALL_COMPOSER_ATTACHMENT_LOCATION" since="31"/>
+		<field name="CALL_COMPOSER_ATTACHMENT_PICTURE" since="31"/>
+		<field name="CALL_COMPOSER_ATTACHMENT_PRIORITY" since="31"/>
+		<field name="CALL_COMPOSER_ATTACHMENT_SUBJECT" since="31"/>
+	</class>
+	<class name="android/telecom/CallScreeningService$CallResponse$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/telecom/CallScreeningService$CallResponse;"/>
+		<method name="setCallComposerAttachmentsToShow(I)Landroid/telecom/CallScreeningService$CallResponse$Builder;" since="31"/>
+		<method name="setDisallowCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
+		<method name="setRejectCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
+		<method name="setSilenceCall(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;" since="29"/>
+		<method name="setSkipCallLog(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
+		<method name="setSkipNotification(Z)Landroid/telecom/CallScreeningService$CallResponse$Builder;"/>
+	</class>
+	<class name="android/telecom/Conference" since="23">
+		<extends name="android/telecom/Conferenceable"/>
+		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;)V"/>
+		<method name="addConnection(Landroid/telecom/Connection;)Z"/>
+		<method name="createFailedConference(Landroid/telecom/DisconnectCause;Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/Conference;" since="31"/>
+		<method name="destroy()V"/>
+		<method name="getCallAudioState()Landroid/telecom/CallAudioState;"/>
+		<method name="getConferenceableConnections()Ljava/util/List;"/>
+		<method name="getConnectionCapabilities()I"/>
+		<method name="getConnectionProperties()I" since="25"/>
+		<method name="getConnectionStartElapsedRealtimeMillis()J" since="30"/>
+		<method name="getConnectionTime()J"/>
+		<method name="getConnections()Ljava/util/List;"/>
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
+		<method name="getState()I"/>
+		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
+		<method name="getVideoProvider()Landroid/telecom/Connection$VideoProvider;"/>
+		<method name="getVideoState()I"/>
+		<method name="isRingbackRequested()Z" since="31"/>
+		<method name="onAddConferenceParticipants(Ljava/util/List;)V" since="31"/>
+		<method name="onAnswer(I)V" since="31"/>
+		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V"/>
+		<method name="onConnectionAdded(Landroid/telecom/Connection;)V"/>
+		<method name="onDisconnect()V"/>
+		<method name="onExtrasChanged(Landroid/os/Bundle;)V" since="25"/>
+		<method name="onHold()V"/>
+		<method name="onMerge()V"/>
+		<method name="onMerge(Landroid/telecom/Connection;)V"/>
+		<method name="onPlayDtmfTone(C)V"/>
+		<method name="onReject()V" since="31"/>
+		<method name="onSeparate(Landroid/telecom/Connection;)V"/>
+		<method name="onStopDtmfTone()V"/>
+		<method name="onSwap()V"/>
+		<method name="onUnhold()V"/>
+		<method name="putExtras(Landroid/os/Bundle;)V" since="25"/>
+		<method name="removeConnection(Landroid/telecom/Connection;)V"/>
+		<method name="removeExtras(Ljava/util/List;)V" since="25"/>
+		<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
+		<method name="sendConferenceEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="30"/>
+		<method name="setActive()V"/>
+		<method name="setConferenceableConnections(Ljava/util/List;)V"/>
+		<method name="setConnectionCapabilities(I)V"/>
+		<method name="setConnectionProperties(I)V" since="25"/>
+		<method name="setConnectionStartElapsedRealTime(J)V" since="28" deprecated="30"/>
+		<method name="setConnectionStartElapsedRealtimeMillis(J)V" since="30"/>
+		<method name="setConnectionTime(J)V"/>
+		<method name="setDialing()V"/>
+		<method name="setDisconnected(Landroid/telecom/DisconnectCause;)V"/>
+		<method name="setExtras(Landroid/os/Bundle;)V"/>
+		<method name="setOnHold()V"/>
+		<method name="setRingbackRequested(Z)V" since="31"/>
+		<method name="setRinging()V" since="31"/>
+		<method name="setStatusHints(Landroid/telecom/StatusHints;)V"/>
+		<method name="setVideoProvider(Landroid/telecom/Connection;Landroid/telecom/Connection$VideoProvider;)V"/>
+		<method name="setVideoState(Landroid/telecom/Connection;I)V"/>
+		<field name="CONNECT_TIME_NOT_SPECIFIED"/>
+	</class>
+	<class name="android/telecom/Conferenceable" since="23">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/telecom/Connection" since="23">
+		<extends name="android/telecom/Conferenceable"/>
+		<method name="&lt;init>()V"/>
+		<method name="capabilitiesToString(I)Ljava/lang/String;"/>
+		<method name="createCanceledConnection()Landroid/telecom/Connection;"/>
+		<method name="createFailedConnection(Landroid/telecom/DisconnectCause;)Landroid/telecom/Connection;"/>
+		<method name="destroy()V"/>
+		<method name="getAddress()Landroid/net/Uri;"/>
+		<method name="getAddressPresentation()I"/>
+		<method name="getAudioModeIsVoip()Z"/>
+		<method name="getCallAudioState()Landroid/telecom/CallAudioState;"/>
+		<method name="getCallerDisplayName()Ljava/lang/String;"/>
+		<method name="getCallerDisplayNamePresentation()I"/>
+		<method name="getCallerNumberVerificationStatus()I" since="30"/>
+		<method name="getConference()Landroid/telecom/Conference;"/>
+		<method name="getConferenceables()Ljava/util/List;"/>
+		<method name="getConnectionCapabilities()I"/>
+		<method name="getConnectionProperties()I" since="25"/>
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getState()I"/>
+		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
+		<method name="getVideoProvider()Landroid/telecom/Connection$VideoProvider;"/>
+		<method name="getVideoState()I" since="30"/>
+		<method name="handleRttUpgradeResponse(Landroid/telecom/Connection$RttTextStream;)V" since="28"/>
+		<method name="isRingbackRequested()Z"/>
+		<method name="notifyConferenceMergeFailed()V" since="30"/>
+		<method name="onAbort()V"/>
+		<method name="onAddConferenceParticipants(Ljava/util/List;)V" since="31"/>
+		<method name="onAnswer()V"/>
+		<method name="onAnswer(I)V"/>
+		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V"/>
+		<method name="onCallEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
+		<method name="onDeflect(Landroid/net/Uri;)V" since="28"/>
+		<method name="onDisconnect()V"/>
+		<method name="onExtrasChanged(Landroid/os/Bundle;)V" since="25"/>
+		<method name="onHandoverComplete()V" since="28"/>
+		<method name="onHold()V"/>
+		<method name="onPlayDtmfTone(C)V"/>
+		<method name="onPostDialContinue(Z)V"/>
+		<method name="onPullExternalCall()V" since="25"/>
+		<method name="onReject()V"/>
+		<method name="onReject(I)V" since="30"/>
+		<method name="onReject(Ljava/lang/String;)V" since="24"/>
+		<method name="onSeparate()V"/>
+		<method name="onShowIncomingCallUi()V" since="26"/>
+		<method name="onSilence()V" since="29"/>
+		<method name="onStartRtt(Landroid/telecom/Connection$RttTextStream;)V" since="28"/>
+		<method name="onStateChanged(I)V"/>
+		<method name="onStopDtmfTone()V"/>
+		<method name="onStopRtt()V" since="28"/>
+		<method name="onTrackedByNonUiService(Z)V" since="31"/>
+		<method name="onUnhold()V"/>
+		<method name="onUsingAlternativeUi(Z)V" since="31"/>
+		<method name="propertiesToString(I)Ljava/lang/String;" since="25"/>
+		<method name="putExtras(Landroid/os/Bundle;)V" since="25"/>
+		<method name="removeExtras(Ljava/util/List;)V" since="25"/>
+		<method name="removeExtras([Ljava/lang/String;)V" since="25"/>
+		<method name="requestBluetoothAudio(Landroid/bluetooth/BluetoothDevice;)V" since="28"/>
+		<method name="sendConnectionEvent(Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
+		<method name="sendRemoteRttRequest()V" since="28"/>
+		<method name="sendRttInitiationFailure(I)V" since="28"/>
+		<method name="sendRttInitiationSuccess()V" since="28"/>
+		<method name="sendRttSessionRemotelyTerminated()V" since="28"/>
+		<method name="setActive()V"/>
+		<method name="setAddress(Landroid/net/Uri;I)V"/>
+		<method name="setAudioModeIsVoip(Z)V"/>
+		<method name="setAudioRoute(I)V" since="26"/>
+		<method name="setCallerDisplayName(Ljava/lang/String;I)V"/>
+		<method name="setCallerNumberVerificationStatus(I)V" since="30"/>
+		<method name="setConferenceableConnections(Ljava/util/List;)V"/>
+		<method name="setConferenceables(Ljava/util/List;)V"/>
+		<method name="setConnectionCapabilities(I)V"/>
+		<method name="setConnectionProperties(I)V" since="25"/>
+		<method name="setDialing()V"/>
+		<method name="setDisconnected(Landroid/telecom/DisconnectCause;)V"/>
+		<method name="setExtras(Landroid/os/Bundle;)V"/>
+		<method name="setInitialized()V"/>
+		<method name="setInitializing()V"/>
+		<method name="setNextPostDialChar(C)V"/>
+		<method name="setOnHold()V"/>
+		<method name="setPostDialWait(Ljava/lang/String;)V"/>
+		<method name="setPulling()V" since="25"/>
+		<method name="setRingbackRequested(Z)V"/>
+		<method name="setRinging()V"/>
+		<method name="setStatusHints(Landroid/telecom/StatusHints;)V"/>
+		<method name="setVideoProvider(Landroid/telecom/Connection$VideoProvider;)V"/>
+		<method name="setVideoState(I)V"/>
+		<method name="stateToString(I)Ljava/lang/String;"/>
+		<field name="AUDIO_CODEC_AMR" since="30"/>
+		<field name="AUDIO_CODEC_AMR_WB" since="30"/>
+		<field name="AUDIO_CODEC_EVRC" since="30"/>
+		<field name="AUDIO_CODEC_EVRC_B" since="30"/>
+		<field name="AUDIO_CODEC_EVRC_NW" since="30"/>
+		<field name="AUDIO_CODEC_EVRC_WB" since="30"/>
+		<field name="AUDIO_CODEC_EVS_FB" since="30"/>
+		<field name="AUDIO_CODEC_EVS_NB" since="30"/>
+		<field name="AUDIO_CODEC_EVS_SWB" since="30"/>
+		<field name="AUDIO_CODEC_EVS_WB" since="30"/>
+		<field name="AUDIO_CODEC_G711A" since="30"/>
+		<field name="AUDIO_CODEC_G711AB" since="30"/>
+		<field name="AUDIO_CODEC_G711U" since="30"/>
+		<field name="AUDIO_CODEC_G722" since="30"/>
+		<field name="AUDIO_CODEC_G723" since="30"/>
+		<field name="AUDIO_CODEC_G729" since="30"/>
+		<field name="AUDIO_CODEC_GSM_EFR" since="30"/>
+		<field name="AUDIO_CODEC_GSM_FR" since="30"/>
+		<field name="AUDIO_CODEC_GSM_HR" since="30"/>
+		<field name="AUDIO_CODEC_NONE" since="30"/>
+		<field name="AUDIO_CODEC_QCELP13K" since="30"/>
+		<field name="CAPABILITY_ADD_PARTICIPANT" since="31"/>
+		<field name="CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO" since="24"/>
+		<field name="CAPABILITY_CAN_PAUSE_VIDEO"/>
+		<field name="CAPABILITY_CAN_PULL_CALL" since="25"/>
+		<field name="CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION" since="24"/>
+		<field name="CAPABILITY_CAN_UPGRADE_TO_VIDEO" deprecated="29"/>
+		<field name="CAPABILITY_DISCONNECT_FROM_CONFERENCE"/>
+		<field name="CAPABILITY_HOLD"/>
+		<field name="CAPABILITY_MANAGE_CONFERENCE"/>
+		<field name="CAPABILITY_MERGE_CONFERENCE"/>
+		<field name="CAPABILITY_MUTE"/>
+		<field name="CAPABILITY_RESPOND_VIA_TEXT"/>
+		<field name="CAPABILITY_SEPARATE_FROM_CONFERENCE"/>
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL"/>
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_RX"/>
+		<field name="CAPABILITY_SUPPORTS_VT_LOCAL_TX"/>
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL"/>
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_RX"/>
+		<field name="CAPABILITY_SUPPORTS_VT_REMOTE_TX"/>
+		<field name="CAPABILITY_SUPPORT_DEFLECT" since="28"/>
+		<field name="CAPABILITY_SUPPORT_HOLD"/>
+		<field name="CAPABILITY_SWAP_CONFERENCE"/>
+		<field name="EVENT_CALL_HOLD_FAILED" since="30"/>
+		<field name="EVENT_CALL_MERGE_FAILED" since="25"/>
+		<field name="EVENT_CALL_PULL_FAILED" since="25"/>
+		<field name="EVENT_CALL_REMOTELY_HELD" since="30"/>
+		<field name="EVENT_CALL_REMOTELY_UNHELD" since="30"/>
+		<field name="EVENT_CALL_SWITCH_FAILED" since="30"/>
+		<field name="EVENT_MERGE_COMPLETE" since="30"/>
+		<field name="EVENT_MERGE_START" since="30"/>
+		<field name="EVENT_ON_HOLD_TONE_END" since="30"/>
+		<field name="EVENT_ON_HOLD_TONE_START" since="30"/>
+		<field name="EVENT_RTT_AUDIO_INDICATION_CHANGED" since="29"/>
+		<field name="EXTRA_ANSWERING_DROPS_FG_CALL" since="25"/>
+		<field name="EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME" since="26"/>
+		<field name="EXTRA_AUDIO_CODEC" since="30"/>
+		<field name="EXTRA_AUDIO_CODEC_BANDWIDTH_KHZ" since="31"/>
+		<field name="EXTRA_AUDIO_CODEC_BITRATE_KBPS" since="31"/>
+		<field name="EXTRA_CALL_SUBJECT"/>
+		<field name="EXTRA_CHILD_ADDRESS"/>
+		<field name="EXTRA_IS_RTT_AUDIO_PRESENT" since="29"/>
+		<field name="EXTRA_LAST_FORWARDED_NUMBER"/>
+		<field name="EXTRA_SIP_INVITE" since="29"/>
+		<field name="PROPERTY_ASSISTED_DIALING" since="30"/>
+		<field name="PROPERTY_CROSS_SIM" since="31"/>
+		<field name="PROPERTY_HAS_CDMA_VOICE_PRIVACY" since="25"/>
+		<field name="PROPERTY_HIGH_DEF_AUDIO" since="30"/>
+		<field name="PROPERTY_IS_ADHOC_CONFERENCE" since="31"/>
+		<field name="PROPERTY_IS_EXTERNAL_CALL" since="25"/>
+		<field name="PROPERTY_IS_RTT" since="28"/>
+		<field name="PROPERTY_NETWORK_IDENTIFIED_EMERGENCY_CALL" since="30"/>
+		<field name="PROPERTY_SELF_MANAGED" since="26"/>
+		<field name="PROPERTY_WIFI" since="30"/>
+		<field name="STATE_ACTIVE"/>
+		<field name="STATE_DIALING"/>
+		<field name="STATE_DISCONNECTED"/>
+		<field name="STATE_HOLDING"/>
+		<field name="STATE_INITIALIZING"/>
+		<field name="STATE_NEW"/>
+		<field name="STATE_PULLING_CALL" since="25"/>
+		<field name="STATE_RINGING"/>
+		<field name="VERIFICATION_STATUS_FAILED" since="30"/>
+		<field name="VERIFICATION_STATUS_NOT_VERIFIED" since="30"/>
+		<field name="VERIFICATION_STATUS_PASSED" since="30"/>
+	</class>
+	<class name="android/telecom/Connection$RttModifyStatus" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="SESSION_MODIFY_REQUEST_FAIL"/>
+		<field name="SESSION_MODIFY_REQUEST_INVALID"/>
+		<field name="SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE"/>
+		<field name="SESSION_MODIFY_REQUEST_SUCCESS"/>
+		<field name="SESSION_MODIFY_REQUEST_TIMED_OUT"/>
+	</class>
+	<class name="android/telecom/Connection$RttTextStream" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="read()Ljava/lang/String;"/>
+		<method name="readImmediately()Ljava/lang/String;"/>
+		<method name="write(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/telecom/Connection$VideoProvider" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="changeCameraCapabilities(Landroid/telecom/VideoProfile$CameraCapabilities;)V"/>
+		<method name="changePeerDimensions(II)V"/>
+		<method name="changeVideoQuality(I)V"/>
+		<method name="handleCallSessionEvent(I)V"/>
+		<method name="onRequestCameraCapabilities()V"/>
+		<method name="onRequestConnectionDataUsage()V"/>
+		<method name="onSendSessionModifyRequest(Landroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
+		<method name="onSendSessionModifyResponse(Landroid/telecom/VideoProfile;)V"/>
+		<method name="onSetCamera(Ljava/lang/String;)V"/>
+		<method name="onSetDeviceOrientation(I)V"/>
+		<method name="onSetDisplaySurface(Landroid/view/Surface;)V"/>
+		<method name="onSetPauseImage(Landroid/net/Uri;)V"/>
+		<method name="onSetPreviewSurface(Landroid/view/Surface;)V"/>
+		<method name="onSetZoom(F)V"/>
+		<method name="receiveSessionModifyRequest(Landroid/telecom/VideoProfile;)V"/>
+		<method name="receiveSessionModifyResponse(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
+		<method name="setCallDataUsage(J)V"/>
+		<field name="SESSION_EVENT_CAMERA_FAILURE"/>
+		<field name="SESSION_EVENT_CAMERA_PERMISSION_ERROR" since="26"/>
+		<field name="SESSION_EVENT_CAMERA_READY"/>
+		<field name="SESSION_EVENT_RX_PAUSE"/>
+		<field name="SESSION_EVENT_RX_RESUME"/>
+		<field name="SESSION_EVENT_TX_START"/>
+		<field name="SESSION_EVENT_TX_STOP"/>
+		<field name="SESSION_MODIFY_REQUEST_FAIL"/>
+		<field name="SESSION_MODIFY_REQUEST_INVALID"/>
+		<field name="SESSION_MODIFY_REQUEST_REJECTED_BY_REMOTE"/>
+		<field name="SESSION_MODIFY_REQUEST_SUCCESS"/>
+		<field name="SESSION_MODIFY_REQUEST_TIMED_OUT"/>
+	</class>
+	<class name="android/telecom/ConnectionRequest" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;)V"/>
+		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;Landroid/os/Bundle;I)V"/>
+		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
+		<method name="getAddress()Landroid/net/Uri;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getParticipants()Ljava/util/List;" since="30"/>
+		<method name="getRttTextStream()Landroid/telecom/Connection$RttTextStream;" since="28"/>
+		<method name="getVideoState()I"/>
+		<method name="isAdhocConferenceCall()Z" since="30"/>
+		<method name="isRequestingRtt()Z" since="28"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telecom/ConnectionService" since="23">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="addConference(Landroid/telecom/Conference;)V"/>
+		<method name="addExistingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/Connection;)V"/>
+		<method name="conferenceRemoteConnections(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConnection;)V"/>
+		<method name="connectionServiceFocusReleased()V" since="28"/>
+		<method name="createRemoteIncomingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConference;" since="31"/>
+		<method name="createRemoteIncomingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConnection;"/>
+		<method name="createRemoteOutgoingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConference;" since="31"/>
+		<method name="createRemoteOutgoingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/RemoteConnection;"/>
+		<method name="getAllConferences()Ljava/util/Collection;" since="24"/>
+		<method name="getAllConnections()Ljava/util/Collection;"/>
+		<method name="onConference(Landroid/telecom/Connection;Landroid/telecom/Connection;)V"/>
+		<method name="onConnectionServiceFocusGained()V" since="28"/>
+		<method name="onConnectionServiceFocusLost()V" since="28"/>
+		<method name="onCreateIncomingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Conference;" since="31"/>
+		<method name="onCreateIncomingConferenceFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="31"/>
+		<method name="onCreateIncomingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;"/>
+		<method name="onCreateIncomingConnectionFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="26"/>
+		<method name="onCreateIncomingHandoverConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" since="28"/>
+		<method name="onCreateOutgoingConference(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Conference;" since="31"/>
+		<method name="onCreateOutgoingConferenceFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="31"/>
+		<method name="onCreateOutgoingConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;"/>
+		<method name="onCreateOutgoingConnectionFailed(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)V" since="26"/>
+		<method name="onCreateOutgoingHandoverConnection(Landroid/telecom/PhoneAccountHandle;Landroid/telecom/ConnectionRequest;)Landroid/telecom/Connection;" since="28"/>
+		<method name="onHandoverFailed(Landroid/telecom/ConnectionRequest;I)V" since="28"/>
+		<method name="onRemoteConferenceAdded(Landroid/telecom/RemoteConference;)V"/>
+		<method name="onRemoteExistingConnectionAdded(Landroid/telecom/RemoteConnection;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/telecom/DisconnectCause" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(ILjava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="getCode()I"/>
+		<method name="getDescription()Ljava/lang/CharSequence;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getReason()Ljava/lang/String;"/>
+		<method name="getTone()I"/>
+		<field name="ANSWERED_ELSEWHERE" since="25"/>
+		<field name="BUSY"/>
+		<field name="CALL_PULLED" since="25"/>
+		<field name="CANCELED"/>
+		<field name="CONNECTION_MANAGER_NOT_SUPPORTED"/>
+		<field name="CREATOR"/>
+		<field name="ERROR"/>
+		<field name="LOCAL"/>
+		<field name="MISSED"/>
+		<field name="OTHER"/>
+		<field name="REASON_EMERGENCY_CALL_PLACED" since="30"/>
+		<field name="REASON_EMULATING_SINGLE_CALL" since="31"/>
+		<field name="REASON_IMS_ACCESS_BLOCKED" since="31"/>
+		<field name="REASON_WIFI_ON_BUT_WFC_OFF" since="31"/>
+		<field name="REJECTED"/>
+		<field name="REMOTE"/>
+		<field name="RESTRICTED"/>
+		<field name="UNKNOWN"/>
+	</class>
+	<class name="android/telecom/GatewayInfo" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/net/Uri;Landroid/net/Uri;)V"/>
+		<method name="getGatewayAddress()Landroid/net/Uri;"/>
+		<method name="getGatewayProviderPackageName()Ljava/lang/String;"/>
+		<method name="getOriginalAddress()Landroid/net/Uri;"/>
+		<method name="isEmpty()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telecom/InCallService" since="23">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="canAddCall()Z"/>
+		<method name="getCallAudioState()Landroid/telecom/CallAudioState;"/>
+		<method name="getCalls()Ljava/util/List;"/>
+		<method name="onBringToForeground(Z)V"/>
+		<method name="onCallAdded(Landroid/telecom/Call;)V"/>
+		<method name="onCallAudioStateChanged(Landroid/telecom/CallAudioState;)V"/>
+		<method name="onCallRemoved(Landroid/telecom/Call;)V"/>
+		<method name="onCanAddCallChanged(Z)V"/>
+		<method name="onConnectionEvent(Landroid/telecom/Call;Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
+		<method name="onSilenceRinger()V" since="24"/>
+		<method name="requestBluetoothAudio(Landroid/bluetooth/BluetoothDevice;)V" since="28"/>
+		<method name="setAudioRoute(I)V"/>
+		<method name="setMuted(Z)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/telecom/InCallService$VideoCall" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="registerCallback(Landroid/telecom/InCallService$VideoCall$Callback;)V"/>
+		<method name="registerCallback(Landroid/telecom/InCallService$VideoCall$Callback;Landroid/os/Handler;)V"/>
+		<method name="requestCallDataUsage()V"/>
+		<method name="requestCameraCapabilities()V"/>
+		<method name="sendSessionModifyRequest(Landroid/telecom/VideoProfile;)V"/>
+		<method name="sendSessionModifyResponse(Landroid/telecom/VideoProfile;)V"/>
+		<method name="setCamera(Ljava/lang/String;)V"/>
+		<method name="setDeviceOrientation(I)V"/>
+		<method name="setDisplaySurface(Landroid/view/Surface;)V"/>
+		<method name="setPauseImage(Landroid/net/Uri;)V"/>
+		<method name="setPreviewSurface(Landroid/view/Surface;)V"/>
+		<method name="setZoom(F)V"/>
+		<method name="unregisterCallback(Landroid/telecom/InCallService$VideoCall$Callback;)V"/>
+	</class>
+	<class name="android/telecom/InCallService$VideoCall$Callback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCallDataUsageChanged(J)V"/>
+		<method name="onCallSessionEvent(I)V"/>
+		<method name="onCameraCapabilitiesChanged(Landroid/telecom/VideoProfile$CameraCapabilities;)V"/>
+		<method name="onPeerDimensionsChanged(II)V"/>
+		<method name="onSessionModifyRequestReceived(Landroid/telecom/VideoProfile;)V"/>
+		<method name="onSessionModifyResponseReceived(ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
+		<method name="onVideoQualityChanged(I)V"/>
+	</class>
+	<class name="android/telecom/PhoneAccount" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="builder(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="getAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
+		<method name="getAddress()Landroid/net/Uri;"/>
+		<method name="getCapabilities()I"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="24"/>
+		<method name="getHighlightColor()I"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getShortDescription()Ljava/lang/CharSequence;"/>
+		<method name="getSubscriptionAddress()Landroid/net/Uri;"/>
+		<method name="getSupportedUriSchemes()Ljava/util/List;"/>
+		<method name="hasCapabilities(I)Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="supportsUriScheme(Ljava/lang/String;)Z"/>
+		<method name="toBuilder()Landroid/telecom/PhoneAccount$Builder;"/>
+		<field name="CAPABILITY_ADHOC_CONFERENCE_CALLING" since="30"/>
+		<field name="CAPABILITY_CALL_COMPOSER" since="31"/>
+		<field name="CAPABILITY_CALL_PROVIDER"/>
+		<field name="CAPABILITY_CALL_SUBJECT"/>
+		<field name="CAPABILITY_CONNECTION_MANAGER"/>
+		<field name="CAPABILITY_PLACE_EMERGENCY_CALLS"/>
+		<field name="CAPABILITY_RTT" since="26"/>
+		<field name="CAPABILITY_SELF_MANAGED" since="26"/>
+		<field name="CAPABILITY_SIM_SUBSCRIPTION"/>
+		<field name="CAPABILITY_SUPPORTS_VIDEO_CALLING" since="26"/>
+		<field name="CAPABILITY_VIDEO_CALLING"/>
+		<field name="CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE" since="24"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE" since="31"/>
+		<field name="EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE" since="31"/>
+		<field name="EXTRA_CALL_SUBJECT_CHARACTER_ENCODING" since="24"/>
+		<field name="EXTRA_CALL_SUBJECT_MAX_LENGTH" since="24"/>
+		<field name="EXTRA_LOG_SELF_MANAGED_CALLS" since="28"/>
+		<field name="EXTRA_SUPPORTS_HANDOVER_FROM" since="28"/>
+		<field name="EXTRA_SUPPORTS_HANDOVER_TO" since="28"/>
+		<field name="NO_HIGHLIGHT_COLOR"/>
+		<field name="NO_RESOURCE_ID"/>
+		<field name="SCHEME_SIP"/>
+		<field name="SCHEME_TEL"/>
+		<field name="SCHEME_VOICEMAIL"/>
+	</class>
+	<class name="android/telecom/PhoneAccount$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/telecom/PhoneAccount;)V"/>
+		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;Ljava/lang/CharSequence;)V"/>
+		<method name="addSupportedUriScheme(Ljava/lang/String;)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="build()Landroid/telecom/PhoneAccount;"/>
+		<method name="setAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="setCapabilities(I)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/telecom/PhoneAccount$Builder;" since="24"/>
+		<method name="setHighlightColor(I)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Icon;)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="setShortDescription(Ljava/lang/CharSequence;)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="setSubscriptionAddress(Landroid/net/Uri;)Landroid/telecom/PhoneAccount$Builder;"/>
+		<method name="setSupportedUriSchemes(Ljava/util/List;)Landroid/telecom/PhoneAccount$Builder;"/>
+	</class>
+	<class name="android/telecom/PhoneAccountHandle" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/ComponentName;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/UserHandle;)V"/>
+		<method name="getComponentName()Landroid/content/ComponentName;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getUserHandle()Landroid/os/UserHandle;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telecom/PhoneAccountSuggestion" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/telecom/PhoneAccountHandle;IZ)V"/>
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
+		<method name="getReason()I"/>
+		<method name="shouldAutoSelect()Z"/>
+		<field name="CREATOR"/>
+		<field name="REASON_FREQUENT"/>
+		<field name="REASON_INTRA_CARRIER"/>
+		<field name="REASON_NONE"/>
+		<field name="REASON_OTHER"/>
+		<field name="REASON_USER_SET"/>
+	</class>
+	<class name="android/telecom/RemoteConference" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="disconnect()V"/>
+		<method name="getConferenceableConnections()Ljava/util/List;"/>
+		<method name="getConnectionCapabilities()I"/>
+		<method name="getConnectionProperties()I" since="24"/>
+		<method name="getConnections()Ljava/util/List;"/>
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getState()I"/>
+		<method name="hold()V"/>
+		<method name="merge()V"/>
+		<method name="playDtmfTone(C)V"/>
+		<method name="registerCallback(Landroid/telecom/RemoteConference$Callback;)V"/>
+		<method name="registerCallback(Landroid/telecom/RemoteConference$Callback;Landroid/os/Handler;)V"/>
+		<method name="separate(Landroid/telecom/RemoteConnection;)V"/>
+		<method name="setCallAudioState(Landroid/telecom/CallAudioState;)V"/>
+		<method name="stopDtmfTone()V"/>
+		<method name="swap()V"/>
+		<method name="unhold()V"/>
+		<method name="unregisterCallback(Landroid/telecom/RemoteConference$Callback;)V"/>
+	</class>
+	<class name="android/telecom/RemoteConference$Callback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onConferenceableConnectionsChanged(Landroid/telecom/RemoteConference;Ljava/util/List;)V"/>
+		<method name="onConnectionAdded(Landroid/telecom/RemoteConference;Landroid/telecom/RemoteConnection;)V"/>
+		<method name="onConnectionCapabilitiesChanged(Landroid/telecom/RemoteConference;I)V"/>
+		<method name="onConnectionPropertiesChanged(Landroid/telecom/RemoteConference;I)V" since="25"/>
+		<method name="onConnectionRemoved(Landroid/telecom/RemoteConference;Landroid/telecom/RemoteConnection;)V"/>
+		<method name="onDestroyed(Landroid/telecom/RemoteConference;)V"/>
+		<method name="onDisconnected(Landroid/telecom/RemoteConference;Landroid/telecom/DisconnectCause;)V"/>
+		<method name="onExtrasChanged(Landroid/telecom/RemoteConference;Landroid/os/Bundle;)V"/>
+		<method name="onStateChanged(Landroid/telecom/RemoteConference;II)V"/>
+	</class>
+	<class name="android/telecom/RemoteConnection" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="abort()V"/>
+		<method name="addConferenceParticipants(Ljava/util/List;)V" since="31"/>
+		<method name="answer()V"/>
+		<method name="disconnect()V"/>
+		<method name="getAddress()Landroid/net/Uri;"/>
+		<method name="getAddressPresentation()I"/>
+		<method name="getCallerDisplayName()Ljava/lang/CharSequence;"/>
+		<method name="getCallerDisplayNamePresentation()I"/>
+		<method name="getConference()Landroid/telecom/RemoteConference;"/>
+		<method name="getConferenceableConnections()Ljava/util/List;"/>
+		<method name="getConnectionCapabilities()I"/>
+		<method name="getConnectionProperties()I" since="25"/>
+		<method name="getDisconnectCause()Landroid/telecom/DisconnectCause;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getState()I"/>
+		<method name="getStatusHints()Landroid/telecom/StatusHints;"/>
+		<method name="getVideoProvider()Landroid/telecom/RemoteConnection$VideoProvider;"/>
+		<method name="getVideoState()I"/>
+		<method name="hold()V"/>
+		<method name="isRingbackRequested()Z"/>
+		<method name="isVoipAudioMode()Z"/>
+		<method name="playDtmfTone(C)V"/>
+		<method name="postDialContinue(Z)V"/>
+		<method name="pullExternalCall()V" since="25"/>
+		<method name="registerCallback(Landroid/telecom/RemoteConnection$Callback;)V"/>
+		<method name="registerCallback(Landroid/telecom/RemoteConnection$Callback;Landroid/os/Handler;)V"/>
+		<method name="reject()V"/>
+		<method name="setCallAudioState(Landroid/telecom/CallAudioState;)V"/>
+		<method name="stopDtmfTone()V"/>
+		<method name="unhold()V"/>
+		<method name="unregisterCallback(Landroid/telecom/RemoteConnection$Callback;)V"/>
+	</class>
+	<class name="android/telecom/RemoteConnection$Callback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAddressChanged(Landroid/telecom/RemoteConnection;Landroid/net/Uri;I)V"/>
+		<method name="onCallerDisplayNameChanged(Landroid/telecom/RemoteConnection;Ljava/lang/String;I)V"/>
+		<method name="onConferenceChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConference;)V"/>
+		<method name="onConferenceableConnectionsChanged(Landroid/telecom/RemoteConnection;Ljava/util/List;)V"/>
+		<method name="onConnectionCapabilitiesChanged(Landroid/telecom/RemoteConnection;I)V"/>
+		<method name="onConnectionEvent(Landroid/telecom/RemoteConnection;Ljava/lang/String;Landroid/os/Bundle;)V" since="25"/>
+		<method name="onConnectionPropertiesChanged(Landroid/telecom/RemoteConnection;I)V" since="25"/>
+		<method name="onDestroyed(Landroid/telecom/RemoteConnection;)V"/>
+		<method name="onDisconnected(Landroid/telecom/RemoteConnection;Landroid/telecom/DisconnectCause;)V"/>
+		<method name="onExtrasChanged(Landroid/telecom/RemoteConnection;Landroid/os/Bundle;)V"/>
+		<method name="onPostDialChar(Landroid/telecom/RemoteConnection;C)V"/>
+		<method name="onPostDialWait(Landroid/telecom/RemoteConnection;Ljava/lang/String;)V"/>
+		<method name="onRingbackRequested(Landroid/telecom/RemoteConnection;Z)V"/>
+		<method name="onStateChanged(Landroid/telecom/RemoteConnection;I)V"/>
+		<method name="onStatusHintsChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/StatusHints;)V"/>
+		<method name="onVideoProviderChanged(Landroid/telecom/RemoteConnection;Landroid/telecom/RemoteConnection$VideoProvider;)V"/>
+		<method name="onVideoStateChanged(Landroid/telecom/RemoteConnection;I)V"/>
+		<method name="onVoipAudioChanged(Landroid/telecom/RemoteConnection;Z)V"/>
+	</class>
+	<class name="android/telecom/RemoteConnection$VideoProvider" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="registerCallback(Landroid/telecom/RemoteConnection$VideoProvider$Callback;)V"/>
+		<method name="requestCallDataUsage()V"/>
+		<method name="requestCameraCapabilities()V"/>
+		<method name="sendSessionModifyRequest(Landroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
+		<method name="sendSessionModifyResponse(Landroid/telecom/VideoProfile;)V"/>
+		<method name="setCamera(Ljava/lang/String;)V"/>
+		<method name="setDeviceOrientation(I)V"/>
+		<method name="setDisplaySurface(Landroid/view/Surface;)V"/>
+		<method name="setPauseImage(Landroid/net/Uri;)V"/>
+		<method name="setPreviewSurface(Landroid/view/Surface;)V"/>
+		<method name="setZoom(F)V"/>
+		<method name="unregisterCallback(Landroid/telecom/RemoteConnection$VideoProvider$Callback;)V"/>
+	</class>
+	<class name="android/telecom/RemoteConnection$VideoProvider$Callback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCallDataUsageChanged(Landroid/telecom/RemoteConnection$VideoProvider;J)V"/>
+		<method name="onCallSessionEvent(Landroid/telecom/RemoteConnection$VideoProvider;I)V"/>
+		<method name="onCameraCapabilitiesChanged(Landroid/telecom/RemoteConnection$VideoProvider;Landroid/telecom/VideoProfile$CameraCapabilities;)V"/>
+		<method name="onPeerDimensionsChanged(Landroid/telecom/RemoteConnection$VideoProvider;II)V"/>
+		<method name="onSessionModifyRequestReceived(Landroid/telecom/RemoteConnection$VideoProvider;Landroid/telecom/VideoProfile;)V"/>
+		<method name="onSessionModifyResponseReceived(Landroid/telecom/RemoteConnection$VideoProvider;ILandroid/telecom/VideoProfile;Landroid/telecom/VideoProfile;)V"/>
+		<method name="onVideoQualityChanged(Landroid/telecom/RemoteConnection$VideoProvider;I)V"/>
+	</class>
+	<class name="android/telecom/StatusHints" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/graphics/drawable/Icon;Landroid/os/Bundle;)V"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getIcon()Landroid/graphics/drawable/Icon;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telecom/TelecomManager" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="acceptHandover(Landroid/net/Uri;ILandroid/telecom/PhoneAccountHandle;)V" since="28"/>
+		<method name="acceptRingingCall()V" since="26" deprecated="29"/>
+		<method name="acceptRingingCall(I)V" since="26" deprecated="29"/>
+		<method name="addNewIncomingCall(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V" since="23"/>
+		<method name="addNewIncomingConference(Landroid/telecom/PhoneAccountHandle;Landroid/os/Bundle;)V" since="31"/>
+		<method name="cancelMissedCallsNotification()V"/>
+		<method name="createManageBlockedNumbersIntent()Landroid/content/Intent;" since="24"/>
+		<method name="endCall()Z" since="28" deprecated="29"/>
+		<method name="getAdnUriForPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="23"/>
+		<method name="getCallCapablePhoneAccounts()Ljava/util/List;" since="23"/>
+		<method name="getDefaultDialerPackage()Ljava/lang/String;" since="23"/>
+		<method name="getDefaultOutgoingPhoneAccount(Ljava/lang/String;)Landroid/telecom/PhoneAccountHandle;" since="23"/>
+		<method name="getLine1Number(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;" since="23"/>
+		<method name="getPhoneAccount(Landroid/telecom/PhoneAccountHandle;)Landroid/telecom/PhoneAccount;" since="23"/>
+		<method name="getSelfManagedPhoneAccounts()Ljava/util/List;" since="26"/>
+		<method name="getSimCallManager()Landroid/telecom/PhoneAccountHandle;" since="23"/>
+		<method name="getSimCallManagerForSubscription(I)Landroid/telecom/PhoneAccountHandle;" since="30"/>
+		<method name="getSystemDialerPackage()Ljava/lang/String;" since="29"/>
+		<method name="getUserSelectedOutgoingPhoneAccount()Landroid/telecom/PhoneAccountHandle;" since="29"/>
+		<method name="getVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;)Ljava/lang/String;" since="23"/>
+		<method name="handleMmi(Ljava/lang/String;)Z"/>
+		<method name="handleMmi(Ljava/lang/String;Landroid/telecom/PhoneAccountHandle;)Z" since="23"/>
+		<method name="hasManageOngoingCallsPermission()Z" since="31"/>
+		<method name="isInCall()Z"/>
+		<method name="isInManagedCall()Z" since="26"/>
+		<method name="isIncomingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z" since="26"/>
+		<method name="isOutgoingCallPermitted(Landroid/telecom/PhoneAccountHandle;)Z" since="26"/>
+		<method name="isTtySupported()Z" since="28"/>
+		<method name="isVoiceMailNumber(Landroid/telecom/PhoneAccountHandle;Ljava/lang/String;)Z" since="23"/>
+		<method name="placeCall(Landroid/net/Uri;Landroid/os/Bundle;)V" since="23"/>
+		<method name="registerPhoneAccount(Landroid/telecom/PhoneAccount;)V" since="23"/>
+		<method name="showInCallScreen(Z)V"/>
+		<method name="silenceRinger()V" since="23"/>
+		<method name="startConference(Ljava/util/List;Landroid/os/Bundle;)V" since="31"/>
+		<method name="unregisterPhoneAccount(Landroid/telecom/PhoneAccountHandle;)V" since="23"/>
+		<field name="ACTION_CHANGE_DEFAULT_DIALER" since="23"/>
+		<field name="ACTION_CHANGE_PHONE_ACCOUNTS" since="23"/>
+		<field name="ACTION_CONFIGURE_PHONE_ACCOUNT" since="23"/>
+		<field name="ACTION_DEFAULT_CALL_SCREENING_APP_CHANGED" since="29"/>
+		<field name="ACTION_DEFAULT_DIALER_CHANGED" since="23"/>
+		<field name="ACTION_INCOMING_CALL" since="23" deprecated="26"/>
+		<field name="ACTION_PHONE_ACCOUNT_REGISTERED" since="26"/>
+		<field name="ACTION_PHONE_ACCOUNT_UNREGISTERED" since="26"/>
+		<field name="ACTION_POST_CALL" since="30"/>
+		<field name="ACTION_SHOW_CALL_ACCESSIBILITY_SETTINGS" since="23"/>
+		<field name="ACTION_SHOW_CALL_SETTINGS"/>
+		<field name="ACTION_SHOW_MISSED_CALLS_NOTIFICATION" since="24"/>
+		<field name="ACTION_SHOW_RESPOND_VIA_SMS_SETTINGS" since="23"/>
+		<field name="DTMF_CHARACTER_PAUSE"/>
+		<field name="DTMF_CHARACTER_WAIT"/>
+		<field name="DURATION_LONG" since="30"/>
+		<field name="DURATION_MEDIUM" since="30"/>
+		<field name="DURATION_SHORT" since="30"/>
+		<field name="DURATION_VERY_SHORT" since="30"/>
+		<field name="EXTRA_CALL_BACK_NUMBER" since="23"/>
+		<field name="EXTRA_CALL_DISCONNECT_CAUSE"/>
+		<field name="EXTRA_CALL_DISCONNECT_MESSAGE"/>
+		<field name="EXTRA_CALL_DURATION" since="30"/>
+		<field name="EXTRA_CALL_NETWORK_TYPE" since="29"/>
+		<field name="EXTRA_CALL_SUBJECT" since="23"/>
+		<field name="EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME" since="23"/>
+		<field name="EXTRA_DEFAULT_CALL_SCREENING_APP_COMPONENT_NAME" since="29"/>
+		<field name="EXTRA_DISCONNECT_CAUSE" since="30"/>
+		<field name="EXTRA_HANDLE" since="30"/>
+		<field name="EXTRA_HAS_PICTURE" since="31"/>
+		<field name="EXTRA_INCOMING_CALL_ADDRESS" since="23"/>
+		<field name="EXTRA_INCOMING_CALL_EXTRAS" since="23"/>
+		<field name="EXTRA_INCOMING_VIDEO_STATE" since="26"/>
+		<field name="EXTRA_IS_DEFAULT_CALL_SCREENING_APP" since="29"/>
+		<field name="EXTRA_LOCATION" since="31"/>
+		<field name="EXTRA_NOTIFICATION_COUNT" since="24"/>
+		<field name="EXTRA_NOTIFICATION_PHONE_NUMBER" since="24"/>
+		<field name="EXTRA_OUTGOING_CALL_EXTRAS" since="23"/>
+		<field name="EXTRA_OUTGOING_PICTURE" since="31"/>
+		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="23"/>
+		<field name="EXTRA_PICTURE_URI" since="31"/>
+		<field name="EXTRA_PRIORITY" since="31"/>
+		<field name="EXTRA_START_CALL_WITH_RTT" since="26"/>
+		<field name="EXTRA_START_CALL_WITH_SPEAKERPHONE"/>
+		<field name="EXTRA_START_CALL_WITH_VIDEO_STATE" since="23"/>
+		<field name="EXTRA_USE_ASSISTED_DIALING" since="30"/>
+		<field name="GATEWAY_ORIGINAL_ADDRESS"/>
+		<field name="GATEWAY_PROVIDER_PACKAGE"/>
+		<field name="METADATA_INCLUDE_EXTERNAL_CALLS" since="25"/>
+		<field name="METADATA_INCLUDE_SELF_MANAGED_CALLS" since="26"/>
+		<field name="METADATA_IN_CALL_SERVICE_CAR_MODE_UI" since="29"/>
+		<field name="METADATA_IN_CALL_SERVICE_RINGING" since="24"/>
+		<field name="METADATA_IN_CALL_SERVICE_UI" since="23"/>
+		<field name="PRESENTATION_ALLOWED"/>
+		<field name="PRESENTATION_PAYPHONE"/>
+		<field name="PRESENTATION_RESTRICTED"/>
+		<field name="PRESENTATION_UNKNOWN"/>
+		<field name="PRIORITY_NORMAL" since="31"/>
+		<field name="PRIORITY_URGENT" since="31"/>
+	</class>
+	<class name="android/telecom/VideoProfile" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getQuality()I"/>
+		<method name="getVideoState()I"/>
+		<method name="isAudioOnly(I)Z"/>
+		<method name="isBidirectional(I)Z"/>
+		<method name="isPaused(I)Z"/>
+		<method name="isReceptionEnabled(I)Z"/>
+		<method name="isTransmissionEnabled(I)Z"/>
+		<method name="isVideo(I)Z"/>
+		<method name="videoStateToString(I)Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+		<field name="QUALITY_DEFAULT"/>
+		<field name="QUALITY_HIGH"/>
+		<field name="QUALITY_LOW"/>
+		<field name="QUALITY_MEDIUM"/>
+		<field name="STATE_AUDIO_ONLY"/>
+		<field name="STATE_BIDIRECTIONAL"/>
+		<field name="STATE_PAUSED"/>
+		<field name="STATE_RX_ENABLED"/>
+		<field name="STATE_TX_ENABLED"/>
+	</class>
+	<class name="android/telecom/VideoProfile$CameraCapabilities" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IIZF)V" since="29"/>
+		<method name="getHeight()I"/>
+		<method name="getMaxZoom()F" since="29"/>
+		<method name="getWidth()I"/>
+		<method name="isZoomSupported()Z" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/AccessNetworkConstants" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="TRANSPORT_TYPE_WLAN" since="30"/>
+		<field name="TRANSPORT_TYPE_WWAN" since="30"/>
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$AccessNetworkType" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="CDMA2000"/>
+		<field name="EUTRAN"/>
+		<field name="GERAN"/>
+		<field name="IWLAN"/>
+		<field name="NGRAN" since="30"/>
+		<field name="UNKNOWN"/>
+		<field name="UTRAN"/>
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$EutranBand" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="BAND_1"/>
+		<field name="BAND_10"/>
+		<field name="BAND_11"/>
+		<field name="BAND_12"/>
+		<field name="BAND_13"/>
+		<field name="BAND_14"/>
+		<field name="BAND_17"/>
+		<field name="BAND_18"/>
+		<field name="BAND_19"/>
+		<field name="BAND_2"/>
+		<field name="BAND_20"/>
+		<field name="BAND_21"/>
+		<field name="BAND_22"/>
+		<field name="BAND_23"/>
+		<field name="BAND_24"/>
+		<field name="BAND_25"/>
+		<field name="BAND_26"/>
+		<field name="BAND_27"/>
+		<field name="BAND_28"/>
+		<field name="BAND_3"/>
+		<field name="BAND_30"/>
+		<field name="BAND_31"/>
+		<field name="BAND_33"/>
+		<field name="BAND_34"/>
+		<field name="BAND_35"/>
+		<field name="BAND_36"/>
+		<field name="BAND_37"/>
+		<field name="BAND_38"/>
+		<field name="BAND_39"/>
+		<field name="BAND_4"/>
+		<field name="BAND_40"/>
+		<field name="BAND_41"/>
+		<field name="BAND_42"/>
+		<field name="BAND_43"/>
+		<field name="BAND_44"/>
+		<field name="BAND_45"/>
+		<field name="BAND_46"/>
+		<field name="BAND_47"/>
+		<field name="BAND_48"/>
+		<field name="BAND_49" since="30"/>
+		<field name="BAND_5"/>
+		<field name="BAND_50" since="30"/>
+		<field name="BAND_51" since="30"/>
+		<field name="BAND_52" since="30"/>
+		<field name="BAND_53" since="30"/>
+		<field name="BAND_6"/>
+		<field name="BAND_65"/>
+		<field name="BAND_66"/>
+		<field name="BAND_68"/>
+		<field name="BAND_7"/>
+		<field name="BAND_70"/>
+		<field name="BAND_71" since="30"/>
+		<field name="BAND_72" since="30"/>
+		<field name="BAND_73" since="30"/>
+		<field name="BAND_74" since="30"/>
+		<field name="BAND_8"/>
+		<field name="BAND_85" since="30"/>
+		<field name="BAND_87" since="30"/>
+		<field name="BAND_88" since="30"/>
+		<field name="BAND_9"/>
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$GeranBand" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="BAND_450"/>
+		<field name="BAND_480"/>
+		<field name="BAND_710"/>
+		<field name="BAND_750"/>
+		<field name="BAND_850"/>
+		<field name="BAND_DCS1800"/>
+		<field name="BAND_E900"/>
+		<field name="BAND_ER900"/>
+		<field name="BAND_P900"/>
+		<field name="BAND_PCS1900"/>
+		<field name="BAND_R900"/>
+		<field name="BAND_T380"/>
+		<field name="BAND_T410"/>
+		<field name="BAND_T810"/>
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$NgranBands" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="BAND_1"/>
+		<field name="BAND_12"/>
+		<field name="BAND_14"/>
+		<field name="BAND_18"/>
+		<field name="BAND_2"/>
+		<field name="BAND_20"/>
+		<field name="BAND_25"/>
+		<field name="BAND_257"/>
+		<field name="BAND_258"/>
+		<field name="BAND_26" since="31"/>
+		<field name="BAND_260"/>
+		<field name="BAND_261"/>
+		<field name="BAND_28"/>
+		<field name="BAND_29"/>
+		<field name="BAND_3"/>
+		<field name="BAND_30"/>
+		<field name="BAND_34"/>
+		<field name="BAND_38"/>
+		<field name="BAND_39"/>
+		<field name="BAND_40"/>
+		<field name="BAND_41"/>
+		<field name="BAND_46" since="31"/>
+		<field name="BAND_48"/>
+		<field name="BAND_5"/>
+		<field name="BAND_50"/>
+		<field name="BAND_51"/>
+		<field name="BAND_53" since="31"/>
+		<field name="BAND_65"/>
+		<field name="BAND_66"/>
+		<field name="BAND_7"/>
+		<field name="BAND_70"/>
+		<field name="BAND_71"/>
+		<field name="BAND_74"/>
+		<field name="BAND_75"/>
+		<field name="BAND_76"/>
+		<field name="BAND_77"/>
+		<field name="BAND_78"/>
+		<field name="BAND_79"/>
+		<field name="BAND_8"/>
+		<field name="BAND_80"/>
+		<field name="BAND_81"/>
+		<field name="BAND_82"/>
+		<field name="BAND_83"/>
+		<field name="BAND_84"/>
+		<field name="BAND_86"/>
+		<field name="BAND_89"/>
+		<field name="BAND_90"/>
+		<field name="BAND_91"/>
+		<field name="BAND_92"/>
+		<field name="BAND_93"/>
+		<field name="BAND_94"/>
+		<field name="BAND_95"/>
+		<field name="BAND_96" since="31"/>
+	</class>
+	<class name="android/telephony/AccessNetworkConstants$UtranBand" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="BAND_1"/>
+		<field name="BAND_10"/>
+		<field name="BAND_11"/>
+		<field name="BAND_12"/>
+		<field name="BAND_13"/>
+		<field name="BAND_14"/>
+		<field name="BAND_19"/>
+		<field name="BAND_2"/>
+		<field name="BAND_20"/>
+		<field name="BAND_21"/>
+		<field name="BAND_22"/>
+		<field name="BAND_25"/>
+		<field name="BAND_26"/>
+		<field name="BAND_3"/>
+		<field name="BAND_4"/>
+		<field name="BAND_5"/>
+		<field name="BAND_6"/>
+		<field name="BAND_7"/>
+		<field name="BAND_8"/>
+		<field name="BAND_9"/>
+		<field name="BAND_A" since="30"/>
+		<field name="BAND_B" since="30"/>
+		<field name="BAND_C" since="30"/>
+		<field name="BAND_D" since="30"/>
+		<field name="BAND_E" since="30"/>
+		<field name="BAND_F" since="30"/>
+	</class>
+	<class name="android/telephony/AvailableNetworkInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(IILjava/util/List;Ljava/util/List;)V"/>
+		<method name="getBands()Ljava/util/List;"/>
+		<method name="getMccMncs()Ljava/util/List;"/>
+		<method name="getPriority()I"/>
+		<method name="getSubId()I"/>
+		<field name="CREATOR"/>
+		<field name="PRIORITY_HIGH"/>
+		<field name="PRIORITY_LOW"/>
+		<field name="PRIORITY_MED"/>
+	</class>
+	<class name="android/telephony/BarringInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBarringServiceInfo(I)Landroid/telephony/BarringInfo$BarringServiceInfo;"/>
+		<field name="BARRING_SERVICE_TYPE_CS_FALLBACK"/>
+		<field name="BARRING_SERVICE_TYPE_CS_SERVICE"/>
+		<field name="BARRING_SERVICE_TYPE_CS_VOICE"/>
+		<field name="BARRING_SERVICE_TYPE_EMERGENCY"/>
+		<field name="BARRING_SERVICE_TYPE_MMTEL_VIDEO"/>
+		<field name="BARRING_SERVICE_TYPE_MMTEL_VOICE"/>
+		<field name="BARRING_SERVICE_TYPE_MO_DATA"/>
+		<field name="BARRING_SERVICE_TYPE_MO_SIGNALLING"/>
+		<field name="BARRING_SERVICE_TYPE_PS_SERVICE"/>
+		<field name="BARRING_SERVICE_TYPE_SMS"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/BarringInfo$BarringServiceInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBarringType()I"/>
+		<method name="getConditionalBarringFactor()I"/>
+		<method name="getConditionalBarringTimeSeconds()I"/>
+		<method name="isBarred()Z"/>
+		<method name="isConditionallyBarred()Z"/>
+		<field name="BARRING_TYPE_CONDITIONAL"/>
+		<field name="BARRING_TYPE_NONE"/>
+		<field name="BARRING_TYPE_UNCONDITIONAL"/>
+		<field name="BARRING_TYPE_UNKNOWN"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CarrierConfigManager" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getConfig()Landroid/os/PersistableBundle;"/>
+		<method name="getConfigByComponentForSubId(Ljava/lang/String;I)Landroid/os/PersistableBundle;" since="30"/>
+		<method name="getConfigForSubId(I)Landroid/os/PersistableBundle;"/>
+		<method name="isConfigForIdentifiedCarrier(Landroid/os/PersistableBundle;)Z" since="28"/>
+		<method name="notifyConfigChangedForSubId(I)V"/>
+		<field name="ACTION_CARRIER_CONFIG_CHANGED"/>
+		<field name="CARRIER_NR_AVAILABILITY_NSA" since="31"/>
+		<field name="CARRIER_NR_AVAILABILITY_SA" since="31"/>
+		<field name="CROSS_SIM_SPN_FORMAT_CARRIER_NAME_ONLY" since="31"/>
+		<field name="CROSS_SIM_SPN_FORMAT_CARRIER_NAME_WITH_BRANDING" since="31"/>
+		<field name="DATA_CYCLE_THRESHOLD_DISABLED" since="26"/>
+		<field name="DATA_CYCLE_USE_PLATFORM_DEFAULT" since="30"/>
+		<field name="ENABLE_EAP_METHOD_PREFIX_BOOL" since="30"/>
+		<field name="EXTRA_REBROADCAST_ON_UNLOCK" since="31"/>
+		<field name="EXTRA_SLOT_INDEX" since="28"/>
+		<field name="EXTRA_SUBSCRIPTION_INDEX" since="28"/>
+		<field name="IMSI_KEY_AVAILABILITY_INT" since="30"/>
+		<field name="KEY_5G_NR_SSRSRP_THRESHOLDS_INT_ARRAY" since="30"/>
+		<field name="KEY_5G_NR_SSRSRQ_THRESHOLDS_INT_ARRAY" since="30"/>
+		<field name="KEY_5G_NR_SSSINR_THRESHOLDS_INT_ARRAY" since="30"/>
+		<field name="KEY_ADDITIONAL_CALL_SETTING_BOOL"/>
+		<field name="KEY_ALLOW_ADDING_APNS_BOOL" since="24"/>
+		<field name="KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL" since="25"/>
+		<field name="KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL"/>
+		<field name="KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL" since="24"/>
+		<field name="KEY_ALLOW_HOLD_CALL_DURING_EMERGENCY_BOOL" since="30"/>
+		<field name="KEY_ALLOW_HOLD_VIDEO_CALL_BOOL" since="30"/>
+		<field name="KEY_ALLOW_LOCAL_DTMF_TONES_BOOL"/>
+		<field name="KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL" since="25"/>
+		<field name="KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL" since="24"/>
+		<field name="KEY_ALLOW_VIDEO_CALLING_FALLBACK_BOOL" since="30"/>
+		<field name="KEY_ALWAYS_SHOW_DATA_RAT_ICON_BOOL" since="30"/>
+		<field name="KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL" since="24" deprecated="30"/>
+		<field name="KEY_ALWAYS_SHOW_PRIMARY_SIGNAL_BAR_IN_OPPORTUNISTIC_NETWORK_BOOLEAN" since="30"/>
+		<field name="KEY_APN_EXPAND_BOOL"/>
+		<field name="KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY" since="30"/>
+		<field name="KEY_AUTO_RETRY_ENABLED_BOOL"/>
+		<field name="KEY_CALL_BARRING_DEFAULT_SERVICE_CLASS_INT" since="31"/>
+		<field name="KEY_CALL_BARRING_SUPPORTS_DEACTIVATE_ALL_BOOL" since="29"/>
+		<field name="KEY_CALL_BARRING_SUPPORTS_PASSWORD_CHANGE_BOOL" since="29"/>
+		<field name="KEY_CALL_BARRING_VISIBILITY_BOOL" since="29"/>
+		<field name="KEY_CALL_COMPOSER_PICTURE_SERVER_URL_STRING" since="31"/>
+		<field name="KEY_CALL_FORWARDING_BLOCKS_WHILE_ROAMING_STRING_ARRAY" since="26"/>
+		<field name="KEY_CALL_REDIRECTION_SERVICE_COMPONENT_NAME_STRING" since="30"/>
+		<field name="KEY_CARRIER_ALLOW_DEFLECT_IMS_CALL_BOOL" since="30"/>
+		<field name="KEY_CARRIER_ALLOW_TURNOFF_IMS_BOOL"/>
+		<field name="KEY_CARRIER_APP_REQUIRED_DURING_SIM_SETUP_BOOL" since="30"/>
+		<field name="KEY_CARRIER_CALL_SCREENING_APP_STRING" since="29"/>
+		<field name="KEY_CARRIER_CERTIFICATE_STRING_ARRAY" since="30"/>
+		<field name="KEY_CARRIER_CONFIG_APPLIED_BOOL" since="30"/>
+		<field name="KEY_CARRIER_CONFIG_VERSION_STRING" since="29"/>
+		<field name="KEY_CARRIER_CROSS_SIM_IMS_AVAILABLE_BOOL" since="31"/>
+		<field name="KEY_CARRIER_DATA_CALL_PERMANENT_FAILURE_STRINGS" since="26"/>
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY" since="30"/>
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_DEFAULT_NETWORK_AVAILABLE" since="30"/>
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY" since="30"/>
+		<field name="KEY_CARRIER_DEFAULT_ACTIONS_ON_RESET" since="30"/>
+		<field name="KEY_CARRIER_DEFAULT_REDIRECTION_URL_STRING_ARRAY" since="30"/>
+		<field name="KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL" since="30"/>
+		<field name="KEY_CARRIER_DEFAULT_WFC_IMS_MODE_INT" since="29"/>
+		<field name="KEY_CARRIER_DEFAULT_WFC_IMS_ROAMING_MODE_INT" since="29"/>
+		<field name="KEY_CARRIER_FORCE_DISABLE_ETWS_CMAS_TEST_BOOL" since="24" deprecated="30"/>
+		<field name="KEY_CARRIER_IMS_GBA_REQUIRED_BOOL" since="24"/>
+		<field name="KEY_CARRIER_INSTANT_LETTERING_AVAILABLE_BOOL" since="24"/>
+		<field name="KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING" since="24"/>
+		<field name="KEY_CARRIER_INSTANT_LETTERING_ESCAPED_CHARS_STRING" since="24"/>
+		<field name="KEY_CARRIER_INSTANT_LETTERING_INVALID_CHARS_STRING" since="24"/>
+		<field name="KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT" since="24"/>
+		<field name="KEY_CARRIER_NAME_OVERRIDE_BOOL" since="28"/>
+		<field name="KEY_CARRIER_NAME_STRING" since="28"/>
+		<field name="KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY" since="31"/>
+		<field name="KEY_CARRIER_PROVISIONS_WIFI_MERGED_NETWORKS_BOOL" since="31"/>
+		<field name="KEY_CARRIER_RCS_PROVISIONING_REQUIRED_BOOL" since="30"/>
+		<field name="KEY_CARRIER_SETTINGS_ACTIVITY_COMPONENT_NAME_STRING" since="30"/>
+		<field name="KEY_CARRIER_SETTINGS_ENABLE_BOOL"/>
+		<field name="KEY_CARRIER_SUPPORTS_SS_OVER_UT_BOOL" since="29"/>
+		<field name="KEY_CARRIER_USE_IMS_FIRST_FOR_EMERGENCY_BOOL" since="24"/>
+		<field name="KEY_CARRIER_USSD_METHOD_INT" since="31"/>
+		<field name="KEY_CARRIER_UT_PROVISIONING_REQUIRED_BOOL" since="29"/>
+		<field name="KEY_CARRIER_VOLTE_AVAILABLE_BOOL"/>
+		<field name="KEY_CARRIER_VOLTE_OVERRIDE_WFC_PROVISIONING_BOOL" since="30"/>
+		<field name="KEY_CARRIER_VOLTE_PROVISIONED_BOOL" since="26"/>
+		<field name="KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL"/>
+		<field name="KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL"/>
+		<field name="KEY_CARRIER_VT_AVAILABLE_BOOL"/>
+		<field name="KEY_CARRIER_VVM_PACKAGE_NAME_STRING" deprecated="26"/>
+		<field name="KEY_CARRIER_VVM_PACKAGE_NAME_STRING_ARRAY" since="26"/>
+		<field name="KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL"/>
+		<field name="KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL" since="24"/>
+		<field name="KEY_CDMA_3WAYCALL_FLASH_DELAY_INT" since="26"/>
+		<field name="KEY_CDMA_DTMF_TONE_DELAY_INT" since="24"/>
+		<field name="KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY"/>
+		<field name="KEY_CDMA_ROAMING_MODE_INT" since="28"/>
+		<field name="KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY"/>
+		<field name="KEY_CHECK_PRICING_WITH_CARRIER_FOR_DATA_ROAMING_BOOL" since="30"/>
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_BOOL" since="24"/>
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING" since="24"/>
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING" since="24"/>
+		<field name="KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING" since="24"/>
+		<field name="KEY_CONFIG_IMS_MMTEL_PACKAGE_OVERRIDE_STRING" since="30"/>
+		<field name="KEY_CONFIG_IMS_PACKAGE_OVERRIDE_STRING" since="26" deprecated="30"/>
+		<field name="KEY_CONFIG_IMS_RCS_PACKAGE_OVERRIDE_STRING" since="30"/>
+		<field name="KEY_CONFIG_PLANS_PACKAGE_OVERRIDE_STRING" since="28"/>
+		<field name="KEY_CONFIG_TELEPHONY_USE_OWN_NUMBER_FOR_VOICEMAIL_BOOL" since="28"/>
+		<field name="KEY_CONFIG_WIFI_DISABLE_IN_ECBM" since="30"/>
+		<field name="KEY_CROSS_SIM_SPN_FORMAT_INT" since="31"/>
+		<field name="KEY_CSP_ENABLED_BOOL"/>
+		<field name="KEY_DATA_LIMIT_NOTIFICATION_BOOL" since="30"/>
+		<field name="KEY_DATA_LIMIT_THRESHOLD_BYTES_LONG" since="26"/>
+		<field name="KEY_DATA_RAPID_NOTIFICATION_BOOL" since="30"/>
+		<field name="KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG" since="30"/>
+		<field name="KEY_DATA_WARNING_NOTIFICATION_BOOL" since="30"/>
+		<field name="KEY_DATA_WARNING_THRESHOLD_BYTES_LONG" since="26"/>
+		<field name="KEY_DEFAULT_SIM_CALL_MANAGER_STRING"/>
+		<field name="KEY_DEFAULT_VM_NUMBER_ROAMING_AND_IMS_UNREGISTERED_STRING" since="30"/>
+		<field name="KEY_DEFAULT_VM_NUMBER_STRING" since="26"/>
+		<field name="KEY_DIAL_STRING_REPLACE_STRING_ARRAY" since="26"/>
+		<field name="KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL"/>
+		<field name="KEY_DISABLE_CHARGE_INDICATION_BOOL" since="30"/>
+		<field name="KEY_DISABLE_SUPPLEMENTARY_SERVICES_IN_AIRPLANE_MODE_BOOL" since="30"/>
+		<field name="KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY" since="30"/>
+		<field name="KEY_DISPLAY_CALL_STRENGTH_INDICATOR_BOOL" since="31"/>
+		<field name="KEY_DISPLAY_HD_AUDIO_PROPERTY_BOOL" since="27"/>
+		<field name="KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL" since="25"/>
+		<field name="KEY_DTMF_TYPE_ENABLED_BOOL"/>
+		<field name="KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT" since="24"/>
+		<field name="KEY_EDITABLE_ENHANCED_4G_LTE_BOOL" since="24"/>
+		<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_BOOL" since="26"/>
+		<field name="KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL" since="28"/>
+		<field name="KEY_EDITABLE_WFC_MODE_BOOL" since="30"/>
+		<field name="KEY_EDITABLE_WFC_ROAMING_MODE_BOOL" since="30"/>
+		<field name="KEY_EMERGENCY_NOTIFICATION_DELAY_INT" since="30"/>
+		<field name="KEY_EMERGENCY_NUMBER_PREFIX_STRING_ARRAY" since="29"/>
+		<field name="KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL"/>
+		<field name="KEY_ENHANCED_4G_LTE_ON_BY_DEFAULT_BOOL" since="29"/>
+		<field name="KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT" since="30"/>
+		<field name="KEY_FORCE_HOME_NETWORK_BOOL"/>
+		<field name="KEY_GSM_DTMF_TONE_DELAY_INT" since="24"/>
+		<field name="KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY"/>
+		<field name="KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY"/>
+		<field name="KEY_HAS_IN_CALL_NOISE_SUPPRESSION_BOOL"/>
+		<field name="KEY_HIDE_CARRIER_NETWORK_SETTINGS_BOOL"/>
+		<field name="KEY_HIDE_ENABLE_2G" since="31"/>
+		<field name="KEY_HIDE_ENHANCED_4G_LTE_BOOL" since="26"/>
+		<field name="KEY_HIDE_IMS_APN_BOOL" since="24"/>
+		<field name="KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL" since="30"/>
+		<field name="KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL" since="24"/>
+		<field name="KEY_HIDE_PRESET_APN_DETAILS_BOOL" since="29"/>
+		<field name="KEY_HIDE_SIM_LOCK_SETTINGS_BOOL"/>
+		<field name="KEY_HIDE_TTY_HCO_VCO_WITH_RTT_BOOL" since="31"/>
+		<field name="KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS" since="30"/>
+		<field name="KEY_IGNORE_RTT_MODE_SETTING_BOOL" since="30"/>
+		<field name="KEY_IGNORE_SIM_NETWORK_LOCKED_EVENTS_BOOL"/>
+		<field name="KEY_IMS_CONFERENCE_SIZE_LIMIT_INT" since="26"/>
+		<field name="KEY_IMS_DTMF_TONE_DELAY_INT" since="24"/>
+		<field name="KEY_IS_IMS_CONFERENCE_SIZE_ENFORCED_BOOL" since="26"/>
+		<field name="KEY_LTE_ENABLED_BOOL" since="30"/>
+		<field name="KEY_LTE_RSRQ_THRESHOLDS_INT_ARRAY" since="30"/>
+		<field name="KEY_LTE_RSSNR_THRESHOLDS_INT_ARRAY" since="30"/>
+		<field name="KEY_MDN_IS_ADDITIONAL_VOICEMAIL_NUMBER_BOOL" since="26"/>
+		<field name="KEY_MMS_ALIAS_ENABLED_BOOL"/>
+		<field name="KEY_MMS_ALIAS_MAX_CHARS_INT"/>
+		<field name="KEY_MMS_ALIAS_MIN_CHARS_INT"/>
+		<field name="KEY_MMS_ALLOW_ATTACH_AUDIO_BOOL"/>
+		<field name="KEY_MMS_APPEND_TRANSACTION_ID_BOOL"/>
+		<field name="KEY_MMS_CLOSE_CONNECTION_BOOL" since="30"/>
+		<field name="KEY_MMS_EMAIL_GATEWAY_NUMBER_STRING"/>
+		<field name="KEY_MMS_GROUP_MMS_ENABLED_BOOL"/>
+		<field name="KEY_MMS_HTTP_PARAMS_STRING"/>
+		<field name="KEY_MMS_HTTP_SOCKET_TIMEOUT_INT"/>
+		<field name="KEY_MMS_MAX_IMAGE_HEIGHT_INT"/>
+		<field name="KEY_MMS_MAX_IMAGE_WIDTH_INT"/>
+		<field name="KEY_MMS_MAX_MESSAGE_SIZE_INT"/>
+		<field name="KEY_MMS_MESSAGE_TEXT_MAX_SIZE_INT"/>
+		<field name="KEY_MMS_MMS_DELIVERY_REPORT_ENABLED_BOOL"/>
+		<field name="KEY_MMS_MMS_ENABLED_BOOL"/>
+		<field name="KEY_MMS_MMS_READ_REPORT_ENABLED_BOOL"/>
+		<field name="KEY_MMS_MULTIPART_SMS_ENABLED_BOOL"/>
+		<field name="KEY_MMS_NAI_SUFFIX_STRING"/>
+		<field name="KEY_MMS_NOTIFY_WAP_MMSC_ENABLED_BOOL"/>
+		<field name="KEY_MMS_RECIPIENT_LIMIT_INT"/>
+		<field name="KEY_MMS_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES_BOOL"/>
+		<field name="KEY_MMS_SHOW_CELL_BROADCAST_APP_LINKS_BOOL"/>
+		<field name="KEY_MMS_SMS_DELIVERY_REPORT_ENABLED_BOOL"/>
+		<field name="KEY_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_INT"/>
+		<field name="KEY_MMS_SMS_TO_MMS_TEXT_THRESHOLD_INT"/>
+		<field name="KEY_MMS_SUBJECT_MAX_LENGTH_INT"/>
+		<field name="KEY_MMS_SUPPORT_HTTP_CHARSET_HEADER_BOOL"/>
+		<field name="KEY_MMS_SUPPORT_MMS_CONTENT_DISPOSITION_BOOL"/>
+		<field name="KEY_MMS_UA_PROF_TAG_NAME_STRING"/>
+		<field name="KEY_MMS_UA_PROF_URL_STRING"/>
+		<field name="KEY_MMS_USER_AGENT_STRING"/>
+		<field name="KEY_MONTHLY_DATA_CYCLE_DAY_INT" since="26"/>
+		<field name="KEY_ONLY_AUTO_SELECT_IN_HOME_NETWORK_BOOL" since="30"/>
+		<field name="KEY_ONLY_SINGLE_DC_ALLOWED_INT_ARRAY" since="26"/>
+		<field name="KEY_OPERATOR_SELECTION_EXPAND_BOOL"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_BACKOFF_TIME_LONG" since="30"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_EXIT_HYSTERESIS_TIME_LONG" since="30"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_DATA_SWITCH_HYSTERESIS_TIME_LONG" since="29"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_OR_EXIT_HYSTERESIS_TIME_LONG" since="29"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_BANDWIDTH_INT" since="29"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSRP_INT" since="29"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_ENTRY_THRESHOLD_RSSNR_INT" since="29"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSRP_INT" since="29"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_EXIT_THRESHOLD_RSSNR_INT" since="29"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_MAX_BACKOFF_TIME_LONG" since="30"/>
+		<field name="KEY_OPPORTUNISTIC_NETWORK_PING_PONG_TIME_LONG" since="30"/>
+		<field name="KEY_PING_TEST_BEFORE_DATA_SWITCH_BOOL" since="30"/>
+		<field name="KEY_PREFER_2G_BOOL"/>
+		<field name="KEY_PREVENT_CLIR_ACTIVATION_AND_DEACTIVATION_CODE_BOOL" since="30"/>
+		<field name="KEY_RADIO_RESTART_FAILURE_CAUSES_INT_ARRAY" since="29"/>
+		<field name="KEY_RCS_CONFIG_SERVER_URL_STRING" since="26"/>
+		<field name="KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY" since="30"/>
+		<field name="KEY_READ_ONLY_APN_TYPES_STRING_ARRAY" since="30"/>
+		<field name="KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL" since="24"/>
+		<field name="KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL" since="26" deprecated="29"/>
+		<field name="KEY_RTT_AUTO_UPGRADE_BOOL" since="31"/>
+		<field name="KEY_RTT_DOWNGRADE_SUPPORTED_BOOL" since="31"/>
+		<field name="KEY_RTT_SUPPORTED_BOOL" since="28"/>
+		<field name="KEY_RTT_SUPPORTED_FOR_VT_BOOL" since="31"/>
+		<field name="KEY_RTT_SUPPORTED_WHILE_ROAMING_BOOL" since="31"/>
+		<field name="KEY_RTT_UPGRADE_SUPPORTED_BOOL" since="31"/>
+		<field name="KEY_RTT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_VT_CALL_BOOL" since="31"/>
+		<field name="KEY_SHOW_4G_FOR_3G_DATA_ICON_BOOL" since="30"/>
+		<field name="KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL" since="30"/>
+		<field name="KEY_SHOW_APN_SETTING_CDMA_BOOL"/>
+		<field name="KEY_SHOW_BLOCKING_PAY_PHONE_OPTION_BOOL" since="30"/>
+		<field name="KEY_SHOW_CALL_BLOCKING_DISABLED_NOTIFICATION_ALWAYS_BOOL" since="29"/>
+		<field name="KEY_SHOW_CDMA_CHOICES_BOOL"/>
+		<field name="KEY_SHOW_FORWARDED_NUMBER_BOOL" since="30"/>
+		<field name="KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL" since="24"/>
+		<field name="KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL" since="30"/>
+		<field name="KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL"/>
+		<field name="KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL" since="28"/>
+		<field name="KEY_SHOW_VIDEO_CALL_CHARGES_ALERT_DIALOG_BOOL" since="30"/>
+		<field name="KEY_SHOW_WFC_LOCATION_PRIVACY_POLICY_BOOL" since="30"/>
+		<field name="KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL" since="26"/>
+		<field name="KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL"/>
+		<field name="KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL" since="26"/>
+		<field name="KEY_SUPPORTS_CALL_COMPOSER_BOOL" since="31"/>
+		<field name="KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_DTMF_BOOL" since="31"/>
+		<field name="KEY_SUPPORTS_DEVICE_TO_DEVICE_COMMUNICATION_USING_RTP_BOOL" since="31"/>
+		<field name="KEY_SUPPORTS_SDP_NEGOTIATION_OF_D2D_RTP_HEADER_EXTENSIONS_BOOL" since="31"/>
+		<field name="KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL" since="26"/>
+		<field name="KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL" since="31"/>
+		<field name="KEY_SUPPORT_ADHOC_CONFERENCE_CALLS_BOOL" since="31"/>
+		<field name="KEY_SUPPORT_CLIR_NETWORK_DEFAULT_BOOL" since="29"/>
+		<field name="KEY_SUPPORT_CONFERENCE_CALL_BOOL" since="24"/>
+		<field name="KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL" since="29"/>
+		<field name="KEY_SUPPORT_ENHANCED_CALL_BLOCKING_BOOL" since="30"/>
+		<field name="KEY_SUPPORT_IMS_CONFERENCE_EVENT_PACKAGE_BOOL" since="30"/>
+		<field name="KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL"/>
+		<field name="KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL"/>
+		<field name="KEY_SUPPORT_TDSCDMA_BOOL" since="30"/>
+		<field name="KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY" since="30"/>
+		<field name="KEY_SWITCH_DATA_TO_PRIMARY_IF_PRIMARY_IS_OOS_BOOL" since="30"/>
+		<field name="KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL" since="25"/>
+		<field name="KEY_TTY_SUPPORTED_BOOL" since="29"/>
+		<field name="KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY" since="30"/>
+		<field name="KEY_USE_ACS_FOR_RCS_BOOL" since="31"/>
+		<field name="KEY_USE_HFA_FOR_PROVISIONING_BOOL"/>
+		<field name="KEY_USE_IP_FOR_CALLING_INDICATOR_BOOL" since="31"/>
+		<field name="KEY_USE_OTASP_FOR_PROVISIONING_BOOL"/>
+		<field name="KEY_USE_RCS_PRESENCE_BOOL" since="24" deprecated="31"/>
+		<field name="KEY_USE_RCS_SIP_OPTIONS_BOOL" since="30"/>
+		<field name="KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL" since="30"/>
+		<field name="KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL"/>
+		<field name="KEY_VOICE_PRIVACY_DISABLE_UI_BOOL"/>
+		<field name="KEY_VOLTE_REPLACEMENT_RAT_INT"/>
+		<field name="KEY_VT_UPGRADE_SUPPORTED_FOR_DOWNGRADED_RTT_CALL_BOOL" since="31"/>
+		<field name="KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL" since="24"/>
+		<field name="KEY_VVM_CLIENT_PREFIX_STRING" since="26"/>
+		<field name="KEY_VVM_DESTINATION_NUMBER_STRING"/>
+		<field name="KEY_VVM_DISABLED_CAPABILITIES_STRING_ARRAY" since="26"/>
+		<field name="KEY_VVM_LEGACY_MODE_ENABLED_BOOL" since="26"/>
+		<field name="KEY_VVM_PORT_NUMBER_INT"/>
+		<field name="KEY_VVM_PREFETCH_BOOL" since="24"/>
+		<field name="KEY_VVM_SSL_ENABLED_BOOL" since="26"/>
+		<field name="KEY_VVM_TYPE_STRING"/>
+		<field name="KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING" since="30"/>
+		<field name="KEY_WORLD_MODE_ENABLED_BOOL" since="30"/>
+		<field name="KEY_WORLD_PHONE_BOOL"/>
+		<field name="SERVICE_CLASS_NONE" since="31"/>
+		<field name="SERVICE_CLASS_VOICE" since="31"/>
+		<field name="USSD_OVER_CS_ONLY" since="31"/>
+		<field name="USSD_OVER_CS_PREFERRED" since="31"/>
+		<field name="USSD_OVER_IMS_ONLY" since="31"/>
+		<field name="USSD_OVER_IMS_PREFERRED" since="31"/>
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Apn" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="KEY_PREFIX" deprecated="31"/>
+		<field name="KEY_SETTINGS_DEFAULT_PROTOCOL_STRING"/>
+		<field name="KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING"/>
+		<field name="PROTOCOL_IPV4"/>
+		<field name="PROTOCOL_IPV4V6"/>
+		<field name="PROTOCOL_IPV6"/>
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Gps" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="KEY_PERSIST_LPP_MODE_BOOL"/>
+		<field name="KEY_PREFIX"/>
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Ims" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL" since="31"/>
+		<field name="KEY_ENABLE_PRESENCE_GROUP_SUBSCRIBE_BOOL" since="31"/>
+		<field name="KEY_ENABLE_PRESENCE_PUBLISH_BOOL" since="31"/>
+		<field name="KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL" since="31"/>
+		<field name="KEY_NON_RCS_CAPABILITIES_CACHE_EXPIRATION_SEC_INT" since="31"/>
+		<field name="KEY_PREFIX"/>
+		<field name="KEY_RCS_BULK_CAPABILITY_EXCHANGE_BOOL" since="31"/>
+		<field name="KEY_RCS_FEATURE_TAG_ALLOWED_STRING_ARRAY" since="31"/>
+		<field name="KEY_WIFI_OFF_DEFERRING_TIME_MILLIS_INT"/>
+	</class>
+	<class name="android/telephony/CarrierConfigManager$ImsServiceEntitlement" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="KEY_ENTITLEMENT_SERVER_URL_STRING"/>
+		<field name="KEY_FCM_SENDER_ID_STRING"/>
+		<field name="KEY_IMS_PROVISIONING_BOOL"/>
+		<field name="KEY_PREFIX"/>
+		<field name="KEY_SHOW_VOWIFI_WEBVIEW_BOOL"/>
+	</class>
+	<class name="android/telephony/CarrierConfigManager$Iwlan" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="AUTHENTICATION_METHOD_CERT"/>
+		<field name="AUTHENTICATION_METHOD_EAP_ONLY"/>
+		<field name="EPDG_ADDRESS_CELLULAR_LOC"/>
+		<field name="EPDG_ADDRESS_PCO"/>
+		<field name="EPDG_ADDRESS_PLMN"/>
+		<field name="EPDG_ADDRESS_STATIC"/>
+		<field name="ID_TYPE_FQDN"/>
+		<field name="ID_TYPE_KEY_ID"/>
+		<field name="ID_TYPE_RFC822_ADDR"/>
+		<field name="KEY_ADD_KE_TO_CHILD_SESSION_REKEY_BOOL"/>
+		<field name="KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT"/>
+		<field name="KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT"/>
+		<field name="KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY"/>
+		<field name="KEY_CHILD_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY"/>
+		<field name="KEY_DIFFIE_HELLMAN_GROUPS_INT_ARRAY"/>
+		<field name="KEY_DPD_TIMER_SEC_INT"/>
+		<field name="KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY"/>
+		<field name="KEY_EPDG_AUTHENTICATION_METHOD_INT"/>
+		<field name="KEY_EPDG_PCO_ID_IPV4_INT"/>
+		<field name="KEY_EPDG_PCO_ID_IPV6_INT"/>
+		<field name="KEY_EPDG_STATIC_ADDRESS_ROAMING_STRING"/>
+		<field name="KEY_EPDG_STATIC_ADDRESS_STRING"/>
+		<field name="KEY_IKE_LOCAL_ID_TYPE_INT"/>
+		<field name="KEY_IKE_REKEY_HARD_TIMER_SEC_INT"/>
+		<field name="KEY_IKE_REKEY_SOFT_TIMER_SEC_INT"/>
+		<field name="KEY_IKE_REMOTE_ID_TYPE_INT"/>
+		<field name="KEY_IKE_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY"/>
+		<field name="KEY_IKE_SESSION_AES_CTR_KEY_SIZE_INT_ARRAY"/>
+		<field name="KEY_MAX_RETRIES_INT"/>
+		<field name="KEY_MCC_MNCS_STRING_ARRAY"/>
+		<field name="KEY_NATT_KEEP_ALIVE_TIMER_SEC_INT"/>
+		<field name="KEY_PREFIX"/>
+		<field name="KEY_RETRANSMIT_TIMER_MSEC_INT_ARRAY"/>
+		<field name="KEY_SUPPORTED_CHILD_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY"/>
+		<field name="KEY_SUPPORTED_IKE_SESSION_ENCRYPTION_ALGORITHMS_INT_ARRAY"/>
+		<field name="KEY_SUPPORTED_INTEGRITY_ALGORITHMS_INT_ARRAY"/>
+		<field name="KEY_SUPPORTED_PRF_ALGORITHMS_INT_ARRAY"/>
+	</class>
+	<class name="android/telephony/CellIdentity" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getOperatorAlphaLong()Ljava/lang/CharSequence;"/>
+		<method name="getOperatorAlphaShort()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellIdentityCdma" since="17">
+		<extends name="android/telephony/CellIdentity" since="28"/>
+		<extends name="java/lang/Object" removed="28"/>
+		<implements name="android/os/Parcelable" removed="28"/>
+		<method name="getBasestationId()I"/>
+		<method name="getLatitude()I"/>
+		<method name="getLongitude()I"/>
+		<method name="getNetworkId()I"/>
+		<method name="getSystemId()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellIdentityGsm" since="17">
+		<extends name="android/telephony/CellIdentity" since="28"/>
+		<extends name="java/lang/Object" removed="28"/>
+		<implements name="android/os/Parcelable" removed="28"/>
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
+		<method name="getArfcn()I" since="24"/>
+		<method name="getBsic()I" since="24"/>
+		<method name="getCid()I"/>
+		<method name="getLac()I"/>
+		<method name="getMcc()I" deprecated="28"/>
+		<method name="getMccString()Ljava/lang/String;" since="28"/>
+		<method name="getMnc()I" deprecated="28"/>
+		<method name="getMncString()Ljava/lang/String;" since="28"/>
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28"/>
+		<method name="getPsc()I" deprecated="18"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellIdentityLte" since="17">
+		<extends name="android/telephony/CellIdentity" since="28"/>
+		<extends name="java/lang/Object" removed="28"/>
+		<implements name="android/os/Parcelable" removed="28"/>
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
+		<method name="getBands()[I" since="30"/>
+		<method name="getBandwidth()I" since="28"/>
+		<method name="getCi()I"/>
+		<method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30"/>
+		<method name="getEarfcn()I" since="24"/>
+		<method name="getMcc()I" deprecated="28"/>
+		<method name="getMccString()Ljava/lang/String;" since="28"/>
+		<method name="getMnc()I" deprecated="28"/>
+		<method name="getMncString()Ljava/lang/String;" since="28"/>
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28"/>
+		<method name="getPci()I"/>
+		<method name="getTac()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellIdentityNr" since="29">
+		<extends name="android/telephony/CellIdentity"/>
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
+		<method name="getBands()[I" since="30"/>
+		<method name="getMccString()Ljava/lang/String;"/>
+		<method name="getMncString()Ljava/lang/String;"/>
+		<method name="getNci()J"/>
+		<method name="getNrarfcn()I"/>
+		<method name="getPci()I"/>
+		<method name="getTac()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellIdentityTdscdma" since="28">
+		<extends name="android/telephony/CellIdentity"/>
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
+		<method name="getCid()I"/>
+		<method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30"/>
+		<method name="getCpid()I"/>
+		<method name="getLac()I"/>
+		<method name="getMccString()Ljava/lang/String;"/>
+		<method name="getMncString()Ljava/lang/String;"/>
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="29"/>
+		<method name="getUarfcn()I" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellIdentityWcdma" since="18">
+		<extends name="android/telephony/CellIdentity" since="28"/>
+		<extends name="java/lang/Object" removed="28"/>
+		<implements name="android/os/Parcelable" removed="28"/>
+		<method name="getAdditionalPlmns()Ljava/util/Set;" since="30"/>
+		<method name="getCid()I"/>
+		<method name="getClosedSubscriberGroupInfo()Landroid/telephony/ClosedSubscriberGroupInfo;" since="30"/>
+		<method name="getLac()I"/>
+		<method name="getMcc()I" deprecated="28"/>
+		<method name="getMccString()Ljava/lang/String;" since="28"/>
+		<method name="getMnc()I" deprecated="28"/>
+		<method name="getMncString()Ljava/lang/String;" since="28"/>
+		<method name="getMobileNetworkOperator()Ljava/lang/String;" since="28"/>
+		<method name="getPsc()I"/>
+		<method name="getUarfcn()I" since="24"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellInfo" since="17">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCellConnectionStatus()I" since="28"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentity;" since="30"/>
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrength;" since="30"/>
+		<method name="getTimeStamp()J" deprecated="30"/>
+		<method name="getTimestampMillis()J" since="30"/>
+		<method name="isRegistered()Z"/>
+		<field name="CONNECTION_NONE" since="28"/>
+		<field name="CONNECTION_PRIMARY_SERVING" since="28"/>
+		<field name="CONNECTION_SECONDARY_SERVING" since="28"/>
+		<field name="CONNECTION_UNKNOWN" since="28"/>
+		<field name="CREATOR"/>
+		<field name="UNAVAILABLE" since="29"/>
+		<field name="UNAVAILABLE_LONG" since="29"/>
+	</class>
+	<class name="android/telephony/CellInfoCdma" since="17">
+		<extends name="android/telephony/CellInfo"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityCdma;"/>
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthCdma;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellInfoGsm" since="17">
+		<extends name="android/telephony/CellInfo"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityGsm;"/>
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthGsm;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellInfoLte" since="17">
+		<extends name="android/telephony/CellInfo"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityLte;"/>
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthLte;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellInfoNr" since="29">
+		<extends name="android/telephony/CellInfo"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentity;"/>
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrength;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellInfoTdscdma" since="29">
+		<extends name="android/telephony/CellInfo"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityTdscdma;"/>
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthTdscdma;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellInfoWcdma" since="18">
+		<extends name="android/telephony/CellInfo"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentityWcdma;"/>
+		<method name="getCellSignalStrength()Landroid/telephony/CellSignalStrengthWcdma;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellLocation" since="1" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="getEmpty()Landroid/telephony/CellLocation;" deprecated="31"/>
+		<method name="requestLocationUpdate()V" deprecated="31"/>
+	</class>
+	<class name="android/telephony/CellSignalStrength" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="getAsuLevel()I"/>
+		<method name="getDbm()I"/>
+		<method name="getLevel()I"/>
+		<field name="SIGNAL_STRENGTH_GOOD" since="23"/>
+		<field name="SIGNAL_STRENGTH_GREAT" since="23"/>
+		<field name="SIGNAL_STRENGTH_MODERATE" since="23"/>
+		<field name="SIGNAL_STRENGTH_NONE_OR_UNKNOWN" since="23"/>
+		<field name="SIGNAL_STRENGTH_POOR" since="23"/>
+	</class>
+	<class name="android/telephony/CellSignalStrengthCdma" since="17">
+		<extends name="android/telephony/CellSignalStrength"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCdmaDbm()I"/>
+		<method name="getCdmaEcio()I"/>
+		<method name="getCdmaLevel()I"/>
+		<method name="getEvdoDbm()I"/>
+		<method name="getEvdoEcio()I"/>
+		<method name="getEvdoLevel()I"/>
+		<method name="getEvdoSnr()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellSignalStrengthGsm" since="17">
+		<extends name="android/telephony/CellSignalStrength"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBitErrorRate()I" since="29"/>
+		<method name="getRssi()I" since="30"/>
+		<method name="getTimingAdvance()I" since="26"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellSignalStrengthLte" since="17">
+		<extends name="android/telephony/CellSignalStrength"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCqi()I" since="26"/>
+		<method name="getCqiTableIndex()I" since="31"/>
+		<method name="getRsrp()I" since="26"/>
+		<method name="getRsrq()I" since="26"/>
+		<method name="getRssi()I" since="29"/>
+		<method name="getRssnr()I" since="26"/>
+		<method name="getTimingAdvance()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellSignalStrengthNr" since="29">
+		<extends name="android/telephony/CellSignalStrength"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCsiCqiReport()Ljava/util/List;" since="31"/>
+		<method name="getCsiCqiTableIndex()I" since="31"/>
+		<method name="getCsiRsrp()I"/>
+		<method name="getCsiRsrq()I"/>
+		<method name="getCsiSinr()I"/>
+		<method name="getSsRsrp()I"/>
+		<method name="getSsRsrq()I"/>
+		<method name="getSsSinr()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellSignalStrengthTdscdma" since="29">
+		<extends name="android/telephony/CellSignalStrength"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getRscp()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/CellSignalStrengthWcdma" since="18">
+		<extends name="android/telephony/CellSignalStrength"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getEcNo()I" since="30"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/ClosedSubscriberGroupInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCsgIdentity()I"/>
+		<method name="getCsgIndicator()Z"/>
+		<method name="getHomeNodebName()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/DataFailCause" since="30">
+		<extends name="java/lang/Object"/>
+		<field name="ACCESS_ATTEMPT_ALREADY_IN_PROGRESS"/>
+		<field name="ACCESS_BLOCK"/>
+		<field name="ACCESS_BLOCK_ALL"/>
+		<field name="ACCESS_CLASS_DSAC_REJECTION"/>
+		<field name="ACCESS_CONTROL_LIST_CHECK_FAILURE"/>
+		<field name="ACTIVATION_REJECTED_BCM_VIOLATION"/>
+		<field name="ACTIVATION_REJECT_GGSN"/>
+		<field name="ACTIVATION_REJECT_UNSPECIFIED"/>
+		<field name="ACTIVE_PDP_CONTEXT_MAX_NUMBER_REACHED"/>
+		<field name="ALL_MATCHING_RULES_FAILED" since="31"/>
+		<field name="APN_DISABLED"/>
+		<field name="APN_DISALLOWED_ON_ROAMING"/>
+		<field name="APN_MISMATCH"/>
+		<field name="APN_PARAMETERS_CHANGED"/>
+		<field name="APN_PENDING_HANDOVER"/>
+		<field name="APN_TYPE_CONFLICT"/>
+		<field name="AUTH_FAILURE_ON_EMERGENCY_CALL"/>
+		<field name="BEARER_HANDLING_NOT_SUPPORTED"/>
+		<field name="CALL_DISALLOWED_IN_ROAMING"/>
+		<field name="CALL_PREEMPT_BY_EMERGENCY_APN"/>
+		<field name="CANNOT_ENCODE_OTA_MESSAGE"/>
+		<field name="CDMA_ALERT_STOP"/>
+		<field name="CDMA_INCOMING_CALL"/>
+		<field name="CDMA_INTERCEPT"/>
+		<field name="CDMA_LOCK"/>
+		<field name="CDMA_RELEASE_DUE_TO_SO_REJECTION"/>
+		<field name="CDMA_REORDER"/>
+		<field name="CDMA_RETRY_ORDER"/>
+		<field name="CHANNEL_ACQUISITION_FAILURE"/>
+		<field name="CLOSE_IN_PROGRESS"/>
+		<field name="COLLISION_WITH_NETWORK_INITIATED_REQUEST"/>
+		<field name="COMPANION_IFACE_IN_USE"/>
+		<field name="CONCURRENT_SERVICES_INCOMPATIBLE"/>
+		<field name="CONCURRENT_SERVICES_NOT_ALLOWED"/>
+		<field name="CONCURRENT_SERVICE_NOT_SUPPORTED_BY_BASE_STATION"/>
+		<field name="CONDITIONAL_IE_ERROR"/>
+		<field name="CONGESTION"/>
+		<field name="CONNECTION_RELEASED"/>
+		<field name="CS_DOMAIN_NOT_AVAILABLE"/>
+		<field name="CS_FALLBACK_CALL_ESTABLISHMENT_NOT_ALLOWED"/>
+		<field name="DATA_PLAN_EXPIRED"/>
+		<field name="DATA_ROAMING_SETTINGS_DISABLED"/>
+		<field name="DATA_SETTINGS_DISABLED"/>
+		<field name="DBM_OR_SMS_IN_PROGRESS"/>
+		<field name="DDS_SWITCHED"/>
+		<field name="DDS_SWITCH_IN_PROGRESS"/>
+		<field name="DRB_RELEASED_BY_RRC"/>
+		<field name="DS_EXPLICIT_DEACTIVATION"/>
+		<field name="DUAL_SWITCH"/>
+		<field name="DUN_CALL_DISALLOWED"/>
+		<field name="DUPLICATE_BEARER_ID"/>
+		<field name="EHRPD_TO_HRPD_FALLBACK"/>
+		<field name="EMBMS_NOT_ENABLED"/>
+		<field name="EMBMS_REGULAR_DEACTIVATION"/>
+		<field name="EMERGENCY_IFACE_ONLY"/>
+		<field name="EMERGENCY_MODE"/>
+		<field name="EMM_ACCESS_BARRED"/>
+		<field name="EMM_ACCESS_BARRED_INFINITE_RETRY"/>
+		<field name="EMM_ATTACH_FAILED"/>
+		<field name="EMM_ATTACH_STARTED"/>
+		<field name="EMM_DETACHED"/>
+		<field name="EMM_T3417_EXPIRED"/>
+		<field name="EMM_T3417_EXT_EXPIRED"/>
+		<field name="EPS_SERVICES_AND_NON_EPS_SERVICES_NOT_ALLOWED"/>
+		<field name="EPS_SERVICES_NOT_ALLOWED_IN_PLMN"/>
+		<field name="ERROR_UNSPECIFIED"/>
+		<field name="ESM_BAD_OTA_MESSAGE"/>
+		<field name="ESM_BEARER_DEACTIVATED_TO_SYNC_WITH_NETWORK"/>
+		<field name="ESM_COLLISION_SCENARIOS"/>
+		<field name="ESM_CONTEXT_TRANSFERRED_DUE_TO_IRAT"/>
+		<field name="ESM_DOWNLOAD_SERVER_REJECTED_THE_CALL"/>
+		<field name="ESM_FAILURE"/>
+		<field name="ESM_INFO_NOT_RECEIVED"/>
+		<field name="ESM_LOCAL_CAUSE_NONE"/>
+		<field name="ESM_NW_ACTIVATED_DED_BEARER_WITH_ID_OF_DEF_BEARER"/>
+		<field name="ESM_PROCEDURE_TIME_OUT"/>
+		<field name="ESM_UNKNOWN_EPS_BEARER_CONTEXT"/>
+		<field name="EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE"/>
+		<field name="EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY"/>
+		<field name="EVDO_HDR_CHANGED"/>
+		<field name="EVDO_HDR_CONNECTION_SETUP_TIMEOUT"/>
+		<field name="EVDO_HDR_EXITED"/>
+		<field name="EVDO_HDR_NO_SESSION"/>
+		<field name="EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL"/>
+		<field name="FADE"/>
+		<field name="FAILED_TO_ACQUIRE_COLOCATED_HDR"/>
+		<field name="FEATURE_NOT_SUPP"/>
+		<field name="FILTER_SEMANTIC_ERROR"/>
+		<field name="FILTER_SYTAX_ERROR"/>
+		<field name="FORBIDDEN_APN_NAME"/>
+		<field name="GPRS_REGISTRATION_FAIL"/>
+		<field name="GPRS_SERVICES_AND_NON_GPRS_SERVICES_NOT_ALLOWED"/>
+		<field name="GPRS_SERVICES_NOT_ALLOWED"/>
+		<field name="GPRS_SERVICES_NOT_ALLOWED_IN_THIS_PLMN"/>
+		<field name="HANDOFF_PREFERENCE_CHANGED"/>
+		<field name="HDR_ACCESS_FAILURE"/>
+		<field name="HDR_FADE"/>
+		<field name="HDR_NO_LOCK_GRANTED"/>
+		<field name="IFACE_AND_POL_FAMILY_MISMATCH"/>
+		<field name="IFACE_MISMATCH"/>
+		<field name="ILLEGAL_ME"/>
+		<field name="ILLEGAL_MS"/>
+		<field name="IMEI_NOT_ACCEPTED"/>
+		<field name="IMPLICITLY_DETACHED"/>
+		<field name="IMSI_UNKNOWN_IN_HOME_SUBSCRIBER_SERVER"/>
+		<field name="INCOMING_CALL_REJECTED"/>
+		<field name="INSUFFICIENT_RESOURCES"/>
+		<field name="INTERFACE_IN_USE"/>
+		<field name="INTERNAL_CALL_PREEMPT_BY_HIGH_PRIO_APN"/>
+		<field name="INTERNAL_EPC_NONEPC_TRANSITION"/>
+		<field name="INVALID_CONNECTION_ID"/>
+		<field name="INVALID_DNS_ADDR"/>
+		<field name="INVALID_EMM_STATE"/>
+		<field name="INVALID_MANDATORY_INFO"/>
+		<field name="INVALID_MODE"/>
+		<field name="INVALID_PCSCF_ADDR"/>
+		<field name="INVALID_PCSCF_OR_DNS_ADDRESS"/>
+		<field name="INVALID_PRIMARY_NSAPI"/>
+		<field name="INVALID_SIM_STATE"/>
+		<field name="INVALID_TRANSACTION_ID"/>
+		<field name="IPV6_ADDRESS_TRANSFER_FAILED"/>
+		<field name="IPV6_PREFIX_UNAVAILABLE"/>
+		<field name="IP_ADDRESS_MISMATCH"/>
+		<field name="IP_VERSION_MISMATCH"/>
+		<field name="IRAT_HANDOVER_FAILED"/>
+		<field name="IS707B_MAX_ACCESS_PROBES"/>
+		<field name="IWLAN_AUTHORIZATION_REJECTED" since="31"/>
+		<field name="IWLAN_DNS_RESOLUTION_NAME_FAILURE" since="31"/>
+		<field name="IWLAN_DNS_RESOLUTION_TIMEOUT" since="31"/>
+		<field name="IWLAN_IKEV2_AUTH_FAILURE" since="31"/>
+		<field name="IWLAN_IKEV2_CERT_INVALID" since="31"/>
+		<field name="IWLAN_IKEV2_CONFIG_FAILURE" since="31"/>
+		<field name="IWLAN_IKEV2_MSG_TIMEOUT" since="31"/>
+		<field name="IWLAN_ILLEGAL_ME" since="31"/>
+		<field name="IWLAN_IMEI_NOT_ACCEPTED" since="31"/>
+		<field name="IWLAN_MAX_CONNECTION_REACHED" since="31"/>
+		<field name="IWLAN_NETWORK_FAILURE" since="31"/>
+		<field name="IWLAN_NON_3GPP_ACCESS_TO_EPC_NOT_ALLOWED" since="31"/>
+		<field name="IWLAN_NO_APN_SUBSCRIPTION" since="31"/>
+		<field name="IWLAN_PDN_CONNECTION_REJECTION" since="31"/>
+		<field name="IWLAN_PLMN_NOT_ALLOWED" since="31"/>
+		<field name="IWLAN_RAT_TYPE_NOT_ALLOWED" since="31"/>
+		<field name="IWLAN_SEMANTIC_ERRORS_IN_PACKET_FILTERS" since="31"/>
+		<field name="IWLAN_SEMANTIC_ERROR_IN_THE_TFT_OPERATION" since="31"/>
+		<field name="IWLAN_SYNTACTICAL_ERRORS_IN_PACKET_FILTERS" since="31"/>
+		<field name="IWLAN_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION" since="31"/>
+		<field name="IWLAN_UNAUTHENTICATED_EMERGENCY_NOT_SUPPORTED" since="31"/>
+		<field name="IWLAN_USER_UNKNOWN" since="31"/>
+		<field name="LIMITED_TO_IPV4"/>
+		<field name="LIMITED_TO_IPV6"/>
+		<field name="LLC_SNDCP"/>
+		<field name="LOCAL_END"/>
+		<field name="LOCATION_AREA_NOT_ALLOWED"/>
+		<field name="LOST_CONNECTION"/>
+		<field name="LOWER_LAYER_REGISTRATION_FAILURE"/>
+		<field name="LOW_POWER_MODE_OR_POWERING_DOWN"/>
+		<field name="LTE_NAS_SERVICE_REQUEST_FAILED"/>
+		<field name="LTE_THROTTLING_NOT_REQUIRED"/>
+		<field name="MAC_FAILURE"/>
+		<field name="MATCH_ALL_RULE_NOT_ALLOWED" since="31"/>
+		<field name="MAXIMIUM_NSAPIS_EXCEEDED"/>
+		<field name="MAXINUM_SIZE_OF_L2_MESSAGE_EXCEEDED"/>
+		<field name="MAX_ACCESS_PROBE"/>
+		<field name="MAX_IPV4_CONNECTIONS"/>
+		<field name="MAX_IPV6_CONNECTIONS"/>
+		<field name="MAX_PPP_INACTIVITY_TIMER_EXPIRED"/>
+		<field name="MESSAGE_INCORRECT_SEMANTIC"/>
+		<field name="MESSAGE_TYPE_UNSUPPORTED"/>
+		<field name="MIP_CONFIG_FAILURE"/>
+		<field name="MIP_FA_ADMIN_PROHIBITED"/>
+		<field name="MIP_FA_DELIVERY_STYLE_NOT_SUPPORTED"/>
+		<field name="MIP_FA_ENCAPSULATION_UNAVAILABLE"/>
+		<field name="MIP_FA_HOME_AGENT_AUTHENTICATION_FAILURE"/>
+		<field name="MIP_FA_INSUFFICIENT_RESOURCES"/>
+		<field name="MIP_FA_MALFORMED_REPLY"/>
+		<field name="MIP_FA_MALFORMED_REQUEST"/>
+		<field name="MIP_FA_MISSING_CHALLENGE"/>
+		<field name="MIP_FA_MISSING_HOME_ADDRESS"/>
+		<field name="MIP_FA_MISSING_HOME_AGENT"/>
+		<field name="MIP_FA_MISSING_NAI"/>
+		<field name="MIP_FA_MOBILE_NODE_AUTHENTICATION_FAILURE"/>
+		<field name="MIP_FA_REASON_UNSPECIFIED"/>
+		<field name="MIP_FA_REQUESTED_LIFETIME_TOO_LONG"/>
+		<field name="MIP_FA_REVERSE_TUNNEL_IS_MANDATORY"/>
+		<field name="MIP_FA_REVERSE_TUNNEL_UNAVAILABLE"/>
+		<field name="MIP_FA_STALE_CHALLENGE"/>
+		<field name="MIP_FA_UNKNOWN_CHALLENGE"/>
+		<field name="MIP_FA_VJ_HEADER_COMPRESSION_UNAVAILABLE"/>
+		<field name="MIP_HA_ADMIN_PROHIBITED"/>
+		<field name="MIP_HA_ENCAPSULATION_UNAVAILABLE"/>
+		<field name="MIP_HA_FOREIGN_AGENT_AUTHENTICATION_FAILURE"/>
+		<field name="MIP_HA_INSUFFICIENT_RESOURCES"/>
+		<field name="MIP_HA_MALFORMED_REQUEST"/>
+		<field name="MIP_HA_MOBILE_NODE_AUTHENTICATION_FAILURE"/>
+		<field name="MIP_HA_REASON_UNSPECIFIED"/>
+		<field name="MIP_HA_REGISTRATION_ID_MISMATCH"/>
+		<field name="MIP_HA_REVERSE_TUNNEL_IS_MANDATORY"/>
+		<field name="MIP_HA_REVERSE_TUNNEL_UNAVAILABLE"/>
+		<field name="MIP_HA_UNKNOWN_HOME_AGENT_ADDRESS"/>
+		<field name="MISSING_UNKNOWN_APN"/>
+		<field name="MODEM_APP_PREEMPTED"/>
+		<field name="MODEM_RESTART"/>
+		<field name="MSC_TEMPORARILY_NOT_REACHABLE"/>
+		<field name="MSG_AND_PROTOCOL_STATE_UNCOMPATIBLE"/>
+		<field name="MSG_TYPE_NONCOMPATIBLE_STATE"/>
+		<field name="MS_IDENTITY_CANNOT_BE_DERIVED_BY_THE_NETWORK"/>
+		<field name="MULTIPLE_PDP_CALL_NOT_ALLOWED"/>
+		<field name="MULTI_CONN_TO_SAME_PDN_NOT_ALLOWED"/>
+		<field name="NAS_LAYER_FAILURE"/>
+		<field name="NAS_REQUEST_REJECTED_BY_NETWORK"/>
+		<field name="NAS_SIGNALLING"/>
+		<field name="NETWORK_FAILURE"/>
+		<field name="NETWORK_INITIATED_DETACH_NO_AUTO_REATTACH"/>
+		<field name="NETWORK_INITIATED_DETACH_WITH_AUTO_REATTACH"/>
+		<field name="NETWORK_INITIATED_TERMINATION"/>
+		<field name="NONE"/>
+		<field name="NON_IP_NOT_SUPPORTED"/>
+		<field name="NORMAL_RELEASE"/>
+		<field name="NO_CDMA_SERVICE"/>
+		<field name="NO_COLLOCATED_HDR"/>
+		<field name="NO_EPS_BEARER_CONTEXT_ACTIVATED"/>
+		<field name="NO_GPRS_CONTEXT"/>
+		<field name="NO_HYBRID_HDR_SERVICE"/>
+		<field name="NO_PDP_CONTEXT_ACTIVATED"/>
+		<field name="NO_RESPONSE_FROM_BASE_STATION"/>
+		<field name="NO_SERVICE"/>
+		<field name="NO_SERVICE_ON_GATEWAY"/>
+		<field name="NSAPI_IN_USE"/>
+		<field name="NULL_APN_DISALLOWED"/>
+		<field name="OEM_DCFAILCAUSE_1"/>
+		<field name="OEM_DCFAILCAUSE_10"/>
+		<field name="OEM_DCFAILCAUSE_11"/>
+		<field name="OEM_DCFAILCAUSE_12"/>
+		<field name="OEM_DCFAILCAUSE_13"/>
+		<field name="OEM_DCFAILCAUSE_14"/>
+		<field name="OEM_DCFAILCAUSE_15"/>
+		<field name="OEM_DCFAILCAUSE_2"/>
+		<field name="OEM_DCFAILCAUSE_3"/>
+		<field name="OEM_DCFAILCAUSE_4"/>
+		<field name="OEM_DCFAILCAUSE_5"/>
+		<field name="OEM_DCFAILCAUSE_6"/>
+		<field name="OEM_DCFAILCAUSE_7"/>
+		<field name="OEM_DCFAILCAUSE_8"/>
+		<field name="OEM_DCFAILCAUSE_9"/>
+		<field name="ONLY_IPV4V6_ALLOWED"/>
+		<field name="ONLY_IPV4_ALLOWED"/>
+		<field name="ONLY_IPV6_ALLOWED"/>
+		<field name="ONLY_NON_IP_ALLOWED"/>
+		<field name="ONLY_SINGLE_BEARER_ALLOWED"/>
+		<field name="OPERATOR_BARRED"/>
+		<field name="OTASP_COMMIT_IN_PROGRESS"/>
+		<field name="PDN_CONN_DOES_NOT_EXIST"/>
+		<field name="PDN_INACTIVITY_TIMER_EXPIRED"/>
+		<field name="PDN_IPV4_CALL_DISALLOWED"/>
+		<field name="PDN_IPV4_CALL_THROTTLED"/>
+		<field name="PDN_IPV6_CALL_DISALLOWED"/>
+		<field name="PDN_IPV6_CALL_THROTTLED"/>
+		<field name="PDN_NON_IP_CALL_DISALLOWED"/>
+		<field name="PDN_NON_IP_CALL_THROTTLED"/>
+		<field name="PDP_ACTIVATE_MAX_RETRY_FAILED"/>
+		<field name="PDP_DUPLICATE"/>
+		<field name="PDP_ESTABLISH_TIMEOUT_EXPIRED"/>
+		<field name="PDP_INACTIVE_TIMEOUT_EXPIRED"/>
+		<field name="PDP_LOWERLAYER_ERROR"/>
+		<field name="PDP_MODIFY_COLLISION"/>
+		<field name="PDP_MODIFY_TIMEOUT_EXPIRED"/>
+		<field name="PDP_PPP_NOT_SUPPORTED"/>
+		<field name="PDP_WITHOUT_ACTIVE_TFT"/>
+		<field name="PHONE_IN_USE"/>
+		<field name="PHYSICAL_LINK_CLOSE_IN_PROGRESS"/>
+		<field name="PLMN_NOT_ALLOWED"/>
+		<field name="PPP_AUTH_FAILURE"/>
+		<field name="PPP_CHAP_FAILURE"/>
+		<field name="PPP_CLOSE_IN_PROGRESS"/>
+		<field name="PPP_OPTION_MISMATCH"/>
+		<field name="PPP_PAP_FAILURE"/>
+		<field name="PPP_TIMEOUT"/>
+		<field name="PREF_RADIO_TECH_CHANGED"/>
+		<field name="PROFILE_BEARER_INCOMPATIBLE"/>
+		<field name="PROTOCOL_ERRORS"/>
+		<field name="QOS_NOT_ACCEPTED"/>
+		<field name="RADIO_ACCESS_BEARER_FAILURE"/>
+		<field name="RADIO_ACCESS_BEARER_SETUP_FAILURE"/>
+		<field name="RADIO_NOT_AVAILABLE"/>
+		<field name="RADIO_POWER_OFF"/>
+		<field name="REDIRECTION_OR_HANDOFF_IN_PROGRESS"/>
+		<field name="REGISTRATION_FAIL"/>
+		<field name="REGULAR_DEACTIVATION"/>
+		<field name="REJECTED_BY_BASE_STATION"/>
+		<field name="RRC_CONNECTION_ABORTED_AFTER_HANDOVER"/>
+		<field name="RRC_CONNECTION_ABORTED_AFTER_IRAT_CELL_CHANGE"/>
+		<field name="RRC_CONNECTION_ABORTED_DUE_TO_IRAT_CHANGE"/>
+		<field name="RRC_CONNECTION_ABORTED_DURING_IRAT_CELL_CHANGE"/>
+		<field name="RRC_CONNECTION_ABORT_REQUEST"/>
+		<field name="RRC_CONNECTION_ACCESS_BARRED"/>
+		<field name="RRC_CONNECTION_ACCESS_STRATUM_FAILURE"/>
+		<field name="RRC_CONNECTION_ANOTHER_PROCEDURE_IN_PROGRESS"/>
+		<field name="RRC_CONNECTION_CELL_NOT_CAMPED"/>
+		<field name="RRC_CONNECTION_CELL_RESELECTION"/>
+		<field name="RRC_CONNECTION_CONFIG_FAILURE"/>
+		<field name="RRC_CONNECTION_INVALID_REQUEST"/>
+		<field name="RRC_CONNECTION_LINK_FAILURE"/>
+		<field name="RRC_CONNECTION_NORMAL_RELEASE"/>
+		<field name="RRC_CONNECTION_OUT_OF_SERVICE_DURING_CELL_REGISTER"/>
+		<field name="RRC_CONNECTION_RADIO_LINK_FAILURE"/>
+		<field name="RRC_CONNECTION_REESTABLISHMENT_FAILURE"/>
+		<field name="RRC_CONNECTION_REJECT_BY_NETWORK"/>
+		<field name="RRC_CONNECTION_RELEASED_SECURITY_NOT_ACTIVE"/>
+		<field name="RRC_CONNECTION_RF_UNAVAILABLE"/>
+		<field name="RRC_CONNECTION_SYSTEM_INFORMATION_BLOCK_READ_ERROR"/>
+		<field name="RRC_CONNECTION_SYSTEM_INTERVAL_FAILURE"/>
+		<field name="RRC_CONNECTION_TIMER_EXPIRED"/>
+		<field name="RRC_CONNECTION_TRACKING_AREA_ID_CHANGED"/>
+		<field name="RRC_UPLINK_CONNECTION_RELEASE"/>
+		<field name="RRC_UPLINK_DATA_TRANSMISSION_FAILURE"/>
+		<field name="RRC_UPLINK_DELIVERY_FAILED_DUE_TO_HANDOVER"/>
+		<field name="RRC_UPLINK_ERROR_REQUEST_FROM_NAS"/>
+		<field name="RRC_UPLINK_RADIO_LINK_FAILURE"/>
+		<field name="RUIM_NOT_PRESENT"/>
+		<field name="SECURITY_MODE_REJECTED"/>
+		<field name="SERVICE_NOT_ALLOWED_ON_PLMN"/>
+		<field name="SERVICE_OPTION_NOT_SUBSCRIBED"/>
+		<field name="SERVICE_OPTION_NOT_SUPPORTED"/>
+		<field name="SERVICE_OPTION_OUT_OF_ORDER"/>
+		<field name="SIGNAL_LOST"/>
+		<field name="SIM_CARD_CHANGED"/>
+		<field name="SLICE_REJECTED" since="31"/>
+		<field name="SYNCHRONIZATION_FAILURE"/>
+		<field name="TEST_LOOPBACK_REGULAR_DEACTIVATION"/>
+		<field name="TETHERED_CALL_ACTIVE"/>
+		<field name="TFT_SEMANTIC_ERROR"/>
+		<field name="TFT_SYTAX_ERROR"/>
+		<field name="THERMAL_EMERGENCY"/>
+		<field name="THERMAL_MITIGATION"/>
+		<field name="TRAT_SWAP_FAILED"/>
+		<field name="UE_INITIATED_DETACH_OR_DISCONNECT"/>
+		<field name="UE_IS_ENTERING_POWERSAVE_MODE"/>
+		<field name="UE_RAT_CHANGE"/>
+		<field name="UE_SECURITY_CAPABILITIES_MISMATCH"/>
+		<field name="UMTS_HANDOVER_TO_IWLAN"/>
+		<field name="UMTS_REACTIVATION_REQ"/>
+		<field name="UNACCEPTABLE_NETWORK_PARAMETER"/>
+		<field name="UNACCEPTABLE_NON_EPS_AUTHENTICATION"/>
+		<field name="UNKNOWN"/>
+		<field name="UNKNOWN_INFO_ELEMENT"/>
+		<field name="UNKNOWN_PDP_ADDRESS_TYPE"/>
+		<field name="UNKNOWN_PDP_CONTEXT"/>
+		<field name="UNPREFERRED_RAT"/>
+		<field name="UNSUPPORTED_1X_PREV"/>
+		<field name="UNSUPPORTED_APN_IN_CURRENT_PLMN"/>
+		<field name="UNSUPPORTED_QCI_VALUE"/>
+		<field name="USER_AUTHENTICATION"/>
+		<field name="VSNCP_ADMINISTRATIVELY_PROHIBITED"/>
+		<field name="VSNCP_APN_UNAUTHORIZED"/>
+		<field name="VSNCP_GEN_ERROR"/>
+		<field name="VSNCP_INSUFFICIENT_PARAMETERS"/>
+		<field name="VSNCP_NO_PDN_GATEWAY_ADDRESS"/>
+		<field name="VSNCP_PDN_EXISTS_FOR_THIS_APN"/>
+		<field name="VSNCP_PDN_GATEWAY_REJECT"/>
+		<field name="VSNCP_PDN_GATEWAY_UNREACHABLE"/>
+		<field name="VSNCP_PDN_ID_IN_USE"/>
+		<field name="VSNCP_PDN_LIMIT_EXCEEDED"/>
+		<field name="VSNCP_RECONNECT_NOT_ALLOWED"/>
+		<field name="VSNCP_RESOURCE_UNAVAILABLE"/>
+		<field name="VSNCP_SUBSCRIBER_LIMITATION"/>
+		<field name="VSNCP_TIMEOUT"/>
+	</class>
+	<class name="android/telephony/DisconnectCause" since="31">
+		<extends name="java/lang/Object"/>
+		<field name="ALREADY_DIALING"/>
+		<field name="ANSWERED_ELSEWHERE"/>
+		<field name="BUSY"/>
+		<field name="CALLING_DISABLED"/>
+		<field name="CALL_BARRED"/>
+		<field name="CALL_PULLED"/>
+		<field name="CANT_CALL_WHILE_RINGING"/>
+		<field name="CDMA_ACCESS_BLOCKED"/>
+		<field name="CDMA_ACCESS_FAILURE"/>
+		<field name="CDMA_ALREADY_ACTIVATED"/>
+		<field name="CDMA_DROP"/>
+		<field name="CDMA_INTERCEPT"/>
+		<field name="CDMA_LOCKED_UNTIL_POWER_CYCLE"/>
+		<field name="CDMA_NOT_EMERGENCY"/>
+		<field name="CDMA_PREEMPTED"/>
+		<field name="CDMA_REORDER"/>
+		<field name="CDMA_RETRY_ORDER"/>
+		<field name="CDMA_SO_REJECT"/>
+		<field name="CONGESTION"/>
+		<field name="CS_RESTRICTED"/>
+		<field name="CS_RESTRICTED_EMERGENCY"/>
+		<field name="CS_RESTRICTED_NORMAL"/>
+		<field name="DATA_DISABLED"/>
+		<field name="DATA_LIMIT_REACHED"/>
+		<field name="DIALED_CALL_FORWARDING_WHILE_ROAMING"/>
+		<field name="DIALED_MMI"/>
+		<field name="DIAL_LOW_BATTERY"/>
+		<field name="DIAL_MODIFIED_TO_DIAL"/>
+		<field name="DIAL_MODIFIED_TO_DIAL_VIDEO"/>
+		<field name="DIAL_MODIFIED_TO_SS"/>
+		<field name="DIAL_MODIFIED_TO_USSD"/>
+		<field name="DIAL_VIDEO_MODIFIED_TO_DIAL"/>
+		<field name="DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO"/>
+		<field name="DIAL_VIDEO_MODIFIED_TO_SS"/>
+		<field name="DIAL_VIDEO_MODIFIED_TO_USSD"/>
+		<field name="EMERGENCY_CALL_OVER_WFC_NOT_AVAILABLE"/>
+		<field name="EMERGENCY_PERM_FAILURE"/>
+		<field name="EMERGENCY_TEMP_FAILURE"/>
+		<field name="ERROR_UNSPECIFIED"/>
+		<field name="FDN_BLOCKED"/>
+		<field name="ICC_ERROR"/>
+		<field name="IMEI_NOT_ACCEPTED"/>
+		<field name="IMS_ACCESS_BLOCKED"/>
+		<field name="IMS_MERGED_SUCCESSFULLY"/>
+		<field name="IMS_SIP_ALTERNATE_EMERGENCY_CALL"/>
+		<field name="INCOMING_AUTO_REJECTED"/>
+		<field name="INCOMING_MISSED"/>
+		<field name="INCOMING_REJECTED"/>
+		<field name="INVALID_CREDENTIALS"/>
+		<field name="INVALID_NUMBER"/>
+		<field name="LIMIT_EXCEEDED"/>
+		<field name="LOCAL"/>
+		<field name="LOST_SIGNAL"/>
+		<field name="LOW_BATTERY"/>
+		<field name="MAXIMUM_NUMBER_OF_CALLS_REACHED"/>
+		<field name="MEDIA_TIMEOUT"/>
+		<field name="MMI"/>
+		<field name="NORMAL"/>
+		<field name="NORMAL_UNSPECIFIED"/>
+		<field name="NOT_DISCONNECTED"/>
+		<field name="NOT_VALID"/>
+		<field name="NO_PHONE_NUMBER_SUPPLIED"/>
+		<field name="NUMBER_UNREACHABLE"/>
+		<field name="OTASP_PROVISIONING_IN_PROCESS"/>
+		<field name="OUTGOING_CANCELED"/>
+		<field name="OUTGOING_EMERGENCY_CALL_PLACED"/>
+		<field name="OUTGOING_FAILURE"/>
+		<field name="OUT_OF_NETWORK"/>
+		<field name="OUT_OF_SERVICE"/>
+		<field name="POWER_OFF"/>
+		<field name="SERVER_ERROR"/>
+		<field name="SERVER_UNREACHABLE"/>
+		<field name="TIMED_OUT"/>
+		<field name="TOO_MANY_ONGOING_CALLS"/>
+		<field name="UNOBTAINABLE_NUMBER"/>
+		<field name="VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED"/>
+		<field name="VOICEMAIL_NUMBER_MISSING"/>
+		<field name="WFC_SERVICE_NOT_AVAILABLE_IN_THIS_LOCATION"/>
+		<field name="WIFI_LOST"/>
+	</class>
+	<class name="android/telephony/IccOpenLogicalChannelResponse" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getChannel()I"/>
+		<method name="getSelectResponse()[B"/>
+		<method name="getStatus()I"/>
+		<field name="CREATOR"/>
+		<field name="INVALID_CHANNEL"/>
+		<field name="STATUS_MISSING_RESOURCE"/>
+		<field name="STATUS_NO_ERROR"/>
+		<field name="STATUS_NO_SUCH_ELEMENT"/>
+		<field name="STATUS_UNKNOWN_ERROR"/>
+	</class>
+	<class name="android/telephony/MbmsDownloadSession" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="addProgressListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadProgressListener;)V"/>
+		<method name="addServiceAnnouncement([B)V" since="31"/>
+		<method name="addStatusListener(Landroid/telephony/mbms/DownloadRequest;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/DownloadStatusListener;)V"/>
+		<method name="cancelDownload(Landroid/telephony/mbms/DownloadRequest;)V"/>
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;"/>
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsDownloadSessionCallback;)Landroid/telephony/MbmsDownloadSession;"/>
+		<method name="download(Landroid/telephony/mbms/DownloadRequest;)V"/>
+		<method name="getMaximumServiceAnnouncementSize()I" since="31"/>
+		<method name="getTempFileRootDirectory()Ljava/io/File;"/>
+		<method name="listPendingDownloads()Ljava/util/List;"/>
+		<method name="removeProgressListener(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/DownloadProgressListener;)V"/>
+		<method name="removeStatusListener(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/DownloadStatusListener;)V"/>
+		<method name="requestDownloadState(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;)V"/>
+		<method name="requestUpdateFileServices(Ljava/util/List;)V"/>
+		<method name="resetDownloadKnowledge(Landroid/telephony/mbms/DownloadRequest;)V"/>
+		<method name="setTempFileRootDirectory(Ljava/io/File;)V"/>
+		<field name="DEFAULT_TOP_LEVEL_TEMP_DIRECTORY"/>
+		<field name="EXTRA_MBMS_COMPLETED_FILE_URI"/>
+		<field name="EXTRA_MBMS_DOWNLOAD_REQUEST"/>
+		<field name="EXTRA_MBMS_DOWNLOAD_RESULT"/>
+		<field name="EXTRA_MBMS_FILE_INFO"/>
+		<field name="RESULT_CANCELLED"/>
+		<field name="RESULT_DOWNLOAD_FAILURE"/>
+		<field name="RESULT_EXPIRED"/>
+		<field name="RESULT_FILE_ROOT_UNREACHABLE"/>
+		<field name="RESULT_IO_ERROR"/>
+		<field name="RESULT_OUT_OF_STORAGE"/>
+		<field name="RESULT_SERVICE_ID_NOT_DEFINED"/>
+		<field name="RESULT_SUCCESSFUL"/>
+		<field name="STATUS_ACTIVELY_DOWNLOADING"/>
+		<field name="STATUS_PENDING_DOWNLOAD"/>
+		<field name="STATUS_PENDING_DOWNLOAD_WINDOW"/>
+		<field name="STATUS_PENDING_REPAIR"/>
+		<field name="STATUS_UNKNOWN"/>
+	</class>
+	<class name="android/telephony/MbmsGroupCallSession" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="create(Landroid/content/Context;ILjava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsGroupCallSessionCallback;)Landroid/telephony/MbmsGroupCallSession;"/>
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsGroupCallSessionCallback;)Landroid/telephony/MbmsGroupCallSession;"/>
+		<method name="startGroupCall(JLjava/util/List;Ljava/util/List;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/GroupCallCallback;)Landroid/telephony/mbms/GroupCall;"/>
+	</class>
+	<class name="android/telephony/MbmsStreamingSession" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;ILandroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;"/>
+		<method name="create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/MbmsStreamingSessionCallback;)Landroid/telephony/MbmsStreamingSession;"/>
+		<method name="requestUpdateStreamingServices(Ljava/util/List;)V"/>
+		<method name="startStreaming(Landroid/telephony/mbms/StreamingServiceInfo;Ljava/util/concurrent/Executor;Landroid/telephony/mbms/StreamingServiceCallback;)Landroid/telephony/mbms/StreamingService;"/>
+	</class>
+	<class name="android/telephony/NeighboringCellInfo" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<method name="&lt;init>(II)V" deprecated="15"/>
+		<method name="&lt;init>(ILjava/lang/String;I)V" since="7" deprecated="29"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
+		<method name="getCid()I" deprecated="29"/>
+		<method name="getLac()I" since="5" deprecated="29"/>
+		<method name="getNetworkType()I" since="5" deprecated="29"/>
+		<method name="getPsc()I" since="5" deprecated="29"/>
+		<method name="getRssi()I" deprecated="29"/>
+		<method name="setCid(I)V" deprecated="15"/>
+		<method name="setRssi(I)V" deprecated="15"/>
+		<field name="CREATOR" deprecated="29"/>
+		<field name="UNKNOWN_CID" deprecated="29"/>
+		<field name="UNKNOWN_RSSI" deprecated="29"/>
+	</class>
+	<class name="android/telephony/NetworkRegistrationInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAccessNetworkTechnology()I"/>
+		<method name="getAvailableServices()Ljava/util/List;"/>
+		<method name="getCellIdentity()Landroid/telephony/CellIdentity;"/>
+		<method name="getDomain()I"/>
+		<method name="getRegisteredPlmn()Ljava/lang/String;"/>
+		<method name="getTransportType()I"/>
+		<method name="isRegistered()Z"/>
+		<method name="isRoaming()Z"/>
+		<method name="isSearching()Z"/>
+		<field name="CREATOR"/>
+		<field name="DOMAIN_CS"/>
+		<field name="DOMAIN_CS_PS"/>
+		<field name="DOMAIN_PS"/>
+		<field name="DOMAIN_UNKNOWN"/>
+		<field name="NR_STATE_CONNECTED"/>
+		<field name="NR_STATE_NONE"/>
+		<field name="NR_STATE_NOT_RESTRICTED"/>
+		<field name="NR_STATE_RESTRICTED"/>
+		<field name="SERVICE_TYPE_DATA"/>
+		<field name="SERVICE_TYPE_EMERGENCY"/>
+		<field name="SERVICE_TYPE_SMS"/>
+		<field name="SERVICE_TYPE_UNKNOWN"/>
+		<field name="SERVICE_TYPE_VIDEO"/>
+		<field name="SERVICE_TYPE_VOICE"/>
+	</class>
+	<class name="android/telephony/NetworkScan" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="stopScan()V"/>
+		<field name="ERROR_INTERRUPTED"/>
+		<field name="ERROR_INVALID_SCAN"/>
+		<field name="ERROR_INVALID_SCANID"/>
+		<field name="ERROR_MODEM_ERROR"/>
+		<field name="ERROR_MODEM_UNAVAILABLE"/>
+		<field name="ERROR_RADIO_INTERFACE_ERROR"/>
+		<field name="ERROR_UNSUPPORTED"/>
+		<field name="SUCCESS"/>
+	</class>
+	<class name="android/telephony/NetworkScanRequest" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I[Landroid/telephony/RadioAccessSpecifier;IIZILjava/util/ArrayList;)V"/>
+		<method name="getIncrementalResults()Z"/>
+		<method name="getIncrementalResultsPeriodicity()I"/>
+		<method name="getMaxSearchTime()I"/>
+		<method name="getPlmns()Ljava/util/ArrayList;"/>
+		<method name="getScanType()I"/>
+		<method name="getSearchPeriodicity()I"/>
+		<method name="getSpecifiers()[Landroid/telephony/RadioAccessSpecifier;"/>
+		<field name="CREATOR"/>
+		<field name="SCAN_TYPE_ONE_SHOT"/>
+		<field name="SCAN_TYPE_PERIODIC"/>
+	</class>
+	<class name="android/telephony/PhoneNumberFormattingTextWatcher" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/TextWatcher"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="21"/>
+	</class>
+	<class name="android/telephony/PhoneNumberUtils" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addTtsSpan(Landroid/text/Spannable;II)V" since="23"/>
+		<method name="areSamePhoneNumber(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z" since="31"/>
+		<method name="calledPartyBCDFragmentToString([BII)Ljava/lang/String;" deprecated="28"/>
+		<method name="calledPartyBCDFragmentToString([BIII)Ljava/lang/String;" since="28"/>
+		<method name="calledPartyBCDToString([BII)Ljava/lang/String;" deprecated="28"/>
+		<method name="calledPartyBCDToString([BIII)Ljava/lang/String;" since="28"/>
+		<method name="compare(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Z" since="5" deprecated="31"/>
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="31"/>
+		<method name="convertKeypadLettersToDigits(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="createTtsSpan(Ljava/lang/String;)Landroid/text/style/TtsSpan;" since="23"/>
+		<method name="createTtsSpannable(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="23"/>
+		<method name="extractNetworkPortion(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="extractPostDialPortion(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="formatJapaneseNumber(Landroid/text/Editable;)V" since="3" deprecated="21"/>
+		<method name="formatNanpNumber(Landroid/text/Editable;)V" deprecated="21"/>
+		<method name="formatNumber(Landroid/text/Editable;I)V" deprecated="21"/>
+		<method name="formatNumber(Ljava/lang/String;)Ljava/lang/String;" deprecated="21"/>
+		<method name="formatNumber(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="formatNumber(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="formatNumberToE164(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="formatNumberToRFC3966(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" since="23"/>
+		<method name="getFormatTypeForLocale(Ljava/util/Locale;)I" deprecated="21"/>
+		<method name="getNumberFromIntent(Landroid/content/Intent;Landroid/content/Context;)Ljava/lang/String;"/>
+		<method name="getStrippedReversed(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="is12Key(C)Z"/>
+		<method name="isDialable(C)Z"/>
+		<method name="isEmergencyNumber(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="isGlobalPhoneNumber(Ljava/lang/String;)Z"/>
+		<method name="isISODigit(C)Z"/>
+		<method name="isLocalEmergencyNumber(Landroid/content/Context;Ljava/lang/String;)Z" since="21" deprecated="29"/>
+		<method name="isNonSeparator(C)Z"/>
+		<method name="isReallyDialable(C)Z"/>
+		<method name="isStartsPostDial(C)Z"/>
+		<method name="isVoiceMailNumber(Ljava/lang/String;)Z" since="21"/>
+		<method name="isWellFormedSmsAddress(Ljava/lang/String;)Z"/>
+		<method name="networkPortionToCalledPartyBCD(Ljava/lang/String;)[B"/>
+		<method name="networkPortionToCalledPartyBCDWithLength(Ljava/lang/String;)[B"/>
+		<method name="normalizeNumber(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="numberToCalledPartyBCD(Ljava/lang/String;)[B" deprecated="28"/>
+		<method name="numberToCalledPartyBCD(Ljava/lang/String;I)[B" since="28"/>
+		<method name="replaceUnicodeDigits(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="stringFromStringAndTOA(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<method name="stripSeparators(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toCallerIDMinMatch(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toaFromString(Ljava/lang/String;)I"/>
+		<field name="BCD_EXTENDED_TYPE_CALLED_PARTY" since="28"/>
+		<field name="BCD_EXTENDED_TYPE_EF_ADN" since="28"/>
+		<field name="FORMAT_JAPAN" since="3"/>
+		<field name="FORMAT_NANP"/>
+		<field name="FORMAT_UNKNOWN"/>
+		<field name="PAUSE"/>
+		<field name="TOA_International"/>
+		<field name="TOA_Unknown"/>
+		<field name="WAIT"/>
+		<field name="WILD"/>
+	</class>
+	<class name="android/telephony/PhoneStateListener" since="1" deprecated="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(Ljava/util/concurrent/Executor;)V" since="29" deprecated="31"/>
+		<method name="onActiveDataSubscriptionIdChanged(I)V" since="29" deprecated="31"/>
+		<method name="onBarringInfoChanged(Landroid/telephony/BarringInfo;)V" since="30" deprecated="31"/>
+		<method name="onCallDisconnectCauseChanged(II)V" since="30" deprecated="31"/>
+		<method name="onCallForwardingIndicatorChanged(Z)V" deprecated="31"/>
+		<method name="onCallStateChanged(ILjava/lang/String;)V" deprecated="31"/>
+		<method name="onCellInfoChanged(Ljava/util/List;)V" since="17" deprecated="31"/>
+		<method name="onCellLocationChanged(Landroid/telephony/CellLocation;)V" deprecated="31"/>
+		<method name="onDataActivity(I)V" deprecated="31"/>
+		<method name="onDataConnectionStateChanged(I)V" deprecated="31"/>
+		<method name="onDataConnectionStateChanged(II)V" since="7" deprecated="31"/>
+		<method name="onDisplayInfoChanged(Landroid/telephony/TelephonyDisplayInfo;)V" since="30" deprecated="31"/>
+		<method name="onEmergencyNumberListChanged(Ljava/util/Map;)V" since="31" deprecated="31"/>
+		<method name="onImsCallDisconnectCauseChanged(Landroid/telephony/ims/ImsReasonInfo;)V" since="30" deprecated="31"/>
+		<method name="onMessageWaitingIndicatorChanged(Z)V" deprecated="31"/>
+		<method name="onPreciseDataConnectionStateChanged(Landroid/telephony/PreciseDataConnectionState;)V" since="30" deprecated="31"/>
+		<method name="onRegistrationFailed(Landroid/telephony/CellIdentity;Ljava/lang/String;III)V" since="30" deprecated="31"/>
+		<method name="onServiceStateChanged(Landroid/telephony/ServiceState;)V" deprecated="31"/>
+		<method name="onSignalStrengthChanged(I)V" deprecated="15"/>
+		<method name="onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V" since="7" deprecated="31"/>
+		<method name="onUserMobileDataStateChanged(Z)V" since="28" deprecated="31"/>
+		<field name="LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE" since="29" deprecated="31"/>
+		<field name="LISTEN_BARRING_INFO" since="30" deprecated="31"/>
+		<field name="LISTEN_CALL_DISCONNECT_CAUSES" since="30" deprecated="31"/>
+		<field name="LISTEN_CALL_FORWARDING_INDICATOR" deprecated="31"/>
+		<field name="LISTEN_CALL_STATE" deprecated="31"/>
+		<field name="LISTEN_CELL_INFO" since="17" deprecated="31"/>
+		<field name="LISTEN_CELL_LOCATION" deprecated="31"/>
+		<field name="LISTEN_DATA_ACTIVITY" deprecated="31"/>
+		<field name="LISTEN_DATA_CONNECTION_STATE" deprecated="31"/>
+		<field name="LISTEN_DISPLAY_INFO_CHANGED" since="30" deprecated="31"/>
+		<field name="LISTEN_EMERGENCY_NUMBER_LIST" since="29" deprecated="31"/>
+		<field name="LISTEN_IMS_CALL_DISCONNECT_CAUSES" since="30" deprecated="31"/>
+		<field name="LISTEN_MESSAGE_WAITING_INDICATOR" deprecated="31"/>
+		<field name="LISTEN_NONE" deprecated="31"/>
+		<field name="LISTEN_PRECISE_DATA_CONNECTION_STATE" since="30" deprecated="31"/>
+		<field name="LISTEN_REGISTRATION_FAILURE" since="30" deprecated="31"/>
+		<field name="LISTEN_SERVICE_STATE" deprecated="31"/>
+		<field name="LISTEN_SIGNAL_STRENGTH" deprecated="15"/>
+		<field name="LISTEN_SIGNAL_STRENGTHS" since="7" deprecated="31"/>
+		<field name="LISTEN_USER_MOBILE_DATA_STATE" since="28" deprecated="31"/>
+	</class>
+	<class name="android/telephony/PhysicalChannelConfig" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBand()I"/>
+		<method name="getCellBandwidthDownlinkKhz()I"/>
+		<method name="getCellBandwidthUplinkKhz()I"/>
+		<method name="getConnectionStatus()I"/>
+		<method name="getDownlinkChannelNumber()I"/>
+		<method name="getDownlinkFrequencyKhz()I"/>
+		<method name="getNetworkType()I"/>
+		<method name="getPhysicalCellId()I"/>
+		<method name="getUplinkChannelNumber()I"/>
+		<method name="getUplinkFrequencyKhz()I"/>
+		<field name="BAND_UNKNOWN"/>
+		<field name="CELL_BANDWIDTH_UNKNOWN"/>
+		<field name="CHANNEL_NUMBER_UNKNOWN"/>
+		<field name="CONNECTION_PRIMARY_SERVING"/>
+		<field name="CONNECTION_SECONDARY_SERVING"/>
+		<field name="CONNECTION_UNKNOWN"/>
+		<field name="CREATOR"/>
+		<field name="FREQUENCY_UNKNOWN"/>
+		<field name="PHYSICAL_CELL_ID_MAXIMUM_VALUE"/>
+		<field name="PHYSICAL_CELL_ID_UNKNOWN"/>
+	</class>
+	<class name="android/telephony/PreciseDataConnectionState" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getApnSetting()Landroid/telephony/data/ApnSetting;"/>
+		<method name="getId()I" since="31"/>
+		<method name="getLastCauseCode()I"/>
+		<method name="getLinkProperties()Landroid/net/LinkProperties;"/>
+		<method name="getNetworkType()I"/>
+		<method name="getState()I"/>
+		<method name="getTransportType()I" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/RadioAccessSpecifier" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I[I[I)V"/>
+		<method name="getBands()[I"/>
+		<method name="getChannels()[I"/>
+		<method name="getRadioAccessNetwork()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/ServiceState" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/telephony/ServiceState;)V"/>
+		<method name="copyFrom(Landroid/telephony/ServiceState;)V"/>
+		<method name="getCdmaNetworkId()I" since="28"/>
+		<method name="getCdmaSystemId()I" since="28"/>
+		<method name="getCellBandwidths()[I" since="28"/>
+		<method name="getChannelNumber()I" since="28"/>
+		<method name="getDuplexMode()I" since="28"/>
+		<method name="getIsManualSelection()Z"/>
+		<method name="getNetworkRegistrationInfoList()Ljava/util/List;" since="30"/>
+		<method name="getOperatorAlphaLong()Ljava/lang/String;"/>
+		<method name="getOperatorAlphaShort()Ljava/lang/String;"/>
+		<method name="getOperatorNumeric()Ljava/lang/String;"/>
+		<method name="getRoaming()Z"/>
+		<method name="getState()I"/>
+		<method name="isSearching()Z" since="30"/>
+		<method name="setIsManualSelection(Z)V"/>
+		<method name="setOperatorName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setRoaming(Z)V"/>
+		<method name="setState(I)V"/>
+		<method name="setStateOff()V"/>
+		<method name="setStateOutOfService()V"/>
+		<field name="CREATOR"/>
+		<field name="DUPLEX_MODE_FDD" since="28"/>
+		<field name="DUPLEX_MODE_TDD" since="28"/>
+		<field name="DUPLEX_MODE_UNKNOWN" since="28"/>
+		<field name="STATE_EMERGENCY_ONLY"/>
+		<field name="STATE_IN_SERVICE"/>
+		<field name="STATE_OUT_OF_SERVICE"/>
+		<field name="STATE_POWER_OFF"/>
+		<field name="UNKNOWN_ID" since="28"/>
+	</class>
+	<class name="android/telephony/SignalStrength" since="7">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/telephony/SignalStrength;)V" since="31"/>
+		<method name="getCdmaDbm()I" deprecated="29"/>
+		<method name="getCdmaEcio()I" deprecated="29"/>
+		<method name="getCellSignalStrengths()Ljava/util/List;" since="29"/>
+		<method name="getCellSignalStrengths(Ljava/lang/Class;)Ljava/util/List;" since="29"/>
+		<method name="getEvdoDbm()I" deprecated="29"/>
+		<method name="getEvdoEcio()I" deprecated="29"/>
+		<method name="getEvdoSnr()I" deprecated="29"/>
+		<method name="getGsmBitErrorRate()I" deprecated="29"/>
+		<method name="getGsmSignalStrength()I" deprecated="29"/>
+		<method name="getLevel()I" since="23"/>
+		<method name="getTimestampMillis()J" since="30"/>
+		<method name="isGsm()Z" deprecated="29"/>
+		<field name="CREATOR" since="30"/>
+		<field name="INVALID" since="29"/>
+	</class>
+	<class name="android/telephony/SignalStrengthUpdateRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getSignalThresholdInfos()Ljava/util/Collection;"/>
+		<method name="isReportingRequestedWhileIdle()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/SignalStrengthUpdateRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/telephony/SignalStrengthUpdateRequest;"/>
+		<method name="setReportingRequestedWhileIdle(Z)Landroid/telephony/SignalStrengthUpdateRequest$Builder;"/>
+		<method name="setSignalThresholdInfos(Ljava/util/Collection;)Landroid/telephony/SignalStrengthUpdateRequest$Builder;"/>
+	</class>
+	<class name="android/telephony/SignalThresholdInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getMaximumNumberOfThresholdsAllowed()I"/>
+		<method name="getMinimumNumberOfThresholdsAllowed()I"/>
+		<method name="getRadioAccessNetworkType()I"/>
+		<method name="getSignalMeasurementType()I"/>
+		<method name="getThresholds()[I"/>
+		<field name="CREATOR"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSCP"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSRP"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSRQ"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSSI"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_RSSNR"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_SSRSRP"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_SSRSRQ"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_SSSINR"/>
+		<field name="SIGNAL_MEASUREMENT_TYPE_UNKNOWN"/>
+	</class>
+	<class name="android/telephony/SignalThresholdInfo$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/telephony/SignalThresholdInfo;"/>
+		<method name="setRadioAccessNetworkType(I)Landroid/telephony/SignalThresholdInfo$Builder;"/>
+		<method name="setSignalMeasurementType(I)Landroid/telephony/SignalThresholdInfo$Builder;"/>
+		<method name="setThresholds([I)Landroid/telephony/SignalThresholdInfo$Builder;"/>
+	</class>
+	<class name="android/telephony/SmsManager" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="createAppSpecificSmsToken(Landroid/app/PendingIntent;)Ljava/lang/String;" since="26"/>
+		<method name="createAppSpecificSmsTokenWithPackageInfo(Ljava/lang/String;Landroid/app/PendingIntent;)Ljava/lang/String;" since="29"/>
+		<method name="createForSubscriptionId(I)Landroid/telephony/SmsManager;" since="31"/>
+		<method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;"/>
+		<method name="downloadMultimediaMessage(Landroid/content/Context;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;)V" since="21"/>
+		<method name="downloadMultimediaMessage(Landroid/content/Context;Ljava/lang/String;Landroid/net/Uri;Landroid/os/Bundle;Landroid/app/PendingIntent;J)V" since="31"/>
+		<method name="getCarrierConfigValues()Landroid/os/Bundle;" since="21"/>
+		<method name="getDefault()Landroid/telephony/SmsManager;" deprecated="31"/>
+		<method name="getDefaultSmsSubscriptionId()I" since="22"/>
+		<method name="getSmsCapacityOnIcc()I" since="31"/>
+		<method name="getSmsManagerForSubscriptionId(I)Landroid/telephony/SmsManager;" since="22" deprecated="31"/>
+		<method name="getSmsMessagesForFinancialApp(Landroid/os/Bundle;Ljava/util/concurrent/Executor;Landroid/telephony/SmsManager$FinancialSmsCallback;)V" since="29"/>
+		<method name="getSmscAddress()Ljava/lang/String;" since="30"/>
+		<method name="getSubscriptionId()I" since="22"/>
+		<method name="injectSmsPdu([BLjava/lang/String;Landroid/app/PendingIntent;)V" since="22"/>
+		<method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V"/>
+		<method name="sendMultimediaMessage(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;)V" since="21"/>
+		<method name="sendMultimediaMessage(Landroid/content/Context;Landroid/net/Uri;Ljava/lang/String;Landroid/os/Bundle;Landroid/app/PendingIntent;J)V" since="31"/>
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V"/>
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;J)V" since="30"/>
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;)V" since="30"/>
+		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V"/>
+		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;J)V" since="30"/>
+		<method name="sendTextMessageWithoutPersisting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" since="28"/>
+		<method name="setSmscAddress(Ljava/lang/String;)Z" since="30"/>
+		<field name="EXTRA_MMS_DATA" since="21"/>
+		<field name="EXTRA_MMS_HTTP_STATUS" since="22"/>
+		<field name="MMS_CONFIG_ALIAS_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_ALIAS_MAX_CHARS" since="21"/>
+		<field name="MMS_CONFIG_ALIAS_MIN_CHARS" since="21"/>
+		<field name="MMS_CONFIG_ALLOW_ATTACH_AUDIO" since="21"/>
+		<field name="MMS_CONFIG_APPEND_TRANSACTION_ID" since="21"/>
+		<field name="MMS_CONFIG_EMAIL_GATEWAY_NUMBER" since="21"/>
+		<field name="MMS_CONFIG_GROUP_MMS_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_HTTP_PARAMS" since="21"/>
+		<field name="MMS_CONFIG_HTTP_SOCKET_TIMEOUT" since="21"/>
+		<field name="MMS_CONFIG_MAX_IMAGE_HEIGHT" since="21"/>
+		<field name="MMS_CONFIG_MAX_IMAGE_WIDTH" since="21"/>
+		<field name="MMS_CONFIG_MAX_MESSAGE_SIZE" since="21"/>
+		<field name="MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE" since="21"/>
+		<field name="MMS_CONFIG_MMS_DELIVERY_REPORT_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_MMS_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_MMS_READ_REPORT_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_MULTIPART_SMS_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_NAI_SUFFIX" since="21"/>
+		<field name="MMS_CONFIG_NOTIFY_WAP_MMSC_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_RECIPIENT_LIMIT" since="21"/>
+		<field name="MMS_CONFIG_SEND_MULTIPART_SMS_AS_SEPARATE_MESSAGES" since="21"/>
+		<field name="MMS_CONFIG_SHOW_CELL_BROADCAST_APP_LINKS" since="22"/>
+		<field name="MMS_CONFIG_SMS_DELIVERY_REPORT_ENABLED" since="21"/>
+		<field name="MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD" since="21"/>
+		<field name="MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD" since="21"/>
+		<field name="MMS_CONFIG_SUBJECT_MAX_LENGTH" since="21"/>
+		<field name="MMS_CONFIG_SUPPORT_HTTP_CHARSET_HEADER" since="23"/>
+		<field name="MMS_CONFIG_SUPPORT_MMS_CONTENT_DISPOSITION" since="21"/>
+		<field name="MMS_CONFIG_UA_PROF_TAG_NAME" since="21"/>
+		<field name="MMS_CONFIG_UA_PROF_URL" since="21"/>
+		<field name="MMS_CONFIG_USER_AGENT" since="21"/>
+		<field name="MMS_ERROR_CONFIGURATION_ERROR" since="21"/>
+		<field name="MMS_ERROR_HTTP_FAILURE" since="21"/>
+		<field name="MMS_ERROR_INVALID_APN" since="21"/>
+		<field name="MMS_ERROR_IO_ERROR" since="21"/>
+		<field name="MMS_ERROR_NO_DATA_NETWORK" since="22"/>
+		<field name="MMS_ERROR_RETRY" since="21"/>
+		<field name="MMS_ERROR_UNABLE_CONNECT_MMS" since="21"/>
+		<field name="MMS_ERROR_UNSPECIFIED" since="21"/>
+		<field name="RESULT_BLUETOOTH_DISCONNECTED" since="30"/>
+		<field name="RESULT_CANCELLED" since="30"/>
+		<field name="RESULT_ENCODING_ERROR" since="30"/>
+		<field name="RESULT_ERROR_FDN_CHECK_FAILURE" since="30"/>
+		<field name="RESULT_ERROR_GENERIC_FAILURE"/>
+		<field name="RESULT_ERROR_LIMIT_EXCEEDED" since="27"/>
+		<field name="RESULT_ERROR_NONE" since="30"/>
+		<field name="RESULT_ERROR_NO_SERVICE"/>
+		<field name="RESULT_ERROR_NULL_PDU"/>
+		<field name="RESULT_ERROR_RADIO_OFF"/>
+		<field name="RESULT_ERROR_SHORT_CODE_NEVER_ALLOWED" since="27"/>
+		<field name="RESULT_ERROR_SHORT_CODE_NOT_ALLOWED" since="27"/>
+		<field name="RESULT_INTERNAL_ERROR" since="30"/>
+		<field name="RESULT_INVALID_ARGUMENTS" since="30"/>
+		<field name="RESULT_INVALID_BLUETOOTH_ADDRESS" since="30"/>
+		<field name="RESULT_INVALID_SMSC_ADDRESS" since="30"/>
+		<field name="RESULT_INVALID_SMS_FORMAT" since="30"/>
+		<field name="RESULT_INVALID_STATE" since="30"/>
+		<field name="RESULT_MODEM_ERROR" since="30"/>
+		<field name="RESULT_NETWORK_ERROR" since="30"/>
+		<field name="RESULT_NETWORK_REJECT" since="30"/>
+		<field name="RESULT_NO_BLUETOOTH_SERVICE" since="30"/>
+		<field name="RESULT_NO_DEFAULT_SMS_APP" since="30"/>
+		<field name="RESULT_NO_MEMORY" since="30"/>
+		<field name="RESULT_NO_RESOURCES" since="30"/>
+		<field name="RESULT_OPERATION_NOT_ALLOWED" since="30"/>
+		<field name="RESULT_RADIO_NOT_AVAILABLE" since="30"/>
+		<field name="RESULT_RECEIVE_DISPATCH_FAILURE" since="30"/>
+		<field name="RESULT_RECEIVE_INJECTED_NULL_PDU" since="30"/>
+		<field name="RESULT_RECEIVE_NULL_MESSAGE_FROM_RIL" since="30"/>
+		<field name="RESULT_RECEIVE_RUNTIME_EXCEPTION" since="30"/>
+		<field name="RESULT_RECEIVE_SQL_EXCEPTION" since="30"/>
+		<field name="RESULT_RECEIVE_URI_EXCEPTION" since="30"/>
+		<field name="RESULT_RECEIVE_WHILE_ENCRYPTED" since="30"/>
+		<field name="RESULT_REMOTE_EXCEPTION" since="30"/>
+		<field name="RESULT_REQUEST_NOT_SUPPORTED" since="30"/>
+		<field name="RESULT_RIL_ACCESS_BARRED" since="31"/>
+		<field name="RESULT_RIL_BLOCKED_DUE_TO_CALL" since="31"/>
+		<field name="RESULT_RIL_CANCELLED" since="30"/>
+		<field name="RESULT_RIL_ENCODING_ERR" since="30"/>
+		<field name="RESULT_RIL_INTERNAL_ERR" since="30"/>
+		<field name="RESULT_RIL_INVALID_ARGUMENTS" since="30"/>
+		<field name="RESULT_RIL_INVALID_MODEM_STATE" since="30"/>
+		<field name="RESULT_RIL_INVALID_SMSC_ADDRESS" since="30"/>
+		<field name="RESULT_RIL_INVALID_SMS_FORMAT" since="30"/>
+		<field name="RESULT_RIL_INVALID_STATE" since="30"/>
+		<field name="RESULT_RIL_MODEM_ERR" since="30"/>
+		<field name="RESULT_RIL_NETWORK_ERR" since="30"/>
+		<field name="RESULT_RIL_NETWORK_NOT_READY" since="30"/>
+		<field name="RESULT_RIL_NETWORK_REJECT" since="30"/>
+		<field name="RESULT_RIL_NO_MEMORY" since="30"/>
+		<field name="RESULT_RIL_NO_RESOURCES" since="30"/>
+		<field name="RESULT_RIL_OPERATION_NOT_ALLOWED" since="30"/>
+		<field name="RESULT_RIL_RADIO_NOT_AVAILABLE" since="30"/>
+		<field name="RESULT_RIL_REQUEST_NOT_SUPPORTED" since="30"/>
+		<field name="RESULT_RIL_REQUEST_RATE_LIMITED" since="30"/>
+		<field name="RESULT_RIL_SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED" since="31"/>
+		<field name="RESULT_RIL_SIM_ABSENT" since="30"/>
+		<field name="RESULT_RIL_SMS_SEND_FAIL_RETRY" since="30"/>
+		<field name="RESULT_RIL_SYSTEM_ERR" since="30"/>
+		<field name="RESULT_SMS_BLOCKED_DURING_EMERGENCY" since="30"/>
+		<field name="RESULT_SMS_SEND_RETRY_FAILED" since="30"/>
+		<field name="RESULT_SYSTEM_ERROR" since="30"/>
+		<field name="RESULT_UNEXPECTED_EVENT_STOP_SENDING" since="30"/>
+		<field name="STATUS_ON_ICC_FREE"/>
+		<field name="STATUS_ON_ICC_READ"/>
+		<field name="STATUS_ON_ICC_SENT"/>
+		<field name="STATUS_ON_ICC_UNREAD"/>
+		<field name="STATUS_ON_ICC_UNSENT"/>
+	</class>
+	<class name="android/telephony/SmsManager$FinancialSmsCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onFinancialSmsMessages(Landroid/database/CursorWindow;)V"/>
+	</class>
+	<class name="android/telephony/SmsMessage" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="calculateLength(Ljava/lang/CharSequence;Z)[I"/>
+		<method name="calculateLength(Ljava/lang/String;Z)[I"/>
+		<method name="createFromPdu([B)Landroid/telephony/SmsMessage;" deprecated="23"/>
+		<method name="createFromPdu([BLjava/lang/String;)Landroid/telephony/SmsMessage;" since="23"/>
+		<method name="getDisplayMessageBody()Ljava/lang/String;"/>
+		<method name="getDisplayOriginatingAddress()Ljava/lang/String;"/>
+		<method name="getEmailBody()Ljava/lang/String;"/>
+		<method name="getEmailFrom()Ljava/lang/String;"/>
+		<method name="getIndexOnIcc()I"/>
+		<method name="getIndexOnSim()I" deprecated="15"/>
+		<method name="getMessageBody()Ljava/lang/String;"/>
+		<method name="getMessageClass()Landroid/telephony/SmsMessage$MessageClass;"/>
+		<method name="getOriginatingAddress()Ljava/lang/String;"/>
+		<method name="getPdu()[B"/>
+		<method name="getProtocolIdentifier()I"/>
+		<method name="getPseudoSubject()Ljava/lang/String;"/>
+		<method name="getServiceCenterAddress()Ljava/lang/String;"/>
+		<method name="getStatus()I"/>
+		<method name="getStatusOnIcc()I"/>
+		<method name="getStatusOnSim()I" deprecated="15"/>
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/SmsMessage$SubmitPdu;"/>
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/SmsMessage$SubmitPdu;"/>
+		<method name="getTPLayerLengthForPDU(Ljava/lang/String;)I"/>
+		<method name="getTimestampMillis()J"/>
+		<method name="getUserData()[B"/>
+		<method name="isCphsMwiMessage()Z"/>
+		<method name="isEmail()Z"/>
+		<method name="isMWIClearMessage()Z"/>
+		<method name="isMWISetMessage()Z"/>
+		<method name="isMwiDontStore()Z"/>
+		<method name="isReplace()Z"/>
+		<method name="isReplyPathPresent()Z"/>
+		<method name="isStatusReportMessage()Z"/>
+		<field name="ENCODING_16BIT"/>
+		<field name="ENCODING_7BIT"/>
+		<field name="ENCODING_8BIT"/>
+		<field name="ENCODING_UNKNOWN"/>
+		<field name="FORMAT_3GPP" since="28"/>
+		<field name="FORMAT_3GPP2" since="28"/>
+		<field name="MAX_USER_DATA_BYTES"/>
+		<field name="MAX_USER_DATA_BYTES_WITH_HEADER"/>
+		<field name="MAX_USER_DATA_SEPTETS"/>
+		<field name="MAX_USER_DATA_SEPTETS_WITH_HEADER"/>
+	</class>
+	<class name="android/telephony/SmsMessage$MessageClass" since="4">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/telephony/SmsMessage$MessageClass;"/>
+		<method name="values()[Landroid/telephony/SmsMessage$MessageClass;"/>
+		<field name="CLASS_0"/>
+		<field name="CLASS_1"/>
+		<field name="CLASS_2"/>
+		<field name="CLASS_3"/>
+		<field name="UNKNOWN"/>
+	</class>
+	<class name="android/telephony/SmsMessage$SubmitPdu" since="4">
+		<extends name="java/lang/Object"/>
+		<field name="encodedMessage"/>
+		<field name="encodedScAddress"/>
+	</class>
+	<class name="android/telephony/SubscriptionInfo" since="22">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createIconBitmap(Landroid/content/Context;)Landroid/graphics/Bitmap;"/>
+		<method name="getCardId()I" since="29"/>
+		<method name="getCarrierId()I" since="29"/>
+		<method name="getCarrierName()Ljava/lang/CharSequence;"/>
+		<method name="getCountryIso()Ljava/lang/String;"/>
+		<method name="getDataRoaming()I"/>
+		<method name="getDisplayName()Ljava/lang/CharSequence;"/>
+		<method name="getGroupUuid()Landroid/os/ParcelUuid;" since="29"/>
+		<method name="getIccId()Ljava/lang/String;"/>
+		<method name="getIconTint()I"/>
+		<method name="getMcc()I" deprecated="29"/>
+		<method name="getMccString()Ljava/lang/String;" since="29"/>
+		<method name="getMnc()I" deprecated="29"/>
+		<method name="getMncString()Ljava/lang/String;" since="29"/>
+		<method name="getNumber()Ljava/lang/String;"/>
+		<method name="getSimSlotIndex()I"/>
+		<method name="getSubscriptionId()I"/>
+		<method name="getSubscriptionType()I" since="29"/>
+		<method name="isEmbedded()Z" since="28"/>
+		<method name="isOpportunistic()Z" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/SubscriptionManager" since="22">
+		<extends name="java/lang/Object"/>
+		<method name="addOnOpportunisticSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V" since="29"/>
+		<method name="addOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V" deprecated="31"/>
+		<method name="addOnSubscriptionsChangedListener(Ljava/util/concurrent/Executor;Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V" since="30"/>
+		<method name="addSubscriptionsIntoGroup(Ljava/util/List;Landroid/os/ParcelUuid;)V" since="29"/>
+		<method name="canManageSubscription(Landroid/telephony/SubscriptionInfo;)Z" since="28"/>
+		<method name="createSubscriptionGroup(Ljava/util/List;)Landroid/os/ParcelUuid;" since="29"/>
+		<method name="from(Landroid/content/Context;)Landroid/telephony/SubscriptionManager;" deprecated="28"/>
+		<method name="getAccessibleSubscriptionInfoList()Ljava/util/List;" since="28"/>
+		<method name="getActiveDataSubscriptionId()I" since="30"/>
+		<method name="getActiveSubscriptionInfo(I)Landroid/telephony/SubscriptionInfo;"/>
+		<method name="getActiveSubscriptionInfoCount()I"/>
+		<method name="getActiveSubscriptionInfoCountMax()I"/>
+		<method name="getActiveSubscriptionInfoForSimSlotIndex(I)Landroid/telephony/SubscriptionInfo;"/>
+		<method name="getActiveSubscriptionInfoList()Ljava/util/List;"/>
+		<method name="getCompleteActiveSubscriptionInfoList()Ljava/util/List;" since="30"/>
+		<method name="getDefaultDataSubscriptionId()I" since="24"/>
+		<method name="getDefaultSmsSubscriptionId()I" since="24"/>
+		<method name="getDefaultSubscriptionId()I" since="24"/>
+		<method name="getDefaultVoiceSubscriptionId()I" since="24"/>
+		<method name="getDeviceToDeviceStatusSharingContacts(I)Ljava/util/List;" since="31"/>
+		<method name="getDeviceToDeviceStatusSharingPreference(I)I" since="31"/>
+		<method name="getOpportunisticSubscriptions()Ljava/util/List;" since="29"/>
+		<method name="getSlotIndex(I)I" since="29"/>
+		<method name="getSubscriptionIds(I)[I" since="29"/>
+		<method name="getSubscriptionPlans(I)Ljava/util/List;" since="28"/>
+		<method name="getSubscriptionsInGroup(Landroid/os/ParcelUuid;)Ljava/util/List;" since="29"/>
+		<method name="isActiveSubscriptionId(I)Z" since="29"/>
+		<method name="isNetworkRoaming(I)Z"/>
+		<method name="isUsableSubscriptionId(I)Z" since="29"/>
+		<method name="isValidSubscriptionId(I)Z" since="29"/>
+		<method name="removeOnOpportunisticSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener;)V" since="29"/>
+		<method name="removeOnSubscriptionsChangedListener(Landroid/telephony/SubscriptionManager$OnSubscriptionsChangedListener;)V"/>
+		<method name="removeSubscriptionsFromGroup(Ljava/util/List;Landroid/os/ParcelUuid;)V" since="29"/>
+		<method name="setDeviceToDeviceStatusSharingContacts(ILjava/util/List;)V" since="31"/>
+		<method name="setDeviceToDeviceStatusSharingPreference(II)V" since="31"/>
+		<method name="setOpportunistic(ZI)Z" since="29"/>
+		<method name="setSubscriptionOverrideCongested(IZJ)V" since="28"/>
+		<method name="setSubscriptionOverrideCongested(IZ[IJ)V" since="31"/>
+		<method name="setSubscriptionOverrideUnmetered(IZJ)V" since="28"/>
+		<method name="setSubscriptionOverrideUnmetered(IZ[IJ)V" since="31"/>
+		<method name="setSubscriptionPlans(ILjava/util/List;)V" since="28"/>
+		<method name="switchToSubscription(ILandroid/app/PendingIntent;)V" since="29"/>
+		<field name="ACTION_DEFAULT_SMS_SUBSCRIPTION_CHANGED" since="26"/>
+		<field name="ACTION_DEFAULT_SUBSCRIPTION_CHANGED" since="26"/>
+		<field name="ACTION_MANAGE_SUBSCRIPTION_PLANS" since="28"/>
+		<field name="ACTION_REFRESH_SUBSCRIPTION_PLANS" since="28"/>
+		<field name="D2D_SHARING_ALL" since="31"/>
+		<field name="D2D_SHARING_ALL_CONTACTS" since="31"/>
+		<field name="D2D_SHARING_DISABLED" since="31"/>
+		<field name="D2D_SHARING_SELECTED_CONTACTS" since="31"/>
+		<field name="D2D_STATUS_SHARING" since="31"/>
+		<field name="D2D_STATUS_SHARING_SELECTED_CONTACTS" since="31"/>
+		<field name="DATA_ROAMING_DISABLE"/>
+		<field name="DATA_ROAMING_ENABLE"/>
+		<field name="DEFAULT_SUBSCRIPTION_ID" since="29"/>
+		<field name="EXTRA_SLOT_INDEX" since="30"/>
+		<field name="EXTRA_SUBSCRIPTION_INDEX" since="26"/>
+		<field name="INVALID_SIM_SLOT_INDEX" since="29"/>
+		<field name="INVALID_SUBSCRIPTION_ID" since="24"/>
+		<field name="SUBSCRIPTION_TYPE_LOCAL_SIM" since="29"/>
+		<field name="SUBSCRIPTION_TYPE_REMOTE_SIM" since="29"/>
+	</class>
+	<class name="android/telephony/SubscriptionManager$OnOpportunisticSubscriptionsChangedListener" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onOpportunisticSubscriptionsChanged()V"/>
+	</class>
+	<class name="android/telephony/SubscriptionManager$OnSubscriptionsChangedListener" since="22">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onSubscriptionsChanged()V"/>
+	</class>
+	<class name="android/telephony/SubscriptionPlan" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="cycleIterator()Ljava/util/Iterator;"/>
+		<method name="getDataLimitBehavior()I"/>
+		<method name="getDataLimitBytes()J"/>
+		<method name="getDataUsageBytes()J"/>
+		<method name="getDataUsageTime()J"/>
+		<method name="getNetworkTypes()[I" since="30"/>
+		<method name="getSummary()Ljava/lang/CharSequence;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<field name="BYTES_UNKNOWN"/>
+		<field name="BYTES_UNLIMITED"/>
+		<field name="CREATOR"/>
+		<field name="LIMIT_BEHAVIOR_BILLED"/>
+		<field name="LIMIT_BEHAVIOR_DISABLED"/>
+		<field name="LIMIT_BEHAVIOR_THROTTLED"/>
+		<field name="LIMIT_BEHAVIOR_UNKNOWN"/>
+		<field name="TIME_UNKNOWN"/>
+	</class>
+	<class name="android/telephony/SubscriptionPlan$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="build()Landroid/telephony/SubscriptionPlan;"/>
+		<method name="createNonrecurring(Ljava/time/ZonedDateTime;Ljava/time/ZonedDateTime;)Landroid/telephony/SubscriptionPlan$Builder;"/>
+		<method name="createRecurring(Ljava/time/ZonedDateTime;Ljava/time/Period;)Landroid/telephony/SubscriptionPlan$Builder;"/>
+		<method name="resetNetworkTypes()Landroid/telephony/SubscriptionPlan$Builder;" since="30"/>
+		<method name="setDataLimit(JI)Landroid/telephony/SubscriptionPlan$Builder;"/>
+		<method name="setDataUsage(JJ)Landroid/telephony/SubscriptionPlan$Builder;"/>
+		<method name="setNetworkTypes([I)Landroid/telephony/SubscriptionPlan$Builder;" since="30"/>
+		<method name="setSummary(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/telephony/SubscriptionPlan$Builder;"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$ActiveDataSubscriptionIdListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onActiveDataSubscriptionIdChanged(I)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$BarringInfoListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onBarringInfoChanged(Landroid/telephony/BarringInfo;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$CallDisconnectCauseListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onCallDisconnectCauseChanged(II)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$CallForwardingIndicatorListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onCallForwardingIndicatorChanged(Z)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$CallStateListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onCallStateChanged(I)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$CarrierNetworkListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onCarrierNetworkChange(Z)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$CellInfoListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onCellInfoChanged(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$CellLocationListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onCellLocationChanged(Landroid/telephony/CellLocation;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$DataActivationStateListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onDataActivationStateChanged(I)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$DataActivityListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onDataActivity(I)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$DataConnectionStateListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onDataConnectionStateChanged(II)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$DisplayInfoListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onDisplayInfoChanged(Landroid/telephony/TelephonyDisplayInfo;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$EmergencyNumberListListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onEmergencyNumberListChanged(Ljava/util/Map;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$ImsCallDisconnectCauseListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onImsCallDisconnectCauseChanged(Landroid/telephony/ims/ImsReasonInfo;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$MessageWaitingIndicatorListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onMessageWaitingIndicatorChanged(Z)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$PhysicalChannelConfigListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onPhysicalChannelConfigChanged(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$PreciseDataConnectionStateListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onPreciseDataConnectionStateChanged(Landroid/telephony/PreciseDataConnectionState;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$RegistrationFailedListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onRegistrationFailed(Landroid/telephony/CellIdentity;Ljava/lang/String;III)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$ServiceStateListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onServiceStateChanged(Landroid/telephony/ServiceState;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$SignalStrengthsListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onSignalStrengthsChanged(Landroid/telephony/SignalStrength;)V"/>
+	</class>
+	<class name="android/telephony/TelephonyCallback$UserMobileDataStateListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onUserMobileDataStateChanged(Z)V"/>
+	</class>
+	<class name="android/telephony/TelephonyDisplayInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getNetworkType()I"/>
+		<method name="getOverrideNetworkType()I"/>
+		<field name="CREATOR"/>
+		<field name="OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO"/>
+		<field name="OVERRIDE_NETWORK_TYPE_LTE_CA"/>
+		<field name="OVERRIDE_NETWORK_TYPE_NONE"/>
+		<field name="OVERRIDE_NETWORK_TYPE_NR_ADVANCED" since="31"/>
+		<field name="OVERRIDE_NETWORK_TYPE_NR_NSA"/>
+		<field name="OVERRIDE_NETWORK_TYPE_NR_NSA_MMWAVE" deprecated="31"/>
+	</class>
+	<class name="android/telephony/TelephonyManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="canChangeDtmfToneLength()Z" since="23"/>
+		<method name="clearSignalStrengthUpdateRequest(Landroid/telephony/SignalStrengthUpdateRequest;)V" since="31"/>
+		<method name="createForPhoneAccountHandle(Landroid/telecom/PhoneAccountHandle;)Landroid/telephony/TelephonyManager;" since="26"/>
+		<method name="createForSubscriptionId(I)Landroid/telephony/TelephonyManager;" since="24"/>
+		<method name="doesSwitchMultiSimConfigTriggerReboot()Z" since="29"/>
+		<method name="getActiveModemCount()I" since="30"/>
+		<method name="getAllCellInfo()Ljava/util/List;" since="17"/>
+		<method name="getCallComposerStatus()I" since="31"/>
+		<method name="getCallState()I" deprecated="31"/>
+		<method name="getCallStateForSubscription()I" since="31"/>
+		<method name="getCardIdForDefaultEuicc()I" since="29"/>
+		<method name="getCarrierConfig()Landroid/os/PersistableBundle;" since="26"/>
+		<method name="getCarrierIdFromSimMccMnc()I" since="29"/>
+		<method name="getCellLocation()Landroid/telephony/CellLocation;" deprecated="26"/>
+		<method name="getDataActivity()I"/>
+		<method name="getDataNetworkType()I" since="24"/>
+		<method name="getDataState()I"/>
+		<method name="getDeviceId()Ljava/lang/String;" deprecated="26"/>
+		<method name="getDeviceId(I)Ljava/lang/String;" since="23" deprecated="26"/>
+		<method name="getDeviceSoftwareVersion()Ljava/lang/String;"/>
+		<method name="getEmergencyNumberList()Ljava/util/Map;" since="29"/>
+		<method name="getEmergencyNumberList(I)Ljava/util/Map;" since="29"/>
+		<method name="getEquivalentHomePlmns()Ljava/util/List;" since="31"/>
+		<method name="getForbiddenPlmns()[Ljava/lang/String;" since="26"/>
+		<method name="getGroupIdLevel1()Ljava/lang/String;" since="18"/>
+		<method name="getIccAuthentication(IILjava/lang/String;)Ljava/lang/String;" since="24"/>
+		<method name="getImei()Ljava/lang/String;" since="26"/>
+		<method name="getImei(I)Ljava/lang/String;" since="26"/>
+		<method name="getLine1Number()Ljava/lang/String;"/>
+		<method name="getManualNetworkSelectionPlmn()Ljava/lang/String;" since="30"/>
+		<method name="getManufacturerCode()Ljava/lang/String;" since="29"/>
+		<method name="getManufacturerCode(I)Ljava/lang/String;" since="29"/>
+		<method name="getMaximumCallComposerPictureSize()J" since="31"/>
+		<method name="getMeid()Ljava/lang/String;" since="26"/>
+		<method name="getMeid(I)Ljava/lang/String;" since="26"/>
+		<method name="getMmsUAProfUrl()Ljava/lang/String;" since="19"/>
+		<method name="getMmsUserAgent()Ljava/lang/String;" since="19"/>
+		<method name="getNai()Ljava/lang/String;" since="28"/>
+		<method name="getNeighboringCellInfo()Ljava/util/List;" since="3" deprecated="23" removed="29"/>
+		<method name="getNetworkCountryIso()Ljava/lang/String;"/>
+		<method name="getNetworkCountryIso(I)Ljava/lang/String;" since="30"/>
+		<method name="getNetworkOperator()Ljava/lang/String;"/>
+		<method name="getNetworkOperatorName()Ljava/lang/String;"/>
+		<method name="getNetworkSelectionMode()I" since="30"/>
+		<method name="getNetworkSlicingConfiguration(Ljava/util/concurrent/Executor;Landroid/os/OutcomeReceiver;)V" since="31"/>
+		<method name="getNetworkSpecifier()Ljava/lang/String;" since="26"/>
+		<method name="getNetworkType()I" deprecated="30"/>
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;" since="31"/>
+		<method name="getPhoneCount()I" since="23" deprecated="30"/>
+		<method name="getPhoneType()I"/>
+		<method name="getPreferredOpportunisticDataSubscription()I" since="29"/>
+		<method name="getServiceState()Landroid/telephony/ServiceState;" since="26"/>
+		<method name="getSignalStrength()Landroid/telephony/SignalStrength;" since="28"/>
+		<method name="getSimCarrierId()I" since="28"/>
+		<method name="getSimCarrierIdName()Ljava/lang/CharSequence;" since="28"/>
+		<method name="getSimCountryIso()Ljava/lang/String;"/>
+		<method name="getSimOperator()Ljava/lang/String;"/>
+		<method name="getSimOperatorName()Ljava/lang/String;"/>
+		<method name="getSimSerialNumber()Ljava/lang/String;"/>
+		<method name="getSimSpecificCarrierId()I" since="29"/>
+		<method name="getSimSpecificCarrierIdName()Ljava/lang/CharSequence;" since="29"/>
+		<method name="getSimState()I"/>
+		<method name="getSimState(I)I" since="26"/>
+		<method name="getSubscriberId()Ljava/lang/String;"/>
+		<method name="getSubscriptionId()I" since="30"/>
+		<method name="getSubscriptionId(Landroid/telecom/PhoneAccountHandle;)I" since="30"/>
+		<method name="getSupportedModemCount()I" since="30"/>
+		<method name="getTypeAllocationCode()Ljava/lang/String;" since="29"/>
+		<method name="getTypeAllocationCode(I)Ljava/lang/String;" since="29"/>
+		<method name="getUiccCardsInfo()Ljava/util/List;" since="29"/>
+		<method name="getVisualVoicemailPackageName()Ljava/lang/String;" since="26"/>
+		<method name="getVoiceMailAlphaTag()Ljava/lang/String;"/>
+		<method name="getVoiceMailNumber()Ljava/lang/String;"/>
+		<method name="getVoiceNetworkType()I" since="24"/>
+		<method name="getVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;)Landroid/net/Uri;" since="24"/>
+		<method name="hasCarrierPrivileges()Z" since="22"/>
+		<method name="hasIccCard()Z" since="5"/>
+		<method name="iccCloseLogicalChannel(I)Z" since="21" deprecated="30"/>
+		<method name="iccExchangeSimIO(IIIIILjava/lang/String;)[B" since="21" deprecated="30"/>
+		<method name="iccOpenLogicalChannel(Ljava/lang/String;)Landroid/telephony/IccOpenLogicalChannelResponse;" since="21" deprecated="26"/>
+		<method name="iccOpenLogicalChannel(Ljava/lang/String;I)Landroid/telephony/IccOpenLogicalChannelResponse;" since="26" deprecated="30"/>
+		<method name="iccTransmitApduBasicChannel(IIIIILjava/lang/String;)Ljava/lang/String;" since="21" deprecated="30"/>
+		<method name="iccTransmitApduLogicalChannel(IIIIIILjava/lang/String;)Ljava/lang/String;" since="21" deprecated="30"/>
+		<method name="isConcurrentVoiceAndDataSupported()Z" since="26"/>
+		<method name="isDataCapable()Z" since="31"/>
+		<method name="isDataConnectionAllowed()Z" since="31"/>
+		<method name="isDataEnabled()Z" since="26"/>
+		<method name="isDataEnabledForReason(I)Z" since="31"/>
+		<method name="isDataRoamingEnabled()Z" since="29"/>
+		<method name="isEmergencyNumber(Ljava/lang/String;)Z" since="29"/>
+		<method name="isHearingAidCompatibilitySupported()Z" since="23"/>
+		<method name="isManualNetworkSelectionAllowed()Z" since="30"/>
+		<method name="isModemEnabledForSlot(I)Z" since="30"/>
+		<method name="isMultiSimSupported()I" since="29"/>
+		<method name="isNetworkRoaming()Z"/>
+		<method name="isRadioInterfaceCapabilitySupported(Ljava/lang/String;)Z" since="31"/>
+		<method name="isRttSupported()Z" since="29"/>
+		<method name="isSmsCapable()Z" since="21"/>
+		<method name="isTtyModeSupported()Z" since="23" deprecated="28"/>
+		<method name="isVoiceCapable()Z" since="22"/>
+		<method name="isVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;)Z" since="24"/>
+		<method name="isWorldPhone()Z" since="23"/>
+		<method name="listen(Landroid/telephony/PhoneStateListener;I)V" deprecated="31"/>
+		<method name="registerTelephonyCallback(Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyCallback;)V" since="31"/>
+		<method name="requestCellInfoUpdate(Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyManager$CellInfoCallback;)V" since="29"/>
+		<method name="requestNetworkScan(Landroid/telephony/NetworkScanRequest;Ljava/util/concurrent/Executor;Landroid/telephony/TelephonyScanManager$NetworkScanCallback;)Landroid/telephony/NetworkScan;" since="28"/>
+		<method name="sendDialerSpecialCode(Ljava/lang/String;)V" since="26"/>
+		<method name="sendEnvelopeWithStatus(Ljava/lang/String;)Ljava/lang/String;" since="21" deprecated="30"/>
+		<method name="sendUssdRequest(Ljava/lang/String;Landroid/telephony/TelephonyManager$UssdResponseCallback;Landroid/os/Handler;)V" since="26"/>
+		<method name="sendVisualVoicemailSms(Ljava/lang/String;ILjava/lang/String;Landroid/app/PendingIntent;)V" since="26"/>
+		<method name="setCallComposerStatus(I)V" since="31"/>
+		<method name="setDataEnabled(Z)V" since="26" deprecated="31"/>
+		<method name="setDataEnabledForReason(IZ)V" since="31"/>
+		<method name="setForbiddenPlmns(Ljava/util/List;)I" since="30"/>
+		<method name="setLine1NumberForDisplay(Ljava/lang/String;Ljava/lang/String;)Z" since="22"/>
+		<method name="setNetworkSelectionModeAutomatic()V" since="28"/>
+		<method name="setNetworkSelectionModeManual(Ljava/lang/String;Z)Z" since="28"/>
+		<method name="setNetworkSelectionModeManual(Ljava/lang/String;ZI)Z" since="30"/>
+		<method name="setOperatorBrandOverride(Ljava/lang/String;)Z" since="22"/>
+		<method name="setPreferredNetworkTypeToGlobal()Z" since="22"/>
+		<method name="setPreferredOpportunisticDataSubscription(IZLjava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="setSignalStrengthUpdateRequest(Landroid/telephony/SignalStrengthUpdateRequest;)V" since="31"/>
+		<method name="setVisualVoicemailSmsFilterSettings(Landroid/telephony/VisualVoicemailSmsFilterSettings;)V" since="26"/>
+		<method name="setVoiceMailNumber(Ljava/lang/String;Ljava/lang/String;)Z" since="22"/>
+		<method name="setVoicemailRingtoneUri(Landroid/telecom/PhoneAccountHandle;Landroid/net/Uri;)V" since="26" deprecated="28"/>
+		<method name="setVoicemailVibrationEnabled(Landroid/telecom/PhoneAccountHandle;Z)V" since="26" deprecated="28"/>
+		<method name="switchMultiSimConfig(I)V" since="29"/>
+		<method name="unregisterTelephonyCallback(Landroid/telephony/TelephonyCallback;)V" since="31"/>
+		<method name="updateAvailableNetworks(Ljava/util/List;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="uploadCallComposerPicture(Ljava/io/InputStream;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/os/OutcomeReceiver;)V" since="31"/>
+		<method name="uploadCallComposerPicture(Ljava/nio/file/Path;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/os/OutcomeReceiver;)V" since="31"/>
+		<field name="ACTION_CARRIER_MESSAGING_CLIENT_SERVICE" since="29"/>
+		<field name="ACTION_CARRIER_SIGNAL_DEFAULT_NETWORK_AVAILABLE" since="31"/>
+		<field name="ACTION_CARRIER_SIGNAL_PCO_VALUE" since="31"/>
+		<field name="ACTION_CARRIER_SIGNAL_REDIRECTED" since="31"/>
+		<field name="ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED" since="31"/>
+		<field name="ACTION_CARRIER_SIGNAL_RESET" since="31"/>
+		<field name="ACTION_CONFIGURE_VOICEMAIL" since="23"/>
+		<field name="ACTION_MULTI_SIM_CONFIG_CHANGED" since="30"/>
+		<field name="ACTION_NETWORK_COUNTRY_CHANGED" since="29"/>
+		<field name="ACTION_PHONE_STATE_CHANGED" since="3"/>
+		<field name="ACTION_RESPOND_VIA_MESSAGE" since="18"/>
+		<field name="ACTION_SECRET_CODE" since="29"/>
+		<field name="ACTION_SHOW_VOICEMAIL_NOTIFICATION" since="26"/>
+		<field name="ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED" since="28"/>
+		<field name="ACTION_SUBSCRIPTION_SPECIFIC_CARRIER_IDENTITY_CHANGED" since="29"/>
+		<field name="APPTYPE_CSIM" since="24"/>
+		<field name="APPTYPE_ISIM" since="24"/>
+		<field name="APPTYPE_RUIM" since="24"/>
+		<field name="APPTYPE_SIM" since="24"/>
+		<field name="APPTYPE_UNKNOWN" since="31"/>
+		<field name="APPTYPE_USIM" since="24"/>
+		<field name="AUTHTYPE_EAP_AKA" since="24"/>
+		<field name="AUTHTYPE_EAP_SIM" since="24"/>
+		<field name="CALL_COMPOSER_STATUS_OFF" since="31"/>
+		<field name="CALL_COMPOSER_STATUS_ON" since="31"/>
+		<field name="CALL_STATE_IDLE"/>
+		<field name="CALL_STATE_OFFHOOK"/>
+		<field name="CALL_STATE_RINGING"/>
+		<field name="CAPABILITY_SLICING_CONFIG_SUPPORTED" since="31"/>
+		<field name="CDMA_ROAMING_MODE_AFFILIATED" since="28"/>
+		<field name="CDMA_ROAMING_MODE_ANY" since="28"/>
+		<field name="CDMA_ROAMING_MODE_HOME" since="28"/>
+		<field name="CDMA_ROAMING_MODE_RADIO_DEFAULT" since="28"/>
+		<field name="DATA_ACTIVITY_DORMANT" since="4"/>
+		<field name="DATA_ACTIVITY_IN"/>
+		<field name="DATA_ACTIVITY_INOUT"/>
+		<field name="DATA_ACTIVITY_NONE"/>
+		<field name="DATA_ACTIVITY_OUT"/>
+		<field name="DATA_CONNECTED"/>
+		<field name="DATA_CONNECTING"/>
+		<field name="DATA_DISCONNECTED"/>
+		<field name="DATA_DISCONNECTING" since="30"/>
+		<field name="DATA_ENABLED_REASON_CARRIER" since="31"/>
+		<field name="DATA_ENABLED_REASON_POLICY" since="31"/>
+		<field name="DATA_ENABLED_REASON_THERMAL" since="31"/>
+		<field name="DATA_ENABLED_REASON_USER" since="31"/>
+		<field name="DATA_SUSPENDED"/>
+		<field name="DATA_UNKNOWN" since="29"/>
+		<field name="ERI_FLASH" since="31"/>
+		<field name="ERI_OFF" since="31"/>
+		<field name="ERI_ON" since="31"/>
+		<field name="EXTRA_ACTIVE_SIM_SUPPORTED_COUNT" since="30"/>
+		<field name="EXTRA_APN_PROTOCOL" since="31"/>
+		<field name="EXTRA_APN_TYPE" since="31"/>
+		<field name="EXTRA_CALL_VOICEMAIL_INTENT" since="26"/>
+		<field name="EXTRA_CARRIER_ID" since="28"/>
+		<field name="EXTRA_CARRIER_NAME" since="28"/>
+		<field name="EXTRA_DATA_FAIL_CAUSE" since="31"/>
+		<field name="EXTRA_DEFAULT_NETWORK_AVAILABLE" since="31"/>
+		<field name="EXTRA_HIDE_PUBLIC_SETTINGS" since="26"/>
+		<field name="EXTRA_INCOMING_NUMBER" since="3" deprecated="29"/>
+		<field name="EXTRA_IS_REFRESH" since="27"/>
+		<field name="EXTRA_LAUNCH_VOICEMAIL_SETTINGS_INTENT" since="26"/>
+		<field name="EXTRA_NETWORK_COUNTRY" since="29"/>
+		<field name="EXTRA_NOTIFICATION_COUNT" since="26"/>
+		<field name="EXTRA_PCO_ID" since="31"/>
+		<field name="EXTRA_PCO_VALUE" since="31"/>
+		<field name="EXTRA_PHONE_ACCOUNT_HANDLE" since="26"/>
+		<field name="EXTRA_REDIRECTION_URL" since="31"/>
+		<field name="EXTRA_SPECIFIC_CARRIER_ID" since="29"/>
+		<field name="EXTRA_SPECIFIC_CARRIER_NAME" since="29"/>
+		<field name="EXTRA_STATE" since="3"/>
+		<field name="EXTRA_STATE_IDLE" since="3"/>
+		<field name="EXTRA_STATE_OFFHOOK" since="3"/>
+		<field name="EXTRA_STATE_RINGING" since="3"/>
+		<field name="EXTRA_SUBSCRIPTION_ID" since="28"/>
+		<field name="EXTRA_VOICEMAIL_NUMBER" since="26"/>
+		<field name="METADATA_HIDE_VOICEMAIL_SETTINGS_MENU" since="26"/>
+		<field name="MULTISIM_ALLOWED" since="29"/>
+		<field name="MULTISIM_NOT_SUPPORTED_BY_CARRIER" since="29"/>
+		<field name="MULTISIM_NOT_SUPPORTED_BY_HARDWARE" since="29"/>
+		<field name="NETWORK_SELECTION_MODE_AUTO" since="30"/>
+		<field name="NETWORK_SELECTION_MODE_MANUAL" since="30"/>
+		<field name="NETWORK_SELECTION_MODE_UNKNOWN" since="30"/>
+		<field name="NETWORK_TYPE_1xRTT" since="4"/>
+		<field name="NETWORK_TYPE_CDMA" since="4"/>
+		<field name="NETWORK_TYPE_EDGE"/>
+		<field name="NETWORK_TYPE_EHRPD" since="11"/>
+		<field name="NETWORK_TYPE_EVDO_0" since="4"/>
+		<field name="NETWORK_TYPE_EVDO_A" since="4"/>
+		<field name="NETWORK_TYPE_EVDO_B" since="9"/>
+		<field name="NETWORK_TYPE_GPRS"/>
+		<field name="NETWORK_TYPE_GSM" since="25"/>
+		<field name="NETWORK_TYPE_HSDPA" since="5"/>
+		<field name="NETWORK_TYPE_HSPA" since="5"/>
+		<field name="NETWORK_TYPE_HSPAP" since="13"/>
+		<field name="NETWORK_TYPE_HSUPA" since="5"/>
+		<field name="NETWORK_TYPE_IDEN" since="8"/>
+		<field name="NETWORK_TYPE_IWLAN" since="25"/>
+		<field name="NETWORK_TYPE_LTE" since="11"/>
+		<field name="NETWORK_TYPE_NR" since="29"/>
+		<field name="NETWORK_TYPE_TD_SCDMA" since="25"/>
+		<field name="NETWORK_TYPE_UMTS"/>
+		<field name="NETWORK_TYPE_UNKNOWN"/>
+		<field name="PHONE_TYPE_CDMA" since="4"/>
+		<field name="PHONE_TYPE_GSM"/>
+		<field name="PHONE_TYPE_NONE"/>
+		<field name="PHONE_TYPE_SIP" since="11"/>
+		<field name="SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION" since="29"/>
+		<field name="SET_OPPORTUNISTIC_SUB_NO_OPPORTUNISTIC_SUB_AVAILABLE" since="30"/>
+		<field name="SET_OPPORTUNISTIC_SUB_REMOTE_SERVICE_EXCEPTION" since="30"/>
+		<field name="SET_OPPORTUNISTIC_SUB_SUCCESS" since="29"/>
+		<field name="SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED" since="29"/>
+		<field name="SIM_STATE_ABSENT"/>
+		<field name="SIM_STATE_CARD_IO_ERROR" since="26"/>
+		<field name="SIM_STATE_CARD_RESTRICTED" since="26"/>
+		<field name="SIM_STATE_NETWORK_LOCKED"/>
+		<field name="SIM_STATE_NOT_READY" since="26"/>
+		<field name="SIM_STATE_PERM_DISABLED" since="26"/>
+		<field name="SIM_STATE_PIN_REQUIRED"/>
+		<field name="SIM_STATE_PUK_REQUIRED"/>
+		<field name="SIM_STATE_READY"/>
+		<field name="SIM_STATE_UNKNOWN"/>
+		<field name="UNINITIALIZED_CARD_ID" since="29"/>
+		<field name="UNKNOWN_CARRIER_ID" since="28"/>
+		<field name="UNSUPPORTED_CARD_ID" since="29"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_ABORTED" since="29"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_DISABLE_MODEM_FAIL" since="30"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_ENABLE_MODEM_FAIL" since="30"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_INVALID_ARGUMENTS" since="29"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_MULTIPLE_NETWORKS_NOT_SUPPORTED" since="30"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_NO_CARRIER_PRIVILEGE" since="29"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_NO_OPPORTUNISTIC_SUB_AVAILABLE" since="30"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_REMOTE_SERVICE_EXCEPTION" since="30"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_SERVICE_IS_DISABLED" since="30"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_SUCCESS" since="29"/>
+		<field name="UPDATE_AVAILABLE_NETWORKS_UNKNOWN_FAILURE" since="29"/>
+		<field name="USSD_ERROR_SERVICE_UNAVAIL" since="26"/>
+		<field name="USSD_RETURN_FAILURE" since="26"/>
+		<field name="VVM_TYPE_CVVM" since="23"/>
+		<field name="VVM_TYPE_OMTP" since="23"/>
+	</class>
+	<class name="android/telephony/TelephonyManager$CallComposerException" since="31">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(ILjava/io/IOException;)V"/>
+		<method name="getErrorCode()I"/>
+		<method name="getIOException()Ljava/io/IOException;"/>
+		<field name="ERROR_AUTHENTICATION_FAILED"/>
+		<field name="ERROR_FILE_TOO_LARGE"/>
+		<field name="ERROR_INPUT_CLOSED"/>
+		<field name="ERROR_IO_EXCEPTION"/>
+		<field name="ERROR_NETWORK_UNAVAILABLE"/>
+		<field name="ERROR_REMOTE_END_CLOSED"/>
+		<field name="ERROR_UNKNOWN"/>
+	</class>
+	<class name="android/telephony/TelephonyManager$CellInfoCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCellInfo(Ljava/util/List;)V"/>
+		<method name="onError(ILjava/lang/Throwable;)V"/>
+		<field name="ERROR_MODEM_ERROR"/>
+		<field name="ERROR_TIMEOUT"/>
+	</class>
+	<class name="android/telephony/TelephonyManager$ModemErrorException" since="31">
+		<extends name="android/telephony/TelephonyManager$NetworkSlicingException"/>
+	</class>
+	<class name="android/telephony/TelephonyManager$NetworkSlicingException" since="31">
+		<extends name="java/lang/Exception"/>
+	</class>
+	<class name="android/telephony/TelephonyManager$TimeoutException" since="31">
+		<extends name="android/telephony/TelephonyManager$NetworkSlicingException"/>
+	</class>
+	<class name="android/telephony/TelephonyManager$UssdResponseCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onReceiveUssdResponse(Landroid/telephony/TelephonyManager;Ljava/lang/String;Ljava/lang/CharSequence;)V"/>
+		<method name="onReceiveUssdResponseFailed(Landroid/telephony/TelephonyManager;Ljava/lang/String;I)V"/>
+	</class>
+	<class name="android/telephony/TelephonyScanManager" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/telephony/TelephonyScanManager$NetworkScanCallback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onComplete()V"/>
+		<method name="onError(I)V"/>
+		<method name="onResults(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/telephony/UiccCardInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCardId()I"/>
+		<method name="getEid()Ljava/lang/String;"/>
+		<method name="getIccId()Ljava/lang/String;"/>
+		<method name="getSlotIndex()I"/>
+		<method name="isEuicc()Z"/>
+		<method name="isRemovable()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/VisualVoicemailService" since="26">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCellServiceConnected(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telecom/PhoneAccountHandle;)V"/>
+		<method name="onSimRemoved(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telecom/PhoneAccountHandle;)V"/>
+		<method name="onSmsReceived(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;Landroid/telephony/VisualVoicemailSms;)V"/>
+		<method name="onStopped(Landroid/telephony/VisualVoicemailService$VisualVoicemailTask;)V"/>
+		<field name="SERVICE_INTERFACE"/>
+	</class>
+	<class name="android/telephony/VisualVoicemailService$VisualVoicemailTask" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="finish()V"/>
+	</class>
+	<class name="android/telephony/VisualVoicemailSms" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFields()Landroid/os/Bundle;"/>
+		<method name="getMessageBody()Ljava/lang/String;"/>
+		<method name="getPhoneAccountHandle()Landroid/telecom/PhoneAccountHandle;"/>
+		<method name="getPrefix()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/VisualVoicemailSmsFilterSettings" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+		<field name="DESTINATION_PORT_ANY"/>
+		<field name="DESTINATION_PORT_DATA_SMS"/>
+		<field name="clientPrefix"/>
+		<field name="destinationPort"/>
+		<field name="originatingNumbers"/>
+	</class>
+	<class name="android/telephony/VisualVoicemailSmsFilterSettings$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/telephony/VisualVoicemailSmsFilterSettings;"/>
+		<method name="setClientPrefix(Ljava/lang/String;)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;"/>
+		<method name="setDestinationPort(I)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;"/>
+		<method name="setOriginatingNumbers(Ljava/util/List;)Landroid/telephony/VisualVoicemailSmsFilterSettings$Builder;"/>
+	</class>
+	<class name="android/telephony/cdma/CdmaCellLocation" since="5" deprecated="31">
+		<extends name="android/telephony/CellLocation"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(Landroid/os/Bundle;)V" deprecated="31"/>
+		<method name="convertQuartSecToDecDegrees(I)D" since="17" deprecated="31"/>
+		<method name="fillInNotifierBundle(Landroid/os/Bundle;)V" deprecated="31"/>
+		<method name="getBaseStationId()I" deprecated="31"/>
+		<method name="getBaseStationLatitude()I" deprecated="31"/>
+		<method name="getBaseStationLongitude()I" deprecated="31"/>
+		<method name="getNetworkId()I" deprecated="31"/>
+		<method name="getSystemId()I" deprecated="31"/>
+		<method name="setCellLocationData(III)V" deprecated="31"/>
+		<method name="setCellLocationData(IIIII)V" deprecated="31"/>
+		<method name="setStateInvalid()V" deprecated="31"/>
+	</class>
+	<class name="android/telephony/data/ApnSetting" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getApnName()Ljava/lang/String;"/>
+		<method name="getApnTypeBitmask()I"/>
+		<method name="getAuthType()I"/>
+		<method name="getCarrierId()I" since="29"/>
+		<method name="getEntryName()Ljava/lang/String;"/>
+		<method name="getId()I"/>
+		<method name="getMmsProxyAddress()Ljava/net/InetAddress;" deprecated="29"/>
+		<method name="getMmsProxyAddressAsString()Ljava/lang/String;" since="29"/>
+		<method name="getMmsProxyPort()I"/>
+		<method name="getMmsc()Landroid/net/Uri;"/>
+		<method name="getMvnoType()I"/>
+		<method name="getNetworkTypeBitmask()I"/>
+		<method name="getOperatorNumeric()Ljava/lang/String;"/>
+		<method name="getPassword()Ljava/lang/String;"/>
+		<method name="getProtocol()I"/>
+		<method name="getProxyAddress()Ljava/net/InetAddress;" deprecated="29"/>
+		<method name="getProxyAddressAsString()Ljava/lang/String;" since="29"/>
+		<method name="getProxyPort()I"/>
+		<method name="getRoamingProtocol()I"/>
+		<method name="getUser()Ljava/lang/String;"/>
+		<method name="isEnabled()Z"/>
+		<field name="AUTH_TYPE_CHAP"/>
+		<field name="AUTH_TYPE_NONE"/>
+		<field name="AUTH_TYPE_PAP"/>
+		<field name="AUTH_TYPE_PAP_OR_CHAP"/>
+		<field name="CREATOR"/>
+		<field name="MVNO_TYPE_GID"/>
+		<field name="MVNO_TYPE_ICCID"/>
+		<field name="MVNO_TYPE_IMSI"/>
+		<field name="MVNO_TYPE_SPN"/>
+		<field name="PROTOCOL_IP"/>
+		<field name="PROTOCOL_IPV4V6"/>
+		<field name="PROTOCOL_IPV6"/>
+		<field name="PROTOCOL_NON_IP" since="29"/>
+		<field name="PROTOCOL_PPP"/>
+		<field name="PROTOCOL_UNSTRUCTURED" since="29"/>
+		<field name="TYPE_BIP" since="31"/>
+		<field name="TYPE_CBS"/>
+		<field name="TYPE_DEFAULT"/>
+		<field name="TYPE_DUN"/>
+		<field name="TYPE_EMERGENCY"/>
+		<field name="TYPE_FOTA"/>
+		<field name="TYPE_HIPRI"/>
+		<field name="TYPE_IA"/>
+		<field name="TYPE_IMS"/>
+		<field name="TYPE_MCX" since="29"/>
+		<field name="TYPE_MMS"/>
+		<field name="TYPE_SUPL"/>
+		<field name="TYPE_VSIM" since="31"/>
+		<field name="TYPE_XCAP" since="30"/>
+	</class>
+	<class name="android/telephony/data/ApnSetting$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/telephony/data/ApnSetting;"/>
+		<method name="setApnName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setApnTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setAuthType(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setCarrierEnabled(Z)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setCarrierId(I)Landroid/telephony/data/ApnSetting$Builder;" since="29"/>
+		<method name="setEntryName(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setMmsProxyAddress(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" since="29"/>
+		<method name="setMmsProxyAddress(Ljava/net/InetAddress;)Landroid/telephony/data/ApnSetting$Builder;" deprecated="29"/>
+		<method name="setMmsProxyPort(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setMmsc(Landroid/net/Uri;)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setMvnoType(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setNetworkTypeBitmask(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setOperatorNumeric(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setPassword(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setProtocol(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setProxyAddress(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;" since="29"/>
+		<method name="setProxyAddress(Ljava/net/InetAddress;)Landroid/telephony/data/ApnSetting$Builder;" deprecated="29"/>
+		<method name="setProxyPort(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setRoamingProtocol(I)Landroid/telephony/data/ApnSetting$Builder;"/>
+		<method name="setUser(Ljava/lang/String;)Landroid/telephony/data/ApnSetting$Builder;"/>
+	</class>
+	<class name="android/telephony/data/NetworkSliceInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getMappedHplmnSliceDifferentiator()I"/>
+		<method name="getMappedHplmnSliceServiceType()I"/>
+		<method name="getSliceDifferentiator()I"/>
+		<method name="getSliceServiceType()I"/>
+		<method name="getStatus()I"/>
+		<field name="CREATOR"/>
+		<field name="SLICE_DIFFERENTIATOR_NO_SLICE"/>
+		<field name="SLICE_SERVICE_TYPE_EMBB"/>
+		<field name="SLICE_SERVICE_TYPE_MIOT"/>
+		<field name="SLICE_SERVICE_TYPE_NONE"/>
+		<field name="SLICE_SERVICE_TYPE_URLLC"/>
+		<field name="SLICE_STATUS_ALLOWED"/>
+		<field name="SLICE_STATUS_CONFIGURED"/>
+		<field name="SLICE_STATUS_DEFAULT_CONFIGURED"/>
+		<field name="SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_PLMN"/>
+		<field name="SLICE_STATUS_REJECTED_NOT_AVAILABLE_IN_REGISTERED_AREA"/>
+		<field name="SLICE_STATUS_UNKNOWN"/>
+	</class>
+	<class name="android/telephony/data/NetworkSliceInfo$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/telephony/data/NetworkSliceInfo;"/>
+		<method name="setMappedHplmnSliceDifferentiator(I)Landroid/telephony/data/NetworkSliceInfo$Builder;"/>
+		<method name="setMappedHplmnSliceServiceType(I)Landroid/telephony/data/NetworkSliceInfo$Builder;"/>
+		<method name="setSliceDifferentiator(I)Landroid/telephony/data/NetworkSliceInfo$Builder;"/>
+		<method name="setSliceServiceType(I)Landroid/telephony/data/NetworkSliceInfo$Builder;"/>
+		<method name="setStatus(I)Landroid/telephony/data/NetworkSliceInfo$Builder;"/>
+	</class>
+	<class name="android/telephony/data/NetworkSlicingConfig" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getSliceInfo()Ljava/util/List;"/>
+		<method name="getUrspRules()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/data/RouteSelectionDescriptor" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDataNetworkName()Ljava/util/List;"/>
+		<method name="getPrecedence()I"/>
+		<method name="getSessionType()I"/>
+		<method name="getSliceInfo()Ljava/util/List;"/>
+		<method name="getSscMode()I"/>
+		<field name="CREATOR"/>
+		<field name="ROUTE_SSC_MODE_1"/>
+		<field name="ROUTE_SSC_MODE_2"/>
+		<field name="ROUTE_SSC_MODE_3"/>
+		<field name="SESSION_TYPE_IPV4"/>
+		<field name="SESSION_TYPE_IPV4V6"/>
+		<field name="SESSION_TYPE_IPV6"/>
+	</class>
+	<class name="android/telephony/data/TrafficDescriptor" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDataNetworkName()Ljava/lang/String;"/>
+		<method name="getOsAppId()[B"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/data/TrafficDescriptor$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/telephony/data/TrafficDescriptor;"/>
+		<method name="setDataNetworkName(Ljava/lang/String;)Landroid/telephony/data/TrafficDescriptor$Builder;"/>
+		<method name="setOsAppId([B)Landroid/telephony/data/TrafficDescriptor$Builder;"/>
+	</class>
+	<class name="android/telephony/data/UrspRule" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getPrecedence()I"/>
+		<method name="getRouteSelectionDescriptor()Ljava/util/List;"/>
+		<method name="getTrafficDescriptors()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/emergency/EmergencyNumber" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="compareTo(Landroid/telephony/emergency/EmergencyNumber;)I"/>
+		<method name="getCountryIso()Ljava/lang/String;"/>
+		<method name="getEmergencyCallRouting()I"/>
+		<method name="getEmergencyNumberSources()Ljava/util/List;"/>
+		<method name="getEmergencyServiceCategories()Ljava/util/List;"/>
+		<method name="getEmergencyUrns()Ljava/util/List;"/>
+		<method name="getMnc()Ljava/lang/String;"/>
+		<method name="getNumber()Ljava/lang/String;"/>
+		<method name="isFromSources(I)Z"/>
+		<method name="isInEmergencyServiceCategories(I)Z"/>
+		<field name="CREATOR"/>
+		<field name="EMERGENCY_CALL_ROUTING_EMERGENCY"/>
+		<field name="EMERGENCY_CALL_ROUTING_NORMAL"/>
+		<field name="EMERGENCY_CALL_ROUTING_UNKNOWN"/>
+		<field name="EMERGENCY_NUMBER_SOURCE_DATABASE"/>
+		<field name="EMERGENCY_NUMBER_SOURCE_DEFAULT"/>
+		<field name="EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG"/>
+		<field name="EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING"/>
+		<field name="EMERGENCY_NUMBER_SOURCE_SIM"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_AIEC"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_AMBULANCE"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_MIEC"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_POLICE"/>
+		<field name="EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED"/>
+	</class>
+	<class name="android/telephony/euicc/DownloadableSubscription" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="forActivationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription;"/>
+		<method name="getConfirmationCode()Ljava/lang/String;"/>
+		<method name="getEncodedActivationCode()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/euicc/DownloadableSubscription$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/telephony/euicc/DownloadableSubscription;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/telephony/euicc/DownloadableSubscription;"/>
+		<method name="setConfirmationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription$Builder;"/>
+		<method name="setEncodedActivationCode(Ljava/lang/String;)Landroid/telephony/euicc/DownloadableSubscription$Builder;"/>
+	</class>
+	<class name="android/telephony/euicc/EuiccInfo" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getOsVersion()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/euicc/EuiccManager" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="createForCardId(I)Landroid/telephony/euicc/EuiccManager;" since="29"/>
+		<method name="deleteSubscription(ILandroid/app/PendingIntent;)V"/>
+		<method name="downloadSubscription(Landroid/telephony/euicc/DownloadableSubscription;ZLandroid/app/PendingIntent;)V"/>
+		<method name="getEid()Ljava/lang/String;"/>
+		<method name="getEuiccInfo()Landroid/telephony/euicc/EuiccInfo;"/>
+		<method name="isEnabled()Z"/>
+		<method name="startResolutionActivity(Landroid/app/Activity;ILandroid/content/Intent;Landroid/app/PendingIntent;)V"/>
+		<method name="switchToSubscription(ILandroid/app/PendingIntent;)V"/>
+		<method name="updateSubscriptionNickname(ILjava/lang/String;Landroid/app/PendingIntent;)V" since="29"/>
+		<field name="ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS"/>
+		<field name="ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE"/>
+		<field name="ACTION_START_EUICC_ACTIVATION" since="30"/>
+		<field name="EMBEDDED_SUBSCRIPTION_RESULT_ERROR"/>
+		<field name="EMBEDDED_SUBSCRIPTION_RESULT_OK"/>
+		<field name="EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR"/>
+		<field name="ERROR_ADDRESS_MISSING" since="30"/>
+		<field name="ERROR_CARRIER_LOCKED" since="30"/>
+		<field name="ERROR_CERTIFICATE_ERROR" since="30"/>
+		<field name="ERROR_CONNECTION_ERROR" since="30"/>
+		<field name="ERROR_DISALLOWED_BY_PPR" since="30"/>
+		<field name="ERROR_EUICC_INSUFFICIENT_MEMORY" since="30"/>
+		<field name="ERROR_EUICC_MISSING" since="30"/>
+		<field name="ERROR_INCOMPATIBLE_CARRIER" since="30"/>
+		<field name="ERROR_INSTALL_PROFILE" since="30"/>
+		<field name="ERROR_INVALID_ACTIVATION_CODE" since="30"/>
+		<field name="ERROR_INVALID_CONFIRMATION_CODE" since="30"/>
+		<field name="ERROR_INVALID_RESPONSE" since="30"/>
+		<field name="ERROR_NO_PROFILES_AVAILABLE" since="30"/>
+		<field name="ERROR_OPERATION_BUSY" since="30"/>
+		<field name="ERROR_SIM_MISSING" since="30"/>
+		<field name="ERROR_TIME_OUT" since="30"/>
+		<field name="ERROR_UNSUPPORTED_VERSION" since="30"/>
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE"/>
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTION"/>
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_ERROR_CODE" since="30"/>
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE" since="30"/>
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE" since="30"/>
+		<field name="EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE" since="30"/>
+		<field name="EXTRA_USE_QR_SCANNER" since="30"/>
+		<field name="META_DATA_CARRIER_ICON"/>
+		<field name="OPERATION_APDU" since="30"/>
+		<field name="OPERATION_DOWNLOAD" since="30"/>
+		<field name="OPERATION_EUICC_CARD" since="30"/>
+		<field name="OPERATION_EUICC_GSMA" since="30"/>
+		<field name="OPERATION_HTTP" since="30"/>
+		<field name="OPERATION_METADATA" since="30"/>
+		<field name="OPERATION_SIM_SLOT" since="30"/>
+		<field name="OPERATION_SMDX" since="30"/>
+		<field name="OPERATION_SMDX_SUBJECT_REASON_CODE" since="30"/>
+		<field name="OPERATION_SWITCH" since="30"/>
+		<field name="OPERATION_SYSTEM" since="30"/>
+	</class>
+	<class name="android/telephony/gsm/GsmCellLocation" since="1" deprecated="31">
+		<extends name="android/telephony/CellLocation"/>
+		<method name="&lt;init>()V" deprecated="31"/>
+		<method name="&lt;init>(Landroid/os/Bundle;)V" deprecated="31"/>
+		<method name="fillInNotifierBundle(Landroid/os/Bundle;)V" deprecated="31"/>
+		<method name="getCid()I" deprecated="31"/>
+		<method name="getLac()I" deprecated="31"/>
+		<method name="getPsc()I" since="9" deprecated="31"/>
+		<method name="setLacAndCid(II)V" deprecated="31"/>
+		<method name="setStateInvalid()V" deprecated="31"/>
+	</class>
+	<class name="android/telephony/gsm/SmsManager" since="1" deprecated="4">
+		<extends name="java/lang/Object"/>
+		<method name="divideMessage(Ljava/lang/String;)Ljava/util/ArrayList;" deprecated="15"/>
+		<method name="getDefault()Landroid/telephony/gsm/SmsManager;" deprecated="15"/>
+		<method name="sendDataMessage(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="15"/>
+		<method name="sendMultipartTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V" deprecated="15"/>
+		<method name="sendTextMessage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V" deprecated="15"/>
+		<field name="RESULT_ERROR_GENERIC_FAILURE" deprecated="15"/>
+		<field name="RESULT_ERROR_NO_SERVICE" deprecated="15"/>
+		<field name="RESULT_ERROR_NULL_PDU" deprecated="15"/>
+		<field name="RESULT_ERROR_RADIO_OFF" deprecated="15"/>
+		<field name="STATUS_ON_SIM_FREE" deprecated="15"/>
+		<field name="STATUS_ON_SIM_READ" deprecated="15"/>
+		<field name="STATUS_ON_SIM_SENT" deprecated="15"/>
+		<field name="STATUS_ON_SIM_UNREAD" deprecated="15"/>
+		<field name="STATUS_ON_SIM_UNSENT" deprecated="15"/>
+	</class>
+	<class name="android/telephony/gsm/SmsMessage" since="1" deprecated="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<method name="calculateLength(Ljava/lang/CharSequence;Z)[I" since="3" deprecated="15"/>
+		<method name="calculateLength(Ljava/lang/String;Z)[I" deprecated="15"/>
+		<method name="createFromPdu([B)Landroid/telephony/gsm/SmsMessage;" deprecated="15"/>
+		<method name="getDisplayMessageBody()Ljava/lang/String;" deprecated="15"/>
+		<method name="getDisplayOriginatingAddress()Ljava/lang/String;" deprecated="15"/>
+		<method name="getEmailBody()Ljava/lang/String;" deprecated="15"/>
+		<method name="getEmailFrom()Ljava/lang/String;" deprecated="15"/>
+		<method name="getIndexOnSim()I" deprecated="15"/>
+		<method name="getMessageBody()Ljava/lang/String;" deprecated="15"/>
+		<method name="getMessageClass()Landroid/telephony/gsm/SmsMessage$MessageClass;" deprecated="15"/>
+		<method name="getOriginatingAddress()Ljava/lang/String;" deprecated="15"/>
+		<method name="getPdu()[B" deprecated="15"/>
+		<method name="getProtocolIdentifier()I" deprecated="15"/>
+		<method name="getPseudoSubject()Ljava/lang/String;" deprecated="15"/>
+		<method name="getServiceCenterAddress()Ljava/lang/String;" deprecated="15"/>
+		<method name="getStatus()I" deprecated="15"/>
+		<method name="getStatusOnSim()I" deprecated="15"/>
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="15"/>
+		<method name="getSubmitPdu(Ljava/lang/String;Ljava/lang/String;S[BZ)Landroid/telephony/gsm/SmsMessage$SubmitPdu;" deprecated="15"/>
+		<method name="getTPLayerLengthForPDU(Ljava/lang/String;)I" deprecated="15"/>
+		<method name="getTimestampMillis()J" deprecated="15"/>
+		<method name="getUserData()[B" deprecated="15"/>
+		<method name="isCphsMwiMessage()Z" deprecated="15"/>
+		<method name="isEmail()Z" deprecated="15"/>
+		<method name="isMWIClearMessage()Z" deprecated="15"/>
+		<method name="isMWISetMessage()Z" deprecated="15"/>
+		<method name="isMwiDontStore()Z" deprecated="15"/>
+		<method name="isReplace()Z" deprecated="15"/>
+		<method name="isReplyPathPresent()Z" deprecated="15"/>
+		<method name="isStatusReportMessage()Z" deprecated="15"/>
+		<field name="ENCODING_16BIT" deprecated="15"/>
+		<field name="ENCODING_7BIT" deprecated="15"/>
+		<field name="ENCODING_8BIT" deprecated="15"/>
+		<field name="ENCODING_UNKNOWN" deprecated="15"/>
+		<field name="MAX_USER_DATA_BYTES" deprecated="15"/>
+		<field name="MAX_USER_DATA_SEPTETS" deprecated="15"/>
+		<field name="MAX_USER_DATA_SEPTETS_WITH_HEADER" deprecated="15"/>
+	</class>
+	<class name="android/telephony/gsm/SmsMessage$MessageClass" since="1" deprecated="4">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/telephony/gsm/SmsMessage$MessageClass;"/>
+		<method name="values()[Landroid/telephony/gsm/SmsMessage$MessageClass;"/>
+		<field name="CLASS_0" deprecated="29"/>
+		<field name="CLASS_1" deprecated="29"/>
+		<field name="CLASS_2" deprecated="29"/>
+		<field name="CLASS_3" deprecated="29"/>
+		<field name="UNKNOWN" deprecated="29"/>
+	</class>
+	<class name="android/telephony/gsm/SmsMessage$SubmitPdu" since="1" deprecated="4">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<field name="encodedMessage" deprecated="15"/>
+		<field name="encodedScAddress" deprecated="15"/>
+	</class>
+	<class name="android/telephony/ims/ImsException" since="30">
+		<extends name="java/lang/Exception"/>
+		<method name="getCode()I"/>
+		<field name="CODE_ERROR_INVALID_SUBSCRIPTION"/>
+		<field name="CODE_ERROR_SERVICE_UNAVAILABLE"/>
+		<field name="CODE_ERROR_UNSPECIFIED"/>
+		<field name="CODE_ERROR_UNSUPPORTED_OPERATION"/>
+	</class>
+	<class name="android/telephony/ims/ImsManager" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getImsMmTelManager(I)Landroid/telephony/ims/ImsMmTelManager;"/>
+		<method name="getImsRcsManager(I)Landroid/telephony/ims/ImsRcsManager;"/>
+		<field name="ACTION_WFC_IMS_REGISTRATION_ERROR"/>
+		<field name="EXTRA_WFC_REGISTRATION_FAILURE_MESSAGE"/>
+		<field name="EXTRA_WFC_REGISTRATION_FAILURE_TITLE"/>
+	</class>
+	<class name="android/telephony/ims/ImsMmTelManager" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/telephony/ims/RegistrationManager"/>
+		<method name="getVoWiFiModeSetting()I"/>
+		<method name="isAdvancedCallingSettingEnabled()Z"/>
+		<method name="isCrossSimCallingEnabled()Z" since="31"/>
+		<method name="isTtyOverVolteEnabled()Z"/>
+		<method name="isVoWiFiRoamingSettingEnabled()Z"/>
+		<method name="isVoWiFiSettingEnabled()Z"/>
+		<method name="isVtSettingEnabled()Z"/>
+		<method name="registerMmTelCapabilityCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V"/>
+		<method name="unregisterMmTelCapabilityCallback(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V"/>
+		<field name="WIFI_MODE_CELLULAR_PREFERRED"/>
+		<field name="WIFI_MODE_WIFI_ONLY"/>
+		<field name="WIFI_MODE_WIFI_PREFERRED"/>
+	</class>
+	<class name="android/telephony/ims/ImsMmTelManager$CapabilityCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onCapabilitiesStatusChanged(Landroid/telephony/ims/feature/MmTelFeature$MmTelCapabilities;)V"/>
+	</class>
+	<class name="android/telephony/ims/ImsRcsManager" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getRegistrationState(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="getRegistrationTransportType(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="getUceAdapter()Landroid/telephony/ims/RcsUceAdapter;"/>
+		<method name="registerImsRegistrationCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31"/>
+		<method name="unregisterImsRegistrationCallback(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31"/>
+		<field name="ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN"/>
+	</class>
+	<class name="android/telephony/ims/ImsReasonInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(IILjava/lang/String;)V"/>
+		<method name="getCode()I"/>
+		<method name="getExtraCode()I"/>
+		<method name="getExtraMessage()Ljava/lang/String;"/>
+		<field name="CODE_ACCESS_CLASS_BLOCKED"/>
+		<field name="CODE_ANSWERED_ELSEWHERE"/>
+		<field name="CODE_BLACKLISTED_CALL_ID"/>
+		<field name="CODE_CALL_BARRED"/>
+		<field name="CODE_CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE"/>
+		<field name="CODE_CALL_END_CAUSE_CALL_PULL"/>
+		<field name="CODE_CALL_PULL_OUT_OF_SYNC"/>
+		<field name="CODE_DATA_DISABLED"/>
+		<field name="CODE_DATA_LIMIT_REACHED"/>
+		<field name="CODE_DIAL_MODIFIED_TO_DIAL"/>
+		<field name="CODE_DIAL_MODIFIED_TO_DIAL_VIDEO"/>
+		<field name="CODE_DIAL_MODIFIED_TO_SS"/>
+		<field name="CODE_DIAL_MODIFIED_TO_USSD"/>
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_DIAL"/>
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO"/>
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_SS"/>
+		<field name="CODE_DIAL_VIDEO_MODIFIED_TO_USSD"/>
+		<field name="CODE_ECBM_NOT_SUPPORTED"/>
+		<field name="CODE_EMERGENCY_PERM_FAILURE"/>
+		<field name="CODE_EMERGENCY_TEMP_FAILURE"/>
+		<field name="CODE_EPDG_TUNNEL_ESTABLISH_FAILURE"/>
+		<field name="CODE_EPDG_TUNNEL_LOST_CONNECTION"/>
+		<field name="CODE_EPDG_TUNNEL_REKEY_FAILURE"/>
+		<field name="CODE_FDN_BLOCKED"/>
+		<field name="CODE_IKEV2_AUTH_FAILURE"/>
+		<field name="CODE_IMEI_NOT_ACCEPTED"/>
+		<field name="CODE_IWLAN_DPD_FAILURE"/>
+		<field name="CODE_LOCAL_CALL_BUSY"/>
+		<field name="CODE_LOCAL_CALL_CS_RETRY_REQUIRED"/>
+		<field name="CODE_LOCAL_CALL_DECLINE"/>
+		<field name="CODE_LOCAL_CALL_EXCEEDED"/>
+		<field name="CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED"/>
+		<field name="CODE_LOCAL_CALL_TERMINATED"/>
+		<field name="CODE_LOCAL_CALL_VCC_ON_PROGRESSING"/>
+		<field name="CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED"/>
+		<field name="CODE_LOCAL_ENDED_BY_CONFERENCE_MERGE"/>
+		<field name="CODE_LOCAL_HO_NOT_FEASIBLE"/>
+		<field name="CODE_LOCAL_ILLEGAL_ARGUMENT"/>
+		<field name="CODE_LOCAL_ILLEGAL_STATE"/>
+		<field name="CODE_LOCAL_IMS_SERVICE_DOWN"/>
+		<field name="CODE_LOCAL_INTERNAL_ERROR"/>
+		<field name="CODE_LOCAL_LOW_BATTERY"/>
+		<field name="CODE_LOCAL_NETWORK_IP_CHANGED"/>
+		<field name="CODE_LOCAL_NETWORK_NO_LTE_COVERAGE"/>
+		<field name="CODE_LOCAL_NETWORK_NO_SERVICE"/>
+		<field name="CODE_LOCAL_NETWORK_ROAMING"/>
+		<field name="CODE_LOCAL_NOT_REGISTERED"/>
+		<field name="CODE_LOCAL_NO_PENDING_CALL"/>
+		<field name="CODE_LOCAL_POWER_OFF"/>
+		<field name="CODE_LOCAL_SERVICE_UNAVAILABLE"/>
+		<field name="CODE_LOW_BATTERY"/>
+		<field name="CODE_MAXIMUM_NUMBER_OF_CALLS_REACHED"/>
+		<field name="CODE_MEDIA_INIT_FAILED"/>
+		<field name="CODE_MEDIA_NOT_ACCEPTABLE"/>
+		<field name="CODE_MEDIA_NO_DATA"/>
+		<field name="CODE_MEDIA_UNSPECIFIED"/>
+		<field name="CODE_MULTIENDPOINT_NOT_SUPPORTED"/>
+		<field name="CODE_NETWORK_CONGESTION" since="31"/>
+		<field name="CODE_NETWORK_DETACH"/>
+		<field name="CODE_NETWORK_REJECT"/>
+		<field name="CODE_NETWORK_RESP_TIMEOUT"/>
+		<field name="CODE_NO_CSFB_IN_CS_ROAM"/>
+		<field name="CODE_NO_VALID_SIM"/>
+		<field name="CODE_OEM_CAUSE_1"/>
+		<field name="CODE_OEM_CAUSE_10"/>
+		<field name="CODE_OEM_CAUSE_11"/>
+		<field name="CODE_OEM_CAUSE_12"/>
+		<field name="CODE_OEM_CAUSE_13"/>
+		<field name="CODE_OEM_CAUSE_14"/>
+		<field name="CODE_OEM_CAUSE_15"/>
+		<field name="CODE_OEM_CAUSE_2"/>
+		<field name="CODE_OEM_CAUSE_3"/>
+		<field name="CODE_OEM_CAUSE_4"/>
+		<field name="CODE_OEM_CAUSE_5"/>
+		<field name="CODE_OEM_CAUSE_6"/>
+		<field name="CODE_OEM_CAUSE_7"/>
+		<field name="CODE_OEM_CAUSE_8"/>
+		<field name="CODE_OEM_CAUSE_9"/>
+		<field name="CODE_RADIO_ACCESS_FAILURE"/>
+		<field name="CODE_RADIO_INTERNAL_ERROR"/>
+		<field name="CODE_RADIO_LINK_FAILURE"/>
+		<field name="CODE_RADIO_LINK_LOST"/>
+		<field name="CODE_RADIO_OFF"/>
+		<field name="CODE_RADIO_RELEASE_ABNORMAL"/>
+		<field name="CODE_RADIO_RELEASE_NORMAL"/>
+		<field name="CODE_RADIO_SETUP_FAILURE"/>
+		<field name="CODE_RADIO_UPLINK_FAILURE"/>
+		<field name="CODE_REGISTRATION_ERROR"/>
+		<field name="CODE_REJECTED_ELSEWHERE"/>
+		<field name="CODE_REJECT_1X_COLLISION"/>
+		<field name="CODE_REJECT_CALL_ON_OTHER_SUB"/>
+		<field name="CODE_REJECT_CALL_TYPE_NOT_ALLOWED"/>
+		<field name="CODE_REJECT_CONFERENCE_TTY_NOT_ALLOWED"/>
+		<field name="CODE_REJECT_INTERNAL_ERROR"/>
+		<field name="CODE_REJECT_MAX_CALL_LIMIT_REACHED"/>
+		<field name="CODE_REJECT_ONGOING_CALL_SETUP"/>
+		<field name="CODE_REJECT_ONGOING_CALL_TRANSFER"/>
+		<field name="CODE_REJECT_ONGOING_CALL_UPGRADE"/>
+		<field name="CODE_REJECT_ONGOING_CALL_WAITING_DISABLED"/>
+		<field name="CODE_REJECT_ONGOING_CONFERENCE_CALL"/>
+		<field name="CODE_REJECT_ONGOING_CS_CALL"/>
+		<field name="CODE_REJECT_ONGOING_E911_CALL"/>
+		<field name="CODE_REJECT_ONGOING_ENCRYPTED_CALL"/>
+		<field name="CODE_REJECT_ONGOING_HANDOVER"/>
+		<field name="CODE_REJECT_QOS_FAILURE"/>
+		<field name="CODE_REJECT_SERVICE_NOT_REGISTERED"/>
+		<field name="CODE_REJECT_UNKNOWN"/>
+		<field name="CODE_REJECT_UNSUPPORTED_SDP_HEADERS"/>
+		<field name="CODE_REJECT_UNSUPPORTED_SIP_HEADERS"/>
+		<field name="CODE_REJECT_VT_AVPF_NOT_ALLOWED"/>
+		<field name="CODE_REJECT_VT_TTY_NOT_ALLOWED"/>
+		<field name="CODE_REMOTE_CALL_DECLINE"/>
+		<field name="CODE_SESSION_MODIFICATION_FAILED"/>
+		<field name="CODE_SIP_ALTERNATE_EMERGENCY_CALL"/>
+		<field name="CODE_SIP_AMBIGUOUS"/>
+		<field name="CODE_SIP_BAD_ADDRESS"/>
+		<field name="CODE_SIP_BAD_REQUEST"/>
+		<field name="CODE_SIP_BUSY"/>
+		<field name="CODE_SIP_CALL_OR_TRANS_DOES_NOT_EXIST"/>
+		<field name="CODE_SIP_CLIENT_ERROR"/>
+		<field name="CODE_SIP_EXTENSION_REQUIRED"/>
+		<field name="CODE_SIP_FORBIDDEN"/>
+		<field name="CODE_SIP_GLOBAL_ERROR"/>
+		<field name="CODE_SIP_INTERVAL_TOO_BRIEF"/>
+		<field name="CODE_SIP_LOOP_DETECTED"/>
+		<field name="CODE_SIP_METHOD_NOT_ALLOWED"/>
+		<field name="CODE_SIP_NOT_ACCEPTABLE"/>
+		<field name="CODE_SIP_NOT_FOUND"/>
+		<field name="CODE_SIP_NOT_REACHABLE"/>
+		<field name="CODE_SIP_NOT_SUPPORTED"/>
+		<field name="CODE_SIP_PROXY_AUTHENTICATION_REQUIRED"/>
+		<field name="CODE_SIP_REDIRECTED"/>
+		<field name="CODE_SIP_REQUEST_CANCELLED"/>
+		<field name="CODE_SIP_REQUEST_ENTITY_TOO_LARGE"/>
+		<field name="CODE_SIP_REQUEST_PENDING"/>
+		<field name="CODE_SIP_REQUEST_TIMEOUT"/>
+		<field name="CODE_SIP_REQUEST_URI_TOO_LARGE"/>
+		<field name="CODE_SIP_SERVER_ERROR"/>
+		<field name="CODE_SIP_SERVER_INTERNAL_ERROR"/>
+		<field name="CODE_SIP_SERVER_TIMEOUT"/>
+		<field name="CODE_SIP_SERVICE_UNAVAILABLE"/>
+		<field name="CODE_SIP_TEMPRARILY_UNAVAILABLE"/>
+		<field name="CODE_SIP_TOO_MANY_HOPS"/>
+		<field name="CODE_SIP_TRANSACTION_DOES_NOT_EXIST"/>
+		<field name="CODE_SIP_UNDECIPHERABLE"/>
+		<field name="CODE_SIP_USER_MARKED_UNWANTED"/>
+		<field name="CODE_SIP_USER_REJECTED"/>
+		<field name="CODE_SUPP_SVC_CANCELLED"/>
+		<field name="CODE_SUPP_SVC_FAILED"/>
+		<field name="CODE_SUPP_SVC_REINVITE_COLLISION"/>
+		<field name="CODE_TIMEOUT_1XX_WAITING"/>
+		<field name="CODE_TIMEOUT_NO_ANSWER"/>
+		<field name="CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE"/>
+		<field name="CODE_UNSPECIFIED"/>
+		<field name="CODE_USER_CANCELLED_SESSION_MODIFICATION"/>
+		<field name="CODE_USER_DECLINE"/>
+		<field name="CODE_USER_IGNORE"/>
+		<field name="CODE_USER_NOANSWER"/>
+		<field name="CODE_USER_REJECTED_SESSION_MODIFICATION"/>
+		<field name="CODE_USER_TERMINATED"/>
+		<field name="CODE_USER_TERMINATED_BY_REMOTE"/>
+		<field name="CODE_UT_CB_PASSWORD_MISMATCH"/>
+		<field name="CODE_UT_NETWORK_ERROR"/>
+		<field name="CODE_UT_NOT_SUPPORTED"/>
+		<field name="CODE_UT_OPERATION_NOT_ALLOWED"/>
+		<field name="CODE_UT_SERVICE_UNAVAILABLE"/>
+		<field name="CODE_UT_SS_MODIFIED_TO_DIAL"/>
+		<field name="CODE_UT_SS_MODIFIED_TO_DIAL_VIDEO"/>
+		<field name="CODE_UT_SS_MODIFIED_TO_SS"/>
+		<field name="CODE_UT_SS_MODIFIED_TO_USSD"/>
+		<field name="CODE_WIFI_LOST"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_CODE_CALL_RETRY_BY_SETTINGS"/>
+		<field name="EXTRA_CODE_CALL_RETRY_EMERGENCY" since="31"/>
+		<field name="EXTRA_CODE_CALL_RETRY_NORMAL"/>
+		<field name="EXTRA_CODE_CALL_RETRY_SILENT_REDIAL"/>
+	</class>
+	<class name="android/telephony/ims/ImsRegistrationAttributes" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAttributeFlags()I"/>
+		<method name="getFeatureTags()Ljava/util/Set;"/>
+		<method name="getTransportType()I"/>
+		<field name="ATTR_EPDG_OVER_CELL_INTERNET"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/ims/RcsUceAdapter" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="isUceSettingEnabled()Z"/>
+	</class>
+	<class name="android/telephony/ims/RegistrationManager" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getRegistrationState(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="getRegistrationTransportType(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="registerImsRegistrationCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V"/>
+		<method name="unregisterImsRegistrationCallback(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V"/>
+		<field name="REGISTRATION_STATE_NOT_REGISTERED"/>
+		<field name="REGISTRATION_STATE_REGISTERED"/>
+		<field name="REGISTRATION_STATE_REGISTERING"/>
+	</class>
+	<class name="android/telephony/ims/RegistrationManager$RegistrationCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onRegistered(I)V" deprecated="31"/>
+		<method name="onRegistered(Landroid/telephony/ims/ImsRegistrationAttributes;)V" since="31"/>
+		<method name="onRegistering(I)V" deprecated="31"/>
+		<method name="onRegistering(Landroid/telephony/ims/ImsRegistrationAttributes;)V" since="31"/>
+		<method name="onTechnologyChangeFailed(ILandroid/telephony/ims/ImsReasonInfo;)V"/>
+		<method name="onUnregistered(Landroid/telephony/ims/ImsReasonInfo;)V"/>
+	</class>
+	<class name="android/telephony/ims/feature/MmTelFeature" since="30">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/telephony/ims/feature/MmTelFeature$MmTelCapabilities" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="isCapable(I)Z" since="31"/>
+		<field name="CAPABILITY_TYPE_CALL_COMPOSER" since="31"/>
+		<field name="CAPABILITY_TYPE_SMS"/>
+		<field name="CAPABILITY_TYPE_UT"/>
+		<field name="CAPABILITY_TYPE_VIDEO"/>
+		<field name="CAPABILITY_TYPE_VOICE"/>
+	</class>
+	<class name="android/telephony/mbms/DownloadProgressListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onProgressUpdated(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;IIII)V"/>
+	</class>
+	<class name="android/telephony/mbms/DownloadRequest" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDestinationUri()Landroid/net/Uri;"/>
+		<method name="getFileServiceId()Ljava/lang/String;"/>
+		<method name="getMaxAppIntentSize()I"/>
+		<method name="getMaxDestinationUriSize()I"/>
+		<method name="getSourceUri()Landroid/net/Uri;"/>
+		<method name="getSubscriptionId()I"/>
+		<method name="toByteArray()[B"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/mbms/DownloadRequest$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/net/Uri;Landroid/net/Uri;)V"/>
+		<method name="build()Landroid/telephony/mbms/DownloadRequest;"/>
+		<method name="fromDownloadRequest(Landroid/telephony/mbms/DownloadRequest;)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
+		<method name="fromSerializedRequest([B)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
+		<method name="setAppIntent(Landroid/content/Intent;)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
+		<method name="setServiceInfo(Landroid/telephony/mbms/FileServiceInfo;)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
+		<method name="setSubscriptionId(I)Landroid/telephony/mbms/DownloadRequest$Builder;"/>
+	</class>
+	<class name="android/telephony/mbms/DownloadStatusListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onStatusUpdated(Landroid/telephony/mbms/DownloadRequest;Landroid/telephony/mbms/FileInfo;I)V"/>
+	</class>
+	<class name="android/telephony/mbms/FileInfo" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getMimeType()Ljava/lang/String;"/>
+		<method name="getUri()Landroid/net/Uri;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/mbms/FileServiceInfo" since="28">
+		<extends name="android/telephony/mbms/ServiceInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFiles()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/telephony/mbms/GroupCall" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getTmgi()J"/>
+		<method name="updateGroupCall(Ljava/util/List;Ljava/util/List;)V"/>
+		<field name="REASON_BY_USER_REQUEST"/>
+		<field name="REASON_FREQUENCY_CONFLICT"/>
+		<field name="REASON_LEFT_MBMS_BROADCAST_AREA"/>
+		<field name="REASON_NONE"/>
+		<field name="REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE"/>
+		<field name="REASON_OUT_OF_MEMORY"/>
+		<field name="STATE_STALLED"/>
+		<field name="STATE_STARTED"/>
+		<field name="STATE_STOPPED"/>
+	</class>
+	<class name="android/telephony/mbms/GroupCallCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onBroadcastSignalStrengthUpdated(I)V"/>
+		<method name="onError(ILjava/lang/String;)V"/>
+		<method name="onGroupCallStateChanged(II)V"/>
+		<field name="SIGNAL_STRENGTH_UNAVAILABLE"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsDownloadReceiver" since="28">
+		<extends name="android/content/BroadcastReceiver"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsDownloadSessionCallback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onError(ILjava/lang/String;)V"/>
+		<method name="onFileServicesUpdated(Ljava/util/List;)V"/>
+		<method name="onMiddlewareReady()V"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_MIDDLEWARE_LOST"/>
+		<field name="ERROR_MIDDLEWARE_NOT_BOUND"/>
+		<field name="ERROR_NO_UNIQUE_MIDDLEWARE"/>
+		<field name="SUCCESS"/>
+		<field name="UNKNOWN"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$DownloadErrors" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_CANNOT_CHANGE_TEMP_FILE_ROOT"/>
+		<field name="ERROR_MALFORMED_SERVICE_ANNOUNCEMENT" since="31"/>
+		<field name="ERROR_UNKNOWN_DOWNLOAD_REQUEST"/>
+		<field name="ERROR_UNKNOWN_FILE_INFO"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$GeneralErrors" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_CARRIER_CHANGE_NOT_ALLOWED"/>
+		<field name="ERROR_IN_E911"/>
+		<field name="ERROR_MIDDLEWARE_NOT_YET_READY"/>
+		<field name="ERROR_MIDDLEWARE_TEMPORARILY_UNAVAILABLE"/>
+		<field name="ERROR_NOT_CONNECTED_TO_HOME_CARRIER_LTE"/>
+		<field name="ERROR_OUT_OF_MEMORY"/>
+		<field name="ERROR_UNABLE_TO_READ_SIM"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$GroupCallErrors" since="29">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_DUPLICATE_START_GROUP_CALL"/>
+		<field name="ERROR_UNABLE_TO_START_SERVICE"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$InitializationErrors" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_APP_PERMISSIONS_NOT_GRANTED"/>
+		<field name="ERROR_DUPLICATE_INITIALIZE"/>
+		<field name="ERROR_UNABLE_TO_INITIALIZE"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsErrors$StreamingErrors" since="28">
+		<extends name="java/lang/Object"/>
+		<field name="ERROR_CONCURRENT_SERVICE_LIMIT_REACHED"/>
+		<field name="ERROR_DUPLICATE_START_STREAM"/>
+		<field name="ERROR_UNABLE_TO_START_SERVICE"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsGroupCallSessionCallback" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="onAvailableSaisUpdated(Ljava/util/List;Ljava/util/List;)V"/>
+		<method name="onError(ILjava/lang/String;)V"/>
+		<method name="onMiddlewareReady()V"/>
+		<method name="onServiceInterfaceAvailable(Ljava/lang/String;I)V"/>
+	</class>
+	<class name="android/telephony/mbms/MbmsStreamingSessionCallback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onError(ILjava/lang/String;)V"/>
+		<method name="onMiddlewareReady()V"/>
+		<method name="onStreamingServicesUpdated(Ljava/util/List;)V"/>
+	</class>
+	<class name="android/telephony/mbms/ServiceInfo" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getLocales()Ljava/util/List;"/>
+		<method name="getNameForLocale(Ljava/util/Locale;)Ljava/lang/CharSequence;"/>
+		<method name="getNamedContentLocales()Ljava/util/Set;"/>
+		<method name="getServiceClassName()Ljava/lang/String;"/>
+		<method name="getServiceId()Ljava/lang/String;"/>
+		<method name="getSessionEndTime()Ljava/util/Date;"/>
+		<method name="getSessionStartTime()Ljava/util/Date;"/>
+	</class>
+	<class name="android/telephony/mbms/StreamingService" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="getInfo()Landroid/telephony/mbms/StreamingServiceInfo;"/>
+		<method name="getPlaybackUri()Landroid/net/Uri;"/>
+		<field name="BROADCAST_METHOD"/>
+		<field name="REASON_BY_USER_REQUEST"/>
+		<field name="REASON_END_OF_SESSION"/>
+		<field name="REASON_FREQUENCY_CONFLICT"/>
+		<field name="REASON_LEFT_MBMS_BROADCAST_AREA"/>
+		<field name="REASON_NONE"/>
+		<field name="REASON_NOT_CONNECTED_TO_HOMECARRIER_LTE"/>
+		<field name="REASON_OUT_OF_MEMORY"/>
+		<field name="STATE_STALLED"/>
+		<field name="STATE_STARTED"/>
+		<field name="STATE_STOPPED"/>
+		<field name="UNICAST_METHOD"/>
+	</class>
+	<class name="android/telephony/mbms/StreamingServiceCallback" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onBroadcastSignalStrengthUpdated(I)V"/>
+		<method name="onError(ILjava/lang/String;)V"/>
+		<method name="onMediaDescriptionUpdated()V"/>
+		<method name="onStreamMethodUpdated(I)V"/>
+		<method name="onStreamStateUpdated(II)V"/>
+		<field name="SIGNAL_STRENGTH_UNAVAILABLE"/>
+	</class>
+	<class name="android/telephony/mbms/StreamingServiceInfo" since="28">
+		<extends name="android/telephony/mbms/ServiceInfo"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/test/ActivityInstrumentationTestCase" since="1" deprecated="3">
+		<extends name="android/test/ActivityTestCase"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V" deprecated="33"/>
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33"/>
+	</class>
+	<class name="android/test/ActivityInstrumentationTestCase2" since="3" deprecated="24">
+		<extends name="android/test/ActivityTestCase"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" since="8" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="15"/>
+		<method name="setActivityInitialTouchMode(Z)V" deprecated="33"/>
+		<method name="setActivityIntent(Landroid/content/Intent;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/ActivityTestCase" since="1" deprecated="24">
+		<extends name="android/test/InstrumentationTestCase"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33"/>
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="setActivity(Landroid/app/Activity;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/ActivityUnitTestCase" since="1" deprecated="24">
+		<extends name="android/test/ActivityTestCase"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="getFinishedActivityRequest()I" deprecated="33"/>
+		<method name="getRequestedOrientation()I" deprecated="33"/>
+		<method name="getStartedActivityIntent()Landroid/content/Intent;" deprecated="33"/>
+		<method name="getStartedActivityRequest()I" deprecated="33"/>
+		<method name="isFinishCalled()Z" deprecated="33"/>
+		<method name="setActivityContext(Landroid/content/Context;)V" deprecated="33"/>
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33"/>
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;" deprecated="33"/>
+	</class>
+	<class name="android/test/AndroidTestCase" since="1" deprecated="24">
+		<extends name="junit/framework/TestCase"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4" deprecated="33"/>
+		<method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33"/>
+		<method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33"/>
+		<method name="getContext()Landroid/content/Context;" deprecated="33"/>
+		<method name="getTestContext()Landroid/content/Context;" since="33" deprecated="33"/>
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33"/>
+		<method name="setTestContext(Landroid/content/Context;)V" since="33" deprecated="33"/>
+		<method name="testAndroidTestCaseSetupProperly()V" deprecated="33"/>
+		<field name="mContext" deprecated="33"/>
+	</class>
+	<class name="android/test/AndroidTestRunner" since="1" deprecated="24">
+		<extends name="junit/runner/BaseTestRunner"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" deprecated="33"/>
+		<method name="clearTestListeners()V" deprecated="33"/>
+		<method name="createTestResult()Ljunit/framework/TestResult;" deprecated="33"/>
+		<method name="getTestCases()Ljava/util/List;" deprecated="33"/>
+		<method name="getTestClassName()Ljava/lang/String;" deprecated="33"/>
+		<method name="getTestResult()Ljunit/framework/TestResult;" deprecated="33"/>
+		<method name="runTest()V" deprecated="33"/>
+		<method name="runTest(Ljunit/framework/TestResult;)V" deprecated="33"/>
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33"/>
+		<method name="setInstrumentaiton(Landroid/app/Instrumentation;)V" deprecated="15"/>
+		<method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33"/>
+		<method name="setTest(Ljunit/framework/Test;)V" deprecated="33"/>
+		<method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/ApplicationTestCase" since="1" deprecated="24">
+		<extends name="android/test/AndroidTestCase"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="createApplication()V" deprecated="33"/>
+		<method name="getApplication()Landroid/app/Application;" deprecated="33"/>
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33"/>
+		<method name="terminateApplication()V" deprecated="33"/>
+		<method name="testApplicationTestCaseSetUpProperly()V" deprecated="33"/>
+	</class>
+	<class name="android/test/AssertionFailedError" since="1" deprecated="16">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/ComparisonFailure" since="1" deprecated="16">
+		<extends name="android/test/AssertionFailedError"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/FlakyTest" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="tolerance()I" deprecated="33"/>
+	</class>
+	<class name="android/test/InstrumentationTestCase" since="1" deprecated="24">
+		<extends name="junit/framework/TestCase"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="getInstrumentation()Landroid/app/Instrumentation;" deprecated="33"/>
+		<method name="injectInsrumentation(Landroid/app/Instrumentation;)V" deprecated="15"/>
+		<method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33"/>
+		<method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;" deprecated="33"/>
+		<method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3" deprecated="33"/>
+		<method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3" deprecated="33"/>
+		<method name="sendKeys(Ljava/lang/String;)V" deprecated="33"/>
+		<method name="sendKeys([I)V" deprecated="33"/>
+		<method name="sendRepeatedKeys([I)V" deprecated="33"/>
+	</class>
+	<class name="android/test/InstrumentationTestRunner" since="1" deprecated="24">
+		<extends name="android/app/Instrumentation"/>
+		<implements name="android/test/TestSuiteProvider"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" since="33" deprecated="33"/>
+		<method name="getAllTests()Ljunit/framework/TestSuite;" deprecated="33"/>
+		<method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;" deprecated="33"/>
+		<method name="getArguments()Landroid/os/Bundle;" since="18" deprecated="33"/>
+		<method name="getLoader()Ljava/lang/ClassLoader;" deprecated="33"/>
+		<field name="REPORT_KEY_NAME_CLASS" deprecated="33"/>
+		<field name="REPORT_KEY_NAME_TEST" deprecated="33"/>
+		<field name="REPORT_KEY_NUM_CURRENT" deprecated="33"/>
+		<field name="REPORT_KEY_NUM_TOTAL" deprecated="33"/>
+		<field name="REPORT_KEY_STACK" deprecated="33"/>
+		<field name="REPORT_VALUE_ID" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_ERROR" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_FAILURE" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_OK" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_START" deprecated="33"/>
+	</class>
+	<class name="android/test/InstrumentationTestSuite" since="1" deprecated="24">
+		<extends name="junit/framework/TestSuite"/>
+		<method name="&lt;init>(Landroid/app/Instrumentation;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/Class;Landroid/app/Instrumentation;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/IsolatedContext" since="1" deprecated="24">
+		<extends name="android/content/ContextWrapper"/>
+		<method name="&lt;init>(Landroid/content/ContentResolver;Landroid/content/Context;)V" deprecated="33"/>
+		<method name="getAndClearBroadcastIntents()Ljava/util/List;" deprecated="33"/>
+	</class>
+	<class name="android/test/LaunchPerformanceBase" since="33" deprecated="33">
+		<extends name="android/app/Instrumentation"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="LaunchApp()V" deprecated="33"/>
+		<field name="mIntent" deprecated="33"/>
+		<field name="mResults" deprecated="33"/>
+	</class>
+	<class name="android/test/LoaderTestCase" since="11">
+		<extends name="android/test/AndroidTestCase"/>
+		<method name="&lt;init>()V"/>
+		<method name="getLoaderResultSynchronously(Landroid/content/Loader;)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/test/MoreAsserts" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[B[B)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[D[D)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[I[I)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V" deprecated="33"/>
+		<method name="assertEquals([B[B)V" deprecated="33"/>
+		<method name="assertEquals([D[D)V" deprecated="33"/>
+		<method name="assertEquals([I[I)V" deprecated="33"/>
+		<method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33"/>
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33"/>
+	</class>
+	<class name="android/test/PerformanceTestCase" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="isPerformanceOnly()Z" deprecated="33"/>
+		<method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I" deprecated="33"/>
+	</class>
+	<class name="android/test/PerformanceTestCase$Intermediates" since="1" deprecated="33">
+		<extends name="java/lang/Object"/>
+		<method name="addIntermediate(Ljava/lang/String;)V" deprecated="33"/>
+		<method name="addIntermediate(Ljava/lang/String;J)V" deprecated="33"/>
+		<method name="finishTiming(Z)V" deprecated="33"/>
+		<method name="setInternalIterations(I)V" deprecated="33"/>
+		<method name="startTiming(Z)V" deprecated="33"/>
+	</class>
+	<class name="android/test/ProviderTestCase" since="1" deprecated="5">
+		<extends name="android/test/InstrumentationTestCase"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" deprecated="33"/>
+		<method name="getMockContext()Landroid/test/IsolatedContext;" deprecated="33"/>
+		<method name="getProvider()Landroid/content/ContentProvider;" deprecated="33"/>
+		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" deprecated="33"/>
+	</class>
+	<class name="android/test/ProviderTestCase2" since="3">
+		<extends name="android/test/AndroidTestCase"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
+		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;"/>
+		<method name="getMockContext()Landroid/test/IsolatedContext;"/>
+		<method name="getProvider()Landroid/content/ContentProvider;"/>
+		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;"/>
+	</class>
+	<class name="android/test/RenamingDelegatingContext" since="1" deprecated="24">
+		<extends name="android/content/ContextWrapper"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="getDatabasePrefix()Ljava/lang/String;" deprecated="33"/>
+		<method name="makeExistingFilesAndDbsAccessible()V" deprecated="33"/>
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;" deprecated="33"/>
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;" deprecated="33"/>
+	</class>
+	<class name="android/test/RepetitiveTest" since="33" deprecated="33">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="numIterations()I" deprecated="33"/>
+	</class>
+	<class name="android/test/ServiceTestCase" since="1" deprecated="24">
+		<extends name="android/test/AndroidTestCase"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;" deprecated="33"/>
+		<method name="getApplication()Landroid/app/Application;" deprecated="33"/>
+		<method name="getService()Landroid/app/Service;" deprecated="33"/>
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33"/>
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33"/>
+		<method name="setupService()V" deprecated="33"/>
+		<method name="shutdownService()V" deprecated="33"/>
+		<method name="startService(Landroid/content/Intent;)V" deprecated="33"/>
+		<method name="testServiceTestCaseSetUpProperly()V" deprecated="33"/>
+	</class>
+	<class name="android/test/SingleLaunchActivityTestCase" since="1" deprecated="24">
+		<extends name="android/test/InstrumentationTestCase"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33"/>
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33"/>
+	</class>
+	<class name="android/test/SyncBaseInstrumentation" since="1" deprecated="24">
+		<extends name="android/test/InstrumentationTestCase"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="cancelSyncsandDisableAutoSync()V" deprecated="33"/>
+		<method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/TestSuiteProvider" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="getTestSuite()Ljunit/framework/TestSuite;" deprecated="33"/>
+	</class>
+	<class name="android/test/TouchUtils" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33"/>
+		<method name="drag(Landroid/test/ActivityInstrumentationTestCase;FFFFI)V" deprecated="15"/>
+		<method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3" deprecated="33"/>
+		<method name="dragQuarterScreenDown(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15"/>
+		<method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33"/>
+		<method name="dragQuarterScreenUp(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15"/>
+		<method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33"/>
+		<method name="dragViewBy(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15"/>
+		<method name="dragViewBy(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="15"/>
+		<method name="dragViewTo(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15"/>
+		<method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="33"/>
+		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
+		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15"/>
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3" deprecated="33"/>
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3" deprecated="33"/>
+		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
+		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15"/>
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33"/>
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3" deprecated="33"/>
+		<method name="dragViewToX(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15"/>
+		<method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33"/>
+		<method name="dragViewToY(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15"/>
+		<method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33"/>
+		<method name="longClickView(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
+		<method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33"/>
+		<method name="scrollToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15"/>
+		<method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33"/>
+		<method name="scrollToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15"/>
+		<method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33"/>
+		<method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33"/>
+		<method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/UiThreadTest" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/test/ViewAsserts" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V" deprecated="33"/>
+		<method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V" deprecated="33"/>
+		<method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/mock/MockAccountManager" since="33" deprecated="33">
+		<extends name="java/lang/Object"/>
+		<method name="newMockAccountManager(Landroid/content/Context;)Landroid/accounts/AccountManager;" deprecated="33"/>
+	</class>
+	<class name="android/test/mock/MockApplication" since="1" deprecated="24">
+		<extends name="android/app/Application"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+	</class>
+	<class name="android/test/mock/MockContentProvider" since="8">
+		<extends name="android/content/ContentProvider"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V"/>
+		<method name="attachInfoForTesting(Landroid/content/ContentProvider;Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" since="33" deprecated="33"/>
+	</class>
+	<class name="android/test/mock/MockContentResolver" since="1">
+		<extends name="android/content/ContentResolver"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" since="18"/>
+		<method name="addProvider(Ljava/lang/String;Landroid/content/ContentProvider;)V"/>
+	</class>
+	<class name="android/test/mock/MockContext" since="1">
+		<extends name="android/content/Context"/>
+		<method name="&lt;init>()V"/>
+		<method name="getPackageCodePath()Ljava/lang/String;"/>
+		<method name="getPackageResourcePath()Ljava/lang/String;"/>
+	</class>
+	<class name="android/test/mock/MockCursor" since="8" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/database/Cursor"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="abortUpdates()V" removed="11"/>
+		<method name="commitUpdates()Z" removed="11"/>
+		<method name="commitUpdates(Ljava/util/Map;)Z" removed="11"/>
+		<method name="deleteRow()Z" removed="11"/>
+		<method name="hasUpdates()Z" removed="11"/>
+		<method name="supportsUpdates()Z" removed="11"/>
+		<method name="updateBlob(I[B)Z" removed="11"/>
+		<method name="updateDouble(ID)Z" removed="11"/>
+		<method name="updateFloat(IF)Z" removed="11"/>
+		<method name="updateInt(II)Z" removed="11"/>
+		<method name="updateLong(IJ)Z" removed="11"/>
+		<method name="updateShort(IS)Z" removed="11"/>
+		<method name="updateString(ILjava/lang/String;)Z" removed="11"/>
+		<method name="updateToNull(I)Z" removed="11"/>
+	</class>
+	<class name="android/test/mock/MockDialogInterface" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/content/DialogInterface"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+	</class>
+	<class name="android/test/mock/MockPackageManager" since="1" deprecated="24">
+		<extends name="android/content/pm/PackageManager"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23" deprecated="33"/>
+		<method name="getDefaultBrowserPackageName(I)Ljava/lang/String;" since="23" removed="24"/>
+		<method name="resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;" since="33" deprecated="33"/>
+		<method name="setDefaultBrowserPackageName(Ljava/lang/String;I)Z" since="23" removed="24"/>
+		<method name="setPackageObbPath(Ljava/lang/String;Ljava/lang/String;)V" since="9" removed="10"/>
+	</class>
+	<class name="android/test/mock/MockResources" since="1" deprecated="24">
+		<extends name="android/content/res/Resources"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+	</class>
+	<class name="android/test/mock/MockService" since="33" deprecated="33">
+		<extends name="java/lang/Object"/>
+		<method name="attachForTesting(Landroid/app/Service;Landroid/content/Context;Ljava/lang/String;Landroid/app/Application;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/suitebuilder/TestMethod" since="1" deprecated="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="3" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljunit/framework/TestCase;)V" since="3" deprecated="33"/>
+		<method name="createTest()Ljunit/framework/TestCase;" deprecated="33"/>
+		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" deprecated="33"/>
+		<method name="getEnclosingClass()Ljava/lang/Class;" deprecated="33"/>
+		<method name="getEnclosingClassname()Ljava/lang/String;" deprecated="33"/>
+		<method name="getName()Ljava/lang/String;" deprecated="33"/>
+	</class>
+	<class name="android/test/suitebuilder/TestSuiteBuilder" since="1" deprecated="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33"/>
+		<method name="addRequirements(Ljava/util/List;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28"/>
+		<method name="addRequirements([Lcom/android/internal/util/Predicate;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28"/>
+		<method name="build()Ljunit/framework/TestSuite;" deprecated="33"/>
+		<method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
+		<method name="getSuiteName()Ljava/lang/String;" deprecated="33"/>
+		<method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
+		<method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
+		<method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
+	</class>
+	<class name="android/test/suitebuilder/TestSuiteBuilder$FailedToCreateTests" since="1" deprecated="26">
+		<extends name="junit/framework/TestCase"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V" deprecated="33"/>
+		<method name="testSuiteConstructionFailed()V" deprecated="33"/>
+	</class>
+	<class name="android/test/suitebuilder/UnitTestSuiteBuilder" since="33" deprecated="33">
+		<extends name="android/test/suitebuilder/TestSuiteBuilder"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33"/>
+	</class>
+	<class name="android/test/suitebuilder/annotation/LargeTest" since="2" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/test/suitebuilder/annotation/MediumTest" since="2" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/test/suitebuilder/annotation/SmallTest" since="2" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/test/suitebuilder/annotation/Smoke" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/test/suitebuilder/annotation/Suppress" since="1" deprecated="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/text/AlteredCharSequence" since="1" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/GetChars"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="make(Ljava/lang/CharSequence;[CII)Landroid/text/AlteredCharSequence;" deprecated="30"/>
+	</class>
+	<class name="android/text/AndroidCharacter" since="1" deprecated="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getDirectionalities([C[BI)V" deprecated="29"/>
+		<method name="getEastAsianWidth(C)I" since="8" deprecated="29"/>
+		<method name="getEastAsianWidths([CII[B)V" since="8" deprecated="29"/>
+		<method name="getMirror(C)C" deprecated="29"/>
+		<method name="mirror([CII)Z" deprecated="29"/>
+		<field name="EAST_ASIAN_WIDTH_AMBIGUOUS" since="8" deprecated="29"/>
+		<field name="EAST_ASIAN_WIDTH_FULL_WIDTH" since="8" deprecated="29"/>
+		<field name="EAST_ASIAN_WIDTH_HALF_WIDTH" since="8" deprecated="29"/>
+		<field name="EAST_ASIAN_WIDTH_NARROW" since="8" deprecated="29"/>
+		<field name="EAST_ASIAN_WIDTH_NEUTRAL" since="8" deprecated="29"/>
+		<field name="EAST_ASIAN_WIDTH_WIDE" since="8" deprecated="29"/>
+	</class>
+	<class name="android/text/Annotation" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getKey()Ljava/lang/String;"/>
+		<method name="getValue()Ljava/lang/String;"/>
+	</class>
+	<class name="android/text/AutoText" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="get(Ljava/lang/CharSequence;IILandroid/view/View;)Ljava/lang/String;"/>
+		<method name="getSize(Landroid/view/View;)I" since="3"/>
+	</class>
+	<class name="android/text/BidiFormatter" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="getInstance()Landroid/text/BidiFormatter;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/BidiFormatter;"/>
+		<method name="getInstance(Z)Landroid/text/BidiFormatter;"/>
+		<method name="getStereoReset()Z"/>
+		<method name="isRtl(Ljava/lang/CharSequence;)Z" since="26"/>
+		<method name="isRtl(Ljava/lang/String;)Z"/>
+		<method name="isRtlContext()Z"/>
+		<method name="unicodeWrap(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;" since="26"/>
+		<method name="unicodeWrap(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;)Ljava/lang/CharSequence;" since="26"/>
+		<method name="unicodeWrap(Ljava/lang/CharSequence;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/CharSequence;" since="26"/>
+		<method name="unicodeWrap(Ljava/lang/CharSequence;Z)Ljava/lang/CharSequence;" since="26"/>
+		<method name="unicodeWrap(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;)Ljava/lang/String;"/>
+		<method name="unicodeWrap(Ljava/lang/String;Landroid/text/TextDirectionHeuristic;Z)Ljava/lang/String;"/>
+		<method name="unicodeWrap(Ljava/lang/String;Z)Ljava/lang/String;"/>
+	</class>
+	<class name="android/text/BidiFormatter$Builder" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="build()Landroid/text/BidiFormatter;"/>
+		<method name="setTextDirectionHeuristic(Landroid/text/TextDirectionHeuristic;)Landroid/text/BidiFormatter$Builder;"/>
+		<method name="stereoReset(Z)Landroid/text/BidiFormatter$Builder;"/>
+	</class>
+	<class name="android/text/BoringLayout" since="1">
+		<extends name="android/text/Layout"/>
+		<implements name="android/text/TextUtils$EllipsizeCallback"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)V"/>
+		<method name="isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;)Landroid/text/BoringLayout$Metrics;"/>
+		<method name="isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics;"/>
+		<method name="make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;"/>
+		<method name="make(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;"/>
+		<method name="replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;Z)Landroid/text/BoringLayout;"/>
+		<method name="replaceOrMake(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout;"/>
+	</class>
+	<class name="android/text/BoringLayout$Metrics" since="1">
+		<extends name="android/graphics/Paint$FontMetricsInt"/>
+		<method name="&lt;init>()V"/>
+		<field name="width"/>
+	</class>
+	<class name="android/text/ClipboardManager" since="1" deprecated="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="11" deprecated="29"/>
+		<method name="getText()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="hasText()Z" deprecated="29"/>
+		<method name="setText(Ljava/lang/CharSequence;)V" deprecated="29"/>
+	</class>
+	<class name="android/text/DynamicLayout" since="1">
+		<extends name="android/text/Layout"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZLandroid/text/TextUtils$TruncateAt;I)V" deprecated="28"/>
+	</class>
+	<class name="android/text/DynamicLayout$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="build()Landroid/text/DynamicLayout;"/>
+		<method name="obtain(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setBreakStrategy(I)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setDisplayText(Ljava/lang/CharSequence;)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setEllipsizedWidth(I)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setHyphenationFrequency(I)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setIncludePad(Z)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setJustificationMode(I)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setLineSpacing(FF)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/DynamicLayout$Builder;"/>
+		<method name="setUseLineSpacingFromFallbacks(Z)Landroid/text/DynamicLayout$Builder;"/>
+	</class>
+	<class name="android/text/Editable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/GetChars"/>
+		<implements name="android/text/Spannable"/>
+		<implements name="java/lang/Appendable"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="append(C)Landroid/text/Editable;"/>
+		<method name="append(Ljava/lang/CharSequence;)Landroid/text/Editable;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Landroid/text/Editable;"/>
+		<method name="clear()V"/>
+		<method name="clearSpans()V"/>
+		<method name="delete(II)Landroid/text/Editable;"/>
+		<method name="getFilters()[Landroid/text/InputFilter;"/>
+		<method name="insert(ILjava/lang/CharSequence;)Landroid/text/Editable;"/>
+		<method name="insert(ILjava/lang/CharSequence;II)Landroid/text/Editable;"/>
+		<method name="replace(IILjava/lang/CharSequence;)Landroid/text/Editable;"/>
+		<method name="replace(IILjava/lang/CharSequence;II)Landroid/text/Editable;"/>
+		<method name="setFilters([Landroid/text/InputFilter;)V"/>
+	</class>
+	<class name="android/text/Editable$Factory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance()Landroid/text/Editable$Factory;"/>
+		<method name="newEditable(Ljava/lang/CharSequence;)Landroid/text/Editable;"/>
+	</class>
+	<class name="android/text/GetChars" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="getChars(II[CI)V"/>
+	</class>
+	<class name="android/text/Html" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="escapeHtml(Ljava/lang/CharSequence;)Ljava/lang/String;" since="16"/>
+		<method name="fromHtml(Ljava/lang/String;)Landroid/text/Spanned;" deprecated="24"/>
+		<method name="fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;" since="24"/>
+		<method name="fromHtml(Ljava/lang/String;ILandroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;" since="24"/>
+		<method name="fromHtml(Ljava/lang/String;Landroid/text/Html$ImageGetter;Landroid/text/Html$TagHandler;)Landroid/text/Spanned;" deprecated="24"/>
+		<method name="toHtml(Landroid/text/Spanned;)Ljava/lang/String;" deprecated="24"/>
+		<method name="toHtml(Landroid/text/Spanned;I)Ljava/lang/String;" since="24"/>
+		<field name="FROM_HTML_MODE_COMPACT" since="24"/>
+		<field name="FROM_HTML_MODE_LEGACY" since="24"/>
+		<field name="FROM_HTML_OPTION_USE_CSS_COLORS" since="24"/>
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE" since="24"/>
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_DIV" since="24"/>
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_HEADING" since="24"/>
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_LIST" since="24"/>
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM" since="24"/>
+		<field name="FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH" since="24"/>
+		<field name="TO_HTML_PARAGRAPH_LINES_CONSECUTIVE" since="24"/>
+		<field name="TO_HTML_PARAGRAPH_LINES_INDIVIDUAL" since="24"/>
+	</class>
+	<class name="android/text/Html$ImageGetter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getDrawable(Ljava/lang/String;)Landroid/graphics/drawable/Drawable;"/>
+	</class>
+	<class name="android/text/Html$TagHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="handleTag(ZLjava/lang/String;Landroid/text/Editable;Lorg/xml/sax/XMLReader;)V"/>
+	</class>
+	<class name="android/text/InputFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="android/text/InputFilter$AllCaps" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/InputFilter"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V" since="27"/>
+	</class>
+	<class name="android/text/InputFilter$LengthFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/InputFilter"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getMax()I" since="21"/>
+	</class>
+	<class name="android/text/InputType" since="3">
+		<extends name="java/lang/Object"/>
+		<field name="TYPE_CLASS_DATETIME"/>
+		<field name="TYPE_CLASS_NUMBER"/>
+		<field name="TYPE_CLASS_PHONE"/>
+		<field name="TYPE_CLASS_TEXT"/>
+		<field name="TYPE_DATETIME_VARIATION_DATE"/>
+		<field name="TYPE_DATETIME_VARIATION_NORMAL"/>
+		<field name="TYPE_DATETIME_VARIATION_TIME"/>
+		<field name="TYPE_MASK_CLASS"/>
+		<field name="TYPE_MASK_FLAGS"/>
+		<field name="TYPE_MASK_VARIATION"/>
+		<field name="TYPE_NULL"/>
+		<field name="TYPE_NUMBER_FLAG_DECIMAL"/>
+		<field name="TYPE_NUMBER_FLAG_SIGNED"/>
+		<field name="TYPE_NUMBER_VARIATION_NORMAL" since="11"/>
+		<field name="TYPE_NUMBER_VARIATION_PASSWORD" since="11"/>
+		<field name="TYPE_TEXT_FLAG_AUTO_COMPLETE"/>
+		<field name="TYPE_TEXT_FLAG_AUTO_CORRECT"/>
+		<field name="TYPE_TEXT_FLAG_CAP_CHARACTERS"/>
+		<field name="TYPE_TEXT_FLAG_CAP_SENTENCES"/>
+		<field name="TYPE_TEXT_FLAG_CAP_WORDS"/>
+		<field name="TYPE_TEXT_FLAG_IME_MULTI_LINE"/>
+		<field name="TYPE_TEXT_FLAG_MULTI_LINE"/>
+		<field name="TYPE_TEXT_FLAG_NO_SUGGESTIONS" since="5"/>
+		<field name="TYPE_TEXT_VARIATION_EMAIL_ADDRESS"/>
+		<field name="TYPE_TEXT_VARIATION_EMAIL_SUBJECT"/>
+		<field name="TYPE_TEXT_VARIATION_FILTER"/>
+		<field name="TYPE_TEXT_VARIATION_LONG_MESSAGE"/>
+		<field name="TYPE_TEXT_VARIATION_NORMAL"/>
+		<field name="TYPE_TEXT_VARIATION_PASSWORD"/>
+		<field name="TYPE_TEXT_VARIATION_PERSON_NAME"/>
+		<field name="TYPE_TEXT_VARIATION_PHONETIC"/>
+		<field name="TYPE_TEXT_VARIATION_POSTAL_ADDRESS"/>
+		<field name="TYPE_TEXT_VARIATION_SHORT_MESSAGE"/>
+		<field name="TYPE_TEXT_VARIATION_URI"/>
+		<field name="TYPE_TEXT_VARIATION_VISIBLE_PASSWORD"/>
+		<field name="TYPE_TEXT_VARIATION_WEB_EDIT_TEXT"/>
+		<field name="TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS" since="11"/>
+		<field name="TYPE_TEXT_VARIATION_WEB_PASSWORD" since="11"/>
+	</class>
+	<class name="android/text/Layout" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FF)V"/>
+		<method name="draw(Landroid/graphics/Canvas;)V"/>
+		<method name="draw(Landroid/graphics/Canvas;Landroid/graphics/Path;Landroid/graphics/Paint;I)V"/>
+		<method name="getAlignment()Landroid/text/Layout$Alignment;"/>
+		<method name="getBottomPadding()I"/>
+		<method name="getCursorPath(ILandroid/graphics/Path;Ljava/lang/CharSequence;)V"/>
+		<method name="getDesiredWidth(Ljava/lang/CharSequence;IILandroid/text/TextPaint;)F"/>
+		<method name="getDesiredWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F"/>
+		<method name="getEllipsisCount(I)I"/>
+		<method name="getEllipsisStart(I)I"/>
+		<method name="getEllipsizedWidth()I"/>
+		<method name="getHeight()I"/>
+		<method name="getLineAscent(I)I"/>
+		<method name="getLineBaseline(I)I"/>
+		<method name="getLineBottom(I)I"/>
+		<method name="getLineBounds(ILandroid/graphics/Rect;)I"/>
+		<method name="getLineContainsTab(I)Z"/>
+		<method name="getLineCount()I"/>
+		<method name="getLineDescent(I)I"/>
+		<method name="getLineDirections(I)Landroid/text/Layout$Directions;"/>
+		<method name="getLineEnd(I)I"/>
+		<method name="getLineForOffset(I)I"/>
+		<method name="getLineForVertical(I)I"/>
+		<method name="getLineLeft(I)F"/>
+		<method name="getLineMax(I)F"/>
+		<method name="getLineRight(I)F"/>
+		<method name="getLineStart(I)I"/>
+		<method name="getLineTop(I)I"/>
+		<method name="getLineVisibleEnd(I)I"/>
+		<method name="getLineWidth(I)F"/>
+		<method name="getOffsetForHorizontal(IF)I"/>
+		<method name="getOffsetToLeftOf(I)I"/>
+		<method name="getOffsetToRightOf(I)I"/>
+		<method name="getPaint()Landroid/text/TextPaint;"/>
+		<method name="getParagraphAlignment(I)Landroid/text/Layout$Alignment;"/>
+		<method name="getParagraphDirection(I)I"/>
+		<method name="getParagraphLeft(I)I"/>
+		<method name="getParagraphRight(I)I"/>
+		<method name="getPrimaryHorizontal(I)F"/>
+		<method name="getSecondaryHorizontal(I)F"/>
+		<method name="getSelectionPath(IILandroid/graphics/Path;)V"/>
+		<method name="getSpacingAdd()F"/>
+		<method name="getSpacingMultiplier()F"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTopPadding()I"/>
+		<method name="getWidth()I"/>
+		<method name="increaseWidthTo(I)V"/>
+		<method name="isRtlCharAt(I)Z" since="14"/>
+		<method name="isSpanned()Z"/>
+		<field name="BREAK_STRATEGY_BALANCED" since="23"/>
+		<field name="BREAK_STRATEGY_HIGH_QUALITY" since="23"/>
+		<field name="BREAK_STRATEGY_SIMPLE" since="23"/>
+		<field name="DEFAULT_LINESPACING_ADDITION" since="28"/>
+		<field name="DEFAULT_LINESPACING_MULTIPLIER" since="28"/>
+		<field name="DIR_LEFT_TO_RIGHT"/>
+		<field name="DIR_RIGHT_TO_LEFT"/>
+		<field name="HYPHENATION_FREQUENCY_FULL" since="23"/>
+		<field name="HYPHENATION_FREQUENCY_NONE" since="23"/>
+		<field name="HYPHENATION_FREQUENCY_NORMAL" since="23"/>
+		<field name="JUSTIFICATION_MODE_INTER_WORD" since="26"/>
+		<field name="JUSTIFICATION_MODE_NONE" since="26"/>
+	</class>
+	<class name="android/text/Layout$Alignment" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/text/Layout$Alignment;"/>
+		<method name="values()[Landroid/text/Layout$Alignment;"/>
+		<field name="ALIGN_CENTER"/>
+		<field name="ALIGN_LEFT" since="28" removed="29"/>
+		<field name="ALIGN_NORMAL"/>
+		<field name="ALIGN_OPPOSITE"/>
+		<field name="ALIGN_RIGHT" since="28" removed="29"/>
+	</class>
+	<class name="android/text/Layout$Directions" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/text/LoginFilter" since="1" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/InputFilter"/>
+		<method name="isAllowed(C)Z" deprecated="30"/>
+		<method name="onInvalidCharacter(C)V" deprecated="30"/>
+		<method name="onStart()V" deprecated="30"/>
+		<method name="onStop()V" deprecated="30"/>
+	</class>
+	<class name="android/text/LoginFilter$PasswordFilterGMail" since="1" deprecated="30">
+		<extends name="android/text/LoginFilter"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="&lt;init>(Z)V" deprecated="30"/>
+	</class>
+	<class name="android/text/LoginFilter$UsernameFilterGMail" since="1" deprecated="30">
+		<extends name="android/text/LoginFilter"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="&lt;init>(Z)V" deprecated="30"/>
+	</class>
+	<class name="android/text/LoginFilter$UsernameFilterGeneric" since="1" deprecated="30">
+		<extends name="android/text/LoginFilter"/>
+		<method name="&lt;init>()V" deprecated="30"/>
+		<method name="&lt;init>(Z)V" deprecated="30"/>
+	</class>
+	<class name="android/text/NoCopySpan" since="3">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/text/NoCopySpan$Concrete" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/NoCopySpan"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/text/ParcelableSpan" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getSpanTypeId()I"/>
+	</class>
+	<class name="android/text/PrecomputedText" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/Spannable"/>
+		<method name="create(Ljava/lang/CharSequence;Landroid/text/PrecomputedText$Params;)Landroid/text/PrecomputedText;"/>
+		<method name="getBounds(IILandroid/graphics/Rect;)V"/>
+		<method name="getParagraphCount()I"/>
+		<method name="getParagraphEnd(I)I"/>
+		<method name="getParagraphStart(I)I"/>
+		<method name="getParams()Landroid/text/PrecomputedText$Params;"/>
+		<method name="getWidth(II)F"/>
+	</class>
+	<class name="android/text/PrecomputedText$Params" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getBreakStrategy()I"/>
+		<method name="getHyphenationFrequency()I"/>
+		<method name="getTextDirection()Landroid/text/TextDirectionHeuristic;"/>
+		<method name="getTextPaint()Landroid/text/TextPaint;"/>
+	</class>
+	<class name="android/text/PrecomputedText$Params$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/text/PrecomputedText$Params;)V" since="29"/>
+		<method name="&lt;init>(Landroid/text/TextPaint;)V"/>
+		<method name="build()Landroid/text/PrecomputedText$Params;"/>
+		<method name="setBreakStrategy(I)Landroid/text/PrecomputedText$Params$Builder;"/>
+		<method name="setHyphenationFrequency(I)Landroid/text/PrecomputedText$Params$Builder;"/>
+		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/PrecomputedText$Params$Builder;"/>
+	</class>
+	<class name="android/text/Selection" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="extendDown(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="extendLeft(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="extendRight(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="extendSelection(Landroid/text/Spannable;I)V"/>
+		<method name="extendToLeftEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="extendToRightEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="extendUp(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="getSelectionEnd(Ljava/lang/CharSequence;)I"/>
+		<method name="getSelectionStart(Ljava/lang/CharSequence;)I"/>
+		<method name="moveDown(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="moveLeft(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="moveRight(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="moveToLeftEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="moveToRightEdge(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="moveUp(Landroid/text/Spannable;Landroid/text/Layout;)Z"/>
+		<method name="removeSelection(Landroid/text/Spannable;)V"/>
+		<method name="selectAll(Landroid/text/Spannable;)V"/>
+		<method name="setSelection(Landroid/text/Spannable;I)V"/>
+		<method name="setSelection(Landroid/text/Spannable;II)V"/>
+		<field name="SELECTION_END"/>
+		<field name="SELECTION_START"/>
+	</class>
+	<class name="android/text/SpanWatcher" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/NoCopySpan" since="3"/>
+		<method name="onSpanAdded(Landroid/text/Spannable;Ljava/lang/Object;II)V"/>
+		<method name="onSpanChanged(Landroid/text/Spannable;Ljava/lang/Object;IIII)V"/>
+		<method name="onSpanRemoved(Landroid/text/Spannable;Ljava/lang/Object;II)V"/>
+	</class>
+	<class name="android/text/Spannable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/Spanned"/>
+		<method name="removeSpan(Ljava/lang/Object;)V"/>
+		<method name="setSpan(Ljava/lang/Object;III)V"/>
+	</class>
+	<class name="android/text/Spannable$Factory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance()Landroid/text/Spannable$Factory;"/>
+		<method name="newSpannable(Ljava/lang/CharSequence;)Landroid/text/Spannable;"/>
+	</class>
+	<class name="android/text/SpannableString" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/GetChars"/>
+		<implements name="android/text/Spannable"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableString;"/>
+	</class>
+	<class name="android/text/SpannableStringBuilder" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/Editable"/>
+		<implements name="android/text/GetChars"/>
+		<implements name="android/text/Spannable"/>
+		<implements name="java/lang/Appendable"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
+		<method name="append(C)Landroid/text/SpannableStringBuilder;"/>
+		<method name="append(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
+		<method name="append(Ljava/lang/CharSequence;Ljava/lang/Object;I)Landroid/text/SpannableStringBuilder;" since="21"/>
+		<method name="delete(II)Landroid/text/SpannableStringBuilder;"/>
+		<method name="getTextRunCursor(IIIIILandroid/graphics/Paint;)I" since="11" deprecated="15"/>
+		<method name="getTextWatcherDepth()I" since="23"/>
+		<method name="insert(ILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
+		<method name="insert(ILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
+		<method name="replace(IILjava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
+		<method name="replace(IILjava/lang/CharSequence;II)Landroid/text/SpannableStringBuilder;"/>
+		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannableStringBuilder;"/>
+	</class>
+	<class name="android/text/Spanned" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="getSpanEnd(Ljava/lang/Object;)I"/>
+		<method name="getSpanFlags(Ljava/lang/Object;)I"/>
+		<method name="getSpanStart(Ljava/lang/Object;)I"/>
+		<method name="getSpans(IILjava/lang/Class;)[Ljava/lang/Object;"/>
+		<method name="nextSpanTransition(IILjava/lang/Class;)I"/>
+		<field name="SPAN_COMPOSING" since="3"/>
+		<field name="SPAN_EXCLUSIVE_EXCLUSIVE"/>
+		<field name="SPAN_EXCLUSIVE_INCLUSIVE"/>
+		<field name="SPAN_INCLUSIVE_EXCLUSIVE"/>
+		<field name="SPAN_INCLUSIVE_INCLUSIVE"/>
+		<field name="SPAN_INTERMEDIATE" since="3"/>
+		<field name="SPAN_MARK_MARK"/>
+		<field name="SPAN_MARK_POINT"/>
+		<field name="SPAN_PARAGRAPH"/>
+		<field name="SPAN_POINT_MARK"/>
+		<field name="SPAN_POINT_MARK_MASK" since="3"/>
+		<field name="SPAN_POINT_POINT"/>
+		<field name="SPAN_PRIORITY"/>
+		<field name="SPAN_PRIORITY_SHIFT"/>
+		<field name="SPAN_USER"/>
+		<field name="SPAN_USER_SHIFT"/>
+	</class>
+	<class name="android/text/SpannedString" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/GetChars"/>
+		<implements name="android/text/Spanned"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="valueOf(Ljava/lang/CharSequence;)Landroid/text/SpannedString;"/>
+	</class>
+	<class name="android/text/StaticLayout" since="1">
+		<extends name="android/text/Layout"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZLandroid/text/TextUtils$TruncateAt;I)V" deprecated="28"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFZ)V" deprecated="28"/>
+	</class>
+	<class name="android/text/StaticLayout$Builder" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="build()Landroid/text/StaticLayout;"/>
+		<method name="obtain(Ljava/lang/CharSequence;IILandroid/text/TextPaint;I)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setAlignment(Landroid/text/Layout$Alignment;)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setBreakStrategy(I)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setEllipsizedWidth(I)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setHyphenationFrequency(I)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setIncludePad(Z)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setIndents([I[I)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setJustificationMode(I)Landroid/text/StaticLayout$Builder;" since="26"/>
+		<method name="setLineSpacing(FF)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setMaxLines(I)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setTextDirection(Landroid/text/TextDirectionHeuristic;)Landroid/text/StaticLayout$Builder;"/>
+		<method name="setUseLineSpacingFromFallbacks(Z)Landroid/text/StaticLayout$Builder;" since="28"/>
+	</class>
+	<class name="android/text/TextDirectionHeuristic" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="isRtl(Ljava/lang/CharSequence;II)Z"/>
+		<method name="isRtl([CII)Z"/>
+	</class>
+	<class name="android/text/TextDirectionHeuristics" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="ANYRTL_LTR"/>
+		<field name="FIRSTSTRONG_LTR"/>
+		<field name="FIRSTSTRONG_RTL"/>
+		<field name="LOCALE"/>
+		<field name="LTR"/>
+		<field name="RTL"/>
+	</class>
+	<class name="android/text/TextPaint" since="1">
+		<extends name="android/graphics/Paint"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/graphics/Paint;)V"/>
+		<method name="set(Landroid/text/TextPaint;)V"/>
+		<field name="baselineShift"/>
+		<field name="bgColor"/>
+		<field name="density" since="5"/>
+		<field name="drawableState"/>
+		<field name="linkColor"/>
+		<field name="underlineColor" since="29"/>
+		<field name="underlineThickness" since="29"/>
+	</class>
+	<class name="android/text/TextShaper" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="shapeText(Ljava/lang/CharSequence;IILandroid/text/TextDirectionHeuristic;Landroid/text/TextPaint;Landroid/text/TextShaper$GlyphsConsumer;)V"/>
+	</class>
+	<class name="android/text/TextShaper$GlyphsConsumer" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="accept(IILandroid/graphics/text/PositionedGlyphs;Landroid/text/TextPaint;)V"/>
+	</class>
+	<class name="android/text/TextUtils" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="commaEllipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLjava/lang/String;Ljava/lang/String;)Ljava/lang/CharSequence;" deprecated="26"/>
+		<method name="concat([Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="copySpansFrom(Landroid/text/Spanned;IILjava/lang/Class;Landroid/text/Spannable;I)V"/>
+		<method name="dumpSpans(Ljava/lang/CharSequence;Landroid/util/Printer;Ljava/lang/String;)V" since="3"/>
+		<method name="ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;)Ljava/lang/CharSequence;"/>
+		<method name="ellipsize(Ljava/lang/CharSequence;Landroid/text/TextPaint;FLandroid/text/TextUtils$TruncateAt;ZLandroid/text/TextUtils$EllipsizeCallback;)Ljava/lang/CharSequence;"/>
+		<method name="equals(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Z"/>
+		<method name="expandTemplate(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="getCapsMode(Ljava/lang/CharSequence;II)I" since="3"/>
+		<method name="getChars(Ljava/lang/CharSequence;II[CI)V"/>
+		<method name="getLayoutDirectionFromLocale(Ljava/util/Locale;)I" since="17"/>
+		<method name="getOffsetAfter(Ljava/lang/CharSequence;I)I"/>
+		<method name="getOffsetBefore(Ljava/lang/CharSequence;I)I"/>
+		<method name="getReverse(Ljava/lang/CharSequence;II)Ljava/lang/CharSequence;" deprecated="24"/>
+		<method name="getTrimmedLength(Ljava/lang/CharSequence;)I"/>
+		<method name="htmlEncode(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="indexOf(Ljava/lang/CharSequence;C)I"/>
+		<method name="indexOf(Ljava/lang/CharSequence;CI)I"/>
+		<method name="indexOf(Ljava/lang/CharSequence;CII)I"/>
+		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)I"/>
+		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;I)I"/>
+		<method name="indexOf(Ljava/lang/CharSequence;Ljava/lang/CharSequence;II)I"/>
+		<method name="isDigitsOnly(Ljava/lang/CharSequence;)Z"/>
+		<method name="isEmpty(Ljava/lang/CharSequence;)Z"/>
+		<method name="isGraphic(C)Z" deprecated="24"/>
+		<method name="isGraphic(Ljava/lang/CharSequence;)Z"/>
+		<method name="join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;"/>
+		<method name="join(Ljava/lang/CharSequence;[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="lastIndexOf(Ljava/lang/CharSequence;C)I"/>
+		<method name="lastIndexOf(Ljava/lang/CharSequence;CI)I"/>
+		<method name="lastIndexOf(Ljava/lang/CharSequence;CII)I"/>
+		<method name="listEllipsize(Landroid/content/Context;Ljava/util/List;Ljava/lang/String;Landroid/text/TextPaint;FI)Ljava/lang/CharSequence;" since="26"/>
+		<method name="makeSafeForPresentation(Ljava/lang/String;IFI)Ljava/lang/CharSequence;" since="29"/>
+		<method name="regionMatches(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z"/>
+		<method name="replace(Ljava/lang/CharSequence;[Ljava/lang/String;[Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="split(Ljava/lang/String;Ljava/util/regex/Pattern;)[Ljava/lang/String;"/>
+		<method name="stringOrSpannedString(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="substring(Ljava/lang/CharSequence;II)Ljava/lang/String;"/>
+		<method name="writeToParcel(Ljava/lang/CharSequence;Landroid/os/Parcel;I)V"/>
+		<field name="CAP_MODE_CHARACTERS" since="3"/>
+		<field name="CAP_MODE_SENTENCES" since="3"/>
+		<field name="CAP_MODE_WORDS" since="3"/>
+		<field name="CHAR_SEQUENCE_CREATOR"/>
+		<field name="SAFE_STRING_FLAG_FIRST_LINE" since="29"/>
+		<field name="SAFE_STRING_FLAG_SINGLE_LINE" since="29"/>
+		<field name="SAFE_STRING_FLAG_TRIM" since="29"/>
+	</class>
+	<class name="android/text/TextUtils$EllipsizeCallback" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="ellipsized(II)V"/>
+	</class>
+	<class name="android/text/TextUtils$SimpleStringSplitter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/TextUtils$StringSplitter"/>
+		<implements name="java/util/Iterator"/>
+		<method name="&lt;init>(C)V"/>
+		<method name="next()Ljava/lang/String;"/>
+	</class>
+	<class name="android/text/TextUtils$StringSplitter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Iterable"/>
+		<method name="setString(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/text/TextUtils$TruncateAt" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/text/TextUtils$TruncateAt;"/>
+		<method name="values()[Landroid/text/TextUtils$TruncateAt;"/>
+		<field name="END"/>
+		<field name="END_SMALL" since="28" removed="29"/>
+		<field name="MARQUEE" since="2"/>
+		<field name="MIDDLE"/>
+		<field name="START"/>
+	</class>
+	<class name="android/text/TextWatcher" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/NoCopySpan" since="3"/>
+		<method name="afterTextChanged(Landroid/text/Editable;)V"/>
+		<method name="beforeTextChanged(Ljava/lang/CharSequence;III)V"/>
+		<method name="onTextChanged(Ljava/lang/CharSequence;III)V"/>
+	</class>
+	<class name="android/text/format/DateFormat" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(Ljava/lang/CharSequence;J)Ljava/lang/CharSequence;"/>
+		<method name="format(Ljava/lang/CharSequence;Ljava/util/Calendar;)Ljava/lang/CharSequence;"/>
+		<method name="format(Ljava/lang/CharSequence;Ljava/util/Date;)Ljava/lang/CharSequence;"/>
+		<method name="getBestDateTimePattern(Ljava/util/Locale;Ljava/lang/String;)Ljava/lang/String;" since="18"/>
+		<method name="getDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
+		<method name="getDateFormatOrder(Landroid/content/Context;)[C"/>
+		<method name="getLongDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
+		<method name="getMediumDateFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
+		<method name="getTimeFormat(Landroid/content/Context;)Ljava/text/DateFormat;"/>
+		<method name="is24HourFormat(Landroid/content/Context;)Z"/>
+		<field name="AM_PM" deprecated="18" removed="22"/>
+		<field name="CAPITAL_AM_PM" deprecated="18" removed="22"/>
+		<field name="DATE" deprecated="18" removed="22"/>
+		<field name="DAY" deprecated="18" removed="22"/>
+		<field name="HOUR" deprecated="18" removed="22"/>
+		<field name="HOUR_OF_DAY" deprecated="18" removed="22"/>
+		<field name="MINUTE" deprecated="18" removed="22"/>
+		<field name="MONTH" deprecated="18" removed="22"/>
+		<field name="QUOTE" deprecated="18" removed="22"/>
+		<field name="SECONDS" deprecated="18" removed="22"/>
+		<field name="STANDALONE_MONTH" since="17" deprecated="18" removed="22"/>
+		<field name="TIME_ZONE" deprecated="18" removed="22"/>
+		<field name="YEAR" deprecated="18" removed="22"/>
+	</class>
+	<class name="android/text/format/DateUtils" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="formatDateRange(Landroid/content/Context;JJI)Ljava/lang/String;"/>
+		<method name="formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJI)Ljava/util/Formatter;" since="5"/>
+		<method name="formatDateRange(Landroid/content/Context;Ljava/util/Formatter;JJILjava/lang/String;)Ljava/util/Formatter;" since="9"/>
+		<method name="formatDateTime(Landroid/content/Context;JI)Ljava/lang/String;"/>
+		<method name="formatElapsedTime(J)Ljava/lang/String;"/>
+		<method name="formatElapsedTime(Ljava/lang/StringBuilder;J)Ljava/lang/String;"/>
+		<method name="formatSameDayTime(JJII)Ljava/lang/CharSequence;"/>
+		<method name="getAMPMString(I)Ljava/lang/String;" deprecated="17"/>
+		<method name="getDayOfWeekString(II)Ljava/lang/String;" deprecated="17"/>
+		<method name="getMonthString(II)Ljava/lang/String;" deprecated="17"/>
+		<method name="getRelativeDateTimeString(Landroid/content/Context;JJJI)Ljava/lang/CharSequence;"/>
+		<method name="getRelativeTimeSpanString(J)Ljava/lang/CharSequence;"/>
+		<method name="getRelativeTimeSpanString(JJJ)Ljava/lang/CharSequence;"/>
+		<method name="getRelativeTimeSpanString(JJJI)Ljava/lang/CharSequence;"/>
+		<method name="getRelativeTimeSpanString(Landroid/content/Context;J)Ljava/lang/CharSequence;"/>
+		<method name="getRelativeTimeSpanString(Landroid/content/Context;JZ)Ljava/lang/CharSequence;"/>
+		<method name="isToday(J)Z"/>
+		<field name="ABBREV_MONTH_FORMAT" deprecated="17"/>
+		<field name="ABBREV_WEEKDAY_FORMAT"/>
+		<field name="DAY_IN_MILLIS"/>
+		<field name="FORMAT_12HOUR" deprecated="17"/>
+		<field name="FORMAT_24HOUR" deprecated="17"/>
+		<field name="FORMAT_ABBREV_ALL"/>
+		<field name="FORMAT_ABBREV_MONTH"/>
+		<field name="FORMAT_ABBREV_RELATIVE"/>
+		<field name="FORMAT_ABBREV_TIME"/>
+		<field name="FORMAT_ABBREV_WEEKDAY"/>
+		<field name="FORMAT_CAP_AMPM" deprecated="17"/>
+		<field name="FORMAT_CAP_MIDNIGHT" deprecated="17"/>
+		<field name="FORMAT_CAP_NOON" deprecated="17"/>
+		<field name="FORMAT_CAP_NOON_MIDNIGHT" deprecated="17"/>
+		<field name="FORMAT_NO_MIDNIGHT"/>
+		<field name="FORMAT_NO_MONTH_DAY"/>
+		<field name="FORMAT_NO_NOON"/>
+		<field name="FORMAT_NO_NOON_MIDNIGHT" deprecated="17"/>
+		<field name="FORMAT_NO_YEAR"/>
+		<field name="FORMAT_NUMERIC_DATE"/>
+		<field name="FORMAT_SHOW_DATE"/>
+		<field name="FORMAT_SHOW_TIME"/>
+		<field name="FORMAT_SHOW_WEEKDAY"/>
+		<field name="FORMAT_SHOW_YEAR"/>
+		<field name="FORMAT_UTC" deprecated="15"/>
+		<field name="HOUR_IN_MILLIS"/>
+		<field name="HOUR_MINUTE_24" deprecated="17"/>
+		<field name="LENGTH_LONG" deprecated="17"/>
+		<field name="LENGTH_MEDIUM" deprecated="17"/>
+		<field name="LENGTH_SHORT" deprecated="17"/>
+		<field name="LENGTH_SHORTER" deprecated="17"/>
+		<field name="LENGTH_SHORTEST" deprecated="17"/>
+		<field name="MINUTE_IN_MILLIS"/>
+		<field name="MONTH_DAY_FORMAT"/>
+		<field name="MONTH_FORMAT"/>
+		<field name="NUMERIC_MONTH_FORMAT"/>
+		<field name="SECOND_IN_MILLIS"/>
+		<field name="WEEKDAY_FORMAT"/>
+		<field name="WEEK_IN_MILLIS"/>
+		<field name="YEAR_FORMAT"/>
+		<field name="YEAR_FORMAT_TWO_DIGITS"/>
+		<field name="YEAR_IN_MILLIS" deprecated="30"/>
+		<field name="sameMonthTable" deprecated="17"/>
+		<field name="sameYearTable" deprecated="17"/>
+	</class>
+	<class name="android/text/format/Formatter" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="formatFileSize(Landroid/content/Context;J)Ljava/lang/String;"/>
+		<method name="formatIpAddress(I)Ljava/lang/String;" deprecated="15"/>
+		<method name="formatShortFileSize(Landroid/content/Context;J)Ljava/lang/String;" since="5"/>
+	</class>
+	<class name="android/text/format/Time" since="3" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/text/format/Time;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="after(Landroid/text/format/Time;)Z" deprecated="29"/>
+		<method name="before(Landroid/text/format/Time;)Z" deprecated="29"/>
+		<method name="clear(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="compare(Landroid/text/format/Time;Landroid/text/format/Time;)I" deprecated="29"/>
+		<method name="format(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="format2445()Ljava/lang/String;" deprecated="29"/>
+		<method name="format3339(Z)Ljava/lang/String;" deprecated="29"/>
+		<method name="getActualMaximum(I)I" deprecated="29"/>
+		<method name="getCurrentTimezone()Ljava/lang/String;" deprecated="29"/>
+		<method name="getJulianDay(JJ)I" deprecated="29"/>
+		<method name="getJulianMondayFromWeeksSinceEpoch(I)I" since="11" deprecated="29"/>
+		<method name="getWeekNumber()I" deprecated="29"/>
+		<method name="getWeeksSinceEpochFromJulianDay(II)I" since="11" deprecated="29"/>
+		<method name="isEpoch(Landroid/text/format/Time;)Z" deprecated="29"/>
+		<method name="normalize(Z)J" deprecated="29"/>
+		<method name="parse(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="parse3339(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="set(III)V" deprecated="29"/>
+		<method name="set(IIIIII)V" deprecated="29"/>
+		<method name="set(J)V" deprecated="29"/>
+		<method name="set(Landroid/text/format/Time;)V" deprecated="29"/>
+		<method name="setJulianDay(I)J" deprecated="29"/>
+		<method name="setToNow()V" deprecated="29"/>
+		<method name="switchTimezone(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="toMillis(Z)J" deprecated="29"/>
+		<field name="EPOCH_JULIAN_DAY" deprecated="29"/>
+		<field name="FRIDAY" deprecated="29"/>
+		<field name="HOUR" deprecated="29"/>
+		<field name="MINUTE" deprecated="29"/>
+		<field name="MONDAY" deprecated="29"/>
+		<field name="MONDAY_BEFORE_JULIAN_EPOCH" since="11" deprecated="29"/>
+		<field name="MONTH" deprecated="29"/>
+		<field name="MONTH_DAY" deprecated="29"/>
+		<field name="SATURDAY" deprecated="29"/>
+		<field name="SECOND" deprecated="29"/>
+		<field name="SUNDAY" deprecated="29"/>
+		<field name="THURSDAY" deprecated="29"/>
+		<field name="TIMEZONE_UTC" deprecated="29"/>
+		<field name="TUESDAY" deprecated="29"/>
+		<field name="WEDNESDAY" deprecated="29"/>
+		<field name="WEEK_DAY" deprecated="29"/>
+		<field name="WEEK_NUM" deprecated="29"/>
+		<field name="YEAR" deprecated="29"/>
+		<field name="YEAR_DAY" deprecated="29"/>
+		<field name="allDay" deprecated="29"/>
+		<field name="gmtoff" deprecated="29"/>
+		<field name="hour" deprecated="29"/>
+		<field name="isDst" deprecated="29"/>
+		<field name="minute" deprecated="29"/>
+		<field name="month" deprecated="29"/>
+		<field name="monthDay" deprecated="29"/>
+		<field name="second" deprecated="29"/>
+		<field name="timezone" deprecated="29"/>
+		<field name="weekDay" deprecated="29"/>
+		<field name="year" deprecated="29"/>
+		<field name="yearDay" deprecated="29"/>
+	</class>
+	<class name="android/text/method/ArrowKeyMovementMethod" since="1">
+		<extends name="android/text/method/BaseMovementMethod" since="11"/>
+		<extends name="java/lang/Object" removed="11"/>
+		<implements name="android/text/method/MovementMethod"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance()Landroid/text/method/MovementMethod;"/>
+	</class>
+	<class name="android/text/method/BaseKeyListener" since="1">
+		<extends name="android/text/method/MetaKeyKeyListener"/>
+		<implements name="android/text/method/KeyListener"/>
+		<method name="&lt;init>()V"/>
+		<method name="backspace(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
+		<method name="forwardDelete(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z" since="11"/>
+	</class>
+	<class name="android/text/method/BaseMovementMethod" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/method/MovementMethod"/>
+		<method name="&lt;init>()V"/>
+		<method name="bottom(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="down(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="end(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="getMovementMetaState(Landroid/text/Spannable;Landroid/view/KeyEvent;)I"/>
+		<method name="handleMovementKey(Landroid/widget/TextView;Landroid/text/Spannable;IILandroid/view/KeyEvent;)Z"/>
+		<method name="home(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="left(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="lineEnd(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="lineStart(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="pageDown(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="pageUp(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="right(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="top(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="up(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+	</class>
+	<class name="android/text/method/CharacterPickerDialog" since="1">
+		<extends name="android/app/Dialog"/>
+		<implements name="android/view/View$OnClickListener"/>
+		<implements name="android/widget/AdapterView$OnItemClickListener"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;Landroid/text/Editable;Ljava/lang/String;Z)V"/>
+	</class>
+	<class name="android/text/method/DateKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener"/>
+		<method name="&lt;init>()V" deprecated="26"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
+		<method name="getInstance()Landroid/text/method/DateKeyListener;" deprecated="26"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DateKeyListener;" since="26"/>
+		<field name="CHARACTERS" deprecated="26"/>
+	</class>
+	<class name="android/text/method/DateTimeKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener"/>
+		<method name="&lt;init>()V" deprecated="26"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
+		<method name="getInstance()Landroid/text/method/DateTimeKeyListener;" deprecated="26"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DateTimeKeyListener;" since="26"/>
+		<field name="CHARACTERS" deprecated="26"/>
+	</class>
+	<class name="android/text/method/DialerKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance()Landroid/text/method/DialerKeyListener;"/>
+		<field name="CHARACTERS"/>
+	</class>
+	<class name="android/text/method/DigitsKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener"/>
+		<method name="&lt;init>()V" deprecated="26"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
+		<method name="&lt;init>(Ljava/util/Locale;ZZ)V" since="26"/>
+		<method name="&lt;init>(ZZ)V" deprecated="26"/>
+		<method name="getInstance()Landroid/text/method/DigitsKeyListener;" deprecated="26"/>
+		<method name="getInstance(Ljava/lang/String;)Landroid/text/method/DigitsKeyListener;"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/DigitsKeyListener;" since="26"/>
+		<method name="getInstance(Ljava/util/Locale;ZZ)Landroid/text/method/DigitsKeyListener;" since="26"/>
+		<method name="getInstance(ZZ)Landroid/text/method/DigitsKeyListener;" deprecated="26"/>
+	</class>
+	<class name="android/text/method/HideReturnsTransformationMethod" since="1">
+		<extends name="android/text/method/ReplacementTransformationMethod"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance()Landroid/text/method/HideReturnsTransformationMethod;"/>
+	</class>
+	<class name="android/text/method/KeyListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="clearMetaKeyState(Landroid/view/View;Landroid/text/Editable;I)V" since="3"/>
+		<method name="getInputType()I" since="3"/>
+		<method name="onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
+		<method name="onKeyOther(Landroid/view/View;Landroid/text/Editable;Landroid/view/KeyEvent;)Z" since="3"/>
+		<method name="onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
+	</class>
+	<class name="android/text/method/LinkMovementMethod" since="1">
+		<extends name="android/text/method/ScrollingMovementMethod"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/text/method/MetaKeyKeyListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="adjustMetaAfterKeypress(J)J" since="3"/>
+		<method name="adjustMetaAfterKeypress(Landroid/text/Spannable;)V"/>
+		<method name="clearMetaKeyState(JI)J" since="3"/>
+		<method name="clearMetaKeyState(Landroid/text/Editable;I)V" since="3"/>
+		<method name="clearMetaKeyState(Landroid/view/View;Landroid/text/Editable;I)V" since="3"/>
+		<method name="getMetaState(J)I" since="3"/>
+		<method name="getMetaState(JI)I" since="3"/>
+		<method name="getMetaState(Ljava/lang/CharSequence;)I"/>
+		<method name="getMetaState(Ljava/lang/CharSequence;I)I"/>
+		<method name="getMetaState(Ljava/lang/CharSequence;ILandroid/view/KeyEvent;)I" since="19"/>
+		<method name="getMetaState(Ljava/lang/CharSequence;Landroid/view/KeyEvent;)I" since="19"/>
+		<method name="handleKeyDown(JILandroid/view/KeyEvent;)J" since="3"/>
+		<method name="handleKeyUp(JILandroid/view/KeyEvent;)J" since="3"/>
+		<method name="isMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z"/>
+		<method name="isSelectingMetaTracker(Ljava/lang/CharSequence;Ljava/lang/Object;)Z" since="3"/>
+		<method name="onKeyDown(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
+		<method name="onKeyUp(Landroid/view/View;Landroid/text/Editable;ILandroid/view/KeyEvent;)Z"/>
+		<method name="resetLockedMeta(J)J" since="3"/>
+		<method name="resetLockedMeta(Landroid/text/Spannable;)V"/>
+		<method name="resetMetaState(Landroid/text/Spannable;)V"/>
+		<field name="META_ALT_LOCKED"/>
+		<field name="META_ALT_ON"/>
+		<field name="META_CAP_LOCKED"/>
+		<field name="META_SHIFT_ON"/>
+		<field name="META_SYM_LOCKED"/>
+		<field name="META_SYM_ON"/>
+	</class>
+	<class name="android/text/method/MovementMethod" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="canSelectArbitrarily()Z"/>
+		<method name="initialize(Landroid/widget/TextView;Landroid/text/Spannable;)V"/>
+		<method name="onGenericMotionEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z" since="12"/>
+		<method name="onKeyDown(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z"/>
+		<method name="onKeyOther(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/KeyEvent;)Z" since="3"/>
+		<method name="onKeyUp(Landroid/widget/TextView;Landroid/text/Spannable;ILandroid/view/KeyEvent;)Z"/>
+		<method name="onTakeFocus(Landroid/widget/TextView;Landroid/text/Spannable;I)V"/>
+		<method name="onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z"/>
+		<method name="onTrackballEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/text/method/MultiTapKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener"/>
+		<implements name="android/text/SpanWatcher"/>
+		<method name="&lt;init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V"/>
+		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/MultiTapKeyListener;"/>
+	</class>
+	<class name="android/text/method/NumberKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener"/>
+		<implements name="android/text/InputFilter"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAcceptedChars()[C"/>
+		<method name="lookup(Landroid/view/KeyEvent;Landroid/text/Spannable;)I"/>
+		<method name="ok([CC)Z"/>
+	</class>
+	<class name="android/text/method/PasswordTransformationMethod" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/TextWatcher"/>
+		<implements name="android/text/method/TransformationMethod"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance()Landroid/text/method/PasswordTransformationMethod;"/>
+	</class>
+	<class name="android/text/method/QwertyKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener"/>
+		<method name="&lt;init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V"/>
+		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/QwertyKeyListener;"/>
+		<method name="getInstanceForFullKeyboard()Landroid/text/method/QwertyKeyListener;" since="11"/>
+		<method name="markAsReplaced(Landroid/text/Spannable;IILjava/lang/String;)V"/>
+	</class>
+	<class name="android/text/method/ReplacementTransformationMethod" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/method/TransformationMethod"/>
+		<method name="&lt;init>()V"/>
+		<method name="getOriginal()[C"/>
+		<method name="getReplacement()[C"/>
+	</class>
+	<class name="android/text/method/ScrollingMovementMethod" since="1">
+		<extends name="android/text/method/BaseMovementMethod" since="11"/>
+		<extends name="java/lang/Object" removed="11"/>
+		<implements name="android/text/method/MovementMethod"/>
+		<method name="&lt;init>()V"/>
+		<method name="down(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="getInstance()Landroid/text/method/MovementMethod;"/>
+		<method name="left(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="right(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+		<method name="up(Landroid/widget/TextView;Landroid/text/Spannable;)Z"/>
+	</class>
+	<class name="android/text/method/SingleLineTransformationMethod" since="1">
+		<extends name="android/text/method/ReplacementTransformationMethod"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance()Landroid/text/method/SingleLineTransformationMethod;"/>
+	</class>
+	<class name="android/text/method/TextKeyListener" since="1">
+		<extends name="android/text/method/BaseKeyListener"/>
+		<implements name="android/text/SpanWatcher"/>
+		<method name="&lt;init>(Landroid/text/method/TextKeyListener$Capitalize;Z)V"/>
+		<method name="clear(Landroid/text/Editable;)V"/>
+		<method name="getInstance()Landroid/text/method/TextKeyListener;"/>
+		<method name="getInstance(ZLandroid/text/method/TextKeyListener$Capitalize;)Landroid/text/method/TextKeyListener;"/>
+		<method name="release()V"/>
+		<method name="shouldCap(Landroid/text/method/TextKeyListener$Capitalize;Ljava/lang/CharSequence;I)Z"/>
+	</class>
+	<class name="android/text/method/TextKeyListener$Capitalize" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/text/method/TextKeyListener$Capitalize;"/>
+		<method name="values()[Landroid/text/method/TextKeyListener$Capitalize;"/>
+		<field name="CHARACTERS"/>
+		<field name="NONE"/>
+		<field name="SENTENCES"/>
+		<field name="WORDS"/>
+	</class>
+	<class name="android/text/method/TimeKeyListener" since="1">
+		<extends name="android/text/method/NumberKeyListener"/>
+		<method name="&lt;init>()V" deprecated="26"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V" since="26"/>
+		<method name="getInstance()Landroid/text/method/TimeKeyListener;" deprecated="26"/>
+		<method name="getInstance(Ljava/util/Locale;)Landroid/text/method/TimeKeyListener;" since="26"/>
+		<field name="CHARACTERS" deprecated="26"/>
+	</class>
+	<class name="android/text/method/Touch" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getInitialScrollX(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3"/>
+		<method name="getInitialScrollY(Landroid/widget/TextView;Landroid/text/Spannable;)I" since="3"/>
+		<method name="onTouchEvent(Landroid/widget/TextView;Landroid/text/Spannable;Landroid/view/MotionEvent;)Z"/>
+		<method name="scrollTo(Landroid/widget/TextView;Landroid/text/Layout;II)V"/>
+	</class>
+	<class name="android/text/method/TransformationMethod" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getTransformation(Ljava/lang/CharSequence;Landroid/view/View;)Ljava/lang/CharSequence;"/>
+		<method name="onFocusChanged(Landroid/view/View;Ljava/lang/CharSequence;ZILandroid/graphics/Rect;)V"/>
+	</class>
+	<class name="android/text/style/AbsoluteSizeSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IZ)V" since="5"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getDip()Z" since="5"/>
+		<method name="getSize()I"/>
+	</class>
+	<class name="android/text/style/AlignmentSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/ParagraphStyle"/>
+		<method name="getAlignment()Landroid/text/Layout$Alignment;"/>
+	</class>
+	<class name="android/text/style/AlignmentSpan$Standard" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/AlignmentSpan"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="&lt;init>(Landroid/text/Layout$Alignment;)V"/>
+	</class>
+	<class name="android/text/style/BackgroundColorSpan" since="1">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getBackgroundColor()I"/>
+	</class>
+	<class name="android/text/style/BulletSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/LeadingMarginSpan"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(III)V" since="28"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getBulletRadius()I" since="28"/>
+		<method name="getColor()I" since="28"/>
+		<method name="getGapWidth()I" since="28"/>
+		<field name="STANDARD_GAP_WIDTH"/>
+	</class>
+	<class name="android/text/style/CharacterStyle" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getUnderlying()Landroid/text/style/CharacterStyle;"/>
+		<method name="updateDrawState(Landroid/text/TextPaint;)V"/>
+		<method name="wrap(Landroid/text/style/CharacterStyle;)Landroid/text/style/CharacterStyle;"/>
+	</class>
+	<class name="android/text/style/ClickableSpan" since="1">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="onClick(Landroid/view/View;)V"/>
+	</class>
+	<class name="android/text/style/DrawableMarginSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/LeadingMarginSpan"/>
+		<implements name="android/text/style/LineHeightSpan"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;I)V"/>
+	</class>
+	<class name="android/text/style/DynamicDrawableSpan" since="1">
+		<extends name="android/text/style/ReplacementSpan"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V" since="3"/>
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getVerticalAlignment()I" since="3"/>
+		<field name="ALIGN_BASELINE" since="3"/>
+		<field name="ALIGN_BOTTOM" since="3"/>
+		<field name="ALIGN_CENTER" since="29"/>
+		<field name="mVerticalAlignment" since="3"/>
+	</class>
+	<class name="android/text/style/EasyEditSpan" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/app/PendingIntent;)V" since="18"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="18"/>
+		<field name="EXTRA_TEXT_CHANGED_TYPE" since="18"/>
+		<field name="TEXT_DELETED" since="18"/>
+		<field name="TEXT_MODIFIED" since="18"/>
+	</class>
+	<class name="android/text/style/ForegroundColorSpan" since="1">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getForegroundColor()I"/>
+	</class>
+	<class name="android/text/style/IconMarginSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/LeadingMarginSpan"/>
+		<implements name="android/text/style/LineHeightSpan"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;)V"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;I)V"/>
+	</class>
+	<class name="android/text/style/ImageSpan" since="1">
+		<extends name="android/text/style/DynamicDrawableSpan"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;II)V" since="3"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/graphics/Bitmap;)V" since="4"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/graphics/Bitmap;I)V" since="4"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/net/Uri;I)V" since="3"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;)V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/graphics/Bitmap;I)V" since="3" deprecated="15"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;I)V" since="3"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;Ljava/lang/String;I)V" since="3"/>
+		<method name="getSource()Ljava/lang/String;"/>
+	</class>
+	<class name="android/text/style/LeadingMarginSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/ParagraphStyle"/>
+		<method name="drawLeadingMargin(Landroid/graphics/Canvas;Landroid/graphics/Paint;IIIIILjava/lang/CharSequence;IIZLandroid/text/Layout;)V"/>
+		<method name="getLeadingMargin(Z)I"/>
+	</class>
+	<class name="android/text/style/LeadingMarginSpan$LeadingMarginSpan2" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/LeadingMarginSpan"/>
+		<implements name="android/text/style/WrapTogetherSpan"/>
+		<method name="getLeadingMarginLineCount()I"/>
+	</class>
+	<class name="android/text/style/LeadingMarginSpan$Standard" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/LeadingMarginSpan"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+	</class>
+	<class name="android/text/style/LineBackgroundSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/ParagraphStyle"/>
+		<method name="drawBackground(Landroid/graphics/Canvas;Landroid/graphics/Paint;IIIIILjava/lang/CharSequence;III)V"/>
+	</class>
+	<class name="android/text/style/LineBackgroundSpan$Standard" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan"/>
+		<implements name="android/text/style/LineBackgroundSpan"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getColor()I"/>
+	</class>
+	<class name="android/text/style/LineHeightSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/ParagraphStyle"/>
+		<implements name="android/text/style/WrapTogetherSpan"/>
+		<method name="chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V"/>
+	</class>
+	<class name="android/text/style/LineHeightSpan$Standard" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan"/>
+		<implements name="android/text/style/LineHeightSpan"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getHeight()I"/>
+	</class>
+	<class name="android/text/style/LineHeightSpan$WithDensity" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/LineHeightSpan"/>
+		<method name="chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;Landroid/text/TextPaint;)V"/>
+	</class>
+	<class name="android/text/style/LocaleSpan" since="17">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan"/>
+		<method name="&lt;init>(Landroid/os/LocaleList;)V" since="24"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getLocales()Landroid/os/LocaleList;" since="24"/>
+	</class>
+	<class name="android/text/style/MaskFilterSpan" since="1">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+		<method name="&lt;init>(Landroid/graphics/MaskFilter;)V"/>
+		<method name="getMaskFilter()Landroid/graphics/MaskFilter;"/>
+	</class>
+	<class name="android/text/style/MetricAffectingSpan" since="1">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/style/UpdateLayout"/>
+		<method name="&lt;init>()V"/>
+		<method name="getUnderlying()Landroid/text/style/MetricAffectingSpan;"/>
+		<method name="updateMeasureState(Landroid/text/TextPaint;)V"/>
+	</class>
+	<class name="android/text/style/ParagraphStyle" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/text/style/QuoteSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/LeadingMarginSpan"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(III)V" since="28"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getColor()I"/>
+		<method name="getGapWidth()I" since="28"/>
+		<method name="getStripeWidth()I" since="28"/>
+		<field name="STANDARD_COLOR" since="28"/>
+		<field name="STANDARD_GAP_WIDTH_PX" since="28"/>
+		<field name="STANDARD_STRIPE_WIDTH_PX" since="28"/>
+	</class>
+	<class name="android/text/style/RasterizerSpan" since="1" removed="26">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+		<method name="&lt;init>(Landroid/graphics/Rasterizer;)V"/>
+		<method name="getRasterizer()Landroid/graphics/Rasterizer;"/>
+	</class>
+	<class name="android/text/style/RelativeSizeSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getSizeChange()F"/>
+	</class>
+	<class name="android/text/style/ReplacementSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<method name="&lt;init>()V"/>
+		<method name="draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" since="30"/>
+	</class>
+	<class name="android/text/style/ScaleXSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getScaleX()F"/>
+	</class>
+	<class name="android/text/style/StrikethroughSpan" since="1">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+	</class>
+	<class name="android/text/style/StyleSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="getStyle()I"/>
+	</class>
+	<class name="android/text/style/SubscriptSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+	</class>
+	<class name="android/text/style/SuggestionSpan" since="14">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/ParcelableSpan"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/util/Locale;[Ljava/lang/String;ILjava/lang/Class;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;[Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;[Ljava/lang/String;I)V"/>
+		<method name="getFlags()I"/>
+		<method name="getLocale()Ljava/lang/String;" deprecated="24"/>
+		<method name="getLocaleObject()Ljava/util/Locale;" since="24"/>
+		<method name="getSuggestions()[Ljava/lang/String;"/>
+		<method name="getUnderlineColor()I" since="29"/>
+		<method name="setFlags(I)V"/>
+		<field name="ACTION_SUGGESTION_PICKED" deprecated="29"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_AUTO_CORRECTION" since="15"/>
+		<field name="FLAG_EASY_CORRECT"/>
+		<field name="FLAG_GRAMMAR_ERROR" since="31"/>
+		<field name="FLAG_MISSPELLED"/>
+		<field name="SUGGESTIONS_MAX_SIZE"/>
+		<field name="SUGGESTION_SPAN_PICKED_AFTER" deprecated="29"/>
+		<field name="SUGGESTION_SPAN_PICKED_BEFORE" deprecated="29"/>
+		<field name="SUGGESTION_SPAN_PICKED_HASHCODE" deprecated="29"/>
+	</class>
+	<class name="android/text/style/SuperscriptSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+	</class>
+	<class name="android/text/style/TabStopSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/ParagraphStyle"/>
+		<method name="getTabStop()I"/>
+	</class>
+	<class name="android/text/style/TabStopSpan$Standard" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/TabStopSpan"/>
+		<method name="&lt;init>(I)V"/>
+	</class>
+	<class name="android/text/style/TextAppearanceSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;II)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="&lt;init>(Ljava/lang/String;IILandroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V"/>
+		<method name="getFamily()Ljava/lang/String;"/>
+		<method name="getFontFeatureSettings()Ljava/lang/String;" since="29"/>
+		<method name="getFontVariationSettings()Ljava/lang/String;" since="29"/>
+		<method name="getLinkTextColor()Landroid/content/res/ColorStateList;"/>
+		<method name="getShadowColor()I" since="29"/>
+		<method name="getShadowDx()F" since="29"/>
+		<method name="getShadowDy()F" since="29"/>
+		<method name="getShadowRadius()F" since="29"/>
+		<method name="getTextColor()Landroid/content/res/ColorStateList;"/>
+		<method name="getTextFontWeight()I" since="29"/>
+		<method name="getTextLocales()Landroid/os/LocaleList;" since="29"/>
+		<method name="getTextSize()I"/>
+		<method name="getTextStyle()I"/>
+		<method name="getTypeface()Landroid/graphics/Typeface;" since="29"/>
+		<method name="isElegantTextHeight()Z" since="29"/>
+	</class>
+	<class name="android/text/style/TtsSpan" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/ParcelableSpan"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/os/PersistableBundle;)V"/>
+		<method name="getArgs()Landroid/os/PersistableBundle;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<field name="ANIMACY_ANIMATE"/>
+		<field name="ANIMACY_INANIMATE"/>
+		<field name="ARG_ANIMACY"/>
+		<field name="ARG_CASE"/>
+		<field name="ARG_COUNTRY_CODE"/>
+		<field name="ARG_CURRENCY"/>
+		<field name="ARG_DAY"/>
+		<field name="ARG_DENOMINATOR"/>
+		<field name="ARG_DIGITS"/>
+		<field name="ARG_DOMAIN"/>
+		<field name="ARG_EXTENSION"/>
+		<field name="ARG_FRACTIONAL_PART"/>
+		<field name="ARG_FRAGMENT_ID"/>
+		<field name="ARG_GENDER"/>
+		<field name="ARG_HOURS"/>
+		<field name="ARG_INTEGER_PART"/>
+		<field name="ARG_MINUTES"/>
+		<field name="ARG_MONTH"/>
+		<field name="ARG_MULTIPLICITY"/>
+		<field name="ARG_NUMBER"/>
+		<field name="ARG_NUMBER_PARTS"/>
+		<field name="ARG_NUMERATOR"/>
+		<field name="ARG_PASSWORD"/>
+		<field name="ARG_PATH"/>
+		<field name="ARG_PORT"/>
+		<field name="ARG_PROTOCOL"/>
+		<field name="ARG_QUANTITY"/>
+		<field name="ARG_QUERY_STRING"/>
+		<field name="ARG_TEXT"/>
+		<field name="ARG_UNIT"/>
+		<field name="ARG_USERNAME"/>
+		<field name="ARG_VERBATIM"/>
+		<field name="ARG_WEEKDAY"/>
+		<field name="ARG_YEAR"/>
+		<field name="CASE_ABLATIVE"/>
+		<field name="CASE_ACCUSATIVE"/>
+		<field name="CASE_DATIVE"/>
+		<field name="CASE_GENITIVE"/>
+		<field name="CASE_INSTRUMENTAL"/>
+		<field name="CASE_LOCATIVE"/>
+		<field name="CASE_NOMINATIVE"/>
+		<field name="CASE_VOCATIVE"/>
+		<field name="GENDER_FEMALE"/>
+		<field name="GENDER_MALE"/>
+		<field name="GENDER_NEUTRAL"/>
+		<field name="MONTH_APRIL"/>
+		<field name="MONTH_AUGUST"/>
+		<field name="MONTH_DECEMBER"/>
+		<field name="MONTH_FEBRUARY"/>
+		<field name="MONTH_JANUARY"/>
+		<field name="MONTH_JULY"/>
+		<field name="MONTH_JUNE"/>
+		<field name="MONTH_MARCH"/>
+		<field name="MONTH_MAY"/>
+		<field name="MONTH_NOVEMBER"/>
+		<field name="MONTH_OCTOBER"/>
+		<field name="MONTH_SEPTEMBER"/>
+		<field name="MULTIPLICITY_DUAL"/>
+		<field name="MULTIPLICITY_PLURAL"/>
+		<field name="MULTIPLICITY_SINGLE"/>
+		<field name="TYPE_CARDINAL"/>
+		<field name="TYPE_DATE"/>
+		<field name="TYPE_DECIMAL"/>
+		<field name="TYPE_DIGITS"/>
+		<field name="TYPE_ELECTRONIC"/>
+		<field name="TYPE_FRACTION"/>
+		<field name="TYPE_MEASURE"/>
+		<field name="TYPE_MONEY"/>
+		<field name="TYPE_ORDINAL"/>
+		<field name="TYPE_TELEPHONE"/>
+		<field name="TYPE_TEXT"/>
+		<field name="TYPE_TIME"/>
+		<field name="TYPE_VERBATIM"/>
+		<field name="WEEKDAY_FRIDAY"/>
+		<field name="WEEKDAY_MONDAY"/>
+		<field name="WEEKDAY_SATURDAY"/>
+		<field name="WEEKDAY_SUNDAY"/>
+		<field name="WEEKDAY_THURSDAY"/>
+		<field name="WEEKDAY_TUESDAY"/>
+		<field name="WEEKDAY_WEDNESDAY"/>
+	</class>
+	<class name="android/text/style/TtsSpan$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/text/style/TtsSpan;"/>
+		<method name="setIntArgument(Ljava/lang/String;I)Landroid/text/style/TtsSpan$Builder;"/>
+		<method name="setLongArgument(Ljava/lang/String;J)Landroid/text/style/TtsSpan$Builder;"/>
+		<method name="setStringArgument(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$Builder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$CardinalBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="setNumber(J)Landroid/text/style/TtsSpan$CardinalBuilder;"/>
+		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$CardinalBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$DateBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)V"/>
+		<method name="setDay(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
+		<method name="setMonth(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
+		<method name="setWeekday(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
+		<method name="setYear(I)Landroid/text/style/TtsSpan$DateBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$DecimalBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(DII)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setArgumentsFromDouble(DII)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
+		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$DecimalBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$DigitsBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="setDigits(Ljava/lang/String;)Landroid/text/style/TtsSpan$DigitsBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$ElectronicBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="setDomain(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setEmailArguments(Ljava/lang/String;Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setFragmentId(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setPassword(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setPath(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setPort(I)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setProtocol(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setQueryString(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+		<method name="setUsername(Ljava/lang/String;)Landroid/text/style/TtsSpan$ElectronicBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$FractionBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(JJJ)V"/>
+		<method name="setDenominator(J)Landroid/text/style/TtsSpan$FractionBuilder;"/>
+		<method name="setDenominator(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;"/>
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$FractionBuilder;"/>
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;"/>
+		<method name="setNumerator(J)Landroid/text/style/TtsSpan$FractionBuilder;"/>
+		<method name="setNumerator(Ljava/lang/String;)Landroid/text/style/TtsSpan$FractionBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$MeasureBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="setDenominator(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setDenominator(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setNumber(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setNumerator(J)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setNumerator(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+		<method name="setUnit(Ljava/lang/String;)Landroid/text/style/TtsSpan$MeasureBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$MoneyBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="setCurrency(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
+		<method name="setFractionalPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
+		<method name="setIntegerPart(J)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
+		<method name="setIntegerPart(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
+		<method name="setQuantity(Ljava/lang/String;)Landroid/text/style/TtsSpan$MoneyBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$OrdinalBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="setNumber(J)Landroid/text/style/TtsSpan$OrdinalBuilder;"/>
+		<method name="setNumber(Ljava/lang/String;)Landroid/text/style/TtsSpan$OrdinalBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$SemioticClassBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$Builder"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="setAnimacy(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
+		<method name="setCase(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
+		<method name="setGender(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
+		<method name="setMultiplicity(Ljava/lang/String;)Landroid/text/style/TtsSpan$SemioticClassBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$TelephoneBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="setCountryCode(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;"/>
+		<method name="setExtension(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;"/>
+		<method name="setNumberParts(Ljava/lang/String;)Landroid/text/style/TtsSpan$TelephoneBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$TextBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="setText(Ljava/lang/String;)Landroid/text/style/TtsSpan$TextBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$TimeBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="setHours(I)Landroid/text/style/TtsSpan$TimeBuilder;"/>
+		<method name="setMinutes(I)Landroid/text/style/TtsSpan$TimeBuilder;"/>
+	</class>
+	<class name="android/text/style/TtsSpan$VerbatimBuilder" since="21">
+		<extends name="android/text/style/TtsSpan$SemioticClassBuilder"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="setVerbatim(Ljava/lang/String;)Landroid/text/style/TtsSpan$VerbatimBuilder;"/>
+	</class>
+	<class name="android/text/style/TypefaceSpan" since="1">
+		<extends name="android/text/style/MetricAffectingSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(Landroid/graphics/Typeface;)V" since="28"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getFamily()Ljava/lang/String;"/>
+		<method name="getTypeface()Landroid/graphics/Typeface;" since="28"/>
+	</class>
+	<class name="android/text/style/URLSpan" since="1">
+		<extends name="android/text/style/ClickableSpan"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getURL()Ljava/lang/String;"/>
+	</class>
+	<class name="android/text/style/UnderlineSpan" since="1">
+		<extends name="android/text/style/CharacterStyle"/>
+		<implements name="android/text/ParcelableSpan" since="3"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V" since="3"/>
+	</class>
+	<class name="android/text/style/UpdateAppearance" since="3">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/text/style/UpdateLayout" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/UpdateAppearance" since="3"/>
+	</class>
+	<class name="android/text/style/WrapTogetherSpan" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/text/style/ParagraphStyle"/>
+	</class>
+	<class name="android/text/util/Linkify" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addLinks(Landroid/text/Spannable;I)Z"/>
+		<method name="addLinks(Landroid/text/Spannable;ILjava/util/function/Function;)Z" since="29"/>
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;)Z"/>
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z"/>
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)Z" since="24"/>
+		<method name="addLinks(Landroid/text/Spannable;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;Ljava/util/function/Function;)Z" since="29"/>
+		<method name="addLinks(Landroid/widget/TextView;I)Z"/>
+		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;)V"/>
+		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V"/>
+		<method name="addLinks(Landroid/widget/TextView;Ljava/util/regex/Pattern;Ljava/lang/String;[Ljava/lang/String;Landroid/text/util/Linkify$MatchFilter;Landroid/text/util/Linkify$TransformFilter;)V" since="24"/>
+		<field name="ALL"/>
+		<field name="EMAIL_ADDRESSES"/>
+		<field name="MAP_ADDRESSES" deprecated="28"/>
+		<field name="PHONE_NUMBERS"/>
+		<field name="WEB_URLS"/>
+		<field name="sPhoneNumberMatchFilter"/>
+		<field name="sPhoneNumberTransformFilter"/>
+		<field name="sUrlMatchFilter"/>
+	</class>
+	<class name="android/text/util/Linkify$MatchFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="acceptMatch(Ljava/lang/CharSequence;II)Z"/>
+	</class>
+	<class name="android/text/util/Linkify$TransformFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="transformUrl(Ljava/util/regex/Matcher;Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="android/text/util/Rfc822Token" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getAddress()Ljava/lang/String;"/>
+		<method name="getComment()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="quoteComment(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="quoteName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="quoteNameIfNecessary(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="setAddress(Ljava/lang/String;)V"/>
+		<method name="setComment(Ljava/lang/String;)V"/>
+		<method name="setName(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/text/util/Rfc822Tokenizer" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/MultiAutoCompleteTextView$Tokenizer"/>
+		<method name="&lt;init>()V"/>
+		<method name="tokenize(Ljava/lang/CharSequence;)[Landroid/text/util/Rfc822Token;"/>
+		<method name="tokenize(Ljava/lang/CharSequence;Ljava/util/Collection;)V" since="8"/>
+	</class>
+	<class name="android/transition/ArcMotion" since="21">
+		<extends name="android/transition/PathMotion"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getMaximumAngle()F"/>
+		<method name="getMinimumHorizontalAngle()F"/>
+		<method name="getMinimumVerticalAngle()F"/>
+		<method name="setMaximumAngle(F)V"/>
+		<method name="setMinimumHorizontalAngle(F)V"/>
+		<method name="setMinimumVerticalAngle(F)V"/>
+	</class>
+	<class name="android/transition/AutoTransition" since="19">
+		<extends name="android/transition/TransitionSet"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
+	</class>
+	<class name="android/transition/ChangeBounds" since="19">
+		<extends name="android/transition/Transition"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
+		<method name="getResizeClip()Z" since="22"/>
+		<method name="setReparent(Z)V" deprecated="21"/>
+		<method name="setResizeClip(Z)V"/>
+	</class>
+	<class name="android/transition/ChangeClipBounds" since="21">
+		<extends name="android/transition/Transition"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/transition/ChangeImageTransform" since="21">
+		<extends name="android/transition/Transition"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/transition/ChangeScroll" since="23">
+		<extends name="android/transition/Transition"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/transition/ChangeTransform" since="21">
+		<extends name="android/transition/Transition"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getReparent()Z"/>
+		<method name="getReparentWithOverlay()Z"/>
+		<method name="setReparent(Z)V"/>
+		<method name="setReparentWithOverlay(Z)V"/>
+	</class>
+	<class name="android/transition/CircularPropagation" since="21">
+		<extends name="android/transition/VisibilityPropagation"/>
+		<method name="&lt;init>()V"/>
+		<method name="setPropagationSpeed(F)V"/>
+	</class>
+	<class name="android/transition/Explode" since="21">
+		<extends name="android/transition/Visibility"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/transition/Fade" since="19">
+		<extends name="android/transition/Visibility"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
+		<field name="IN"/>
+		<field name="OUT"/>
+	</class>
+	<class name="android/transition/PathMotion" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getPath(FFFF)Landroid/graphics/Path;"/>
+	</class>
+	<class name="android/transition/PatternPathMotion" since="21">
+		<extends name="android/transition/PathMotion"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/graphics/Path;)V"/>
+		<method name="getPatternPath()Landroid/graphics/Path;"/>
+		<method name="setPatternPath(Landroid/graphics/Path;)V"/>
+	</class>
+	<class name="android/transition/Scene" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup;Landroid/view/View;)V" since="21"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup;Landroid/view/ViewGroup;)V" deprecated="21"/>
+		<method name="enter()V"/>
+		<method name="exit()V"/>
+		<method name="getCurrentScene(Landroid/view/ViewGroup;)Landroid/transition/Scene;" since="29"/>
+		<method name="getSceneForLayout(Landroid/view/ViewGroup;ILandroid/content/Context;)Landroid/transition/Scene;"/>
+		<method name="getSceneRoot()Landroid/view/ViewGroup;"/>
+		<method name="setEnterAction(Ljava/lang/Runnable;)V"/>
+		<method name="setExitAction(Ljava/lang/Runnable;)V"/>
+	</class>
+	<class name="android/transition/SidePropagation" since="21">
+		<extends name="android/transition/VisibilityPropagation"/>
+		<method name="&lt;init>()V"/>
+		<method name="setPropagationSpeed(F)V"/>
+		<method name="setSide(I)V"/>
+	</class>
+	<class name="android/transition/Slide" since="21">
+		<extends name="android/transition/Visibility"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getSlideEdge()I"/>
+		<method name="setSlideEdge(I)V"/>
+	</class>
+	<class name="android/transition/Transition" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
+		<method name="addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;"/>
+		<method name="addTarget(I)Landroid/transition/Transition;"/>
+		<method name="addTarget(Landroid/view/View;)Landroid/transition/Transition;"/>
+		<method name="addTarget(Ljava/lang/Class;)Landroid/transition/Transition;" since="21"/>
+		<method name="addTarget(Ljava/lang/String;)Landroid/transition/Transition;" since="21"/>
+		<method name="canRemoveViews()Z" since="21"/>
+		<method name="captureEndValues(Landroid/transition/TransitionValues;)V"/>
+		<method name="captureStartValues(Landroid/transition/TransitionValues;)V"/>
+		<method name="clone()Landroid/transition/Transition;"/>
+		<method name="createAnimator(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;"/>
+		<method name="excludeChildren(IZ)Landroid/transition/Transition;"/>
+		<method name="excludeChildren(Landroid/view/View;Z)Landroid/transition/Transition;"/>
+		<method name="excludeChildren(Ljava/lang/Class;Z)Landroid/transition/Transition;"/>
+		<method name="excludeTarget(IZ)Landroid/transition/Transition;"/>
+		<method name="excludeTarget(Landroid/view/View;Z)Landroid/transition/Transition;"/>
+		<method name="excludeTarget(Ljava/lang/Class;Z)Landroid/transition/Transition;"/>
+		<method name="excludeTarget(Ljava/lang/String;Z)Landroid/transition/Transition;" since="21"/>
+		<method name="getDuration()J"/>
+		<method name="getEpicenter()Landroid/graphics/Rect;" since="21"/>
+		<method name="getEpicenterCallback()Landroid/transition/Transition$EpicenterCallback;" since="21"/>
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPathMotion()Landroid/transition/PathMotion;" since="21"/>
+		<method name="getPropagation()Landroid/transition/TransitionPropagation;" since="21"/>
+		<method name="getStartDelay()J"/>
+		<method name="getTargetIds()Ljava/util/List;"/>
+		<method name="getTargetNames()Ljava/util/List;" since="21"/>
+		<method name="getTargetTypes()Ljava/util/List;" since="21"/>
+		<method name="getTargets()Ljava/util/List;"/>
+		<method name="getTransitionProperties()[Ljava/lang/String;"/>
+		<method name="getTransitionValues(Landroid/view/View;Z)Landroid/transition/TransitionValues;"/>
+		<method name="isTransitionRequired(Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Z" since="23"/>
+		<method name="removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/Transition;"/>
+		<method name="removeTarget(I)Landroid/transition/Transition;"/>
+		<method name="removeTarget(Landroid/view/View;)Landroid/transition/Transition;"/>
+		<method name="removeTarget(Ljava/lang/Class;)Landroid/transition/Transition;" since="21"/>
+		<method name="removeTarget(Ljava/lang/String;)Landroid/transition/Transition;" since="21"/>
+		<method name="setDuration(J)Landroid/transition/Transition;"/>
+		<method name="setEpicenterCallback(Landroid/transition/Transition$EpicenterCallback;)V" since="21"/>
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/Transition;"/>
+		<method name="setMatchOrder([I)V" since="21"/>
+		<method name="setPathMotion(Landroid/transition/PathMotion;)V" since="21"/>
+		<method name="setPropagation(Landroid/transition/TransitionPropagation;)V" since="21"/>
+		<method name="setStartDelay(J)Landroid/transition/Transition;"/>
+		<field name="MATCH_ID" since="21"/>
+		<field name="MATCH_INSTANCE" since="21"/>
+		<field name="MATCH_ITEM_ID" since="21"/>
+		<field name="MATCH_NAME" since="21"/>
+	</class>
+	<class name="android/transition/Transition$EpicenterCallback" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGetEpicenter(Landroid/transition/Transition;)Landroid/graphics/Rect;"/>
+	</class>
+	<class name="android/transition/Transition$TransitionListener" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onTransitionCancel(Landroid/transition/Transition;)V"/>
+		<method name="onTransitionEnd(Landroid/transition/Transition;)V"/>
+		<method name="onTransitionPause(Landroid/transition/Transition;)V"/>
+		<method name="onTransitionResume(Landroid/transition/Transition;)V"/>
+		<method name="onTransitionStart(Landroid/transition/Transition;)V"/>
+	</class>
+	<class name="android/transition/TransitionInflater" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="from(Landroid/content/Context;)Landroid/transition/TransitionInflater;"/>
+		<method name="inflateTransition(I)Landroid/transition/Transition;"/>
+		<method name="inflateTransitionManager(ILandroid/view/ViewGroup;)Landroid/transition/TransitionManager;"/>
+	</class>
+	<class name="android/transition/TransitionListenerAdapter" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/transition/Transition$TransitionListener"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/transition/TransitionManager" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="beginDelayedTransition(Landroid/view/ViewGroup;)V"/>
+		<method name="beginDelayedTransition(Landroid/view/ViewGroup;Landroid/transition/Transition;)V"/>
+		<method name="endTransitions(Landroid/view/ViewGroup;)V" since="23"/>
+		<method name="go(Landroid/transition/Scene;)V"/>
+		<method name="go(Landroid/transition/Scene;Landroid/transition/Transition;)V"/>
+		<method name="setTransition(Landroid/transition/Scene;Landroid/transition/Scene;Landroid/transition/Transition;)V"/>
+		<method name="setTransition(Landroid/transition/Scene;Landroid/transition/Transition;)V"/>
+		<method name="transitionTo(Landroid/transition/Scene;)V"/>
+	</class>
+	<class name="android/transition/TransitionPropagation" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="captureValues(Landroid/transition/TransitionValues;)V"/>
+		<method name="getPropagationProperties()[Ljava/lang/String;"/>
+		<method name="getStartDelay(Landroid/view/ViewGroup;Landroid/transition/Transition;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)J"/>
+	</class>
+	<class name="android/transition/TransitionSet" since="19">
+		<extends name="android/transition/Transition"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
+		<method name="addListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;"/>
+		<method name="addTarget(I)Landroid/transition/TransitionSet;"/>
+		<method name="addTarget(Landroid/view/View;)Landroid/transition/TransitionSet;"/>
+		<method name="addTarget(Ljava/lang/Class;)Landroid/transition/TransitionSet;" since="21"/>
+		<method name="addTarget(Ljava/lang/String;)Landroid/transition/TransitionSet;" since="21"/>
+		<method name="addTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;"/>
+		<method name="clone()Landroid/transition/TransitionSet;"/>
+		<method name="getOrdering()I"/>
+		<method name="getTransitionAt(I)Landroid/transition/Transition;" since="21"/>
+		<method name="getTransitionCount()I" since="21"/>
+		<method name="removeListener(Landroid/transition/Transition$TransitionListener;)Landroid/transition/TransitionSet;"/>
+		<method name="removeTarget(I)Landroid/transition/TransitionSet;"/>
+		<method name="removeTarget(Landroid/view/View;)Landroid/transition/TransitionSet;"/>
+		<method name="removeTarget(Ljava/lang/Class;)Landroid/transition/TransitionSet;" since="21"/>
+		<method name="removeTarget(Ljava/lang/String;)Landroid/transition/TransitionSet;" since="21"/>
+		<method name="removeTransition(Landroid/transition/Transition;)Landroid/transition/TransitionSet;"/>
+		<method name="setDuration(J)Landroid/transition/TransitionSet;"/>
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/transition/TransitionSet;"/>
+		<method name="setOrdering(I)Landroid/transition/TransitionSet;"/>
+		<method name="setStartDelay(J)Landroid/transition/TransitionSet;"/>
+		<field name="ORDERING_SEQUENTIAL"/>
+		<field name="ORDERING_TOGETHER"/>
+	</class>
+	<class name="android/transition/TransitionValues" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/view/View;)V" since="29"/>
+		<field name="values"/>
+		<field name="view"/>
+	</class>
+	<class name="android/transition/Visibility" since="19">
+		<extends name="android/transition/Transition"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="21"/>
+		<method name="getMode()I" since="21"/>
+		<method name="isVisible(Landroid/transition/TransitionValues;)Z"/>
+		<method name="onAppear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;"/>
+		<method name="onAppear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;" since="21"/>
+		<method name="onDisappear(Landroid/view/ViewGroup;Landroid/transition/TransitionValues;ILandroid/transition/TransitionValues;I)Landroid/animation/Animator;"/>
+		<method name="onDisappear(Landroid/view/ViewGroup;Landroid/view/View;Landroid/transition/TransitionValues;Landroid/transition/TransitionValues;)Landroid/animation/Animator;" since="21"/>
+		<method name="setMode(I)V" since="21"/>
+		<field name="MODE_IN" since="21"/>
+		<field name="MODE_OUT" since="21"/>
+	</class>
+	<class name="android/transition/VisibilityPropagation" since="21">
+		<extends name="android/transition/TransitionPropagation"/>
+		<method name="&lt;init>()V"/>
+		<method name="getViewVisibility(Landroid/transition/TransitionValues;)I"/>
+		<method name="getViewX(Landroid/transition/TransitionValues;)I"/>
+		<method name="getViewY(Landroid/transition/TransitionValues;)I"/>
+	</class>
+	<class name="android/util/AndroidException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="11"/>
+	</class>
+	<class name="android/util/AndroidRuntimeException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="11"/>
+	</class>
+	<class name="android/util/ArrayMap" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Map"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/util/ArrayMap;)V"/>
+		<method name="containsAll(Ljava/util/Collection;)Z"/>
+		<method name="ensureCapacity(I)V"/>
+		<method name="indexOfKey(Ljava/lang/Object;)I" since="21"/>
+		<method name="indexOfValue(Ljava/lang/Object;)I" since="29"/>
+		<method name="keyAt(I)Ljava/lang/Object;"/>
+		<method name="putAll(Landroid/util/ArrayMap;)V"/>
+		<method name="removeAll(Ljava/util/Collection;)Z"/>
+		<method name="removeAt(I)Ljava/lang/Object;"/>
+		<method name="retainAll(Ljava/util/Collection;)Z"/>
+		<method name="setValueAt(ILjava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="valueAt(I)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/util/ArraySet" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Collection"/>
+		<implements name="java/util/Set"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Landroid/util/ArraySet;)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V" since="29"/>
+		<method name="&lt;init>([Ljava/lang/Object;)V" since="30"/>
+		<method name="addAll(Landroid/util/ArraySet;)V"/>
+		<method name="ensureCapacity(I)V"/>
+		<method name="indexOf(Ljava/lang/Object;)I"/>
+		<method name="removeAll(Landroid/util/ArraySet;)Z"/>
+		<method name="removeAt(I)Ljava/lang/Object;"/>
+		<method name="valueAt(I)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/util/AtomicFile" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="delete()V"/>
+		<method name="failWrite(Ljava/io/FileOutputStream;)V"/>
+		<method name="finishWrite(Ljava/io/FileOutputStream;)V"/>
+		<method name="getBaseFile()Ljava/io/File;"/>
+		<method name="getLastModifiedTime()J" since="31"/>
+		<method name="openRead()Ljava/io/FileInputStream;"/>
+		<method name="readFully()[B"/>
+		<method name="startWrite()Ljava/io/FileOutputStream;"/>
+	</class>
+	<class name="android/util/AttributeSet" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getAttributeBooleanValue(IZ)Z"/>
+		<method name="getAttributeBooleanValue(Ljava/lang/String;Ljava/lang/String;Z)Z"/>
+		<method name="getAttributeCount()I"/>
+		<method name="getAttributeFloatValue(IF)F"/>
+		<method name="getAttributeFloatValue(Ljava/lang/String;Ljava/lang/String;F)F"/>
+		<method name="getAttributeIntValue(II)I"/>
+		<method name="getAttributeIntValue(Ljava/lang/String;Ljava/lang/String;I)I"/>
+		<method name="getAttributeListValue(I[Ljava/lang/String;I)I"/>
+		<method name="getAttributeListValue(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;I)I"/>
+		<method name="getAttributeName(I)Ljava/lang/String;"/>
+		<method name="getAttributeNameResource(I)I"/>
+		<method name="getAttributeNamespace(I)Ljava/lang/String;" since="28"/>
+		<method name="getAttributeResourceValue(II)I"/>
+		<method name="getAttributeResourceValue(Ljava/lang/String;Ljava/lang/String;I)I"/>
+		<method name="getAttributeUnsignedIntValue(II)I"/>
+		<method name="getAttributeUnsignedIntValue(Ljava/lang/String;Ljava/lang/String;I)I"/>
+		<method name="getAttributeValue(I)Ljava/lang/String;"/>
+		<method name="getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getClassAttribute()Ljava/lang/String;"/>
+		<method name="getIdAttribute()Ljava/lang/String;"/>
+		<method name="getIdAttributeResourceValue(I)I"/>
+		<method name="getPositionDescription()Ljava/lang/String;"/>
+		<method name="getStyleAttribute()I"/>
+	</class>
+	<class name="android/util/Base64" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="decode(Ljava/lang/String;I)[B"/>
+		<method name="decode([BI)[B"/>
+		<method name="decode([BIII)[B"/>
+		<method name="encode([BI)[B"/>
+		<method name="encode([BIII)[B"/>
+		<method name="encodeToString([BI)Ljava/lang/String;"/>
+		<method name="encodeToString([BIII)Ljava/lang/String;"/>
+		<field name="CRLF"/>
+		<field name="DEFAULT"/>
+		<field name="NO_CLOSE"/>
+		<field name="NO_PADDING"/>
+		<field name="NO_WRAP"/>
+		<field name="URL_SAFE"/>
+	</class>
+	<class name="android/util/Base64DataException" since="11">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/util/Base64InputStream" since="8">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
+	</class>
+	<class name="android/util/Base64OutputStream" since="8">
+		<extends name="java/io/FilterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;I)V"/>
+	</class>
+	<class name="android/util/CloseGuard" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="close()V"/>
+		<method name="open(Ljava/lang/String;)V"/>
+		<method name="warnIfOpen()V"/>
+	</class>
+	<class name="android/util/Config" since="1" deprecated="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="12"/>
+		<field name="DEBUG" deprecated="15"/>
+		<field name="LOGD" deprecated="15"/>
+		<field name="LOGV" deprecated="15"/>
+		<field name="PROFILE" deprecated="15"/>
+		<field name="RELEASE" deprecated="15"/>
+	</class>
+	<class name="android/util/DebugUtils" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="12"/>
+		<method name="isObjectSelected(Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="android/util/DisplayMetrics" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="equals(Landroid/util/DisplayMetrics;)Z" since="17"/>
+		<method name="setTo(Landroid/util/DisplayMetrics;)V"/>
+		<method name="setToDefaults()V"/>
+		<field name="DENSITY_140" since="29"/>
+		<field name="DENSITY_180" since="29"/>
+		<field name="DENSITY_200" since="29"/>
+		<field name="DENSITY_220" since="29"/>
+		<field name="DENSITY_260" since="25"/>
+		<field name="DENSITY_280" since="22"/>
+		<field name="DENSITY_300" since="25"/>
+		<field name="DENSITY_340" since="25"/>
+		<field name="DENSITY_360" since="23"/>
+		<field name="DENSITY_400" since="19"/>
+		<field name="DENSITY_420" since="23"/>
+		<field name="DENSITY_440" since="28"/>
+		<field name="DENSITY_450" since="29"/>
+		<field name="DENSITY_560" since="21"/>
+		<field name="DENSITY_600" since="29"/>
+		<field name="DENSITY_DEFAULT" since="4"/>
+		<field name="DENSITY_DEVICE_STABLE" since="24"/>
+		<field name="DENSITY_HIGH" since="4"/>
+		<field name="DENSITY_LOW" since="4"/>
+		<field name="DENSITY_MEDIUM" since="4"/>
+		<field name="DENSITY_TV" since="13"/>
+		<field name="DENSITY_XHIGH" since="9"/>
+		<field name="DENSITY_XXHIGH" since="16"/>
+		<field name="DENSITY_XXXHIGH" since="18"/>
+		<field name="density"/>
+		<field name="densityDpi" since="4"/>
+		<field name="heightPixels"/>
+		<field name="scaledDensity"/>
+		<field name="widthPixels"/>
+		<field name="xdpi"/>
+		<field name="ydpi"/>
+	</class>
+	<class name="android/util/EventLog" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="12"/>
+		<method name="getTagCode(Ljava/lang/String;)I"/>
+		<method name="getTagName(I)Ljava/lang/String;"/>
+		<method name="readEvents([ILjava/util/Collection;)V"/>
+		<method name="writeEvent(IF)I" since="23"/>
+		<method name="writeEvent(II)I"/>
+		<method name="writeEvent(IJ)I"/>
+		<method name="writeEvent(ILjava/lang/String;)I"/>
+		<method name="writeEvent(I[Ljava/lang/Object;)I"/>
+	</class>
+	<class name="android/util/EventLog$Event" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getData()Ljava/lang/Object;"/>
+		<method name="getProcessId()I"/>
+		<method name="getTag()I"/>
+		<method name="getThreadId()I"/>
+		<method name="getTimeNanos()J"/>
+	</class>
+	<class name="android/util/EventLogTags" since="1" deprecated="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/io/BufferedReader;)V" deprecated="29"/>
+		<method name="get(I)Landroid/util/EventLogTags$Description;" deprecated="29"/>
+		<method name="get(Ljava/lang/String;)Landroid/util/EventLogTags$Description;" deprecated="29"/>
+	</class>
+	<class name="android/util/EventLogTags$Description" since="1" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<field name="mName" deprecated="29"/>
+		<field name="mTag" deprecated="29"/>
+	</class>
+	<class name="android/util/FloatMath" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<method name="ceil(F)F" removed="23"/>
+		<method name="cos(F)F" removed="23"/>
+		<method name="exp(F)F" since="17" removed="23"/>
+		<method name="floor(F)F" removed="23"/>
+		<method name="hypot(FF)F" since="17" removed="23"/>
+		<method name="pow(FF)F" since="17" removed="23"/>
+		<method name="sin(F)F" removed="23"/>
+		<method name="sqrt(F)F" removed="23"/>
+	</class>
+	<class name="android/util/FloatProperty" since="24">
+		<extends name="android/util/Property"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="set(Ljava/lang/Object;Ljava/lang/Float;)V"/>
+		<method name="setValue(Ljava/lang/Object;F)V"/>
+	</class>
+	<class name="android/util/Half" since="26">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(D)V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(S)V"/>
+		<method name="abs(S)S"/>
+		<method name="ceil(S)S"/>
+		<method name="compare(SS)I"/>
+		<method name="compareTo(Landroid/util/Half;)I"/>
+		<method name="copySign(SS)S"/>
+		<method name="equals(SS)Z"/>
+		<method name="floor(S)S"/>
+		<method name="getExponent(S)I"/>
+		<method name="getSign(S)I"/>
+		<method name="getSignificand(S)I"/>
+		<method name="greater(SS)Z"/>
+		<method name="greaterEquals(SS)Z"/>
+		<method name="halfToIntBits(S)I"/>
+		<method name="halfToRawIntBits(S)I"/>
+		<method name="halfToShortBits(S)S"/>
+		<method name="halfValue()S"/>
+		<method name="hashCode(S)I"/>
+		<method name="intBitsToHalf(I)S"/>
+		<method name="isInfinite(S)Z"/>
+		<method name="isNaN()Z"/>
+		<method name="isNaN(S)Z"/>
+		<method name="isNormalized(S)Z"/>
+		<method name="less(SS)Z"/>
+		<method name="lessEquals(SS)Z"/>
+		<method name="max(SS)S"/>
+		<method name="min(SS)S"/>
+		<method name="parseHalf(Ljava/lang/String;)S"/>
+		<method name="round(S)S"/>
+		<method name="toFloat(S)F"/>
+		<method name="toHalf(F)S"/>
+		<method name="toHexString(S)Ljava/lang/String;"/>
+		<method name="toString(S)Ljava/lang/String;"/>
+		<method name="trunc(S)S"/>
+		<method name="valueOf(F)Landroid/util/Half;"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/util/Half;"/>
+		<method name="valueOf(S)Landroid/util/Half;"/>
+		<field name="EPSILON"/>
+		<field name="LOWEST_VALUE"/>
+		<field name="MAX_EXPONENT"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_EXPONENT"/>
+		<field name="MIN_NORMAL"/>
+		<field name="MIN_VALUE"/>
+		<field name="NEGATIVE_INFINITY"/>
+		<field name="NEGATIVE_ZERO"/>
+		<field name="NaN"/>
+		<field name="POSITIVE_INFINITY"/>
+		<field name="POSITIVE_ZERO"/>
+		<field name="SIZE"/>
+	</class>
+	<class name="android/util/IntProperty" since="24">
+		<extends name="android/util/Property"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="set(Ljava/lang/Object;Ljava/lang/Integer;)V"/>
+		<method name="setValue(Ljava/lang/Object;I)V"/>
+	</class>
+	<class name="android/util/JsonReader" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<method name="beginArray()V"/>
+		<method name="beginObject()V"/>
+		<method name="endArray()V"/>
+		<method name="endObject()V"/>
+		<method name="hasNext()Z"/>
+		<method name="isLenient()Z"/>
+		<method name="nextBoolean()Z"/>
+		<method name="nextDouble()D"/>
+		<method name="nextInt()I"/>
+		<method name="nextLong()J"/>
+		<method name="nextName()Ljava/lang/String;"/>
+		<method name="nextNull()V"/>
+		<method name="nextString()Ljava/lang/String;"/>
+		<method name="peek()Landroid/util/JsonToken;"/>
+		<method name="setLenient(Z)V"/>
+		<method name="skipValue()V"/>
+	</class>
+	<class name="android/util/JsonToken" since="11">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/util/JsonToken;"/>
+		<method name="values()[Landroid/util/JsonToken;"/>
+		<field name="BEGIN_ARRAY"/>
+		<field name="BEGIN_OBJECT"/>
+		<field name="BOOLEAN"/>
+		<field name="END_ARRAY"/>
+		<field name="END_DOCUMENT"/>
+		<field name="END_OBJECT"/>
+		<field name="NAME"/>
+		<field name="NULL"/>
+		<field name="NUMBER"/>
+		<field name="STRING"/>
+	</class>
+	<class name="android/util/JsonWriter" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="&lt;init>(Ljava/io/Writer;)V"/>
+		<method name="beginArray()Landroid/util/JsonWriter;"/>
+		<method name="beginObject()Landroid/util/JsonWriter;"/>
+		<method name="endArray()Landroid/util/JsonWriter;"/>
+		<method name="endObject()Landroid/util/JsonWriter;"/>
+		<method name="flush()V"/>
+		<method name="isLenient()Z"/>
+		<method name="name(Ljava/lang/String;)Landroid/util/JsonWriter;"/>
+		<method name="nullValue()Landroid/util/JsonWriter;"/>
+		<method name="setIndent(Ljava/lang/String;)V"/>
+		<method name="setLenient(Z)V"/>
+		<method name="value(D)Landroid/util/JsonWriter;"/>
+		<method name="value(J)Landroid/util/JsonWriter;"/>
+		<method name="value(Ljava/lang/Number;)Landroid/util/JsonWriter;"/>
+		<method name="value(Ljava/lang/String;)Landroid/util/JsonWriter;"/>
+		<method name="value(Z)Landroid/util/JsonWriter;"/>
+	</class>
+	<class name="android/util/LayoutDirection" since="19">
+		<extends name="java/lang/Object"/>
+		<field name="INHERIT"/>
+		<field name="LOCALE"/>
+		<field name="LTR"/>
+		<field name="RTL"/>
+	</class>
+	<class name="android/util/Log" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="d(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
+		<method name="e(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
+		<method name="getStackTraceString(Ljava/lang/Throwable;)Ljava/lang/String;"/>
+		<method name="i(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
+		<method name="isLoggable(Ljava/lang/String;I)Z"/>
+		<method name="println(ILjava/lang/String;Ljava/lang/String;)I"/>
+		<method name="v(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="v(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
+		<method name="w(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I"/>
+		<method name="w(Ljava/lang/String;Ljava/lang/Throwable;)I"/>
+		<method name="wtf(Ljava/lang/String;Ljava/lang/String;)I" since="8"/>
+		<method name="wtf(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I" since="8"/>
+		<method name="wtf(Ljava/lang/String;Ljava/lang/Throwable;)I" since="8"/>
+		<field name="ASSERT"/>
+		<field name="DEBUG"/>
+		<field name="ERROR"/>
+		<field name="INFO"/>
+		<field name="VERBOSE"/>
+		<field name="WARN"/>
+	</class>
+	<class name="android/util/LogPrinter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/util/Printer"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+	</class>
+	<class name="android/util/LongSparseArray" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(JLjava/lang/Object;)V"/>
+		<method name="clear()V"/>
+		<method name="clone()Landroid/util/LongSparseArray;"/>
+		<method name="delete(J)V"/>
+		<method name="get(J)Ljava/lang/Object;"/>
+		<method name="get(JLjava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="indexOfKey(J)I"/>
+		<method name="indexOfValue(Ljava/lang/Object;)I"/>
+		<method name="keyAt(I)J"/>
+		<method name="put(JLjava/lang/Object;)V"/>
+		<method name="remove(J)V"/>
+		<method name="removeAt(I)V"/>
+		<method name="setValueAt(ILjava/lang/Object;)V"/>
+		<method name="size()I"/>
+		<method name="valueAt(I)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/util/LruCache" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="create(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="createCount()I"/>
+		<method name="entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="evictAll()V"/>
+		<method name="evictionCount()I"/>
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="hitCount()I"/>
+		<method name="maxSize()I"/>
+		<method name="missCount()I"/>
+		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="putCount()I"/>
+		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="resize(I)V" since="21"/>
+		<method name="size()I"/>
+		<method name="sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I"/>
+		<method name="snapshot()Ljava/util/Map;"/>
+		<method name="trimToSize(I)V" since="17"/>
+	</class>
+	<class name="android/util/MalformedJsonException" since="11">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/util/MonthDisplayHelper" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="getColumnOf(I)I"/>
+		<method name="getDayAt(II)I"/>
+		<method name="getDigitsForRow(I)[I"/>
+		<method name="getFirstDayOfMonth()I"/>
+		<method name="getMonth()I"/>
+		<method name="getNumberOfDaysInMonth()I"/>
+		<method name="getOffset()I"/>
+		<method name="getRowOf(I)I"/>
+		<method name="getWeekStartDay()I"/>
+		<method name="getYear()I"/>
+		<method name="isWithinCurrentMonth(II)Z"/>
+		<method name="nextMonth()V"/>
+		<method name="previousMonth()V"/>
+	</class>
+	<class name="android/util/MutableBoolean" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Z)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/MutableByte" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(B)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/MutableChar" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(C)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/MutableDouble" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(D)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/MutableFloat" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(F)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/MutableInt" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/MutableLong" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(J)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/MutableShort" since="21" deprecated="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(S)V" deprecated="29"/>
+		<field name="value" deprecated="29"/>
+	</class>
+	<class name="android/util/NoSuchPropertyException" since="14">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/util/Pair" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="create(Ljava/lang/Object;Ljava/lang/Object;)Landroid/util/Pair;"/>
+		<field name="first"/>
+		<field name="second"/>
+	</class>
+	<class name="android/util/Patterns" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="concatGroups(Ljava/util/regex/Matcher;)Ljava/lang/String;"/>
+		<method name="digitsAndPlusOnly(Ljava/util/regex/Matcher;)Ljava/lang/String;"/>
+		<field name="DOMAIN_NAME"/>
+		<field name="EMAIL_ADDRESS"/>
+		<field name="GOOD_IRI_CHAR" deprecated="24"/>
+		<field name="IP_ADDRESS" deprecated="31"/>
+		<field name="PHONE"/>
+		<field name="TOP_LEVEL_DOMAIN" deprecated="21"/>
+		<field name="TOP_LEVEL_DOMAIN_STR" deprecated="21"/>
+		<field name="TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL" deprecated="21"/>
+		<field name="WEB_URL"/>
+	</class>
+	<class name="android/util/PrintStreamPrinter" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/util/Printer"/>
+		<method name="&lt;init>(Ljava/io/PrintStream;)V"/>
+	</class>
+	<class name="android/util/PrintWriterPrinter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/util/Printer"/>
+		<method name="&lt;init>(Ljava/io/PrintWriter;)V"/>
+	</class>
+	<class name="android/util/Printer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="println(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/util/Property" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getType()Ljava/lang/Class;"/>
+		<method name="isReadOnly()Z"/>
+		<method name="of(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Landroid/util/Property;"/>
+		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/util/Range" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Comparable;Ljava/lang/Comparable;)V"/>
+		<method name="clamp(Ljava/lang/Comparable;)Ljava/lang/Comparable;"/>
+		<method name="contains(Landroid/util/Range;)Z"/>
+		<method name="contains(Ljava/lang/Comparable;)Z"/>
+		<method name="create(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;"/>
+		<method name="extend(Landroid/util/Range;)Landroid/util/Range;"/>
+		<method name="extend(Ljava/lang/Comparable;)Landroid/util/Range;"/>
+		<method name="extend(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;"/>
+		<method name="getLower()Ljava/lang/Comparable;"/>
+		<method name="getUpper()Ljava/lang/Comparable;"/>
+		<method name="intersect(Landroid/util/Range;)Landroid/util/Range;"/>
+		<method name="intersect(Ljava/lang/Comparable;Ljava/lang/Comparable;)Landroid/util/Range;"/>
+	</class>
+	<class name="android/util/Rational" since="21">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="compareTo(Landroid/util/Rational;)I"/>
+		<method name="getDenominator()I"/>
+		<method name="getNumerator()I"/>
+		<method name="isFinite()Z"/>
+		<method name="isInfinite()Z"/>
+		<method name="isNaN()Z"/>
+		<method name="isZero()Z"/>
+		<method name="parseRational(Ljava/lang/String;)Landroid/util/Rational;"/>
+		<field name="NEGATIVE_INFINITY"/>
+		<field name="NaN"/>
+		<field name="POSITIVE_INFINITY"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="android/util/Size" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getHeight()I"/>
+		<method name="getWidth()I"/>
+		<method name="parseSize(Ljava/lang/String;)Landroid/util/Size;"/>
+	</class>
+	<class name="android/util/SizeF" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="31"/>
+		<method name="&lt;init>(FF)V"/>
+		<method name="getHeight()F"/>
+		<method name="getWidth()F"/>
+		<method name="parseSizeF(Ljava/lang/String;)Landroid/util/SizeF;"/>
+		<field name="CREATOR" since="31"/>
+	</class>
+	<class name="android/util/SparseArray" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable" since="14"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(ILjava/lang/Object;)V"/>
+		<method name="clear()V"/>
+		<method name="clone()Landroid/util/SparseArray;" since="14"/>
+		<method name="contains(I)Z" since="30"/>
+		<method name="contentEquals(Landroid/util/SparseArray;)Z" since="31"/>
+		<method name="contentHashCode()I" since="31"/>
+		<method name="delete(I)V"/>
+		<method name="get(I)Ljava/lang/Object;"/>
+		<method name="get(ILjava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="indexOfKey(I)I"/>
+		<method name="indexOfValue(Ljava/lang/Object;)I"/>
+		<method name="keyAt(I)I"/>
+		<method name="put(ILjava/lang/Object;)V"/>
+		<method name="remove(I)V"/>
+		<method name="removeAt(I)V" since="11"/>
+		<method name="removeAtRange(II)V" since="19"/>
+		<method name="set(ILjava/lang/Object;)V" since="31"/>
+		<method name="setValueAt(ILjava/lang/Object;)V"/>
+		<method name="size()I"/>
+		<method name="valueAt(I)Ljava/lang/Object;"/>
+	</class>
+	<class name="android/util/SparseBooleanArray" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable" since="14"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(IZ)V"/>
+		<method name="clear()V"/>
+		<method name="clone()Landroid/util/SparseBooleanArray;" since="14"/>
+		<method name="delete(I)V"/>
+		<method name="get(I)Z"/>
+		<method name="get(IZ)Z"/>
+		<method name="indexOfKey(I)I"/>
+		<method name="indexOfValue(Z)I"/>
+		<method name="keyAt(I)I"/>
+		<method name="put(IZ)V"/>
+		<method name="removeAt(I)V" since="28"/>
+		<method name="setValueAt(IZ)V" since="29"/>
+		<method name="size()I"/>
+		<method name="valueAt(I)Z"/>
+	</class>
+	<class name="android/util/SparseIntArray" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable" since="14"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(II)V"/>
+		<method name="clear()V"/>
+		<method name="clone()Landroid/util/SparseIntArray;" since="14"/>
+		<method name="delete(I)V"/>
+		<method name="get(I)I"/>
+		<method name="get(II)I"/>
+		<method name="indexOfKey(I)I"/>
+		<method name="indexOfValue(I)I"/>
+		<method name="keyAt(I)I"/>
+		<method name="put(II)V"/>
+		<method name="removeAt(I)V" since="3"/>
+		<method name="setValueAt(II)V" since="29"/>
+		<method name="size()I"/>
+		<method name="valueAt(I)I"/>
+	</class>
+	<class name="android/util/SparseLongArray" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(IJ)V"/>
+		<method name="clear()V"/>
+		<method name="clone()Landroid/util/SparseLongArray;"/>
+		<method name="delete(I)V"/>
+		<method name="get(I)J"/>
+		<method name="get(IJ)J"/>
+		<method name="indexOfKey(I)I"/>
+		<method name="indexOfValue(J)I"/>
+		<method name="keyAt(I)I"/>
+		<method name="put(IJ)V"/>
+		<method name="removeAt(I)V"/>
+		<method name="size()I"/>
+		<method name="valueAt(I)J"/>
+	</class>
+	<class name="android/util/StateSet" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="12"/>
+		<method name="dump([I)Ljava/lang/String;"/>
+		<method name="isWildCard([I)Z"/>
+		<method name="stateSetMatches([II)Z"/>
+		<method name="stateSetMatches([I[I)Z"/>
+		<method name="trimStateSet([II)[I"/>
+		<field name="NOTHING" since="11"/>
+		<field name="WILD_CARD"/>
+	</class>
+	<class name="android/util/StatsLog" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="logBinaryPushStateChanged(Ljava/lang/String;JII[J)Z" since="29"/>
+		<method name="logEvent(I)Z"/>
+		<method name="logStart(I)Z"/>
+		<method name="logStop(I)Z"/>
+	</class>
+	<class name="android/util/StringBuilderPrinter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/util/Printer"/>
+		<method name="&lt;init>(Ljava/lang/StringBuilder;)V"/>
+	</class>
+	<class name="android/util/TimeFormatException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+	</class>
+	<class name="android/util/TimeUtils" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="12"/>
+		<method name="getTimeZone(IZJLjava/lang/String;)Ljava/util/TimeZone;"/>
+		<method name="getTimeZoneDatabaseVersion()Ljava/lang/String;" since="3"/>
+		<method name="getTimeZoneIdsForCountryCode(Ljava/lang/String;)Ljava/util/List;" since="29"/>
+		<method name="isTimeBetween(Ljava/time/LocalTime;Ljava/time/LocalTime;Ljava/time/LocalTime;)Z" since="30"/>
+	</class>
+	<class name="android/util/TimingLogger" since="1" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+		<method name="addSplit(Ljava/lang/String;)V" deprecated="30"/>
+		<method name="dumpToLog()V" deprecated="30"/>
+		<method name="reset()V" deprecated="30"/>
+		<method name="reset(Ljava/lang/String;Ljava/lang/String;)V" deprecated="30"/>
+	</class>
+	<class name="android/util/TypedValue" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="applyDimension(IFLandroid/util/DisplayMetrics;)F"/>
+		<method name="coerceToString()Ljava/lang/CharSequence;"/>
+		<method name="coerceToString(II)Ljava/lang/String;"/>
+		<method name="complexToDimension(ILandroid/util/DisplayMetrics;)F"/>
+		<method name="complexToDimensionNoisy(ILandroid/util/DisplayMetrics;)F" removed="20"/>
+		<method name="complexToDimensionPixelOffset(ILandroid/util/DisplayMetrics;)I"/>
+		<method name="complexToDimensionPixelSize(ILandroid/util/DisplayMetrics;)I"/>
+		<method name="complexToFloat(I)F"/>
+		<method name="complexToFraction(IFF)F"/>
+		<method name="getComplexUnit()I" since="22"/>
+		<method name="getDimension(Landroid/util/DisplayMetrics;)F"/>
+		<method name="getFloat()F"/>
+		<method name="getFraction(FF)F"/>
+		<method name="isColorType()Z" since="29"/>
+		<method name="setTo(Landroid/util/TypedValue;)V"/>
+		<field name="COMPLEX_MANTISSA_MASK"/>
+		<field name="COMPLEX_MANTISSA_SHIFT"/>
+		<field name="COMPLEX_RADIX_0p23"/>
+		<field name="COMPLEX_RADIX_16p7"/>
+		<field name="COMPLEX_RADIX_23p0"/>
+		<field name="COMPLEX_RADIX_8p15"/>
+		<field name="COMPLEX_RADIX_MASK"/>
+		<field name="COMPLEX_RADIX_SHIFT"/>
+		<field name="COMPLEX_UNIT_DIP"/>
+		<field name="COMPLEX_UNIT_FRACTION"/>
+		<field name="COMPLEX_UNIT_FRACTION_PARENT"/>
+		<field name="COMPLEX_UNIT_IN"/>
+		<field name="COMPLEX_UNIT_MASK"/>
+		<field name="COMPLEX_UNIT_MM"/>
+		<field name="COMPLEX_UNIT_PT"/>
+		<field name="COMPLEX_UNIT_PX"/>
+		<field name="COMPLEX_UNIT_SHIFT"/>
+		<field name="COMPLEX_UNIT_SP"/>
+		<field name="DATA_NULL_EMPTY" since="22"/>
+		<field name="DATA_NULL_UNDEFINED" since="22"/>
+		<field name="DENSITY_DEFAULT" since="4"/>
+		<field name="DENSITY_NONE" since="4"/>
+		<field name="TYPE_ATTRIBUTE"/>
+		<field name="TYPE_DIMENSION"/>
+		<field name="TYPE_FIRST_COLOR_INT"/>
+		<field name="TYPE_FIRST_INT"/>
+		<field name="TYPE_FLOAT"/>
+		<field name="TYPE_FRACTION"/>
+		<field name="TYPE_INT_BOOLEAN"/>
+		<field name="TYPE_INT_COLOR_ARGB4"/>
+		<field name="TYPE_INT_COLOR_ARGB8"/>
+		<field name="TYPE_INT_COLOR_RGB4"/>
+		<field name="TYPE_INT_COLOR_RGB8"/>
+		<field name="TYPE_INT_DEC"/>
+		<field name="TYPE_INT_HEX"/>
+		<field name="TYPE_LAST_COLOR_INT"/>
+		<field name="TYPE_LAST_INT"/>
+		<field name="TYPE_NULL"/>
+		<field name="TYPE_REFERENCE"/>
+		<field name="TYPE_STRING"/>
+		<field name="assetCookie"/>
+		<field name="changingConfigurations"/>
+		<field name="data"/>
+		<field name="density" since="4"/>
+		<field name="resourceId"/>
+		<field name="sourceResourceId" since="29"/>
+		<field name="string"/>
+		<field name="type"/>
+	</class>
+	<class name="android/util/Xml" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="12"/>
+		<method name="asAttributeSet(Lorg/xmlpull/v1/XmlPullParser;)Landroid/util/AttributeSet;"/>
+		<method name="findEncodingByName(Ljava/lang/String;)Landroid/util/Xml$Encoding;"/>
+		<method name="newPullParser()Lorg/xmlpull/v1/XmlPullParser;"/>
+		<method name="newSerializer()Lorg/xmlpull/v1/XmlSerializer;"/>
+		<method name="parse(Ljava/io/InputStream;Landroid/util/Xml$Encoding;Lorg/xml/sax/ContentHandler;)V"/>
+		<method name="parse(Ljava/io/Reader;Lorg/xml/sax/ContentHandler;)V"/>
+		<method name="parse(Ljava/lang/String;Lorg/xml/sax/ContentHandler;)V"/>
+		<field name="FEATURE_RELAXED"/>
+	</class>
+	<class name="android/util/Xml$Encoding" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/util/Xml$Encoding;"/>
+		<method name="values()[Landroid/util/Xml$Encoding;"/>
+		<field name="ISO_8859_1"/>
+		<field name="US_ASCII"/>
+		<field name="UTF_16"/>
+		<field name="UTF_8"/>
+	</class>
+	<class name="android/util/proto/ProtoOutputStream" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="checkFieldId(JJ)I"/>
+		<method name="dump(Ljava/lang/String;)V"/>
+		<method name="end(J)V"/>
+		<method name="flush()V"/>
+		<method name="getBytes()[B"/>
+		<method name="getFieldCountString(J)Ljava/lang/String;"/>
+		<method name="getFieldIdString(J)Ljava/lang/String;"/>
+		<method name="getFieldTypeString(J)Ljava/lang/String;"/>
+		<method name="getRawSize()I"/>
+		<method name="getWireTypeString(I)Ljava/lang/String;"/>
+		<method name="makeFieldId(IJ)J"/>
+		<method name="makeToken(IZIII)J"/>
+		<method name="start(J)J"/>
+		<method name="token2String(J)Ljava/lang/String;"/>
+		<method name="write(JD)V"/>
+		<method name="write(JF)V"/>
+		<method name="write(JI)V"/>
+		<method name="write(JJ)V"/>
+		<method name="write(JLjava/lang/String;)V"/>
+		<method name="write(JZ)V"/>
+		<method name="write(J[B)V"/>
+		<method name="writeTag(II)V"/>
+		<field name="FIELD_COUNT_MASK"/>
+		<field name="FIELD_COUNT_PACKED"/>
+		<field name="FIELD_COUNT_REPEATED"/>
+		<field name="FIELD_COUNT_SHIFT"/>
+		<field name="FIELD_COUNT_SINGLE"/>
+		<field name="FIELD_COUNT_UNKNOWN"/>
+		<field name="FIELD_ID_SHIFT"/>
+		<field name="FIELD_TYPE_BOOL"/>
+		<field name="FIELD_TYPE_BYTES"/>
+		<field name="FIELD_TYPE_DOUBLE"/>
+		<field name="FIELD_TYPE_ENUM"/>
+		<field name="FIELD_TYPE_FIXED32"/>
+		<field name="FIELD_TYPE_FIXED64"/>
+		<field name="FIELD_TYPE_FLOAT"/>
+		<field name="FIELD_TYPE_INT32"/>
+		<field name="FIELD_TYPE_INT64"/>
+		<field name="FIELD_TYPE_MASK"/>
+		<field name="FIELD_TYPE_MESSAGE"/>
+		<field name="FIELD_TYPE_SFIXED32"/>
+		<field name="FIELD_TYPE_SFIXED64"/>
+		<field name="FIELD_TYPE_SHIFT"/>
+		<field name="FIELD_TYPE_SINT32"/>
+		<field name="FIELD_TYPE_SINT64"/>
+		<field name="FIELD_TYPE_STRING"/>
+		<field name="FIELD_TYPE_UINT32"/>
+		<field name="FIELD_TYPE_UINT64"/>
+		<field name="WIRE_TYPE_END_GROUP"/>
+		<field name="WIRE_TYPE_FIXED32"/>
+		<field name="WIRE_TYPE_FIXED64"/>
+		<field name="WIRE_TYPE_LENGTH_DELIMITED"/>
+		<field name="WIRE_TYPE_MASK"/>
+		<field name="WIRE_TYPE_START_GROUP"/>
+		<field name="WIRE_TYPE_VARINT"/>
+	</class>
+	<class name="android/view/AbsSavedState" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V" since="24"/>
+		<method name="&lt;init>(Landroid/os/Parcelable;)V"/>
+		<method name="getSuperState()Landroid/os/Parcelable;"/>
+		<field name="CREATOR"/>
+		<field name="EMPTY_STATE"/>
+	</class>
+	<class name="android/view/ActionMode" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="finish()V"/>
+		<method name="getCustomView()Landroid/view/View;"/>
+		<method name="getMenu()Landroid/view/Menu;"/>
+		<method name="getMenuInflater()Landroid/view/MenuInflater;"/>
+		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
+		<method name="getTag()Ljava/lang/Object;" since="14"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="getTitleOptionalHint()Z" since="16"/>
+		<method name="getType()I" since="23"/>
+		<method name="hide(J)V" since="23"/>
+		<method name="invalidate()V"/>
+		<method name="invalidateContentRect()V" since="23"/>
+		<method name="isTitleOptional()Z" since="16"/>
+		<method name="onWindowFocusChanged(Z)V" since="23"/>
+		<method name="setCustomView(Landroid/view/View;)V"/>
+		<method name="setSubtitle(I)V"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setTag(Ljava/lang/Object;)V" since="14"/>
+		<method name="setTitle(I)V"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setTitleOptionalHint(Z)V" since="16"/>
+		<method name="setType(I)V" since="23"/>
+		<field name="DEFAULT_HIDE_DURATION" since="23"/>
+		<field name="TYPE_FLOATING" since="23"/>
+		<field name="TYPE_PRIMARY" since="23"/>
+	</class>
+	<class name="android/view/ActionMode$Callback" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onActionItemClicked(Landroid/view/ActionMode;Landroid/view/MenuItem;)Z"/>
+		<method name="onCreateActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z"/>
+		<method name="onDestroyActionMode(Landroid/view/ActionMode;)V"/>
+		<method name="onPrepareActionMode(Landroid/view/ActionMode;Landroid/view/Menu;)Z"/>
+	</class>
+	<class name="android/view/ActionMode$Callback2" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/ActionMode$Callback"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGetContentRect(Landroid/view/ActionMode;Landroid/view/View;Landroid/graphics/Rect;)V"/>
+	</class>
+	<class name="android/view/ActionProvider" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="hasSubMenu()Z"/>
+		<method name="isVisible()Z" since="16"/>
+		<method name="onCreateActionView()Landroid/view/View;" deprecated="16"/>
+		<method name="onCreateActionView(Landroid/view/MenuItem;)Landroid/view/View;" since="16"/>
+		<method name="onPerformDefaultAction()Z"/>
+		<method name="onPrepareSubMenu(Landroid/view/SubMenu;)V"/>
+		<method name="overridesItemVisibility()Z" since="16"/>
+		<method name="refreshVisibility()V" since="16"/>
+		<method name="setVisibilityListener(Landroid/view/ActionProvider$VisibilityListener;)V" since="16"/>
+	</class>
+	<class name="android/view/ActionProvider$VisibilityListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onActionProviderVisibilityChanged(Z)V"/>
+	</class>
+	<class name="android/view/AttachedSurfaceControl" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="addOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33"/>
+		<method name="applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z"/>
+		<method name="buildReparentTransaction(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="getBufferTransformHint()I" since="33"/>
+		<method name="removeOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33"/>
+	</class>
+	<class name="android/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener" since="33">
+		<method name="onBufferTransformHintChanged(I)V"/>
+	</class>
+	<class name="android/view/Choreographer" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="getInstance()Landroid/view/Choreographer;"/>
+		<method name="postFrameCallback(Landroid/view/Choreographer$FrameCallback;)V"/>
+		<method name="postFrameCallbackDelayed(Landroid/view/Choreographer$FrameCallback;J)V"/>
+		<method name="removeFrameCallback(Landroid/view/Choreographer$FrameCallback;)V"/>
+	</class>
+	<class name="android/view/Choreographer$FrameCallback" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="doFrame(J)V"/>
+	</class>
+	<class name="android/view/CollapsibleActionView" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onActionViewCollapsed()V"/>
+		<method name="onActionViewExpanded()V"/>
+	</class>
+	<class name="android/view/ContentInfo" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getClip()Landroid/content/ClipData;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getFlags()I"/>
+		<method name="getLinkUri()Landroid/net/Uri;"/>
+		<method name="getSource()I"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_CONVERT_TO_PLAIN_TEXT"/>
+		<field name="SOURCE_APP"/>
+		<field name="SOURCE_AUTOFILL"/>
+		<field name="SOURCE_CLIPBOARD"/>
+		<field name="SOURCE_DRAG_AND_DROP"/>
+		<field name="SOURCE_INPUT_METHOD"/>
+		<field name="SOURCE_PROCESS_TEXT"/>
+	</class>
+	<class name="android/view/ContentInfo$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/ClipData;I)V"/>
+		<method name="&lt;init>(Landroid/view/ContentInfo;)V"/>
+		<method name="build()Landroid/view/ContentInfo;"/>
+		<method name="setClip(Landroid/content/ClipData;)Landroid/view/ContentInfo$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/ContentInfo$Builder;"/>
+		<method name="setFlags(I)Landroid/view/ContentInfo$Builder;"/>
+		<method name="setLinkUri(Landroid/net/Uri;)Landroid/view/ContentInfo$Builder;"/>
+		<method name="setSource(I)Landroid/view/ContentInfo$Builder;"/>
+	</class>
+	<class name="android/view/ContextMenu" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/Menu"/>
+		<method name="clearHeader()V"/>
+		<method name="setHeaderIcon(I)Landroid/view/ContextMenu;"/>
+		<method name="setHeaderIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/ContextMenu;"/>
+		<method name="setHeaderTitle(I)Landroid/view/ContextMenu;"/>
+		<method name="setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/ContextMenu;"/>
+		<method name="setHeaderView(Landroid/view/View;)Landroid/view/ContextMenu;"/>
+	</class>
+	<class name="android/view/ContextMenu$ContextMenuInfo" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/view/ContextThemeWrapper" since="1">
+		<extends name="android/content/ContextWrapper"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/res/Resources$Theme;)V" since="23"/>
+		<method name="applyOverrideConfiguration(Landroid/content/res/Configuration;)V" since="17"/>
+		<method name="onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V"/>
+		<method name="setTheme(Landroid/content/res/Resources$Theme;)V" since="29"/>
+	</class>
+	<class name="android/view/Display" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getAppVsyncOffsetNanos()J" since="21"/>
+		<method name="getCurrentSizeRange(Landroid/graphics/Point;Landroid/graphics/Point;)V" since="16"/>
+		<method name="getCutout()Landroid/view/DisplayCutout;" since="29"/>
+		<method name="getDeviceProductInfo()Landroid/hardware/display/DeviceProductInfo;" since="31"/>
+		<method name="getDisplayId()I"/>
+		<method name="getFlags()I" since="17"/>
+		<method name="getHdrCapabilities()Landroid/view/Display$HdrCapabilities;" since="24"/>
+		<method name="getHeight()I" deprecated="15"/>
+		<method name="getMetrics(Landroid/util/DisplayMetrics;)V" deprecated="30"/>
+		<method name="getMode()Landroid/view/Display$Mode;" since="23"/>
+		<method name="getName()Ljava/lang/String;" since="17"/>
+		<method name="getOrientation()I" deprecated="15"/>
+		<method name="getPixelFormat()I" deprecated="17"/>
+		<method name="getPreferredWideGamutColorSpace()Landroid/graphics/ColorSpace;" since="29"/>
+		<method name="getPresentationDeadlineNanos()J" since="21"/>
+		<method name="getRealMetrics(Landroid/util/DisplayMetrics;)V" since="17" deprecated="31"/>
+		<method name="getRealSize(Landroid/graphics/Point;)V" since="17" deprecated="31"/>
+		<method name="getRectSize(Landroid/graphics/Rect;)V" since="13" deprecated="30"/>
+		<method name="getRefreshRate()F"/>
+		<method name="getRotation()I" since="8"/>
+		<method name="getRoundedCorner(I)Landroid/view/RoundedCorner;" since="31"/>
+		<method name="getSize(Landroid/graphics/Point;)V" since="13" deprecated="30"/>
+		<method name="getState()I" since="20"/>
+		<method name="getSupportedModes()[Landroid/view/Display$Mode;" since="23"/>
+		<method name="getSupportedRefreshRates()[F" since="21" deprecated="23"/>
+		<method name="getWidth()I" deprecated="15"/>
+		<method name="isHdr()Z" since="26"/>
+		<method name="isMinimalPostProcessingSupported()Z" since="30"/>
+		<method name="isValid()Z" since="17"/>
+		<method name="isWideColorGamut()Z" since="26"/>
+		<field name="DEFAULT_DISPLAY"/>
+		<field name="FLAG_PRESENTATION" since="19"/>
+		<field name="FLAG_PRIVATE" since="19"/>
+		<field name="FLAG_ROUND" since="23"/>
+		<field name="FLAG_SECURE" since="17"/>
+		<field name="FLAG_SUPPORTS_PROTECTED_BUFFERS" since="17"/>
+		<field name="INVALID_DISPLAY" since="23"/>
+		<field name="STATE_DOZE" since="21"/>
+		<field name="STATE_DOZE_SUSPEND" since="21"/>
+		<field name="STATE_DOZING" since="20" removed="21"/>
+		<field name="STATE_OFF" since="20"/>
+		<field name="STATE_ON" since="20"/>
+		<field name="STATE_ON_SUSPEND" since="28"/>
+		<field name="STATE_UNKNOWN" since="20"/>
+		<field name="STATE_VR" since="26"/>
+	</class>
+	<class name="android/view/Display$HdrCapabilities" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDesiredMaxAverageLuminance()F"/>
+		<method name="getDesiredMaxLuminance()F"/>
+		<method name="getDesiredMinLuminance()F"/>
+		<method name="getSupportedHdrTypes()[I"/>
+		<field name="CREATOR"/>
+		<field name="HDR_TYPE_DOLBY_VISION"/>
+		<field name="HDR_TYPE_HDR10"/>
+		<field name="HDR_TYPE_HDR10_PLUS" since="29"/>
+		<field name="HDR_TYPE_HLG"/>
+		<field name="INVALID_LUMINANCE"/>
+	</class>
+	<class name="android/view/Display$Mode" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAlternativeRefreshRates()[F" since="31"/>
+		<method name="getModeId()I"/>
+		<method name="getPhysicalHeight()I"/>
+		<method name="getPhysicalWidth()I"/>
+		<method name="getRefreshRate()F"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/DisplayCutout" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Insets;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;)V" since="29"/>
+		<method name="&lt;init>(Landroid/graphics/Insets;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Rect;Landroid/graphics/Insets;)V" since="30"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;Ljava/util/List;)V" deprecated="29"/>
+		<method name="getBoundingRectBottom()Landroid/graphics/Rect;" since="29"/>
+		<method name="getBoundingRectLeft()Landroid/graphics/Rect;" since="29"/>
+		<method name="getBoundingRectRight()Landroid/graphics/Rect;" since="29"/>
+		<method name="getBoundingRectTop()Landroid/graphics/Rect;" since="29"/>
+		<method name="getBoundingRects()Ljava/util/List;"/>
+		<method name="getCutoutPath()Landroid/graphics/Path;" since="31"/>
+		<method name="getSafeInsetBottom()I"/>
+		<method name="getSafeInsetLeft()I"/>
+		<method name="getSafeInsetRight()I"/>
+		<method name="getSafeInsetTop()I"/>
+		<method name="getWaterfallInsets()Landroid/graphics/Insets;" since="30"/>
+	</class>
+	<class name="android/view/DragAndDropPermissions" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="release()V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/DragEvent" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAction()I"/>
+		<method name="getClipData()Landroid/content/ClipData;"/>
+		<method name="getClipDescription()Landroid/content/ClipDescription;"/>
+		<method name="getLocalState()Ljava/lang/Object;"/>
+		<method name="getResult()Z"/>
+		<method name="getX()F"/>
+		<method name="getY()F"/>
+		<field name="ACTION_DRAG_ENDED"/>
+		<field name="ACTION_DRAG_ENTERED"/>
+		<field name="ACTION_DRAG_EXITED"/>
+		<field name="ACTION_DRAG_LOCATION"/>
+		<field name="ACTION_DRAG_STARTED"/>
+		<field name="ACTION_DROP"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/FocusFinder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="findNearestTouchable(Landroid/view/ViewGroup;III[I)Landroid/view/View;"/>
+		<method name="findNextFocus(Landroid/view/ViewGroup;Landroid/view/View;I)Landroid/view/View;"/>
+		<method name="findNextFocusFromRect(Landroid/view/ViewGroup;Landroid/graphics/Rect;I)Landroid/view/View;"/>
+		<method name="findNextKeyboardNavigationCluster(Landroid/view/View;Landroid/view/View;I)Landroid/view/View;" since="26"/>
+		<method name="getInstance()Landroid/view/FocusFinder;"/>
+	</class>
+	<class name="android/view/FrameMetrics" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/FrameMetrics;)V"/>
+		<method name="getMetric(I)J"/>
+		<field name="ANIMATION_DURATION"/>
+		<field name="COMMAND_ISSUE_DURATION"/>
+		<field name="DEADLINE" since="31"/>
+		<field name="DRAW_DURATION"/>
+		<field name="FIRST_DRAW_FRAME"/>
+		<field name="GPU_DURATION" since="31"/>
+		<field name="INPUT_HANDLING_DURATION"/>
+		<field name="INTENDED_VSYNC_TIMESTAMP" since="26"/>
+		<field name="LAYOUT_MEASURE_DURATION"/>
+		<field name="SWAP_BUFFERS_DURATION"/>
+		<field name="SYNC_DURATION"/>
+		<field name="TOTAL_DURATION"/>
+		<field name="UNKNOWN_DELAY_DURATION"/>
+		<field name="VSYNC_TIMESTAMP" since="26"/>
+	</class>
+	<class name="android/view/FrameStats" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getEndTimeNano()J"/>
+		<method name="getFrameCount()I"/>
+		<method name="getFramePresentedTimeNano(I)J"/>
+		<method name="getRefreshPeriodNano()J"/>
+		<method name="getStartTimeNano()J"/>
+		<field name="UNDEFINED_TIME_NANO"/>
+	</class>
+	<class name="android/view/GestureDetector" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;)V" since="3"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" since="3"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;Z)V" since="8"/>
+		<method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;)V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/view/GestureDetector$OnGestureListener;Landroid/os/Handler;)V" deprecated="15"/>
+		<method name="isLongpressEnabled()Z"/>
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="23"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="setContextClickListener(Landroid/view/GestureDetector$OnContextClickListener;)V" since="23"/>
+		<method name="setIsLongpressEnabled(Z)V"/>
+		<method name="setOnDoubleTapListener(Landroid/view/GestureDetector$OnDoubleTapListener;)V" since="3"/>
+	</class>
+	<class name="android/view/GestureDetector$OnContextClickListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onContextClick(Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/view/GestureDetector$OnDoubleTapListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onDoubleTap(Landroid/view/MotionEvent;)Z"/>
+		<method name="onDoubleTapEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onSingleTapConfirmed(Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/view/GestureDetector$OnGestureListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onDown(Landroid/view/MotionEvent;)Z"/>
+		<method name="onFling(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z"/>
+		<method name="onLongPress(Landroid/view/MotionEvent;)V"/>
+		<method name="onScroll(Landroid/view/MotionEvent;Landroid/view/MotionEvent;FF)Z"/>
+		<method name="onShowPress(Landroid/view/MotionEvent;)V"/>
+		<method name="onSingleTapUp(Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/view/GestureDetector$SimpleOnGestureListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/GestureDetector$OnContextClickListener" since="23"/>
+		<implements name="android/view/GestureDetector$OnDoubleTapListener" since="3"/>
+		<implements name="android/view/GestureDetector$OnGestureListener"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/view/Gravity" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;)V"/>
+		<method name="apply(IIILandroid/graphics/Rect;IILandroid/graphics/Rect;I)V" since="17"/>
+		<method name="apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;)V"/>
+		<method name="apply(IIILandroid/graphics/Rect;Landroid/graphics/Rect;I)V" since="17"/>
+		<method name="applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;)V" since="3"/>
+		<method name="applyDisplay(ILandroid/graphics/Rect;Landroid/graphics/Rect;I)V" since="17"/>
+		<method name="getAbsoluteGravity(II)I" since="14"/>
+		<method name="isHorizontal(I)Z"/>
+		<method name="isVertical(I)Z"/>
+		<field name="AXIS_CLIP" since="3"/>
+		<field name="AXIS_PULL_AFTER"/>
+		<field name="AXIS_PULL_BEFORE"/>
+		<field name="AXIS_SPECIFIED"/>
+		<field name="AXIS_X_SHIFT"/>
+		<field name="AXIS_Y_SHIFT"/>
+		<field name="BOTTOM"/>
+		<field name="CENTER"/>
+		<field name="CENTER_HORIZONTAL"/>
+		<field name="CENTER_VERTICAL"/>
+		<field name="CLIP_HORIZONTAL" since="3"/>
+		<field name="CLIP_VERTICAL" since="3"/>
+		<field name="DISPLAY_CLIP_HORIZONTAL" since="3"/>
+		<field name="DISPLAY_CLIP_VERTICAL" since="3"/>
+		<field name="END" since="14"/>
+		<field name="FILL"/>
+		<field name="FILL_HORIZONTAL"/>
+		<field name="FILL_VERTICAL"/>
+		<field name="HORIZONTAL_GRAVITY_MASK"/>
+		<field name="LEFT"/>
+		<field name="NO_GRAVITY"/>
+		<field name="RELATIVE_HORIZONTAL_GRAVITY_MASK" since="14"/>
+		<field name="RELATIVE_LAYOUT_DIRECTION" since="14"/>
+		<field name="RIGHT"/>
+		<field name="START" since="14"/>
+		<field name="TOP"/>
+		<field name="VERTICAL_GRAVITY_MASK"/>
+	</class>
+	<class name="android/view/HapticFeedbackConstants" since="3">
+		<extends name="java/lang/Object"/>
+		<field name="CLOCK_TICK" since="21"/>
+		<field name="CONFIRM" since="30"/>
+		<field name="CONTEXT_CLICK" since="23"/>
+		<field name="FLAG_IGNORE_GLOBAL_SETTING"/>
+		<field name="FLAG_IGNORE_VIEW_SETTING"/>
+		<field name="GESTURE_END" since="30"/>
+		<field name="GESTURE_START" since="30"/>
+		<field name="KEYBOARD_PRESS" since="27"/>
+		<field name="KEYBOARD_RELEASE" since="27"/>
+		<field name="KEYBOARD_TAP" since="8"/>
+		<field name="LONG_PRESS"/>
+		<field name="REJECT" since="30"/>
+		<field name="TEXT_HANDLE_MOVE" since="27"/>
+		<field name="VIRTUAL_KEY" since="5"/>
+		<field name="VIRTUAL_KEY_RELEASE" since="27"/>
+	</class>
+	<class name="android/view/InflateException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="android/view/InputDevice" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getBatteryState()Landroid/hardware/BatteryState;" since="31"/>
+		<method name="getControllerNumber()I" since="19"/>
+		<method name="getDescriptor()Ljava/lang/String;" since="16"/>
+		<method name="getDevice(I)Landroid/view/InputDevice;"/>
+		<method name="getDeviceIds()[I"/>
+		<method name="getId()I"/>
+		<method name="getKeyCharacterMap()Landroid/view/KeyCharacterMap;"/>
+		<method name="getKeyboardType()I"/>
+		<method name="getLightsManager()Landroid/hardware/lights/LightsManager;" since="31"/>
+		<method name="getMotionRange(I)Landroid/view/InputDevice$MotionRange;"/>
+		<method name="getMotionRange(II)Landroid/view/InputDevice$MotionRange;" since="12"/>
+		<method name="getMotionRanges()Ljava/util/List;" since="12"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getProductId()I" since="19"/>
+		<method name="getSensorManager()Landroid/hardware/SensorManager;" since="31"/>
+		<method name="getSources()I"/>
+		<method name="getVendorId()I" since="19"/>
+		<method name="getVibrator()Landroid/os/Vibrator;" since="16" deprecated="31"/>
+		<method name="getVibratorManager()Landroid/os/VibratorManager;" since="31"/>
+		<method name="hasKeys([I)[Z" since="19"/>
+		<method name="hasMicrophone()Z" since="23"/>
+		<method name="isEnabled()Z" since="27"/>
+		<method name="isExternal()Z" since="29"/>
+		<method name="isVirtual()Z" since="16"/>
+		<method name="supportsSource(I)Z" since="21"/>
+		<field name="CREATOR"/>
+		<field name="KEYBOARD_TYPE_ALPHABETIC"/>
+		<field name="KEYBOARD_TYPE_NONE"/>
+		<field name="KEYBOARD_TYPE_NON_ALPHABETIC"/>
+		<field name="MOTION_RANGE_ORIENTATION" deprecated="15"/>
+		<field name="MOTION_RANGE_PRESSURE" deprecated="15"/>
+		<field name="MOTION_RANGE_SIZE" deprecated="15"/>
+		<field name="MOTION_RANGE_TOOL_MAJOR" deprecated="15"/>
+		<field name="MOTION_RANGE_TOOL_MINOR" deprecated="15"/>
+		<field name="MOTION_RANGE_TOUCH_MAJOR" deprecated="15"/>
+		<field name="MOTION_RANGE_TOUCH_MINOR" deprecated="15"/>
+		<field name="MOTION_RANGE_X" deprecated="15"/>
+		<field name="MOTION_RANGE_Y" deprecated="15"/>
+		<field name="SOURCE_ANY"/>
+		<field name="SOURCE_BLUETOOTH_STYLUS" since="23"/>
+		<field name="SOURCE_CLASS_BUTTON"/>
+		<field name="SOURCE_CLASS_JOYSTICK" since="12"/>
+		<field name="SOURCE_CLASS_MASK"/>
+		<field name="SOURCE_CLASS_NONE" since="18"/>
+		<field name="SOURCE_CLASS_POINTER"/>
+		<field name="SOURCE_CLASS_POSITION"/>
+		<field name="SOURCE_CLASS_TRACKBALL"/>
+		<field name="SOURCE_DPAD"/>
+		<field name="SOURCE_GAMEPAD" since="12"/>
+		<field name="SOURCE_HDMI" since="21"/>
+		<field name="SOURCE_JOYSTICK" since="12"/>
+		<field name="SOURCE_KEYBOARD"/>
+		<field name="SOURCE_MOUSE"/>
+		<field name="SOURCE_MOUSE_RELATIVE" since="26"/>
+		<field name="SOURCE_ROTARY_ENCODER" since="26"/>
+		<field name="SOURCE_SENSOR" since="31"/>
+		<field name="SOURCE_STYLUS" since="14"/>
+		<field name="SOURCE_TOUCHPAD"/>
+		<field name="SOURCE_TOUCHSCREEN"/>
+		<field name="SOURCE_TOUCH_NAVIGATION" since="18"/>
+		<field name="SOURCE_TRACKBALL"/>
+		<field name="SOURCE_UNKNOWN"/>
+	</class>
+	<class name="android/view/InputDevice$MotionRange" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="getAxis()I" since="12"/>
+		<method name="getFlat()F"/>
+		<method name="getFuzz()F"/>
+		<method name="getMax()F"/>
+		<method name="getMin()F"/>
+		<method name="getRange()F"/>
+		<method name="getResolution()F" since="18"/>
+		<method name="getSource()I" since="12"/>
+		<method name="isFromSource(I)Z" since="18"/>
+	</class>
+	<class name="android/view/InputEvent" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDevice()Landroid/view/InputDevice;"/>
+		<method name="getDeviceId()I"/>
+		<method name="getEventTime()J" since="16"/>
+		<method name="getSource()I"/>
+		<method name="isFromSource(I)Z" since="18"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/InputQueue" since="9">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/view/InputQueue$Callback" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="onInputQueueCreated(Landroid/view/InputQueue;)V"/>
+		<method name="onInputQueueDestroyed(Landroid/view/InputQueue;)V"/>
+	</class>
+	<class name="android/view/KeyCharacterMap" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="16"/>
+		<method name="deviceHasKey(I)Z" since="3"/>
+		<method name="deviceHasKeys([I)[Z" since="3"/>
+		<method name="get(II)I"/>
+		<method name="getDeadChar(II)I"/>
+		<method name="getDisplayLabel(I)C"/>
+		<method name="getEvents([C)[Landroid/view/KeyEvent;"/>
+		<method name="getKeyData(ILandroid/view/KeyCharacterMap$KeyData;)Z" deprecated="15"/>
+		<method name="getKeyboardType()I"/>
+		<method name="getMatch(I[C)C"/>
+		<method name="getMatch(I[CI)C"/>
+		<method name="getModifierBehavior()I" since="11"/>
+		<method name="getNumber(I)C"/>
+		<method name="isPrintingKey(I)Z"/>
+		<method name="load(I)Landroid/view/KeyCharacterMap;"/>
+		<field name="ALPHA"/>
+		<field name="BUILT_IN_KEYBOARD" deprecated="15"/>
+		<field name="COMBINING_ACCENT"/>
+		<field name="COMBINING_ACCENT_MASK"/>
+		<field name="CREATOR" since="16"/>
+		<field name="FULL" since="11"/>
+		<field name="HEX_INPUT"/>
+		<field name="MODIFIER_BEHAVIOR_CHORDED" since="11"/>
+		<field name="MODIFIER_BEHAVIOR_CHORDED_OR_TOGGLED" since="11"/>
+		<field name="NUMERIC"/>
+		<field name="PICKER_DIALOG_INPUT"/>
+		<field name="PREDICTIVE"/>
+		<field name="SPECIAL_FUNCTION" since="11"/>
+		<field name="VIRTUAL_KEYBOARD" since="11"/>
+	</class>
+	<class name="android/view/KeyCharacterMap$KeyData" since="1" deprecated="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<field name="META_LENGTH" deprecated="29"/>
+		<field name="displayLabel" deprecated="29"/>
+		<field name="meta" deprecated="29"/>
+		<field name="number" deprecated="29"/>
+	</class>
+	<class name="android/view/KeyCharacterMap$UnavailableException" since="11">
+		<extends name="android/util/AndroidRuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/view/KeyEvent" since="1">
+		<extends name="android/view/InputEvent" since="9"/>
+		<extends name="java/lang/Object" removed="9"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(JJIII)V"/>
+		<method name="&lt;init>(JJIIII)V"/>
+		<method name="&lt;init>(JJIIIIII)V"/>
+		<method name="&lt;init>(JJIIIIIII)V"/>
+		<method name="&lt;init>(JJIIIIIIII)V" since="9"/>
+		<method name="&lt;init>(JLjava/lang/String;II)V" since="3"/>
+		<method name="&lt;init>(Landroid/view/KeyEvent;)V" since="3"/>
+		<method name="&lt;init>(Landroid/view/KeyEvent;JI)V" deprecated="15"/>
+		<method name="changeAction(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3"/>
+		<method name="changeFlags(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;" since="3"/>
+		<method name="changeTimeRepeat(Landroid/view/KeyEvent;JI)Landroid/view/KeyEvent;" since="3"/>
+		<method name="changeTimeRepeat(Landroid/view/KeyEvent;JII)Landroid/view/KeyEvent;" since="5"/>
+		<method name="dispatch(Landroid/view/KeyEvent$Callback;)Z" deprecated="15"/>
+		<method name="dispatch(Landroid/view/KeyEvent$Callback;Landroid/view/KeyEvent$DispatcherState;Ljava/lang/Object;)Z" since="5"/>
+		<method name="getAction()I"/>
+		<method name="getCharacters()Ljava/lang/String;" since="3" deprecated="29"/>
+		<method name="getDeadChar(II)I"/>
+		<method name="getDeviceId()I"/>
+		<method name="getDisplayLabel()C"/>
+		<method name="getDownTime()J"/>
+		<method name="getEventTime()J"/>
+		<method name="getFlags()I"/>
+		<method name="getKeyCharacterMap()Landroid/view/KeyCharacterMap;" since="11"/>
+		<method name="getKeyCode()I"/>
+		<method name="getKeyData(Landroid/view/KeyCharacterMap$KeyData;)Z" deprecated="15"/>
+		<method name="getMatch([C)C"/>
+		<method name="getMatch([CI)C"/>
+		<method name="getMaxKeyCode()I" since="3"/>
+		<method name="getMetaState()I"/>
+		<method name="getModifierMetaStateMask()I" since="11"/>
+		<method name="getModifiers()I" since="13"/>
+		<method name="getNumber()C"/>
+		<method name="getRepeatCount()I"/>
+		<method name="getScanCode()I"/>
+		<method name="getUnicodeChar()I"/>
+		<method name="getUnicodeChar(I)I"/>
+		<method name="hasModifiers(I)Z" since="11"/>
+		<method name="hasNoModifiers()Z" since="11"/>
+		<method name="isAltPressed()Z"/>
+		<method name="isCanceled()Z" since="5"/>
+		<method name="isCapsLockOn()Z" since="11"/>
+		<method name="isCtrlPressed()Z" since="11"/>
+		<method name="isFunctionPressed()Z" since="11"/>
+		<method name="isGamepadButton(I)Z" since="12"/>
+		<method name="isLongPress()Z" since="5"/>
+		<method name="isMediaSessionKey(I)Z" since="31"/>
+		<method name="isMetaPressed()Z" since="11"/>
+		<method name="isModifierKey(I)Z"/>
+		<method name="isNumLockOn()Z" since="11"/>
+		<method name="isPrintingKey()Z"/>
+		<method name="isScrollLockOn()Z" since="11"/>
+		<method name="isShiftPressed()Z"/>
+		<method name="isSymPressed()Z"/>
+		<method name="isSystem()Z"/>
+		<method name="isTracking()Z" since="5"/>
+		<method name="keyCodeFromString(Ljava/lang/String;)I" since="12"/>
+		<method name="keyCodeToString(I)Ljava/lang/String;" since="12"/>
+		<method name="metaStateHasModifiers(II)Z" since="11"/>
+		<method name="metaStateHasNoModifiers(I)Z" since="11"/>
+		<method name="normalizeMetaState(I)I" since="11"/>
+		<method name="setSource(I)V" since="12"/>
+		<method name="startTracking()V" since="5"/>
+		<field name="ACTION_DOWN"/>
+		<field name="ACTION_MULTIPLE" deprecated="29"/>
+		<field name="ACTION_UP"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_CANCELED" since="5"/>
+		<field name="FLAG_CANCELED_LONG_PRESS" since="5"/>
+		<field name="FLAG_EDITOR_ACTION" since="3"/>
+		<field name="FLAG_FALLBACK" since="11"/>
+		<field name="FLAG_FROM_SYSTEM" since="3"/>
+		<field name="FLAG_KEEP_TOUCH_MODE" since="3"/>
+		<field name="FLAG_LONG_PRESS" since="5"/>
+		<field name="FLAG_SOFT_KEYBOARD" since="3"/>
+		<field name="FLAG_TRACKING" since="5"/>
+		<field name="FLAG_VIRTUAL_HARD_KEY" since="5"/>
+		<field name="FLAG_WOKE_HERE" deprecated="20"/>
+		<field name="KEYCODE_0"/>
+		<field name="KEYCODE_1"/>
+		<field name="KEYCODE_11" since="21"/>
+		<field name="KEYCODE_12" since="21"/>
+		<field name="KEYCODE_2"/>
+		<field name="KEYCODE_3"/>
+		<field name="KEYCODE_3D_MODE" since="14"/>
+		<field name="KEYCODE_4"/>
+		<field name="KEYCODE_5"/>
+		<field name="KEYCODE_6"/>
+		<field name="KEYCODE_7"/>
+		<field name="KEYCODE_8"/>
+		<field name="KEYCODE_9"/>
+		<field name="KEYCODE_A"/>
+		<field name="KEYCODE_ALL_APPS" since="28"/>
+		<field name="KEYCODE_ALT_LEFT"/>
+		<field name="KEYCODE_ALT_RIGHT"/>
+		<field name="KEYCODE_APOSTROPHE"/>
+		<field name="KEYCODE_APP_SWITCH" since="11"/>
+		<field name="KEYCODE_ASSIST" since="16"/>
+		<field name="KEYCODE_AT"/>
+		<field name="KEYCODE_AVR_INPUT" since="11"/>
+		<field name="KEYCODE_AVR_POWER" since="11"/>
+		<field name="KEYCODE_B"/>
+		<field name="KEYCODE_BACK"/>
+		<field name="KEYCODE_BACKSLASH"/>
+		<field name="KEYCODE_BOOKMARK" since="11"/>
+		<field name="KEYCODE_BREAK" since="11"/>
+		<field name="KEYCODE_BRIGHTNESS_DOWN" since="18"/>
+		<field name="KEYCODE_BRIGHTNESS_UP" since="18"/>
+		<field name="KEYCODE_BUTTON_1" since="12"/>
+		<field name="KEYCODE_BUTTON_10" since="12"/>
+		<field name="KEYCODE_BUTTON_11" since="12"/>
+		<field name="KEYCODE_BUTTON_12" since="12"/>
+		<field name="KEYCODE_BUTTON_13" since="12"/>
+		<field name="KEYCODE_BUTTON_14" since="12"/>
+		<field name="KEYCODE_BUTTON_15" since="12"/>
+		<field name="KEYCODE_BUTTON_16" since="12"/>
+		<field name="KEYCODE_BUTTON_2" since="12"/>
+		<field name="KEYCODE_BUTTON_3" since="12"/>
+		<field name="KEYCODE_BUTTON_4" since="12"/>
+		<field name="KEYCODE_BUTTON_5" since="12"/>
+		<field name="KEYCODE_BUTTON_6" since="12"/>
+		<field name="KEYCODE_BUTTON_7" since="12"/>
+		<field name="KEYCODE_BUTTON_8" since="12"/>
+		<field name="KEYCODE_BUTTON_9" since="12"/>
+		<field name="KEYCODE_BUTTON_A" since="9"/>
+		<field name="KEYCODE_BUTTON_B" since="9"/>
+		<field name="KEYCODE_BUTTON_C" since="9"/>
+		<field name="KEYCODE_BUTTON_L1" since="9"/>
+		<field name="KEYCODE_BUTTON_L2" since="9"/>
+		<field name="KEYCODE_BUTTON_MODE" since="9"/>
+		<field name="KEYCODE_BUTTON_R1" since="9"/>
+		<field name="KEYCODE_BUTTON_R2" since="9"/>
+		<field name="KEYCODE_BUTTON_SELECT" since="9"/>
+		<field name="KEYCODE_BUTTON_START" since="9"/>
+		<field name="KEYCODE_BUTTON_THUMBL" since="9"/>
+		<field name="KEYCODE_BUTTON_THUMBR" since="9"/>
+		<field name="KEYCODE_BUTTON_X" since="9"/>
+		<field name="KEYCODE_BUTTON_Y" since="9"/>
+		<field name="KEYCODE_BUTTON_Z" since="9"/>
+		<field name="KEYCODE_C"/>
+		<field name="KEYCODE_CALCULATOR" since="15"/>
+		<field name="KEYCODE_CALENDAR" since="15"/>
+		<field name="KEYCODE_CALL"/>
+		<field name="KEYCODE_CAMERA"/>
+		<field name="KEYCODE_CAPS_LOCK" since="11"/>
+		<field name="KEYCODE_CAPTIONS" since="11"/>
+		<field name="KEYCODE_CHANNEL_DOWN" since="11"/>
+		<field name="KEYCODE_CHANNEL_UP" since="11"/>
+		<field name="KEYCODE_CLEAR"/>
+		<field name="KEYCODE_COMMA"/>
+		<field name="KEYCODE_CONTACTS" since="15"/>
+		<field name="KEYCODE_COPY" since="24"/>
+		<field name="KEYCODE_CTRL_LEFT" since="11"/>
+		<field name="KEYCODE_CTRL_RIGHT" since="11"/>
+		<field name="KEYCODE_CUT" since="24"/>
+		<field name="KEYCODE_D"/>
+		<field name="KEYCODE_DEL"/>
+		<field name="KEYCODE_DPAD_CENTER"/>
+		<field name="KEYCODE_DPAD_DOWN"/>
+		<field name="KEYCODE_DPAD_DOWN_LEFT" since="24"/>
+		<field name="KEYCODE_DPAD_DOWN_RIGHT" since="24"/>
+		<field name="KEYCODE_DPAD_LEFT"/>
+		<field name="KEYCODE_DPAD_RIGHT"/>
+		<field name="KEYCODE_DPAD_UP"/>
+		<field name="KEYCODE_DPAD_UP_LEFT" since="24"/>
+		<field name="KEYCODE_DPAD_UP_RIGHT" since="24"/>
+		<field name="KEYCODE_DVR" since="11"/>
+		<field name="KEYCODE_E"/>
+		<field name="KEYCODE_EISU" since="16"/>
+		<field name="KEYCODE_ENDCALL"/>
+		<field name="KEYCODE_ENTER"/>
+		<field name="KEYCODE_ENVELOPE"/>
+		<field name="KEYCODE_EQUALS"/>
+		<field name="KEYCODE_ESCAPE" since="11"/>
+		<field name="KEYCODE_EXPLORER"/>
+		<field name="KEYCODE_F"/>
+		<field name="KEYCODE_F1" since="11"/>
+		<field name="KEYCODE_F10" since="11"/>
+		<field name="KEYCODE_F11" since="11"/>
+		<field name="KEYCODE_F12" since="11"/>
+		<field name="KEYCODE_F2" since="11"/>
+		<field name="KEYCODE_F3" since="11"/>
+		<field name="KEYCODE_F4" since="11"/>
+		<field name="KEYCODE_F5" since="11"/>
+		<field name="KEYCODE_F6" since="11"/>
+		<field name="KEYCODE_F7" since="11"/>
+		<field name="KEYCODE_F8" since="11"/>
+		<field name="KEYCODE_F9" since="11"/>
+		<field name="KEYCODE_FOCUS"/>
+		<field name="KEYCODE_FORWARD" since="11"/>
+		<field name="KEYCODE_FORWARD_DEL" since="11"/>
+		<field name="KEYCODE_FUNCTION" since="11"/>
+		<field name="KEYCODE_G"/>
+		<field name="KEYCODE_GRAVE"/>
+		<field name="KEYCODE_GUIDE" since="11"/>
+		<field name="KEYCODE_H"/>
+		<field name="KEYCODE_HEADSETHOOK"/>
+		<field name="KEYCODE_HELP" since="21"/>
+		<field name="KEYCODE_HENKAN" since="16"/>
+		<field name="KEYCODE_HOME"/>
+		<field name="KEYCODE_I"/>
+		<field name="KEYCODE_INFO" since="11"/>
+		<field name="KEYCODE_INSERT" since="11"/>
+		<field name="KEYCODE_J"/>
+		<field name="KEYCODE_K"/>
+		<field name="KEYCODE_KANA" since="16"/>
+		<field name="KEYCODE_KATAKANA_HIRAGANA" since="16"/>
+		<field name="KEYCODE_L"/>
+		<field name="KEYCODE_LANGUAGE_SWITCH" since="14"/>
+		<field name="KEYCODE_LAST_CHANNEL" since="21"/>
+		<field name="KEYCODE_LEFT_BRACKET"/>
+		<field name="KEYCODE_M"/>
+		<field name="KEYCODE_MANNER_MODE" since="14"/>
+		<field name="KEYCODE_MEDIA_AUDIO_TRACK" since="19"/>
+		<field name="KEYCODE_MEDIA_CLOSE" since="11"/>
+		<field name="KEYCODE_MEDIA_EJECT" since="11"/>
+		<field name="KEYCODE_MEDIA_FAST_FORWARD" since="3"/>
+		<field name="KEYCODE_MEDIA_NEXT" since="3"/>
+		<field name="KEYCODE_MEDIA_PAUSE" since="11"/>
+		<field name="KEYCODE_MEDIA_PLAY" since="11"/>
+		<field name="KEYCODE_MEDIA_PLAY_PAUSE" since="3"/>
+		<field name="KEYCODE_MEDIA_PREVIOUS" since="3"/>
+		<field name="KEYCODE_MEDIA_RECORD" since="11"/>
+		<field name="KEYCODE_MEDIA_REWIND" since="3"/>
+		<field name="KEYCODE_MEDIA_SKIP_BACKWARD" since="23"/>
+		<field name="KEYCODE_MEDIA_SKIP_FORWARD" since="23"/>
+		<field name="KEYCODE_MEDIA_STEP_BACKWARD" since="23"/>
+		<field name="KEYCODE_MEDIA_STEP_FORWARD" since="23"/>
+		<field name="KEYCODE_MEDIA_STOP" since="3"/>
+		<field name="KEYCODE_MEDIA_TOP_MENU" since="21"/>
+		<field name="KEYCODE_MENU"/>
+		<field name="KEYCODE_META_LEFT" since="11"/>
+		<field name="KEYCODE_META_RIGHT" since="11"/>
+		<field name="KEYCODE_MINUS"/>
+		<field name="KEYCODE_MOVE_END" since="11"/>
+		<field name="KEYCODE_MOVE_HOME" since="11"/>
+		<field name="KEYCODE_MUHENKAN" since="16"/>
+		<field name="KEYCODE_MUSIC" since="15"/>
+		<field name="KEYCODE_MUTE" since="3"/>
+		<field name="KEYCODE_N"/>
+		<field name="KEYCODE_NAVIGATE_IN" since="23"/>
+		<field name="KEYCODE_NAVIGATE_NEXT" since="23"/>
+		<field name="KEYCODE_NAVIGATE_OUT" since="23"/>
+		<field name="KEYCODE_NAVIGATE_PREVIOUS" since="23"/>
+		<field name="KEYCODE_NOTIFICATION"/>
+		<field name="KEYCODE_NUM"/>
+		<field name="KEYCODE_NUMPAD_0" since="11"/>
+		<field name="KEYCODE_NUMPAD_1" since="11"/>
+		<field name="KEYCODE_NUMPAD_2" since="11"/>
+		<field name="KEYCODE_NUMPAD_3" since="11"/>
+		<field name="KEYCODE_NUMPAD_4" since="11"/>
+		<field name="KEYCODE_NUMPAD_5" since="11"/>
+		<field name="KEYCODE_NUMPAD_6" since="11"/>
+		<field name="KEYCODE_NUMPAD_7" since="11"/>
+		<field name="KEYCODE_NUMPAD_8" since="11"/>
+		<field name="KEYCODE_NUMPAD_9" since="11"/>
+		<field name="KEYCODE_NUMPAD_ADD" since="11"/>
+		<field name="KEYCODE_NUMPAD_COMMA" since="11"/>
+		<field name="KEYCODE_NUMPAD_DIVIDE" since="11"/>
+		<field name="KEYCODE_NUMPAD_DOT" since="11"/>
+		<field name="KEYCODE_NUMPAD_ENTER" since="11"/>
+		<field name="KEYCODE_NUMPAD_EQUALS" since="11"/>
+		<field name="KEYCODE_NUMPAD_LEFT_PAREN" since="11"/>
+		<field name="KEYCODE_NUMPAD_MULTIPLY" since="11"/>
+		<field name="KEYCODE_NUMPAD_RIGHT_PAREN" since="11"/>
+		<field name="KEYCODE_NUMPAD_SUBTRACT" since="11"/>
+		<field name="KEYCODE_NUM_LOCK" since="11"/>
+		<field name="KEYCODE_O"/>
+		<field name="KEYCODE_P"/>
+		<field name="KEYCODE_PAGE_DOWN" since="9"/>
+		<field name="KEYCODE_PAGE_UP" since="9"/>
+		<field name="KEYCODE_PAIRING" since="21"/>
+		<field name="KEYCODE_PASTE" since="24"/>
+		<field name="KEYCODE_PERIOD"/>
+		<field name="KEYCODE_PICTSYMBOLS" since="9"/>
+		<field name="KEYCODE_PLUS"/>
+		<field name="KEYCODE_POUND"/>
+		<field name="KEYCODE_POWER"/>
+		<field name="KEYCODE_PROFILE_SWITCH" since="29"/>
+		<field name="KEYCODE_PROG_BLUE" since="11"/>
+		<field name="KEYCODE_PROG_GREEN" since="11"/>
+		<field name="KEYCODE_PROG_RED" since="11"/>
+		<field name="KEYCODE_PROG_YELLOW" since="11"/>
+		<field name="KEYCODE_Q"/>
+		<field name="KEYCODE_R"/>
+		<field name="KEYCODE_REFRESH" since="28"/>
+		<field name="KEYCODE_RIGHT_BRACKET"/>
+		<field name="KEYCODE_RO" since="16"/>
+		<field name="KEYCODE_S"/>
+		<field name="KEYCODE_SCROLL_LOCK" since="11"/>
+		<field name="KEYCODE_SEARCH"/>
+		<field name="KEYCODE_SEMICOLON"/>
+		<field name="KEYCODE_SETTINGS" since="11"/>
+		<field name="KEYCODE_SHIFT_LEFT"/>
+		<field name="KEYCODE_SHIFT_RIGHT"/>
+		<field name="KEYCODE_SLASH"/>
+		<field name="KEYCODE_SLEEP" since="20"/>
+		<field name="KEYCODE_SOFT_LEFT"/>
+		<field name="KEYCODE_SOFT_RIGHT"/>
+		<field name="KEYCODE_SOFT_SLEEP" since="24"/>
+		<field name="KEYCODE_SPACE"/>
+		<field name="KEYCODE_STAR"/>
+		<field name="KEYCODE_STB_INPUT" since="11"/>
+		<field name="KEYCODE_STB_POWER" since="11"/>
+		<field name="KEYCODE_STEM_1" since="24"/>
+		<field name="KEYCODE_STEM_2" since="24"/>
+		<field name="KEYCODE_STEM_3" since="24"/>
+		<field name="KEYCODE_STEM_PRIMARY" since="24"/>
+		<field name="KEYCODE_SWITCH_CHARSET" since="9"/>
+		<field name="KEYCODE_SYM"/>
+		<field name="KEYCODE_SYSRQ" since="11"/>
+		<field name="KEYCODE_SYSTEM_NAVIGATION_DOWN" since="25"/>
+		<field name="KEYCODE_SYSTEM_NAVIGATION_LEFT" since="25"/>
+		<field name="KEYCODE_SYSTEM_NAVIGATION_RIGHT" since="25"/>
+		<field name="KEYCODE_SYSTEM_NAVIGATION_UP" since="25"/>
+		<field name="KEYCODE_T"/>
+		<field name="KEYCODE_TAB"/>
+		<field name="KEYCODE_THUMBS_DOWN" since="29"/>
+		<field name="KEYCODE_THUMBS_UP" since="29"/>
+		<field name="KEYCODE_TV" since="11"/>
+		<field name="KEYCODE_TV_ANTENNA_CABLE" since="21"/>
+		<field name="KEYCODE_TV_AUDIO_DESCRIPTION" since="21"/>
+		<field name="KEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN" since="21"/>
+		<field name="KEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP" since="21"/>
+		<field name="KEYCODE_TV_CONTENTS_MENU" since="21"/>
+		<field name="KEYCODE_TV_DATA_SERVICE" since="21"/>
+		<field name="KEYCODE_TV_INPUT" since="11"/>
+		<field name="KEYCODE_TV_INPUT_COMPONENT_1" since="21"/>
+		<field name="KEYCODE_TV_INPUT_COMPONENT_2" since="21"/>
+		<field name="KEYCODE_TV_INPUT_COMPOSITE_1" since="21"/>
+		<field name="KEYCODE_TV_INPUT_COMPOSITE_2" since="21"/>
+		<field name="KEYCODE_TV_INPUT_HDMI_1" since="21"/>
+		<field name="KEYCODE_TV_INPUT_HDMI_2" since="21"/>
+		<field name="KEYCODE_TV_INPUT_HDMI_3" since="21"/>
+		<field name="KEYCODE_TV_INPUT_HDMI_4" since="21"/>
+		<field name="KEYCODE_TV_INPUT_VGA_1" since="21"/>
+		<field name="KEYCODE_TV_MEDIA_CONTEXT_MENU" since="21"/>
+		<field name="KEYCODE_TV_NETWORK" since="21"/>
+		<field name="KEYCODE_TV_NUMBER_ENTRY" since="21"/>
+		<field name="KEYCODE_TV_POWER" since="11"/>
+		<field name="KEYCODE_TV_RADIO_SERVICE" since="21"/>
+		<field name="KEYCODE_TV_SATELLITE" since="21"/>
+		<field name="KEYCODE_TV_SATELLITE_BS" since="21"/>
+		<field name="KEYCODE_TV_SATELLITE_CS" since="21"/>
+		<field name="KEYCODE_TV_SATELLITE_SERVICE" since="21"/>
+		<field name="KEYCODE_TV_TELETEXT" since="21"/>
+		<field name="KEYCODE_TV_TERRESTRIAL_ANALOG" since="21"/>
+		<field name="KEYCODE_TV_TERRESTRIAL_DIGITAL" since="21"/>
+		<field name="KEYCODE_TV_TIMER_PROGRAMMING" since="21"/>
+		<field name="KEYCODE_TV_ZOOM_MODE" since="21"/>
+		<field name="KEYCODE_U"/>
+		<field name="KEYCODE_UNKNOWN"/>
+		<field name="KEYCODE_V"/>
+		<field name="KEYCODE_VOICE_ASSIST" since="21"/>
+		<field name="KEYCODE_VOLUME_DOWN"/>
+		<field name="KEYCODE_VOLUME_MUTE" since="11"/>
+		<field name="KEYCODE_VOLUME_UP"/>
+		<field name="KEYCODE_W"/>
+		<field name="KEYCODE_WAKEUP" since="20"/>
+		<field name="KEYCODE_WINDOW" since="11"/>
+		<field name="KEYCODE_X"/>
+		<field name="KEYCODE_Y"/>
+		<field name="KEYCODE_YEN" since="16"/>
+		<field name="KEYCODE_Z"/>
+		<field name="KEYCODE_ZENKAKU_HANKAKU" since="16"/>
+		<field name="KEYCODE_ZOOM_IN" since="11"/>
+		<field name="KEYCODE_ZOOM_OUT" since="11"/>
+		<field name="MAX_KEYCODE" deprecated="15"/>
+		<field name="META_ALT_LEFT_ON"/>
+		<field name="META_ALT_MASK" since="11"/>
+		<field name="META_ALT_ON"/>
+		<field name="META_ALT_RIGHT_ON"/>
+		<field name="META_CAPS_LOCK_ON" since="11"/>
+		<field name="META_CTRL_LEFT_ON" since="11"/>
+		<field name="META_CTRL_MASK" since="11"/>
+		<field name="META_CTRL_ON" since="11"/>
+		<field name="META_CTRL_RIGHT_ON" since="11"/>
+		<field name="META_FUNCTION_ON" since="11"/>
+		<field name="META_META_LEFT_ON" since="11"/>
+		<field name="META_META_MASK" since="11"/>
+		<field name="META_META_ON" since="11"/>
+		<field name="META_META_RIGHT_ON" since="11"/>
+		<field name="META_NUM_LOCK_ON" since="11"/>
+		<field name="META_SCROLL_LOCK_ON" since="11"/>
+		<field name="META_SHIFT_LEFT_ON"/>
+		<field name="META_SHIFT_MASK" since="11"/>
+		<field name="META_SHIFT_ON"/>
+		<field name="META_SHIFT_RIGHT_ON"/>
+		<field name="META_SYM_ON"/>
+	</class>
+	<class name="android/view/KeyEvent$Callback" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onKeyDown(ILandroid/view/KeyEvent;)Z"/>
+		<method name="onKeyLongPress(ILandroid/view/KeyEvent;)Z" since="5"/>
+		<method name="onKeyMultiple(IILandroid/view/KeyEvent;)Z"/>
+		<method name="onKeyUp(ILandroid/view/KeyEvent;)Z"/>
+	</class>
+	<class name="android/view/KeyEvent$DispatcherState" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="handleUpEvent(Landroid/view/KeyEvent;)V"/>
+		<method name="isTracking(Landroid/view/KeyEvent;)Z"/>
+		<method name="performedLongPress(Landroid/view/KeyEvent;)V"/>
+		<method name="reset()V"/>
+		<method name="reset(Ljava/lang/Object;)V"/>
+		<method name="startTracking(Landroid/view/KeyEvent;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/view/KeyboardShortcutGroup" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/util/List;)V"/>
+		<method name="addItem(Landroid/view/KeyboardShortcutInfo;)V"/>
+		<method name="getItems()Ljava/util/List;"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/KeyboardShortcutInfo" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;CI)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
+		<method name="getBaseCharacter()C"/>
+		<method name="getKeycode()I"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getModifiers()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/LayoutInflater" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/view/LayoutInflater;Landroid/content/Context;)V"/>
+		<method name="cloneInContext(Landroid/content/Context;)Landroid/view/LayoutInflater;"/>
+		<method name="createView(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="29"/>
+		<method name="createView(Ljava/lang/String;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;"/>
+		<method name="from(Landroid/content/Context;)Landroid/view/LayoutInflater;"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getFactory()Landroid/view/LayoutInflater$Factory;"/>
+		<method name="getFactory2()Landroid/view/LayoutInflater$Factory2;" since="11"/>
+		<method name="getFilter()Landroid/view/LayoutInflater$Filter;"/>
+		<method name="inflate(ILandroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View;"/>
+		<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="inflate(Lorg/xmlpull/v1/XmlPullParser;Landroid/view/ViewGroup;Z)Landroid/view/View;"/>
+		<method name="onCreateView(Landroid/content/Context;Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="29"/>
+		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;" since="11"/>
+		<method name="onCreateView(Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;"/>
+		<method name="setFactory(Landroid/view/LayoutInflater$Factory;)V"/>
+		<method name="setFactory2(Landroid/view/LayoutInflater$Factory2;)V" since="11"/>
+		<method name="setFilter(Landroid/view/LayoutInflater$Filter;)V"/>
+	</class>
+	<class name="android/view/LayoutInflater$Factory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;"/>
+	</class>
+	<class name="android/view/LayoutInflater$Factory2" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/LayoutInflater$Factory"/>
+		<method name="onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;"/>
+	</class>
+	<class name="android/view/LayoutInflater$Filter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onLoadClass(Ljava/lang/Class;)Z"/>
+	</class>
+	<class name="android/view/Menu" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="add(I)Landroid/view/MenuItem;"/>
+		<method name="add(IIII)Landroid/view/MenuItem;"/>
+		<method name="add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem;"/>
+		<method name="add(Ljava/lang/CharSequence;)Landroid/view/MenuItem;"/>
+		<method name="addIntentOptions(IIILandroid/content/ComponentName;[Landroid/content/Intent;Landroid/content/Intent;I[Landroid/view/MenuItem;)I"/>
+		<method name="addSubMenu(I)Landroid/view/SubMenu;"/>
+		<method name="addSubMenu(IIII)Landroid/view/SubMenu;"/>
+		<method name="addSubMenu(IIILjava/lang/CharSequence;)Landroid/view/SubMenu;"/>
+		<method name="addSubMenu(Ljava/lang/CharSequence;)Landroid/view/SubMenu;"/>
+		<method name="clear()V"/>
+		<method name="close()V" since="3"/>
+		<method name="findItem(I)Landroid/view/MenuItem;"/>
+		<method name="getItem(I)Landroid/view/MenuItem;" since="3"/>
+		<method name="hasVisibleItems()Z"/>
+		<method name="isShortcutKey(ILandroid/view/KeyEvent;)Z"/>
+		<method name="performIdentifierAction(II)Z"/>
+		<method name="performShortcut(ILandroid/view/KeyEvent;I)Z"/>
+		<method name="removeGroup(I)V"/>
+		<method name="removeItem(I)V"/>
+		<method name="setGroupCheckable(IZZ)V"/>
+		<method name="setGroupDividerEnabled(Z)V" since="28"/>
+		<method name="setGroupEnabled(IZ)V"/>
+		<method name="setGroupVisible(IZ)V"/>
+		<method name="setQwertyMode(Z)V"/>
+		<method name="size()I"/>
+		<field name="CATEGORY_ALTERNATIVE"/>
+		<field name="CATEGORY_CONTAINER"/>
+		<field name="CATEGORY_SECONDARY"/>
+		<field name="CATEGORY_SYSTEM"/>
+		<field name="FIRST"/>
+		<field name="FLAG_ALWAYS_PERFORM_CLOSE"/>
+		<field name="FLAG_APPEND_TO_GROUP"/>
+		<field name="FLAG_PERFORM_NO_CLOSE"/>
+		<field name="NONE"/>
+		<field name="SUPPORTED_MODIFIERS_MASK" since="26"/>
+	</class>
+	<class name="android/view/MenuInflater" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="inflate(ILandroid/view/Menu;)V"/>
+	</class>
+	<class name="android/view/MenuItem" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="collapseActionView()Z" since="14"/>
+		<method name="expandActionView()Z" since="14"/>
+		<method name="getActionProvider()Landroid/view/ActionProvider;" since="14"/>
+		<method name="getActionView()Landroid/view/View;" since="11"/>
+		<method name="getAlphabeticModifiers()I" since="26"/>
+		<method name="getAlphabeticShortcut()C"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="26"/>
+		<method name="getGroupId()I"/>
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getIconTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getIconTintList()Landroid/content/res/ColorStateList;" since="26"/>
+		<method name="getIconTintMode()Landroid/graphics/PorterDuff$Mode;" since="26"/>
+		<method name="getIntent()Landroid/content/Intent;"/>
+		<method name="getItemId()I"/>
+		<method name="getMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;"/>
+		<method name="getNumericModifiers()I" since="26"/>
+		<method name="getNumericShortcut()C"/>
+		<method name="getOrder()I"/>
+		<method name="getSubMenu()Landroid/view/SubMenu;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="getTitleCondensed()Ljava/lang/CharSequence;"/>
+		<method name="getTooltipText()Ljava/lang/CharSequence;" since="26"/>
+		<method name="hasSubMenu()Z"/>
+		<method name="isActionViewExpanded()Z" since="14"/>
+		<method name="isCheckable()Z"/>
+		<method name="isChecked()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="isVisible()Z"/>
+		<method name="setActionProvider(Landroid/view/ActionProvider;)Landroid/view/MenuItem;" since="14"/>
+		<method name="setActionView(I)Landroid/view/MenuItem;" since="11"/>
+		<method name="setActionView(Landroid/view/View;)Landroid/view/MenuItem;" since="11"/>
+		<method name="setAlphabeticShortcut(C)Landroid/view/MenuItem;"/>
+		<method name="setAlphabeticShortcut(CI)Landroid/view/MenuItem;" since="26"/>
+		<method name="setCheckable(Z)Landroid/view/MenuItem;"/>
+		<method name="setChecked(Z)Landroid/view/MenuItem;"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" since="26"/>
+		<method name="setEnabled(Z)Landroid/view/MenuItem;"/>
+		<method name="setIcon(I)Landroid/view/MenuItem;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/MenuItem;"/>
+		<method name="setIconTintBlendMode(Landroid/graphics/BlendMode;)Landroid/view/MenuItem;" since="29"/>
+		<method name="setIconTintList(Landroid/content/res/ColorStateList;)Landroid/view/MenuItem;" since="26"/>
+		<method name="setIconTintMode(Landroid/graphics/PorterDuff$Mode;)Landroid/view/MenuItem;" since="26"/>
+		<method name="setIntent(Landroid/content/Intent;)Landroid/view/MenuItem;"/>
+		<method name="setNumericShortcut(C)Landroid/view/MenuItem;"/>
+		<method name="setNumericShortcut(CI)Landroid/view/MenuItem;" since="26"/>
+		<method name="setOnActionExpandListener(Landroid/view/MenuItem$OnActionExpandListener;)Landroid/view/MenuItem;" since="14"/>
+		<method name="setOnMenuItemClickListener(Landroid/view/MenuItem$OnMenuItemClickListener;)Landroid/view/MenuItem;"/>
+		<method name="setShortcut(CC)Landroid/view/MenuItem;"/>
+		<method name="setShortcut(CCII)Landroid/view/MenuItem;" since="26"/>
+		<method name="setShowAsAction(I)V" since="11"/>
+		<method name="setShowAsActionFlags(I)Landroid/view/MenuItem;" since="14"/>
+		<method name="setTitle(I)Landroid/view/MenuItem;"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)Landroid/view/MenuItem;"/>
+		<method name="setTitleCondensed(Ljava/lang/CharSequence;)Landroid/view/MenuItem;"/>
+		<method name="setTooltipText(Ljava/lang/CharSequence;)Landroid/view/MenuItem;" since="26"/>
+		<method name="setVisible(Z)Landroid/view/MenuItem;"/>
+		<field name="SHOW_AS_ACTION_ALWAYS" since="11"/>
+		<field name="SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW" since="14"/>
+		<field name="SHOW_AS_ACTION_IF_ROOM" since="11"/>
+		<field name="SHOW_AS_ACTION_NEVER" since="11"/>
+		<field name="SHOW_AS_ACTION_WITH_TEXT" since="11"/>
+	</class>
+	<class name="android/view/MenuItem$OnActionExpandListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onMenuItemActionCollapse(Landroid/view/MenuItem;)Z"/>
+		<method name="onMenuItemActionExpand(Landroid/view/MenuItem;)Z"/>
+	</class>
+	<class name="android/view/MenuItem$OnMenuItemClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
+	</class>
+	<class name="android/view/MotionEvent" since="1">
+		<extends name="android/view/InputEvent" since="9"/>
+		<extends name="java/lang/Object" removed="9"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="actionToString(I)Ljava/lang/String;" since="19"/>
+		<method name="addBatch(JFFFFI)V"/>
+		<method name="addBatch(J[Landroid/view/MotionEvent$PointerCoords;I)V" since="9"/>
+		<method name="axisFromString(Ljava/lang/String;)I" since="12"/>
+		<method name="axisToString(I)Ljava/lang/String;" since="12"/>
+		<method name="findPointerIndex(I)I" since="5"/>
+		<method name="getAction()I"/>
+		<method name="getActionButton()I" since="23"/>
+		<method name="getActionIndex()I" since="8"/>
+		<method name="getActionMasked()I" since="8"/>
+		<method name="getAxisValue(I)F" since="12"/>
+		<method name="getAxisValue(II)F" since="12"/>
+		<method name="getButtonState()I" since="14"/>
+		<method name="getClassification()I" since="29"/>
+		<method name="getDeviceId()I"/>
+		<method name="getDownTime()J"/>
+		<method name="getEdgeFlags()I"/>
+		<method name="getEventTime()J"/>
+		<method name="getFlags()I" since="9"/>
+		<method name="getHistoricalAxisValue(II)F" since="12"/>
+		<method name="getHistoricalAxisValue(III)F" since="12"/>
+		<method name="getHistoricalEventTime(I)J"/>
+		<method name="getHistoricalOrientation(I)F" since="9"/>
+		<method name="getHistoricalOrientation(II)F" since="9"/>
+		<method name="getHistoricalPointerCoords(IILandroid/view/MotionEvent$PointerCoords;)V" since="9"/>
+		<method name="getHistoricalPressure(I)F"/>
+		<method name="getHistoricalPressure(II)F" since="5"/>
+		<method name="getHistoricalSize(I)F"/>
+		<method name="getHistoricalSize(II)F" since="5"/>
+		<method name="getHistoricalToolMajor(I)F" since="9"/>
+		<method name="getHistoricalToolMajor(II)F" since="9"/>
+		<method name="getHistoricalToolMinor(I)F" since="9"/>
+		<method name="getHistoricalToolMinor(II)F" since="9"/>
+		<method name="getHistoricalTouchMajor(I)F" since="9"/>
+		<method name="getHistoricalTouchMajor(II)F" since="9"/>
+		<method name="getHistoricalTouchMinor(I)F" since="9"/>
+		<method name="getHistoricalTouchMinor(II)F" since="9"/>
+		<method name="getHistoricalX(I)F"/>
+		<method name="getHistoricalX(II)F" since="5"/>
+		<method name="getHistoricalY(I)F"/>
+		<method name="getHistoricalY(II)F" since="5"/>
+		<method name="getHistorySize()I"/>
+		<method name="getMetaState()I"/>
+		<method name="getOrientation()F" since="9"/>
+		<method name="getOrientation(I)F" since="9"/>
+		<method name="getPointerCoords(ILandroid/view/MotionEvent$PointerCoords;)V" since="9"/>
+		<method name="getPointerCount()I" since="5"/>
+		<method name="getPointerId(I)I" since="5"/>
+		<method name="getPointerProperties(ILandroid/view/MotionEvent$PointerProperties;)V" since="14"/>
+		<method name="getPressure()F"/>
+		<method name="getPressure(I)F" since="5"/>
+		<method name="getRawX()F"/>
+		<method name="getRawX(I)F" since="29"/>
+		<method name="getRawY()F"/>
+		<method name="getRawY(I)F" since="29"/>
+		<method name="getSize()F"/>
+		<method name="getSize(I)F" since="5"/>
+		<method name="getToolMajor()F" since="9"/>
+		<method name="getToolMajor(I)F" since="9"/>
+		<method name="getToolMinor()F" since="9"/>
+		<method name="getToolMinor(I)F" since="9"/>
+		<method name="getToolType(I)I" since="14"/>
+		<method name="getTouchMajor()F" since="9"/>
+		<method name="getTouchMajor(I)F" since="9"/>
+		<method name="getTouchMinor()F" since="9"/>
+		<method name="getTouchMinor(I)F" since="9"/>
+		<method name="getX()F"/>
+		<method name="getX(I)F" since="5"/>
+		<method name="getXPrecision()F"/>
+		<method name="getY()F"/>
+		<method name="getY(I)F" since="5"/>
+		<method name="getYPrecision()F"/>
+		<method name="isButtonPressed(I)Z" since="21"/>
+		<method name="obtain(JJIFFFFIFFII)Landroid/view/MotionEvent;"/>
+		<method name="obtain(JJIFFI)Landroid/view/MotionEvent;"/>
+		<method name="obtain(JJIIFFFFIFFII)Landroid/view/MotionEvent;" since="5" deprecated="15"/>
+		<method name="obtain(JJII[I[Landroid/view/MotionEvent$PointerCoords;IFFIIII)Landroid/view/MotionEvent;" since="9" deprecated="15"/>
+		<method name="obtain(JJII[Landroid/view/MotionEvent$PointerProperties;[Landroid/view/MotionEvent$PointerCoords;IIFFIIII)Landroid/view/MotionEvent;" since="14"/>
+		<method name="obtain(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;"/>
+		<method name="obtainNoHistory(Landroid/view/MotionEvent;)Landroid/view/MotionEvent;" since="5"/>
+		<method name="offsetLocation(FF)V"/>
+		<method name="recycle()V"/>
+		<method name="setAction(I)V"/>
+		<method name="setEdgeFlags(I)V"/>
+		<method name="setLocation(FF)V"/>
+		<method name="setSource(I)V" since="12"/>
+		<method name="transform(Landroid/graphics/Matrix;)V" since="11"/>
+		<field name="ACTION_BUTTON_PRESS" since="23"/>
+		<field name="ACTION_BUTTON_RELEASE" since="23"/>
+		<field name="ACTION_CANCEL"/>
+		<field name="ACTION_DOWN"/>
+		<field name="ACTION_HOVER_ENTER" since="14"/>
+		<field name="ACTION_HOVER_EXIT" since="14"/>
+		<field name="ACTION_HOVER_MOVE" since="12"/>
+		<field name="ACTION_MASK" since="5"/>
+		<field name="ACTION_MOVE"/>
+		<field name="ACTION_OUTSIDE" since="3"/>
+		<field name="ACTION_POINTER_1_DOWN" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_1_UP" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_2_DOWN" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_2_UP" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_3_DOWN" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_3_UP" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_DOWN" since="5"/>
+		<field name="ACTION_POINTER_ID_MASK" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_ID_SHIFT" since="5" deprecated="15"/>
+		<field name="ACTION_POINTER_INDEX_MASK" since="8"/>
+		<field name="ACTION_POINTER_INDEX_SHIFT" since="8"/>
+		<field name="ACTION_POINTER_UP" since="5"/>
+		<field name="ACTION_SCROLL" since="12"/>
+		<field name="ACTION_UP"/>
+		<field name="AXIS_BRAKE" since="12"/>
+		<field name="AXIS_DISTANCE" since="14"/>
+		<field name="AXIS_GAS" since="12"/>
+		<field name="AXIS_GENERIC_1" since="12"/>
+		<field name="AXIS_GENERIC_10" since="12"/>
+		<field name="AXIS_GENERIC_11" since="12"/>
+		<field name="AXIS_GENERIC_12" since="12"/>
+		<field name="AXIS_GENERIC_13" since="12"/>
+		<field name="AXIS_GENERIC_14" since="12"/>
+		<field name="AXIS_GENERIC_15" since="12"/>
+		<field name="AXIS_GENERIC_16" since="12"/>
+		<field name="AXIS_GENERIC_2" since="12"/>
+		<field name="AXIS_GENERIC_3" since="12"/>
+		<field name="AXIS_GENERIC_4" since="12"/>
+		<field name="AXIS_GENERIC_5" since="12"/>
+		<field name="AXIS_GENERIC_6" since="12"/>
+		<field name="AXIS_GENERIC_7" since="12"/>
+		<field name="AXIS_GENERIC_8" since="12"/>
+		<field name="AXIS_GENERIC_9" since="12"/>
+		<field name="AXIS_HAT_X" since="12"/>
+		<field name="AXIS_HAT_Y" since="12"/>
+		<field name="AXIS_HSCROLL" since="12"/>
+		<field name="AXIS_LTRIGGER" since="12"/>
+		<field name="AXIS_ORIENTATION" since="12"/>
+		<field name="AXIS_PRESSURE" since="12"/>
+		<field name="AXIS_RELATIVE_X" since="24"/>
+		<field name="AXIS_RELATIVE_Y" since="24"/>
+		<field name="AXIS_RTRIGGER" since="12"/>
+		<field name="AXIS_RUDDER" since="12"/>
+		<field name="AXIS_RX" since="12"/>
+		<field name="AXIS_RY" since="12"/>
+		<field name="AXIS_RZ" since="12"/>
+		<field name="AXIS_SCROLL" since="26"/>
+		<field name="AXIS_SIZE" since="12"/>
+		<field name="AXIS_THROTTLE" since="12"/>
+		<field name="AXIS_TILT" since="14"/>
+		<field name="AXIS_TOOL_MAJOR" since="12"/>
+		<field name="AXIS_TOOL_MINOR" since="12"/>
+		<field name="AXIS_TOUCH_MAJOR" since="12"/>
+		<field name="AXIS_TOUCH_MINOR" since="12"/>
+		<field name="AXIS_VSCROLL" since="12"/>
+		<field name="AXIS_WHEEL" since="12"/>
+		<field name="AXIS_X" since="12"/>
+		<field name="AXIS_Y" since="12"/>
+		<field name="AXIS_Z" since="12"/>
+		<field name="BUTTON_BACK" since="14"/>
+		<field name="BUTTON_FORWARD" since="14"/>
+		<field name="BUTTON_PRIMARY" since="14"/>
+		<field name="BUTTON_SECONDARY" since="14"/>
+		<field name="BUTTON_STYLUS_PRIMARY" since="23"/>
+		<field name="BUTTON_STYLUS_SECONDARY" since="23"/>
+		<field name="BUTTON_TERTIARY" since="14"/>
+		<field name="CLASSIFICATION_AMBIGUOUS_GESTURE" since="29"/>
+		<field name="CLASSIFICATION_DEEP_PRESS" since="29"/>
+		<field name="CLASSIFICATION_NONE" since="29"/>
+		<field name="CREATOR"/>
+		<field name="EDGE_BOTTOM"/>
+		<field name="EDGE_LEFT"/>
+		<field name="EDGE_RIGHT"/>
+		<field name="EDGE_TOP"/>
+		<field name="FLAG_WINDOW_IS_OBSCURED" since="9"/>
+		<field name="FLAG_WINDOW_IS_PARTIALLY_OBSCURED" since="29"/>
+		<field name="INVALID_POINTER_ID" since="14"/>
+		<field name="TOOL_TYPE_ERASER" since="14"/>
+		<field name="TOOL_TYPE_FINGER" since="14"/>
+		<field name="TOOL_TYPE_MOUSE" since="14"/>
+		<field name="TOOL_TYPE_STYLUS" since="14"/>
+		<field name="TOOL_TYPE_UNKNOWN" since="14"/>
+	</class>
+	<class name="android/view/MotionEvent$PointerCoords" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/view/MotionEvent$PointerCoords;)V" since="12"/>
+		<method name="clear()V" since="12"/>
+		<method name="copyFrom(Landroid/view/MotionEvent$PointerCoords;)V" since="12"/>
+		<method name="getAxisValue(I)F" since="12"/>
+		<method name="setAxisValue(IF)V" since="12"/>
+		<field name="orientation"/>
+		<field name="pressure"/>
+		<field name="size"/>
+		<field name="toolMajor"/>
+		<field name="toolMinor"/>
+		<field name="touchMajor"/>
+		<field name="touchMinor"/>
+		<field name="x"/>
+		<field name="y"/>
+	</class>
+	<class name="android/view/MotionEvent$PointerProperties" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/view/MotionEvent$PointerProperties;)V"/>
+		<method name="clear()V"/>
+		<method name="copyFrom(Landroid/view/MotionEvent$PointerProperties;)V"/>
+		<field name="id"/>
+		<field name="toolType"/>
+	</class>
+	<class name="android/view/OnReceiveContentListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onReceiveContent(Landroid/view/View;Landroid/view/ContentInfo;)Landroid/view/ContentInfo;"/>
+	</class>
+	<class name="android/view/OrientationEventListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="canDetectOrientation()Z"/>
+		<method name="disable()V"/>
+		<method name="enable()V"/>
+		<method name="onOrientationChanged(I)V"/>
+		<field name="ORIENTATION_UNKNOWN"/>
+	</class>
+	<class name="android/view/OrientationListener" since="1" deprecated="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/hardware/SensorListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V" since="3" deprecated="29"/>
+		<method name="disable()V" deprecated="29"/>
+		<method name="enable()V" deprecated="29"/>
+		<method name="onOrientationChanged(I)V" deprecated="29"/>
+		<field name="ORIENTATION_UNKNOWN" deprecated="29"/>
+	</class>
+	<class name="android/view/PixelCopy" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="request(Landroid/view/Surface;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V"/>
+		<method name="request(Landroid/view/Surface;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
+		<method name="request(Landroid/view/SurfaceView;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V"/>
+		<method name="request(Landroid/view/SurfaceView;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
+		<method name="request(Landroid/view/Window;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
+		<method name="request(Landroid/view/Window;Landroid/graphics/Rect;Landroid/graphics/Bitmap;Landroid/view/PixelCopy$OnPixelCopyFinishedListener;Landroid/os/Handler;)V" since="26"/>
+		<field name="ERROR_DESTINATION_INVALID"/>
+		<field name="ERROR_SOURCE_INVALID"/>
+		<field name="ERROR_SOURCE_NO_DATA"/>
+		<field name="ERROR_TIMEOUT"/>
+		<field name="ERROR_UNKNOWN"/>
+		<field name="SUCCESS"/>
+	</class>
+	<class name="android/view/PixelCopy$OnPixelCopyFinishedListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onPixelCopyFinished(I)V"/>
+	</class>
+	<class name="android/view/PointerIcon" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="create(Landroid/graphics/Bitmap;FF)Landroid/view/PointerIcon;"/>
+		<method name="getSystemIcon(Landroid/content/Context;I)Landroid/view/PointerIcon;"/>
+		<method name="load(Landroid/content/res/Resources;I)Landroid/view/PointerIcon;"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_ALIAS"/>
+		<field name="TYPE_ALL_SCROLL"/>
+		<field name="TYPE_ARROW"/>
+		<field name="TYPE_CELL"/>
+		<field name="TYPE_CONTEXT_MENU"/>
+		<field name="TYPE_COPY"/>
+		<field name="TYPE_CROSSHAIR"/>
+		<field name="TYPE_DEFAULT"/>
+		<field name="TYPE_GRAB"/>
+		<field name="TYPE_GRABBING"/>
+		<field name="TYPE_HAND"/>
+		<field name="TYPE_HELP"/>
+		<field name="TYPE_HORIZONTAL_DOUBLE_ARROW"/>
+		<field name="TYPE_NO_DROP"/>
+		<field name="TYPE_NULL"/>
+		<field name="TYPE_TEXT"/>
+		<field name="TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW"/>
+		<field name="TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW"/>
+		<field name="TYPE_VERTICAL_DOUBLE_ARROW"/>
+		<field name="TYPE_VERTICAL_TEXT"/>
+		<field name="TYPE_WAIT"/>
+		<field name="TYPE_ZOOM_IN"/>
+		<field name="TYPE_ZOOM_OUT"/>
+	</class>
+	<class name="android/view/RoundedCorner" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(IIII)V"/>
+		<method name="getCenter()Landroid/graphics/Point;"/>
+		<method name="getPosition()I"/>
+		<method name="getRadius()I"/>
+		<field name="CREATOR"/>
+		<field name="POSITION_BOTTOM_LEFT"/>
+		<field name="POSITION_BOTTOM_RIGHT"/>
+		<field name="POSITION_TOP_LEFT"/>
+		<field name="POSITION_TOP_RIGHT"/>
+	</class>
+	<class name="android/view/ScaleGestureDetector" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/ScaleGestureDetector$OnScaleGestureListener;Landroid/os/Handler;)V" since="19"/>
+		<method name="getCurrentSpan()F"/>
+		<method name="getCurrentSpanX()F" since="11"/>
+		<method name="getCurrentSpanY()F" since="11"/>
+		<method name="getEventTime()J"/>
+		<method name="getFocusX()F"/>
+		<method name="getFocusY()F"/>
+		<method name="getPreviousSpan()F"/>
+		<method name="getPreviousSpanX()F" since="11"/>
+		<method name="getPreviousSpanY()F" since="11"/>
+		<method name="getScaleFactor()F"/>
+		<method name="getTimeDelta()J"/>
+		<method name="isInProgress()Z"/>
+		<method name="isQuickScaleEnabled()Z" since="19"/>
+		<method name="isStylusScaleEnabled()Z" since="23"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="setQuickScaleEnabled(Z)V" since="19"/>
+		<method name="setStylusScaleEnabled(Z)V" since="23"/>
+	</class>
+	<class name="android/view/ScaleGestureDetector$OnScaleGestureListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="onScale(Landroid/view/ScaleGestureDetector;)Z"/>
+		<method name="onScaleBegin(Landroid/view/ScaleGestureDetector;)Z"/>
+		<method name="onScaleEnd(Landroid/view/ScaleGestureDetector;)V"/>
+	</class>
+	<class name="android/view/ScaleGestureDetector$SimpleOnScaleGestureListener" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/ScaleGestureDetector$OnScaleGestureListener"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/view/ScrollCaptureCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onScrollCaptureEnd(Ljava/lang/Runnable;)V"/>
+		<method name="onScrollCaptureImageRequest(Landroid/view/ScrollCaptureSession;Landroid/os/CancellationSignal;Landroid/graphics/Rect;Ljava/util/function/Consumer;)V"/>
+		<method name="onScrollCaptureSearch(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V"/>
+		<method name="onScrollCaptureStart(Landroid/view/ScrollCaptureSession;Landroid/os/CancellationSignal;Ljava/lang/Runnable;)V"/>
+	</class>
+	<class name="android/view/ScrollCaptureSession" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/Surface;Landroid/graphics/Rect;Landroid/graphics/Point;)V"/>
+		<method name="getPositionInWindow()Landroid/graphics/Point;"/>
+		<method name="getScrollBounds()Landroid/graphics/Rect;"/>
+		<method name="getSurface()Landroid/view/Surface;"/>
+	</class>
+	<class name="android/view/ScrollCaptureTarget" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;Landroid/view/ScrollCaptureCallback;)V"/>
+		<method name="getCallback()Landroid/view/ScrollCaptureCallback;"/>
+		<method name="getContainingView()Landroid/view/View;"/>
+		<method name="getHint()I"/>
+		<method name="getLocalVisibleRect()Landroid/graphics/Rect;"/>
+		<method name="getPositionInWindow()Landroid/graphics/Point;"/>
+		<method name="getScrollBounds()Landroid/graphics/Rect;"/>
+		<method name="setScrollBounds(Landroid/graphics/Rect;)V"/>
+		<method name="updatePositionInWindow()V"/>
+	</class>
+	<class name="android/view/SearchEvent" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/InputDevice;)V"/>
+		<method name="getInputDevice()Landroid/view/InputDevice;"/>
+	</class>
+	<class name="android/view/SoundEffectConstants" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getConstantForFocusDirection(IZ)I" since="31"/>
+		<method name="getContantForFocusDirection(I)I"/>
+		<field name="CLICK"/>
+		<field name="NAVIGATION_DOWN"/>
+		<field name="NAVIGATION_LEFT"/>
+		<field name="NAVIGATION_REPEAT_DOWN" since="31"/>
+		<field name="NAVIGATION_REPEAT_LEFT" since="31"/>
+		<field name="NAVIGATION_REPEAT_RIGHT" since="31"/>
+		<field name="NAVIGATION_REPEAT_UP" since="31"/>
+		<field name="NAVIGATION_RIGHT"/>
+		<field name="NAVIGATION_UP"/>
+	</class>
+	<class name="android/view/SubMenu" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/Menu"/>
+		<method name="clearHeader()V"/>
+		<method name="getItem()Landroid/view/MenuItem;"/>
+		<method name="setHeaderIcon(I)Landroid/view/SubMenu;"/>
+		<method name="setHeaderIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;"/>
+		<method name="setHeaderTitle(I)Landroid/view/SubMenu;"/>
+		<method name="setHeaderTitle(Ljava/lang/CharSequence;)Landroid/view/SubMenu;"/>
+		<method name="setHeaderView(Landroid/view/View;)Landroid/view/SubMenu;"/>
+		<method name="setIcon(I)Landroid/view/SubMenu;"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/SubMenu;"/>
+	</class>
+	<class name="android/view/Surface" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/graphics/SurfaceTexture;)V" since="14"/>
+		<method name="&lt;init>(Landroid/view/SurfaceControl;)V" since="29"/>
+		<method name="freeze()V" removed="14"/>
+		<method name="hide()V" removed="14"/>
+		<method name="isValid()Z"/>
+		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;"/>
+		<method name="lockHardwareCanvas()Landroid/graphics/Canvas;" since="23"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="release()V" since="14"/>
+		<method name="setAlpha(F)V" removed="14"/>
+		<method name="setFlags(II)V" removed="14"/>
+		<method name="setFrameRate(FI)V" since="30"/>
+		<method name="setFrameRate(FII)V" since="31"/>
+		<method name="setFreezeTint(I)V" removed="14"/>
+		<method name="setLayer(I)V" removed="14"/>
+		<method name="setMatrix(FFFF)V" removed="14"/>
+		<method name="setOrientation(II)V" removed="14"/>
+		<method name="setPosition(II)V" removed="14"/>
+		<method name="setSize(II)V" removed="14"/>
+		<method name="setTransparentRegionHint(Landroid/graphics/Region;)V" removed="14"/>
+		<method name="show()V" removed="14"/>
+		<method name="unfreeze()V" removed="14"/>
+		<method name="unlockCanvas(Landroid/graphics/Canvas;)V" deprecated="17"/>
+		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V"/>
+		<field name="CHANGE_FRAME_RATE_ALWAYS" since="31"/>
+		<field name="CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS" since="31"/>
+		<field name="CREATOR"/>
+		<field name="FRAME_RATE_COMPATIBILITY_DEFAULT" since="30"/>
+		<field name="FRAME_RATE_COMPATIBILITY_FIXED_SOURCE" since="30"/>
+		<field name="FX_SURFACE_BLUR" removed="14"/>
+		<field name="FX_SURFACE_DIM" removed="14"/>
+		<field name="FX_SURFACE_MASK" removed="14"/>
+		<field name="FX_SURFACE_NORMAL" removed="14"/>
+		<field name="GPU" removed="14"/>
+		<field name="HARDWARE" removed="14"/>
+		<field name="HIDDEN" removed="14"/>
+		<field name="NON_PREMULTIPLIED" removed="14"/>
+		<field name="PUSH_BUFFERS" removed="14"/>
+		<field name="ROTATION_0"/>
+		<field name="ROTATION_180"/>
+		<field name="ROTATION_270"/>
+		<field name="ROTATION_90"/>
+		<field name="SECURE" removed="14"/>
+		<field name="SURACE_FROZEN" removed="14"/>
+		<field name="SURFACE_BLUR_FREEZE" removed="14"/>
+		<field name="SURFACE_DITHER" removed="14"/>
+		<field name="SURFACE_FROZEN" since="4" removed="14"/>
+		<field name="SURFACE_HIDDEN" removed="14"/>
+	</class>
+	<class name="android/view/Surface$OutOfResourcesException" since="1">
+		<extends name="java/lang/Exception" removed="19"/>
+		<extends name="java/lang/RuntimeException" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/view/SurfaceControl" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="isValid()Z"/>
+		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="release()V"/>
+		<field name="BUFFER_TRANSFORM_IDENTITY" since="33"/>
+		<field name="BUFFER_TRANSFORM_MIRROR_HORIZONTAL" since="33"/>
+		<field name="BUFFER_TRANSFORM_MIRROR_VERTICAL" since="33"/>
+		<field name="BUFFER_TRANSFORM_ROTATE_180" since="33"/>
+		<field name="BUFFER_TRANSFORM_ROTATE_270" since="33"/>
+		<field name="BUFFER_TRANSFORM_ROTATE_90" since="33"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/SurfaceControl$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/view/SurfaceControl;"/>
+		<method name="setBufferSize(II)Landroid/view/SurfaceControl$Builder;"/>
+		<method name="setFormat(I)Landroid/view/SurfaceControl$Builder;"/>
+		<method name="setName(Ljava/lang/String;)Landroid/view/SurfaceControl$Builder;"/>
+		<method name="setOpaque(Z)Landroid/view/SurfaceControl$Builder;"/>
+		<method name="setParent(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Builder;"/>
+	</class>
+	<class name="android/view/SurfaceControl$Transaction" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="30"/>
+		<implements name="java/io/Closeable"/>
+		<method name="&lt;init>()V"/>
+		<method name="apply()V"/>
+		<method name="merge(Landroid/view/SurfaceControl$Transaction;)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="reparent(Landroid/view/SurfaceControl;Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="setAlpha(Landroid/view/SurfaceControl;F)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="setBufferSize(Landroid/view/SurfaceControl;II)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="setFrameRate(Landroid/view/SurfaceControl;FI)Landroid/view/SurfaceControl$Transaction;" since="30"/>
+		<method name="setFrameRate(Landroid/view/SurfaceControl;FII)Landroid/view/SurfaceControl$Transaction;" since="31"/>
+		<method name="setGeometry(Landroid/view/SurfaceControl;Landroid/graphics/Rect;Landroid/graphics/Rect;I)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="setLayer(Landroid/view/SurfaceControl;I)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="setVisibility(Landroid/view/SurfaceControl;Z)Landroid/view/SurfaceControl$Transaction;"/>
+		<field name="CREATOR" since="30"/>
+	</class>
+	<class name="android/view/SurfaceControlViewHost" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/Display;Landroid/os/IBinder;)V"/>
+		<method name="getSurfacePackage()Landroid/view/SurfaceControlViewHost$SurfacePackage;"/>
+		<method name="getView()Landroid/view/View;"/>
+		<method name="relayout(II)V"/>
+		<method name="release()V"/>
+		<method name="setView(Landroid/view/View;II)V"/>
+	</class>
+	<class name="android/view/SurfaceControlViewHost$SurfacePackage" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/view/SurfaceControlViewHost$SurfacePackage;)V" since="31"/>
+		<method name="release()V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/SurfaceHolder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addCallback(Landroid/view/SurfaceHolder$Callback;)V"/>
+		<method name="getSurface()Landroid/view/Surface;"/>
+		<method name="getSurfaceFrame()Landroid/graphics/Rect;"/>
+		<method name="isCreating()Z"/>
+		<method name="lockCanvas()Landroid/graphics/Canvas;"/>
+		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;"/>
+		<method name="lockHardwareCanvas()Landroid/graphics/Canvas;" since="26"/>
+		<method name="removeCallback(Landroid/view/SurfaceHolder$Callback;)V"/>
+		<method name="setFixedSize(II)V"/>
+		<method name="setFormat(I)V"/>
+		<method name="setKeepScreenOn(Z)V"/>
+		<method name="setSizeFromLayout()V"/>
+		<method name="setType(I)V" deprecated="15"/>
+		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V"/>
+		<field name="SURFACE_TYPE_GPU" deprecated="15"/>
+		<field name="SURFACE_TYPE_HARDWARE" deprecated="15"/>
+		<field name="SURFACE_TYPE_NORMAL" deprecated="15"/>
+		<field name="SURFACE_TYPE_PUSH_BUFFERS" deprecated="15"/>
+	</class>
+	<class name="android/view/SurfaceHolder$BadSurfaceTypeException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/view/SurfaceHolder$Callback" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="surfaceChanged(Landroid/view/SurfaceHolder;III)V"/>
+		<method name="surfaceCreated(Landroid/view/SurfaceHolder;)V"/>
+		<method name="surfaceDestroyed(Landroid/view/SurfaceHolder;)V"/>
+	</class>
+	<class name="android/view/SurfaceHolder$Callback2" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/SurfaceHolder$Callback"/>
+		<method name="surfaceRedrawNeeded(Landroid/view/SurfaceHolder;)V"/>
+		<method name="surfaceRedrawNeededAsync(Landroid/view/SurfaceHolder;Ljava/lang/Runnable;)V" since="26"/>
+	</class>
+	<class name="android/view/SurfaceView" since="1">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z"/>
+		<method name="getHolder()Landroid/view/SurfaceHolder;"/>
+		<method name="getHostToken()Landroid/os/IBinder;" since="30"/>
+		<method name="getSurfaceControl()Landroid/view/SurfaceControl;" since="29"/>
+		<method name="setChildSurfacePackage(Landroid/view/SurfaceControlViewHost$SurfacePackage;)V" since="30"/>
+		<method name="setSecure(Z)V" since="17"/>
+		<method name="setZOrderMediaOverlay(Z)V" since="5"/>
+		<method name="setZOrderOnTop(Z)V" since="5"/>
+	</class>
+	<class name="android/view/TextureView" since="14">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getBitmap()Landroid/graphics/Bitmap;"/>
+		<method name="getBitmap(II)Landroid/graphics/Bitmap;"/>
+		<method name="getBitmap(Landroid/graphics/Bitmap;)Landroid/graphics/Bitmap;"/>
+		<method name="getSurfaceTexture()Landroid/graphics/SurfaceTexture;"/>
+		<method name="getSurfaceTextureListener()Landroid/view/TextureView$SurfaceTextureListener;"/>
+		<method name="getTransform(Landroid/graphics/Matrix;)Landroid/graphics/Matrix;"/>
+		<method name="isAvailable()Z"/>
+		<method name="lockCanvas()Landroid/graphics/Canvas;"/>
+		<method name="lockCanvas(Landroid/graphics/Rect;)Landroid/graphics/Canvas;"/>
+		<method name="setOpaque(Z)V"/>
+		<method name="setSurfaceTexture(Landroid/graphics/SurfaceTexture;)V" since="16"/>
+		<method name="setSurfaceTextureListener(Landroid/view/TextureView$SurfaceTextureListener;)V"/>
+		<method name="setTransform(Landroid/graphics/Matrix;)V"/>
+		<method name="unlockCanvasAndPost(Landroid/graphics/Canvas;)V"/>
+	</class>
+	<class name="android/view/TextureView$SurfaceTextureListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onSurfaceTextureAvailable(Landroid/graphics/SurfaceTexture;II)V"/>
+		<method name="onSurfaceTextureDestroyed(Landroid/graphics/SurfaceTexture;)Z"/>
+		<method name="onSurfaceTextureSizeChanged(Landroid/graphics/SurfaceTexture;II)V"/>
+		<method name="onSurfaceTextureUpdated(Landroid/graphics/SurfaceTexture;)V"/>
+	</class>
+	<class name="android/view/TouchDelegate" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;Landroid/view/View;)V"/>
+		<method name="getTouchDelegateInfo()Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;" since="29"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onTouchExplorationHoverEvent(Landroid/view/MotionEvent;)Z" since="29"/>
+		<field name="ABOVE"/>
+		<field name="BELOW"/>
+		<field name="TO_LEFT"/>
+		<field name="TO_RIGHT"/>
+	</class>
+	<class name="android/view/VelocityTracker" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addMovement(Landroid/view/MotionEvent;)V"/>
+		<method name="clear()V"/>
+		<method name="computeCurrentVelocity(I)V"/>
+		<method name="computeCurrentVelocity(IF)V" since="4"/>
+		<method name="getXVelocity()F"/>
+		<method name="getXVelocity(I)F" since="8"/>
+		<method name="getYVelocity()F"/>
+		<method name="getYVelocity(I)F" since="8"/>
+		<method name="obtain()Landroid/view/VelocityTracker;"/>
+		<method name="recycle()V"/>
+	</class>
+	<class name="android/view/VerifiedInputEvent" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getDeviceId()I"/>
+		<method name="getDisplayId()I"/>
+		<method name="getEventTimeNanos()J"/>
+		<method name="getSource()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/VerifiedKeyEvent" since="30">
+		<extends name="android/view/VerifiedInputEvent"/>
+		<method name="getAction()I"/>
+		<method name="getDownTimeNanos()J"/>
+		<method name="getFlag(I)Ljava/lang/Boolean;"/>
+		<method name="getKeyCode()I"/>
+		<method name="getMetaState()I"/>
+		<method name="getRepeatCount()I"/>
+		<method name="getScanCode()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/VerifiedMotionEvent" since="30">
+		<extends name="android/view/VerifiedInputEvent"/>
+		<method name="getActionMasked()I"/>
+		<method name="getButtonState()I"/>
+		<method name="getDownTimeNanos()J"/>
+		<method name="getFlag(I)Ljava/lang/Boolean;"/>
+		<method name="getMetaState()I"/>
+		<method name="getRawX()F"/>
+		<method name="getRawY()F"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/View" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/graphics/drawable/Drawable$Callback"/>
+		<implements name="android/view/KeyEvent$Callback"/>
+		<implements name="android/view/accessibility/AccessibilityEventSource" since="4"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="addChildrenForAccessibility(Ljava/util/ArrayList;)V" since="16"/>
+		<method name="addExtraDataToAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26"/>
+		<method name="addFocusables(Ljava/util/ArrayList;I)V"/>
+		<method name="addFocusables(Ljava/util/ArrayList;II)V" since="4"/>
+		<method name="addKeyboardNavigationClusters(Ljava/util/Collection;I)V" since="26"/>
+		<method name="addOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V" since="12"/>
+		<method name="addOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V" since="11"/>
+		<method name="addOnUnhandledKeyEventListener(Landroid/view/View$OnUnhandledKeyEventListener;)V" since="28"/>
+		<method name="addTouchables(Ljava/util/ArrayList;)V"/>
+		<method name="animate()Landroid/view/ViewPropertyAnimator;" since="12"/>
+		<method name="announceForAccessibility(Ljava/lang/CharSequence;)V" since="16"/>
+		<method name="autofill(Landroid/util/SparseArray;)V" since="26"/>
+		<method name="autofill(Landroid/view/autofill/AutofillValue;)V" since="26"/>
+		<method name="awakenScrollBars()Z" since="5"/>
+		<method name="awakenScrollBars(I)Z" since="5"/>
+		<method name="awakenScrollBars(IZ)Z" since="5"/>
+		<method name="bringToFront()V"/>
+		<method name="buildDrawingCache()V" deprecated="28"/>
+		<method name="buildDrawingCache(Z)V" since="4" deprecated="28"/>
+		<method name="buildLayer()V" since="12"/>
+		<method name="callOnClick()Z" since="15"/>
+		<method name="canResolveLayoutDirection()Z" since="19"/>
+		<method name="canResolveTextAlignment()Z" since="19"/>
+		<method name="canResolveTextDirection()Z" since="19"/>
+		<method name="canScrollHorizontally(I)Z" since="14"/>
+		<method name="canScrollVertically(I)Z" since="14"/>
+		<method name="cancelDragAndDrop()V" since="24"/>
+		<method name="cancelLongPress()V"/>
+		<method name="cancelPendingInputEvents()V" since="19"/>
+		<method name="checkInputConnectionProxy(Landroid/view/View;)Z" since="3"/>
+		<method name="clearAnimation()V"/>
+		<method name="clearFocus()V"/>
+		<method name="clearViewTranslationCallback()V" since="31"/>
+		<method name="combineMeasuredStates(II)I" since="11"/>
+		<method name="computeHorizontalScrollExtent()I"/>
+		<method name="computeHorizontalScrollOffset()I"/>
+		<method name="computeHorizontalScrollRange()I"/>
+		<method name="computeScroll()V"/>
+		<method name="computeSystemWindowInsets(Landroid/view/WindowInsets;Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21"/>
+		<method name="computeVerticalScrollExtent()I"/>
+		<method name="computeVerticalScrollOffset()I"/>
+		<method name="computeVerticalScrollRange()I"/>
+		<method name="createAccessibilityNodeInfo()Landroid/view/accessibility/AccessibilityNodeInfo;" since="14"/>
+		<method name="createContextMenu(Landroid/view/ContextMenu;)V"/>
+		<method name="destroyDrawingCache()V" deprecated="28"/>
+		<method name="dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;" since="20"/>
+		<method name="dispatchCapturedPointerEvent(Landroid/view/MotionEvent;)Z" since="26"/>
+		<method name="dispatchConfigurationChanged(Landroid/content/res/Configuration;)V" since="8"/>
+		<method name="dispatchCreateViewTranslationRequest(Ljava/util/Map;[ILandroid/view/translation/TranslationCapability;Ljava/util/List;)V" since="31"/>
+		<method name="dispatchDisplayHint(I)V" since="8"/>
+		<method name="dispatchDragEvent(Landroid/view/DragEvent;)Z" since="11"/>
+		<method name="dispatchDraw(Landroid/graphics/Canvas;)V"/>
+		<method name="dispatchDrawableHotspotChanged(FF)V" since="22"/>
+		<method name="dispatchFinishTemporaryDetach()V" since="24"/>
+		<method name="dispatchGenericFocusedEvent(Landroid/view/MotionEvent;)Z" since="14"/>
+		<method name="dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
+		<method name="dispatchGenericPointerEvent(Landroid/view/MotionEvent;)Z" since="14"/>
+		<method name="dispatchHoverEvent(Landroid/view/MotionEvent;)Z" since="14"/>
+		<method name="dispatchKeyEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="dispatchKeyEventPreIme(Landroid/view/KeyEvent;)Z" since="3"/>
+		<method name="dispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="dispatchNestedFling(FFZ)Z" since="21"/>
+		<method name="dispatchNestedPreFling(FF)Z" since="21"/>
+		<method name="dispatchNestedPrePerformAccessibilityAction(ILandroid/os/Bundle;)Z" since="22"/>
+		<method name="dispatchNestedPreScroll(II[I[I)Z" since="21"/>
+		<method name="dispatchNestedScroll(IIII[I)Z" since="21"/>
+		<method name="dispatchPointerCaptureChanged(Z)V" since="26"/>
+		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z" since="4"/>
+		<method name="dispatchProvideAutofillStructure(Landroid/view/ViewStructure;I)V" since="26"/>
+		<method name="dispatchProvideStructure(Landroid/view/ViewStructure;)V" since="23"/>
+		<method name="dispatchRestoreInstanceState(Landroid/util/SparseArray;)V"/>
+		<method name="dispatchSaveInstanceState(Landroid/util/SparseArray;)V"/>
+		<method name="dispatchScrollCaptureSearch(Landroid/graphics/Rect;Landroid/graphics/Point;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="dispatchSetActivated(Z)V" since="11"/>
+		<method name="dispatchSetPressed(Z)V"/>
+		<method name="dispatchSetSelected(Z)V"/>
+		<method name="dispatchStartTemporaryDetach()V" since="24"/>
+		<method name="dispatchSystemUiVisibilityChanged(I)V" since="11" deprecated="30"/>
+		<method name="dispatchTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="dispatchTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="dispatchUnhandledMove(Landroid/view/View;I)Z"/>
+		<method name="dispatchVisibilityChanged(Landroid/view/View;I)V" since="8"/>
+		<method name="dispatchWindowFocusChanged(Z)V"/>
+		<method name="dispatchWindowInsetsAnimationEnd(Landroid/view/WindowInsetsAnimation;)V" since="30"/>
+		<method name="dispatchWindowInsetsAnimationPrepare(Landroid/view/WindowInsetsAnimation;)V" since="30"/>
+		<method name="dispatchWindowInsetsAnimationProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;" since="30"/>
+		<method name="dispatchWindowInsetsAnimationStart(Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/view/WindowInsetsAnimation$Bounds;" since="30"/>
+		<method name="dispatchWindowSystemUiVisiblityChanged(I)V" since="16" deprecated="30"/>
+		<method name="dispatchWindowVisibilityChanged(I)V"/>
+		<method name="draw(Landroid/graphics/Canvas;)V"/>
+		<method name="drawableHotspotChanged(FF)V" since="21"/>
+		<method name="drawableStateChanged()V"/>
+		<method name="findFocus()Landroid/view/View;"/>
+		<method name="findViewById(I)Landroid/view/View;"/>
+		<method name="findViewWithTag(Ljava/lang/Object;)Landroid/view/View;"/>
+		<method name="findViewsWithText(Ljava/util/ArrayList;Ljava/lang/CharSequence;I)V" since="14"/>
+		<method name="fitSystemWindows(Landroid/graphics/Rect;)Z" deprecated="20"/>
+		<method name="fitsSystemWindows()Z" since="14" removed="16"/>
+		<method name="focusSearch(I)Landroid/view/View;"/>
+		<method name="forceHasOverlappingRendering(Z)V" since="24"/>
+		<method name="forceLayout()V"/>
+		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z" since="31"/>
+		<method name="generateDisplayHash(Ljava/lang/String;Landroid/graphics/Rect;Ljava/util/concurrent/Executor;Landroid/view/displayhash/DisplayHashResultCallback;)V" since="31"/>
+		<method name="generateViewId()I" since="17"/>
+		<method name="getAccessibilityClassName()Ljava/lang/CharSequence;" since="23"/>
+		<method name="getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate;" since="29"/>
+		<method name="getAccessibilityLiveRegion()I" since="19"/>
+		<method name="getAccessibilityNodeProvider()Landroid/view/accessibility/AccessibilityNodeProvider;" since="16"/>
+		<method name="getAccessibilityPaneTitle()Ljava/lang/CharSequence;" since="28"/>
+		<method name="getAccessibilityTraversalAfter()I" since="22"/>
+		<method name="getAccessibilityTraversalBefore()I" since="22"/>
+		<method name="getAlpha()F" since="11"/>
+		<method name="getAnimation()Landroid/view/animation/Animation;"/>
+		<method name="getAnimationMatrix()Landroid/graphics/Matrix;" since="29"/>
+		<method name="getApplicationWindowToken()Landroid/os/IBinder;"/>
+		<method name="getAttributeResolutionStack(I)[I" since="29"/>
+		<method name="getAttributeSourceResourceMap()Ljava/util/Map;" since="29"/>
+		<method name="getAutofillHints()[Ljava/lang/String;" since="26"/>
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
+		<method name="getAutofillType()I" since="26"/>
+		<method name="getAutofillValue()Landroid/view/autofill/AutofillValue;" since="26"/>
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getBackgroundTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getBackgroundTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="getBaseline()I"/>
+		<method name="getBottom()I"/>
+		<method name="getBottomFadingEdgeStrength()F"/>
+		<method name="getBottomPaddingOffset()I" since="2"/>
+		<method name="getCameraDistance()F" since="16"/>
+		<method name="getClipBounds()Landroid/graphics/Rect;" since="18"/>
+		<method name="getClipBounds(Landroid/graphics/Rect;)Z" since="23"/>
+		<method name="getClipToOutline()Z" since="21"/>
+		<method name="getContentCaptureSession()Landroid/view/contentcapture/ContentCaptureSession;" since="29"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;" since="4"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getContextMenuInfo()Landroid/view/ContextMenu$ContextMenuInfo;"/>
+		<method name="getDefaultFocusHighlightEnabled()Z" since="26"/>
+		<method name="getDefaultSize(II)I"/>
+		<method name="getDisplay()Landroid/view/Display;" since="17"/>
+		<method name="getDrawableState()[I"/>
+		<method name="getDrawingCache()Landroid/graphics/Bitmap;" deprecated="28"/>
+		<method name="getDrawingCache(Z)Landroid/graphics/Bitmap;" since="4" deprecated="28"/>
+		<method name="getDrawingCacheBackgroundColor()I" deprecated="28"/>
+		<method name="getDrawingCacheQuality()I" deprecated="28"/>
+		<method name="getDrawingRect(Landroid/graphics/Rect;)V"/>
+		<method name="getDrawingTime()J"/>
+		<method name="getElevation()F" since="21"/>
+		<method name="getExplicitStyle()I" since="29"/>
+		<method name="getFilterTouchesWhenObscured()Z" since="9"/>
+		<method name="getFitsSystemWindows()Z" since="16"/>
+		<method name="getFocusable()I" since="26"/>
+		<method name="getFocusables(I)Ljava/util/ArrayList;"/>
+		<method name="getFocusedRect(Landroid/graphics/Rect;)V"/>
+		<method name="getForeground()Landroid/graphics/drawable/Drawable;" since="23"/>
+		<method name="getForegroundGravity()I" since="23"/>
+		<method name="getForegroundTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="23"/>
+		<method name="getForegroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
+		<method name="getGlobalVisibleRect(Landroid/graphics/Rect;)Z"/>
+		<method name="getGlobalVisibleRect(Landroid/graphics/Rect;Landroid/graphics/Point;)Z"/>
+		<method name="getHandler()Landroid/os/Handler;"/>
+		<method name="getHasOverlappingRendering()Z" since="24"/>
+		<method name="getHeight()I"/>
+		<method name="getHitRect(Landroid/graphics/Rect;)V"/>
+		<method name="getHorizontalFadingEdgeLength()I"/>
+		<method name="getHorizontalScrollbarHeight()I"/>
+		<method name="getHorizontalScrollbarThumbDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getHorizontalScrollbarTrackDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getId()I"/>
+		<method name="getImportantForAccessibility()I" since="16"/>
+		<method name="getImportantForAutofill()I" since="26"/>
+		<method name="getImportantForContentCapture()I" since="30"/>
+		<method name="getKeepScreenOn()Z"/>
+		<method name="getKeyDispatcherState()Landroid/view/KeyEvent$DispatcherState;" since="5"/>
+		<method name="getLabelFor()I" since="17"/>
+		<method name="getLayerType()I" since="11"/>
+		<method name="getLayoutDirection()I" since="17"/>
+		<method name="getLayoutParams()Landroid/view/ViewGroup$LayoutParams;"/>
+		<method name="getLeft()I"/>
+		<method name="getLeftFadingEdgeStrength()F"/>
+		<method name="getLeftPaddingOffset()I" since="2"/>
+		<method name="getLocalVisibleRect(Landroid/graphics/Rect;)Z"/>
+		<method name="getLocationInSurface([I)V" since="29"/>
+		<method name="getLocationInWindow([I)V"/>
+		<method name="getLocationOnScreen([I)V"/>
+		<method name="getMatrix()Landroid/graphics/Matrix;" since="11"/>
+		<method name="getMeasuredHeight()I"/>
+		<method name="getMeasuredHeightAndState()I" since="11"/>
+		<method name="getMeasuredState()I" since="11"/>
+		<method name="getMeasuredWidth()I"/>
+		<method name="getMeasuredWidthAndState()I" since="11"/>
+		<method name="getMinimumHeight()I" since="16"/>
+		<method name="getMinimumWidth()I" since="16"/>
+		<method name="getNextClusterForwardId()I" since="26"/>
+		<method name="getNextFocusDownId()I"/>
+		<method name="getNextFocusForwardId()I" since="11"/>
+		<method name="getNextFocusLeftId()I"/>
+		<method name="getNextFocusRightId()I"/>
+		<method name="getNextFocusUpId()I"/>
+		<method name="getOnFocusChangeListener()Landroid/view/View$OnFocusChangeListener;"/>
+		<method name="getOutlineAmbientShadowColor()I" since="28"/>
+		<method name="getOutlineProvider()Landroid/view/ViewOutlineProvider;" since="21"/>
+		<method name="getOutlineSpotShadowColor()I" since="28"/>
+		<method name="getOverScrollMode()I" since="9"/>
+		<method name="getOverlay()Landroid/view/ViewOverlay;" since="18"/>
+		<method name="getPaddingBottom()I"/>
+		<method name="getPaddingEnd()I" since="17"/>
+		<method name="getPaddingLeft()I"/>
+		<method name="getPaddingRight()I"/>
+		<method name="getPaddingStart()I" since="17"/>
+		<method name="getPaddingTop()I"/>
+		<method name="getParent()Landroid/view/ViewParent;"/>
+		<method name="getParentForAccessibility()Landroid/view/ViewParent;" since="16"/>
+		<method name="getPivotX()F" since="11"/>
+		<method name="getPivotY()F" since="11"/>
+		<method name="getPointerIcon()Landroid/view/PointerIcon;" since="24"/>
+		<method name="getReceiveContentMimeTypes()[Ljava/lang/String;" since="31"/>
+		<method name="getResources()Landroid/content/res/Resources;"/>
+		<method name="getRevealOnFocusHint()Z" since="25"/>
+		<method name="getRight()I"/>
+		<method name="getRightFadingEdgeStrength()F"/>
+		<method name="getRightPaddingOffset()I" since="2"/>
+		<method name="getRootSurfaceControl()Landroid/view/AttachedSurfaceControl;" since="31"/>
+		<method name="getRootView()Landroid/view/View;"/>
+		<method name="getRootWindowInsets()Landroid/view/WindowInsets;" since="23"/>
+		<method name="getRotation()F" since="11"/>
+		<method name="getRotationX()F" since="11"/>
+		<method name="getRotationY()F" since="11"/>
+		<method name="getScaleX()F" since="11"/>
+		<method name="getScaleY()F" since="11"/>
+		<method name="getScrollBarDefaultDelayBeforeFade()I" since="16"/>
+		<method name="getScrollBarFadeDuration()I" since="16"/>
+		<method name="getScrollBarSize()I" since="16"/>
+		<method name="getScrollBarStyle()I"/>
+		<method name="getScrollCaptureHint()I" since="31"/>
+		<method name="getScrollIndicators()I" since="23"/>
+		<method name="getScrollX()I"/>
+		<method name="getScrollY()I"/>
+		<method name="getSolidColor()I"/>
+		<method name="getSourceLayoutResId()I" since="29"/>
+		<method name="getStateDescription()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getStateListAnimator()Landroid/animation/StateListAnimator;" since="21"/>
+		<method name="getSuggestedMinimumHeight()I"/>
+		<method name="getSuggestedMinimumWidth()I"/>
+		<method name="getSystemGestureExclusionRects()Ljava/util/List;" since="29"/>
+		<method name="getSystemUiVisibility()I" since="11" deprecated="30"/>
+		<method name="getTag()Ljava/lang/Object;"/>
+		<method name="getTag(I)Ljava/lang/Object;" since="4"/>
+		<method name="getTextAlignment()I" since="17"/>
+		<method name="getTextDirection()I" since="17"/>
+		<method name="getTooltipText()Ljava/lang/CharSequence;" since="26"/>
+		<method name="getTop()I"/>
+		<method name="getTopFadingEdgeStrength()F"/>
+		<method name="getTopPaddingOffset()I" since="2"/>
+		<method name="getTouchDelegate()Landroid/view/TouchDelegate;"/>
+		<method name="getTouchables()Ljava/util/ArrayList;"/>
+		<method name="getTransitionAlpha()F" since="29"/>
+		<method name="getTransitionName()Ljava/lang/String;" since="21"/>
+		<method name="getTranslationX()F" since="11"/>
+		<method name="getTranslationY()F" since="11"/>
+		<method name="getTranslationZ()F" since="21"/>
+		<method name="getUniqueDrawingId()J" since="29"/>
+		<method name="getVerticalFadingEdgeLength()I"/>
+		<method name="getVerticalScrollbarPosition()I" since="11"/>
+		<method name="getVerticalScrollbarThumbDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getVerticalScrollbarTrackDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getVerticalScrollbarWidth()I"/>
+		<method name="getViewTranslationResponse()Landroid/view/translation/ViewTranslationResponse;" since="31"/>
+		<method name="getViewTreeObserver()Landroid/view/ViewTreeObserver;"/>
+		<method name="getVisibility()I"/>
+		<method name="getWidth()I"/>
+		<method name="getWindowAttachCount()I"/>
+		<method name="getWindowId()Landroid/view/WindowId;" since="18"/>
+		<method name="getWindowInsetsController()Landroid/view/WindowInsetsController;" since="30"/>
+		<method name="getWindowSystemUiVisibility()I" since="16" deprecated="30"/>
+		<method name="getWindowToken()Landroid/os/IBinder;"/>
+		<method name="getWindowVisibility()I"/>
+		<method name="getWindowVisibleDisplayFrame(Landroid/graphics/Rect;)V" since="3"/>
+		<method name="getX()F" since="11"/>
+		<method name="getY()F" since="11"/>
+		<method name="getZ()F" since="21"/>
+		<method name="hasExplicitFocusable()Z" since="26"/>
+		<method name="hasFocus()Z"/>
+		<method name="hasFocusable()Z"/>
+		<method name="hasNestedScrollingParent()Z" since="21"/>
+		<method name="hasOnClickListeners()Z" since="15"/>
+		<method name="hasOnLongClickListeners()Z" since="30"/>
+		<method name="hasOverlappingRendering()Z" since="16"/>
+		<method name="hasPointerCapture()Z" since="26"/>
+		<method name="hasTransientState()Z" since="16"/>
+		<method name="hasWindowFocus()Z"/>
+		<method name="inflate(Landroid/content/Context;ILandroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="initializeFadingEdge(Landroid/content/res/TypedArray;)V" removed="21"/>
+		<method name="initializeScrollbars(Landroid/content/res/TypedArray;)V" removed="21"/>
+		<method name="invalidate()V"/>
+		<method name="invalidate(IIII)V" deprecated="28"/>
+		<method name="invalidate(Landroid/graphics/Rect;)V" deprecated="28"/>
+		<method name="invalidateOutline()V" since="21"/>
+		<method name="isAccessibilityFocused()Z" since="21"/>
+		<method name="isAccessibilityHeading()Z" since="28"/>
+		<method name="isActivated()Z" since="11"/>
+		<method name="isAttachedToWindow()Z" since="19"/>
+		<method name="isClickable()Z"/>
+		<method name="isContextClickable()Z" since="23"/>
+		<method name="isDirty()Z" since="11"/>
+		<method name="isDrawingCacheEnabled()Z" deprecated="28"/>
+		<method name="isDuplicateParentStateEnabled()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="isFocusable()Z"/>
+		<method name="isFocusableInTouchMode()Z"/>
+		<method name="isFocused()Z"/>
+		<method name="isFocusedByDefault()Z" since="26"/>
+		<method name="isForceDarkAllowed()Z" since="29"/>
+		<method name="isHapticFeedbackEnabled()Z" since="3"/>
+		<method name="isHardwareAccelerated()Z" since="11"/>
+		<method name="isHorizontalFadingEdgeEnabled()Z"/>
+		<method name="isHorizontalScrollBarEnabled()Z"/>
+		<method name="isHovered()Z" since="14"/>
+		<method name="isImportantForAccessibility()Z" since="21"/>
+		<method name="isImportantForAutofill()Z" since="26"/>
+		<method name="isImportantForContentCapture()Z" since="30"/>
+		<method name="isInEditMode()Z" since="3"/>
+		<method name="isInLayout()Z" since="18"/>
+		<method name="isInTouchMode()Z"/>
+		<method name="isKeyboardNavigationCluster()Z" since="26"/>
+		<method name="isLaidOut()Z" since="19"/>
+		<method name="isLayoutDirectionResolved()Z" since="19"/>
+		<method name="isLayoutRequested()Z"/>
+		<method name="isLongClickable()Z"/>
+		<method name="isNestedScrollingEnabled()Z" since="21"/>
+		<method name="isOpaque()Z" since="7"/>
+		<method name="isPaddingOffsetRequired()Z" since="2"/>
+		<method name="isPaddingRelative()Z" since="17"/>
+		<method name="isPivotSet()Z" since="28"/>
+		<method name="isPressed()Z"/>
+		<method name="isSaveEnabled()Z"/>
+		<method name="isSaveFromParentEnabled()Z" since="11"/>
+		<method name="isScreenReaderFocusable()Z" since="28"/>
+		<method name="isScrollContainer()Z" since="16"/>
+		<method name="isScrollbarFadingEnabled()Z" since="5"/>
+		<method name="isSelected()Z"/>
+		<method name="isShowingLayoutBounds()Z" since="30"/>
+		<method name="isShown()Z"/>
+		<method name="isSoundEffectsEnabled()Z"/>
+		<method name="isTemporarilyDetached()Z" since="24"/>
+		<method name="isTextAlignmentResolved()Z" since="19"/>
+		<method name="isTextDirectionResolved()Z" since="19"/>
+		<method name="isVerticalFadingEdgeEnabled()Z"/>
+		<method name="isVerticalScrollBarEnabled()Z"/>
+		<method name="isVisibleToUserForAutofill(I)Z" since="28"/>
+		<method name="jumpDrawablesToCurrentState()V" since="11"/>
+		<method name="keyboardNavigationClusterSearch(Landroid/view/View;I)Landroid/view/View;" since="26"/>
+		<method name="layout(IIII)V"/>
+		<method name="measure(II)V"/>
+		<method name="mergeDrawableStates([I[I)[I"/>
+		<method name="offsetLeftAndRight(I)V"/>
+		<method name="offsetTopAndBottom(I)V"/>
+		<method name="onAnimationEnd()V"/>
+		<method name="onAnimationStart()V"/>
+		<method name="onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets;" since="20"/>
+		<method name="onAttachedToWindow()V"/>
+		<method name="onCancelPendingInputEvents()V" since="19"/>
+		<method name="onCapturedPointerEvent(Landroid/view/MotionEvent;)Z" since="26"/>
+		<method name="onCheckIsTextEditor()Z" since="3"/>
+		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V" since="8"/>
+		<method name="onCreateContextMenu(Landroid/view/ContextMenu;)V"/>
+		<method name="onCreateDrawableState(I)[I"/>
+		<method name="onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection;" since="3"/>
+		<method name="onCreateViewTranslationRequest([ILjava/util/function/Consumer;)V" since="31"/>
+		<method name="onCreateVirtualViewTranslationRequests([J[ILjava/util/function/Consumer;)V" since="31"/>
+		<method name="onDetachedFromWindow()V"/>
+		<method name="onDisplayHint(I)V" since="8"/>
+		<method name="onDragEvent(Landroid/view/DragEvent;)Z" since="11"/>
+		<method name="onDraw(Landroid/graphics/Canvas;)V"/>
+		<method name="onDrawForeground(Landroid/graphics/Canvas;)V" since="23"/>
+		<method name="onDrawScrollBars(Landroid/graphics/Canvas;)V" since="7"/>
+		<method name="onFilterTouchEventForSecurity(Landroid/view/MotionEvent;)Z" since="9"/>
+		<method name="onFinishInflate()V"/>
+		<method name="onFinishTemporaryDetach()V" since="3"/>
+		<method name="onFocusChanged(ZILandroid/graphics/Rect;)V"/>
+		<method name="onGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
+		<method name="onHoverChanged(Z)V" since="14"/>
+		<method name="onHoverEvent(Landroid/view/MotionEvent;)Z" since="14"/>
+		<method name="onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" since="14"/>
+		<method name="onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V" since="14"/>
+		<method name="onKeyPreIme(ILandroid/view/KeyEvent;)Z" since="3"/>
+		<method name="onKeyShortcut(ILandroid/view/KeyEvent;)Z"/>
+		<method name="onLayout(ZIIII)V"/>
+		<method name="onMeasure(II)V"/>
+		<method name="onOverScrolled(IIZZ)V" since="9"/>
+		<method name="onPointerCaptureChange(Z)V" since="26"/>
+		<method name="onPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V" since="14"/>
+		<method name="onProvideAutofillStructure(Landroid/view/ViewStructure;I)V" since="26"/>
+		<method name="onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V" since="26"/>
+		<method name="onProvideContentCaptureStructure(Landroid/view/ViewStructure;I)V" since="30"/>
+		<method name="onProvideStructure(Landroid/view/ViewStructure;)V" since="23"/>
+		<method name="onProvideVirtualStructure(Landroid/view/ViewStructure;)V" since="23"/>
+		<method name="onReceiveContent(Landroid/view/ContentInfo;)Landroid/view/ContentInfo;" since="31"/>
+		<method name="onResolvePointerIcon(Landroid/view/MotionEvent;I)Landroid/view/PointerIcon;" since="24"/>
+		<method name="onRestoreInstanceState(Landroid/os/Parcelable;)V"/>
+		<method name="onRtlPropertiesChanged(I)V" since="17"/>
+		<method name="onSaveInstanceState()Landroid/os/Parcelable;"/>
+		<method name="onScreenStateChanged(I)V" since="16"/>
+		<method name="onScrollCaptureSearch(Landroid/graphics/Rect;Landroid/graphics/Point;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="onScrollChanged(IIII)V"/>
+		<method name="onSetAlpha(I)Z"/>
+		<method name="onSizeChanged(IIII)V"/>
+		<method name="onStartTemporaryDetach()V" since="3"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onViewTranslationResponse(Landroid/view/translation/ViewTranslationResponse;)V" since="31"/>
+		<method name="onVirtualViewTranslationResponses(Landroid/util/LongSparseArray;)V" since="31"/>
+		<method name="onVisibilityAggregated(Z)V" since="24"/>
+		<method name="onVisibilityChanged(Landroid/view/View;I)V" since="8"/>
+		<method name="onWindowFocusChanged(Z)V"/>
+		<method name="onWindowSystemUiVisibilityChanged(I)V" since="16" deprecated="30"/>
+		<method name="onWindowVisibilityChanged(I)V"/>
+		<method name="overScrollBy(IIIIIIIIZ)Z" since="9"/>
+		<method name="performAccessibilityAction(ILandroid/os/Bundle;)Z" since="16"/>
+		<method name="performClick()Z"/>
+		<method name="performContextClick()Z" since="23"/>
+		<method name="performContextClick(FF)Z" since="24"/>
+		<method name="performHapticFeedback(I)Z" since="3"/>
+		<method name="performHapticFeedback(II)Z" since="3"/>
+		<method name="performLongClick()Z"/>
+		<method name="performLongClick(FF)Z" since="24"/>
+		<method name="performReceiveContent(Landroid/view/ContentInfo;)Landroid/view/ContentInfo;" since="31"/>
+		<method name="playSoundEffect(I)V"/>
+		<method name="post(Ljava/lang/Runnable;)Z"/>
+		<method name="postDelayed(Ljava/lang/Runnable;J)Z"/>
+		<method name="postInvalidate()V"/>
+		<method name="postInvalidate(IIII)V"/>
+		<method name="postInvalidateDelayed(J)V"/>
+		<method name="postInvalidateDelayed(JIIII)V"/>
+		<method name="postInvalidateOnAnimation()V" since="16"/>
+		<method name="postInvalidateOnAnimation(IIII)V" since="16"/>
+		<method name="postOnAnimation(Ljava/lang/Runnable;)V" since="16"/>
+		<method name="postOnAnimationDelayed(Ljava/lang/Runnable;J)V" since="16"/>
+		<method name="refreshDrawableState()V"/>
+		<method name="releasePointerCapture()V" since="26"/>
+		<method name="removeCallbacks(Ljava/lang/Runnable;)Z"/>
+		<method name="removeOnAttachStateChangeListener(Landroid/view/View$OnAttachStateChangeListener;)V" since="12"/>
+		<method name="removeOnLayoutChangeListener(Landroid/view/View$OnLayoutChangeListener;)V" since="11"/>
+		<method name="removeOnUnhandledKeyEventListener(Landroid/view/View$OnUnhandledKeyEventListener;)V" since="28"/>
+		<method name="requestApplyInsets()V" since="20"/>
+		<method name="requestFitSystemWindows()V" since="16" deprecated="20"/>
+		<method name="requestFocus()Z"/>
+		<method name="requestFocus(I)Z"/>
+		<method name="requestFocus(ILandroid/graphics/Rect;)Z"/>
+		<method name="requestFocusFromTouch()Z"/>
+		<method name="requestLayout()V"/>
+		<method name="requestPointerCapture()V" since="26"/>
+		<method name="requestRectangleOnScreen(Landroid/graphics/Rect;)Z"/>
+		<method name="requestRectangleOnScreen(Landroid/graphics/Rect;Z)Z"/>
+		<method name="requestUnbufferedDispatch(I)V" since="30"/>
+		<method name="requestUnbufferedDispatch(Landroid/view/MotionEvent;)V" since="21"/>
+		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
+		<method name="resetPivot()V" since="28"/>
+		<method name="resolveSize(II)I"/>
+		<method name="resolveSizeAndState(III)I" since="11"/>
+		<method name="restoreDefaultFocus()Z" since="26"/>
+		<method name="restoreHierarchyState(Landroid/util/SparseArray;)V"/>
+		<method name="saveAttributeDataForStyleable(Landroid/content/Context;[ILandroid/util/AttributeSet;Landroid/content/res/TypedArray;II)V" since="29"/>
+		<method name="saveHierarchyState(Landroid/util/SparseArray;)V"/>
+		<method name="scrollBy(II)V"/>
+		<method name="scrollTo(II)V"/>
+		<method name="setAccessibilityDelegate(Landroid/view/View$AccessibilityDelegate;)V" since="14"/>
+		<method name="setAccessibilityHeading(Z)V" since="28"/>
+		<method name="setAccessibilityLiveRegion(I)V" since="19"/>
+		<method name="setAccessibilityPaneTitle(Ljava/lang/CharSequence;)V" since="28"/>
+		<method name="setAccessibilityTraversalAfter(I)V" since="22"/>
+		<method name="setAccessibilityTraversalBefore(I)V" since="22"/>
+		<method name="setActivated(Z)V" since="11"/>
+		<method name="setAllowClickWhenDisabled(Z)V" since="31"/>
+		<method name="setAlpha(F)V" since="11"/>
+		<method name="setAnimation(Landroid/view/animation/Animation;)V"/>
+		<method name="setAnimationMatrix(Landroid/graphics/Matrix;)V" since="29"/>
+		<method name="setAutofillHints([Ljava/lang/String;)V" since="26"/>
+		<method name="setAutofillId(Landroid/view/autofill/AutofillId;)V" since="28"/>
+		<method name="setBackground(Landroid/graphics/drawable/Drawable;)V" since="16"/>
+		<method name="setBackgroundColor(I)V"/>
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" deprecated="16"/>
+		<method name="setBackgroundResource(I)V"/>
+		<method name="setBackgroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setBottom(I)V" since="11"/>
+		<method name="setCameraDistance(F)V" since="12"/>
+		<method name="setClickable(Z)V"/>
+		<method name="setClipBounds(Landroid/graphics/Rect;)V" since="18"/>
+		<method name="setClipToOutline(Z)V" since="21"/>
+		<method name="setContentCaptureSession(Landroid/view/contentcapture/ContentCaptureSession;)V" since="29"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" since="4"/>
+		<method name="setContextClickable(Z)V" since="23"/>
+		<method name="setDefaultFocusHighlightEnabled(Z)V" since="26"/>
+		<method name="setDrawingCacheBackgroundColor(I)V" deprecated="28"/>
+		<method name="setDrawingCacheEnabled(Z)V" deprecated="28"/>
+		<method name="setDrawingCacheQuality(I)V" deprecated="28"/>
+		<method name="setDuplicateParentStateEnabled(Z)V"/>
+		<method name="setElevation(F)V" since="21"/>
+		<method name="setEnabled(Z)V"/>
+		<method name="setFadingEdgeLength(I)V"/>
+		<method name="setFilterTouchesWhenObscured(Z)V" since="9"/>
+		<method name="setFitsSystemWindows(Z)V" since="14"/>
+		<method name="setFocusable(I)V" since="26"/>
+		<method name="setFocusable(Z)V"/>
+		<method name="setFocusableInTouchMode(Z)V"/>
+		<method name="setFocusedByDefault(Z)V" since="26"/>
+		<method name="setForceDarkAllowed(Z)V" since="29"/>
+		<method name="setForeground(Landroid/graphics/drawable/Drawable;)V" since="23"/>
+		<method name="setForegroundGravity(I)V" since="23"/>
+		<method name="setForegroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setForegroundTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
+		<method name="setForegroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
+		<method name="setHapticFeedbackEnabled(Z)V" since="3"/>
+		<method name="setHasTransientState(Z)V" since="16"/>
+		<method name="setHorizontalFadingEdgeEnabled(Z)V"/>
+		<method name="setHorizontalScrollBarEnabled(Z)V"/>
+		<method name="setHorizontalScrollbarThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setHorizontalScrollbarTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setHovered(Z)V" since="14"/>
+		<method name="setId(I)V"/>
+		<method name="setImportantForAccessibility(I)V" since="16"/>
+		<method name="setImportantForAutofill(I)V" since="26"/>
+		<method name="setImportantForContentCapture(I)V" since="30"/>
+		<method name="setKeepScreenOn(Z)V"/>
+		<method name="setKeyboardNavigationCluster(Z)V" since="26"/>
+		<method name="setLabelFor(I)V" since="17"/>
+		<method name="setLayerPaint(Landroid/graphics/Paint;)V" since="17"/>
+		<method name="setLayerType(ILandroid/graphics/Paint;)V" since="11"/>
+		<method name="setLayoutDirection(I)V" since="17"/>
+		<method name="setLayoutParams(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="setLeft(I)V" since="11"/>
+		<method name="setLeftTopRightBottom(IIII)V" since="29"/>
+		<method name="setLongClickable(Z)V"/>
+		<method name="setMeasuredDimension(II)V"/>
+		<method name="setMinimumHeight(I)V"/>
+		<method name="setMinimumWidth(I)V"/>
+		<method name="setNestedScrollingEnabled(Z)V" since="21"/>
+		<method name="setNextClusterForwardId(I)V" since="26"/>
+		<method name="setNextFocusDownId(I)V"/>
+		<method name="setNextFocusForwardId(I)V" since="11"/>
+		<method name="setNextFocusLeftId(I)V"/>
+		<method name="setNextFocusRightId(I)V"/>
+		<method name="setNextFocusUpId(I)V"/>
+		<method name="setOnApplyWindowInsetsListener(Landroid/view/View$OnApplyWindowInsetsListener;)V" since="20"/>
+		<method name="setOnCapturedPointerListener(Landroid/view/View$OnCapturedPointerListener;)V" since="26"/>
+		<method name="setOnClickListener(Landroid/view/View$OnClickListener;)V"/>
+		<method name="setOnContextClickListener(Landroid/view/View$OnContextClickListener;)V" since="23"/>
+		<method name="setOnCreateContextMenuListener(Landroid/view/View$OnCreateContextMenuListener;)V"/>
+		<method name="setOnDragListener(Landroid/view/View$OnDragListener;)V" since="11"/>
+		<method name="setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V"/>
+		<method name="setOnGenericMotionListener(Landroid/view/View$OnGenericMotionListener;)V" since="12"/>
+		<method name="setOnHoverListener(Landroid/view/View$OnHoverListener;)V" since="14"/>
+		<method name="setOnKeyListener(Landroid/view/View$OnKeyListener;)V"/>
+		<method name="setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V"/>
+		<method name="setOnReceiveContentListener([Ljava/lang/String;Landroid/view/OnReceiveContentListener;)V" since="31"/>
+		<method name="setOnScrollChangeListener(Landroid/view/View$OnScrollChangeListener;)V" since="23"/>
+		<method name="setOnSystemUiVisibilityChangeListener(Landroid/view/View$OnSystemUiVisibilityChangeListener;)V" since="11" deprecated="30"/>
+		<method name="setOnTouchListener(Landroid/view/View$OnTouchListener;)V"/>
+		<method name="setOutlineAmbientShadowColor(I)V" since="28"/>
+		<method name="setOutlineProvider(Landroid/view/ViewOutlineProvider;)V" since="21"/>
+		<method name="setOutlineSpotShadowColor(I)V" since="28"/>
+		<method name="setOverScrollMode(I)V" since="9"/>
+		<method name="setPadding(IIII)V"/>
+		<method name="setPaddingRelative(IIII)V" since="17"/>
+		<method name="setPivotX(F)V" since="11"/>
+		<method name="setPivotY(F)V" since="11"/>
+		<method name="setPointerIcon(Landroid/view/PointerIcon;)V" since="24"/>
+		<method name="setPressed(Z)V"/>
+		<method name="setRenderEffect(Landroid/graphics/RenderEffect;)V" since="31"/>
+		<method name="setRevealOnFocusHint(Z)V" since="25"/>
+		<method name="setRight(I)V" since="11"/>
+		<method name="setRotation(F)V" since="11"/>
+		<method name="setRotationX(F)V" since="11"/>
+		<method name="setRotationY(F)V" since="11"/>
+		<method name="setSaveEnabled(Z)V"/>
+		<method name="setSaveFromParentEnabled(Z)V" since="11"/>
+		<method name="setScaleX(F)V" since="11"/>
+		<method name="setScaleY(F)V" since="11"/>
+		<method name="setScreenReaderFocusable(Z)V" since="28"/>
+		<method name="setScrollBarDefaultDelayBeforeFade(I)V" since="16"/>
+		<method name="setScrollBarFadeDuration(I)V" since="16"/>
+		<method name="setScrollBarSize(I)V" since="16"/>
+		<method name="setScrollBarStyle(I)V"/>
+		<method name="setScrollCaptureCallback(Landroid/view/ScrollCaptureCallback;)V" since="31"/>
+		<method name="setScrollCaptureHint(I)V" since="31"/>
+		<method name="setScrollContainer(Z)V" since="3"/>
+		<method name="setScrollIndicators(I)V" since="23"/>
+		<method name="setScrollIndicators(II)V" since="23"/>
+		<method name="setScrollX(I)V" since="14"/>
+		<method name="setScrollY(I)V" since="14"/>
+		<method name="setScrollbarFadingEnabled(Z)V" since="5"/>
+		<method name="setSelected(Z)V"/>
+		<method name="setSoundEffectsEnabled(Z)V"/>
+		<method name="setStateDescription(Ljava/lang/CharSequence;)V" since="30"/>
+		<method name="setStateListAnimator(Landroid/animation/StateListAnimator;)V" since="21"/>
+		<method name="setSystemGestureExclusionRects(Ljava/util/List;)V" since="29"/>
+		<method name="setSystemUiVisibility(I)V" since="11" deprecated="30"/>
+		<method name="setTag(ILjava/lang/Object;)V" since="4"/>
+		<method name="setTag(Ljava/lang/Object;)V"/>
+		<method name="setTextAlignment(I)V" since="17"/>
+		<method name="setTextDirection(I)V" since="17"/>
+		<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="26"/>
+		<method name="setTop(I)V" since="11"/>
+		<method name="setTouchDelegate(Landroid/view/TouchDelegate;)V"/>
+		<method name="setTransitionAlpha(F)V" since="29"/>
+		<method name="setTransitionName(Ljava/lang/String;)V" since="21"/>
+		<method name="setTransitionVisibility(I)V" since="29"/>
+		<method name="setTranslationX(F)V" since="11"/>
+		<method name="setTranslationY(F)V" since="11"/>
+		<method name="setTranslationZ(F)V" since="21"/>
+		<method name="setVerticalFadingEdgeEnabled(Z)V"/>
+		<method name="setVerticalScrollBarEnabled(Z)V"/>
+		<method name="setVerticalScrollbarPosition(I)V" since="11"/>
+		<method name="setVerticalScrollbarThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setVerticalScrollbarTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setViewTranslationCallback(Landroid/view/translation/ViewTranslationCallback;)V" since="31"/>
+		<method name="setVisibility(I)V"/>
+		<method name="setWillNotCacheDrawing(Z)V" deprecated="28"/>
+		<method name="setWillNotDraw(Z)V"/>
+		<method name="setWindowInsetsAnimationCallback(Landroid/view/WindowInsetsAnimation$Callback;)V" since="30"/>
+		<method name="setX(F)V" since="11"/>
+		<method name="setY(F)V" since="11"/>
+		<method name="setZ(F)V" since="21"/>
+		<method name="showContextMenu()Z"/>
+		<method name="showContextMenu(FF)Z" since="24"/>
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
+		<method name="startActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
+		<method name="startAnimation(Landroid/view/animation/Animation;)V"/>
+		<method name="startDrag(Landroid/content/ClipData;Landroid/view/View$DragShadowBuilder;Ljava/lang/Object;I)Z" since="11" deprecated="24"/>
+		<method name="startDragAndDrop(Landroid/content/ClipData;Landroid/view/View$DragShadowBuilder;Ljava/lang/Object;I)Z" since="24"/>
+		<method name="startNestedScroll(I)Z" since="21"/>
+		<method name="stopNestedScroll()V" since="21"/>
+		<method name="transformMatrixToGlobal(Landroid/graphics/Matrix;)V" since="29"/>
+		<method name="transformMatrixToLocal(Landroid/graphics/Matrix;)V" since="29"/>
+		<method name="unscheduleDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="updateDragShadow(Landroid/view/View$DragShadowBuilder;)V" since="24"/>
+		<method name="verifyDrawable(Landroid/graphics/drawable/Drawable;)Z"/>
+		<method name="willNotCacheDrawing()Z" deprecated="28"/>
+		<method name="willNotDraw()Z"/>
+		<field name="ACCESSIBILITY_LIVE_REGION_ASSERTIVE" since="19"/>
+		<field name="ACCESSIBILITY_LIVE_REGION_NONE" since="19"/>
+		<field name="ACCESSIBILITY_LIVE_REGION_POLITE" since="19"/>
+		<field name="ALPHA" since="14"/>
+		<field name="AUTOFILL_FLAG_INCLUDE_NOT_IMPORTANT_VIEWS" since="26"/>
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE" since="26"/>
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY" since="26"/>
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH" since="26"/>
+		<field name="AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR" since="26"/>
+		<field name="AUTOFILL_HINT_CREDIT_CARD_NUMBER" since="26"/>
+		<field name="AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE" since="26"/>
+		<field name="AUTOFILL_HINT_EMAIL_ADDRESS" since="26"/>
+		<field name="AUTOFILL_HINT_NAME" since="26"/>
+		<field name="AUTOFILL_HINT_PASSWORD" since="26"/>
+		<field name="AUTOFILL_HINT_PHONE" since="26"/>
+		<field name="AUTOFILL_HINT_POSTAL_ADDRESS" since="26"/>
+		<field name="AUTOFILL_HINT_POSTAL_CODE" since="26"/>
+		<field name="AUTOFILL_HINT_USERNAME" since="26"/>
+		<field name="AUTOFILL_TYPE_DATE" since="26"/>
+		<field name="AUTOFILL_TYPE_LIST" since="26"/>
+		<field name="AUTOFILL_TYPE_NONE" since="26"/>
+		<field name="AUTOFILL_TYPE_TEXT" since="26"/>
+		<field name="AUTOFILL_TYPE_TOGGLE" since="26"/>
+		<field name="DRAG_FLAG_ACCESSIBILITY_ACTION" since="33"/>
+		<field name="DRAG_FLAG_GLOBAL" since="24"/>
+		<field name="DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION" since="24"/>
+		<field name="DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION" since="24"/>
+		<field name="DRAG_FLAG_GLOBAL_URI_READ" since="24"/>
+		<field name="DRAG_FLAG_GLOBAL_URI_WRITE" since="24"/>
+		<field name="DRAG_FLAG_OPAQUE" since="24"/>
+		<field name="DRAWING_CACHE_QUALITY_AUTO" deprecated="28"/>
+		<field name="DRAWING_CACHE_QUALITY_HIGH" deprecated="28"/>
+		<field name="DRAWING_CACHE_QUALITY_LOW" deprecated="28"/>
+		<field name="EMPTY_STATE_SET"/>
+		<field name="ENABLED_FOCUSED_SELECTED_STATE_SET"/>
+		<field name="ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="ENABLED_FOCUSED_STATE_SET"/>
+		<field name="ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="ENABLED_SELECTED_STATE_SET"/>
+		<field name="ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="ENABLED_STATE_SET"/>
+		<field name="ENABLED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="FIND_VIEWS_WITH_CONTENT_DESCRIPTION" since="14"/>
+		<field name="FIND_VIEWS_WITH_TEXT" since="14"/>
+		<field name="FOCUSABLE" since="26"/>
+		<field name="FOCUSABLES_ALL" since="4"/>
+		<field name="FOCUSABLES_TOUCH_MODE" since="4"/>
+		<field name="FOCUSABLE_AUTO" since="26"/>
+		<field name="FOCUSED_SELECTED_STATE_SET"/>
+		<field name="FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="FOCUSED_STATE_SET"/>
+		<field name="FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="FOCUS_BACKWARD"/>
+		<field name="FOCUS_DOWN"/>
+		<field name="FOCUS_FORWARD"/>
+		<field name="FOCUS_LEFT"/>
+		<field name="FOCUS_RIGHT"/>
+		<field name="FOCUS_UP"/>
+		<field name="GONE"/>
+		<field name="HAPTIC_FEEDBACK_ENABLED" since="3"/>
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_AUTO" since="16"/>
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_NO" since="16"/>
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS" since="19"/>
+		<field name="IMPORTANT_FOR_ACCESSIBILITY_YES" since="16"/>
+		<field name="IMPORTANT_FOR_AUTOFILL_AUTO" since="26"/>
+		<field name="IMPORTANT_FOR_AUTOFILL_NO" since="26"/>
+		<field name="IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS" since="26"/>
+		<field name="IMPORTANT_FOR_AUTOFILL_YES" since="26"/>
+		<field name="IMPORTANT_FOR_AUTOFILL_YES_EXCLUDE_DESCENDANTS" since="26"/>
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_AUTO" since="30"/>
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_NO" since="30"/>
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_NO_EXCLUDE_DESCENDANTS" since="30"/>
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_YES" since="30"/>
+		<field name="IMPORTANT_FOR_CONTENT_CAPTURE_YES_EXCLUDE_DESCENDANTS" since="30"/>
+		<field name="INVISIBLE"/>
+		<field name="KEEP_SCREEN_ON"/>
+		<field name="LAYER_TYPE_HARDWARE" since="11"/>
+		<field name="LAYER_TYPE_NONE" since="11"/>
+		<field name="LAYER_TYPE_SOFTWARE" since="11"/>
+		<field name="LAYOUT_DIRECTION_INHERIT" since="17"/>
+		<field name="LAYOUT_DIRECTION_LOCALE" since="17"/>
+		<field name="LAYOUT_DIRECTION_LTR" since="17"/>
+		<field name="LAYOUT_DIRECTION_RTL" since="17"/>
+		<field name="MEASURED_HEIGHT_STATE_SHIFT" since="11"/>
+		<field name="MEASURED_SIZE_MASK" since="11"/>
+		<field name="MEASURED_STATE_MASK" since="11"/>
+		<field name="MEASURED_STATE_TOO_SMALL" since="11"/>
+		<field name="NOT_FOCUSABLE" since="26"/>
+		<field name="NO_ID"/>
+		<field name="OVER_SCROLL_ALWAYS" since="9"/>
+		<field name="OVER_SCROLL_IF_CONTENT_SCROLLS" since="9"/>
+		<field name="OVER_SCROLL_NEVER" since="9"/>
+		<field name="PRESSED_ENABLED_FOCUSED_SELECTED_STATE_SET"/>
+		<field name="PRESSED_ENABLED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_ENABLED_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_ENABLED_FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_ENABLED_SELECTED_STATE_SET"/>
+		<field name="PRESSED_ENABLED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_ENABLED_STATE_SET"/>
+		<field name="PRESSED_ENABLED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_FOCUSED_SELECTED_STATE_SET"/>
+		<field name="PRESSED_FOCUSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_FOCUSED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_SELECTED_STATE_SET"/>
+		<field name="PRESSED_SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="PRESSED_STATE_SET" since="19"/>
+		<field name="PRESSED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="ROTATION" since="14"/>
+		<field name="ROTATION_X" since="14"/>
+		<field name="ROTATION_Y" since="14"/>
+		<field name="SCALE_X" since="14"/>
+		<field name="SCALE_Y" since="14"/>
+		<field name="SCREEN_STATE_OFF" since="16"/>
+		<field name="SCREEN_STATE_ON" since="16"/>
+		<field name="SCROLLBARS_INSIDE_INSET"/>
+		<field name="SCROLLBARS_INSIDE_OVERLAY"/>
+		<field name="SCROLLBARS_OUTSIDE_INSET"/>
+		<field name="SCROLLBARS_OUTSIDE_OVERLAY"/>
+		<field name="SCROLLBAR_POSITION_DEFAULT" since="11"/>
+		<field name="SCROLLBAR_POSITION_LEFT" since="11"/>
+		<field name="SCROLLBAR_POSITION_RIGHT" since="11"/>
+		<field name="SCROLL_AXIS_HORIZONTAL" since="21"/>
+		<field name="SCROLL_AXIS_NONE" since="21"/>
+		<field name="SCROLL_AXIS_VERTICAL" since="21"/>
+		<field name="SCROLL_CAPTURE_HINT_AUTO" since="31"/>
+		<field name="SCROLL_CAPTURE_HINT_EXCLUDE" since="31"/>
+		<field name="SCROLL_CAPTURE_HINT_EXCLUDE_DESCENDANTS" since="31"/>
+		<field name="SCROLL_CAPTURE_HINT_INCLUDE" since="31"/>
+		<field name="SCROLL_INDICATOR_BOTTOM" since="23"/>
+		<field name="SCROLL_INDICATOR_END" since="23"/>
+		<field name="SCROLL_INDICATOR_LEFT" since="23"/>
+		<field name="SCROLL_INDICATOR_RIGHT" since="23"/>
+		<field name="SCROLL_INDICATOR_START" since="23"/>
+		<field name="SCROLL_INDICATOR_TOP" since="23"/>
+		<field name="SELECTED_STATE_SET"/>
+		<field name="SELECTED_WINDOW_FOCUSED_STATE_SET"/>
+		<field name="SOUND_EFFECTS_ENABLED"/>
+		<field name="STATUS_BAR_HIDDEN" since="11" deprecated="15"/>
+		<field name="STATUS_BAR_VISIBLE" since="11" deprecated="15"/>
+		<field name="SYSTEM_UI_FLAG_FULLSCREEN" since="16" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_HIDE_NAVIGATION" since="14" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_IMMERSIVE" since="19" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_IMMERSIVE_STICKY" since="19" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN" since="16" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION" since="16" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_LAYOUT_STABLE" since="16" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR" since="26" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_LIGHT_STATUS_BAR" since="23" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_LOW_PROFILE" since="14" deprecated="30"/>
+		<field name="SYSTEM_UI_FLAG_VISIBLE" since="14" deprecated="30"/>
+		<field name="SYSTEM_UI_LAYOUT_FLAGS" since="16" deprecated="30"/>
+		<field name="TEXT_ALIGNMENT_CENTER" since="17"/>
+		<field name="TEXT_ALIGNMENT_GRAVITY" since="17"/>
+		<field name="TEXT_ALIGNMENT_INHERIT" since="16"/>
+		<field name="TEXT_ALIGNMENT_RESOLVED_DEFAULT" since="16" removed="17"/>
+		<field name="TEXT_ALIGNMENT_TEXT_END" since="17"/>
+		<field name="TEXT_ALIGNMENT_TEXT_START" since="17"/>
+		<field name="TEXT_ALIGNMENT_VIEW_END" since="17"/>
+		<field name="TEXT_ALIGNMENT_VIEW_START" since="17"/>
+		<field name="TEXT_DIRECTION_ANY_RTL" since="17"/>
+		<field name="TEXT_DIRECTION_FIRST_STRONG" since="17"/>
+		<field name="TEXT_DIRECTION_FIRST_STRONG_LTR" since="23"/>
+		<field name="TEXT_DIRECTION_FIRST_STRONG_RTL" since="23"/>
+		<field name="TEXT_DIRECTION_INHERIT" since="17"/>
+		<field name="TEXT_DIRECTION_LOCALE" since="17"/>
+		<field name="TEXT_DIRECTION_LTR" since="17"/>
+		<field name="TEXT_DIRECTION_RTL" since="17"/>
+		<field name="TRANSLATION_X" since="14"/>
+		<field name="TRANSLATION_Y" since="14"/>
+		<field name="TRANSLATION_Z" since="21"/>
+		<field name="VIEW_LOG_TAG"/>
+		<field name="VISIBLE"/>
+		<field name="WINDOW_FOCUSED_STATE_SET"/>
+		<field name="X" since="14"/>
+		<field name="Y" since="14"/>
+		<field name="Z" since="21"/>
+	</class>
+	<class name="android/view/View$AccessibilityDelegate" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addExtraDataToAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26"/>
+		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z"/>
+		<method name="getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider;" since="16"/>
+		<method name="onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V"/>
+		<method name="onInitializeAccessibilityNodeInfo(Landroid/view/View;Landroid/view/accessibility/AccessibilityNodeInfo;)V"/>
+		<method name="onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V"/>
+		<method name="onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z"/>
+		<method name="performAccessibilityAction(Landroid/view/View;ILandroid/os/Bundle;)Z" since="16"/>
+		<method name="sendAccessibilityEvent(Landroid/view/View;I)V"/>
+		<method name="sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V"/>
+	</class>
+	<class name="android/view/View$BaseSavedState" since="1">
+		<extends name="android/view/AbsSavedState"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;Ljava/lang/ClassLoader;)V" since="24"/>
+		<method name="&lt;init>(Landroid/os/Parcelable;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/View$DragShadowBuilder" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/view/View;)V"/>
+		<method name="getView()Landroid/view/View;"/>
+		<method name="onDrawShadow(Landroid/graphics/Canvas;)V"/>
+		<method name="onProvideShadowMetrics(Landroid/graphics/Point;Landroid/graphics/Point;)V"/>
+	</class>
+	<class name="android/view/View$MeasureSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getMode(I)I"/>
+		<method name="getSize(I)I"/>
+		<method name="makeMeasureSpec(II)I"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+		<field name="AT_MOST"/>
+		<field name="EXACTLY"/>
+		<field name="UNSPECIFIED"/>
+	</class>
+	<class name="android/view/View$OnApplyWindowInsetsListener" since="20">
+		<extends name="java/lang/Object"/>
+		<method name="onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets;"/>
+	</class>
+	<class name="android/view/View$OnAttachStateChangeListener" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="onViewAttachedToWindow(Landroid/view/View;)V"/>
+		<method name="onViewDetachedFromWindow(Landroid/view/View;)V"/>
+	</class>
+	<class name="android/view/View$OnCapturedPointerListener" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="onCapturedPointer(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/view/View$OnClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onClick(Landroid/view/View;)V"/>
+	</class>
+	<class name="android/view/View$OnContextClickListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onContextClick(Landroid/view/View;)Z"/>
+	</class>
+	<class name="android/view/View$OnCreateContextMenuListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onCreateContextMenu(Landroid/view/ContextMenu;Landroid/view/View;Landroid/view/ContextMenu$ContextMenuInfo;)V"/>
+	</class>
+	<class name="android/view/View$OnDragListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onDrag(Landroid/view/View;Landroid/view/DragEvent;)Z"/>
+	</class>
+	<class name="android/view/View$OnFocusChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onFocusChange(Landroid/view/View;Z)V"/>
+	</class>
+	<class name="android/view/View$OnGenericMotionListener" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="onGenericMotion(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/view/View$OnHoverListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onHover(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/view/View$OnKeyListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onKey(Landroid/view/View;ILandroid/view/KeyEvent;)Z"/>
+	</class>
+	<class name="android/view/View$OnLayoutChangeListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onLayoutChange(Landroid/view/View;IIIIIIII)V"/>
+	</class>
+	<class name="android/view/View$OnLongClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onLongClick(Landroid/view/View;)Z"/>
+	</class>
+	<class name="android/view/View$OnScrollChangeListener" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="onScrollChange(Landroid/view/View;IIII)V"/>
+	</class>
+	<class name="android/view/View$OnSystemUiVisibilityChangeListener" since="11" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="onSystemUiVisibilityChange(I)V" deprecated="30"/>
+	</class>
+	<class name="android/view/View$OnTouchListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onTouch(Landroid/view/View;Landroid/view/MotionEvent;)Z"/>
+	</class>
+	<class name="android/view/View$OnUnhandledKeyEventListener" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="onUnhandledKeyEvent(Landroid/view/View;Landroid/view/KeyEvent;)Z"/>
+	</class>
+	<class name="android/view/ViewAnimationUtils" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="createCircularReveal(Landroid/view/View;IIFF)Landroid/animation/Animator;"/>
+	</class>
+	<class name="android/view/ViewConfiguration" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="15"/>
+		<method name="get(Landroid/content/Context;)Landroid/view/ViewConfiguration;" since="3"/>
+		<method name="getAmbiguousGestureMultiplier()F" since="29" deprecated="30"/>
+		<method name="getDefaultActionModeHideDuration()J" since="23"/>
+		<method name="getDoubleTapTimeout()I" since="3"/>
+		<method name="getEdgeSlop()I" deprecated="15"/>
+		<method name="getFadingEdgeLength()I" deprecated="15"/>
+		<method name="getGlobalActionKeyTimeout()J" deprecated="20"/>
+		<method name="getJumpTapTimeout()I"/>
+		<method name="getKeyRepeatDelay()I" since="12"/>
+		<method name="getKeyRepeatTimeout()I" since="12"/>
+		<method name="getLongPressTimeout()I"/>
+		<method name="getMaximumDrawingCacheSize()I" deprecated="15"/>
+		<method name="getMaximumFlingVelocity()I" since="4" deprecated="15"/>
+		<method name="getMinimumFlingVelocity()I" deprecated="15"/>
+		<method name="getMultiPressTimeout()I" since="31"/>
+		<method name="getPressedStateDuration()I"/>
+		<method name="getScaledAmbiguousGestureMultiplier()F" since="30"/>
+		<method name="getScaledDoubleTapSlop()I" since="3"/>
+		<method name="getScaledEdgeSlop()I" since="3"/>
+		<method name="getScaledFadingEdgeLength()I" since="3"/>
+		<method name="getScaledHorizontalScrollFactor()F" since="26"/>
+		<method name="getScaledHoverSlop()I" since="28"/>
+		<method name="getScaledMaximumDrawingCacheSize()I" since="3"/>
+		<method name="getScaledMaximumFlingVelocity()I" since="4"/>
+		<method name="getScaledMinimumFlingVelocity()I" since="3"/>
+		<method name="getScaledMinimumScalingSpan()I" since="29"/>
+		<method name="getScaledOverflingDistance()I" since="9"/>
+		<method name="getScaledOverscrollDistance()I" since="9"/>
+		<method name="getScaledPagingTouchSlop()I" since="8"/>
+		<method name="getScaledScrollBarSize()I" since="3"/>
+		<method name="getScaledTouchSlop()I" since="3"/>
+		<method name="getScaledVerticalScrollFactor()F" since="26"/>
+		<method name="getScaledWindowTouchSlop()I" since="3"/>
+		<method name="getScrollBarFadeDuration()I" since="5"/>
+		<method name="getScrollBarSize()I" deprecated="15"/>
+		<method name="getScrollDefaultDelay()I" since="5"/>
+		<method name="getScrollFriction()F"/>
+		<method name="getTapTimeout()I"/>
+		<method name="getTouchSlop()I" deprecated="15"/>
+		<method name="getWindowTouchSlop()I" deprecated="15"/>
+		<method name="getZoomControlsTimeout()J"/>
+		<method name="hasPermanentMenuKey()Z" since="14"/>
+		<method name="shouldShowMenuShortcutsWhenKeyboardPresent()Z" since="28"/>
+	</class>
+	<class name="android/view/ViewDebug" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="dumpCapturedView(Ljava/lang/String;Ljava/lang/Object;)V" since="3"/>
+		<method name="startHierarchyTracing(Ljava/lang/String;Landroid/view/View;)V" deprecated="16"/>
+		<method name="startRecyclerTracing(Ljava/lang/String;Landroid/view/View;)V" deprecated="16"/>
+		<method name="stopHierarchyTracing()V" deprecated="16"/>
+		<method name="stopRecyclerTracing()V" deprecated="16"/>
+		<method name="trace(Landroid/view/View;Landroid/view/ViewDebug$HierarchyTraceType;)V" deprecated="16"/>
+		<method name="trace(Landroid/view/View;Landroid/view/ViewDebug$RecyclerTraceType;[I)V" deprecated="16"/>
+		<field name="TRACE_HIERARCHY" deprecated="16"/>
+		<field name="TRACE_RECYCLER" deprecated="16"/>
+	</class>
+	<class name="android/view/ViewDebug$CapturedViewProperty" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="retrieveReturn()Z"/>
+	</class>
+	<class name="android/view/ViewDebug$ExportedProperty" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="category()Ljava/lang/String;" since="9"/>
+		<method name="deepExport()Z"/>
+		<method name="flagMapping()[Landroid/view/ViewDebug$FlagToString;" since="4"/>
+		<method name="formatToHexString()Z" since="21"/>
+		<method name="hasAdjacentMapping()Z" since="21"/>
+		<method name="indexMapping()[Landroid/view/ViewDebug$IntToString;" since="3"/>
+		<method name="mapping()[Landroid/view/ViewDebug$IntToString;"/>
+		<method name="prefix()Ljava/lang/String;"/>
+		<method name="resolveId()Z"/>
+	</class>
+	<class name="android/view/ViewDebug$FlagToString" since="4">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="equals()I"/>
+		<method name="mask()I"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="outputIf()Z"/>
+	</class>
+	<class name="android/view/ViewDebug$HierarchyTraceType" since="1" deprecated="16">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$HierarchyTraceType;"/>
+		<method name="values()[Landroid/view/ViewDebug$HierarchyTraceType;"/>
+		<field name="BUILD_CACHE" deprecated="29"/>
+		<field name="DRAW" deprecated="29"/>
+		<field name="INVALIDATE" deprecated="29"/>
+		<field name="INVALIDATE_CHILD" deprecated="29"/>
+		<field name="INVALIDATE_CHILD_IN_PARENT" deprecated="29"/>
+		<field name="ON_LAYOUT" deprecated="29"/>
+		<field name="ON_MEASURE" deprecated="29"/>
+		<field name="REQUEST_LAYOUT" deprecated="29"/>
+	</class>
+	<class name="android/view/ViewDebug$IntToString" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="from()I"/>
+		<method name="to()Ljava/lang/String;"/>
+	</class>
+	<class name="android/view/ViewDebug$RecyclerTraceType" since="1" deprecated="16">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/view/ViewDebug$RecyclerTraceType;"/>
+		<method name="values()[Landroid/view/ViewDebug$RecyclerTraceType;"/>
+		<field name="BIND_VIEW" deprecated="29"/>
+		<field name="MOVE_FROM_ACTIVE_TO_SCRAP_HEAP" deprecated="29"/>
+		<field name="MOVE_TO_ACTIVE_HEAP" removed="8"/>
+		<field name="MOVE_TO_SCRAP_HEAP" deprecated="29"/>
+		<field name="NEW_VIEW" deprecated="29"/>
+		<field name="RECYCLE_FROM_ACTIVE_HEAP" deprecated="29"/>
+		<field name="RECYCLE_FROM_SCRAP_HEAP" deprecated="29"/>
+	</class>
+	<class name="android/view/ViewGroup" since="1">
+		<extends name="android/view/View"/>
+		<implements name="android/view/ViewManager"/>
+		<implements name="android/view/ViewParent"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="addStatesFromChildren()Z"/>
+		<method name="addView(Landroid/view/View;)V"/>
+		<method name="addView(Landroid/view/View;I)V"/>
+		<method name="addView(Landroid/view/View;II)V"/>
+		<method name="addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)Z"/>
+		<method name="addViewInLayout(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;Z)Z"/>
+		<method name="attachLayoutAnimationParameters(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;II)V"/>
+		<method name="attachViewToParent(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="canAnimate()Z"/>
+		<method name="checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z"/>
+		<method name="cleanupLayoutState(Landroid/view/View;)V"/>
+		<method name="clearDisappearingChildren()V"/>
+		<method name="debug(I)V"/>
+		<method name="detachAllViewsFromParent()V"/>
+		<method name="detachViewFromParent(I)V"/>
+		<method name="detachViewFromParent(Landroid/view/View;)V"/>
+		<method name="detachViewsFromParent(II)V"/>
+		<method name="dispatchFreezeSelfOnly(Landroid/util/SparseArray;)V"/>
+		<method name="dispatchThawSelfOnly(Landroid/util/SparseArray;)V"/>
+		<method name="drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z"/>
+		<method name="endViewTransition(Landroid/view/View;)V" since="11"/>
+		<method name="gatherTransparentRegion(Landroid/graphics/Region;)Z"/>
+		<method name="generateDefaultLayoutParams()Landroid/view/ViewGroup$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams;"/>
+		<method name="getChildAt(I)Landroid/view/View;"/>
+		<method name="getChildCount()I"/>
+		<method name="getChildDrawingOrder(I)I" since="29"/>
+		<method name="getChildDrawingOrder(II)I"/>
+		<method name="getChildMeasureSpec(III)I"/>
+		<method name="getChildStaticTransformation(Landroid/view/View;Landroid/view/animation/Transformation;)Z"/>
+		<method name="getClipChildren()Z" since="18"/>
+		<method name="getClipToPadding()Z" since="21"/>
+		<method name="getDescendantFocusability()I"/>
+		<method name="getFocusedChild()Landroid/view/View;"/>
+		<method name="getLayoutAnimation()Landroid/view/animation/LayoutAnimationController;"/>
+		<method name="getLayoutAnimationListener()Landroid/view/animation/Animation$AnimationListener;"/>
+		<method name="getLayoutMode()I" since="18"/>
+		<method name="getLayoutTransition()Landroid/animation/LayoutTransition;" since="11"/>
+		<method name="getNestedScrollAxes()I" since="21"/>
+		<method name="getOverlay()Landroid/view/ViewGroupOverlay;" since="18"/>
+		<method name="getPersistentDrawingCache()I" deprecated="28"/>
+		<method name="getTouchscreenBlocksFocus()Z" since="21"/>
+		<method name="indexOfChild(Landroid/view/View;)I"/>
+		<method name="isAlwaysDrawnWithCacheEnabled()Z" deprecated="23"/>
+		<method name="isAnimationCacheEnabled()Z" deprecated="23"/>
+		<method name="isChildrenDrawingOrderEnabled()Z" since="7"/>
+		<method name="isChildrenDrawnWithCacheEnabled()Z" deprecated="23"/>
+		<method name="isLayoutSuppressed()Z" since="29"/>
+		<method name="isMotionEventSplittingEnabled()Z" since="11"/>
+		<method name="isTransitionGroup()Z" since="21"/>
+		<method name="measureChild(Landroid/view/View;II)V"/>
+		<method name="measureChildWithMargins(Landroid/view/View;IIII)V"/>
+		<method name="measureChildren(II)V"/>
+		<method name="offsetDescendantRectToMyCoords(Landroid/view/View;Landroid/graphics/Rect;)V"/>
+		<method name="offsetRectIntoDescendantCoords(Landroid/view/View;Landroid/graphics/Rect;)V"/>
+		<method name="onInterceptHoverEvent(Landroid/view/MotionEvent;)Z" since="14"/>
+		<method name="onInterceptTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onRequestFocusInDescendants(ILandroid/graphics/Rect;)Z"/>
+		<method name="onRequestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" since="14"/>
+		<method name="onViewAdded(Landroid/view/View;)V" since="23"/>
+		<method name="onViewRemoved(Landroid/view/View;)V" since="23"/>
+		<method name="removeAllViews()V"/>
+		<method name="removeAllViewsInLayout()V"/>
+		<method name="removeDetachedView(Landroid/view/View;Z)V"/>
+		<method name="removeViewAt(I)V"/>
+		<method name="removeViewInLayout(Landroid/view/View;)V"/>
+		<method name="removeViews(II)V"/>
+		<method name="removeViewsInLayout(II)V"/>
+		<method name="requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z"/>
+		<method name="resetResolvedLayoutDirection()V" since="14" removed="16"/>
+		<method name="resetResolvedTextDirection()V" since="14" removed="16"/>
+		<method name="scheduleLayoutAnimation()V"/>
+		<method name="setAddStatesFromChildren(Z)V"/>
+		<method name="setAlwaysDrawnWithCacheEnabled(Z)V" deprecated="23"/>
+		<method name="setAnimationCacheEnabled(Z)V" deprecated="23"/>
+		<method name="setChildrenDrawingCacheEnabled(Z)V" deprecated="28"/>
+		<method name="setChildrenDrawingOrderEnabled(Z)V" since="7"/>
+		<method name="setChildrenDrawnWithCacheEnabled(Z)V" deprecated="23"/>
+		<method name="setClipChildren(Z)V"/>
+		<method name="setClipToPadding(Z)V"/>
+		<method name="setDescendantFocusability(I)V"/>
+		<method name="setLayoutAnimation(Landroid/view/animation/LayoutAnimationController;)V"/>
+		<method name="setLayoutAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V"/>
+		<method name="setLayoutMode(I)V" since="18"/>
+		<method name="setLayoutTransition(Landroid/animation/LayoutTransition;)V" since="11"/>
+		<method name="setMotionEventSplittingEnabled(Z)V" since="11"/>
+		<method name="setOnHierarchyChangeListener(Landroid/view/ViewGroup$OnHierarchyChangeListener;)V"/>
+		<method name="setPersistentDrawingCache(I)V" deprecated="28"/>
+		<method name="setStaticTransformationsEnabled(Z)V" since="3"/>
+		<method name="setTouchscreenBlocksFocus(Z)V" since="21"/>
+		<method name="setTransitionGroup(Z)V" since="21"/>
+		<method name="shouldDelayChildPressedState()Z" since="14"/>
+		<method name="startLayoutAnimation()V"/>
+		<method name="startViewTransition(Landroid/view/View;)V" since="11"/>
+		<method name="suppressLayout(Z)V" since="29"/>
+		<field name="CLIP_TO_PADDING_MASK"/>
+		<field name="FLAG_USE_CHILD_DRAWING_ORDER" removed="7"/>
+		<field name="FOCUS_AFTER_DESCENDANTS"/>
+		<field name="FOCUS_BEFORE_DESCENDANTS"/>
+		<field name="FOCUS_BLOCK_DESCENDANTS"/>
+		<field name="LAYOUT_MODE_CLIP_BOUNDS" since="18"/>
+		<field name="LAYOUT_MODE_OPTICAL_BOUNDS" since="18"/>
+		<field name="PERSISTENT_ALL_CACHES" deprecated="28"/>
+		<field name="PERSISTENT_ANIMATION_CACHE" deprecated="28"/>
+		<field name="PERSISTENT_NO_CACHE" deprecated="28"/>
+		<field name="PERSISTENT_SCROLLING_CACHE" deprecated="28"/>
+	</class>
+	<class name="android/view/ViewGroup$LayoutParams" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="resolveLayoutDirection(I)V" since="17"/>
+		<method name="setBaseAttributes(Landroid/content/res/TypedArray;II)V"/>
+		<field name="FILL_PARENT" deprecated="15"/>
+		<field name="MATCH_PARENT" since="8"/>
+		<field name="WRAP_CONTENT"/>
+		<field name="height"/>
+		<field name="layoutAnimationParameters"/>
+		<field name="width"/>
+	</class>
+	<class name="android/view/ViewGroup$MarginLayoutParams" since="1">
+		<extends name="android/view/ViewGroup$LayoutParams"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+		<method name="getLayoutDirection()I" since="17"/>
+		<method name="getMarginEnd()I" since="17"/>
+		<method name="getMarginStart()I" since="17"/>
+		<method name="isMarginRelative()Z" since="17"/>
+		<method name="setLayoutDirection(I)V" since="17"/>
+		<method name="setMarginEnd(I)V" since="17"/>
+		<method name="setMarginStart(I)V" since="17"/>
+		<method name="setMargins(IIII)V"/>
+		<field name="bottomMargin"/>
+		<field name="leftMargin"/>
+		<field name="rightMargin"/>
+		<field name="topMargin"/>
+	</class>
+	<class name="android/view/ViewGroup$OnHierarchyChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onChildViewAdded(Landroid/view/View;Landroid/view/View;)V"/>
+		<method name="onChildViewRemoved(Landroid/view/View;Landroid/view/View;)V"/>
+	</class>
+	<class name="android/view/ViewGroupOverlay" since="18">
+		<extends name="android/view/ViewOverlay"/>
+		<method name="add(Landroid/view/View;)V"/>
+		<method name="remove(Landroid/view/View;)V"/>
+	</class>
+	<class name="android/view/ViewManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="removeView(Landroid/view/View;)V"/>
+		<method name="updateViewLayout(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+	</class>
+	<class name="android/view/ViewOutlineProvider" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getOutline(Landroid/view/View;Landroid/graphics/Outline;)V"/>
+		<field name="BACKGROUND"/>
+		<field name="BOUNDS"/>
+		<field name="PADDED_BOUNDS"/>
+	</class>
+	<class name="android/view/ViewOverlay" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="add(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="clear()V"/>
+		<method name="remove(Landroid/graphics/drawable/Drawable;)V"/>
+	</class>
+	<class name="android/view/ViewParent" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="bringChildToFront(Landroid/view/View;)V"/>
+		<method name="canResolveLayoutDirection()Z" since="19"/>
+		<method name="canResolveTextAlignment()Z" since="19"/>
+		<method name="canResolveTextDirection()Z" since="19"/>
+		<method name="childDrawableStateChanged(Landroid/view/View;)V"/>
+		<method name="childHasTransientStateChanged(Landroid/view/View;Z)V" since="19"/>
+		<method name="clearChildFocus(Landroid/view/View;)V"/>
+		<method name="createContextMenu(Landroid/view/ContextMenu;)V"/>
+		<method name="focusSearch(Landroid/view/View;I)Landroid/view/View;"/>
+		<method name="focusableViewAvailable(Landroid/view/View;)V"/>
+		<method name="getChildVisibleRect(Landroid/view/View;Landroid/graphics/Rect;Landroid/graphics/Point;)Z"/>
+		<method name="getLayoutDirection()I" since="19"/>
+		<method name="getParent()Landroid/view/ViewParent;"/>
+		<method name="getParentForAccessibility()Landroid/view/ViewParent;" since="16"/>
+		<method name="getTextAlignment()I" since="19"/>
+		<method name="getTextDirection()I" since="19"/>
+		<method name="invalidateChild(Landroid/view/View;Landroid/graphics/Rect;)V" deprecated="26"/>
+		<method name="invalidateChildInParent([ILandroid/graphics/Rect;)Landroid/view/ViewParent;" deprecated="26"/>
+		<method name="isLayoutDirectionResolved()Z" since="19"/>
+		<method name="isLayoutRequested()Z"/>
+		<method name="isTextAlignmentResolved()Z" since="19"/>
+		<method name="isTextDirectionResolved()Z" since="19"/>
+		<method name="keyboardNavigationClusterSearch(Landroid/view/View;I)Landroid/view/View;" since="26"/>
+		<method name="notifySubtreeAccessibilityStateChanged(Landroid/view/View;Landroid/view/View;I)V" since="19"/>
+		<method name="onDescendantInvalidated(Landroid/view/View;Landroid/view/View;)V" since="26"/>
+		<method name="onNestedFling(Landroid/view/View;FFZ)Z" since="21"/>
+		<method name="onNestedPreFling(Landroid/view/View;FF)Z" since="21"/>
+		<method name="onNestedPrePerformAccessibilityAction(Landroid/view/View;ILandroid/os/Bundle;)Z" since="22"/>
+		<method name="onNestedPreScroll(Landroid/view/View;II[I)V" since="21"/>
+		<method name="onNestedScroll(Landroid/view/View;IIII)V" since="21"/>
+		<method name="onNestedScrollAccepted(Landroid/view/View;Landroid/view/View;I)V" since="21"/>
+		<method name="onStartNestedScroll(Landroid/view/View;Landroid/view/View;I)Z" since="21"/>
+		<method name="onStopNestedScroll(Landroid/view/View;)V" since="21"/>
+		<method name="recomputeViewAttributes(Landroid/view/View;)V"/>
+		<method name="requestChildFocus(Landroid/view/View;Landroid/view/View;)V"/>
+		<method name="requestChildRectangleOnScreen(Landroid/view/View;Landroid/graphics/Rect;Z)Z" since="3"/>
+		<method name="requestDisallowInterceptTouchEvent(Z)V"/>
+		<method name="requestFitSystemWindows()V" since="16"/>
+		<method name="requestLayout()V"/>
+		<method name="requestSendAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z" since="14"/>
+		<method name="requestTransparentRegion(Landroid/view/View;)V"/>
+		<method name="showContextMenuForChild(Landroid/view/View;)Z"/>
+		<method name="showContextMenuForChild(Landroid/view/View;FF)Z" since="24"/>
+		<method name="startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
+		<method name="startActionModeForChild(Landroid/view/View;Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
+	</class>
+	<class name="android/view/ViewPropertyAnimator" since="12">
+		<extends name="java/lang/Object"/>
+		<method name="alpha(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="alphaBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="cancel()V" since="14"/>
+		<method name="getDuration()J" since="14"/>
+		<method name="getInterpolator()Landroid/animation/TimeInterpolator;" since="18"/>
+		<method name="getStartDelay()J" since="14"/>
+		<method name="rotation(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="rotationBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="rotationX(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="rotationXBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="rotationY(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="rotationYBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="scaleX(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="scaleXBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="scaleY(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="scaleYBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="setDuration(J)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="setInterpolator(Landroid/animation/TimeInterpolator;)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="setListener(Landroid/animation/Animator$AnimatorListener;)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="setStartDelay(J)Landroid/view/ViewPropertyAnimator;" since="14"/>
+		<method name="setUpdateListener(Landroid/animation/ValueAnimator$AnimatorUpdateListener;)Landroid/view/ViewPropertyAnimator;" since="19"/>
+		<method name="start()V" since="14"/>
+		<method name="translationX(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="translationXBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="translationY(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="translationYBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="translationZ(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
+		<method name="translationZBy(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
+		<method name="withEndAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;" since="16"/>
+		<method name="withLayer()Landroid/view/ViewPropertyAnimator;" since="16"/>
+		<method name="withStartAction(Ljava/lang/Runnable;)Landroid/view/ViewPropertyAnimator;" since="16"/>
+		<method name="x(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="xBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="y(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="yBy(F)Landroid/view/ViewPropertyAnimator;"/>
+		<method name="z(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
+		<method name="zBy(F)Landroid/view/ViewPropertyAnimator;" since="21"/>
+	</class>
+	<class name="android/view/ViewStructure" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addChildCount(I)I"/>
+		<method name="asyncCommit()V"/>
+		<method name="asyncNewChild(I)Landroid/view/ViewStructure;"/>
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;" since="26"/>
+		<method name="getChildCount()I"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getHint()Ljava/lang/CharSequence;"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTextSelectionEnd()I"/>
+		<method name="getTextSelectionStart()I"/>
+		<method name="hasExtras()Z"/>
+		<method name="newChild(I)Landroid/view/ViewStructure;"/>
+		<method name="newHtmlInfoBuilder(Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;" since="26"/>
+		<method name="setAccessibilityFocused(Z)V"/>
+		<method name="setActivated(Z)V"/>
+		<method name="setAlpha(F)V"/>
+		<method name="setAutofillHints([Ljava/lang/String;)V" since="26"/>
+		<method name="setAutofillId(Landroid/view/autofill/AutofillId;)V" since="26"/>
+		<method name="setAutofillId(Landroid/view/autofill/AutofillId;I)V" since="26"/>
+		<method name="setAutofillOptions([Ljava/lang/CharSequence;)V" since="26"/>
+		<method name="setAutofillType(I)V" since="26"/>
+		<method name="setAutofillValue(Landroid/view/autofill/AutofillValue;)V" since="26"/>
+		<method name="setCheckable(Z)V"/>
+		<method name="setChecked(Z)V"/>
+		<method name="setChildCount(I)V"/>
+		<method name="setClassName(Ljava/lang/String;)V"/>
+		<method name="setClickable(Z)V"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
+		<method name="setContextClickable(Z)V"/>
+		<method name="setDataIsSensitive(Z)V" since="26"/>
+		<method name="setDimens(IIIIII)V"/>
+		<method name="setElevation(F)V"/>
+		<method name="setEnabled(Z)V"/>
+		<method name="setFocusable(Z)V"/>
+		<method name="setFocused(Z)V"/>
+		<method name="setHint(Ljava/lang/CharSequence;)V"/>
+		<method name="setHintIdEntry(Ljava/lang/String;)V" since="30"/>
+		<method name="setHtmlInfo(Landroid/view/ViewStructure$HtmlInfo;)V" since="26"/>
+		<method name="setId(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setImportantForAutofill(I)V" since="28"/>
+		<method name="setInputType(I)V" since="26"/>
+		<method name="setLocaleList(Landroid/os/LocaleList;)V" since="26"/>
+		<method name="setLongClickable(Z)V"/>
+		<method name="setMaxTextEms(I)V" since="28"/>
+		<method name="setMaxTextLength(I)V" since="28"/>
+		<method name="setMinTextEms(I)V" since="28"/>
+		<method name="setOpaque(Z)V" since="26"/>
+		<method name="setReceiveContentMimeTypes([Ljava/lang/String;)V" since="31"/>
+		<method name="setSelected(Z)V"/>
+		<method name="setText(Ljava/lang/CharSequence;)V"/>
+		<method name="setText(Ljava/lang/CharSequence;II)V"/>
+		<method name="setTextIdEntry(Ljava/lang/String;)V" since="28"/>
+		<method name="setTextLines([I[I)V"/>
+		<method name="setTextStyle(FIII)V"/>
+		<method name="setTransformation(Landroid/graphics/Matrix;)V"/>
+		<method name="setVisibility(I)V"/>
+		<method name="setWebDomain(Ljava/lang/String;)V" since="26"/>
+	</class>
+	<class name="android/view/ViewStructure$HtmlInfo" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAttributes()Ljava/util/List;"/>
+		<method name="getTag()Ljava/lang/String;"/>
+	</class>
+	<class name="android/view/ViewStructure$HtmlInfo$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;)Landroid/view/ViewStructure$HtmlInfo$Builder;"/>
+		<method name="build()Landroid/view/ViewStructure$HtmlInfo;"/>
+	</class>
+	<class name="android/view/ViewStub" since="1">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getInflatedId()I"/>
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;" since="16"/>
+		<method name="getLayoutResource()I"/>
+		<method name="inflate()Landroid/view/View;"/>
+		<method name="setInflatedId(I)V"/>
+		<method name="setLayoutInflater(Landroid/view/LayoutInflater;)V" since="16"/>
+		<method name="setLayoutResource(I)V"/>
+		<method name="setOnInflateListener(Landroid/view/ViewStub$OnInflateListener;)V"/>
+	</class>
+	<class name="android/view/ViewStub$OnInflateListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onInflate(Landroid/view/ViewStub;Landroid/view/View;)V"/>
+	</class>
+	<class name="android/view/ViewTreeObserver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16"/>
+		<method name="addOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V"/>
+		<method name="addOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V"/>
+		<method name="addOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V"/>
+		<method name="addOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3"/>
+		<method name="addOnSystemGestureExclusionRectsChangedListener(Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="addOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V"/>
+		<method name="addOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18"/>
+		<method name="addOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18"/>
+		<method name="dispatchOnDraw()V" since="16"/>
+		<method name="dispatchOnGlobalLayout()V"/>
+		<method name="dispatchOnPreDraw()Z"/>
+		<method name="isAlive()Z"/>
+		<method name="registerFrameCommitCallback(Ljava/lang/Runnable;)V" since="29"/>
+		<method name="removeGlobalOnLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" deprecated="16"/>
+		<method name="removeOnDrawListener(Landroid/view/ViewTreeObserver$OnDrawListener;)V" since="16"/>
+		<method name="removeOnGlobalFocusChangeListener(Landroid/view/ViewTreeObserver$OnGlobalFocusChangeListener;)V"/>
+		<method name="removeOnGlobalLayoutListener(Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V" since="16"/>
+		<method name="removeOnPreDrawListener(Landroid/view/ViewTreeObserver$OnPreDrawListener;)V"/>
+		<method name="removeOnScrollChangedListener(Landroid/view/ViewTreeObserver$OnScrollChangedListener;)V" since="3"/>
+		<method name="removeOnSystemGestureExclusionRectsChangedListener(Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="removeOnTouchModeChangeListener(Landroid/view/ViewTreeObserver$OnTouchModeChangeListener;)V"/>
+		<method name="removeOnWindowAttachListener(Landroid/view/ViewTreeObserver$OnWindowAttachListener;)V" since="18"/>
+		<method name="removeOnWindowFocusChangeListener(Landroid/view/ViewTreeObserver$OnWindowFocusChangeListener;)V" since="18"/>
+		<method name="unregisterFrameCommitCallback(Ljava/lang/Runnable;)Z" since="29"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnDrawListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onDraw()V"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnGlobalFocusChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onGlobalFocusChanged(Landroid/view/View;Landroid/view/View;)V"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnGlobalLayoutListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onGlobalLayout()V"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnPreDrawListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onPreDraw()Z"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnScrollChangedListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onScrollChanged()V"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnTouchModeChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onTouchModeChanged(Z)V"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnWindowAttachListener" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="onWindowAttached()V"/>
+		<method name="onWindowDetached()V"/>
+	</class>
+	<class name="android/view/ViewTreeObserver$OnWindowFocusChangeListener" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="onWindowFocusChanged(Z)V"/>
+	</class>
+	<class name="android/view/Window" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="addContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="addFlags(I)V"/>
+		<method name="addOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;Landroid/os/Handler;)V" since="24"/>
+		<method name="clearFlags(I)V"/>
+		<method name="closeAllPanels()V"/>
+		<method name="closePanel(I)V"/>
+		<method name="findViewById(I)Landroid/view/View;"/>
+		<method name="getAllowEnterTransitionOverlap()Z" since="21"/>
+		<method name="getAllowReturnTransitionOverlap()Z" since="21"/>
+		<method name="getAttributes()Landroid/view/WindowManager$LayoutParams;"/>
+		<method name="getCallback()Landroid/view/Window$Callback;"/>
+		<method name="getColorMode()I" since="26"/>
+		<method name="getContainer()Landroid/view/Window;"/>
+		<method name="getContentScene()Landroid/transition/Scene;" since="21"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getCurrentFocus()Landroid/view/View;"/>
+		<method name="getDecorView()Landroid/view/View;"/>
+		<method name="getDefaultFeatures(Landroid/content/Context;)I" since="22"/>
+		<method name="getEnterTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getExitTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getFeatures()I"/>
+		<method name="getForcedWindowFlags()I"/>
+		<method name="getInsetsController()Landroid/view/WindowInsetsController;" since="30"/>
+		<method name="getLayoutInflater()Landroid/view/LayoutInflater;"/>
+		<method name="getLocalFeatures()I"/>
+		<method name="getMediaController()Landroid/media/session/MediaController;" since="21"/>
+		<method name="getNavigationBarColor()I" since="21"/>
+		<method name="getNavigationBarDividerColor()I" since="28"/>
+		<method name="getReenterTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getReturnTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getRootSurfaceControl()Landroid/view/AttachedSurfaceControl;" since="31"/>
+		<method name="getSharedElementEnterTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getSharedElementExitTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getSharedElementReenterTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getSharedElementReturnTransition()Landroid/transition/Transition;" since="21"/>
+		<method name="getSharedElementsUseOverlay()Z" since="21"/>
+		<method name="getStatusBarColor()I" since="21"/>
+		<method name="getSystemGestureExclusionRects()Ljava/util/List;" since="29"/>
+		<method name="getTransitionBackgroundFadeDuration()J" since="21"/>
+		<method name="getTransitionManager()Landroid/transition/TransitionManager;" since="21"/>
+		<method name="getVolumeControlStream()I"/>
+		<method name="getWindowManager()Landroid/view/WindowManager;"/>
+		<method name="getWindowStyle()Landroid/content/res/TypedArray;"/>
+		<method name="hasChildren()Z"/>
+		<method name="hasFeature(I)Z" since="11"/>
+		<method name="hasSoftInputMode()Z" since="3"/>
+		<method name="injectInputEvent(Landroid/view/InputEvent;)V" since="19"/>
+		<method name="invalidatePanelMenu(I)V" since="11"/>
+		<method name="isActive()Z"/>
+		<method name="isFloating()Z"/>
+		<method name="isNavigationBarContrastEnforced()Z" since="29"/>
+		<method name="isShortcutKey(ILandroid/view/KeyEvent;)Z"/>
+		<method name="isStatusBarContrastEnforced()Z" since="29"/>
+		<method name="isWideColorGamut()Z" since="27"/>
+		<method name="makeActive()V"/>
+		<method name="onActive()V"/>
+		<method name="onConfigurationChanged(Landroid/content/res/Configuration;)V"/>
+		<method name="openPanel(ILandroid/view/KeyEvent;)V"/>
+		<method name="peekDecorView()Landroid/view/View;"/>
+		<method name="performContextMenuIdentifierAction(II)Z"/>
+		<method name="performPanelIdentifierAction(III)Z"/>
+		<method name="performPanelShortcut(IILandroid/view/KeyEvent;I)Z"/>
+		<method name="registerScrollCaptureCallback(Landroid/view/ScrollCaptureCallback;)V" since="31"/>
+		<method name="removeOnFrameMetricsAvailableListener(Landroid/view/Window$OnFrameMetricsAvailableListener;)V" since="24"/>
+		<method name="requestFeature(I)Z"/>
+		<method name="requireViewById(I)Landroid/view/View;" since="28"/>
+		<method name="restoreHierarchyState(Landroid/os/Bundle;)V"/>
+		<method name="saveHierarchyState()Landroid/os/Bundle;"/>
+		<method name="setAllowEnterTransitionOverlap(Z)V" since="21"/>
+		<method name="setAllowReturnTransitionOverlap(Z)V" since="21"/>
+		<method name="setAttributes(Landroid/view/WindowManager$LayoutParams;)V"/>
+		<method name="setBackgroundBlurRadius(I)V" since="31"/>
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setBackgroundDrawableResource(I)V"/>
+		<method name="setCallback(Landroid/view/Window$Callback;)V"/>
+		<method name="setChildDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
+		<method name="setChildInt(II)V"/>
+		<method name="setClipToOutline(Z)V" since="22"/>
+		<method name="setColorMode(I)V" since="26"/>
+		<method name="setContainer(Landroid/view/Window;)V"/>
+		<method name="setContentView(I)V"/>
+		<method name="setContentView(Landroid/view/View;)V"/>
+		<method name="setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="setDecorCaptionShade(I)V" since="24"/>
+		<method name="setDecorFitsSystemWindows(Z)V" since="30"/>
+		<method name="setDefaultWindowFormat(I)V"/>
+		<method name="setDimAmount(F)V" since="14"/>
+		<method name="setElevation(F)V" since="22"/>
+		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setExitTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setFeatureDrawable(ILandroid/graphics/drawable/Drawable;)V"/>
+		<method name="setFeatureDrawableAlpha(II)V"/>
+		<method name="setFeatureDrawableResource(II)V"/>
+		<method name="setFeatureDrawableUri(ILandroid/net/Uri;)V"/>
+		<method name="setFeatureInt(II)V"/>
+		<method name="setFlags(II)V"/>
+		<method name="setFormat(I)V"/>
+		<method name="setGravity(I)V"/>
+		<method name="setHideOverlayWindows(Z)V" since="31"/>
+		<method name="setIcon(I)V" since="19"/>
+		<method name="setLayout(II)V"/>
+		<method name="setLocalFocus(ZZ)V" since="19"/>
+		<method name="setLogo(I)V" since="19"/>
+		<method name="setMediaController(Landroid/media/session/MediaController;)V" since="21"/>
+		<method name="setNavigationBarColor(I)V" since="21"/>
+		<method name="setNavigationBarContrastEnforced(Z)V" since="29"/>
+		<method name="setNavigationBarDividerColor(I)V" since="28"/>
+		<method name="setPreferMinimalPostProcessing(Z)V" since="30"/>
+		<method name="setReenterTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setResizingCaptionDrawable(Landroid/graphics/drawable/Drawable;)V" since="24"/>
+		<method name="setRestrictedCaptionAreaListener(Landroid/view/Window$OnRestrictedCaptionAreaChangedListener;)V" since="24"/>
+		<method name="setReturnTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setSharedElementEnterTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setSharedElementExitTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setSharedElementReenterTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setSharedElementReturnTransition(Landroid/transition/Transition;)V" since="21"/>
+		<method name="setSharedElementsUseOverlay(Z)V" since="21"/>
+		<method name="setSoftInputMode(I)V" since="3"/>
+		<method name="setStatusBarColor(I)V" since="21"/>
+		<method name="setStatusBarContrastEnforced(Z)V" since="29"/>
+		<method name="setSustainedPerformanceMode(Z)V" since="24"/>
+		<method name="setSystemGestureExclusionRects(Ljava/util/List;)V" since="29"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setTitleColor(I)V" deprecated="21"/>
+		<method name="setTransitionBackgroundFadeDuration(J)V" since="21"/>
+		<method name="setTransitionManager(Landroid/transition/TransitionManager;)V" since="21"/>
+		<method name="setType(I)V"/>
+		<method name="setUiOptions(I)V" since="14"/>
+		<method name="setUiOptions(II)V" since="14"/>
+		<method name="setVolumeControlStream(I)V"/>
+		<method name="setWindowAnimations(I)V" since="3"/>
+		<method name="setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;)V"/>
+		<method name="setWindowManager(Landroid/view/WindowManager;Landroid/os/IBinder;Ljava/lang/String;Z)V" since="11"/>
+		<method name="superDispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
+		<method name="superDispatchKeyEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="superDispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z" since="11"/>
+		<method name="superDispatchTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="superDispatchTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="takeInputQueue(Landroid/view/InputQueue$Callback;)V" since="9"/>
+		<method name="takeKeyEvents(Z)V"/>
+		<method name="takeSurface(Landroid/view/SurfaceHolder$Callback2;)V" since="9"/>
+		<method name="togglePanel(ILandroid/view/KeyEvent;)V"/>
+		<method name="unregisterScrollCaptureCallback(Landroid/view/ScrollCaptureCallback;)V" since="31"/>
+		<field name="DECOR_CAPTION_SHADE_AUTO" since="24"/>
+		<field name="DECOR_CAPTION_SHADE_DARK" since="24"/>
+		<field name="DECOR_CAPTION_SHADE_LIGHT" since="24"/>
+		<field name="DEFAULT_FEATURES" deprecated="22"/>
+		<field name="FEATURE_ACTION_BAR" since="11"/>
+		<field name="FEATURE_ACTION_BAR_OVERLAY" since="11"/>
+		<field name="FEATURE_ACTION_MODE_OVERLAY" since="11"/>
+		<field name="FEATURE_ACTIVITY_TRANSITIONS" since="21"/>
+		<field name="FEATURE_CONTENT_TRANSITIONS" since="21"/>
+		<field name="FEATURE_CONTEXT_MENU"/>
+		<field name="FEATURE_CUSTOM_TITLE"/>
+		<field name="FEATURE_INDETERMINATE_PROGRESS" deprecated="24"/>
+		<field name="FEATURE_LEFT_ICON"/>
+		<field name="FEATURE_NO_TITLE"/>
+		<field name="FEATURE_OPTIONS_PANEL"/>
+		<field name="FEATURE_PROGRESS" deprecated="24"/>
+		<field name="FEATURE_RIGHT_ICON"/>
+		<field name="FEATURE_SWIPE_TO_DISMISS" since="20" deprecated="30"/>
+		<field name="ID_ANDROID_CONTENT"/>
+		<field name="NAVIGATION_BAR_BACKGROUND_TRANSITION_NAME" since="21"/>
+		<field name="PROGRESS_END" deprecated="24"/>
+		<field name="PROGRESS_INDETERMINATE_OFF" deprecated="24"/>
+		<field name="PROGRESS_INDETERMINATE_ON" deprecated="24"/>
+		<field name="PROGRESS_SECONDARY_END" deprecated="24"/>
+		<field name="PROGRESS_SECONDARY_START" deprecated="24"/>
+		<field name="PROGRESS_START" deprecated="24"/>
+		<field name="PROGRESS_VISIBILITY_OFF" deprecated="24"/>
+		<field name="PROGRESS_VISIBILITY_ON" deprecated="24"/>
+		<field name="STATUS_BAR_BACKGROUND_TRANSITION_NAME" since="21"/>
+	</class>
+	<class name="android/view/Window$Callback" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z" since="12"/>
+		<method name="dispatchKeyEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="dispatchKeyShortcutEvent(Landroid/view/KeyEvent;)Z" since="11"/>
+		<method name="dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z" since="4"/>
+		<method name="dispatchTouchEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="dispatchTrackballEvent(Landroid/view/MotionEvent;)Z"/>
+		<method name="onActionModeFinished(Landroid/view/ActionMode;)V" since="11"/>
+		<method name="onActionModeStarted(Landroid/view/ActionMode;)V" since="11"/>
+		<method name="onAttachedToWindow()V" since="5"/>
+		<method name="onContentChanged()V"/>
+		<method name="onCreatePanelMenu(ILandroid/view/Menu;)Z"/>
+		<method name="onCreatePanelView(I)Landroid/view/View;"/>
+		<method name="onDetachedFromWindow()V" since="5"/>
+		<method name="onMenuItemSelected(ILandroid/view/MenuItem;)Z"/>
+		<method name="onMenuOpened(ILandroid/view/Menu;)Z"/>
+		<method name="onPanelClosed(ILandroid/view/Menu;)V"/>
+		<method name="onPointerCaptureChanged(Z)V" since="26"/>
+		<method name="onPreparePanel(ILandroid/view/View;Landroid/view/Menu;)Z"/>
+		<method name="onProvideKeyboardShortcuts(Ljava/util/List;Landroid/view/Menu;I)V" since="24"/>
+		<method name="onSearchRequested()Z"/>
+		<method name="onSearchRequested(Landroid/view/SearchEvent;)Z" since="23"/>
+		<method name="onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V"/>
+		<method name="onWindowFocusChanged(Z)V"/>
+		<method name="onWindowStartingActionMode(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;" since="11"/>
+		<method name="onWindowStartingActionMode(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;" since="23"/>
+	</class>
+	<class name="android/view/Window$OnFrameMetricsAvailableListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V"/>
+	</class>
+	<class name="android/view/Window$OnRestrictedCaptionAreaChangedListener" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="onRestrictedCaptionAreaChanged(Landroid/graphics/Rect;)V"/>
+	</class>
+	<class name="android/view/WindowAnimationFrameStats" since="21">
+		<extends name="android/view/FrameStats"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/WindowContentFrameStats" since="21">
+		<extends name="android/view/FrameStats"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFramePostedTimeNano(I)J"/>
+		<method name="getFrameReadyTimeNano(I)J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/WindowId" since="18">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="isFocused()Z"/>
+		<method name="registerFocusObserver(Landroid/view/WindowId$FocusObserver;)V"/>
+		<method name="unregisterFocusObserver(Landroid/view/WindowId$FocusObserver;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/WindowId$FocusObserver" since="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onFocusGained(Landroid/view/WindowId;)V"/>
+		<method name="onFocusLost(Landroid/view/WindowId;)V"/>
+	</class>
+	<class name="android/view/WindowInsets" since="20">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/WindowInsets;)V"/>
+		<method name="consumeDisplayCutout()Landroid/view/WindowInsets;" since="28" deprecated="30"/>
+		<method name="consumeStableInsets()Landroid/view/WindowInsets;" since="21" deprecated="30"/>
+		<method name="consumeSystemWindowInsets()Landroid/view/WindowInsets;" deprecated="30"/>
+		<method name="getDisplayCutout()Landroid/view/DisplayCutout;" since="28"/>
+		<method name="getInsets(I)Landroid/graphics/Insets;" since="30"/>
+		<method name="getInsetsIgnoringVisibility(I)Landroid/graphics/Insets;" since="30"/>
+		<method name="getMandatorySystemGestureInsets()Landroid/graphics/Insets;" since="29" deprecated="30"/>
+		<method name="getPrivacyIndicatorBounds()Landroid/graphics/Rect;" since="31"/>
+		<method name="getRoundedCorner(I)Landroid/view/RoundedCorner;" since="31"/>
+		<method name="getStableInsetBottom()I" since="21" deprecated="30"/>
+		<method name="getStableInsetLeft()I" since="21" deprecated="30"/>
+		<method name="getStableInsetRight()I" since="21" deprecated="30"/>
+		<method name="getStableInsetTop()I" since="21" deprecated="30"/>
+		<method name="getStableInsets()Landroid/graphics/Insets;" since="29" deprecated="30"/>
+		<method name="getSystemGestureInsets()Landroid/graphics/Insets;" since="29" deprecated="30"/>
+		<method name="getSystemWindowInsetBottom()I" deprecated="30"/>
+		<method name="getSystemWindowInsetLeft()I" deprecated="30"/>
+		<method name="getSystemWindowInsetRight()I" deprecated="30"/>
+		<method name="getSystemWindowInsetTop()I" deprecated="30"/>
+		<method name="getSystemWindowInsets()Landroid/graphics/Insets;" since="29" deprecated="30"/>
+		<method name="getTappableElementInsets()Landroid/graphics/Insets;" since="29" deprecated="30"/>
+		<method name="hasInsets()Z"/>
+		<method name="hasStableInsets()Z" since="21" deprecated="30"/>
+		<method name="hasSystemWindowInsets()Z" deprecated="30"/>
+		<method name="inset(IIII)Landroid/view/WindowInsets;" since="29"/>
+		<method name="inset(Landroid/graphics/Insets;)Landroid/view/WindowInsets;" since="30"/>
+		<method name="isConsumed()Z" since="21"/>
+		<method name="isRound()Z"/>
+		<method name="isVisible(I)Z" since="30"/>
+		<method name="replaceSystemWindowInsets(IIII)Landroid/view/WindowInsets;" deprecated="29"/>
+		<method name="replaceSystemWindowInsets(Landroid/graphics/Rect;)Landroid/view/WindowInsets;" since="21" deprecated="29"/>
+		<field name="CONSUMED" since="30"/>
+	</class>
+	<class name="android/view/WindowInsets$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/view/WindowInsets;)V"/>
+		<method name="build()Landroid/view/WindowInsets;"/>
+		<method name="setDisplayCutout(Landroid/view/DisplayCutout;)Landroid/view/WindowInsets$Builder;"/>
+		<method name="setInsets(ILandroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" since="30"/>
+		<method name="setInsetsIgnoringVisibility(ILandroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" since="30"/>
+		<method name="setMandatorySystemGestureInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30"/>
+		<method name="setPrivacyIndicatorBounds(Landroid/graphics/Rect;)Landroid/view/WindowInsets$Builder;" since="31"/>
+		<method name="setRoundedCorner(ILandroid/view/RoundedCorner;)Landroid/view/WindowInsets$Builder;" since="31"/>
+		<method name="setStableInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30"/>
+		<method name="setSystemGestureInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30"/>
+		<method name="setSystemWindowInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30"/>
+		<method name="setTappableElementInsets(Landroid/graphics/Insets;)Landroid/view/WindowInsets$Builder;" deprecated="30"/>
+		<method name="setVisible(IZ)Landroid/view/WindowInsets$Builder;" since="30"/>
+	</class>
+	<class name="android/view/WindowInsets$Side" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="all()I"/>
+		<field name="BOTTOM"/>
+		<field name="LEFT"/>
+		<field name="RIGHT"/>
+		<field name="TOP"/>
+	</class>
+	<class name="android/view/WindowInsets$Type" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="captionBar()I"/>
+		<method name="displayCutout()I"/>
+		<method name="ime()I"/>
+		<method name="mandatorySystemGestures()I"/>
+		<method name="navigationBars()I"/>
+		<method name="statusBars()I"/>
+		<method name="systemBars()I"/>
+		<method name="systemGestures()I"/>
+		<method name="tappableElement()I"/>
+	</class>
+	<class name="android/view/WindowInsetsAnimation" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(ILandroid/view/animation/Interpolator;J)V"/>
+		<method name="getAlpha()F"/>
+		<method name="getDurationMillis()J"/>
+		<method name="getFraction()F"/>
+		<method name="getInterpolatedFraction()F"/>
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
+		<method name="getTypeMask()I"/>
+		<method name="setAlpha(F)V"/>
+		<method name="setFraction(F)V"/>
+	</class>
+	<class name="android/view/WindowInsetsAnimation$Bounds" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Insets;Landroid/graphics/Insets;)V"/>
+		<method name="getLowerBound()Landroid/graphics/Insets;"/>
+		<method name="getUpperBound()Landroid/graphics/Insets;"/>
+		<method name="inset(Landroid/graphics/Insets;)Landroid/view/WindowInsetsAnimation$Bounds;"/>
+	</class>
+	<class name="android/view/WindowInsetsAnimation$Callback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getDispatchMode()I"/>
+		<method name="onEnd(Landroid/view/WindowInsetsAnimation;)V"/>
+		<method name="onPrepare(Landroid/view/WindowInsetsAnimation;)V"/>
+		<method name="onProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets;"/>
+		<method name="onStart(Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/view/WindowInsetsAnimation$Bounds;"/>
+		<field name="DISPATCH_MODE_CONTINUE_ON_SUBTREE"/>
+		<field name="DISPATCH_MODE_STOP"/>
+	</class>
+	<class name="android/view/WindowInsetsAnimationControlListener" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onCancelled(Landroid/view/WindowInsetsAnimationController;)V"/>
+		<method name="onFinished(Landroid/view/WindowInsetsAnimationController;)V"/>
+		<method name="onReady(Landroid/view/WindowInsetsAnimationController;I)V"/>
+	</class>
+	<class name="android/view/WindowInsetsAnimationController" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="finish(Z)V"/>
+		<method name="getCurrentAlpha()F"/>
+		<method name="getCurrentFraction()F"/>
+		<method name="getCurrentInsets()Landroid/graphics/Insets;"/>
+		<method name="getHiddenStateInsets()Landroid/graphics/Insets;"/>
+		<method name="getShownStateInsets()Landroid/graphics/Insets;"/>
+		<method name="getTypes()I"/>
+		<method name="isCancelled()Z"/>
+		<method name="isFinished()Z"/>
+		<method name="isReady()Z"/>
+		<method name="setInsetsAndAlpha(Landroid/graphics/Insets;FF)V"/>
+	</class>
+	<class name="android/view/WindowInsetsController" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="addOnControllableInsetsChangedListener(Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V"/>
+		<method name="controlWindowInsetsAnimation(IJLandroid/view/animation/Interpolator;Landroid/os/CancellationSignal;Landroid/view/WindowInsetsAnimationControlListener;)V"/>
+		<method name="getSystemBarsAppearance()I"/>
+		<method name="getSystemBarsBehavior()I"/>
+		<method name="hide(I)V"/>
+		<method name="removeOnControllableInsetsChangedListener(Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V"/>
+		<method name="setSystemBarsAppearance(II)V"/>
+		<method name="setSystemBarsBehavior(I)V"/>
+		<method name="show(I)V"/>
+		<field name="APPEARANCE_LIGHT_NAVIGATION_BARS"/>
+		<field name="APPEARANCE_LIGHT_STATUS_BARS"/>
+		<field name="BEHAVIOR_DEFAULT" since="31"/>
+		<field name="BEHAVIOR_SHOW_BARS_BY_SWIPE" deprecated="31"/>
+		<field name="BEHAVIOR_SHOW_BARS_BY_TOUCH" deprecated="31"/>
+		<field name="BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE"/>
+	</class>
+	<class name="android/view/WindowInsetsController$OnControllableInsetsChangedListener" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onControllableInsetsChanged(Landroid/view/WindowInsetsController;I)V"/>
+	</class>
+	<class name="android/view/WindowManager" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/ViewManager"/>
+		<method name="addCrossWindowBlurEnabledListener(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="addCrossWindowBlurEnabledListener(Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="getCurrentWindowMetrics()Landroid/view/WindowMetrics;" since="30"/>
+		<method name="getDefaultDisplay()Landroid/view/Display;" deprecated="30"/>
+		<method name="getMaximumWindowMetrics()Landroid/view/WindowMetrics;" since="30"/>
+		<method name="isCrossWindowBlurEnabled()Z" since="31"/>
+		<method name="removeCrossWindowBlurEnabledListener(Ljava/util/function/Consumer;)V" since="31"/>
+		<method name="removeViewImmediate(Landroid/view/View;)V"/>
+	</class>
+	<class name="android/view/WindowManager$BadTokenException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/view/WindowManager$InvalidDisplayException" since="17">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/view/WindowManager$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$LayoutParams"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIII)V"/>
+		<method name="&lt;init>(IIIIIII)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="copyFrom(Landroid/view/WindowManager$LayoutParams;)I"/>
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getBlurBehindRadius()I" since="31"/>
+		<method name="getColorMode()I" since="26"/>
+		<method name="getFitInsetsSides()I" since="30"/>
+		<method name="getFitInsetsTypes()I" since="30"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="isFitInsetsIgnoringVisibility()Z" since="30"/>
+		<method name="mayUseInputMethod(I)Z" since="3"/>
+		<method name="setBlurBehindRadius(I)V" since="31"/>
+		<method name="setColorMode(I)V" since="26"/>
+		<method name="setFitInsetsIgnoringVisibility(Z)V" since="30"/>
+		<method name="setFitInsetsSides(I)V" since="30"/>
+		<method name="setFitInsetsTypes(I)V" since="30"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
+		<field name="ALPHA_CHANGED"/>
+		<field name="ANIMATION_CHANGED"/>
+		<field name="BRIGHTNESS_OVERRIDE_FULL" since="8"/>
+		<field name="BRIGHTNESS_OVERRIDE_NONE" since="8"/>
+		<field name="BRIGHTNESS_OVERRIDE_OFF" since="8"/>
+		<field name="CREATOR"/>
+		<field name="DIM_AMOUNT_CHANGED"/>
+		<field name="FIRST_APPLICATION_WINDOW"/>
+		<field name="FIRST_SUB_WINDOW"/>
+		<field name="FIRST_SYSTEM_WINDOW"/>
+		<field name="FLAGS_CHANGED"/>
+		<field name="FLAG_ALLOW_LOCK_WHILE_SCREEN_ON" since="8"/>
+		<field name="FLAG_ALT_FOCUSABLE_IM" since="3"/>
+		<field name="FLAG_BLUR_BEHIND" deprecated="15"/>
+		<field name="FLAG_DIM_BEHIND"/>
+		<field name="FLAG_DISMISS_KEYGUARD" since="5" deprecated="26"/>
+		<field name="FLAG_DITHER" deprecated="17"/>
+		<field name="FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS" since="21"/>
+		<field name="FLAG_FORCE_NOT_FULLSCREEN" deprecated="30"/>
+		<field name="FLAG_FULLSCREEN" deprecated="30"/>
+		<field name="FLAG_HARDWARE_ACCELERATED" since="11"/>
+		<field name="FLAG_IGNORE_CHEEK_PRESSES"/>
+		<field name="FLAG_KEEP_SCREEN_ON"/>
+		<field name="FLAG_LAYOUT_ATTACHED_IN_DECOR" since="22" deprecated="30"/>
+		<field name="FLAG_LAYOUT_INSET_DECOR" deprecated="30"/>
+		<field name="FLAG_LAYOUT_IN_OVERSCAN" since="18" deprecated="30"/>
+		<field name="FLAG_LAYOUT_IN_SCREEN"/>
+		<field name="FLAG_LAYOUT_NO_LIMITS"/>
+		<field name="FLAG_LOCAL_FOCUS_MODE" since="19"/>
+		<field name="FLAG_NOT_FOCUSABLE"/>
+		<field name="FLAG_NOT_TOUCHABLE"/>
+		<field name="FLAG_NOT_TOUCH_MODAL"/>
+		<field name="FLAG_SCALED"/>
+		<field name="FLAG_SECURE"/>
+		<field name="FLAG_SHOW_WALLPAPER" since="5"/>
+		<field name="FLAG_SHOW_WHEN_LOCKED" since="5" deprecated="27"/>
+		<field name="FLAG_SPLIT_TOUCH" since="11"/>
+		<field name="FLAG_TOUCHABLE_WHEN_WAKING" deprecated="20"/>
+		<field name="FLAG_TRANSLUCENT_NAVIGATION" since="19" deprecated="30"/>
+		<field name="FLAG_TRANSLUCENT_STATUS" since="19" deprecated="30"/>
+		<field name="FLAG_TURN_SCREEN_ON" since="5" deprecated="27"/>
+		<field name="FLAG_WATCH_OUTSIDE_TOUCH" since="3"/>
+		<field name="FORMAT_CHANGED"/>
+		<field name="LAST_APPLICATION_WINDOW"/>
+		<field name="LAST_SUB_WINDOW"/>
+		<field name="LAST_SYSTEM_WINDOW"/>
+		<field name="LAYOUT_CHANGED"/>
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS" since="30"/>
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT" since="28"/>
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER" since="28"/>
+		<field name="LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES" since="28"/>
+		<field name="MEMORY_TYPE_CHANGED"/>
+		<field name="MEMORY_TYPE_GPU" deprecated="15"/>
+		<field name="MEMORY_TYPE_HARDWARE" deprecated="15"/>
+		<field name="MEMORY_TYPE_NORMAL" deprecated="15"/>
+		<field name="MEMORY_TYPE_PUSH_BUFFERS" deprecated="15"/>
+		<field name="ROTATION_ANIMATION_CHANGED" since="18"/>
+		<field name="ROTATION_ANIMATION_CROSSFADE" since="18"/>
+		<field name="ROTATION_ANIMATION_JUMPCUT" since="18"/>
+		<field name="ROTATION_ANIMATION_ROTATE" since="18"/>
+		<field name="ROTATION_ANIMATION_SEAMLESS" since="26"/>
+		<field name="SCREEN_BRIGHTNESS_CHANGED" since="3"/>
+		<field name="SCREEN_ORIENTATION_CHANGED" since="3"/>
+		<field name="SOFT_INPUT_ADJUST_NOTHING" since="11"/>
+		<field name="SOFT_INPUT_ADJUST_PAN" since="3"/>
+		<field name="SOFT_INPUT_ADJUST_RESIZE" since="3" deprecated="30"/>
+		<field name="SOFT_INPUT_ADJUST_UNSPECIFIED" since="3"/>
+		<field name="SOFT_INPUT_IS_FORWARD_NAVIGATION" since="3"/>
+		<field name="SOFT_INPUT_MASK_ADJUST" since="3"/>
+		<field name="SOFT_INPUT_MASK_STATE" since="3"/>
+		<field name="SOFT_INPUT_MODE_CHANGED" since="3"/>
+		<field name="SOFT_INPUT_STATE_ALWAYS_HIDDEN" since="3"/>
+		<field name="SOFT_INPUT_STATE_ALWAYS_VISIBLE" since="3"/>
+		<field name="SOFT_INPUT_STATE_HIDDEN" since="3"/>
+		<field name="SOFT_INPUT_STATE_UNCHANGED" since="3"/>
+		<field name="SOFT_INPUT_STATE_UNSPECIFIED" since="3"/>
+		<field name="SOFT_INPUT_STATE_VISIBLE" since="3"/>
+		<field name="TITLE_CHANGED"/>
+		<field name="TYPE_ACCESSIBILITY_OVERLAY" since="22"/>
+		<field name="TYPE_APPLICATION"/>
+		<field name="TYPE_APPLICATION_ATTACHED_DIALOG" since="3"/>
+		<field name="TYPE_APPLICATION_MEDIA"/>
+		<field name="TYPE_APPLICATION_OVERLAY" since="26"/>
+		<field name="TYPE_APPLICATION_PANEL"/>
+		<field name="TYPE_APPLICATION_STARTING"/>
+		<field name="TYPE_APPLICATION_SUB_PANEL"/>
+		<field name="TYPE_BASE_APPLICATION"/>
+		<field name="TYPE_CHANGED"/>
+		<field name="TYPE_DRAWN_APPLICATION" since="25"/>
+		<field name="TYPE_INPUT_METHOD" since="3"/>
+		<field name="TYPE_INPUT_METHOD_DIALOG" since="3"/>
+		<field name="TYPE_KEYGUARD" removed="21"/>
+		<field name="TYPE_KEYGUARD_DIALOG"/>
+		<field name="TYPE_PHONE" deprecated="26"/>
+		<field name="TYPE_PRIORITY_PHONE" deprecated="26"/>
+		<field name="TYPE_PRIVATE_PRESENTATION" since="19"/>
+		<field name="TYPE_SEARCH_BAR"/>
+		<field name="TYPE_STATUS_BAR"/>
+		<field name="TYPE_STATUS_BAR_PANEL" deprecated="30" removed="31"/>
+		<field name="TYPE_SYSTEM_ALERT" deprecated="26"/>
+		<field name="TYPE_SYSTEM_DIALOG"/>
+		<field name="TYPE_SYSTEM_ERROR" deprecated="26"/>
+		<field name="TYPE_SYSTEM_OVERLAY" deprecated="26"/>
+		<field name="TYPE_TOAST" deprecated="26"/>
+		<field name="TYPE_WALLPAPER" since="5"/>
+		<field name="alpha"/>
+		<field name="buttonBrightness" since="8"/>
+		<field name="dimAmount"/>
+		<field name="flags"/>
+		<field name="format"/>
+		<field name="gravity"/>
+		<field name="horizontalMargin"/>
+		<field name="horizontalWeight"/>
+		<field name="layoutInDisplayCutoutMode" since="28"/>
+		<field name="memoryType" deprecated="15"/>
+		<field name="packageName"/>
+		<field name="preferMinimalPostProcessing" since="30"/>
+		<field name="preferredDisplayModeId" since="23"/>
+		<field name="preferredRefreshRate" since="21" deprecated="23"/>
+		<field name="rotationAnimation" since="18"/>
+		<field name="screenBrightness" since="3"/>
+		<field name="screenOrientation" since="3"/>
+		<field name="softInputMode" since="3"/>
+		<field name="systemUiVisibility" since="11" deprecated="30"/>
+		<field name="token"/>
+		<field name="type"/>
+		<field name="verticalMargin"/>
+		<field name="verticalWeight"/>
+		<field name="windowAnimations"/>
+		<field name="x"/>
+		<field name="y"/>
+	</class>
+	<class name="android/view/WindowMetrics" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/graphics/Rect;Landroid/view/WindowInsets;)V"/>
+		<method name="getBounds()Landroid/graphics/Rect;"/>
+		<method name="getWindowInsets()Landroid/view/WindowInsets;"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityEvent" since="4">
+		<extends name="android/view/accessibility/AccessibilityRecord" since="14"/>
+		<extends name="java/lang/Object" removed="14"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" since="30"/>
+		<method name="&lt;init>(I)V" since="30"/>
+		<method name="&lt;init>(Landroid/view/accessibility/AccessibilityEvent;)V" since="30"/>
+		<method name="appendRecord(Landroid/view/accessibility/AccessibilityRecord;)V" since="14"/>
+		<method name="eventTypeToString(I)Ljava/lang/String;" since="14"/>
+		<method name="getAction()I" since="16"/>
+		<method name="getAddedCount()I" removed="14"/>
+		<method name="getBeforeText()Ljava/lang/CharSequence;" removed="14"/>
+		<method name="getClassName()Ljava/lang/CharSequence;" removed="14"/>
+		<method name="getContentChangeTypes()I" since="19"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;" removed="14"/>
+		<method name="getCurrentItemIndex()I" removed="14"/>
+		<method name="getEventTime()J"/>
+		<method name="getEventType()I"/>
+		<method name="getFromIndex()I" removed="14"/>
+		<method name="getItemCount()I" removed="14"/>
+		<method name="getMovementGranularity()I" since="16"/>
+		<method name="getPackageName()Ljava/lang/CharSequence;"/>
+		<method name="getParcelableData()Landroid/os/Parcelable;" removed="14"/>
+		<method name="getRecord(I)Landroid/view/accessibility/AccessibilityRecord;" since="14"/>
+		<method name="getRecordCount()I" since="14"/>
+		<method name="getRemovedCount()I" removed="14"/>
+		<method name="getText()Ljava/util/List;" removed="14"/>
+		<method name="getWindowChanges()I" since="28"/>
+		<method name="initFromParcel(Landroid/os/Parcel;)V"/>
+		<method name="isChecked()Z" removed="14"/>
+		<method name="isEnabled()Z" removed="14"/>
+		<method name="isFullScreen()Z" removed="14"/>
+		<method name="isPassword()Z" removed="14"/>
+		<method name="obtain()Landroid/view/accessibility/AccessibilityEvent;"/>
+		<method name="obtain(I)Landroid/view/accessibility/AccessibilityEvent;"/>
+		<method name="obtain(Landroid/view/accessibility/AccessibilityEvent;)Landroid/view/accessibility/AccessibilityEvent;" since="14"/>
+		<method name="recycle()V"/>
+		<method name="setAction(I)V" since="16"/>
+		<method name="setAddedCount(I)V" removed="14"/>
+		<method name="setBeforeText(Ljava/lang/CharSequence;)V" removed="14"/>
+		<method name="setChecked(Z)V" removed="14"/>
+		<method name="setClassName(Ljava/lang/CharSequence;)V" removed="14"/>
+		<method name="setContentChangeTypes(I)V" since="19"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V" removed="14"/>
+		<method name="setCurrentItemIndex(I)V" removed="14"/>
+		<method name="setEnabled(Z)V" removed="14"/>
+		<method name="setEventTime(J)V"/>
+		<method name="setEventType(I)V"/>
+		<method name="setFromIndex(I)V" removed="14"/>
+		<method name="setFullScreen(Z)V" removed="14"/>
+		<method name="setItemCount(I)V" removed="14"/>
+		<method name="setMovementGranularity(I)V" since="16"/>
+		<method name="setPackageName(Ljava/lang/CharSequence;)V"/>
+		<method name="setParcelableData(Landroid/os/Parcelable;)V" removed="14"/>
+		<method name="setPassword(Z)V" removed="14"/>
+		<method name="setRemovedCount(I)V" removed="14"/>
+		<field name="CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION" since="19"/>
+		<field name="CONTENT_CHANGE_TYPE_DRAG_CANCELLED" since="33"/>
+		<field name="CONTENT_CHANGE_TYPE_DRAG_DROPPED" since="33"/>
+		<field name="CONTENT_CHANGE_TYPE_DRAG_STARTED" since="33"/>
+		<field name="CONTENT_CHANGE_TYPE_PANE_APPEARED" since="28"/>
+		<field name="CONTENT_CHANGE_TYPE_PANE_DISAPPEARED" since="28"/>
+		<field name="CONTENT_CHANGE_TYPE_PANE_TITLE" since="28"/>
+		<field name="CONTENT_CHANGE_TYPE_STATE_DESCRIPTION" since="30"/>
+		<field name="CONTENT_CHANGE_TYPE_SUBTREE" since="19"/>
+		<field name="CONTENT_CHANGE_TYPE_TEXT" since="19"/>
+		<field name="CONTENT_CHANGE_TYPE_UNDEFINED" since="19"/>
+		<field name="CREATOR"/>
+		<field name="INVALID_POSITION"/>
+		<field name="MAX_TEXT_LENGTH" deprecated="15"/>
+		<field name="TYPES_ALL_MASK"/>
+		<field name="TYPE_ANNOUNCEMENT" since="16"/>
+		<field name="TYPE_ASSIST_READING_CONTEXT" since="23"/>
+		<field name="TYPE_GESTURE_DETECTION_END" since="17"/>
+		<field name="TYPE_GESTURE_DETECTION_START" since="17"/>
+		<field name="TYPE_NOTIFICATION_STATE_CHANGED"/>
+		<field name="TYPE_TOUCH_EXPLORATION_GESTURE_END" since="14"/>
+		<field name="TYPE_TOUCH_EXPLORATION_GESTURE_START" since="14"/>
+		<field name="TYPE_TOUCH_INTERACTION_END" since="17"/>
+		<field name="TYPE_TOUCH_INTERACTION_START" since="17"/>
+		<field name="TYPE_VIEW_ACCESSIBILITY_FOCUSED" since="16"/>
+		<field name="TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED" since="16"/>
+		<field name="TYPE_VIEW_CLICKED"/>
+		<field name="TYPE_VIEW_CONTEXT_CLICKED" since="23"/>
+		<field name="TYPE_VIEW_FOCUSED"/>
+		<field name="TYPE_VIEW_HOVER_ENTER" since="14"/>
+		<field name="TYPE_VIEW_HOVER_EXIT" since="14"/>
+		<field name="TYPE_VIEW_LONG_CLICKED"/>
+		<field name="TYPE_VIEW_SCROLLED" since="14"/>
+		<field name="TYPE_VIEW_SELECTED"/>
+		<field name="TYPE_VIEW_TEXT_CHANGED"/>
+		<field name="TYPE_VIEW_TEXT_SELECTION_CHANGED" since="14"/>
+		<field name="TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY" since="16"/>
+		<field name="TYPE_WINDOWS_CHANGED" since="21"/>
+		<field name="TYPE_WINDOW_CONTENT_CHANGED" since="14"/>
+		<field name="TYPE_WINDOW_STATE_CHANGED"/>
+		<field name="WINDOWS_CHANGE_ACCESSIBILITY_FOCUSED" since="28"/>
+		<field name="WINDOWS_CHANGE_ACTIVE" since="28"/>
+		<field name="WINDOWS_CHANGE_ADDED" since="28"/>
+		<field name="WINDOWS_CHANGE_BOUNDS" since="28"/>
+		<field name="WINDOWS_CHANGE_CHILDREN" since="28"/>
+		<field name="WINDOWS_CHANGE_FOCUSED" since="28"/>
+		<field name="WINDOWS_CHANGE_LAYER" since="28"/>
+		<field name="WINDOWS_CHANGE_PARENT" since="28"/>
+		<field name="WINDOWS_CHANGE_PIP" since="28"/>
+		<field name="WINDOWS_CHANGE_REMOVED" since="28"/>
+		<field name="WINDOWS_CHANGE_TITLE" since="28"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityEventSource" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="sendAccessibilityEvent(I)V"/>
+		<method name="sendAccessibilityEventUnchecked(Landroid/view/accessibility/AccessibilityEvent;)V"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityManager" since="4">
+		<extends name="java/lang/Object"/>
+		<method name="addAccessibilityRequestPreparer(Landroid/view/accessibility/AccessibilityRequestPreparer;)V" since="27"/>
+		<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14"/>
+		<method name="addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Landroid/os/Handler;)V" since="26"/>
+		<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19"/>
+		<method name="addTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;Landroid/os/Handler;)V" since="26"/>
+		<method name="getAccessibilityFocusColor()I" since="31"/>
+		<method name="getAccessibilityFocusStrokeWidth()I" since="31"/>
+		<method name="getAccessibilityServiceList()Ljava/util/List;" deprecated="15"/>
+		<method name="getEnabledAccessibilityServiceList(I)Ljava/util/List;" since="14"/>
+		<method name="getInstalledAccessibilityServiceList()Ljava/util/List;" since="14"/>
+		<method name="getRecommendedTimeoutMillis(II)I" since="29"/>
+		<method name="interrupt()V"/>
+		<method name="isAccessibilityButtonSupported()Z" since="27"/>
+		<method name="isEnabled()Z"/>
+		<method name="isTouchExplorationEnabled()Z" since="14"/>
+		<method name="removeAccessibilityRequestPreparer(Landroid/view/accessibility/AccessibilityRequestPreparer;)V" since="27"/>
+		<method name="removeAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;)Z" since="14"/>
+		<method name="removeTouchExplorationStateChangeListener(Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener;)Z" since="19"/>
+		<method name="sendAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V"/>
+		<field name="FLAG_CONTENT_CONTROLS" since="29"/>
+		<field name="FLAG_CONTENT_ICONS" since="29"/>
+		<field name="FLAG_CONTENT_TEXT" since="29"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onAccessibilityStateChanged(Z)V"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="onTouchExplorationStateChanged(Z)V"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" since="30"/>
+		<method name="&lt;init>(Landroid/view/View;)V" since="30"/>
+		<method name="&lt;init>(Landroid/view/View;I)V" since="30"/>
+		<method name="&lt;init>(Landroid/view/accessibility/AccessibilityNodeInfo;)V" since="30"/>
+		<method name="addAction(I)V" deprecated="21"/>
+		<method name="addAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)V" since="21"/>
+		<method name="addChild(Landroid/view/View;)V"/>
+		<method name="addChild(Landroid/view/View;I)V" since="16"/>
+		<method name="canOpenPopup()Z" since="19"/>
+		<method name="findAccessibilityNodeInfosByText(Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="findAccessibilityNodeInfosByViewId(Ljava/lang/String;)Ljava/util/List;" since="18"/>
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
+		<method name="focusSearch(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
+		<method name="getActionList()Ljava/util/List;" since="21"/>
+		<method name="getActions()I" deprecated="21"/>
+		<method name="getAvailableExtraData()Ljava/util/List;" since="26"/>
+		<method name="getBoundsInParent(Landroid/graphics/Rect;)V" deprecated="29"/>
+		<method name="getBoundsInScreen(Landroid/graphics/Rect;)V"/>
+		<method name="getChild(I)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="getChildCount()I"/>
+		<method name="getClassName()Ljava/lang/CharSequence;"/>
+		<method name="getCollectionInfo()Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;" since="19"/>
+		<method name="getCollectionItemInfo()Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;" since="19"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getDrawingOrder()I" since="24"/>
+		<method name="getError()Ljava/lang/CharSequence;" since="21"/>
+		<method name="getExtraRenderingInfo()Landroid/view/accessibility/AccessibilityNodeInfo$ExtraRenderingInfo;" since="30"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="19"/>
+		<method name="getHintText()Ljava/lang/CharSequence;" since="26"/>
+		<method name="getInputType()I" since="19"/>
+		<method name="getLabelFor()Landroid/view/accessibility/AccessibilityNodeInfo;" since="17"/>
+		<method name="getLabeledBy()Landroid/view/accessibility/AccessibilityNodeInfo;" since="17"/>
+		<method name="getLiveRegion()I" since="19"/>
+		<method name="getMaxTextLength()I" since="21"/>
+		<method name="getMovementGranularities()I" since="16"/>
+		<method name="getPackageName()Ljava/lang/CharSequence;"/>
+		<method name="getPaneTitle()Ljava/lang/CharSequence;" since="28"/>
+		<method name="getParent()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="getRangeInfo()Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;" since="19"/>
+		<method name="getStateDescription()Ljava/lang/CharSequence;" since="30"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTextSelectionEnd()I" since="18"/>
+		<method name="getTextSelectionStart()I" since="18"/>
+		<method name="getTooltipText()Ljava/lang/CharSequence;" since="28"/>
+		<method name="getTouchDelegateInfo()Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;" since="29"/>
+		<method name="getTraversalAfter()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22"/>
+		<method name="getTraversalBefore()Landroid/view/accessibility/AccessibilityNodeInfo;" since="22"/>
+		<method name="getViewIdResourceName()Ljava/lang/String;" since="18"/>
+		<method name="getWindow()Landroid/view/accessibility/AccessibilityWindowInfo;" since="21"/>
+		<method name="getWindowId()I"/>
+		<method name="isAccessibilityFocused()Z" since="16"/>
+		<method name="isCheckable()Z"/>
+		<method name="isChecked()Z"/>
+		<method name="isClickable()Z"/>
+		<method name="isContentInvalid()Z" since="19"/>
+		<method name="isContextClickable()Z" since="23"/>
+		<method name="isDismissable()Z" since="19"/>
+		<method name="isEditable()Z" since="18"/>
+		<method name="isEnabled()Z"/>
+		<method name="isFocusable()Z"/>
+		<method name="isFocused()Z"/>
+		<method name="isHeading()Z" since="28"/>
+		<method name="isImportantForAccessibility()Z" since="24"/>
+		<method name="isLongClickable()Z"/>
+		<method name="isMultiLine()Z" since="19"/>
+		<method name="isPassword()Z"/>
+		<method name="isScreenReaderFocusable()Z" since="28"/>
+		<method name="isScrollable()Z"/>
+		<method name="isSelected()Z"/>
+		<method name="isShowingHintText()Z" since="26"/>
+		<method name="isTextEntryKey()Z" since="29"/>
+		<method name="isVisibleToUser()Z" since="16"/>
+		<method name="obtain()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="obtain(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="obtain(Landroid/view/View;I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="16"/>
+		<method name="obtain(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="performAction(I)Z"/>
+		<method name="performAction(ILandroid/os/Bundle;)Z" since="16"/>
+		<method name="recycle()V"/>
+		<method name="refresh()Z" since="18"/>
+		<method name="refreshWithExtraData(Ljava/lang/String;Landroid/os/Bundle;)Z" since="26"/>
+		<method name="removeAction(I)V" since="21" deprecated="21"/>
+		<method name="removeAction(Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction;)Z" since="21"/>
+		<method name="removeChild(Landroid/view/View;)Z" since="21"/>
+		<method name="removeChild(Landroid/view/View;I)Z" since="21"/>
+		<method name="setAccessibilityFocused(Z)V" since="16"/>
+		<method name="setAvailableExtraData(Ljava/util/List;)V" since="26"/>
+		<method name="setBoundsInParent(Landroid/graphics/Rect;)V" deprecated="29"/>
+		<method name="setBoundsInScreen(Landroid/graphics/Rect;)V"/>
+		<method name="setCanOpenPopup(Z)V" since="19"/>
+		<method name="setCheckable(Z)V"/>
+		<method name="setChecked(Z)V"/>
+		<method name="setClassName(Ljava/lang/CharSequence;)V"/>
+		<method name="setClickable(Z)V"/>
+		<method name="setCollectionInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;)V" since="19"/>
+		<method name="setCollectionItemInfo(Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;)V" since="19"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
+		<method name="setContentInvalid(Z)V" since="19"/>
+		<method name="setContextClickable(Z)V" since="23"/>
+		<method name="setDismissable(Z)V" since="19"/>
+		<method name="setDrawingOrder(I)V" since="24"/>
+		<method name="setEditable(Z)V" since="18"/>
+		<method name="setEnabled(Z)V"/>
+		<method name="setError(Ljava/lang/CharSequence;)V" since="21"/>
+		<method name="setFocusable(Z)V"/>
+		<method name="setFocused(Z)V"/>
+		<method name="setHeading(Z)V" since="28"/>
+		<method name="setHintText(Ljava/lang/CharSequence;)V" since="26"/>
+		<method name="setImportantForAccessibility(Z)V" since="24"/>
+		<method name="setInputType(I)V" since="19"/>
+		<method name="setLabelFor(Landroid/view/View;)V" since="17"/>
+		<method name="setLabelFor(Landroid/view/View;I)V" since="17"/>
+		<method name="setLabeledBy(Landroid/view/View;)V" since="17"/>
+		<method name="setLabeledBy(Landroid/view/View;I)V" since="17"/>
+		<method name="setLiveRegion(I)V" since="19"/>
+		<method name="setLongClickable(Z)V"/>
+		<method name="setMaxTextLength(I)V" since="21"/>
+		<method name="setMovementGranularities(I)V" since="16"/>
+		<method name="setMultiLine(Z)V" since="19"/>
+		<method name="setPackageName(Ljava/lang/CharSequence;)V"/>
+		<method name="setPaneTitle(Ljava/lang/CharSequence;)V" since="28"/>
+		<method name="setParent(Landroid/view/View;)V"/>
+		<method name="setParent(Landroid/view/View;I)V" since="16"/>
+		<method name="setPassword(Z)V"/>
+		<method name="setRangeInfo(Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;)V" since="19"/>
+		<method name="setScreenReaderFocusable(Z)V" since="28"/>
+		<method name="setScrollable(Z)V"/>
+		<method name="setSelected(Z)V"/>
+		<method name="setShowingHintText(Z)V" since="26"/>
+		<method name="setSource(Landroid/view/View;)V"/>
+		<method name="setSource(Landroid/view/View;I)V" since="16"/>
+		<method name="setStateDescription(Ljava/lang/CharSequence;)V" since="30"/>
+		<method name="setText(Ljava/lang/CharSequence;)V"/>
+		<method name="setTextEntryKey(Z)V" since="29"/>
+		<method name="setTextSelection(II)V" since="18"/>
+		<method name="setTooltipText(Ljava/lang/CharSequence;)V" since="28"/>
+		<method name="setTouchDelegateInfo(Landroid/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo;)V" since="29"/>
+		<method name="setTraversalAfter(Landroid/view/View;)V" since="22"/>
+		<method name="setTraversalAfter(Landroid/view/View;I)V" since="22"/>
+		<method name="setTraversalBefore(Landroid/view/View;)V" since="22"/>
+		<method name="setTraversalBefore(Landroid/view/View;I)V" since="22"/>
+		<method name="setViewIdResourceName(Ljava/lang/String;)V" since="18"/>
+		<method name="setVisibleToUser(Z)V" since="16"/>
+		<field name="ACTION_ACCESSIBILITY_FOCUS" since="16"/>
+		<field name="ACTION_ARGUMENT_COLUMN_INT" since="23"/>
+		<field name="ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN" since="18"/>
+		<field name="ACTION_ARGUMENT_HTML_ELEMENT_STRING" since="16"/>
+		<field name="ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT" since="16"/>
+		<field name="ACTION_ARGUMENT_MOVE_WINDOW_X" since="26"/>
+		<field name="ACTION_ARGUMENT_MOVE_WINDOW_Y" since="26"/>
+		<field name="ACTION_ARGUMENT_PRESS_AND_HOLD_DURATION_MILLIS_INT" since="30"/>
+		<field name="ACTION_ARGUMENT_PROGRESS_VALUE" since="24"/>
+		<field name="ACTION_ARGUMENT_ROW_INT" since="23"/>
+		<field name="ACTION_ARGUMENT_SELECTION_END_INT" since="18"/>
+		<field name="ACTION_ARGUMENT_SELECTION_START_INT" since="18"/>
+		<field name="ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE" since="21"/>
+		<field name="ACTION_CLEAR_ACCESSIBILITY_FOCUS" since="16"/>
+		<field name="ACTION_CLEAR_FOCUS"/>
+		<field name="ACTION_CLEAR_SELECTION"/>
+		<field name="ACTION_CLICK" since="16"/>
+		<field name="ACTION_COLLAPSE" since="19"/>
+		<field name="ACTION_COPY" since="18"/>
+		<field name="ACTION_CUT" since="18"/>
+		<field name="ACTION_DISMISS" since="19"/>
+		<field name="ACTION_EXPAND" since="19"/>
+		<field name="ACTION_FOCUS"/>
+		<field name="ACTION_LONG_CLICK" since="16"/>
+		<field name="ACTION_NEXT_AT_MOVEMENT_GRANULARITY" since="16"/>
+		<field name="ACTION_NEXT_HTML_ELEMENT" since="16"/>
+		<field name="ACTION_PASTE" since="18"/>
+		<field name="ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY" since="16"/>
+		<field name="ACTION_PREVIOUS_HTML_ELEMENT" since="16"/>
+		<field name="ACTION_SCROLL_BACKWARD" since="16"/>
+		<field name="ACTION_SCROLL_FORWARD" since="16"/>
+		<field name="ACTION_SELECT"/>
+		<field name="ACTION_SET_SELECTION" since="18"/>
+		<field name="ACTION_SET_TEXT" since="21"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_DATA_RENDERING_INFO_KEY" since="30"/>
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH" since="26"/>
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH" since="31"/>
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX" since="26"/>
+		<field name="EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY" since="26"/>
+		<field name="FOCUS_ACCESSIBILITY" since="16"/>
+		<field name="FOCUS_INPUT" since="16"/>
+		<field name="MOVEMENT_GRANULARITY_CHARACTER" since="16"/>
+		<field name="MOVEMENT_GRANULARITY_LINE" since="16"/>
+		<field name="MOVEMENT_GRANULARITY_PAGE" since="16"/>
+		<field name="MOVEMENT_GRANULARITY_PARAGRAPH" since="16"/>
+		<field name="MOVEMENT_GRANULARITY_WORD" since="16"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$AccessibilityAction" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="30"/>
+		<method name="&lt;init>(ILjava/lang/CharSequence;)V"/>
+		<method name="getId()I"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<field name="ACTION_ACCESSIBILITY_FOCUS"/>
+		<field name="ACTION_CLEAR_ACCESSIBILITY_FOCUS"/>
+		<field name="ACTION_CLEAR_FOCUS"/>
+		<field name="ACTION_CLEAR_SELECTION"/>
+		<field name="ACTION_CLICK"/>
+		<field name="ACTION_COLLAPSE"/>
+		<field name="ACTION_CONTEXT_CLICK" since="23"/>
+		<field name="ACTION_COPY"/>
+		<field name="ACTION_CUT"/>
+		<field name="ACTION_DISMISS"/>
+		<field name="ACTION_DRAG_CANCEL" since="33"/>
+		<field name="ACTION_DRAG_DROP" since="33"/>
+		<field name="ACTION_DRAG_START" since="33"/>
+		<field name="ACTION_EXPAND"/>
+		<field name="ACTION_FOCUS"/>
+		<field name="ACTION_HIDE_TOOLTIP" since="28"/>
+		<field name="ACTION_IME_ENTER" since="30"/>
+		<field name="ACTION_LONG_CLICK"/>
+		<field name="ACTION_MOVE_WINDOW" since="26"/>
+		<field name="ACTION_NEXT_AT_MOVEMENT_GRANULARITY"/>
+		<field name="ACTION_NEXT_HTML_ELEMENT"/>
+		<field name="ACTION_PAGE_DOWN" since="29"/>
+		<field name="ACTION_PAGE_LEFT" since="29"/>
+		<field name="ACTION_PAGE_RIGHT" since="29"/>
+		<field name="ACTION_PAGE_UP" since="29"/>
+		<field name="ACTION_PASTE"/>
+		<field name="ACTION_PRESS_AND_HOLD" since="30"/>
+		<field name="ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY"/>
+		<field name="ACTION_PREVIOUS_HTML_ELEMENT"/>
+		<field name="ACTION_SCROLL_BACKWARD"/>
+		<field name="ACTION_SCROLL_DOWN" since="23"/>
+		<field name="ACTION_SCROLL_FORWARD"/>
+		<field name="ACTION_SCROLL_LEFT" since="23"/>
+		<field name="ACTION_SCROLL_RIGHT" since="23"/>
+		<field name="ACTION_SCROLL_TO_POSITION" since="23"/>
+		<field name="ACTION_SCROLL_UP" since="23"/>
+		<field name="ACTION_SELECT"/>
+		<field name="ACTION_SET_PROGRESS" since="24"/>
+		<field name="ACTION_SET_SELECTION"/>
+		<field name="ACTION_SET_TEXT"/>
+		<field name="ACTION_SHOW_ON_SCREEN" since="23"/>
+		<field name="ACTION_SHOW_TOOLTIP" since="28"/>
+		<field name="CREATOR" since="30"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IIZ)V" since="30"/>
+		<method name="&lt;init>(IIZI)V" since="30"/>
+		<method name="getColumnCount()I"/>
+		<method name="getRowCount()I"/>
+		<method name="getSelectionMode()I" since="21"/>
+		<method name="isHierarchical()Z"/>
+		<method name="obtain(IIZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;"/>
+		<method name="obtain(IIZI)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionInfo;" since="21"/>
+		<field name="SELECTION_MODE_MULTIPLE" since="21"/>
+		<field name="SELECTION_MODE_NONE" since="21"/>
+		<field name="SELECTION_MODE_SINGLE" since="21"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IIIIZ)V" since="30"/>
+		<method name="&lt;init>(IIIIZZ)V" since="30"/>
+		<method name="getColumnIndex()I"/>
+		<method name="getColumnSpan()I"/>
+		<method name="getRowIndex()I"/>
+		<method name="getRowSpan()I"/>
+		<method name="isHeading()Z" deprecated="28"/>
+		<method name="isSelected()Z" since="21"/>
+		<method name="obtain(IIIIZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;"/>
+		<method name="obtain(IIIIZZ)Landroid/view/accessibility/AccessibilityNodeInfo$CollectionItemInfo;" since="21"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$ExtraRenderingInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="getLayoutSize()Landroid/util/Size;"/>
+		<method name="getTextSizeInPx()F"/>
+		<method name="getTextSizeUnit()I"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$RangeInfo" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(IFFF)V" since="30"/>
+		<method name="getCurrent()F"/>
+		<method name="getMax()F"/>
+		<method name="getMin()F"/>
+		<method name="getType()I"/>
+		<method name="obtain(IFFF)Landroid/view/accessibility/AccessibilityNodeInfo$RangeInfo;"/>
+		<field name="RANGE_TYPE_FLOAT"/>
+		<field name="RANGE_TYPE_INT"/>
+		<field name="RANGE_TYPE_PERCENT"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeInfo$TouchDelegateInfo" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="getRegionAt(I)Landroid/graphics/Region;"/>
+		<method name="getRegionCount()I"/>
+		<method name="getTargetForRegion(Landroid/graphics/Region;)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityNodeProvider" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addExtraDataToAccessibilityNodeInfo(ILandroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V" since="26"/>
+		<method name="createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="findAccessibilityNodeInfosByText(Ljava/lang/String;I)Ljava/util/List;"/>
+		<method name="findFocus(I)Landroid/view/accessibility/AccessibilityNodeInfo;" since="19"/>
+		<method name="performAction(IILandroid/os/Bundle;)Z"/>
+		<field name="HOST_VIEW_ID" since="21"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityRecord" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="30"/>
+		<method name="&lt;init>(Landroid/view/accessibility/AccessibilityRecord;)V" since="30"/>
+		<method name="getAddedCount()I"/>
+		<method name="getBeforeText()Ljava/lang/CharSequence;"/>
+		<method name="getClassName()Ljava/lang/CharSequence;"/>
+		<method name="getContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getCurrentItemIndex()I"/>
+		<method name="getFromIndex()I"/>
+		<method name="getItemCount()I"/>
+		<method name="getMaxScrollX()I" since="15"/>
+		<method name="getMaxScrollY()I" since="15"/>
+		<method name="getParcelableData()Landroid/os/Parcelable;"/>
+		<method name="getRemovedCount()I"/>
+		<method name="getScrollDeltaX()I" since="28"/>
+		<method name="getScrollDeltaY()I" since="28"/>
+		<method name="getScrollX()I"/>
+		<method name="getScrollY()I"/>
+		<method name="getSource()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="getText()Ljava/util/List;"/>
+		<method name="getToIndex()I"/>
+		<method name="getWindowId()I"/>
+		<method name="isChecked()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="isFullScreen()Z"/>
+		<method name="isPassword()Z"/>
+		<method name="isScrollable()Z"/>
+		<method name="obtain()Landroid/view/accessibility/AccessibilityRecord;"/>
+		<method name="obtain(Landroid/view/accessibility/AccessibilityRecord;)Landroid/view/accessibility/AccessibilityRecord;"/>
+		<method name="recycle()V"/>
+		<method name="setAddedCount(I)V"/>
+		<method name="setBeforeText(Ljava/lang/CharSequence;)V"/>
+		<method name="setChecked(Z)V"/>
+		<method name="setClassName(Ljava/lang/CharSequence;)V"/>
+		<method name="setContentDescription(Ljava/lang/CharSequence;)V"/>
+		<method name="setCurrentItemIndex(I)V"/>
+		<method name="setEnabled(Z)V"/>
+		<method name="setFromIndex(I)V"/>
+		<method name="setFullScreen(Z)V"/>
+		<method name="setItemCount(I)V"/>
+		<method name="setMaxScrollX(I)V" since="15"/>
+		<method name="setMaxScrollY(I)V" since="15"/>
+		<method name="setParcelableData(Landroid/os/Parcelable;)V"/>
+		<method name="setPassword(Z)V"/>
+		<method name="setRemovedCount(I)V"/>
+		<method name="setScrollDeltaX(I)V" since="28"/>
+		<method name="setScrollDeltaY(I)V" since="28"/>
+		<method name="setScrollX(I)V"/>
+		<method name="setScrollY(I)V"/>
+		<method name="setScrollable(Z)V"/>
+		<method name="setSource(Landroid/view/View;)V"/>
+		<method name="setSource(Landroid/view/View;I)V" since="16"/>
+		<method name="setToIndex(I)V"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityRequestPreparer" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/View;I)V"/>
+		<method name="getView()Landroid/view/View;"/>
+		<method name="onPrepareExtraData(ILjava/lang/String;Landroid/os/Bundle;Landroid/os/Message;)V"/>
+		<field name="REQUEST_TYPE_EXTRA_DATA"/>
+	</class>
+	<class name="android/view/accessibility/AccessibilityWindowInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V" since="30"/>
+		<method name="&lt;init>(Landroid/view/accessibility/AccessibilityWindowInfo;)V" since="30"/>
+		<method name="getAnchor()Landroid/view/accessibility/AccessibilityNodeInfo;" since="24"/>
+		<method name="getBoundsInScreen(Landroid/graphics/Rect;)V"/>
+		<method name="getChild(I)Landroid/view/accessibility/AccessibilityWindowInfo;"/>
+		<method name="getChildCount()I"/>
+		<method name="getDisplayId()I" since="30"/>
+		<method name="getId()I"/>
+		<method name="getLayer()I"/>
+		<method name="getParent()Landroid/view/accessibility/AccessibilityWindowInfo;"/>
+		<method name="getRegionInScreen(Landroid/graphics/Region;)V" since="30"/>
+		<method name="getRoot()Landroid/view/accessibility/AccessibilityNodeInfo;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;" since="24"/>
+		<method name="getType()I"/>
+		<method name="isAccessibilityFocused()Z"/>
+		<method name="isActive()Z"/>
+		<method name="isFocused()Z"/>
+		<method name="isInPictureInPictureMode()Z" since="26"/>
+		<method name="obtain()Landroid/view/accessibility/AccessibilityWindowInfo;"/>
+		<method name="obtain(Landroid/view/accessibility/AccessibilityWindowInfo;)Landroid/view/accessibility/AccessibilityWindowInfo;"/>
+		<method name="recycle()V"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_ACCESSIBILITY_OVERLAY" since="22"/>
+		<field name="TYPE_APPLICATION"/>
+		<field name="TYPE_INPUT_METHOD"/>
+		<field name="TYPE_SPLIT_SCREEN_DIVIDER" since="24"/>
+		<field name="TYPE_SYSTEM"/>
+	</class>
+	<class name="android/view/accessibility/CaptioningManager" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="addCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V"/>
+		<method name="getFontScale()F"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getUserStyle()Landroid/view/accessibility/CaptioningManager$CaptionStyle;"/>
+		<method name="isEnabled()Z"/>
+		<method name="removeCaptioningChangeListener(Landroid/view/accessibility/CaptioningManager$CaptioningChangeListener;)V"/>
+	</class>
+	<class name="android/view/accessibility/CaptioningManager$CaptionStyle" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="getTypeface()Landroid/graphics/Typeface;"/>
+		<method name="hasBackgroundColor()Z" since="21"/>
+		<method name="hasEdgeColor()Z" since="21"/>
+		<method name="hasEdgeType()Z" since="21"/>
+		<method name="hasForegroundColor()Z" since="21"/>
+		<method name="hasWindowColor()Z" since="21"/>
+		<field name="EDGE_TYPE_DEPRESSED" since="21"/>
+		<field name="EDGE_TYPE_DROP_SHADOW"/>
+		<field name="EDGE_TYPE_NONE"/>
+		<field name="EDGE_TYPE_OUTLINE"/>
+		<field name="EDGE_TYPE_RAISED" since="21"/>
+		<field name="EDGE_TYPE_UNSPECIFIED" since="21"/>
+		<field name="backgroundColor"/>
+		<field name="edgeColor"/>
+		<field name="edgeType"/>
+		<field name="foregroundColor"/>
+		<field name="windowColor" since="21"/>
+	</class>
+	<class name="android/view/accessibility/CaptioningManager$CaptioningChangeListener" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onEnabledChanged(Z)V"/>
+		<method name="onFontScaleChanged(F)V"/>
+		<method name="onLocaleChanged(Ljava/util/Locale;)V"/>
+		<method name="onUserStyleChanged(Landroid/view/accessibility/CaptioningManager$CaptionStyle;)V"/>
+	</class>
+	<class name="android/view/animation/AccelerateDecelerateInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/AccelerateInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/AlphaAnimation" since="1">
+		<extends name="android/view/animation/Animation"/>
+		<method name="&lt;init>(FF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/Animation" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable" since="3"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="applyTransformation(FLandroid/view/animation/Transformation;)V"/>
+		<method name="cancel()V" since="8"/>
+		<method name="clone()Landroid/view/animation/Animation;" since="3"/>
+		<method name="computeDurationHint()J" since="3"/>
+		<method name="ensureInterpolator()V"/>
+		<method name="getBackgroundColor()I" since="12" deprecated="30"/>
+		<method name="getDetachWallpaper()Z" since="5" deprecated="29"/>
+		<method name="getDuration()J"/>
+		<method name="getFillAfter()Z"/>
+		<method name="getFillBefore()Z"/>
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
+		<method name="getRepeatCount()I"/>
+		<method name="getRepeatMode()I"/>
+		<method name="getScaleFactor()F" since="11"/>
+		<method name="getStartOffset()J"/>
+		<method name="getStartTime()J"/>
+		<method name="getTransformation(JLandroid/view/animation/Transformation;)Z"/>
+		<method name="getTransformation(JLandroid/view/animation/Transformation;F)Z" since="11"/>
+		<method name="getZAdjustment()I"/>
+		<method name="hasEnded()Z"/>
+		<method name="hasStarted()Z"/>
+		<method name="initialize(IIII)V"/>
+		<method name="isFillEnabled()Z" since="3"/>
+		<method name="isInitialized()Z"/>
+		<method name="reset()V"/>
+		<method name="resolveSize(IFII)F"/>
+		<method name="restrictDuration(J)V"/>
+		<method name="scaleCurrentDuration(F)V"/>
+		<method name="setAnimationListener(Landroid/view/animation/Animation$AnimationListener;)V"/>
+		<method name="setBackgroundColor(I)V" since="12" deprecated="30"/>
+		<method name="setDetachWallpaper(Z)V" since="5" deprecated="29"/>
+		<method name="setDuration(J)V"/>
+		<method name="setFillAfter(Z)V"/>
+		<method name="setFillBefore(Z)V"/>
+		<method name="setFillEnabled(Z)V" since="3"/>
+		<method name="setInterpolator(Landroid/content/Context;I)V"/>
+		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V"/>
+		<method name="setRepeatCount(I)V"/>
+		<method name="setRepeatMode(I)V"/>
+		<method name="setStartOffset(J)V"/>
+		<method name="setStartTime(J)V"/>
+		<method name="setZAdjustment(I)V"/>
+		<method name="start()V"/>
+		<method name="startNow()V"/>
+		<method name="willChangeBounds()Z"/>
+		<method name="willChangeTransformationMatrix()Z"/>
+		<field name="ABSOLUTE"/>
+		<field name="INFINITE"/>
+		<field name="RELATIVE_TO_PARENT"/>
+		<field name="RELATIVE_TO_SELF"/>
+		<field name="RESTART"/>
+		<field name="REVERSE"/>
+		<field name="START_ON_FIRST_FRAME"/>
+		<field name="ZORDER_BOTTOM"/>
+		<field name="ZORDER_NORMAL"/>
+		<field name="ZORDER_TOP"/>
+	</class>
+	<class name="android/view/animation/Animation$AnimationListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onAnimationEnd(Landroid/view/animation/Animation;)V"/>
+		<method name="onAnimationRepeat(Landroid/view/animation/Animation;)V"/>
+		<method name="onAnimationStart(Landroid/view/animation/Animation;)V"/>
+	</class>
+	<class name="android/view/animation/Animation$Description" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="type"/>
+		<field name="value"/>
+	</class>
+	<class name="android/view/animation/AnimationSet" since="1">
+		<extends name="android/view/animation/Animation"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="addAnimation(Landroid/view/animation/Animation;)V"/>
+		<method name="clone()Landroid/view/animation/AnimationSet;" since="3"/>
+		<method name="getAnimations()Ljava/util/List;"/>
+	</class>
+	<class name="android/view/animation/AnimationUtils" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="currentAnimationTimeMillis()J"/>
+		<method name="loadAnimation(Landroid/content/Context;I)Landroid/view/animation/Animation;"/>
+		<method name="loadInterpolator(Landroid/content/Context;I)Landroid/view/animation/Interpolator;"/>
+		<method name="loadLayoutAnimation(Landroid/content/Context;I)Landroid/view/animation/LayoutAnimationController;"/>
+		<method name="makeInAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;"/>
+		<method name="makeInChildBottomAnimation(Landroid/content/Context;)Landroid/view/animation/Animation;"/>
+		<method name="makeOutAnimation(Landroid/content/Context;Z)Landroid/view/animation/Animation;"/>
+	</class>
+	<class name="android/view/animation/AnticipateInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/AnticipateOvershootInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(FF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/BaseInterpolator" since="22">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/animation/Interpolator"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/view/animation/BounceInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/CycleInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/DecelerateInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/GridLayoutAnimationController" since="1">
+		<extends name="android/view/animation/LayoutAnimationController"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/animation/Animation;)V"/>
+		<method name="&lt;init>(Landroid/view/animation/Animation;FF)V"/>
+		<method name="getColumnDelay()F"/>
+		<method name="getDirection()I"/>
+		<method name="getDirectionPriority()I"/>
+		<method name="getRowDelay()F"/>
+		<method name="setColumnDelay(F)V"/>
+		<method name="setDirection(I)V"/>
+		<method name="setDirectionPriority(I)V"/>
+		<method name="setRowDelay(F)V"/>
+		<field name="DIRECTION_BOTTOM_TO_TOP"/>
+		<field name="DIRECTION_HORIZONTAL_MASK"/>
+		<field name="DIRECTION_LEFT_TO_RIGHT"/>
+		<field name="DIRECTION_RIGHT_TO_LEFT"/>
+		<field name="DIRECTION_TOP_TO_BOTTOM"/>
+		<field name="DIRECTION_VERTICAL_MASK"/>
+		<field name="PRIORITY_COLUMN"/>
+		<field name="PRIORITY_NONE"/>
+		<field name="PRIORITY_ROW"/>
+	</class>
+	<class name="android/view/animation/GridLayoutAnimationController$AnimationParameters" since="1">
+		<extends name="android/view/animation/LayoutAnimationController$AnimationParameters"/>
+		<method name="&lt;init>()V"/>
+		<field name="column"/>
+		<field name="columnsCount"/>
+		<field name="row"/>
+		<field name="rowsCount"/>
+	</class>
+	<class name="android/view/animation/Interpolator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/animation/TimeInterpolator" since="11"/>
+		<method name="getInterpolation(F)F" removed="11"/>
+	</class>
+	<class name="android/view/animation/LayoutAnimationController" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/animation/Animation;)V"/>
+		<method name="&lt;init>(Landroid/view/animation/Animation;F)V"/>
+		<method name="getAnimation()Landroid/view/animation/Animation;"/>
+		<method name="getAnimationForView(Landroid/view/View;)Landroid/view/animation/Animation;"/>
+		<method name="getDelay()F"/>
+		<method name="getDelayForView(Landroid/view/View;)J"/>
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
+		<method name="getOrder()I"/>
+		<method name="getTransformedIndex(Landroid/view/animation/LayoutAnimationController$AnimationParameters;)I"/>
+		<method name="isDone()Z"/>
+		<method name="setAnimation(Landroid/content/Context;I)V"/>
+		<method name="setAnimation(Landroid/view/animation/Animation;)V"/>
+		<method name="setDelay(F)V"/>
+		<method name="setInterpolator(Landroid/content/Context;I)V"/>
+		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V"/>
+		<method name="setOrder(I)V"/>
+		<method name="start()V"/>
+		<method name="willOverlap()Z"/>
+		<field name="ORDER_NORMAL"/>
+		<field name="ORDER_RANDOM"/>
+		<field name="ORDER_REVERSE"/>
+		<field name="mAnimation"/>
+		<field name="mInterpolator"/>
+		<field name="mRandomizer"/>
+	</class>
+	<class name="android/view/animation/LayoutAnimationController$AnimationParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="count"/>
+		<field name="index"/>
+	</class>
+	<class name="android/view/animation/LinearInterpolator" since="1">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/OvershootInterpolator" since="4">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/PathInterpolator" since="21">
+		<extends name="android/view/animation/BaseInterpolator" since="22"/>
+		<extends name="java/lang/Object" removed="22"/>
+		<implements name="android/view/animation/Interpolator" removed="22"/>
+		<method name="&lt;init>(FF)V"/>
+		<method name="&lt;init>(FFFF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/graphics/Path;)V"/>
+	</class>
+	<class name="android/view/animation/RotateAnimation" since="1">
+		<extends name="android/view/animation/Animation"/>
+		<method name="&lt;init>(FF)V"/>
+		<method name="&lt;init>(FFFF)V"/>
+		<method name="&lt;init>(FFIFIF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/ScaleAnimation" since="1">
+		<extends name="android/view/animation/Animation"/>
+		<method name="&lt;init>(FFFF)V"/>
+		<method name="&lt;init>(FFFFFF)V"/>
+		<method name="&lt;init>(FFFFIFIF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/animation/Transformation" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="clear()V"/>
+		<method name="compose(Landroid/view/animation/Transformation;)V"/>
+		<method name="getAlpha()F"/>
+		<method name="getMatrix()Landroid/graphics/Matrix;"/>
+		<method name="getTransformationType()I"/>
+		<method name="set(Landroid/view/animation/Transformation;)V"/>
+		<method name="setAlpha(F)V"/>
+		<method name="setTransformationType(I)V"/>
+		<method name="toShortString()Ljava/lang/String;" since="3"/>
+		<field name="TYPE_ALPHA"/>
+		<field name="TYPE_BOTH"/>
+		<field name="TYPE_IDENTITY"/>
+		<field name="TYPE_MATRIX"/>
+		<field name="mAlpha"/>
+		<field name="mMatrix"/>
+		<field name="mTransformationType"/>
+	</class>
+	<class name="android/view/animation/TranslateAnimation" since="1">
+		<extends name="android/view/animation/Animation"/>
+		<method name="&lt;init>(FFFF)V"/>
+		<method name="&lt;init>(IFIFIFIF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+	</class>
+	<class name="android/view/autofill/AutofillId" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/autofill/AutofillManager" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="commit()V"/>
+		<method name="disableAutofillServices()V"/>
+		<method name="getAutofillServiceComponentName()Landroid/content/ComponentName;" since="28"/>
+		<method name="getAvailableFieldClassificationAlgorithms()Ljava/util/List;" since="28"/>
+		<method name="getDefaultFieldClassificationAlgorithm()Ljava/lang/String;" since="28"/>
+		<method name="getNextAutofillId()Landroid/view/autofill/AutofillId;" since="28"/>
+		<method name="getUserData()Landroid/service/autofill/UserData;" since="28"/>
+		<method name="getUserDataId()Ljava/lang/String;" since="28"/>
+		<method name="hasEnabledAutofillServices()Z"/>
+		<method name="isAutofillSupported()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="isFieldClassificationEnabled()Z" since="28"/>
+		<method name="notifyValueChanged(Landroid/view/View;)V"/>
+		<method name="notifyValueChanged(Landroid/view/View;ILandroid/view/autofill/AutofillValue;)V"/>
+		<method name="notifyViewClicked(Landroid/view/View;)V" since="28"/>
+		<method name="notifyViewClicked(Landroid/view/View;I)V" since="28"/>
+		<method name="notifyViewEntered(Landroid/view/View;)V"/>
+		<method name="notifyViewEntered(Landroid/view/View;ILandroid/graphics/Rect;)V"/>
+		<method name="notifyViewExited(Landroid/view/View;)V"/>
+		<method name="notifyViewExited(Landroid/view/View;I)V"/>
+		<method name="notifyViewVisibilityChanged(Landroid/view/View;IZ)V" since="27"/>
+		<method name="notifyViewVisibilityChanged(Landroid/view/View;Z)V" since="27"/>
+		<method name="registerCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V"/>
+		<method name="requestAutofill(Landroid/view/View;)V"/>
+		<method name="requestAutofill(Landroid/view/View;ILandroid/graphics/Rect;)V"/>
+		<method name="setUserData(Landroid/service/autofill/UserData;)V" since="28"/>
+		<method name="unregisterCallback(Landroid/view/autofill/AutofillManager$AutofillCallback;)V"/>
+		<field name="EXTRA_ASSIST_STRUCTURE"/>
+		<field name="EXTRA_AUTHENTICATION_RESULT"/>
+		<field name="EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET" since="31"/>
+		<field name="EXTRA_CLIENT_STATE"/>
+		<field name="EXTRA_INLINE_SUGGESTIONS_REQUEST" since="31"/>
+	</class>
+	<class name="android/view/autofill/AutofillManager$AutofillCallback" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onAutofillEvent(Landroid/view/View;I)V"/>
+		<method name="onAutofillEvent(Landroid/view/View;II)V"/>
+		<field name="EVENT_INPUT_HIDDEN"/>
+		<field name="EVENT_INPUT_SHOWN"/>
+		<field name="EVENT_INPUT_UNAVAILABLE"/>
+	</class>
+	<class name="android/view/autofill/AutofillValue" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="forDate(J)Landroid/view/autofill/AutofillValue;"/>
+		<method name="forList(I)Landroid/view/autofill/AutofillValue;"/>
+		<method name="forText(Ljava/lang/CharSequence;)Landroid/view/autofill/AutofillValue;"/>
+		<method name="forToggle(Z)Landroid/view/autofill/AutofillValue;"/>
+		<method name="getDateValue()J"/>
+		<method name="getListValue()I"/>
+		<method name="getTextValue()Ljava/lang/CharSequence;"/>
+		<method name="getToggleValue()Z"/>
+		<method name="isDate()Z"/>
+		<method name="isList()Z"/>
+		<method name="isText()Z"/>
+		<method name="isToggle()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureCondition" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/LocusId;I)V"/>
+		<method name="getFlags()I"/>
+		<method name="getLocusId()Landroid/content/LocusId;"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_IS_REGEX"/>
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureContext" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="forLocusId(Ljava/lang/String;)Landroid/view/contentcapture/ContentCaptureContext;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getLocusId()Landroid/content/LocusId;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureContext$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/LocusId;)V"/>
+		<method name="build()Landroid/view/contentcapture/ContentCaptureContext;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/contentcapture/ContentCaptureContext$Builder;"/>
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureManager" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getContentCaptureConditions()Ljava/util/Set;"/>
+		<method name="getServiceComponentName()Landroid/content/ComponentName;"/>
+		<method name="isContentCaptureEnabled()Z"/>
+		<method name="removeData(Landroid/view/contentcapture/DataRemovalRequest;)V"/>
+		<method name="setContentCaptureEnabled(Z)V"/>
+		<method name="shareData(Landroid/view/contentcapture/DataShareRequest;Ljava/util/concurrent/Executor;Landroid/view/contentcapture/DataShareWriteAdapter;)V" since="30"/>
+		<field name="DATA_SHARE_ERROR_CONCURRENT_REQUEST" since="30"/>
+		<field name="DATA_SHARE_ERROR_TIMEOUT_INTERRUPTED" since="30"/>
+		<field name="DATA_SHARE_ERROR_UNKNOWN" since="30"/>
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureSession" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="createContentCaptureSession(Landroid/view/contentcapture/ContentCaptureContext;)Landroid/view/contentcapture/ContentCaptureSession;"/>
+		<method name="destroy()V"/>
+		<method name="getContentCaptureContext()Landroid/view/contentcapture/ContentCaptureContext;"/>
+		<method name="getContentCaptureSessionId()Landroid/view/contentcapture/ContentCaptureSessionId;"/>
+		<method name="newAutofillId(Landroid/view/autofill/AutofillId;J)Landroid/view/autofill/AutofillId;"/>
+		<method name="newViewStructure(Landroid/view/View;)Landroid/view/ViewStructure;"/>
+		<method name="newVirtualViewStructure(Landroid/view/autofill/AutofillId;J)Landroid/view/ViewStructure;"/>
+		<method name="notifySessionPaused()V" since="30"/>
+		<method name="notifySessionResumed()V" since="30"/>
+		<method name="notifyViewAppeared(Landroid/view/ViewStructure;)V"/>
+		<method name="notifyViewDisappeared(Landroid/view/autofill/AutofillId;)V"/>
+		<method name="notifyViewInsetsChanged(Landroid/graphics/Insets;)V" since="30"/>
+		<method name="notifyViewTextChanged(Landroid/view/autofill/AutofillId;Ljava/lang/CharSequence;)V"/>
+		<method name="notifyViewsDisappeared(Landroid/view/autofill/AutofillId;[J)V"/>
+		<method name="setContentCaptureContext(Landroid/view/contentcapture/ContentCaptureContext;)V"/>
+	</class>
+	<class name="android/view/contentcapture/ContentCaptureSessionId" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/contentcapture/DataRemovalRequest" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getLocusIdRequests()Ljava/util/List;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="isForEverything()Z"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_IS_PREFIX"/>
+	</class>
+	<class name="android/view/contentcapture/DataRemovalRequest$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addLocusId(Landroid/content/LocusId;I)Landroid/view/contentcapture/DataRemovalRequest$Builder;"/>
+		<method name="build()Landroid/view/contentcapture/DataRemovalRequest;"/>
+		<method name="forEverything()Landroid/view/contentcapture/DataRemovalRequest$Builder;"/>
+	</class>
+	<class name="android/view/contentcapture/DataRemovalRequest$LocusIdRequest" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getFlags()I"/>
+		<method name="getLocusId()Landroid/content/LocusId;"/>
+	</class>
+	<class name="android/view/contentcapture/DataShareRequest" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/LocusId;Ljava/lang/String;)V"/>
+		<method name="getLocusId()Landroid/content/LocusId;"/>
+		<method name="getMimeType()Ljava/lang/String;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/contentcapture/DataShareWriteAdapter" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onError(I)V"/>
+		<method name="onRejected()V"/>
+		<method name="onWrite(Landroid/os/ParcelFileDescriptor;)V"/>
+	</class>
+	<class name="android/view/displayhash/DisplayHash" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/displayhash/DisplayHashManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getSupportedHashAlgorithms()Ljava/util/Set;"/>
+		<method name="verifyDisplayHash(Landroid/view/displayhash/DisplayHash;)Landroid/view/displayhash/VerifiedDisplayHash;"/>
+	</class>
+	<class name="android/view/displayhash/DisplayHashResultCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onDisplayHashError(I)V"/>
+		<method name="onDisplayHashResult(Landroid/view/displayhash/DisplayHash;)V"/>
+		<field name="DISPLAY_HASH_ERROR_INVALID_BOUNDS"/>
+		<field name="DISPLAY_HASH_ERROR_INVALID_HASH_ALGORITHM"/>
+		<field name="DISPLAY_HASH_ERROR_MISSING_WINDOW"/>
+		<field name="DISPLAY_HASH_ERROR_NOT_VISIBLE_ON_SCREEN"/>
+		<field name="DISPLAY_HASH_ERROR_TOO_MANY_REQUESTS"/>
+		<field name="DISPLAY_HASH_ERROR_UNKNOWN"/>
+	</class>
+	<class name="android/view/displayhash/VerifiedDisplayHash" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(JLandroid/graphics/Rect;Ljava/lang/String;[B)V"/>
+		<method name="getBoundsInWindow()Landroid/graphics/Rect;"/>
+		<method name="getHashAlgorithm()Ljava/lang/String;"/>
+		<method name="getImageHash()[B"/>
+		<method name="getTimeMillis()J"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/BaseInputConnection" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/inputmethod/InputConnection"/>
+		<method name="&lt;init>(Landroid/view/View;Z)V"/>
+		<method name="getComposingSpanEnd(Landroid/text/Spannable;)I"/>
+		<method name="getComposingSpanStart(Landroid/text/Spannable;)I"/>
+		<method name="getEditable()Landroid/text/Editable;"/>
+		<method name="removeComposingSpans(Landroid/text/Spannable;)V"/>
+		<method name="setComposingSpans(Landroid/text/Spannable;)V"/>
+	</class>
+	<class name="android/view/inputmethod/CompletionInfo" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(JILjava/lang/CharSequence;)V"/>
+		<method name="&lt;init>(JILjava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
+		<method name="getId()J"/>
+		<method name="getLabel()Ljava/lang/CharSequence;"/>
+		<method name="getPosition()I"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/CorrectionInfo" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ILjava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
+		<method name="getNewText()Ljava/lang/CharSequence;"/>
+		<method name="getOffset()I"/>
+		<method name="getOldText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/CursorAnchorInfo" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getCharacterBounds(I)Landroid/graphics/RectF;"/>
+		<method name="getCharacterBoundsFlags(I)I"/>
+		<method name="getComposingText()Ljava/lang/CharSequence;"/>
+		<method name="getComposingTextStart()I"/>
+		<method name="getInsertionMarkerBaseline()F"/>
+		<method name="getInsertionMarkerBottom()F"/>
+		<method name="getInsertionMarkerFlags()I"/>
+		<method name="getInsertionMarkerHorizontal()F"/>
+		<method name="getInsertionMarkerTop()F"/>
+		<method name="getMatrix()Landroid/graphics/Matrix;"/>
+		<method name="getSelectionEnd()I"/>
+		<method name="getSelectionStart()I"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_HAS_INVISIBLE_REGION"/>
+		<field name="FLAG_HAS_VISIBLE_REGION"/>
+		<field name="FLAG_IS_RTL"/>
+	</class>
+	<class name="android/view/inputmethod/CursorAnchorInfo$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addCharacterBounds(IFFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
+		<method name="build()Landroid/view/inputmethod/CursorAnchorInfo;"/>
+		<method name="reset()V"/>
+		<method name="setComposingText(ILjava/lang/CharSequence;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
+		<method name="setInsertionMarkerLocation(FFFFI)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
+		<method name="setMatrix(Landroid/graphics/Matrix;)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
+		<method name="setSelectionRange(II)Landroid/view/inputmethod/CursorAnchorInfo$Builder;"/>
+	</class>
+	<class name="android/view/inputmethod/EditorInfo" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/text/InputType"/>
+		<method name="&lt;init>()V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getInitialSelectedText(I)Ljava/lang/CharSequence;" since="30"/>
+		<method name="getInitialSurroundingText(III)Landroid/view/inputmethod/SurroundingText;" since="31"/>
+		<method name="getInitialTextAfterCursor(II)Ljava/lang/CharSequence;" since="30"/>
+		<method name="getInitialTextBeforeCursor(II)Ljava/lang/CharSequence;" since="30"/>
+		<method name="makeCompatible(I)V" since="11"/>
+		<method name="setInitialSurroundingSubText(Ljava/lang/CharSequence;I)V" since="30"/>
+		<method name="setInitialSurroundingText(Ljava/lang/CharSequence;)V" since="30"/>
+		<field name="CREATOR"/>
+		<field name="IME_ACTION_DONE"/>
+		<field name="IME_ACTION_GO"/>
+		<field name="IME_ACTION_NEXT"/>
+		<field name="IME_ACTION_NONE"/>
+		<field name="IME_ACTION_PREVIOUS" since="11"/>
+		<field name="IME_ACTION_SEARCH"/>
+		<field name="IME_ACTION_SEND"/>
+		<field name="IME_ACTION_UNSPECIFIED"/>
+		<field name="IME_FLAG_FORCE_ASCII" since="16"/>
+		<field name="IME_FLAG_NAVIGATE_NEXT" since="11"/>
+		<field name="IME_FLAG_NAVIGATE_PREVIOUS" since="11"/>
+		<field name="IME_FLAG_NO_ACCESSORY_ACTION"/>
+		<field name="IME_FLAG_NO_ENTER_ACTION"/>
+		<field name="IME_FLAG_NO_EXTRACT_UI"/>
+		<field name="IME_FLAG_NO_FULLSCREEN" since="11"/>
+		<field name="IME_FLAG_NO_PERSONALIZED_LEARNING" since="26"/>
+		<field name="IME_MASK_ACTION"/>
+		<field name="IME_NULL"/>
+		<field name="actionId"/>
+		<field name="actionLabel"/>
+		<field name="contentMimeTypes" since="25"/>
+		<field name="extras"/>
+		<field name="fieldId"/>
+		<field name="fieldName"/>
+		<field name="hintLocales" since="24"/>
+		<field name="hintText"/>
+		<field name="imeOptions"/>
+		<field name="initialCapsMode"/>
+		<field name="initialSelEnd"/>
+		<field name="initialSelStart"/>
+		<field name="inputType"/>
+		<field name="label"/>
+		<field name="packageName"/>
+		<field name="privateImeOptions"/>
+	</class>
+	<class name="android/view/inputmethod/ExtractedText" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_SELECTING"/>
+		<field name="FLAG_SINGLE_LINE"/>
+		<field name="flags"/>
+		<field name="hint" since="28"/>
+		<field name="partialEndOffset"/>
+		<field name="partialStartOffset"/>
+		<field name="selectionEnd"/>
+		<field name="selectionStart"/>
+		<field name="startOffset"/>
+		<field name="text"/>
+	</class>
+	<class name="android/view/inputmethod/ExtractedTextRequest" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>()V"/>
+		<field name="CREATOR"/>
+		<field name="flags"/>
+		<field name="hintMaxChars"/>
+		<field name="hintMaxLines"/>
+		<field name="token"/>
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestion" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getInfo()Landroid/view/inputmethod/InlineSuggestionInfo;"/>
+		<method name="inflate(Landroid/content/Context;Landroid/util/Size;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionInfo" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAutofillHints()[Ljava/lang/String;"/>
+		<method name="getInlinePresentationSpec()Landroid/widget/inline/InlinePresentationSpec;"/>
+		<method name="getSource()Ljava/lang/String;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="isPinned()Z"/>
+		<field name="CREATOR"/>
+		<field name="SOURCE_AUTOFILL"/>
+		<field name="SOURCE_PLATFORM"/>
+		<field name="TYPE_ACTION"/>
+		<field name="TYPE_SUGGESTION"/>
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionsRequest" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getHostPackageName()Ljava/lang/String;"/>
+		<method name="getInlinePresentationSpecs()Ljava/util/List;"/>
+		<method name="getInlineTooltipPresentationSpec()Landroid/widget/inline/InlinePresentationSpec;" since="31"/>
+		<method name="getMaxSuggestionCount()I"/>
+		<method name="getSupportedLocales()Landroid/os/LocaleList;"/>
+		<field name="CREATOR"/>
+		<field name="SUGGESTION_COUNT_UNLIMITED"/>
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionsRequest$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/List;)V"/>
+		<method name="addInlinePresentationSpecs(Landroid/widget/inline/InlinePresentationSpec;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;"/>
+		<method name="build()Landroid/view/inputmethod/InlineSuggestionsRequest;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;"/>
+		<method name="setInlinePresentationSpecs(Ljava/util/List;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;"/>
+		<method name="setInlineTooltipPresentationSpec(Landroid/widget/inline/InlinePresentationSpec;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;" since="31"/>
+		<method name="setMaxSuggestionCount(I)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;"/>
+		<method name="setSupportedLocales(Landroid/os/LocaleList;)Landroid/view/inputmethod/InlineSuggestionsRequest$Builder;"/>
+	</class>
+	<class name="android/view/inputmethod/InlineSuggestionsResponse" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getInlineSuggestions()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/InputBinding" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/view/inputmethod/InputConnection;Landroid/os/IBinder;II)V"/>
+		<method name="&lt;init>(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/InputBinding;)V"/>
+		<method name="getConnection()Landroid/view/inputmethod/InputConnection;"/>
+		<method name="getConnectionToken()Landroid/os/IBinder;"/>
+		<method name="getPid()I"/>
+		<method name="getUid()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/InputConnection" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="beginBatchEdit()Z"/>
+		<method name="clearMetaKeyStates(I)Z"/>
+		<method name="closeConnection()V" since="24"/>
+		<method name="commitCompletion(Landroid/view/inputmethod/CompletionInfo;)Z"/>
+		<method name="commitContent(Landroid/view/inputmethod/InputContentInfo;ILandroid/os/Bundle;)Z" since="25"/>
+		<method name="commitCorrection(Landroid/view/inputmethod/CorrectionInfo;)Z" since="11"/>
+		<method name="commitText(Ljava/lang/CharSequence;I)Z"/>
+		<method name="deleteSurroundingText(II)Z"/>
+		<method name="deleteSurroundingTextInCodePoints(II)Z" since="24"/>
+		<method name="endBatchEdit()Z"/>
+		<method name="finishComposingText()Z"/>
+		<method name="getCursorCapsMode(I)I"/>
+		<method name="getExtractedText(Landroid/view/inputmethod/ExtractedTextRequest;I)Landroid/view/inputmethod/ExtractedText;"/>
+		<method name="getHandler()Landroid/os/Handler;" since="24"/>
+		<method name="getSelectedText(I)Ljava/lang/CharSequence;" since="9"/>
+		<method name="getSurroundingText(III)Landroid/view/inputmethod/SurroundingText;" since="31"/>
+		<method name="getTextAfterCursor(II)Ljava/lang/CharSequence;"/>
+		<method name="getTextBeforeCursor(II)Ljava/lang/CharSequence;"/>
+		<method name="performContextMenuAction(I)Z"/>
+		<method name="performEditorAction(I)Z"/>
+		<method name="performPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)Z"/>
+		<method name="performSpellCheck()Z" since="31"/>
+		<method name="reportFullscreenMode(Z)Z"/>
+		<method name="requestCursorUpdates(I)Z" since="21"/>
+		<method name="sendKeyEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="setComposingRegion(II)Z" since="9"/>
+		<method name="setComposingText(Ljava/lang/CharSequence;I)Z"/>
+		<method name="setImeConsumesInput(Z)Z" since="31"/>
+		<method name="setSelection(II)Z"/>
+		<field name="CURSOR_UPDATE_IMMEDIATE" since="21"/>
+		<field name="CURSOR_UPDATE_MONITOR" since="21"/>
+		<field name="GET_EXTRACTED_TEXT_MONITOR"/>
+		<field name="GET_TEXT_WITH_STYLES"/>
+		<field name="INPUT_CONTENT_GRANT_READ_URI_PERMISSION" since="25"/>
+	</class>
+	<class name="android/view/inputmethod/InputConnectionWrapper" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/inputmethod/InputConnection"/>
+		<method name="&lt;init>(Landroid/view/inputmethod/InputConnection;Z)V"/>
+		<method name="setTarget(Landroid/view/inputmethod/InputConnection;)V"/>
+	</class>
+	<class name="android/view/inputmethod/InputContentInfo" since="25">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/net/Uri;Landroid/content/ClipDescription;)V"/>
+		<method name="&lt;init>(Landroid/net/Uri;Landroid/content/ClipDescription;Landroid/net/Uri;)V"/>
+		<method name="getContentUri()Landroid/net/Uri;"/>
+		<method name="getDescription()Landroid/content/ClipDescription;"/>
+		<method name="getLinkUri()Landroid/net/Uri;"/>
+		<method name="releasePermission()V"/>
+		<method name="requestPermission()V"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethod" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="attachToken(Landroid/os/IBinder;)V"/>
+		<method name="bindInput(Landroid/view/inputmethod/InputBinding;)V"/>
+		<method name="changeInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)V" since="11"/>
+		<method name="createSession(Landroid/view/inputmethod/InputMethod$SessionCallback;)V"/>
+		<method name="hideSoftInput(ILandroid/os/ResultReceiver;)V"/>
+		<method name="restartInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V"/>
+		<method name="revokeSession(Landroid/view/inputmethod/InputMethodSession;)V"/>
+		<method name="setSessionEnabled(Landroid/view/inputmethod/InputMethodSession;Z)V"/>
+		<method name="showSoftInput(ILandroid/os/ResultReceiver;)V"/>
+		<method name="startInput(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V"/>
+		<method name="unbindInput()V"/>
+		<field name="SERVICE_INTERFACE"/>
+		<field name="SERVICE_META_DATA"/>
+		<field name="SHOW_EXPLICIT"/>
+		<field name="SHOW_FORCED"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethod$SessionCallback" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="sessionCreated(Landroid/view/inputmethod/InputMethodSession;)V"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethodInfo" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/pm/ResolveInfo;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/CharSequence;Ljava/lang/String;)V"/>
+		<method name="dump(Landroid/util/Printer;Ljava/lang/String;)V"/>
+		<method name="getComponent()Landroid/content/ComponentName;"/>
+		<method name="getConfigChanges()I" since="31"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getIsDefaultResourceId()I"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
+		<method name="getServiceName()Ljava/lang/String;"/>
+		<method name="getSettingsActivity()Ljava/lang/String;"/>
+		<method name="getSubtypeAt(I)Landroid/view/inputmethod/InputMethodSubtype;" since="11"/>
+		<method name="getSubtypeCount()I" since="11"/>
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<method name="shouldShowInInputMethodPicker()Z" since="31"/>
+		<method name="suppressesSpellChecker()Z" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethodManager" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="dispatchKeyEventFromInputMethod(Landroid/view/View;Landroid/view/KeyEvent;)V" since="24"/>
+		<method name="displayCompletions(Landroid/view/View;[Landroid/view/inputmethod/CompletionInfo;)V"/>
+		<method name="getCurrentInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;" since="11"/>
+		<method name="getEnabledInputMethodList()Ljava/util/List;"/>
+		<method name="getEnabledInputMethodSubtypeList(Landroid/view/inputmethod/InputMethodInfo;Z)Ljava/util/List;" since="11"/>
+		<method name="getInputMethodList()Ljava/util/List;"/>
+		<method name="getLastInputMethodSubtype()Landroid/view/inputmethod/InputMethodSubtype;" since="14"/>
+		<method name="getShortcutInputMethodsAndSubtypes()Ljava/util/Map;" since="11"/>
+		<method name="hideSoftInputFromInputMethod(Landroid/os/IBinder;I)V" deprecated="28"/>
+		<method name="hideSoftInputFromWindow(Landroid/os/IBinder;I)Z"/>
+		<method name="hideSoftInputFromWindow(Landroid/os/IBinder;ILandroid/os/ResultReceiver;)Z"/>
+		<method name="hideStatusIcon(Landroid/os/IBinder;)V" deprecated="28"/>
+		<method name="isAcceptingText()Z"/>
+		<method name="isActive()Z"/>
+		<method name="isActive(Landroid/view/View;)Z"/>
+		<method name="isFullscreenMode()Z"/>
+		<method name="isInputMethodSuppressingSpellChecker()Z" since="31"/>
+		<method name="isWatchingCursor(Landroid/view/View;)Z" deprecated="21"/>
+		<method name="restartInput(Landroid/view/View;)V"/>
+		<method name="sendAppPrivateCommand(Landroid/view/View;Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="setAdditionalInputMethodSubtypes(Ljava/lang/String;[Landroid/view/inputmethod/InputMethodSubtype;)V" since="14" deprecated="29"/>
+		<method name="setCurrentInputMethodSubtype(Landroid/view/inputmethod/InputMethodSubtype;)Z" since="11" deprecated="29"/>
+		<method name="setInputMethod(Landroid/os/IBinder;Ljava/lang/String;)V" deprecated="28"/>
+		<method name="setInputMethodAndSubtype(Landroid/os/IBinder;Ljava/lang/String;Landroid/view/inputmethod/InputMethodSubtype;)V" since="11" deprecated="28"/>
+		<method name="shouldOfferSwitchingToNextInputMethod(Landroid/os/IBinder;)Z" since="19" deprecated="28"/>
+		<method name="showInputMethodAndSubtypeEnabler(Ljava/lang/String;)V" since="11"/>
+		<method name="showInputMethodPicker()V"/>
+		<method name="showSoftInput(Landroid/view/View;I)Z"/>
+		<method name="showSoftInput(Landroid/view/View;ILandroid/os/ResultReceiver;)Z"/>
+		<method name="showSoftInputFromInputMethod(Landroid/os/IBinder;I)V" deprecated="28"/>
+		<method name="showStatusIcon(Landroid/os/IBinder;Ljava/lang/String;I)V" deprecated="28"/>
+		<method name="switchToLastInputMethod(Landroid/os/IBinder;)Z" since="11" deprecated="28"/>
+		<method name="switchToNextInputMethod(Landroid/os/IBinder;Z)Z" since="16" deprecated="28"/>
+		<method name="toggleSoftInput(II)V" deprecated="31"/>
+		<method name="toggleSoftInputFromWindow(Landroid/os/IBinder;II)V" deprecated="31"/>
+		<method name="updateCursor(Landroid/view/View;IIII)V" deprecated="21"/>
+		<method name="updateCursorAnchorInfo(Landroid/view/View;Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21"/>
+		<method name="updateExtractedText(Landroid/view/View;ILandroid/view/inputmethod/ExtractedText;)V"/>
+		<method name="updateSelection(Landroid/view/View;IIII)V"/>
+		<method name="viewClicked(Landroid/view/View;)V" since="14" deprecated="29"/>
+		<field name="HIDE_IMPLICIT_ONLY"/>
+		<field name="HIDE_NOT_ALWAYS"/>
+		<field name="RESULT_HIDDEN"/>
+		<field name="RESULT_SHOWN"/>
+		<field name="RESULT_UNCHANGED_HIDDEN"/>
+		<field name="RESULT_UNCHANGED_SHOWN"/>
+		<field name="SHOW_FORCED"/>
+		<field name="SHOW_IMPLICIT"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethodSession" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="appPrivateCommand(Ljava/lang/String;Landroid/os/Bundle;)V"/>
+		<method name="dispatchGenericMotionEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V" since="17"/>
+		<method name="dispatchKeyEvent(ILandroid/view/KeyEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V"/>
+		<method name="dispatchTrackballEvent(ILandroid/view/MotionEvent;Landroid/view/inputmethod/InputMethodSession$EventCallback;)V"/>
+		<method name="displayCompletions([Landroid/view/inputmethod/CompletionInfo;)V"/>
+		<method name="finishInput()V"/>
+		<method name="toggleSoftInput(II)V" deprecated="31"/>
+		<method name="updateCursor(Landroid/graphics/Rect;)V"/>
+		<method name="updateCursorAnchorInfo(Landroid/view/inputmethod/CursorAnchorInfo;)V" since="21"/>
+		<method name="updateExtractedText(ILandroid/view/inputmethod/ExtractedText;)V"/>
+		<method name="updateSelection(IIIIII)V"/>
+		<method name="viewClicked(Z)V" since="14"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethodSession$EventCallback" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="finishedEvent(IZ)V"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethodSubtype" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)V" since="14" deprecated="19"/>
+		<method name="&lt;init>(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZI)V" since="17" deprecated="19"/>
+		<method name="containsExtraValueKey(Ljava/lang/String;)Z" since="12"/>
+		<method name="getDisplayName(Landroid/content/Context;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;" since="14"/>
+		<method name="getExtraValue()Ljava/lang/String;"/>
+		<method name="getExtraValueOf(Ljava/lang/String;)Ljava/lang/String;" since="12"/>
+		<method name="getIconResId()I"/>
+		<method name="getLanguageTag()Ljava/lang/String;" since="24"/>
+		<method name="getLocale()Ljava/lang/String;" deprecated="24"/>
+		<method name="getMode()Ljava/lang/String;"/>
+		<method name="getNameResId()I"/>
+		<method name="isAsciiCapable()Z" since="19"/>
+		<method name="isAuxiliary()Z" since="14"/>
+		<method name="overridesImplicitlyEnabledSubtype()Z" since="14"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/view/inputmethod/InputMethodSubtype;"/>
+		<method name="setIsAsciiCapable(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setIsAuxiliary(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setLanguageTag(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;" since="24"/>
+		<method name="setOverridesImplicitlyEnabledSubtype(Z)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setSubtypeExtraValue(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setSubtypeIconResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setSubtypeId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setSubtypeLocale(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setSubtypeMode(Ljava/lang/String;)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+		<method name="setSubtypeNameResId(I)Landroid/view/inputmethod/InputMethodSubtype$InputMethodSubtypeBuilder;"/>
+	</class>
+	<class name="android/view/inputmethod/SurroundingText" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;III)V"/>
+		<method name="getOffset()I"/>
+		<method name="getSelectionEnd()I"/>
+		<method name="getSelectionStart()I"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/inspector/InspectionCompanion" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="mapProperties(Landroid/view/inspector/PropertyMapper;)V"/>
+		<method name="readProperties(Ljava/lang/Object;Landroid/view/inspector/PropertyReader;)V"/>
+	</class>
+	<class name="android/view/inspector/InspectionCompanion$UninitializedPropertyMapException" since="29">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/view/inspector/InspectionCompanionProvider" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="provide(Ljava/lang/Class;)Landroid/view/inspector/InspectionCompanion;"/>
+	</class>
+	<class name="android/view/inspector/IntFlagMapping" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(IILjava/lang/String;)V"/>
+		<method name="get(I)Ljava/util/Set;"/>
+	</class>
+	<class name="android/view/inspector/PropertyMapper" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="mapBoolean(Ljava/lang/String;I)I"/>
+		<method name="mapByte(Ljava/lang/String;I)I"/>
+		<method name="mapChar(Ljava/lang/String;I)I"/>
+		<method name="mapColor(Ljava/lang/String;I)I"/>
+		<method name="mapDouble(Ljava/lang/String;I)I"/>
+		<method name="mapFloat(Ljava/lang/String;I)I"/>
+		<method name="mapGravity(Ljava/lang/String;I)I"/>
+		<method name="mapInt(Ljava/lang/String;I)I"/>
+		<method name="mapIntEnum(Ljava/lang/String;ILjava/util/function/IntFunction;)I"/>
+		<method name="mapIntFlag(Ljava/lang/String;ILjava/util/function/IntFunction;)I"/>
+		<method name="mapLong(Ljava/lang/String;I)I"/>
+		<method name="mapObject(Ljava/lang/String;I)I"/>
+		<method name="mapResourceId(Ljava/lang/String;I)I"/>
+		<method name="mapShort(Ljava/lang/String;I)I"/>
+	</class>
+	<class name="android/view/inspector/PropertyMapper$PropertyConflictException" since="29">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/view/inspector/PropertyReader" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="readBoolean(IZ)V"/>
+		<method name="readByte(IB)V"/>
+		<method name="readChar(IC)V"/>
+		<method name="readColor(II)V"/>
+		<method name="readColor(IJ)V"/>
+		<method name="readColor(ILandroid/graphics/Color;)V"/>
+		<method name="readDouble(ID)V"/>
+		<method name="readFloat(IF)V"/>
+		<method name="readGravity(II)V"/>
+		<method name="readInt(II)V"/>
+		<method name="readIntEnum(II)V"/>
+		<method name="readIntFlag(II)V"/>
+		<method name="readLong(IJ)V"/>
+		<method name="readObject(ILjava/lang/Object;)V"/>
+		<method name="readResourceId(II)V"/>
+		<method name="readShort(IS)V"/>
+	</class>
+	<class name="android/view/inspector/PropertyReader$PropertyTypeMismatchException" since="29">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/view/inspector/StaticInspectionCompanionProvider" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/inspector/InspectionCompanionProvider"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/view/inspector/WindowInspector" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="getGlobalWindowViews()Ljava/util/List;"/>
+	</class>
+	<class name="android/view/textclassifier/ConversationAction" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAction()Landroid/app/RemoteAction;"/>
+		<method name="getConfidenceScore()F"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getTextReply()Ljava/lang/CharSequence;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_CALL_PHONE"/>
+		<field name="TYPE_CREATE_REMINDER"/>
+		<field name="TYPE_OPEN_URL"/>
+		<field name="TYPE_SEND_EMAIL"/>
+		<field name="TYPE_SEND_SMS"/>
+		<field name="TYPE_SHARE_LOCATION"/>
+		<field name="TYPE_TEXT_REPLY"/>
+		<field name="TYPE_TRACK_FLIGHT"/>
+		<field name="TYPE_VIEW_CALENDAR"/>
+		<field name="TYPE_VIEW_MAP"/>
+	</class>
+	<class name="android/view/textclassifier/ConversationAction$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="build()Landroid/view/textclassifier/ConversationAction;"/>
+		<method name="setAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+		<method name="setConfidenceScore(F)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+		<method name="setTextReply(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationAction$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/ConversationActions" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Ljava/util/List;Ljava/lang/String;)V"/>
+		<method name="getConversationActions()Ljava/util/List;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Message" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAuthor()Landroid/app/Person;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getReferenceTime()Ljava/time/ZonedDateTime;"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+		<field name="PERSON_USER_OTHERS"/>
+		<field name="PERSON_USER_SELF"/>
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Message$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/app/Person;)V"/>
+		<method name="build()Landroid/view/textclassifier/ConversationActions$Message;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationActions$Message$Builder;"/>
+		<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/ConversationActions$Message$Builder;"/>
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/view/textclassifier/ConversationActions$Message$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Request" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCallingPackageName()Ljava/lang/String;"/>
+		<method name="getConversation()Ljava/util/List;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getHints()Ljava/util/List;"/>
+		<method name="getMaxSuggestions()I"/>
+		<method name="getTypeConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
+		<field name="CREATOR"/>
+		<field name="HINT_FOR_IN_APP"/>
+		<field name="HINT_FOR_NOTIFICATION"/>
+	</class>
+	<class name="android/view/textclassifier/ConversationActions$Request$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/List;)V"/>
+		<method name="build()Landroid/view/textclassifier/ConversationActions$Request;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+		<method name="setHints(Ljava/util/List;)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+		<method name="setMaxSuggestions(I)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+		<method name="setTypeConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/ConversationActions$Request$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/SelectionEvent" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="createSelectionActionEvent(III)Landroid/view/textclassifier/SelectionEvent;"/>
+		<method name="createSelectionActionEvent(IIILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/SelectionEvent;"/>
+		<method name="createSelectionModifiedEvent(II)Landroid/view/textclassifier/SelectionEvent;"/>
+		<method name="createSelectionModifiedEvent(IILandroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/SelectionEvent;"/>
+		<method name="createSelectionModifiedEvent(IILandroid/view/textclassifier/TextSelection;)Landroid/view/textclassifier/SelectionEvent;"/>
+		<method name="createSelectionStartedEvent(II)Landroid/view/textclassifier/SelectionEvent;"/>
+		<method name="getDurationSincePreviousEvent()J"/>
+		<method name="getDurationSinceSessionStart()J"/>
+		<method name="getEnd()I"/>
+		<method name="getEntityType()Ljava/lang/String;"/>
+		<method name="getEventIndex()I"/>
+		<method name="getEventTime()J"/>
+		<method name="getEventType()I"/>
+		<method name="getInvocationMethod()I"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getResultId()Ljava/lang/String;"/>
+		<method name="getSessionId()Landroid/view/textclassifier/TextClassificationSessionId;"/>
+		<method name="getSmartEnd()I"/>
+		<method name="getSmartStart()I"/>
+		<method name="getStart()I"/>
+		<method name="getWidgetType()Ljava/lang/String;"/>
+		<method name="getWidgetVersion()Ljava/lang/String;"/>
+		<method name="isTerminal(I)Z"/>
+		<field name="ACTION_ABANDON"/>
+		<field name="ACTION_COPY"/>
+		<field name="ACTION_CUT"/>
+		<field name="ACTION_DRAG"/>
+		<field name="ACTION_OTHER"/>
+		<field name="ACTION_OVERTYPE"/>
+		<field name="ACTION_PASTE"/>
+		<field name="ACTION_RESET"/>
+		<field name="ACTION_SELECT_ALL"/>
+		<field name="ACTION_SHARE"/>
+		<field name="ACTION_SMART_SHARE"/>
+		<field name="CREATOR"/>
+		<field name="EVENT_AUTO_SELECTION"/>
+		<field name="EVENT_SELECTION_MODIFIED"/>
+		<field name="EVENT_SELECTION_STARTED"/>
+		<field name="EVENT_SMART_SELECTION_MULTI"/>
+		<field name="EVENT_SMART_SELECTION_SINGLE"/>
+		<field name="INVOCATION_LINK"/>
+		<field name="INVOCATION_MANUAL"/>
+		<field name="INVOCATION_UNKNOWN"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassification" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="28"/>
+		<method name="getActions()Ljava/util/List;" since="28"/>
+		<method name="getConfidenceScore(Ljava/lang/String;)F"/>
+		<method name="getEntity(I)Ljava/lang/String;"/>
+		<method name="getEntityCount()I"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="29"/>
+		<method name="getIcon()Landroid/graphics/drawable/Drawable;" deprecated="28"/>
+		<method name="getId()Ljava/lang/String;" since="28"/>
+		<method name="getIntent()Landroid/content/Intent;" deprecated="28"/>
+		<method name="getLabel()Ljava/lang/CharSequence;" deprecated="28"/>
+		<method name="getOnClickListener()Landroid/view/View$OnClickListener;" deprecated="28"/>
+		<method name="getText()Ljava/lang/String;"/>
+		<field name="CREATOR" since="28"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassification$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addAction(Landroid/app/RemoteAction;)Landroid/view/textclassifier/TextClassification$Builder;" since="28"/>
+		<method name="build()Landroid/view/textclassifier/TextClassification;"/>
+		<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextClassification$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassification$Builder;" since="29"/>
+		<method name="setIcon(Landroid/graphics/drawable/Drawable;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
+		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" since="28"/>
+		<method name="setIntent(Landroid/content/Intent;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
+		<method name="setLabel(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
+		<method name="setOnClickListener(Landroid/view/View$OnClickListener;)Landroid/view/textclassifier/TextClassification$Builder;" deprecated="28"/>
+		<method name="setText(Ljava/lang/String;)Landroid/view/textclassifier/TextClassification$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassification$Request" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCallingPackageName()Ljava/lang/String;" since="29"/>
+		<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
+		<method name="getEndIndex()I"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="29"/>
+		<method name="getReferenceTime()Ljava/time/ZonedDateTime;"/>
+		<method name="getStartIndex()I"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassification$Request$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
+		<method name="build()Landroid/view/textclassifier/TextClassification$Request;"/>
+		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification$Request$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassification$Request$Builder;" since="29"/>
+		<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/TextClassification$Request$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassificationContext" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getWidgetType()Ljava/lang/String;"/>
+		<method name="getWidgetVersion()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassificationContext$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="build()Landroid/view/textclassifier/TextClassificationContext;"/>
+		<method name="setWidgetVersion(Ljava/lang/String;)Landroid/view/textclassifier/TextClassificationContext$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassificationManager" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;" since="28"/>
+		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;"/>
+		<method name="setTextClassificationSessionFactory(Landroid/view/textclassifier/TextClassificationSessionFactory;)V" since="28"/>
+		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassificationSessionFactory" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="createTextClassificationSession(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifier;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassificationSessionId" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getValue()Ljava/lang/String;" since="30"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifier" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="classifyText(Landroid/view/textclassifier/TextClassification$Request;)Landroid/view/textclassifier/TextClassification;" since="28"/>
+		<method name="classifyText(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextClassification;"/>
+		<method name="destroy()V" since="28"/>
+		<method name="detectLanguage(Landroid/view/textclassifier/TextLanguage$Request;)Landroid/view/textclassifier/TextLanguage;" since="29"/>
+		<method name="generateLinks(Landroid/view/textclassifier/TextLinks$Request;)Landroid/view/textclassifier/TextLinks;" since="28"/>
+		<method name="getMaxGenerateLinksTextLength()I" since="28"/>
+		<method name="isDestroyed()Z" since="28"/>
+		<method name="onSelectionEvent(Landroid/view/textclassifier/SelectionEvent;)V" since="28"/>
+		<method name="onTextClassifierEvent(Landroid/view/textclassifier/TextClassifierEvent;)V" since="29"/>
+		<method name="suggestConversationActions(Landroid/view/textclassifier/ConversationActions$Request;)Landroid/view/textclassifier/ConversationActions;" since="29"/>
+		<method name="suggestSelection(Landroid/view/textclassifier/TextSelection$Request;)Landroid/view/textclassifier/TextSelection;" since="28"/>
+		<method name="suggestSelection(Ljava/lang/CharSequence;IILandroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection;"/>
+		<field name="EXTRA_FROM_TEXT_CLASSIFIER" since="29"/>
+		<field name="HINT_TEXT_IS_EDITABLE" since="28"/>
+		<field name="HINT_TEXT_IS_NOT_EDITABLE" since="28"/>
+		<field name="NO_OP"/>
+		<field name="TYPE_ADDRESS"/>
+		<field name="TYPE_DATE" since="28"/>
+		<field name="TYPE_DATE_TIME" since="28"/>
+		<field name="TYPE_EMAIL"/>
+		<field name="TYPE_FLIGHT_NUMBER" since="28"/>
+		<field name="TYPE_OTHER"/>
+		<field name="TYPE_PHONE"/>
+		<field name="TYPE_UNKNOWN" since="28"/>
+		<field name="TYPE_URL"/>
+		<field name="WIDGET_TYPE_CLIPBOARD" since="31"/>
+		<field name="WIDGET_TYPE_CUSTOM_EDITTEXT" since="28"/>
+		<field name="WIDGET_TYPE_CUSTOM_TEXTVIEW" since="28"/>
+		<field name="WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW" since="28"/>
+		<field name="WIDGET_TYPE_EDITTEXT" since="28"/>
+		<field name="WIDGET_TYPE_EDIT_WEBVIEW" since="28"/>
+		<field name="WIDGET_TYPE_NOTIFICATION" since="29"/>
+		<field name="WIDGET_TYPE_TEXTVIEW" since="28"/>
+		<field name="WIDGET_TYPE_UNKNOWN" since="28"/>
+		<field name="WIDGET_TYPE_UNSELECTABLE_TEXTVIEW" since="28"/>
+		<field name="WIDGET_TYPE_WEBVIEW" since="28"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifier$EntityConfig" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="create(Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29"/>
+		<method name="createWithExplicitEntityList(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29"/>
+		<method name="createWithHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig;" deprecated="29"/>
+		<method name="getHints()Ljava/util/Collection;"/>
+		<method name="resolveEntityListModifications(Ljava/util/Collection;)Ljava/util/Collection;"/>
+		<method name="shouldIncludeTypesFromTextClassifier()Z" since="29"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifier$EntityConfig$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
+		<method name="includeTypesFromTextClassifier(Z)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+		<method name="setExcludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+		<method name="setHints(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+		<method name="setIncludedTypes(Ljava/util/Collection;)Landroid/view/textclassifier/TextClassifier$EntityConfig$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getActionIndices()[I"/>
+		<method name="getEntityTypes()[Ljava/lang/String;"/>
+		<method name="getEventCategory()I"/>
+		<method name="getEventContext()Landroid/view/textclassifier/TextClassificationContext;"/>
+		<method name="getEventIndex()I"/>
+		<method name="getEventType()I"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getLocale()Landroid/icu/util/ULocale;"/>
+		<method name="getModelName()Ljava/lang/String;"/>
+		<method name="getResultId()Ljava/lang/String;"/>
+		<method name="getScores()[F"/>
+		<field name="CATEGORY_CONVERSATION_ACTIONS"/>
+		<field name="CATEGORY_LANGUAGE_DETECTION"/>
+		<field name="CATEGORY_LINKIFY"/>
+		<field name="CATEGORY_SELECTION"/>
+		<field name="CREATOR"/>
+		<field name="TYPE_ACTIONS_GENERATED"/>
+		<field name="TYPE_ACTIONS_SHOWN"/>
+		<field name="TYPE_AUTO_SELECTION"/>
+		<field name="TYPE_COPY_ACTION"/>
+		<field name="TYPE_CUT_ACTION"/>
+		<field name="TYPE_LINKS_GENERATED" since="30"/>
+		<field name="TYPE_LINK_CLICKED"/>
+		<field name="TYPE_MANUAL_REPLY"/>
+		<field name="TYPE_OTHER_ACTION"/>
+		<field name="TYPE_OVERTYPE"/>
+		<field name="TYPE_PASTE_ACTION"/>
+		<field name="TYPE_SELECTION_DESTROYED"/>
+		<field name="TYPE_SELECTION_DRAG"/>
+		<field name="TYPE_SELECTION_MODIFIED"/>
+		<field name="TYPE_SELECTION_RESET"/>
+		<field name="TYPE_SELECTION_STARTED"/>
+		<field name="TYPE_SELECT_ALL"/>
+		<field name="TYPE_SHARE_ACTION"/>
+		<field name="TYPE_SMART_ACTION"/>
+		<field name="TYPE_SMART_SELECTION_MULTI"/>
+		<field name="TYPE_SMART_SELECTION_SINGLE"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="setActionIndices([I)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setEntityTypes([Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setEventContext(Landroid/view/textclassifier/TextClassificationContext;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setEventIndex(I)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setLocale(Landroid/icu/util/ULocale;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setModelName(Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setResultId(Ljava/lang/String;)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+		<method name="setScores([F)Landroid/view/textclassifier/TextClassifierEvent$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$ConversationActionsEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$ConversationActionsEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$ConversationActionsEvent;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$LanguageDetectionEvent;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextLinkifyEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextLinkifyEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$TextLinkifyEvent;"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextSelectionEvent" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent"/>
+		<method name="getRelativeSuggestedWordEndIndex()I"/>
+		<method name="getRelativeSuggestedWordStartIndex()I"/>
+		<method name="getRelativeWordEndIndex()I"/>
+		<method name="getRelativeWordStartIndex()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder" since="29">
+		<extends name="android/view/textclassifier/TextClassifierEvent$Builder"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent;"/>
+		<method name="setRelativeSuggestedWordEndIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+		<method name="setRelativeSuggestedWordStartIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+		<method name="setRelativeWordEndIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+		<method name="setRelativeWordStartIndex(I)Landroid/view/textclassifier/TextClassifierEvent$TextSelectionEvent$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextLanguage" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getConfidenceScore(Landroid/icu/util/ULocale;)F"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getLocale(I)Landroid/icu/util/ULocale;"/>
+		<method name="getLocaleHypothesisCount()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextLanguage$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/view/textclassifier/TextLanguage;"/>
+		<method name="putLocale(Landroid/icu/util/ULocale;F)Landroid/view/textclassifier/TextLanguage$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLanguage$Builder;"/>
+		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextLanguage$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextLanguage$Request" since="29">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCallingPackageName()Ljava/lang/String;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextLanguage$Request$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="build()Landroid/view/textclassifier/TextLanguage$Request;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLanguage$Request$Builder;"/>
+	</class>
+	<class name="android/view/textclassifier/TextLinks" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="apply(Landroid/text/Spannable;ILjava/util/function/Function;)I"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="29"/>
+		<method name="getLinks()Ljava/util/Collection;"/>
+		<method name="getText()Ljava/lang/CharSequence;" since="30"/>
+		<field name="APPLY_STRATEGY_IGNORE"/>
+		<field name="APPLY_STRATEGY_REPLACE"/>
+		<field name="CREATOR"/>
+		<field name="STATUS_DIFFERENT_TEXT"/>
+		<field name="STATUS_LINKS_APPLIED"/>
+		<field name="STATUS_NO_LINKS_APPLIED"/>
+		<field name="STATUS_NO_LINKS_FOUND"/>
+		<field name="STATUS_UNSUPPORTED_CHARACTER" since="29"/>
+	</class>
+	<class name="android/view/textclassifier/TextLinks$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="addLink(IILjava/util/Map;)Landroid/view/textclassifier/TextLinks$Builder;"/>
+		<method name="addLink(IILjava/util/Map;Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Builder;" since="29"/>
+		<method name="build()Landroid/view/textclassifier/TextLinks;"/>
+		<method name="clearTextLinks()Landroid/view/textclassifier/TextLinks$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Builder;" since="29"/>
+	</class>
+	<class name="android/view/textclassifier/TextLinks$Request" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCallingPackageName()Ljava/lang/String;" since="29"/>
+		<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
+		<method name="getEntityConfig()Landroid/view/textclassifier/TextClassifier$EntityConfig;"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="29"/>
+		<method name="getReferenceTime()Ljava/time/ZonedDateTime;" since="30"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextLinks$Request$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="build()Landroid/view/textclassifier/TextLinks$Request;"/>
+		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextLinks$Request$Builder;"/>
+		<method name="setEntityConfig(Landroid/view/textclassifier/TextClassifier$EntityConfig;)Landroid/view/textclassifier/TextLinks$Request$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextLinks$Request$Builder;" since="29"/>
+		<method name="setReferenceTime(Ljava/time/ZonedDateTime;)Landroid/view/textclassifier/TextLinks$Request$Builder;" since="30"/>
+	</class>
+	<class name="android/view/textclassifier/TextLinks$TextLink" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getConfidenceScore(Ljava/lang/String;)F"/>
+		<method name="getEnd()I"/>
+		<method name="getEntity(I)Ljava/lang/String;"/>
+		<method name="getEntityCount()I"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="29"/>
+		<method name="getStart()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextLinks$TextLinkSpan" since="28">
+		<extends name="android/text/style/ClickableSpan"/>
+		<method name="&lt;init>(Landroid/view/textclassifier/TextLinks$TextLink;)V"/>
+		<method name="getTextLink()Landroid/view/textclassifier/TextLinks$TextLink;"/>
+	</class>
+	<class name="android/view/textclassifier/TextSelection" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable" since="28"/>
+		<method name="getConfidenceScore(Ljava/lang/String;)F"/>
+		<method name="getEntity(I)Ljava/lang/String;"/>
+		<method name="getEntityCount()I"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="29"/>
+		<method name="getId()Ljava/lang/String;" since="28"/>
+		<method name="getSelectionEndIndex()I"/>
+		<method name="getSelectionStartIndex()I"/>
+		<method name="getTextClassification()Landroid/view/textclassifier/TextClassification;" since="31"/>
+		<field name="CREATOR" since="28"/>
+	</class>
+	<class name="android/view/textclassifier/TextSelection$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="build()Landroid/view/textclassifier/TextSelection;"/>
+		<method name="setEntityType(Ljava/lang/String;F)Landroid/view/textclassifier/TextSelection$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextSelection$Builder;" since="29"/>
+		<method name="setId(Ljava/lang/String;)Landroid/view/textclassifier/TextSelection$Builder;" since="28"/>
+		<method name="setTextClassification(Landroid/view/textclassifier/TextClassification;)Landroid/view/textclassifier/TextSelection$Builder;" since="31"/>
+	</class>
+	<class name="android/view/textclassifier/TextSelection$Request" since="28">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getCallingPackageName()Ljava/lang/String;" since="29"/>
+		<method name="getDefaultLocales()Landroid/os/LocaleList;"/>
+		<method name="getEndIndex()I"/>
+		<method name="getExtras()Landroid/os/Bundle;" since="29"/>
+		<method name="getStartIndex()I"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="shouldIncludeTextClassification()Z" since="31"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textclassifier/TextSelection$Request$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;II)V"/>
+		<method name="build()Landroid/view/textclassifier/TextSelection$Request;"/>
+		<method name="setDefaultLocales(Landroid/os/LocaleList;)Landroid/view/textclassifier/TextSelection$Request$Builder;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textclassifier/TextSelection$Request$Builder;" since="29"/>
+		<method name="setIncludeTextClassification(Z)Landroid/view/textclassifier/TextSelection$Request$Builder;" since="31"/>
+	</class>
+	<class name="android/view/textservice/SentenceSuggestionsInfo" since="16">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>([Landroid/view/textservice/SuggestionsInfo;[I[I)V"/>
+		<method name="getLengthAt(I)I"/>
+		<method name="getOffsetAt(I)I"/>
+		<method name="getSuggestionsCount()I"/>
+		<method name="getSuggestionsInfoAt(I)Landroid/view/textservice/SuggestionsInfo;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textservice/SpellCheckerInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getComponent()Landroid/content/ComponentName;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getPackageName()Ljava/lang/String;"/>
+		<method name="getServiceInfo()Landroid/content/pm/ServiceInfo;"/>
+		<method name="getSettingsActivity()Ljava/lang/String;"/>
+		<method name="getSubtypeAt(I)Landroid/view/textservice/SpellCheckerSubtype;"/>
+		<method name="getSubtypeCount()I"/>
+		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V" since="15"/>
+		<method name="close()V"/>
+		<method name="getSentenceSuggestions([Landroid/view/textservice/TextInfo;I)V" since="16"/>
+		<method name="getSpellChecker()Landroid/view/textservice/SpellCheckerInfo;"/>
+		<method name="getSuggestions(Landroid/view/textservice/TextInfo;I)V" deprecated="16"/>
+		<method name="getSuggestions([Landroid/view/textservice/TextInfo;IZ)V" deprecated="16"/>
+		<method name="isSessionDisconnected()Z"/>
+		<field name="SERVICE_META_DATA"/>
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession$SpellCheckerSessionListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onGetSentenceSuggestions([Landroid/view/textservice/SentenceSuggestionsInfo;)V" since="16"/>
+		<method name="onGetSuggestions([Landroid/view/textservice/SuggestionsInfo;)V"/>
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession$SpellCheckerSessionParams" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getSupportedAttributes()I"/>
+		<method name="shouldReferToSpellCheckerLanguageSettings()Z"/>
+	</class>
+	<class name="android/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;"/>
+		<method name="setLocale(Ljava/util/Locale;)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;"/>
+		<method name="setShouldReferToSpellCheckerLanguageSettings(Z)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;"/>
+		<method name="setSupportedAttributes(I)Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams$Builder;"/>
+	</class>
+	<class name="android/view/textservice/SpellCheckerSubtype" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(ILjava/lang/String;Ljava/lang/String;)V" deprecated="24"/>
+		<method name="containsExtraValueKey(Ljava/lang/String;)Z" since="16"/>
+		<method name="getDisplayName(Landroid/content/Context;Ljava/lang/String;Landroid/content/pm/ApplicationInfo;)Ljava/lang/CharSequence;"/>
+		<method name="getExtraValue()Ljava/lang/String;"/>
+		<method name="getExtraValueOf(Ljava/lang/String;)Ljava/lang/String;" since="16"/>
+		<method name="getLanguageTag()Ljava/lang/String;" since="24"/>
+		<method name="getLocale()Ljava/lang/String;" deprecated="24"/>
+		<method name="getNameResId()I"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textservice/SuggestionsInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(I[Ljava/lang/String;)V"/>
+		<method name="&lt;init>(I[Ljava/lang/String;II)V"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="getCookie()I"/>
+		<method name="getSequence()I"/>
+		<method name="getSuggestionAt(I)Ljava/lang/String;"/>
+		<method name="getSuggestionsAttributes()I"/>
+		<method name="getSuggestionsCount()I"/>
+		<method name="setCookieAndSequence(II)V"/>
+		<field name="CREATOR"/>
+		<field name="RESULT_ATTR_DONT_SHOW_UI_FOR_SUGGESTIONS" since="31"/>
+		<field name="RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS" since="15"/>
+		<field name="RESULT_ATTR_IN_THE_DICTIONARY"/>
+		<field name="RESULT_ATTR_LOOKS_LIKE_GRAMMAR_ERROR" since="31"/>
+		<field name="RESULT_ATTR_LOOKS_LIKE_TYPO"/>
+	</class>
+	<class name="android/view/textservice/TextInfo" since="14">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;IIII)V" since="21"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;II)V"/>
+		<method name="getCharSequence()Ljava/lang/CharSequence;" since="21"/>
+		<method name="getCookie()I"/>
+		<method name="getSequence()I"/>
+		<method name="getText()Ljava/lang/String;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/textservice/TextServicesManager" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="getCurrentSpellCheckerInfo()Landroid/view/textservice/SpellCheckerInfo;" since="31"/>
+		<method name="getEnabledSpellCheckerInfos()Ljava/util/List;" since="31"/>
+		<method name="isSpellCheckerEnabled()Z" since="31"/>
+		<method name="newSpellCheckerSession(Landroid/os/Bundle;Ljava/util/Locale;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;Z)Landroid/view/textservice/SpellCheckerSession;"/>
+		<method name="newSpellCheckerSession(Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionParams;Ljava/util/concurrent/Executor;Landroid/view/textservice/SpellCheckerSession$SpellCheckerSessionListener;)Landroid/view/textservice/SpellCheckerSession;" since="31"/>
+	</class>
+	<class name="android/view/translation/TranslationCapability" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getSourceSpec()Landroid/view/translation/TranslationSpec;"/>
+		<method name="getState()I"/>
+		<method name="getSupportedTranslationFlags()I"/>
+		<method name="getTargetSpec()Landroid/view/translation/TranslationSpec;"/>
+		<method name="isUiTranslationEnabled()Z"/>
+		<field name="CREATOR"/>
+		<field name="STATE_AVAILABLE_TO_DOWNLOAD"/>
+		<field name="STATE_DOWNLOADING"/>
+		<field name="STATE_NOT_AVAILABLE"/>
+		<field name="STATE_ON_DEVICE"/>
+	</class>
+	<class name="android/view/translation/TranslationContext" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getSourceSpec()Landroid/view/translation/TranslationSpec;"/>
+		<method name="getTargetSpec()Landroid/view/translation/TranslationSpec;"/>
+		<method name="getTranslationFlags()I"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_DEFINITIONS"/>
+		<field name="FLAG_LOW_LATENCY"/>
+		<field name="FLAG_TRANSLITERATION"/>
+	</class>
+	<class name="android/view/translation/TranslationContext$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/translation/TranslationSpec;Landroid/view/translation/TranslationSpec;)V"/>
+		<method name="build()Landroid/view/translation/TranslationContext;"/>
+		<method name="setTranslationFlags(I)Landroid/view/translation/TranslationContext$Builder;"/>
+	</class>
+	<class name="android/view/translation/TranslationManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="addOnDeviceTranslationCapabilityUpdateListener(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="createOnDeviceTranslator(Landroid/view/translation/TranslationContext;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+		<method name="getOnDeviceTranslationCapabilities(II)Ljava/util/Set;"/>
+		<method name="getOnDeviceTranslationSettingsActivityIntent()Landroid/app/PendingIntent;"/>
+		<method name="removeOnDeviceTranslationCapabilityUpdateListener(Ljava/util/function/Consumer;)V"/>
+	</class>
+	<class name="android/view/translation/TranslationRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getFlags()I"/>
+		<method name="getTranslationRequestValues()Ljava/util/List;"/>
+		<method name="getViewTranslationRequests()Ljava/util/List;"/>
+		<field name="CREATOR"/>
+		<field name="FLAG_DICTIONARY_RESULT"/>
+		<field name="FLAG_PARTIAL_RESPONSES"/>
+		<field name="FLAG_TRANSLATION_RESULT"/>
+		<field name="FLAG_TRANSLITERATION_RESULT"/>
+	</class>
+	<class name="android/view/translation/TranslationRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Landroid/view/translation/TranslationRequest;"/>
+		<method name="setFlags(I)Landroid/view/translation/TranslationRequest$Builder;"/>
+		<method name="setTranslationRequestValues(Ljava/util/List;)Landroid/view/translation/TranslationRequest$Builder;"/>
+		<method name="setViewTranslationRequests(Ljava/util/List;)Landroid/view/translation/TranslationRequest$Builder;"/>
+	</class>
+	<class name="android/view/translation/TranslationRequestValue" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="forText(Ljava/lang/CharSequence;)Landroid/view/translation/TranslationRequestValue;"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/translation/TranslationResponse" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getTranslationResponseValues()Landroid/util/SparseArray;"/>
+		<method name="getTranslationStatus()I"/>
+		<method name="getViewTranslationResponses()Landroid/util/SparseArray;"/>
+		<method name="isFinalResponse()Z"/>
+		<field name="CREATOR"/>
+		<field name="TRANSLATION_STATUS_CONTEXT_UNSUPPORTED"/>
+		<field name="TRANSLATION_STATUS_SUCCESS"/>
+		<field name="TRANSLATION_STATUS_UNKNOWN_ERROR"/>
+	</class>
+	<class name="android/view/translation/TranslationResponse$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/view/translation/TranslationResponse;"/>
+		<method name="setFinalResponse(Z)Landroid/view/translation/TranslationResponse$Builder;"/>
+		<method name="setTranslationResponseValue(ILandroid/view/translation/TranslationResponseValue;)Landroid/view/translation/TranslationResponse$Builder;"/>
+		<method name="setTranslationResponseValues(Landroid/util/SparseArray;)Landroid/view/translation/TranslationResponse$Builder;"/>
+		<method name="setViewTranslationResponse(ILandroid/view/translation/ViewTranslationResponse;)Landroid/view/translation/TranslationResponse$Builder;"/>
+		<method name="setViewTranslationResponses(Landroid/util/SparseArray;)Landroid/view/translation/TranslationResponse$Builder;"/>
+	</class>
+	<class name="android/view/translation/TranslationResponseValue" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="forError()Landroid/view/translation/TranslationResponseValue;"/>
+		<method name="getExtras()Landroid/os/Bundle;"/>
+		<method name="getStatusCode()I"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTransliteration()Ljava/lang/CharSequence;"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_DEFINITIONS"/>
+		<field name="STATUS_ERROR"/>
+		<field name="STATUS_SUCCESS"/>
+	</class>
+	<class name="android/view/translation/TranslationResponseValue$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="build()Landroid/view/translation/TranslationResponseValue;"/>
+		<method name="setExtras(Landroid/os/Bundle;)Landroid/view/translation/TranslationResponseValue$Builder;"/>
+		<method name="setText(Ljava/lang/CharSequence;)Landroid/view/translation/TranslationResponseValue$Builder;"/>
+		<method name="setTransliteration(Ljava/lang/CharSequence;)Landroid/view/translation/TranslationResponseValue$Builder;"/>
+	</class>
+	<class name="android/view/translation/TranslationSpec" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="&lt;init>(Landroid/icu/util/ULocale;I)V"/>
+		<method name="getDataFormat()I"/>
+		<method name="getLocale()Landroid/icu/util/ULocale;"/>
+		<field name="CREATOR"/>
+		<field name="DATA_FORMAT_TEXT"/>
+	</class>
+	<class name="android/view/translation/Translator" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="destroy()V"/>
+		<method name="isDestroyed()Z"/>
+		<method name="translate(Landroid/view/translation/TranslationRequest;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V"/>
+	</class>
+	<class name="android/view/translation/UiTranslationManager" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="registerUiTranslationStateCallback(Ljava/util/concurrent/Executor;Landroid/view/translation/UiTranslationStateCallback;)V"/>
+		<method name="unregisterUiTranslationStateCallback(Landroid/view/translation/UiTranslationStateCallback;)V"/>
+	</class>
+	<class name="android/view/translation/UiTranslationStateCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onFinished()V"/>
+		<method name="onPaused()V"/>
+		<method name="onResumed(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V"/>
+		<method name="onStarted(Landroid/icu/util/ULocale;Landroid/icu/util/ULocale;)V"/>
+	</class>
+	<class name="android/view/translation/ViewTranslationCallback" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onClearTranslation(Landroid/view/View;)Z"/>
+		<method name="onHideTranslation(Landroid/view/View;)Z"/>
+		<method name="onShowTranslation(Landroid/view/View;)Z"/>
+	</class>
+	<class name="android/view/translation/ViewTranslationRequest" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;"/>
+		<method name="getKeys()Ljava/util/Set;"/>
+		<method name="getValue(Ljava/lang/String;)Landroid/view/translation/TranslationRequestValue;"/>
+		<field name="CREATOR"/>
+		<field name="ID_TEXT"/>
+	</class>
+	<class name="android/view/translation/ViewTranslationRequest$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;)V"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;J)V"/>
+		<method name="build()Landroid/view/translation/ViewTranslationRequest;"/>
+		<method name="setValue(Ljava/lang/String;Landroid/view/translation/TranslationRequestValue;)Landroid/view/translation/ViewTranslationRequest$Builder;"/>
+	</class>
+	<class name="android/view/translation/ViewTranslationResponse" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getAutofillId()Landroid/view/autofill/AutofillId;"/>
+		<method name="getKeys()Ljava/util/Set;"/>
+		<method name="getValue(Ljava/lang/String;)Landroid/view/translation/TranslationResponseValue;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/view/translation/ViewTranslationResponse$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/autofill/AutofillId;)V"/>
+		<method name="build()Landroid/view/translation/ViewTranslationResponse;"/>
+		<method name="setValue(Ljava/lang/String;Landroid/view/translation/TranslationResponseValue;)Landroid/view/translation/ViewTranslationResponse$Builder;"/>
+	</class>
+	<class name="android/webkit/CacheManager" since="1" deprecated="11" removed="17">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="cacheDisabled()Z" deprecated="15"/>
+		<method name="endCacheTransaction()Z" deprecated="15"/>
+		<method name="getCacheFile(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;" deprecated="15"/>
+		<method name="getCacheFileBaseDir()Ljava/io/File;" deprecated="15"/>
+		<method name="saveCacheFile(Ljava/lang/String;Landroid/webkit/CacheManager$CacheResult;)V" deprecated="15"/>
+		<method name="startCacheTransaction()Z" deprecated="15"/>
+	</class>
+	<class name="android/webkit/CacheManager$CacheResult" since="1" deprecated="11" removed="17">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentDisposition()Ljava/lang/String;" since="7"/>
+		<method name="getContentLength()J"/>
+		<method name="getETag()Ljava/lang/String;"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+		<method name="getExpires()J"/>
+		<method name="getExpiresString()Ljava/lang/String;" since="7"/>
+		<method name="getHttpStatusCode()I"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getLastModified()Ljava/lang/String;"/>
+		<method name="getLocalPath()Ljava/lang/String;"/>
+		<method name="getLocation()Ljava/lang/String;"/>
+		<method name="getMimeType()Ljava/lang/String;"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="setEncoding(Ljava/lang/String;)V"/>
+		<method name="setInputStream(Ljava/io/InputStream;)V"/>
+	</class>
+	<class name="android/webkit/ClientCertRequest" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="cancel()V"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getKeyTypes()[Ljava/lang/String;"/>
+		<method name="getPort()I"/>
+		<method name="getPrincipals()[Ljava/security/Principal;"/>
+		<method name="ignore()V"/>
+		<method name="proceed(Ljava/security/PrivateKey;[Ljava/security/cert/X509Certificate;)V"/>
+	</class>
+	<class name="android/webkit/ConsoleMessage" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILandroid/webkit/ConsoleMessage$MessageLevel;)V"/>
+		<method name="lineNumber()I"/>
+		<method name="message()Ljava/lang/String;"/>
+		<method name="messageLevel()Landroid/webkit/ConsoleMessage$MessageLevel;"/>
+		<method name="sourceId()Ljava/lang/String;"/>
+	</class>
+	<class name="android/webkit/ConsoleMessage$MessageLevel" since="8">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/ConsoleMessage$MessageLevel;"/>
+		<method name="values()[Landroid/webkit/ConsoleMessage$MessageLevel;"/>
+		<field name="DEBUG"/>
+		<field name="ERROR"/>
+		<field name="LOG"/>
+		<field name="TIP"/>
+		<field name="WARNING"/>
+	</class>
+	<class name="android/webkit/CookieManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="22" deprecated="29"/>
+		<method name="acceptCookie()Z"/>
+		<method name="acceptThirdPartyCookies(Landroid/webkit/WebView;)Z" since="21"/>
+		<method name="allowFileSchemeCookies()Z" since="12"/>
+		<method name="flush()V" since="21"/>
+		<method name="getCookie(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getInstance()Landroid/webkit/CookieManager;"/>
+		<method name="hasCookies()Z"/>
+		<method name="removeAllCookie()V" deprecated="21"/>
+		<method name="removeAllCookies(Landroid/webkit/ValueCallback;)V" since="21"/>
+		<method name="removeExpiredCookie()V" deprecated="21"/>
+		<method name="removeSessionCookie()V" deprecated="21"/>
+		<method name="removeSessionCookies(Landroid/webkit/ValueCallback;)V" since="21"/>
+		<method name="setAcceptCookie(Z)V"/>
+		<method name="setAcceptFileSchemeCookies(Z)V" since="12" deprecated="30"/>
+		<method name="setAcceptThirdPartyCookies(Landroid/webkit/WebView;Z)V" since="21"/>
+		<method name="setCookie(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setCookie(Ljava/lang/String;Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="21"/>
+	</class>
+	<class name="android/webkit/CookieSyncManager" since="1" deprecated="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable"/>
+		<method name="createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager;" deprecated="29"/>
+		<method name="getInstance()Landroid/webkit/CookieSyncManager;" deprecated="29"/>
+		<method name="onSyncInit()V" since="28" removed="29"/>
+		<method name="resetSync()V" since="9" deprecated="21"/>
+		<method name="startSync()V" since="9" deprecated="21"/>
+		<method name="stopSync()V" since="9" deprecated="21"/>
+		<method name="sync()V" since="9" deprecated="21"/>
+		<method name="syncFromRamToFlash()V" deprecated="21"/>
+		<field name="LOGTAG" since="21" removed="28"/>
+		<field name="mDataBase" since="21" removed="28"/>
+		<field name="mHandler" since="21" removed="28"/>
+	</class>
+	<class name="android/webkit/DateSorter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="getBoundary(I)J"/>
+		<method name="getIndex(J)I"/>
+		<method name="getLabel(I)Ljava/lang/String;"/>
+		<field name="DAY_COUNT"/>
+	</class>
+	<class name="android/webkit/DownloadListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onDownloadStart(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V"/>
+	</class>
+	<class name="android/webkit/GeolocationPermissions" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="16"/>
+		<method name="allow(Ljava/lang/String;)V" since="7"/>
+		<method name="clear(Ljava/lang/String;)V" since="7"/>
+		<method name="clearAll()V" since="7"/>
+		<method name="getAllowed(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7"/>
+		<method name="getInstance()Landroid/webkit/GeolocationPermissions;" since="7"/>
+		<method name="getOrigins(Landroid/webkit/ValueCallback;)V" since="7"/>
+	</class>
+	<class name="android/webkit/GeolocationPermissions$Callback" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="invoke(Ljava/lang/String;ZZ)V"/>
+	</class>
+	<class name="android/webkit/HttpAuthHandler" since="1">
+		<extends name="android/os/Handler"/>
+		<method name="cancel()V"/>
+		<method name="proceed(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="useHttpAuthUsernamePassword()Z"/>
+	</class>
+	<class name="android/webkit/JavascriptInterface" since="17">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/webkit/JsPromptResult" since="1">
+		<extends name="android/webkit/JsResult"/>
+		<method name="confirm(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/webkit/JsResult" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="confirm()V"/>
+		<method name="wakeUp()V" removed="16"/>
+		<field name="mProxy" removed="8"/>
+		<field name="mResult" removed="16"/>
+	</class>
+	<class name="android/webkit/MimeTypeMap" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getExtensionFromMimeType(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getFileExtensionFromUrl(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getMimeTypeFromExtension(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getSingleton()Landroid/webkit/MimeTypeMap;"/>
+		<method name="hasExtension(Ljava/lang/String;)Z"/>
+		<method name="hasMimeType(Ljava/lang/String;)Z"/>
+	</class>
+	<class name="android/webkit/PermissionRequest" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="deny()V"/>
+		<method name="getOrigin()Landroid/net/Uri;"/>
+		<method name="getResources()[Ljava/lang/String;"/>
+		<method name="grant([Ljava/lang/String;)V"/>
+		<field name="RESOURCE_AUDIO_CAPTURE"/>
+		<field name="RESOURCE_MIDI_SYSEX" since="23"/>
+		<field name="RESOURCE_PROTECTED_MEDIA_ID"/>
+		<field name="RESOURCE_VIDEO_CAPTURE"/>
+	</class>
+	<class name="android/webkit/Plugin" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="dispatchClickEvent(Landroid/content/Context;)V"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getFileName()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="setClickHandler(Landroid/webkit/Plugin$PreferencesClickHandler;)V"/>
+		<method name="setDescription(Ljava/lang/String;)V"/>
+		<method name="setFileName(Ljava/lang/String;)V"/>
+		<method name="setName(Ljava/lang/String;)V"/>
+		<method name="setPath(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/webkit/Plugin$PreferencesClickHandler" since="1" removed="12">
+		<extends name="java/lang/Object"/>
+		<method name="handleClickEvent(Landroid/content/Context;)V"/>
+	</class>
+	<class name="android/webkit/PluginData" since="3" deprecated="5" removed="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/io/InputStream;JLjava/util/Map;I)V"/>
+		<method name="getContentLength()J"/>
+		<method name="getHeaders()Ljava/util/Map;"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getStatusCode()I"/>
+	</class>
+	<class name="android/webkit/PluginList" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addPlugin(Landroid/webkit/Plugin;)V"/>
+		<method name="clear()V"/>
+		<method name="getList()Ljava/util/List;"/>
+		<method name="pluginClicked(Landroid/content/Context;I)V"/>
+		<method name="removePlugin(Landroid/webkit/Plugin;)V"/>
+	</class>
+	<class name="android/webkit/PluginStub" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="getEmbeddedView(ILandroid/content/Context;)Landroid/view/View;"/>
+		<method name="getFullScreenView(ILandroid/content/Context;)Landroid/view/View;"/>
+	</class>
+	<class name="android/webkit/RenderProcessGoneDetail" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="didCrash()Z"/>
+		<method name="rendererPriorityAtExit()I"/>
+	</class>
+	<class name="android/webkit/SafeBrowsingResponse" since="27">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="backToSafety(Z)V"/>
+		<method name="proceed(Z)V"/>
+		<method name="showInterstitial(Z)V"/>
+	</class>
+	<class name="android/webkit/ServiceWorkerClient" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="shouldInterceptRequest(Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;"/>
+	</class>
+	<class name="android/webkit/ServiceWorkerController" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getInstance()Landroid/webkit/ServiceWorkerController;"/>
+		<method name="getServiceWorkerWebSettings()Landroid/webkit/ServiceWorkerWebSettings;"/>
+		<method name="setServiceWorkerClient(Landroid/webkit/ServiceWorkerClient;)V"/>
+	</class>
+	<class name="android/webkit/ServiceWorkerWebSettings" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAllowContentAccess()Z"/>
+		<method name="getAllowFileAccess()Z"/>
+		<method name="getBlockNetworkLoads()Z"/>
+		<method name="getCacheMode()I"/>
+		<method name="setAllowContentAccess(Z)V"/>
+		<method name="setAllowFileAccess(Z)V"/>
+		<method name="setBlockNetworkLoads(Z)V"/>
+		<method name="setCacheMode(I)V"/>
+	</class>
+	<class name="android/webkit/SslErrorHandler" since="1">
+		<extends name="android/os/Handler"/>
+		<method name="cancel()V"/>
+		<method name="proceed()V"/>
+	</class>
+	<class name="android/webkit/TracingConfig" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="getCustomIncludedCategories()Ljava/util/List;"/>
+		<method name="getPredefinedCategories()I"/>
+		<method name="getTracingMode()I"/>
+		<field name="CATEGORIES_ALL"/>
+		<field name="CATEGORIES_ANDROID_WEBVIEW"/>
+		<field name="CATEGORIES_FRAME_VIEWER"/>
+		<field name="CATEGORIES_INPUT_LATENCY"/>
+		<field name="CATEGORIES_JAVASCRIPT_AND_RENDERING"/>
+		<field name="CATEGORIES_NONE"/>
+		<field name="CATEGORIES_RENDERING"/>
+		<field name="CATEGORIES_WEB_DEVELOPER"/>
+		<field name="RECORD_CONTINUOUSLY"/>
+		<field name="RECORD_UNTIL_FULL"/>
+	</class>
+	<class name="android/webkit/TracingConfig$Builder" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addCategories(Ljava/util/Collection;)Landroid/webkit/TracingConfig$Builder;"/>
+		<method name="addCategories([I)Landroid/webkit/TracingConfig$Builder;"/>
+		<method name="addCategories([Ljava/lang/String;)Landroid/webkit/TracingConfig$Builder;"/>
+		<method name="build()Landroid/webkit/TracingConfig;"/>
+		<method name="setTracingMode(I)Landroid/webkit/TracingConfig$Builder;"/>
+	</class>
+	<class name="android/webkit/TracingController" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getInstance()Landroid/webkit/TracingController;"/>
+		<method name="isTracing()Z"/>
+		<method name="start(Landroid/webkit/TracingConfig;)V"/>
+		<method name="stop(Ljava/io/OutputStream;Ljava/util/concurrent/Executor;)Z"/>
+	</class>
+	<class name="android/webkit/URLUtil" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="composeSearchUrl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="decode([B)[B"/>
+		<method name="guessFileName(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="guessUrl(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isAboutUrl(Ljava/lang/String;)Z"/>
+		<method name="isAssetUrl(Ljava/lang/String;)Z"/>
+		<method name="isContentUrl(Ljava/lang/String;)Z"/>
+		<method name="isCookielessProxyUrl(Ljava/lang/String;)Z" deprecated="15"/>
+		<method name="isDataUrl(Ljava/lang/String;)Z"/>
+		<method name="isFileUrl(Ljava/lang/String;)Z"/>
+		<method name="isHttpUrl(Ljava/lang/String;)Z"/>
+		<method name="isHttpsUrl(Ljava/lang/String;)Z"/>
+		<method name="isJavaScriptUrl(Ljava/lang/String;)Z"/>
+		<method name="isNetworkUrl(Ljava/lang/String;)Z"/>
+		<method name="isValidUrl(Ljava/lang/String;)Z"/>
+		<method name="stripAnchor(Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="android/webkit/UrlInterceptHandler" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object"/>
+		<method name="getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData;" since="3"/>
+		<method name="service(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;"/>
+	</class>
+	<class name="android/webkit/UrlInterceptRegistry" since="1" deprecated="5" removed="12">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getPluginData(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/PluginData;" since="3"/>
+		<method name="getSurrogate(Ljava/lang/String;Ljava/util/Map;)Landroid/webkit/CacheManager$CacheResult;"/>
+		<method name="registerHandler(Landroid/webkit/UrlInterceptHandler;)Z"/>
+		<method name="setUrlInterceptDisabled(Z)V"/>
+		<method name="unregisterHandler(Landroid/webkit/UrlInterceptHandler;)Z"/>
+		<method name="urlInterceptDisabled()Z"/>
+	</class>
+	<class name="android/webkit/ValueCallback" since="7">
+		<extends name="java/lang/Object"/>
+		<method name="onReceiveValue(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="android/webkit/WebBackForwardList" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V" since="22"/>
+		<method name="clone()Landroid/webkit/WebBackForwardList;"/>
+		<method name="getCurrentIndex()I"/>
+		<method name="getCurrentItem()Landroid/webkit/WebHistoryItem;"/>
+		<method name="getItemAtIndex(I)Landroid/webkit/WebHistoryItem;"/>
+		<method name="getSize()I"/>
+	</class>
+	<class name="android/webkit/WebChromeClient" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDefaultVideoPoster()Landroid/graphics/Bitmap;" since="7"/>
+		<method name="getVideoLoadingProgressView()Landroid/view/View;" since="7"/>
+		<method name="getVisitedHistory(Landroid/webkit/ValueCallback;)V" since="7"/>
+		<method name="onCloseWindow(Landroid/webkit/WebView;)V"/>
+		<method name="onConsoleMessage(Landroid/webkit/ConsoleMessage;)Z" since="8"/>
+		<method name="onConsoleMessage(Ljava/lang/String;ILjava/lang/String;)V" since="7" deprecated="15"/>
+		<method name="onCreateWindow(Landroid/webkit/WebView;ZZLandroid/os/Message;)Z"/>
+		<method name="onExceededDatabaseQuota(Ljava/lang/String;Ljava/lang/String;JJJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="5" deprecated="19"/>
+		<method name="onGeolocationPermissionsHidePrompt()V" since="5"/>
+		<method name="onGeolocationPermissionsShowPrompt(Ljava/lang/String;Landroid/webkit/GeolocationPermissions$Callback;)V" since="5"/>
+		<method name="onHideCustomView()V" since="7"/>
+		<method name="onJsAlert(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z"/>
+		<method name="onJsBeforeUnload(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z"/>
+		<method name="onJsConfirm(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsResult;)Z"/>
+		<method name="onJsPrompt(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/webkit/JsPromptResult;)Z"/>
+		<method name="onJsTimeout()Z" since="7" deprecated="17"/>
+		<method name="onPermissionRequest(Landroid/webkit/PermissionRequest;)V" since="21"/>
+		<method name="onPermissionRequestCanceled(Landroid/webkit/PermissionRequest;)V" since="21"/>
+		<method name="onProgressChanged(Landroid/webkit/WebView;I)V"/>
+		<method name="onReachedMaxAppCacheSize(JJLandroid/webkit/WebStorage$QuotaUpdater;)V" since="7" deprecated="19"/>
+		<method name="onReceivedIcon(Landroid/webkit/WebView;Landroid/graphics/Bitmap;)V"/>
+		<method name="onReceivedTitle(Landroid/webkit/WebView;Ljava/lang/String;)V"/>
+		<method name="onReceivedTouchIconUrl(Landroid/webkit/WebView;Ljava/lang/String;Z)V" since="7"/>
+		<method name="onRequestFocus(Landroid/webkit/WebView;)V"/>
+		<method name="onShowCustomView(Landroid/view/View;ILandroid/webkit/WebChromeClient$CustomViewCallback;)V" since="14" deprecated="18"/>
+		<method name="onShowCustomView(Landroid/view/View;Landroid/webkit/WebChromeClient$CustomViewCallback;)V" since="7"/>
+		<method name="onShowFileChooser(Landroid/webkit/WebView;Landroid/webkit/ValueCallback;Landroid/webkit/WebChromeClient$FileChooserParams;)Z" since="21"/>
+	</class>
+	<class name="android/webkit/WebChromeClient$CustomViewCallback" since="7">
+		<extends name="java/lang/Object"/>
+		<method name="onCustomViewHidden()V"/>
+	</class>
+	<class name="android/webkit/WebChromeClient$FileChooserParams" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="createIntent()Landroid/content/Intent;"/>
+		<method name="getAcceptTypes()[Ljava/lang/String;"/>
+		<method name="getFilenameHint()Ljava/lang/String;"/>
+		<method name="getMode()I"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="isCaptureEnabled()Z"/>
+		<method name="parseResult(ILandroid/content/Intent;)[Landroid/net/Uri;"/>
+		<field name="MODE_OPEN"/>
+		<field name="MODE_OPEN_MULTIPLE"/>
+		<field name="MODE_SAVE"/>
+	</class>
+	<class name="android/webkit/WebHistoryItem" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V" since="22"/>
+		<method name="clone()Landroid/webkit/WebHistoryItem;"/>
+		<method name="getFavicon()Landroid/graphics/Bitmap;"/>
+		<method name="getId()I" deprecated="15" removed="17"/>
+		<method name="getOriginalUrl()Ljava/lang/String;" since="3"/>
+		<method name="getTitle()Ljava/lang/String;"/>
+		<method name="getUrl()Ljava/lang/String;"/>
+	</class>
+	<class name="android/webkit/WebIconDatabase" since="1" deprecated="18">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="22" deprecated="29"/>
+		<method name="close()V" deprecated="29"/>
+		<method name="getInstance()Landroid/webkit/WebIconDatabase;" deprecated="29"/>
+		<method name="open(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="releaseIconForPageUrl(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="removeAllIcons()V" deprecated="29"/>
+		<method name="requestIconForPageUrl(Ljava/lang/String;Landroid/webkit/WebIconDatabase$IconListener;)V" deprecated="29"/>
+		<method name="retainIconForPageUrl(Ljava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="android/webkit/WebIconDatabase$IconListener" since="1" deprecated="18">
+		<extends name="java/lang/Object"/>
+		<method name="onReceivedIcon(Ljava/lang/String;Landroid/graphics/Bitmap;)V" deprecated="29"/>
+	</class>
+	<class name="android/webkit/WebMessage" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[Landroid/webkit/WebMessagePort;)V"/>
+		<method name="getData()Ljava/lang/String;"/>
+		<method name="getPorts()[Landroid/webkit/WebMessagePort;"/>
+	</class>
+	<class name="android/webkit/WebMessagePort" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="close()V"/>
+		<method name="postMessage(Landroid/webkit/WebMessage;)V"/>
+		<method name="setWebMessageCallback(Landroid/webkit/WebMessagePort$WebMessageCallback;)V"/>
+		<method name="setWebMessageCallback(Landroid/webkit/WebMessagePort$WebMessageCallback;Landroid/os/Handler;)V"/>
+	</class>
+	<class name="android/webkit/WebMessagePort$WebMessageCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onMessage(Landroid/webkit/WebMessagePort;Landroid/webkit/WebMessage;)V"/>
+	</class>
+	<class name="android/webkit/WebResourceError" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="getDescription()Ljava/lang/CharSequence;"/>
+		<method name="getErrorCode()I"/>
+	</class>
+	<class name="android/webkit/WebResourceRequest" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="getMethod()Ljava/lang/String;"/>
+		<method name="getRequestHeaders()Ljava/util/Map;"/>
+		<method name="getUrl()Landroid/net/Uri;"/>
+		<method name="hasGesture()Z"/>
+		<method name="isForMainFrame()Z"/>
+		<method name="isRedirect()Z" since="24"/>
+	</class>
+	<class name="android/webkit/WebResourceResponse" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/util/Map;Ljava/io/InputStream;)V" since="21"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/io/InputStream;)V"/>
+		<method name="getData()Ljava/io/InputStream;"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+		<method name="getMimeType()Ljava/lang/String;"/>
+		<method name="getReasonPhrase()Ljava/lang/String;" since="21"/>
+		<method name="getResponseHeaders()Ljava/util/Map;" since="21"/>
+		<method name="getStatusCode()I" since="21"/>
+		<method name="setData(Ljava/io/InputStream;)V"/>
+		<method name="setEncoding(Ljava/lang/String;)V"/>
+		<method name="setMimeType(Ljava/lang/String;)V"/>
+		<method name="setResponseHeaders(Ljava/util/Map;)V" since="21"/>
+		<method name="setStatusCodeAndReasonPhrase(ILjava/lang/String;)V" since="21"/>
+	</class>
+	<class name="android/webkit/WebSettings" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="22"/>
+		<method name="enableSmoothTransition()Z" since="11" deprecated="17"/>
+		<method name="getAllowContentAccess()Z" since="11"/>
+		<method name="getAllowFileAccess()Z" since="3"/>
+		<method name="getAllowFileAccessFromFileURLs()Z" since="16"/>
+		<method name="getAllowUniversalAccessFromFileURLs()Z" since="16"/>
+		<method name="getBlockNetworkImage()Z"/>
+		<method name="getBlockNetworkLoads()Z" since="8"/>
+		<method name="getBuiltInZoomControls()Z" since="3"/>
+		<method name="getCacheMode()I"/>
+		<method name="getCursiveFontFamily()Ljava/lang/String;"/>
+		<method name="getDatabaseEnabled()Z" since="5"/>
+		<method name="getDatabasePath()Ljava/lang/String;" since="5" deprecated="19"/>
+		<method name="getDefaultFixedFontSize()I"/>
+		<method name="getDefaultFontSize()I"/>
+		<method name="getDefaultTextEncodingName()Ljava/lang/String;"/>
+		<method name="getDefaultUserAgent(Landroid/content/Context;)Ljava/lang/String;" since="17"/>
+		<method name="getDefaultZoom()Landroid/webkit/WebSettings$ZoomDensity;" since="7" deprecated="19"/>
+		<method name="getDisabledActionModeMenuItems()I" since="24"/>
+		<method name="getDisplayZoomControls()Z" since="11"/>
+		<method name="getDomStorageEnabled()Z" since="7"/>
+		<method name="getFantasyFontFamily()Ljava/lang/String;"/>
+		<method name="getFixedFontFamily()Ljava/lang/String;"/>
+		<method name="getForceDark()I" since="29"/>
+		<method name="getJavaScriptCanOpenWindowsAutomatically()Z"/>
+		<method name="getJavaScriptEnabled()Z"/>
+		<method name="getLayoutAlgorithm()Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
+		<method name="getLightTouchEnabled()Z" deprecated="18"/>
+		<method name="getLoadWithOverviewMode()Z" since="7"/>
+		<method name="getLoadsImagesAutomatically()Z"/>
+		<method name="getMediaPlaybackRequiresUserGesture()Z" since="17"/>
+		<method name="getMinimumFontSize()I"/>
+		<method name="getMinimumLogicalFontSize()I"/>
+		<method name="getMixedContentMode()I" since="21"/>
+		<method name="getNavDump()Z" deprecated="15" removed="17"/>
+		<method name="getOffscreenPreRaster()Z" since="23"/>
+		<method name="getPluginState()Landroid/webkit/WebSettings$PluginState;" since="8" deprecated="18"/>
+		<method name="getPluginsEnabled()Z" deprecated="15" removed="18"/>
+		<method name="getPluginsPath()Ljava/lang/String;" deprecated="15" removed="18"/>
+		<method name="getSafeBrowsingEnabled()Z" since="26"/>
+		<method name="getSansSerifFontFamily()Ljava/lang/String;"/>
+		<method name="getSaveFormData()Z" deprecated="26"/>
+		<method name="getSavePassword()Z" deprecated="18"/>
+		<method name="getSerifFontFamily()Ljava/lang/String;"/>
+		<method name="getStandardFontFamily()Ljava/lang/String;"/>
+		<method name="getTextSize()Landroid/webkit/WebSettings$TextSize;" deprecated="15"/>
+		<method name="getTextZoom()I" since="14"/>
+		<method name="getUseDoubleTree()Z" deprecated="15" removed="17"/>
+		<method name="getUseWebViewBackgroundForOverscrollBackground()Z" since="9" deprecated="15" removed="17"/>
+		<method name="getUseWideViewPort()Z"/>
+		<method name="getUserAgent()I" deprecated="15" removed="17"/>
+		<method name="getUserAgentString()Ljava/lang/String;" since="3"/>
+		<method name="setAllowContentAccess(Z)V" since="11"/>
+		<method name="setAllowFileAccess(Z)V" since="3"/>
+		<method name="setAllowFileAccessFromFileURLs(Z)V" since="16" deprecated="30"/>
+		<method name="setAllowUniversalAccessFromFileURLs(Z)V" since="16" deprecated="30"/>
+		<method name="setAppCacheEnabled(Z)V" since="7" deprecated="30"/>
+		<method name="setAppCacheMaxSize(J)V" since="7" deprecated="18"/>
+		<method name="setAppCachePath(Ljava/lang/String;)V" since="7" deprecated="30"/>
+		<method name="setBlockNetworkImage(Z)V"/>
+		<method name="setBlockNetworkLoads(Z)V" since="8"/>
+		<method name="setBuiltInZoomControls(Z)V" since="3"/>
+		<method name="setCacheMode(I)V"/>
+		<method name="setCursiveFontFamily(Ljava/lang/String;)V"/>
+		<method name="setDatabaseEnabled(Z)V" since="5"/>
+		<method name="setDatabasePath(Ljava/lang/String;)V" since="5" deprecated="19"/>
+		<method name="setDefaultFixedFontSize(I)V"/>
+		<method name="setDefaultFontSize(I)V"/>
+		<method name="setDefaultTextEncodingName(Ljava/lang/String;)V"/>
+		<method name="setDefaultZoom(Landroid/webkit/WebSettings$ZoomDensity;)V" since="7" deprecated="19"/>
+		<method name="setDisabledActionModeMenuItems(I)V" since="24"/>
+		<method name="setDisplayZoomControls(Z)V" since="11"/>
+		<method name="setDomStorageEnabled(Z)V" since="7"/>
+		<method name="setEnableSmoothTransition(Z)V" since="11" deprecated="17"/>
+		<method name="setFantasyFontFamily(Ljava/lang/String;)V"/>
+		<method name="setFixedFontFamily(Ljava/lang/String;)V"/>
+		<method name="setForceDark(I)V" since="29"/>
+		<method name="setGeolocationDatabasePath(Ljava/lang/String;)V" since="5" deprecated="24"/>
+		<method name="setGeolocationEnabled(Z)V" since="5"/>
+		<method name="setJavaScriptCanOpenWindowsAutomatically(Z)V"/>
+		<method name="setJavaScriptEnabled(Z)V"/>
+		<method name="setLayoutAlgorithm(Landroid/webkit/WebSettings$LayoutAlgorithm;)V"/>
+		<method name="setLightTouchEnabled(Z)V" deprecated="18"/>
+		<method name="setLoadWithOverviewMode(Z)V" since="7"/>
+		<method name="setLoadsImagesAutomatically(Z)V"/>
+		<method name="setMediaPlaybackRequiresUserGesture(Z)V" since="17"/>
+		<method name="setMinimumFontSize(I)V"/>
+		<method name="setMinimumLogicalFontSize(I)V"/>
+		<method name="setMixedContentMode(I)V" since="21"/>
+		<method name="setNavDump(Z)V" deprecated="15" removed="17"/>
+		<method name="setNeedInitialFocus(Z)V"/>
+		<method name="setOffscreenPreRaster(Z)V" since="23"/>
+		<method name="setPluginState(Landroid/webkit/WebSettings$PluginState;)V" since="8" deprecated="18"/>
+		<method name="setPluginsEnabled(Z)V" deprecated="15" removed="18"/>
+		<method name="setPluginsPath(Ljava/lang/String;)V" deprecated="15" removed="18"/>
+		<method name="setRenderPriority(Landroid/webkit/WebSettings$RenderPriority;)V" deprecated="18"/>
+		<method name="setSafeBrowsingEnabled(Z)V" since="26"/>
+		<method name="setSansSerifFontFamily(Ljava/lang/String;)V"/>
+		<method name="setSaveFormData(Z)V" deprecated="26"/>
+		<method name="setSavePassword(Z)V" deprecated="18"/>
+		<method name="setSerifFontFamily(Ljava/lang/String;)V"/>
+		<method name="setStandardFontFamily(Ljava/lang/String;)V"/>
+		<method name="setSupportMultipleWindows(Z)V"/>
+		<method name="setSupportZoom(Z)V"/>
+		<method name="setTextSize(Landroid/webkit/WebSettings$TextSize;)V" deprecated="15"/>
+		<method name="setTextZoom(I)V" since="14"/>
+		<method name="setUseDoubleTree(Z)V" deprecated="15" removed="17"/>
+		<method name="setUseWebViewBackgroundForOverscrollBackground(Z)V" since="9" deprecated="15" removed="17"/>
+		<method name="setUseWideViewPort(Z)V"/>
+		<method name="setUserAgent(I)V" deprecated="15" removed="17"/>
+		<method name="setUserAgentString(Ljava/lang/String;)V" since="3"/>
+		<method name="supportMultipleWindows()Z"/>
+		<method name="supportZoom()Z"/>
+		<field name="FORCE_DARK_AUTO" since="29"/>
+		<field name="FORCE_DARK_OFF" since="29"/>
+		<field name="FORCE_DARK_ON" since="29"/>
+		<field name="LOAD_CACHE_ELSE_NETWORK"/>
+		<field name="LOAD_CACHE_ONLY"/>
+		<field name="LOAD_DEFAULT"/>
+		<field name="LOAD_NORMAL" deprecated="17"/>
+		<field name="LOAD_NO_CACHE"/>
+		<field name="MENU_ITEM_NONE" since="24"/>
+		<field name="MENU_ITEM_PROCESS_TEXT" since="24"/>
+		<field name="MENU_ITEM_SHARE" since="24"/>
+		<field name="MENU_ITEM_WEB_SEARCH" since="24"/>
+		<field name="MIXED_CONTENT_ALWAYS_ALLOW" since="21"/>
+		<field name="MIXED_CONTENT_COMPATIBILITY_MODE" since="21"/>
+		<field name="MIXED_CONTENT_NEVER_ALLOW" since="21"/>
+	</class>
+	<class name="android/webkit/WebSettings$LayoutAlgorithm" since="1" deprecated="12">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
+		<method name="values()[Landroid/webkit/WebSettings$LayoutAlgorithm;"/>
+		<field name="NARROW_COLUMNS" deprecated="29"/>
+		<field name="NORMAL"/>
+		<field name="SINGLE_COLUMN" deprecated="29"/>
+		<field name="TEXT_AUTOSIZING" since="19"/>
+	</class>
+	<class name="android/webkit/WebSettings$PluginState" since="8">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$PluginState;"/>
+		<method name="values()[Landroid/webkit/WebSettings$PluginState;"/>
+		<field name="OFF"/>
+		<field name="ON"/>
+		<field name="ON_DEMAND"/>
+	</class>
+	<class name="android/webkit/WebSettings$RenderPriority" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$RenderPriority;"/>
+		<method name="values()[Landroid/webkit/WebSettings$RenderPriority;"/>
+		<field name="HIGH"/>
+		<field name="LOW"/>
+		<field name="NORMAL"/>
+	</class>
+	<class name="android/webkit/WebSettings$TextSize" since="1" deprecated="15">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$TextSize;"/>
+		<method name="values()[Landroid/webkit/WebSettings$TextSize;"/>
+		<field name="LARGER" deprecated="29"/>
+		<field name="LARGEST" deprecated="29"/>
+		<field name="NORMAL" deprecated="29"/>
+		<field name="SMALLER" deprecated="29"/>
+		<field name="SMALLEST" deprecated="29"/>
+	</class>
+	<class name="android/webkit/WebSettings$ZoomDensity" since="7">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/webkit/WebSettings$ZoomDensity;"/>
+		<method name="values()[Landroid/webkit/WebSettings$ZoomDensity;"/>
+		<field name="CLOSE"/>
+		<field name="FAR"/>
+		<field name="MEDIUM"/>
+	</class>
+	<class name="android/webkit/WebStorage" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="16"/>
+		<method name="deleteAllData()V" since="7"/>
+		<method name="deleteOrigin(Ljava/lang/String;)V" since="7"/>
+		<method name="getInstance()Landroid/webkit/WebStorage;" since="7"/>
+		<method name="getOrigins(Landroid/webkit/ValueCallback;)V" since="7"/>
+		<method name="getQuotaForOrigin(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7"/>
+		<method name="getUsageForOrigin(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="7"/>
+		<method name="setQuotaForOrigin(Ljava/lang/String;J)V" since="7" deprecated="18"/>
+	</class>
+	<class name="android/webkit/WebStorage$Origin" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="getOrigin()Ljava/lang/String;"/>
+		<method name="getQuota()J"/>
+		<method name="getUsage()J"/>
+	</class>
+	<class name="android/webkit/WebStorage$QuotaUpdater" since="5" deprecated="19">
+		<extends name="java/lang/Object"/>
+		<method name="updateQuota(J)V" deprecated="29"/>
+	</class>
+	<class name="android/webkit/WebView" since="1">
+		<extends name="android/widget/AbsoluteLayout"/>
+		<implements name="android/view/ViewGroup$OnHierarchyChangeListener"/>
+		<implements name="android/view/ViewTreeObserver$OnGlobalFocusChangeListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;IZ)V" since="11" deprecated="17"/>
+		<method name="addJavascriptInterface(Ljava/lang/Object;Ljava/lang/String;)V"/>
+		<method name="canGoBack()Z"/>
+		<method name="canGoBackOrForward(I)Z"/>
+		<method name="canGoForward()Z"/>
+		<method name="canZoomIn()Z" since="11" deprecated="17"/>
+		<method name="canZoomOut()Z" since="11" deprecated="17"/>
+		<method name="capturePicture()Landroid/graphics/Picture;" deprecated="19"/>
+		<method name="clearCache(Z)V"/>
+		<method name="clearClientCertPreferences(Ljava/lang/Runnable;)V" since="21"/>
+		<method name="clearFormData()V"/>
+		<method name="clearHistory()V"/>
+		<method name="clearMatches()V" since="3"/>
+		<method name="clearSslPreferences()V"/>
+		<method name="clearView()V" deprecated="18"/>
+		<method name="copyBackForwardList()Landroid/webkit/WebBackForwardList;"/>
+		<method name="createPrintDocumentAdapter()Landroid/print/PrintDocumentAdapter;" since="19" deprecated="21"/>
+		<method name="createPrintDocumentAdapter(Ljava/lang/String;)Landroid/print/PrintDocumentAdapter;" since="21"/>
+		<method name="createWebMessageChannel()[Landroid/webkit/WebMessagePort;" since="23"/>
+		<method name="debugDump()V" deprecated="15" removed="17"/>
+		<method name="destroy()V"/>
+		<method name="disablePlatformNotifications()V" deprecated="15" removed="17"/>
+		<method name="disableWebView()V" since="28"/>
+		<method name="documentHasImages(Landroid/os/Message;)V"/>
+		<method name="emulateShiftHeld()V" since="8" deprecated="15" removed="17"/>
+		<method name="enablePlatformNotifications()V" deprecated="15" removed="17"/>
+		<method name="enableSlowWholeDocumentDraw()V" since="21"/>
+		<method name="evaluateJavascript(Ljava/lang/String;Landroid/webkit/ValueCallback;)V" since="19"/>
+		<method name="findAddress(Ljava/lang/String;)Ljava/lang/String;" deprecated="28"/>
+		<method name="findAll(Ljava/lang/String;)I" since="3" deprecated="16"/>
+		<method name="findAllAsync(Ljava/lang/String;)V" since="16"/>
+		<method name="findNext(Z)V" since="3"/>
+		<method name="flingScroll(II)V"/>
+		<method name="freeMemory()V" since="7" deprecated="19"/>
+		<method name="getCertificate()Landroid/net/http/SslCertificate;"/>
+		<method name="getContentHeight()I"/>
+		<method name="getCurrentWebViewPackage()Landroid/content/pm/PackageInfo;" since="26"/>
+		<method name="getFavicon()Landroid/graphics/Bitmap;"/>
+		<method name="getHitTestResult()Landroid/webkit/WebView$HitTestResult;"/>
+		<method name="getHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" deprecated="26"/>
+		<method name="getOriginalUrl()Ljava/lang/String;" since="3"/>
+		<method name="getPluginList()Landroid/webkit/PluginList;" removed="12"/>
+		<method name="getProgress()I"/>
+		<method name="getRendererPriorityWaivedWhenNotVisible()Z" since="26"/>
+		<method name="getRendererRequestedPriority()I" since="26"/>
+		<method name="getSafeBrowsingPrivacyPolicyUrl()Landroid/net/Uri;" since="27"/>
+		<method name="getScale()F" deprecated="17"/>
+		<method name="getSettings()Landroid/webkit/WebSettings;"/>
+		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" since="27"/>
+		<method name="getTitle()Ljava/lang/String;"/>
+		<method name="getUrl()Ljava/lang/String;"/>
+		<method name="getVisibleTitleHeight()I" since="11" deprecated="15" removed="17"/>
+		<method name="getWebChromeClient()Landroid/webkit/WebChromeClient;" since="26"/>
+		<method name="getWebViewClassLoader()Ljava/lang/ClassLoader;" since="28"/>
+		<method name="getWebViewClient()Landroid/webkit/WebViewClient;" since="26"/>
+		<method name="getWebViewLooper()Landroid/os/Looper;" since="28"/>
+		<method name="getWebViewRenderProcess()Landroid/webkit/WebViewRenderProcess;" since="29"/>
+		<method name="getWebViewRenderProcessClient()Landroid/webkit/WebViewRenderProcessClient;" since="29"/>
+		<method name="getZoomControls()Landroid/view/View;" deprecated="15" removed="16"/>
+		<method name="goBack()V"/>
+		<method name="goBackOrForward(I)V"/>
+		<method name="goForward()V"/>
+		<method name="invokeZoomPicker()V"/>
+		<method name="isPrivateBrowsingEnabled()Z" since="11"/>
+		<method name="loadData(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="loadUrl(Ljava/lang/String;)V"/>
+		<method name="loadUrl(Ljava/lang/String;Ljava/util/Map;)V" since="8"/>
+		<method name="onPause()V" since="11"/>
+		<method name="onResume()V" since="11"/>
+		<method name="overlayHorizontalScrollbar()Z" deprecated="23"/>
+		<method name="overlayVerticalScrollbar()Z" deprecated="23"/>
+		<method name="pageDown(Z)Z"/>
+		<method name="pageUp(Z)Z"/>
+		<method name="pauseTimers()V"/>
+		<method name="postUrl(Ljava/lang/String;[B)V" since="5"/>
+		<method name="postVisualStateCallback(JLandroid/webkit/WebView$VisualStateCallback;)V" since="23"/>
+		<method name="postWebMessage(Landroid/webkit/WebMessage;Landroid/net/Uri;)V" since="23"/>
+		<method name="refreshPlugins(Z)V" removed="12"/>
+		<method name="reload()V"/>
+		<method name="removeJavascriptInterface(Ljava/lang/String;)V" since="11"/>
+		<method name="requestFocusNodeHref(Landroid/os/Message;)V"/>
+		<method name="requestImageRef(Landroid/os/Message;)V"/>
+		<method name="restorePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="15" removed="17"/>
+		<method name="restoreState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;"/>
+		<method name="resumeTimers()V"/>
+		<method name="savePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="18"/>
+		<method name="savePicture(Landroid/os/Bundle;Ljava/io/File;)Z" since="3" deprecated="15" removed="17"/>
+		<method name="saveState(Landroid/os/Bundle;)Landroid/webkit/WebBackForwardList;"/>
+		<method name="saveWebArchive(Ljava/lang/String;)V" since="11"/>
+		<method name="saveWebArchive(Ljava/lang/String;ZLandroid/webkit/ValueCallback;)V" since="11"/>
+		<method name="setCertificate(Landroid/net/http/SslCertificate;)V" deprecated="17"/>
+		<method name="setDataDirectorySuffix(Ljava/lang/String;)V" since="28"/>
+		<method name="setDownloadListener(Landroid/webkit/DownloadListener;)V"/>
+		<method name="setFindListener(Landroid/webkit/WebView$FindListener;)V" since="16"/>
+		<method name="setHorizontalScrollbarOverlay(Z)V" deprecated="23"/>
+		<method name="setHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="26"/>
+		<method name="setInitialScale(I)V"/>
+		<method name="setMapTrackballToArrowKeys(Z)V" deprecated="17"/>
+		<method name="setNetworkAvailable(Z)V" since="3"/>
+		<method name="setPictureListener(Landroid/webkit/WebView$PictureListener;)V" deprecated="15"/>
+		<method name="setRendererPriorityPolicy(IZ)V" since="26"/>
+		<method name="setSafeBrowsingWhitelist(Ljava/util/List;Landroid/webkit/ValueCallback;)V" since="27"/>
+		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="27"/>
+		<method name="setVerticalScrollbarOverlay(Z)V" deprecated="23"/>
+		<method name="setWebChromeClient(Landroid/webkit/WebChromeClient;)V"/>
+		<method name="setWebContentsDebuggingEnabled(Z)V" since="19"/>
+		<method name="setWebViewClient(Landroid/webkit/WebViewClient;)V"/>
+		<method name="setWebViewRenderProcessClient(Landroid/webkit/WebViewRenderProcessClient;)V" since="29"/>
+		<method name="setWebViewRenderProcessClient(Ljava/util/concurrent/Executor;Landroid/webkit/WebViewRenderProcessClient;)V" since="29"/>
+		<method name="showFindDialog(Ljava/lang/String;Z)Z" since="11" deprecated="18"/>
+		<method name="startSafeBrowsing(Landroid/content/Context;Landroid/webkit/ValueCallback;)V" since="27"/>
+		<method name="stopLoading()V"/>
+		<method name="zoomBy(F)V" since="21"/>
+		<method name="zoomIn()Z"/>
+		<method name="zoomOut()Z"/>
+		<field name="RENDERER_PRIORITY_BOUND" since="26"/>
+		<field name="RENDERER_PRIORITY_IMPORTANT" since="26"/>
+		<field name="RENDERER_PRIORITY_WAIVED" since="26"/>
+		<field name="SCHEME_GEO"/>
+		<field name="SCHEME_MAILTO"/>
+		<field name="SCHEME_TEL"/>
+	</class>
+	<class name="android/webkit/WebView$FindListener" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="onFindResultReceived(IIZ)V"/>
+	</class>
+	<class name="android/webkit/WebView$HitTestResult" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getExtra()Ljava/lang/String;"/>
+		<method name="getType()I"/>
+		<field name="ANCHOR_TYPE" deprecated="15"/>
+		<field name="EDIT_TEXT_TYPE"/>
+		<field name="EMAIL_TYPE"/>
+		<field name="GEO_TYPE"/>
+		<field name="IMAGE_ANCHOR_TYPE" deprecated="15"/>
+		<field name="IMAGE_TYPE"/>
+		<field name="PHONE_TYPE"/>
+		<field name="SRC_ANCHOR_TYPE"/>
+		<field name="SRC_IMAGE_ANCHOR_TYPE"/>
+		<field name="UNKNOWN_TYPE"/>
+	</class>
+	<class name="android/webkit/WebView$PictureListener" since="1" deprecated="12">
+		<extends name="java/lang/Object"/>
+		<method name="onNewPicture(Landroid/webkit/WebView;Landroid/graphics/Picture;)V" deprecated="15"/>
+	</class>
+	<class name="android/webkit/WebView$VisualStateCallback" since="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onComplete(J)V"/>
+	</class>
+	<class name="android/webkit/WebView$WebViewTransport" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/webkit/WebView;)V"/>
+		<method name="getWebView()Landroid/webkit/WebView;"/>
+		<method name="setWebView(Landroid/webkit/WebView;)V"/>
+	</class>
+	<class name="android/webkit/WebViewClient" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="doUpdateVisitedHistory(Landroid/webkit/WebView;Ljava/lang/String;Z)V"/>
+		<method name="onFormResubmission(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V"/>
+		<method name="onLoadResource(Landroid/webkit/WebView;Ljava/lang/String;)V"/>
+		<method name="onPageCommitVisible(Landroid/webkit/WebView;Ljava/lang/String;)V" since="23"/>
+		<method name="onPageFinished(Landroid/webkit/WebView;Ljava/lang/String;)V"/>
+		<method name="onPageStarted(Landroid/webkit/WebView;Ljava/lang/String;Landroid/graphics/Bitmap;)V"/>
+		<method name="onReceivedClientCertRequest(Landroid/webkit/WebView;Landroid/webkit/ClientCertRequest;)V" since="21"/>
+		<method name="onReceivedError(Landroid/webkit/WebView;ILjava/lang/String;Ljava/lang/String;)V" deprecated="23"/>
+		<method name="onReceivedError(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceError;)V" since="23"/>
+		<method name="onReceivedHttpAuthRequest(Landroid/webkit/WebView;Landroid/webkit/HttpAuthHandler;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="onReceivedHttpError(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceResponse;)V" since="23"/>
+		<method name="onReceivedLoginRequest(Landroid/webkit/WebView;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="12"/>
+		<method name="onReceivedSslError(Landroid/webkit/WebView;Landroid/webkit/SslErrorHandler;Landroid/net/http/SslError;)V" since="8"/>
+		<method name="onRenderProcessGone(Landroid/webkit/WebView;Landroid/webkit/RenderProcessGoneDetail;)Z" since="26"/>
+		<method name="onSafeBrowsingHit(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;ILandroid/webkit/SafeBrowsingResponse;)V" since="27"/>
+		<method name="onScaleChanged(Landroid/webkit/WebView;FF)V"/>
+		<method name="onTooManyRedirects(Landroid/webkit/WebView;Landroid/os/Message;Landroid/os/Message;)V" deprecated="15"/>
+		<method name="onUnhandledInputEvent(Landroid/webkit/WebView;Landroid/view/InputEvent;)V" since="21" removed="24"/>
+		<method name="onUnhandledKeyEvent(Landroid/webkit/WebView;Landroid/view/KeyEvent;)V" deprecated="21"/>
+		<method name="shouldInterceptRequest(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Landroid/webkit/WebResourceResponse;" since="21"/>
+		<method name="shouldInterceptRequest(Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;" since="11" deprecated="21"/>
+		<method name="shouldOverrideKeyEvent(Landroid/webkit/WebView;Landroid/view/KeyEvent;)Z"/>
+		<method name="shouldOverrideUrlLoading(Landroid/webkit/WebView;Landroid/webkit/WebResourceRequest;)Z" since="24"/>
+		<method name="shouldOverrideUrlLoading(Landroid/webkit/WebView;Ljava/lang/String;)Z" deprecated="24"/>
+		<field name="ERROR_AUTHENTICATION" since="5"/>
+		<field name="ERROR_BAD_URL" since="5"/>
+		<field name="ERROR_CONNECT" since="5"/>
+		<field name="ERROR_FAILED_SSL_HANDSHAKE" since="5"/>
+		<field name="ERROR_FILE" since="5"/>
+		<field name="ERROR_FILE_NOT_FOUND" since="5"/>
+		<field name="ERROR_HOST_LOOKUP" since="5"/>
+		<field name="ERROR_IO" since="5"/>
+		<field name="ERROR_PROXY_AUTHENTICATION" since="5"/>
+		<field name="ERROR_REDIRECT_LOOP" since="5"/>
+		<field name="ERROR_TIMEOUT" since="5"/>
+		<field name="ERROR_TOO_MANY_REQUESTS" since="5"/>
+		<field name="ERROR_UNKNOWN" since="5"/>
+		<field name="ERROR_UNSAFE_RESOURCE" since="26"/>
+		<field name="ERROR_UNSUPPORTED_AUTH_SCHEME" since="5"/>
+		<field name="ERROR_UNSUPPORTED_SCHEME" since="5"/>
+		<field name="SAFE_BROWSING_THREAT_BILLING" since="29"/>
+		<field name="SAFE_BROWSING_THREAT_MALWARE" since="27"/>
+		<field name="SAFE_BROWSING_THREAT_PHISHING" since="27"/>
+		<field name="SAFE_BROWSING_THREAT_UNKNOWN" since="27"/>
+		<field name="SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE" since="27"/>
+	</class>
+	<class name="android/webkit/WebViewDatabase" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" since="22" deprecated="29"/>
+		<method name="clearFormData()V" deprecated="26"/>
+		<method name="clearHttpAuthUsernamePassword()V"/>
+		<method name="clearUsernamePassword()V" deprecated="18"/>
+		<method name="getHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;" since="26"/>
+		<method name="getInstance(Landroid/content/Context;)Landroid/webkit/WebViewDatabase;"/>
+		<method name="hasFormData()Z" deprecated="26"/>
+		<method name="hasHttpAuthUsernamePassword()Z"/>
+		<method name="hasUsernamePassword()Z" deprecated="18"/>
+		<method name="setHttpAuthUsernamePassword(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="26"/>
+		<field name="LOGTAG" removed="17"/>
+	</class>
+	<class name="android/webkit/WebViewFragment" since="11" deprecated="28">
+		<extends name="android/app/Fragment"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="getWebView()Landroid/webkit/WebView;" deprecated="29"/>
+	</class>
+	<class name="android/webkit/WebViewRenderProcess" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="terminate()Z"/>
+	</class>
+	<class name="android/webkit/WebViewRenderProcessClient" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onRenderProcessResponsive(Landroid/webkit/WebView;Landroid/webkit/WebViewRenderProcess;)V"/>
+		<method name="onRenderProcessUnresponsive(Landroid/webkit/WebView;Landroid/webkit/WebViewRenderProcess;)V"/>
+	</class>
+	<class name="android/widget/AbsListView" since="1">
+		<extends name="android/widget/AdapterView"/>
+		<implements name="android/text/TextWatcher"/>
+		<implements name="android/view/ViewTreeObserver$OnGlobalLayoutListener"/>
+		<implements name="android/view/ViewTreeObserver$OnTouchModeChangeListener"/>
+		<implements name="android/widget/Filter$FilterListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="canScrollList(I)Z" since="19"/>
+		<method name="clearChoices()V" since="11"/>
+		<method name="clearTextFilter()V"/>
+		<method name="deferNotifyDataSetChanged()V" since="14"/>
+		<method name="fling(I)V" since="21"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/AbsListView$LayoutParams;"/>
+		<method name="getBottomEdgeEffectColor()I" since="29"/>
+		<method name="getCacheColorHint()I"/>
+		<method name="getCheckedItemCount()I" since="11"/>
+		<method name="getCheckedItemIds()[J" since="11"/>
+		<method name="getCheckedItemPosition()I" since="11"/>
+		<method name="getCheckedItemPositions()Landroid/util/SparseBooleanArray;" since="11"/>
+		<method name="getChoiceMode()I" since="11"/>
+		<method name="getListPaddingBottom()I"/>
+		<method name="getListPaddingLeft()I"/>
+		<method name="getListPaddingRight()I"/>
+		<method name="getListPaddingTop()I"/>
+		<method name="getSelector()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getTextFilter()Ljava/lang/CharSequence;" since="3"/>
+		<method name="getTopEdgeEffectColor()I" since="29"/>
+		<method name="getTranscriptMode()I"/>
+		<method name="handleDataChanged()V"/>
+		<method name="hasTextFilter()Z"/>
+		<method name="invalidateViews()V"/>
+		<method name="isDrawSelectorOnTop()Z" since="29"/>
+		<method name="isFastScrollAlwaysVisible()Z" since="11"/>
+		<method name="isFastScrollEnabled()Z" since="3"/>
+		<method name="isInFilterMode()Z"/>
+		<method name="isItemChecked(I)Z" since="11"/>
+		<method name="isScrollingCacheEnabled()Z"/>
+		<method name="isSmoothScrollbarEnabled()Z" since="3"/>
+		<method name="isStackFromBottom()Z"/>
+		<method name="isTextFilterEnabled()Z"/>
+		<method name="layoutChildren()V"/>
+		<method name="onInitializeAccessibilityNodeInfoForItem(Landroid/view/View;ILandroid/view/accessibility/AccessibilityNodeInfo;)V" since="19"/>
+		<method name="onRemoteAdapterConnected()Z" since="11"/>
+		<method name="onRemoteAdapterDisconnected()V" since="11"/>
+		<method name="pointToPosition(II)I"/>
+		<method name="pointToRowId(II)J"/>
+		<method name="reclaimViews(Ljava/util/List;)V"/>
+		<method name="scrollListBy(I)V" since="19"/>
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V" since="11"/>
+		<method name="setBottomEdgeEffectColor(I)V" since="29"/>
+		<method name="setCacheColorHint(I)V"/>
+		<method name="setChoiceMode(I)V" since="11"/>
+		<method name="setDrawSelectorOnTop(Z)V"/>
+		<method name="setEdgeEffectColor(I)V" since="29"/>
+		<method name="setFastScrollAlwaysVisible(Z)V" since="11"/>
+		<method name="setFastScrollEnabled(Z)V" since="3"/>
+		<method name="setFastScrollStyle(I)V" since="21"/>
+		<method name="setFilterText(Ljava/lang/String;)V"/>
+		<method name="setFriction(F)V" since="11"/>
+		<method name="setItemChecked(IZ)V" since="11"/>
+		<method name="setMultiChoiceModeListener(Landroid/widget/AbsListView$MultiChoiceModeListener;)V" since="11"/>
+		<method name="setOnScrollListener(Landroid/widget/AbsListView$OnScrollListener;)V"/>
+		<method name="setRecyclerListener(Landroid/widget/AbsListView$RecyclerListener;)V"/>
+		<method name="setRemoteViewsAdapter(Landroid/content/Intent;)V" since="11"/>
+		<method name="setScrollIndicators(Landroid/view/View;Landroid/view/View;)V"/>
+		<method name="setScrollingCacheEnabled(Z)V"/>
+		<method name="setSelectionFromTop(II)V" since="21"/>
+		<method name="setSelector(I)V"/>
+		<method name="setSelector(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setSmoothScrollbarEnabled(Z)V" since="3"/>
+		<method name="setStackFromBottom(Z)V"/>
+		<method name="setTextFilterEnabled(Z)V"/>
+		<method name="setTopEdgeEffectColor(I)V" since="29"/>
+		<method name="setTranscriptMode(I)V"/>
+		<method name="setVelocityScale(F)V" since="11"/>
+		<method name="smoothScrollBy(II)V" since="8"/>
+		<method name="smoothScrollToPosition(I)V" since="8"/>
+		<method name="smoothScrollToPosition(II)V" since="8"/>
+		<method name="smoothScrollToPositionFromTop(II)V" since="11"/>
+		<method name="smoothScrollToPositionFromTop(III)V" since="11"/>
+		<field name="CHOICE_MODE_MULTIPLE" since="11"/>
+		<field name="CHOICE_MODE_MULTIPLE_MODAL" since="11"/>
+		<field name="CHOICE_MODE_NONE" since="11"/>
+		<field name="CHOICE_MODE_SINGLE" since="11"/>
+		<field name="TRANSCRIPT_MODE_ALWAYS_SCROLL"/>
+		<field name="TRANSCRIPT_MODE_DISABLED"/>
+		<field name="TRANSCRIPT_MODE_NORMAL"/>
+	</class>
+	<class name="android/widget/AbsListView$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$LayoutParams"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+	</class>
+	<class name="android/widget/AbsListView$MultiChoiceModeListener" since="11">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/ActionMode$Callback"/>
+		<method name="onItemCheckedStateChanged(Landroid/view/ActionMode;IJZ)V"/>
+	</class>
+	<class name="android/widget/AbsListView$OnScrollListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onScroll(Landroid/widget/AbsListView;III)V"/>
+		<method name="onScrollStateChanged(Landroid/widget/AbsListView;I)V"/>
+		<field name="SCROLL_STATE_FLING"/>
+		<field name="SCROLL_STATE_IDLE"/>
+		<field name="SCROLL_STATE_TOUCH_SCROLL"/>
+	</class>
+	<class name="android/widget/AbsListView$RecyclerListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onMovedToScrapHeap(Landroid/view/View;)V"/>
+	</class>
+	<class name="android/widget/AbsListView$SelectionBoundsAdjuster" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="adjustListItemSelectionBounds(Landroid/graphics/Rect;)V"/>
+	</class>
+	<class name="android/widget/AbsSeekBar" since="1">
+		<extends name="android/widget/ProgressBar"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getKeyProgressIncrement()I" since="3"/>
+		<method name="getSplitTrack()Z" since="21"/>
+		<method name="getThumb()Landroid/graphics/drawable/Drawable;" since="16"/>
+		<method name="getThumbOffset()I"/>
+		<method name="getThumbTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="getTickMark()Landroid/graphics/drawable/Drawable;" since="24"/>
+		<method name="getTickMarkTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getTickMarkTintList()Landroid/content/res/ColorStateList;" since="24"/>
+		<method name="getTickMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="24"/>
+		<method name="setKeyProgressIncrement(I)V" since="3"/>
+		<method name="setSplitTrack(Z)V" since="21"/>
+		<method name="setThumb(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setThumbOffset(I)V"/>
+		<method name="setThumbTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setTickMark(Landroid/graphics/drawable/Drawable;)V" since="24"/>
+		<method name="setTickMarkTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setTickMarkTintList(Landroid/content/res/ColorStateList;)V" since="24"/>
+		<method name="setTickMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="24"/>
+	</class>
+	<class name="android/widget/AbsSpinner" since="1">
+		<extends name="android/widget/AdapterView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getAdapter()Landroid/widget/SpinnerAdapter;"/>
+		<method name="pointToPosition(II)I"/>
+		<method name="setAdapter(Landroid/widget/SpinnerAdapter;)V"/>
+		<method name="setSelection(IZ)V"/>
+	</class>
+	<class name="android/widget/AbsoluteLayout" since="1" deprecated="3">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+	</class>
+	<class name="android/widget/AbsoluteLayout$LayoutParams" since="1" deprecated="29">
+		<extends name="android/view/ViewGroup$LayoutParams"/>
+		<method name="&lt;init>(IIII)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V" deprecated="29"/>
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<field name="x" deprecated="29"/>
+		<field name="y" deprecated="29"/>
+	</class>
+	<class name="android/widget/ActionMenuView" since="21">
+		<extends name="android/widget/LinearLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="dismissPopupMenus()V"/>
+		<method name="generateDefaultLayoutParams()Landroid/widget/ActionMenuView$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/ActionMenuView$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/ActionMenuView$LayoutParams;"/>
+		<method name="getMenu()Landroid/view/Menu;"/>
+		<method name="getOverflowIcon()Landroid/graphics/drawable/Drawable;" since="23"/>
+		<method name="getPopupTheme()I"/>
+		<method name="hideOverflowMenu()Z"/>
+		<method name="isOverflowMenuShowing()Z"/>
+		<method name="setOnMenuItemClickListener(Landroid/widget/ActionMenuView$OnMenuItemClickListener;)V"/>
+		<method name="setOverflowIcon(Landroid/graphics/drawable/Drawable;)V" since="23"/>
+		<method name="setPopupTheme(I)V"/>
+		<method name="showOverflowMenu()Z"/>
+	</class>
+	<class name="android/widget/ActionMenuView$LayoutParams" since="21">
+		<extends name="android/widget/LinearLayout$LayoutParams"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/widget/ActionMenuView$LayoutParams;)V"/>
+	</class>
+	<class name="android/widget/ActionMenuView$OnMenuItemClickListener" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
+	</class>
+	<class name="android/widget/Adapter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getAutofillOptions()[Ljava/lang/CharSequence;" since="26"/>
+		<method name="getCount()I"/>
+		<method name="getItem(I)Ljava/lang/Object;"/>
+		<method name="getItemId(I)J"/>
+		<method name="getItemViewType(I)I"/>
+		<method name="getView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="getViewTypeCount()I"/>
+		<method name="hasStableIds()Z"/>
+		<method name="isEmpty()Z"/>
+		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V"/>
+		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V"/>
+		<field name="IGNORE_ITEM_VIEW_TYPE"/>
+		<field name="NO_SELECTION"/>
+	</class>
+	<class name="android/widget/AdapterView" since="1">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getAdapter()Landroid/widget/Adapter;"/>
+		<method name="getCount()I"/>
+		<method name="getEmptyView()Landroid/view/View;"/>
+		<method name="getFirstVisiblePosition()I"/>
+		<method name="getItemAtPosition(I)Ljava/lang/Object;"/>
+		<method name="getItemIdAtPosition(I)J"/>
+		<method name="getLastVisiblePosition()I"/>
+		<method name="getOnItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;"/>
+		<method name="getOnItemLongClickListener()Landroid/widget/AdapterView$OnItemLongClickListener;"/>
+		<method name="getOnItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;"/>
+		<method name="getPositionForView(Landroid/view/View;)I"/>
+		<method name="getSelectedItem()Ljava/lang/Object;"/>
+		<method name="getSelectedItemId()J"/>
+		<method name="getSelectedItemPosition()I"/>
+		<method name="getSelectedView()Landroid/view/View;"/>
+		<method name="performItemClick(Landroid/view/View;IJ)Z"/>
+		<method name="setAdapter(Landroid/widget/Adapter;)V"/>
+		<method name="setEmptyView(Landroid/view/View;)V"/>
+		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V"/>
+		<method name="setOnItemLongClickListener(Landroid/widget/AdapterView$OnItemLongClickListener;)V"/>
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V"/>
+		<method name="setSelection(I)V"/>
+		<field name="INVALID_POSITION"/>
+		<field name="INVALID_ROW_ID"/>
+		<field name="ITEM_VIEW_TYPE_HEADER_OR_FOOTER"/>
+		<field name="ITEM_VIEW_TYPE_IGNORE"/>
+	</class>
+	<class name="android/widget/AdapterView$AdapterContextMenuInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/ContextMenu$ContextMenuInfo"/>
+		<method name="&lt;init>(Landroid/view/View;IJ)V"/>
+		<field name="id"/>
+		<field name="position"/>
+		<field name="targetView"/>
+	</class>
+	<class name="android/widget/AdapterView$OnItemClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V"/>
+	</class>
+	<class name="android/widget/AdapterView$OnItemLongClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onItemLongClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)Z"/>
+	</class>
+	<class name="android/widget/AdapterView$OnItemSelectedListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onItemSelected(Landroid/widget/AdapterView;Landroid/view/View;IJ)V"/>
+		<method name="onNothingSelected(Landroid/widget/AdapterView;)V"/>
+	</class>
+	<class name="android/widget/AdapterViewAnimator" since="11">
+		<extends name="android/widget/AdapterView"/>
+		<implements name="android/widget/Advanceable" since="16"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="14"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="advance()V"/>
+		<method name="deferNotifyDataSetChanged()V" since="14"/>
+		<method name="fyiWillBeAdvancedByHostKThx()V"/>
+		<method name="getCurrentView()Landroid/view/View;"/>
+		<method name="getDisplayedChild()I"/>
+		<method name="getInAnimation()Landroid/animation/ObjectAnimator;"/>
+		<method name="getOutAnimation()Landroid/animation/ObjectAnimator;"/>
+		<method name="onRemoteAdapterConnected()Z"/>
+		<method name="onRemoteAdapterDisconnected()V"/>
+		<method name="setAnimateFirstView(Z)V"/>
+		<method name="setDisplayedChild(I)V"/>
+		<method name="setInAnimation(Landroid/animation/ObjectAnimator;)V"/>
+		<method name="setInAnimation(Landroid/content/Context;I)V"/>
+		<method name="setOutAnimation(Landroid/animation/ObjectAnimator;)V"/>
+		<method name="setOutAnimation(Landroid/content/Context;I)V"/>
+		<method name="setRemoteViewsAdapter(Landroid/content/Intent;)V"/>
+		<method name="showNext()V"/>
+		<method name="showPrevious()V"/>
+	</class>
+	<class name="android/widget/AdapterViewFlipper" since="11">
+		<extends name="android/widget/AdapterViewAnimator"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getFlipInterval()I" since="16"/>
+		<method name="isAutoStart()Z"/>
+		<method name="isFlipping()Z"/>
+		<method name="setAutoStart(Z)V"/>
+		<method name="setFlipInterval(I)V"/>
+		<method name="startFlipping()V"/>
+		<method name="stopFlipping()V"/>
+	</class>
+	<class name="android/widget/Advanceable" since="16">
+		<extends name="java/lang/Object"/>
+		<method name="advance()V"/>
+		<method name="fyiWillBeAdvancedByHostKThx()V"/>
+	</class>
+	<class name="android/widget/AlphabetIndexer" since="3">
+		<extends name="android/database/DataSetObserver"/>
+		<implements name="android/widget/SectionIndexer"/>
+		<method name="&lt;init>(Landroid/database/Cursor;ILjava/lang/CharSequence;)V"/>
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="setCursor(Landroid/database/Cursor;)V"/>
+		<field name="mAlphabet"/>
+		<field name="mColumnIndex"/>
+		<field name="mDataCursor"/>
+	</class>
+	<class name="android/widget/AnalogClock" since="1" deprecated="23">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getDialTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31"/>
+		<method name="getDialTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31"/>
+		<method name="getHourHandTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31"/>
+		<method name="getHourHandTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31"/>
+		<method name="getMinuteHandTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31"/>
+		<method name="getMinuteHandTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31"/>
+		<method name="getSecondHandTintBlendMode()Landroid/graphics/BlendMode;" since="31" deprecated="31"/>
+		<method name="getSecondHandTintList()Landroid/content/res/ColorStateList;" since="31" deprecated="31"/>
+		<method name="getTimeZone()Ljava/lang/String;" since="31" deprecated="31"/>
+		<method name="setDial(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31"/>
+		<method name="setDialTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31"/>
+		<method name="setDialTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31"/>
+		<method name="setHourHand(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31"/>
+		<method name="setHourHandTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31"/>
+		<method name="setHourHandTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31"/>
+		<method name="setMinuteHand(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31"/>
+		<method name="setMinuteHandTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31"/>
+		<method name="setMinuteHandTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31"/>
+		<method name="setSecondHand(Landroid/graphics/drawable/Icon;)V" since="31" deprecated="31"/>
+		<method name="setSecondHandTintBlendMode(Landroid/graphics/BlendMode;)V" since="31" deprecated="31"/>
+		<method name="setSecondHandTintList(Landroid/content/res/ColorStateList;)V" since="31" deprecated="31"/>
+		<method name="setTimeZone(Ljava/lang/String;)V" since="31" deprecated="31"/>
+	</class>
+	<class name="android/widget/ArrayAdapter" since="1">
+		<extends name="android/widget/BaseAdapter"/>
+		<implements name="android/widget/Filterable"/>
+		<implements name="android/widget/ThemedSpinnerAdapter" since="23"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;II)V"/>
+		<method name="&lt;init>(Landroid/content/Context;IILjava/util/List;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;II[Ljava/lang/Object;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;ILjava/util/List;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;I[Ljava/lang/Object;)V"/>
+		<method name="add(Ljava/lang/Object;)V"/>
+		<method name="addAll(Ljava/util/Collection;)V" since="11"/>
+		<method name="addAll([Ljava/lang/Object;)V" since="11"/>
+		<method name="clear()V"/>
+		<method name="createFromResource(Landroid/content/Context;II)Landroid/widget/ArrayAdapter;"/>
+		<method name="getContext()Landroid/content/Context;"/>
+		<method name="getPosition(Ljava/lang/Object;)I"/>
+		<method name="insert(Ljava/lang/Object;I)V"/>
+		<method name="remove(Ljava/lang/Object;)V"/>
+		<method name="setDropDownViewResource(I)V"/>
+		<method name="setNotifyOnChange(Z)V"/>
+		<method name="sort(Ljava/util/Comparator;)V" since="3"/>
+	</class>
+	<class name="android/widget/AutoCompleteTextView" since="1">
+		<extends name="android/widget/EditText"/>
+		<implements name="android/widget/Filter$FilterListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;IILandroid/content/res/Resources$Theme;)V" since="24"/>
+		<method name="clearListSelection()V" since="3"/>
+		<method name="convertSelectionToString(Ljava/lang/Object;)Ljava/lang/CharSequence;"/>
+		<method name="dismissDropDown()V"/>
+		<method name="enoughToFilter()Z"/>
+		<method name="getAdapter()Landroid/widget/ListAdapter;"/>
+		<method name="getCompletionHint()Ljava/lang/CharSequence;" since="16"/>
+		<method name="getDropDownAnchor()I" since="3"/>
+		<method name="getDropDownBackground()Landroid/graphics/drawable/Drawable;" since="5"/>
+		<method name="getDropDownHeight()I" since="4"/>
+		<method name="getDropDownHorizontalOffset()I" since="5"/>
+		<method name="getDropDownVerticalOffset()I" since="5"/>
+		<method name="getDropDownWidth()I" since="3"/>
+		<method name="getFilter()Landroid/widget/Filter;"/>
+		<method name="getInputMethodMode()I" since="29"/>
+		<method name="getItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" deprecated="15"/>
+		<method name="getItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" deprecated="15"/>
+		<method name="getListSelection()I" since="3"/>
+		<method name="getOnItemClickListener()Landroid/widget/AdapterView$OnItemClickListener;" since="3"/>
+		<method name="getOnItemSelectedListener()Landroid/widget/AdapterView$OnItemSelectedListener;" since="3"/>
+		<method name="getThreshold()I"/>
+		<method name="getValidator()Landroid/widget/AutoCompleteTextView$Validator;"/>
+		<method name="isPerformingCompletion()Z" since="3"/>
+		<method name="isPopupShowing()Z"/>
+		<method name="performCompletion()V"/>
+		<method name="performFiltering(Ljava/lang/CharSequence;I)V"/>
+		<method name="performValidation()V"/>
+		<method name="refreshAutoCompleteResults()V" since="29"/>
+		<method name="replaceText(Ljava/lang/CharSequence;)V"/>
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
+		<method name="setCompletionHint(Ljava/lang/CharSequence;)V"/>
+		<method name="setDropDownAnchor(I)V" since="3"/>
+		<method name="setDropDownBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="5"/>
+		<method name="setDropDownBackgroundResource(I)V" since="5"/>
+		<method name="setDropDownHeight(I)V" since="4"/>
+		<method name="setDropDownHorizontalOffset(I)V" since="5"/>
+		<method name="setDropDownVerticalOffset(I)V" since="5"/>
+		<method name="setDropDownWidth(I)V" since="3"/>
+		<method name="setInputMethodMode(I)V" since="29"/>
+		<method name="setListSelection(I)V" since="3"/>
+		<method name="setOnDismissListener(Landroid/widget/AutoCompleteTextView$OnDismissListener;)V" since="17"/>
+		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V"/>
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V"/>
+		<method name="setText(Ljava/lang/CharSequence;Z)V" since="17"/>
+		<method name="setThreshold(I)V"/>
+		<method name="setValidator(Landroid/widget/AutoCompleteTextView$Validator;)V"/>
+		<method name="showDropDown()V"/>
+	</class>
+	<class name="android/widget/AutoCompleteTextView$OnDismissListener" since="17">
+		<extends name="java/lang/Object"/>
+		<method name="onDismiss()V"/>
+	</class>
+	<class name="android/widget/AutoCompleteTextView$Validator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="fixText(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+		<method name="isValid(Ljava/lang/CharSequence;)Z"/>
+	</class>
+	<class name="android/widget/BaseAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/ListAdapter"/>
+		<implements name="android/widget/SpinnerAdapter"/>
+		<method name="&lt;init>()V"/>
+		<method name="notifyDataSetChanged()V"/>
+		<method name="notifyDataSetInvalidated()V"/>
+		<method name="setAutofillOptions([Ljava/lang/CharSequence;)V" since="27"/>
+	</class>
+	<class name="android/widget/BaseExpandableListAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/ExpandableListAdapter"/>
+		<implements name="android/widget/HeterogeneousExpandableList" since="8"/>
+		<method name="&lt;init>()V"/>
+		<method name="notifyDataSetChanged()V"/>
+		<method name="notifyDataSetInvalidated()V"/>
+	</class>
+	<class name="android/widget/Button" since="1">
+		<extends name="android/widget/TextView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+	</class>
+	<class name="android/widget/CalendarView" since="11">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getDate()J"/>
+		<method name="getDateTextAppearance()I" since="16"/>
+		<method name="getFirstDayOfWeek()I"/>
+		<method name="getFocusedMonthDateColor()I" since="16" deprecated="23"/>
+		<method name="getMaxDate()J"/>
+		<method name="getMinDate()J"/>
+		<method name="getSelectedDateVerticalBar()Landroid/graphics/drawable/Drawable;" since="16" deprecated="23"/>
+		<method name="getSelectedWeekBackgroundColor()I" since="16" deprecated="23"/>
+		<method name="getShowWeekNumber()Z" deprecated="24"/>
+		<method name="getShownWeekCount()I" since="16" deprecated="23"/>
+		<method name="getUnfocusedMonthDateColor()I" since="16" deprecated="23"/>
+		<method name="getWeekDayTextAppearance()I" since="16"/>
+		<method name="getWeekNumberColor()I" since="16" deprecated="23"/>
+		<method name="getWeekSeparatorLineColor()I" since="16" deprecated="23"/>
+		<method name="setDate(J)V"/>
+		<method name="setDate(JZZ)V"/>
+		<method name="setDateTextAppearance(I)V" since="16"/>
+		<method name="setFirstDayOfWeek(I)V"/>
+		<method name="setFocusedMonthDateColor(I)V" since="16" deprecated="23"/>
+		<method name="setMaxDate(J)V"/>
+		<method name="setMinDate(J)V"/>
+		<method name="setOnDateChangeListener(Landroid/widget/CalendarView$OnDateChangeListener;)V"/>
+		<method name="setSelectedDateVerticalBar(I)V" since="16" deprecated="23"/>
+		<method name="setSelectedDateVerticalBar(Landroid/graphics/drawable/Drawable;)V" since="16" deprecated="23"/>
+		<method name="setSelectedWeekBackgroundColor(I)V" since="16" deprecated="23"/>
+		<method name="setShowWeekNumber(Z)V" deprecated="24"/>
+		<method name="setShownWeekCount(I)V" since="16" deprecated="23"/>
+		<method name="setUnfocusedMonthDateColor(I)V" since="16" deprecated="23"/>
+		<method name="setWeekDayTextAppearance(I)V" since="16"/>
+		<method name="setWeekNumberColor(I)V" since="16" deprecated="23"/>
+		<method name="setWeekSeparatorLineColor(I)V" since="16" deprecated="23"/>
+	</class>
+	<class name="android/widget/CalendarView$OnDateChangeListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onSelectedDayChange(Landroid/widget/CalendarView;III)V"/>
+	</class>
+	<class name="android/widget/CheckBox" since="1">
+		<extends name="android/widget/CompoundButton"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+	</class>
+	<class name="android/widget/Checkable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="isChecked()Z"/>
+		<method name="setChecked(Z)V"/>
+		<method name="toggle()V"/>
+	</class>
+	<class name="android/widget/CheckedTextView" since="1">
+		<extends name="android/widget/TextView"/>
+		<implements name="android/widget/Checkable"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getCheckMarkDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
+		<method name="getCheckMarkTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getCheckMarkTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getCheckMarkTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="onPaddingChanged(I)V" since="16" removed="17"/>
+		<method name="setCheckMarkDrawable(I)V"/>
+		<method name="setCheckMarkDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setCheckMarkTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setCheckMarkTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setCheckMarkTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+	</class>
+	<class name="android/widget/Chronometer" since="1">
+		<extends name="android/widget/TextView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getBase()J"/>
+		<method name="getFormat()Ljava/lang/String;"/>
+		<method name="getOnChronometerTickListener()Landroid/widget/Chronometer$OnChronometerTickListener;" since="3"/>
+		<method name="isCountDown()Z" since="24"/>
+		<method name="isTheFinalCountDown()Z" since="26"/>
+		<method name="setBase(J)V"/>
+		<method name="setCountDown(Z)V" since="24"/>
+		<method name="setFormat(Ljava/lang/String;)V"/>
+		<method name="setOnChronometerTickListener(Landroid/widget/Chronometer$OnChronometerTickListener;)V" since="3"/>
+		<method name="start()V"/>
+		<method name="stop()V"/>
+	</class>
+	<class name="android/widget/Chronometer$OnChronometerTickListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onChronometerTick(Landroid/widget/Chronometer;)V"/>
+	</class>
+	<class name="android/widget/CompoundButton" since="1">
+		<extends name="android/widget/Button"/>
+		<implements name="android/widget/Checkable"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getButtonDrawable()Landroid/graphics/drawable/Drawable;" since="23"/>
+		<method name="getButtonTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getButtonTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getButtonTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="setButtonDrawable(I)V"/>
+		<method name="setButtonDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setButtonIcon(Landroid/graphics/drawable/Icon;)V" since="31"/>
+		<method name="setButtonTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setButtonTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setButtonTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setOnCheckedChangeListener(Landroid/widget/CompoundButton$OnCheckedChangeListener;)V"/>
+	</class>
+	<class name="android/widget/CompoundButton$OnCheckedChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onCheckedChanged(Landroid/widget/CompoundButton;Z)V"/>
+	</class>
+	<class name="android/widget/CursorAdapter" since="1">
+		<extends name="android/widget/BaseAdapter"/>
+		<implements name="android/widget/Filterable"/>
+		<implements name="android/widget/ThemedSpinnerAdapter" since="23"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;)V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;I)V" since="11"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;Z)V"/>
+		<method name="bindView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;)V"/>
+		<method name="changeCursor(Landroid/database/Cursor;)V"/>
+		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;"/>
+		<method name="getCursor()Landroid/database/Cursor;"/>
+		<method name="getFilterQueryProvider()Landroid/widget/FilterQueryProvider;"/>
+		<method name="init(Landroid/content/Context;Landroid/database/Cursor;Z)V" deprecated="15"/>
+		<method name="newDropDownView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="newView(Landroid/content/Context;Landroid/database/Cursor;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="onContentChanged()V" since="3"/>
+		<method name="runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;"/>
+		<method name="setFilterQueryProvider(Landroid/widget/FilterQueryProvider;)V"/>
+		<method name="swapCursor(Landroid/database/Cursor;)Landroid/database/Cursor;" since="11"/>
+		<field name="FLAG_AUTO_REQUERY" since="11" deprecated="15"/>
+		<field name="FLAG_REGISTER_CONTENT_OBSERVER" since="11"/>
+	</class>
+	<class name="android/widget/CursorTreeAdapter" since="1">
+		<extends name="android/widget/BaseExpandableListAdapter"/>
+		<implements name="android/widget/Filterable"/>
+		<method name="&lt;init>(Landroid/database/Cursor;Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/database/Cursor;Landroid/content/Context;Z)V"/>
+		<method name="bindChildView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;Z)V"/>
+		<method name="bindGroupView(Landroid/view/View;Landroid/content/Context;Landroid/database/Cursor;Z)V"/>
+		<method name="changeCursor(Landroid/database/Cursor;)V"/>
+		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/String;"/>
+		<method name="getChild(II)Landroid/database/Cursor;"/>
+		<method name="getChildrenCursor(Landroid/database/Cursor;)Landroid/database/Cursor;"/>
+		<method name="getCursor()Landroid/database/Cursor;"/>
+		<method name="getFilterQueryProvider()Landroid/widget/FilterQueryProvider;"/>
+		<method name="getGroup(I)Landroid/database/Cursor;"/>
+		<method name="newChildView(Landroid/content/Context;Landroid/database/Cursor;ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="newGroupView(Landroid/content/Context;Landroid/database/Cursor;ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="notifyDataSetChanged(Z)V"/>
+		<method name="runQueryOnBackgroundThread(Ljava/lang/CharSequence;)Landroid/database/Cursor;"/>
+		<method name="setChildrenCursor(ILandroid/database/Cursor;)V"/>
+		<method name="setFilterQueryProvider(Landroid/widget/FilterQueryProvider;)V"/>
+		<method name="setGroupCursor(Landroid/database/Cursor;)V"/>
+	</class>
+	<class name="android/widget/DatePicker" since="1">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getCalendarView()Landroid/widget/CalendarView;" since="12" deprecated="24"/>
+		<method name="getCalendarViewShown()Z" since="11" deprecated="24"/>
+		<method name="getDayOfMonth()I"/>
+		<method name="getFirstDayOfWeek()I" since="21"/>
+		<method name="getMaxDate()J" since="11"/>
+		<method name="getMinDate()J" since="11"/>
+		<method name="getMonth()I"/>
+		<method name="getSpinnersShown()Z" since="11" deprecated="24"/>
+		<method name="getYear()I"/>
+		<method name="init(IIILandroid/widget/DatePicker$OnDateChangedListener;)V"/>
+		<method name="setCalendarViewShown(Z)V" since="11" deprecated="24"/>
+		<method name="setFirstDayOfWeek(I)V" since="21"/>
+		<method name="setMaxDate(J)V" since="11"/>
+		<method name="setMinDate(J)V" since="11"/>
+		<method name="setOnDateChangedListener(Landroid/widget/DatePicker$OnDateChangedListener;)V" since="26"/>
+		<method name="setSpinnersShown(Z)V" since="11" deprecated="24"/>
+		<method name="updateDate(III)V"/>
+	</class>
+	<class name="android/widget/DatePicker$OnDateChangedListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onDateChanged(Landroid/widget/DatePicker;III)V"/>
+	</class>
+	<class name="android/widget/DialerFilter" since="1" deprecated="26">
+		<extends name="android/widget/RelativeLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="append(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="clearText()V" deprecated="29"/>
+		<method name="getDigits()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getFilterText()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getLetters()Ljava/lang/CharSequence;" deprecated="29"/>
+		<method name="getMode()I" deprecated="29"/>
+		<method name="isQwertyKeyboard()Z" deprecated="29"/>
+		<method name="onModeChange(II)V" deprecated="29"/>
+		<method name="removeFilterWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+		<method name="setDigitsWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+		<method name="setFilterWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+		<method name="setLettersWatcher(Landroid/text/TextWatcher;)V" deprecated="29"/>
+		<method name="setMode(I)V" deprecated="29"/>
+		<field name="DIGITS_AND_LETTERS" deprecated="29"/>
+		<field name="DIGITS_AND_LETTERS_NO_DIGITS" deprecated="29"/>
+		<field name="DIGITS_AND_LETTERS_NO_LETTERS" deprecated="29"/>
+		<field name="DIGITS_ONLY" deprecated="29"/>
+		<field name="LETTERS_ONLY" deprecated="29"/>
+	</class>
+	<class name="android/widget/DigitalClock" since="1" deprecated="17">
+		<extends name="android/widget/TextView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+	</class>
+	<class name="android/widget/EdgeEffect" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" since="31"/>
+		<method name="draw(Landroid/graphics/Canvas;)Z"/>
+		<method name="finish()V"/>
+		<method name="getBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getColor()I" since="21"/>
+		<method name="getDistance()F" since="31"/>
+		<method name="getMaxHeight()I" since="21"/>
+		<method name="isFinished()Z"/>
+		<method name="onAbsorb(I)V"/>
+		<method name="onPull(F)V"/>
+		<method name="onPull(FF)V" since="21"/>
+		<method name="onPullDistance(FF)F" since="31"/>
+		<method name="onRelease()V"/>
+		<method name="setBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setColor(I)V" since="21"/>
+		<method name="setSize(II)V"/>
+		<field name="DEFAULT_BLEND_MODE" since="29"/>
+	</class>
+	<class name="android/widget/EditText" since="1">
+		<extends name="android/widget/TextView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="extendSelection(I)V"/>
+		<method name="getText()Landroid/text/Editable;"/>
+		<method name="selectAll()V"/>
+		<method name="setSelection(I)V"/>
+		<method name="setSelection(II)V"/>
+	</class>
+	<class name="android/widget/ExpandableListAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="areAllItemsEnabled()Z"/>
+		<method name="getChild(II)Ljava/lang/Object;"/>
+		<method name="getChildId(II)J"/>
+		<method name="getChildView(IIZLandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="getChildrenCount(I)I"/>
+		<method name="getCombinedChildId(JJ)J"/>
+		<method name="getCombinedGroupId(J)J"/>
+		<method name="getGroup(I)Ljava/lang/Object;"/>
+		<method name="getGroupCount()I"/>
+		<method name="getGroupId(I)J"/>
+		<method name="getGroupView(IZLandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="hasStableIds()Z"/>
+		<method name="isChildSelectable(II)Z"/>
+		<method name="isEmpty()Z"/>
+		<method name="onGroupCollapsed(I)V"/>
+		<method name="onGroupExpanded(I)V"/>
+		<method name="registerDataSetObserver(Landroid/database/DataSetObserver;)V"/>
+		<method name="unregisterDataSetObserver(Landroid/database/DataSetObserver;)V"/>
+	</class>
+	<class name="android/widget/ExpandableListView" since="1">
+		<extends name="android/widget/ListView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="collapseGroup(I)Z"/>
+		<method name="expandGroup(I)Z"/>
+		<method name="expandGroup(IZ)Z" since="14"/>
+		<method name="getExpandableListAdapter()Landroid/widget/ExpandableListAdapter;"/>
+		<method name="getExpandableListPosition(I)J"/>
+		<method name="getFlatListPosition(J)I"/>
+		<method name="getPackedPositionChild(J)I"/>
+		<method name="getPackedPositionForChild(II)J"/>
+		<method name="getPackedPositionForGroup(I)J"/>
+		<method name="getPackedPositionGroup(J)I"/>
+		<method name="getPackedPositionType(J)I"/>
+		<method name="getSelectedId()J"/>
+		<method name="getSelectedPosition()J"/>
+		<method name="isGroupExpanded(I)Z"/>
+		<method name="setAdapter(Landroid/widget/ExpandableListAdapter;)V"/>
+		<method name="setChildDivider(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setChildIndicator(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setChildIndicatorBounds(II)V"/>
+		<method name="setChildIndicatorBoundsRelative(II)V" since="18"/>
+		<method name="setGroupIndicator(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setIndicatorBounds(II)V"/>
+		<method name="setIndicatorBoundsRelative(II)V" since="18"/>
+		<method name="setOnChildClickListener(Landroid/widget/ExpandableListView$OnChildClickListener;)V"/>
+		<method name="setOnGroupClickListener(Landroid/widget/ExpandableListView$OnGroupClickListener;)V"/>
+		<method name="setOnGroupCollapseListener(Landroid/widget/ExpandableListView$OnGroupCollapseListener;)V"/>
+		<method name="setOnGroupExpandListener(Landroid/widget/ExpandableListView$OnGroupExpandListener;)V"/>
+		<method name="setSelectedChild(IIZ)Z"/>
+		<method name="setSelectedGroup(I)V"/>
+		<field name="CHILD_INDICATOR_INHERIT"/>
+		<field name="PACKED_POSITION_TYPE_CHILD"/>
+		<field name="PACKED_POSITION_TYPE_GROUP"/>
+		<field name="PACKED_POSITION_TYPE_NULL"/>
+		<field name="PACKED_POSITION_VALUE_NULL"/>
+	</class>
+	<class name="android/widget/ExpandableListView$ExpandableListContextMenuInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/ContextMenu$ContextMenuInfo"/>
+		<method name="&lt;init>(Landroid/view/View;JJ)V"/>
+		<field name="id"/>
+		<field name="packedPosition"/>
+		<field name="targetView"/>
+	</class>
+	<class name="android/widget/ExpandableListView$OnChildClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onChildClick(Landroid/widget/ExpandableListView;Landroid/view/View;IIJ)Z"/>
+	</class>
+	<class name="android/widget/ExpandableListView$OnGroupClickListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onGroupClick(Landroid/widget/ExpandableListView;Landroid/view/View;IJ)Z"/>
+	</class>
+	<class name="android/widget/ExpandableListView$OnGroupCollapseListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onGroupCollapse(I)V"/>
+	</class>
+	<class name="android/widget/ExpandableListView$OnGroupExpandListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onGroupExpand(I)V"/>
+	</class>
+	<class name="android/widget/Filter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="convertResultToString(Ljava/lang/Object;)Ljava/lang/CharSequence;"/>
+		<method name="filter(Ljava/lang/CharSequence;)V"/>
+		<method name="filter(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterListener;)V"/>
+		<method name="performFiltering(Ljava/lang/CharSequence;)Landroid/widget/Filter$FilterResults;"/>
+		<method name="publishResults(Ljava/lang/CharSequence;Landroid/widget/Filter$FilterResults;)V"/>
+	</class>
+	<class name="android/widget/Filter$FilterListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onFilterComplete(I)V"/>
+	</class>
+	<class name="android/widget/Filter$FilterResults" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<field name="count"/>
+		<field name="values"/>
+	</class>
+	<class name="android/widget/FilterQueryProvider" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="runQuery(Ljava/lang/CharSequence;)Landroid/database/Cursor;"/>
+	</class>
+	<class name="android/widget/Filterable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getFilter()Landroid/widget/Filter;"/>
+	</class>
+	<class name="android/widget/FrameLayout" since="1">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="generateDefaultLayoutParams()Landroid/widget/FrameLayout$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/FrameLayout$LayoutParams;"/>
+		<method name="getConsiderGoneChildrenWhenMeasuring()Z" deprecated="15"/>
+		<method name="getForeground()Landroid/graphics/drawable/Drawable;" removed="23"/>
+		<method name="getForegroundGravity()I" since="16" removed="23"/>
+		<method name="getForegroundTintList()Landroid/content/res/ColorStateList;" since="21" removed="23"/>
+		<method name="getForegroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21" removed="23"/>
+		<method name="getMeasureAllChildren()Z" since="14"/>
+		<method name="setForeground(Landroid/graphics/drawable/Drawable;)V" removed="23"/>
+		<method name="setForegroundGravity(I)V"/>
+		<method name="setForegroundTintList(Landroid/content/res/ColorStateList;)V" since="21" removed="23"/>
+		<method name="setForegroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21" removed="23"/>
+		<method name="setMeasureAllChildren(Z)V"/>
+	</class>
+	<class name="android/widget/FrameLayout$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/widget/FrameLayout$LayoutParams;)V" since="19"/>
+		<field name="UNSPECIFIED_GRAVITY" since="24"/>
+		<field name="gravity"/>
+	</class>
+	<class name="android/widget/Gallery" since="1" deprecated="16">
+		<extends name="android/widget/AbsSpinner"/>
+		<implements name="android/view/GestureDetector$OnGestureListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="setAnimationDuration(I)V" deprecated="29"/>
+		<method name="setCallbackDuringFling(Z)V" deprecated="29"/>
+		<method name="setGravity(I)V" deprecated="29"/>
+		<method name="setSpacing(I)V" deprecated="29"/>
+		<method name="setUnselectedAlpha(F)V" deprecated="29"/>
+	</class>
+	<class name="android/widget/Gallery$LayoutParams" since="1" deprecated="29">
+		<extends name="android/view/ViewGroup$LayoutParams"/>
+		<method name="&lt;init>(II)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V" deprecated="29"/>
+	</class>
+	<class name="android/widget/GridLayout" since="14">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="generateDefaultLayoutParams()Landroid/widget/GridLayout$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/GridLayout$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/GridLayout$LayoutParams;"/>
+		<method name="getAlignmentMode()I"/>
+		<method name="getColumnCount()I"/>
+		<method name="getOrientation()I"/>
+		<method name="getRowCount()I"/>
+		<method name="getUseDefaultMargins()Z"/>
+		<method name="isColumnOrderPreserved()Z"/>
+		<method name="isRowOrderPreserved()Z"/>
+		<method name="setAlignmentMode(I)V"/>
+		<method name="setColumnCount(I)V"/>
+		<method name="setColumnOrderPreserved(Z)V"/>
+		<method name="setOrientation(I)V"/>
+		<method name="setRowCount(I)V"/>
+		<method name="setRowOrderPreserved(Z)V"/>
+		<method name="setUseDefaultMargins(Z)V"/>
+		<method name="spec(I)Landroid/widget/GridLayout$Spec;"/>
+		<method name="spec(IF)Landroid/widget/GridLayout$Spec;" since="21"/>
+		<method name="spec(II)Landroid/widget/GridLayout$Spec;"/>
+		<method name="spec(IIF)Landroid/widget/GridLayout$Spec;" since="21"/>
+		<method name="spec(IILandroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Spec;"/>
+		<method name="spec(IILandroid/widget/GridLayout$Alignment;F)Landroid/widget/GridLayout$Spec;" since="21"/>
+		<method name="spec(ILandroid/widget/GridLayout$Alignment;)Landroid/widget/GridLayout$Spec;"/>
+		<method name="spec(ILandroid/widget/GridLayout$Alignment;F)Landroid/widget/GridLayout$Spec;" since="21"/>
+		<field name="ALIGN_BOUNDS"/>
+		<field name="ALIGN_MARGINS"/>
+		<field name="BASELINE"/>
+		<field name="BOTTOM"/>
+		<field name="CENTER"/>
+		<field name="END" since="16"/>
+		<field name="FILL"/>
+		<field name="HORIZONTAL"/>
+		<field name="LEFT"/>
+		<field name="RIGHT"/>
+		<field name="START" since="16"/>
+		<field name="TOP"/>
+		<field name="UNDEFINED"/>
+		<field name="VERTICAL"/>
+	</class>
+	<class name="android/widget/GridLayout$Alignment" since="14">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/widget/GridLayout$LayoutParams" since="14">
+		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/widget/GridLayout$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/widget/GridLayout$Spec;Landroid/widget/GridLayout$Spec;)V"/>
+		<method name="setGravity(I)V"/>
+		<field name="columnSpec"/>
+		<field name="rowSpec"/>
+	</class>
+	<class name="android/widget/GridLayout$Spec" since="14">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="android/widget/GridView" since="1">
+		<extends name="android/widget/AbsListView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getAdapter()Landroid/widget/ListAdapter;"/>
+		<method name="getColumnWidth()I" since="16"/>
+		<method name="getGravity()I" since="16"/>
+		<method name="getHorizontalSpacing()I" since="16"/>
+		<method name="getNumColumns()I" since="11"/>
+		<method name="getRequestedColumnWidth()I" since="16"/>
+		<method name="getRequestedHorizontalSpacing()I" since="16"/>
+		<method name="getStretchMode()I"/>
+		<method name="getVerticalSpacing()I" since="16"/>
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
+		<method name="setColumnWidth(I)V"/>
+		<method name="setGravity(I)V"/>
+		<method name="setHorizontalSpacing(I)V"/>
+		<method name="setNumColumns(I)V"/>
+		<method name="setStretchMode(I)V"/>
+		<method name="setVerticalSpacing(I)V"/>
+		<method name="smoothScrollByOffset(I)V" since="11"/>
+		<field name="AUTO_FIT"/>
+		<field name="NO_STRETCH"/>
+		<field name="STRETCH_COLUMN_WIDTH"/>
+		<field name="STRETCH_SPACING"/>
+		<field name="STRETCH_SPACING_UNIFORM" since="3"/>
+	</class>
+	<class name="android/widget/HeaderViewListAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/Filterable"/>
+		<implements name="android/widget/WrapperListAdapter"/>
+		<method name="&lt;init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Landroid/widget/ListAdapter;)V"/>
+		<method name="getFootersCount()I"/>
+		<method name="getHeadersCount()I"/>
+		<method name="removeFooter(Landroid/view/View;)Z"/>
+		<method name="removeHeader(Landroid/view/View;)Z"/>
+	</class>
+	<class name="android/widget/HeterogeneousExpandableList" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getChildType(II)I"/>
+		<method name="getChildTypeCount()I"/>
+		<method name="getGroupType(I)I"/>
+		<method name="getGroupTypeCount()I"/>
+	</class>
+	<class name="android/widget/HorizontalScrollView" since="3">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="arrowScroll(I)Z"/>
+		<method name="computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I"/>
+		<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="fling(I)V"/>
+		<method name="fullScroll(I)Z"/>
+		<method name="getLeftEdgeEffectColor()I" since="29"/>
+		<method name="getMaxScrollAmount()I"/>
+		<method name="getRightEdgeEffectColor()I" since="29"/>
+		<method name="isFillViewport()Z"/>
+		<method name="isSmoothScrollingEnabled()Z"/>
+		<method name="pageScroll(I)Z"/>
+		<method name="setEdgeEffectColor(I)V" since="29"/>
+		<method name="setFillViewport(Z)V"/>
+		<method name="setLeftEdgeEffectColor(I)V" since="29"/>
+		<method name="setRightEdgeEffectColor(I)V" since="29"/>
+		<method name="setSmoothScrollingEnabled(Z)V"/>
+		<method name="smoothScrollBy(II)V"/>
+		<method name="smoothScrollTo(II)V"/>
+	</class>
+	<class name="android/widget/ImageButton" since="1">
+		<extends name="android/widget/ImageView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+	</class>
+	<class name="android/widget/ImageSwitcher" since="1">
+		<extends name="android/widget/ViewSwitcher"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="setImageDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setImageResource(I)V"/>
+		<method name="setImageURI(Landroid/net/Uri;)V"/>
+	</class>
+	<class name="android/widget/ImageView" since="1">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="animateTransform(Landroid/graphics/Matrix;)V" since="29"/>
+		<method name="clearColorFilter()V"/>
+		<method name="getAdjustViewBounds()Z" since="16"/>
+		<method name="getBaselineAlignBottom()Z" since="11"/>
+		<method name="getColorFilter()Landroid/graphics/ColorFilter;" since="16"/>
+		<method name="getCropToPadding()Z" since="16"/>
+		<method name="getDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getImageAlpha()I" since="16"/>
+		<method name="getImageMatrix()Landroid/graphics/Matrix;"/>
+		<method name="getImageTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getImageTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getImageTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="getMaxHeight()I" since="16"/>
+		<method name="getMaxWidth()I" since="16"/>
+		<method name="getScaleType()Landroid/widget/ImageView$ScaleType;"/>
+		<method name="setAdjustViewBounds(Z)V"/>
+		<method name="setAlpha(I)V" deprecated="16"/>
+		<method name="setBaseline(I)V" since="11"/>
+		<method name="setBaselineAlignBottom(Z)V" since="11"/>
+		<method name="setColorFilter(I)V" since="8"/>
+		<method name="setColorFilter(ILandroid/graphics/PorterDuff$Mode;)V"/>
+		<method name="setColorFilter(Landroid/graphics/ColorFilter;)V"/>
+		<method name="setCropToPadding(Z)V" since="16"/>
+		<method name="setFrame(IIII)Z"/>
+		<method name="setImageAlpha(I)V" since="16"/>
+		<method name="setImageBitmap(Landroid/graphics/Bitmap;)V"/>
+		<method name="setImageDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setImageIcon(Landroid/graphics/drawable/Icon;)V" since="23"/>
+		<method name="setImageLevel(I)V"/>
+		<method name="setImageMatrix(Landroid/graphics/Matrix;)V"/>
+		<method name="setImageResource(I)V"/>
+		<method name="setImageState([IZ)V"/>
+		<method name="setImageTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setImageTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setImageTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setImageURI(Landroid/net/Uri;)V"/>
+		<method name="setMaxHeight(I)V"/>
+		<method name="setMaxWidth(I)V"/>
+		<method name="setScaleType(Landroid/widget/ImageView$ScaleType;)V"/>
+	</class>
+	<class name="android/widget/ImageView$ScaleType" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/widget/ImageView$ScaleType;"/>
+		<method name="values()[Landroid/widget/ImageView$ScaleType;"/>
+		<field name="CENTER"/>
+		<field name="CENTER_CROP"/>
+		<field name="CENTER_INSIDE"/>
+		<field name="FIT_CENTER"/>
+		<field name="FIT_END"/>
+		<field name="FIT_START"/>
+		<field name="FIT_XY"/>
+		<field name="MATRIX"/>
+	</class>
+	<class name="android/widget/LinearLayout" since="1">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="11"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="generateDefaultLayoutParams()Landroid/widget/LinearLayout$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/LinearLayout$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/LinearLayout$LayoutParams;"/>
+		<method name="getBaselineAlignedChildIndex()I"/>
+		<method name="getDividerDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
+		<method name="getDividerPadding()I" since="14"/>
+		<method name="getGravity()I" since="24"/>
+		<method name="getOrientation()I"/>
+		<method name="getShowDividers()I" since="11"/>
+		<method name="getWeightSum()F"/>
+		<method name="isBaselineAligned()Z"/>
+		<method name="isMeasureWithLargestChildEnabled()Z" since="11"/>
+		<method name="setBaselineAligned(Z)V"/>
+		<method name="setBaselineAlignedChildIndex(I)V"/>
+		<method name="setDividerDrawable(Landroid/graphics/drawable/Drawable;)V" since="11"/>
+		<method name="setDividerPadding(I)V" since="14"/>
+		<method name="setGravity(I)V"/>
+		<method name="setHorizontalGravity(I)V"/>
+		<method name="setMeasureWithLargestChildEnabled(Z)V" since="11"/>
+		<method name="setOrientation(I)V"/>
+		<method name="setShowDividers(I)V" since="11"/>
+		<method name="setVerticalGravity(I)V"/>
+		<method name="setWeightSum(F)V"/>
+		<field name="HORIZONTAL"/>
+		<field name="SHOW_DIVIDER_BEGINNING" since="11"/>
+		<field name="SHOW_DIVIDER_END" since="11"/>
+		<field name="SHOW_DIVIDER_MIDDLE" since="11"/>
+		<field name="SHOW_DIVIDER_NONE" since="11"/>
+		<field name="VERTICAL"/>
+	</class>
+	<class name="android/widget/LinearLayout$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IIF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/widget/LinearLayout$LayoutParams;)V" since="19"/>
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="gravity"/>
+		<field name="weight"/>
+	</class>
+	<class name="android/widget/ListAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/Adapter"/>
+		<method name="areAllItemsEnabled()Z"/>
+		<method name="isEnabled(I)Z"/>
+	</class>
+	<class name="android/widget/ListPopupWindow" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V"/>
+		<method name="clearListSelection()V"/>
+		<method name="createDragToOpenListener(Landroid/view/View;)Landroid/view/View$OnTouchListener;" since="19"/>
+		<method name="dismiss()V"/>
+		<method name="getAnchorView()Landroid/view/View;"/>
+		<method name="getAnimationStyle()I"/>
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getEpicenterBounds()Landroid/graphics/Rect;" since="29"/>
+		<method name="getHeight()I"/>
+		<method name="getHorizontalOffset()I"/>
+		<method name="getInputMethodMode()I"/>
+		<method name="getListView()Landroid/widget/ListView;"/>
+		<method name="getPromptPosition()I"/>
+		<method name="getSelectedItem()Ljava/lang/Object;"/>
+		<method name="getSelectedItemId()J"/>
+		<method name="getSelectedItemPosition()I"/>
+		<method name="getSelectedView()Landroid/view/View;"/>
+		<method name="getSoftInputMode()I"/>
+		<method name="getVerticalOffset()I"/>
+		<method name="getWidth()I"/>
+		<method name="isInputMethodNotNeeded()Z"/>
+		<method name="isModal()Z"/>
+		<method name="isShowing()Z"/>
+		<method name="onKeyDown(ILandroid/view/KeyEvent;)Z"/>
+		<method name="onKeyPreIme(ILandroid/view/KeyEvent;)Z"/>
+		<method name="onKeyUp(ILandroid/view/KeyEvent;)Z"/>
+		<method name="performItemClick(I)Z"/>
+		<method name="postShow()V"/>
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
+		<method name="setAnchorView(Landroid/view/View;)V"/>
+		<method name="setAnimationStyle(I)V"/>
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setContentWidth(I)V"/>
+		<method name="setDropDownGravity(I)V" since="19"/>
+		<method name="setEpicenterBounds(Landroid/graphics/Rect;)V" since="29"/>
+		<method name="setHeight(I)V"/>
+		<method name="setHorizontalOffset(I)V"/>
+		<method name="setInputMethodMode(I)V"/>
+		<method name="setListSelector(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setModal(Z)V"/>
+		<method name="setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V"/>
+		<method name="setOnItemClickListener(Landroid/widget/AdapterView$OnItemClickListener;)V"/>
+		<method name="setOnItemSelectedListener(Landroid/widget/AdapterView$OnItemSelectedListener;)V"/>
+		<method name="setPromptPosition(I)V"/>
+		<method name="setPromptView(Landroid/view/View;)V"/>
+		<method name="setSelection(I)V"/>
+		<method name="setSoftInputMode(I)V"/>
+		<method name="setVerticalOffset(I)V"/>
+		<method name="setWidth(I)V"/>
+		<method name="setWindowLayoutType(I)V" since="23"/>
+		<method name="show()V"/>
+		<field name="INPUT_METHOD_FROM_FOCUSABLE"/>
+		<field name="INPUT_METHOD_NEEDED"/>
+		<field name="INPUT_METHOD_NOT_NEEDED"/>
+		<field name="MATCH_PARENT"/>
+		<field name="POSITION_PROMPT_ABOVE"/>
+		<field name="POSITION_PROMPT_BELOW"/>
+		<field name="WRAP_CONTENT"/>
+	</class>
+	<class name="android/widget/ListView" since="1">
+		<extends name="android/widget/AbsListView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="addFooterView(Landroid/view/View;)V"/>
+		<method name="addFooterView(Landroid/view/View;Ljava/lang/Object;Z)V"/>
+		<method name="addHeaderView(Landroid/view/View;)V"/>
+		<method name="addHeaderView(Landroid/view/View;Ljava/lang/Object;Z)V"/>
+		<method name="areFooterDividersEnabled()Z" since="19"/>
+		<method name="areHeaderDividersEnabled()Z" since="19"/>
+		<method name="clearChoices()V" removed="11"/>
+		<method name="findViewTraversal(I)Landroid/view/View;" removed="26"/>
+		<method name="findViewWithTagTraversal(Ljava/lang/Object;)Landroid/view/View;" removed="26"/>
+		<method name="getAdapter()Landroid/widget/ListAdapter;"/>
+		<method name="getCheckItemIds()[J" since="4" deprecated="15"/>
+		<method name="getCheckedItemIds()[J" since="8" removed="11"/>
+		<method name="getCheckedItemPosition()I" removed="11"/>
+		<method name="getCheckedItemPositions()Landroid/util/SparseBooleanArray;" removed="11"/>
+		<method name="getChoiceMode()I" removed="11"/>
+		<method name="getDivider()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getDividerHeight()I"/>
+		<method name="getFooterViewsCount()I"/>
+		<method name="getHeaderViewsCount()I"/>
+		<method name="getItemsCanFocus()Z"/>
+		<method name="getMaxScrollAmount()I"/>
+		<method name="getOverscrollFooter()Landroid/graphics/drawable/Drawable;" since="9"/>
+		<method name="getOverscrollHeader()Landroid/graphics/drawable/Drawable;" since="9"/>
+		<method name="isItemChecked(I)Z" removed="11"/>
+		<method name="removeFooterView(Landroid/view/View;)Z"/>
+		<method name="removeHeaderView(Landroid/view/View;)Z"/>
+		<method name="setAdapter(Landroid/widget/ListAdapter;)V"/>
+		<method name="setChoiceMode(I)V" removed="11"/>
+		<method name="setDivider(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setDividerHeight(I)V"/>
+		<method name="setFooterDividersEnabled(Z)V" since="3"/>
+		<method name="setHeaderDividersEnabled(Z)V" since="3"/>
+		<method name="setItemChecked(IZ)V" removed="11"/>
+		<method name="setItemsCanFocus(Z)V"/>
+		<method name="setOverscrollFooter(Landroid/graphics/drawable/Drawable;)V" since="9"/>
+		<method name="setOverscrollHeader(Landroid/graphics/drawable/Drawable;)V" since="9"/>
+		<method name="setSelectionAfterHeaderView()V"/>
+		<method name="setSelectionFromTop(II)V" removed="21"/>
+		<method name="smoothScrollByOffset(I)V" since="11"/>
+		<field name="CHOICE_MODE_MULTIPLE" removed="11"/>
+		<field name="CHOICE_MODE_NONE" removed="11"/>
+		<field name="CHOICE_MODE_SINGLE" removed="11"/>
+	</class>
+	<class name="android/widget/ListView$FixedViewInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/widget/ListView;)V"/>
+		<field name="data"/>
+		<field name="isSelectable"/>
+		<field name="view"/>
+	</class>
+	<class name="android/widget/Magnifier" since="28">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/View;)V" deprecated="29"/>
+		<method name="dismiss()V"/>
+		<method name="getCornerRadius()F" since="29"/>
+		<method name="getDefaultHorizontalSourceToMagnifierOffset()I" since="29"/>
+		<method name="getDefaultVerticalSourceToMagnifierOffset()I" since="29"/>
+		<method name="getElevation()F" since="29"/>
+		<method name="getHeight()I"/>
+		<method name="getOverlay()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getPosition()Landroid/graphics/Point;" since="29"/>
+		<method name="getSourceHeight()I" since="29"/>
+		<method name="getSourcePosition()Landroid/graphics/Point;" since="29"/>
+		<method name="getSourceWidth()I" since="29"/>
+		<method name="getWidth()I"/>
+		<method name="getZoom()F"/>
+		<method name="isClippingEnabled()Z" since="29"/>
+		<method name="setZoom(F)V" since="29"/>
+		<method name="show(FF)V"/>
+		<method name="show(FFFF)V" since="29"/>
+		<method name="update()V"/>
+		<field name="SOURCE_BOUND_MAX_IN_SURFACE" since="29"/>
+		<field name="SOURCE_BOUND_MAX_VISIBLE" since="29"/>
+	</class>
+	<class name="android/widget/Magnifier$Builder" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/view/View;)V"/>
+		<method name="build()Landroid/widget/Magnifier;"/>
+		<method name="setClippingEnabled(Z)Landroid/widget/Magnifier$Builder;"/>
+		<method name="setCornerRadius(F)Landroid/widget/Magnifier$Builder;"/>
+		<method name="setDefaultSourceToMagnifierOffset(II)Landroid/widget/Magnifier$Builder;"/>
+		<method name="setElevation(F)Landroid/widget/Magnifier$Builder;"/>
+		<method name="setInitialZoom(F)Landroid/widget/Magnifier$Builder;"/>
+		<method name="setOverlay(Landroid/graphics/drawable/Drawable;)Landroid/widget/Magnifier$Builder;"/>
+		<method name="setSize(II)Landroid/widget/Magnifier$Builder;"/>
+		<method name="setSourceBounds(IIII)Landroid/widget/Magnifier$Builder;"/>
+	</class>
+	<class name="android/widget/MediaController" since="1">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Z)V"/>
+		<method name="hide()V"/>
+		<method name="isShowing()Z"/>
+		<method name="setAnchorView(Landroid/view/View;)V"/>
+		<method name="setMediaPlayer(Landroid/widget/MediaController$MediaPlayerControl;)V"/>
+		<method name="setPrevNextListeners(Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;)V"/>
+		<method name="show()V"/>
+		<method name="show(I)V"/>
+	</class>
+	<class name="android/widget/MediaController$MediaPlayerControl" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="canPause()Z" since="5"/>
+		<method name="canSeekBackward()Z" since="5"/>
+		<method name="canSeekForward()Z" since="5"/>
+		<method name="getAudioSessionId()I" since="18"/>
+		<method name="getBufferPercentage()I"/>
+		<method name="getCurrentPosition()I"/>
+		<method name="getDuration()I"/>
+		<method name="isPlaying()Z"/>
+		<method name="pause()V"/>
+		<method name="seekTo(I)V"/>
+		<method name="start()V"/>
+	</class>
+	<class name="android/widget/MultiAutoCompleteTextView" since="1">
+		<extends name="android/widget/AutoCompleteTextView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="performFiltering(Ljava/lang/CharSequence;III)V"/>
+		<method name="setTokenizer(Landroid/widget/MultiAutoCompleteTextView$Tokenizer;)V"/>
+	</class>
+	<class name="android/widget/MultiAutoCompleteTextView$CommaTokenizer" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/MultiAutoCompleteTextView$Tokenizer"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="android/widget/MultiAutoCompleteTextView$Tokenizer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="findTokenEnd(Ljava/lang/CharSequence;I)I"/>
+		<method name="findTokenStart(Ljava/lang/CharSequence;I)I"/>
+		<method name="terminateToken(Ljava/lang/CharSequence;)Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="android/widget/NumberPicker" since="11">
+		<extends name="android/widget/LinearLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getDisplayedValues()[Ljava/lang/String;"/>
+		<method name="getMaxValue()I"/>
+		<method name="getMinValue()I"/>
+		<method name="getSelectionDividerHeight()I" since="29"/>
+		<method name="getTextColor()I" since="29"/>
+		<method name="getTextSize()F" since="29"/>
+		<method name="getValue()I"/>
+		<method name="getWrapSelectorWheel()Z"/>
+		<method name="setDisplayedValues([Ljava/lang/String;)V"/>
+		<method name="setFormatter(Landroid/widget/NumberPicker$Formatter;)V"/>
+		<method name="setMaxValue(I)V"/>
+		<method name="setMinValue(I)V"/>
+		<method name="setOnLongPressUpdateInterval(J)V"/>
+		<method name="setOnScrollListener(Landroid/widget/NumberPicker$OnScrollListener;)V"/>
+		<method name="setOnValueChangedListener(Landroid/widget/NumberPicker$OnValueChangeListener;)V"/>
+		<method name="setSelectionDividerHeight(I)V" since="29"/>
+		<method name="setTextColor(I)V" since="29"/>
+		<method name="setTextSize(F)V" since="29"/>
+		<method name="setValue(I)V"/>
+		<method name="setWrapSelectorWheel(Z)V"/>
+	</class>
+	<class name="android/widget/NumberPicker$Formatter" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="format(I)Ljava/lang/String;"/>
+	</class>
+	<class name="android/widget/NumberPicker$OnScrollListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onScrollStateChange(Landroid/widget/NumberPicker;I)V"/>
+		<field name="SCROLL_STATE_FLING"/>
+		<field name="SCROLL_STATE_IDLE"/>
+		<field name="SCROLL_STATE_TOUCH_SCROLL"/>
+	</class>
+	<class name="android/widget/NumberPicker$OnValueChangeListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onValueChange(Landroid/widget/NumberPicker;II)V"/>
+	</class>
+	<class name="android/widget/OverScroller" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;FF)V" deprecated="26"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;FFZ)V" since="11" deprecated="26"/>
+		<method name="abortAnimation()V"/>
+		<method name="computeScrollOffset()Z"/>
+		<method name="fling(IIIIIIII)V"/>
+		<method name="fling(IIIIIIIIII)V"/>
+		<method name="forceFinished(Z)V"/>
+		<method name="getCurrVelocity()F" since="14"/>
+		<method name="getCurrX()I"/>
+		<method name="getCurrY()I"/>
+		<method name="getFinalX()I"/>
+		<method name="getFinalY()I"/>
+		<method name="getStartX()I"/>
+		<method name="getStartY()I"/>
+		<method name="isFinished()Z"/>
+		<method name="isOverScrolled()Z"/>
+		<method name="notifyHorizontalEdgeReached(III)V"/>
+		<method name="notifyVerticalEdgeReached(III)V"/>
+		<method name="setFriction(F)V" since="11"/>
+		<method name="springBack(IIIIII)Z"/>
+		<method name="startScroll(IIII)V"/>
+		<method name="startScroll(IIIII)V"/>
+	</class>
+	<class name="android/widget/PopupMenu" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;I)V" since="19"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/View;III)V" since="22"/>
+		<method name="dismiss()V"/>
+		<method name="getDragToOpenListener()Landroid/view/View$OnTouchListener;" since="19"/>
+		<method name="getGravity()I" since="23"/>
+		<method name="getMenu()Landroid/view/Menu;"/>
+		<method name="getMenuInflater()Landroid/view/MenuInflater;"/>
+		<method name="inflate(I)V" since="14"/>
+		<method name="setForceShowIcon(Z)V" since="29"/>
+		<method name="setGravity(I)V" since="23"/>
+		<method name="setOnDismissListener(Landroid/widget/PopupMenu$OnDismissListener;)V" since="14"/>
+		<method name="setOnMenuItemClickListener(Landroid/widget/PopupMenu$OnMenuItemClickListener;)V"/>
+		<method name="show()V"/>
+	</class>
+	<class name="android/widget/PopupMenu$OnDismissListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onDismiss(Landroid/widget/PopupMenu;)V"/>
+	</class>
+	<class name="android/widget/PopupMenu$OnMenuItemClickListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
+	</class>
+	<class name="android/widget/PopupWindow" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="11"/>
+		<method name="&lt;init>(Landroid/view/View;)V"/>
+		<method name="&lt;init>(Landroid/view/View;II)V"/>
+		<method name="&lt;init>(Landroid/view/View;IIZ)V"/>
+		<method name="dismiss()V"/>
+		<method name="getAnimationStyle()I"/>
+		<method name="getBackground()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getContentView()Landroid/view/View;"/>
+		<method name="getElevation()F" since="21"/>
+		<method name="getEnterTransition()Landroid/transition/Transition;" since="24"/>
+		<method name="getEpicenterBounds()Landroid/graphics/Rect;" since="29"/>
+		<method name="getExitTransition()Landroid/transition/Transition;" since="24"/>
+		<method name="getHeight()I"/>
+		<method name="getInputMethodMode()I" since="3"/>
+		<method name="getMaxAvailableHeight(Landroid/view/View;)I"/>
+		<method name="getMaxAvailableHeight(Landroid/view/View;I)I" since="3"/>
+		<method name="getMaxAvailableHeight(Landroid/view/View;IZ)I" since="24"/>
+		<method name="getOverlapAnchor()Z" since="23"/>
+		<method name="getSoftInputMode()I" since="4"/>
+		<method name="getWidth()I"/>
+		<method name="getWindowLayoutType()I" since="23"/>
+		<method name="isAboveAnchor()Z" since="3"/>
+		<method name="isAttachedInDecor()Z" since="22"/>
+		<method name="isClippedToScreen()Z" since="29"/>
+		<method name="isClippingEnabled()Z" since="3"/>
+		<method name="isFocusable()Z"/>
+		<method name="isLaidOutInScreen()Z" since="29"/>
+		<method name="isOutsideTouchable()Z" since="3"/>
+		<method name="isShowing()Z"/>
+		<method name="isSplitTouchEnabled()Z" since="11"/>
+		<method name="isTouchModal()Z" since="29"/>
+		<method name="isTouchable()Z" since="3"/>
+		<method name="setAnimationStyle(I)V"/>
+		<method name="setAttachedInDecor(Z)V" since="22"/>
+		<method name="setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setClippingEnabled(Z)V" since="3"/>
+		<method name="setContentView(Landroid/view/View;)V"/>
+		<method name="setElevation(F)V" since="21"/>
+		<method name="setEnterTransition(Landroid/transition/Transition;)V" since="23"/>
+		<method name="setEpicenterBounds(Landroid/graphics/Rect;)V" since="29"/>
+		<method name="setExitTransition(Landroid/transition/Transition;)V" since="23"/>
+		<method name="setFocusable(Z)V"/>
+		<method name="setHeight(I)V"/>
+		<method name="setIgnoreCheekPress()V"/>
+		<method name="setInputMethodMode(I)V" since="3"/>
+		<method name="setIsClippedToScreen(Z)V" since="29"/>
+		<method name="setIsLaidOutInScreen(Z)V" since="29"/>
+		<method name="setOnDismissListener(Landroid/widget/PopupWindow$OnDismissListener;)V"/>
+		<method name="setOutsideTouchable(Z)V" since="3"/>
+		<method name="setOverlapAnchor(Z)V" since="23"/>
+		<method name="setSoftInputMode(I)V" since="4"/>
+		<method name="setSplitTouchEnabled(Z)V" since="11"/>
+		<method name="setTouchInterceptor(Landroid/view/View$OnTouchListener;)V" since="3"/>
+		<method name="setTouchModal(Z)V" since="29"/>
+		<method name="setTouchable(Z)V" since="3"/>
+		<method name="setWidth(I)V"/>
+		<method name="setWindowLayoutMode(II)V" since="3" deprecated="23"/>
+		<method name="setWindowLayoutType(I)V" since="23"/>
+		<method name="showAsDropDown(Landroid/view/View;)V"/>
+		<method name="showAsDropDown(Landroid/view/View;II)V"/>
+		<method name="showAsDropDown(Landroid/view/View;III)V" since="19"/>
+		<method name="showAtLocation(Landroid/view/View;III)V"/>
+		<method name="update()V" since="3"/>
+		<method name="update(II)V" since="4"/>
+		<method name="update(IIII)V"/>
+		<method name="update(IIIIZ)V" since="3"/>
+		<method name="update(Landroid/view/View;II)V"/>
+		<method name="update(Landroid/view/View;IIII)V"/>
+		<field name="INPUT_METHOD_FROM_FOCUSABLE" since="3"/>
+		<field name="INPUT_METHOD_NEEDED" since="3"/>
+		<field name="INPUT_METHOD_NOT_NEEDED" since="3"/>
+	</class>
+	<class name="android/widget/PopupWindow$OnDismissListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onDismiss()V"/>
+	</class>
+	<class name="android/widget/ProgressBar" since="1">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getCurrentDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getIndeterminateDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getIndeterminateTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getIndeterminateTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getIndeterminateTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="getInterpolator()Landroid/view/animation/Interpolator;"/>
+		<method name="getMax()I"/>
+		<method name="getMaxHeight()I" since="29"/>
+		<method name="getMaxWidth()I" since="29"/>
+		<method name="getMin()I" since="26"/>
+		<method name="getMinHeight()I" since="29"/>
+		<method name="getMinWidth()I" since="29"/>
+		<method name="getProgress()I"/>
+		<method name="getProgressBackgroundTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getProgressBackgroundTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getProgressBackgroundTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="getProgressDrawable()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getProgressTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getProgressTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="getSecondaryProgress()I"/>
+		<method name="getSecondaryProgressTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getSecondaryProgressTintList()Landroid/content/res/ColorStateList;" since="21"/>
+		<method name="getSecondaryProgressTintMode()Landroid/graphics/PorterDuff$Mode;" since="21"/>
+		<method name="incrementProgressBy(I)V"/>
+		<method name="incrementSecondaryProgressBy(I)V"/>
+		<method name="isAnimating()Z" since="26"/>
+		<method name="isIndeterminate()Z"/>
+		<method name="setIndeterminate(Z)V"/>
+		<method name="setIndeterminateDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setIndeterminateDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21"/>
+		<method name="setIndeterminateTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setIndeterminateTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setIndeterminateTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setInterpolator(Landroid/content/Context;I)V"/>
+		<method name="setInterpolator(Landroid/view/animation/Interpolator;)V"/>
+		<method name="setMax(I)V"/>
+		<method name="setMaxHeight(I)V" since="29"/>
+		<method name="setMaxWidth(I)V" since="29"/>
+		<method name="setMin(I)V" since="26"/>
+		<method name="setMinHeight(I)V" since="29"/>
+		<method name="setMinWidth(I)V" since="29"/>
+		<method name="setProgress(I)V"/>
+		<method name="setProgress(IZ)V" since="24"/>
+		<method name="setProgressBackgroundTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setProgressBackgroundTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setProgressBackgroundTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setProgressDrawable(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setProgressDrawableTiled(Landroid/graphics/drawable/Drawable;)V" since="21"/>
+		<method name="setProgressTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setProgressTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+		<method name="setSecondaryProgress(I)V"/>
+		<method name="setSecondaryProgressTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setSecondaryProgressTintList(Landroid/content/res/ColorStateList;)V" since="21"/>
+		<method name="setSecondaryProgressTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="21"/>
+	</class>
+	<class name="android/widget/QuickContactBadge" since="5">
+		<extends name="android/widget/ImageView"/>
+		<implements name="android/view/View$OnClickListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="assignContactFromEmail(Ljava/lang/String;Z)V"/>
+		<method name="assignContactFromEmail(Ljava/lang/String;ZLandroid/os/Bundle;)V" since="18"/>
+		<method name="assignContactFromPhone(Ljava/lang/String;Z)V"/>
+		<method name="assignContactFromPhone(Ljava/lang/String;ZLandroid/os/Bundle;)V" since="18"/>
+		<method name="assignContactUri(Landroid/net/Uri;)V"/>
+		<method name="setExcludeMimes([Ljava/lang/String;)V"/>
+		<method name="setImageToDefault()V" since="11"/>
+		<method name="setMode(I)V"/>
+		<method name="setOverlay(Landroid/graphics/drawable/Drawable;)V" since="21"/>
+		<method name="setPrioritizedMimeType(Ljava/lang/String;)V" since="23"/>
+		<field name="mExcludeMimes"/>
+	</class>
+	<class name="android/widget/RadioButton" since="1">
+		<extends name="android/widget/CompoundButton"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+	</class>
+	<class name="android/widget/RadioGroup" since="1">
+		<extends name="android/widget/LinearLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="check(I)V"/>
+		<method name="clearCheck()V"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RadioGroup$LayoutParams;"/>
+		<method name="getCheckedRadioButtonId()I"/>
+		<method name="setOnCheckedChangeListener(Landroid/widget/RadioGroup$OnCheckedChangeListener;)V"/>
+	</class>
+	<class name="android/widget/RadioGroup$LayoutParams" since="1">
+		<extends name="android/widget/LinearLayout$LayoutParams"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IIF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+	</class>
+	<class name="android/widget/RadioGroup$OnCheckedChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onCheckedChanged(Landroid/widget/RadioGroup;I)V"/>
+	</class>
+	<class name="android/widget/RatingBar" since="1">
+		<extends name="android/widget/AbsSeekBar"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getNumStars()I"/>
+		<method name="getOnRatingBarChangeListener()Landroid/widget/RatingBar$OnRatingBarChangeListener;"/>
+		<method name="getRating()F"/>
+		<method name="getStepSize()F"/>
+		<method name="isIndicator()Z"/>
+		<method name="setIsIndicator(Z)V"/>
+		<method name="setNumStars(I)V"/>
+		<method name="setOnRatingBarChangeListener(Landroid/widget/RatingBar$OnRatingBarChangeListener;)V"/>
+		<method name="setRating(F)V"/>
+		<method name="setStepSize(F)V"/>
+	</class>
+	<class name="android/widget/RatingBar$OnRatingBarChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onRatingChanged(Landroid/widget/RatingBar;FZ)V"/>
+	</class>
+	<class name="android/widget/RelativeLayout" since="1">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/RelativeLayout$LayoutParams;"/>
+		<method name="getGravity()I" since="16"/>
+		<method name="getIgnoreGravity()I" since="29"/>
+		<method name="setGravity(I)V"/>
+		<method name="setHorizontalGravity(I)V"/>
+		<method name="setIgnoreGravity(I)V"/>
+		<method name="setVerticalGravity(I)V"/>
+		<field name="ABOVE"/>
+		<field name="ALIGN_BASELINE"/>
+		<field name="ALIGN_BOTTOM"/>
+		<field name="ALIGN_END" since="17"/>
+		<field name="ALIGN_LEFT"/>
+		<field name="ALIGN_PARENT_BOTTOM"/>
+		<field name="ALIGN_PARENT_END" since="17"/>
+		<field name="ALIGN_PARENT_LEFT"/>
+		<field name="ALIGN_PARENT_RIGHT"/>
+		<field name="ALIGN_PARENT_START" since="17"/>
+		<field name="ALIGN_PARENT_TOP"/>
+		<field name="ALIGN_RIGHT"/>
+		<field name="ALIGN_START" since="17"/>
+		<field name="ALIGN_TOP"/>
+		<field name="BELOW"/>
+		<field name="CENTER_HORIZONTAL"/>
+		<field name="CENTER_IN_PARENT"/>
+		<field name="CENTER_VERTICAL"/>
+		<field name="END_OF" since="17"/>
+		<field name="LEFT_OF"/>
+		<field name="RIGHT_OF"/>
+		<field name="START_OF" since="17"/>
+		<field name="TRUE"/>
+	</class>
+	<class name="android/widget/RelativeLayout$LayoutParams" since="1">
+		<extends name="android/view/ViewGroup$MarginLayoutParams"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/widget/RelativeLayout$LayoutParams;)V" since="19"/>
+		<method name="addRule(I)V"/>
+		<method name="addRule(II)V"/>
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getRule(I)I" since="23"/>
+		<method name="getRules()[I"/>
+		<method name="removeRule(I)V" since="17"/>
+		<field name="alignWithParent"/>
+	</class>
+	<class name="android/widget/RemoteViews" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<implements name="android/view/LayoutInflater$Filter"/>
+		<method name="&lt;init>(Landroid/os/Parcel;)V"/>
+		<method name="&lt;init>(Landroid/widget/RemoteViews;)V" since="28"/>
+		<method name="&lt;init>(Landroid/widget/RemoteViews;Landroid/widget/RemoteViews;)V" since="16"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;II)V" since="31"/>
+		<method name="&lt;init>(Ljava/util/Map;)V" since="31"/>
+		<method name="addStableView(ILandroid/widget/RemoteViews;I)V" since="31"/>
+		<method name="addView(ILandroid/widget/RemoteViews;)V" since="7"/>
+		<method name="apply(Landroid/content/Context;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="clone()Landroid/widget/RemoteViews;" since="9" deprecated="28"/>
+		<method name="getLayoutId()I"/>
+		<method name="getPackage()Ljava/lang/String;"/>
+		<method name="getViewId()I" since="31"/>
+		<method name="reapply(Landroid/content/Context;Landroid/view/View;)V"/>
+		<method name="removeAllViews(I)V" since="7"/>
+		<method name="setAccessibilityTraversalAfter(II)V" since="22"/>
+		<method name="setAccessibilityTraversalBefore(II)V" since="22"/>
+		<method name="setBitmap(ILjava/lang/String;Landroid/graphics/Bitmap;)V" since="3"/>
+		<method name="setBlendMode(ILjava/lang/String;Landroid/graphics/BlendMode;)V" since="31"/>
+		<method name="setBoolean(ILjava/lang/String;Z)V" since="3"/>
+		<method name="setBundle(ILjava/lang/String;Landroid/os/Bundle;)V" since="8"/>
+		<method name="setByte(ILjava/lang/String;B)V" since="3"/>
+		<method name="setChar(ILjava/lang/String;C)V" since="3"/>
+		<method name="setCharSequence(ILjava/lang/String;I)V" since="31"/>
+		<method name="setCharSequence(ILjava/lang/String;Ljava/lang/CharSequence;)V" since="3"/>
+		<method name="setCharSequenceAttr(ILjava/lang/String;I)V" since="31"/>
+		<method name="setChronometer(IJLjava/lang/String;Z)V"/>
+		<method name="setChronometerCountDown(IZ)V" since="24"/>
+		<method name="setColor(ILjava/lang/String;I)V" since="31"/>
+		<method name="setColorAttr(ILjava/lang/String;I)V" since="31"/>
+		<method name="setColorInt(ILjava/lang/String;II)V" since="31"/>
+		<method name="setColorStateList(ILjava/lang/String;I)V" since="31"/>
+		<method name="setColorStateList(ILjava/lang/String;Landroid/content/res/ColorStateList;)V" since="31"/>
+		<method name="setColorStateList(ILjava/lang/String;Landroid/content/res/ColorStateList;Landroid/content/res/ColorStateList;)V" since="31"/>
+		<method name="setColorStateListAttr(ILjava/lang/String;I)V" since="31"/>
+		<method name="setCompoundButtonChecked(IZ)V" since="31"/>
+		<method name="setContentDescription(ILjava/lang/CharSequence;)V" since="15"/>
+		<method name="setDisplayedChild(II)V" since="12"/>
+		<method name="setDouble(ILjava/lang/String;D)V" since="3"/>
+		<method name="setEmptyView(II)V" since="11"/>
+		<method name="setFloat(ILjava/lang/String;F)V" since="3"/>
+		<method name="setFloatDimen(ILjava/lang/String;FI)V" since="31"/>
+		<method name="setFloatDimen(ILjava/lang/String;I)V" since="31"/>
+		<method name="setFloatDimenAttr(ILjava/lang/String;I)V" since="31"/>
+		<method name="setIcon(ILjava/lang/String;Landroid/graphics/drawable/Icon;)V" since="23"/>
+		<method name="setIcon(ILjava/lang/String;Landroid/graphics/drawable/Icon;Landroid/graphics/drawable/Icon;)V" since="31"/>
+		<method name="setImageViewBitmap(ILandroid/graphics/Bitmap;)V" since="3"/>
+		<method name="setImageViewIcon(ILandroid/graphics/drawable/Icon;)V" since="23"/>
+		<method name="setImageViewResource(II)V"/>
+		<method name="setImageViewUri(ILandroid/net/Uri;)V"/>
+		<method name="setInt(ILjava/lang/String;I)V" since="3"/>
+		<method name="setIntDimen(ILjava/lang/String;FI)V" since="31"/>
+		<method name="setIntDimen(ILjava/lang/String;I)V" since="31"/>
+		<method name="setIntDimenAttr(ILjava/lang/String;I)V" since="31"/>
+		<method name="setIntent(ILjava/lang/String;Landroid/content/Intent;)V" since="11"/>
+		<method name="setLabelFor(II)V" since="17"/>
+		<method name="setLightBackgroundLayoutId(I)V" since="29"/>
+		<method name="setLong(ILjava/lang/String;J)V" since="3"/>
+		<method name="setOnCheckedChangeResponse(ILandroid/widget/RemoteViews$RemoteResponse;)V" since="31"/>
+		<method name="setOnClickFillInIntent(ILandroid/content/Intent;)V" since="11"/>
+		<method name="setOnClickPendingIntent(ILandroid/app/PendingIntent;)V" since="3"/>
+		<method name="setOnClickResponse(ILandroid/widget/RemoteViews$RemoteResponse;)V" since="29"/>
+		<method name="setPendingIntentTemplate(ILandroid/app/PendingIntent;)V" since="11"/>
+		<method name="setProgressBar(IIIZ)V"/>
+		<method name="setRadioGroupChecked(II)V" since="31"/>
+		<method name="setRelativeScrollPosition(II)V" since="11"/>
+		<method name="setRemoteAdapter(IILandroid/content/Intent;)V" since="11" deprecated="15"/>
+		<method name="setRemoteAdapter(ILandroid/content/Intent;)V" since="14"/>
+		<method name="setRemoteAdapter(ILandroid/widget/RemoteViews$RemoteCollectionItems;)V" since="31"/>
+		<method name="setScrollPosition(II)V" since="11"/>
+		<method name="setShort(ILjava/lang/String;S)V" since="3"/>
+		<method name="setString(ILjava/lang/String;Ljava/lang/String;)V" since="3"/>
+		<method name="setTextColor(II)V" since="3"/>
+		<method name="setTextViewCompoundDrawables(IIIII)V" since="16"/>
+		<method name="setTextViewCompoundDrawablesRelative(IIIII)V" since="16"/>
+		<method name="setTextViewText(ILjava/lang/CharSequence;)V"/>
+		<method name="setTextViewTextSize(IIF)V" since="16"/>
+		<method name="setUri(ILjava/lang/String;Landroid/net/Uri;)V" since="3"/>
+		<method name="setViewLayoutHeight(IFI)V" since="31"/>
+		<method name="setViewLayoutHeightAttr(II)V" since="31"/>
+		<method name="setViewLayoutHeightDimen(II)V" since="31"/>
+		<method name="setViewLayoutMargin(IIFI)V" since="31"/>
+		<method name="setViewLayoutMarginAttr(III)V" since="31"/>
+		<method name="setViewLayoutMarginDimen(III)V" since="31"/>
+		<method name="setViewLayoutWidth(IFI)V" since="31"/>
+		<method name="setViewLayoutWidthAttr(II)V" since="31"/>
+		<method name="setViewLayoutWidthDimen(II)V" since="31"/>
+		<method name="setViewOutlinePreferredRadius(IFI)V" since="31"/>
+		<method name="setViewOutlinePreferredRadiusAttr(II)V" since="31"/>
+		<method name="setViewOutlinePreferredRadiusDimen(II)V" since="31"/>
+		<method name="setViewPadding(IIIII)V" since="16"/>
+		<method name="setViewVisibility(II)V"/>
+		<method name="showNext(I)V" since="11"/>
+		<method name="showPrevious(I)V" since="11"/>
+		<field name="CREATOR"/>
+		<field name="EXTRA_CHECKED" since="31"/>
+		<field name="EXTRA_SHARED_ELEMENT_BOUNDS" since="29"/>
+		<field name="MARGIN_BOTTOM" since="31"/>
+		<field name="MARGIN_END" since="31"/>
+		<field name="MARGIN_LEFT" since="31"/>
+		<field name="MARGIN_RIGHT" since="31"/>
+		<field name="MARGIN_START" since="31"/>
+		<field name="MARGIN_TOP" since="31"/>
+	</class>
+	<class name="android/widget/RemoteViews$ActionException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V" since="3"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/widget/RemoteViews$RemoteCollectionItems" since="31">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getItemCount()I"/>
+		<method name="getItemId(I)J"/>
+		<method name="getItemView(I)Landroid/widget/RemoteViews;"/>
+		<method name="getViewTypeCount()I"/>
+		<method name="hasStableIds()Z"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/widget/RemoteViews$RemoteCollectionItems$Builder" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addItem(JLandroid/widget/RemoteViews;)Landroid/widget/RemoteViews$RemoteCollectionItems$Builder;"/>
+		<method name="build()Landroid/widget/RemoteViews$RemoteCollectionItems;"/>
+		<method name="setHasStableIds(Z)Landroid/widget/RemoteViews$RemoteCollectionItems$Builder;"/>
+		<method name="setViewTypeCount(I)Landroid/widget/RemoteViews$RemoteCollectionItems$Builder;"/>
+	</class>
+	<class name="android/widget/RemoteViews$RemoteResponse" since="29">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addSharedElement(ILjava/lang/String;)Landroid/widget/RemoteViews$RemoteResponse;"/>
+		<method name="fromFillInIntent(Landroid/content/Intent;)Landroid/widget/RemoteViews$RemoteResponse;"/>
+		<method name="fromPendingIntent(Landroid/app/PendingIntent;)Landroid/widget/RemoteViews$RemoteResponse;"/>
+	</class>
+	<class name="android/widget/RemoteViews$RemoteView" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="android/widget/RemoteViews$RemoteViewOutlineProvider" since="31">
+		<extends name="android/view/ViewOutlineProvider"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="getRadius()F"/>
+	</class>
+	<class name="android/widget/RemoteViewsService" since="11">
+		<extends name="android/app/Service"/>
+		<method name="&lt;init>()V"/>
+		<method name="onGetViewFactory(Landroid/content/Intent;)Landroid/widget/RemoteViewsService$RemoteViewsFactory;"/>
+	</class>
+	<class name="android/widget/RemoteViewsService$RemoteViewsFactory" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="getCount()I"/>
+		<method name="getItemId(I)J"/>
+		<method name="getLoadingView()Landroid/widget/RemoteViews;"/>
+		<method name="getViewAt(I)Landroid/widget/RemoteViews;"/>
+		<method name="getViewTypeCount()I"/>
+		<method name="hasStableIds()Z"/>
+		<method name="onCreate()V"/>
+		<method name="onDataSetChanged()V"/>
+		<method name="onDestroy()V"/>
+	</class>
+	<class name="android/widget/ResourceCursorAdapter" since="1">
+		<extends name="android/widget/CursorAdapter"/>
+		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;)V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;I)V" since="11"/>
+		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;Z)V" since="3"/>
+		<method name="setDropDownViewResource(I)V"/>
+		<method name="setViewResource(I)V" since="3"/>
+	</class>
+	<class name="android/widget/ResourceCursorTreeAdapter" since="1">
+		<extends name="android/widget/CursorTreeAdapter"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;II)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;III)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;IIII)V"/>
+	</class>
+	<class name="android/widget/ScrollView" since="1">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="arrowScroll(I)Z"/>
+		<method name="computeScrollDeltaToGetChildRectOnScreen(Landroid/graphics/Rect;)I"/>
+		<method name="executeKeyEvent(Landroid/view/KeyEvent;)Z"/>
+		<method name="fling(I)V"/>
+		<method name="fullScroll(I)Z"/>
+		<method name="getBottomEdgeEffectColor()I" since="29"/>
+		<method name="getMaxScrollAmount()I"/>
+		<method name="getTopEdgeEffectColor()I" since="29"/>
+		<method name="isFillViewport()Z"/>
+		<method name="isSmoothScrollingEnabled()Z"/>
+		<method name="pageScroll(I)Z"/>
+		<method name="scrollToDescendant(Landroid/view/View;)V" since="29"/>
+		<method name="setBottomEdgeEffectColor(I)V" since="29"/>
+		<method name="setEdgeEffectColor(I)V" since="29"/>
+		<method name="setFillViewport(Z)V"/>
+		<method name="setSmoothScrollingEnabled(Z)V"/>
+		<method name="setTopEdgeEffectColor(I)V" since="29"/>
+		<method name="smoothScrollBy(II)V"/>
+		<method name="smoothScrollTo(II)V"/>
+	</class>
+	<class name="android/widget/Scroller" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/view/animation/Interpolator;Z)V" since="11"/>
+		<method name="abortAnimation()V"/>
+		<method name="computeScrollOffset()Z"/>
+		<method name="extendDuration(I)V"/>
+		<method name="fling(IIIIIIII)V"/>
+		<method name="forceFinished(Z)V"/>
+		<method name="getCurrVelocity()F" since="14"/>
+		<method name="getCurrX()I"/>
+		<method name="getCurrY()I"/>
+		<method name="getDuration()I"/>
+		<method name="getFinalX()I"/>
+		<method name="getFinalY()I"/>
+		<method name="getStartX()I" since="3"/>
+		<method name="getStartY()I" since="3"/>
+		<method name="isFinished()Z"/>
+		<method name="setFinalX(I)V"/>
+		<method name="setFinalY(I)V"/>
+		<method name="setFriction(F)V" since="11"/>
+		<method name="startScroll(IIII)V"/>
+		<method name="startScroll(IIIII)V"/>
+		<method name="timePassed()I"/>
+	</class>
+	<class name="android/widget/SearchView" since="11">
+		<extends name="android/widget/LinearLayout"/>
+		<implements name="android/view/CollapsibleActionView" since="14"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getImeOptions()I" since="16"/>
+		<method name="getInputType()I" since="16"/>
+		<method name="getMaxWidth()I" since="16"/>
+		<method name="getQuery()Ljava/lang/CharSequence;"/>
+		<method name="getQueryHint()Ljava/lang/CharSequence;" since="16"/>
+		<method name="getSuggestionsAdapter()Landroid/widget/CursorAdapter;"/>
+		<method name="isIconfiedByDefault()Z" deprecated="29"/>
+		<method name="isIconified()Z"/>
+		<method name="isIconifiedByDefault()Z" since="29"/>
+		<method name="isQueryRefinementEnabled()Z"/>
+		<method name="isSubmitButtonEnabled()Z"/>
+		<method name="setIconified(Z)V"/>
+		<method name="setIconifiedByDefault(Z)V"/>
+		<method name="setImeOptions(I)V" since="14"/>
+		<method name="setInputType(I)V" since="14"/>
+		<method name="setMaxWidth(I)V"/>
+		<method name="setOnCloseListener(Landroid/widget/SearchView$OnCloseListener;)V"/>
+		<method name="setOnQueryTextFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V"/>
+		<method name="setOnQueryTextListener(Landroid/widget/SearchView$OnQueryTextListener;)V"/>
+		<method name="setOnSearchClickListener(Landroid/view/View$OnClickListener;)V"/>
+		<method name="setOnSuggestionListener(Landroid/widget/SearchView$OnSuggestionListener;)V"/>
+		<method name="setQuery(Ljava/lang/CharSequence;Z)V"/>
+		<method name="setQueryHint(Ljava/lang/CharSequence;)V"/>
+		<method name="setQueryRefinementEnabled(Z)V"/>
+		<method name="setSearchableInfo(Landroid/app/SearchableInfo;)V"/>
+		<method name="setSubmitButtonEnabled(Z)V"/>
+		<method name="setSuggestionsAdapter(Landroid/widget/CursorAdapter;)V"/>
+	</class>
+	<class name="android/widget/SearchView$OnCloseListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onClose()Z"/>
+	</class>
+	<class name="android/widget/SearchView$OnQueryTextListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onQueryTextChange(Ljava/lang/String;)Z"/>
+		<method name="onQueryTextSubmit(Ljava/lang/String;)Z"/>
+	</class>
+	<class name="android/widget/SearchView$OnSuggestionListener" since="11">
+		<extends name="java/lang/Object"/>
+		<method name="onSuggestionClick(I)Z"/>
+		<method name="onSuggestionSelect(I)Z"/>
+	</class>
+	<class name="android/widget/SectionIndexer" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="getPositionForSection(I)I"/>
+		<method name="getSectionForPosition(I)I"/>
+		<method name="getSections()[Ljava/lang/Object;"/>
+	</class>
+	<class name="android/widget/SeekBar" since="1">
+		<extends name="android/widget/AbsSeekBar"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="setOnSeekBarChangeListener(Landroid/widget/SeekBar$OnSeekBarChangeListener;)V"/>
+	</class>
+	<class name="android/widget/SeekBar$OnSeekBarChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onProgressChanged(Landroid/widget/SeekBar;IZ)V"/>
+		<method name="onStartTrackingTouch(Landroid/widget/SeekBar;)V"/>
+		<method name="onStopTrackingTouch(Landroid/widget/SeekBar;)V"/>
+	</class>
+	<class name="android/widget/ShareActionProvider" since="14">
+		<extends name="android/view/ActionProvider"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="setOnShareTargetSelectedListener(Landroid/widget/ShareActionProvider$OnShareTargetSelectedListener;)V"/>
+		<method name="setShareHistoryFileName(Ljava/lang/String;)V"/>
+		<method name="setShareIntent(Landroid/content/Intent;)V"/>
+		<field name="DEFAULT_SHARE_HISTORY_FILE_NAME"/>
+	</class>
+	<class name="android/widget/ShareActionProvider$OnShareTargetSelectedListener" since="14">
+		<extends name="java/lang/Object"/>
+		<method name="onShareTargetSelected(Landroid/widget/ShareActionProvider;Landroid/content/Intent;)Z"/>
+	</class>
+	<class name="android/widget/SimpleAdapter" since="1">
+		<extends name="android/widget/BaseAdapter"/>
+		<implements name="android/widget/Filterable"/>
+		<implements name="android/widget/ThemedSpinnerAdapter" since="23"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;I[Ljava/lang/String;[I)V"/>
+		<method name="getViewBinder()Landroid/widget/SimpleAdapter$ViewBinder;"/>
+		<method name="setDropDownViewResource(I)V"/>
+		<method name="setViewBinder(Landroid/widget/SimpleAdapter$ViewBinder;)V"/>
+		<method name="setViewImage(Landroid/widget/ImageView;I)V"/>
+		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V"/>
+		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/widget/SimpleAdapter$ViewBinder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="setViewValue(Landroid/view/View;Ljava/lang/Object;Ljava/lang/String;)Z"/>
+	</class>
+	<class name="android/widget/SimpleCursorAdapter" since="1">
+		<extends name="android/widget/ResourceCursorAdapter"/>
+		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[I)V" deprecated="15"/>
+		<method name="&lt;init>(Landroid/content/Context;ILandroid/database/Cursor;[Ljava/lang/String;[II)V" since="11"/>
+		<method name="changeCursorAndColumns(Landroid/database/Cursor;[Ljava/lang/String;[I)V" since="3"/>
+		<method name="getCursorToStringConverter()Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;"/>
+		<method name="getStringConversionColumn()I"/>
+		<method name="getViewBinder()Landroid/widget/SimpleCursorAdapter$ViewBinder;"/>
+		<method name="setCursorToStringConverter(Landroid/widget/SimpleCursorAdapter$CursorToStringConverter;)V"/>
+		<method name="setStringConversionColumn(I)V"/>
+		<method name="setViewBinder(Landroid/widget/SimpleCursorAdapter$ViewBinder;)V"/>
+		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V"/>
+		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V"/>
+	</class>
+	<class name="android/widget/SimpleCursorAdapter$CursorToStringConverter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="convertToString(Landroid/database/Cursor;)Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="android/widget/SimpleCursorAdapter$ViewBinder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="setViewValue(Landroid/view/View;Landroid/database/Cursor;I)Z"/>
+	</class>
+	<class name="android/widget/SimpleCursorTreeAdapter" since="1">
+		<extends name="android/widget/ResourceCursorTreeAdapter"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;II[Ljava/lang/String;[III[Ljava/lang/String;[I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;II[Ljava/lang/String;[II[Ljava/lang/String;[I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/database/Cursor;I[Ljava/lang/String;[II[Ljava/lang/String;[I)V"/>
+		<method name="getViewBinder()Landroid/widget/SimpleCursorTreeAdapter$ViewBinder;" since="5"/>
+		<method name="setViewBinder(Landroid/widget/SimpleCursorTreeAdapter$ViewBinder;)V" since="5"/>
+		<method name="setViewImage(Landroid/widget/ImageView;Ljava/lang/String;)V"/>
+		<method name="setViewText(Landroid/widget/TextView;Ljava/lang/String;)V" since="5"/>
+	</class>
+	<class name="android/widget/SimpleCursorTreeAdapter$ViewBinder" since="5">
+		<extends name="java/lang/Object"/>
+		<method name="setViewValue(Landroid/view/View;Landroid/database/Cursor;I)Z"/>
+	</class>
+	<class name="android/widget/SimpleExpandableListAdapter" since="1">
+		<extends name="android/widget/BaseExpandableListAdapter"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;II[Ljava/lang/String;[ILjava/util/List;II[Ljava/lang/String;[I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;II[Ljava/lang/String;[ILjava/util/List;I[Ljava/lang/String;[I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/util/List;I[Ljava/lang/String;[ILjava/util/List;I[Ljava/lang/String;[I)V"/>
+		<method name="newChildView(ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
+		<method name="newGroupView(ZLandroid/view/ViewGroup;)Landroid/view/View;"/>
+	</class>
+	<class name="android/widget/SlidingDrawer" since="3" deprecated="17">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="animateClose()V" deprecated="29"/>
+		<method name="animateOpen()V" deprecated="29"/>
+		<method name="animateToggle()V" deprecated="29"/>
+		<method name="close()V" deprecated="29"/>
+		<method name="getContent()Landroid/view/View;" deprecated="29"/>
+		<method name="getHandle()Landroid/view/View;" deprecated="29"/>
+		<method name="isMoving()Z" deprecated="29"/>
+		<method name="isOpened()Z" deprecated="29"/>
+		<method name="lock()V" deprecated="29"/>
+		<method name="open()V" deprecated="29"/>
+		<method name="setOnDrawerCloseListener(Landroid/widget/SlidingDrawer$OnDrawerCloseListener;)V" deprecated="29"/>
+		<method name="setOnDrawerOpenListener(Landroid/widget/SlidingDrawer$OnDrawerOpenListener;)V" deprecated="29"/>
+		<method name="setOnDrawerScrollListener(Landroid/widget/SlidingDrawer$OnDrawerScrollListener;)V" deprecated="29"/>
+		<method name="toggle()V" deprecated="29"/>
+		<method name="unlock()V" deprecated="29"/>
+		<field name="ORIENTATION_HORIZONTAL" deprecated="29"/>
+		<field name="ORIENTATION_VERTICAL" deprecated="29"/>
+	</class>
+	<class name="android/widget/SlidingDrawer$OnDrawerCloseListener" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onDrawerClosed()V" deprecated="29"/>
+	</class>
+	<class name="android/widget/SlidingDrawer$OnDrawerOpenListener" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onDrawerOpened()V" deprecated="29"/>
+	</class>
+	<class name="android/widget/SlidingDrawer$OnDrawerScrollListener" since="3" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onScrollEnded()V" deprecated="29"/>
+		<method name="onScrollStarted()V" deprecated="29"/>
+	</class>
+	<class name="android/widget/Space" since="14">
+		<extends name="android/view/View"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+	</class>
+	<class name="android/widget/Spinner" since="1">
+		<extends name="android/widget/AbsSpinner"/>
+		<implements name="android/content/DialogInterface$OnClickListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;I)V" since="11"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="11"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;III)V" since="21"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;IIILandroid/content/res/Resources$Theme;)V" since="23"/>
+		<method name="getDropDownHorizontalOffset()I" since="16"/>
+		<method name="getDropDownVerticalOffset()I" since="16"/>
+		<method name="getDropDownWidth()I" since="16"/>
+		<method name="getGravity()I" since="16"/>
+		<method name="getPopupBackground()Landroid/graphics/drawable/Drawable;" since="16"/>
+		<method name="getPopupContext()Landroid/content/Context;" since="23"/>
+		<method name="getPrompt()Ljava/lang/CharSequence;"/>
+		<method name="setDropDownHorizontalOffset(I)V" since="16"/>
+		<method name="setDropDownVerticalOffset(I)V" since="16"/>
+		<method name="setDropDownWidth(I)V" since="16"/>
+		<method name="setGravity(I)V" since="11"/>
+		<method name="setPopupBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
+		<method name="setPopupBackgroundResource(I)V" since="16"/>
+		<method name="setPrompt(Ljava/lang/CharSequence;)V"/>
+		<method name="setPromptId(I)V"/>
+		<field name="MODE_DIALOG" since="11"/>
+		<field name="MODE_DROPDOWN" since="11"/>
+	</class>
+	<class name="android/widget/SpinnerAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/Adapter"/>
+		<method name="getDropDownView(ILandroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View;"/>
+	</class>
+	<class name="android/widget/StackView" since="11">
+		<extends name="android/widget/AdapterViewAnimator"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="14"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+	</class>
+	<class name="android/widget/Switch" since="14">
+		<extends name="android/widget/CompoundButton"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getShowText()Z" since="21"/>
+		<method name="getSplitTrack()Z" since="21"/>
+		<method name="getSwitchMinWidth()I" since="16"/>
+		<method name="getSwitchPadding()I" since="16"/>
+		<method name="getTextOff()Ljava/lang/CharSequence;"/>
+		<method name="getTextOn()Ljava/lang/CharSequence;"/>
+		<method name="getThumbDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
+		<method name="getThumbTextPadding()I" since="16"/>
+		<method name="getThumbTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getThumbTintList()Landroid/content/res/ColorStateList;" since="23"/>
+		<method name="getThumbTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
+		<method name="getTrackDrawable()Landroid/graphics/drawable/Drawable;" since="16"/>
+		<method name="getTrackTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getTrackTintList()Landroid/content/res/ColorStateList;" since="23"/>
+		<method name="getTrackTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
+		<method name="setShowText(Z)V" since="21"/>
+		<method name="setSplitTrack(Z)V" since="21"/>
+		<method name="setSwitchMinWidth(I)V" since="16"/>
+		<method name="setSwitchPadding(I)V" since="16"/>
+		<method name="setSwitchTextAppearance(Landroid/content/Context;I)V"/>
+		<method name="setSwitchTypeface(Landroid/graphics/Typeface;)V"/>
+		<method name="setSwitchTypeface(Landroid/graphics/Typeface;I)V"/>
+		<method name="setTextOff(Ljava/lang/CharSequence;)V"/>
+		<method name="setTextOn(Ljava/lang/CharSequence;)V"/>
+		<method name="setThumbDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
+		<method name="setThumbIcon(Landroid/graphics/drawable/Icon;)V" since="31"/>
+		<method name="setThumbResource(I)V" since="16"/>
+		<method name="setThumbTextPadding(I)V" since="16"/>
+		<method name="setThumbTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setThumbTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
+		<method name="setThumbTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
+		<method name="setTrackDrawable(Landroid/graphics/drawable/Drawable;)V" since="16"/>
+		<method name="setTrackIcon(Landroid/graphics/drawable/Icon;)V" since="31"/>
+		<method name="setTrackResource(I)V" since="16"/>
+		<method name="setTrackTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setTrackTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
+		<method name="setTrackTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
+	</class>
+	<class name="android/widget/TabHost" since="1" deprecated="30">
+		<extends name="android/widget/FrameLayout"/>
+		<implements name="android/view/ViewTreeObserver$OnTouchModeChangeListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" since="21" deprecated="30"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="30"/>
+		<method name="addTab(Landroid/widget/TabHost$TabSpec;)V" deprecated="30"/>
+		<method name="clearAllTabs()V" deprecated="30"/>
+		<method name="getCurrentTab()I" deprecated="30"/>
+		<method name="getCurrentTabTag()Ljava/lang/String;" deprecated="30"/>
+		<method name="getCurrentTabView()Landroid/view/View;" deprecated="30"/>
+		<method name="getCurrentView()Landroid/view/View;" deprecated="30"/>
+		<method name="getTabContentView()Landroid/widget/FrameLayout;" deprecated="30"/>
+		<method name="getTabWidget()Landroid/widget/TabWidget;" deprecated="30"/>
+		<method name="newTabSpec(Ljava/lang/String;)Landroid/widget/TabHost$TabSpec;" deprecated="30"/>
+		<method name="setCurrentTab(I)V" deprecated="30"/>
+		<method name="setCurrentTabByTag(Ljava/lang/String;)V" deprecated="30"/>
+		<method name="setOnTabChangedListener(Landroid/widget/TabHost$OnTabChangeListener;)V" deprecated="30"/>
+		<method name="setup()V" deprecated="30"/>
+		<method name="setup(Landroid/app/LocalActivityManager;)V" deprecated="30"/>
+	</class>
+	<class name="android/widget/TabHost$OnTabChangeListener" since="1" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="onTabChanged(Ljava/lang/String;)V" deprecated="30"/>
+	</class>
+	<class name="android/widget/TabHost$TabContentFactory" since="1" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="createTabContent(Ljava/lang/String;)Landroid/view/View;" deprecated="30"/>
+	</class>
+	<class name="android/widget/TabHost$TabSpec" since="1" deprecated="30">
+		<extends name="java/lang/Object"/>
+		<method name="getTag()Ljava/lang/String;" since="4" deprecated="30"/>
+		<method name="setContent(I)Landroid/widget/TabHost$TabSpec;" deprecated="30"/>
+		<method name="setContent(Landroid/content/Intent;)Landroid/widget/TabHost$TabSpec;" deprecated="30"/>
+		<method name="setContent(Landroid/widget/TabHost$TabContentFactory;)Landroid/widget/TabHost$TabSpec;" deprecated="30"/>
+		<method name="setIndicator(Landroid/view/View;)Landroid/widget/TabHost$TabSpec;" since="4" deprecated="30"/>
+		<method name="setIndicator(Ljava/lang/CharSequence;)Landroid/widget/TabHost$TabSpec;" deprecated="30"/>
+		<method name="setIndicator(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;)Landroid/widget/TabHost$TabSpec;" deprecated="30"/>
+	</class>
+	<class name="android/widget/TabWidget" since="1" deprecated="30">
+		<extends name="android/widget/LinearLayout"/>
+		<implements name="android/view/View$OnFocusChangeListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="30"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="30"/>
+		<method name="focusCurrentTab(I)V" deprecated="30"/>
+		<method name="getChildTabViewAt(I)Landroid/view/View;" since="4" deprecated="30"/>
+		<method name="getLeftStripDrawable()Landroid/graphics/drawable/Drawable;" since="24" deprecated="30"/>
+		<method name="getRightStripDrawable()Landroid/graphics/drawable/Drawable;" since="24" deprecated="30"/>
+		<method name="getTabCount()I" since="4" deprecated="30"/>
+		<method name="isStripEnabled()Z" since="8" deprecated="30"/>
+		<method name="setCurrentTab(I)V" deprecated="30"/>
+		<method name="setDividerDrawable(I)V" since="4" deprecated="30"/>
+		<method name="setDividerDrawable(Landroid/graphics/drawable/Drawable;)V" since="4" deprecated="30"/>
+		<method name="setLeftStripDrawable(I)V" since="8" deprecated="30"/>
+		<method name="setLeftStripDrawable(Landroid/graphics/drawable/Drawable;)V" since="8" deprecated="30"/>
+		<method name="setRightStripDrawable(I)V" since="8" deprecated="30"/>
+		<method name="setRightStripDrawable(Landroid/graphics/drawable/Drawable;)V" since="8" deprecated="30"/>
+		<method name="setStripEnabled(Z)V" since="8" deprecated="30"/>
+	</class>
+	<class name="android/widget/TableLayout" since="1">
+		<extends name="android/widget/LinearLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/TableLayout$LayoutParams;"/>
+		<method name="isColumnCollapsed(I)Z"/>
+		<method name="isColumnShrinkable(I)Z"/>
+		<method name="isColumnStretchable(I)Z"/>
+		<method name="isShrinkAllColumns()Z"/>
+		<method name="isStretchAllColumns()Z"/>
+		<method name="setColumnCollapsed(IZ)V"/>
+		<method name="setColumnShrinkable(IZ)V"/>
+		<method name="setColumnStretchable(IZ)V"/>
+		<method name="setShrinkAllColumns(Z)V"/>
+		<method name="setStretchAllColumns(Z)V"/>
+	</class>
+	<class name="android/widget/TableLayout$LayoutParams" since="1">
+		<extends name="android/widget/LinearLayout$LayoutParams"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IIF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+	</class>
+	<class name="android/widget/TableRow" since="1">
+		<extends name="android/widget/LinearLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/TableRow$LayoutParams;"/>
+		<method name="getVirtualChildAt(I)Landroid/view/View;"/>
+		<method name="getVirtualChildCount()I"/>
+	</class>
+	<class name="android/widget/TableRow$LayoutParams" since="1">
+		<extends name="android/widget/LinearLayout$LayoutParams"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IIF)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+		<field name="column"/>
+		<field name="span"/>
+	</class>
+	<class name="android/widget/TextClock" since="17">
+		<extends name="android/widget/TextView"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getFormat12Hour()Ljava/lang/CharSequence;"/>
+		<method name="getFormat24Hour()Ljava/lang/CharSequence;"/>
+		<method name="getTimeZone()Ljava/lang/String;"/>
+		<method name="is24HourModeEnabled()Z"/>
+		<method name="refreshTime()V" since="30"/>
+		<method name="setFormat12Hour(Ljava/lang/CharSequence;)V"/>
+		<method name="setFormat24Hour(Ljava/lang/CharSequence;)V"/>
+		<method name="setTimeZone(Ljava/lang/String;)V"/>
+		<field name="DEFAULT_FORMAT_12_HOUR" deprecated="18"/>
+		<field name="DEFAULT_FORMAT_24_HOUR" deprecated="18"/>
+	</class>
+	<class name="android/widget/TextSwitcher" since="1">
+		<extends name="android/widget/ViewSwitcher"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="setCurrentText(Ljava/lang/CharSequence;)V"/>
+		<method name="setText(Ljava/lang/CharSequence;)V"/>
+	</class>
+	<class name="android/widget/TextView" since="1">
+		<extends name="android/view/View"/>
+		<implements name="android/view/ViewTreeObserver$OnPreDrawListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="addTextChangedListener(Landroid/text/TextWatcher;)V"/>
+		<method name="append(Ljava/lang/CharSequence;)V"/>
+		<method name="append(Ljava/lang/CharSequence;II)V"/>
+		<method name="beginBatchEdit()V" since="3"/>
+		<method name="bringPointIntoView(I)Z" since="3"/>
+		<method name="clearComposingText()V" since="3"/>
+		<method name="debug(I)V"/>
+		<method name="didTouchFocusSelect()Z" since="3"/>
+		<method name="endBatchEdit()V" since="3"/>
+		<method name="extractText(Landroid/view/inputmethod/ExtractedTextRequest;Landroid/view/inputmethod/ExtractedText;)Z" since="3"/>
+		<method name="getAutoLinkMask()I"/>
+		<method name="getAutoSizeMaxTextSize()I" since="26"/>
+		<method name="getAutoSizeMinTextSize()I" since="26"/>
+		<method name="getAutoSizeStepGranularity()I" since="26"/>
+		<method name="getAutoSizeTextAvailableSizes()[I" since="26"/>
+		<method name="getAutoSizeTextType()I" since="26"/>
+		<method name="getBreakStrategy()I" since="23"/>
+		<method name="getCompoundDrawablePadding()I"/>
+		<method name="getCompoundDrawableTintBlendMode()Landroid/graphics/BlendMode;" since="29"/>
+		<method name="getCompoundDrawableTintList()Landroid/content/res/ColorStateList;" since="23"/>
+		<method name="getCompoundDrawableTintMode()Landroid/graphics/PorterDuff$Mode;" since="23"/>
+		<method name="getCompoundDrawables()[Landroid/graphics/drawable/Drawable;"/>
+		<method name="getCompoundDrawablesRelative()[Landroid/graphics/drawable/Drawable;" since="17"/>
+		<method name="getCompoundPaddingBottom()I"/>
+		<method name="getCompoundPaddingEnd()I" since="17"/>
+		<method name="getCompoundPaddingLeft()I"/>
+		<method name="getCompoundPaddingRight()I"/>
+		<method name="getCompoundPaddingStart()I" since="17"/>
+		<method name="getCompoundPaddingTop()I"/>
+		<method name="getCurrentHintTextColor()I"/>
+		<method name="getCurrentTextColor()I"/>
+		<method name="getCustomInsertionActionModeCallback()Landroid/view/ActionMode$Callback;" since="23"/>
+		<method name="getCustomSelectionActionModeCallback()Landroid/view/ActionMode$Callback;" since="11"/>
+		<method name="getDefaultEditable()Z"/>
+		<method name="getDefaultMovementMethod()Landroid/text/method/MovementMethod;"/>
+		<method name="getEditableText()Landroid/text/Editable;" since="3"/>
+		<method name="getEllipsize()Landroid/text/TextUtils$TruncateAt;"/>
+		<method name="getError()Ljava/lang/CharSequence;"/>
+		<method name="getExtendedPaddingBottom()I"/>
+		<method name="getExtendedPaddingTop()I"/>
+		<method name="getFilters()[Landroid/text/InputFilter;"/>
+		<method name="getFirstBaselineToTopHeight()I" since="28"/>
+		<method name="getFontFeatureSettings()Ljava/lang/String;" since="21"/>
+		<method name="getFontVariationSettings()Ljava/lang/String;" since="26"/>
+		<method name="getFreezesText()Z"/>
+		<method name="getGravity()I"/>
+		<method name="getHighlightColor()I" since="16"/>
+		<method name="getHint()Ljava/lang/CharSequence;"/>
+		<method name="getHintTextColors()Landroid/content/res/ColorStateList;"/>
+		<method name="getHyphenationFrequency()I" since="23"/>
+		<method name="getImeActionId()I" since="3"/>
+		<method name="getImeActionLabel()Ljava/lang/CharSequence;" since="3"/>
+		<method name="getImeHintLocales()Landroid/os/LocaleList;" since="24"/>
+		<method name="getImeOptions()I" since="3"/>
+		<method name="getIncludeFontPadding()Z" since="16"/>
+		<method name="getInputExtras(Z)Landroid/os/Bundle;" since="3"/>
+		<method name="getInputType()I" since="3"/>
+		<method name="getJustificationMode()I" since="26"/>
+		<method name="getKeyListener()Landroid/text/method/KeyListener;"/>
+		<method name="getLastBaselineToBottomHeight()I" since="28"/>
+		<method name="getLayout()Landroid/text/Layout;"/>
+		<method name="getLetterSpacing()F" since="21"/>
+		<method name="getLineBounds(ILandroid/graphics/Rect;)I"/>
+		<method name="getLineCount()I"/>
+		<method name="getLineHeight()I"/>
+		<method name="getLineSpacingExtra()F" since="16"/>
+		<method name="getLineSpacingMultiplier()F" since="16"/>
+		<method name="getLinkTextColors()Landroid/content/res/ColorStateList;"/>
+		<method name="getLinksClickable()Z"/>
+		<method name="getMarqueeRepeatLimit()I" since="16"/>
+		<method name="getMaxEms()I" since="16"/>
+		<method name="getMaxHeight()I" since="16"/>
+		<method name="getMaxLines()I" since="16"/>
+		<method name="getMaxWidth()I" since="16"/>
+		<method name="getMinEms()I" since="16"/>
+		<method name="getMinHeight()I" since="16"/>
+		<method name="getMinLines()I" since="16"/>
+		<method name="getMinWidth()I" since="16"/>
+		<method name="getMovementMethod()Landroid/text/method/MovementMethod;"/>
+		<method name="getOffsetForPosition(FF)I" since="14"/>
+		<method name="getPaint()Landroid/text/TextPaint;"/>
+		<method name="getPaintFlags()I"/>
+		<method name="getPrivateImeOptions()Ljava/lang/String;" since="3"/>
+		<method name="getSelectionEnd()I"/>
+		<method name="getSelectionStart()I"/>
+		<method name="getShadowColor()I" since="16"/>
+		<method name="getShadowDx()F" since="16"/>
+		<method name="getShadowDy()F" since="16"/>
+		<method name="getShadowRadius()F" since="16"/>
+		<method name="getShowSoftInputOnFocus()Z" since="21"/>
+		<method name="getText()Ljava/lang/CharSequence;"/>
+		<method name="getTextClassifier()Landroid/view/textclassifier/TextClassifier;" since="26"/>
+		<method name="getTextColor(Landroid/content/Context;Landroid/content/res/TypedArray;I)I" removed="21"/>
+		<method name="getTextColors()Landroid/content/res/ColorStateList;"/>
+		<method name="getTextColors(Landroid/content/Context;Landroid/content/res/TypedArray;)Landroid/content/res/ColorStateList;" removed="21"/>
+		<method name="getTextCursorDrawable()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getTextDirectionHeuristic()Landroid/text/TextDirectionHeuristic;" since="29"/>
+		<method name="getTextLocale()Ljava/util/Locale;" since="17"/>
+		<method name="getTextLocales()Landroid/os/LocaleList;" since="24"/>
+		<method name="getTextMetricsParams()Landroid/text/PrecomputedText$Params;" since="28"/>
+		<method name="getTextScaleX()F"/>
+		<method name="getTextSelectHandle()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getTextSelectHandleLeft()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getTextSelectHandleRight()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getTextSize()F"/>
+		<method name="getTextSizeUnit()I" since="30"/>
+		<method name="getTotalPaddingBottom()I"/>
+		<method name="getTotalPaddingEnd()I" since="17"/>
+		<method name="getTotalPaddingLeft()I"/>
+		<method name="getTotalPaddingRight()I"/>
+		<method name="getTotalPaddingStart()I" since="17"/>
+		<method name="getTotalPaddingTop()I"/>
+		<method name="getTransformationMethod()Landroid/text/method/TransformationMethod;"/>
+		<method name="getTypeface()Landroid/graphics/Typeface;"/>
+		<method name="getUrls()[Landroid/text/style/URLSpan;"/>
+		<method name="hasSelection()Z"/>
+		<method name="isAllCaps()Z" since="28"/>
+		<method name="isCursorVisible()Z" since="16"/>
+		<method name="isElegantTextHeight()Z" since="28"/>
+		<method name="isFallbackLineSpacing()Z" since="28"/>
+		<method name="isHorizontallyScrollable()Z" since="29"/>
+		<method name="isInputMethodTarget()Z" since="3"/>
+		<method name="isSingleLine()Z" since="29"/>
+		<method name="isSuggestionsEnabled()Z" since="14"/>
+		<method name="isTextSelectable()Z" since="11"/>
+		<method name="length()I"/>
+		<method name="moveCursorToVisibleOffset()Z" since="3"/>
+		<method name="onBeginBatchEdit()V" since="3"/>
+		<method name="onCommitCompletion(Landroid/view/inputmethod/CompletionInfo;)V" since="3"/>
+		<method name="onCommitCorrection(Landroid/view/inputmethod/CorrectionInfo;)V" since="11"/>
+		<method name="onEditorAction(I)V" since="3"/>
+		<method name="onEndBatchEdit()V" since="3"/>
+		<method name="onPrivateIMECommand(Ljava/lang/String;Landroid/os/Bundle;)Z" since="3"/>
+		<method name="onSelectionChanged(II)V" since="3"/>
+		<method name="onTextChanged(Ljava/lang/CharSequence;III)V"/>
+		<method name="onTextContextMenuItem(I)Z" since="3"/>
+		<method name="removeTextChangedListener(Landroid/text/TextWatcher;)V"/>
+		<method name="resetResolvedDrawables()V" since="14" removed="17"/>
+		<method name="resetResolvedLayoutDirection()V" since="14" removed="16"/>
+		<method name="resolveDrawables()V" since="14" removed="17"/>
+		<method name="resolveTextDirection()V" since="14" removed="16"/>
+		<method name="setAllCaps(Z)V" since="14"/>
+		<method name="setAutoLinkMask(I)V"/>
+		<method name="setAutoSizeTextTypeUniformWithConfiguration(IIII)V" since="26"/>
+		<method name="setAutoSizeTextTypeUniformWithPresetSizes([II)V" since="26"/>
+		<method name="setAutoSizeTextTypeWithDefaults(I)V" since="26"/>
+		<method name="setBreakStrategy(I)V" since="23"/>
+		<method name="setCompoundDrawablePadding(I)V"/>
+		<method name="setCompoundDrawableTintBlendMode(Landroid/graphics/BlendMode;)V" since="29"/>
+		<method name="setCompoundDrawableTintList(Landroid/content/res/ColorStateList;)V" since="23"/>
+		<method name="setCompoundDrawableTintMode(Landroid/graphics/PorterDuff$Mode;)V" since="23"/>
+		<method name="setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" since="17"/>
+		<method name="setCompoundDrawablesRelativeWithIntrinsicBounds(IIII)V" since="17"/>
+		<method name="setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V" since="17"/>
+		<method name="setCompoundDrawablesWithIntrinsicBounds(IIII)V" since="3"/>
+		<method name="setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setCursorVisible(Z)V"/>
+		<method name="setCustomInsertionActionModeCallback(Landroid/view/ActionMode$Callback;)V" since="23"/>
+		<method name="setCustomSelectionActionModeCallback(Landroid/view/ActionMode$Callback;)V" since="11"/>
+		<method name="setEditableFactory(Landroid/text/Editable$Factory;)V"/>
+		<method name="setElegantTextHeight(Z)V" since="21"/>
+		<method name="setEllipsize(Landroid/text/TextUtils$TruncateAt;)V"/>
+		<method name="setEms(I)V"/>
+		<method name="setError(Ljava/lang/CharSequence;)V"/>
+		<method name="setError(Ljava/lang/CharSequence;Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setExtractedText(Landroid/view/inputmethod/ExtractedText;)V" since="3"/>
+		<method name="setFallbackLineSpacing(Z)V" since="28"/>
+		<method name="setFilters([Landroid/text/InputFilter;)V"/>
+		<method name="setFirstBaselineToTopHeight(I)V" since="28"/>
+		<method name="setFontFeatureSettings(Ljava/lang/String;)V" since="21"/>
+		<method name="setFontVariationSettings(Ljava/lang/String;)Z" since="26"/>
+		<method name="setFrame(IIII)Z"/>
+		<method name="setFreezesText(Z)V"/>
+		<method name="setGravity(I)V"/>
+		<method name="setHeight(I)V"/>
+		<method name="setHighlightColor(I)V"/>
+		<method name="setHint(I)V"/>
+		<method name="setHint(Ljava/lang/CharSequence;)V"/>
+		<method name="setHintTextColor(I)V"/>
+		<method name="setHintTextColor(Landroid/content/res/ColorStateList;)V"/>
+		<method name="setHorizontallyScrolling(Z)V"/>
+		<method name="setHyphenationFrequency(I)V" since="23"/>
+		<method name="setImeActionLabel(Ljava/lang/CharSequence;I)V" since="3"/>
+		<method name="setImeHintLocales(Landroid/os/LocaleList;)V" since="24"/>
+		<method name="setImeOptions(I)V" since="3"/>
+		<method name="setIncludeFontPadding(Z)V"/>
+		<method name="setInputExtras(I)V" since="3"/>
+		<method name="setInputType(I)V" since="3"/>
+		<method name="setJustificationMode(I)V" since="26"/>
+		<method name="setKeyListener(Landroid/text/method/KeyListener;)V"/>
+		<method name="setLastBaselineToBottomHeight(I)V" since="28"/>
+		<method name="setLetterSpacing(F)V" since="21"/>
+		<method name="setLineHeight(I)V" since="28"/>
+		<method name="setLineSpacing(FF)V"/>
+		<method name="setLines(I)V"/>
+		<method name="setLinkTextColor(I)V"/>
+		<method name="setLinkTextColor(Landroid/content/res/ColorStateList;)V"/>
+		<method name="setLinksClickable(Z)V"/>
+		<method name="setMarqueeRepeatLimit(I)V" since="2"/>
+		<method name="setMaxEms(I)V"/>
+		<method name="setMaxHeight(I)V"/>
+		<method name="setMaxLines(I)V"/>
+		<method name="setMaxWidth(I)V"/>
+		<method name="setMinEms(I)V"/>
+		<method name="setMinHeight(I)V"/>
+		<method name="setMinLines(I)V"/>
+		<method name="setMinWidth(I)V"/>
+		<method name="setMovementMethod(Landroid/text/method/MovementMethod;)V"/>
+		<method name="setOnEditorActionListener(Landroid/widget/TextView$OnEditorActionListener;)V" since="3"/>
+		<method name="setPaddingRelative(IIII)V" since="16"/>
+		<method name="setPaintFlags(I)V"/>
+		<method name="setPrivateImeOptions(Ljava/lang/String;)V" since="3"/>
+		<method name="setRawInputType(I)V" since="3"/>
+		<method name="setScroller(Landroid/widget/Scroller;)V"/>
+		<method name="setSelectAllOnFocus(Z)V"/>
+		<method name="setShadowLayer(FFFI)V"/>
+		<method name="setShowSoftInputOnFocus(Z)V" since="21"/>
+		<method name="setSingleLine()V"/>
+		<method name="setSingleLine(Z)V"/>
+		<method name="setSpannableFactory(Landroid/text/Spannable$Factory;)V"/>
+		<method name="setText(I)V"/>
+		<method name="setText(ILandroid/widget/TextView$BufferType;)V"/>
+		<method name="setText(Ljava/lang/CharSequence;)V"/>
+		<method name="setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V"/>
+		<method name="setText([CII)V"/>
+		<method name="setTextAppearance(I)V" since="23"/>
+		<method name="setTextAppearance(Landroid/content/Context;I)V" deprecated="23"/>
+		<method name="setTextClassifier(Landroid/view/textclassifier/TextClassifier;)V" since="26"/>
+		<method name="setTextColor(I)V"/>
+		<method name="setTextColor(Landroid/content/res/ColorStateList;)V"/>
+		<method name="setTextCursorDrawable(I)V" since="29"/>
+		<method name="setTextCursorDrawable(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setTextIsSelectable(Z)V" since="11"/>
+		<method name="setTextKeepState(Ljava/lang/CharSequence;)V"/>
+		<method name="setTextKeepState(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V"/>
+		<method name="setTextLocale(Ljava/util/Locale;)V" since="17"/>
+		<method name="setTextLocales(Landroid/os/LocaleList;)V" since="24"/>
+		<method name="setTextMetricsParams(Landroid/text/PrecomputedText$Params;)V" since="28"/>
+		<method name="setTextScaleX(F)V"/>
+		<method name="setTextSelectHandle(I)V" since="29"/>
+		<method name="setTextSelectHandle(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setTextSelectHandleLeft(I)V" since="29"/>
+		<method name="setTextSelectHandleLeft(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setTextSelectHandleRight(I)V" since="29"/>
+		<method name="setTextSelectHandleRight(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setTextSize(F)V"/>
+		<method name="setTextSize(IF)V"/>
+		<method name="setTransformationMethod(Landroid/text/method/TransformationMethod;)V"/>
+		<method name="setTypeface(Landroid/graphics/Typeface;)V"/>
+		<method name="setTypeface(Landroid/graphics/Typeface;I)V"/>
+		<method name="setWidth(I)V"/>
+		<field name="AUTO_SIZE_TEXT_TYPE_NONE" since="26"/>
+		<field name="AUTO_SIZE_TEXT_TYPE_UNIFORM" since="26"/>
+	</class>
+	<class name="android/widget/TextView$BufferType" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Landroid/widget/TextView$BufferType;"/>
+		<method name="values()[Landroid/widget/TextView$BufferType;"/>
+		<field name="EDITABLE"/>
+		<field name="NORMAL"/>
+		<field name="SPANNABLE"/>
+	</class>
+	<class name="android/widget/TextView$OnEditorActionListener" since="3">
+		<extends name="java/lang/Object"/>
+		<method name="onEditorAction(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z"/>
+	</class>
+	<class name="android/widget/TextView$SavedState" since="1">
+		<extends name="android/view/View$BaseSavedState"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/widget/ThemedSpinnerAdapter" since="23">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/SpinnerAdapter"/>
+		<method name="getDropDownViewTheme()Landroid/content/res/Resources$Theme;"/>
+		<method name="setDropDownViewTheme(Landroid/content/res/Resources$Theme;)V"/>
+	</class>
+	<class name="android/widget/TimePicker" since="1">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getCurrentHour()Ljava/lang/Integer;" deprecated="23"/>
+		<method name="getCurrentMinute()Ljava/lang/Integer;" deprecated="23"/>
+		<method name="getHour()I" since="23"/>
+		<method name="getMinute()I" since="23"/>
+		<method name="is24HourView()Z"/>
+		<method name="setCurrentHour(Ljava/lang/Integer;)V" deprecated="23"/>
+		<method name="setCurrentMinute(Ljava/lang/Integer;)V" deprecated="23"/>
+		<method name="setHour(I)V" since="23"/>
+		<method name="setIs24HourView(Ljava/lang/Boolean;)V"/>
+		<method name="setMinute(I)V" since="23"/>
+		<method name="setOnTimeChangedListener(Landroid/widget/TimePicker$OnTimeChangedListener;)V"/>
+		<method name="validateInput()Z" since="26"/>
+	</class>
+	<class name="android/widget/TimePicker$OnTimeChangedListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="onTimeChanged(Landroid/widget/TimePicker;II)V"/>
+	</class>
+	<class name="android/widget/Toast" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="addCallback(Landroid/widget/Toast$Callback;)V" since="30"/>
+		<method name="cancel()V"/>
+		<method name="getDuration()I"/>
+		<method name="getGravity()I"/>
+		<method name="getHorizontalMargin()F"/>
+		<method name="getVerticalMargin()F"/>
+		<method name="getView()Landroid/view/View;" deprecated="30"/>
+		<method name="getXOffset()I"/>
+		<method name="getYOffset()I"/>
+		<method name="makeText(Landroid/content/Context;II)Landroid/widget/Toast;"/>
+		<method name="makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;"/>
+		<method name="removeCallback(Landroid/widget/Toast$Callback;)V" since="30"/>
+		<method name="setDuration(I)V"/>
+		<method name="setGravity(III)V"/>
+		<method name="setMargin(FF)V"/>
+		<method name="setText(I)V"/>
+		<method name="setText(Ljava/lang/CharSequence;)V"/>
+		<method name="setView(Landroid/view/View;)V" deprecated="30"/>
+		<method name="show()V"/>
+		<field name="LENGTH_LONG"/>
+		<field name="LENGTH_SHORT"/>
+	</class>
+	<class name="android/widget/Toast$Callback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="onToastHidden()V"/>
+		<method name="onToastShown()V"/>
+	</class>
+	<class name="android/widget/ToggleButton" since="1">
+		<extends name="android/widget/CompoundButton"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="getDisabledAlpha()F" since="29"/>
+		<method name="getTextOff()Ljava/lang/CharSequence;"/>
+		<method name="getTextOn()Ljava/lang/CharSequence;"/>
+		<method name="setTextOff(Ljava/lang/CharSequence;)V"/>
+		<method name="setTextOn(Ljava/lang/CharSequence;)V"/>
+	</class>
+	<class name="android/widget/Toolbar" since="21">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V"/>
+		<method name="collapseActionView()V"/>
+		<method name="dismissPopupMenus()V"/>
+		<method name="generateDefaultLayoutParams()Landroid/widget/Toolbar$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/util/AttributeSet;)Landroid/widget/Toolbar$LayoutParams;"/>
+		<method name="generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/widget/Toolbar$LayoutParams;"/>
+		<method name="getCollapseContentDescription()Ljava/lang/CharSequence;" since="29"/>
+		<method name="getCollapseIcon()Landroid/graphics/drawable/Drawable;" since="29"/>
+		<method name="getContentInsetEnd()I"/>
+		<method name="getContentInsetEndWithActions()I" since="24"/>
+		<method name="getContentInsetLeft()I"/>
+		<method name="getContentInsetRight()I"/>
+		<method name="getContentInsetStart()I"/>
+		<method name="getContentInsetStartWithNavigation()I" since="24"/>
+		<method name="getCurrentContentInsetEnd()I" since="24"/>
+		<method name="getCurrentContentInsetLeft()I" since="24"/>
+		<method name="getCurrentContentInsetRight()I" since="24"/>
+		<method name="getCurrentContentInsetStart()I" since="24"/>
+		<method name="getLogo()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getLogoDescription()Ljava/lang/CharSequence;"/>
+		<method name="getMenu()Landroid/view/Menu;"/>
+		<method name="getNavigationContentDescription()Ljava/lang/CharSequence;"/>
+		<method name="getNavigationIcon()Landroid/graphics/drawable/Drawable;"/>
+		<method name="getOverflowIcon()Landroid/graphics/drawable/Drawable;" since="23"/>
+		<method name="getPopupTheme()I"/>
+		<method name="getSubtitle()Ljava/lang/CharSequence;"/>
+		<method name="getTitle()Ljava/lang/CharSequence;"/>
+		<method name="getTitleMarginBottom()I" since="24"/>
+		<method name="getTitleMarginEnd()I" since="24"/>
+		<method name="getTitleMarginStart()I" since="24"/>
+		<method name="getTitleMarginTop()I" since="24"/>
+		<method name="hasExpandedActionView()Z"/>
+		<method name="hideOverflowMenu()Z"/>
+		<method name="inflateMenu(I)V"/>
+		<method name="isOverflowMenuShowing()Z"/>
+		<method name="setCollapseContentDescription(I)V" since="29"/>
+		<method name="setCollapseContentDescription(Ljava/lang/CharSequence;)V" since="29"/>
+		<method name="setCollapseIcon(I)V" since="29"/>
+		<method name="setCollapseIcon(Landroid/graphics/drawable/Drawable;)V" since="29"/>
+		<method name="setContentInsetEndWithActions(I)V" since="24"/>
+		<method name="setContentInsetStartWithNavigation(I)V" since="24"/>
+		<method name="setContentInsetsAbsolute(II)V"/>
+		<method name="setContentInsetsRelative(II)V"/>
+		<method name="setLogo(I)V"/>
+		<method name="setLogo(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setLogoDescription(I)V"/>
+		<method name="setLogoDescription(Ljava/lang/CharSequence;)V"/>
+		<method name="setNavigationContentDescription(I)V"/>
+		<method name="setNavigationContentDescription(Ljava/lang/CharSequence;)V"/>
+		<method name="setNavigationIcon(I)V"/>
+		<method name="setNavigationIcon(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setNavigationOnClickListener(Landroid/view/View$OnClickListener;)V"/>
+		<method name="setOnMenuItemClickListener(Landroid/widget/Toolbar$OnMenuItemClickListener;)V"/>
+		<method name="setOverflowIcon(Landroid/graphics/drawable/Drawable;)V" since="23"/>
+		<method name="setPopupTheme(I)V"/>
+		<method name="setSubtitle(I)V"/>
+		<method name="setSubtitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setSubtitleTextAppearance(Landroid/content/Context;I)V"/>
+		<method name="setSubtitleTextColor(I)V"/>
+		<method name="setTitle(I)V"/>
+		<method name="setTitle(Ljava/lang/CharSequence;)V"/>
+		<method name="setTitleMargin(IIII)V" since="24"/>
+		<method name="setTitleMarginBottom(I)V" since="24"/>
+		<method name="setTitleMarginEnd(I)V" since="24"/>
+		<method name="setTitleMarginStart(I)V" since="24"/>
+		<method name="setTitleMarginTop(I)V" since="24"/>
+		<method name="setTitleTextAppearance(Landroid/content/Context;I)V"/>
+		<method name="setTitleTextColor(I)V"/>
+		<method name="showOverflowMenu()Z"/>
+	</class>
+	<class name="android/widget/Toolbar$LayoutParams" since="21">
+		<extends name="android/app/ActionBar$LayoutParams"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(Landroid/app/ActionBar$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$MarginLayoutParams;)V"/>
+		<method name="&lt;init>(Landroid/widget/Toolbar$LayoutParams;)V"/>
+	</class>
+	<class name="android/widget/Toolbar$OnMenuItemClickListener" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="onMenuItemClick(Landroid/view/MenuItem;)Z"/>
+	</class>
+	<class name="android/widget/TwoLineListItem" since="1" deprecated="17">
+		<extends name="android/widget/RelativeLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="getText1()Landroid/widget/TextView;" deprecated="29"/>
+		<method name="getText2()Landroid/widget/TextView;" deprecated="29"/>
+	</class>
+	<class name="android/widget/VideoView" since="1">
+		<extends name="android/view/SurfaceView"/>
+		<implements name="android/widget/MediaController$MediaPlayerControl"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21"/>
+		<method name="addSubtitleSource(Ljava/io/InputStream;Landroid/media/MediaFormat;)V" since="19"/>
+		<method name="resolveAdjustedSize(II)I"/>
+		<method name="resume()V" since="8"/>
+		<method name="setAudioAttributes(Landroid/media/AudioAttributes;)V" since="26"/>
+		<method name="setAudioFocusRequest(I)V" since="26"/>
+		<method name="setMediaController(Landroid/widget/MediaController;)V"/>
+		<method name="setOnCompletionListener(Landroid/media/MediaPlayer$OnCompletionListener;)V"/>
+		<method name="setOnErrorListener(Landroid/media/MediaPlayer$OnErrorListener;)V"/>
+		<method name="setOnInfoListener(Landroid/media/MediaPlayer$OnInfoListener;)V" since="17"/>
+		<method name="setOnPreparedListener(Landroid/media/MediaPlayer$OnPreparedListener;)V"/>
+		<method name="setVideoPath(Ljava/lang/String;)V"/>
+		<method name="setVideoURI(Landroid/net/Uri;)V"/>
+		<method name="setVideoURI(Landroid/net/Uri;Ljava/util/Map;)V" since="21"/>
+		<method name="stopPlayback()V"/>
+		<method name="suspend()V" since="8"/>
+	</class>
+	<class name="android/widget/ViewAnimator" since="1">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getAnimateFirstView()Z" since="17"/>
+		<method name="getCurrentView()Landroid/view/View;"/>
+		<method name="getDisplayedChild()I"/>
+		<method name="getInAnimation()Landroid/view/animation/Animation;"/>
+		<method name="getOutAnimation()Landroid/view/animation/Animation;"/>
+		<method name="setAnimateFirstView(Z)V"/>
+		<method name="setDisplayedChild(I)V"/>
+		<method name="setInAnimation(Landroid/content/Context;I)V"/>
+		<method name="setInAnimation(Landroid/view/animation/Animation;)V"/>
+		<method name="setOutAnimation(Landroid/content/Context;I)V"/>
+		<method name="setOutAnimation(Landroid/view/animation/Animation;)V"/>
+		<method name="showNext()V"/>
+		<method name="showPrevious()V"/>
+	</class>
+	<class name="android/widget/ViewFlipper" since="1">
+		<extends name="android/widget/ViewAnimator"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getFlipInterval()I" since="29"/>
+		<method name="isAutoStart()Z" since="7"/>
+		<method name="isFlipping()Z"/>
+		<method name="setAutoStart(Z)V" since="7"/>
+		<method name="setFlipInterval(I)V"/>
+		<method name="startFlipping()V"/>
+		<method name="stopFlipping()V"/>
+	</class>
+	<class name="android/widget/ViewSwitcher" since="1">
+		<extends name="android/widget/ViewAnimator"/>
+		<method name="&lt;init>(Landroid/content/Context;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="getNextView()Landroid/view/View;"/>
+		<method name="reset()V"/>
+		<method name="setFactory(Landroid/widget/ViewSwitcher$ViewFactory;)V"/>
+	</class>
+	<class name="android/widget/ViewSwitcher$ViewFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="makeView()Landroid/view/View;"/>
+	</class>
+	<class name="android/widget/WrapperListAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="android/widget/ListAdapter"/>
+		<method name="getWrappedAdapter()Landroid/widget/ListAdapter;"/>
+	</class>
+	<class name="android/widget/ZoomButton" since="1" deprecated="26">
+		<extends name="android/widget/ImageButton"/>
+		<implements name="android/view/View$OnLongClickListener"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;II)V" since="21" deprecated="29"/>
+		<method name="setZoomSpeed(J)V" deprecated="29"/>
+	</class>
+	<class name="android/widget/ZoomButtonsController" since="4" deprecated="26">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/View$OnTouchListener"/>
+		<method name="&lt;init>(Landroid/view/View;)V" deprecated="29"/>
+		<method name="getContainer()Landroid/view/ViewGroup;" deprecated="29"/>
+		<method name="getZoomControls()Landroid/view/View;" deprecated="29"/>
+		<method name="isAutoDismissed()Z" deprecated="29"/>
+		<method name="isVisible()Z" deprecated="29"/>
+		<method name="setAutoDismissed(Z)V" deprecated="29"/>
+		<method name="setFocusable(Z)V" deprecated="29"/>
+		<method name="setOnZoomListener(Landroid/widget/ZoomButtonsController$OnZoomListener;)V" deprecated="29"/>
+		<method name="setVisible(Z)V" deprecated="29"/>
+		<method name="setZoomInEnabled(Z)V" deprecated="29"/>
+		<method name="setZoomOutEnabled(Z)V" deprecated="29"/>
+		<method name="setZoomSpeed(J)V" deprecated="29"/>
+	</class>
+	<class name="android/widget/ZoomButtonsController$OnZoomListener" since="4" deprecated="29">
+		<extends name="java/lang/Object"/>
+		<method name="onVisibilityChanged(Z)V" deprecated="29"/>
+		<method name="onZoom(Z)V" deprecated="29"/>
+	</class>
+	<class name="android/widget/ZoomControls" since="1" deprecated="29">
+		<extends name="android/widget/LinearLayout"/>
+		<method name="&lt;init>(Landroid/content/Context;)V" deprecated="29"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V" deprecated="29"/>
+		<method name="hide()V" deprecated="29"/>
+		<method name="setIsZoomInEnabled(Z)V" deprecated="29"/>
+		<method name="setIsZoomOutEnabled(Z)V" deprecated="29"/>
+		<method name="setOnZoomInClickListener(Landroid/view/View$OnClickListener;)V" deprecated="29"/>
+		<method name="setOnZoomOutClickListener(Landroid/view/View$OnClickListener;)V" deprecated="29"/>
+		<method name="setZoomSpeed(J)V" deprecated="29"/>
+		<method name="show()V" deprecated="29"/>
+	</class>
+	<class name="android/widget/inline/InlineContentView" since="30">
+		<extends name="android/view/ViewGroup"/>
+		<method name="getSurfaceControl()Landroid/view/SurfaceControl;"/>
+		<method name="isZOrderedOnTop()Z"/>
+		<method name="setSurfaceControlCallback(Landroid/widget/inline/InlineContentView$SurfaceControlCallback;)V"/>
+		<method name="setZOrderedOnTop(Z)Z"/>
+	</class>
+	<class name="android/widget/inline/InlineContentView$SurfaceControlCallback" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onCreated(Landroid/view/SurfaceControl;)V"/>
+		<method name="onDestroyed(Landroid/view/SurfaceControl;)V"/>
+	</class>
+	<class name="android/widget/inline/InlinePresentationSpec" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getMaxSize()Landroid/util/Size;"/>
+		<method name="getMinSize()Landroid/util/Size;"/>
+		<method name="getStyle()Landroid/os/Bundle;"/>
+		<field name="CREATOR"/>
+	</class>
+	<class name="android/widget/inline/InlinePresentationSpec$Builder" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Landroid/util/Size;Landroid/util/Size;)V"/>
+		<method name="build()Landroid/widget/inline/InlinePresentationSpec;"/>
+		<method name="setStyle(Landroid/os/Bundle;)Landroid/widget/inline/InlinePresentationSpec$Builder;"/>
+	</class>
+	<class name="android/window/SplashScreen" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="clearOnExitAnimationListener()V"/>
+		<method name="setOnExitAnimationListener(Landroid/window/SplashScreen$OnExitAnimationListener;)V"/>
+		<method name="setSplashScreenTheme(I)V"/>
+	</class>
+	<class name="android/window/SplashScreen$OnExitAnimationListener" since="31">
+		<extends name="java/lang/Object"/>
+		<method name="onSplashScreenExit(Landroid/window/SplashScreenView;)V"/>
+	</class>
+	<class name="android/window/SplashScreenView" since="31">
+		<extends name="android/widget/FrameLayout"/>
+		<method name="getIconAnimationDuration()Ljava/time/Duration;"/>
+		<method name="getIconAnimationStart()Ljava/time/Instant;"/>
+		<method name="getIconView()Landroid/view/View;"/>
+		<method name="remove()V"/>
+	</class>
+	<class name="com/android/internal/util/Predicate" since="1" deprecated="26" removed="28">
+		<extends name="java/lang/Object"/>
+		<method name="apply(Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="com/google/android/maps/GeoPoint" since="1" removed="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getLatitudeE6()I"/>
+		<method name="getLongitudeE6()I"/>
+	</class>
+	<class name="com/google/android/maps/ItemizedOverlay" since="1" removed="3">
+		<extends name="com/google/android/maps/Overlay"/>
+		<method name="&lt;init>(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="boundCenter(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="boundCenterBottom(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="createItem(I)Lcom/google/android/maps/OverlayItem;"/>
+		<method name="getCenter()Lcom/google/android/maps/GeoPoint;"/>
+		<method name="getFocus()Lcom/google/android/maps/OverlayItem;"/>
+		<method name="getIndexToDraw(I)I"/>
+		<method name="getItem(I)Lcom/google/android/maps/OverlayItem;"/>
+		<method name="getLastFocusedIndex()I"/>
+		<method name="getLatSpanE6()I"/>
+		<method name="getLonSpanE6()I"/>
+		<method name="hitTest(Lcom/google/android/maps/OverlayItem;Landroid/graphics/drawable/Drawable;II)Z"/>
+		<method name="nextFocus(Z)Lcom/google/android/maps/OverlayItem;"/>
+		<method name="onTap(I)Z"/>
+		<method name="populate()V"/>
+		<method name="setDrawFocusedItem(Z)V"/>
+		<method name="setFocus(Lcom/google/android/maps/OverlayItem;)V"/>
+		<method name="setLastFocusedIndex(I)V"/>
+		<method name="setOnFocusChangeListener(Lcom/google/android/maps/ItemizedOverlay$OnFocusChangeListener;)V"/>
+		<method name="size()I"/>
+	</class>
+	<class name="com/google/android/maps/ItemizedOverlay$OnFocusChangeListener" since="1" removed="3">
+		<extends name="java/lang/Object"/>
+		<method name="onFocusChanged(Lcom/google/android/maps/ItemizedOverlay;Lcom/google/android/maps/OverlayItem;)V"/>
+	</class>
+	<class name="com/google/android/maps/MapActivity" since="1" removed="3">
+		<extends name="android/app/Activity"/>
+		<method name="&lt;init>()V"/>
+		<method name="isLocationDisplayed()Z"/>
+		<method name="isRouteDisplayed()Z"/>
+	</class>
+	<class name="com/google/android/maps/MapController" since="1" removed="3">
+		<extends name="java/lang/Object"/>
+		<implements name="android/view/View$OnKeyListener"/>
+		<method name="animateTo(Lcom/google/android/maps/GeoPoint;)V"/>
+		<method name="animateTo(Lcom/google/android/maps/GeoPoint;Landroid/os/Message;)V"/>
+		<method name="animateTo(Lcom/google/android/maps/GeoPoint;Ljava/lang/Runnable;)V"/>
+		<method name="scrollBy(II)V"/>
+		<method name="setCenter(Lcom/google/android/maps/GeoPoint;)V"/>
+		<method name="setZoom(I)I"/>
+		<method name="stopAnimation(Z)V"/>
+		<method name="stopPanning()V"/>
+		<method name="zoomIn()Z"/>
+		<method name="zoomInFixing(II)Z"/>
+		<method name="zoomOut()Z"/>
+		<method name="zoomOutFixing(II)Z"/>
+		<method name="zoomToSpan(II)V"/>
+	</class>
+	<class name="com/google/android/maps/MapView" since="1" removed="3">
+		<extends name="android/view/ViewGroup"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V"/>
+		<method name="canCoverCenter()Z"/>
+		<method name="displayZoomControls(Z)V"/>
+		<method name="generateDefaultLayoutParams()Lcom/google/android/maps/MapView$LayoutParams;"/>
+		<method name="getController()Lcom/google/android/maps/MapController;"/>
+		<method name="getLatitudeSpan()I"/>
+		<method name="getLongitudeSpan()I"/>
+		<method name="getMapCenter()Lcom/google/android/maps/GeoPoint;"/>
+		<method name="getMaxZoomLevel()I"/>
+		<method name="getOverlays()Ljava/util/List;"/>
+		<method name="getProjection()Lcom/google/android/maps/Projection;"/>
+		<method name="getZoomControls()Landroid/view/View;"/>
+		<method name="getZoomLevel()I"/>
+		<method name="isSatellite()Z"/>
+		<method name="isStreetView()Z"/>
+		<method name="isTraffic()Z"/>
+		<method name="onRestoreInstanceState(Landroid/os/Bundle;)V"/>
+		<method name="onSaveInstanceState(Landroid/os/Bundle;)V"/>
+		<method name="preLoad()V"/>
+		<method name="setReticleDrawMode(Lcom/google/android/maps/MapView$ReticleDrawMode;)V"/>
+		<method name="setSatellite(Z)V"/>
+		<method name="setStreetView(Z)V"/>
+		<method name="setTraffic(Z)V"/>
+	</class>
+	<class name="com/google/android/maps/MapView$LayoutParams" since="1" removed="3">
+		<extends name="android/view/ViewGroup$LayoutParams"/>
+		<method name="&lt;init>(IIIII)V"/>
+		<method name="&lt;init>(IILcom/google/android/maps/GeoPoint;I)V"/>
+		<method name="&lt;init>(IILcom/google/android/maps/GeoPoint;III)V"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/util/AttributeSet;)V"/>
+		<method name="&lt;init>(Landroid/view/ViewGroup$LayoutParams;)V"/>
+		<method name="debug(Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="BOTTOM"/>
+		<field name="BOTTOM_CENTER"/>
+		<field name="CENTER"/>
+		<field name="CENTER_HORIZONTAL"/>
+		<field name="CENTER_VERTICAL"/>
+		<field name="LEFT"/>
+		<field name="MODE_MAP"/>
+		<field name="MODE_VIEW"/>
+		<field name="RIGHT"/>
+		<field name="TOP"/>
+		<field name="TOP_LEFT"/>
+		<field name="alignment"/>
+		<field name="mode"/>
+		<field name="point"/>
+		<field name="x"/>
+		<field name="y"/>
+	</class>
+	<class name="com/google/android/maps/MapView$ReticleDrawMode" since="1" removed="3">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Lcom/google/android/maps/MapView$ReticleDrawMode;"/>
+		<method name="values()[Lcom/google/android/maps/MapView$ReticleDrawMode;"/>
+		<field name="DRAW_RETICLE_NEVER"/>
+		<field name="DRAW_RETICLE_OVER"/>
+		<field name="DRAW_RETICLE_UNDER"/>
+	</class>
+	<class name="com/google/android/maps/MyLocationOverlay" since="1" removed="3">
+		<extends name="com/google/android/maps/Overlay"/>
+		<implements name="android/hardware/SensorListener"/>
+		<implements name="android/location/LocationListener"/>
+		<method name="&lt;init>(Landroid/content/Context;Lcom/google/android/maps/MapView;)V"/>
+		<method name="disableCompass()V"/>
+		<method name="disableMyLocation()V"/>
+		<method name="dispatchTap()Z"/>
+		<method name="drawCompass(Landroid/graphics/Canvas;F)V"/>
+		<method name="drawMyLocation(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;Landroid/location/Location;Lcom/google/android/maps/GeoPoint;J)V"/>
+		<method name="enableCompass()Z"/>
+		<method name="enableMyLocation()Z"/>
+		<method name="getLastFix()Landroid/location/Location;"/>
+		<method name="getMyLocation()Lcom/google/android/maps/GeoPoint;"/>
+		<method name="getOrientation()F"/>
+		<method name="isCompassEnabled()Z"/>
+		<method name="isMyLocationEnabled()Z"/>
+		<method name="runOnFirstFix(Ljava/lang/Runnable;)Z"/>
+	</class>
+	<class name="com/google/android/maps/Overlay" since="1" removed="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="draw(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;Z)V"/>
+		<method name="draw(Landroid/graphics/Canvas;Lcom/google/android/maps/MapView;ZJ)Z"/>
+		<method name="drawAt(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIZ)V"/>
+		<method name="onKeyDown(ILandroid/view/KeyEvent;Lcom/google/android/maps/MapView;)Z"/>
+		<method name="onKeyUp(ILandroid/view/KeyEvent;Lcom/google/android/maps/MapView;)Z"/>
+		<method name="onTap(Lcom/google/android/maps/GeoPoint;Lcom/google/android/maps/MapView;)Z"/>
+		<method name="onTouchEvent(Landroid/view/MotionEvent;Lcom/google/android/maps/MapView;)Z"/>
+		<method name="onTrackballEvent(Landroid/view/MotionEvent;Lcom/google/android/maps/MapView;)Z"/>
+		<field name="SHADOW_X_SKEW"/>
+		<field name="SHADOW_Y_SCALE"/>
+	</class>
+	<class name="com/google/android/maps/OverlayItem" since="1" removed="3">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lcom/google/android/maps/GeoPoint;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getMarker(I)Landroid/graphics/drawable/Drawable;"/>
+		<method name="getPoint()Lcom/google/android/maps/GeoPoint;"/>
+		<method name="getSnippet()Ljava/lang/String;"/>
+		<method name="getTitle()Ljava/lang/String;"/>
+		<method name="routableAddress()Ljava/lang/String;"/>
+		<method name="setMarker(Landroid/graphics/drawable/Drawable;)V"/>
+		<method name="setState(Landroid/graphics/drawable/Drawable;I)V"/>
+		<field name="ITEM_STATE_FOCUSED_MASK"/>
+		<field name="ITEM_STATE_PRESSED_MASK"/>
+		<field name="ITEM_STATE_SELECTED_MASK"/>
+		<field name="mMarker"/>
+		<field name="mPoint"/>
+		<field name="mSnippet"/>
+		<field name="mTitle"/>
+	</class>
+	<class name="com/google/android/maps/Projection" since="1" removed="3">
+		<extends name="java/lang/Object"/>
+		<method name="fromPixels(II)Lcom/google/android/maps/GeoPoint;"/>
+		<method name="metersToEquatorPixels(F)F"/>
+		<method name="toPixels(Lcom/google/android/maps/GeoPoint;Landroid/graphics/Point;)Landroid/graphics/Point;"/>
+	</class>
+	<class name="com/google/android/maps/TrackballGestureDetector" since="1" removed="3">
+		<extends name="java/lang/Object"/>
+		<method name="analyze(Landroid/view/MotionEvent;)V"/>
+		<method name="getCurrentDownX()F"/>
+		<method name="getCurrentDownY()F"/>
+		<method name="getFirstDownX()F"/>
+		<method name="getFirstDownY()F"/>
+		<method name="isDoubleTap()Z"/>
+		<method name="isScroll()Z"/>
+		<method name="isTap()Z"/>
+		<method name="registerLongPressCallback(Ljava/lang/Runnable;)V"/>
+		<method name="scrollX()F"/>
+		<method name="scrollY()F"/>
+	</class>
+	<class name="dalvik/annotation/TestTarget" since="1" deprecated="14">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="conceptName()Ljava/lang/String;" since="3" deprecated="29"/>
+		<method name="methodArgs()[Ljava/lang/Class;" deprecated="29"/>
+		<method name="methodName()Ljava/lang/String;" deprecated="29"/>
+	</class>
+	<class name="dalvik/annotation/TestTargetClass" since="1" deprecated="14">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="value()Ljava/lang/Class;" deprecated="29"/>
+	</class>
+	<class name="dalvik/bytecode/OpcodeInfo" since="11">
+		<extends name="java/lang/Object"/>
+		<field name="MAXIMUM_PACKED_VALUE"/>
+		<field name="MAXIMUM_VALUE"/>
+	</class>
+	<class name="dalvik/bytecode/Opcodes" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="OP_ADD_DOUBLE"/>
+		<field name="OP_ADD_DOUBLE_2ADDR"/>
+		<field name="OP_ADD_FLOAT"/>
+		<field name="OP_ADD_FLOAT_2ADDR"/>
+		<field name="OP_ADD_INT"/>
+		<field name="OP_ADD_INT_2ADDR"/>
+		<field name="OP_ADD_INT_LIT16"/>
+		<field name="OP_ADD_INT_LIT8"/>
+		<field name="OP_ADD_LONG"/>
+		<field name="OP_ADD_LONG_2ADDR"/>
+		<field name="OP_AGET"/>
+		<field name="OP_AGET_BOOLEAN"/>
+		<field name="OP_AGET_BYTE"/>
+		<field name="OP_AGET_CHAR"/>
+		<field name="OP_AGET_OBJECT"/>
+		<field name="OP_AGET_SHORT"/>
+		<field name="OP_AGET_WIDE"/>
+		<field name="OP_AND_INT"/>
+		<field name="OP_AND_INT_2ADDR"/>
+		<field name="OP_AND_INT_LIT16"/>
+		<field name="OP_AND_INT_LIT8"/>
+		<field name="OP_AND_LONG"/>
+		<field name="OP_AND_LONG_2ADDR"/>
+		<field name="OP_APUT"/>
+		<field name="OP_APUT_BOOLEAN"/>
+		<field name="OP_APUT_BYTE"/>
+		<field name="OP_APUT_CHAR"/>
+		<field name="OP_APUT_OBJECT"/>
+		<field name="OP_APUT_SHORT"/>
+		<field name="OP_APUT_WIDE"/>
+		<field name="OP_ARRAY_LENGTH"/>
+		<field name="OP_BREAKPOINT" since="8" deprecated="15"/>
+		<field name="OP_CHECK_CAST"/>
+		<field name="OP_CHECK_CAST_JUMBO" since="11"/>
+		<field name="OP_CMPG_DOUBLE"/>
+		<field name="OP_CMPG_FLOAT"/>
+		<field name="OP_CMPL_DOUBLE"/>
+		<field name="OP_CMPL_FLOAT"/>
+		<field name="OP_CMP_LONG"/>
+		<field name="OP_CONST"/>
+		<field name="OP_CONST_16"/>
+		<field name="OP_CONST_4"/>
+		<field name="OP_CONST_CLASS"/>
+		<field name="OP_CONST_CLASS_JUMBO" since="11"/>
+		<field name="OP_CONST_HIGH16"/>
+		<field name="OP_CONST_METHOD_HANDLE" since="28"/>
+		<field name="OP_CONST_METHOD_TYPE" since="28"/>
+		<field name="OP_CONST_STRING"/>
+		<field name="OP_CONST_STRING_JUMBO"/>
+		<field name="OP_CONST_WIDE"/>
+		<field name="OP_CONST_WIDE_16"/>
+		<field name="OP_CONST_WIDE_32"/>
+		<field name="OP_CONST_WIDE_HIGH16"/>
+		<field name="OP_DIV_DOUBLE"/>
+		<field name="OP_DIV_DOUBLE_2ADDR"/>
+		<field name="OP_DIV_FLOAT"/>
+		<field name="OP_DIV_FLOAT_2ADDR"/>
+		<field name="OP_DIV_INT"/>
+		<field name="OP_DIV_INT_2ADDR"/>
+		<field name="OP_DIV_INT_LIT16"/>
+		<field name="OP_DIV_INT_LIT8"/>
+		<field name="OP_DIV_LONG"/>
+		<field name="OP_DIV_LONG_2ADDR"/>
+		<field name="OP_DOUBLE_TO_FLOAT"/>
+		<field name="OP_DOUBLE_TO_INT"/>
+		<field name="OP_DOUBLE_TO_LONG"/>
+		<field name="OP_EXECUTE_INLINE" deprecated="15"/>
+		<field name="OP_EXECUTE_INLINE_RANGE" since="8" deprecated="15"/>
+		<field name="OP_FILLED_NEW_ARRAY"/>
+		<field name="OP_FILLED_NEW_ARRAY_JUMBO" since="11"/>
+		<field name="OP_FILLED_NEW_ARRAY_RANGE"/>
+		<field name="OP_FILL_ARRAY_DATA"/>
+		<field name="OP_FLOAT_TO_DOUBLE"/>
+		<field name="OP_FLOAT_TO_INT"/>
+		<field name="OP_FLOAT_TO_LONG"/>
+		<field name="OP_GOTO"/>
+		<field name="OP_GOTO_16"/>
+		<field name="OP_GOTO_32"/>
+		<field name="OP_IF_EQ"/>
+		<field name="OP_IF_EQZ"/>
+		<field name="OP_IF_GE"/>
+		<field name="OP_IF_GEZ"/>
+		<field name="OP_IF_GT"/>
+		<field name="OP_IF_GTZ"/>
+		<field name="OP_IF_LE"/>
+		<field name="OP_IF_LEZ"/>
+		<field name="OP_IF_LT"/>
+		<field name="OP_IF_LTZ"/>
+		<field name="OP_IF_NE"/>
+		<field name="OP_IF_NEZ"/>
+		<field name="OP_IGET"/>
+		<field name="OP_IGET_BOOLEAN"/>
+		<field name="OP_IGET_BOOLEAN_JUMBO" since="11"/>
+		<field name="OP_IGET_BYTE"/>
+		<field name="OP_IGET_BYTE_JUMBO" since="11"/>
+		<field name="OP_IGET_CHAR"/>
+		<field name="OP_IGET_CHAR_JUMBO" since="11"/>
+		<field name="OP_IGET_JUMBO" since="11"/>
+		<field name="OP_IGET_OBJECT"/>
+		<field name="OP_IGET_OBJECT_JUMBO" since="11"/>
+		<field name="OP_IGET_OBJECT_QUICK" deprecated="15"/>
+		<field name="OP_IGET_QUICK" deprecated="15"/>
+		<field name="OP_IGET_SHORT"/>
+		<field name="OP_IGET_SHORT_JUMBO" since="11"/>
+		<field name="OP_IGET_WIDE"/>
+		<field name="OP_IGET_WIDE_JUMBO" since="11"/>
+		<field name="OP_IGET_WIDE_QUICK" deprecated="15"/>
+		<field name="OP_IGET_WIDE_VOLATILE" since="9" deprecated="15"/>
+		<field name="OP_INSTANCE_OF"/>
+		<field name="OP_INSTANCE_OF_JUMBO" since="11"/>
+		<field name="OP_INT_TO_BYTE"/>
+		<field name="OP_INT_TO_CHAR"/>
+		<field name="OP_INT_TO_DOUBLE"/>
+		<field name="OP_INT_TO_FLOAT"/>
+		<field name="OP_INT_TO_LONG"/>
+		<field name="OP_INT_TO_SHORT"/>
+		<field name="OP_INVOKE_CUSTOM" since="26"/>
+		<field name="OP_INVOKE_CUSTOM_RANGE" since="26"/>
+		<field name="OP_INVOKE_DIRECT"/>
+		<field name="OP_INVOKE_DIRECT_EMPTY" deprecated="15"/>
+		<field name="OP_INVOKE_DIRECT_JUMBO" since="11"/>
+		<field name="OP_INVOKE_DIRECT_RANGE"/>
+		<field name="OP_INVOKE_INTERFACE"/>
+		<field name="OP_INVOKE_INTERFACE_JUMBO" since="11"/>
+		<field name="OP_INVOKE_INTERFACE_RANGE"/>
+		<field name="OP_INVOKE_POLYMORPHIC" since="26"/>
+		<field name="OP_INVOKE_POLYMORPHIC_RANGE" since="26"/>
+		<field name="OP_INVOKE_STATIC"/>
+		<field name="OP_INVOKE_STATIC_JUMBO" since="11"/>
+		<field name="OP_INVOKE_STATIC_RANGE"/>
+		<field name="OP_INVOKE_SUPER"/>
+		<field name="OP_INVOKE_SUPER_JUMBO" since="11"/>
+		<field name="OP_INVOKE_SUPER_QUICK" deprecated="15"/>
+		<field name="OP_INVOKE_SUPER_QUICK_RANGE" deprecated="15"/>
+		<field name="OP_INVOKE_SUPER_RANGE"/>
+		<field name="OP_INVOKE_VIRTUAL"/>
+		<field name="OP_INVOKE_VIRTUAL_JUMBO" since="11"/>
+		<field name="OP_INVOKE_VIRTUAL_QUICK" deprecated="15"/>
+		<field name="OP_INVOKE_VIRTUAL_QUICK_RANGE" deprecated="15"/>
+		<field name="OP_INVOKE_VIRTUAL_RANGE"/>
+		<field name="OP_IPUT"/>
+		<field name="OP_IPUT_BOOLEAN"/>
+		<field name="OP_IPUT_BOOLEAN_JUMBO" since="11"/>
+		<field name="OP_IPUT_BYTE"/>
+		<field name="OP_IPUT_BYTE_JUMBO" since="11"/>
+		<field name="OP_IPUT_CHAR"/>
+		<field name="OP_IPUT_CHAR_JUMBO" since="11"/>
+		<field name="OP_IPUT_JUMBO" since="11"/>
+		<field name="OP_IPUT_OBJECT"/>
+		<field name="OP_IPUT_OBJECT_JUMBO" since="11"/>
+		<field name="OP_IPUT_OBJECT_QUICK" deprecated="15"/>
+		<field name="OP_IPUT_QUICK" deprecated="15"/>
+		<field name="OP_IPUT_SHORT"/>
+		<field name="OP_IPUT_SHORT_JUMBO" since="11"/>
+		<field name="OP_IPUT_WIDE"/>
+		<field name="OP_IPUT_WIDE_JUMBO" since="11"/>
+		<field name="OP_IPUT_WIDE_QUICK" deprecated="15"/>
+		<field name="OP_IPUT_WIDE_VOLATILE" since="9" deprecated="15"/>
+		<field name="OP_LONG_TO_DOUBLE"/>
+		<field name="OP_LONG_TO_FLOAT"/>
+		<field name="OP_LONG_TO_INT"/>
+		<field name="OP_MONITOR_ENTER"/>
+		<field name="OP_MONITOR_EXIT"/>
+		<field name="OP_MOVE"/>
+		<field name="OP_MOVE_16"/>
+		<field name="OP_MOVE_EXCEPTION"/>
+		<field name="OP_MOVE_FROM16"/>
+		<field name="OP_MOVE_OBJECT"/>
+		<field name="OP_MOVE_OBJECT_16"/>
+		<field name="OP_MOVE_OBJECT_FROM16"/>
+		<field name="OP_MOVE_RESULT"/>
+		<field name="OP_MOVE_RESULT_OBJECT"/>
+		<field name="OP_MOVE_RESULT_WIDE"/>
+		<field name="OP_MOVE_WIDE"/>
+		<field name="OP_MOVE_WIDE_16"/>
+		<field name="OP_MOVE_WIDE_FROM16"/>
+		<field name="OP_MUL_DOUBLE"/>
+		<field name="OP_MUL_DOUBLE_2ADDR"/>
+		<field name="OP_MUL_FLOAT"/>
+		<field name="OP_MUL_FLOAT_2ADDR"/>
+		<field name="OP_MUL_INT"/>
+		<field name="OP_MUL_INT_2ADDR"/>
+		<field name="OP_MUL_INT_LIT16"/>
+		<field name="OP_MUL_INT_LIT8"/>
+		<field name="OP_MUL_LONG"/>
+		<field name="OP_MUL_LONG_2ADDR"/>
+		<field name="OP_NEG_DOUBLE"/>
+		<field name="OP_NEG_FLOAT"/>
+		<field name="OP_NEG_INT"/>
+		<field name="OP_NEG_LONG"/>
+		<field name="OP_NEW_ARRAY"/>
+		<field name="OP_NEW_ARRAY_JUMBO" since="11"/>
+		<field name="OP_NEW_INSTANCE"/>
+		<field name="OP_NEW_INSTANCE_JUMBO" since="11"/>
+		<field name="OP_NOP"/>
+		<field name="OP_NOT_INT"/>
+		<field name="OP_NOT_LONG"/>
+		<field name="OP_OR_INT"/>
+		<field name="OP_OR_INT_2ADDR"/>
+		<field name="OP_OR_INT_LIT16"/>
+		<field name="OP_OR_INT_LIT8"/>
+		<field name="OP_OR_LONG"/>
+		<field name="OP_OR_LONG_2ADDR"/>
+		<field name="OP_PACKED_SWITCH"/>
+		<field name="OP_REM_DOUBLE"/>
+		<field name="OP_REM_DOUBLE_2ADDR"/>
+		<field name="OP_REM_FLOAT"/>
+		<field name="OP_REM_FLOAT_2ADDR"/>
+		<field name="OP_REM_INT"/>
+		<field name="OP_REM_INT_2ADDR"/>
+		<field name="OP_REM_INT_LIT16"/>
+		<field name="OP_REM_INT_LIT8"/>
+		<field name="OP_REM_LONG"/>
+		<field name="OP_REM_LONG_2ADDR"/>
+		<field name="OP_RETURN"/>
+		<field name="OP_RETURN_OBJECT"/>
+		<field name="OP_RETURN_VOID"/>
+		<field name="OP_RETURN_WIDE"/>
+		<field name="OP_RSUB_INT"/>
+		<field name="OP_RSUB_INT_LIT8"/>
+		<field name="OP_SGET"/>
+		<field name="OP_SGET_BOOLEAN"/>
+		<field name="OP_SGET_BOOLEAN_JUMBO" since="11"/>
+		<field name="OP_SGET_BYTE"/>
+		<field name="OP_SGET_BYTE_JUMBO" since="11"/>
+		<field name="OP_SGET_CHAR"/>
+		<field name="OP_SGET_CHAR_JUMBO" since="11"/>
+		<field name="OP_SGET_JUMBO" since="11"/>
+		<field name="OP_SGET_OBJECT"/>
+		<field name="OP_SGET_OBJECT_JUMBO" since="11"/>
+		<field name="OP_SGET_SHORT"/>
+		<field name="OP_SGET_SHORT_JUMBO" since="11"/>
+		<field name="OP_SGET_WIDE"/>
+		<field name="OP_SGET_WIDE_JUMBO" since="11"/>
+		<field name="OP_SGET_WIDE_VOLATILE" since="9" deprecated="15"/>
+		<field name="OP_SHL_INT"/>
+		<field name="OP_SHL_INT_2ADDR"/>
+		<field name="OP_SHL_INT_LIT8"/>
+		<field name="OP_SHL_LONG"/>
+		<field name="OP_SHL_LONG_2ADDR"/>
+		<field name="OP_SHR_INT"/>
+		<field name="OP_SHR_INT_2ADDR"/>
+		<field name="OP_SHR_INT_LIT8"/>
+		<field name="OP_SHR_LONG"/>
+		<field name="OP_SHR_LONG_2ADDR"/>
+		<field name="OP_SPARSE_SWITCH"/>
+		<field name="OP_SPUT"/>
+		<field name="OP_SPUT_BOOLEAN"/>
+		<field name="OP_SPUT_BOOLEAN_JUMBO" since="11"/>
+		<field name="OP_SPUT_BYTE"/>
+		<field name="OP_SPUT_BYTE_JUMBO" since="11"/>
+		<field name="OP_SPUT_CHAR"/>
+		<field name="OP_SPUT_CHAR_JUMBO" since="11"/>
+		<field name="OP_SPUT_JUMBO" since="11"/>
+		<field name="OP_SPUT_OBJECT"/>
+		<field name="OP_SPUT_OBJECT_JUMBO" since="11"/>
+		<field name="OP_SPUT_SHORT"/>
+		<field name="OP_SPUT_SHORT_JUMBO" since="11"/>
+		<field name="OP_SPUT_WIDE"/>
+		<field name="OP_SPUT_WIDE_JUMBO" since="11"/>
+		<field name="OP_SPUT_WIDE_VOLATILE" since="9" deprecated="15"/>
+		<field name="OP_SUB_DOUBLE"/>
+		<field name="OP_SUB_DOUBLE_2ADDR"/>
+		<field name="OP_SUB_FLOAT"/>
+		<field name="OP_SUB_FLOAT_2ADDR"/>
+		<field name="OP_SUB_INT"/>
+		<field name="OP_SUB_INT_2ADDR"/>
+		<field name="OP_SUB_LONG"/>
+		<field name="OP_SUB_LONG_2ADDR"/>
+		<field name="OP_THROW"/>
+		<field name="OP_THROW_VERIFICATION_ERROR" since="8" deprecated="15"/>
+		<field name="OP_UNUSED_3e" removed="8"/>
+		<field name="OP_UNUSED_3f" removed="8"/>
+		<field name="OP_UNUSED_40" removed="8"/>
+		<field name="OP_UNUSED_41" removed="8"/>
+		<field name="OP_UNUSED_42" removed="8"/>
+		<field name="OP_UNUSED_43" removed="8"/>
+		<field name="OP_UNUSED_73" removed="8"/>
+		<field name="OP_UNUSED_79" removed="8"/>
+		<field name="OP_UNUSED_7A" removed="8"/>
+		<field name="OP_UNUSED_E3" removed="8"/>
+		<field name="OP_UNUSED_E4" removed="8"/>
+		<field name="OP_UNUSED_E5" removed="8"/>
+		<field name="OP_UNUSED_E6" removed="8"/>
+		<field name="OP_UNUSED_E7" removed="8"/>
+		<field name="OP_UNUSED_E8" removed="8"/>
+		<field name="OP_UNUSED_E9" removed="8"/>
+		<field name="OP_UNUSED_EA" removed="8"/>
+		<field name="OP_UNUSED_EB" removed="8"/>
+		<field name="OP_UNUSED_EC" removed="8"/>
+		<field name="OP_UNUSED_ED" removed="8"/>
+		<field name="OP_UNUSED_EF" removed="8"/>
+		<field name="OP_UNUSED_F1" removed="8"/>
+		<field name="OP_UNUSED_FC" removed="8"/>
+		<field name="OP_UNUSED_FD" removed="8"/>
+		<field name="OP_UNUSED_FE" removed="8"/>
+		<field name="OP_UNUSED_FF" removed="8"/>
+		<field name="OP_USHR_INT"/>
+		<field name="OP_USHR_INT_2ADDR"/>
+		<field name="OP_USHR_INT_LIT8"/>
+		<field name="OP_USHR_LONG"/>
+		<field name="OP_USHR_LONG_2ADDR"/>
+		<field name="OP_XOR_INT"/>
+		<field name="OP_XOR_INT_2ADDR"/>
+		<field name="OP_XOR_INT_LIT16"/>
+		<field name="OP_XOR_INT_LIT8"/>
+		<field name="OP_XOR_LONG"/>
+		<field name="OP_XOR_LONG_2ADDR"/>
+	</class>
+	<class name="dalvik/system/AllocationLimitError" since="1" removed="9">
+		<extends name="java/lang/VirtualMachineError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="dalvik/system/BaseDexClassLoader" since="14">
+		<extends name="java/lang/ClassLoader"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/io/File;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
+	</class>
+	<class name="dalvik/system/DelegateLastClassLoader" since="27">
+		<extends name="dalvik/system/PathClassLoader"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;Z)V" since="29"/>
+	</class>
+	<class name="dalvik/system/DexClassLoader" since="3">
+		<extends name="dalvik/system/BaseDexClassLoader" since="14"/>
+		<extends name="java/lang/ClassLoader" removed="14"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
+	</class>
+	<class name="dalvik/system/DexFile" since="1" deprecated="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/io/File;)V" deprecated="26"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="26"/>
+		<method name="close()V" deprecated="29"/>
+		<method name="entries()Ljava/util/Enumeration;" deprecated="29"/>
+		<method name="getName()Ljava/lang/String;" deprecated="29"/>
+		<method name="isDexOptNeeded(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="loadClass(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;" deprecated="29"/>
+		<method name="loadDex(Ljava/lang/String;Ljava/lang/String;I)Ldalvik/system/DexFile;" since="3" deprecated="26"/>
+	</class>
+	<class name="dalvik/system/InMemoryDexClassLoader" since="26">
+		<extends name="dalvik/system/BaseDexClassLoader"/>
+		<method name="&lt;init>(Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V"/>
+		<method name="&lt;init>([Ljava/nio/ByteBuffer;Ljava/lang/ClassLoader;)V" since="27"/>
+		<method name="&lt;init>([Ljava/nio/ByteBuffer;Ljava/lang/String;Ljava/lang/ClassLoader;)V" since="29"/>
+	</class>
+	<class name="dalvik/system/PathClassLoader" since="1">
+		<extends name="dalvik/system/BaseDexClassLoader" since="14"/>
+		<extends name="java/lang/ClassLoader" removed="14"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"/>
+	</class>
+	<class name="dalvik/system/PotentialDeadlockError" since="1" removed="9">
+		<extends name="java/lang/VirtualMachineError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="dalvik/system/StaleDexCacheError" since="1" removed="9">
+		<extends name="java/lang/VirtualMachineError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="dalvik/system/TemporaryDirectory" since="1" removed="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="setUpDirectory(Ljava/io/File;)V"/>
+		<method name="setUpDirectory(Ljava/lang/String;)V"/>
+	</class>
+	<class name="dalvik/system/TouchDex" since="1" removed="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="main([Ljava/lang/String;)V"/>
+		<method name="start(Ljava/lang/String;)I"/>
+	</class>
+	<class name="dalvik/system/VMDebug" since="1" removed="9">
+		<extends name="java/lang/Object"/>
+		<method name="dumpHprofData(Ljava/lang/String;)V" since="3"/>
+		<method name="getAllocCount(I)I"/>
+		<method name="getInstructionCount([I)V"/>
+		<method name="getLoadedClassCount()I"/>
+		<method name="isDebuggerConnected()Z"/>
+		<method name="isDebuggingEnabled()Z" since="3"/>
+		<method name="lastDebuggerActivity()J"/>
+		<method name="printLoadedClasses(I)V"/>
+		<method name="resetAllocCount(I)V"/>
+		<method name="resetInstructionCount()V"/>
+		<method name="setAllocationLimit(I)I"/>
+		<method name="setGlobalAllocationLimit(I)I"/>
+		<method name="startAllocCounting()V"/>
+		<method name="startEmulatorTracing()V"/>
+		<method name="startInstructionCounting()V"/>
+		<method name="startMethodTracing()V"/>
+		<method name="startMethodTracing(Ljava/lang/String;II)V"/>
+		<method name="stopAllocCounting()V"/>
+		<method name="stopEmulatorTracing()V"/>
+		<method name="stopInstructionCounting()V"/>
+		<method name="stopMethodTracing()V"/>
+		<method name="threadCpuTimeNanos()J"/>
+		<field name="DEFAULT_METHOD_TRACE_FILE_NAME"/>
+		<field name="KIND_ALL_COUNTS"/>
+		<field name="KIND_GLOBAL_ALLOCATED_BYTES"/>
+		<field name="KIND_GLOBAL_ALLOCATED_OBJECTS"/>
+		<field name="KIND_GLOBAL_CLASS_INIT_COUNT" since="8"/>
+		<field name="KIND_GLOBAL_CLASS_INIT_TIME" since="8"/>
+		<field name="KIND_GLOBAL_EXT_ALLOCATED_BYTES"/>
+		<field name="KIND_GLOBAL_EXT_ALLOCATED_OBJECTS"/>
+		<field name="KIND_GLOBAL_EXT_FREED_BYTES"/>
+		<field name="KIND_GLOBAL_EXT_FREED_OBJECTS"/>
+		<field name="KIND_GLOBAL_FREED_BYTES"/>
+		<field name="KIND_GLOBAL_FREED_OBJECTS"/>
+		<field name="KIND_GLOBAL_GC_INVOCATIONS"/>
+		<field name="KIND_THREAD_ALLOCATED_BYTES"/>
+		<field name="KIND_THREAD_ALLOCATED_OBJECTS"/>
+		<field name="KIND_THREAD_CLASS_INIT_COUNT" since="8"/>
+		<field name="KIND_THREAD_CLASS_INIT_TIME" since="8"/>
+		<field name="KIND_THREAD_EXT_ALLOCATED_BYTES"/>
+		<field name="KIND_THREAD_EXT_ALLOCATED_OBJECTS"/>
+		<field name="KIND_THREAD_EXT_FREED_BYTES"/>
+		<field name="KIND_THREAD_EXT_FREED_OBJECTS"/>
+		<field name="KIND_THREAD_FREED_BYTES"/>
+		<field name="KIND_THREAD_FREED_OBJECTS"/>
+		<field name="KIND_THREAD_GC_INVOCATIONS"/>
+		<field name="TRACE_COUNT_ALLOCS"/>
+	</class>
+	<class name="dalvik/system/VMRuntime" since="1" removed="9">
+		<extends name="java/lang/Object"/>
+		<method name="gcSoftReferences()V"/>
+		<method name="getExternalBytesAllocated()J"/>
+		<method name="getMinimumHeapSize()J"/>
+		<method name="getRuntime()Ldalvik/system/VMRuntime;"/>
+		<method name="getTargetHeapUtilization()F"/>
+		<method name="runFinalizationSync()V"/>
+		<method name="setMinimumHeapSize(J)J"/>
+		<method name="setTargetHeapUtilization(F)F"/>
+	</class>
+	<class name="dalvik/system/VMStack" since="1" removed="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getCallingClassLoader()Ljava/lang/ClassLoader;"/>
+		<method name="getCallingClassLoader2()Ljava/lang/ClassLoader;"/>
+		<method name="getClasses(IZ)[Ljava/lang/Class;"/>
+		<method name="getThreadStackTrace(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement;"/>
+	</class>
+	<class name="dalvik/system/Zygote" since="1" removed="9">
+		<extends name="java/lang/Object"/>
+		<method name="fork()I"/>
+		<method name="forkAndSpecialize(II[II[[I)I" since="3"/>
+		<method name="forkAndSpecialize(II[IZ[[I)I"/>
+		<method name="forkSystemServer(II[II[[I)I" since="3"/>
+		<method name="forkSystemServer(II[IZ[[I)I"/>
+		<field name="DEBUG_ENABLE_ASSERT" since="3"/>
+		<field name="DEBUG_ENABLE_CHECKJNI" since="3"/>
+		<field name="DEBUG_ENABLE_DEBUGGER" since="3"/>
+		<field name="DEBUG_ENABLE_SAFEMODE" since="8"/>
+	</class>
+	<class name="java/awt/font/NumericShaper" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="getContextualShaper(I)Ljava/awt/font/NumericShaper;"/>
+		<method name="getContextualShaper(II)Ljava/awt/font/NumericShaper;"/>
+		<method name="getContextualShaper(Ljava/util/Set;)Ljava/awt/font/NumericShaper;" since="24"/>
+		<method name="getContextualShaper(Ljava/util/Set;Ljava/awt/font/NumericShaper$Range;)Ljava/awt/font/NumericShaper;" since="24"/>
+		<method name="getRangeSet()Ljava/util/Set;" since="24"/>
+		<method name="getRanges()I"/>
+		<method name="getShaper(I)Ljava/awt/font/NumericShaper;"/>
+		<method name="getShaper(Ljava/awt/font/NumericShaper$Range;)Ljava/awt/font/NumericShaper;" since="24"/>
+		<method name="isContextual()Z"/>
+		<method name="shape([CII)V"/>
+		<method name="shape([CIII)V"/>
+		<method name="shape([CIILjava/awt/font/NumericShaper$Range;)V" since="24"/>
+		<field name="ALL_RANGES"/>
+		<field name="ARABIC"/>
+		<field name="BENGALI"/>
+		<field name="DEVANAGARI"/>
+		<field name="EASTERN_ARABIC"/>
+		<field name="ETHIOPIC"/>
+		<field name="EUROPEAN"/>
+		<field name="GUJARATI"/>
+		<field name="GURMUKHI"/>
+		<field name="KANNADA"/>
+		<field name="KHMER"/>
+		<field name="LAO"/>
+		<field name="MALAYALAM"/>
+		<field name="MONGOLIAN"/>
+		<field name="MYANMAR"/>
+		<field name="ORIYA"/>
+		<field name="TAMIL"/>
+		<field name="TELUGU"/>
+		<field name="THAI"/>
+		<field name="TIBETAN"/>
+	</class>
+	<class name="java/awt/font/NumericShaper$Range" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/awt/font/NumericShaper$Range;"/>
+		<method name="values()[Ljava/awt/font/NumericShaper$Range;"/>
+		<field name="ARABIC"/>
+		<field name="BALINESE"/>
+		<field name="BENGALI"/>
+		<field name="CHAM"/>
+		<field name="DEVANAGARI"/>
+		<field name="EASTERN_ARABIC"/>
+		<field name="ETHIOPIC"/>
+		<field name="EUROPEAN"/>
+		<field name="GUJARATI"/>
+		<field name="GURMUKHI"/>
+		<field name="JAVANESE"/>
+		<field name="KANNADA"/>
+		<field name="KAYAH_LI"/>
+		<field name="KHMER"/>
+		<field name="LAO"/>
+		<field name="LEPCHA"/>
+		<field name="LIMBU"/>
+		<field name="MALAYALAM"/>
+		<field name="MEETEI_MAYEK"/>
+		<field name="MONGOLIAN"/>
+		<field name="MYANMAR"/>
+		<field name="MYANMAR_SHAN"/>
+		<field name="NEW_TAI_LUE"/>
+		<field name="NKO"/>
+		<field name="OL_CHIKI"/>
+		<field name="ORIYA"/>
+		<field name="SAURASHTRA"/>
+		<field name="SUNDANESE"/>
+		<field name="TAI_THAM_HORA"/>
+		<field name="TAI_THAM_THAM"/>
+		<field name="TAMIL"/>
+		<field name="TELUGU"/>
+		<field name="THAI"/>
+		<field name="TIBETAN"/>
+		<field name="VAI"/>
+	</class>
+	<class name="java/awt/font/TextAttribute" since="1">
+		<extends name="java/text/AttributedCharacterIterator$Attribute"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="BACKGROUND"/>
+		<field name="BIDI_EMBEDDING"/>
+		<field name="CHAR_REPLACEMENT"/>
+		<field name="FAMILY"/>
+		<field name="FONT"/>
+		<field name="FOREGROUND"/>
+		<field name="INPUT_METHOD_HIGHLIGHT"/>
+		<field name="INPUT_METHOD_UNDERLINE"/>
+		<field name="JUSTIFICATION"/>
+		<field name="JUSTIFICATION_FULL"/>
+		<field name="JUSTIFICATION_NONE"/>
+		<field name="KERNING" since="9"/>
+		<field name="KERNING_ON" since="9"/>
+		<field name="LIGATURES" since="9"/>
+		<field name="LIGATURES_ON" since="9"/>
+		<field name="NUMERIC_SHAPING"/>
+		<field name="POSTURE"/>
+		<field name="POSTURE_OBLIQUE"/>
+		<field name="POSTURE_REGULAR"/>
+		<field name="RUN_DIRECTION"/>
+		<field name="RUN_DIRECTION_LTR"/>
+		<field name="RUN_DIRECTION_RTL"/>
+		<field name="SIZE"/>
+		<field name="STRIKETHROUGH"/>
+		<field name="STRIKETHROUGH_ON"/>
+		<field name="SUPERSCRIPT"/>
+		<field name="SUPERSCRIPT_SUB"/>
+		<field name="SUPERSCRIPT_SUPER"/>
+		<field name="SWAP_COLORS"/>
+		<field name="SWAP_COLORS_ON"/>
+		<field name="TRACKING" since="9"/>
+		<field name="TRACKING_LOOSE" since="9"/>
+		<field name="TRACKING_TIGHT" since="9"/>
+		<field name="TRANSFORM"/>
+		<field name="UNDERLINE"/>
+		<field name="UNDERLINE_LOW_DASHED"/>
+		<field name="UNDERLINE_LOW_DOTTED"/>
+		<field name="UNDERLINE_LOW_GRAY"/>
+		<field name="UNDERLINE_LOW_ONE_PIXEL"/>
+		<field name="UNDERLINE_LOW_TWO_PIXEL"/>
+		<field name="UNDERLINE_ON"/>
+		<field name="WEIGHT"/>
+		<field name="WEIGHT_BOLD"/>
+		<field name="WEIGHT_DEMIBOLD"/>
+		<field name="WEIGHT_DEMILIGHT"/>
+		<field name="WEIGHT_EXTRABOLD"/>
+		<field name="WEIGHT_EXTRA_LIGHT"/>
+		<field name="WEIGHT_HEAVY"/>
+		<field name="WEIGHT_LIGHT"/>
+		<field name="WEIGHT_MEDIUM"/>
+		<field name="WEIGHT_REGULAR"/>
+		<field name="WEIGHT_SEMIBOLD"/>
+		<field name="WEIGHT_ULTRABOLD"/>
+		<field name="WIDTH"/>
+		<field name="WIDTH_CONDENSED"/>
+		<field name="WIDTH_EXTENDED"/>
+		<field name="WIDTH_REGULAR"/>
+		<field name="WIDTH_SEMI_CONDENSED"/>
+		<field name="WIDTH_SEMI_EXTENDED"/>
+	</class>
+	<class name="java/beans/IndexedPropertyChangeEvent" since="3">
+		<extends name="java/beans/PropertyChangeEvent"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;I)V"/>
+		<method name="getIndex()I"/>
+	</class>
+	<class name="java/beans/PropertyChangeEvent" since="3">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="getNewValue()Ljava/lang/Object;"/>
+		<method name="getOldValue()Ljava/lang/Object;"/>
+		<method name="getPropagationId()Ljava/lang/Object;"/>
+		<method name="getPropertyName()Ljava/lang/String;"/>
+		<method name="setPropagationId(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/beans/PropertyChangeListener" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="propertyChange(Ljava/beans/PropertyChangeEvent;)V"/>
+	</class>
+	<class name="java/beans/PropertyChangeListenerProxy" since="3">
+		<extends name="java/util/EventListenerProxy"/>
+		<implements name="java/beans/PropertyChangeListener"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V"/>
+		<method name="getPropertyName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/beans/PropertyChangeSupport" since="3">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V"/>
+		<method name="addPropertyChangeListener(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V"/>
+		<method name="fireIndexedPropertyChange(Ljava/lang/String;III)V"/>
+		<method name="fireIndexedPropertyChange(Ljava/lang/String;ILjava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="fireIndexedPropertyChange(Ljava/lang/String;IZZ)V"/>
+		<method name="firePropertyChange(Ljava/beans/PropertyChangeEvent;)V"/>
+		<method name="firePropertyChange(Ljava/lang/String;II)V"/>
+		<method name="firePropertyChange(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="firePropertyChange(Ljava/lang/String;ZZ)V"/>
+		<method name="getPropertyChangeListeners()[Ljava/beans/PropertyChangeListener;"/>
+		<method name="getPropertyChangeListeners(Ljava/lang/String;)[Ljava/beans/PropertyChangeListener;"/>
+		<method name="hasListeners(Ljava/lang/String;)Z"/>
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V"/>
+		<method name="removePropertyChangeListener(Ljava/lang/String;Ljava/beans/PropertyChangeListener;)V"/>
+	</class>
+	<class name="java/io/BufferedInputStream" since="1">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
+		<field name="buf"/>
+		<field name="count"/>
+		<field name="marklimit"/>
+		<field name="markpos"/>
+		<field name="pos"/>
+	</class>
+	<class name="java/io/BufferedOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;I)V"/>
+		<field name="buf"/>
+		<field name="count"/>
+	</class>
+	<class name="java/io/BufferedReader" since="1">
+		<extends name="java/io/Reader"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<method name="&lt;init>(Ljava/io/Reader;I)V"/>
+		<method name="lines()Ljava/util/stream/Stream;" since="24"/>
+		<method name="readLine()Ljava/lang/String;"/>
+	</class>
+	<class name="java/io/BufferedWriter" since="1">
+		<extends name="java/io/Writer"/>
+		<method name="&lt;init>(Ljava/io/Writer;)V"/>
+		<method name="&lt;init>(Ljava/io/Writer;I)V"/>
+		<method name="newLine()V"/>
+	</class>
+	<class name="java/io/ByteArrayInputStream" since="1">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="&lt;init>([BII)V"/>
+		<field name="buf"/>
+		<field name="count"/>
+		<field name="mark"/>
+		<field name="pos"/>
+	</class>
+	<class name="java/io/ByteArrayOutputStream" since="1">
+		<extends name="java/io/OutputStream"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="reset()V"/>
+		<method name="size()I"/>
+		<method name="toByteArray()[B"/>
+		<method name="toString(I)Ljava/lang/String;" deprecated="15"/>
+		<method name="toString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="writeTo(Ljava/io/OutputStream;)V"/>
+		<field name="buf"/>
+		<field name="count"/>
+	</class>
+	<class name="java/io/CharArrayReader" since="1">
+		<extends name="java/io/Reader"/>
+		<method name="&lt;init>([C)V"/>
+		<method name="&lt;init>([CII)V"/>
+		<field name="buf"/>
+		<field name="count"/>
+		<field name="markedPos"/>
+		<field name="pos"/>
+	</class>
+	<class name="java/io/CharArrayWriter" since="1">
+		<extends name="java/io/Writer"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(C)Ljava/io/CharArrayWriter;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/CharArrayWriter;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/CharArrayWriter;"/>
+		<method name="reset()V"/>
+		<method name="size()I"/>
+		<method name="toCharArray()[C"/>
+		<method name="writeTo(Ljava/io/Writer;)V"/>
+		<field name="buf"/>
+		<field name="count"/>
+	</class>
+	<class name="java/io/CharConversionException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/Closeable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<method name="close()V"/>
+	</class>
+	<class name="java/io/Console" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Flushable"/>
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;"/>
+		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console;"/>
+		<method name="readLine()Ljava/lang/String;"/>
+		<method name="readLine(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="readPassword()[C"/>
+		<method name="readPassword(Ljava/lang/String;[Ljava/lang/Object;)[C"/>
+		<method name="reader()Ljava/io/Reader;"/>
+		<method name="writer()Ljava/io/PrintWriter;"/>
+	</class>
+	<class name="java/io/DataInput" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="readBoolean()Z"/>
+		<method name="readByte()B"/>
+		<method name="readChar()C"/>
+		<method name="readDouble()D"/>
+		<method name="readFloat()F"/>
+		<method name="readFully([B)V"/>
+		<method name="readFully([BII)V"/>
+		<method name="readInt()I"/>
+		<method name="readLine()Ljava/lang/String;"/>
+		<method name="readLong()J"/>
+		<method name="readShort()S"/>
+		<method name="readUTF()Ljava/lang/String;"/>
+		<method name="readUnsignedByte()I"/>
+		<method name="readUnsignedShort()I"/>
+		<method name="skipBytes(I)I"/>
+	</class>
+	<class name="java/io/DataInputStream" since="1">
+		<extends name="java/io/FilterInputStream"/>
+		<implements name="java/io/DataInput"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="readUTF(Ljava/io/DataInput;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/io/DataOutput" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="write(I)V"/>
+		<method name="write([B)V"/>
+		<method name="write([BII)V"/>
+		<method name="writeBoolean(Z)V"/>
+		<method name="writeByte(I)V"/>
+		<method name="writeBytes(Ljava/lang/String;)V"/>
+		<method name="writeChar(I)V"/>
+		<method name="writeChars(Ljava/lang/String;)V"/>
+		<method name="writeDouble(D)V"/>
+		<method name="writeFloat(F)V"/>
+		<method name="writeInt(I)V"/>
+		<method name="writeLong(J)V"/>
+		<method name="writeShort(I)V"/>
+		<method name="writeUTF(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/DataOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream"/>
+		<implements name="java/io/DataOutput"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="size()I"/>
+		<field name="written"/>
+	</class>
+	<class name="java/io/EOFException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/Externalizable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="readExternal(Ljava/io/ObjectInput;)V"/>
+		<method name="writeExternal(Ljava/io/ObjectOutput;)V"/>
+	</class>
+	<class name="java/io/File" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<method name="canExecute()Z" since="9"/>
+		<method name="canRead()Z"/>
+		<method name="canWrite()Z"/>
+		<method name="compareTo(Ljava/io/File;)I"/>
+		<method name="createNewFile()Z"/>
+		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;)Ljava/io/File;"/>
+		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;"/>
+		<method name="delete()Z"/>
+		<method name="deleteOnExit()V"/>
+		<method name="exists()Z"/>
+		<method name="getAbsoluteFile()Ljava/io/File;"/>
+		<method name="getAbsolutePath()Ljava/lang/String;"/>
+		<method name="getCanonicalFile()Ljava/io/File;"/>
+		<method name="getCanonicalPath()Ljava/lang/String;"/>
+		<method name="getFreeSpace()J" since="9"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getParent()Ljava/lang/String;"/>
+		<method name="getParentFile()Ljava/io/File;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getTotalSpace()J" since="9"/>
+		<method name="getUsableSpace()J" since="9"/>
+		<method name="isAbsolute()Z"/>
+		<method name="isDirectory()Z"/>
+		<method name="isFile()Z"/>
+		<method name="isHidden()Z"/>
+		<method name="lastModified()J"/>
+		<method name="length()J"/>
+		<method name="list()[Ljava/lang/String;"/>
+		<method name="list(Ljava/io/FilenameFilter;)[Ljava/lang/String;"/>
+		<method name="listFiles()[Ljava/io/File;"/>
+		<method name="listFiles(Ljava/io/FileFilter;)[Ljava/io/File;"/>
+		<method name="listFiles(Ljava/io/FilenameFilter;)[Ljava/io/File;"/>
+		<method name="listRoots()[Ljava/io/File;"/>
+		<method name="mkdir()Z"/>
+		<method name="mkdirs()Z"/>
+		<method name="renameTo(Ljava/io/File;)Z"/>
+		<method name="setExecutable(Z)Z" since="9"/>
+		<method name="setExecutable(ZZ)Z" since="9"/>
+		<method name="setLastModified(J)Z"/>
+		<method name="setReadOnly()Z"/>
+		<method name="setReadable(Z)Z" since="9"/>
+		<method name="setReadable(ZZ)Z" since="9"/>
+		<method name="setWritable(Z)Z" since="9"/>
+		<method name="setWritable(ZZ)Z" since="9"/>
+		<method name="toPath()Ljava/nio/file/Path;" since="26"/>
+		<method name="toURI()Ljava/net/URI;"/>
+		<method name="toURL()Ljava/net/URL;" deprecated="15"/>
+		<field name="pathSeparator"/>
+		<field name="pathSeparatorChar"/>
+		<field name="separator"/>
+		<field name="separatorChar"/>
+	</class>
+	<class name="java/io/FileDescriptor" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="sync()V"/>
+		<method name="valid()Z"/>
+		<field name="err"/>
+		<field name="in"/>
+		<field name="out"/>
+	</class>
+	<class name="java/io/FileFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/io/File;)Z"/>
+	</class>
+	<class name="java/io/FileInputStream" since="1">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getChannel()Ljava/nio/channels/FileChannel;"/>
+		<method name="getFD()Ljava/io/FileDescriptor;"/>
+	</class>
+	<class name="java/io/FileNotFoundException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/FileOutputStream" since="1">
+		<extends name="java/io/OutputStream"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Z)V"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+		<method name="getChannel()Ljava/nio/channels/FileChannel;"/>
+		<method name="getFD()Ljava/io/FileDescriptor;"/>
+	</class>
+	<class name="java/io/FilePermission" since="1">
+		<extends name="java/security/Permission"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/FileReader" since="1">
+		<extends name="java/io/InputStreamReader"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/FileWriter" since="1">
+		<extends name="java/io/OutputStreamWriter"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Z)V"/>
+		<method name="&lt;init>(Ljava/io/FileDescriptor;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+	</class>
+	<class name="java/io/FilenameFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/io/File;Ljava/lang/String;)Z"/>
+	</class>
+	<class name="java/io/FilterInputStream" since="1">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<field name="in"/>
+	</class>
+	<class name="java/io/FilterOutputStream" since="1">
+		<extends name="java/io/OutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<field name="out"/>
+	</class>
+	<class name="java/io/FilterReader" since="1">
+		<extends name="java/io/Reader"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<field name="in"/>
+	</class>
+	<class name="java/io/FilterWriter" since="1">
+		<extends name="java/io/Writer"/>
+		<method name="&lt;init>(Ljava/io/Writer;)V"/>
+		<field name="out"/>
+	</class>
+	<class name="java/io/Flushable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="flush()V"/>
+	</class>
+	<class name="java/io/IOError" since="9">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/io/IOException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
+	</class>
+	<class name="java/io/InputStream" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="&lt;init>()V"/>
+		<method name="available()I"/>
+		<method name="mark(I)V"/>
+		<method name="markSupported()Z"/>
+		<method name="read()I"/>
+		<method name="read([B)I"/>
+		<method name="read([BII)I"/>
+		<method name="reset()V"/>
+		<method name="skip(J)J"/>
+	</class>
+	<class name="java/io/InputStreamReader" since="1">
+		<extends name="java/io/Reader"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/nio/charset/CharsetDecoder;)V"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+	</class>
+	<class name="java/io/InterruptedIOException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="bytesTransferred"/>
+	</class>
+	<class name="java/io/InvalidClassException" since="1">
+		<extends name="java/io/ObjectStreamException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="classname"/>
+	</class>
+	<class name="java/io/InvalidObjectException" since="1">
+		<extends name="java/io/ObjectStreamException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/LineNumberInputStream" since="1" deprecated="1">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="29"/>
+		<method name="getLineNumber()I" deprecated="29"/>
+		<method name="setLineNumber(I)V" deprecated="29"/>
+	</class>
+	<class name="java/io/LineNumberReader" since="1">
+		<extends name="java/io/BufferedReader"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<method name="&lt;init>(Ljava/io/Reader;I)V"/>
+		<method name="getLineNumber()I"/>
+		<method name="setLineNumber(I)V"/>
+	</class>
+	<class name="java/io/NotActiveException" since="1">
+		<extends name="java/io/ObjectStreamException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/NotSerializableException" since="1">
+		<extends name="java/io/ObjectStreamException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/ObjectInput" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/DataInput"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<method name="available()I"/>
+		<method name="close()V"/>
+		<method name="read()I"/>
+		<method name="read([B)I"/>
+		<method name="read([BII)I"/>
+		<method name="readObject()Ljava/lang/Object;"/>
+		<method name="skip(J)J"/>
+	</class>
+	<class name="java/io/ObjectInputStream" since="1">
+		<extends name="java/io/InputStream"/>
+		<implements name="java/io/ObjectInput"/>
+		<implements name="java/io/ObjectStreamConstants"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="defaultReadObject()V"/>
+		<method name="enableResolveObject(Z)Z"/>
+		<method name="readClassDescriptor()Ljava/io/ObjectStreamClass;"/>
+		<method name="readFields()Ljava/io/ObjectInputStream$GetField;"/>
+		<method name="readObjectOverride()Ljava/lang/Object;"/>
+		<method name="readStreamHeader()V"/>
+		<method name="readUnshared()Ljava/lang/Object;"/>
+		<method name="registerValidation(Ljava/io/ObjectInputValidation;I)V"/>
+		<method name="resolveClass(Ljava/io/ObjectStreamClass;)Ljava/lang/Class;"/>
+		<method name="resolveObject(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="resolveProxyClass([Ljava/lang/String;)Ljava/lang/Class;"/>
+	</class>
+	<class name="java/io/ObjectInputStream$GetField" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="defaulted(Ljava/lang/String;)Z"/>
+		<method name="get(Ljava/lang/String;B)B"/>
+		<method name="get(Ljava/lang/String;C)C"/>
+		<method name="get(Ljava/lang/String;D)D"/>
+		<method name="get(Ljava/lang/String;F)F"/>
+		<method name="get(Ljava/lang/String;I)I"/>
+		<method name="get(Ljava/lang/String;J)J"/>
+		<method name="get(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="get(Ljava/lang/String;S)S"/>
+		<method name="get(Ljava/lang/String;Z)Z"/>
+		<method name="getObjectStreamClass()Ljava/io/ObjectStreamClass;"/>
+	</class>
+	<class name="java/io/ObjectInputValidation" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="validateObject()V"/>
+	</class>
+	<class name="java/io/ObjectOutput" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/DataOutput"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<method name="close()V"/>
+		<method name="flush()V"/>
+		<method name="writeObject(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/io/ObjectOutputStream" since="1">
+		<extends name="java/io/OutputStream"/>
+		<implements name="java/io/ObjectOutput"/>
+		<implements name="java/io/ObjectStreamConstants"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="annotateClass(Ljava/lang/Class;)V"/>
+		<method name="annotateProxyClass(Ljava/lang/Class;)V"/>
+		<method name="defaultWriteObject()V"/>
+		<method name="drain()V"/>
+		<method name="enableReplaceObject(Z)Z"/>
+		<method name="putFields()Ljava/io/ObjectOutputStream$PutField;"/>
+		<method name="replaceObject(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="reset()V"/>
+		<method name="useProtocolVersion(I)V"/>
+		<method name="writeClassDescriptor(Ljava/io/ObjectStreamClass;)V"/>
+		<method name="writeFields()V"/>
+		<method name="writeObjectOverride(Ljava/lang/Object;)V"/>
+		<method name="writeStreamHeader()V"/>
+		<method name="writeUnshared(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/io/ObjectOutputStream$PutField" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="put(Ljava/lang/String;B)V"/>
+		<method name="put(Ljava/lang/String;C)V"/>
+		<method name="put(Ljava/lang/String;D)V"/>
+		<method name="put(Ljava/lang/String;F)V"/>
+		<method name="put(Ljava/lang/String;I)V"/>
+		<method name="put(Ljava/lang/String;J)V"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="put(Ljava/lang/String;S)V"/>
+		<method name="put(Ljava/lang/String;Z)V"/>
+		<method name="write(Ljava/io/ObjectOutput;)V" deprecated="15"/>
+	</class>
+	<class name="java/io/ObjectStreamClass" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="forClass()Ljava/lang/Class;"/>
+		<method name="getField(Ljava/lang/String;)Ljava/io/ObjectStreamField;"/>
+		<method name="getFields()[Ljava/io/ObjectStreamField;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSerialVersionUID()J"/>
+		<method name="lookup(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;"/>
+		<method name="lookupAny(Ljava/lang/Class;)Ljava/io/ObjectStreamClass;" since="9"/>
+		<field name="NO_FIELDS"/>
+	</class>
+	<class name="java/io/ObjectStreamConstants" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="PROTOCOL_VERSION_1"/>
+		<field name="PROTOCOL_VERSION_2"/>
+		<field name="SC_BLOCK_DATA"/>
+		<field name="SC_ENUM"/>
+		<field name="SC_EXTERNALIZABLE"/>
+		<field name="SC_SERIALIZABLE"/>
+		<field name="SC_WRITE_METHOD"/>
+		<field name="STREAM_MAGIC"/>
+		<field name="STREAM_VERSION"/>
+		<field name="SUBCLASS_IMPLEMENTATION_PERMISSION"/>
+		<field name="SUBSTITUTION_PERMISSION"/>
+		<field name="TC_ARRAY"/>
+		<field name="TC_BASE"/>
+		<field name="TC_BLOCKDATA"/>
+		<field name="TC_BLOCKDATALONG"/>
+		<field name="TC_CLASS"/>
+		<field name="TC_CLASSDESC"/>
+		<field name="TC_ENDBLOCKDATA"/>
+		<field name="TC_ENUM"/>
+		<field name="TC_EXCEPTION"/>
+		<field name="TC_LONGSTRING"/>
+		<field name="TC_MAX"/>
+		<field name="TC_NULL"/>
+		<field name="TC_OBJECT"/>
+		<field name="TC_PROXYCLASSDESC"/>
+		<field name="TC_REFERENCE"/>
+		<field name="TC_RESET"/>
+		<field name="TC_STRING"/>
+		<field name="baseWireHandle"/>
+	</class>
+	<class name="java/io/ObjectStreamException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/ObjectStreamField" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getOffset()I"/>
+		<method name="getType()Ljava/lang/Class;"/>
+		<method name="getTypeCode()C"/>
+		<method name="getTypeString()Ljava/lang/String;"/>
+		<method name="isPrimitive()Z"/>
+		<method name="isUnshared()Z"/>
+		<method name="setOffset(I)V"/>
+	</class>
+	<class name="java/io/OptionalDataException" since="1">
+		<extends name="java/io/ObjectStreamException"/>
+		<field name="eof"/>
+		<field name="length"/>
+	</class>
+	<class name="java/io/OutputStream" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<implements name="java/io/Flushable"/>
+		<method name="&lt;init>()V"/>
+		<method name="write(I)V"/>
+		<method name="write([B)V"/>
+		<method name="write([BII)V"/>
+	</class>
+	<class name="java/io/OutputStreamWriter" since="1">
+		<extends name="java/io/Writer"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/nio/charset/CharsetEncoder;)V"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+	</class>
+	<class name="java/io/PipedInputStream" since="1">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V" since="9"/>
+		<method name="&lt;init>(Ljava/io/PipedOutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/PipedOutputStream;I)V" since="9"/>
+		<method name="connect(Ljava/io/PipedOutputStream;)V"/>
+		<method name="receive(I)V"/>
+		<field name="PIPE_SIZE"/>
+		<field name="buffer"/>
+		<field name="in"/>
+		<field name="out"/>
+	</class>
+	<class name="java/io/PipedOutputStream" since="1">
+		<extends name="java/io/OutputStream"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/PipedInputStream;)V"/>
+		<method name="connect(Ljava/io/PipedInputStream;)V"/>
+	</class>
+	<class name="java/io/PipedReader" since="1">
+		<extends name="java/io/Reader"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V" since="9"/>
+		<method name="&lt;init>(Ljava/io/PipedWriter;)V"/>
+		<method name="&lt;init>(Ljava/io/PipedWriter;I)V" since="9"/>
+		<method name="connect(Ljava/io/PipedWriter;)V"/>
+	</class>
+	<class name="java/io/PipedWriter" since="1">
+		<extends name="java/io/Writer"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/PipedReader;)V"/>
+		<method name="connect(Ljava/io/PipedReader;)V"/>
+	</class>
+	<class name="java/io/PrintStream" since="1">
+		<extends name="java/io/FilterOutputStream"/>
+		<implements name="java/lang/Appendable"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Z)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;ZLjava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="append(C)Ljava/io/PrintStream;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/PrintStream;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/PrintStream;"/>
+		<method name="checkError()Z"/>
+		<method name="clearError()V" since="9"/>
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
+		<method name="print(C)V"/>
+		<method name="print(D)V"/>
+		<method name="print(F)V"/>
+		<method name="print(I)V"/>
+		<method name="print(J)V"/>
+		<method name="print(Ljava/lang/Object;)V"/>
+		<method name="print(Ljava/lang/String;)V"/>
+		<method name="print(Z)V"/>
+		<method name="print([C)V"/>
+		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
+		<method name="printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;"/>
+		<method name="println()V"/>
+		<method name="println(C)V"/>
+		<method name="println(D)V"/>
+		<method name="println(F)V"/>
+		<method name="println(I)V"/>
+		<method name="println(J)V"/>
+		<method name="println(Ljava/lang/Object;)V"/>
+		<method name="println(Ljava/lang/String;)V"/>
+		<method name="println(Z)V"/>
+		<method name="println([C)V"/>
+		<method name="setError()V"/>
+	</class>
+	<class name="java/io/PrintWriter" since="1">
+		<extends name="java/io/Writer"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Z)V"/>
+		<method name="&lt;init>(Ljava/io/Writer;)V"/>
+		<method name="&lt;init>(Ljava/io/Writer;Z)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="append(C)Ljava/io/PrintWriter;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/PrintWriter;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/PrintWriter;"/>
+		<method name="checkError()Z"/>
+		<method name="clearError()V" since="9"/>
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
+		<method name="print(C)V"/>
+		<method name="print(D)V"/>
+		<method name="print(F)V"/>
+		<method name="print(I)V"/>
+		<method name="print(J)V"/>
+		<method name="print(Ljava/lang/Object;)V"/>
+		<method name="print(Ljava/lang/String;)V"/>
+		<method name="print(Z)V"/>
+		<method name="print([C)V"/>
+		<method name="printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
+		<method name="printf(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintWriter;"/>
+		<method name="println()V"/>
+		<method name="println(C)V"/>
+		<method name="println(D)V"/>
+		<method name="println(F)V"/>
+		<method name="println(I)V"/>
+		<method name="println(J)V"/>
+		<method name="println(Ljava/lang/Object;)V"/>
+		<method name="println(Ljava/lang/String;)V"/>
+		<method name="println(Z)V"/>
+		<method name="println([C)V"/>
+		<method name="setError()V"/>
+		<field name="out"/>
+	</class>
+	<class name="java/io/PushbackInputStream" since="1">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
+		<method name="unread(I)V"/>
+		<method name="unread([B)V"/>
+		<method name="unread([BII)V"/>
+		<field name="buf"/>
+		<field name="pos"/>
+	</class>
+	<class name="java/io/PushbackReader" since="1">
+		<extends name="java/io/FilterReader"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<method name="&lt;init>(Ljava/io/Reader;I)V"/>
+		<method name="unread(I)V"/>
+		<method name="unread([C)V"/>
+		<method name="unread([CII)V"/>
+	</class>
+	<class name="java/io/RandomAccessFile" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<implements name="java/io/DataInput"/>
+		<implements name="java/io/DataOutput"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getChannel()Ljava/nio/channels/FileChannel;"/>
+		<method name="getFD()Ljava/io/FileDescriptor;"/>
+		<method name="getFilePointer()J"/>
+		<method name="length()J"/>
+		<method name="read()I"/>
+		<method name="read([B)I"/>
+		<method name="read([BII)I"/>
+		<method name="seek(J)V"/>
+		<method name="setLength(J)V"/>
+	</class>
+	<class name="java/io/Reader" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<implements name="java/lang/Readable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="mark(I)V"/>
+		<method name="markSupported()Z"/>
+		<method name="read()I"/>
+		<method name="read([C)I"/>
+		<method name="read([CII)I"/>
+		<method name="ready()Z"/>
+		<method name="reset()V"/>
+		<method name="skip(J)J"/>
+		<field name="lock"/>
+	</class>
+	<class name="java/io/SequenceInputStream" since="1">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/util/Enumeration;)V"/>
+	</class>
+	<class name="java/io/Serializable" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/io/SerializablePermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/StreamCorruptedException" since="1">
+		<extends name="java/io/ObjectStreamException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/StreamTokenizer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V" deprecated="15"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<method name="commentChar(I)V"/>
+		<method name="eolIsSignificant(Z)V"/>
+		<method name="lineno()I"/>
+		<method name="lowerCaseMode(Z)V"/>
+		<method name="nextToken()I"/>
+		<method name="ordinaryChar(I)V"/>
+		<method name="ordinaryChars(II)V"/>
+		<method name="parseNumbers()V"/>
+		<method name="pushBack()V"/>
+		<method name="quoteChar(I)V"/>
+		<method name="resetSyntax()V"/>
+		<method name="slashSlashComments(Z)V"/>
+		<method name="slashStarComments(Z)V"/>
+		<method name="whitespaceChars(II)V"/>
+		<method name="wordChars(II)V"/>
+		<field name="TT_EOF"/>
+		<field name="TT_EOL"/>
+		<field name="TT_NUMBER"/>
+		<field name="TT_WORD"/>
+		<field name="nval"/>
+		<field name="sval"/>
+		<field name="ttype"/>
+	</class>
+	<class name="java/io/StringBufferInputStream" since="1" deprecated="1">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+		<field name="buffer" deprecated="29"/>
+		<field name="count" deprecated="29"/>
+		<field name="pos" deprecated="29"/>
+	</class>
+	<class name="java/io/StringReader" since="1">
+		<extends name="java/io/Reader"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/StringWriter" since="1">
+		<extends name="java/io/Writer"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(C)Ljava/io/StringWriter;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/StringWriter;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/StringWriter;"/>
+		<method name="getBuffer()Ljava/lang/StringBuffer;"/>
+	</class>
+	<class name="java/io/SyncFailedException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/UTFDataFormatException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/UncheckedIOException" since="24">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/io/IOException;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/io/IOException;)V"/>
+		<method name="getCause()Ljava/io/IOException;"/>
+	</class>
+	<class name="java/io/UnsupportedEncodingException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/io/WriteAbortedException" since="1">
+		<extends name="java/io/ObjectStreamException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V"/>
+		<field name="detail"/>
+	</class>
+	<class name="java/io/Writer" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<implements name="java/io/Flushable"/>
+		<implements name="java/lang/Appendable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="append(C)Ljava/io/Writer;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/io/Writer;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/io/Writer;"/>
+		<method name="write(I)V"/>
+		<method name="write(Ljava/lang/String;)V"/>
+		<method name="write(Ljava/lang/String;II)V"/>
+		<method name="write([C)V"/>
+		<method name="write([CII)V"/>
+		<field name="lock"/>
+	</class>
+	<class name="java/lang/AbstractMethodError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Appendable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="append(C)Ljava/lang/Appendable;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/Appendable;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/Appendable;"/>
+	</class>
+	<class name="java/lang/ArithmeticException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/ArrayIndexOutOfBoundsException" since="1">
+		<extends name="java/lang/IndexOutOfBoundsException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/ArrayStoreException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/AssertionError" since="1">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(C)V"/>
+		<method name="&lt;init>(D)V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19"/>
+		<method name="&lt;init>(Z)V"/>
+	</class>
+	<class name="java/lang/AutoCloseable" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="close()V"/>
+	</class>
+	<class name="java/lang/Boolean" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="booleanValue()Z"/>
+		<method name="compare(ZZ)I" since="19"/>
+		<method name="compareTo(Ljava/lang/Boolean;)I"/>
+		<method name="getBoolean(Ljava/lang/String;)Z"/>
+		<method name="hashCode(Z)I" since="24"/>
+		<method name="logicalAnd(ZZ)Z" since="24"/>
+		<method name="logicalOr(ZZ)Z" since="24"/>
+		<method name="logicalXor(ZZ)Z" since="24"/>
+		<method name="parseBoolean(Ljava/lang/String;)Z"/>
+		<method name="toString(Z)Ljava/lang/String;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Boolean;"/>
+		<method name="valueOf(Z)Ljava/lang/Boolean;"/>
+		<field name="FALSE"/>
+		<field name="TRUE"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/BootstrapMethodError" since="26">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/Byte" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(B)V" deprecated="31"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+		<method name="compare(BB)I" since="19"/>
+		<method name="compareTo(Ljava/lang/Byte;)I"/>
+		<method name="compareUnsigned(BB)I" since="31"/>
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Byte;"/>
+		<method name="hashCode(B)I" since="24"/>
+		<method name="parseByte(Ljava/lang/String;)B"/>
+		<method name="parseByte(Ljava/lang/String;I)B"/>
+		<method name="toString(B)Ljava/lang/String;"/>
+		<method name="toUnsignedInt(B)I" since="26"/>
+		<method name="toUnsignedLong(B)J" since="26"/>
+		<method name="valueOf(B)Ljava/lang/Byte;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Byte;"/>
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Byte;"/>
+		<field name="BYTES" since="24"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_VALUE"/>
+		<field name="SIZE"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/CharSequence" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="charAt(I)C"/>
+		<method name="chars()Ljava/util/stream/IntStream;" since="24"/>
+		<method name="codePoints()Ljava/util/stream/IntStream;" since="24"/>
+		<method name="length()I"/>
+		<method name="subSequence(II)Ljava/lang/CharSequence;"/>
+	</class>
+	<class name="java/lang/Character" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(C)V"/>
+		<method name="charCount(I)I"/>
+		<method name="charValue()C"/>
+		<method name="codePointAt(Ljava/lang/CharSequence;I)I"/>
+		<method name="codePointAt([CI)I"/>
+		<method name="codePointAt([CII)I"/>
+		<method name="codePointBefore(Ljava/lang/CharSequence;I)I"/>
+		<method name="codePointBefore([CI)I"/>
+		<method name="codePointBefore([CII)I"/>
+		<method name="codePointCount(Ljava/lang/CharSequence;II)I"/>
+		<method name="codePointCount([CII)I"/>
+		<method name="compare(CC)I" since="19"/>
+		<method name="compareTo(Ljava/lang/Character;)I"/>
+		<method name="digit(CI)I"/>
+		<method name="digit(II)I"/>
+		<method name="forDigit(II)C"/>
+		<method name="getDirectionality(C)B"/>
+		<method name="getDirectionality(I)B"/>
+		<method name="getName(I)Ljava/lang/String;" since="19"/>
+		<method name="getNumericValue(C)I"/>
+		<method name="getNumericValue(I)I"/>
+		<method name="getType(C)I"/>
+		<method name="getType(I)I"/>
+		<method name="hashCode(C)I" since="24"/>
+		<method name="highSurrogate(I)C" since="19"/>
+		<method name="isAlphabetic(I)Z" since="19"/>
+		<method name="isBmpCodePoint(I)Z" since="19"/>
+		<method name="isDefined(C)Z"/>
+		<method name="isDefined(I)Z"/>
+		<method name="isDigit(C)Z"/>
+		<method name="isDigit(I)Z"/>
+		<method name="isHighSurrogate(C)Z"/>
+		<method name="isISOControl(C)Z"/>
+		<method name="isISOControl(I)Z"/>
+		<method name="isIdentifierIgnorable(C)Z"/>
+		<method name="isIdentifierIgnorable(I)Z"/>
+		<method name="isIdeographic(I)Z" since="19"/>
+		<method name="isJavaIdentifierPart(C)Z"/>
+		<method name="isJavaIdentifierPart(I)Z"/>
+		<method name="isJavaIdentifierStart(C)Z"/>
+		<method name="isJavaIdentifierStart(I)Z"/>
+		<method name="isJavaLetter(C)Z" deprecated="15"/>
+		<method name="isJavaLetterOrDigit(C)Z" deprecated="15"/>
+		<method name="isLetter(C)Z"/>
+		<method name="isLetter(I)Z"/>
+		<method name="isLetterOrDigit(C)Z"/>
+		<method name="isLetterOrDigit(I)Z"/>
+		<method name="isLowSurrogate(C)Z"/>
+		<method name="isLowerCase(C)Z"/>
+		<method name="isLowerCase(I)Z"/>
+		<method name="isMirrored(C)Z"/>
+		<method name="isMirrored(I)Z"/>
+		<method name="isSpace(C)Z" deprecated="15"/>
+		<method name="isSpaceChar(C)Z"/>
+		<method name="isSpaceChar(I)Z"/>
+		<method name="isSupplementaryCodePoint(I)Z"/>
+		<method name="isSurrogate(C)Z" since="19"/>
+		<method name="isSurrogatePair(CC)Z"/>
+		<method name="isTitleCase(C)Z"/>
+		<method name="isTitleCase(I)Z"/>
+		<method name="isUnicodeIdentifierPart(C)Z"/>
+		<method name="isUnicodeIdentifierPart(I)Z"/>
+		<method name="isUnicodeIdentifierStart(C)Z"/>
+		<method name="isUnicodeIdentifierStart(I)Z"/>
+		<method name="isUpperCase(C)Z"/>
+		<method name="isUpperCase(I)Z"/>
+		<method name="isValidCodePoint(I)Z"/>
+		<method name="isWhitespace(C)Z"/>
+		<method name="isWhitespace(I)Z"/>
+		<method name="lowSurrogate(I)C" since="19"/>
+		<method name="offsetByCodePoints(Ljava/lang/CharSequence;II)I"/>
+		<method name="offsetByCodePoints([CIIII)I"/>
+		<method name="reverseBytes(C)C"/>
+		<method name="toChars(I)[C"/>
+		<method name="toChars(I[CI)I"/>
+		<method name="toCodePoint(CC)I"/>
+		<method name="toLowerCase(C)C"/>
+		<method name="toLowerCase(I)I"/>
+		<method name="toString(C)Ljava/lang/String;"/>
+		<method name="toTitleCase(C)C"/>
+		<method name="toTitleCase(I)I"/>
+		<method name="toUpperCase(C)C"/>
+		<method name="toUpperCase(I)I"/>
+		<method name="valueOf(C)Ljava/lang/Character;"/>
+		<field name="BYTES" since="24"/>
+		<field name="COMBINING_SPACING_MARK"/>
+		<field name="CONNECTOR_PUNCTUATION"/>
+		<field name="CONTROL"/>
+		<field name="CURRENCY_SYMBOL"/>
+		<field name="DASH_PUNCTUATION"/>
+		<field name="DECIMAL_DIGIT_NUMBER"/>
+		<field name="DIRECTIONALITY_ARABIC_NUMBER"/>
+		<field name="DIRECTIONALITY_BOUNDARY_NEUTRAL"/>
+		<field name="DIRECTIONALITY_COMMON_NUMBER_SEPARATOR"/>
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER"/>
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR"/>
+		<field name="DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR"/>
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT"/>
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING"/>
+		<field name="DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE"/>
+		<field name="DIRECTIONALITY_NONSPACING_MARK"/>
+		<field name="DIRECTIONALITY_OTHER_NEUTRALS"/>
+		<field name="DIRECTIONALITY_PARAGRAPH_SEPARATOR"/>
+		<field name="DIRECTIONALITY_POP_DIRECTIONAL_FORMAT"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING"/>
+		<field name="DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE"/>
+		<field name="DIRECTIONALITY_SEGMENT_SEPARATOR"/>
+		<field name="DIRECTIONALITY_UNDEFINED"/>
+		<field name="DIRECTIONALITY_WHITESPACE"/>
+		<field name="ENCLOSING_MARK"/>
+		<field name="END_PUNCTUATION"/>
+		<field name="FINAL_QUOTE_PUNCTUATION"/>
+		<field name="FORMAT"/>
+		<field name="INITIAL_QUOTE_PUNCTUATION"/>
+		<field name="LETTER_NUMBER"/>
+		<field name="LINE_SEPARATOR"/>
+		<field name="LOWERCASE_LETTER"/>
+		<field name="MATH_SYMBOL"/>
+		<field name="MAX_CODE_POINT"/>
+		<field name="MAX_HIGH_SURROGATE"/>
+		<field name="MAX_LOW_SURROGATE"/>
+		<field name="MAX_RADIX"/>
+		<field name="MAX_SURROGATE"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_CODE_POINT"/>
+		<field name="MIN_HIGH_SURROGATE"/>
+		<field name="MIN_LOW_SURROGATE"/>
+		<field name="MIN_RADIX"/>
+		<field name="MIN_SUPPLEMENTARY_CODE_POINT"/>
+		<field name="MIN_SURROGATE"/>
+		<field name="MIN_VALUE"/>
+		<field name="MODIFIER_LETTER"/>
+		<field name="MODIFIER_SYMBOL"/>
+		<field name="NON_SPACING_MARK"/>
+		<field name="OTHER_LETTER"/>
+		<field name="OTHER_NUMBER"/>
+		<field name="OTHER_PUNCTUATION"/>
+		<field name="OTHER_SYMBOL"/>
+		<field name="PARAGRAPH_SEPARATOR"/>
+		<field name="PRIVATE_USE"/>
+		<field name="SIZE"/>
+		<field name="SPACE_SEPARATOR"/>
+		<field name="START_PUNCTUATION"/>
+		<field name="SURROGATE"/>
+		<field name="TITLECASE_LETTER"/>
+		<field name="TYPE"/>
+		<field name="UNASSIGNED"/>
+		<field name="UPPERCASE_LETTER"/>
+	</class>
+	<class name="java/lang/Character$Subset" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Character$UnicodeBlock" since="1">
+		<extends name="java/lang/Character$Subset"/>
+		<method name="forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeBlock;"/>
+		<method name="of(C)Ljava/lang/Character$UnicodeBlock;"/>
+		<method name="of(I)Ljava/lang/Character$UnicodeBlock;"/>
+		<field name="AEGEAN_NUMBERS"/>
+		<field name="ALCHEMICAL_SYMBOLS" since="19"/>
+		<field name="ALPHABETIC_PRESENTATION_FORMS"/>
+		<field name="ANCIENT_GREEK_MUSICAL_NOTATION" since="19"/>
+		<field name="ANCIENT_GREEK_NUMBERS" since="19"/>
+		<field name="ANCIENT_SYMBOLS" since="19"/>
+		<field name="ARABIC"/>
+		<field name="ARABIC_EXTENDED_A" since="26"/>
+		<field name="ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS" since="26"/>
+		<field name="ARABIC_PRESENTATION_FORMS_A"/>
+		<field name="ARABIC_PRESENTATION_FORMS_B"/>
+		<field name="ARABIC_SUPPLEMENT" since="19"/>
+		<field name="ARMENIAN"/>
+		<field name="ARROWS"/>
+		<field name="AVESTAN" since="19"/>
+		<field name="BALINESE" since="19"/>
+		<field name="BAMUM" since="19"/>
+		<field name="BAMUM_SUPPLEMENT" since="19"/>
+		<field name="BASIC_LATIN"/>
+		<field name="BATAK" since="19"/>
+		<field name="BENGALI"/>
+		<field name="BLOCK_ELEMENTS"/>
+		<field name="BOPOMOFO"/>
+		<field name="BOPOMOFO_EXTENDED"/>
+		<field name="BOX_DRAWING"/>
+		<field name="BRAHMI" since="19"/>
+		<field name="BRAILLE_PATTERNS"/>
+		<field name="BUGINESE" since="19"/>
+		<field name="BUHID"/>
+		<field name="BYZANTINE_MUSICAL_SYMBOLS"/>
+		<field name="CARIAN" since="19"/>
+		<field name="CHAKMA" since="26"/>
+		<field name="CHAM" since="19"/>
+		<field name="CHEROKEE"/>
+		<field name="CJK_COMPATIBILITY"/>
+		<field name="CJK_COMPATIBILITY_FORMS"/>
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS"/>
+		<field name="CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT"/>
+		<field name="CJK_RADICALS_SUPPLEMENT"/>
+		<field name="CJK_STROKES" since="19"/>
+		<field name="CJK_SYMBOLS_AND_PUNCTUATION"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C" since="19"/>
+		<field name="CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D" since="19"/>
+		<field name="COMBINING_DIACRITICAL_MARKS"/>
+		<field name="COMBINING_DIACRITICAL_MARKS_SUPPLEMENT" since="19"/>
+		<field name="COMBINING_HALF_MARKS"/>
+		<field name="COMBINING_MARKS_FOR_SYMBOLS"/>
+		<field name="COMMON_INDIC_NUMBER_FORMS" since="19"/>
+		<field name="CONTROL_PICTURES"/>
+		<field name="COPTIC" since="19"/>
+		<field name="COUNTING_ROD_NUMERALS" since="19"/>
+		<field name="CUNEIFORM" since="19"/>
+		<field name="CUNEIFORM_NUMBERS_AND_PUNCTUATION" since="19"/>
+		<field name="CURRENCY_SYMBOLS"/>
+		<field name="CYPRIOT_SYLLABARY"/>
+		<field name="CYRILLIC"/>
+		<field name="CYRILLIC_EXTENDED_A" since="19"/>
+		<field name="CYRILLIC_EXTENDED_B" since="19"/>
+		<field name="CYRILLIC_SUPPLEMENTARY"/>
+		<field name="DESERET"/>
+		<field name="DEVANAGARI"/>
+		<field name="DEVANAGARI_EXTENDED" since="19"/>
+		<field name="DINGBATS"/>
+		<field name="DOMINO_TILES" since="19"/>
+		<field name="EGYPTIAN_HIEROGLYPHS" since="19"/>
+		<field name="EMOTICONS" since="19"/>
+		<field name="ENCLOSED_ALPHANUMERICS"/>
+		<field name="ENCLOSED_ALPHANUMERIC_SUPPLEMENT" since="19"/>
+		<field name="ENCLOSED_CJK_LETTERS_AND_MONTHS"/>
+		<field name="ENCLOSED_IDEOGRAPHIC_SUPPLEMENT" since="19"/>
+		<field name="ETHIOPIC"/>
+		<field name="ETHIOPIC_EXTENDED" since="19"/>
+		<field name="ETHIOPIC_EXTENDED_A" since="19"/>
+		<field name="ETHIOPIC_SUPPLEMENT" since="19"/>
+		<field name="GENERAL_PUNCTUATION"/>
+		<field name="GEOMETRIC_SHAPES"/>
+		<field name="GEORGIAN"/>
+		<field name="GEORGIAN_SUPPLEMENT" since="19"/>
+		<field name="GLAGOLITIC" since="19"/>
+		<field name="GOTHIC"/>
+		<field name="GREEK"/>
+		<field name="GREEK_EXTENDED"/>
+		<field name="GUJARATI"/>
+		<field name="GURMUKHI"/>
+		<field name="HALFWIDTH_AND_FULLWIDTH_FORMS"/>
+		<field name="HANGUL_COMPATIBILITY_JAMO"/>
+		<field name="HANGUL_JAMO"/>
+		<field name="HANGUL_JAMO_EXTENDED_A" since="19"/>
+		<field name="HANGUL_JAMO_EXTENDED_B" since="19"/>
+		<field name="HANGUL_SYLLABLES"/>
+		<field name="HANUNOO"/>
+		<field name="HEBREW"/>
+		<field name="HIGH_PRIVATE_USE_SURROGATES"/>
+		<field name="HIGH_SURROGATES"/>
+		<field name="HIRAGANA"/>
+		<field name="IDEOGRAPHIC_DESCRIPTION_CHARACTERS"/>
+		<field name="IMPERIAL_ARAMAIC" since="19"/>
+		<field name="INSCRIPTIONAL_PAHLAVI" since="19"/>
+		<field name="INSCRIPTIONAL_PARTHIAN" since="19"/>
+		<field name="IPA_EXTENSIONS"/>
+		<field name="JAVANESE" since="19"/>
+		<field name="KAITHI" since="19"/>
+		<field name="KANA_SUPPLEMENT" since="19"/>
+		<field name="KANBUN"/>
+		<field name="KANGXI_RADICALS"/>
+		<field name="KANNADA"/>
+		<field name="KATAKANA"/>
+		<field name="KATAKANA_PHONETIC_EXTENSIONS"/>
+		<field name="KAYAH_LI" since="19"/>
+		<field name="KHAROSHTHI" since="19"/>
+		<field name="KHMER"/>
+		<field name="KHMER_SYMBOLS"/>
+		<field name="LAO"/>
+		<field name="LATIN_1_SUPPLEMENT"/>
+		<field name="LATIN_EXTENDED_A"/>
+		<field name="LATIN_EXTENDED_ADDITIONAL"/>
+		<field name="LATIN_EXTENDED_B"/>
+		<field name="LATIN_EXTENDED_C" since="19"/>
+		<field name="LATIN_EXTENDED_D" since="19"/>
+		<field name="LEPCHA" since="19"/>
+		<field name="LETTERLIKE_SYMBOLS"/>
+		<field name="LIMBU"/>
+		<field name="LINEAR_B_IDEOGRAMS"/>
+		<field name="LINEAR_B_SYLLABARY"/>
+		<field name="LISU" since="19"/>
+		<field name="LOW_SURROGATES"/>
+		<field name="LYCIAN" since="19"/>
+		<field name="LYDIAN" since="19"/>
+		<field name="MAHJONG_TILES" since="19"/>
+		<field name="MALAYALAM"/>
+		<field name="MANDAIC" since="19"/>
+		<field name="MATHEMATICAL_ALPHANUMERIC_SYMBOLS"/>
+		<field name="MATHEMATICAL_OPERATORS"/>
+		<field name="MEETEI_MAYEK" since="19"/>
+		<field name="MEETEI_MAYEK_EXTENSIONS" since="26"/>
+		<field name="MEROITIC_CURSIVE" since="26"/>
+		<field name="MEROITIC_HIEROGLYPHS" since="26"/>
+		<field name="MIAO" since="26"/>
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A"/>
+		<field name="MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B"/>
+		<field name="MISCELLANEOUS_SYMBOLS"/>
+		<field name="MISCELLANEOUS_SYMBOLS_AND_ARROWS"/>
+		<field name="MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS" since="19"/>
+		<field name="MISCELLANEOUS_TECHNICAL"/>
+		<field name="MODIFIER_TONE_LETTERS" since="19"/>
+		<field name="MONGOLIAN"/>
+		<field name="MUSICAL_SYMBOLS"/>
+		<field name="MYANMAR"/>
+		<field name="MYANMAR_EXTENDED_A" since="19"/>
+		<field name="NEW_TAI_LUE" since="19"/>
+		<field name="NKO" since="19"/>
+		<field name="NUMBER_FORMS"/>
+		<field name="OGHAM"/>
+		<field name="OLD_ITALIC"/>
+		<field name="OLD_PERSIAN" since="19"/>
+		<field name="OLD_SOUTH_ARABIAN" since="19"/>
+		<field name="OLD_TURKIC" since="19"/>
+		<field name="OL_CHIKI" since="19"/>
+		<field name="OPTICAL_CHARACTER_RECOGNITION"/>
+		<field name="ORIYA"/>
+		<field name="OSMANYA"/>
+		<field name="PHAGS_PA" since="19"/>
+		<field name="PHAISTOS_DISC" since="19"/>
+		<field name="PHOENICIAN" since="19"/>
+		<field name="PHONETIC_EXTENSIONS"/>
+		<field name="PHONETIC_EXTENSIONS_SUPPLEMENT" since="19"/>
+		<field name="PLAYING_CARDS" since="19"/>
+		<field name="PRIVATE_USE_AREA"/>
+		<field name="REJANG" since="19"/>
+		<field name="RUMI_NUMERAL_SYMBOLS" since="19"/>
+		<field name="RUNIC"/>
+		<field name="SAMARITAN" since="19"/>
+		<field name="SAURASHTRA" since="19"/>
+		<field name="SHARADA" since="26"/>
+		<field name="SHAVIAN"/>
+		<field name="SINHALA"/>
+		<field name="SMALL_FORM_VARIANTS"/>
+		<field name="SORA_SOMPENG" since="26"/>
+		<field name="SPACING_MODIFIER_LETTERS"/>
+		<field name="SPECIALS"/>
+		<field name="SUNDANESE" since="19"/>
+		<field name="SUNDANESE_SUPPLEMENT" since="26"/>
+		<field name="SUPERSCRIPTS_AND_SUBSCRIPTS"/>
+		<field name="SUPPLEMENTAL_ARROWS_A"/>
+		<field name="SUPPLEMENTAL_ARROWS_B"/>
+		<field name="SUPPLEMENTAL_MATHEMATICAL_OPERATORS"/>
+		<field name="SUPPLEMENTAL_PUNCTUATION" since="19"/>
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_A"/>
+		<field name="SUPPLEMENTARY_PRIVATE_USE_AREA_B"/>
+		<field name="SURROGATES_AREA" deprecated="15"/>
+		<field name="SYLOTI_NAGRI" since="19"/>
+		<field name="SYRIAC"/>
+		<field name="TAGALOG"/>
+		<field name="TAGBANWA"/>
+		<field name="TAGS"/>
+		<field name="TAI_LE"/>
+		<field name="TAI_THAM" since="19"/>
+		<field name="TAI_VIET" since="19"/>
+		<field name="TAI_XUAN_JING_SYMBOLS"/>
+		<field name="TAKRI" since="26"/>
+		<field name="TAMIL"/>
+		<field name="TELUGU"/>
+		<field name="THAANA"/>
+		<field name="THAI"/>
+		<field name="TIBETAN"/>
+		<field name="TIFINAGH" since="19"/>
+		<field name="TRANSPORT_AND_MAP_SYMBOLS" since="19"/>
+		<field name="UGARITIC"/>
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS"/>
+		<field name="UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED" since="19"/>
+		<field name="VAI" since="19"/>
+		<field name="VARIATION_SELECTORS"/>
+		<field name="VARIATION_SELECTORS_SUPPLEMENT"/>
+		<field name="VEDIC_EXTENSIONS" since="19"/>
+		<field name="VERTICAL_FORMS" since="19"/>
+		<field name="YIJING_HEXAGRAM_SYMBOLS"/>
+		<field name="YI_RADICALS"/>
+		<field name="YI_SYLLABLES"/>
+	</class>
+	<class name="java/lang/Character$UnicodeScript" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="forName(Ljava/lang/String;)Ljava/lang/Character$UnicodeScript;"/>
+		<method name="of(I)Ljava/lang/Character$UnicodeScript;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Character$UnicodeScript;"/>
+		<method name="values()[Ljava/lang/Character$UnicodeScript;"/>
+		<field name="ARABIC"/>
+		<field name="ARMENIAN"/>
+		<field name="AVESTAN"/>
+		<field name="BALINESE"/>
+		<field name="BAMUM"/>
+		<field name="BATAK"/>
+		<field name="BENGALI"/>
+		<field name="BOPOMOFO"/>
+		<field name="BRAHMI"/>
+		<field name="BRAILLE"/>
+		<field name="BUGINESE"/>
+		<field name="BUHID"/>
+		<field name="CANADIAN_ABORIGINAL"/>
+		<field name="CARIAN"/>
+		<field name="CHAKMA" since="26"/>
+		<field name="CHAM"/>
+		<field name="CHEROKEE"/>
+		<field name="COMMON"/>
+		<field name="COPTIC"/>
+		<field name="CUNEIFORM"/>
+		<field name="CYPRIOT"/>
+		<field name="CYRILLIC"/>
+		<field name="DESERET"/>
+		<field name="DEVANAGARI"/>
+		<field name="EGYPTIAN_HIEROGLYPHS"/>
+		<field name="ETHIOPIC"/>
+		<field name="GEORGIAN"/>
+		<field name="GLAGOLITIC"/>
+		<field name="GOTHIC"/>
+		<field name="GREEK"/>
+		<field name="GUJARATI"/>
+		<field name="GURMUKHI"/>
+		<field name="HAN"/>
+		<field name="HANGUL"/>
+		<field name="HANUNOO"/>
+		<field name="HEBREW"/>
+		<field name="HIRAGANA"/>
+		<field name="IMPERIAL_ARAMAIC"/>
+		<field name="INHERITED"/>
+		<field name="INSCRIPTIONAL_PAHLAVI"/>
+		<field name="INSCRIPTIONAL_PARTHIAN"/>
+		<field name="JAVANESE"/>
+		<field name="KAITHI"/>
+		<field name="KANNADA"/>
+		<field name="KATAKANA"/>
+		<field name="KAYAH_LI"/>
+		<field name="KHAROSHTHI"/>
+		<field name="KHMER"/>
+		<field name="LAO"/>
+		<field name="LATIN"/>
+		<field name="LEPCHA"/>
+		<field name="LIMBU"/>
+		<field name="LINEAR_B"/>
+		<field name="LISU"/>
+		<field name="LYCIAN"/>
+		<field name="LYDIAN"/>
+		<field name="MALAYALAM"/>
+		<field name="MANDAIC"/>
+		<field name="MEETEI_MAYEK"/>
+		<field name="MEROITIC_CURSIVE" since="26"/>
+		<field name="MEROITIC_HIEROGLYPHS" since="26"/>
+		<field name="MIAO" since="26"/>
+		<field name="MONGOLIAN"/>
+		<field name="MYANMAR"/>
+		<field name="NEW_TAI_LUE"/>
+		<field name="NKO"/>
+		<field name="OGHAM"/>
+		<field name="OLD_ITALIC"/>
+		<field name="OLD_PERSIAN"/>
+		<field name="OLD_SOUTH_ARABIAN"/>
+		<field name="OLD_TURKIC"/>
+		<field name="OL_CHIKI"/>
+		<field name="ORIYA"/>
+		<field name="OSMANYA"/>
+		<field name="PHAGS_PA"/>
+		<field name="PHOENICIAN"/>
+		<field name="REJANG"/>
+		<field name="RUNIC"/>
+		<field name="SAMARITAN"/>
+		<field name="SAURASHTRA"/>
+		<field name="SHARADA" since="26"/>
+		<field name="SHAVIAN"/>
+		<field name="SINHALA"/>
+		<field name="SORA_SOMPENG" since="26"/>
+		<field name="SUNDANESE"/>
+		<field name="SYLOTI_NAGRI"/>
+		<field name="SYRIAC"/>
+		<field name="TAGALOG"/>
+		<field name="TAGBANWA"/>
+		<field name="TAI_LE"/>
+		<field name="TAI_THAM"/>
+		<field name="TAI_VIET"/>
+		<field name="TAKRI" since="26"/>
+		<field name="TAMIL"/>
+		<field name="TELUGU"/>
+		<field name="THAANA"/>
+		<field name="THAI"/>
+		<field name="TIBETAN"/>
+		<field name="TIFINAGH"/>
+		<field name="UGARITIC"/>
+		<field name="UNKNOWN"/>
+		<field name="VAI"/>
+		<field name="YI"/>
+	</class>
+	<class name="java/lang/Class" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/reflect/AnnotatedElement"/>
+		<implements name="java/lang/reflect/GenericDeclaration"/>
+		<implements name="java/lang/reflect/Type"/>
+		<method name="asSubclass(Ljava/lang/Class;)Ljava/lang/Class;"/>
+		<method name="cast(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="desiredAssertionStatus()Z"/>
+		<method name="forName(Ljava/lang/String;)Ljava/lang/Class;"/>
+		<method name="forName(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;"/>
+		<method name="getCanonicalName()Ljava/lang/String;"/>
+		<method name="getClassLoader()Ljava/lang/ClassLoader;"/>
+		<method name="getClasses()[Ljava/lang/Class;"/>
+		<method name="getComponentType()Ljava/lang/Class;"/>
+		<method name="getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"/>
+		<method name="getConstructors()[Ljava/lang/reflect/Constructor;"/>
+		<method name="getDeclaredClasses()[Ljava/lang/Class;"/>
+		<method name="getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"/>
+		<method name="getDeclaredConstructors()[Ljava/lang/reflect/Constructor;"/>
+		<method name="getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;"/>
+		<method name="getDeclaredFields()[Ljava/lang/reflect/Field;"/>
+		<method name="getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"/>
+		<method name="getDeclaredMethods()[Ljava/lang/reflect/Method;"/>
+		<method name="getDeclaringClass()Ljava/lang/Class;"/>
+		<method name="getEnclosingClass()Ljava/lang/Class;"/>
+		<method name="getEnclosingConstructor()Ljava/lang/reflect/Constructor;"/>
+		<method name="getEnclosingMethod()Ljava/lang/reflect/Method;"/>
+		<method name="getEnumConstants()[Ljava/lang/Object;"/>
+		<method name="getField(Ljava/lang/String;)Ljava/lang/reflect/Field;"/>
+		<method name="getFields()[Ljava/lang/reflect/Field;"/>
+		<method name="getGenericInterfaces()[Ljava/lang/reflect/Type;"/>
+		<method name="getGenericSuperclass()Ljava/lang/reflect/Type;"/>
+		<method name="getInterfaces()[Ljava/lang/Class;"/>
+		<method name="getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"/>
+		<method name="getMethods()[Ljava/lang/reflect/Method;"/>
+		<method name="getModifiers()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPackage()Ljava/lang/Package;"/>
+		<method name="getPackageName()Ljava/lang/String;" since="31"/>
+		<method name="getProtectionDomain()Ljava/security/ProtectionDomain;"/>
+		<method name="getResource(Ljava/lang/String;)Ljava/net/URL;"/>
+		<method name="getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
+		<method name="getSigners()[Ljava/lang/Object;"/>
+		<method name="getSimpleName()Ljava/lang/String;"/>
+		<method name="getSuperclass()Ljava/lang/Class;"/>
+		<method name="getTypeName()Ljava/lang/String;" since="26"/>
+		<method name="isAnnotation()Z"/>
+		<method name="isAnonymousClass()Z"/>
+		<method name="isArray()Z"/>
+		<method name="isAssignableFrom(Ljava/lang/Class;)Z"/>
+		<method name="isEnum()Z"/>
+		<method name="isInstance(Ljava/lang/Object;)Z"/>
+		<method name="isInterface()Z"/>
+		<method name="isLocalClass()Z"/>
+		<method name="isMemberClass()Z"/>
+		<method name="isPrimitive()Z"/>
+		<method name="isSynthetic()Z"/>
+		<method name="newInstance()Ljava/lang/Object;"/>
+		<method name="toGenericString()Ljava/lang/String;" since="26"/>
+	</class>
+	<class name="java/lang/ClassCastException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/ClassCircularityError" since="1">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/ClassFormatError" since="1">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/ClassLoader" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/ClassLoader;)V"/>
+		<method name="clearAssertionStatus()V"/>
+		<method name="defineClass(Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/ProtectionDomain;)Ljava/lang/Class;"/>
+		<method name="defineClass(Ljava/lang/String;[BII)Ljava/lang/Class;"/>
+		<method name="defineClass(Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;"/>
+		<method name="defineClass([BII)Ljava/lang/Class;" deprecated="15"/>
+		<method name="definePackage(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package;"/>
+		<method name="findClass(Ljava/lang/String;)Ljava/lang/Class;"/>
+		<method name="findLibrary(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="findLoadedClass(Ljava/lang/String;)Ljava/lang/Class;"/>
+		<method name="findResource(Ljava/lang/String;)Ljava/net/URL;"/>
+		<method name="findResources(Ljava/lang/String;)Ljava/util/Enumeration;"/>
+		<method name="findSystemClass(Ljava/lang/String;)Ljava/lang/Class;"/>
+		<method name="getPackage(Ljava/lang/String;)Ljava/lang/Package;"/>
+		<method name="getPackages()[Ljava/lang/Package;"/>
+		<method name="getParent()Ljava/lang/ClassLoader;"/>
+		<method name="getResource(Ljava/lang/String;)Ljava/net/URL;"/>
+		<method name="getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
+		<method name="getResources(Ljava/lang/String;)Ljava/util/Enumeration;"/>
+		<method name="getSystemClassLoader()Ljava/lang/ClassLoader;"/>
+		<method name="getSystemResource(Ljava/lang/String;)Ljava/net/URL;"/>
+		<method name="getSystemResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
+		<method name="getSystemResources(Ljava/lang/String;)Ljava/util/Enumeration;"/>
+		<method name="loadClass(Ljava/lang/String;)Ljava/lang/Class;"/>
+		<method name="loadClass(Ljava/lang/String;Z)Ljava/lang/Class;"/>
+		<method name="registerAsParallelCapable()Z" since="24"/>
+		<method name="resolveClass(Ljava/lang/Class;)V"/>
+		<method name="setClassAssertionStatus(Ljava/lang/String;Z)V"/>
+		<method name="setDefaultAssertionStatus(Z)V"/>
+		<method name="setPackageAssertionStatus(Ljava/lang/String;Z)V"/>
+		<method name="setSigners(Ljava/lang/Class;[Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/lang/ClassNotFoundException" since="1">
+		<extends name="java/lang/Exception" removed="19"/>
+		<extends name="java/lang/ReflectiveOperationException" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="getException()Ljava/lang/Throwable;"/>
+	</class>
+	<class name="java/lang/CloneNotSupportedException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Cloneable" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/lang/Comparable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="compareTo(Ljava/lang/Object;)I"/>
+	</class>
+	<class name="java/lang/Compiler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="command(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="compileClass(Ljava/lang/Class;)Z"/>
+		<method name="compileClasses(Ljava/lang/String;)Z"/>
+		<method name="disable()V"/>
+		<method name="enable()V"/>
+	</class>
+	<class name="java/lang/Deprecated" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="forRemoval()Z" since="31"/>
+		<method name="since()Ljava/lang/String;" since="31"/>
+	</class>
+	<class name="java/lang/Double" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(D)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="compare(DD)I"/>
+		<method name="compareTo(Ljava/lang/Double;)I"/>
+		<method name="doubleToLongBits(D)J"/>
+		<method name="doubleToRawLongBits(D)J"/>
+		<method name="hashCode(D)I" since="24"/>
+		<method name="isFinite(D)Z" since="24"/>
+		<method name="isInfinite()Z"/>
+		<method name="isInfinite(D)Z"/>
+		<method name="isNaN()Z"/>
+		<method name="isNaN(D)Z"/>
+		<method name="longBitsToDouble(J)D"/>
+		<method name="max(DD)D" since="24"/>
+		<method name="min(DD)D" since="24"/>
+		<method name="parseDouble(Ljava/lang/String;)D"/>
+		<method name="sum(DD)D" since="24"/>
+		<method name="toHexString(D)Ljava/lang/String;"/>
+		<method name="toString(D)Ljava/lang/String;"/>
+		<method name="valueOf(D)Ljava/lang/Double;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Double;"/>
+		<field name="BYTES" since="24"/>
+		<field name="MAX_EXPONENT" since="9"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_EXPONENT" since="9"/>
+		<field name="MIN_NORMAL" since="9"/>
+		<field name="MIN_VALUE"/>
+		<field name="NEGATIVE_INFINITY"/>
+		<field name="NaN"/>
+		<field name="POSITIVE_INFINITY"/>
+		<field name="SIZE"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/Enum" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="compareTo(Ljava/lang/Enum;)I"/>
+		<method name="getDeclaringClass()Ljava/lang/Class;"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="ordinal()I"/>
+		<method name="valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;"/>
+	</class>
+	<class name="java/lang/EnumConstantNotPresentException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
+		<method name="constantName()Ljava/lang/String;"/>
+		<method name="enumType()Ljava/lang/Class;"/>
+	</class>
+	<class name="java/lang/Error" since="1">
+		<extends name="java/lang/Throwable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/Exception" since="1">
+		<extends name="java/lang/Throwable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/ExceptionInInitializerError" since="1">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="getException()Ljava/lang/Throwable;"/>
+	</class>
+	<class name="java/lang/Float" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(D)V"/>
+		<method name="&lt;init>(F)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="compare(FF)I"/>
+		<method name="compareTo(Ljava/lang/Float;)I"/>
+		<method name="floatToIntBits(F)I"/>
+		<method name="floatToRawIntBits(F)I"/>
+		<method name="hashCode(F)I" since="24"/>
+		<method name="intBitsToFloat(I)F"/>
+		<method name="isFinite(F)Z" since="24"/>
+		<method name="isInfinite()Z"/>
+		<method name="isInfinite(F)Z"/>
+		<method name="isNaN()Z"/>
+		<method name="isNaN(F)Z"/>
+		<method name="max(FF)F" since="24"/>
+		<method name="min(FF)F" since="24"/>
+		<method name="parseFloat(Ljava/lang/String;)F"/>
+		<method name="sum(FF)F" since="24"/>
+		<method name="toHexString(F)Ljava/lang/String;"/>
+		<method name="toString(F)Ljava/lang/String;"/>
+		<method name="valueOf(F)Ljava/lang/Float;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Float;"/>
+		<field name="BYTES" since="24"/>
+		<field name="MAX_EXPONENT" since="9"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_EXPONENT" since="9"/>
+		<field name="MIN_NORMAL" since="9"/>
+		<field name="MIN_VALUE"/>
+		<field name="NEGATIVE_INFINITY"/>
+		<field name="NaN"/>
+		<field name="POSITIVE_INFINITY"/>
+		<field name="SIZE"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/FunctionalInterface" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="java/lang/IllegalAccessError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/IllegalAccessException" since="1">
+		<extends name="java/lang/Exception" removed="19"/>
+		<extends name="java/lang/ReflectiveOperationException" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/IllegalArgumentException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/IllegalMonitorStateException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/IllegalStateException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/IllegalThreadStateException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/IncompatibleClassChangeError" since="1">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/IndexOutOfBoundsException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/InheritableThreadLocal" since="1">
+		<extends name="java/lang/ThreadLocal"/>
+		<method name="&lt;init>()V"/>
+		<method name="childValue(Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/lang/InstantiationError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/InstantiationException" since="1">
+		<extends name="java/lang/Exception" removed="19"/>
+		<extends name="java/lang/ReflectiveOperationException" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Integer" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="bitCount(I)I"/>
+		<method name="compare(II)I" since="19"/>
+		<method name="compareTo(Ljava/lang/Integer;)I"/>
+		<method name="compareUnsigned(II)I" since="26"/>
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Integer;"/>
+		<method name="divideUnsigned(II)I" since="26"/>
+		<method name="getInteger(Ljava/lang/String;)Ljava/lang/Integer;"/>
+		<method name="getInteger(Ljava/lang/String;I)Ljava/lang/Integer;"/>
+		<method name="getInteger(Ljava/lang/String;Ljava/lang/Integer;)Ljava/lang/Integer;"/>
+		<method name="hashCode(I)I" since="24"/>
+		<method name="highestOneBit(I)I"/>
+		<method name="lowestOneBit(I)I"/>
+		<method name="max(II)I" since="24"/>
+		<method name="min(II)I" since="24"/>
+		<method name="numberOfLeadingZeros(I)I"/>
+		<method name="numberOfTrailingZeros(I)I"/>
+		<method name="parseInt(Ljava/lang/String;)I"/>
+		<method name="parseInt(Ljava/lang/String;I)I"/>
+		<method name="parseUnsignedInt(Ljava/lang/String;)I" since="26"/>
+		<method name="parseUnsignedInt(Ljava/lang/String;I)I" since="26"/>
+		<method name="remainderUnsigned(II)I" since="26"/>
+		<method name="reverse(I)I"/>
+		<method name="reverseBytes(I)I"/>
+		<method name="rotateLeft(II)I"/>
+		<method name="rotateRight(II)I"/>
+		<method name="signum(I)I"/>
+		<method name="sum(II)I" since="24"/>
+		<method name="toBinaryString(I)Ljava/lang/String;"/>
+		<method name="toHexString(I)Ljava/lang/String;"/>
+		<method name="toOctalString(I)Ljava/lang/String;"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+		<method name="toString(II)Ljava/lang/String;"/>
+		<method name="toUnsignedLong(I)J" since="26"/>
+		<method name="toUnsignedString(I)Ljava/lang/String;" since="26"/>
+		<method name="toUnsignedString(II)Ljava/lang/String;" since="26"/>
+		<method name="valueOf(I)Ljava/lang/Integer;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Integer;"/>
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Integer;"/>
+		<field name="BYTES" since="24"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_VALUE"/>
+		<field name="SIZE"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/InternalError" since="1">
+		<extends name="java/lang/VirtualMachineError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="24"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="24"/>
+	</class>
+	<class name="java/lang/InterruptedException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Iterable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="forEach(Ljava/util/function/Consumer;)V" since="24"/>
+		<method name="iterator()Ljava/util/Iterator;"/>
+		<method name="spliterator()Ljava/util/Spliterator;" since="24"/>
+	</class>
+	<class name="java/lang/LinkageError" since="1">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19"/>
+	</class>
+	<class name="java/lang/Long" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="bitCount(J)I"/>
+		<method name="compare(JJ)I" since="19"/>
+		<method name="compareTo(Ljava/lang/Long;)I"/>
+		<method name="compareUnsigned(JJ)I" since="26"/>
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Long;"/>
+		<method name="divideUnsigned(JJ)J" since="26"/>
+		<method name="getLong(Ljava/lang/String;)Ljava/lang/Long;"/>
+		<method name="getLong(Ljava/lang/String;J)Ljava/lang/Long;"/>
+		<method name="getLong(Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long;"/>
+		<method name="hashCode(J)I" since="24"/>
+		<method name="highestOneBit(J)J"/>
+		<method name="lowestOneBit(J)J"/>
+		<method name="max(JJ)J" since="24"/>
+		<method name="min(JJ)J" since="24"/>
+		<method name="numberOfLeadingZeros(J)I"/>
+		<method name="numberOfTrailingZeros(J)I"/>
+		<method name="parseLong(Ljava/lang/String;)J"/>
+		<method name="parseLong(Ljava/lang/String;I)J"/>
+		<method name="parseUnsignedLong(Ljava/lang/String;)J" since="26"/>
+		<method name="parseUnsignedLong(Ljava/lang/String;I)J" since="26"/>
+		<method name="remainderUnsigned(JJ)J" since="26"/>
+		<method name="reverse(J)J"/>
+		<method name="reverseBytes(J)J"/>
+		<method name="rotateLeft(JI)J"/>
+		<method name="rotateRight(JI)J"/>
+		<method name="signum(J)I"/>
+		<method name="sum(JJ)J" since="24"/>
+		<method name="toBinaryString(J)Ljava/lang/String;"/>
+		<method name="toHexString(J)Ljava/lang/String;"/>
+		<method name="toOctalString(J)Ljava/lang/String;"/>
+		<method name="toString(J)Ljava/lang/String;"/>
+		<method name="toString(JI)Ljava/lang/String;"/>
+		<method name="toUnsignedString(J)Ljava/lang/String;" since="26"/>
+		<method name="toUnsignedString(JI)Ljava/lang/String;" since="26"/>
+		<method name="valueOf(J)Ljava/lang/Long;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Long;"/>
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Long;"/>
+		<field name="BYTES" since="24"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_VALUE"/>
+		<field name="SIZE"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/Math" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="IEEEremainder(DD)D"/>
+		<method name="abs(D)D"/>
+		<method name="abs(F)F"/>
+		<method name="abs(I)I"/>
+		<method name="abs(J)J"/>
+		<method name="acos(D)D"/>
+		<method name="addExact(II)I" since="24"/>
+		<method name="addExact(JJ)J" since="24"/>
+		<method name="asin(D)D"/>
+		<method name="atan(D)D"/>
+		<method name="atan2(DD)D"/>
+		<method name="cbrt(D)D"/>
+		<method name="ceil(D)D"/>
+		<method name="copySign(DD)D" since="9"/>
+		<method name="copySign(FF)F" since="9"/>
+		<method name="cos(D)D"/>
+		<method name="cosh(D)D"/>
+		<method name="decrementExact(I)I" since="24"/>
+		<method name="decrementExact(J)J" since="24"/>
+		<method name="exp(D)D"/>
+		<method name="expm1(D)D"/>
+		<method name="floor(D)D"/>
+		<method name="floorDiv(II)I" since="24"/>
+		<method name="floorDiv(JI)J" since="31"/>
+		<method name="floorDiv(JJ)J" since="24"/>
+		<method name="floorMod(II)I" since="24"/>
+		<method name="floorMod(JI)I" since="31"/>
+		<method name="floorMod(JJ)J" since="24"/>
+		<method name="getExponent(D)I" since="9"/>
+		<method name="getExponent(F)I" since="9"/>
+		<method name="hypot(DD)D"/>
+		<method name="incrementExact(I)I" since="24"/>
+		<method name="incrementExact(J)J" since="24"/>
+		<method name="log(D)D"/>
+		<method name="log10(D)D"/>
+		<method name="log1p(D)D"/>
+		<method name="max(DD)D"/>
+		<method name="max(FF)F"/>
+		<method name="max(II)I"/>
+		<method name="max(JJ)J"/>
+		<method name="min(DD)D"/>
+		<method name="min(FF)F"/>
+		<method name="min(II)I"/>
+		<method name="min(JJ)J"/>
+		<method name="multiplyExact(II)I" since="24"/>
+		<method name="multiplyExact(JI)J" since="31"/>
+		<method name="multiplyExact(JJ)J" since="24"/>
+		<method name="multiplyFull(II)J" since="31"/>
+		<method name="multiplyHigh(JJ)J" since="31"/>
+		<method name="negateExact(I)I" since="24"/>
+		<method name="negateExact(J)J" since="24"/>
+		<method name="nextAfter(DD)D" since="9"/>
+		<method name="nextAfter(FD)F" since="9"/>
+		<method name="nextDown(D)D" since="24"/>
+		<method name="nextDown(F)F" since="24"/>
+		<method name="nextUp(D)D" since="9"/>
+		<method name="nextUp(F)F" since="9"/>
+		<method name="pow(DD)D"/>
+		<method name="random()D"/>
+		<method name="rint(D)D"/>
+		<method name="round(D)J"/>
+		<method name="round(F)I"/>
+		<method name="scalb(DI)D" since="9"/>
+		<method name="scalb(FI)F" since="9"/>
+		<method name="signum(D)D"/>
+		<method name="signum(F)F"/>
+		<method name="sin(D)D"/>
+		<method name="sinh(D)D"/>
+		<method name="sqrt(D)D"/>
+		<method name="subtractExact(II)I" since="24"/>
+		<method name="subtractExact(JJ)J" since="24"/>
+		<method name="tan(D)D"/>
+		<method name="tanh(D)D"/>
+		<method name="toDegrees(D)D"/>
+		<method name="toIntExact(J)I" since="24"/>
+		<method name="toRadians(D)D"/>
+		<method name="ulp(D)D"/>
+		<method name="ulp(F)F"/>
+		<field name="E"/>
+		<field name="PI"/>
+	</class>
+	<class name="java/lang/NegativeArraySizeException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/NoClassDefFoundError" since="1">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/NoSuchFieldError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/NoSuchFieldException" since="1">
+		<extends name="java/lang/Exception" removed="19"/>
+		<extends name="java/lang/ReflectiveOperationException" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/NoSuchMethodError" since="1">
+		<extends name="java/lang/IncompatibleClassChangeError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/NoSuchMethodException" since="1">
+		<extends name="java/lang/Exception" removed="19"/>
+		<extends name="java/lang/ReflectiveOperationException" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/NullPointerException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Number" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="byteValue()B"/>
+		<method name="doubleValue()D"/>
+		<method name="floatValue()F"/>
+		<method name="intValue()I"/>
+		<method name="longValue()J"/>
+		<method name="shortValue()S"/>
+	</class>
+	<class name="java/lang/NumberFormatException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Object" since="1">
+		<method name="&lt;init>()V"/>
+		<method name="clone()Ljava/lang/Object;"/>
+		<method name="equals(Ljava/lang/Object;)Z"/>
+		<method name="finalize()V"/>
+		<method name="getClass()Ljava/lang/Class;"/>
+		<method name="hashCode()I"/>
+		<method name="notify()V"/>
+		<method name="notifyAll()V"/>
+		<method name="toString()Ljava/lang/String;"/>
+		<method name="wait()V"/>
+		<method name="wait(J)V"/>
+		<method name="wait(JI)V"/>
+	</class>
+	<class name="java/lang/OutOfMemoryError" since="1">
+		<extends name="java/lang/VirtualMachineError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/Override" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="java/lang/Package" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/AnnotatedElement"/>
+		<method name="getImplementationTitle()Ljava/lang/String;"/>
+		<method name="getImplementationVendor()Ljava/lang/String;"/>
+		<method name="getImplementationVersion()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPackage(Ljava/lang/String;)Ljava/lang/Package;"/>
+		<method name="getPackages()[Ljava/lang/Package;"/>
+		<method name="getSpecificationTitle()Ljava/lang/String;"/>
+		<method name="getSpecificationVendor()Ljava/lang/String;"/>
+		<method name="getSpecificationVersion()Ljava/lang/String;"/>
+		<method name="isCompatibleWith(Ljava/lang/String;)Z"/>
+		<method name="isSealed()Z"/>
+		<method name="isSealed(Ljava/net/URL;)Z"/>
+	</class>
+	<class name="java/lang/Process" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="destroy()V"/>
+		<method name="destroyForcibly()Ljava/lang/Process;" since="26"/>
+		<method name="exitValue()I"/>
+		<method name="getErrorStream()Ljava/io/InputStream;"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="isAlive()Z" since="26"/>
+		<method name="waitFor()I"/>
+		<method name="waitFor(JLjava/util/concurrent/TimeUnit;)Z" since="26"/>
+	</class>
+	<class name="java/lang/ProcessBuilder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/List;)V"/>
+		<method name="&lt;init>([Ljava/lang/String;)V"/>
+		<method name="command()Ljava/util/List;"/>
+		<method name="command(Ljava/util/List;)Ljava/lang/ProcessBuilder;"/>
+		<method name="command([Ljava/lang/String;)Ljava/lang/ProcessBuilder;"/>
+		<method name="directory()Ljava/io/File;"/>
+		<method name="directory(Ljava/io/File;)Ljava/lang/ProcessBuilder;"/>
+		<method name="environment()Ljava/util/Map;"/>
+		<method name="inheritIO()Ljava/lang/ProcessBuilder;" since="26"/>
+		<method name="redirectError()Ljava/lang/ProcessBuilder$Redirect;" since="26"/>
+		<method name="redirectError(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26"/>
+		<method name="redirectError(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26"/>
+		<method name="redirectErrorStream()Z"/>
+		<method name="redirectErrorStream(Z)Ljava/lang/ProcessBuilder;"/>
+		<method name="redirectInput()Ljava/lang/ProcessBuilder$Redirect;" since="26"/>
+		<method name="redirectInput(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26"/>
+		<method name="redirectInput(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26"/>
+		<method name="redirectOutput()Ljava/lang/ProcessBuilder$Redirect;" since="26"/>
+		<method name="redirectOutput(Ljava/io/File;)Ljava/lang/ProcessBuilder;" since="26"/>
+		<method name="redirectOutput(Ljava/lang/ProcessBuilder$Redirect;)Ljava/lang/ProcessBuilder;" since="26"/>
+		<method name="start()Ljava/lang/Process;"/>
+	</class>
+	<class name="java/lang/ProcessBuilder$Redirect" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="appendTo(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
+		<method name="file()Ljava/io/File;"/>
+		<method name="from(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
+		<method name="to(Ljava/io/File;)Ljava/lang/ProcessBuilder$Redirect;"/>
+		<method name="type()Ljava/lang/ProcessBuilder$Redirect$Type;"/>
+		<field name="INHERIT"/>
+		<field name="PIPE"/>
+	</class>
+	<class name="java/lang/ProcessBuilder$Redirect$Type" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/ProcessBuilder$Redirect$Type;"/>
+		<method name="values()[Ljava/lang/ProcessBuilder$Redirect$Type;"/>
+		<field name="APPEND"/>
+		<field name="INHERIT"/>
+		<field name="PIPE"/>
+		<field name="READ"/>
+		<field name="WRITE"/>
+	</class>
+	<class name="java/lang/Readable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="read(Ljava/nio/CharBuffer;)I"/>
+	</class>
+	<class name="java/lang/ReflectiveOperationException" since="19">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/Runnable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="run()V"/>
+	</class>
+	<class name="java/lang/Runtime" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addShutdownHook(Ljava/lang/Thread;)V"/>
+		<method name="availableProcessors()I"/>
+		<method name="exec(Ljava/lang/String;)Ljava/lang/Process;"/>
+		<method name="exec(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process;"/>
+		<method name="exec(Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;"/>
+		<method name="exec([Ljava/lang/String;)Ljava/lang/Process;"/>
+		<method name="exec([Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Process;"/>
+		<method name="exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;"/>
+		<method name="exit(I)V"/>
+		<method name="freeMemory()J"/>
+		<method name="gc()V"/>
+		<method name="getLocalizedInputStream(Ljava/io/InputStream;)Ljava/io/InputStream;" deprecated="15"/>
+		<method name="getLocalizedOutputStream(Ljava/io/OutputStream;)Ljava/io/OutputStream;" deprecated="15"/>
+		<method name="getRuntime()Ljava/lang/Runtime;"/>
+		<method name="halt(I)V"/>
+		<method name="load(Ljava/lang/String;)V"/>
+		<method name="loadLibrary(Ljava/lang/String;)V"/>
+		<method name="maxMemory()J"/>
+		<method name="removeShutdownHook(Ljava/lang/Thread;)Z"/>
+		<method name="runFinalization()V"/>
+		<method name="runFinalizersOnExit(Z)V" deprecated="15"/>
+		<method name="totalMemory()J"/>
+		<method name="traceInstructions(Z)V"/>
+		<method name="traceMethodCalls(Z)V"/>
+	</class>
+	<class name="java/lang/RuntimeException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="24"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/RuntimePermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/SafeVarargs" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="java/lang/SecurityException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/SecurityManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="checkAccept(Ljava/lang/String;I)V"/>
+		<method name="checkAccess(Ljava/lang/Thread;)V"/>
+		<method name="checkAccess(Ljava/lang/ThreadGroup;)V"/>
+		<method name="checkAwtEventQueueAccess()V"/>
+		<method name="checkConnect(Ljava/lang/String;I)V"/>
+		<method name="checkConnect(Ljava/lang/String;ILjava/lang/Object;)V"/>
+		<method name="checkCreateClassLoader()V"/>
+		<method name="checkDelete(Ljava/lang/String;)V"/>
+		<method name="checkExec(Ljava/lang/String;)V"/>
+		<method name="checkExit(I)V"/>
+		<method name="checkLink(Ljava/lang/String;)V"/>
+		<method name="checkListen(I)V"/>
+		<method name="checkMemberAccess(Ljava/lang/Class;I)V"/>
+		<method name="checkMulticast(Ljava/net/InetAddress;)V"/>
+		<method name="checkMulticast(Ljava/net/InetAddress;B)V" deprecated="15"/>
+		<method name="checkPackageAccess(Ljava/lang/String;)V"/>
+		<method name="checkPackageDefinition(Ljava/lang/String;)V"/>
+		<method name="checkPermission(Ljava/security/Permission;)V"/>
+		<method name="checkPermission(Ljava/security/Permission;Ljava/lang/Object;)V"/>
+		<method name="checkPrintJobAccess()V"/>
+		<method name="checkPropertiesAccess()V"/>
+		<method name="checkPropertyAccess(Ljava/lang/String;)V"/>
+		<method name="checkRead(Ljava/io/FileDescriptor;)V"/>
+		<method name="checkRead(Ljava/lang/String;)V"/>
+		<method name="checkRead(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="checkSecurityAccess(Ljava/lang/String;)V"/>
+		<method name="checkSetFactory()V"/>
+		<method name="checkSystemClipboardAccess()V"/>
+		<method name="checkTopLevelWindow(Ljava/lang/Object;)Z"/>
+		<method name="checkWrite(Ljava/io/FileDescriptor;)V"/>
+		<method name="checkWrite(Ljava/lang/String;)V"/>
+		<method name="classDepth(Ljava/lang/String;)I" deprecated="15"/>
+		<method name="classLoaderDepth()I" deprecated="15"/>
+		<method name="currentClassLoader()Ljava/lang/ClassLoader;" deprecated="15"/>
+		<method name="currentLoadedClass()Ljava/lang/Class;" deprecated="15"/>
+		<method name="getClassContext()[Ljava/lang/Class;"/>
+		<method name="getInCheck()Z" deprecated="15"/>
+		<method name="getSecurityContext()Ljava/lang/Object;"/>
+		<method name="getThreadGroup()Ljava/lang/ThreadGroup;"/>
+		<method name="inClass(Ljava/lang/String;)Z" deprecated="15"/>
+		<method name="inClassLoader()Z" deprecated="15"/>
+		<field name="inCheck" deprecated="15"/>
+	</class>
+	<class name="java/lang/Short" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="31"/>
+		<method name="&lt;init>(S)V" deprecated="31"/>
+		<method name="compare(SS)I" since="19"/>
+		<method name="compareTo(Ljava/lang/Short;)I"/>
+		<method name="compareUnsigned(SS)I" since="31"/>
+		<method name="decode(Ljava/lang/String;)Ljava/lang/Short;"/>
+		<method name="hashCode(S)I" since="24"/>
+		<method name="parseShort(Ljava/lang/String;)S"/>
+		<method name="parseShort(Ljava/lang/String;I)S"/>
+		<method name="reverseBytes(S)S"/>
+		<method name="toString(S)Ljava/lang/String;"/>
+		<method name="toUnsignedInt(S)I" since="26"/>
+		<method name="toUnsignedLong(S)J" since="26"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Short;"/>
+		<method name="valueOf(Ljava/lang/String;I)Ljava/lang/Short;"/>
+		<method name="valueOf(S)Ljava/lang/Short;"/>
+		<field name="BYTES" since="24"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_VALUE"/>
+		<field name="SIZE"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/StackOverflowError" since="1">
+		<extends name="java/lang/VirtualMachineError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/StackTraceElement" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="getClassName()Ljava/lang/String;"/>
+		<method name="getFileName()Ljava/lang/String;"/>
+		<method name="getLineNumber()I"/>
+		<method name="getMethodName()Ljava/lang/String;"/>
+		<method name="isNativeMethod()Z"/>
+	</class>
+	<class name="java/lang/StrictMath" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="IEEEremainder(DD)D"/>
+		<method name="abs(D)D"/>
+		<method name="abs(F)F"/>
+		<method name="abs(I)I"/>
+		<method name="abs(J)J"/>
+		<method name="acos(D)D"/>
+		<method name="addExact(II)I" since="24"/>
+		<method name="addExact(JJ)J" since="24"/>
+		<method name="asin(D)D"/>
+		<method name="atan(D)D"/>
+		<method name="atan2(DD)D"/>
+		<method name="cbrt(D)D"/>
+		<method name="ceil(D)D"/>
+		<method name="copySign(DD)D" since="9"/>
+		<method name="copySign(FF)F" since="9"/>
+		<method name="cos(D)D"/>
+		<method name="cosh(D)D"/>
+		<method name="exp(D)D"/>
+		<method name="expm1(D)D"/>
+		<method name="floor(D)D"/>
+		<method name="floorDiv(II)I" since="24"/>
+		<method name="floorDiv(JI)J" since="31"/>
+		<method name="floorDiv(JJ)J" since="24"/>
+		<method name="floorMod(II)I" since="24"/>
+		<method name="floorMod(JI)I" since="31"/>
+		<method name="floorMod(JJ)J" since="24"/>
+		<method name="getExponent(D)I" since="9"/>
+		<method name="getExponent(F)I" since="9"/>
+		<method name="hypot(DD)D"/>
+		<method name="log(D)D"/>
+		<method name="log10(D)D"/>
+		<method name="log1p(D)D"/>
+		<method name="max(DD)D"/>
+		<method name="max(FF)F"/>
+		<method name="max(II)I"/>
+		<method name="max(JJ)J"/>
+		<method name="min(DD)D"/>
+		<method name="min(FF)F"/>
+		<method name="min(II)I"/>
+		<method name="min(JJ)J"/>
+		<method name="multiplyExact(II)I" since="24"/>
+		<method name="multiplyExact(JI)J" since="31"/>
+		<method name="multiplyExact(JJ)J" since="24"/>
+		<method name="multiplyFull(II)J" since="31"/>
+		<method name="multiplyHigh(JJ)J" since="31"/>
+		<method name="nextAfter(DD)D" since="9"/>
+		<method name="nextAfter(FD)F" since="9"/>
+		<method name="nextDown(D)D" since="24"/>
+		<method name="nextDown(F)F" since="24"/>
+		<method name="nextUp(D)D" since="9"/>
+		<method name="nextUp(F)F" since="9"/>
+		<method name="pow(DD)D"/>
+		<method name="random()D"/>
+		<method name="rint(D)D"/>
+		<method name="round(D)J"/>
+		<method name="round(F)I"/>
+		<method name="scalb(DI)D" since="9"/>
+		<method name="scalb(FI)F" since="9"/>
+		<method name="signum(D)D"/>
+		<method name="signum(F)F"/>
+		<method name="sin(D)D"/>
+		<method name="sinh(D)D"/>
+		<method name="sqrt(D)D"/>
+		<method name="subtractExact(II)I" since="24"/>
+		<method name="subtractExact(JJ)J" since="24"/>
+		<method name="tan(D)D"/>
+		<method name="tanh(D)D"/>
+		<method name="toDegrees(D)D"/>
+		<method name="toIntExact(J)I" since="24"/>
+		<method name="toRadians(D)D"/>
+		<method name="ulp(D)D"/>
+		<method name="ulp(F)F"/>
+		<field name="E"/>
+		<field name="PI"/>
+	</class>
+	<class name="java/lang/String" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/CharSequence"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/StringBuffer;)V"/>
+		<method name="&lt;init>(Ljava/lang/StringBuilder;)V"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="&lt;init>([BI)V" deprecated="15"/>
+		<method name="&lt;init>([BII)V"/>
+		<method name="&lt;init>([BIII)V" deprecated="15"/>
+		<method name="&lt;init>([BIILjava/lang/String;)V"/>
+		<method name="&lt;init>([BIILjava/nio/charset/Charset;)V" since="9"/>
+		<method name="&lt;init>([BLjava/lang/String;)V"/>
+		<method name="&lt;init>([BLjava/nio/charset/Charset;)V" since="9"/>
+		<method name="&lt;init>([C)V"/>
+		<method name="&lt;init>([CII)V"/>
+		<method name="&lt;init>([III)V"/>
+		<method name="codePointAt(I)I"/>
+		<method name="codePointBefore(I)I"/>
+		<method name="codePointCount(II)I"/>
+		<method name="compareTo(Ljava/lang/String;)I"/>
+		<method name="compareToIgnoreCase(Ljava/lang/String;)I"/>
+		<method name="concat(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="contains(Ljava/lang/CharSequence;)Z"/>
+		<method name="contentEquals(Ljava/lang/CharSequence;)Z"/>
+		<method name="contentEquals(Ljava/lang/StringBuffer;)Z"/>
+		<method name="copyValueOf([C)Ljava/lang/String;"/>
+		<method name="copyValueOf([CII)Ljava/lang/String;"/>
+		<method name="endsWith(Ljava/lang/String;)Z"/>
+		<method name="equalsIgnoreCase(Ljava/lang/String;)Z"/>
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="getBytes()[B"/>
+		<method name="getBytes(II[BI)V" deprecated="15"/>
+		<method name="getBytes(Ljava/lang/String;)[B"/>
+		<method name="getBytes(Ljava/nio/charset/Charset;)[B" since="9"/>
+		<method name="getChars(II[CI)V"/>
+		<method name="indexOf(I)I"/>
+		<method name="indexOf(II)I"/>
+		<method name="indexOf(Ljava/lang/String;)I"/>
+		<method name="indexOf(Ljava/lang/String;I)I"/>
+		<method name="intern()Ljava/lang/String;"/>
+		<method name="isEmpty()Z" since="9"/>
+		<method name="join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;" since="26"/>
+		<method name="join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;" since="26"/>
+		<method name="lastIndexOf(I)I"/>
+		<method name="lastIndexOf(II)I"/>
+		<method name="lastIndexOf(Ljava/lang/String;)I"/>
+		<method name="lastIndexOf(Ljava/lang/String;I)I"/>
+		<method name="matches(Ljava/lang/String;)Z"/>
+		<method name="offsetByCodePoints(II)I"/>
+		<method name="regionMatches(ILjava/lang/String;II)Z"/>
+		<method name="regionMatches(ZILjava/lang/String;II)Z"/>
+		<method name="replace(CC)Ljava/lang/String;"/>
+		<method name="replace(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;"/>
+		<method name="replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="split(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="split(Ljava/lang/String;I)[Ljava/lang/String;"/>
+		<method name="startsWith(Ljava/lang/String;)Z"/>
+		<method name="startsWith(Ljava/lang/String;I)Z"/>
+		<method name="substring(I)Ljava/lang/String;"/>
+		<method name="substring(II)Ljava/lang/String;"/>
+		<method name="toCharArray()[C"/>
+		<method name="toLowerCase()Ljava/lang/String;"/>
+		<method name="toLowerCase(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="toUpperCase()Ljava/lang/String;"/>
+		<method name="toUpperCase(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="trim()Ljava/lang/String;"/>
+		<method name="valueOf(C)Ljava/lang/String;"/>
+		<method name="valueOf(D)Ljava/lang/String;"/>
+		<method name="valueOf(F)Ljava/lang/String;"/>
+		<method name="valueOf(I)Ljava/lang/String;"/>
+		<method name="valueOf(J)Ljava/lang/String;"/>
+		<method name="valueOf(Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="valueOf(Z)Ljava/lang/String;"/>
+		<method name="valueOf([C)Ljava/lang/String;"/>
+		<method name="valueOf([CII)Ljava/lang/String;"/>
+		<field name="CASE_INSENSITIVE_ORDER"/>
+	</class>
+	<class name="java/lang/StringBuffer" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Appendable"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="append(C)Ljava/lang/StringBuffer;"/>
+		<method name="append(D)Ljava/lang/StringBuffer;"/>
+		<method name="append(F)Ljava/lang/StringBuffer;"/>
+		<method name="append(I)Ljava/lang/StringBuffer;"/>
+		<method name="append(J)Ljava/lang/StringBuffer;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/StringBuffer;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuffer;"/>
+		<method name="append(Ljava/lang/Object;)Ljava/lang/StringBuffer;"/>
+		<method name="append(Ljava/lang/String;)Ljava/lang/StringBuffer;"/>
+		<method name="append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;"/>
+		<method name="append(Z)Ljava/lang/StringBuffer;"/>
+		<method name="append([C)Ljava/lang/StringBuffer;"/>
+		<method name="append([CII)Ljava/lang/StringBuffer;"/>
+		<method name="appendCodePoint(I)Ljava/lang/StringBuffer;"/>
+		<method name="delete(II)Ljava/lang/StringBuffer;"/>
+		<method name="deleteCharAt(I)Ljava/lang/StringBuffer;"/>
+		<method name="insert(IC)Ljava/lang/StringBuffer;"/>
+		<method name="insert(ID)Ljava/lang/StringBuffer;"/>
+		<method name="insert(IF)Ljava/lang/StringBuffer;"/>
+		<method name="insert(II)Ljava/lang/StringBuffer;"/>
+		<method name="insert(IJ)Ljava/lang/StringBuffer;"/>
+		<method name="insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuffer;"/>
+		<method name="insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuffer;"/>
+		<method name="insert(ILjava/lang/Object;)Ljava/lang/StringBuffer;"/>
+		<method name="insert(ILjava/lang/String;)Ljava/lang/StringBuffer;"/>
+		<method name="insert(IZ)Ljava/lang/StringBuffer;"/>
+		<method name="insert(I[C)Ljava/lang/StringBuffer;"/>
+		<method name="insert(I[CII)Ljava/lang/StringBuffer;"/>
+		<method name="replace(IILjava/lang/String;)Ljava/lang/StringBuffer;"/>
+		<method name="reverse()Ljava/lang/StringBuffer;"/>
+	</class>
+	<class name="java/lang/StringBuilder" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Appendable"/>
+		<implements name="java/lang/CharSequence"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="append(C)Ljava/lang/StringBuilder;"/>
+		<method name="append(D)Ljava/lang/StringBuilder;"/>
+		<method name="append(F)Ljava/lang/StringBuilder;"/>
+		<method name="append(I)Ljava/lang/StringBuilder;"/>
+		<method name="append(J)Ljava/lang/StringBuilder;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;"/>
+		<method name="append(Ljava/lang/Object;)Ljava/lang/StringBuilder;"/>
+		<method name="append(Ljava/lang/String;)Ljava/lang/StringBuilder;"/>
+		<method name="append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuilder;"/>
+		<method name="append(Z)Ljava/lang/StringBuilder;"/>
+		<method name="append([C)Ljava/lang/StringBuilder;"/>
+		<method name="append([CII)Ljava/lang/StringBuilder;"/>
+		<method name="appendCodePoint(I)Ljava/lang/StringBuilder;"/>
+		<method name="delete(II)Ljava/lang/StringBuilder;"/>
+		<method name="deleteCharAt(I)Ljava/lang/StringBuilder;"/>
+		<method name="insert(IC)Ljava/lang/StringBuilder;"/>
+		<method name="insert(ID)Ljava/lang/StringBuilder;"/>
+		<method name="insert(IF)Ljava/lang/StringBuilder;"/>
+		<method name="insert(II)Ljava/lang/StringBuilder;"/>
+		<method name="insert(IJ)Ljava/lang/StringBuilder;"/>
+		<method name="insert(ILjava/lang/CharSequence;)Ljava/lang/StringBuilder;"/>
+		<method name="insert(ILjava/lang/CharSequence;II)Ljava/lang/StringBuilder;"/>
+		<method name="insert(ILjava/lang/Object;)Ljava/lang/StringBuilder;"/>
+		<method name="insert(ILjava/lang/String;)Ljava/lang/StringBuilder;"/>
+		<method name="insert(IZ)Ljava/lang/StringBuilder;"/>
+		<method name="insert(I[C)Ljava/lang/StringBuilder;"/>
+		<method name="insert(I[CII)Ljava/lang/StringBuilder;"/>
+		<method name="replace(IILjava/lang/String;)Ljava/lang/StringBuilder;"/>
+		<method name="reverse()Ljava/lang/StringBuilder;"/>
+	</class>
+	<class name="java/lang/StringIndexOutOfBoundsException" since="1">
+		<extends name="java/lang/IndexOutOfBoundsException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/SuppressWarnings" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="value()[Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/System" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V"/>
+		<method name="clearProperty(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="console()Ljava/io/Console;" since="9"/>
+		<method name="currentTimeMillis()J"/>
+		<method name="exit(I)V"/>
+		<method name="gc()V"/>
+		<method name="getProperties()Ljava/util/Properties;"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getSecurityManager()Ljava/lang/SecurityManager;"/>
+		<method name="getenv()Ljava/util/Map;"/>
+		<method name="getenv(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="identityHashCode(Ljava/lang/Object;)I"/>
+		<method name="inheritedChannel()Ljava/nio/channels/Channel;"/>
+		<method name="lineSeparator()Ljava/lang/String;" since="19"/>
+		<method name="load(Ljava/lang/String;)V"/>
+		<method name="loadLibrary(Ljava/lang/String;)V"/>
+		<method name="mapLibraryName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="nanoTime()J"/>
+		<method name="runFinalization()V"/>
+		<method name="runFinalizersOnExit(Z)V" deprecated="15"/>
+		<method name="setErr(Ljava/io/PrintStream;)V"/>
+		<method name="setIn(Ljava/io/InputStream;)V"/>
+		<method name="setOut(Ljava/io/PrintStream;)V"/>
+		<method name="setProperties(Ljava/util/Properties;)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="setSecurityManager(Ljava/lang/SecurityManager;)V"/>
+		<field name="err"/>
+		<field name="in"/>
+		<field name="out"/>
+	</class>
+	<class name="java/lang/Thread" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Runnable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Runnable;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V"/>
+		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;Ljava/lang/String;J)V"/>
+		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"/>
+		<method name="activeCount()I"/>
+		<method name="checkAccess()V"/>
+		<method name="countStackFrames()I" deprecated="15"/>
+		<method name="currentThread()Ljava/lang/Thread;"/>
+		<method name="destroy()V" deprecated="15"/>
+		<method name="dumpStack()V"/>
+		<method name="enumerate([Ljava/lang/Thread;)I"/>
+		<method name="getAllStackTraces()Ljava/util/Map;"/>
+		<method name="getContextClassLoader()Ljava/lang/ClassLoader;"/>
+		<method name="getDefaultUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;"/>
+		<method name="getId()J"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPriority()I"/>
+		<method name="getStackTrace()[Ljava/lang/StackTraceElement;"/>
+		<method name="getState()Ljava/lang/Thread$State;"/>
+		<method name="getThreadGroup()Ljava/lang/ThreadGroup;"/>
+		<method name="getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;"/>
+		<method name="holdsLock(Ljava/lang/Object;)Z"/>
+		<method name="interrupt()V"/>
+		<method name="interrupted()Z"/>
+		<method name="isAlive()Z"/>
+		<method name="isDaemon()Z"/>
+		<method name="isInterrupted()Z"/>
+		<method name="join()V"/>
+		<method name="join(J)V"/>
+		<method name="join(JI)V"/>
+		<method name="resume()V" deprecated="15"/>
+		<method name="setContextClassLoader(Ljava/lang/ClassLoader;)V"/>
+		<method name="setDaemon(Z)V"/>
+		<method name="setDefaultUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V"/>
+		<method name="setName(Ljava/lang/String;)V"/>
+		<method name="setPriority(I)V"/>
+		<method name="setUncaughtExceptionHandler(Ljava/lang/Thread$UncaughtExceptionHandler;)V"/>
+		<method name="sleep(J)V"/>
+		<method name="sleep(JI)V"/>
+		<method name="start()V"/>
+		<method name="stop()V" deprecated="15"/>
+		<method name="stop(Ljava/lang/Throwable;)V" deprecated="15"/>
+		<method name="suspend()V" deprecated="15"/>
+		<method name="yield()V"/>
+		<field name="MAX_PRIORITY"/>
+		<field name="MIN_PRIORITY"/>
+		<field name="NORM_PRIORITY"/>
+	</class>
+	<class name="java/lang/Thread$State" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/Thread$State;"/>
+		<method name="values()[Ljava/lang/Thread$State;"/>
+		<field name="BLOCKED"/>
+		<field name="NEW"/>
+		<field name="RUNNABLE"/>
+		<field name="TERMINATED"/>
+		<field name="TIMED_WAITING"/>
+		<field name="WAITING"/>
+	</class>
+	<class name="java/lang/Thread$UncaughtExceptionHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="uncaughtException(Ljava/lang/Thread;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/ThreadDeath" since="1">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/lang/ThreadGroup" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Thread$UncaughtExceptionHandler"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"/>
+		<method name="activeCount()I"/>
+		<method name="activeGroupCount()I"/>
+		<method name="allowThreadSuspension(Z)Z" deprecated="15"/>
+		<method name="checkAccess()V"/>
+		<method name="destroy()V"/>
+		<method name="enumerate([Ljava/lang/Thread;)I"/>
+		<method name="enumerate([Ljava/lang/Thread;Z)I"/>
+		<method name="enumerate([Ljava/lang/ThreadGroup;)I"/>
+		<method name="enumerate([Ljava/lang/ThreadGroup;Z)I"/>
+		<method name="getMaxPriority()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getParent()Ljava/lang/ThreadGroup;"/>
+		<method name="interrupt()V"/>
+		<method name="isDaemon()Z"/>
+		<method name="isDestroyed()Z"/>
+		<method name="list()V"/>
+		<method name="parentOf(Ljava/lang/ThreadGroup;)Z"/>
+		<method name="resume()V" deprecated="15"/>
+		<method name="setDaemon(Z)V"/>
+		<method name="setMaxPriority(I)V"/>
+		<method name="stop()V" deprecated="15"/>
+		<method name="suspend()V" deprecated="15"/>
+	</class>
+	<class name="java/lang/ThreadLocal" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="get()Ljava/lang/Object;"/>
+		<method name="initialValue()Ljava/lang/Object;"/>
+		<method name="remove()V"/>
+		<method name="set(Ljava/lang/Object;)V"/>
+		<method name="withInitial(Ljava/util/function/Supplier;)Ljava/lang/ThreadLocal;" since="26"/>
+	</class>
+	<class name="java/lang/Throwable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" since="19"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="addSuppressed(Ljava/lang/Throwable;)V" since="19"/>
+		<method name="fillInStackTrace()Ljava/lang/Throwable;"/>
+		<method name="getCause()Ljava/lang/Throwable;"/>
+		<method name="getLocalizedMessage()Ljava/lang/String;"/>
+		<method name="getMessage()Ljava/lang/String;"/>
+		<method name="getStackTrace()[Ljava/lang/StackTraceElement;"/>
+		<method name="getSuppressed()[Ljava/lang/Throwable;" since="19"/>
+		<method name="initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;"/>
+		<method name="printStackTrace()V"/>
+		<method name="printStackTrace(Ljava/io/PrintStream;)V"/>
+		<method name="printStackTrace(Ljava/io/PrintWriter;)V"/>
+		<method name="setStackTrace([Ljava/lang/StackTraceElement;)V"/>
+	</class>
+	<class name="java/lang/TypeNotPresentException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="typeName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/UnknownError" since="1">
+		<extends name="java/lang/VirtualMachineError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/UnsatisfiedLinkError" since="1">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/UnsupportedClassVersionError" since="1">
+		<extends name="java/lang/ClassFormatError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/UnsupportedOperationException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/VerifyError" since="1">
+		<extends name="java/lang/LinkageError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/VirtualMachineError" since="1">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="24"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="24"/>
+	</class>
+	<class name="java/lang/Void" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="TYPE"/>
+	</class>
+	<class name="java/lang/annotation/Annotation" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="annotationType()Ljava/lang/Class;"/>
+	</class>
+	<class name="java/lang/annotation/AnnotationFormatError" since="1">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/annotation/AnnotationTypeMismatchException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/String;)V"/>
+		<method name="element()Ljava/lang/reflect/Method;"/>
+		<method name="foundType()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/annotation/Documented" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="java/lang/annotation/ElementType" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/annotation/ElementType;"/>
+		<method name="values()[Ljava/lang/annotation/ElementType;"/>
+		<field name="ANNOTATION_TYPE"/>
+		<field name="CONSTRUCTOR"/>
+		<field name="FIELD"/>
+		<field name="LOCAL_VARIABLE"/>
+		<field name="METHOD"/>
+		<field name="MODULE" since="31"/>
+		<field name="PACKAGE"/>
+		<field name="PARAMETER"/>
+		<field name="TYPE"/>
+		<field name="TYPE_PARAMETER" since="26"/>
+		<field name="TYPE_USE" since="26"/>
+	</class>
+	<class name="java/lang/annotation/IncompleteAnnotationException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
+		<method name="annotationType()Ljava/lang/Class;"/>
+		<method name="elementName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/annotation/Inherited" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="java/lang/annotation/Native" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+	</class>
+	<class name="java/lang/annotation/Repeatable" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="value()Ljava/lang/Class;"/>
+	</class>
+	<class name="java/lang/annotation/Retention" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="value()Ljava/lang/annotation/RetentionPolicy;"/>
+	</class>
+	<class name="java/lang/annotation/RetentionPolicy" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/lang/annotation/RetentionPolicy;"/>
+		<method name="values()[Ljava/lang/annotation/RetentionPolicy;"/>
+		<field name="CLASS"/>
+		<field name="RUNTIME"/>
+		<field name="SOURCE"/>
+	</class>
+	<class name="java/lang/annotation/Target" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/annotation/Annotation"/>
+		<method name="value()[Ljava/lang/annotation/ElementType;"/>
+	</class>
+	<class name="java/lang/invoke/CallSite" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="dynamicInvoker()Ljava/lang/invoke/MethodHandle;"/>
+		<method name="getTarget()Ljava/lang/invoke/MethodHandle;"/>
+		<method name="setTarget(Ljava/lang/invoke/MethodHandle;)V"/>
+		<method name="type()Ljava/lang/invoke/MethodType;"/>
+	</class>
+	<class name="java/lang/invoke/ConstantCallSite" since="26">
+		<extends name="java/lang/invoke/CallSite"/>
+		<method name="&lt;init>(Ljava/lang/invoke/MethodHandle;)V"/>
+		<method name="&lt;init>(Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)V"/>
+	</class>
+	<class name="java/lang/invoke/LambdaConversionException" since="26">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/lang/invoke/MethodHandle" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="asCollector(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="asFixedArity()Ljava/lang/invoke/MethodHandle;"/>
+		<method name="asSpreader(Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="asType(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="asVarargsCollector(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="bindTo(Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="invoke([Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="invokeExact([Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="invokeWithArguments(Ljava/util/List;)Ljava/lang/Object;"/>
+		<method name="invokeWithArguments([Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="isVarargsCollector()Z"/>
+		<method name="type()Ljava/lang/invoke/MethodType;"/>
+	</class>
+	<class name="java/lang/invoke/MethodHandleInfo" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getDeclaringClass()Ljava/lang/Class;"/>
+		<method name="getMethodType()Ljava/lang/invoke/MethodType;"/>
+		<method name="getModifiers()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getReferenceKind()I"/>
+		<method name="isVarArgs()Z"/>
+		<method name="refKindIsField(I)Z" deprecated="29"/>
+		<method name="refKindIsValid(I)Z" deprecated="29"/>
+		<method name="refKindName(I)Ljava/lang/String;" deprecated="29"/>
+		<method name="referenceKindToString(I)Ljava/lang/String;"/>
+		<method name="reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/reflect/Member;"/>
+		<method name="toString(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/String;"/>
+		<field name="REF_getField"/>
+		<field name="REF_getStatic"/>
+		<field name="REF_invokeInterface"/>
+		<field name="REF_invokeSpecial"/>
+		<field name="REF_invokeStatic"/>
+		<field name="REF_invokeVirtual"/>
+		<field name="REF_newInvokeSpecial"/>
+		<field name="REF_putField"/>
+		<field name="REF_putStatic"/>
+	</class>
+	<class name="java/lang/invoke/MethodHandles" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="arrayElementGetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="arrayElementSetter(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="catchException(Ljava/lang/invoke/MethodHandle;Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="collectArguments(Ljava/lang/invoke/MethodHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="constant(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="dropArguments(Ljava/lang/invoke/MethodHandle;ILjava/util/List;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="dropArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="exactInvoker(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="explicitCastArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="filterArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="filterReturnValue(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="foldArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="guardWithTest(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="identity(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="insertArguments(Ljava/lang/invoke/MethodHandle;I[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="invoker(Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="lookup()Ljava/lang/invoke/MethodHandles$Lookup;"/>
+		<method name="permuteArguments(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;[I)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="publicLookup()Ljava/lang/invoke/MethodHandles$Lookup;"/>
+		<method name="reflectAs(Ljava/lang/Class;Ljava/lang/invoke/MethodHandle;)Ljava/lang/reflect/Member;"/>
+		<method name="spreadInvoker(Ljava/lang/invoke/MethodType;I)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="throwException(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+	</class>
+	<class name="java/lang/invoke/MethodHandles$Lookup" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="bind(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findConstructor(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findGetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findSetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findSpecial(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findStatic(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findStaticGetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findStaticSetter(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="findVirtual(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="in(Ljava/lang/Class;)Ljava/lang/invoke/MethodHandles$Lookup;"/>
+		<method name="lookupClass()Ljava/lang/Class;"/>
+		<method name="lookupModes()I"/>
+		<method name="revealDirect(Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandleInfo;"/>
+		<method name="unreflect(Ljava/lang/reflect/Method;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="unreflectConstructor(Ljava/lang/reflect/Constructor;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="unreflectGetter(Ljava/lang/reflect/Field;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="unreflectSetter(Ljava/lang/reflect/Field;)Ljava/lang/invoke/MethodHandle;"/>
+		<method name="unreflectSpecial(Ljava/lang/reflect/Method;Ljava/lang/Class;)Ljava/lang/invoke/MethodHandle;"/>
+		<field name="PACKAGE"/>
+		<field name="PRIVATE"/>
+		<field name="PROTECTED"/>
+		<field name="PUBLIC"/>
+	</class>
+	<class name="java/lang/invoke/MethodType" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="appendParameterTypes(Ljava/util/List;)Ljava/lang/invoke/MethodType;"/>
+		<method name="appendParameterTypes([Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="changeParameterType(ILjava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="changeReturnType(Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="dropParameterTypes(II)Ljava/lang/invoke/MethodType;"/>
+		<method name="erase()Ljava/lang/invoke/MethodType;"/>
+		<method name="fromMethodDescriptorString(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/invoke/MethodType;"/>
+		<method name="generic()Ljava/lang/invoke/MethodType;"/>
+		<method name="genericMethodType(I)Ljava/lang/invoke/MethodType;"/>
+		<method name="genericMethodType(IZ)Ljava/lang/invoke/MethodType;"/>
+		<method name="hasPrimitives()Z"/>
+		<method name="hasWrappers()Z"/>
+		<method name="insertParameterTypes(ILjava/util/List;)Ljava/lang/invoke/MethodType;"/>
+		<method name="insertParameterTypes(I[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="methodType(Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="methodType(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="methodType(Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="methodType(Ljava/lang/Class;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodType;"/>
+		<method name="methodType(Ljava/lang/Class;Ljava/util/List;)Ljava/lang/invoke/MethodType;"/>
+		<method name="methodType(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/invoke/MethodType;"/>
+		<method name="parameterArray()[Ljava/lang/Class;"/>
+		<method name="parameterCount()I"/>
+		<method name="parameterList()Ljava/util/List;"/>
+		<method name="parameterType(I)Ljava/lang/Class;"/>
+		<method name="returnType()Ljava/lang/Class;"/>
+		<method name="toMethodDescriptorString()Ljava/lang/String;"/>
+		<method name="unwrap()Ljava/lang/invoke/MethodType;"/>
+		<method name="wrap()Ljava/lang/invoke/MethodType;"/>
+	</class>
+	<class name="java/lang/invoke/MutableCallSite" since="26">
+		<extends name="java/lang/invoke/CallSite"/>
+		<method name="&lt;init>(Ljava/lang/invoke/MethodHandle;)V"/>
+		<method name="&lt;init>(Ljava/lang/invoke/MethodType;)V"/>
+	</class>
+	<class name="java/lang/invoke/VolatileCallSite" since="26">
+		<extends name="java/lang/invoke/CallSite"/>
+		<method name="&lt;init>(Ljava/lang/invoke/MethodHandle;)V"/>
+		<method name="&lt;init>(Ljava/lang/invoke/MethodType;)V"/>
+	</class>
+	<class name="java/lang/invoke/WrongMethodTypeException" since="26">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/ref/PhantomReference" since="1">
+		<extends name="java/lang/ref/Reference"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V"/>
+	</class>
+	<class name="java/lang/ref/Reference" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="clear()V"/>
+		<method name="enqueue()Z"/>
+		<method name="get()Ljava/lang/Object;"/>
+		<method name="isEnqueued()Z" deprecated="31"/>
+		<method name="reachabilityFence(Ljava/lang/Object;)V" since="28"/>
+	</class>
+	<class name="java/lang/ref/ReferenceQueue" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="poll()Ljava/lang/ref/Reference;"/>
+		<method name="remove()Ljava/lang/ref/Reference;"/>
+		<method name="remove(J)Ljava/lang/ref/Reference;"/>
+	</class>
+	<class name="java/lang/ref/SoftReference" since="1">
+		<extends name="java/lang/ref/Reference"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V"/>
+	</class>
+	<class name="java/lang/ref/WeakReference" since="1">
+		<extends name="java/lang/ref/Reference"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V"/>
+	</class>
+	<class name="java/lang/reflect/AccessibleObject" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/AnnotatedElement"/>
+		<method name="&lt;init>()V"/>
+		<method name="isAccessible()Z"/>
+		<method name="setAccessible(Z)V"/>
+		<method name="setAccessible([Ljava/lang/reflect/AccessibleObject;Z)V"/>
+	</class>
+	<class name="java/lang/reflect/AnnotatedElement" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"/>
+		<method name="getAnnotations()[Ljava/lang/annotation/Annotation;"/>
+		<method name="getAnnotationsByType(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;" since="24"/>
+		<method name="getDeclaredAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" since="24"/>
+		<method name="getDeclaredAnnotations()[Ljava/lang/annotation/Annotation;"/>
+		<method name="getDeclaredAnnotationsByType(Ljava/lang/Class;)[Ljava/lang/annotation/Annotation;" since="24"/>
+		<method name="isAnnotationPresent(Ljava/lang/Class;)Z"/>
+	</class>
+	<class name="java/lang/reflect/Array" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="get(Ljava/lang/Object;I)Ljava/lang/Object;"/>
+		<method name="getBoolean(Ljava/lang/Object;I)Z"/>
+		<method name="getByte(Ljava/lang/Object;I)B"/>
+		<method name="getChar(Ljava/lang/Object;I)C"/>
+		<method name="getDouble(Ljava/lang/Object;I)D"/>
+		<method name="getFloat(Ljava/lang/Object;I)F"/>
+		<method name="getInt(Ljava/lang/Object;I)I"/>
+		<method name="getLength(Ljava/lang/Object;)I"/>
+		<method name="getLong(Ljava/lang/Object;I)J"/>
+		<method name="getShort(Ljava/lang/Object;I)S"/>
+		<method name="newInstance(Ljava/lang/Class;I)Ljava/lang/Object;"/>
+		<method name="newInstance(Ljava/lang/Class;[I)Ljava/lang/Object;"/>
+		<method name="set(Ljava/lang/Object;ILjava/lang/Object;)V"/>
+		<method name="setBoolean(Ljava/lang/Object;IZ)V"/>
+		<method name="setByte(Ljava/lang/Object;IB)V"/>
+		<method name="setChar(Ljava/lang/Object;IC)V"/>
+		<method name="setDouble(Ljava/lang/Object;ID)V"/>
+		<method name="setFloat(Ljava/lang/Object;IF)V"/>
+		<method name="setInt(Ljava/lang/Object;II)V"/>
+		<method name="setLong(Ljava/lang/Object;IJ)V"/>
+		<method name="setShort(Ljava/lang/Object;IS)V"/>
+	</class>
+	<class name="java/lang/reflect/Constructor" since="1">
+		<extends name="java/lang/reflect/AccessibleObject" removed="26"/>
+		<extends name="java/lang/reflect/Executable" since="26"/>
+		<implements name="java/lang/reflect/GenericDeclaration" removed="26"/>
+		<implements name="java/lang/reflect/Member" removed="26"/>
+		<method name="getExceptionTypes()[Ljava/lang/Class;"/>
+		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
+		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
+		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;"/>
+		<method name="getParameterTypes()[Ljava/lang/Class;"/>
+		<method name="isVarArgs()Z"/>
+		<method name="newInstance([Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="toGenericString()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/reflect/Executable" since="26">
+		<extends name="java/lang/reflect/AccessibleObject"/>
+		<implements name="java/lang/reflect/GenericDeclaration"/>
+		<implements name="java/lang/reflect/Member"/>
+		<method name="getExceptionTypes()[Ljava/lang/Class;"/>
+		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
+		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
+		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;"/>
+		<method name="getParameterCount()I"/>
+		<method name="getParameterTypes()[Ljava/lang/Class;"/>
+		<method name="getParameters()[Ljava/lang/reflect/Parameter;"/>
+		<method name="isVarArgs()Z"/>
+		<method name="toGenericString()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/reflect/Field" since="1">
+		<extends name="java/lang/reflect/AccessibleObject"/>
+		<implements name="java/lang/reflect/Member"/>
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getBoolean(Ljava/lang/Object;)Z"/>
+		<method name="getByte(Ljava/lang/Object;)B"/>
+		<method name="getChar(Ljava/lang/Object;)C"/>
+		<method name="getDouble(Ljava/lang/Object;)D"/>
+		<method name="getFloat(Ljava/lang/Object;)F"/>
+		<method name="getGenericType()Ljava/lang/reflect/Type;"/>
+		<method name="getInt(Ljava/lang/Object;)I"/>
+		<method name="getLong(Ljava/lang/Object;)J"/>
+		<method name="getShort(Ljava/lang/Object;)S"/>
+		<method name="getType()Ljava/lang/Class;"/>
+		<method name="isEnumConstant()Z"/>
+		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="setBoolean(Ljava/lang/Object;Z)V"/>
+		<method name="setByte(Ljava/lang/Object;B)V"/>
+		<method name="setChar(Ljava/lang/Object;C)V"/>
+		<method name="setDouble(Ljava/lang/Object;D)V"/>
+		<method name="setFloat(Ljava/lang/Object;F)V"/>
+		<method name="setInt(Ljava/lang/Object;I)V"/>
+		<method name="setLong(Ljava/lang/Object;J)V"/>
+		<method name="setShort(Ljava/lang/Object;S)V"/>
+		<method name="toGenericString()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/reflect/GenericArrayType" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/Type"/>
+		<method name="getGenericComponentType()Ljava/lang/reflect/Type;"/>
+	</class>
+	<class name="java/lang/reflect/GenericDeclaration" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/AnnotatedElement" since="26"/>
+		<method name="getTypeParameters()[Ljava/lang/reflect/TypeVariable;"/>
+	</class>
+	<class name="java/lang/reflect/GenericSignatureFormatError" since="1">
+		<extends name="java/lang/ClassFormatError"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="26"/>
+	</class>
+	<class name="java/lang/reflect/InvocationHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/lang/reflect/InvocationTargetException" since="1">
+		<extends name="java/lang/Exception" removed="19"/>
+		<extends name="java/lang/ReflectiveOperationException" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;Ljava/lang/String;)V"/>
+		<method name="getTargetException()Ljava/lang/Throwable;"/>
+	</class>
+	<class name="java/lang/reflect/MalformedParameterizedTypeException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/lang/reflect/MalformedParametersException" since="28">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/reflect/Member" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getDeclaringClass()Ljava/lang/Class;"/>
+		<method name="getModifiers()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="isSynthetic()Z"/>
+		<field name="DECLARED"/>
+		<field name="PUBLIC"/>
+	</class>
+	<class name="java/lang/reflect/Method" since="1">
+		<extends name="java/lang/reflect/AccessibleObject" removed="26"/>
+		<extends name="java/lang/reflect/Executable" since="26"/>
+		<implements name="java/lang/reflect/GenericDeclaration" removed="26"/>
+		<implements name="java/lang/reflect/Member" removed="26"/>
+		<method name="getDefaultValue()Ljava/lang/Object;"/>
+		<method name="getExceptionTypes()[Ljava/lang/Class;"/>
+		<method name="getGenericExceptionTypes()[Ljava/lang/reflect/Type;"/>
+		<method name="getGenericParameterTypes()[Ljava/lang/reflect/Type;"/>
+		<method name="getGenericReturnType()Ljava/lang/reflect/Type;"/>
+		<method name="getParameterAnnotations()[[Ljava/lang/annotation/Annotation;"/>
+		<method name="getParameterTypes()[Ljava/lang/Class;"/>
+		<method name="getReturnType()Ljava/lang/Class;"/>
+		<method name="invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="isBridge()Z"/>
+		<method name="isDefault()Z" since="24"/>
+		<method name="isVarArgs()Z"/>
+		<method name="toGenericString()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/reflect/Modifier" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="classModifiers()I" since="19"/>
+		<method name="constructorModifiers()I" since="19"/>
+		<method name="fieldModifiers()I" since="19"/>
+		<method name="interfaceModifiers()I" since="19"/>
+		<method name="isAbstract(I)Z"/>
+		<method name="isFinal(I)Z"/>
+		<method name="isInterface(I)Z"/>
+		<method name="isNative(I)Z"/>
+		<method name="isPrivate(I)Z"/>
+		<method name="isProtected(I)Z"/>
+		<method name="isPublic(I)Z"/>
+		<method name="isStatic(I)Z"/>
+		<method name="isStrict(I)Z"/>
+		<method name="isSynchronized(I)Z"/>
+		<method name="isTransient(I)Z"/>
+		<method name="isVolatile(I)Z"/>
+		<method name="methodModifiers()I" since="19"/>
+		<method name="parameterModifiers()I" since="26"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+		<field name="ABSTRACT"/>
+		<field name="FINAL"/>
+		<field name="INTERFACE"/>
+		<field name="NATIVE"/>
+		<field name="PRIVATE"/>
+		<field name="PROTECTED"/>
+		<field name="PUBLIC"/>
+		<field name="STATIC"/>
+		<field name="STRICT"/>
+		<field name="SYNCHRONIZED"/>
+		<field name="TRANSIENT"/>
+		<field name="VOLATILE"/>
+	</class>
+	<class name="java/lang/reflect/Parameter" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/AnnotatedElement"/>
+		<method name="getDeclaringExecutable()Ljava/lang/reflect/Executable;"/>
+		<method name="getModifiers()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getParameterizedType()Ljava/lang/reflect/Type;"/>
+		<method name="getType()Ljava/lang/Class;"/>
+		<method name="isImplicit()Z"/>
+		<method name="isNamePresent()Z"/>
+		<method name="isSynthetic()Z"/>
+		<method name="isVarArgs()Z"/>
+	</class>
+	<class name="java/lang/reflect/ParameterizedType" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/Type"/>
+		<method name="getActualTypeArguments()[Ljava/lang/reflect/Type;"/>
+		<method name="getOwnerType()Ljava/lang/reflect/Type;"/>
+		<method name="getRawType()Ljava/lang/reflect/Type;"/>
+	</class>
+	<class name="java/lang/reflect/Proxy" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/reflect/InvocationHandler;)V"/>
+		<method name="getInvocationHandler(Ljava/lang/Object;)Ljava/lang/reflect/InvocationHandler;"/>
+		<method name="getProxyClass(Ljava/lang/ClassLoader;[Ljava/lang/Class;)Ljava/lang/Class;"/>
+		<method name="isProxyClass(Ljava/lang/Class;)Z"/>
+		<method name="newProxyInstance(Ljava/lang/ClassLoader;[Ljava/lang/Class;Ljava/lang/reflect/InvocationHandler;)Ljava/lang/Object;"/>
+		<field name="h"/>
+	</class>
+	<class name="java/lang/reflect/ReflectPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/lang/reflect/Type" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getTypeName()Ljava/lang/String;" since="28"/>
+	</class>
+	<class name="java/lang/reflect/TypeVariable" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/Type"/>
+		<method name="getBounds()[Ljava/lang/reflect/Type;"/>
+		<method name="getGenericDeclaration()Ljava/lang/reflect/GenericDeclaration;"/>
+		<method name="getName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/lang/reflect/UndeclaredThrowableException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;Ljava/lang/String;)V"/>
+		<method name="getUndeclaredThrowable()Ljava/lang/Throwable;"/>
+	</class>
+	<class name="java/lang/reflect/WildcardType" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/reflect/Type"/>
+		<method name="getLowerBounds()[Ljava/lang/reflect/Type;"/>
+		<method name="getUpperBounds()[Ljava/lang/reflect/Type;"/>
+	</class>
+	<class name="java/math/BigDecimal" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(D)V"/>
+		<method name="&lt;init>(DLjava/math/MathContext;)V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/math/MathContext;)V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(JLjava/math/MathContext;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/math/MathContext;)V"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;)V"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;I)V"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;ILjava/math/MathContext;)V"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/MathContext;)V"/>
+		<method name="&lt;init>([C)V"/>
+		<method name="&lt;init>([CII)V"/>
+		<method name="&lt;init>([CIILjava/math/MathContext;)V"/>
+		<method name="&lt;init>([CLjava/math/MathContext;)V"/>
+		<method name="abs()Ljava/math/BigDecimal;"/>
+		<method name="abs(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="add(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="add(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="byteValueExact()B"/>
+		<method name="compareTo(Ljava/math/BigDecimal;)I"/>
+		<method name="divide(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="divide(Ljava/math/BigDecimal;I)Ljava/math/BigDecimal;"/>
+		<method name="divide(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;"/>
+		<method name="divide(Ljava/math/BigDecimal;ILjava/math/RoundingMode;)Ljava/math/BigDecimal;"/>
+		<method name="divide(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="divide(Ljava/math/BigDecimal;Ljava/math/RoundingMode;)Ljava/math/BigDecimal;"/>
+		<method name="divideAndRemainder(Ljava/math/BigDecimal;)[Ljava/math/BigDecimal;"/>
+		<method name="divideAndRemainder(Ljava/math/BigDecimal;Ljava/math/MathContext;)[Ljava/math/BigDecimal;"/>
+		<method name="divideToIntegralValue(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="divideToIntegralValue(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="intValueExact()I"/>
+		<method name="longValueExact()J"/>
+		<method name="max(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="min(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="movePointLeft(I)Ljava/math/BigDecimal;"/>
+		<method name="movePointRight(I)Ljava/math/BigDecimal;"/>
+		<method name="multiply(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="multiply(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="negate()Ljava/math/BigDecimal;"/>
+		<method name="negate(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="plus()Ljava/math/BigDecimal;"/>
+		<method name="plus(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="pow(I)Ljava/math/BigDecimal;"/>
+		<method name="pow(ILjava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="precision()I"/>
+		<method name="remainder(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="remainder(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="round(Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="scale()I"/>
+		<method name="scaleByPowerOfTen(I)Ljava/math/BigDecimal;"/>
+		<method name="setScale(I)Ljava/math/BigDecimal;"/>
+		<method name="setScale(II)Ljava/math/BigDecimal;"/>
+		<method name="setScale(ILjava/math/RoundingMode;)Ljava/math/BigDecimal;"/>
+		<method name="shortValueExact()S"/>
+		<method name="signum()I"/>
+		<method name="stripTrailingZeros()Ljava/math/BigDecimal;"/>
+		<method name="subtract(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;"/>
+		<method name="subtract(Ljava/math/BigDecimal;Ljava/math/MathContext;)Ljava/math/BigDecimal;"/>
+		<method name="toBigInteger()Ljava/math/BigInteger;"/>
+		<method name="toBigIntegerExact()Ljava/math/BigInteger;"/>
+		<method name="toEngineeringString()Ljava/lang/String;"/>
+		<method name="toPlainString()Ljava/lang/String;"/>
+		<method name="ulp()Ljava/math/BigDecimal;"/>
+		<method name="unscaledValue()Ljava/math/BigInteger;"/>
+		<method name="valueOf(D)Ljava/math/BigDecimal;"/>
+		<method name="valueOf(J)Ljava/math/BigDecimal;"/>
+		<method name="valueOf(JI)Ljava/math/BigDecimal;"/>
+		<field name="ONE"/>
+		<field name="ROUND_CEILING"/>
+		<field name="ROUND_DOWN"/>
+		<field name="ROUND_FLOOR"/>
+		<field name="ROUND_HALF_DOWN"/>
+		<field name="ROUND_HALF_EVEN"/>
+		<field name="ROUND_HALF_UP"/>
+		<field name="ROUND_UNNECESSARY"/>
+		<field name="ROUND_UP"/>
+		<field name="TEN"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="java/math/BigInteger" since="1">
+		<extends name="java/lang/Number"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(IILjava/util/Random;)V"/>
+		<method name="&lt;init>(ILjava/util/Random;)V"/>
+		<method name="&lt;init>(I[B)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="abs()Ljava/math/BigInteger;"/>
+		<method name="add(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="and(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="andNot(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="bitCount()I"/>
+		<method name="bitLength()I"/>
+		<method name="byteValueExact()B" since="31"/>
+		<method name="clearBit(I)Ljava/math/BigInteger;"/>
+		<method name="compareTo(Ljava/math/BigInteger;)I"/>
+		<method name="divide(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="divideAndRemainder(Ljava/math/BigInteger;)[Ljava/math/BigInteger;"/>
+		<method name="flipBit(I)Ljava/math/BigInteger;"/>
+		<method name="gcd(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="getLowestSetBit()I"/>
+		<method name="intValueExact()I" since="31"/>
+		<method name="isProbablePrime(I)Z"/>
+		<method name="longValueExact()J" since="31"/>
+		<method name="max(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="min(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="mod(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="modInverse(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="modPow(Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="multiply(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="negate()Ljava/math/BigInteger;"/>
+		<method name="nextProbablePrime()Ljava/math/BigInteger;"/>
+		<method name="not()Ljava/math/BigInteger;"/>
+		<method name="or(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="pow(I)Ljava/math/BigInteger;"/>
+		<method name="probablePrime(ILjava/util/Random;)Ljava/math/BigInteger;"/>
+		<method name="remainder(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="setBit(I)Ljava/math/BigInteger;"/>
+		<method name="shiftLeft(I)Ljava/math/BigInteger;"/>
+		<method name="shiftRight(I)Ljava/math/BigInteger;"/>
+		<method name="shortValueExact()S" since="31"/>
+		<method name="signum()I"/>
+		<method name="subtract(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<method name="testBit(I)Z"/>
+		<method name="toByteArray()[B"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+		<method name="valueOf(J)Ljava/math/BigInteger;"/>
+		<method name="xor(Ljava/math/BigInteger;)Ljava/math/BigInteger;"/>
+		<field name="ONE"/>
+		<field name="TEN"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="java/math/MathContext" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/math/RoundingMode;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getPrecision()I"/>
+		<method name="getRoundingMode()Ljava/math/RoundingMode;"/>
+		<field name="DECIMAL128"/>
+		<field name="DECIMAL32"/>
+		<field name="DECIMAL64"/>
+		<field name="UNLIMITED"/>
+	</class>
+	<class name="java/math/RoundingMode" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(I)Ljava/math/RoundingMode;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/math/RoundingMode;"/>
+		<method name="values()[Ljava/math/RoundingMode;"/>
+		<field name="CEILING"/>
+		<field name="DOWN"/>
+		<field name="FLOOR"/>
+		<field name="HALF_DOWN"/>
+		<field name="HALF_EVEN"/>
+		<field name="HALF_UP"/>
+		<field name="UNNECESSARY"/>
+		<field name="UP"/>
+	</class>
+	<class name="java/net/Authenticator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getPasswordAuthentication()Ljava/net/PasswordAuthentication;"/>
+		<method name="getRequestingHost()Ljava/lang/String;"/>
+		<method name="getRequestingPort()I"/>
+		<method name="getRequestingPrompt()Ljava/lang/String;"/>
+		<method name="getRequestingProtocol()Ljava/lang/String;"/>
+		<method name="getRequestingScheme()Ljava/lang/String;"/>
+		<method name="getRequestingSite()Ljava/net/InetAddress;"/>
+		<method name="getRequestingURL()Ljava/net/URL;"/>
+		<method name="getRequestorType()Ljava/net/Authenticator$RequestorType;"/>
+		<method name="requestPasswordAuthentication(Ljava/lang/String;Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/PasswordAuthentication;"/>
+		<method name="requestPasswordAuthentication(Ljava/lang/String;Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;Ljava/net/Authenticator$RequestorType;)Ljava/net/PasswordAuthentication;"/>
+		<method name="requestPasswordAuthentication(Ljava/net/InetAddress;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/PasswordAuthentication;"/>
+		<method name="setDefault(Ljava/net/Authenticator;)V"/>
+	</class>
+	<class name="java/net/Authenticator$RequestorType" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/net/Authenticator$RequestorType;"/>
+		<method name="values()[Ljava/net/Authenticator$RequestorType;"/>
+		<field name="PROXY"/>
+		<field name="SERVER"/>
+	</class>
+	<class name="java/net/BindException" since="1">
+		<extends name="java/net/SocketException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/CacheRequest" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="abort()V"/>
+		<method name="getBody()Ljava/io/OutputStream;"/>
+	</class>
+	<class name="java/net/CacheResponse" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getBody()Ljava/io/InputStream;"/>
+		<method name="getHeaders()Ljava/util/Map;"/>
+	</class>
+	<class name="java/net/ConnectException" since="1">
+		<extends name="java/net/SocketException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/ContentHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContent(Ljava/net/URLConnection;)Ljava/lang/Object;"/>
+		<method name="getContent(Ljava/net/URLConnection;[Ljava/lang/Class;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/net/ContentHandlerFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createContentHandler(Ljava/lang/String;)Ljava/net/ContentHandler;"/>
+	</class>
+	<class name="java/net/CookieHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="get(Ljava/net/URI;Ljava/util/Map;)Ljava/util/Map;"/>
+		<method name="getDefault()Ljava/net/CookieHandler;"/>
+		<method name="put(Ljava/net/URI;Ljava/util/Map;)V"/>
+		<method name="setDefault(Ljava/net/CookieHandler;)V"/>
+	</class>
+	<class name="java/net/CookieManager" since="9">
+		<extends name="java/net/CookieHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/net/CookieStore;Ljava/net/CookiePolicy;)V"/>
+		<method name="getCookieStore()Ljava/net/CookieStore;"/>
+		<method name="setCookiePolicy(Ljava/net/CookiePolicy;)V"/>
+	</class>
+	<class name="java/net/CookiePolicy" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="shouldAccept(Ljava/net/URI;Ljava/net/HttpCookie;)Z"/>
+		<field name="ACCEPT_ALL"/>
+		<field name="ACCEPT_NONE"/>
+		<field name="ACCEPT_ORIGINAL_SERVER"/>
+	</class>
+	<class name="java/net/CookieStore" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="add(Ljava/net/URI;Ljava/net/HttpCookie;)V"/>
+		<method name="get(Ljava/net/URI;)Ljava/util/List;"/>
+		<method name="getCookies()Ljava/util/List;"/>
+		<method name="getURIs()Ljava/util/List;"/>
+		<method name="remove(Ljava/net/URI;Ljava/net/HttpCookie;)Z"/>
+		<method name="removeAll()Z"/>
+	</class>
+	<class name="java/net/DatagramPacket" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>([BI)V"/>
+		<method name="&lt;init>([BII)V"/>
+		<method name="&lt;init>([BIILjava/net/InetAddress;I)V"/>
+		<method name="&lt;init>([BIILjava/net/SocketAddress;)V"/>
+		<method name="&lt;init>([BILjava/net/InetAddress;I)V"/>
+		<method name="&lt;init>([BILjava/net/SocketAddress;)V"/>
+		<method name="getAddress()Ljava/net/InetAddress;"/>
+		<method name="getData()[B"/>
+		<method name="getLength()I"/>
+		<method name="getOffset()I"/>
+		<method name="getPort()I"/>
+		<method name="getSocketAddress()Ljava/net/SocketAddress;"/>
+		<method name="setAddress(Ljava/net/InetAddress;)V"/>
+		<method name="setData([B)V"/>
+		<method name="setData([BII)V"/>
+		<method name="setLength(I)V"/>
+		<method name="setPort(I)V"/>
+		<method name="setSocketAddress(Ljava/net/SocketAddress;)V"/>
+	</class>
+	<class name="java/net/DatagramSocket" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/net/InetAddress;)V"/>
+		<method name="&lt;init>(Ljava/net/DatagramSocketImpl;)V"/>
+		<method name="&lt;init>(Ljava/net/SocketAddress;)V"/>
+		<method name="bind(Ljava/net/SocketAddress;)V"/>
+		<method name="close()V"/>
+		<method name="connect(Ljava/net/InetAddress;I)V"/>
+		<method name="connect(Ljava/net/SocketAddress;)V"/>
+		<method name="disconnect()V"/>
+		<method name="getBroadcast()Z"/>
+		<method name="getChannel()Ljava/nio/channels/DatagramChannel;"/>
+		<method name="getInetAddress()Ljava/net/InetAddress;"/>
+		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
+		<method name="getLocalPort()I"/>
+		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;"/>
+		<method name="getPort()I"/>
+		<method name="getReceiveBufferSize()I"/>
+		<method name="getRemoteSocketAddress()Ljava/net/SocketAddress;"/>
+		<method name="getReuseAddress()Z"/>
+		<method name="getSendBufferSize()I"/>
+		<method name="getSoTimeout()I"/>
+		<method name="getTrafficClass()I"/>
+		<method name="isBound()Z"/>
+		<method name="isClosed()Z"/>
+		<method name="isConnected()Z"/>
+		<method name="receive(Ljava/net/DatagramPacket;)V"/>
+		<method name="send(Ljava/net/DatagramPacket;)V"/>
+		<method name="setBroadcast(Z)V"/>
+		<method name="setDatagramSocketImplFactory(Ljava/net/DatagramSocketImplFactory;)V"/>
+		<method name="setReceiveBufferSize(I)V"/>
+		<method name="setReuseAddress(Z)V"/>
+		<method name="setSendBufferSize(I)V"/>
+		<method name="setSoTimeout(I)V"/>
+		<method name="setTrafficClass(I)V"/>
+	</class>
+	<class name="java/net/DatagramSocketImpl" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/net/SocketOptions"/>
+		<method name="&lt;init>()V"/>
+		<method name="bind(ILjava/net/InetAddress;)V"/>
+		<method name="close()V"/>
+		<method name="connect(Ljava/net/InetAddress;I)V"/>
+		<method name="create()V"/>
+		<method name="disconnect()V"/>
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
+		<method name="getLocalPort()I"/>
+		<method name="getTTL()B" deprecated="15"/>
+		<method name="getTimeToLive()I"/>
+		<method name="join(Ljava/net/InetAddress;)V"/>
+		<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
+		<method name="leave(Ljava/net/InetAddress;)V"/>
+		<method name="leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
+		<method name="peek(Ljava/net/InetAddress;)I"/>
+		<method name="peekData(Ljava/net/DatagramPacket;)I"/>
+		<method name="receive(Ljava/net/DatagramPacket;)V"/>
+		<method name="send(Ljava/net/DatagramPacket;)V"/>
+		<method name="setTTL(B)V" deprecated="15"/>
+		<method name="setTimeToLive(I)V"/>
+		<field name="fd"/>
+		<field name="localPort"/>
+	</class>
+	<class name="java/net/DatagramSocketImplFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createDatagramSocketImpl()Ljava/net/DatagramSocketImpl;"/>
+	</class>
+	<class name="java/net/FileNameMap" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getContentTypeFor(Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/net/HttpCookie" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="domainMatches(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="getComment()Ljava/lang/String;"/>
+		<method name="getCommentURL()Ljava/lang/String;"/>
+		<method name="getDiscard()Z"/>
+		<method name="getDomain()Ljava/lang/String;"/>
+		<method name="getMaxAge()J"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getPortlist()Ljava/lang/String;"/>
+		<method name="getSecure()Z"/>
+		<method name="getValue()Ljava/lang/String;"/>
+		<method name="getVersion()I"/>
+		<method name="hasExpired()Z"/>
+		<method name="isHttpOnly()Z" since="24"/>
+		<method name="parse(Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="setComment(Ljava/lang/String;)V"/>
+		<method name="setCommentURL(Ljava/lang/String;)V"/>
+		<method name="setDiscard(Z)V"/>
+		<method name="setDomain(Ljava/lang/String;)V"/>
+		<method name="setHttpOnly(Z)V" since="24"/>
+		<method name="setMaxAge(J)V"/>
+		<method name="setPath(Ljava/lang/String;)V"/>
+		<method name="setPortlist(Ljava/lang/String;)V"/>
+		<method name="setSecure(Z)V"/>
+		<method name="setValue(Ljava/lang/String;)V"/>
+		<method name="setVersion(I)V"/>
+	</class>
+	<class name="java/net/HttpRetryException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="getLocation()Ljava/lang/String;"/>
+		<method name="getReason()Ljava/lang/String;"/>
+		<method name="responseCode()I"/>
+	</class>
+	<class name="java/net/HttpURLConnection" since="1">
+		<extends name="java/net/URLConnection"/>
+		<method name="&lt;init>(Ljava/net/URL;)V"/>
+		<method name="disconnect()V"/>
+		<method name="getErrorStream()Ljava/io/InputStream;"/>
+		<method name="getFollowRedirects()Z"/>
+		<method name="getInstanceFollowRedirects()Z"/>
+		<method name="getRequestMethod()Ljava/lang/String;"/>
+		<method name="getResponseCode()I"/>
+		<method name="getResponseMessage()Ljava/lang/String;"/>
+		<method name="setChunkedStreamingMode(I)V"/>
+		<method name="setFixedLengthStreamingMode(I)V"/>
+		<method name="setFixedLengthStreamingMode(J)V" since="19"/>
+		<method name="setFollowRedirects(Z)V"/>
+		<method name="setInstanceFollowRedirects(Z)V"/>
+		<method name="setRequestMethod(Ljava/lang/String;)V"/>
+		<method name="usingProxy()Z"/>
+		<field name="HTTP_ACCEPTED"/>
+		<field name="HTTP_BAD_GATEWAY"/>
+		<field name="HTTP_BAD_METHOD"/>
+		<field name="HTTP_BAD_REQUEST"/>
+		<field name="HTTP_CLIENT_TIMEOUT"/>
+		<field name="HTTP_CONFLICT"/>
+		<field name="HTTP_CREATED"/>
+		<field name="HTTP_ENTITY_TOO_LARGE"/>
+		<field name="HTTP_FORBIDDEN"/>
+		<field name="HTTP_GATEWAY_TIMEOUT"/>
+		<field name="HTTP_GONE"/>
+		<field name="HTTP_INTERNAL_ERROR"/>
+		<field name="HTTP_LENGTH_REQUIRED"/>
+		<field name="HTTP_MOVED_PERM"/>
+		<field name="HTTP_MOVED_TEMP"/>
+		<field name="HTTP_MULT_CHOICE"/>
+		<field name="HTTP_NOT_ACCEPTABLE"/>
+		<field name="HTTP_NOT_AUTHORITATIVE"/>
+		<field name="HTTP_NOT_FOUND"/>
+		<field name="HTTP_NOT_IMPLEMENTED"/>
+		<field name="HTTP_NOT_MODIFIED"/>
+		<field name="HTTP_NO_CONTENT"/>
+		<field name="HTTP_OK"/>
+		<field name="HTTP_PARTIAL"/>
+		<field name="HTTP_PAYMENT_REQUIRED"/>
+		<field name="HTTP_PRECON_FAILED"/>
+		<field name="HTTP_PROXY_AUTH"/>
+		<field name="HTTP_REQ_TOO_LONG"/>
+		<field name="HTTP_RESET"/>
+		<field name="HTTP_SEE_OTHER"/>
+		<field name="HTTP_SERVER_ERROR" deprecated="15"/>
+		<field name="HTTP_UNAUTHORIZED"/>
+		<field name="HTTP_UNAVAILABLE"/>
+		<field name="HTTP_UNSUPPORTED_TYPE"/>
+		<field name="HTTP_USE_PROXY"/>
+		<field name="HTTP_VERSION"/>
+		<field name="chunkLength"/>
+		<field name="fixedContentLength"/>
+		<field name="fixedContentLengthLong" since="19"/>
+		<field name="instanceFollowRedirects"/>
+		<field name="method"/>
+		<field name="responseCode"/>
+		<field name="responseMessage"/>
+	</class>
+	<class name="java/net/IDN" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="toASCII(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toASCII(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<method name="toUnicode(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="toUnicode(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<field name="ALLOW_UNASSIGNED"/>
+		<field name="USE_STD3_ASCII_RULES"/>
+	</class>
+	<class name="java/net/Inet4Address" since="1">
+		<extends name="java/net/InetAddress"/>
+	</class>
+	<class name="java/net/Inet6Address" since="1">
+		<extends name="java/net/InetAddress"/>
+		<method name="getByAddress(Ljava/lang/String;[BI)Ljava/net/Inet6Address;"/>
+		<method name="getByAddress(Ljava/lang/String;[BLjava/net/NetworkInterface;)Ljava/net/Inet6Address;"/>
+		<method name="getScopeId()I"/>
+		<method name="getScopedInterface()Ljava/net/NetworkInterface;"/>
+		<method name="isIPv4CompatibleAddress()Z"/>
+	</class>
+	<class name="java/net/InetAddress" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="getAddress()[B"/>
+		<method name="getAllByName(Ljava/lang/String;)[Ljava/net/InetAddress;"/>
+		<method name="getByAddress(Ljava/lang/String;[B)Ljava/net/InetAddress;"/>
+		<method name="getByAddress([B)Ljava/net/InetAddress;"/>
+		<method name="getByName(Ljava/lang/String;)Ljava/net/InetAddress;"/>
+		<method name="getCanonicalHostName()Ljava/lang/String;"/>
+		<method name="getHostAddress()Ljava/lang/String;"/>
+		<method name="getHostName()Ljava/lang/String;"/>
+		<method name="getLocalHost()Ljava/net/InetAddress;"/>
+		<method name="getLoopbackAddress()Ljava/net/InetAddress;" since="19"/>
+		<method name="isAnyLocalAddress()Z"/>
+		<method name="isLinkLocalAddress()Z"/>
+		<method name="isLoopbackAddress()Z"/>
+		<method name="isMCGlobal()Z"/>
+		<method name="isMCLinkLocal()Z"/>
+		<method name="isMCNodeLocal()Z"/>
+		<method name="isMCOrgLocal()Z"/>
+		<method name="isMCSiteLocal()Z"/>
+		<method name="isMulticastAddress()Z"/>
+		<method name="isReachable(I)Z"/>
+		<method name="isReachable(Ljava/net/NetworkInterface;II)Z"/>
+		<method name="isSiteLocalAddress()Z"/>
+	</class>
+	<class name="java/net/InetSocketAddress" since="1">
+		<extends name="java/net/SocketAddress"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
+		<method name="createUnresolved(Ljava/lang/String;I)Ljava/net/InetSocketAddress;"/>
+		<method name="getAddress()Ljava/net/InetAddress;"/>
+		<method name="getHostName()Ljava/lang/String;"/>
+		<method name="getHostString()Ljava/lang/String;" since="19"/>
+		<method name="getPort()I"/>
+		<method name="isUnresolved()Z"/>
+	</class>
+	<class name="java/net/InterfaceAddress" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="getAddress()Ljava/net/InetAddress;"/>
+		<method name="getBroadcast()Ljava/net/InetAddress;"/>
+		<method name="getNetworkPrefixLength()S"/>
+	</class>
+	<class name="java/net/JarURLConnection" since="1">
+		<extends name="java/net/URLConnection"/>
+		<method name="&lt;init>(Ljava/net/URL;)V"/>
+		<method name="getAttributes()Ljava/util/jar/Attributes;"/>
+		<method name="getCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getEntryName()Ljava/lang/String;"/>
+		<method name="getJarEntry()Ljava/util/jar/JarEntry;"/>
+		<method name="getJarFile()Ljava/util/jar/JarFile;"/>
+		<method name="getJarFileURL()Ljava/net/URL;"/>
+		<method name="getMainAttributes()Ljava/util/jar/Attributes;"/>
+		<method name="getManifest()Ljava/util/jar/Manifest;"/>
+		<field name="jarFileURLConnection"/>
+	</class>
+	<class name="java/net/MalformedURLException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/MulticastSocket" since="1">
+		<extends name="java/net/DatagramSocket"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/net/SocketAddress;)V"/>
+		<method name="getInterface()Ljava/net/InetAddress;"/>
+		<method name="getLoopbackMode()Z"/>
+		<method name="getNetworkInterface()Ljava/net/NetworkInterface;"/>
+		<method name="getTTL()B" deprecated="15"/>
+		<method name="getTimeToLive()I"/>
+		<method name="joinGroup(Ljava/net/InetAddress;)V"/>
+		<method name="joinGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
+		<method name="leaveGroup(Ljava/net/InetAddress;)V"/>
+		<method name="leaveGroup(Ljava/net/SocketAddress;Ljava/net/NetworkInterface;)V"/>
+		<method name="send(Ljava/net/DatagramPacket;B)V" deprecated="15"/>
+		<method name="setInterface(Ljava/net/InetAddress;)V"/>
+		<method name="setLoopbackMode(Z)V"/>
+		<method name="setNetworkInterface(Ljava/net/NetworkInterface;)V"/>
+		<method name="setTTL(B)V" deprecated="15"/>
+		<method name="setTimeToLive(I)V"/>
+	</class>
+	<class name="java/net/NetPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/NetworkInterface" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getByIndex(I)Ljava/net/NetworkInterface;" since="19"/>
+		<method name="getByInetAddress(Ljava/net/InetAddress;)Ljava/net/NetworkInterface;"/>
+		<method name="getByName(Ljava/lang/String;)Ljava/net/NetworkInterface;"/>
+		<method name="getDisplayName()Ljava/lang/String;"/>
+		<method name="getHardwareAddress()[B" since="9"/>
+		<method name="getIndex()I" since="19"/>
+		<method name="getInetAddresses()Ljava/util/Enumeration;"/>
+		<method name="getInterfaceAddresses()Ljava/util/List;" since="9"/>
+		<method name="getMTU()I" since="9"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getNetworkInterfaces()Ljava/util/Enumeration;"/>
+		<method name="getParent()Ljava/net/NetworkInterface;" since="9"/>
+		<method name="getSubInterfaces()Ljava/util/Enumeration;" since="9"/>
+		<method name="isLoopback()Z" since="9"/>
+		<method name="isPointToPoint()Z" since="9"/>
+		<method name="isUp()Z" since="9"/>
+		<method name="isVirtual()Z" since="9"/>
+		<method name="supportsMulticast()Z" since="9"/>
+	</class>
+	<class name="java/net/NoRouteToHostException" since="1">
+		<extends name="java/net/SocketException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/PasswordAuthentication" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;[C)V"/>
+		<method name="getPassword()[C"/>
+		<method name="getUserName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/net/PortUnreachableException" since="1">
+		<extends name="java/net/SocketException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/ProtocolException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/ProtocolFamily" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="name()Ljava/lang/String;"/>
+	</class>
+	<class name="java/net/Proxy" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/net/Proxy$Type;Ljava/net/SocketAddress;)V"/>
+		<method name="address()Ljava/net/SocketAddress;"/>
+		<method name="type()Ljava/net/Proxy$Type;"/>
+		<field name="NO_PROXY"/>
+	</class>
+	<class name="java/net/Proxy$Type" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/net/Proxy$Type;"/>
+		<method name="values()[Ljava/net/Proxy$Type;"/>
+		<field name="DIRECT"/>
+		<field name="HTTP"/>
+		<field name="SOCKS"/>
+	</class>
+	<class name="java/net/ProxySelector" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="connectFailed(Ljava/net/URI;Ljava/net/SocketAddress;Ljava/io/IOException;)V"/>
+		<method name="getDefault()Ljava/net/ProxySelector;"/>
+		<method name="select(Ljava/net/URI;)Ljava/util/List;"/>
+		<method name="setDefault(Ljava/net/ProxySelector;)V"/>
+	</class>
+	<class name="java/net/ResponseCache" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="get(Ljava/net/URI;Ljava/lang/String;Ljava/util/Map;)Ljava/net/CacheResponse;"/>
+		<method name="getDefault()Ljava/net/ResponseCache;"/>
+		<method name="put(Ljava/net/URI;Ljava/net/URLConnection;)Ljava/net/CacheRequest;"/>
+		<method name="setDefault(Ljava/net/ResponseCache;)V"/>
+	</class>
+	<class name="java/net/SecureCacheResponse" since="1">
+		<extends name="java/net/CacheResponse"/>
+		<method name="&lt;init>()V"/>
+		<method name="getCipherSuite()Ljava/lang/String;"/>
+		<method name="getLocalCertificateChain()Ljava/util/List;"/>
+		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
+		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
+		<method name="getServerCertificateChain()Ljava/util/List;"/>
+	</class>
+	<class name="java/net/ServerSocket" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IILjava/net/InetAddress;)V"/>
+		<method name="&lt;init>(Ljava/net/SocketImpl;)V" removed="2"/>
+		<method name="accept()Ljava/net/Socket;"/>
+		<method name="bind(Ljava/net/SocketAddress;)V"/>
+		<method name="bind(Ljava/net/SocketAddress;I)V"/>
+		<method name="close()V"/>
+		<method name="getChannel()Ljava/nio/channels/ServerSocketChannel;"/>
+		<method name="getInetAddress()Ljava/net/InetAddress;"/>
+		<method name="getLocalPort()I"/>
+		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;"/>
+		<method name="getReceiveBufferSize()I"/>
+		<method name="getReuseAddress()Z"/>
+		<method name="getSoTimeout()I"/>
+		<method name="implAccept(Ljava/net/Socket;)V"/>
+		<method name="isBound()Z"/>
+		<method name="isClosed()Z"/>
+		<method name="setPerformancePreferences(III)V"/>
+		<method name="setReceiveBufferSize(I)V"/>
+		<method name="setReuseAddress(Z)V"/>
+		<method name="setSoTimeout(I)V"/>
+		<method name="setSocketFactory(Ljava/net/SocketImplFactory;)V"/>
+	</class>
+	<class name="java/net/Socket" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/net/InetAddress;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;IZ)V" deprecated="15"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;IZ)V" deprecated="15"/>
+		<method name="&lt;init>(Ljava/net/Proxy;)V"/>
+		<method name="&lt;init>(Ljava/net/SocketImpl;)V"/>
+		<method name="bind(Ljava/net/SocketAddress;)V"/>
+		<method name="close()V"/>
+		<method name="connect(Ljava/net/SocketAddress;)V"/>
+		<method name="connect(Ljava/net/SocketAddress;I)V"/>
+		<method name="getChannel()Ljava/nio/channels/SocketChannel;"/>
+		<method name="getInetAddress()Ljava/net/InetAddress;"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getKeepAlive()Z"/>
+		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
+		<method name="getLocalPort()I"/>
+		<method name="getLocalSocketAddress()Ljava/net/SocketAddress;"/>
+		<method name="getOOBInline()Z"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="getPort()I"/>
+		<method name="getReceiveBufferSize()I"/>
+		<method name="getRemoteSocketAddress()Ljava/net/SocketAddress;"/>
+		<method name="getReuseAddress()Z"/>
+		<method name="getSendBufferSize()I"/>
+		<method name="getSoLinger()I"/>
+		<method name="getSoTimeout()I"/>
+		<method name="getTcpNoDelay()Z"/>
+		<method name="getTrafficClass()I"/>
+		<method name="isBound()Z"/>
+		<method name="isClosed()Z"/>
+		<method name="isConnected()Z"/>
+		<method name="isInputShutdown()Z"/>
+		<method name="isOutputShutdown()Z"/>
+		<method name="sendUrgentData(I)V"/>
+		<method name="setKeepAlive(Z)V"/>
+		<method name="setOOBInline(Z)V"/>
+		<method name="setPerformancePreferences(III)V"/>
+		<method name="setReceiveBufferSize(I)V"/>
+		<method name="setReuseAddress(Z)V"/>
+		<method name="setSendBufferSize(I)V"/>
+		<method name="setSoLinger(ZI)V"/>
+		<method name="setSoTimeout(I)V"/>
+		<method name="setSocketImplFactory(Ljava/net/SocketImplFactory;)V"/>
+		<method name="setTcpNoDelay(Z)V"/>
+		<method name="setTrafficClass(I)V"/>
+		<method name="shutdownInput()V"/>
+		<method name="shutdownOutput()V"/>
+	</class>
+	<class name="java/net/SocketAddress" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/net/SocketException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/SocketImpl" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/net/SocketOptions"/>
+		<method name="&lt;init>()V"/>
+		<method name="accept(Ljava/net/SocketImpl;)V"/>
+		<method name="available()I"/>
+		<method name="bind(Ljava/net/InetAddress;I)V"/>
+		<method name="close()V"/>
+		<method name="connect(Ljava/lang/String;I)V"/>
+		<method name="connect(Ljava/net/InetAddress;I)V"/>
+		<method name="connect(Ljava/net/SocketAddress;I)V"/>
+		<method name="create(Z)V"/>
+		<method name="getFileDescriptor()Ljava/io/FileDescriptor;"/>
+		<method name="getInetAddress()Ljava/net/InetAddress;"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getLocalPort()I"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="getPort()I"/>
+		<method name="listen(I)V"/>
+		<method name="sendUrgentData(I)V"/>
+		<method name="setPerformancePreferences(III)V"/>
+		<method name="shutdownInput()V"/>
+		<method name="shutdownOutput()V"/>
+		<method name="supportsUrgentData()Z"/>
+		<field name="address"/>
+		<field name="fd"/>
+		<field name="localport"/>
+		<field name="port"/>
+	</class>
+	<class name="java/net/SocketImplFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createSocketImpl()Ljava/net/SocketImpl;"/>
+	</class>
+	<class name="java/net/SocketOption" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="type()Ljava/lang/Class;"/>
+	</class>
+	<class name="java/net/SocketOptions" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getOption(I)Ljava/lang/Object;"/>
+		<method name="setOption(ILjava/lang/Object;)V"/>
+		<field name="IP_MULTICAST_IF"/>
+		<field name="IP_MULTICAST_IF2"/>
+		<field name="IP_MULTICAST_LOOP"/>
+		<field name="IP_TOS"/>
+		<field name="SO_BINDADDR"/>
+		<field name="SO_BROADCAST"/>
+		<field name="SO_KEEPALIVE"/>
+		<field name="SO_LINGER"/>
+		<field name="SO_OOBINLINE"/>
+		<field name="SO_RCVBUF"/>
+		<field name="SO_REUSEADDR"/>
+		<field name="SO_SNDBUF"/>
+		<field name="SO_TIMEOUT"/>
+		<field name="TCP_NODELAY"/>
+	</class>
+	<class name="java/net/SocketPermission" since="1">
+		<extends name="java/security/Permission"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/SocketTimeoutException" since="1">
+		<extends name="java/io/InterruptedIOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/StandardProtocolFamily" since="24">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/net/ProtocolFamily"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/net/StandardProtocolFamily;"/>
+		<method name="values()[Ljava/net/StandardProtocolFamily;"/>
+		<field name="INET"/>
+		<field name="INET6"/>
+	</class>
+	<class name="java/net/StandardSocketOptions" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="IP_MULTICAST_IF"/>
+		<field name="IP_MULTICAST_LOOP"/>
+		<field name="IP_MULTICAST_TTL"/>
+		<field name="IP_TOS"/>
+		<field name="SO_BROADCAST"/>
+		<field name="SO_KEEPALIVE"/>
+		<field name="SO_LINGER"/>
+		<field name="SO_RCVBUF"/>
+		<field name="SO_REUSEADDR"/>
+		<field name="SO_SNDBUF"/>
+		<field name="TCP_NODELAY"/>
+	</class>
+	<class name="java/net/URI" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="compareTo(Ljava/net/URI;)I"/>
+		<method name="create(Ljava/lang/String;)Ljava/net/URI;"/>
+		<method name="getAuthority()Ljava/lang/String;"/>
+		<method name="getFragment()Ljava/lang/String;"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getPort()I"/>
+		<method name="getQuery()Ljava/lang/String;"/>
+		<method name="getRawAuthority()Ljava/lang/String;"/>
+		<method name="getRawFragment()Ljava/lang/String;"/>
+		<method name="getRawPath()Ljava/lang/String;"/>
+		<method name="getRawQuery()Ljava/lang/String;"/>
+		<method name="getRawSchemeSpecificPart()Ljava/lang/String;"/>
+		<method name="getRawUserInfo()Ljava/lang/String;"/>
+		<method name="getScheme()Ljava/lang/String;"/>
+		<method name="getSchemeSpecificPart()Ljava/lang/String;"/>
+		<method name="getUserInfo()Ljava/lang/String;"/>
+		<method name="isAbsolute()Z"/>
+		<method name="isOpaque()Z"/>
+		<method name="normalize()Ljava/net/URI;"/>
+		<method name="parseServerAuthority()Ljava/net/URI;"/>
+		<method name="relativize(Ljava/net/URI;)Ljava/net/URI;"/>
+		<method name="resolve(Ljava/lang/String;)Ljava/net/URI;"/>
+		<method name="resolve(Ljava/net/URI;)Ljava/net/URI;"/>
+		<method name="toASCIIString()Ljava/lang/String;"/>
+		<method name="toURL()Ljava/net/URL;"/>
+	</class>
+	<class name="java/net/URISyntaxException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="getIndex()I"/>
+		<method name="getInput()Ljava/lang/String;"/>
+		<method name="getReason()Ljava/lang/String;"/>
+	</class>
+	<class name="java/net/URL" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/net/URLStreamHandler;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URL;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V"/>
+		<method name="getAuthority()Ljava/lang/String;"/>
+		<method name="getContent()Ljava/lang/Object;"/>
+		<method name="getContent([Ljava/lang/Class;)Ljava/lang/Object;"/>
+		<method name="getDefaultPort()I"/>
+		<method name="getFile()Ljava/lang/String;"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getPort()I"/>
+		<method name="getProtocol()Ljava/lang/String;"/>
+		<method name="getQuery()Ljava/lang/String;"/>
+		<method name="getRef()Ljava/lang/String;"/>
+		<method name="getUserInfo()Ljava/lang/String;"/>
+		<method name="openConnection()Ljava/net/URLConnection;"/>
+		<method name="openConnection(Ljava/net/Proxy;)Ljava/net/URLConnection;"/>
+		<method name="openStream()Ljava/io/InputStream;"/>
+		<method name="sameFile(Ljava/net/URL;)Z"/>
+		<method name="set(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" removed="26"/>
+		<method name="set(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" removed="26"/>
+		<method name="setURLStreamHandlerFactory(Ljava/net/URLStreamHandlerFactory;)V"/>
+		<method name="toExternalForm()Ljava/lang/String;"/>
+		<method name="toURI()Ljava/net/URI;"/>
+	</class>
+	<class name="java/net/URLClassLoader" since="1">
+		<extends name="java/security/SecureClassLoader"/>
+		<implements name="java/io/Closeable" since="24"/>
+		<method name="&lt;init>([Ljava/net/URL;)V"/>
+		<method name="&lt;init>([Ljava/net/URL;Ljava/lang/ClassLoader;)V"/>
+		<method name="&lt;init>([Ljava/net/URL;Ljava/lang/ClassLoader;Ljava/net/URLStreamHandlerFactory;)V"/>
+		<method name="addURL(Ljava/net/URL;)V"/>
+		<method name="definePackage(Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package;"/>
+		<method name="getURLs()[Ljava/net/URL;"/>
+		<method name="newInstance([Ljava/net/URL;)Ljava/net/URLClassLoader;"/>
+		<method name="newInstance([Ljava/net/URL;Ljava/lang/ClassLoader;)Ljava/net/URLClassLoader;"/>
+	</class>
+	<class name="java/net/URLConnection" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/net/URL;)V"/>
+		<method name="addRequestProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="connect()V"/>
+		<method name="getAllowUserInteraction()Z"/>
+		<method name="getConnectTimeout()I"/>
+		<method name="getContent()Ljava/lang/Object;"/>
+		<method name="getContent([Ljava/lang/Class;)Ljava/lang/Object;"/>
+		<method name="getContentEncoding()Ljava/lang/String;"/>
+		<method name="getContentLength()I"/>
+		<method name="getContentLengthLong()J" since="24"/>
+		<method name="getContentType()Ljava/lang/String;"/>
+		<method name="getDate()J"/>
+		<method name="getDefaultAllowUserInteraction()Z"/>
+		<method name="getDefaultRequestProperty(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="getDefaultUseCaches()Z"/>
+		<method name="getDoInput()Z"/>
+		<method name="getDoOutput()Z"/>
+		<method name="getExpiration()J"/>
+		<method name="getFileNameMap()Ljava/net/FileNameMap;"/>
+		<method name="getHeaderField(I)Ljava/lang/String;"/>
+		<method name="getHeaderField(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getHeaderFieldDate(Ljava/lang/String;J)J"/>
+		<method name="getHeaderFieldInt(Ljava/lang/String;I)I"/>
+		<method name="getHeaderFieldKey(I)Ljava/lang/String;"/>
+		<method name="getHeaderFieldLong(Ljava/lang/String;J)J" since="24"/>
+		<method name="getHeaderFields()Ljava/util/Map;"/>
+		<method name="getIfModifiedSince()J"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getLastModified()J"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="getPermission()Ljava/security/Permission;"/>
+		<method name="getReadTimeout()I"/>
+		<method name="getRequestProperties()Ljava/util/Map;"/>
+		<method name="getRequestProperty(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getURL()Ljava/net/URL;"/>
+		<method name="getUseCaches()Z"/>
+		<method name="guessContentTypeFromName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="guessContentTypeFromStream(Ljava/io/InputStream;)Ljava/lang/String;"/>
+		<method name="setAllowUserInteraction(Z)V"/>
+		<method name="setConnectTimeout(I)V"/>
+		<method name="setContentHandlerFactory(Ljava/net/ContentHandlerFactory;)V"/>
+		<method name="setDefaultAllowUserInteraction(Z)V"/>
+		<method name="setDefaultRequestProperty(Ljava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+		<method name="setDefaultUseCaches(Z)V"/>
+		<method name="setDoInput(Z)V"/>
+		<method name="setDoOutput(Z)V"/>
+		<method name="setFileNameMap(Ljava/net/FileNameMap;)V"/>
+		<method name="setIfModifiedSince(J)V"/>
+		<method name="setReadTimeout(I)V"/>
+		<method name="setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setUseCaches(Z)V"/>
+		<field name="allowUserInteraction"/>
+		<field name="connected"/>
+		<field name="doInput"/>
+		<field name="doOutput"/>
+		<field name="ifModifiedSince"/>
+		<field name="url"/>
+		<field name="useCaches"/>
+	</class>
+	<class name="java/net/URLDecoder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="decode(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/net/URLEncoder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="encode(Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/net/URLStreamHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="equals(Ljava/net/URL;Ljava/net/URL;)Z"/>
+		<method name="getDefaultPort()I"/>
+		<method name="getHostAddress(Ljava/net/URL;)Ljava/net/InetAddress;"/>
+		<method name="hashCode(Ljava/net/URL;)I"/>
+		<method name="hostsEqual(Ljava/net/URL;Ljava/net/URL;)Z"/>
+		<method name="openConnection(Ljava/net/URL;)Ljava/net/URLConnection;"/>
+		<method name="openConnection(Ljava/net/URL;Ljava/net/Proxy;)Ljava/net/URLConnection;"/>
+		<method name="parseURL(Ljava/net/URL;Ljava/lang/String;II)V"/>
+		<method name="sameFile(Ljava/net/URL;Ljava/net/URL;)Z"/>
+		<method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V" deprecated="15"/>
+		<method name="setURL(Ljava/net/URL;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="toExternalForm(Ljava/net/URL;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/net/URLStreamHandlerFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createURLStreamHandler(Ljava/lang/String;)Ljava/net/URLStreamHandler;"/>
+	</class>
+	<class name="java/net/UnknownHostException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/net/UnknownServiceException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/Buffer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="array()Ljava/lang/Object;" since="9"/>
+		<method name="arrayOffset()I" since="9"/>
+		<method name="capacity()I"/>
+		<method name="clear()Ljava/nio/Buffer;"/>
+		<method name="flip()Ljava/nio/Buffer;"/>
+		<method name="hasArray()Z" since="9"/>
+		<method name="hasRemaining()Z"/>
+		<method name="isDirect()Z" since="9"/>
+		<method name="isReadOnly()Z"/>
+		<method name="limit()I"/>
+		<method name="limit(I)Ljava/nio/Buffer;"/>
+		<method name="mark()Ljava/nio/Buffer;"/>
+		<method name="position()I"/>
+		<method name="position(I)Ljava/nio/Buffer;"/>
+		<method name="remaining()I"/>
+		<method name="reset()Ljava/nio/Buffer;"/>
+		<method name="rewind()Ljava/nio/Buffer;"/>
+	</class>
+	<class name="java/nio/BufferOverflowException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/BufferUnderflowException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/ByteBuffer" since="1">
+		<extends name="java/nio/Buffer"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="allocate(I)Ljava/nio/ByteBuffer;"/>
+		<method name="allocateDirect(I)Ljava/nio/ByteBuffer;"/>
+		<method name="array()[B"/>
+		<method name="arrayOffset()I"/>
+		<method name="asCharBuffer()Ljava/nio/CharBuffer;"/>
+		<method name="asDoubleBuffer()Ljava/nio/DoubleBuffer;"/>
+		<method name="asFloatBuffer()Ljava/nio/FloatBuffer;"/>
+		<method name="asIntBuffer()Ljava/nio/IntBuffer;"/>
+		<method name="asLongBuffer()Ljava/nio/LongBuffer;"/>
+		<method name="asReadOnlyBuffer()Ljava/nio/ByteBuffer;"/>
+		<method name="asShortBuffer()Ljava/nio/ShortBuffer;"/>
+		<method name="compact()Ljava/nio/ByteBuffer;"/>
+		<method name="compareTo(Ljava/nio/ByteBuffer;)I"/>
+		<method name="duplicate()Ljava/nio/ByteBuffer;"/>
+		<method name="get()B"/>
+		<method name="get(I)B"/>
+		<method name="get([B)Ljava/nio/ByteBuffer;"/>
+		<method name="get([BII)Ljava/nio/ByteBuffer;"/>
+		<method name="getChar()C"/>
+		<method name="getChar(I)C"/>
+		<method name="getDouble()D"/>
+		<method name="getDouble(I)D"/>
+		<method name="getFloat()F"/>
+		<method name="getFloat(I)F"/>
+		<method name="getInt()I"/>
+		<method name="getInt(I)I"/>
+		<method name="getLong()J"/>
+		<method name="getLong(I)J"/>
+		<method name="getShort()S"/>
+		<method name="getShort(I)S"/>
+		<method name="hasArray()Z"/>
+		<method name="isDirect()Z"/>
+		<method name="order()Ljava/nio/ByteOrder;"/>
+		<method name="order(Ljava/nio/ByteOrder;)Ljava/nio/ByteBuffer;"/>
+		<method name="put(B)Ljava/nio/ByteBuffer;"/>
+		<method name="put(IB)Ljava/nio/ByteBuffer;"/>
+		<method name="put(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
+		<method name="put([B)Ljava/nio/ByteBuffer;"/>
+		<method name="put([BII)Ljava/nio/ByteBuffer;"/>
+		<method name="putChar(C)Ljava/nio/ByteBuffer;"/>
+		<method name="putChar(IC)Ljava/nio/ByteBuffer;"/>
+		<method name="putDouble(D)Ljava/nio/ByteBuffer;"/>
+		<method name="putDouble(ID)Ljava/nio/ByteBuffer;"/>
+		<method name="putFloat(F)Ljava/nio/ByteBuffer;"/>
+		<method name="putFloat(IF)Ljava/nio/ByteBuffer;"/>
+		<method name="putInt(I)Ljava/nio/ByteBuffer;"/>
+		<method name="putInt(II)Ljava/nio/ByteBuffer;"/>
+		<method name="putLong(IJ)Ljava/nio/ByteBuffer;"/>
+		<method name="putLong(J)Ljava/nio/ByteBuffer;"/>
+		<method name="putShort(IS)Ljava/nio/ByteBuffer;"/>
+		<method name="putShort(S)Ljava/nio/ByteBuffer;"/>
+		<method name="slice()Ljava/nio/ByteBuffer;"/>
+		<method name="wrap([B)Ljava/nio/ByteBuffer;"/>
+		<method name="wrap([BII)Ljava/nio/ByteBuffer;"/>
+	</class>
+	<class name="java/nio/ByteOrder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="nativeOrder()Ljava/nio/ByteOrder;"/>
+		<field name="BIG_ENDIAN"/>
+		<field name="LITTLE_ENDIAN"/>
+	</class>
+	<class name="java/nio/CharBuffer" since="1">
+		<extends name="java/nio/Buffer"/>
+		<implements name="java/lang/Appendable"/>
+		<implements name="java/lang/CharSequence"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/lang/Readable"/>
+		<method name="allocate(I)Ljava/nio/CharBuffer;"/>
+		<method name="append(C)Ljava/nio/CharBuffer;"/>
+		<method name="append(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;"/>
+		<method name="append(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;"/>
+		<method name="array()[C"/>
+		<method name="arrayOffset()I"/>
+		<method name="asReadOnlyBuffer()Ljava/nio/CharBuffer;"/>
+		<method name="compact()Ljava/nio/CharBuffer;"/>
+		<method name="compareTo(Ljava/nio/CharBuffer;)I"/>
+		<method name="duplicate()Ljava/nio/CharBuffer;"/>
+		<method name="get()C"/>
+		<method name="get(I)C"/>
+		<method name="get([C)Ljava/nio/CharBuffer;"/>
+		<method name="get([CII)Ljava/nio/CharBuffer;"/>
+		<method name="hasArray()Z"/>
+		<method name="isDirect()Z"/>
+		<method name="order()Ljava/nio/ByteOrder;"/>
+		<method name="put(C)Ljava/nio/CharBuffer;"/>
+		<method name="put(IC)Ljava/nio/CharBuffer;"/>
+		<method name="put(Ljava/lang/String;)Ljava/nio/CharBuffer;"/>
+		<method name="put(Ljava/lang/String;II)Ljava/nio/CharBuffer;"/>
+		<method name="put(Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer;"/>
+		<method name="put([C)Ljava/nio/CharBuffer;"/>
+		<method name="put([CII)Ljava/nio/CharBuffer;"/>
+		<method name="slice()Ljava/nio/CharBuffer;"/>
+		<method name="subSequence(II)Ljava/nio/CharBuffer;" since="19"/>
+		<method name="wrap(Ljava/lang/CharSequence;)Ljava/nio/CharBuffer;"/>
+		<method name="wrap(Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer;"/>
+		<method name="wrap([C)Ljava/nio/CharBuffer;"/>
+		<method name="wrap([CII)Ljava/nio/CharBuffer;"/>
+	</class>
+	<class name="java/nio/DoubleBuffer" since="1">
+		<extends name="java/nio/Buffer"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="allocate(I)Ljava/nio/DoubleBuffer;"/>
+		<method name="array()[D"/>
+		<method name="arrayOffset()I"/>
+		<method name="asReadOnlyBuffer()Ljava/nio/DoubleBuffer;"/>
+		<method name="compact()Ljava/nio/DoubleBuffer;"/>
+		<method name="compareTo(Ljava/nio/DoubleBuffer;)I"/>
+		<method name="duplicate()Ljava/nio/DoubleBuffer;"/>
+		<method name="get()D"/>
+		<method name="get(I)D"/>
+		<method name="get([D)Ljava/nio/DoubleBuffer;"/>
+		<method name="get([DII)Ljava/nio/DoubleBuffer;"/>
+		<method name="hasArray()Z"/>
+		<method name="isDirect()Z"/>
+		<method name="order()Ljava/nio/ByteOrder;"/>
+		<method name="put(D)Ljava/nio/DoubleBuffer;"/>
+		<method name="put(ID)Ljava/nio/DoubleBuffer;"/>
+		<method name="put(Ljava/nio/DoubleBuffer;)Ljava/nio/DoubleBuffer;"/>
+		<method name="put([D)Ljava/nio/DoubleBuffer;"/>
+		<method name="put([DII)Ljava/nio/DoubleBuffer;"/>
+		<method name="slice()Ljava/nio/DoubleBuffer;"/>
+		<method name="wrap([D)Ljava/nio/DoubleBuffer;"/>
+		<method name="wrap([DII)Ljava/nio/DoubleBuffer;"/>
+	</class>
+	<class name="java/nio/FloatBuffer" since="1">
+		<extends name="java/nio/Buffer"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="allocate(I)Ljava/nio/FloatBuffer;"/>
+		<method name="array()[F"/>
+		<method name="arrayOffset()I"/>
+		<method name="asReadOnlyBuffer()Ljava/nio/FloatBuffer;"/>
+		<method name="compact()Ljava/nio/FloatBuffer;"/>
+		<method name="compareTo(Ljava/nio/FloatBuffer;)I"/>
+		<method name="duplicate()Ljava/nio/FloatBuffer;"/>
+		<method name="get()F"/>
+		<method name="get(I)F"/>
+		<method name="get([F)Ljava/nio/FloatBuffer;"/>
+		<method name="get([FII)Ljava/nio/FloatBuffer;"/>
+		<method name="hasArray()Z"/>
+		<method name="isDirect()Z"/>
+		<method name="order()Ljava/nio/ByteOrder;"/>
+		<method name="put(F)Ljava/nio/FloatBuffer;"/>
+		<method name="put(IF)Ljava/nio/FloatBuffer;"/>
+		<method name="put(Ljava/nio/FloatBuffer;)Ljava/nio/FloatBuffer;"/>
+		<method name="put([F)Ljava/nio/FloatBuffer;"/>
+		<method name="put([FII)Ljava/nio/FloatBuffer;"/>
+		<method name="slice()Ljava/nio/FloatBuffer;"/>
+		<method name="wrap([F)Ljava/nio/FloatBuffer;"/>
+		<method name="wrap([FII)Ljava/nio/FloatBuffer;"/>
+	</class>
+	<class name="java/nio/IntBuffer" since="1">
+		<extends name="java/nio/Buffer"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="allocate(I)Ljava/nio/IntBuffer;"/>
+		<method name="array()[I"/>
+		<method name="arrayOffset()I"/>
+		<method name="asReadOnlyBuffer()Ljava/nio/IntBuffer;"/>
+		<method name="compact()Ljava/nio/IntBuffer;"/>
+		<method name="compareTo(Ljava/nio/IntBuffer;)I"/>
+		<method name="duplicate()Ljava/nio/IntBuffer;"/>
+		<method name="get()I"/>
+		<method name="get(I)I"/>
+		<method name="get([I)Ljava/nio/IntBuffer;"/>
+		<method name="get([III)Ljava/nio/IntBuffer;"/>
+		<method name="hasArray()Z"/>
+		<method name="isDirect()Z"/>
+		<method name="order()Ljava/nio/ByteOrder;"/>
+		<method name="put(I)Ljava/nio/IntBuffer;"/>
+		<method name="put(II)Ljava/nio/IntBuffer;"/>
+		<method name="put(Ljava/nio/IntBuffer;)Ljava/nio/IntBuffer;"/>
+		<method name="put([I)Ljava/nio/IntBuffer;"/>
+		<method name="put([III)Ljava/nio/IntBuffer;"/>
+		<method name="slice()Ljava/nio/IntBuffer;"/>
+		<method name="wrap([I)Ljava/nio/IntBuffer;"/>
+		<method name="wrap([III)Ljava/nio/IntBuffer;"/>
+	</class>
+	<class name="java/nio/InvalidMarkException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/LongBuffer" since="1">
+		<extends name="java/nio/Buffer"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="allocate(I)Ljava/nio/LongBuffer;"/>
+		<method name="array()[J"/>
+		<method name="arrayOffset()I"/>
+		<method name="asReadOnlyBuffer()Ljava/nio/LongBuffer;"/>
+		<method name="compact()Ljava/nio/LongBuffer;"/>
+		<method name="compareTo(Ljava/nio/LongBuffer;)I"/>
+		<method name="duplicate()Ljava/nio/LongBuffer;"/>
+		<method name="get()J"/>
+		<method name="get(I)J"/>
+		<method name="get([J)Ljava/nio/LongBuffer;"/>
+		<method name="get([JII)Ljava/nio/LongBuffer;"/>
+		<method name="hasArray()Z"/>
+		<method name="isDirect()Z"/>
+		<method name="order()Ljava/nio/ByteOrder;"/>
+		<method name="put(IJ)Ljava/nio/LongBuffer;"/>
+		<method name="put(J)Ljava/nio/LongBuffer;"/>
+		<method name="put(Ljava/nio/LongBuffer;)Ljava/nio/LongBuffer;"/>
+		<method name="put([J)Ljava/nio/LongBuffer;"/>
+		<method name="put([JII)Ljava/nio/LongBuffer;"/>
+		<method name="slice()Ljava/nio/LongBuffer;"/>
+		<method name="wrap([J)Ljava/nio/LongBuffer;"/>
+		<method name="wrap([JII)Ljava/nio/LongBuffer;"/>
+	</class>
+	<class name="java/nio/MappedByteBuffer" since="1">
+		<extends name="java/nio/ByteBuffer"/>
+		<method name="force()Ljava/nio/MappedByteBuffer;"/>
+		<method name="isLoaded()Z"/>
+		<method name="load()Ljava/nio/MappedByteBuffer;"/>
+	</class>
+	<class name="java/nio/ReadOnlyBufferException" since="1">
+		<extends name="java/lang/UnsupportedOperationException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/ShortBuffer" since="1">
+		<extends name="java/nio/Buffer"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="allocate(I)Ljava/nio/ShortBuffer;"/>
+		<method name="array()[S"/>
+		<method name="arrayOffset()I"/>
+		<method name="asReadOnlyBuffer()Ljava/nio/ShortBuffer;"/>
+		<method name="compact()Ljava/nio/ShortBuffer;"/>
+		<method name="compareTo(Ljava/nio/ShortBuffer;)I"/>
+		<method name="duplicate()Ljava/nio/ShortBuffer;"/>
+		<method name="get()S"/>
+		<method name="get(I)S"/>
+		<method name="get([S)Ljava/nio/ShortBuffer;"/>
+		<method name="get([SII)Ljava/nio/ShortBuffer;"/>
+		<method name="hasArray()Z"/>
+		<method name="isDirect()Z"/>
+		<method name="order()Ljava/nio/ByteOrder;"/>
+		<method name="put(IS)Ljava/nio/ShortBuffer;"/>
+		<method name="put(Ljava/nio/ShortBuffer;)Ljava/nio/ShortBuffer;"/>
+		<method name="put(S)Ljava/nio/ShortBuffer;"/>
+		<method name="put([S)Ljava/nio/ShortBuffer;"/>
+		<method name="put([SII)Ljava/nio/ShortBuffer;"/>
+		<method name="slice()Ljava/nio/ShortBuffer;"/>
+		<method name="wrap([S)Ljava/nio/ShortBuffer;"/>
+		<method name="wrap([SII)Ljava/nio/ShortBuffer;"/>
+	</class>
+	<class name="java/nio/channels/AcceptPendingException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/AlreadyBoundException" since="24">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/AlreadyConnectedException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/AsynchronousByteChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/AsynchronousChannel"/>
+		<method name="read(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;"/>
+		<method name="read(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="write(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;"/>
+		<method name="write(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+	</class>
+	<class name="java/nio/channels/AsynchronousChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+	</class>
+	<class name="java/nio/channels/AsynchronousChannelGroup" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V"/>
+		<method name="awaitTermination(JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="isShutdown()Z"/>
+		<method name="isTerminated()Z"/>
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
+		<method name="shutdown()V"/>
+		<method name="shutdownNow()V"/>
+		<method name="withCachedThreadPool(Ljava/util/concurrent/ExecutorService;I)Ljava/nio/channels/AsynchronousChannelGroup;"/>
+		<method name="withFixedThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/nio/channels/AsynchronousChannelGroup;"/>
+		<method name="withThreadPool(Ljava/util/concurrent/ExecutorService;)Ljava/nio/channels/AsynchronousChannelGroup;"/>
+	</class>
+	<class name="java/nio/channels/AsynchronousCloseException" since="1">
+		<extends name="java/nio/channels/ClosedChannelException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/AsynchronousFileChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/AsynchronousChannel"/>
+		<method name="&lt;init>()V"/>
+		<method name="force(Z)V"/>
+		<method name="lock()Ljava/util/concurrent/Future;"/>
+		<method name="lock(JJZ)Ljava/util/concurrent/Future;"/>
+		<method name="lock(JJZLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="lock(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="open(Ljava/nio/file/Path;Ljava/util/Set;Ljava/util/concurrent/ExecutorService;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/AsynchronousFileChannel;"/>
+		<method name="open(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/AsynchronousFileChannel;"/>
+		<method name="read(Ljava/nio/ByteBuffer;J)Ljava/util/concurrent/Future;"/>
+		<method name="read(Ljava/nio/ByteBuffer;JLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="size()J"/>
+		<method name="truncate(J)Ljava/nio/channels/AsynchronousFileChannel;"/>
+		<method name="tryLock()Ljava/nio/channels/FileLock;"/>
+		<method name="tryLock(JJZ)Ljava/nio/channels/FileLock;"/>
+		<method name="write(Ljava/nio/ByteBuffer;J)Ljava/util/concurrent/Future;"/>
+		<method name="write(Ljava/nio/ByteBuffer;JLjava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+	</class>
+	<class name="java/nio/channels/AsynchronousServerSocketChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/AsynchronousChannel"/>
+		<implements name="java/nio/channels/NetworkChannel"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V"/>
+		<method name="accept()Ljava/util/concurrent/Future;"/>
+		<method name="accept(Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
+		<method name="bind(Ljava/net/SocketAddress;I)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
+		<method name="open()Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
+		<method name="open(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
+	</class>
+	<class name="java/nio/channels/AsynchronousSocketChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/AsynchronousByteChannel"/>
+		<implements name="java/nio/channels/NetworkChannel"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/AsynchronousChannelProvider;)V"/>
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
+		<method name="connect(Ljava/net/SocketAddress;)Ljava/util/concurrent/Future;"/>
+		<method name="connect(Ljava/net/SocketAddress;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="getRemoteAddress()Ljava/net/SocketAddress;"/>
+		<method name="open()Ljava/nio/channels/AsynchronousSocketChannel;"/>
+		<method name="open(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
+		<method name="read(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="read([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
+		<method name="shutdownInput()Ljava/nio/channels/AsynchronousSocketChannel;"/>
+		<method name="shutdownOutput()Ljava/nio/channels/AsynchronousSocketChannel;"/>
+		<method name="write(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+		<method name="write([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V"/>
+	</class>
+	<class name="java/nio/channels/ByteChannel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/ReadableByteChannel"/>
+		<implements name="java/nio/channels/WritableByteChannel"/>
+	</class>
+	<class name="java/nio/channels/CancelledKeyException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/Channel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="isOpen()Z"/>
+	</class>
+	<class name="java/nio/channels/Channels" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;"/>
+		<method name="newChannel(Ljava/io/OutputStream;)Ljava/nio/channels/WritableByteChannel;"/>
+		<method name="newInputStream(Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/InputStream;" since="26"/>
+		<method name="newInputStream(Ljava/nio/channels/ReadableByteChannel;)Ljava/io/InputStream;"/>
+		<method name="newOutputStream(Ljava/nio/channels/AsynchronousByteChannel;)Ljava/io/OutputStream;" since="26"/>
+		<method name="newOutputStream(Ljava/nio/channels/WritableByteChannel;)Ljava/io/OutputStream;"/>
+		<method name="newReader(Ljava/nio/channels/ReadableByteChannel;Ljava/lang/String;)Ljava/io/Reader;"/>
+		<method name="newReader(Ljava/nio/channels/ReadableByteChannel;Ljava/nio/charset/CharsetDecoder;I)Ljava/io/Reader;"/>
+		<method name="newWriter(Ljava/nio/channels/WritableByteChannel;Ljava/lang/String;)Ljava/io/Writer;"/>
+		<method name="newWriter(Ljava/nio/channels/WritableByteChannel;Ljava/nio/charset/CharsetEncoder;I)Ljava/io/Writer;"/>
+	</class>
+	<class name="java/nio/channels/ClosedByInterruptException" since="1">
+		<extends name="java/nio/channels/AsynchronousCloseException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/ClosedChannelException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/ClosedSelectorException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/CompletionHandler" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="completed(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="failed(Ljava/lang/Throwable;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/nio/channels/ConnectionPendingException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/DatagramChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
+		<implements name="java/nio/channels/ByteChannel"/>
+		<implements name="java/nio/channels/GatheringByteChannel"/>
+		<implements name="java/nio/channels/MulticastChannel" since="26"/>
+		<implements name="java/nio/channels/NetworkChannel" since="24" removed="26"/>
+		<implements name="java/nio/channels/ScatteringByteChannel"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;" since="24"/>
+		<method name="connect(Ljava/net/SocketAddress;)Ljava/nio/channels/DatagramChannel;"/>
+		<method name="disconnect()Ljava/nio/channels/DatagramChannel;"/>
+		<method name="getRemoteAddress()Ljava/net/SocketAddress;" since="24"/>
+		<method name="isConnected()Z"/>
+		<method name="open()Ljava/nio/channels/DatagramChannel;"/>
+		<method name="open(Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;" since="24"/>
+		<method name="receive(Ljava/nio/ByteBuffer;)Ljava/net/SocketAddress;"/>
+		<method name="send(Ljava/nio/ByteBuffer;Ljava/net/SocketAddress;)I"/>
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/DatagramChannel;" since="24"/>
+		<method name="socket()Ljava/net/DatagramSocket;"/>
+	</class>
+	<class name="java/nio/channels/FileChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractInterruptibleChannel"/>
+		<implements name="java/nio/channels/ByteChannel" removed="24"/>
+		<implements name="java/nio/channels/GatheringByteChannel"/>
+		<implements name="java/nio/channels/ScatteringByteChannel"/>
+		<implements name="java/nio/channels/SeekableByteChannel" since="24"/>
+		<method name="&lt;init>()V"/>
+		<method name="force(Z)V"/>
+		<method name="lock()Ljava/nio/channels/FileLock;"/>
+		<method name="lock(JJZ)Ljava/nio/channels/FileLock;"/>
+		<method name="map(Ljava/nio/channels/FileChannel$MapMode;JJ)Ljava/nio/MappedByteBuffer;"/>
+		<method name="open(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;" since="26"/>
+		<method name="open(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/FileChannel;" since="26"/>
+		<method name="position()J"/>
+		<method name="position(J)Ljava/nio/channels/FileChannel;"/>
+		<method name="read(Ljava/nio/ByteBuffer;J)I"/>
+		<method name="size()J"/>
+		<method name="transferFrom(Ljava/nio/channels/ReadableByteChannel;JJ)J"/>
+		<method name="transferTo(JJLjava/nio/channels/WritableByteChannel;)J"/>
+		<method name="truncate(J)Ljava/nio/channels/FileChannel;"/>
+		<method name="tryLock()Ljava/nio/channels/FileLock;"/>
+		<method name="tryLock(JJZ)Ljava/nio/channels/FileLock;"/>
+		<method name="write(Ljava/nio/ByteBuffer;J)I"/>
+	</class>
+	<class name="java/nio/channels/FileChannel$MapMode" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="PRIVATE"/>
+		<field name="READ_ONLY"/>
+		<field name="READ_WRITE"/>
+	</class>
+	<class name="java/nio/channels/FileLock" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<method name="&lt;init>(Ljava/nio/channels/AsynchronousFileChannel;JJZ)V" since="26"/>
+		<method name="&lt;init>(Ljava/nio/channels/FileChannel;JJZ)V"/>
+		<method name="acquiredBy()Ljava/nio/channels/Channel;" since="24"/>
+		<method name="channel()Ljava/nio/channels/FileChannel;"/>
+		<method name="isShared()Z"/>
+		<method name="isValid()Z"/>
+		<method name="overlaps(JJ)Z"/>
+		<method name="position()J"/>
+		<method name="release()V"/>
+		<method name="size()J"/>
+	</class>
+	<class name="java/nio/channels/FileLockInterruptionException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/GatheringByteChannel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/WritableByteChannel"/>
+		<method name="write([Ljava/nio/ByteBuffer;)J"/>
+		<method name="write([Ljava/nio/ByteBuffer;II)J"/>
+	</class>
+	<class name="java/nio/channels/IllegalBlockingModeException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/IllegalChannelGroupException" since="26">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/IllegalSelectorException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/InterruptedByTimeoutException" since="26">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/InterruptibleChannel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+	</class>
+	<class name="java/nio/channels/MembershipKey" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="block(Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;"/>
+		<method name="channel()Ljava/nio/channels/MulticastChannel;"/>
+		<method name="drop()V"/>
+		<method name="group()Ljava/net/InetAddress;"/>
+		<method name="isValid()Z"/>
+		<method name="networkInterface()Ljava/net/NetworkInterface;"/>
+		<method name="sourceAddress()Ljava/net/InetAddress;"/>
+		<method name="unblock(Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;"/>
+	</class>
+	<class name="java/nio/channels/MulticastChannel" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/NetworkChannel"/>
+		<method name="join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;)Ljava/nio/channels/MembershipKey;"/>
+		<method name="join(Ljava/net/InetAddress;Ljava/net/NetworkInterface;Ljava/net/InetAddress;)Ljava/nio/channels/MembershipKey;"/>
+	</class>
+	<class name="java/nio/channels/NetworkChannel" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/NetworkChannel;"/>
+		<method name="getLocalAddress()Ljava/net/SocketAddress;"/>
+		<method name="getOption(Ljava/net/SocketOption;)Ljava/lang/Object;"/>
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/NetworkChannel;"/>
+		<method name="supportedOptions()Ljava/util/Set;"/>
+	</class>
+	<class name="java/nio/channels/NoConnectionPendingException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/NonReadableChannelException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/NonWritableChannelException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/NotYetBoundException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/NotYetConnectedException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/OverlappingFileLockException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/Pipe" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="open()Ljava/nio/channels/Pipe;"/>
+		<method name="sink()Ljava/nio/channels/Pipe$SinkChannel;"/>
+		<method name="source()Ljava/nio/channels/Pipe$SourceChannel;"/>
+	</class>
+	<class name="java/nio/channels/Pipe$SinkChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
+		<implements name="java/nio/channels/GatheringByteChannel"/>
+		<implements name="java/nio/channels/WritableByteChannel"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
+	</class>
+	<class name="java/nio/channels/Pipe$SourceChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
+		<implements name="java/nio/channels/ReadableByteChannel"/>
+		<implements name="java/nio/channels/ScatteringByteChannel"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
+	</class>
+	<class name="java/nio/channels/ReadPendingException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/ReadableByteChannel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+		<method name="read(Ljava/nio/ByteBuffer;)I"/>
+	</class>
+	<class name="java/nio/channels/ScatteringByteChannel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/ReadableByteChannel"/>
+		<method name="read([Ljava/nio/ByteBuffer;)J"/>
+		<method name="read([Ljava/nio/ByteBuffer;II)J"/>
+	</class>
+	<class name="java/nio/channels/SeekableByteChannel" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/ByteChannel"/>
+		<method name="position()J"/>
+		<method name="position(J)Ljava/nio/channels/SeekableByteChannel;"/>
+		<method name="size()J"/>
+		<method name="truncate(J)Ljava/nio/channels/SeekableByteChannel;"/>
+	</class>
+	<class name="java/nio/channels/SelectableChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractInterruptibleChannel"/>
+		<method name="&lt;init>()V"/>
+		<method name="blockingLock()Ljava/lang/Object;"/>
+		<method name="configureBlocking(Z)Ljava/nio/channels/SelectableChannel;"/>
+		<method name="isBlocking()Z"/>
+		<method name="isRegistered()Z"/>
+		<method name="keyFor(Ljava/nio/channels/Selector;)Ljava/nio/channels/SelectionKey;"/>
+		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;"/>
+		<method name="register(Ljava/nio/channels/Selector;I)Ljava/nio/channels/SelectionKey;"/>
+		<method name="register(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;"/>
+		<method name="validOps()I"/>
+	</class>
+	<class name="java/nio/channels/SelectionKey" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="attach(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="attachment()Ljava/lang/Object;"/>
+		<method name="cancel()V"/>
+		<method name="channel()Ljava/nio/channels/SelectableChannel;"/>
+		<method name="interestOps()I"/>
+		<method name="interestOps(I)Ljava/nio/channels/SelectionKey;"/>
+		<method name="isAcceptable()Z"/>
+		<method name="isConnectable()Z"/>
+		<method name="isReadable()Z"/>
+		<method name="isValid()Z"/>
+		<method name="isWritable()Z"/>
+		<method name="readyOps()I"/>
+		<method name="selector()Ljava/nio/channels/Selector;"/>
+		<field name="OP_ACCEPT"/>
+		<field name="OP_CONNECT"/>
+		<field name="OP_READ"/>
+		<field name="OP_WRITE"/>
+	</class>
+	<class name="java/nio/channels/Selector" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="19"/>
+		<method name="&lt;init>()V"/>
+		<method name="close()V"/>
+		<method name="isOpen()Z"/>
+		<method name="keys()Ljava/util/Set;"/>
+		<method name="open()Ljava/nio/channels/Selector;"/>
+		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;"/>
+		<method name="select()I"/>
+		<method name="select(J)I"/>
+		<method name="selectNow()I"/>
+		<method name="selectedKeys()Ljava/util/Set;"/>
+		<method name="wakeup()Ljava/nio/channels/Selector;"/>
+	</class>
+	<class name="java/nio/channels/ServerSocketChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
+		<implements name="java/nio/channels/NetworkChannel" since="24"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
+		<method name="accept()Ljava/nio/channels/SocketChannel;"/>
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/ServerSocketChannel;" since="24"/>
+		<method name="bind(Ljava/net/SocketAddress;I)Ljava/nio/channels/ServerSocketChannel;" since="24"/>
+		<method name="open()Ljava/nio/channels/ServerSocketChannel;"/>
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/ServerSocketChannel;" since="24"/>
+		<method name="socket()Ljava/net/ServerSocket;"/>
+	</class>
+	<class name="java/nio/channels/ShutdownChannelGroupException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/SocketChannel" since="1">
+		<extends name="java/nio/channels/spi/AbstractSelectableChannel"/>
+		<implements name="java/nio/channels/ByteChannel"/>
+		<implements name="java/nio/channels/GatheringByteChannel"/>
+		<implements name="java/nio/channels/NetworkChannel" since="24"/>
+		<implements name="java/nio/channels/ScatteringByteChannel"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
+		<method name="bind(Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;" since="24"/>
+		<method name="connect(Ljava/net/SocketAddress;)Z"/>
+		<method name="finishConnect()Z"/>
+		<method name="getRemoteAddress()Ljava/net/SocketAddress;" since="24"/>
+		<method name="isConnected()Z"/>
+		<method name="isConnectionPending()Z"/>
+		<method name="open()Ljava/nio/channels/SocketChannel;"/>
+		<method name="open(Ljava/net/SocketAddress;)Ljava/nio/channels/SocketChannel;"/>
+		<method name="setOption(Ljava/net/SocketOption;Ljava/lang/Object;)Ljava/nio/channels/SocketChannel;" since="24"/>
+		<method name="shutdownInput()Ljava/nio/channels/SocketChannel;" since="24"/>
+		<method name="shutdownOutput()Ljava/nio/channels/SocketChannel;" since="24"/>
+		<method name="socket()Ljava/net/Socket;"/>
+	</class>
+	<class name="java/nio/channels/UnresolvedAddressException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/UnsupportedAddressTypeException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/WritableByteChannel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+		<method name="write(Ljava/nio/ByteBuffer;)I"/>
+	</class>
+	<class name="java/nio/channels/WritePendingException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/spi/AbstractInterruptibleChannel" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/channels/Channel"/>
+		<implements name="java/nio/channels/InterruptibleChannel"/>
+		<method name="&lt;init>()V"/>
+		<method name="begin()V"/>
+		<method name="end(Z)V"/>
+		<method name="implCloseChannel()V"/>
+	</class>
+	<class name="java/nio/channels/spi/AbstractSelectableChannel" since="1">
+		<extends name="java/nio/channels/SelectableChannel"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
+		<method name="implCloseSelectableChannel()V"/>
+		<method name="implConfigureBlocking(Z)V"/>
+	</class>
+	<class name="java/nio/channels/spi/AbstractSelectionKey" since="1">
+		<extends name="java/nio/channels/SelectionKey"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/channels/spi/AbstractSelector" since="1">
+		<extends name="java/nio/channels/Selector"/>
+		<method name="&lt;init>(Ljava/nio/channels/spi/SelectorProvider;)V"/>
+		<method name="begin()V"/>
+		<method name="cancelledKeys()Ljava/util/Set;"/>
+		<method name="deregister(Ljava/nio/channels/spi/AbstractSelectionKey;)V"/>
+		<method name="end()V"/>
+		<method name="implCloseSelector()V"/>
+		<method name="register(Ljava/nio/channels/spi/AbstractSelectableChannel;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;"/>
+	</class>
+	<class name="java/nio/channels/spi/AsynchronousChannelProvider" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="openAsynchronousChannelGroup(ILjava/util/concurrent/ThreadFactory;)Ljava/nio/channels/AsynchronousChannelGroup;"/>
+		<method name="openAsynchronousChannelGroup(Ljava/util/concurrent/ExecutorService;I)Ljava/nio/channels/AsynchronousChannelGroup;"/>
+		<method name="openAsynchronousServerSocketChannel(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousServerSocketChannel;"/>
+		<method name="openAsynchronousSocketChannel(Ljava/nio/channels/AsynchronousChannelGroup;)Ljava/nio/channels/AsynchronousSocketChannel;"/>
+		<method name="provider()Ljava/nio/channels/spi/AsynchronousChannelProvider;"/>
+	</class>
+	<class name="java/nio/channels/spi/SelectorProvider" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="inheritedChannel()Ljava/nio/channels/Channel;"/>
+		<method name="openDatagramChannel()Ljava/nio/channels/DatagramChannel;"/>
+		<method name="openDatagramChannel(Ljava/net/ProtocolFamily;)Ljava/nio/channels/DatagramChannel;" since="24"/>
+		<method name="openPipe()Ljava/nio/channels/Pipe;"/>
+		<method name="openSelector()Ljava/nio/channels/spi/AbstractSelector;"/>
+		<method name="openServerSocketChannel()Ljava/nio/channels/ServerSocketChannel;"/>
+		<method name="openSocketChannel()Ljava/nio/channels/SocketChannel;"/>
+		<method name="provider()Ljava/nio/channels/spi/SelectorProvider;"/>
+	</class>
+	<class name="java/nio/charset/CharacterCodingException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/charset/Charset" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;[Ljava/lang/String;)V"/>
+		<method name="aliases()Ljava/util/Set;"/>
+		<method name="availableCharsets()Ljava/util/SortedMap;"/>
+		<method name="canEncode()Z"/>
+		<method name="compareTo(Ljava/nio/charset/Charset;)I"/>
+		<method name="contains(Ljava/nio/charset/Charset;)Z"/>
+		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;"/>
+		<method name="defaultCharset()Ljava/nio/charset/Charset;"/>
+		<method name="displayName()Ljava/lang/String;"/>
+		<method name="displayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="encode(Ljava/lang/String;)Ljava/nio/ByteBuffer;"/>
+		<method name="encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;"/>
+		<method name="forName(Ljava/lang/String;)Ljava/nio/charset/Charset;"/>
+		<method name="isRegistered()Z"/>
+		<method name="isSupported(Ljava/lang/String;)Z"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="newDecoder()Ljava/nio/charset/CharsetDecoder;"/>
+		<method name="newEncoder()Ljava/nio/charset/CharsetEncoder;"/>
+	</class>
+	<class name="java/nio/charset/CharsetDecoder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/nio/charset/Charset;FF)V"/>
+		<method name="averageCharsPerByte()F"/>
+		<method name="charset()Ljava/nio/charset/Charset;"/>
+		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/CharBuffer;"/>
+		<method name="decode(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;Z)Ljava/nio/charset/CoderResult;"/>
+		<method name="decodeLoop(Ljava/nio/ByteBuffer;Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;"/>
+		<method name="detectedCharset()Ljava/nio/charset/Charset;"/>
+		<method name="flush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;"/>
+		<method name="implFlush(Ljava/nio/CharBuffer;)Ljava/nio/charset/CoderResult;"/>
+		<method name="implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V"/>
+		<method name="implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V"/>
+		<method name="implReplaceWith(Ljava/lang/String;)V"/>
+		<method name="implReset()V"/>
+		<method name="isAutoDetecting()Z"/>
+		<method name="isCharsetDetected()Z"/>
+		<method name="malformedInputAction()Ljava/nio/charset/CodingErrorAction;"/>
+		<method name="maxCharsPerByte()F"/>
+		<method name="onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;"/>
+		<method name="onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetDecoder;"/>
+		<method name="replaceWith(Ljava/lang/String;)Ljava/nio/charset/CharsetDecoder;"/>
+		<method name="replacement()Ljava/lang/String;"/>
+		<method name="reset()Ljava/nio/charset/CharsetDecoder;"/>
+		<method name="unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;"/>
+	</class>
+	<class name="java/nio/charset/CharsetEncoder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/nio/charset/Charset;FF)V"/>
+		<method name="&lt;init>(Ljava/nio/charset/Charset;FF[B)V"/>
+		<method name="averageBytesPerChar()F"/>
+		<method name="canEncode(C)Z"/>
+		<method name="canEncode(Ljava/lang/CharSequence;)Z"/>
+		<method name="charset()Ljava/nio/charset/Charset;"/>
+		<method name="encode(Ljava/nio/CharBuffer;)Ljava/nio/ByteBuffer;"/>
+		<method name="encode(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;Z)Ljava/nio/charset/CoderResult;"/>
+		<method name="encodeLoop(Ljava/nio/CharBuffer;Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;"/>
+		<method name="flush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;"/>
+		<method name="implFlush(Ljava/nio/ByteBuffer;)Ljava/nio/charset/CoderResult;"/>
+		<method name="implOnMalformedInput(Ljava/nio/charset/CodingErrorAction;)V"/>
+		<method name="implOnUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)V"/>
+		<method name="implReplaceWith([B)V"/>
+		<method name="implReset()V"/>
+		<method name="isLegalReplacement([B)Z"/>
+		<method name="malformedInputAction()Ljava/nio/charset/CodingErrorAction;"/>
+		<method name="maxBytesPerChar()F"/>
+		<method name="onMalformedInput(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;"/>
+		<method name="onUnmappableCharacter(Ljava/nio/charset/CodingErrorAction;)Ljava/nio/charset/CharsetEncoder;"/>
+		<method name="replaceWith([B)Ljava/nio/charset/CharsetEncoder;"/>
+		<method name="replacement()[B"/>
+		<method name="reset()Ljava/nio/charset/CharsetEncoder;"/>
+		<method name="unmappableCharacterAction()Ljava/nio/charset/CodingErrorAction;"/>
+	</class>
+	<class name="java/nio/charset/CoderMalfunctionError" since="1">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+	</class>
+	<class name="java/nio/charset/CoderResult" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="isError()Z"/>
+		<method name="isMalformed()Z"/>
+		<method name="isOverflow()Z"/>
+		<method name="isUnderflow()Z"/>
+		<method name="isUnmappable()Z"/>
+		<method name="length()I"/>
+		<method name="malformedForLength(I)Ljava/nio/charset/CoderResult;"/>
+		<method name="throwException()V"/>
+		<method name="unmappableForLength(I)Ljava/nio/charset/CoderResult;"/>
+		<field name="OVERFLOW"/>
+		<field name="UNDERFLOW"/>
+	</class>
+	<class name="java/nio/charset/CodingErrorAction" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="IGNORE"/>
+		<field name="REPLACE"/>
+		<field name="REPORT"/>
+	</class>
+	<class name="java/nio/charset/IllegalCharsetNameException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getCharsetName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/charset/MalformedInputException" since="1">
+		<extends name="java/nio/charset/CharacterCodingException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getInputLength()I"/>
+	</class>
+	<class name="java/nio/charset/StandardCharsets" since="19">
+		<extends name="java/lang/Object"/>
+		<field name="ISO_8859_1"/>
+		<field name="US_ASCII"/>
+		<field name="UTF_16"/>
+		<field name="UTF_16BE"/>
+		<field name="UTF_16LE"/>
+		<field name="UTF_8"/>
+	</class>
+	<class name="java/nio/charset/UnmappableCharacterException" since="1">
+		<extends name="java/nio/charset/CharacterCodingException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getInputLength()I"/>
+	</class>
+	<class name="java/nio/charset/UnsupportedCharsetException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getCharsetName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/charset/spi/CharsetProvider" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="charsetForName(Ljava/lang/String;)Ljava/nio/charset/Charset;"/>
+		<method name="charsets()Ljava/util/Iterator;"/>
+	</class>
+	<class name="java/nio/file/AccessDeniedException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/AccessMode" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/AccessMode;"/>
+		<method name="values()[Ljava/nio/file/AccessMode;"/>
+		<field name="EXECUTE"/>
+		<field name="READ"/>
+		<field name="WRITE"/>
+	</class>
+	<class name="java/nio/file/AtomicMoveNotSupportedException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/ClosedDirectoryStreamException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/file/ClosedFileSystemException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/file/ClosedWatchServiceException" since="26">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/file/CopyOption" since="26">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/nio/file/DirectoryIteratorException" since="26">
+		<extends name="java/util/ConcurrentModificationException"/>
+		<method name="&lt;init>(Ljava/io/IOException;)V"/>
+		<method name="getCause()Ljava/io/IOException;"/>
+	</class>
+	<class name="java/nio/file/DirectoryNotEmptyException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/DirectoryStream" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<implements name="java/lang/Iterable"/>
+	</class>
+	<class name="java/nio/file/DirectoryStream$Filter" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/nio/file/FileAlreadyExistsException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/FileStore" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getFileStoreAttributeView(Ljava/lang/Class;)Ljava/nio/file/attribute/FileStoreAttributeView;"/>
+		<method name="getTotalSpace()J"/>
+		<method name="getUnallocatedSpace()J"/>
+		<method name="getUsableSpace()J"/>
+		<method name="isReadOnly()Z"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="supportsFileAttributeView(Ljava/lang/Class;)Z"/>
+		<method name="supportsFileAttributeView(Ljava/lang/String;)Z"/>
+		<method name="type()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/file/FileSystem" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFileStores()Ljava/lang/Iterable;"/>
+		<method name="getPath(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;"/>
+		<method name="getPathMatcher(Ljava/lang/String;)Ljava/nio/file/PathMatcher;"/>
+		<method name="getRootDirectories()Ljava/lang/Iterable;"/>
+		<method name="getSeparator()Ljava/lang/String;"/>
+		<method name="getUserPrincipalLookupService()Ljava/nio/file/attribute/UserPrincipalLookupService;"/>
+		<method name="isOpen()Z"/>
+		<method name="isReadOnly()Z"/>
+		<method name="newWatchService()Ljava/nio/file/WatchService;"/>
+		<method name="provider()Ljava/nio/file/spi/FileSystemProvider;"/>
+		<method name="supportedFileAttributeViews()Ljava/util/Set;"/>
+	</class>
+	<class name="java/nio/file/FileSystemAlreadyExistsException" since="26">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/FileSystemException" since="26">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getFile()Ljava/lang/String;"/>
+		<method name="getOtherFile()Ljava/lang/String;"/>
+		<method name="getReason()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/file/FileSystemLoopException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/FileSystemNotFoundException" since="26">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/FileSystems" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getDefault()Ljava/nio/file/FileSystem;"/>
+		<method name="getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;"/>
+		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;"/>
+		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem;"/>
+		<method name="newFileSystem(Ljava/nio/file/Path;Ljava/lang/ClassLoader;)Ljava/nio/file/FileSystem;"/>
+	</class>
+	<class name="java/nio/file/FileVisitOption" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/FileVisitOption;"/>
+		<method name="values()[Ljava/nio/file/FileVisitOption;"/>
+		<field name="FOLLOW_LINKS"/>
+	</class>
+	<class name="java/nio/file/FileVisitResult" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/FileVisitResult;"/>
+		<method name="values()[Ljava/nio/file/FileVisitResult;"/>
+		<field name="CONTINUE"/>
+		<field name="SKIP_SIBLINGS"/>
+		<field name="SKIP_SUBTREE"/>
+		<field name="TERMINATE"/>
+	</class>
+	<class name="java/nio/file/FileVisitor" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="postVisitDirectory(Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult;"/>
+		<method name="preVisitDirectory(Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult;"/>
+		<method name="visitFile(Ljava/lang/Object;Ljava/nio/file/attribute/BasicFileAttributes;)Ljava/nio/file/FileVisitResult;"/>
+		<method name="visitFileFailed(Ljava/lang/Object;Ljava/io/IOException;)Ljava/nio/file/FileVisitResult;"/>
+	</class>
+	<class name="java/nio/file/Files" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="copy(Ljava/io/InputStream;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)J"/>
+		<method name="copy(Ljava/nio/file/Path;Ljava/io/OutputStream;)J"/>
+		<method name="copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;"/>
+		<method name="createDirectories(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="createDirectory(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="createFile(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
+		<method name="createSymbolicLink(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="createTempDirectory(Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="createTempDirectory(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="createTempFile(Ljava/lang/String;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="createTempFile(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;"/>
+		<method name="delete(Ljava/nio/file/Path;)V"/>
+		<method name="deleteIfExists(Ljava/nio/file/Path;)Z"/>
+		<method name="exists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
+		<method name="find(Ljava/nio/file/Path;ILjava/util/function/BiPredicate;[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;"/>
+		<method name="getAttribute(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/lang/Object;"/>
+		<method name="getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;"/>
+		<method name="getFileStore(Ljava/nio/file/Path;)Ljava/nio/file/FileStore;"/>
+		<method name="getLastModifiedTime(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileTime;"/>
+		<method name="getOwner(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/UserPrincipal;"/>
+		<method name="getPosixFilePermissions(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Ljava/util/Set;"/>
+		<method name="isDirectory(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
+		<method name="isExecutable(Ljava/nio/file/Path;)Z"/>
+		<method name="isHidden(Ljava/nio/file/Path;)Z"/>
+		<method name="isReadable(Ljava/nio/file/Path;)Z"/>
+		<method name="isRegularFile(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
+		<method name="isSameFile(Ljava/nio/file/Path;Ljava/nio/file/Path;)Z"/>
+		<method name="isSymbolicLink(Ljava/nio/file/Path;)Z"/>
+		<method name="isWritable(Ljava/nio/file/Path;)Z"/>
+		<method name="lines(Ljava/nio/file/Path;)Ljava/util/stream/Stream;"/>
+		<method name="lines(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/stream/Stream;"/>
+		<method name="list(Ljava/nio/file/Path;)Ljava/util/stream/Stream;"/>
+		<method name="move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)Ljava/nio/file/Path;"/>
+		<method name="newBufferedReader(Ljava/nio/file/Path;)Ljava/io/BufferedReader;"/>
+		<method name="newBufferedReader(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/io/BufferedReader;"/>
+		<method name="newBufferedWriter(Ljava/nio/file/Path;Ljava/nio/charset/Charset;[Ljava/nio/file/OpenOption;)Ljava/io/BufferedWriter;"/>
+		<method name="newBufferedWriter(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/BufferedWriter;"/>
+		<method name="newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;"/>
+		<method name="newByteChannel(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/nio/channels/SeekableByteChannel;"/>
+		<method name="newDirectoryStream(Ljava/nio/file/Path;)Ljava/nio/file/DirectoryStream;"/>
+		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/lang/String;)Ljava/nio/file/DirectoryStream;"/>
+		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;"/>
+		<method name="newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;"/>
+		<method name="newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;"/>
+		<method name="notExists(Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z"/>
+		<method name="probeContentType(Ljava/nio/file/Path;)Ljava/lang/String;"/>
+		<method name="readAllBytes(Ljava/nio/file/Path;)[B"/>
+		<method name="readAllLines(Ljava/nio/file/Path;)Ljava/util/List;"/>
+		<method name="readAllLines(Ljava/nio/file/Path;Ljava/nio/charset/Charset;)Ljava/util/List;"/>
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;"/>
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/util/Map;"/>
+		<method name="readSymbolicLink(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
+		<method name="setAttribute(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/Object;[Ljava/nio/file/LinkOption;)Ljava/nio/file/Path;"/>
+		<method name="setLastModifiedTime(Ljava/nio/file/Path;Ljava/nio/file/attribute/FileTime;)Ljava/nio/file/Path;"/>
+		<method name="setOwner(Ljava/nio/file/Path;Ljava/nio/file/attribute/UserPrincipal;)Ljava/nio/file/Path;"/>
+		<method name="setPosixFilePermissions(Ljava/nio/file/Path;Ljava/util/Set;)Ljava/nio/file/Path;"/>
+		<method name="size(Ljava/nio/file/Path;)J"/>
+		<method name="walk(Ljava/nio/file/Path;I[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;"/>
+		<method name="walk(Ljava/nio/file/Path;[Ljava/nio/file/FileVisitOption;)Ljava/util/stream/Stream;"/>
+		<method name="walkFileTree(Ljava/nio/file/Path;Ljava/nio/file/FileVisitor;)Ljava/nio/file/Path;"/>
+		<method name="walkFileTree(Ljava/nio/file/Path;Ljava/util/Set;ILjava/nio/file/FileVisitor;)Ljava/nio/file/Path;"/>
+		<method name="write(Ljava/nio/file/Path;Ljava/lang/Iterable;Ljava/nio/charset/Charset;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;"/>
+		<method name="write(Ljava/nio/file/Path;Ljava/lang/Iterable;[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;"/>
+		<method name="write(Ljava/nio/file/Path;[B[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;"/>
+	</class>
+	<class name="java/nio/file/InvalidPathException" since="26">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="getIndex()I"/>
+		<method name="getInput()Ljava/lang/String;"/>
+		<method name="getReason()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/file/LinkOption" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/nio/file/CopyOption"/>
+		<implements name="java/nio/file/OpenOption"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/LinkOption;"/>
+		<method name="values()[Ljava/nio/file/LinkOption;"/>
+		<field name="NOFOLLOW_LINKS"/>
+	</class>
+	<class name="java/nio/file/LinkPermission" since="26">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/NoSuchFileException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/NotDirectoryException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/NotLinkException" since="26">
+		<extends name="java/nio/file/FileSystemException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/OpenOption" since="26">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/nio/file/Path" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/lang/Iterable"/>
+		<implements name="java/nio/file/Watchable"/>
+		<method name="compareTo(Ljava/nio/file/Path;)I"/>
+		<method name="endsWith(Ljava/lang/String;)Z"/>
+		<method name="endsWith(Ljava/nio/file/Path;)Z"/>
+		<method name="getFileName()Ljava/nio/file/Path;"/>
+		<method name="getFileSystem()Ljava/nio/file/FileSystem;"/>
+		<method name="getName(I)Ljava/nio/file/Path;"/>
+		<method name="getNameCount()I"/>
+		<method name="getParent()Ljava/nio/file/Path;"/>
+		<method name="getRoot()Ljava/nio/file/Path;"/>
+		<method name="isAbsolute()Z"/>
+		<method name="normalize()Ljava/nio/file/Path;"/>
+		<method name="relativize(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
+		<method name="resolve(Ljava/lang/String;)Ljava/nio/file/Path;"/>
+		<method name="resolve(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
+		<method name="resolveSibling(Ljava/lang/String;)Ljava/nio/file/Path;"/>
+		<method name="resolveSibling(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
+		<method name="startsWith(Ljava/lang/String;)Z"/>
+		<method name="startsWith(Ljava/nio/file/Path;)Z"/>
+		<method name="subpath(II)Ljava/nio/file/Path;"/>
+		<method name="toAbsolutePath()Ljava/nio/file/Path;"/>
+		<method name="toFile()Ljava/io/File;"/>
+		<method name="toRealPath([Ljava/nio/file/LinkOption;)Ljava/nio/file/Path;"/>
+		<method name="toUri()Ljava/net/URI;"/>
+	</class>
+	<class name="java/nio/file/PathMatcher" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="matches(Ljava/nio/file/Path;)Z"/>
+	</class>
+	<class name="java/nio/file/Paths" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="get(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path;"/>
+		<method name="get(Ljava/net/URI;)Ljava/nio/file/Path;"/>
+	</class>
+	<class name="java/nio/file/ProviderMismatchException" since="26">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/ProviderNotFoundException" since="26">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/nio/file/ReadOnlyFileSystemException" since="26">
+		<extends name="java/lang/UnsupportedOperationException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/file/SecureDirectoryStream" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/DirectoryStream"/>
+		<method name="deleteDirectory(Ljava/lang/Object;)V"/>
+		<method name="deleteFile(Ljava/lang/Object;)V"/>
+		<method name="getFileAttributeView(Ljava/lang/Class;)Ljava/nio/file/attribute/FileAttributeView;"/>
+		<method name="getFileAttributeView(Ljava/lang/Object;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;"/>
+		<method name="move(Ljava/lang/Object;Ljava/nio/file/SecureDirectoryStream;Ljava/lang/Object;)V"/>
+		<method name="newByteChannel(Ljava/lang/Object;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;"/>
+		<method name="newDirectoryStream(Ljava/lang/Object;[Ljava/nio/file/LinkOption;)Ljava/nio/file/SecureDirectoryStream;"/>
+	</class>
+	<class name="java/nio/file/SimpleFileVisitor" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/FileVisitor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/nio/file/StandardCopyOption" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/nio/file/CopyOption"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/StandardCopyOption;"/>
+		<method name="values()[Ljava/nio/file/StandardCopyOption;"/>
+		<field name="ATOMIC_MOVE"/>
+		<field name="COPY_ATTRIBUTES"/>
+		<field name="REPLACE_EXISTING"/>
+	</class>
+	<class name="java/nio/file/StandardOpenOption" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/nio/file/OpenOption"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/StandardOpenOption;"/>
+		<method name="values()[Ljava/nio/file/StandardOpenOption;"/>
+		<field name="APPEND"/>
+		<field name="CREATE"/>
+		<field name="CREATE_NEW"/>
+		<field name="DELETE_ON_CLOSE"/>
+		<field name="DSYNC"/>
+		<field name="READ"/>
+		<field name="SPARSE"/>
+		<field name="SYNC"/>
+		<field name="TRUNCATE_EXISTING"/>
+		<field name="WRITE"/>
+	</class>
+	<class name="java/nio/file/StandardWatchEventKinds" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="ENTRY_CREATE"/>
+		<field name="ENTRY_DELETE"/>
+		<field name="ENTRY_MODIFY"/>
+		<field name="OVERFLOW"/>
+	</class>
+	<class name="java/nio/file/WatchEvent" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="context()Ljava/lang/Object;"/>
+		<method name="count()I"/>
+		<method name="kind()Ljava/nio/file/WatchEvent$Kind;"/>
+	</class>
+	<class name="java/nio/file/WatchEvent$Kind" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="type()Ljava/lang/Class;"/>
+	</class>
+	<class name="java/nio/file/WatchEvent$Modifier" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="name()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/file/WatchKey" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="isValid()Z"/>
+		<method name="pollEvents()Ljava/util/List;"/>
+		<method name="reset()Z"/>
+		<method name="watchable()Ljava/nio/file/Watchable;"/>
+	</class>
+	<class name="java/nio/file/WatchService" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<method name="poll()Ljava/nio/file/WatchKey;"/>
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/WatchKey;"/>
+		<method name="take()Ljava/nio/file/WatchKey;"/>
+	</class>
+	<class name="java/nio/file/Watchable" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey;"/>
+		<method name="register(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;[Ljava/nio/file/WatchEvent$Modifier;)Ljava/nio/file/WatchKey;"/>
+	</class>
+	<class name="java/nio/file/attribute/AclEntry" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="flags()Ljava/util/Set;"/>
+		<method name="newBuilder()Ljava/nio/file/attribute/AclEntry$Builder;"/>
+		<method name="newBuilder(Ljava/nio/file/attribute/AclEntry;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
+		<method name="permissions()Ljava/util/Set;"/>
+		<method name="principal()Ljava/nio/file/attribute/UserPrincipal;"/>
+		<method name="type()Ljava/nio/file/attribute/AclEntryType;"/>
+	</class>
+	<class name="java/nio/file/attribute/AclEntry$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="build()Ljava/nio/file/attribute/AclEntry;"/>
+		<method name="setFlags(Ljava/util/Set;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
+		<method name="setFlags([Ljava/nio/file/attribute/AclEntryFlag;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
+		<method name="setPermissions(Ljava/util/Set;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
+		<method name="setPermissions([Ljava/nio/file/attribute/AclEntryPermission;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
+		<method name="setPrincipal(Ljava/nio/file/attribute/UserPrincipal;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
+		<method name="setType(Ljava/nio/file/attribute/AclEntryType;)Ljava/nio/file/attribute/AclEntry$Builder;"/>
+	</class>
+	<class name="java/nio/file/attribute/AclEntryFlag" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryFlag;"/>
+		<method name="values()[Ljava/nio/file/attribute/AclEntryFlag;"/>
+		<field name="DIRECTORY_INHERIT"/>
+		<field name="FILE_INHERIT"/>
+		<field name="INHERIT_ONLY"/>
+		<field name="NO_PROPAGATE_INHERIT"/>
+	</class>
+	<class name="java/nio/file/attribute/AclEntryPermission" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryPermission;"/>
+		<method name="values()[Ljava/nio/file/attribute/AclEntryPermission;"/>
+		<field name="ADD_FILE"/>
+		<field name="ADD_SUBDIRECTORY"/>
+		<field name="APPEND_DATA"/>
+		<field name="DELETE"/>
+		<field name="DELETE_CHILD"/>
+		<field name="EXECUTE"/>
+		<field name="LIST_DIRECTORY"/>
+		<field name="READ_ACL"/>
+		<field name="READ_ATTRIBUTES"/>
+		<field name="READ_DATA"/>
+		<field name="READ_NAMED_ATTRS"/>
+		<field name="SYNCHRONIZE"/>
+		<field name="WRITE_ACL"/>
+		<field name="WRITE_ATTRIBUTES"/>
+		<field name="WRITE_DATA"/>
+		<field name="WRITE_NAMED_ATTRS"/>
+		<field name="WRITE_OWNER"/>
+	</class>
+	<class name="java/nio/file/attribute/AclEntryType" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/AclEntryType;"/>
+		<method name="values()[Ljava/nio/file/attribute/AclEntryType;"/>
+		<field name="ALARM"/>
+		<field name="ALLOW"/>
+		<field name="AUDIT"/>
+		<field name="DENY"/>
+	</class>
+	<class name="java/nio/file/attribute/AclFileAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/FileOwnerAttributeView"/>
+		<method name="getAcl()Ljava/util/List;"/>
+		<method name="setAcl(Ljava/util/List;)V"/>
+	</class>
+	<class name="java/nio/file/attribute/AttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="name()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/file/attribute/BasicFileAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/FileAttributeView"/>
+		<method name="readAttributes()Ljava/nio/file/attribute/BasicFileAttributes;"/>
+		<method name="setTimes(Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;Ljava/nio/file/attribute/FileTime;)V"/>
+	</class>
+	<class name="java/nio/file/attribute/BasicFileAttributes" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="creationTime()Ljava/nio/file/attribute/FileTime;"/>
+		<method name="fileKey()Ljava/lang/Object;"/>
+		<method name="isDirectory()Z"/>
+		<method name="isOther()Z"/>
+		<method name="isRegularFile()Z"/>
+		<method name="isSymbolicLink()Z"/>
+		<method name="lastAccessTime()Ljava/nio/file/attribute/FileTime;"/>
+		<method name="lastModifiedTime()Ljava/nio/file/attribute/FileTime;"/>
+		<method name="size()J"/>
+	</class>
+	<class name="java/nio/file/attribute/DosFileAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/BasicFileAttributeView"/>
+		<method name="readAttributes()Ljava/nio/file/attribute/DosFileAttributes;"/>
+		<method name="setArchive(Z)V"/>
+		<method name="setHidden(Z)V"/>
+		<method name="setReadOnly(Z)V"/>
+		<method name="setSystem(Z)V"/>
+	</class>
+	<class name="java/nio/file/attribute/DosFileAttributes" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/BasicFileAttributes"/>
+		<method name="isArchive()Z"/>
+		<method name="isHidden()Z"/>
+		<method name="isReadOnly()Z"/>
+		<method name="isSystem()Z"/>
+	</class>
+	<class name="java/nio/file/attribute/FileAttribute" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="value()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/nio/file/attribute/FileAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/AttributeView"/>
+	</class>
+	<class name="java/nio/file/attribute/FileOwnerAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/FileAttributeView"/>
+		<method name="getOwner()Ljava/nio/file/attribute/UserPrincipal;"/>
+		<method name="setOwner(Ljava/nio/file/attribute/UserPrincipal;)V"/>
+	</class>
+	<class name="java/nio/file/attribute/FileStoreAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/AttributeView"/>
+	</class>
+	<class name="java/nio/file/attribute/FileTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="compareTo(Ljava/nio/file/attribute/FileTime;)I"/>
+		<method name="from(JLjava/util/concurrent/TimeUnit;)Ljava/nio/file/attribute/FileTime;"/>
+		<method name="from(Ljava/time/Instant;)Ljava/nio/file/attribute/FileTime;"/>
+		<method name="fromMillis(J)Ljava/nio/file/attribute/FileTime;"/>
+		<method name="to(Ljava/util/concurrent/TimeUnit;)J"/>
+		<method name="toInstant()Ljava/time/Instant;"/>
+		<method name="toMillis()J"/>
+	</class>
+	<class name="java/nio/file/attribute/GroupPrincipal" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/UserPrincipal"/>
+	</class>
+	<class name="java/nio/file/attribute/PosixFileAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/BasicFileAttributeView"/>
+		<implements name="java/nio/file/attribute/FileOwnerAttributeView"/>
+		<method name="readAttributes()Ljava/nio/file/attribute/PosixFileAttributes;"/>
+		<method name="setGroup(Ljava/nio/file/attribute/GroupPrincipal;)V"/>
+		<method name="setPermissions(Ljava/util/Set;)V"/>
+	</class>
+	<class name="java/nio/file/attribute/PosixFileAttributes" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/BasicFileAttributes"/>
+		<method name="group()Ljava/nio/file/attribute/GroupPrincipal;"/>
+		<method name="owner()Ljava/nio/file/attribute/UserPrincipal;"/>
+		<method name="permissions()Ljava/util/Set;"/>
+	</class>
+	<class name="java/nio/file/attribute/PosixFilePermission" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/nio/file/attribute/PosixFilePermission;"/>
+		<method name="values()[Ljava/nio/file/attribute/PosixFilePermission;"/>
+		<field name="GROUP_EXECUTE"/>
+		<field name="GROUP_READ"/>
+		<field name="GROUP_WRITE"/>
+		<field name="OTHERS_EXECUTE"/>
+		<field name="OTHERS_READ"/>
+		<field name="OTHERS_WRITE"/>
+		<field name="OWNER_EXECUTE"/>
+		<field name="OWNER_READ"/>
+		<field name="OWNER_WRITE"/>
+	</class>
+	<class name="java/nio/file/attribute/PosixFilePermissions" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="asFileAttribute(Ljava/util/Set;)Ljava/nio/file/attribute/FileAttribute;"/>
+		<method name="fromString(Ljava/lang/String;)Ljava/util/Set;"/>
+		<method name="toString(Ljava/util/Set;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/file/attribute/UserDefinedFileAttributeView" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/nio/file/attribute/FileAttributeView"/>
+		<method name="delete(Ljava/lang/String;)V"/>
+		<method name="list()Ljava/util/List;"/>
+		<method name="read(Ljava/lang/String;Ljava/nio/ByteBuffer;)I"/>
+		<method name="size(Ljava/lang/String;)I"/>
+		<method name="write(Ljava/lang/String;Ljava/nio/ByteBuffer;)I"/>
+	</class>
+	<class name="java/nio/file/attribute/UserPrincipal" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/Principal"/>
+	</class>
+	<class name="java/nio/file/attribute/UserPrincipalLookupService" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="lookupPrincipalByGroupName(Ljava/lang/String;)Ljava/nio/file/attribute/GroupPrincipal;"/>
+		<method name="lookupPrincipalByName(Ljava/lang/String;)Ljava/nio/file/attribute/UserPrincipal;"/>
+	</class>
+	<class name="java/nio/file/attribute/UserPrincipalNotFoundException" since="26">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/nio/file/spi/FileSystemProvider" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="checkAccess(Ljava/nio/file/Path;[Ljava/nio/file/AccessMode;)V"/>
+		<method name="copy(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V"/>
+		<method name="createDirectory(Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)V"/>
+		<method name="createLink(Ljava/nio/file/Path;Ljava/nio/file/Path;)V"/>
+		<method name="createSymbolicLink(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/attribute/FileAttribute;)V"/>
+		<method name="delete(Ljava/nio/file/Path;)V"/>
+		<method name="deleteIfExists(Ljava/nio/file/Path;)Z"/>
+		<method name="getFileAttributeView(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/FileAttributeView;"/>
+		<method name="getFileStore(Ljava/nio/file/Path;)Ljava/nio/file/FileStore;"/>
+		<method name="getFileSystem(Ljava/net/URI;)Ljava/nio/file/FileSystem;"/>
+		<method name="getPath(Ljava/net/URI;)Ljava/nio/file/Path;"/>
+		<method name="getScheme()Ljava/lang/String;"/>
+		<method name="installedProviders()Ljava/util/List;"/>
+		<method name="isHidden(Ljava/nio/file/Path;)Z"/>
+		<method name="isSameFile(Ljava/nio/file/Path;Ljava/nio/file/Path;)Z"/>
+		<method name="move(Ljava/nio/file/Path;Ljava/nio/file/Path;[Ljava/nio/file/CopyOption;)V"/>
+		<method name="newAsynchronousFileChannel(Ljava/nio/file/Path;Ljava/util/Set;Ljava/util/concurrent/ExecutorService;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/AsynchronousFileChannel;"/>
+		<method name="newByteChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/SeekableByteChannel;"/>
+		<method name="newDirectoryStream(Ljava/nio/file/Path;Ljava/nio/file/DirectoryStream$Filter;)Ljava/nio/file/DirectoryStream;"/>
+		<method name="newFileChannel(Ljava/nio/file/Path;Ljava/util/Set;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/channels/FileChannel;"/>
+		<method name="newFileSystem(Ljava/net/URI;Ljava/util/Map;)Ljava/nio/file/FileSystem;"/>
+		<method name="newFileSystem(Ljava/nio/file/Path;Ljava/util/Map;)Ljava/nio/file/FileSystem;"/>
+		<method name="newInputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/InputStream;"/>
+		<method name="newOutputStream(Ljava/nio/file/Path;[Ljava/nio/file/OpenOption;)Ljava/io/OutputStream;"/>
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes;"/>
+		<method name="readAttributes(Ljava/nio/file/Path;Ljava/lang/String;[Ljava/nio/file/LinkOption;)Ljava/util/Map;"/>
+		<method name="readSymbolicLink(Ljava/nio/file/Path;)Ljava/nio/file/Path;"/>
+		<method name="setAttribute(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/Object;[Ljava/nio/file/LinkOption;)V"/>
+	</class>
+	<class name="java/nio/file/spi/FileTypeDetector" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="probeContentType(Ljava/nio/file/Path;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/AccessControlContext" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/AccessControlContext;Ljava/security/DomainCombiner;)V"/>
+		<method name="&lt;init>([Ljava/security/ProtectionDomain;)V"/>
+		<method name="checkPermission(Ljava/security/Permission;)V"/>
+		<method name="getDomainCombiner()Ljava/security/DomainCombiner;"/>
+	</class>
+	<class name="java/security/AccessControlException" since="1">
+		<extends name="java/lang/SecurityException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/security/Permission;)V"/>
+		<method name="getPermission()Ljava/security/Permission;"/>
+	</class>
+	<class name="java/security/AccessController" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="checkPermission(Ljava/security/Permission;)V"/>
+		<method name="doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object;"/>
+		<method name="doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
+		<method name="doPrivileged(Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;"/>
+		<method name="doPrivileged(Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
+		<method name="doPrivilegedWithCombiner(Ljava/security/PrivilegedAction;)Ljava/lang/Object;" since="9"/>
+		<method name="doPrivilegedWithCombiner(Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;" since="9"/>
+		<method name="getContext()Ljava/security/AccessControlContext;"/>
+	</class>
+	<class name="java/security/AlgorithmConstraints" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/AlgorithmParameters;)Z"/>
+		<method name="permits(Ljava/util/Set;Ljava/lang/String;Ljava/security/Key;Ljava/security/AlgorithmParameters;)Z"/>
+		<method name="permits(Ljava/util/Set;Ljava/security/Key;)Z"/>
+	</class>
+	<class name="java/security/AlgorithmParameterGenerator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/AlgorithmParameterGeneratorSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="generateParameters()Ljava/security/AlgorithmParameters;"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameterGenerator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/AlgorithmParameterGenerator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameterGenerator;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(I)V"/>
+		<method name="init(ILjava/security/SecureRandom;)V"/>
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="java/security/AlgorithmParameterGeneratorSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGenerateParameters()Ljava/security/AlgorithmParameters;"/>
+		<method name="engineInit(ILjava/security/SecureRandom;)V"/>
+		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="java/security/AlgorithmParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/AlgorithmParametersSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getEncoded()[B"/>
+		<method name="getEncoded(Ljava/lang/String;)[B"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/AlgorithmParameters;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/AlgorithmParameters;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/AlgorithmParameters;"/>
+		<method name="getParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="init([B)V"/>
+		<method name="init([BLjava/lang/String;)V"/>
+	</class>
+	<class name="java/security/AlgorithmParametersSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGetEncoded()[B"/>
+		<method name="engineGetEncoded(Ljava/lang/String;)[B"/>
+		<method name="engineGetParameterSpec(Ljava/lang/Class;)Ljava/security/spec/AlgorithmParameterSpec;"/>
+		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="engineInit([B)V"/>
+		<method name="engineInit([BLjava/lang/String;)V"/>
+		<method name="engineToString()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/AllPermission" since="1">
+		<extends name="java/security/Permission"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/AuthProvider" since="1">
+		<extends name="java/security/Provider"/>
+		<method name="&lt;init>(Ljava/lang/String;DLjava/lang/String;)V"/>
+		<method name="login(Ljavax/security/auth/Subject;Ljavax/security/auth/callback/CallbackHandler;)V"/>
+		<method name="logout()V"/>
+		<method name="setCallbackHandler(Ljavax/security/auth/callback/CallbackHandler;)V"/>
+	</class>
+	<class name="java/security/BasicPermission" since="1">
+		<extends name="java/security/Permission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/Certificate" since="1" deprecated="3">
+		<extends name="java/lang/Object"/>
+		<method name="decode(Ljava/io/InputStream;)V" deprecated="29"/>
+		<method name="encode(Ljava/io/OutputStream;)V" deprecated="29"/>
+		<method name="getFormat()Ljava/lang/String;" deprecated="29"/>
+		<method name="getGuarantor()Ljava/security/Principal;" deprecated="29"/>
+		<method name="getPrincipal()Ljava/security/Principal;" deprecated="29"/>
+		<method name="getPublicKey()Ljava/security/PublicKey;" deprecated="29"/>
+		<method name="toString(Z)Ljava/lang/String;" deprecated="29"/>
+	</class>
+	<class name="java/security/CodeSigner" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/security/cert/CertPath;Ljava/security/Timestamp;)V"/>
+		<method name="getSignerCertPath()Ljava/security/cert/CertPath;"/>
+		<method name="getTimestamp()Ljava/security/Timestamp;"/>
+	</class>
+	<class name="java/security/CodeSource" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/net/URL;[Ljava/security/CodeSigner;)V"/>
+		<method name="&lt;init>(Ljava/net/URL;[Ljava/security/cert/Certificate;)V"/>
+		<method name="getCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getCodeSigners()[Ljava/security/CodeSigner;"/>
+		<method name="getLocation()Ljava/net/URL;"/>
+		<method name="implies(Ljava/security/CodeSource;)Z"/>
+	</class>
+	<class name="java/security/CryptoPrimitive" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/CryptoPrimitive;"/>
+		<method name="values()[Ljava/security/CryptoPrimitive;"/>
+		<field name="BLOCK_CIPHER"/>
+		<field name="KEY_AGREEMENT"/>
+		<field name="KEY_ENCAPSULATION"/>
+		<field name="KEY_WRAP"/>
+		<field name="MAC"/>
+		<field name="MESSAGE_DIGEST"/>
+		<field name="PUBLIC_KEY_ENCRYPTION"/>
+		<field name="SECURE_RANDOM"/>
+		<field name="SIGNATURE"/>
+		<field name="STREAM_CIPHER"/>
+	</class>
+	<class name="java/security/DigestException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/DigestInputStream" since="1">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/security/MessageDigest;)V"/>
+		<method name="getMessageDigest()Ljava/security/MessageDigest;"/>
+		<method name="on(Z)V"/>
+		<method name="setMessageDigest(Ljava/security/MessageDigest;)V"/>
+		<field name="digest"/>
+	</class>
+	<class name="java/security/DigestOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/security/MessageDigest;)V"/>
+		<method name="getMessageDigest()Ljava/security/MessageDigest;"/>
+		<method name="on(Z)V"/>
+		<method name="setMessageDigest(Ljava/security/MessageDigest;)V"/>
+		<field name="digest"/>
+	</class>
+	<class name="java/security/DomainCombiner" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="combine([Ljava/security/ProtectionDomain;[Ljava/security/ProtectionDomain;)[Ljava/security/ProtectionDomain;"/>
+	</class>
+	<class name="java/security/DomainLoadStoreParameter" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$LoadStoreParameter"/>
+		<method name="&lt;init>(Ljava/net/URI;Ljava/util/Map;)V"/>
+		<method name="getConfiguration()Ljava/net/URI;"/>
+		<method name="getProtectionParams()Ljava/util/Map;"/>
+	</class>
+	<class name="java/security/GeneralSecurityException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/Guard" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="checkGuard(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/security/GuardedObject" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/security/Guard;)V"/>
+		<method name="getObject()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/Identity" since="1" deprecated="3">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/security/Principal"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29"/>
+		<method name="addCertificate(Ljava/security/Certificate;)V" deprecated="29"/>
+		<method name="certificates()[Ljava/security/Certificate;" deprecated="29"/>
+		<method name="getInfo()Ljava/lang/String;" deprecated="29"/>
+		<method name="getPublicKey()Ljava/security/PublicKey;" deprecated="29"/>
+		<method name="getScope()Ljava/security/IdentityScope;" deprecated="29"/>
+		<method name="identityEquals(Ljava/security/Identity;)Z" deprecated="29"/>
+		<method name="removeCertificate(Ljava/security/Certificate;)V" deprecated="29"/>
+		<method name="setInfo(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setPublicKey(Ljava/security/PublicKey;)V" deprecated="29"/>
+		<method name="toString(Z)Ljava/lang/String;" deprecated="29"/>
+	</class>
+	<class name="java/security/IdentityScope" since="1" deprecated="3">
+		<extends name="java/security/Identity"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29"/>
+		<method name="addIdentity(Ljava/security/Identity;)V" deprecated="29"/>
+		<method name="getIdentity(Ljava/lang/String;)Ljava/security/Identity;" deprecated="29"/>
+		<method name="getIdentity(Ljava/security/Principal;)Ljava/security/Identity;" deprecated="29"/>
+		<method name="getIdentity(Ljava/security/PublicKey;)Ljava/security/Identity;" deprecated="29"/>
+		<method name="getSystemScope()Ljava/security/IdentityScope;" deprecated="29"/>
+		<method name="identities()Ljava/util/Enumeration;" deprecated="29"/>
+		<method name="removeIdentity(Ljava/security/Identity;)V" deprecated="29"/>
+		<method name="setSystemScope(Ljava/security/IdentityScope;)V" deprecated="29"/>
+		<method name="size()I" deprecated="29"/>
+	</class>
+	<class name="java/security/InvalidAlgorithmParameterException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/InvalidKeyException" since="1">
+		<extends name="java/security/KeyException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/InvalidParameterException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/Key" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getEncoded()[B"/>
+		<method name="getFormat()Ljava/lang/String;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/KeyException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/KeyFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/KeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="generatePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;"/>
+		<method name="generatePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyFactory;"/>
+		<method name="getKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="translateKey(Ljava/security/Key;)Ljava/security/Key;"/>
+	</class>
+	<class name="java/security/KeyFactorySpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGeneratePrivate(Ljava/security/spec/KeySpec;)Ljava/security/PrivateKey;"/>
+		<method name="engineGeneratePublic(Ljava/security/spec/KeySpec;)Ljava/security/PublicKey;"/>
+		<method name="engineGetKeySpec(Ljava/security/Key;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
+		<method name="engineTranslateKey(Ljava/security/Key;)Ljava/security/Key;"/>
+	</class>
+	<class name="java/security/KeyManagementException" since="1">
+		<extends name="java/security/KeyException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/KeyPair" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/security/PublicKey;Ljava/security/PrivateKey;)V"/>
+		<method name="getPrivate()Ljava/security/PrivateKey;"/>
+		<method name="getPublic()Ljava/security/PublicKey;"/>
+	</class>
+	<class name="java/security/KeyPairGenerator" since="1">
+		<extends name="java/security/KeyPairGeneratorSpi"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="genKeyPair()Ljava/security/KeyPair;"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyPairGenerator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyPairGenerator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyPairGenerator;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="initialize(I)V"/>
+		<method name="initialize(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+	</class>
+	<class name="java/security/KeyPairGeneratorSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="generateKeyPair()Ljava/security/KeyPair;"/>
+		<method name="initialize(ILjava/security/SecureRandom;)V"/>
+		<method name="initialize(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="java/security/KeyRep" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/security/KeyRep$Type;Ljava/lang/String;Ljava/lang/String;[B)V"/>
+		<method name="readResolve()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/KeyRep$Type" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/KeyRep$Type;"/>
+		<method name="values()[Ljava/security/KeyRep$Type;"/>
+		<field name="PRIVATE"/>
+		<field name="PUBLIC"/>
+		<field name="SECRET"/>
+	</class>
+	<class name="java/security/KeyStore" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/KeyStoreSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="aliases()Ljava/util/Enumeration;"/>
+		<method name="containsAlias(Ljava/lang/String;)Z"/>
+		<method name="deleteEntry(Ljava/lang/String;)V"/>
+		<method name="entryInstanceOf(Ljava/lang/String;Ljava/lang/Class;)Z"/>
+		<method name="getCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;"/>
+		<method name="getCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;"/>
+		<method name="getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;"/>
+		<method name="getCreationDate(Ljava/lang/String;)Ljava/util/Date;"/>
+		<method name="getDefaultType()Ljava/lang/String;"/>
+		<method name="getEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/KeyStore;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/KeyStore;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/KeyStore;"/>
+		<method name="getKey(Ljava/lang/String;[C)Ljava/security/Key;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="isCertificateEntry(Ljava/lang/String;)Z"/>
+		<method name="isKeyEntry(Ljava/lang/String;)Z"/>
+		<method name="load(Ljava/io/InputStream;[C)V"/>
+		<method name="load(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
+		<method name="setCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V"/>
+		<method name="setEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V"/>
+		<method name="setKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V"/>
+		<method name="setKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V"/>
+		<method name="size()I"/>
+		<method name="store(Ljava/io/OutputStream;[C)V"/>
+		<method name="store(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
+	</class>
+	<class name="java/security/KeyStore$Builder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getKeyStore()Ljava/security/KeyStore;"/>
+		<method name="getProtectionParameter(Ljava/lang/String;)Ljava/security/KeyStore$ProtectionParameter;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/security/Provider;Ljava/io/File;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/security/Provider;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;"/>
+		<method name="newInstance(Ljava/security/KeyStore;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Builder;"/>
+	</class>
+	<class name="java/security/KeyStore$CallbackHandlerProtection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$ProtectionParameter"/>
+		<method name="&lt;init>(Ljavax/security/auth/callback/CallbackHandler;)V"/>
+		<method name="getCallbackHandler()Ljavax/security/auth/callback/CallbackHandler;"/>
+	</class>
+	<class name="java/security/KeyStore$Entry" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getAttributes()Ljava/util/Set;" since="26"/>
+	</class>
+	<class name="java/security/KeyStore$Entry$Attribute" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getValue()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/KeyStore$LoadStoreParameter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getProtectionParameter()Ljava/security/KeyStore$ProtectionParameter;"/>
+	</class>
+	<class name="java/security/KeyStore$PasswordProtection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$ProtectionParameter"/>
+		<implements name="javax/security/auth/Destroyable"/>
+		<method name="&lt;init>([C)V"/>
+		<method name="&lt;init>([CLjava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;)V" since="26"/>
+		<method name="getPassword()[C"/>
+		<method name="getProtectionAlgorithm()Ljava/lang/String;" since="26"/>
+		<method name="getProtectionParameters()Ljava/security/spec/AlgorithmParameterSpec;" since="26"/>
+	</class>
+	<class name="java/security/KeyStore$PrivateKeyEntry" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$Entry"/>
+		<method name="&lt;init>(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;)V"/>
+		<method name="&lt;init>(Ljava/security/PrivateKey;[Ljava/security/cert/Certificate;Ljava/util/Set;)V" since="26"/>
+		<method name="getCertificate()Ljava/security/cert/Certificate;"/>
+		<method name="getCertificateChain()[Ljava/security/cert/Certificate;"/>
+		<method name="getPrivateKey()Ljava/security/PrivateKey;"/>
+	</class>
+	<class name="java/security/KeyStore$ProtectionParameter" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/security/KeyStore$SecretKeyEntry" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$Entry"/>
+		<method name="&lt;init>(Ljavax/crypto/SecretKey;)V"/>
+		<method name="&lt;init>(Ljavax/crypto/SecretKey;Ljava/util/Set;)V" since="26"/>
+		<method name="getSecretKey()Ljavax/crypto/SecretKey;"/>
+	</class>
+	<class name="java/security/KeyStore$TrustedCertificateEntry" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$Entry"/>
+		<method name="&lt;init>(Ljava/security/cert/Certificate;)V"/>
+		<method name="&lt;init>(Ljava/security/cert/Certificate;Ljava/util/Set;)V" since="26"/>
+		<method name="getTrustedCertificate()Ljava/security/cert/Certificate;"/>
+	</class>
+	<class name="java/security/KeyStoreException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/KeyStoreSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineAliases()Ljava/util/Enumeration;"/>
+		<method name="engineContainsAlias(Ljava/lang/String;)Z"/>
+		<method name="engineDeleteEntry(Ljava/lang/String;)V"/>
+		<method name="engineEntryInstanceOf(Ljava/lang/String;Ljava/lang/Class;)Z"/>
+		<method name="engineGetCertificate(Ljava/lang/String;)Ljava/security/cert/Certificate;"/>
+		<method name="engineGetCertificateAlias(Ljava/security/cert/Certificate;)Ljava/lang/String;"/>
+		<method name="engineGetCertificateChain(Ljava/lang/String;)[Ljava/security/cert/Certificate;"/>
+		<method name="engineGetCreationDate(Ljava/lang/String;)Ljava/util/Date;"/>
+		<method name="engineGetEntry(Ljava/lang/String;Ljava/security/KeyStore$ProtectionParameter;)Ljava/security/KeyStore$Entry;"/>
+		<method name="engineGetKey(Ljava/lang/String;[C)Ljava/security/Key;"/>
+		<method name="engineIsCertificateEntry(Ljava/lang/String;)Z"/>
+		<method name="engineIsKeyEntry(Ljava/lang/String;)Z"/>
+		<method name="engineLoad(Ljava/io/InputStream;[C)V"/>
+		<method name="engineLoad(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
+		<method name="engineSetCertificateEntry(Ljava/lang/String;Ljava/security/cert/Certificate;)V"/>
+		<method name="engineSetEntry(Ljava/lang/String;Ljava/security/KeyStore$Entry;Ljava/security/KeyStore$ProtectionParameter;)V"/>
+		<method name="engineSetKeyEntry(Ljava/lang/String;Ljava/security/Key;[C[Ljava/security/cert/Certificate;)V"/>
+		<method name="engineSetKeyEntry(Ljava/lang/String;[B[Ljava/security/cert/Certificate;)V"/>
+		<method name="engineSize()I"/>
+		<method name="engineStore(Ljava/io/OutputStream;[C)V"/>
+		<method name="engineStore(Ljava/security/KeyStore$LoadStoreParameter;)V"/>
+	</class>
+	<class name="java/security/MessageDigest" since="1">
+		<extends name="java/security/MessageDigestSpi"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="digest()[B"/>
+		<method name="digest([B)[B"/>
+		<method name="digest([BII)I"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getDigestLength()I"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/MessageDigest;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/MessageDigest;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/MessageDigest;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="isEqual([B[B)Z"/>
+		<method name="reset()V"/>
+		<method name="update(B)V"/>
+		<method name="update(Ljava/nio/ByteBuffer;)V"/>
+		<method name="update([B)V"/>
+		<method name="update([BII)V"/>
+	</class>
+	<class name="java/security/MessageDigestSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineDigest()[B"/>
+		<method name="engineDigest([BII)I"/>
+		<method name="engineGetDigestLength()I"/>
+		<method name="engineReset()V"/>
+		<method name="engineUpdate(B)V"/>
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V"/>
+		<method name="engineUpdate([BII)V"/>
+	</class>
+	<class name="java/security/NoSuchAlgorithmException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/NoSuchProviderException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/PKCS12Attribute" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/KeyStore$Entry$Attribute"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="getEncoded()[B"/>
+	</class>
+	<class name="java/security/Permission" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/security/Guard"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getActions()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="implies(Ljava/security/Permission;)Z"/>
+		<method name="newPermissionCollection()Ljava/security/PermissionCollection;"/>
+	</class>
+	<class name="java/security/PermissionCollection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(Ljava/security/Permission;)V"/>
+		<method name="elements()Ljava/util/Enumeration;"/>
+		<method name="implies(Ljava/security/Permission;)Z"/>
+		<method name="isReadOnly()Z"/>
+		<method name="setReadOnly()V"/>
+	</class>
+	<class name="java/security/Permissions" since="1">
+		<extends name="java/security/PermissionCollection"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/security/Policy" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;)Ljava/security/Policy;" since="9"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;Ljava/lang/String;)Ljava/security/Policy;" since="9"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Policy$Parameters;Ljava/security/Provider;)Ljava/security/Policy;" since="9"/>
+		<method name="getParameters()Ljava/security/Policy$Parameters;" since="9"/>
+		<method name="getPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;"/>
+		<method name="getPermissions(Ljava/security/ProtectionDomain;)Ljava/security/PermissionCollection;"/>
+		<method name="getPolicy()Ljava/security/Policy;"/>
+		<method name="getProvider()Ljava/security/Provider;" since="9"/>
+		<method name="getType()Ljava/lang/String;" since="9"/>
+		<method name="implies(Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z"/>
+		<method name="refresh()V"/>
+		<method name="setPolicy(Ljava/security/Policy;)V"/>
+		<field name="UNSUPPORTED_EMPTY_COLLECTION" since="9"/>
+	</class>
+	<class name="java/security/Policy$Parameters" since="9">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/security/PolicySpi" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGetPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;"/>
+		<method name="engineGetPermissions(Ljava/security/ProtectionDomain;)Ljava/security/PermissionCollection;"/>
+		<method name="engineImplies(Ljava/security/ProtectionDomain;Ljava/security/Permission;)Z"/>
+		<method name="engineRefresh()V"/>
+	</class>
+	<class name="java/security/Principal" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="implies(Ljavax/security/auth/Subject;)Z" since="26"/>
+	</class>
+	<class name="java/security/PrivateKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/Key"/>
+		<implements name="javax/security/auth/Destroyable" since="26"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/PrivilegedAction" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="run()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/PrivilegedActionException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="getException()Ljava/lang/Exception;"/>
+	</class>
+	<class name="java/security/PrivilegedExceptionAction" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="run()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/ProtectionDomain" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/CodeSource;Ljava/security/PermissionCollection;)V"/>
+		<method name="&lt;init>(Ljava/security/CodeSource;Ljava/security/PermissionCollection;Ljava/lang/ClassLoader;[Ljava/security/Principal;)V"/>
+		<method name="getClassLoader()Ljava/lang/ClassLoader;"/>
+		<method name="getCodeSource()Ljava/security/CodeSource;"/>
+		<method name="getPermissions()Ljava/security/PermissionCollection;"/>
+		<method name="getPrincipals()[Ljava/security/Principal;"/>
+		<method name="implies(Ljava/security/Permission;)Z"/>
+	</class>
+	<class name="java/security/Provider" since="1">
+		<extends name="java/util/Properties"/>
+		<method name="&lt;init>(Ljava/lang/String;DLjava/lang/String;)V"/>
+		<method name="getInfo()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service;"/>
+		<method name="getServices()Ljava/util/Set;"/>
+		<method name="getVersion()D"/>
+		<method name="putService(Ljava/security/Provider$Service;)V"/>
+		<method name="removeService(Ljava/security/Provider$Service;)V"/>
+	</class>
+	<class name="java/security/Provider$Service" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/Provider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/Map;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getClassName()Ljava/lang/String;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="newInstance(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="supportsParameter(Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/security/ProviderException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/PublicKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/Key"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/SecureClassLoader" since="1">
+		<extends name="java/lang/ClassLoader"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/ClassLoader;)V"/>
+		<method name="defineClass(Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class;"/>
+		<method name="defineClass(Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class;"/>
+		<method name="getPermissions(Ljava/security/CodeSource;)Ljava/security/PermissionCollection;"/>
+	</class>
+	<class name="java/security/SecureRandom" since="1">
+		<extends name="java/util/Random"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/security/SecureRandomSpi;Ljava/security/Provider;)V"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="generateSeed(I)[B"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/SecureRandom;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/SecureRandom;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/SecureRandom;"/>
+		<method name="getInstanceStrong()Ljava/security/SecureRandom;" since="26"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getSeed(I)[B"/>
+		<method name="setSeed([B)V"/>
+	</class>
+	<class name="java/security/SecureRandomSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGenerateSeed(I)[B"/>
+		<method name="engineNextBytes([B)V"/>
+		<method name="engineSetSeed([B)V"/>
+	</class>
+	<class name="java/security/Security" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addProvider(Ljava/security/Provider;)I"/>
+		<method name="getAlgorithmProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;" deprecated="15"/>
+		<method name="getAlgorithms(Ljava/lang/String;)Ljava/util/Set;"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getProvider(Ljava/lang/String;)Ljava/security/Provider;"/>
+		<method name="getProviders()[Ljava/security/Provider;"/>
+		<method name="getProviders(Ljava/lang/String;)[Ljava/security/Provider;"/>
+		<method name="getProviders(Ljava/util/Map;)[Ljava/security/Provider;"/>
+		<method name="insertProviderAt(Ljava/security/Provider;I)I"/>
+		<method name="removeProvider(Ljava/lang/String;)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/SecurityPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/Signature" since="1">
+		<extends name="java/security/SignatureSpi"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/Signature;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Signature;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/Signature;"/>
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15"/>
+		<method name="getParameters()Ljava/security/AlgorithmParameters;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="initSign(Ljava/security/PrivateKey;)V"/>
+		<method name="initSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V"/>
+		<method name="initVerify(Ljava/security/PublicKey;)V"/>
+		<method name="initVerify(Ljava/security/cert/Certificate;)V"/>
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="15"/>
+		<method name="setParameter(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="sign()[B"/>
+		<method name="sign([BII)I"/>
+		<method name="update(B)V"/>
+		<method name="update(Ljava/nio/ByteBuffer;)V"/>
+		<method name="update([B)V"/>
+		<method name="update([BII)V"/>
+		<method name="verify([B)Z"/>
+		<method name="verify([BII)Z"/>
+		<field name="SIGN"/>
+		<field name="UNINITIALIZED"/>
+		<field name="VERIFY"/>
+		<field name="state"/>
+	</class>
+	<class name="java/security/SignatureException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/SignatureSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGetParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="15"/>
+		<method name="engineGetParameters()Ljava/security/AlgorithmParameters;"/>
+		<method name="engineInitSign(Ljava/security/PrivateKey;)V"/>
+		<method name="engineInitSign(Ljava/security/PrivateKey;Ljava/security/SecureRandom;)V"/>
+		<method name="engineInitVerify(Ljava/security/PublicKey;)V"/>
+		<method name="engineSetParameter(Ljava/lang/String;Ljava/lang/Object;)V" deprecated="15"/>
+		<method name="engineSetParameter(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="engineSign()[B"/>
+		<method name="engineSign([BII)I"/>
+		<method name="engineUpdate(B)V"/>
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V"/>
+		<method name="engineUpdate([BII)V"/>
+		<method name="engineVerify([B)Z"/>
+		<method name="engineVerify([BII)Z"/>
+		<field name="appRandom"/>
+	</class>
+	<class name="java/security/SignedObject" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/io/Serializable;Ljava/security/PrivateKey;Ljava/security/Signature;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getObject()Ljava/lang/Object;"/>
+		<method name="getSignature()[B"/>
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Signature;)Z"/>
+	</class>
+	<class name="java/security/Signer" since="1" deprecated="3">
+		<extends name="java/security/Identity"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/security/IdentityScope;)V" deprecated="29"/>
+		<method name="getPrivateKey()Ljava/security/PrivateKey;" deprecated="29"/>
+		<method name="setKeyPair(Ljava/security/KeyPair;)V" deprecated="29"/>
+	</class>
+	<class name="java/security/Timestamp" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/util/Date;Ljava/security/cert/CertPath;)V"/>
+		<method name="getSignerCertPath()Ljava/security/cert/CertPath;"/>
+		<method name="getTimestamp()Ljava/util/Date;"/>
+	</class>
+	<class name="java/security/UnrecoverableEntryException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/UnrecoverableKeyException" since="1">
+		<extends name="java/security/GeneralSecurityException" removed="9"/>
+		<extends name="java/security/UnrecoverableEntryException" since="9"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/UnresolvedPermission" since="1">
+		<extends name="java/security/Permission"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/security/cert/Certificate;)V"/>
+		<method name="getUnresolvedActions()Ljava/lang/String;"/>
+		<method name="getUnresolvedCerts()[Ljava/security/cert/Certificate;"/>
+		<method name="getUnresolvedName()Ljava/lang/String;"/>
+		<method name="getUnresolvedType()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/acl/Acl" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/acl/Owner"/>
+		<method name="addEntry(Ljava/security/Principal;Ljava/security/acl/AclEntry;)Z"/>
+		<method name="checkPermission(Ljava/security/Principal;Ljava/security/acl/Permission;)Z"/>
+		<method name="entries()Ljava/util/Enumeration;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPermissions(Ljava/security/Principal;)Ljava/util/Enumeration;"/>
+		<method name="removeEntry(Ljava/security/Principal;Ljava/security/acl/AclEntry;)Z"/>
+		<method name="setName(Ljava/security/Principal;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/acl/AclEntry" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="addPermission(Ljava/security/acl/Permission;)Z"/>
+		<method name="checkPermission(Ljava/security/acl/Permission;)Z"/>
+		<method name="getPrincipal()Ljava/security/Principal;"/>
+		<method name="isNegative()Z"/>
+		<method name="permissions()Ljava/util/Enumeration;"/>
+		<method name="removePermission(Ljava/security/acl/Permission;)Z"/>
+		<method name="setNegativePermissions()V"/>
+		<method name="setPrincipal(Ljava/security/Principal;)Z"/>
+	</class>
+	<class name="java/security/acl/AclNotFoundException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/security/acl/Group" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/Principal"/>
+		<method name="addMember(Ljava/security/Principal;)Z"/>
+		<method name="isMember(Ljava/security/Principal;)Z"/>
+		<method name="members()Ljava/util/Enumeration;"/>
+		<method name="removeMember(Ljava/security/Principal;)Z"/>
+	</class>
+	<class name="java/security/acl/LastOwnerException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/security/acl/NotOwnerException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/security/acl/Owner" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addOwner(Ljava/security/Principal;Ljava/security/Principal;)Z"/>
+		<method name="deleteOwner(Ljava/security/Principal;Ljava/security/Principal;)Z"/>
+		<method name="isOwner(Ljava/security/Principal;)Z"/>
+	</class>
+	<class name="java/security/acl/Permission" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/security/cert/CRL" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="isRevoked(Ljava/security/cert/Certificate;)Z"/>
+	</class>
+	<class name="java/security/cert/CRLException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/cert/CRLReason" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/CRLReason;"/>
+		<method name="values()[Ljava/security/cert/CRLReason;"/>
+		<field name="AA_COMPROMISE"/>
+		<field name="AFFILIATION_CHANGED"/>
+		<field name="CA_COMPROMISE"/>
+		<field name="CERTIFICATE_HOLD"/>
+		<field name="CESSATION_OF_OPERATION"/>
+		<field name="KEY_COMPROMISE"/>
+		<field name="PRIVILEGE_WITHDRAWN"/>
+		<field name="REMOVE_FROM_CRL"/>
+		<field name="SUPERSEDED"/>
+		<field name="UNSPECIFIED"/>
+		<field name="UNUSED"/>
+	</class>
+	<class name="java/security/cert/CRLSelector" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="match(Ljava/security/cert/CRL;)Z"/>
+	</class>
+	<class name="java/security/cert/CertPath" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getCertificates()Ljava/util/List;"/>
+		<method name="getEncoded()[B"/>
+		<method name="getEncoded(Ljava/lang/String;)[B"/>
+		<method name="getEncodings()Ljava/util/Iterator;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="writeReplace()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/cert/CertPath$CertPathRep" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
+		<method name="readResolve()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/cert/CertPathBuilder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/cert/CertPathBuilderSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="build(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getDefaultType()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathBuilder;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathBuilder;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertPathBuilder;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
+	</class>
+	<class name="java/security/cert/CertPathBuilderException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/cert/CertPathBuilderResult" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="getCertPath()Ljava/security/cert/CertPath;"/>
+	</class>
+	<class name="java/security/cert/CertPathBuilderSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineBuild(Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathBuilderResult;"/>
+		<method name="engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
+	</class>
+	<class name="java/security/cert/CertPathChecker" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="check(Ljava/security/cert/Certificate;)V"/>
+		<method name="init(Z)V"/>
+		<method name="isForwardCheckingSupported()Z"/>
+	</class>
+	<class name="java/security/cert/CertPathParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+	</class>
+	<class name="java/security/cert/CertPathValidator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/cert/CertPathValidatorSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getDefaultType()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertPathValidator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertPathValidator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertPathValidator;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
+		<method name="validate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;"/>
+	</class>
+	<class name="java/security/cert/CertPathValidatorException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;Ljava/security/cert/CertPath;ILjava/security/cert/CertPathValidatorException$Reason;)V" since="24"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="getCertPath()Ljava/security/cert/CertPath;"/>
+		<method name="getIndex()I"/>
+		<method name="getReason()Ljava/security/cert/CertPathValidatorException$Reason;" since="24"/>
+	</class>
+	<class name="java/security/cert/CertPathValidatorException$BasicReason" since="24">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/security/cert/CertPathValidatorException$Reason"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/CertPathValidatorException$BasicReason;"/>
+		<method name="values()[Ljava/security/cert/CertPathValidatorException$BasicReason;"/>
+		<field name="ALGORITHM_CONSTRAINED"/>
+		<field name="EXPIRED"/>
+		<field name="INVALID_SIGNATURE"/>
+		<field name="NOT_YET_VALID"/>
+		<field name="REVOKED"/>
+		<field name="UNDETERMINED_REVOCATION_STATUS"/>
+		<field name="UNSPECIFIED"/>
+	</class>
+	<class name="java/security/cert/CertPathValidatorException$Reason" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+	</class>
+	<class name="java/security/cert/CertPathValidatorResult" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+	</class>
+	<class name="java/security/cert/CertPathValidatorSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGetRevocationChecker()Ljava/security/cert/CertPathChecker;" since="24"/>
+		<method name="engineValidate(Ljava/security/cert/CertPath;Ljava/security/cert/CertPathParameters;)Ljava/security/cert/CertPathValidatorResult;"/>
+	</class>
+	<class name="java/security/cert/CertSelector" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="match(Ljava/security/cert/Certificate;)Z"/>
+	</class>
+	<class name="java/security/cert/CertStore" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/cert/CertStoreSpi;Ljava/security/Provider;Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)V"/>
+		<method name="getCRLs(Ljava/security/cert/CRLSelector;)Ljava/util/Collection;"/>
+		<method name="getCertStoreParameters()Ljava/security/cert/CertStoreParameters;"/>
+		<method name="getCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;"/>
+		<method name="getDefaultType()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;)Ljava/security/cert/CertStore;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;Ljava/lang/String;)Ljava/security/cert/CertStore;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/cert/CertStoreParameters;Ljava/security/Provider;)Ljava/security/cert/CertStore;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getType()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/cert/CertStoreException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/cert/CertStoreParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+	</class>
+	<class name="java/security/cert/CertStoreSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/cert/CertStoreParameters;)V"/>
+		<method name="engineGetCRLs(Ljava/security/cert/CRLSelector;)Ljava/util/Collection;"/>
+		<method name="engineGetCertificates(Ljava/security/cert/CertSelector;)Ljava/util/Collection;"/>
+	</class>
+	<class name="java/security/cert/Certificate" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getEncoded()[B"/>
+		<method name="getPublicKey()Ljava/security/PublicKey;"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<method name="verify(Ljava/security/PublicKey;)V"/>
+		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V"/>
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="26"/>
+		<method name="writeReplace()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/cert/Certificate$CertificateRep" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
+		<method name="readResolve()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/security/cert/CertificateEncodingException" since="1">
+		<extends name="java/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/cert/CertificateException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/cert/CertificateExpiredException" since="1">
+		<extends name="java/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/cert/CertificateFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/cert/CertificateFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="generateCRL(Ljava/io/InputStream;)Ljava/security/cert/CRL;"/>
+		<method name="generateCRLs(Ljava/io/InputStream;)Ljava/util/Collection;"/>
+		<method name="generateCertPath(Ljava/io/InputStream;)Ljava/security/cert/CertPath;"/>
+		<method name="generateCertPath(Ljava/io/InputStream;Ljava/lang/String;)Ljava/security/cert/CertPath;"/>
+		<method name="generateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;"/>
+		<method name="generateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;"/>
+		<method name="generateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;"/>
+		<method name="getCertPathEncodings()Ljava/util/Iterator;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljava/security/cert/CertificateFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/security/cert/CertificateFactory;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getType()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/cert/CertificateFactorySpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGenerateCRL(Ljava/io/InputStream;)Ljava/security/cert/CRL;"/>
+		<method name="engineGenerateCRLs(Ljava/io/InputStream;)Ljava/util/Collection;"/>
+		<method name="engineGenerateCertPath(Ljava/io/InputStream;)Ljava/security/cert/CertPath;"/>
+		<method name="engineGenerateCertPath(Ljava/io/InputStream;Ljava/lang/String;)Ljava/security/cert/CertPath;"/>
+		<method name="engineGenerateCertPath(Ljava/util/List;)Ljava/security/cert/CertPath;"/>
+		<method name="engineGenerateCertificate(Ljava/io/InputStream;)Ljava/security/cert/Certificate;"/>
+		<method name="engineGenerateCertificates(Ljava/io/InputStream;)Ljava/util/Collection;"/>
+		<method name="engineGetCertPathEncodings()Ljava/util/Iterator;"/>
+	</class>
+	<class name="java/security/cert/CertificateNotYetValidException" since="1">
+		<extends name="java/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/cert/CertificateParsingException" since="1">
+		<extends name="java/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/cert/CertificateRevokedException" since="24">
+		<extends name="java/security/cert/CertificateException"/>
+		<method name="&lt;init>(Ljava/util/Date;Ljava/security/cert/CRLReason;Ljavax/security/auth/x500/X500Principal;Ljava/util/Map;)V"/>
+		<method name="getAuthorityName()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getExtensions()Ljava/util/Map;"/>
+		<method name="getInvalidityDate()Ljava/util/Date;"/>
+		<method name="getRevocationDate()Ljava/util/Date;"/>
+		<method name="getRevocationReason()Ljava/security/cert/CRLReason;"/>
+	</class>
+	<class name="java/security/cert/CollectionCertStoreParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/cert/CertStoreParameters"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="getCollection()Ljava/util/Collection;"/>
+	</class>
+	<class name="java/security/cert/Extension" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="encode(Ljava/io/OutputStream;)V"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getValue()[B"/>
+		<method name="isCritical()Z"/>
+	</class>
+	<class name="java/security/cert/LDAPCertStoreParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/cert/CertStoreParameters"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getPort()I"/>
+		<method name="getServerName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/cert/PKIXBuilderParameters" since="1">
+		<extends name="java/security/cert/PKIXParameters"/>
+		<method name="&lt;init>(Ljava/security/KeyStore;Ljava/security/cert/CertSelector;)V"/>
+		<method name="&lt;init>(Ljava/util/Set;Ljava/security/cert/CertSelector;)V"/>
+		<method name="getMaxPathLength()I"/>
+		<method name="setMaxPathLength(I)V"/>
+	</class>
+	<class name="java/security/cert/PKIXCertPathBuilderResult" since="1">
+		<extends name="java/security/cert/PKIXCertPathValidatorResult"/>
+		<implements name="java/security/cert/CertPathBuilderResult"/>
+		<method name="&lt;init>(Ljava/security/cert/CertPath;Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V"/>
+	</class>
+	<class name="java/security/cert/PKIXCertPathChecker" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/security/cert/CertPathChecker" since="24"/>
+		<method name="&lt;init>()V"/>
+		<method name="check(Ljava/security/cert/Certificate;Ljava/util/Collection;)V"/>
+		<method name="getSupportedExtensions()Ljava/util/Set;"/>
+		<method name="init(Z)V"/>
+		<method name="isForwardCheckingSupported()Z"/>
+	</class>
+	<class name="java/security/cert/PKIXCertPathValidatorResult" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/cert/CertPathValidatorResult"/>
+		<method name="&lt;init>(Ljava/security/cert/TrustAnchor;Ljava/security/cert/PolicyNode;Ljava/security/PublicKey;)V"/>
+		<method name="getPolicyTree()Ljava/security/cert/PolicyNode;"/>
+		<method name="getPublicKey()Ljava/security/PublicKey;"/>
+		<method name="getTrustAnchor()Ljava/security/cert/TrustAnchor;"/>
+	</class>
+	<class name="java/security/cert/PKIXParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/cert/CertPathParameters"/>
+		<method name="&lt;init>(Ljava/security/KeyStore;)V"/>
+		<method name="&lt;init>(Ljava/util/Set;)V"/>
+		<method name="addCertPathChecker(Ljava/security/cert/PKIXCertPathChecker;)V"/>
+		<method name="addCertStore(Ljava/security/cert/CertStore;)V"/>
+		<method name="getCertPathCheckers()Ljava/util/List;"/>
+		<method name="getCertStores()Ljava/util/List;"/>
+		<method name="getDate()Ljava/util/Date;"/>
+		<method name="getInitialPolicies()Ljava/util/Set;"/>
+		<method name="getPolicyQualifiersRejected()Z"/>
+		<method name="getSigProvider()Ljava/lang/String;"/>
+		<method name="getTargetCertConstraints()Ljava/security/cert/CertSelector;"/>
+		<method name="getTrustAnchors()Ljava/util/Set;"/>
+		<method name="isAnyPolicyInhibited()Z"/>
+		<method name="isExplicitPolicyRequired()Z"/>
+		<method name="isPolicyMappingInhibited()Z"/>
+		<method name="isRevocationEnabled()Z"/>
+		<method name="setAnyPolicyInhibited(Z)V"/>
+		<method name="setCertPathCheckers(Ljava/util/List;)V"/>
+		<method name="setCertStores(Ljava/util/List;)V"/>
+		<method name="setDate(Ljava/util/Date;)V"/>
+		<method name="setExplicitPolicyRequired(Z)V"/>
+		<method name="setInitialPolicies(Ljava/util/Set;)V"/>
+		<method name="setPolicyMappingInhibited(Z)V"/>
+		<method name="setPolicyQualifiersRejected(Z)V"/>
+		<method name="setRevocationEnabled(Z)V"/>
+		<method name="setSigProvider(Ljava/lang/String;)V"/>
+		<method name="setTargetCertConstraints(Ljava/security/cert/CertSelector;)V"/>
+		<method name="setTrustAnchors(Ljava/util/Set;)V"/>
+	</class>
+	<class name="java/security/cert/PKIXReason" since="24">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/security/cert/CertPathValidatorException$Reason"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/PKIXReason;"/>
+		<method name="values()[Ljava/security/cert/PKIXReason;"/>
+		<field name="INVALID_KEY_USAGE"/>
+		<field name="INVALID_NAME"/>
+		<field name="INVALID_POLICY"/>
+		<field name="NAME_CHAINING"/>
+		<field name="NOT_CA_CERT"/>
+		<field name="NO_TRUST_ANCHOR"/>
+		<field name="PATH_TOO_LONG"/>
+		<field name="UNRECOGNIZED_CRIT_EXT"/>
+	</class>
+	<class name="java/security/cert/PKIXRevocationChecker" since="24">
+		<extends name="java/security/cert/PKIXCertPathChecker"/>
+		<method name="&lt;init>()V"/>
+		<method name="clone()Ljava/security/cert/PKIXRevocationChecker;"/>
+		<method name="getOcspExtensions()Ljava/util/List;"/>
+		<method name="getOcspResponder()Ljava/net/URI;"/>
+		<method name="getOcspResponderCert()Ljava/security/cert/X509Certificate;"/>
+		<method name="getOcspResponses()Ljava/util/Map;"/>
+		<method name="getOptions()Ljava/util/Set;"/>
+		<method name="getSoftFailExceptions()Ljava/util/List;"/>
+		<method name="setOcspExtensions(Ljava/util/List;)V"/>
+		<method name="setOcspResponder(Ljava/net/URI;)V"/>
+		<method name="setOcspResponderCert(Ljava/security/cert/X509Certificate;)V"/>
+		<method name="setOcspResponses(Ljava/util/Map;)V"/>
+		<method name="setOptions(Ljava/util/Set;)V"/>
+	</class>
+	<class name="java/security/cert/PKIXRevocationChecker$Option" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/security/cert/PKIXRevocationChecker$Option;"/>
+		<method name="values()[Ljava/security/cert/PKIXRevocationChecker$Option;"/>
+		<field name="NO_FALLBACK"/>
+		<field name="ONLY_END_ENTITY"/>
+		<field name="PREFER_CRLS"/>
+		<field name="SOFT_FAIL"/>
+	</class>
+	<class name="java/security/cert/PolicyNode" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getChildren()Ljava/util/Iterator;"/>
+		<method name="getDepth()I"/>
+		<method name="getExpectedPolicies()Ljava/util/Set;"/>
+		<method name="getParent()Ljava/security/cert/PolicyNode;"/>
+		<method name="getPolicyQualifiers()Ljava/util/Set;"/>
+		<method name="getValidPolicy()Ljava/lang/String;"/>
+		<method name="isCritical()Z"/>
+	</class>
+	<class name="java/security/cert/PolicyQualifierInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="getEncoded()[B"/>
+		<method name="getPolicyQualifier()[B"/>
+		<method name="getPolicyQualifierId()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/cert/TrustAnchor" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/security/PublicKey;[B)V"/>
+		<method name="&lt;init>(Ljava/security/cert/X509Certificate;[B)V"/>
+		<method name="&lt;init>(Ljavax/security/auth/x500/X500Principal;Ljava/security/PublicKey;[B)V"/>
+		<method name="getCA()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getCAName()Ljava/lang/String;"/>
+		<method name="getCAPublicKey()Ljava/security/PublicKey;"/>
+		<method name="getNameConstraints()[B"/>
+		<method name="getTrustedCert()Ljava/security/cert/X509Certificate;"/>
+	</class>
+	<class name="java/security/cert/X509CRL" since="1">
+		<extends name="java/security/cert/CRL"/>
+		<implements name="java/security/cert/X509Extension"/>
+		<method name="&lt;init>()V"/>
+		<method name="getEncoded()[B"/>
+		<method name="getIssuerDN()Ljava/security/Principal;"/>
+		<method name="getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getNextUpdate()Ljava/util/Date;"/>
+		<method name="getRevokedCertificate(Ljava/math/BigInteger;)Ljava/security/cert/X509CRLEntry;"/>
+		<method name="getRevokedCertificate(Ljava/security/cert/X509Certificate;)Ljava/security/cert/X509CRLEntry;"/>
+		<method name="getRevokedCertificates()Ljava/util/Set;"/>
+		<method name="getSigAlgName()Ljava/lang/String;"/>
+		<method name="getSigAlgOID()Ljava/lang/String;"/>
+		<method name="getSigAlgParams()[B"/>
+		<method name="getSignature()[B"/>
+		<method name="getTBSCertList()[B"/>
+		<method name="getThisUpdate()Ljava/util/Date;"/>
+		<method name="getVersion()I"/>
+		<method name="verify(Ljava/security/PublicKey;)V"/>
+		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V"/>
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="26"/>
+	</class>
+	<class name="java/security/cert/X509CRLEntry" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/cert/X509Extension"/>
+		<method name="&lt;init>()V"/>
+		<method name="getCertificateIssuer()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getEncoded()[B"/>
+		<method name="getRevocationDate()Ljava/util/Date;"/>
+		<method name="getRevocationReason()Ljava/security/cert/CRLReason;" since="24"/>
+		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
+		<method name="hasExtensions()Z"/>
+	</class>
+	<class name="java/security/cert/X509CRLSelector" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/cert/CRLSelector"/>
+		<method name="&lt;init>()V"/>
+		<method name="addIssuer(Ljavax/security/auth/x500/X500Principal;)V"/>
+		<method name="addIssuerName(Ljava/lang/String;)V"/>
+		<method name="addIssuerName([B)V"/>
+		<method name="getCertificateChecking()Ljava/security/cert/X509Certificate;"/>
+		<method name="getDateAndTime()Ljava/util/Date;"/>
+		<method name="getIssuerNames()Ljava/util/Collection;"/>
+		<method name="getIssuers()Ljava/util/Collection;"/>
+		<method name="getMaxCRL()Ljava/math/BigInteger;"/>
+		<method name="getMinCRL()Ljava/math/BigInteger;"/>
+		<method name="setCertificateChecking(Ljava/security/cert/X509Certificate;)V"/>
+		<method name="setDateAndTime(Ljava/util/Date;)V"/>
+		<method name="setIssuerNames(Ljava/util/Collection;)V"/>
+		<method name="setIssuers(Ljava/util/Collection;)V"/>
+		<method name="setMaxCRLNumber(Ljava/math/BigInteger;)V"/>
+		<method name="setMinCRLNumber(Ljava/math/BigInteger;)V"/>
+	</class>
+	<class name="java/security/cert/X509CertSelector" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/cert/CertSelector"/>
+		<method name="&lt;init>()V"/>
+		<method name="addPathToName(ILjava/lang/String;)V"/>
+		<method name="addPathToName(I[B)V"/>
+		<method name="addSubjectAlternativeName(ILjava/lang/String;)V"/>
+		<method name="addSubjectAlternativeName(I[B)V"/>
+		<method name="getAuthorityKeyIdentifier()[B"/>
+		<method name="getBasicConstraints()I"/>
+		<method name="getCertificate()Ljava/security/cert/X509Certificate;"/>
+		<method name="getCertificateValid()Ljava/util/Date;"/>
+		<method name="getExtendedKeyUsage()Ljava/util/Set;"/>
+		<method name="getIssuer()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getIssuerAsBytes()[B"/>
+		<method name="getIssuerAsString()Ljava/lang/String;"/>
+		<method name="getKeyUsage()[Z"/>
+		<method name="getMatchAllSubjectAltNames()Z"/>
+		<method name="getNameConstraints()[B"/>
+		<method name="getPathToNames()Ljava/util/Collection;"/>
+		<method name="getPolicy()Ljava/util/Set;"/>
+		<method name="getPrivateKeyValid()Ljava/util/Date;"/>
+		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
+		<method name="getSubject()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getSubjectAlternativeNames()Ljava/util/Collection;"/>
+		<method name="getSubjectAsBytes()[B"/>
+		<method name="getSubjectAsString()Ljava/lang/String;"/>
+		<method name="getSubjectKeyIdentifier()[B"/>
+		<method name="getSubjectPublicKey()Ljava/security/PublicKey;"/>
+		<method name="getSubjectPublicKeyAlgID()Ljava/lang/String;"/>
+		<method name="setAuthorityKeyIdentifier([B)V"/>
+		<method name="setBasicConstraints(I)V"/>
+		<method name="setCertificate(Ljava/security/cert/X509Certificate;)V"/>
+		<method name="setCertificateValid(Ljava/util/Date;)V"/>
+		<method name="setExtendedKeyUsage(Ljava/util/Set;)V"/>
+		<method name="setIssuer(Ljava/lang/String;)V"/>
+		<method name="setIssuer(Ljavax/security/auth/x500/X500Principal;)V"/>
+		<method name="setIssuer([B)V"/>
+		<method name="setKeyUsage([Z)V"/>
+		<method name="setMatchAllSubjectAltNames(Z)V"/>
+		<method name="setNameConstraints([B)V"/>
+		<method name="setPathToNames(Ljava/util/Collection;)V"/>
+		<method name="setPolicy(Ljava/util/Set;)V"/>
+		<method name="setPrivateKeyValid(Ljava/util/Date;)V"/>
+		<method name="setSerialNumber(Ljava/math/BigInteger;)V"/>
+		<method name="setSubject(Ljava/lang/String;)V"/>
+		<method name="setSubject(Ljavax/security/auth/x500/X500Principal;)V"/>
+		<method name="setSubject([B)V"/>
+		<method name="setSubjectAlternativeNames(Ljava/util/Collection;)V"/>
+		<method name="setSubjectKeyIdentifier([B)V"/>
+		<method name="setSubjectPublicKey(Ljava/security/PublicKey;)V"/>
+		<method name="setSubjectPublicKey([B)V"/>
+		<method name="setSubjectPublicKeyAlgID(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/cert/X509Certificate" since="1">
+		<extends name="java/security/cert/Certificate"/>
+		<implements name="java/security/cert/X509Extension"/>
+		<method name="&lt;init>()V"/>
+		<method name="checkValidity()V"/>
+		<method name="checkValidity(Ljava/util/Date;)V"/>
+		<method name="getBasicConstraints()I"/>
+		<method name="getExtendedKeyUsage()Ljava/util/List;"/>
+		<method name="getIssuerAlternativeNames()Ljava/util/Collection;"/>
+		<method name="getIssuerDN()Ljava/security/Principal;"/>
+		<method name="getIssuerUniqueID()[Z"/>
+		<method name="getIssuerX500Principal()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getKeyUsage()[Z"/>
+		<method name="getNotAfter()Ljava/util/Date;"/>
+		<method name="getNotBefore()Ljava/util/Date;"/>
+		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
+		<method name="getSigAlgName()Ljava/lang/String;"/>
+		<method name="getSigAlgOID()Ljava/lang/String;"/>
+		<method name="getSigAlgParams()[B"/>
+		<method name="getSignature()[B"/>
+		<method name="getSubjectAlternativeNames()Ljava/util/Collection;"/>
+		<method name="getSubjectDN()Ljava/security/Principal;"/>
+		<method name="getSubjectUniqueID()[Z"/>
+		<method name="getSubjectX500Principal()Ljavax/security/auth/x500/X500Principal;"/>
+		<method name="getTBSCertificate()[B"/>
+		<method name="getVersion()I"/>
+		<method name="verify(Ljava/security/PublicKey;Ljava/security/Provider;)V" since="24"/>
+	</class>
+	<class name="java/security/cert/X509Extension" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getCriticalExtensionOIDs()Ljava/util/Set;"/>
+		<method name="getExtensionValue(Ljava/lang/String;)[B"/>
+		<method name="getNonCriticalExtensionOIDs()Ljava/util/Set;"/>
+		<method name="hasUnsupportedCriticalExtension()Z"/>
+	</class>
+	<class name="java/security/interfaces/DSAKey" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getParams()Ljava/security/interfaces/DSAParams;"/>
+	</class>
+	<class name="java/security/interfaces/DSAKeyPairGenerator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="initialize(IZLjava/security/SecureRandom;)V"/>
+		<method name="initialize(Ljava/security/interfaces/DSAParams;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="java/security/interfaces/DSAParams" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getG()Ljava/math/BigInteger;"/>
+		<method name="getP()Ljava/math/BigInteger;"/>
+		<method name="getQ()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/interfaces/DSAPrivateKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PrivateKey"/>
+		<implements name="java/security/interfaces/DSAKey"/>
+		<method name="getX()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/interfaces/DSAPublicKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PublicKey"/>
+		<implements name="java/security/interfaces/DSAKey"/>
+		<method name="getY()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/interfaces/ECKey" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getParams()Ljava/security/spec/ECParameterSpec;"/>
+	</class>
+	<class name="java/security/interfaces/ECPrivateKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PrivateKey"/>
+		<implements name="java/security/interfaces/ECKey"/>
+		<method name="getS()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/interfaces/ECPublicKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PublicKey"/>
+		<implements name="java/security/interfaces/ECKey"/>
+		<method name="getW()Ljava/security/spec/ECPoint;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/interfaces/RSAKey" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getModulus()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/interfaces/RSAMultiPrimePrivateCrtKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/interfaces/RSAPrivateKey"/>
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
+		<method name="getOtherPrimeInfo()[Ljava/security/spec/RSAOtherPrimeInfo;"/>
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
+		<method name="getPrimeP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
+		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/interfaces/RSAPrivateCrtKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/interfaces/RSAPrivateKey"/>
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
+		<method name="getPrimeP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
+		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/interfaces/RSAPrivateKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PrivateKey"/>
+		<implements name="java/security/interfaces/RSAKey"/>
+		<method name="getPrivateExponent()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/interfaces/RSAPublicKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PublicKey"/>
+		<implements name="java/security/interfaces/RSAKey"/>
+		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="java/security/spec/AlgorithmParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/security/spec/DSAParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/interfaces/DSAParams"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+	</class>
+	<class name="java/security/spec/DSAPrivateKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getG()Ljava/math/BigInteger;"/>
+		<method name="getP()Ljava/math/BigInteger;"/>
+		<method name="getQ()Ljava/math/BigInteger;"/>
+		<method name="getX()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/DSAPublicKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getG()Ljava/math/BigInteger;"/>
+		<method name="getP()Ljava/math/BigInteger;"/>
+		<method name="getQ()Ljava/math/BigInteger;"/>
+		<method name="getY()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/ECField" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getFieldSize()I"/>
+	</class>
+	<class name="java/security/spec/ECFieldF2m" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/ECField"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/math/BigInteger;)V"/>
+		<method name="&lt;init>(I[I)V"/>
+		<method name="getM()I"/>
+		<method name="getMidTermsOfReductionPolynomial()[I"/>
+		<method name="getReductionPolynomial()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/ECFieldFp" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/ECField"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;)V"/>
+		<method name="getP()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/ECGenParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/spec/ECParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(Ljava/security/spec/EllipticCurve;Ljava/security/spec/ECPoint;Ljava/math/BigInteger;I)V"/>
+		<method name="getCofactor()I"/>
+		<method name="getCurve()Ljava/security/spec/EllipticCurve;"/>
+		<method name="getGenerator()Ljava/security/spec/ECPoint;"/>
+		<method name="getOrder()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/ECPoint" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getAffineX()Ljava/math/BigInteger;"/>
+		<method name="getAffineY()Ljava/math/BigInteger;"/>
+		<field name="POINT_INFINITY"/>
+	</class>
+	<class name="java/security/spec/ECPrivateKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/security/spec/ECParameterSpec;)V"/>
+		<method name="getParams()Ljava/security/spec/ECParameterSpec;"/>
+		<method name="getS()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/ECPublicKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/security/spec/ECPoint;Ljava/security/spec/ECParameterSpec;)V"/>
+		<method name="getParams()Ljava/security/spec/ECParameterSpec;"/>
+		<method name="getW()Ljava/security/spec/ECPoint;"/>
+	</class>
+	<class name="java/security/spec/EllipticCurve" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="&lt;init>(Ljava/security/spec/ECField;Ljava/math/BigInteger;Ljava/math/BigInteger;[B)V"/>
+		<method name="getA()Ljava/math/BigInteger;"/>
+		<method name="getB()Ljava/math/BigInteger;"/>
+		<method name="getField()Ljava/security/spec/ECField;"/>
+		<method name="getSeed()[B"/>
+	</class>
+	<class name="java/security/spec/EncodedKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="getEncoded()[B"/>
+		<method name="getFormat()Ljava/lang/String;"/>
+	</class>
+	<class name="java/security/spec/InvalidKeySpecException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/security/spec/InvalidParameterSpecException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/security/spec/KeySpec" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/security/spec/MGF1ParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getDigestAlgorithm()Ljava/lang/String;"/>
+		<field name="SHA1"/>
+		<field name="SHA224" since="26"/>
+		<field name="SHA256"/>
+		<field name="SHA384"/>
+		<field name="SHA512"/>
+	</class>
+	<class name="java/security/spec/PKCS8EncodedKeySpec" since="1">
+		<extends name="java/security/spec/EncodedKeySpec"/>
+		<method name="&lt;init>([B)V"/>
+	</class>
+	<class name="java/security/spec/PSSParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;II)V"/>
+		<method name="getDigestAlgorithm()Ljava/lang/String;"/>
+		<method name="getMGFAlgorithm()Ljava/lang/String;"/>
+		<method name="getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;"/>
+		<method name="getSaltLength()I"/>
+		<method name="getTrailerField()I"/>
+		<field name="DEFAULT"/>
+	</class>
+	<class name="java/security/spec/RSAKeyGenParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(ILjava/math/BigInteger;)V"/>
+		<method name="getKeysize()I"/>
+		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
+		<field name="F0"/>
+		<field name="F4"/>
+	</class>
+	<class name="java/security/spec/RSAMultiPrimePrivateCrtKeySpec" since="1">
+		<extends name="java/security/spec/RSAPrivateKeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;[Ljava/security/spec/RSAOtherPrimeInfo;)V"/>
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
+		<method name="getOtherPrimeInfo()[Ljava/security/spec/RSAOtherPrimeInfo;"/>
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
+		<method name="getPrimeP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
+		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/RSAOtherPrimeInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
+		<method name="getExponent()Ljava/math/BigInteger;"/>
+		<method name="getPrime()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/RSAPrivateCrtKeySpec" since="1">
+		<extends name="java/security/spec/RSAPrivateKeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getCrtCoefficient()Ljava/math/BigInteger;"/>
+		<method name="getPrimeExponentP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeExponentQ()Ljava/math/BigInteger;"/>
+		<method name="getPrimeP()Ljava/math/BigInteger;"/>
+		<method name="getPrimeQ()Ljava/math/BigInteger;"/>
+		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/RSAPrivateKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getModulus()Ljava/math/BigInteger;"/>
+		<method name="getPrivateExponent()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/RSAPublicKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getModulus()Ljava/math/BigInteger;"/>
+		<method name="getPublicExponent()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="java/security/spec/X509EncodedKeySpec" since="1">
+		<extends name="java/security/spec/EncodedKeySpec"/>
+		<method name="&lt;init>([B)V"/>
+	</class>
+	<class name="java/sql/Array" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="free()V" since="9"/>
+		<method name="getArray()Ljava/lang/Object;"/>
+		<method name="getArray(JI)Ljava/lang/Object;"/>
+		<method name="getArray(JILjava/util/Map;)Ljava/lang/Object;"/>
+		<method name="getArray(Ljava/util/Map;)Ljava/lang/Object;"/>
+		<method name="getBaseType()I"/>
+		<method name="getBaseTypeName()Ljava/lang/String;"/>
+		<method name="getResultSet()Ljava/sql/ResultSet;"/>
+		<method name="getResultSet(JI)Ljava/sql/ResultSet;"/>
+		<method name="getResultSet(JILjava/util/Map;)Ljava/sql/ResultSet;"/>
+		<method name="getResultSet(Ljava/util/Map;)Ljava/sql/ResultSet;"/>
+	</class>
+	<class name="java/sql/BatchUpdateException" since="1">
+		<extends name="java/sql/SQLException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I[I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I[ILjava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;[I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;[ILjava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/String;[I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;[ILjava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>([I)V"/>
+		<method name="&lt;init>([ILjava/lang/Throwable;)V" since="9"/>
+		<method name="getUpdateCounts()[I"/>
+	</class>
+	<class name="java/sql/Blob" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="free()V" since="9"/>
+		<method name="getBinaryStream()Ljava/io/InputStream;"/>
+		<method name="getBinaryStream(JJ)Ljava/io/InputStream;" since="9"/>
+		<method name="getBytes(JI)[B"/>
+		<method name="length()J"/>
+		<method name="position(Ljava/sql/Blob;J)J"/>
+		<method name="position([BJ)J"/>
+		<method name="setBinaryStream(J)Ljava/io/OutputStream;"/>
+		<method name="setBytes(J[B)I"/>
+		<method name="setBytes(J[BII)I"/>
+		<method name="truncate(J)V"/>
+	</class>
+	<class name="java/sql/CallableStatement" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/PreparedStatement"/>
+		<method name="getArray(I)Ljava/sql/Array;"/>
+		<method name="getArray(Ljava/lang/String;)Ljava/sql/Array;"/>
+		<method name="getBigDecimal(I)Ljava/math/BigDecimal;"/>
+		<method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="15"/>
+		<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;"/>
+		<method name="getBlob(I)Ljava/sql/Blob;"/>
+		<method name="getBlob(Ljava/lang/String;)Ljava/sql/Blob;"/>
+		<method name="getBoolean(I)Z"/>
+		<method name="getBoolean(Ljava/lang/String;)Z"/>
+		<method name="getByte(I)B"/>
+		<method name="getByte(Ljava/lang/String;)B"/>
+		<method name="getBytes(I)[B"/>
+		<method name="getBytes(Ljava/lang/String;)[B"/>
+		<method name="getCharacterStream(I)Ljava/io/Reader;" since="9"/>
+		<method name="getCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9"/>
+		<method name="getClob(I)Ljava/sql/Clob;"/>
+		<method name="getClob(Ljava/lang/String;)Ljava/sql/Clob;"/>
+		<method name="getDate(I)Ljava/sql/Date;"/>
+		<method name="getDate(ILjava/util/Calendar;)Ljava/sql/Date;"/>
+		<method name="getDate(Ljava/lang/String;)Ljava/sql/Date;"/>
+		<method name="getDate(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Date;"/>
+		<method name="getDouble(I)D"/>
+		<method name="getDouble(Ljava/lang/String;)D"/>
+		<method name="getFloat(I)F"/>
+		<method name="getFloat(Ljava/lang/String;)F"/>
+		<method name="getInt(I)I"/>
+		<method name="getInt(Ljava/lang/String;)I"/>
+		<method name="getLong(I)J"/>
+		<method name="getLong(Ljava/lang/String;)J"/>
+		<method name="getNCharacterStream(I)Ljava/io/Reader;" since="9"/>
+		<method name="getNCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9"/>
+		<method name="getNClob(I)Ljava/sql/NClob;" since="9"/>
+		<method name="getNClob(Ljava/lang/String;)Ljava/sql/NClob;" since="9"/>
+		<method name="getNString(I)Ljava/lang/String;" since="9"/>
+		<method name="getNString(Ljava/lang/String;)Ljava/lang/String;" since="9"/>
+		<method name="getObject(I)Ljava/lang/Object;"/>
+		<method name="getObject(ILjava/util/Map;)Ljava/lang/Object;"/>
+		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getObject(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/Object;"/>
+		<method name="getRef(I)Ljava/sql/Ref;"/>
+		<method name="getRef(Ljava/lang/String;)Ljava/sql/Ref;"/>
+		<method name="getRowId(I)Ljava/sql/RowId;" since="9"/>
+		<method name="getRowId(Ljava/lang/String;)Ljava/sql/RowId;" since="9"/>
+		<method name="getSQLXML(I)Ljava/sql/SQLXML;" since="9"/>
+		<method name="getSQLXML(Ljava/lang/String;)Ljava/sql/SQLXML;" since="9"/>
+		<method name="getShort(I)S"/>
+		<method name="getShort(Ljava/lang/String;)S"/>
+		<method name="getString(I)Ljava/lang/String;"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getTime(I)Ljava/sql/Time;"/>
+		<method name="getTime(ILjava/util/Calendar;)Ljava/sql/Time;"/>
+		<method name="getTime(Ljava/lang/String;)Ljava/sql/Time;"/>
+		<method name="getTime(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Time;"/>
+		<method name="getTimestamp(I)Ljava/sql/Timestamp;"/>
+		<method name="getTimestamp(ILjava/util/Calendar;)Ljava/sql/Timestamp;"/>
+		<method name="getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;"/>
+		<method name="getTimestamp(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Timestamp;"/>
+		<method name="getURL(I)Ljava/net/URL;"/>
+		<method name="getURL(Ljava/lang/String;)Ljava/net/URL;"/>
+		<method name="registerOutParameter(II)V"/>
+		<method name="registerOutParameter(III)V"/>
+		<method name="registerOutParameter(IILjava/lang/String;)V"/>
+		<method name="registerOutParameter(Ljava/lang/String;I)V"/>
+		<method name="registerOutParameter(Ljava/lang/String;II)V"/>
+		<method name="registerOutParameter(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
+		<method name="setBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V"/>
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
+		<method name="setBlob(Ljava/lang/String;Ljava/sql/Blob;)V" since="9"/>
+		<method name="setBoolean(Ljava/lang/String;Z)V"/>
+		<method name="setByte(Ljava/lang/String;B)V"/>
+		<method name="setBytes(Ljava/lang/String;[B)V"/>
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V"/>
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="setClob(Ljava/lang/String;Ljava/sql/Clob;)V" since="9"/>
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;)V"/>
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;Ljava/util/Calendar;)V"/>
+		<method name="setDouble(Ljava/lang/String;D)V"/>
+		<method name="setFloat(Ljava/lang/String;F)V"/>
+		<method name="setInt(Ljava/lang/String;I)V"/>
+		<method name="setLong(Ljava/lang/String;J)V"/>
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="setNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9"/>
+		<method name="setNString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
+		<method name="setNull(Ljava/lang/String;I)V"/>
+		<method name="setNull(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;I)V"/>
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;II)V"/>
+		<method name="setRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9"/>
+		<method name="setSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9"/>
+		<method name="setShort(Ljava/lang/String;S)V"/>
+		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;)V"/>
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;Ljava/util/Calendar;)V"/>
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V"/>
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;Ljava/util/Calendar;)V"/>
+		<method name="setURL(Ljava/lang/String;Ljava/net/URL;)V"/>
+		<method name="wasNull()Z"/>
+	</class>
+	<class name="java/sql/ClientInfoStatus" since="9">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/ClientInfoStatus;"/>
+		<method name="values()[Ljava/sql/ClientInfoStatus;"/>
+		<field name="REASON_UNKNOWN"/>
+		<field name="REASON_UNKNOWN_PROPERTY"/>
+		<field name="REASON_VALUE_INVALID"/>
+		<field name="REASON_VALUE_TRUNCATED"/>
+	</class>
+	<class name="java/sql/Clob" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="free()V" since="9"/>
+		<method name="getAsciiStream()Ljava/io/InputStream;"/>
+		<method name="getCharacterStream()Ljava/io/Reader;"/>
+		<method name="getCharacterStream(JJ)Ljava/io/Reader;" since="9"/>
+		<method name="getSubString(JI)Ljava/lang/String;"/>
+		<method name="length()J"/>
+		<method name="position(Ljava/lang/String;J)J"/>
+		<method name="position(Ljava/sql/Clob;J)J"/>
+		<method name="setAsciiStream(J)Ljava/io/OutputStream;"/>
+		<method name="setCharacterStream(J)Ljava/io/Writer;"/>
+		<method name="setString(JLjava/lang/String;)I"/>
+		<method name="setString(JLjava/lang/String;II)I"/>
+		<method name="truncate(J)V"/>
+	</class>
+	<class name="java/sql/Connection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<implements name="java/sql/Wrapper" since="9"/>
+		<method name="clearWarnings()V"/>
+		<method name="close()V"/>
+		<method name="commit()V"/>
+		<method name="createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;" since="9"/>
+		<method name="createBlob()Ljava/sql/Blob;" since="9"/>
+		<method name="createClob()Ljava/sql/Clob;" since="9"/>
+		<method name="createNClob()Ljava/sql/NClob;" since="9"/>
+		<method name="createSQLXML()Ljava/sql/SQLXML;" since="9"/>
+		<method name="createStatement()Ljava/sql/Statement;"/>
+		<method name="createStatement(II)Ljava/sql/Statement;"/>
+		<method name="createStatement(III)Ljava/sql/Statement;"/>
+		<method name="createStruct(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Struct;" since="9"/>
+		<method name="getAutoCommit()Z"/>
+		<method name="getCatalog()Ljava/lang/String;"/>
+		<method name="getClientInfo()Ljava/util/Properties;" since="9"/>
+		<method name="getClientInfo(Ljava/lang/String;)Ljava/lang/String;" since="9"/>
+		<method name="getHoldability()I"/>
+		<method name="getMetaData()Ljava/sql/DatabaseMetaData;"/>
+		<method name="getTransactionIsolation()I"/>
+		<method name="getTypeMap()Ljava/util/Map;"/>
+		<method name="getWarnings()Ljava/sql/SQLWarning;"/>
+		<method name="isClosed()Z"/>
+		<method name="isReadOnly()Z"/>
+		<method name="isValid(I)Z" since="9"/>
+		<method name="nativeSQL(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="prepareCall(Ljava/lang/String;)Ljava/sql/CallableStatement;"/>
+		<method name="prepareCall(Ljava/lang/String;II)Ljava/sql/CallableStatement;"/>
+		<method name="prepareCall(Ljava/lang/String;III)Ljava/sql/CallableStatement;"/>
+		<method name="prepareStatement(Ljava/lang/String;)Ljava/sql/PreparedStatement;"/>
+		<method name="prepareStatement(Ljava/lang/String;I)Ljava/sql/PreparedStatement;"/>
+		<method name="prepareStatement(Ljava/lang/String;II)Ljava/sql/PreparedStatement;"/>
+		<method name="prepareStatement(Ljava/lang/String;III)Ljava/sql/PreparedStatement;"/>
+		<method name="prepareStatement(Ljava/lang/String;[I)Ljava/sql/PreparedStatement;"/>
+		<method name="prepareStatement(Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/PreparedStatement;"/>
+		<method name="releaseSavepoint(Ljava/sql/Savepoint;)V"/>
+		<method name="rollback()V"/>
+		<method name="rollback(Ljava/sql/Savepoint;)V"/>
+		<method name="setAutoCommit(Z)V"/>
+		<method name="setCatalog(Ljava/lang/String;)V"/>
+		<method name="setClientInfo(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
+		<method name="setClientInfo(Ljava/util/Properties;)V" since="9"/>
+		<method name="setHoldability(I)V"/>
+		<method name="setReadOnly(Z)V"/>
+		<method name="setSavepoint()Ljava/sql/Savepoint;"/>
+		<method name="setSavepoint(Ljava/lang/String;)Ljava/sql/Savepoint;"/>
+		<method name="setTransactionIsolation(I)V"/>
+		<method name="setTypeMap(Ljava/util/Map;)V"/>
+		<field name="TRANSACTION_NONE"/>
+		<field name="TRANSACTION_READ_COMMITTED"/>
+		<field name="TRANSACTION_READ_UNCOMMITTED"/>
+		<field name="TRANSACTION_REPEATABLE_READ"/>
+		<field name="TRANSACTION_SERIALIZABLE"/>
+	</class>
+	<class name="java/sql/DataTruncation" since="1">
+		<extends name="java/sql/SQLWarning"/>
+		<method name="&lt;init>(IZZII)V"/>
+		<method name="&lt;init>(IZZIILjava/lang/Throwable;)V" since="9"/>
+		<method name="getDataSize()I"/>
+		<method name="getIndex()I"/>
+		<method name="getParameter()Z"/>
+		<method name="getRead()Z"/>
+		<method name="getTransferSize()I"/>
+	</class>
+	<class name="java/sql/DatabaseMetaData" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/Wrapper" since="9"/>
+		<method name="allProceduresAreCallable()Z"/>
+		<method name="allTablesAreSelectable()Z"/>
+		<method name="autoCommitFailureClosesAllResultSets()Z" since="9"/>
+		<method name="dataDefinitionCausesTransactionCommit()Z"/>
+		<method name="dataDefinitionIgnoredInTransactions()Z"/>
+		<method name="deletesAreDetected(I)Z"/>
+		<method name="doesMaxRowSizeIncludeBlobs()Z"/>
+		<method name="getAttributes(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getBestRowIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)Ljava/sql/ResultSet;"/>
+		<method name="getCatalogSeparator()Ljava/lang/String;"/>
+		<method name="getCatalogTerm()Ljava/lang/String;"/>
+		<method name="getCatalogs()Ljava/sql/ResultSet;"/>
+		<method name="getClientInfoProperties()Ljava/sql/ResultSet;" since="9"/>
+		<method name="getColumnPrivileges(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getConnection()Ljava/sql/Connection;"/>
+		<method name="getCrossReference(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getDatabaseMajorVersion()I"/>
+		<method name="getDatabaseMinorVersion()I"/>
+		<method name="getDatabaseProductName()Ljava/lang/String;"/>
+		<method name="getDatabaseProductVersion()Ljava/lang/String;"/>
+		<method name="getDefaultTransactionIsolation()I"/>
+		<method name="getDriverMajorVersion()I"/>
+		<method name="getDriverMinorVersion()I"/>
+		<method name="getDriverName()Ljava/lang/String;"/>
+		<method name="getDriverVersion()Ljava/lang/String;"/>
+		<method name="getExportedKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getExtraNameCharacters()Ljava/lang/String;"/>
+		<method name="getFunctionColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9"/>
+		<method name="getFunctions(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9"/>
+		<method name="getIdentifierQuoteString()Ljava/lang/String;"/>
+		<method name="getImportedKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getIndexInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ)Ljava/sql/ResultSet;"/>
+		<method name="getJDBCMajorVersion()I"/>
+		<method name="getJDBCMinorVersion()I"/>
+		<method name="getMaxBinaryLiteralLength()I"/>
+		<method name="getMaxCatalogNameLength()I"/>
+		<method name="getMaxCharLiteralLength()I"/>
+		<method name="getMaxColumnNameLength()I"/>
+		<method name="getMaxColumnsInGroupBy()I"/>
+		<method name="getMaxColumnsInIndex()I"/>
+		<method name="getMaxColumnsInOrderBy()I"/>
+		<method name="getMaxColumnsInSelect()I"/>
+		<method name="getMaxColumnsInTable()I"/>
+		<method name="getMaxConnections()I"/>
+		<method name="getMaxCursorNameLength()I"/>
+		<method name="getMaxIndexLength()I"/>
+		<method name="getMaxProcedureNameLength()I"/>
+		<method name="getMaxRowSize()I"/>
+		<method name="getMaxSchemaNameLength()I"/>
+		<method name="getMaxStatementLength()I"/>
+		<method name="getMaxStatements()I"/>
+		<method name="getMaxTableNameLength()I"/>
+		<method name="getMaxTablesInSelect()I"/>
+		<method name="getMaxUserNameLength()I"/>
+		<method name="getNumericFunctions()Ljava/lang/String;"/>
+		<method name="getPrimaryKeys(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getProcedureColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getProcedureTerm()Ljava/lang/String;"/>
+		<method name="getProcedures(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getResultSetHoldability()I"/>
+		<method name="getRowIdLifetime()Ljava/sql/RowIdLifetime;" since="9"/>
+		<method name="getSQLKeywords()Ljava/lang/String;"/>
+		<method name="getSQLStateType()I"/>
+		<method name="getSchemaTerm()Ljava/lang/String;"/>
+		<method name="getSchemas()Ljava/sql/ResultSet;"/>
+		<method name="getSchemas(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;" since="9"/>
+		<method name="getSearchStringEscape()Ljava/lang/String;"/>
+		<method name="getStringFunctions()Ljava/lang/String;"/>
+		<method name="getSuperTables(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getSuperTypes(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getSystemFunctions()Ljava/lang/String;"/>
+		<method name="getTablePrivileges(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getTableTypes()Ljava/sql/ResultSet;"/>
+		<method name="getTables(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="getTimeDateFunctions()Ljava/lang/String;"/>
+		<method name="getTypeInfo()Ljava/sql/ResultSet;"/>
+		<method name="getUDTs(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[I)Ljava/sql/ResultSet;"/>
+		<method name="getURL()Ljava/lang/String;"/>
+		<method name="getUserName()Ljava/lang/String;"/>
+		<method name="getVersionColumns(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="insertsAreDetected(I)Z"/>
+		<method name="isCatalogAtStart()Z"/>
+		<method name="isReadOnly()Z"/>
+		<method name="locatorsUpdateCopy()Z"/>
+		<method name="nullPlusNonNullIsNull()Z"/>
+		<method name="nullsAreSortedAtEnd()Z"/>
+		<method name="nullsAreSortedAtStart()Z"/>
+		<method name="nullsAreSortedHigh()Z"/>
+		<method name="nullsAreSortedLow()Z"/>
+		<method name="othersDeletesAreVisible(I)Z"/>
+		<method name="othersInsertsAreVisible(I)Z"/>
+		<method name="othersUpdatesAreVisible(I)Z"/>
+		<method name="ownDeletesAreVisible(I)Z"/>
+		<method name="ownInsertsAreVisible(I)Z"/>
+		<method name="ownUpdatesAreVisible(I)Z"/>
+		<method name="storesLowerCaseIdentifiers()Z"/>
+		<method name="storesLowerCaseQuotedIdentifiers()Z"/>
+		<method name="storesMixedCaseIdentifiers()Z"/>
+		<method name="storesMixedCaseQuotedIdentifiers()Z"/>
+		<method name="storesUpperCaseIdentifiers()Z"/>
+		<method name="storesUpperCaseQuotedIdentifiers()Z"/>
+		<method name="supportsANSI92EntryLevelSQL()Z"/>
+		<method name="supportsANSI92FullSQL()Z"/>
+		<method name="supportsANSI92IntermediateSQL()Z"/>
+		<method name="supportsAlterTableWithAddColumn()Z"/>
+		<method name="supportsAlterTableWithDropColumn()Z"/>
+		<method name="supportsBatchUpdates()Z"/>
+		<method name="supportsCatalogsInDataManipulation()Z"/>
+		<method name="supportsCatalogsInIndexDefinitions()Z"/>
+		<method name="supportsCatalogsInPrivilegeDefinitions()Z"/>
+		<method name="supportsCatalogsInProcedureCalls()Z"/>
+		<method name="supportsCatalogsInTableDefinitions()Z"/>
+		<method name="supportsColumnAliasing()Z"/>
+		<method name="supportsConvert()Z"/>
+		<method name="supportsConvert(II)Z"/>
+		<method name="supportsCoreSQLGrammar()Z"/>
+		<method name="supportsCorrelatedSubqueries()Z"/>
+		<method name="supportsDataDefinitionAndDataManipulationTransactions()Z"/>
+		<method name="supportsDataManipulationTransactionsOnly()Z"/>
+		<method name="supportsDifferentTableCorrelationNames()Z"/>
+		<method name="supportsExpressionsInOrderBy()Z"/>
+		<method name="supportsExtendedSQLGrammar()Z"/>
+		<method name="supportsFullOuterJoins()Z"/>
+		<method name="supportsGetGeneratedKeys()Z"/>
+		<method name="supportsGroupBy()Z"/>
+		<method name="supportsGroupByBeyondSelect()Z"/>
+		<method name="supportsGroupByUnrelated()Z"/>
+		<method name="supportsIntegrityEnhancementFacility()Z"/>
+		<method name="supportsLikeEscapeClause()Z"/>
+		<method name="supportsLimitedOuterJoins()Z"/>
+		<method name="supportsMinimumSQLGrammar()Z"/>
+		<method name="supportsMixedCaseIdentifiers()Z"/>
+		<method name="supportsMixedCaseQuotedIdentifiers()Z"/>
+		<method name="supportsMultipleOpenResults()Z"/>
+		<method name="supportsMultipleResultSets()Z"/>
+		<method name="supportsMultipleTransactions()Z"/>
+		<method name="supportsNamedParameters()Z"/>
+		<method name="supportsNonNullableColumns()Z"/>
+		<method name="supportsOpenCursorsAcrossCommit()Z"/>
+		<method name="supportsOpenCursorsAcrossRollback()Z"/>
+		<method name="supportsOpenStatementsAcrossCommit()Z"/>
+		<method name="supportsOpenStatementsAcrossRollback()Z"/>
+		<method name="supportsOrderByUnrelated()Z"/>
+		<method name="supportsOuterJoins()Z"/>
+		<method name="supportsPositionedDelete()Z"/>
+		<method name="supportsPositionedUpdate()Z"/>
+		<method name="supportsResultSetConcurrency(II)Z"/>
+		<method name="supportsResultSetHoldability(I)Z"/>
+		<method name="supportsResultSetType(I)Z"/>
+		<method name="supportsSavepoints()Z"/>
+		<method name="supportsSchemasInDataManipulation()Z"/>
+		<method name="supportsSchemasInIndexDefinitions()Z"/>
+		<method name="supportsSchemasInPrivilegeDefinitions()Z"/>
+		<method name="supportsSchemasInProcedureCalls()Z"/>
+		<method name="supportsSchemasInTableDefinitions()Z"/>
+		<method name="supportsSelectForUpdate()Z"/>
+		<method name="supportsStatementPooling()Z"/>
+		<method name="supportsStoredFunctionsUsingCallSyntax()Z" since="9"/>
+		<method name="supportsStoredProcedures()Z"/>
+		<method name="supportsSubqueriesInComparisons()Z"/>
+		<method name="supportsSubqueriesInExists()Z"/>
+		<method name="supportsSubqueriesInIns()Z"/>
+		<method name="supportsSubqueriesInQuantifieds()Z"/>
+		<method name="supportsTableCorrelationNames()Z"/>
+		<method name="supportsTransactionIsolationLevel(I)Z"/>
+		<method name="supportsTransactions()Z"/>
+		<method name="supportsUnion()Z"/>
+		<method name="supportsUnionAll()Z"/>
+		<method name="updatesAreDetected(I)Z"/>
+		<method name="usesLocalFilePerTable()Z"/>
+		<method name="usesLocalFiles()Z"/>
+		<field name="attributeNoNulls"/>
+		<field name="attributeNullable"/>
+		<field name="attributeNullableUnknown"/>
+		<field name="bestRowNotPseudo"/>
+		<field name="bestRowPseudo"/>
+		<field name="bestRowSession"/>
+		<field name="bestRowTemporary"/>
+		<field name="bestRowTransaction"/>
+		<field name="bestRowUnknown"/>
+		<field name="columnNoNulls"/>
+		<field name="columnNullable"/>
+		<field name="columnNullableUnknown"/>
+		<field name="functionColumnIn" since="9"/>
+		<field name="functionColumnInOut" since="9"/>
+		<field name="functionColumnOut" since="9"/>
+		<field name="functionColumnResult" since="9"/>
+		<field name="functionColumnUnknown" since="9"/>
+		<field name="functionNoNulls" since="9"/>
+		<field name="functionNoTable" since="9"/>
+		<field name="functionNullable" since="9"/>
+		<field name="functionNullableUnknown" since="9"/>
+		<field name="functionResultUnknown" since="9"/>
+		<field name="functionReturn" since="9"/>
+		<field name="functionReturnsTable" since="9"/>
+		<field name="importedKeyCascade"/>
+		<field name="importedKeyInitiallyDeferred"/>
+		<field name="importedKeyInitiallyImmediate"/>
+		<field name="importedKeyNoAction"/>
+		<field name="importedKeyNotDeferrable"/>
+		<field name="importedKeyRestrict"/>
+		<field name="importedKeySetDefault"/>
+		<field name="importedKeySetNull"/>
+		<field name="procedureColumnIn"/>
+		<field name="procedureColumnInOut"/>
+		<field name="procedureColumnOut"/>
+		<field name="procedureColumnResult"/>
+		<field name="procedureColumnReturn"/>
+		<field name="procedureColumnUnknown"/>
+		<field name="procedureNoNulls"/>
+		<field name="procedureNoResult"/>
+		<field name="procedureNullable"/>
+		<field name="procedureNullableUnknown"/>
+		<field name="procedureResultUnknown"/>
+		<field name="procedureReturnsResult"/>
+		<field name="sqlStateSQL" since="9"/>
+		<field name="sqlStateSQL99"/>
+		<field name="sqlStateXOpen"/>
+		<field name="tableIndexClustered"/>
+		<field name="tableIndexHashed"/>
+		<field name="tableIndexOther"/>
+		<field name="tableIndexStatistic"/>
+		<field name="typeNoNulls"/>
+		<field name="typeNullable"/>
+		<field name="typeNullableUnknown"/>
+		<field name="typePredBasic"/>
+		<field name="typePredChar"/>
+		<field name="typePredNone"/>
+		<field name="typeSearchable"/>
+		<field name="versionColumnNotPseudo"/>
+		<field name="versionColumnPseudo"/>
+		<field name="versionColumnUnknown"/>
+	</class>
+	<class name="java/sql/Date" since="1">
+		<extends name="java/util/Date"/>
+		<method name="&lt;init>(III)V" deprecated="15"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Date;"/>
+	</class>
+	<class name="java/sql/Driver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="acceptsURL(Ljava/lang/String;)Z"/>
+		<method name="connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;"/>
+		<method name="getMajorVersion()I"/>
+		<method name="getMinorVersion()I"/>
+		<method name="getPropertyInfo(Ljava/lang/String;Ljava/util/Properties;)[Ljava/sql/DriverPropertyInfo;"/>
+		<method name="jdbcCompliant()Z"/>
+	</class>
+	<class name="java/sql/DriverManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="deregisterDriver(Ljava/sql/Driver;)V"/>
+		<method name="getConnection(Ljava/lang/String;)Ljava/sql/Connection;"/>
+		<method name="getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;"/>
+		<method name="getConnection(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;"/>
+		<method name="getDriver(Ljava/lang/String;)Ljava/sql/Driver;"/>
+		<method name="getDrivers()Ljava/util/Enumeration;"/>
+		<method name="getLogStream()Ljava/io/PrintStream;" deprecated="15"/>
+		<method name="getLogWriter()Ljava/io/PrintWriter;"/>
+		<method name="getLoginTimeout()I"/>
+		<method name="println(Ljava/lang/String;)V"/>
+		<method name="registerDriver(Ljava/sql/Driver;)V"/>
+		<method name="setLogStream(Ljava/io/PrintStream;)V" deprecated="15"/>
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V"/>
+		<method name="setLoginTimeout(I)V"/>
+	</class>
+	<class name="java/sql/DriverPropertyInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="choices"/>
+		<field name="description"/>
+		<field name="name"/>
+		<field name="required"/>
+		<field name="value"/>
+	</class>
+	<class name="java/sql/NClob" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/Clob"/>
+	</class>
+	<class name="java/sql/ParameterMetaData" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/Wrapper" since="9"/>
+		<method name="getParameterClassName(I)Ljava/lang/String;"/>
+		<method name="getParameterCount()I"/>
+		<method name="getParameterMode(I)I"/>
+		<method name="getParameterType(I)I"/>
+		<method name="getParameterTypeName(I)Ljava/lang/String;"/>
+		<method name="getPrecision(I)I"/>
+		<method name="getScale(I)I"/>
+		<method name="isNullable(I)I"/>
+		<method name="isSigned(I)Z"/>
+		<field name="parameterModeIn"/>
+		<field name="parameterModeInOut"/>
+		<field name="parameterModeOut"/>
+		<field name="parameterModeUnknown"/>
+		<field name="parameterNoNulls"/>
+		<field name="parameterNullable"/>
+		<field name="parameterNullableUnknown"/>
+	</class>
+	<class name="java/sql/PreparedStatement" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/Statement"/>
+		<method name="addBatch()V"/>
+		<method name="clearParameters()V"/>
+		<method name="execute()Z"/>
+		<method name="executeQuery()Ljava/sql/ResultSet;"/>
+		<method name="executeUpdate()I"/>
+		<method name="getMetaData()Ljava/sql/ResultSetMetaData;"/>
+		<method name="getParameterMetaData()Ljava/sql/ParameterMetaData;"/>
+		<method name="setArray(ILjava/sql/Array;)V"/>
+		<method name="setAsciiStream(ILjava/io/InputStream;)V" since="9"/>
+		<method name="setAsciiStream(ILjava/io/InputStream;I)V"/>
+		<method name="setAsciiStream(ILjava/io/InputStream;J)V" since="9"/>
+		<method name="setBigDecimal(ILjava/math/BigDecimal;)V"/>
+		<method name="setBinaryStream(ILjava/io/InputStream;)V" since="9"/>
+		<method name="setBinaryStream(ILjava/io/InputStream;I)V"/>
+		<method name="setBinaryStream(ILjava/io/InputStream;J)V" since="9"/>
+		<method name="setBlob(ILjava/io/InputStream;)V" since="9"/>
+		<method name="setBlob(ILjava/io/InputStream;J)V" since="9"/>
+		<method name="setBlob(ILjava/sql/Blob;)V"/>
+		<method name="setBoolean(IZ)V"/>
+		<method name="setByte(IB)V"/>
+		<method name="setBytes(I[B)V"/>
+		<method name="setCharacterStream(ILjava/io/Reader;)V" since="9"/>
+		<method name="setCharacterStream(ILjava/io/Reader;I)V"/>
+		<method name="setCharacterStream(ILjava/io/Reader;J)V" since="9"/>
+		<method name="setClob(ILjava/io/Reader;)V" since="9"/>
+		<method name="setClob(ILjava/io/Reader;J)V" since="9"/>
+		<method name="setClob(ILjava/sql/Clob;)V"/>
+		<method name="setDate(ILjava/sql/Date;)V"/>
+		<method name="setDate(ILjava/sql/Date;Ljava/util/Calendar;)V"/>
+		<method name="setDouble(ID)V"/>
+		<method name="setFloat(IF)V"/>
+		<method name="setInt(II)V"/>
+		<method name="setLong(IJ)V"/>
+		<method name="setNCharacterStream(ILjava/io/Reader;)V" since="9"/>
+		<method name="setNCharacterStream(ILjava/io/Reader;J)V" since="9"/>
+		<method name="setNClob(ILjava/io/Reader;)V" since="9"/>
+		<method name="setNClob(ILjava/io/Reader;J)V" since="9"/>
+		<method name="setNClob(ILjava/sql/NClob;)V" since="9"/>
+		<method name="setNString(ILjava/lang/String;)V" since="9"/>
+		<method name="setNull(II)V"/>
+		<method name="setNull(IILjava/lang/String;)V"/>
+		<method name="setObject(ILjava/lang/Object;)V"/>
+		<method name="setObject(ILjava/lang/Object;I)V"/>
+		<method name="setObject(ILjava/lang/Object;II)V"/>
+		<method name="setRef(ILjava/sql/Ref;)V"/>
+		<method name="setRowId(ILjava/sql/RowId;)V" since="9"/>
+		<method name="setSQLXML(ILjava/sql/SQLXML;)V" since="9"/>
+		<method name="setShort(IS)V"/>
+		<method name="setString(ILjava/lang/String;)V"/>
+		<method name="setTime(ILjava/sql/Time;)V"/>
+		<method name="setTime(ILjava/sql/Time;Ljava/util/Calendar;)V"/>
+		<method name="setTimestamp(ILjava/sql/Timestamp;)V"/>
+		<method name="setTimestamp(ILjava/sql/Timestamp;Ljava/util/Calendar;)V"/>
+		<method name="setURL(ILjava/net/URL;)V"/>
+		<method name="setUnicodeStream(ILjava/io/InputStream;I)V" deprecated="15"/>
+	</class>
+	<class name="java/sql/Ref" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getBaseTypeName()Ljava/lang/String;"/>
+		<method name="getObject()Ljava/lang/Object;"/>
+		<method name="getObject(Ljava/util/Map;)Ljava/lang/Object;"/>
+		<method name="setObject(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/sql/ResultSet" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<implements name="java/sql/Wrapper" since="9"/>
+		<method name="absolute(I)Z"/>
+		<method name="afterLast()V"/>
+		<method name="beforeFirst()V"/>
+		<method name="cancelRowUpdates()V"/>
+		<method name="clearWarnings()V"/>
+		<method name="close()V"/>
+		<method name="deleteRow()V"/>
+		<method name="findColumn(Ljava/lang/String;)I"/>
+		<method name="first()Z"/>
+		<method name="getArray(I)Ljava/sql/Array;"/>
+		<method name="getArray(Ljava/lang/String;)Ljava/sql/Array;"/>
+		<method name="getAsciiStream(I)Ljava/io/InputStream;"/>
+		<method name="getAsciiStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
+		<method name="getBigDecimal(I)Ljava/math/BigDecimal;"/>
+		<method name="getBigDecimal(II)Ljava/math/BigDecimal;" deprecated="15"/>
+		<method name="getBigDecimal(Ljava/lang/String;)Ljava/math/BigDecimal;"/>
+		<method name="getBigDecimal(Ljava/lang/String;I)Ljava/math/BigDecimal;" deprecated="15"/>
+		<method name="getBinaryStream(I)Ljava/io/InputStream;"/>
+		<method name="getBinaryStream(Ljava/lang/String;)Ljava/io/InputStream;"/>
+		<method name="getBlob(I)Ljava/sql/Blob;"/>
+		<method name="getBlob(Ljava/lang/String;)Ljava/sql/Blob;"/>
+		<method name="getBoolean(I)Z"/>
+		<method name="getBoolean(Ljava/lang/String;)Z"/>
+		<method name="getByte(I)B"/>
+		<method name="getByte(Ljava/lang/String;)B"/>
+		<method name="getBytes(I)[B"/>
+		<method name="getBytes(Ljava/lang/String;)[B"/>
+		<method name="getCharacterStream(I)Ljava/io/Reader;"/>
+		<method name="getCharacterStream(Ljava/lang/String;)Ljava/io/Reader;"/>
+		<method name="getClob(I)Ljava/sql/Clob;"/>
+		<method name="getClob(Ljava/lang/String;)Ljava/sql/Clob;"/>
+		<method name="getConcurrency()I"/>
+		<method name="getCursorName()Ljava/lang/String;"/>
+		<method name="getDate(I)Ljava/sql/Date;"/>
+		<method name="getDate(ILjava/util/Calendar;)Ljava/sql/Date;"/>
+		<method name="getDate(Ljava/lang/String;)Ljava/sql/Date;"/>
+		<method name="getDate(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Date;"/>
+		<method name="getDouble(I)D"/>
+		<method name="getDouble(Ljava/lang/String;)D"/>
+		<method name="getFetchDirection()I"/>
+		<method name="getFetchSize()I"/>
+		<method name="getFloat(I)F"/>
+		<method name="getFloat(Ljava/lang/String;)F"/>
+		<method name="getHoldability()I" since="9"/>
+		<method name="getInt(I)I"/>
+		<method name="getInt(Ljava/lang/String;)I"/>
+		<method name="getLong(I)J"/>
+		<method name="getLong(Ljava/lang/String;)J"/>
+		<method name="getMetaData()Ljava/sql/ResultSetMetaData;"/>
+		<method name="getNCharacterStream(I)Ljava/io/Reader;" since="9"/>
+		<method name="getNCharacterStream(Ljava/lang/String;)Ljava/io/Reader;" since="9"/>
+		<method name="getNClob(I)Ljava/sql/NClob;" since="9"/>
+		<method name="getNClob(Ljava/lang/String;)Ljava/sql/NClob;" since="9"/>
+		<method name="getNString(I)Ljava/lang/String;" since="9"/>
+		<method name="getNString(Ljava/lang/String;)Ljava/lang/String;" since="9"/>
+		<method name="getObject(I)Ljava/lang/Object;"/>
+		<method name="getObject(ILjava/util/Map;)Ljava/lang/Object;"/>
+		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getObject(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/Object;"/>
+		<method name="getRef(I)Ljava/sql/Ref;"/>
+		<method name="getRef(Ljava/lang/String;)Ljava/sql/Ref;"/>
+		<method name="getRow()I"/>
+		<method name="getRowId(I)Ljava/sql/RowId;" since="9"/>
+		<method name="getRowId(Ljava/lang/String;)Ljava/sql/RowId;" since="9"/>
+		<method name="getSQLXML(I)Ljava/sql/SQLXML;" since="9"/>
+		<method name="getSQLXML(Ljava/lang/String;)Ljava/sql/SQLXML;" since="9"/>
+		<method name="getShort(I)S"/>
+		<method name="getShort(Ljava/lang/String;)S"/>
+		<method name="getStatement()Ljava/sql/Statement;"/>
+		<method name="getString(I)Ljava/lang/String;"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getTime(I)Ljava/sql/Time;"/>
+		<method name="getTime(ILjava/util/Calendar;)Ljava/sql/Time;"/>
+		<method name="getTime(Ljava/lang/String;)Ljava/sql/Time;"/>
+		<method name="getTime(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Time;"/>
+		<method name="getTimestamp(I)Ljava/sql/Timestamp;"/>
+		<method name="getTimestamp(ILjava/util/Calendar;)Ljava/sql/Timestamp;"/>
+		<method name="getTimestamp(Ljava/lang/String;)Ljava/sql/Timestamp;"/>
+		<method name="getTimestamp(Ljava/lang/String;Ljava/util/Calendar;)Ljava/sql/Timestamp;"/>
+		<method name="getType()I"/>
+		<method name="getURL(I)Ljava/net/URL;"/>
+		<method name="getURL(Ljava/lang/String;)Ljava/net/URL;"/>
+		<method name="getUnicodeStream(I)Ljava/io/InputStream;" deprecated="15"/>
+		<method name="getUnicodeStream(Ljava/lang/String;)Ljava/io/InputStream;" deprecated="15"/>
+		<method name="getWarnings()Ljava/sql/SQLWarning;"/>
+		<method name="insertRow()V"/>
+		<method name="isAfterLast()Z"/>
+		<method name="isBeforeFirst()Z"/>
+		<method name="isClosed()Z" since="9"/>
+		<method name="isFirst()Z"/>
+		<method name="isLast()Z"/>
+		<method name="last()Z"/>
+		<method name="moveToCurrentRow()V"/>
+		<method name="moveToInsertRow()V"/>
+		<method name="next()Z"/>
+		<method name="previous()Z"/>
+		<method name="refreshRow()V"/>
+		<method name="relative(I)Z"/>
+		<method name="rowDeleted()Z"/>
+		<method name="rowInserted()Z"/>
+		<method name="rowUpdated()Z"/>
+		<method name="setFetchDirection(I)V"/>
+		<method name="setFetchSize(I)V"/>
+		<method name="updateArray(ILjava/sql/Array;)V"/>
+		<method name="updateArray(Ljava/lang/String;Ljava/sql/Array;)V"/>
+		<method name="updateAsciiStream(ILjava/io/InputStream;)V" since="9"/>
+		<method name="updateAsciiStream(ILjava/io/InputStream;I)V"/>
+		<method name="updateAsciiStream(ILjava/io/InputStream;J)V" since="9"/>
+		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
+		<method name="updateAsciiStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
+		<method name="updateBigDecimal(ILjava/math/BigDecimal;)V"/>
+		<method name="updateBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V"/>
+		<method name="updateBinaryStream(ILjava/io/InputStream;)V" since="9"/>
+		<method name="updateBinaryStream(ILjava/io/InputStream;I)V"/>
+		<method name="updateBinaryStream(ILjava/io/InputStream;J)V" since="9"/>
+		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V"/>
+		<method name="updateBinaryStream(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
+		<method name="updateBlob(ILjava/io/InputStream;)V" since="9"/>
+		<method name="updateBlob(ILjava/io/InputStream;J)V" since="9"/>
+		<method name="updateBlob(ILjava/sql/Blob;)V"/>
+		<method name="updateBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="updateBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
+		<method name="updateBlob(Ljava/lang/String;Ljava/sql/Blob;)V"/>
+		<method name="updateBoolean(IZ)V"/>
+		<method name="updateBoolean(Ljava/lang/String;Z)V"/>
+		<method name="updateByte(IB)V"/>
+		<method name="updateByte(Ljava/lang/String;B)V"/>
+		<method name="updateBytes(I[B)V"/>
+		<method name="updateBytes(Ljava/lang/String;[B)V"/>
+		<method name="updateCharacterStream(ILjava/io/Reader;)V" since="9"/>
+		<method name="updateCharacterStream(ILjava/io/Reader;I)V"/>
+		<method name="updateCharacterStream(ILjava/io/Reader;J)V" since="9"/>
+		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V"/>
+		<method name="updateCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="updateClob(ILjava/io/Reader;)V" since="9"/>
+		<method name="updateClob(ILjava/io/Reader;J)V" since="9"/>
+		<method name="updateClob(ILjava/sql/Clob;)V"/>
+		<method name="updateClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="updateClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="updateClob(Ljava/lang/String;Ljava/sql/Clob;)V"/>
+		<method name="updateDate(ILjava/sql/Date;)V"/>
+		<method name="updateDate(Ljava/lang/String;Ljava/sql/Date;)V"/>
+		<method name="updateDouble(ID)V"/>
+		<method name="updateDouble(Ljava/lang/String;D)V"/>
+		<method name="updateFloat(IF)V"/>
+		<method name="updateFloat(Ljava/lang/String;F)V"/>
+		<method name="updateInt(II)V"/>
+		<method name="updateInt(Ljava/lang/String;I)V"/>
+		<method name="updateLong(IJ)V"/>
+		<method name="updateLong(Ljava/lang/String;J)V"/>
+		<method name="updateNCharacterStream(ILjava/io/Reader;)V" since="9"/>
+		<method name="updateNCharacterStream(ILjava/io/Reader;J)V" since="9"/>
+		<method name="updateNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="updateNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="updateNClob(ILjava/io/Reader;)V" since="9"/>
+		<method name="updateNClob(ILjava/io/Reader;J)V" since="9"/>
+		<method name="updateNClob(ILjava/sql/NClob;)V" since="9"/>
+		<method name="updateNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="updateNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="updateNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9"/>
+		<method name="updateNString(ILjava/lang/String;)V" since="9"/>
+		<method name="updateNString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
+		<method name="updateNull(I)V"/>
+		<method name="updateNull(Ljava/lang/String;)V"/>
+		<method name="updateObject(ILjava/lang/Object;)V"/>
+		<method name="updateObject(ILjava/lang/Object;I)V"/>
+		<method name="updateObject(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="updateObject(Ljava/lang/String;Ljava/lang/Object;I)V"/>
+		<method name="updateRef(ILjava/sql/Ref;)V"/>
+		<method name="updateRef(Ljava/lang/String;Ljava/sql/Ref;)V"/>
+		<method name="updateRow()V"/>
+		<method name="updateRowId(ILjava/sql/RowId;)V" since="9"/>
+		<method name="updateRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9"/>
+		<method name="updateSQLXML(ILjava/sql/SQLXML;)V" since="9"/>
+		<method name="updateSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9"/>
+		<method name="updateShort(IS)V"/>
+		<method name="updateShort(Ljava/lang/String;S)V"/>
+		<method name="updateString(ILjava/lang/String;)V"/>
+		<method name="updateString(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="updateTime(ILjava/sql/Time;)V"/>
+		<method name="updateTime(Ljava/lang/String;Ljava/sql/Time;)V"/>
+		<method name="updateTimestamp(ILjava/sql/Timestamp;)V"/>
+		<method name="updateTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V"/>
+		<method name="wasNull()Z"/>
+		<field name="CLOSE_CURSORS_AT_COMMIT"/>
+		<field name="CONCUR_READ_ONLY"/>
+		<field name="CONCUR_UPDATABLE"/>
+		<field name="FETCH_FORWARD"/>
+		<field name="FETCH_REVERSE"/>
+		<field name="FETCH_UNKNOWN"/>
+		<field name="HOLD_CURSORS_OVER_COMMIT"/>
+		<field name="TYPE_FORWARD_ONLY"/>
+		<field name="TYPE_SCROLL_INSENSITIVE"/>
+		<field name="TYPE_SCROLL_SENSITIVE"/>
+	</class>
+	<class name="java/sql/ResultSetMetaData" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/Wrapper" since="9"/>
+		<method name="getCatalogName(I)Ljava/lang/String;"/>
+		<method name="getColumnClassName(I)Ljava/lang/String;"/>
+		<method name="getColumnCount()I"/>
+		<method name="getColumnDisplaySize(I)I"/>
+		<method name="getColumnLabel(I)Ljava/lang/String;"/>
+		<method name="getColumnName(I)Ljava/lang/String;"/>
+		<method name="getColumnType(I)I"/>
+		<method name="getColumnTypeName(I)Ljava/lang/String;"/>
+		<method name="getPrecision(I)I"/>
+		<method name="getScale(I)I"/>
+		<method name="getSchemaName(I)Ljava/lang/String;"/>
+		<method name="getTableName(I)Ljava/lang/String;"/>
+		<method name="isAutoIncrement(I)Z"/>
+		<method name="isCaseSensitive(I)Z"/>
+		<method name="isCurrency(I)Z"/>
+		<method name="isDefinitelyWritable(I)Z"/>
+		<method name="isNullable(I)I"/>
+		<method name="isReadOnly(I)Z"/>
+		<method name="isSearchable(I)Z"/>
+		<method name="isSigned(I)Z"/>
+		<method name="isWritable(I)Z"/>
+		<field name="columnNoNulls"/>
+		<field name="columnNullable"/>
+		<field name="columnNullableUnknown"/>
+	</class>
+	<class name="java/sql/RowId" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="getBytes()[B"/>
+	</class>
+	<class name="java/sql/RowIdLifetime" since="9">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/RowIdLifetime;"/>
+		<method name="values()[Ljava/sql/RowIdLifetime;"/>
+		<field name="ROWID_UNSUPPORTED"/>
+		<field name="ROWID_VALID_FOREVER"/>
+		<field name="ROWID_VALID_OTHER"/>
+		<field name="ROWID_VALID_SESSION"/>
+		<field name="ROWID_VALID_TRANSACTION"/>
+	</class>
+	<class name="java/sql/SQLClientInfoException" since="9">
+		<extends name="java/sql/SQLException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/util/Map;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="&lt;init>(Ljava/util/Map;Ljava/lang/Throwable;)V"/>
+		<method name="getFailedProperties()Ljava/util/Map;"/>
+	</class>
+	<class name="java/sql/SQLData" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getSQLTypeName()Ljava/lang/String;"/>
+		<method name="readSQL(Ljava/sql/SQLInput;Ljava/lang/String;)V"/>
+		<method name="writeSQL(Ljava/sql/SQLOutput;)V"/>
+	</class>
+	<class name="java/sql/SQLDataException" since="9">
+		<extends name="java/sql/SQLNonTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLException" since="1">
+		<extends name="java/lang/Exception"/>
+		<implements name="java/lang/Iterable" since="9"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
+		<method name="getErrorCode()I"/>
+		<method name="getNextException()Ljava/sql/SQLException;"/>
+		<method name="getSQLState()Ljava/lang/String;"/>
+		<method name="setNextException(Ljava/sql/SQLException;)V"/>
+	</class>
+	<class name="java/sql/SQLFeatureNotSupportedException" since="9">
+		<extends name="java/sql/SQLNonTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLInput" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="readArray()Ljava/sql/Array;"/>
+		<method name="readAsciiStream()Ljava/io/InputStream;"/>
+		<method name="readBigDecimal()Ljava/math/BigDecimal;"/>
+		<method name="readBinaryStream()Ljava/io/InputStream;"/>
+		<method name="readBlob()Ljava/sql/Blob;"/>
+		<method name="readBoolean()Z"/>
+		<method name="readByte()B"/>
+		<method name="readBytes()[B"/>
+		<method name="readCharacterStream()Ljava/io/Reader;"/>
+		<method name="readClob()Ljava/sql/Clob;"/>
+		<method name="readDate()Ljava/sql/Date;"/>
+		<method name="readDouble()D"/>
+		<method name="readFloat()F"/>
+		<method name="readInt()I"/>
+		<method name="readLong()J"/>
+		<method name="readNClob()Ljava/sql/NClob;" since="9"/>
+		<method name="readNString()Ljava/lang/String;" since="9"/>
+		<method name="readObject()Ljava/lang/Object;"/>
+		<method name="readRef()Ljava/sql/Ref;"/>
+		<method name="readRowId()Ljava/sql/RowId;" since="9"/>
+		<method name="readSQLXML()Ljava/sql/SQLXML;" since="9"/>
+		<method name="readShort()S"/>
+		<method name="readString()Ljava/lang/String;"/>
+		<method name="readTime()Ljava/sql/Time;"/>
+		<method name="readTimestamp()Ljava/sql/Timestamp;"/>
+		<method name="readURL()Ljava/net/URL;"/>
+		<method name="wasNull()Z"/>
+	</class>
+	<class name="java/sql/SQLIntegrityConstraintViolationException" since="9">
+		<extends name="java/sql/SQLNonTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLInvalidAuthorizationSpecException" since="9">
+		<extends name="java/sql/SQLNonTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLNonTransientConnectionException" since="9">
+		<extends name="java/sql/SQLNonTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLNonTransientException" since="9">
+		<extends name="java/sql/SQLException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLOutput" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="writeArray(Ljava/sql/Array;)V"/>
+		<method name="writeAsciiStream(Ljava/io/InputStream;)V"/>
+		<method name="writeBigDecimal(Ljava/math/BigDecimal;)V"/>
+		<method name="writeBinaryStream(Ljava/io/InputStream;)V"/>
+		<method name="writeBlob(Ljava/sql/Blob;)V"/>
+		<method name="writeBoolean(Z)V"/>
+		<method name="writeByte(B)V"/>
+		<method name="writeBytes([B)V"/>
+		<method name="writeCharacterStream(Ljava/io/Reader;)V"/>
+		<method name="writeClob(Ljava/sql/Clob;)V"/>
+		<method name="writeDate(Ljava/sql/Date;)V"/>
+		<method name="writeDouble(D)V"/>
+		<method name="writeFloat(F)V"/>
+		<method name="writeInt(I)V"/>
+		<method name="writeLong(J)V"/>
+		<method name="writeNClob(Ljava/sql/NClob;)V" since="9"/>
+		<method name="writeNString(Ljava/lang/String;)V" since="9"/>
+		<method name="writeObject(Ljava/sql/SQLData;)V"/>
+		<method name="writeRef(Ljava/sql/Ref;)V"/>
+		<method name="writeRowId(Ljava/sql/RowId;)V" since="9"/>
+		<method name="writeSQLXML(Ljava/sql/SQLXML;)V" since="9"/>
+		<method name="writeShort(S)V"/>
+		<method name="writeString(Ljava/lang/String;)V"/>
+		<method name="writeStruct(Ljava/sql/Struct;)V"/>
+		<method name="writeTime(Ljava/sql/Time;)V"/>
+		<method name="writeTimestamp(Ljava/sql/Timestamp;)V"/>
+		<method name="writeURL(Ljava/net/URL;)V"/>
+	</class>
+	<class name="java/sql/SQLPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/sql/SQLRecoverableException" since="9">
+		<extends name="java/sql/SQLException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLSyntaxErrorException" since="9">
+		<extends name="java/sql/SQLNonTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLTimeoutException" since="9">
+		<extends name="java/sql/SQLTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLTransactionRollbackException" since="9">
+		<extends name="java/sql/SQLTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLTransientConnectionException" since="9">
+		<extends name="java/sql/SQLTransientException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLTransientException" since="9">
+		<extends name="java/sql/SQLException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/sql/SQLWarning" since="1">
+		<extends name="java/sql/SQLException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;ILjava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="9"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="9"/>
+		<method name="getNextWarning()Ljava/sql/SQLWarning;"/>
+		<method name="setNextWarning(Ljava/sql/SQLWarning;)V"/>
+	</class>
+	<class name="java/sql/SQLXML" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="free()V"/>
+		<method name="getBinaryStream()Ljava/io/InputStream;"/>
+		<method name="getCharacterStream()Ljava/io/Reader;"/>
+		<method name="getSource(Ljava/lang/Class;)Ljavax/xml/transform/Source;"/>
+		<method name="getString()Ljava/lang/String;"/>
+		<method name="setBinaryStream()Ljava/io/OutputStream;"/>
+		<method name="setCharacterStream()Ljava/io/Writer;"/>
+		<method name="setResult(Ljava/lang/Class;)Ljavax/xml/transform/Result;"/>
+		<method name="setString(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/sql/Savepoint" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getSavepointId()I"/>
+		<method name="getSavepointName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/sql/Statement" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable" since="19"/>
+		<implements name="java/sql/Wrapper" since="9"/>
+		<method name="addBatch(Ljava/lang/String;)V"/>
+		<method name="cancel()V"/>
+		<method name="clearBatch()V"/>
+		<method name="clearWarnings()V"/>
+		<method name="close()V"/>
+		<method name="execute(Ljava/lang/String;)Z"/>
+		<method name="execute(Ljava/lang/String;I)Z"/>
+		<method name="execute(Ljava/lang/String;[I)Z"/>
+		<method name="execute(Ljava/lang/String;[Ljava/lang/String;)Z"/>
+		<method name="executeBatch()[I"/>
+		<method name="executeQuery(Ljava/lang/String;)Ljava/sql/ResultSet;"/>
+		<method name="executeUpdate(Ljava/lang/String;)I"/>
+		<method name="executeUpdate(Ljava/lang/String;I)I"/>
+		<method name="executeUpdate(Ljava/lang/String;[I)I"/>
+		<method name="executeUpdate(Ljava/lang/String;[Ljava/lang/String;)I"/>
+		<method name="getConnection()Ljava/sql/Connection;"/>
+		<method name="getFetchDirection()I"/>
+		<method name="getFetchSize()I"/>
+		<method name="getGeneratedKeys()Ljava/sql/ResultSet;"/>
+		<method name="getMaxFieldSize()I"/>
+		<method name="getMaxRows()I"/>
+		<method name="getMoreResults()Z"/>
+		<method name="getMoreResults(I)Z"/>
+		<method name="getQueryTimeout()I"/>
+		<method name="getResultSet()Ljava/sql/ResultSet;"/>
+		<method name="getResultSetConcurrency()I"/>
+		<method name="getResultSetHoldability()I"/>
+		<method name="getResultSetType()I"/>
+		<method name="getUpdateCount()I"/>
+		<method name="getWarnings()Ljava/sql/SQLWarning;"/>
+		<method name="isClosed()Z" since="9"/>
+		<method name="isPoolable()Z" since="9"/>
+		<method name="setCursorName(Ljava/lang/String;)V"/>
+		<method name="setEscapeProcessing(Z)V"/>
+		<method name="setFetchDirection(I)V"/>
+		<method name="setFetchSize(I)V"/>
+		<method name="setMaxFieldSize(I)V"/>
+		<method name="setMaxRows(I)V"/>
+		<method name="setPoolable(Z)V" since="9"/>
+		<method name="setQueryTimeout(I)V"/>
+		<field name="CLOSE_ALL_RESULTS"/>
+		<field name="CLOSE_CURRENT_RESULT"/>
+		<field name="EXECUTE_FAILED"/>
+		<field name="KEEP_CURRENT_RESULT"/>
+		<field name="NO_GENERATED_KEYS"/>
+		<field name="RETURN_GENERATED_KEYS"/>
+		<field name="SUCCESS_NO_INFO"/>
+	</class>
+	<class name="java/sql/Struct" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getAttributes()[Ljava/lang/Object;"/>
+		<method name="getAttributes(Ljava/util/Map;)[Ljava/lang/Object;"/>
+		<method name="getSQLTypeName()Ljava/lang/String;"/>
+	</class>
+	<class name="java/sql/Time" since="1">
+		<extends name="java/util/Date"/>
+		<method name="&lt;init>(III)V" deprecated="15"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Time;"/>
+	</class>
+	<class name="java/sql/Timestamp" since="1">
+		<extends name="java/util/Date"/>
+		<method name="&lt;init>(IIIIIII)V" deprecated="15"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="after(Ljava/sql/Timestamp;)Z"/>
+		<method name="before(Ljava/sql/Timestamp;)Z"/>
+		<method name="compareTo(Ljava/sql/Timestamp;)I"/>
+		<method name="equals(Ljava/sql/Timestamp;)Z"/>
+		<method name="getNanos()I"/>
+		<method name="setNanos(I)V"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/sql/Timestamp;"/>
+	</class>
+	<class name="java/sql/Types" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="ARRAY"/>
+		<field name="BIGINT"/>
+		<field name="BINARY"/>
+		<field name="BIT"/>
+		<field name="BLOB"/>
+		<field name="BOOLEAN"/>
+		<field name="CHAR"/>
+		<field name="CLOB"/>
+		<field name="DATALINK"/>
+		<field name="DATE"/>
+		<field name="DECIMAL"/>
+		<field name="DISTINCT"/>
+		<field name="DOUBLE"/>
+		<field name="FLOAT"/>
+		<field name="INTEGER"/>
+		<field name="JAVA_OBJECT"/>
+		<field name="LONGNVARCHAR" since="9"/>
+		<field name="LONGVARBINARY"/>
+		<field name="LONGVARCHAR"/>
+		<field name="NCHAR" since="9"/>
+		<field name="NCLOB" since="9"/>
+		<field name="NULL"/>
+		<field name="NUMERIC"/>
+		<field name="NVARCHAR" since="9"/>
+		<field name="OTHER"/>
+		<field name="REAL"/>
+		<field name="REF"/>
+		<field name="ROWID" since="9"/>
+		<field name="SMALLINT"/>
+		<field name="SQLXML" since="9"/>
+		<field name="STRUCT"/>
+		<field name="TIME"/>
+		<field name="TIMESTAMP"/>
+		<field name="TINYINT"/>
+		<field name="VARBINARY"/>
+		<field name="VARCHAR"/>
+	</class>
+	<class name="java/sql/Wrapper" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="isWrapperFor(Ljava/lang/Class;)Z"/>
+		<method name="unwrap(Ljava/lang/Class;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/text/Annotation" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="getValue()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/text/AttributedCharacterIterator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/text/CharacterIterator"/>
+		<method name="getAllAttributeKeys()Ljava/util/Set;"/>
+		<method name="getAttribute(Ljava/text/AttributedCharacterIterator$Attribute;)Ljava/lang/Object;"/>
+		<method name="getAttributes()Ljava/util/Map;"/>
+		<method name="getRunLimit()I"/>
+		<method name="getRunLimit(Ljava/text/AttributedCharacterIterator$Attribute;)I"/>
+		<method name="getRunLimit(Ljava/util/Set;)I"/>
+		<method name="getRunStart()I"/>
+		<method name="getRunStart(Ljava/text/AttributedCharacterIterator$Attribute;)I"/>
+		<method name="getRunStart(Ljava/util/Set;)I"/>
+	</class>
+	<class name="java/text/AttributedCharacterIterator$Attribute" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="readResolve()Ljava/lang/Object;"/>
+		<field name="INPUT_METHOD_SEGMENT"/>
+		<field name="LANGUAGE"/>
+		<field name="READING"/>
+	</class>
+	<class name="java/text/AttributedString" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;)V"/>
+		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;)V"/>
+		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;II)V"/>
+		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;II[Ljava/text/AttributedCharacterIterator$Attribute;)V"/>
+		<method name="addAttribute(Ljava/text/AttributedCharacterIterator$Attribute;Ljava/lang/Object;)V"/>
+		<method name="addAttribute(Ljava/text/AttributedCharacterIterator$Attribute;Ljava/lang/Object;II)V"/>
+		<method name="addAttributes(Ljava/util/Map;II)V"/>
+		<method name="getIterator()Ljava/text/AttributedCharacterIterator;"/>
+		<method name="getIterator([Ljava/text/AttributedCharacterIterator$Attribute;)Ljava/text/AttributedCharacterIterator;"/>
+		<method name="getIterator([Ljava/text/AttributedCharacterIterator$Attribute;II)Ljava/text/AttributedCharacterIterator;"/>
+	</class>
+	<class name="java/text/Bidi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/text/AttributedCharacterIterator;)V"/>
+		<method name="&lt;init>([CI[BIII)V"/>
+		<method name="baseIsLeftToRight()Z"/>
+		<method name="createLineBidi(II)Ljava/text/Bidi;"/>
+		<method name="getBaseLevel()I"/>
+		<method name="getLength()I"/>
+		<method name="getLevelAt(I)I"/>
+		<method name="getRunCount()I"/>
+		<method name="getRunLevel(I)I"/>
+		<method name="getRunLimit(I)I"/>
+		<method name="getRunStart(I)I"/>
+		<method name="isLeftToRight()Z"/>
+		<method name="isMixed()Z"/>
+		<method name="isRightToLeft()Z"/>
+		<method name="reorderVisually([BI[Ljava/lang/Object;II)V"/>
+		<method name="requiresBidi([CII)Z"/>
+		<field name="DIRECTION_DEFAULT_LEFT_TO_RIGHT"/>
+		<field name="DIRECTION_DEFAULT_RIGHT_TO_LEFT"/>
+		<field name="DIRECTION_LEFT_TO_RIGHT"/>
+		<field name="DIRECTION_RIGHT_TO_LEFT"/>
+	</class>
+	<class name="java/text/BreakIterator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="current()I"/>
+		<method name="first()I"/>
+		<method name="following(I)I"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCharacterInstance()Ljava/text/BreakIterator;"/>
+		<method name="getCharacterInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
+		<method name="getInt([BI)I" removed="9"/>
+		<method name="getLineInstance()Ljava/text/BreakIterator;"/>
+		<method name="getLineInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
+		<method name="getLong([BI)J" removed="9"/>
+		<method name="getSentenceInstance()Ljava/text/BreakIterator;"/>
+		<method name="getSentenceInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
+		<method name="getShort([BI)S" removed="9"/>
+		<method name="getText()Ljava/text/CharacterIterator;"/>
+		<method name="getWordInstance()Ljava/text/BreakIterator;"/>
+		<method name="getWordInstance(Ljava/util/Locale;)Ljava/text/BreakIterator;"/>
+		<method name="isBoundary(I)Z"/>
+		<method name="last()I"/>
+		<method name="next()I"/>
+		<method name="next(I)I"/>
+		<method name="preceding(I)I"/>
+		<method name="previous()I"/>
+		<method name="setText(Ljava/lang/String;)V"/>
+		<method name="setText(Ljava/text/CharacterIterator;)V"/>
+		<field name="DONE"/>
+	</class>
+	<class name="java/text/CharacterIterator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="current()C"/>
+		<method name="first()C"/>
+		<method name="getBeginIndex()I"/>
+		<method name="getEndIndex()I"/>
+		<method name="getIndex()I"/>
+		<method name="last()C"/>
+		<method name="next()C"/>
+		<method name="previous()C"/>
+		<method name="setIndex(I)C"/>
+		<field name="DONE"/>
+	</class>
+	<class name="java/text/ChoiceFormat" since="1">
+		<extends name="java/text/NumberFormat"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>([D[Ljava/lang/String;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="getFormats()[Ljava/lang/Object;"/>
+		<method name="getLimits()[D"/>
+		<method name="nextDouble(D)D"/>
+		<method name="nextDouble(DZ)D"/>
+		<method name="previousDouble(D)D"/>
+		<method name="setChoices([D[Ljava/lang/String;)V"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+	</class>
+	<class name="java/text/CollationElementIterator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getMaxExpansion(I)I"/>
+		<method name="getOffset()I"/>
+		<method name="next()I"/>
+		<method name="previous()I"/>
+		<method name="primaryOrder(I)I"/>
+		<method name="reset()V"/>
+		<method name="secondaryOrder(I)S"/>
+		<method name="setOffset(I)V"/>
+		<method name="setText(Ljava/lang/String;)V"/>
+		<method name="setText(Ljava/text/CharacterIterator;)V"/>
+		<method name="tertiaryOrder(I)S"/>
+		<field name="NULLORDER"/>
+	</class>
+	<class name="java/text/CollationKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" since="9"/>
+		<method name="compareTo(Ljava/text/CollationKey;)I"/>
+		<method name="getSourceString()Ljava/lang/String;"/>
+		<method name="toByteArray()[B"/>
+	</class>
+	<class name="java/text/Collator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/Comparator"/>
+		<method name="&lt;init>()V"/>
+		<method name="compare(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="equals(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCollationKey(Ljava/lang/String;)Ljava/text/CollationKey;"/>
+		<method name="getDecomposition()I"/>
+		<method name="getInstance()Ljava/text/Collator;"/>
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/Collator;"/>
+		<method name="getStrength()I"/>
+		<method name="setDecomposition(I)V"/>
+		<method name="setStrength(I)V"/>
+		<field name="CANONICAL_DECOMPOSITION"/>
+		<field name="FULL_DECOMPOSITION"/>
+		<field name="IDENTICAL"/>
+		<field name="NO_DECOMPOSITION"/>
+		<field name="PRIMARY"/>
+		<field name="SECONDARY"/>
+		<field name="TERTIARY"/>
+	</class>
+	<class name="java/text/DateFormat" since="1">
+		<extends name="java/text/Format"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(Ljava/util/Date;)Ljava/lang/String;"/>
+		<method name="format(Ljava/util/Date;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCalendar()Ljava/util/Calendar;"/>
+		<method name="getDateInstance()Ljava/text/DateFormat;"/>
+		<method name="getDateInstance(I)Ljava/text/DateFormat;"/>
+		<method name="getDateInstance(ILjava/util/Locale;)Ljava/text/DateFormat;"/>
+		<method name="getDateTimeInstance()Ljava/text/DateFormat;"/>
+		<method name="getDateTimeInstance(II)Ljava/text/DateFormat;"/>
+		<method name="getDateTimeInstance(IILjava/util/Locale;)Ljava/text/DateFormat;"/>
+		<method name="getInstance()Ljava/text/DateFormat;"/>
+		<method name="getNumberFormat()Ljava/text/NumberFormat;"/>
+		<method name="getTimeInstance()Ljava/text/DateFormat;"/>
+		<method name="getTimeInstance(I)Ljava/text/DateFormat;"/>
+		<method name="getTimeInstance(ILjava/util/Locale;)Ljava/text/DateFormat;"/>
+		<method name="getTimeZone()Ljava/util/TimeZone;"/>
+		<method name="isLenient()Z"/>
+		<method name="parse(Ljava/lang/String;)Ljava/util/Date;"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/util/Date;"/>
+		<method name="setCalendar(Ljava/util/Calendar;)V"/>
+		<method name="setLenient(Z)V"/>
+		<method name="setNumberFormat(Ljava/text/NumberFormat;)V"/>
+		<method name="setTimeZone(Ljava/util/TimeZone;)V"/>
+		<field name="AM_PM_FIELD"/>
+		<field name="DATE_FIELD"/>
+		<field name="DAY_OF_WEEK_FIELD"/>
+		<field name="DAY_OF_WEEK_IN_MONTH_FIELD"/>
+		<field name="DAY_OF_YEAR_FIELD"/>
+		<field name="DEFAULT"/>
+		<field name="ERA_FIELD"/>
+		<field name="FULL"/>
+		<field name="HOUR0_FIELD"/>
+		<field name="HOUR1_FIELD"/>
+		<field name="HOUR_OF_DAY0_FIELD"/>
+		<field name="HOUR_OF_DAY1_FIELD"/>
+		<field name="LONG"/>
+		<field name="MEDIUM"/>
+		<field name="MILLISECOND_FIELD"/>
+		<field name="MINUTE_FIELD"/>
+		<field name="MONTH_FIELD"/>
+		<field name="SECOND_FIELD"/>
+		<field name="SHORT"/>
+		<field name="TIMEZONE_FIELD"/>
+		<field name="WEEK_OF_MONTH_FIELD"/>
+		<field name="WEEK_OF_YEAR_FIELD"/>
+		<field name="YEAR_FIELD"/>
+		<field name="calendar"/>
+		<field name="numberFormat"/>
+	</class>
+	<class name="java/text/DateFormat$Field" since="1">
+		<extends name="java/text/Format$Field"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getCalendarField()I"/>
+		<method name="ofCalendarField(I)Ljava/text/DateFormat$Field;"/>
+		<field name="AM_PM"/>
+		<field name="DAY_OF_MONTH"/>
+		<field name="DAY_OF_WEEK"/>
+		<field name="DAY_OF_WEEK_IN_MONTH"/>
+		<field name="DAY_OF_YEAR"/>
+		<field name="ERA"/>
+		<field name="HOUR0"/>
+		<field name="HOUR1"/>
+		<field name="HOUR_OF_DAY0"/>
+		<field name="HOUR_OF_DAY1"/>
+		<field name="MILLISECOND"/>
+		<field name="MINUTE"/>
+		<field name="MONTH"/>
+		<field name="SECOND"/>
+		<field name="TIME_ZONE"/>
+		<field name="WEEK_OF_MONTH"/>
+		<field name="WEEK_OF_YEAR"/>
+		<field name="YEAR"/>
+	</class>
+	<class name="java/text/DateFormatSymbols" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="getAmPmStrings()[Ljava/lang/String;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;" since="9"/>
+		<method name="getEras()[Ljava/lang/String;"/>
+		<method name="getInstance()Ljava/text/DateFormatSymbols;" since="9"/>
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/DateFormatSymbols;" since="9"/>
+		<method name="getLocalPatternChars()Ljava/lang/String;"/>
+		<method name="getMonths()[Ljava/lang/String;"/>
+		<method name="getShortMonths()[Ljava/lang/String;"/>
+		<method name="getShortWeekdays()[Ljava/lang/String;"/>
+		<method name="getWeekdays()[Ljava/lang/String;"/>
+		<method name="getZoneStrings()[[Ljava/lang/String;"/>
+		<method name="setAmPmStrings([Ljava/lang/String;)V"/>
+		<method name="setEras([Ljava/lang/String;)V"/>
+		<method name="setLocalPatternChars(Ljava/lang/String;)V"/>
+		<method name="setMonths([Ljava/lang/String;)V"/>
+		<method name="setShortMonths([Ljava/lang/String;)V"/>
+		<method name="setShortWeekdays([Ljava/lang/String;)V"/>
+		<method name="setWeekdays([Ljava/lang/String;)V"/>
+		<method name="setZoneStrings([[Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/text/DecimalFormat" since="1">
+		<extends name="java/text/NumberFormat"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/DecimalFormatSymbols;)V"/>
+		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="getDecimalFormatSymbols()Ljava/text/DecimalFormatSymbols;"/>
+		<method name="getGroupingSize()I"/>
+		<method name="getMultiplier()I"/>
+		<method name="getNegativePrefix()Ljava/lang/String;"/>
+		<method name="getNegativeSuffix()Ljava/lang/String;"/>
+		<method name="getPositivePrefix()Ljava/lang/String;"/>
+		<method name="getPositiveSuffix()Ljava/lang/String;"/>
+		<method name="isDecimalSeparatorAlwaysShown()Z"/>
+		<method name="isParseBigDecimal()Z"/>
+		<method name="setDecimalFormatSymbols(Ljava/text/DecimalFormatSymbols;)V"/>
+		<method name="setDecimalSeparatorAlwaysShown(Z)V"/>
+		<method name="setGroupingSize(I)V"/>
+		<method name="setMultiplier(I)V"/>
+		<method name="setNegativePrefix(Ljava/lang/String;)V"/>
+		<method name="setNegativeSuffix(Ljava/lang/String;)V"/>
+		<method name="setParseBigDecimal(Z)V"/>
+		<method name="setPositivePrefix(Ljava/lang/String;)V"/>
+		<method name="setPositiveSuffix(Ljava/lang/String;)V"/>
+		<method name="toLocalizedPattern()Ljava/lang/String;"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+	</class>
+	<class name="java/text/DecimalFormatSymbols" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;" since="9"/>
+		<method name="getCurrency()Ljava/util/Currency;"/>
+		<method name="getCurrencySymbol()Ljava/lang/String;"/>
+		<method name="getDecimalSeparator()C"/>
+		<method name="getDigit()C"/>
+		<method name="getExponentSeparator()Ljava/lang/String;" since="9"/>
+		<method name="getGroupingSeparator()C"/>
+		<method name="getInfinity()Ljava/lang/String;"/>
+		<method name="getInstance()Ljava/text/DecimalFormatSymbols;" since="9"/>
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/DecimalFormatSymbols;" since="9"/>
+		<method name="getInternationalCurrencySymbol()Ljava/lang/String;"/>
+		<method name="getMinusSign()C"/>
+		<method name="getMonetaryDecimalSeparator()C"/>
+		<method name="getNaN()Ljava/lang/String;"/>
+		<method name="getPatternSeparator()C"/>
+		<method name="getPerMill()C"/>
+		<method name="getPercent()C"/>
+		<method name="getZeroDigit()C"/>
+		<method name="setCurrency(Ljava/util/Currency;)V"/>
+		<method name="setCurrencySymbol(Ljava/lang/String;)V"/>
+		<method name="setDecimalSeparator(C)V"/>
+		<method name="setDigit(C)V"/>
+		<method name="setExponentSeparator(Ljava/lang/String;)V" since="9"/>
+		<method name="setGroupingSeparator(C)V"/>
+		<method name="setInfinity(Ljava/lang/String;)V"/>
+		<method name="setInternationalCurrencySymbol(Ljava/lang/String;)V"/>
+		<method name="setMinusSign(C)V"/>
+		<method name="setMonetaryDecimalSeparator(C)V"/>
+		<method name="setNaN(Ljava/lang/String;)V"/>
+		<method name="setPatternSeparator(C)V"/>
+		<method name="setPerMill(C)V"/>
+		<method name="setPercent(C)V"/>
+		<method name="setZeroDigit(C)V"/>
+	</class>
+	<class name="java/text/FieldPosition" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/text/Format$Field;)V"/>
+		<method name="&lt;init>(Ljava/text/Format$Field;I)V"/>
+		<method name="getBeginIndex()I"/>
+		<method name="getEndIndex()I"/>
+		<method name="getField()I"/>
+		<method name="getFieldAttribute()Ljava/text/Format$Field;"/>
+		<method name="setBeginIndex(I)V"/>
+		<method name="setEndIndex(I)V"/>
+	</class>
+	<class name="java/text/Format" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="format(Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="formatToCharacterIterator(Ljava/lang/Object;)Ljava/text/AttributedCharacterIterator;"/>
+		<method name="parseObject(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="parseObject(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/text/Format$Field" since="1">
+		<extends name="java/text/AttributedCharacterIterator$Attribute"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/text/MessageFormat" since="1">
+		<extends name="java/text/Format"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="format([Ljava/lang/Object;Ljava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="getFormats()[Ljava/text/Format;"/>
+		<method name="getFormatsByArgumentIndex()[Ljava/text/Format;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="parse(Ljava/lang/String;)[Ljava/lang/Object;"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)[Ljava/lang/Object;"/>
+		<method name="setFormat(ILjava/text/Format;)V"/>
+		<method name="setFormatByArgumentIndex(ILjava/text/Format;)V"/>
+		<method name="setFormats([Ljava/text/Format;)V"/>
+		<method name="setFormatsByArgumentIndex([Ljava/text/Format;)V"/>
+		<method name="setLocale(Ljava/util/Locale;)V"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+	</class>
+	<class name="java/text/MessageFormat$Field" since="1">
+		<extends name="java/text/Format$Field"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="ARGUMENT"/>
+	</class>
+	<class name="java/text/Normalizer" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="isNormalized(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Z"/>
+		<method name="normalize(Ljava/lang/CharSequence;Ljava/text/Normalizer$Form;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/text/Normalizer$Form" since="9">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/text/Normalizer$Form;"/>
+		<method name="values()[Ljava/text/Normalizer$Form;"/>
+		<field name="NFC"/>
+		<field name="NFD"/>
+		<field name="NFKC"/>
+		<field name="NFKD"/>
+	</class>
+	<class name="java/text/NumberFormat" since="1">
+		<extends name="java/text/Format"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(D)Ljava/lang/String;"/>
+		<method name="format(DLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="format(J)Ljava/lang/String;"/>
+		<method name="format(JLjava/lang/StringBuffer;Ljava/text/FieldPosition;)Ljava/lang/StringBuffer;"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCurrency()Ljava/util/Currency;"/>
+		<method name="getCurrencyInstance()Ljava/text/NumberFormat;"/>
+		<method name="getCurrencyInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
+		<method name="getInstance()Ljava/text/NumberFormat;"/>
+		<method name="getInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
+		<method name="getIntegerInstance()Ljava/text/NumberFormat;"/>
+		<method name="getIntegerInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
+		<method name="getMaximumFractionDigits()I"/>
+		<method name="getMaximumIntegerDigits()I"/>
+		<method name="getMinimumFractionDigits()I"/>
+		<method name="getMinimumIntegerDigits()I"/>
+		<method name="getNumberInstance()Ljava/text/NumberFormat;"/>
+		<method name="getNumberInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
+		<method name="getPercentInstance()Ljava/text/NumberFormat;"/>
+		<method name="getPercentInstance(Ljava/util/Locale;)Ljava/text/NumberFormat;"/>
+		<method name="getRoundingMode()Ljava/math/RoundingMode;" since="9"/>
+		<method name="isGroupingUsed()Z"/>
+		<method name="isParseIntegerOnly()Z"/>
+		<method name="parse(Ljava/lang/String;)Ljava/lang/Number;"/>
+		<method name="parse(Ljava/lang/String;Ljava/text/ParsePosition;)Ljava/lang/Number;"/>
+		<method name="setCurrency(Ljava/util/Currency;)V"/>
+		<method name="setGroupingUsed(Z)V"/>
+		<method name="setMaximumFractionDigits(I)V"/>
+		<method name="setMaximumIntegerDigits(I)V"/>
+		<method name="setMinimumFractionDigits(I)V"/>
+		<method name="setMinimumIntegerDigits(I)V"/>
+		<method name="setParseIntegerOnly(Z)V"/>
+		<method name="setRoundingMode(Ljava/math/RoundingMode;)V" since="9"/>
+		<field name="FRACTION_FIELD"/>
+		<field name="INTEGER_FIELD"/>
+	</class>
+	<class name="java/text/NumberFormat$Field" since="1">
+		<extends name="java/text/Format$Field"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="CURRENCY"/>
+		<field name="DECIMAL_SEPARATOR"/>
+		<field name="EXPONENT"/>
+		<field name="EXPONENT_SIGN"/>
+		<field name="EXPONENT_SYMBOL"/>
+		<field name="FRACTION"/>
+		<field name="GROUPING_SEPARATOR"/>
+		<field name="INTEGER"/>
+		<field name="PERCENT"/>
+		<field name="PERMILLE"/>
+		<field name="SIGN"/>
+	</class>
+	<class name="java/text/ParseException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getErrorOffset()I"/>
+	</class>
+	<class name="java/text/ParsePosition" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getErrorIndex()I"/>
+		<method name="getIndex()I"/>
+		<method name="setErrorIndex(I)V"/>
+		<method name="setIndex(I)V"/>
+	</class>
+	<class name="java/text/RuleBasedCollator" since="1">
+		<extends name="java/text/Collator"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getCollationElementIterator(Ljava/lang/String;)Ljava/text/CollationElementIterator;"/>
+		<method name="getCollationElementIterator(Ljava/text/CharacterIterator;)Ljava/text/CollationElementIterator;"/>
+		<method name="getRules()Ljava/lang/String;"/>
+	</class>
+	<class name="java/text/SimpleDateFormat" since="1">
+		<extends name="java/text/DateFormat"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/text/DateFormatSymbols;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Locale;)V"/>
+		<method name="applyLocalizedPattern(Ljava/lang/String;)V"/>
+		<method name="applyPattern(Ljava/lang/String;)V"/>
+		<method name="get2DigitYearStart()Ljava/util/Date;"/>
+		<method name="getDateFormatSymbols()Ljava/text/DateFormatSymbols;"/>
+		<method name="set2DigitYearStart(Ljava/util/Date;)V"/>
+		<method name="setDateFormatSymbols(Ljava/text/DateFormatSymbols;)V"/>
+		<method name="toLocalizedPattern()Ljava/lang/String;"/>
+		<method name="toPattern()Ljava/lang/String;"/>
+	</class>
+	<class name="java/text/StringCharacterIterator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/text/CharacterIterator"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;III)V"/>
+		<method name="setText(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/time/Clock" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="fixed(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/Clock;"/>
+		<method name="getZone()Ljava/time/ZoneId;"/>
+		<method name="instant()Ljava/time/Instant;"/>
+		<method name="millis()J"/>
+		<method name="offset(Ljava/time/Clock;Ljava/time/Duration;)Ljava/time/Clock;"/>
+		<method name="system(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
+		<method name="systemDefaultZone()Ljava/time/Clock;"/>
+		<method name="systemUTC()Ljava/time/Clock;"/>
+		<method name="tick(Ljava/time/Clock;Ljava/time/Duration;)Ljava/time/Clock;"/>
+		<method name="tickMinutes(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
+		<method name="tickSeconds(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
+		<method name="withZone(Ljava/time/ZoneId;)Ljava/time/Clock;"/>
+	</class>
+	<class name="java/time/DateTimeException" since="26">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/time/DayOfWeek" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/temporal/TemporalAccessor"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/DayOfWeek;"/>
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getValue()I"/>
+		<method name="minus(J)Ljava/time/DayOfWeek;"/>
+		<method name="of(I)Ljava/time/DayOfWeek;"/>
+		<method name="plus(J)Ljava/time/DayOfWeek;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/DayOfWeek;"/>
+		<method name="values()[Ljava/time/DayOfWeek;"/>
+		<field name="FRIDAY"/>
+		<field name="MONDAY"/>
+		<field name="SATURDAY"/>
+		<field name="SUNDAY"/>
+		<field name="THURSDAY"/>
+		<field name="TUESDAY"/>
+		<field name="WEDNESDAY"/>
+	</class>
+	<class name="java/time/Duration" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/TemporalAmount"/>
+		<method name="abs()Ljava/time/Duration;"/>
+		<method name="between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)Ljava/time/Duration;"/>
+		<method name="compareTo(Ljava/time/Duration;)I"/>
+		<method name="dividedBy(J)Ljava/time/Duration;"/>
+		<method name="dividedBy(Ljava/time/Duration;)J" since="31"/>
+		<method name="from(Ljava/time/temporal/TemporalAmount;)Ljava/time/Duration;"/>
+		<method name="getNano()I"/>
+		<method name="getSeconds()J"/>
+		<method name="isNegative()Z"/>
+		<method name="isZero()Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;"/>
+		<method name="minus(Ljava/time/Duration;)Ljava/time/Duration;"/>
+		<method name="minusDays(J)Ljava/time/Duration;"/>
+		<method name="minusHours(J)Ljava/time/Duration;"/>
+		<method name="minusMillis(J)Ljava/time/Duration;"/>
+		<method name="minusMinutes(J)Ljava/time/Duration;"/>
+		<method name="minusNanos(J)Ljava/time/Duration;"/>
+		<method name="minusSeconds(J)Ljava/time/Duration;"/>
+		<method name="multipliedBy(J)Ljava/time/Duration;"/>
+		<method name="negated()Ljava/time/Duration;"/>
+		<method name="of(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;"/>
+		<method name="ofDays(J)Ljava/time/Duration;"/>
+		<method name="ofHours(J)Ljava/time/Duration;"/>
+		<method name="ofMillis(J)Ljava/time/Duration;"/>
+		<method name="ofMinutes(J)Ljava/time/Duration;"/>
+		<method name="ofNanos(J)Ljava/time/Duration;"/>
+		<method name="ofSeconds(J)Ljava/time/Duration;"/>
+		<method name="ofSeconds(JJ)Ljava/time/Duration;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Duration;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Duration;"/>
+		<method name="plus(Ljava/time/Duration;)Ljava/time/Duration;"/>
+		<method name="plusDays(J)Ljava/time/Duration;"/>
+		<method name="plusHours(J)Ljava/time/Duration;"/>
+		<method name="plusMillis(J)Ljava/time/Duration;"/>
+		<method name="plusMinutes(J)Ljava/time/Duration;"/>
+		<method name="plusNanos(J)Ljava/time/Duration;"/>
+		<method name="plusSeconds(J)Ljava/time/Duration;"/>
+		<method name="toDays()J"/>
+		<method name="toDaysPart()J" since="31"/>
+		<method name="toHours()J"/>
+		<method name="toHoursPart()I" since="31"/>
+		<method name="toMillis()J"/>
+		<method name="toMillisPart()I" since="31"/>
+		<method name="toMinutes()J"/>
+		<method name="toMinutesPart()I" since="31"/>
+		<method name="toNanos()J"/>
+		<method name="toNanosPart()I" since="31"/>
+		<method name="toSeconds()J" since="31"/>
+		<method name="toSecondsPart()I" since="31"/>
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/Duration;" since="31"/>
+		<method name="withNanos(I)Ljava/time/Duration;"/>
+		<method name="withSeconds(J)Ljava/time/Duration;"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="java/time/Instant" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
+		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="compareTo(Ljava/time/Instant;)I"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Instant;"/>
+		<method name="getEpochSecond()J"/>
+		<method name="getNano()I"/>
+		<method name="isAfter(Ljava/time/Instant;)Z"/>
+		<method name="isBefore(Ljava/time/Instant;)Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"/>
+		<method name="minusMillis(J)Ljava/time/Instant;"/>
+		<method name="minusNanos(J)Ljava/time/Instant;"/>
+		<method name="minusSeconds(J)Ljava/time/Instant;"/>
+		<method name="now()Ljava/time/Instant;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/Instant;"/>
+		<method name="ofEpochMilli(J)Ljava/time/Instant;"/>
+		<method name="ofEpochSecond(J)Ljava/time/Instant;"/>
+		<method name="ofEpochSecond(JJ)Ljava/time/Instant;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Instant;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"/>
+		<method name="plusMillis(J)Ljava/time/Instant;"/>
+		<method name="plusNanos(J)Ljava/time/Instant;"/>
+		<method name="plusSeconds(J)Ljava/time/Instant;"/>
+		<method name="toEpochMilli()J"/>
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/Instant;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Instant;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/Instant;"/>
+		<field name="EPOCH"/>
+		<field name="MAX"/>
+		<field name="MIN"/>
+	</class>
+	<class name="java/time/LocalDate" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/time/chrono/ChronoLocalDate"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atStartOfDay()Ljava/time/LocalDateTime;"/>
+		<method name="atStartOfDay(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="atTime(II)Ljava/time/LocalDateTime;"/>
+		<method name="atTime(III)Ljava/time/LocalDateTime;"/>
+		<method name="atTime(IIII)Ljava/time/LocalDateTime;"/>
+		<method name="atTime(Ljava/time/LocalTime;)Ljava/time/LocalDateTime;"/>
+		<method name="atTime(Ljava/time/OffsetTime;)Ljava/time/OffsetDateTime;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;"/>
+		<method name="getChronology()Ljava/time/chrono/IsoChronology;"/>
+		<method name="getDayOfMonth()I"/>
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
+		<method name="getDayOfYear()I"/>
+		<method name="getMonth()Ljava/time/Month;"/>
+		<method name="getMonthValue()I"/>
+		<method name="getYear()I"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDate;"/>
+		<method name="minusDays(J)Ljava/time/LocalDate;"/>
+		<method name="minusMonths(J)Ljava/time/LocalDate;"/>
+		<method name="minusWeeks(J)Ljava/time/LocalDate;"/>
+		<method name="minusYears(J)Ljava/time/LocalDate;"/>
+		<method name="now()Ljava/time/LocalDate;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/LocalDate;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalDate;"/>
+		<method name="of(III)Ljava/time/LocalDate;"/>
+		<method name="of(ILjava/time/Month;I)Ljava/time/LocalDate;"/>
+		<method name="ofEpochDay(J)Ljava/time/LocalDate;"/>
+		<method name="ofYearDay(II)Ljava/time/LocalDate;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalDate;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDate;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDate;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDate;"/>
+		<method name="plusDays(J)Ljava/time/LocalDate;"/>
+		<method name="plusMonths(J)Ljava/time/LocalDate;"/>
+		<method name="plusWeeks(J)Ljava/time/LocalDate;"/>
+		<method name="plusYears(J)Ljava/time/LocalDate;"/>
+		<method name="until(Ljava/time/chrono/ChronoLocalDate;)Ljava/time/Period;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalDate;"/>
+		<method name="withDayOfMonth(I)Ljava/time/LocalDate;"/>
+		<method name="withDayOfYear(I)Ljava/time/LocalDate;"/>
+		<method name="withMonth(I)Ljava/time/LocalDate;"/>
+		<method name="withYear(I)Ljava/time/LocalDate;"/>
+		<field name="MAX"/>
+		<field name="MIN"/>
+	</class>
+	<class name="java/time/LocalDateTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/time/chrono/ChronoLocalDateTime"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
+		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;"/>
+		<method name="getDayOfMonth()I"/>
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
+		<method name="getDayOfYear()I"/>
+		<method name="getHour()I"/>
+		<method name="getMinute()I"/>
+		<method name="getMonth()Ljava/time/Month;"/>
+		<method name="getMonthValue()I"/>
+		<method name="getNano()I"/>
+		<method name="getSecond()I"/>
+		<method name="getYear()I"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDateTime;"/>
+		<method name="minusDays(J)Ljava/time/LocalDateTime;"/>
+		<method name="minusHours(J)Ljava/time/LocalDateTime;"/>
+		<method name="minusMinutes(J)Ljava/time/LocalDateTime;"/>
+		<method name="minusMonths(J)Ljava/time/LocalDateTime;"/>
+		<method name="minusNanos(J)Ljava/time/LocalDateTime;"/>
+		<method name="minusSeconds(J)Ljava/time/LocalDateTime;"/>
+		<method name="minusWeeks(J)Ljava/time/LocalDateTime;"/>
+		<method name="minusYears(J)Ljava/time/LocalDateTime;"/>
+		<method name="now()Ljava/time/LocalDateTime;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/LocalDateTime;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalDateTime;"/>
+		<method name="of(IIIII)Ljava/time/LocalDateTime;"/>
+		<method name="of(IIIIII)Ljava/time/LocalDateTime;"/>
+		<method name="of(IIIIIII)Ljava/time/LocalDateTime;"/>
+		<method name="of(ILjava/time/Month;III)Ljava/time/LocalDateTime;"/>
+		<method name="of(ILjava/time/Month;IIII)Ljava/time/LocalDateTime;"/>
+		<method name="of(ILjava/time/Month;IIIII)Ljava/time/LocalDateTime;"/>
+		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;)Ljava/time/LocalDateTime;"/>
+		<method name="ofEpochSecond(JILjava/time/ZoneOffset;)Ljava/time/LocalDateTime;"/>
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalDateTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalDateTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalDateTime;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalDateTime;"/>
+		<method name="plusDays(J)Ljava/time/LocalDateTime;"/>
+		<method name="plusHours(J)Ljava/time/LocalDateTime;"/>
+		<method name="plusMinutes(J)Ljava/time/LocalDateTime;"/>
+		<method name="plusMonths(J)Ljava/time/LocalDateTime;"/>
+		<method name="plusNanos(J)Ljava/time/LocalDateTime;"/>
+		<method name="plusSeconds(J)Ljava/time/LocalDateTime;"/>
+		<method name="plusWeeks(J)Ljava/time/LocalDateTime;"/>
+		<method name="plusYears(J)Ljava/time/LocalDateTime;"/>
+		<method name="toLocalDate()Ljava/time/LocalDate;"/>
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/LocalDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalDateTime;"/>
+		<method name="withDayOfMonth(I)Ljava/time/LocalDateTime;"/>
+		<method name="withDayOfYear(I)Ljava/time/LocalDateTime;"/>
+		<method name="withHour(I)Ljava/time/LocalDateTime;"/>
+		<method name="withMinute(I)Ljava/time/LocalDateTime;"/>
+		<method name="withMonth(I)Ljava/time/LocalDateTime;"/>
+		<method name="withNano(I)Ljava/time/LocalDateTime;"/>
+		<method name="withSecond(I)Ljava/time/LocalDateTime;"/>
+		<method name="withYear(I)Ljava/time/LocalDateTime;"/>
+		<field name="MAX"/>
+		<field name="MIN"/>
+	</class>
+	<class name="java/time/LocalTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atDate(Ljava/time/LocalDate;)Ljava/time/LocalDateTime;"/>
+		<method name="atOffset(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
+		<method name="compareTo(Ljava/time/LocalTime;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalTime;"/>
+		<method name="getHour()I"/>
+		<method name="getMinute()I"/>
+		<method name="getNano()I"/>
+		<method name="getSecond()I"/>
+		<method name="isAfter(Ljava/time/LocalTime;)Z"/>
+		<method name="isBefore(Ljava/time/LocalTime;)Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalTime;"/>
+		<method name="minusHours(J)Ljava/time/LocalTime;"/>
+		<method name="minusMinutes(J)Ljava/time/LocalTime;"/>
+		<method name="minusNanos(J)Ljava/time/LocalTime;"/>
+		<method name="minusSeconds(J)Ljava/time/LocalTime;"/>
+		<method name="now()Ljava/time/LocalTime;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/LocalTime;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/LocalTime;"/>
+		<method name="of(II)Ljava/time/LocalTime;"/>
+		<method name="of(III)Ljava/time/LocalTime;"/>
+		<method name="of(IIII)Ljava/time/LocalTime;"/>
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalTime;" since="31"/>
+		<method name="ofNanoOfDay(J)Ljava/time/LocalTime;"/>
+		<method name="ofSecondOfDay(J)Ljava/time/LocalTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/LocalTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/LocalTime;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/LocalTime;"/>
+		<method name="plusHours(J)Ljava/time/LocalTime;"/>
+		<method name="plusMinutes(J)Ljava/time/LocalTime;"/>
+		<method name="plusNanos(J)Ljava/time/LocalTime;"/>
+		<method name="plusSeconds(J)Ljava/time/LocalTime;"/>
+		<method name="toEpochSecond(Ljava/time/LocalDate;Ljava/time/ZoneOffset;)J" since="31"/>
+		<method name="toNanoOfDay()J"/>
+		<method name="toSecondOfDay()I"/>
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/LocalTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/LocalTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/LocalTime;"/>
+		<method name="withHour(I)Ljava/time/LocalTime;"/>
+		<method name="withMinute(I)Ljava/time/LocalTime;"/>
+		<method name="withNano(I)Ljava/time/LocalTime;"/>
+		<method name="withSecond(I)Ljava/time/LocalTime;"/>
+		<field name="MAX"/>
+		<field name="MIDNIGHT"/>
+		<field name="MIN"/>
+		<field name="NOON"/>
+	</class>
+	<class name="java/time/Month" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/temporal/TemporalAccessor"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="firstDayOfYear(Z)I"/>
+		<method name="firstMonthOfQuarter()Ljava/time/Month;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Month;"/>
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getValue()I"/>
+		<method name="length(Z)I"/>
+		<method name="maxLength()I"/>
+		<method name="minLength()I"/>
+		<method name="minus(J)Ljava/time/Month;"/>
+		<method name="of(I)Ljava/time/Month;"/>
+		<method name="plus(J)Ljava/time/Month;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/Month;"/>
+		<method name="values()[Ljava/time/Month;"/>
+		<field name="APRIL"/>
+		<field name="AUGUST"/>
+		<field name="DECEMBER"/>
+		<field name="FEBRUARY"/>
+		<field name="JANUARY"/>
+		<field name="JULY"/>
+		<field name="JUNE"/>
+		<field name="MARCH"/>
+		<field name="MAY"/>
+		<field name="NOVEMBER"/>
+		<field name="OCTOBER"/>
+		<field name="SEPTEMBER"/>
+	</class>
+	<class name="java/time/MonthDay" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/TemporalAccessor"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atYear(I)Ljava/time/LocalDate;"/>
+		<method name="compareTo(Ljava/time/MonthDay;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/MonthDay;"/>
+		<method name="getDayOfMonth()I"/>
+		<method name="getMonth()Ljava/time/Month;"/>
+		<method name="getMonthValue()I"/>
+		<method name="isAfter(Ljava/time/MonthDay;)Z"/>
+		<method name="isBefore(Ljava/time/MonthDay;)Z"/>
+		<method name="isValidYear(I)Z"/>
+		<method name="now()Ljava/time/MonthDay;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/MonthDay;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/MonthDay;"/>
+		<method name="of(II)Ljava/time/MonthDay;"/>
+		<method name="of(Ljava/time/Month;I)Ljava/time/MonthDay;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/MonthDay;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/MonthDay;"/>
+		<method name="with(Ljava/time/Month;)Ljava/time/MonthDay;"/>
+		<method name="withDayOfMonth(I)Ljava/time/MonthDay;"/>
+		<method name="withMonth(I)Ljava/time/MonthDay;"/>
+	</class>
+	<class name="java/time/OffsetDateTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="atZoneSimilarLocal(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="compareTo(Ljava/time/OffsetDateTime;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/OffsetDateTime;"/>
+		<method name="getDayOfMonth()I"/>
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
+		<method name="getDayOfYear()I"/>
+		<method name="getHour()I"/>
+		<method name="getMinute()I"/>
+		<method name="getMonth()Ljava/time/Month;"/>
+		<method name="getMonthValue()I"/>
+		<method name="getNano()I"/>
+		<method name="getOffset()Ljava/time/ZoneOffset;"/>
+		<method name="getSecond()I"/>
+		<method name="getYear()I"/>
+		<method name="isAfter(Ljava/time/OffsetDateTime;)Z"/>
+		<method name="isBefore(Ljava/time/OffsetDateTime;)Z"/>
+		<method name="isEqual(Ljava/time/OffsetDateTime;)Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetDateTime;"/>
+		<method name="minusDays(J)Ljava/time/OffsetDateTime;"/>
+		<method name="minusHours(J)Ljava/time/OffsetDateTime;"/>
+		<method name="minusMinutes(J)Ljava/time/OffsetDateTime;"/>
+		<method name="minusMonths(J)Ljava/time/OffsetDateTime;"/>
+		<method name="minusNanos(J)Ljava/time/OffsetDateTime;"/>
+		<method name="minusSeconds(J)Ljava/time/OffsetDateTime;"/>
+		<method name="minusWeeks(J)Ljava/time/OffsetDateTime;"/>
+		<method name="minusYears(J)Ljava/time/OffsetDateTime;"/>
+		<method name="now()Ljava/time/OffsetDateTime;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/OffsetDateTime;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/OffsetDateTime;"/>
+		<method name="of(IIIIIIILjava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
+		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
+		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/OffsetDateTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/OffsetDateTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/OffsetDateTime;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetDateTime;"/>
+		<method name="plusDays(J)Ljava/time/OffsetDateTime;"/>
+		<method name="plusHours(J)Ljava/time/OffsetDateTime;"/>
+		<method name="plusMinutes(J)Ljava/time/OffsetDateTime;"/>
+		<method name="plusMonths(J)Ljava/time/OffsetDateTime;"/>
+		<method name="plusNanos(J)Ljava/time/OffsetDateTime;"/>
+		<method name="plusSeconds(J)Ljava/time/OffsetDateTime;"/>
+		<method name="plusWeeks(J)Ljava/time/OffsetDateTime;"/>
+		<method name="plusYears(J)Ljava/time/OffsetDateTime;"/>
+		<method name="timeLineOrder()Ljava/util/Comparator;"/>
+		<method name="toEpochSecond()J"/>
+		<method name="toInstant()Ljava/time/Instant;"/>
+		<method name="toLocalDate()Ljava/time/LocalDate;"/>
+		<method name="toLocalDateTime()Ljava/time/LocalDateTime;"/>
+		<method name="toLocalTime()Ljava/time/LocalTime;"/>
+		<method name="toOffsetTime()Ljava/time/OffsetTime;"/>
+		<method name="toZonedDateTime()Ljava/time/ZonedDateTime;"/>
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/OffsetDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/OffsetDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/OffsetDateTime;"/>
+		<method name="withDayOfMonth(I)Ljava/time/OffsetDateTime;"/>
+		<method name="withDayOfYear(I)Ljava/time/OffsetDateTime;"/>
+		<method name="withHour(I)Ljava/time/OffsetDateTime;"/>
+		<method name="withMinute(I)Ljava/time/OffsetDateTime;"/>
+		<method name="withMonth(I)Ljava/time/OffsetDateTime;"/>
+		<method name="withNano(I)Ljava/time/OffsetDateTime;"/>
+		<method name="withOffsetSameInstant(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
+		<method name="withOffsetSameLocal(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"/>
+		<method name="withSecond(I)Ljava/time/OffsetDateTime;"/>
+		<method name="withYear(I)Ljava/time/OffsetDateTime;"/>
+		<field name="MAX"/>
+		<field name="MIN"/>
+	</class>
+	<class name="java/time/OffsetTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atDate(Ljava/time/LocalDate;)Ljava/time/OffsetDateTime;"/>
+		<method name="compareTo(Ljava/time/OffsetTime;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/OffsetTime;"/>
+		<method name="getHour()I"/>
+		<method name="getMinute()I"/>
+		<method name="getNano()I"/>
+		<method name="getOffset()Ljava/time/ZoneOffset;"/>
+		<method name="getSecond()I"/>
+		<method name="isAfter(Ljava/time/OffsetTime;)Z"/>
+		<method name="isBefore(Ljava/time/OffsetTime;)Z"/>
+		<method name="isEqual(Ljava/time/OffsetTime;)Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetTime;"/>
+		<method name="minusHours(J)Ljava/time/OffsetTime;"/>
+		<method name="minusMinutes(J)Ljava/time/OffsetTime;"/>
+		<method name="minusNanos(J)Ljava/time/OffsetTime;"/>
+		<method name="minusSeconds(J)Ljava/time/OffsetTime;"/>
+		<method name="now()Ljava/time/OffsetTime;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/OffsetTime;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/OffsetTime;"/>
+		<method name="of(IIIILjava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
+		<method name="of(Ljava/time/LocalTime;Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/OffsetTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/OffsetTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/OffsetTime;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/OffsetTime;"/>
+		<method name="plusHours(J)Ljava/time/OffsetTime;"/>
+		<method name="plusMinutes(J)Ljava/time/OffsetTime;"/>
+		<method name="plusNanos(J)Ljava/time/OffsetTime;"/>
+		<method name="plusSeconds(J)Ljava/time/OffsetTime;"/>
+		<method name="toLocalTime()Ljava/time/LocalTime;"/>
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/OffsetTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/OffsetTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/OffsetTime;"/>
+		<method name="withHour(I)Ljava/time/OffsetTime;"/>
+		<method name="withMinute(I)Ljava/time/OffsetTime;"/>
+		<method name="withNano(I)Ljava/time/OffsetTime;"/>
+		<method name="withOffsetSameInstant(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
+		<method name="withOffsetSameLocal(Ljava/time/ZoneOffset;)Ljava/time/OffsetTime;"/>
+		<method name="withSecond(I)Ljava/time/OffsetTime;"/>
+		<field name="MAX"/>
+		<field name="MIN"/>
+	</class>
+	<class name="java/time/Period" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/time/chrono/ChronoPeriod"/>
+		<method name="between(Ljava/time/LocalDate;Ljava/time/LocalDate;)Ljava/time/Period;"/>
+		<method name="from(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;"/>
+		<method name="getChronology()Ljava/time/chrono/IsoChronology;"/>
+		<method name="getDays()I"/>
+		<method name="getMonths()I"/>
+		<method name="getYears()I"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;"/>
+		<method name="minusDays(J)Ljava/time/Period;"/>
+		<method name="minusMonths(J)Ljava/time/Period;"/>
+		<method name="minusYears(J)Ljava/time/Period;"/>
+		<method name="multipliedBy(I)Ljava/time/Period;"/>
+		<method name="negated()Ljava/time/Period;"/>
+		<method name="normalized()Ljava/time/Period;"/>
+		<method name="of(III)Ljava/time/Period;"/>
+		<method name="ofDays(I)Ljava/time/Period;"/>
+		<method name="ofMonths(I)Ljava/time/Period;"/>
+		<method name="ofWeeks(I)Ljava/time/Period;"/>
+		<method name="ofYears(I)Ljava/time/Period;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Period;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Period;"/>
+		<method name="plusDays(J)Ljava/time/Period;"/>
+		<method name="plusMonths(J)Ljava/time/Period;"/>
+		<method name="plusYears(J)Ljava/time/Period;"/>
+		<method name="toTotalMonths()J"/>
+		<method name="withDays(I)Ljava/time/Period;"/>
+		<method name="withMonths(I)Ljava/time/Period;"/>
+		<method name="withYears(I)Ljava/time/Period;"/>
+		<field name="ZERO"/>
+	</class>
+	<class name="java/time/Year" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atDay(I)Ljava/time/LocalDate;"/>
+		<method name="atMonth(I)Ljava/time/YearMonth;"/>
+		<method name="atMonth(Ljava/time/Month;)Ljava/time/YearMonth;"/>
+		<method name="atMonthDay(Ljava/time/MonthDay;)Ljava/time/LocalDate;"/>
+		<method name="compareTo(Ljava/time/Year;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Year;"/>
+		<method name="getValue()I"/>
+		<method name="isAfter(Ljava/time/Year;)Z"/>
+		<method name="isBefore(Ljava/time/Year;)Z"/>
+		<method name="isLeap()Z"/>
+		<method name="isLeap(J)Z"/>
+		<method name="isValidMonthDay(Ljava/time/MonthDay;)Z"/>
+		<method name="length()I"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Year;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Year;"/>
+		<method name="minusYears(J)Ljava/time/Year;"/>
+		<method name="now()Ljava/time/Year;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/Year;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/Year;"/>
+		<method name="of(I)Ljava/time/Year;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/Year;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/Year;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/Year;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/Year;"/>
+		<method name="plusYears(J)Ljava/time/Year;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Year;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/Year;"/>
+		<field name="MAX_VALUE"/>
+		<field name="MIN_VALUE"/>
+	</class>
+	<class name="java/time/YearMonth" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atDay(I)Ljava/time/LocalDate;"/>
+		<method name="atEndOfMonth()Ljava/time/LocalDate;"/>
+		<method name="compareTo(Ljava/time/YearMonth;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/YearMonth;"/>
+		<method name="getMonth()Ljava/time/Month;"/>
+		<method name="getMonthValue()I"/>
+		<method name="getYear()I"/>
+		<method name="isAfter(Ljava/time/YearMonth;)Z"/>
+		<method name="isBefore(Ljava/time/YearMonth;)Z"/>
+		<method name="isLeapYear()Z"/>
+		<method name="isValidDay(I)Z"/>
+		<method name="lengthOfMonth()I"/>
+		<method name="lengthOfYear()I"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/YearMonth;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/YearMonth;"/>
+		<method name="minusMonths(J)Ljava/time/YearMonth;"/>
+		<method name="minusYears(J)Ljava/time/YearMonth;"/>
+		<method name="now()Ljava/time/YearMonth;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/YearMonth;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/YearMonth;"/>
+		<method name="of(II)Ljava/time/YearMonth;"/>
+		<method name="of(ILjava/time/Month;)Ljava/time/YearMonth;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/YearMonth;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/YearMonth;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/YearMonth;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/YearMonth;"/>
+		<method name="plusMonths(J)Ljava/time/YearMonth;"/>
+		<method name="plusYears(J)Ljava/time/YearMonth;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/YearMonth;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/YearMonth;"/>
+		<method name="withMonth(I)Ljava/time/YearMonth;"/>
+		<method name="withYear(I)Ljava/time/YearMonth;"/>
+	</class>
+	<class name="java/time/ZoneId" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId;"/>
+		<method name="getAvailableZoneIds()Ljava/util/Set;"/>
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="getRules()Ljava/time/zone/ZoneRules;"/>
+		<method name="normalized()Ljava/time/ZoneId;"/>
+		<method name="of(Ljava/lang/String;)Ljava/time/ZoneId;"/>
+		<method name="of(Ljava/lang/String;Ljava/util/Map;)Ljava/time/ZoneId;"/>
+		<method name="ofOffset(Ljava/lang/String;Ljava/time/ZoneOffset;)Ljava/time/ZoneId;"/>
+		<method name="systemDefault()Ljava/time/ZoneId;"/>
+		<field name="SHORT_IDS"/>
+	</class>
+	<class name="java/time/ZoneOffset" since="26">
+		<extends name="java/time/ZoneId"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/TemporalAccessor"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="compareTo(Ljava/time/ZoneOffset;)I"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneOffset;"/>
+		<method name="getTotalSeconds()I"/>
+		<method name="of(Ljava/lang/String;)Ljava/time/ZoneOffset;"/>
+		<method name="ofHours(I)Ljava/time/ZoneOffset;"/>
+		<method name="ofHoursMinutes(II)Ljava/time/ZoneOffset;"/>
+		<method name="ofHoursMinutesSeconds(III)Ljava/time/ZoneOffset;"/>
+		<method name="ofTotalSeconds(I)Ljava/time/ZoneOffset;"/>
+		<field name="MAX"/>
+		<field name="MIN"/>
+		<field name="UTC"/>
+	</class>
+	<class name="java/time/ZonedDateTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/time/chrono/ChronoZonedDateTime"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;"/>
+		<method name="getDayOfMonth()I"/>
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
+		<method name="getDayOfYear()I"/>
+		<method name="getHour()I"/>
+		<method name="getMinute()I"/>
+		<method name="getMonth()Ljava/time/Month;"/>
+		<method name="getMonthValue()I"/>
+		<method name="getNano()I"/>
+		<method name="getSecond()I"/>
+		<method name="getYear()I"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/ZonedDateTime;"/>
+		<method name="minusDays(J)Ljava/time/ZonedDateTime;"/>
+		<method name="minusHours(J)Ljava/time/ZonedDateTime;"/>
+		<method name="minusMinutes(J)Ljava/time/ZonedDateTime;"/>
+		<method name="minusMonths(J)Ljava/time/ZonedDateTime;"/>
+		<method name="minusNanos(J)Ljava/time/ZonedDateTime;"/>
+		<method name="minusSeconds(J)Ljava/time/ZonedDateTime;"/>
+		<method name="minusWeeks(J)Ljava/time/ZonedDateTime;"/>
+		<method name="minusYears(J)Ljava/time/ZonedDateTime;"/>
+		<method name="now()Ljava/time/ZonedDateTime;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/ZonedDateTime;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="of(IIIIIIILjava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="of(Ljava/time/LocalDate;Ljava/time/LocalTime;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="ofInstant(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="ofLocal(Ljava/time/LocalDateTime;Ljava/time/ZoneId;Ljava/time/ZoneOffset;)Ljava/time/ZonedDateTime;"/>
+		<method name="ofStrict(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/ZonedDateTime;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/format/DateTimeFormatter;)Ljava/time/ZonedDateTime;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/ZonedDateTime;"/>
+		<method name="plusDays(J)Ljava/time/ZonedDateTime;"/>
+		<method name="plusHours(J)Ljava/time/ZonedDateTime;"/>
+		<method name="plusMinutes(J)Ljava/time/ZonedDateTime;"/>
+		<method name="plusMonths(J)Ljava/time/ZonedDateTime;"/>
+		<method name="plusNanos(J)Ljava/time/ZonedDateTime;"/>
+		<method name="plusSeconds(J)Ljava/time/ZonedDateTime;"/>
+		<method name="plusWeeks(J)Ljava/time/ZonedDateTime;"/>
+		<method name="plusYears(J)Ljava/time/ZonedDateTime;"/>
+		<method name="toLocalDate()Ljava/time/LocalDate;"/>
+		<method name="toLocalDateTime()Ljava/time/LocalDateTime;"/>
+		<method name="toOffsetDateTime()Ljava/time/OffsetDateTime;"/>
+		<method name="truncatedTo(Ljava/time/temporal/TemporalUnit;)Ljava/time/ZonedDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/ZonedDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/ZonedDateTime;"/>
+		<method name="withDayOfMonth(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withDayOfYear(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withEarlierOffsetAtOverlap()Ljava/time/ZonedDateTime;"/>
+		<method name="withFixedOffsetZone()Ljava/time/ZonedDateTime;"/>
+		<method name="withHour(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withLaterOffsetAtOverlap()Ljava/time/ZonedDateTime;"/>
+		<method name="withMinute(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withMonth(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withNano(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withSecond(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withYear(I)Ljava/time/ZonedDateTime;"/>
+		<method name="withZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="withZoneSameLocal(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+	</class>
+	<class name="java/time/chrono/AbstractChronology" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/time/chrono/Chronology"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/time/chrono/ChronoLocalDate" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atTime(Ljava/time/LocalTime;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="compareTo(Ljava/time/chrono/ChronoLocalDate;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
+		<method name="getEra()Ljava/time/chrono/Era;"/>
+		<method name="isAfter(Ljava/time/chrono/ChronoLocalDate;)Z"/>
+		<method name="isBefore(Ljava/time/chrono/ChronoLocalDate;)Z"/>
+		<method name="isEqual(Ljava/time/chrono/ChronoLocalDate;)Z"/>
+		<method name="isLeapYear()Z"/>
+		<method name="lengthOfMonth()I"/>
+		<method name="lengthOfYear()I"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="timeLineOrder()Ljava/util/Comparator;"/>
+		<method name="toEpochDay()J"/>
+		<method name="until(Ljava/time/chrono/ChronoLocalDate;)Ljava/time/chrono/ChronoPeriod;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDate;"/>
+	</class>
+	<class name="java/time/chrono/ChronoLocalDateTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="atZone(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="compareTo(Ljava/time/chrono/ChronoLocalDateTime;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
+		<method name="isAfter(Ljava/time/chrono/ChronoLocalDateTime;)Z"/>
+		<method name="isBefore(Ljava/time/chrono/ChronoLocalDateTime;)Z"/>
+		<method name="isEqual(Ljava/time/chrono/ChronoLocalDateTime;)Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="timeLineOrder()Ljava/util/Comparator;"/>
+		<method name="toEpochSecond(Ljava/time/ZoneOffset;)J"/>
+		<method name="toInstant(Ljava/time/ZoneOffset;)Ljava/time/Instant;"/>
+		<method name="toLocalDate()Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="toLocalTime()Ljava/time/LocalTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoLocalDateTime;"/>
+	</class>
+	<class name="java/time/chrono/ChronoPeriod" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/time/temporal/TemporalAmount"/>
+		<method name="between(Ljava/time/chrono/ChronoLocalDate;Ljava/time/chrono/ChronoLocalDate;)Ljava/time/chrono/ChronoPeriod;"/>
+		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
+		<method name="isNegative()Z"/>
+		<method name="isZero()Z"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoPeriod;"/>
+		<method name="multipliedBy(I)Ljava/time/chrono/ChronoPeriod;"/>
+		<method name="negated()Ljava/time/chrono/ChronoPeriod;"/>
+		<method name="normalized()Ljava/time/chrono/ChronoPeriod;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoPeriod;"/>
+	</class>
+	<class name="java/time/chrono/ChronoZonedDateTime" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<implements name="java/time/temporal/Temporal"/>
+		<method name="compareTo(Ljava/time/chrono/ChronoZonedDateTime;)I"/>
+		<method name="format(Ljava/time/format/DateTimeFormatter;)Ljava/lang/String;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
+		<method name="getOffset()Ljava/time/ZoneOffset;"/>
+		<method name="getZone()Ljava/time/ZoneId;"/>
+		<method name="isAfter(Ljava/time/chrono/ChronoZonedDateTime;)Z"/>
+		<method name="isBefore(Ljava/time/chrono/ChronoZonedDateTime;)Z"/>
+		<method name="isEqual(Ljava/time/chrono/ChronoZonedDateTime;)Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="timeLineOrder()Ljava/util/Comparator;"/>
+		<method name="toEpochSecond()J"/>
+		<method name="toInstant()Ljava/time/Instant;"/>
+		<method name="toLocalDate()Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="toLocalDateTime()Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="toLocalTime()Ljava/time/LocalTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="withEarlierOffsetAtOverlap()Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="withLaterOffsetAtOverlap()Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="withZoneSameInstant(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="withZoneSameLocal(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+	</class>
+	<class name="java/time/chrono/Chronology" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="compareTo(Ljava/time/chrono/Chronology;)I"/>
+		<method name="date(III)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="dateEpochDay(J)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="dateNow()Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="dateYearDay(II)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="eraOf(I)Ljava/time/chrono/Era;"/>
+		<method name="eras()Ljava/util/List;"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/Chronology;"/>
+		<method name="getAvailableChronologies()Ljava/util/Set;"/>
+		<method name="getCalendarType()Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getId()Ljava/lang/String;"/>
+		<method name="isLeapYear(J)Z"/>
+		<method name="localDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoLocalDateTime;"/>
+		<method name="of(Ljava/lang/String;)Ljava/time/chrono/Chronology;"/>
+		<method name="ofLocale(Ljava/util/Locale;)Ljava/time/chrono/Chronology;"/>
+		<method name="period(III)Ljava/time/chrono/ChronoPeriod;"/>
+		<method name="prolepticYear(Ljava/time/chrono/Era;I)I"/>
+		<method name="range(Ljava/time/temporal/ChronoField;)Ljava/time/temporal/ValueRange;"/>
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ChronoLocalDate;"/>
+		<method name="zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+		<method name="zonedDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ChronoZonedDateTime;"/>
+	</class>
+	<class name="java/time/chrono/Era" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/time/temporal/TemporalAccessor"/>
+		<implements name="java/time/temporal/TemporalAdjuster"/>
+		<method name="getDisplayName(Ljava/time/format/TextStyle;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getValue()I"/>
+	</class>
+	<class name="java/time/chrono/HijrahChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology"/>
+		<implements name="java/io/Serializable"/>
+		<method name="date(III)Ljava/time/chrono/HijrahDate;"/>
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/HijrahDate;"/>
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="dateEpochDay(J)Ljava/time/chrono/HijrahDate;"/>
+		<method name="dateNow()Ljava/time/chrono/HijrahDate;"/>
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="dateYearDay(II)Ljava/time/chrono/HijrahDate;"/>
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/HijrahDate;"/>
+		<method name="eraOf(I)Ljava/time/chrono/HijrahEra;"/>
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/HijrahDate;"/>
+		<field name="INSTANCE"/>
+	</class>
+	<class name="java/time/chrono/HijrahDate" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="getChronology()Ljava/time/chrono/HijrahChronology;"/>
+		<method name="getEra()Ljava/time/chrono/HijrahEra;"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="now()Ljava/time/chrono/HijrahDate;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="of(III)Ljava/time/chrono/HijrahDate;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/HijrahDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/HijrahDate;"/>
+		<method name="withVariant(Ljava/time/chrono/HijrahChronology;)Ljava/time/chrono/HijrahDate;"/>
+	</class>
+	<class name="java/time/chrono/HijrahEra" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/chrono/Era"/>
+		<method name="of(I)Ljava/time/chrono/HijrahEra;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/HijrahEra;"/>
+		<method name="values()[Ljava/time/chrono/HijrahEra;"/>
+		<field name="AH"/>
+	</class>
+	<class name="java/time/chrono/IsoChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology"/>
+		<implements name="java/io/Serializable"/>
+		<method name="date(III)Ljava/time/LocalDate;"/>
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/LocalDate;"/>
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDate;"/>
+		<method name="dateEpochDay(J)Ljava/time/LocalDate;"/>
+		<method name="dateNow()Ljava/time/LocalDate;"/>
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/LocalDate;"/>
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/LocalDate;"/>
+		<method name="dateYearDay(II)Ljava/time/LocalDate;"/>
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/LocalDate;"/>
+		<method name="eraOf(I)Ljava/time/chrono/IsoEra;"/>
+		<method name="localDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalDateTime;"/>
+		<method name="period(III)Ljava/time/Period;"/>
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/LocalDate;"/>
+		<method name="zonedDateTime(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"/>
+		<method name="zonedDateTime(Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZonedDateTime;"/>
+		<field name="INSTANCE"/>
+	</class>
+	<class name="java/time/chrono/IsoEra" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/chrono/Era"/>
+		<method name="of(I)Ljava/time/chrono/IsoEra;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/IsoEra;"/>
+		<method name="values()[Ljava/time/chrono/IsoEra;"/>
+		<field name="BCE"/>
+		<field name="CE"/>
+	</class>
+	<class name="java/time/chrono/JapaneseChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology"/>
+		<implements name="java/io/Serializable"/>
+		<method name="date(III)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="dateEpochDay(J)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="dateNow()Ljava/time/chrono/JapaneseDate;"/>
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="dateYearDay(II)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="eraOf(I)Ljava/time/chrono/JapaneseEra;"/>
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/JapaneseDate;"/>
+		<field name="INSTANCE"/>
+	</class>
+	<class name="java/time/chrono/JapaneseDate" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="getChronology()Ljava/time/chrono/JapaneseChronology;"/>
+		<method name="getEra()Ljava/time/chrono/JapaneseEra;"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="now()Ljava/time/chrono/JapaneseDate;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="of(III)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="of(Ljava/time/chrono/JapaneseEra;III)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/JapaneseDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/JapaneseDate;"/>
+	</class>
+	<class name="java/time/chrono/JapaneseEra" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/time/chrono/Era"/>
+		<method name="of(I)Ljava/time/chrono/JapaneseEra;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/JapaneseEra;"/>
+		<method name="values()[Ljava/time/chrono/JapaneseEra;"/>
+		<field name="HEISEI"/>
+		<field name="MEIJI"/>
+		<field name="REIWA" since="30"/>
+		<field name="SHOWA"/>
+		<field name="TAISHO"/>
+	</class>
+	<class name="java/time/chrono/MinguoChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology"/>
+		<implements name="java/io/Serializable"/>
+		<method name="date(III)Ljava/time/chrono/MinguoDate;"/>
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/MinguoDate;"/>
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="dateEpochDay(J)Ljava/time/chrono/MinguoDate;"/>
+		<method name="dateNow()Ljava/time/chrono/MinguoDate;"/>
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="dateYearDay(II)Ljava/time/chrono/MinguoDate;"/>
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/MinguoDate;"/>
+		<method name="eraOf(I)Ljava/time/chrono/MinguoEra;"/>
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/MinguoDate;"/>
+		<field name="INSTANCE"/>
+	</class>
+	<class name="java/time/chrono/MinguoDate" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="getChronology()Ljava/time/chrono/MinguoChronology;"/>
+		<method name="getEra()Ljava/time/chrono/MinguoEra;"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="now()Ljava/time/chrono/MinguoDate;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="of(III)Ljava/time/chrono/MinguoDate;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/MinguoDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/MinguoDate;"/>
+	</class>
+	<class name="java/time/chrono/MinguoEra" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/chrono/Era"/>
+		<method name="of(I)Ljava/time/chrono/MinguoEra;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/MinguoEra;"/>
+		<method name="values()[Ljava/time/chrono/MinguoEra;"/>
+		<field name="BEFORE_ROC"/>
+		<field name="ROC"/>
+	</class>
+	<class name="java/time/chrono/ThaiBuddhistChronology" since="26">
+		<extends name="java/time/chrono/AbstractChronology"/>
+		<implements name="java/io/Serializable"/>
+		<method name="date(III)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="date(Ljava/time/chrono/Era;III)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="date(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="dateEpochDay(J)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="dateNow()Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="dateNow(Ljava/time/Clock;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="dateNow(Ljava/time/ZoneId;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="dateYearDay(II)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="dateYearDay(Ljava/time/chrono/Era;II)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="eraOf(I)Ljava/time/chrono/ThaiBuddhistEra;"/>
+		<method name="resolveDate(Ljava/util/Map;Ljava/time/format/ResolverStyle;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<field name="INSTANCE"/>
+	</class>
+	<class name="java/time/chrono/ThaiBuddhistDate" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="from(Ljava/time/temporal/TemporalAccessor;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="getChronology()Ljava/time/chrono/ThaiBuddhistChronology;"/>
+		<method name="getEra()Ljava/time/chrono/ThaiBuddhistEra;"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="now()Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="now(Ljava/time/Clock;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="now(Ljava/time/ZoneId;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="of(III)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/chrono/ThaiBuddhistDate;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/chrono/ThaiBuddhistDate;"/>
+	</class>
+	<class name="java/time/chrono/ThaiBuddhistEra" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/chrono/Era"/>
+		<method name="of(I)Ljava/time/chrono/ThaiBuddhistEra;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/chrono/ThaiBuddhistEra;"/>
+		<method name="values()[Ljava/time/chrono/ThaiBuddhistEra;"/>
+		<field name="BE"/>
+		<field name="BEFORE_BE"/>
+	</class>
+	<class name="java/time/format/DateTimeFormatter" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="format(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/String;"/>
+		<method name="formatTo(Ljava/time/temporal/TemporalAccessor;Ljava/lang/Appendable;)V"/>
+		<method name="getChronology()Ljava/time/chrono/Chronology;"/>
+		<method name="getDecimalStyle()Ljava/time/format/DecimalStyle;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getResolverFields()Ljava/util/Set;"/>
+		<method name="getResolverStyle()Ljava/time/format/ResolverStyle;"/>
+		<method name="getZone()Ljava/time/ZoneId;"/>
+		<method name="ofLocalizedDate(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="ofLocalizedDateTime(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="ofLocalizedDateTime(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="ofLocalizedTime(Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="ofPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="ofPattern(Ljava/lang/String;Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="parse(Ljava/lang/CharSequence;)Ljava/time/temporal/TemporalAccessor;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/temporal/TemporalAccessor;"/>
+		<method name="parse(Ljava/lang/CharSequence;Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;"/>
+		<method name="parseBest(Ljava/lang/CharSequence;[Ljava/time/temporal/TemporalQuery;)Ljava/time/temporal/TemporalAccessor;"/>
+		<method name="parseUnresolved(Ljava/lang/CharSequence;Ljava/text/ParsePosition;)Ljava/time/temporal/TemporalAccessor;"/>
+		<method name="parsedExcessDays()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="parsedLeapSecond()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="toFormat()Ljava/text/Format;"/>
+		<method name="toFormat(Ljava/time/temporal/TemporalQuery;)Ljava/text/Format;"/>
+		<method name="withChronology(Ljava/time/chrono/Chronology;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="withDecimalStyle(Ljava/time/format/DecimalStyle;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="withLocale(Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="withResolverFields(Ljava/util/Set;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="withResolverFields([Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="withResolverStyle(Ljava/time/format/ResolverStyle;)Ljava/time/format/DateTimeFormatter;"/>
+		<method name="withZone(Ljava/time/ZoneId;)Ljava/time/format/DateTimeFormatter;"/>
+		<field name="BASIC_ISO_DATE"/>
+		<field name="ISO_DATE"/>
+		<field name="ISO_DATE_TIME"/>
+		<field name="ISO_INSTANT"/>
+		<field name="ISO_LOCAL_DATE"/>
+		<field name="ISO_LOCAL_DATE_TIME"/>
+		<field name="ISO_LOCAL_TIME"/>
+		<field name="ISO_OFFSET_DATE"/>
+		<field name="ISO_OFFSET_DATE_TIME"/>
+		<field name="ISO_OFFSET_TIME"/>
+		<field name="ISO_ORDINAL_DATE"/>
+		<field name="ISO_TIME"/>
+		<field name="ISO_WEEK_DATE"/>
+		<field name="ISO_ZONED_DATE_TIME"/>
+		<field name="RFC_1123_DATE_TIME"/>
+	</class>
+	<class name="java/time/format/DateTimeFormatterBuilder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="append(Ljava/time/format/DateTimeFormatter;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendChronologyId()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendChronologyText(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendFraction(Ljava/time/temporal/TemporalField;IIZ)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendInstant()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendInstant(I)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendLiteral(C)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendLiteral(Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendLocalized(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendLocalizedOffset(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendOffset(Ljava/lang/String;Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendOffsetId()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendOptional(Ljava/time/format/DateTimeFormatter;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendPattern(Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendText(Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendText(Ljava/time/temporal/TemporalField;Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendText(Ljava/time/temporal/TemporalField;Ljava/util/Map;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendValue(Ljava/time/temporal/TemporalField;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendValue(Ljava/time/temporal/TemporalField;I)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendValue(Ljava/time/temporal/TemporalField;IILjava/time/format/SignStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendValueReduced(Ljava/time/temporal/TemporalField;III)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendValueReduced(Ljava/time/temporal/TemporalField;IILjava/time/chrono/ChronoLocalDate;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendZoneId()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendZoneOrOffsetId()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendZoneRegionId()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendZoneText(Ljava/time/format/TextStyle;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="appendZoneText(Ljava/time/format/TextStyle;Ljava/util/Set;)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="getLocalizedDateTimePattern(Ljava/time/format/FormatStyle;Ljava/time/format/FormatStyle;Ljava/time/chrono/Chronology;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="optionalEnd()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="optionalStart()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="padNext(I)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="padNext(IC)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="parseCaseInsensitive()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="parseCaseSensitive()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="parseDefaulting(Ljava/time/temporal/TemporalField;J)Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="parseLenient()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="parseStrict()Ljava/time/format/DateTimeFormatterBuilder;"/>
+		<method name="toFormatter()Ljava/time/format/DateTimeFormatter;"/>
+		<method name="toFormatter(Ljava/util/Locale;)Ljava/time/format/DateTimeFormatter;"/>
+	</class>
+	<class name="java/time/format/DateTimeParseException" since="26">
+		<extends name="java/time/DateTimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/CharSequence;ILjava/lang/Throwable;)V"/>
+		<method name="getErrorIndex()I"/>
+		<method name="getParsedString()Ljava/lang/String;"/>
+	</class>
+	<class name="java/time/format/DecimalStyle" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getAvailableLocales()Ljava/util/Set;"/>
+		<method name="getDecimalSeparator()C"/>
+		<method name="getNegativeSign()C"/>
+		<method name="getPositiveSign()C"/>
+		<method name="getZeroDigit()C"/>
+		<method name="of(Ljava/util/Locale;)Ljava/time/format/DecimalStyle;"/>
+		<method name="ofDefaultLocale()Ljava/time/format/DecimalStyle;"/>
+		<method name="withDecimalSeparator(C)Ljava/time/format/DecimalStyle;"/>
+		<method name="withNegativeSign(C)Ljava/time/format/DecimalStyle;"/>
+		<method name="withPositiveSign(C)Ljava/time/format/DecimalStyle;"/>
+		<method name="withZeroDigit(C)Ljava/time/format/DecimalStyle;"/>
+		<field name="STANDARD"/>
+	</class>
+	<class name="java/time/format/FormatStyle" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/FormatStyle;"/>
+		<method name="values()[Ljava/time/format/FormatStyle;"/>
+		<field name="FULL"/>
+		<field name="LONG"/>
+		<field name="MEDIUM"/>
+		<field name="SHORT"/>
+	</class>
+	<class name="java/time/format/ResolverStyle" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/ResolverStyle;"/>
+		<method name="values()[Ljava/time/format/ResolverStyle;"/>
+		<field name="LENIENT"/>
+		<field name="SMART"/>
+		<field name="STRICT"/>
+	</class>
+	<class name="java/time/format/SignStyle" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/SignStyle;"/>
+		<method name="values()[Ljava/time/format/SignStyle;"/>
+		<field name="ALWAYS"/>
+		<field name="EXCEEDS_PAD"/>
+		<field name="NEVER"/>
+		<field name="NORMAL"/>
+		<field name="NOT_NEGATIVE"/>
+	</class>
+	<class name="java/time/format/TextStyle" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="asNormal()Ljava/time/format/TextStyle;"/>
+		<method name="asStandalone()Ljava/time/format/TextStyle;"/>
+		<method name="isStandalone()Z"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/format/TextStyle;"/>
+		<method name="values()[Ljava/time/format/TextStyle;"/>
+		<field name="FULL"/>
+		<field name="FULL_STANDALONE"/>
+		<field name="NARROW"/>
+		<field name="NARROW_STANDALONE"/>
+		<field name="SHORT"/>
+		<field name="SHORT_STANDALONE"/>
+	</class>
+	<class name="java/time/temporal/ChronoField" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/temporal/TemporalField"/>
+		<method name="checkValidIntValue(J)I"/>
+		<method name="checkValidValue(J)J"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/temporal/ChronoField;"/>
+		<method name="values()[Ljava/time/temporal/ChronoField;"/>
+		<field name="ALIGNED_DAY_OF_WEEK_IN_MONTH"/>
+		<field name="ALIGNED_DAY_OF_WEEK_IN_YEAR"/>
+		<field name="ALIGNED_WEEK_OF_MONTH"/>
+		<field name="ALIGNED_WEEK_OF_YEAR"/>
+		<field name="AMPM_OF_DAY"/>
+		<field name="CLOCK_HOUR_OF_AMPM"/>
+		<field name="CLOCK_HOUR_OF_DAY"/>
+		<field name="DAY_OF_MONTH"/>
+		<field name="DAY_OF_WEEK"/>
+		<field name="DAY_OF_YEAR"/>
+		<field name="EPOCH_DAY"/>
+		<field name="ERA"/>
+		<field name="HOUR_OF_AMPM"/>
+		<field name="HOUR_OF_DAY"/>
+		<field name="INSTANT_SECONDS"/>
+		<field name="MICRO_OF_DAY"/>
+		<field name="MICRO_OF_SECOND"/>
+		<field name="MILLI_OF_DAY"/>
+		<field name="MILLI_OF_SECOND"/>
+		<field name="MINUTE_OF_DAY"/>
+		<field name="MINUTE_OF_HOUR"/>
+		<field name="MONTH_OF_YEAR"/>
+		<field name="NANO_OF_DAY"/>
+		<field name="NANO_OF_SECOND"/>
+		<field name="OFFSET_SECONDS"/>
+		<field name="PROLEPTIC_MONTH"/>
+		<field name="SECOND_OF_DAY"/>
+		<field name="SECOND_OF_MINUTE"/>
+		<field name="YEAR"/>
+		<field name="YEAR_OF_ERA"/>
+	</class>
+	<class name="java/time/temporal/ChronoUnit" since="26">
+		<extends name="java/lang/Enum"/>
+		<implements name="java/time/temporal/TemporalUnit"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/temporal/ChronoUnit;"/>
+		<method name="values()[Ljava/time/temporal/ChronoUnit;"/>
+		<field name="CENTURIES"/>
+		<field name="DAYS"/>
+		<field name="DECADES"/>
+		<field name="ERAS"/>
+		<field name="FOREVER"/>
+		<field name="HALF_DAYS"/>
+		<field name="HOURS"/>
+		<field name="MICROS"/>
+		<field name="MILLENNIA"/>
+		<field name="MILLIS"/>
+		<field name="MINUTES"/>
+		<field name="MONTHS"/>
+		<field name="NANOS"/>
+		<field name="SECONDS"/>
+		<field name="WEEKS"/>
+		<field name="YEARS"/>
+	</class>
+	<class name="java/time/temporal/IsoFields" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="DAY_OF_QUARTER"/>
+		<field name="QUARTER_OF_YEAR"/>
+		<field name="QUARTER_YEARS"/>
+		<field name="WEEK_BASED_YEAR"/>
+		<field name="WEEK_BASED_YEARS"/>
+		<field name="WEEK_OF_WEEK_BASED_YEAR"/>
+	</class>
+	<class name="java/time/temporal/JulianFields" since="26">
+		<extends name="java/lang/Object"/>
+		<field name="JULIAN_DAY"/>
+		<field name="MODIFIED_JULIAN_DAY"/>
+		<field name="RATA_DIE"/>
+	</class>
+	<class name="java/time/temporal/Temporal" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/time/temporal/TemporalAccessor"/>
+		<method name="isSupported(Ljava/time/temporal/TemporalUnit;)Z"/>
+		<method name="minus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"/>
+		<method name="minus(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"/>
+		<method name="plus(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"/>
+		<method name="plus(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"/>
+		<method name="until(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J"/>
+		<method name="with(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/temporal/Temporal;"/>
+		<method name="with(Ljava/time/temporal/TemporalField;J)Ljava/time/temporal/Temporal;"/>
+	</class>
+	<class name="java/time/temporal/TemporalAccessor" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="get(Ljava/time/temporal/TemporalField;)I"/>
+		<method name="getLong(Ljava/time/temporal/TemporalField;)J"/>
+		<method name="isSupported(Ljava/time/temporal/TemporalField;)Z"/>
+		<method name="query(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;"/>
+		<method name="range(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;"/>
+	</class>
+	<class name="java/time/temporal/TemporalAdjuster" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="adjustInto(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"/>
+	</class>
+	<class name="java/time/temporal/TemporalAdjusters" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="dayOfWeekInMonth(ILjava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="firstDayOfMonth()Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="firstDayOfNextMonth()Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="firstDayOfNextYear()Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="firstDayOfYear()Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="firstInMonth(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="lastDayOfMonth()Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="lastDayOfYear()Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="lastInMonth(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="next(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="nextOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="ofDateAdjuster(Ljava/util/function/UnaryOperator;)Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="previous(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
+		<method name="previousOrSame(Ljava/time/DayOfWeek;)Ljava/time/temporal/TemporalAdjuster;"/>
+	</class>
+	<class name="java/time/temporal/TemporalAmount" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="addTo(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"/>
+		<method name="get(Ljava/time/temporal/TemporalUnit;)J"/>
+		<method name="getUnits()Ljava/util/List;"/>
+		<method name="subtractFrom(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"/>
+	</class>
+	<class name="java/time/temporal/TemporalField" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="adjustInto(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;"/>
+		<method name="getBaseUnit()Ljava/time/temporal/TemporalUnit;"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getFrom(Ljava/time/temporal/TemporalAccessor;)J"/>
+		<method name="getRangeUnit()Ljava/time/temporal/TemporalUnit;"/>
+		<method name="isDateBased()Z"/>
+		<method name="isSupportedBy(Ljava/time/temporal/TemporalAccessor;)Z"/>
+		<method name="isTimeBased()Z"/>
+		<method name="range()Ljava/time/temporal/ValueRange;"/>
+		<method name="rangeRefinedBy(Ljava/time/temporal/TemporalAccessor;)Ljava/time/temporal/ValueRange;"/>
+		<method name="resolve(Ljava/util/Map;Ljava/time/temporal/TemporalAccessor;Ljava/time/format/ResolverStyle;)Ljava/time/temporal/TemporalAccessor;"/>
+	</class>
+	<class name="java/time/temporal/TemporalQueries" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="chronology()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="localDate()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="localTime()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="offset()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="precision()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="zone()Ljava/time/temporal/TemporalQuery;"/>
+		<method name="zoneId()Ljava/time/temporal/TemporalQuery;"/>
+	</class>
+	<class name="java/time/temporal/TemporalQuery" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="queryFrom(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/time/temporal/TemporalUnit" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="addTo(Ljava/time/temporal/Temporal;J)Ljava/time/temporal/Temporal;"/>
+		<method name="between(Ljava/time/temporal/Temporal;Ljava/time/temporal/Temporal;)J"/>
+		<method name="getDuration()Ljava/time/Duration;"/>
+		<method name="isDateBased()Z"/>
+		<method name="isDurationEstimated()Z"/>
+		<method name="isSupportedBy(Ljava/time/temporal/Temporal;)Z"/>
+		<method name="isTimeBased()Z"/>
+	</class>
+	<class name="java/time/temporal/UnsupportedTemporalTypeException" since="26">
+		<extends name="java/time/DateTimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/time/temporal/ValueRange" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="checkValidIntValue(JLjava/time/temporal/TemporalField;)I"/>
+		<method name="checkValidValue(JLjava/time/temporal/TemporalField;)J"/>
+		<method name="getLargestMinimum()J"/>
+		<method name="getMaximum()J"/>
+		<method name="getMinimum()J"/>
+		<method name="getSmallestMaximum()J"/>
+		<method name="isFixed()Z"/>
+		<method name="isIntValue()Z"/>
+		<method name="isValidIntValue(J)Z"/>
+		<method name="isValidValue(J)Z"/>
+		<method name="of(JJ)Ljava/time/temporal/ValueRange;"/>
+		<method name="of(JJJ)Ljava/time/temporal/ValueRange;"/>
+		<method name="of(JJJJ)Ljava/time/temporal/ValueRange;"/>
+	</class>
+	<class name="java/time/temporal/WeekFields" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="dayOfWeek()Ljava/time/temporal/TemporalField;"/>
+		<method name="getFirstDayOfWeek()Ljava/time/DayOfWeek;"/>
+		<method name="getMinimalDaysInFirstWeek()I"/>
+		<method name="of(Ljava/time/DayOfWeek;I)Ljava/time/temporal/WeekFields;"/>
+		<method name="of(Ljava/util/Locale;)Ljava/time/temporal/WeekFields;"/>
+		<method name="weekBasedYear()Ljava/time/temporal/TemporalField;"/>
+		<method name="weekOfMonth()Ljava/time/temporal/TemporalField;"/>
+		<method name="weekOfWeekBasedYear()Ljava/time/temporal/TemporalField;"/>
+		<method name="weekOfYear()Ljava/time/temporal/TemporalField;"/>
+		<field name="ISO"/>
+		<field name="SUNDAY_START"/>
+		<field name="WEEK_BASED_YEARS"/>
+	</class>
+	<class name="java/time/zone/ZoneOffsetTransition" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="compareTo(Ljava/time/zone/ZoneOffsetTransition;)I"/>
+		<method name="getDateTimeAfter()Ljava/time/LocalDateTime;"/>
+		<method name="getDateTimeBefore()Ljava/time/LocalDateTime;"/>
+		<method name="getDuration()Ljava/time/Duration;"/>
+		<method name="getInstant()Ljava/time/Instant;"/>
+		<method name="getOffsetAfter()Ljava/time/ZoneOffset;"/>
+		<method name="getOffsetBefore()Ljava/time/ZoneOffset;"/>
+		<method name="isGap()Z"/>
+		<method name="isOverlap()Z"/>
+		<method name="isValidOffset(Ljava/time/ZoneOffset;)Z"/>
+		<method name="of(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneOffsetTransition;"/>
+		<method name="toEpochSecond()J"/>
+	</class>
+	<class name="java/time/zone/ZoneOffsetTransitionRule" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="createTransition(I)Ljava/time/zone/ZoneOffsetTransition;"/>
+		<method name="getDayOfMonthIndicator()I"/>
+		<method name="getDayOfWeek()Ljava/time/DayOfWeek;"/>
+		<method name="getLocalTime()Ljava/time/LocalTime;"/>
+		<method name="getMonth()Ljava/time/Month;"/>
+		<method name="getOffsetAfter()Ljava/time/ZoneOffset;"/>
+		<method name="getOffsetBefore()Ljava/time/ZoneOffset;"/>
+		<method name="getStandardOffset()Ljava/time/ZoneOffset;"/>
+		<method name="getTimeDefinition()Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;"/>
+		<method name="isMidnightEndOfDay()Z"/>
+		<method name="of(Ljava/time/Month;ILjava/time/DayOfWeek;Ljava/time/LocalTime;ZLjava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneOffsetTransitionRule;"/>
+	</class>
+	<class name="java/time/zone/ZoneOffsetTransitionRule$TimeDefinition" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="createDateTime(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;)Ljava/time/LocalDateTime;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;"/>
+		<method name="values()[Ljava/time/zone/ZoneOffsetTransitionRule$TimeDefinition;"/>
+		<field name="STANDARD"/>
+		<field name="UTC"/>
+		<field name="WALL"/>
+	</class>
+	<class name="java/time/zone/ZoneRules" since="26">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="getDaylightSavings(Ljava/time/Instant;)Ljava/time/Duration;"/>
+		<method name="getOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;"/>
+		<method name="getOffset(Ljava/time/LocalDateTime;)Ljava/time/ZoneOffset;"/>
+		<method name="getStandardOffset(Ljava/time/Instant;)Ljava/time/ZoneOffset;"/>
+		<method name="getTransition(Ljava/time/LocalDateTime;)Ljava/time/zone/ZoneOffsetTransition;"/>
+		<method name="getTransitionRules()Ljava/util/List;"/>
+		<method name="getTransitions()Ljava/util/List;"/>
+		<method name="getValidOffsets(Ljava/time/LocalDateTime;)Ljava/util/List;"/>
+		<method name="isDaylightSavings(Ljava/time/Instant;)Z"/>
+		<method name="isFixedOffset()Z"/>
+		<method name="isValidOffset(Ljava/time/LocalDateTime;Ljava/time/ZoneOffset;)Z"/>
+		<method name="nextTransition(Ljava/time/Instant;)Ljava/time/zone/ZoneOffsetTransition;"/>
+		<method name="of(Ljava/time/ZoneOffset;)Ljava/time/zone/ZoneRules;"/>
+		<method name="of(Ljava/time/ZoneOffset;Ljava/time/ZoneOffset;Ljava/util/List;Ljava/util/List;Ljava/util/List;)Ljava/time/zone/ZoneRules;"/>
+		<method name="previousTransition(Ljava/time/Instant;)Ljava/time/zone/ZoneOffsetTransition;"/>
+	</class>
+	<class name="java/time/zone/ZoneRulesException" since="26">
+		<extends name="java/time/DateTimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/AbstractCollection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Collection"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/AbstractList" since="1">
+		<extends name="java/util/AbstractCollection"/>
+		<implements name="java/util/List"/>
+		<method name="&lt;init>()V"/>
+		<method name="removeRange(II)V"/>
+		<field name="modCount"/>
+	</class>
+	<class name="java/util/AbstractMap" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Map"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/AbstractMap$SimpleEntry" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/Map$Entry"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="&lt;init>(Ljava/util/Map$Entry;)V"/>
+	</class>
+	<class name="java/util/AbstractMap$SimpleImmutableEntry" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/Map$Entry"/>
+		<method name="&lt;init>(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="&lt;init>(Ljava/util/Map$Entry;)V"/>
+	</class>
+	<class name="java/util/AbstractQueue" since="1">
+		<extends name="java/util/AbstractCollection"/>
+		<implements name="java/util/Queue"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/AbstractSequentialList" since="1">
+		<extends name="java/util/AbstractList"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/AbstractSet" since="1">
+		<extends name="java/util/AbstractCollection"/>
+		<implements name="java/util/Set"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/ArrayDeque" since="9">
+		<extends name="java/util/AbstractCollection"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/Deque"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="clone()Ljava/util/ArrayDeque;"/>
+	</class>
+	<class name="java/util/ArrayList" since="1">
+		<extends name="java/util/AbstractList"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/RandomAccess"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="ensureCapacity(I)V"/>
+		<method name="trimToSize()V"/>
+	</class>
+	<class name="java/util/Arrays" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="asList([Ljava/lang/Object;)Ljava/util/List;"/>
+		<method name="binarySearch([BB)I"/>
+		<method name="binarySearch([BIIB)I" since="9"/>
+		<method name="binarySearch([CC)I"/>
+		<method name="binarySearch([CIIC)I" since="9"/>
+		<method name="binarySearch([DD)I"/>
+		<method name="binarySearch([DIID)I" since="9"/>
+		<method name="binarySearch([FF)I"/>
+		<method name="binarySearch([FIIF)I" since="9"/>
+		<method name="binarySearch([II)I"/>
+		<method name="binarySearch([IIII)I" since="9"/>
+		<method name="binarySearch([JIIJ)I" since="9"/>
+		<method name="binarySearch([JJ)I"/>
+		<method name="binarySearch([Ljava/lang/Object;IILjava/lang/Object;)I" since="9"/>
+		<method name="binarySearch([Ljava/lang/Object;IILjava/lang/Object;Ljava/util/Comparator;)I" since="9"/>
+		<method name="binarySearch([Ljava/lang/Object;Ljava/lang/Object;)I"/>
+		<method name="binarySearch([Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I"/>
+		<method name="binarySearch([SIIS)I" since="9"/>
+		<method name="binarySearch([SS)I"/>
+		<method name="copyOf([BI)[B" since="9"/>
+		<method name="copyOf([CI)[C" since="9"/>
+		<method name="copyOf([DI)[D" since="9"/>
+		<method name="copyOf([FI)[F" since="9"/>
+		<method name="copyOf([II)[I" since="9"/>
+		<method name="copyOf([JI)[J" since="9"/>
+		<method name="copyOf([Ljava/lang/Object;I)[Ljava/lang/Object;" since="9"/>
+		<method name="copyOf([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object;" since="9"/>
+		<method name="copyOf([SI)[S" since="9"/>
+		<method name="copyOf([ZI)[Z" since="9"/>
+		<method name="copyOfRange([BII)[B" since="9"/>
+		<method name="copyOfRange([CII)[C" since="9"/>
+		<method name="copyOfRange([DII)[D" since="9"/>
+		<method name="copyOfRange([FII)[F" since="9"/>
+		<method name="copyOfRange([III)[I" since="9"/>
+		<method name="copyOfRange([JII)[J" since="9"/>
+		<method name="copyOfRange([Ljava/lang/Object;II)[Ljava/lang/Object;" since="9"/>
+		<method name="copyOfRange([Ljava/lang/Object;IILjava/lang/Class;)[Ljava/lang/Object;" since="9"/>
+		<method name="copyOfRange([SII)[S" since="9"/>
+		<method name="copyOfRange([ZII)[Z" since="9"/>
+		<method name="deepEquals([Ljava/lang/Object;[Ljava/lang/Object;)Z"/>
+		<method name="deepHashCode([Ljava/lang/Object;)I"/>
+		<method name="deepToString([Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="equals([B[B)Z"/>
+		<method name="equals([C[C)Z"/>
+		<method name="equals([D[D)Z"/>
+		<method name="equals([F[F)Z"/>
+		<method name="equals([I[I)Z"/>
+		<method name="equals([J[J)Z"/>
+		<method name="equals([Ljava/lang/Object;[Ljava/lang/Object;)Z"/>
+		<method name="equals([S[S)Z"/>
+		<method name="equals([Z[Z)Z"/>
+		<method name="fill([BB)V"/>
+		<method name="fill([BIIB)V"/>
+		<method name="fill([CC)V"/>
+		<method name="fill([CIIC)V"/>
+		<method name="fill([DD)V"/>
+		<method name="fill([DIID)V"/>
+		<method name="fill([FF)V"/>
+		<method name="fill([FIIF)V"/>
+		<method name="fill([II)V"/>
+		<method name="fill([IIII)V"/>
+		<method name="fill([JIIJ)V"/>
+		<method name="fill([JJ)V"/>
+		<method name="fill([Ljava/lang/Object;IILjava/lang/Object;)V"/>
+		<method name="fill([Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="fill([SIIS)V"/>
+		<method name="fill([SS)V"/>
+		<method name="fill([ZIIZ)V"/>
+		<method name="fill([ZZ)V"/>
+		<method name="hashCode([B)I"/>
+		<method name="hashCode([C)I"/>
+		<method name="hashCode([D)I"/>
+		<method name="hashCode([F)I"/>
+		<method name="hashCode([I)I"/>
+		<method name="hashCode([J)I"/>
+		<method name="hashCode([Ljava/lang/Object;)I"/>
+		<method name="hashCode([S)I"/>
+		<method name="hashCode([Z)I"/>
+		<method name="parallelPrefix([DIILjava/util/function/DoubleBinaryOperator;)V" since="24"/>
+		<method name="parallelPrefix([DLjava/util/function/DoubleBinaryOperator;)V" since="24"/>
+		<method name="parallelPrefix([IIILjava/util/function/IntBinaryOperator;)V" since="24"/>
+		<method name="parallelPrefix([ILjava/util/function/IntBinaryOperator;)V" since="24"/>
+		<method name="parallelPrefix([JIILjava/util/function/LongBinaryOperator;)V" since="24"/>
+		<method name="parallelPrefix([JLjava/util/function/LongBinaryOperator;)V" since="24"/>
+		<method name="parallelPrefix([Ljava/lang/Object;IILjava/util/function/BinaryOperator;)V" since="24"/>
+		<method name="parallelPrefix([Ljava/lang/Object;Ljava/util/function/BinaryOperator;)V" since="24"/>
+		<method name="parallelSetAll([DLjava/util/function/IntToDoubleFunction;)V" since="24"/>
+		<method name="parallelSetAll([ILjava/util/function/IntUnaryOperator;)V" since="24"/>
+		<method name="parallelSetAll([JLjava/util/function/IntToLongFunction;)V" since="24"/>
+		<method name="parallelSetAll([Ljava/lang/Object;Ljava/util/function/IntFunction;)V" since="24"/>
+		<method name="parallelSort([B)V" since="24"/>
+		<method name="parallelSort([BII)V" since="24"/>
+		<method name="parallelSort([C)V" since="24"/>
+		<method name="parallelSort([CII)V" since="24"/>
+		<method name="parallelSort([D)V" since="24"/>
+		<method name="parallelSort([DII)V" since="24"/>
+		<method name="parallelSort([F)V" since="24"/>
+		<method name="parallelSort([FII)V" since="24"/>
+		<method name="parallelSort([I)V" since="24"/>
+		<method name="parallelSort([III)V" since="24"/>
+		<method name="parallelSort([J)V" since="24"/>
+		<method name="parallelSort([JII)V" since="24"/>
+		<method name="parallelSort([Ljava/lang/Comparable;)V" since="24"/>
+		<method name="parallelSort([Ljava/lang/Comparable;II)V" since="24"/>
+		<method name="parallelSort([Ljava/lang/Object;IILjava/util/Comparator;)V" since="24"/>
+		<method name="parallelSort([Ljava/lang/Object;Ljava/util/Comparator;)V" since="24"/>
+		<method name="parallelSort([S)V" since="24"/>
+		<method name="parallelSort([SII)V" since="24"/>
+		<method name="setAll([DLjava/util/function/IntToDoubleFunction;)V" since="24"/>
+		<method name="setAll([ILjava/util/function/IntUnaryOperator;)V" since="24"/>
+		<method name="setAll([JLjava/util/function/IntToLongFunction;)V" since="24"/>
+		<method name="setAll([Ljava/lang/Object;Ljava/util/function/IntFunction;)V" since="24"/>
+		<method name="sort([B)V"/>
+		<method name="sort([BII)V"/>
+		<method name="sort([C)V"/>
+		<method name="sort([CII)V"/>
+		<method name="sort([D)V"/>
+		<method name="sort([DII)V"/>
+		<method name="sort([F)V"/>
+		<method name="sort([FII)V"/>
+		<method name="sort([I)V"/>
+		<method name="sort([III)V"/>
+		<method name="sort([J)V"/>
+		<method name="sort([JII)V"/>
+		<method name="sort([Ljava/lang/Object;)V"/>
+		<method name="sort([Ljava/lang/Object;II)V"/>
+		<method name="sort([Ljava/lang/Object;IILjava/util/Comparator;)V"/>
+		<method name="sort([Ljava/lang/Object;Ljava/util/Comparator;)V"/>
+		<method name="sort([S)V"/>
+		<method name="sort([SII)V"/>
+		<method name="spliterator([D)Ljava/util/Spliterator$OfDouble;" since="24"/>
+		<method name="spliterator([DII)Ljava/util/Spliterator$OfDouble;" since="24"/>
+		<method name="spliterator([I)Ljava/util/Spliterator$OfInt;" since="24"/>
+		<method name="spliterator([III)Ljava/util/Spliterator$OfInt;" since="24"/>
+		<method name="spliterator([J)Ljava/util/Spliterator$OfLong;" since="24"/>
+		<method name="spliterator([JII)Ljava/util/Spliterator$OfLong;" since="24"/>
+		<method name="spliterator([Ljava/lang/Object;)Ljava/util/Spliterator;" since="24"/>
+		<method name="spliterator([Ljava/lang/Object;II)Ljava/util/Spliterator;" since="24"/>
+		<method name="stream([D)Ljava/util/stream/DoubleStream;" since="24"/>
+		<method name="stream([DII)Ljava/util/stream/DoubleStream;" since="24"/>
+		<method name="stream([I)Ljava/util/stream/IntStream;" since="24"/>
+		<method name="stream([III)Ljava/util/stream/IntStream;" since="24"/>
+		<method name="stream([J)Ljava/util/stream/LongStream;" since="24"/>
+		<method name="stream([JII)Ljava/util/stream/LongStream;" since="24"/>
+		<method name="stream([Ljava/lang/Object;)Ljava/util/stream/Stream;" since="24"/>
+		<method name="stream([Ljava/lang/Object;II)Ljava/util/stream/Stream;" since="24"/>
+		<method name="toString([B)Ljava/lang/String;"/>
+		<method name="toString([C)Ljava/lang/String;"/>
+		<method name="toString([D)Ljava/lang/String;"/>
+		<method name="toString([F)Ljava/lang/String;"/>
+		<method name="toString([I)Ljava/lang/String;"/>
+		<method name="toString([J)Ljava/lang/String;"/>
+		<method name="toString([Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="toString([S)Ljava/lang/String;"/>
+		<method name="toString([Z)Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/Base64" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="getDecoder()Ljava/util/Base64$Decoder;"/>
+		<method name="getEncoder()Ljava/util/Base64$Encoder;"/>
+		<method name="getMimeDecoder()Ljava/util/Base64$Decoder;"/>
+		<method name="getMimeEncoder()Ljava/util/Base64$Encoder;"/>
+		<method name="getMimeEncoder(I[B)Ljava/util/Base64$Encoder;"/>
+		<method name="getUrlDecoder()Ljava/util/Base64$Decoder;"/>
+		<method name="getUrlEncoder()Ljava/util/Base64$Encoder;"/>
+	</class>
+	<class name="java/util/Base64$Decoder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="decode(Ljava/lang/String;)[B"/>
+		<method name="decode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
+		<method name="decode([B)[B"/>
+		<method name="decode([B[B)I"/>
+		<method name="wrap(Ljava/io/InputStream;)Ljava/io/InputStream;"/>
+	</class>
+	<class name="java/util/Base64$Encoder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="encode(Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer;"/>
+		<method name="encode([B)[B"/>
+		<method name="encode([B[B)I"/>
+		<method name="encodeToString([B)Ljava/lang/String;"/>
+		<method name="withoutPadding()Ljava/util/Base64$Encoder;"/>
+		<method name="wrap(Ljava/io/OutputStream;)Ljava/io/OutputStream;"/>
+	</class>
+	<class name="java/util/BitSet" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="and(Ljava/util/BitSet;)V"/>
+		<method name="andNot(Ljava/util/BitSet;)V"/>
+		<method name="cardinality()I"/>
+		<method name="clear()V"/>
+		<method name="clear(I)V"/>
+		<method name="clear(II)V"/>
+		<method name="flip(I)V"/>
+		<method name="flip(II)V"/>
+		<method name="get(I)Z"/>
+		<method name="get(II)Ljava/util/BitSet;"/>
+		<method name="intersects(Ljava/util/BitSet;)Z"/>
+		<method name="isEmpty()Z"/>
+		<method name="length()I"/>
+		<method name="nextClearBit(I)I"/>
+		<method name="nextSetBit(I)I"/>
+		<method name="or(Ljava/util/BitSet;)V"/>
+		<method name="previousClearBit(I)I" since="19"/>
+		<method name="previousSetBit(I)I" since="19"/>
+		<method name="set(I)V"/>
+		<method name="set(II)V"/>
+		<method name="set(IIZ)V"/>
+		<method name="set(IZ)V"/>
+		<method name="size()I"/>
+		<method name="stream()Ljava/util/stream/IntStream;" since="24"/>
+		<method name="toByteArray()[B" since="19"/>
+		<method name="toLongArray()[J" since="19"/>
+		<method name="valueOf(Ljava/nio/ByteBuffer;)Ljava/util/BitSet;" since="19"/>
+		<method name="valueOf(Ljava/nio/LongBuffer;)Ljava/util/BitSet;" since="19"/>
+		<method name="valueOf([B)Ljava/util/BitSet;" since="19"/>
+		<method name="valueOf([J)Ljava/util/BitSet;" since="19"/>
+		<method name="xor(Ljava/util/BitSet;)V"/>
+	</class>
+	<class name="java/util/Calendar" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="add(II)V"/>
+		<method name="after(Ljava/lang/Object;)Z"/>
+		<method name="before(Ljava/lang/Object;)Z"/>
+		<method name="clear()V"/>
+		<method name="clear(I)V"/>
+		<method name="compareTo(Ljava/util/Calendar;)I"/>
+		<method name="complete()V"/>
+		<method name="computeFields()V"/>
+		<method name="computeTime()V"/>
+		<method name="get(I)I"/>
+		<method name="getActualMaximum(I)I"/>
+		<method name="getActualMinimum(I)I"/>
+		<method name="getAvailableCalendarTypes()Ljava/util/Set;" since="26"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCalendarType()Ljava/lang/String;" since="26"/>
+		<method name="getDisplayName(IILjava/util/Locale;)Ljava/lang/String;" since="9"/>
+		<method name="getDisplayNames(IILjava/util/Locale;)Ljava/util/Map;" since="9"/>
+		<method name="getFirstDayOfWeek()I"/>
+		<method name="getGreatestMinimum(I)I"/>
+		<method name="getInstance()Ljava/util/Calendar;"/>
+		<method name="getInstance(Ljava/util/Locale;)Ljava/util/Calendar;"/>
+		<method name="getInstance(Ljava/util/TimeZone;)Ljava/util/Calendar;"/>
+		<method name="getInstance(Ljava/util/TimeZone;Ljava/util/Locale;)Ljava/util/Calendar;"/>
+		<method name="getLeastMaximum(I)I"/>
+		<method name="getMaximum(I)I"/>
+		<method name="getMinimalDaysInFirstWeek()I"/>
+		<method name="getMinimum(I)I"/>
+		<method name="getTime()Ljava/util/Date;"/>
+		<method name="getTimeInMillis()J"/>
+		<method name="getTimeZone()Ljava/util/TimeZone;"/>
+		<method name="getWeekYear()I" since="24"/>
+		<method name="getWeeksInWeekYear()I" since="24"/>
+		<method name="internalGet(I)I"/>
+		<method name="isLenient()Z"/>
+		<method name="isSet(I)Z"/>
+		<method name="isWeekDateSupported()Z" since="24"/>
+		<method name="roll(II)V"/>
+		<method name="roll(IZ)V"/>
+		<method name="set(II)V"/>
+		<method name="set(III)V"/>
+		<method name="set(IIIII)V"/>
+		<method name="set(IIIIII)V"/>
+		<method name="setFirstDayOfWeek(I)V"/>
+		<method name="setLenient(Z)V"/>
+		<method name="setMinimalDaysInFirstWeek(I)V"/>
+		<method name="setTime(Ljava/util/Date;)V"/>
+		<method name="setTimeInMillis(J)V"/>
+		<method name="setTimeZone(Ljava/util/TimeZone;)V"/>
+		<method name="setWeekDate(III)V" since="24"/>
+		<method name="toInstant()Ljava/time/Instant;" since="26"/>
+		<field name="ALL_STYLES" since="9"/>
+		<field name="AM"/>
+		<field name="AM_PM"/>
+		<field name="APRIL"/>
+		<field name="AUGUST"/>
+		<field name="DATE"/>
+		<field name="DAY_OF_MONTH"/>
+		<field name="DAY_OF_WEEK"/>
+		<field name="DAY_OF_WEEK_IN_MONTH"/>
+		<field name="DAY_OF_YEAR"/>
+		<field name="DECEMBER"/>
+		<field name="DST_OFFSET"/>
+		<field name="ERA"/>
+		<field name="FEBRUARY"/>
+		<field name="FIELD_COUNT"/>
+		<field name="FRIDAY"/>
+		<field name="HOUR"/>
+		<field name="HOUR_OF_DAY"/>
+		<field name="JANUARY"/>
+		<field name="JULY"/>
+		<field name="JUNE"/>
+		<field name="LONG" since="9"/>
+		<field name="LONG_FORMAT" since="26"/>
+		<field name="LONG_STANDALONE" since="26"/>
+		<field name="MARCH"/>
+		<field name="MAY"/>
+		<field name="MILLISECOND"/>
+		<field name="MINUTE"/>
+		<field name="MONDAY"/>
+		<field name="MONTH"/>
+		<field name="NARROW_FORMAT" since="26"/>
+		<field name="NARROW_STANDALONE" since="26"/>
+		<field name="NOVEMBER"/>
+		<field name="OCTOBER"/>
+		<field name="PM"/>
+		<field name="SATURDAY"/>
+		<field name="SECOND"/>
+		<field name="SEPTEMBER"/>
+		<field name="SHORT" since="9"/>
+		<field name="SHORT_FORMAT" since="26"/>
+		<field name="SHORT_STANDALONE" since="26"/>
+		<field name="SUNDAY"/>
+		<field name="THURSDAY"/>
+		<field name="TUESDAY"/>
+		<field name="UNDECIMBER"/>
+		<field name="WEDNESDAY"/>
+		<field name="WEEK_OF_MONTH"/>
+		<field name="WEEK_OF_YEAR"/>
+		<field name="YEAR"/>
+		<field name="ZONE_OFFSET"/>
+		<field name="areFieldsSet"/>
+		<field name="fields"/>
+		<field name="isSet"/>
+		<field name="isTimeSet"/>
+		<field name="time"/>
+	</class>
+	<class name="java/util/Calendar$Builder" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="build()Ljava/util/Calendar;"/>
+		<method name="set(II)Ljava/util/Calendar$Builder;"/>
+		<method name="setCalendarType(Ljava/lang/String;)Ljava/util/Calendar$Builder;"/>
+		<method name="setDate(III)Ljava/util/Calendar$Builder;"/>
+		<method name="setFields([I)Ljava/util/Calendar$Builder;"/>
+		<method name="setInstant(J)Ljava/util/Calendar$Builder;"/>
+		<method name="setInstant(Ljava/util/Date;)Ljava/util/Calendar$Builder;"/>
+		<method name="setLenient(Z)Ljava/util/Calendar$Builder;"/>
+		<method name="setLocale(Ljava/util/Locale;)Ljava/util/Calendar$Builder;"/>
+		<method name="setTimeOfDay(III)Ljava/util/Calendar$Builder;"/>
+		<method name="setTimeOfDay(IIII)Ljava/util/Calendar$Builder;"/>
+		<method name="setTimeZone(Ljava/util/TimeZone;)Ljava/util/Calendar$Builder;"/>
+		<method name="setWeekDate(III)Ljava/util/Calendar$Builder;"/>
+		<method name="setWeekDefinition(II)Ljava/util/Calendar$Builder;"/>
+	</class>
+	<class name="java/util/Collection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Iterable"/>
+		<method name="add(Ljava/lang/Object;)Z"/>
+		<method name="addAll(Ljava/util/Collection;)Z"/>
+		<method name="clear()V"/>
+		<method name="contains(Ljava/lang/Object;)Z"/>
+		<method name="containsAll(Ljava/util/Collection;)Z"/>
+		<method name="isEmpty()Z"/>
+		<method name="parallelStream()Ljava/util/stream/Stream;" since="24"/>
+		<method name="remove(Ljava/lang/Object;)Z"/>
+		<method name="removeAll(Ljava/util/Collection;)Z"/>
+		<method name="removeIf(Ljava/util/function/Predicate;)Z" since="24"/>
+		<method name="retainAll(Ljava/util/Collection;)Z"/>
+		<method name="size()I"/>
+		<method name="stream()Ljava/util/stream/Stream;" since="24"/>
+		<method name="toArray()[Ljava/lang/Object;"/>
+		<method name="toArray([Ljava/lang/Object;)[Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/Collections" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z"/>
+		<method name="asLifoQueue(Ljava/util/Deque;)Ljava/util/Queue;" since="9"/>
+		<method name="binarySearch(Ljava/util/List;Ljava/lang/Object;)I"/>
+		<method name="binarySearch(Ljava/util/List;Ljava/lang/Object;Ljava/util/Comparator;)I"/>
+		<method name="checkedCollection(Ljava/util/Collection;Ljava/lang/Class;)Ljava/util/Collection;"/>
+		<method name="checkedList(Ljava/util/List;Ljava/lang/Class;)Ljava/util/List;"/>
+		<method name="checkedMap(Ljava/util/Map;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/Map;"/>
+		<method name="checkedNavigableMap(Ljava/util/NavigableMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/NavigableMap;" since="26"/>
+		<method name="checkedNavigableSet(Ljava/util/NavigableSet;Ljava/lang/Class;)Ljava/util/NavigableSet;" since="26"/>
+		<method name="checkedQueue(Ljava/util/Queue;Ljava/lang/Class;)Ljava/util/Queue;" since="26"/>
+		<method name="checkedSet(Ljava/util/Set;Ljava/lang/Class;)Ljava/util/Set;"/>
+		<method name="checkedSortedMap(Ljava/util/SortedMap;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/SortedMap;"/>
+		<method name="checkedSortedSet(Ljava/util/SortedSet;Ljava/lang/Class;)Ljava/util/SortedSet;"/>
+		<method name="copy(Ljava/util/List;Ljava/util/List;)V"/>
+		<method name="disjoint(Ljava/util/Collection;Ljava/util/Collection;)Z"/>
+		<method name="emptyEnumeration()Ljava/util/Enumeration;" since="19"/>
+		<method name="emptyIterator()Ljava/util/Iterator;" since="19"/>
+		<method name="emptyList()Ljava/util/List;"/>
+		<method name="emptyListIterator()Ljava/util/ListIterator;" since="19"/>
+		<method name="emptyMap()Ljava/util/Map;"/>
+		<method name="emptyNavigableMap()Ljava/util/NavigableMap;" since="26"/>
+		<method name="emptyNavigableSet()Ljava/util/NavigableSet;" since="26"/>
+		<method name="emptySet()Ljava/util/Set;"/>
+		<method name="emptySortedMap()Ljava/util/SortedMap;" since="26"/>
+		<method name="emptySortedSet()Ljava/util/SortedSet;" since="26"/>
+		<method name="enumeration(Ljava/util/Collection;)Ljava/util/Enumeration;"/>
+		<method name="fill(Ljava/util/List;Ljava/lang/Object;)V"/>
+		<method name="frequency(Ljava/util/Collection;Ljava/lang/Object;)I"/>
+		<method name="indexOfSubList(Ljava/util/List;Ljava/util/List;)I"/>
+		<method name="lastIndexOfSubList(Ljava/util/List;Ljava/util/List;)I"/>
+		<method name="list(Ljava/util/Enumeration;)Ljava/util/ArrayList;"/>
+		<method name="max(Ljava/util/Collection;)Ljava/lang/Object;"/>
+		<method name="max(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;"/>
+		<method name="min(Ljava/util/Collection;)Ljava/lang/Object;"/>
+		<method name="min(Ljava/util/Collection;Ljava/util/Comparator;)Ljava/lang/Object;"/>
+		<method name="nCopies(ILjava/lang/Object;)Ljava/util/List;"/>
+		<method name="newSetFromMap(Ljava/util/Map;)Ljava/util/Set;" since="9"/>
+		<method name="replaceAll(Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="reverse(Ljava/util/List;)V"/>
+		<method name="reverseOrder()Ljava/util/Comparator;"/>
+		<method name="reverseOrder(Ljava/util/Comparator;)Ljava/util/Comparator;"/>
+		<method name="rotate(Ljava/util/List;I)V"/>
+		<method name="shuffle(Ljava/util/List;)V"/>
+		<method name="shuffle(Ljava/util/List;Ljava/util/Random;)V"/>
+		<method name="singleton(Ljava/lang/Object;)Ljava/util/Set;"/>
+		<method name="singletonList(Ljava/lang/Object;)Ljava/util/List;"/>
+		<method name="singletonMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;"/>
+		<method name="sort(Ljava/util/List;)V"/>
+		<method name="sort(Ljava/util/List;Ljava/util/Comparator;)V"/>
+		<method name="swap(Ljava/util/List;II)V"/>
+		<method name="synchronizedCollection(Ljava/util/Collection;)Ljava/util/Collection;"/>
+		<method name="synchronizedList(Ljava/util/List;)Ljava/util/List;"/>
+		<method name="synchronizedMap(Ljava/util/Map;)Ljava/util/Map;"/>
+		<method name="synchronizedNavigableMap(Ljava/util/NavigableMap;)Ljava/util/NavigableMap;" since="26"/>
+		<method name="synchronizedNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;" since="26"/>
+		<method name="synchronizedSet(Ljava/util/Set;)Ljava/util/Set;"/>
+		<method name="synchronizedSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;"/>
+		<method name="synchronizedSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;"/>
+		<method name="unmodifiableCollection(Ljava/util/Collection;)Ljava/util/Collection;"/>
+		<method name="unmodifiableList(Ljava/util/List;)Ljava/util/List;"/>
+		<method name="unmodifiableMap(Ljava/util/Map;)Ljava/util/Map;"/>
+		<method name="unmodifiableNavigableMap(Ljava/util/NavigableMap;)Ljava/util/NavigableMap;" since="26"/>
+		<method name="unmodifiableNavigableSet(Ljava/util/NavigableSet;)Ljava/util/NavigableSet;" since="26"/>
+		<method name="unmodifiableSet(Ljava/util/Set;)Ljava/util/Set;"/>
+		<method name="unmodifiableSortedMap(Ljava/util/SortedMap;)Ljava/util/SortedMap;"/>
+		<method name="unmodifiableSortedSet(Ljava/util/SortedSet;)Ljava/util/SortedSet;"/>
+		<field name="EMPTY_LIST"/>
+		<field name="EMPTY_MAP"/>
+		<field name="EMPTY_SET"/>
+	</class>
+	<class name="java/util/Comparator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="compare(Ljava/lang/Object;Ljava/lang/Object;)I"/>
+		<method name="comparing(Ljava/util/function/Function;)Ljava/util/Comparator;" since="24"/>
+		<method name="comparing(Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
+		<method name="comparingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator;" since="24"/>
+		<method name="comparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;" since="24"/>
+		<method name="comparingLong(Ljava/util/function/ToLongFunction;)Ljava/util/Comparator;" since="24"/>
+		<method name="naturalOrder()Ljava/util/Comparator;" since="24"/>
+		<method name="nullsFirst(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
+		<method name="nullsLast(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
+		<method name="reverseOrder()Ljava/util/Comparator;" since="24"/>
+		<method name="reversed()Ljava/util/Comparator;" since="24"/>
+		<method name="thenComparing(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
+		<method name="thenComparing(Ljava/util/function/Function;)Ljava/util/Comparator;" since="24"/>
+		<method name="thenComparing(Ljava/util/function/Function;Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
+		<method name="thenComparingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/Comparator;" since="24"/>
+		<method name="thenComparingInt(Ljava/util/function/ToIntFunction;)Ljava/util/Comparator;" since="24"/>
+		<method name="thenComparingLong(Ljava/util/function/ToLongFunction;)Ljava/util/Comparator;" since="24"/>
+	</class>
+	<class name="java/util/ConcurrentModificationException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="19"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="19"/>
+	</class>
+	<class name="java/util/Currency" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="getAvailableCurrencies()Ljava/util/Set;" since="19"/>
+		<method name="getCurrencyCode()Ljava/lang/String;"/>
+		<method name="getDefaultFractionDigits()I"/>
+		<method name="getDisplayName()Ljava/lang/String;" since="19"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;" since="19"/>
+		<method name="getInstance(Ljava/lang/String;)Ljava/util/Currency;"/>
+		<method name="getInstance(Ljava/util/Locale;)Ljava/util/Currency;"/>
+		<method name="getNumericCode()I" since="24"/>
+		<method name="getSymbol()Ljava/lang/String;"/>
+		<method name="getSymbol(Ljava/util/Locale;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/Date" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V" deprecated="15"/>
+		<method name="&lt;init>(IIIII)V" deprecated="15"/>
+		<method name="&lt;init>(IIIIII)V" deprecated="15"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="15"/>
+		<method name="UTC(IIIIII)J" deprecated="15"/>
+		<method name="after(Ljava/util/Date;)Z"/>
+		<method name="before(Ljava/util/Date;)Z"/>
+		<method name="compareTo(Ljava/util/Date;)I"/>
+		<method name="from(Ljava/time/Instant;)Ljava/util/Date;" since="26"/>
+		<method name="getDate()I" deprecated="15"/>
+		<method name="getDay()I" deprecated="15"/>
+		<method name="getHours()I" deprecated="15"/>
+		<method name="getMinutes()I" deprecated="15"/>
+		<method name="getMonth()I" deprecated="15"/>
+		<method name="getSeconds()I" deprecated="15"/>
+		<method name="getTime()J"/>
+		<method name="getTimezoneOffset()I" deprecated="15"/>
+		<method name="getYear()I" deprecated="15"/>
+		<method name="parse(Ljava/lang/String;)J" deprecated="15"/>
+		<method name="setDate(I)V" deprecated="15"/>
+		<method name="setHours(I)V" deprecated="15"/>
+		<method name="setMinutes(I)V" deprecated="15"/>
+		<method name="setMonth(I)V" deprecated="15"/>
+		<method name="setSeconds(I)V" deprecated="15"/>
+		<method name="setTime(J)V"/>
+		<method name="setYear(I)V" deprecated="15"/>
+		<method name="toGMTString()Ljava/lang/String;" deprecated="15"/>
+		<method name="toInstant()Ljava/time/Instant;" since="26"/>
+		<method name="toLocaleString()Ljava/lang/String;" deprecated="15"/>
+	</class>
+	<class name="java/util/Deque" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Queue"/>
+		<method name="addFirst(Ljava/lang/Object;)V"/>
+		<method name="addLast(Ljava/lang/Object;)V"/>
+		<method name="descendingIterator()Ljava/util/Iterator;"/>
+		<method name="getFirst()Ljava/lang/Object;"/>
+		<method name="getLast()Ljava/lang/Object;"/>
+		<method name="offerFirst(Ljava/lang/Object;)Z"/>
+		<method name="offerLast(Ljava/lang/Object;)Z"/>
+		<method name="peekFirst()Ljava/lang/Object;"/>
+		<method name="peekLast()Ljava/lang/Object;"/>
+		<method name="pollFirst()Ljava/lang/Object;"/>
+		<method name="pollLast()Ljava/lang/Object;"/>
+		<method name="pop()Ljava/lang/Object;"/>
+		<method name="push(Ljava/lang/Object;)V"/>
+		<method name="removeFirst()Ljava/lang/Object;"/>
+		<method name="removeFirstOccurrence(Ljava/lang/Object;)Z"/>
+		<method name="removeLast()Ljava/lang/Object;"/>
+		<method name="removeLastOccurrence(Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/util/Dictionary" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="elements()Ljava/util/Enumeration;"/>
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="isEmpty()Z"/>
+		<method name="keys()Ljava/util/Enumeration;"/>
+		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="size()I"/>
+	</class>
+	<class name="java/util/DoubleSummaryStatistics" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/DoubleConsumer"/>
+		<method name="&lt;init>()V"/>
+		<method name="combine(Ljava/util/DoubleSummaryStatistics;)V"/>
+		<method name="getAverage()D"/>
+		<method name="getCount()J"/>
+		<method name="getMax()D"/>
+		<method name="getMin()D"/>
+		<method name="getSum()D"/>
+	</class>
+	<class name="java/util/DuplicateFormatFlagsException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getFlags()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/EmptyStackException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/EnumMap" since="1">
+		<extends name="java/util/AbstractMap"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V"/>
+		<method name="&lt;init>(Ljava/util/EnumMap;)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="clone()Ljava/util/EnumMap;"/>
+		<method name="put(Ljava/lang/Enum;Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/EnumSet" since="1">
+		<extends name="java/util/AbstractSet"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="allOf(Ljava/lang/Class;)Ljava/util/EnumSet;"/>
+		<method name="clone()Ljava/util/EnumSet;"/>
+		<method name="complementOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;"/>
+		<method name="copyOf(Ljava/util/Collection;)Ljava/util/EnumSet;"/>
+		<method name="copyOf(Ljava/util/EnumSet;)Ljava/util/EnumSet;"/>
+		<method name="noneOf(Ljava/lang/Class;)Ljava/util/EnumSet;"/>
+		<method name="of(Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
+		<method name="of(Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
+		<method name="of(Ljava/lang/Enum;[Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
+		<method name="range(Ljava/lang/Enum;Ljava/lang/Enum;)Ljava/util/EnumSet;"/>
+	</class>
+	<class name="java/util/Enumeration" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="hasMoreElements()Z"/>
+		<method name="nextElement()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/EventListener" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/util/EventListenerProxy" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="&lt;init>(Ljava/util/EventListener;)V"/>
+		<method name="getListener()Ljava/util/EventListener;"/>
+	</class>
+	<class name="java/util/EventObject" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="getSource()Ljava/lang/Object;"/>
+		<field name="source"/>
+	</class>
+	<class name="java/util/FormatFlagsConversionMismatchException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(Ljava/lang/String;C)V"/>
+		<method name="getConversion()C"/>
+		<method name="getFlags()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/Formattable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="formatTo(Ljava/util/Formatter;III)V"/>
+	</class>
+	<class name="java/util/FormattableFlags" since="1">
+		<extends name="java/lang/Object"/>
+		<field name="ALTERNATE"/>
+		<field name="LEFT_JUSTIFY"/>
+		<field name="UPPERCASE"/>
+	</class>
+	<class name="java/util/Formatter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable"/>
+		<implements name="java/io/Flushable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/lang/String;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/io/PrintStream;)V"/>
+		<method name="&lt;init>(Ljava/lang/Appendable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Appendable;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;"/>
+		<method name="format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/util/Formatter;"/>
+		<method name="ioException()Ljava/io/IOException;"/>
+		<method name="locale()Ljava/util/Locale;"/>
+		<method name="out()Ljava/lang/Appendable;"/>
+	</class>
+	<class name="java/util/Formatter$BigDecimalLayoutForm" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/Formatter$BigDecimalLayoutForm;"/>
+		<method name="values()[Ljava/util/Formatter$BigDecimalLayoutForm;"/>
+		<field name="DECIMAL_FLOAT"/>
+		<field name="SCIENTIFIC"/>
+	</class>
+	<class name="java/util/FormatterClosedException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/GregorianCalendar" since="1">
+		<extends name="java/util/Calendar"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(IIIII)V"/>
+		<method name="&lt;init>(IIIIII)V"/>
+		<method name="&lt;init>(Ljava/util/Locale;)V"/>
+		<method name="&lt;init>(Ljava/util/TimeZone;)V"/>
+		<method name="&lt;init>(Ljava/util/TimeZone;Ljava/util/Locale;)V"/>
+		<method name="from(Ljava/time/ZonedDateTime;)Ljava/util/GregorianCalendar;" since="26"/>
+		<method name="getGregorianChange()Ljava/util/Date;"/>
+		<method name="isLeapYear(I)Z"/>
+		<method name="setGregorianChange(Ljava/util/Date;)V"/>
+		<method name="toZonedDateTime()Ljava/time/ZonedDateTime;" since="26"/>
+		<field name="AD"/>
+		<field name="BC"/>
+	</class>
+	<class name="java/util/HashMap" since="1">
+		<extends name="java/util/AbstractMap"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IF)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+	</class>
+	<class name="java/util/HashSet" since="1">
+		<extends name="java/util/AbstractSet"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IF)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/Hashtable" since="1">
+		<extends name="java/util/Dictionary"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/Map"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IF)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="contains(Ljava/lang/Object;)Z"/>
+		<method name="rehash()V"/>
+	</class>
+	<class name="java/util/IdentityHashMap" since="1">
+		<extends name="java/util/AbstractMap"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+	</class>
+	<class name="java/util/IllegalFormatCodePointException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getCodePoint()I"/>
+	</class>
+	<class name="java/util/IllegalFormatConversionException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(CLjava/lang/Class;)V"/>
+		<method name="getArgumentClass()Ljava/lang/Class;"/>
+		<method name="getConversion()C"/>
+	</class>
+	<class name="java/util/IllegalFormatException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+	</class>
+	<class name="java/util/IllegalFormatFlagsException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getFlags()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/IllegalFormatPrecisionException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getPrecision()I"/>
+	</class>
+	<class name="java/util/IllegalFormatWidthException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getWidth()I"/>
+	</class>
+	<class name="java/util/IllformedLocaleException" since="21">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="getErrorIndex()I"/>
+	</class>
+	<class name="java/util/InputMismatchException" since="1">
+		<extends name="java/util/NoSuchElementException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/IntSummaryStatistics" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/IntConsumer"/>
+		<method name="&lt;init>()V"/>
+		<method name="combine(Ljava/util/IntSummaryStatistics;)V"/>
+		<method name="getAverage()D"/>
+		<method name="getCount()J"/>
+		<method name="getMax()I"/>
+		<method name="getMin()I"/>
+		<method name="getSum()J"/>
+	</class>
+	<class name="java/util/InvalidPropertiesFormatException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/Iterator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="forEachRemaining(Ljava/util/function/Consumer;)V" since="24"/>
+		<method name="hasNext()Z"/>
+		<method name="next()Ljava/lang/Object;"/>
+		<method name="remove()V"/>
+	</class>
+	<class name="java/util/LinkedHashMap" since="1">
+		<extends name="java/util/HashMap"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IF)V"/>
+		<method name="&lt;init>(IFZ)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="removeEldestEntry(Ljava/util/Map$Entry;)Z"/>
+	</class>
+	<class name="java/util/LinkedHashSet" since="1">
+		<extends name="java/util/HashSet"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IF)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/LinkedList" since="1">
+		<extends name="java/util/AbstractSequentialList"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/Deque" since="9"/>
+		<implements name="java/util/Queue" removed="24"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="addFirst(Ljava/lang/Object;)V"/>
+		<method name="addLast(Ljava/lang/Object;)V"/>
+		<method name="getFirst()Ljava/lang/Object;"/>
+		<method name="getLast()Ljava/lang/Object;"/>
+		<method name="removeFirst()Ljava/lang/Object;"/>
+		<method name="removeLast()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/List" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Collection"/>
+		<method name="add(ILjava/lang/Object;)V"/>
+		<method name="addAll(ILjava/util/Collection;)Z"/>
+		<method name="copyOf(Ljava/util/Collection;)Ljava/util/List;" since="31"/>
+		<method name="get(I)Ljava/lang/Object;"/>
+		<method name="indexOf(Ljava/lang/Object;)I"/>
+		<method name="lastIndexOf(Ljava/lang/Object;)I"/>
+		<method name="listIterator()Ljava/util/ListIterator;"/>
+		<method name="listIterator(I)Ljava/util/ListIterator;"/>
+		<method name="of()Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="of([Ljava/lang/Object;)Ljava/util/List;" since="30"/>
+		<method name="remove(I)Ljava/lang/Object;"/>
+		<method name="replaceAll(Ljava/util/function/UnaryOperator;)V" since="24"/>
+		<method name="set(ILjava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="sort(Ljava/util/Comparator;)V" since="24"/>
+		<method name="subList(II)Ljava/util/List;"/>
+	</class>
+	<class name="java/util/ListIterator" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Iterator"/>
+		<method name="add(Ljava/lang/Object;)V"/>
+		<method name="hasPrevious()Z"/>
+		<method name="nextIndex()I"/>
+		<method name="previous()Ljava/lang/Object;"/>
+		<method name="previousIndex()I"/>
+		<method name="set(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/util/ListResourceBundle" since="1">
+		<extends name="java/util/ResourceBundle"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContents()[[Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/Locale" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="filter(Ljava/util/List;Ljava/util/Collection;)Ljava/util/List;" since="26"/>
+		<method name="filter(Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List;" since="26"/>
+		<method name="filterTags(Ljava/util/List;Ljava/util/Collection;)Ljava/util/List;" since="26"/>
+		<method name="filterTags(Ljava/util/List;Ljava/util/Collection;Ljava/util/Locale$FilteringMode;)Ljava/util/List;" since="26"/>
+		<method name="forLanguageTag(Ljava/lang/String;)Ljava/util/Locale;" since="21"/>
+		<method name="getAvailableLocales()[Ljava/util/Locale;"/>
+		<method name="getCountry()Ljava/lang/String;"/>
+		<method name="getDefault()Ljava/util/Locale;"/>
+		<method name="getDefault(Ljava/util/Locale$Category;)Ljava/util/Locale;" since="24"/>
+		<method name="getDisplayCountry()Ljava/lang/String;"/>
+		<method name="getDisplayCountry(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getDisplayLanguage()Ljava/lang/String;"/>
+		<method name="getDisplayLanguage(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getDisplayName()Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getDisplayScript()Ljava/lang/String;" since="21"/>
+		<method name="getDisplayScript(Ljava/util/Locale;)Ljava/lang/String;" since="21"/>
+		<method name="getDisplayVariant()Ljava/lang/String;"/>
+		<method name="getDisplayVariant(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getExtension(C)Ljava/lang/String;" since="21"/>
+		<method name="getExtensionKeys()Ljava/util/Set;" since="21"/>
+		<method name="getISO3Country()Ljava/lang/String;"/>
+		<method name="getISO3Language()Ljava/lang/String;"/>
+		<method name="getISOCountries()[Ljava/lang/String;"/>
+		<method name="getISOLanguages()[Ljava/lang/String;"/>
+		<method name="getLanguage()Ljava/lang/String;"/>
+		<method name="getScript()Ljava/lang/String;" since="21"/>
+		<method name="getUnicodeLocaleAttributes()Ljava/util/Set;" since="21"/>
+		<method name="getUnicodeLocaleKeys()Ljava/util/Set;" since="21"/>
+		<method name="getUnicodeLocaleType(Ljava/lang/String;)Ljava/lang/String;" since="21"/>
+		<method name="getVariant()Ljava/lang/String;"/>
+		<method name="hasExtensions()Z" since="26"/>
+		<method name="lookup(Ljava/util/List;Ljava/util/Collection;)Ljava/util/Locale;" since="26"/>
+		<method name="lookupTag(Ljava/util/List;Ljava/util/Collection;)Ljava/lang/String;" since="26"/>
+		<method name="setDefault(Ljava/util/Locale$Category;Ljava/util/Locale;)V" since="24"/>
+		<method name="setDefault(Ljava/util/Locale;)V"/>
+		<method name="stripExtensions()Ljava/util/Locale;" since="26"/>
+		<method name="toLanguageTag()Ljava/lang/String;" since="21"/>
+		<field name="CANADA"/>
+		<field name="CANADA_FRENCH"/>
+		<field name="CHINA"/>
+		<field name="CHINESE"/>
+		<field name="ENGLISH"/>
+		<field name="FRANCE"/>
+		<field name="FRENCH"/>
+		<field name="GERMAN"/>
+		<field name="GERMANY"/>
+		<field name="ITALIAN"/>
+		<field name="ITALY"/>
+		<field name="JAPAN"/>
+		<field name="JAPANESE"/>
+		<field name="KOREA"/>
+		<field name="KOREAN"/>
+		<field name="PRC"/>
+		<field name="PRIVATE_USE_EXTENSION" since="21"/>
+		<field name="ROOT" since="9"/>
+		<field name="SIMPLIFIED_CHINESE"/>
+		<field name="TAIWAN"/>
+		<field name="TRADITIONAL_CHINESE"/>
+		<field name="UK"/>
+		<field name="UNICODE_LOCALE_EXTENSION" since="21"/>
+		<field name="US"/>
+	</class>
+	<class name="java/util/Locale$Builder" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addUnicodeLocaleAttribute(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="build()Ljava/util/Locale;"/>
+		<method name="clear()Ljava/util/Locale$Builder;"/>
+		<method name="clearExtensions()Ljava/util/Locale$Builder;"/>
+		<method name="removeUnicodeLocaleAttribute(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="setExtension(CLjava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="setLanguage(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="setLanguageTag(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="setLocale(Ljava/util/Locale;)Ljava/util/Locale$Builder;"/>
+		<method name="setRegion(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="setScript(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="setUnicodeLocaleKeyword(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+		<method name="setVariant(Ljava/lang/String;)Ljava/util/Locale$Builder;"/>
+	</class>
+	<class name="java/util/Locale$Category" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/Locale$Category;"/>
+		<method name="values()[Ljava/util/Locale$Category;"/>
+		<field name="DISPLAY"/>
+		<field name="FORMAT"/>
+	</class>
+	<class name="java/util/Locale$FilteringMode" since="26">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/Locale$FilteringMode;"/>
+		<method name="values()[Ljava/util/Locale$FilteringMode;"/>
+		<field name="AUTOSELECT_FILTERING"/>
+		<field name="EXTENDED_FILTERING"/>
+		<field name="IGNORE_EXTENDED_RANGES"/>
+		<field name="MAP_EXTENDED_RANGES"/>
+		<field name="REJECT_EXTENDED_RANGES"/>
+	</class>
+	<class name="java/util/Locale$LanguageRange" since="26">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;D)V"/>
+		<method name="getRange()Ljava/lang/String;"/>
+		<method name="getWeight()D"/>
+		<method name="mapEquivalents(Ljava/util/List;Ljava/util/Map;)Ljava/util/List;"/>
+		<method name="parse(Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="parse(Ljava/lang/String;Ljava/util/Map;)Ljava/util/List;"/>
+		<field name="MAX_WEIGHT"/>
+		<field name="MIN_WEIGHT"/>
+	</class>
+	<class name="java/util/LongSummaryStatistics" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/IntConsumer"/>
+		<implements name="java/util/function/LongConsumer"/>
+		<method name="&lt;init>()V"/>
+		<method name="combine(Ljava/util/LongSummaryStatistics;)V"/>
+		<method name="getAverage()D"/>
+		<method name="getCount()J"/>
+		<method name="getMax()J"/>
+		<method name="getMin()J"/>
+		<method name="getSum()J"/>
+	</class>
+	<class name="java/util/Map" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="clear()V"/>
+		<method name="compute(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;" since="24"/>
+		<method name="computeIfPresent(Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="containsKey(Ljava/lang/Object;)Z"/>
+		<method name="containsValue(Ljava/lang/Object;)Z"/>
+		<method name="copyOf(Ljava/util/Map;)Ljava/util/Map;" since="31"/>
+		<method name="entry(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map$Entry;" since="30"/>
+		<method name="entrySet()Ljava/util/Set;"/>
+		<method name="forEach(Ljava/util/function/BiConsumer;)V" since="24"/>
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24"/>
+		<method name="isEmpty()Z"/>
+		<method name="keySet()Ljava/util/Set;"/>
+		<method name="merge(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="of()Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Map;" since="30"/>
+		<method name="ofEntries([Ljava/util/Map$Entry;)Ljava/util/Map;" since="30"/>
+		<method name="put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="putAll(Ljava/util/Map;)V"/>
+		<method name="putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24"/>
+		<method name="remove(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="remove(Ljava/lang/Object;Ljava/lang/Object;)Z" since="24"/>
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="24"/>
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z" since="24"/>
+		<method name="replaceAll(Ljava/util/function/BiFunction;)V" since="24"/>
+		<method name="size()I"/>
+		<method name="values()Ljava/util/Collection;"/>
+	</class>
+	<class name="java/util/Map$Entry" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="comparingByKey()Ljava/util/Comparator;" since="24"/>
+		<method name="comparingByKey(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
+		<method name="comparingByValue()Ljava/util/Comparator;" since="24"/>
+		<method name="comparingByValue(Ljava/util/Comparator;)Ljava/util/Comparator;" since="24"/>
+		<method name="getKey()Ljava/lang/Object;"/>
+		<method name="getValue()Ljava/lang/Object;"/>
+		<method name="setValue(Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/MissingFormatArgumentException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getFormatSpecifier()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/MissingFormatWidthException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getFormatSpecifier()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/MissingResourceException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getClassName()Ljava/lang/String;"/>
+		<method name="getKey()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/NavigableMap" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/SortedMap"/>
+		<method name="ceilingEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
+		<method name="ceilingKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="descendingKeySet()Ljava/util/NavigableSet;"/>
+		<method name="descendingMap()Ljava/util/NavigableMap;"/>
+		<method name="firstEntry()Ljava/util/Map$Entry;"/>
+		<method name="floorEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
+		<method name="floorKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="headMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;"/>
+		<method name="higherEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
+		<method name="higherKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="lastEntry()Ljava/util/Map$Entry;"/>
+		<method name="lowerEntry(Ljava/lang/Object;)Ljava/util/Map$Entry;"/>
+		<method name="lowerKey(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="navigableKeySet()Ljava/util/NavigableSet;"/>
+		<method name="pollFirstEntry()Ljava/util/Map$Entry;"/>
+		<method name="pollLastEntry()Ljava/util/Map$Entry;"/>
+		<method name="subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableMap;"/>
+		<method name="tailMap(Ljava/lang/Object;Z)Ljava/util/NavigableMap;"/>
+	</class>
+	<class name="java/util/NavigableSet" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/SortedSet"/>
+		<method name="ceiling(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="descendingIterator()Ljava/util/Iterator;"/>
+		<method name="descendingSet()Ljava/util/NavigableSet;"/>
+		<method name="floor(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="headSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;"/>
+		<method name="higher(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="lower(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="pollFirst()Ljava/lang/Object;"/>
+		<method name="pollLast()Ljava/lang/Object;"/>
+		<method name="subSet(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/NavigableSet;"/>
+		<method name="tailSet(Ljava/lang/Object;Z)Ljava/util/NavigableSet;"/>
+	</class>
+	<class name="java/util/NoSuchElementException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/Objects" since="19">
+		<extends name="java/lang/Object"/>
+		<method name="checkFromIndexSize(III)I" since="30"/>
+		<method name="checkFromToIndex(III)I" since="30"/>
+		<method name="checkIndex(II)I" since="30"/>
+		<method name="compare(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/Comparator;)I"/>
+		<method name="deepEquals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="hash([Ljava/lang/Object;)I"/>
+		<method name="hashCode(Ljava/lang/Object;)I"/>
+		<method name="isNull(Ljava/lang/Object;)Z" since="24"/>
+		<method name="nonNull(Ljava/lang/Object;)Z" since="24"/>
+		<method name="requireNonNull(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="requireNonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="requireNonNull(Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object;" since="24"/>
+		<method name="requireNonNullElse(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" since="30"/>
+		<method name="requireNonNullElseGet(Ljava/lang/Object;Ljava/util/function/Supplier;)Ljava/lang/Object;" since="30"/>
+		<method name="toString(Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="toString(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/Observable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addObserver(Ljava/util/Observer;)V"/>
+		<method name="clearChanged()V"/>
+		<method name="countObservers()I"/>
+		<method name="deleteObserver(Ljava/util/Observer;)V"/>
+		<method name="deleteObservers()V"/>
+		<method name="hasChanged()Z"/>
+		<method name="notifyObservers()V"/>
+		<method name="notifyObservers(Ljava/lang/Object;)V"/>
+		<method name="setChanged()V"/>
+	</class>
+	<class name="java/util/Observer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="update(Ljava/util/Observable;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/util/Optional" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="empty()Ljava/util/Optional;"/>
+		<method name="filter(Ljava/util/function/Predicate;)Ljava/util/Optional;"/>
+		<method name="flatMap(Ljava/util/function/Function;)Ljava/util/Optional;"/>
+		<method name="get()Ljava/lang/Object;"/>
+		<method name="ifPresent(Ljava/util/function/Consumer;)V"/>
+		<method name="isPresent()Z"/>
+		<method name="map(Ljava/util/function/Function;)Ljava/util/Optional;"/>
+		<method name="of(Ljava/lang/Object;)Ljava/util/Optional;"/>
+		<method name="ofNullable(Ljava/lang/Object;)Ljava/util/Optional;"/>
+		<method name="orElse(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="orElseGet(Ljava/util/function/Supplier;)Ljava/lang/Object;"/>
+		<method name="orElseThrow(Ljava/util/function/Supplier;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/OptionalDouble" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="empty()Ljava/util/OptionalDouble;"/>
+		<method name="getAsDouble()D"/>
+		<method name="ifPresent(Ljava/util/function/DoubleConsumer;)V"/>
+		<method name="isPresent()Z"/>
+		<method name="of(D)Ljava/util/OptionalDouble;"/>
+		<method name="orElse(D)D"/>
+		<method name="orElseGet(Ljava/util/function/DoubleSupplier;)D"/>
+		<method name="orElseThrow(Ljava/util/function/Supplier;)D"/>
+	</class>
+	<class name="java/util/OptionalInt" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="empty()Ljava/util/OptionalInt;"/>
+		<method name="getAsInt()I"/>
+		<method name="ifPresent(Ljava/util/function/IntConsumer;)V"/>
+		<method name="isPresent()Z"/>
+		<method name="of(I)Ljava/util/OptionalInt;"/>
+		<method name="orElse(I)I"/>
+		<method name="orElseGet(Ljava/util/function/IntSupplier;)I"/>
+		<method name="orElseThrow(Ljava/util/function/Supplier;)I"/>
+	</class>
+	<class name="java/util/OptionalLong" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="empty()Ljava/util/OptionalLong;"/>
+		<method name="getAsLong()J"/>
+		<method name="ifPresent(Ljava/util/function/LongConsumer;)V"/>
+		<method name="isPresent()Z"/>
+		<method name="of(J)Ljava/util/OptionalLong;"/>
+		<method name="orElse(J)J"/>
+		<method name="orElseGet(Ljava/util/function/LongSupplier;)J"/>
+		<method name="orElseThrow(Ljava/util/function/Supplier;)J"/>
+	</class>
+	<class name="java/util/PrimitiveIterator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Iterator"/>
+		<method name="forEachRemaining(Ljava/lang/Object;)V"/>
+	</class>
+	<class name="java/util/PrimitiveIterator$OfDouble" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/PrimitiveIterator"/>
+		<method name="forEachRemaining(Ljava/util/function/DoubleConsumer;)V"/>
+		<method name="next()Ljava/lang/Double;"/>
+		<method name="nextDouble()D"/>
+	</class>
+	<class name="java/util/PrimitiveIterator$OfInt" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/PrimitiveIterator"/>
+		<method name="forEachRemaining(Ljava/util/function/IntConsumer;)V"/>
+		<method name="next()Ljava/lang/Integer;"/>
+		<method name="nextInt()I"/>
+	</class>
+	<class name="java/util/PrimitiveIterator$OfLong" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/PrimitiveIterator"/>
+		<method name="forEachRemaining(Ljava/util/function/LongConsumer;)V"/>
+		<method name="next()Ljava/lang/Long;"/>
+		<method name="nextLong()J"/>
+	</class>
+	<class name="java/util/PriorityQueue" since="1">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/util/Comparator;)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="&lt;init>(Ljava/util/Comparator;)V" since="24"/>
+		<method name="&lt;init>(Ljava/util/PriorityQueue;)V"/>
+		<method name="&lt;init>(Ljava/util/SortedSet;)V"/>
+		<method name="comparator()Ljava/util/Comparator;"/>
+	</class>
+	<class name="java/util/Properties" since="1">
+		<extends name="java/util/Hashtable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Properties;)V"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="list(Ljava/io/PrintStream;)V"/>
+		<method name="list(Ljava/io/PrintWriter;)V"/>
+		<method name="load(Ljava/io/InputStream;)V"/>
+		<method name="load(Ljava/io/Reader;)V" since="9"/>
+		<method name="loadFromXML(Ljava/io/InputStream;)V"/>
+		<method name="propertyNames()Ljava/util/Enumeration;"/>
+		<method name="save(Ljava/io/OutputStream;Ljava/lang/String;)V" deprecated="15"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="store(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
+		<method name="store(Ljava/io/Writer;Ljava/lang/String;)V" since="9"/>
+		<method name="storeToXML(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
+		<method name="storeToXML(Ljava/io/OutputStream;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="stringPropertyNames()Ljava/util/Set;" since="9"/>
+		<field name="defaults"/>
+	</class>
+	<class name="java/util/PropertyPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/PropertyResourceBundle" since="1">
+		<extends name="java/util/ResourceBundle"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V" since="9"/>
+	</class>
+	<class name="java/util/Queue" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Collection"/>
+		<method name="element()Ljava/lang/Object;"/>
+		<method name="offer(Ljava/lang/Object;)Z"/>
+		<method name="peek()Ljava/lang/Object;"/>
+		<method name="poll()Ljava/lang/Object;"/>
+		<method name="remove()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/Random" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="doubles()Ljava/util/stream/DoubleStream;" since="24"/>
+		<method name="doubles(DD)Ljava/util/stream/DoubleStream;" since="24"/>
+		<method name="doubles(J)Ljava/util/stream/DoubleStream;" since="24"/>
+		<method name="doubles(JDD)Ljava/util/stream/DoubleStream;" since="24"/>
+		<method name="ints()Ljava/util/stream/IntStream;" since="24"/>
+		<method name="ints(II)Ljava/util/stream/IntStream;" since="24"/>
+		<method name="ints(J)Ljava/util/stream/IntStream;" since="24"/>
+		<method name="ints(JII)Ljava/util/stream/IntStream;" since="24"/>
+		<method name="longs()Ljava/util/stream/LongStream;" since="24"/>
+		<method name="longs(J)Ljava/util/stream/LongStream;" since="24"/>
+		<method name="longs(JJ)Ljava/util/stream/LongStream;" since="24"/>
+		<method name="longs(JJJ)Ljava/util/stream/LongStream;" since="24"/>
+		<method name="next(I)I"/>
+		<method name="nextBoolean()Z"/>
+		<method name="nextBytes([B)V"/>
+		<method name="nextDouble()D"/>
+		<method name="nextFloat()F"/>
+		<method name="nextGaussian()D"/>
+		<method name="nextInt()I"/>
+		<method name="nextInt(I)I"/>
+		<method name="nextLong()J"/>
+		<method name="setSeed(J)V"/>
+	</class>
+	<class name="java/util/RandomAccess" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/util/ResourceBundle" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="clearCache()V" since="9"/>
+		<method name="clearCache(Ljava/lang/ClassLoader;)V" since="9"/>
+		<method name="containsKey(Ljava/lang/String;)Z" since="9"/>
+		<method name="getBaseBundleName()Ljava/lang/String;" since="26"/>
+		<method name="getBundle(Ljava/lang/String;)Ljava/util/ResourceBundle;"/>
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/ResourceBundle;"/>
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;)Ljava/util/ResourceBundle;"/>
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9"/>
+		<method name="getBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9"/>
+		<method name="getBundle(Ljava/lang/String;Ljava/util/ResourceBundle$Control;)Ljava/util/ResourceBundle;" since="9"/>
+		<method name="getKeys()Ljava/util/Enumeration;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getObject(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getStringArray(Ljava/lang/String;)[Ljava/lang/String;"/>
+		<method name="handleGetObject(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="handleKeySet()Ljava/util/Set;" since="9"/>
+		<method name="keySet()Ljava/util/Set;" since="9"/>
+		<method name="setParent(Ljava/util/ResourceBundle;)V"/>
+		<field name="parent"/>
+	</class>
+	<class name="java/util/ResourceBundle$Control" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getCandidateLocales(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/List;"/>
+		<method name="getControl(Ljava/util/List;)Ljava/util/ResourceBundle$Control;"/>
+		<method name="getFallbackLocale(Ljava/lang/String;Ljava/util/Locale;)Ljava/util/Locale;"/>
+		<method name="getFormats(Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="getNoFallbackControl(Ljava/util/List;)Ljava/util/ResourceBundle$Control;"/>
+		<method name="getTimeToLive(Ljava/lang/String;Ljava/util/Locale;)J"/>
+		<method name="needsReload(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/ResourceBundle;J)Z"/>
+		<method name="newBundle(Ljava/lang/String;Ljava/util/Locale;Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/util/ResourceBundle;"/>
+		<method name="toBundleName(Ljava/lang/String;Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="toResourceName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="FORMAT_CLASS"/>
+		<field name="FORMAT_DEFAULT"/>
+		<field name="FORMAT_PROPERTIES"/>
+		<field name="TTL_DONT_CACHE"/>
+		<field name="TTL_NO_EXPIRATION_CONTROL"/>
+	</class>
+	<class name="java/util/Scanner" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="19"/>
+		<implements name="java/util/Iterator"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Readable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/nio/channels/ReadableByteChannel;)V"/>
+		<method name="&lt;init>(Ljava/nio/channels/ReadableByteChannel;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/nio/file/Path;)V" since="26"/>
+		<method name="&lt;init>(Ljava/nio/file/Path;Ljava/lang/String;)V" since="26"/>
+		<method name="close()V"/>
+		<method name="delimiter()Ljava/util/regex/Pattern;"/>
+		<method name="findInLine(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="findInLine(Ljava/util/regex/Pattern;)Ljava/lang/String;"/>
+		<method name="findWithinHorizon(Ljava/lang/String;I)Ljava/lang/String;"/>
+		<method name="findWithinHorizon(Ljava/util/regex/Pattern;I)Ljava/lang/String;"/>
+		<method name="hasNext(Ljava/lang/String;)Z"/>
+		<method name="hasNext(Ljava/util/regex/Pattern;)Z"/>
+		<method name="hasNextBigDecimal()Z"/>
+		<method name="hasNextBigInteger()Z"/>
+		<method name="hasNextBigInteger(I)Z"/>
+		<method name="hasNextBoolean()Z"/>
+		<method name="hasNextByte()Z"/>
+		<method name="hasNextByte(I)Z"/>
+		<method name="hasNextDouble()Z"/>
+		<method name="hasNextFloat()Z"/>
+		<method name="hasNextInt()Z"/>
+		<method name="hasNextInt(I)Z"/>
+		<method name="hasNextLine()Z"/>
+		<method name="hasNextLong()Z"/>
+		<method name="hasNextLong(I)Z"/>
+		<method name="hasNextShort()Z"/>
+		<method name="hasNextShort(I)Z"/>
+		<method name="ioException()Ljava/io/IOException;"/>
+		<method name="locale()Ljava/util/Locale;"/>
+		<method name="match()Ljava/util/regex/MatchResult;"/>
+		<method name="next()Ljava/lang/String;"/>
+		<method name="next(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="next(Ljava/util/regex/Pattern;)Ljava/lang/String;"/>
+		<method name="nextBigDecimal()Ljava/math/BigDecimal;"/>
+		<method name="nextBigInteger()Ljava/math/BigInteger;"/>
+		<method name="nextBigInteger(I)Ljava/math/BigInteger;"/>
+		<method name="nextBoolean()Z"/>
+		<method name="nextByte()B"/>
+		<method name="nextByte(I)B"/>
+		<method name="nextDouble()D"/>
+		<method name="nextFloat()F"/>
+		<method name="nextInt()I"/>
+		<method name="nextInt(I)I"/>
+		<method name="nextLine()Ljava/lang/String;"/>
+		<method name="nextLong()J"/>
+		<method name="nextLong(I)J"/>
+		<method name="nextShort()S"/>
+		<method name="nextShort(I)S"/>
+		<method name="radix()I"/>
+		<method name="reset()Ljava/util/Scanner;" since="9"/>
+		<method name="skip(Ljava/lang/String;)Ljava/util/Scanner;"/>
+		<method name="skip(Ljava/util/regex/Pattern;)Ljava/util/Scanner;"/>
+		<method name="useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;"/>
+		<method name="useDelimiter(Ljava/util/regex/Pattern;)Ljava/util/Scanner;"/>
+		<method name="useLocale(Ljava/util/Locale;)Ljava/util/Scanner;"/>
+		<method name="useRadix(I)Ljava/util/Scanner;"/>
+	</class>
+	<class name="java/util/ServiceConfigurationError" since="9">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/ServiceLoader" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Iterable"/>
+		<method name="load(Ljava/lang/Class;)Ljava/util/ServiceLoader;"/>
+		<method name="load(Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader;"/>
+		<method name="loadInstalled(Ljava/lang/Class;)Ljava/util/ServiceLoader;"/>
+		<method name="reload()V"/>
+	</class>
+	<class name="java/util/Set" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Collection"/>
+		<method name="copyOf(Ljava/util/Collection;)Ljava/util/Set;" since="31"/>
+		<method name="of()Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+		<method name="of([Ljava/lang/Object;)Ljava/util/Set;" since="30"/>
+	</class>
+	<class name="java/util/SimpleTimeZone" since="1">
+		<extends name="java/util/TimeZone"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="&lt;init>(ILjava/lang/String;IIIIIIII)V"/>
+		<method name="&lt;init>(ILjava/lang/String;IIIIIIIII)V"/>
+		<method name="&lt;init>(ILjava/lang/String;IIIIIIIIIII)V"/>
+		<method name="setDSTSavings(I)V"/>
+		<method name="setEndRule(III)V"/>
+		<method name="setEndRule(IIII)V"/>
+		<method name="setEndRule(IIIIZ)V"/>
+		<method name="setStartRule(III)V"/>
+		<method name="setStartRule(IIII)V"/>
+		<method name="setStartRule(IIIIZ)V"/>
+		<method name="setStartYear(I)V"/>
+		<field name="STANDARD_TIME"/>
+		<field name="UTC_TIME"/>
+		<field name="WALL_TIME"/>
+	</class>
+	<class name="java/util/SortedMap" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Map"/>
+		<method name="comparator()Ljava/util/Comparator;"/>
+		<method name="firstKey()Ljava/lang/Object;"/>
+		<method name="headMap(Ljava/lang/Object;)Ljava/util/SortedMap;"/>
+		<method name="lastKey()Ljava/lang/Object;"/>
+		<method name="subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedMap;"/>
+		<method name="tailMap(Ljava/lang/Object;)Ljava/util/SortedMap;"/>
+	</class>
+	<class name="java/util/SortedSet" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Set"/>
+		<method name="comparator()Ljava/util/Comparator;"/>
+		<method name="first()Ljava/lang/Object;"/>
+		<method name="headSet(Ljava/lang/Object;)Ljava/util/SortedSet;"/>
+		<method name="last()Ljava/lang/Object;"/>
+		<method name="subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/SortedSet;"/>
+		<method name="tailSet(Ljava/lang/Object;)Ljava/util/SortedSet;"/>
+	</class>
+	<class name="java/util/Spliterator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="characteristics()I"/>
+		<method name="estimateSize()J"/>
+		<method name="forEachRemaining(Ljava/util/function/Consumer;)V"/>
+		<method name="getComparator()Ljava/util/Comparator;"/>
+		<method name="getExactSizeIfKnown()J"/>
+		<method name="hasCharacteristics(I)Z"/>
+		<method name="tryAdvance(Ljava/util/function/Consumer;)Z"/>
+		<method name="trySplit()Ljava/util/Spliterator;"/>
+		<field name="CONCURRENT"/>
+		<field name="DISTINCT"/>
+		<field name="IMMUTABLE"/>
+		<field name="NONNULL"/>
+		<field name="ORDERED"/>
+		<field name="SIZED"/>
+		<field name="SORTED"/>
+		<field name="SUBSIZED"/>
+	</class>
+	<class name="java/util/Spliterator$OfDouble" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator$OfPrimitive"/>
+		<method name="forEachRemaining(Ljava/util/function/DoubleConsumer;)V"/>
+		<method name="tryAdvance(Ljava/util/function/DoubleConsumer;)Z"/>
+		<method name="trySplit()Ljava/util/Spliterator$OfDouble;"/>
+	</class>
+	<class name="java/util/Spliterator$OfInt" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator$OfPrimitive"/>
+		<method name="forEachRemaining(Ljava/util/function/IntConsumer;)V"/>
+		<method name="tryAdvance(Ljava/util/function/IntConsumer;)Z"/>
+		<method name="trySplit()Ljava/util/Spliterator$OfInt;"/>
+	</class>
+	<class name="java/util/Spliterator$OfLong" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator$OfPrimitive"/>
+		<method name="forEachRemaining(Ljava/util/function/LongConsumer;)V"/>
+		<method name="tryAdvance(Ljava/util/function/LongConsumer;)Z"/>
+		<method name="trySplit()Ljava/util/Spliterator$OfLong;"/>
+	</class>
+	<class name="java/util/Spliterator$OfPrimitive" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator"/>
+		<method name="forEachRemaining(Ljava/lang/Object;)V"/>
+		<method name="tryAdvance(Ljava/lang/Object;)Z"/>
+		<method name="trySplit()Ljava/util/Spliterator$OfPrimitive;"/>
+	</class>
+	<class name="java/util/Spliterators" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="emptyDoubleSpliterator()Ljava/util/Spliterator$OfDouble;"/>
+		<method name="emptyIntSpliterator()Ljava/util/Spliterator$OfInt;"/>
+		<method name="emptyLongSpliterator()Ljava/util/Spliterator$OfLong;"/>
+		<method name="emptySpliterator()Ljava/util/Spliterator;"/>
+		<method name="iterator(Ljava/util/Spliterator$OfDouble;)Ljava/util/PrimitiveIterator$OfDouble;"/>
+		<method name="iterator(Ljava/util/Spliterator$OfInt;)Ljava/util/PrimitiveIterator$OfInt;"/>
+		<method name="iterator(Ljava/util/Spliterator$OfLong;)Ljava/util/PrimitiveIterator$OfLong;"/>
+		<method name="iterator(Ljava/util/Spliterator;)Ljava/util/Iterator;"/>
+		<method name="spliterator(Ljava/util/Collection;I)Ljava/util/Spliterator;"/>
+		<method name="spliterator(Ljava/util/Iterator;JI)Ljava/util/Spliterator;"/>
+		<method name="spliterator(Ljava/util/PrimitiveIterator$OfDouble;JI)Ljava/util/Spliterator$OfDouble;"/>
+		<method name="spliterator(Ljava/util/PrimitiveIterator$OfInt;JI)Ljava/util/Spliterator$OfInt;"/>
+		<method name="spliterator(Ljava/util/PrimitiveIterator$OfLong;JI)Ljava/util/Spliterator$OfLong;"/>
+		<method name="spliterator([DI)Ljava/util/Spliterator$OfDouble;"/>
+		<method name="spliterator([DIII)Ljava/util/Spliterator$OfDouble;"/>
+		<method name="spliterator([II)Ljava/util/Spliterator$OfInt;"/>
+		<method name="spliterator([IIII)Ljava/util/Spliterator$OfInt;"/>
+		<method name="spliterator([JI)Ljava/util/Spliterator$OfLong;"/>
+		<method name="spliterator([JIII)Ljava/util/Spliterator$OfLong;"/>
+		<method name="spliterator([Ljava/lang/Object;I)Ljava/util/Spliterator;"/>
+		<method name="spliterator([Ljava/lang/Object;III)Ljava/util/Spliterator;"/>
+		<method name="spliteratorUnknownSize(Ljava/util/Iterator;I)Ljava/util/Spliterator;"/>
+		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfDouble;I)Ljava/util/Spliterator$OfDouble;"/>
+		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfInt;I)Ljava/util/Spliterator$OfInt;"/>
+		<method name="spliteratorUnknownSize(Ljava/util/PrimitiveIterator$OfLong;I)Ljava/util/Spliterator$OfLong;"/>
+	</class>
+	<class name="java/util/Spliterators$AbstractDoubleSpliterator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator$OfDouble"/>
+		<method name="&lt;init>(JI)V"/>
+	</class>
+	<class name="java/util/Spliterators$AbstractIntSpliterator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator$OfInt"/>
+		<method name="&lt;init>(JI)V"/>
+	</class>
+	<class name="java/util/Spliterators$AbstractLongSpliterator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator$OfLong"/>
+		<method name="&lt;init>(JI)V"/>
+	</class>
+	<class name="java/util/Spliterators$AbstractSpliterator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Spliterator"/>
+		<method name="&lt;init>(JI)V"/>
+	</class>
+	<class name="java/util/SplittableRandom" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="doubles()Ljava/util/stream/DoubleStream;"/>
+		<method name="doubles(DD)Ljava/util/stream/DoubleStream;"/>
+		<method name="doubles(J)Ljava/util/stream/DoubleStream;"/>
+		<method name="doubles(JDD)Ljava/util/stream/DoubleStream;"/>
+		<method name="ints()Ljava/util/stream/IntStream;"/>
+		<method name="ints(II)Ljava/util/stream/IntStream;"/>
+		<method name="ints(J)Ljava/util/stream/IntStream;"/>
+		<method name="ints(JII)Ljava/util/stream/IntStream;"/>
+		<method name="longs()Ljava/util/stream/LongStream;"/>
+		<method name="longs(J)Ljava/util/stream/LongStream;"/>
+		<method name="longs(JJ)Ljava/util/stream/LongStream;"/>
+		<method name="longs(JJJ)Ljava/util/stream/LongStream;"/>
+		<method name="nextBoolean()Z"/>
+		<method name="nextDouble()D"/>
+		<method name="nextDouble(D)D"/>
+		<method name="nextDouble(DD)D"/>
+		<method name="nextInt()I"/>
+		<method name="nextInt(I)I"/>
+		<method name="nextInt(II)I"/>
+		<method name="nextLong()J"/>
+		<method name="nextLong(J)J"/>
+		<method name="nextLong(JJ)J"/>
+		<method name="split()Ljava/util/SplittableRandom;"/>
+	</class>
+	<class name="java/util/Stack" since="1">
+		<extends name="java/util/Vector"/>
+		<method name="&lt;init>()V"/>
+		<method name="empty()Z"/>
+		<method name="peek()Ljava/lang/Object;"/>
+		<method name="pop()Ljava/lang/Object;"/>
+		<method name="push(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="search(Ljava/lang/Object;)I"/>
+	</class>
+	<class name="java/util/StringJoiner" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;)V"/>
+		<method name="&lt;init>(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V"/>
+		<method name="add(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;"/>
+		<method name="length()I"/>
+		<method name="merge(Ljava/util/StringJoiner;)Ljava/util/StringJoiner;"/>
+		<method name="setEmptyValue(Ljava/lang/CharSequence;)Ljava/util/StringJoiner;"/>
+	</class>
+	<class name="java/util/StringTokenizer" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Enumeration"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Z)V"/>
+		<method name="countTokens()I"/>
+		<method name="hasMoreTokens()Z"/>
+		<method name="nextToken()Ljava/lang/String;"/>
+		<method name="nextToken(Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/TimeZone" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAvailableIDs()[Ljava/lang/String;"/>
+		<method name="getAvailableIDs(I)[Ljava/lang/String;"/>
+		<method name="getDSTSavings()I"/>
+		<method name="getDefault()Ljava/util/TimeZone;"/>
+		<method name="getDisplayName()Ljava/lang/String;"/>
+		<method name="getDisplayName(Ljava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getDisplayName(ZI)Ljava/lang/String;"/>
+		<method name="getDisplayName(ZILjava/util/Locale;)Ljava/lang/String;"/>
+		<method name="getID()Ljava/lang/String;"/>
+		<method name="getOffset(IIIIII)I"/>
+		<method name="getOffset(J)I"/>
+		<method name="getRawOffset()I"/>
+		<method name="getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone;"/>
+		<method name="getTimeZone(Ljava/time/ZoneId;)Ljava/util/TimeZone;" since="26"/>
+		<method name="hasSameRules(Ljava/util/TimeZone;)Z"/>
+		<method name="inDaylightTime(Ljava/util/Date;)Z"/>
+		<method name="observesDaylightTime()Z" since="24"/>
+		<method name="setDefault(Ljava/util/TimeZone;)V"/>
+		<method name="setID(Ljava/lang/String;)V"/>
+		<method name="setRawOffset(I)V"/>
+		<method name="toZoneId()Ljava/time/ZoneId;" since="26"/>
+		<method name="useDaylightTime()Z"/>
+		<field name="LONG"/>
+		<field name="SHORT"/>
+	</class>
+	<class name="java/util/Timer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="cancel()V"/>
+		<method name="purge()I"/>
+		<method name="schedule(Ljava/util/TimerTask;J)V"/>
+		<method name="schedule(Ljava/util/TimerTask;JJ)V"/>
+		<method name="schedule(Ljava/util/TimerTask;Ljava/util/Date;)V"/>
+		<method name="schedule(Ljava/util/TimerTask;Ljava/util/Date;J)V"/>
+		<method name="scheduleAtFixedRate(Ljava/util/TimerTask;JJ)V"/>
+		<method name="scheduleAtFixedRate(Ljava/util/TimerTask;Ljava/util/Date;J)V"/>
+	</class>
+	<class name="java/util/TimerTask" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable"/>
+		<method name="&lt;init>()V"/>
+		<method name="cancel()Z"/>
+		<method name="scheduledExecutionTime()J"/>
+	</class>
+	<class name="java/util/TooManyListenersException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/TreeMap" since="1">
+		<extends name="java/util/AbstractMap"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/NavigableMap" since="9"/>
+		<implements name="java/util/SortedMap" removed="24"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="&lt;init>(Ljava/util/SortedMap;)V"/>
+	</class>
+	<class name="java/util/TreeSet" since="1">
+		<extends name="java/util/AbstractSet"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/NavigableSet" since="9"/>
+		<implements name="java/util/SortedSet" removed="9"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
+		<method name="&lt;init>(Ljava/util/SortedSet;)V"/>
+	</class>
+	<class name="java/util/UUID" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="&lt;init>(JJ)V"/>
+		<method name="clockSequence()I"/>
+		<method name="compareTo(Ljava/util/UUID;)I"/>
+		<method name="fromString(Ljava/lang/String;)Ljava/util/UUID;"/>
+		<method name="getLeastSignificantBits()J"/>
+		<method name="getMostSignificantBits()J"/>
+		<method name="nameUUIDFromBytes([B)Ljava/util/UUID;"/>
+		<method name="node()J"/>
+		<method name="randomUUID()Ljava/util/UUID;"/>
+		<method name="timestamp()J"/>
+		<method name="variant()I"/>
+		<method name="version()I"/>
+	</class>
+	<class name="java/util/UnknownFormatConversionException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getConversion()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/UnknownFormatFlagsException" since="1">
+		<extends name="java/util/IllegalFormatException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getFlags()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/Vector" since="1">
+		<extends name="java/util/AbstractList"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/RandomAccess"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="addElement(Ljava/lang/Object;)V"/>
+		<method name="capacity()I"/>
+		<method name="copyInto([Ljava/lang/Object;)V"/>
+		<method name="elementAt(I)Ljava/lang/Object;"/>
+		<method name="elements()Ljava/util/Enumeration;"/>
+		<method name="ensureCapacity(I)V"/>
+		<method name="firstElement()Ljava/lang/Object;"/>
+		<method name="indexOf(Ljava/lang/Object;I)I"/>
+		<method name="insertElementAt(Ljava/lang/Object;I)V"/>
+		<method name="lastElement()Ljava/lang/Object;"/>
+		<method name="lastIndexOf(Ljava/lang/Object;I)I"/>
+		<method name="removeAllElements()V"/>
+		<method name="removeElement(Ljava/lang/Object;)Z"/>
+		<method name="removeElementAt(I)V"/>
+		<method name="setElementAt(Ljava/lang/Object;I)V"/>
+		<method name="setSize(I)V"/>
+		<method name="trimToSize()V"/>
+		<field name="capacityIncrement"/>
+		<field name="elementCount"/>
+		<field name="elementData"/>
+	</class>
+	<class name="java/util/WeakHashMap" since="1">
+		<extends name="java/util/AbstractMap"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IF)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+	</class>
+	<class name="java/util/concurrent/AbstractExecutorService" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/ExecutorService"/>
+		<method name="&lt;init>()V"/>
+		<method name="newTaskFor(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/RunnableFuture;" since="9"/>
+		<method name="newTaskFor(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/RunnableFuture;" since="9"/>
+	</class>
+	<class name="java/util/concurrent/ArrayBlockingQueue" since="1">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/BlockingQueue"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IZ)V"/>
+		<method name="&lt;init>(IZLjava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/concurrent/BlockingDeque" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Deque"/>
+		<implements name="java/util/concurrent/BlockingQueue"/>
+		<method name="offerFirst(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="offerLast(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="pollFirst(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
+		<method name="pollLast(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
+		<method name="putFirst(Ljava/lang/Object;)V"/>
+		<method name="putLast(Ljava/lang/Object;)V"/>
+		<method name="takeFirst()Ljava/lang/Object;"/>
+		<method name="takeLast()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/concurrent/BlockingQueue" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Queue"/>
+		<method name="drainTo(Ljava/util/Collection;)I"/>
+		<method name="drainTo(Ljava/util/Collection;I)I"/>
+		<method name="offer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
+		<method name="put(Ljava/lang/Object;)V"/>
+		<method name="remainingCapacity()I"/>
+		<method name="take()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/concurrent/BrokenBarrierException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/concurrent/Callable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="call()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/concurrent/CancellationException" since="1">
+		<extends name="java/lang/IllegalStateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/concurrent/CompletableFuture" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/CompletionStage"/>
+		<implements name="java/util/concurrent/Future"/>
+		<method name="&lt;init>()V"/>
+		<method name="acceptEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="allOf([Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="anyOf([Ljava/util/concurrent/CompletableFuture;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="applyToEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="complete(Ljava/lang/Object;)Z"/>
+		<method name="completeAsync(Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture;" since="31"/>
+		<method name="completeAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;" since="31"/>
+		<method name="completeExceptionally(Ljava/lang/Throwable;)Z"/>
+		<method name="completeOnTimeout(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/CompletableFuture;" since="31"/>
+		<method name="completedFuture(Ljava/lang/Object;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="completedStage(Ljava/lang/Object;)Ljava/util/concurrent/CompletionStage;" since="31"/>
+		<method name="copy()Ljava/util/concurrent/CompletableFuture;" since="31"/>
+		<method name="defaultExecutor()Ljava/util/concurrent/Executor;" since="31"/>
+		<method name="delayedExecutor(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Executor;" since="31"/>
+		<method name="delayedExecutor(JLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/Executor;" since="31"/>
+		<method name="exceptionally(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="failedFuture(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletableFuture;" since="31"/>
+		<method name="failedStage(Ljava/lang/Throwable;)Ljava/util/concurrent/CompletionStage;" since="31"/>
+		<method name="getNow(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getNumberOfDependents()I"/>
+		<method name="handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="handleAsync(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="handleAsync(Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="isCompletedExceptionally()Z"/>
+		<method name="join()Ljava/lang/Object;"/>
+		<method name="minimalCompletionStage()Ljava/util/concurrent/CompletionStage;" since="31"/>
+		<method name="newIncompleteFuture()Ljava/util/concurrent/CompletableFuture;" since="31"/>
+		<method name="obtrudeException(Ljava/lang/Throwable;)V"/>
+		<method name="obtrudeValue(Ljava/lang/Object;)V"/>
+		<method name="orTimeout(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/CompletableFuture;" since="31"/>
+		<method name="runAfterBoth(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="runAfterEither(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="runAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="runAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="supplyAsync(Ljava/util/function/Supplier;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="supplyAsync(Ljava/util/function/Supplier;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenAccept(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenAcceptBoth(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenApplyAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenCombine(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenComposeAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenRun(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenRunAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="thenRunAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletableFuture;"/>
+	</class>
+	<class name="java/util/concurrent/CompletableFuture$AsynchronousCompletionTask" since="24">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="java/util/concurrent/CompletionException" since="24">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/concurrent/CompletionService" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="poll()Ljava/util/concurrent/Future;"/>
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Future;"/>
+		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;"/>
+		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;"/>
+		<method name="take()Ljava/util/concurrent/Future;"/>
+	</class>
+	<class name="java/util/concurrent/CompletionStage" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="acceptEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="acceptEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="applyToEither(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="applyToEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="exceptionally(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="handle(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="handleAsync(Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="handleAsync(Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="runAfterBoth(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="runAfterBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="runAfterEither(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="runAfterEitherAsync(Ljava/util/concurrent/CompletionStage;Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenAccept(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenAcceptAsync(Ljava/util/function/Consumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenAcceptBoth(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenAcceptBothAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenApply(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenApplyAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenApplyAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenCombine(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenCombineAsync(Ljava/util/concurrent/CompletionStage;Ljava/util/function/BiFunction;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenCompose(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenComposeAsync(Ljava/util/function/Function;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenComposeAsync(Ljava/util/function/Function;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenRun(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenRunAsync(Ljava/lang/Runnable;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="thenRunAsync(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="toCompletableFuture()Ljava/util/concurrent/CompletableFuture;"/>
+		<method name="whenComplete(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;)Ljava/util/concurrent/CompletionStage;"/>
+		<method name="whenCompleteAsync(Ljava/util/function/BiConsumer;Ljava/util/concurrent/Executor;)Ljava/util/concurrent/CompletionStage;"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentHashMap" since="1">
+		<extends name="java/util/AbstractMap"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/ConcurrentMap"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IF)V" since="9"/>
+		<method name="&lt;init>(IFI)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="contains(Ljava/lang/Object;)Z"/>
+		<method name="elements()Ljava/util/Enumeration;"/>
+		<method name="forEach(JLjava/util/function/BiConsumer;)V" since="24"/>
+		<method name="forEach(JLjava/util/function/BiFunction;Ljava/util/function/Consumer;)V" since="24"/>
+		<method name="forEachEntry(JLjava/util/function/Consumer;)V" since="24"/>
+		<method name="forEachEntry(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24"/>
+		<method name="forEachKey(JLjava/util/function/Consumer;)V" since="24"/>
+		<method name="forEachKey(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24"/>
+		<method name="forEachValue(JLjava/util/function/Consumer;)V" since="24"/>
+		<method name="forEachValue(JLjava/util/function/Function;Ljava/util/function/Consumer;)V" since="24"/>
+		<method name="keySet(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24"/>
+		<method name="keys()Ljava/util/Enumeration;"/>
+		<method name="mappingCount()J" since="24"/>
+		<method name="newKeySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24"/>
+		<method name="newKeySet(I)Ljava/util/concurrent/ConcurrentHashMap$KeySetView;" since="24"/>
+		<method name="reduce(JLjava/util/function/BiFunction;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="reduceEntries(JLjava/util/function/BiFunction;)Ljava/util/Map$Entry;" since="24"/>
+		<method name="reduceEntries(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="reduceEntriesToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
+		<method name="reduceEntriesToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="reduceEntriesToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="reduceKeys(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="reduceKeys(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="reduceKeysToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
+		<method name="reduceKeysToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="reduceKeysToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="reduceToDouble(JLjava/util/function/ToDoubleBiFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
+		<method name="reduceToInt(JLjava/util/function/ToIntBiFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="reduceToLong(JLjava/util/function/ToLongBiFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="reduceValues(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="reduceValues(JLjava/util/function/Function;Ljava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="reduceValuesToDouble(JLjava/util/function/ToDoubleFunction;DLjava/util/function/DoubleBinaryOperator;)D" since="24"/>
+		<method name="reduceValuesToInt(JLjava/util/function/ToIntFunction;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="reduceValuesToLong(JLjava/util/function/ToLongFunction;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="search(JLjava/util/function/BiFunction;)Ljava/lang/Object;" since="24"/>
+		<method name="searchEntries(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
+		<method name="searchKeys(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
+		<method name="searchValues(JLjava/util/function/Function;)Ljava/lang/Object;" since="24"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentHashMap$KeySetView" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Set"/>
+		<method name="getMappedValue()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentLinkedDeque" since="21">
+		<extends name="java/util/AbstractCollection"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/Deque"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentLinkedQueue" since="1">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentMap" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Map"/>
+		<method name="putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="remove(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="replace(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentNavigableMap" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/NavigableMap"/>
+		<implements name="java/util/concurrent/ConcurrentMap"/>
+		<method name="descendingMap()Ljava/util/concurrent/ConcurrentNavigableMap;"/>
+		<method name="headMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
+		<method name="headMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
+		<method name="keySet()Ljava/util/NavigableSet;"/>
+		<method name="subMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
+		<method name="subMap(Ljava/lang/Object;ZLjava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
+		<method name="tailMap(Ljava/lang/Object;)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
+		<method name="tailMap(Ljava/lang/Object;Z)Ljava/util/concurrent/ConcurrentNavigableMap;"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentSkipListMap" since="9">
+		<extends name="java/util/AbstractMap"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/concurrent/ConcurrentNavigableMap"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="&lt;init>(Ljava/util/SortedMap;)V"/>
+		<method name="clone()Ljava/util/concurrent/ConcurrentSkipListMap;"/>
+	</class>
+	<class name="java/util/concurrent/ConcurrentSkipListSet" since="9">
+		<extends name="java/util/AbstractSet"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/NavigableSet"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="&lt;init>(Ljava/util/Comparator;)V"/>
+		<method name="&lt;init>(Ljava/util/SortedSet;)V"/>
+		<method name="clone()Ljava/util/concurrent/ConcurrentSkipListSet;"/>
+		<method name="headSet(Ljava/lang/Object;)Ljava/util/NavigableSet;"/>
+		<method name="subSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/NavigableSet;"/>
+		<method name="tailSet(Ljava/lang/Object;)Ljava/util/NavigableSet;"/>
+	</class>
+	<class name="java/util/concurrent/CopyOnWriteArrayList" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/List"/>
+		<implements name="java/util/RandomAccess"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="&lt;init>([Ljava/lang/Object;)V"/>
+		<method name="addAllAbsent(Ljava/util/Collection;)I"/>
+		<method name="addIfAbsent(Ljava/lang/Object;)Z"/>
+		<method name="indexOf(Ljava/lang/Object;I)I"/>
+		<method name="lastIndexOf(Ljava/lang/Object;I)I"/>
+	</class>
+	<class name="java/util/concurrent/CopyOnWriteArraySet" since="1">
+		<extends name="java/util/AbstractSet"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/concurrent/CountDownLatch" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="await()V"/>
+		<method name="await(JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="countDown()V"/>
+		<method name="getCount()J"/>
+	</class>
+	<class name="java/util/concurrent/CountedCompleter" since="24">
+		<extends name="java/util/concurrent/ForkJoinTask"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/concurrent/CountedCompleter;)V"/>
+		<method name="&lt;init>(Ljava/util/concurrent/CountedCompleter;I)V"/>
+		<method name="addToPendingCount(I)V"/>
+		<method name="compareAndSetPendingCount(II)Z"/>
+		<method name="compute()V"/>
+		<method name="decrementPendingCountUnlessZero()I"/>
+		<method name="firstComplete()Ljava/util/concurrent/CountedCompleter;"/>
+		<method name="getCompleter()Ljava/util/concurrent/CountedCompleter;"/>
+		<method name="getPendingCount()I"/>
+		<method name="getRoot()Ljava/util/concurrent/CountedCompleter;"/>
+		<method name="helpComplete(I)V"/>
+		<method name="nextComplete()Ljava/util/concurrent/CountedCompleter;"/>
+		<method name="onCompletion(Ljava/util/concurrent/CountedCompleter;)V"/>
+		<method name="onExceptionalCompletion(Ljava/lang/Throwable;Ljava/util/concurrent/CountedCompleter;)Z"/>
+		<method name="propagateCompletion()V"/>
+		<method name="quietlyCompleteRoot()V"/>
+		<method name="setPendingCount(I)V"/>
+		<method name="tryComplete()V"/>
+	</class>
+	<class name="java/util/concurrent/CyclicBarrier" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/lang/Runnable;)V"/>
+		<method name="await()I"/>
+		<method name="await(JLjava/util/concurrent/TimeUnit;)I"/>
+		<method name="getNumberWaiting()I"/>
+		<method name="getParties()I"/>
+		<method name="isBroken()Z"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="java/util/concurrent/DelayQueue" since="1">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/util/concurrent/BlockingQueue"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="add(Ljava/util/concurrent/Delayed;)Z"/>
+		<method name="offer(Ljava/util/concurrent/Delayed;)Z"/>
+		<method name="offer(Ljava/util/concurrent/Delayed;JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="peek()Ljava/util/concurrent/Delayed;"/>
+		<method name="poll()Ljava/util/concurrent/Delayed;"/>
+		<method name="poll(JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/Delayed;"/>
+		<method name="put(Ljava/util/concurrent/Delayed;)V"/>
+		<method name="take()Ljava/util/concurrent/Delayed;"/>
+	</class>
+	<class name="java/util/concurrent/Delayed" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Comparable"/>
+		<method name="getDelay(Ljava/util/concurrent/TimeUnit;)J"/>
+	</class>
+	<class name="java/util/concurrent/Exchanger" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="exchange(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="exchange(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/concurrent/ExecutionException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/concurrent/Executor" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="execute(Ljava/lang/Runnable;)V"/>
+	</class>
+	<class name="java/util/concurrent/ExecutorCompletionService" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/CompletionService"/>
+		<method name="&lt;init>(Ljava/util/concurrent/Executor;)V"/>
+		<method name="&lt;init>(Ljava/util/concurrent/Executor;Ljava/util/concurrent/BlockingQueue;)V"/>
+	</class>
+	<class name="java/util/concurrent/ExecutorService" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/Executor"/>
+		<method name="awaitTermination(JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="invokeAll(Ljava/util/Collection;)Ljava/util/List;"/>
+		<method name="invokeAll(Ljava/util/Collection;JLjava/util/concurrent/TimeUnit;)Ljava/util/List;"/>
+		<method name="invokeAny(Ljava/util/Collection;)Ljava/lang/Object;"/>
+		<method name="invokeAny(Ljava/util/Collection;JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
+		<method name="isShutdown()Z"/>
+		<method name="isTerminated()Z"/>
+		<method name="shutdown()V"/>
+		<method name="shutdownNow()Ljava/util/List;"/>
+		<method name="submit(Ljava/lang/Runnable;)Ljava/util/concurrent/Future;"/>
+		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Future;"/>
+		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future;"/>
+	</class>
+	<class name="java/util/concurrent/Executors" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="callable(Ljava/lang/Runnable;)Ljava/util/concurrent/Callable;"/>
+		<method name="callable(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/Callable;"/>
+		<method name="callable(Ljava/security/PrivilegedAction;)Ljava/util/concurrent/Callable;"/>
+		<method name="callable(Ljava/security/PrivilegedExceptionAction;)Ljava/util/concurrent/Callable;"/>
+		<method name="defaultThreadFactory()Ljava/util/concurrent/ThreadFactory;"/>
+		<method name="newCachedThreadPool()Ljava/util/concurrent/ExecutorService;"/>
+		<method name="newCachedThreadPool(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;"/>
+		<method name="newFixedThreadPool(I)Ljava/util/concurrent/ExecutorService;"/>
+		<method name="newFixedThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;"/>
+		<method name="newScheduledThreadPool(I)Ljava/util/concurrent/ScheduledExecutorService;"/>
+		<method name="newScheduledThreadPool(ILjava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;"/>
+		<method name="newSingleThreadExecutor()Ljava/util/concurrent/ExecutorService;"/>
+		<method name="newSingleThreadExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ExecutorService;"/>
+		<method name="newSingleThreadScheduledExecutor()Ljava/util/concurrent/ScheduledExecutorService;"/>
+		<method name="newSingleThreadScheduledExecutor(Ljava/util/concurrent/ThreadFactory;)Ljava/util/concurrent/ScheduledExecutorService;"/>
+		<method name="newWorkStealingPool()Ljava/util/concurrent/ExecutorService;" since="24"/>
+		<method name="newWorkStealingPool(I)Ljava/util/concurrent/ExecutorService;" since="24"/>
+		<method name="privilegedCallable(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Callable;"/>
+		<method name="privilegedCallableUsingCurrentClassLoader(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Callable;"/>
+		<method name="privilegedThreadFactory()Ljava/util/concurrent/ThreadFactory;"/>
+		<method name="unconfigurableExecutorService(Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/ExecutorService;"/>
+		<method name="unconfigurableScheduledExecutorService(Ljava/util/concurrent/ScheduledExecutorService;)Ljava/util/concurrent/ScheduledExecutorService;"/>
+	</class>
+	<class name="java/util/concurrent/Flow" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="defaultBufferSize()I"/>
+	</class>
+	<class name="java/util/concurrent/Flow$Processor" since="30">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/Flow$Publisher"/>
+		<implements name="java/util/concurrent/Flow$Subscriber"/>
+	</class>
+	<class name="java/util/concurrent/Flow$Publisher" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="subscribe(Ljava/util/concurrent/Flow$Subscriber;)V"/>
+	</class>
+	<class name="java/util/concurrent/Flow$Subscriber" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="onComplete()V"/>
+		<method name="onError(Ljava/lang/Throwable;)V"/>
+		<method name="onNext(Ljava/lang/Object;)V"/>
+		<method name="onSubscribe(Ljava/util/concurrent/Flow$Subscription;)V"/>
+	</class>
+	<class name="java/util/concurrent/Flow$Subscription" since="30">
+		<extends name="java/lang/Object"/>
+		<method name="cancel()V"/>
+		<method name="request(J)V"/>
+	</class>
+	<class name="java/util/concurrent/ForkJoinPool" since="21">
+		<extends name="java/util/concurrent/AbstractExecutorService"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;Ljava/lang/Thread$UncaughtExceptionHandler;Z)V"/>
+		<method name="awaitQuiescence(JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="commonPool()Ljava/util/concurrent/ForkJoinPool;" since="24"/>
+		<method name="drainTasksTo(Ljava/util/Collection;)I"/>
+		<method name="execute(Ljava/util/concurrent/ForkJoinTask;)V"/>
+		<method name="getActiveThreadCount()I"/>
+		<method name="getAsyncMode()Z"/>
+		<method name="getCommonPoolParallelism()I" since="24"/>
+		<method name="getFactory()Ljava/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory;"/>
+		<method name="getParallelism()I"/>
+		<method name="getPoolSize()I"/>
+		<method name="getQueuedSubmissionCount()I"/>
+		<method name="getQueuedTaskCount()J"/>
+		<method name="getRunningThreadCount()I"/>
+		<method name="getStealCount()J"/>
+		<method name="getUncaughtExceptionHandler()Ljava/lang/Thread$UncaughtExceptionHandler;"/>
+		<method name="hasQueuedSubmissions()Z"/>
+		<method name="invoke(Ljava/util/concurrent/ForkJoinTask;)Ljava/lang/Object;"/>
+		<method name="isQuiescent()Z"/>
+		<method name="isTerminating()Z"/>
+		<method name="managedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V"/>
+		<method name="pollSubmission()Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="submit(Ljava/lang/Runnable;)Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="submit(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="submit(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="submit(Ljava/util/concurrent/ForkJoinTask;)Ljava/util/concurrent/ForkJoinTask;"/>
+		<field name="defaultForkJoinWorkerThreadFactory"/>
+	</class>
+	<class name="java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="newThread(Ljava/util/concurrent/ForkJoinPool;)Ljava/util/concurrent/ForkJoinWorkerThread;"/>
+	</class>
+	<class name="java/util/concurrent/ForkJoinPool$ManagedBlocker" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="block()Z"/>
+		<method name="isReleasable()Z"/>
+	</class>
+	<class name="java/util/concurrent/ForkJoinTask" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/Future"/>
+		<method name="&lt;init>()V"/>
+		<method name="adapt(Ljava/lang/Runnable;)Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="adapt(Ljava/lang/Runnable;Ljava/lang/Object;)Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="adapt(Ljava/util/concurrent/Callable;)Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="compareAndSetForkJoinTaskTag(SS)Z" since="24"/>
+		<method name="complete(Ljava/lang/Object;)V"/>
+		<method name="completeExceptionally(Ljava/lang/Throwable;)V"/>
+		<method name="exec()Z"/>
+		<method name="fork()Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="getException()Ljava/lang/Throwable;"/>
+		<method name="getForkJoinTaskTag()S" since="24"/>
+		<method name="getPool()Ljava/util/concurrent/ForkJoinPool;"/>
+		<method name="getQueuedTaskCount()I"/>
+		<method name="getRawResult()Ljava/lang/Object;"/>
+		<method name="getSurplusQueuedTaskCount()I"/>
+		<method name="helpQuiesce()V"/>
+		<method name="inForkJoinPool()Z"/>
+		<method name="invoke()Ljava/lang/Object;"/>
+		<method name="invokeAll(Ljava/util/Collection;)Ljava/util/Collection;"/>
+		<method name="invokeAll(Ljava/util/concurrent/ForkJoinTask;Ljava/util/concurrent/ForkJoinTask;)V"/>
+		<method name="invokeAll([Ljava/util/concurrent/ForkJoinTask;)V"/>
+		<method name="isCompletedAbnormally()Z"/>
+		<method name="isCompletedNormally()Z"/>
+		<method name="join()Ljava/lang/Object;"/>
+		<method name="peekNextLocalTask()Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="pollNextLocalTask()Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="pollTask()Ljava/util/concurrent/ForkJoinTask;"/>
+		<method name="quietlyComplete()V" since="24"/>
+		<method name="quietlyInvoke()V"/>
+		<method name="quietlyJoin()V"/>
+		<method name="reinitialize()V"/>
+		<method name="setForkJoinTaskTag(S)S" since="24"/>
+		<method name="setRawResult(Ljava/lang/Object;)V"/>
+		<method name="tryUnfork()Z"/>
+	</class>
+	<class name="java/util/concurrent/ForkJoinWorkerThread" since="21">
+		<extends name="java/lang/Thread"/>
+		<method name="&lt;init>(Ljava/util/concurrent/ForkJoinPool;)V"/>
+		<method name="getPool()Ljava/util/concurrent/ForkJoinPool;"/>
+		<method name="getPoolIndex()I"/>
+		<method name="onStart()V"/>
+		<method name="onTermination(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/concurrent/Future" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="cancel(Z)Z"/>
+		<method name="get()Ljava/lang/Object;"/>
+		<method name="get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;"/>
+		<method name="isCancelled()Z"/>
+		<method name="isDone()Z"/>
+	</class>
+	<class name="java/util/concurrent/FutureTask" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable" removed="9"/>
+		<implements name="java/util/concurrent/Future" removed="9"/>
+		<implements name="java/util/concurrent/RunnableFuture" since="9"/>
+		<method name="&lt;init>(Ljava/lang/Runnable;Ljava/lang/Object;)V"/>
+		<method name="&lt;init>(Ljava/util/concurrent/Callable;)V"/>
+		<method name="done()V"/>
+		<method name="runAndReset()Z"/>
+		<method name="set(Ljava/lang/Object;)V"/>
+		<method name="setException(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/concurrent/LinkedBlockingDeque" since="9">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/BlockingDeque"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/concurrent/LinkedBlockingQueue" since="1">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/BlockingQueue"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/concurrent/LinkedTransferQueue" since="21">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/TransferQueue"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+	</class>
+	<class name="java/util/concurrent/Phaser" since="21">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/util/concurrent/Phaser;)V"/>
+		<method name="&lt;init>(Ljava/util/concurrent/Phaser;I)V"/>
+		<method name="arrive()I"/>
+		<method name="arriveAndAwaitAdvance()I"/>
+		<method name="arriveAndDeregister()I"/>
+		<method name="awaitAdvance(I)I"/>
+		<method name="awaitAdvanceInterruptibly(I)I"/>
+		<method name="awaitAdvanceInterruptibly(IJLjava/util/concurrent/TimeUnit;)I"/>
+		<method name="bulkRegister(I)I"/>
+		<method name="forceTermination()V"/>
+		<method name="getArrivedParties()I"/>
+		<method name="getParent()Ljava/util/concurrent/Phaser;"/>
+		<method name="getPhase()I"/>
+		<method name="getRegisteredParties()I"/>
+		<method name="getRoot()Ljava/util/concurrent/Phaser;"/>
+		<method name="getUnarrivedParties()I"/>
+		<method name="isTerminated()Z"/>
+		<method name="onAdvance(II)Z"/>
+		<method name="register()I"/>
+	</class>
+	<class name="java/util/concurrent/PriorityBlockingQueue" since="1">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/BlockingQueue"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/util/Comparator;)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="comparator()Ljava/util/Comparator;"/>
+	</class>
+	<class name="java/util/concurrent/RecursiveAction" since="21">
+		<extends name="java/util/concurrent/ForkJoinTask"/>
+		<method name="&lt;init>()V"/>
+		<method name="compute()V"/>
+		<method name="getRawResult()Ljava/lang/Void;"/>
+		<method name="setRawResult(Ljava/lang/Void;)V"/>
+	</class>
+	<class name="java/util/concurrent/RecursiveTask" since="21">
+		<extends name="java/util/concurrent/ForkJoinTask"/>
+		<method name="&lt;init>()V"/>
+		<method name="compute()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/concurrent/RejectedExecutionException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/concurrent/RejectedExecutionHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V"/>
+	</class>
+	<class name="java/util/concurrent/RunnableFuture" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable"/>
+		<implements name="java/util/concurrent/Future"/>
+	</class>
+	<class name="java/util/concurrent/RunnableScheduledFuture" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/RunnableFuture"/>
+		<implements name="java/util/concurrent/ScheduledFuture"/>
+		<method name="isPeriodic()Z"/>
+	</class>
+	<class name="java/util/concurrent/ScheduledExecutorService" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/ExecutorService"/>
+		<method name="schedule(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
+		<method name="schedule(Ljava/util/concurrent/Callable;JLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
+		<method name="scheduleAtFixedRate(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
+		<method name="scheduleWithFixedDelay(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Ljava/util/concurrent/ScheduledFuture;"/>
+	</class>
+	<class name="java/util/concurrent/ScheduledFuture" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/Delayed"/>
+		<implements name="java/util/concurrent/Future"/>
+	</class>
+	<class name="java/util/concurrent/ScheduledThreadPoolExecutor" since="1">
+		<extends name="java/util/concurrent/ThreadPoolExecutor"/>
+		<implements name="java/util/concurrent/ScheduledExecutorService"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(ILjava/util/concurrent/RejectedExecutionHandler;)V"/>
+		<method name="&lt;init>(ILjava/util/concurrent/ThreadFactory;)V"/>
+		<method name="&lt;init>(ILjava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
+		<method name="decorateTask(Ljava/lang/Runnable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;" since="9"/>
+		<method name="decorateTask(Ljava/util/concurrent/Callable;Ljava/util/concurrent/RunnableScheduledFuture;)Ljava/util/concurrent/RunnableScheduledFuture;" since="9"/>
+		<method name="getContinueExistingPeriodicTasksAfterShutdownPolicy()Z"/>
+		<method name="getExecuteExistingDelayedTasksAfterShutdownPolicy()Z"/>
+		<method name="getRemoveOnCancelPolicy()Z" since="21"/>
+		<method name="setContinueExistingPeriodicTasksAfterShutdownPolicy(Z)V"/>
+		<method name="setExecuteExistingDelayedTasksAfterShutdownPolicy(Z)V"/>
+		<method name="setRemoveOnCancelPolicy(Z)V" since="21"/>
+	</class>
+	<class name="java/util/concurrent/Semaphore" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IZ)V"/>
+		<method name="acquire()V"/>
+		<method name="acquire(I)V"/>
+		<method name="acquireUninterruptibly()V"/>
+		<method name="acquireUninterruptibly(I)V"/>
+		<method name="availablePermits()I"/>
+		<method name="drainPermits()I"/>
+		<method name="getQueueLength()I"/>
+		<method name="getQueuedThreads()Ljava/util/Collection;"/>
+		<method name="hasQueuedThreads()Z"/>
+		<method name="isFair()Z"/>
+		<method name="reducePermits(I)V"/>
+		<method name="release()V"/>
+		<method name="release(I)V"/>
+		<method name="tryAcquire()Z"/>
+		<method name="tryAcquire(I)Z"/>
+		<method name="tryAcquire(IJLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="tryAcquire(JLjava/util/concurrent/TimeUnit;)Z"/>
+	</class>
+	<class name="java/util/concurrent/SynchronousQueue" since="1">
+		<extends name="java/util/AbstractQueue"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/BlockingQueue"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Z)V"/>
+	</class>
+	<class name="java/util/concurrent/ThreadFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;"/>
+	</class>
+	<class name="java/util/concurrent/ThreadLocalRandom" since="21">
+		<extends name="java/util/Random"/>
+		<method name="current()Ljava/util/concurrent/ThreadLocalRandom;"/>
+		<method name="nextDouble(D)D"/>
+		<method name="nextDouble(DD)D"/>
+		<method name="nextInt(II)I"/>
+		<method name="nextLong(J)J"/>
+		<method name="nextLong(JJ)J"/>
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor" since="1">
+		<extends name="java/util/concurrent/AbstractExecutorService"/>
+		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;)V"/>
+		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
+		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V"/>
+		<method name="&lt;init>(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
+		<method name="afterExecute(Ljava/lang/Runnable;Ljava/lang/Throwable;)V"/>
+		<method name="allowCoreThreadTimeOut(Z)V" since="9"/>
+		<method name="allowsCoreThreadTimeOut()Z" since="9"/>
+		<method name="beforeExecute(Ljava/lang/Thread;Ljava/lang/Runnable;)V"/>
+		<method name="getActiveCount()I"/>
+		<method name="getCompletedTaskCount()J"/>
+		<method name="getCorePoolSize()I"/>
+		<method name="getKeepAliveTime(Ljava/util/concurrent/TimeUnit;)J"/>
+		<method name="getLargestPoolSize()I"/>
+		<method name="getMaximumPoolSize()I"/>
+		<method name="getPoolSize()I"/>
+		<method name="getQueue()Ljava/util/concurrent/BlockingQueue;"/>
+		<method name="getRejectedExecutionHandler()Ljava/util/concurrent/RejectedExecutionHandler;"/>
+		<method name="getTaskCount()J"/>
+		<method name="getThreadFactory()Ljava/util/concurrent/ThreadFactory;"/>
+		<method name="isTerminating()Z"/>
+		<method name="prestartAllCoreThreads()I"/>
+		<method name="prestartCoreThread()Z"/>
+		<method name="purge()V"/>
+		<method name="remove(Ljava/lang/Runnable;)Z"/>
+		<method name="setCorePoolSize(I)V"/>
+		<method name="setKeepAliveTime(JLjava/util/concurrent/TimeUnit;)V"/>
+		<method name="setMaximumPoolSize(I)V"/>
+		<method name="setRejectedExecutionHandler(Ljava/util/concurrent/RejectedExecutionHandler;)V"/>
+		<method name="setThreadFactory(Ljava/util/concurrent/ThreadFactory;)V"/>
+		<method name="terminated()V"/>
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$AbortPolicy" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$CallerRunsPolicy" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$DiscardOldestPolicy" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/concurrent/ThreadPoolExecutor$DiscardPolicy" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/RejectedExecutionHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/concurrent/TimeUnit" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="convert(JLjava/util/concurrent/TimeUnit;)J"/>
+		<method name="sleep(J)V"/>
+		<method name="timedJoin(Ljava/lang/Thread;J)V"/>
+		<method name="timedWait(Ljava/lang/Object;J)V"/>
+		<method name="toDays(J)J" since="9"/>
+		<method name="toHours(J)J" since="9"/>
+		<method name="toMicros(J)J"/>
+		<method name="toMillis(J)J"/>
+		<method name="toMinutes(J)J" since="9"/>
+		<method name="toNanos(J)J"/>
+		<method name="toSeconds(J)J"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/concurrent/TimeUnit;"/>
+		<method name="values()[Ljava/util/concurrent/TimeUnit;"/>
+		<field name="DAYS" since="9"/>
+		<field name="HOURS" since="9"/>
+		<field name="MICROSECONDS"/>
+		<field name="MILLISECONDS"/>
+		<field name="MINUTES" since="9"/>
+		<field name="NANOSECONDS"/>
+		<field name="SECONDS"/>
+	</class>
+	<class name="java/util/concurrent/TimeoutException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/concurrent/TransferQueue" since="21">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/concurrent/BlockingQueue"/>
+		<method name="getWaitingConsumerCount()I"/>
+		<method name="hasWaitingConsumer()Z"/>
+		<method name="transfer(Ljava/lang/Object;)V"/>
+		<method name="tryTransfer(Ljava/lang/Object;)Z"/>
+		<method name="tryTransfer(Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicBoolean" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="compareAndSet(ZZ)Z"/>
+		<method name="get()Z"/>
+		<method name="getAndSet(Z)Z"/>
+		<method name="lazySet(Z)V" since="9"/>
+		<method name="set(Z)V"/>
+		<method name="weakCompareAndSet(ZZ)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicInteger" since="1">
+		<extends name="java/lang/Number"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="accumulateAndGet(ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="addAndGet(I)I"/>
+		<method name="compareAndSet(II)Z"/>
+		<method name="decrementAndGet()I"/>
+		<method name="get()I"/>
+		<method name="getAndAccumulate(ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="getAndAdd(I)I"/>
+		<method name="getAndDecrement()I"/>
+		<method name="getAndIncrement()I"/>
+		<method name="getAndSet(I)I"/>
+		<method name="getAndUpdate(Ljava/util/function/IntUnaryOperator;)I" since="24"/>
+		<method name="incrementAndGet()I"/>
+		<method name="lazySet(I)V" since="9"/>
+		<method name="set(I)V"/>
+		<method name="updateAndGet(Ljava/util/function/IntUnaryOperator;)I" since="24"/>
+		<method name="weakCompareAndSet(II)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicIntegerArray" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>([I)V"/>
+		<method name="accumulateAndGet(IILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="addAndGet(II)I"/>
+		<method name="compareAndSet(III)Z"/>
+		<method name="decrementAndGet(I)I"/>
+		<method name="get(I)I"/>
+		<method name="getAndAccumulate(IILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="getAndAdd(II)I"/>
+		<method name="getAndDecrement(I)I"/>
+		<method name="getAndIncrement(I)I"/>
+		<method name="getAndSet(II)I"/>
+		<method name="getAndUpdate(ILjava/util/function/IntUnaryOperator;)I" since="24"/>
+		<method name="incrementAndGet(I)I"/>
+		<method name="lazySet(II)V" since="9"/>
+		<method name="length()I"/>
+		<method name="set(II)V"/>
+		<method name="updateAndGet(ILjava/util/function/IntUnaryOperator;)I" since="24"/>
+		<method name="weakCompareAndSet(III)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicIntegerFieldUpdater" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="accumulateAndGet(Ljava/lang/Object;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="addAndGet(Ljava/lang/Object;I)I"/>
+		<method name="compareAndSet(Ljava/lang/Object;II)Z"/>
+		<method name="decrementAndGet(Ljava/lang/Object;)I"/>
+		<method name="get(Ljava/lang/Object;)I"/>
+		<method name="getAndAccumulate(Ljava/lang/Object;ILjava/util/function/IntBinaryOperator;)I" since="24"/>
+		<method name="getAndAdd(Ljava/lang/Object;I)I"/>
+		<method name="getAndDecrement(Ljava/lang/Object;)I"/>
+		<method name="getAndIncrement(Ljava/lang/Object;)I"/>
+		<method name="getAndSet(Ljava/lang/Object;I)I"/>
+		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/IntUnaryOperator;)I" since="24"/>
+		<method name="incrementAndGet(Ljava/lang/Object;)I"/>
+		<method name="lazySet(Ljava/lang/Object;I)V" since="9"/>
+		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;"/>
+		<method name="set(Ljava/lang/Object;I)V"/>
+		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/IntUnaryOperator;)I" since="24"/>
+		<method name="weakCompareAndSet(Ljava/lang/Object;II)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicLong" since="1">
+		<extends name="java/lang/Number"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(J)V"/>
+		<method name="accumulateAndGet(JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="addAndGet(J)J"/>
+		<method name="compareAndSet(JJ)Z"/>
+		<method name="decrementAndGet()J"/>
+		<method name="get()J"/>
+		<method name="getAndAccumulate(JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="getAndAdd(J)J"/>
+		<method name="getAndDecrement()J"/>
+		<method name="getAndIncrement()J"/>
+		<method name="getAndSet(J)J"/>
+		<method name="getAndUpdate(Ljava/util/function/LongUnaryOperator;)J" since="24"/>
+		<method name="incrementAndGet()J"/>
+		<method name="lazySet(J)V" since="9"/>
+		<method name="set(J)V"/>
+		<method name="updateAndGet(Ljava/util/function/LongUnaryOperator;)J" since="24"/>
+		<method name="weakCompareAndSet(JJ)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicLongArray" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>([J)V"/>
+		<method name="accumulateAndGet(IJLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="addAndGet(IJ)J"/>
+		<method name="compareAndSet(IJJ)Z"/>
+		<method name="decrementAndGet(I)J"/>
+		<method name="get(I)J"/>
+		<method name="getAndAccumulate(IJLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="getAndAdd(IJ)J"/>
+		<method name="getAndDecrement(I)J"/>
+		<method name="getAndIncrement(I)J"/>
+		<method name="getAndSet(IJ)J"/>
+		<method name="getAndUpdate(ILjava/util/function/LongUnaryOperator;)J" since="24"/>
+		<method name="incrementAndGet(I)J"/>
+		<method name="lazySet(IJ)V" since="9"/>
+		<method name="length()I"/>
+		<method name="set(IJ)V"/>
+		<method name="updateAndGet(ILjava/util/function/LongUnaryOperator;)J" since="24"/>
+		<method name="weakCompareAndSet(IJJ)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicLongFieldUpdater" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="accumulateAndGet(Ljava/lang/Object;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="addAndGet(Ljava/lang/Object;J)J"/>
+		<method name="compareAndSet(Ljava/lang/Object;JJ)Z"/>
+		<method name="decrementAndGet(Ljava/lang/Object;)J"/>
+		<method name="get(Ljava/lang/Object;)J"/>
+		<method name="getAndAccumulate(Ljava/lang/Object;JLjava/util/function/LongBinaryOperator;)J" since="24"/>
+		<method name="getAndAdd(Ljava/lang/Object;J)J"/>
+		<method name="getAndDecrement(Ljava/lang/Object;)J"/>
+		<method name="getAndIncrement(Ljava/lang/Object;)J"/>
+		<method name="getAndSet(Ljava/lang/Object;J)J"/>
+		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/LongUnaryOperator;)J" since="24"/>
+		<method name="incrementAndGet(Ljava/lang/Object;)J"/>
+		<method name="lazySet(Ljava/lang/Object;J)V" since="9"/>
+		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;"/>
+		<method name="set(Ljava/lang/Object;J)V"/>
+		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/LongUnaryOperator;)J" since="24"/>
+		<method name="weakCompareAndSet(Ljava/lang/Object;JJ)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicMarkableReference" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Object;Z)V"/>
+		<method name="attemptMark(Ljava/lang/Object;Z)Z"/>
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;ZZ)Z"/>
+		<method name="get([Z)Ljava/lang/Object;"/>
+		<method name="getReference()Ljava/lang/Object;"/>
+		<method name="isMarked()Z"/>
+		<method name="set(Ljava/lang/Object;Z)V"/>
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;ZZ)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicReference" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V"/>
+		<method name="accumulateAndGet(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="get()Ljava/lang/Object;"/>
+		<method name="getAndAccumulate(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="getAndSet(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getAndUpdate(Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="lazySet(Ljava/lang/Object;)V" since="9"/>
+		<method name="set(Ljava/lang/Object;)V"/>
+		<method name="updateAndGet(Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicReferenceArray" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>([Ljava/lang/Object;)V"/>
+		<method name="accumulateAndGet(ILjava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="compareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="get(I)Ljava/lang/Object;"/>
+		<method name="getAndAccumulate(ILjava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="getAndSet(ILjava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getAndUpdate(ILjava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="lazySet(ILjava/lang/Object;)V" since="9"/>
+		<method name="length()I"/>
+		<method name="set(ILjava/lang/Object;)V"/>
+		<method name="updateAndGet(ILjava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="weakCompareAndSet(ILjava/lang/Object;Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicReferenceFieldUpdater" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="accumulateAndGet(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="get(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getAndAccumulate(Ljava/lang/Object;Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="getAndSet(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="getAndUpdate(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="lazySet(Ljava/lang/Object;Ljava/lang/Object;)V" since="9"/>
+		<method name="newUpdater(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;"/>
+		<method name="set(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="updateAndGet(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/lang/Object;" since="24"/>
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/AtomicStampedReference" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/Object;I)V"/>
+		<method name="attemptStamp(Ljava/lang/Object;I)Z"/>
+		<method name="compareAndSet(Ljava/lang/Object;Ljava/lang/Object;II)Z"/>
+		<method name="get([I)Ljava/lang/Object;"/>
+		<method name="getReference()Ljava/lang/Object;"/>
+		<method name="getStamp()I"/>
+		<method name="set(Ljava/lang/Object;I)V"/>
+		<method name="weakCompareAndSet(Ljava/lang/Object;Ljava/lang/Object;II)Z"/>
+	</class>
+	<class name="java/util/concurrent/atomic/DoubleAccumulator" since="24">
+		<extends name="java/lang/Number"/>
+		<method name="&lt;init>(Ljava/util/function/DoubleBinaryOperator;D)V"/>
+		<method name="accumulate(D)V"/>
+		<method name="get()D"/>
+		<method name="getThenReset()D"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="java/util/concurrent/atomic/DoubleAdder" since="24">
+		<extends name="java/lang/Number"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(D)V"/>
+		<method name="reset()V"/>
+		<method name="sum()D"/>
+		<method name="sumThenReset()D"/>
+	</class>
+	<class name="java/util/concurrent/atomic/LongAccumulator" since="24">
+		<extends name="java/lang/Number"/>
+		<method name="&lt;init>(Ljava/util/function/LongBinaryOperator;J)V"/>
+		<method name="accumulate(J)V"/>
+		<method name="get()J"/>
+		<method name="getThenReset()J"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="java/util/concurrent/atomic/LongAdder" since="24">
+		<extends name="java/lang/Number"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(J)V"/>
+		<method name="decrement()V"/>
+		<method name="increment()V"/>
+		<method name="reset()V"/>
+		<method name="sum()J"/>
+		<method name="sumThenReset()J"/>
+	</class>
+	<class name="java/util/concurrent/locks/AbstractOwnableSynchronizer" since="5">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="getExclusiveOwnerThread()Ljava/lang/Thread;"/>
+		<method name="setExclusiveOwnerThread(Ljava/lang/Thread;)V"/>
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedLongSynchronizer" since="9">
+		<extends name="java/util/concurrent/locks/AbstractOwnableSynchronizer"/>
+		<method name="&lt;init>()V"/>
+		<method name="acquire(J)V"/>
+		<method name="acquireInterruptibly(J)V"/>
+		<method name="acquireShared(J)V"/>
+		<method name="acquireSharedInterruptibly(J)V"/>
+		<method name="compareAndSetState(JJ)Z"/>
+		<method name="getExclusiveQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getFirstQueuedThread()Ljava/lang/Thread;"/>
+		<method name="getQueueLength()I"/>
+		<method name="getQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getSharedQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getState()J"/>
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)I"/>
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Ljava/util/Collection;"/>
+		<method name="hasContended()Z"/>
+		<method name="hasQueuedPredecessors()Z" since="21"/>
+		<method name="hasQueuedThreads()Z"/>
+		<method name="hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Z"/>
+		<method name="isHeldExclusively()Z"/>
+		<method name="isQueued(Ljava/lang/Thread;)Z"/>
+		<method name="owns(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject;)Z"/>
+		<method name="release(J)Z"/>
+		<method name="releaseShared(J)Z"/>
+		<method name="setState(J)V"/>
+		<method name="tryAcquire(J)Z"/>
+		<method name="tryAcquireNanos(JJ)Z"/>
+		<method name="tryAcquireShared(J)J"/>
+		<method name="tryAcquireSharedNanos(JJ)Z"/>
+		<method name="tryRelease(J)Z"/>
+		<method name="tryReleaseShared(J)Z"/>
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedLongSynchronizer$ConditionObject" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/locks/Condition"/>
+		<method name="&lt;init>(Ljava/util/concurrent/locks/AbstractQueuedLongSynchronizer;)V"/>
+		<method name="getWaitQueueLength()I"/>
+		<method name="getWaitingThreads()Ljava/util/Collection;"/>
+		<method name="hasWaiters()Z"/>
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedSynchronizer" since="1">
+		<extends name="java/lang/Object" removed="5"/>
+		<extends name="java/util/concurrent/locks/AbstractOwnableSynchronizer" since="5"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="acquire(I)V"/>
+		<method name="acquireInterruptibly(I)V"/>
+		<method name="acquireShared(I)V"/>
+		<method name="acquireSharedInterruptibly(I)V"/>
+		<method name="compareAndSetState(II)Z"/>
+		<method name="getExclusiveQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getFirstQueuedThread()Ljava/lang/Thread;"/>
+		<method name="getQueueLength()I"/>
+		<method name="getQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getSharedQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getState()I"/>
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)I"/>
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Ljava/util/Collection;"/>
+		<method name="hasContended()Z"/>
+		<method name="hasQueuedPredecessors()Z" since="21"/>
+		<method name="hasQueuedThreads()Z"/>
+		<method name="hasWaiters(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z"/>
+		<method name="isHeldExclusively()Z"/>
+		<method name="isQueued(Ljava/lang/Thread;)Z"/>
+		<method name="owns(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject;)Z"/>
+		<method name="release(I)Z"/>
+		<method name="releaseShared(I)Z"/>
+		<method name="setState(I)V"/>
+		<method name="tryAcquire(I)Z"/>
+		<method name="tryAcquireNanos(IJ)Z"/>
+		<method name="tryAcquireShared(I)I"/>
+		<method name="tryAcquireSharedNanos(IJ)Z"/>
+		<method name="tryRelease(I)Z"/>
+		<method name="tryReleaseShared(I)Z"/>
+	</class>
+	<class name="java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/locks/Condition"/>
+		<method name="&lt;init>(Ljava/util/concurrent/locks/AbstractQueuedSynchronizer;)V"/>
+		<method name="getWaitQueueLength()I"/>
+		<method name="getWaitingThreads()Ljava/util/Collection;"/>
+		<method name="hasWaiters()Z"/>
+	</class>
+	<class name="java/util/concurrent/locks/Condition" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="await()V"/>
+		<method name="await(JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="awaitNanos(J)J"/>
+		<method name="awaitUninterruptibly()V"/>
+		<method name="awaitUntil(Ljava/util/Date;)Z"/>
+		<method name="signal()V"/>
+		<method name="signalAll()V"/>
+	</class>
+	<class name="java/util/concurrent/locks/Lock" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="lock()V"/>
+		<method name="lockInterruptibly()V"/>
+		<method name="newCondition()Ljava/util/concurrent/locks/Condition;"/>
+		<method name="tryLock()Z"/>
+		<method name="tryLock(JLjava/util/concurrent/TimeUnit;)Z"/>
+		<method name="unlock()V"/>
+	</class>
+	<class name="java/util/concurrent/locks/LockSupport" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getBlocker(Ljava/lang/Thread;)Ljava/lang/Object;" since="9"/>
+		<method name="park()V"/>
+		<method name="park(Ljava/lang/Object;)V" since="9"/>
+		<method name="parkNanos(J)V"/>
+		<method name="parkNanos(Ljava/lang/Object;J)V" since="9"/>
+		<method name="parkUntil(J)V"/>
+		<method name="parkUntil(Ljava/lang/Object;J)V" since="9"/>
+		<method name="unpark(Ljava/lang/Thread;)V"/>
+	</class>
+	<class name="java/util/concurrent/locks/ReadWriteLock" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="readLock()Ljava/util/concurrent/locks/Lock;"/>
+		<method name="writeLock()Ljava/util/concurrent/locks/Lock;"/>
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantLock" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/locks/Lock"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="getHoldCount()I"/>
+		<method name="getOwner()Ljava/lang/Thread;"/>
+		<method name="getQueueLength()I"/>
+		<method name="getQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/Condition;)I"/>
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection;"/>
+		<method name="hasQueuedThread(Ljava/lang/Thread;)Z"/>
+		<method name="hasQueuedThreads()Z"/>
+		<method name="hasWaiters(Ljava/util/concurrent/locks/Condition;)Z"/>
+		<method name="isFair()Z"/>
+		<method name="isHeldByCurrentThread()Z"/>
+		<method name="isLocked()Z"/>
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantReadWriteLock" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/locks/ReadWriteLock"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="getOwner()Ljava/lang/Thread;"/>
+		<method name="getQueueLength()I"/>
+		<method name="getQueuedReaderThreads()Ljava/util/Collection;"/>
+		<method name="getQueuedThreads()Ljava/util/Collection;"/>
+		<method name="getQueuedWriterThreads()Ljava/util/Collection;"/>
+		<method name="getReadHoldCount()I" since="9"/>
+		<method name="getReadLockCount()I"/>
+		<method name="getWaitQueueLength(Ljava/util/concurrent/locks/Condition;)I"/>
+		<method name="getWaitingThreads(Ljava/util/concurrent/locks/Condition;)Ljava/util/Collection;"/>
+		<method name="getWriteHoldCount()I"/>
+		<method name="hasQueuedThread(Ljava/lang/Thread;)Z"/>
+		<method name="hasQueuedThreads()Z"/>
+		<method name="hasWaiters(Ljava/util/concurrent/locks/Condition;)Z"/>
+		<method name="isFair()Z"/>
+		<method name="isWriteLocked()Z"/>
+		<method name="isWriteLockedByCurrentThread()Z"/>
+		<method name="readLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$ReadLock;"/>
+		<method name="writeLock()Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;"/>
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/locks/Lock"/>
+		<method name="&lt;init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V"/>
+	</class>
+	<class name="java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/concurrent/locks/Lock"/>
+		<method name="&lt;init>(Ljava/util/concurrent/locks/ReentrantReadWriteLock;)V"/>
+		<method name="getHoldCount()I" since="9"/>
+		<method name="isHeldByCurrentThread()Z" since="9"/>
+	</class>
+	<class name="java/util/concurrent/locks/StampedLock" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="asReadLock()Ljava/util/concurrent/locks/Lock;"/>
+		<method name="asReadWriteLock()Ljava/util/concurrent/locks/ReadWriteLock;"/>
+		<method name="asWriteLock()Ljava/util/concurrent/locks/Lock;"/>
+		<method name="getReadLockCount()I"/>
+		<method name="isReadLocked()Z"/>
+		<method name="isWriteLocked()Z"/>
+		<method name="readLock()J"/>
+		<method name="readLockInterruptibly()J"/>
+		<method name="tryConvertToOptimisticRead(J)J"/>
+		<method name="tryConvertToReadLock(J)J"/>
+		<method name="tryConvertToWriteLock(J)J"/>
+		<method name="tryOptimisticRead()J"/>
+		<method name="tryReadLock()J"/>
+		<method name="tryReadLock(JLjava/util/concurrent/TimeUnit;)J"/>
+		<method name="tryUnlockRead()Z"/>
+		<method name="tryUnlockWrite()Z"/>
+		<method name="tryWriteLock()J"/>
+		<method name="tryWriteLock(JLjava/util/concurrent/TimeUnit;)J"/>
+		<method name="unlock(J)V"/>
+		<method name="unlockRead(J)V"/>
+		<method name="unlockWrite(J)V"/>
+		<method name="validate(J)Z"/>
+		<method name="writeLock()J"/>
+		<method name="writeLockInterruptibly()J"/>
+	</class>
+	<class name="java/util/function/BiConsumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="andThen(Ljava/util/function/BiConsumer;)Ljava/util/function/BiConsumer;"/>
+	</class>
+	<class name="java/util/function/BiFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="andThen(Ljava/util/function/Function;)Ljava/util/function/BiFunction;"/>
+		<method name="apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/function/BiPredicate" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="and(Ljava/util/function/BiPredicate;)Ljava/util/function/BiPredicate;"/>
+		<method name="negate()Ljava/util/function/BiPredicate;"/>
+		<method name="or(Ljava/util/function/BiPredicate;)Ljava/util/function/BiPredicate;"/>
+		<method name="test(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/util/function/BinaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/BiFunction"/>
+		<method name="maxBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;"/>
+		<method name="minBy(Ljava/util/Comparator;)Ljava/util/function/BinaryOperator;"/>
+	</class>
+	<class name="java/util/function/BooleanSupplier" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getAsBoolean()Z"/>
+	</class>
+	<class name="java/util/function/Consumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/lang/Object;)V"/>
+		<method name="andThen(Ljava/util/function/Consumer;)Ljava/util/function/Consumer;"/>
+	</class>
+	<class name="java/util/function/DoubleBinaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsDouble(DD)D"/>
+	</class>
+	<class name="java/util/function/DoubleConsumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(D)V"/>
+		<method name="andThen(Ljava/util/function/DoubleConsumer;)Ljava/util/function/DoubleConsumer;"/>
+	</class>
+	<class name="java/util/function/DoubleFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="apply(D)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/function/DoublePredicate" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="and(Ljava/util/function/DoublePredicate;)Ljava/util/function/DoublePredicate;"/>
+		<method name="negate()Ljava/util/function/DoublePredicate;"/>
+		<method name="or(Ljava/util/function/DoublePredicate;)Ljava/util/function/DoublePredicate;"/>
+		<method name="test(D)Z"/>
+	</class>
+	<class name="java/util/function/DoubleSupplier" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getAsDouble()D"/>
+	</class>
+	<class name="java/util/function/DoubleToIntFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsInt(D)I"/>
+	</class>
+	<class name="java/util/function/DoubleToLongFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsLong(D)J"/>
+	</class>
+	<class name="java/util/function/DoubleUnaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="andThen(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;"/>
+		<method name="applyAsDouble(D)D"/>
+		<method name="compose(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/function/DoubleUnaryOperator;"/>
+		<method name="identity()Ljava/util/function/DoubleUnaryOperator;"/>
+	</class>
+	<class name="java/util/function/Function" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="andThen(Ljava/util/function/Function;)Ljava/util/function/Function;"/>
+		<method name="apply(Ljava/lang/Object;)Ljava/lang/Object;"/>
+		<method name="compose(Ljava/util/function/Function;)Ljava/util/function/Function;"/>
+		<method name="identity()Ljava/util/function/Function;"/>
+	</class>
+	<class name="java/util/function/IntBinaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsInt(II)I"/>
+	</class>
+	<class name="java/util/function/IntConsumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(I)V"/>
+		<method name="andThen(Ljava/util/function/IntConsumer;)Ljava/util/function/IntConsumer;"/>
+	</class>
+	<class name="java/util/function/IntFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="apply(I)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/function/IntPredicate" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="and(Ljava/util/function/IntPredicate;)Ljava/util/function/IntPredicate;"/>
+		<method name="negate()Ljava/util/function/IntPredicate;"/>
+		<method name="or(Ljava/util/function/IntPredicate;)Ljava/util/function/IntPredicate;"/>
+		<method name="test(I)Z"/>
+	</class>
+	<class name="java/util/function/IntSupplier" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getAsInt()I"/>
+	</class>
+	<class name="java/util/function/IntToDoubleFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsDouble(I)D"/>
+	</class>
+	<class name="java/util/function/IntToLongFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsLong(I)J"/>
+	</class>
+	<class name="java/util/function/IntUnaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="andThen(Ljava/util/function/IntUnaryOperator;)Ljava/util/function/IntUnaryOperator;"/>
+		<method name="applyAsInt(I)I"/>
+		<method name="compose(Ljava/util/function/IntUnaryOperator;)Ljava/util/function/IntUnaryOperator;"/>
+		<method name="identity()Ljava/util/function/IntUnaryOperator;"/>
+	</class>
+	<class name="java/util/function/LongBinaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsLong(JJ)J"/>
+	</class>
+	<class name="java/util/function/LongConsumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(J)V"/>
+		<method name="andThen(Ljava/util/function/LongConsumer;)Ljava/util/function/LongConsumer;"/>
+	</class>
+	<class name="java/util/function/LongFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="apply(J)Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/function/LongPredicate" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="and(Ljava/util/function/LongPredicate;)Ljava/util/function/LongPredicate;"/>
+		<method name="negate()Ljava/util/function/LongPredicate;"/>
+		<method name="or(Ljava/util/function/LongPredicate;)Ljava/util/function/LongPredicate;"/>
+		<method name="test(J)Z"/>
+	</class>
+	<class name="java/util/function/LongSupplier" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="getAsLong()J"/>
+	</class>
+	<class name="java/util/function/LongToDoubleFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsDouble(J)D"/>
+	</class>
+	<class name="java/util/function/LongToIntFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsInt(J)I"/>
+	</class>
+	<class name="java/util/function/LongUnaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="andThen(Ljava/util/function/LongUnaryOperator;)Ljava/util/function/LongUnaryOperator;"/>
+		<method name="applyAsLong(J)J"/>
+		<method name="compose(Ljava/util/function/LongUnaryOperator;)Ljava/util/function/LongUnaryOperator;"/>
+		<method name="identity()Ljava/util/function/LongUnaryOperator;"/>
+	</class>
+	<class name="java/util/function/ObjDoubleConsumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/lang/Object;D)V"/>
+	</class>
+	<class name="java/util/function/ObjIntConsumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/lang/Object;I)V"/>
+	</class>
+	<class name="java/util/function/ObjLongConsumer" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accept(Ljava/lang/Object;J)V"/>
+	</class>
+	<class name="java/util/function/Predicate" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="and(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;"/>
+		<method name="isEqual(Ljava/lang/Object;)Ljava/util/function/Predicate;"/>
+		<method name="negate()Ljava/util/function/Predicate;"/>
+		<method name="or(Ljava/util/function/Predicate;)Ljava/util/function/Predicate;"/>
+		<method name="test(Ljava/lang/Object;)Z"/>
+	</class>
+	<class name="java/util/function/Supplier" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="get()Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/function/ToDoubleBiFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsDouble(Ljava/lang/Object;Ljava/lang/Object;)D"/>
+	</class>
+	<class name="java/util/function/ToDoubleFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsDouble(Ljava/lang/Object;)D"/>
+	</class>
+	<class name="java/util/function/ToIntBiFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsInt(Ljava/lang/Object;Ljava/lang/Object;)I"/>
+	</class>
+	<class name="java/util/function/ToIntFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsInt(Ljava/lang/Object;)I"/>
+	</class>
+	<class name="java/util/function/ToLongBiFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsLong(Ljava/lang/Object;Ljava/lang/Object;)J"/>
+	</class>
+	<class name="java/util/function/ToLongFunction" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="applyAsLong(Ljava/lang/Object;)J"/>
+	</class>
+	<class name="java/util/function/UnaryOperator" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/Function"/>
+		<method name="identity()Ljava/util/function/UnaryOperator;"/>
+	</class>
+	<class name="java/util/jar/Attributes" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="java/util/Map"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(Ljava/util/jar/Attributes;)V"/>
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getValue(Ljava/util/jar/Attributes$Name;)Ljava/lang/String;"/>
+		<method name="putValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="map"/>
+	</class>
+	<class name="java/util/jar/Attributes$Name" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<field name="CLASS_PATH"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="EXTENSION_INSTALLATION" deprecated="26"/>
+		<field name="EXTENSION_LIST"/>
+		<field name="EXTENSION_NAME"/>
+		<field name="IMPLEMENTATION_TITLE"/>
+		<field name="IMPLEMENTATION_URL" deprecated="26"/>
+		<field name="IMPLEMENTATION_VENDOR"/>
+		<field name="IMPLEMENTATION_VENDOR_ID" deprecated="26"/>
+		<field name="IMPLEMENTATION_VERSION"/>
+		<field name="MAIN_CLASS"/>
+		<field name="MANIFEST_VERSION"/>
+		<field name="SEALED"/>
+		<field name="SIGNATURE_VERSION"/>
+		<field name="SPECIFICATION_TITLE"/>
+		<field name="SPECIFICATION_VENDOR"/>
+		<field name="SPECIFICATION_VERSION"/>
+	</class>
+	<class name="java/util/jar/JarEntry" since="1">
+		<extends name="java/util/zip/ZipEntry"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/util/jar/JarEntry;)V"/>
+		<method name="&lt;init>(Ljava/util/zip/ZipEntry;)V"/>
+		<method name="getAttributes()Ljava/util/jar/Attributes;"/>
+		<method name="getCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getCodeSigners()[Ljava/security/CodeSigner;"/>
+		<field name="CENATT" since="28"/>
+		<field name="CENATX" since="28"/>
+		<field name="CENCOM" since="28"/>
+		<field name="CENCRC" since="28"/>
+		<field name="CENDSK" since="28"/>
+		<field name="CENEXT" since="28"/>
+		<field name="CENFLG" since="28"/>
+		<field name="CENHDR" since="28"/>
+		<field name="CENHOW" since="28"/>
+		<field name="CENLEN" since="28"/>
+		<field name="CENNAM" since="28"/>
+		<field name="CENOFF" since="28"/>
+		<field name="CENSIG" since="28"/>
+		<field name="CENSIZ" since="28"/>
+		<field name="CENTIM" since="28"/>
+		<field name="CENVEM" since="28"/>
+		<field name="CENVER" since="28"/>
+		<field name="ENDCOM" since="28"/>
+		<field name="ENDHDR" since="28"/>
+		<field name="ENDOFF" since="28"/>
+		<field name="ENDSIG" since="28"/>
+		<field name="ENDSIZ" since="28"/>
+		<field name="ENDSUB" since="28"/>
+		<field name="ENDTOT" since="28"/>
+		<field name="EXTCRC" since="28"/>
+		<field name="EXTHDR" since="28"/>
+		<field name="EXTLEN" since="28"/>
+		<field name="EXTSIG" since="28"/>
+		<field name="EXTSIZ" since="28"/>
+		<field name="LOCCRC" since="28"/>
+		<field name="LOCEXT" since="28"/>
+		<field name="LOCFLG" since="28"/>
+		<field name="LOCHDR" since="28"/>
+		<field name="LOCHOW" since="28"/>
+		<field name="LOCLEN" since="28"/>
+		<field name="LOCNAM" since="28"/>
+		<field name="LOCSIG" since="28"/>
+		<field name="LOCSIZ" since="28"/>
+		<field name="LOCTIM" since="28"/>
+		<field name="LOCVER" since="28"/>
+	</class>
+	<class name="java/util/jar/JarException" since="1">
+		<extends name="java/util/zip/ZipException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/jar/JarFile" since="1">
+		<extends name="java/util/zip/ZipFile"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;Z)V"/>
+		<method name="&lt;init>(Ljava/io/File;ZI)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+		<method name="getJarEntry(Ljava/lang/String;)Ljava/util/jar/JarEntry;"/>
+		<method name="getManifest()Ljava/util/jar/Manifest;"/>
+		<field name="CENATT" since="28"/>
+		<field name="CENATX" since="28"/>
+		<field name="CENCOM" since="28"/>
+		<field name="CENCRC" since="28"/>
+		<field name="CENDSK" since="28"/>
+		<field name="CENEXT" since="28"/>
+		<field name="CENFLG" since="28"/>
+		<field name="CENHDR" since="28"/>
+		<field name="CENHOW" since="28"/>
+		<field name="CENLEN" since="28"/>
+		<field name="CENNAM" since="28"/>
+		<field name="CENOFF" since="28"/>
+		<field name="CENSIG" since="28"/>
+		<field name="CENSIZ" since="28"/>
+		<field name="CENTIM" since="28"/>
+		<field name="CENVEM" since="28"/>
+		<field name="CENVER" since="28"/>
+		<field name="ENDCOM" since="28"/>
+		<field name="ENDHDR" since="28"/>
+		<field name="ENDOFF" since="28"/>
+		<field name="ENDSIG" since="28"/>
+		<field name="ENDSIZ" since="28"/>
+		<field name="ENDSUB" since="28"/>
+		<field name="ENDTOT" since="28"/>
+		<field name="EXTCRC" since="28"/>
+		<field name="EXTHDR" since="28"/>
+		<field name="EXTLEN" since="28"/>
+		<field name="EXTSIG" since="28"/>
+		<field name="EXTSIZ" since="28"/>
+		<field name="LOCCRC" since="28"/>
+		<field name="LOCEXT" since="28"/>
+		<field name="LOCFLG" since="28"/>
+		<field name="LOCHDR" since="28"/>
+		<field name="LOCHOW" since="28"/>
+		<field name="LOCLEN" since="28"/>
+		<field name="LOCNAM" since="28"/>
+		<field name="LOCSIG" since="28"/>
+		<field name="LOCSIZ" since="28"/>
+		<field name="LOCTIM" since="28"/>
+		<field name="LOCVER" since="28"/>
+		<field name="MANIFEST_NAME"/>
+	</class>
+	<class name="java/util/jar/JarInputStream" since="1">
+		<extends name="java/util/zip/ZipInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Z)V"/>
+		<method name="getManifest()Ljava/util/jar/Manifest;"/>
+		<method name="getNextJarEntry()Ljava/util/jar/JarEntry;"/>
+		<field name="CENATT" since="28"/>
+		<field name="CENATX" since="28"/>
+		<field name="CENCOM" since="28"/>
+		<field name="CENCRC" since="28"/>
+		<field name="CENDSK" since="28"/>
+		<field name="CENEXT" since="28"/>
+		<field name="CENFLG" since="28"/>
+		<field name="CENHDR" since="28"/>
+		<field name="CENHOW" since="28"/>
+		<field name="CENLEN" since="28"/>
+		<field name="CENNAM" since="28"/>
+		<field name="CENOFF" since="28"/>
+		<field name="CENSIG" since="28"/>
+		<field name="CENSIZ" since="28"/>
+		<field name="CENTIM" since="28"/>
+		<field name="CENVEM" since="28"/>
+		<field name="CENVER" since="28"/>
+		<field name="ENDCOM" since="28"/>
+		<field name="ENDHDR" since="28"/>
+		<field name="ENDOFF" since="28"/>
+		<field name="ENDSIG" since="28"/>
+		<field name="ENDSIZ" since="28"/>
+		<field name="ENDSUB" since="28"/>
+		<field name="ENDTOT" since="28"/>
+		<field name="EXTCRC" since="28"/>
+		<field name="EXTHDR" since="28"/>
+		<field name="EXTLEN" since="28"/>
+		<field name="EXTSIG" since="28"/>
+		<field name="EXTSIZ" since="28"/>
+		<field name="LOCCRC" since="28"/>
+		<field name="LOCEXT" since="28"/>
+		<field name="LOCFLG" since="28"/>
+		<field name="LOCHDR" since="28"/>
+		<field name="LOCHOW" since="28"/>
+		<field name="LOCLEN" since="28"/>
+		<field name="LOCNAM" since="28"/>
+		<field name="LOCSIG" since="28"/>
+		<field name="LOCSIZ" since="28"/>
+		<field name="LOCTIM" since="28"/>
+		<field name="LOCVER" since="28"/>
+	</class>
+	<class name="java/util/jar/JarOutputStream" since="1">
+		<extends name="java/util/zip/ZipOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/jar/Manifest;)V"/>
+		<field name="CENATT" since="28"/>
+		<field name="CENATX" since="28"/>
+		<field name="CENCOM" since="28"/>
+		<field name="CENCRC" since="28"/>
+		<field name="CENDSK" since="28"/>
+		<field name="CENEXT" since="28"/>
+		<field name="CENFLG" since="28"/>
+		<field name="CENHDR" since="28"/>
+		<field name="CENHOW" since="28"/>
+		<field name="CENLEN" since="28"/>
+		<field name="CENNAM" since="28"/>
+		<field name="CENOFF" since="28"/>
+		<field name="CENSIG" since="28"/>
+		<field name="CENSIZ" since="28"/>
+		<field name="CENTIM" since="28"/>
+		<field name="CENVEM" since="28"/>
+		<field name="CENVER" since="28"/>
+		<field name="ENDCOM" since="28"/>
+		<field name="ENDHDR" since="28"/>
+		<field name="ENDOFF" since="28"/>
+		<field name="ENDSIG" since="28"/>
+		<field name="ENDSIZ" since="28"/>
+		<field name="ENDSUB" since="28"/>
+		<field name="ENDTOT" since="28"/>
+		<field name="EXTCRC" since="28"/>
+		<field name="EXTHDR" since="28"/>
+		<field name="EXTLEN" since="28"/>
+		<field name="EXTSIG" since="28"/>
+		<field name="EXTSIZ" since="28"/>
+		<field name="LOCCRC" since="28"/>
+		<field name="LOCEXT" since="28"/>
+		<field name="LOCFLG" since="28"/>
+		<field name="LOCHDR" since="28"/>
+		<field name="LOCHOW" since="28"/>
+		<field name="LOCLEN" since="28"/>
+		<field name="LOCNAM" since="28"/>
+		<field name="LOCSIG" since="28"/>
+		<field name="LOCSIZ" since="28"/>
+		<field name="LOCTIM" since="28"/>
+		<field name="LOCVER" since="28"/>
+	</class>
+	<class name="java/util/jar/Manifest" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/util/jar/Manifest;)V"/>
+		<method name="clear()V"/>
+		<method name="getAttributes(Ljava/lang/String;)Ljava/util/jar/Attributes;"/>
+		<method name="getEntries()Ljava/util/Map;"/>
+		<method name="getMainAttributes()Ljava/util/jar/Attributes;"/>
+		<method name="read(Ljava/io/InputStream;)V"/>
+		<method name="write(Ljava/io/OutputStream;)V"/>
+	</class>
+	<class name="java/util/jar/Pack200" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="newPacker()Ljava/util/jar/Pack200$Packer;"/>
+		<method name="newUnpacker()Ljava/util/jar/Pack200$Unpacker;"/>
+	</class>
+	<class name="java/util/jar/Pack200$Packer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
+		<method name="pack(Ljava/util/jar/JarFile;Ljava/io/OutputStream;)V"/>
+		<method name="pack(Ljava/util/jar/JarInputStream;Ljava/io/OutputStream;)V"/>
+		<method name="properties()Ljava/util/SortedMap;"/>
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
+		<field name="CLASS_ATTRIBUTE_PFX"/>
+		<field name="CODE_ATTRIBUTE_PFX"/>
+		<field name="DEFLATE_HINT"/>
+		<field name="EFFORT"/>
+		<field name="ERROR"/>
+		<field name="FALSE"/>
+		<field name="FIELD_ATTRIBUTE_PFX"/>
+		<field name="KEEP"/>
+		<field name="KEEP_FILE_ORDER"/>
+		<field name="LATEST"/>
+		<field name="METHOD_ATTRIBUTE_PFX"/>
+		<field name="MODIFICATION_TIME"/>
+		<field name="PASS"/>
+		<field name="PASS_FILE_PFX"/>
+		<field name="PROGRESS"/>
+		<field name="SEGMENT_LIMIT"/>
+		<field name="STRIP"/>
+		<field name="TRUE"/>
+		<field name="UNKNOWN_ATTRIBUTE"/>
+	</class>
+	<class name="java/util/jar/Pack200$Unpacker" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
+		<method name="properties()Ljava/util/SortedMap;"/>
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
+		<method name="unpack(Ljava/io/File;Ljava/util/jar/JarOutputStream;)V"/>
+		<method name="unpack(Ljava/io/InputStream;Ljava/util/jar/JarOutputStream;)V"/>
+		<field name="DEFLATE_HINT"/>
+		<field name="FALSE"/>
+		<field name="KEEP"/>
+		<field name="PROGRESS"/>
+		<field name="TRUE"/>
+	</class>
+	<class name="java/util/logging/ConsoleHandler" since="1">
+		<extends name="java/util/logging/StreamHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/logging/ErrorManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="error(Ljava/lang/String;Ljava/lang/Exception;I)V"/>
+		<field name="CLOSE_FAILURE"/>
+		<field name="FLUSH_FAILURE"/>
+		<field name="FORMAT_FAILURE"/>
+		<field name="GENERIC_FAILURE"/>
+		<field name="OPEN_FAILURE"/>
+		<field name="WRITE_FAILURE"/>
+	</class>
+	<class name="java/util/logging/FileHandler" since="1">
+		<extends name="java/util/logging/StreamHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;II)V"/>
+		<method name="&lt;init>(Ljava/lang/String;IIZ)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+	</class>
+	<class name="java/util/logging/Filter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="isLoggable(Ljava/util/logging/LogRecord;)Z"/>
+	</class>
+	<class name="java/util/logging/Formatter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(Ljava/util/logging/LogRecord;)Ljava/lang/String;"/>
+		<method name="formatMessage(Ljava/util/logging/LogRecord;)Ljava/lang/String;"/>
+		<method name="getHead(Ljava/util/logging/Handler;)Ljava/lang/String;"/>
+		<method name="getTail(Ljava/util/logging/Handler;)Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/logging/Handler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="close()V"/>
+		<method name="flush()V"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+		<method name="getErrorManager()Ljava/util/logging/ErrorManager;"/>
+		<method name="getFilter()Ljava/util/logging/Filter;"/>
+		<method name="getFormatter()Ljava/util/logging/Formatter;"/>
+		<method name="getLevel()Ljava/util/logging/Level;"/>
+		<method name="isLoggable(Ljava/util/logging/LogRecord;)Z"/>
+		<method name="publish(Ljava/util/logging/LogRecord;)V"/>
+		<method name="reportError(Ljava/lang/String;Ljava/lang/Exception;I)V"/>
+		<method name="setEncoding(Ljava/lang/String;)V"/>
+		<method name="setErrorManager(Ljava/util/logging/ErrorManager;)V"/>
+		<method name="setFilter(Ljava/util/logging/Filter;)V"/>
+		<method name="setFormatter(Ljava/util/logging/Formatter;)V"/>
+		<method name="setLevel(Ljava/util/logging/Level;)V"/>
+	</class>
+	<class name="java/util/logging/Level" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="getLocalizedName()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getResourceBundleName()Ljava/lang/String;"/>
+		<method name="intValue()I"/>
+		<method name="parse(Ljava/lang/String;)Ljava/util/logging/Level;"/>
+		<field name="ALL"/>
+		<field name="CONFIG"/>
+		<field name="FINE"/>
+		<field name="FINER"/>
+		<field name="FINEST"/>
+		<field name="INFO"/>
+		<field name="OFF"/>
+		<field name="SEVERE"/>
+		<field name="WARNING"/>
+	</class>
+	<class name="java/util/logging/LogManager" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addLogger(Ljava/util/logging/Logger;)Z"/>
+		<method name="addPropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
+		<method name="checkAccess()V"/>
+		<method name="getLogManager()Ljava/util/logging/LogManager;"/>
+		<method name="getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;"/>
+		<method name="getLoggerNames()Ljava/util/Enumeration;"/>
+		<method name="getLoggingMXBean()Ljava/util/logging/LoggingMXBean;" since="3"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="readConfiguration()V"/>
+		<method name="readConfiguration(Ljava/io/InputStream;)V"/>
+		<method name="removePropertyChangeListener(Ljava/beans/PropertyChangeListener;)V" since="3" deprecated="26"/>
+		<method name="reset()V"/>
+		<field name="LOGGING_MXBEAN_NAME"/>
+	</class>
+	<class name="java/util/logging/LogRecord" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/util/logging/Level;Ljava/lang/String;)V"/>
+		<method name="getLevel()Ljava/util/logging/Level;"/>
+		<method name="getLoggerName()Ljava/lang/String;"/>
+		<method name="getMessage()Ljava/lang/String;"/>
+		<method name="getMillis()J"/>
+		<method name="getParameters()[Ljava/lang/Object;"/>
+		<method name="getResourceBundle()Ljava/util/ResourceBundle;"/>
+		<method name="getResourceBundleName()Ljava/lang/String;"/>
+		<method name="getSequenceNumber()J"/>
+		<method name="getSourceClassName()Ljava/lang/String;"/>
+		<method name="getSourceMethodName()Ljava/lang/String;"/>
+		<method name="getThreadID()I"/>
+		<method name="getThrown()Ljava/lang/Throwable;"/>
+		<method name="setLevel(Ljava/util/logging/Level;)V"/>
+		<method name="setLoggerName(Ljava/lang/String;)V"/>
+		<method name="setMessage(Ljava/lang/String;)V"/>
+		<method name="setMillis(J)V"/>
+		<method name="setParameters([Ljava/lang/Object;)V"/>
+		<method name="setResourceBundle(Ljava/util/ResourceBundle;)V"/>
+		<method name="setResourceBundleName(Ljava/lang/String;)V"/>
+		<method name="setSequenceNumber(J)V"/>
+		<method name="setSourceClassName(Ljava/lang/String;)V"/>
+		<method name="setSourceMethodName(Ljava/lang/String;)V"/>
+		<method name="setThreadID(I)V"/>
+		<method name="setThrown(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/logging/Logger" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="addHandler(Ljava/util/logging/Handler;)V"/>
+		<method name="config(Ljava/lang/String;)V"/>
+		<method name="config(Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="entering(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="entering(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="entering(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V"/>
+		<method name="exiting(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="exiting(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="fine(Ljava/lang/String;)V"/>
+		<method name="fine(Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="finer(Ljava/lang/String;)V"/>
+		<method name="finer(Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="finest(Ljava/lang/String;)V"/>
+		<method name="finest(Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="getAnonymousLogger()Ljava/util/logging/Logger;"/>
+		<method name="getAnonymousLogger(Ljava/lang/String;)Ljava/util/logging/Logger;"/>
+		<method name="getFilter()Ljava/util/logging/Filter;"/>
+		<method name="getGlobal()Ljava/util/logging/Logger;" since="19"/>
+		<method name="getHandlers()[Ljava/util/logging/Handler;"/>
+		<method name="getLevel()Ljava/util/logging/Level;"/>
+		<method name="getLogger(Ljava/lang/String;)Ljava/util/logging/Logger;"/>
+		<method name="getLogger(Ljava/lang/String;Ljava/lang/String;)Ljava/util/logging/Logger;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getParent()Ljava/util/logging/Logger;"/>
+		<method name="getResourceBundle()Ljava/util/ResourceBundle;"/>
+		<method name="getResourceBundleName()Ljava/lang/String;"/>
+		<method name="getUseParentHandlers()Z"/>
+		<method name="info(Ljava/lang/String;)V"/>
+		<method name="info(Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="isLoggable(Ljava/util/logging/Level;)Z"/>
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;)V"/>
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V"/>
+		<method name="log(Ljava/util/logging/Level;Ljava/lang/Throwable;Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="log(Ljava/util/logging/Level;Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="log(Ljava/util/logging/LogRecord;)V"/>
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V"/>
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="logp(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="26"/>
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V" deprecated="26"/>
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V" deprecated="26"/>
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V" deprecated="26"/>
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/ResourceBundle;Ljava/lang/String;Ljava/lang/Throwable;)V" since="26"/>
+		<method name="logrb(Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/String;Ljava/util/ResourceBundle;Ljava/lang/String;[Ljava/lang/Object;)V" since="26"/>
+		<method name="removeHandler(Ljava/util/logging/Handler;)V"/>
+		<method name="setFilter(Ljava/util/logging/Filter;)V"/>
+		<method name="setLevel(Ljava/util/logging/Level;)V"/>
+		<method name="setParent(Ljava/util/logging/Logger;)V"/>
+		<method name="setResourceBundle(Ljava/util/ResourceBundle;)V" since="26"/>
+		<method name="setUseParentHandlers(Z)V"/>
+		<method name="severe(Ljava/lang/String;)V"/>
+		<method name="severe(Ljava/util/function/Supplier;)V" since="26"/>
+		<method name="throwing(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="warning(Ljava/lang/String;)V"/>
+		<method name="warning(Ljava/util/function/Supplier;)V" since="26"/>
+		<field name="GLOBAL_LOGGER_NAME" since="9"/>
+		<field name="global" deprecated="15"/>
+	</class>
+	<class name="java/util/logging/LoggingMXBean" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getLoggerLevel(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getLoggerNames()Ljava/util/List;"/>
+		<method name="getParentLoggerName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="setLoggerLevel(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/logging/LoggingPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/logging/MemoryHandler" since="1">
+		<extends name="java/util/logging/Handler"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/util/logging/Handler;ILjava/util/logging/Level;)V"/>
+		<method name="getPushLevel()Ljava/util/logging/Level;"/>
+		<method name="push()V"/>
+		<method name="setPushLevel(Ljava/util/logging/Level;)V"/>
+	</class>
+	<class name="java/util/logging/SimpleFormatter" since="1">
+		<extends name="java/util/logging/Formatter"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/logging/SocketHandler" since="1">
+		<extends name="java/util/logging/StreamHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+	</class>
+	<class name="java/util/logging/StreamHandler" since="1">
+		<extends name="java/util/logging/Handler"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/logging/Formatter;)V"/>
+		<method name="setOutputStream(Ljava/io/OutputStream;)V"/>
+	</class>
+	<class name="java/util/logging/XMLFormatter" since="1">
+		<extends name="java/util/logging/Formatter"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="java/util/prefs/AbstractPreferences" since="1">
+		<extends name="java/util/prefs/Preferences"/>
+		<method name="&lt;init>(Ljava/util/prefs/AbstractPreferences;Ljava/lang/String;)V"/>
+		<method name="cachedChildren()[Ljava/util/prefs/AbstractPreferences;"/>
+		<method name="childSpi(Ljava/lang/String;)Ljava/util/prefs/AbstractPreferences;"/>
+		<method name="childrenNamesSpi()[Ljava/lang/String;"/>
+		<method name="flushSpi()V"/>
+		<method name="getChild(Ljava/lang/String;)Ljava/util/prefs/AbstractPreferences;"/>
+		<method name="getSpi(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isRemoved()Z"/>
+		<method name="keysSpi()[Ljava/lang/String;"/>
+		<method name="putSpi(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="removeNodeSpi()V"/>
+		<method name="removeSpi(Ljava/lang/String;)V"/>
+		<method name="syncSpi()V"/>
+		<field name="lock"/>
+		<field name="newNode"/>
+	</class>
+	<class name="java/util/prefs/BackingStoreException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/prefs/InvalidPreferencesFormatException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="java/util/prefs/NodeChangeEvent" since="1">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljava/util/prefs/Preferences;Ljava/util/prefs/Preferences;)V"/>
+		<method name="getChild()Ljava/util/prefs/Preferences;"/>
+		<method name="getParent()Ljava/util/prefs/Preferences;"/>
+	</class>
+	<class name="java/util/prefs/NodeChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="childAdded(Ljava/util/prefs/NodeChangeEvent;)V"/>
+		<method name="childRemoved(Ljava/util/prefs/NodeChangeEvent;)V"/>
+	</class>
+	<class name="java/util/prefs/PreferenceChangeEvent" since="1">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljava/util/prefs/Preferences;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getKey()Ljava/lang/String;"/>
+		<method name="getNewValue()Ljava/lang/String;"/>
+		<method name="getNode()Ljava/util/prefs/Preferences;"/>
+	</class>
+	<class name="java/util/prefs/PreferenceChangeListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="preferenceChange(Ljava/util/prefs/PreferenceChangeEvent;)V"/>
+	</class>
+	<class name="java/util/prefs/Preferences" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="absolutePath()Ljava/lang/String;"/>
+		<method name="addNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V"/>
+		<method name="addPreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V"/>
+		<method name="childrenNames()[Ljava/lang/String;"/>
+		<method name="clear()V"/>
+		<method name="exportNode(Ljava/io/OutputStream;)V"/>
+		<method name="exportSubtree(Ljava/io/OutputStream;)V"/>
+		<method name="flush()V"/>
+		<method name="get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getBoolean(Ljava/lang/String;Z)Z"/>
+		<method name="getByteArray(Ljava/lang/String;[B)[B"/>
+		<method name="getDouble(Ljava/lang/String;D)D"/>
+		<method name="getFloat(Ljava/lang/String;F)F"/>
+		<method name="getInt(Ljava/lang/String;I)I"/>
+		<method name="getLong(Ljava/lang/String;J)J"/>
+		<method name="importPreferences(Ljava/io/InputStream;)V"/>
+		<method name="isUserNode()Z"/>
+		<method name="keys()[Ljava/lang/String;"/>
+		<method name="name()Ljava/lang/String;"/>
+		<method name="node(Ljava/lang/String;)Ljava/util/prefs/Preferences;"/>
+		<method name="nodeExists(Ljava/lang/String;)Z"/>
+		<method name="parent()Ljava/util/prefs/Preferences;"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="putBoolean(Ljava/lang/String;Z)V"/>
+		<method name="putByteArray(Ljava/lang/String;[B)V"/>
+		<method name="putDouble(Ljava/lang/String;D)V"/>
+		<method name="putFloat(Ljava/lang/String;F)V"/>
+		<method name="putInt(Ljava/lang/String;I)V"/>
+		<method name="putLong(Ljava/lang/String;J)V"/>
+		<method name="remove(Ljava/lang/String;)V"/>
+		<method name="removeNode()V"/>
+		<method name="removeNodeChangeListener(Ljava/util/prefs/NodeChangeListener;)V"/>
+		<method name="removePreferenceChangeListener(Ljava/util/prefs/PreferenceChangeListener;)V"/>
+		<method name="sync()V"/>
+		<method name="systemNodeForPackage(Ljava/lang/Class;)Ljava/util/prefs/Preferences;"/>
+		<method name="systemRoot()Ljava/util/prefs/Preferences;"/>
+		<method name="userNodeForPackage(Ljava/lang/Class;)Ljava/util/prefs/Preferences;"/>
+		<method name="userRoot()Ljava/util/prefs/Preferences;"/>
+		<field name="MAX_KEY_LENGTH"/>
+		<field name="MAX_NAME_LENGTH"/>
+		<field name="MAX_VALUE_LENGTH"/>
+	</class>
+	<class name="java/util/prefs/PreferencesFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="systemRoot()Ljava/util/prefs/Preferences;"/>
+		<method name="userRoot()Ljava/util/prefs/Preferences;"/>
+	</class>
+	<class name="java/util/regex/MatchResult" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="end()I"/>
+		<method name="end(I)I"/>
+		<method name="group()Ljava/lang/String;"/>
+		<method name="group(I)Ljava/lang/String;"/>
+		<method name="groupCount()I"/>
+		<method name="start()I"/>
+		<method name="start(I)I"/>
+	</class>
+	<class name="java/util/regex/Matcher" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/regex/MatchResult"/>
+		<method name="appendReplacement(Ljava/lang/StringBuffer;Ljava/lang/String;)Ljava/util/regex/Matcher;"/>
+		<method name="appendTail(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;"/>
+		<method name="end(Ljava/lang/String;)I" since="26"/>
+		<method name="find()Z"/>
+		<method name="find(I)Z"/>
+		<method name="group(Ljava/lang/String;)Ljava/lang/String;" since="26"/>
+		<method name="hasAnchoringBounds()Z"/>
+		<method name="hasTransparentBounds()Z"/>
+		<method name="hitEnd()Z"/>
+		<method name="lookingAt()Z"/>
+		<method name="matches()Z"/>
+		<method name="pattern()Ljava/util/regex/Pattern;"/>
+		<method name="quoteReplacement(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="region(II)Ljava/util/regex/Matcher;"/>
+		<method name="regionEnd()I"/>
+		<method name="regionStart()I"/>
+		<method name="replaceAll(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="replaceFirst(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="requireEnd()Z"/>
+		<method name="reset()Ljava/util/regex/Matcher;"/>
+		<method name="reset(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;"/>
+		<method name="start(Ljava/lang/String;)I" since="26"/>
+		<method name="toMatchResult()Ljava/util/regex/MatchResult;"/>
+		<method name="useAnchoringBounds(Z)Ljava/util/regex/Matcher;"/>
+		<method name="usePattern(Ljava/util/regex/Pattern;)Ljava/util/regex/Matcher;"/>
+		<method name="useTransparentBounds(Z)Ljava/util/regex/Matcher;"/>
+	</class>
+	<class name="java/util/regex/Pattern" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="asPredicate()Ljava/util/function/Predicate;" since="24"/>
+		<method name="compile(Ljava/lang/String;)Ljava/util/regex/Pattern;"/>
+		<method name="compile(Ljava/lang/String;I)Ljava/util/regex/Pattern;"/>
+		<method name="flags()I"/>
+		<method name="matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;"/>
+		<method name="matches(Ljava/lang/String;Ljava/lang/CharSequence;)Z"/>
+		<method name="pattern()Ljava/lang/String;"/>
+		<method name="quote(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="split(Ljava/lang/CharSequence;)[Ljava/lang/String;"/>
+		<method name="split(Ljava/lang/CharSequence;I)[Ljava/lang/String;"/>
+		<method name="splitAsStream(Ljava/lang/CharSequence;)Ljava/util/stream/Stream;" since="24"/>
+		<field name="CANON_EQ"/>
+		<field name="CASE_INSENSITIVE"/>
+		<field name="COMMENTS"/>
+		<field name="DOTALL"/>
+		<field name="LITERAL"/>
+		<field name="MULTILINE"/>
+		<field name="UNICODE_CASE"/>
+		<field name="UNICODE_CHARACTER_CLASS" since="24"/>
+		<field name="UNIX_LINES"/>
+	</class>
+	<class name="java/util/regex/PatternSyntaxException" since="1">
+		<extends name="java/lang/IllegalArgumentException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;I)V"/>
+		<method name="getDescription()Ljava/lang/String;"/>
+		<method name="getIndex()I"/>
+		<method name="getPattern()Ljava/lang/String;"/>
+	</class>
+	<class name="java/util/stream/BaseStream" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/AutoCloseable"/>
+		<method name="isParallel()Z"/>
+		<method name="iterator()Ljava/util/Iterator;"/>
+		<method name="onClose(Ljava/lang/Runnable;)Ljava/util/stream/BaseStream;"/>
+		<method name="parallel()Ljava/util/stream/BaseStream;"/>
+		<method name="sequential()Ljava/util/stream/BaseStream;"/>
+		<method name="spliterator()Ljava/util/Spliterator;"/>
+		<method name="unordered()Ljava/util/stream/BaseStream;"/>
+	</class>
+	<class name="java/util/stream/Collector" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="accumulator()Ljava/util/function/BiConsumer;"/>
+		<method name="characteristics()Ljava/util/Set;"/>
+		<method name="combiner()Ljava/util/function/BinaryOperator;"/>
+		<method name="finisher()Ljava/util/function/Function;"/>
+		<method name="of(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;Ljava/util/function/Function;[Ljava/util/stream/Collector$Characteristics;)Ljava/util/stream/Collector;"/>
+		<method name="of(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BinaryOperator;[Ljava/util/stream/Collector$Characteristics;)Ljava/util/stream/Collector;"/>
+		<method name="supplier()Ljava/util/function/Supplier;"/>
+	</class>
+	<class name="java/util/stream/Collector$Characteristics" since="24">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljava/util/stream/Collector$Characteristics;"/>
+		<method name="values()[Ljava/util/stream/Collector$Characteristics;"/>
+		<field name="CONCURRENT"/>
+		<field name="IDENTITY_FINISH"/>
+		<field name="UNORDERED"/>
+	</class>
+	<class name="java/util/stream/Collectors" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="averagingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;"/>
+		<method name="averagingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;"/>
+		<method name="averagingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;"/>
+		<method name="collectingAndThen(Ljava/util/stream/Collector;Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
+		<method name="counting()Ljava/util/stream/Collector;"/>
+		<method name="groupingBy(Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
+		<method name="groupingBy(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
+		<method name="groupingBy(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
+		<method name="groupingByConcurrent(Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
+		<method name="groupingByConcurrent(Ljava/util/function/Function;Ljava/util/function/Supplier;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
+		<method name="groupingByConcurrent(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
+		<method name="joining()Ljava/util/stream/Collector;"/>
+		<method name="joining(Ljava/lang/CharSequence;)Ljava/util/stream/Collector;"/>
+		<method name="joining(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/stream/Collector;"/>
+		<method name="mapping(Ljava/util/function/Function;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
+		<method name="maxBy(Ljava/util/Comparator;)Ljava/util/stream/Collector;"/>
+		<method name="minBy(Ljava/util/Comparator;)Ljava/util/stream/Collector;"/>
+		<method name="partitioningBy(Ljava/util/function/Predicate;)Ljava/util/stream/Collector;"/>
+		<method name="partitioningBy(Ljava/util/function/Predicate;Ljava/util/stream/Collector;)Ljava/util/stream/Collector;"/>
+		<method name="reducing(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
+		<method name="reducing(Ljava/lang/Object;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
+		<method name="reducing(Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
+		<method name="summarizingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;"/>
+		<method name="summarizingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;"/>
+		<method name="summarizingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;"/>
+		<method name="summingDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/Collector;"/>
+		<method name="summingInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/Collector;"/>
+		<method name="summingLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/Collector;"/>
+		<method name="toCollection(Ljava/util/function/Supplier;)Ljava/util/stream/Collector;"/>
+		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
+		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
+		<method name="toConcurrentMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;"/>
+		<method name="toList()Ljava/util/stream/Collector;"/>
+		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/util/stream/Collector;"/>
+		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;)Ljava/util/stream/Collector;"/>
+		<method name="toMap(Ljava/util/function/Function;Ljava/util/function/Function;Ljava/util/function/BinaryOperator;Ljava/util/function/Supplier;)Ljava/util/stream/Collector;"/>
+		<method name="toSet()Ljava/util/stream/Collector;"/>
+	</class>
+	<class name="java/util/stream/DoubleStream" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/stream/BaseStream"/>
+		<method name="allMatch(Ljava/util/function/DoublePredicate;)Z"/>
+		<method name="anyMatch(Ljava/util/function/DoublePredicate;)Z"/>
+		<method name="average()Ljava/util/OptionalDouble;"/>
+		<method name="boxed()Ljava/util/stream/Stream;"/>
+		<method name="builder()Ljava/util/stream/DoubleStream$Builder;"/>
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjDoubleConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
+		<method name="concat(Ljava/util/stream/DoubleStream;Ljava/util/stream/DoubleStream;)Ljava/util/stream/DoubleStream;"/>
+		<method name="count()J"/>
+		<method name="distinct()Ljava/util/stream/DoubleStream;"/>
+		<method name="empty()Ljava/util/stream/DoubleStream;"/>
+		<method name="filter(Ljava/util/function/DoublePredicate;)Ljava/util/stream/DoubleStream;"/>
+		<method name="findAny()Ljava/util/OptionalDouble;"/>
+		<method name="findFirst()Ljava/util/OptionalDouble;"/>
+		<method name="flatMap(Ljava/util/function/DoubleFunction;)Ljava/util/stream/DoubleStream;"/>
+		<method name="forEach(Ljava/util/function/DoubleConsumer;)V"/>
+		<method name="forEachOrdered(Ljava/util/function/DoubleConsumer;)V"/>
+		<method name="generate(Ljava/util/function/DoubleSupplier;)Ljava/util/stream/DoubleStream;"/>
+		<method name="iterate(DLjava/util/function/DoubleUnaryOperator;)Ljava/util/stream/DoubleStream;"/>
+		<method name="iterator()Ljava/util/PrimitiveIterator$OfDouble;"/>
+		<method name="limit(J)Ljava/util/stream/DoubleStream;"/>
+		<method name="map(Ljava/util/function/DoubleUnaryOperator;)Ljava/util/stream/DoubleStream;"/>
+		<method name="mapToInt(Ljava/util/function/DoubleToIntFunction;)Ljava/util/stream/IntStream;"/>
+		<method name="mapToLong(Ljava/util/function/DoubleToLongFunction;)Ljava/util/stream/LongStream;"/>
+		<method name="mapToObj(Ljava/util/function/DoubleFunction;)Ljava/util/stream/Stream;"/>
+		<method name="max()Ljava/util/OptionalDouble;"/>
+		<method name="min()Ljava/util/OptionalDouble;"/>
+		<method name="noneMatch(Ljava/util/function/DoublePredicate;)Z"/>
+		<method name="of(D)Ljava/util/stream/DoubleStream;"/>
+		<method name="of([D)Ljava/util/stream/DoubleStream;"/>
+		<method name="parallel()Ljava/util/stream/DoubleStream;"/>
+		<method name="peek(Ljava/util/function/DoubleConsumer;)Ljava/util/stream/DoubleStream;"/>
+		<method name="reduce(DLjava/util/function/DoubleBinaryOperator;)D"/>
+		<method name="reduce(Ljava/util/function/DoubleBinaryOperator;)Ljava/util/OptionalDouble;"/>
+		<method name="sequential()Ljava/util/stream/DoubleStream;"/>
+		<method name="skip(J)Ljava/util/stream/DoubleStream;"/>
+		<method name="sorted()Ljava/util/stream/DoubleStream;"/>
+		<method name="spliterator()Ljava/util/Spliterator$OfDouble;"/>
+		<method name="sum()D"/>
+		<method name="summaryStatistics()Ljava/util/DoubleSummaryStatistics;"/>
+		<method name="toArray()[D"/>
+	</class>
+	<class name="java/util/stream/DoubleStream$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/DoubleConsumer"/>
+		<method name="add(D)Ljava/util/stream/DoubleStream$Builder;"/>
+		<method name="build()Ljava/util/stream/DoubleStream;"/>
+	</class>
+	<class name="java/util/stream/IntStream" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/stream/BaseStream"/>
+		<method name="allMatch(Ljava/util/function/IntPredicate;)Z"/>
+		<method name="anyMatch(Ljava/util/function/IntPredicate;)Z"/>
+		<method name="asDoubleStream()Ljava/util/stream/DoubleStream;"/>
+		<method name="asLongStream()Ljava/util/stream/LongStream;"/>
+		<method name="average()Ljava/util/OptionalDouble;"/>
+		<method name="boxed()Ljava/util/stream/Stream;"/>
+		<method name="builder()Ljava/util/stream/IntStream$Builder;"/>
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjIntConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
+		<method name="concat(Ljava/util/stream/IntStream;Ljava/util/stream/IntStream;)Ljava/util/stream/IntStream;"/>
+		<method name="count()J"/>
+		<method name="distinct()Ljava/util/stream/IntStream;"/>
+		<method name="empty()Ljava/util/stream/IntStream;"/>
+		<method name="filter(Ljava/util/function/IntPredicate;)Ljava/util/stream/IntStream;"/>
+		<method name="findAny()Ljava/util/OptionalInt;"/>
+		<method name="findFirst()Ljava/util/OptionalInt;"/>
+		<method name="flatMap(Ljava/util/function/IntFunction;)Ljava/util/stream/IntStream;"/>
+		<method name="forEach(Ljava/util/function/IntConsumer;)V"/>
+		<method name="forEachOrdered(Ljava/util/function/IntConsumer;)V"/>
+		<method name="generate(Ljava/util/function/IntSupplier;)Ljava/util/stream/IntStream;"/>
+		<method name="iterate(ILjava/util/function/IntUnaryOperator;)Ljava/util/stream/IntStream;"/>
+		<method name="iterator()Ljava/util/PrimitiveIterator$OfInt;"/>
+		<method name="limit(J)Ljava/util/stream/IntStream;"/>
+		<method name="map(Ljava/util/function/IntUnaryOperator;)Ljava/util/stream/IntStream;"/>
+		<method name="mapToDouble(Ljava/util/function/IntToDoubleFunction;)Ljava/util/stream/DoubleStream;"/>
+		<method name="mapToLong(Ljava/util/function/IntToLongFunction;)Ljava/util/stream/LongStream;"/>
+		<method name="mapToObj(Ljava/util/function/IntFunction;)Ljava/util/stream/Stream;"/>
+		<method name="max()Ljava/util/OptionalInt;"/>
+		<method name="min()Ljava/util/OptionalInt;"/>
+		<method name="noneMatch(Ljava/util/function/IntPredicate;)Z"/>
+		<method name="of(I)Ljava/util/stream/IntStream;"/>
+		<method name="of([I)Ljava/util/stream/IntStream;"/>
+		<method name="parallel()Ljava/util/stream/IntStream;"/>
+		<method name="peek(Ljava/util/function/IntConsumer;)Ljava/util/stream/IntStream;"/>
+		<method name="range(II)Ljava/util/stream/IntStream;"/>
+		<method name="rangeClosed(II)Ljava/util/stream/IntStream;"/>
+		<method name="reduce(ILjava/util/function/IntBinaryOperator;)I"/>
+		<method name="reduce(Ljava/util/function/IntBinaryOperator;)Ljava/util/OptionalInt;"/>
+		<method name="sequential()Ljava/util/stream/IntStream;"/>
+		<method name="skip(J)Ljava/util/stream/IntStream;"/>
+		<method name="sorted()Ljava/util/stream/IntStream;"/>
+		<method name="spliterator()Ljava/util/Spliterator$OfInt;"/>
+		<method name="sum()I"/>
+		<method name="summaryStatistics()Ljava/util/IntSummaryStatistics;"/>
+		<method name="toArray()[I"/>
+	</class>
+	<class name="java/util/stream/IntStream$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/IntConsumer"/>
+		<method name="add(I)Ljava/util/stream/IntStream$Builder;"/>
+		<method name="build()Ljava/util/stream/IntStream;"/>
+	</class>
+	<class name="java/util/stream/LongStream" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/stream/BaseStream"/>
+		<method name="allMatch(Ljava/util/function/LongPredicate;)Z"/>
+		<method name="anyMatch(Ljava/util/function/LongPredicate;)Z"/>
+		<method name="asDoubleStream()Ljava/util/stream/DoubleStream;"/>
+		<method name="average()Ljava/util/OptionalDouble;"/>
+		<method name="boxed()Ljava/util/stream/Stream;"/>
+		<method name="builder()Ljava/util/stream/LongStream$Builder;"/>
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/ObjLongConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
+		<method name="concat(Ljava/util/stream/LongStream;Ljava/util/stream/LongStream;)Ljava/util/stream/LongStream;"/>
+		<method name="count()J"/>
+		<method name="distinct()Ljava/util/stream/LongStream;"/>
+		<method name="empty()Ljava/util/stream/LongStream;"/>
+		<method name="filter(Ljava/util/function/LongPredicate;)Ljava/util/stream/LongStream;"/>
+		<method name="findAny()Ljava/util/OptionalLong;"/>
+		<method name="findFirst()Ljava/util/OptionalLong;"/>
+		<method name="flatMap(Ljava/util/function/LongFunction;)Ljava/util/stream/LongStream;"/>
+		<method name="forEach(Ljava/util/function/LongConsumer;)V"/>
+		<method name="forEachOrdered(Ljava/util/function/LongConsumer;)V"/>
+		<method name="generate(Ljava/util/function/LongSupplier;)Ljava/util/stream/LongStream;"/>
+		<method name="iterate(JLjava/util/function/LongUnaryOperator;)Ljava/util/stream/LongStream;"/>
+		<method name="iterator()Ljava/util/PrimitiveIterator$OfLong;"/>
+		<method name="limit(J)Ljava/util/stream/LongStream;"/>
+		<method name="map(Ljava/util/function/LongUnaryOperator;)Ljava/util/stream/LongStream;"/>
+		<method name="mapToDouble(Ljava/util/function/LongToDoubleFunction;)Ljava/util/stream/DoubleStream;"/>
+		<method name="mapToInt(Ljava/util/function/LongToIntFunction;)Ljava/util/stream/IntStream;"/>
+		<method name="mapToObj(Ljava/util/function/LongFunction;)Ljava/util/stream/Stream;"/>
+		<method name="max()Ljava/util/OptionalLong;"/>
+		<method name="min()Ljava/util/OptionalLong;"/>
+		<method name="noneMatch(Ljava/util/function/LongPredicate;)Z"/>
+		<method name="of(J)Ljava/util/stream/LongStream;"/>
+		<method name="of([J)Ljava/util/stream/LongStream;"/>
+		<method name="parallel()Ljava/util/stream/LongStream;"/>
+		<method name="peek(Ljava/util/function/LongConsumer;)Ljava/util/stream/LongStream;"/>
+		<method name="range(JJ)Ljava/util/stream/LongStream;"/>
+		<method name="rangeClosed(JJ)Ljava/util/stream/LongStream;"/>
+		<method name="reduce(JLjava/util/function/LongBinaryOperator;)J"/>
+		<method name="reduce(Ljava/util/function/LongBinaryOperator;)Ljava/util/OptionalLong;"/>
+		<method name="sequential()Ljava/util/stream/LongStream;"/>
+		<method name="skip(J)Ljava/util/stream/LongStream;"/>
+		<method name="sorted()Ljava/util/stream/LongStream;"/>
+		<method name="spliterator()Ljava/util/Spliterator$OfLong;"/>
+		<method name="sum()J"/>
+		<method name="summaryStatistics()Ljava/util/LongSummaryStatistics;"/>
+		<method name="toArray()[J"/>
+	</class>
+	<class name="java/util/stream/LongStream$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/LongConsumer"/>
+		<method name="add(J)Ljava/util/stream/LongStream$Builder;"/>
+		<method name="build()Ljava/util/stream/LongStream;"/>
+	</class>
+	<class name="java/util/stream/Stream" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/stream/BaseStream"/>
+		<method name="allMatch(Ljava/util/function/Predicate;)Z"/>
+		<method name="anyMatch(Ljava/util/function/Predicate;)Z"/>
+		<method name="builder()Ljava/util/stream/Stream$Builder;"/>
+		<method name="collect(Ljava/util/function/Supplier;Ljava/util/function/BiConsumer;Ljava/util/function/BiConsumer;)Ljava/lang/Object;"/>
+		<method name="collect(Ljava/util/stream/Collector;)Ljava/lang/Object;"/>
+		<method name="concat(Ljava/util/stream/Stream;Ljava/util/stream/Stream;)Ljava/util/stream/Stream;"/>
+		<method name="count()J"/>
+		<method name="distinct()Ljava/util/stream/Stream;"/>
+		<method name="empty()Ljava/util/stream/Stream;"/>
+		<method name="filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream;"/>
+		<method name="findAny()Ljava/util/Optional;"/>
+		<method name="findFirst()Ljava/util/Optional;"/>
+		<method name="flatMap(Ljava/util/function/Function;)Ljava/util/stream/Stream;"/>
+		<method name="flatMapToDouble(Ljava/util/function/Function;)Ljava/util/stream/DoubleStream;"/>
+		<method name="flatMapToInt(Ljava/util/function/Function;)Ljava/util/stream/IntStream;"/>
+		<method name="flatMapToLong(Ljava/util/function/Function;)Ljava/util/stream/LongStream;"/>
+		<method name="forEach(Ljava/util/function/Consumer;)V"/>
+		<method name="forEachOrdered(Ljava/util/function/Consumer;)V"/>
+		<method name="generate(Ljava/util/function/Supplier;)Ljava/util/stream/Stream;"/>
+		<method name="iterate(Ljava/lang/Object;Ljava/util/function/UnaryOperator;)Ljava/util/stream/Stream;"/>
+		<method name="limit(J)Ljava/util/stream/Stream;"/>
+		<method name="map(Ljava/util/function/Function;)Ljava/util/stream/Stream;"/>
+		<method name="mapToDouble(Ljava/util/function/ToDoubleFunction;)Ljava/util/stream/DoubleStream;"/>
+		<method name="mapToInt(Ljava/util/function/ToIntFunction;)Ljava/util/stream/IntStream;"/>
+		<method name="mapToLong(Ljava/util/function/ToLongFunction;)Ljava/util/stream/LongStream;"/>
+		<method name="max(Ljava/util/Comparator;)Ljava/util/Optional;"/>
+		<method name="min(Ljava/util/Comparator;)Ljava/util/Optional;"/>
+		<method name="noneMatch(Ljava/util/function/Predicate;)Z"/>
+		<method name="of(Ljava/lang/Object;)Ljava/util/stream/Stream;"/>
+		<method name="of([Ljava/lang/Object;)Ljava/util/stream/Stream;"/>
+		<method name="peek(Ljava/util/function/Consumer;)Ljava/util/stream/Stream;"/>
+		<method name="reduce(Ljava/lang/Object;Ljava/util/function/BiFunction;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;"/>
+		<method name="reduce(Ljava/lang/Object;Ljava/util/function/BinaryOperator;)Ljava/lang/Object;"/>
+		<method name="reduce(Ljava/util/function/BinaryOperator;)Ljava/util/Optional;"/>
+		<method name="skip(J)Ljava/util/stream/Stream;"/>
+		<method name="sorted()Ljava/util/stream/Stream;"/>
+		<method name="sorted(Ljava/util/Comparator;)Ljava/util/stream/Stream;"/>
+		<method name="toArray()[Ljava/lang/Object;"/>
+		<method name="toArray(Ljava/util/function/IntFunction;)[Ljava/lang/Object;"/>
+	</class>
+	<class name="java/util/stream/Stream$Builder" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/function/Consumer"/>
+		<method name="add(Ljava/lang/Object;)Ljava/util/stream/Stream$Builder;"/>
+		<method name="build()Ljava/util/stream/Stream;"/>
+	</class>
+	<class name="java/util/stream/StreamSupport" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="doubleStream(Ljava/util/Spliterator$OfDouble;Z)Ljava/util/stream/DoubleStream;"/>
+		<method name="doubleStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/DoubleStream;"/>
+		<method name="intStream(Ljava/util/Spliterator$OfInt;Z)Ljava/util/stream/IntStream;"/>
+		<method name="intStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/IntStream;"/>
+		<method name="longStream(Ljava/util/Spliterator$OfLong;Z)Ljava/util/stream/LongStream;"/>
+		<method name="longStream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/LongStream;"/>
+		<method name="stream(Ljava/util/Spliterator;Z)Ljava/util/stream/Stream;"/>
+		<method name="stream(Ljava/util/function/Supplier;IZ)Ljava/util/stream/Stream;"/>
+	</class>
+	<class name="java/util/zip/Adler32" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/zip/Checksum"/>
+		<method name="&lt;init>()V"/>
+		<method name="update(Ljava/nio/ByteBuffer;)V" since="26"/>
+		<method name="update([B)V"/>
+	</class>
+	<class name="java/util/zip/CRC32" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/zip/Checksum"/>
+		<method name="&lt;init>()V"/>
+		<method name="update(Ljava/nio/ByteBuffer;)V" since="26"/>
+		<method name="update([B)V"/>
+	</class>
+	<class name="java/util/zip/CheckedInputStream" since="1">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Checksum;)V"/>
+		<method name="getChecksum()Ljava/util/zip/Checksum;"/>
+	</class>
+	<class name="java/util/zip/CheckedOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Checksum;)V"/>
+		<method name="getChecksum()Ljava/util/zip/Checksum;"/>
+	</class>
+	<class name="java/util/zip/Checksum" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getValue()J"/>
+		<method name="reset()V"/>
+		<method name="update(I)V"/>
+		<method name="update([BII)V"/>
+	</class>
+	<class name="java/util/zip/DataFormatException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/zip/Deflater" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(IZ)V"/>
+		<method name="deflate([B)I"/>
+		<method name="deflate([BII)I"/>
+		<method name="deflate([BIII)I" since="19"/>
+		<method name="end()V"/>
+		<method name="finish()V"/>
+		<method name="finished()Z"/>
+		<method name="getAdler()I"/>
+		<method name="getBytesRead()J"/>
+		<method name="getBytesWritten()J"/>
+		<method name="getTotalIn()I"/>
+		<method name="getTotalOut()I"/>
+		<method name="needsInput()Z"/>
+		<method name="reset()V"/>
+		<method name="setDictionary([B)V"/>
+		<method name="setDictionary([BII)V"/>
+		<method name="setInput([B)V"/>
+		<method name="setInput([BII)V"/>
+		<method name="setLevel(I)V"/>
+		<method name="setStrategy(I)V"/>
+		<field name="BEST_COMPRESSION"/>
+		<field name="BEST_SPEED"/>
+		<field name="DEFAULT_COMPRESSION"/>
+		<field name="DEFAULT_STRATEGY"/>
+		<field name="DEFLATED"/>
+		<field name="FILTERED"/>
+		<field name="FULL_FLUSH" since="19"/>
+		<field name="HUFFMAN_ONLY"/>
+		<field name="NO_COMPRESSION"/>
+		<field name="NO_FLUSH" since="19"/>
+		<field name="SYNC_FLUSH" since="19"/>
+	</class>
+	<class name="java/util/zip/DeflaterInputStream" since="9">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Deflater;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Deflater;I)V"/>
+		<field name="buf"/>
+		<field name="def"/>
+	</class>
+	<class name="java/util/zip/DeflaterOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;I)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;IZ)V" since="19"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Deflater;Z)V" since="19"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Z)V" since="19"/>
+		<method name="deflate()V"/>
+		<method name="finish()V"/>
+		<field name="buf"/>
+		<field name="def"/>
+	</class>
+	<class name="java/util/zip/GZIPInputStream" since="1">
+		<extends name="java/util/zip/InflaterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;I)V"/>
+		<field name="GZIP_MAGIC"/>
+		<field name="crc"/>
+		<field name="eos"/>
+	</class>
+	<class name="java/util/zip/GZIPOutputStream" since="1">
+		<extends name="java/util/zip/DeflaterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;I)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;IZ)V" since="19"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Z)V" since="19"/>
+		<field name="crc"/>
+	</class>
+	<class name="java/util/zip/Inflater" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Z)V"/>
+		<method name="end()V"/>
+		<method name="finished()Z"/>
+		<method name="getAdler()I"/>
+		<method name="getBytesRead()J"/>
+		<method name="getBytesWritten()J"/>
+		<method name="getRemaining()I"/>
+		<method name="getTotalIn()I"/>
+		<method name="getTotalOut()I"/>
+		<method name="inflate([B)I"/>
+		<method name="inflate([BII)I"/>
+		<method name="needsDictionary()Z"/>
+		<method name="needsInput()Z"/>
+		<method name="reset()V"/>
+		<method name="setDictionary([B)V"/>
+		<method name="setDictionary([BII)V"/>
+		<method name="setInput([B)V"/>
+		<method name="setInput([BII)V"/>
+	</class>
+	<class name="java/util/zip/InflaterInputStream" since="1">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V"/>
+		<method name="fill()V"/>
+		<field name="buf"/>
+		<field name="closed" since="24" deprecated="29"/>
+		<field name="inf"/>
+		<field name="len"/>
+	</class>
+	<class name="java/util/zip/InflaterOutputStream" since="9">
+		<extends name="java/io/FilterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Inflater;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/util/zip/Inflater;I)V"/>
+		<method name="finish()V"/>
+		<field name="buf"/>
+		<field name="inf"/>
+	</class>
+	<class name="java/util/zip/ZipEntry" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/util/zip/ZipEntry;)V"/>
+		<method name="getComment()Ljava/lang/String;"/>
+		<method name="getCompressedSize()J"/>
+		<method name="getCrc()J"/>
+		<method name="getCreationTime()Ljava/nio/file/attribute/FileTime;" since="26"/>
+		<method name="getExtra()[B"/>
+		<method name="getLastAccessTime()Ljava/nio/file/attribute/FileTime;" since="26"/>
+		<method name="getLastModifiedTime()Ljava/nio/file/attribute/FileTime;" since="26"/>
+		<method name="getMethod()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSize()J"/>
+		<method name="getTime()J"/>
+		<method name="isDirectory()Z"/>
+		<method name="setComment(Ljava/lang/String;)V"/>
+		<method name="setCompressedSize(J)V"/>
+		<method name="setCrc(J)V"/>
+		<method name="setCreationTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26"/>
+		<method name="setExtra([B)V"/>
+		<method name="setLastAccessTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26"/>
+		<method name="setLastModifiedTime(Ljava/nio/file/attribute/FileTime;)Ljava/util/zip/ZipEntry;" since="26"/>
+		<method name="setMethod(I)V"/>
+		<method name="setSize(J)V"/>
+		<method name="setTime(J)V"/>
+		<field name="CENATT" since="21"/>
+		<field name="CENATX" since="21"/>
+		<field name="CENCOM" since="21"/>
+		<field name="CENCRC" since="21"/>
+		<field name="CENDSK" since="21"/>
+		<field name="CENEXT" since="21"/>
+		<field name="CENFLG" since="21"/>
+		<field name="CENHDR" since="21"/>
+		<field name="CENHOW" since="21"/>
+		<field name="CENLEN" since="21"/>
+		<field name="CENNAM" since="21"/>
+		<field name="CENOFF" since="21"/>
+		<field name="CENSIG" since="21"/>
+		<field name="CENSIZ" since="21"/>
+		<field name="CENTIM" since="21"/>
+		<field name="CENVEM" since="21"/>
+		<field name="CENVER" since="21"/>
+		<field name="DEFLATED"/>
+		<field name="ENDCOM" since="21"/>
+		<field name="ENDHDR" since="21"/>
+		<field name="ENDOFF" since="21"/>
+		<field name="ENDSIG" since="21"/>
+		<field name="ENDSIZ" since="21"/>
+		<field name="ENDSUB" since="21"/>
+		<field name="ENDTOT" since="21"/>
+		<field name="EXTCRC" since="21"/>
+		<field name="EXTHDR" since="21"/>
+		<field name="EXTLEN" since="21"/>
+		<field name="EXTSIG" since="21"/>
+		<field name="EXTSIZ" since="21"/>
+		<field name="LOCCRC" since="21"/>
+		<field name="LOCEXT" since="21"/>
+		<field name="LOCFLG" since="21"/>
+		<field name="LOCHDR" since="21"/>
+		<field name="LOCHOW" since="21"/>
+		<field name="LOCLEN" since="21"/>
+		<field name="LOCNAM" since="21"/>
+		<field name="LOCSIG" since="21"/>
+		<field name="LOCSIZ" since="21"/>
+		<field name="LOCTIM" since="21"/>
+		<field name="LOCVER" since="21"/>
+		<field name="STORED"/>
+	</class>
+	<class name="java/util/zip/ZipError" since="9">
+		<extends name="java/lang/InternalError"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/zip/ZipException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="java/util/zip/ZipFile" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Closeable" since="19"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/File;I)V"/>
+		<method name="&lt;init>(Ljava/io/File;ILjava/nio/charset/Charset;)V" since="24"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/nio/charset/Charset;)V" since="24"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/nio/charset/Charset;)V" since="24"/>
+		<method name="close()V"/>
+		<method name="entries()Ljava/util/Enumeration;"/>
+		<method name="getComment()Ljava/lang/String;" since="19"/>
+		<method name="getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;"/>
+		<method name="getInputStream(Ljava/util/zip/ZipEntry;)Ljava/io/InputStream;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="size()I"/>
+		<method name="stream()Ljava/util/stream/Stream;" since="26"/>
+		<field name="CENATT" since="21"/>
+		<field name="CENATX" since="21"/>
+		<field name="CENCOM" since="21"/>
+		<field name="CENCRC" since="21"/>
+		<field name="CENDSK" since="21"/>
+		<field name="CENEXT" since="21"/>
+		<field name="CENFLG" since="21"/>
+		<field name="CENHDR" since="21"/>
+		<field name="CENHOW" since="21"/>
+		<field name="CENLEN" since="21"/>
+		<field name="CENNAM" since="21"/>
+		<field name="CENOFF" since="21"/>
+		<field name="CENSIG" since="21"/>
+		<field name="CENSIZ" since="21"/>
+		<field name="CENTIM" since="21"/>
+		<field name="CENVEM" since="21"/>
+		<field name="CENVER" since="21"/>
+		<field name="ENDCOM" since="21"/>
+		<field name="ENDHDR" since="21"/>
+		<field name="ENDOFF" since="21"/>
+		<field name="ENDSIG" since="21"/>
+		<field name="ENDSIZ" since="21"/>
+		<field name="ENDSUB" since="21"/>
+		<field name="ENDTOT" since="21"/>
+		<field name="EXTCRC" since="21"/>
+		<field name="EXTHDR" since="21"/>
+		<field name="EXTLEN" since="21"/>
+		<field name="EXTSIG" since="21"/>
+		<field name="EXTSIZ" since="21"/>
+		<field name="LOCCRC" since="21"/>
+		<field name="LOCEXT" since="21"/>
+		<field name="LOCFLG" since="21"/>
+		<field name="LOCHDR" since="21"/>
+		<field name="LOCHOW" since="21"/>
+		<field name="LOCLEN" since="21"/>
+		<field name="LOCNAM" since="21"/>
+		<field name="LOCSIG" since="21"/>
+		<field name="LOCSIZ" since="21"/>
+		<field name="LOCTIM" since="21"/>
+		<field name="LOCVER" since="21"/>
+		<field name="OPEN_DELETE"/>
+		<field name="OPEN_READ"/>
+	</class>
+	<class name="java/util/zip/ZipInputStream" since="1">
+		<extends name="java/util/zip/InflaterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V" since="24"/>
+		<method name="closeEntry()V"/>
+		<method name="createZipEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;"/>
+		<method name="getNextEntry()Ljava/util/zip/ZipEntry;"/>
+		<field name="CENATT" since="21"/>
+		<field name="CENATX" since="21"/>
+		<field name="CENCOM" since="21"/>
+		<field name="CENCRC" since="21"/>
+		<field name="CENDSK" since="21"/>
+		<field name="CENEXT" since="21"/>
+		<field name="CENFLG" since="21"/>
+		<field name="CENHDR" since="21"/>
+		<field name="CENHOW" since="21"/>
+		<field name="CENLEN" since="21"/>
+		<field name="CENNAM" since="21"/>
+		<field name="CENOFF" since="21"/>
+		<field name="CENSIG" since="21"/>
+		<field name="CENSIZ" since="21"/>
+		<field name="CENTIM" since="21"/>
+		<field name="CENVEM" since="21"/>
+		<field name="CENVER" since="21"/>
+		<field name="ENDCOM" since="21"/>
+		<field name="ENDHDR" since="21"/>
+		<field name="ENDOFF" since="21"/>
+		<field name="ENDSIG" since="21"/>
+		<field name="ENDSIZ" since="21"/>
+		<field name="ENDSUB" since="21"/>
+		<field name="ENDTOT" since="21"/>
+		<field name="EXTCRC" since="21"/>
+		<field name="EXTHDR" since="21"/>
+		<field name="EXTLEN" since="21"/>
+		<field name="EXTSIG" since="21"/>
+		<field name="EXTSIZ" since="21"/>
+		<field name="LOCCRC" since="21"/>
+		<field name="LOCEXT" since="21"/>
+		<field name="LOCFLG" since="21"/>
+		<field name="LOCHDR" since="21"/>
+		<field name="LOCHOW" since="21"/>
+		<field name="LOCLEN" since="21"/>
+		<field name="LOCNAM" since="21"/>
+		<field name="LOCSIG" since="21"/>
+		<field name="LOCSIZ" since="21"/>
+		<field name="LOCTIM" since="21"/>
+		<field name="LOCVER" since="21"/>
+	</class>
+	<class name="java/util/zip/ZipOutputStream" since="1">
+		<extends name="java/util/zip/DeflaterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljava/nio/charset/Charset;)V" since="24"/>
+		<method name="closeEntry()V"/>
+		<method name="putNextEntry(Ljava/util/zip/ZipEntry;)V"/>
+		<method name="setComment(Ljava/lang/String;)V"/>
+		<method name="setLevel(I)V"/>
+		<method name="setMethod(I)V"/>
+		<field name="CENATT" since="21"/>
+		<field name="CENATX" since="21"/>
+		<field name="CENCOM" since="21"/>
+		<field name="CENCRC" since="21"/>
+		<field name="CENDSK" since="21"/>
+		<field name="CENEXT" since="21"/>
+		<field name="CENFLG" since="21"/>
+		<field name="CENHDR" since="21"/>
+		<field name="CENHOW" since="21"/>
+		<field name="CENLEN" since="21"/>
+		<field name="CENNAM" since="21"/>
+		<field name="CENOFF" since="21"/>
+		<field name="CENSIG" since="21"/>
+		<field name="CENSIZ" since="21"/>
+		<field name="CENTIM" since="21"/>
+		<field name="CENVEM" since="21"/>
+		<field name="CENVER" since="21"/>
+		<field name="DEFLATED"/>
+		<field name="ENDCOM" since="21"/>
+		<field name="ENDHDR" since="21"/>
+		<field name="ENDOFF" since="21"/>
+		<field name="ENDSIG" since="21"/>
+		<field name="ENDSIZ" since="21"/>
+		<field name="ENDSUB" since="21"/>
+		<field name="ENDTOT" since="21"/>
+		<field name="EXTCRC" since="21"/>
+		<field name="EXTHDR" since="21"/>
+		<field name="EXTLEN" since="21"/>
+		<field name="EXTSIG" since="21"/>
+		<field name="EXTSIZ" since="21"/>
+		<field name="LOCCRC" since="21"/>
+		<field name="LOCEXT" since="21"/>
+		<field name="LOCFLG" since="21"/>
+		<field name="LOCHDR" since="21"/>
+		<field name="LOCHOW" since="21"/>
+		<field name="LOCLEN" since="21"/>
+		<field name="LOCNAM" since="21"/>
+		<field name="LOCSIG" since="21"/>
+		<field name="LOCSIZ" since="21"/>
+		<field name="LOCTIM" since="21"/>
+		<field name="LOCVER" since="21"/>
+		<field name="STORED"/>
+	</class>
+	<class name="javax/crypto/AEADBadTagException" since="19">
+		<extends name="javax/crypto/BadPaddingException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/crypto/BadPaddingException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/crypto/Cipher" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/crypto/CipherSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="doFinal()[B"/>
+		<method name="doFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
+		<method name="doFinal([B)[B"/>
+		<method name="doFinal([BI)I"/>
+		<method name="doFinal([BII)[B"/>
+		<method name="doFinal([BII[B)I"/>
+		<method name="doFinal([BII[BI)I"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getBlockSize()I"/>
+		<method name="getExemptionMechanism()Ljavax/crypto/ExemptionMechanism;"/>
+		<method name="getIV()[B"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/Cipher;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Cipher;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher;"/>
+		<method name="getMaxAllowedKeyLength(Ljava/lang/String;)I"/>
+		<method name="getMaxAllowedParameterSpec(Ljava/lang/String;)Ljava/security/spec/AlgorithmParameterSpec;"/>
+		<method name="getOutputSize(I)I"/>
+		<method name="getParameters()Ljava/security/AlgorithmParameters;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(ILjava/security/Key;)V"/>
+		<method name="init(ILjava/security/Key;Ljava/security/AlgorithmParameters;)V"/>
+		<method name="init(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V"/>
+		<method name="init(ILjava/security/Key;Ljava/security/SecureRandom;)V"/>
+		<method name="init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="init(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+		<method name="init(ILjava/security/cert/Certificate;)V"/>
+		<method name="init(ILjava/security/cert/Certificate;Ljava/security/SecureRandom;)V"/>
+		<method name="unwrap([BLjava/lang/String;I)Ljava/security/Key;"/>
+		<method name="update(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
+		<method name="update([B)[B"/>
+		<method name="update([BII)[B"/>
+		<method name="update([BII[B)I"/>
+		<method name="update([BII[BI)I"/>
+		<method name="updateAAD(Ljava/nio/ByteBuffer;)V" since="19"/>
+		<method name="updateAAD([B)V" since="19"/>
+		<method name="updateAAD([BII)V" since="19"/>
+		<method name="wrap(Ljava/security/Key;)[B"/>
+		<field name="DECRYPT_MODE"/>
+		<field name="ENCRYPT_MODE"/>
+		<field name="PRIVATE_KEY"/>
+		<field name="PUBLIC_KEY"/>
+		<field name="SECRET_KEY"/>
+		<field name="UNWRAP_MODE"/>
+		<field name="WRAP_MODE"/>
+	</class>
+	<class name="javax/crypto/CipherInputStream" since="1">
+		<extends name="java/io/FilterInputStream"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljavax/crypto/Cipher;)V"/>
+	</class>
+	<class name="javax/crypto/CipherOutputStream" since="1">
+		<extends name="java/io/FilterOutputStream"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;Ljavax/crypto/Cipher;)V"/>
+	</class>
+	<class name="javax/crypto/CipherSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineDoFinal(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
+		<method name="engineDoFinal([BII)[B"/>
+		<method name="engineDoFinal([BII[BI)I"/>
+		<method name="engineGetBlockSize()I"/>
+		<method name="engineGetIV()[B"/>
+		<method name="engineGetKeySize(Ljava/security/Key;)I"/>
+		<method name="engineGetOutputSize(I)I"/>
+		<method name="engineGetParameters()Ljava/security/AlgorithmParameters;"/>
+		<method name="engineInit(ILjava/security/Key;Ljava/security/AlgorithmParameters;Ljava/security/SecureRandom;)V"/>
+		<method name="engineInit(ILjava/security/Key;Ljava/security/SecureRandom;)V"/>
+		<method name="engineInit(ILjava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+		<method name="engineSetMode(Ljava/lang/String;)V"/>
+		<method name="engineSetPadding(Ljava/lang/String;)V"/>
+		<method name="engineUnwrap([BLjava/lang/String;I)Ljava/security/Key;"/>
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)I"/>
+		<method name="engineUpdate([BII)[B"/>
+		<method name="engineUpdate([BII[BI)I"/>
+		<method name="engineUpdateAAD(Ljava/nio/ByteBuffer;)V" since="19"/>
+		<method name="engineUpdateAAD([BII)V" since="19"/>
+		<method name="engineWrap(Ljava/security/Key;)[B"/>
+	</class>
+	<class name="javax/crypto/EncryptedPrivateKeyInfo" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;[B)V"/>
+		<method name="&lt;init>(Ljava/security/AlgorithmParameters;[B)V"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="getAlgName()Ljava/lang/String;"/>
+		<method name="getAlgParameters()Ljava/security/AlgorithmParameters;"/>
+		<method name="getEncoded()[B"/>
+		<method name="getEncryptedData()[B"/>
+		<method name="getKeySpec(Ljava/security/Key;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
+		<method name="getKeySpec(Ljava/security/Key;Ljava/lang/String;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
+		<method name="getKeySpec(Ljava/security/Key;Ljava/security/Provider;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
+		<method name="getKeySpec(Ljavax/crypto/Cipher;)Ljava/security/spec/PKCS8EncodedKeySpec;"/>
+	</class>
+	<class name="javax/crypto/ExemptionMechanism" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/crypto/ExemptionMechanismSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="genExemptionBlob()[B"/>
+		<method name="genExemptionBlob([B)I"/>
+		<method name="genExemptionBlob([BI)I"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/ExemptionMechanism;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/ExemptionMechanism;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/ExemptionMechanism;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getOutputSize(I)I"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(Ljava/security/Key;)V"/>
+		<method name="init(Ljava/security/Key;Ljava/security/AlgorithmParameters;)V"/>
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="isCryptoAllowed(Ljava/security/Key;)Z"/>
+	</class>
+	<class name="javax/crypto/ExemptionMechanismException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/crypto/ExemptionMechanismSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGenExemptionBlob()[B"/>
+		<method name="engineGenExemptionBlob([BI)I"/>
+		<method name="engineGetOutputSize(I)I"/>
+		<method name="engineInit(Ljava/security/Key;)V"/>
+		<method name="engineInit(Ljava/security/Key;Ljava/security/AlgorithmParameters;)V"/>
+		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+	</class>
+	<class name="javax/crypto/IllegalBlockSizeException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/crypto/KeyAgreement" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/crypto/KeyAgreementSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="doPhase(Ljava/security/Key;Z)Ljava/security/Key;"/>
+		<method name="generateSecret()[B"/>
+		<method name="generateSecret(Ljava/lang/String;)Ljavax/crypto/SecretKey;"/>
+		<method name="generateSecret([BI)I"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/KeyAgreement;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/KeyAgreement;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/KeyAgreement;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(Ljava/security/Key;)V"/>
+		<method name="init(Ljava/security/Key;Ljava/security/SecureRandom;)V"/>
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="javax/crypto/KeyAgreementSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineDoPhase(Ljava/security/Key;Z)Ljava/security/Key;"/>
+		<method name="engineGenerateSecret()[B"/>
+		<method name="engineGenerateSecret(Ljava/lang/String;)Ljavax/crypto/SecretKey;"/>
+		<method name="engineGenerateSecret([BI)I"/>
+		<method name="engineInit(Ljava/security/Key;Ljava/security/SecureRandom;)V"/>
+		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="javax/crypto/KeyGenerator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/crypto/KeyGeneratorSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="generateKey()Ljavax/crypto/SecretKey;"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/KeyGenerator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/KeyGenerator;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/KeyGenerator;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(I)V"/>
+		<method name="init(ILjava/security/SecureRandom;)V"/>
+		<method name="init(Ljava/security/SecureRandom;)V"/>
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="init(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="javax/crypto/KeyGeneratorSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGenerateKey()Ljavax/crypto/SecretKey;"/>
+		<method name="engineInit(ILjava/security/SecureRandom;)V"/>
+		<method name="engineInit(Ljava/security/SecureRandom;)V"/>
+		<method name="engineInit(Ljava/security/spec/AlgorithmParameterSpec;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="javax/crypto/Mac" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljavax/crypto/MacSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="doFinal()[B"/>
+		<method name="doFinal([B)[B"/>
+		<method name="doFinal([BI)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/Mac;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Mac;"/>
+		<method name="getMacLength()I"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(Ljava/security/Key;)V"/>
+		<method name="init(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="reset()V"/>
+		<method name="update(B)V"/>
+		<method name="update(Ljava/nio/ByteBuffer;)V"/>
+		<method name="update([B)V"/>
+		<method name="update([BII)V"/>
+	</class>
+	<class name="javax/crypto/MacSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineDoFinal()[B"/>
+		<method name="engineGetMacLength()I"/>
+		<method name="engineInit(Ljava/security/Key;Ljava/security/spec/AlgorithmParameterSpec;)V"/>
+		<method name="engineReset()V"/>
+		<method name="engineUpdate(B)V"/>
+		<method name="engineUpdate(Ljava/nio/ByteBuffer;)V"/>
+		<method name="engineUpdate([BII)V"/>
+	</class>
+	<class name="javax/crypto/NoSuchPaddingException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/crypto/NullCipher" since="1">
+		<extends name="javax/crypto/Cipher"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="javax/crypto/SealedObject" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/io/Serializable;Ljavax/crypto/Cipher;)V"/>
+		<method name="&lt;init>(Ljavax/crypto/SealedObject;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getObject(Ljava/security/Key;)Ljava/lang/Object;"/>
+		<method name="getObject(Ljava/security/Key;Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getObject(Ljavax/crypto/Cipher;)Ljava/lang/Object;"/>
+		<field name="encodedParams"/>
+	</class>
+	<class name="javax/crypto/SecretKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/Key"/>
+		<implements name="javax/security/auth/Destroyable" since="26"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="javax/crypto/SecretKeyFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/crypto/SecretKeyFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="generateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/crypto/SecretKeyFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/SecretKeyFactory;"/>
+		<method name="getKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="translateKey(Ljavax/crypto/SecretKey;)Ljavax/crypto/SecretKey;"/>
+	</class>
+	<class name="javax/crypto/SecretKeyFactorySpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGenerateSecret(Ljava/security/spec/KeySpec;)Ljavax/crypto/SecretKey;"/>
+		<method name="engineGetKeySpec(Ljavax/crypto/SecretKey;Ljava/lang/Class;)Ljava/security/spec/KeySpec;"/>
+		<method name="engineTranslateKey(Ljavax/crypto/SecretKey;)Ljavax/crypto/SecretKey;"/>
+	</class>
+	<class name="javax/crypto/ShortBufferException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/crypto/interfaces/DHKey" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getParams()Ljavax/crypto/spec/DHParameterSpec;"/>
+	</class>
+	<class name="javax/crypto/interfaces/DHPrivateKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PrivateKey"/>
+		<implements name="javax/crypto/interfaces/DHKey"/>
+		<method name="getX()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="javax/crypto/interfaces/DHPublicKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/PublicKey"/>
+		<implements name="javax/crypto/interfaces/DHKey"/>
+		<method name="getY()Ljava/math/BigInteger;"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="javax/crypto/interfaces/PBEKey" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/crypto/SecretKey"/>
+		<method name="getIterationCount()I"/>
+		<method name="getPassword()[C"/>
+		<method name="getSalt()[B"/>
+		<field name="serialVersionUID"/>
+	</class>
+	<class name="javax/crypto/spec/DESKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="&lt;init>([BI)V"/>
+		<method name="getKey()[B"/>
+		<method name="isParityAdjusted([BI)Z"/>
+		<method name="isWeak([BI)Z"/>
+		<field name="DES_KEY_LEN"/>
+	</class>
+	<class name="javax/crypto/spec/DESedeKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="&lt;init>([BI)V"/>
+		<method name="getKey()[B"/>
+		<method name="isParityAdjusted([BI)Z"/>
+		<field name="DES_EDE_KEY_LEN"/>
+	</class>
+	<class name="javax/crypto/spec/DHGenParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="getExponentSize()I"/>
+		<method name="getPrimeSize()I"/>
+	</class>
+	<class name="javax/crypto/spec/DHParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;I)V"/>
+		<method name="getG()Ljava/math/BigInteger;"/>
+		<method name="getL()I"/>
+		<method name="getP()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="javax/crypto/spec/DHPrivateKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getG()Ljava/math/BigInteger;"/>
+		<method name="getP()Ljava/math/BigInteger;"/>
+		<method name="getX()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="javax/crypto/spec/DHPublicKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)V"/>
+		<method name="getG()Ljava/math/BigInteger;"/>
+		<method name="getP()Ljava/math/BigInteger;"/>
+		<method name="getY()Ljava/math/BigInteger;"/>
+	</class>
+	<class name="javax/crypto/spec/GCMParameterSpec" since="19">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(I[B)V"/>
+		<method name="&lt;init>(I[BII)V"/>
+		<method name="getIV()[B"/>
+		<method name="getTLen()I"/>
+	</class>
+	<class name="javax/crypto/spec/IvParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="&lt;init>([BII)V"/>
+		<method name="getIV()[B"/>
+	</class>
+	<class name="javax/crypto/spec/OAEPParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/security/spec/AlgorithmParameterSpec;Ljavax/crypto/spec/PSource;)V"/>
+		<method name="getDigestAlgorithm()Ljava/lang/String;"/>
+		<method name="getMGFAlgorithm()Ljava/lang/String;"/>
+		<method name="getMGFParameters()Ljava/security/spec/AlgorithmParameterSpec;"/>
+		<method name="getPSource()Ljavax/crypto/spec/PSource;"/>
+		<field name="DEFAULT"/>
+	</class>
+	<class name="javax/crypto/spec/PBEKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<method name="&lt;init>([C)V"/>
+		<method name="&lt;init>([C[BI)V"/>
+		<method name="&lt;init>([C[BII)V"/>
+		<method name="clearPassword()V"/>
+		<method name="getIterationCount()I"/>
+		<method name="getKeyLength()I"/>
+		<method name="getPassword()[C"/>
+		<method name="getSalt()[B"/>
+	</class>
+	<class name="javax/crypto/spec/PBEParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>([BI)V"/>
+		<method name="&lt;init>([BILjava/security/spec/AlgorithmParameterSpec;)V" since="26"/>
+		<method name="getIterationCount()I"/>
+		<method name="getParameterSpec()Ljava/security/spec/AlgorithmParameterSpec;" since="26"/>
+		<method name="getSalt()[B"/>
+	</class>
+	<class name="javax/crypto/spec/PSource" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+	</class>
+	<class name="javax/crypto/spec/PSource$PSpecified" since="1">
+		<extends name="javax/crypto/spec/PSource"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="getValue()[B"/>
+		<field name="DEFAULT"/>
+	</class>
+	<class name="javax/crypto/spec/RC2ParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(I[B)V"/>
+		<method name="&lt;init>(I[BI)V"/>
+		<method name="getEffectiveKeyBits()I"/>
+		<method name="getIV()[B"/>
+	</class>
+	<class name="javax/crypto/spec/RC5ParameterSpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/spec/AlgorithmParameterSpec"/>
+		<method name="&lt;init>(III)V"/>
+		<method name="&lt;init>(III[B)V"/>
+		<method name="&lt;init>(III[BI)V"/>
+		<method name="getIV()[B"/>
+		<method name="getRounds()I"/>
+		<method name="getVersion()I"/>
+		<method name="getWordSize()I"/>
+	</class>
+	<class name="javax/crypto/spec/SecretKeySpec" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable" removed="24"/>
+		<implements name="java/security/spec/KeySpec"/>
+		<implements name="javax/crypto/SecretKey"/>
+		<method name="&lt;init>([BIILjava/lang/String;)V"/>
+		<method name="&lt;init>([BLjava/lang/String;)V"/>
+	</class>
+	<class name="javax/microedition/khronos/egl/EGL" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="javax/microedition/khronos/egl/EGL10" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/microedition/khronos/egl/EGL"/>
+		<method name="eglChooseConfig(Ljavax/microedition/khronos/egl/EGLDisplay;[I[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z"/>
+		<method name="eglCopyBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljava/lang/Object;)Z"/>
+		<method name="eglCreateContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljavax/microedition/khronos/egl/EGLContext;[I)Ljavax/microedition/khronos/egl/EGLContext;"/>
+		<method name="eglCreatePbufferSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;[I)Ljavax/microedition/khronos/egl/EGLSurface;"/>
+		<method name="eglCreatePixmapSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;" deprecated="26"/>
+		<method name="eglCreateWindowSurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;Ljava/lang/Object;[I)Ljavax/microedition/khronos/egl/EGLSurface;"/>
+		<method name="eglDestroyContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;)Z"/>
+		<method name="eglDestroySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z"/>
+		<method name="eglGetConfigAttrib(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z"/>
+		<method name="eglGetConfigs(Ljavax/microedition/khronos/egl/EGLDisplay;[Ljavax/microedition/khronos/egl/EGLConfig;I[I)Z"/>
+		<method name="eglGetCurrentContext()Ljavax/microedition/khronos/egl/EGLContext;"/>
+		<method name="eglGetCurrentDisplay()Ljavax/microedition/khronos/egl/EGLDisplay;"/>
+		<method name="eglGetCurrentSurface(I)Ljavax/microedition/khronos/egl/EGLSurface;"/>
+		<method name="eglGetDisplay(Ljava/lang/Object;)Ljavax/microedition/khronos/egl/EGLDisplay;"/>
+		<method name="eglGetError()I"/>
+		<method name="eglInitialize(Ljavax/microedition/khronos/egl/EGLDisplay;[I)Z"/>
+		<method name="eglMakeCurrent(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLSurface;Ljavax/microedition/khronos/egl/EGLContext;)Z"/>
+		<method name="eglQueryContext(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLContext;I[I)Z"/>
+		<method name="eglQueryString(Ljavax/microedition/khronos/egl/EGLDisplay;I)Ljava/lang/String;"/>
+		<method name="eglQuerySurface(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;I[I)Z"/>
+		<method name="eglSwapBuffers(Ljavax/microedition/khronos/egl/EGLDisplay;Ljavax/microedition/khronos/egl/EGLSurface;)Z"/>
+		<method name="eglTerminate(Ljavax/microedition/khronos/egl/EGLDisplay;)Z"/>
+		<method name="eglWaitGL()Z"/>
+		<method name="eglWaitNative(ILjava/lang/Object;)Z"/>
+		<field name="EGL_ALPHA_FORMAT"/>
+		<field name="EGL_ALPHA_MASK_SIZE"/>
+		<field name="EGL_ALPHA_SIZE"/>
+		<field name="EGL_BAD_ACCESS"/>
+		<field name="EGL_BAD_ALLOC"/>
+		<field name="EGL_BAD_ATTRIBUTE"/>
+		<field name="EGL_BAD_CONFIG"/>
+		<field name="EGL_BAD_CONTEXT"/>
+		<field name="EGL_BAD_CURRENT_SURFACE"/>
+		<field name="EGL_BAD_DISPLAY"/>
+		<field name="EGL_BAD_MATCH"/>
+		<field name="EGL_BAD_NATIVE_PIXMAP"/>
+		<field name="EGL_BAD_NATIVE_WINDOW"/>
+		<field name="EGL_BAD_PARAMETER"/>
+		<field name="EGL_BAD_SURFACE"/>
+		<field name="EGL_BLUE_SIZE"/>
+		<field name="EGL_BUFFER_SIZE"/>
+		<field name="EGL_COLORSPACE"/>
+		<field name="EGL_COLOR_BUFFER_TYPE"/>
+		<field name="EGL_CONFIG_CAVEAT"/>
+		<field name="EGL_CONFIG_ID"/>
+		<field name="EGL_CORE_NATIVE_ENGINE"/>
+		<field name="EGL_DEFAULT_DISPLAY"/>
+		<field name="EGL_DEPTH_SIZE"/>
+		<field name="EGL_DONT_CARE"/>
+		<field name="EGL_DRAW"/>
+		<field name="EGL_EXTENSIONS"/>
+		<field name="EGL_GREEN_SIZE"/>
+		<field name="EGL_HEIGHT"/>
+		<field name="EGL_HORIZONTAL_RESOLUTION"/>
+		<field name="EGL_LARGEST_PBUFFER"/>
+		<field name="EGL_LEVEL"/>
+		<field name="EGL_LUMINANCE_BUFFER"/>
+		<field name="EGL_LUMINANCE_SIZE"/>
+		<field name="EGL_MAX_PBUFFER_HEIGHT"/>
+		<field name="EGL_MAX_PBUFFER_PIXELS"/>
+		<field name="EGL_MAX_PBUFFER_WIDTH"/>
+		<field name="EGL_NATIVE_RENDERABLE"/>
+		<field name="EGL_NATIVE_VISUAL_ID"/>
+		<field name="EGL_NATIVE_VISUAL_TYPE"/>
+		<field name="EGL_NONE"/>
+		<field name="EGL_NON_CONFORMANT_CONFIG"/>
+		<field name="EGL_NOT_INITIALIZED"/>
+		<field name="EGL_NO_CONTEXT"/>
+		<field name="EGL_NO_DISPLAY"/>
+		<field name="EGL_NO_SURFACE"/>
+		<field name="EGL_PBUFFER_BIT"/>
+		<field name="EGL_PIXEL_ASPECT_RATIO"/>
+		<field name="EGL_PIXMAP_BIT"/>
+		<field name="EGL_READ"/>
+		<field name="EGL_RED_SIZE"/>
+		<field name="EGL_RENDERABLE_TYPE"/>
+		<field name="EGL_RENDER_BUFFER"/>
+		<field name="EGL_RGB_BUFFER"/>
+		<field name="EGL_SAMPLES"/>
+		<field name="EGL_SAMPLE_BUFFERS"/>
+		<field name="EGL_SINGLE_BUFFER"/>
+		<field name="EGL_SLOW_CONFIG"/>
+		<field name="EGL_STENCIL_SIZE"/>
+		<field name="EGL_SUCCESS"/>
+		<field name="EGL_SURFACE_TYPE"/>
+		<field name="EGL_TRANSPARENT_BLUE_VALUE"/>
+		<field name="EGL_TRANSPARENT_GREEN_VALUE"/>
+		<field name="EGL_TRANSPARENT_RED_VALUE"/>
+		<field name="EGL_TRANSPARENT_RGB"/>
+		<field name="EGL_TRANSPARENT_TYPE"/>
+		<field name="EGL_VENDOR"/>
+		<field name="EGL_VERSION"/>
+		<field name="EGL_VERTICAL_RESOLUTION"/>
+		<field name="EGL_WIDTH"/>
+		<field name="EGL_WINDOW_BIT"/>
+	</class>
+	<class name="javax/microedition/khronos/egl/EGL11" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/microedition/khronos/egl/EGL10"/>
+		<field name="EGL_CONTEXT_LOST"/>
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLConfig" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLContext" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getEGL()Ljavax/microedition/khronos/egl/EGL;"/>
+		<method name="getGL()Ljavax/microedition/khronos/opengles/GL;"/>
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLDisplay" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="javax/microedition/khronos/egl/EGLSurface" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL10" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/microedition/khronos/opengles/GL"/>
+		<method name="glActiveTexture(I)V"/>
+		<method name="glAlphaFunc(IF)V"/>
+		<method name="glAlphaFuncx(II)V"/>
+		<method name="glBindTexture(II)V"/>
+		<method name="glBlendFunc(II)V"/>
+		<method name="glClear(I)V"/>
+		<method name="glClearColor(FFFF)V"/>
+		<method name="glClearColorx(IIII)V"/>
+		<method name="glClearDepthf(F)V"/>
+		<method name="glClearDepthx(I)V"/>
+		<method name="glClearStencil(I)V"/>
+		<method name="glClientActiveTexture(I)V"/>
+		<method name="glColor4f(FFFF)V"/>
+		<method name="glColor4x(IIII)V"/>
+		<method name="glColorMask(ZZZZ)V"/>
+		<method name="glColorPointer(IIILjava/nio/Buffer;)V"/>
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCompressedTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCopyTexImage2D(IIIIIIII)V"/>
+		<method name="glCopyTexSubImage2D(IIIIIIII)V"/>
+		<method name="glCullFace(I)V"/>
+		<method name="glDeleteTextures(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteTextures(I[II)V"/>
+		<method name="glDepthFunc(I)V"/>
+		<method name="glDepthMask(Z)V"/>
+		<method name="glDepthRangef(FF)V"/>
+		<method name="glDepthRangex(II)V"/>
+		<method name="glDisable(I)V"/>
+		<method name="glDisableClientState(I)V"/>
+		<method name="glDrawArrays(III)V"/>
+		<method name="glDrawElements(IIILjava/nio/Buffer;)V"/>
+		<method name="glEnable(I)V"/>
+		<method name="glEnableClientState(I)V"/>
+		<method name="glFinish()V"/>
+		<method name="glFlush()V"/>
+		<method name="glFogf(IF)V"/>
+		<method name="glFogfv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glFogfv(I[FI)V"/>
+		<method name="glFogx(II)V"/>
+		<method name="glFogxv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glFogxv(I[II)V"/>
+		<method name="glFrontFace(I)V"/>
+		<method name="glFrustumf(FFFFFF)V"/>
+		<method name="glFrustumx(IIIIII)V"/>
+		<method name="glGenTextures(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenTextures(I[II)V"/>
+		<method name="glGetError()I"/>
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetIntegerv(I[II)V"/>
+		<method name="glGetString(I)Ljava/lang/String;"/>
+		<method name="glHint(II)V"/>
+		<method name="glLightModelf(IF)V"/>
+		<method name="glLightModelfv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glLightModelfv(I[FI)V"/>
+		<method name="glLightModelx(II)V"/>
+		<method name="glLightModelxv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glLightModelxv(I[II)V"/>
+		<method name="glLightf(IIF)V"/>
+		<method name="glLightfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glLightfv(II[FI)V"/>
+		<method name="glLightx(III)V"/>
+		<method name="glLightxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glLightxv(II[II)V"/>
+		<method name="glLineWidth(F)V"/>
+		<method name="glLineWidthx(I)V"/>
+		<method name="glLoadIdentity()V"/>
+		<method name="glLoadMatrixf(Ljava/nio/FloatBuffer;)V"/>
+		<method name="glLoadMatrixf([FI)V"/>
+		<method name="glLoadMatrixx(Ljava/nio/IntBuffer;)V"/>
+		<method name="glLoadMatrixx([II)V"/>
+		<method name="glLogicOp(I)V"/>
+		<method name="glMaterialf(IIF)V"/>
+		<method name="glMaterialfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glMaterialfv(II[FI)V"/>
+		<method name="glMaterialx(III)V"/>
+		<method name="glMaterialxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glMaterialxv(II[II)V"/>
+		<method name="glMatrixMode(I)V"/>
+		<method name="glMultMatrixf(Ljava/nio/FloatBuffer;)V"/>
+		<method name="glMultMatrixf([FI)V"/>
+		<method name="glMultMatrixx(Ljava/nio/IntBuffer;)V"/>
+		<method name="glMultMatrixx([II)V"/>
+		<method name="glMultiTexCoord4f(IFFFF)V"/>
+		<method name="glMultiTexCoord4x(IIIII)V"/>
+		<method name="glNormal3f(FFF)V"/>
+		<method name="glNormal3x(III)V"/>
+		<method name="glNormalPointer(IILjava/nio/Buffer;)V"/>
+		<method name="glOrthof(FFFFFF)V"/>
+		<method name="glOrthox(IIIIII)V"/>
+		<method name="glPixelStorei(II)V"/>
+		<method name="glPointSize(F)V"/>
+		<method name="glPointSizex(I)V"/>
+		<method name="glPolygonOffset(FF)V"/>
+		<method name="glPolygonOffsetx(II)V"/>
+		<method name="glPopMatrix()V"/>
+		<method name="glPushMatrix()V"/>
+		<method name="glReadPixels(IIIIIILjava/nio/Buffer;)V"/>
+		<method name="glRotatef(FFFF)V"/>
+		<method name="glRotatex(IIII)V"/>
+		<method name="glSampleCoverage(FZ)V"/>
+		<method name="glSampleCoveragex(IZ)V"/>
+		<method name="glScalef(FFF)V"/>
+		<method name="glScalex(III)V"/>
+		<method name="glScissor(IIII)V"/>
+		<method name="glShadeModel(I)V"/>
+		<method name="glStencilFunc(III)V"/>
+		<method name="glStencilMask(I)V"/>
+		<method name="glStencilOp(III)V"/>
+		<method name="glTexCoordPointer(IIILjava/nio/Buffer;)V"/>
+		<method name="glTexEnvf(IIF)V"/>
+		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexEnvfv(II[FI)V"/>
+		<method name="glTexEnvx(III)V"/>
+		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexEnvxv(II[II)V"/>
+		<method name="glTexImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glTexParameterf(IIF)V"/>
+		<method name="glTexParameterx(III)V"/>
+		<method name="glTexSubImage2D(IIIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glTranslatef(FFF)V"/>
+		<method name="glTranslatex(III)V"/>
+		<method name="glVertexPointer(IIILjava/nio/Buffer;)V"/>
+		<method name="glViewport(IIII)V"/>
+		<field name="GL_ADD"/>
+		<field name="GL_ALIASED_LINE_WIDTH_RANGE"/>
+		<field name="GL_ALIASED_POINT_SIZE_RANGE"/>
+		<field name="GL_ALPHA"/>
+		<field name="GL_ALPHA_BITS"/>
+		<field name="GL_ALPHA_TEST"/>
+		<field name="GL_ALWAYS"/>
+		<field name="GL_AMBIENT"/>
+		<field name="GL_AMBIENT_AND_DIFFUSE"/>
+		<field name="GL_AND"/>
+		<field name="GL_AND_INVERTED"/>
+		<field name="GL_AND_REVERSE"/>
+		<field name="GL_BACK"/>
+		<field name="GL_BLEND"/>
+		<field name="GL_BLUE_BITS"/>
+		<field name="GL_BYTE"/>
+		<field name="GL_CCW"/>
+		<field name="GL_CLAMP_TO_EDGE"/>
+		<field name="GL_CLEAR"/>
+		<field name="GL_COLOR_ARRAY"/>
+		<field name="GL_COLOR_BUFFER_BIT"/>
+		<field name="GL_COLOR_LOGIC_OP"/>
+		<field name="GL_COLOR_MATERIAL"/>
+		<field name="GL_COMPRESSED_TEXTURE_FORMATS"/>
+		<field name="GL_CONSTANT_ATTENUATION"/>
+		<field name="GL_COPY"/>
+		<field name="GL_COPY_INVERTED"/>
+		<field name="GL_CULL_FACE"/>
+		<field name="GL_CW"/>
+		<field name="GL_DECAL"/>
+		<field name="GL_DECR"/>
+		<field name="GL_DEPTH_BITS"/>
+		<field name="GL_DEPTH_BUFFER_BIT"/>
+		<field name="GL_DEPTH_TEST"/>
+		<field name="GL_DIFFUSE"/>
+		<field name="GL_DITHER"/>
+		<field name="GL_DONT_CARE"/>
+		<field name="GL_DST_ALPHA"/>
+		<field name="GL_DST_COLOR"/>
+		<field name="GL_EMISSION"/>
+		<field name="GL_EQUAL"/>
+		<field name="GL_EQUIV"/>
+		<field name="GL_EXP"/>
+		<field name="GL_EXP2"/>
+		<field name="GL_EXTENSIONS"/>
+		<field name="GL_FALSE"/>
+		<field name="GL_FASTEST"/>
+		<field name="GL_FIXED"/>
+		<field name="GL_FLAT"/>
+		<field name="GL_FLOAT"/>
+		<field name="GL_FOG"/>
+		<field name="GL_FOG_COLOR"/>
+		<field name="GL_FOG_DENSITY"/>
+		<field name="GL_FOG_END"/>
+		<field name="GL_FOG_HINT"/>
+		<field name="GL_FOG_MODE"/>
+		<field name="GL_FOG_START"/>
+		<field name="GL_FRONT"/>
+		<field name="GL_FRONT_AND_BACK"/>
+		<field name="GL_GEQUAL"/>
+		<field name="GL_GREATER"/>
+		<field name="GL_GREEN_BITS"/>
+		<field name="GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES"/>
+		<field name="GL_IMPLEMENTATION_COLOR_READ_TYPE_OES"/>
+		<field name="GL_INCR"/>
+		<field name="GL_INVALID_ENUM"/>
+		<field name="GL_INVALID_OPERATION"/>
+		<field name="GL_INVALID_VALUE"/>
+		<field name="GL_INVERT"/>
+		<field name="GL_KEEP"/>
+		<field name="GL_LEQUAL"/>
+		<field name="GL_LESS"/>
+		<field name="GL_LIGHT0"/>
+		<field name="GL_LIGHT1"/>
+		<field name="GL_LIGHT2"/>
+		<field name="GL_LIGHT3"/>
+		<field name="GL_LIGHT4"/>
+		<field name="GL_LIGHT5"/>
+		<field name="GL_LIGHT6"/>
+		<field name="GL_LIGHT7"/>
+		<field name="GL_LIGHTING"/>
+		<field name="GL_LIGHT_MODEL_AMBIENT"/>
+		<field name="GL_LIGHT_MODEL_TWO_SIDE"/>
+		<field name="GL_LINEAR"/>
+		<field name="GL_LINEAR_ATTENUATION"/>
+		<field name="GL_LINEAR_MIPMAP_LINEAR"/>
+		<field name="GL_LINEAR_MIPMAP_NEAREST"/>
+		<field name="GL_LINES"/>
+		<field name="GL_LINE_LOOP"/>
+		<field name="GL_LINE_SMOOTH"/>
+		<field name="GL_LINE_SMOOTH_HINT"/>
+		<field name="GL_LINE_STRIP"/>
+		<field name="GL_LUMINANCE"/>
+		<field name="GL_LUMINANCE_ALPHA"/>
+		<field name="GL_MAX_ELEMENTS_INDICES"/>
+		<field name="GL_MAX_ELEMENTS_VERTICES"/>
+		<field name="GL_MAX_LIGHTS"/>
+		<field name="GL_MAX_MODELVIEW_STACK_DEPTH"/>
+		<field name="GL_MAX_PROJECTION_STACK_DEPTH"/>
+		<field name="GL_MAX_TEXTURE_SIZE"/>
+		<field name="GL_MAX_TEXTURE_STACK_DEPTH"/>
+		<field name="GL_MAX_TEXTURE_UNITS"/>
+		<field name="GL_MAX_VIEWPORT_DIMS"/>
+		<field name="GL_MODELVIEW"/>
+		<field name="GL_MODULATE"/>
+		<field name="GL_MULTISAMPLE"/>
+		<field name="GL_NAND"/>
+		<field name="GL_NEAREST"/>
+		<field name="GL_NEAREST_MIPMAP_LINEAR"/>
+		<field name="GL_NEAREST_MIPMAP_NEAREST"/>
+		<field name="GL_NEVER"/>
+		<field name="GL_NICEST"/>
+		<field name="GL_NOOP"/>
+		<field name="GL_NOR"/>
+		<field name="GL_NORMALIZE"/>
+		<field name="GL_NORMAL_ARRAY"/>
+		<field name="GL_NOTEQUAL"/>
+		<field name="GL_NO_ERROR"/>
+		<field name="GL_NUM_COMPRESSED_TEXTURE_FORMATS"/>
+		<field name="GL_ONE"/>
+		<field name="GL_ONE_MINUS_DST_ALPHA"/>
+		<field name="GL_ONE_MINUS_DST_COLOR"/>
+		<field name="GL_ONE_MINUS_SRC_ALPHA"/>
+		<field name="GL_ONE_MINUS_SRC_COLOR"/>
+		<field name="GL_OR"/>
+		<field name="GL_OR_INVERTED"/>
+		<field name="GL_OR_REVERSE"/>
+		<field name="GL_OUT_OF_MEMORY"/>
+		<field name="GL_PACK_ALIGNMENT"/>
+		<field name="GL_PALETTE4_R5_G6_B5_OES"/>
+		<field name="GL_PALETTE4_RGB5_A1_OES"/>
+		<field name="GL_PALETTE4_RGB8_OES"/>
+		<field name="GL_PALETTE4_RGBA4_OES"/>
+		<field name="GL_PALETTE4_RGBA8_OES"/>
+		<field name="GL_PALETTE8_R5_G6_B5_OES"/>
+		<field name="GL_PALETTE8_RGB5_A1_OES"/>
+		<field name="GL_PALETTE8_RGB8_OES"/>
+		<field name="GL_PALETTE8_RGBA4_OES"/>
+		<field name="GL_PALETTE8_RGBA8_OES"/>
+		<field name="GL_PERSPECTIVE_CORRECTION_HINT"/>
+		<field name="GL_POINTS"/>
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
+		<field name="GL_POINT_SIZE"/>
+		<field name="GL_POINT_SMOOTH"/>
+		<field name="GL_POINT_SMOOTH_HINT"/>
+		<field name="GL_POLYGON_OFFSET_FILL"/>
+		<field name="GL_POLYGON_SMOOTH_HINT"/>
+		<field name="GL_POSITION"/>
+		<field name="GL_PROJECTION"/>
+		<field name="GL_QUADRATIC_ATTENUATION"/>
+		<field name="GL_RED_BITS"/>
+		<field name="GL_RENDERER"/>
+		<field name="GL_REPEAT"/>
+		<field name="GL_REPLACE"/>
+		<field name="GL_RESCALE_NORMAL"/>
+		<field name="GL_RGB"/>
+		<field name="GL_RGBA"/>
+		<field name="GL_SAMPLE_ALPHA_TO_COVERAGE"/>
+		<field name="GL_SAMPLE_ALPHA_TO_ONE"/>
+		<field name="GL_SAMPLE_COVERAGE"/>
+		<field name="GL_SCISSOR_TEST"/>
+		<field name="GL_SET"/>
+		<field name="GL_SHININESS"/>
+		<field name="GL_SHORT"/>
+		<field name="GL_SMOOTH"/>
+		<field name="GL_SMOOTH_LINE_WIDTH_RANGE"/>
+		<field name="GL_SMOOTH_POINT_SIZE_RANGE"/>
+		<field name="GL_SPECULAR"/>
+		<field name="GL_SPOT_CUTOFF"/>
+		<field name="GL_SPOT_DIRECTION"/>
+		<field name="GL_SPOT_EXPONENT"/>
+		<field name="GL_SRC_ALPHA"/>
+		<field name="GL_SRC_ALPHA_SATURATE"/>
+		<field name="GL_SRC_COLOR"/>
+		<field name="GL_STACK_OVERFLOW"/>
+		<field name="GL_STACK_UNDERFLOW"/>
+		<field name="GL_STENCIL_BITS"/>
+		<field name="GL_STENCIL_BUFFER_BIT"/>
+		<field name="GL_STENCIL_TEST"/>
+		<field name="GL_SUBPIXEL_BITS"/>
+		<field name="GL_TEXTURE"/>
+		<field name="GL_TEXTURE0"/>
+		<field name="GL_TEXTURE1"/>
+		<field name="GL_TEXTURE10"/>
+		<field name="GL_TEXTURE11"/>
+		<field name="GL_TEXTURE12"/>
+		<field name="GL_TEXTURE13"/>
+		<field name="GL_TEXTURE14"/>
+		<field name="GL_TEXTURE15"/>
+		<field name="GL_TEXTURE16"/>
+		<field name="GL_TEXTURE17"/>
+		<field name="GL_TEXTURE18"/>
+		<field name="GL_TEXTURE19"/>
+		<field name="GL_TEXTURE2"/>
+		<field name="GL_TEXTURE20"/>
+		<field name="GL_TEXTURE21"/>
+		<field name="GL_TEXTURE22"/>
+		<field name="GL_TEXTURE23"/>
+		<field name="GL_TEXTURE24"/>
+		<field name="GL_TEXTURE25"/>
+		<field name="GL_TEXTURE26"/>
+		<field name="GL_TEXTURE27"/>
+		<field name="GL_TEXTURE28"/>
+		<field name="GL_TEXTURE29"/>
+		<field name="GL_TEXTURE3"/>
+		<field name="GL_TEXTURE30"/>
+		<field name="GL_TEXTURE31"/>
+		<field name="GL_TEXTURE4"/>
+		<field name="GL_TEXTURE5"/>
+		<field name="GL_TEXTURE6"/>
+		<field name="GL_TEXTURE7"/>
+		<field name="GL_TEXTURE8"/>
+		<field name="GL_TEXTURE9"/>
+		<field name="GL_TEXTURE_2D"/>
+		<field name="GL_TEXTURE_COORD_ARRAY"/>
+		<field name="GL_TEXTURE_ENV"/>
+		<field name="GL_TEXTURE_ENV_COLOR"/>
+		<field name="GL_TEXTURE_ENV_MODE"/>
+		<field name="GL_TEXTURE_MAG_FILTER"/>
+		<field name="GL_TEXTURE_MIN_FILTER"/>
+		<field name="GL_TEXTURE_WRAP_S"/>
+		<field name="GL_TEXTURE_WRAP_T"/>
+		<field name="GL_TRIANGLES"/>
+		<field name="GL_TRIANGLE_FAN"/>
+		<field name="GL_TRIANGLE_STRIP"/>
+		<field name="GL_TRUE"/>
+		<field name="GL_UNPACK_ALIGNMENT"/>
+		<field name="GL_UNSIGNED_BYTE"/>
+		<field name="GL_UNSIGNED_SHORT"/>
+		<field name="GL_UNSIGNED_SHORT_4_4_4_4"/>
+		<field name="GL_UNSIGNED_SHORT_5_5_5_1"/>
+		<field name="GL_UNSIGNED_SHORT_5_6_5"/>
+		<field name="GL_VENDOR"/>
+		<field name="GL_VERSION"/>
+		<field name="GL_VERTEX_ARRAY"/>
+		<field name="GL_XOR"/>
+		<field name="GL_ZERO"/>
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL10Ext" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/microedition/khronos/opengles/GL"/>
+		<method name="glQueryMatrixxOES(Ljava/nio/IntBuffer;Ljava/nio/IntBuffer;)I"/>
+		<method name="glQueryMatrixxOES([II[II)I"/>
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL11" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/microedition/khronos/opengles/GL10"/>
+		<method name="glBindBuffer(II)V"/>
+		<method name="glBufferData(IILjava/nio/Buffer;I)V"/>
+		<method name="glBufferSubData(IIILjava/nio/Buffer;)V"/>
+		<method name="glClipPlanef(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glClipPlanef(I[FI)V"/>
+		<method name="glClipPlanex(ILjava/nio/IntBuffer;)V"/>
+		<method name="glClipPlanex(I[II)V"/>
+		<method name="glColor4ub(BBBB)V"/>
+		<method name="glColorPointer(IIII)V"/>
+		<method name="glDeleteBuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteBuffers(I[II)V"/>
+		<method name="glDrawElements(IIII)V"/>
+		<method name="glGenBuffers(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenBuffers(I[II)V"/>
+		<method name="glGetBooleanv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetBooleanv(I[ZI)V"/>
+		<method name="glGetBufferParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetBufferParameteriv(II[II)V"/>
+		<method name="glGetClipPlanef(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetClipPlanef(I[FI)V"/>
+		<method name="glGetClipPlanex(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetClipPlanex(I[II)V"/>
+		<method name="glGetFixedv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetFixedv(I[II)V"/>
+		<method name="glGetFloatv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetFloatv(I[FI)V"/>
+		<method name="glGetLightfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetLightfv(II[FI)V"/>
+		<method name="glGetLightxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetLightxv(II[II)V"/>
+		<method name="glGetMaterialfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetMaterialfv(II[FI)V"/>
+		<method name="glGetMaterialxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetMaterialxv(II[II)V"/>
+		<method name="glGetPointerv(I[Ljava/nio/Buffer;)V"/>
+		<method name="glGetTexEnviv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexEnviv(II[II)V"/>
+		<method name="glGetTexEnvxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexEnvxv(II[II)V"/>
+		<method name="glGetTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetTexParameterfv(II[FI)V"/>
+		<method name="glGetTexParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameteriv(II[II)V"/>
+		<method name="glGetTexParameterxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexParameterxv(II[II)V"/>
+		<method name="glIsBuffer(I)Z"/>
+		<method name="glIsEnabled(I)Z"/>
+		<method name="glIsTexture(I)Z"/>
+		<method name="glNormalPointer(III)V"/>
+		<method name="glPointParameterf(IF)V"/>
+		<method name="glPointParameterfv(ILjava/nio/FloatBuffer;)V"/>
+		<method name="glPointParameterfv(I[FI)V"/>
+		<method name="glPointParameterx(II)V"/>
+		<method name="glPointParameterxv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glPointParameterxv(I[II)V"/>
+		<method name="glPointSizePointerOES(IILjava/nio/Buffer;)V"/>
+		<method name="glTexCoordPointer(IIII)V"/>
+		<method name="glTexEnvi(III)V"/>
+		<method name="glTexEnviv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexEnviv(II[II)V"/>
+		<method name="glTexParameterfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexParameterfv(II[FI)V"/>
+		<method name="glTexParameteri(III)V"/>
+		<method name="glTexParameteriv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameteriv(II[II)V"/>
+		<method name="glTexParameterxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexParameterxv(II[II)V"/>
+		<method name="glVertexPointer(IIII)V"/>
+		<field name="GL_ACTIVE_TEXTURE"/>
+		<field name="GL_ADD_SIGNED"/>
+		<field name="GL_ALPHA_SCALE"/>
+		<field name="GL_ALPHA_TEST_FUNC"/>
+		<field name="GL_ALPHA_TEST_REF"/>
+		<field name="GL_ARRAY_BUFFER"/>
+		<field name="GL_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_BLEND_DST"/>
+		<field name="GL_BLEND_SRC"/>
+		<field name="GL_BUFFER_ACCESS"/>
+		<field name="GL_BUFFER_SIZE"/>
+		<field name="GL_BUFFER_USAGE"/>
+		<field name="GL_CLIENT_ACTIVE_TEXTURE"/>
+		<field name="GL_CLIP_PLANE0"/>
+		<field name="GL_CLIP_PLANE1"/>
+		<field name="GL_CLIP_PLANE2"/>
+		<field name="GL_CLIP_PLANE3"/>
+		<field name="GL_CLIP_PLANE4"/>
+		<field name="GL_CLIP_PLANE5"/>
+		<field name="GL_COLOR_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_COLOR_ARRAY_POINTER"/>
+		<field name="GL_COLOR_ARRAY_SIZE"/>
+		<field name="GL_COLOR_ARRAY_STRIDE"/>
+		<field name="GL_COLOR_ARRAY_TYPE"/>
+		<field name="GL_COLOR_CLEAR_VALUE"/>
+		<field name="GL_COLOR_WRITEMASK"/>
+		<field name="GL_COMBINE"/>
+		<field name="GL_COMBINE_ALPHA"/>
+		<field name="GL_COMBINE_RGB"/>
+		<field name="GL_CONSTANT"/>
+		<field name="GL_COORD_REPLACE_OES"/>
+		<field name="GL_CULL_FACE_MODE"/>
+		<field name="GL_CURRENT_COLOR"/>
+		<field name="GL_CURRENT_NORMAL"/>
+		<field name="GL_CURRENT_TEXTURE_COORDS"/>
+		<field name="GL_DEPTH_CLEAR_VALUE"/>
+		<field name="GL_DEPTH_FUNC"/>
+		<field name="GL_DEPTH_RANGE"/>
+		<field name="GL_DEPTH_WRITEMASK"/>
+		<field name="GL_DOT3_RGB"/>
+		<field name="GL_DOT3_RGBA"/>
+		<field name="GL_DYNAMIC_DRAW"/>
+		<field name="GL_ELEMENT_ARRAY_BUFFER"/>
+		<field name="GL_ELEMENT_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_FRONT_FACE"/>
+		<field name="GL_GENERATE_MIPMAP"/>
+		<field name="GL_GENERATE_MIPMAP_HINT"/>
+		<field name="GL_INTERPOLATE"/>
+		<field name="GL_LINE_WIDTH"/>
+		<field name="GL_LOGIC_OP_MODE"/>
+		<field name="GL_MATRIX_MODE"/>
+		<field name="GL_MAX_CLIP_PLANES"/>
+		<field name="GL_MODELVIEW_MATRIX"/>
+		<field name="GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_MODELVIEW_STACK_DEPTH"/>
+		<field name="GL_NORMAL_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_NORMAL_ARRAY_POINTER"/>
+		<field name="GL_NORMAL_ARRAY_STRIDE"/>
+		<field name="GL_NORMAL_ARRAY_TYPE"/>
+		<field name="GL_OPERAND0_ALPHA"/>
+		<field name="GL_OPERAND0_RGB"/>
+		<field name="GL_OPERAND1_ALPHA"/>
+		<field name="GL_OPERAND1_RGB"/>
+		<field name="GL_OPERAND2_ALPHA"/>
+		<field name="GL_OPERAND2_RGB"/>
+		<field name="GL_POINT_DISTANCE_ATTENUATION"/>
+		<field name="GL_POINT_FADE_THRESHOLD_SIZE"/>
+		<field name="GL_POINT_SIZE"/>
+		<field name="GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_POINTER_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_STRIDE_OES"/>
+		<field name="GL_POINT_SIZE_ARRAY_TYPE_OES"/>
+		<field name="GL_POINT_SIZE_MAX"/>
+		<field name="GL_POINT_SIZE_MIN"/>
+		<field name="GL_POINT_SPRITE_OES"/>
+		<field name="GL_POLYGON_OFFSET_FACTOR"/>
+		<field name="GL_POLYGON_OFFSET_UNITS"/>
+		<field name="GL_PREVIOUS"/>
+		<field name="GL_PRIMARY_COLOR"/>
+		<field name="GL_PROJECTION_MATRIX"/>
+		<field name="GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_PROJECTION_STACK_DEPTH"/>
+		<field name="GL_RGB_SCALE"/>
+		<field name="GL_SAMPLES"/>
+		<field name="GL_SAMPLE_BUFFERS"/>
+		<field name="GL_SAMPLE_COVERAGE_INVERT"/>
+		<field name="GL_SAMPLE_COVERAGE_VALUE"/>
+		<field name="GL_SCISSOR_BOX"/>
+		<field name="GL_SHADE_MODEL"/>
+		<field name="GL_SRC0_ALPHA"/>
+		<field name="GL_SRC0_RGB"/>
+		<field name="GL_SRC1_ALPHA"/>
+		<field name="GL_SRC1_RGB"/>
+		<field name="GL_SRC2_ALPHA"/>
+		<field name="GL_SRC2_RGB"/>
+		<field name="GL_STATIC_DRAW"/>
+		<field name="GL_STENCIL_CLEAR_VALUE"/>
+		<field name="GL_STENCIL_FAIL"/>
+		<field name="GL_STENCIL_FUNC"/>
+		<field name="GL_STENCIL_PASS_DEPTH_FAIL"/>
+		<field name="GL_STENCIL_PASS_DEPTH_PASS"/>
+		<field name="GL_STENCIL_REF"/>
+		<field name="GL_STENCIL_VALUE_MASK"/>
+		<field name="GL_STENCIL_WRITEMASK"/>
+		<field name="GL_SUBTRACT"/>
+		<field name="GL_TEXTURE_BINDING_2D"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_POINTER"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_SIZE"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_STRIDE"/>
+		<field name="GL_TEXTURE_COORD_ARRAY_TYPE"/>
+		<field name="GL_TEXTURE_MATRIX"/>
+		<field name="GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES"/>
+		<field name="GL_TEXTURE_STACK_DEPTH"/>
+		<field name="GL_VERTEX_ARRAY_BUFFER_BINDING"/>
+		<field name="GL_VERTEX_ARRAY_POINTER"/>
+		<field name="GL_VERTEX_ARRAY_SIZE"/>
+		<field name="GL_VERTEX_ARRAY_STRIDE"/>
+		<field name="GL_VERTEX_ARRAY_TYPE"/>
+		<field name="GL_VIEWPORT"/>
+		<field name="GL_WRITE_ONLY"/>
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL11Ext" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/microedition/khronos/opengles/GL"/>
+		<method name="glCurrentPaletteMatrixOES(I)V"/>
+		<method name="glDrawTexfOES(FFFFF)V"/>
+		<method name="glDrawTexfvOES(Ljava/nio/FloatBuffer;)V"/>
+		<method name="glDrawTexfvOES([FI)V"/>
+		<method name="glDrawTexiOES(IIIII)V"/>
+		<method name="glDrawTexivOES(Ljava/nio/IntBuffer;)V"/>
+		<method name="glDrawTexivOES([II)V"/>
+		<method name="glDrawTexsOES(SSSSS)V"/>
+		<method name="glDrawTexsvOES(Ljava/nio/ShortBuffer;)V"/>
+		<method name="glDrawTexsvOES([SI)V"/>
+		<method name="glDrawTexxOES(IIIII)V"/>
+		<method name="glDrawTexxvOES(Ljava/nio/IntBuffer;)V"/>
+		<method name="glDrawTexxvOES([II)V"/>
+		<method name="glEnable(I)V"/>
+		<method name="glEnableClientState(I)V"/>
+		<method name="glLoadPaletteFromModelViewMatrixOES()V"/>
+		<method name="glMatrixIndexPointerOES(IIII)V"/>
+		<method name="glMatrixIndexPointerOES(IIILjava/nio/Buffer;)V"/>
+		<method name="glTexParameterfv(II[FI)V"/>
+		<method name="glWeightPointerOES(IIII)V"/>
+		<method name="glWeightPointerOES(IIILjava/nio/Buffer;)V"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_POINTER_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_SIZE_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_STRIDE_OES"/>
+		<field name="GL_MATRIX_INDEX_ARRAY_TYPE_OES"/>
+		<field name="GL_MATRIX_PALETTE_OES"/>
+		<field name="GL_MAX_PALETTE_MATRICES_OES"/>
+		<field name="GL_MAX_VERTEX_UNITS_OES"/>
+		<field name="GL_TEXTURE_CROP_RECT_OES"/>
+		<field name="GL_WEIGHT_ARRAY_BUFFER_BINDING_OES"/>
+		<field name="GL_WEIGHT_ARRAY_OES"/>
+		<field name="GL_WEIGHT_ARRAY_POINTER_OES"/>
+		<field name="GL_WEIGHT_ARRAY_SIZE_OES"/>
+		<field name="GL_WEIGHT_ARRAY_STRIDE_OES"/>
+		<field name="GL_WEIGHT_ARRAY_TYPE_OES"/>
+	</class>
+	<class name="javax/microedition/khronos/opengles/GL11ExtensionPack" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/microedition/khronos/opengles/GL"/>
+		<method name="glBindFramebufferOES(II)V"/>
+		<method name="glBindRenderbufferOES(II)V"/>
+		<method name="glBindTexture(II)V"/>
+		<method name="glBlendEquation(I)V"/>
+		<method name="glBlendEquationSeparate(II)V"/>
+		<method name="glBlendFuncSeparate(IIII)V"/>
+		<method name="glCheckFramebufferStatusOES(I)I"/>
+		<method name="glCompressedTexImage2D(IIIIIIILjava/nio/Buffer;)V"/>
+		<method name="glCopyTexImage2D(IIIIIIII)V"/>
+		<method name="glDeleteFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteFramebuffersOES(I[II)V"/>
+		<method name="glDeleteRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glDeleteRenderbuffersOES(I[II)V"/>
+		<method name="glEnable(I)V"/>
+		<method name="glFramebufferRenderbufferOES(IIII)V"/>
+		<method name="glFramebufferTexture2DOES(IIIII)V"/>
+		<method name="glGenFramebuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenFramebuffersOES(I[II)V"/>
+		<method name="glGenRenderbuffersOES(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGenRenderbuffersOES(I[II)V"/>
+		<method name="glGenerateMipmapOES(I)V"/>
+		<method name="glGetFramebufferAttachmentParameterivOES(IIILjava/nio/IntBuffer;)V"/>
+		<method name="glGetFramebufferAttachmentParameterivOES(III[II)V"/>
+		<method name="glGetIntegerv(ILjava/nio/IntBuffer;)V"/>
+		<method name="glGetIntegerv(I[II)V"/>
+		<method name="glGetRenderbufferParameterivOES(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetRenderbufferParameterivOES(II[II)V"/>
+		<method name="glGetTexGenfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glGetTexGenfv(II[FI)V"/>
+		<method name="glGetTexGeniv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexGeniv(II[II)V"/>
+		<method name="glGetTexGenxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glGetTexGenxv(II[II)V"/>
+		<method name="glIsFramebufferOES(I)Z"/>
+		<method name="glIsRenderbufferOES(I)Z"/>
+		<method name="glRenderbufferStorageOES(IIII)V"/>
+		<method name="glStencilOp(III)V"/>
+		<method name="glTexEnvf(IIF)V"/>
+		<method name="glTexEnvfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexEnvfv(II[FI)V"/>
+		<method name="glTexEnvx(III)V"/>
+		<method name="glTexEnvxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexEnvxv(II[II)V"/>
+		<method name="glTexGenf(IIF)V"/>
+		<method name="glTexGenfv(IILjava/nio/FloatBuffer;)V"/>
+		<method name="glTexGenfv(II[FI)V"/>
+		<method name="glTexGeni(III)V"/>
+		<method name="glTexGeniv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexGeniv(II[II)V"/>
+		<method name="glTexGenx(III)V"/>
+		<method name="glTexGenxv(IILjava/nio/IntBuffer;)V"/>
+		<method name="glTexGenxv(II[II)V"/>
+		<method name="glTexParameterf(IIF)V"/>
+		<field name="GL_BLEND_DST_ALPHA"/>
+		<field name="GL_BLEND_DST_RGB"/>
+		<field name="GL_BLEND_EQUATION"/>
+		<field name="GL_BLEND_EQUATION_ALPHA"/>
+		<field name="GL_BLEND_EQUATION_RGB"/>
+		<field name="GL_BLEND_SRC_ALPHA"/>
+		<field name="GL_BLEND_SRC_RGB"/>
+		<field name="GL_COLOR_ATTACHMENT0_OES"/>
+		<field name="GL_COLOR_ATTACHMENT10_OES"/>
+		<field name="GL_COLOR_ATTACHMENT11_OES"/>
+		<field name="GL_COLOR_ATTACHMENT12_OES"/>
+		<field name="GL_COLOR_ATTACHMENT13_OES"/>
+		<field name="GL_COLOR_ATTACHMENT14_OES"/>
+		<field name="GL_COLOR_ATTACHMENT15_OES"/>
+		<field name="GL_COLOR_ATTACHMENT1_OES"/>
+		<field name="GL_COLOR_ATTACHMENT2_OES"/>
+		<field name="GL_COLOR_ATTACHMENT3_OES"/>
+		<field name="GL_COLOR_ATTACHMENT4_OES"/>
+		<field name="GL_COLOR_ATTACHMENT5_OES"/>
+		<field name="GL_COLOR_ATTACHMENT6_OES"/>
+		<field name="GL_COLOR_ATTACHMENT7_OES"/>
+		<field name="GL_COLOR_ATTACHMENT8_OES"/>
+		<field name="GL_COLOR_ATTACHMENT9_OES"/>
+		<field name="GL_DECR_WRAP"/>
+		<field name="GL_DEPTH_ATTACHMENT_OES"/>
+		<field name="GL_DEPTH_COMPONENT"/>
+		<field name="GL_DEPTH_COMPONENT16"/>
+		<field name="GL_DEPTH_COMPONENT24"/>
+		<field name="GL_DEPTH_COMPONENT32"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES"/>
+		<field name="GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES"/>
+		<field name="GL_FRAMEBUFFER_BINDING_OES"/>
+		<field name="GL_FRAMEBUFFER_COMPLETE_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES"/>
+		<field name="GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES"/>
+		<field name="GL_FRAMEBUFFER_OES"/>
+		<field name="GL_FRAMEBUFFER_UNSUPPORTED_OES"/>
+		<field name="GL_FUNC_ADD"/>
+		<field name="GL_FUNC_REVERSE_SUBTRACT"/>
+		<field name="GL_FUNC_SUBTRACT"/>
+		<field name="GL_INCR_WRAP"/>
+		<field name="GL_INVALID_FRAMEBUFFER_OPERATION_OES"/>
+		<field name="GL_MAX_COLOR_ATTACHMENTS_OES"/>
+		<field name="GL_MAX_CUBE_MAP_TEXTURE_SIZE"/>
+		<field name="GL_MAX_RENDERBUFFER_SIZE_OES"/>
+		<field name="GL_MIRRORED_REPEAT"/>
+		<field name="GL_NORMAL_MAP"/>
+		<field name="GL_REFLECTION_MAP"/>
+		<field name="GL_RENDERBUFFER_ALPHA_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_BINDING_OES"/>
+		<field name="GL_RENDERBUFFER_BLUE_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_DEPTH_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_GREEN_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_HEIGHT_OES"/>
+		<field name="GL_RENDERBUFFER_INTERNAL_FORMAT_OES"/>
+		<field name="GL_RENDERBUFFER_OES"/>
+		<field name="GL_RENDERBUFFER_RED_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_STENCIL_SIZE_OES"/>
+		<field name="GL_RENDERBUFFER_WIDTH_OES"/>
+		<field name="GL_RGB565_OES"/>
+		<field name="GL_RGB5_A1"/>
+		<field name="GL_RGB8"/>
+		<field name="GL_RGBA4"/>
+		<field name="GL_RGBA8"/>
+		<field name="GL_STENCIL_ATTACHMENT_OES"/>
+		<field name="GL_STENCIL_INDEX"/>
+		<field name="GL_STENCIL_INDEX1_OES"/>
+		<field name="GL_STENCIL_INDEX4_OES"/>
+		<field name="GL_STENCIL_INDEX8_OES"/>
+		<field name="GL_STR"/>
+		<field name="GL_TEXTURE_BINDING_CUBE_MAP"/>
+		<field name="GL_TEXTURE_CUBE_MAP"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_X"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Y"/>
+		<field name="GL_TEXTURE_CUBE_MAP_NEGATIVE_Z"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_X"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Y"/>
+		<field name="GL_TEXTURE_CUBE_MAP_POSITIVE_Z"/>
+		<field name="GL_TEXTURE_GEN_MODE"/>
+		<field name="GL_TEXTURE_GEN_STR"/>
+	</class>
+	<class name="javax/net/ServerSocketFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="createServerSocket()Ljava/net/ServerSocket;"/>
+		<method name="createServerSocket(I)Ljava/net/ServerSocket;"/>
+		<method name="createServerSocket(II)Ljava/net/ServerSocket;"/>
+		<method name="createServerSocket(IILjava/net/InetAddress;)Ljava/net/ServerSocket;"/>
+		<method name="getDefault()Ljavax/net/ServerSocketFactory;"/>
+	</class>
+	<class name="javax/net/SocketFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="createSocket()Ljava/net/Socket;"/>
+		<method name="createSocket(Ljava/lang/String;I)Ljava/net/Socket;"/>
+		<method name="createSocket(Ljava/lang/String;ILjava/net/InetAddress;I)Ljava/net/Socket;"/>
+		<method name="createSocket(Ljava/net/InetAddress;I)Ljava/net/Socket;"/>
+		<method name="createSocket(Ljava/net/InetAddress;ILjava/net/InetAddress;I)Ljava/net/Socket;"/>
+		<method name="getDefault()Ljavax/net/SocketFactory;"/>
+	</class>
+	<class name="javax/net/ssl/CertPathTrustManagerParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/ManagerFactoryParameters"/>
+		<method name="&lt;init>(Ljava/security/cert/CertPathParameters;)V"/>
+		<method name="getParameters()Ljava/security/cert/CertPathParameters;"/>
+	</class>
+	<class name="javax/net/ssl/ExtendedSSLSession" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/SSLSession"/>
+		<method name="&lt;init>()V"/>
+		<method name="getLocalSupportedSignatureAlgorithms()[Ljava/lang/String;"/>
+		<method name="getPeerSupportedSignatureAlgorithms()[Ljava/lang/String;"/>
+		<method name="getRequestedServerNames()Ljava/util/List;"/>
+	</class>
+	<class name="javax/net/ssl/HandshakeCompletedEvent" since="1">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljavax/net/ssl/SSLSocket;Ljavax/net/ssl/SSLSession;)V"/>
+		<method name="getCipherSuite()Ljava/lang/String;"/>
+		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
+		<method name="getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;"/>
+		<method name="getPeerCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
+		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
+		<method name="getSocket()Ljavax/net/ssl/SSLSocket;"/>
+	</class>
+	<class name="javax/net/ssl/HandshakeCompletedListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="handshakeCompleted(Ljavax/net/ssl/HandshakeCompletedEvent;)V"/>
+	</class>
+	<class name="javax/net/ssl/HostnameVerifier" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z"/>
+	</class>
+	<class name="javax/net/ssl/HttpsURLConnection" since="1">
+		<extends name="java/net/HttpURLConnection"/>
+		<method name="&lt;init>(Ljava/net/URL;)V"/>
+		<method name="getCipherSuite()Ljava/lang/String;"/>
+		<method name="getDefaultHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;"/>
+		<method name="getDefaultSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
+		<method name="getHostnameVerifier()Ljavax/net/ssl/HostnameVerifier;"/>
+		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
+		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
+		<method name="getSSLSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
+		<method name="getServerCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="setDefaultHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V"/>
+		<method name="setDefaultSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V"/>
+		<method name="setHostnameVerifier(Ljavax/net/ssl/HostnameVerifier;)V"/>
+		<method name="setSSLSocketFactory(Ljavax/net/ssl/SSLSocketFactory;)V"/>
+		<field name="hostnameVerifier"/>
+	</class>
+	<class name="javax/net/ssl/KeyManager" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="javax/net/ssl/KeyManagerFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/net/ssl/KeyManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getDefaultAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/KeyManagerFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/KeyManagerFactory;"/>
+		<method name="getKeyManagers()[Ljavax/net/ssl/KeyManager;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="init(Ljava/security/KeyStore;[C)V"/>
+		<method name="init(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
+	</class>
+	<class name="javax/net/ssl/KeyManagerFactorySpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGetKeyManagers()[Ljavax/net/ssl/KeyManager;"/>
+		<method name="engineInit(Ljava/security/KeyStore;[C)V"/>
+		<method name="engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
+	</class>
+	<class name="javax/net/ssl/KeyStoreBuilderParameters" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/ManagerFactoryParameters"/>
+		<method name="&lt;init>(Ljava/security/KeyStore$Builder;)V"/>
+		<method name="&lt;init>(Ljava/util/List;)V"/>
+		<method name="getParameters()Ljava/util/List;"/>
+	</class>
+	<class name="javax/net/ssl/ManagerFactoryParameters" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="javax/net/ssl/SNIHostName" since="24">
+		<extends name="javax/net/ssl/SNIServerName"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="createSNIMatcher(Ljava/lang/String;)Ljavax/net/ssl/SNIMatcher;"/>
+		<method name="getAsciiName()Ljava/lang/String;"/>
+	</class>
+	<class name="javax/net/ssl/SNIMatcher" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getType()I"/>
+		<method name="matches(Ljavax/net/ssl/SNIServerName;)Z"/>
+	</class>
+	<class name="javax/net/ssl/SNIServerName" since="24">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I[B)V"/>
+		<method name="getEncoded()[B"/>
+		<method name="getType()I"/>
+	</class>
+	<class name="javax/net/ssl/SSLContext" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/net/ssl/SSLContextSpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="createSSLEngine()Ljavax/net/ssl/SSLEngine;"/>
+		<method name="createSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;"/>
+		<method name="getClientSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
+		<method name="getDefault()Ljavax/net/ssl/SSLContext;" since="9"/>
+		<method name="getDefaultSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/SSLContext;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/SSLContext;"/>
+		<method name="getProtocol()Ljava/lang/String;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getServerSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
+		<method name="getServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;"/>
+		<method name="getSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
+		<method name="getSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
+		<method name="init([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V"/>
+		<method name="setDefault(Ljavax/net/ssl/SSLContext;)V" since="9"/>
+	</class>
+	<class name="javax/net/ssl/SSLContextSpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineCreateSSLEngine()Ljavax/net/ssl/SSLEngine;"/>
+		<method name="engineCreateSSLEngine(Ljava/lang/String;I)Ljavax/net/ssl/SSLEngine;"/>
+		<method name="engineGetClientSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
+		<method name="engineGetDefaultSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
+		<method name="engineGetServerSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
+		<method name="engineGetServerSocketFactory()Ljavax/net/ssl/SSLServerSocketFactory;"/>
+		<method name="engineGetSocketFactory()Ljavax/net/ssl/SSLSocketFactory;"/>
+		<method name="engineGetSupportedSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
+		<method name="engineInit([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLEngine" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="beginHandshake()V"/>
+		<method name="closeInbound()V"/>
+		<method name="closeOutbound()V"/>
+		<method name="getApplicationProtocol()Ljava/lang/String;" since="29"/>
+		<method name="getDelegatedTask()Ljava/lang/Runnable;"/>
+		<method name="getEnableSessionCreation()Z"/>
+		<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
+		<method name="getEnabledProtocols()[Ljava/lang/String;"/>
+		<method name="getHandshakeApplicationProtocol()Ljava/lang/String;" since="29"/>
+		<method name="getHandshakeApplicationProtocolSelector()Ljava/util/function/BiFunction;" since="29"/>
+		<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24"/>
+		<method name="getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
+		<method name="getNeedClientAuth()Z"/>
+		<method name="getPeerHost()Ljava/lang/String;"/>
+		<method name="getPeerPort()I"/>
+		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
+		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
+		<method name="getSupportedProtocols()[Ljava/lang/String;"/>
+		<method name="getUseClientMode()Z"/>
+		<method name="getWantClientAuth()Z"/>
+		<method name="isInboundDone()Z"/>
+		<method name="isOutboundDone()Z"/>
+		<method name="setEnableSessionCreation(Z)V"/>
+		<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
+		<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
+		<method name="setHandshakeApplicationProtocolSelector(Ljava/util/function/BiFunction;)V" since="29"/>
+		<method name="setNeedClientAuth(Z)V"/>
+		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9"/>
+		<method name="setUseClientMode(Z)V"/>
+		<method name="setWantClientAuth(Z)V"/>
+		<method name="unwrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
+		<method name="unwrap(Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
+		<method name="unwrap(Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;II)Ljavax/net/ssl/SSLEngineResult;"/>
+		<method name="wrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
+		<method name="wrap([Ljava/nio/ByteBuffer;IILjava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
+		<method name="wrap([Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult;"/>
+	</class>
+	<class name="javax/net/ssl/SSLEngineResult" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/net/ssl/SSLEngineResult$Status;Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;II)V"/>
+		<method name="bytesConsumed()I"/>
+		<method name="bytesProduced()I"/>
+		<method name="getHandshakeStatus()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
+		<method name="getStatus()Ljavax/net/ssl/SSLEngineResult$Status;"/>
+	</class>
+	<class name="javax/net/ssl/SSLEngineResult$HandshakeStatus" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
+		<method name="values()[Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;"/>
+		<field name="FINISHED"/>
+		<field name="NEED_TASK"/>
+		<field name="NEED_UNWRAP"/>
+		<field name="NEED_WRAP"/>
+		<field name="NOT_HANDSHAKING"/>
+	</class>
+	<class name="javax/net/ssl/SSLEngineResult$Status" since="1">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Ljavax/net/ssl/SSLEngineResult$Status;"/>
+		<method name="values()[Ljavax/net/ssl/SSLEngineResult$Status;"/>
+		<field name="BUFFER_OVERFLOW"/>
+		<field name="BUFFER_UNDERFLOW"/>
+		<field name="CLOSED"/>
+		<field name="OK"/>
+	</class>
+	<class name="javax/net/ssl/SSLException" since="1">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLHandshakeException" since="1">
+		<extends name="javax/net/ssl/SSLException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLKeyException" since="1">
+		<extends name="javax/net/ssl/SSLException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLParameters" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([Ljava/lang/String;)V"/>
+		<method name="&lt;init>([Ljava/lang/String;[Ljava/lang/String;)V"/>
+		<method name="getAlgorithmConstraints()Ljava/security/AlgorithmConstraints;" since="24"/>
+		<method name="getApplicationProtocols()[Ljava/lang/String;" since="29"/>
+		<method name="getCipherSuites()[Ljava/lang/String;"/>
+		<method name="getEndpointIdentificationAlgorithm()Ljava/lang/String;" since="24"/>
+		<method name="getNeedClientAuth()Z"/>
+		<method name="getProtocols()[Ljava/lang/String;"/>
+		<method name="getSNIMatchers()Ljava/util/Collection;" since="24"/>
+		<method name="getServerNames()Ljava/util/List;" since="24"/>
+		<method name="getUseCipherSuitesOrder()Z" since="24"/>
+		<method name="getWantClientAuth()Z"/>
+		<method name="setAlgorithmConstraints(Ljava/security/AlgorithmConstraints;)V" since="24"/>
+		<method name="setApplicationProtocols([Ljava/lang/String;)V" since="29"/>
+		<method name="setCipherSuites([Ljava/lang/String;)V"/>
+		<method name="setEndpointIdentificationAlgorithm(Ljava/lang/String;)V" since="24"/>
+		<method name="setNeedClientAuth(Z)V"/>
+		<method name="setProtocols([Ljava/lang/String;)V"/>
+		<method name="setSNIMatchers(Ljava/util/Collection;)V" since="24"/>
+		<method name="setServerNames(Ljava/util/List;)V" since="24"/>
+		<method name="setUseCipherSuitesOrder(Z)V" since="24"/>
+		<method name="setWantClientAuth(Z)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLPeerUnverifiedException" since="1">
+		<extends name="javax/net/ssl/SSLException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLProtocolException" since="1">
+		<extends name="javax/net/ssl/SSLException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLServerSocket" since="1">
+		<extends name="java/net/ServerSocket"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="&lt;init>(IILjava/net/InetAddress;)V"/>
+		<method name="getEnableSessionCreation()Z"/>
+		<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
+		<method name="getEnabledProtocols()[Ljava/lang/String;"/>
+		<method name="getNeedClientAuth()Z"/>
+		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="24"/>
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
+		<method name="getSupportedProtocols()[Ljava/lang/String;"/>
+		<method name="getUseClientMode()Z"/>
+		<method name="getWantClientAuth()Z"/>
+		<method name="setEnableSessionCreation(Z)V"/>
+		<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
+		<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
+		<method name="setNeedClientAuth(Z)V"/>
+		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="24"/>
+		<method name="setUseClientMode(Z)V"/>
+		<method name="setWantClientAuth(Z)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLServerSocketFactory" since="1">
+		<extends name="javax/net/ServerSocketFactory"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDefaultCipherSuites()[Ljava/lang/String;"/>
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
+	</class>
+	<class name="javax/net/ssl/SSLSession" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getApplicationBufferSize()I"/>
+		<method name="getCipherSuite()Ljava/lang/String;"/>
+		<method name="getCreationTime()J"/>
+		<method name="getId()[B"/>
+		<method name="getLastAccessedTime()J"/>
+		<method name="getLocalCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getLocalPrincipal()Ljava/security/Principal;"/>
+		<method name="getPacketBufferSize()I"/>
+		<method name="getPeerCertificateChain()[Ljavax/security/cert/X509Certificate;"/>
+		<method name="getPeerCertificates()[Ljava/security/cert/Certificate;"/>
+		<method name="getPeerHost()Ljava/lang/String;"/>
+		<method name="getPeerPort()I"/>
+		<method name="getPeerPrincipal()Ljava/security/Principal;"/>
+		<method name="getProtocol()Ljava/lang/String;"/>
+		<method name="getSessionContext()Ljavax/net/ssl/SSLSessionContext;"/>
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getValueNames()[Ljava/lang/String;"/>
+		<method name="invalidate()V"/>
+		<method name="isValid()Z"/>
+		<method name="putValue(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="removeValue(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLSessionBindingEvent" since="1">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljavax/net/ssl/SSLSession;Ljava/lang/String;)V"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
+	</class>
+	<class name="javax/net/ssl/SSLSessionBindingListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="valueBound(Ljavax/net/ssl/SSLSessionBindingEvent;)V"/>
+		<method name="valueUnbound(Ljavax/net/ssl/SSLSessionBindingEvent;)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLSessionContext" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getIds()Ljava/util/Enumeration;"/>
+		<method name="getSession([B)Ljavax/net/ssl/SSLSession;"/>
+		<method name="getSessionCacheSize()I"/>
+		<method name="getSessionTimeout()I"/>
+		<method name="setSessionCacheSize(I)V"/>
+		<method name="setSessionTimeout(I)V"/>
+	</class>
+	<class name="javax/net/ssl/SSLSocket" since="1">
+		<extends name="java/net/Socket"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/net/InetAddress;I)V"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;I)V"/>
+		<method name="&lt;init>(Ljava/net/InetAddress;ILjava/net/InetAddress;I)V"/>
+		<method name="addHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V"/>
+		<method name="getApplicationProtocol()Ljava/lang/String;" since="29"/>
+		<method name="getEnableSessionCreation()Z"/>
+		<method name="getEnabledCipherSuites()[Ljava/lang/String;"/>
+		<method name="getEnabledProtocols()[Ljava/lang/String;"/>
+		<method name="getHandshakeApplicationProtocol()Ljava/lang/String;" since="29"/>
+		<method name="getHandshakeApplicationProtocolSelector()Ljava/util/function/BiFunction;" since="29"/>
+		<method name="getHandshakeSession()Ljavax/net/ssl/SSLSession;" since="24"/>
+		<method name="getNeedClientAuth()Z"/>
+		<method name="getSSLParameters()Ljavax/net/ssl/SSLParameters;" since="9"/>
+		<method name="getSession()Ljavax/net/ssl/SSLSession;"/>
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
+		<method name="getSupportedProtocols()[Ljava/lang/String;"/>
+		<method name="getUseClientMode()Z"/>
+		<method name="getWantClientAuth()Z"/>
+		<method name="removeHandshakeCompletedListener(Ljavax/net/ssl/HandshakeCompletedListener;)V"/>
+		<method name="setEnableSessionCreation(Z)V"/>
+		<method name="setEnabledCipherSuites([Ljava/lang/String;)V"/>
+		<method name="setEnabledProtocols([Ljava/lang/String;)V"/>
+		<method name="setHandshakeApplicationProtocolSelector(Ljava/util/function/BiFunction;)V" since="29"/>
+		<method name="setNeedClientAuth(Z)V"/>
+		<method name="setSSLParameters(Ljavax/net/ssl/SSLParameters;)V" since="9"/>
+		<method name="setUseClientMode(Z)V"/>
+		<method name="setWantClientAuth(Z)V"/>
+		<method name="startHandshake()V"/>
+	</class>
+	<class name="javax/net/ssl/SSLSocketFactory" since="1">
+		<extends name="javax/net/SocketFactory"/>
+		<method name="&lt;init>()V"/>
+		<method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;"/>
+		<method name="getDefaultCipherSuites()[Ljava/lang/String;"/>
+		<method name="getSupportedCipherSuites()[Ljava/lang/String;"/>
+	</class>
+	<class name="javax/net/ssl/StandardConstants" since="24">
+		<extends name="java/lang/Object"/>
+		<field name="SNI_HOST_NAME"/>
+	</class>
+	<class name="javax/net/ssl/TrustManager" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="javax/net/ssl/TrustManagerFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljavax/net/ssl/TrustManagerFactorySpi;Ljava/security/Provider;Ljava/lang/String;)V"/>
+		<method name="getAlgorithm()Ljava/lang/String;"/>
+		<method name="getDefaultAlgorithm()Ljava/lang/String;"/>
+		<method name="getInstance(Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;"/>
+		<method name="getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/net/ssl/TrustManagerFactory;"/>
+		<method name="getProvider()Ljava/security/Provider;"/>
+		<method name="getTrustManagers()[Ljavax/net/ssl/TrustManager;"/>
+		<method name="init(Ljava/security/KeyStore;)V"/>
+		<method name="init(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
+	</class>
+	<class name="javax/net/ssl/TrustManagerFactorySpi" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="engineGetTrustManagers()[Ljavax/net/ssl/TrustManager;"/>
+		<method name="engineInit(Ljava/security/KeyStore;)V"/>
+		<method name="engineInit(Ljavax/net/ssl/ManagerFactoryParameters;)V"/>
+	</class>
+	<class name="javax/net/ssl/X509ExtendedKeyManager" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/X509KeyManager"/>
+		<method name="&lt;init>()V"/>
+		<method name="chooseEngineClientAlias([Ljava/lang/String;[Ljava/security/Principal;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
+		<method name="chooseEngineServerAlias(Ljava/lang/String;[Ljava/security/Principal;Ljavax/net/ssl/SSLEngine;)Ljava/lang/String;"/>
+	</class>
+	<class name="javax/net/ssl/X509ExtendedTrustManager" since="24">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/X509TrustManager"/>
+		<method name="&lt;init>()V"/>
+		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V"/>
+		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V"/>
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljava/net/Socket;)V"/>
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;Ljavax/net/ssl/SSLEngine;)V"/>
+	</class>
+	<class name="javax/net/ssl/X509KeyManager" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/KeyManager"/>
+		<method name="chooseClientAlias([Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;"/>
+		<method name="chooseServerAlias(Ljava/lang/String;[Ljava/security/Principal;Ljava/net/Socket;)Ljava/lang/String;"/>
+		<method name="getCertificateChain(Ljava/lang/String;)[Ljava/security/cert/X509Certificate;"/>
+		<method name="getClientAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;"/>
+		<method name="getPrivateKey(Ljava/lang/String;)Ljava/security/PrivateKey;"/>
+		<method name="getServerAliases(Ljava/lang/String;[Ljava/security/Principal;)[Ljava/lang/String;"/>
+	</class>
+	<class name="javax/net/ssl/X509TrustManager" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/TrustManager"/>
+		<method name="checkClientTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V"/>
+		<method name="checkServerTrusted([Ljava/security/cert/X509Certificate;Ljava/lang/String;)V"/>
+		<method name="getAcceptedIssuers()[Ljava/security/cert/X509Certificate;"/>
+	</class>
+	<class name="javax/security/auth/AuthPermission" since="1">
+		<extends name="java/security/BasicPermission"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/auth/DestroyFailedException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/auth/Destroyable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="destroy()V"/>
+		<method name="isDestroyed()Z"/>
+	</class>
+	<class name="javax/security/auth/PrivateCredentialPermission" since="1">
+		<extends name="java/security/Permission"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getCredentialClass()Ljava/lang/String;"/>
+		<method name="getPrincipals()[[Ljava/lang/String;"/>
+	</class>
+	<class name="javax/security/auth/Subject" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(ZLjava/util/Set;Ljava/util/Set;Ljava/util/Set;)V"/>
+		<method name="doAs(Ljavax/security/auth/Subject;Ljava/security/PrivilegedAction;)Ljava/lang/Object;"/>
+		<method name="doAs(Ljavax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object;"/>
+		<method name="doAsPrivileged(Ljavax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
+		<method name="doAsPrivileged(Ljavax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;"/>
+		<method name="getPrincipals()Ljava/util/Set;"/>
+		<method name="getPrincipals(Ljava/lang/Class;)Ljava/util/Set;"/>
+		<method name="getPrivateCredentials()Ljava/util/Set;"/>
+		<method name="getPrivateCredentials(Ljava/lang/Class;)Ljava/util/Set;"/>
+		<method name="getPublicCredentials()Ljava/util/Set;"/>
+		<method name="getPublicCredentials(Ljava/lang/Class;)Ljava/util/Set;"/>
+		<method name="getSubject(Ljava/security/AccessControlContext;)Ljavax/security/auth/Subject;"/>
+		<method name="isReadOnly()Z"/>
+		<method name="setReadOnly()V"/>
+	</class>
+	<class name="javax/security/auth/SubjectDomainCombiner" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/DomainCombiner"/>
+		<method name="&lt;init>(Ljavax/security/auth/Subject;)V"/>
+		<method name="getSubject()Ljavax/security/auth/Subject;"/>
+	</class>
+	<class name="javax/security/auth/callback/Callback" since="1">
+		<extends name="java/lang/Object"/>
+	</class>
+	<class name="javax/security/auth/callback/CallbackHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="handle([Ljavax/security/auth/callback/Callback;)V"/>
+	</class>
+	<class name="javax/security/auth/callback/PasswordCallback" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="javax/security/auth/callback/Callback"/>
+		<method name="&lt;init>(Ljava/lang/String;Z)V"/>
+		<method name="clearPassword()V"/>
+		<method name="getPassword()[C"/>
+		<method name="getPrompt()Ljava/lang/String;"/>
+		<method name="isEchoOn()Z"/>
+		<method name="setPassword([C)V"/>
+	</class>
+	<class name="javax/security/auth/callback/UnsupportedCallbackException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljavax/security/auth/callback/Callback;)V"/>
+		<method name="&lt;init>(Ljavax/security/auth/callback/Callback;Ljava/lang/String;)V"/>
+		<method name="getCallback()Ljavax/security/auth/callback/Callback;"/>
+	</class>
+	<class name="javax/security/auth/login/LoginException" since="1">
+		<extends name="java/security/GeneralSecurityException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/auth/x500/X500Principal" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/security/Principal"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/util/Map;)V" since="9"/>
+		<method name="&lt;init>([B)V"/>
+		<method name="getEncoded()[B"/>
+		<method name="getName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getName(Ljava/lang/String;Ljava/util/Map;)Ljava/lang/String;" since="9"/>
+		<field name="CANONICAL"/>
+		<field name="RFC1779"/>
+		<field name="RFC2253"/>
+	</class>
+	<class name="javax/security/cert/Certificate" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getEncoded()[B"/>
+		<method name="getPublicKey()Ljava/security/PublicKey;"/>
+		<method name="verify(Ljava/security/PublicKey;)V"/>
+		<method name="verify(Ljava/security/PublicKey;Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/cert/CertificateEncodingException" since="1">
+		<extends name="javax/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/cert/CertificateException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/cert/CertificateExpiredException" since="1">
+		<extends name="javax/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/cert/CertificateNotYetValidException" since="1">
+		<extends name="javax/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/cert/CertificateParsingException" since="1">
+		<extends name="javax/security/cert/CertificateException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/security/cert/X509Certificate" since="1">
+		<extends name="javax/security/cert/Certificate"/>
+		<method name="&lt;init>()V"/>
+		<method name="checkValidity()V"/>
+		<method name="checkValidity(Ljava/util/Date;)V"/>
+		<method name="getInstance(Ljava/io/InputStream;)Ljavax/security/cert/X509Certificate;"/>
+		<method name="getInstance([B)Ljavax/security/cert/X509Certificate;"/>
+		<method name="getIssuerDN()Ljava/security/Principal;"/>
+		<method name="getNotAfter()Ljava/util/Date;"/>
+		<method name="getNotBefore()Ljava/util/Date;"/>
+		<method name="getSerialNumber()Ljava/math/BigInteger;"/>
+		<method name="getSigAlgName()Ljava/lang/String;"/>
+		<method name="getSigAlgOID()Ljava/lang/String;"/>
+		<method name="getSigAlgParams()[B"/>
+		<method name="getSubjectDN()Ljava/security/Principal;"/>
+		<method name="getVersion()I"/>
+	</class>
+	<class name="javax/sql/CommonDataSource" since="9">
+		<extends name="java/lang/Object"/>
+		<method name="getLogWriter()Ljava/io/PrintWriter;"/>
+		<method name="getLoginTimeout()I"/>
+		<method name="getParentLogger()Ljava/util/logging/Logger;" since="24"/>
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V"/>
+		<method name="setLoginTimeout(I)V"/>
+	</class>
+	<class name="javax/sql/ConnectionEvent" since="1">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljavax/sql/PooledConnection;)V"/>
+		<method name="&lt;init>(Ljavax/sql/PooledConnection;Ljava/sql/SQLException;)V"/>
+		<method name="getSQLException()Ljava/sql/SQLException;"/>
+	</class>
+	<class name="javax/sql/ConnectionEventListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="connectionClosed(Ljavax/sql/ConnectionEvent;)V"/>
+		<method name="connectionErrorOccurred(Ljavax/sql/ConnectionEvent;)V"/>
+	</class>
+	<class name="javax/sql/ConnectionPoolDataSource" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/sql/CommonDataSource" since="9"/>
+		<method name="getLogWriter()Ljava/io/PrintWriter;" removed="9"/>
+		<method name="getLoginTimeout()I" removed="9"/>
+		<method name="getPooledConnection()Ljavax/sql/PooledConnection;"/>
+		<method name="getPooledConnection(Ljava/lang/String;Ljava/lang/String;)Ljavax/sql/PooledConnection;"/>
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V" removed="9"/>
+		<method name="setLoginTimeout(I)V" removed="9"/>
+	</class>
+	<class name="javax/sql/DataSource" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/Wrapper" since="9"/>
+		<implements name="javax/sql/CommonDataSource" since="9"/>
+		<method name="getConnection()Ljava/sql/Connection;"/>
+		<method name="getConnection(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;"/>
+		<method name="getLogWriter()Ljava/io/PrintWriter;" removed="9"/>
+		<method name="getLoginTimeout()I" removed="9"/>
+		<method name="setLogWriter(Ljava/io/PrintWriter;)V" removed="9"/>
+		<method name="setLoginTimeout(I)V" removed="9"/>
+	</class>
+	<class name="javax/sql/PooledConnection" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addConnectionEventListener(Ljavax/sql/ConnectionEventListener;)V"/>
+		<method name="addStatementEventListener(Ljavax/sql/StatementEventListener;)V" since="9"/>
+		<method name="close()V"/>
+		<method name="getConnection()Ljava/sql/Connection;"/>
+		<method name="removeConnectionEventListener(Ljavax/sql/ConnectionEventListener;)V"/>
+		<method name="removeStatementEventListener(Ljavax/sql/StatementEventListener;)V" since="9"/>
+	</class>
+	<class name="javax/sql/RowSet" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/ResultSet"/>
+		<method name="addRowSetListener(Ljavax/sql/RowSetListener;)V"/>
+		<method name="clearParameters()V"/>
+		<method name="execute()V"/>
+		<method name="getCommand()Ljava/lang/String;"/>
+		<method name="getDataSourceName()Ljava/lang/String;"/>
+		<method name="getEscapeProcessing()Z"/>
+		<method name="getMaxFieldSize()I"/>
+		<method name="getMaxRows()I"/>
+		<method name="getPassword()Ljava/lang/String;"/>
+		<method name="getQueryTimeout()I"/>
+		<method name="getTransactionIsolation()I"/>
+		<method name="getTypeMap()Ljava/util/Map;"/>
+		<method name="getUrl()Ljava/lang/String;"/>
+		<method name="getUsername()Ljava/lang/String;"/>
+		<method name="isReadOnly()Z"/>
+		<method name="removeRowSetListener(Ljavax/sql/RowSetListener;)V"/>
+		<method name="setArray(ILjava/sql/Array;)V"/>
+		<method name="setAsciiStream(ILjava/io/InputStream;)V" since="9"/>
+		<method name="setAsciiStream(ILjava/io/InputStream;I)V"/>
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="setAsciiStream(Ljava/lang/String;Ljava/io/InputStream;I)V" since="9"/>
+		<method name="setBigDecimal(ILjava/math/BigDecimal;)V"/>
+		<method name="setBigDecimal(Ljava/lang/String;Ljava/math/BigDecimal;)V" since="9"/>
+		<method name="setBinaryStream(ILjava/io/InputStream;)V" since="9"/>
+		<method name="setBinaryStream(ILjava/io/InputStream;I)V"/>
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="setBinaryStream(Ljava/lang/String;Ljava/io/InputStream;I)V" since="9"/>
+		<method name="setBlob(ILjava/io/InputStream;)V" since="9"/>
+		<method name="setBlob(ILjava/io/InputStream;J)V" since="9"/>
+		<method name="setBlob(ILjava/sql/Blob;)V"/>
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;)V" since="9"/>
+		<method name="setBlob(Ljava/lang/String;Ljava/io/InputStream;J)V" since="9"/>
+		<method name="setBlob(Ljava/lang/String;Ljava/sql/Blob;)V" since="9"/>
+		<method name="setBoolean(IZ)V"/>
+		<method name="setBoolean(Ljava/lang/String;Z)V" since="9"/>
+		<method name="setByte(IB)V"/>
+		<method name="setByte(Ljava/lang/String;B)V" since="9"/>
+		<method name="setBytes(I[B)V"/>
+		<method name="setBytes(Ljava/lang/String;[B)V" since="9"/>
+		<method name="setCharacterStream(ILjava/io/Reader;)V" since="9"/>
+		<method name="setCharacterStream(ILjava/io/Reader;I)V"/>
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setCharacterStream(Ljava/lang/String;Ljava/io/Reader;I)V" since="9"/>
+		<method name="setClob(ILjava/io/Reader;)V" since="9"/>
+		<method name="setClob(ILjava/io/Reader;J)V" since="9"/>
+		<method name="setClob(ILjava/sql/Clob;)V"/>
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="setClob(Ljava/lang/String;Ljava/sql/Clob;)V" since="9"/>
+		<method name="setCommand(Ljava/lang/String;)V"/>
+		<method name="setConcurrency(I)V"/>
+		<method name="setDataSourceName(Ljava/lang/String;)V"/>
+		<method name="setDate(ILjava/sql/Date;)V"/>
+		<method name="setDate(ILjava/sql/Date;Ljava/util/Calendar;)V"/>
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;)V" since="9"/>
+		<method name="setDate(Ljava/lang/String;Ljava/sql/Date;Ljava/util/Calendar;)V" since="9"/>
+		<method name="setDouble(ID)V"/>
+		<method name="setDouble(Ljava/lang/String;D)V" since="9"/>
+		<method name="setEscapeProcessing(Z)V"/>
+		<method name="setFloat(IF)V"/>
+		<method name="setFloat(Ljava/lang/String;F)V" since="9"/>
+		<method name="setInt(II)V"/>
+		<method name="setInt(Ljava/lang/String;I)V" since="9"/>
+		<method name="setLong(IJ)V"/>
+		<method name="setLong(Ljava/lang/String;J)V" since="9"/>
+		<method name="setMaxFieldSize(I)V"/>
+		<method name="setMaxRows(I)V"/>
+		<method name="setNCharacterStream(ILjava/io/Reader;)V" since="9"/>
+		<method name="setNCharacterStream(ILjava/io/Reader;J)V" since="9"/>
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setNCharacterStream(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="setNClob(ILjava/io/Reader;)V" since="9"/>
+		<method name="setNClob(ILjava/io/Reader;J)V" since="9"/>
+		<method name="setNClob(ILjava/sql/NClob;)V" since="9"/>
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;)V" since="9"/>
+		<method name="setNClob(Ljava/lang/String;Ljava/io/Reader;J)V" since="9"/>
+		<method name="setNClob(Ljava/lang/String;Ljava/sql/NClob;)V" since="9"/>
+		<method name="setNString(ILjava/lang/String;)V" since="9"/>
+		<method name="setNString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
+		<method name="setNull(II)V"/>
+		<method name="setNull(IILjava/lang/String;)V"/>
+		<method name="setNull(Ljava/lang/String;I)V" since="9"/>
+		<method name="setNull(Ljava/lang/String;ILjava/lang/String;)V" since="9"/>
+		<method name="setObject(ILjava/lang/Object;)V"/>
+		<method name="setObject(ILjava/lang/Object;I)V"/>
+		<method name="setObject(ILjava/lang/Object;II)V"/>
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;)V" since="9"/>
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;I)V" since="9"/>
+		<method name="setObject(Ljava/lang/String;Ljava/lang/Object;II)V" since="9"/>
+		<method name="setPassword(Ljava/lang/String;)V"/>
+		<method name="setQueryTimeout(I)V"/>
+		<method name="setReadOnly(Z)V"/>
+		<method name="setRef(ILjava/sql/Ref;)V"/>
+		<method name="setRowId(ILjava/sql/RowId;)V" since="9"/>
+		<method name="setRowId(Ljava/lang/String;Ljava/sql/RowId;)V" since="9"/>
+		<method name="setSQLXML(ILjava/sql/SQLXML;)V" since="9"/>
+		<method name="setSQLXML(Ljava/lang/String;Ljava/sql/SQLXML;)V" since="9"/>
+		<method name="setShort(IS)V"/>
+		<method name="setShort(Ljava/lang/String;S)V" since="9"/>
+		<method name="setString(ILjava/lang/String;)V"/>
+		<method name="setString(Ljava/lang/String;Ljava/lang/String;)V" since="9"/>
+		<method name="setTime(ILjava/sql/Time;)V"/>
+		<method name="setTime(ILjava/sql/Time;Ljava/util/Calendar;)V"/>
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;)V" since="9"/>
+		<method name="setTime(Ljava/lang/String;Ljava/sql/Time;Ljava/util/Calendar;)V" since="9"/>
+		<method name="setTimestamp(ILjava/sql/Timestamp;)V"/>
+		<method name="setTimestamp(ILjava/sql/Timestamp;Ljava/util/Calendar;)V"/>
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;)V" since="9"/>
+		<method name="setTimestamp(Ljava/lang/String;Ljava/sql/Timestamp;Ljava/util/Calendar;)V" since="9"/>
+		<method name="setTransactionIsolation(I)V"/>
+		<method name="setType(I)V"/>
+		<method name="setTypeMap(Ljava/util/Map;)V"/>
+		<method name="setURL(ILjava/net/URL;)V" since="9"/>
+		<method name="setUrl(Ljava/lang/String;)V"/>
+		<method name="setUsername(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/sql/RowSetEvent" since="1">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljavax/sql/RowSet;)V"/>
+	</class>
+	<class name="javax/sql/RowSetInternal" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getConnection()Ljava/sql/Connection;"/>
+		<method name="getOriginal()Ljava/sql/ResultSet;"/>
+		<method name="getOriginalRow()Ljava/sql/ResultSet;"/>
+		<method name="getParams()[Ljava/lang/Object;"/>
+		<method name="setMetaData(Ljavax/sql/RowSetMetaData;)V"/>
+	</class>
+	<class name="javax/sql/RowSetListener" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="cursorMoved(Ljavax/sql/RowSetEvent;)V"/>
+		<method name="rowChanged(Ljavax/sql/RowSetEvent;)V"/>
+		<method name="rowSetChanged(Ljavax/sql/RowSetEvent;)V"/>
+	</class>
+	<class name="javax/sql/RowSetMetaData" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="java/sql/ResultSetMetaData"/>
+		<method name="setAutoIncrement(IZ)V"/>
+		<method name="setCaseSensitive(IZ)V"/>
+		<method name="setCatalogName(ILjava/lang/String;)V"/>
+		<method name="setColumnCount(I)V"/>
+		<method name="setColumnDisplaySize(II)V"/>
+		<method name="setColumnLabel(ILjava/lang/String;)V"/>
+		<method name="setColumnName(ILjava/lang/String;)V"/>
+		<method name="setColumnType(II)V"/>
+		<method name="setColumnTypeName(ILjava/lang/String;)V"/>
+		<method name="setCurrency(IZ)V"/>
+		<method name="setNullable(II)V"/>
+		<method name="setPrecision(II)V"/>
+		<method name="setScale(II)V"/>
+		<method name="setSchemaName(ILjava/lang/String;)V"/>
+		<method name="setSearchable(IZ)V"/>
+		<method name="setSigned(IZ)V"/>
+		<method name="setTableName(ILjava/lang/String;)V"/>
+	</class>
+	<class name="javax/sql/RowSetReader" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="readData(Ljavax/sql/RowSetInternal;)V"/>
+	</class>
+	<class name="javax/sql/RowSetWriter" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="writeData(Ljavax/sql/RowSetInternal;)Z"/>
+	</class>
+	<class name="javax/sql/StatementEvent" since="9">
+		<extends name="java/util/EventObject"/>
+		<method name="&lt;init>(Ljavax/sql/PooledConnection;Ljava/sql/PreparedStatement;)V"/>
+		<method name="&lt;init>(Ljavax/sql/PooledConnection;Ljava/sql/PreparedStatement;Ljava/sql/SQLException;)V"/>
+		<method name="getSQLException()Ljava/sql/SQLException;"/>
+		<method name="getStatement()Ljava/sql/PreparedStatement;"/>
+	</class>
+	<class name="javax/sql/StatementEventListener" since="9">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/EventListener"/>
+		<method name="statementClosed(Ljavax/sql/StatementEvent;)V"/>
+		<method name="statementErrorOccurred(Ljavax/sql/StatementEvent;)V"/>
+	</class>
+	<class name="javax/xml/XMLConstants" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V" removed="8"/>
+		<field name="DEFAULT_NS_PREFIX"/>
+		<field name="FEATURE_SECURE_PROCESSING"/>
+		<field name="NULL_NS_URI"/>
+		<field name="RELAXNG_NS_URI"/>
+		<field name="W3C_XML_SCHEMA_INSTANCE_NS_URI"/>
+		<field name="W3C_XML_SCHEMA_NS_URI"/>
+		<field name="W3C_XPATH_DATATYPE_NS_URI"/>
+		<field name="XMLNS_ATTRIBUTE"/>
+		<field name="XMLNS_ATTRIBUTE_NS_URI"/>
+		<field name="XML_DTD_NS_URI"/>
+		<field name="XML_NS_PREFIX"/>
+		<field name="XML_NS_URI"/>
+	</class>
+	<class name="javax/xml/datatype/DatatypeConfigurationException" since="8">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="javax/xml/datatype/DatatypeConstants" since="8">
+		<extends name="java/lang/Object"/>
+		<field name="APRIL"/>
+		<field name="AUGUST"/>
+		<field name="DATE"/>
+		<field name="DATETIME"/>
+		<field name="DAYS"/>
+		<field name="DECEMBER"/>
+		<field name="DURATION"/>
+		<field name="DURATION_DAYTIME"/>
+		<field name="DURATION_YEARMONTH"/>
+		<field name="EQUAL"/>
+		<field name="FEBRUARY"/>
+		<field name="FIELD_UNDEFINED"/>
+		<field name="GDAY"/>
+		<field name="GMONTH"/>
+		<field name="GMONTHDAY"/>
+		<field name="GREATER"/>
+		<field name="GYEAR"/>
+		<field name="GYEARMONTH"/>
+		<field name="HOURS"/>
+		<field name="INDETERMINATE"/>
+		<field name="JANUARY"/>
+		<field name="JULY"/>
+		<field name="JUNE"/>
+		<field name="LESSER"/>
+		<field name="MARCH"/>
+		<field name="MAX_TIMEZONE_OFFSET"/>
+		<field name="MAY"/>
+		<field name="MINUTES"/>
+		<field name="MIN_TIMEZONE_OFFSET"/>
+		<field name="MONTHS"/>
+		<field name="NOVEMBER"/>
+		<field name="OCTOBER"/>
+		<field name="SECONDS"/>
+		<field name="SEPTEMBER"/>
+		<field name="TIME"/>
+		<field name="YEARS"/>
+	</class>
+	<class name="javax/xml/datatype/DatatypeConstants$Field" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getId()I"/>
+	</class>
+	<class name="javax/xml/datatype/DatatypeFactory" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="newDuration(J)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDuration(Ljava/lang/String;)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDuration(ZIIIIII)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDuration(ZLjava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigDecimal;)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationDayTime(J)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationDayTime(Ljava/lang/String;)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationDayTime(ZIIII)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationDayTime(ZLjava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationYearMonth(J)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationYearMonth(Ljava/lang/String;)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationYearMonth(ZII)Ljavax/xml/datatype/Duration;"/>
+		<method name="newDurationYearMonth(ZLjava/math/BigInteger;Ljava/math/BigInteger;)Ljavax/xml/datatype/Duration;"/>
+		<method name="newInstance()Ljavax/xml/datatype/DatatypeFactory;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/datatype/DatatypeFactory;" since="9"/>
+		<method name="newXMLGregorianCalendar()Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendar(IIIIIIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendar(Ljava/lang/String;)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendar(Ljava/math/BigInteger;IIIIILjava/math/BigDecimal;I)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendar(Ljava/util/GregorianCalendar;)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendarDate(IIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendarTime(IIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendarTime(IIIII)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="newXMLGregorianCalendarTime(IIILjava/math/BigDecimal;I)Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<field name="DATATYPEFACTORY_IMPLEMENTATION_CLASS"/>
+		<field name="DATATYPEFACTORY_PROPERTY"/>
+	</class>
+	<class name="javax/xml/datatype/Duration" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(Ljavax/xml/datatype/Duration;)Ljavax/xml/datatype/Duration;"/>
+		<method name="addTo(Ljava/util/Calendar;)V"/>
+		<method name="addTo(Ljava/util/Date;)V"/>
+		<method name="compare(Ljavax/xml/datatype/Duration;)I"/>
+		<method name="getDays()I"/>
+		<method name="getField(Ljavax/xml/datatype/DatatypeConstants$Field;)Ljava/lang/Number;"/>
+		<method name="getHours()I"/>
+		<method name="getMinutes()I"/>
+		<method name="getMonths()I"/>
+		<method name="getSeconds()I"/>
+		<method name="getSign()I"/>
+		<method name="getTimeInMillis(Ljava/util/Calendar;)J"/>
+		<method name="getTimeInMillis(Ljava/util/Date;)J"/>
+		<method name="getXMLSchemaType()Ljavax/xml/namespace/QName;"/>
+		<method name="getYears()I"/>
+		<method name="isLongerThan(Ljavax/xml/datatype/Duration;)Z"/>
+		<method name="isSet(Ljavax/xml/datatype/DatatypeConstants$Field;)Z"/>
+		<method name="isShorterThan(Ljavax/xml/datatype/Duration;)Z"/>
+		<method name="multiply(I)Ljavax/xml/datatype/Duration;"/>
+		<method name="multiply(Ljava/math/BigDecimal;)Ljavax/xml/datatype/Duration;"/>
+		<method name="negate()Ljavax/xml/datatype/Duration;"/>
+		<method name="normalizeWith(Ljava/util/Calendar;)Ljavax/xml/datatype/Duration;"/>
+		<method name="subtract(Ljavax/xml/datatype/Duration;)Ljavax/xml/datatype/Duration;"/>
+	</class>
+	<class name="javax/xml/datatype/XMLGregorianCalendar" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(Ljavax/xml/datatype/Duration;)V"/>
+		<method name="clear()V"/>
+		<method name="compare(Ljavax/xml/datatype/XMLGregorianCalendar;)I"/>
+		<method name="getDay()I"/>
+		<method name="getEon()Ljava/math/BigInteger;"/>
+		<method name="getEonAndYear()Ljava/math/BigInteger;"/>
+		<method name="getFractionalSecond()Ljava/math/BigDecimal;"/>
+		<method name="getHour()I"/>
+		<method name="getMillisecond()I"/>
+		<method name="getMinute()I"/>
+		<method name="getMonth()I"/>
+		<method name="getSecond()I"/>
+		<method name="getTimeZone(I)Ljava/util/TimeZone;"/>
+		<method name="getTimezone()I"/>
+		<method name="getXMLSchemaType()Ljavax/xml/namespace/QName;"/>
+		<method name="getYear()I"/>
+		<method name="isValid()Z"/>
+		<method name="normalize()Ljavax/xml/datatype/XMLGregorianCalendar;"/>
+		<method name="reset()V"/>
+		<method name="setDay(I)V"/>
+		<method name="setFractionalSecond(Ljava/math/BigDecimal;)V"/>
+		<method name="setHour(I)V"/>
+		<method name="setMillisecond(I)V"/>
+		<method name="setMinute(I)V"/>
+		<method name="setMonth(I)V"/>
+		<method name="setSecond(I)V"/>
+		<method name="setTime(III)V"/>
+		<method name="setTime(IIII)V"/>
+		<method name="setTime(IIILjava/math/BigDecimal;)V"/>
+		<method name="setTimezone(I)V"/>
+		<method name="setYear(I)V"/>
+		<method name="setYear(Ljava/math/BigInteger;)V"/>
+		<method name="toGregorianCalendar()Ljava/util/GregorianCalendar;"/>
+		<method name="toGregorianCalendar(Ljava/util/TimeZone;Ljava/util/Locale;Ljavax/xml/datatype/XMLGregorianCalendar;)Ljava/util/GregorianCalendar;"/>
+		<method name="toXMLFormat()Ljava/lang/String;"/>
+	</class>
+	<class name="javax/xml/namespace/NamespaceContext" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getNamespaceURI(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getPrefix(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getPrefixes(Ljava/lang/String;)Ljava/util/Iterator;"/>
+	</class>
+	<class name="javax/xml/namespace/QName" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getLocalPart()Ljava/lang/String;"/>
+		<method name="getNamespaceURI()Ljava/lang/String;"/>
+		<method name="getPrefix()Ljava/lang/String;"/>
+		<method name="valueOf(Ljava/lang/String;)Ljavax/xml/namespace/QName;"/>
+	</class>
+	<class name="javax/xml/parsers/DocumentBuilder" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDOMImplementation()Lorg/w3c/dom/DOMImplementation;"/>
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
+		<method name="isNamespaceAware()Z"/>
+		<method name="isValidating()Z"/>
+		<method name="isXIncludeAware()Z"/>
+		<method name="newDocument()Lorg/w3c/dom/Document;"/>
+		<method name="parse(Ljava/io/File;)Lorg/w3c/dom/Document;"/>
+		<method name="parse(Ljava/io/InputStream;)Lorg/w3c/dom/Document;"/>
+		<method name="parse(Ljava/io/InputStream;Ljava/lang/String;)Lorg/w3c/dom/Document;"/>
+		<method name="parse(Ljava/lang/String;)Lorg/w3c/dom/Document;"/>
+		<method name="parse(Lorg/xml/sax/InputSource;)Lorg/w3c/dom/Document;"/>
+		<method name="reset()V"/>
+		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V"/>
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
+	</class>
+	<class name="javax/xml/parsers/DocumentBuilderFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
+		<method name="isCoalescing()Z"/>
+		<method name="isExpandEntityReferences()Z"/>
+		<method name="isIgnoringComments()Z"/>
+		<method name="isIgnoringElementContentWhitespace()Z"/>
+		<method name="isNamespaceAware()Z"/>
+		<method name="isValidating()Z"/>
+		<method name="isXIncludeAware()Z"/>
+		<method name="newDocumentBuilder()Ljavax/xml/parsers/DocumentBuilder;"/>
+		<method name="newInstance()Ljavax/xml/parsers/DocumentBuilderFactory;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/DocumentBuilderFactory;" since="9"/>
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setCoalescing(Z)V"/>
+		<method name="setExpandEntityReferences(Z)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setIgnoringComments(Z)V"/>
+		<method name="setIgnoringElementContentWhitespace(Z)V"/>
+		<method name="setNamespaceAware(Z)V"/>
+		<method name="setSchema(Ljavax/xml/validation/Schema;)V" since="8"/>
+		<method name="setValidating(Z)V"/>
+		<method name="setXIncludeAware(Z)V"/>
+	</class>
+	<class name="javax/xml/parsers/FactoryConfigurationError" since="1">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getException()Ljava/lang/Exception;"/>
+	</class>
+	<class name="javax/xml/parsers/ParserConfigurationException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/xml/parsers/SAXParser" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getParser()Lorg/xml/sax/Parser;"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
+		<method name="getXMLReader()Lorg/xml/sax/XMLReader;"/>
+		<method name="isNamespaceAware()Z"/>
+		<method name="isValidating()Z"/>
+		<method name="isXIncludeAware()Z"/>
+		<method name="parse(Ljava/io/File;Lorg/xml/sax/HandlerBase;)V"/>
+		<method name="parse(Ljava/io/File;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/HandlerBase;)V"/>
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/HandlerBase;Ljava/lang/String;)V"/>
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
+		<method name="parse(Ljava/io/InputStream;Lorg/xml/sax/helpers/DefaultHandler;Ljava/lang/String;)V"/>
+		<method name="parse(Ljava/lang/String;Lorg/xml/sax/HandlerBase;)V"/>
+		<method name="parse(Ljava/lang/String;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
+		<method name="parse(Lorg/xml/sax/InputSource;Lorg/xml/sax/HandlerBase;)V"/>
+		<method name="parse(Lorg/xml/sax/InputSource;Lorg/xml/sax/helpers/DefaultHandler;)V"/>
+		<method name="reset()V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="javax/xml/parsers/SAXParserFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getSchema()Ljavax/xml/validation/Schema;" since="8"/>
+		<method name="isNamespaceAware()Z"/>
+		<method name="isValidating()Z"/>
+		<method name="isXIncludeAware()Z"/>
+		<method name="newInstance()Ljavax/xml/parsers/SAXParserFactory;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/parsers/SAXParserFactory;" since="9"/>
+		<method name="newSAXParser()Ljavax/xml/parsers/SAXParser;"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setNamespaceAware(Z)V"/>
+		<method name="setSchema(Ljavax/xml/validation/Schema;)V" since="8"/>
+		<method name="setValidating(Z)V"/>
+		<method name="setXIncludeAware(Z)V"/>
+	</class>
+	<class name="javax/xml/transform/ErrorListener" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="error(Ljavax/xml/transform/TransformerException;)V"/>
+		<method name="fatalError(Ljavax/xml/transform/TransformerException;)V"/>
+		<method name="warning(Ljavax/xml/transform/TransformerException;)V"/>
+	</class>
+	<class name="javax/xml/transform/OutputKeys" since="8">
+		<extends name="java/lang/Object"/>
+		<field name="CDATA_SECTION_ELEMENTS"/>
+		<field name="DOCTYPE_PUBLIC"/>
+		<field name="DOCTYPE_SYSTEM"/>
+		<field name="ENCODING"/>
+		<field name="INDENT"/>
+		<field name="MEDIA_TYPE"/>
+		<field name="METHOD"/>
+		<field name="OMIT_XML_DECLARATION"/>
+		<field name="STANDALONE"/>
+		<field name="VERSION"/>
+	</class>
+	<class name="javax/xml/transform/Result" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+		<field name="PI_DISABLE_OUTPUT_ESCAPING"/>
+		<field name="PI_ENABLE_OUTPUT_ESCAPING"/>
+	</class>
+	<class name="javax/xml/transform/Source" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/xml/transform/SourceLocator" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getColumnNumber()I"/>
+		<method name="getLineNumber()I"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+	</class>
+	<class name="javax/xml/transform/Templates" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getOutputProperties()Ljava/util/Properties;"/>
+		<method name="newTransformer()Ljavax/xml/transform/Transformer;"/>
+	</class>
+	<class name="javax/xml/transform/Transformer" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="clearParameters()V"/>
+		<method name="getErrorListener()Ljavax/xml/transform/ErrorListener;"/>
+		<method name="getOutputProperties()Ljava/util/Properties;"/>
+		<method name="getOutputProperty(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getURIResolver()Ljavax/xml/transform/URIResolver;"/>
+		<method name="reset()V"/>
+		<method name="setErrorListener(Ljavax/xml/transform/ErrorListener;)V"/>
+		<method name="setOutputProperties(Ljava/util/Properties;)V"/>
+		<method name="setOutputProperty(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setURIResolver(Ljavax/xml/transform/URIResolver;)V"/>
+		<method name="transform(Ljavax/xml/transform/Source;Ljavax/xml/transform/Result;)V"/>
+	</class>
+	<class name="javax/xml/transform/TransformerConfigurationException" since="8">
+		<extends name="javax/xml/transform/TransformerException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="javax/xml/transform/TransformerException" since="8">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljavax/xml/transform/SourceLocator;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+		<method name="getException()Ljava/lang/Throwable;"/>
+		<method name="getLocationAsString()Ljava/lang/String;"/>
+		<method name="getLocator()Ljavax/xml/transform/SourceLocator;"/>
+		<method name="getMessageAndLocation()Ljava/lang/String;"/>
+		<method name="setLocator(Ljavax/xml/transform/SourceLocator;)V"/>
+	</class>
+	<class name="javax/xml/transform/TransformerFactory" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAssociatedStylesheet(Ljavax/xml/transform/Source;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljavax/xml/transform/Source;"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getErrorListener()Ljavax/xml/transform/ErrorListener;"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getURIResolver()Ljavax/xml/transform/URIResolver;"/>
+		<method name="newInstance()Ljavax/xml/transform/TransformerFactory;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/transform/TransformerFactory;" since="9"/>
+		<method name="newTemplates(Ljavax/xml/transform/Source;)Ljavax/xml/transform/Templates;"/>
+		<method name="newTransformer()Ljavax/xml/transform/Transformer;"/>
+		<method name="newTransformer(Ljavax/xml/transform/Source;)Ljavax/xml/transform/Transformer;"/>
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setErrorListener(Ljavax/xml/transform/ErrorListener;)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setURIResolver(Ljavax/xml/transform/URIResolver;)V"/>
+	</class>
+	<class name="javax/xml/transform/TransformerFactoryConfigurationError" since="8">
+		<extends name="java/lang/Error"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getException()Ljava/lang/Exception;"/>
+	</class>
+	<class name="javax/xml/transform/URIResolver" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="resolve(Ljava/lang/String;Ljava/lang/String;)Ljavax/xml/transform/Source;"/>
+	</class>
+	<class name="javax/xml/transform/dom/DOMLocator" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/xml/transform/SourceLocator"/>
+		<method name="getOriginatingNode()Lorg/w3c/dom/Node;"/>
+	</class>
+	<class name="javax/xml/transform/dom/DOMResult" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/xml/transform/Result"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/w3c/dom/Node;)V"/>
+		<method name="&lt;init>(Lorg/w3c/dom/Node;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V"/>
+		<method name="&lt;init>(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;Ljava/lang/String;)V"/>
+		<method name="getNextSibling()Lorg/w3c/dom/Node;"/>
+		<method name="getNode()Lorg/w3c/dom/Node;"/>
+		<method name="setNextSibling(Lorg/w3c/dom/Node;)V"/>
+		<method name="setNode(Lorg/w3c/dom/Node;)V"/>
+		<field name="FEATURE"/>
+	</class>
+	<class name="javax/xml/transform/dom/DOMSource" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/xml/transform/Source"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/w3c/dom/Node;)V"/>
+		<method name="&lt;init>(Lorg/w3c/dom/Node;Ljava/lang/String;)V"/>
+		<method name="getNode()Lorg/w3c/dom/Node;"/>
+		<method name="setNode(Lorg/w3c/dom/Node;)V"/>
+		<field name="FEATURE"/>
+	</class>
+	<class name="javax/xml/transform/sax/SAXResult" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/xml/transform/Result"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/ContentHandler;)V"/>
+		<method name="getHandler()Lorg/xml/sax/ContentHandler;"/>
+		<method name="getLexicalHandler()Lorg/xml/sax/ext/LexicalHandler;"/>
+		<method name="setHandler(Lorg/xml/sax/ContentHandler;)V"/>
+		<method name="setLexicalHandler(Lorg/xml/sax/ext/LexicalHandler;)V"/>
+		<field name="FEATURE"/>
+	</class>
+	<class name="javax/xml/transform/sax/SAXSource" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/xml/transform/Source"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/InputSource;)V"/>
+		<method name="&lt;init>(Lorg/xml/sax/XMLReader;Lorg/xml/sax/InputSource;)V"/>
+		<method name="getInputSource()Lorg/xml/sax/InputSource;"/>
+		<method name="getXMLReader()Lorg/xml/sax/XMLReader;"/>
+		<method name="setInputSource(Lorg/xml/sax/InputSource;)V"/>
+		<method name="setXMLReader(Lorg/xml/sax/XMLReader;)V"/>
+		<method name="sourceToInputSource(Ljavax/xml/transform/Source;)Lorg/xml/sax/InputSource;"/>
+		<field name="FEATURE"/>
+	</class>
+	<class name="javax/xml/transform/sax/SAXTransformerFactory" since="8">
+		<extends name="javax/xml/transform/TransformerFactory"/>
+		<method name="&lt;init>()V"/>
+		<method name="newTemplatesHandler()Ljavax/xml/transform/sax/TemplatesHandler;"/>
+		<method name="newTransformerHandler()Ljavax/xml/transform/sax/TransformerHandler;"/>
+		<method name="newTransformerHandler(Ljavax/xml/transform/Source;)Ljavax/xml/transform/sax/TransformerHandler;"/>
+		<method name="newTransformerHandler(Ljavax/xml/transform/Templates;)Ljavax/xml/transform/sax/TransformerHandler;"/>
+		<method name="newXMLFilter(Ljavax/xml/transform/Source;)Lorg/xml/sax/XMLFilter;"/>
+		<method name="newXMLFilter(Ljavax/xml/transform/Templates;)Lorg/xml/sax/XMLFilter;"/>
+		<field name="FEATURE"/>
+		<field name="FEATURE_XMLFILTER"/>
+	</class>
+	<class name="javax/xml/transform/sax/TemplatesHandler" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/ContentHandler"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="getTemplates()Ljavax/xml/transform/Templates;"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/xml/transform/sax/TransformerHandler" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/ContentHandler"/>
+		<implements name="org/xml/sax/DTDHandler"/>
+		<implements name="org/xml/sax/ext/LexicalHandler"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="getTransformer()Ljavax/xml/transform/Transformer;"/>
+		<method name="setResult(Ljavax/xml/transform/Result;)V"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+	</class>
+	<class name="javax/xml/transform/stream/StreamResult" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/xml/transform/Result"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/OutputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/Writer;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getOutputStream()Ljava/io/OutputStream;"/>
+		<method name="getWriter()Ljava/io/Writer;"/>
+		<method name="setOutputStream(Ljava/io/OutputStream;)V"/>
+		<method name="setSystemId(Ljava/io/File;)V"/>
+		<method name="setWriter(Ljava/io/Writer;)V"/>
+		<field name="FEATURE"/>
+	</class>
+	<class name="javax/xml/transform/stream/StreamSource" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/xml/transform/Source"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/File;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<method name="&lt;init>(Ljava/io/Reader;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getInputStream()Ljava/io/InputStream;"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getReader()Ljava/io/Reader;"/>
+		<method name="setInputStream(Ljava/io/InputStream;)V"/>
+		<method name="setPublicId(Ljava/lang/String;)V"/>
+		<method name="setReader(Ljava/io/Reader;)V"/>
+		<method name="setSystemId(Ljava/io/File;)V"/>
+		<field name="FEATURE"/>
+	</class>
+	<class name="javax/xml/validation/Schema" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="newValidator()Ljavax/xml/validation/Validator;"/>
+		<method name="newValidatorHandler()Ljavax/xml/validation/ValidatorHandler;"/>
+	</class>
+	<class name="javax/xml/validation/SchemaFactory" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;"/>
+		<method name="isSchemaLanguageSupported(Ljava/lang/String;)Z"/>
+		<method name="newInstance(Ljava/lang/String;)Ljavax/xml/validation/SchemaFactory;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/validation/SchemaFactory;" since="9"/>
+		<method name="newSchema()Ljavax/xml/validation/Schema;"/>
+		<method name="newSchema(Ljava/io/File;)Ljavax/xml/validation/Schema;"/>
+		<method name="newSchema(Ljava/net/URL;)Ljavax/xml/validation/Schema;"/>
+		<method name="newSchema(Ljavax/xml/transform/Source;)Ljavax/xml/validation/Schema;"/>
+		<method name="newSchema([Ljavax/xml/transform/Source;)Ljavax/xml/validation/Schema;"/>
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V"/>
+	</class>
+	<class name="javax/xml/validation/SchemaFactoryLoader" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="newFactory(Ljava/lang/String;)Ljavax/xml/validation/SchemaFactory;"/>
+	</class>
+	<class name="javax/xml/validation/TypeInfoProvider" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAttributeTypeInfo(I)Lorg/w3c/dom/TypeInfo;"/>
+		<method name="getElementTypeInfo()Lorg/w3c/dom/TypeInfo;"/>
+		<method name="isIdAttribute(I)Z"/>
+		<method name="isSpecified(I)Z"/>
+	</class>
+	<class name="javax/xml/validation/Validator" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;"/>
+		<method name="reset()V"/>
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V"/>
+		<method name="validate(Ljavax/xml/transform/Source;)V"/>
+		<method name="validate(Ljavax/xml/transform/Source;Ljavax/xml/transform/Result;)V"/>
+	</class>
+	<class name="javax/xml/validation/ValidatorHandler" since="8">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/ContentHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;"/>
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getResourceResolver()Lorg/w3c/dom/ls/LSResourceResolver;"/>
+		<method name="getTypeInfoProvider()Ljavax/xml/validation/TypeInfoProvider;"/>
+		<method name="setContentHandler(Lorg/xml/sax/ContentHandler;)V"/>
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setResourceResolver(Lorg/w3c/dom/ls/LSResourceResolver;)V"/>
+	</class>
+	<class name="javax/xml/xpath/XPath" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="compile(Ljava/lang/String;)Ljavax/xml/xpath/XPathExpression;"/>
+		<method name="evaluate(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="evaluate(Ljava/lang/String;Ljava/lang/Object;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
+		<method name="evaluate(Ljava/lang/String;Lorg/xml/sax/InputSource;)Ljava/lang/String;"/>
+		<method name="evaluate(Ljava/lang/String;Lorg/xml/sax/InputSource;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
+		<method name="getNamespaceContext()Ljavax/xml/namespace/NamespaceContext;"/>
+		<method name="getXPathFunctionResolver()Ljavax/xml/xpath/XPathFunctionResolver;"/>
+		<method name="getXPathVariableResolver()Ljavax/xml/xpath/XPathVariableResolver;"/>
+		<method name="reset()V"/>
+		<method name="setNamespaceContext(Ljavax/xml/namespace/NamespaceContext;)V"/>
+		<method name="setXPathFunctionResolver(Ljavax/xml/xpath/XPathFunctionResolver;)V"/>
+		<method name="setXPathVariableResolver(Ljavax/xml/xpath/XPathVariableResolver;)V"/>
+	</class>
+	<class name="javax/xml/xpath/XPathConstants" since="8">
+		<extends name="java/lang/Object"/>
+		<field name="BOOLEAN"/>
+		<field name="DOM_OBJECT_MODEL"/>
+		<field name="NODE"/>
+		<field name="NODESET"/>
+		<field name="NUMBER"/>
+		<field name="STRING"/>
+	</class>
+	<class name="javax/xml/xpath/XPathException" since="8">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="javax/xml/xpath/XPathExpression" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="evaluate(Ljava/lang/Object;)Ljava/lang/String;"/>
+		<method name="evaluate(Ljava/lang/Object;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
+		<method name="evaluate(Lorg/xml/sax/InputSource;)Ljava/lang/String;"/>
+		<method name="evaluate(Lorg/xml/sax/InputSource;Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
+	</class>
+	<class name="javax/xml/xpath/XPathExpressionException" since="8">
+		<extends name="javax/xml/xpath/XPathException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="javax/xml/xpath/XPathFactory" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="isObjectModelSupported(Ljava/lang/String;)Z"/>
+		<method name="newInstance()Ljavax/xml/xpath/XPathFactory;"/>
+		<method name="newInstance(Ljava/lang/String;)Ljavax/xml/xpath/XPathFactory;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)Ljavax/xml/xpath/XPathFactory;"/>
+		<method name="newXPath()Ljavax/xml/xpath/XPath;"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setXPathFunctionResolver(Ljavax/xml/xpath/XPathFunctionResolver;)V"/>
+		<method name="setXPathVariableResolver(Ljavax/xml/xpath/XPathVariableResolver;)V"/>
+		<field name="DEFAULT_OBJECT_MODEL_URI"/>
+		<field name="DEFAULT_PROPERTY_NAME"/>
+	</class>
+	<class name="javax/xml/xpath/XPathFactoryConfigurationException" since="8">
+		<extends name="javax/xml/xpath/XPathException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="javax/xml/xpath/XPathFunction" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="evaluate(Ljava/util/List;)Ljava/lang/Object;"/>
+	</class>
+	<class name="javax/xml/xpath/XPathFunctionException" since="8">
+		<extends name="javax/xml/xpath/XPathExpressionException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="javax/xml/xpath/XPathFunctionResolver" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="resolveFunction(Ljavax/xml/namespace/QName;I)Ljavax/xml/xpath/XPathFunction;"/>
+	</class>
+	<class name="javax/xml/xpath/XPathVariableResolver" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="resolveVariable(Ljavax/xml/namespace/QName;)Ljava/lang/Object;"/>
+	</class>
+	<class name="junit/framework/Assert" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="assertEquals(BB)V"/>
+		<method name="assertEquals(CC)V"/>
+		<method name="assertEquals(DDD)V"/>
+		<method name="assertEquals(FFF)V"/>
+		<method name="assertEquals(II)V"/>
+		<method name="assertEquals(JJ)V"/>
+		<method name="assertEquals(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="assertEquals(Ljava/lang/String;BB)V"/>
+		<method name="assertEquals(Ljava/lang/String;CC)V"/>
+		<method name="assertEquals(Ljava/lang/String;DDD)V"/>
+		<method name="assertEquals(Ljava/lang/String;FFF)V"/>
+		<method name="assertEquals(Ljava/lang/String;II)V"/>
+		<method name="assertEquals(Ljava/lang/String;JJ)V"/>
+		<method name="assertEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="assertEquals(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="assertEquals(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="assertEquals(Ljava/lang/String;SS)V"/>
+		<method name="assertEquals(Ljava/lang/String;ZZ)V"/>
+		<method name="assertEquals(SS)V"/>
+		<method name="assertEquals(ZZ)V"/>
+		<method name="assertFalse(Ljava/lang/String;Z)V"/>
+		<method name="assertFalse(Z)V"/>
+		<method name="assertNotNull(Ljava/lang/Object;)V"/>
+		<method name="assertNotNull(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="assertNotSame(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="assertNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="assertNull(Ljava/lang/Object;)V"/>
+		<method name="assertNull(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="assertSame(Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="assertSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V"/>
+		<method name="assertTrue(Ljava/lang/String;Z)V"/>
+		<method name="assertTrue(Z)V"/>
+		<method name="fail()V"/>
+		<method name="fail(Ljava/lang/String;)V"/>
+		<method name="failNotEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" since="16"/>
+		<method name="failNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" since="16"/>
+		<method name="failSame(Ljava/lang/String;)V" since="16"/>
+		<method name="format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String;" since="16"/>
+	</class>
+	<class name="junit/framework/AssertionFailedError" since="1">
+		<extends name="java/lang/AssertionError" since="16"/>
+		<extends name="java/lang/Error" removed="16"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="junit/framework/ComparisonFailure" since="1">
+		<extends name="junit/framework/AssertionFailedError"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getActual()Ljava/lang/String;" since="16"/>
+		<method name="getExpected()Ljava/lang/String;" since="16"/>
+	</class>
+	<class name="junit/framework/Protectable" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="protect()V"/>
+	</class>
+	<class name="junit/framework/Test" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="countTestCases()I"/>
+		<method name="run(Ljunit/framework/TestResult;)V"/>
+	</class>
+	<class name="junit/framework/TestCase" since="1">
+		<extends name="junit/framework/Assert"/>
+		<implements name="junit/framework/Test"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="createResult()Ljunit/framework/TestResult;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="run()Ljunit/framework/TestResult;"/>
+		<method name="runBare()V"/>
+		<method name="runTest()V"/>
+		<method name="setName(Ljava/lang/String;)V"/>
+		<method name="setUp()V"/>
+		<method name="tearDown()V"/>
+	</class>
+	<class name="junit/framework/TestFailure" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
+		<method name="exceptionMessage()Ljava/lang/String;"/>
+		<method name="failedTest()Ljunit/framework/Test;"/>
+		<method name="isFailure()Z"/>
+		<method name="thrownException()Ljava/lang/Throwable;"/>
+		<method name="trace()Ljava/lang/String;"/>
+		<field name="fFailedTest"/>
+		<field name="fThrownException"/>
+	</class>
+	<class name="junit/framework/TestListener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
+		<method name="addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V"/>
+		<method name="endTest(Ljunit/framework/Test;)V"/>
+		<method name="startTest(Ljunit/framework/Test;)V"/>
+	</class>
+	<class name="junit/framework/TestResult" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="addError(Ljunit/framework/Test;Ljava/lang/Throwable;)V"/>
+		<method name="addFailure(Ljunit/framework/Test;Ljunit/framework/AssertionFailedError;)V"/>
+		<method name="addListener(Ljunit/framework/TestListener;)V"/>
+		<method name="endTest(Ljunit/framework/Test;)V"/>
+		<method name="errorCount()I"/>
+		<method name="errors()Ljava/util/Enumeration;"/>
+		<method name="failureCount()I"/>
+		<method name="failures()Ljava/util/Enumeration;"/>
+		<method name="removeListener(Ljunit/framework/TestListener;)V"/>
+		<method name="run(Ljunit/framework/TestCase;)V"/>
+		<method name="runCount()I"/>
+		<method name="runProtected(Ljunit/framework/Test;Ljunit/framework/Protectable;)V"/>
+		<method name="shouldStop()Z"/>
+		<method name="startTest(Ljunit/framework/Test;)V"/>
+		<method name="stop()V"/>
+		<method name="wasSuccessful()Z"/>
+		<field name="fErrors"/>
+		<field name="fFailures"/>
+		<field name="fListeners"/>
+		<field name="fRunTests"/>
+	</class>
+	<class name="junit/framework/TestSuite" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="junit/framework/Test"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>([Ljava/lang/Class;)V" since="16"/>
+		<method name="&lt;init>([Ljava/lang/Class;Ljava/lang/String;)V" since="16"/>
+		<method name="addTest(Ljunit/framework/Test;)V"/>
+		<method name="addTestSuite(Ljava/lang/Class;)V"/>
+		<method name="createTest(Ljava/lang/Class;Ljava/lang/String;)Ljunit/framework/Test;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getTestConstructor(Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"/>
+		<method name="runTest(Ljunit/framework/Test;Ljunit/framework/TestResult;)V"/>
+		<method name="setName(Ljava/lang/String;)V"/>
+		<method name="testAt(I)Ljunit/framework/Test;"/>
+		<method name="testCount()I"/>
+		<method name="tests()Ljava/util/Enumeration;"/>
+		<method name="warning(Ljava/lang/String;)Ljunit/framework/Test;" since="16"/>
+	</class>
+	<class name="junit/runner/BaseTestRunner" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="junit/framework/TestListener"/>
+		<method name="&lt;init>()V"/>
+		<method name="clearStatus()V"/>
+		<method name="elapsedTimeAsString(J)Ljava/lang/String;"/>
+		<method name="extractClassName(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getFilteredTrace(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getFilteredTrace(Ljava/lang/Throwable;)Ljava/lang/String;"/>
+		<method name="getLoader()Ljunit/runner/TestSuiteLoader;" deprecated="16"/>
+		<method name="getPreference(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getPreference(Ljava/lang/String;I)I"/>
+		<method name="getPreferences()Ljava/util/Properties;"/>
+		<method name="getTest(Ljava/lang/String;)Ljunit/framework/Test;"/>
+		<method name="inVAJava()Z" deprecated="16"/>
+		<method name="loadSuiteClass(Ljava/lang/String;)Ljava/lang/Class;"/>
+		<method name="processArguments([Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="runFailed(Ljava/lang/String;)V"/>
+		<method name="savePreferences()V"/>
+		<method name="setLoading(Z)V"/>
+		<method name="setPreference(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setPreferences(Ljava/util/Properties;)V"/>
+		<method name="showStackRaw()Z"/>
+		<method name="testEnded(Ljava/lang/String;)V"/>
+		<method name="testFailed(ILjunit/framework/Test;Ljava/lang/Throwable;)V"/>
+		<method name="testStarted(Ljava/lang/String;)V"/>
+		<method name="truncate(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="useReloadingTestSuiteLoader()Z"/>
+		<field name="SUITE_METHODNAME"/>
+	</class>
+	<class name="junit/runner/TestSuiteLoader" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="load(Ljava/lang/String;)Ljava/lang/Class;"/>
+		<method name="reload(Ljava/lang/Class;)Ljava/lang/Class;"/>
+	</class>
+	<class name="junit/runner/Version" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="id()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/commons/logging/Log" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="debug(Ljava/lang/Object;)V"/>
+		<method name="debug(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
+		<method name="error(Ljava/lang/Object;)V"/>
+		<method name="error(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
+		<method name="fatal(Ljava/lang/Object;)V"/>
+		<method name="fatal(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
+		<method name="info(Ljava/lang/Object;)V"/>
+		<method name="info(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
+		<method name="isDebugEnabled()Z"/>
+		<method name="isErrorEnabled()Z"/>
+		<method name="isFatalEnabled()Z"/>
+		<method name="isInfoEnabled()Z"/>
+		<method name="isTraceEnabled()Z"/>
+		<method name="isWarnEnabled()Z"/>
+		<method name="trace(Ljava/lang/Object;)V"/>
+		<method name="trace(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
+		<method name="warn(Ljava/lang/Object;)V"/>
+		<method name="warn(Ljava/lang/Object;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/ConnectionClosedException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/ConnectionReuseStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="keepAlive(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z"/>
+	</class>
+	<class name="org/apache/http/FormattedHeader" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/Header"/>
+		<method name="getBuffer()Lorg/apache/http/util/CharArrayBuffer;"/>
+		<method name="getValuePos()I"/>
+	</class>
+	<class name="org/apache/http/Header" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getElements()[Lorg/apache/http/HeaderElement;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getValue()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/HeaderElement" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getParameter(I)Lorg/apache/http/NameValuePair;"/>
+		<method name="getParameterByName(Ljava/lang/String;)Lorg/apache/http/NameValuePair;"/>
+		<method name="getParameterCount()I"/>
+		<method name="getParameters()[Lorg/apache/http/NameValuePair;"/>
+		<method name="getValue()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/HeaderElementIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Iterator"/>
+		<method name="nextElement()Lorg/apache/http/HeaderElement;"/>
+	</class>
+	<class name="org/apache/http/HeaderIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Iterator"/>
+		<method name="nextHeader()Lorg/apache/http/Header;"/>
+	</class>
+	<class name="org/apache/http/HttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpConnection"/>
+		<method name="flush()V"/>
+		<method name="isResponseAvailable(I)Z"/>
+		<method name="receiveResponseEntity(Lorg/apache/http/HttpResponse;)V"/>
+		<method name="receiveResponseHeader()Lorg/apache/http/HttpResponse;"/>
+		<method name="sendRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V"/>
+		<method name="sendRequestHeader(Lorg/apache/http/HttpRequest;)V"/>
+	</class>
+	<class name="org/apache/http/HttpConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="close()V"/>
+		<method name="getMetrics()Lorg/apache/http/HttpConnectionMetrics;"/>
+		<method name="getSocketTimeout()I"/>
+		<method name="isOpen()Z"/>
+		<method name="isStale()Z"/>
+		<method name="setSocketTimeout(I)V"/>
+		<method name="shutdown()V"/>
+	</class>
+	<class name="org/apache/http/HttpConnectionMetrics" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getMetric(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getReceivedBytesCount()J"/>
+		<method name="getRequestCount()J"/>
+		<method name="getResponseCount()J"/>
+		<method name="getSentBytesCount()J"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="org/apache/http/HttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="consumeContent()V"/>
+		<method name="getContent()Ljava/io/InputStream;"/>
+		<method name="getContentEncoding()Lorg/apache/http/Header;"/>
+		<method name="getContentLength()J"/>
+		<method name="getContentType()Lorg/apache/http/Header;"/>
+		<method name="isChunked()Z"/>
+		<method name="isRepeatable()Z"/>
+		<method name="isStreaming()Z"/>
+		<method name="writeTo(Ljava/io/OutputStream;)V"/>
+	</class>
+	<class name="org/apache/http/HttpEntityEnclosingRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequest"/>
+		<method name="expectContinue()Z"/>
+		<method name="getEntity()Lorg/apache/http/HttpEntity;"/>
+		<method name="setEntity(Lorg/apache/http/HttpEntity;)V"/>
+	</class>
+	<class name="org/apache/http/HttpException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/HttpHost" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;)V"/>
+		<method name="getHostName()Ljava/lang/String;"/>
+		<method name="getPort()I"/>
+		<method name="getSchemeName()Ljava/lang/String;"/>
+		<method name="toHostString()Ljava/lang/String;"/>
+		<method name="toURI()Ljava/lang/String;"/>
+		<field name="DEFAULT_SCHEME_NAME"/>
+		<field name="hostname"/>
+		<field name="lcHostname"/>
+		<field name="port"/>
+		<field name="schemeName"/>
+	</class>
+	<class name="org/apache/http/HttpInetConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpConnection"/>
+		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
+		<method name="getLocalPort()I"/>
+		<method name="getRemoteAddress()Ljava/net/InetAddress;"/>
+		<method name="getRemotePort()I"/>
+	</class>
+	<class name="org/apache/http/HttpMessage" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="addHeader(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="addHeader(Lorg/apache/http/Header;)V"/>
+		<method name="containsHeader(Ljava/lang/String;)Z"/>
+		<method name="getAllHeaders()[Lorg/apache/http/Header;"/>
+		<method name="getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
+		<method name="getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;"/>
+		<method name="getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
+		<method name="getParams()Lorg/apache/http/params/HttpParams;"/>
+		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;"/>
+		<method name="headerIterator()Lorg/apache/http/HeaderIterator;"/>
+		<method name="headerIterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;"/>
+		<method name="removeHeader(Lorg/apache/http/Header;)V"/>
+		<method name="removeHeaders(Ljava/lang/String;)V"/>
+		<method name="setHeader(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setHeader(Lorg/apache/http/Header;)V"/>
+		<method name="setHeaders([Lorg/apache/http/Header;)V"/>
+		<method name="setParams(Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/HttpRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpMessage"/>
+		<method name="getRequestLine()Lorg/apache/http/RequestLine;"/>
+	</class>
+	<class name="org/apache/http/HttpRequestFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="newHttpRequest(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/HttpRequest;"/>
+		<method name="newHttpRequest(Lorg/apache/http/RequestLine;)Lorg/apache/http/HttpRequest;"/>
+	</class>
+	<class name="org/apache/http/HttpRequestInterceptor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="process(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)V"/>
+	</class>
+	<class name="org/apache/http/HttpResponse" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpMessage"/>
+		<method name="getEntity()Lorg/apache/http/HttpEntity;"/>
+		<method name="getLocale()Ljava/util/Locale;"/>
+		<method name="getStatusLine()Lorg/apache/http/StatusLine;"/>
+		<method name="setEntity(Lorg/apache/http/HttpEntity;)V"/>
+		<method name="setLocale(Ljava/util/Locale;)V"/>
+		<method name="setReasonPhrase(Ljava/lang/String;)V"/>
+		<method name="setStatusCode(I)V"/>
+		<method name="setStatusLine(Lorg/apache/http/ProtocolVersion;I)V"/>
+		<method name="setStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V"/>
+		<method name="setStatusLine(Lorg/apache/http/StatusLine;)V"/>
+	</class>
+	<class name="org/apache/http/HttpResponseFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="newHttpResponse(Lorg/apache/http/ProtocolVersion;ILorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+		<method name="newHttpResponse(Lorg/apache/http/StatusLine;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+	</class>
+	<class name="org/apache/http/HttpResponseInterceptor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="process(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
+	</class>
+	<class name="org/apache/http/HttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpConnection"/>
+		<method name="flush()V"/>
+		<method name="receiveRequestEntity(Lorg/apache/http/HttpEntityEnclosingRequest;)V"/>
+		<method name="receiveRequestHeader()Lorg/apache/http/HttpRequest;"/>
+		<method name="sendResponseEntity(Lorg/apache/http/HttpResponse;)V"/>
+		<method name="sendResponseHeader(Lorg/apache/http/HttpResponse;)V"/>
+	</class>
+	<class name="org/apache/http/HttpStatus" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="SC_ACCEPTED"/>
+		<field name="SC_BAD_GATEWAY"/>
+		<field name="SC_BAD_REQUEST"/>
+		<field name="SC_CONFLICT"/>
+		<field name="SC_CONTINUE"/>
+		<field name="SC_CREATED"/>
+		<field name="SC_EXPECTATION_FAILED"/>
+		<field name="SC_FAILED_DEPENDENCY"/>
+		<field name="SC_FORBIDDEN"/>
+		<field name="SC_GATEWAY_TIMEOUT"/>
+		<field name="SC_GONE"/>
+		<field name="SC_HTTP_VERSION_NOT_SUPPORTED"/>
+		<field name="SC_INSUFFICIENT_SPACE_ON_RESOURCE"/>
+		<field name="SC_INSUFFICIENT_STORAGE"/>
+		<field name="SC_INTERNAL_SERVER_ERROR"/>
+		<field name="SC_LENGTH_REQUIRED"/>
+		<field name="SC_LOCKED"/>
+		<field name="SC_METHOD_FAILURE"/>
+		<field name="SC_METHOD_NOT_ALLOWED"/>
+		<field name="SC_MOVED_PERMANENTLY"/>
+		<field name="SC_MOVED_TEMPORARILY"/>
+		<field name="SC_MULTIPLE_CHOICES"/>
+		<field name="SC_MULTI_STATUS"/>
+		<field name="SC_NON_AUTHORITATIVE_INFORMATION"/>
+		<field name="SC_NOT_ACCEPTABLE"/>
+		<field name="SC_NOT_FOUND"/>
+		<field name="SC_NOT_IMPLEMENTED"/>
+		<field name="SC_NOT_MODIFIED"/>
+		<field name="SC_NO_CONTENT"/>
+		<field name="SC_OK"/>
+		<field name="SC_PARTIAL_CONTENT"/>
+		<field name="SC_PAYMENT_REQUIRED"/>
+		<field name="SC_PRECONDITION_FAILED"/>
+		<field name="SC_PROCESSING"/>
+		<field name="SC_PROXY_AUTHENTICATION_REQUIRED"/>
+		<field name="SC_REQUESTED_RANGE_NOT_SATISFIABLE"/>
+		<field name="SC_REQUEST_TIMEOUT"/>
+		<field name="SC_REQUEST_TOO_LONG"/>
+		<field name="SC_REQUEST_URI_TOO_LONG"/>
+		<field name="SC_RESET_CONTENT"/>
+		<field name="SC_SEE_OTHER"/>
+		<field name="SC_SERVICE_UNAVAILABLE"/>
+		<field name="SC_SWITCHING_PROTOCOLS"/>
+		<field name="SC_TEMPORARY_REDIRECT"/>
+		<field name="SC_UNAUTHORIZED"/>
+		<field name="SC_UNPROCESSABLE_ENTITY"/>
+		<field name="SC_UNSUPPORTED_MEDIA_TYPE"/>
+		<field name="SC_USE_PROXY"/>
+	</class>
+	<class name="org/apache/http/HttpVersion" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolVersion"/>
+		<method name="&lt;init>(II)V"/>
+		<field name="HTTP"/>
+		<field name="HTTP_0_9"/>
+		<field name="HTTP_1_0"/>
+		<field name="HTTP_1_1"/>
+	</class>
+	<class name="org/apache/http/MalformedChunkCodingException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/MethodNotSupportedException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/HttpException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/NameValuePair" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getValue()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/NoHttpResponseException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/ParseException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/ProtocolException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/HttpException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/ProtocolVersion" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/String;II)V"/>
+		<method name="compareToVersion(Lorg/apache/http/ProtocolVersion;)I"/>
+		<method name="forVersion(II)Lorg/apache/http/ProtocolVersion;"/>
+		<method name="getMajor()I"/>
+		<method name="getMinor()I"/>
+		<method name="getProtocol()Ljava/lang/String;"/>
+		<method name="greaterEquals(Lorg/apache/http/ProtocolVersion;)Z"/>
+		<method name="isComparable(Lorg/apache/http/ProtocolVersion;)Z"/>
+		<method name="lessEquals(Lorg/apache/http/ProtocolVersion;)Z"/>
+		<field name="major"/>
+		<field name="minor"/>
+		<field name="protocol"/>
+	</class>
+	<class name="org/apache/http/ReasonPhraseCatalog" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getReason(ILjava/util/Locale;)Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/RequestLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getMethod()Ljava/lang/String;"/>
+		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;"/>
+		<method name="getUri()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/StatusLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getProtocolVersion()Lorg/apache/http/ProtocolVersion;"/>
+		<method name="getReasonPhrase()Ljava/lang/String;"/>
+		<method name="getStatusCode()I"/>
+	</class>
+	<class name="org/apache/http/TokenIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/util/Iterator"/>
+		<method name="nextToken()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/UnsupportedHttpVersionException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/auth/AUTH" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="PROXY_AUTH"/>
+		<field name="PROXY_AUTH_RESP"/>
+		<field name="WWW_AUTH"/>
+		<field name="WWW_AUTH_RESP"/>
+	</class>
+	<class name="org/apache/http/auth/AuthScheme" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="authenticate(Lorg/apache/http/auth/Credentials;Lorg/apache/http/HttpRequest;)Lorg/apache/http/Header;"/>
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getRealm()Ljava/lang/String;"/>
+		<method name="getSchemeName()Ljava/lang/String;"/>
+		<method name="isComplete()Z"/>
+		<method name="isConnectionBased()Z"/>
+		<method name="processChallenge(Lorg/apache/http/Header;)V"/>
+	</class>
+	<class name="org/apache/http/auth/AuthSchemeFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="newInstance(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/auth/AuthScheme;"/>
+	</class>
+	<class name="org/apache/http/auth/AuthSchemeRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAuthScheme(Ljava/lang/String;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/auth/AuthScheme;"/>
+		<method name="getSchemeNames()Ljava/util/List;"/>
+		<method name="register(Ljava/lang/String;Lorg/apache/http/auth/AuthSchemeFactory;)V"/>
+		<method name="setItems(Ljava/util/Map;)V"/>
+		<method name="unregister(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/auth/AuthScope" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;I)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/auth/AuthScope;)V"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getPort()I"/>
+		<method name="getRealm()Ljava/lang/String;"/>
+		<method name="getScheme()Ljava/lang/String;"/>
+		<method name="match(Lorg/apache/http/auth/AuthScope;)I"/>
+		<field name="ANY"/>
+		<field name="ANY_HOST"/>
+		<field name="ANY_PORT"/>
+		<field name="ANY_REALM"/>
+		<field name="ANY_SCHEME"/>
+	</class>
+	<class name="org/apache/http/auth/AuthState" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAuthScheme()Lorg/apache/http/auth/AuthScheme;"/>
+		<method name="getAuthScope()Lorg/apache/http/auth/AuthScope;"/>
+		<method name="getCredentials()Lorg/apache/http/auth/Credentials;"/>
+		<method name="invalidate()V"/>
+		<method name="isValid()Z"/>
+		<method name="setAuthScheme(Lorg/apache/http/auth/AuthScheme;)V"/>
+		<method name="setAuthScope(Lorg/apache/http/auth/AuthScope;)V"/>
+		<method name="setCredentials(Lorg/apache/http/auth/Credentials;)V"/>
+	</class>
+	<class name="org/apache/http/auth/AuthenticationException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/auth/BasicUserPrincipal" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/Principal"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/auth/Credentials" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getPassword()Ljava/lang/String;"/>
+		<method name="getUserPrincipal()Ljava/security/Principal;"/>
+	</class>
+	<class name="org/apache/http/auth/InvalidCredentialsException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/auth/AuthenticationException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/auth/MalformedChallengeException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/auth/NTCredentials" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/auth/Credentials"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getDomain()Ljava/lang/String;"/>
+		<method name="getUserName()Ljava/lang/String;"/>
+		<method name="getWorkstation()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/auth/NTUserPrincipal" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/security/Principal"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getDomain()Ljava/lang/String;"/>
+		<method name="getUsername()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/auth/UsernamePasswordCredentials" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/auth/Credentials"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getUserName()Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/auth/params/AuthPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="CREDENTIAL_CHARSET"/>
+	</class>
+	<class name="org/apache/http/auth/params/AuthParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setCredentialCharset(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/auth/params/AuthParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getCredentialCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
+		<method name="setCredentialCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/client/AuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getChallenges(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/util/Map;"/>
+		<method name="isAuthenticationRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z"/>
+		<method name="selectScheme(Ljava/util/Map;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/auth/AuthScheme;"/>
+	</class>
+	<class name="org/apache/http/client/CircularRedirectException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/RedirectException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/client/ClientProtocolException" since="1" deprecated="22" removed="23">
+		<extends name="java/io/IOException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/client/CookieStore" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="addCookie(Lorg/apache/http/cookie/Cookie;)V"/>
+		<method name="clear()V"/>
+		<method name="clearExpired(Ljava/util/Date;)Z"/>
+		<method name="getCookies()Ljava/util/List;"/>
+	</class>
+	<class name="org/apache/http/client/CredentialsProvider" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="clear()V"/>
+		<method name="getCredentials(Lorg/apache/http/auth/AuthScope;)Lorg/apache/http/auth/Credentials;"/>
+		<method name="setCredentials(Lorg/apache/http/auth/AuthScope;Lorg/apache/http/auth/Credentials;)V"/>
+	</class>
+	<class name="org/apache/http/client/HttpClient" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;)Lorg/apache/http/HttpResponse;"/>
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;"/>
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;"/>
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpResponse;"/>
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;)Ljava/lang/Object;"/>
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/client/ResponseHandler;Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;"/>
+		<method name="execute(Lorg/apache/http/client/methods/HttpUriRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+		<method name="getConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;"/>
+		<method name="getParams()Lorg/apache/http/params/HttpParams;"/>
+	</class>
+	<class name="org/apache/http/client/HttpRequestRetryHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="retryRequest(Ljava/io/IOException;ILorg/apache/http/protocol/HttpContext;)Z"/>
+	</class>
+	<class name="org/apache/http/client/HttpResponseException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/ClientProtocolException"/>
+		<method name="&lt;init>(ILjava/lang/String;)V"/>
+		<method name="getStatusCode()I"/>
+	</class>
+	<class name="org/apache/http/client/NonRepeatableRequestException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/client/RedirectException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/client/RedirectHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getLocationURI(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Ljava/net/URI;"/>
+		<method name="isRedirectRequested(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Z"/>
+	</class>
+	<class name="org/apache/http/client/RequestDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="execute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+	</class>
+	<class name="org/apache/http/client/ResponseHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="handleResponse(Lorg/apache/http/HttpResponse;)Ljava/lang/Object;"/>
+	</class>
+	<class name="org/apache/http/client/UserTokenHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getUserToken(Lorg/apache/http/protocol/HttpContext;)Ljava/lang/Object;"/>
+	</class>
+	<class name="org/apache/http/client/entity/UrlEncodedFormEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/StringEntity"/>
+		<method name="&lt;init>(Ljava/util/List;)V"/>
+		<method name="&lt;init>(Ljava/util/List;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/client/methods/AbortableHttpRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="abort()V"/>
+		<method name="setConnectionRequest(Lorg/apache/http/conn/ClientConnectionRequest;)V"/>
+		<method name="setReleaseTrigger(Lorg/apache/http/conn/ConnectionReleaseTrigger;)V"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpDelete" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<field name="METHOD_NAME"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
+		<implements name="org/apache/http/HttpEntityEnclosingRequest"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpGet" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<field name="METHOD_NAME"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpHead" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<field name="METHOD_NAME"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpOptions" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<method name="getAllowedMethods(Lorg/apache/http/HttpResponse;)Ljava/util/Set;"/>
+		<field name="METHOD_NAME"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpPost" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<field name="METHOD_NAME"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpPut" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpEntityEnclosingRequestBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<field name="METHOD_NAME"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpRequestBase" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/client/methods/AbortableHttpRequest"/>
+		<implements name="org/apache/http/client/methods/HttpUriRequest"/>
+		<method name="&lt;init>()V"/>
+		<method name="setURI(Ljava/net/URI;)V"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpTrace" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/client/methods/HttpRequestBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/net/URI;)V"/>
+		<field name="METHOD_NAME"/>
+	</class>
+	<class name="org/apache/http/client/methods/HttpUriRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequest"/>
+		<method name="abort()V"/>
+		<method name="getMethod()Ljava/lang/String;"/>
+		<method name="getURI()Ljava/net/URI;"/>
+		<method name="isAborted()Z"/>
+	</class>
+	<class name="org/apache/http/client/params/AllClientPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/auth/params/AuthPNames"/>
+		<implements name="org/apache/http/client/params/ClientPNames"/>
+		<implements name="org/apache/http/conn/params/ConnConnectionPNames"/>
+		<implements name="org/apache/http/conn/params/ConnManagerPNames"/>
+		<implements name="org/apache/http/conn/params/ConnRoutePNames"/>
+		<implements name="org/apache/http/cookie/params/CookieSpecPNames"/>
+		<implements name="org/apache/http/params/CoreConnectionPNames"/>
+		<implements name="org/apache/http/params/CoreProtocolPNames"/>
+	</class>
+	<class name="org/apache/http/client/params/AuthPolicy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="BASIC"/>
+		<field name="DIGEST"/>
+		<field name="NTLM"/>
+	</class>
+	<class name="org/apache/http/client/params/ClientPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="ALLOW_CIRCULAR_REDIRECTS"/>
+		<field name="CONNECTION_MANAGER_FACTORY"/>
+		<field name="CONNECTION_MANAGER_FACTORY_CLASS_NAME"/>
+		<field name="COOKIE_POLICY"/>
+		<field name="DEFAULT_HEADERS"/>
+		<field name="DEFAULT_HOST"/>
+		<field name="HANDLE_AUTHENTICATION"/>
+		<field name="HANDLE_REDIRECTS"/>
+		<field name="MAX_REDIRECTS"/>
+		<field name="REJECT_RELATIVE_REDIRECT"/>
+		<field name="VIRTUAL_HOST"/>
+	</class>
+	<class name="org/apache/http/client/params/ClientParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setAllowCircularRedirects(Z)V"/>
+		<method name="setConnectionManagerFactory(Lorg/apache/http/conn/ClientConnectionManagerFactory;)V"/>
+		<method name="setConnectionManagerFactoryClassName(Ljava/lang/String;)V"/>
+		<method name="setCookiePolicy(Ljava/lang/String;)V"/>
+		<method name="setDefaultHeaders(Ljava/util/Collection;)V"/>
+		<method name="setDefaultHost(Lorg/apache/http/HttpHost;)V"/>
+		<method name="setHandleAuthentication(Z)V"/>
+		<method name="setHandleRedirects(Z)V"/>
+		<method name="setMaxRedirects(I)V"/>
+		<method name="setRejectRelativeRedirect(Z)V"/>
+		<method name="setVirtualHost(Lorg/apache/http/HttpHost;)V"/>
+	</class>
+	<class name="org/apache/http/client/params/CookiePolicy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="BEST_MATCH"/>
+		<field name="BROWSER_COMPATIBILITY"/>
+		<field name="NETSCAPE"/>
+		<field name="RFC_2109"/>
+		<field name="RFC_2965"/>
+	</class>
+	<class name="org/apache/http/client/params/HttpClientParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getCookiePolicy(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
+		<method name="isAuthenticating(Lorg/apache/http/params/HttpParams;)Z"/>
+		<method name="isRedirecting(Lorg/apache/http/params/HttpParams;)Z"/>
+		<method name="setAuthenticating(Lorg/apache/http/params/HttpParams;Z)V"/>
+		<method name="setCookiePolicy(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
+		<method name="setRedirecting(Lorg/apache/http/params/HttpParams;Z)V"/>
+	</class>
+	<class name="org/apache/http/client/protocol/ClientContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="AUTHSCHEME_REGISTRY"/>
+		<field name="AUTH_SCHEME_PREF"/>
+		<field name="COOKIESPEC_REGISTRY"/>
+		<field name="COOKIE_ORIGIN"/>
+		<field name="COOKIE_SPEC"/>
+		<field name="COOKIE_STORE"/>
+		<field name="CREDS_PROVIDER"/>
+		<field name="PROXY_AUTH_STATE"/>
+		<field name="TARGET_AUTH_STATE"/>
+		<field name="USER_TOKEN"/>
+	</class>
+	<class name="org/apache/http/client/protocol/ClientContextConfigurer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/protocol/ClientContext"/>
+		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;)V"/>
+		<method name="setAuthSchemePref(Ljava/util/List;)V"/>
+		<method name="setAuthSchemeRegistry(Lorg/apache/http/auth/AuthSchemeRegistry;)V"/>
+		<method name="setCookieSpecRegistry(Lorg/apache/http/cookie/CookieSpecRegistry;)V"/>
+		<method name="setCookieStore(Lorg/apache/http/client/CookieStore;)V"/>
+		<method name="setCredentialsProvider(Lorg/apache/http/client/CredentialsProvider;)V"/>
+	</class>
+	<class name="org/apache/http/client/protocol/RequestAddCookies" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/client/protocol/RequestDefaultHeaders" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/client/protocol/RequestProxyAuthentication" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/client/protocol/RequestTargetAuthentication" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/client/protocol/ResponseProcessCookies" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpResponseInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/client/utils/CloneUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="clone(Ljava/lang/Object;)Ljava/lang/Object;"/>
+	</class>
+	<class name="org/apache/http/client/utils/URIUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="createURI(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/net/URI;"/>
+		<method name="resolve(Ljava/net/URI;Ljava/lang/String;)Ljava/net/URI;"/>
+		<method name="resolve(Ljava/net/URI;Ljava/net/URI;)Ljava/net/URI;"/>
+		<method name="rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;)Ljava/net/URI;"/>
+		<method name="rewriteURI(Ljava/net/URI;Lorg/apache/http/HttpHost;Z)Ljava/net/URI;"/>
+	</class>
+	<class name="org/apache/http/client/utils/URLEncodedUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="format(Ljava/util/List;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isEncoded(Lorg/apache/http/HttpEntity;)Z"/>
+		<method name="parse(Ljava/net/URI;Ljava/lang/String;)Ljava/util/List;"/>
+		<method name="parse(Ljava/util/List;Ljava/util/Scanner;Ljava/lang/String;)V"/>
+		<method name="parse(Lorg/apache/http/HttpEntity;)Ljava/util/List;"/>
+		<field name="CONTENT_TYPE"/>
+	</class>
+	<class name="org/apache/http/conn/BasicEofSensorWatcher" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/EofSensorWatcher"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ManagedClientConnection;Z)V"/>
+		<field name="attemptReuse"/>
+		<field name="managedConn"/>
+	</class>
+	<class name="org/apache/http/conn/BasicManagedEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/HttpEntityWrapper"/>
+		<implements name="org/apache/http/conn/ConnectionReleaseTrigger"/>
+		<implements name="org/apache/http/conn/EofSensorWatcher"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpEntity;Lorg/apache/http/conn/ManagedClientConnection;Z)V"/>
+		<method name="releaseManagedConnection()V"/>
+		<field name="attemptReuse"/>
+		<field name="managedConn"/>
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionManager" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="closeExpiredConnections()V"/>
+		<method name="closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V"/>
+		<method name="getSchemeRegistry()Lorg/apache/http/conn/scheme/SchemeRegistry;"/>
+		<method name="releaseConnection(Lorg/apache/http/conn/ManagedClientConnection;JLjava/util/concurrent/TimeUnit;)V"/>
+		<method name="requestConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ClientConnectionRequest;"/>
+		<method name="shutdown()V"/>
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionManagerFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="newInstance(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionManager;"/>
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionOperator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="createConnection()Lorg/apache/http/conn/OperatedClientConnection;"/>
+		<method name="openConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="updateSecureConnection(Lorg/apache/http/conn/OperatedClientConnection;Lorg/apache/http/HttpHost;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/conn/ClientConnectionRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="abortRequest()V"/>
+		<method name="getConnection(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/conn/ManagedClientConnection;"/>
+	</class>
+	<class name="org/apache/http/conn/ConnectTimeoutException" since="1" deprecated="22">
+		<extends name="java/io/InterruptedIOException"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/ConnectionKeepAliveStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getKeepAliveDuration(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)J"/>
+	</class>
+	<class name="org/apache/http/conn/ConnectionPoolTimeoutException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/conn/ConnectTimeoutException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/conn/ConnectionReleaseTrigger" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="abortConnection()V"/>
+		<method name="releaseConnection()V"/>
+	</class>
+	<class name="org/apache/http/conn/EofSensorInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream"/>
+		<implements name="org/apache/http/conn/ConnectionReleaseTrigger"/>
+		<method name="&lt;init>(Ljava/io/InputStream;Lorg/apache/http/conn/EofSensorWatcher;)V"/>
+		<method name="checkAbort()V"/>
+		<method name="checkClose()V"/>
+		<method name="checkEOF(I)V"/>
+		<method name="isReadAllowed()Z"/>
+		<field name="wrappedStream"/>
+	</class>
+	<class name="org/apache/http/conn/EofSensorWatcher" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="eofDetected(Ljava/io/InputStream;)Z"/>
+		<method name="streamAbort(Ljava/io/InputStream;)Z"/>
+		<method name="streamClosed(Ljava/io/InputStream;)Z"/>
+	</class>
+	<class name="org/apache/http/conn/HttpHostConnectException" since="1" deprecated="22" removed="23">
+		<extends name="java/net/ConnectException"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/ConnectException;)V"/>
+		<method name="getHost()Lorg/apache/http/HttpHost;"/>
+	</class>
+	<class name="org/apache/http/conn/ManagedClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpClientConnection"/>
+		<implements name="org/apache/http/HttpInetConnection"/>
+		<implements name="org/apache/http/conn/ConnectionReleaseTrigger"/>
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
+		<method name="getSSLSession()Ljavax/net/ssl/SSLSession;"/>
+		<method name="getState()Ljava/lang/Object;"/>
+		<method name="isMarkedReusable()Z"/>
+		<method name="isSecure()Z"/>
+		<method name="layerProtocol(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="markReusable()V"/>
+		<method name="open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setIdleDuration(JLjava/util/concurrent/TimeUnit;)V"/>
+		<method name="setState(Ljava/lang/Object;)V"/>
+		<method name="tunnelProxy(Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V"/>
+		<method name="tunnelTarget(ZLorg/apache/http/params/HttpParams;)V"/>
+		<method name="unmarkReusable()V"/>
+	</class>
+	<class name="org/apache/http/conn/MultihomePlainSocketFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/scheme/SocketFactory"/>
+		<method name="getSocketFactory()Lorg/apache/http/conn/MultihomePlainSocketFactory;"/>
+	</class>
+	<class name="org/apache/http/conn/OperatedClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpClientConnection"/>
+		<implements name="org/apache/http/HttpInetConnection"/>
+		<method name="getSocket()Ljava/net/Socket;"/>
+		<method name="getTargetHost()Lorg/apache/http/HttpHost;"/>
+		<method name="isSecure()Z"/>
+		<method name="openCompleted(ZLorg/apache/http/params/HttpParams;)V"/>
+		<method name="opening(Ljava/net/Socket;Lorg/apache/http/HttpHost;)V"/>
+		<method name="update(Ljava/net/Socket;Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnConnectionPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="MAX_STATUS_LINE_GARBAGE"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnConnectionParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setMaxStatusLineGarbage(I)V"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnManagerPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="MAX_CONNECTIONS_PER_ROUTE"/>
+		<field name="MAX_TOTAL_CONNECTIONS"/>
+		<field name="TIMEOUT"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnManagerParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setConnectionsPerRoute(Lorg/apache/http/conn/params/ConnPerRouteBean;)V"/>
+		<method name="setMaxTotalConnections(I)V"/>
+		<method name="setTimeout(J)V"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnManagerParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/params/ConnManagerPNames"/>
+		<method name="&lt;init>()V"/>
+		<method name="getMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/params/ConnPerRoute;"/>
+		<method name="getMaxTotalConnections(Lorg/apache/http/params/HttpParams;)I"/>
+		<method name="getTimeout(Lorg/apache/http/params/HttpParams;)J"/>
+		<method name="setMaxConnectionsPerRoute(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/params/ConnPerRoute;)V"/>
+		<method name="setMaxTotalConnections(Lorg/apache/http/params/HttpParams;I)V"/>
+		<method name="setTimeout(Lorg/apache/http/params/HttpParams;J)V"/>
+		<field name="DEFAULT_MAX_TOTAL_CONNECTIONS"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnPerRoute" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;)I"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnPerRouteBean" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/params/ConnPerRoute"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="getDefaultMax()I"/>
+		<method name="setDefaultMaxPerRoute(I)V"/>
+		<method name="setMaxForRoute(Lorg/apache/http/conn/routing/HttpRoute;I)V"/>
+		<method name="setMaxForRoutes(Ljava/util/Map;)V"/>
+		<field name="DEFAULT_MAX_CONNECTIONS_PER_ROUTE"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnRoutePNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="DEFAULT_PROXY"/>
+		<field name="FORCED_ROUTE"/>
+		<field name="LOCAL_ADDRESS"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnRouteParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setDefaultProxy(Lorg/apache/http/HttpHost;)V"/>
+		<method name="setForcedRoute(Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+		<method name="setLocalAddress(Ljava/net/InetAddress;)V"/>
+	</class>
+	<class name="org/apache/http/conn/params/ConnRouteParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/params/ConnRoutePNames"/>
+		<method name="getDefaultProxy(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/HttpHost;"/>
+		<method name="getForcedRoute(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/conn/routing/HttpRoute;"/>
+		<method name="getLocalAddress(Lorg/apache/http/params/HttpParams;)Ljava/net/InetAddress;"/>
+		<method name="setDefaultProxy(Lorg/apache/http/params/HttpParams;Lorg/apache/http/HttpHost;)V"/>
+		<method name="setForcedRoute(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+		<method name="setLocalAddress(Lorg/apache/http/params/HttpParams;Ljava/net/InetAddress;)V"/>
+		<field name="NO_HOST"/>
+		<field name="NO_ROUTE"/>
+	</class>
+	<class name="org/apache/http/conn/routing/BasicRouteDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/routing/HttpRouteDirector"/>
+		<method name="&lt;init>()V"/>
+		<method name="directStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I"/>
+		<method name="firstStep(Lorg/apache/http/conn/routing/RouteInfo;)I"/>
+		<method name="proxiedStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I"/>
+	</class>
+	<class name="org/apache/http/conn/routing/HttpRoute" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/conn/routing/RouteInfo"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/HttpHost;Z)V"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;Z)V"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;[Lorg/apache/http/HttpHost;ZLorg/apache/http/conn/routing/RouteInfo$TunnelType;Lorg/apache/http/conn/routing/RouteInfo$LayerType;)V"/>
+	</class>
+	<class name="org/apache/http/conn/routing/HttpRouteDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="nextStep(Lorg/apache/http/conn/routing/RouteInfo;Lorg/apache/http/conn/routing/RouteInfo;)I"/>
+		<field name="COMPLETE"/>
+		<field name="CONNECT_PROXY"/>
+		<field name="CONNECT_TARGET"/>
+		<field name="LAYER_PROTOCOL"/>
+		<field name="TUNNEL_PROXY"/>
+		<field name="TUNNEL_TARGET"/>
+		<field name="UNREACHABLE"/>
+	</class>
+	<class name="org/apache/http/conn/routing/HttpRoutePlanner" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;"/>
+	</class>
+	<class name="org/apache/http/conn/routing/RouteInfo" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getHopCount()I"/>
+		<method name="getHopTarget(I)Lorg/apache/http/HttpHost;"/>
+		<method name="getLayerType()Lorg/apache/http/conn/routing/RouteInfo$LayerType;"/>
+		<method name="getLocalAddress()Ljava/net/InetAddress;"/>
+		<method name="getProxyHost()Lorg/apache/http/HttpHost;"/>
+		<method name="getTargetHost()Lorg/apache/http/HttpHost;"/>
+		<method name="getTunnelType()Lorg/apache/http/conn/routing/RouteInfo$TunnelType;"/>
+		<method name="isLayered()Z"/>
+		<method name="isSecure()Z"/>
+		<method name="isTunnelled()Z"/>
+	</class>
+	<class name="org/apache/http/conn/routing/RouteInfo$LayerType" since="1" removed="23">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Lorg/apache/http/conn/routing/RouteInfo$LayerType;"/>
+		<method name="values()[Lorg/apache/http/conn/routing/RouteInfo$LayerType;"/>
+		<field name="LAYERED"/>
+		<field name="PLAIN"/>
+	</class>
+	<class name="org/apache/http/conn/routing/RouteInfo$TunnelType" since="1" removed="23">
+		<extends name="java/lang/Enum"/>
+		<method name="valueOf(Ljava/lang/String;)Lorg/apache/http/conn/routing/RouteInfo$TunnelType;"/>
+		<method name="values()[Lorg/apache/http/conn/routing/RouteInfo$TunnelType;"/>
+		<field name="PLAIN"/>
+		<field name="TUNNELLED"/>
+	</class>
+	<class name="org/apache/http/conn/routing/RouteTracker" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/conn/routing/RouteInfo"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpHost;Ljava/net/InetAddress;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+		<method name="connectProxy(Lorg/apache/http/HttpHost;Z)V"/>
+		<method name="connectTarget(Z)V"/>
+		<method name="isConnected()Z"/>
+		<method name="layerProtocol(Z)V"/>
+		<method name="toRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
+		<method name="tunnelProxy(Lorg/apache/http/HttpHost;Z)V"/>
+		<method name="tunnelTarget(Z)V"/>
+	</class>
+	<class name="org/apache/http/conn/scheme/HostNameResolver" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<method name="resolve(Ljava/lang/String;)Ljava/net/InetAddress;" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/scheme/LayeredSocketFactory" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/scheme/SocketFactory"/>
+		<method name="createSocket(Ljava/net/Socket;Ljava/lang/String;IZ)Ljava/net/Socket;" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/scheme/PlainSocketFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/scheme/SocketFactory"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/scheme/HostNameResolver;)V"/>
+		<method name="getSocketFactory()Lorg/apache/http/conn/scheme/PlainSocketFactory;"/>
+	</class>
+	<class name="org/apache/http/conn/scheme/Scheme" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Lorg/apache/http/conn/scheme/SocketFactory;I)V"/>
+		<method name="getDefaultPort()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getSocketFactory()Lorg/apache/http/conn/scheme/SocketFactory;"/>
+		<method name="isLayered()Z"/>
+		<method name="resolvePort(I)I"/>
+	</class>
+	<class name="org/apache/http/conn/scheme/SchemeRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="get(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;"/>
+		<method name="getScheme(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;"/>
+		<method name="getScheme(Lorg/apache/http/HttpHost;)Lorg/apache/http/conn/scheme/Scheme;"/>
+		<method name="getSchemeNames()Ljava/util/List;"/>
+		<method name="register(Lorg/apache/http/conn/scheme/Scheme;)Lorg/apache/http/conn/scheme/Scheme;"/>
+		<method name="setItems(Ljava/util/Map;)V"/>
+		<method name="unregister(Ljava/lang/String;)Lorg/apache/http/conn/scheme/Scheme;"/>
+	</class>
+	<class name="org/apache/http/conn/scheme/SocketFactory" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<method name="connectSocket(Ljava/net/Socket;Ljava/lang/String;ILjava/net/InetAddress;ILorg/apache/http/params/HttpParams;)Ljava/net/Socket;" deprecated="29"/>
+		<method name="createSocket()Ljava/net/Socket;" deprecated="29"/>
+		<method name="isSecure(Ljava/net/Socket;)Z" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/ssl/AbstractVerifier" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/ssl/X509HostnameVerifier"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="acceptableCountryWildcard(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="countDots(Ljava/lang/String;)I" deprecated="29"/>
+		<method name="getCNs(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;" deprecated="29"/>
+		<method name="getDNSSubjectAlts(Ljava/security/cert/X509Certificate;)[Ljava/lang/String;" deprecated="29"/>
+		<method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Z)V" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/ssl/AllowAllHostnameVerifier" since="1" deprecated="22">
+		<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/ssl/BrowserCompatHostnameVerifier" since="1" deprecated="22">
+		<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/ssl/SSLSocketFactory" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/scheme/LayeredSocketFactory"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;Ljava/security/SecureRandom;Lorg/apache/http/conn/scheme/HostNameResolver;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/security/KeyStore;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="&lt;init>(Ljava/security/KeyStore;Ljava/lang/String;Ljava/security/KeyStore;)V" deprecated="29"/>
+		<method name="getHostnameVerifier()Lorg/apache/http/conn/ssl/X509HostnameVerifier;" deprecated="29"/>
+		<method name="getSocketFactory()Lorg/apache/http/conn/ssl/SSLSocketFactory;" deprecated="29"/>
+		<method name="setHostnameVerifier(Lorg/apache/http/conn/ssl/X509HostnameVerifier;)V" deprecated="29"/>
+		<field name="ALLOW_ALL_HOSTNAME_VERIFIER" deprecated="29"/>
+		<field name="BROWSER_COMPATIBLE_HOSTNAME_VERIFIER" deprecated="29"/>
+		<field name="SSL" deprecated="29"/>
+		<field name="SSLV2" deprecated="29"/>
+		<field name="STRICT_HOSTNAME_VERIFIER" deprecated="29"/>
+		<field name="TLS" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/ssl/StrictHostnameVerifier" since="1" deprecated="22">
+		<extends name="org/apache/http/conn/ssl/AbstractVerifier"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/ssl/X509HostnameVerifier" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<implements name="javax/net/ssl/HostnameVerifier"/>
+		<method name="verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)V" deprecated="29"/>
+		<method name="verify(Ljava/lang/String;Ljavax/net/ssl/SSLSocket;)V" deprecated="29"/>
+		<method name="verify(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/conn/util/InetAddressUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="isIPv4Address(Ljava/lang/String;)Z"/>
+		<method name="isIPv6Address(Ljava/lang/String;)Z"/>
+		<method name="isIPv6HexCompressedAddress(Ljava/lang/String;)Z"/>
+		<method name="isIPv6StdAddress(Ljava/lang/String;)Z"/>
+	</class>
+	<class name="org/apache/http/cookie/ClientCookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/Cookie"/>
+		<method name="containsAttribute(Ljava/lang/String;)Z"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
+		<field name="COMMENTURL_ATTR"/>
+		<field name="COMMENT_ATTR"/>
+		<field name="DISCARD_ATTR"/>
+		<field name="DOMAIN_ATTR"/>
+		<field name="EXPIRES_ATTR"/>
+		<field name="MAX_AGE_ATTR"/>
+		<field name="PATH_ATTR"/>
+		<field name="PORT_ATTR"/>
+		<field name="SECURE_ATTR"/>
+		<field name="VERSION_ATTR"/>
+	</class>
+	<class name="org/apache/http/cookie/Cookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getComment()Ljava/lang/String;"/>
+		<method name="getCommentURL()Ljava/lang/String;"/>
+		<method name="getDomain()Ljava/lang/String;"/>
+		<method name="getExpiryDate()Ljava/util/Date;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getPorts()[I"/>
+		<method name="getValue()Ljava/lang/String;"/>
+		<method name="getVersion()I"/>
+		<method name="isExpired(Ljava/util/Date;)Z"/>
+		<method name="isPersistent()Z"/>
+		<method name="isSecure()Z"/>
+	</class>
+	<class name="org/apache/http/cookie/CookieAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z"/>
+		<method name="parse(Lorg/apache/http/cookie/SetCookie;Ljava/lang/String;)V"/>
+		<method name="validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V"/>
+	</class>
+	<class name="org/apache/http/cookie/CookieIdentityComparator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/Comparator"/>
+		<method name="&lt;init>()V"/>
+		<method name="compare(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/Cookie;)I"/>
+	</class>
+	<class name="org/apache/http/cookie/CookieOrigin" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;ILjava/lang/String;Z)V"/>
+		<method name="getHost()Ljava/lang/String;"/>
+		<method name="getPath()Ljava/lang/String;"/>
+		<method name="getPort()I"/>
+		<method name="isSecure()Z"/>
+	</class>
+	<class name="org/apache/http/cookie/CookiePathComparator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/util/Comparator"/>
+		<method name="&lt;init>()V"/>
+		<method name="compare(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/Cookie;)I"/>
+	</class>
+	<class name="org/apache/http/cookie/CookieSpec" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="formatCookies(Ljava/util/List;)Ljava/util/List;"/>
+		<method name="getVersion()I"/>
+		<method name="getVersionHeader()Lorg/apache/http/Header;"/>
+		<method name="match(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)Z"/>
+		<method name="parse(Lorg/apache/http/Header;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;"/>
+		<method name="validate(Lorg/apache/http/cookie/Cookie;Lorg/apache/http/cookie/CookieOrigin;)V"/>
+	</class>
+	<class name="org/apache/http/cookie/CookieSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="newInstance(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;"/>
+	</class>
+	<class name="org/apache/http/cookie/CookieSpecRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getCookieSpec(Ljava/lang/String;)Lorg/apache/http/cookie/CookieSpec;"/>
+		<method name="getCookieSpec(Ljava/lang/String;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/cookie/CookieSpec;"/>
+		<method name="getSpecNames()Ljava/util/List;"/>
+		<method name="register(Ljava/lang/String;Lorg/apache/http/cookie/CookieSpecFactory;)V"/>
+		<method name="setItems(Ljava/util/Map;)V"/>
+		<method name="unregister(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/cookie/MalformedCookieException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/ProtocolException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/cookie/SM" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="COOKIE"/>
+		<field name="COOKIE2"/>
+		<field name="SET_COOKIE"/>
+		<field name="SET_COOKIE2"/>
+	</class>
+	<class name="org/apache/http/cookie/SetCookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/Cookie"/>
+		<method name="setComment(Ljava/lang/String;)V"/>
+		<method name="setDomain(Ljava/lang/String;)V"/>
+		<method name="setExpiryDate(Ljava/util/Date;)V"/>
+		<method name="setPath(Ljava/lang/String;)V"/>
+		<method name="setSecure(Z)V"/>
+		<method name="setValue(Ljava/lang/String;)V"/>
+		<method name="setVersion(I)V"/>
+	</class>
+	<class name="org/apache/http/cookie/SetCookie2" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/SetCookie"/>
+		<method name="setCommentURL(Ljava/lang/String;)V"/>
+		<method name="setDiscard(Z)V"/>
+		<method name="setPorts([I)V"/>
+	</class>
+	<class name="org/apache/http/cookie/params/CookieSpecPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="DATE_PATTERNS"/>
+		<field name="SINGLE_COOKIE_HEADER"/>
+	</class>
+	<class name="org/apache/http/cookie/params/CookieSpecParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setDatePatterns(Ljava/util/Collection;)V"/>
+		<method name="setSingleHeader(Z)V"/>
+	</class>
+	<class name="org/apache/http/entity/AbstractHttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpEntity"/>
+		<method name="&lt;init>()V"/>
+		<method name="setChunked(Z)V"/>
+		<method name="setContentEncoding(Ljava/lang/String;)V"/>
+		<method name="setContentEncoding(Lorg/apache/http/Header;)V"/>
+		<method name="setContentType(Ljava/lang/String;)V"/>
+		<method name="setContentType(Lorg/apache/http/Header;)V"/>
+		<field name="chunked"/>
+		<field name="contentEncoding"/>
+		<field name="contentType"/>
+	</class>
+	<class name="org/apache/http/entity/BasicHttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
+		<method name="&lt;init>()V"/>
+		<method name="setContent(Ljava/io/InputStream;)V"/>
+		<method name="setContentLength(J)V"/>
+	</class>
+	<class name="org/apache/http/entity/BufferedHttpEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/HttpEntityWrapper"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpEntity;)V"/>
+	</class>
+	<class name="org/apache/http/entity/ByteArrayEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>([B)V"/>
+		<field name="content"/>
+	</class>
+	<class name="org/apache/http/entity/ContentLengthStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="determineLength(Lorg/apache/http/HttpMessage;)J"/>
+		<field name="CHUNKED"/>
+		<field name="IDENTITY"/>
+	</class>
+	<class name="org/apache/http/entity/ContentProducer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="writeTo(Ljava/io/OutputStream;)V"/>
+	</class>
+	<class name="org/apache/http/entity/EntityTemplate" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
+		<method name="&lt;init>(Lorg/apache/http/entity/ContentProducer;)V"/>
+	</class>
+	<class name="org/apache/http/entity/FileEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/io/File;Ljava/lang/String;)V"/>
+		<field name="file"/>
+	</class>
+	<class name="org/apache/http/entity/HttpEntityWrapper" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpEntity"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpEntity;)V"/>
+		<field name="wrappedEntity"/>
+	</class>
+	<class name="org/apache/http/entity/InputStreamEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
+		<method name="&lt;init>(Ljava/io/InputStream;J)V"/>
+	</class>
+	<class name="org/apache/http/entity/SerializableEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
+		<method name="&lt;init>(Ljava/io/Serializable;Z)V"/>
+	</class>
+	<class name="org/apache/http/entity/StringEntity" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/entity/AbstractHttpEntity"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="content"/>
+	</class>
+	<class name="org/apache/http/impl/AbstractHttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpClientConnection"/>
+		<method name="&lt;init>()V"/>
+		<method name="assertOpen()V"/>
+		<method name="createEntityDeserializer()Lorg/apache/http/impl/entity/EntityDeserializer;"/>
+		<method name="createEntitySerializer()Lorg/apache/http/impl/entity/EntitySerializer;"/>
+		<method name="createHttpResponseFactory()Lorg/apache/http/HttpResponseFactory;"/>
+		<method name="createRequestWriter(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageWriter;"/>
+		<method name="createResponseParser(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageParser;"/>
+		<method name="doFlush()V"/>
+		<method name="init(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/AbstractHttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpServerConnection"/>
+		<method name="&lt;init>()V"/>
+		<method name="assertOpen()V"/>
+		<method name="createEntityDeserializer()Lorg/apache/http/impl/entity/EntityDeserializer;"/>
+		<method name="createEntitySerializer()Lorg/apache/http/impl/entity/EntitySerializer;"/>
+		<method name="createHttpRequestFactory()Lorg/apache/http/HttpRequestFactory;"/>
+		<method name="createRequestParser(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpRequestFactory;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageParser;"/>
+		<method name="createResponseWriter(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/io/HttpMessageWriter;"/>
+		<method name="doFlush()V"/>
+		<method name="init(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/DefaultConnectionReuseStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/ConnectionReuseStrategy"/>
+		<method name="&lt;init>()V"/>
+		<method name="createTokenIterator(Lorg/apache/http/HeaderIterator;)Lorg/apache/http/TokenIterator;"/>
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/SocketHttpClientConnection"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpRequestFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpResponseFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpResponseFactory"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/apache/http/ReasonPhraseCatalog;)V"/>
+		<method name="determineLocale(Lorg/apache/http/protocol/HttpContext;)Ljava/util/Locale;"/>
+		<field name="reasonCatalog"/>
+	</class>
+	<class name="org/apache/http/impl/DefaultHttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/SocketHttpServerConnection"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/EnglishReasonPhraseCatalog" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/ReasonPhraseCatalog"/>
+		<method name="&lt;init>()V"/>
+		<field name="INSTANCE"/>
+	</class>
+	<class name="org/apache/http/impl/HttpConnectionMetricsImpl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpConnectionMetrics"/>
+		<method name="&lt;init>(Lorg/apache/http/io/HttpTransportMetrics;Lorg/apache/http/io/HttpTransportMetrics;)V"/>
+		<method name="incrementRequestCount()V"/>
+		<method name="incrementResponseCount()V"/>
+		<method name="setMetric(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<field name="RECEIVED_BYTES_COUNT"/>
+		<field name="REQUEST_COUNT"/>
+		<field name="RESPONSE_COUNT"/>
+		<field name="SENT_BYTES_COUNT"/>
+	</class>
+	<class name="org/apache/http/impl/NoConnectionReuseStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/ConnectionReuseStrategy"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/SocketHttpClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/AbstractHttpClientConnection"/>
+		<implements name="org/apache/http/HttpInetConnection"/>
+		<method name="&lt;init>()V"/>
+		<method name="assertNotOpen()V"/>
+		<method name="bind(Ljava/net/Socket;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="createSessionInputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;"/>
+		<method name="createSessionOutputBuffer(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;"/>
+		<method name="getSocket()Ljava/net/Socket;"/>
+	</class>
+	<class name="org/apache/http/impl/SocketHttpServerConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/AbstractHttpServerConnection"/>
+		<implements name="org/apache/http/HttpInetConnection"/>
+		<method name="&lt;init>()V"/>
+		<method name="assertNotOpen()V"/>
+		<method name="bind(Ljava/net/Socket;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="createHttpDataReceiver(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionInputBuffer;"/>
+		<method name="createHttpDataTransmitter(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)Lorg/apache/http/io/SessionOutputBuffer;"/>
+		<method name="getSocket()Ljava/net/Socket;"/>
+	</class>
+	<class name="org/apache/http/impl/auth/AuthSchemeBase" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/auth/AuthScheme"/>
+		<method name="&lt;init>()V"/>
+		<method name="isProxy()Z"/>
+		<method name="parseChallenge(Lorg/apache/http/util/CharArrayBuffer;II)V"/>
+	</class>
+	<class name="org/apache/http/impl/auth/BasicScheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/RFC2617Scheme"/>
+		<method name="&lt;init>()V"/>
+		<method name="authenticate(Lorg/apache/http/auth/Credentials;Ljava/lang/String;Z)Lorg/apache/http/Header;"/>
+	</class>
+	<class name="org/apache/http/impl/auth/BasicSchemeFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/auth/AuthSchemeFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/auth/DigestScheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/RFC2617Scheme"/>
+		<method name="&lt;init>()V"/>
+		<method name="createCnonce()Ljava/lang/String;"/>
+		<method name="overrideParamter(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/impl/auth/DigestSchemeFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/auth/AuthSchemeFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/auth/NTLMEngine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="generateType1Msg(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="generateType3Msg(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/impl/auth/NTLMEngineException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/auth/AuthenticationException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/impl/auth/NTLMScheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/AuthSchemeBase"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/auth/NTLMEngine;)V"/>
+	</class>
+	<class name="org/apache/http/impl/auth/RFC2617Scheme" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/auth/AuthSchemeBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="getParameters()Ljava/util/Map;"/>
+	</class>
+	<class name="org/apache/http/impl/auth/UnsupportedDigestAlgorithmException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/impl/client/AbstractAuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/AuthenticationHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="getAuthPreferences()Ljava/util/List;"/>
+		<method name="parseChallenges([Lorg/apache/http/Header;)Ljava/util/Map;"/>
+	</class>
+	<class name="org/apache/http/impl/client/AbstractHttpClient" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/HttpClient"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V"/>
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V"/>
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V"/>
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V"/>
+		<method name="clearRequestInterceptors()V"/>
+		<method name="clearResponseInterceptors()V"/>
+		<method name="createAuthSchemeRegistry()Lorg/apache/http/auth/AuthSchemeRegistry;"/>
+		<method name="createClientConnectionManager()Lorg/apache/http/conn/ClientConnectionManager;"/>
+		<method name="createClientRequestDirector(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)Lorg/apache/http/client/RequestDirector;"/>
+		<method name="createConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;"/>
+		<method name="createConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;"/>
+		<method name="createCookieSpecRegistry()Lorg/apache/http/cookie/CookieSpecRegistry;"/>
+		<method name="createCookieStore()Lorg/apache/http/client/CookieStore;"/>
+		<method name="createCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;"/>
+		<method name="createHttpContext()Lorg/apache/http/protocol/HttpContext;"/>
+		<method name="createHttpParams()Lorg/apache/http/params/HttpParams;"/>
+		<method name="createHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;"/>
+		<method name="createHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;"/>
+		<method name="createHttpRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;"/>
+		<method name="createProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
+		<method name="createRedirectHandler()Lorg/apache/http/client/RedirectHandler;"/>
+		<method name="createRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;"/>
+		<method name="createTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
+		<method name="createUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;"/>
+		<method name="determineParams(Lorg/apache/http/HttpRequest;)Lorg/apache/http/params/HttpParams;"/>
+		<method name="getAuthSchemes()Lorg/apache/http/auth/AuthSchemeRegistry;"/>
+		<method name="getConnectionKeepAliveStrategy()Lorg/apache/http/conn/ConnectionKeepAliveStrategy;"/>
+		<method name="getConnectionReuseStrategy()Lorg/apache/http/ConnectionReuseStrategy;"/>
+		<method name="getCookieSpecs()Lorg/apache/http/cookie/CookieSpecRegistry;"/>
+		<method name="getCookieStore()Lorg/apache/http/client/CookieStore;"/>
+		<method name="getCredentialsProvider()Lorg/apache/http/client/CredentialsProvider;"/>
+		<method name="getHttpProcessor()Lorg/apache/http/protocol/BasicHttpProcessor;"/>
+		<method name="getHttpRequestRetryHandler()Lorg/apache/http/client/HttpRequestRetryHandler;"/>
+		<method name="getProxyAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
+		<method name="getRedirectHandler()Lorg/apache/http/client/RedirectHandler;"/>
+		<method name="getRequestExecutor()Lorg/apache/http/protocol/HttpRequestExecutor;"/>
+		<method name="getRequestInterceptor(I)Lorg/apache/http/HttpRequestInterceptor;"/>
+		<method name="getRequestInterceptorCount()I"/>
+		<method name="getResponseInterceptor(I)Lorg/apache/http/HttpResponseInterceptor;"/>
+		<method name="getResponseInterceptorCount()I"/>
+		<method name="getRoutePlanner()Lorg/apache/http/conn/routing/HttpRoutePlanner;"/>
+		<method name="getTargetAuthenticationHandler()Lorg/apache/http/client/AuthenticationHandler;"/>
+		<method name="getUserTokenHandler()Lorg/apache/http/client/UserTokenHandler;"/>
+		<method name="removeRequestInterceptorByClass(Ljava/lang/Class;)V"/>
+		<method name="removeResponseInterceptorByClass(Ljava/lang/Class;)V"/>
+		<method name="setAuthSchemes(Lorg/apache/http/auth/AuthSchemeRegistry;)V"/>
+		<method name="setCookieSpecs(Lorg/apache/http/cookie/CookieSpecRegistry;)V"/>
+		<method name="setCookieStore(Lorg/apache/http/client/CookieStore;)V"/>
+		<method name="setCredentialsProvider(Lorg/apache/http/client/CredentialsProvider;)V"/>
+		<method name="setHttpRequestRetryHandler(Lorg/apache/http/client/HttpRequestRetryHandler;)V"/>
+		<method name="setKeepAliveStrategy(Lorg/apache/http/conn/ConnectionKeepAliveStrategy;)V"/>
+		<method name="setParams(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setProxyAuthenticationHandler(Lorg/apache/http/client/AuthenticationHandler;)V"/>
+		<method name="setRedirectHandler(Lorg/apache/http/client/RedirectHandler;)V"/>
+		<method name="setReuseStrategy(Lorg/apache/http/ConnectionReuseStrategy;)V"/>
+		<method name="setRoutePlanner(Lorg/apache/http/conn/routing/HttpRoutePlanner;)V"/>
+		<method name="setTargetAuthenticationHandler(Lorg/apache/http/client/AuthenticationHandler;)V"/>
+		<method name="setUserTokenHandler(Lorg/apache/http/client/UserTokenHandler;)V"/>
+	</class>
+	<class name="org/apache/http/impl/client/BasicCookieStore" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/CookieStore"/>
+		<method name="&lt;init>()V"/>
+		<method name="addCookies([Lorg/apache/http/cookie/Cookie;)V"/>
+	</class>
+	<class name="org/apache/http/impl/client/BasicCredentialsProvider" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/CredentialsProvider"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/client/BasicResponseHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/ResponseHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="handleResponse(Lorg/apache/http/HttpResponse;)Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/impl/client/ClientParamsStack" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/AbstractHttpParams"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/client/ClientParamsStack;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/client/ClientParamsStack;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="getApplicationParams()Lorg/apache/http/params/HttpParams;"/>
+		<method name="getClientParams()Lorg/apache/http/params/HttpParams;"/>
+		<method name="getOverrideParams()Lorg/apache/http/params/HttpParams;"/>
+		<method name="getRequestParams()Lorg/apache/http/params/HttpParams;"/>
+		<field name="applicationParams"/>
+		<field name="clientParams"/>
+		<field name="overrideParams"/>
+		<field name="requestParams"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/ConnectionKeepAliveStrategy"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultHttpClient" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/AbstractHttpClient"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultHttpRequestRetryHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/HttpRequestRetryHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(IZ)V"/>
+		<method name="getRetryCount()I"/>
+		<method name="isRequestSentRetryEnabled()Z"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultProxyAuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/AbstractAuthenticationHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultRedirectHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/RedirectHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultRequestDirector" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/RequestDirector"/>
+		<method name="&lt;init>(Lorg/apache/http/protocol/HttpRequestExecutor;Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/conn/ConnectionKeepAliveStrategy;Lorg/apache/http/conn/routing/HttpRoutePlanner;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/client/HttpRequestRetryHandler;Lorg/apache/http/client/RedirectHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/AuthenticationHandler;Lorg/apache/http/client/UserTokenHandler;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="createConnectRequest(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpRequest;"/>
+		<method name="createTunnelToProxy(Lorg/apache/http/conn/routing/HttpRoute;ILorg/apache/http/protocol/HttpContext;)Z"/>
+		<method name="createTunnelToTarget(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)Z"/>
+		<method name="determineRoute(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/conn/routing/HttpRoute;"/>
+		<method name="establishRoute(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;)V"/>
+		<method name="handleResponse(Lorg/apache/http/impl/client/RoutedRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/impl/client/RoutedRequest;"/>
+		<method name="releaseConnection()V"/>
+		<method name="rewriteRequestURI(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+		<field name="connManager"/>
+		<field name="httpProcessor"/>
+		<field name="keepAliveStrategy"/>
+		<field name="managedConn"/>
+		<field name="params"/>
+		<field name="redirectHandler"/>
+		<field name="requestExec"/>
+		<field name="retryHandler"/>
+		<field name="reuseStrategy"/>
+		<field name="routePlanner"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultTargetAuthenticationHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/AbstractAuthenticationHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/client/DefaultUserTokenHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/client/UserTokenHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/client/EntityEnclosingRequestWrapper" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/client/RequestWrapper"/>
+		<implements name="org/apache/http/HttpEntityEnclosingRequest"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpEntityEnclosingRequest;)V"/>
+	</class>
+	<class name="org/apache/http/impl/client/RedirectLocations" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(Ljava/net/URI;)V"/>
+		<method name="contains(Ljava/net/URI;)Z"/>
+		<method name="remove(Ljava/net/URI;)Z"/>
+	</class>
+	<class name="org/apache/http/impl/client/RequestWrapper" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage"/>
+		<implements name="org/apache/http/client/methods/HttpUriRequest"/>
+		<method name="&lt;init>(Lorg/apache/http/HttpRequest;)V"/>
+		<method name="getExecCount()I"/>
+		<method name="getOriginal()Lorg/apache/http/HttpRequest;"/>
+		<method name="incrementExecCount()V"/>
+		<method name="isRepeatable()Z"/>
+		<method name="resetHeaders()V"/>
+		<method name="setMethod(Ljava/lang/String;)V"/>
+		<method name="setProtocolVersion(Lorg/apache/http/ProtocolVersion;)V"/>
+		<method name="setURI(Ljava/net/URI;)V"/>
+	</class>
+	<class name="org/apache/http/impl/client/RoutedRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/client/RequestWrapper;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+		<method name="getRequest()Lorg/apache/http/impl/client/RequestWrapper;"/>
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
+		<field name="request"/>
+		<field name="route"/>
+	</class>
+	<class name="org/apache/http/impl/client/TunnelRefusedException" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/HttpException"/>
+		<method name="&lt;init>(Ljava/lang/String;Lorg/apache/http/HttpResponse;)V"/>
+		<method name="getResponse()Lorg/apache/http/HttpResponse;"/>
+	</class>
+	<class name="org/apache/http/impl/conn/AbstractClientConnAdapter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/ManagedClientConnection"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/conn/OperatedClientConnection;)V"/>
+		<method name="assertNotAborted()V"/>
+		<method name="assertValid(Lorg/apache/http/conn/OperatedClientConnection;)V"/>
+		<method name="detach()V"/>
+		<method name="getManager()Lorg/apache/http/conn/ClientConnectionManager;"/>
+		<method name="getWrappedConnection()Lorg/apache/http/conn/OperatedClientConnection;"/>
+	</class>
+	<class name="org/apache/http/impl/conn/AbstractPoolEntry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+		<method name="getState()Ljava/lang/Object;"/>
+		<method name="layerProtocol(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="open(Lorg/apache/http/conn/routing/HttpRoute;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setState(Ljava/lang/Object;)V"/>
+		<method name="shutdownEntry()V"/>
+		<method name="tunnelProxy(Lorg/apache/http/HttpHost;ZLorg/apache/http/params/HttpParams;)V"/>
+		<method name="tunnelTarget(ZLorg/apache/http/params/HttpParams;)V"/>
+		<field name="connOperator"/>
+		<field name="connection"/>
+		<field name="route"/>
+		<field name="state"/>
+		<field name="tracker"/>
+	</class>
+	<class name="org/apache/http/impl/conn/AbstractPooledConnAdapter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractClientConnAdapter"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V"/>
+		<method name="assertAttached()V"/>
+		<field name="poolEntry"/>
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultClientConnection" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/SocketHttpClientConnection"/>
+		<implements name="org/apache/http/conn/OperatedClientConnection"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultClientConnectionOperator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/ClientConnectionOperator"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
+		<method name="prepareSocket(Ljava/net/Socket;Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/params/HttpParams;)V"/>
+		<field name="schemeRegistry"/>
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultHttpRoutePlanner" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/routing/HttpRoutePlanner"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
+		<field name="schemeRegistry"/>
+	</class>
+	<class name="org/apache/http/impl/conn/DefaultResponseParser" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageParser"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/IdleConnectionHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="add(Lorg/apache/http/HttpConnection;JLjava/util/concurrent/TimeUnit;)V"/>
+		<method name="closeExpiredConnections()V"/>
+		<method name="closeIdleConnections(J)V"/>
+		<method name="remove(Lorg/apache/http/HttpConnection;)Z"/>
+		<method name="removeAll()V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/LoggingSessionInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/io/SessionInputBuffer"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/impl/conn/Wire;)V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/LoggingSessionOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/io/SessionOutputBuffer"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/impl/conn/Wire;)V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/ProxySelectorRoutePlanner" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/routing/HttpRoutePlanner"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/scheme/SchemeRegistry;Ljava/net/ProxySelector;)V"/>
+		<method name="chooseProxy(Ljava/util/List;Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Ljava/net/Proxy;"/>
+		<method name="determineProxy(Lorg/apache/http/HttpHost;Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpHost;"/>
+		<method name="getHost(Ljava/net/InetSocketAddress;)Ljava/lang/String;"/>
+		<method name="getProxySelector()Ljava/net/ProxySelector;"/>
+		<method name="setProxySelector(Ljava/net/ProxySelector;)V"/>
+		<field name="proxySelector"/>
+		<field name="schemeRegistry"/>
+	</class>
+	<class name="org/apache/http/impl/conn/SingleClientConnManager" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/ClientConnectionManager"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
+		<method name="assertStillUp()V"/>
+		<method name="createConnectionOperator(Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionOperator;"/>
+		<method name="getConnection(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/conn/ManagedClientConnection;"/>
+		<method name="revokeConnection()V"/>
+		<field name="MISUSE_MESSAGE"/>
+		<field name="alwaysShutDown"/>
+		<field name="connOperator"/>
+		<field name="connectionExpiresTime"/>
+		<field name="isShutDown"/>
+		<field name="lastReleaseTime"/>
+		<field name="managedConn"/>
+		<field name="schemeRegistry"/>
+		<field name="uniquePoolEntry"/>
+	</class>
+	<class name="org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter" since="1" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPooledConnAdapter"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/conn/SingleClientConnManager;Lorg/apache/http/impl/conn/SingleClientConnManager$PoolEntry;Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/SingleClientConnManager$PoolEntry" since="1" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPoolEntry"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/conn/SingleClientConnManager;)V"/>
+		<method name="close()V"/>
+		<method name="shutdown()V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/Wire" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/commons/logging/Log;)V"/>
+		<method name="enabled()Z"/>
+		<method name="input(I)V"/>
+		<method name="input(Ljava/io/InputStream;)V"/>
+		<method name="input(Ljava/lang/String;)V"/>
+		<method name="input([B)V"/>
+		<method name="input([BII)V"/>
+		<method name="output(I)V"/>
+		<method name="output(Ljava/io/InputStream;)V"/>
+		<method name="output(Ljava/lang/String;)V"/>
+		<method name="output([B)V"/>
+		<method name="output([BII)V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/AbstractConnPool" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/impl/conn/tsccm/RefQueueHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="closeConnection(Lorg/apache/http/conn/OperatedClientConnection;)V"/>
+		<method name="closeExpiredConnections()V"/>
+		<method name="closeIdleConnections(JLjava/util/concurrent/TimeUnit;)V"/>
+		<method name="deleteClosedConnections()V"/>
+		<method name="enableConnectionGC()V"/>
+		<method name="freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;ZJLjava/util/concurrent/TimeUnit;)V"/>
+		<method name="getEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
+		<method name="handleLostEntry(Lorg/apache/http/conn/routing/HttpRoute;)V"/>
+		<method name="requestPoolEntry(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/PoolEntryRequest;"/>
+		<method name="shutdown()V"/>
+		<field name="idleConnHandler"/>
+		<field name="isShutDown"/>
+		<field name="issuedConnections"/>
+		<field name="numConnections"/>
+		<field name="poolLock"/>
+		<field name="refQueue"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/BasicPoolEntry" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPoolEntry"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/ref/ReferenceQueue;)V"/>
+		<method name="getConnection()Lorg/apache/http/conn/OperatedClientConnection;"/>
+		<method name="getPlannedRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
+		<method name="getWeakRef()Lorg/apache/http/impl/conn/tsccm/BasicPoolEntryRef;"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/BasicPoolEntryRef" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/ref/WeakReference"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;Ljava/lang/ref/ReferenceQueue;)V"/>
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/AbstractPooledConnAdapter"/>
+		<method name="&lt;init>(Lorg/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager;Lorg/apache/http/impl/conn/AbstractPoolEntry;)V"/>
+		<method name="getPoolEntry()Lorg/apache/http/impl/conn/AbstractPoolEntry;"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/ConnPoolByRoute" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/conn/tsccm/AbstractConnPool"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/ClientConnectionOperator;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="createEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Lorg/apache/http/conn/ClientConnectionOperator;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
+		<method name="createFreeConnQueue()Ljava/util/Queue;"/>
+		<method name="createRouteToPoolMap()Ljava/util/Map;"/>
+		<method name="createWaitingThreadQueue()Ljava/util/Queue;"/>
+		<method name="deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V"/>
+		<method name="deleteLeastUsedEntry()V"/>
+		<method name="getConnectionsInPool(Lorg/apache/http/conn/routing/HttpRoute;)I"/>
+		<method name="getEntryBlocking(Lorg/apache/http/conn/routing/HttpRoute;Ljava/lang/Object;JLjava/util/concurrent/TimeUnit;Lorg/apache/http/impl/conn/tsccm/WaitingThreadAborter;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
+		<method name="getFreeEntry(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
+		<method name="getRoutePool(Lorg/apache/http/conn/routing/HttpRoute;Z)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;"/>
+		<method name="newRouteSpecificPool(Lorg/apache/http/conn/routing/HttpRoute;)Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;"/>
+		<method name="newWaitingThread(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)Lorg/apache/http/impl/conn/tsccm/WaitingThread;"/>
+		<method name="notifyWaitingThread(Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V"/>
+		<field name="freeConnections"/>
+		<field name="maxTotalConnections"/>
+		<field name="operator"/>
+		<field name="routeToPool"/>
+		<field name="waitingThreads"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/PoolEntryRequest" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="abortRequest()V"/>
+		<method name="getPoolEntry(JLjava/util/concurrent/TimeUnit;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/RefQueueHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="handleReference(Ljava/lang/ref/Reference;)V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/RefQueueWorker" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Runnable"/>
+		<method name="&lt;init>(Ljava/lang/ref/ReferenceQueue;Lorg/apache/http/impl/conn/tsccm/RefQueueHandler;)V"/>
+		<method name="shutdown()V"/>
+		<field name="refHandler"/>
+		<field name="refQueue"/>
+		<field name="workerThread"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/RouteSpecificPool" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/http/conn/routing/HttpRoute;I)V"/>
+		<method name="allocEntry(Ljava/lang/Object;)Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;"/>
+		<method name="createdEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V"/>
+		<method name="deleteEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)Z"/>
+		<method name="dropEntry()V"/>
+		<method name="freeEntry(Lorg/apache/http/impl/conn/tsccm/BasicPoolEntry;)V"/>
+		<method name="getCapacity()I"/>
+		<method name="getEntryCount()I"/>
+		<method name="getMaxEntries()I"/>
+		<method name="getRoute()Lorg/apache/http/conn/routing/HttpRoute;"/>
+		<method name="hasThread()Z"/>
+		<method name="isUnused()Z"/>
+		<method name="nextThread()Lorg/apache/http/impl/conn/tsccm/WaitingThread;"/>
+		<method name="queueThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V"/>
+		<method name="removeThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V"/>
+		<field name="freeEntries"/>
+		<field name="maxEntries"/>
+		<field name="numEntries"/>
+		<field name="route"/>
+		<field name="waitingThreads"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/conn/ClientConnectionManager"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/conn/scheme/SchemeRegistry;)V"/>
+		<method name="createConnectionOperator(Lorg/apache/http/conn/scheme/SchemeRegistry;)Lorg/apache/http/conn/ClientConnectionOperator;"/>
+		<method name="createConnectionPool(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/impl/conn/tsccm/AbstractConnPool;"/>
+		<method name="getConnectionsInPool()I"/>
+		<method name="getConnectionsInPool(Lorg/apache/http/conn/routing/HttpRoute;)I"/>
+		<field name="connOperator"/>
+		<field name="connectionPool"/>
+		<field name="schemeRegistry"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/WaitingThread" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/util/concurrent/locks/Condition;Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;)V"/>
+		<method name="await(Ljava/util/Date;)Z"/>
+		<method name="getCondition()Ljava/util/concurrent/locks/Condition;"/>
+		<method name="getPool()Lorg/apache/http/impl/conn/tsccm/RouteSpecificPool;"/>
+		<method name="getThread()Ljava/lang/Thread;"/>
+		<method name="interrupt()V"/>
+		<method name="wakeup()V"/>
+	</class>
+	<class name="org/apache/http/impl/conn/tsccm/WaitingThreadAborter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="abort()V"/>
+		<method name="setWaitingThread(Lorg/apache/http/impl/conn/tsccm/WaitingThread;)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/AbstractCookieSpec" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieSpec"/>
+		<method name="&lt;init>()V"/>
+		<method name="findAttribHandler(Ljava/lang/String;)Lorg/apache/http/cookie/CookieAttributeHandler;"/>
+		<method name="getAttribHandler(Ljava/lang/String;)Lorg/apache/http/cookie/CookieAttributeHandler;"/>
+		<method name="getAttribHandlers()Ljava/util/Collection;"/>
+		<method name="registerAttribHandler(Ljava/lang/String;Lorg/apache/http/cookie/CookieAttributeHandler;)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicClientCookie" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/cookie/ClientCookie"/>
+		<implements name="org/apache/http/cookie/SetCookie"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicClientCookie2" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/BasicClientCookie"/>
+		<implements name="org/apache/http/cookie/SetCookie2"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicCommentHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicDomainHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicExpiresHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
+		<method name="&lt;init>([Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicMaxAgeHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicPathHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BasicSecureHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BestMatchSpec" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieSpec"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([Ljava/lang/String;Z)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BestMatchSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BrowserCompatSpec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/CookieSpecBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([Ljava/lang/String;)V"/>
+		<field name="DATE_PATTERNS"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/BrowserCompatSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/CookieSpecBase" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieSpec"/>
+		<method name="&lt;init>()V"/>
+		<method name="getDefaultDomain(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;"/>
+		<method name="getDefaultPath(Lorg/apache/http/cookie/CookieOrigin;)Ljava/lang/String;"/>
+		<method name="parse([Lorg/apache/http/HeaderElement;Lorg/apache/http/cookie/CookieOrigin;)Ljava/util/List;"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/DateParseException" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/DateUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="formatDate(Ljava/util/Date;)Ljava/lang/String;"/>
+		<method name="formatDate(Ljava/util/Date;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="parseDate(Ljava/lang/String;)Ljava/util/Date;"/>
+		<method name="parseDate(Ljava/lang/String;[Ljava/lang/String;)Ljava/util/Date;"/>
+		<method name="parseDate(Ljava/lang/String;[Ljava/lang/String;Ljava/util/Date;)Ljava/util/Date;"/>
+		<field name="GMT"/>
+		<field name="PATTERN_ASCTIME"/>
+		<field name="PATTERN_RFC1036"/>
+		<field name="PATTERN_RFC1123"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDomainHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/BasicDomainHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDraftHeaderParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="parseHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;"/>
+		<field name="DEFAULT"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDraftSpec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/CookieSpecBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([Ljava/lang/String;)V"/>
+		<field name="EXPIRES_PATTERN"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/NetscapeDraftSpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109DomainHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109Spec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/CookieSpecBase"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([Ljava/lang/String;Z)V"/>
+		<method name="formatCookieAsVer(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/cookie/Cookie;I)V"/>
+		<method name="formatParamAsVer(Lorg/apache/http/util/CharArrayBuffer;Ljava/lang/String;Ljava/lang/String;I)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109SpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2109VersionHandler" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/AbstractCookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965DomainAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+		<method name="domainMatch(Ljava/lang/String;Ljava/lang/String;)Z"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965PortAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965Spec" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/cookie/RFC2109Spec"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>([Ljava/lang/String;Z)V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965SpecFactory" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieSpecFactory"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/cookie/RFC2965VersionAttributeHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/cookie/CookieAttributeHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/entity/EntityDeserializer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/http/entity/ContentLengthStrategy;)V"/>
+		<method name="deserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/HttpEntity;"/>
+		<method name="doDeserialize(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/HttpMessage;)Lorg/apache/http/entity/BasicHttpEntity;"/>
+	</class>
+	<class name="org/apache/http/impl/entity/EntitySerializer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/http/entity/ContentLengthStrategy;)V"/>
+		<method name="doSerialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;)Ljava/io/OutputStream;"/>
+		<method name="serialize(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/HttpMessage;Lorg/apache/http/HttpEntity;)V"/>
+	</class>
+	<class name="org/apache/http/impl/entity/LaxContentLengthStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/entity/ContentLengthStrategy"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/entity/StrictContentLengthStrategy" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/entity/ContentLengthStrategy"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/impl/io/AbstractMessageParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/io/HttpMessageParser"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="parseHead(Lorg/apache/http/io/SessionInputBuffer;)Lorg/apache/http/HttpMessage;"/>
+		<method name="parseHeaders(Lorg/apache/http/io/SessionInputBuffer;IILorg/apache/http/message/LineParser;)[Lorg/apache/http/Header;"/>
+		<field name="lineParser"/>
+	</class>
+	<class name="org/apache/http/impl/io/AbstractMessageWriter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/io/HttpMessageWriter"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="writeHeadLine(Lorg/apache/http/HttpMessage;)V"/>
+		<field name="lineBuf"/>
+		<field name="lineFormatter"/>
+		<field name="sessionBuffer"/>
+	</class>
+	<class name="org/apache/http/impl/io/AbstractSessionInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/io/SessionInputBuffer"/>
+		<method name="&lt;init>()V"/>
+		<method name="fillBuffer()I"/>
+		<method name="hasBufferedData()Z"/>
+		<method name="init(Ljava/io/InputStream;ILorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/AbstractSessionOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/io/SessionOutputBuffer"/>
+		<method name="&lt;init>()V"/>
+		<method name="flushBuffer()V"/>
+		<method name="init(Ljava/io/OutputStream;ILorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/ChunkedInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;)V"/>
+		<method name="getFooters()[Lorg/apache/http/Header;"/>
+	</class>
+	<class name="org/apache/http/impl/io/ChunkedOutputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/OutputStream"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;I)V"/>
+		<method name="finish()V"/>
+		<method name="flushCache()V"/>
+		<method name="flushCacheWithAppend([BII)V"/>
+		<method name="writeClosingChunk()V"/>
+	</class>
+	<class name="org/apache/http/impl/io/ContentLengthInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;J)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/ContentLengthOutputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/OutputStream"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;J)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/HttpRequestParser" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageParser"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpRequestFactory;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/HttpRequestWriter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageWriter"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/HttpResponseParser" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageParser"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;Lorg/apache/http/message/LineParser;Lorg/apache/http/HttpResponseFactory;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/HttpResponseWriter" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractMessageWriter"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;Lorg/apache/http/message/LineFormatter;Lorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/HttpTransportMetricsImpl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/io/HttpTransportMetrics"/>
+		<method name="&lt;init>()V"/>
+		<method name="incrementBytesTransferred(J)V"/>
+		<method name="setBytesTransferred(J)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/IdentityInputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/InputStream"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionInputBuffer;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/IdentityOutputStream" since="1" deprecated="22" removed="23">
+		<extends name="java/io/OutputStream"/>
+		<method name="&lt;init>(Lorg/apache/http/io/SessionOutputBuffer;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/SocketInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractSessionInputBuffer"/>
+		<method name="&lt;init>(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/impl/io/SocketOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/impl/io/AbstractSessionOutputBuffer"/>
+		<method name="&lt;init>(Ljava/net/Socket;ILorg/apache/http/params/HttpParams;)V"/>
+	</class>
+	<class name="org/apache/http/io/HttpMessageParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="parse()Lorg/apache/http/HttpMessage;"/>
+	</class>
+	<class name="org/apache/http/io/HttpMessageWriter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="write(Lorg/apache/http/HttpMessage;)V"/>
+	</class>
+	<class name="org/apache/http/io/HttpTransportMetrics" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getBytesTransferred()J"/>
+		<method name="reset()V"/>
+	</class>
+	<class name="org/apache/http/io/SessionInputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getMetrics()Lorg/apache/http/io/HttpTransportMetrics;"/>
+		<method name="isDataAvailable(I)Z"/>
+		<method name="read()I"/>
+		<method name="read([B)I"/>
+		<method name="read([BII)I"/>
+		<method name="readLine()Ljava/lang/String;"/>
+		<method name="readLine(Lorg/apache/http/util/CharArrayBuffer;)I"/>
+	</class>
+	<class name="org/apache/http/io/SessionOutputBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="flush()V"/>
+		<method name="getMetrics()Lorg/apache/http/io/HttpTransportMetrics;"/>
+		<method name="write(I)V"/>
+		<method name="write([B)V"/>
+		<method name="write([BII)V"/>
+		<method name="writeLine(Ljava/lang/String;)V"/>
+		<method name="writeLine(Lorg/apache/http/util/CharArrayBuffer;)V"/>
+	</class>
+	<class name="org/apache/http/message/AbstractHttpMessage" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpMessage"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<field name="headergroup"/>
+		<field name="params"/>
+	</class>
+	<class name="org/apache/http/message/BasicHeader" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/Header"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicHeaderElement" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/HeaderElement"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicHeaderElementIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HeaderElementIterator"/>
+		<method name="&lt;init>(Lorg/apache/http/HeaderIterator;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/HeaderIterator;Lorg/apache/http/message/HeaderValueParser;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicHeaderIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HeaderIterator"/>
+		<method name="&lt;init>([Lorg/apache/http/Header;Ljava/lang/String;)V"/>
+		<method name="filterHeader(I)Z"/>
+		<method name="findNext(I)I"/>
+		<field name="allHeaders"/>
+		<field name="currentIndex"/>
+		<field name="headerName"/>
+	</class>
+	<class name="org/apache/http/message/BasicHeaderValueFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/message/HeaderValueFormatter"/>
+		<method name="&lt;init>()V"/>
+		<method name="doFormatValue(Lorg/apache/http/util/CharArrayBuffer;Ljava/lang/String;Z)V"/>
+		<method name="estimateElementsLen([Lorg/apache/http/HeaderElement;)I"/>
+		<method name="estimateHeaderElementLen(Lorg/apache/http/HeaderElement;)I"/>
+		<method name="estimateNameValuePairLen(Lorg/apache/http/NameValuePair;)I"/>
+		<method name="estimateParametersLen([Lorg/apache/http/NameValuePair;)I"/>
+		<method name="formatElements([Lorg/apache/http/HeaderElement;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
+		<method name="formatHeaderElement(Lorg/apache/http/HeaderElement;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
+		<method name="formatNameValuePair(Lorg/apache/http/NameValuePair;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
+		<method name="formatParameters([Lorg/apache/http/NameValuePair;ZLorg/apache/http/message/HeaderValueFormatter;)Ljava/lang/String;"/>
+		<method name="isSeparator(C)Z"/>
+		<method name="isUnsafe(C)Z"/>
+		<field name="DEFAULT"/>
+		<field name="SEPARATORS"/>
+		<field name="UNSAFE_CHARS"/>
+	</class>
+	<class name="org/apache/http/message/BasicHeaderValueParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/message/HeaderValueParser"/>
+		<method name="&lt;init>()V"/>
+		<method name="createHeaderElement(Ljava/lang/String;Ljava/lang/String;[Lorg/apache/http/NameValuePair;)Lorg/apache/http/HeaderElement;"/>
+		<method name="createNameValuePair(Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/NameValuePair;"/>
+		<method name="parseElements(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)[Lorg/apache/http/HeaderElement;"/>
+		<method name="parseHeaderElement(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)Lorg/apache/http/HeaderElement;"/>
+		<method name="parseNameValuePair(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)Lorg/apache/http/NameValuePair;"/>
+		<method name="parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;[C)Lorg/apache/http/NameValuePair;"/>
+		<method name="parseParameters(Ljava/lang/String;Lorg/apache/http/message/HeaderValueParser;)[Lorg/apache/http/NameValuePair;"/>
+		<field name="DEFAULT"/>
+	</class>
+	<class name="org/apache/http/message/BasicHttpEntityEnclosingRequest" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/BasicHttpRequest"/>
+		<implements name="org/apache/http/HttpEntityEnclosingRequest"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/RequestLine;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicHttpRequest" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage"/>
+		<implements name="org/apache/http/HttpRequest"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/RequestLine;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicHttpResponse" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/message/AbstractHttpMessage"/>
+		<implements name="org/apache/http/HttpResponse"/>
+		<method name="&lt;init>(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/StatusLine;)V"/>
+		<method name="&lt;init>(Lorg/apache/http/StatusLine;Lorg/apache/http/ReasonPhraseCatalog;Ljava/util/Locale;)V"/>
+		<method name="getReason(I)Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/message/BasicLineFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/message/LineFormatter"/>
+		<method name="&lt;init>()V"/>
+		<method name="doFormatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)V"/>
+		<method name="doFormatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)V"/>
+		<method name="doFormatStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/StatusLine;)V"/>
+		<method name="estimateProtocolVersionLen(Lorg/apache/http/ProtocolVersion;)I"/>
+		<method name="formatHeader(Lorg/apache/http/Header;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
+		<method name="formatProtocolVersion(Lorg/apache/http/ProtocolVersion;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
+		<method name="formatRequestLine(Lorg/apache/http/RequestLine;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
+		<method name="formatStatusLine(Lorg/apache/http/StatusLine;Lorg/apache/http/message/LineFormatter;)Ljava/lang/String;"/>
+		<method name="initBuffer(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/util/CharArrayBuffer;"/>
+		<field name="DEFAULT"/>
+	</class>
+	<class name="org/apache/http/message/BasicLineParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/message/LineParser"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/apache/http/ProtocolVersion;)V"/>
+		<method name="createProtocolVersion(II)Lorg/apache/http/ProtocolVersion;"/>
+		<method name="createRequestLine(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/RequestLine;"/>
+		<method name="createStatusLine(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)Lorg/apache/http/StatusLine;"/>
+		<method name="parseHeader(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/Header;"/>
+		<method name="parseProtocolVersion(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/ProtocolVersion;"/>
+		<method name="parseRequestLine(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/RequestLine;"/>
+		<method name="parseStatusLine(Ljava/lang/String;Lorg/apache/http/message/LineParser;)Lorg/apache/http/StatusLine;"/>
+		<method name="skipWhitespace(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)V"/>
+		<field name="DEFAULT"/>
+		<field name="protocol"/>
+	</class>
+	<class name="org/apache/http/message/BasicListHeaderIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HeaderIterator"/>
+		<method name="&lt;init>(Ljava/util/List;Ljava/lang/String;)V"/>
+		<method name="filterHeader(I)Z"/>
+		<method name="findNext(I)I"/>
+		<field name="allHeaders"/>
+		<field name="currentIndex"/>
+		<field name="headerName"/>
+		<field name="lastIndex"/>
+	</class>
+	<class name="org/apache/http/message/BasicNameValuePair" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/NameValuePair"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicRequestLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/RequestLine"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Lorg/apache/http/ProtocolVersion;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicStatusLine" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/StatusLine"/>
+		<method name="&lt;init>(Lorg/apache/http/ProtocolVersion;ILjava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/message/BasicTokenIterator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/TokenIterator"/>
+		<method name="&lt;init>(Lorg/apache/http/HeaderIterator;)V"/>
+		<method name="createToken(Ljava/lang/String;II)Ljava/lang/String;"/>
+		<method name="findNext(I)I"/>
+		<method name="findTokenEnd(I)I"/>
+		<method name="findTokenSeparator(I)I"/>
+		<method name="findTokenStart(I)I"/>
+		<method name="isHttpSeparator(C)Z"/>
+		<method name="isTokenChar(C)Z"/>
+		<method name="isTokenSeparator(C)Z"/>
+		<method name="isWhitespace(C)Z"/>
+		<field name="HTTP_SEPARATORS"/>
+		<field name="currentHeader"/>
+		<field name="currentToken"/>
+		<field name="headerIt"/>
+		<field name="searchPos"/>
+	</class>
+	<class name="org/apache/http/message/BufferedHeader" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/FormattedHeader"/>
+		<method name="&lt;init>(Lorg/apache/http/util/CharArrayBuffer;)V"/>
+	</class>
+	<class name="org/apache/http/message/HeaderGroup" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="addHeader(Lorg/apache/http/Header;)V"/>
+		<method name="clear()V"/>
+		<method name="containsHeader(Ljava/lang/String;)Z"/>
+		<method name="copy()Lorg/apache/http/message/HeaderGroup;"/>
+		<method name="getAllHeaders()[Lorg/apache/http/Header;"/>
+		<method name="getCondensedHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
+		<method name="getFirstHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
+		<method name="getHeaders(Ljava/lang/String;)[Lorg/apache/http/Header;"/>
+		<method name="getLastHeader(Ljava/lang/String;)Lorg/apache/http/Header;"/>
+		<method name="iterator()Lorg/apache/http/HeaderIterator;"/>
+		<method name="iterator(Ljava/lang/String;)Lorg/apache/http/HeaderIterator;"/>
+		<method name="removeHeader(Lorg/apache/http/Header;)V"/>
+		<method name="setHeaders([Lorg/apache/http/Header;)V"/>
+		<method name="updateHeader(Lorg/apache/http/Header;)V"/>
+	</class>
+	<class name="org/apache/http/message/HeaderValueFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="formatElements(Lorg/apache/http/util/CharArrayBuffer;[Lorg/apache/http/HeaderElement;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
+		<method name="formatHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/HeaderElement;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
+		<method name="formatNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/NameValuePair;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
+		<method name="formatParameters(Lorg/apache/http/util/CharArrayBuffer;[Lorg/apache/http/NameValuePair;Z)Lorg/apache/http/util/CharArrayBuffer;"/>
+	</class>
+	<class name="org/apache/http/message/HeaderValueParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="parseElements(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/HeaderElement;"/>
+		<method name="parseHeaderElement(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/HeaderElement;"/>
+		<method name="parseNameValuePair(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/NameValuePair;"/>
+		<method name="parseParameters(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)[Lorg/apache/http/NameValuePair;"/>
+	</class>
+	<class name="org/apache/http/message/LineFormatter" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="appendProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/ProtocolVersion;)Lorg/apache/http/util/CharArrayBuffer;"/>
+		<method name="formatHeader(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/Header;)Lorg/apache/http/util/CharArrayBuffer;"/>
+		<method name="formatRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/RequestLine;)Lorg/apache/http/util/CharArrayBuffer;"/>
+		<method name="formatStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/StatusLine;)Lorg/apache/http/util/CharArrayBuffer;"/>
+	</class>
+	<class name="org/apache/http/message/LineParser" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="hasProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Z"/>
+		<method name="parseHeader(Lorg/apache/http/util/CharArrayBuffer;)Lorg/apache/http/Header;"/>
+		<method name="parseProtocolVersion(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/ProtocolVersion;"/>
+		<method name="parseRequestLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/RequestLine;"/>
+		<method name="parseStatusLine(Lorg/apache/http/util/CharArrayBuffer;Lorg/apache/http/message/ParserCursor;)Lorg/apache/http/StatusLine;"/>
+	</class>
+	<class name="org/apache/http/message/ParserCursor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(II)V"/>
+		<method name="atEnd()Z"/>
+		<method name="getLowerBound()I"/>
+		<method name="getPos()I"/>
+		<method name="getUpperBound()I"/>
+		<method name="updatePos(I)V"/>
+	</class>
+	<class name="org/apache/http/params/AbstractHttpParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/params/HttpParams"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/params/BasicHttpParams" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/AbstractHttpParams"/>
+		<implements name="java/io/Serializable"/>
+		<implements name="java/lang/Cloneable"/>
+		<method name="&lt;init>()V"/>
+		<method name="clear()V"/>
+		<method name="copyParams(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="isParameterSet(Ljava/lang/String;)Z"/>
+		<method name="isParameterSetLocally(Ljava/lang/String;)Z"/>
+		<method name="setParameters([Ljava/lang/String;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="org/apache/http/params/CoreConnectionPNames" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<field name="CONNECTION_TIMEOUT" deprecated="29"/>
+		<field name="MAX_HEADER_COUNT" deprecated="29"/>
+		<field name="MAX_LINE_LENGTH" deprecated="29"/>
+		<field name="SOCKET_BUFFER_SIZE" deprecated="29"/>
+		<field name="SO_LINGER" deprecated="29"/>
+		<field name="SO_TIMEOUT" deprecated="29"/>
+		<field name="STALE_CONNECTION_CHECK" deprecated="29"/>
+		<field name="TCP_NODELAY" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/params/CoreProtocolPNames" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="HTTP_CONTENT_CHARSET"/>
+		<field name="HTTP_ELEMENT_CHARSET"/>
+		<field name="ORIGIN_SERVER"/>
+		<field name="PROTOCOL_VERSION"/>
+		<field name="STRICT_TRANSFER_ENCODING"/>
+		<field name="USER_AGENT"/>
+		<field name="USE_EXPECT_CONTINUE"/>
+		<field name="WAIT_FOR_CONTINUE"/>
+	</class>
+	<class name="org/apache/http/params/DefaultedHttpParams" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/AbstractHttpParams"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="getDefaults()Lorg/apache/http/params/HttpParams;"/>
+	</class>
+	<class name="org/apache/http/params/HttpAbstractParamBean" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<field name="params"/>
+	</class>
+	<class name="org/apache/http/params/HttpConnectionParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setConnectionTimeout(I)V"/>
+		<method name="setLinger(I)V"/>
+		<method name="setSoTimeout(I)V"/>
+		<method name="setSocketBufferSize(I)V"/>
+		<method name="setStaleCheckingEnabled(Z)V"/>
+		<method name="setTcpNoDelay(Z)V"/>
+	</class>
+	<class name="org/apache/http/params/HttpConnectionParams" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/params/CoreConnectionPNames"/>
+		<method name="getConnectionTimeout(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+		<method name="getLinger(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+		<method name="getSoTimeout(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+		<method name="getSocketBufferSize(Lorg/apache/http/params/HttpParams;)I" deprecated="29"/>
+		<method name="getTcpNoDelay(Lorg/apache/http/params/HttpParams;)Z" deprecated="29"/>
+		<method name="isStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;)Z" deprecated="29"/>
+		<method name="setConnectionTimeout(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+		<method name="setLinger(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+		<method name="setSoTimeout(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+		<method name="setSocketBufferSize(Lorg/apache/http/params/HttpParams;I)V" deprecated="29"/>
+		<method name="setStaleCheckingEnabled(Lorg/apache/http/params/HttpParams;Z)V" deprecated="29"/>
+		<method name="setTcpNoDelay(Lorg/apache/http/params/HttpParams;Z)V" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/params/HttpParams" since="1" deprecated="22">
+		<extends name="java/lang/Object"/>
+		<method name="copy()Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+		<method name="getBooleanParameter(Ljava/lang/String;Z)Z" deprecated="29"/>
+		<method name="getDoubleParameter(Ljava/lang/String;D)D" deprecated="29"/>
+		<method name="getIntParameter(Ljava/lang/String;I)I" deprecated="29"/>
+		<method name="getLongParameter(Ljava/lang/String;J)J" deprecated="29"/>
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;" deprecated="29"/>
+		<method name="isParameterFalse(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="isParameterTrue(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="removeParameter(Ljava/lang/String;)Z" deprecated="29"/>
+		<method name="setBooleanParameter(Ljava/lang/String;Z)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+		<method name="setDoubleParameter(Ljava/lang/String;D)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+		<method name="setIntParameter(Ljava/lang/String;I)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+		<method name="setLongParameter(Ljava/lang/String;J)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/http/params/HttpParams;" deprecated="29"/>
+	</class>
+	<class name="org/apache/http/params/HttpProtocolParamBean" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/params/HttpAbstractParamBean"/>
+		<method name="&lt;init>(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setContentCharset(Ljava/lang/String;)V"/>
+		<method name="setHttpElementCharset(Ljava/lang/String;)V"/>
+		<method name="setUseExpectContinue(Z)V"/>
+		<method name="setUserAgent(Ljava/lang/String;)V"/>
+		<method name="setVersion(Lorg/apache/http/HttpVersion;)V"/>
+	</class>
+	<class name="org/apache/http/params/HttpProtocolParams" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/params/CoreProtocolPNames"/>
+		<method name="getContentCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
+		<method name="getHttpElementCharset(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
+		<method name="getUserAgent(Lorg/apache/http/params/HttpParams;)Ljava/lang/String;"/>
+		<method name="getVersion(Lorg/apache/http/params/HttpParams;)Lorg/apache/http/ProtocolVersion;"/>
+		<method name="setContentCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
+		<method name="setHttpElementCharset(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
+		<method name="setUseExpectContinue(Lorg/apache/http/params/HttpParams;Z)V"/>
+		<method name="setUserAgent(Lorg/apache/http/params/HttpParams;Ljava/lang/String;)V"/>
+		<method name="setVersion(Lorg/apache/http/params/HttpParams;Lorg/apache/http/ProtocolVersion;)V"/>
+		<method name="useExpectContinue(Lorg/apache/http/params/HttpParams;)Z"/>
+	</class>
+	<class name="org/apache/http/protocol/BasicHttpContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/protocol/HttpContext"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/BasicHttpProcessor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="java/lang/Cloneable"/>
+		<implements name="org/apache/http/protocol/HttpProcessor"/>
+		<implements name="org/apache/http/protocol/HttpRequestInterceptorList"/>
+		<implements name="org/apache/http/protocol/HttpResponseInterceptorList"/>
+		<method name="&lt;init>()V"/>
+		<method name="addInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V"/>
+		<method name="addInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V"/>
+		<method name="addInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V"/>
+		<method name="addInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V"/>
+		<method name="clearInterceptors()V"/>
+		<method name="copy()Lorg/apache/http/protocol/BasicHttpProcessor;"/>
+		<method name="copyInterceptors(Lorg/apache/http/protocol/BasicHttpProcessor;)V"/>
+		<field name="requestInterceptors"/>
+		<field name="responseInterceptors"/>
+	</class>
+	<class name="org/apache/http/protocol/DefaultedHttpContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/protocol/HttpContext"/>
+		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;Lorg/apache/http/protocol/HttpContext;)V"/>
+		<method name="getDefaults()Lorg/apache/http/protocol/HttpContext;"/>
+	</class>
+	<class name="org/apache/http/protocol/ExecutionContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<field name="HTTP_CONNECTION"/>
+		<field name="HTTP_PROXY_HOST"/>
+		<field name="HTTP_REQUEST"/>
+		<field name="HTTP_REQ_SENT"/>
+		<field name="HTTP_RESPONSE"/>
+		<field name="HTTP_TARGET_HOST"/>
+	</class>
+	<class name="org/apache/http/protocol/HTTP" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="isWhitespace(C)Z"/>
+		<field name="ASCII"/>
+		<field name="CHARSET_PARAM"/>
+		<field name="CHUNK_CODING"/>
+		<field name="CONN_CLOSE"/>
+		<field name="CONN_DIRECTIVE"/>
+		<field name="CONN_KEEP_ALIVE"/>
+		<field name="CONTENT_ENCODING"/>
+		<field name="CONTENT_LEN"/>
+		<field name="CONTENT_TYPE"/>
+		<field name="CR"/>
+		<field name="DATE_HEADER"/>
+		<field name="DEFAULT_CONTENT_CHARSET"/>
+		<field name="DEFAULT_CONTENT_TYPE"/>
+		<field name="DEFAULT_PROTOCOL_CHARSET"/>
+		<field name="EXPECT_CONTINUE"/>
+		<field name="EXPECT_DIRECTIVE"/>
+		<field name="HT"/>
+		<field name="IDENTITY_CODING"/>
+		<field name="ISO_8859_1"/>
+		<field name="LF"/>
+		<field name="OCTET_STREAM_TYPE"/>
+		<field name="PLAIN_TEXT_TYPE"/>
+		<field name="SERVER_HEADER"/>
+		<field name="SP"/>
+		<field name="TARGET_HOST"/>
+		<field name="TRANSFER_ENCODING"/>
+		<field name="USER_AGENT"/>
+		<field name="US_ASCII"/>
+		<field name="UTF_16"/>
+		<field name="UTF_8"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpContext" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="removeAttribute(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<field name="RESERVED_PREFIX"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpDateGenerator" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getCurrentDate()Ljava/lang/String;"/>
+		<field name="GMT"/>
+		<field name="PATTERN_RFC1123"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpExpectationVerifier" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="verify(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpProcessor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<implements name="org/apache/http/HttpResponseInterceptor"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestExecutor" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="canResponseHaveBody(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;)Z"/>
+		<method name="doReceiveResponse(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+		<method name="doSendRequest(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+		<method name="execute(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpClientConnection;Lorg/apache/http/protocol/HttpContext;)Lorg/apache/http/HttpResponse;"/>
+		<method name="postProcess(Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V"/>
+		<method name="preProcess(Lorg/apache/http/HttpRequest;Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/protocol/HttpContext;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestHandler" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="handle(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestHandlerRegistry" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/protocol/HttpRequestHandlerResolver"/>
+		<method name="&lt;init>()V"/>
+		<method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z" deprecated="15"/>
+		<method name="register(Ljava/lang/String;Lorg/apache/http/protocol/HttpRequestHandler;)V"/>
+		<method name="setHandlers(Ljava/util/Map;)V"/>
+		<method name="unregister(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestHandlerResolver" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="lookup(Ljava/lang/String;)Lorg/apache/http/protocol/HttpRequestHandler;"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpRequestInterceptorList" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;)V"/>
+		<method name="addRequestInterceptor(Lorg/apache/http/HttpRequestInterceptor;I)V"/>
+		<method name="clearRequestInterceptors()V"/>
+		<method name="getRequestInterceptor(I)Lorg/apache/http/HttpRequestInterceptor;"/>
+		<method name="getRequestInterceptorCount()I"/>
+		<method name="removeRequestInterceptorByClass(Ljava/lang/Class;)V"/>
+		<method name="setInterceptors(Ljava/util/List;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpResponseInterceptorList" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;)V"/>
+		<method name="addResponseInterceptor(Lorg/apache/http/HttpResponseInterceptor;I)V"/>
+		<method name="clearResponseInterceptors()V"/>
+		<method name="getResponseInterceptor(I)Lorg/apache/http/HttpResponseInterceptor;"/>
+		<method name="getResponseInterceptorCount()I"/>
+		<method name="removeResponseInterceptorByClass(Ljava/lang/Class;)V"/>
+		<method name="setInterceptors(Ljava/util/List;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/HttpService" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Lorg/apache/http/protocol/HttpProcessor;Lorg/apache/http/ConnectionReuseStrategy;Lorg/apache/http/HttpResponseFactory;)V"/>
+		<method name="doService(Lorg/apache/http/HttpRequest;Lorg/apache/http/HttpResponse;Lorg/apache/http/protocol/HttpContext;)V"/>
+		<method name="getParams()Lorg/apache/http/params/HttpParams;"/>
+		<method name="handleException(Lorg/apache/http/HttpException;Lorg/apache/http/HttpResponse;)V"/>
+		<method name="handleRequest(Lorg/apache/http/HttpServerConnection;Lorg/apache/http/protocol/HttpContext;)V"/>
+		<method name="setConnReuseStrategy(Lorg/apache/http/ConnectionReuseStrategy;)V"/>
+		<method name="setExpectationVerifier(Lorg/apache/http/protocol/HttpExpectationVerifier;)V"/>
+		<method name="setHandlerResolver(Lorg/apache/http/protocol/HttpRequestHandlerResolver;)V"/>
+		<method name="setHttpProcessor(Lorg/apache/http/protocol/HttpProcessor;)V"/>
+		<method name="setParams(Lorg/apache/http/params/HttpParams;)V"/>
+		<method name="setResponseFactory(Lorg/apache/http/HttpResponseFactory;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/RequestConnControl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/RequestContent" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/RequestDate" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/RequestExpectContinue" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/RequestTargetHost" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/RequestUserAgent" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpRequestInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/ResponseConnControl" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpResponseInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/ResponseContent" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpResponseInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/ResponseDate" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpResponseInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/ResponseServer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<implements name="org/apache/http/HttpResponseInterceptor"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/apache/http/protocol/SyncBasicHttpContext" since="1" deprecated="22" removed="23">
+		<extends name="org/apache/http/protocol/BasicHttpContext"/>
+		<method name="&lt;init>(Lorg/apache/http/protocol/HttpContext;)V"/>
+	</class>
+	<class name="org/apache/http/protocol/UriPatternMatcher" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="lookup(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="matchUriRequestPattern(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="register(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="setHandlers(Ljava/util/Map;)V"/>
+		<method name="unregister(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/apache/http/util/ByteArrayBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(I)V"/>
+		<method name="append(Lorg/apache/http/util/CharArrayBuffer;II)V"/>
+		<method name="append([BII)V"/>
+		<method name="append([CII)V"/>
+		<method name="buffer()[B"/>
+		<method name="byteAt(I)I"/>
+		<method name="capacity()I"/>
+		<method name="clear()V"/>
+		<method name="isEmpty()Z"/>
+		<method name="isFull()Z"/>
+		<method name="length()I"/>
+		<method name="setLength(I)V"/>
+		<method name="toByteArray()[B"/>
+	</class>
+	<class name="org/apache/http/util/CharArrayBuffer" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(I)V"/>
+		<method name="append(C)V"/>
+		<method name="append(Ljava/lang/Object;)V"/>
+		<method name="append(Ljava/lang/String;)V"/>
+		<method name="append(Lorg/apache/http/util/ByteArrayBuffer;II)V"/>
+		<method name="append(Lorg/apache/http/util/CharArrayBuffer;)V"/>
+		<method name="append(Lorg/apache/http/util/CharArrayBuffer;II)V"/>
+		<method name="append([BII)V"/>
+		<method name="append([CII)V"/>
+		<method name="buffer()[C"/>
+		<method name="capacity()I"/>
+		<method name="charAt(I)C"/>
+		<method name="clear()V"/>
+		<method name="ensureCapacity(I)V"/>
+		<method name="indexOf(I)I"/>
+		<method name="indexOf(III)I"/>
+		<method name="isEmpty()Z"/>
+		<method name="isFull()Z"/>
+		<method name="length()I"/>
+		<method name="setLength(I)V"/>
+		<method name="substring(II)Ljava/lang/String;"/>
+		<method name="substringTrimmed(II)Ljava/lang/String;"/>
+		<method name="toCharArray()[C"/>
+	</class>
+	<class name="org/apache/http/util/EncodingUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getAsciiBytes(Ljava/lang/String;)[B"/>
+		<method name="getAsciiString([B)Ljava/lang/String;"/>
+		<method name="getAsciiString([BII)Ljava/lang/String;"/>
+		<method name="getBytes(Ljava/lang/String;Ljava/lang/String;)[B"/>
+		<method name="getString([BIILjava/lang/String;)Ljava/lang/String;"/>
+		<method name="getString([BLjava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/util/EntityUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="getContentCharSet(Lorg/apache/http/HttpEntity;)Ljava/lang/String;"/>
+		<method name="toByteArray(Lorg/apache/http/HttpEntity;)[B"/>
+		<method name="toString(Lorg/apache/http/HttpEntity;)Ljava/lang/String;"/>
+		<method name="toString(Lorg/apache/http/HttpEntity;Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="org/apache/http/util/ExceptionUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="initCause(Ljava/lang/Throwable;Ljava/lang/Throwable;)V"/>
+	</class>
+	<class name="org/apache/http/util/LangUtils" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="equals(Ljava/lang/Object;Ljava/lang/Object;)Z"/>
+		<method name="equals([Ljava/lang/Object;[Ljava/lang/Object;)Z"/>
+		<method name="hashCode(II)I"/>
+		<method name="hashCode(ILjava/lang/Object;)I"/>
+		<method name="hashCode(IZ)I"/>
+		<field name="HASH_OFFSET"/>
+		<field name="HASH_SEED"/>
+	</class>
+	<class name="org/apache/http/util/VersionInfo" since="1" deprecated="22" removed="23">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="fromMap(Ljava/lang/String;Ljava/util/Map;Ljava/lang/ClassLoader;)Lorg/apache/http/util/VersionInfo;"/>
+		<method name="getClassloader()Ljava/lang/String;"/>
+		<method name="getModule()Ljava/lang/String;"/>
+		<method name="getPackage()Ljava/lang/String;"/>
+		<method name="getRelease()Ljava/lang/String;"/>
+		<method name="getTimestamp()Ljava/lang/String;"/>
+		<method name="loadVersionInfo(Ljava/lang/String;Ljava/lang/ClassLoader;)Lorg/apache/http/util/VersionInfo;"/>
+		<method name="loadVersionInfo([Ljava/lang/String;Ljava/lang/ClassLoader;)[Lorg/apache/http/util/VersionInfo;"/>
+		<field name="PROPERTY_MODULE"/>
+		<field name="PROPERTY_RELEASE"/>
+		<field name="PROPERTY_TIMESTAMP"/>
+		<field name="UNAVAILABLE"/>
+		<field name="VERSION_PROPERTY_FILE"/>
+	</class>
+	<class name="org/json/JSONArray" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Object;)V" since="19"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/util/Collection;)V"/>
+		<method name="&lt;init>(Lorg/json/JSONTokener;)V"/>
+		<method name="get(I)Ljava/lang/Object;"/>
+		<method name="getBoolean(I)Z"/>
+		<method name="getDouble(I)D"/>
+		<method name="getInt(I)I"/>
+		<method name="getJSONArray(I)Lorg/json/JSONArray;"/>
+		<method name="getJSONObject(I)Lorg/json/JSONObject;"/>
+		<method name="getLong(I)J"/>
+		<method name="getString(I)Ljava/lang/String;"/>
+		<method name="isNull(I)Z"/>
+		<method name="join(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="length()I"/>
+		<method name="opt(I)Ljava/lang/Object;"/>
+		<method name="optBoolean(I)Z"/>
+		<method name="optBoolean(IZ)Z"/>
+		<method name="optDouble(I)D"/>
+		<method name="optDouble(ID)D"/>
+		<method name="optInt(I)I"/>
+		<method name="optInt(II)I"/>
+		<method name="optJSONArray(I)Lorg/json/JSONArray;"/>
+		<method name="optJSONObject(I)Lorg/json/JSONObject;"/>
+		<method name="optLong(I)J"/>
+		<method name="optLong(IJ)J"/>
+		<method name="optString(I)Ljava/lang/String;"/>
+		<method name="optString(ILjava/lang/String;)Ljava/lang/String;"/>
+		<method name="put(D)Lorg/json/JSONArray;"/>
+		<method name="put(I)Lorg/json/JSONArray;"/>
+		<method name="put(ID)Lorg/json/JSONArray;"/>
+		<method name="put(II)Lorg/json/JSONArray;"/>
+		<method name="put(IJ)Lorg/json/JSONArray;"/>
+		<method name="put(ILjava/lang/Object;)Lorg/json/JSONArray;"/>
+		<method name="put(IZ)Lorg/json/JSONArray;"/>
+		<method name="put(J)Lorg/json/JSONArray;"/>
+		<method name="put(Ljava/lang/Object;)Lorg/json/JSONArray;"/>
+		<method name="put(Z)Lorg/json/JSONArray;"/>
+		<method name="remove(I)Ljava/lang/Object;" since="19"/>
+		<method name="toJSONObject(Lorg/json/JSONArray;)Lorg/json/JSONObject;"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+	</class>
+	<class name="org/json/JSONException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Throwable;)V" since="27"/>
+		<method name="&lt;init>(Ljava/lang/Throwable;)V" since="27"/>
+	</class>
+	<class name="org/json/JSONObject" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/util/Map;)V"/>
+		<method name="&lt;init>(Lorg/json/JSONObject;[Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Lorg/json/JSONTokener;)V"/>
+		<method name="accumulate(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;"/>
+		<method name="get(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getBoolean(Ljava/lang/String;)Z"/>
+		<method name="getDouble(Ljava/lang/String;)D"/>
+		<method name="getInt(Ljava/lang/String;)I"/>
+		<method name="getJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;"/>
+		<method name="getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;"/>
+		<method name="getLong(Ljava/lang/String;)J"/>
+		<method name="getString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="has(Ljava/lang/String;)Z"/>
+		<method name="isNull(Ljava/lang/String;)Z"/>
+		<method name="keys()Ljava/util/Iterator;"/>
+		<method name="length()I"/>
+		<method name="names()Lorg/json/JSONArray;"/>
+		<method name="numberToString(Ljava/lang/Number;)Ljava/lang/String;"/>
+		<method name="opt(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="optBoolean(Ljava/lang/String;)Z"/>
+		<method name="optBoolean(Ljava/lang/String;Z)Z"/>
+		<method name="optDouble(Ljava/lang/String;)D"/>
+		<method name="optDouble(Ljava/lang/String;D)D"/>
+		<method name="optInt(Ljava/lang/String;)I"/>
+		<method name="optInt(Ljava/lang/String;I)I"/>
+		<method name="optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;"/>
+		<method name="optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;"/>
+		<method name="optLong(Ljava/lang/String;)J"/>
+		<method name="optLong(Ljava/lang/String;J)J"/>
+		<method name="optString(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="put(Ljava/lang/String;D)Lorg/json/JSONObject;"/>
+		<method name="put(Ljava/lang/String;I)Lorg/json/JSONObject;"/>
+		<method name="put(Ljava/lang/String;J)Lorg/json/JSONObject;"/>
+		<method name="put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;"/>
+		<method name="put(Ljava/lang/String;Z)Lorg/json/JSONObject;"/>
+		<method name="putOpt(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject;"/>
+		<method name="quote(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="remove(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="toJSONArray(Lorg/json/JSONArray;)Lorg/json/JSONArray;"/>
+		<method name="toString(I)Ljava/lang/String;"/>
+		<method name="wrap(Ljava/lang/Object;)Ljava/lang/Object;" since="19"/>
+		<field name="NULL"/>
+	</class>
+	<class name="org/json/JSONStringer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="array()Lorg/json/JSONStringer;"/>
+		<method name="endArray()Lorg/json/JSONStringer;"/>
+		<method name="endObject()Lorg/json/JSONStringer;"/>
+		<method name="key(Ljava/lang/String;)Lorg/json/JSONStringer;"/>
+		<method name="object()Lorg/json/JSONStringer;"/>
+		<method name="value(D)Lorg/json/JSONStringer;"/>
+		<method name="value(J)Lorg/json/JSONStringer;"/>
+		<method name="value(Ljava/lang/Object;)Lorg/json/JSONStringer;"/>
+		<method name="value(Z)Lorg/json/JSONStringer;"/>
+	</class>
+	<class name="org/json/JSONTokener" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="back()V"/>
+		<method name="dehexchar(C)I"/>
+		<method name="more()Z"/>
+		<method name="next()C"/>
+		<method name="next(C)C"/>
+		<method name="next(I)Ljava/lang/String;"/>
+		<method name="nextClean()C"/>
+		<method name="nextString(C)Ljava/lang/String;"/>
+		<method name="nextTo(C)Ljava/lang/String;"/>
+		<method name="nextTo(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="nextValue()Ljava/lang/Object;"/>
+		<method name="skipPast(Ljava/lang/String;)V"/>
+		<method name="skipTo(C)C"/>
+		<method name="syntaxError(Ljava/lang/String;)Lorg/json/JSONException;"/>
+	</class>
+	<class name="org/w3c/dom/Attr" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getOwnerElement()Lorg/w3c/dom/Element;"/>
+		<method name="getSchemaTypeInfo()Lorg/w3c/dom/TypeInfo;" since="8"/>
+		<method name="getSpecified()Z"/>
+		<method name="getValue()Ljava/lang/String;"/>
+		<method name="isId()Z" since="8"/>
+		<method name="setValue(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/w3c/dom/CDATASection" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Text"/>
+	</class>
+	<class name="org/w3c/dom/CharacterData" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="appendData(Ljava/lang/String;)V"/>
+		<method name="deleteData(II)V"/>
+		<method name="getData()Ljava/lang/String;"/>
+		<method name="getLength()I"/>
+		<method name="insertData(ILjava/lang/String;)V"/>
+		<method name="replaceData(IILjava/lang/String;)V"/>
+		<method name="setData(Ljava/lang/String;)V"/>
+		<method name="substringData(II)Ljava/lang/String;"/>
+	</class>
+	<class name="org/w3c/dom/Comment" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/CharacterData"/>
+	</class>
+	<class name="org/w3c/dom/DOMConfiguration" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="canSetParameter(Ljava/lang/String;Ljava/lang/Object;)Z"/>
+		<method name="getParameter(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getParameterNames()Lorg/w3c/dom/DOMStringList;"/>
+		<method name="setParameter(Ljava/lang/String;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="org/w3c/dom/DOMError" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getLocation()Lorg/w3c/dom/DOMLocator;"/>
+		<method name="getMessage()Ljava/lang/String;"/>
+		<method name="getRelatedData()Ljava/lang/Object;"/>
+		<method name="getRelatedException()Ljava/lang/Object;"/>
+		<method name="getSeverity()S"/>
+		<method name="getType()Ljava/lang/String;"/>
+		<field name="SEVERITY_ERROR"/>
+		<field name="SEVERITY_FATAL_ERROR"/>
+		<field name="SEVERITY_WARNING"/>
+	</class>
+	<class name="org/w3c/dom/DOMErrorHandler" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="handleError(Lorg/w3c/dom/DOMError;)Z"/>
+	</class>
+	<class name="org/w3c/dom/DOMException" since="1">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(SLjava/lang/String;)V"/>
+		<field name="DOMSTRING_SIZE_ERR"/>
+		<field name="HIERARCHY_REQUEST_ERR"/>
+		<field name="INDEX_SIZE_ERR"/>
+		<field name="INUSE_ATTRIBUTE_ERR"/>
+		<field name="INVALID_ACCESS_ERR"/>
+		<field name="INVALID_CHARACTER_ERR"/>
+		<field name="INVALID_MODIFICATION_ERR"/>
+		<field name="INVALID_STATE_ERR"/>
+		<field name="NAMESPACE_ERR"/>
+		<field name="NOT_FOUND_ERR"/>
+		<field name="NOT_SUPPORTED_ERR"/>
+		<field name="NO_DATA_ALLOWED_ERR"/>
+		<field name="NO_MODIFICATION_ALLOWED_ERR"/>
+		<field name="SYNTAX_ERR"/>
+		<field name="TYPE_MISMATCH_ERR" since="8"/>
+		<field name="VALIDATION_ERR" since="8"/>
+		<field name="WRONG_DOCUMENT_ERR"/>
+		<field name="code"/>
+	</class>
+	<class name="org/w3c/dom/DOMImplementation" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createDocument(Ljava/lang/String;Ljava/lang/String;Lorg/w3c/dom/DocumentType;)Lorg/w3c/dom/Document;"/>
+		<method name="createDocumentType(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/DocumentType;"/>
+		<method name="getFeature(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;" since="8"/>
+		<method name="hasFeature(Ljava/lang/String;Ljava/lang/String;)Z"/>
+	</class>
+	<class name="org/w3c/dom/DOMImplementationList" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getLength()I"/>
+		<method name="item(I)Lorg/w3c/dom/DOMImplementation;"/>
+	</class>
+	<class name="org/w3c/dom/DOMImplementationSource" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getDOMImplementation(Ljava/lang/String;)Lorg/w3c/dom/DOMImplementation;"/>
+		<method name="getDOMImplementationList(Ljava/lang/String;)Lorg/w3c/dom/DOMImplementationList;"/>
+	</class>
+	<class name="org/w3c/dom/DOMLocator" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getByteOffset()I"/>
+		<method name="getColumnNumber()I"/>
+		<method name="getLineNumber()I"/>
+		<method name="getRelatedNode()Lorg/w3c/dom/Node;"/>
+		<method name="getUri()Ljava/lang/String;"/>
+		<method name="getUtf16Offset()I"/>
+	</class>
+	<class name="org/w3c/dom/DOMStringList" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="contains(Ljava/lang/String;)Z"/>
+		<method name="getLength()I"/>
+		<method name="item(I)Ljava/lang/String;"/>
+	</class>
+	<class name="org/w3c/dom/Document" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="adoptNode(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;" since="8"/>
+		<method name="createAttribute(Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
+		<method name="createAttributeNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
+		<method name="createCDATASection(Ljava/lang/String;)Lorg/w3c/dom/CDATASection;"/>
+		<method name="createComment(Ljava/lang/String;)Lorg/w3c/dom/Comment;"/>
+		<method name="createDocumentFragment()Lorg/w3c/dom/DocumentFragment;"/>
+		<method name="createElement(Ljava/lang/String;)Lorg/w3c/dom/Element;"/>
+		<method name="createElementNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;"/>
+		<method name="createEntityReference(Ljava/lang/String;)Lorg/w3c/dom/EntityReference;"/>
+		<method name="createProcessingInstruction(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/ProcessingInstruction;"/>
+		<method name="createTextNode(Ljava/lang/String;)Lorg/w3c/dom/Text;"/>
+		<method name="getDoctype()Lorg/w3c/dom/DocumentType;"/>
+		<method name="getDocumentElement()Lorg/w3c/dom/Element;"/>
+		<method name="getDocumentURI()Ljava/lang/String;" since="8"/>
+		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;" since="8"/>
+		<method name="getElementById(Ljava/lang/String;)Lorg/w3c/dom/Element;"/>
+		<method name="getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
+		<method name="getElementsByTagNameNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
+		<method name="getImplementation()Lorg/w3c/dom/DOMImplementation;"/>
+		<method name="getInputEncoding()Ljava/lang/String;" since="8"/>
+		<method name="getStrictErrorChecking()Z" since="8"/>
+		<method name="getXmlEncoding()Ljava/lang/String;" since="8"/>
+		<method name="getXmlStandalone()Z" since="8"/>
+		<method name="getXmlVersion()Ljava/lang/String;" since="8"/>
+		<method name="importNode(Lorg/w3c/dom/Node;Z)Lorg/w3c/dom/Node;"/>
+		<method name="normalizeDocument()V" since="8"/>
+		<method name="renameNode(Lorg/w3c/dom/Node;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;" since="8"/>
+		<method name="setDocumentURI(Ljava/lang/String;)V" since="8"/>
+		<method name="setStrictErrorChecking(Z)V" since="8"/>
+		<method name="setXmlStandalone(Z)V" since="8"/>
+		<method name="setXmlVersion(Ljava/lang/String;)V" since="8"/>
+	</class>
+	<class name="org/w3c/dom/DocumentFragment" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+	</class>
+	<class name="org/w3c/dom/DocumentType" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="getEntities()Lorg/w3c/dom/NamedNodeMap;"/>
+		<method name="getInternalSubset()Ljava/lang/String;"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getNotations()Lorg/w3c/dom/NamedNodeMap;"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+	</class>
+	<class name="org/w3c/dom/Element" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="getAttribute(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getAttributeNS(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getAttributeNode(Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
+		<method name="getAttributeNodeNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Attr;"/>
+		<method name="getElementsByTagName(Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
+		<method name="getElementsByTagNameNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/NodeList;"/>
+		<method name="getSchemaTypeInfo()Lorg/w3c/dom/TypeInfo;" since="8"/>
+		<method name="getTagName()Ljava/lang/String;"/>
+		<method name="hasAttribute(Ljava/lang/String;)Z"/>
+		<method name="hasAttributeNS(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="removeAttribute(Ljava/lang/String;)V"/>
+		<method name="removeAttributeNS(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="removeAttributeNode(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;"/>
+		<method name="setAttribute(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setAttributeNS(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setAttributeNode(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;"/>
+		<method name="setAttributeNodeNS(Lorg/w3c/dom/Attr;)Lorg/w3c/dom/Attr;"/>
+		<method name="setIdAttribute(Ljava/lang/String;Z)V" since="8"/>
+		<method name="setIdAttributeNS(Ljava/lang/String;Ljava/lang/String;Z)V" since="8"/>
+		<method name="setIdAttributeNode(Lorg/w3c/dom/Attr;Z)V" since="8"/>
+	</class>
+	<class name="org/w3c/dom/Entity" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="getInputEncoding()Ljava/lang/String;" since="8"/>
+		<method name="getNotationName()Ljava/lang/String;"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="getXmlEncoding()Ljava/lang/String;" since="8"/>
+		<method name="getXmlVersion()Ljava/lang/String;" since="8"/>
+	</class>
+	<class name="org/w3c/dom/EntityReference" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+	</class>
+	<class name="org/w3c/dom/NameList" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="contains(Ljava/lang/String;)Z"/>
+		<method name="containsNS(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="getLength()I"/>
+		<method name="getName(I)Ljava/lang/String;"/>
+		<method name="getNamespaceURI(I)Ljava/lang/String;"/>
+	</class>
+	<class name="org/w3c/dom/NamedNodeMap" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getLength()I"/>
+		<method name="getNamedItem(Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
+		<method name="getNamedItemNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
+		<method name="item(I)Lorg/w3c/dom/Node;"/>
+		<method name="removeNamedItem(Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
+		<method name="removeNamedItemNS(Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Node;"/>
+		<method name="setNamedItem(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
+		<method name="setNamedItemNS(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
+	</class>
+	<class name="org/w3c/dom/Node" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="appendChild(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
+		<method name="cloneNode(Z)Lorg/w3c/dom/Node;"/>
+		<method name="compareDocumentPosition(Lorg/w3c/dom/Node;)S" since="8"/>
+		<method name="getAttributes()Lorg/w3c/dom/NamedNodeMap;"/>
+		<method name="getBaseURI()Ljava/lang/String;" since="8"/>
+		<method name="getChildNodes()Lorg/w3c/dom/NodeList;"/>
+		<method name="getFeature(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;" since="8"/>
+		<method name="getFirstChild()Lorg/w3c/dom/Node;"/>
+		<method name="getLastChild()Lorg/w3c/dom/Node;"/>
+		<method name="getLocalName()Ljava/lang/String;"/>
+		<method name="getNamespaceURI()Ljava/lang/String;"/>
+		<method name="getNextSibling()Lorg/w3c/dom/Node;"/>
+		<method name="getNodeName()Ljava/lang/String;"/>
+		<method name="getNodeType()S"/>
+		<method name="getNodeValue()Ljava/lang/String;"/>
+		<method name="getOwnerDocument()Lorg/w3c/dom/Document;"/>
+		<method name="getParentNode()Lorg/w3c/dom/Node;"/>
+		<method name="getPrefix()Ljava/lang/String;"/>
+		<method name="getPreviousSibling()Lorg/w3c/dom/Node;"/>
+		<method name="getTextContent()Ljava/lang/String;" since="8"/>
+		<method name="getUserData(Ljava/lang/String;)Ljava/lang/Object;" since="8"/>
+		<method name="hasAttributes()Z"/>
+		<method name="hasChildNodes()Z"/>
+		<method name="insertBefore(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
+		<method name="isDefaultNamespace(Ljava/lang/String;)Z" since="8"/>
+		<method name="isEqualNode(Lorg/w3c/dom/Node;)Z" since="8"/>
+		<method name="isSameNode(Lorg/w3c/dom/Node;)Z" since="8"/>
+		<method name="isSupported(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="lookupNamespaceURI(Ljava/lang/String;)Ljava/lang/String;" since="8"/>
+		<method name="lookupPrefix(Ljava/lang/String;)Ljava/lang/String;" since="8"/>
+		<method name="normalize()V"/>
+		<method name="removeChild(Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
+		<method name="replaceChild(Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)Lorg/w3c/dom/Node;"/>
+		<method name="setNodeValue(Ljava/lang/String;)V"/>
+		<method name="setPrefix(Ljava/lang/String;)V"/>
+		<method name="setTextContent(Ljava/lang/String;)V" since="8"/>
+		<method name="setUserData(Ljava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/UserDataHandler;)Ljava/lang/Object;" since="8"/>
+		<field name="ATTRIBUTE_NODE"/>
+		<field name="CDATA_SECTION_NODE"/>
+		<field name="COMMENT_NODE"/>
+		<field name="DOCUMENT_FRAGMENT_NODE"/>
+		<field name="DOCUMENT_NODE"/>
+		<field name="DOCUMENT_POSITION_CONTAINED_BY" since="8"/>
+		<field name="DOCUMENT_POSITION_CONTAINS" since="8"/>
+		<field name="DOCUMENT_POSITION_DISCONNECTED" since="8"/>
+		<field name="DOCUMENT_POSITION_FOLLOWING" since="8"/>
+		<field name="DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" since="8"/>
+		<field name="DOCUMENT_POSITION_PRECEDING" since="8"/>
+		<field name="DOCUMENT_TYPE_NODE"/>
+		<field name="ELEMENT_NODE"/>
+		<field name="ENTITY_NODE"/>
+		<field name="ENTITY_REFERENCE_NODE"/>
+		<field name="NOTATION_NODE"/>
+		<field name="PROCESSING_INSTRUCTION_NODE"/>
+		<field name="TEXT_NODE"/>
+	</class>
+	<class name="org/w3c/dom/NodeList" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getLength()I"/>
+		<method name="item(I)Lorg/w3c/dom/Node;"/>
+	</class>
+	<class name="org/w3c/dom/Notation" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+	</class>
+	<class name="org/w3c/dom/ProcessingInstruction" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/Node"/>
+		<method name="getData()Ljava/lang/String;"/>
+		<method name="getTarget()Ljava/lang/String;"/>
+		<method name="setData(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/w3c/dom/Text" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/w3c/dom/CharacterData"/>
+		<method name="getWholeText()Ljava/lang/String;" since="8"/>
+		<method name="isElementContentWhitespace()Z" since="8"/>
+		<method name="replaceWholeText(Ljava/lang/String;)Lorg/w3c/dom/Text;" since="8"/>
+		<method name="splitText(I)Lorg/w3c/dom/Text;"/>
+	</class>
+	<class name="org/w3c/dom/TypeInfo" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getTypeName()Ljava/lang/String;"/>
+		<method name="getTypeNamespace()Ljava/lang/String;"/>
+		<method name="isDerivedFrom(Ljava/lang/String;Ljava/lang/String;I)Z"/>
+		<field name="DERIVATION_EXTENSION"/>
+		<field name="DERIVATION_LIST"/>
+		<field name="DERIVATION_RESTRICTION"/>
+		<field name="DERIVATION_UNION"/>
+	</class>
+	<class name="org/w3c/dom/UserDataHandler" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="handle(SLjava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/Node;Lorg/w3c/dom/Node;)V"/>
+		<field name="NODE_ADOPTED"/>
+		<field name="NODE_CLONED"/>
+		<field name="NODE_DELETED"/>
+		<field name="NODE_IMPORTED"/>
+		<field name="NODE_RENAMED"/>
+	</class>
+	<class name="org/w3c/dom/ls/DOMImplementationLS" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="createLSInput()Lorg/w3c/dom/ls/LSInput;"/>
+		<method name="createLSOutput()Lorg/w3c/dom/ls/LSOutput;"/>
+		<method name="createLSParser(SLjava/lang/String;)Lorg/w3c/dom/ls/LSParser;"/>
+		<method name="createLSSerializer()Lorg/w3c/dom/ls/LSSerializer;"/>
+		<field name="MODE_ASYNCHRONOUS"/>
+		<field name="MODE_SYNCHRONOUS"/>
+	</class>
+	<class name="org/w3c/dom/ls/LSException" since="8">
+		<extends name="java/lang/RuntimeException"/>
+		<method name="&lt;init>(SLjava/lang/String;)V"/>
+		<field name="PARSE_ERR"/>
+		<field name="SERIALIZE_ERR"/>
+		<field name="code"/>
+	</class>
+	<class name="org/w3c/dom/ls/LSInput" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getBaseURI()Ljava/lang/String;"/>
+		<method name="getByteStream()Ljava/io/InputStream;"/>
+		<method name="getCertifiedText()Z"/>
+		<method name="getCharacterStream()Ljava/io/Reader;"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getStringData()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="setBaseURI(Ljava/lang/String;)V"/>
+		<method name="setByteStream(Ljava/io/InputStream;)V"/>
+		<method name="setCertifiedText(Z)V"/>
+		<method name="setCharacterStream(Ljava/io/Reader;)V"/>
+		<method name="setEncoding(Ljava/lang/String;)V"/>
+		<method name="setPublicId(Ljava/lang/String;)V"/>
+		<method name="setStringData(Ljava/lang/String;)V"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/w3c/dom/ls/LSOutput" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getByteStream()Ljava/io/OutputStream;"/>
+		<method name="getCharacterStream()Ljava/io/Writer;"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="setByteStream(Ljava/io/OutputStream;)V"/>
+		<method name="setCharacterStream(Ljava/io/Writer;)V"/>
+		<method name="setEncoding(Ljava/lang/String;)V"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/w3c/dom/ls/LSParser" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="abort()V"/>
+		<method name="getAsync()Z"/>
+		<method name="getBusy()Z"/>
+		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;"/>
+		<method name="getFilter()Lorg/w3c/dom/ls/LSParserFilter;"/>
+		<method name="parse(Lorg/w3c/dom/ls/LSInput;)Lorg/w3c/dom/Document;"/>
+		<method name="parseURI(Ljava/lang/String;)Lorg/w3c/dom/Document;"/>
+		<method name="parseWithContext(Lorg/w3c/dom/ls/LSInput;Lorg/w3c/dom/Node;S)Lorg/w3c/dom/Node;"/>
+		<method name="setFilter(Lorg/w3c/dom/ls/LSParserFilter;)V"/>
+		<field name="ACTION_APPEND_AS_CHILDREN"/>
+		<field name="ACTION_INSERT_AFTER"/>
+		<field name="ACTION_INSERT_BEFORE"/>
+		<field name="ACTION_REPLACE"/>
+		<field name="ACTION_REPLACE_CHILDREN"/>
+	</class>
+	<class name="org/w3c/dom/ls/LSParserFilter" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="acceptNode(Lorg/w3c/dom/Node;)S"/>
+		<method name="getWhatToShow()I"/>
+		<method name="startElement(Lorg/w3c/dom/Element;)S"/>
+		<field name="FILTER_ACCEPT"/>
+		<field name="FILTER_INTERRUPT"/>
+		<field name="FILTER_REJECT"/>
+		<field name="FILTER_SKIP"/>
+	</class>
+	<class name="org/w3c/dom/ls/LSResourceResolver" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="resolveResource(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/ls/LSInput;"/>
+	</class>
+	<class name="org/w3c/dom/ls/LSSerializer" since="8">
+		<extends name="java/lang/Object"/>
+		<method name="getDomConfig()Lorg/w3c/dom/DOMConfiguration;"/>
+		<method name="getNewLine()Ljava/lang/String;"/>
+		<method name="setNewLine(Ljava/lang/String;)V"/>
+		<method name="write(Lorg/w3c/dom/Node;Lorg/w3c/dom/ls/LSOutput;)Z"/>
+		<method name="writeToString(Lorg/w3c/dom/Node;)Ljava/lang/String;"/>
+		<method name="writeToURI(Lorg/w3c/dom/Node;Ljava/lang/String;)Z"/>
+	</class>
+	<class name="org/xml/sax/AttributeList" since="1" deprecated="9">
+		<extends name="java/lang/Object"/>
+		<method name="getLength()I" deprecated="29"/>
+		<method name="getName(I)Ljava/lang/String;" deprecated="29"/>
+		<method name="getType(I)Ljava/lang/String;" deprecated="29"/>
+		<method name="getType(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+		<method name="getValue(I)Ljava/lang/String;" deprecated="29"/>
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;" deprecated="29"/>
+	</class>
+	<class name="org/xml/sax/Attributes" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getIndex(Ljava/lang/String;)I"/>
+		<method name="getIndex(Ljava/lang/String;Ljava/lang/String;)I"/>
+		<method name="getLength()I"/>
+		<method name="getLocalName(I)Ljava/lang/String;"/>
+		<method name="getQName(I)Ljava/lang/String;"/>
+		<method name="getType(I)Ljava/lang/String;"/>
+		<method name="getType(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getType(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getURI(I)Ljava/lang/String;"/>
+		<method name="getValue(I)Ljava/lang/String;"/>
+		<method name="getValue(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+	</class>
+	<class name="org/xml/sax/ContentHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="characters([CII)V"/>
+		<method name="endDocument()V"/>
+		<method name="endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="endPrefixMapping(Ljava/lang/String;)V"/>
+		<method name="ignorableWhitespace([CII)V"/>
+		<method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setDocumentLocator(Lorg/xml/sax/Locator;)V"/>
+		<method name="skippedEntity(Ljava/lang/String;)V"/>
+		<method name="startDocument()V"/>
+		<method name="startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V"/>
+		<method name="startPrefixMapping(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/DTDHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="notationDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="unparsedEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/DocumentHandler" since="1" deprecated="9">
+		<extends name="java/lang/Object"/>
+		<method name="characters([CII)V" deprecated="29"/>
+		<method name="endDocument()V" deprecated="29"/>
+		<method name="endElement(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="ignorableWhitespace([CII)V" deprecated="29"/>
+		<method name="processingInstruction(Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setDocumentLocator(Lorg/xml/sax/Locator;)V" deprecated="29"/>
+		<method name="startDocument()V" deprecated="29"/>
+		<method name="startElement(Ljava/lang/String;Lorg/xml/sax/AttributeList;)V" deprecated="29"/>
+	</class>
+	<class name="org/xml/sax/EntityResolver" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="resolveEntity(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;"/>
+	</class>
+	<class name="org/xml/sax/ErrorHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="error(Lorg/xml/sax/SAXParseException;)V"/>
+		<method name="fatalError(Lorg/xml/sax/SAXParseException;)V"/>
+		<method name="warning(Lorg/xml/sax/SAXParseException;)V"/>
+	</class>
+	<class name="org/xml/sax/HandlerBase" since="1" deprecated="9">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/DTDHandler"/>
+		<implements name="org/xml/sax/DocumentHandler"/>
+		<implements name="org/xml/sax/EntityResolver"/>
+		<implements name="org/xml/sax/ErrorHandler"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+	</class>
+	<class name="org/xml/sax/InputSource" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/io/InputStream;)V"/>
+		<method name="&lt;init>(Ljava/io/Reader;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="getByteStream()Ljava/io/InputStream;"/>
+		<method name="getCharacterStream()Ljava/io/Reader;"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+		<method name="setByteStream(Ljava/io/InputStream;)V"/>
+		<method name="setCharacterStream(Ljava/io/Reader;)V"/>
+		<method name="setEncoding(Ljava/lang/String;)V"/>
+		<method name="setPublicId(Ljava/lang/String;)V"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/Locator" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getColumnNumber()I"/>
+		<method name="getLineNumber()I"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+	</class>
+	<class name="org/xml/sax/Parser" since="1" deprecated="9">
+		<extends name="java/lang/Object"/>
+		<method name="parse(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="parse(Lorg/xml/sax/InputSource;)V" deprecated="29"/>
+		<method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V" deprecated="29"/>
+		<method name="setDocumentHandler(Lorg/xml/sax/DocumentHandler;)V" deprecated="29"/>
+		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V" deprecated="29"/>
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V" deprecated="29"/>
+		<method name="setLocale(Ljava/util/Locale;)V" deprecated="29"/>
+	</class>
+	<class name="org/xml/sax/SAXException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Exception;)V"/>
+		<method name="getException()Ljava/lang/Exception;"/>
+	</class>
+	<class name="org/xml/sax/SAXNotRecognizedException" since="1">
+		<extends name="org/xml/sax/SAXException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/SAXNotSupportedException" since="1">
+		<extends name="org/xml/sax/SAXException"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/SAXParseException" since="1">
+		<extends name="org/xml/sax/SAXException"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/Exception;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Lorg/xml/sax/Locator;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Lorg/xml/sax/Locator;Ljava/lang/Exception;)V"/>
+		<method name="getColumnNumber()I"/>
+		<method name="getLineNumber()I"/>
+		<method name="getPublicId()Ljava/lang/String;"/>
+		<method name="getSystemId()Ljava/lang/String;"/>
+	</class>
+	<class name="org/xml/sax/XMLFilter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/XMLReader"/>
+		<method name="getParent()Lorg/xml/sax/XMLReader;"/>
+		<method name="setParent(Lorg/xml/sax/XMLReader;)V"/>
+	</class>
+	<class name="org/xml/sax/XMLReader" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="getContentHandler()Lorg/xml/sax/ContentHandler;"/>
+		<method name="getDTDHandler()Lorg/xml/sax/DTDHandler;"/>
+		<method name="getEntityResolver()Lorg/xml/sax/EntityResolver;"/>
+		<method name="getErrorHandler()Lorg/xml/sax/ErrorHandler;"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="parse(Ljava/lang/String;)V"/>
+		<method name="parse(Lorg/xml/sax/InputSource;)V"/>
+		<method name="setContentHandler(Lorg/xml/sax/ContentHandler;)V"/>
+		<method name="setDTDHandler(Lorg/xml/sax/DTDHandler;)V"/>
+		<method name="setEntityResolver(Lorg/xml/sax/EntityResolver;)V"/>
+		<method name="setErrorHandler(Lorg/xml/sax/ErrorHandler;)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
+	</class>
+	<class name="org/xml/sax/ext/Attributes2" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/Attributes"/>
+		<method name="isDeclared(I)Z"/>
+		<method name="isDeclared(Ljava/lang/String;)Z"/>
+		<method name="isDeclared(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="isSpecified(I)Z"/>
+		<method name="isSpecified(Ljava/lang/String;)Z"/>
+		<method name="isSpecified(Ljava/lang/String;Ljava/lang/String;)Z"/>
+	</class>
+	<class name="org/xml/sax/ext/Attributes2Impl" since="1">
+		<extends name="org/xml/sax/helpers/AttributesImpl"/>
+		<implements name="org/xml/sax/ext/Attributes2"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/Attributes;)V"/>
+		<method name="setDeclared(IZ)V"/>
+		<method name="setSpecified(IZ)V"/>
+	</class>
+	<class name="org/xml/sax/ext/DeclHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="attributeDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="elementDecl(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="externalEntityDecl(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="internalEntityDecl(Ljava/lang/String;Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/ext/DefaultHandler2" since="1">
+		<extends name="org/xml/sax/helpers/DefaultHandler"/>
+		<implements name="org/xml/sax/ext/DeclHandler"/>
+		<implements name="org/xml/sax/ext/EntityResolver2"/>
+		<implements name="org/xml/sax/ext/LexicalHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/xml/sax/ext/EntityResolver2" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/EntityResolver"/>
+		<method name="getExternalSubset(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;"/>
+		<method name="resolveEntity(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;"/>
+	</class>
+	<class name="org/xml/sax/ext/LexicalHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="comment([CII)V"/>
+		<method name="endCDATA()V"/>
+		<method name="endDTD()V"/>
+		<method name="endEntity(Ljava/lang/String;)V"/>
+		<method name="startCDATA()V"/>
+		<method name="startDTD(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="startEntity(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/ext/Locator2" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/Locator"/>
+		<method name="getEncoding()Ljava/lang/String;"/>
+		<method name="getXMLVersion()Ljava/lang/String;"/>
+	</class>
+	<class name="org/xml/sax/ext/Locator2Impl" since="1">
+		<extends name="org/xml/sax/helpers/LocatorImpl"/>
+		<implements name="org/xml/sax/ext/Locator2"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/Locator;)V"/>
+		<method name="setEncoding(Ljava/lang/String;)V"/>
+		<method name="setXMLVersion(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/helpers/AttributeListImpl" since="1" deprecated="9">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/AttributeList"/>
+		<method name="&lt;init>()V" deprecated="29"/>
+		<method name="&lt;init>(Lorg/xml/sax/AttributeList;)V" deprecated="29"/>
+		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="29"/>
+		<method name="clear()V" deprecated="29"/>
+		<method name="removeAttribute(Ljava/lang/String;)V" deprecated="29"/>
+		<method name="setAttributeList(Lorg/xml/sax/AttributeList;)V" deprecated="29"/>
+	</class>
+	<class name="org/xml/sax/helpers/AttributesImpl" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/Attributes"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/Attributes;)V"/>
+		<method name="addAttribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="clear()V"/>
+		<method name="removeAttribute(I)V"/>
+		<method name="setAttribute(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setAttributes(Lorg/xml/sax/Attributes;)V"/>
+		<method name="setLocalName(ILjava/lang/String;)V"/>
+		<method name="setQName(ILjava/lang/String;)V"/>
+		<method name="setType(ILjava/lang/String;)V"/>
+		<method name="setURI(ILjava/lang/String;)V"/>
+		<method name="setValue(ILjava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/helpers/DefaultHandler" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/ContentHandler"/>
+		<implements name="org/xml/sax/DTDHandler"/>
+		<implements name="org/xml/sax/EntityResolver"/>
+		<implements name="org/xml/sax/ErrorHandler"/>
+		<method name="&lt;init>()V"/>
+	</class>
+	<class name="org/xml/sax/helpers/LocatorImpl" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/Locator"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/Locator;)V"/>
+		<method name="setColumnNumber(I)V"/>
+		<method name="setLineNumber(I)V"/>
+		<method name="setPublicId(Ljava/lang/String;)V"/>
+		<method name="setSystemId(Ljava/lang/String;)V"/>
+	</class>
+	<class name="org/xml/sax/helpers/NamespaceSupport" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="declarePrefix(Ljava/lang/String;Ljava/lang/String;)Z"/>
+		<method name="getDeclaredPrefixes()Ljava/util/Enumeration;"/>
+		<method name="getPrefix(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getPrefixes()Ljava/util/Enumeration;"/>
+		<method name="getPrefixes(Ljava/lang/String;)Ljava/util/Enumeration;"/>
+		<method name="getURI(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="isNamespaceDeclUris()Z"/>
+		<method name="popContext()V"/>
+		<method name="processName(Ljava/lang/String;[Ljava/lang/String;Z)[Ljava/lang/String;"/>
+		<method name="pushContext()V"/>
+		<method name="reset()V"/>
+		<method name="setNamespaceDeclUris(Z)V"/>
+		<field name="NSDECL"/>
+		<field name="XMLNS"/>
+	</class>
+	<class name="org/xml/sax/helpers/ParserAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/DocumentHandler"/>
+		<implements name="org/xml/sax/XMLReader"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/Parser;)V"/>
+	</class>
+	<class name="org/xml/sax/helpers/ParserFactory" since="1" deprecated="9">
+		<extends name="java/lang/Object"/>
+		<method name="makeParser()Lorg/xml/sax/Parser;" deprecated="29"/>
+		<method name="makeParser(Ljava/lang/String;)Lorg/xml/sax/Parser;" deprecated="29"/>
+	</class>
+	<class name="org/xml/sax/helpers/XMLFilterImpl" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/ContentHandler"/>
+		<implements name="org/xml/sax/DTDHandler"/>
+		<implements name="org/xml/sax/EntityResolver"/>
+		<implements name="org/xml/sax/ErrorHandler"/>
+		<implements name="org/xml/sax/XMLFilter"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/XMLReader;)V"/>
+	</class>
+	<class name="org/xml/sax/helpers/XMLReaderAdapter" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/ContentHandler"/>
+		<implements name="org/xml/sax/Parser"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xml/sax/XMLReader;)V"/>
+	</class>
+	<class name="org/xml/sax/helpers/XMLReaderFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="createXMLReader()Lorg/xml/sax/XMLReader;"/>
+		<method name="createXMLReader(Ljava/lang/String;)Lorg/xml/sax/XMLReader;"/>
+	</class>
+	<class name="org/xmlpull/v1/XmlPullParser" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="defineEntityReplacementText(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="getAttributeCount()I"/>
+		<method name="getAttributeName(I)Ljava/lang/String;"/>
+		<method name="getAttributeNamespace(I)Ljava/lang/String;"/>
+		<method name="getAttributePrefix(I)Ljava/lang/String;"/>
+		<method name="getAttributeType(I)Ljava/lang/String;"/>
+		<method name="getAttributeValue(I)Ljava/lang/String;"/>
+		<method name="getAttributeValue(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getColumnNumber()I"/>
+		<method name="getDepth()I"/>
+		<method name="getEventType()I"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getInputEncoding()Ljava/lang/String;"/>
+		<method name="getLineNumber()I"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+		<method name="getNamespace(Ljava/lang/String;)Ljava/lang/String;"/>
+		<method name="getNamespaceCount(I)I"/>
+		<method name="getNamespacePrefix(I)Ljava/lang/String;"/>
+		<method name="getNamespaceUri(I)Ljava/lang/String;"/>
+		<method name="getPositionDescription()Ljava/lang/String;"/>
+		<method name="getPrefix()Ljava/lang/String;"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="getText()Ljava/lang/String;"/>
+		<method name="getTextCharacters([I)[C"/>
+		<method name="isAttributeDefault(I)Z"/>
+		<method name="isEmptyElementTag()Z"/>
+		<method name="isWhitespace()Z"/>
+		<method name="next()I"/>
+		<method name="nextTag()I"/>
+		<method name="nextText()Ljava/lang/String;"/>
+		<method name="nextToken()I"/>
+		<method name="require(ILjava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setInput(Ljava/io/InputStream;Ljava/lang/String;)V"/>
+		<method name="setInput(Ljava/io/Reader;)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<field name="CDSECT"/>
+		<field name="COMMENT"/>
+		<field name="DOCDECL"/>
+		<field name="END_DOCUMENT"/>
+		<field name="END_TAG"/>
+		<field name="ENTITY_REF"/>
+		<field name="FEATURE_PROCESS_DOCDECL"/>
+		<field name="FEATURE_PROCESS_NAMESPACES"/>
+		<field name="FEATURE_REPORT_NAMESPACE_ATTRIBUTES"/>
+		<field name="FEATURE_VALIDATION"/>
+		<field name="IGNORABLE_WHITESPACE"/>
+		<field name="NO_NAMESPACE"/>
+		<field name="PROCESSING_INSTRUCTION"/>
+		<field name="START_DOCUMENT"/>
+		<field name="START_TAG"/>
+		<field name="TEXT"/>
+		<field name="TYPES"/>
+	</class>
+	<class name="org/xmlpull/v1/XmlPullParserException" since="1">
+		<extends name="java/lang/Exception"/>
+		<method name="&lt;init>(Ljava/lang/String;)V"/>
+		<method name="&lt;init>(Ljava/lang/String;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/Throwable;)V"/>
+		<method name="getColumnNumber()I"/>
+		<method name="getDetail()Ljava/lang/Throwable;"/>
+		<method name="getLineNumber()I"/>
+		<field name="column"/>
+		<field name="detail"/>
+		<field name="row"/>
+	</class>
+	<class name="org/xmlpull/v1/XmlPullParserFactory" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="&lt;init>()V"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="isNamespaceAware()Z"/>
+		<method name="isValidating()Z"/>
+		<method name="newInstance()Lorg/xmlpull/v1/XmlPullParserFactory;"/>
+		<method name="newInstance(Ljava/lang/String;Ljava/lang/Class;)Lorg/xmlpull/v1/XmlPullParserFactory;"/>
+		<method name="newPullParser()Lorg/xmlpull/v1/XmlPullParser;"/>
+		<method name="newSerializer()Lorg/xmlpull/v1/XmlSerializer;"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setNamespaceAware(Z)V"/>
+		<method name="setValidating(Z)V"/>
+		<field name="PROPERTY_NAME"/>
+		<field name="classNamesLocation"/>
+		<field name="features"/>
+		<field name="parserClasses"/>
+		<field name="serializerClasses"/>
+	</class>
+	<class name="org/xmlpull/v1/XmlSerializer" since="1">
+		<extends name="java/lang/Object"/>
+		<method name="attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
+		<method name="cdsect(Ljava/lang/String;)V"/>
+		<method name="comment(Ljava/lang/String;)V"/>
+		<method name="docdecl(Ljava/lang/String;)V"/>
+		<method name="endDocument()V"/>
+		<method name="endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
+		<method name="entityRef(Ljava/lang/String;)V"/>
+		<method name="flush()V"/>
+		<method name="getDepth()I"/>
+		<method name="getFeature(Ljava/lang/String;)Z"/>
+		<method name="getName()Ljava/lang/String;"/>
+		<method name="getNamespace()Ljava/lang/String;"/>
+		<method name="getPrefix(Ljava/lang/String;Z)Ljava/lang/String;"/>
+		<method name="getProperty(Ljava/lang/String;)Ljava/lang/Object;"/>
+		<method name="ignorableWhitespace(Ljava/lang/String;)V"/>
+		<method name="processingInstruction(Ljava/lang/String;)V"/>
+		<method name="setFeature(Ljava/lang/String;Z)V"/>
+		<method name="setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V"/>
+		<method name="setOutput(Ljava/io/Writer;)V"/>
+		<method name="setPrefix(Ljava/lang/String;Ljava/lang/String;)V"/>
+		<method name="setProperty(Ljava/lang/String;Ljava/lang/Object;)V"/>
+		<method name="startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V"/>
+		<method name="startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
+		<method name="text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer;"/>
+		<method name="text([CII)Lorg/xmlpull/v1/XmlSerializer;"/>
+	</class>
+	<class name="org/xmlpull/v1/sax2/Driver" since="1">
+		<extends name="java/lang/Object"/>
+		<implements name="org/xml/sax/Attributes"/>
+		<implements name="org/xml/sax/Locator"/>
+		<implements name="org/xml/sax/XMLReader"/>
+		<method name="&lt;init>()V"/>
+		<method name="&lt;init>(Lorg/xmlpull/v1/XmlPullParser;)V"/>
+		<method name="parseSubTree(Lorg/xmlpull/v1/XmlPullParser;)V"/>
+		<method name="startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"/>
+		<field name="APACHE_DYNAMIC_VALIDATION_FEATURE"/>
+		<field name="APACHE_SCHEMA_VALIDATION_FEATURE"/>
+		<field name="DECLARATION_HANDLER_PROPERTY"/>
+		<field name="LEXICAL_HANDLER_PROPERTY"/>
+		<field name="NAMESPACES_FEATURE"/>
+		<field name="NAMESPACE_PREFIXES_FEATURE"/>
+		<field name="VALIDATION_FEATURE"/>
+		<field name="contentHandler"/>
+		<field name="errorHandler"/>
+		<field name="pp"/>
+		<field name="systemId"/>
+	</class>
+</api>
diff --git a/32/public/framework-appsearch.jar b/32/public/framework-appsearch.jar
new file mode 100644
index 0000000..2f6adf5
--- /dev/null
+++ b/32/public/framework-appsearch.jar
Binary files differ
diff --git a/32/public/framework-graphics.jar b/32/public/framework-graphics.jar
new file mode 100644
index 0000000..3277fcb
--- /dev/null
+++ b/32/public/framework-graphics.jar
Binary files differ
diff --git a/32/public/framework-media.jar b/32/public/framework-media.jar
new file mode 100644
index 0000000..3486000
--- /dev/null
+++ b/32/public/framework-media.jar
Binary files differ
diff --git a/32/public/framework-permission-s.jar b/32/public/framework-permission-s.jar
new file mode 100644
index 0000000..b995bd3
--- /dev/null
+++ b/32/public/framework-permission-s.jar
Binary files differ
diff --git a/32/public/framework-statsd.jar b/32/public/framework-statsd.jar
new file mode 100644
index 0000000..4041be6
--- /dev/null
+++ b/32/public/framework-statsd.jar
Binary files differ
diff --git a/32/public/framework-tethering.jar b/32/public/framework-tethering.jar
new file mode 100644
index 0000000..b62b671
--- /dev/null
+++ b/32/public/framework-tethering.jar
Binary files differ
diff --git a/32/public/framework.aidl b/32/public/framework.aidl
new file mode 100644
index 0000000..3f22df1
--- /dev/null
+++ b/32/public/framework.aidl
@@ -0,0 +1,870 @@
+parcelable android.accessibilityservice.AccessibilityGestureEvent;
+parcelable android.accessibilityservice.AccessibilityServiceInfo;
+parcelable android.accounts.Account;
+parcelable android.accounts.AccountAuthenticatorResponse;
+parcelable android.accounts.AuthenticatorDescription;
+parcelable android.app.ActivityManager.MemoryInfo;
+parcelable android.app.ActivityManager.ProcessErrorStateInfo;
+parcelable android.app.ActivityManager.RecentTaskInfo;
+parcelable android.app.ActivityManager.RunningAppProcessInfo;
+parcelable android.app.ActivityManager.RunningServiceInfo;
+parcelable android.app.ActivityManager.RunningTaskInfo;
+parcelable android.app.ActivityManager.TaskDescription;
+parcelable android.app.AlarmManager.AlarmClockInfo;
+parcelable android.app.AppOpsManager.AttributedHistoricalOps;
+parcelable android.app.AppOpsManager.AttributedOpEntry;
+parcelable android.app.AppOpsManager.HistoricalOp;
+parcelable android.app.AppOpsManager.HistoricalOps;
+parcelable android.app.AppOpsManager.HistoricalPackageOps;
+parcelable android.app.AppOpsManager.HistoricalUidOps;
+parcelable android.app.AppOpsManager.OpEntry;
+parcelable android.app.AppOpsManager.OpEventProxyInfo;
+parcelable android.app.AppOpsManager.PackageOps;
+parcelable android.app.ApplicationErrorReport;
+parcelable android.app.ApplicationExitInfo;
+parcelable android.app.AsyncNotedAppOp;
+parcelable android.app.AuthenticationRequiredException;
+parcelable android.app.AutomaticZenRule;
+parcelable android.app.BackgroundServiceStartNotAllowedException;
+parcelable android.app.DirectAction;
+parcelable android.app.ForegroundServiceStartNotAllowedException;
+parcelable android.app.Fragment.SavedState;
+parcelable android.app.Notification.Action;
+parcelable android.app.Notification.BubbleMetadata;
+parcelable android.app.Notification;
+parcelable android.app.NotificationChannel;
+parcelable android.app.NotificationChannelGroup;
+parcelable android.app.NotificationManager.Policy;
+parcelable android.app.PendingIntent;
+parcelable android.app.Person;
+parcelable android.app.PictureInPictureParams;
+parcelable android.app.PictureInPictureUiState;
+parcelable android.app.RecoverableSecurityException;
+parcelable android.app.RemoteAction;
+parcelable android.app.RemoteInput;
+parcelable android.app.RuntimeAppOpAccessMessage;
+parcelable android.app.SearchableInfo;
+parcelable android.app.SyncNotedAppOp;
+parcelable android.app.VoiceInteractor.PickOptionRequest.Option;
+parcelable android.app.VoiceInteractor.Prompt;
+parcelable android.app.Vr2dDisplayProperties;
+parcelable android.app.WallpaperColors;
+parcelable android.app.WallpaperInfo;
+parcelable android.app.WindowConfiguration;
+parcelable android.app.admin.ConnectEvent;
+parcelable android.app.admin.DeviceAdminInfo;
+parcelable android.app.admin.DnsEvent;
+parcelable android.app.admin.FactoryResetProtectionPolicy;
+parcelable android.app.admin.FullyManagedDeviceProvisioningParams;
+parcelable android.app.admin.ManagedProfileProvisioningParams;
+parcelable android.app.admin.NetworkEvent;
+parcelable android.app.admin.SecurityLog.SecurityEvent;
+parcelable android.app.admin.SystemUpdateInfo;
+parcelable android.app.admin.SystemUpdatePolicy.ValidationFailedException;
+parcelable android.app.admin.SystemUpdatePolicy;
+parcelable android.app.admin.UnsafeStateException;
+parcelable android.app.assist.AssistContent;
+parcelable android.app.assist.AssistStructure;
+parcelable android.app.backup.BackupProgress;
+parcelable android.app.backup.RestoreDescription;
+parcelable android.app.backup.RestoreSet;
+parcelable android.app.blob.BlobHandle;
+parcelable android.app.blob.LeaseInfo;
+parcelable android.app.contentsuggestions.ClassificationsRequest;
+parcelable android.app.contentsuggestions.ContentClassification;
+parcelable android.app.contentsuggestions.ContentSelection;
+parcelable android.app.contentsuggestions.SelectionsRequest;
+parcelable android.app.job.JobInfo.TriggerContentUri;
+parcelable android.app.job.JobInfo;
+parcelable android.app.job.JobParameters;
+parcelable android.app.job.JobWorkItem;
+parcelable android.app.people.ConversationStatus;
+parcelable android.app.prediction.AppPredictionContext;
+parcelable android.app.prediction.AppPredictionSessionId;
+parcelable android.app.prediction.AppTarget;
+parcelable android.app.prediction.AppTargetEvent;
+parcelable android.app.prediction.AppTargetId;
+parcelable android.app.search.Query;
+parcelable android.app.search.SearchAction;
+parcelable android.app.search.SearchContext;
+parcelable android.app.search.SearchSessionId;
+parcelable android.app.search.SearchTarget;
+parcelable android.app.search.SearchTargetEvent;
+parcelable android.app.slice.Slice;
+parcelable android.app.slice.SliceItem;
+parcelable android.app.slice.SliceSpec;
+parcelable android.app.smartspace.SmartspaceAction;
+parcelable android.app.smartspace.SmartspaceConfig;
+parcelable android.app.smartspace.SmartspaceSessionId;
+parcelable android.app.smartspace.SmartspaceTarget;
+parcelable android.app.smartspace.SmartspaceTargetEvent;
+parcelable android.app.time.ExternalTimeSuggestion;
+parcelable android.app.time.TimeZoneCapabilities;
+parcelable android.app.time.TimeZoneCapabilitiesAndConfig;
+parcelable android.app.time.TimeZoneConfiguration;
+parcelable android.app.usage.CacheQuotaHint;
+parcelable android.app.usage.ConfigurationStats;
+parcelable android.app.usage.EventStats;
+parcelable android.app.usage.ExternalStorageStats;
+parcelable android.app.usage.StorageStats;
+parcelable android.app.usage.UsageEvents;
+parcelable android.app.usage.UsageStats;
+parcelable android.appwidget.AppWidgetProviderInfo;
+parcelable android.bluetooth.BluetoothClass;
+parcelable android.bluetooth.BluetoothDevice;
+parcelable android.bluetooth.BluetoothGattCharacteristic;
+parcelable android.bluetooth.BluetoothGattDescriptor;
+parcelable android.bluetooth.BluetoothGattService;
+parcelable android.bluetooth.BluetoothHealthAppConfiguration;
+parcelable android.bluetooth.BluetoothHidDeviceAppQosSettings;
+parcelable android.bluetooth.BluetoothHidDeviceAppSdpSettings;
+parcelable android.bluetooth.BufferConstraint;
+parcelable android.bluetooth.BufferConstraints;
+parcelable android.bluetooth.OobData;
+parcelable android.bluetooth.le.AdvertiseData;
+parcelable android.bluetooth.le.AdvertiseSettings;
+parcelable android.bluetooth.le.AdvertisingSetParameters;
+parcelable android.bluetooth.le.PeriodicAdvertisingParameters;
+parcelable android.bluetooth.le.ResultStorageDescriptor;
+parcelable android.bluetooth.le.ScanFilter;
+parcelable android.bluetooth.le.ScanResult;
+parcelable android.bluetooth.le.ScanSettings;
+parcelable android.companion.AssociationRequest;
+parcelable android.companion.BluetoothDeviceFilter;
+parcelable android.companion.BluetoothLeDeviceFilter;
+parcelable android.companion.DeviceFilter;
+parcelable android.companion.WifiDeviceFilter;
+parcelable android.content.AttributionSource;
+parcelable android.content.AutofillOptions;
+parcelable android.content.ClipData;
+parcelable android.content.ClipDescription;
+parcelable android.content.ComponentName;
+parcelable android.content.ContentCaptureOptions;
+parcelable android.content.ContentProviderOperation;
+parcelable android.content.ContentProviderResult;
+parcelable android.content.ContentValues;
+parcelable android.content.Intent.ShortcutIconResource;
+parcelable android.content.Intent;
+parcelable android.content.IntentFilter;
+parcelable android.content.IntentSender;
+parcelable android.content.LocusId;
+parcelable android.content.PeriodicSync;
+parcelable android.content.RestrictionEntry;
+parcelable android.content.SyncAdapterType;
+parcelable android.content.SyncInfo;
+parcelable android.content.SyncRequest;
+parcelable android.content.SyncResult;
+parcelable android.content.SyncStats;
+parcelable android.content.UriPermission;
+parcelable android.content.integrity.Rule;
+parcelable android.content.om.OverlayInfo;
+parcelable android.content.pm.ActivityInfo;
+parcelable android.content.pm.ApkChecksum;
+parcelable android.content.pm.ApplicationInfo;
+parcelable android.content.pm.Attribution;
+parcelable android.content.pm.ChangedPackages;
+parcelable android.content.pm.Checksum;
+parcelable android.content.pm.ConfigurationInfo;
+parcelable android.content.pm.FeatureGroupInfo;
+parcelable android.content.pm.FeatureInfo;
+parcelable android.content.pm.InstallSourceInfo;
+parcelable android.content.pm.InstantAppInfo;
+parcelable android.content.pm.InstantAppIntentFilter;
+parcelable android.content.pm.InstantAppRequestInfo;
+parcelable android.content.pm.InstantAppResolveInfo.InstantAppDigest;
+parcelable android.content.pm.InstantAppResolveInfo;
+parcelable android.content.pm.InstrumentationInfo;
+parcelable android.content.pm.IntentFilterVerificationInfo;
+parcelable android.content.pm.LabeledIntent;
+parcelable android.content.pm.LauncherApps.AppUsageLimit;
+parcelable android.content.pm.LauncherApps.PinItemRequest;
+parcelable android.content.pm.ModuleInfo;
+parcelable android.content.pm.PackageInfo;
+parcelable android.content.pm.PackageInstaller.SessionInfo;
+parcelable android.content.pm.PackageInstaller.SessionParams;
+parcelable android.content.pm.PackageManager.Property;
+parcelable android.content.pm.PackageStats;
+parcelable android.content.pm.PathPermission;
+parcelable android.content.pm.PermissionGroupInfo;
+parcelable android.content.pm.PermissionInfo;
+parcelable android.content.pm.ProviderInfo;
+parcelable android.content.pm.ProviderInfoList;
+parcelable android.content.pm.ResolveInfo;
+parcelable android.content.pm.ServiceInfo;
+parcelable android.content.pm.SharedLibraryInfo;
+parcelable android.content.pm.ShortcutInfo;
+parcelable android.content.pm.ShortcutManager.ShareShortcutInfo;
+parcelable android.content.pm.Signature;
+parcelable android.content.pm.SigningInfo;
+parcelable android.content.pm.SuspendDialogInfo;
+parcelable android.content.pm.UserInfo;
+parcelable android.content.pm.VersionedPackage;
+parcelable android.content.pm.permission.RuntimePermissionPresentationInfo;
+parcelable android.content.pm.verify.domain.DomainOwner;
+parcelable android.content.pm.verify.domain.DomainVerificationInfo;
+parcelable android.content.pm.verify.domain.DomainVerificationRequest;
+parcelable android.content.pm.verify.domain.DomainVerificationUserState;
+parcelable android.content.res.AssetFileDescriptor;
+parcelable android.content.res.ColorStateList;
+parcelable android.content.res.Configuration;
+parcelable android.content.res.ObbInfo;
+parcelable android.content.rollback.PackageRollbackInfo;
+parcelable android.content.rollback.RollbackInfo;
+parcelable android.database.CursorWindow;
+parcelable android.gesture.Gesture;
+parcelable android.graphics.Bitmap;
+parcelable android.graphics.Insets;
+parcelable android.graphics.ParcelableColorSpace;
+parcelable android.graphics.Point;
+parcelable android.graphics.PointF;
+parcelable android.graphics.Rect;
+parcelable android.graphics.RectF;
+parcelable android.graphics.Region;
+parcelable android.graphics.drawable.Icon;
+parcelable android.hardware.HardwareBuffer;
+parcelable android.hardware.camera2.CaptureRequest;
+parcelable android.hardware.camera2.params.OutputConfiguration;
+parcelable android.hardware.camera2.params.SessionConfiguration;
+parcelable android.hardware.display.AmbientBrightnessDayStats;
+parcelable android.hardware.display.BrightnessChangeEvent;
+parcelable android.hardware.display.BrightnessConfiguration;
+parcelable android.hardware.display.BrightnessCorrection;
+parcelable android.hardware.display.DeviceProductInfo;
+parcelable android.hardware.hdmi.HdmiDeviceInfo;
+parcelable android.hardware.hdmi.HdmiHotplugEvent;
+parcelable android.hardware.hdmi.HdmiPortInfo;
+parcelable android.hardware.lights.Light;
+parcelable android.hardware.lights.LightState;
+parcelable android.hardware.location.ContextHubInfo;
+parcelable android.hardware.location.ContextHubMessage;
+parcelable android.hardware.location.GeofenceHardwareMonitorEvent;
+parcelable android.hardware.location.MemoryRegion;
+parcelable android.hardware.location.NanoApp;
+parcelable android.hardware.location.NanoAppBinary;
+parcelable android.hardware.location.NanoAppFilter;
+parcelable android.hardware.location.NanoAppInstanceInfo;
+parcelable android.hardware.location.NanoAppMessage;
+parcelable android.hardware.location.NanoAppState;
+parcelable android.hardware.radio.Announcement;
+parcelable android.hardware.radio.ProgramList.Filter;
+parcelable android.hardware.radio.ProgramSelector.Identifier;
+parcelable android.hardware.radio.ProgramSelector;
+parcelable android.hardware.radio.RadioManager.AmBandConfig;
+parcelable android.hardware.radio.RadioManager.AmBandDescriptor;
+parcelable android.hardware.radio.RadioManager.BandConfig;
+parcelable android.hardware.radio.RadioManager.BandDescriptor;
+parcelable android.hardware.radio.RadioManager.FmBandConfig;
+parcelable android.hardware.radio.RadioManager.FmBandDescriptor;
+parcelable android.hardware.radio.RadioManager.ModuleProperties;
+parcelable android.hardware.radio.RadioManager.ProgramInfo;
+parcelable android.hardware.radio.RadioMetadata.Clock;
+parcelable android.hardware.radio.RadioMetadata;
+parcelable android.hardware.soundtrigger.KeyphraseMetadata;
+parcelable android.hardware.soundtrigger.SoundTrigger.Keyphrase;
+parcelable android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel;
+parcelable android.hardware.soundtrigger.SoundTrigger.ModelParamRange;
+parcelable android.hardware.soundtrigger.SoundTrigger.ModuleProperties;
+parcelable android.hardware.usb.UsbAccessory;
+parcelable android.hardware.usb.UsbConfiguration;
+parcelable android.hardware.usb.UsbDevice;
+parcelable android.hardware.usb.UsbEndpoint;
+parcelable android.hardware.usb.UsbInterface;
+parcelable android.hardware.usb.UsbPortStatus;
+parcelable android.location.Address;
+parcelable android.location.CorrelationVector;
+parcelable android.location.Criteria;
+parcelable android.location.GnssAntennaInfo.PhaseCenterOffset;
+parcelable android.location.GnssAntennaInfo.SphericalCorrections;
+parcelable android.location.GnssAntennaInfo;
+parcelable android.location.GnssCapabilities;
+parcelable android.location.GnssClock;
+parcelable android.location.GnssMeasurement;
+parcelable android.location.GnssMeasurementCorrections;
+parcelable android.location.GnssMeasurementRequest;
+parcelable android.location.GnssMeasurementsEvent;
+parcelable android.location.GnssNavigationMessage;
+parcelable android.location.GnssReflectingPlane;
+parcelable android.location.GnssRequest;
+parcelable android.location.GnssSingleSatCorrection;
+parcelable android.location.GnssStatus;
+parcelable android.location.GpsClock;
+parcelable android.location.GpsMeasurement;
+parcelable android.location.GpsMeasurementsEvent;
+parcelable android.location.GpsNavigationMessage;
+parcelable android.location.GpsNavigationMessageEvent;
+parcelable android.location.LastLocationRequest;
+parcelable android.location.Location;
+parcelable android.location.LocationRequest;
+parcelable android.location.SatellitePvt.ClockInfo;
+parcelable android.location.SatellitePvt.PositionEcef;
+parcelable android.location.SatellitePvt.VelocityEcef;
+parcelable android.location.SatellitePvt;
+parcelable android.location.provider.ProviderProperties;
+parcelable android.location.provider.ProviderRequest;
+parcelable android.media.ApplicationMediaCapabilities;
+parcelable android.media.AudioAttributes;
+parcelable android.media.AudioDeviceAttributes;
+parcelable android.media.AudioFocusInfo;
+parcelable android.media.AudioFormat;
+parcelable android.media.AudioPlaybackConfiguration;
+parcelable android.media.AudioRecordingConfiguration;
+parcelable android.media.MediaDescription;
+parcelable android.media.MediaMetadata;
+parcelable android.media.MediaPlayer.TrackInfo;
+parcelable android.media.MediaRoute2Info;
+parcelable android.media.MediaSyncEvent;
+parcelable android.media.PlaybackParams;
+parcelable android.media.Rating;
+parcelable android.media.RouteDiscoveryPreference;
+parcelable android.media.RoutingSessionInfo;
+parcelable android.media.Session2Command;
+parcelable android.media.Session2CommandGroup;
+parcelable android.media.Session2Token;
+parcelable android.media.VolumeShaper.Configuration;
+parcelable android.media.VolumeShaper.Operation;
+parcelable android.media.audiopolicy.AudioProductStrategy;
+parcelable android.media.audiopolicy.AudioVolumeGroup;
+parcelable android.media.browse.MediaBrowser.MediaItem;
+parcelable android.media.metrics.NetworkEvent;
+parcelable android.media.metrics.PlaybackErrorEvent;
+parcelable android.media.metrics.PlaybackMetrics;
+parcelable android.media.metrics.PlaybackStateEvent;
+parcelable android.media.metrics.TrackChangeEvent;
+parcelable android.media.midi.MidiDeviceInfo;
+parcelable android.media.midi.MidiDeviceStatus;
+parcelable android.media.musicrecognition.RecognitionRequest;
+parcelable android.media.session.MediaController.PlaybackInfo;
+parcelable android.media.session.MediaSession.QueueItem;
+parcelable android.media.session.MediaSession.Token;
+parcelable android.media.session.PlaybackState.CustomAction;
+parcelable android.media.session.PlaybackState;
+parcelable android.media.tv.DvbDeviceInfo;
+parcelable android.media.tv.TunedInfo;
+parcelable android.media.tv.TvContentRatingSystemInfo;
+parcelable android.media.tv.TvInputHardwareInfo;
+parcelable android.media.tv.TvInputInfo;
+parcelable android.media.tv.TvStreamConfig;
+parcelable android.media.tv.TvTrackInfo;
+parcelable android.net.CaptivePortal;
+parcelable android.net.CaptivePortalData;
+parcelable android.net.ConnectivityDiagnosticsManager.ConnectivityReport;
+parcelable android.net.ConnectivityDiagnosticsManager.DataStallReport;
+parcelable android.net.DhcpInfo;
+parcelable android.net.IpConfiguration;
+parcelable android.net.IpPrefix;
+parcelable android.net.IpSecAlgorithm;
+parcelable android.net.LinkAddress;
+parcelable android.net.LinkProperties;
+parcelable android.net.MacAddress;
+parcelable android.net.MatchAllNetworkSpecifier;
+parcelable android.net.NattKeepalivePacketData;
+parcelable android.net.Network;
+parcelable android.net.NetworkAgentConfig;
+parcelable android.net.NetworkCapabilities;
+parcelable android.net.NetworkInfo;
+parcelable android.net.NetworkKey;
+parcelable android.net.NetworkRequest;
+parcelable android.net.NetworkScore;
+parcelable android.net.NetworkStats;
+parcelable android.net.OemNetworkPreferences;
+parcelable android.net.ProxyInfo;
+parcelable android.net.QosSession;
+parcelable android.net.QosSocketInfo;
+parcelable android.net.RouteInfo;
+parcelable android.net.RssiCurve;
+parcelable android.net.ScoredNetwork;
+parcelable android.net.StaticIpConfiguration;
+parcelable android.net.TcpKeepalivePacketData;
+parcelable android.net.TelephonyNetworkSpecifier;
+parcelable android.net.TetheredClient.AddressInfo;
+parcelable android.net.TetheredClient;
+parcelable android.net.TetheringInterface;
+parcelable android.net.Uri;
+parcelable android.net.WifiKey;
+parcelable android.net.apf.ApfCapabilities;
+parcelable android.net.metrics.ApfProgramEvent;
+parcelable android.net.metrics.ApfStats;
+parcelable android.net.metrics.DhcpClientEvent;
+parcelable android.net.metrics.DhcpErrorEvent;
+parcelable android.net.metrics.IpConnectivityLog.Event;
+parcelable android.net.metrics.IpManagerEvent;
+parcelable android.net.metrics.IpReachabilityEvent;
+parcelable android.net.metrics.NetworkEvent;
+parcelable android.net.metrics.RaEvent;
+parcelable android.net.metrics.ValidationProbeEvent;
+parcelable android.net.nsd.NsdServiceInfo;
+parcelable android.net.sip.SipProfile;
+parcelable android.net.vcn.VcnConfig;
+parcelable android.net.vcn.VcnNetworkPolicyResult;
+parcelable android.net.wifi.CoexUnsafeChannel;
+parcelable android.net.wifi.RttManager.ParcelableRttParams;
+parcelable android.net.wifi.RttManager.ParcelableRttResults;
+parcelable android.net.wifi.RttManager.ResponderConfig;
+parcelable android.net.wifi.RttManager.RttCapabilities;
+parcelable android.net.wifi.ScanResult.InformationElement;
+parcelable android.net.wifi.ScanResult;
+parcelable android.net.wifi.SoftApCapability;
+parcelable android.net.wifi.SoftApConfiguration;
+parcelable android.net.wifi.SoftApInfo;
+parcelable android.net.wifi.SupplicantState;
+parcelable android.net.wifi.WifiAvailableChannel;
+parcelable android.net.wifi.WifiClient;
+parcelable android.net.wifi.WifiConfiguration;
+parcelable android.net.wifi.WifiConnectedSessionInfo;
+parcelable android.net.wifi.WifiEnterpriseConfig;
+parcelable android.net.wifi.WifiInfo;
+parcelable android.net.wifi.WifiManager.AddNetworkResult;
+parcelable android.net.wifi.WifiMigration.SettingsMigrationData;
+parcelable android.net.wifi.WifiNetworkConnectionStatistics;
+parcelable android.net.wifi.WifiNetworkSpecifier;
+parcelable android.net.wifi.WifiNetworkSuggestion;
+parcelable android.net.wifi.WifiScanner.HotlistSettings;
+parcelable android.net.wifi.WifiScanner.ParcelableScanData;
+parcelable android.net.wifi.WifiScanner.ParcelableScanResults;
+parcelable android.net.wifi.WifiScanner.ScanData;
+parcelable android.net.wifi.WifiScanner.ScanSettings;
+parcelable android.net.wifi.WifiScanner.WifiChangeSettings;
+parcelable android.net.wifi.WifiUsabilityStatsEntry.ContentionTimeStats;
+parcelable android.net.wifi.WifiUsabilityStatsEntry.RadioStats;
+parcelable android.net.wifi.WifiUsabilityStatsEntry.RateStats;
+parcelable android.net.wifi.WifiUsabilityStatsEntry;
+parcelable android.net.wifi.WpsInfo;
+parcelable android.net.wifi.aware.AwareResources;
+parcelable android.net.wifi.aware.Characteristics;
+parcelable android.net.wifi.aware.ParcelablePeerHandle;
+parcelable android.net.wifi.aware.PublishConfig;
+parcelable android.net.wifi.aware.SubscribeConfig;
+parcelable android.net.wifi.aware.WifiAwareNetworkInfo;
+parcelable android.net.wifi.aware.WifiAwareNetworkSpecifier;
+parcelable android.net.wifi.hotspot2.OsuProvider;
+parcelable android.net.wifi.hotspot2.PasspointConfiguration;
+parcelable android.net.wifi.hotspot2.pps.Credential.CertificateCredential;
+parcelable android.net.wifi.hotspot2.pps.Credential.SimCredential;
+parcelable android.net.wifi.hotspot2.pps.Credential.UserCredential;
+parcelable android.net.wifi.hotspot2.pps.Credential;
+parcelable android.net.wifi.hotspot2.pps.HomeSp;
+parcelable android.net.wifi.nl80211.DeviceWiphyCapabilities;
+parcelable android.net.wifi.nl80211.NativeScanResult;
+parcelable android.net.wifi.nl80211.NativeWifiClient;
+parcelable android.net.wifi.nl80211.PnoNetwork;
+parcelable android.net.wifi.nl80211.PnoSettings;
+parcelable android.net.wifi.nl80211.RadioChainInfo;
+parcelable android.net.wifi.p2p.WifiP2pConfig;
+parcelable android.net.wifi.p2p.WifiP2pDevice;
+parcelable android.net.wifi.p2p.WifiP2pDeviceList;
+parcelable android.net.wifi.p2p.WifiP2pGroup;
+parcelable android.net.wifi.p2p.WifiP2pGroupList;
+parcelable android.net.wifi.p2p.WifiP2pInfo;
+parcelable android.net.wifi.p2p.WifiP2pWfdInfo;
+parcelable android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
+parcelable android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest;
+parcelable android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
+parcelable android.net.wifi.p2p.nsd.WifiP2pServiceRequest;
+parcelable android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo;
+parcelable android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest;
+parcelable android.net.wifi.rtt.RangingRequest;
+parcelable android.net.wifi.rtt.RangingResult;
+parcelable android.net.wifi.rtt.ResponderConfig;
+parcelable android.net.wifi.rtt.ResponderLocation;
+parcelable android.nfc.NdefMessage;
+parcelable android.nfc.NdefRecord;
+parcelable android.nfc.Tag;
+parcelable android.os.BatterySaverPolicyConfig;
+parcelable android.os.Bundle;
+parcelable android.os.CombinedVibration.Mono;
+parcelable android.os.CombinedVibration.Sequential;
+parcelable android.os.CombinedVibration.Stereo;
+parcelable android.os.CombinedVibration;
+parcelable android.os.CpuUsageInfo;
+parcelable android.os.Debug.MemoryInfo;
+parcelable android.os.DropBoxManager.Entry;
+parcelable android.os.IncidentManager.IncidentReport;
+parcelable android.os.IncidentReportArgs;
+parcelable android.os.LocaleList;
+parcelable android.os.Message;
+parcelable android.os.Messenger;
+parcelable android.os.PackageTagsList;
+parcelable android.os.ParcelFileDescriptor;
+parcelable android.os.ParcelUuid;
+parcelable android.os.ParcelableHolder;
+parcelable android.os.PatternMatcher;
+parcelable android.os.PersistableBundle;
+parcelable android.os.RemoteCallback;
+parcelable android.os.ResultReceiver;
+parcelable android.os.SharedMemory;
+parcelable android.os.StatsDimensionsValue;
+parcelable android.os.StrictMode.ViolationInfo;
+parcelable android.os.UserHandle;
+parcelable android.os.UserManager.EnforcingUser;
+parcelable android.os.VibrationAttributes;
+parcelable android.os.VibrationEffect.Composed;
+parcelable android.os.VibrationEffect;
+parcelable android.os.WorkSource.WorkChain;
+parcelable android.os.WorkSource;
+parcelable android.os.connectivity.CellularBatteryStats;
+parcelable android.os.connectivity.WifiActivityEnergyInfo;
+parcelable android.os.connectivity.WifiBatteryStats;
+parcelable android.os.health.HealthStatsParceler;
+parcelable android.os.health.TimerStat;
+parcelable android.os.storage.CrateInfo;
+parcelable android.os.storage.StorageVolume;
+parcelable android.os.vibrator.PrebakedSegment;
+parcelable android.os.vibrator.PrimitiveSegment;
+parcelable android.os.vibrator.RampSegment;
+parcelable android.os.vibrator.StepSegment;
+parcelable android.os.vibrator.VibrationEffectSegment;
+parcelable android.permission.AdminPermissionControlParams;
+parcelable android.permission.RuntimePermissionPresentationInfo;
+parcelable android.permission.RuntimePermissionUsageInfo;
+parcelable android.preference.Preference.BaseSavedState;
+parcelable android.preference.PreferenceActivity.Header;
+parcelable android.print.PageRange;
+parcelable android.print.PrintAttributes;
+parcelable android.print.PrintDocumentInfo;
+parcelable android.print.PrintJobId;
+parcelable android.print.PrintJobInfo;
+parcelable android.print.PrinterCapabilitiesInfo;
+parcelable android.print.PrinterId;
+parcelable android.print.PrinterInfo;
+parcelable android.printservice.PrintServiceInfo;
+parcelable android.printservice.recommendation.RecommendationInfo;
+parcelable android.provider.ContactsContract.SimAccount;
+parcelable android.provider.DocumentsContract.Path;
+parcelable android.security.AppUriAuthenticationPolicy;
+parcelable android.security.keystore.recovery.KeyChainProtectionParams;
+parcelable android.security.keystore.recovery.KeyChainSnapshot;
+parcelable android.security.keystore.recovery.KeyDerivationParams;
+parcelable android.security.keystore.recovery.WrappedApplicationKey;
+parcelable android.service.autofill.BatchUpdates;
+parcelable android.service.autofill.CharSequenceTransformation;
+parcelable android.service.autofill.CompositeUserData;
+parcelable android.service.autofill.CustomDescription;
+parcelable android.service.autofill.Dataset;
+parcelable android.service.autofill.DateTransformation;
+parcelable android.service.autofill.DateValueSanitizer;
+parcelable android.service.autofill.FillContext;
+parcelable android.service.autofill.FillEventHistory;
+parcelable android.service.autofill.FillRequest;
+parcelable android.service.autofill.FillResponse;
+parcelable android.service.autofill.ImageTransformation;
+parcelable android.service.autofill.InlinePresentation;
+parcelable android.service.autofill.InternalOnClickAction;
+parcelable android.service.autofill.InternalSanitizer;
+parcelable android.service.autofill.InternalTransformation;
+parcelable android.service.autofill.InternalValidator;
+parcelable android.service.autofill.LuhnChecksumValidator;
+parcelable android.service.autofill.RegexValidator;
+parcelable android.service.autofill.SaveInfo;
+parcelable android.service.autofill.SaveRequest;
+parcelable android.service.autofill.TextValueSanitizer;
+parcelable android.service.autofill.UserData;
+parcelable android.service.autofill.VisibilitySetterAction;
+parcelable android.service.carrier.CarrierIdentifier;
+parcelable android.service.carrier.MessagePdu;
+parcelable android.service.chooser.ChooserTarget;
+parcelable android.service.contentcapture.ActivityEvent;
+parcelable android.service.contentcapture.SnapshotData;
+parcelable android.service.controls.Control;
+parcelable android.service.controls.templates.ControlButton;
+parcelable android.service.displayhash.DisplayHashParams;
+parcelable android.service.euicc.DownloadSubscriptionResult;
+parcelable android.service.euicc.EuiccProfileInfo;
+parcelable android.service.euicc.GetDefaultDownloadableSubscriptionListResult;
+parcelable android.service.euicc.GetDownloadableSubscriptionMetadataResult;
+parcelable android.service.euicc.GetEuiccProfileInfoListResult;
+parcelable android.service.notification.Adjustment;
+parcelable android.service.notification.Condition;
+parcelable android.service.notification.NotificationListenerService.RankingMap;
+parcelable android.service.notification.NotificationStats;
+parcelable android.service.notification.SnoozeCriterion;
+parcelable android.service.notification.StatusBarNotification;
+parcelable android.service.notification.ZenPolicy;
+parcelable android.service.quickaccesswallet.GetWalletCardsError;
+parcelable android.service.quickaccesswallet.GetWalletCardsRequest;
+parcelable android.service.quickaccesswallet.GetWalletCardsResponse;
+parcelable android.service.quickaccesswallet.SelectWalletCardRequest;
+parcelable android.service.quickaccesswallet.WalletCard;
+parcelable android.service.quickaccesswallet.WalletServiceEvent;
+parcelable android.service.quicksettings.Tile;
+parcelable android.service.resolver.ResolverTarget;
+parcelable android.service.rotationresolver.RotationResolutionRequest;
+parcelable android.service.settings.suggestions.Suggestion;
+parcelable android.service.timezone.TimeZoneProviderSuggestion;
+parcelable android.service.voice.HotwordDetectedResult;
+parcelable android.service.voice.HotwordRejectedResult;
+parcelable android.service.voice.VisibleActivityInfo;
+parcelable android.service.watchdog.ExplicitHealthCheckService.PackageConfig;
+parcelable android.speech.tts.Voice;
+parcelable android.telecom.AudioState;
+parcelable android.telecom.BluetoothCallQualityReport;
+parcelable android.telecom.CallAudioState;
+parcelable android.telecom.Connection.CallFilteringCompletionInfo;
+parcelable android.telecom.ConnectionRequest;
+parcelable android.telecom.DisconnectCause;
+parcelable android.telecom.GatewayInfo;
+parcelable android.telecom.ParcelableCallAnalytics.AnalyticsEvent;
+parcelable android.telecom.ParcelableCallAnalytics.EventTiming;
+parcelable android.telecom.ParcelableCallAnalytics;
+parcelable android.telecom.PhoneAccount;
+parcelable android.telecom.PhoneAccountHandle;
+parcelable android.telecom.PhoneAccountSuggestion;
+parcelable android.telecom.StatusHints;
+parcelable android.telecom.TelecomAnalytics.SessionTiming;
+parcelable android.telecom.TelecomAnalytics;
+parcelable android.telecom.VideoProfile.CameraCapabilities;
+parcelable android.telecom.VideoProfile;
+parcelable android.telephony.AvailableNetworkInfo;
+parcelable android.telephony.BarringInfo.BarringServiceInfo;
+parcelable android.telephony.BarringInfo;
+parcelable android.telephony.CallAttributes;
+parcelable android.telephony.CallForwardingInfo;
+parcelable android.telephony.CallQuality;
+parcelable android.telephony.CarrierRestrictionRules;
+parcelable android.telephony.CellIdentity;
+parcelable android.telephony.CellIdentityCdma;
+parcelable android.telephony.CellIdentityGsm;
+parcelable android.telephony.CellIdentityLte;
+parcelable android.telephony.CellIdentityNr;
+parcelable android.telephony.CellIdentityTdscdma;
+parcelable android.telephony.CellIdentityWcdma;
+parcelable android.telephony.CellInfo;
+parcelable android.telephony.CellInfoCdma;
+parcelable android.telephony.CellInfoGsm;
+parcelable android.telephony.CellInfoLte;
+parcelable android.telephony.CellInfoNr;
+parcelable android.telephony.CellInfoTdscdma;
+parcelable android.telephony.CellInfoWcdma;
+parcelable android.telephony.CellSignalStrengthCdma;
+parcelable android.telephony.CellSignalStrengthGsm;
+parcelable android.telephony.CellSignalStrengthLte;
+parcelable android.telephony.CellSignalStrengthNr;
+parcelable android.telephony.CellSignalStrengthTdscdma;
+parcelable android.telephony.CellSignalStrengthWcdma;
+parcelable android.telephony.ClosedSubscriberGroupInfo;
+parcelable android.telephony.DataSpecificRegistrationInfo;
+parcelable android.telephony.DataThrottlingRequest;
+parcelable android.telephony.IccOpenLogicalChannelResponse;
+parcelable android.telephony.ImsiEncryptionInfo;
+parcelable android.telephony.LinkCapacityEstimate;
+parcelable android.telephony.LteVopsSupportInfo;
+parcelable android.telephony.ModemActivityInfo;
+parcelable android.telephony.NeighboringCellInfo;
+parcelable android.telephony.NetworkRegistrationInfo;
+parcelable android.telephony.NetworkScanRequest;
+parcelable android.telephony.NrVopsSupportInfo;
+parcelable android.telephony.PhoneCapability;
+parcelable android.telephony.PhoneNumberRange;
+parcelable android.telephony.PhysicalChannelConfig;
+parcelable android.telephony.PinResult;
+parcelable android.telephony.PreciseCallState;
+parcelable android.telephony.PreciseDataConnectionState;
+parcelable android.telephony.RadioAccessSpecifier;
+parcelable android.telephony.ServiceState;
+parcelable android.telephony.SignalStrength;
+parcelable android.telephony.SignalStrengthUpdateRequest;
+parcelable android.telephony.SignalThresholdInfo;
+parcelable android.telephony.SmsCbCmasInfo;
+parcelable android.telephony.SmsCbEtwsInfo;
+parcelable android.telephony.SmsCbLocation;
+parcelable android.telephony.SmsCbMessage;
+parcelable android.telephony.SubscriptionInfo;
+parcelable android.telephony.SubscriptionPlan;
+parcelable android.telephony.TelephonyDisplayInfo;
+parcelable android.telephony.TelephonyHistogram;
+parcelable android.telephony.ThermalMitigationRequest;
+parcelable android.telephony.UiccAccessRule;
+parcelable android.telephony.UiccCardInfo;
+parcelable android.telephony.UiccSlotInfo;
+parcelable android.telephony.VisualVoicemailSms;
+parcelable android.telephony.VisualVoicemailSmsFilterSettings;
+parcelable android.telephony.VopsSupportInfo;
+parcelable android.telephony.cdma.CdmaSmsCbProgramData;
+parcelable android.telephony.data.ApnSetting;
+parcelable android.telephony.data.DataCallResponse;
+parcelable android.telephony.data.DataProfile;
+parcelable android.telephony.data.EpsBearerQosSessionAttributes;
+parcelable android.telephony.data.NetworkSliceInfo;
+parcelable android.telephony.data.NetworkSlicingConfig;
+parcelable android.telephony.data.NrQosSessionAttributes;
+parcelable android.telephony.data.RouteSelectionDescriptor;
+parcelable android.telephony.data.ThrottleStatus;
+parcelable android.telephony.data.TrafficDescriptor;
+parcelable android.telephony.data.UrspRule;
+parcelable android.telephony.emergency.EmergencyNumber;
+parcelable android.telephony.euicc.DownloadableSubscription;
+parcelable android.telephony.euicc.EuiccInfo;
+parcelable android.telephony.euicc.EuiccNotification;
+parcelable android.telephony.euicc.EuiccRulesAuthTable;
+parcelable android.telephony.gba.UaSecurityProtocolIdentifier;
+parcelable android.telephony.ims.AudioCodecAttributes;
+parcelable android.telephony.ims.DelegateRegistrationState;
+parcelable android.telephony.ims.DelegateRequest;
+parcelable android.telephony.ims.FeatureTagState;
+parcelable android.telephony.ims.ImsCallForwardInfo;
+parcelable android.telephony.ims.ImsCallProfile;
+parcelable android.telephony.ims.ImsConferenceState;
+parcelable android.telephony.ims.ImsExternalCallState;
+parcelable android.telephony.ims.ImsReasonInfo;
+parcelable android.telephony.ims.ImsRegistrationAttributes;
+parcelable android.telephony.ims.ImsSsData;
+parcelable android.telephony.ims.ImsSsInfo;
+parcelable android.telephony.ims.ImsStreamMediaProfile;
+parcelable android.telephony.ims.ImsSuppServiceNotification;
+parcelable android.telephony.ims.RcsClientConfiguration;
+parcelable android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities;
+parcelable android.telephony.ims.RcsContactPresenceTuple;
+parcelable android.telephony.ims.RcsContactUceCapability;
+parcelable android.telephony.ims.RtpHeaderExtension;
+parcelable android.telephony.ims.RtpHeaderExtensionType;
+parcelable android.telephony.ims.SipDelegateConfiguration;
+parcelable android.telephony.ims.SipMessage;
+parcelable android.telephony.ims.feature.CapabilityChangeRequest;
+parcelable android.telephony.ims.stub.ImsFeatureConfiguration;
+parcelable android.telephony.mbms.DownloadRequest;
+parcelable android.telephony.mbms.FileInfo;
+parcelable android.telephony.mbms.FileServiceInfo;
+parcelable android.telephony.mbms.StreamingServiceInfo;
+parcelable android.telephony.mbms.UriPathPair;
+parcelable android.text.Annotation;
+parcelable android.text.FontConfig.Alias;
+parcelable android.text.FontConfig.Font;
+parcelable android.text.FontConfig.FontFamily;
+parcelable android.text.FontConfig;
+parcelable android.text.ParcelableSpan;
+parcelable android.text.style.AbsoluteSizeSpan;
+parcelable android.text.style.AlignmentSpan.Standard;
+parcelable android.text.style.BackgroundColorSpan;
+parcelable android.text.style.BulletSpan;
+parcelable android.text.style.EasyEditSpan;
+parcelable android.text.style.ForegroundColorSpan;
+parcelable android.text.style.LeadingMarginSpan.Standard;
+parcelable android.text.style.LineBackgroundSpan.Standard;
+parcelable android.text.style.LineHeightSpan.Standard;
+parcelable android.text.style.LocaleSpan;
+parcelable android.text.style.QuoteSpan;
+parcelable android.text.style.RelativeSizeSpan;
+parcelable android.text.style.ScaleXSpan;
+parcelable android.text.style.StrikethroughSpan;
+parcelable android.text.style.StyleSpan;
+parcelable android.text.style.SubscriptSpan;
+parcelable android.text.style.SuggestionSpan;
+parcelable android.text.style.SuperscriptSpan;
+parcelable android.text.style.TextAppearanceSpan;
+parcelable android.text.style.TtsSpan;
+parcelable android.text.style.TypefaceSpan;
+parcelable android.text.style.URLSpan;
+parcelable android.text.style.UnderlineSpan;
+parcelable android.util.SizeF;
+parcelable android.uwb.AngleMeasurement;
+parcelable android.uwb.AngleOfArrivalMeasurement;
+parcelable android.uwb.DistanceMeasurement;
+parcelable android.uwb.RangingMeasurement;
+parcelable android.uwb.RangingReport;
+parcelable android.uwb.UwbAddress;
+parcelable android.view.AbsSavedState;
+parcelable android.view.ContentInfo;
+parcelable android.view.Display.HdrCapabilities;
+parcelable android.view.Display.Mode;
+parcelable android.view.DragAndDropPermissions;
+parcelable android.view.DragEvent;
+parcelable android.view.InputDevice;
+parcelable android.view.InputEvent;
+parcelable android.view.KeyCharacterMap;
+parcelable android.view.KeyEvent;
+parcelable android.view.KeyboardShortcutGroup;
+parcelable android.view.KeyboardShortcutInfo;
+parcelable android.view.MotionEvent;
+parcelable android.view.PointerIcon;
+parcelable android.view.RoundedCorner;
+parcelable android.view.Surface;
+parcelable android.view.SurfaceControl.Transaction;
+parcelable android.view.SurfaceControl;
+parcelable android.view.SurfaceControlViewHost.SurfacePackage;
+parcelable android.view.VerifiedInputEvent;
+parcelable android.view.VerifiedKeyEvent;
+parcelable android.view.VerifiedMotionEvent;
+parcelable android.view.View.BaseSavedState;
+parcelable android.view.WindowAnimationFrameStats;
+parcelable android.view.WindowContentFrameStats;
+parcelable android.view.WindowId;
+parcelable android.view.WindowManager.LayoutParams;
+parcelable android.view.accessibility.AccessibilityEvent;
+parcelable android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction;
+parcelable android.view.accessibility.AccessibilityNodeInfo.TouchDelegateInfo;
+parcelable android.view.accessibility.AccessibilityNodeInfo;
+parcelable android.view.accessibility.AccessibilityWindowInfo;
+parcelable android.view.autofill.AutofillId;
+parcelable android.view.autofill.AutofillValue;
+parcelable android.view.contentcapture.ContentCaptureCondition;
+parcelable android.view.contentcapture.ContentCaptureContext;
+parcelable android.view.contentcapture.ContentCaptureEvent;
+parcelable android.view.contentcapture.ContentCaptureSessionId;
+parcelable android.view.contentcapture.DataRemovalRequest;
+parcelable android.view.contentcapture.DataShareRequest;
+parcelable android.view.displayhash.DisplayHash;
+parcelable android.view.displayhash.VerifiedDisplayHash;
+parcelable android.view.inputmethod.CompletionInfo;
+parcelable android.view.inputmethod.CorrectionInfo;
+parcelable android.view.inputmethod.CursorAnchorInfo;
+parcelable android.view.inputmethod.EditorInfo;
+parcelable android.view.inputmethod.ExtractedText;
+parcelable android.view.inputmethod.ExtractedTextRequest;
+parcelable android.view.inputmethod.InlineSuggestion;
+parcelable android.view.inputmethod.InlineSuggestionInfo;
+parcelable android.view.inputmethod.InlineSuggestionsRequest;
+parcelable android.view.inputmethod.InlineSuggestionsResponse;
+parcelable android.view.inputmethod.InputBinding;
+parcelable android.view.inputmethod.InputContentInfo;
+parcelable android.view.inputmethod.InputMethodInfo;
+parcelable android.view.inputmethod.InputMethodSubtype;
+parcelable android.view.inputmethod.SurroundingText;
+parcelable android.view.textclassifier.ConversationAction;
+parcelable android.view.textclassifier.ConversationActions.Message;
+parcelable android.view.textclassifier.ConversationActions.Request;
+parcelable android.view.textclassifier.ConversationActions;
+parcelable android.view.textclassifier.SelectionEvent;
+parcelable android.view.textclassifier.TextClassification.Request;
+parcelable android.view.textclassifier.TextClassification;
+parcelable android.view.textclassifier.TextClassificationContext;
+parcelable android.view.textclassifier.TextClassificationSessionId;
+parcelable android.view.textclassifier.TextClassifier.EntityConfig;
+parcelable android.view.textclassifier.TextClassifierEvent.ConversationActionsEvent;
+parcelable android.view.textclassifier.TextClassifierEvent.LanguageDetectionEvent;
+parcelable android.view.textclassifier.TextClassifierEvent.TextLinkifyEvent;
+parcelable android.view.textclassifier.TextClassifierEvent.TextSelectionEvent;
+parcelable android.view.textclassifier.TextClassifierEvent;
+parcelable android.view.textclassifier.TextLanguage.Request;
+parcelable android.view.textclassifier.TextLanguage;
+parcelable android.view.textclassifier.TextLinks.Request;
+parcelable android.view.textclassifier.TextLinks.TextLink;
+parcelable android.view.textclassifier.TextLinks;
+parcelable android.view.textclassifier.TextSelection.Request;
+parcelable android.view.textclassifier.TextSelection;
+parcelable android.view.textservice.SentenceSuggestionsInfo;
+parcelable android.view.textservice.SpellCheckerInfo;
+parcelable android.view.textservice.SpellCheckerSubtype;
+parcelable android.view.textservice.SuggestionsInfo;
+parcelable android.view.textservice.TextInfo;
+parcelable android.view.translation.TranslationCapability;
+parcelable android.view.translation.TranslationContext;
+parcelable android.view.translation.TranslationRequest;
+parcelable android.view.translation.TranslationRequestValue;
+parcelable android.view.translation.TranslationResponse;
+parcelable android.view.translation.TranslationResponseValue;
+parcelable android.view.translation.TranslationSpec;
+parcelable android.view.translation.UiTranslationSpec;
+parcelable android.view.translation.ViewTranslationRequest;
+parcelable android.view.translation.ViewTranslationResponse;
+parcelable android.webkit.WebViewProviderInfo;
+parcelable android.widget.RemoteViews.RemoteCollectionItems;
+parcelable android.widget.RemoteViews;
+parcelable android.widget.TextView.SavedState;
+parcelable android.widget.inline.InlinePresentationSpec;
+parcelable android.window.DisplayAreaAppearedInfo;
+parcelable android.window.DisplayAreaInfo;
+parcelable android.window.TaskAppearedInfo;
+parcelable android.window.TaskFragmentCreationParams;
+parcelable android.window.TaskFragmentInfo;
+parcelable android.window.TaskFragmentOrganizerToken;
+parcelable android.window.WindowContainerToken;
+parcelable android.window.WindowContainerTransaction;
diff --git a/32/public/javax.obex.jar b/32/public/javax.obex.jar
new file mode 100644
index 0000000..ad2198b
--- /dev/null
+++ b/32/public/javax.obex.jar
Binary files differ
diff --git a/32/public/org.apache.http.legacy.jar b/32/public/org.apache.http.legacy.jar
new file mode 100644
index 0000000..6d54f6d
--- /dev/null
+++ b/32/public/org.apache.http.legacy.jar
Binary files differ
diff --git a/32/public/runtime-i18n.jar b/32/public/runtime-i18n.jar
new file mode 100644
index 0000000..57ca95d
--- /dev/null
+++ b/32/public/runtime-i18n.jar
Binary files differ
diff --git a/32/public/service-media-s.jar b/32/public/service-media-s.jar
new file mode 100644
index 0000000..b62b671
--- /dev/null
+++ b/32/public/service-media-s.jar
Binary files differ
diff --git a/32/public/service-permission.jar b/32/public/service-permission.jar
new file mode 100644
index 0000000..b62b671
--- /dev/null
+++ b/32/public/service-permission.jar
Binary files differ
diff --git a/32/public/uiautomator.jar b/32/public/uiautomator.jar
new file mode 100644
index 0000000..c83cba0
--- /dev/null
+++ b/32/public/uiautomator.jar
Binary files differ
diff --git a/32/system-server/android.jar b/32/system-server/android.jar
new file mode 100644
index 0000000..294eb0b
--- /dev/null
+++ b/32/system-server/android.jar
Binary files differ
diff --git a/32/system-server/api/android-non-updatable-removed.txt b/32/system-server/api/android-non-updatable-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system-server/api/android-non-updatable-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system-server/api/android-non-updatable.txt b/32/system-server/api/android-non-updatable.txt
new file mode 100644
index 0000000..50f0052
--- /dev/null
+++ b/32/system-server/api/android-non-updatable.txt
@@ -0,0 +1,85 @@
+// Signature format: 2.0
+package com.android.server {
+
+  public final class LocalManagerRegistry {
+    method public static <T> void addManager(@NonNull Class<T>, @NonNull T);
+    method @Nullable public static <T> T getManager(@NonNull Class<T>);
+  }
+
+  public abstract class SystemService {
+    ctor public SystemService(@NonNull android.content.Context);
+    method @NonNull public final android.content.Context getContext();
+    method public boolean isUserSupported(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onBootPhase(int);
+    method public abstract void onStart();
+    method public void onUserStarting(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserStopped(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserStopping(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserSwitching(@Nullable com.android.server.SystemService.TargetUser, @NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserUnlocked(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserUnlocking(@NonNull com.android.server.SystemService.TargetUser);
+    method protected final void publishBinderService(@NonNull String, @NonNull android.os.IBinder);
+    method protected final void publishBinderService(@NonNull String, @NonNull android.os.IBinder, boolean);
+    field public static final int PHASE_ACTIVITY_MANAGER_READY = 550; // 0x226
+    field public static final int PHASE_BOOT_COMPLETED = 1000; // 0x3e8
+    field public static final int PHASE_DEVICE_SPECIFIC_SERVICES_READY = 520; // 0x208
+    field public static final int PHASE_LOCK_SETTINGS_READY = 480; // 0x1e0
+    field public static final int PHASE_SYSTEM_SERVICES_READY = 500; // 0x1f4
+    field public static final int PHASE_THIRD_PARTY_APPS_CAN_START = 600; // 0x258
+    field public static final int PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100; // 0x64
+  }
+
+  public static final class SystemService.TargetUser {
+    method @NonNull public android.os.UserHandle getUserHandle();
+  }
+
+}
+
+package com.android.server.am {
+
+  public interface ActivityManagerLocal {
+    method public boolean canStartForegroundService(int, int, @NonNull String);
+  }
+
+}
+
+package com.android.server.role {
+
+  public interface RoleServicePlatformHelper {
+    method @NonNull public String computePackageStateHash(int);
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getLegacyRoleState(int);
+  }
+
+}
+
+package com.android.server.stats {
+
+  public final class StatsHelper {
+    method public static void sendStatsdReadyBroadcast(@NonNull android.content.Context);
+  }
+
+}
+
+package com.android.server.usage {
+
+  public interface StorageStatsManagerLocal {
+    method public void registerStorageStatsAugmenter(@NonNull com.android.server.usage.StorageStatsManagerLocal.StorageStatsAugmenter, @NonNull String);
+  }
+
+  public static interface StorageStatsManagerLocal.StorageStatsAugmenter {
+    method public void augmentStatsForPackageForUser(@NonNull android.content.pm.PackageStats, @NonNull String, @NonNull android.os.UserHandle, boolean);
+    method public void augmentStatsForUid(@NonNull android.content.pm.PackageStats, int, boolean);
+    method public void augmentStatsForUser(@NonNull android.content.pm.PackageStats, @NonNull android.os.UserHandle);
+  }
+
+}
+
+package com.android.server.wifi {
+
+  public class SupplicantManager {
+    method public static void start();
+    method public static void stop();
+  }
+
+}
+
diff --git a/32/system-server/api/android.txt b/32/system-server/api/android.txt
new file mode 100644
index 0000000..00b5717
--- /dev/null
+++ b/32/system-server/api/android.txt
@@ -0,0 +1,138 @@
+// Signature format: 2.0
+package com.android.permission.persistence {
+
+  public interface RuntimePermissionsPersistence {
+    method @NonNull public static com.android.permission.persistence.RuntimePermissionsPersistence createInstance();
+    method public void deleteForUser(@NonNull android.os.UserHandle);
+    method @Nullable public com.android.permission.persistence.RuntimePermissionsState readForUser(@NonNull android.os.UserHandle);
+    method public void writeForUser(@NonNull com.android.permission.persistence.RuntimePermissionsState, @NonNull android.os.UserHandle);
+  }
+
+  public final class RuntimePermissionsState {
+    ctor public RuntimePermissionsState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>>, @NonNull java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>>);
+    method @Nullable public String getFingerprint();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>> getPackagePermissions();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>> getSharedUserPermissions();
+    method public int getVersion();
+    field public static final int NO_VERSION = -1; // 0xffffffff
+  }
+
+  public static final class RuntimePermissionsState.PermissionState {
+    ctor public RuntimePermissionsState.PermissionState(@NonNull String, boolean, int);
+    method public int getFlags();
+    method @NonNull public String getName();
+    method public boolean isGranted();
+  }
+
+}
+
+package com.android.role {
+
+  public interface RoleManagerLocal {
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getRolesAndHolders(int);
+  }
+
+}
+
+package com.android.role.persistence {
+
+  public interface RolesPersistence {
+    method @NonNull public static com.android.role.persistence.RolesPersistence createInstance();
+    method public void deleteForUser(@NonNull android.os.UserHandle);
+    method @Nullable public com.android.role.persistence.RolesState readForUser(@NonNull android.os.UserHandle);
+    method public void writeForUser(@NonNull com.android.role.persistence.RolesState, @NonNull android.os.UserHandle);
+  }
+
+  public final class RolesState {
+    ctor public RolesState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>>);
+    method @Nullable public String getPackagesHash();
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getRoles();
+    method public int getVersion();
+  }
+
+}
+
+package com.android.server {
+
+  public final class LocalManagerRegistry {
+    method public static <T> void addManager(@NonNull Class<T>, @NonNull T);
+    method @Nullable public static <T> T getManager(@NonNull Class<T>);
+  }
+
+  public abstract class SystemService {
+    ctor public SystemService(@NonNull android.content.Context);
+    method @NonNull public final android.content.Context getContext();
+    method public boolean isUserSupported(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onBootPhase(int);
+    method public abstract void onStart();
+    method public void onUserStarting(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserStopped(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserStopping(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserSwitching(@Nullable com.android.server.SystemService.TargetUser, @NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserUnlocked(@NonNull com.android.server.SystemService.TargetUser);
+    method public void onUserUnlocking(@NonNull com.android.server.SystemService.TargetUser);
+    method protected final void publishBinderService(@NonNull String, @NonNull android.os.IBinder);
+    method protected final void publishBinderService(@NonNull String, @NonNull android.os.IBinder, boolean);
+    field public static final int PHASE_ACTIVITY_MANAGER_READY = 550; // 0x226
+    field public static final int PHASE_BOOT_COMPLETED = 1000; // 0x3e8
+    field public static final int PHASE_DEVICE_SPECIFIC_SERVICES_READY = 520; // 0x208
+    field public static final int PHASE_LOCK_SETTINGS_READY = 480; // 0x1e0
+    field public static final int PHASE_SYSTEM_SERVICES_READY = 500; // 0x1f4
+    field public static final int PHASE_THIRD_PARTY_APPS_CAN_START = 600; // 0x258
+    field public static final int PHASE_WAIT_FOR_DEFAULT_DISPLAY = 100; // 0x64
+  }
+
+  public static final class SystemService.TargetUser {
+    method @NonNull public android.os.UserHandle getUserHandle();
+  }
+
+}
+
+package com.android.server.am {
+
+  public interface ActivityManagerLocal {
+    method public boolean canStartForegroundService(int, int, @NonNull String);
+  }
+
+}
+
+package com.android.server.role {
+
+  public interface RoleServicePlatformHelper {
+    method @NonNull public String computePackageStateHash(int);
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getLegacyRoleState(int);
+  }
+
+}
+
+package com.android.server.stats {
+
+  public final class StatsHelper {
+    method public static void sendStatsdReadyBroadcast(@NonNull android.content.Context);
+  }
+
+}
+
+package com.android.server.usage {
+
+  public interface StorageStatsManagerLocal {
+    method public void registerStorageStatsAugmenter(@NonNull com.android.server.usage.StorageStatsManagerLocal.StorageStatsAugmenter, @NonNull String);
+  }
+
+  public static interface StorageStatsManagerLocal.StorageStatsAugmenter {
+    method public void augmentStatsForPackageForUser(@NonNull android.content.pm.PackageStats, @NonNull String, @NonNull android.os.UserHandle, boolean);
+    method public void augmentStatsForUid(@NonNull android.content.pm.PackageStats, int, boolean);
+    method public void augmentStatsForUser(@NonNull android.content.pm.PackageStats, @NonNull android.os.UserHandle);
+  }
+
+}
+
+package com.android.server.wifi {
+
+  public class SupplicantManager {
+    method public static void start();
+    method public static void stop();
+  }
+
+}
+
diff --git a/32/system-server/api/removed.txt b/32/system-server/api/removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system-server/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system-server/api/service-media-s-removed.txt b/32/system-server/api/service-media-s-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system-server/api/service-media-s-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system-server/api/service-media-s.txt b/32/system-server/api/service-media-s.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system-server/api/service-media-s.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system-server/api/service-permission-removed.txt b/32/system-server/api/service-permission-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system-server/api/service-permission-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system-server/api/service-permission.txt b/32/system-server/api/service-permission.txt
new file mode 100644
index 0000000..b1869c2
--- /dev/null
+++ b/32/system-server/api/service-permission.txt
@@ -0,0 +1,54 @@
+// Signature format: 2.0
+package com.android.permission.persistence {
+
+  public interface RuntimePermissionsPersistence {
+    method @NonNull public static com.android.permission.persistence.RuntimePermissionsPersistence createInstance();
+    method public void deleteForUser(@NonNull android.os.UserHandle);
+    method @Nullable public com.android.permission.persistence.RuntimePermissionsState readForUser(@NonNull android.os.UserHandle);
+    method public void writeForUser(@NonNull com.android.permission.persistence.RuntimePermissionsState, @NonNull android.os.UserHandle);
+  }
+
+  public final class RuntimePermissionsState {
+    ctor public RuntimePermissionsState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>>, @NonNull java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>>);
+    method @Nullable public String getFingerprint();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>> getPackagePermissions();
+    method @NonNull public java.util.Map<java.lang.String,java.util.List<com.android.permission.persistence.RuntimePermissionsState.PermissionState>> getSharedUserPermissions();
+    method public int getVersion();
+    field public static final int NO_VERSION = -1; // 0xffffffff
+  }
+
+  public static final class RuntimePermissionsState.PermissionState {
+    ctor public RuntimePermissionsState.PermissionState(@NonNull String, boolean, int);
+    method public int getFlags();
+    method @NonNull public String getName();
+    method public boolean isGranted();
+  }
+
+}
+
+package com.android.role {
+
+  public interface RoleManagerLocal {
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getRolesAndHolders(int);
+  }
+
+}
+
+package com.android.role.persistence {
+
+  public interface RolesPersistence {
+    method @NonNull public static com.android.role.persistence.RolesPersistence createInstance();
+    method public void deleteForUser(@NonNull android.os.UserHandle);
+    method @Nullable public com.android.role.persistence.RolesState readForUser(@NonNull android.os.UserHandle);
+    method public void writeForUser(@NonNull com.android.role.persistence.RolesState, @NonNull android.os.UserHandle);
+  }
+
+  public final class RolesState {
+    ctor public RolesState(int, @Nullable String, @NonNull java.util.Map<java.lang.String,java.util.Set<java.lang.String>>);
+    method @Nullable public String getPackagesHash();
+    method @NonNull public java.util.Map<java.lang.String,java.util.Set<java.lang.String>> getRoles();
+    method public int getVersion();
+  }
+
+}
+
diff --git a/32/system-server/service-media-s.jar b/32/system-server/service-media-s.jar
new file mode 100644
index 0000000..b62b671
--- /dev/null
+++ b/32/system-server/service-media-s.jar
Binary files differ
diff --git a/32/system-server/service-permission.jar b/32/system-server/service-permission.jar
new file mode 100644
index 0000000..fbc11c6
--- /dev/null
+++ b/32/system-server/service-permission.jar
Binary files differ
diff --git a/32/system/android-non-updatable.jar b/32/system/android-non-updatable.jar
new file mode 100644
index 0000000..0038123
--- /dev/null
+++ b/32/system/android-non-updatable.jar
Binary files differ
diff --git a/32/system/android.jar b/32/system/android.jar
new file mode 100644
index 0000000..3bd3036
--- /dev/null
+++ b/32/system/android.jar
Binary files differ
diff --git a/32/system/android.test.base.jar b/32/system/android.test.base.jar
new file mode 100644
index 0000000..f48d4ac
--- /dev/null
+++ b/32/system/android.test.base.jar
Binary files differ
diff --git a/32/system/android.test.mock.jar b/32/system/android.test.mock.jar
new file mode 100644
index 0000000..4e7d380
--- /dev/null
+++ b/32/system/android.test.mock.jar
Binary files differ
diff --git a/32/system/android.test.runner.jar b/32/system/android.test.runner.jar
new file mode 100644
index 0000000..16b9a0a
--- /dev/null
+++ b/32/system/android.test.runner.jar
Binary files differ
diff --git a/32/system/api/android-non-updatable-removed.txt b/32/system/api/android-non-updatable-removed.txt
new file mode 100644
index 0000000..9a8a493
--- /dev/null
+++ b/32/system/api/android-non-updatable-removed.txt
@@ -0,0 +1,319 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
+  }
+
+}
+
+package android.app {
+
+  public class AppOpsManager {
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getOpsForPackage(int, @NonNull String, @Nullable int[]);
+    method @Deprecated public void setNotedAppOpsCollector(@Nullable android.app.AppOpsManager.AppOpsCollector);
+  }
+
+  @Deprecated public abstract static class AppOpsManager.AppOpsCollector extends android.app.AppOpsManager.OnOpNotedCallback {
+    ctor public AppOpsManager.AppOpsCollector();
+    method @NonNull public java.util.concurrent.Executor getAsyncNotedExecutor();
+  }
+
+  public class Notification implements android.os.Parcelable {
+    method public static Class<? extends android.app.Notification.Style> getNotificationStyleClass(String);
+  }
+
+  public static final class Notification.TvExtender implements android.app.Notification.Extender {
+    method @Deprecated public String getChannel();
+  }
+
+}
+
+package android.app.backup {
+
+  public class RestoreSession {
+    method @Deprecated public int restoreSome(long, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor, String[]);
+    method @Deprecated public int restoreSome(long, android.app.backup.RestoreObserver, String[]);
+  }
+
+}
+
+package android.app.prediction {
+
+  public static final class AppTarget.Builder {
+    ctor @Deprecated public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId);
+    method @Deprecated @NonNull public android.app.prediction.AppTarget.Builder setTarget(@NonNull String, @NonNull android.os.UserHandle);
+    method @Deprecated @NonNull public android.app.prediction.AppTarget.Builder setTarget(@NonNull android.content.pm.ShortcutInfo);
+  }
+
+}
+
+package android.app.search {
+
+  public final class Query implements android.os.Parcelable {
+    method @Deprecated @NonNull public long getTimestamp();
+  }
+
+  public final class SearchSession implements java.lang.AutoCloseable {
+    method @Deprecated public void destroy();
+  }
+
+  public final class SearchTarget implements android.os.Parcelable {
+    method @Deprecated public boolean shouldHide();
+  }
+
+  public static final class SearchTarget.Builder {
+    method @Deprecated @NonNull public android.app.search.SearchTarget.Builder setShouldHide(boolean);
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean setPriority(android.bluetooth.BluetoothDevice, int);
+  }
+
+}
+
+package android.content {
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field @Deprecated public static final String ACTION_DEVICE_INITIALIZATION_WIZARD = "android.intent.action.DEVICE_INITIALIZATION_WIZARD";
+    field @Deprecated public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";
+    field @Deprecated public static final String ACTION_SERVICE_STATE = "android.intent.action.SERVICE_STATE";
+    field @Deprecated public static final String EXTRA_CDMA_DEFAULT_ROAMING_INDICATOR = "cdmaDefaultRoamingIndicator";
+    field @Deprecated public static final String EXTRA_CDMA_ROAMING_INDICATOR = "cdmaRoamingIndicator";
+    field @Deprecated public static final String EXTRA_CSS_INDICATOR = "cssIndicator";
+    field @Deprecated public static final String EXTRA_DATA_OPERATOR_ALPHA_LONG = "data-operator-alpha-long";
+    field @Deprecated public static final String EXTRA_DATA_OPERATOR_ALPHA_SHORT = "data-operator-alpha-short";
+    field @Deprecated public static final String EXTRA_DATA_OPERATOR_NUMERIC = "data-operator-numeric";
+    field @Deprecated public static final String EXTRA_DATA_RADIO_TECH = "dataRadioTechnology";
+    field @Deprecated public static final String EXTRA_DATA_REG_STATE = "dataRegState";
+    field @Deprecated public static final String EXTRA_DATA_ROAMING_TYPE = "dataRoamingType";
+    field @Deprecated public static final String EXTRA_EMERGENCY_ONLY = "emergencyOnly";
+    field @Deprecated public static final String EXTRA_IS_DATA_ROAMING_FROM_REGISTRATION = "isDataRoamingFromRegistration";
+    field @Deprecated public static final String EXTRA_IS_USING_CARRIER_AGGREGATION = "isUsingCarrierAggregation";
+    field @Deprecated public static final String EXTRA_LTE_EARFCN_RSRP_BOOST = "LteEarfcnRsrpBoost";
+    field @Deprecated public static final String EXTRA_MANUAL = "manual";
+    field @Deprecated public static final String EXTRA_NETWORK_ID = "networkId";
+    field @Deprecated public static final String EXTRA_OPERATOR_ALPHA_LONG = "operator-alpha-long";
+    field @Deprecated public static final String EXTRA_OPERATOR_ALPHA_SHORT = "operator-alpha-short";
+    field @Deprecated public static final String EXTRA_OPERATOR_NUMERIC = "operator-numeric";
+    field @Deprecated public static final String EXTRA_SYSTEM_ID = "systemId";
+    field @Deprecated public static final String EXTRA_VOICE_RADIO_TECH = "radioTechnology";
+    field @Deprecated public static final String EXTRA_VOICE_REG_STATE = "voiceRegState";
+    field @Deprecated public static final String EXTRA_VOICE_ROAMING_TYPE = "voiceRoamingType";
+  }
+
+}
+
+package android.content.pm {
+
+  public class PackageItemInfo {
+    field @Deprecated public static final int SAFE_LABEL_FLAG_FIRST_LINE = 4; // 0x4
+    field @Deprecated public static final int SAFE_LABEL_FLAG_SINGLE_LINE = 2; // 0x2
+    field @Deprecated public static final int SAFE_LABEL_FLAG_TRIM = 1; // 0x1
+  }
+
+}
+
+package android.hardware.hdmi {
+
+  public final class HdmiControlManager {
+    method @Deprecated public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getConnectedDevicesList();
+    method @Deprecated public boolean isRemoteDeviceConnected(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @Deprecated public void powerOffRemoteDevice(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @Deprecated public void powerOnRemoteDevice(android.hardware.hdmi.HdmiDeviceInfo);
+    method @Deprecated public void requestRemoteDeviceToBecomeActiveSource(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+  }
+
+}
+
+package android.location {
+
+  public class LocationManager {
+    method @Deprecated public boolean addGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
+    method @Deprecated public boolean addGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String);
+    method @Deprecated public void removeGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
+    method @Deprecated public void removeGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setLocationControllerExtraPackage(String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setLocationControllerExtraPackageEnabled(boolean);
+  }
+
+}
+
+package android.media.tv {
+
+  public final class TvInputManager {
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, android.media.tv.TvInputManager.HardwareCallback, android.media.tv.TvInputInfo);
+  }
+
+  public static final class TvInputManager.Hardware {
+    method public boolean dispatchKeyEventToHdmi(android.view.KeyEvent);
+  }
+
+}
+
+package android.os {
+
+  public class Build {
+    field public static final boolean PERMISSIONS_REVIEW_REQUIRED = true;
+  }
+
+}
+
+package android.service.notification {
+
+  public abstract class NotificationListenerService extends android.app.Service {
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(int);
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(String[], int);
+    method public void registerAsSystemService(android.content.Context, android.content.ComponentName, int) throws android.os.RemoteException;
+    method public final void setOnNotificationPostedTrim(int);
+    method public final void snoozeNotification(String, String);
+    method public void unregisterAsSystemService() throws android.os.RemoteException;
+    field public static final int TRIM_FULL = 0; // 0x0
+    field public static final int TRIM_LIGHT = 1; // 0x1
+  }
+
+  public static class NotificationListenerService.Ranking {
+    method public java.util.List<java.lang.String> getAdditionalPeople();
+    method public java.util.List<android.service.notification.SnoozeCriterion> getSnoozeCriteria();
+  }
+
+}
+
+package android.service.search {
+
+  public abstract class SearchUiService extends android.app.Service {
+    method @Deprecated public void onCreateSearchSession(@NonNull android.app.search.SearchContext, @NonNull android.app.search.SearchSessionId);
+  }
+
+}
+
+package android.service.translation {
+
+  public abstract class TranslationService extends android.app.Service {
+    method @Deprecated public void onCreateTranslationSession(@NonNull android.view.translation.TranslationContext, int);
+    method @Deprecated public void onTranslationRequest(@NonNull android.view.translation.TranslationRequest, int, @Nullable android.os.CancellationSignal, @NonNull android.service.translation.TranslationService.OnTranslationResultCallback);
+  }
+
+  @Deprecated public static interface TranslationService.OnTranslationResultCallback {
+    method @Deprecated public void onError();
+    method public void onTranslationSuccess(@NonNull android.view.translation.TranslationResponse);
+  }
+
+}
+
+package android.telecom {
+
+  public class TelecomManager {
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.WRITE_SECURE_SETTINGS}) public boolean setDefaultDialer(@Nullable String);
+  }
+
+}
+
+package android.telephony {
+
+  public class TelephonyManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void answerRingingCall();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CALL_PHONE) public boolean endCall();
+    method @Deprecated public void silenceRinger();
+  }
+
+}
+
+package android.telephony.data {
+
+  public final class DataCallResponse implements android.os.Parcelable {
+    ctor public DataCallResponse(int, int, int, int, int, @Nullable String, @Nullable java.util.List<android.net.LinkAddress>, @Nullable java.util.List<java.net.InetAddress>, @Nullable java.util.List<java.net.InetAddress>, @Nullable java.util.List<java.net.InetAddress>, int);
+  }
+
+}
+
+package android.telephony.ims {
+
+  public interface DelegateStateCallback {
+    method @Deprecated public void onImsConfigurationChanged(@NonNull android.telephony.ims.SipDelegateImsConfiguration);
+  }
+
+  @Deprecated public final class SipDelegateImsConfiguration implements android.os.Parcelable {
+    method public boolean containsKey(@NonNull String);
+    method @NonNull public android.os.PersistableBundle copyBundle();
+    method public int describeContents();
+    method public boolean getBoolean(@NonNull String, boolean);
+    method public int getInt(@NonNull String, int);
+    method @Nullable public String getString(@NonNull String);
+    method public long getVersion();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipDelegateImsConfiguration> CREATOR;
+    field public static final String IPTYPE_IPV4 = "IPV4";
+    field public static final String IPTYPE_IPV6 = "IPV6";
+    field public static final String KEY_SIP_CONFIG_AUTHENTICATION_HEADER_STRING = "sip_config_auhentication_header_string";
+    field public static final String KEY_SIP_CONFIG_AUTHENTICATION_NONCE_STRING = "sip_config_authentication_nonce_string";
+    field public static final String KEY_SIP_CONFIG_CELLULAR_NETWORK_INFO_HEADER_STRING = "sip_config_cellular_network_info_header_string";
+    field public static final String KEY_SIP_CONFIG_HOME_DOMAIN_STRING = "sip_config_home_domain_string";
+    field public static final String KEY_SIP_CONFIG_IMEI_STRING = "sip_config_imei_string";
+    field public static final String KEY_SIP_CONFIG_IPTYPE_STRING = "sip_config_iptype_string";
+    field public static final String KEY_SIP_CONFIG_IS_COMPACT_FORM_ENABLED_BOOL = "sip_config_is_compact_form_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_GRUU_ENABLED_BOOL = "sip_config_is_gruu_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_IPSEC_ENABLED_BOOL = "sip_config_is_ipsec_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_KEEPALIVE_ENABLED_BOOL = "sip_config_is_keepalive_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_NAT_ENABLED_BOOL = "sip_config_is_nat_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_MAX_PAYLOAD_SIZE_ON_UDP_INT = "sip_config_udp_max_payload_size_int";
+    field public static final String KEY_SIP_CONFIG_PATH_HEADER_STRING = "sip_config_path_header_string";
+    field public static final String KEY_SIP_CONFIG_P_ACCESS_NETWORK_INFO_HEADER_STRING = "sip_config_p_access_network_info_header_string";
+    field public static final String KEY_SIP_CONFIG_P_ASSOCIATED_URI_HEADER_STRING = "sip_config_p_associated_uri_header_string";
+    field public static final String KEY_SIP_CONFIG_P_LAST_ACCESS_NETWORK_INFO_HEADER_STRING = "sip_config_p_last_access_network_info_header_string";
+    field public static final String KEY_SIP_CONFIG_SECURITY_VERIFY_HEADER_STRING = "sip_config_security_verify_header_string";
+    field public static final String KEY_SIP_CONFIG_SERVER_DEFAULT_IPADDRESS_STRING = "sip_config_server_default_ipaddress_string";
+    field public static final String KEY_SIP_CONFIG_SERVER_DEFAULT_PORT_INT = "sip_config_server_default_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVER_IPSEC_CLIENT_PORT_INT = "sip_config_server_ipsec_client_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVER_IPSEC_OLD_CLIENT_PORT_INT = "sip_config_server_ipsec_old_client_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVER_IPSEC_SERVER_PORT_INT = "sip_config_server_ipsec_server_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVICE_ROUTE_HEADER_STRING = "sip_config_service_route_header_string";
+    field public static final String KEY_SIP_CONFIG_TRANSPORT_TYPE_STRING = "sip_config_protocol_type_string";
+    field public static final String KEY_SIP_CONFIG_UE_DEFAULT_IPADDRESS_STRING = "sip_config_ue_default_ipaddress_string";
+    field public static final String KEY_SIP_CONFIG_UE_DEFAULT_PORT_INT = "sip_config_ue_default_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_IPSEC_CLIENT_PORT_INT = "sip_config_ue_ipsec_client_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_IPSEC_OLD_CLIENT_PORT_INT = "sip_config_ue_ipsec_old_client_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_IPSEC_SERVER_PORT_INT = "sip_config_ue_ipsec_server_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_PRIVATE_USER_ID_STRING = "sip_config_ue_private_user_id_string";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_GRUU_STRING = "sip_config_ue_public_gruu_string";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_IPADDRESS_WITH_NAT_STRING = "sip_config_ue_public_ipaddress_with_nat_string";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_PORT_WITH_NAT_INT = "sip_config_ue_public_port_with_nat_int";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_USER_ID_STRING = "sip_config_ue_public_user_id_string";
+    field public static final String KEY_SIP_CONFIG_URI_USER_PART_STRING = "sip_config_uri_user_part_string";
+    field public static final String KEY_SIP_CONFIG_USER_AGENT_HEADER_STRING = "sip_config_sip_user_agent_header_string";
+    field public static final String SIP_TRANSPORT_TCP = "TCP";
+    field public static final String SIP_TRANSPORT_UDP = "UDP";
+  }
+
+  public static final class SipDelegateImsConfiguration.Builder {
+    ctor public SipDelegateImsConfiguration.Builder(int);
+    ctor public SipDelegateImsConfiguration.Builder(@NonNull android.telephony.ims.SipDelegateImsConfiguration);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration.Builder addBoolean(@NonNull String, boolean);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration.Builder addInt(@NonNull String, int);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration.Builder addString(@NonNull String, @NonNull String);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration build();
+  }
+
+}
+
+package android.telephony.ims.stub {
+
+  public interface DelegateConnectionStateCallback {
+    method @Deprecated public default void onImsConfigurationChanged(@NonNull android.telephony.ims.SipDelegateImsConfiguration);
+  }
+
+}
+
+package android.view.translation {
+
+  public final class UiTranslationManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void startTranslation(@NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec, @NonNull java.util.List<android.view.autofill.AutofillId>, @NonNull android.app.assist.ActivityId);
+  }
+
+}
+
diff --git a/32/system/api/android-non-updatable.txt b/32/system/api/android-non-updatable.txt
new file mode 100644
index 0000000..3aa17f0
--- /dev/null
+++ b/32/system/api/android-non-updatable.txt
@@ -0,0 +1,14998 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String ACCESS_AMBIENT_LIGHT_STATS = "android.permission.ACCESS_AMBIENT_LIGHT_STATS";
+    field public static final String ACCESS_BROADCAST_RADIO = "android.permission.ACCESS_BROADCAST_RADIO";
+    field public static final String ACCESS_CACHE_FILESYSTEM = "android.permission.ACCESS_CACHE_FILESYSTEM";
+    field public static final String ACCESS_CONTEXT_HUB = "android.permission.ACCESS_CONTEXT_HUB";
+    field public static final String ACCESS_DRM_CERTIFICATES = "android.permission.ACCESS_DRM_CERTIFICATES";
+    field @Deprecated public static final String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO";
+    field public static final String ACCESS_INSTANT_APPS = "android.permission.ACCESS_INSTANT_APPS";
+    field public static final String ACCESS_LOCUS_ID_USAGE_STATS = "android.permission.ACCESS_LOCUS_ID_USAGE_STATS";
+    field public static final String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION";
+    field public static final String ACCESS_MTP = "android.permission.ACCESS_MTP";
+    field public static final String ACCESS_NETWORK_CONDITIONS = "android.permission.ACCESS_NETWORK_CONDITIONS";
+    field public static final String ACCESS_NOTIFICATIONS = "android.permission.ACCESS_NOTIFICATIONS";
+    field public static final String ACCESS_RCS_USER_CAPABILITY_EXCHANGE = "android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE";
+    field public static final String ACCESS_SHARED_LIBRARIES = "android.permission.ACCESS_SHARED_LIBRARIES";
+    field public static final String ACCESS_SHORTCUTS = "android.permission.ACCESS_SHORTCUTS";
+    field public static final String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER";
+    field public static final String ACCESS_TUNED_INFO = "android.permission.ACCESS_TUNED_INFO";
+    field public static final String ACCESS_TV_DESCRAMBLER = "android.permission.ACCESS_TV_DESCRAMBLER";
+    field public static final String ACCESS_TV_TUNER = "android.permission.ACCESS_TV_TUNER";
+    field public static final String ACCESS_VIBRATOR_STATE = "android.permission.ACCESS_VIBRATOR_STATE";
+    field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
+    field public static final String ADJUST_RUNTIME_PERMISSIONS_POLICY = "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY";
+    field public static final String ALLOCATE_AGGRESSIVE = "android.permission.ALLOCATE_AGGRESSIVE";
+    field public static final String ALLOW_ANY_CODEC_FOR_PLAYBACK = "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK";
+    field public static final String ALLOW_PLACE_IN_MULTI_PANE_SETTINGS = "android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS";
+    field public static final String AMBIENT_WALLPAPER = "android.permission.AMBIENT_WALLPAPER";
+    field public static final String APPROVE_INCIDENT_REPORTS = "android.permission.APPROVE_INCIDENT_REPORTS";
+    field public static final String ASSOCIATE_COMPANION_DEVICES = "android.permission.ASSOCIATE_COMPANION_DEVICES";
+    field public static final String BACKGROUND_CAMERA = "android.permission.BACKGROUND_CAMERA";
+    field public static final String BACKUP = "android.permission.BACKUP";
+    field public static final String BATTERY_PREDICTION = "android.permission.BATTERY_PREDICTION";
+    field public static final String BIND_ATTENTION_SERVICE = "android.permission.BIND_ATTENTION_SERVICE";
+    field public static final String BIND_AUGMENTED_AUTOFILL_SERVICE = "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE";
+    field public static final String BIND_CALL_DIAGNOSTIC_SERVICE = "android.permission.BIND_CALL_DIAGNOSTIC_SERVICE";
+    field public static final String BIND_CELL_BROADCAST_SERVICE = "android.permission.BIND_CELL_BROADCAST_SERVICE";
+    field @Deprecated public static final String BIND_CONNECTION_SERVICE = "android.permission.BIND_CONNECTION_SERVICE";
+    field public static final String BIND_CONTENT_CAPTURE_SERVICE = "android.permission.BIND_CONTENT_CAPTURE_SERVICE";
+    field public static final String BIND_CONTENT_SUGGESTIONS_SERVICE = "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE";
+    field public static final String BIND_DIRECTORY_SEARCH = "android.permission.BIND_DIRECTORY_SEARCH";
+    field public static final String BIND_DISPLAY_HASHING_SERVICE = "android.permission.BIND_DISPLAY_HASHING_SERVICE";
+    field public static final String BIND_DOMAIN_VERIFICATION_AGENT = "android.permission.BIND_DOMAIN_VERIFICATION_AGENT";
+    field public static final String BIND_EUICC_SERVICE = "android.permission.BIND_EUICC_SERVICE";
+    field public static final String BIND_EXTERNAL_STORAGE_SERVICE = "android.permission.BIND_EXTERNAL_STORAGE_SERVICE";
+    field public static final String BIND_GBA_SERVICE = "android.permission.BIND_GBA_SERVICE";
+    field public static final String BIND_HOTWORD_DETECTION_SERVICE = "android.permission.BIND_HOTWORD_DETECTION_SERVICE";
+    field public static final String BIND_IMS_SERVICE = "android.permission.BIND_IMS_SERVICE";
+    field public static final String BIND_KEYGUARD_APPWIDGET = "android.permission.BIND_KEYGUARD_APPWIDGET";
+    field public static final String BIND_MUSIC_RECOGNITION_SERVICE = "android.permission.BIND_MUSIC_RECOGNITION_SERVICE";
+    field public static final String BIND_NETWORK_RECOMMENDATION_SERVICE = "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE";
+    field public static final String BIND_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE";
+    field public static final String BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE = "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE";
+    field public static final String BIND_PRINT_RECOMMENDATION_SERVICE = "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE";
+    field public static final String BIND_RESOLVER_RANKER_SERVICE = "android.permission.BIND_RESOLVER_RANKER_SERVICE";
+    field public static final String BIND_RESUME_ON_REBOOT_SERVICE = "android.permission.BIND_RESUME_ON_REBOOT_SERVICE";
+    field public static final String BIND_ROTATION_RESOLVER_SERVICE = "android.permission.BIND_ROTATION_RESOLVER_SERVICE";
+    field public static final String BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE = "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE";
+    field public static final String BIND_SETTINGS_SUGGESTIONS_SERVICE = "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE";
+    field public static final String BIND_SOUND_TRIGGER_DETECTION_SERVICE = "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE";
+    field public static final String BIND_TELEPHONY_DATA_SERVICE = "android.permission.BIND_TELEPHONY_DATA_SERVICE";
+    field public static final String BIND_TELEPHONY_NETWORK_SERVICE = "android.permission.BIND_TELEPHONY_NETWORK_SERVICE";
+    field public static final String BIND_TEXTCLASSIFIER_SERVICE = "android.permission.BIND_TEXTCLASSIFIER_SERVICE";
+    field public static final String BIND_TIME_ZONE_PROVIDER_SERVICE = "android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE";
+    field public static final String BIND_TRANSLATION_SERVICE = "android.permission.BIND_TRANSLATION_SERVICE";
+    field public static final String BIND_TRUST_AGENT = "android.permission.BIND_TRUST_AGENT";
+    field public static final String BIND_TV_REMOTE_SERVICE = "android.permission.BIND_TV_REMOTE_SERVICE";
+    field public static final String BRICK = "android.permission.BRICK";
+    field public static final String BRIGHTNESS_SLIDER_USAGE = "android.permission.BRIGHTNESS_SLIDER_USAGE";
+    field public static final String BROADCAST_CLOSE_SYSTEM_DIALOGS = "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS";
+    field @Deprecated public static final String BROADCAST_NETWORK_PRIVILEGED = "android.permission.BROADCAST_NETWORK_PRIVILEGED";
+    field public static final String BYPASS_ROLE_QUALIFICATION = "android.permission.BYPASS_ROLE_QUALIFICATION";
+    field public static final String CAMERA_DISABLE_TRANSMIT_LED = "android.permission.CAMERA_DISABLE_TRANSMIT_LED";
+    field public static final String CAMERA_OPEN_CLOSE_LISTENER = "android.permission.CAMERA_OPEN_CLOSE_LISTENER";
+    field public static final String CAPTURE_AUDIO_HOTWORD = "android.permission.CAPTURE_AUDIO_HOTWORD";
+    field public static final String CAPTURE_MEDIA_OUTPUT = "android.permission.CAPTURE_MEDIA_OUTPUT";
+    field public static final String CAPTURE_TUNER_AUDIO_INPUT = "android.permission.CAPTURE_TUNER_AUDIO_INPUT";
+    field public static final String CAPTURE_TV_INPUT = "android.permission.CAPTURE_TV_INPUT";
+    field public static final String CAPTURE_VOICE_COMMUNICATION_OUTPUT = "android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT";
+    field public static final String CHANGE_APP_IDLE_STATE = "android.permission.CHANGE_APP_IDLE_STATE";
+    field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST";
+    field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA";
+    field public static final String COMPANION_APPROVE_WIFI_CONNECTIONS = "android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS";
+    field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
+    field public static final String CONFIGURE_WIFI_DISPLAY = "android.permission.CONFIGURE_WIFI_DISPLAY";
+    field @Deprecated public static final String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL";
+    field public static final String CONNECTIVITY_USE_RESTRICTED_NETWORKS = "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS";
+    field public static final String CONTROL_DEVICE_LIGHTS = "android.permission.CONTROL_DEVICE_LIGHTS";
+    field public static final String CONTROL_DISPLAY_COLOR_TRANSFORMS = "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS";
+    field public static final String CONTROL_DISPLAY_SATURATION = "android.permission.CONTROL_DISPLAY_SATURATION";
+    field public static final String CONTROL_INCALL_EXPERIENCE = "android.permission.CONTROL_INCALL_EXPERIENCE";
+    field public static final String CONTROL_KEYGUARD_SECURE_NOTIFICATIONS = "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS";
+    field public static final String CONTROL_OEM_PAID_NETWORK_PREFERENCE = "android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE";
+    field public static final String CONTROL_VPN = "android.permission.CONTROL_VPN";
+    field public static final String CREATE_USERS = "android.permission.CREATE_USERS";
+    field public static final String CRYPT_KEEPER = "android.permission.CRYPT_KEEPER";
+    field public static final String DEVICE_POWER = "android.permission.DEVICE_POWER";
+    field public static final String DISABLE_SYSTEM_SOUND_EFFECTS = "android.permission.DISABLE_SYSTEM_SOUND_EFFECTS";
+    field public static final String DISPATCH_PROVISIONING_MESSAGE = "android.permission.DISPATCH_PROVISIONING_MESSAGE";
+    field public static final String DOMAIN_VERIFICATION_AGENT = "android.permission.DOMAIN_VERIFICATION_AGENT";
+    field public static final String ENTER_CAR_MODE_PRIORITIZED = "android.permission.ENTER_CAR_MODE_PRIORITIZED";
+    field public static final String EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS = "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS";
+    field public static final String FORCE_BACK = "android.permission.FORCE_BACK";
+    field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES";
+    field public static final String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS";
+    field public static final String GET_PROCESS_STATE_AND_OOM_SCORE = "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE";
+    field public static final String GET_RUNTIME_PERMISSIONS = "android.permission.GET_RUNTIME_PERMISSIONS";
+    field public static final String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO";
+    field @Deprecated public static final String GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS = "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS";
+    field public static final String GRANT_RUNTIME_PERMISSIONS = "android.permission.GRANT_RUNTIME_PERMISSIONS";
+    field public static final String GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS = "android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS";
+    field public static final String HANDLE_CAR_MODE_CHANGES = "android.permission.HANDLE_CAR_MODE_CHANGES";
+    field public static final String HARDWARE_TEST = "android.permission.HARDWARE_TEST";
+    field public static final String HDMI_CEC = "android.permission.HDMI_CEC";
+    field @Deprecated public static final String HIDE_NON_SYSTEM_OVERLAY_WINDOWS = "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS";
+    field public static final String INJECT_EVENTS = "android.permission.INJECT_EVENTS";
+    field public static final String INSTALL_DYNAMIC_SYSTEM = "android.permission.INSTALL_DYNAMIC_SYSTEM";
+    field public static final String INSTALL_GRANT_RUNTIME_PERMISSIONS = "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS";
+    field public static final String INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE = "android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE";
+    field public static final String INSTALL_PACKAGE_UPDATES = "android.permission.INSTALL_PACKAGE_UPDATES";
+    field public static final String INSTALL_SELF_UPDATES = "android.permission.INSTALL_SELF_UPDATES";
+    field public static final String INTENT_FILTER_VERIFICATION_AGENT = "android.permission.INTENT_FILTER_VERIFICATION_AGENT";
+    field public static final String INTERACT_ACROSS_USERS = "android.permission.INTERACT_ACROSS_USERS";
+    field public static final String INTERACT_ACROSS_USERS_FULL = "android.permission.INTERACT_ACROSS_USERS_FULL";
+    field public static final String INTERNAL_SYSTEM_WINDOW = "android.permission.INTERNAL_SYSTEM_WINDOW";
+    field public static final String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP";
+    field public static final String KILL_UID = "android.permission.KILL_UID";
+    field public static final String LOCAL_MAC_ADDRESS = "android.permission.LOCAL_MAC_ADDRESS";
+    field public static final String LOCK_DEVICE = "android.permission.LOCK_DEVICE";
+    field public static final String LOOP_RADIO = "android.permission.LOOP_RADIO";
+    field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY";
+    field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+    field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
+    field public static final String MANAGE_APP_HIBERNATION = "android.permission.MANAGE_APP_HIBERNATION";
+    field public static final String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS";
+    field public static final String MANAGE_APP_PREDICTIONS = "android.permission.MANAGE_APP_PREDICTIONS";
+    field public static final String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
+    field public static final String MANAGE_AUTO_FILL = "android.permission.MANAGE_AUTO_FILL";
+    field public static final String MANAGE_CARRIER_OEM_UNLOCK_STATE = "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE";
+    field public static final String MANAGE_CA_CERTIFICATES = "android.permission.MANAGE_CA_CERTIFICATES";
+    field public static final String MANAGE_CONTENT_CAPTURE = "android.permission.MANAGE_CONTENT_CAPTURE";
+    field public static final String MANAGE_CONTENT_SUGGESTIONS = "android.permission.MANAGE_CONTENT_SUGGESTIONS";
+    field public static final String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING";
+    field public static final String MANAGE_FACTORY_RESET_PROTECTION = "android.permission.MANAGE_FACTORY_RESET_PROTECTION";
+    field public static final String MANAGE_HOTWORD_DETECTION = "android.permission.MANAGE_HOTWORD_DETECTION";
+    field public static final String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS";
+    field public static final String MANAGE_MUSIC_RECOGNITION = "android.permission.MANAGE_MUSIC_RECOGNITION";
+    field public static final String MANAGE_NOTIFICATION_LISTENERS = "android.permission.MANAGE_NOTIFICATION_LISTENERS";
+    field public static final String MANAGE_ONE_TIME_PERMISSION_SESSIONS = "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS";
+    field public static final String MANAGE_ROLE_HOLDERS = "android.permission.MANAGE_ROLE_HOLDERS";
+    field public static final String MANAGE_ROLLBACKS = "android.permission.MANAGE_ROLLBACKS";
+    field public static final String MANAGE_ROTATION_RESOLVER = "android.permission.MANAGE_ROTATION_RESOLVER";
+    field public static final String MANAGE_SEARCH_UI = "android.permission.MANAGE_SEARCH_UI";
+    field public static final String MANAGE_SENSOR_PRIVACY = "android.permission.MANAGE_SENSOR_PRIVACY";
+    field public static final String MANAGE_SMARTSPACE = "android.permission.MANAGE_SMARTSPACE";
+    field public static final String MANAGE_SOUND_TRIGGER = "android.permission.MANAGE_SOUND_TRIGGER";
+    field public static final String MANAGE_SPEECH_RECOGNITION = "android.permission.MANAGE_SPEECH_RECOGNITION";
+    field public static final String MANAGE_SUBSCRIPTION_PLANS = "android.permission.MANAGE_SUBSCRIPTION_PLANS";
+    field public static final String MANAGE_TEST_NETWORKS = "android.permission.MANAGE_TEST_NETWORKS";
+    field public static final String MANAGE_TIME_AND_ZONE_DETECTION = "android.permission.MANAGE_TIME_AND_ZONE_DETECTION";
+    field public static final String MANAGE_UI_TRANSLATION = "android.permission.MANAGE_UI_TRANSLATION";
+    field public static final String MANAGE_USB = "android.permission.MANAGE_USB";
+    field public static final String MANAGE_USERS = "android.permission.MANAGE_USERS";
+    field public static final String MANAGE_USER_OEM_UNLOCK_STATE = "android.permission.MANAGE_USER_OEM_UNLOCK_STATE";
+    field public static final String MANAGE_WIFI_COUNTRY_CODE = "android.permission.MANAGE_WIFI_COUNTRY_CODE";
+    field public static final String MODIFY_APPWIDGET_BIND_PERMISSIONS = "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS";
+    field public static final String MODIFY_AUDIO_ROUTING = "android.permission.MODIFY_AUDIO_ROUTING";
+    field public static final String MODIFY_CELL_BROADCASTS = "android.permission.MODIFY_CELL_BROADCASTS";
+    field public static final String MODIFY_DAY_NIGHT_MODE = "android.permission.MODIFY_DAY_NIGHT_MODE";
+    field @Deprecated public static final String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING";
+    field public static final String MODIFY_PARENTAL_CONTROLS = "android.permission.MODIFY_PARENTAL_CONTROLS";
+    field public static final String MODIFY_QUIET_MODE = "android.permission.MODIFY_QUIET_MODE";
+    field public static final String MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE = "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE";
+    field public static final String MOVE_PACKAGE = "android.permission.MOVE_PACKAGE";
+    field public static final String NETWORK_AIRPLANE_MODE = "android.permission.NETWORK_AIRPLANE_MODE";
+    field public static final String NETWORK_CARRIER_PROVISIONING = "android.permission.NETWORK_CARRIER_PROVISIONING";
+    field public static final String NETWORK_FACTORY = "android.permission.NETWORK_FACTORY";
+    field public static final String NETWORK_MANAGED_PROVISIONING = "android.permission.NETWORK_MANAGED_PROVISIONING";
+    field public static final String NETWORK_SCAN = "android.permission.NETWORK_SCAN";
+    field public static final String NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
+    field public static final String NETWORK_SETUP_WIZARD = "android.permission.NETWORK_SETUP_WIZARD";
+    field public static final String NETWORK_SIGNAL_STRENGTH_WAKEUP = "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP";
+    field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
+    field public static final String NETWORK_STATS_PROVIDER = "android.permission.NETWORK_STATS_PROVIDER";
+    field public static final String NFC_SET_CONTROLLER_ALWAYS_ON = "android.permission.NFC_SET_CONTROLLER_ALWAYS_ON";
+    field public static final String NOTIFICATION_DURING_SETUP = "android.permission.NOTIFICATION_DURING_SETUP";
+    field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS";
+    field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE";
+    field public static final String OBSERVE_NETWORK_POLICY = "android.permission.OBSERVE_NETWORK_POLICY";
+    field public static final String OBSERVE_ROLE_HOLDERS = "android.permission.OBSERVE_ROLE_HOLDERS";
+    field public static final String OBSERVE_SENSOR_PRIVACY = "android.permission.OBSERVE_SENSOR_PRIVACY";
+    field public static final String OPEN_ACCESSIBILITY_DETAILS_SETTINGS = "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS";
+    field public static final String OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD = "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD";
+    field public static final String OVERRIDE_WIFI_CONFIG = "android.permission.OVERRIDE_WIFI_CONFIG";
+    field public static final String PACKAGE_VERIFICATION_AGENT = "android.permission.PACKAGE_VERIFICATION_AGENT";
+    field public static final String PACKET_KEEPALIVE_OFFLOAD = "android.permission.PACKET_KEEPALIVE_OFFLOAD";
+    field public static final String PEERS_MAC_ADDRESS = "android.permission.PEERS_MAC_ADDRESS";
+    field public static final String PERFORM_CDMA_PROVISIONING = "android.permission.PERFORM_CDMA_PROVISIONING";
+    field public static final String PERFORM_IMS_SINGLE_REGISTRATION = "android.permission.PERFORM_IMS_SINGLE_REGISTRATION";
+    field public static final String PERFORM_SIM_ACTIVATION = "android.permission.PERFORM_SIM_ACTIVATION";
+    field public static final String POWER_SAVER = "android.permission.POWER_SAVER";
+    field public static final String PROVIDE_RESOLVER_RANKER_SERVICE = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE";
+    field public static final String PROVIDE_TRUST_AGENT = "android.permission.PROVIDE_TRUST_AGENT";
+    field public static final String QUERY_TIME_ZONE_RULES = "android.permission.QUERY_TIME_ZONE_RULES";
+    field public static final String RADIO_SCAN_WITHOUT_LOCATION = "android.permission.RADIO_SCAN_WITHOUT_LOCATION";
+    field public static final String READ_ACTIVE_EMERGENCY_SESSION = "android.permission.READ_ACTIVE_EMERGENCY_SESSION";
+    field public static final String READ_CARRIER_APP_INFO = "android.permission.READ_CARRIER_APP_INFO";
+    field public static final String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS";
+    field public static final String READ_CONTENT_RATING_SYSTEMS = "android.permission.READ_CONTENT_RATING_SYSTEMS";
+    field public static final String READ_DEVICE_CONFIG = "android.permission.READ_DEVICE_CONFIG";
+    field public static final String READ_DREAM_STATE = "android.permission.READ_DREAM_STATE";
+    field public static final String READ_GLOBAL_APP_SEARCH_DATA = "android.permission.READ_GLOBAL_APP_SEARCH_DATA";
+    field public static final String READ_INSTALL_SESSIONS = "android.permission.READ_INSTALL_SESSIONS";
+    field public static final String READ_NETWORK_USAGE_HISTORY = "android.permission.READ_NETWORK_USAGE_HISTORY";
+    field public static final String READ_OEM_UNLOCK_STATE = "android.permission.READ_OEM_UNLOCK_STATE";
+    field public static final String READ_PEOPLE_DATA = "android.permission.READ_PEOPLE_DATA";
+    field public static final String READ_PRINT_SERVICES = "android.permission.READ_PRINT_SERVICES";
+    field public static final String READ_PRINT_SERVICE_RECOMMENDATIONS = "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS";
+    field public static final String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
+    field public static final String READ_PROJECTION_STATE = "android.permission.READ_PROJECTION_STATE";
+    field public static final String READ_RUNTIME_PROFILES = "android.permission.READ_RUNTIME_PROFILES";
+    field public static final String READ_SEARCH_INDEXABLES = "android.permission.READ_SEARCH_INDEXABLES";
+    field public static final String READ_SYSTEM_UPDATE_INFO = "android.permission.READ_SYSTEM_UPDATE_INFO";
+    field public static final String READ_WALLPAPER_INTERNAL = "android.permission.READ_WALLPAPER_INTERNAL";
+    field public static final String READ_WIFI_CREDENTIAL = "android.permission.READ_WIFI_CREDENTIAL";
+    field public static final String REAL_GET_TASKS = "android.permission.REAL_GET_TASKS";
+    field public static final String RECEIVE_DATA_ACTIVITY_CHANGE = "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE";
+    field public static final String RECEIVE_DEVICE_CUSTOMIZATION_READY = "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY";
+    field public static final String RECEIVE_EMERGENCY_BROADCAST = "android.permission.RECEIVE_EMERGENCY_BROADCAST";
+    field public static final String RECEIVE_WIFI_CREDENTIAL_CHANGE = "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE";
+    field public static final String RECORD_BACKGROUND_AUDIO = "android.permission.RECORD_BACKGROUND_AUDIO";
+    field public static final String RECOVERY = "android.permission.RECOVERY";
+    field public static final String RECOVER_KEYSTORE = "android.permission.RECOVER_KEYSTORE";
+    field public static final String REGISTER_CALL_PROVIDER = "android.permission.REGISTER_CALL_PROVIDER";
+    field public static final String REGISTER_CONNECTION_MANAGER = "android.permission.REGISTER_CONNECTION_MANAGER";
+    field public static final String REGISTER_SIM_SUBSCRIPTION = "android.permission.REGISTER_SIM_SUBSCRIPTION";
+    field public static final String REGISTER_STATS_PULL_ATOM = "android.permission.REGISTER_STATS_PULL_ATOM";
+    field public static final String REMOTE_DISPLAY_PROVIDER = "android.permission.REMOTE_DISPLAY_PROVIDER";
+    field public static final String REMOVE_DRM_CERTIFICATES = "android.permission.REMOVE_DRM_CERTIFICATES";
+    field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
+    field public static final String RENOUNCE_PERMISSIONS = "android.permission.RENOUNCE_PERMISSIONS";
+    field public static final String REQUEST_NETWORK_SCORES = "android.permission.REQUEST_NETWORK_SCORES";
+    field public static final String REQUEST_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE";
+    field public static final String RESET_PASSWORD = "android.permission.RESET_PASSWORD";
+    field public static final String RESTART_WIFI_SUBSYSTEM = "android.permission.RESTART_WIFI_SUBSYSTEM";
+    field public static final String RESTORE_RUNTIME_PERMISSIONS = "android.permission.RESTORE_RUNTIME_PERMISSIONS";
+    field public static final String RESTRICTED_VR_ACCESS = "android.permission.RESTRICTED_VR_ACCESS";
+    field public static final String RETRIEVE_WINDOW_CONTENT = "android.permission.RETRIEVE_WINDOW_CONTENT";
+    field public static final String REVIEW_ACCESSIBILITY_SERVICES = "android.permission.REVIEW_ACCESSIBILITY_SERVICES";
+    field public static final String REVOKE_RUNTIME_PERMISSIONS = "android.permission.REVOKE_RUNTIME_PERMISSIONS";
+    field public static final String ROTATE_SURFACE_FLINGER = "android.permission.ROTATE_SURFACE_FLINGER";
+    field public static final String SCHEDULE_PRIORITIZED_ALARM = "android.permission.SCHEDULE_PRIORITIZED_ALARM";
+    field public static final String SCORE_NETWORKS = "android.permission.SCORE_NETWORKS";
+    field public static final String SECURE_ELEMENT_PRIVILEGED_OPERATION = "android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION";
+    field public static final String SEND_CATEGORY_CAR_NOTIFICATIONS = "android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS";
+    field public static final String SEND_DEVICE_CUSTOMIZATION_READY = "android.permission.SEND_DEVICE_CUSTOMIZATION_READY";
+    field public static final String SEND_SHOW_SUSPENDED_APP_DETAILS = "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS";
+    field public static final String SEND_SMS_NO_CONFIRMATION = "android.permission.SEND_SMS_NO_CONFIRMATION";
+    field public static final String SERIAL_PORT = "android.permission.SERIAL_PORT";
+    field public static final String SET_ACTIVITY_WATCHER = "android.permission.SET_ACTIVITY_WATCHER";
+    field public static final String SET_CLIP_SOURCE = "android.permission.SET_CLIP_SOURCE";
+    field public static final String SET_HARMFUL_APP_WARNINGS = "android.permission.SET_HARMFUL_APP_WARNINGS";
+    field public static final String SET_MEDIA_KEY_LISTENER = "android.permission.SET_MEDIA_KEY_LISTENER";
+    field public static final String SET_ORIENTATION = "android.permission.SET_ORIENTATION";
+    field public static final String SET_POINTER_SPEED = "android.permission.SET_POINTER_SPEED";
+    field public static final String SET_SCREEN_COMPATIBILITY = "android.permission.SET_SCREEN_COMPATIBILITY";
+    field public static final String SET_VOLUME_KEY_LONG_PRESS_LISTENER = "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER";
+    field public static final String SET_WALLPAPER_COMPONENT = "android.permission.SET_WALLPAPER_COMPONENT";
+    field public static final String SHOW_KEYGUARD_MESSAGE = "android.permission.SHOW_KEYGUARD_MESSAGE";
+    field public static final String SHUTDOWN = "android.permission.SHUTDOWN";
+    field public static final String SIGNAL_REBOOT_READINESS = "android.permission.SIGNAL_REBOOT_READINESS";
+    field public static final String SOUND_TRIGGER_RUN_IN_BATTERY_SAVER = "android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER";
+    field public static final String START_ACTIVITIES_FROM_BACKGROUND = "android.permission.START_ACTIVITIES_FROM_BACKGROUND";
+    field public static final String STATUS_BAR_SERVICE = "android.permission.STATUS_BAR_SERVICE";
+    field public static final String STOP_APP_SWITCHES = "android.permission.STOP_APP_SWITCHES";
+    field public static final String SUBSTITUTE_NOTIFICATION_APP_NAME = "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME";
+    field public static final String SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON = "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON";
+    field public static final String SUGGEST_EXTERNAL_TIME = "android.permission.SUGGEST_EXTERNAL_TIME";
+    field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
+    field public static final String SYSTEM_APPLICATION_OVERLAY = "android.permission.SYSTEM_APPLICATION_OVERLAY";
+    field public static final String SYSTEM_CAMERA = "android.permission.SYSTEM_CAMERA";
+    field public static final String TETHER_PRIVILEGED = "android.permission.TETHER_PRIVILEGED";
+    field public static final String TOGGLE_AUTOMOTIVE_PROJECTION = "android.permission.TOGGLE_AUTOMOTIVE_PROJECTION";
+    field public static final String TV_INPUT_HARDWARE = "android.permission.TV_INPUT_HARDWARE";
+    field public static final String TV_VIRTUAL_REMOTE_CONTROLLER = "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER";
+    field public static final String UNLIMITED_SHORTCUTS_API_CALLS = "android.permission.UNLIMITED_SHORTCUTS_API_CALLS";
+    field public static final String UPDATE_APP_OPS_STATS = "android.permission.UPDATE_APP_OPS_STATS";
+    field public static final String UPDATE_DOMAIN_VERIFICATION_USER_SELECTION = "android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION";
+    field public static final String UPDATE_FONTS = "android.permission.UPDATE_FONTS";
+    field public static final String UPDATE_LOCK = "android.permission.UPDATE_LOCK";
+    field public static final String UPDATE_TIME_ZONE_RULES = "android.permission.UPDATE_TIME_ZONE_RULES";
+    field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS";
+    field public static final String USER_ACTIVITY = "android.permission.USER_ACTIVITY";
+    field public static final String USE_RESERVED_DISK = "android.permission.USE_RESERVED_DISK";
+    field public static final String UWB_PRIVILEGED = "android.permission.UWB_PRIVILEGED";
+    field public static final String WHITELIST_AUTO_REVOKE_PERMISSIONS = "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS";
+    field public static final String WHITELIST_RESTRICTED_PERMISSIONS = "android.permission.WHITELIST_RESTRICTED_PERMISSIONS";
+    field public static final String WIFI_ACCESS_COEX_UNSAFE_CHANNELS = "android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS";
+    field public static final String WIFI_SET_DEVICE_MOBILITY_STATE = "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE";
+    field public static final String WIFI_UPDATE_COEX_UNSAFE_CHANNELS = "android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS";
+    field public static final String WIFI_UPDATE_USABILITY_STATS_SCORE = "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE";
+    field public static final String WRITE_DEVICE_CONFIG = "android.permission.WRITE_DEVICE_CONFIG";
+    field public static final String WRITE_DREAM_STATE = "android.permission.WRITE_DREAM_STATE";
+    field public static final String WRITE_EMBEDDED_SUBSCRIPTIONS = "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS";
+    field @Deprecated public static final String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE";
+    field public static final String WRITE_OBB = "android.permission.WRITE_OBB";
+  }
+
+  public static final class Manifest.permission_group {
+    field public static final String UNDEFINED = "android.permission-group.UNDEFINED";
+  }
+
+  public static final class R.array {
+    field public static final int config_keySystemUuidMapping = 17235973; // 0x1070005
+  }
+
+  public static final class R.attr {
+    field public static final int allowClearUserDataOnFailedRestore = 16844288; // 0x1010600
+    field public static final int hotwordDetectionService = 16844326; // 0x1010626
+    field public static final int isVrOnly = 16844152; // 0x1010578
+    field public static final int minExtensionVersion = 16844305; // 0x1010611
+    field public static final int playHomeTransitionSound = 16844358; // 0x1010646
+    field public static final int requiredSystemPropertyName = 16844133; // 0x1010565
+    field public static final int requiredSystemPropertyValue = 16844134; // 0x1010566
+    field public static final int sdkVersion = 16844304; // 0x1010610
+    field public static final int supportsAmbientMode = 16844173; // 0x101058d
+    field public static final int userRestriction = 16844164; // 0x1010584
+  }
+
+  public static final class R.bool {
+    field public static final int config_sendPackageName = 17891328; // 0x1110000
+    field public static final int config_showDefaultAssistant = 17891329; // 0x1110001
+    field public static final int config_showDefaultEmergency = 17891330; // 0x1110002
+    field public static final int config_showDefaultHome = 17891331; // 0x1110003
+  }
+
+  public static final class R.color {
+    field public static final int system_notification_accent_color = 17170460; // 0x106001c
+  }
+
+  public static final class R.dimen {
+    field public static final int config_restrictedIconSize = 17104903; // 0x1050007
+  }
+
+  public static final class R.drawable {
+    field public static final int ic_info = 17301684; // 0x10800b4
+  }
+
+  public static final class R.raw {
+    field public static final int loaderror = 17825792; // 0x1100000
+    field public static final int nodomain = 17825793; // 0x1100001
+  }
+
+  public static final class R.string {
+    field public static final int config_customMediaKeyDispatcher = 17039404; // 0x104002c
+    field public static final int config_customMediaSessionPolicyProvider = 17039405; // 0x104002d
+    field public static final int config_defaultAssistant = 17039393; // 0x1040021
+    field public static final int config_defaultBrowser = 17039394; // 0x1040022
+    field public static final int config_defaultCallRedirection = 17039397; // 0x1040025
+    field public static final int config_defaultCallScreening = 17039398; // 0x1040026
+    field public static final int config_defaultDialer = 17039395; // 0x1040023
+    field public static final int config_defaultSms = 17039396; // 0x1040024
+    field public static final int config_feedbackIntentExtraKey = 17039391; // 0x104001f
+    field public static final int config_feedbackIntentNameKey = 17039392; // 0x1040020
+    field public static final int config_helpIntentExtraKey = 17039389; // 0x104001d
+    field public static final int config_helpIntentNameKey = 17039390; // 0x104001e
+    field public static final int config_helpPackageNameKey = 17039387; // 0x104001b
+    field public static final int config_helpPackageNameValue = 17039388; // 0x104001c
+    field public static final int config_systemActivityRecognizer = 17039416; // 0x1040038
+    field public static final int config_systemAmbientAudioIntelligence = 17039411; // 0x1040033
+    field public static final int config_systemAudioIntelligence = 17039412; // 0x1040034
+    field public static final int config_systemAutomotiveCluster = 17039400; // 0x1040028
+    field public static final int config_systemAutomotiveProjection = 17039401; // 0x1040029
+    field public static final int config_systemCompanionDeviceProvider = 17039417; // 0x1040039
+    field public static final int config_systemContacts = 17039403; // 0x104002b
+    field public static final int config_systemGallery = 17039399; // 0x1040027
+    field public static final int config_systemNotificationIntelligence = 17039413; // 0x1040035
+    field public static final int config_systemShell = 17039402; // 0x104002a
+    field public static final int config_systemSpeechRecognizer = 17039406; // 0x104002e
+    field public static final int config_systemTelevisionNotificationHandler = 17039409; // 0x1040031
+    field public static final int config_systemTextIntelligence = 17039414; // 0x1040036
+    field public static final int config_systemUi = 17039418; // 0x104003a
+    field public static final int config_systemUiIntelligence = 17039410; // 0x1040032
+    field public static final int config_systemVisualIntelligence = 17039415; // 0x1040037
+    field public static final int config_systemWellbeing = 17039408; // 0x1040030
+    field public static final int config_systemWifiCoexManager = 17039407; // 0x104002f
+  }
+
+  public static final class R.style {
+    field public static final int Theme_DeviceDefault_DocumentsUI = 16974562; // 0x10302e2
+    field public static final int Theme_Leanback_FormWizard = 16974544; // 0x10302d0
+  }
+
+}
+
+package android.accounts {
+
+  public class AccountManager {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.accounts.AccountManagerFuture<android.os.Bundle> finishSessionAsUser(android.os.Bundle, android.app.Activity, android.os.UserHandle, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+  }
+
+}
+
+package android.app {
+
+  @UiContext public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    method public void convertFromTranslucent();
+    method public boolean convertToTranslucent(android.app.Activity.TranslucentConversionListener, android.app.ActivityOptions);
+    method @Deprecated public boolean isBackgroundVisibleBehind();
+    method @Deprecated public void onBackgroundVisibleBehindChanged(boolean);
+  }
+
+  public static interface Activity.TranslucentConversionListener {
+    method public void onTranslucentConversionComplete(boolean);
+  }
+
+  public class ActivityManager {
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
+    method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void forceStopPackage(String);
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public static int getCurrentUser();
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getPackageImportance(String);
+    method @NonNull public java.util.Collection<java.util.Locale> getSupportedLocales();
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidImportance(int);
+    method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void killProcessesWhenImperceptible(@NonNull int[], @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.KILL_UID) public void killUid(int, String);
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
+    method public void setDeviceLocales(@NonNull android.os.LocaleList);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public static void setPersistentVrThread(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public boolean startProfile(@NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public boolean stopProfile(@NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean switchUser(@NonNull android.os.UserHandle);
+  }
+
+  public static interface ActivityManager.OnUidImportanceListener {
+    method public void onUidImportance(int, int);
+  }
+
+  public class ActivityOptions {
+    method public int getLaunchTaskId();
+    method @RequiresPermission("android.permission.START_TASKS_FROM_RECENTS") public void setLaunchTaskId(int);
+  }
+
+  public class AlarmManager {
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void set(int, long, long, long, android.app.PendingIntent, android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void set(int, long, long, long, android.app.AlarmManager.OnAlarmListener, android.os.Handler, android.os.WorkSource);
+    method @RequiresPermission(allOf={android.Manifest.permission.UPDATE_DEVICE_STATS, android.Manifest.permission.SCHEDULE_EXACT_ALARM}, conditional=true) public void setExact(int, long, @Nullable String, @NonNull java.util.concurrent.Executor, @NonNull android.os.WorkSource, @NonNull android.app.AlarmManager.OnAlarmListener);
+    method @RequiresPermission(android.Manifest.permission.SCHEDULE_PRIORITIZED_ALARM) public void setPrioritized(int, long, long, @Nullable String, @NonNull java.util.concurrent.Executor, @NonNull android.app.AlarmManager.OnAlarmListener);
+  }
+
+  public class AppOpsManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public android.app.RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage();
+    method @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public void getHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
+    method public static String[] getOpStrs();
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getOpsForPackage(int, @NonNull String, @Nullable java.lang.String...);
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getPackagesForOps(@Nullable String[]);
+    method public static int opToDefaultMode(@NonNull String);
+    method @Nullable public static String opToPermission(@NonNull String);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(@NonNull String, int, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(@NonNull String, int, int);
+    field public static final int HISTORY_FLAGS_ALL = 3; // 0x3
+    field public static final int HISTORY_FLAG_AGGREGATE = 1; // 0x1
+    field public static final int HISTORY_FLAG_DISCRETE = 2; // 0x2
+    field public static final String OPSTR_ACCEPT_HANDOVER = "android:accept_handover";
+    field public static final String OPSTR_ACCESS_ACCESSIBILITY = "android:access_accessibility";
+    field public static final String OPSTR_ACCESS_NOTIFICATIONS = "android:access_notifications";
+    field public static final String OPSTR_ACTIVATE_PLATFORM_VPN = "android:activate_platform_vpn";
+    field public static final String OPSTR_ACTIVATE_VPN = "android:activate_vpn";
+    field public static final String OPSTR_ASSIST_SCREENSHOT = "android:assist_screenshot";
+    field public static final String OPSTR_ASSIST_STRUCTURE = "android:assist_structure";
+    field public static final String OPSTR_AUDIO_ACCESSIBILITY_VOLUME = "android:audio_accessibility_volume";
+    field public static final String OPSTR_AUDIO_ALARM_VOLUME = "android:audio_alarm_volume";
+    field public static final String OPSTR_AUDIO_BLUETOOTH_VOLUME = "android:audio_bluetooth_volume";
+    field public static final String OPSTR_AUDIO_MASTER_VOLUME = "android:audio_master_volume";
+    field public static final String OPSTR_AUDIO_MEDIA_VOLUME = "android:audio_media_volume";
+    field public static final String OPSTR_AUDIO_NOTIFICATION_VOLUME = "android:audio_notification_volume";
+    field public static final String OPSTR_AUDIO_RING_VOLUME = "android:audio_ring_volume";
+    field public static final String OPSTR_AUDIO_VOICE_VOLUME = "android:audio_voice_volume";
+    field public static final String OPSTR_AUTO_REVOKE_MANAGED_BY_INSTALLER = "android:auto_revoke_managed_by_installer";
+    field public static final String OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED = "android:auto_revoke_permissions_if_unused";
+    field public static final String OPSTR_BIND_ACCESSIBILITY_SERVICE = "android:bind_accessibility_service";
+    field public static final String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
+    field public static final String OPSTR_GET_ACCOUNTS = "android:get_accounts";
+    field public static final String OPSTR_GPS = "android:gps";
+    field public static final String OPSTR_INSTANT_APP_START_FOREGROUND = "android:instant_app_start_foreground";
+    field public static final String OPSTR_INTERACT_ACROSS_PROFILES = "android:interact_across_profiles";
+    field public static final String OPSTR_LEGACY_STORAGE = "android:legacy_storage";
+    field public static final String OPSTR_LOADER_USAGE_STATS = "android:loader_usage_stats";
+    field public static final String OPSTR_MANAGE_EXTERNAL_STORAGE = "android:manage_external_storage";
+    field public static final String OPSTR_MANAGE_IPSEC_TUNNELS = "android:manage_ipsec_tunnels";
+    field public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls";
+    field public static final String OPSTR_MUTE_MICROPHONE = "android:mute_microphone";
+    field public static final String OPSTR_NEIGHBORING_CELLS = "android:neighboring_cells";
+    field public static final String OPSTR_PHONE_CALL_CAMERA = "android:phone_call_camera";
+    field public static final String OPSTR_PHONE_CALL_MICROPHONE = "android:phone_call_microphone";
+    field public static final String OPSTR_PLAY_AUDIO = "android:play_audio";
+    field public static final String OPSTR_POST_NOTIFICATION = "android:post_notification";
+    field public static final String OPSTR_PROJECT_MEDIA = "android:project_media";
+    field public static final String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
+    field public static final String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
+    field public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio";
+    field public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images";
+    field public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video";
+    field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
+    field public static final String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
+    field public static final String OPSTR_REQUEST_INSTALL_PACKAGES = "android:request_install_packages";
+    field public static final String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
+    field public static final String OPSTR_RUN_IN_BACKGROUND = "android:run_in_background";
+    field public static final String OPSTR_START_FOREGROUND = "android:start_foreground";
+    field public static final String OPSTR_TAKE_AUDIO_FOCUS = "android:take_audio_focus";
+    field public static final String OPSTR_TAKE_MEDIA_BUTTONS = "android:take_media_buttons";
+    field public static final String OPSTR_TOAST_WINDOW = "android:toast_window";
+    field public static final String OPSTR_TURN_SCREEN_ON = "android:turn_screen_on";
+    field public static final String OPSTR_VIBRATE = "android:vibrate";
+    field public static final String OPSTR_WAKE_LOCK = "android:wake_lock";
+    field public static final String OPSTR_WIFI_SCAN = "android:wifi_scan";
+    field public static final String OPSTR_WRITE_CLIPBOARD = "android:write_clipboard";
+    field public static final String OPSTR_WRITE_ICC_SMS = "android:write_icc_sms";
+    field public static final String OPSTR_WRITE_MEDIA_AUDIO = "android:write_media_audio";
+    field public static final String OPSTR_WRITE_MEDIA_IMAGES = "android:write_media_images";
+    field public static final String OPSTR_WRITE_MEDIA_VIDEO = "android:write_media_video";
+    field public static final String OPSTR_WRITE_SMS = "android:write_sms";
+    field public static final String OPSTR_WRITE_WALLPAPER = "android:write_wallpaper";
+    field public static final int OP_FLAGS_ALL = 31; // 0x1f
+    field public static final int OP_FLAGS_ALL_TRUSTED = 13; // 0xd
+    field public static final int OP_FLAG_SELF = 1; // 0x1
+    field public static final int OP_FLAG_TRUSTED_PROXIED = 8; // 0x8
+    field public static final int OP_FLAG_TRUSTED_PROXY = 2; // 0x2
+    field public static final int OP_FLAG_UNTRUSTED_PROXIED = 16; // 0x10
+    field public static final int OP_FLAG_UNTRUSTED_PROXY = 4; // 0x4
+    field public static final int UID_STATE_BACKGROUND = 600; // 0x258
+    field public static final int UID_STATE_CACHED = 700; // 0x2bc
+    field public static final int UID_STATE_FOREGROUND = 500; // 0x1f4
+    field public static final int UID_STATE_FOREGROUND_SERVICE = 400; // 0x190
+    field @Deprecated public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 300; // 0x12c
+    field public static final int UID_STATE_PERSISTENT = 100; // 0x64
+    field public static final int UID_STATE_TOP = 200; // 0xc8
+  }
+
+  public static final class AppOpsManager.AttributedHistoricalOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.AppOpsManager.HistoricalOp getOp(@NonNull String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOp getOpAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getOpCount();
+    method @Nullable public String getTag();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.AttributedHistoricalOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.AttributedOpEntry implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getLastAccessBackgroundTime(int);
+    method public long getLastAccessForegroundTime(int);
+    method public long getLastAccessTime(int);
+    method public long getLastAccessTime(int, int, int);
+    method public long getLastBackgroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastBackgroundProxyInfo(int);
+    method public long getLastDuration(int);
+    method public long getLastDuration(int, int, int);
+    method public long getLastForegroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastForegroundProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int, int, int);
+    method public long getLastRejectBackgroundTime(int);
+    method public long getLastRejectForegroundTime(int);
+    method public long getLastRejectTime(int);
+    method public long getLastRejectTime(int, int, int);
+    method public boolean isRunning();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.AttributedOpEntry> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalOp implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAccessCount(int, int, int);
+    method public long getAccessDuration(int, int, int);
+    method public long getBackgroundAccessCount(int);
+    method public long getBackgroundAccessDuration(int);
+    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getBackgroundDiscreteAccesses(int);
+    method public long getBackgroundRejectCount(int);
+    method @NonNull public android.app.AppOpsManager.AttributedOpEntry getDiscreteAccessAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getDiscreteAccessCount();
+    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getDiscreteAccesses(int, int, int);
+    method public long getForegroundAccessCount(int);
+    method public long getForegroundAccessDuration(int);
+    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getForegroundDiscreteAccesses(int);
+    method public long getForegroundRejectCount(int);
+    method @NonNull public String getOpName();
+    method public long getRejectCount(int, int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOp> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getBeginTimeMillis();
+    method public long getEndTimeMillis();
+    method @IntRange(from=0) public int getUidCount();
+    method @Nullable public android.app.AppOpsManager.HistoricalUidOps getUidOps(int);
+    method @NonNull public android.app.AppOpsManager.HistoricalUidOps getUidOpsAt(@IntRange(from=0) int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalOpsRequest {
+  }
+
+  public static final class AppOpsManager.HistoricalOpsRequest.Builder {
+    ctor public AppOpsManager.HistoricalOpsRequest.Builder(long, long);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest build();
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setAttributionTag(@Nullable String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setFlags(int);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setHistoryFlags(int);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setOpNames(@Nullable java.util.List<java.lang.String>);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setPackageName(@Nullable String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setUid(int);
+  }
+
+  public static final class AppOpsManager.HistoricalPackageOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.AppOpsManager.AttributedHistoricalOps getAttributedOps(@Nullable String);
+    method @NonNull public android.app.AppOpsManager.AttributedHistoricalOps getAttributedOpsAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getAttributedOpsCount();
+    method @Nullable public android.app.AppOpsManager.HistoricalOp getOp(@NonNull String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOp getOpAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getOpCount();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalPackageOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalUidOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public int getPackageCount();
+    method @Nullable public android.app.AppOpsManager.HistoricalPackageOps getPackageOps(@NonNull String);
+    method @NonNull public android.app.AppOpsManager.HistoricalPackageOps getPackageOpsAt(@IntRange(from=0) int);
+    method public int getUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalUidOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.OpEntry implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,android.app.AppOpsManager.AttributedOpEntry> getAttributedOpEntries();
+    method @Deprecated public long getDuration();
+    method public long getLastAccessBackgroundTime(int);
+    method public long getLastAccessForegroundTime(int);
+    method public long getLastAccessTime(int);
+    method public long getLastAccessTime(int, int, int);
+    method public long getLastBackgroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastBackgroundProxyInfo(int);
+    method public long getLastDuration(int);
+    method public long getLastDuration(int, int, int);
+    method public long getLastForegroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastForegroundProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int, int, int);
+    method public long getLastRejectBackgroundTime(int);
+    method public long getLastRejectForegroundTime(int);
+    method public long getLastRejectTime(int);
+    method public long getLastRejectTime(int, int, int);
+    method public int getMode();
+    method @NonNull public String getOpStr();
+    method @Deprecated @Nullable public String getProxyPackageName();
+    method @Deprecated @Nullable public String getProxyPackageName(int, int);
+    method @Deprecated public int getProxyUid();
+    method @Deprecated public int getProxyUid(int, int);
+    method public boolean isRunning();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEntry> CREATOR;
+  }
+
+  public static final class AppOpsManager.OpEventProxyInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @Nullable public String getPackageName();
+    method @IntRange(from=0) public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEventProxyInfo> CREATOR;
+  }
+
+  public static final class AppOpsManager.PackageOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.app.AppOpsManager.OpEntry> getOps();
+    method @NonNull public String getPackageName();
+    method public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.PackageOps> CREATOR;
+  }
+
+  public class BroadcastOptions {
+    method public static android.app.BroadcastOptions makeBasic();
+    method @RequiresPermission(android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND) public void setBackgroundActivityStartsAllowed(boolean);
+    method public void setDontSendToRestrictedApps(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST, android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND, android.Manifest.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND}) public void setTemporaryAppAllowlist(long, int, int, @Nullable String);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST, android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND, android.Manifest.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND}) public void setTemporaryAppWhitelistDuration(long);
+    method public android.os.Bundle toBundle();
+  }
+
+  public class DownloadManager {
+    method @RequiresPermission(android.Manifest.permission.WRITE_MEDIA_STORAGE) public void onMediaStoreDownloadsDeleted(@NonNull android.util.LongSparseArray<java.lang.String>);
+    field public static final String ACTION_DOWNLOAD_COMPLETED = "android.intent.action.DOWNLOAD_COMPLETED";
+  }
+
+  public abstract class InstantAppResolverService extends android.app.Service {
+    ctor public InstantAppResolverService();
+    method public final void attachBaseContext(android.content.Context);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public void onGetInstantAppIntentFilter(@Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppIntentFilter(@NonNull android.content.Intent, @Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppIntentFilter(@NonNull android.content.Intent, @Nullable int[], @NonNull android.os.UserHandle, @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @MainThread public void onGetInstantAppIntentFilter(@NonNull android.content.pm.InstantAppRequestInfo, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppResolveInfo(@Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppResolveInfo(@NonNull android.content.Intent, @Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppResolveInfo(@NonNull android.content.Intent, @Nullable int[], @NonNull android.os.UserHandle, @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @MainThread public void onGetInstantAppResolveInfo(@NonNull android.content.pm.InstantAppRequestInfo, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+  }
+
+  public static final class InstantAppResolverService.InstantAppResolutionCallback {
+    method public void onInstantAppResolveInfo(java.util.List<android.content.pm.InstantAppResolveInfo>);
+  }
+
+  public class KeyguardManager {
+    method public android.content.Intent createConfirmFactoryResetCredentialIntent(CharSequence, CharSequence, CharSequence);
+    method @RequiresPermission("android.permission.SET_INITIAL_LOCK") public int getMinLockLength(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS) public boolean getPrivateNotificationsAllowed();
+    method @RequiresPermission("android.permission.SET_INITIAL_LOCK") public boolean isValidLockPasswordComplexity(int, @NonNull byte[], int);
+    method @RequiresPermission(android.Manifest.permission.SHOW_KEYGUARD_MESSAGE) public void requestDismissKeyguard(@NonNull android.app.Activity, @Nullable CharSequence, @Nullable android.app.KeyguardManager.KeyguardDismissCallback);
+    method @RequiresPermission("android.permission.SET_INITIAL_LOCK") public boolean setLock(int, @NonNull byte[], int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS) public void setPrivateNotificationsAllowed(boolean);
+    field public static final int PASSWORD = 0; // 0x0
+    field public static final int PATTERN = 2; // 0x2
+    field public static final int PIN = 1; // 0x1
+  }
+
+  public class Notification implements android.os.Parcelable {
+    field public static final String CATEGORY_CAR_EMERGENCY = "car_emergency";
+    field public static final String CATEGORY_CAR_INFORMATION = "car_information";
+    field public static final String CATEGORY_CAR_WARNING = "car_warning";
+    field @RequiresPermission(android.Manifest.permission.NOTIFICATION_DURING_SETUP) public static final String EXTRA_ALLOW_DURING_SETUP = "android.allowDuringSetup";
+    field @RequiresPermission(android.Manifest.permission.SUBSTITUTE_NOTIFICATION_APP_NAME) public static final String EXTRA_SUBSTITUTE_APP_NAME = "android.substName";
+    field public static final int FLAG_AUTOGROUP_SUMMARY = 1024; // 0x400
+  }
+
+  public static class Notification.Action implements android.os.Parcelable {
+    field public static final int SEMANTIC_ACTION_CONVERSATION_IS_PHISHING = 12; // 0xc
+    field public static final int SEMANTIC_ACTION_MARK_CONVERSATION_AS_PRIORITY = 11; // 0xb
+  }
+
+  public static final class Notification.TvExtender implements android.app.Notification.Extender {
+    ctor public Notification.TvExtender();
+    ctor public Notification.TvExtender(android.app.Notification);
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+    method public String getChannelId();
+    method public android.app.PendingIntent getContentIntent();
+    method public android.app.PendingIntent getDeleteIntent();
+    method public boolean getSuppressShowOverApps();
+    method public boolean isAvailableOnTv();
+    method public android.app.Notification.TvExtender setChannel(String);
+    method public android.app.Notification.TvExtender setChannelId(String);
+    method public android.app.Notification.TvExtender setContentIntent(android.app.PendingIntent);
+    method public android.app.Notification.TvExtender setDeleteIntent(android.app.PendingIntent);
+    method public android.app.Notification.TvExtender setSuppressShowOverApps(boolean);
+  }
+
+  public final class NotificationChannel implements android.os.Parcelable {
+    method public int getUserLockedFields();
+    method public boolean isDeleted();
+    method public void populateFromXml(org.xmlpull.v1.XmlPullParser);
+    method public void setBlockable(boolean);
+    method public org.json.JSONObject toJson() throws org.json.JSONException;
+    method public void writeXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException;
+    field public static final int USER_LOCKED_SOUND = 32; // 0x20
+  }
+
+  public final class NotificationChannelGroup implements android.os.Parcelable {
+    method public org.json.JSONObject toJson() throws org.json.JSONException;
+  }
+
+  public class NotificationManager {
+    method @NonNull public java.util.List<java.lang.String> getAllowedAssistantAdjustments();
+    method @Nullable public android.content.ComponentName getAllowedNotificationAssistant();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public java.util.List<android.content.ComponentName> getEnabledNotificationListeners();
+    method public boolean isNotificationAssistantAccessGranted(@NonNull android.content.ComponentName);
+    method public void setNotificationAssistantAccessGranted(@Nullable android.content.ComponentName, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public void setNotificationListenerAccessGranted(@NonNull android.content.ComponentName, boolean, boolean);
+    field @RequiresPermission(android.Manifest.permission.STATUS_BAR_SERVICE) public static final String ACTION_CLOSE_NOTIFICATION_HANDLER_PANEL = "android.app.action.CLOSE_NOTIFICATION_HANDLER_PANEL";
+    field @RequiresPermission(android.Manifest.permission.STATUS_BAR_SERVICE) public static final String ACTION_OPEN_NOTIFICATION_HANDLER_PANEL = "android.app.action.OPEN_NOTIFICATION_HANDLER_PANEL";
+    field @RequiresPermission(android.Manifest.permission.STATUS_BAR_SERVICE) public static final String ACTION_TOGGLE_NOTIFICATION_HANDLER_PANEL = "android.app.action.TOGGLE_NOTIFICATION_HANDLER_PANEL";
+  }
+
+  public final class RuntimeAppOpAccessMessage implements android.os.Parcelable {
+    ctor public RuntimeAppOpAccessMessage(@IntRange(from=0L) int, @IntRange(from=0L) int, @NonNull String, @Nullable String, @NonNull String, int);
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @NonNull public String getMessage();
+    method @NonNull public String getOp();
+    method @NonNull public String getPackageName();
+    method public int getSamplingStrategy();
+    method @IntRange(from=0L) public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RuntimeAppOpAccessMessage> CREATOR;
+  }
+
+  public class SearchManager implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    method public void launchAssist(@Nullable android.os.Bundle);
+  }
+
+  public class StatusBarManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.STATUS_BAR) public android.app.StatusBarManager.DisableInfo getDisableInfo();
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setDisabledForSetup(boolean);
+  }
+
+  public static final class StatusBarManager.DisableInfo {
+    method public boolean areAllComponentsEnabled();
+    method public boolean isNavigateToHomeDisabled();
+    method public boolean isNotificationPeekingDisabled();
+    method public boolean isRecentsDisabled();
+    method public boolean isSearchDisabled();
+    method public boolean isStatusBarExpansionDisabled();
+  }
+
+  public final class SystemServiceRegistry {
+    method public static <TServiceClass> void registerContextAwareService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.ContextAwareServiceProducerWithBinder<TServiceClass>);
+    method public static <TServiceClass> void registerContextAwareService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.ContextAwareServiceProducerWithoutBinder<TServiceClass>);
+    method public static <TServiceClass> void registerStaticService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.StaticServiceProducerWithBinder<TServiceClass>);
+    method public static <TServiceClass> void registerStaticService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.StaticServiceProducerWithoutBinder<TServiceClass>);
+  }
+
+  public static interface SystemServiceRegistry.ContextAwareServiceProducerWithBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService(@NonNull android.content.Context, @NonNull android.os.IBinder);
+  }
+
+  public static interface SystemServiceRegistry.ContextAwareServiceProducerWithoutBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService(@NonNull android.content.Context);
+  }
+
+  public static interface SystemServiceRegistry.StaticServiceProducerWithBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService(@NonNull android.os.IBinder);
+  }
+
+  public static interface SystemServiceRegistry.StaticServiceProducerWithoutBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService();
+  }
+
+  public class UiModeManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void addOnProjectionStateChangedListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.app.UiModeManager.OnProjectionStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED) public void enableCarMode(@IntRange(from=0) int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public int getActiveProjectionTypes();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public java.util.Set<java.lang.String> getProjectingPackages(int);
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean releaseProjection(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void removeOnProjectionStateChangedListener(@NonNull android.app.UiModeManager.OnProjectionStateChangedListener);
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean requestProjection(int);
+    field public static final String ACTION_ENTER_CAR_MODE_PRIORITIZED = "android.app.action.ENTER_CAR_MODE_PRIORITIZED";
+    field public static final String ACTION_EXIT_CAR_MODE_PRIORITIZED = "android.app.action.EXIT_CAR_MODE_PRIORITIZED";
+    field public static final int DEFAULT_PRIORITY = 0; // 0x0
+    field public static final String EXTRA_CALLING_PACKAGE = "android.app.extra.CALLING_PACKAGE";
+    field public static final String EXTRA_PRIORITY = "android.app.extra.PRIORITY";
+    field public static final int PROJECTION_TYPE_ALL = -1; // 0xffffffff
+    field public static final int PROJECTION_TYPE_AUTOMOTIVE = 1; // 0x1
+    field public static final int PROJECTION_TYPE_NONE = 0; // 0x0
+  }
+
+  public static interface UiModeManager.OnProjectionStateChangedListener {
+    method public void onProjectionStateChanged(int, @NonNull java.util.Set<java.lang.String>);
+  }
+
+  public final class Vr2dDisplayProperties implements android.os.Parcelable {
+    ctor public Vr2dDisplayProperties(int, int, int);
+    method public int describeContents();
+    method public void dump(@NonNull java.io.PrintWriter, @NonNull String);
+    method public int getAddedFlags();
+    method public int getDpi();
+    method public int getHeight();
+    method public int getRemovedFlags();
+    method public int getWidth();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Vr2dDisplayProperties> CREATOR;
+    field public static final int FLAG_VIRTUAL_DISPLAY_ENABLED = 1; // 0x1
+  }
+
+  public static final class Vr2dDisplayProperties.Builder {
+    ctor public Vr2dDisplayProperties.Builder();
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder addFlags(int);
+    method @NonNull public android.app.Vr2dDisplayProperties build();
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder removeFlags(int);
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder setDimensions(int, int, int);
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder setEnabled(boolean);
+  }
+
+  public class VrManager {
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public int getVr2dDisplayId();
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public boolean isPersistentVrModeEnabled();
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public boolean isVrModeEnabled();
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public void registerVrStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.app.VrStateCallback);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setAndBindVrCompositor(android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setPersistentVrModeEnabled(boolean);
+    method @RequiresPermission("android.permission.ACCESS_VR_MANAGER") public void setStandbyEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setVr2dDisplayProperties(@NonNull android.app.Vr2dDisplayProperties);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setVrInputMethod(@Nullable android.content.ComponentName);
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public void unregisterVrStateCallback(@NonNull android.app.VrStateCallback);
+  }
+
+  public abstract class VrStateCallback {
+    ctor public VrStateCallback();
+    method public void onPersistentVrStateChanged(boolean);
+    method public void onVrStateChanged(boolean);
+  }
+
+  public final class WallpaperInfo implements android.os.Parcelable {
+    method public boolean supportsAmbientMode();
+  }
+
+  public class WallpaperManager {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public void clearWallpaper(int, int);
+    method public void setDisplayOffset(android.os.IBinder, int, int);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT) public boolean setWallpaperComponent(android.content.ComponentName);
+  }
+
+}
+
+package android.app.admin {
+
+  public class DevicePolicyKeyguardService extends android.app.Service {
+    ctor public DevicePolicyKeyguardService();
+    method @Nullable public void dismiss();
+    method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @Nullable public android.view.SurfaceControlViewHost.SurfacePackage onCreateKeyguardSurface(@NonNull android.os.IBinder);
+  }
+
+  public class DevicePolicyManager {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public boolean getBluetoothContactSharingDisabled(@NonNull android.os.UserHandle);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getDeviceOwner();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"}) public android.content.ComponentName getDeviceOwnerComponentOnAnyUser();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getDeviceOwnerNameOnAnyUser();
+    method @Nullable public CharSequence getDeviceOwnerOrganizationName();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.UserHandle getDeviceOwnerUser();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List<java.lang.String> getPermittedAccessibilityServices(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List<java.lang.String> getPermittedInputMethodsForCurrentUser();
+    method @Nullable public android.content.ComponentName getProfileOwner() throws java.lang.IllegalArgumentException;
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getProfileOwnerNameAsUser(int) throws java.lang.IllegalArgumentException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public int getUserProvisioningState();
+    method public boolean isDeviceManaged();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isDeviceProvisioned();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isDeviceProvisioningConfigApplied();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isManagedKiosk();
+    method public boolean isSecondaryLockscreenEnabled(@NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isUnattendedManagedKiosk();
+    method @RequiresPermission("android.permission.NOTIFY_PENDING_SYSTEM_UPDATE") public void notifyPendingSystemUpdate(long);
+    method @RequiresPermission("android.permission.NOTIFY_PENDING_SYSTEM_UPDATE") public void notifyPendingSystemUpdate(long, boolean);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public boolean packageHasActiveAdmins(String);
+    method @Deprecated @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public boolean setActiveProfileOwner(@NonNull android.content.ComponentName, String) throws java.lang.IllegalArgumentException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setDeviceProvisioningConfigApplied();
+    method @Deprecated @RequiresPermission(value=android.Manifest.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS, conditional=true) public void setProfileOwnerCanAccessDeviceIds(@NonNull android.content.ComponentName);
+    method public void setSecondaryLockscreenEnabled(@NonNull android.content.ComponentName, boolean);
+    field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED";
+    field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_DISALLOWED";
+    field public static final String ACTION_BIND_SECONDARY_LOCKSCREEN_SERVICE = "android.app.action.BIND_SECONDARY_LOCKSCREEN_SERVICE";
+    field public static final String ACTION_PROVISION_FINALIZATION = "android.app.action.PROVISION_FINALIZATION";
+    field public static final String ACTION_PROVISION_FINANCED_DEVICE = "android.app.action.PROVISION_FINANCED_DEVICE";
+    field public static final String ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE = "android.app.action.PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION) public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED = "android.app.action.RESET_PROTECTION_POLICY_CHANGED";
+    field public static final String ACTION_SET_PROFILE_OWNER = "android.app.action.SET_PROFILE_OWNER";
+    field public static final String ACTION_STATE_USER_SETUP_COMPLETE = "android.app.action.STATE_USER_SETUP_COMPLETE";
+    field public static final String EXTRA_PROFILE_OWNER_NAME = "android.app.extra.PROFILE_OWNER_NAME";
+    field @Deprecated public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI";
+    field @Deprecated public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL";
+    field public static final String EXTRA_PROVISIONING_ORGANIZATION_NAME = "android.app.extra.PROVISIONING_ORGANIZATION_NAME";
+    field public static final String EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE = "android.app.extra.PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE";
+    field public static final String EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER = "android.app.extra.PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER";
+    field public static final String EXTRA_PROVISIONING_SUPPORTED_MODES = "android.app.extra.PROVISIONING_SUPPORTED_MODES";
+    field public static final String EXTRA_PROVISIONING_SUPPORT_URL = "android.app.extra.PROVISIONING_SUPPORT_URL";
+    field public static final String EXTRA_PROVISIONING_TRIGGER = "android.app.extra.PROVISIONING_TRIGGER";
+    field public static final String EXTRA_RESTRICTION = "android.app.extra.RESTRICTION";
+    field public static final int FLAG_SUPPORTED_MODES_DEVICE_OWNER = 4; // 0x4
+    field public static final int FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED = 1; // 0x1
+    field public static final int FLAG_SUPPORTED_MODES_PERSONALLY_OWNED = 2; // 0x2
+    field public static final int PROVISIONING_TRIGGER_CLOUD_ENROLLMENT = 1; // 0x1
+    field public static final int PROVISIONING_TRIGGER_MANAGED_ACCOUNT = 4; // 0x4
+    field @Deprecated public static final int PROVISIONING_TRIGGER_PERSISTENT_DEVICE_OWNER = 3; // 0x3
+    field public static final int PROVISIONING_TRIGGER_QR_CODE = 2; // 0x2
+    field public static final int PROVISIONING_TRIGGER_UNSPECIFIED = 0; // 0x0
+    field public static final String REQUIRED_APP_MANAGED_DEVICE = "android.app.REQUIRED_APP_MANAGED_DEVICE";
+    field public static final String REQUIRED_APP_MANAGED_PROFILE = "android.app.REQUIRED_APP_MANAGED_PROFILE";
+    field public static final String REQUIRED_APP_MANAGED_USER = "android.app.REQUIRED_APP_MANAGED_USER";
+    field public static final int STATE_USER_PROFILE_COMPLETE = 4; // 0x4
+    field public static final int STATE_USER_PROFILE_FINALIZED = 5; // 0x5
+    field public static final int STATE_USER_SETUP_COMPLETE = 2; // 0x2
+    field public static final int STATE_USER_SETUP_FINALIZED = 3; // 0x3
+    field public static final int STATE_USER_SETUP_INCOMPLETE = 1; // 0x1
+    field public static final int STATE_USER_UNMANAGED = 0; // 0x0
+  }
+
+  public final class SystemUpdatePolicy implements android.os.Parcelable {
+    method public android.app.admin.SystemUpdatePolicy.InstallationOption getInstallationOptionAt(long);
+    field public static final int TYPE_PAUSE = 4; // 0x4
+  }
+
+  public static class SystemUpdatePolicy.InstallationOption {
+    method public long getEffectiveTime();
+    method public int getType();
+  }
+
+}
+
+package android.app.assist {
+
+  public class ActivityId {
+  }
+
+  public static class AssistStructure.ViewNode {
+    ctor public AssistStructure.ViewNode();
+  }
+
+}
+
+package android.app.backup {
+
+  public class BackupDataInput {
+    ctor public BackupDataInput(java.io.FileDescriptor);
+  }
+
+  public class BackupDataOutput {
+    ctor public BackupDataOutput(java.io.FileDescriptor);
+    ctor public BackupDataOutput(java.io.FileDescriptor, long);
+  }
+
+  public class BackupManager {
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void backupNow();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public android.app.backup.RestoreSession beginRestoreSession();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void cancelBackups();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void excludeKeysFromRestore(@NonNull String, @NonNull java.util.List<java.lang.String>);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public long getAvailableRestoreToken(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.Intent getConfigurationIntent(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public String getCurrentTransport();
+    method @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.ComponentName getCurrentTransportComponent();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.Intent getDataManagementIntent(String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public CharSequence getDataManagementIntentLabel(@NonNull String);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public String getDataManagementLabel(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public String getDestinationString(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isAppEligibleForBackup(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isBackupEnabled();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isBackupServiceActive(android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public String[] listAllTransports();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[], android.app.backup.BackupObserver);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[], android.app.backup.BackupObserver, android.app.backup.BackupManagerMonitor, int);
+    method @Deprecated public int requestRestore(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BACKUP) public String selectBackupTransport(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void selectBackupTransport(android.content.ComponentName, android.app.backup.SelectBackupTransportCallback);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAncestralSerialNumber(long);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAutoRestore(boolean);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void setBackupEnabled(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BACKUP) public void updateTransportAttributes(@NonNull android.content.ComponentName, @NonNull String, @Nullable android.content.Intent, @NonNull String, @Nullable android.content.Intent, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void updateTransportAttributes(@NonNull android.content.ComponentName, @NonNull String, @Nullable android.content.Intent, @NonNull String, @Nullable android.content.Intent, @Nullable CharSequence);
+    field public static final int ERROR_AGENT_FAILURE = -1003; // 0xfffffc15
+    field public static final int ERROR_BACKUP_CANCELLED = -2003; // 0xfffff82d
+    field public static final int ERROR_BACKUP_NOT_ALLOWED = -2001; // 0xfffff82f
+    field public static final int ERROR_PACKAGE_NOT_FOUND = -2002; // 0xfffff82e
+    field public static final int ERROR_TRANSPORT_ABORTED = -1000; // 0xfffffc18
+    field public static final int ERROR_TRANSPORT_INVALID = -2; // 0xfffffffe
+    field public static final int ERROR_TRANSPORT_PACKAGE_REJECTED = -1002; // 0xfffffc16
+    field public static final int ERROR_TRANSPORT_QUOTA_EXCEEDED = -1005; // 0xfffffc13
+    field public static final int ERROR_TRANSPORT_UNAVAILABLE = -1; // 0xffffffff
+    field public static final int FLAG_NON_INCREMENTAL_BACKUP = 1; // 0x1
+    field public static final String PACKAGE_MANAGER_SENTINEL = "@pm@";
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public class BackupManagerMonitor {
+    ctor public BackupManagerMonitor();
+    method public void onEvent(android.os.Bundle);
+    field public static final String EXTRA_LOG_CANCEL_ALL = "android.app.backup.extra.LOG_CANCEL_ALL";
+    field public static final String EXTRA_LOG_EVENT_CATEGORY = "android.app.backup.extra.LOG_EVENT_CATEGORY";
+    field public static final String EXTRA_LOG_EVENT_ID = "android.app.backup.extra.LOG_EVENT_ID";
+    field public static final String EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION = "android.app.backup.extra.LOG_EVENT_PACKAGE_FULL_VERSION";
+    field public static final String EXTRA_LOG_EVENT_PACKAGE_NAME = "android.app.backup.extra.LOG_EVENT_PACKAGE_NAME";
+    field @Deprecated public static final String EXTRA_LOG_EVENT_PACKAGE_VERSION = "android.app.backup.extra.LOG_EVENT_PACKAGE_VERSION";
+    field public static final String EXTRA_LOG_EXCEPTION_FULL_BACKUP = "android.app.backup.extra.LOG_EXCEPTION_FULL_BACKUP";
+    field public static final String EXTRA_LOG_ILLEGAL_KEY = "android.app.backup.extra.LOG_ILLEGAL_KEY";
+    field public static final String EXTRA_LOG_MANIFEST_PACKAGE_NAME = "android.app.backup.extra.LOG_MANIFEST_PACKAGE_NAME";
+    field public static final String EXTRA_LOG_OLD_VERSION = "android.app.backup.extra.LOG_OLD_VERSION";
+    field public static final String EXTRA_LOG_POLICY_ALLOW_APKS = "android.app.backup.extra.LOG_POLICY_ALLOW_APKS";
+    field public static final String EXTRA_LOG_PREFLIGHT_ERROR = "android.app.backup.extra.LOG_PREFLIGHT_ERROR";
+    field public static final String EXTRA_LOG_RESTORE_ANYWAY = "android.app.backup.extra.LOG_RESTORE_ANYWAY";
+    field public static final String EXTRA_LOG_RESTORE_VERSION = "android.app.backup.extra.LOG_RESTORE_VERSION";
+    field public static final String EXTRA_LOG_WIDGET_PACKAGE_NAME = "android.app.backup.extra.LOG_WIDGET_PACKAGE_NAME";
+    field public static final int LOG_EVENT_CATEGORY_AGENT = 2; // 0x2
+    field public static final int LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY = 3; // 0x3
+    field public static final int LOG_EVENT_CATEGORY_TRANSPORT = 1; // 0x1
+    field public static final int LOG_EVENT_ID_APK_NOT_INSTALLED = 40; // 0x28
+    field public static final int LOG_EVENT_ID_APP_HAS_NO_AGENT = 28; // 0x1c
+    field public static final int LOG_EVENT_ID_BACKUP_DISABLED = 13; // 0xd
+    field public static final int LOG_EVENT_ID_CANNOT_RESTORE_WITHOUT_APK = 41; // 0x29
+    field public static final int LOG_EVENT_ID_CANT_FIND_AGENT = 30; // 0x1e
+    field public static final int LOG_EVENT_ID_CORRUPT_MANIFEST = 46; // 0x2e
+    field public static final int LOG_EVENT_ID_DEVICE_NOT_PROVISIONED = 14; // 0xe
+    field public static final int LOG_EVENT_ID_ERROR_PREFLIGHT = 16; // 0x10
+    field public static final int LOG_EVENT_ID_EXCEPTION_FULL_BACKUP = 19; // 0x13
+    field public static final int LOG_EVENT_ID_EXPECTED_DIFFERENT_PACKAGE = 43; // 0x2b
+    field public static final int LOG_EVENT_ID_FULL_BACKUP_CANCEL = 4; // 0x4
+    field public static final int LOG_EVENT_ID_FULL_RESTORE_ALLOW_BACKUP_FALSE = 39; // 0x27
+    field public static final int LOG_EVENT_ID_FULL_RESTORE_SIGNATURE_MISMATCH = 37; // 0x25
+    field public static final int LOG_EVENT_ID_FULL_RESTORE_TIMEOUT = 45; // 0x2d
+    field public static final int LOG_EVENT_ID_ILLEGAL_KEY = 5; // 0x5
+    field public static final int LOG_EVENT_ID_KEY_VALUE_BACKUP_CANCEL = 21; // 0x15
+    field public static final int LOG_EVENT_ID_KEY_VALUE_RESTORE_TIMEOUT = 31; // 0x1f
+    field public static final int LOG_EVENT_ID_LOST_TRANSPORT = 25; // 0x19
+    field public static final int LOG_EVENT_ID_MISSING_SIGNATURE = 42; // 0x2a
+    field public static final int LOG_EVENT_ID_NO_DATA_TO_SEND = 7; // 0x7
+    field public static final int LOG_EVENT_ID_NO_PACKAGES = 49; // 0x31
+    field public static final int LOG_EVENT_ID_NO_PM_METADATA_RECEIVED = 23; // 0x17
+    field public static final int LOG_EVENT_ID_NO_RESTORE_METADATA_AVAILABLE = 22; // 0x16
+    field public static final int LOG_EVENT_ID_PACKAGE_INELIGIBLE = 9; // 0x9
+    field public static final int LOG_EVENT_ID_PACKAGE_KEY_VALUE_PARTICIPANT = 10; // 0xa
+    field public static final int LOG_EVENT_ID_PACKAGE_NOT_FOUND = 12; // 0xc
+    field public static final int LOG_EVENT_ID_PACKAGE_NOT_PRESENT = 26; // 0x1a
+    field public static final int LOG_EVENT_ID_PACKAGE_STOPPED = 11; // 0xb
+    field public static final int LOG_EVENT_ID_PACKAGE_TRANSPORT_NOT_PRESENT = 15; // 0xf
+    field public static final int LOG_EVENT_ID_PM_AGENT_HAS_NO_METADATA = 24; // 0x18
+    field public static final int LOG_EVENT_ID_QUOTA_HIT_PREFLIGHT = 18; // 0x12
+    field public static final int LOG_EVENT_ID_RESTORE_ANY_VERSION = 34; // 0x22
+    field public static final int LOG_EVENT_ID_RESTORE_VERSION_HIGHER = 27; // 0x1b
+    field public static final int LOG_EVENT_ID_SIGNATURE_MISMATCH = 29; // 0x1d
+    field public static final int LOG_EVENT_ID_SYSTEM_APP_NO_AGENT = 38; // 0x26
+    field public static final int LOG_EVENT_ID_TRANSPORT_IS_NULL = 50; // 0x32
+    field public static final int LOG_EVENT_ID_TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED = 51; // 0x33
+    field public static final int LOG_EVENT_ID_UNKNOWN_VERSION = 44; // 0x2c
+    field public static final int LOG_EVENT_ID_VERSIONS_MATCH = 35; // 0x23
+    field public static final int LOG_EVENT_ID_VERSION_OF_BACKUP_OLDER = 36; // 0x24
+    field public static final int LOG_EVENT_ID_WIDGET_METADATA_MISMATCH = 47; // 0x2f
+    field public static final int LOG_EVENT_ID_WIDGET_UNKNOWN_VERSION = 48; // 0x30
+  }
+
+  public abstract class BackupObserver {
+    ctor public BackupObserver();
+    method public void backupFinished(int);
+    method public void onResult(String, int);
+    method public void onUpdate(String, android.app.backup.BackupProgress);
+  }
+
+  public class BackupProgress implements android.os.Parcelable {
+    ctor public BackupProgress(long, long);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.BackupProgress> CREATOR;
+    field public final long bytesExpected;
+    field public final long bytesTransferred;
+  }
+
+  public class BackupTransport {
+    ctor public BackupTransport();
+    method public int abortFullRestore();
+    method public void cancelFullBackup();
+    method public int checkFullBackupSize(long);
+    method public int clearBackupData(android.content.pm.PackageInfo);
+    method public android.content.Intent configurationIntent();
+    method public String currentDestinationString();
+    method public android.content.Intent dataManagementIntent();
+    method @Nullable public CharSequence dataManagementIntentLabel();
+    method @Deprecated @Nullable public String dataManagementLabel();
+    method public int finishBackup();
+    method public void finishRestore();
+    method public android.app.backup.RestoreSet[] getAvailableRestoreSets();
+    method public long getBackupQuota(String, boolean);
+    method public android.os.IBinder getBinder();
+    method public long getCurrentRestoreSet();
+    method public int getNextFullRestoreDataChunk(android.os.ParcelFileDescriptor);
+    method public int getRestoreData(android.os.ParcelFileDescriptor);
+    method public int getTransportFlags();
+    method public int initializeDevice();
+    method public boolean isAppEligibleForBackup(android.content.pm.PackageInfo, boolean);
+    method public String name();
+    method public android.app.backup.RestoreDescription nextRestorePackage();
+    method public int performBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor, int);
+    method public int performBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor);
+    method public int performFullBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor, int);
+    method public int performFullBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor);
+    method public long requestBackupTime();
+    method public long requestFullBackupTime();
+    method public int sendBackupData(int);
+    method public int startRestore(long, android.content.pm.PackageInfo[]);
+    method public String transportDirName();
+    field public static final int AGENT_ERROR = -1003; // 0xfffffc15
+    field public static final int AGENT_UNKNOWN = -1004; // 0xfffffc14
+    field public static final String EXTRA_TRANSPORT_REGISTRATION = "android.app.backup.extra.TRANSPORT_REGISTRATION";
+    field public static final int FLAG_DATA_NOT_CHANGED = 8; // 0x8
+    field public static final int FLAG_INCREMENTAL = 2; // 0x2
+    field public static final int FLAG_NON_INCREMENTAL = 4; // 0x4
+    field public static final int FLAG_USER_INITIATED = 1; // 0x1
+    field public static final int NO_MORE_DATA = -1; // 0xffffffff
+    field public static final int TRANSPORT_ERROR = -1000; // 0xfffffc18
+    field public static final int TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED = -1006; // 0xfffffc12
+    field public static final int TRANSPORT_NOT_INITIALIZED = -1001; // 0xfffffc17
+    field public static final int TRANSPORT_OK = 0; // 0x0
+    field public static final int TRANSPORT_PACKAGE_REJECTED = -1002; // 0xfffffc16
+    field public static final int TRANSPORT_QUOTA_EXCEEDED = -1005; // 0xfffffc13
+  }
+
+  public class RestoreDescription implements android.os.Parcelable {
+    ctor public RestoreDescription(String, int);
+    method public int describeContents();
+    method public int getDataType();
+    method public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.RestoreDescription> CREATOR;
+    field public static final android.app.backup.RestoreDescription NO_MORE_PACKAGES;
+    field public static final int TYPE_FULL_STREAM = 2; // 0x2
+    field public static final int TYPE_KEY_VALUE = 1; // 0x1
+  }
+
+  public abstract class RestoreObserver {
+    method public void restoreSetsAvailable(android.app.backup.RestoreSet[]);
+  }
+
+  public class RestoreSession {
+    method public void endRestoreSession();
+    method public int getAvailableRestoreSets(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method public int getAvailableRestoreSets(android.app.backup.RestoreObserver);
+    method public int restoreAll(long, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method public int restoreAll(long, android.app.backup.RestoreObserver);
+    method public int restorePackage(String, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method public int restorePackage(String, android.app.backup.RestoreObserver);
+    method public int restorePackages(long, @Nullable android.app.backup.RestoreObserver, @NonNull java.util.Set<java.lang.String>, @Nullable android.app.backup.BackupManagerMonitor);
+    method public int restorePackages(long, @Nullable android.app.backup.RestoreObserver, @NonNull java.util.Set<java.lang.String>);
+  }
+
+  public class RestoreSet implements android.os.Parcelable {
+    ctor public RestoreSet();
+    ctor public RestoreSet(@Nullable String, @Nullable String, long);
+    ctor public RestoreSet(@Nullable String, @Nullable String, long, int);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.RestoreSet> CREATOR;
+    field public final int backupTransportFlags;
+    field @Nullable public String device;
+    field @Nullable public String name;
+    field public long token;
+  }
+
+  public abstract class SelectBackupTransportCallback {
+    ctor public SelectBackupTransportCallback();
+    method public void onFailure(int);
+    method public void onSuccess(String);
+  }
+
+}
+
+package android.app.compat {
+
+  public final class CompatChanges {
+    method public static boolean isChangeEnabled(long);
+    method @RequiresPermission(allOf={"android.permission.READ_COMPAT_CHANGE_CONFIG", "android.permission.LOG_COMPAT_CHANGE"}) public static boolean isChangeEnabled(long, @NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(allOf={"android.permission.READ_COMPAT_CHANGE_CONFIG", "android.permission.LOG_COMPAT_CHANGE"}) public static boolean isChangeEnabled(long, int);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD) public static void putPackageOverrides(@NonNull String, @NonNull java.util.Map<java.lang.Long,android.app.compat.PackageOverride>);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD) public static void removePackageOverrides(@NonNull String, @NonNull java.util.Set<java.lang.Long>);
+  }
+
+  public final class PackageOverride {
+    method public long getMaxVersionCode();
+    method public long getMinVersionCode();
+    method public boolean isEnabled();
+  }
+
+  public static final class PackageOverride.Builder {
+    ctor public PackageOverride.Builder();
+    method @NonNull public android.app.compat.PackageOverride build();
+    method @NonNull public android.app.compat.PackageOverride.Builder setEnabled(boolean);
+    method @NonNull public android.app.compat.PackageOverride.Builder setMaxVersionCode(long);
+    method @NonNull public android.app.compat.PackageOverride.Builder setMinVersionCode(long);
+  }
+
+}
+
+package android.app.contentsuggestions {
+
+  public final class ClassificationsRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public java.util.List<android.app.contentsuggestions.ContentSelection> getSelections();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ClassificationsRequest> CREATOR;
+  }
+
+  public static final class ClassificationsRequest.Builder {
+    ctor public ClassificationsRequest.Builder(@NonNull java.util.List<android.app.contentsuggestions.ContentSelection>);
+    method @NonNull public android.app.contentsuggestions.ClassificationsRequest build();
+    method @NonNull public android.app.contentsuggestions.ClassificationsRequest.Builder setExtras(@NonNull android.os.Bundle);
+  }
+
+  public final class ContentClassification implements android.os.Parcelable {
+    ctor public ContentClassification(@NonNull String, @NonNull android.os.Bundle);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ContentClassification> CREATOR;
+  }
+
+  public final class ContentSelection implements android.os.Parcelable {
+    ctor public ContentSelection(@NonNull String, @NonNull android.os.Bundle);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ContentSelection> CREATOR;
+  }
+
+  public final class ContentSuggestionsManager {
+    method public void classifyContentSelections(@NonNull android.app.contentsuggestions.ClassificationsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.ClassificationsCallback);
+    method public boolean isEnabled();
+    method public void notifyInteraction(@NonNull String, @NonNull android.os.Bundle);
+    method public void provideContextImage(@NonNull android.graphics.Bitmap, @NonNull android.os.Bundle);
+    method public void provideContextImage(int, @NonNull android.os.Bundle);
+    method public void suggestContentSelections(@NonNull android.app.contentsuggestions.SelectionsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.SelectionsCallback);
+  }
+
+  public static interface ContentSuggestionsManager.ClassificationsCallback {
+    method public void onContentClassificationsAvailable(int, @NonNull java.util.List<android.app.contentsuggestions.ContentClassification>);
+  }
+
+  public static interface ContentSuggestionsManager.SelectionsCallback {
+    method public void onContentSelectionsAvailable(int, @NonNull java.util.List<android.app.contentsuggestions.ContentSelection>);
+  }
+
+  public final class SelectionsRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.Point getInterestPoint();
+    method public int getTaskId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.SelectionsRequest> CREATOR;
+  }
+
+  public static final class SelectionsRequest.Builder {
+    ctor public SelectionsRequest.Builder(int);
+    method @NonNull public android.app.contentsuggestions.SelectionsRequest build();
+    method @NonNull public android.app.contentsuggestions.SelectionsRequest.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.contentsuggestions.SelectionsRequest.Builder setInterestPoint(@NonNull android.graphics.Point);
+  }
+
+}
+
+package android.app.job {
+
+  public abstract class JobScheduler {
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public abstract int scheduleAsPackage(@NonNull android.app.job.JobInfo, @NonNull String, int, String);
+  }
+
+  public class JobSchedulerFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+}
+
+package android.app.people {
+
+  public final class PeopleManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PEOPLE_DATA) public boolean isConversation(@NonNull String, @NonNull String);
+  }
+
+}
+
+package android.app.prediction {
+
+  public final class AppPredictionContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public String getPackageName();
+    method @IntRange(from=0) public int getPredictedTargetCount();
+    method @NonNull public String getUiSurface();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionContext> CREATOR;
+  }
+
+  public static final class AppPredictionContext.Builder {
+    ctor public AppPredictionContext.Builder(@NonNull android.content.Context);
+    method @NonNull public android.app.prediction.AppPredictionContext build();
+    method @NonNull public android.app.prediction.AppPredictionContext.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.prediction.AppPredictionContext.Builder setPredictedTargetCount(@IntRange(from=0) int);
+    method @NonNull public android.app.prediction.AppPredictionContext.Builder setUiSurface(@NonNull String);
+  }
+
+  public final class AppPredictionManager {
+    method @NonNull public android.app.prediction.AppPredictor createAppPredictionSession(@NonNull android.app.prediction.AppPredictionContext);
+  }
+
+  public final class AppPredictionSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionSessionId> CREATOR;
+  }
+
+  public final class AppPredictor {
+    method public void destroy();
+    method public void notifyAppTargetEvent(@NonNull android.app.prediction.AppTargetEvent);
+    method public void notifyLaunchLocationShown(@NonNull String, @NonNull java.util.List<android.app.prediction.AppTargetId>);
+    method public void registerPredictionUpdates(@NonNull java.util.concurrent.Executor, @NonNull android.app.prediction.AppPredictor.Callback);
+    method public void requestPredictionUpdate();
+    method @Nullable public void sortTargets(@NonNull java.util.List<android.app.prediction.AppTarget>, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<android.app.prediction.AppTarget>>);
+    method public void unregisterPredictionUpdates(@NonNull android.app.prediction.AppPredictor.Callback);
+  }
+
+  public static interface AppPredictor.Callback {
+    method public void onTargetsAvailable(@NonNull java.util.List<android.app.prediction.AppTarget>);
+  }
+
+  public final class AppTarget implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getClassName();
+    method @NonNull public android.app.prediction.AppTargetId getId();
+    method @NonNull public String getPackageName();
+    method @IntRange(from=0) public int getRank();
+    method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo();
+    method @NonNull public android.os.UserHandle getUser();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTarget> CREATOR;
+  }
+
+  public static final class AppTarget.Builder {
+    ctor public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId, @NonNull String, @NonNull android.os.UserHandle);
+    ctor public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId, @NonNull android.content.pm.ShortcutInfo);
+    method @NonNull public android.app.prediction.AppTarget build();
+    method @NonNull public android.app.prediction.AppTarget.Builder setClassName(@NonNull String);
+    method @NonNull public android.app.prediction.AppTarget.Builder setRank(@IntRange(from=0) int);
+  }
+
+  public final class AppTargetEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAction();
+    method @Nullable public String getLaunchLocation();
+    method @Nullable public android.app.prediction.AppTarget getTarget();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_DISMISS = 2; // 0x2
+    field public static final int ACTION_LAUNCH = 1; // 0x1
+    field public static final int ACTION_PIN = 3; // 0x3
+    field public static final int ACTION_UNPIN = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetEvent> CREATOR;
+  }
+
+  public static final class AppTargetEvent.Builder {
+    ctor public AppTargetEvent.Builder(@Nullable android.app.prediction.AppTarget, int);
+    method @NonNull public android.app.prediction.AppTargetEvent build();
+    method @NonNull public android.app.prediction.AppTargetEvent.Builder setLaunchLocation(@Nullable String);
+  }
+
+  public final class AppTargetId implements android.os.Parcelable {
+    ctor public AppTargetId(@NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetId> CREATOR;
+  }
+
+}
+
+package android.app.search {
+
+  public final class Query implements android.os.Parcelable {
+    ctor public Query(@NonNull String, long, @NonNull android.os.Bundle);
+    ctor public Query(@NonNull String, long);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getInput();
+    method public long getTimestampMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.Query> CREATOR;
+    field public static final String EXTRA_IME_HEIGHT = "android.app.search.extra.IME_HEIGHT";
+  }
+
+  public final class SearchAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getContentDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @NonNull public String getId();
+    method @Nullable public android.content.Intent getIntent();
+    method @Nullable public android.app.PendingIntent getPendingIntent();
+    method @Nullable public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method @Nullable public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchAction> CREATOR;
+  }
+
+  public static final class SearchAction.Builder {
+    ctor public SearchAction.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.search.SearchAction build();
+    method @NonNull public android.app.search.SearchAction.Builder setContentDescription(@Nullable CharSequence);
+    method @NonNull public android.app.search.SearchAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.search.SearchAction.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.search.SearchAction.Builder setIntent(@Nullable android.content.Intent);
+    method @NonNull public android.app.search.SearchAction.Builder setPendingIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.search.SearchAction.Builder setSubtitle(@Nullable CharSequence);
+    method @NonNull public android.app.search.SearchAction.Builder setUserHandle(@Nullable android.os.UserHandle);
+  }
+
+  public final class SearchContext implements android.os.Parcelable {
+    ctor public SearchContext(int, int);
+    ctor public SearchContext(int, int, @NonNull android.os.Bundle);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public String getPackageName();
+    method @NonNull public int getResultTypes();
+    method @NonNull public int getTimeoutMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchContext> CREATOR;
+  }
+
+  public final class SearchSession implements java.lang.AutoCloseable {
+    method public void close();
+    method protected void finalize();
+    method public void notifyEvent(@NonNull android.app.search.Query, @NonNull android.app.search.SearchTargetEvent);
+    method @Nullable public void query(@NonNull android.app.search.Query, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<android.app.search.SearchTarget>>);
+  }
+
+  public final class SearchSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchSessionId> CREATOR;
+  }
+
+  public final class SearchTarget implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method @NonNull public String getLayoutType();
+    method @NonNull public String getPackageName();
+    method @NonNull public String getParentId();
+    method public int getResultType();
+    method public float getScore();
+    method @Nullable public android.app.search.SearchAction getSearchAction();
+    method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo();
+    method @Nullable public android.net.Uri getSliceUri();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public boolean isHidden();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchTarget> CREATOR;
+    field public static final String LAYOUT_TYPE_ICON = "icon";
+    field public static final String LAYOUT_TYPE_ICON_ROW = "icon_row";
+    field public static final String LAYOUT_TYPE_SHORT_ICON_ROW = "short_icon_row";
+    field public static final int RESULT_TYPE_APPLICATION = 1; // 0x1
+    field public static final int RESULT_TYPE_SHORTCUT = 2; // 0x2
+    field public static final int RESULT_TYPE_SLICE = 4; // 0x4
+    field public static final int RESULT_TYPE_WIDGETS = 8; // 0x8
+  }
+
+  public static final class SearchTarget.Builder {
+    ctor public SearchTarget.Builder(int, @NonNull String, @NonNull String);
+    method @NonNull public android.app.search.SearchTarget build();
+    method @NonNull public android.app.search.SearchTarget.Builder setAppWidgetProviderInfo(@NonNull android.appwidget.AppWidgetProviderInfo);
+    method @NonNull public android.app.search.SearchTarget.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.search.SearchTarget.Builder setHidden(boolean);
+    method @NonNull public android.app.search.SearchTarget.Builder setPackageName(@NonNull String);
+    method @NonNull public android.app.search.SearchTarget.Builder setParentId(@NonNull String);
+    method @NonNull public android.app.search.SearchTarget.Builder setScore(@FloatRange(from=0.0f, to=1.0f) float);
+    method @NonNull public android.app.search.SearchTarget.Builder setSearchAction(@Nullable android.app.search.SearchAction);
+    method @NonNull public android.app.search.SearchTarget.Builder setShortcutInfo(@NonNull android.content.pm.ShortcutInfo);
+    method @NonNull public android.app.search.SearchTarget.Builder setSliceUri(@NonNull android.net.Uri);
+    method @NonNull public android.app.search.SearchTarget.Builder setUserHandle(@NonNull android.os.UserHandle);
+  }
+
+  public final class SearchTargetEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAction();
+    method public int getFlags();
+    method @Nullable public String getLaunchLocation();
+    method @NonNull public String getTargetId();
+    method @NonNull public java.util.List<java.lang.String> getTargetIds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ACTION_DRAGNDROP = 7; // 0x7
+    field public static final int ACTION_LAUNCH_KEYBOARD_FOCUS = 6; // 0x6
+    field public static final int ACTION_LAUNCH_TOUCH = 5; // 0x5
+    field public static final int ACTION_LONGPRESS = 4; // 0x4
+    field public static final int ACTION_SURFACE_INVISIBLE = 8; // 0x8
+    field public static final int ACTION_SURFACE_VISIBLE = 1; // 0x1
+    field public static final int ACTION_TAP = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchTargetEvent> CREATOR;
+    field public static final int FLAG_IME_SHOWN = 1; // 0x1
+  }
+
+  public static final class SearchTargetEvent.Builder {
+    ctor public SearchTargetEvent.Builder(@NonNull String, int);
+    ctor public SearchTargetEvent.Builder(@NonNull java.util.List<java.lang.String>, int);
+    method @NonNull public android.app.search.SearchTargetEvent build();
+    method @NonNull public android.app.search.SearchTargetEvent.Builder setFlags(int);
+    method @NonNull public android.app.search.SearchTargetEvent.Builder setLaunchLocation(@Nullable String);
+  }
+
+  public final class SearchUiManager {
+    method @NonNull public android.app.search.SearchSession createSearchSession(@NonNull android.app.search.SearchContext);
+  }
+
+}
+
+package android.app.smartspace {
+
+  public final class SmartspaceAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getContentDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @NonNull public String getId();
+    method @Nullable public android.content.Intent getIntent();
+    method @Nullable public android.app.PendingIntent getPendingIntent();
+    method @Nullable public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method @Nullable public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceAction> CREATOR;
+  }
+
+  public static final class SmartspaceAction.Builder {
+    ctor public SmartspaceAction.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceAction build();
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setContentDescription(@Nullable CharSequence);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setIntent(@Nullable android.content.Intent);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setPendingIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setSubtitle(@Nullable CharSequence);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setUserHandle(@Nullable android.os.UserHandle);
+  }
+
+  public final class SmartspaceConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public String getPackageName();
+    method @NonNull public int getSmartspaceTargetCount();
+    method @NonNull public String getUiSurface();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceConfig> CREATOR;
+  }
+
+  public static final class SmartspaceConfig.Builder {
+    ctor public SmartspaceConfig.Builder(@NonNull android.content.Context, @NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceConfig build();
+    method @NonNull public android.app.smartspace.SmartspaceConfig.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.smartspace.SmartspaceConfig.Builder setSmartspaceTargetCount(@IntRange(from=0, to=50) int);
+  }
+
+  public final class SmartspaceManager {
+    method @NonNull public android.app.smartspace.SmartspaceSession createSmartspaceSession(@NonNull android.app.smartspace.SmartspaceConfig);
+  }
+
+  public final class SmartspaceSession implements java.lang.AutoCloseable {
+    method public void addOnTargetsAvailableListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.smartspace.SmartspaceSession.OnTargetsAvailableListener);
+    method public void close();
+    method protected void finalize();
+    method public void notifySmartspaceEvent(@NonNull android.app.smartspace.SmartspaceTargetEvent);
+    method public void removeOnTargetsAvailableListener(@NonNull android.app.smartspace.SmartspaceSession.OnTargetsAvailableListener);
+    method public void requestSmartspaceUpdate();
+  }
+
+  public static interface SmartspaceSession.OnTargetsAvailableListener {
+    method public void onTargetsAvailable(@NonNull java.util.List<android.app.smartspace.SmartspaceTarget>);
+  }
+
+  public final class SmartspaceSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getId();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceSessionId> CREATOR;
+  }
+
+  public final class SmartspaceTarget implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.app.smartspace.SmartspaceAction> getActionChips();
+    method @Nullable public String getAssociatedSmartspaceTargetId();
+    method @Nullable public android.app.smartspace.SmartspaceAction getBaseAction();
+    method @NonNull public android.content.ComponentName getComponentName();
+    method public long getCreationTimeMillis();
+    method public long getExpiryTimeMillis();
+    method public int getFeatureType();
+    method @Nullable public android.app.smartspace.SmartspaceAction getHeaderAction();
+    method @NonNull public java.util.List<android.app.smartspace.SmartspaceAction> getIconGrid();
+    method public float getScore();
+    method @Nullable public android.net.Uri getSliceUri();
+    method @NonNull public String getSmartspaceTargetId();
+    method @Nullable public String getSourceNotificationKey();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method @Nullable public android.appwidget.AppWidgetProviderInfo getWidget();
+    method public boolean isSensitive();
+    method public boolean shouldShowExpanded();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceTarget> CREATOR;
+    field public static final int FEATURE_ALARM = 7; // 0x7
+    field public static final int FEATURE_BEDTIME_ROUTINE = 16; // 0x10
+    field public static final int FEATURE_CALENDAR = 2; // 0x2
+    field public static final int FEATURE_COMMUTE_TIME = 3; // 0x3
+    field public static final int FEATURE_CONSENT = 11; // 0xb
+    field public static final int FEATURE_ETA_MONITORING = 18; // 0x12
+    field public static final int FEATURE_FITNESS_TRACKING = 17; // 0x11
+    field public static final int FEATURE_FLIGHT = 4; // 0x4
+    field public static final int FEATURE_LOYALTY_CARD = 14; // 0xe
+    field public static final int FEATURE_MEDIA = 15; // 0xf
+    field public static final int FEATURE_MISSED_CALL = 19; // 0x13
+    field public static final int FEATURE_ONBOARDING = 8; // 0x8
+    field public static final int FEATURE_PACKAGE_TRACKING = 20; // 0x14
+    field public static final int FEATURE_REMINDER = 6; // 0x6
+    field public static final int FEATURE_SHOPPING_LIST = 13; // 0xd
+    field public static final int FEATURE_SPORTS = 9; // 0x9
+    field public static final int FEATURE_STOCK_PRICE_CHANGE = 12; // 0xc
+    field public static final int FEATURE_STOPWATCH = 22; // 0x16
+    field public static final int FEATURE_TIMER = 21; // 0x15
+    field public static final int FEATURE_TIPS = 5; // 0x5
+    field public static final int FEATURE_UNDEFINED = 0; // 0x0
+    field public static final int FEATURE_UPCOMING_ALARM = 23; // 0x17
+    field public static final int FEATURE_WEATHER = 1; // 0x1
+    field public static final int FEATURE_WEATHER_ALERT = 10; // 0xa
+  }
+
+  public static final class SmartspaceTarget.Builder {
+    ctor public SmartspaceTarget.Builder(@NonNull String, @NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method @NonNull public android.app.smartspace.SmartspaceTarget build();
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setActionChips(@NonNull java.util.List<android.app.smartspace.SmartspaceAction>);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setAssociatedSmartspaceTargetId(@NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setBaseAction(@NonNull android.app.smartspace.SmartspaceAction);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setCreationTimeMillis(long);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setExpiryTimeMillis(long);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setFeatureType(int);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setHeaderAction(@NonNull android.app.smartspace.SmartspaceAction);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setIconGrid(@NonNull java.util.List<android.app.smartspace.SmartspaceAction>);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setScore(float);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setSensitive(boolean);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setShouldShowExpanded(boolean);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setSliceUri(@NonNull android.net.Uri);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setSourceNotificationKey(@NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setWidget(@NonNull android.appwidget.AppWidgetProviderInfo);
+  }
+
+  public final class SmartspaceTargetEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public int getEventType();
+    method @Nullable public String getSmartspaceActionId();
+    method @Nullable public android.app.smartspace.SmartspaceTarget getSmartspaceTarget();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceTargetEvent> CREATOR;
+    field public static final int EVENT_TARGET_BLOCK = 5; // 0x5
+    field public static final int EVENT_TARGET_DISMISS = 4; // 0x4
+    field public static final int EVENT_TARGET_HIDDEN = 3; // 0x3
+    field public static final int EVENT_TARGET_INTERACTION = 1; // 0x1
+    field public static final int EVENT_TARGET_SHOWN = 2; // 0x2
+    field public static final int EVENT_UI_SURFACE_HIDDEN = 7; // 0x7
+    field public static final int EVENT_UI_SURFACE_SHOWN = 6; // 0x6
+  }
+
+  public static final class SmartspaceTargetEvent.Builder {
+    ctor public SmartspaceTargetEvent.Builder(int);
+    method @NonNull public android.app.smartspace.SmartspaceTargetEvent build();
+    method @NonNull public android.app.smartspace.SmartspaceTargetEvent.Builder setSmartspaceActionId(@NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceTargetEvent.Builder setSmartspaceTarget(@NonNull android.app.smartspace.SmartspaceTarget);
+  }
+
+}
+
+package android.app.time {
+
+  public final class Capabilities {
+    field public static final int CAPABILITY_NOT_ALLOWED = 20; // 0x14
+    field public static final int CAPABILITY_NOT_APPLICABLE = 30; // 0x1e
+    field public static final int CAPABILITY_NOT_SUPPORTED = 10; // 0xa
+    field public static final int CAPABILITY_POSSESSED = 40; // 0x28
+  }
+
+  public final class ExternalTimeSuggestion implements android.os.Parcelable {
+    ctor public ExternalTimeSuggestion(long, long);
+    method public void addDebugInfo(@NonNull java.lang.String...);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getDebugInfo();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.ExternalTimeSuggestion> CREATOR;
+  }
+
+  public final class TimeManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public void addTimeZoneDetectorListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.time.TimeManager.TimeZoneDetectorListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public android.app.time.TimeZoneCapabilitiesAndConfig getTimeZoneCapabilitiesAndConfig();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public void removeTimeZoneDetectorListener(@NonNull android.app.time.TimeManager.TimeZoneDetectorListener);
+    method @RequiresPermission(android.Manifest.permission.SUGGEST_EXTERNAL_TIME) public void suggestExternalTime(@NonNull android.app.time.ExternalTimeSuggestion);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public boolean updateTimeZoneConfiguration(@NonNull android.app.time.TimeZoneConfiguration);
+  }
+
+  @java.lang.FunctionalInterface public static interface TimeManager.TimeZoneDetectorListener {
+    method public void onChange();
+  }
+
+  public final class TimeZoneCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getConfigureAutoDetectionEnabledCapability();
+    method public int getConfigureGeoDetectionEnabledCapability();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.TimeZoneCapabilities> CREATOR;
+  }
+
+  public final class TimeZoneCapabilitiesAndConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.app.time.TimeZoneCapabilities getCapabilities();
+    method @NonNull public android.app.time.TimeZoneConfiguration getConfiguration();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.TimeZoneCapabilitiesAndConfig> CREATOR;
+  }
+
+  public final class TimeZoneConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isAutoDetectionEnabled();
+    method public boolean isGeoDetectionEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.TimeZoneConfiguration> CREATOR;
+  }
+
+  public static final class TimeZoneConfiguration.Builder {
+    ctor public TimeZoneConfiguration.Builder();
+    ctor public TimeZoneConfiguration.Builder(@NonNull android.app.time.TimeZoneConfiguration);
+    method @NonNull public android.app.time.TimeZoneConfiguration build();
+    method @NonNull public android.app.time.TimeZoneConfiguration.Builder setAutoDetectionEnabled(boolean);
+    method @NonNull public android.app.time.TimeZoneConfiguration.Builder setGeoDetectionEnabled(boolean);
+  }
+
+}
+
+package android.app.usage {
+
+  public final class CacheQuotaHint implements android.os.Parcelable {
+    ctor public CacheQuotaHint(@NonNull android.app.usage.CacheQuotaHint.Builder);
+    method public int describeContents();
+    method public long getQuota();
+    method public int getUid();
+    method @Nullable public android.app.usage.UsageStats getUsageStats();
+    method @Nullable public String getVolumeUuid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.CacheQuotaHint> CREATOR;
+    field public static final long QUOTA_NOT_SET = -1L; // 0xffffffffffffffffL
+  }
+
+  public static final class CacheQuotaHint.Builder {
+    ctor public CacheQuotaHint.Builder();
+    ctor public CacheQuotaHint.Builder(@NonNull android.app.usage.CacheQuotaHint);
+    method @NonNull public android.app.usage.CacheQuotaHint build();
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setQuota(long);
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setUid(int);
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setUsageStats(@Nullable android.app.usage.UsageStats);
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setVolumeUuid(@Nullable String);
+  }
+
+  public abstract class CacheQuotaService extends android.app.Service {
+    ctor public CacheQuotaService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract java.util.List<android.app.usage.CacheQuotaHint> onComputeCacheQuotaHints(java.util.List<android.app.usage.CacheQuotaHint>);
+    field public static final String SERVICE_INTERFACE = "android.app.usage.CacheQuotaService";
+  }
+
+  public class NetworkStatsManager {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void registerNetworkStatsProvider(@NonNull String, @NonNull android.net.netstats.provider.NetworkStatsProvider);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void unregisterNetworkStatsProvider(@NonNull android.net.netstats.provider.NetworkStatsProvider);
+  }
+
+  public static final class UsageEvents.Event {
+    method public int getInstanceId();
+    method @Nullable public String getNotificationChannelId();
+    method @Nullable public String getTaskRootClassName();
+    method @Nullable public String getTaskRootPackageName();
+    method public boolean isInstantApp();
+    field public static final int NOTIFICATION_INTERRUPTION = 12; // 0xc
+    field public static final int NOTIFICATION_SEEN = 10; // 0xa
+    field public static final int SLICE_PINNED = 14; // 0xe
+    field public static final int SLICE_PINNED_PRIV = 13; // 0xd
+    field public static final int SYSTEM_INTERACTION = 6; // 0x6
+  }
+
+  public final class UsageStats implements android.os.Parcelable {
+    method public int getAppLaunchCount();
+    method public long getLastTimeAnyComponentUsed();
+  }
+
+  public final class UsageStatsManager {
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getAppStandbyBucket(String);
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public java.util.Map<java.lang.String,java.lang.Integer> getAppStandbyBuckets();
+    method @RequiresPermission(allOf={android.Manifest.permission.INTERACT_ACROSS_USERS, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long getLastTimeAnyComponentUsed(@NonNull String);
+    method public int getUsageSource();
+    method @RequiresPermission(android.Manifest.permission.BIND_CARRIER_SERVICES) public void onCarrierPrivilegedAppsChanged();
+    method @RequiresPermission(allOf={android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void registerAppUsageLimitObserver(int, @NonNull String[], @NonNull java.time.Duration, @NonNull java.time.Duration, @Nullable android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerAppUsageObserver(int, @NonNull String[], long, @NonNull java.util.concurrent.TimeUnit, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerUsageSessionObserver(int, @NonNull String[], @NonNull java.time.Duration, @NonNull java.time.Duration, @NonNull android.app.PendingIntent, @Nullable android.app.PendingIntent);
+    method public void reportUsageStart(@NonNull android.app.Activity, @NonNull String);
+    method public void reportUsageStart(@NonNull android.app.Activity, @NonNull String, long);
+    method public void reportUsageStop(@NonNull android.app.Activity, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_APP_IDLE_STATE) public void setAppStandbyBucket(String, int);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_APP_IDLE_STATE) public void setAppStandbyBuckets(java.util.Map<java.lang.String,java.lang.Integer>);
+    method @RequiresPermission(allOf={android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void unregisterAppUsageLimitObserver(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void unregisterAppUsageObserver(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void unregisterUsageSessionObserver(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(String, long, android.os.UserHandle);
+    field public static final String EXTRA_OBSERVER_ID = "android.app.usage.extra.OBSERVER_ID";
+    field public static final String EXTRA_TIME_LIMIT = "android.app.usage.extra.TIME_LIMIT";
+    field public static final String EXTRA_TIME_USED = "android.app.usage.extra.TIME_USED";
+    field public static final int STANDBY_BUCKET_EXEMPTED = 5; // 0x5
+    field public static final int STANDBY_BUCKET_NEVER = 50; // 0x32
+    field public static final int USAGE_SOURCE_CURRENT_ACTIVITY = 2; // 0x2
+    field public static final int USAGE_SOURCE_TASK_ROOT_ACTIVITY = 1; // 0x1
+  }
+
+}
+
+package android.apphibernation {
+
+  public class AppHibernationManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public java.util.List<java.lang.String> getHibernatingPackagesForUser();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingForUser(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingGlobally(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingForUser(@NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingGlobally(@NonNull String, boolean);
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile {
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public android.bluetooth.BufferConstraints getBufferConstraints();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getDynamicBufferSupport();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setBufferLengthMillis(int, int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field public static final int DYNAMIC_BUFFER_SUPPORT_A2DP_OFFLOAD = 1; // 0x1
+    field public static final int DYNAMIC_BUFFER_SUPPORT_A2DP_SOFTWARE_ENCODING = 2; // 0x2
+    field public static final int DYNAMIC_BUFFER_SUPPORT_NONE = 0; // 0x0
+    field public static final int OPTIONAL_CODECS_NOT_SUPPORTED = 0; // 0x0
+    field public static final int OPTIONAL_CODECS_PREF_DISABLED = 0; // 0x0
+    field public static final int OPTIONAL_CODECS_PREF_ENABLED = 1; // 0x1
+    field public static final int OPTIONAL_CODECS_PREF_UNKNOWN = -1; // 0xffffffff
+    field public static final int OPTIONAL_CODECS_SUPPORTED = 1; // 0x1
+    field public static final int OPTIONAL_CODECS_SUPPORT_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class BluetoothA2dpSink implements android.bluetooth.BluetoothProfile {
+    method public void finalize();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean isAudioPlaying(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothAdapter {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean addOnMetadataChangedListener(@NonNull android.bluetooth.BluetoothDevice, @NonNull java.util.concurrent.Executor, @NonNull android.bluetooth.BluetoothAdapter.OnMetadataChangedListener);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disableBLE();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean enableBLE();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean enableNoAutoConnect();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public void generateLocalOobData(int, @NonNull java.util.concurrent.Executor, @NonNull android.bluetooth.BluetoothAdapter.OobDataCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public long getDiscoveryEndMillis();
+    method public boolean isBleScanAlwaysAvailable();
+    method public boolean isLeEnabled();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean removeActiveDevice(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean removeOnMetadataChangedListener(@NonNull android.bluetooth.BluetoothDevice, @NonNull android.bluetooth.BluetoothAdapter.OnMetadataChangedListener);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean setActiveDevice(@NonNull android.bluetooth.BluetoothDevice, int);
+    field public static final String ACTION_BLE_STATE_CHANGED = "android.bluetooth.adapter.action.BLE_STATE_CHANGED";
+    field public static final String ACTION_REQUEST_BLE_SCAN_ALWAYS_AVAILABLE = "android.bluetooth.adapter.action.REQUEST_BLE_SCAN_ALWAYS_AVAILABLE";
+    field public static final int ACTIVE_DEVICE_ALL = 2; // 0x2
+    field public static final int ACTIVE_DEVICE_AUDIO = 0; // 0x0
+    field public static final int ACTIVE_DEVICE_PHONE_CALL = 1; // 0x1
+  }
+
+  public static interface BluetoothAdapter.OnMetadataChangedListener {
+    method public void onMetadataChanged(@NonNull android.bluetooth.BluetoothDevice, int, @Nullable byte[]);
+  }
+
+  public static interface BluetoothAdapter.OobDataCallback {
+    method public void onError(int);
+    method public void onOobData(int, @NonNull android.bluetooth.OobData);
+  }
+
+  public final class BluetoothDevice implements android.os.Parcelable {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean canBondWithoutDialog();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean cancelBondProcess();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean createBondOutOfBand(int, @Nullable android.bluetooth.OobData, @Nullable android.bluetooth.OobData);
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public byte[] getMetadata(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getSimAccessPermission();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isConnected();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isEncrypted();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean isInSilenceMode();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean removeBond();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setMessageAccessPermission(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setMetadata(int, @NonNull byte[]);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setPhonebookAccessPermission(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setSilenceMode(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setSimAccessPermission(int);
+    field public static final int ACCESS_ALLOWED = 1; // 0x1
+    field public static final int ACCESS_REJECTED = 2; // 0x2
+    field public static final int ACCESS_UNKNOWN = 0; // 0x0
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_SILENCE_MODE_CHANGED = "android.bluetooth.device.action.SILENCE_MODE_CHANGED";
+    field public static final String DEVICE_TYPE_DEFAULT = "Default";
+    field public static final String DEVICE_TYPE_UNTETHERED_HEADSET = "Untethered Headset";
+    field public static final String DEVICE_TYPE_WATCH = "Watch";
+    field public static final int METADATA_COMPANION_APP = 4; // 0x4
+    field public static final int METADATA_DEVICE_TYPE = 17; // 0x11
+    field public static final int METADATA_ENHANCED_SETTINGS_UI_URI = 16; // 0x10
+    field public static final int METADATA_HARDWARE_VERSION = 3; // 0x3
+    field public static final int METADATA_IS_UNTETHERED_HEADSET = 6; // 0x6
+    field public static final int METADATA_MAIN_BATTERY = 18; // 0x12
+    field public static final int METADATA_MAIN_CHARGING = 19; // 0x13
+    field public static final int METADATA_MAIN_ICON = 5; // 0x5
+    field public static final int METADATA_MAIN_LOW_BATTERY_THRESHOLD = 20; // 0x14
+    field public static final int METADATA_MANUFACTURER_NAME = 0; // 0x0
+    field public static final int METADATA_MAX_LENGTH = 2048; // 0x800
+    field public static final int METADATA_MODEL_NAME = 1; // 0x1
+    field public static final int METADATA_SOFTWARE_VERSION = 2; // 0x2
+    field public static final int METADATA_UNTETHERED_CASE_BATTERY = 12; // 0xc
+    field public static final int METADATA_UNTETHERED_CASE_CHARGING = 15; // 0xf
+    field public static final int METADATA_UNTETHERED_CASE_ICON = 9; // 0x9
+    field public static final int METADATA_UNTETHERED_CASE_LOW_BATTERY_THRESHOLD = 23; // 0x17
+    field public static final int METADATA_UNTETHERED_LEFT_BATTERY = 10; // 0xa
+    field public static final int METADATA_UNTETHERED_LEFT_CHARGING = 13; // 0xd
+    field public static final int METADATA_UNTETHERED_LEFT_ICON = 7; // 0x7
+    field public static final int METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD = 21; // 0x15
+    field public static final int METADATA_UNTETHERED_RIGHT_BATTERY = 11; // 0xb
+    field public static final int METADATA_UNTETHERED_RIGHT_CHARGING = 14; // 0xe
+    field public static final int METADATA_UNTETHERED_RIGHT_ICON = 8; // 0x8
+    field public static final int METADATA_UNTETHERED_RIGHT_LOW_BATTERY_THRESHOLD = 22; // 0x16
+  }
+
+  public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean connect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disconnect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+  }
+
+  public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public long getHiSyncId(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+  }
+
+  public final class BluetoothHidDevice implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+  }
+
+  public final class BluetoothHidHost implements android.bluetooth.BluetoothProfile {
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothMap implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
+    method public void close();
+    method protected void finalize();
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.map.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothMapClient implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.SEND_SMS}) public boolean sendMessage(@NonNull android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.net.Uri>, @NonNull String, @Nullable android.app.PendingIntent, @Nullable android.app.PendingIntent);
+  }
+
+  public final class BluetoothPan implements android.bluetooth.BluetoothProfile {
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isTetheringOn();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.TETHER_PRIVILEGED}) public void setBluetoothTethering(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED";
+    field public static final String ACTION_TETHERING_STATE_CHANGED = "android.bluetooth.action.TETHERING_STATE_CHANGED";
+    field public static final String EXTRA_LOCAL_ROLE = "android.bluetooth.pan.extra.LOCAL_ROLE";
+    field public static final String EXTRA_TETHERING_STATE = "android.bluetooth.extra.TETHERING_STATE";
+    field public static final int LOCAL_NAP_ROLE = 1; // 0x1
+    field public static final int LOCAL_PANU_ROLE = 2; // 0x2
+    field public static final int PAN_ROLE_NONE = 0; // 0x0
+    field public static final int REMOTE_NAP_ROLE = 1; // 0x1
+    field public static final int REMOTE_PANU_ROLE = 2; // 0x2
+    field public static final int TETHERING_STATE_OFF = 1; // 0x1
+    field public static final int TETHERING_STATE_ON = 2; // 0x2
+  }
+
+  public class BluetoothPbap implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public interface BluetoothProfile {
+    field public static final int A2DP_SINK = 11; // 0xb
+    field public static final int AVRCP_CONTROLLER = 12; // 0xc
+    field public static final int CONNECTION_POLICY_ALLOWED = 100; // 0x64
+    field public static final int CONNECTION_POLICY_FORBIDDEN = 0; // 0x0
+    field public static final int CONNECTION_POLICY_UNKNOWN = -1; // 0xffffffff
+    field public static final int HEADSET_CLIENT = 16; // 0x10
+    field public static final int MAP_CLIENT = 18; // 0x12
+    field public static final int PAN = 5; // 0x5
+    field public static final int PBAP_CLIENT = 17; // 0x11
+    field @Deprecated public static final int PRIORITY_OFF = 0; // 0x0
+    field @Deprecated public static final int PRIORITY_ON = 100; // 0x64
+  }
+
+  public final class BluetoothStatusCodes {
+    field public static final int ERROR_ANOTHER_ACTIVE_OOB_REQUEST = 1000; // 0x3e8
+  }
+
+  public final class BluetoothUuid {
+    method public static boolean containsAnyUuid(@Nullable android.os.ParcelUuid[], @Nullable android.os.ParcelUuid[]);
+    method @NonNull public static android.os.ParcelUuid parseUuidFrom(@Nullable byte[]);
+    field @NonNull public static final android.os.ParcelUuid A2DP_SINK;
+    field @NonNull public static final android.os.ParcelUuid A2DP_SOURCE;
+    field @NonNull public static final android.os.ParcelUuid ADV_AUDIO_DIST;
+    field @NonNull public static final android.os.ParcelUuid AVRCP_CONTROLLER;
+    field @NonNull public static final android.os.ParcelUuid AVRCP_TARGET;
+    field @NonNull public static final android.os.ParcelUuid BASE_UUID;
+    field @NonNull public static final android.os.ParcelUuid BNEP;
+    field @NonNull public static final android.os.ParcelUuid DIP;
+    field @NonNull public static final android.os.ParcelUuid HEARING_AID;
+    field @NonNull public static final android.os.ParcelUuid HFP;
+    field @NonNull public static final android.os.ParcelUuid HFP_AG;
+    field @NonNull public static final android.os.ParcelUuid HID;
+    field @NonNull public static final android.os.ParcelUuid HOGP;
+    field @NonNull public static final android.os.ParcelUuid HSP;
+    field @NonNull public static final android.os.ParcelUuid HSP_AG;
+    field @NonNull public static final android.os.ParcelUuid LE_AUDIO;
+    field @NonNull public static final android.os.ParcelUuid MAP;
+    field @NonNull public static final android.os.ParcelUuid MAS;
+    field @NonNull public static final android.os.ParcelUuid MNS;
+    field @NonNull public static final android.os.ParcelUuid NAP;
+    field @NonNull public static final android.os.ParcelUuid OBEX_OBJECT_PUSH;
+    field @NonNull public static final android.os.ParcelUuid PANU;
+    field @NonNull public static final android.os.ParcelUuid PBAP_PCE;
+    field @NonNull public static final android.os.ParcelUuid PBAP_PSE;
+    field @NonNull public static final android.os.ParcelUuid SAP;
+    field public static final int UUID_BYTES_128_BIT = 16; // 0x10
+    field public static final int UUID_BYTES_16_BIT = 2; // 0x2
+    field public static final int UUID_BYTES_32_BIT = 4; // 0x4
+    field @NonNull public static final android.os.ParcelUuid VOLUME_CONTROL;
+  }
+
+  public final class BufferConstraint implements android.os.Parcelable {
+    ctor public BufferConstraint(int, int, int);
+    method public int describeContents();
+    method public int getDefaultMillis();
+    method public int getMaxMillis();
+    method public int getMinMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BufferConstraint> CREATOR;
+  }
+
+  public final class BufferConstraints implements android.os.Parcelable {
+    ctor public BufferConstraints(@NonNull java.util.List<android.bluetooth.BufferConstraint>);
+    method public int describeContents();
+    method @Nullable public android.bluetooth.BufferConstraint forCodec(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BUFFER_CODEC_MAX_NUM = 32; // 0x20
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BufferConstraints> CREATOR;
+  }
+
+  public final class OobData implements android.os.Parcelable {
+    method @NonNull public byte[] getClassOfDevice();
+    method @NonNull public byte[] getClassicLength();
+    method @NonNull public byte[] getConfirmationHash();
+    method @NonNull public byte[] getDeviceAddressWithType();
+    method @Nullable public byte[] getDeviceName();
+    method @Nullable public byte[] getLeAppearance();
+    method @NonNull public int getLeDeviceRole();
+    method @NonNull public int getLeFlags();
+    method @Nullable public byte[] getLeTemporaryKey();
+    method @NonNull public byte[] getRandomizerHash();
+    field public static final int CLASS_OF_DEVICE_OCTETS = 3; // 0x3
+    field public static final int CONFIRMATION_OCTETS = 16; // 0x10
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.OobData> CREATOR;
+    field public static final int DEVICE_ADDRESS_OCTETS = 7; // 0x7
+    field public static final int LE_APPEARANCE_OCTETS = 2; // 0x2
+    field public static final int LE_DEVICE_FLAG_OCTETS = 1; // 0x1
+    field public static final int LE_DEVICE_ROLE_BOTH_PREFER_CENTRAL = 3; // 0x3
+    field public static final int LE_DEVICE_ROLE_BOTH_PREFER_PERIPHERAL = 2; // 0x2
+    field public static final int LE_DEVICE_ROLE_CENTRAL_ONLY = 1; // 0x1
+    field public static final int LE_DEVICE_ROLE_OCTETS = 1; // 0x1
+    field public static final int LE_DEVICE_ROLE_PERIPHERAL_ONLY = 0; // 0x0
+    field public static final int LE_FLAG_BREDR_NOT_SUPPORTED = 2; // 0x2
+    field public static final int LE_FLAG_GENERAL_DISCOVERY_MODE = 1; // 0x1
+    field public static final int LE_FLAG_LIMITED_DISCOVERY_MODE = 0; // 0x0
+    field public static final int LE_FLAG_SIMULTANEOUS_CONTROLLER = 3; // 0x3
+    field public static final int LE_FLAG_SIMULTANEOUS_HOST = 4; // 0x4
+    field public static final int LE_TK_OCTETS = 16; // 0x10
+    field public static final int OOB_LENGTH_OCTETS = 2; // 0x2
+    field public static final int RANDOMIZER_OCTETS = 16; // 0x10
+  }
+
+  public static final class OobData.ClassicBuilder {
+    ctor public OobData.ClassicBuilder(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData build();
+    method @NonNull public android.bluetooth.OobData.ClassicBuilder setClassOfDevice(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.ClassicBuilder setDeviceName(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.ClassicBuilder setRandomizerHash(@NonNull byte[]);
+  }
+
+  public static final class OobData.LeBuilder {
+    ctor public OobData.LeBuilder(@NonNull byte[], @NonNull byte[], int);
+    method @NonNull public android.bluetooth.OobData build();
+    method @NonNull public android.bluetooth.OobData.LeBuilder setDeviceName(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.LeBuilder setLeFlags(int);
+    method @NonNull public android.bluetooth.OobData.LeBuilder setLeTemporaryKey(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.LeBuilder setRandomizerHash(@NonNull byte[]);
+  }
+
+}
+
+package android.bluetooth.le {
+
+  public final class BluetoothLeScanner {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(android.os.WorkSource, android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(java.util.List<android.bluetooth.le.ScanFilter>, android.bluetooth.le.ScanSettings, android.os.WorkSource, android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void startTruncatedScan(java.util.List<android.bluetooth.le.TruncatedFilter>, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback);
+  }
+
+  public final class ResultStorageDescriptor implements android.os.Parcelable {
+    ctor public ResultStorageDescriptor(int, int, int);
+    method public int describeContents();
+    method public int getLength();
+    method public int getOffset();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ResultStorageDescriptor> CREATOR;
+  }
+
+  public final class ScanFilter implements android.os.Parcelable {
+    method public int getAddressType();
+    method @Nullable public byte[] getIrk();
+  }
+
+  public static final class ScanFilter.Builder {
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(@NonNull String, int);
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(@NonNull String, int, @NonNull byte[]);
+    field public static final int LEN_IRK_OCTETS = 16; // 0x10
+  }
+
+  public final class ScanSettings implements android.os.Parcelable {
+    field public static final int SCAN_MODE_AMBIENT_DISCOVERY = 3; // 0x3
+    field public static final int SCAN_RESULT_TYPE_ABBREVIATED = 1; // 0x1
+    field public static final int SCAN_RESULT_TYPE_FULL = 0; // 0x0
+  }
+
+  public static final class ScanSettings.Builder {
+    method public android.bluetooth.le.ScanSettings.Builder setScanResultType(int);
+  }
+
+  public final class TruncatedFilter {
+    ctor public TruncatedFilter(android.bluetooth.le.ScanFilter, java.util.List<android.bluetooth.le.ResultStorageDescriptor>);
+    method public android.bluetooth.le.ScanFilter getFilter();
+    method public java.util.List<android.bluetooth.le.ResultStorageDescriptor> getStorageDescriptors();
+  }
+
+}
+
+package android.companion {
+
+  public final class CompanionDeviceManager {
+    method @RequiresPermission(android.Manifest.permission.ASSOCIATE_COMPANION_DEVICES) public void associate(@NonNull String, @NonNull android.net.MacAddress, @NonNull byte[]);
+    method @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public boolean canPairWithoutPrompt(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public boolean isDeviceAssociatedForWifiConnection(@NonNull String, @NonNull android.net.MacAddress, @NonNull android.os.UserHandle);
+  }
+
+}
+
+package android.content {
+
+  public class ApexEnvironment {
+    method @NonNull public static android.content.ApexEnvironment getApexEnvironment(@NonNull String);
+    method @NonNull public java.io.File getCredentialProtectedDataDirForUser(@NonNull android.os.UserHandle);
+    method @NonNull public java.io.File getDeviceProtectedDataDir();
+    method @NonNull public java.io.File getDeviceProtectedDataDirForUser(@NonNull android.os.UserHandle);
+  }
+
+  public final class AttributionSource implements android.os.Parcelable {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public java.util.Set<java.lang.String> getRenouncedPermissions();
+  }
+
+  public static final class AttributionSource.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public android.content.AttributionSource.Builder setRenouncedPermissions(@Nullable java.util.Set<java.lang.String>);
+  }
+
+  public abstract class BroadcastReceiver {
+    method @NonNull public final android.os.UserHandle getSendingUser();
+  }
+
+  public class ClipboardManager extends android.text.ClipboardManager {
+    method @RequiresPermission(android.Manifest.permission.SET_CLIP_SOURCE) public void setPrimaryClipAsPackage(@NonNull android.content.ClipData, @NonNull String);
+  }
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method public int checkUriPermission(@NonNull android.net.Uri, int, int);
+  }
+
+  public class ContentProviderClient implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.REMOVE_TASKS) public void setDetectNotResponding(long);
+  }
+
+  public abstract class ContentResolver {
+    method public int checkUriPermission(@NonNull android.net.Uri, int, int);
+    method @NonNull public static android.net.Uri decodeFromFile(@NonNull java.io.File);
+    method @NonNull public static java.io.File encodeToFile(@NonNull android.net.Uri);
+    method @Nullable @RequiresPermission("android.permission.CACHE_CONTENT") public android.os.Bundle getCache(@NonNull android.net.Uri);
+    method @RequiresPermission("android.permission.CACHE_CONTENT") public void putCache(@NonNull android.net.Uri, @Nullable android.os.Bundle);
+  }
+
+  public abstract class Context {
+    method @NonNull public android.content.Context createContextAsUser(@NonNull android.os.UserHandle, int);
+    method public abstract android.content.Context createCredentialProtectedStorageContext();
+    method @NonNull public android.content.Context createPackageContextAsUser(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract java.io.File getPreloadsFileCache();
+    method public abstract boolean isCredentialProtectedStorage();
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.content.Intent registerReceiverForAllUsers(@Nullable android.content.BroadcastReceiver, @NonNull android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler);
+    method public abstract void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.os.Bundle);
+    method public abstract void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public void startActivityAsUser(@NonNull @RequiresPermission android.content.Intent, @NonNull android.os.UserHandle);
+    field public static final String APP_HIBERNATION_SERVICE = "app_hibernation";
+    field public static final String APP_INTEGRITY_SERVICE = "app_integrity";
+    field public static final String APP_PREDICTION_SERVICE = "app_prediction";
+    field public static final String BACKUP_SERVICE = "backup";
+    field public static final String BATTERY_STATS_SERVICE = "batterystats";
+    field public static final int BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS = 1048576; // 0x100000
+    field public static final int BIND_ALLOW_FOREGROUND_SERVICE_STARTS_FROM_BACKGROUND = 262144; // 0x40000
+    field public static final String CONTENT_SUGGESTIONS_SERVICE = "content_suggestions";
+    field public static final String CONTEXTHUB_SERVICE = "contexthub";
+    field public static final String ETHERNET_SERVICE = "ethernet";
+    field public static final String EUICC_CARD_SERVICE = "euicc_card";
+    field public static final String FONT_SERVICE = "font";
+    field public static final String HDMI_CONTROL_SERVICE = "hdmi_control";
+    field public static final String MEDIA_TRANSCODING_SERVICE = "media_transcoding";
+    field public static final String MUSIC_RECOGNITION_SERVICE = "music_recognition";
+    field public static final String NETD_SERVICE = "netd";
+    field public static final String NETWORK_SCORE_SERVICE = "network_score";
+    field public static final String OEM_LOCK_SERVICE = "oem_lock";
+    field public static final String PERMISSION_CONTROLLER_SERVICE = "permission_controller";
+    field public static final String PERMISSION_SERVICE = "permission";
+    field public static final String PERSISTENT_DATA_BLOCK_SERVICE = "persistent_data_block";
+    field public static final String REBOOT_READINESS_SERVICE = "reboot_readiness";
+    field public static final String ROLLBACK_SERVICE = "rollback";
+    field public static final String SEARCH_UI_SERVICE = "search_ui";
+    field public static final String SECURE_ELEMENT_SERVICE = "secure_element";
+    field public static final String SMARTSPACE_SERVICE = "smartspace";
+    field public static final String STATS_MANAGER = "stats";
+    field public static final String STATUS_BAR_SERVICE = "statusbar";
+    field public static final String SYSTEM_CONFIG_SERVICE = "system_config";
+    field public static final String SYSTEM_UPDATE_SERVICE = "system_update";
+    field public static final String TETHERING_SERVICE = "tethering";
+    field public static final String TRANSLATION_MANAGER_SERVICE = "translation";
+    field public static final String UI_TRANSLATION_SERVICE = "ui_translation";
+    field public static final String VR_SERVICE = "vrmanager";
+    field public static final String WIFI_NL80211_SERVICE = "wifinl80211";
+    field @Deprecated public static final String WIFI_RTT_SERVICE = "rttmanager";
+    field public static final String WIFI_SCANNING_SERVICE = "wifiscanner";
+  }
+
+  public final class ContextParams {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public java.util.Set<java.lang.String> getRenouncedPermissions();
+  }
+
+  public static final class ContextParams.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public android.content.ContextParams.Builder setRenouncedPermissions(@Nullable java.util.Set<java.lang.String>);
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    method public android.content.Context createCredentialProtectedStorageContext();
+    method @Nullable public java.io.File getPreloadsFileCache();
+    method public boolean isCredentialProtectedStorage();
+    method public void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field public static final String ACTION_ACTIVITY_RECOGNIZER = "android.intent.action.ACTIVITY_RECOGNIZER";
+    field public static final String ACTION_BATTERY_LEVEL_CHANGED = "android.intent.action.BATTERY_LEVEL_CHANGED";
+    field public static final String ACTION_CALL_EMERGENCY = "android.intent.action.CALL_EMERGENCY";
+    field public static final String ACTION_CALL_PRIVILEGED = "android.intent.action.CALL_PRIVILEGED";
+    field public static final String ACTION_DEVICE_CUSTOMIZATION_READY = "android.intent.action.DEVICE_CUSTOMIZATION_READY";
+    field public static final String ACTION_DIAL_EMERGENCY = "android.intent.action.DIAL_EMERGENCY";
+    field public static final String ACTION_DOMAINS_NEED_VERIFICATION = "android.intent.action.DOMAINS_NEED_VERIFICATION";
+    field public static final String ACTION_FACTORY_RESET = "android.intent.action.FACTORY_RESET";
+    field public static final String ACTION_GLOBAL_BUTTON = "android.intent.action.GLOBAL_BUTTON";
+    field public static final String ACTION_INCIDENT_REPORT_READY = "android.intent.action.INCIDENT_REPORT_READY";
+    field public static final String ACTION_INSTALL_INSTANT_APP_PACKAGE = "android.intent.action.INSTALL_INSTANT_APP_PACKAGE";
+    field public static final String ACTION_INSTANT_APP_RESOLVER_SETTINGS = "android.intent.action.INSTANT_APP_RESOLVER_SETTINGS";
+    field @Deprecated public static final String ACTION_INTENT_FILTER_NEEDS_VERIFICATION = "android.intent.action.INTENT_FILTER_NEEDS_VERIFICATION";
+    field public static final String ACTION_LOAD_DATA = "android.intent.action.LOAD_DATA";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_MANAGE_APP_PERMISSION = "android.intent.action.MANAGE_APP_PERMISSION";
+    field public static final String ACTION_MANAGE_APP_PERMISSIONS = "android.intent.action.MANAGE_APP_PERMISSIONS";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public static final String ACTION_MANAGE_DEFAULT_APP = "android.intent.action.MANAGE_DEFAULT_APP";
+    field public static final String ACTION_MANAGE_PERMISSIONS = "android.intent.action.MANAGE_PERMISSIONS";
+    field public static final String ACTION_MANAGE_PERMISSION_APPS = "android.intent.action.MANAGE_PERMISSION_APPS";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public static final String ACTION_MANAGE_SPECIAL_APP_ACCESSES = "android.intent.action.MANAGE_SPECIAL_APP_ACCESSES";
+    field public static final String ACTION_MASTER_CLEAR_NOTIFICATION = "android.intent.action.MASTER_CLEAR_NOTIFICATION";
+    field public static final String ACTION_PACKAGE_NEEDS_INTEGRITY_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_INTEGRITY_VERIFICATION";
+    field public static final String ACTION_PACKAGE_UNSUSPENDED_MANUALLY = "android.intent.action.PACKAGE_UNSUSPENDED_MANUALLY";
+    field public static final String ACTION_PENDING_INCIDENT_REPORTS_CHANGED = "android.intent.action.PENDING_INCIDENT_REPORTS_CHANGED";
+    field public static final String ACTION_PRE_BOOT_COMPLETED = "android.intent.action.PRE_BOOT_COMPLETED";
+    field public static final String ACTION_QUERY_PACKAGE_RESTART = "android.intent.action.QUERY_PACKAGE_RESTART";
+    field public static final String ACTION_RESOLVE_INSTANT_APP_PACKAGE = "android.intent.action.RESOLVE_INSTANT_APP_PACKAGE";
+    field @RequiresPermission(android.Manifest.permission.REVIEW_ACCESSIBILITY_SERVICES) public static final String ACTION_REVIEW_ACCESSIBILITY_SERVICES = "android.intent.action.REVIEW_ACCESSIBILITY_SERVICES";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_ONGOING_PERMISSION_USAGE = "android.intent.action.REVIEW_ONGOING_PERMISSION_USAGE";
+    field public static final String ACTION_REVIEW_PERMISSIONS = "android.intent.action.REVIEW_PERMISSIONS";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_PERMISSION_HISTORY = "android.intent.action.REVIEW_PERMISSION_HISTORY";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_PERMISSION_USAGE = "android.intent.action.REVIEW_PERMISSION_USAGE";
+    field public static final String ACTION_ROLLBACK_COMMITTED = "android.intent.action.ROLLBACK_COMMITTED";
+    field public static final String ACTION_SHOW_SUSPENDED_APP_DETAILS = "android.intent.action.SHOW_SUSPENDED_APP_DETAILS";
+    field @Deprecated public static final String ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED";
+    field public static final String ACTION_SPLIT_CONFIGURATION_CHANGED = "android.intent.action.SPLIT_CONFIGURATION_CHANGED";
+    field public static final String ACTION_UPGRADE_SETUP = "android.intent.action.UPGRADE_SETUP";
+    field public static final String ACTION_USER_ADDED = "android.intent.action.USER_ADDED";
+    field public static final String ACTION_USER_REMOVED = "android.intent.action.USER_REMOVED";
+    field public static final String ACTION_VOICE_ASSIST = "android.intent.action.VOICE_ASSIST";
+    field public static final String CATEGORY_LEANBACK_SETTINGS = "android.intent.category.LEANBACK_SETTINGS";
+    field public static final String EXTRA_CALLING_PACKAGE = "android.intent.extra.CALLING_PACKAGE";
+    field public static final String EXTRA_FORCE_FACTORY_RESET = "android.intent.extra.FORCE_FACTORY_RESET";
+    field public static final String EXTRA_INSTANT_APP_ACTION = "android.intent.extra.INSTANT_APP_ACTION";
+    field public static final String EXTRA_INSTANT_APP_BUNDLES = "android.intent.extra.INSTANT_APP_BUNDLES";
+    field public static final String EXTRA_INSTANT_APP_EXTRAS = "android.intent.extra.INSTANT_APP_EXTRAS";
+    field public static final String EXTRA_INSTANT_APP_FAILURE = "android.intent.extra.INSTANT_APP_FAILURE";
+    field public static final String EXTRA_INSTANT_APP_HOSTNAME = "android.intent.extra.INSTANT_APP_HOSTNAME";
+    field public static final String EXTRA_INSTANT_APP_SUCCESS = "android.intent.extra.INSTANT_APP_SUCCESS";
+    field public static final String EXTRA_INSTANT_APP_TOKEN = "android.intent.extra.INSTANT_APP_TOKEN";
+    field public static final String EXTRA_LONG_VERSION_CODE = "android.intent.extra.LONG_VERSION_CODE";
+    field public static final String EXTRA_ORIGINATING_UID = "android.intent.extra.ORIGINATING_UID";
+    field public static final String EXTRA_PACKAGES = "android.intent.extra.PACKAGES";
+    field public static final String EXTRA_PERMISSION_NAME = "android.intent.extra.PERMISSION_NAME";
+    field public static final String EXTRA_REASON = "android.intent.extra.REASON";
+    field public static final String EXTRA_REMOTE_CALLBACK = "android.intent.extra.REMOTE_CALLBACK";
+    field public static final String EXTRA_RESULT_NEEDED = "android.intent.extra.RESULT_NEEDED";
+    field public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME";
+    field public static final String EXTRA_UNKNOWN_INSTANT_APP = "android.intent.extra.UNKNOWN_INSTANT_APP";
+    field public static final String EXTRA_VERIFICATION_BUNDLE = "android.intent.extra.VERIFICATION_BUNDLE";
+    field public static final int FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT = 67108864; // 0x4000000
+    field public static final String METADATA_SETUP_VERSION = "android.SETUP_VERSION";
+  }
+
+  public class IntentFilter implements android.os.Parcelable {
+    method public final int getOrder();
+    method public final void setOrder(int);
+  }
+
+}
+
+package android.content.integrity {
+
+  public class AppIntegrityManager {
+    method @NonNull public String getCurrentRuleSetProvider();
+    method @NonNull public String getCurrentRuleSetVersion();
+    method public void updateRuleSet(@NonNull android.content.integrity.RuleSet, @NonNull android.content.IntentSender);
+    field public static final String EXTRA_STATUS = "android.content.integrity.extra.STATUS";
+    field public static final int STATUS_FAILURE = 1; // 0x1
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public abstract class IntegrityFormula {
+    method @NonNull public static android.content.integrity.IntegrityFormula all(@NonNull android.content.integrity.IntegrityFormula...);
+    method @NonNull public static android.content.integrity.IntegrityFormula any(@NonNull android.content.integrity.IntegrityFormula...);
+    method @NonNull public static android.content.integrity.IntegrityFormula not(@NonNull android.content.integrity.IntegrityFormula);
+  }
+
+  public static final class IntegrityFormula.Application {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula isPreInstalled();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeEquals(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThan(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThanOrEqualTo(@NonNull long);
+  }
+
+  public static final class IntegrityFormula.Installer {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula notAllowedByManifest();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+  }
+
+  public static final class IntegrityFormula.SourceStamp {
+    method @NonNull public static android.content.integrity.IntegrityFormula notTrusted();
+    method @NonNull public static android.content.integrity.IntegrityFormula stampCertificateHashEquals(@NonNull String);
+  }
+
+  public final class Rule implements android.os.Parcelable {
+    ctor public Rule(@NonNull android.content.integrity.IntegrityFormula, int);
+    method public int describeContents();
+    method public int getEffect();
+    method @NonNull public android.content.integrity.IntegrityFormula getFormula();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.integrity.Rule> CREATOR;
+    field public static final int DENY = 0; // 0x0
+    field public static final int FORCE_ALLOW = 1; // 0x1
+  }
+
+  public class RuleSet {
+    method @NonNull public java.util.List<android.content.integrity.Rule> getRules();
+    method @NonNull public String getVersion();
+  }
+
+  public static class RuleSet.Builder {
+    ctor public RuleSet.Builder();
+    method @NonNull public android.content.integrity.RuleSet.Builder addRules(@NonNull java.util.List<android.content.integrity.Rule>);
+    method @NonNull public android.content.integrity.RuleSet build();
+    method @NonNull public android.content.integrity.RuleSet.Builder setVersion(@NonNull String);
+  }
+
+}
+
+package android.content.om {
+
+  public final class OverlayInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCategory();
+    method @NonNull public String getPackageName();
+    method @Nullable public String getTargetOverlayableName();
+    method @NonNull public String getTargetPackageName();
+    method public int getUserId();
+    method public boolean isEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.om.OverlayInfo> CREATOR;
+  }
+
+  public class OverlayManager {
+    method @Nullable public android.content.om.OverlayInfo getOverlayInfo(@NonNull String, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public java.util.List<android.content.om.OverlayInfo> getOverlayInfosForTarget(@NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public void setEnabled(@NonNull String, boolean, @NonNull android.os.UserHandle) throws java.lang.IllegalStateException, java.lang.SecurityException;
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public void setEnabledExclusiveInCategory(@NonNull String, @NonNull android.os.UserHandle) throws java.lang.IllegalStateException, java.lang.SecurityException;
+  }
+
+}
+
+package android.content.pm {
+
+  public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    method public boolean isEncryptionAware();
+    method public boolean isInstantApp();
+    method public boolean isOem();
+    method public boolean isProduct();
+    method public boolean isVendor();
+    field public String credentialProtectedDataDir;
+    field public int targetSandboxVersion;
+  }
+
+  public class CrossProfileApps {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_PROFILES) public void startActivity(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+  }
+
+  public class DataLoaderParams {
+    method @NonNull public static final android.content.pm.DataLoaderParams forIncremental(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public static final android.content.pm.DataLoaderParams forStreaming(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public final String getArguments();
+    method @NonNull public final android.content.ComponentName getComponentName();
+    method @NonNull public final int getType();
+  }
+
+  public final class InstallationFile {
+    method public long getLengthBytes();
+    method public int getLocation();
+    method @Nullable public byte[] getMetadata();
+    method @NonNull public String getName();
+    method @Nullable public byte[] getSignature();
+  }
+
+  public final class InstantAppInfo implements android.os.Parcelable {
+    ctor public InstantAppInfo(android.content.pm.ApplicationInfo, String[], String[]);
+    ctor public InstantAppInfo(String, CharSequence, String[], String[]);
+    method public int describeContents();
+    method @Nullable public android.content.pm.ApplicationInfo getApplicationInfo();
+    method @Nullable public String[] getGrantedPermissions();
+    method @NonNull public String getPackageName();
+    method @Nullable public String[] getRequestedPermissions();
+    method @NonNull public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.pm.PackageManager);
+    method @NonNull public CharSequence loadLabel(@NonNull android.content.pm.PackageManager);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppInfo> CREATOR;
+  }
+
+  public final class InstantAppIntentFilter implements android.os.Parcelable {
+    ctor public InstantAppIntentFilter(@Nullable String, @NonNull java.util.List<android.content.IntentFilter>);
+    method public int describeContents();
+    method public java.util.List<android.content.IntentFilter> getFilters();
+    method public String getSplitName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppIntentFilter> CREATOR;
+  }
+
+  public final class InstantAppRequestInfo implements android.os.Parcelable {
+    ctor public InstantAppRequestInfo(@NonNull android.content.Intent, @Nullable int[], @NonNull android.os.UserHandle, boolean, @NonNull String);
+    method public int describeContents();
+    method @Nullable public int[] getHostDigestPrefix();
+    method @NonNull public android.content.Intent getIntent();
+    method @NonNull public String getToken();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public boolean isRequesterInstantApp();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppRequestInfo> CREATOR;
+  }
+
+  public final class InstantAppResolveInfo implements android.os.Parcelable {
+    ctor public InstantAppResolveInfo(@NonNull android.content.pm.InstantAppResolveInfo.InstantAppDigest, @Nullable String, @Nullable java.util.List<android.content.pm.InstantAppIntentFilter>, int);
+    ctor public InstantAppResolveInfo(@NonNull android.content.pm.InstantAppResolveInfo.InstantAppDigest, @Nullable String, @Nullable java.util.List<android.content.pm.InstantAppIntentFilter>, long, @Nullable android.os.Bundle);
+    ctor public InstantAppResolveInfo(@NonNull String, @Nullable String, @Nullable java.util.List<android.content.pm.InstantAppIntentFilter>);
+    ctor public InstantAppResolveInfo(@Nullable android.os.Bundle);
+    method public int describeContents();
+    method public byte[] getDigestBytes();
+    method public int getDigestPrefix();
+    method @Nullable public android.os.Bundle getExtras();
+    method public java.util.List<android.content.pm.InstantAppIntentFilter> getIntentFilters();
+    method public long getLongVersionCode();
+    method public String getPackageName();
+    method @Deprecated public int getVersionCode();
+    method public boolean shouldLetInstallerDecide();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo> CREATOR;
+  }
+
+  public static final class InstantAppResolveInfo.InstantAppDigest implements android.os.Parcelable {
+    ctor public InstantAppResolveInfo.InstantAppDigest(@NonNull String);
+    method public int describeContents();
+    method public byte[][] getDigestBytes();
+    method public int[] getDigestPrefix();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo.InstantAppDigest> CREATOR;
+    field public static final android.content.pm.InstantAppResolveInfo.InstantAppDigest UNDEFINED;
+  }
+
+  public final class IntentFilterVerificationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.Set<java.lang.String> getDomains();
+    method public String getPackageName();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.IntentFilterVerificationInfo> CREATOR;
+  }
+
+  public class LauncherApps {
+    method @Nullable public android.content.pm.LauncherApps.AppUsageLimit getAppUsageLimit(@NonNull String, @NonNull android.os.UserHandle);
+  }
+
+  public static final class LauncherApps.AppUsageLimit implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getTotalUsageLimit();
+    method public long getUsageRemaining();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LauncherApps.AppUsageLimit> CREATOR;
+  }
+
+  public static class LauncherApps.ShortcutQuery {
+    field @RequiresPermission(android.Manifest.permission.ACCESS_SHORTCUTS) public static final int FLAG_GET_PERSONS_DATA = 2048; // 0x800
+  }
+
+  public class PackageInstaller {
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setPermissionsResult(int, boolean);
+    field public static final int DATA_LOADER_TYPE_INCREMENTAL = 2; // 0x2
+    field public static final int DATA_LOADER_TYPE_NONE = 0; // 0x0
+    field public static final int DATA_LOADER_TYPE_STREAMING = 1; // 0x1
+    field public static final String EXTRA_DATA_LOADER_TYPE = "android.content.pm.extra.DATA_LOADER_TYPE";
+    field public static final int LOCATION_DATA_APP = 0; // 0x0
+    field public static final int LOCATION_MEDIA_DATA = 2; // 0x2
+    field public static final int LOCATION_MEDIA_OBB = 1; // 0x1
+  }
+
+  public static class PackageInstaller.Session implements java.io.Closeable {
+    method @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public void addFile(int, @NonNull String, long, @NonNull byte[], @Nullable byte[]);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void commitTransferred(@NonNull android.content.IntentSender);
+    method @Nullable @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public android.content.pm.DataLoaderParams getDataLoaderParams();
+    method @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public void removeFile(int, @NonNull String);
+  }
+
+  public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
+    method public boolean getAllocateAggressive();
+    method @Deprecated public boolean getAllowDowngrade();
+    method public int getAutoRevokePermissionsMode();
+    method public boolean getDontKillApp();
+    method public boolean getEnableRollback();
+    method @Nullable public String[] getGrantedRuntimePermissions();
+    method public boolean getInstallAsFullApp(boolean);
+    method public boolean getInstallAsInstantApp(boolean);
+    method public boolean getInstallAsVirtualPreload();
+    method public boolean getRequestDowngrade();
+    method public int getRollbackDataPolicy();
+    method @NonNull public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions();
+  }
+
+  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public void setAllocateAggressive(boolean);
+    method @Deprecated public void setAllowDowngrade(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.INSTALL_PACKAGES, "com.android.permission.USE_INSTALLER_V2"}) public void setDataLoaderParams(@NonNull android.content.pm.DataLoaderParams);
+    method public void setDontKillApp(boolean);
+    method public void setEnableRollback(boolean);
+    method public void setEnableRollback(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS) public void setGrantedRuntimePermissions(String[]);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setInstallAsApex();
+    method public void setInstallAsInstantApp(boolean);
+    method public void setInstallAsVirtualPreload();
+    method public void setRequestDowngrade(boolean);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged();
+  }
+
+  public class PackageItemInfo {
+    method public static void forceSafeLabels();
+    method @Deprecated @NonNull public CharSequence loadSafeLabel(@NonNull android.content.pm.PackageManager);
+    method @NonNull public CharSequence loadSafeLabel(@NonNull android.content.pm.PackageManager, @FloatRange(from=0) float, int);
+  }
+
+  public abstract class PackageManager {
+    method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void addOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public abstract boolean arePermissionsIndividuallyControlled();
+    method @NonNull public abstract java.util.List<android.content.IntentFilter> getAllIntentFilters(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.pm.ApplicationInfo getApplicationInfoAsUser(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.content.pm.dex.ArtManager getArtManager();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_SHARED_LIBRARIES) public java.util.List<android.content.pm.SharedLibraryInfo> getDeclaredSharedLibraries(@NonNull String, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract String getDefaultBrowserPackageNameAsUser(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.SET_HARMFUL_APP_WARNINGS) public CharSequence getHarmfulAppWarning(@NonNull String);
+    method @Nullable public String getIncidentReportApproverPackageName();
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_INSTANT_APPS) public abstract android.graphics.drawable.Drawable getInstantAppIcon(String);
+    method @Nullable public abstract android.content.ComponentName getInstantAppInstallerComponent();
+    method @Nullable public abstract android.content.ComponentName getInstantAppResolverSettingsComponent();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_INSTANT_APPS) public abstract java.util.List<android.content.pm.InstantAppInfo> getInstantApps();
+    method @Deprecated @NonNull public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(@NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract int getIntentVerificationStatusAsUser(@NonNull String, int);
+    method @android.content.pm.PackageManager.PermissionFlags @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS, android.Manifest.permission.GET_RUNTIME_PERMISSIONS}) public abstract int getPermissionFlags(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] getUnsuspendablePackages(@NonNull String[]);
+    method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public abstract void grantRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @Deprecated public abstract int installExistingPackage(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public abstract int installExistingPackage(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceiversAsUser(@NonNull android.content.Intent, int, android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryIntentActivitiesAsUser(@NonNull android.content.Intent, int, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProvidersAsUser(@NonNull android.content.Intent, int, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryIntentServicesAsUser(@NonNull android.content.Intent, int, @NonNull android.os.UserHandle);
+    method public abstract void registerDexModule(@NonNull String, @Nullable android.content.pm.PackageManager.DexModuleRegisterCallback);
+    method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void removeOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public void replacePreferredActivity(@NonNull android.content.IntentFilter, int, @NonNull java.util.List<android.content.ComponentName>, @NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public abstract void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle, @NonNull String);
+    method public void sendDeviceCustomizationReadyBroadcast();
+    method @RequiresPermission(allOf={android.Manifest.permission.SET_PREFERRED_APPLICATIONS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public abstract boolean setDefaultBrowserPackageNameAsUser(@Nullable String, int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setDistractingPackageRestrictions(@NonNull String[], int);
+    method @RequiresPermission(android.Manifest.permission.SET_HARMFUL_APP_WARNINGS) public void setHarmfulAppWarning(@NonNull String, @Nullable CharSequence);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setPackagesSuspended(@Nullable String[], boolean, @Nullable android.os.PersistableBundle, @Nullable android.os.PersistableBundle, @Nullable String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setPackagesSuspended(@Nullable String[], boolean, @Nullable android.os.PersistableBundle, @Nullable android.os.PersistableBundle, @Nullable android.content.pm.SuspendDialogInfo);
+    method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public void setSyntheticAppDetailsActivityEnabled(@NonNull String, boolean);
+    method public void setSystemAppState(@NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public abstract void setUpdateAvailable(@NonNull String, boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) public abstract boolean updateIntentVerificationStatusAsUser(@NonNull String, int, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS}) public abstract void updatePermissionFlags(@NonNull String, @NonNull String, @android.content.pm.PackageManager.PermissionFlags int, @android.content.pm.PackageManager.PermissionFlags int, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.INTENT_FILTER_VERIFICATION_AGENT) public abstract void verifyIntentFilter(int, int, @NonNull java.util.List<java.lang.String>);
+    field public static final String ACTION_REQUEST_PERMISSIONS = "android.content.pm.action.REQUEST_PERMISSIONS";
+    field public static final String EXTRA_REQUEST_PERMISSIONS_NAMES = "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES";
+    field public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS = "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS";
+    field public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio";
+    field public static final String FEATURE_CONTEXT_HUB = "android.hardware.context_hub";
+    field public static final String FEATURE_INCREMENTAL_DELIVERY = "android.software.incremental_delivery";
+    field public static final String FEATURE_REBOOT_ESCROW = "android.hardware.reboot_escrow";
+    field public static final String FEATURE_TELEPHONY_CARRIERLOCK = "android.hardware.telephony.carrierlock";
+    field public static final String FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION = "android.hardware.telephony.ims.singlereg";
+    field public static final int FLAGS_PERMISSION_RESERVED_PERMISSION_CONTROLLER = -268435456; // 0xf0000000
+    field public static final int FLAG_PERMISSION_APPLY_RESTRICTION = 16384; // 0x4000
+    field public static final int FLAG_PERMISSION_AUTO_REVOKED = 131072; // 0x20000
+    field public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 32; // 0x20
+    field public static final int FLAG_PERMISSION_GRANTED_BY_ROLE = 32768; // 0x8000
+    field public static final int FLAG_PERMISSION_ONE_TIME = 65536; // 0x10000
+    field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
+    field public static final int FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT = 2048; // 0x800
+    field public static final int FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT = 4096; // 0x1000
+    field public static final int FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT = 8192; // 0x2000
+    field public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 64; // 0x40
+    field public static final int FLAG_PERMISSION_REVOKED_COMPAT = 8; // 0x8
+    field @Deprecated public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 8; // 0x8
+    field public static final int FLAG_PERMISSION_REVOKE_WHEN_REQUESTED = 128; // 0x80
+    field public static final int FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY = 524288; // 0x80000
+    field public static final int FLAG_PERMISSION_SYSTEM_FIXED = 16; // 0x10
+    field public static final int FLAG_PERMISSION_USER_FIXED = 2; // 0x2
+    field public static final int FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED = 512; // 0x200
+    field public static final int FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED = 256; // 0x100
+    field public static final int FLAG_PERMISSION_USER_SET = 1; // 0x1
+    field public static final int INSTALL_FAILED_ALREADY_EXISTS = -1; // 0xffffffff
+    field public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13; // 0xfffffff3
+    field public static final int INSTALL_FAILED_CONTAINER_ERROR = -18; // 0xffffffee
+    field public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16; // 0xfffffff0
+    field public static final int INSTALL_FAILED_DEXOPT = -11; // 0xfffffff5
+    field public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5; // 0xfffffffb
+    field public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4; // 0xfffffffc
+    field public static final int INSTALL_FAILED_INTERNAL_ERROR = -110; // 0xffffff92
+    field public static final int INSTALL_FAILED_INVALID_APK = -2; // 0xfffffffe
+    field public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19; // 0xffffffed
+    field public static final int INSTALL_FAILED_INVALID_URI = -3; // 0xfffffffd
+    field public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20; // 0xffffffec
+    field public static final int INSTALL_FAILED_MISSING_FEATURE = -17; // 0xffffffef
+    field public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9; // 0xfffffff7
+    field public static final int INSTALL_FAILED_NEWER_SDK = -14; // 0xfffffff2
+    field public static final int INSTALL_FAILED_NO_SHARED_USER = -6; // 0xfffffffa
+    field public static final int INSTALL_FAILED_OLDER_SDK = -12; // 0xfffffff4
+    field public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23; // 0xffffffe9
+    field public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; // 0xffffffe6
+    field public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10; // 0xfffffff6
+    field public static final int INSTALL_FAILED_SANDBOX_VERSION_DOWNGRADE = -27; // 0xffffffe5
+    field public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8; // 0xfffffff8
+    field public static final int INSTALL_FAILED_TEST_ONLY = -15; // 0xfffffff1
+    field public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7; // 0xfffffff9
+    field public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22; // 0xffffffea
+    field public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21; // 0xffffffeb
+    field public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101; // 0xffffff9b
+    field public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106; // 0xffffff96
+    field public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107; // 0xffffff95
+    field public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105; // 0xffffff97
+    field public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104; // 0xffffff98
+    field public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109; // 0xffffff93
+    field public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108; // 0xffffff94
+    field public static final int INSTALL_PARSE_FAILED_NOT_APK = -100; // 0xffffff9c
+    field public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103; // 0xffffff99
+    field public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102; // 0xffffff9a
+    field public static final int INSTALL_SUCCEEDED = 1; // 0x1
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS = 2; // 0x2
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK = 4; // 0x4
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK = 1; // 0x1
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER = 3; // 0x3
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED = 0; // 0x0
+    field @Deprecated public static final int INTENT_FILTER_VERIFICATION_FAILURE = -1; // 0xffffffff
+    field @Deprecated public static final int INTENT_FILTER_VERIFICATION_SUCCESS = 1; // 0x1
+    field @Deprecated public static final int MASK_PERMISSION_FLAGS = 255; // 0xff
+    field public static final int MATCH_ANY_USER = 4194304; // 0x400000
+    field public static final int MATCH_FACTORY_ONLY = 2097152; // 0x200000
+    field public static final int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS = 536870912; // 0x20000000
+    field public static final int MATCH_INSTANT = 8388608; // 0x800000
+    field public static final int MODULE_APEX_NAME = 1; // 0x1
+    field public static final int RESTRICTION_HIDE_FROM_SUGGESTIONS = 1; // 0x1
+    field public static final int RESTRICTION_HIDE_NOTIFICATIONS = 2; // 0x2
+    field public static final int RESTRICTION_NONE = 0; // 0x0
+    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN = 0; // 0x0
+    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_VISIBLE = 1; // 0x1
+    field public static final int SYSTEM_APP_STATE_INSTALLED = 2; // 0x2
+    field public static final int SYSTEM_APP_STATE_UNINSTALLED = 3; // 0x3
+  }
+
+  public abstract static class PackageManager.DexModuleRegisterCallback {
+    ctor public PackageManager.DexModuleRegisterCallback();
+    method public abstract void onDexModuleRegistered(String, boolean, String);
+  }
+
+  public static interface PackageManager.OnPermissionsChangedListener {
+    method public void onPermissionsChanged(int);
+  }
+
+  @IntDef(prefix={"FLAG_PERMISSION_"}, value={android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET, android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE, android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT, android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME, android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PackageManager.PermissionFlags {
+  }
+
+  public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    field @StringRes public final int backgroundRequestDetailResourceId;
+    field @StringRes public final int backgroundRequestResourceId;
+    field @StringRes public final int requestDetailResourceId;
+    field @StringRes public int requestRes;
+  }
+
+  public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    field public static final int FLAG_REMOVED = 2; // 0x2
+    field public static final int PROTECTION_FLAG_APP_PREDICTOR = 2097152; // 0x200000
+    field public static final int PROTECTION_FLAG_COMPANION = 8388608; // 0x800000
+    field public static final int PROTECTION_FLAG_CONFIGURATOR = 524288; // 0x80000
+    field public static final int PROTECTION_FLAG_DOCUMENTER = 262144; // 0x40000
+    field public static final int PROTECTION_FLAG_INCIDENT_REPORT_APPROVER = 1048576; // 0x100000
+    field public static final int PROTECTION_FLAG_KNOWN_SIGNER = 134217728; // 0x8000000
+    field public static final int PROTECTION_FLAG_OEM = 16384; // 0x4000
+    field public static final int PROTECTION_FLAG_RECENTS = 33554432; // 0x2000000
+    field public static final int PROTECTION_FLAG_RETAIL_DEMO = 16777216; // 0x1000000
+    field public static final int PROTECTION_FLAG_ROLE = 67108864; // 0x4000000
+    field public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 65536; // 0x10000
+    field @Deprecated public static final int PROTECTION_FLAG_WELLBEING = 131072; // 0x20000
+    field @Nullable public final String backgroundPermission;
+    field @StringRes public int requestRes;
+  }
+
+  public class ResolveInfo implements android.os.Parcelable {
+    field public boolean handleAllWebDataURI;
+  }
+
+  public final class ShortcutInfo implements android.os.Parcelable {
+    method @Nullable public android.app.Person[] getPersons();
+  }
+
+  public class ShortcutManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_APP_PREDICTIONS) @WorkerThread public java.util.List<android.content.pm.ShortcutManager.ShareShortcutInfo> getShareTargets(@NonNull android.content.IntentFilter);
+    method public boolean hasShareTargets(@NonNull String);
+  }
+
+  public static final class ShortcutManager.ShareShortcutInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.pm.ShortcutInfo getShortcutInfo();
+    method @NonNull public android.content.ComponentName getTargetComponent();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ShortcutManager.ShareShortcutInfo> CREATOR;
+  }
+
+  public final class SuspendDialogInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BUTTON_ACTION_MORE_DETAILS = 0; // 0x0
+    field public static final int BUTTON_ACTION_UNSUSPEND = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SuspendDialogInfo> CREATOR;
+  }
+
+  public static final class SuspendDialogInfo.Builder {
+    ctor public SuspendDialogInfo.Builder();
+    method @NonNull public android.content.pm.SuspendDialogInfo build();
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setIcon(@DrawableRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setMessage(@NonNull String);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setMessage(@StringRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setNeutralButtonAction(int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setNeutralButtonText(@StringRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setNeutralButtonText(@NonNull String);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setTitle(@StringRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setTitle(@NonNull String);
+  }
+
+}
+
+package android.content.pm.dex {
+
+  public class ArtManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_RUNTIME_PROFILES, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean isRuntimeProfilingEnabled(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_RUNTIME_PROFILES, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void snapshotRuntimeProfile(int, @Nullable String, @Nullable String, @NonNull java.util.concurrent.Executor, @NonNull android.content.pm.dex.ArtManager.SnapshotRuntimeProfileCallback);
+    field public static final int PROFILE_APPS = 0; // 0x0
+    field public static final int PROFILE_BOOT_IMAGE = 1; // 0x1
+    field public static final int SNAPSHOT_FAILED_CODE_PATH_NOT_FOUND = 1; // 0x1
+    field public static final int SNAPSHOT_FAILED_INTERNAL_ERROR = 2; // 0x2
+    field public static final int SNAPSHOT_FAILED_PACKAGE_NOT_FOUND = 0; // 0x0
+  }
+
+  public abstract static class ArtManager.SnapshotRuntimeProfileCallback {
+    ctor public ArtManager.SnapshotRuntimeProfileCallback();
+    method public abstract void onError(int);
+    method public abstract void onSuccess(android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package android.content.pm.permission {
+
+  @Deprecated public final class RuntimePermissionPresentationInfo implements android.os.Parcelable {
+    ctor @Deprecated public RuntimePermissionPresentationInfo(CharSequence, boolean, boolean);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public CharSequence getLabel();
+    method @Deprecated public boolean isGranted();
+    method @Deprecated public boolean isStandard();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.content.pm.permission.RuntimePermissionPresentationInfo> CREATOR;
+  }
+
+}
+
+package android.content.pm.verify.domain {
+
+  public final class DomainOwner implements android.os.Parcelable {
+    ctor public DomainOwner(@NonNull String, boolean);
+    method public int describeContents();
+    method @NonNull public String getPackageName();
+    method public boolean isOverrideable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainOwner> CREATOR;
+  }
+
+  public final class DomainVerificationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.Integer> getHostToStateMap();
+    method @NonNull public java.util.UUID getIdentifier();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainVerificationInfo> CREATOR;
+    field public static final int STATE_FIRST_VERIFIER_DEFINED = 1024; // 0x400
+    field public static final int STATE_MODIFIABLE_UNVERIFIED = 3; // 0x3
+    field public static final int STATE_MODIFIABLE_VERIFIED = 4; // 0x4
+    field public static final int STATE_NO_RESPONSE = 0; // 0x0
+    field public static final int STATE_SUCCESS = 1; // 0x1
+    field public static final int STATE_UNMODIFIABLE = 2; // 0x2
+  }
+
+  public final class DomainVerificationManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.DOMAIN_VERIFICATION_AGENT) public android.content.pm.verify.domain.DomainVerificationInfo getDomainVerificationInfo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION) public java.util.SortedSet<android.content.pm.verify.domain.DomainOwner> getOwnersForDomain(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.DOMAIN_VERIFICATION_AGENT) public java.util.List<java.lang.String> queryValidVerificationPackageNames();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION) public void setDomainVerificationLinkHandlingAllowed(@NonNull String, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @CheckResult @RequiresPermission(android.Manifest.permission.DOMAIN_VERIFICATION_AGENT) public int setDomainVerificationStatus(@NonNull java.util.UUID, @NonNull java.util.Set<java.lang.String>, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @CheckResult @RequiresPermission(android.Manifest.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION) public int setDomainVerificationUserSelection(@NonNull java.util.UUID, @NonNull java.util.Set<java.lang.String>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+    field public static final int ERROR_DOMAIN_SET_ID_INVALID = 1; // 0x1
+    field public static final int ERROR_UNABLE_TO_APPROVE = 3; // 0x3
+    field public static final int ERROR_UNKNOWN_DOMAIN = 2; // 0x2
+    field public static final String EXTRA_VERIFICATION_REQUEST = "android.content.pm.verify.domain.extra.VERIFICATION_REQUEST";
+    field public static final int STATUS_OK = 0; // 0x0
+  }
+
+  public final class DomainVerificationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<java.lang.String> getPackageNames();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainVerificationRequest> CREATOR;
+  }
+
+  public final class DomainVerificationUserState implements android.os.Parcelable {
+    method @NonNull public java.util.UUID getIdentifier();
+  }
+
+}
+
+package android.content.rollback {
+
+  public final class PackageRollbackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getPackageName();
+    method @NonNull public android.content.pm.VersionedPackage getVersionRolledBackFrom();
+    method @NonNull public android.content.pm.VersionedPackage getVersionRolledBackTo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.PackageRollbackInfo> CREATOR;
+  }
+
+  public final class RollbackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.content.pm.VersionedPackage> getCausePackages();
+    method public int getCommittedSessionId();
+    method @NonNull public java.util.List<android.content.rollback.PackageRollbackInfo> getPackages();
+    method public int getRollbackId();
+    method public boolean isStaged();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.RollbackInfo> CREATOR;
+  }
+
+  public final class RollbackManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, "android.permission.TEST_MANAGE_ROLLBACKS"}) public void commitRollback(int, @NonNull java.util.List<android.content.pm.VersionedPackage>, @NonNull android.content.IntentSender);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, "android.permission.TEST_MANAGE_ROLLBACKS"}) public java.util.List<android.content.rollback.RollbackInfo> getAvailableRollbacks();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, "android.permission.TEST_MANAGE_ROLLBACKS"}) public java.util.List<android.content.rollback.RollbackInfo> getRecentlyCommittedRollbacks();
+    field public static final String EXTRA_STATUS = "android.content.rollback.extra.STATUS";
+    field public static final String EXTRA_STATUS_MESSAGE = "android.content.rollback.extra.STATUS_MESSAGE";
+    field public static final int STATUS_FAILURE = 1; // 0x1
+    field public static final int STATUS_FAILURE_INSTALL = 3; // 0x3
+    field public static final int STATUS_FAILURE_ROLLBACK_UNAVAILABLE = 2; // 0x2
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.debug {
+
+  public class AdbManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_DEBUGGING) public boolean isAdbWifiQrSupported();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_DEBUGGING) public boolean isAdbWifiSupported();
+  }
+
+}
+
+package android.graphics.fonts {
+
+  public final class FontFamilyUpdateRequest {
+    method @NonNull public java.util.List<android.graphics.fonts.FontFamilyUpdateRequest.FontFamily> getFontFamilies();
+    method @NonNull public java.util.List<android.graphics.fonts.FontFileUpdateRequest> getFontFileUpdateRequests();
+  }
+
+  public static final class FontFamilyUpdateRequest.Builder {
+    ctor public FontFamilyUpdateRequest.Builder();
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Builder addFontFamily(@NonNull android.graphics.fonts.FontFamilyUpdateRequest.FontFamily);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Builder addFontFileUpdateRequest(@NonNull android.graphics.fonts.FontFileUpdateRequest);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest build();
+  }
+
+  public static final class FontFamilyUpdateRequest.Font {
+    method @NonNull public java.util.List<android.graphics.fonts.FontVariationAxis> getAxes();
+    method @IntRange(from=0) public int getIndex();
+    method @NonNull public String getPostScriptName();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+  }
+
+  public static final class FontFamilyUpdateRequest.Font.Builder {
+    ctor public FontFamilyUpdateRequest.Font.Builder(@NonNull String, @NonNull android.graphics.fonts.FontStyle);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Font build();
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Font.Builder setAxes(@NonNull java.util.List<android.graphics.fonts.FontVariationAxis>);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Font.Builder setIndex(@IntRange(from=0) int);
+  }
+
+  public static final class FontFamilyUpdateRequest.FontFamily {
+    method @NonNull public java.util.List<android.graphics.fonts.FontFamilyUpdateRequest.Font> getFonts();
+    method @NonNull public String getName();
+  }
+
+  public static final class FontFamilyUpdateRequest.FontFamily.Builder {
+    ctor public FontFamilyUpdateRequest.FontFamily.Builder(@NonNull String, @NonNull java.util.List<android.graphics.fonts.FontFamilyUpdateRequest.Font>);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.FontFamily.Builder addFont(@NonNull android.graphics.fonts.FontFamilyUpdateRequest.Font);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.FontFamily build();
+  }
+
+  public final class FontFileUpdateRequest {
+    ctor public FontFileUpdateRequest(@NonNull android.os.ParcelFileDescriptor, @NonNull byte[]);
+    method @NonNull public android.os.ParcelFileDescriptor getParcelFileDescriptor();
+    method @NonNull public byte[] getSignature();
+  }
+
+  public class FontManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public android.text.FontConfig getFontConfig();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public int updateFontFamily(@NonNull android.graphics.fonts.FontFamilyUpdateRequest, @IntRange(from=0) int);
+    field public static final int RESULT_ERROR_DOWNGRADING = -5; // 0xfffffffb
+    field public static final int RESULT_ERROR_FAILED_TO_WRITE_FONT_FILE = -1; // 0xffffffff
+    field public static final int RESULT_ERROR_FAILED_UPDATE_CONFIG = -6; // 0xfffffffa
+    field public static final int RESULT_ERROR_FONT_NOT_FOUND = -9; // 0xfffffff7
+    field public static final int RESULT_ERROR_FONT_UPDATER_DISABLED = -7; // 0xfffffff9
+    field public static final int RESULT_ERROR_INVALID_FONT_FILE = -3; // 0xfffffffd
+    field public static final int RESULT_ERROR_INVALID_FONT_NAME = -4; // 0xfffffffc
+    field public static final int RESULT_ERROR_VERIFICATION_FAILURE = -2; // 0xfffffffe
+    field public static final int RESULT_ERROR_VERSION_MISMATCH = -8; // 0xfffffff8
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.hardware {
+
+  public final class Sensor {
+    method public java.util.UUID getUuid();
+    method public boolean isDataInjectionSupported();
+    field public static final String STRING_TYPE_DYNAMIC_SENSOR_META = "android.sensor.dynamic_sensor_meta";
+    field public static final String STRING_TYPE_WRIST_TILT_GESTURE = "android.sensor.wrist_tilt_gesture";
+    field public static final int TYPE_DYNAMIC_SENSOR_META = 32; // 0x20
+    field public static final int TYPE_WRIST_TILT_GESTURE = 26; // 0x1a
+  }
+
+  public abstract class SensorManager {
+    method public boolean initDataInjection(boolean);
+    method public boolean injectSensorData(android.hardware.Sensor, float[], int, long);
+  }
+
+  public final class SensorPrivacyManager {
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void addSensorPrivacyListener(int, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void addSensorPrivacyListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public boolean isSensorPrivacyEnabled(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void removeSensorPrivacyListener(int, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
+  }
+
+  public static interface SensorPrivacyManager.OnSensorPrivacyChangedListener {
+    method public void onSensorPrivacyChanged(int, boolean);
+  }
+
+}
+
+package android.hardware.biometrics {
+
+  public static interface BiometricManager.Authenticators {
+    field @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static final int BIOMETRIC_CONVENIENCE = 4095; // 0xfff
+    field @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static final int EMPTY_SET = 0; // 0x0
+  }
+
+}
+
+package android.hardware.camera2 {
+
+  public abstract class CameraDevice implements java.lang.AutoCloseable {
+    method @Deprecated public abstract void createCustomCaptureSession(android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, int, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    field public static final int SESSION_OPERATION_MODE_CONSTRAINED_HIGH_SPEED = 1; // 0x1
+    field public static final int SESSION_OPERATION_MODE_NORMAL = 0; // 0x0
+    field public static final int SESSION_OPERATION_MODE_VENDOR_START = 32768; // 0x8000
+  }
+
+  public final class CameraManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.SYSTEM_CAMERA, android.Manifest.permission.CAMERA}) public void openCamera(@NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraManager.AvailabilityCallback {
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraClosed(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraOpened(@NonNull String, @NonNull String);
+  }
+
+}
+
+package android.hardware.camera2.params {
+
+  public final class OutputConfiguration implements android.os.Parcelable {
+    ctor public OutputConfiguration(@NonNull android.view.Surface, int);
+    ctor public OutputConfiguration(int, @NonNull android.view.Surface, int);
+    method public int getRotation();
+    field public static final int ROTATION_0 = 0; // 0x0
+    field public static final int ROTATION_180 = 2; // 0x2
+    field public static final int ROTATION_270 = 3; // 0x3
+    field public static final int ROTATION_90 = 1; // 0x1
+  }
+
+}
+
+package android.hardware.display {
+
+  public final class AmbientBrightnessDayStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public float[] getBucketBoundaries();
+    method public java.time.LocalDate getLocalDate();
+    method public float[] getStats();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.AmbientBrightnessDayStats> CREATOR;
+  }
+
+  public final class BrightnessChangeEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessChangeEvent> CREATOR;
+    field public final float batteryLevel;
+    field public final float brightness;
+    field public final long colorSampleDuration;
+    field public final int colorTemperature;
+    field @Nullable public final long[] colorValueBuckets;
+    field public final boolean isDefaultBrightnessConfig;
+    field public final boolean isUserSetBrightness;
+    field public final float lastBrightness;
+    field public final long[] luxTimestamps;
+    field public final float[] luxValues;
+    field public final boolean nightMode;
+    field public final String packageName;
+    field public final float powerBrightnessFactor;
+    field public final boolean reduceBrightColors;
+    field public final float reduceBrightColorsOffset;
+    field public final int reduceBrightColorsStrength;
+    field public final long timeStamp;
+    field @NonNull public final String uniqueDisplayId;
+  }
+
+  public final class BrightnessConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByCategory(int);
+    method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String);
+    method public android.util.Pair<float[],float[]> getCurve();
+    method public float getShortTermModelLowerLuxMultiplier();
+    method public long getShortTermModelTimeoutMillis();
+    method public float getShortTermModelUpperLuxMultiplier();
+    method public boolean shouldCollectColorSamples();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> CREATOR;
+    field public static final long SHORT_TERM_TIMEOUT_UNSET = -1L; // 0xffffffffffffffffL
+  }
+
+  public static class BrightnessConfiguration.Builder {
+    ctor public BrightnessConfiguration.Builder(float[], float[]);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByCategory(int, @NonNull android.hardware.display.BrightnessCorrection);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByPackageName(@NonNull String, @NonNull android.hardware.display.BrightnessCorrection);
+    method @NonNull public android.hardware.display.BrightnessConfiguration build();
+    method public int getMaxCorrectionsByCategory();
+    method public int getMaxCorrectionsByPackageName();
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelLowerLuxMultiplier(@FloatRange(from=0.0f) float);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelTimeoutMillis(long);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelUpperLuxMultiplier(@FloatRange(from=0.0f) float);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShouldCollectColorSamples(boolean);
+  }
+
+  public final class BrightnessCorrection implements android.os.Parcelable {
+    method @FloatRange(from=0.0) public float apply(@FloatRange(from=0.0) float);
+    method @NonNull public static android.hardware.display.BrightnessCorrection createScaleAndTranslateLog(float, float);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessCorrection> CREATOR;
+  }
+
+  public final class ColorDisplayManager {
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public int getNightDisplayAutoMode();
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public int getTransformCapabilities();
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setAppSaturationLevel(@NonNull String, @IntRange(from=0, to=100) int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setNightDisplayAutoMode(int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setNightDisplayCustomEndTime(@NonNull java.time.LocalTime);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setNightDisplayCustomStartTime(@NonNull java.time.LocalTime);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setSaturationLevel(@IntRange(from=0, to=100) int);
+    field public static final int AUTO_MODE_CUSTOM_TIME = 1; // 0x1
+    field public static final int AUTO_MODE_DISABLED = 0; // 0x0
+    field public static final int AUTO_MODE_TWILIGHT = 2; // 0x2
+    field public static final int CAPABILITY_HARDWARE_ACCELERATION_GLOBAL = 2; // 0x2
+    field public static final int CAPABILITY_HARDWARE_ACCELERATION_PER_APP = 4; // 0x4
+    field public static final int CAPABILITY_NONE = 0; // 0x0
+    field public static final int CAPABILITY_PROTECTED_CONTENT = 1; // 0x1
+  }
+
+  public final class DisplayManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS) public java.util.List<android.hardware.display.AmbientBrightnessDayStats> getAmbientBrightnessStats();
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getBrightnessConfiguration();
+    method @Nullable @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getBrightnessConfigurationForDisplay(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.BRIGHTNESS_SLIDER_USAGE) public java.util.List<android.hardware.display.BrightnessChangeEvent> getBrightnessEvents();
+    method @Nullable @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getDefaultBrightnessConfiguration();
+    method public android.util.Pair<float[],float[]> getMinimumBrightnessCurve();
+    method public android.graphics.Point getStableDisplaySize();
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public void setBrightnessConfiguration(android.hardware.display.BrightnessConfiguration);
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public void setBrightnessConfigurationForDisplay(@NonNull android.hardware.display.BrightnessConfiguration, @NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_SATURATION) public void setSaturationLevel(float);
+  }
+
+}
+
+package android.hardware.hdmi {
+
+  public abstract class HdmiClient {
+    method public android.hardware.hdmi.HdmiDeviceInfo getActiveSource();
+    method public void sendKeyEvent(int, boolean);
+    method public void sendVendorCommand(int, byte[], boolean);
+    method public void setVendorCommandListener(@NonNull android.hardware.hdmi.HdmiControlManager.VendorCommandListener);
+  }
+
+  public final class HdmiControlManager {
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHdmiCecEnabledChangeListener(@NonNull android.hardware.hdmi.HdmiControlManager.CecSettingChangeListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHdmiCecEnabledChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiControlManager.CecSettingChangeListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public java.util.List<java.lang.Integer> getAllowedCecSettingIntValues(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public java.util.List<java.lang.String> getAllowedCecSettingStringValues(@NonNull String);
+    method @Nullable public android.hardware.hdmi.HdmiClient getClient(int);
+    method @NonNull public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getConnectedDevices();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getHdmiCecEnabled();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getHdmiCecVersion();
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getHdmiCecVolumeControlEnabled();
+    method public int getPhysicalAddress();
+    method @Nullable public android.hardware.hdmi.HdmiPlaybackClient getPlaybackClient();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public String getPowerControlMode();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public String getPowerStateChangeOnActiveSourceLost();
+    method @Nullable public android.hardware.hdmi.HdmiSwitchClient getSwitchClient();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getSystemAudioModeMuting();
+    method @Nullable public android.hardware.hdmi.HdmiTvClient getTvClient();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getTvSendStandbyOnSleep();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getTvWakeOnOneTouchPlay();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public java.util.List<java.lang.String> getUserCecSettings();
+    method public boolean isDeviceConnected(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method public void powerOffDevice(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void removeHdmiCecEnabledChangeListener(@NonNull android.hardware.hdmi.HdmiControlManager.CecSettingChangeListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void removeHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
+    method public void setActiveSource(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setHdmiCecEnabled(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setHdmiCecVersion(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setHdmiCecVolumeControlEnabled(int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setPowerControlMode(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setPowerStateChangeOnActiveSourceLost(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setStandbyMode(boolean);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setSystemAudioModeMuting(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setTvSendStandbyOnSleep(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setTvWakeOnOneTouchPlay(@NonNull int);
+    field public static final String ACTION_OSD_MESSAGE = "android.hardware.hdmi.action.OSD_MESSAGE";
+    field public static final int AVR_VOLUME_MUTED = 101; // 0x65
+    field public static final String CEC_SETTING_NAME_HDMI_CEC_ENABLED = "hdmi_cec_enabled";
+    field public static final String CEC_SETTING_NAME_HDMI_CEC_VERSION = "hdmi_cec_version";
+    field public static final String CEC_SETTING_NAME_POWER_CONTROL_MODE = "power_control_mode";
+    field public static final String CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST = "power_state_change_on_active_source_lost";
+    field public static final String CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING = "system_audio_mode_muting";
+    field public static final String CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP = "tv_send_standby_on_sleep";
+    field public static final String CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY = "tv_wake_on_one_touch_play";
+    field public static final String CEC_SETTING_NAME_VOLUME_CONTROL_MODE = "volume_control_enabled";
+    field public static final int CLEAR_TIMER_STATUS_CEC_DISABLE = 162; // 0xa2
+    field public static final int CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION = 160; // 0xa0
+    field public static final int CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE = 161; // 0xa1
+    field public static final int CLEAR_TIMER_STATUS_TIMER_CLEARED = 128; // 0x80
+    field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_INFO_AVAILABLE = 2; // 0x2
+    field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_MATCHING = 1; // 0x1
+    field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_RECORDING = 0; // 0x0
+    field public static final int CONTROL_STATE_CHANGED_REASON_SETTING = 1; // 0x1
+    field public static final int CONTROL_STATE_CHANGED_REASON_STANDBY = 3; // 0x3
+    field public static final int CONTROL_STATE_CHANGED_REASON_START = 0; // 0x0
+    field public static final int CONTROL_STATE_CHANGED_REASON_WAKEUP = 2; // 0x2
+    field public static final int DEVICE_EVENT_ADD_DEVICE = 1; // 0x1
+    field public static final int DEVICE_EVENT_REMOVE_DEVICE = 2; // 0x2
+    field public static final int DEVICE_EVENT_UPDATE_DEVICE = 3; // 0x3
+    field public static final String EXTRA_MESSAGE_EXTRA_PARAM1 = "android.hardware.hdmi.extra.MESSAGE_EXTRA_PARAM1";
+    field public static final String EXTRA_MESSAGE_ID = "android.hardware.hdmi.extra.MESSAGE_ID";
+    field public static final int HDMI_CEC_CONTROL_DISABLED = 0; // 0x0
+    field public static final int HDMI_CEC_CONTROL_ENABLED = 1; // 0x1
+    field public static final int HDMI_CEC_VERSION_1_4_B = 5; // 0x5
+    field public static final int HDMI_CEC_VERSION_2_0 = 6; // 0x6
+    field public static final int ONE_TOUCH_RECORD_ALREADY_RECORDING = 18; // 0x12
+    field public static final int ONE_TOUCH_RECORD_CEC_DISABLED = 51; // 0x33
+    field public static final int ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION = 49; // 0x31
+    field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_COPY = 13; // 0xd
+    field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_FUTHER_COPIES = 14; // 0xe
+    field public static final int ONE_TOUCH_RECORD_FAIL_TO_RECORD_DISPLAYED_SCREEN = 50; // 0x32
+    field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PHYSICAL_ADDRESS = 10; // 0xa
+    field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PLUG_NUMBER = 9; // 0x9
+    field public static final int ONE_TOUCH_RECORD_MEDIA_PROBLEM = 21; // 0x15
+    field public static final int ONE_TOUCH_RECORD_MEDIA_PROTECTED = 19; // 0x13
+    field public static final int ONE_TOUCH_RECORD_NOT_ENOUGH_SPACE = 22; // 0x16
+    field public static final int ONE_TOUCH_RECORD_NO_MEDIA = 16; // 0x10
+    field public static final int ONE_TOUCH_RECORD_NO_OR_INSUFFICIENT_CA_ENTITLEMENTS = 12; // 0xc
+    field public static final int ONE_TOUCH_RECORD_NO_SOURCE_SIGNAL = 20; // 0x14
+    field public static final int ONE_TOUCH_RECORD_OTHER_REASON = 31; // 0x1f
+    field public static final int ONE_TOUCH_RECORD_PARENT_LOCK_ON = 23; // 0x17
+    field public static final int ONE_TOUCH_RECORD_PLAYING = 17; // 0x11
+    field public static final int ONE_TOUCH_RECORD_PREVIOUS_RECORDING_IN_PROGRESS = 48; // 0x30
+    field public static final int ONE_TOUCH_RECORD_RECORDING_ALREADY_TERMINATED = 27; // 0x1b
+    field public static final int ONE_TOUCH_RECORD_RECORDING_ANALOGUE_SERVICE = 3; // 0x3
+    field public static final int ONE_TOUCH_RECORD_RECORDING_CURRENTLY_SELECTED_SOURCE = 1; // 0x1
+    field public static final int ONE_TOUCH_RECORD_RECORDING_DIGITAL_SERVICE = 2; // 0x2
+    field public static final int ONE_TOUCH_RECORD_RECORDING_EXTERNAL_INPUT = 4; // 0x4
+    field public static final int ONE_TOUCH_RECORD_RECORDING_TERMINATED_NORMALLY = 26; // 0x1a
+    field public static final int ONE_TOUCH_RECORD_UNABLE_ANALOGUE_SERVICE = 6; // 0x6
+    field public static final int ONE_TOUCH_RECORD_UNABLE_DIGITAL_SERVICE = 5; // 0x5
+    field public static final int ONE_TOUCH_RECORD_UNABLE_SELECTED_SERVICE = 7; // 0x7
+    field public static final int ONE_TOUCH_RECORD_UNSUPPORTED_CA = 11; // 0xb
+    field public static final int OSD_MESSAGE_ARC_CONNECTED_INVALID_PORT = 1; // 0x1
+    field public static final int OSD_MESSAGE_AVR_VOLUME_CHANGED = 2; // 0x2
+    field public static final String POWER_CONTROL_MODE_BROADCAST = "broadcast";
+    field public static final String POWER_CONTROL_MODE_NONE = "none";
+    field public static final String POWER_CONTROL_MODE_TV = "to_tv";
+    field public static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE = "none";
+    field public static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW = "standby_now";
+    field public static final int POWER_STATUS_ON = 0; // 0x0
+    field public static final int POWER_STATUS_STANDBY = 1; // 0x1
+    field public static final int POWER_STATUS_TRANSIENT_TO_ON = 2; // 0x2
+    field public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3; // 0x3
+    field public static final int POWER_STATUS_UNKNOWN = -1; // 0xffffffff
+    field @Deprecated public static final int RESULT_ALREADY_IN_PROGRESS = 4; // 0x4
+    field public static final int RESULT_COMMUNICATION_FAILED = 7; // 0x7
+    field public static final int RESULT_EXCEPTION = 5; // 0x5
+    field public static final int RESULT_INCORRECT_MODE = 6; // 0x6
+    field public static final int RESULT_SOURCE_NOT_AVAILABLE = 2; // 0x2
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int RESULT_TARGET_NOT_AVAILABLE = 3; // 0x3
+    field public static final int RESULT_TIMEOUT = 1; // 0x1
+    field public static final int SYSTEM_AUDIO_MODE_MUTING_DISABLED = 0; // 0x0
+    field public static final int SYSTEM_AUDIO_MODE_MUTING_ENABLED = 1; // 0x1
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_CEC_DISABLED = 3; // 0x3
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION = 1; // 0x1
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_FAIL_TO_RECORD_SELECTED_SOURCE = 2; // 0x2
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_NO_ERROR = 0; // 0x0
+    field public static final int TIMER_RECORDING_TYPE_ANALOGUE = 2; // 0x2
+    field public static final int TIMER_RECORDING_TYPE_DIGITAL = 1; // 0x1
+    field public static final int TIMER_RECORDING_TYPE_EXTERNAL = 3; // 0x3
+    field public static final int TIMER_STATUS_MEDIA_INFO_NOT_PRESENT = 2; // 0x2
+    field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_NOT_PROTECTED = 0; // 0x0
+    field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_PROTECTED = 1; // 0x1
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_CA_NOT_SUPPORTED = 6; // 0x6
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_CLOCK_FAILURE = 10; // 0xa
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_DATE_OUT_OF_RANGE = 2; // 0x2
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_DUPLICATED = 14; // 0xe
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PHYSICAL_NUMBER = 5; // 0x5
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PLUG_NUMBER = 4; // 0x4
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_SEQUENCE = 3; // 0x3
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_CA_ENTITLEMENTS = 7; // 0x7
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_FREE_TIME = 1; // 0x1
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_PARENTAL_LOCK_ON = 9; // 0x9
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_UNSUPPORTED_RESOLUTION = 8; // 0x8
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_ENOUGH_SPACE = 8; // 0x8
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_MIGHT_NOT_ENOUGH_SPACE = 11; // 0xb
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_NOT_ENOUGH_SPACE = 9; // 0x9
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_NO_MEDIA_INFO = 10; // 0xa
+    field public static final int TV_SEND_STANDBY_ON_SLEEP_DISABLED = 0; // 0x0
+    field public static final int TV_SEND_STANDBY_ON_SLEEP_ENABLED = 1; // 0x1
+    field public static final int TV_WAKE_ON_ONE_TOUCH_PLAY_DISABLED = 0; // 0x0
+    field public static final int TV_WAKE_ON_ONE_TOUCH_PLAY_ENABLED = 1; // 0x1
+    field public static final int VOLUME_CONTROL_DISABLED = 0; // 0x0
+    field public static final int VOLUME_CONTROL_ENABLED = 1; // 0x1
+  }
+
+  public static interface HdmiControlManager.CecSettingChangeListener {
+    method public void onChange(@NonNull String);
+  }
+
+  @IntDef({android.hardware.hdmi.HdmiControlManager.RESULT_SUCCESS, android.hardware.hdmi.HdmiControlManager.RESULT_TIMEOUT, android.hardware.hdmi.HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE, android.hardware.hdmi.HdmiControlManager.RESULT_TARGET_NOT_AVAILABLE, android.hardware.hdmi.HdmiControlManager.RESULT_ALREADY_IN_PROGRESS, android.hardware.hdmi.HdmiControlManager.RESULT_EXCEPTION, android.hardware.hdmi.HdmiControlManager.RESULT_INCORRECT_MODE, android.hardware.hdmi.HdmiControlManager.RESULT_COMMUNICATION_FAILED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface HdmiControlManager.ControlCallbackResult {
+  }
+
+  public static interface HdmiControlManager.HotplugEventListener {
+    method public void onReceived(android.hardware.hdmi.HdmiHotplugEvent);
+  }
+
+  public static interface HdmiControlManager.VendorCommandListener {
+    method public void onControlStateChanged(boolean, int);
+    method public void onReceived(int, int, byte[], boolean);
+  }
+
+  public class HdmiDeviceInfo implements android.os.Parcelable {
+    ctor public HdmiDeviceInfo();
+    method public int describeContents();
+    method public int getAdopterId();
+    method public int getDeviceId();
+    method public int getDevicePowerStatus();
+    method public int getDeviceType();
+    method public String getDisplayName();
+    method public int getId();
+    method public int getLogicalAddress();
+    method public int getPhysicalAddress();
+    method public int getPortId();
+    method public int getVendorId();
+    method public static int idForCecDevice(int);
+    method public static int idForHardware(int);
+    method public static int idForMhlDevice(int);
+    method public boolean isCecDevice();
+    method public boolean isInactivated();
+    method public boolean isMhlDevice();
+    method public boolean isSourceType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ADDR_INTERNAL = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiDeviceInfo> CREATOR;
+    field public static final int DEVICE_AUDIO_SYSTEM = 5; // 0x5
+    field public static final int DEVICE_INACTIVE = -1; // 0xffffffff
+    field public static final int DEVICE_PLAYBACK = 4; // 0x4
+    field public static final int DEVICE_RECORDER = 1; // 0x1
+    field public static final int DEVICE_RESERVED = 2; // 0x2
+    field public static final int DEVICE_TUNER = 3; // 0x3
+    field public static final int DEVICE_TV = 0; // 0x0
+    field public static final int ID_INVALID = 65535; // 0xffff
+    field public static final android.hardware.hdmi.HdmiDeviceInfo INACTIVE_DEVICE;
+    field public static final int PATH_INTERNAL = 0; // 0x0
+    field public static final int PATH_INVALID = 65535; // 0xffff
+    field public static final int PORT_INVALID = -1; // 0xffffffff
+  }
+
+  public final class HdmiHotplugEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getPort();
+    method public boolean isConnected();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiHotplugEvent> CREATOR;
+  }
+
+  public final class HdmiPlaybackClient extends android.hardware.hdmi.HdmiClient {
+    method public int getDeviceType();
+    method public void oneTouchPlay(android.hardware.hdmi.HdmiPlaybackClient.OneTouchPlayCallback);
+    method public void queryDisplayStatus(android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback);
+    method public void sendStandby();
+  }
+
+  public static interface HdmiPlaybackClient.DisplayStatusCallback {
+    method public void onComplete(int);
+  }
+
+  public static interface HdmiPlaybackClient.OneTouchPlayCallback {
+    method public void onComplete(int);
+  }
+
+  public final class HdmiPortInfo implements android.os.Parcelable {
+    ctor public HdmiPortInfo(int, int, int, boolean, boolean, boolean);
+    method public int describeContents();
+    method public int getAddress();
+    method public int getId();
+    method public int getType();
+    method public boolean isArcSupported();
+    method public boolean isCecSupported();
+    method public boolean isMhlSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiPortInfo> CREATOR;
+    field public static final int PORT_INPUT = 0; // 0x0
+    field public static final int PORT_OUTPUT = 1; // 0x1
+  }
+
+  public abstract class HdmiRecordListener {
+    ctor public HdmiRecordListener();
+    method public void onClearTimerRecordingResult(int, int);
+    method public void onOneTouchRecordResult(int, int);
+    method public abstract android.hardware.hdmi.HdmiRecordSources.RecordSource onOneTouchRecordSourceRequested(int);
+    method public void onTimerRecordingResult(int, android.hardware.hdmi.HdmiRecordListener.TimerStatusData);
+  }
+
+  public static class HdmiRecordListener.TimerStatusData {
+    method public int getDurationHour();
+    method public int getDurationMinute();
+    method public int getExtraError();
+    method public int getMediaInfo();
+    method public int getNotProgammedError();
+    method public int getProgrammedInfo();
+    method public boolean isOverlapped();
+    method public boolean isProgrammed();
+  }
+
+  public final class HdmiRecordSources {
+    method public static boolean checkRecordSource(byte[]);
+    method public static android.hardware.hdmi.HdmiRecordSources.OwnSource ofOwnSource();
+  }
+
+  public static final class HdmiRecordSources.AnalogueServiceSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.DigitalServiceSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.ExternalPhysicalAddress extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.ExternalPlugData extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.OwnSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public abstract static class HdmiRecordSources.RecordSource {
+  }
+
+  public class HdmiSwitchClient extends android.hardware.hdmi.HdmiClient {
+    method public int getDeviceType();
+    method @NonNull public java.util.List<android.hardware.hdmi.HdmiPortInfo> getPortInfo();
+    method public void selectPort(int, @NonNull android.hardware.hdmi.HdmiSwitchClient.OnSelectListener);
+    method public void selectPort(int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiSwitchClient.OnSelectListener);
+  }
+
+  public static interface HdmiSwitchClient.OnSelectListener {
+    method public void onSelect(@android.hardware.hdmi.HdmiControlManager.ControlCallbackResult int);
+  }
+
+  public class HdmiTimerRecordSources {
+    method public static boolean checkTimerRecordSource(int, byte[]);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.Duration durationOf(int, int);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofAnalogueSource(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.AnalogueServiceSource);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofDigitalSource(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.DigitalServiceSource);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofExternalPhysicalAddress(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.ExternalPhysicalAddress);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofExternalPlug(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.ExternalPlugData);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.Time timeOf(int, int);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo timerInfoOf(int, int, android.hardware.hdmi.HdmiTimerRecordSources.Time, android.hardware.hdmi.HdmiTimerRecordSources.Duration, int);
+    field public static final int RECORDING_SEQUENCE_REPEAT_FRIDAY = 32; // 0x20
+    field public static final int RECORDING_SEQUENCE_REPEAT_MONDAY = 2; // 0x2
+    field public static final int RECORDING_SEQUENCE_REPEAT_ONCE_ONLY = 0; // 0x0
+    field public static final int RECORDING_SEQUENCE_REPEAT_SATUREDAY = 64; // 0x40
+    field public static final int RECORDING_SEQUENCE_REPEAT_SUNDAY = 1; // 0x1
+    field public static final int RECORDING_SEQUENCE_REPEAT_THURSDAY = 16; // 0x10
+    field public static final int RECORDING_SEQUENCE_REPEAT_TUESDAY = 4; // 0x4
+    field public static final int RECORDING_SEQUENCE_REPEAT_WEDNESDAY = 8; // 0x8
+  }
+
+  public static final class HdmiTimerRecordSources.Duration {
+  }
+
+  public static final class HdmiTimerRecordSources.Time {
+  }
+
+  public static final class HdmiTimerRecordSources.TimerInfo {
+  }
+
+  public static final class HdmiTimerRecordSources.TimerRecordSource {
+  }
+
+  public final class HdmiTvClient extends android.hardware.hdmi.HdmiClient {
+    method public void clearTimerRecording(int, int, android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource);
+    method public void deviceSelect(int, @NonNull android.hardware.hdmi.HdmiTvClient.SelectCallback);
+    method public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getDeviceList();
+    method public int getDeviceType();
+    method public void portSelect(int, @NonNull android.hardware.hdmi.HdmiTvClient.SelectCallback);
+    method public void sendMhlVendorCommand(int, int, int, byte[]);
+    method public void sendStandby(int);
+    method public void setHdmiMhlVendorCommandListener(android.hardware.hdmi.HdmiTvClient.HdmiMhlVendorCommandListener);
+    method public void setInputChangeListener(android.hardware.hdmi.HdmiTvClient.InputChangeListener);
+    method public void setRecordListener(@NonNull android.hardware.hdmi.HdmiRecordListener);
+    method public void setSystemAudioMode(boolean, android.hardware.hdmi.HdmiTvClient.SelectCallback);
+    method public void setSystemAudioMute(boolean);
+    method public void setSystemAudioVolume(int, int, int);
+    method public void startOneTouchRecord(int, @NonNull android.hardware.hdmi.HdmiRecordSources.RecordSource);
+    method public void startTimerRecording(int, int, android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource);
+    method public void stopOneTouchRecord(int);
+    field public static final int VENDOR_DATA_SIZE = 16; // 0x10
+  }
+
+  public static interface HdmiTvClient.HdmiMhlVendorCommandListener {
+    method public void onReceived(int, int, int, byte[]);
+  }
+
+  public static interface HdmiTvClient.InputChangeListener {
+    method public void onChanged(android.hardware.hdmi.HdmiDeviceInfo);
+  }
+
+  public static interface HdmiTvClient.SelectCallback {
+    method public void onComplete(int);
+  }
+
+}
+
+package android.hardware.lights {
+
+  public final class LightState implements android.os.Parcelable {
+    ctor @Deprecated public LightState(@ColorInt int);
+  }
+
+  public abstract class LightsManager {
+    field @Deprecated public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
+  }
+
+  public static final class LightsRequest.Builder {
+    method @Deprecated @NonNull public android.hardware.lights.LightsRequest.Builder setLight(@NonNull android.hardware.lights.Light, @NonNull android.hardware.lights.LightState);
+  }
+
+}
+
+package android.hardware.location {
+
+  public class ContextHubClient implements java.io.Closeable {
+    method public void close();
+    method @NonNull public android.hardware.location.ContextHubInfo getAttachedHub();
+    method @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int sendMessageToNanoApp(@NonNull android.hardware.location.NanoAppMessage);
+  }
+
+  public class ContextHubClientCallback {
+    ctor public ContextHubClientCallback();
+    method public void onClientAuthorizationChanged(@NonNull android.hardware.location.ContextHubClient, long, int);
+    method public void onHubReset(android.hardware.location.ContextHubClient);
+    method public void onMessageFromNanoApp(android.hardware.location.ContextHubClient, android.hardware.location.NanoAppMessage);
+    method public void onNanoAppAborted(android.hardware.location.ContextHubClient, long, int);
+    method public void onNanoAppDisabled(android.hardware.location.ContextHubClient, long);
+    method public void onNanoAppEnabled(android.hardware.location.ContextHubClient, long);
+    method public void onNanoAppLoaded(android.hardware.location.ContextHubClient, long);
+    method public void onNanoAppUnloaded(android.hardware.location.ContextHubClient, long);
+  }
+
+  public class ContextHubInfo implements android.os.Parcelable {
+    ctor public ContextHubInfo();
+    method public int describeContents();
+    method public byte getChreApiMajorVersion();
+    method public byte getChreApiMinorVersion();
+    method public short getChrePatchVersion();
+    method public long getChrePlatformId();
+    method public int getId();
+    method public int getMaxPacketLengthBytes();
+    method public android.hardware.location.MemoryRegion[] getMemoryRegions();
+    method public String getName();
+    method public float getPeakMips();
+    method public float getPeakPowerDrawMw();
+    method public int getPlatformVersion();
+    method public float getSleepPowerDrawMw();
+    method public int getStaticSwVersion();
+    method public float getStoppedPowerDrawMw();
+    method public int[] getSupportedSensors();
+    method public String getToolchain();
+    method public int getToolchainVersion();
+    method public String getVendor();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubInfo> CREATOR;
+  }
+
+  public class ContextHubIntentEvent {
+    method @NonNull public static android.hardware.location.ContextHubIntentEvent fromIntent(@NonNull android.content.Intent);
+    method public int getClientAuthorizationState();
+    method @NonNull public android.hardware.location.ContextHubInfo getContextHubInfo();
+    method public int getEventType();
+    method public int getNanoAppAbortCode();
+    method public long getNanoAppId();
+    method @NonNull public android.hardware.location.NanoAppMessage getNanoAppMessage();
+  }
+
+  public final class ContextHubManager {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.location.ContextHubClientCallback);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback, @NonNull java.util.concurrent.Executor);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> disableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> enableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
+    method @Deprecated @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int[] findNanoAppOnHub(int, @NonNull android.hardware.location.NanoAppFilter);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int[] getContextHubHandles();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubInfo getContextHubInfo(int);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public java.util.List<android.hardware.location.ContextHubInfo> getContextHubs();
+    method @Deprecated @Nullable @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.NanoAppInstanceInfo getNanoAppInstanceInfo(int);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int loadNanoApp(int, @NonNull android.hardware.location.NanoApp);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> loadNanoApp(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.NanoAppBinary);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.util.List<android.hardware.location.NanoAppState>> queryNanoApps(@NonNull android.hardware.location.ContextHubInfo);
+    method @Deprecated public int registerCallback(@NonNull android.hardware.location.ContextHubManager.Callback);
+    method @Deprecated public int registerCallback(android.hardware.location.ContextHubManager.Callback, android.os.Handler);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int sendMessage(int, int, @NonNull android.hardware.location.ContextHubMessage);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int unloadNanoApp(int);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> unloadNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
+    method @Deprecated public int unregisterCallback(@NonNull android.hardware.location.ContextHubManager.Callback);
+    field public static final int AUTHORIZATION_DENIED = 0; // 0x0
+    field public static final int AUTHORIZATION_DENIED_GRACE_PERIOD = 1; // 0x1
+    field public static final int AUTHORIZATION_GRANTED = 2; // 0x2
+    field public static final int EVENT_CLIENT_AUTHORIZATION = 7; // 0x7
+    field public static final int EVENT_HUB_RESET = 6; // 0x6
+    field public static final int EVENT_NANOAPP_ABORTED = 4; // 0x4
+    field public static final int EVENT_NANOAPP_DISABLED = 3; // 0x3
+    field public static final int EVENT_NANOAPP_ENABLED = 2; // 0x2
+    field public static final int EVENT_NANOAPP_LOADED = 0; // 0x0
+    field public static final int EVENT_NANOAPP_MESSAGE = 5; // 0x5
+    field public static final int EVENT_NANOAPP_UNLOADED = 1; // 0x1
+    field public static final String EXTRA_CLIENT_AUTHORIZATION_STATE = "android.hardware.location.extra.CLIENT_AUTHORIZATION_STATE";
+    field public static final String EXTRA_CONTEXT_HUB_INFO = "android.hardware.location.extra.CONTEXT_HUB_INFO";
+    field public static final String EXTRA_EVENT_TYPE = "android.hardware.location.extra.EVENT_TYPE";
+    field public static final String EXTRA_MESSAGE = "android.hardware.location.extra.MESSAGE";
+    field public static final String EXTRA_NANOAPP_ABORT_CODE = "android.hardware.location.extra.NANOAPP_ABORT_CODE";
+    field public static final String EXTRA_NANOAPP_ID = "android.hardware.location.extra.NANOAPP_ID";
+  }
+
+  @Deprecated public abstract static class ContextHubManager.Callback {
+    ctor @Deprecated protected ContextHubManager.Callback();
+    method @Deprecated public abstract void onMessageReceipt(int, int, @NonNull android.hardware.location.ContextHubMessage);
+  }
+
+  @Deprecated public class ContextHubMessage implements android.os.Parcelable {
+    ctor @Deprecated public ContextHubMessage(int, int, byte[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated public byte[] getData();
+    method @Deprecated public int getMsgType();
+    method @Deprecated public int getVersion();
+    method @Deprecated public void setMsgData(byte[]);
+    method @Deprecated public void setMsgType(int);
+    method @Deprecated public void setVersion(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubMessage> CREATOR;
+  }
+
+  public class ContextHubTransaction<T> {
+    method public int getType();
+    method public void setOnCompleteListener(@NonNull android.hardware.location.ContextHubTransaction.OnCompleteListener<T>, @NonNull java.util.concurrent.Executor);
+    method public void setOnCompleteListener(@NonNull android.hardware.location.ContextHubTransaction.OnCompleteListener<T>);
+    method public static String typeToString(int, boolean);
+    method public android.hardware.location.ContextHubTransaction.Response<T> waitForResponse(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    field public static final int RESULT_FAILED_AT_HUB = 5; // 0x5
+    field public static final int RESULT_FAILED_BAD_PARAMS = 2; // 0x2
+    field public static final int RESULT_FAILED_BUSY = 4; // 0x4
+    field public static final int RESULT_FAILED_HAL_UNAVAILABLE = 8; // 0x8
+    field public static final int RESULT_FAILED_SERVICE_INTERNAL_FAILURE = 7; // 0x7
+    field public static final int RESULT_FAILED_TIMEOUT = 6; // 0x6
+    field public static final int RESULT_FAILED_UNINITIALIZED = 3; // 0x3
+    field public static final int RESULT_FAILED_UNKNOWN = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int TYPE_DISABLE_NANOAPP = 3; // 0x3
+    field public static final int TYPE_ENABLE_NANOAPP = 2; // 0x2
+    field public static final int TYPE_LOAD_NANOAPP = 0; // 0x0
+    field public static final int TYPE_QUERY_NANOAPPS = 4; // 0x4
+    field public static final int TYPE_UNLOAD_NANOAPP = 1; // 0x1
+  }
+
+  @java.lang.FunctionalInterface public static interface ContextHubTransaction.OnCompleteListener<L> {
+    method public void onComplete(android.hardware.location.ContextHubTransaction<L>, android.hardware.location.ContextHubTransaction.Response<L>);
+  }
+
+  public static class ContextHubTransaction.Response<R> {
+    method public R getContents();
+    method public int getResult();
+  }
+
+  public final class GeofenceHardware {
+    method public boolean addGeofence(int, int, android.hardware.location.GeofenceHardwareRequest, android.hardware.location.GeofenceHardwareCallback);
+    method public int[] getMonitoringTypes();
+    method public int getStatusOfMonitoringType(int);
+    method public boolean pauseGeofence(int, int);
+    method public boolean registerForMonitorStateChangeCallback(int, android.hardware.location.GeofenceHardwareMonitorCallback);
+    method public boolean removeGeofence(int, int);
+    method public boolean resumeGeofence(int, int, int);
+    method public boolean unregisterForMonitorStateChangeCallback(int, android.hardware.location.GeofenceHardwareMonitorCallback);
+    field public static final int GEOFENCE_ENTERED = 1; // 0x1
+    field public static final int GEOFENCE_ERROR_ID_EXISTS = 2; // 0x2
+    field public static final int GEOFENCE_ERROR_ID_UNKNOWN = 3; // 0x3
+    field public static final int GEOFENCE_ERROR_INSUFFICIENT_MEMORY = 6; // 0x6
+    field public static final int GEOFENCE_ERROR_INVALID_TRANSITION = 4; // 0x4
+    field public static final int GEOFENCE_ERROR_TOO_MANY_GEOFENCES = 1; // 0x1
+    field public static final int GEOFENCE_EXITED = 2; // 0x2
+    field public static final int GEOFENCE_FAILURE = 5; // 0x5
+    field public static final int GEOFENCE_SUCCESS = 0; // 0x0
+    field public static final int GEOFENCE_UNCERTAIN = 4; // 0x4
+    field public static final int MONITORING_TYPE_FUSED_HARDWARE = 1; // 0x1
+    field public static final int MONITORING_TYPE_GPS_HARDWARE = 0; // 0x0
+    field public static final int MONITOR_CURRENTLY_AVAILABLE = 0; // 0x0
+    field public static final int MONITOR_CURRENTLY_UNAVAILABLE = 1; // 0x1
+    field public static final int MONITOR_UNSUPPORTED = 2; // 0x2
+    field public static final int SOURCE_TECHNOLOGY_BLUETOOTH = 16; // 0x10
+    field public static final int SOURCE_TECHNOLOGY_CELL = 8; // 0x8
+    field public static final int SOURCE_TECHNOLOGY_GNSS = 1; // 0x1
+    field public static final int SOURCE_TECHNOLOGY_SENSORS = 4; // 0x4
+    field public static final int SOURCE_TECHNOLOGY_WIFI = 2; // 0x2
+  }
+
+  public abstract class GeofenceHardwareCallback {
+    ctor public GeofenceHardwareCallback();
+    method public void onGeofenceAdd(int, int);
+    method public void onGeofencePause(int, int);
+    method public void onGeofenceRemove(int, int);
+    method public void onGeofenceResume(int, int);
+    method public void onGeofenceTransition(int, int, android.location.Location, long, int);
+  }
+
+  public abstract class GeofenceHardwareMonitorCallback {
+    ctor public GeofenceHardwareMonitorCallback();
+    method @Deprecated public void onMonitoringSystemChange(int, boolean, android.location.Location);
+    method public void onMonitoringSystemChange(android.hardware.location.GeofenceHardwareMonitorEvent);
+  }
+
+  public class GeofenceHardwareMonitorEvent implements android.os.Parcelable {
+    ctor public GeofenceHardwareMonitorEvent(int, int, int, android.location.Location);
+    method public int describeContents();
+    method public android.location.Location getLocation();
+    method public int getMonitoringStatus();
+    method public int getMonitoringType();
+    method public int getSourceTechnologies();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.GeofenceHardwareMonitorEvent> CREATOR;
+  }
+
+  public final class GeofenceHardwareRequest {
+    ctor public GeofenceHardwareRequest();
+    method public static android.hardware.location.GeofenceHardwareRequest createCircularGeofence(double, double, double);
+    method public int getLastTransition();
+    method public double getLatitude();
+    method public double getLongitude();
+    method public int getMonitorTransitions();
+    method public int getNotificationResponsiveness();
+    method public double getRadius();
+    method public int getSourceTechnologies();
+    method public int getUnknownTimer();
+    method public void setLastTransition(int);
+    method public void setMonitorTransitions(int);
+    method public void setNotificationResponsiveness(int);
+    method public void setSourceTechnologies(int);
+    method public void setUnknownTimer(int);
+  }
+
+  public class MemoryRegion implements android.os.Parcelable {
+    ctor public MemoryRegion(android.os.Parcel);
+    method public int describeContents();
+    method public int getCapacityBytes();
+    method public int getFreeCapacityBytes();
+    method public boolean isExecutable();
+    method public boolean isReadable();
+    method public boolean isWritable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.MemoryRegion> CREATOR;
+  }
+
+  @Deprecated public class NanoApp implements android.os.Parcelable {
+    ctor @Deprecated public NanoApp();
+    ctor @Deprecated public NanoApp(int, byte[]);
+    ctor @Deprecated public NanoApp(long, byte[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated public byte[] getAppBinary();
+    method @Deprecated public long getAppId();
+    method @Deprecated public int getAppVersion();
+    method @Deprecated public String getName();
+    method @Deprecated public int getNeededExecMemBytes();
+    method @Deprecated public int getNeededReadMemBytes();
+    method @Deprecated public int[] getNeededSensors();
+    method @Deprecated public int getNeededWriteMemBytes();
+    method @Deprecated public int[] getOutputEvents();
+    method @Deprecated public String getPublisher();
+    method @Deprecated public void setAppBinary(byte[]);
+    method @Deprecated public void setAppId(long);
+    method @Deprecated public void setAppVersion(int);
+    method @Deprecated public void setName(String);
+    method @Deprecated public void setNeededExecMemBytes(int);
+    method @Deprecated public void setNeededReadMemBytes(int);
+    method @Deprecated public void setNeededSensors(int[]);
+    method @Deprecated public void setNeededWriteMemBytes(int);
+    method @Deprecated public void setOutputEvents(int[]);
+    method @Deprecated public void setPublisher(String);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoApp> CREATOR;
+  }
+
+  public final class NanoAppBinary implements android.os.Parcelable {
+    ctor public NanoAppBinary(byte[]);
+    method public int describeContents();
+    method public byte[] getBinary();
+    method public byte[] getBinaryNoHeader();
+    method public int getFlags();
+    method public int getHeaderVersion();
+    method public long getHwHubType();
+    method public long getNanoAppId();
+    method public int getNanoAppVersion();
+    method public byte getTargetChreApiMajorVersion();
+    method public byte getTargetChreApiMinorVersion();
+    method public boolean hasValidHeader();
+    method public boolean isEncrypted();
+    method public boolean isSigned();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppBinary> CREATOR;
+  }
+
+  @Deprecated public class NanoAppFilter implements android.os.Parcelable {
+    ctor @Deprecated public NanoAppFilter(long, int, int, long);
+    method @Deprecated public int describeContents();
+    method @Deprecated public boolean testMatch(android.hardware.location.NanoAppInstanceInfo);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final int APP_ANY = -1; // 0xffffffff
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppFilter> CREATOR;
+    field @Deprecated public static final int FLAGS_VERSION_ANY = -1; // 0xffffffff
+    field @Deprecated public static final int FLAGS_VERSION_GREAT_THAN = 2; // 0x2
+    field @Deprecated public static final int FLAGS_VERSION_LESS_THAN = 4; // 0x4
+    field @Deprecated public static final int FLAGS_VERSION_STRICTLY_EQUAL = 8; // 0x8
+    field @Deprecated public static final int HUB_ANY = -1; // 0xffffffff
+    field @Deprecated public static final int VENDOR_ANY = -1; // 0xffffffff
+  }
+
+  @Deprecated public class NanoAppInstanceInfo implements android.os.Parcelable {
+    ctor @Deprecated public NanoAppInstanceInfo();
+    method @Deprecated public int describeContents();
+    method @Deprecated public long getAppId();
+    method @Deprecated public int getAppVersion();
+    method @Deprecated public int getContexthubId();
+    method @Deprecated public int getHandle();
+    method @Deprecated public String getName();
+    method @Deprecated public int getNeededExecMemBytes();
+    method @Deprecated public int getNeededReadMemBytes();
+    method @Deprecated @NonNull public int[] getNeededSensors();
+    method @Deprecated public int getNeededWriteMemBytes();
+    method @Deprecated @NonNull public int[] getOutputEvents();
+    method @Deprecated public String getPublisher();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppInstanceInfo> CREATOR;
+  }
+
+  public final class NanoAppMessage implements android.os.Parcelable {
+    method public static android.hardware.location.NanoAppMessage createMessageFromNanoApp(long, int, byte[], boolean);
+    method public static android.hardware.location.NanoAppMessage createMessageToNanoApp(long, int, byte[]);
+    method public int describeContents();
+    method public byte[] getMessageBody();
+    method public int getMessageType();
+    method public long getNanoAppId();
+    method public boolean isBroadcastMessage();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppMessage> CREATOR;
+  }
+
+  public final class NanoAppState implements android.os.Parcelable {
+    ctor public NanoAppState(long, int, boolean);
+    ctor public NanoAppState(long, int, boolean, @NonNull java.util.List<java.lang.String>);
+    method public int describeContents();
+    method public long getNanoAppId();
+    method @NonNull public java.util.List<java.lang.String> getNanoAppPermissions();
+    method public long getNanoAppVersion();
+    method public boolean isEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppState> CREATOR;
+  }
+
+}
+
+package android.hardware.radio {
+
+  public final class Announcement implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.hardware.radio.ProgramSelector getSelector();
+    method public int getType();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getVendorInfo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.Announcement> CREATOR;
+    field public static final int TYPE_EMERGENCY = 1; // 0x1
+    field public static final int TYPE_EVENT = 6; // 0x6
+    field public static final int TYPE_MISC = 8; // 0x8
+    field public static final int TYPE_NEWS = 5; // 0x5
+    field public static final int TYPE_SPORT = 7; // 0x7
+    field public static final int TYPE_TRAFFIC = 3; // 0x3
+    field public static final int TYPE_WARNING = 2; // 0x2
+    field public static final int TYPE_WEATHER = 4; // 0x4
+  }
+
+  public static interface Announcement.OnListUpdatedListener {
+    method public void onListUpdated(java.util.Collection<android.hardware.radio.Announcement>);
+  }
+
+  public final class ProgramList implements java.lang.AutoCloseable {
+    method public void addOnCompleteListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.radio.ProgramList.OnCompleteListener);
+    method public void addOnCompleteListener(@NonNull android.hardware.radio.ProgramList.OnCompleteListener);
+    method public void close();
+    method @Nullable public android.hardware.radio.RadioManager.ProgramInfo get(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+    method public void registerListCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.radio.ProgramList.ListCallback);
+    method public void registerListCallback(@NonNull android.hardware.radio.ProgramList.ListCallback);
+    method public void removeOnCompleteListener(@NonNull android.hardware.radio.ProgramList.OnCompleteListener);
+    method @NonNull public java.util.List<android.hardware.radio.RadioManager.ProgramInfo> toList();
+    method public void unregisterListCallback(@NonNull android.hardware.radio.ProgramList.ListCallback);
+  }
+
+  public static final class ProgramList.Filter implements android.os.Parcelable {
+    ctor public ProgramList.Filter(@NonNull java.util.Set<java.lang.Integer>, @NonNull java.util.Set<android.hardware.radio.ProgramSelector.Identifier>, boolean, boolean);
+    method public boolean areCategoriesIncluded();
+    method public boolean areModificationsExcluded();
+    method public int describeContents();
+    method @NonNull public java.util.Set<java.lang.Integer> getIdentifierTypes();
+    method @NonNull public java.util.Set<android.hardware.radio.ProgramSelector.Identifier> getIdentifiers();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramList.Filter> CREATOR;
+  }
+
+  public abstract static class ProgramList.ListCallback {
+    ctor public ProgramList.ListCallback();
+    method public void onItemChanged(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+    method public void onItemRemoved(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+  }
+
+  public static interface ProgramList.OnCompleteListener {
+    method public void onComplete();
+  }
+
+  public final class ProgramSelector implements android.os.Parcelable {
+    ctor public ProgramSelector(@android.hardware.radio.ProgramSelector.ProgramType int, @NonNull android.hardware.radio.ProgramSelector.Identifier, @Nullable android.hardware.radio.ProgramSelector.Identifier[], @Nullable long[]);
+    method @NonNull public static android.hardware.radio.ProgramSelector createAmFmSelector(@android.hardware.radio.RadioManager.Band int, int);
+    method @NonNull public static android.hardware.radio.ProgramSelector createAmFmSelector(@android.hardware.radio.RadioManager.Band int, int, int);
+    method public int describeContents();
+    method @NonNull public android.hardware.radio.ProgramSelector.Identifier[] getAllIds(@android.hardware.radio.ProgramSelector.IdentifierType int);
+    method public long getFirstId(@android.hardware.radio.ProgramSelector.IdentifierType int);
+    method @NonNull public android.hardware.radio.ProgramSelector.Identifier getPrimaryId();
+    method @Deprecated @android.hardware.radio.ProgramSelector.ProgramType public int getProgramType();
+    method @NonNull public android.hardware.radio.ProgramSelector.Identifier[] getSecondaryIds();
+    method @Deprecated @NonNull public long[] getVendorIds();
+    method @NonNull public android.hardware.radio.ProgramSelector withSecondaryPreferred(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector> CREATOR;
+    field public static final int IDENTIFIER_TYPE_AMFM_FREQUENCY = 1; // 0x1
+    field public static final int IDENTIFIER_TYPE_DAB_ENSEMBLE = 6; // 0x6
+    field public static final int IDENTIFIER_TYPE_DAB_FREQUENCY = 8; // 0x8
+    field public static final int IDENTIFIER_TYPE_DAB_SCID = 7; // 0x7
+    field public static final int IDENTIFIER_TYPE_DAB_SIDECC = 5; // 0x5
+    field public static final int IDENTIFIER_TYPE_DAB_SID_EXT = 5; // 0x5
+    field public static final int IDENTIFIER_TYPE_DRMO_FREQUENCY = 10; // 0xa
+    field @Deprecated public static final int IDENTIFIER_TYPE_DRMO_MODULATION = 11; // 0xb
+    field public static final int IDENTIFIER_TYPE_DRMO_SERVICE_ID = 9; // 0x9
+    field public static final int IDENTIFIER_TYPE_HD_STATION_ID_EXT = 3; // 0x3
+    field public static final int IDENTIFIER_TYPE_HD_STATION_NAME = 10004; // 0x2714
+    field @Deprecated public static final int IDENTIFIER_TYPE_HD_SUBCHANNEL = 4; // 0x4
+    field public static final int IDENTIFIER_TYPE_INVALID = 0; // 0x0
+    field public static final int IDENTIFIER_TYPE_RDS_PI = 2; // 0x2
+    field public static final int IDENTIFIER_TYPE_SXM_CHANNEL = 13; // 0xd
+    field public static final int IDENTIFIER_TYPE_SXM_SERVICE_ID = 12; // 0xc
+    field public static final int IDENTIFIER_TYPE_VENDOR_END = 1999; // 0x7cf
+    field @Deprecated public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_END = 1999; // 0x7cf
+    field @Deprecated public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_START = 1000; // 0x3e8
+    field public static final int IDENTIFIER_TYPE_VENDOR_START = 1000; // 0x3e8
+    field @Deprecated public static final int PROGRAM_TYPE_AM = 1; // 0x1
+    field @Deprecated public static final int PROGRAM_TYPE_AM_HD = 3; // 0x3
+    field @Deprecated public static final int PROGRAM_TYPE_DAB = 5; // 0x5
+    field @Deprecated public static final int PROGRAM_TYPE_DRMO = 6; // 0x6
+    field @Deprecated public static final int PROGRAM_TYPE_FM = 2; // 0x2
+    field @Deprecated public static final int PROGRAM_TYPE_FM_HD = 4; // 0x4
+    field @Deprecated public static final int PROGRAM_TYPE_INVALID = 0; // 0x0
+    field @Deprecated public static final int PROGRAM_TYPE_SXM = 7; // 0x7
+    field @Deprecated public static final int PROGRAM_TYPE_VENDOR_END = 1999; // 0x7cf
+    field @Deprecated public static final int PROGRAM_TYPE_VENDOR_START = 1000; // 0x3e8
+  }
+
+  public static final class ProgramSelector.Identifier implements android.os.Parcelable {
+    ctor public ProgramSelector.Identifier(@android.hardware.radio.ProgramSelector.IdentifierType int, long);
+    method public int describeContents();
+    method @android.hardware.radio.ProgramSelector.IdentifierType public int getType();
+    method public long getValue();
+    method public boolean isCategoryType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector.Identifier> CREATOR;
+  }
+
+  @IntDef(prefix={"IDENTIFIER_TYPE_"}, value={android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_INVALID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_RDS_PI, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_STATION_ID_EXT, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_SUBCHANNEL, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_STATION_NAME, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SID_EXT, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SIDECC, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SCID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_SERVICE_ID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_MODULATION, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_SXM_SERVICE_ID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_SXM_CHANNEL}) @IntRange(from=android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_VENDOR_START, to=android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_VENDOR_END) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ProgramSelector.IdentifierType {
+  }
+
+  @Deprecated @IntDef(prefix={"PROGRAM_TYPE_"}, value={android.hardware.radio.ProgramSelector.PROGRAM_TYPE_INVALID, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_AM, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_FM, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_AM_HD, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_FM_HD, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_DAB, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_DRMO, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_SXM}) @IntRange(from=android.hardware.radio.ProgramSelector.PROGRAM_TYPE_VENDOR_START, to=android.hardware.radio.ProgramSelector.PROGRAM_TYPE_VENDOR_END) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ProgramSelector.ProgramType {
+  }
+
+  public class RadioManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public void addAnnouncementListener(@NonNull java.util.Set<java.lang.Integer>, @NonNull android.hardware.radio.Announcement.OnListUpdatedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public void addAnnouncementListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.Set<java.lang.Integer>, @NonNull android.hardware.radio.Announcement.OnListUpdatedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public int listModules(java.util.List<android.hardware.radio.RadioManager.ModuleProperties>);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public android.hardware.radio.RadioTuner openTuner(int, android.hardware.radio.RadioManager.BandConfig, boolean, android.hardware.radio.RadioTuner.Callback, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public void removeAnnouncementListener(@NonNull android.hardware.radio.Announcement.OnListUpdatedListener);
+    field public static final int BAND_AM = 0; // 0x0
+    field public static final int BAND_AM_HD = 3; // 0x3
+    field public static final int BAND_FM = 1; // 0x1
+    field public static final int BAND_FM_HD = 2; // 0x2
+    field public static final int BAND_INVALID = -1; // 0xffffffff
+    field public static final int CLASS_AM_FM = 0; // 0x0
+    field public static final int CLASS_DT = 2; // 0x2
+    field public static final int CLASS_SAT = 1; // 0x1
+    field public static final int CONFIG_DAB_DAB_LINKING = 6; // 0x6
+    field public static final int CONFIG_DAB_DAB_SOFT_LINKING = 8; // 0x8
+    field public static final int CONFIG_DAB_FM_LINKING = 7; // 0x7
+    field public static final int CONFIG_DAB_FM_SOFT_LINKING = 9; // 0x9
+    field public static final int CONFIG_FORCE_ANALOG = 2; // 0x2
+    field public static final int CONFIG_FORCE_DIGITAL = 3; // 0x3
+    field public static final int CONFIG_FORCE_MONO = 1; // 0x1
+    field public static final int CONFIG_RDS_AF = 4; // 0x4
+    field public static final int CONFIG_RDS_REG = 5; // 0x5
+    field public static final int REGION_ITU_1 = 0; // 0x0
+    field public static final int REGION_ITU_2 = 1; // 0x1
+    field public static final int REGION_JAPAN = 3; // 0x3
+    field public static final int REGION_KOREA = 4; // 0x4
+    field public static final int REGION_OIRT = 2; // 0x2
+    field public static final int STATUS_BAD_VALUE = -22; // 0xffffffea
+    field public static final int STATUS_DEAD_OBJECT = -32; // 0xffffffe0
+    field public static final int STATUS_ERROR = -2147483648; // 0x80000000
+    field public static final int STATUS_INVALID_OPERATION = -38; // 0xffffffda
+    field public static final int STATUS_NO_INIT = -19; // 0xffffffed
+    field public static final int STATUS_OK = 0; // 0x0
+    field public static final int STATUS_PERMISSION_DENIED = -1; // 0xffffffff
+    field public static final int STATUS_TIMED_OUT = -110; // 0xffffff92
+  }
+
+  public static class RadioManager.AmBandConfig extends android.hardware.radio.RadioManager.BandConfig {
+    method public boolean getStereo();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandConfig> CREATOR;
+  }
+
+  public static class RadioManager.AmBandConfig.Builder {
+    ctor public RadioManager.AmBandConfig.Builder(android.hardware.radio.RadioManager.AmBandDescriptor);
+    ctor public RadioManager.AmBandConfig.Builder(android.hardware.radio.RadioManager.AmBandConfig);
+    method public android.hardware.radio.RadioManager.AmBandConfig build();
+    method public android.hardware.radio.RadioManager.AmBandConfig.Builder setStereo(boolean);
+  }
+
+  public static class RadioManager.AmBandDescriptor extends android.hardware.radio.RadioManager.BandDescriptor {
+    method public boolean isStereoSupported();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandDescriptor> CREATOR;
+  }
+
+  @IntDef(prefix={"BAND_"}, value={android.hardware.radio.RadioManager.BAND_INVALID, android.hardware.radio.RadioManager.BAND_AM, android.hardware.radio.RadioManager.BAND_FM, android.hardware.radio.RadioManager.BAND_AM_HD, android.hardware.radio.RadioManager.BAND_FM_HD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RadioManager.Band {
+  }
+
+  public static class RadioManager.BandConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getLowerLimit();
+    method public int getRegion();
+    method public int getSpacing();
+    method public int getType();
+    method public int getUpperLimit();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandConfig> CREATOR;
+  }
+
+  public static class RadioManager.BandDescriptor implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getLowerLimit();
+    method public int getRegion();
+    method public int getSpacing();
+    method public int getType();
+    method public int getUpperLimit();
+    method public boolean isAmBand();
+    method public boolean isFmBand();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandDescriptor> CREATOR;
+  }
+
+  public static class RadioManager.FmBandConfig extends android.hardware.radio.RadioManager.BandConfig {
+    method public boolean getAf();
+    method public boolean getEa();
+    method public boolean getRds();
+    method public boolean getStereo();
+    method public boolean getTa();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandConfig> CREATOR;
+  }
+
+  public static class RadioManager.FmBandConfig.Builder {
+    ctor public RadioManager.FmBandConfig.Builder(android.hardware.radio.RadioManager.FmBandDescriptor);
+    ctor public RadioManager.FmBandConfig.Builder(android.hardware.radio.RadioManager.FmBandConfig);
+    method public android.hardware.radio.RadioManager.FmBandConfig build();
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setAf(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setEa(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setRds(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setStereo(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setTa(boolean);
+  }
+
+  public static class RadioManager.FmBandDescriptor extends android.hardware.radio.RadioManager.BandDescriptor {
+    method public boolean isAfSupported();
+    method public boolean isEaSupported();
+    method public boolean isRdsSupported();
+    method public boolean isStereoSupported();
+    method public boolean isTaSupported();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandDescriptor> CREATOR;
+  }
+
+  public static class RadioManager.ModuleProperties implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.hardware.radio.RadioManager.BandDescriptor[] getBands();
+    method public int getClassId();
+    method @Nullable public java.util.Map<java.lang.String,java.lang.Integer> getDabFrequencyTable();
+    method public int getId();
+    method public String getImplementor();
+    method public int getNumAudioSources();
+    method public int getNumTuners();
+    method public String getProduct();
+    method public String getSerial();
+    method @NonNull public String getServiceName();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getVendorInfo();
+    method public String getVersion();
+    method public boolean isBackgroundScanningSupported();
+    method public boolean isCaptureSupported();
+    method public boolean isInitializationRequired();
+    method public boolean isProgramIdentifierSupported(@android.hardware.radio.ProgramSelector.IdentifierType int);
+    method public boolean isProgramTypeSupported(@android.hardware.radio.ProgramSelector.ProgramType int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ModuleProperties> CREATOR;
+  }
+
+  public static class RadioManager.ProgramInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Deprecated public int getChannel();
+    method @Nullable public android.hardware.radio.ProgramSelector.Identifier getLogicallyTunedTo();
+    method public android.hardware.radio.RadioMetadata getMetadata();
+    method @Nullable public android.hardware.radio.ProgramSelector.Identifier getPhysicallyTunedTo();
+    method @Nullable public java.util.Collection<android.hardware.radio.ProgramSelector.Identifier> getRelatedContent();
+    method @NonNull public android.hardware.radio.ProgramSelector getSelector();
+    method public int getSignalStrength();
+    method @Deprecated public int getSubChannel();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getVendorInfo();
+    method @Deprecated public boolean isDigital();
+    method public boolean isLive();
+    method public boolean isMuted();
+    method public boolean isStereo();
+    method public boolean isTrafficAnnouncementActive();
+    method public boolean isTrafficProgram();
+    method public boolean isTuned();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ProgramInfo> CREATOR;
+  }
+
+  public final class RadioMetadata implements android.os.Parcelable {
+    method public boolean containsKey(String);
+    method public int describeContents();
+    method @Deprecated public android.graphics.Bitmap getBitmap(String);
+    method public android.hardware.radio.RadioMetadata.Clock getClock(String);
+    method public int getInt(String);
+    method public String getString(String);
+    method public java.util.Set<java.lang.String> keySet();
+    method public int size();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata> CREATOR;
+    field public static final String METADATA_KEY_ALBUM = "android.hardware.radio.metadata.ALBUM";
+    field public static final String METADATA_KEY_ART = "android.hardware.radio.metadata.ART";
+    field public static final String METADATA_KEY_ARTIST = "android.hardware.radio.metadata.ARTIST";
+    field public static final String METADATA_KEY_CLOCK = "android.hardware.radio.metadata.CLOCK";
+    field public static final String METADATA_KEY_DAB_COMPONENT_NAME = "android.hardware.radio.metadata.DAB_COMPONENT_NAME";
+    field public static final String METADATA_KEY_DAB_COMPONENT_NAME_SHORT = "android.hardware.radio.metadata.DAB_COMPONENT_NAME_SHORT";
+    field public static final String METADATA_KEY_DAB_ENSEMBLE_NAME = "android.hardware.radio.metadata.DAB_ENSEMBLE_NAME";
+    field public static final String METADATA_KEY_DAB_ENSEMBLE_NAME_SHORT = "android.hardware.radio.metadata.DAB_ENSEMBLE_NAME_SHORT";
+    field public static final String METADATA_KEY_DAB_SERVICE_NAME = "android.hardware.radio.metadata.DAB_SERVICE_NAME";
+    field public static final String METADATA_KEY_DAB_SERVICE_NAME_SHORT = "android.hardware.radio.metadata.DAB_SERVICE_NAME_SHORT";
+    field public static final String METADATA_KEY_GENRE = "android.hardware.radio.metadata.GENRE";
+    field public static final String METADATA_KEY_ICON = "android.hardware.radio.metadata.ICON";
+    field public static final String METADATA_KEY_PROGRAM_NAME = "android.hardware.radio.metadata.PROGRAM_NAME";
+    field public static final String METADATA_KEY_RBDS_PTY = "android.hardware.radio.metadata.RBDS_PTY";
+    field public static final String METADATA_KEY_RDS_PI = "android.hardware.radio.metadata.RDS_PI";
+    field public static final String METADATA_KEY_RDS_PS = "android.hardware.radio.metadata.RDS_PS";
+    field public static final String METADATA_KEY_RDS_PTY = "android.hardware.radio.metadata.RDS_PTY";
+    field public static final String METADATA_KEY_RDS_RT = "android.hardware.radio.metadata.RDS_RT";
+    field public static final String METADATA_KEY_TITLE = "android.hardware.radio.metadata.TITLE";
+  }
+
+  public static final class RadioMetadata.Builder {
+    ctor public RadioMetadata.Builder();
+    ctor public RadioMetadata.Builder(android.hardware.radio.RadioMetadata);
+    method public android.hardware.radio.RadioMetadata build();
+    method public android.hardware.radio.RadioMetadata.Builder putBitmap(String, android.graphics.Bitmap);
+    method public android.hardware.radio.RadioMetadata.Builder putClock(String, long, int);
+    method public android.hardware.radio.RadioMetadata.Builder putInt(String, int);
+    method public android.hardware.radio.RadioMetadata.Builder putString(String, String);
+  }
+
+  public static final class RadioMetadata.Clock implements android.os.Parcelable {
+    ctor public RadioMetadata.Clock(long, int);
+    method public int describeContents();
+    method public int getTimezoneOffsetMinutes();
+    method public long getUtcEpochSeconds();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata.Clock> CREATOR;
+  }
+
+  public abstract class RadioTuner {
+    ctor public RadioTuner();
+    method public abstract int cancel();
+    method public abstract void cancelAnnouncement();
+    method public abstract void close();
+    method @Deprecated public abstract int getConfiguration(android.hardware.radio.RadioManager.BandConfig[]);
+    method @Nullable public android.hardware.radio.ProgramList getDynamicProgramList(@Nullable android.hardware.radio.ProgramList.Filter);
+    method public abstract boolean getMute();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getParameters(@NonNull java.util.List<java.lang.String>);
+    method @Deprecated public abstract int getProgramInformation(android.hardware.radio.RadioManager.ProgramInfo[]);
+    method @Deprecated @NonNull public abstract java.util.List<android.hardware.radio.RadioManager.ProgramInfo> getProgramList(@Nullable java.util.Map<java.lang.String,java.lang.String>);
+    method public abstract boolean hasControl();
+    method @Deprecated public abstract boolean isAnalogForced();
+    method @Deprecated public abstract boolean isAntennaConnected();
+    method public boolean isConfigFlagSet(int);
+    method public boolean isConfigFlagSupported(int);
+    method public abstract int scan(int, boolean);
+    method @Deprecated public abstract void setAnalogForced(boolean);
+    method public void setConfigFlag(int, boolean);
+    method @Deprecated public abstract int setConfiguration(android.hardware.radio.RadioManager.BandConfig);
+    method public abstract int setMute(boolean);
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> setParameters(@NonNull java.util.Map<java.lang.String,java.lang.String>);
+    method public abstract boolean startBackgroundScan();
+    method public abstract int step(int, boolean);
+    method @Deprecated public abstract int tune(int, int);
+    method public abstract void tune(@NonNull android.hardware.radio.ProgramSelector);
+    field public static final int DIRECTION_DOWN = 1; // 0x1
+    field public static final int DIRECTION_UP = 0; // 0x0
+    field @Deprecated public static final int ERROR_BACKGROUND_SCAN_FAILED = 6; // 0x6
+    field @Deprecated public static final int ERROR_BACKGROUND_SCAN_UNAVAILABLE = 5; // 0x5
+    field @Deprecated public static final int ERROR_CANCELLED = 2; // 0x2
+    field @Deprecated public static final int ERROR_CONFIG = 4; // 0x4
+    field @Deprecated public static final int ERROR_HARDWARE_FAILURE = 0; // 0x0
+    field @Deprecated public static final int ERROR_SCAN_TIMEOUT = 3; // 0x3
+    field @Deprecated public static final int ERROR_SERVER_DIED = 1; // 0x1
+  }
+
+  public abstract static class RadioTuner.Callback {
+    ctor public RadioTuner.Callback();
+    method public void onAntennaState(boolean);
+    method public void onBackgroundScanAvailabilityChange(boolean);
+    method public void onBackgroundScanComplete();
+    method @Deprecated public void onConfigurationChanged(android.hardware.radio.RadioManager.BandConfig);
+    method public void onControlChanged(boolean);
+    method public void onEmergencyAnnouncement(boolean);
+    method @Deprecated public void onError(int);
+    method @Deprecated public void onMetadataChanged(android.hardware.radio.RadioMetadata);
+    method public void onParametersUpdated(@NonNull java.util.Map<java.lang.String,java.lang.String>);
+    method public void onProgramInfoChanged(android.hardware.radio.RadioManager.ProgramInfo);
+    method public void onProgramListChanged();
+    method public void onTrafficAnnouncement(boolean);
+    method public void onTuneFailed(int, @Nullable android.hardware.radio.ProgramSelector);
+  }
+
+}
+
+package android.hardware.soundtrigger {
+
+  public class SoundTrigger {
+    field public static final int RECOGNITION_MODE_GENERIC = 8; // 0x8
+    field public static final int RECOGNITION_MODE_USER_AUTHENTICATION = 4; // 0x4
+    field public static final int RECOGNITION_MODE_USER_IDENTIFICATION = 2; // 0x2
+    field public static final int RECOGNITION_MODE_VOICE_TRIGGER = 1; // 0x1
+    field public static final int STATUS_OK = 0; // 0x0
+  }
+
+  public static final class SoundTrigger.Keyphrase implements android.os.Parcelable {
+    ctor public SoundTrigger.Keyphrase(int, int, @NonNull java.util.Locale, @NonNull String, @Nullable int[]);
+    method public int getId();
+    method @NonNull public java.util.Locale getLocale();
+    method public int getRecognitionModes();
+    method @NonNull public String getText();
+    method @NonNull public int[] getUsers();
+    method @NonNull public static android.hardware.soundtrigger.SoundTrigger.Keyphrase readFromParcel(@NonNull android.os.Parcel);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.Keyphrase> CREATOR;
+  }
+
+  public static final class SoundTrigger.KeyphraseSoundModel extends android.hardware.soundtrigger.SoundTrigger.SoundModel implements android.os.Parcelable {
+    ctor public SoundTrigger.KeyphraseSoundModel(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], @Nullable android.hardware.soundtrigger.SoundTrigger.Keyphrase[], int);
+    ctor public SoundTrigger.KeyphraseSoundModel(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], @Nullable android.hardware.soundtrigger.SoundTrigger.Keyphrase[]);
+    method @NonNull public android.hardware.soundtrigger.SoundTrigger.Keyphrase[] getKeyphrases();
+    method @NonNull public static android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel readFromParcel(@NonNull android.os.Parcel);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel> CREATOR;
+  }
+
+  public static final class SoundTrigger.ModelParamRange implements android.os.Parcelable {
+    method public int getEnd();
+    method public int getStart();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModelParamRange> CREATOR;
+  }
+
+  public static final class SoundTrigger.ModuleProperties implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAudioCapabilities();
+    method @NonNull public String getDescription();
+    method public int getId();
+    method @NonNull public String getImplementor();
+    method public int getMaxBufferMillis();
+    method public int getMaxKeyphrases();
+    method public int getMaxSoundModels();
+    method public int getMaxUsers();
+    method public int getPowerConsumptionMw();
+    method public int getRecognitionModes();
+    method @NonNull public String getSupportedModelArch();
+    method @NonNull public java.util.UUID getUuid();
+    method public int getVersion();
+    method public boolean isCaptureTransitionSupported();
+    method public boolean isConcurrentCaptureSupported();
+    method public boolean isTriggerReturnedInEvent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
+    field public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModuleProperties> CREATOR;
+  }
+
+  public static class SoundTrigger.RecognitionEvent {
+    method @Nullable public android.media.AudioFormat getCaptureFormat();
+    method public int getCaptureSession();
+    method public byte[] getData();
+    method public boolean isCaptureAvailable();
+  }
+
+  public static class SoundTrigger.SoundModel {
+    method @NonNull public byte[] getData();
+    method public int getType();
+    method @NonNull public java.util.UUID getUuid();
+    method @NonNull public java.util.UUID getVendorUuid();
+    method public int getVersion();
+    field public static final int TYPE_GENERIC_SOUND = 1; // 0x1
+    field public static final int TYPE_KEYPHRASE = 0; // 0x0
+  }
+
+}
+
+package android.hardware.usb {
+
+  public class UsbDeviceConnection {
+    method public boolean resetDevice();
+  }
+
+  public class UsbManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public long getCurrentFunctions();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_USB) public java.util.List<android.hardware.usb.UsbPort> getPorts();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void grantPermission(android.hardware.usb.UsbDevice, String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void resetUsbGadget();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void setCurrentFunctions(long);
+    field @RequiresPermission(android.Manifest.permission.MANAGE_USB) public static final String ACTION_USB_ACCESSORY_HANDSHAKE = "android.hardware.usb.action.USB_ACCESSORY_HANDSHAKE";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_USB) public static final String ACTION_USB_PORT_CHANGED = "android.hardware.usb.action.USB_PORT_CHANGED";
+    field public static final String ACTION_USB_STATE = "android.hardware.usb.action.USB_STATE";
+    field public static final String EXTRA_ACCESSORY_HANDSHAKE_END = "android.hardware.usb.extra.ACCESSORY_HANDSHAKE_END";
+    field public static final String EXTRA_ACCESSORY_START = "android.hardware.usb.extra.ACCESSORY_START";
+    field public static final String EXTRA_ACCESSORY_STRING_COUNT = "android.hardware.usb.extra.ACCESSORY_STRING_COUNT";
+    field public static final String EXTRA_ACCESSORY_UEVENT_TIME = "android.hardware.usb.extra.ACCESSORY_UEVENT_TIME";
+    field public static final long FUNCTION_ACCESSORY = 2L; // 0x2L
+    field public static final long FUNCTION_ADB = 1L; // 0x1L
+    field public static final long FUNCTION_AUDIO_SOURCE = 64L; // 0x40L
+    field public static final long FUNCTION_MIDI = 8L; // 0x8L
+    field public static final long FUNCTION_MTP = 4L; // 0x4L
+    field public static final long FUNCTION_NCM = 1024L; // 0x400L
+    field public static final long FUNCTION_NONE = 0L; // 0x0L
+    field public static final long FUNCTION_PTP = 16L; // 0x10L
+    field public static final long FUNCTION_RNDIS = 32L; // 0x20L
+    field public static final String USB_CONFIGURED = "configured";
+    field public static final String USB_CONNECTED = "connected";
+    field public static final String USB_FUNCTION_NCM = "ncm";
+    field public static final String USB_FUNCTION_RNDIS = "rndis";
+  }
+
+  public final class UsbPort {
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USB) public android.hardware.usb.UsbPortStatus getStatus();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void setRoles(int, int);
+  }
+
+  public final class UsbPortStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCurrentDataRole();
+    method public int getCurrentMode();
+    method public int getCurrentPowerRole();
+    method public int getSupportedRoleCombinations();
+    method public boolean isConnected();
+    method public boolean isRoleCombinationSupported(int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbPortStatus> CREATOR;
+    field public static final int DATA_ROLE_DEVICE = 2; // 0x2
+    field public static final int DATA_ROLE_HOST = 1; // 0x1
+    field public static final int DATA_ROLE_NONE = 0; // 0x0
+    field public static final int MODE_AUDIO_ACCESSORY = 4; // 0x4
+    field public static final int MODE_DEBUG_ACCESSORY = 8; // 0x8
+    field public static final int MODE_DFP = 2; // 0x2
+    field public static final int MODE_NONE = 0; // 0x0
+    field public static final int MODE_UFP = 1; // 0x1
+    field public static final int POWER_ROLE_NONE = 0; // 0x0
+    field public static final int POWER_ROLE_SINK = 2; // 0x2
+    field public static final int POWER_ROLE_SOURCE = 1; // 0x1
+  }
+
+}
+
+package android.location {
+
+  public abstract class BatchedLocationCallback {
+    ctor public BatchedLocationCallback();
+    method public void onLocationBatch(java.util.List<android.location.Location>);
+  }
+
+  public final class CorrelationVector implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0f) public double getFrequencyOffsetMetersPerSecond();
+    method @NonNull public int[] getMagnitude();
+    method @FloatRange(from=0.0f) public double getSamplingStartMeters();
+    method @FloatRange(from=0.0f, fromInclusive=false) public double getSamplingWidthMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.CorrelationVector> CREATOR;
+  }
+
+  public static final class CorrelationVector.Builder {
+    ctor public CorrelationVector.Builder();
+    method @NonNull public android.location.CorrelationVector build();
+    method @NonNull public android.location.CorrelationVector.Builder setFrequencyOffsetMetersPerSecond(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.CorrelationVector.Builder setMagnitude(@NonNull int[]);
+    method @NonNull public android.location.CorrelationVector.Builder setSamplingStartMeters(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.CorrelationVector.Builder setSamplingWidthMeters(@FloatRange(from=0.0f, fromInclusive=false) double);
+  }
+
+  public final class GnssCapabilities implements android.os.Parcelable {
+    method public boolean hasGeofencing();
+    method public boolean hasLowPowerMode();
+    method public boolean hasMeasurementCorrections();
+    method public boolean hasMeasurementCorrectionsExcessPathLength();
+    method public boolean hasMeasurementCorrectionsForDriving();
+    method public boolean hasMeasurementCorrectionsLosSats();
+    method @Deprecated public boolean hasMeasurementCorrectionsReflectingPane();
+    method public boolean hasMeasurementCorrectionsReflectingPlane();
+    method public boolean hasMeasurementCorrelationVectors();
+    method @Deprecated public boolean hasNavMessages();
+    method @Deprecated public boolean hasSatelliteBlacklist();
+    method public boolean hasSatelliteBlocklist();
+    method public boolean hasSatellitePvt();
+  }
+
+  public static final class GnssCapabilities.Builder {
+    method @NonNull public android.location.GnssCapabilities.Builder setHasGeofencing(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasLowPowerMode(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrections(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsExcessPathLength(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsForDriving(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsLosSats(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsReflectingPlane(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrelationVectors(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasSatelliteBlocklist(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasSatellitePvt(boolean);
+  }
+
+  public final class GnssMeasurement implements android.os.Parcelable {
+    method @Nullable public java.util.Collection<android.location.CorrelationVector> getCorrelationVectors();
+    method @Nullable public android.location.SatellitePvt getSatellitePvt();
+    method public boolean hasCorrelationVectors();
+    method public boolean hasSatellitePvt();
+  }
+
+  public final class GnssMeasurementCorrections implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=-1000.0F, to=10000.0f) public double getAltitudeMeters();
+    method @FloatRange(from=0.0f, to=360.0f) public float getEnvironmentBearingDegrees();
+    method @FloatRange(from=0.0f, to=180.0f) public float getEnvironmentBearingUncertaintyDegrees();
+    method @FloatRange(from=0.0f) public double getHorizontalPositionUncertaintyMeters();
+    method @FloatRange(from=-90.0F, to=90.0f) public double getLatitudeDegrees();
+    method @FloatRange(from=-180.0F, to=180.0f) public double getLongitudeDegrees();
+    method @NonNull public java.util.List<android.location.GnssSingleSatCorrection> getSingleSatelliteCorrectionList();
+    method @IntRange(from=0) public long getToaGpsNanosecondsOfWeek();
+    method @FloatRange(from=0.0f) public double getVerticalPositionUncertaintyMeters();
+    method public boolean hasEnvironmentBearing();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.location.GnssMeasurementCorrections> CREATOR;
+  }
+
+  public static final class GnssMeasurementCorrections.Builder {
+    ctor public GnssMeasurementCorrections.Builder();
+    method @NonNull public android.location.GnssMeasurementCorrections build();
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setAltitudeMeters(@FloatRange(from=-1000.0F, to=10000.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setEnvironmentBearingDegrees(@FloatRange(from=0.0f, to=360.0f) float);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setEnvironmentBearingUncertaintyDegrees(@FloatRange(from=0.0f, to=180.0f) float);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setHorizontalPositionUncertaintyMeters(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setLatitudeDegrees(@FloatRange(from=-90.0F, to=90.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setLongitudeDegrees(@FloatRange(from=-180.0F, to=180.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setSingleSatelliteCorrectionList(@NonNull java.util.List<android.location.GnssSingleSatCorrection>);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setToaGpsNanosecondsOfWeek(@IntRange(from=0) long);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setVerticalPositionUncertaintyMeters(@FloatRange(from=0.0f) double);
+  }
+
+  public final class GnssMeasurementRequest implements android.os.Parcelable {
+    method public boolean isCorrelationVectorOutputsEnabled();
+  }
+
+  public static final class GnssMeasurementRequest.Builder {
+    method @NonNull public android.location.GnssMeasurementRequest.Builder setCorrelationVectorOutputsEnabled(boolean);
+  }
+
+  public final class GnssReflectingPlane implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=-1000.0F, to=10000.0f) public double getAltitudeMeters();
+    method @FloatRange(from=0.0f, to=360.0f) public double getAzimuthDegrees();
+    method @FloatRange(from=-90.0F, to=90.0f) public double getLatitudeDegrees();
+    method @FloatRange(from=-180.0F, to=180.0f) public double getLongitudeDegrees();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.location.GnssReflectingPlane> CREATOR;
+  }
+
+  public static final class GnssReflectingPlane.Builder {
+    ctor public GnssReflectingPlane.Builder();
+    method @NonNull public android.location.GnssReflectingPlane build();
+    method @NonNull public android.location.GnssReflectingPlane.Builder setAltitudeMeters(@FloatRange(from=-1000.0F, to=10000.0f) double);
+    method @NonNull public android.location.GnssReflectingPlane.Builder setAzimuthDegrees(@FloatRange(from=0.0f, to=360.0f) double);
+    method @NonNull public android.location.GnssReflectingPlane.Builder setLatitudeDegrees(@FloatRange(from=-90.0F, to=90.0f) double);
+    method @NonNull public android.location.GnssReflectingPlane.Builder setLongitudeDegrees(@FloatRange(from=-180.0F, to=180.0f) double);
+  }
+
+  public final class GnssRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isFullTracking();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssRequest> CREATOR;
+  }
+
+  public static final class GnssRequest.Builder {
+    ctor public GnssRequest.Builder();
+    ctor public GnssRequest.Builder(@NonNull android.location.GnssRequest);
+    method @NonNull public android.location.GnssRequest build();
+    method @NonNull public android.location.GnssRequest.Builder setFullTracking(boolean);
+  }
+
+  public final class GnssSingleSatCorrection implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0f, fromInclusive=false) public float getCarrierFrequencyHz();
+    method public int getConstellationType();
+    method @FloatRange(from=0.0f) public float getExcessPathLengthMeters();
+    method @FloatRange(from=0.0f) public float getExcessPathLengthUncertaintyMeters();
+    method @FloatRange(from=0.0f, to=1.0f) public float getProbabilityLineOfSight();
+    method @Nullable public android.location.GnssReflectingPlane getReflectingPlane();
+    method @IntRange(from=0) public int getSatelliteId();
+    method public boolean hasExcessPathLength();
+    method public boolean hasExcessPathLengthUncertainty();
+    method public boolean hasReflectingPlane();
+    method public boolean hasValidSatelliteLineOfSight();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.location.GnssSingleSatCorrection> CREATOR;
+  }
+
+  public static final class GnssSingleSatCorrection.Builder {
+    ctor public GnssSingleSatCorrection.Builder();
+    method @NonNull public android.location.GnssSingleSatCorrection build();
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setCarrierFrequencyHz(@FloatRange(from=0.0f, fromInclusive=false) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setConstellationType(int);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setExcessPathLengthMeters(@FloatRange(from=0.0f) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setExcessPathLengthUncertaintyMeters(@FloatRange(from=0.0f) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setProbabilityLineOfSight(@FloatRange(from=0.0f, to=1.0f) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setReflectingPlane(@Nullable android.location.GnssReflectingPlane);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setSatelliteId(@IntRange(from=0) int);
+  }
+
+  @Deprecated public class GpsClock implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public double getBiasInNs();
+    method @Deprecated public double getBiasUncertaintyInNs();
+    method @Deprecated public double getDriftInNsPerSec();
+    method @Deprecated public double getDriftUncertaintyInNsPerSec();
+    method @Deprecated public long getFullBiasInNs();
+    method @Deprecated public short getLeapSecond();
+    method @Deprecated public long getTimeInNs();
+    method @Deprecated public double getTimeUncertaintyInNs();
+    method @Deprecated public byte getType();
+    method @Deprecated public boolean hasBiasInNs();
+    method @Deprecated public boolean hasBiasUncertaintyInNs();
+    method @Deprecated public boolean hasDriftInNsPerSec();
+    method @Deprecated public boolean hasDriftUncertaintyInNsPerSec();
+    method @Deprecated public boolean hasFullBiasInNs();
+    method @Deprecated public boolean hasLeapSecond();
+    method @Deprecated public boolean hasTimeUncertaintyInNs();
+    method @Deprecated public void reset();
+    method @Deprecated public void resetBiasInNs();
+    method @Deprecated public void resetBiasUncertaintyInNs();
+    method @Deprecated public void resetDriftInNsPerSec();
+    method @Deprecated public void resetDriftUncertaintyInNsPerSec();
+    method @Deprecated public void resetFullBiasInNs();
+    method @Deprecated public void resetLeapSecond();
+    method @Deprecated public void resetTimeUncertaintyInNs();
+    method @Deprecated public void set(android.location.GpsClock);
+    method @Deprecated public void setBiasInNs(double);
+    method @Deprecated public void setBiasUncertaintyInNs(double);
+    method @Deprecated public void setDriftInNsPerSec(double);
+    method @Deprecated public void setDriftUncertaintyInNsPerSec(double);
+    method @Deprecated public void setFullBiasInNs(long);
+    method @Deprecated public void setLeapSecond(short);
+    method @Deprecated public void setTimeInNs(long);
+    method @Deprecated public void setTimeUncertaintyInNs(double);
+    method @Deprecated public void setType(byte);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsClock> CREATOR;
+    field @Deprecated public static final byte TYPE_GPS_TIME = 2; // 0x2
+    field @Deprecated public static final byte TYPE_LOCAL_HW_TIME = 1; // 0x1
+    field @Deprecated public static final byte TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public class GpsMeasurement implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public double getAccumulatedDeltaRangeInMeters();
+    method @Deprecated public short getAccumulatedDeltaRangeState();
+    method @Deprecated public double getAccumulatedDeltaRangeUncertaintyInMeters();
+    method @Deprecated public double getAzimuthInDeg();
+    method @Deprecated public double getAzimuthUncertaintyInDeg();
+    method @Deprecated public int getBitNumber();
+    method @Deprecated public long getCarrierCycles();
+    method @Deprecated public float getCarrierFrequencyInHz();
+    method @Deprecated public double getCarrierPhase();
+    method @Deprecated public double getCarrierPhaseUncertainty();
+    method @Deprecated public double getCn0InDbHz();
+    method @Deprecated public double getCodePhaseInChips();
+    method @Deprecated public double getCodePhaseUncertaintyInChips();
+    method @Deprecated public double getDopplerShiftInHz();
+    method @Deprecated public double getDopplerShiftUncertaintyInHz();
+    method @Deprecated public double getElevationInDeg();
+    method @Deprecated public double getElevationUncertaintyInDeg();
+    method @Deprecated public byte getLossOfLock();
+    method @Deprecated public byte getMultipathIndicator();
+    method @Deprecated public byte getPrn();
+    method @Deprecated public double getPseudorangeInMeters();
+    method @Deprecated public double getPseudorangeRateInMetersPerSec();
+    method @Deprecated public double getPseudorangeRateUncertaintyInMetersPerSec();
+    method @Deprecated public double getPseudorangeUncertaintyInMeters();
+    method @Deprecated public long getReceivedGpsTowInNs();
+    method @Deprecated public long getReceivedGpsTowUncertaintyInNs();
+    method @Deprecated public double getSnrInDb();
+    method @Deprecated public short getState();
+    method @Deprecated public short getTimeFromLastBitInMs();
+    method @Deprecated public double getTimeOffsetInNs();
+    method @Deprecated public boolean hasAzimuthInDeg();
+    method @Deprecated public boolean hasAzimuthUncertaintyInDeg();
+    method @Deprecated public boolean hasBitNumber();
+    method @Deprecated public boolean hasCarrierCycles();
+    method @Deprecated public boolean hasCarrierFrequencyInHz();
+    method @Deprecated public boolean hasCarrierPhase();
+    method @Deprecated public boolean hasCarrierPhaseUncertainty();
+    method @Deprecated public boolean hasCodePhaseInChips();
+    method @Deprecated public boolean hasCodePhaseUncertaintyInChips();
+    method @Deprecated public boolean hasDopplerShiftInHz();
+    method @Deprecated public boolean hasDopplerShiftUncertaintyInHz();
+    method @Deprecated public boolean hasElevationInDeg();
+    method @Deprecated public boolean hasElevationUncertaintyInDeg();
+    method @Deprecated public boolean hasPseudorangeInMeters();
+    method @Deprecated public boolean hasPseudorangeUncertaintyInMeters();
+    method @Deprecated public boolean hasSnrInDb();
+    method @Deprecated public boolean hasTimeFromLastBitInMs();
+    method @Deprecated public boolean isPseudorangeRateCorrected();
+    method @Deprecated public boolean isUsedInFix();
+    method @Deprecated public void reset();
+    method @Deprecated public void resetAzimuthInDeg();
+    method @Deprecated public void resetAzimuthUncertaintyInDeg();
+    method @Deprecated public void resetBitNumber();
+    method @Deprecated public void resetCarrierCycles();
+    method @Deprecated public void resetCarrierFrequencyInHz();
+    method @Deprecated public void resetCarrierPhase();
+    method @Deprecated public void resetCarrierPhaseUncertainty();
+    method @Deprecated public void resetCodePhaseInChips();
+    method @Deprecated public void resetCodePhaseUncertaintyInChips();
+    method @Deprecated public void resetDopplerShiftInHz();
+    method @Deprecated public void resetDopplerShiftUncertaintyInHz();
+    method @Deprecated public void resetElevationInDeg();
+    method @Deprecated public void resetElevationUncertaintyInDeg();
+    method @Deprecated public void resetPseudorangeInMeters();
+    method @Deprecated public void resetPseudorangeUncertaintyInMeters();
+    method @Deprecated public void resetSnrInDb();
+    method @Deprecated public void resetTimeFromLastBitInMs();
+    method @Deprecated public void set(android.location.GpsMeasurement);
+    method @Deprecated public void setAccumulatedDeltaRangeInMeters(double);
+    method @Deprecated public void setAccumulatedDeltaRangeState(short);
+    method @Deprecated public void setAccumulatedDeltaRangeUncertaintyInMeters(double);
+    method @Deprecated public void setAzimuthInDeg(double);
+    method @Deprecated public void setAzimuthUncertaintyInDeg(double);
+    method @Deprecated public void setBitNumber(int);
+    method @Deprecated public void setCarrierCycles(long);
+    method @Deprecated public void setCarrierFrequencyInHz(float);
+    method @Deprecated public void setCarrierPhase(double);
+    method @Deprecated public void setCarrierPhaseUncertainty(double);
+    method @Deprecated public void setCn0InDbHz(double);
+    method @Deprecated public void setCodePhaseInChips(double);
+    method @Deprecated public void setCodePhaseUncertaintyInChips(double);
+    method @Deprecated public void setDopplerShiftInHz(double);
+    method @Deprecated public void setDopplerShiftUncertaintyInHz(double);
+    method @Deprecated public void setElevationInDeg(double);
+    method @Deprecated public void setElevationUncertaintyInDeg(double);
+    method @Deprecated public void setLossOfLock(byte);
+    method @Deprecated public void setMultipathIndicator(byte);
+    method @Deprecated public void setPrn(byte);
+    method @Deprecated public void setPseudorangeInMeters(double);
+    method @Deprecated public void setPseudorangeRateInMetersPerSec(double);
+    method @Deprecated public void setPseudorangeRateUncertaintyInMetersPerSec(double);
+    method @Deprecated public void setPseudorangeUncertaintyInMeters(double);
+    method @Deprecated public void setReceivedGpsTowInNs(long);
+    method @Deprecated public void setReceivedGpsTowUncertaintyInNs(long);
+    method @Deprecated public void setSnrInDb(double);
+    method @Deprecated public void setState(short);
+    method @Deprecated public void setTimeFromLastBitInMs(short);
+    method @Deprecated public void setTimeOffsetInNs(double);
+    method @Deprecated public void setUsedInFix(boolean);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final short ADR_STATE_CYCLE_SLIP = 4; // 0x4
+    field @Deprecated public static final short ADR_STATE_RESET = 2; // 0x2
+    field @Deprecated public static final short ADR_STATE_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final short ADR_STATE_VALID = 1; // 0x1
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurement> CREATOR;
+    field @Deprecated public static final byte LOSS_OF_LOCK_CYCLE_SLIP = 2; // 0x2
+    field @Deprecated public static final byte LOSS_OF_LOCK_OK = 1; // 0x1
+    field @Deprecated public static final byte LOSS_OF_LOCK_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_DETECTED = 1; // 0x1
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_NOT_USED = 2; // 0x2
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final short STATE_BIT_SYNC = 2; // 0x2
+    field @Deprecated public static final short STATE_CODE_LOCK = 1; // 0x1
+    field @Deprecated public static final short STATE_MSEC_AMBIGUOUS = 16; // 0x10
+    field @Deprecated public static final short STATE_SUBFRAME_SYNC = 4; // 0x4
+    field @Deprecated public static final short STATE_TOW_DECODED = 8; // 0x8
+    field @Deprecated public static final short STATE_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public class GpsMeasurementsEvent implements android.os.Parcelable {
+    ctor @Deprecated public GpsMeasurementsEvent(android.location.GpsClock, android.location.GpsMeasurement[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.location.GpsClock getClock();
+    method @Deprecated @NonNull public java.util.Collection<android.location.GpsMeasurement> getMeasurements();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurementsEvent> CREATOR;
+    field @Deprecated public static final int STATUS_GPS_LOCATION_DISABLED = 2; // 0x2
+    field @Deprecated public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
+    field @Deprecated public static final int STATUS_READY = 1; // 0x1
+  }
+
+  @Deprecated public static interface GpsMeasurementsEvent.Listener {
+    method @Deprecated public void onGpsMeasurementsReceived(android.location.GpsMeasurementsEvent);
+    method @Deprecated public void onStatusChanged(int);
+  }
+
+  @Deprecated public class GpsNavigationMessage implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public byte[] getData();
+    method @Deprecated public short getMessageId();
+    method @Deprecated public byte getPrn();
+    method @Deprecated public short getStatus();
+    method @Deprecated public short getSubmessageId();
+    method @Deprecated public byte getType();
+    method @Deprecated public void reset();
+    method @Deprecated public void set(android.location.GpsNavigationMessage);
+    method @Deprecated public void setData(byte[]);
+    method @Deprecated public void setMessageId(short);
+    method @Deprecated public void setPrn(byte);
+    method @Deprecated public void setStatus(short);
+    method @Deprecated public void setSubmessageId(short);
+    method @Deprecated public void setType(byte);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessage> CREATOR;
+    field @Deprecated public static final short STATUS_PARITY_PASSED = 1; // 0x1
+    field @Deprecated public static final short STATUS_PARITY_REBUILT = 2; // 0x2
+    field @Deprecated public static final short STATUS_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final byte TYPE_CNAV2 = 4; // 0x4
+    field @Deprecated public static final byte TYPE_L1CA = 1; // 0x1
+    field @Deprecated public static final byte TYPE_L2CNAV = 2; // 0x2
+    field @Deprecated public static final byte TYPE_L5CNAV = 3; // 0x3
+    field @Deprecated public static final byte TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public class GpsNavigationMessageEvent implements android.os.Parcelable {
+    ctor @Deprecated public GpsNavigationMessageEvent(android.location.GpsNavigationMessage);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.location.GpsNavigationMessage getNavigationMessage();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessageEvent> CREATOR;
+    field @Deprecated public static int STATUS_GPS_LOCATION_DISABLED;
+    field @Deprecated public static int STATUS_NOT_SUPPORTED;
+    field @Deprecated public static int STATUS_READY;
+  }
+
+  @Deprecated public static interface GpsNavigationMessageEvent.Listener {
+    method @Deprecated public void onGpsNavigationMessageReceived(android.location.GpsNavigationMessageEvent);
+    method @Deprecated public void onStatusChanged(int);
+  }
+
+  public final class LastLocationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isHiddenFromAppOps();
+    method public boolean isLocationSettingsIgnored();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.LastLocationRequest> CREATOR;
+  }
+
+  public static final class LastLocationRequest.Builder {
+    ctor public LastLocationRequest.Builder();
+    ctor public LastLocationRequest.Builder(@NonNull android.location.LastLocationRequest);
+    method @NonNull public android.location.LastLocationRequest build();
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public android.location.LastLocationRequest.Builder setHiddenFromAppOps(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LastLocationRequest.Builder setLocationSettingsIgnored(boolean);
+  }
+
+  public class Location implements android.os.Parcelable {
+    method public boolean isComplete();
+    method public void makeComplete();
+    method @Deprecated public void setIsFromMockProvider(boolean);
+    field @Deprecated public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
+  }
+
+  public class LocationManager {
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void addProviderRequestChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.provider.ProviderRequest.ChangedListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void flushGnssBatch();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull android.location.LocationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
+    method @Nullable public String getExtraLocationControllerPackage();
+    method @Deprecated public int getGnssBatchSize();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.location.Location getLastKnownLocation(@NonNull String, @NonNull android.location.LastLocationRequest);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void injectGnssMeasurementCorrections(@NonNull android.location.GnssMeasurementCorrections);
+    method public boolean isExtraLocationControllerPackageEnabled();
+    method public boolean isLocationEnabledForUser(@NonNull android.os.UserHandle);
+    method public boolean isProviderEnabledForUser(@NonNull String, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String, @Nullable String);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.UPDATE_APP_OPS_STATS}) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void removeProviderRequestChangedListener(@NonNull android.location.provider.ProviderRequest.ChangedListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setExtraLocationControllerPackage(@Nullable String);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setExtraLocationControllerPackageEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean setProviderEnabledForUser(@NonNull String, boolean, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean unregisterGnssBatchedLocationCallback(@NonNull android.location.BatchedLocationCallback);
+  }
+
+  public final class LocationRequest implements android.os.Parcelable {
+    method @Deprecated @NonNull public static android.location.LocationRequest create();
+    method @Deprecated @NonNull public static android.location.LocationRequest createFromDeprecatedCriteria(@NonNull android.location.Criteria, long, float, boolean);
+    method @Deprecated @NonNull public static android.location.LocationRequest createFromDeprecatedProvider(@NonNull String, long, float, boolean);
+    method @Deprecated public long getExpireAt();
+    method @Deprecated public long getExpireIn();
+    method @Deprecated public long getFastestInterval();
+    method @Deprecated public boolean getHideFromAppOps();
+    method @Deprecated public long getInterval();
+    method @Deprecated public int getNumUpdates();
+    method @Deprecated @NonNull public String getProvider();
+    method @Deprecated public float getSmallestDisplacement();
+    method @NonNull public android.os.WorkSource getWorkSource();
+    method public boolean isHiddenFromAppOps();
+    method public boolean isLocationSettingsIgnored();
+    method public boolean isLowPower();
+    method @Deprecated public boolean isLowPowerMode();
+    method @Deprecated @NonNull public android.location.LocationRequest setExpireAt(long);
+    method @Deprecated @NonNull public android.location.LocationRequest setExpireIn(long);
+    method @Deprecated @NonNull public android.location.LocationRequest setFastestInterval(long);
+    method @Deprecated public void setHideFromAppOps(boolean);
+    method @Deprecated @NonNull public android.location.LocationRequest setInterval(long);
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest setLocationSettingsIgnored(boolean);
+    method @Deprecated @NonNull public android.location.LocationRequest setLowPowerMode(boolean);
+    method @Deprecated @NonNull public android.location.LocationRequest setNumUpdates(int);
+    method @Deprecated @NonNull public android.location.LocationRequest setProvider(@NonNull String);
+    method @Deprecated @NonNull public android.location.LocationRequest setQuality(int);
+    method @Deprecated @NonNull public android.location.LocationRequest setSmallestDisplacement(float);
+    method @Deprecated public void setWorkSource(@Nullable android.os.WorkSource);
+    field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66
+    field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68
+    field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64
+    field @Deprecated public static final int POWER_HIGH = 203; // 0xcb
+    field @Deprecated public static final int POWER_LOW = 201; // 0xc9
+    field @Deprecated public static final int POWER_NONE = 200; // 0xc8
+  }
+
+  public static final class LocationRequest.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public android.location.LocationRequest.Builder setHiddenFromAppOps(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest.Builder setLocationSettingsIgnored(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public android.location.LocationRequest.Builder setLowPower(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.location.LocationRequest.Builder setWorkSource(@Nullable android.os.WorkSource);
+  }
+
+  public final class SatellitePvt implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.location.SatellitePvt.ClockInfo getClockInfo();
+    method @FloatRange public double getIonoDelayMeters();
+    method @Nullable public android.location.SatellitePvt.PositionEcef getPositionEcef();
+    method @FloatRange public double getTropoDelayMeters();
+    method @Nullable public android.location.SatellitePvt.VelocityEcef getVelocityEcef();
+    method public boolean hasIono();
+    method public boolean hasPositionVelocityClockInfo();
+    method public boolean hasTropo();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt> CREATOR;
+  }
+
+  public static final class SatellitePvt.Builder {
+    ctor public SatellitePvt.Builder();
+    method @NonNull public android.location.SatellitePvt build();
+    method @NonNull public android.location.SatellitePvt.Builder setClockInfo(@NonNull android.location.SatellitePvt.ClockInfo);
+    method @NonNull public android.location.SatellitePvt.Builder setIonoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double);
+    method @NonNull public android.location.SatellitePvt.Builder setPositionEcef(@NonNull android.location.SatellitePvt.PositionEcef);
+    method @NonNull public android.location.SatellitePvt.Builder setTropoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double);
+    method @NonNull public android.location.SatellitePvt.Builder setVelocityEcef(@NonNull android.location.SatellitePvt.VelocityEcef);
+  }
+
+  public static final class SatellitePvt.ClockInfo implements android.os.Parcelable {
+    ctor public SatellitePvt.ClockInfo(double, double, double);
+    method public int describeContents();
+    method @FloatRange public double getClockDriftMetersPerSecond();
+    method @FloatRange public double getHardwareCodeBiasMeters();
+    method @FloatRange public double getTimeCorrectionMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt.ClockInfo> CREATOR;
+  }
+
+  public static final class SatellitePvt.PositionEcef implements android.os.Parcelable {
+    ctor public SatellitePvt.PositionEcef(double, double, double, double);
+    method public int describeContents();
+    method @FloatRange(from=0.0f, fromInclusive=false) public double getUreMeters();
+    method @FloatRange public double getXMeters();
+    method @FloatRange public double getYMeters();
+    method @FloatRange public double getZMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt.PositionEcef> CREATOR;
+  }
+
+  public static final class SatellitePvt.VelocityEcef implements android.os.Parcelable {
+    ctor public SatellitePvt.VelocityEcef(double, double, double, double);
+    method public int describeContents();
+    method @FloatRange(from=0.0f, fromInclusive=false) public double getUreRateMetersPerSecond();
+    method @FloatRange public double getXMetersPerSecond();
+    method @FloatRange public double getYMetersPerSecond();
+    method @FloatRange public double getZMetersPerSecond();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt.VelocityEcef> CREATOR;
+  }
+
+}
+
+package android.location.provider {
+
+  public abstract class LocationProviderBase {
+    ctor public LocationProviderBase(@NonNull android.content.Context, @NonNull String, @NonNull android.location.provider.ProviderProperties);
+    method @Nullable public final android.os.IBinder getBinder();
+    method @NonNull public android.location.provider.ProviderProperties getProperties();
+    method public boolean isAllowed();
+    method public abstract void onFlush(@NonNull android.location.provider.LocationProviderBase.OnFlushCompleteCallback);
+    method public abstract void onSendExtraCommand(@NonNull String, @Nullable android.os.Bundle);
+    method public abstract void onSetRequest(@NonNull android.location.provider.ProviderRequest);
+    method public void reportLocation(@NonNull android.location.Location);
+    method public void reportLocations(@NonNull java.util.List<android.location.Location>);
+    method public void setAllowed(boolean);
+    method public void setProperties(@NonNull android.location.provider.ProviderProperties);
+    field public static final String ACTION_FUSED_PROVIDER = "com.android.location.service.FusedLocationProvider";
+    field public static final String ACTION_NETWORK_PROVIDER = "com.android.location.service.v3.NetworkLocationProvider";
+  }
+
+  public static interface LocationProviderBase.OnFlushCompleteCallback {
+    method public void onFlushComplete();
+  }
+
+  public final class ProviderRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public long getIntervalMillis();
+    method @IntRange(from=0) public long getMaxUpdateDelayMillis();
+    method public int getQuality();
+    method @NonNull public android.os.WorkSource getWorkSource();
+    method public boolean isActive();
+    method public boolean isLocationSettingsIgnored();
+    method public boolean isLowPower();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.provider.ProviderRequest> CREATOR;
+    field @NonNull public static final android.location.provider.ProviderRequest EMPTY_REQUEST;
+    field public static final long INTERVAL_DISABLED = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+  public static final class ProviderRequest.Builder {
+    ctor public ProviderRequest.Builder();
+    method @NonNull public android.location.provider.ProviderRequest build();
+    method @NonNull public android.location.provider.ProviderRequest.Builder setIntervalMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setLocationSettingsIgnored(boolean);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setLowPower(boolean);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setQuality(int);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setWorkSource(@NonNull android.os.WorkSource);
+  }
+
+  public static interface ProviderRequest.ChangedListener {
+    method public void onProviderRequestChanged(@NonNull String, @NonNull android.location.provider.ProviderRequest);
+  }
+
+}
+
+package android.media {
+
+  public final class AudioAttributes implements android.os.Parcelable {
+    method public int getAllFlags();
+    method public android.os.Bundle getBundle();
+    method public int getCapturePreset();
+    method public int getSystemUsage();
+    method public static boolean isSystemUsage(int);
+    field public static final int FLAG_BEACON = 8; // 0x8
+    field public static final int FLAG_BYPASS_INTERRUPTION_POLICY = 64; // 0x40
+    field public static final int FLAG_BYPASS_MUTE = 128; // 0x80
+    field public static final int FLAG_HW_HOTWORD = 32; // 0x20
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_ANNOUNCEMENT = 1003; // 0x3eb
+    field @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public static final int USAGE_CALL_ASSISTANT = 17; // 0x11
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_EMERGENCY = 1000; // 0x3e8
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_SAFETY = 1001; // 0x3e9
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_VEHICLE_STATUS = 1002; // 0x3ea
+  }
+
+  public static class AudioAttributes.Builder {
+    method public android.media.AudioAttributes.Builder addBundle(@NonNull android.os.Bundle);
+    method public android.media.AudioAttributes.Builder setCapturePreset(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public android.media.AudioAttributes.Builder setHotwordModeEnabled(boolean);
+    method public android.media.AudioAttributes.Builder setInternalCapturePreset(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioAttributes.Builder setSystemUsage(int);
+  }
+
+  public final class AudioDeviceAttributes implements android.os.Parcelable {
+    ctor public AudioDeviceAttributes(@NonNull android.media.AudioDeviceInfo);
+    ctor public AudioDeviceAttributes(int, int, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String getAddress();
+    method public int getRole();
+    method public int getType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioDeviceAttributes> CREATOR;
+    field public static final int ROLE_INPUT = 1; // 0x1
+    field public static final int ROLE_OUTPUT = 2; // 0x2
+  }
+
+  public final class AudioFocusInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.media.AudioAttributes getAttributes();
+    method @NonNull public String getClientId();
+    method public int getClientUid();
+    method public int getFlags();
+    method public int getGainRequest();
+    method public int getLossReceived();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioFocusInfo> CREATOR;
+  }
+
+  public final class AudioFocusRequest {
+    method public boolean locksFocus();
+  }
+
+  public static final class AudioFocusRequest.Builder {
+    method @NonNull public android.media.AudioFocusRequest.Builder setLocksFocus(boolean);
+  }
+
+  public class AudioManager {
+    method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDeviceForStrategyChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDevicesForCapturePresetChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDevicesForCapturePresetChangedListener) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDevicesForStrategyChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDevicesForStrategyChangedListener) throws java.lang.SecurityException;
+    method public void clearAudioServerStateCallback();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean clearPreferredDevicesForCapturePreset(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
+    method @IntRange(from=0) public long getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioProductStrategy> getAudioProductStrategies();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioVolumeGroup> getAudioVolumeGroups();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public int getDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public java.util.List<android.media.AudioDeviceAttributes> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
+    method @IntRange(from=0) public long getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
+    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioDeviceAttributes getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getPreferredDevicesForCapturePreset(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getPreferredDevicesForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int[] getSupportedSystemUsages();
+    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+    method public boolean isAudioServerRunning();
+    method public boolean isHdmiSystemAudioSupported();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
+    method public void registerVolumeGroupCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.VolumeGroupCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDeviceForStrategyChangedListener(@NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDevicesForCapturePresetChangedListener(@NonNull android.media.AudioManager.OnPreferredDevicesForCapturePresetChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDevicesForStrategyChangedListener(@NonNull android.media.AudioManager.OnPreferredDevicesForStrategyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean removePreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException;
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int requestAudioFocus(@NonNull android.media.AudioFocusRequest, @Nullable android.media.audiopolicy.AudioPolicy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo, @IntRange(from=0) long);
+    method public void setAudioServerStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioServerStateCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setFocusRequestResult(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForCapturePreset(int, @NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDevicesForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull java.util.List<android.media.AudioDeviceAttributes>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setSupportedSystemUsages(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setVolumeIndexForAttributes(@NonNull android.media.AudioAttributes, int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicyAsync(@NonNull android.media.audiopolicy.AudioPolicy);
+    method public void unregisterVolumeGroupCallback(@NonNull android.media.AudioManager.VolumeGroupCallback);
+    field public static final int AUDIOFOCUS_FLAG_DELAY_OK = 1; // 0x1
+    field public static final int AUDIOFOCUS_FLAG_LOCK = 4; // 0x4
+    field public static final int AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS = 2; // 0x2
+    field public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE = 3; // 0x3
+    field public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE = 4; // 0x4
+    field public static final int DEVICE_VOLUME_BEHAVIOR_FIXED = 2; // 0x2
+    field public static final int DEVICE_VOLUME_BEHAVIOR_FULL = 1; // 0x1
+    field public static final int DEVICE_VOLUME_BEHAVIOR_VARIABLE = 0; // 0x0
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int STREAM_ASSISTANT = 11; // 0xb
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public abstract static class AudioManager.AudioServerStateCallback {
+    ctor public AudioManager.AudioServerStateCallback();
+    method public void onAudioServerDown();
+    method public void onAudioServerUp();
+  }
+
+  @Deprecated public static interface AudioManager.OnPreferredDeviceForStrategyChangedListener {
+    method @Deprecated public void onPreferredDeviceForStrategyChanged(@NonNull android.media.audiopolicy.AudioProductStrategy, @Nullable android.media.AudioDeviceAttributes);
+  }
+
+  public static interface AudioManager.OnPreferredDevicesForCapturePresetChangedListener {
+    method public void onPreferredDevicesForCapturePresetChanged(int, @NonNull java.util.List<android.media.AudioDeviceAttributes>);
+  }
+
+  public static interface AudioManager.OnPreferredDevicesForStrategyChangedListener {
+    method public void onPreferredDevicesForStrategyChanged(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull java.util.List<android.media.AudioDeviceAttributes>);
+  }
+
+  public abstract static class AudioManager.VolumeGroupCallback {
+    ctor public AudioManager.VolumeGroupCallback();
+    method public void onAudioVolumeGroupChanged(int, int);
+  }
+
+  public final class AudioPlaybackConfiguration implements android.os.Parcelable {
+    method public int getClientPid();
+    method public int getClientUid();
+    method public int getPlayerInterfaceId();
+    method public android.media.PlayerProxy getPlayerProxy();
+    method public int getPlayerState();
+    method public int getPlayerType();
+    method @IntRange(from=0) public int getSessionId();
+    method public boolean isActive();
+    field public static final int PLAYER_STATE_IDLE = 1; // 0x1
+    field public static final int PLAYER_STATE_PAUSED = 3; // 0x3
+    field public static final int PLAYER_STATE_RELEASED = 0; // 0x0
+    field public static final int PLAYER_STATE_STARTED = 2; // 0x2
+    field public static final int PLAYER_STATE_STOPPED = 4; // 0x4
+    field public static final int PLAYER_STATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int PLAYER_TYPE_AAUDIO = 13; // 0xd
+    field public static final int PLAYER_TYPE_JAM_AUDIOTRACK = 1; // 0x1
+    field public static final int PLAYER_TYPE_JAM_MEDIAPLAYER = 2; // 0x2
+    field public static final int PLAYER_TYPE_JAM_SOUNDPOOL = 3; // 0x3
+    field public static final int PLAYER_TYPE_SLES_AUDIOPLAYER_BUFFERQUEUE = 11; // 0xb
+    field public static final int PLAYER_TYPE_SLES_AUDIOPLAYER_URI_FD = 12; // 0xc
+    field public static final int PLAYER_TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public class AudioRecord implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection {
+    ctor @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public AudioRecord(android.media.AudioAttributes, android.media.AudioFormat, int, int) throws java.lang.IllegalArgumentException;
+    method public static long getMaxSharedAudioHistoryMillis();
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public android.media.MediaSyncEvent shareAudioHistory(@NonNull String, @IntRange(from=0) long);
+  }
+
+  public static class AudioRecord.Builder {
+    method public android.media.AudioRecord.Builder setAudioAttributes(@NonNull android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public android.media.AudioRecord.Builder setMaxSharedAudioHistoryMillis(long) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioRecord.Builder setSessionId(int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioRecord.Builder setSharedAudioEvent(@NonNull android.media.MediaSyncEvent) throws java.lang.IllegalArgumentException;
+  }
+
+  public final class AudioRecordingConfiguration implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getClientUid();
+  }
+
+  public class AudioTrack implements android.media.AudioRouting android.media.VolumeAutomation {
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int ENCAPSULATION_MODE_HANDLE = 2; // 0x2
+  }
+
+  public static class AudioTrack.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioTrack.Builder setTunerConfiguration(@NonNull android.media.AudioTrack.TunerConfiguration);
+  }
+
+  public static class AudioTrack.TunerConfiguration {
+    ctor @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public AudioTrack.TunerConfiguration(@IntRange(from=0) int, @IntRange(from=1) int);
+    method @IntRange(from=1) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getContentId();
+    method @IntRange(from=1) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getSyncId();
+    field public static final int CONTENT_ID_NONE = 0; // 0x0
+  }
+
+  public class HwAudioSource {
+    method public boolean isPlaying();
+    method public void start();
+    method public void stop();
+  }
+
+  public static final class HwAudioSource.Builder {
+    ctor public HwAudioSource.Builder();
+    method @NonNull public android.media.HwAudioSource build();
+    method @NonNull public android.media.HwAudioSource.Builder setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method @NonNull public android.media.HwAudioSource.Builder setAudioDeviceInfo(@NonNull android.media.AudioDeviceInfo);
+  }
+
+  public class MediaPlayer implements android.media.AudioRouting android.media.VolumeAutomation {
+    method @RequiresPermission(android.Manifest.permission.BIND_IMS_SERVICE) public void setOnRtpRxNoticeListener(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaPlayer.OnRtpRxNoticeListener);
+  }
+
+  public static interface MediaPlayer.OnRtpRxNoticeListener {
+    method public void onRtpRxNotice(@NonNull android.media.MediaPlayer, int, @NonNull int[]);
+  }
+
+  public final class MediaRecorder.AudioSource {
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int ECHO_REFERENCE = 1997; // 0x7cd
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public static final int HOTWORD = 1999; // 0x7cf
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int RADIO_TUNER = 1998; // 0x7ce
+  }
+
+  public final class MediaRouter2 {
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getAllRoutes();
+    method @Nullable public String getClientPackageName();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void setRouteVolume(@NonNull android.media.MediaRoute2Info, int);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void startScan();
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void stopScan();
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void transfer(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRoute2Info);
+  }
+
+  public abstract static class MediaRouter2.RouteCallback {
+    method public void onPreferredFeaturesChanged(@NonNull java.util.List<java.lang.String>);
+  }
+
+  public class MediaSyncEvent implements android.os.Parcelable {
+    field public static final int SYNC_EVENT_SHARE_AUDIO_HISTORY = 100; // 0x64
+  }
+
+  public class PlayerProxy {
+    method public void pause();
+    method public void setPan(float);
+    method public void setStartDelayMs(int);
+    method public void setVolume(float);
+    method public void start();
+    method public void stop();
+  }
+
+  public class RingtoneManager {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SETTINGS) public static void ensureDefaultRingtones(@NonNull android.content.Context);
+  }
+
+  public final class RouteDiscoveryPreference implements android.os.Parcelable {
+    field public static final android.media.RouteDiscoveryPreference EMPTY;
+  }
+
+  public class Spatializer {
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void addCompatibleAudioDevice(@NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void addOnHeadTrackingModeChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnHeadTrackingModeChangedListener);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void clearOnHeadToSoundstagePoseUpdatedListener();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void clearOnSpatializerOutputChangedListener();
+    method @NonNull @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public java.util.List<android.media.AudioDeviceAttributes> getCompatibleAudioDevices();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public int getDesiredHeadTrackingMode();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void getEffectParameter(int, @NonNull byte[]);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public int getHeadTrackingMode();
+    method @IntRange(from=0) @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public int getOutput();
+    method @NonNull @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public java.util.List<java.lang.Integer> getSupportedHeadTrackingModes();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void recenterHeadTracker();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void removeCompatibleAudioDevice(@NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void removeOnHeadTrackingModeChangedListener(@NonNull android.media.Spatializer.OnHeadTrackingModeChangedListener);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setDesiredHeadTrackingMode(int);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setEffectParameter(int, @NonNull byte[]);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setEnabled(boolean);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setGlobalTransform(@NonNull float[]);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setOnHeadToSoundstagePoseUpdatedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnHeadToSoundstagePoseUpdatedListener);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setOnSpatializerOutputChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnSpatializerOutputChangedListener);
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_DISABLED = -1; // 0xffffffff
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_OTHER = 0; // 0x0
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_RELATIVE_DEVICE = 2; // 0x2
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_RELATIVE_WORLD = 1; // 0x1
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_UNSUPPORTED = -2; // 0xfffffffe
+  }
+
+  public static interface Spatializer.OnHeadToSoundstagePoseUpdatedListener {
+    method public void onHeadToSoundstagePoseUpdated(@NonNull android.media.Spatializer, @NonNull float[]);
+  }
+
+  public static interface Spatializer.OnHeadTrackingModeChangedListener {
+    method public void onDesiredHeadTrackingModeChanged(@NonNull android.media.Spatializer, int);
+    method public void onHeadTrackingModeChanged(@NonNull android.media.Spatializer, int);
+  }
+
+  public static interface Spatializer.OnSpatializerOutputChangedListener {
+    method public void onSpatializerOutputChanged(@NonNull android.media.Spatializer, @IntRange(from=0) int);
+  }
+
+}
+
+package android.media.audiofx {
+
+  public class AudioEffect {
+    ctor @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public AudioEffect(@NonNull java.util.UUID, @NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static boolean isEffectSupportedForDevice(@NonNull java.util.UUID, @NonNull android.media.AudioDeviceAttributes);
+  }
+
+}
+
+package android.media.audiopolicy {
+
+  public class AudioMix {
+    method public int getMixState();
+    field public static final int MIX_STATE_DISABLED = -1; // 0xffffffff
+    field public static final int MIX_STATE_IDLE = 0; // 0x0
+    field public static final int MIX_STATE_MIXING = 1; // 0x1
+    field public static final int ROUTE_FLAG_LOOP_BACK = 2; // 0x2
+    field public static final int ROUTE_FLAG_RENDER = 1; // 0x1
+  }
+
+  public static class AudioMix.Builder {
+    ctor public AudioMix.Builder(android.media.audiopolicy.AudioMixingRule) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix build() throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix.Builder setDevice(@NonNull android.media.AudioDeviceInfo) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix.Builder setFormat(android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix.Builder setRouteFlags(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public class AudioMixingRule {
+    field public static final int RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET = 2; // 0x2
+    field public static final int RULE_MATCH_ATTRIBUTE_USAGE = 1; // 0x1
+    field public static final int RULE_MATCH_UID = 4; // 0x4
+    field public static final int RULE_MATCH_USERID = 8; // 0x8
+  }
+
+  public static class AudioMixingRule.Builder {
+    ctor public AudioMixingRule.Builder();
+    method public android.media.audiopolicy.AudioMixingRule.Builder addMixRule(int, Object) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMixingRule.Builder addRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.audiopolicy.AudioMixingRule.Builder allowPrivilegedPlaybackCapture(boolean);
+    method public android.media.audiopolicy.AudioMixingRule build();
+    method public android.media.audiopolicy.AudioMixingRule.Builder excludeMixRule(int, Object) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMixingRule.Builder excludeRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException;
+  }
+
+  public class AudioPolicy {
+    method public int attachMixes(@NonNull java.util.List<android.media.audiopolicy.AudioMix>);
+    method public android.media.AudioRecord createAudioRecordSink(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioTrack createAudioTrackSource(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
+    method public int detachMixes(@NonNull java.util.List<android.media.audiopolicy.AudioMix>);
+    method public int getFocusDuckingBehavior();
+    method public int getStatus();
+    method public boolean removeUidDeviceAffinity(int);
+    method public boolean removeUserIdDeviceAffinity(int);
+    method public int setFocusDuckingBehavior(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setRegistration(String);
+    method public boolean setUidDeviceAffinity(int, @NonNull java.util.List<android.media.AudioDeviceInfo>);
+    method public boolean setUserIdDeviceAffinity(int, @NonNull java.util.List<android.media.AudioDeviceInfo>);
+    method public String toLogFriendlyString();
+    field public static final int FOCUS_POLICY_DUCKING_DEFAULT = 0; // 0x0
+    field public static final int FOCUS_POLICY_DUCKING_IN_APP = 0; // 0x0
+    field public static final int FOCUS_POLICY_DUCKING_IN_POLICY = 1; // 0x1
+    field public static final int POLICY_STATUS_REGISTERED = 2; // 0x2
+    field public static final int POLICY_STATUS_UNREGISTERED = 1; // 0x1
+  }
+
+  public abstract static class AudioPolicy.AudioPolicyFocusListener {
+    ctor public AudioPolicy.AudioPolicyFocusListener();
+    method public void onAudioFocusAbandon(android.media.AudioFocusInfo);
+    method public void onAudioFocusGrant(android.media.AudioFocusInfo, int);
+    method public void onAudioFocusLoss(android.media.AudioFocusInfo, boolean);
+    method public void onAudioFocusRequest(android.media.AudioFocusInfo, int);
+  }
+
+  public abstract static class AudioPolicy.AudioPolicyStatusListener {
+    ctor public AudioPolicy.AudioPolicyStatusListener();
+    method public void onMixStateUpdate(android.media.audiopolicy.AudioMix);
+    method public void onStatusChange();
+  }
+
+  public abstract static class AudioPolicy.AudioPolicyVolumeCallback {
+    ctor public AudioPolicy.AudioPolicyVolumeCallback();
+    method public void onVolumeAdjustment(int);
+  }
+
+  public static class AudioPolicy.Builder {
+    ctor public AudioPolicy.Builder(android.content.Context);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder addMix(@NonNull android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.audiopolicy.AudioPolicy build();
+    method public void setAudioPolicyFocusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyFocusListener);
+    method public void setAudioPolicyStatusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyStatusListener);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setAudioPolicyVolumeCallback(@NonNull android.media.audiopolicy.AudioPolicy.AudioPolicyVolumeCallback);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setIsAudioFocusPolicy(boolean);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setLooper(@NonNull android.os.Looper) throws java.lang.IllegalArgumentException;
+  }
+
+  public final class AudioProductStrategy implements android.os.Parcelable {
+    method @NonNull public static android.media.audiopolicy.AudioProductStrategy createInvalidAudioProductStrategy(int);
+    method public int describeContents();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method public int getId();
+    method public boolean supportsAudioAttributes(@NonNull android.media.AudioAttributes);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioProductStrategy> CREATOR;
+  }
+
+  public final class AudioVolumeGroup implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.media.AudioAttributes> getAudioAttributes();
+    method public int getId();
+    method @NonNull public int[] getLegacyStreamTypes();
+    method @NonNull public String name();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioVolumeGroup> CREATOR;
+    field public static final int DEFAULT_VOLUME_GROUP = -1; // 0xffffffff
+  }
+
+}
+
+package android.media.musicrecognition {
+
+  public class MusicRecognitionManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_MUSIC_RECOGNITION) public void beginStreamingSearch(@NonNull android.media.musicrecognition.RecognitionRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.musicrecognition.MusicRecognitionManager.RecognitionCallback);
+    field public static final int RECOGNITION_FAILED_AUDIO_UNAVAILABLE = 7; // 0x7
+    field public static final int RECOGNITION_FAILED_NOT_FOUND = 1; // 0x1
+    field public static final int RECOGNITION_FAILED_NO_CONNECTIVITY = 2; // 0x2
+    field public static final int RECOGNITION_FAILED_SERVICE_KILLED = 5; // 0x5
+    field public static final int RECOGNITION_FAILED_SERVICE_UNAVAILABLE = 3; // 0x3
+    field public static final int RECOGNITION_FAILED_TIMEOUT = 6; // 0x6
+    field public static final int RECOGNITION_FAILED_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static interface MusicRecognitionManager.RecognitionCallback {
+    method public void onAudioStreamClosed();
+    method public void onRecognitionFailed(@NonNull android.media.musicrecognition.RecognitionRequest, int);
+    method public void onRecognitionSucceeded(@NonNull android.media.musicrecognition.RecognitionRequest, @NonNull android.media.MediaMetadata, @Nullable android.os.Bundle);
+  }
+
+  public abstract class MusicRecognitionService extends android.app.Service {
+    ctor public MusicRecognitionService();
+    method public abstract void onRecognize(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @NonNull android.media.musicrecognition.MusicRecognitionService.Callback);
+  }
+
+  public static interface MusicRecognitionService.Callback {
+    method public void onRecognitionFailed(int);
+    method public void onRecognitionSucceeded(@NonNull android.media.MediaMetadata, @Nullable android.os.Bundle);
+  }
+
+  public final class RecognitionRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method @NonNull public android.media.AudioFormat getAudioFormat();
+    method public int getCaptureSession();
+    method public int getIgnoreBeginningFrames();
+    method public int getMaxAudioLengthSeconds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.musicrecognition.RecognitionRequest> CREATOR;
+  }
+
+  public static final class RecognitionRequest.Builder {
+    ctor public RecognitionRequest.Builder();
+    method @NonNull public android.media.musicrecognition.RecognitionRequest build();
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setAudioFormat(@NonNull android.media.AudioFormat);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setCaptureSession(int);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setIgnoreBeginningFrames(int);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setMaxAudioLengthSeconds(int);
+  }
+
+}
+
+package android.media.session {
+
+  public final class MediaSessionManager {
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void addOnMediaKeyEventDispatchedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.OnMediaKeyEventDispatchedListener);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void addOnMediaKeyEventSessionChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.OnMediaKeyEventSessionChangedListener);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public android.media.session.MediaSession.Token getMediaKeyEventSession();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public String getMediaKeyEventSessionPackageName();
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void removeOnMediaKeyEventDispatchedListener(@NonNull android.media.session.MediaSessionManager.OnMediaKeyEventDispatchedListener);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void removeOnMediaKeyEventSessionChangedListener(@NonNull android.media.session.MediaSessionManager.OnMediaKeyEventSessionChangedListener);
+    method @RequiresPermission(android.Manifest.permission.SET_MEDIA_KEY_LISTENER) public void setOnMediaKeyListener(android.media.session.MediaSessionManager.OnMediaKeyListener, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER) public void setOnVolumeKeyLongPressListener(android.media.session.MediaSessionManager.OnVolumeKeyLongPressListener, @Nullable android.os.Handler);
+  }
+
+  public static interface MediaSessionManager.OnMediaKeyEventDispatchedListener {
+    method public void onMediaKeyEventDispatched(@NonNull android.view.KeyEvent, @NonNull String, @Nullable android.media.session.MediaSession.Token);
+  }
+
+  public static interface MediaSessionManager.OnMediaKeyEventSessionChangedListener {
+    method public void onMediaKeyEventSessionChanged(@NonNull String, @Nullable android.media.session.MediaSession.Token);
+  }
+
+  public static interface MediaSessionManager.OnMediaKeyListener {
+    method public boolean onMediaKey(android.view.KeyEvent);
+  }
+
+  public static interface MediaSessionManager.OnVolumeKeyLongPressListener {
+    method public void onVolumeKeyLongPress(android.view.KeyEvent);
+  }
+
+}
+
+package android.media.soundtrigger {
+
+  public abstract class SoundTriggerDetectionService extends android.app.Service {
+    ctor public SoundTriggerDetectionService();
+    method @MainThread public void onConnected(@NonNull java.util.UUID, @Nullable android.os.Bundle);
+    method @MainThread public void onDisconnected(@NonNull java.util.UUID, @Nullable android.os.Bundle);
+    method @MainThread public void onError(@NonNull java.util.UUID, @Nullable android.os.Bundle, int, int);
+    method @MainThread public void onGenericRecognitionEvent(@NonNull java.util.UUID, @Nullable android.os.Bundle, int, @NonNull android.hardware.soundtrigger.SoundTrigger.RecognitionEvent);
+    method @MainThread public abstract void onStopOperation(@NonNull java.util.UUID, @Nullable android.os.Bundle, int);
+    method public final void operationFinished(@Nullable java.util.UUID, int);
+  }
+
+  public final class SoundTriggerDetector {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public boolean startRecognition(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public boolean stopRecognition();
+    field public static final int RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS = 2; // 0x2
+    field public static final int RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO = 1; // 0x1
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_ECHO_CANCELLATION = 4; // 0x4
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION = 8; // 0x8
+    field public static final int RECOGNITION_FLAG_RUN_IN_BATTERY_SAVER = 16; // 0x10
+  }
+
+  public abstract static class SoundTriggerDetector.Callback {
+    ctor public SoundTriggerDetector.Callback();
+    method public abstract void onAvailabilityChanged(int);
+    method public abstract void onDetected(@NonNull android.media.soundtrigger.SoundTriggerDetector.EventPayload);
+    method public abstract void onError();
+    method public abstract void onRecognitionPaused();
+    method public abstract void onRecognitionResumed();
+  }
+
+  public static class SoundTriggerDetector.EventPayload {
+    method @Nullable public android.media.AudioFormat getCaptureAudioFormat();
+    method @Nullable public byte[] getTriggerAudio();
+  }
+
+  public final class SoundTriggerManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.media.soundtrigger.SoundTriggerDetector createSoundTriggerDetector(java.util.UUID, @NonNull android.media.soundtrigger.SoundTriggerDetector.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public void deleteModel(java.util.UUID);
+    method public int getDetectionServiceOperationsTimeout();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.media.soundtrigger.SoundTriggerManager.Model getModel(java.util.UUID);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.hardware.soundtrigger.SoundTrigger.ModuleProperties getModuleProperties();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public int getParameter(@NonNull java.util.UUID, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.hardware.soundtrigger.SoundTrigger.ModelParamRange queryParameter(@Nullable java.util.UUID, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public int setParameter(@Nullable java.util.UUID, int, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public void updateModel(android.media.soundtrigger.SoundTriggerManager.Model);
+  }
+
+  public static class SoundTriggerManager.Model {
+    method @NonNull public static android.media.soundtrigger.SoundTriggerManager.Model create(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], int);
+    method @NonNull public static android.media.soundtrigger.SoundTriggerManager.Model create(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[]);
+    method @Nullable public byte[] getModelData();
+    method @NonNull public java.util.UUID getModelUuid();
+    method @NonNull public java.util.UUID getVendorUuid();
+    method public int getVersion();
+  }
+
+}
+
+package android.media.tv {
+
+  public final class DvbDeviceInfo implements android.os.Parcelable {
+    ctor public DvbDeviceInfo(int, int);
+    method public int describeContents();
+    method @IntRange(from=0) public int getAdapterId();
+    method @IntRange(from=0) public int getDeviceId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.DvbDeviceInfo> CREATOR;
+  }
+
+  public final class TunedInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAppTag();
+    method public int getAppType();
+    method @Nullable public android.net.Uri getChannelUri();
+    method @NonNull public String getInputId();
+    method public boolean isMainSession();
+    method public boolean isRecordingSession();
+    method public boolean isVisible();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int APP_TAG_SELF = 0; // 0x0
+    field public static final int APP_TYPE_NON_SYSTEM = 3; // 0x3
+    field public static final int APP_TYPE_SELF = 1; // 0x1
+    field public static final int APP_TYPE_SYSTEM = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TunedInfo> CREATOR;
+  }
+
+  public final class TvContentRatingSystemInfo implements android.os.Parcelable {
+    method public static android.media.tv.TvContentRatingSystemInfo createTvContentRatingSystemInfo(int, android.content.pm.ApplicationInfo);
+    method public int describeContents();
+    method public android.net.Uri getXmlUri();
+    method public boolean isSystemDefined();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public final class TvContract {
+    method public static android.net.Uri buildChannelsUriForInput(@Nullable String, boolean);
+    method public static android.net.Uri buildChannelsUriForInput(@Nullable String, @Nullable String, boolean);
+    field public static final String ACTION_CHANNEL_BROWSABLE_REQUESTED = "android.media.tv.action.CHANNEL_BROWSABLE_REQUESTED";
+    field public static final String EXTRA_BLOCKED_PACKAGES = "android.media.tv.extra.BLOCKED_PACKAGES";
+    field public static final String EXTRA_COLUMN_NAME = "android.media.tv.extra.COLUMN_NAME";
+    field public static final String EXTRA_DATA_TYPE = "android.media.tv.extra.DATA_TYPE";
+    field public static final String EXTRA_DEFAULT_VALUE = "android.media.tv.extra.DEFAULT_VALUE";
+    field public static final String EXTRA_EXISTING_COLUMN_NAMES = "android.media.tv.extra.EXISTING_COLUMN_NAMES";
+    field public static final String EXTRA_PACKAGE_NAME = "android.media.tv.extra.PACKAGE_NAME";
+    field public static final String EXTRA_RESULT_CODE = "android.media.tv.extra.RESULT_CODE";
+    field public static final String METHOD_ADD_COLUMN = "add_column";
+    field public static final String METHOD_BLOCK_PACKAGE = "block_package";
+    field public static final String METHOD_GET_BLOCKED_PACKAGES = "get_blocked_packages";
+    field public static final String METHOD_GET_COLUMNS = "get_columns";
+    field public static final String METHOD_UNBLOCK_PACKAGE = "unblock_package";
+    field public static final int RESULT_ERROR_INVALID_ARGUMENT = 2; // 0x2
+    field public static final int RESULT_ERROR_IO = 1; // 0x1
+    field public static final int RESULT_OK = 0; // 0x0
+  }
+
+  public static final class TvContract.WatchedPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_DESCRIPTION = "description";
+    field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final String COLUMN_INTERNAL_SESSION_TOKEN = "session_token";
+    field public static final String COLUMN_INTERNAL_TUNE_PARAMS = "tune_params";
+    field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_WATCH_END_TIME_UTC_MILLIS = "watch_end_time_utc_millis";
+    field public static final String COLUMN_WATCH_START_TIME_UTC_MILLIS = "watch_start_time_utc_millis";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watched_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/watched_program";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public final class TvInputHardwareInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getAudioAddress();
+    method public int getAudioType();
+    method public int getCableConnectionStatus();
+    method public int getDeviceId();
+    method public int getHdmiPortId();
+    method public int getType();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CABLE_CONNECTION_STATUS_CONNECTED = 1; // 0x1
+    field public static final int CABLE_CONNECTION_STATUS_DISCONNECTED = 2; // 0x2
+    field public static final int CABLE_CONNECTION_STATUS_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvInputHardwareInfo> CREATOR;
+    field public static final int TV_INPUT_TYPE_COMPONENT = 6; // 0x6
+    field public static final int TV_INPUT_TYPE_COMPOSITE = 3; // 0x3
+    field public static final int TV_INPUT_TYPE_DISPLAY_PORT = 10; // 0xa
+    field public static final int TV_INPUT_TYPE_DVI = 8; // 0x8
+    field public static final int TV_INPUT_TYPE_HDMI = 9; // 0x9
+    field public static final int TV_INPUT_TYPE_OTHER_HARDWARE = 1; // 0x1
+    field public static final int TV_INPUT_TYPE_SCART = 5; // 0x5
+    field public static final int TV_INPUT_TYPE_SVIDEO = 4; // 0x4
+    field public static final int TV_INPUT_TYPE_TUNER = 2; // 0x2
+    field public static final int TV_INPUT_TYPE_VGA = 7; // 0x7
+  }
+
+  public static final class TvInputHardwareInfo.Builder {
+    ctor public TvInputHardwareInfo.Builder();
+    method public android.media.tv.TvInputHardwareInfo.Builder audioAddress(String);
+    method public android.media.tv.TvInputHardwareInfo.Builder audioType(int);
+    method public android.media.tv.TvInputHardwareInfo build();
+    method public android.media.tv.TvInputHardwareInfo.Builder cableConnectionStatus(int);
+    method public android.media.tv.TvInputHardwareInfo.Builder deviceId(int);
+    method public android.media.tv.TvInputHardwareInfo.Builder hdmiPortId(int);
+    method public android.media.tv.TvInputHardwareInfo.Builder type(int);
+  }
+
+  public final class TvInputInfo implements android.os.Parcelable {
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.hardware.hdmi.HdmiDeviceInfo, String, String, android.net.Uri) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.hardware.hdmi.HdmiDeviceInfo, String, int, android.graphics.drawable.Icon) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.media.tv.TvInputHardwareInfo, String, android.net.Uri) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.media.tv.TvInputHardwareInfo, int, android.graphics.drawable.Icon) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public android.hardware.hdmi.HdmiDeviceInfo getHdmiDeviceInfo();
+    method public boolean isConnectedToHdmiSwitch();
+    method public boolean isHardwareInput();
+    method public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context, int);
+  }
+
+  public static final class TvInputInfo.Builder {
+    method public android.media.tv.TvInputInfo.Builder setHdmiDeviceInfo(android.hardware.hdmi.HdmiDeviceInfo);
+    method public android.media.tv.TvInputInfo.Builder setIcon(android.graphics.drawable.Icon);
+    method public android.media.tv.TvInputInfo.Builder setIcon(android.graphics.drawable.Icon, int);
+    method public android.media.tv.TvInputInfo.Builder setLabel(CharSequence);
+    method public android.media.tv.TvInputInfo.Builder setLabel(@StringRes int);
+    method public android.media.tv.TvInputInfo.Builder setParentId(String);
+    method public android.media.tv.TvInputInfo.Builder setTvInputHardwareInfo(android.media.tv.TvInputHardwareInfo);
+  }
+
+  public static final class TvInputInfo.TvInputSettings {
+    method public static java.util.Map<java.lang.String,java.lang.String> getCustomLabels(android.content.Context, int);
+    method public static java.util.Set<java.lang.String> getHiddenTvInputIds(android.content.Context, int);
+    method public static void putCustomLabels(android.content.Context, java.util.Map<java.lang.String,java.lang.String>, int);
+    method public static void putHiddenTvInputs(android.content.Context, java.util.Set<java.lang.String>, int);
+  }
+
+  public final class TvInputManager {
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, @NonNull android.media.tv.TvInputInfo, @NonNull android.media.tv.TvInputManager.HardwareCallback);
+    method @Nullable @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, @NonNull android.media.tv.TvInputInfo, @Nullable String, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.TvInputManager.HardwareCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void addBlockedRating(@NonNull android.media.tv.TvContentRating);
+    method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public boolean captureFrame(String, android.view.Surface, android.media.tv.TvStreamConfig);
+    method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public java.util.List<android.media.tv.TvStreamConfig> getAvailableTvStreamConfigList(String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TUNED_INFO) public java.util.List<android.media.tv.TunedInfo> getCurrentTunedInfos();
+    method @NonNull @RequiresPermission("android.permission.DVB_DEVICE") public java.util.List<android.media.tv.DvbDeviceInfo> getDvbDeviceList();
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public java.util.List<android.media.tv.TvInputHardwareInfo> getHardwareList();
+    method @RequiresPermission(android.Manifest.permission.READ_CONTENT_RATING_SYSTEMS) public java.util.List<android.media.tv.TvContentRatingSystemInfo> getTvContentRatingSystemList();
+    method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public boolean isSingleSessionActive();
+    method @RequiresPermission(android.Manifest.permission.NOTIFY_TV_INPUTS) public void notifyPreviewProgramAddedToWatchNext(String, long, long);
+    method @RequiresPermission(android.Manifest.permission.NOTIFY_TV_INPUTS) public void notifyPreviewProgramBrowsableDisabled(String, long);
+    method @RequiresPermission(android.Manifest.permission.NOTIFY_TV_INPUTS) public void notifyWatchNextProgramBrowsableDisabled(String, long);
+    method @Nullable @RequiresPermission("android.permission.DVB_DEVICE") public android.os.ParcelFileDescriptor openDvbDevice(@NonNull android.media.tv.DvbDeviceInfo, int);
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public void releaseTvInputHardware(int, android.media.tv.TvInputManager.Hardware);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void removeBlockedRating(@NonNull android.media.tv.TvContentRating);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void setParentalControlsEnabled(boolean);
+  }
+
+  public static final class TvInputManager.Hardware {
+    method public void overrideAudioSink(int, String, int, int, int);
+    method public void setStreamVolume(float);
+    method public boolean setSurface(android.view.Surface, android.media.tv.TvStreamConfig);
+  }
+
+  public abstract static class TvInputManager.HardwareCallback {
+    ctor public TvInputManager.HardwareCallback();
+    method public abstract void onReleased();
+    method public abstract void onStreamConfigChanged(android.media.tv.TvStreamConfig[]);
+  }
+
+  public abstract static class TvInputManager.TvInputCallback {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_TUNED_INFO) public void onCurrentTunedInfosUpdated(@NonNull java.util.List<android.media.tv.TunedInfo>);
+  }
+
+  public abstract class TvInputService extends android.app.Service {
+    method @Nullable public android.os.IBinder createExtension();
+    method @Nullable public android.media.tv.TvInputInfo onHardwareAdded(android.media.tv.TvInputHardwareInfo);
+    method @Nullable public String onHardwareRemoved(android.media.tv.TvInputHardwareInfo);
+    method @Nullable public android.media.tv.TvInputInfo onHdmiDeviceAdded(android.hardware.hdmi.HdmiDeviceInfo);
+    method @Nullable public String onHdmiDeviceRemoved(android.hardware.hdmi.HdmiDeviceInfo);
+    method public void onHdmiDeviceUpdated(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+  }
+
+  public abstract static class TvInputService.RecordingSession {
+    method public void notifySessionEvent(@NonNull String, android.os.Bundle);
+  }
+
+  public abstract static class TvInputService.Session implements android.view.KeyEvent.Callback {
+    method public void notifySessionEvent(@NonNull String, android.os.Bundle);
+    method public void onSetMain(boolean);
+  }
+
+  public abstract static class TvRecordingClient.RecordingCallback {
+    method public void onEvent(String, String, android.os.Bundle);
+  }
+
+  public class TvStreamConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getGeneration();
+    method public int getMaxHeight();
+    method public int getMaxWidth();
+    method public int getStreamId();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvStreamConfig> CREATOR;
+    field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2
+    field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1
+  }
+
+  public static final class TvStreamConfig.Builder {
+    ctor public TvStreamConfig.Builder();
+    method public android.media.tv.TvStreamConfig build();
+    method public android.media.tv.TvStreamConfig.Builder generation(int);
+    method public android.media.tv.TvStreamConfig.Builder maxHeight(int);
+    method public android.media.tv.TvStreamConfig.Builder maxWidth(int);
+    method public android.media.tv.TvStreamConfig.Builder streamId(int);
+    method public android.media.tv.TvStreamConfig.Builder type(int);
+  }
+
+  public class TvView extends android.view.ViewGroup {
+    method @RequiresPermission("android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE") public void setMain();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void unblockContent(android.media.tv.TvContentRating);
+  }
+
+  public abstract static class TvView.TvInputCallback {
+    method public void onEvent(String, String, android.os.Bundle);
+  }
+
+}
+
+package android.media.tv.tuner {
+
+  public class DemuxCapabilities {
+    method public int getAudioFilterCount();
+    method public int getDemuxCount();
+    method public int getFilterCapabilities();
+    method @NonNull @Size(5) public int[] getLinkCapabilities();
+    method public int getPcrFilterCount();
+    method public int getPesFilterCount();
+    method public int getPlaybackCount();
+    method public int getRecordCount();
+    method public int getSectionFilterCount();
+    method public long getSectionFilterLength();
+    method public int getTsFilterCount();
+    method public int getVideoFilterCount();
+    method public boolean isTimeFilterSupported();
+  }
+
+  public class Descrambler implements java.lang.AutoCloseable {
+    method public int addPid(int, int, @Nullable android.media.tv.tuner.filter.Filter);
+    method public void close();
+    method public static boolean isValidKeyToken(@NonNull byte[]);
+    method public int removePid(int, int, @Nullable android.media.tv.tuner.filter.Filter);
+    method public int setKeyToken(@NonNull byte[]);
+    field public static final int PID_TYPE_MMTP = 2; // 0x2
+    field public static final int PID_TYPE_T = 1; // 0x1
+  }
+
+  public class Lnb implements java.lang.AutoCloseable {
+    method public void close();
+    method public int sendDiseqcMessage(@NonNull byte[]);
+    method public int setSatellitePosition(int);
+    method public int setTone(int);
+    method public int setVoltage(int);
+    field public static final int EVENT_TYPE_DISEQC_RX_OVERFLOW = 0; // 0x0
+    field public static final int EVENT_TYPE_DISEQC_RX_PARITY_ERROR = 2; // 0x2
+    field public static final int EVENT_TYPE_DISEQC_RX_TIMEOUT = 1; // 0x1
+    field public static final int EVENT_TYPE_LNB_OVERLOAD = 3; // 0x3
+    field public static final int POSITION_A = 1; // 0x1
+    field public static final int POSITION_B = 2; // 0x2
+    field public static final int POSITION_UNDEFINED = 0; // 0x0
+    field public static final int TONE_CONTINUOUS = 1; // 0x1
+    field public static final int TONE_NONE = 0; // 0x0
+    field public static final int VOLTAGE_11V = 2; // 0x2
+    field public static final int VOLTAGE_12V = 3; // 0x3
+    field public static final int VOLTAGE_13V = 4; // 0x4
+    field public static final int VOLTAGE_14V = 5; // 0x5
+    field public static final int VOLTAGE_15V = 6; // 0x6
+    field public static final int VOLTAGE_18V = 7; // 0x7
+    field public static final int VOLTAGE_19V = 8; // 0x8
+    field public static final int VOLTAGE_5V = 1; // 0x1
+    field public static final int VOLTAGE_NONE = 0; // 0x0
+  }
+
+  public interface LnbCallback {
+    method public void onDiseqcMessage(@NonNull byte[]);
+    method public void onEvent(int);
+  }
+
+  public class Tuner implements java.lang.AutoCloseable {
+    ctor @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public Tuner(@NonNull android.content.Context, @Nullable String, int);
+    method public int cancelScanning();
+    method public int cancelTuning();
+    method public void clearOnTuneEventListener();
+    method public void clearResourceLostListener();
+    method public void close();
+    method public int connectCiCam(int);
+    method public int connectFrontendToCiCam(int);
+    method public int disconnectCiCam();
+    method public int disconnectFrontendToCiCam(int);
+    method public int getAvSyncHwId(@NonNull android.media.tv.tuner.filter.Filter);
+    method public long getAvSyncTime(int);
+    method @Nullable public java.util.List<android.media.tv.tuner.frontend.FrontendInfo> getAvailableFrontendInfos();
+    method @Nullable public android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities();
+    method @Nullable public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo();
+    method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler();
+    method @Nullable public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener);
+    method @Nullable public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnRecordStatusChangedListener);
+    method @Nullable public android.media.tv.tuner.filter.Filter openFilter(int, int, long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.filter.FilterCallback);
+    method @Nullable public android.media.tv.tuner.Lnb openLnb(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
+    method @Nullable public android.media.tv.tuner.Lnb openLnbByName(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
+    method @Nullable public android.media.tv.tuner.filter.TimeFilter openTimeFilter();
+    method public int scan(@NonNull android.media.tv.tuner.frontend.FrontendSettings, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.ScanCallback);
+    method public int setLnaEnabled(boolean);
+    method public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener);
+    method public void setResourceLostListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.Tuner.OnResourceLostListener);
+    method public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner);
+    method public int tune(@NonNull android.media.tv.tuner.frontend.FrontendSettings);
+    method public void updateResourcePriority(int, int);
+    field public static final int INVALID_AV_SYNC_ID = -1; // 0xffffffff
+    field public static final int INVALID_FILTER_ID = -1; // 0xffffffff
+    field public static final long INVALID_FILTER_ID_LONG = -1L; // 0xffffffffffffffffL
+    field public static final int INVALID_FIRST_MACROBLOCK_IN_SLICE = -1; // 0xffffffff
+    field public static final int INVALID_FRONTEND_ID = -1; // 0xffffffff
+    field public static final int INVALID_FRONTEND_SETTING_FREQUENCY = -1; // 0xffffffff
+    field public static final int INVALID_LTS_ID = -1; // 0xffffffff
+    field public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = -1; // 0xffffffff
+    field public static final int INVALID_STREAM_ID = 65535; // 0xffff
+    field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL
+    field public static final int INVALID_TS_PID = 65535; // 0xffff
+    field public static final int RESULT_INVALID_ARGUMENT = 4; // 0x4
+    field public static final int RESULT_INVALID_STATE = 3; // 0x3
+    field public static final int RESULT_NOT_INITIALIZED = 2; // 0x2
+    field public static final int RESULT_OUT_OF_MEMORY = 5; // 0x5
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int RESULT_UNAVAILABLE = 1; // 0x1
+    field public static final int RESULT_UNKNOWN_ERROR = 6; // 0x6
+    field public static final int SCAN_TYPE_AUTO = 1; // 0x1
+    field public static final int SCAN_TYPE_BLIND = 2; // 0x2
+    field public static final int SCAN_TYPE_UNDEFINED = 0; // 0x0
+    field @NonNull public static final byte[] VOID_KEYTOKEN;
+  }
+
+  public static interface Tuner.OnResourceLostListener {
+    method public void onResourceLost(@NonNull android.media.tv.tuner.Tuner);
+  }
+
+  public final class TunerVersionChecker {
+    method public static int getTunerVersion();
+    field public static final int TUNER_VERSION_1_0 = 65536; // 0x10000
+    field public static final int TUNER_VERSION_1_1 = 65537; // 0x10001
+    field public static final int TUNER_VERSION_UNKNOWN = 0; // 0x0
+  }
+
+}
+
+package android.media.tv.tuner.dvr {
+
+  public class DvrPlayback implements java.lang.AutoCloseable {
+    method @Deprecated public int attachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public void close();
+    method public int configure(@NonNull android.media.tv.tuner.dvr.DvrSettings);
+    method @Deprecated public int detachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public int flush();
+    method public long read(long);
+    method public long read(@NonNull byte[], long, long);
+    method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public int start();
+    method public int stop();
+    field public static final int PLAYBACK_STATUS_ALMOST_EMPTY = 2; // 0x2
+    field public static final int PLAYBACK_STATUS_ALMOST_FULL = 4; // 0x4
+    field public static final int PLAYBACK_STATUS_EMPTY = 1; // 0x1
+    field public static final int PLAYBACK_STATUS_FULL = 8; // 0x8
+  }
+
+  public class DvrRecorder implements java.lang.AutoCloseable {
+    method public int attachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public void close();
+    method public int configure(@NonNull android.media.tv.tuner.dvr.DvrSettings);
+    method public int detachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public int flush();
+    method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public int start();
+    method public int stop();
+    method public long write(long);
+    method public long write(@NonNull byte[], long, long);
+  }
+
+  public class DvrSettings {
+    method @NonNull public static android.media.tv.tuner.dvr.DvrSettings.Builder builder();
+    method public int getDataFormat();
+    method public long getHighThreshold();
+    method public long getLowThreshold();
+    method public long getPacketSize();
+    method public int getStatusMask();
+    field public static final int DATA_FORMAT_ES = 2; // 0x2
+    field public static final int DATA_FORMAT_PES = 1; // 0x1
+    field public static final int DATA_FORMAT_SHV_TLV = 3; // 0x3
+    field public static final int DATA_FORMAT_TS = 0; // 0x0
+  }
+
+  public static final class DvrSettings.Builder {
+    ctor public DvrSettings.Builder();
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings build();
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setDataFormat(int);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setHighThreshold(long);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setLowThreshold(long);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setPacketSize(long);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setStatusMask(int);
+  }
+
+  public interface OnPlaybackStatusChangedListener {
+    method public void onPlaybackStatusChanged(int);
+  }
+
+  public interface OnRecordStatusChangedListener {
+    method public void onRecordStatusChanged(int);
+  }
+
+}
+
+package android.media.tv.tuner.filter {
+
+  public final class AlpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.AlpFilterConfiguration.Builder builder();
+    method public int getLengthType();
+    method public int getPacketType();
+    method public int getType();
+    field public static final int LENGTH_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int LENGTH_TYPE_WITHOUT_ADDITIONAL_HEADER = 1; // 0x1
+    field public static final int LENGTH_TYPE_WITH_ADDITIONAL_HEADER = 2; // 0x2
+    field public static final int PACKET_TYPE_COMPRESSED = 2; // 0x2
+    field public static final int PACKET_TYPE_EXTENSION = 6; // 0x6
+    field public static final int PACKET_TYPE_IPV4 = 0; // 0x0
+    field public static final int PACKET_TYPE_MPEG2_TS = 7; // 0x7
+    field public static final int PACKET_TYPE_SIGNALING = 4; // 0x4
+  }
+
+  public static final class AlpFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration.Builder setLengthType(int);
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration.Builder setPacketType(int);
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+  }
+
+  public class AudioDescriptor {
+    method public byte getAdFade();
+    method public byte getAdGainCenter();
+    method public byte getAdGainFront();
+    method public byte getAdGainSurround();
+    method public byte getAdPan();
+    method public char getAdVersionTextTag();
+  }
+
+  public class AvSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean);
+    method public int getAudioStreamType();
+    method public int getVideoStreamType();
+    method public boolean isPassthrough();
+    field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6
+    field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7
+    field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9
+    field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf
+    field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa
+    field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb
+    field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8
+    field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2
+    field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3
+    field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4
+    field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5
+    field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd
+    field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1
+    field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe
+    field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc
+    field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa
+    field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5
+    field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb
+    field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc
+    field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6
+    field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2
+    field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3
+    field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4
+    field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1
+    field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7
+    field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8
+    field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9
+  }
+
+  public static class AvSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.AvSettings build();
+    method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int);
+    method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean);
+    method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int);
+  }
+
+  public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+    method public int getItemFragmentIndex();
+    method public int getItemId();
+    method public int getLastItemFragmentIndex();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+  }
+
+  public class DownloadSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.DownloadSettings.Builder builder(int);
+    method public int getDownloadId();
+  }
+
+  public static class DownloadSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.DownloadSettings build();
+    method @NonNull public android.media.tv.tuner.filter.DownloadSettings.Builder setDownloadId(int);
+  }
+
+  public class Filter implements java.lang.AutoCloseable {
+    method public void close();
+    method public int configure(@NonNull android.media.tv.tuner.filter.FilterConfiguration);
+    method public int flush();
+    method public int getId();
+    method public long getIdLong();
+    method public int read(@NonNull byte[], long, long);
+    method public int setDataSource(@Nullable android.media.tv.tuner.filter.Filter);
+    method public int setMonitorEventMask(int);
+    method public int start();
+    method public int stop();
+    field public static final int MONITOR_EVENT_IP_CID_CHANGE = 2; // 0x2
+    field public static final int MONITOR_EVENT_SCRAMBLING_STATUS = 1; // 0x1
+    field public static final int SCRAMBLING_STATUS_NOT_SCRAMBLED = 2; // 0x2
+    field public static final int SCRAMBLING_STATUS_SCRAMBLED = 4; // 0x4
+    field public static final int SCRAMBLING_STATUS_UNKNOWN = 1; // 0x1
+    field public static final int STATUS_DATA_READY = 1; // 0x1
+    field public static final int STATUS_HIGH_WATER = 4; // 0x4
+    field public static final int STATUS_LOW_WATER = 2; // 0x2
+    field public static final int STATUS_OVERFLOW = 8; // 0x8
+    field public static final int SUBTYPE_AUDIO = 3; // 0x3
+    field public static final int SUBTYPE_DOWNLOAD = 5; // 0x5
+    field public static final int SUBTYPE_IP = 13; // 0xd
+    field public static final int SUBTYPE_IP_PAYLOAD = 12; // 0xc
+    field public static final int SUBTYPE_MMTP = 10; // 0xa
+    field public static final int SUBTYPE_NTP = 11; // 0xb
+    field public static final int SUBTYPE_PAYLOAD_THROUGH = 14; // 0xe
+    field public static final int SUBTYPE_PCR = 8; // 0x8
+    field public static final int SUBTYPE_PES = 2; // 0x2
+    field public static final int SUBTYPE_PTP = 16; // 0x10
+    field public static final int SUBTYPE_RECORD = 6; // 0x6
+    field public static final int SUBTYPE_SECTION = 1; // 0x1
+    field public static final int SUBTYPE_TEMI = 9; // 0x9
+    field public static final int SUBTYPE_TLV = 15; // 0xf
+    field public static final int SUBTYPE_TS = 7; // 0x7
+    field public static final int SUBTYPE_UNDEFINED = 0; // 0x0
+    field public static final int SUBTYPE_VIDEO = 4; // 0x4
+    field public static final int TYPE_ALP = 16; // 0x10
+    field public static final int TYPE_IP = 4; // 0x4
+    field public static final int TYPE_MMTP = 2; // 0x2
+    field public static final int TYPE_TLV = 8; // 0x8
+    field public static final int TYPE_TS = 1; // 0x1
+    field public static final int TYPE_UNDEFINED = 0; // 0x0
+  }
+
+  public interface FilterCallback {
+    method public void onFilterEvent(@NonNull android.media.tv.tuner.filter.Filter, @NonNull android.media.tv.tuner.filter.FilterEvent[]);
+    method public void onFilterStatusChanged(@NonNull android.media.tv.tuner.filter.Filter, int);
+  }
+
+  public abstract class FilterConfiguration {
+    method @Nullable public android.media.tv.tuner.filter.Settings getSettings();
+    method public abstract int getType();
+  }
+
+  public abstract class FilterEvent {
+    ctor public FilterEvent();
+  }
+
+  public final class IpCidChangeEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getIpCid();
+  }
+
+  public final class IpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder();
+    method @NonNull @Size(min=4, max=16) public byte[] getDstIpAddress();
+    method public int getDstPort();
+    method @IntRange(from=0, to=61439) public int getIpFilterContextId();
+    method @NonNull @Size(min=4, max=16) public byte[] getSrcIpAddress();
+    method public int getSrcPort();
+    method public int getType();
+    method public boolean isPassthrough();
+    field public static final int INVALID_IP_FILTER_CONTEXT_ID = -1; // 0xffffffff
+  }
+
+  public static final class IpFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstIpAddress(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstPort(int);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setIpFilterContextId(int);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setPassthrough(boolean);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcIpAddress(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcPort(int);
+  }
+
+  public class IpPayloadEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+  }
+
+  public class MediaEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public long getAudioHandle();
+    method public long getAvDataId();
+    method public long getDataLength();
+    method @Nullable public android.media.tv.tuner.filter.AudioDescriptor getExtraMetaData();
+    method @Nullable public android.media.MediaCodec.LinearBlock getLinearBlock();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+    method public long getOffset();
+    method public long getPts();
+    method public int getStreamId();
+    method public boolean isPrivateData();
+    method public boolean isPtsPresent();
+    method public boolean isSecureMemory();
+    method public void release();
+  }
+
+  public final class MmtpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder builder();
+    method public int getMmtpPacketId();
+    method public int getType();
+  }
+
+  public static final class MmtpFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.MmtpFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder setMmtpPacketId(int);
+    method @NonNull public android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+  }
+
+  public class MmtpRecordEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public long getDataLength();
+    method public int getFirstMacroblockInSlice();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+    method public long getPts();
+    method public int getScHevcIndexMask();
+    method public int getTsIndexMask();
+  }
+
+  public class PesEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+    method public int getStreamId();
+  }
+
+  public class PesSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.PesSettings.Builder builder(int);
+    method public int getStreamId();
+    method public boolean isRaw();
+  }
+
+  public static class PesSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.PesSettings build();
+    method @NonNull public android.media.tv.tuner.filter.PesSettings.Builder setRaw(boolean);
+    method @NonNull public android.media.tv.tuner.filter.PesSettings.Builder setStreamId(int);
+  }
+
+  public class RecordSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.RecordSettings.Builder builder(int);
+    method public int getScIndexMask();
+    method public int getScIndexType();
+    method public int getTsIndexMask();
+    field public static final int INDEX_TYPE_NONE = 0; // 0x0
+    field public static final int INDEX_TYPE_SC = 1; // 0x1
+    field public static final int INDEX_TYPE_SC_HEVC = 2; // 0x2
+    field public static final int MPT_INDEX_AUDIO = 262144; // 0x40000
+    field public static final int MPT_INDEX_MPT = 65536; // 0x10000
+    field public static final int MPT_INDEX_TIMESTAMP_TARGET_AUDIO = 1048576; // 0x100000
+    field public static final int MPT_INDEX_TIMESTAMP_TARGET_VIDEO = 524288; // 0x80000
+    field public static final int MPT_INDEX_VIDEO = 131072; // 0x20000
+    field public static final int SC_HEVC_INDEX_AUD = 2; // 0x2
+    field public static final int SC_HEVC_INDEX_SLICE_BLA_N_LP = 16; // 0x10
+    field public static final int SC_HEVC_INDEX_SLICE_BLA_W_RADL = 8; // 0x8
+    field public static final int SC_HEVC_INDEX_SLICE_CE_BLA_W_LP = 4; // 0x4
+    field public static final int SC_HEVC_INDEX_SLICE_IDR_N_LP = 64; // 0x40
+    field public static final int SC_HEVC_INDEX_SLICE_IDR_W_RADL = 32; // 0x20
+    field public static final int SC_HEVC_INDEX_SLICE_TRAIL_CRA = 128; // 0x80
+    field public static final int SC_HEVC_INDEX_SPS = 1; // 0x1
+    field public static final int SC_INDEX_B_FRAME = 4; // 0x4
+    field public static final int SC_INDEX_B_SLICE = 64; // 0x40
+    field public static final int SC_INDEX_I_FRAME = 1; // 0x1
+    field public static final int SC_INDEX_I_SLICE = 16; // 0x10
+    field public static final int SC_INDEX_P_FRAME = 2; // 0x2
+    field public static final int SC_INDEX_P_SLICE = 32; // 0x20
+    field public static final int SC_INDEX_SEQUENCE = 8; // 0x8
+    field public static final int SC_INDEX_SI_SLICE = 128; // 0x80
+    field public static final int SC_INDEX_SP_SLICE = 256; // 0x100
+    field public static final int TS_INDEX_ADAPTATION_EXTENSION_FLAG = 4096; // 0x1000
+    field public static final int TS_INDEX_CHANGE_TO_EVEN_SCRAMBLED = 8; // 0x8
+    field public static final int TS_INDEX_CHANGE_TO_NOT_SCRAMBLED = 4; // 0x4
+    field public static final int TS_INDEX_CHANGE_TO_ODD_SCRAMBLED = 16; // 0x10
+    field public static final int TS_INDEX_DISCONTINUITY_INDICATOR = 32; // 0x20
+    field public static final int TS_INDEX_FIRST_PACKET = 1; // 0x1
+    field public static final int TS_INDEX_INVALID = 0; // 0x0
+    field public static final int TS_INDEX_OPCR_FLAG = 512; // 0x200
+    field public static final int TS_INDEX_PAYLOAD_UNIT_START_INDICATOR = 2; // 0x2
+    field public static final int TS_INDEX_PCR_FLAG = 256; // 0x100
+    field public static final int TS_INDEX_PRIORITY_INDICATOR = 128; // 0x80
+    field public static final int TS_INDEX_PRIVATE_DATA = 2048; // 0x800
+    field public static final int TS_INDEX_RANDOM_ACCESS_INDICATOR = 64; // 0x40
+    field public static final int TS_INDEX_SPLICING_POINT_FLAG = 1024; // 0x400
+  }
+
+  public static class RecordSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings build();
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings.Builder setScIndexMask(int);
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings.Builder setScIndexType(int);
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings.Builder setTsIndexMask(int);
+  }
+
+  public final class RestartEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getStartId();
+    field public static final int NEW_FILTER_FIRST_START_ID = 0; // 0x0
+  }
+
+  public final class ScramblingStatusEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getScramblingStatus();
+  }
+
+  public class SectionEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+    method public int getSectionNumber();
+    method public int getTableId();
+    method public int getVersion();
+  }
+
+  public abstract class SectionSettings extends android.media.tv.tuner.filter.Settings {
+    method public boolean isCrcEnabled();
+    method public boolean isRaw();
+    method public boolean isRepeat();
+  }
+
+  public abstract static class SectionSettings.Builder<T extends android.media.tv.tuner.filter.SectionSettings.Builder<T>> {
+    method @NonNull public T setCrcEnabled(boolean);
+    method @NonNull public T setRaw(boolean);
+    method @NonNull public T setRepeat(boolean);
+  }
+
+  public class SectionSettingsWithSectionBits extends android.media.tv.tuner.filter.SectionSettings {
+    method @NonNull public static android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder builder(int);
+    method @NonNull public byte[] getFilterBytes();
+    method @NonNull public byte[] getMask();
+    method @NonNull public byte[] getMode();
+  }
+
+  public static class SectionSettingsWithSectionBits.Builder extends android.media.tv.tuner.filter.SectionSettings.Builder<android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder> {
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits build();
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setFilter(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setMask(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setMode(@NonNull byte[]);
+  }
+
+  public class SectionSettingsWithTableInfo extends android.media.tv.tuner.filter.SectionSettings {
+    method @NonNull public static android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder builder(int);
+    method public int getTableId();
+    method public int getVersion();
+  }
+
+  public static class SectionSettingsWithTableInfo.Builder extends android.media.tv.tuner.filter.SectionSettings.Builder<android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder> {
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo build();
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder setTableId(int);
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder setVersion(int);
+  }
+
+  public abstract class Settings {
+    method public int getType();
+  }
+
+  public class TemiEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method @NonNull public byte[] getDescriptorData();
+    method public byte getDescriptorTag();
+    method public long getPts();
+  }
+
+  public class TimeFilter implements java.lang.AutoCloseable {
+    method public int clearTimestamp();
+    method public void close();
+    method public long getSourceTime();
+    method public long getTimeStamp();
+    method public int setCurrentTimestamp(long);
+  }
+
+  public final class TlvFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.TlvFilterConfiguration.Builder builder();
+    method public int getPacketType();
+    method public int getType();
+    method public boolean isCompressedIpPacket();
+    method public boolean isPassthrough();
+    field public static final int PACKET_TYPE_COMPRESSED = 3; // 0x3
+    field public static final int PACKET_TYPE_IPV4 = 1; // 0x1
+    field public static final int PACKET_TYPE_IPV6 = 2; // 0x2
+    field public static final int PACKET_TYPE_NULL = 255; // 0xff
+    field public static final int PACKET_TYPE_SIGNALING = 254; // 0xfe
+  }
+
+  public static final class TlvFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setCompressedIpPacket(boolean);
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setPacketType(int);
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setPassthrough(boolean);
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+  }
+
+  public final class TsFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.TsFilterConfiguration.Builder builder();
+    method public int getTpid();
+    method public int getType();
+  }
+
+  public static final class TsFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+    method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration.Builder setTpid(int);
+  }
+
+  public class TsRecordEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public long getDataLength();
+    method public int getFirstMacroblockInSlice();
+    method public int getPacketId();
+    method public long getPts();
+    method public int getScIndexMask();
+    method public int getTsIndexMask();
+  }
+
+}
+
+package android.media.tv.tuner.frontend {
+
+  public class AnalogFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getSifStandardCapability();
+    method public int getSignalTypeCapability();
+  }
+
+  public class AnalogFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder builder();
+    method public int getAftFlag();
+    method public int getSifStandard();
+    method public int getSignalType();
+    method public int getType();
+    field public static final int AFT_FLAG_FALSE = 2; // 0x2
+    field public static final int AFT_FLAG_TRUE = 1; // 0x1
+    field public static final int AFT_FLAG_UNDEFINED = 0; // 0x0
+    field public static final int SIF_AUTO = 1; // 0x1
+    field public static final int SIF_BG = 2; // 0x2
+    field public static final int SIF_BG_A2 = 4; // 0x4
+    field public static final int SIF_BG_NICAM = 8; // 0x8
+    field public static final int SIF_DK = 32; // 0x20
+    field public static final int SIF_DK1_A2 = 64; // 0x40
+    field public static final int SIF_DK2_A2 = 128; // 0x80
+    field public static final int SIF_DK3_A2 = 256; // 0x100
+    field public static final int SIF_DK_NICAM = 512; // 0x200
+    field public static final int SIF_I = 16; // 0x10
+    field public static final int SIF_I_NICAM = 32768; // 0x8000
+    field public static final int SIF_L = 1024; // 0x400
+    field public static final int SIF_L_NICAM = 65536; // 0x10000
+    field public static final int SIF_L_PRIME = 131072; // 0x20000
+    field public static final int SIF_M = 2048; // 0x800
+    field public static final int SIF_M_A2 = 8192; // 0x2000
+    field public static final int SIF_M_BTSC = 4096; // 0x1000
+    field public static final int SIF_M_EIAJ = 16384; // 0x4000
+    field public static final int SIF_UNDEFINED = 0; // 0x0
+    field public static final int SIGNAL_TYPE_AUTO = 1; // 0x1
+    field public static final int SIGNAL_TYPE_NTSC = 32; // 0x20
+    field public static final int SIGNAL_TYPE_NTSC_443 = 64; // 0x40
+    field public static final int SIGNAL_TYPE_PAL = 2; // 0x2
+    field public static final int SIGNAL_TYPE_PAL_60 = 16; // 0x10
+    field public static final int SIGNAL_TYPE_PAL_M = 4; // 0x4
+    field public static final int SIGNAL_TYPE_PAL_N = 8; // 0x8
+    field public static final int SIGNAL_TYPE_SECAM = 128; // 0x80
+    field public static final int SIGNAL_TYPE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class AnalogFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setAftFlag(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSifStandard(int);
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSignalType(int);
+  }
+
+  public class Atsc3FrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getDemodOutputFormatCapability();
+    method public int getFecCapability();
+    method public int getModulationCapability();
+    method public int getPlpCodeRateCapability();
+    method public int getTimeInterleaveModeCapability();
+  }
+
+  public class Atsc3FrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getDemodOutputFormat();
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings[] getPlpSettings();
+    method public int getType();
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_BANDWIDTH_6MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_BANDWIDTH_8MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int CODERATE_10_15 = 512; // 0x200
+    field public static final int CODERATE_11_15 = 1024; // 0x400
+    field public static final int CODERATE_12_15 = 2048; // 0x800
+    field public static final int CODERATE_13_15 = 4096; // 0x1000
+    field public static final int CODERATE_2_15 = 2; // 0x2
+    field public static final int CODERATE_3_15 = 4; // 0x4
+    field public static final int CODERATE_4_15 = 8; // 0x8
+    field public static final int CODERATE_5_15 = 16; // 0x10
+    field public static final int CODERATE_6_15 = 32; // 0x20
+    field public static final int CODERATE_7_15 = 64; // 0x40
+    field public static final int CODERATE_8_15 = 128; // 0x80
+    field public static final int CODERATE_9_15 = 256; // 0x100
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int DEMOD_OUTPUT_FORMAT_ATSC3_LINKLAYER_PACKET = 1; // 0x1
+    field public static final int DEMOD_OUTPUT_FORMAT_BASEBAND_PACKET = 2; // 0x2
+    field public static final int DEMOD_OUTPUT_FORMAT_UNDEFINED = 0; // 0x0
+    field public static final int FEC_AUTO = 1; // 0x1
+    field public static final int FEC_BCH_LDPC_16K = 2; // 0x2
+    field public static final int FEC_BCH_LDPC_64K = 4; // 0x4
+    field public static final int FEC_CRC_LDPC_16K = 8; // 0x8
+    field public static final int FEC_CRC_LDPC_64K = 16; // 0x10
+    field public static final int FEC_LDPC_16K = 32; // 0x20
+    field public static final int FEC_LDPC_64K = 64; // 0x40
+    field public static final int FEC_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_1024QAM = 32; // 0x20
+    field public static final int MODULATION_MOD_16QAM = 4; // 0x4
+    field public static final int MODULATION_MOD_256QAM = 16; // 0x10
+    field public static final int MODULATION_MOD_4096QAM = 64; // 0x40
+    field public static final int MODULATION_MOD_64QAM = 8; // 0x8
+    field public static final int MODULATION_MOD_QPSK = 2; // 0x2
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_CTI = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_HTI = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class Atsc3FrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setDemodOutputFormat(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setPlpSettings(@NonNull android.media.tv.tuner.frontend.Atsc3PlpSettings[]);
+  }
+
+  public class Atsc3PlpInfo {
+    method public boolean getLlsFlag();
+    method public int getPlpId();
+  }
+
+  public class Atsc3PlpSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder builder();
+    method public int getCodeRate();
+    method public int getFec();
+    method public int getInterleaveMode();
+    method public int getModulation();
+    method public int getPlpId();
+  }
+
+  public static class Atsc3PlpSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setCodeRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setFec(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setInterleaveMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setPlpId(int);
+  }
+
+  public class AtscFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getModulationCapability();
+  }
+
+  public class AtscFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.AtscFrontendSettings.Builder builder();
+    method public int getModulation();
+    method public int getType();
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_16VSB = 8; // 0x8
+    field public static final int MODULATION_MOD_8VSB = 4; // 0x4
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+  }
+
+  public static class AtscFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings build();
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings.Builder setModulation(int);
+  }
+
+  public final class DtmbFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getCodeRateCapability();
+    method public int getGuardIntervalCapability();
+    method public int getModulationCapability();
+    method public int getTimeInterleaveModeCapability();
+    method public int getTransmissionModeCapability();
+  }
+
+  public final class DtmbFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getCodeRate();
+    method public int getGuardInterval();
+    method public int getModulation();
+    method public int getTimeInterleaveMode();
+    method public int getTransmissionMode();
+    method public int getType();
+    field public static final int BANDWIDTH_6MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int CODERATE_2_5 = 2; // 0x2
+    field public static final int CODERATE_3_5 = 4; // 0x4
+    field public static final int CODERATE_4_5 = 8; // 0x8
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int GUARD_INTERVAL_AUTO = 1; // 0x1
+    field public static final int GUARD_INTERVAL_PN_420_CONST = 16; // 0x10
+    field public static final int GUARD_INTERVAL_PN_420_VARIOUS = 2; // 0x2
+    field public static final int GUARD_INTERVAL_PN_595_CONST = 4; // 0x4
+    field public static final int GUARD_INTERVAL_PN_945_CONST = 32; // 0x20
+    field public static final int GUARD_INTERVAL_PN_945_VARIOUS = 8; // 0x8
+    field public static final int GUARD_INTERVAL_PN_RESERVED = 64; // 0x40
+    field public static final int GUARD_INTERVAL_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_CONSTELLATION_16QAM = 8; // 0x8
+    field public static final int MODULATION_CONSTELLATION_32QAM = 16; // 0x10
+    field public static final int MODULATION_CONSTELLATION_4QAM = 2; // 0x2
+    field public static final int MODULATION_CONSTELLATION_4QAM_NR = 4; // 0x4
+    field public static final int MODULATION_CONSTELLATION_64QAM = 32; // 0x20
+    field public static final int MODULATION_CONSTELLATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_CONSTELLATION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_240 = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_720 = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+    field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+    field public static final int TRANSMISSION_MODE_C1 = 2; // 0x2
+    field public static final int TRANSMISSION_MODE_C3780 = 4; // 0x4
+    field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class DtmbFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setGuardInterval(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTimeInterleaveMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTransmissionMode(int);
+  }
+
+  public class DvbcFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getAnnexCapability();
+    method public long getCodeRateCapability();
+    method @Deprecated public int getFecCapability();
+    method public int getModulationCapability();
+  }
+
+  public class DvbcFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder builder();
+    method public int getAnnex();
+    method public int getBandwidth();
+    method public long getInnerFec();
+    method public int getModulation();
+    method public int getOuterFec();
+    method public int getSpectralInversion();
+    method public int getSymbolRate();
+    method public int getTimeInterleaveMode();
+    method public int getType();
+    field public static final int ANNEX_A = 1; // 0x1
+    field public static final int ANNEX_B = 2; // 0x2
+    field public static final int ANNEX_C = 4; // 0x4
+    field public static final int ANNEX_UNDEFINED = 0; // 0x0
+    field public static final int BANDWIDTH_5MHZ = 1; // 0x1
+    field public static final int BANDWIDTH_6MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_128QAM = 16; // 0x10
+    field public static final int MODULATION_MOD_16QAM = 2; // 0x2
+    field public static final int MODULATION_MOD_256QAM = 32; // 0x20
+    field public static final int MODULATION_MOD_32QAM = 4; // 0x4
+    field public static final int MODULATION_MOD_64QAM = 8; // 0x8
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int OUTER_FEC_OUTER_FEC_NONE = 1; // 0x1
+    field public static final int OUTER_FEC_OUTER_FEC_RS = 2; // 0x2
+    field public static final int OUTER_FEC_UNDEFINED = 0; // 0x0
+    field @Deprecated public static final int SPECTRAL_INVERSION_INVERTED = 2; // 0x2
+    field @Deprecated public static final int SPECTRAL_INVERSION_NORMAL = 1; // 0x1
+    field @Deprecated public static final int SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_128_1_0 = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_128_1_1 = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_128_2 = 128; // 0x80
+    field public static final int TIME_INTERLEAVE_MODE_128_3 = 256; // 0x100
+    field public static final int TIME_INTERLEAVE_MODE_128_4 = 512; // 0x200
+    field public static final int TIME_INTERLEAVE_MODE_16_8 = 32; // 0x20
+    field public static final int TIME_INTERLEAVE_MODE_32_4 = 16; // 0x10
+    field public static final int TIME_INTERLEAVE_MODE_64_2 = 8; // 0x8
+    field public static final int TIME_INTERLEAVE_MODE_8_16 = 64; // 0x40
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class DvbcFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setAnnex(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setBandwidth(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setInnerFec(long);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setOuterFec(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSpectralInversion(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSymbolRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setTimeInterleaveMode(int);
+  }
+
+  public class DvbsCodeRate {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbsCodeRate.Builder builder();
+    method public int getBitsPer1000Symbol();
+    method public long getInnerFec();
+    method public boolean isLinear();
+    method public boolean isShortFrameEnabled();
+  }
+
+  public static class DvbsCodeRate.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setBitsPer1000Symbol(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setInnerFec(long);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setLinear(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setShortFrameEnabled(boolean);
+  }
+
+  public class DvbsFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public long getInnerFecCapability();
+    method public int getModulationCapability();
+    method public int getStandardCapability();
+  }
+
+  public class DvbsFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder builder();
+    method public boolean canHandleDiseqcRxMessage();
+    method @Nullable public android.media.tv.tuner.frontend.DvbsCodeRate getCodeRate();
+    method public int getInputStreamId();
+    method public int getModulation();
+    method public int getPilot();
+    method public int getRolloff();
+    method public int getScanType();
+    method public int getStandard();
+    method public int getSymbolRate();
+    method public int getType();
+    method public int getVcmMode();
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_128APSK = 2048; // 0x800
+    field public static final int MODULATION_MOD_16APSK = 256; // 0x100
+    field public static final int MODULATION_MOD_16PSK = 16; // 0x10
+    field public static final int MODULATION_MOD_16QAM = 8; // 0x8
+    field public static final int MODULATION_MOD_256APSK = 4096; // 0x1000
+    field public static final int MODULATION_MOD_32APSK = 512; // 0x200
+    field public static final int MODULATION_MOD_32PSK = 32; // 0x20
+    field public static final int MODULATION_MOD_64APSK = 1024; // 0x400
+    field public static final int MODULATION_MOD_8APSK = 128; // 0x80
+    field public static final int MODULATION_MOD_8PSK = 4; // 0x4
+    field public static final int MODULATION_MOD_ACM = 64; // 0x40
+    field public static final int MODULATION_MOD_QPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_RESERVED = 8192; // 0x2000
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int PILOT_AUTO = 3; // 0x3
+    field public static final int PILOT_OFF = 2; // 0x2
+    field public static final int PILOT_ON = 1; // 0x1
+    field public static final int PILOT_UNDEFINED = 0; // 0x0
+    field public static final int ROLLOFF_0_10 = 5; // 0x5
+    field public static final int ROLLOFF_0_15 = 4; // 0x4
+    field public static final int ROLLOFF_0_20 = 3; // 0x3
+    field public static final int ROLLOFF_0_25 = 2; // 0x2
+    field public static final int ROLLOFF_0_35 = 1; // 0x1
+    field public static final int ROLLOFF_0_5 = 6; // 0x6
+    field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_DIRECT = 1; // 0x1
+    field public static final int SCAN_TYPE_DISEQC = 2; // 0x2
+    field public static final int SCAN_TYPE_JESS = 4; // 0x4
+    field public static final int SCAN_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_UNICABLE = 3; // 0x3
+    field public static final int STANDARD_AUTO = 1; // 0x1
+    field public static final int STANDARD_S = 2; // 0x2
+    field public static final int STANDARD_S2 = 4; // 0x4
+    field public static final int STANDARD_S2X = 8; // 0x8
+    field public static final int VCM_MODE_AUTO = 1; // 0x1
+    field public static final int VCM_MODE_MANUAL = 2; // 0x2
+    field public static final int VCM_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class DvbsFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setCanHandleDiseqcRxMessage(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setCodeRate(@Nullable android.media.tv.tuner.frontend.DvbsCodeRate);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setInputStreamId(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setPilot(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setScanType(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setStandard(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setSymbolRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setVcmMode(int);
+  }
+
+  public class DvbtFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getCodeRateCapability();
+    method public int getConstellationCapability();
+    method public int getGuardIntervalCapability();
+    method public int getHierarchyCapability();
+    method public int getTransmissionModeCapability();
+    method public boolean isMisoSupported();
+    method public boolean isT2Supported();
+  }
+
+  public class DvbtFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getConstellation();
+    method public int getGuardInterval();
+    method public int getHierarchy();
+    method public int getHighPriorityCodeRate();
+    method public int getLowPriorityCodeRate();
+    method public int getPlpGroupId();
+    method public int getPlpId();
+    method public int getPlpMode();
+    method public int getStandard();
+    method public int getTransmissionMode();
+    method public int getType();
+    method public boolean isHighPriority();
+    method public boolean isMiso();
+    field public static final int BANDWIDTH_10MHZ = 64; // 0x40
+    field public static final int BANDWIDTH_1_7MHZ = 32; // 0x20
+    field public static final int BANDWIDTH_5MHZ = 16; // 0x10
+    field public static final int BANDWIDTH_6MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int CODERATE_1_2 = 2; // 0x2
+    field public static final int CODERATE_2_3 = 4; // 0x4
+    field public static final int CODERATE_3_4 = 8; // 0x8
+    field public static final int CODERATE_3_5 = 64; // 0x40
+    field public static final int CODERATE_4_5 = 128; // 0x80
+    field public static final int CODERATE_5_6 = 16; // 0x10
+    field public static final int CODERATE_6_7 = 256; // 0x100
+    field public static final int CODERATE_7_8 = 32; // 0x20
+    field public static final int CODERATE_8_9 = 512; // 0x200
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int CONSTELLATION_16QAM = 4; // 0x4
+    field public static final int CONSTELLATION_16QAM_R = 64; // 0x40
+    field public static final int CONSTELLATION_256QAM = 16; // 0x10
+    field public static final int CONSTELLATION_256QAM_R = 256; // 0x100
+    field public static final int CONSTELLATION_64QAM = 8; // 0x8
+    field public static final int CONSTELLATION_64QAM_R = 128; // 0x80
+    field public static final int CONSTELLATION_AUTO = 1; // 0x1
+    field public static final int CONSTELLATION_QPSK = 2; // 0x2
+    field public static final int CONSTELLATION_QPSK_R = 32; // 0x20
+    field public static final int CONSTELLATION_UNDEFINED = 0; // 0x0
+    field public static final int GUARD_INTERVAL_19_128 = 64; // 0x40
+    field public static final int GUARD_INTERVAL_19_256 = 128; // 0x80
+    field public static final int GUARD_INTERVAL_1_128 = 32; // 0x20
+    field public static final int GUARD_INTERVAL_1_16 = 4; // 0x4
+    field public static final int GUARD_INTERVAL_1_32 = 2; // 0x2
+    field public static final int GUARD_INTERVAL_1_4 = 16; // 0x10
+    field public static final int GUARD_INTERVAL_1_8 = 8; // 0x8
+    field public static final int GUARD_INTERVAL_AUTO = 1; // 0x1
+    field public static final int GUARD_INTERVAL_UNDEFINED = 0; // 0x0
+    field public static final int HIERARCHY_1_INDEPTH = 64; // 0x40
+    field public static final int HIERARCHY_1_NATIVE = 4; // 0x4
+    field public static final int HIERARCHY_2_INDEPTH = 128; // 0x80
+    field public static final int HIERARCHY_2_NATIVE = 8; // 0x8
+    field public static final int HIERARCHY_4_INDEPTH = 256; // 0x100
+    field public static final int HIERARCHY_4_NATIVE = 16; // 0x10
+    field public static final int HIERARCHY_AUTO = 1; // 0x1
+    field public static final int HIERARCHY_NON_INDEPTH = 32; // 0x20
+    field public static final int HIERARCHY_NON_NATIVE = 2; // 0x2
+    field public static final int HIERARCHY_UNDEFINED = 0; // 0x0
+    field public static final int PLP_MODE_AUTO = 1; // 0x1
+    field public static final int PLP_MODE_MANUAL = 2; // 0x2
+    field public static final int PLP_MODE_UNDEFINED = 0; // 0x0
+    field public static final int STANDARD_AUTO = 1; // 0x1
+    field public static final int STANDARD_T = 2; // 0x2
+    field public static final int STANDARD_T2 = 4; // 0x4
+    field public static final int TRANSMISSION_MODE_16K = 32; // 0x20
+    field public static final int TRANSMISSION_MODE_1K = 16; // 0x10
+    field public static final int TRANSMISSION_MODE_2K = 2; // 0x2
+    field public static final int TRANSMISSION_MODE_32K = 64; // 0x40
+    field public static final int TRANSMISSION_MODE_4K = 8; // 0x8
+    field public static final int TRANSMISSION_MODE_8K = 4; // 0x4
+    field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+    field public static final int TRANSMISSION_MODE_EXTENDED_16K = 256; // 0x100
+    field public static final int TRANSMISSION_MODE_EXTENDED_32K = 512; // 0x200
+    field public static final int TRANSMISSION_MODE_EXTENDED_8K = 128; // 0x80
+    field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class DvbtFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setConstellation(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setGuardInterval(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setHierarchy(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setHighPriority(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setHighPriorityCodeRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setLowPriorityCodeRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setMiso(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setPlpGroupId(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setPlpId(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setPlpMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setStandard(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setTransmissionMode(int);
+  }
+
+  public abstract class FrontendCapabilities {
+    ctor public FrontendCapabilities();
+  }
+
+  public class FrontendInfo {
+    method public int getAcquireRange();
+    method public int getExclusiveGroupId();
+    method @NonNull public android.util.Range<java.lang.Integer> getFrequencyRange();
+    method @NonNull public android.media.tv.tuner.frontend.FrontendCapabilities getFrontendCapabilities();
+    method public int getId();
+    method @NonNull public int[] getStatusCapabilities();
+    method @NonNull public android.util.Range<java.lang.Integer> getSymbolRateRange();
+    method public int getType();
+  }
+
+  public abstract class FrontendSettings {
+    method @IntRange(from=1) public int getEndFrequency();
+    method public int getFrequency();
+    method public int getFrontendSpectralInversion();
+    method public abstract int getType();
+    method @IntRange(from=1) public void setEndFrequency(int);
+    method public void setSpectralInversion(int);
+    field public static final long FEC_11_15 = 4194304L; // 0x400000L
+    field public static final long FEC_11_20 = 8388608L; // 0x800000L
+    field public static final long FEC_11_45 = 16777216L; // 0x1000000L
+    field public static final long FEC_13_18 = 33554432L; // 0x2000000L
+    field public static final long FEC_13_45 = 67108864L; // 0x4000000L
+    field public static final long FEC_14_45 = 134217728L; // 0x8000000L
+    field public static final long FEC_1_2 = 2L; // 0x2L
+    field public static final long FEC_1_3 = 4L; // 0x4L
+    field public static final long FEC_1_4 = 8L; // 0x8L
+    field public static final long FEC_1_5 = 16L; // 0x10L
+    field public static final long FEC_23_36 = 268435456L; // 0x10000000L
+    field public static final long FEC_25_36 = 536870912L; // 0x20000000L
+    field public static final long FEC_26_45 = 1073741824L; // 0x40000000L
+    field public static final long FEC_28_45 = -2147483648L; // 0xffffffff80000000L
+    field public static final long FEC_29_45 = 1L; // 0x1L
+    field public static final long FEC_2_3 = 32L; // 0x20L
+    field public static final long FEC_2_5 = 64L; // 0x40L
+    field public static final long FEC_2_9 = 128L; // 0x80L
+    field public static final long FEC_31_45 = 2L; // 0x2L
+    field public static final long FEC_32_45 = 4L; // 0x4L
+    field public static final long FEC_3_4 = 256L; // 0x100L
+    field public static final long FEC_3_5 = 512L; // 0x200L
+    field public static final long FEC_4_15 = 2048L; // 0x800L
+    field public static final long FEC_4_5 = 1024L; // 0x400L
+    field public static final long FEC_5_6 = 4096L; // 0x1000L
+    field public static final long FEC_5_9 = 8192L; // 0x2000L
+    field public static final long FEC_6_7 = 16384L; // 0x4000L
+    field public static final long FEC_77_90 = 8L; // 0x8L
+    field public static final long FEC_7_15 = 131072L; // 0x20000L
+    field public static final long FEC_7_8 = 32768L; // 0x8000L
+    field public static final long FEC_7_9 = 65536L; // 0x10000L
+    field public static final long FEC_8_15 = 524288L; // 0x80000L
+    field public static final long FEC_8_9 = 262144L; // 0x40000L
+    field public static final long FEC_9_10 = 1048576L; // 0x100000L
+    field public static final long FEC_9_20 = 2097152L; // 0x200000L
+    field public static final long FEC_AUTO = 1L; // 0x1L
+    field public static final long FEC_UNDEFINED = 0L; // 0x0L
+    field public static final int FRONTEND_SPECTRAL_INVERSION_INVERTED = 2; // 0x2
+    field public static final int FRONTEND_SPECTRAL_INVERSION_NORMAL = 1; // 0x1
+    field public static final int FRONTEND_SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
+    field public static final int TYPE_ANALOG = 1; // 0x1
+    field public static final int TYPE_ATSC = 2; // 0x2
+    field public static final int TYPE_ATSC3 = 3; // 0x3
+    field public static final int TYPE_DTMB = 10; // 0xa
+    field public static final int TYPE_DVBC = 4; // 0x4
+    field public static final int TYPE_DVBS = 5; // 0x5
+    field public static final int TYPE_DVBT = 6; // 0x6
+    field public static final int TYPE_ISDBS = 7; // 0x7
+    field public static final int TYPE_ISDBS3 = 8; // 0x8
+    field public static final int TYPE_ISDBT = 9; // 0x9
+    field public static final int TYPE_UNDEFINED = 0; // 0x0
+  }
+
+  public class FrontendStatus {
+    method public int getAgc();
+    method @NonNull public android.media.tv.tuner.frontend.FrontendStatus.Atsc3PlpTuningInfo[] getAtsc3PlpTuningInfo();
+    method public int getBandwidth();
+    method public int getBer();
+    method @NonNull public int[] getBers();
+    method @NonNull public int[] getCodeRates();
+    method @NonNull public int[] getExtendedModulations();
+    method public int getFreqOffset();
+    method public int getGuardInterval();
+    method public int getHierarchy();
+    method public long getInnerFec();
+    method @NonNull public int[] getInterleaving();
+    method @IntRange(from=0, to=255) @NonNull public int[] getIsdbtSegment();
+    method @NonNull public boolean[] getLayerErrors();
+    method public int getLnbVoltage();
+    method public int getMer();
+    method public int getModulation();
+    method public int getPer();
+    method public int getPerBer();
+    method public int getPlpId();
+    method public int getRollOff();
+    method public int getSignalQuality();
+    method public int getSignalStrength();
+    method public int getSnr();
+    method public int getSpectralInversion();
+    method public int getSymbolRate();
+    method @IntRange(from=0, to=65535) public int getSystemId();
+    method public int getTransmissionMode();
+    method @NonNull public int[] getTsDataRate();
+    method public int getUec();
+    method public boolean isDemodLocked();
+    method public boolean isEwbs();
+    method public boolean isLinear();
+    method public boolean isLnaOn();
+    method public boolean isMisoEnabled();
+    method public boolean isRfLocked();
+    method public boolean isShortFramesEnabled();
+    field public static final int FRONTEND_STATUS_TYPE_AGC = 14; // 0xe
+    field public static final int FRONTEND_STATUS_TYPE_ATSC3_PLP_INFO = 21; // 0x15
+    field public static final int FRONTEND_STATUS_TYPE_BANDWIDTH = 25; // 0x19
+    field public static final int FRONTEND_STATUS_TYPE_BER = 2; // 0x2
+    field public static final int FRONTEND_STATUS_TYPE_BERS = 23; // 0x17
+    field public static final int FRONTEND_STATUS_TYPE_CODERATES = 24; // 0x18
+    field public static final int FRONTEND_STATUS_TYPE_DEMOD_LOCK = 0; // 0x0
+    field public static final int FRONTEND_STATUS_TYPE_EWBS = 13; // 0xd
+    field public static final int FRONTEND_STATUS_TYPE_FEC = 8; // 0x8
+    field public static final int FRONTEND_STATUS_TYPE_FREQ_OFFSET = 18; // 0x12
+    field public static final int FRONTEND_STATUS_TYPE_GUARD_INTERVAL = 26; // 0x1a
+    field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 19; // 0x13
+    field public static final int FRONTEND_STATUS_TYPE_INTERLEAVINGS = 30; // 0x1e
+    field public static final int FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS = 31; // 0x1f
+    field public static final int FRONTEND_STATUS_TYPE_IS_LINEAR = 35; // 0x23
+    field public static final int FRONTEND_STATUS_TYPE_IS_MISO_ENABLED = 34; // 0x22
+    field public static final int FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES_ENABLED = 36; // 0x24
+    field public static final int FRONTEND_STATUS_TYPE_LAYER_ERROR = 16; // 0x10
+    field public static final int FRONTEND_STATUS_TYPE_LNA = 15; // 0xf
+    field public static final int FRONTEND_STATUS_TYPE_LNB_VOLTAGE = 11; // 0xb
+    field public static final int FRONTEND_STATUS_TYPE_MER = 17; // 0x11
+    field public static final int FRONTEND_STATUS_TYPE_MODULATION = 9; // 0x9
+    field public static final int FRONTEND_STATUS_TYPE_MODULATIONS_EXT = 22; // 0x16
+    field public static final int FRONTEND_STATUS_TYPE_PER = 3; // 0x3
+    field public static final int FRONTEND_STATUS_TYPE_PLP_ID = 12; // 0xc
+    field public static final int FRONTEND_STATUS_TYPE_PRE_BER = 4; // 0x4
+    field public static final int FRONTEND_STATUS_TYPE_RF_LOCK = 20; // 0x14
+    field public static final int FRONTEND_STATUS_TYPE_ROLL_OFF = 33; // 0x21
+    field public static final int FRONTEND_STATUS_TYPE_SIGNAL_QUALITY = 5; // 0x5
+    field public static final int FRONTEND_STATUS_TYPE_SIGNAL_STRENGTH = 6; // 0x6
+    field public static final int FRONTEND_STATUS_TYPE_SNR = 1; // 0x1
+    field public static final int FRONTEND_STATUS_TYPE_SPECTRAL = 10; // 0xa
+    field public static final int FRONTEND_STATUS_TYPE_SYMBOL_RATE = 7; // 0x7
+    field public static final int FRONTEND_STATUS_TYPE_T2_SYSTEM_ID = 29; // 0x1d
+    field public static final int FRONTEND_STATUS_TYPE_TRANSMISSION_MODE = 27; // 0x1b
+    field public static final int FRONTEND_STATUS_TYPE_TS_DATA_RATES = 32; // 0x20
+    field public static final int FRONTEND_STATUS_TYPE_UEC = 28; // 0x1c
+  }
+
+  public static class FrontendStatus.Atsc3PlpTuningInfo {
+    method public int getPlpId();
+    method public int getUec();
+    method public boolean isLocked();
+  }
+
+  public class Isdbs3FrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getCodeRateCapability();
+    method public int getModulationCapability();
+  }
+
+  public class Isdbs3FrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder builder();
+    method public int getCodeRate();
+    method public int getModulation();
+    method public int getRolloff();
+    method public int getStreamId();
+    method public int getStreamIdType();
+    method public int getSymbolRate();
+    method public int getType();
+    field public static final int CODERATE_1_2 = 8; // 0x8
+    field public static final int CODERATE_1_3 = 2; // 0x2
+    field public static final int CODERATE_2_3 = 32; // 0x20
+    field public static final int CODERATE_2_5 = 4; // 0x4
+    field public static final int CODERATE_3_4 = 64; // 0x40
+    field public static final int CODERATE_3_5 = 16; // 0x10
+    field public static final int CODERATE_4_5 = 256; // 0x100
+    field public static final int CODERATE_5_6 = 512; // 0x200
+    field public static final int CODERATE_7_8 = 1024; // 0x400
+    field public static final int CODERATE_7_9 = 128; // 0x80
+    field public static final int CODERATE_9_10 = 2048; // 0x800
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_16APSK = 16; // 0x10
+    field public static final int MODULATION_MOD_32APSK = 32; // 0x20
+    field public static final int MODULATION_MOD_8PSK = 8; // 0x8
+    field public static final int MODULATION_MOD_BPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_QPSK = 4; // 0x4
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int ROLLOFF_0_03 = 1; // 0x1
+    field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+  }
+
+  public static class Isdbs3FrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setStreamId(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setStreamIdType(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setSymbolRate(int);
+  }
+
+  public class IsdbsFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getCodeRateCapability();
+    method public int getModulationCapability();
+  }
+
+  public class IsdbsFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder builder();
+    method public int getCodeRate();
+    method public int getModulation();
+    method public int getRolloff();
+    method public int getStreamId();
+    method public int getStreamIdType();
+    method public int getSymbolRate();
+    method public int getType();
+    field public static final int CODERATE_1_2 = 2; // 0x2
+    field public static final int CODERATE_2_3 = 4; // 0x4
+    field public static final int CODERATE_3_4 = 8; // 0x8
+    field public static final int CODERATE_5_6 = 16; // 0x10
+    field public static final int CODERATE_7_8 = 32; // 0x20
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_BPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_QPSK = 4; // 0x4
+    field public static final int MODULATION_MOD_TC8PSK = 8; // 0x8
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int ROLLOFF_0_35 = 1; // 0x1
+    field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+    field public static final int STREAM_ID_TYPE_ID = 0; // 0x0
+    field public static final int STREAM_ID_TYPE_RELATIVE_NUMBER = 1; // 0x1
+  }
+
+  public static class IsdbsFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setStreamId(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setStreamIdType(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setSymbolRate(int);
+  }
+
+  public class IsdbtFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getCodeRateCapability();
+    method public int getGuardIntervalCapability();
+    method public int getModeCapability();
+    method public int getModulationCapability();
+  }
+
+  public class IsdbtFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getCodeRate();
+    method public int getGuardInterval();
+    method public int getMode();
+    method public int getModulation();
+    method public int getServiceAreaId();
+    method public int getType();
+    field public static final int BANDWIDTH_6MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int MODE_1 = 2; // 0x2
+    field public static final int MODE_2 = 4; // 0x4
+    field public static final int MODE_3 = 8; // 0x8
+    field public static final int MODE_AUTO = 1; // 0x1
+    field public static final int MODE_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_16QAM = 8; // 0x8
+    field public static final int MODULATION_MOD_64QAM = 16; // 0x10
+    field public static final int MODULATION_MOD_DQPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_QPSK = 4; // 0x4
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+  }
+
+  public static class IsdbtFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setGuardInterval(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setServiceAreaId(int);
+  }
+
+  public interface OnTuneEventListener {
+    method public void onTuneEvent(int);
+    field public static final int SIGNAL_LOCKED = 0; // 0x0
+    field public static final int SIGNAL_LOST_LOCK = 2; // 0x2
+    field public static final int SIGNAL_NO_SIGNAL = 1; // 0x1
+  }
+
+  public interface ScanCallback {
+    method public void onAnalogSifStandardReported(int);
+    method public void onAtsc3PlpInfosReported(@NonNull android.media.tv.tuner.frontend.Atsc3PlpInfo[]);
+    method public default void onDvbcAnnexReported(int);
+    method public void onDvbsStandardReported(int);
+    method public void onDvbtStandardReported(int);
+    method public void onFrequenciesReported(@NonNull int[]);
+    method public void onGroupIdsReported(@NonNull int[]);
+    method public void onHierarchyReported(int);
+    method public void onInputStreamIdsReported(@NonNull int[]);
+    method public void onLocked();
+    method public default void onModulationReported(int);
+    method public void onPlpIdsReported(@NonNull int[]);
+    method public default void onPriorityReported(boolean);
+    method public void onProgress(@IntRange(from=0, to=100) int);
+    method public void onScanStopped();
+    method public void onSignalTypeReported(int);
+    method public void onSymbolRatesReported(@NonNull int[]);
+  }
+
+}
+
+package android.media.voice {
+
+  public final class KeyphraseModelManager {
+    method @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public void deleteKeyphraseSoundModel(int, @NonNull java.util.Locale);
+    method @Nullable @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel getKeyphraseSoundModel(int, @NonNull java.util.Locale);
+    method @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public void updateKeyphraseSoundModel(@NonNull android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel);
+  }
+
+}
+
+package android.metrics {
+
+  public class LogMaker {
+    ctor public LogMaker(int);
+    ctor public LogMaker(Object[]);
+    method public android.metrics.LogMaker addTaggedData(int, Object);
+    method public android.metrics.LogMaker clearCategory();
+    method public android.metrics.LogMaker clearPackageName();
+    method public android.metrics.LogMaker clearSubtype();
+    method public android.metrics.LogMaker clearTaggedData(int);
+    method public android.metrics.LogMaker clearType();
+    method public void deserialize(Object[]);
+    method public int getCategory();
+    method public long getCounterBucket();
+    method public String getCounterName();
+    method public int getCounterValue();
+    method public String getPackageName();
+    method public int getProcessId();
+    method public int getSubtype();
+    method public Object getTaggedData(int);
+    method public long getTimestamp();
+    method public int getType();
+    method public int getUid();
+    method public boolean isLongCounterBucket();
+    method public boolean isSubsetOf(android.metrics.LogMaker);
+    method public boolean isValidValue(Object);
+    method public Object[] serialize();
+    method public android.metrics.LogMaker setCategory(int);
+    method public android.metrics.LogMaker setPackageName(String);
+    method public android.metrics.LogMaker setSubtype(int);
+    method public android.metrics.LogMaker setType(int);
+  }
+
+  public class MetricsReader {
+    ctor public MetricsReader();
+    method public void checkpoint();
+    method public boolean hasNext();
+    method public android.metrics.LogMaker next();
+    method public void read(long);
+    method public void reset();
+  }
+
+}
+
+package android.net {
+
+  public class EthernetManager {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public android.net.EthernetManager.TetheredInterfaceRequest requestTetheredInterface(@NonNull java.util.concurrent.Executor, @NonNull android.net.EthernetManager.TetheredInterfaceCallback);
+  }
+
+  public static interface EthernetManager.TetheredInterfaceCallback {
+    method public void onAvailable(@NonNull String);
+    method public void onUnavailable();
+  }
+
+  public static class EthernetManager.TetheredInterfaceRequest {
+    method public void release();
+  }
+
+  public final class IpSecManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void applyTunnelModeTransform(@NonNull android.net.IpSecManager.IpSecTunnelInterface, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public android.net.IpSecManager.IpSecTunnelInterface createIpSecTunnelInterface(@NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull android.net.Network) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
+  }
+
+  public static final class IpSecManager.IpSecTunnelInterface implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void addAddress(@NonNull java.net.InetAddress, int) throws java.io.IOException;
+    method public void close();
+    method @NonNull public String getInterfaceName();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void removeAddress(@NonNull java.net.InetAddress, int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void setUnderlyingNetwork(@NonNull android.net.Network) throws java.io.IOException;
+  }
+
+  public static class IpSecTransform.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public android.net.IpSecTransform buildTunnelModeTransform(@NonNull java.net.InetAddress, @NonNull android.net.IpSecManager.SecurityParameterIndex) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
+  }
+
+  public final class MatchAllNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    ctor public MatchAllNetworkSpecifier();
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.MatchAllNetworkSpecifier> CREATOR;
+  }
+
+  public class NetworkKey implements android.os.Parcelable {
+    ctor public NetworkKey(android.net.WifiKey);
+    method @Nullable public static android.net.NetworkKey createFromScanResult(@NonNull android.net.wifi.ScanResult);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkKey> CREATOR;
+    field public static final int TYPE_WIFI = 1; // 0x1
+    field public final int type;
+    field public final android.net.WifiKey wifiKey;
+  }
+
+  public abstract class NetworkRecommendationProvider {
+    ctor public NetworkRecommendationProvider(android.content.Context, java.util.concurrent.Executor);
+    method public final android.os.IBinder getBinder();
+    method public abstract void onRequestScores(android.net.NetworkKey[]);
+  }
+
+  public class NetworkScoreManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public boolean clearScores() throws java.lang.SecurityException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public void disableScoring() throws java.lang.SecurityException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public String getActiveScorerPackage();
+    method @RequiresPermission(android.Manifest.permission.REQUEST_NETWORK_SCORES) public void registerNetworkScoreCallback(int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.NetworkScoreManager.NetworkScoreCallback) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.REQUEST_NETWORK_SCORES) public boolean requestScores(@NonNull java.util.Collection<android.net.NetworkKey>) throws java.lang.SecurityException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public boolean setActiveScorer(String) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.SCORE_NETWORKS) public boolean updateScores(@NonNull android.net.ScoredNetwork[]) throws java.lang.SecurityException;
+    field @Deprecated public static final String ACTION_CHANGE_ACTIVE = "android.net.scoring.CHANGE_ACTIVE";
+    field public static final String ACTION_CUSTOM_ENABLE = "android.net.scoring.CUSTOM_ENABLE";
+    field public static final String ACTION_RECOMMEND_NETWORKS = "android.net.action.RECOMMEND_NETWORKS";
+    field public static final String ACTION_SCORER_CHANGED = "android.net.scoring.SCORER_CHANGED";
+    field @Deprecated public static final String ACTION_SCORE_NETWORKS = "android.net.scoring.SCORE_NETWORKS";
+    field @Deprecated public static final String EXTRA_NETWORKS_TO_SCORE = "networksToScore";
+    field public static final String EXTRA_NEW_SCORER = "newScorer";
+    field @Deprecated public static final String EXTRA_PACKAGE_NAME = "packageName";
+    field public static final int SCORE_FILTER_CURRENT_NETWORK = 1; // 0x1
+    field public static final int SCORE_FILTER_NONE = 0; // 0x0
+    field public static final int SCORE_FILTER_SCAN_RESULTS = 2; // 0x2
+  }
+
+  public abstract static class NetworkScoreManager.NetworkScoreCallback {
+    ctor public NetworkScoreManager.NetworkScoreCallback();
+    method public abstract void onScoresInvalidated();
+    method public abstract void onScoresUpdated(@NonNull java.util.Collection<android.net.ScoredNetwork>);
+  }
+
+  public abstract class NetworkSpecifier {
+    method public boolean canBeSatisfiedBy(@Nullable android.net.NetworkSpecifier);
+    method @Nullable public android.net.NetworkSpecifier redact();
+  }
+
+  public class NetworkStack {
+    method @Nullable public static android.os.IBinder getService();
+    field public static final String PERMISSION_MAINLINE_NETWORK_STACK = "android.permission.MAINLINE_NETWORK_STACK";
+  }
+
+  public final class NetworkStats implements android.os.Parcelable {
+    ctor public NetworkStats(long, int);
+    method @NonNull public android.net.NetworkStats add(@NonNull android.net.NetworkStats);
+    method @NonNull public android.net.NetworkStats addEntry(@NonNull android.net.NetworkStats.Entry);
+    method public int describeContents();
+    method @NonNull public android.net.NetworkStats subtract(@NonNull android.net.NetworkStats);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkStats> CREATOR;
+    field public static final int DEFAULT_NETWORK_NO = 0; // 0x0
+    field public static final int DEFAULT_NETWORK_YES = 1; // 0x1
+    field public static final String IFACE_VT = "vt_data0";
+    field public static final int METERED_NO = 0; // 0x0
+    field public static final int METERED_YES = 1; // 0x1
+    field public static final int ROAMING_NO = 0; // 0x0
+    field public static final int ROAMING_YES = 1; // 0x1
+    field public static final int SET_DEFAULT = 0; // 0x0
+    field public static final int SET_FOREGROUND = 1; // 0x1
+    field public static final int TAG_NONE = 0; // 0x0
+    field public static final int UID_ALL = -1; // 0xffffffff
+    field public static final int UID_TETHERING = -5; // 0xfffffffb
+  }
+
+  public static class NetworkStats.Entry {
+    ctor public NetworkStats.Entry(@Nullable String, int, int, int, int, int, int, long, long, long, long, long);
+  }
+
+  public class RssiCurve implements android.os.Parcelable {
+    ctor public RssiCurve(int, int, byte[]);
+    ctor public RssiCurve(int, int, byte[], int);
+    method public int describeContents();
+    method public byte lookupScore(int);
+    method public byte lookupScore(int, boolean);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.RssiCurve> CREATOR;
+    field public final int activeNetworkRssiBoost;
+    field public final int bucketWidth;
+    field public final byte[] rssiBuckets;
+    field public final int start;
+  }
+
+  public class ScoredNetwork implements android.os.Parcelable {
+    ctor public ScoredNetwork(android.net.NetworkKey, android.net.RssiCurve);
+    ctor public ScoredNetwork(android.net.NetworkKey, android.net.RssiCurve, boolean);
+    ctor public ScoredNetwork(android.net.NetworkKey, android.net.RssiCurve, boolean, @Nullable android.os.Bundle);
+    method public int calculateBadge(int);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String ATTRIBUTES_KEY_BADGING_CURVE = "android.net.attributes.key.BADGING_CURVE";
+    field public static final String ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL = "android.net.attributes.key.HAS_CAPTIVE_PORTAL";
+    field public static final String ATTRIBUTES_KEY_RANKING_SCORE_OFFSET = "android.net.attributes.key.RANKING_SCORE_OFFSET";
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ScoredNetwork> CREATOR;
+    field @Nullable public final android.os.Bundle attributes;
+    field public final boolean meteredHint;
+    field public final android.net.NetworkKey networkKey;
+    field public final android.net.RssiCurve rssiCurve;
+  }
+
+  public class TrafficStats {
+    method public static void setThreadStatsTagApp();
+    method public static void setThreadStatsTagBackup();
+    method public static void setThreadStatsTagRestore();
+    field public static final int TAG_NETWORK_STACK_IMPERSONATION_RANGE_END = -113; // 0xffffff8f
+    field public static final int TAG_NETWORK_STACK_IMPERSONATION_RANGE_START = -128; // 0xffffff80
+    field public static final int TAG_NETWORK_STACK_RANGE_END = -257; // 0xfffffeff
+    field public static final int TAG_NETWORK_STACK_RANGE_START = -768; // 0xfffffd00
+    field public static final int TAG_SYSTEM_IMPERSONATION_RANGE_END = -241; // 0xffffff0f
+    field public static final int TAG_SYSTEM_IMPERSONATION_RANGE_START = -256; // 0xffffff00
+  }
+
+  public abstract class Uri implements java.lang.Comparable<android.net.Uri> android.os.Parcelable {
+    method @NonNull public String toSafeString();
+  }
+
+  public class VpnService extends android.app.Service {
+    method @RequiresPermission(android.Manifest.permission.CONTROL_VPN) public static void prepareAndAuthorize(android.content.Context);
+  }
+
+  public class WebAddress {
+    ctor public WebAddress(String) throws android.net.ParseException;
+  }
+
+  public class WifiKey implements android.os.Parcelable {
+    ctor public WifiKey(String, String);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.WifiKey> CREATOR;
+    field public final String bssid;
+    field public final String ssid;
+  }
+
+}
+
+package android.net.metrics {
+
+  @Deprecated public final class ApfProgramEvent implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class ApfProgramEvent.Builder {
+    ctor @Deprecated public ApfProgramEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent build();
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setActualLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setCurrentRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setFilteredRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setFlags(boolean, boolean);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setProgramLength(int);
+  }
+
+  @Deprecated public final class ApfStats implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class ApfStats.Builder {
+    ctor @Deprecated public ApfStats.Builder();
+    method @Deprecated @NonNull public android.net.metrics.ApfStats build();
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setDroppedRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setDurationMs(long);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setMatchingRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setMaxProgramSize(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setParseErrors(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdates(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdatesAll(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdatesAllowingMulticast(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setReceivedRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setZeroLifetimeRas(int);
+  }
+
+  @Deprecated public final class DhcpClientEvent implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class DhcpClientEvent.Builder {
+    ctor @Deprecated public DhcpClientEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.DhcpClientEvent build();
+    method @Deprecated @NonNull public android.net.metrics.DhcpClientEvent.Builder setDurationMs(int);
+    method @Deprecated @NonNull public android.net.metrics.DhcpClientEvent.Builder setMsg(String);
+  }
+
+  @Deprecated public final class DhcpErrorEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public DhcpErrorEvent(int);
+    method @Deprecated public static int errorCodeWithOption(int, int);
+    field @Deprecated public static final int BOOTP_TOO_SHORT = 67174400; // 0x4010000
+    field @Deprecated public static final int BUFFER_UNDERFLOW = 83951616; // 0x5010000
+    field @Deprecated public static final int DHCP_BAD_MAGIC_COOKIE = 67239936; // 0x4020000
+    field @Deprecated public static final int DHCP_ERROR = 4; // 0x4
+    field @Deprecated public static final int DHCP_INVALID_OPTION_LENGTH = 67305472; // 0x4030000
+    field @Deprecated public static final int DHCP_NO_COOKIE = 67502080; // 0x4060000
+    field @Deprecated public static final int DHCP_NO_MSG_TYPE = 67371008; // 0x4040000
+    field @Deprecated public static final int DHCP_UNKNOWN_MSG_TYPE = 67436544; // 0x4050000
+    field @Deprecated public static final int L2_ERROR = 1; // 0x1
+    field @Deprecated public static final int L2_TOO_SHORT = 16842752; // 0x1010000
+    field @Deprecated public static final int L2_WRONG_ETH_TYPE = 16908288; // 0x1020000
+    field @Deprecated public static final int L3_ERROR = 2; // 0x2
+    field @Deprecated public static final int L3_INVALID_IP = 33751040; // 0x2030000
+    field @Deprecated public static final int L3_NOT_IPV4 = 33685504; // 0x2020000
+    field @Deprecated public static final int L3_TOO_SHORT = 33619968; // 0x2010000
+    field @Deprecated public static final int L4_ERROR = 3; // 0x3
+    field @Deprecated public static final int L4_NOT_UDP = 50397184; // 0x3010000
+    field @Deprecated public static final int L4_WRONG_PORT = 50462720; // 0x3020000
+    field @Deprecated public static final int MISC_ERROR = 5; // 0x5
+    field @Deprecated public static final int PARSING_ERROR = 84082688; // 0x5030000
+    field @Deprecated public static final int RECEIVE_ERROR = 84017152; // 0x5020000
+  }
+
+  @Deprecated public class IpConnectivityLog {
+    ctor @Deprecated public IpConnectivityLog();
+    method @Deprecated public boolean log(long, @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(@NonNull String, @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(@NonNull android.net.Network, @NonNull int[], @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(int, @NonNull int[], @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(@NonNull android.net.metrics.IpConnectivityLog.Event);
+  }
+
+  @Deprecated public static interface IpConnectivityLog.Event extends android.os.Parcelable {
+  }
+
+  @Deprecated public final class IpManagerEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public IpManagerEvent(int, long);
+    field @Deprecated public static final int COMPLETE_LIFECYCLE = 3; // 0x3
+    field @Deprecated public static final int ERROR_INTERFACE_NOT_FOUND = 8; // 0x8
+    field @Deprecated public static final int ERROR_INVALID_PROVISIONING = 7; // 0x7
+    field @Deprecated public static final int ERROR_STARTING_IPREACHABILITYMONITOR = 6; // 0x6
+    field @Deprecated public static final int ERROR_STARTING_IPV4 = 4; // 0x4
+    field @Deprecated public static final int ERROR_STARTING_IPV6 = 5; // 0x5
+    field @Deprecated public static final int PROVISIONING_FAIL = 2; // 0x2
+    field @Deprecated public static final int PROVISIONING_OK = 1; // 0x1
+  }
+
+  @Deprecated public final class IpReachabilityEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public IpReachabilityEvent(int);
+    field @Deprecated public static final int NUD_FAILED = 512; // 0x200
+    field @Deprecated public static final int NUD_FAILED_ORGANIC = 1024; // 0x400
+    field @Deprecated public static final int PROBE = 256; // 0x100
+    field @Deprecated public static final int PROVISIONING_LOST = 768; // 0x300
+    field @Deprecated public static final int PROVISIONING_LOST_ORGANIC = 1280; // 0x500
+  }
+
+  @Deprecated public final class NetworkEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public NetworkEvent(int, long);
+    ctor @Deprecated public NetworkEvent(int);
+    field @Deprecated public static final int NETWORK_CAPTIVE_PORTAL_FOUND = 4; // 0x4
+    field @Deprecated public static final int NETWORK_CONNECTED = 1; // 0x1
+    field @Deprecated public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12; // 0xc
+    field @Deprecated public static final int NETWORK_DISCONNECTED = 7; // 0x7
+    field @Deprecated public static final int NETWORK_FIRST_VALIDATION_PORTAL_FOUND = 10; // 0xa
+    field @Deprecated public static final int NETWORK_FIRST_VALIDATION_SUCCESS = 8; // 0x8
+    field @Deprecated public static final int NETWORK_LINGER = 5; // 0x5
+    field @Deprecated public static final int NETWORK_PARTIAL_CONNECTIVITY = 13; // 0xd
+    field @Deprecated public static final int NETWORK_REVALIDATION_PORTAL_FOUND = 11; // 0xb
+    field @Deprecated public static final int NETWORK_REVALIDATION_SUCCESS = 9; // 0x9
+    field @Deprecated public static final int NETWORK_UNLINGER = 6; // 0x6
+    field @Deprecated public static final int NETWORK_VALIDATED = 2; // 0x2
+    field @Deprecated public static final int NETWORK_VALIDATION_FAILED = 3; // 0x3
+  }
+
+  @Deprecated public final class RaEvent implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class RaEvent.Builder {
+    ctor @Deprecated public RaEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.RaEvent build();
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateDnsslLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updatePrefixPreferredLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updatePrefixValidLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateRdnssLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateRouteInfoLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateRouterLifetime(long);
+  }
+
+  @Deprecated public final class ValidationProbeEvent implements android.net.metrics.IpConnectivityLog.Event {
+    method @Deprecated @NonNull public static String getProbeName(int);
+    field @Deprecated public static final int DNS_FAILURE = 0; // 0x0
+    field @Deprecated public static final int DNS_SUCCESS = 1; // 0x1
+    field @Deprecated public static final int PROBE_DNS = 0; // 0x0
+    field @Deprecated public static final int PROBE_FALLBACK = 4; // 0x4
+    field @Deprecated public static final int PROBE_HTTP = 1; // 0x1
+    field @Deprecated public static final int PROBE_HTTPS = 2; // 0x2
+    field @Deprecated public static final int PROBE_PAC = 3; // 0x3
+    field @Deprecated public static final int PROBE_PRIVDNS = 5; // 0x5
+  }
+
+  @Deprecated public static final class ValidationProbeEvent.Builder {
+    ctor @Deprecated public ValidationProbeEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent build();
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent.Builder setDurationMs(long);
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent.Builder setProbeType(int, boolean);
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent.Builder setReturnCode(int);
+  }
+
+}
+
+package android.net.netstats.provider {
+
+  public abstract class NetworkStatsProvider {
+    ctor public NetworkStatsProvider();
+    method public void notifyAlertReached();
+    method public void notifyLimitReached();
+    method public void notifyStatsUpdated(int, @NonNull android.net.NetworkStats, @NonNull android.net.NetworkStats);
+    method public void notifyWarningReached();
+    method public abstract void onRequestStatsUpdate(int);
+    method public abstract void onSetAlert(long);
+    method public abstract void onSetLimit(@NonNull String, long);
+    method public void onSetWarningAndLimit(@NonNull String, long, long);
+    field public static final int QUOTA_UNLIMITED = -1; // 0xffffffff
+  }
+
+}
+
+package android.net.sip {
+
+  @Deprecated public class SipAudioCall {
+    method @Deprecated @Nullable public android.net.rtp.AudioGroup getAudioGroup();
+    method @Deprecated public void setAudioGroup(@NonNull android.net.rtp.AudioGroup);
+  }
+
+  @Deprecated public class SipManager {
+    method @Deprecated @NonNull public java.util.List<android.net.sip.SipProfile> getProfiles() throws android.net.sip.SipException;
+    field @Deprecated public static final String ACTION_SIP_CALL_OPTION_CHANGED = "android.net.sip.action.SIP_CALL_OPTION_CHANGED";
+    field @Deprecated public static final String ACTION_SIP_INCOMING_CALL = "android.net.sip.action.SIP_INCOMING_CALL";
+    field @Deprecated public static final String ACTION_SIP_REMOVE_PROFILE = "android.net.sip.action.SIP_REMOVE_PROFILE";
+    field @Deprecated public static final String ACTION_SIP_SERVICE_UP = "android.net.sip.action.SIP_SERVICE_UP";
+    field @Deprecated public static final String ACTION_START_SIP = "android.net.sip.action.START_SIP";
+  }
+
+  @Deprecated public class SipProfile implements java.lang.Cloneable android.os.Parcelable java.io.Serializable {
+    method @Deprecated public int getCallingUid();
+  }
+
+}
+
+package android.net.util {
+
+  public final class SocketUtils {
+    method public static void bindSocketToInterface(@NonNull java.io.FileDescriptor, @NonNull String) throws android.system.ErrnoException;
+    method public static void closeSocket(@Nullable java.io.FileDescriptor) throws java.io.IOException;
+    method @NonNull public static java.net.SocketAddress makeNetlinkSocketAddress(int, int);
+    method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int);
+    method @Deprecated @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]);
+    method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int, @NonNull byte[]);
+  }
+
+}
+
+package android.net.vcn {
+
+  public class VcnManager {
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void addVcnNetworkPolicyChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.vcn.VcnManager.VcnNetworkPolicyChangeListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.vcn.VcnNetworkPolicyResult applyVcnNetworkPolicy(@NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void removeVcnNetworkPolicyChangeListener(@NonNull android.net.vcn.VcnManager.VcnNetworkPolicyChangeListener);
+  }
+
+  public static interface VcnManager.VcnNetworkPolicyChangeListener {
+    method public void onPolicyChanged();
+  }
+
+  public final class VcnNetworkPolicyResult implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method public boolean isTeardownRequested();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.vcn.VcnNetworkPolicyResult> CREATOR;
+  }
+
+}
+
+package android.net.wifi {
+
+  public final class WifiMigration {
+    method @Nullable public static java.io.InputStream convertAndRetrieveSharedConfigStoreFile(int);
+    method @Nullable public static java.io.InputStream convertAndRetrieveUserConfigStoreFile(int, @NonNull android.os.UserHandle);
+    method @NonNull public static android.net.wifi.WifiMigration.SettingsMigrationData loadFromSettings(@NonNull android.content.Context);
+    method public static void removeSharedConfigStoreFile(int);
+    method public static void removeUserConfigStoreFile(int, @NonNull android.os.UserHandle);
+    field public static final int STORE_FILE_SHARED_GENERAL = 0; // 0x0
+    field public static final int STORE_FILE_SHARED_SOFTAP = 1; // 0x1
+    field public static final int STORE_FILE_USER_GENERAL = 2; // 0x2
+    field public static final int STORE_FILE_USER_NETWORK_SUGGESTIONS = 3; // 0x3
+  }
+
+  public static final class WifiMigration.SettingsMigrationData implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getP2pDeviceName();
+    method public boolean isP2pFactoryResetPending();
+    method public boolean isScanAlwaysAvailable();
+    method public boolean isScanThrottleEnabled();
+    method public boolean isSoftApTimeoutEnabled();
+    method public boolean isVerboseLoggingEnabled();
+    method public boolean isWakeUpEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiMigration.SettingsMigrationData> CREATOR;
+  }
+
+  public static final class WifiMigration.SettingsMigrationData.Builder {
+    ctor public WifiMigration.SettingsMigrationData.Builder();
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData build();
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setP2pDeviceName(@Nullable String);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setP2pFactoryResetPending(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setScanAlwaysAvailable(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setScanThrottleEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setSoftApTimeoutEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setVerboseLoggingEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setWakeUpEnabled(boolean);
+  }
+
+}
+
+package android.net.wifi.nl80211 {
+
+  public final class DeviceWiphyCapabilities implements android.os.Parcelable {
+    ctor public DeviceWiphyCapabilities();
+    method public int describeContents();
+    method public int getMaxNumberRxSpatialStreams();
+    method public int getMaxNumberTxSpatialStreams();
+    method public boolean isChannelWidthSupported(int);
+    method public boolean isWifiStandardSupported(int);
+    method public void setWifiStandardSupport(int, boolean);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.DeviceWiphyCapabilities> CREATOR;
+  }
+
+  public final class NativeScanResult implements android.os.Parcelable {
+    ctor public NativeScanResult();
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getBssid();
+    method public int getCapabilities();
+    method public int getFrequencyMhz();
+    method @NonNull public byte[] getInformationElements();
+    method @NonNull public java.util.List<android.net.wifi.nl80211.RadioChainInfo> getRadioChainInfos();
+    method public int getSignalMbm();
+    method @NonNull public byte[] getSsid();
+    method public long getTsf();
+    method public boolean isAssociated();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BSS_CAPABILITY_APSD = 2048; // 0x800
+    field public static final int BSS_CAPABILITY_CF_POLLABLE = 4; // 0x4
+    field public static final int BSS_CAPABILITY_CF_POLL_REQUEST = 8; // 0x8
+    field public static final int BSS_CAPABILITY_CHANNEL_AGILITY = 128; // 0x80
+    field public static final int BSS_CAPABILITY_DELAYED_BLOCK_ACK = 16384; // 0x4000
+    field public static final int BSS_CAPABILITY_DMG_ESS = 3; // 0x3
+    field public static final int BSS_CAPABILITY_DMG_IBSS = 1; // 0x1
+    field public static final int BSS_CAPABILITY_DSSS_OFDM = 8192; // 0x2000
+    field public static final int BSS_CAPABILITY_ESS = 1; // 0x1
+    field public static final int BSS_CAPABILITY_IBSS = 2; // 0x2
+    field public static final int BSS_CAPABILITY_IMMEDIATE_BLOCK_ACK = 32768; // 0x8000
+    field public static final int BSS_CAPABILITY_PBCC = 64; // 0x40
+    field public static final int BSS_CAPABILITY_PRIVACY = 16; // 0x10
+    field public static final int BSS_CAPABILITY_QOS = 512; // 0x200
+    field public static final int BSS_CAPABILITY_RADIO_MANAGEMENT = 4096; // 0x1000
+    field public static final int BSS_CAPABILITY_SHORT_PREAMBLE = 32; // 0x20
+    field public static final int BSS_CAPABILITY_SHORT_SLOT_TIME = 1024; // 0x400
+    field public static final int BSS_CAPABILITY_SPECTRUM_MANAGEMENT = 256; // 0x100
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.NativeScanResult> CREATOR;
+  }
+
+  public final class NativeWifiClient implements android.os.Parcelable {
+    ctor public NativeWifiClient(@Nullable android.net.MacAddress);
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getMacAddress();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.NativeWifiClient> CREATOR;
+  }
+
+  public final class PnoNetwork implements android.os.Parcelable {
+    ctor public PnoNetwork();
+    method public int describeContents();
+    method @NonNull public int[] getFrequenciesMhz();
+    method @NonNull public byte[] getSsid();
+    method public boolean isHidden();
+    method public void setFrequenciesMhz(@NonNull int[]);
+    method public void setHidden(boolean);
+    method public void setSsid(@NonNull byte[]);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.PnoNetwork> CREATOR;
+  }
+
+  public final class PnoSettings implements android.os.Parcelable {
+    ctor public PnoSettings();
+    method public int describeContents();
+    method public long getIntervalMillis();
+    method public int getMin2gRssiDbm();
+    method public int getMin5gRssiDbm();
+    method public int getMin6gRssiDbm();
+    method @NonNull public java.util.List<android.net.wifi.nl80211.PnoNetwork> getPnoNetworks();
+    method public void setIntervalMillis(long);
+    method public void setMin2gRssiDbm(int);
+    method public void setMin5gRssiDbm(int);
+    method public void setMin6gRssiDbm(int);
+    method public void setPnoNetworks(@NonNull java.util.List<android.net.wifi.nl80211.PnoNetwork>);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.PnoSettings> CREATOR;
+  }
+
+  public final class RadioChainInfo implements android.os.Parcelable {
+    ctor public RadioChainInfo(int, int);
+    method public int describeContents();
+    method public int getChainId();
+    method public int getLevelDbm();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.RadioChainInfo> CREATOR;
+  }
+
+  public class WifiNl80211Manager {
+    method public void abortScan(@NonNull String);
+    method public void enableVerboseLogging(boolean);
+    method @NonNull public int[] getChannelsMhzForBand(int);
+    method @Nullable public android.net.wifi.nl80211.DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String);
+    method @NonNull public java.util.List<android.net.wifi.nl80211.NativeScanResult> getScanResults(@NonNull String, int);
+    method @Nullable public android.net.wifi.nl80211.WifiNl80211Manager.TxPacketCounters getTxPacketCounters(@NonNull String);
+    method @Nullable public static android.net.wifi.nl80211.WifiNl80211Manager.OemSecurityType parseOemSecurityTypeElement(int, int, @NonNull byte[]);
+    method @Deprecated public boolean registerApCallback(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.SoftApCallback);
+    method public boolean registerCountryCodeChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.CountryCodeChangedListener);
+    method public void sendMgmtFrame(@NonNull String, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.SendMgmtFrameCallback);
+    method public void setOnServiceDeadCallback(@NonNull Runnable);
+    method public boolean setupInterfaceForClientMode(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.ScanEventCallback, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.ScanEventCallback);
+    method public boolean setupInterfaceForSoftApMode(@NonNull String);
+    method @Nullable public android.net.wifi.nl80211.WifiNl80211Manager.SignalPollResult signalPoll(@NonNull String);
+    method public boolean startPnoScan(@NonNull String, @NonNull android.net.wifi.nl80211.PnoSettings, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.PnoScanRequestCallback);
+    method @Deprecated public boolean startScan(@NonNull String, int, @Nullable java.util.Set<java.lang.Integer>, @Nullable java.util.List<byte[]>);
+    method public boolean startScan(@NonNull String, int, @Nullable java.util.Set<java.lang.Integer>, @Nullable java.util.List<byte[]>, @Nullable android.os.Bundle);
+    method public boolean stopPnoScan(@NonNull String);
+    method public boolean tearDownClientInterface(@NonNull String);
+    method public boolean tearDownInterfaces();
+    method public boolean tearDownSoftApInterface(@NonNull String);
+    method public void unregisterCountryCodeChangedListener(@NonNull android.net.wifi.nl80211.WifiNl80211Manager.CountryCodeChangedListener);
+    field public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR = "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";
+    field public static final int SCAN_TYPE_PNO_SCAN = 1; // 0x1
+    field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
+    field public static final int SEND_MGMT_FRAME_ERROR_ALREADY_STARTED = 5; // 0x5
+    field public static final int SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED = 2; // 0x2
+    field public static final int SEND_MGMT_FRAME_ERROR_NO_ACK = 3; // 0x3
+    field public static final int SEND_MGMT_FRAME_ERROR_TIMEOUT = 4; // 0x4
+    field public static final int SEND_MGMT_FRAME_ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  public static interface WifiNl80211Manager.CountryCodeChangedListener {
+    method public void onCountryCodeChanged(@NonNull String);
+  }
+
+  public static class WifiNl80211Manager.OemSecurityType {
+    ctor public WifiNl80211Manager.OemSecurityType(int, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, int);
+    field public final int groupCipher;
+    field @NonNull public final java.util.List<java.lang.Integer> keyManagement;
+    field @NonNull public final java.util.List<java.lang.Integer> pairwiseCipher;
+    field public final int protocol;
+  }
+
+  public static interface WifiNl80211Manager.PnoScanRequestCallback {
+    method public void onPnoRequestFailed();
+    method public void onPnoRequestSucceeded();
+  }
+
+  public static interface WifiNl80211Manager.ScanEventCallback {
+    method public void onScanFailed();
+    method public void onScanResultReady();
+  }
+
+  public static interface WifiNl80211Manager.SendMgmtFrameCallback {
+    method public void onAck(int);
+    method public void onFailure(int);
+  }
+
+  public static class WifiNl80211Manager.SignalPollResult {
+    field public final int associationFrequencyMHz;
+    field public final int currentRssiDbm;
+    field public final int rxBitrateMbps;
+    field public final int txBitrateMbps;
+  }
+
+  @Deprecated public static interface WifiNl80211Manager.SoftApCallback {
+    method @Deprecated public void onConnectedClientsChanged(@NonNull android.net.wifi.nl80211.NativeWifiClient, boolean);
+    method @Deprecated public void onFailure();
+    method @Deprecated public void onSoftApChannelSwitched(int, int);
+  }
+
+  public static class WifiNl80211Manager.TxPacketCounters {
+    field public final int txPacketFailed;
+    field public final int txPacketSucceeded;
+  }
+
+}
+
+package android.nfc {
+
+  public final class NfcAdapter {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean addNfcUnlockHandler(android.nfc.NfcAdapter.NfcUnlockHandler, String[]);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean disable();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean disable(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean disableNdefPush();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enable();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enableNdefPush();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enableSecureNfc(boolean);
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean isControllerAlwaysOn();
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean isControllerAlwaysOnSupported();
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public void registerControllerAlwaysOnListener(@NonNull java.util.concurrent.Executor, @NonNull android.nfc.NfcAdapter.ControllerAlwaysOnListener);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean removeNfcUnlockHandler(android.nfc.NfcAdapter.NfcUnlockHandler);
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean setControllerAlwaysOn(boolean);
+    method public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, int);
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public void unregisterControllerAlwaysOnListener(@NonNull android.nfc.NfcAdapter.ControllerAlwaysOnListener);
+    field public static final int FLAG_NDEF_PUSH_NO_CONFIRM = 1; // 0x1
+  }
+
+  public static interface NfcAdapter.ControllerAlwaysOnListener {
+    method public void onControllerAlwaysOnChanged(boolean);
+  }
+
+  public static interface NfcAdapter.NfcUnlockHandler {
+    method public boolean onUnlockAttempted(android.nfc.Tag);
+  }
+
+}
+
+package android.os {
+
+  public class BatteryManager {
+    method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public boolean setChargingStateUpdateDelayMillis(int);
+    field public static final String EXTRA_EVENTS = "android.os.extra.EVENTS";
+    field public static final String EXTRA_EVENT_TIMESTAMP = "android.os.extra.EVENT_TIMESTAMP";
+  }
+
+  public final class BatterySaverPolicyConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getAdjustBrightnessFactor();
+    method public boolean getAdvertiseIsEnabled();
+    method public boolean getDeferFullBackup();
+    method public boolean getDeferKeyValueBackup();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getDeviceSpecificSettings();
+    method public boolean getDisableAnimation();
+    method public boolean getDisableAod();
+    method public boolean getDisableLaunchBoost();
+    method public boolean getDisableOptionalSensors();
+    method @Deprecated public boolean getDisableSoundTrigger();
+    method public boolean getDisableVibration();
+    method public boolean getEnableAdjustBrightness();
+    method public boolean getEnableDataSaver();
+    method public boolean getEnableFirewall();
+    method public boolean getEnableNightMode();
+    method public boolean getEnableQuickDoze();
+    method public boolean getForceAllAppsStandby();
+    method public boolean getForceBackgroundCheck();
+    method public int getLocationMode();
+    method public int getSoundTriggerMode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.BatterySaverPolicyConfig> CREATOR;
+  }
+
+  public static final class BatterySaverPolicyConfig.Builder {
+    ctor public BatterySaverPolicyConfig.Builder();
+    ctor public BatterySaverPolicyConfig.Builder(@NonNull android.os.BatterySaverPolicyConfig);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder addDeviceSpecificSetting(@NonNull String, @NonNull String);
+    method @NonNull public android.os.BatterySaverPolicyConfig build();
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setAdjustBrightnessFactor(float);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setAdvertiseIsEnabled(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDeferFullBackup(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDeferKeyValueBackup(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableAnimation(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableAod(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableLaunchBoost(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableOptionalSensors(boolean);
+    method @Deprecated @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableSoundTrigger(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableVibration(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableAdjustBrightness(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableDataSaver(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableFirewall(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableNightMode(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableQuickDoze(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setForceAllAppsStandby(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setForceBackgroundCheck(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setLocationMode(int);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setSoundTriggerMode(int);
+  }
+
+  public final class BatteryStatsManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.os.connectivity.CellularBatteryStats getCellularBatteryStats();
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.os.connectivity.WifiBatteryStats getWifiBatteryStats();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportFullWifiLockAcquiredFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportFullWifiLockReleasedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportMobileRadioPowerState(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiBatchedScanStartedFromSource(@NonNull android.os.WorkSource, @IntRange(from=0) int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiBatchedScanStoppedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiMulticastDisabled(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiMulticastEnabled(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiOff();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiOn();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiRadioPowerState(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiRssiChanged(@IntRange(from=0xffffff81, to=0) int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiScanStartedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiScanStoppedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiState(int, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiSupplicantStateChanged(int, boolean);
+    field public static final int WIFI_STATE_OFF = 0; // 0x0
+    field public static final int WIFI_STATE_OFF_SCANNING = 1; // 0x1
+    field public static final int WIFI_STATE_ON_CONNECTED_P2P = 5; // 0x5
+    field public static final int WIFI_STATE_ON_CONNECTED_STA = 4; // 0x4
+    field public static final int WIFI_STATE_ON_CONNECTED_STA_P2P = 6; // 0x6
+    field public static final int WIFI_STATE_ON_DISCONNECTED = 3; // 0x3
+    field public static final int WIFI_STATE_ON_NO_NETWORKS = 2; // 0x2
+    field public static final int WIFI_STATE_SOFT_AP = 7; // 0x7
+    field public static final int WIFI_SUPPL_STATE_ASSOCIATED = 7; // 0x7
+    field public static final int WIFI_SUPPL_STATE_ASSOCIATING = 6; // 0x6
+    field public static final int WIFI_SUPPL_STATE_AUTHENTICATING = 5; // 0x5
+    field public static final int WIFI_SUPPL_STATE_COMPLETED = 10; // 0xa
+    field public static final int WIFI_SUPPL_STATE_DISCONNECTED = 1; // 0x1
+    field public static final int WIFI_SUPPL_STATE_DORMANT = 11; // 0xb
+    field public static final int WIFI_SUPPL_STATE_FOUR_WAY_HANDSHAKE = 8; // 0x8
+    field public static final int WIFI_SUPPL_STATE_GROUP_HANDSHAKE = 9; // 0x9
+    field public static final int WIFI_SUPPL_STATE_INACTIVE = 3; // 0x3
+    field public static final int WIFI_SUPPL_STATE_INTERFACE_DISABLED = 2; // 0x2
+    field public static final int WIFI_SUPPL_STATE_INVALID = 0; // 0x0
+    field public static final int WIFI_SUPPL_STATE_SCANNING = 4; // 0x4
+    field public static final int WIFI_SUPPL_STATE_UNINITIALIZED = 12; // 0xc
+  }
+
+  public class Binder implements android.os.IBinder {
+    method public int handleShellCommand(@NonNull android.os.ParcelFileDescriptor, @NonNull android.os.ParcelFileDescriptor, @NonNull android.os.ParcelFileDescriptor, @NonNull String[]);
+    method public static void setProxyTransactListener(@Nullable android.os.Binder.ProxyTransactListener);
+  }
+
+  public static interface Binder.ProxyTransactListener {
+    method public void onTransactEnded(@Nullable Object);
+    method @Nullable public Object onTransactStarted(@NonNull android.os.IBinder, int);
+  }
+
+  public final class BugreportManager {
+    method @RequiresPermission(android.Manifest.permission.DUMP) public void requestBugreport(@NonNull android.os.BugreportParams, @Nullable CharSequence, @Nullable CharSequence);
+    method @RequiresPermission(android.Manifest.permission.DUMP) @WorkerThread public void startBugreport(@NonNull android.os.ParcelFileDescriptor, @Nullable android.os.ParcelFileDescriptor, @NonNull android.os.BugreportParams, @NonNull java.util.concurrent.Executor, @NonNull android.os.BugreportManager.BugreportCallback);
+  }
+
+  public final class BugreportParams {
+    ctor public BugreportParams(int);
+    method public int getMode();
+    field public static final int BUGREPORT_MODE_FULL = 0; // 0x0
+    field public static final int BUGREPORT_MODE_INTERACTIVE = 1; // 0x1
+    field public static final int BUGREPORT_MODE_REMOTE = 2; // 0x2
+    field public static final int BUGREPORT_MODE_TELEPHONY = 4; // 0x4
+    field public static final int BUGREPORT_MODE_WEAR = 3; // 0x3
+    field public static final int BUGREPORT_MODE_WIFI = 5; // 0x5
+  }
+
+  public static class Build.VERSION {
+    field @NonNull public static final String PREVIEW_SDK_FINGERPRINT;
+  }
+
+  public final class ConfigUpdate {
+    field public static final String ACTION_UPDATE_CARRIER_ID_DB = "android.os.action.UPDATE_CARRIER_ID_DB";
+    field public static final String ACTION_UPDATE_CARRIER_PROVISIONING_URLS = "android.intent.action.UPDATE_CARRIER_PROVISIONING_URLS";
+    field public static final String ACTION_UPDATE_CONVERSATION_ACTIONS = "android.intent.action.UPDATE_CONVERSATION_ACTIONS";
+    field public static final String ACTION_UPDATE_CT_LOGS = "android.intent.action.UPDATE_CT_LOGS";
+    field public static final String ACTION_UPDATE_EMERGENCY_NUMBER_DB = "android.os.action.UPDATE_EMERGENCY_NUMBER_DB";
+    field public static final String ACTION_UPDATE_INTENT_FIREWALL = "android.intent.action.UPDATE_INTENT_FIREWALL";
+    field public static final String ACTION_UPDATE_LANG_ID = "android.intent.action.UPDATE_LANG_ID";
+    field public static final String ACTION_UPDATE_NETWORK_WATCHLIST = "android.intent.action.UPDATE_NETWORK_WATCHLIST";
+    field public static final String ACTION_UPDATE_PINS = "android.intent.action.UPDATE_PINS";
+    field public static final String ACTION_UPDATE_SMART_SELECTION = "android.intent.action.UPDATE_SMART_SELECTION";
+    field public static final String ACTION_UPDATE_SMS_SHORT_CODES = "android.intent.action.UPDATE_SMS_SHORT_CODES";
+    field public static final String EXTRA_REQUIRED_HASH = "android.os.extra.REQUIRED_HASH";
+    field public static final String EXTRA_VERSION = "android.os.extra.VERSION";
+  }
+
+  public class DeviceIdleManager {
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void endIdle(@NonNull String);
+  }
+
+  public class Environment {
+    method @NonNull public static java.util.Collection<java.io.File> getInternalMediaDirectories();
+    method @NonNull public static java.io.File getOdmDirectory();
+    method @NonNull public static java.io.File getOemDirectory();
+    method @NonNull public static java.io.File getProductDirectory();
+    method @Deprecated @NonNull public static java.io.File getProductServicesDirectory();
+    method @NonNull public static java.io.File getSystemExtDirectory();
+    method @NonNull public static java.io.File getVendorDirectory();
+  }
+
+  public class HidlMemory implements java.io.Closeable {
+    ctor public HidlMemory(@NonNull String, @IntRange(from=0) long, @Nullable android.os.NativeHandle);
+    method public void close() throws java.io.IOException;
+    method @NonNull public android.os.HidlMemory dup() throws java.io.IOException;
+    method protected void finalize();
+    method @Nullable public android.os.NativeHandle getHandle();
+    method @NonNull public String getName();
+    method public long getSize();
+    method @Nullable public android.os.NativeHandle releaseHandle();
+  }
+
+  public class HidlSupport {
+    method public static boolean deepEquals(Object, Object);
+    method public static int deepHashCode(Object);
+    method public static int getPidIfSharable();
+    method public static boolean interfacesEqual(android.os.IHwInterface, Object);
+  }
+
+  public abstract class HwBinder implements android.os.IHwBinder {
+    ctor public HwBinder();
+    method public static final void configureRpcThreadpool(long, boolean);
+    method public static void enableInstrumentation();
+    method public static final android.os.IHwBinder getService(String, String) throws java.util.NoSuchElementException, android.os.RemoteException;
+    method public static final android.os.IHwBinder getService(String, String, boolean) throws java.util.NoSuchElementException, android.os.RemoteException;
+    method public static final void joinRpcThreadpool();
+    method public abstract void onTransact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
+    method public final void registerService(String) throws android.os.RemoteException;
+    method public final void transact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
+  }
+
+  public class HwBlob {
+    ctor public HwBlob(int);
+    method public final void copyToBoolArray(long, boolean[], int);
+    method public final void copyToDoubleArray(long, double[], int);
+    method public final void copyToFloatArray(long, float[], int);
+    method public final void copyToInt16Array(long, short[], int);
+    method public final void copyToInt32Array(long, int[], int);
+    method public final void copyToInt64Array(long, long[], int);
+    method public final void copyToInt8Array(long, byte[], int);
+    method public final boolean getBool(long);
+    method public final double getDouble(long);
+    method public final long getFieldHandle(long);
+    method public final float getFloat(long);
+    method public final short getInt16(long);
+    method public final int getInt32(long);
+    method public final long getInt64(long);
+    method public final byte getInt8(long);
+    method public final String getString(long);
+    method public final long handle();
+    method public final void putBlob(long, android.os.HwBlob);
+    method public final void putBool(long, boolean);
+    method public final void putBoolArray(long, boolean[]);
+    method public final void putDouble(long, double);
+    method public final void putDoubleArray(long, double[]);
+    method public final void putFloat(long, float);
+    method public final void putFloatArray(long, float[]);
+    method public final void putHidlMemory(long, @NonNull android.os.HidlMemory);
+    method public final void putInt16(long, short);
+    method public final void putInt16Array(long, short[]);
+    method public final void putInt32(long, int);
+    method public final void putInt32Array(long, int[]);
+    method public final void putInt64(long, long);
+    method public final void putInt64Array(long, long[]);
+    method public final void putInt8(long, byte);
+    method public final void putInt8Array(long, byte[]);
+    method public final void putNativeHandle(long, @Nullable android.os.NativeHandle);
+    method public final void putString(long, String);
+    method public static Boolean[] wrapArray(@NonNull boolean[]);
+    method public static Long[] wrapArray(@NonNull long[]);
+    method public static Byte[] wrapArray(@NonNull byte[]);
+    method public static Short[] wrapArray(@NonNull short[]);
+    method public static Integer[] wrapArray(@NonNull int[]);
+    method public static Float[] wrapArray(@NonNull float[]);
+    method public static Double[] wrapArray(@NonNull double[]);
+  }
+
+  public class HwParcel {
+    ctor public HwParcel();
+    method public final void enforceInterface(String);
+    method public final boolean readBool();
+    method public final java.util.ArrayList<java.lang.Boolean> readBoolVector();
+    method public final android.os.HwBlob readBuffer(long);
+    method public final double readDouble();
+    method public final java.util.ArrayList<java.lang.Double> readDoubleVector();
+    method public final android.os.HwBlob readEmbeddedBuffer(long, long, long, boolean);
+    method @NonNull @Nullable public final android.os.HidlMemory readEmbeddedHidlMemory(long, long, long);
+    method @Nullable public final android.os.NativeHandle readEmbeddedNativeHandle(long, long);
+    method public final float readFloat();
+    method public final java.util.ArrayList<java.lang.Float> readFloatVector();
+    method @NonNull public final android.os.HidlMemory readHidlMemory();
+    method public final short readInt16();
+    method public final java.util.ArrayList<java.lang.Short> readInt16Vector();
+    method public final int readInt32();
+    method public final java.util.ArrayList<java.lang.Integer> readInt32Vector();
+    method public final long readInt64();
+    method public final java.util.ArrayList<java.lang.Long> readInt64Vector();
+    method public final byte readInt8();
+    method public final java.util.ArrayList<java.lang.Byte> readInt8Vector();
+    method @Nullable public final android.os.NativeHandle readNativeHandle();
+    method @NonNull public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector();
+    method public final String readString();
+    method public final java.util.ArrayList<java.lang.String> readStringVector();
+    method public final android.os.IHwBinder readStrongBinder();
+    method public final void release();
+    method public final void releaseTemporaryStorage();
+    method public final void send();
+    method public final void verifySuccess();
+    method public final void writeBool(boolean);
+    method public final void writeBoolVector(java.util.ArrayList<java.lang.Boolean>);
+    method public final void writeBuffer(android.os.HwBlob);
+    method public final void writeDouble(double);
+    method public final void writeDoubleVector(java.util.ArrayList<java.lang.Double>);
+    method public final void writeFloat(float);
+    method public final void writeFloatVector(java.util.ArrayList<java.lang.Float>);
+    method public final void writeHidlMemory(@NonNull android.os.HidlMemory);
+    method public final void writeInt16(short);
+    method public final void writeInt16Vector(java.util.ArrayList<java.lang.Short>);
+    method public final void writeInt32(int);
+    method public final void writeInt32Vector(java.util.ArrayList<java.lang.Integer>);
+    method public final void writeInt64(long);
+    method public final void writeInt64Vector(java.util.ArrayList<java.lang.Long>);
+    method public final void writeInt8(byte);
+    method public final void writeInt8Vector(java.util.ArrayList<java.lang.Byte>);
+    method public final void writeInterfaceToken(String);
+    method public final void writeNativeHandle(@Nullable android.os.NativeHandle);
+    method public final void writeNativeHandleVector(@NonNull java.util.ArrayList<android.os.NativeHandle>);
+    method public final void writeStatus(int);
+    method public final void writeString(String);
+    method public final void writeStringVector(java.util.ArrayList<java.lang.String>);
+    method public final void writeStrongBinder(android.os.IHwBinder);
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public interface IHwBinder {
+    method public boolean linkToDeath(android.os.IHwBinder.DeathRecipient, long);
+    method public android.os.IHwInterface queryLocalInterface(String);
+    method public void transact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
+    method public boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient);
+  }
+
+  public static interface IHwBinder.DeathRecipient {
+    method public void serviceDied(long);
+  }
+
+  public interface IHwInterface {
+    method public android.os.IHwBinder asBinder();
+  }
+
+  public class IncidentManager {
+    method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public void approveReport(android.net.Uri);
+    method @RequiresPermission("android.permission.REQUEST_INCIDENT_REPORT_APPROVAL") public void cancelAuthorization(android.os.IncidentManager.AuthListener);
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void deleteIncidentReports(android.net.Uri);
+    method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public void denyReport(android.net.Uri);
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public android.os.IncidentManager.IncidentReport getIncidentReport(android.net.Uri);
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public java.util.List<android.net.Uri> getIncidentReportList(String);
+    method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public java.util.List<android.os.IncidentManager.PendingReport> getPendingReports();
+    method public void registerSection(int, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.IncidentManager.DumpCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void reportIncident(android.os.IncidentReportArgs);
+    method @RequiresPermission("android.permission.REQUEST_INCIDENT_REPORT_APPROVAL") public void requestAuthorization(int, String, int, android.os.IncidentManager.AuthListener);
+    method public void unregisterSection(int);
+    field public static final int FLAG_CONFIRMATION_DIALOG = 1; // 0x1
+    field public static final int PRIVACY_POLICY_AUTO = 200; // 0xc8
+    field public static final int PRIVACY_POLICY_EXPLICIT = 100; // 0x64
+    field public static final int PRIVACY_POLICY_LOCAL = 0; // 0x0
+  }
+
+  public static class IncidentManager.AuthListener {
+    ctor public IncidentManager.AuthListener();
+    method public void onReportApproved();
+    method public void onReportDenied();
+  }
+
+  public static class IncidentManager.DumpCallback {
+    ctor public IncidentManager.DumpCallback();
+    method public void onDumpSection(int, @NonNull java.io.OutputStream);
+  }
+
+  public static class IncidentManager.IncidentReport implements java.io.Closeable android.os.Parcelable {
+    ctor public IncidentManager.IncidentReport(android.os.Parcel);
+    method public void close();
+    method public int describeContents();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public long getPrivacyPolicy();
+    method public long getTimestamp();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentManager.IncidentReport> CREATOR;
+  }
+
+  public static class IncidentManager.PendingReport {
+    ctor public IncidentManager.PendingReport(@NonNull android.net.Uri);
+    method public int getFlags();
+    method @NonNull public String getRequestingPackage();
+    method public long getTimestamp();
+    method @NonNull public android.net.Uri getUri();
+  }
+
+  public final class IncidentReportArgs implements android.os.Parcelable {
+    ctor public IncidentReportArgs();
+    ctor public IncidentReportArgs(android.os.Parcel);
+    method public void addHeader(byte[]);
+    method public void addSection(int);
+    method public boolean containsSection(int);
+    method public int describeContents();
+    method public boolean isAll();
+    method public void readFromParcel(android.os.Parcel);
+    method public int sectionCount();
+    method public void setAll(boolean);
+    method public void setPrivacyPolicy(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentReportArgs> CREATOR;
+  }
+
+  public final class NativeHandle implements java.io.Closeable {
+    ctor public NativeHandle();
+    ctor public NativeHandle(@NonNull java.io.FileDescriptor, boolean);
+    ctor public NativeHandle(@NonNull java.io.FileDescriptor[], @NonNull int[], boolean);
+    method public void close() throws java.io.IOException;
+    method @NonNull public android.os.NativeHandle dup() throws java.io.IOException;
+    method @NonNull public java.io.FileDescriptor getFileDescriptor();
+    method @NonNull public java.io.FileDescriptor[] getFileDescriptors();
+    method @NonNull public int[] getInts();
+    method public boolean hasSingleFileDescriptor();
+  }
+
+  public interface Parcelable {
+    field public static final int PARCELABLE_STABILITY_LOCAL = 0; // 0x0
+    field public static final int PARCELABLE_STABILITY_VINTF = 1; // 0x1
+  }
+
+  public final class ParcelableHolder implements android.os.Parcelable {
+    ctor public ParcelableHolder(int);
+    method public int describeContents();
+    method @Nullable public <T extends android.os.Parcelable> T getParcelable(@NonNull Class<T>);
+    method public int getStability();
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void setParcelable(@Nullable android.os.Parcelable);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelableHolder> CREATOR;
+  }
+
+  public class PowerExemptionManager {
+    method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void addToTemporaryAllowList(@NonNull String, int, @Nullable String, long);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long addToTemporaryAllowListForEvent(@NonNull String, int, @Nullable String, int);
+    field public static final int EVENT_MMS = 2; // 0x2
+    field public static final int EVENT_SMS = 1; // 0x1
+    field public static final int EVENT_UNSPECIFIED = 0; // 0x0
+    field public static final int REASON_ACCOUNT_TRANSFER = 104; // 0x68
+    field public static final int REASON_ACTIVITY_RECOGNITION = 103; // 0x67
+    field public static final int REASON_GEOFENCING = 100; // 0x64
+    field public static final int REASON_LOCATION_PROVIDER = 312; // 0x138
+    field public static final int REASON_OTHER = 1; // 0x1
+    field public static final int REASON_PUSH_MESSAGING = 101; // 0x65
+    field public static final int REASON_PUSH_MESSAGING_OVER_QUOTA = 102; // 0x66
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+    field public static final int TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED = 0; // 0x0
+    field public static final int TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED = 1; // 0x1
+    field public static final int TEMPORARY_ALLOW_LIST_TYPE_NONE = -1; // 0xffffffff
+  }
+
+  public final class PowerManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_DREAM_STATE, android.Manifest.permission.WRITE_DREAM_STATE}) public void dream(long);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public boolean forceSuspend();
+    method @NonNull public android.os.BatterySaverPolicyConfig getFullPowerSavePolicy();
+    method public int getPowerSaveModeTrigger();
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplayAvailable();
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplaySuppressed();
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplaySuppressedForToken(@NonNull String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setAdaptivePowerSaveEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setAdaptivePowerSavePolicy(@NonNull android.os.BatterySaverPolicyConfig);
+    method @RequiresPermission(anyOf={android.Manifest.permission.BATTERY_PREDICTION, android.Manifest.permission.DEVICE_POWER}) public void setBatteryDischargePrediction(@NonNull java.time.Duration, boolean);
+    method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public boolean setDynamicPowerSaveHint(boolean, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setFullPowerSavePolicy(@NonNull android.os.BatterySaverPolicyConfig);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setPowerSaveModeEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void suppressAmbientDisplay(@NonNull String, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.USER_ACTIVITY}) public void userActivity(long, int, int);
+    field public static final int POWER_SAVE_MODE_TRIGGER_DYNAMIC = 1; // 0x1
+    field public static final int POWER_SAVE_MODE_TRIGGER_PERCENTAGE = 0; // 0x0
+    field public static final String REBOOT_USERSPACE = "userspace";
+    field public static final int SOUND_TRIGGER_MODE_ALL_DISABLED = 2; // 0x2
+    field public static final int SOUND_TRIGGER_MODE_ALL_ENABLED = 0; // 0x0
+    field public static final int SOUND_TRIGGER_MODE_CRITICAL_ONLY = 1; // 0x1
+    field public static final int USER_ACTIVITY_EVENT_ACCESSIBILITY = 3; // 0x3
+    field public static final int USER_ACTIVITY_EVENT_BUTTON = 1; // 0x1
+    field public static final int USER_ACTIVITY_EVENT_OTHER = 0; // 0x0
+    field public static final int USER_ACTIVITY_EVENT_TOUCH = 2; // 0x2
+    field public static final int USER_ACTIVITY_FLAG_INDIRECT = 2; // 0x2
+    field public static final int USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS = 1; // 0x1
+  }
+
+  @Deprecated public class PowerWhitelistManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull java.util.List<java.lang.String>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void removeFromWhitelist(@NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(@NonNull String, long, int, @Nullable String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(@NonNull String, long);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long whitelistAppTemporarilyForEvent(@NonNull String, int, @Nullable String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long whitelistAppTemporarilyForEvent(@NonNull String, int, int, @Nullable String);
+    field @Deprecated public static final int EVENT_MMS = 2; // 0x2
+    field @Deprecated public static final int EVENT_SMS = 1; // 0x1
+    field @Deprecated public static final int EVENT_UNSPECIFIED = 0; // 0x0
+    field @Deprecated public static final int REASON_ACTIVITY_RECOGNITION = 103; // 0x67
+    field @Deprecated public static final int REASON_GEOFENCING = 100; // 0x64
+    field @Deprecated public static final int REASON_LOCATION_PROVIDER = 312; // 0x138
+    field @Deprecated public static final int REASON_OTHER = 1; // 0x1
+    field @Deprecated public static final int REASON_PUSH_MESSAGING = 101; // 0x65
+    field @Deprecated public static final int REASON_PUSH_MESSAGING_OVER_QUOTA = 102; // 0x66
+    field @Deprecated public static final int REASON_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final int TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_ALLOWED = 0; // 0x0
+    field @Deprecated public static final int TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED = 1; // 0x1
+  }
+
+  public class RecoverySystem {
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void cancelScheduledUpdate(android.content.Context) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static void clearPrepareForUnattendedUpdate(@NonNull android.content.Context) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void installPackage(android.content.Context, java.io.File, boolean) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static boolean isPreparedForUnattendedUpdate(@NonNull android.content.Context) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static void prepareForUnattendedUpdate(@NonNull android.content.Context, @NonNull String, @Nullable android.content.IntentSender) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener, android.os.Handler) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener) throws java.io.IOException;
+    method @Deprecated @RequiresPermission(android.Manifest.permission.RECOVERY) public static void rebootAndApply(@NonNull android.content.Context, @NonNull String, @NonNull String) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static int rebootAndApply(@NonNull android.content.Context, @NonNull String, boolean) throws java.io.IOException;
+    method @RequiresPermission(allOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static void rebootWipeAb(android.content.Context, java.io.File, String) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void scheduleUpdateOnBoot(android.content.Context, java.io.File) throws java.io.IOException;
+    method public static boolean verifyPackageCompatibility(java.io.File) throws java.io.IOException;
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_INVALID_PACKAGE_NAME = 2000; // 0x7d0
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_LSKF_NOT_CAPTURED = 3000; // 0xbb8
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_PROVIDER_PREPARATION_FAILURE = 5000; // 0x1388
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_SLOT_MISMATCH = 4000; // 0xfa0
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_UNSPECIFIED = 1000; // 0x3e8
+  }
+
+  public final class RemoteCallback implements android.os.Parcelable {
+    ctor public RemoteCallback(android.os.RemoteCallback.OnResultListener);
+    ctor public RemoteCallback(@NonNull android.os.RemoteCallback.OnResultListener, @Nullable android.os.Handler);
+    method public int describeContents();
+    method public void sendResult(@Nullable android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.RemoteCallback> CREATOR;
+  }
+
+  public static interface RemoteCallback.OnResultListener {
+    method public void onResult(@Nullable android.os.Bundle);
+  }
+
+  public class ServiceSpecificException extends java.lang.RuntimeException {
+    ctor public ServiceSpecificException(int, @Nullable String);
+    ctor public ServiceSpecificException(int);
+    field public final int errorCode;
+  }
+
+  public class SystemConfigManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Set<java.lang.String> getDisabledUntilUsedPreinstalledCarrierApps();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public int[] getSystemPermissionUids(@NonNull String);
+  }
+
+  public class SystemProperties {
+    method @NonNull public static String get(@NonNull String);
+    method @NonNull public static String get(@NonNull String, @Nullable String);
+    method public static boolean getBoolean(@NonNull String, boolean);
+    method public static int getInt(@NonNull String, int);
+    method public static long getLong(@NonNull String, long);
+  }
+
+  public class SystemUpdateManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_SYSTEM_UPDATE_INFO, android.Manifest.permission.RECOVERY}) public android.os.Bundle retrieveSystemUpdateInfo();
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public void updateSystemUpdateInfo(android.os.PersistableBundle);
+    field public static final String KEY_IS_SECURITY_UPDATE = "is_security_update";
+    field public static final String KEY_STATUS = "status";
+    field public static final String KEY_TARGET_BUILD_FINGERPRINT = "target_build_fingerprint";
+    field public static final String KEY_TARGET_SECURITY_PATCH_LEVEL = "target_security_patch_level";
+    field public static final String KEY_TITLE = "title";
+    field public static final int STATUS_IDLE = 1; // 0x1
+    field public static final int STATUS_IN_PROGRESS = 3; // 0x3
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+    field public static final int STATUS_WAITING_DOWNLOAD = 2; // 0x2
+    field public static final int STATUS_WAITING_INSTALL = 4; // 0x4
+    field public static final int STATUS_WAITING_REBOOT = 5; // 0x5
+  }
+
+  public class UpdateEngine {
+    ctor public UpdateEngine();
+    method @NonNull @WorkerThread public android.os.UpdateEngine.AllocateSpaceResult allocateSpace(@NonNull String, @NonNull String[]);
+    method public void applyPayload(String, long, long, String[]);
+    method public void applyPayload(@NonNull android.content.res.AssetFileDescriptor, @NonNull String[]);
+    method public boolean bind(android.os.UpdateEngineCallback, android.os.Handler);
+    method public boolean bind(android.os.UpdateEngineCallback);
+    method public void cancel();
+    method @WorkerThread public int cleanupAppliedPayload();
+    method public void resetStatus();
+    method public void resume();
+    method public void suspend();
+    method public boolean unbind();
+    method public boolean verifyPayloadMetadata(String);
+  }
+
+  public static final class UpdateEngine.AllocateSpaceResult {
+    method public int getErrorCode();
+    method public long getFreeSpaceRequired();
+  }
+
+  public static final class UpdateEngine.ErrorCodeConstants {
+    ctor public UpdateEngine.ErrorCodeConstants();
+    field public static final int DEVICE_CORRUPTED = 61; // 0x3d
+    field public static final int DOWNLOAD_PAYLOAD_VERIFICATION_ERROR = 12; // 0xc
+    field public static final int DOWNLOAD_TRANSFER_ERROR = 9; // 0x9
+    field public static final int ERROR = 1; // 0x1
+    field public static final int FILESYSTEM_COPIER_ERROR = 4; // 0x4
+    field public static final int INSTALL_DEVICE_OPEN_ERROR = 7; // 0x7
+    field public static final int KERNEL_DEVICE_OPEN_ERROR = 8; // 0x8
+    field public static final int NOT_ENOUGH_SPACE = 60; // 0x3c
+    field public static final int PAYLOAD_HASH_MISMATCH_ERROR = 10; // 0xa
+    field public static final int PAYLOAD_MISMATCHED_TYPE_ERROR = 6; // 0x6
+    field public static final int PAYLOAD_SIZE_MISMATCH_ERROR = 11; // 0xb
+    field public static final int PAYLOAD_TIMESTAMP_ERROR = 51; // 0x33
+    field public static final int POST_INSTALL_RUNNER_ERROR = 5; // 0x5
+    field public static final int SUCCESS = 0; // 0x0
+    field public static final int UPDATED_BUT_NOT_ACTIVE = 52; // 0x34
+  }
+
+  public static final class UpdateEngine.UpdateStatusConstants {
+    ctor public UpdateEngine.UpdateStatusConstants();
+    field public static final int ATTEMPTING_ROLLBACK = 8; // 0x8
+    field public static final int CHECKING_FOR_UPDATE = 1; // 0x1
+    field public static final int DISABLED = 9; // 0x9
+    field public static final int DOWNLOADING = 3; // 0x3
+    field public static final int FINALIZING = 5; // 0x5
+    field public static final int IDLE = 0; // 0x0
+    field public static final int REPORTING_ERROR_EVENT = 7; // 0x7
+    field public static final int UPDATED_NEED_REBOOT = 6; // 0x6
+    field public static final int UPDATE_AVAILABLE = 2; // 0x2
+    field public static final int VERIFYING = 4; // 0x4
+  }
+
+  public abstract class UpdateEngineCallback {
+    ctor public UpdateEngineCallback();
+    method public abstract void onPayloadApplicationComplete(int);
+    method public abstract void onStatusUpdate(int, float);
+  }
+
+  public final class UserHandle implements android.os.Parcelable {
+    method @NonNull public static String formatUid(int);
+    method public static int getAppId(int);
+    method public int getIdentifier();
+    method public int getUid(int);
+    method @Deprecated public boolean isOwner();
+    method public boolean isSystem();
+    method public static int myUserId();
+    method public static android.os.UserHandle of(int);
+    field @NonNull public static final android.os.UserHandle ALL;
+    field @NonNull public static final android.os.UserHandle CURRENT;
+    field @NonNull public static final android.os.UserHandle SYSTEM;
+  }
+
+  public class UserManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean canHaveRestrictedProfile();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void clearSeedAccountData();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle createProfile(@NonNull String, @NonNull String, @NonNull java.util.Set<java.lang.String>) throws android.os.UserManager.UserOperationException;
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List<android.os.UserHandle> getAllProfiles();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List<android.os.UserHandle> getEnabledProfiles();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public android.os.UserHandle getProfileParent(@NonNull android.os.UserHandle);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle getRestrictedProfileParent();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getSeedAccountName();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.PersistableBundle getSeedAccountOptions();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getSeedAccountType();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public long[] getSerialNumbersOfUsers(boolean);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.os.UserHandle> getUserHandles(boolean);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public android.graphics.Bitmap getUserIcon();
+    method @Deprecated @android.os.UserManager.UserRestrictionSource @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public int getUserRestrictionSource(String, android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List<android.os.UserManager.EnforcingUser> getUserRestrictionSources(String, android.os.UserHandle);
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public int getUserSwitchability();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean hasRestrictedProfiles();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean hasUserRestrictionForUser(@NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isAdminUser();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isCloneProfile();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean isGuestUser();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isManagedProfile(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isMediaSharedWithParent();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean isPrimaryUser();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isProfile();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isRestrictedProfile();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean isRestrictedProfile(@NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isSameProfileGroup(@NonNull android.os.UserHandle, @NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public boolean isUserNameSet();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isUserOfType(@NonNull String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isUserUnlockingOrUnlocked(@NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean removeUser(@NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setUserIcon(@NonNull android.graphics.Bitmap) throws android.os.UserManager.UserOperationException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setUserName(@Nullable String);
+    field public static final String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED";
+    field @Deprecated public static final String DISALLOW_OEM_UNLOCK = "no_oem_unlock";
+    field public static final String DISALLOW_RUN_IN_BACKGROUND = "no_run_in_background";
+    field public static final int RESTRICTION_NOT_SET = 0; // 0x0
+    field public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 2; // 0x2
+    field public static final int RESTRICTION_SOURCE_PROFILE_OWNER = 4; // 0x4
+    field public static final int RESTRICTION_SOURCE_SYSTEM = 1; // 0x1
+    field public static final int SWITCHABILITY_STATUS_OK = 0; // 0x0
+    field public static final int SWITCHABILITY_STATUS_SYSTEM_USER_LOCKED = 4; // 0x4
+    field public static final int SWITCHABILITY_STATUS_USER_IN_CALL = 1; // 0x1
+    field public static final int SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED = 2; // 0x2
+    field public static final String USER_TYPE_FULL_SECONDARY = "android.os.usertype.full.SECONDARY";
+    field public static final String USER_TYPE_FULL_SYSTEM = "android.os.usertype.full.SYSTEM";
+    field public static final String USER_TYPE_PROFILE_CLONE = "android.os.usertype.profile.CLONE";
+    field public static final String USER_TYPE_PROFILE_MANAGED = "android.os.usertype.profile.MANAGED";
+    field public static final String USER_TYPE_SYSTEM_HEADLESS = "android.os.usertype.system.HEADLESS";
+  }
+
+  public static final class UserManager.EnforcingUser implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.os.UserHandle getUserHandle();
+    method @android.os.UserManager.UserRestrictionSource public int getUserRestrictionSource();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.UserManager.EnforcingUser> CREATOR;
+  }
+
+  @IntDef(flag=true, prefix={"RESTRICTION_"}, value={android.os.UserManager.RESTRICTION_NOT_SET, android.os.UserManager.RESTRICTION_SOURCE_SYSTEM, android.os.UserManager.RESTRICTION_SOURCE_DEVICE_OWNER, android.os.UserManager.RESTRICTION_SOURCE_PROFILE_OWNER}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface UserManager.UserRestrictionSource {
+  }
+
+  public abstract class Vibrator {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public boolean isVibrating();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void removeVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+  }
+
+  public static interface Vibrator.OnVibratorStateChangedListener {
+    method public void onVibratorStateChanged(boolean);
+  }
+
+  public class WorkSource implements android.os.Parcelable {
+    ctor public WorkSource(int);
+    ctor public WorkSource(int, @NonNull String);
+    method public android.os.WorkSource.WorkChain createWorkChain();
+    method @Nullable public String getPackageName(int);
+    method public int getUid(int);
+    method @Nullable public java.util.List<android.os.WorkSource.WorkChain> getWorkChains();
+    method public boolean isEmpty();
+    method public int size();
+    method @NonNull public android.os.WorkSource withoutNames();
+  }
+
+  public static final class WorkSource.WorkChain implements android.os.Parcelable {
+    ctor public WorkSource.WorkChain();
+    method public android.os.WorkSource.WorkChain addNode(int, @Nullable String);
+    method public int describeContents();
+    method public String getAttributionTag();
+    method public int getAttributionUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.WorkSource.WorkChain> CREATOR;
+  }
+
+}
+
+package android.os.connectivity {
+
+  public final class CellularBatteryStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getEnergyConsumedMaMillis();
+    method public long getIdleTimeMillis();
+    method public long getKernelActiveTimeMillis();
+    method public long getLoggingDurationMillis();
+    method public long getMonitoredRailChargeConsumedMaMillis();
+    method public long getNumBytesRx();
+    method public long getNumBytesTx();
+    method public long getNumPacketsRx();
+    method public long getNumPacketsTx();
+    method public long getRxTimeMillis();
+    method public long getSleepTimeMillis();
+    method @NonNull public long getTimeInRatMicros(int);
+    method @NonNull public long getTimeInRxSignalStrengthLevelMicros(@IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.CellularBatteryStats> CREATOR;
+  }
+
+  public final class WifiActivityEnergyInfo implements android.os.Parcelable {
+    ctor public WifiActivityEnergyInfo(long, int, @IntRange(from=0) long, @IntRange(from=0) long, @IntRange(from=0) long, @IntRange(from=0) long);
+    method public int describeContents();
+    method @IntRange(from=0) public long getControllerEnergyUsedMicroJoules();
+    method @IntRange(from=0) public long getControllerIdleDurationMillis();
+    method @IntRange(from=0) public long getControllerRxDurationMillis();
+    method @IntRange(from=0) public long getControllerScanDurationMillis();
+    method @IntRange(from=0) public long getControllerTxDurationMillis();
+    method public int getStackState();
+    method public long getTimeSinceBootMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.WifiActivityEnergyInfo> CREATOR;
+    field public static final int STACK_STATE_INVALID = 0; // 0x0
+    field public static final int STACK_STATE_STATE_ACTIVE = 1; // 0x1
+    field public static final int STACK_STATE_STATE_IDLE = 3; // 0x3
+    field public static final int STACK_STATE_STATE_SCANNING = 2; // 0x2
+  }
+
+  public final class WifiBatteryStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAppScanRequestCount();
+    method public long getEnergyConsumedMaMillis();
+    method public long getIdleTimeMillis();
+    method public long getKernelActiveTimeMillis();
+    method public long getLoggingDurationMillis();
+    method public long getMonitoredRailChargeConsumedMaMillis();
+    method public long getNumBytesRx();
+    method public long getNumBytesTx();
+    method public long getNumPacketsRx();
+    method public long getNumPacketsTx();
+    method public long getRxTimeMillis();
+    method public long getScanTimeMillis();
+    method public long getSleepTimeMillis();
+    method public long getTxTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.WifiBatteryStats> CREATOR;
+  }
+
+}
+
+package android.os.image {
+
+  public class DynamicSystemClient {
+    ctor public DynamicSystemClient(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void bind();
+    method public void setOnStatusChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener);
+    method public void setOnStatusChangedListener(@NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void start(@NonNull android.net.Uri, long);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void start(@NonNull android.net.Uri, long, long);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void unbind();
+    field public static final int CAUSE_ERROR_EXCEPTION = 6; // 0x6
+    field public static final int CAUSE_ERROR_INVALID_URL = 4; // 0x4
+    field public static final int CAUSE_ERROR_IO = 3; // 0x3
+    field public static final int CAUSE_ERROR_IPC = 5; // 0x5
+    field public static final int CAUSE_INSTALL_CANCELLED = 2; // 0x2
+    field public static final int CAUSE_INSTALL_COMPLETED = 1; // 0x1
+    field public static final int CAUSE_NOT_SPECIFIED = 0; // 0x0
+    field public static final int STATUS_IN_PROGRESS = 2; // 0x2
+    field public static final int STATUS_IN_USE = 4; // 0x4
+    field public static final int STATUS_NOT_STARTED = 1; // 0x1
+    field public static final int STATUS_READY = 3; // 0x3
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public static interface DynamicSystemClient.OnStatusChangedListener {
+    method public void onStatusChanged(int, int, long, @Nullable Throwable);
+  }
+
+}
+
+package android.os.storage {
+
+  public class StorageManager {
+    method @WorkerThread public void allocateBytes(@NonNull java.util.UUID, long, @RequiresPermission int) throws java.io.IOException;
+    method @WorkerThread public void allocateBytes(java.io.FileDescriptor, long, @RequiresPermission int) throws java.io.IOException;
+    method @WorkerThread public long getAllocatableBytes(@NonNull java.util.UUID, @RequiresPermission int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.WRITE_MEDIA_STORAGE) public int getExternalStorageMountMode(int, @NonNull String);
+    method public static boolean hasIsolatedStorage();
+    method public void updateExternalStorageFileQuotaType(@NonNull java.io.File, int) throws java.io.IOException;
+    field @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public static final int FLAG_ALLOCATE_AGGRESSIVE = 1; // 0x1
+    field public static final int MOUNT_MODE_EXTERNAL_ANDROID_WRITABLE = 4; // 0x4
+    field public static final int MOUNT_MODE_EXTERNAL_DEFAULT = 1; // 0x1
+    field public static final int MOUNT_MODE_EXTERNAL_INSTALLER = 2; // 0x2
+    field public static final int MOUNT_MODE_EXTERNAL_NONE = 0; // 0x0
+    field public static final int MOUNT_MODE_EXTERNAL_PASS_THROUGH = 3; // 0x3
+    field public static final int QUOTA_TYPE_MEDIA_AUDIO = 2; // 0x2
+    field public static final int QUOTA_TYPE_MEDIA_IMAGE = 1; // 0x1
+    field public static final int QUOTA_TYPE_MEDIA_NONE = 0; // 0x0
+    field public static final int QUOTA_TYPE_MEDIA_VIDEO = 3; // 0x3
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method @NonNull public String getId();
+  }
+
+}
+
+package android.permission {
+
+  public final class AdminPermissionControlParams implements android.os.Parcelable {
+    method public boolean canAdminGrantSensorsPermissions();
+    method public int describeContents();
+    method public int getGrantState();
+    method @NonNull public String getGranteePackageName();
+    method @NonNull public String getPermission();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.permission.AdminPermissionControlParams> CREATOR;
+  }
+
+  public final class PermissionControllerManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void applyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getRuntimePermissionBackup(@NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<byte[]>);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void stageAndApplyRuntimePermissionsBackup(@NonNull byte[], @NonNull android.os.UserHandle);
+    field public static final int COUNT_ONLY_WHEN_GRANTED = 1; // 0x1
+    field public static final int COUNT_WHEN_SYSTEM = 2; // 0x2
+    field public static final int REASON_INSTALLER_POLICY_VIOLATION = 2; // 0x2
+    field public static final int REASON_MALWARE = 1; // 0x1
+  }
+
+  public abstract static class PermissionControllerManager.OnRevokeRuntimePermissionsCallback {
+    ctor public PermissionControllerManager.OnRevokeRuntimePermissionsCallback();
+    method public abstract void onRevokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>);
+  }
+
+  public abstract class PermissionControllerService extends android.app.Service {
+    ctor public PermissionControllerService();
+    method @NonNull @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public String getPrivilegesDescriptionStringForProfile(@NonNull String);
+    method @BinderThread public void onApplyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @NonNull public final android.os.IBinder onBind(android.content.Intent);
+    method @BinderThread public abstract void onCountPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull java.util.function.IntConsumer);
+    method @BinderThread public abstract void onGetAppPermissions(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionPresentationInfo>>);
+    method @BinderThread public void onGetGroupOfPlatformPermission(@NonNull String, @NonNull java.util.function.Consumer<java.lang.String>);
+    method @BinderThread public abstract void onGetPermissionUsages(boolean, long, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionUsageInfo>>);
+    method @BinderThread public void onGetPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>);
+    method @BinderThread public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream, @NonNull Runnable);
+    method @BinderThread public abstract void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable);
+    method @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String);
+    method @Deprecated @BinderThread public void onRestoreDelayedRuntimePermissionsBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @BinderThread public void onRestoreRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.InputStream, @NonNull Runnable);
+    method @BinderThread public abstract void onRevokeRuntimePermission(@NonNull String, @NonNull String, @NonNull Runnable);
+    method @BinderThread public abstract void onRevokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull String, @NonNull java.util.function.Consumer<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>);
+    method @Deprecated @BinderThread public abstract void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String, @NonNull String, @NonNull String, int, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @BinderThread public void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String, @NonNull android.permission.AdminPermissionControlParams, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @BinderThread public void onStageAndApplyRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.InputStream, @NonNull Runnable);
+    method @BinderThread public void onUpdateUserSensitivePermissionFlags(int, @NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method @BinderThread public void onUpdateUserSensitivePermissionFlags(int, @NonNull Runnable);
+    field public static final String SERVICE_INTERFACE = "android.permission.PermissionControllerService";
+  }
+
+  public final class PermissionManager {
+    method public int checkDeviceIdentifierAccess(@Nullable String, @Nullable String, @Nullable String, int, int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionGrantedPackages();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionRequestedPackages();
+    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public int getRuntimePermissionsVersion();
+    method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void startOneTimePermissionSession(@NonNull String, long, int, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void stopOneTimePermissionSession(@NonNull String);
+  }
+
+  public static final class PermissionManager.SplitPermissionInfo {
+    method @NonNull public java.util.List<java.lang.String> getNewPermissions();
+    method @NonNull public String getSplitPermission();
+    method public int getTargetSdk();
+  }
+
+  public final class RuntimePermissionPresentationInfo implements android.os.Parcelable {
+    ctor public RuntimePermissionPresentationInfo(@NonNull CharSequence, boolean, boolean);
+    method public int describeContents();
+    method @NonNull public CharSequence getLabel();
+    method public boolean isGranted();
+    method public boolean isStandard();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionPresentationInfo> CREATOR;
+  }
+
+  public final class RuntimePermissionUsageInfo implements android.os.Parcelable {
+    ctor public RuntimePermissionUsageInfo(@NonNull String, int);
+    method public int describeContents();
+    method public int getAppAccessCount();
+    method @NonNull public String getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionUsageInfo> CREATOR;
+  }
+
+}
+
+package android.permissionpresenterservice {
+
+  @Deprecated public abstract class RuntimePermissionPresenterService extends android.app.Service {
+    ctor @Deprecated public RuntimePermissionPresenterService();
+    method @Deprecated public final void attachBaseContext(android.content.Context);
+    method @Deprecated public final android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public abstract java.util.List<android.content.pm.permission.RuntimePermissionPresentationInfo> onGetAppPermissions(@NonNull String);
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.permissionpresenterservice.RuntimePermissionPresenterService";
+  }
+
+}
+
+package android.preference {
+
+  @Deprecated public class PreferenceManager {
+    method @Deprecated public boolean isStorageCredentialProtected();
+    method @Deprecated public void setStorageCredentialProtected();
+  }
+
+}
+
+package android.print {
+
+  public final class PrintManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS) public void addPrintServiceRecommendationsChangeListener(@NonNull android.print.PrintManager.PrintServiceRecommendationsChangeListener, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES) public void addPrintServicesChangeListener(@NonNull android.print.PrintManager.PrintServicesChangeListener, @Nullable android.os.Handler);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS) public java.util.List<android.printservice.recommendation.RecommendationInfo> getPrintServiceRecommendations();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES) public java.util.List<android.printservice.PrintServiceInfo> getPrintServices(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS) public void removePrintServiceRecommendationsChangeListener(@NonNull android.print.PrintManager.PrintServiceRecommendationsChangeListener);
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES) public void removePrintServicesChangeListener(@NonNull android.print.PrintManager.PrintServicesChangeListener);
+    field public static final int ENABLED_SERVICES = 1; // 0x1
+  }
+
+  public static interface PrintManager.PrintServiceRecommendationsChangeListener {
+    method public void onPrintServiceRecommendationsChanged();
+  }
+
+  public static interface PrintManager.PrintServicesChangeListener {
+    method public void onPrintServicesChanged();
+  }
+
+}
+
+package android.printservice {
+
+  public final class PrintServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.ComponentName getComponentName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.printservice.PrintServiceInfo> CREATOR;
+  }
+
+}
+
+package android.printservice.recommendation {
+
+  public final class RecommendationInfo implements android.os.Parcelable {
+    ctor public RecommendationInfo(@NonNull CharSequence, @NonNull CharSequence, @NonNull java.util.List<java.net.InetAddress>, boolean);
+    ctor @Deprecated public RecommendationInfo(@NonNull CharSequence, @NonNull CharSequence, @IntRange(from=0) int, boolean);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.net.InetAddress> getDiscoveredPrinters();
+    method public CharSequence getName();
+    method public int getNumDiscoveredPrinters();
+    method public CharSequence getPackageName();
+    method public boolean recommendsMultiVendorService();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.printservice.recommendation.RecommendationInfo> CREATOR;
+  }
+
+  public abstract class RecommendationService extends android.app.Service {
+    ctor public RecommendationService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onConnected();
+    method public abstract void onDisconnected();
+    method public final void updateRecommendations(@Nullable java.util.List<android.printservice.recommendation.RecommendationInfo>);
+    field public static final String SERVICE_INTERFACE = "android.printservice.recommendation.RecommendationService";
+  }
+
+}
+
+package android.provider {
+
+  public class CallLog {
+    method @RequiresPermission(allOf={android.Manifest.permission.WRITE_CALL_LOG, android.Manifest.permission.INTERACT_ACROSS_USERS}) public static void storeCallComposerPicture(@NonNull android.content.Context, @NonNull java.io.InputStream, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.net.Uri,android.provider.CallLog.CallComposerLoggingException>);
+  }
+
+  public static class CallLog.CallComposerLoggingException extends java.lang.Throwable {
+    ctor public CallLog.CallComposerLoggingException(int);
+    method public int getErrorCode();
+    field public static final int ERROR_INPUT_CLOSED = 3; // 0x3
+    field public static final int ERROR_REMOTE_END_CLOSED = 1; // 0x1
+    field public static final int ERROR_STORAGE_FULL = 2; // 0x2
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public static final class ContactsContract.MetadataSync implements android.provider.BaseColumns android.provider.ContactsContract.MetadataSyncColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_metadata";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_metadata";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String METADATA_AUTHORITY = "com.android.contacts.metadata";
+    field @Deprecated public static final android.net.Uri METADATA_AUTHORITY_URI;
+  }
+
+  @Deprecated protected static interface ContactsContract.MetadataSyncColumns {
+    field @Deprecated public static final String ACCOUNT_NAME = "account_name";
+    field @Deprecated public static final String ACCOUNT_TYPE = "account_type";
+    field @Deprecated public static final String DATA = "data";
+    field @Deprecated public static final String DATA_SET = "data_set";
+    field @Deprecated public static final String DELETED = "deleted";
+    field @Deprecated public static final String RAW_CONTACT_BACKUP_ID = "raw_contact_backup_id";
+  }
+
+  @Deprecated public static final class ContactsContract.MetadataSyncState implements android.provider.BaseColumns android.provider.ContactsContract.MetadataSyncStateColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_metadata_sync_state";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_metadata_sync_state";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+  }
+
+  @Deprecated protected static interface ContactsContract.MetadataSyncStateColumns {
+    field @Deprecated public static final String ACCOUNT_NAME = "account_name";
+    field @Deprecated public static final String ACCOUNT_TYPE = "account_type";
+    field @Deprecated public static final String DATA_SET = "data_set";
+    field @Deprecated public static final String STATE = "state";
+  }
+
+  public static final class ContactsContract.SimContacts {
+    method @RequiresPermission("android.contacts.permission.MANAGE_SIM_ACCOUNTS") public static void addSimAccount(@NonNull android.content.ContentResolver, @NonNull String, @NonNull String, int, int);
+    method @RequiresPermission("android.contacts.permission.MANAGE_SIM_ACCOUNTS") public static void removeSimAccounts(@NonNull android.content.ContentResolver, int);
+  }
+
+  public final class DeviceConfig {
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static void addOnPropertiesChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static boolean getBoolean(@NonNull String, @NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static float getFloat(@NonNull String, @NonNull String, float);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static int getInt(@NonNull String, @NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static long getLong(@NonNull String, @NonNull String, long);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static android.provider.DeviceConfig.Properties getProperties(@NonNull String, @NonNull java.lang.String...);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getProperty(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getString(@NonNull String, @NonNull String, @Nullable String);
+    method public static void removeOnPropertiesChangedListener(@NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperties(@NonNull android.provider.DeviceConfig.Properties) throws android.provider.DeviceConfig.BadConfigException;
+    method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(@NonNull String, @NonNull String, @Nullable String, boolean);
+    field public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager";
+    field public static final String NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT = "activity_manager_native_boot";
+    field public static final String NAMESPACE_APPSEARCH = "appsearch";
+    field public static final String NAMESPACE_APP_COMPAT = "app_compat";
+    field public static final String NAMESPACE_APP_HIBERNATION = "app_hibernation";
+    field public static final String NAMESPACE_ATTENTION_MANAGER_SERVICE = "attention_manager_service";
+    field public static final String NAMESPACE_AUTOFILL = "autofill";
+    field public static final String NAMESPACE_BATTERY_SAVER = "battery_saver";
+    field public static final String NAMESPACE_BIOMETRICS = "biometrics";
+    field public static final String NAMESPACE_BLOBSTORE = "blobstore";
+    field public static final String NAMESPACE_BLUETOOTH = "bluetooth";
+    field public static final String NAMESPACE_CLIPBOARD = "clipboard";
+    field public static final String NAMESPACE_CONNECTIVITY = "connectivity";
+    field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture";
+    field @Deprecated public static final String NAMESPACE_DEX_BOOT = "dex_boot";
+    field public static final String NAMESPACE_DISPLAY_MANAGER = "display_manager";
+    field public static final String NAMESPACE_GAME_DRIVER = "game_driver";
+    field public static final String NAMESPACE_INPUT_NATIVE_BOOT = "input_native_boot";
+    field public static final String NAMESPACE_INTELLIGENCE_ATTENTION = "intelligence_attention";
+    field public static final String NAMESPACE_LOCATION = "location";
+    field public static final String NAMESPACE_MEDIA = "media";
+    field public static final String NAMESPACE_MEDIA_NATIVE = "media_native";
+    field public static final String NAMESPACE_NETD_NATIVE = "netd_native";
+    field public static final String NAMESPACE_OTA = "ota";
+    field public static final String NAMESPACE_PACKAGE_MANAGER_SERVICE = "package_manager_service";
+    field public static final String NAMESPACE_PERMISSIONS = "permissions";
+    field public static final String NAMESPACE_PRIVACY = "privacy";
+    field public static final String NAMESPACE_PROFCOLLECT_NATIVE_BOOT = "profcollect_native_boot";
+    field public static final String NAMESPACE_REBOOT_READINESS = "reboot_readiness";
+    field public static final String NAMESPACE_ROLLBACK = "rollback";
+    field public static final String NAMESPACE_ROLLBACK_BOOT = "rollback_boot";
+    field public static final String NAMESPACE_RUNTIME = "runtime";
+    field public static final String NAMESPACE_RUNTIME_NATIVE = "runtime_native";
+    field public static final String NAMESPACE_RUNTIME_NATIVE_BOOT = "runtime_native_boot";
+    field public static final String NAMESPACE_SCHEDULER = "scheduler";
+    field public static final String NAMESPACE_STATSD_JAVA = "statsd_java";
+    field public static final String NAMESPACE_STATSD_JAVA_BOOT = "statsd_java_boot";
+    field public static final String NAMESPACE_STATSD_NATIVE = "statsd_native";
+    field public static final String NAMESPACE_STATSD_NATIVE_BOOT = "statsd_native_boot";
+    field @Deprecated public static final String NAMESPACE_STORAGE = "storage";
+    field public static final String NAMESPACE_STORAGE_NATIVE_BOOT = "storage_native_boot";
+    field public static final String NAMESPACE_SYSTEMUI = "systemui";
+    field public static final String NAMESPACE_SYSTEM_TIME = "system_time";
+    field public static final String NAMESPACE_TELEPHONY = "telephony";
+    field public static final String NAMESPACE_TEXTCLASSIFIER = "textclassifier";
+    field public static final String NAMESPACE_WINDOW_MANAGER_NATIVE_BOOT = "window_manager_native_boot";
+  }
+
+  public static class DeviceConfig.BadConfigException extends java.lang.Exception {
+    ctor public DeviceConfig.BadConfigException();
+  }
+
+  public static interface DeviceConfig.OnPropertiesChangedListener {
+    method public void onPropertiesChanged(@NonNull android.provider.DeviceConfig.Properties);
+  }
+
+  public static class DeviceConfig.Properties {
+    method public boolean getBoolean(@NonNull String, boolean);
+    method public float getFloat(@NonNull String, float);
+    method public int getInt(@NonNull String, int);
+    method @NonNull public java.util.Set<java.lang.String> getKeyset();
+    method public long getLong(@NonNull String, long);
+    method @NonNull public String getNamespace();
+    method @Nullable public String getString(@NonNull String, @Nullable String);
+  }
+
+  public static final class DeviceConfig.Properties.Builder {
+    ctor public DeviceConfig.Properties.Builder(@NonNull String);
+    method @NonNull public android.provider.DeviceConfig.Properties build();
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setBoolean(@NonNull String, boolean);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setFloat(@NonNull String, float);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setInt(@NonNull String, int);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setLong(@NonNull String, long);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setString(@NonNull String, @Nullable String);
+  }
+
+  public final class DocumentsContract {
+    method @NonNull public static android.net.Uri buildDocumentUriAsUser(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method public static boolean isManageMode(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri setManageMode(@NonNull android.net.Uri);
+    field public static final String ACTION_DOCUMENT_ROOT_SETTINGS = "android.provider.action.DOCUMENT_ROOT_SETTINGS";
+    field public static final String ACTION_MANAGE_DOCUMENT = "android.provider.action.MANAGE_DOCUMENT";
+    field public static final String DOWNLOADS_PROVIDER_AUTHORITY = "downloads";
+    field public static final String EXTERNAL_STORAGE_PROVIDER_AUTHORITY = "com.android.externalstorage.documents";
+    field public static final String EXTRA_SHOW_ADVANCED = "android.provider.extra.SHOW_ADVANCED";
+  }
+
+  public static final class DocumentsContract.Root {
+    field public static final int FLAG_ADVANCED = 65536; // 0x10000
+    field public static final int FLAG_HAS_SETTINGS = 131072; // 0x20000
+    field public static final int FLAG_REMOVABLE_SD = 262144; // 0x40000
+    field public static final int FLAG_REMOVABLE_USB = 524288; // 0x80000
+  }
+
+  public abstract class SearchIndexableData {
+    ctor public SearchIndexableData();
+    ctor public SearchIndexableData(android.content.Context);
+    field public String className;
+    field public android.content.Context context;
+    field public boolean enabled;
+    field public int iconResId;
+    field public String intentAction;
+    field public String intentTargetClass;
+    field public String intentTargetPackage;
+    field public String key;
+    field public java.util.Locale locale;
+    field public String packageName;
+    field public int rank;
+    field public int userId;
+  }
+
+  public class SearchIndexableResource extends android.provider.SearchIndexableData {
+    ctor public SearchIndexableResource(int, int, String, int);
+    ctor public SearchIndexableResource(android.content.Context);
+    field public int xmlResId;
+  }
+
+  public class SearchIndexablesContract {
+    ctor public SearchIndexablesContract();
+    field public static final int COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE = 0; // 0x0
+    field public static final int COLUMN_INDEX_RAW_CLASS_NAME = 7; // 0x7
+    field public static final int COLUMN_INDEX_RAW_ENTRIES = 4; // 0x4
+    field public static final int COLUMN_INDEX_RAW_ICON_RESID = 8; // 0x8
+    field public static final int COLUMN_INDEX_RAW_INTENT_ACTION = 9; // 0x9
+    field public static final int COLUMN_INDEX_RAW_INTENT_TARGET_CLASS = 11; // 0xb
+    field public static final int COLUMN_INDEX_RAW_INTENT_TARGET_PACKAGE = 10; // 0xa
+    field public static final int COLUMN_INDEX_RAW_KEY = 12; // 0xc
+    field public static final int COLUMN_INDEX_RAW_KEYWORDS = 5; // 0x5
+    field public static final int COLUMN_INDEX_RAW_RANK = 0; // 0x0
+    field public static final int COLUMN_INDEX_RAW_SCREEN_TITLE = 6; // 0x6
+    field public static final int COLUMN_INDEX_RAW_SUMMARY_OFF = 3; // 0x3
+    field public static final int COLUMN_INDEX_RAW_SUMMARY_ON = 2; // 0x2
+    field public static final int COLUMN_INDEX_RAW_TITLE = 1; // 0x1
+    field public static final int COLUMN_INDEX_RAW_USER_ID = 13; // 0xd
+    field public static final int COLUMN_INDEX_XML_RES_CLASS_NAME = 2; // 0x2
+    field public static final int COLUMN_INDEX_XML_RES_ICON_RESID = 3; // 0x3
+    field public static final int COLUMN_INDEX_XML_RES_INTENT_ACTION = 4; // 0x4
+    field public static final int COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS = 6; // 0x6
+    field public static final int COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE = 5; // 0x5
+    field public static final int COLUMN_INDEX_XML_RES_RANK = 0; // 0x0
+    field public static final int COLUMN_INDEX_XML_RES_RESID = 1; // 0x1
+    field public static final String DYNAMIC_INDEXABLES_RAW = "dynamic_indexables_raw";
+    field public static final String DYNAMIC_INDEXABLES_RAW_PATH = "settings/dynamic_indexables_raw";
+    field public static final String INDEXABLES_RAW = "indexables_raw";
+    field public static final String[] INDEXABLES_RAW_COLUMNS;
+    field public static final String INDEXABLES_RAW_PATH = "settings/indexables_raw";
+    field public static final String INDEXABLES_XML_RES = "indexables_xml_res";
+    field public static final String[] INDEXABLES_XML_RES_COLUMNS;
+    field public static final String INDEXABLES_XML_RES_PATH = "settings/indexables_xml_res";
+    field public static final String NON_INDEXABLES_KEYS = "non_indexables_key";
+    field public static final String[] NON_INDEXABLES_KEYS_COLUMNS;
+    field public static final String NON_INDEXABLES_KEYS_PATH = "settings/non_indexables_key";
+    field public static final String PROVIDER_INTERFACE = "android.content.action.SEARCH_INDEXABLES_PROVIDER";
+    field public static final String SLICE_URI_PAIRS = "slice_uri_pairs";
+    field @NonNull public static final String[] SLICE_URI_PAIRS_COLUMNS;
+    field public static final String SLICE_URI_PAIRS_PATH = "settings/slice_uri_pairs";
+  }
+
+  public static class SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_CLASS_NAME = "className";
+    field public static final String COLUMN_ICON_RESID = "iconResId";
+    field public static final String COLUMN_INTENT_ACTION = "intentAction";
+    field public static final String COLUMN_INTENT_TARGET_CLASS = "intentTargetClass";
+    field public static final String COLUMN_INTENT_TARGET_PACKAGE = "intentTargetPackage";
+    field public static final String COLUMN_RANK = "rank";
+  }
+
+  public static final class SearchIndexablesContract.NonIndexableKey extends android.provider.SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_KEY_VALUE = "key";
+    field public static final String MIME_TYPE = "vnd.android.cursor.dir/non_indexables_key";
+  }
+
+  public static final class SearchIndexablesContract.RawData extends android.provider.SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_ENTRIES = "entries";
+    field public static final String COLUMN_KEY = "key";
+    field public static final String COLUMN_KEYWORDS = "keywords";
+    field public static final String COLUMN_SCREEN_TITLE = "screenTitle";
+    field public static final String COLUMN_SUMMARY_OFF = "summaryOff";
+    field public static final String COLUMN_SUMMARY_ON = "summaryOn";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_USER_ID = "user_id";
+    field public static final String MIME_TYPE = "vnd.android.cursor.dir/indexables_raw";
+  }
+
+  public static final class SearchIndexablesContract.SliceUriPairColumns {
+    field public static final String KEY = "key";
+    field public static final String SLICE_URI = "slice_uri";
+  }
+
+  public static final class SearchIndexablesContract.XmlResource extends android.provider.SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_XML_RESID = "xmlResId";
+    field public static final String MIME_TYPE = "vnd.android.cursor.dir/indexables_xml_res";
+  }
+
+  public abstract class SearchIndexablesProvider extends android.content.ContentProvider {
+    ctor public SearchIndexablesProvider();
+    method public final int delete(android.net.Uri, String, String[]);
+    method public String getType(android.net.Uri);
+    method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method @Nullable public android.database.Cursor queryDynamicRawData(@Nullable String[]);
+    method public abstract android.database.Cursor queryNonIndexableKeys(String[]);
+    method public abstract android.database.Cursor queryRawData(String[]);
+    method @Nullable public android.database.Cursor querySliceUriPairs();
+    method public abstract android.database.Cursor queryXmlResources(String[]);
+    method public final int update(android.net.Uri, android.content.ContentValues, String, String[]);
+  }
+
+  public final class Settings {
+    method @Deprecated public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, boolean);
+    method public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, @Nullable String, boolean);
+    field public static final String ACTION_ACCESSIBILITY_DETAILS_SETTINGS = "android.settings.ACCESSIBILITY_DETAILS_SETTINGS";
+    field public static final String ACTION_BUGREPORT_HANDLER_SETTINGS = "android.settings.BUGREPORT_HANDLER_SETTINGS";
+    field public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS = "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
+    field public static final String ACTION_LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS = "android.settings.LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS";
+    field public static final String ACTION_MANAGE_APP_OVERLAY_PERMISSION = "android.settings.MANAGE_APP_OVERLAY_PERMISSION";
+    field public static final String ACTION_MANAGE_DOMAIN_URLS = "android.settings.MANAGE_DOMAIN_URLS";
+    field public static final String ACTION_MANAGE_MORE_DEFAULT_APPS_SETTINGS = "android.settings.MANAGE_MORE_DEFAULT_APPS_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_DETAIL_SETTINGS = "android.settings.NOTIFICATION_POLICY_ACCESS_DETAIL_SETTINGS";
+    field public static final String ACTION_REQUEST_ENABLE_CONTENT_CAPTURE = "android.settings.REQUEST_ENABLE_CONTENT_CAPTURE";
+    field public static final String ACTION_SHOW_ADMIN_SUPPORT_DETAILS = "android.settings.SHOW_ADMIN_SUPPORT_DETAILS";
+    field public static final String ACTION_TETHER_PROVISIONING_UI = "android.settings.TETHER_PROVISIONING_UI";
+    field public static final String ACTION_TETHER_SETTINGS = "android.settings.TETHER_SETTINGS";
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, @Nullable String, boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static void resetToDefaults(@NonNull android.content.ContentResolver, @Nullable String);
+    field public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios";
+    field public static final String APP_STANDBY_ENABLED = "app_standby_enabled";
+    field public static final String AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES = "autofill_compat_mode_allowed_packages";
+    field public static final String CARRIER_APP_NAMES = "carrier_app_names";
+    field public static final String CARRIER_APP_WHITELIST = "carrier_app_whitelist";
+    field public static final String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus";
+    field public static final String DEVICE_DEMO_MODE = "device_demo_mode";
+    field public static final String DEVICE_PROVISIONING_MOBILE_DATA_ENABLED = "device_provisioning_mobile_data";
+    field public static final String EUICC_PROVISIONED = "euicc_provisioned";
+    field public static final String EUICC_SUPPORTED_COUNTRIES = "euicc_supported_countries";
+    field public static final String EUICC_UNSUPPORTED_COUNTRIES = "euicc_unsupported_countries";
+    field public static final String INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT = "install_carrier_app_notification_persistent";
+    field public static final String INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS = "install_carrier_app_notification_sleep_millis";
+    field public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update";
+    field public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
+    field public static final String TETHER_OFFLOAD_DISABLED = "tether_offload_disabled";
+    field public static final String TETHER_SUPPORTED = "tether_supported";
+    field public static final String THEATER_MODE_ON = "theater_mode_on";
+    field public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess";
+    field public static final String WIFI_BADGING_THRESHOLDS = "wifi_badging_thresholds";
+    field @Deprecated public static final String WIFI_WAKEUP_ENABLED = "wifi_wakeup_enabled";
+  }
+
+  public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, @Nullable String, boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static void resetToDefaults(@NonNull android.content.ContentResolver, @Nullable String);
+    field @Deprecated public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED = "accessibility_display_magnification_navbar_enabled";
+    field public static final String ASSIST_GESTURE_SETUP_COMPLETE = "assist_gesture_setup_complete";
+    field public static final String AUTOFILL_FEATURE_FIELD_CLASSIFICATION = "autofill_field_classification";
+    field public static final String AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT = "autofill_user_data_max_category_count";
+    field public static final String AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE = "autofill_user_data_max_field_classification_size";
+    field public static final String AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE = "autofill_user_data_max_user_data_size";
+    field public static final String AUTOFILL_USER_DATA_MAX_VALUE_LENGTH = "autofill_user_data_max_value_length";
+    field public static final String AUTOFILL_USER_DATA_MIN_VALUE_LENGTH = "autofill_user_data_min_value_length";
+    field public static final String AUTO_REVOKE_DISABLED = "auto_revoke_disabled";
+    field public static final String COMPLETED_CATEGORY_PREFIX = "suggested.completed_category.";
+    field public static final String DOZE_ALWAYS_ON = "doze_always_on";
+    field public static final String HUSH_GESTURE_USED = "hush_gesture_used";
+    field public static final String INSTANT_APPS_ENABLED = "instant_apps_enabled";
+    field public static final String LAST_SETUP_SHOWN = "last_setup_shown";
+    field public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS = "location_access_check_delay_millis";
+    field public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS = "location_access_check_interval_millis";
+    field public static final int LOCATION_MODE_ON = 3; // 0x3
+    field @Deprecated public static final String LOCATION_PERMISSIONS_UPGRADE_TO_Q_MODE = "location_permissions_upgrade_to_q_mode";
+    field public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = "lock_screen_allow_private_notifications";
+    field public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications";
+    field public static final String ODI_CAPTIONS_ENABLED = "odi_captions_enabled";
+    field public static final String THEME_CUSTOMIZATION_OVERLAY_PACKAGES = "theme_customization_overlay_packages";
+    field public static final String UI_TRANSLATION_ENABLED = "ui_translation_enabled";
+    field public static final String USER_SETUP_COMPLETE = "user_setup_complete";
+    field public static final int USER_SETUP_PERSONALIZATION_COMPLETE = 10; // 0xa
+    field public static final int USER_SETUP_PERSONALIZATION_NOT_STARTED = 0; // 0x0
+    field public static final int USER_SETUP_PERSONALIZATION_PAUSED = 2; // 0x2
+    field public static final int USER_SETUP_PERSONALIZATION_STARTED = 1; // 0x1
+    field public static final String USER_SETUP_PERSONALIZATION_STATE = "user_setup_personalization_state";
+    field public static final String VOLUME_HUSH_GESTURE = "volume_hush_gesture";
+    field public static final int VOLUME_HUSH_MUTE = 2; // 0x2
+    field public static final int VOLUME_HUSH_OFF = 0; // 0x0
+    field public static final int VOLUME_HUSH_VIBRATE = 1; // 0x1
+  }
+
+  public static final class Settings.System extends android.provider.Settings.NameValueTable {
+    method @RequiresPermission(android.Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, boolean);
+  }
+
+  public static final class SimPhonebookContract.SimRecords {
+    field public static final String QUERY_ARG_PIN2 = "android:query-arg-pin2";
+  }
+
+  public static final class Telephony.Carriers implements android.provider.BaseColumns {
+    field public static final String APN_SET_ID = "apn_set_id";
+    field public static final int CARRIER_EDITED = 4; // 0x4
+    field public static final String EDITED_STATUS = "edited";
+    field public static final int MATCH_ALL_APN_SET_ID = -1; // 0xffffffff
+    field public static final String MAX_CONNECTIONS = "max_conns";
+    field public static final String MODEM_PERSIST = "modem_cognitive";
+    field public static final String MTU = "mtu";
+    field public static final int NO_APN_SET_ID = 0; // 0x0
+    field public static final String TIME_LIMIT_FOR_MAX_CONNECTIONS = "max_conns_time";
+    field public static final int UNEDITED = 0; // 0x0
+    field public static final int USER_DELETED = 2; // 0x2
+    field public static final String USER_EDITABLE = "user_editable";
+    field public static final int USER_EDITED = 1; // 0x1
+    field public static final String USER_VISIBLE = "user_visible";
+    field public static final String WAIT_TIME_RETRY = "wait_time";
+  }
+
+  public static final class Telephony.CellBroadcasts implements android.provider.BaseColumns {
+    field @NonNull public static final String AUTHORITY_LEGACY = "cellbroadcast-legacy";
+    field @NonNull public static final android.net.Uri AUTHORITY_LEGACY_URI;
+    field @NonNull public static final String CALL_METHOD_GET_PREFERENCE = "get_preference";
+    field public static final String CID = "cid";
+    field public static final String CMAS_CATEGORY = "cmas_category";
+    field public static final String CMAS_CERTAINTY = "cmas_certainty";
+    field public static final String CMAS_MESSAGE_CLASS = "cmas_message_class";
+    field public static final String CMAS_RESPONSE_TYPE = "cmas_response_type";
+    field public static final String CMAS_SEVERITY = "cmas_severity";
+    field public static final String CMAS_URGENCY = "cmas_urgency";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_CODING_SCHEME = "dcs";
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final String DELIVERY_TIME = "date";
+    field public static final String ETWS_IS_PRIMARY = "etws_is_primary";
+    field public static final String ETWS_WARNING_TYPE = "etws_warning_type";
+    field public static final String GEOGRAPHICAL_SCOPE = "geo_scope";
+    field public static final String GEOMETRIES = "geometries";
+    field public static final String LAC = "lac";
+    field public static final String LANGUAGE_CODE = "language";
+    field public static final String LOCATION_CHECK_TIME = "location_check_time";
+    field public static final String MAXIMUM_WAIT_TIME = "maximum_wait_time";
+    field public static final String MESSAGE_BODY = "body";
+    field public static final String MESSAGE_BROADCASTED = "message_broadcasted";
+    field public static final String MESSAGE_DISPLAYED = "message_displayed";
+    field public static final String MESSAGE_FORMAT = "format";
+    field @NonNull @RequiresPermission(android.Manifest.permission.READ_CELL_BROADCASTS) public static final android.net.Uri MESSAGE_HISTORY_URI;
+    field public static final String MESSAGE_PRIORITY = "priority";
+    field public static final String MESSAGE_READ = "read";
+    field public static final String PLMN = "plmn";
+    field public static final String RECEIVED_TIME = "received_time";
+    field public static final String SERIAL_NUMBER = "serial_number";
+    field public static final String SERVICE_CATEGORY = "service_category";
+    field public static final String SLOT_INDEX = "slot_index";
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+  }
+
+  public static final class Telephony.CellBroadcasts.Preference {
+    field @NonNull public static final String ENABLE_ALERT_VIBRATION_PREF = "enable_alert_vibrate";
+    field @NonNull public static final String ENABLE_AREA_UPDATE_INFO_PREF = "enable_area_update_info_alerts";
+    field @NonNull public static final String ENABLE_CMAS_AMBER_PREF = "enable_cmas_amber_alerts";
+    field @NonNull public static final String ENABLE_CMAS_EXTREME_THREAT_PREF = "enable_cmas_extreme_threat_alerts";
+    field @NonNull public static final String ENABLE_CMAS_IN_SECOND_LANGUAGE_PREF = "receive_cmas_in_second_language";
+    field @NonNull public static final String ENABLE_CMAS_PRESIDENTIAL_PREF = "enable_cmas_presidential_alerts";
+    field @NonNull public static final String ENABLE_CMAS_SEVERE_THREAT_PREF = "enable_cmas_severe_threat_alerts";
+    field @NonNull public static final String ENABLE_EMERGENCY_PERF = "enable_emergency_alerts";
+    field @NonNull public static final String ENABLE_PUBLIC_SAFETY_PREF = "enable_public_safety_messages";
+    field @NonNull public static final String ENABLE_STATE_LOCAL_TEST_PREF = "enable_state_local_test_alerts";
+    field @NonNull public static final String ENABLE_TEST_ALERT_PREF = "enable_test_alerts";
+  }
+
+  public static final class Telephony.Sms.Intents {
+    field public static final String ACTION_SMS_EMERGENCY_CB_RECEIVED = "android.provider.action.SMS_EMERGENCY_CB_RECEIVED";
+  }
+
+  public final class TimeZoneRulesDataContract {
+    field public static final String AUTHORITY = "com.android.timezone";
+  }
+
+  public static final class TimeZoneRulesDataContract.Operation {
+    field public static final String COLUMN_DISTRO_MAJOR_VERSION = "distro_major_version";
+    field public static final String COLUMN_DISTRO_MINOR_VERSION = "distro_minor_version";
+    field public static final String COLUMN_REVISION = "revision";
+    field public static final String COLUMN_RULES_VERSION = "rules_version";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String TYPE_INSTALL = "INSTALL";
+    field public static final String TYPE_NO_OP = "NOOP";
+    field public static final String TYPE_UNINSTALL = "UNINSTALL";
+  }
+
+}
+
+package android.se.omapi {
+
+  public final class Reader {
+    method @RequiresPermission(android.Manifest.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION) public boolean reset();
+  }
+
+}
+
+package android.security {
+
+  public final class KeyChain {
+    method @Nullable @WorkerThread public static String getWifiKeyGrantAsUser(@NonNull android.content.Context, @NonNull android.os.UserHandle, @NonNull String);
+    method @WorkerThread public static boolean hasWifiKeyGrantAsUser(@NonNull android.content.Context, @NonNull android.os.UserHandle, @NonNull String);
+  }
+
+}
+
+package android.security.keystore {
+
+  public class AndroidKeyStoreProvider extends java.security.Provider {
+    method @NonNull public static java.security.KeyStore getKeyStoreForUid(int) throws java.security.KeyStoreException, java.security.NoSuchProviderException;
+  }
+
+  public abstract class AttestationUtils {
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static java.security.cert.X509Certificate[] attestDeviceIds(android.content.Context, @NonNull int[], @NonNull byte[]) throws android.security.keystore.DeviceIdAttestationException;
+    field public static final int ID_TYPE_IMEI = 2; // 0x2
+    field public static final int ID_TYPE_MEID = 3; // 0x3
+    field public static final int ID_TYPE_SERIAL = 1; // 0x1
+    field public static final int USE_INDIVIDUAL_ATTESTATION = 4; // 0x4
+  }
+
+  public class DeviceIdAttestationException extends java.lang.Exception {
+    ctor public DeviceIdAttestationException(@Nullable String);
+    ctor public DeviceIdAttestationException(@Nullable String, @Nullable Throwable);
+  }
+
+  public final class KeyGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    method @NonNull public int[] getAttestationIds();
+    method public int getNamespace();
+  }
+
+  public static final class KeyGenParameterSpec.Builder {
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setAttestationIds(@NonNull int[]);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setNamespace(int);
+    method @Deprecated @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUid(int);
+  }
+
+  public abstract class KeyProperties {
+    field public static final int NAMESPACE_APPLICATION = -1; // 0xffffffff
+    field public static final int NAMESPACE_WIFI = 102; // 0x66
+  }
+
+}
+
+package android.security.keystore.recovery {
+
+  public class DecryptionFailedException extends java.security.GeneralSecurityException {
+    ctor public DecryptionFailedException(String);
+  }
+
+  public class InternalRecoveryServiceException extends java.security.GeneralSecurityException {
+    ctor public InternalRecoveryServiceException(String);
+    ctor public InternalRecoveryServiceException(String, Throwable);
+  }
+
+  public final class KeyChainProtectionParams implements android.os.Parcelable {
+    method public void clearSecret();
+    method public int describeContents();
+    method @NonNull public android.security.keystore.recovery.KeyDerivationParams getKeyDerivationParams();
+    method public int getLockScreenUiFormat();
+    method @NonNull public byte[] getSecret();
+    method public int getUserSecretType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyChainProtectionParams> CREATOR;
+    field public static final int TYPE_LOCKSCREEN = 100; // 0x64
+    field public static final int UI_FORMAT_PASSWORD = 2; // 0x2
+    field public static final int UI_FORMAT_PATTERN = 3; // 0x3
+    field public static final int UI_FORMAT_PIN = 1; // 0x1
+  }
+
+  public static class KeyChainProtectionParams.Builder {
+    ctor public KeyChainProtectionParams.Builder();
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams build();
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setKeyDerivationParams(@NonNull android.security.keystore.recovery.KeyDerivationParams);
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setLockScreenUiFormat(int);
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setSecret(@NonNull byte[]);
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setUserSecretType(int);
+  }
+
+  public final class KeyChainSnapshot implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getCounterId();
+    method @NonNull public byte[] getEncryptedRecoveryKeyBlob();
+    method @NonNull public java.util.List<android.security.keystore.recovery.KeyChainProtectionParams> getKeyChainProtectionParams();
+    method public int getMaxAttempts();
+    method @NonNull public byte[] getServerParams();
+    method public int getSnapshotVersion();
+    method @NonNull public java.security.cert.CertPath getTrustedHardwareCertPath();
+    method @NonNull public java.util.List<android.security.keystore.recovery.WrappedApplicationKey> getWrappedApplicationKeys();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyChainSnapshot> CREATOR;
+  }
+
+  public final class KeyDerivationParams implements android.os.Parcelable {
+    method @NonNull public static android.security.keystore.recovery.KeyDerivationParams createScryptParams(@NonNull byte[], int);
+    method @NonNull public static android.security.keystore.recovery.KeyDerivationParams createSha256Params(@NonNull byte[]);
+    method public int describeContents();
+    method public int getAlgorithm();
+    method public int getMemoryDifficulty();
+    method @NonNull public byte[] getSalt();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALGORITHM_SCRYPT = 2; // 0x2
+    field public static final int ALGORITHM_SHA256 = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyDerivationParams> CREATOR;
+  }
+
+  public class LockScreenRequiredException extends java.security.GeneralSecurityException {
+    ctor public LockScreenRequiredException(String);
+  }
+
+  public class RecoveryController {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public android.security.keystore.recovery.RecoverySession createRecoverySession();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key generateKey(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key generateKey(@NonNull String, @Nullable byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.util.List<java.lang.String> getAliases() throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public static android.security.keystore.recovery.RecoveryController getInstance(@NonNull android.content.Context);
+    method @Nullable @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key getKey(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException, java.security.UnrecoverableKeyException;
+    method @Nullable @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public android.security.keystore.recovery.KeyChainSnapshot getKeyChainSnapshot() throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public int[] getRecoverySecretTypes() throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public int getRecoveryStatus(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.util.Map<java.lang.String,java.security.cert.X509Certificate> getRootCertificates();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key importKey(@NonNull String, @NonNull byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key importKey(@NonNull String, @NonNull byte[], @Nullable byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void initRecoveryService(@NonNull String, @NonNull byte[], @NonNull byte[]) throws java.security.cert.CertificateException, android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public static boolean isRecoverableKeyStoreEnabled(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void removeKey(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setRecoverySecretTypes(@NonNull int[]) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setRecoveryStatus(@NonNull String, int) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setServerParams(@NonNull byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setSnapshotCreatedPendingIntent(@Nullable android.app.PendingIntent) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    field public static final int RECOVERY_STATUS_PERMANENT_FAILURE = 3; // 0x3
+    field public static final int RECOVERY_STATUS_SYNCED = 0; // 0x0
+    field public static final int RECOVERY_STATUS_SYNC_IN_PROGRESS = 1; // 0x1
+  }
+
+  public class RecoverySession implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void close();
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.util.Map<java.lang.String,java.security.Key> recoverKeyChainSnapshot(@NonNull byte[], @NonNull java.util.List<android.security.keystore.recovery.WrappedApplicationKey>) throws android.security.keystore.recovery.DecryptionFailedException, android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.SessionExpiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public byte[] start(@NonNull String, @NonNull java.security.cert.CertPath, @NonNull byte[], @NonNull byte[], @NonNull java.util.List<android.security.keystore.recovery.KeyChainProtectionParams>) throws java.security.cert.CertificateException, android.security.keystore.recovery.InternalRecoveryServiceException;
+  }
+
+  public class SessionExpiredException extends java.security.GeneralSecurityException {
+    ctor public SessionExpiredException(String);
+  }
+
+  public final class WrappedApplicationKey implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getAlias();
+    method @NonNull public byte[] getEncryptedKeyMaterial();
+    method @Nullable public byte[] getMetadata();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.WrappedApplicationKey> CREATOR;
+  }
+
+  public static class WrappedApplicationKey.Builder {
+    ctor public WrappedApplicationKey.Builder();
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey build();
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey.Builder setAlias(@NonNull String);
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey.Builder setEncryptedKeyMaterial(@NonNull byte[]);
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey.Builder setMetadata(@Nullable byte[]);
+  }
+
+}
+
+package android.service.appprediction {
+
+  public abstract class AppPredictionService extends android.app.Service {
+    ctor public AppPredictionService();
+    method @MainThread public abstract void onAppTargetEvent(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull android.app.prediction.AppTargetEvent);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onCreatePredictionSession(@NonNull android.app.prediction.AppPredictionContext, @NonNull android.app.prediction.AppPredictionSessionId);
+    method @MainThread public void onDestroyPredictionSession(@NonNull android.app.prediction.AppPredictionSessionId);
+    method @MainThread public abstract void onLaunchLocationShown(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull String, @NonNull java.util.List<android.app.prediction.AppTargetId>);
+    method @MainThread public abstract void onRequestPredictionUpdate(@NonNull android.app.prediction.AppPredictionSessionId);
+    method @MainThread public abstract void onSortAppTargets(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull java.util.List<android.app.prediction.AppTarget>, @NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<java.util.List<android.app.prediction.AppTarget>>);
+    method @MainThread public void onStartPredictionUpdates();
+    method @MainThread public void onStopPredictionUpdates();
+    method public final void updatePredictions(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull java.util.List<android.app.prediction.AppTarget>);
+  }
+
+}
+
+package android.service.attention {
+
+  public abstract class AttentionService extends android.app.Service {
+    ctor public AttentionService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCancelAttentionCheck(@NonNull android.service.attention.AttentionService.AttentionCallback);
+    method public abstract void onCheckAttention(@NonNull android.service.attention.AttentionService.AttentionCallback);
+    field public static final int ATTENTION_FAILURE_CAMERA_PERMISSION_ABSENT = 6; // 0x6
+    field public static final int ATTENTION_FAILURE_CANCELLED = 3; // 0x3
+    field public static final int ATTENTION_FAILURE_PREEMPTED = 4; // 0x4
+    field public static final int ATTENTION_FAILURE_TIMED_OUT = 5; // 0x5
+    field public static final int ATTENTION_FAILURE_UNKNOWN = 2; // 0x2
+    field public static final int ATTENTION_SUCCESS_ABSENT = 0; // 0x0
+    field public static final int ATTENTION_SUCCESS_PRESENT = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.attention.AttentionService";
+  }
+
+  public static final class AttentionService.AttentionCallback {
+    method public void onFailure(int);
+    method public void onSuccess(int, long);
+  }
+
+}
+
+package android.service.autofill {
+
+  public abstract class AutofillFieldClassificationService extends android.app.Service {
+    ctor public AutofillFieldClassificationService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public float[][] onCalculateScores(@NonNull java.util.List<android.view.autofill.AutofillValue>, @NonNull java.util.List<java.lang.String>, @NonNull java.util.List<java.lang.String>, @Nullable String, @Nullable android.os.Bundle, @Nullable java.util.Map, @Nullable java.util.Map);
+    method @Deprecated @Nullable public float[][] onGetScores(@Nullable String, @Nullable android.os.Bundle, @NonNull java.util.List<android.view.autofill.AutofillValue>, @NonNull java.util.List<java.lang.String>);
+    field public static final String REQUIRED_ALGORITHM_CREDIT_CARD = "CREDIT_CARD";
+    field public static final String REQUIRED_ALGORITHM_EDIT_DISTANCE = "EDIT_DISTANCE";
+    field public static final String REQUIRED_ALGORITHM_EXACT_MATCH = "EXACT_MATCH";
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.AutofillFieldClassificationService";
+    field public static final String SERVICE_META_DATA_KEY_AVAILABLE_ALGORITHMS = "android.autofill.field_classification.available_algorithms";
+    field public static final String SERVICE_META_DATA_KEY_DEFAULT_ALGORITHM = "android.autofill.field_classification.default_algorithm";
+  }
+
+  public static final class Dataset.Builder {
+    ctor public Dataset.Builder(@NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setContent(@NonNull android.view.autofill.AutofillId, @Nullable android.content.ClipData);
+    method @NonNull public android.service.autofill.Dataset.Builder setFieldInlinePresentation(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.service.autofill.InlinePresentation);
+  }
+
+  public abstract class InlineSuggestionRenderService extends android.app.Service {
+    ctor public InlineSuggestionRenderService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @NonNull public android.os.Bundle onGetInlineSuggestionsRendererInfo();
+    method @Nullable public android.view.View onRenderSuggestion(@NonNull android.service.autofill.InlinePresentation, int, int);
+    method public final void startIntentSender(@NonNull android.content.IntentSender);
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService";
+  }
+
+}
+
+package android.service.autofill.augmented {
+
+  public abstract class AugmentedAutofillService extends android.app.Service {
+    ctor public AugmentedAutofillService();
+    method protected final void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method protected void dump(@NonNull java.io.PrintWriter, @NonNull String[]);
+    method @Nullable public final android.service.autofill.FillEventHistory getFillEventHistory();
+    method public void onConnected();
+    method public void onDisconnected();
+    method public void onFillRequest(@NonNull android.service.autofill.augmented.FillRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.augmented.FillController, @NonNull android.service.autofill.augmented.FillCallback);
+    method public final boolean requestAutofill(@NonNull android.content.ComponentName, @NonNull android.view.autofill.AutofillId);
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.augmented.AugmentedAutofillService";
+  }
+
+  public final class FillCallback {
+    method public void onSuccess(@Nullable android.service.autofill.augmented.FillResponse);
+  }
+
+  public final class FillController {
+    method public void autofill(@NonNull java.util.List<android.util.Pair<android.view.autofill.AutofillId,android.view.autofill.AutofillValue>>);
+  }
+
+  public final class FillRequest {
+    method @NonNull public android.content.ComponentName getActivityComponent();
+    method @NonNull public android.view.autofill.AutofillId getFocusedId();
+    method @NonNull public android.view.autofill.AutofillValue getFocusedValue();
+    method @Nullable public android.app.assist.AssistStructure.ViewNode getFocusedViewNode();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest getInlineSuggestionsRequest();
+    method @Nullable public android.service.autofill.augmented.PresentationParams getPresentationParams();
+    method public int getTaskId();
+  }
+
+  public final class FillResponse {
+  }
+
+  public static final class FillResponse.Builder {
+    ctor public FillResponse.Builder();
+    method @NonNull public android.service.autofill.augmented.FillResponse build();
+    method @NonNull public android.service.autofill.augmented.FillResponse.Builder setClientState(@NonNull android.os.Bundle);
+    method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
+    method @NonNull public android.service.autofill.augmented.FillResponse.Builder setInlineSuggestions(@NonNull java.util.List<android.service.autofill.Dataset>);
+  }
+
+  public final class FillWindow implements java.lang.AutoCloseable {
+    ctor public FillWindow();
+    method public void destroy();
+    method public boolean update(@NonNull android.service.autofill.augmented.PresentationParams.Area, @NonNull android.view.View, long);
+  }
+
+  public abstract class PresentationParams {
+    method @Nullable public android.service.autofill.augmented.PresentationParams.Area getSuggestionArea();
+  }
+
+  public abstract static class PresentationParams.Area {
+    method @NonNull public android.graphics.Rect getBounds();
+  }
+
+}
+
+package android.service.carrier {
+
+  public abstract class ApnService extends android.app.Service {
+    ctor public ApnService();
+    method @NonNull public android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @NonNull @WorkerThread public abstract java.util.List<android.content.ContentValues> onRestoreApns(int);
+  }
+
+  public final class CarrierMessagingServiceWrapper implements java.lang.AutoCloseable {
+    ctor public CarrierMessagingServiceWrapper();
+    method public boolean bindToCarrierMessagingService(@NonNull android.content.Context, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method public void disconnect();
+    method public void downloadMms(@NonNull android.net.Uri, int, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void receiveSms(@NonNull android.service.carrier.MessagePdu, @NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendDataSms(@NonNull byte[], int, @NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendMms(@NonNull android.net.Uri, int, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendMultipartTextSms(@NonNull java.util.List<java.lang.String>, int, @NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendTextSms(@NonNull String, int, @NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+  }
+
+  public static interface CarrierMessagingServiceWrapper.CarrierMessagingCallback {
+    method public default void onDownloadMmsComplete(int);
+    method public default void onReceiveSmsComplete(int);
+    method public default void onSendMmsComplete(int, @Nullable byte[]);
+    method public default void onSendMultipartSmsComplete(int, @Nullable int[]);
+    method public default void onSendSmsComplete(int, int);
+  }
+
+}
+
+package android.service.contentcapture {
+
+  public final class ActivityEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.ComponentName getComponentName();
+    method public int getEventType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.ActivityEvent> CREATOR;
+    field public static final int TYPE_ACTIVITY_DESTROYED = 24; // 0x18
+    field public static final int TYPE_ACTIVITY_PAUSED = 2; // 0x2
+    field public static final int TYPE_ACTIVITY_RESUMED = 1; // 0x1
+    field public static final int TYPE_ACTIVITY_STOPPED = 23; // 0x17
+  }
+
+  public abstract class ContentCaptureService extends android.app.Service {
+    ctor public ContentCaptureService();
+    method public final void disableSelf();
+    method public void onActivityEvent(@NonNull android.service.contentcapture.ActivityEvent);
+    method public void onActivitySnapshot(@NonNull android.view.contentcapture.ContentCaptureSessionId, @NonNull android.service.contentcapture.SnapshotData);
+    method public void onConnected();
+    method public void onContentCaptureEvent(@NonNull android.view.contentcapture.ContentCaptureSessionId, @NonNull android.view.contentcapture.ContentCaptureEvent);
+    method public void onCreateContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext, @NonNull android.view.contentcapture.ContentCaptureSessionId);
+    method public void onDataRemovalRequest(@NonNull android.view.contentcapture.DataRemovalRequest);
+    method public void onDataShareRequest(@NonNull android.view.contentcapture.DataShareRequest, @NonNull android.service.contentcapture.DataShareCallback);
+    method public void onDestroyContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureSessionId);
+    method public void onDisconnected();
+    method public final void setContentCaptureConditions(@NonNull String, @Nullable java.util.Set<android.view.contentcapture.ContentCaptureCondition>);
+    method public final void setContentCaptureWhitelist(@Nullable java.util.Set<java.lang.String>, @Nullable java.util.Set<android.content.ComponentName>);
+    field public static final String SERVICE_INTERFACE = "android.service.contentcapture.ContentCaptureService";
+    field public static final String SERVICE_META_DATA = "android.content_capture";
+  }
+
+  public interface DataShareCallback {
+    method public void onAccept(@NonNull java.util.concurrent.Executor, @NonNull android.service.contentcapture.DataShareReadAdapter);
+    method public void onReject();
+  }
+
+  public interface DataShareReadAdapter {
+    method public void onError(int);
+    method public void onStart(@NonNull android.os.ParcelFileDescriptor);
+  }
+
+  public final class SnapshotData implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.assist.AssistContent getAssistContent();
+    method @NonNull public android.os.Bundle getAssistData();
+    method @NonNull public android.app.assist.AssistStructure getAssistStructure();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
+  }
+
+}
+
+package android.service.contentsuggestions {
+
+  public abstract class ContentSuggestionsService extends android.app.Service {
+    ctor public ContentSuggestionsService();
+    method public abstract void onClassifyContentSelections(@NonNull android.app.contentsuggestions.ClassificationsRequest, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.ClassificationsCallback);
+    method public abstract void onNotifyInteraction(@NonNull String, @NonNull android.os.Bundle);
+    method public abstract void onProcessContextImage(int, @Nullable android.graphics.Bitmap, @NonNull android.os.Bundle);
+    method public abstract void onSuggestContentSelections(@NonNull android.app.contentsuggestions.SelectionsRequest, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.SelectionsCallback);
+    field public static final String SERVICE_INTERFACE = "android.service.contentsuggestions.ContentSuggestionsService";
+  }
+
+}
+
+package android.service.dataloader {
+
+  public abstract class DataLoaderService extends android.app.Service {
+    ctor public DataLoaderService();
+    method @Nullable public android.service.dataloader.DataLoaderService.DataLoader onCreateDataLoader(@NonNull android.content.pm.DataLoaderParams);
+  }
+
+  public static interface DataLoaderService.DataLoader {
+    method public boolean onCreate(@NonNull android.content.pm.DataLoaderParams, @NonNull android.service.dataloader.DataLoaderService.FileSystemConnector);
+    method public boolean onPrepareImage(@NonNull java.util.Collection<android.content.pm.InstallationFile>, @NonNull java.util.Collection<java.lang.String>);
+  }
+
+  public static final class DataLoaderService.FileSystemConnector {
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void writeData(@NonNull String, long, long, @NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+  }
+
+}
+
+package android.service.displayhash {
+
+  public final class DisplayHashParams implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.util.Size getBufferSize();
+    method public boolean isGrayscaleBuffer();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.displayhash.DisplayHashParams> CREATOR;
+  }
+
+  public static final class DisplayHashParams.Builder {
+    ctor public DisplayHashParams.Builder();
+    method @NonNull public android.service.displayhash.DisplayHashParams build();
+    method @NonNull public android.service.displayhash.DisplayHashParams.Builder setBufferSize(int, int);
+    method @NonNull public android.service.displayhash.DisplayHashParams.Builder setGrayscaleBuffer(boolean);
+  }
+
+  public abstract class DisplayHashingService extends android.app.Service {
+    ctor public DisplayHashingService();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onGenerateDisplayHash(@NonNull byte[], @NonNull android.hardware.HardwareBuffer, @NonNull android.graphics.Rect, @NonNull String, @NonNull android.view.displayhash.DisplayHashResultCallback);
+    method @NonNull public abstract java.util.Map<java.lang.String,android.service.displayhash.DisplayHashParams> onGetDisplayHashAlgorithms();
+    method public abstract int onGetIntervalBetweenRequestsMillis();
+    method @Nullable public abstract android.view.displayhash.VerifiedDisplayHash onVerifyDisplayHash(@NonNull byte[], @NonNull android.view.displayhash.DisplayHash);
+    field public static final String SERVICE_INTERFACE = "android.service.displayhash.DisplayHashingService";
+  }
+
+}
+
+package android.service.euicc {
+
+  public final class DownloadSubscriptionResult implements android.os.Parcelable {
+    ctor public DownloadSubscriptionResult(int, int, int);
+    method public int describeContents();
+    method public int getCardId();
+    method public int getResolvableErrors();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.DownloadSubscriptionResult> CREATOR;
+  }
+
+  public final class EuiccProfileInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.service.carrier.CarrierIdentifier getCarrierIdentifier();
+    method public String getIccid();
+    method @Nullable public String getNickname();
+    method @android.service.euicc.EuiccProfileInfo.PolicyRule public int getPolicyRules();
+    method @android.service.euicc.EuiccProfileInfo.ProfileClass public int getProfileClass();
+    method public String getProfileName();
+    method public String getServiceProviderName();
+    method @android.service.euicc.EuiccProfileInfo.ProfileState public int getState();
+    method @Nullable public java.util.List<android.telephony.UiccAccessRule> getUiccAccessRules();
+    method public boolean hasPolicyRule(@android.service.euicc.EuiccProfileInfo.PolicyRule int);
+    method public boolean hasPolicyRules();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.EuiccProfileInfo> CREATOR;
+    field public static final int POLICY_RULE_DELETE_AFTER_DISABLING = 4; // 0x4
+    field public static final int POLICY_RULE_DO_NOT_DELETE = 2; // 0x2
+    field public static final int POLICY_RULE_DO_NOT_DISABLE = 1; // 0x1
+    field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2
+    field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1
+    field public static final int PROFILE_CLASS_TESTING = 0; // 0x0
+    field public static final int PROFILE_STATE_DISABLED = 0; // 0x0
+    field public static final int PROFILE_STATE_ENABLED = 1; // 0x1
+  }
+
+  public static final class EuiccProfileInfo.Builder {
+    ctor public EuiccProfileInfo.Builder(String);
+    ctor public EuiccProfileInfo.Builder(android.service.euicc.EuiccProfileInfo);
+    method public android.service.euicc.EuiccProfileInfo build();
+    method public android.service.euicc.EuiccProfileInfo.Builder setCarrierIdentifier(android.service.carrier.CarrierIdentifier);
+    method public android.service.euicc.EuiccProfileInfo.Builder setIccid(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setNickname(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setPolicyRules(@android.service.euicc.EuiccProfileInfo.PolicyRule int);
+    method public android.service.euicc.EuiccProfileInfo.Builder setProfileClass(@android.service.euicc.EuiccProfileInfo.ProfileClass int);
+    method public android.service.euicc.EuiccProfileInfo.Builder setProfileName(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setServiceProviderName(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setState(@android.service.euicc.EuiccProfileInfo.ProfileState int);
+    method public android.service.euicc.EuiccProfileInfo.Builder setUiccAccessRule(@Nullable java.util.List<android.telephony.UiccAccessRule>);
+  }
+
+  @IntDef(flag=true, prefix={"POLICY_RULE_"}, value={android.service.euicc.EuiccProfileInfo.POLICY_RULE_DO_NOT_DISABLE, android.service.euicc.EuiccProfileInfo.POLICY_RULE_DO_NOT_DELETE, android.service.euicc.EuiccProfileInfo.POLICY_RULE_DELETE_AFTER_DISABLING}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccProfileInfo.PolicyRule {
+  }
+
+  @IntDef(prefix={"PROFILE_CLASS_"}, value={android.service.euicc.EuiccProfileInfo.PROFILE_CLASS_TESTING, android.service.euicc.EuiccProfileInfo.PROFILE_CLASS_PROVISIONING, android.service.euicc.EuiccProfileInfo.PROFILE_CLASS_OPERATIONAL, 0xffffffff}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccProfileInfo.ProfileClass {
+  }
+
+  @IntDef(prefix={"PROFILE_STATE_"}, value={android.service.euicc.EuiccProfileInfo.PROFILE_STATE_DISABLED, android.service.euicc.EuiccProfileInfo.PROFILE_STATE_ENABLED, 0xffffffff}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccProfileInfo.ProfileState {
+  }
+
+  public abstract class EuiccService extends android.app.Service {
+    ctor public EuiccService();
+    method public void dump(@NonNull java.io.PrintWriter);
+    method public int encodeSmdxSubjectAndReasonCode(@Nullable String, @Nullable String);
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method public abstract int onDeleteSubscription(int, String);
+    method public android.service.euicc.DownloadSubscriptionResult onDownloadSubscription(int, @NonNull android.telephony.euicc.DownloadableSubscription, boolean, boolean, @Nullable android.os.Bundle);
+    method @Deprecated public int onDownloadSubscription(int, @NonNull android.telephony.euicc.DownloadableSubscription, boolean, boolean);
+    method @Deprecated public abstract int onEraseSubscriptions(int);
+    method public int onEraseSubscriptions(int, @android.telephony.euicc.EuiccCardManager.ResetOption int);
+    method public abstract android.service.euicc.GetDefaultDownloadableSubscriptionListResult onGetDefaultDownloadableSubscriptionList(int, boolean);
+    method public abstract android.service.euicc.GetDownloadableSubscriptionMetadataResult onGetDownloadableSubscriptionMetadata(int, android.telephony.euicc.DownloadableSubscription, boolean);
+    method public abstract String onGetEid(int);
+    method @NonNull public abstract android.telephony.euicc.EuiccInfo onGetEuiccInfo(int);
+    method @NonNull public abstract android.service.euicc.GetEuiccProfileInfoListResult onGetEuiccProfileInfoList(int);
+    method @android.telephony.euicc.EuiccManager.OtaStatus public abstract int onGetOtaStatus(int);
+    method public abstract int onRetainSubscriptionsForFactoryReset(int);
+    method public abstract void onStartOtaIfNecessary(int, android.service.euicc.EuiccService.OtaStatusChangedCallback);
+    method public abstract int onSwitchToSubscription(int, @Nullable String, boolean);
+    method public abstract int onUpdateSubscriptionNickname(int, String, String);
+    field public static final String ACTION_BIND_CARRIER_PROVISIONING_SERVICE = "android.service.euicc.action.BIND_CARRIER_PROVISIONING_SERVICE";
+    field public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED";
+    field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";
+    field public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION";
+    field public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED";
+    field @Deprecated public static final String ACTION_RESOLVE_CONFIRMATION_CODE = "android.service.euicc.action.RESOLVE_CONFIRMATION_CODE";
+    field public static final String ACTION_RESOLVE_DEACTIVATE_SIM = "android.service.euicc.action.RESOLVE_DEACTIVATE_SIM";
+    field public static final String ACTION_RESOLVE_NO_PRIVILEGES = "android.service.euicc.action.RESOLVE_NO_PRIVILEGES";
+    field public static final String ACTION_RESOLVE_RESOLVABLE_ERRORS = "android.service.euicc.action.RESOLVE_RESOLVABLE_ERRORS";
+    field public static final String ACTION_START_CARRIER_ACTIVATION = "android.service.euicc.action.START_CARRIER_ACTIVATION";
+    field public static final String ACTION_START_EUICC_ACTIVATION = "android.service.euicc.action.START_EUICC_ACTIVATION";
+    field public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED";
+    field public static final String CATEGORY_EUICC_UI = "android.service.euicc.category.EUICC_UI";
+    field public static final String EUICC_SERVICE_INTERFACE = "android.service.euicc.EuiccService";
+    field public static final String EXTRA_RESOLUTION_ALLOW_POLICY_RULES = "android.service.euicc.extra.RESOLUTION_ALLOW_POLICY_RULES";
+    field public static final String EXTRA_RESOLUTION_CALLING_PACKAGE = "android.service.euicc.extra.RESOLUTION_CALLING_PACKAGE";
+    field public static final String EXTRA_RESOLUTION_CARD_ID = "android.service.euicc.extra.RESOLUTION_CARD_ID";
+    field public static final String EXTRA_RESOLUTION_CONFIRMATION_CODE = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE";
+    field public static final String EXTRA_RESOLUTION_CONFIRMATION_CODE_RETRIED = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE_RETRIED";
+    field public static final String EXTRA_RESOLUTION_CONSENT = "android.service.euicc.extra.RESOLUTION_CONSENT";
+    field public static final String EXTRA_RESOLVABLE_ERRORS = "android.service.euicc.extra.RESOLVABLE_ERRORS";
+    field public static final int RESOLVABLE_ERROR_CONFIRMATION_CODE = 1; // 0x1
+    field public static final int RESOLVABLE_ERROR_POLICY_RULES = 2; // 0x2
+    field public static final int RESULT_FIRST_USER = 1; // 0x1
+    field public static final int RESULT_MUST_DEACTIVATE_SIM = -1; // 0xffffffff
+    field @Deprecated public static final int RESULT_NEED_CONFIRMATION_CODE = -2; // 0xfffffffe
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_RESOLVABLE_ERRORS = -2; // 0xfffffffe
+  }
+
+  public abstract static class EuiccService.OtaStatusChangedCallback {
+    ctor public EuiccService.OtaStatusChangedCallback();
+    method public abstract void onOtaStatusChanged(int);
+  }
+
+  public final class GetDefaultDownloadableSubscriptionListResult implements android.os.Parcelable {
+    ctor public GetDefaultDownloadableSubscriptionListResult(int, @Nullable android.telephony.euicc.DownloadableSubscription[]);
+    method public int describeContents();
+    method @Nullable public java.util.List<android.telephony.euicc.DownloadableSubscription> getDownloadableSubscriptions();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetDefaultDownloadableSubscriptionListResult> CREATOR;
+  }
+
+  public final class GetDownloadableSubscriptionMetadataResult implements android.os.Parcelable {
+    ctor public GetDownloadableSubscriptionMetadataResult(int, @Nullable android.telephony.euicc.DownloadableSubscription);
+    method public int describeContents();
+    method @Nullable public android.telephony.euicc.DownloadableSubscription getDownloadableSubscription();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetDownloadableSubscriptionMetadataResult> CREATOR;
+  }
+
+  public final class GetEuiccProfileInfoListResult implements android.os.Parcelable {
+    ctor public GetEuiccProfileInfoListResult(int, @Nullable android.service.euicc.EuiccProfileInfo[], boolean);
+    method public int describeContents();
+    method public boolean getIsRemovable();
+    method @Nullable public java.util.List<android.service.euicc.EuiccProfileInfo> getProfiles();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetEuiccProfileInfoListResult> CREATOR;
+  }
+
+}
+
+package android.service.notification {
+
+  public final class Adjustment implements android.os.Parcelable {
+    ctor public Adjustment(String, String, android.os.Bundle, CharSequence, int);
+    ctor public Adjustment(@NonNull String, @NonNull String, @NonNull android.os.Bundle, @NonNull CharSequence, @NonNull android.os.UserHandle);
+    ctor protected Adjustment(android.os.Parcel);
+    method public int describeContents();
+    method @NonNull public CharSequence getExplanation();
+    method @NonNull public String getKey();
+    method @NonNull public String getPackage();
+    method @NonNull public android.os.Bundle getSignals();
+    method public int getUser();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.Adjustment> CREATOR;
+    field public static final String KEY_CONTEXTUAL_ACTIONS = "key_contextual_actions";
+    field public static final String KEY_IMPORTANCE = "key_importance";
+    field public static final String KEY_NOT_CONVERSATION = "key_not_conversation";
+    field public static final String KEY_PEOPLE = "key_people";
+    field public static final String KEY_RANKING_SCORE = "key_ranking_score";
+    field public static final String KEY_SNOOZE_CRITERIA = "key_snooze_criteria";
+    field public static final String KEY_TEXT_REPLIES = "key_text_replies";
+    field public static final String KEY_USER_SENTIMENT = "key_user_sentiment";
+  }
+
+  public abstract class NotificationAssistantService extends android.service.notification.NotificationListenerService {
+    ctor public NotificationAssistantService();
+    method public final void adjustNotification(@NonNull android.service.notification.Adjustment);
+    method public final void adjustNotifications(@NonNull java.util.List<android.service.notification.Adjustment>);
+    method public void onActionInvoked(@NonNull String, @NonNull android.app.Notification.Action, int);
+    method public void onAllowedAdjustmentsChanged();
+    method @NonNull public final android.os.IBinder onBind(@Nullable android.content.Intent);
+    method public void onNotificationClicked(@NonNull String);
+    method public void onNotificationDirectReplied(@NonNull String);
+    method @Nullable public abstract android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification);
+    method @Nullable public android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification, @NonNull android.app.NotificationChannel);
+    method @Nullable public android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification, @NonNull android.app.NotificationChannel, @NonNull android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationExpansionChanged(@NonNull String, boolean, boolean);
+    method public void onNotificationFeedbackReceived(@NonNull String, @NonNull android.service.notification.NotificationListenerService.RankingMap, @NonNull android.os.Bundle);
+    method public abstract void onNotificationSnoozedUntilContext(@NonNull android.service.notification.StatusBarNotification, @NonNull String);
+    method public void onNotificationVisibilityChanged(@NonNull String, boolean);
+    method public void onNotificationsSeen(@NonNull java.util.List<java.lang.String>);
+    method public void onPanelHidden();
+    method public void onPanelRevealed(int);
+    method public void onSuggestedReplySent(@NonNull String, @NonNull CharSequence, int);
+    method public final void unsnoozeNotification(@NonNull String);
+    field public static final String FEEDBACK_RATING = "feedback.rating";
+    field public static final String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService";
+    field public static final int SOURCE_FROM_APP = 0; // 0x0
+    field public static final int SOURCE_FROM_ASSISTANT = 1; // 0x1
+  }
+
+  public abstract class NotificationListenerService extends android.app.Service {
+    method public void onNotificationRemoved(@NonNull android.service.notification.StatusBarNotification, @NonNull android.service.notification.NotificationListenerService.RankingMap, @NonNull android.service.notification.NotificationStats, int);
+  }
+
+  public final class NotificationStats implements android.os.Parcelable {
+    ctor public NotificationStats();
+    ctor protected NotificationStats(android.os.Parcel);
+    method public int describeContents();
+    method public int getDismissalSentiment();
+    method public int getDismissalSurface();
+    method public boolean hasDirectReplied();
+    method public boolean hasExpanded();
+    method public boolean hasInteracted();
+    method public boolean hasSeen();
+    method public boolean hasSnoozed();
+    method public boolean hasViewedSettings();
+    method public void setDirectReplied();
+    method public void setDismissalSentiment(int);
+    method public void setDismissalSurface(int);
+    method public void setExpanded();
+    method public void setSeen();
+    method public void setSnoozed();
+    method public void setViewedSettings();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.NotificationStats> CREATOR;
+    field public static final int DISMISSAL_AOD = 2; // 0x2
+    field public static final int DISMISSAL_NOT_DISMISSED = -1; // 0xffffffff
+    field public static final int DISMISSAL_OTHER = 0; // 0x0
+    field public static final int DISMISSAL_PEEK = 1; // 0x1
+    field public static final int DISMISSAL_SHADE = 3; // 0x3
+    field public static final int DISMISS_SENTIMENT_NEGATIVE = 0; // 0x0
+    field public static final int DISMISS_SENTIMENT_NEUTRAL = 1; // 0x1
+    field public static final int DISMISS_SENTIMENT_POSITIVE = 2; // 0x2
+    field public static final int DISMISS_SENTIMENT_UNKNOWN = -1000; // 0xfffffc18
+  }
+
+  public final class SnoozeCriterion implements android.os.Parcelable {
+    ctor public SnoozeCriterion(String, CharSequence, CharSequence);
+    ctor protected SnoozeCriterion(android.os.Parcel);
+    method public int describeContents();
+    method public CharSequence getConfirmation();
+    method public CharSequence getExplanation();
+    method public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.SnoozeCriterion> CREATOR;
+  }
+
+}
+
+package android.service.oemlock {
+
+  public class OemLockManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE) public String getLockName();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE) public boolean isOemUnlockAllowedByCarrier();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USER_OEM_UNLOCK_STATE) public boolean isOemUnlockAllowedByUser();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE) public void setOemUnlockAllowedByCarrier(boolean, @Nullable byte[]);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USER_OEM_UNLOCK_STATE) public void setOemUnlockAllowedByUser(boolean);
+  }
+
+}
+
+package android.service.persistentdata {
+
+  public class PersistentDataBlockManager {
+    method @RequiresPermission("android.permission.ACCESS_PDB_STATE") public int getDataBlockSize();
+    method @android.service.persistentdata.PersistentDataBlockManager.FlashLockState @RequiresPermission(anyOf={android.Manifest.permission.READ_OEM_UNLOCK_STATE, "android.permission.OEM_UNLOCK_STATE"}) public int getFlashLockState();
+    method public long getMaximumDataBlockSize();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_OEM_UNLOCK_STATE, "android.permission.OEM_UNLOCK_STATE"}) public boolean getOemUnlockEnabled();
+    method public byte[] read();
+    method @Deprecated @RequiresPermission("android.permission.OEM_UNLOCK_STATE") public void setOemUnlockEnabled(boolean);
+    method @RequiresPermission("android.permission.OEM_UNLOCK_STATE") public void wipe();
+    method public int write(byte[]);
+    field public static final int FLASH_LOCK_LOCKED = 1; // 0x1
+    field public static final int FLASH_LOCK_UNKNOWN = -1; // 0xffffffff
+    field public static final int FLASH_LOCK_UNLOCKED = 0; // 0x0
+  }
+
+  @IntDef(prefix={"FLASH_LOCK_"}, value={android.service.persistentdata.PersistentDataBlockManager.FLASH_LOCK_UNKNOWN, android.service.persistentdata.PersistentDataBlockManager.FLASH_LOCK_LOCKED, android.service.persistentdata.PersistentDataBlockManager.FLASH_LOCK_UNLOCKED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PersistentDataBlockManager.FlashLockState {
+  }
+
+}
+
+package android.service.quicksettings {
+
+  public class TileService extends android.app.Service {
+    method public final void setStatusIcon(android.graphics.drawable.Icon, String);
+  }
+
+}
+
+package android.service.resolver {
+
+  public abstract class ResolverRankerService extends android.app.Service {
+    ctor public ResolverRankerService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onPredictSharingProbabilities(java.util.List<android.service.resolver.ResolverTarget>);
+    method public void onTrainRankingModel(java.util.List<android.service.resolver.ResolverTarget>, int);
+    field public static final String BIND_PERMISSION = "android.permission.BIND_RESOLVER_RANKER_SERVICE";
+    field public static final String HOLD_PERMISSION = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE";
+    field public static final String SERVICE_INTERFACE = "android.service.resolver.ResolverRankerService";
+  }
+
+  public final class ResolverTarget implements android.os.Parcelable {
+    ctor public ResolverTarget();
+    method public int describeContents();
+    method public float getChooserScore();
+    method public float getLaunchScore();
+    method public float getRecencyScore();
+    method public float getSelectProbability();
+    method public float getTimeSpentScore();
+    method public void setChooserScore(float);
+    method public void setLaunchScore(float);
+    method public void setRecencyScore(float);
+    method public void setSelectProbability(float);
+    method public void setTimeSpentScore(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.resolver.ResolverTarget> CREATOR;
+  }
+
+}
+
+package android.service.resumeonreboot {
+
+  public abstract class ResumeOnRebootService extends android.app.Service {
+    ctor public ResumeOnRebootService();
+    method @Nullable public android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @NonNull public abstract byte[] onUnwrap(@NonNull byte[]) throws java.io.IOException;
+    method @NonNull public abstract byte[] onWrap(@NonNull byte[], long) throws java.io.IOException;
+    field public static final String SERVICE_INTERFACE = "android.service.resumeonreboot.ResumeOnRebootService";
+  }
+
+}
+
+package android.service.rotationresolver {
+
+  public final class RotationResolutionRequest implements android.os.Parcelable {
+    ctor public RotationResolutionRequest(@NonNull String, int, int, boolean, long);
+    method public int describeContents();
+    method public int getCurrentRotation();
+    method @NonNull public String getForegroundPackageName();
+    method public int getProposedRotation();
+    method public long getTimeoutMillis();
+    method public boolean shouldUseCamera();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.rotationresolver.RotationResolutionRequest> CREATOR;
+  }
+
+  public abstract class RotationResolverService extends android.app.Service {
+    ctor public RotationResolverService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onResolveRotation(@NonNull android.service.rotationresolver.RotationResolutionRequest, @Nullable android.os.CancellationSignal, @NonNull android.service.rotationresolver.RotationResolverService.RotationResolverCallback);
+    field public static final int ROTATION_RESULT_FAILURE_CANCELLED = 0; // 0x0
+    field public static final int ROTATION_RESULT_FAILURE_NOT_SUPPORTED = 4; // 0x4
+    field public static final int ROTATION_RESULT_FAILURE_PREEMPTED = 2; // 0x2
+    field public static final int ROTATION_RESULT_FAILURE_TIMED_OUT = 1; // 0x1
+    field public static final int ROTATION_RESULT_FAILURE_UNKNOWN = 3; // 0x3
+    field public static final String SERVICE_INTERFACE = "android.service.rotationresolver.RotationResolverService";
+  }
+
+  public static interface RotationResolverService.RotationResolverCallback {
+    method public void onFailure(int);
+    method public void onSuccess(int);
+  }
+
+}
+
+package android.service.search {
+
+  public abstract class SearchUiService extends android.app.Service {
+    ctor public SearchUiService();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @MainThread public abstract void onDestroy(@NonNull android.app.search.SearchSessionId);
+    method @MainThread public abstract void onNotifyEvent(@NonNull android.app.search.SearchSessionId, @NonNull android.app.search.Query, @NonNull android.app.search.SearchTargetEvent);
+    method @MainThread public abstract void onQuery(@NonNull android.app.search.SearchSessionId, @NonNull android.app.search.Query, @NonNull java.util.function.Consumer<java.util.List<android.app.search.SearchTarget>>);
+    method public void onSearchSessionCreated(@NonNull android.app.search.SearchContext, @NonNull android.app.search.SearchSessionId);
+  }
+
+}
+
+package android.service.settings.suggestions {
+
+  public final class Suggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getFlags();
+    method public android.graphics.drawable.Icon getIcon();
+    method public String getId();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getSummary();
+    method public CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.settings.suggestions.Suggestion> CREATOR;
+    field public static final int FLAG_HAS_BUTTON = 1; // 0x1
+  }
+
+  public static class Suggestion.Builder {
+    ctor public Suggestion.Builder(String);
+    method public android.service.settings.suggestions.Suggestion build();
+    method public android.service.settings.suggestions.Suggestion.Builder setFlags(int);
+    method public android.service.settings.suggestions.Suggestion.Builder setIcon(android.graphics.drawable.Icon);
+    method public android.service.settings.suggestions.Suggestion.Builder setPendingIntent(android.app.PendingIntent);
+    method public android.service.settings.suggestions.Suggestion.Builder setSummary(CharSequence);
+    method public android.service.settings.suggestions.Suggestion.Builder setTitle(CharSequence);
+  }
+
+  public abstract class SuggestionService extends android.app.Service {
+    ctor public SuggestionService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract java.util.List<android.service.settings.suggestions.Suggestion> onGetSuggestions();
+    method public abstract void onSuggestionDismissed(android.service.settings.suggestions.Suggestion);
+    method public abstract void onSuggestionLaunched(android.service.settings.suggestions.Suggestion);
+  }
+
+}
+
+package android.service.smartspace {
+
+  public abstract class SmartspaceService extends android.app.Service {
+    ctor public SmartspaceService();
+    method @MainThread public abstract void notifySmartspaceEvent(@NonNull android.app.smartspace.SmartspaceSessionId, @NonNull android.app.smartspace.SmartspaceTargetEvent);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCreateSmartspaceSession(@NonNull android.app.smartspace.SmartspaceConfig, @NonNull android.app.smartspace.SmartspaceSessionId);
+    method @MainThread public abstract void onDestroy(@NonNull android.app.smartspace.SmartspaceSessionId);
+    method public abstract void onDestroySmartspaceSession(@NonNull android.app.smartspace.SmartspaceSessionId);
+    method @MainThread public abstract void onRequestSmartspaceUpdate(@NonNull android.app.smartspace.SmartspaceSessionId);
+    method public final void updateSmartspaceTargets(@NonNull android.app.smartspace.SmartspaceSessionId, @NonNull java.util.List<android.app.smartspace.SmartspaceTarget>);
+  }
+
+}
+
+package android.service.storage {
+
+  public abstract class ExternalStorageService extends android.app.Service {
+    ctor public ExternalStorageService();
+    method public void onAnrDelayStarted(@NonNull String, int, int, int);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onEndSession(@NonNull String) throws java.io.IOException;
+    method public void onFreeCache(@NonNull java.util.UUID, long) throws java.io.IOException;
+    method public abstract void onStartSession(@NonNull String, int, @NonNull android.os.ParcelFileDescriptor, @NonNull java.io.File, @NonNull java.io.File) throws java.io.IOException;
+    method public abstract void onVolumeStateChanged(@NonNull android.os.storage.StorageVolume) throws java.io.IOException;
+    field public static final int FLAG_SESSION_ATTRIBUTE_INDEXABLE = 2; // 0x2
+    field public static final int FLAG_SESSION_TYPE_FUSE = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.storage.ExternalStorageService";
+  }
+
+}
+
+package android.service.textclassifier {
+
+  public abstract class TextClassifierService extends android.app.Service {
+    ctor public TextClassifierService();
+    method @NonNull public static android.view.textclassifier.TextClassifier getDefaultTextClassifierImplementation(@NonNull android.content.Context);
+    method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @MainThread public abstract void onClassifyText(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassification.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextClassification>);
+    method public void onConnected();
+    method @MainThread public void onCreateTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext, @NonNull android.view.textclassifier.TextClassificationSessionId);
+    method @MainThread public void onDestroyTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationSessionId);
+    method @MainThread public void onDetectLanguage(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLanguage.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLanguage>);
+    method public void onDisconnected();
+    method @MainThread public abstract void onGenerateLinks(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLinks.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLinks>);
+    method @Deprecated @MainThread public void onSelectionEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.SelectionEvent);
+    method @MainThread public void onSuggestConversationActions(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.ConversationActions.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.ConversationActions>);
+    method @MainThread public abstract void onSuggestSelection(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextSelection.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextSelection>);
+    method @MainThread public void onTextClassifierEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassifierEvent);
+    field public static final String SERVICE_INTERFACE = "android.service.textclassifier.TextClassifierService";
+  }
+
+  public static interface TextClassifierService.Callback<T> {
+    method public void onFailure(@NonNull CharSequence);
+    method public void onSuccess(T);
+  }
+
+}
+
+package android.service.timezone {
+
+  public abstract class TimeZoneProviderService extends android.app.Service {
+    ctor public TimeZoneProviderService();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onStartUpdates(long);
+    method public abstract void onStopUpdates();
+    method public final void reportPermanentFailure(@NonNull Throwable);
+    method public final void reportSuggestion(@NonNull android.service.timezone.TimeZoneProviderSuggestion);
+    method public final void reportUncertain();
+    field public static final String PRIMARY_LOCATION_TIME_ZONE_PROVIDER_SERVICE_INTERFACE = "android.service.timezone.PrimaryLocationTimeZoneProviderService";
+    field public static final String SECONDARY_LOCATION_TIME_ZONE_PROVIDER_SERVICE_INTERFACE = "android.service.timezone.SecondaryLocationTimeZoneProviderService";
+  }
+
+  public final class TimeZoneProviderSuggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getElapsedRealtimeMillis();
+    method @NonNull public java.util.List<java.lang.String> getTimeZoneIds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.timezone.TimeZoneProviderSuggestion> CREATOR;
+  }
+
+  public static final class TimeZoneProviderSuggestion.Builder {
+    ctor public TimeZoneProviderSuggestion.Builder();
+    method @NonNull public android.service.timezone.TimeZoneProviderSuggestion build();
+    method @NonNull public android.service.timezone.TimeZoneProviderSuggestion.Builder setElapsedRealtimeMillis(long);
+    method @NonNull public android.service.timezone.TimeZoneProviderSuggestion.Builder setTimeZoneIds(@NonNull java.util.List<java.lang.String>);
+  }
+
+}
+
+package android.service.translation {
+
+  public abstract class TranslationService extends android.app.Service {
+    ctor public TranslationService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onConnected();
+    method public abstract void onCreateTranslationSession(@NonNull android.view.translation.TranslationContext, int, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method public void onDisconnected();
+    method public abstract void onFinishTranslationSession(int);
+    method public abstract void onTranslationCapabilitiesRequest(int, int, @NonNull java.util.function.Consumer<java.util.Set<android.view.translation.TranslationCapability>>);
+    method public abstract void onTranslationRequest(@NonNull android.view.translation.TranslationRequest, int, @Nullable android.os.CancellationSignal, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
+    method public final void updateTranslationCapability(@NonNull android.view.translation.TranslationCapability);
+    field public static final String SERVICE_INTERFACE = "android.service.translation.TranslationService";
+    field public static final String SERVICE_META_DATA = "android.translation_service";
+  }
+
+}
+
+package android.service.trust {
+
+  public class TrustAgentService extends android.app.Service {
+    ctor public TrustAgentService();
+    method public final void addEscrowToken(byte[], android.os.UserHandle);
+    method @Deprecated public final void grantTrust(CharSequence, long, boolean);
+    method public final void grantTrust(CharSequence, long, int);
+    method public final void isEscrowTokenActive(long, android.os.UserHandle);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public boolean onConfigure(java.util.List<android.os.PersistableBundle>);
+    method public void onDeviceLocked();
+    method public void onDeviceUnlockLockout(long);
+    method public void onDeviceUnlocked();
+    method public void onEscrowTokenAdded(byte[], long, android.os.UserHandle);
+    method public void onEscrowTokenRemoved(long, boolean);
+    method public void onEscrowTokenStateReceived(long, int);
+    method public void onTrustTimeout();
+    method public void onUnlockAttempt(boolean);
+    method public final void removeEscrowToken(long, android.os.UserHandle);
+    method public final void revokeTrust();
+    method public final void setManagingTrust(boolean);
+    method public final void showKeyguardErrorMessage(@NonNull CharSequence);
+    method public final void unlockUserWithToken(long, byte[], android.os.UserHandle);
+    field public static final int FLAG_GRANT_TRUST_DISMISS_KEYGUARD = 2; // 0x2
+    field public static final int FLAG_GRANT_TRUST_INITIATED_BY_USER = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.trust.TrustAgentService";
+    field public static final int TOKEN_STATE_ACTIVE = 1; // 0x1
+    field public static final int TOKEN_STATE_INACTIVE = 0; // 0x0
+    field public static final String TRUST_AGENT_META_DATA = "android.service.trust.trustagent";
+  }
+
+}
+
+package android.service.voice {
+
+  public class AlwaysOnHotwordDetector implements android.service.voice.HotwordDetector {
+    method @Nullable public android.content.Intent createEnrollIntent();
+    method @Nullable public android.content.Intent createReEnrollIntent();
+    method @Nullable public android.content.Intent createUnEnrollIntent();
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public int getParameter(int);
+    method public int getSupportedAudioCapabilities();
+    method public int getSupportedRecognitionModes();
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public android.service.voice.AlwaysOnHotwordDetector.ModelParamRange queryParameter(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public int setParameter(int, int);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition();
+    method public boolean startRecognition(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean stopRecognition();
+    method public final void updateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory);
+    field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
+    field public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
+    field public static final int MODEL_PARAM_THRESHOLD_FACTOR = 0; // 0x0
+    field public static final int RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS = 2; // 0x2
+    field public static final int RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO = 1; // 0x1
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_ECHO_CANCELLATION = 4; // 0x4
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION = 8; // 0x8
+    field public static final int RECOGNITION_FLAG_RUN_IN_BATTERY_SAVER = 16; // 0x10
+    field public static final int RECOGNITION_MODE_USER_IDENTIFICATION = 2; // 0x2
+    field public static final int RECOGNITION_MODE_VOICE_TRIGGER = 1; // 0x1
+    field public static final int STATE_ERROR = 3; // 0x3
+    field public static final int STATE_HARDWARE_UNAVAILABLE = -2; // 0xfffffffe
+    field public static final int STATE_KEYPHRASE_ENROLLED = 2; // 0x2
+    field public static final int STATE_KEYPHRASE_UNENROLLED = 1; // 0x1
+    field @Deprecated public static final int STATE_KEYPHRASE_UNSUPPORTED = -1; // 0xffffffff
+  }
+
+  public abstract static class AlwaysOnHotwordDetector.Callback implements android.service.voice.HotwordDetector.Callback {
+    ctor public AlwaysOnHotwordDetector.Callback();
+    method public abstract void onAvailabilityChanged(int);
+    method public void onHotwordDetectionServiceInitialized(int);
+    method public void onHotwordDetectionServiceRestarted();
+    method public void onRejected(@NonNull android.service.voice.HotwordRejectedResult);
+  }
+
+  public static class AlwaysOnHotwordDetector.EventPayload {
+    method @Nullable public android.os.ParcelFileDescriptor getAudioStream();
+    method @Nullable public android.media.AudioFormat getCaptureAudioFormat();
+    method @Nullable public android.service.voice.HotwordDetectedResult getHotwordDetectedResult();
+    method @Nullable public byte[] getTriggerAudio();
+  }
+
+  public static final class AlwaysOnHotwordDetector.ModelParamRange {
+    method public int getEnd();
+    method public int getStart();
+  }
+
+  public final class HotwordDetectedResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAudioChannel();
+    method public int getConfidenceLevel();
+    method @NonNull public android.os.PersistableBundle getExtras();
+    method public int getHotwordDurationMillis();
+    method public int getHotwordOffsetMillis();
+    method public int getHotwordPhraseId();
+    method public static int getMaxBundleSize();
+    method public static int getMaxHotwordPhraseId();
+    method public static int getMaxScore();
+    method @Nullable public android.media.MediaSyncEvent getMediaSyncEvent();
+    method public int getPersonalizedScore();
+    method public int getScore();
+    method public boolean isHotwordDetectionPersonalized();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int AUDIO_CHANNEL_UNSET = -1; // 0xffffffff
+    field public static final int CONFIDENCE_LEVEL_HIGH = 5; // 0x5
+    field public static final int CONFIDENCE_LEVEL_LOW = 1; // 0x1
+    field public static final int CONFIDENCE_LEVEL_LOW_MEDIUM = 2; // 0x2
+    field public static final int CONFIDENCE_LEVEL_MEDIUM = 3; // 0x3
+    field public static final int CONFIDENCE_LEVEL_MEDIUM_HIGH = 4; // 0x4
+    field public static final int CONFIDENCE_LEVEL_NONE = 0; // 0x0
+    field public static final int CONFIDENCE_LEVEL_VERY_HIGH = 6; // 0x6
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.voice.HotwordDetectedResult> CREATOR;
+    field public static final int HOTWORD_OFFSET_UNSET = -1; // 0xffffffff
+  }
+
+  public static final class HotwordDetectedResult.Builder {
+    ctor public HotwordDetectedResult.Builder();
+    method @NonNull public android.service.voice.HotwordDetectedResult build();
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setAudioChannel(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setConfidenceLevel(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setExtras(@NonNull android.os.PersistableBundle);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordDetectionPersonalized(boolean);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordDurationMillis(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordOffsetMillis(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordPhraseId(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setMediaSyncEvent(@NonNull android.media.MediaSyncEvent);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setPersonalizedScore(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setScore(int);
+  }
+
+  public abstract class HotwordDetectionService extends android.app.Service {
+    ctor public HotwordDetectionService();
+    method public static int getMaxCustomInitializationStatus();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onDetect(@NonNull android.service.voice.AlwaysOnHotwordDetector.EventPayload, long, @NonNull android.service.voice.HotwordDetectionService.Callback);
+    method public void onDetect(@NonNull android.service.voice.HotwordDetectionService.Callback);
+    method public void onDetect(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle, @NonNull android.service.voice.HotwordDetectionService.Callback);
+    method public void onStopDetection();
+    method public void onUpdateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, long, @Nullable java.util.function.IntConsumer);
+    field public static final int INITIALIZATION_STATUS_SUCCESS = 0; // 0x0
+    field public static final int INITIALIZATION_STATUS_UNKNOWN = 100; // 0x64
+    field public static final String SERVICE_INTERFACE = "android.service.voice.HotwordDetectionService";
+  }
+
+  public static final class HotwordDetectionService.Callback {
+    method public void onDetected(@NonNull android.service.voice.HotwordDetectedResult);
+    method public void onRejected(@NonNull android.service.voice.HotwordRejectedResult);
+  }
+
+  public interface HotwordDetector {
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition();
+    method public boolean startRecognition(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle);
+    method public boolean stopRecognition();
+    method public void updateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory);
+  }
+
+  public static interface HotwordDetector.Callback {
+    method public void onDetected(@NonNull android.service.voice.AlwaysOnHotwordDetector.EventPayload);
+    method public void onError();
+    method public void onHotwordDetectionServiceInitialized(int);
+    method public void onHotwordDetectionServiceRestarted();
+    method public void onRecognitionPaused();
+    method public void onRecognitionResumed();
+    method public void onRejected(@NonNull android.service.voice.HotwordRejectedResult);
+  }
+
+  public final class HotwordRejectedResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getConfidenceLevel();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONFIDENCE_LEVEL_HIGH = 3; // 0x3
+    field public static final int CONFIDENCE_LEVEL_LOW = 1; // 0x1
+    field public static final int CONFIDENCE_LEVEL_MEDIUM = 2; // 0x2
+    field public static final int CONFIDENCE_LEVEL_NONE = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.voice.HotwordRejectedResult> CREATOR;
+  }
+
+  public static final class HotwordRejectedResult.Builder {
+    ctor public HotwordRejectedResult.Builder();
+    method @NonNull public android.service.voice.HotwordRejectedResult build();
+    method @NonNull public android.service.voice.HotwordRejectedResult.Builder setConfidenceLevel(int);
+  }
+
+  public class VoiceInteractionService extends android.app.Service {
+    method @NonNull public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(String, java.util.Locale, android.service.voice.AlwaysOnHotwordDetector.Callback);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_HOTWORD_DETECTION) public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(String, java.util.Locale, @Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, android.service.voice.AlwaysOnHotwordDetector.Callback);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_HOTWORD_DETECTION) public final android.service.voice.HotwordDetector createHotwordDetector(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, @NonNull android.service.voice.HotwordDetector.Callback);
+    method @NonNull @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public final android.media.voice.KeyphraseModelManager createKeyphraseModelManager();
+  }
+
+}
+
+package android.service.wallpaper {
+
+  public class WallpaperService.Engine {
+    method public boolean isInAmbientMode();
+    method public void onAmbientModeChanged(boolean, long);
+  }
+
+}
+
+package android.service.watchdog {
+
+  public abstract class ExplicitHealthCheckService extends android.app.Service {
+    ctor public ExplicitHealthCheckService();
+    method public final void notifyHealthCheckPassed(@NonNull String);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCancelHealthCheck(@NonNull String);
+    method @NonNull public abstract java.util.List<java.lang.String> onGetRequestedPackages();
+    method @NonNull public abstract java.util.List<android.service.watchdog.ExplicitHealthCheckService.PackageConfig> onGetSupportedPackages();
+    method public abstract void onRequestHealthCheck(@NonNull String);
+    field public static final String BIND_PERMISSION = "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE";
+    field public static final String SERVICE_INTERFACE = "android.service.watchdog.ExplicitHealthCheckService";
+  }
+
+  public static final class ExplicitHealthCheckService.PackageConfig implements android.os.Parcelable {
+    ctor public ExplicitHealthCheckService.PackageConfig(@NonNull String, long);
+    method public int describeContents();
+    method public long getHealthCheckTimeoutMillis();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.watchdog.ExplicitHealthCheckService.PackageConfig> CREATOR;
+  }
+
+}
+
+package android.telecom {
+
+  @Deprecated public class AudioState implements android.os.Parcelable {
+    ctor @Deprecated public AudioState(boolean, int, int);
+    ctor @Deprecated public AudioState(android.telecom.AudioState);
+    ctor @Deprecated public AudioState(android.telecom.CallAudioState);
+    method @Deprecated public static String audioRouteToString(int);
+    method @Deprecated public int describeContents();
+    method @Deprecated public int getRoute();
+    method @Deprecated public int getSupportedRouteMask();
+    method @Deprecated public boolean isMuted();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.telecom.AudioState> CREATOR;
+    field @Deprecated public static final int ROUTE_BLUETOOTH = 2; // 0x2
+    field @Deprecated public static final int ROUTE_EARPIECE = 1; // 0x1
+    field @Deprecated public static final int ROUTE_SPEAKER = 8; // 0x8
+    field @Deprecated public static final int ROUTE_WIRED_HEADSET = 4; // 0x4
+    field @Deprecated public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5
+  }
+
+  public final class BluetoothCallQualityReport implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public int getNegativeAcknowledgementCount();
+    method @IntRange(from=0) public int getPacketsNotReceivedCount();
+    method @IntRange(from=0) public int getRetransmittedPacketsCount();
+    method @IntRange(from=0xffffff81, to=20) public int getRssiDbm();
+    method public long getSentTimestampMillis();
+    method public int getSnrDb();
+    method public boolean isChoppyVoice();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.BluetoothCallQualityReport> CREATOR;
+    field public static final String EVENT_BLUETOOTH_CALL_QUALITY_REPORT = "android.telecom.event.BLUETOOTH_CALL_QUALITY_REPORT";
+    field public static final String EXTRA_BLUETOOTH_CALL_QUALITY_REPORT = "android.telecom.extra.BLUETOOTH_CALL_QUALITY_REPORT";
+  }
+
+  public static final class BluetoothCallQualityReport.Builder {
+    ctor public BluetoothCallQualityReport.Builder();
+    method @NonNull public android.telecom.BluetoothCallQualityReport build();
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setChoppyVoice(boolean);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setNegativeAcknowledgementCount(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setPacketsNotReceivedCount(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setRetransmittedPacketsCount(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setRssiDbm(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setSentTimestampMillis(long);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setSnrDb(int);
+  }
+
+  public final class Call {
+    method @Deprecated public void addListener(android.telecom.Call.Listener);
+    method public void enterBackgroundAudioProcessing();
+    method public void exitBackgroundAudioProcessing(boolean);
+    method @Deprecated public void removeListener(android.telecom.Call.Listener);
+    field @Deprecated public static final int STATE_PRE_DIAL_WAIT = 8; // 0x8
+  }
+
+  @Deprecated public abstract static class Call.Listener extends android.telecom.Call.Callback {
+    ctor @Deprecated public Call.Listener();
+  }
+
+  public abstract class CallDiagnosticService extends android.app.Service {
+    ctor public CallDiagnosticService();
+    method @NonNull public java.util.concurrent.Executor getExecutor();
+    method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onBluetoothCallQualityReportReceived(@NonNull android.telecom.BluetoothCallQualityReport);
+    method public abstract void onCallAudioStateChanged(@NonNull android.telecom.CallAudioState);
+    method @NonNull public abstract android.telecom.CallDiagnostics onInitializeCallDiagnostics(@NonNull android.telecom.Call.Details);
+    method public abstract void onRemoveCallDiagnostics(@NonNull android.telecom.CallDiagnostics);
+    field public static final String SERVICE_INTERFACE = "android.telecom.CallDiagnosticService";
+  }
+
+  public abstract class CallDiagnostics {
+    ctor public CallDiagnostics();
+    method public final void clearDiagnosticMessage(int);
+    method public final void displayDiagnosticMessage(int, @NonNull CharSequence);
+    method public abstract void onCallDetailsChanged(@NonNull android.telecom.Call.Details);
+    method @Nullable public abstract CharSequence onCallDisconnected(int, int);
+    method @Nullable public abstract CharSequence onCallDisconnected(@NonNull android.telephony.ims.ImsReasonInfo);
+    method public abstract void onCallQualityReceived(@NonNull android.telephony.CallQuality);
+    method public abstract void onReceiveDeviceToDeviceMessage(int, int);
+    method public final void sendDeviceToDeviceMessage(int, int);
+    field public static final int BATTERY_STATE_CHARGING = 3; // 0x3
+    field public static final int BATTERY_STATE_GOOD = 2; // 0x2
+    field public static final int BATTERY_STATE_LOW = 1; // 0x1
+    field public static final int COVERAGE_GOOD = 2; // 0x2
+    field public static final int COVERAGE_POOR = 1; // 0x1
+    field public static final int MESSAGE_CALL_AUDIO_CODEC = 2; // 0x2
+    field public static final int MESSAGE_CALL_NETWORK_TYPE = 1; // 0x1
+    field public static final int MESSAGE_DEVICE_BATTERY_STATE = 3; // 0x3
+    field public static final int MESSAGE_DEVICE_NETWORK_COVERAGE = 4; // 0x4
+  }
+
+  public static class CallScreeningService.CallResponse.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public android.telecom.CallScreeningService.CallResponse.Builder setShouldScreenCallViaAudioProcessing(boolean);
+  }
+
+  public abstract class Conference extends android.telecom.Conferenceable {
+    method @Deprecated public final android.telecom.AudioState getAudioState();
+    method @Deprecated public final long getConnectTimeMillis();
+    method public android.telecom.Connection getPrimaryConnection();
+    method @NonNull public final String getTelecomCallId();
+    method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setAddress(@NonNull android.net.Uri, int);
+    method public final void setCallerDisplayName(@NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setConferenceState(boolean);
+    method @Deprecated public final void setConnectTimeMillis(long);
+  }
+
+  public abstract class Connection extends android.telecom.Conferenceable {
+    method @Deprecated public final android.telecom.AudioState getAudioState();
+    method @IntRange(from=0) public final long getConnectTimeMillis();
+    method public final long getConnectionStartElapsedRealtimeMillis();
+    method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method @Nullable public final String getTelecomCallId();
+    method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
+    method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(@NonNull android.telecom.Connection.CallFilteringCompletionInfo);
+    method public final void resetConnectionTime();
+    method public void setCallDirection(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectionStartElapsedRealtimeMillis(long);
+    method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
+    method public void setTelecomCallId(@NonNull String);
+    field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000
+    field public static final int CAPABILITY_SPEED_UP_MT_AUDIO = 262144; // 0x40000
+    field public static final String EVENT_DEVICE_TO_DEVICE_MESSAGE = "android.telecom.event.DEVICE_TO_DEVICE_MESSAGE";
+    field public static final String EXTRA_DEVICE_TO_DEVICE_MESSAGE_TYPE = "android.telecom.extra.DEVICE_TO_DEVICE_MESSAGE_TYPE";
+    field public static final String EXTRA_DEVICE_TO_DEVICE_MESSAGE_VALUE = "android.telecom.extra.DEVICE_TO_DEVICE_MESSAGE_VALUE";
+    field public static final String EXTRA_DISABLE_ADD_CALL = "android.telecom.extra.DISABLE_ADD_CALL";
+    field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 1; // 0x1
+    field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
+    field public static final int PROPERTY_IS_DOWNGRADED_CONFERENCE = 64; // 0x40
+    field public static final int PROPERTY_REMOTELY_HOSTED = 2048; // 0x800
+  }
+
+  public static final class Connection.CallFilteringCompletionInfo implements android.os.Parcelable {
+    ctor public Connection.CallFilteringCompletionInfo(boolean, boolean, @Nullable android.telecom.CallScreeningService.CallResponse, @Nullable android.content.ComponentName);
+    method public int describeContents();
+    method @Nullable public android.telecom.CallScreeningService.CallResponse getCallResponse();
+    method @Nullable public android.content.ComponentName getCallScreeningComponent();
+    method public boolean isBlocked();
+    method public boolean isInContacts();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.Connection.CallFilteringCompletionInfo> CREATOR;
+  }
+
+  public final class ConnectionRequest implements android.os.Parcelable {
+    method @Nullable public String getTelecomCallId();
+  }
+
+  public abstract class ConnectionService extends android.app.Service {
+    method public final void addExistingConnection(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.Connection, @NonNull android.telecom.Conference);
+  }
+
+  public abstract class InCallService extends android.app.Service {
+    method @Deprecated public android.telecom.Phone getPhone();
+    method @Deprecated public void onPhoneCreated(android.telecom.Phone);
+    method @Deprecated public void onPhoneDestroyed(android.telecom.Phone);
+  }
+
+  public class ParcelableCallAnalytics implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics(long, long, int, boolean, boolean, int, int, boolean, String, boolean, java.util.List<android.telecom.ParcelableCallAnalytics.AnalyticsEvent>, java.util.List<android.telecom.ParcelableCallAnalytics.EventTiming>);
+    ctor public ParcelableCallAnalytics(android.os.Parcel);
+    method public java.util.List<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> analyticsEvents();
+    method public int describeContents();
+    method public long getCallDurationMillis();
+    method public int getCallTechnologies();
+    method public int getCallTerminationCode();
+    method public int getCallType();
+    method public String getConnectionService();
+    method public java.util.List<android.telecom.ParcelableCallAnalytics.EventTiming> getEventTimings();
+    method public long getStartTimeMillis();
+    method public boolean isAdditionalCall();
+    method public boolean isCreatedFromExistingConnection();
+    method public boolean isEmergencyCall();
+    method public boolean isInterrupted();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALLTYPE_INCOMING = 1; // 0x1
+    field public static final int CALLTYPE_OUTGOING = 2; // 0x2
+    field public static final int CALLTYPE_UNKNOWN = 0; // 0x0
+    field public static final int CDMA_PHONE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics> CREATOR;
+    field public static final int GSM_PHONE = 2; // 0x2
+    field public static final int IMS_PHONE = 4; // 0x4
+    field public static final long MILLIS_IN_1_SECOND = 1000L; // 0x3e8L
+    field public static final long MILLIS_IN_5_MINUTES = 300000L; // 0x493e0L
+    field public static final int SIP_PHONE = 8; // 0x8
+    field public static final int STILL_CONNECTED = -1; // 0xffffffff
+    field public static final int THIRD_PARTY_PHONE = 16; // 0x10
+  }
+
+  public static final class ParcelableCallAnalytics.AnalyticsEvent implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics.AnalyticsEvent(int, long);
+    method public int describeContents();
+    method public int getEventName();
+    method public long getTimeSinceLastEvent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_ROUTE_BT = 204; // 0xcc
+    field public static final int AUDIO_ROUTE_EARPIECE = 205; // 0xcd
+    field public static final int AUDIO_ROUTE_HEADSET = 206; // 0xce
+    field public static final int AUDIO_ROUTE_SPEAKER = 207; // 0xcf
+    field public static final int BIND_CS = 5; // 0x5
+    field public static final int BLOCK_CHECK_FINISHED = 105; // 0x69
+    field public static final int BLOCK_CHECK_INITIATED = 104; // 0x68
+    field public static final int CONFERENCE_WITH = 300; // 0x12c
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> CREATOR;
+    field public static final int CS_BOUND = 6; // 0x6
+    field public static final int DIRECT_TO_VM_FINISHED = 103; // 0x67
+    field public static final int DIRECT_TO_VM_INITIATED = 102; // 0x66
+    field public static final int FILTERING_COMPLETED = 107; // 0x6b
+    field public static final int FILTERING_INITIATED = 106; // 0x6a
+    field public static final int FILTERING_TIMED_OUT = 108; // 0x6c
+    field public static final int MUTE = 202; // 0xca
+    field public static final int REMOTELY_HELD = 402; // 0x192
+    field public static final int REMOTELY_UNHELD = 403; // 0x193
+    field public static final int REQUEST_ACCEPT = 7; // 0x7
+    field public static final int REQUEST_HOLD = 400; // 0x190
+    field public static final int REQUEST_PULL = 500; // 0x1f4
+    field public static final int REQUEST_REJECT = 8; // 0x8
+    field public static final int REQUEST_UNHOLD = 401; // 0x191
+    field public static final int SCREENING_COMPLETED = 101; // 0x65
+    field public static final int SCREENING_SENT = 100; // 0x64
+    field public static final int SET_ACTIVE = 1; // 0x1
+    field public static final int SET_DIALING = 4; // 0x4
+    field public static final int SET_DISCONNECTED = 2; // 0x2
+    field public static final int SET_HOLD = 404; // 0x194
+    field public static final int SET_PARENT = 302; // 0x12e
+    field public static final int SET_SELECT_PHONE_ACCOUNT = 0; // 0x0
+    field public static final int SILENCE = 201; // 0xc9
+    field public static final int SKIP_RINGING = 200; // 0xc8
+    field public static final int SPLIT_CONFERENCE = 301; // 0x12d
+    field public static final int START_CONNECTION = 3; // 0x3
+    field public static final int SWAP = 405; // 0x195
+    field public static final int UNMUTE = 203; // 0xcb
+  }
+
+  public static final class ParcelableCallAnalytics.EventTiming implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics.EventTiming(int, long);
+    method public int describeContents();
+    method public int getName();
+    method public long getTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACCEPT_TIMING = 0; // 0x0
+    field public static final int BIND_CS_TIMING = 6; // 0x6
+    field public static final int BLOCK_CHECK_FINISHED_TIMING = 9; // 0x9
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.EventTiming> CREATOR;
+    field public static final int DIRECT_TO_VM_FINISHED_TIMING = 8; // 0x8
+    field public static final int DISCONNECT_TIMING = 2; // 0x2
+    field public static final int FILTERING_COMPLETED_TIMING = 10; // 0xa
+    field public static final int FILTERING_TIMED_OUT_TIMING = 11; // 0xb
+    field public static final int HOLD_TIMING = 3; // 0x3
+    field public static final int INVALID = 999999; // 0xf423f
+    field public static final int OUTGOING_TIME_TO_DIALING_TIMING = 5; // 0x5
+    field public static final int REJECT_TIMING = 1; // 0x1
+    field public static final int SCREENING_COMPLETED_TIMING = 7; // 0x7
+    field public static final int UNHOLD_TIMING = 4; // 0x4
+  }
+
+  @Deprecated public final class Phone {
+    method @Deprecated public void addListener(android.telecom.Phone.Listener);
+    method @Deprecated public boolean canAddCall();
+    method @Deprecated public android.telecom.AudioState getAudioState();
+    method @Deprecated public android.telecom.CallAudioState getCallAudioState();
+    method @Deprecated public java.util.List<android.telecom.Call> getCalls();
+    method @Deprecated public void removeListener(android.telecom.Phone.Listener);
+    method @Deprecated public void requestBluetoothAudio(String);
+    method @Deprecated public void setAudioRoute(int);
+    method @Deprecated public void setMuted(boolean);
+  }
+
+  @Deprecated public abstract static class Phone.Listener {
+    ctor @Deprecated public Phone.Listener();
+    method @Deprecated public void onAudioStateChanged(android.telecom.Phone, android.telecom.AudioState);
+    method @Deprecated public void onBringToForeground(android.telecom.Phone, boolean);
+    method @Deprecated public void onCallAdded(android.telecom.Phone, android.telecom.Call);
+    method @Deprecated public void onCallAudioStateChanged(android.telecom.Phone, android.telecom.CallAudioState);
+    method @Deprecated public void onCallRemoved(android.telecom.Phone, android.telecom.Call);
+    method @Deprecated public void onCanAddCallChanged(android.telecom.Phone, boolean);
+    method @Deprecated public void onSilenceRinger(android.telecom.Phone);
+  }
+
+  public final class PhoneAccount implements android.os.Parcelable {
+    field public static final int CAPABILITY_EMERGENCY_CALLS_ONLY = 128; // 0x80
+    field public static final int CAPABILITY_EMERGENCY_PREFERRED = 8192; // 0x2000
+    field public static final int CAPABILITY_EMERGENCY_VIDEO_CALLING = 512; // 0x200
+    field public static final int CAPABILITY_MULTI_USER = 32; // 0x20
+    field public static final String EXTRA_PLAY_CALL_RECORDING_TONE = "android.telecom.extra.PLAY_CALL_RECORDING_TONE";
+    field public static final String EXTRA_SORT_ORDER = "android.telecom.extra.SORT_ORDER";
+  }
+
+  public static class PhoneAccount.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
+  }
+
+  public class PhoneAccountSuggestionService extends android.app.Service {
+    ctor public PhoneAccountSuggestionService();
+    method public void onAccountSuggestionRequest(@NonNull String);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public final void suggestPhoneAccounts(@NonNull String, @NonNull java.util.List<android.telecom.PhoneAccountSuggestion>);
+    field public static final String SERVICE_INTERFACE = "android.telecom.PhoneAccountSuggestionService";
+  }
+
+  public final class RemoteConference {
+    method @Deprecated public void setAudioState(android.telecom.AudioState);
+  }
+
+  public final class RemoteConnection {
+    method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(@NonNull android.telecom.Connection.CallFilteringCompletionInfo);
+    method @Deprecated public void setAudioState(android.telecom.AudioState);
+  }
+
+  public final class StatusHints implements android.os.Parcelable {
+    ctor @Deprecated public StatusHints(android.content.ComponentName, CharSequence, int, android.os.Bundle);
+    method @Deprecated public android.graphics.drawable.Drawable getIcon(android.content.Context);
+    method @Deprecated public int getIconResId();
+    method @Deprecated public android.content.ComponentName getPackageName();
+  }
+
+  public final class TelecomAnalytics implements android.os.Parcelable {
+    ctor public TelecomAnalytics(java.util.List<android.telecom.TelecomAnalytics.SessionTiming>, java.util.List<android.telecom.ParcelableCallAnalytics>);
+    method public int describeContents();
+    method public java.util.List<android.telecom.ParcelableCallAnalytics> getCallAnalytics();
+    method public java.util.List<android.telecom.TelecomAnalytics.SessionTiming> getSessionTimings();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics> CREATOR;
+  }
+
+  public static final class TelecomAnalytics.SessionTiming implements android.os.Parcelable {
+    ctor public TelecomAnalytics.SessionTiming(int, long);
+    method public int describeContents();
+    method public Integer getKey();
+    method public long getTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics.SessionTiming> CREATOR;
+    field public static final int CSW_ADD_CONFERENCE_CALL = 108; // 0x6c
+    field public static final int CSW_HANDLE_CREATE_CONNECTION_COMPLETE = 100; // 0x64
+    field public static final int CSW_REMOVE_CALL = 106; // 0x6a
+    field public static final int CSW_SET_ACTIVE = 101; // 0x65
+    field public static final int CSW_SET_DIALING = 103; // 0x67
+    field public static final int CSW_SET_DISCONNECTED = 104; // 0x68
+    field public static final int CSW_SET_IS_CONFERENCED = 107; // 0x6b
+    field public static final int CSW_SET_ON_HOLD = 105; // 0x69
+    field public static final int CSW_SET_RINGING = 102; // 0x66
+    field public static final int ICA_ANSWER_CALL = 1; // 0x1
+    field public static final int ICA_CONFERENCE = 8; // 0x8
+    field public static final int ICA_DISCONNECT_CALL = 3; // 0x3
+    field public static final int ICA_HOLD_CALL = 4; // 0x4
+    field public static final int ICA_MUTE = 6; // 0x6
+    field public static final int ICA_REJECT_CALL = 2; // 0x2
+    field public static final int ICA_SET_AUDIO_ROUTE = 7; // 0x7
+    field public static final int ICA_UNHOLD_CALL = 5; // 0x5
+  }
+
+  public class TelecomManager {
+    method public void addNewUnknownCall(android.telecom.PhoneAccountHandle, android.os.Bundle);
+    method @Deprecated public void clearAccounts();
+    method public void clearPhoneAccounts();
+    method @NonNull public android.content.Intent createLaunchEmergencyDialerIntent(@Nullable String);
+    method @RequiresPermission(android.Manifest.permission.DUMP) public android.telecom.TelecomAnalytics dumpAnalytics();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void enablePhoneAccount(android.telecom.PhoneAccountHandle, boolean);
+    method public java.util.List<android.telecom.PhoneAccountHandle> getAllPhoneAccountHandles();
+    method public java.util.List<android.telecom.PhoneAccount> getAllPhoneAccounts();
+    method public int getAllPhoneAccountsCount();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}, conditional=true) public int getCallState();
+    method public android.telecom.PhoneAccountHandle getConnectionManager();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCurrentTtyMode();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultDialerPackage(@NonNull android.os.UserHandle);
+    method @Deprecated public android.content.ComponentName getDefaultPhoneApp();
+    method @Deprecated public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle);
+    field public static final String ACTION_CURRENT_TTY_MODE_CHANGED = "android.telecom.action.CURRENT_TTY_MODE_CHANGED";
+    field public static final String ACTION_TTY_PREFERRED_MODE_CHANGED = "android.telecom.action.TTY_PREFERRED_MODE_CHANGED";
+    field public static final int CALL_SOURCE_EMERGENCY_DIALPAD = 1; // 0x1
+    field public static final int CALL_SOURCE_EMERGENCY_SHORTCUT = 2; // 0x2
+    field public static final int CALL_SOURCE_UNSPECIFIED = 0; // 0x0
+    field public static final String EXTRA_CALL_BACK_INTENT = "android.telecom.extra.CALL_BACK_INTENT";
+    field public static final String EXTRA_CALL_SOURCE = "android.telecom.extra.CALL_SOURCE";
+    field public static final String EXTRA_CALL_TECHNOLOGY_TYPE = "android.telecom.extra.CALL_TECHNOLOGY_TYPE";
+    field public static final String EXTRA_CLEAR_MISSED_CALLS_INTENT = "android.telecom.extra.CLEAR_MISSED_CALLS_INTENT";
+    field public static final String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE";
+    field public static final String EXTRA_CURRENT_TTY_MODE = "android.telecom.extra.CURRENT_TTY_MODE";
+    field public static final String EXTRA_IS_USER_INTENT_EMERGENCY_CALL = "android.telecom.extra.IS_USER_INTENT_EMERGENCY_CALL";
+    field public static final String EXTRA_TTY_PREFERRED_MODE = "android.telecom.extra.TTY_PREFERRED_MODE";
+    field public static final String EXTRA_UNKNOWN_CALL_HANDLE = "android.telecom.extra.UNKNOWN_CALL_HANDLE";
+    field public static final int TTY_MODE_FULL = 1; // 0x1
+    field public static final int TTY_MODE_HCO = 2; // 0x2
+    field public static final int TTY_MODE_OFF = 0; // 0x0
+    field public static final int TTY_MODE_VCO = 3; // 0x3
+  }
+
+}
+
+package android.telephony {
+
+  public final class AccessNetworkConstants {
+    field public static final int TRANSPORT_TYPE_INVALID = -1; // 0xffffffff
+  }
+
+  public static final class AccessNetworkConstants.NgranBands {
+    method public static int getFrequencyRangeGroup(int);
+    field public static final int FREQUENCY_RANGE_GROUP_1 = 1; // 0x1
+    field public static final int FREQUENCY_RANGE_GROUP_2 = 2; // 0x2
+    field public static final int FREQUENCY_RANGE_GROUP_UNKNOWN = 0; // 0x0
+  }
+
+  public final class BarringInfo implements android.os.Parcelable {
+    ctor public BarringInfo();
+    method @NonNull public android.telephony.BarringInfo createLocationInfoSanitizedCopy();
+  }
+
+  public final class CallAttributes implements android.os.Parcelable {
+    ctor public CallAttributes(@NonNull android.telephony.PreciseCallState, int, @NonNull android.telephony.CallQuality);
+    method public int describeContents();
+    method @NonNull public android.telephony.CallQuality getCallQuality();
+    method public int getNetworkType();
+    method @NonNull public android.telephony.PreciseCallState getPreciseCallState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallAttributes> CREATOR;
+  }
+
+  public final class CallForwardingInfo implements android.os.Parcelable {
+    ctor public CallForwardingInfo(boolean, int, @Nullable String, int);
+    method public int describeContents();
+    method @Nullable public String getNumber();
+    method public int getReason();
+    method public int getTimeoutSeconds();
+    method public boolean isEnabled();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallForwardingInfo> CREATOR;
+    field public static final int REASON_ALL = 4; // 0x4
+    field public static final int REASON_ALL_CONDITIONAL = 5; // 0x5
+    field public static final int REASON_BUSY = 1; // 0x1
+    field public static final int REASON_NOT_REACHABLE = 3; // 0x3
+    field public static final int REASON_NO_REPLY = 2; // 0x2
+    field public static final int REASON_UNCONDITIONAL = 0; // 0x0
+  }
+
+  public final class CallQuality implements android.os.Parcelable {
+    ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int);
+    ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int, boolean, boolean, boolean);
+    method public int describeContents();
+    method public int getAverageRelativeJitter();
+    method public int getAverageRoundTripTime();
+    method public int getCallDuration();
+    method public int getCodecType();
+    method public int getDownlinkCallQualityLevel();
+    method public int getMaxRelativeJitter();
+    method public int getNumRtpPacketsNotReceived();
+    method public int getNumRtpPacketsReceived();
+    method public int getNumRtpPacketsTransmitted();
+    method public int getNumRtpPacketsTransmittedLost();
+    method public int getUplinkCallQualityLevel();
+    method public boolean isIncomingSilenceDetectedAtCallSetup();
+    method public boolean isOutgoingSilenceDetectedAtCallSetup();
+    method public boolean isRtpInactivityDetected();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALL_QUALITY_BAD = 4; // 0x4
+    field public static final int CALL_QUALITY_EXCELLENT = 0; // 0x0
+    field public static final int CALL_QUALITY_FAIR = 2; // 0x2
+    field public static final int CALL_QUALITY_GOOD = 1; // 0x1
+    field public static final int CALL_QUALITY_NOT_AVAILABLE = 5; // 0x5
+    field public static final int CALL_QUALITY_POOR = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallQuality> CREATOR;
+  }
+
+  public class CarrierConfigManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultCarrierServicePackageName();
+    method @NonNull public static android.os.PersistableBundle getDefaultConfig();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void overrideConfig(int, @Nullable android.os.PersistableBundle);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void updateConfigForPhoneId(int, String);
+    field public static final int GBA_DIGEST = 3; // 0x3
+    field public static final int GBA_ME = 1; // 0x1
+    field public static final int GBA_U = 2; // 0x2
+    field public static final String KEY_CARRIER_SETUP_APP_STRING = "carrier_setup_app_string";
+    field public static final String KEY_GBA_MODE_INT = "gba_mode_int";
+    field public static final String KEY_GBA_UA_SECURITY_ORGANIZATION_INT = "gba_ua_security_organization_int";
+    field public static final String KEY_GBA_UA_SECURITY_PROTOCOL_INT = "gba_ua_security_protocol_int";
+    field public static final String KEY_GBA_UA_TLS_CIPHER_SUITE_INT = "gba_ua_tls_cipher_suite_int";
+    field public static final String KEY_SUPPORT_CDMA_1X_VOICE_CALLS_BOOL = "support_cdma_1x_voice_calls_bool";
+  }
+
+  public static final class CarrierConfigManager.Wifi {
+    field public static final String KEY_AVOID_5GHZ_SOFTAP_FOR_LAA_BOOL = "wifi.avoid_5ghz_softap_for_laa_bool";
+    field public static final String KEY_AVOID_5GHZ_WIFI_DIRECT_FOR_LAA_BOOL = "wifi.avoid_5ghz_wifi_direct_for_laa_bool";
+    field public static final String KEY_HOTSPOT_MAX_CLIENT_COUNT = "wifi.hotspot_maximum_client_count";
+    field public static final String KEY_PREFIX = "wifi.";
+    field public static final String KEY_SUGGESTION_SSID_LIST_WITH_MAC_RANDOMIZATION_DISABLED = "wifi.suggestion_ssid_list_with_mac_randomization_disabled";
+  }
+
+  public final class CarrierRestrictionRules implements android.os.Parcelable {
+    method @NonNull public java.util.List<java.lang.Boolean> areCarrierIdentifiersAllowed(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers();
+    method public int getDefaultCarrierRestriction();
+    method @NonNull public java.util.List<android.service.carrier.CarrierIdentifier> getExcludedCarriers();
+    method public int getMultiSimPolicy();
+    method public boolean isAllCarriersAllowed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CARRIER_RESTRICTION_DEFAULT_ALLOWED = 1; // 0x1
+    field public static final int CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CarrierRestrictionRules> CREATOR;
+    field public static final int MULTISIM_POLICY_NONE = 0; // 0x0
+    field public static final int MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT = 1; // 0x1
+  }
+
+  public static final class CarrierRestrictionRules.Builder {
+    ctor public CarrierRestrictionRules.Builder();
+    method @NonNull public android.telephony.CarrierRestrictionRules build();
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed();
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int);
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int);
+  }
+
+  public class CbGeoUtils {
+  }
+
+  public static class CbGeoUtils.Circle implements android.telephony.CbGeoUtils.Geometry {
+    ctor public CbGeoUtils.Circle(@NonNull android.telephony.CbGeoUtils.LatLng, double);
+    method public boolean contains(@NonNull android.telephony.CbGeoUtils.LatLng);
+    method @NonNull public android.telephony.CbGeoUtils.LatLng getCenter();
+    method public double getRadius();
+  }
+
+  public static interface CbGeoUtils.Geometry {
+    method public boolean contains(@NonNull android.telephony.CbGeoUtils.LatLng);
+  }
+
+  public static class CbGeoUtils.LatLng {
+    ctor public CbGeoUtils.LatLng(double, double);
+    method public double distance(@NonNull android.telephony.CbGeoUtils.LatLng);
+    method @NonNull public android.telephony.CbGeoUtils.LatLng subtract(@NonNull android.telephony.CbGeoUtils.LatLng);
+    field public final double lat;
+    field public final double lng;
+  }
+
+  public static class CbGeoUtils.Polygon implements android.telephony.CbGeoUtils.Geometry {
+    ctor public CbGeoUtils.Polygon(@NonNull java.util.List<android.telephony.CbGeoUtils.LatLng>);
+    method public boolean contains(@NonNull android.telephony.CbGeoUtils.LatLng);
+    method @NonNull public java.util.List<android.telephony.CbGeoUtils.LatLng> getVertices();
+  }
+
+  public class CellBroadcastIntents {
+    method public static void sendSmsCbReceivedBroadcast(@NonNull android.content.Context, @Nullable android.os.UserHandle, @NonNull android.telephony.SmsCbMessage, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, int);
+    field public static final String ACTION_AREA_INFO_UPDATED = "android.telephony.action.AREA_INFO_UPDATED";
+  }
+
+  public abstract class CellBroadcastService extends android.app.Service {
+    ctor public CellBroadcastService();
+    method @NonNull @WorkerThread public abstract CharSequence getCellBroadcastAreaInfo(int);
+    method @CallSuper public android.os.IBinder onBind(@Nullable android.content.Intent);
+    method public abstract void onCdmaCellBroadcastSms(int, @NonNull byte[], int);
+    method public abstract void onCdmaScpMessage(int, @NonNull java.util.List<android.telephony.cdma.CdmaSmsCbProgramData>, @NonNull String, @NonNull java.util.function.Consumer<android.os.Bundle>);
+    method public abstract void onGsmCellBroadcastSms(int, @NonNull byte[]);
+    field public static final String CELL_BROADCAST_SERVICE_INTERFACE = "android.telephony.CellBroadcastService";
+  }
+
+  public abstract class CellIdentity implements android.os.Parcelable {
+    method @NonNull public abstract android.telephony.CellLocation asCellLocation();
+    method @NonNull public abstract android.telephony.CellIdentity sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityCdma extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.cdma.CdmaCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityCdma sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityGsm extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityGsm sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityLte extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityLte sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityNr extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.CellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityNr sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityTdscdma extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityTdscdma sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityWcdma extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityWcdma sanitizeLocationInfo();
+  }
+
+  public final class DataFailCause {
+    field @Deprecated public static final int VSNCP_APN_UNATHORIZED = 2238; // 0x8be
+  }
+
+  public final class DataSpecificRegistrationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Deprecated @NonNull public android.telephony.LteVopsSupportInfo getLteVopsSupportInfo();
+    method @Nullable public android.telephony.VopsSupportInfo getVopsSupportInfo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DataSpecificRegistrationInfo> CREATOR;
+  }
+
+  public final class DataThrottlingRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getCompletionDurationMillis();
+    method public int getDataThrottlingAction();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DataThrottlingRequest> CREATOR;
+    field public static final int DATA_THROTTLING_ACTION_HOLD = 3; // 0x3
+    field public static final int DATA_THROTTLING_ACTION_NO_DATA_THROTTLING = 0; // 0x0
+    field public static final int DATA_THROTTLING_ACTION_THROTTLE_PRIMARY_CARRIER = 2; // 0x2
+    field public static final int DATA_THROTTLING_ACTION_THROTTLE_SECONDARY_CARRIER = 1; // 0x1
+  }
+
+  public static final class DataThrottlingRequest.Builder {
+    ctor public DataThrottlingRequest.Builder();
+    method @NonNull public android.telephony.DataThrottlingRequest build();
+    method @NonNull public android.telephony.DataThrottlingRequest.Builder setCompletionDurationMillis(long);
+    method @NonNull public android.telephony.DataThrottlingRequest.Builder setDataThrottlingAction(int);
+  }
+
+  public final class ImsiEncryptionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getKeyIdentifier();
+    method @Nullable public java.security.PublicKey getPublicKey();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ImsiEncryptionInfo> CREATOR;
+  }
+
+  public final class LinkCapacityEstimate implements android.os.Parcelable {
+    ctor public LinkCapacityEstimate(int, int, int);
+    method public int describeContents();
+    method public int getDownlinkCapacityKbps();
+    method public int getType();
+    method public int getUplinkCapacityKbps();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.LinkCapacityEstimate> CREATOR;
+    field public static final int INVALID = -1; // 0xffffffff
+    field public static final int LCE_TYPE_COMBINED = 2; // 0x2
+    field public static final int LCE_TYPE_PRIMARY = 0; // 0x0
+    field public static final int LCE_TYPE_SECONDARY = 1; // 0x1
+  }
+
+  public final class LteVopsSupportInfo extends android.telephony.VopsSupportInfo {
+    ctor public LteVopsSupportInfo(int, int);
+    method public int getEmcBearerSupport();
+    method public int getVopsSupport();
+    method public boolean isEmergencyServiceFallbackSupported();
+    method public boolean isEmergencyServiceSupported();
+    method public boolean isVopsSupported();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.LteVopsSupportInfo> CREATOR;
+    field @Deprecated public static final int LTE_STATUS_NOT_AVAILABLE = 1; // 0x1
+    field public static final int LTE_STATUS_NOT_SUPPORTED = 3; // 0x3
+    field public static final int LTE_STATUS_SUPPORTED = 2; // 0x2
+  }
+
+  public class MbmsDownloadSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_DOWNLOAD_SERVICE_ACTION = "android.telephony.action.EmbmsDownload";
+  }
+
+  public class MbmsGroupCallSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_GROUP_CALL_SERVICE_ACTION = "android.telephony.action.EmbmsGroupCall";
+  }
+
+  public class MbmsStreamingSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_STREAMING_SERVICE_ACTION = "android.telephony.action.EmbmsStreaming";
+  }
+
+  public final class ModemActivityInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.telephony.ModemActivityInfo getDelta(@NonNull android.telephony.ModemActivityInfo);
+    method public long getIdleTimeMillis();
+    method public static int getNumTxPowerLevels();
+    method public long getReceiveTimeMillis();
+    method public long getSleepTimeMillis();
+    method public long getTimestampMillis();
+    method public long getTransmitDurationMillisAtPowerLevel(int);
+    method @NonNull public android.util.Range<java.lang.Integer> getTransmitPowerRange(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
+    field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
+    field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
+    field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
+    field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
+    field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
+  }
+
+  public final class NetworkRegistrationInfo implements android.os.Parcelable {
+    method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo();
+    method public int getRegistrationState();
+    method public int getRejectCause();
+    method public int getRoamingType();
+    method public boolean isEmergencyEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int REGISTRATION_STATE_DENIED = 3; // 0x3
+    field public static final int REGISTRATION_STATE_HOME = 1; // 0x1
+    field public static final int REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING = 0; // 0x0
+    field public static final int REGISTRATION_STATE_NOT_REGISTERED_SEARCHING = 2; // 0x2
+    field public static final int REGISTRATION_STATE_ROAMING = 5; // 0x5
+    field public static final int REGISTRATION_STATE_UNKNOWN = 4; // 0x4
+  }
+
+  public static final class NetworkRegistrationInfo.Builder {
+    ctor public NetworkRegistrationInfo.Builder();
+    method @NonNull public android.telephony.NetworkRegistrationInfo build();
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAccessNetworkTechnology(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAvailableServices(@NonNull java.util.List<java.lang.Integer>);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setCellIdentity(@Nullable android.telephony.CellIdentity);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setDomain(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setEmergencyOnly(boolean);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegisteredPlmn(@Nullable String);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegistrationState(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRejectCause(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setTransportType(int);
+  }
+
+  public abstract class NetworkService extends android.app.Service {
+    ctor public NetworkService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public abstract android.telephony.NetworkService.NetworkServiceProvider onCreateNetworkServiceProvider(int);
+    field public static final String SERVICE_INTERFACE = "android.telephony.NetworkService";
+  }
+
+  public abstract class NetworkService.NetworkServiceProvider implements java.lang.AutoCloseable {
+    ctor public NetworkService.NetworkServiceProvider(int);
+    method public abstract void close();
+    method public final int getSlotIndex();
+    method public final void notifyNetworkRegistrationInfoChanged();
+    method public void requestNetworkRegistrationInfo(int, @NonNull android.telephony.NetworkServiceCallback);
+  }
+
+  public class NetworkServiceCallback {
+    method public void onRequestNetworkRegistrationInfoComplete(int, @Nullable android.telephony.NetworkRegistrationInfo);
+    field public static final int RESULT_ERROR_BUSY = 3; // 0x3
+    field public static final int RESULT_ERROR_FAILED = 5; // 0x5
+    field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4
+    field public static final int RESULT_ERROR_INVALID_ARG = 2; // 0x2
+    field public static final int RESULT_ERROR_UNSUPPORTED = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public final class NrVopsSupportInfo extends android.telephony.VopsSupportInfo {
+    ctor public NrVopsSupportInfo(int, int, int);
+    method public int getEmcSupport();
+    method public int getEmfSupport();
+    method public int getVopsSupport();
+    method public boolean isEmergencyServiceFallbackSupported();
+    method public boolean isEmergencyServiceSupported();
+    method public boolean isVopsSupported();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NrVopsSupportInfo> CREATOR;
+    field public static final int NR_STATUS_EMC_5GCN_ONLY = 1; // 0x1
+    field public static final int NR_STATUS_EMC_EUTRA_5GCN_ONLY = 2; // 0x2
+    field public static final int NR_STATUS_EMC_NOT_SUPPORTED = 0; // 0x0
+    field public static final int NR_STATUS_EMC_NR_EUTRA_5GCN = 3; // 0x3
+    field public static final int NR_STATUS_EMF_5GCN_ONLY = 1; // 0x1
+    field public static final int NR_STATUS_EMF_EUTRA_5GCN_ONLY = 2; // 0x2
+    field public static final int NR_STATUS_EMF_NOT_SUPPORTED = 0; // 0x0
+    field public static final int NR_STATUS_EMF_NR_EUTRA_5GCN = 3; // 0x3
+    field public static final int NR_STATUS_VOPS_3GPP_SUPPORTED = 1; // 0x1
+    field public static final int NR_STATUS_VOPS_NON_3GPP_SUPPORTED = 2; // 0x2
+    field public static final int NR_STATUS_VOPS_NOT_SUPPORTED = 0; // 0x0
+  }
+
+  public interface NumberVerificationCallback {
+    method public default void onCallReceived(@NonNull String);
+    method public default void onVerificationFailed(int);
+    field public static final int REASON_CONCURRENT_REQUESTS = 4; // 0x4
+    field public static final int REASON_IN_ECBM = 5; // 0x5
+    field public static final int REASON_IN_EMERGENCY_CALL = 6; // 0x6
+    field public static final int REASON_NETWORK_NOT_AVAILABLE = 2; // 0x2
+    field public static final int REASON_TIMED_OUT = 1; // 0x1
+    field public static final int REASON_TOO_MANY_CALLS = 3; // 0x3
+    field public static final int REASON_UNSPECIFIED = 0; // 0x0
+  }
+
+  public final class PhoneCapability implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public int[] getDeviceNrCapabilities();
+    method @IntRange(from=1) public int getMaxActiveDataSubscriptions();
+    method @IntRange(from=1) public int getMaxActiveVoiceSubscriptions();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhoneCapability> CREATOR;
+    field public static final int DEVICE_NR_CAPABILITY_NSA = 1; // 0x1
+    field public static final int DEVICE_NR_CAPABILITY_SA = 2; // 0x2
+  }
+
+  public final class PhoneNumberRange implements android.os.Parcelable {
+    ctor public PhoneNumberRange(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
+    method public int describeContents();
+    method public boolean matches(@NonNull String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhoneNumberRange> CREATOR;
+  }
+
+  public class PhoneNumberUtils {
+    method @NonNull public static String getUsernameFromUriNumber(@NonNull String);
+    method public static boolean isUriNumber(@Nullable String);
+    method public static boolean isVoiceMailNumber(@NonNull android.content.Context, int, @Nullable String);
+  }
+
+  @Deprecated public class PhoneStateListener {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber);
+    method @Deprecated public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onRadioPowerStateChanged(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onSrvccStateChanged(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onVoiceActivationStateChanged(int);
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_CALL_ATTRIBUTES_CHANGED = 67108864; // 0x4000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int LISTEN_OUTGOING_EMERGENCY_CALL = 268435456; // 0x10000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int LISTEN_OUTGOING_EMERGENCY_SMS = 536870912; // 0x20000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_PRECISE_CALL_STATE = 2048; // 0x800
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_RADIO_POWER_STATE_CHANGED = 8388608; // 0x800000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_SRVCC_STATE_CHANGED = 16384; // 0x4000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_VOICE_ACTIVATION_STATE = 131072; // 0x20000
+  }
+
+  public final class PinResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAttemptsRemaining();
+    method public int getResult();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PinResult> CREATOR;
+    field public static final int PIN_RESULT_TYPE_ABORTED = 3; // 0x3
+    field public static final int PIN_RESULT_TYPE_FAILURE = 2; // 0x2
+    field public static final int PIN_RESULT_TYPE_INCORRECT = 1; // 0x1
+    field public static final int PIN_RESULT_TYPE_SUCCESS = 0; // 0x0
+  }
+
+  public final class PreciseCallState implements android.os.Parcelable {
+    ctor public PreciseCallState(int, int, int, int, int);
+    method public int describeContents();
+    method public int getBackgroundCallState();
+    method public int getForegroundCallState();
+    method public int getRingingCallState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PreciseCallState> CREATOR;
+    field public static final int PRECISE_CALL_STATE_ACTIVE = 1; // 0x1
+    field public static final int PRECISE_CALL_STATE_ALERTING = 4; // 0x4
+    field public static final int PRECISE_CALL_STATE_DIALING = 3; // 0x3
+    field public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; // 0x7
+    field public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; // 0x8
+    field public static final int PRECISE_CALL_STATE_HOLDING = 2; // 0x2
+    field public static final int PRECISE_CALL_STATE_IDLE = 0; // 0x0
+    field public static final int PRECISE_CALL_STATE_INCOMING = 5; // 0x5
+    field public static final int PRECISE_CALL_STATE_NOT_VALID = -1; // 0xffffffff
+    field public static final int PRECISE_CALL_STATE_WAITING = 6; // 0x6
+  }
+
+  public final class PreciseDataConnectionState implements android.os.Parcelable {
+    method @Deprecated @NonNull public String getDataConnectionApn();
+    method @Deprecated public int getDataConnectionApnTypeBitMask();
+    method @Deprecated public int getDataConnectionFailCause();
+    method @Deprecated public int getDataConnectionState();
+  }
+
+  public final class PreciseDisconnectCause {
+    field public static final int ACCESS_CLASS_BLOCKED = 260; // 0x104
+    field public static final int ACCESS_INFORMATION_DISCARDED = 43; // 0x2b
+    field public static final int ACM_LIMIT_EXCEEDED = 68; // 0x44
+    field public static final int BEARER_CAPABILITY_NOT_AUTHORIZED = 57; // 0x39
+    field public static final int BEARER_NOT_AVAIL = 58; // 0x3a
+    field public static final int BEARER_SERVICE_NOT_IMPLEMENTED = 65; // 0x41
+    field public static final int BUSY = 17; // 0x11
+    field public static final int CALL_BARRED = 240; // 0xf0
+    field public static final int CALL_REJECTED = 21; // 0x15
+    field public static final int CDMA_ACCESS_BLOCKED = 1009; // 0x3f1
+    field public static final int CDMA_ACCESS_FAILURE = 1006; // 0x3ee
+    field public static final int CDMA_DROP = 1001; // 0x3e9
+    field public static final int CDMA_INTERCEPT = 1002; // 0x3ea
+    field public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000; // 0x3e8
+    field public static final int CDMA_NOT_EMERGENCY = 1008; // 0x3f0
+    field public static final int CDMA_PREEMPTED = 1007; // 0x3ef
+    field public static final int CDMA_REORDER = 1003; // 0x3eb
+    field public static final int CDMA_RETRY_ORDER = 1005; // 0x3ed
+    field public static final int CDMA_SO_REJECT = 1004; // 0x3ec
+    field public static final int CHANNEL_NOT_AVAIL = 44; // 0x2c
+    field public static final int CHANNEL_UNACCEPTABLE = 6; // 0x6
+    field public static final int CONDITIONAL_IE_ERROR = 100; // 0x64
+    field public static final int DESTINATION_OUT_OF_ORDER = 27; // 0x1b
+    field public static final int ERROR_UNSPECIFIED = 65535; // 0xffff
+    field public static final int FACILITY_REJECTED = 29; // 0x1d
+    field public static final int FDN_BLOCKED = 241; // 0xf1
+    field public static final int IMEI_NOT_ACCEPTED = 243; // 0xf3
+    field public static final int IMSI_UNKNOWN_IN_VLR = 242; // 0xf2
+    field public static final int INCOMING_CALLS_BARRED_WITHIN_CUG = 55; // 0x37
+    field public static final int INCOMPATIBLE_DESTINATION = 88; // 0x58
+    field public static final int INFORMATION_ELEMENT_NON_EXISTENT = 99; // 0x63
+    field public static final int INTERWORKING_UNSPECIFIED = 127; // 0x7f
+    field public static final int INVALID_MANDATORY_INFORMATION = 96; // 0x60
+    field public static final int INVALID_NUMBER_FORMAT = 28; // 0x1c
+    field public static final int INVALID_TRANSACTION_IDENTIFIER = 81; // 0x51
+    field public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101; // 0x65
+    field public static final int MESSAGE_TYPE_NON_IMPLEMENTED = 97; // 0x61
+    field public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98; // 0x62
+    field public static final int NETWORK_DETACH = 261; // 0x105
+    field public static final int NETWORK_OUT_OF_ORDER = 38; // 0x26
+    field public static final int NETWORK_REJECT = 252; // 0xfc
+    field public static final int NETWORK_RESP_TIMEOUT = 251; // 0xfb
+    field public static final int NORMAL = 16; // 0x10
+    field public static final int NORMAL_UNSPECIFIED = 31; // 0x1f
+    field public static final int NOT_VALID = -1; // 0xffffffff
+    field public static final int NO_ANSWER_FROM_USER = 19; // 0x13
+    field public static final int NO_CIRCUIT_AVAIL = 34; // 0x22
+    field public static final int NO_DISCONNECT_CAUSE_AVAILABLE = 0; // 0x0
+    field public static final int NO_ROUTE_TO_DESTINATION = 3; // 0x3
+    field public static final int NO_USER_RESPONDING = 18; // 0x12
+    field public static final int NO_VALID_SIM = 249; // 0xf9
+    field public static final int NUMBER_CHANGED = 22; // 0x16
+    field public static final int OEM_CAUSE_1 = 61441; // 0xf001
+    field public static final int OEM_CAUSE_10 = 61450; // 0xf00a
+    field public static final int OEM_CAUSE_11 = 61451; // 0xf00b
+    field public static final int OEM_CAUSE_12 = 61452; // 0xf00c
+    field public static final int OEM_CAUSE_13 = 61453; // 0xf00d
+    field public static final int OEM_CAUSE_14 = 61454; // 0xf00e
+    field public static final int OEM_CAUSE_15 = 61455; // 0xf00f
+    field public static final int OEM_CAUSE_2 = 61442; // 0xf002
+    field public static final int OEM_CAUSE_3 = 61443; // 0xf003
+    field public static final int OEM_CAUSE_4 = 61444; // 0xf004
+    field public static final int OEM_CAUSE_5 = 61445; // 0xf005
+    field public static final int OEM_CAUSE_6 = 61446; // 0xf006
+    field public static final int OEM_CAUSE_7 = 61447; // 0xf007
+    field public static final int OEM_CAUSE_8 = 61448; // 0xf008
+    field public static final int OEM_CAUSE_9 = 61449; // 0xf009
+    field public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 70; // 0x46
+    field public static final int OPERATOR_DETERMINED_BARRING = 8; // 0x8
+    field public static final int OUT_OF_SRV = 248; // 0xf8
+    field public static final int PREEMPTION = 25; // 0x19
+    field public static final int PROTOCOL_ERROR_UNSPECIFIED = 111; // 0x6f
+    field public static final int QOS_NOT_AVAIL = 49; // 0x31
+    field public static final int RADIO_ACCESS_FAILURE = 253; // 0xfd
+    field public static final int RADIO_INTERNAL_ERROR = 250; // 0xfa
+    field public static final int RADIO_LINK_FAILURE = 254; // 0xfe
+    field public static final int RADIO_LINK_LOST = 255; // 0xff
+    field public static final int RADIO_OFF = 247; // 0xf7
+    field public static final int RADIO_RELEASE_ABNORMAL = 259; // 0x103
+    field public static final int RADIO_RELEASE_NORMAL = 258; // 0x102
+    field public static final int RADIO_SETUP_FAILURE = 257; // 0x101
+    field public static final int RADIO_UPLINK_FAILURE = 256; // 0x100
+    field public static final int RECOVERY_ON_TIMER_EXPIRED = 102; // 0x66
+    field public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED = 69; // 0x45
+    field public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED = 50; // 0x32
+    field public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 47; // 0x2f
+    field public static final int SEMANTICALLY_INCORRECT_MESSAGE = 95; // 0x5f
+    field public static final int SERVICE_OPTION_NOT_AVAILABLE = 63; // 0x3f
+    field public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79; // 0x4f
+    field public static final int STATUS_ENQUIRY = 30; // 0x1e
+    field public static final int SWITCHING_CONGESTION = 42; // 0x2a
+    field public static final int TEMPORARY_FAILURE = 41; // 0x29
+    field public static final int UNOBTAINABLE_NUMBER = 1; // 0x1
+    field public static final int USER_NOT_MEMBER_OF_CUG = 87; // 0x57
+  }
+
+  public class ServiceState implements android.os.Parcelable {
+    method @Nullable public android.telephony.NetworkRegistrationInfo getNetworkRegistrationInfo(int, int);
+    method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForDomain(int);
+    method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForTransportType(int);
+    field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2
+    field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3
+    field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0
+    field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1
+  }
+
+  public final class SmsCbCmasInfo implements android.os.Parcelable {
+    ctor public SmsCbCmasInfo(int, int, int, int, int, int);
+    method public int describeContents();
+    method public int getCategory();
+    method public int getCertainty();
+    method public int getMessageClass();
+    method public int getResponseType();
+    method public int getSeverity();
+    method public int getUrgency();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CMAS_CATEGORY_CBRNE = 10; // 0xa
+    field public static final int CMAS_CATEGORY_ENV = 7; // 0x7
+    field public static final int CMAS_CATEGORY_FIRE = 5; // 0x5
+    field public static final int CMAS_CATEGORY_GEO = 0; // 0x0
+    field public static final int CMAS_CATEGORY_HEALTH = 6; // 0x6
+    field public static final int CMAS_CATEGORY_INFRA = 9; // 0x9
+    field public static final int CMAS_CATEGORY_MET = 1; // 0x1
+    field public static final int CMAS_CATEGORY_OTHER = 11; // 0xb
+    field public static final int CMAS_CATEGORY_RESCUE = 4; // 0x4
+    field public static final int CMAS_CATEGORY_SAFETY = 2; // 0x2
+    field public static final int CMAS_CATEGORY_SECURITY = 3; // 0x3
+    field public static final int CMAS_CATEGORY_TRANSPORT = 8; // 0x8
+    field public static final int CMAS_CATEGORY_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_CERTAINTY_LIKELY = 1; // 0x1
+    field public static final int CMAS_CERTAINTY_OBSERVED = 0; // 0x0
+    field public static final int CMAS_CERTAINTY_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY = 3; // 0x3
+    field public static final int CMAS_CLASS_CMAS_EXERCISE = 5; // 0x5
+    field public static final int CMAS_CLASS_EXTREME_THREAT = 1; // 0x1
+    field public static final int CMAS_CLASS_OPERATOR_DEFINED_USE = 6; // 0x6
+    field public static final int CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT = 0; // 0x0
+    field public static final int CMAS_CLASS_REQUIRED_MONTHLY_TEST = 4; // 0x4
+    field public static final int CMAS_CLASS_SEVERE_THREAT = 2; // 0x2
+    field public static final int CMAS_CLASS_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_RESPONSE_TYPE_ASSESS = 6; // 0x6
+    field public static final int CMAS_RESPONSE_TYPE_AVOID = 5; // 0x5
+    field public static final int CMAS_RESPONSE_TYPE_EVACUATE = 1; // 0x1
+    field public static final int CMAS_RESPONSE_TYPE_EXECUTE = 3; // 0x3
+    field public static final int CMAS_RESPONSE_TYPE_MONITOR = 4; // 0x4
+    field public static final int CMAS_RESPONSE_TYPE_NONE = 7; // 0x7
+    field public static final int CMAS_RESPONSE_TYPE_PREPARE = 2; // 0x2
+    field public static final int CMAS_RESPONSE_TYPE_SHELTER = 0; // 0x0
+    field public static final int CMAS_RESPONSE_TYPE_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_SEVERITY_EXTREME = 0; // 0x0
+    field public static final int CMAS_SEVERITY_SEVERE = 1; // 0x1
+    field public static final int CMAS_SEVERITY_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_URGENCY_EXPECTED = 1; // 0x1
+    field public static final int CMAS_URGENCY_IMMEDIATE = 0; // 0x0
+    field public static final int CMAS_URGENCY_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbCmasInfo> CREATOR;
+  }
+
+  public final class SmsCbEtwsInfo implements android.os.Parcelable {
+    ctor public SmsCbEtwsInfo(int, boolean, boolean, boolean, @Nullable byte[]);
+    method public int describeContents();
+    method @Nullable public byte[] getPrimaryNotificationSignature();
+    method public long getPrimaryNotificationTimestamp();
+    method public int getWarningType();
+    method public boolean isEmergencyUserAlert();
+    method public boolean isPopupAlert();
+    method public boolean isPrimary();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbEtwsInfo> CREATOR;
+    field public static final int ETWS_WARNING_TYPE_EARTHQUAKE = 0; // 0x0
+    field public static final int ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI = 2; // 0x2
+    field public static final int ETWS_WARNING_TYPE_OTHER_EMERGENCY = 4; // 0x4
+    field public static final int ETWS_WARNING_TYPE_TEST_MESSAGE = 3; // 0x3
+    field public static final int ETWS_WARNING_TYPE_TSUNAMI = 1; // 0x1
+    field public static final int ETWS_WARNING_TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class SmsCbLocation implements android.os.Parcelable {
+    ctor public SmsCbLocation(@NonNull String, int, int);
+    method public int describeContents();
+    method public int getCid();
+    method public int getLac();
+    method @NonNull public String getPlmn();
+    method public boolean isInLocationArea(@NonNull android.telephony.SmsCbLocation);
+    method public boolean isInLocationArea(@Nullable String, int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbLocation> CREATOR;
+  }
+
+  public final class SmsCbMessage implements android.os.Parcelable {
+    ctor public SmsCbMessage(int, int, int, @NonNull android.telephony.SmsCbLocation, int, @Nullable String, int, @Nullable String, int, @Nullable android.telephony.SmsCbEtwsInfo, @Nullable android.telephony.SmsCbCmasInfo, int, @Nullable java.util.List<android.telephony.CbGeoUtils.Geometry>, long, int, int);
+    method @NonNull public static android.telephony.SmsCbMessage createFromCursor(@NonNull android.database.Cursor);
+    method public int describeContents();
+    method @Nullable public android.telephony.SmsCbCmasInfo getCmasWarningInfo();
+    method @NonNull public android.content.ContentValues getContentValues();
+    method public int getDataCodingScheme();
+    method @Nullable public android.telephony.SmsCbEtwsInfo getEtwsWarningInfo();
+    method public int getGeographicalScope();
+    method @NonNull public java.util.List<android.telephony.CbGeoUtils.Geometry> getGeometries();
+    method @Nullable public String getLanguageCode();
+    method @NonNull public android.telephony.SmsCbLocation getLocation();
+    method public int getMaximumWaitingDuration();
+    method @Nullable public String getMessageBody();
+    method public int getMessageFormat();
+    method public int getMessagePriority();
+    method public long getReceivedTime();
+    method public int getSerialNumber();
+    method public int getServiceCategory();
+    method public int getSlotIndex();
+    method public int getSubscriptionId();
+    method public boolean isCmasMessage();
+    method public boolean isEmergencyMessage();
+    method public boolean isEtwsMessage();
+    method public boolean needGeoFencingCheck();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbMessage> CREATOR;
+    field public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE = 3; // 0x3
+    field public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE = 0; // 0x0
+    field public static final int GEOGRAPHICAL_SCOPE_LOCATION_AREA_WIDE = 2; // 0x2
+    field public static final int GEOGRAPHICAL_SCOPE_PLMN_WIDE = 1; // 0x1
+    field public static final int MAXIMUM_WAIT_TIME_NOT_SET = 255; // 0xff
+    field public static final int MESSAGE_FORMAT_3GPP = 1; // 0x1
+    field public static final int MESSAGE_FORMAT_3GPP2 = 2; // 0x2
+    field public static final int MESSAGE_PRIORITY_EMERGENCY = 3; // 0x3
+    field public static final int MESSAGE_PRIORITY_INTERACTIVE = 1; // 0x1
+    field public static final int MESSAGE_PRIORITY_NORMAL = 0; // 0x0
+    field public static final int MESSAGE_PRIORITY_URGENT = 2; // 0x2
+  }
+
+  public final class SmsManager {
+    method public boolean disableCellBroadcastRange(int, int, int);
+    method public boolean enableCellBroadcastRange(int, int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getPremiumSmsConsent(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_CELL_BROADCASTS) public void resetAllCellBroadcastRanges();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void sendMultipartTextMessageWithoutPersisting(String, String, java.util.List<java.lang.String>, java.util.List<android.app.PendingIntent>, java.util.List<android.app.PendingIntent>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPremiumSmsConsent(@NonNull String, int);
+    field public static final int PREMIUM_SMS_CONSENT_ALWAYS_ALLOW = 3; // 0x3
+    field public static final int PREMIUM_SMS_CONSENT_ASK_USER = 1; // 0x1
+    field public static final int PREMIUM_SMS_CONSENT_NEVER_ALLOW = 2; // 0x2
+    field public static final int PREMIUM_SMS_CONSENT_UNKNOWN = 0; // 0x0
+  }
+
+  public class SmsMessage {
+    method @Nullable public static android.telephony.SmsMessage createFromNativeSmsSubmitPdu(@NonNull byte[], boolean);
+    method @Nullable public static android.telephony.SmsMessage.SubmitPdu getSmsPdu(int, int, @Nullable String, @NonNull String, @NonNull String, long);
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public static byte[] getSubmitPduEncodedMessage(boolean, @NonNull String, @NonNull String, int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0, to=255) int, @IntRange(from=1, to=255) int, @IntRange(from=1, to=255) int);
+  }
+
+  public class SubscriptionInfo implements android.os.Parcelable {
+    method public boolean areUiccApplicationsEnabled();
+    method @Nullable public java.util.List<android.telephony.UiccAccessRule> getAccessRules();
+    method public int getProfileClass();
+    method public boolean isGroupDisabled();
+  }
+
+  public class SubscriptionManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean canDisablePhysicalSubscription();
+    method public boolean canManageSubscription(@NonNull android.telephony.SubscriptionInfo, @NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int[] getActiveSubscriptionIdList();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.SubscriptionInfo getActiveSubscriptionInfoForIcc(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public byte[] getAllSimSpecificSettingsForBackup();
+    method public java.util.List<android.telephony.SubscriptionInfo> getAvailableSubscriptionInfoList();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int[] getCompleteActiveSubscriptionIdList();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getEnabledSubscriptionId(int);
+    method @NonNull public static android.content.res.Resources getResourcesForSubId(@NonNull android.content.Context, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isSubscriptionEnabled(int);
+    method public void requestEmbeddedSubscriptionInfoListRefresh();
+    method public void requestEmbeddedSubscriptionInfoListRefresh(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void restoreAllSimSpecificSettingsFromBackup(@NonNull byte[]);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultDataSubId(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultVoiceSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSubscriptionEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUiccApplicationsEnabled(int, boolean);
+    field @RequiresPermission(android.Manifest.permission.MANAGE_SUBSCRIPTION_PLANS) public static final String ACTION_SUBSCRIPTION_PLANS_CHANGED = "android.telephony.action.SUBSCRIPTION_PLANS_CHANGED";
+    field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri CROSS_SIM_ENABLED_CONTENT_URI;
+    field @Deprecated public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff
+    field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2
+    field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1
+    field public static final int PROFILE_CLASS_TESTING = 0; // 0x0
+    field public static final int PROFILE_CLASS_UNSET = -1; // 0xffffffff
+    field @NonNull public static final android.net.Uri VT_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_MODE_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
+  }
+
+  public static class SubscriptionPlan.Builder {
+    method @Deprecated public static android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime);
+    method @Deprecated public static android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime);
+    method @Deprecated public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime);
+  }
+
+  public class TelephonyCallback {
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGED = 23; // 0x17
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_ALLOWED_NETWORK_TYPE_LIST_CHANGED = 35; // 0x23
+    field public static final int EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED = 10; // 0xa
+    field @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int EVENT_BARRING_INFO_CHANGED = 32; // 0x20
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_CALL_ATTRIBUTES_CHANGED = 27; // 0x1b
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_CALL_DISCONNECT_CAUSE_CHANGED = 26; // 0x1a
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_CALL_FORWARDING_INDICATOR_CHANGED = 4; // 0x4
+    field public static final int EVENT_CALL_STATE_CHANGED = 6; // 0x6
+    field public static final int EVENT_CARRIER_NETWORK_CHANGED = 17; // 0x11
+    field @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int EVENT_CELL_INFO_CHANGED = 11; // 0xb
+    field @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static final int EVENT_CELL_LOCATION_CHANGED = 5; // 0x5
+    field public static final int EVENT_DATA_ACTIVATION_STATE_CHANGED = 19; // 0x13
+    field public static final int EVENT_DATA_ACTIVITY_CHANGED = 8; // 0x8
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_DATA_CONNECTION_REAL_TIME_INFO_CHANGED = 14; // 0xe
+    field public static final int EVENT_DATA_CONNECTION_STATE_CHANGED = 7; // 0x7
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_DATA_ENABLED_CHANGED = 34; // 0x22
+    field public static final int EVENT_DISPLAY_INFO_CHANGED = 21; // 0x15
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_EMERGENCY_NUMBER_LIST_CHANGED = 25; // 0x19
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_IMS_CALL_DISCONNECT_CAUSE_CHANGED = 28; // 0x1c
+    field @RequiresPermission(android.Manifest.permission.READ_CALL_LOG) public static final int EVENT_LEGACY_CALL_STATE_CHANGED = 36; // 0x24
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_LINK_CAPACITY_ESTIMATE_CHANGED = 37; // 0x25
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_MESSAGE_WAITING_INDICATOR_CHANGED = 3; // 0x3
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_OEM_HOOK_RAW = 15; // 0xf
+    field @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int EVENT_OUTGOING_EMERGENCY_CALL = 29; // 0x1d
+    field @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int EVENT_OUTGOING_EMERGENCY_SMS = 30; // 0x1e
+    field public static final int EVENT_PHONE_CAPABILITY_CHANGED = 22; // 0x16
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED = 33; // 0x21
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_PRECISE_CALL_STATE_CHANGED = 12; // 0xc
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_PRECISE_DATA_CONNECTION_STATE_CHANGED = 13; // 0xd
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_RADIO_POWER_STATE_CHANGED = 24; // 0x18
+    field @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int EVENT_REGISTRATION_FAILURE = 31; // 0x1f
+    field public static final int EVENT_SERVICE_STATE_CHANGED = 1; // 0x1
+    field public static final int EVENT_SIGNAL_STRENGTHS_CHANGED = 9; // 0x9
+    field public static final int EVENT_SIGNAL_STRENGTH_CHANGED = 2; // 0x2
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_SRVCC_STATE_CHANGED = 16; // 0x10
+    field public static final int EVENT_USER_MOBILE_DATA_STATE_CHANGED = 20; // 0x14
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_VOICE_ACTIVATION_STATE_CHANGED = 18; // 0x12
+  }
+
+  public static interface TelephonyCallback.AllowedNetworkTypesListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onAllowedNetworkTypesChanged(int, long);
+  }
+
+  public static interface TelephonyCallback.CallAttributesListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes);
+  }
+
+  public static interface TelephonyCallback.DataEnabledListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onDataEnabledChanged(boolean, int);
+  }
+
+  public static interface TelephonyCallback.LinkCapacityEstimateChangedListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onLinkCapacityEstimateChanged(@NonNull java.util.List<android.telephony.LinkCapacityEstimate>);
+  }
+
+  public static interface TelephonyCallback.OutgoingEmergencyCallListener {
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
+  }
+
+  public static interface TelephonyCallback.OutgoingEmergencySmsListener {
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber, int);
+  }
+
+  public static interface TelephonyCallback.PhoneCapabilityListener {
+    method public void onPhoneCapabilityChanged(@NonNull android.telephony.PhoneCapability);
+  }
+
+  public static interface TelephonyCallback.PreciseCallStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
+  }
+
+  public static interface TelephonyCallback.RadioPowerStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onRadioPowerStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.SrvccStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onSrvccStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.VoiceActivationStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onVoiceActivationStateChanged(int);
+  }
+
+  public final class TelephonyHistogram implements android.os.Parcelable {
+    ctor public TelephonyHistogram(int, int, int);
+    ctor public TelephonyHistogram(android.telephony.TelephonyHistogram);
+    ctor public TelephonyHistogram(android.os.Parcel);
+    method public void addTimeTaken(int);
+    method public int describeContents();
+    method public int getAverageTime();
+    method public int getBucketCount();
+    method public int[] getBucketCounters();
+    method public int[] getBucketEndPoints();
+    method public int getCategory();
+    method public int getId();
+    method public int getMaxTime();
+    method public int getMinTime();
+    method public int getSampleCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.TelephonyHistogram> CREATOR;
+    field public static final int TELEPHONY_CATEGORY_RIL = 1; // 0x1
+  }
+
+  public class TelephonyManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) @WorkerThread public void bootstrapAuthenticationRequest(int, @NonNull android.net.Uri, @NonNull android.telephony.gba.UaSecurityProtocolIdentifier, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.BootstrapAuthenticationCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void call(String, String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult changeIccLockPin(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int checkCarrierPrivilegesForPackage(String);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int checkCarrierPrivilegesForPackageAnyPhone(String);
+    method public void dial(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean disableDataConnectivity();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableDataConnectivity();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableModemForSlot(int, boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void enableVideoCalling(boolean);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getAidForAppType(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getAllowedNetworkTypes();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getAllowedNetworkTypesBitmask();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getAllowedNetworkTypesForReason(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.ComponentName getAndUpdateDefaultRespondViaMessageApplication();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getCallForwarding(int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CallForwardingInfoCallback);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getCallWaitingStatus(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.ImsiEncryptionInfo getCarrierInfoForImsiEncryption(int);
+    method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<java.lang.String> getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCarrierPrivilegeStatus(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<java.lang.String> getCarrierPrivilegedPackagesForAllActiveSubscriptions();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.CarrierRestrictionRules getCarrierRestrictionRules();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCdmaEnhancedRoamingIndicatorDisplayNumber();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMdn();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMdn(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMin();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMin(int);
+    method public String getCdmaPrlVersion();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCdmaRoamingMode();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCdmaSubscriptionMode();
+    method public int getCurrentPhoneType();
+    method public int getCurrentPhoneType(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getDataActivationState();
+    method @Deprecated public boolean getDataEnabled();
+    method @Deprecated public boolean getDataEnabled(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.ComponentName getDefaultRespondViaMessageApplication();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getEmergencyCallbackMode();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getEmergencyNumberDbVersion();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimIst();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.Map<java.lang.Integer,java.lang.Integer> getLogicalToPhysicalSlotMapping();
+    method public int getMaxNumberOfSimultaneouslyActiveSims();
+    method public static long getMaxNumberVerificationTimeoutMillis();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String[] getMergedImsisFromGroup();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.PhoneCapability getPhoneCapability();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getPreferredNetworkTypeBitmask();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public int getRadioPowerState();
+    method public int getSimApplicationState();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getSimApplicationState(int);
+    method public int getSimCardState();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getSimCardState(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.Locale getSimLocale();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getSupportedRadioAccessFamily();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.telephony.RadioAccessSpecifier> getSystemSelectionChannels();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.UiccSlotInfo[] getUiccSlotsInfo();
+    method @Nullable public android.os.Bundle getVisualVoicemailSettings();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoiceActivationState();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handlePinMmi(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handlePinMmiForSubscriber(int, String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean iccCloseLogicalChannelBySlot(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannelBySlot(int, @Nullable String, int);
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduBasicChannelBySlot(int, int, int, int, int, int, @Nullable String);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduLogicalChannelBySlot(int, int, int, int, int, int, int, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAnyRadioPoweredOn();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isApnMetered(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isApplicationOnUicc(int);
+    method public boolean isDataConnectivityPossible();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isDataEnabledForApn(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isEmergencyAssistanceEnabled();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean isIccLockEnabled();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isInEmergencySmsMode();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isLteCdmaEvdoGsmWcdmaEnabled();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isMobileDataPolicyEnabled(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isNrDualConnectivityEnabled();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isOpportunisticNetworkEnabled();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isPotentialEmergencyNumber(@NonNull String);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRadioOn();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isTetheringApnRequired();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isVideoCallingEnabled();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isVisualVoicemailEnabled(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean matchesCurrentSimOperator(@NonNull String, int, @Nullable String);
+    method public boolean needsOtaServiceProvisioning();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyOtaEmergencyNumberDbInstalled();
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public int prepareForUnattendedReboot();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean rebootRadio();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void reportDefaultNetworkStatus(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.MODIFY_PHONE_STATE}) public void requestCellInfoUpdate(@NonNull android.os.WorkSource, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CellInfoCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void requestModemActivityInfo(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.telephony.ModemActivityInfo,android.telephony.TelephonyManager.ModemActivityInfoException>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void requestNumberVerification(@NonNull android.telephony.PhoneNumberRange, long, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.NumberVerificationCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetAllCarrierActions();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetCarrierKeysForImsiEncryption();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void resetIms(int);
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void resetOtaEmergencyNumberDbFilePath();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean resetRadioConfig();
+    method @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL) public void resetSettings();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int sendThermalMitigationRequest(@NonNull android.telephony.ThermalMitigationRequest);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setAllowedCarriers(int, java.util.List<android.service.carrier.CarrierIdentifier>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setAllowedNetworkTypes(long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAllowedNetworkTypesForReason(int, long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCallForwarding(@NonNull android.telephony.CallForwardingInfo, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCallWaitingEnabled(boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCarrierDataEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setCarrierRestrictionRules(@NonNull android.telephony.CarrierRestrictionRules);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCdmaRoamingMode(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCdmaSubscriptionMode(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataActivationState(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataRoamingEnabled(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult setIccLockEnabled(boolean, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMobileDataPolicyEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMultiSimCarrierRestriction(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setNrDualConnectivityState(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setOpportunisticNetworkState(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setPreferredNetworkTypeBitmask(long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadio(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRadioEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadioPower(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerState(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerState(int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerStateForSlot(int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerStateForSlot(int, int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSystemSelectionChannels(@NonNull java.util.List<android.telephony.RadioAccessSpecifier>, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSystemSelectionChannels(@NonNull java.util.List<android.telephony.RadioAccessSpecifier>);
+    method @Deprecated public void setVisualVoicemailEnabled(android.telecom.PhoneAccountHandle, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoiceActivationState(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void shutdownAllRadios();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult supplyIccLockPin(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult supplyIccLockPuk(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean supplyPin(String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPinReportResult(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean supplyPuk(String, String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPukReportResult(String, String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean switchSlots(int[]);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void toggleRadioOnOff();
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void updateOtaEmergencyNumberDbFilePath(@NonNull android.os.ParcelFileDescriptor);
+    method public void updateServiceLocation();
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final String ACTION_ANOMALY_REPORTED = "android.telephony.action.ANOMALY_REPORTED";
+    field public static final String ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_EMERGENCY_ASSISTANCE = "android.telephony.action.EMERGENCY_ASSISTANCE";
+    field public static final String ACTION_EMERGENCY_CALLBACK_MODE_CHANGED = "android.intent.action.EMERGENCY_CALLBACK_MODE_CHANGED";
+    field public static final String ACTION_EMERGENCY_CALL_STATE_CHANGED = "android.intent.action.EMERGENCY_CALL_STATE_CHANGED";
+    field public static final String ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE = "com.android.omadm.service.CONFIGURATION_UPDATE";
+    field public static final String ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS = "android.telephony.action.SHOW_NOTICE_ECM_BLOCK_OTHERS";
+    field public static final String ACTION_SIM_APPLICATION_STATE_CHANGED = "android.telephony.action.SIM_APPLICATION_STATE_CHANGED";
+    field public static final String ACTION_SIM_CARD_STATE_CHANGED = "android.telephony.action.SIM_CARD_STATE_CHANGED";
+    field public static final String ACTION_SIM_SLOT_STATUS_CHANGED = "android.telephony.action.SIM_SLOT_STATUS_CHANGED";
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_CARRIER = 2; // 0x2
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G = 3; // 0x3
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_POWER = 1; // 0x1
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_USER = 0; // 0x0
+    field public static final int CALL_WAITING_STATUS_DISABLED = 2; // 0x2
+    field public static final int CALL_WAITING_STATUS_ENABLED = 1; // 0x1
+    field public static final int CALL_WAITING_STATUS_NOT_SUPPORTED = 4; // 0x4
+    field public static final int CALL_WAITING_STATUS_UNKNOWN_ERROR = 3; // 0x3
+    field public static final String CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE = "CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE";
+    field public static final String CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE = "CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE";
+    field public static final String CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING = "CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING";
+    field public static final String CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK = "CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK";
+    field public static final int CARRIER_PRIVILEGE_STATUS_ERROR_LOADING_RULES = -2; // 0xfffffffe
+    field public static final int CARRIER_PRIVILEGE_STATUS_HAS_ACCESS = 1; // 0x1
+    field public static final int CARRIER_PRIVILEGE_STATUS_NO_ACCESS = 0; // 0x0
+    field public static final int CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED = -1; // 0xffffffff
+    field public static final int CDMA_SUBSCRIPTION_NV = 1; // 0x1
+    field public static final int CDMA_SUBSCRIPTION_RUIM_SIM = 0; // 0x0
+    field public static final int CDMA_SUBSCRIPTION_UNKNOWN = -1; // 0xffffffff
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_INVALID_STATE = 4; // 0x4
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_NOT_SUPPORTED = 1; // 0x1
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_RADIO_ERROR = 3; // 0x3
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_RADIO_NOT_AVAILABLE = 2; // 0x2
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_SUCCESS = 0; // 0x0
+    field public static final String EXTRA_ANOMALY_DESCRIPTION = "android.telephony.extra.ANOMALY_DESCRIPTION";
+    field public static final String EXTRA_ANOMALY_ID = "android.telephony.extra.ANOMALY_ID";
+    field public static final String EXTRA_PHONE_IN_ECM_STATE = "android.telephony.extra.PHONE_IN_ECM_STATE";
+    field public static final String EXTRA_PHONE_IN_EMERGENCY_CALL = "android.telephony.extra.PHONE_IN_EMERGENCY_CALL";
+    field public static final String EXTRA_SIM_STATE = "android.telephony.extra.SIM_STATE";
+    field public static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL = "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";
+    field public static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING = "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING";
+    field public static final int GBA_FAILURE_REASON_FEATURE_NOT_READY = 2; // 0x2
+    field public static final int GBA_FAILURE_REASON_FEATURE_NOT_SUPPORTED = 1; // 0x1
+    field public static final int GBA_FAILURE_REASON_INCORRECT_NAF_ID = 4; // 0x4
+    field public static final int GBA_FAILURE_REASON_NETWORK_FAILURE = 3; // 0x3
+    field public static final int GBA_FAILURE_REASON_SECURITY_PROTOCOL_NOT_SUPPORTED = 5; // 0x5
+    field public static final int GBA_FAILURE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int INVALID_EMERGENCY_NUMBER_DB_VERSION = -1; // 0xffffffff
+    field public static final int KEY_TYPE_EPDG = 1; // 0x1
+    field public static final int KEY_TYPE_WLAN = 2; // 0x2
+    field public static final int MOBILE_DATA_POLICY_DATA_ON_NON_DEFAULT_DURING_VOICE_CALL = 1; // 0x1
+    field public static final int MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED = 2; // 0x2
+    field public static final long NETWORK_TYPE_BITMASK_1xRTT = 64L; // 0x40L
+    field public static final long NETWORK_TYPE_BITMASK_CDMA = 8L; // 0x8L
+    field public static final long NETWORK_TYPE_BITMASK_EDGE = 2L; // 0x2L
+    field public static final long NETWORK_TYPE_BITMASK_EHRPD = 8192L; // 0x2000L
+    field public static final long NETWORK_TYPE_BITMASK_EVDO_0 = 16L; // 0x10L
+    field public static final long NETWORK_TYPE_BITMASK_EVDO_A = 32L; // 0x20L
+    field public static final long NETWORK_TYPE_BITMASK_EVDO_B = 2048L; // 0x800L
+    field public static final long NETWORK_TYPE_BITMASK_GPRS = 1L; // 0x1L
+    field public static final long NETWORK_TYPE_BITMASK_GSM = 32768L; // 0x8000L
+    field public static final long NETWORK_TYPE_BITMASK_HSDPA = 128L; // 0x80L
+    field public static final long NETWORK_TYPE_BITMASK_HSPA = 512L; // 0x200L
+    field public static final long NETWORK_TYPE_BITMASK_HSPAP = 16384L; // 0x4000L
+    field public static final long NETWORK_TYPE_BITMASK_HSUPA = 256L; // 0x100L
+    field public static final long NETWORK_TYPE_BITMASK_IWLAN = 131072L; // 0x20000L
+    field public static final long NETWORK_TYPE_BITMASK_LTE = 4096L; // 0x1000L
+    field public static final long NETWORK_TYPE_BITMASK_LTE_CA = 262144L; // 0x40000L
+    field public static final long NETWORK_TYPE_BITMASK_NR = 524288L; // 0x80000L
+    field public static final long NETWORK_TYPE_BITMASK_TD_SCDMA = 65536L; // 0x10000L
+    field public static final long NETWORK_TYPE_BITMASK_UMTS = 4L; // 0x4L
+    field public static final long NETWORK_TYPE_BITMASK_UNKNOWN = 0L; // 0x0L
+    field public static final int NR_DUAL_CONNECTIVITY_DISABLE = 2; // 0x2
+    field public static final int NR_DUAL_CONNECTIVITY_DISABLE_IMMEDIATE = 3; // 0x3
+    field public static final int NR_DUAL_CONNECTIVITY_ENABLE = 1; // 0x1
+    field public static final int PREPARE_UNATTENDED_REBOOT_ERROR = 2; // 0x2
+    field public static final int PREPARE_UNATTENDED_REBOOT_PIN_REQUIRED = 1; // 0x1
+    field public static final int PREPARE_UNATTENDED_REBOOT_SUCCESS = 0; // 0x0
+    field public static final int RADIO_POWER_OFF = 0; // 0x0
+    field public static final int RADIO_POWER_ON = 1; // 0x1
+    field public static final int RADIO_POWER_UNAVAILABLE = 2; // 0x2
+    field public static final int SET_CARRIER_RESTRICTION_ERROR = 2; // 0x2
+    field public static final int SET_CARRIER_RESTRICTION_NOT_SUPPORTED = 1; // 0x1
+    field public static final int SET_CARRIER_RESTRICTION_SUCCESS = 0; // 0x0
+    field public static final int SET_SIM_POWER_STATE_ALREADY_IN_STATE = 1; // 0x1
+    field public static final int SET_SIM_POWER_STATE_MODEM_ERROR = 2; // 0x2
+    field public static final int SET_SIM_POWER_STATE_NOT_SUPPORTED = 4; // 0x4
+    field public static final int SET_SIM_POWER_STATE_SIM_ERROR = 3; // 0x3
+    field public static final int SET_SIM_POWER_STATE_SUCCESS = 0; // 0x0
+    field public static final int SIM_ACTIVATION_STATE_ACTIVATED = 2; // 0x2
+    field public static final int SIM_ACTIVATION_STATE_ACTIVATING = 1; // 0x1
+    field public static final int SIM_ACTIVATION_STATE_DEACTIVATED = 3; // 0x3
+    field public static final int SIM_ACTIVATION_STATE_RESTRICTED = 4; // 0x4
+    field public static final int SIM_ACTIVATION_STATE_UNKNOWN = 0; // 0x0
+    field public static final int SIM_STATE_LOADED = 10; // 0xa
+    field public static final int SIM_STATE_PRESENT = 11; // 0xb
+    field public static final int SRVCC_STATE_HANDOVER_CANCELED = 3; // 0x3
+    field public static final int SRVCC_STATE_HANDOVER_COMPLETED = 1; // 0x1
+    field public static final int SRVCC_STATE_HANDOVER_FAILED = 2; // 0x2
+    field public static final int SRVCC_STATE_HANDOVER_NONE = -1; // 0xffffffff
+    field public static final int SRVCC_STATE_HANDOVER_STARTED = 0; // 0x0
+    field public static final int THERMAL_MITIGATION_RESULT_INVALID_STATE = 3; // 0x3
+    field public static final int THERMAL_MITIGATION_RESULT_MODEM_ERROR = 1; // 0x1
+    field public static final int THERMAL_MITIGATION_RESULT_MODEM_NOT_AVAILABLE = 2; // 0x2
+    field public static final int THERMAL_MITIGATION_RESULT_SUCCESS = 0; // 0x0
+    field public static final int THERMAL_MITIGATION_RESULT_UNKNOWN_ERROR = 4; // 0x4
+  }
+
+  public static class TelephonyManager.BootstrapAuthenticationCallback {
+    ctor public TelephonyManager.BootstrapAuthenticationCallback();
+    method public void onAuthenticationFailure(int);
+    method public void onKeysAvailable(@NonNull byte[], @NonNull String);
+  }
+
+  public static interface TelephonyManager.CallForwardingInfoCallback {
+    method public void onCallForwardingInfoAvailable(@NonNull android.telephony.CallForwardingInfo);
+    method public void onError(int);
+    field public static final int RESULT_ERROR_FDN_CHECK_FAILURE = 2; // 0x2
+    field public static final int RESULT_ERROR_NOT_SUPPORTED = 3; // 0x3
+    field public static final int RESULT_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public static class TelephonyManager.ModemActivityInfoException extends java.lang.Exception {
+    method public int getErrorCode();
+    field public static final int ERROR_INVALID_INFO_RECEIVED = 2; // 0x2
+    field public static final int ERROR_MODEM_RESPONSE_ERROR = 3; // 0x3
+    field public static final int ERROR_PHONE_NOT_AVAILABLE = 1; // 0x1
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public final class ThermalMitigationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.telephony.DataThrottlingRequest getDataThrottlingRequest();
+    method public int getThermalMitigationAction();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ThermalMitigationRequest> CREATOR;
+    field public static final int THERMAL_MITIGATION_ACTION_DATA_THROTTLING = 0; // 0x0
+    field public static final int THERMAL_MITIGATION_ACTION_RADIO_OFF = 2; // 0x2
+    field public static final int THERMAL_MITIGATION_ACTION_VOICE_ONLY = 1; // 0x1
+  }
+
+  public static final class ThermalMitigationRequest.Builder {
+    ctor public ThermalMitigationRequest.Builder();
+    method @NonNull public android.telephony.ThermalMitigationRequest build();
+    method @NonNull public android.telephony.ThermalMitigationRequest.Builder setDataThrottlingRequest(@NonNull android.telephony.DataThrottlingRequest);
+    method @NonNull public android.telephony.ThermalMitigationRequest.Builder setThermalMitigationAction(int);
+  }
+
+  public final class UiccAccessRule implements android.os.Parcelable {
+    ctor public UiccAccessRule(byte[], @Nullable String, long);
+    method public int describeContents();
+    method public int getCarrierPrivilegeStatus(android.content.pm.PackageInfo);
+    method public int getCarrierPrivilegeStatus(android.content.pm.Signature, String);
+    method public String getCertificateHexString();
+    method @Nullable public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccAccessRule> CREATOR;
+  }
+
+  public class UiccSlotInfo implements android.os.Parcelable {
+    ctor @Deprecated public UiccSlotInfo(boolean, boolean, String, int, int, boolean);
+    method public int describeContents();
+    method public String getCardId();
+    method public int getCardStateInfo();
+    method public boolean getIsActive();
+    method public boolean getIsEuicc();
+    method public boolean getIsExtendedApduSupported();
+    method public int getLogicalSlotIdx();
+    method public boolean isRemovable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CARD_STATE_INFO_ABSENT = 1; // 0x1
+    field public static final int CARD_STATE_INFO_ERROR = 3; // 0x3
+    field public static final int CARD_STATE_INFO_PRESENT = 2; // 0x2
+    field public static final int CARD_STATE_INFO_RESTRICTED = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccSlotInfo> CREATOR;
+  }
+
+  public abstract class VisualVoicemailService extends android.app.Service {
+    method public static final void sendVisualVoicemailSms(android.content.Context, android.telecom.PhoneAccountHandle, String, short, String, android.app.PendingIntent);
+    method public static final void setSmsFilterSettings(android.content.Context, android.telecom.PhoneAccountHandle, android.telephony.VisualVoicemailSmsFilterSettings);
+  }
+
+  public abstract class VopsSupportInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public abstract boolean equals(Object);
+    method public abstract int hashCode();
+    method public abstract boolean isEmergencyServiceFallbackSupported();
+    method public abstract boolean isEmergencyServiceSupported();
+    method public abstract boolean isVopsSupported();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VopsSupportInfo> CREATOR;
+  }
+
+}
+
+package android.telephony.cdma {
+
+  public final class CdmaSmsCbProgramData implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCategory();
+    method public int getOperation();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY = 4099; // 0x1003
+    field public static final int CATEGORY_CMAS_EXTREME_THREAT = 4097; // 0x1001
+    field public static final int CATEGORY_CMAS_LAST_RESERVED_VALUE = 4351; // 0x10ff
+    field public static final int CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT = 4096; // 0x1000
+    field public static final int CATEGORY_CMAS_SEVERE_THREAT = 4098; // 0x1002
+    field public static final int CATEGORY_CMAS_TEST_MESSAGE = 4100; // 0x1004
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.cdma.CdmaSmsCbProgramData> CREATOR;
+    field public static final int OPERATION_ADD_CATEGORY = 1; // 0x1
+    field public static final int OPERATION_CLEAR_CATEGORIES = 2; // 0x2
+    field public static final int OPERATION_DELETE_CATEGORY = 0; // 0x0
+  }
+
+}
+
+package android.telephony.data {
+
+  public class ApnSetting implements android.os.Parcelable {
+    method public static int getApnTypeInt(@NonNull String);
+    method @NonNull public static String getApnTypeString(int);
+    field public static final String TYPE_ALL_STRING = "*";
+    field public static final String TYPE_BIP_STRING = "bip";
+    field public static final String TYPE_CBS_STRING = "cbs";
+    field public static final String TYPE_DEFAULT_STRING = "default";
+    field public static final String TYPE_DUN_STRING = "dun";
+    field public static final String TYPE_EMERGENCY_STRING = "emergency";
+    field public static final String TYPE_FOTA_STRING = "fota";
+    field public static final String TYPE_HIPRI_STRING = "hipri";
+    field public static final String TYPE_IA_STRING = "ia";
+    field public static final String TYPE_IMS_STRING = "ims";
+    field public static final String TYPE_MCX_STRING = "mcx";
+    field public static final String TYPE_MMS_STRING = "mms";
+    field public static final String TYPE_SUPL_STRING = "supl";
+    field public static final String TYPE_VSIM_STRING = "vsim";
+    field public static final String TYPE_XCAP_STRING = "xcap";
+  }
+
+  public final class DataCallResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.LinkAddress> getAddresses();
+    method public int getCause();
+    method @NonNull public java.util.List<java.net.InetAddress> getDnsAddresses();
+    method @NonNull public java.util.List<java.net.InetAddress> getGatewayAddresses();
+    method public int getHandoverFailureMode();
+    method public int getId();
+    method @NonNull public String getInterfaceName();
+    method public int getLinkStatus();
+    method @Deprecated public int getMtu();
+    method public int getMtuV4();
+    method public int getMtuV6();
+    method @NonNull public java.util.List<java.net.InetAddress> getPcscfAddresses();
+    method public int getPduSessionId();
+    method public int getProtocolType();
+    method public long getRetryDurationMillis();
+    method @Nullable public android.telephony.data.NetworkSliceInfo getSliceInfo();
+    method @Deprecated public int getSuggestedRetryTime();
+    method @NonNull public java.util.List<android.telephony.data.TrafficDescriptor> getTrafficDescriptors();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.DataCallResponse> CREATOR;
+    field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 1; // 0x1
+    field public static final int HANDOVER_FAILURE_MODE_LEGACY = 0; // 0x0
+    field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2; // 0x2
+    field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3; // 0x3
+    field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = -1; // 0xffffffff
+    field public static final int LINK_STATUS_ACTIVE = 2; // 0x2
+    field public static final int LINK_STATUS_DORMANT = 1; // 0x1
+    field public static final int LINK_STATUS_INACTIVE = 0; // 0x0
+    field public static final int LINK_STATUS_UNKNOWN = -1; // 0xffffffff
+    field public static final int PDU_SESSION_ID_NOT_SET = 0; // 0x0
+    field public static final int RETRY_DURATION_UNDEFINED = -1; // 0xffffffff
+  }
+
+  public static final class DataCallResponse.Builder {
+    ctor public DataCallResponse.Builder();
+    method @NonNull public android.telephony.data.DataCallResponse build();
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setAddresses(@NonNull java.util.List<android.net.LinkAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setCause(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setDnsAddresses(@NonNull java.util.List<java.net.InetAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setGatewayAddresses(@NonNull java.util.List<java.net.InetAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setHandoverFailureMode(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setId(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setInterfaceName(@NonNull String);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setLinkStatus(int);
+    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setMtu(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV4(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV6(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setPcscfAddresses(@NonNull java.util.List<java.net.InetAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setPduSessionId(@IntRange(from=android.telephony.data.DataCallResponse.PDU_SESSION_ID_NOT_SET, to=15) int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setProtocolType(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setRetryDurationMillis(long);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setSliceInfo(@Nullable android.telephony.data.NetworkSliceInfo);
+    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setSuggestedRetryTime(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setTrafficDescriptors(@NonNull java.util.List<android.telephony.data.TrafficDescriptor>);
+  }
+
+  public final class DataProfile implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getApn();
+    method public int getAuthType();
+    method public int getBearerBitmask();
+    method @Deprecated public int getMtu();
+    method public int getMtuV4();
+    method public int getMtuV6();
+    method @Nullable public String getPassword();
+    method public int getProfileId();
+    method public int getProtocolType();
+    method public int getRoamingProtocolType();
+    method public int getSupportedApnTypesBitmask();
+    method public int getType();
+    method @Nullable public String getUserName();
+    method public boolean isEnabled();
+    method public boolean isPersistent();
+    method public boolean isPreferred();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.DataProfile> CREATOR;
+    field public static final int TYPE_3GPP = 1; // 0x1
+    field public static final int TYPE_3GPP2 = 2; // 0x2
+    field public static final int TYPE_COMMON = 0; // 0x0
+  }
+
+  public static final class DataProfile.Builder {
+    ctor public DataProfile.Builder();
+    method @NonNull public android.telephony.data.DataProfile build();
+    method @NonNull public android.telephony.data.DataProfile.Builder enable(boolean);
+    method @NonNull public android.telephony.data.DataProfile.Builder setApn(@NonNull String);
+    method @NonNull public android.telephony.data.DataProfile.Builder setAuthType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setBearerBitmask(int);
+    method @Deprecated @NonNull public android.telephony.data.DataProfile.Builder setMtu(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setMtuV4(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setMtuV6(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setPassword(@NonNull String);
+    method @NonNull public android.telephony.data.DataProfile.Builder setPersistent(boolean);
+    method @NonNull public android.telephony.data.DataProfile.Builder setPreferred(boolean);
+    method @NonNull public android.telephony.data.DataProfile.Builder setProfileId(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setProtocolType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setRoamingProtocolType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setSupportedApnTypesBitmask(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setUserName(@NonNull String);
+  }
+
+  public abstract class DataService extends android.app.Service {
+    ctor public DataService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public abstract android.telephony.data.DataService.DataServiceProvider onCreateDataServiceProvider(int);
+    field public static final int REQUEST_REASON_HANDOVER = 3; // 0x3
+    field public static final int REQUEST_REASON_NORMAL = 1; // 0x1
+    field public static final int REQUEST_REASON_SHUTDOWN = 2; // 0x2
+    field public static final int REQUEST_REASON_UNKNOWN = 0; // 0x0
+    field public static final String SERVICE_INTERFACE = "android.telephony.data.DataService";
+  }
+
+  public abstract class DataService.DataServiceProvider implements java.lang.AutoCloseable {
+    ctor public DataService.DataServiceProvider(int);
+    method public abstract void close();
+    method public void deactivateDataCall(int, int, @Nullable android.telephony.data.DataServiceCallback);
+    method public final int getSlotIndex();
+    method public final void notifyApnUnthrottled(@NonNull String);
+    method public final void notifyDataCallListChanged(java.util.List<android.telephony.data.DataCallResponse>);
+    method public void requestDataCallList(@NonNull android.telephony.data.DataServiceCallback);
+    method public void setDataProfile(@NonNull java.util.List<android.telephony.data.DataProfile>, boolean, @NonNull android.telephony.data.DataServiceCallback);
+    method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @NonNull android.telephony.data.DataServiceCallback);
+    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @NonNull android.telephony.data.DataServiceCallback);
+    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @IntRange(from=0, to=15) int, @Nullable android.telephony.data.NetworkSliceInfo, @Nullable android.telephony.data.TrafficDescriptor, boolean, @NonNull android.telephony.data.DataServiceCallback);
+  }
+
+  public class DataServiceCallback {
+    method public void onApnUnthrottled(@NonNull String);
+    method public void onDataCallListChanged(@NonNull java.util.List<android.telephony.data.DataCallResponse>);
+    method public void onDeactivateDataCallComplete(int);
+    method public void onRequestDataCallListComplete(int, @NonNull java.util.List<android.telephony.data.DataCallResponse>);
+    method public void onSetDataProfileComplete(int);
+    method public void onSetInitialAttachApnComplete(int);
+    method public void onSetupDataCallComplete(int, @Nullable android.telephony.data.DataCallResponse);
+    field public static final int RESULT_ERROR_BUSY = 3; // 0x3
+    field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4
+    field public static final int RESULT_ERROR_INVALID_ARG = 2; // 0x2
+    field public static final int RESULT_ERROR_UNSUPPORTED = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public final class EpsBearerQosSessionAttributes implements android.os.Parcelable android.net.QosSessionAttributes {
+    method public int describeContents();
+    method public long getGuaranteedDownlinkBitRateKbps();
+    method public long getGuaranteedUplinkBitRateKbps();
+    method public long getMaxDownlinkBitRateKbps();
+    method public long getMaxUplinkBitRateKbps();
+    method public int getQosIdentifier();
+    method @NonNull public java.util.List<java.net.InetSocketAddress> getRemoteAddresses();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.EpsBearerQosSessionAttributes> CREATOR;
+  }
+
+  public final class NrQosSessionAttributes implements android.os.Parcelable android.net.QosSessionAttributes {
+    method public int describeContents();
+    method @NonNull public java.time.Duration getBitRateWindowDuration();
+    method public long getGuaranteedDownlinkBitRateKbps();
+    method public long getGuaranteedUplinkBitRateKbps();
+    method public long getMaxDownlinkBitRateKbps();
+    method public long getMaxUplinkBitRateKbps();
+    method @IntRange(from=1, to=63) public int getQosFlowIdentifier();
+    method public int getQosIdentifier();
+    method @NonNull public java.util.List<java.net.InetSocketAddress> getRemoteAddresses();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.NrQosSessionAttributes> CREATOR;
+  }
+
+  public abstract class QualifiedNetworksService extends android.app.Service {
+    ctor public QualifiedNetworksService();
+    method @NonNull public abstract android.telephony.data.QualifiedNetworksService.NetworkAvailabilityProvider onCreateNetworkAvailabilityProvider(int);
+    field public static final String QUALIFIED_NETWORKS_SERVICE_INTERFACE = "android.telephony.data.QualifiedNetworksService";
+  }
+
+  public abstract class QualifiedNetworksService.NetworkAvailabilityProvider implements java.lang.AutoCloseable {
+    ctor public QualifiedNetworksService.NetworkAvailabilityProvider(int);
+    method public abstract void close();
+    method public final int getSlotIndex();
+    method public void reportThrottleStatusChanged(@NonNull java.util.List<android.telephony.data.ThrottleStatus>);
+    method public final void updateQualifiedNetworkTypes(int, @NonNull java.util.List<java.lang.Integer>);
+  }
+
+  public final class ThrottleStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getApnType();
+    method public int getRetryType();
+    method public int getSlotIndex();
+    method public long getThrottleExpiryTimeMillis();
+    method public int getThrottleType();
+    method public int getTransportType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.ThrottleStatus> CREATOR;
+    field public static final int RETRY_TYPE_HANDOVER = 3; // 0x3
+    field public static final int RETRY_TYPE_NEW_CONNECTION = 2; // 0x2
+    field public static final int RETRY_TYPE_NONE = 1; // 0x1
+    field public static final int THROTTLE_TYPE_ELAPSED_TIME = 2; // 0x2
+    field public static final int THROTTLE_TYPE_NONE = 1; // 0x1
+  }
+
+  public static final class ThrottleStatus.Builder {
+    ctor public ThrottleStatus.Builder();
+    method @NonNull public android.telephony.data.ThrottleStatus build();
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setApnType(int);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setNoThrottle();
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setRetryType(int);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setSlotIndex(int);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setThrottleExpiryTimeMillis(long);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setTransportType(int);
+  }
+
+}
+
+package android.telephony.euicc {
+
+  public final class DownloadableSubscription implements android.os.Parcelable {
+    method public java.util.List<android.telephony.UiccAccessRule> getAccessRules();
+    method @Nullable public String getCarrierName();
+  }
+
+  public static final class DownloadableSubscription.Builder {
+    ctor public DownloadableSubscription.Builder();
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setAccessRules(@NonNull java.util.List<android.telephony.UiccAccessRule>);
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setCarrierName(@NonNull String);
+  }
+
+  public class EuiccCardManager {
+    method public void authenticateServer(String, String, byte[], byte[], byte[], byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void cancelSession(String, byte[], @android.telephony.euicc.EuiccCardManager.CancelReason int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void deleteProfile(String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void disableProfile(String, String, boolean, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void listNotifications(String, @android.telephony.euicc.EuiccNotification.Event int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification[]>);
+    method public void loadBoundProfilePackage(String, byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void prepareDownload(String, @Nullable byte[], byte[], byte[], byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void removeNotificationFromList(String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void requestAllProfiles(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo[]>);
+    method public void requestDefaultSmdpAddress(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.String>);
+    method public void requestEuiccChallenge(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void requestEuiccInfo1(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void requestEuiccInfo2(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void requestProfile(String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo>);
+    method public void requestRulesAuthTable(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccRulesAuthTable>);
+    method public void requestSmdsAddress(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.String>);
+    method public void resetMemory(String, @android.telephony.euicc.EuiccCardManager.ResetOption int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void retrieveNotification(String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification>);
+    method public void retrieveNotificationList(String, @android.telephony.euicc.EuiccNotification.Event int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification[]>);
+    method public void setDefaultSmdpAddress(String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void setNickname(String, String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void switchToProfile(String, String, boolean, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo>);
+    field public static final int CANCEL_REASON_END_USER_REJECTED = 0; // 0x0
+    field public static final int CANCEL_REASON_POSTPONED = 1; // 0x1
+    field public static final int CANCEL_REASON_PPR_NOT_ALLOWED = 3; // 0x3
+    field public static final int CANCEL_REASON_TIMEOUT = 2; // 0x2
+    field public static final int RESET_OPTION_DELETE_FIELD_LOADED_TEST_PROFILES = 2; // 0x2
+    field public static final int RESET_OPTION_DELETE_OPERATIONAL_PROFILES = 1; // 0x1
+    field public static final int RESET_OPTION_RESET_DEFAULT_SMDP_ADDRESS = 4; // 0x4
+    field public static final int RESULT_CALLER_NOT_ALLOWED = -3; // 0xfffffffd
+    field public static final int RESULT_EUICC_NOT_FOUND = -2; // 0xfffffffe
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_UNKNOWN_ERROR = -1; // 0xffffffff
+  }
+
+  @IntDef(prefix={"CANCEL_REASON_"}, value={android.telephony.euicc.EuiccCardManager.CANCEL_REASON_END_USER_REJECTED, android.telephony.euicc.EuiccCardManager.CANCEL_REASON_POSTPONED, android.telephony.euicc.EuiccCardManager.CANCEL_REASON_TIMEOUT, android.telephony.euicc.EuiccCardManager.CANCEL_REASON_PPR_NOT_ALLOWED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccCardManager.CancelReason {
+  }
+
+  @IntDef(flag=true, prefix={"RESET_OPTION_"}, value={android.telephony.euicc.EuiccCardManager.RESET_OPTION_DELETE_OPERATIONAL_PROFILES, android.telephony.euicc.EuiccCardManager.RESET_OPTION_DELETE_FIELD_LOADED_TEST_PROFILES, android.telephony.euicc.EuiccCardManager.RESET_OPTION_RESET_DEFAULT_SMDP_ADDRESS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccCardManager.ResetOption {
+  }
+
+  public static interface EuiccCardManager.ResultCallback<T> {
+    method public void onComplete(int, T);
+  }
+
+  public class EuiccManager {
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void continueOperation(android.content.Intent, android.os.Bundle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptions(@NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptions(@android.telephony.euicc.EuiccCardManager.ResetOption int, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDefaultDownloadableSubscriptionList(android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDownloadableSubscriptionMetadata(android.telephony.euicc.DownloadableSubscription, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public int getOtaStatus();
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public java.util.List<java.lang.String> getSupportedCountries();
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public java.util.List<java.lang.String> getUnsupportedCountries();
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public boolean isSupportedCountry(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void setSupportedCountries(@NonNull java.util.List<java.lang.String>);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void setUnsupportedCountries(@NonNull java.util.List<java.lang.String>);
+    field public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED";
+    field @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public static final String ACTION_OTA_STATUS_CHANGED = "android.telephony.euicc.action.OTA_STATUS_CHANGED";
+    field public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION";
+    field public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED";
+    field public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED";
+    field public static final int EUICC_ACTIVATION_TYPE_ACCOUNT_REQUIRED = 4; // 0x4
+    field public static final int EUICC_ACTIVATION_TYPE_BACKUP = 2; // 0x2
+    field public static final int EUICC_ACTIVATION_TYPE_DEFAULT = 1; // 0x1
+    field public static final int EUICC_ACTIVATION_TYPE_TRANSFER = 3; // 0x3
+    field public static final int EUICC_OTA_FAILED = 2; // 0x2
+    field public static final int EUICC_OTA_IN_PROGRESS = 1; // 0x1
+    field public static final int EUICC_OTA_NOT_NEEDED = 4; // 0x4
+    field public static final int EUICC_OTA_STATUS_UNAVAILABLE = 5; // 0x5
+    field public static final int EUICC_OTA_SUCCEEDED = 3; // 0x3
+    field public static final String EXTRA_ACTIVATION_TYPE = "android.telephony.euicc.extra.ACTIVATION_TYPE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS";
+    field public static final String EXTRA_ENABLE_SUBSCRIPTION = "android.telephony.euicc.extra.ENABLE_SUBSCRIPTION";
+    field public static final String EXTRA_FORCE_PROVISION = "android.telephony.euicc.extra.FORCE_PROVISION";
+    field public static final String EXTRA_FROM_SUBSCRIPTION_ID = "android.telephony.euicc.extra.FROM_SUBSCRIPTION_ID";
+    field public static final String EXTRA_PHYSICAL_SLOT_ID = "android.telephony.euicc.extra.PHYSICAL_SLOT_ID";
+    field public static final String EXTRA_SUBSCRIPTION_ID = "android.telephony.euicc.extra.SUBSCRIPTION_ID";
+    field public static final String EXTRA_SUBSCRIPTION_NICKNAME = "android.telephony.euicc.extra.SUBSCRIPTION_NICKNAME";
+  }
+
+  @IntDef(prefix={"EUICC_OTA_"}, value={android.telephony.euicc.EuiccManager.EUICC_OTA_IN_PROGRESS, android.telephony.euicc.EuiccManager.EUICC_OTA_FAILED, android.telephony.euicc.EuiccManager.EUICC_OTA_SUCCEEDED, android.telephony.euicc.EuiccManager.EUICC_OTA_NOT_NEEDED, android.telephony.euicc.EuiccManager.EUICC_OTA_STATUS_UNAVAILABLE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccManager.OtaStatus {
+  }
+
+  public final class EuiccNotification implements android.os.Parcelable {
+    ctor public EuiccNotification(int, String, @android.telephony.euicc.EuiccNotification.Event int, @Nullable byte[]);
+    method public int describeContents();
+    method @Nullable public byte[] getData();
+    method @android.telephony.euicc.EuiccNotification.Event public int getEvent();
+    method public int getSeq();
+    method public String getTargetAddr();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @android.telephony.euicc.EuiccNotification.Event public static final int ALL_EVENTS = 15; // 0xf
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccNotification> CREATOR;
+    field public static final int EVENT_DELETE = 8; // 0x8
+    field public static final int EVENT_DISABLE = 4; // 0x4
+    field public static final int EVENT_ENABLE = 2; // 0x2
+    field public static final int EVENT_INSTALL = 1; // 0x1
+  }
+
+  @IntDef(flag=true, prefix={"EVENT_"}, value={android.telephony.euicc.EuiccNotification.EVENT_INSTALL, android.telephony.euicc.EuiccNotification.EVENT_ENABLE, android.telephony.euicc.EuiccNotification.EVENT_DISABLE, android.telephony.euicc.EuiccNotification.EVENT_DELETE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccNotification.Event {
+  }
+
+  public final class EuiccRulesAuthTable implements android.os.Parcelable {
+    method public int describeContents();
+    method public int findIndex(@android.service.euicc.EuiccProfileInfo.PolicyRule int, android.service.carrier.CarrierIdentifier);
+    method public boolean hasPolicyRuleFlag(int, @android.telephony.euicc.EuiccRulesAuthTable.PolicyRuleFlag int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccRulesAuthTable> CREATOR;
+    field public static final int POLICY_RULE_FLAG_CONSENT_REQUIRED = 1; // 0x1
+  }
+
+  public static final class EuiccRulesAuthTable.Builder {
+    ctor public EuiccRulesAuthTable.Builder(int);
+    method public android.telephony.euicc.EuiccRulesAuthTable.Builder add(int, java.util.List<android.service.carrier.CarrierIdentifier>, int);
+    method public android.telephony.euicc.EuiccRulesAuthTable build();
+  }
+
+  @IntDef(flag=true, prefix={"POLICY_RULE_FLAG_"}, value={android.telephony.euicc.EuiccRulesAuthTable.POLICY_RULE_FLAG_CONSENT_REQUIRED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccRulesAuthTable.PolicyRuleFlag {
+  }
+
+}
+
+package android.telephony.gba {
+
+  public class GbaService extends android.app.Service {
+    ctor public GbaService();
+    method public void onAuthenticationRequest(int, int, int, @NonNull android.net.Uri, @NonNull byte[], boolean);
+    method public final void reportAuthenticationFailure(int, int) throws java.lang.RuntimeException;
+    method public final void reportKeysAvailable(int, @NonNull byte[], @NonNull String) throws java.lang.RuntimeException;
+    field public static final String SERVICE_INTERFACE = "android.telephony.gba.GbaService";
+  }
+
+  public class TlsParams {
+    method public static boolean isTlsCipherSuiteSupported(int);
+    field public static final int GROUP_SECP256R1 = 23; // 0x17
+    field public static final int GROUP_SECP384R1 = 24; // 0x18
+    field public static final int GROUP_X25519 = 29; // 0x1d
+    field public static final int GROUP_X448 = 30; // 0x1e
+    field public static final int PROTOCOL_VERSION_TLS_1_2 = 771; // 0x303
+    field public static final int PROTOCOL_VERSION_TLS_1_3 = 772; // 0x304
+    field public static final int SIG_ECDSA_BRAINPOOLP256R1TLS13_SHA256 = 2074; // 0x81a
+    field public static final int SIG_ECDSA_BRAINPOOLP384R1TLS13_SHA384 = 2075; // 0x81b
+    field public static final int SIG_ECDSA_BRAINPOOLP512R1TLS13_SHA512 = 2076; // 0x81c
+    field public static final int SIG_ECDSA_SECP256R1_SHA256 = 1027; // 0x403
+    field public static final int SIG_ECDSA_SECP384R1_SHA384 = 1283; // 0x503
+    field public static final int SIG_ECDSA_SECP521R1_SHA512 = 1539; // 0x603
+    field public static final int SIG_ECDSA_SHA1 = 515; // 0x203
+    field public static final int SIG_RSA_PKCS1_SHA1 = 513; // 0x201
+    field public static final int SIG_RSA_PKCS1_SHA256 = 1025; // 0x401
+    field public static final int SIG_RSA_PKCS1_SHA256_LEGACY = 1056; // 0x420
+    field public static final int SIG_RSA_PKCS1_SHA384 = 1281; // 0x501
+    field public static final int SIG_RSA_PKCS1_SHA384_LEGACY = 1312; // 0x520
+    field public static final int SIG_RSA_PKCS1_SHA512 = 1537; // 0x601
+    field public static final int SIG_RSA_PKCS1_SHA512_LEGACY = 1568; // 0x620
+    field public static final int SIG_RSA_PSS_RSAE_SHA256 = 2052; // 0x804
+    field public static final int SIG_RSA_PSS_RSAE_SHA384 = 2053; // 0x805
+    field public static final int SIG_RSA_PSS_RSAE_SHA512 = 2054; // 0x806
+    field public static final int TLS_AES_128_CCM_SHA256 = 4868; // 0x1304
+    field public static final int TLS_AES_128_GCM_SHA256 = 4865; // 0x1301
+    field public static final int TLS_AES_256_GCM_SHA384 = 4866; // 0x1302
+    field public static final int TLS_CHACHA20_POLY1305_SHA256 = 4867; // 0x1303
+    field public static final int TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 19; // 0x13
+    field public static final int TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 50; // 0x32
+    field public static final int TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 64; // 0x40
+    field public static final int TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 56; // 0x38
+    field public static final int TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 106; // 0x6a
+    field public static final int TLS_DHE_PSK_WITH_AES_128_CCM = 49318; // 0xc0a6
+    field public static final int TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 = 170; // 0xaa
+    field public static final int TLS_DHE_PSK_WITH_AES_256_CCM = 49319; // 0xc0a7
+    field public static final int TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 = 171; // 0xab
+    field public static final int TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 52397; // 0xccad
+    field public static final int TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 22; // 0x16
+    field public static final int TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 51; // 0x33
+    field public static final int TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 103; // 0x67
+    field public static final int TLS_DHE_RSA_WITH_AES_128_CCM = 49310; // 0xc09e
+    field public static final int TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 158; // 0x9e
+    field public static final int TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 57; // 0x39
+    field public static final int TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 107; // 0x6b
+    field public static final int TLS_DHE_RSA_WITH_AES_256_CCM = 49311; // 0xc09f
+    field public static final int TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 159; // 0x9f
+    field public static final int TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 52394; // 0xccaa
+    field public static final int TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA = 27; // 0x1b
+    field public static final int TLS_DH_ANON_WITH_AES_128_CBC_SHA = 52; // 0x34
+    field public static final int TLS_DH_ANON_WITH_AES_128_CBC_SHA256 = 108; // 0x6c
+    field public static final int TLS_DH_ANON_WITH_AES_256_CBC_SHA = 58; // 0x3a
+    field public static final int TLS_DH_ANON_WITH_AES_256_CBC_SHA256 = 109; // 0x6d
+    field public static final int TLS_DH_ANON_WITH_RC4_128_MD5 = 24; // 0x18
+    field public static final int TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 13; // 0xd
+    field public static final int TLS_DH_DSS_WITH_AES_128_CBC_SHA = 48; // 0x30
+    field public static final int TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 62; // 0x3e
+    field public static final int TLS_DH_DSS_WITH_AES_256_CBC_SHA = 54; // 0x36
+    field public static final int TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 104; // 0x68
+    field public static final int TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 16; // 0x10
+    field public static final int TLS_DH_RSA_WITH_AES_128_CBC_SHA = 49; // 0x31
+    field public static final int TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 63; // 0x3f
+    field public static final int TLS_DH_RSA_WITH_AES_256_CBC_SHA = 55; // 0x37
+    field public static final int TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 105; // 0x69
+    field public static final int TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 49195; // 0xc02b
+    field public static final int TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 49196; // 0xc02c
+    field public static final int TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 52393; // 0xcca9
+    field public static final int TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256 = 53253; // 0xd005
+    field public static final int TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256 = 53249; // 0xd001
+    field public static final int TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384 = 53250; // 0xd002
+    field public static final int TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 52396; // 0xccac
+    field public static final int TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 49199; // 0xc02f
+    field public static final int TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 49200; // 0xc030
+    field public static final int TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 52392; // 0xcca8
+    field public static final int TLS_NULL_WITH_NULL_NULL = 0; // 0x0
+    field public static final int TLS_RSA_WITH_3DES_EDE_CBC_SHA = 10; // 0xa
+    field public static final int TLS_RSA_WITH_AES_128_CBC_SHA = 47; // 0x2f
+    field public static final int TLS_RSA_WITH_AES_128_CBC_SHA256 = 60; // 0x3c
+    field public static final int TLS_RSA_WITH_AES_256_CBC_SHA = 53; // 0x35
+    field public static final int TLS_RSA_WITH_AES_256_CBC_SHA256 = 61; // 0x3d
+    field public static final int TLS_RSA_WITH_NULL_MD5 = 1; // 0x1
+    field public static final int TLS_RSA_WITH_NULL_SHA = 2; // 0x2
+    field public static final int TLS_RSA_WITH_NULL_SHA256 = 59; // 0x3b
+    field public static final int TLS_RSA_WITH_RC4_128_MD5 = 4; // 0x4
+    field public static final int TLS_RSA_WITH_RC4_128_SHA = 5; // 0x5
+  }
+
+  public final class UaSecurityProtocolIdentifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getOrg();
+    method public int getProtocol();
+    method public int getTlsCipherSuite();
+    method @NonNull public byte[] toByteArray();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.gba.UaSecurityProtocolIdentifier> CREATOR;
+    field public static final int ORG_3GPP = 1; // 0x1
+    field public static final int ORG_3GPP2 = 2; // 0x2
+    field public static final int ORG_GSMA = 4; // 0x4
+    field public static final int ORG_LOCAL = 255; // 0xff
+    field public static final int ORG_NONE = 0; // 0x0
+    field public static final int ORG_OMA = 3; // 0x3
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_GENERATION_TMPI = 256; // 0x100
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_GENERIC_PUSH_LAYER = 5; // 0x5
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_HTTP_BASED_MBMS = 3; // 0x3
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_HTTP_DIGEST_AUTHENTICATION = 2; // 0x2
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_IMS_MEDIA_PLANE = 6; // 0x6
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_MBMS = 1; // 0x1
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_SIP_BASED_MBMS = 4; // 0x4
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_SUBSCRIBER_CERTIFICATE = 0; // 0x0
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_TLS_BROWSER = 131072; // 0x20000
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_TLS_DEFAULT = 65536; // 0x10000
+  }
+
+  public static final class UaSecurityProtocolIdentifier.Builder {
+    ctor public UaSecurityProtocolIdentifier.Builder();
+    ctor public UaSecurityProtocolIdentifier.Builder(@NonNull android.telephony.gba.UaSecurityProtocolIdentifier);
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier build();
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier.Builder setOrg(int);
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier.Builder setProtocol(int);
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier.Builder setTlsCipherSuite(int);
+  }
+
+}
+
+package android.telephony.ims {
+
+  public final class AudioCodecAttributes implements android.os.Parcelable {
+    ctor public AudioCodecAttributes(float, @NonNull android.util.Range<java.lang.Float>, float, @NonNull android.util.Range<java.lang.Float>);
+    method public int describeContents();
+    method public float getBandwidthKhz();
+    method @NonNull public android.util.Range<java.lang.Float> getBandwidthRangeKhz();
+    method public float getBitrateKbps();
+    method @NonNull public android.util.Range<java.lang.Float> getBitrateRangeKbps();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.AudioCodecAttributes> CREATOR;
+  }
+
+  public interface DelegateMessageCallback {
+    method public void onMessageReceived(@NonNull android.telephony.ims.SipMessage);
+    method public void onMessageSendFailure(@NonNull String, int);
+    method public void onMessageSent(@NonNull String);
+  }
+
+  public final class DelegateRegistrationState implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.telephony.ims.FeatureTagState> getDeregisteredFeatureTags();
+    method @NonNull public java.util.Set<android.telephony.ims.FeatureTagState> getDeregisteringFeatureTags();
+    method @NonNull public java.util.Set<java.lang.String> getRegisteredFeatureTags();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.DelegateRegistrationState> CREATOR;
+    field public static final int DEREGISTERED_REASON_NOT_PROVISIONED = 1; // 0x1
+    field public static final int DEREGISTERED_REASON_NOT_REGISTERED = 2; // 0x2
+    field public static final int DEREGISTERED_REASON_UNKNOWN = 0; // 0x0
+    field public static final int DEREGISTERING_REASON_DESTROY_PENDING = 6; // 0x6
+    field public static final int DEREGISTERING_REASON_FEATURE_TAGS_CHANGING = 5; // 0x5
+    field public static final int DEREGISTERING_REASON_PDN_CHANGE = 3; // 0x3
+    field public static final int DEREGISTERING_REASON_PROVISIONING_CHANGE = 4; // 0x4
+  }
+
+  public static final class DelegateRegistrationState.Builder {
+    ctor public DelegateRegistrationState.Builder();
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addDeregisteredFeatureTag(@NonNull String, int);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addDeregisteringFeatureTag(@NonNull String, int);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addRegisteredFeatureTag(@NonNull String);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addRegisteredFeatureTags(@NonNull java.util.Set<java.lang.String>);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState build();
+  }
+
+  public final class DelegateRequest implements android.os.Parcelable {
+    ctor public DelegateRequest(@NonNull java.util.Set<java.lang.String>);
+    method public int describeContents();
+    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.DelegateRequest> CREATOR;
+  }
+
+  public interface DelegateStateCallback {
+    method public void onConfigurationChanged(@NonNull android.telephony.ims.SipDelegateConfiguration);
+    method public void onCreated(@NonNull android.telephony.ims.stub.SipDelegate, @Nullable java.util.Set<android.telephony.ims.FeatureTagState>);
+    method public void onDestroyed(int);
+    method public void onFeatureTagRegistrationChanged(@NonNull android.telephony.ims.DelegateRegistrationState);
+  }
+
+  public final class FeatureTagState implements android.os.Parcelable {
+    ctor public FeatureTagState(@NonNull String, int);
+    method public int describeContents();
+    method @NonNull public String getFeatureTag();
+    method public int getState();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.FeatureTagState> CREATOR;
+  }
+
+  public final class ImsCallForwardInfo implements android.os.Parcelable {
+    ctor public ImsCallForwardInfo(int, int, int, int, @NonNull String, int);
+    method public int describeContents();
+    method public int getCondition();
+    method public String getNumber();
+    method public int getServiceClass();
+    method public int getStatus();
+    method public int getTimeSeconds();
+    method public int getToA();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CDIV_CF_REASON_ALL = 4; // 0x4
+    field public static final int CDIV_CF_REASON_ALL_CONDITIONAL = 5; // 0x5
+    field public static final int CDIV_CF_REASON_BUSY = 1; // 0x1
+    field public static final int CDIV_CF_REASON_NOT_LOGGED_IN = 6; // 0x6
+    field public static final int CDIV_CF_REASON_NOT_REACHABLE = 3; // 0x3
+    field public static final int CDIV_CF_REASON_NO_REPLY = 2; // 0x2
+    field public static final int CDIV_CF_REASON_UNCONDITIONAL = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallForwardInfo> CREATOR;
+    field public static final int STATUS_ACTIVE = 1; // 0x1
+    field public static final int STATUS_NOT_ACTIVE = 0; // 0x0
+    field public static final int TYPE_OF_ADDRESS_INTERNATIONAL = 145; // 0x91
+    field public static final int TYPE_OF_ADDRESS_UNKNOWN = 129; // 0x81
+  }
+
+  public final class ImsCallProfile implements android.os.Parcelable {
+    ctor public ImsCallProfile();
+    ctor public ImsCallProfile(int, int);
+    ctor public ImsCallProfile(int, int, android.os.Bundle, android.telephony.ims.ImsStreamMediaProfile);
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.telephony.ims.RtpHeaderExtensionType> getAcceptedRtpHeaderExtensionTypes();
+    method public String getCallExtra(String);
+    method public String getCallExtra(String, String);
+    method public boolean getCallExtraBoolean(String);
+    method public boolean getCallExtraBoolean(String, boolean);
+    method public int getCallExtraInt(String);
+    method public int getCallExtraInt(String, int);
+    method @Nullable public <T extends android.os.Parcelable> T getCallExtraParcelable(@Nullable String);
+    method public android.os.Bundle getCallExtras();
+    method public int getCallType();
+    method public static int getCallTypeFromVideoState(int);
+    method public int getCallerNumberVerificationStatus();
+    method public int getEmergencyCallRouting();
+    method public int getEmergencyServiceCategories();
+    method @NonNull public java.util.List<java.lang.String> getEmergencyUrns();
+    method public android.telephony.ims.ImsStreamMediaProfile getMediaProfile();
+    method @NonNull public android.os.Bundle getProprietaryCallExtras();
+    method public int getRestrictCause();
+    method public int getServiceType();
+    method public static int getVideoStateFromCallType(int);
+    method public static int getVideoStateFromImsCallProfile(android.telephony.ims.ImsCallProfile);
+    method public boolean hasKnownUserIntentEmergency();
+    method public boolean isEmergencyCallTesting();
+    method public boolean isVideoCall();
+    method public boolean isVideoPaused();
+    method public static int presentationToOir(int);
+    method public void setAcceptedRtpHeaderExtensionTypes(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtensionType>);
+    method public void setCallExtra(String, String);
+    method public void setCallExtraBoolean(String, boolean);
+    method public void setCallExtraInt(String, int);
+    method public void setCallExtraParcelable(@NonNull String, @NonNull android.os.Parcelable);
+    method public void setCallRestrictCause(int);
+    method public void setCallerNumberVerificationStatus(int);
+    method public void setEmergencyCallRouting(int);
+    method public void setEmergencyCallTesting(boolean);
+    method public void setEmergencyServiceCategories(int);
+    method public void setEmergencyUrns(@NonNull java.util.List<java.lang.String>);
+    method public void setHasKnownUserIntentEmergency(boolean);
+    method public void updateCallExtras(android.telephony.ims.ImsCallProfile);
+    method public void updateCallType(android.telephony.ims.ImsCallProfile);
+    method public void updateMediaProfile(android.telephony.ims.ImsCallProfile);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALL_RESTRICT_CAUSE_DISABLED = 2; // 0x2
+    field public static final int CALL_RESTRICT_CAUSE_HD = 3; // 0x3
+    field public static final int CALL_RESTRICT_CAUSE_NONE = 0; // 0x0
+    field public static final int CALL_RESTRICT_CAUSE_RAT = 1; // 0x1
+    field public static final int CALL_TYPE_VIDEO_N_VOICE = 3; // 0x3
+    field public static final int CALL_TYPE_VOICE = 2; // 0x2
+    field public static final int CALL_TYPE_VOICE_N_VIDEO = 1; // 0x1
+    field public static final int CALL_TYPE_VS = 8; // 0x8
+    field public static final int CALL_TYPE_VS_RX = 10; // 0xa
+    field public static final int CALL_TYPE_VS_TX = 9; // 0x9
+    field public static final int CALL_TYPE_VT = 4; // 0x4
+    field public static final int CALL_TYPE_VT_NODIR = 7; // 0x7
+    field public static final int CALL_TYPE_VT_RX = 6; // 0x6
+    field public static final int CALL_TYPE_VT_TX = 5; // 0x5
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallProfile> CREATOR;
+    field public static final int DIALSTRING_NORMAL = 0; // 0x0
+    field public static final int DIALSTRING_SS_CONF = 1; // 0x1
+    field public static final int DIALSTRING_USSD = 2; // 0x2
+    field public static final String EXTRA_ADDITIONAL_CALL_INFO = "AdditionalCallInfo";
+    field public static final String EXTRA_ADDITIONAL_SIP_INVITE_FIELDS = "android.telephony.ims.extra.ADDITIONAL_SIP_INVITE_FIELDS";
+    field public static final String EXTRA_CALL_DISCONNECT_CAUSE = "android.telephony.ims.extra.CALL_DISCONNECT_CAUSE";
+    field public static final String EXTRA_CALL_NETWORK_TYPE = "android.telephony.ims.extra.CALL_NETWORK_TYPE";
+    field @Deprecated public static final String EXTRA_CALL_RAT_TYPE = "CallRadioTech";
+    field public static final String EXTRA_CALL_SUBJECT = "android.telephony.ims.extra.CALL_SUBJECT";
+    field public static final String EXTRA_CHILD_NUMBER = "ChildNum";
+    field public static final String EXTRA_CNA = "cna";
+    field public static final String EXTRA_CNAP = "cnap";
+    field public static final String EXTRA_CODEC = "Codec";
+    field public static final String EXTRA_CONFERENCE = "android.telephony.ims.extra.CONFERENCE";
+    field public static final String EXTRA_DIALSTRING = "dialstring";
+    field public static final String EXTRA_DISPLAY_TEXT = "DisplayText";
+    field public static final String EXTRA_EMERGENCY_CALL = "e_call";
+    field public static final String EXTRA_EXTENDING_TO_CONFERENCE_SUPPORTED = "android.telephony.ims.extra.EXTENDING_TO_CONFERENCE_SUPPORTED";
+    field public static final String EXTRA_FORWARDED_NUMBER = "android.telephony.ims.extra.FORWARDED_NUMBER";
+    field public static final String EXTRA_IS_BUSINESS_CALL = "android.telephony.ims.extra.IS_BUSINESS_CALL";
+    field public static final String EXTRA_IS_CALL_PULL = "CallPull";
+    field public static final String EXTRA_IS_CROSS_SIM_CALL = "android.telephony.ims.extra.IS_CROSS_SIM_CALL";
+    field public static final String EXTRA_LOCATION = "android.telephony.ims.extra.LOCATION";
+    field public static final String EXTRA_OI = "oi";
+    field public static final String EXTRA_OIR = "oir";
+    field public static final String EXTRA_PICTURE_URL = "android.telephony.ims.extra.PICTURE_URL";
+    field public static final String EXTRA_PRIORITY = "android.telephony.ims.extra.PRIORITY";
+    field public static final String EXTRA_REMOTE_URI = "remote_uri";
+    field public static final String EXTRA_USSD = "ussd";
+    field public static final int OIR_DEFAULT = 0; // 0x0
+    field public static final int OIR_PRESENTATION_NOT_RESTRICTED = 2; // 0x2
+    field public static final int OIR_PRESENTATION_PAYPHONE = 4; // 0x4
+    field public static final int OIR_PRESENTATION_RESTRICTED = 1; // 0x1
+    field public static final int OIR_PRESENTATION_UNKNOWN = 3; // 0x3
+    field public static final int PRIORITY_NORMAL = 0; // 0x0
+    field public static final int PRIORITY_URGENT = 1; // 0x1
+    field public static final int SERVICE_TYPE_EMERGENCY = 2; // 0x2
+    field public static final int SERVICE_TYPE_NONE = 0; // 0x0
+    field public static final int SERVICE_TYPE_NORMAL = 1; // 0x1
+    field public static final int VERIFICATION_STATUS_FAILED = 2; // 0x2
+    field public static final int VERIFICATION_STATUS_NOT_VERIFIED = 0; // 0x0
+    field public static final int VERIFICATION_STATUS_PASSED = 1; // 0x1
+  }
+
+  public class ImsCallSessionListener {
+    method public void callQualityChanged(@NonNull android.telephony.CallQuality);
+    method public void callSessionConferenceExtendFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionConferenceExtendReceived(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
+    method public void callSessionConferenceExtended(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
+    method public void callSessionConferenceStateUpdated(android.telephony.ims.ImsConferenceState);
+    method public void callSessionDtmfReceived(char);
+    method @Deprecated public void callSessionHandover(int, int, android.telephony.ims.ImsReasonInfo);
+    method @Deprecated public void callSessionHandoverFailed(int, int, android.telephony.ims.ImsReasonInfo);
+    method public void callSessionHeld(android.telephony.ims.ImsCallProfile);
+    method public void callSessionHoldFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionHoldReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionInitiated(android.telephony.ims.ImsCallProfile);
+    method @Deprecated public void callSessionInitiatedFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionInitiating(@NonNull android.telephony.ims.ImsCallProfile);
+    method public void callSessionInitiatingFailed(@NonNull android.telephony.ims.ImsReasonInfo);
+    method public void callSessionInviteParticipantsRequestDelivered();
+    method public void callSessionInviteParticipantsRequestFailed(android.telephony.ims.ImsReasonInfo);
+    method @Deprecated public void callSessionMayHandover(int, int);
+    method public void callSessionMergeComplete(android.telephony.ims.stub.ImsCallSessionImplBase);
+    method public void callSessionMergeFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionMergeStarted(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
+    method public void callSessionMultipartyStateChanged(boolean);
+    method public void callSessionProgressing(android.telephony.ims.ImsStreamMediaProfile);
+    method public void callSessionRemoveParticipantsRequestDelivered();
+    method public void callSessionRemoveParticipantsRequestFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionResumeFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionResumeReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionResumed(android.telephony.ims.ImsCallProfile);
+    method public void callSessionRtpHeaderExtensionsReceived(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtension>);
+    method public void callSessionRttAudioIndicatorChanged(@NonNull android.telephony.ims.ImsStreamMediaProfile);
+    method public void callSessionRttMessageReceived(String);
+    method public void callSessionRttModifyRequestReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionRttModifyResponseReceived(int);
+    method public void callSessionSuppServiceReceived(android.telephony.ims.ImsSuppServiceNotification);
+    method public void callSessionTerminated(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionTtyModeReceived(int);
+    method public void callSessionUpdateFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionUpdateReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionUpdated(android.telephony.ims.ImsCallProfile);
+    method public void callSessionUssdMessageReceived(int, String);
+    method public void onHandover(int, int, @Nullable android.telephony.ims.ImsReasonInfo);
+    method public void onHandoverFailed(int, int, @NonNull android.telephony.ims.ImsReasonInfo);
+    method public void onMayHandover(int, int);
+  }
+
+  public final class ImsConferenceState implements android.os.Parcelable {
+    method public int describeContents();
+    method public static int getConnectionStateForStatus(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsConferenceState> CREATOR;
+    field public static final String DISPLAY_TEXT = "display-text";
+    field public static final String ENDPOINT = "endpoint";
+    field public static final String SIP_STATUS_CODE = "sipstatuscode";
+    field public static final String STATUS = "status";
+    field public static final String STATUS_ALERTING = "alerting";
+    field public static final String STATUS_CONNECTED = "connected";
+    field public static final String STATUS_CONNECT_FAIL = "connect-fail";
+    field public static final String STATUS_DIALING_IN = "dialing-in";
+    field public static final String STATUS_DIALING_OUT = "dialing-out";
+    field public static final String STATUS_DISCONNECTED = "disconnected";
+    field public static final String STATUS_DISCONNECTING = "disconnecting";
+    field public static final String STATUS_MUTED_VIA_FOCUS = "muted-via-focus";
+    field public static final String STATUS_ON_HOLD = "on-hold";
+    field public static final String STATUS_PENDING = "pending";
+    field public static final String STATUS_SEND_ONLY = "sendonly";
+    field public static final String STATUS_SEND_RECV = "sendrecv";
+    field public static final String USER = "user";
+    field public final java.util.HashMap<java.lang.String,android.os.Bundle> mParticipants;
+  }
+
+  public final class ImsException extends java.lang.Exception {
+    ctor public ImsException(@Nullable String);
+    ctor public ImsException(@Nullable String, int);
+    ctor public ImsException(@Nullable String, int, @Nullable Throwable);
+  }
+
+  public final class ImsExternalCallState implements android.os.Parcelable {
+    ctor public ImsExternalCallState(@NonNull String, @NonNull android.net.Uri, @Nullable android.net.Uri, boolean, int, int, boolean);
+    method public int describeContents();
+    method @NonNull public android.net.Uri getAddress();
+    method public int getCallId();
+    method public int getCallState();
+    method public int getCallType();
+    method @Nullable public android.net.Uri getLocalAddress();
+    method public boolean isCallHeld();
+    method public boolean isCallPullable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALL_STATE_CONFIRMED = 1; // 0x1
+    field public static final int CALL_STATE_TERMINATED = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsExternalCallState> CREATOR;
+  }
+
+  public class ImsManager {
+    method @NonNull public android.telephony.ims.SipDelegateManager getSipDelegateManager(int);
+  }
+
+  public class ImsMmTelManager implements android.telephony.ims.RegistrationManager {
+    method @Deprecated @NonNull @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public static android.telephony.ims.ImsMmTelManager createForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getFeatureState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoWiFiRoamingModeSetting();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAvailable(int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCapable(int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void isSupported(int, int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>) throws android.telephony.ims.ImsException;
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSettingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCrossSimCallingEnabled(boolean) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRttCapabilitySetting(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiModeSetting(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiNonPersistent(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingModeSetting(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSettingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSettingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSettingEnabled(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback);
+  }
+
+  @Deprecated public static class ImsMmTelManager.RegistrationCallback extends android.telephony.ims.RegistrationManager.RegistrationCallback {
+    ctor @Deprecated public ImsMmTelManager.RegistrationCallback();
+    method @Deprecated public void onRegistered(int);
+    method @Deprecated public void onRegistering(int);
+  }
+
+  public class ImsRcsManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void addOnAvailabilityChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsRcsManager.OnAvailabilityChangedListener) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAvailable(int, int) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCapable(int, int) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void removeOnAvailabilityChangedListener(@NonNull android.telephony.ims.ImsRcsManager.OnAvailabilityChangedListener);
+  }
+
+  public static interface ImsRcsManager.OnAvailabilityChangedListener {
+    method public void onAvailabilityChanged(int);
+  }
+
+  public final class ImsReasonInfo implements android.os.Parcelable {
+    field public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service";
+  }
+
+  public final class ImsRegistrationAttributes implements android.os.Parcelable {
+    method public int getRegistrationTechnology();
+  }
+
+  public static final class ImsRegistrationAttributes.Builder {
+    ctor public ImsRegistrationAttributes.Builder(int);
+    method @NonNull public android.telephony.ims.ImsRegistrationAttributes build();
+    method @NonNull public android.telephony.ims.ImsRegistrationAttributes.Builder setFeatureTags(@NonNull java.util.Set<java.lang.String>);
+  }
+
+  public class ImsService extends android.app.Service {
+    ctor public ImsService();
+    method public android.telephony.ims.feature.MmTelFeature createMmTelFeature(int);
+    method public android.telephony.ims.feature.RcsFeature createRcsFeature(int);
+    method public void disableIms(int);
+    method public void enableIms(int);
+    method public android.telephony.ims.stub.ImsConfigImplBase getConfig(int);
+    method public long getImsServiceCapabilities();
+    method public android.telephony.ims.stub.ImsRegistrationImplBase getRegistration(int);
+    method @Nullable public android.telephony.ims.stub.SipTransportImplBase getSipTransport(int);
+    method public final void onUpdateSupportedImsFeatures(android.telephony.ims.stub.ImsFeatureConfiguration) throws android.os.RemoteException;
+    method public android.telephony.ims.stub.ImsFeatureConfiguration querySupportedImsFeatures();
+    method public void readyForFeatureCreation();
+    field public static final long CAPABILITY_SIP_DELEGATE_CREATION = 2L; // 0x2L
+  }
+
+  public final class ImsSsData implements android.os.Parcelable {
+    ctor public ImsSsData(int, int, int, int, int);
+    method public int describeContents();
+    method @Nullable public java.util.List<android.telephony.ims.ImsCallForwardInfo> getCallForwardInfo();
+    method public int getRequestType();
+    method public int getResult();
+    method public int getServiceClass();
+    method public int getServiceType();
+    method @NonNull public java.util.List<android.telephony.ims.ImsSsInfo> getSuppServiceInfo();
+    method public int getTeleserviceType();
+    method public boolean isTypeBarring();
+    method public boolean isTypeCf();
+    method public boolean isTypeClip();
+    method public boolean isTypeClir();
+    method public boolean isTypeColp();
+    method public boolean isTypeColr();
+    method public boolean isTypeCw();
+    method public boolean isTypeIcb();
+    method public boolean isTypeInterrogation();
+    method public boolean isTypeUnConditional();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsData> CREATOR;
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int SERVICE_CLASS_DATA = 2; // 0x2
+    field public static final int SERVICE_CLASS_DATA_CIRCUIT_ASYNC = 32; // 0x20
+    field public static final int SERVICE_CLASS_DATA_CIRCUIT_SYNC = 16; // 0x10
+    field public static final int SERVICE_CLASS_DATA_PACKET_ACCESS = 64; // 0x40
+    field public static final int SERVICE_CLASS_DATA_PAD = 128; // 0x80
+    field public static final int SERVICE_CLASS_FAX = 4; // 0x4
+    field public static final int SERVICE_CLASS_NONE = 0; // 0x0
+    field public static final int SERVICE_CLASS_SMS = 8; // 0x8
+    field public static final int SERVICE_CLASS_VOICE = 1; // 0x1
+    field public static final int SS_ACTIVATION = 0; // 0x0
+    field public static final int SS_ALL_BARRING = 18; // 0x12
+    field public static final int SS_ALL_DATA_TELESERVICES = 3; // 0x3
+    field public static final int SS_ALL_TELESERVICES_EXCEPT_SMS = 5; // 0x5
+    field public static final int SS_ALL_TELESEVICES = 1; // 0x1
+    field public static final int SS_ALL_TELE_AND_BEARER_SERVICES = 0; // 0x0
+    field public static final int SS_BAIC = 16; // 0x10
+    field public static final int SS_BAIC_ROAMING = 17; // 0x11
+    field public static final int SS_BAOC = 13; // 0xd
+    field public static final int SS_BAOIC = 14; // 0xe
+    field public static final int SS_BAOIC_EXC_HOME = 15; // 0xf
+    field public static final int SS_CFU = 0; // 0x0
+    field public static final int SS_CFUT = 6; // 0x6
+    field public static final int SS_CF_ALL = 4; // 0x4
+    field public static final int SS_CF_ALL_CONDITIONAL = 5; // 0x5
+    field public static final int SS_CF_BUSY = 1; // 0x1
+    field public static final int SS_CF_NOT_REACHABLE = 3; // 0x3
+    field public static final int SS_CF_NO_REPLY = 2; // 0x2
+    field public static final int SS_CLIP = 7; // 0x7
+    field public static final int SS_CLIR = 8; // 0x8
+    field public static final int SS_CNAP = 11; // 0xb
+    field public static final int SS_COLP = 9; // 0x9
+    field public static final int SS_COLR = 10; // 0xa
+    field public static final int SS_DEACTIVATION = 1; // 0x1
+    field public static final int SS_ERASURE = 4; // 0x4
+    field public static final int SS_INCOMING_BARRING = 20; // 0x14
+    field public static final int SS_INCOMING_BARRING_ANONYMOUS = 22; // 0x16
+    field public static final int SS_INCOMING_BARRING_DN = 21; // 0x15
+    field public static final int SS_INTERROGATION = 2; // 0x2
+    field public static final int SS_OUTGOING_BARRING = 19; // 0x13
+    field public static final int SS_REGISTRATION = 3; // 0x3
+    field public static final int SS_SMS_SERVICES = 4; // 0x4
+    field public static final int SS_TELEPHONY = 2; // 0x2
+    field public static final int SS_WAIT = 12; // 0xc
+  }
+
+  public static final class ImsSsData.Builder {
+    ctor public ImsSsData.Builder(int, int, int, int, int);
+    method @NonNull public android.telephony.ims.ImsSsData build();
+    method @NonNull public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(@NonNull java.util.List<android.telephony.ims.ImsCallForwardInfo>);
+    method @NonNull public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(@NonNull java.util.List<android.telephony.ims.ImsSsInfo>);
+  }
+
+  public final class ImsSsInfo implements android.os.Parcelable {
+    ctor @Deprecated public ImsSsInfo(int, @Nullable String);
+    method public int describeContents();
+    method public int getClirInterrogationStatus();
+    method public int getClirOutgoingState();
+    method @Deprecated public String getIcbNum();
+    method @Nullable public String getIncomingCommunicationBarringNumber();
+    method public int getProvisionStatus();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CLIR_OUTGOING_DEFAULT = 0; // 0x0
+    field public static final int CLIR_OUTGOING_INVOCATION = 1; // 0x1
+    field public static final int CLIR_OUTGOING_SUPPRESSION = 2; // 0x2
+    field public static final int CLIR_STATUS_NOT_PROVISIONED = 0; // 0x0
+    field public static final int CLIR_STATUS_PROVISIONED_PERMANENT = 1; // 0x1
+    field public static final int CLIR_STATUS_TEMPORARILY_ALLOWED = 4; // 0x4
+    field public static final int CLIR_STATUS_TEMPORARILY_RESTRICTED = 3; // 0x3
+    field public static final int CLIR_STATUS_UNKNOWN = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsInfo> CREATOR;
+    field public static final int DISABLED = 0; // 0x0
+    field public static final int ENABLED = 1; // 0x1
+    field public static final int NOT_REGISTERED = -1; // 0xffffffff
+    field public static final int SERVICE_NOT_PROVISIONED = 0; // 0x0
+    field public static final int SERVICE_PROVISIONED = 1; // 0x1
+    field public static final int SERVICE_PROVISIONING_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class ImsSsInfo.Builder {
+    ctor public ImsSsInfo.Builder(int);
+    method @NonNull public android.telephony.ims.ImsSsInfo build();
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirInterrogationStatus(int);
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirOutgoingState(int);
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setIncomingCommunicationBarringNumber(@NonNull String);
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setProvisionStatus(int);
+  }
+
+  public final class ImsStreamMediaProfile implements android.os.Parcelable {
+    ctor public ImsStreamMediaProfile(int, int, int, int, int);
+    method public void copyFrom(android.telephony.ims.ImsStreamMediaProfile);
+    method public int describeContents();
+    method @Nullable public android.telephony.ims.AudioCodecAttributes getAudioCodecAttributes();
+    method public int getAudioDirection();
+    method public int getAudioQuality();
+    method public int getRttMode();
+    method public int getVideoDirection();
+    method public int getVideoQuality();
+    method public boolean isReceivingRttAudio();
+    method public boolean isRttCall();
+    method public void setAudioCodecAttributes(@NonNull android.telephony.ims.AudioCodecAttributes);
+    method public void setReceivingRttAudio(boolean);
+    method public void setRttMode(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_QUALITY_AMR = 1; // 0x1
+    field public static final int AUDIO_QUALITY_AMR_WB = 2; // 0x2
+    field public static final int AUDIO_QUALITY_EVRC = 4; // 0x4
+    field public static final int AUDIO_QUALITY_EVRC_B = 5; // 0x5
+    field public static final int AUDIO_QUALITY_EVRC_NW = 7; // 0x7
+    field public static final int AUDIO_QUALITY_EVRC_WB = 6; // 0x6
+    field public static final int AUDIO_QUALITY_EVS_FB = 20; // 0x14
+    field public static final int AUDIO_QUALITY_EVS_NB = 17; // 0x11
+    field public static final int AUDIO_QUALITY_EVS_SWB = 19; // 0x13
+    field public static final int AUDIO_QUALITY_EVS_WB = 18; // 0x12
+    field public static final int AUDIO_QUALITY_G711A = 13; // 0xd
+    field public static final int AUDIO_QUALITY_G711AB = 15; // 0xf
+    field public static final int AUDIO_QUALITY_G711U = 11; // 0xb
+    field public static final int AUDIO_QUALITY_G722 = 14; // 0xe
+    field public static final int AUDIO_QUALITY_G723 = 12; // 0xc
+    field public static final int AUDIO_QUALITY_G729 = 16; // 0x10
+    field public static final int AUDIO_QUALITY_GSM_EFR = 8; // 0x8
+    field public static final int AUDIO_QUALITY_GSM_FR = 9; // 0x9
+    field public static final int AUDIO_QUALITY_GSM_HR = 10; // 0xa
+    field public static final int AUDIO_QUALITY_NONE = 0; // 0x0
+    field public static final int AUDIO_QUALITY_QCELP13K = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsStreamMediaProfile> CREATOR;
+    field public static final int DIRECTION_INACTIVE = 0; // 0x0
+    field public static final int DIRECTION_INVALID = -1; // 0xffffffff
+    field public static final int DIRECTION_RECEIVE = 1; // 0x1
+    field public static final int DIRECTION_SEND = 2; // 0x2
+    field public static final int DIRECTION_SEND_RECEIVE = 3; // 0x3
+    field public static final int RTT_MODE_DISABLED = 0; // 0x0
+    field public static final int RTT_MODE_FULL = 1; // 0x1
+    field public static final int VIDEO_QUALITY_NONE = 0; // 0x0
+    field public static final int VIDEO_QUALITY_QCIF = 1; // 0x1
+    field public static final int VIDEO_QUALITY_QVGA_LANDSCAPE = 2; // 0x2
+    field public static final int VIDEO_QUALITY_QVGA_PORTRAIT = 4; // 0x4
+    field public static final int VIDEO_QUALITY_VGA_LANDSCAPE = 8; // 0x8
+    field public static final int VIDEO_QUALITY_VGA_PORTRAIT = 16; // 0x10
+  }
+
+  public final class ImsSuppServiceNotification implements android.os.Parcelable {
+    ctor public ImsSuppServiceNotification(int, int, int, int, String, String[]);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSuppServiceNotification> CREATOR;
+    field public final int code;
+    field public final String[] history;
+    field public final int index;
+    field public final int notificationType;
+    field public final String number;
+    field public final int type;
+  }
+
+  public class ImsUtListener {
+    method public void onLineIdentificationSupplementaryServiceResponse(int, @NonNull android.telephony.ims.ImsSsInfo);
+    method public void onSupplementaryServiceIndication(android.telephony.ims.ImsSsData);
+    method public void onUtConfigurationCallBarringQueried(int, android.telephony.ims.ImsSsInfo[]);
+    method public void onUtConfigurationCallForwardQueried(int, android.telephony.ims.ImsCallForwardInfo[]);
+    method public void onUtConfigurationCallWaitingQueried(int, android.telephony.ims.ImsSsInfo[]);
+    method @Deprecated public void onUtConfigurationQueried(int, android.os.Bundle);
+    method public void onUtConfigurationQueryFailed(int, android.telephony.ims.ImsReasonInfo);
+    method public void onUtConfigurationUpdateFailed(int, android.telephony.ims.ImsReasonInfo);
+    method public void onUtConfigurationUpdated(int);
+    field @Deprecated public static final String BUNDLE_KEY_CLIR = "queryClir";
+    field @Deprecated public static final String BUNDLE_KEY_SSINFO = "imsSsInfo";
+  }
+
+  public abstract class ImsVideoCallProvider {
+    ctor public ImsVideoCallProvider();
+    method public void changeCallDataUsage(long);
+    method public void changeCameraCapabilities(android.telecom.VideoProfile.CameraCapabilities);
+    method public void changePeerDimensions(int, int);
+    method public void changeVideoQuality(int);
+    method public void handleCallSessionEvent(int);
+    method public abstract void onRequestCallDataUsage();
+    method public abstract void onRequestCameraCapabilities();
+    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
+    method public abstract void onSetCamera(String);
+    method public void onSetCamera(String, int);
+    method public abstract void onSetDeviceOrientation(int);
+    method public abstract void onSetDisplaySurface(android.view.Surface);
+    method public abstract void onSetPauseImage(android.net.Uri);
+    method public abstract void onSetPreviewSurface(android.view.Surface);
+    method public abstract void onSetZoom(float);
+    method public void receiveSessionModifyRequest(android.telecom.VideoProfile);
+    method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+  }
+
+  public class ProvisioningManager {
+    method @NonNull public static android.telephony.ims.ProvisioningManager createForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public int getProvisioningIntValue(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getProvisioningStatusForCapability(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public String getProvisioningStringValue(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getRcsProvisioningStatusForCapability(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public boolean isRcsVolteSingleRegistrationCapable() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyRcsAutoConfigurationReceived(@NonNull byte[], boolean);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.Callback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public void registerRcsProvisioningCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.RcsProvisioningCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningIntValue(int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setProvisioningStatusForCapability(int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningStringValue(int, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void setRcsClientConfiguration(@NonNull android.telephony.ims.RcsClientConfiguration) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setRcsProvisioningStatusForCapability(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void triggerRcsReconfiguration();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull android.telephony.ims.ProvisioningManager.Callback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public void unregisterRcsProvisioningCallback(@NonNull android.telephony.ims.ProvisioningManager.RcsProvisioningCallback);
+    field @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public static final String ACTION_RCS_SINGLE_REGISTRATION_CAPABILITY_UPDATE = "android.telephony.ims.action.RCS_SINGLE_REGISTRATION_CAPABILITY_UPDATE";
+    field public static final String EXTRA_STATUS = "android.telephony.ims.extra.STATUS";
+    field public static final String EXTRA_SUBSCRIPTION_ID = "android.telephony.ims.extra.SUBSCRIPTION_ID";
+    field public static final int KEY_VOICE_OVER_WIFI_ENTITLEMENT_ID = 67; // 0x43
+    field public static final int KEY_VOICE_OVER_WIFI_MODE_OVERRIDE = 27; // 0x1b
+    field public static final int KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE = 26; // 0x1a
+    field public static final int PROVISIONING_VALUE_DISABLED = 0; // 0x0
+    field public static final int PROVISIONING_VALUE_ENABLED = 1; // 0x1
+    field public static final int STATUS_CAPABLE = 0; // 0x0
+    field public static final int STATUS_CARRIER_NOT_CAPABLE = 2; // 0x2
+    field public static final int STATUS_DEVICE_NOT_CAPABLE = 1; // 0x1
+    field public static final String STRING_QUERY_RESULT_ERROR_GENERIC = "STRING_QUERY_RESULT_ERROR_GENERIC";
+    field public static final String STRING_QUERY_RESULT_ERROR_NOT_READY = "STRING_QUERY_RESULT_ERROR_NOT_READY";
+  }
+
+  public static class ProvisioningManager.Callback {
+    ctor public ProvisioningManager.Callback();
+    method public void onProvisioningIntChanged(int, int);
+    method public void onProvisioningStringChanged(int, @NonNull String);
+  }
+
+  public static class ProvisioningManager.RcsProvisioningCallback {
+    ctor public ProvisioningManager.RcsProvisioningCallback();
+    method public void onAutoConfigurationErrorReceived(int, @NonNull String);
+    method public void onConfigurationChanged(@NonNull byte[]);
+    method public void onConfigurationReset();
+    method public void onPreProvisioningReceived(@NonNull byte[]);
+    method public void onRemoved();
+  }
+
+  public final class RcsClientConfiguration implements android.os.Parcelable {
+    ctor public RcsClientConfiguration(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String getClientVendor();
+    method @NonNull public String getClientVersion();
+    method @NonNull public String getRcsProfile();
+    method @NonNull public String getRcsVersion();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsClientConfiguration> CREATOR;
+    field public static final String RCS_PROFILE_1_0 = "UP_1.0";
+    field public static final String RCS_PROFILE_2_3 = "UP_2.3";
+  }
+
+  public final class RcsContactPresenceTuple implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.net.Uri getContactUri();
+    method @Nullable public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities getServiceCapabilities();
+    method @Nullable public String getServiceDescription();
+    method @NonNull public String getServiceId();
+    method @NonNull public String getServiceVersion();
+    method @NonNull public String getStatus();
+    method @Nullable public java.time.Instant getTime();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsContactPresenceTuple> CREATOR;
+    field public static final String SERVICE_ID_CALL_COMPOSER = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.callcomposer";
+    field public static final String SERVICE_ID_CHATBOT = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.chatbot";
+    field public static final String SERVICE_ID_CHATBOT_ROLE = "org.gsma.rcs.isbot";
+    field public static final String SERVICE_ID_CHATBOT_STANDALONE = " org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.chatbot.sa";
+    field public static final String SERVICE_ID_CHAT_V1 = "org.openmobilealliance:IM-session";
+    field public static final String SERVICE_ID_CHAT_V2 = "org.openmobilealliance:ChatSession";
+    field public static final String SERVICE_ID_FT = "org.openmobilealliance:File-Transfer-HTTP";
+    field public static final String SERVICE_ID_FT_OVER_SMS = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.ftsms";
+    field public static final String SERVICE_ID_GEO_PUSH = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.geopush";
+    field public static final String SERVICE_ID_GEO_PUSH_VIA_SMS = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.geosms";
+    field public static final String SERVICE_ID_MMTEL = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.mmtel";
+    field public static final String SERVICE_ID_POST_CALL = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.callunanswered";
+    field public static final String SERVICE_ID_SHARED_MAP = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.sharedmap";
+    field public static final String SERVICE_ID_SHARED_SKETCH = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.sharedsketch";
+    field public static final String TUPLE_BASIC_STATUS_CLOSED = "closed";
+    field public static final String TUPLE_BASIC_STATUS_OPEN = "open";
+  }
+
+  public static final class RcsContactPresenceTuple.Builder {
+    ctor public RcsContactPresenceTuple.Builder(@NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple build();
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setContactUri(@NonNull android.net.Uri);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setServiceCapabilities(@NonNull android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setServiceDescription(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setTime(@NonNull java.time.Instant);
+  }
+
+  public static final class RcsContactPresenceTuple.ServiceCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getSupportedDuplexModes();
+    method @NonNull public java.util.List<java.lang.String> getUnsupportedDuplexModes();
+    method public boolean isAudioCapable();
+    method public boolean isVideoCapable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities> CREATOR;
+    field public static final String DUPLEX_MODE_FULL = "full";
+    field public static final String DUPLEX_MODE_HALF = "half";
+    field public static final String DUPLEX_MODE_RECEIVE_ONLY = "receive-only";
+    field public static final String DUPLEX_MODE_SEND_ONLY = "send-only";
+  }
+
+  public static final class RcsContactPresenceTuple.ServiceCapabilities.Builder {
+    ctor public RcsContactPresenceTuple.ServiceCapabilities.Builder(boolean, boolean);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities.Builder addSupportedDuplexMode(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities.Builder addUnsupportedDuplexMode(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities build();
+  }
+
+  public final class RcsContactUceCapability implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCapabilityMechanism();
+    method @Nullable public android.telephony.ims.RcsContactPresenceTuple getCapabilityTuple(@NonNull String);
+    method @NonNull public java.util.List<android.telephony.ims.RcsContactPresenceTuple> getCapabilityTuples();
+    method @NonNull public android.net.Uri getContactUri();
+    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
+    method public int getRequestResult();
+    method public int getSourceType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CAPABILITY_MECHANISM_OPTIONS = 2; // 0x2
+    field public static final int CAPABILITY_MECHANISM_PRESENCE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsContactUceCapability> CREATOR;
+    field public static final int REQUEST_RESULT_FOUND = 3; // 0x3
+    field public static final int REQUEST_RESULT_NOT_FOUND = 2; // 0x2
+    field public static final int REQUEST_RESULT_NOT_ONLINE = 1; // 0x1
+    field public static final int REQUEST_RESULT_UNKNOWN = 0; // 0x0
+    field public static final int SOURCE_TYPE_CACHED = 1; // 0x1
+    field public static final int SOURCE_TYPE_NETWORK = 0; // 0x0
+  }
+
+  public static final class RcsContactUceCapability.OptionsBuilder {
+    ctor public RcsContactUceCapability.OptionsBuilder(@NonNull android.net.Uri);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder addFeatureTag(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder addFeatureTags(@NonNull java.util.Set<java.lang.String>);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability build();
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder setRequestResult(int);
+  }
+
+  public static final class RcsContactUceCapability.PresenceBuilder {
+    ctor public RcsContactUceCapability.PresenceBuilder(@NonNull android.net.Uri, int, int);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.PresenceBuilder addCapabilityTuple(@NonNull android.telephony.ims.RcsContactPresenceTuple);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.PresenceBuilder addCapabilityTuples(@NonNull java.util.List<android.telephony.ims.RcsContactPresenceTuple>);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability build();
+  }
+
+  public class RcsUceAdapter {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void addOnPublishStateChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RcsUceAdapter.OnPublishStateChangedListener) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getUcePublishState() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void removeOnPublishStateChangedListener(@NonNull android.telephony.ims.RcsUceAdapter.OnPublishStateChangedListener) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE, android.Manifest.permission.READ_CONTACTS}) public void requestAvailability(@NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RcsUceAdapter.CapabilitiesCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE, android.Manifest.permission.READ_CONTACTS}) public void requestCapabilities(@NonNull java.util.Collection<android.net.Uri>, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RcsUceAdapter.CapabilitiesCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUceSettingEnabled(boolean) throws android.telephony.ims.ImsException;
+    field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
+    field public static final int CAPABILITY_UPDATE_TRIGGER_ETAG_EXPIRED = 1; // 0x1
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_2G = 7; // 0x7
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_3G = 6; // 0x6
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_EHRPD = 4; // 0x4
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_HSPAPLUS = 5; // 0x5
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_IWLAN = 9; // 0x9
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_DISABLED = 2; // 0x2
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_ENABLED = 3; // 0x3
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_DISABLED = 10; // 0xa
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_ENABLED = 11; // 0xb
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_WLAN = 8; // 0x8
+    field public static final int CAPABILITY_UPDATE_TRIGGER_UNKNOWN = 0; // 0x0
+    field public static final int ERROR_FORBIDDEN = 6; // 0x6
+    field public static final int ERROR_GENERIC_FAILURE = 1; // 0x1
+    field public static final int ERROR_INSUFFICIENT_MEMORY = 10; // 0xa
+    field public static final int ERROR_LOST_NETWORK = 11; // 0xb
+    field public static final int ERROR_NOT_AUTHORIZED = 5; // 0x5
+    field public static final int ERROR_NOT_AVAILABLE = 3; // 0x3
+    field public static final int ERROR_NOT_ENABLED = 2; // 0x2
+    field public static final int ERROR_NOT_FOUND = 7; // 0x7
+    field public static final int ERROR_NOT_REGISTERED = 4; // 0x4
+    field public static final int ERROR_REQUEST_TIMEOUT = 9; // 0x9
+    field public static final int ERROR_REQUEST_TOO_LARGE = 8; // 0x8
+    field public static final int ERROR_SERVER_UNAVAILABLE = 12; // 0xc
+    field public static final int PUBLISH_STATE_NOT_PUBLISHED = 2; // 0x2
+    field public static final int PUBLISH_STATE_OK = 1; // 0x1
+    field public static final int PUBLISH_STATE_OTHER_ERROR = 6; // 0x6
+    field public static final int PUBLISH_STATE_RCS_PROVISION_ERROR = 4; // 0x4
+    field public static final int PUBLISH_STATE_REQUEST_TIMEOUT = 5; // 0x5
+    field public static final int PUBLISH_STATE_VOICE_PROVISION_ERROR = 3; // 0x3
+  }
+
+  public static interface RcsUceAdapter.CapabilitiesCallback {
+    method public void onCapabilitiesReceived(@NonNull java.util.List<android.telephony.ims.RcsContactUceCapability>);
+    method public void onComplete();
+    method public void onError(int, long);
+  }
+
+  public static interface RcsUceAdapter.OnPublishStateChangedListener {
+    method public void onPublishStateChange(int);
+  }
+
+  public final class RtpHeaderExtension implements android.os.Parcelable {
+    ctor public RtpHeaderExtension(@IntRange(from=1, to=14) int, @NonNull byte[]);
+    method public int describeContents();
+    method @NonNull public byte[] getExtensionData();
+    method @IntRange(from=1, to=14) public int getLocalIdentifier();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RtpHeaderExtension> CREATOR;
+  }
+
+  public final class RtpHeaderExtensionType implements android.os.Parcelable {
+    ctor public RtpHeaderExtensionType(@IntRange(from=1, to=14) int, @NonNull android.net.Uri);
+    method public int describeContents();
+    method @IntRange(from=1, to=14) public int getLocalIdentifier();
+    method @NonNull public android.net.Uri getUri();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RtpHeaderExtensionType> CREATOR;
+  }
+
+  public final class SipDelegateConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getHomeDomain();
+    method @Nullable public String getImei();
+    method @Nullable public android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration getIpSecConfiguration();
+    method @NonNull public java.net.InetSocketAddress getLocalAddress();
+    method public int getMaxUdpPayloadSizeBytes();
+    method @Nullable public java.net.InetSocketAddress getNatSocketAddress();
+    method @Nullable public String getPrivateUserIdentifier();
+    method @Nullable public android.net.Uri getPublicGruuUri();
+    method @Nullable public String getPublicUserIdentifier();
+    method @Nullable public String getSipAssociatedUriHeader();
+    method @Nullable public String getSipAuthenticationHeader();
+    method @Nullable public String getSipAuthenticationNonce();
+    method @Nullable public String getSipCniHeader();
+    method @Nullable public String getSipContactUserParameter();
+    method @Nullable public String getSipPaniHeader();
+    method @Nullable public String getSipPathHeader();
+    method @Nullable public String getSipPlaniHeader();
+    method @NonNull public java.net.InetSocketAddress getSipServerAddress();
+    method @Nullable public String getSipServiceRouteHeader();
+    method @Nullable public String getSipUserAgentHeader();
+    method public int getTransportType();
+    method @IntRange(from=0) public long getVersion();
+    method public boolean isSipCompactFormEnabled();
+    method public boolean isSipKeepaliveEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipDelegateConfiguration> CREATOR;
+    field public static final int SIP_TRANSPORT_TCP = 1; // 0x1
+    field public static final int SIP_TRANSPORT_UDP = 0; // 0x0
+    field public static final int UDP_PAYLOAD_SIZE_UNDEFINED = -1; // 0xffffffff
+  }
+
+  public static final class SipDelegateConfiguration.Builder {
+    ctor public SipDelegateConfiguration.Builder(@IntRange(from=0) long, int, @NonNull java.net.InetSocketAddress, @NonNull java.net.InetSocketAddress);
+    ctor public SipDelegateConfiguration.Builder(@NonNull android.telephony.ims.SipDelegateConfiguration);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration build();
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setHomeDomain(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setImei(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setIpSecConfiguration(@Nullable android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setMaxUdpPayloadSizeBytes(@IntRange(from=1) int);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setNatSocketAddress(@Nullable java.net.InetSocketAddress);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setPrivateUserIdentifier(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setPublicGruuUri(@Nullable android.net.Uri);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setPublicUserIdentifier(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipAssociatedUriHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipAuthenticationHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipAuthenticationNonce(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipCniHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipCompactFormEnabled(boolean);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipContactUserParameter(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipKeepaliveEnabled(boolean);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipPaniHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipPathHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipPlaniHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipServiceRouteHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipUserAgentHeader(@Nullable String);
+  }
+
+  public static final class SipDelegateConfiguration.IpSecConfiguration {
+    ctor public SipDelegateConfiguration.IpSecConfiguration(int, int, int, int, int, int, @NonNull String);
+    method public int getLastLocalTxPort();
+    method public int getLastRemoteTxPort();
+    method public int getLocalRxPort();
+    method public int getLocalTxPort();
+    method public int getRemoteRxPort();
+    method public int getRemoteTxPort();
+    method @NonNull public String getSipSecurityVerifyHeader();
+  }
+
+  public interface SipDelegateConnection {
+    method public void cleanupSession(@NonNull String);
+    method public void notifyMessageReceiveError(@NonNull String, int);
+    method public void notifyMessageReceived(@NonNull String);
+    method public void sendMessage(@NonNull android.telephony.ims.SipMessage, long);
+  }
+
+  public class SipDelegateManager {
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void createSipDelegate(@NonNull android.telephony.ims.DelegateRequest, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.stub.DelegateConnectionStateCallback, @NonNull android.telephony.ims.stub.DelegateConnectionMessageCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void destroySipDelegate(@NonNull android.telephony.ims.SipDelegateConnection, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public boolean isSupported() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void triggerFullNetworkRegistration(@NonNull android.telephony.ims.SipDelegateConnection, @IntRange(from=100, to=699) int, @Nullable String);
+    field public static final int DENIED_REASON_INVALID = 4; // 0x4
+    field public static final int DENIED_REASON_IN_USE_BY_ANOTHER_DELEGATE = 1; // 0x1
+    field public static final int DENIED_REASON_NOT_ALLOWED = 2; // 0x2
+    field public static final int DENIED_REASON_SINGLE_REGISTRATION_NOT_ALLOWED = 3; // 0x3
+    field public static final int DENIED_REASON_UNKNOWN = 0; // 0x0
+    field public static final int MESSAGE_FAILURE_REASON_DELEGATE_CLOSED = 2; // 0x2
+    field public static final int MESSAGE_FAILURE_REASON_DELEGATE_DEAD = 1; // 0x1
+    field public static final int MESSAGE_FAILURE_REASON_INTERNAL_DELEGATE_STATE_TRANSITION = 11; // 0xb
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_BODY_CONTENT = 5; // 0x5
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_FEATURE_TAG = 6; // 0x6
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_HEADER_FIELDS = 4; // 0x4
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_START_LINE = 3; // 0x3
+    field public static final int MESSAGE_FAILURE_REASON_NETWORK_NOT_AVAILABLE = 8; // 0x8
+    field public static final int MESSAGE_FAILURE_REASON_NOT_REGISTERED = 9; // 0x9
+    field public static final int MESSAGE_FAILURE_REASON_STALE_IMS_CONFIGURATION = 10; // 0xa
+    field public static final int MESSAGE_FAILURE_REASON_TAG_NOT_ENABLED_FOR_DELEGATE = 7; // 0x7
+    field public static final int MESSAGE_FAILURE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int SIP_DELEGATE_DESTROY_REASON_REQUESTED_BY_APP = 2; // 0x2
+    field public static final int SIP_DELEGATE_DESTROY_REASON_SERVICE_DEAD = 1; // 0x1
+    field public static final int SIP_DELEGATE_DESTROY_REASON_SUBSCRIPTION_TORN_DOWN = 4; // 0x4
+    field public static final int SIP_DELEGATE_DESTROY_REASON_UNKNOWN = 0; // 0x0
+    field public static final int SIP_DELEGATE_DESTROY_REASON_USER_DISABLED_RCS = 3; // 0x3
+  }
+
+  public final class SipMessage implements android.os.Parcelable {
+    ctor public SipMessage(@NonNull String, @NonNull String, @NonNull byte[]);
+    method public int describeContents();
+    method @Nullable public String getCallIdParameter();
+    method @NonNull public byte[] getContent();
+    method @NonNull public String getHeaderSection();
+    method @NonNull public String getStartLine();
+    method @NonNull public String getViaBranchParameter();
+    method @NonNull public byte[] toEncodedMessage();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipMessage> CREATOR;
+  }
+
+}
+
+package android.telephony.ims.feature {
+
+  public final class CapabilityChangeRequest implements android.os.Parcelable {
+    method public void addCapabilitiesToDisableForTech(int, int);
+    method public void addCapabilitiesToEnableForTech(int, int);
+    method public int describeContents();
+    method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToDisable();
+    method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToEnable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.feature.CapabilityChangeRequest> CREATOR;
+  }
+
+  public static class CapabilityChangeRequest.CapabilityPair {
+    ctor public CapabilityChangeRequest.CapabilityPair(int, int);
+    method public int getCapability();
+    method public int getRadioTech();
+  }
+
+  public abstract class ImsFeature {
+    ctor public ImsFeature();
+    method public abstract void changeEnabledCapabilities(android.telephony.ims.feature.CapabilityChangeRequest, android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
+    method public int getFeatureState();
+    method public final int getSlotIndex();
+    method public abstract void onFeatureReady();
+    method public abstract void onFeatureRemoved();
+    method public final void setFeatureState(int);
+    field public static final int CAPABILITY_ERROR_GENERIC = -1; // 0xffffffff
+    field public static final int CAPABILITY_SUCCESS = 0; // 0x0
+    field public static final int FEATURE_EMERGENCY_MMTEL = 0; // 0x0
+    field public static final int FEATURE_MMTEL = 1; // 0x1
+    field public static final int FEATURE_RCS = 2; // 0x2
+    field public static final int STATE_INITIALIZING = 1; // 0x1
+    field public static final int STATE_READY = 2; // 0x2
+    field public static final int STATE_UNAVAILABLE = 0; // 0x0
+  }
+
+  @Deprecated public static class ImsFeature.Capabilities {
+    field @Deprecated protected int mCapabilities;
+  }
+
+  protected static class ImsFeature.CapabilityCallbackProxy {
+    method public void onChangeCapabilityConfigurationError(int, int, int);
+  }
+
+  public class MmTelFeature extends android.telephony.ims.feature.ImsFeature {
+    ctor public MmTelFeature();
+    method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
+    method public void changeOfferedRtpHeaderExtensionTypes(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtensionType>);
+    method @Nullable public android.telephony.ims.ImsCallProfile createCallProfile(int, int);
+    method @Nullable public android.telephony.ims.stub.ImsCallSessionImplBase createCallSession(@NonNull android.telephony.ims.ImsCallProfile);
+    method @NonNull public android.telephony.ims.stub.ImsEcbmImplBase getEcbm();
+    method @NonNull public android.telephony.ims.stub.ImsMultiEndpointImplBase getMultiEndpoint();
+    method @NonNull public android.telephony.ims.stub.ImsSmsImplBase getSmsImplementation();
+    method @NonNull public android.telephony.ims.stub.ImsUtImplBase getUt();
+    method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.MmTelFeature.MmTelCapabilities);
+    method public final void notifyIncomingCall(@NonNull android.telephony.ims.stub.ImsCallSessionImplBase, @NonNull android.os.Bundle);
+    method public final void notifyRejectedCall(@NonNull android.telephony.ims.ImsCallProfile, @NonNull android.telephony.ims.ImsReasonInfo);
+    method public final void notifyVoiceMessageCountUpdate(int);
+    method public void onFeatureReady();
+    method public void onFeatureRemoved();
+    method public boolean queryCapabilityConfiguration(int, int);
+    method @NonNull public final android.telephony.ims.feature.MmTelFeature.MmTelCapabilities queryCapabilityStatus();
+    method public void setUiTtyMode(int, @Nullable android.os.Message);
+    method public int shouldProcessCall(@NonNull String[]);
+    field public static final String EXTRA_IS_UNKNOWN_CALL = "android.telephony.ims.feature.extra.IS_UNKNOWN_CALL";
+    field public static final String EXTRA_IS_USSD = "android.telephony.ims.feature.extra.IS_USSD";
+    field public static final int PROCESS_CALL_CSFB = 1; // 0x1
+    field public static final int PROCESS_CALL_IMS = 0; // 0x0
+  }
+
+  public static class MmTelFeature.MmTelCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
+    ctor public MmTelFeature.MmTelCapabilities();
+    ctor @Deprecated public MmTelFeature.MmTelCapabilities(android.telephony.ims.feature.ImsFeature.Capabilities);
+    ctor public MmTelFeature.MmTelCapabilities(int);
+    method public final void addCapabilities(int);
+    method public final void removeCapabilities(int);
+  }
+
+  public class RcsFeature extends android.telephony.ims.feature.ImsFeature {
+    ctor @Deprecated public RcsFeature();
+    ctor public RcsFeature(@NonNull java.util.concurrent.Executor);
+    method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
+    method @NonNull public android.telephony.ims.stub.RcsCapabilityExchangeImplBase createCapabilityExchangeImpl(@NonNull android.telephony.ims.stub.CapabilityExchangeEventListener);
+    method public void destroyCapabilityExchangeImpl(@NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase);
+    method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.RcsFeature.RcsImsCapabilities);
+    method public void onFeatureReady();
+    method public void onFeatureRemoved();
+    method public boolean queryCapabilityConfiguration(int, int);
+    method @NonNull public final android.telephony.ims.feature.RcsFeature.RcsImsCapabilities queryCapabilityStatus();
+  }
+
+  public static class RcsFeature.RcsImsCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
+    ctor public RcsFeature.RcsImsCapabilities(int);
+    method public void addCapabilities(int);
+    method public boolean isCapable(int);
+    method public void removeCapabilities(int);
+    field public static final int CAPABILITY_TYPE_NONE = 0; // 0x0
+    field public static final int CAPABILITY_TYPE_OPTIONS_UCE = 1; // 0x1
+    field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
+  }
+
+}
+
+package android.telephony.ims.stub {
+
+  public interface CapabilityExchangeEventListener {
+    method public void onRemoteCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.Set<java.lang.String>, @NonNull android.telephony.ims.stub.CapabilityExchangeEventListener.OptionsRequestCallback) throws android.telephony.ims.ImsException;
+    method public void onRequestPublishCapabilities(int) throws android.telephony.ims.ImsException;
+    method public void onUnpublish() throws android.telephony.ims.ImsException;
+  }
+
+  public static interface CapabilityExchangeEventListener.OptionsRequestCallback {
+    method public void onRespondToCapabilityRequest(@NonNull android.telephony.ims.RcsContactUceCapability, boolean);
+    method public void onRespondToCapabilityRequestWithError(@IntRange(from=100, to=699) int, @NonNull String);
+  }
+
+  public interface DelegateConnectionMessageCallback {
+    method public void onMessageReceived(@NonNull android.telephony.ims.SipMessage);
+    method public void onMessageSendFailure(@NonNull String, int);
+    method public void onMessageSent(@NonNull String);
+  }
+
+  public interface DelegateConnectionStateCallback {
+    method public void onConfigurationChanged(@NonNull android.telephony.ims.SipDelegateConfiguration);
+    method public void onCreated(@NonNull android.telephony.ims.SipDelegateConnection);
+    method public void onDestroyed(int);
+    method public void onFeatureTagStatusChanged(@NonNull android.telephony.ims.DelegateRegistrationState, @NonNull java.util.Set<android.telephony.ims.FeatureTagState>);
+  }
+
+  public class ImsCallSessionImplBase implements java.lang.AutoCloseable {
+    ctor public ImsCallSessionImplBase();
+    method public void accept(int, android.telephony.ims.ImsStreamMediaProfile);
+    method public void close();
+    method public void deflect(String);
+    method public void extendToConference(String[]);
+    method public String getCallId();
+    method public android.telephony.ims.ImsCallProfile getCallProfile();
+    method public android.telephony.ims.ImsVideoCallProvider getImsVideoCallProvider();
+    method public android.telephony.ims.ImsCallProfile getLocalCallProfile();
+    method public String getProperty(String);
+    method public android.telephony.ims.ImsCallProfile getRemoteCallProfile();
+    method public int getState();
+    method public void hold(android.telephony.ims.ImsStreamMediaProfile);
+    method public void inviteParticipants(String[]);
+    method public boolean isInCall();
+    method public boolean isMultiparty();
+    method public void merge();
+    method public void reject(int);
+    method public void removeParticipants(String[]);
+    method public void resume(android.telephony.ims.ImsStreamMediaProfile);
+    method public void sendDtmf(char, android.os.Message);
+    method public void sendRtpHeaderExtensions(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtension>);
+    method public void sendRttMessage(String);
+    method public void sendRttModifyRequest(android.telephony.ims.ImsCallProfile);
+    method public void sendRttModifyResponse(boolean);
+    method public void sendUssd(String);
+    method public void setListener(android.telephony.ims.ImsCallSessionListener);
+    method public void setMute(boolean);
+    method public void start(String, android.telephony.ims.ImsCallProfile);
+    method public void startConference(String[], android.telephony.ims.ImsCallProfile);
+    method public void startDtmf(char);
+    method public void stopDtmf();
+    method public void terminate(int);
+    method public void update(int, android.telephony.ims.ImsStreamMediaProfile);
+    field public static final int USSD_MODE_NOTIFY = 0; // 0x0
+    field public static final int USSD_MODE_REQUEST = 1; // 0x1
+  }
+
+  public static class ImsCallSessionImplBase.State {
+    method public static String toString(int);
+    field public static final int ESTABLISHED = 4; // 0x4
+    field public static final int ESTABLISHING = 3; // 0x3
+    field public static final int IDLE = 0; // 0x0
+    field public static final int INITIATED = 1; // 0x1
+    field public static final int INVALID = -1; // 0xffffffff
+    field public static final int NEGOTIATING = 2; // 0x2
+    field public static final int REESTABLISHING = 6; // 0x6
+    field public static final int RENEGOTIATING = 5; // 0x5
+    field public static final int TERMINATED = 8; // 0x8
+    field public static final int TERMINATING = 7; // 0x7
+  }
+
+  public class ImsConfigImplBase {
+    ctor public ImsConfigImplBase();
+    method public int getConfigInt(int);
+    method public String getConfigString(int);
+    method public final void notifyAutoConfigurationErrorReceived(int, @NonNull String);
+    method public final void notifyPreProvisioningReceived(@NonNull byte[]);
+    method public final void notifyProvisionedValueChanged(int, int);
+    method public final void notifyProvisionedValueChanged(int, String);
+    method public void notifyRcsAutoConfigurationReceived(@NonNull byte[], boolean);
+    method public void notifyRcsAutoConfigurationRemoved();
+    method public int setConfig(int, int);
+    method public int setConfig(int, String);
+    method public void setRcsClientConfiguration(@NonNull android.telephony.ims.RcsClientConfiguration);
+    method public void triggerAutoConfiguration();
+    field public static final int CONFIG_RESULT_FAILED = 1; // 0x1
+    field public static final int CONFIG_RESULT_SUCCESS = 0; // 0x0
+    field public static final int CONFIG_RESULT_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public class ImsEcbmImplBase {
+    ctor public ImsEcbmImplBase();
+    method public final void enteredEcbm();
+    method public void exitEmergencyCallbackMode();
+    method public final void exitedEcbm();
+  }
+
+  public final class ImsFeatureConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.Set<android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair> getServiceFeatures();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.stub.ImsFeatureConfiguration> CREATOR;
+  }
+
+  public static class ImsFeatureConfiguration.Builder {
+    ctor public ImsFeatureConfiguration.Builder();
+    method public android.telephony.ims.stub.ImsFeatureConfiguration.Builder addFeature(int, int);
+    method public android.telephony.ims.stub.ImsFeatureConfiguration build();
+  }
+
+  public static final class ImsFeatureConfiguration.FeatureSlotPair {
+    ctor public ImsFeatureConfiguration.FeatureSlotPair(int, int);
+    field public final int featureType;
+    field public final int slotId;
+  }
+
+  public class ImsMultiEndpointImplBase {
+    ctor public ImsMultiEndpointImplBase();
+    method public final void onImsExternalCallStateUpdate(java.util.List<android.telephony.ims.ImsExternalCallState>);
+    method public void requestImsExternalCallStateInfo();
+  }
+
+  public class ImsRegistrationImplBase {
+    ctor public ImsRegistrationImplBase();
+    method public final void onDeregistered(android.telephony.ims.ImsReasonInfo);
+    method public final void onRegistered(int);
+    method public final void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method public final void onRegistering(int);
+    method public final void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method public final void onSubscriberAssociatedUriChanged(android.net.Uri[]);
+    method public final void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo);
+    method public void triggerFullNetworkRegistration(@IntRange(from=100, to=699) int, @Nullable String);
+    method public void triggerSipDelegateDeregistration();
+    method public void updateSipDelegateRegistration();
+    field public static final int REGISTRATION_TECH_CROSS_SIM = 2; // 0x2
+    field public static final int REGISTRATION_TECH_IWLAN = 1; // 0x1
+    field public static final int REGISTRATION_TECH_LTE = 0; // 0x0
+    field public static final int REGISTRATION_TECH_NONE = -1; // 0xffffffff
+    field public static final int REGISTRATION_TECH_NR = 3; // 0x3
+  }
+
+  public class ImsSmsImplBase {
+    ctor public ImsSmsImplBase();
+    method public void acknowledgeSms(int, @IntRange(from=0, to=65535) int, int);
+    method public void acknowledgeSmsReport(int, @IntRange(from=0, to=65535) int, int);
+    method public String getSmsFormat();
+    method public void onReady();
+    method @Deprecated public final void onSendSmsResult(int, @IntRange(from=0, to=65535) int, int, int) throws java.lang.RuntimeException;
+    method public final void onSendSmsResultError(int, @IntRange(from=0, to=65535) int, int, int, int) throws java.lang.RuntimeException;
+    method public final void onSendSmsResultSuccess(int, @IntRange(from=0, to=65535) int) throws java.lang.RuntimeException;
+    method public final void onSmsReceived(int, String, byte[]) throws java.lang.RuntimeException;
+    method @Deprecated public final void onSmsStatusReportReceived(int, @IntRange(from=0, to=65535) int, String, byte[]) throws java.lang.RuntimeException;
+    method public final void onSmsStatusReportReceived(int, String, byte[]) throws java.lang.RuntimeException;
+    method public void sendSms(int, @IntRange(from=0, to=65535) int, String, String, boolean, byte[]);
+    field public static final int DELIVER_STATUS_ERROR_GENERIC = 2; // 0x2
+    field public static final int DELIVER_STATUS_ERROR_NO_MEMORY = 3; // 0x3
+    field public static final int DELIVER_STATUS_ERROR_REQUEST_NOT_SUPPORTED = 4; // 0x4
+    field public static final int DELIVER_STATUS_OK = 1; // 0x1
+    field public static final int RESULT_NO_NETWORK_ERROR = -1; // 0xffffffff
+    field public static final int SEND_STATUS_ERROR = 2; // 0x2
+    field public static final int SEND_STATUS_ERROR_FALLBACK = 4; // 0x4
+    field public static final int SEND_STATUS_ERROR_RETRY = 3; // 0x3
+    field public static final int SEND_STATUS_OK = 1; // 0x1
+    field public static final int STATUS_REPORT_STATUS_ERROR = 2; // 0x2
+    field public static final int STATUS_REPORT_STATUS_OK = 1; // 0x1
+  }
+
+  public class ImsUtImplBase {
+    ctor public ImsUtImplBase();
+    method public void close();
+    method public int queryCallBarring(int);
+    method public int queryCallBarringForServiceClass(int, int);
+    method public int queryCallForward(int, String);
+    method public int queryCallWaiting();
+    method public int queryClip();
+    method public int queryClir();
+    method public int queryColp();
+    method public int queryColr();
+    method public void setListener(android.telephony.ims.ImsUtListener);
+    method public int transact(android.os.Bundle);
+    method public int updateCallBarring(int, int, String[]);
+    method public int updateCallBarringForServiceClass(int, int, String[], int);
+    method public int updateCallForward(int, int, String, int, int);
+    method public int updateCallWaiting(boolean, int);
+    method public int updateClip(boolean);
+    method public int updateClir(int);
+    method public int updateColp(boolean);
+    method public int updateColr(int);
+  }
+
+  public class RcsCapabilityExchangeImplBase {
+    ctor public RcsCapabilityExchangeImplBase();
+    method public void publishCapabilities(@NonNull String, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.PublishResponseCallback);
+    method public void sendOptionsCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.Set<java.lang.String>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.OptionsResponseCallback);
+    method public void subscribeForCapabilities(@NonNull java.util.Collection<android.net.Uri>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.SubscribeResponseCallback);
+    field public static final int COMMAND_CODE_FETCH_ERROR = 3; // 0x3
+    field public static final int COMMAND_CODE_GENERIC_FAILURE = 1; // 0x1
+    field public static final int COMMAND_CODE_INSUFFICIENT_MEMORY = 5; // 0x5
+    field public static final int COMMAND_CODE_INVALID_PARAM = 2; // 0x2
+    field public static final int COMMAND_CODE_LOST_NETWORK_CONNECTION = 6; // 0x6
+    field public static final int COMMAND_CODE_NOT_FOUND = 8; // 0x8
+    field public static final int COMMAND_CODE_NOT_SUPPORTED = 7; // 0x7
+    field public static final int COMMAND_CODE_NO_CHANGE = 10; // 0xa
+    field public static final int COMMAND_CODE_REQUEST_TIMEOUT = 4; // 0x4
+    field public static final int COMMAND_CODE_SERVICE_UNAVAILABLE = 9; // 0x9
+    field public static final int COMMAND_CODE_SERVICE_UNKNOWN = 0; // 0x0
+  }
+
+  public static interface RcsCapabilityExchangeImplBase.OptionsResponseCallback {
+    method public void onCommandError(int) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(int, @NonNull String, @NonNull java.util.List<java.lang.String>) throws android.telephony.ims.ImsException;
+  }
+
+  public static interface RcsCapabilityExchangeImplBase.PublishResponseCallback {
+    method public void onCommandError(int) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String, @IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+  }
+
+  public static interface RcsCapabilityExchangeImplBase.SubscribeResponseCallback {
+    method public void onCommandError(int) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String, @IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+    method public void onNotifyCapabilitiesUpdate(@NonNull java.util.List<java.lang.String>) throws android.telephony.ims.ImsException;
+    method public void onResourceTerminated(@NonNull java.util.List<android.util.Pair<android.net.Uri,java.lang.String>>) throws android.telephony.ims.ImsException;
+    method public void onTerminated(@NonNull String, long) throws android.telephony.ims.ImsException;
+  }
+
+  public interface SipDelegate {
+    method public void cleanupSession(@NonNull String);
+    method public void notifyMessageReceiveError(@NonNull String, int);
+    method public void notifyMessageReceived(@NonNull String);
+    method public void sendMessage(@NonNull android.telephony.ims.SipMessage, long);
+  }
+
+  public class SipTransportImplBase {
+    ctor public SipTransportImplBase(@NonNull java.util.concurrent.Executor);
+    method public void createSipDelegate(int, @NonNull android.telephony.ims.DelegateRequest, @NonNull android.telephony.ims.DelegateStateCallback, @NonNull android.telephony.ims.DelegateMessageCallback);
+    method public void destroySipDelegate(@NonNull android.telephony.ims.stub.SipDelegate, int);
+  }
+
+}
+
+package android.telephony.mbms {
+
+  public static class DownloadRequest.Builder {
+    method public android.telephony.mbms.DownloadRequest.Builder setServiceId(String);
+  }
+
+  public final class FileInfo implements android.os.Parcelable {
+    ctor public FileInfo(android.net.Uri, String);
+  }
+
+  public final class FileServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    ctor public FileServiceInfo(java.util.Map<java.util.Locale,java.lang.String>, String, java.util.List<java.util.Locale>, String, java.util.Date, java.util.Date, java.util.List<android.telephony.mbms.FileInfo>);
+  }
+
+  public class MbmsDownloadReceiver extends android.content.BroadcastReceiver {
+    field public static final int RESULT_APP_NOTIFICATION_ERROR = 6; // 0x6
+    field public static final int RESULT_BAD_TEMP_FILE_ROOT = 3; // 0x3
+    field public static final int RESULT_DOWNLOAD_FINALIZATION_ERROR = 4; // 0x4
+    field public static final int RESULT_INVALID_ACTION = 1; // 0x1
+    field public static final int RESULT_MALFORMED_INTENT = 2; // 0x2
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_TEMP_FILE_GENERATION_ERROR = 5; // 0x5
+  }
+
+  public final class StreamingServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    ctor public StreamingServiceInfo(java.util.Map<java.util.Locale,java.lang.String>, String, java.util.List<java.util.Locale>, String, java.util.Date, java.util.Date);
+  }
+
+  public final class UriPathPair implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.net.Uri getContentUri();
+    method public android.net.Uri getFilePathUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.UriPathPair> CREATOR;
+  }
+
+}
+
+package android.telephony.mbms.vendor {
+
+  public class MbmsDownloadServiceBase extends android.os.Binder implements android.os.IInterface {
+    ctor public MbmsDownloadServiceBase();
+    method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+    method public int addServiceAnnouncement(int, @NonNull byte[]);
+    method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
+    method public android.os.IBinder asBinder();
+    method public int cancelDownload(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
+    method public void dispose(int) throws android.os.RemoteException;
+    method public int download(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
+    method public int initialize(int, android.telephony.mbms.MbmsDownloadSessionCallback) throws android.os.RemoteException;
+    method @NonNull public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads(int) throws android.os.RemoteException;
+    method public void onAppCallbackDied(int, int);
+    method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;
+    method public int removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+    method public int removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
+    method public int requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo) throws android.os.RemoteException;
+    method public int requestUpdateFileServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
+    method public int resetDownloadKnowledge(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
+    method public int setTempFileRootDirectory(int, String) throws android.os.RemoteException;
+  }
+
+  public class MbmsGroupCallServiceBase extends android.app.Service {
+    ctor public MbmsGroupCallServiceBase();
+    method public void dispose(int) throws android.os.RemoteException;
+    method public int initialize(@NonNull android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException;
+    method public void onAppCallbackDied(int, int);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public int startGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull android.telephony.mbms.GroupCallCallback);
+    method public void stopGroupCall(int, long);
+    method public void updateGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);
+  }
+
+  public class MbmsStreamingServiceBase extends android.os.Binder implements android.os.IInterface {
+    ctor public MbmsStreamingServiceBase();
+    method public android.os.IBinder asBinder();
+    method public void dispose(int) throws android.os.RemoteException;
+    method @Nullable public android.net.Uri getPlaybackUri(int, String) throws android.os.RemoteException;
+    method public int initialize(android.telephony.mbms.MbmsStreamingSessionCallback, int) throws android.os.RemoteException;
+    method public void onAppCallbackDied(int, int);
+    method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;
+    method public int requestUpdateStreamingServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
+    method public int startStreaming(int, String, android.telephony.mbms.StreamingServiceCallback) throws android.os.RemoteException;
+    method public void stopStreaming(int, String) throws android.os.RemoteException;
+  }
+
+  public class VendorUtils {
+    ctor public VendorUtils();
+    method public static android.content.ComponentName getAppReceiverFromPackageName(android.content.Context, String);
+    field public static final String ACTION_CLEANUP = "android.telephony.mbms.action.CLEANUP";
+    field public static final String ACTION_DOWNLOAD_RESULT_INTERNAL = "android.telephony.mbms.action.DOWNLOAD_RESULT_INTERNAL";
+    field public static final String ACTION_FILE_DESCRIPTOR_REQUEST = "android.telephony.mbms.action.FILE_DESCRIPTOR_REQUEST";
+    field public static final String EXTRA_FD_COUNT = "android.telephony.mbms.extra.FD_COUNT";
+    field public static final String EXTRA_FINAL_URI = "android.telephony.mbms.extra.FINAL_URI";
+    field public static final String EXTRA_FREE_URI_LIST = "android.telephony.mbms.extra.FREE_URI_LIST";
+    field public static final String EXTRA_PAUSED_LIST = "android.telephony.mbms.extra.PAUSED_LIST";
+    field public static final String EXTRA_PAUSED_URI_LIST = "android.telephony.mbms.extra.PAUSED_URI_LIST";
+    field public static final String EXTRA_SERVICE_ID = "android.telephony.mbms.extra.SERVICE_ID";
+    field public static final String EXTRA_TEMP_FILES_IN_USE = "android.telephony.mbms.extra.TEMP_FILES_IN_USE";
+    field public static final String EXTRA_TEMP_FILE_ROOT = "android.telephony.mbms.extra.TEMP_FILE_ROOT";
+    field public static final String EXTRA_TEMP_LIST = "android.telephony.mbms.extra.TEMP_LIST";
+  }
+
+}
+
+package android.text {
+
+  public final class FontConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Alias> getAliases();
+    method @IntRange(from=0) public int getConfigVersion();
+    method @NonNull public java.util.List<android.text.FontConfig.FontFamily> getFontFamilies();
+    method public long getLastModifiedTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig> CREATOR;
+  }
+
+  public static final class FontConfig.Alias implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getName();
+    method @NonNull public String getOriginal();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Alias> CREATOR;
+  }
+
+  public static final class FontConfig.Font implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.io.File getFile();
+    method @Nullable public String getFontFamilyName();
+    method @NonNull public String getFontVariationSettings();
+    method @NonNull public String getPostScriptName();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+    method public int getTtcIndex();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Font> CREATOR;
+  }
+
+  public static final class FontConfig.FontFamily implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Font> getFontList();
+    method @NonNull public android.os.LocaleList getLocaleList();
+    method @Nullable public String getName();
+    method public int getVariant();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.FontFamily> CREATOR;
+    field public static final int VARIANT_COMPACT = 1; // 0x1
+    field public static final int VARIANT_DEFAULT = 0; // 0x0
+    field public static final int VARIANT_ELEGANT = 2; // 0x2
+  }
+
+}
+
+package android.util {
+
+  public class EventLog {
+    method public static void readEventsOnWrapping(int[], long, java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException;
+  }
+
+  public static final class EventLog.Event {
+    method public int getUid();
+  }
+
+}
+
+package android.uwb {
+
+  public final class AngleMeasurement implements android.os.Parcelable {
+    ctor public AngleMeasurement(@FloatRange(from=-3.141592653589793, to=3.141592653589793) double, @FloatRange(from=0.0, to=3.141592653589793) double, @FloatRange(from=0.0, to=1.0) double);
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public double getConfidenceLevel();
+    method @FloatRange(from=0.0, to=3.141592653589793) public double getErrorRadians();
+    method @FloatRange(from=-3.141592653589793, to=3.141592653589793) public double getRadians();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.AngleMeasurement> CREATOR;
+  }
+
+  public final class AngleOfArrivalMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.uwb.AngleMeasurement getAltitude();
+    method @NonNull public android.uwb.AngleMeasurement getAzimuth();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.AngleOfArrivalMeasurement> CREATOR;
+  }
+
+  public static final class AngleOfArrivalMeasurement.Builder {
+    ctor public AngleOfArrivalMeasurement.Builder(@NonNull android.uwb.AngleMeasurement);
+    method @NonNull public android.uwb.AngleOfArrivalMeasurement build();
+    method @NonNull public android.uwb.AngleOfArrivalMeasurement.Builder setAltitude(@NonNull android.uwb.AngleMeasurement);
+  }
+
+  public final class DistanceMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public double getConfidenceLevel();
+    method @FloatRange(from=0.0) public double getErrorMeters();
+    method public double getMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.DistanceMeasurement> CREATOR;
+  }
+
+  public static final class DistanceMeasurement.Builder {
+    ctor public DistanceMeasurement.Builder();
+    method @NonNull public android.uwb.DistanceMeasurement build();
+    method @NonNull public android.uwb.DistanceMeasurement.Builder setConfidenceLevel(@FloatRange(from=0.0, to=1.0) double);
+    method @NonNull public android.uwb.DistanceMeasurement.Builder setErrorMeters(@FloatRange(from=0.0) double);
+    method @NonNull public android.uwb.DistanceMeasurement.Builder setMeters(double);
+  }
+
+  public final class RangingMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.uwb.AngleOfArrivalMeasurement getAngleOfArrivalMeasurement();
+    method @Nullable public android.uwb.DistanceMeasurement getDistanceMeasurement();
+    method public long getElapsedRealtimeNanos();
+    method @NonNull public android.uwb.UwbAddress getRemoteDeviceAddress();
+    method public int getStatus();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.RangingMeasurement> CREATOR;
+    field public static final int RANGING_STATUS_FAILURE_OUT_OF_RANGE = 1; // 0x1
+    field public static final int RANGING_STATUS_FAILURE_UNKNOWN_ERROR = -1; // 0xffffffff
+    field public static final int RANGING_STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public static final class RangingMeasurement.Builder {
+    ctor public RangingMeasurement.Builder();
+    method @NonNull public android.uwb.RangingMeasurement build();
+    method @NonNull public android.uwb.RangingMeasurement.Builder setAngleOfArrivalMeasurement(@NonNull android.uwb.AngleOfArrivalMeasurement);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setDistanceMeasurement(@NonNull android.uwb.DistanceMeasurement);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setElapsedRealtimeNanos(long);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setRemoteDeviceAddress(@NonNull android.uwb.UwbAddress);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setStatus(int);
+  }
+
+  public final class RangingReport implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.uwb.RangingMeasurement> getMeasurements();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.RangingReport> CREATOR;
+  }
+
+  public static final class RangingReport.Builder {
+    ctor public RangingReport.Builder();
+    method @NonNull public android.uwb.RangingReport.Builder addMeasurement(@NonNull android.uwb.RangingMeasurement);
+    method @NonNull public android.uwb.RangingReport.Builder addMeasurements(@NonNull java.util.List<android.uwb.RangingMeasurement>);
+    method @NonNull public android.uwb.RangingReport build();
+  }
+
+  public final class RangingSession implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void close();
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void reconfigure(@NonNull android.os.PersistableBundle);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void start(@NonNull android.os.PersistableBundle);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void stop();
+  }
+
+  public static interface RangingSession.Callback {
+    method public void onClosed(int, @NonNull android.os.PersistableBundle);
+    method public void onOpenFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onOpened(@NonNull android.uwb.RangingSession);
+    method public void onReconfigureFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onReconfigured(@NonNull android.os.PersistableBundle);
+    method public void onReportReceived(@NonNull android.uwb.RangingReport);
+    method public void onStartFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onStarted(@NonNull android.os.PersistableBundle);
+    method public void onStopFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onStopped(int, @NonNull android.os.PersistableBundle);
+    field public static final int REASON_BAD_PARAMETERS = 3; // 0x3
+    field public static final int REASON_GENERIC_ERROR = 4; // 0x4
+    field public static final int REASON_LOCAL_REQUEST = 1; // 0x1
+    field public static final int REASON_MAX_SESSIONS_REACHED = 5; // 0x5
+    field public static final int REASON_PROTOCOL_SPECIFIC_ERROR = 7; // 0x7
+    field public static final int REASON_REMOTE_REQUEST = 2; // 0x2
+    field public static final int REASON_SYSTEM_POLICY = 6; // 0x6
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+  }
+
+  public final class UwbAddress implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.uwb.UwbAddress fromBytes(@NonNull byte[]);
+    method public int size();
+    method @NonNull public byte[] toBytes();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.UwbAddress> CREATOR;
+    field public static final int EXTENDED_ADDRESS_BYTE_LENGTH = 8; // 0x8
+    field public static final int SHORT_ADDRESS_BYTE_LENGTH = 2; // 0x2
+  }
+
+  public final class UwbManager {
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public long elapsedRealtimeResolutionNanos();
+    method @NonNull @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public android.os.PersistableBundle getSpecificationInfo();
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.UWB_PRIVILEGED, android.Manifest.permission.UWB_RANGING}) public android.os.CancellationSignal openRangingSession(@NonNull android.os.PersistableBundle, @NonNull java.util.concurrent.Executor, @NonNull android.uwb.RangingSession.Callback);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void registerAdapterStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.uwb.UwbManager.AdapterStateCallback);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void unregisterAdapterStateCallback(@NonNull android.uwb.UwbManager.AdapterStateCallback);
+  }
+
+  public static interface UwbManager.AdapterStateCallback {
+    method public void onStateChanged(int, int);
+    field public static final int STATE_CHANGED_REASON_ALL_SESSIONS_CLOSED = 1; // 0x1
+    field public static final int STATE_CHANGED_REASON_ERROR_UNKNOWN = 4; // 0x4
+    field public static final int STATE_CHANGED_REASON_SESSION_STARTED = 0; // 0x0
+    field public static final int STATE_CHANGED_REASON_SYSTEM_BOOT = 3; // 0x3
+    field public static final int STATE_CHANGED_REASON_SYSTEM_POLICY = 2; // 0x2
+    field public static final int STATE_DISABLED = 0; // 0x0
+    field public static final int STATE_ENABLED_ACTIVE = 2; // 0x2
+    field public static final int STATE_ENABLED_INACTIVE = 1; // 0x1
+  }
+
+}
+
+package android.view {
+
+  public abstract class Window {
+    method public void addSystemFlags(@android.view.WindowManager.LayoutParams.SystemFlags int);
+  }
+
+  public interface WindowManager extends android.view.ViewManager {
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public android.graphics.Region getCurrentImeTouchRegion();
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    method public final long getUserActivityTimeout();
+    method public boolean isSystemApplicationOverlay();
+    method @RequiresPermission(android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY) public void setSystemApplicationOverlay(boolean);
+    method public final void setUserActivityTimeout(long);
+    field @RequiresPermission(android.Manifest.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS) public static final int SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS = 524288; // 0x80000
+    field @RequiresPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW) public static final int SYSTEM_FLAG_SHOW_FOR_ALL_USERS = 16; // 0x10
+  }
+
+  @IntDef(flag=true, prefix={"SYSTEM_FLAG_"}, value={android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS, android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowManager.LayoutParams.SystemFlags {
+  }
+
+}
+
+package android.view.accessibility {
+
+  public final class AccessibilityManager {
+    method public int getAccessibilityWindowId(@Nullable android.os.IBinder);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void performAccessibilityShortcut();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void registerSystemAction(@NonNull android.app.RemoteAction, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void unregisterSystemAction(int);
+  }
+
+}
+
+package android.view.autofill {
+
+  public final class AutofillManager {
+    method public void setAugmentedAutofillWhitelist(@Nullable java.util.Set<java.lang.String>, @Nullable java.util.Set<android.content.ComponentName>);
+  }
+
+}
+
+package android.view.contentcapture {
+
+  public final class ContentCaptureContext implements android.os.Parcelable {
+    method @Nullable public android.content.ComponentName getActivityComponent();
+    method @Nullable public android.app.assist.ActivityId getActivityId();
+    method public int getDisplayId();
+    method public int getFlags();
+    method @Nullable public android.view.contentcapture.ContentCaptureSessionId getParentSessionId();
+    method public int getTaskId();
+    method @Nullable public android.os.IBinder getWindowToken();
+    field public static final int FLAG_DISABLED_BY_APP = 1; // 0x1
+    field public static final int FLAG_DISABLED_BY_FLAG_SECURE = 2; // 0x2
+    field public static final int FLAG_RECONNECTED = 4; // 0x4
+  }
+
+  public final class ContentCaptureEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.graphics.Rect getBounds();
+    method @Nullable public android.view.contentcapture.ContentCaptureContext getContentCaptureContext();
+    method public long getEventTime();
+    method @Nullable public android.view.autofill.AutofillId getId();
+    method @Nullable public java.util.List<android.view.autofill.AutofillId> getIds();
+    method @Nullable public android.graphics.Insets getInsets();
+    method @Nullable public CharSequence getText();
+    method public int getType();
+    method @Nullable public android.view.contentcapture.ViewNode getViewNode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureEvent> CREATOR;
+    field public static final int TYPE_CONTEXT_UPDATED = 6; // 0x6
+    field public static final int TYPE_SESSION_PAUSED = 8; // 0x8
+    field public static final int TYPE_SESSION_RESUMED = 7; // 0x7
+    field public static final int TYPE_VIEW_APPEARED = 1; // 0x1
+    field public static final int TYPE_VIEW_DISAPPEARED = 2; // 0x2
+    field public static final int TYPE_VIEW_INSETS_CHANGED = 9; // 0x9
+    field public static final int TYPE_VIEW_TEXT_CHANGED = 3; // 0x3
+    field public static final int TYPE_VIEW_TREE_APPEARED = 5; // 0x5
+    field public static final int TYPE_VIEW_TREE_APPEARING = 4; // 0x4
+    field public static final int TYPE_WINDOW_BOUNDS_CHANGED = 10; // 0xa
+  }
+
+  public final class ContentCaptureManager {
+    method public boolean isContentCaptureFeatureEnabled();
+    field public static final int NO_SESSION_ID = 0; // 0x0
+  }
+
+  public final class ViewNode extends android.app.assist.AssistStructure.ViewNode {
+    method @Nullable public android.view.autofill.AutofillId getParentAutofillId();
+  }
+
+}
+
+package android.view.displayhash {
+
+  public final class DisplayHash implements android.os.Parcelable {
+    ctor public DisplayHash(long, @NonNull android.graphics.Rect, @NonNull String, @NonNull byte[], @NonNull byte[]);
+    method public int describeContents();
+    method @NonNull public android.graphics.Rect getBoundsInWindow();
+    method @NonNull public String getHashAlgorithm();
+    method @NonNull public byte[] getHmac();
+    method @NonNull public byte[] getImageHash();
+    method public long getTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+}
+
+package android.view.translation {
+
+  public final class TranslationCapability implements android.os.Parcelable {
+    ctor public TranslationCapability(int, @NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec, boolean, int);
+  }
+
+  public final class UiTranslationManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void finishTranslation(@NonNull android.app.assist.ActivityId);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void pauseTranslation(@NonNull android.app.assist.ActivityId);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void resumeTranslation(@NonNull android.app.assist.ActivityId);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void startTranslation(@NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec, @NonNull java.util.List<android.view.autofill.AutofillId>, @NonNull android.app.assist.ActivityId, @NonNull android.view.translation.UiTranslationSpec);
+  }
+
+  public final class UiTranslationSpec implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean shouldPadContentForCompat();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.UiTranslationSpec> CREATOR;
+  }
+
+  public static final class UiTranslationSpec.Builder {
+    ctor public UiTranslationSpec.Builder();
+    method @NonNull public android.view.translation.UiTranslationSpec build();
+    method @NonNull public android.view.translation.UiTranslationSpec.Builder setShouldPadContentForCompat(boolean);
+  }
+
+}
+
+package android.webkit {
+
+  public abstract class CookieManager {
+    method protected abstract boolean allowFileSchemeCookiesImpl();
+    method public abstract String getCookie(String, boolean);
+    method public String getCookie(android.net.WebAddress);
+    method public abstract boolean hasCookies(boolean);
+    method protected abstract void setAcceptFileSchemeCookiesImpl(boolean);
+  }
+
+  public class FindActionModeCallback implements android.view.ActionMode.Callback android.text.TextWatcher android.view.View.OnClickListener android.webkit.WebView.FindListener {
+    ctor public FindActionModeCallback(android.content.Context);
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void findAll();
+    method public void finish();
+    method public int getActionModeGlobalBottom();
+    method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem);
+    method public void onClick(android.view.View);
+    method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onDestroyActionMode(android.view.ActionMode);
+    method public void onFindResultReceived(int, int, boolean);
+    method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onTextChanged(CharSequence, int, int, int);
+    method public void setText(String);
+    method public void setWebView(@NonNull android.webkit.WebView);
+    method public void showSoftInput();
+    method public void updateMatchCount(int, int, boolean);
+  }
+
+  public static class FindActionModeCallback.NoAction implements android.view.ActionMode.Callback {
+    ctor public FindActionModeCallback.NoAction();
+    method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem);
+    method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onDestroyActionMode(android.view.ActionMode);
+    method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
+  }
+
+  public class GeolocationPermissions {
+    ctor public GeolocationPermissions();
+  }
+
+  public class HttpAuthHandler extends android.os.Handler {
+    ctor public HttpAuthHandler();
+  }
+
+  public class JsDialogHelper {
+    ctor public JsDialogHelper(android.webkit.JsPromptResult, int, String, String, String);
+    ctor public JsDialogHelper(android.webkit.JsPromptResult, android.os.Message);
+    method public boolean invokeCallback(android.webkit.WebChromeClient, android.webkit.WebView);
+    method public void showDialog(android.content.Context);
+    field public static final int ALERT = 1; // 0x1
+    field public static final int CONFIRM = 2; // 0x2
+    field public static final int PROMPT = 3; // 0x3
+    field public static final int UNLOAD = 4; // 0x4
+  }
+
+  public class JsPromptResult extends android.webkit.JsResult {
+    ctor public JsPromptResult(android.webkit.JsResult.ResultReceiver);
+    method public String getStringResult();
+  }
+
+  public class JsResult {
+    ctor public JsResult(android.webkit.JsResult.ResultReceiver);
+    method public final boolean getResult();
+  }
+
+  public static interface JsResult.ResultReceiver {
+    method public void onJsResultComplete(android.webkit.JsResult);
+  }
+
+  public interface PacProcessor {
+    method @NonNull public static android.webkit.PacProcessor createInstance();
+    method @Nullable public String findProxyForUrl(@NonNull String);
+    method @NonNull public static android.webkit.PacProcessor getInstance();
+    method @Nullable public default android.net.Network getNetwork();
+    method public default void release();
+    method public default void setNetwork(@Nullable android.net.Network);
+    method public boolean setProxyScript(@NonNull String);
+  }
+
+  public class SslErrorHandler extends android.os.Handler {
+    ctor public SslErrorHandler();
+  }
+
+  @Deprecated public abstract class TokenBindingService {
+    ctor @Deprecated public TokenBindingService();
+  }
+
+  public class WebChromeClient {
+    method @Deprecated public void openFileChooser(android.webkit.ValueCallback<android.net.Uri>, String, String);
+  }
+
+  public abstract class WebHistoryItem implements java.lang.Cloneable {
+    method @Deprecated public abstract int getId();
+  }
+
+  @Deprecated public abstract class WebIconDatabase {
+    method @Deprecated public abstract void bulkRequestIconForPageUrl(android.content.ContentResolver, String, android.webkit.WebIconDatabase.IconListener);
+  }
+
+  public abstract class WebMessagePort {
+    ctor public WebMessagePort();
+  }
+
+  public abstract class WebResourceError {
+    ctor public WebResourceError();
+  }
+
+  public class WebResourceResponse {
+    ctor public WebResourceResponse(boolean, String, String, int, String, java.util.Map<java.lang.String,java.lang.String>, java.io.InputStream);
+  }
+
+  public abstract class WebSettings {
+    method public abstract boolean getAcceptThirdPartyCookies();
+    method @Deprecated public abstract boolean getNavDump();
+    method @Deprecated public abstract boolean getPluginsEnabled();
+    method @Deprecated public abstract boolean getUseWebViewBackgroundForOverscrollBackground();
+    method @Deprecated public abstract int getUserAgent();
+    method public abstract boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled();
+    method public abstract void setAcceptThirdPartyCookies(boolean);
+    method @Deprecated public abstract void setNavDump(boolean);
+    method @Deprecated public abstract void setPluginsEnabled(boolean);
+    method @Deprecated public abstract void setUseWebViewBackgroundForOverscrollBackground(boolean);
+    method @Deprecated public abstract void setUserAgent(int);
+    method public abstract void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean);
+  }
+
+  public class WebStorage {
+    ctor public WebStorage();
+  }
+
+  public static class WebStorage.Origin {
+    ctor protected WebStorage.Origin(String, long, long);
+  }
+
+  public class WebView extends android.widget.AbsoluteLayout implements android.view.ViewGroup.OnHierarchyChangeListener android.view.ViewTreeObserver.OnGlobalFocusChangeListener {
+    method public android.webkit.WebViewProvider getWebViewProvider();
+  }
+
+  public static class WebView.HitTestResult {
+    ctor public WebView.HitTestResult();
+    method public void setExtra(String);
+    method public void setType(int);
+  }
+
+  public class WebView.PrivateAccess {
+    ctor public WebView.PrivateAccess();
+    method public void awakenScrollBars(int);
+    method public void awakenScrollBars(int, boolean);
+    method public float getHorizontalScrollFactor();
+    method public int getHorizontalScrollbarHeight();
+    method public float getVerticalScrollFactor();
+    method public void onScrollChanged(int, int, int, int);
+    method public void overScrollBy(int, int, int, int, int, int, int, int, boolean);
+    method public void setMeasuredDimension(int, int);
+    method public void setScrollXRaw(int);
+    method public void setScrollYRaw(int);
+    method public void super_computeScroll();
+    method public boolean super_dispatchKeyEvent(android.view.KeyEvent);
+    method public int super_getScrollBarStyle();
+    method @Nullable public android.view.WindowInsets super_onApplyWindowInsets(@Nullable android.view.WindowInsets);
+    method public void super_onDrawVerticalScrollBar(android.graphics.Canvas, android.graphics.drawable.Drawable, int, int, int, int);
+    method public boolean super_onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean super_onHoverEvent(android.view.MotionEvent);
+    method public boolean super_performAccessibilityAction(int, android.os.Bundle);
+    method public boolean super_performLongClick();
+    method public boolean super_requestFocus(int, android.graphics.Rect);
+    method public void super_scrollTo(int, int);
+    method public boolean super_setFrame(int, int, int, int);
+    method public void super_setLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void super_startActivityForResult(android.content.Intent, int);
+  }
+
+  public final class WebViewDelegate {
+    method public void addWebViewAssetPath(android.content.Context);
+    method @Deprecated public void callDrawGlFunction(android.graphics.Canvas, long);
+    method @Deprecated public void callDrawGlFunction(@NonNull android.graphics.Canvas, long, @Nullable Runnable);
+    method @Deprecated public boolean canInvokeDrawGlFunctor(android.view.View);
+    method @Deprecated public void detachDrawGlFunctor(android.view.View, long);
+    method public void drawWebViewFunctor(@NonNull android.graphics.Canvas, int);
+    method public android.app.Application getApplication();
+    method public String getDataDirectorySuffix();
+    method public String getErrorString(android.content.Context, int);
+    method public int getPackageId(android.content.res.Resources, String);
+    method @NonNull public android.webkit.WebViewFactory.StartupTimestamps getStartupTimestamps();
+    method @Deprecated public void invokeDrawGlFunctor(android.view.View, long, boolean);
+    method public boolean isMultiProcessEnabled();
+    method public boolean isTraceTagEnabled();
+    method public void setOnTraceEnabledChangeListener(android.webkit.WebViewDelegate.OnTraceEnabledChangeListener);
+  }
+
+  public static interface WebViewDelegate.OnTraceEnabledChangeListener {
+    method public void onTraceEnabledChange(boolean);
+  }
+
+  public final class WebViewFactory {
+    ctor public WebViewFactory();
+    method public static android.content.pm.PackageInfo getLoadedPackageInfo();
+    method public static int loadWebViewNativeLibraryFromPackage(String, ClassLoader);
+    method public static void prepareWebViewInZygote();
+    field public static final int LIBLOAD_ADDRESS_SPACE_NOT_RESERVED = 2; // 0x2
+    field public static final int LIBLOAD_FAILED_JNI_CALL = 7; // 0x7
+    field public static final int LIBLOAD_FAILED_LISTING_WEBVIEW_PACKAGES = 4; // 0x4
+    field public static final int LIBLOAD_FAILED_TO_FIND_NAMESPACE = 10; // 0xa
+    field public static final int LIBLOAD_FAILED_TO_LOAD_LIBRARY = 6; // 0x6
+    field public static final int LIBLOAD_FAILED_TO_OPEN_RELRO_FILE = 5; // 0x5
+    field public static final int LIBLOAD_FAILED_WAITING_FOR_RELRO = 3; // 0x3
+    field public static final int LIBLOAD_FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN = 8; // 0x8
+    field public static final int LIBLOAD_SUCCESS = 0; // 0x0
+    field public static final int LIBLOAD_WRONG_PACKAGE_NAME = 1; // 0x1
+  }
+
+  public static class WebViewFactory.StartupTimestamps {
+    method public long getAddAssetsEnd();
+    method public long getAddAssetsStart();
+    method public long getCreateContextEnd();
+    method public long getCreateContextStart();
+    method public long getGetClassLoaderEnd();
+    method public long getGetClassLoaderStart();
+    method public long getNativeLoadEnd();
+    method public long getNativeLoadStart();
+    method public long getProviderClassForNameEnd();
+    method public long getProviderClassForNameStart();
+    method public long getWebViewLoadStart();
+  }
+
+  public interface WebViewFactoryProvider {
+    method @NonNull public default android.webkit.PacProcessor createPacProcessor();
+    method public android.webkit.WebViewProvider createWebView(android.webkit.WebView, android.webkit.WebView.PrivateAccess);
+    method public android.webkit.CookieManager getCookieManager();
+    method public android.webkit.GeolocationPermissions getGeolocationPermissions();
+    method @NonNull public default android.webkit.PacProcessor getPacProcessor();
+    method public android.webkit.ServiceWorkerController getServiceWorkerController();
+    method public android.webkit.WebViewFactoryProvider.Statics getStatics();
+    method @Deprecated public android.webkit.TokenBindingService getTokenBindingService();
+    method public android.webkit.TracingController getTracingController();
+    method public android.webkit.WebIconDatabase getWebIconDatabase();
+    method public android.webkit.WebStorage getWebStorage();
+    method public ClassLoader getWebViewClassLoader();
+    method public android.webkit.WebViewDatabase getWebViewDatabase(android.content.Context);
+  }
+
+  public static interface WebViewFactoryProvider.Statics {
+    method public void clearClientCertPreferences(Runnable);
+    method public void enableSlowWholeDocumentDraw();
+    method public String findAddress(String);
+    method public void freeMemoryForTests();
+    method public String getDefaultUserAgent(android.content.Context);
+    method @NonNull public android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
+    method public void initSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public android.net.Uri[] parseFileChooserResult(int, android.content.Intent);
+    method public void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void setWebContentsDebuggingEnabled(boolean);
+  }
+
+  public interface WebViewProvider {
+    method public void addJavascriptInterface(Object, String);
+    method public boolean canGoBack();
+    method public boolean canGoBackOrForward(int);
+    method public boolean canGoForward();
+    method public boolean canZoomIn();
+    method public boolean canZoomOut();
+    method public android.graphics.Picture capturePicture();
+    method public void clearCache(boolean);
+    method public void clearFormData();
+    method public void clearHistory();
+    method public void clearMatches();
+    method public void clearSslPreferences();
+    method public void clearView();
+    method public android.webkit.WebBackForwardList copyBackForwardList();
+    method public android.print.PrintDocumentAdapter createPrintDocumentAdapter(String);
+    method public android.webkit.WebMessagePort[] createWebMessageChannel();
+    method public void destroy();
+    method public void documentHasImages(android.os.Message);
+    method public void dumpViewHierarchyWithProperties(java.io.BufferedWriter, int);
+    method public void evaluateJavaScript(String, android.webkit.ValueCallback<java.lang.String>);
+    method public int findAll(String);
+    method public void findAllAsync(String);
+    method public android.view.View findHierarchyView(String, int);
+    method public void findNext(boolean);
+    method public void flingScroll(int, int);
+    method public void freeMemory();
+    method public android.net.http.SslCertificate getCertificate();
+    method public int getContentHeight();
+    method public int getContentWidth();
+    method public android.graphics.Bitmap getFavicon();
+    method public android.webkit.WebView.HitTestResult getHitTestResult();
+    method public String[] getHttpAuthUsernamePassword(String, String);
+    method public String getOriginalUrl();
+    method public int getProgress();
+    method public boolean getRendererPriorityWaivedWhenNotVisible();
+    method public int getRendererRequestedPriority();
+    method public float getScale();
+    method public android.webkit.WebViewProvider.ScrollDelegate getScrollDelegate();
+    method public android.webkit.WebSettings getSettings();
+    method @NonNull public default android.view.textclassifier.TextClassifier getTextClassifier();
+    method public String getTitle();
+    method public String getTouchIconUrl();
+    method public String getUrl();
+    method public android.webkit.WebViewProvider.ViewDelegate getViewDelegate();
+    method public int getVisibleTitleHeight();
+    method public android.webkit.WebChromeClient getWebChromeClient();
+    method public android.webkit.WebViewClient getWebViewClient();
+    method @Nullable public android.webkit.WebViewRenderProcess getWebViewRenderProcess();
+    method @Nullable public android.webkit.WebViewRenderProcessClient getWebViewRenderProcessClient();
+    method public android.view.View getZoomControls();
+    method public void goBack();
+    method public void goBackOrForward(int);
+    method public void goForward();
+    method public void init(java.util.Map<java.lang.String,java.lang.Object>, boolean);
+    method public void insertVisualStateCallback(long, android.webkit.WebView.VisualStateCallback);
+    method public void invokeZoomPicker();
+    method public boolean isPaused();
+    method public boolean isPrivateBrowsingEnabled();
+    method public void loadData(String, String, String);
+    method public void loadDataWithBaseURL(String, String, String, String, String);
+    method public void loadUrl(String, java.util.Map<java.lang.String,java.lang.String>);
+    method public void loadUrl(String);
+    method public void notifyFindDialogDismissed();
+    method public void onPause();
+    method public void onResume();
+    method public boolean overlayHorizontalScrollbar();
+    method public boolean overlayVerticalScrollbar();
+    method public boolean pageDown(boolean);
+    method public boolean pageUp(boolean);
+    method public void pauseTimers();
+    method public void postMessageToMainFrame(android.webkit.WebMessage, android.net.Uri);
+    method public void postUrl(String, byte[]);
+    method public void reload();
+    method public void removeJavascriptInterface(String);
+    method public void requestFocusNodeHref(android.os.Message);
+    method public void requestImageRef(android.os.Message);
+    method public boolean restorePicture(android.os.Bundle, java.io.File);
+    method public android.webkit.WebBackForwardList restoreState(android.os.Bundle);
+    method public void resumeTimers();
+    method public void savePassword(String, String, String);
+    method public boolean savePicture(android.os.Bundle, java.io.File);
+    method public android.webkit.WebBackForwardList saveState(android.os.Bundle);
+    method public void saveWebArchive(String);
+    method public void saveWebArchive(String, boolean, android.webkit.ValueCallback<java.lang.String>);
+    method public void setCertificate(android.net.http.SslCertificate);
+    method public void setDownloadListener(android.webkit.DownloadListener);
+    method public void setFindListener(android.webkit.WebView.FindListener);
+    method public void setHorizontalScrollbarOverlay(boolean);
+    method public void setHttpAuthUsernamePassword(String, String, String, String);
+    method public void setInitialScale(int);
+    method public void setMapTrackballToArrowKeys(boolean);
+    method public void setNetworkAvailable(boolean);
+    method public void setPictureListener(android.webkit.WebView.PictureListener);
+    method public void setRendererPriorityPolicy(int, boolean);
+    method public default void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+    method public void setVerticalScrollbarOverlay(boolean);
+    method public void setWebChromeClient(android.webkit.WebChromeClient);
+    method public void setWebViewClient(android.webkit.WebViewClient);
+    method public void setWebViewRenderProcessClient(@Nullable java.util.concurrent.Executor, @Nullable android.webkit.WebViewRenderProcessClient);
+    method public boolean showFindDialog(String, boolean);
+    method public void stopLoading();
+    method public boolean zoomBy(float);
+    method public boolean zoomIn();
+    method public boolean zoomOut();
+  }
+
+  public static interface WebViewProvider.ScrollDelegate {
+    method public int computeHorizontalScrollOffset();
+    method public int computeHorizontalScrollRange();
+    method public void computeScroll();
+    method public int computeVerticalScrollExtent();
+    method public int computeVerticalScrollOffset();
+    method public int computeVerticalScrollRange();
+  }
+
+  public static interface WebViewProvider.ViewDelegate {
+    method public default void autofill(android.util.SparseArray<android.view.autofill.AutofillValue>);
+    method public default void dispatchCreateViewTranslationRequest(@NonNull java.util.Map<android.view.autofill.AutofillId,long[]>, @NonNull int[], @Nullable android.view.translation.TranslationCapability, @NonNull java.util.List<android.view.translation.ViewTranslationRequest>);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public android.view.View findFocus(android.view.View);
+    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider();
+    method public android.os.Handler getHandler(android.os.Handler);
+    method public default boolean isVisibleToUserForAutofill(int);
+    method public void onActivityResult(int, int, android.content.Intent);
+    method @Nullable public default android.view.WindowInsets onApplyWindowInsets(@Nullable android.view.WindowInsets);
+    method public void onAttachedToWindow();
+    method public default boolean onCheckIsTextEditor();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo);
+    method public default void onCreateVirtualViewTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
+    method public void onDetachedFromWindow();
+    method public boolean onDragEvent(android.view.DragEvent);
+    method public void onDraw(android.graphics.Canvas);
+    method public void onDrawVerticalScrollBar(android.graphics.Canvas, android.graphics.drawable.Drawable, int, int, int, int);
+    method public void onFinishTemporaryDetach();
+    method public void onFocusChanged(boolean, int, android.graphics.Rect);
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onHoverEvent(android.view.MotionEvent);
+    method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onMeasure(int, int);
+    method public default void onMovedToDisplay(int, android.content.res.Configuration);
+    method public void onOverScrolled(int, int, boolean, boolean);
+    method public default void onProvideAutofillVirtualStructure(android.view.ViewStructure, int);
+    method public default void onProvideContentCaptureStructure(@NonNull android.view.ViewStructure, int);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
+    method public void onScrollChanged(int, int, int, int);
+    method public void onSizeChanged(int, int, int, int);
+    method public void onStartTemporaryDetach();
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public default void onVirtualViewTranslationResponses(@NonNull android.util.LongSparseArray<android.view.translation.ViewTranslationResponse>);
+    method public void onVisibilityChanged(android.view.View, int);
+    method public void onWindowFocusChanged(boolean);
+    method public void onWindowVisibilityChanged(int);
+    method public boolean performAccessibilityAction(int, android.os.Bundle);
+    method public boolean performLongClick();
+    method public void preDispatchDraw(android.graphics.Canvas);
+    method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
+    method public boolean requestFocus(int, android.graphics.Rect);
+    method public void setBackgroundColor(int);
+    method public boolean setFrame(int, int, int, int);
+    method public void setLayerType(int, android.graphics.Paint);
+    method public void setLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void setOverScrollMode(int);
+    method public void setScrollBarStyle(int);
+    method public boolean shouldDelayChildPressedState();
+  }
+
+  public final class WebViewProviderInfo implements android.os.Parcelable {
+    ctor public WebViewProviderInfo(String, String, boolean, boolean, String[]);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.webkit.WebViewProviderInfo> CREATOR;
+    field public final boolean availableByDefault;
+    field public final String description;
+    field public final boolean isFallback;
+    field public final String packageName;
+    field public final android.content.pm.Signature[] signatures;
+  }
+
+  public final class WebViewUpdateService {
+    method public static android.webkit.WebViewProviderInfo[] getAllWebViewPackages();
+    method public static String getCurrentWebViewPackageName();
+    method public static android.webkit.WebViewProviderInfo[] getValidWebViewPackages();
+  }
+
+}
+
diff --git a/32/system/api/android.net.ipsec.ike-removed.txt b/32/system/api/android.net.ipsec.ike-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/android.net.ipsec.ike-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/android.net.ipsec.ike.txt b/32/system/api/android.net.ipsec.ike.txt
new file mode 100644
index 0000000..d2ffd43
--- /dev/null
+++ b/32/system/api/android.net.ipsec.ike.txt
@@ -0,0 +1,153 @@
+// Signature format: 2.0
+package android.net.eap {
+
+  public final class EapSessionConfig {
+    method @Deprecated @Nullable public android.net.eap.EapSessionConfig.EapMsChapV2Config getEapMsChapV2onfig();
+  }
+
+  @Deprecated public abstract static class EapSessionConfig.EapUiccConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method @Deprecated public int getAppType();
+    method @Deprecated public int getSubId();
+  }
+
+}
+
+package android.net.ipsec.ike {
+
+  public interface ChildSessionCallback {
+    method @Deprecated public default void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public default void onIpSecTransformsMigrated(@NonNull android.net.IpSecTransform, @NonNull android.net.IpSecTransform);
+  }
+
+  public final class ChildSessionConfiguration {
+    method @NonNull public java.util.List<android.net.LinkAddress> getInternalAddresses();
+    method @NonNull public java.util.List<java.net.InetAddress> getInternalDhcpServers();
+    method @NonNull public java.util.List<java.net.InetAddress> getInternalDnsServers();
+    method @NonNull public java.util.List<android.net.IpPrefix> getInternalSubnets();
+  }
+
+  public static final class ChildSessionConfiguration.Builder {
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalAddress(@NonNull android.net.LinkAddress);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalDhcpServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalDnsServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalSubnet(@NonNull android.net.IpPrefix);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalAddresses();
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalDhcpServers();
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalDnsServers();
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalSubnets();
+  }
+
+  public abstract class ChildSessionParams {
+    method @Deprecated @NonNull public java.util.List<android.net.ipsec.ike.ChildSaProposal> getSaProposals();
+  }
+
+  public final class IkeSession implements java.lang.AutoCloseable {
+    method public void setNetwork(@NonNull android.net.Network);
+  }
+
+  public interface IkeSessionCallback {
+    method @Deprecated public default void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method @Deprecated public default void onError(@NonNull android.net.ipsec.ike.exceptions.IkeProtocolException);
+    method public default void onIkeSessionConnectionInfoChanged(@NonNull android.net.ipsec.ike.IkeSessionConnectionInfo);
+  }
+
+  public final class IkeSessionConfiguration {
+    method @NonNull public java.util.List<java.net.InetAddress> getPcscfServers();
+  }
+
+  public static final class IkeSessionConfiguration.Builder {
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder addPcscfServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearPcscfServers();
+  }
+
+  public final class IkeSessionParams {
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeSessionParams.IkeConfigRequest> getConfigurationRequests();
+    method @IntRange(from=0x0, to=0x3f) public int getDscp();
+    method @Nullable public android.net.ipsec.ike.ike3gpp.Ike3gppExtension getIke3gppExtension();
+    method @Deprecated @NonNull public java.util.List<android.net.ipsec.ike.IkeSaProposal> getSaProposals();
+  }
+
+  public static final class IkeSessionParams.Builder {
+    ctor @Deprecated public IkeSessionParams.Builder(@NonNull android.content.Context);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addPcscfServerRequest(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addPcscfServerRequest(int);
+    method @Deprecated @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addSaProposal(@NonNull android.net.ipsec.ike.IkeSaProposal);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setDscp(@IntRange(from=0x0, to=0x3f) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setIke3gppExtension(@NonNull android.net.ipsec.ike.ike3gpp.Ike3gppExtension);
+  }
+
+  public static interface IkeSessionParams.ConfigRequestIpv4PcscfServer extends android.net.ipsec.ike.IkeSessionParams.IkeConfigRequest {
+    method @Nullable public java.net.Inet4Address getAddress();
+  }
+
+  public static interface IkeSessionParams.ConfigRequestIpv6PcscfServer extends android.net.ipsec.ike.IkeSessionParams.IkeConfigRequest {
+    method @Nullable public java.net.Inet6Address getAddress();
+  }
+
+  public static interface IkeSessionParams.IkeConfigRequest {
+  }
+
+  public static final class TransportModeChildSessionParams.Builder {
+    method @Deprecated @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+  }
+
+  public static final class TunnelModeChildSessionParams.Builder {
+    method @Deprecated @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+  }
+
+}
+
+package android.net.ipsec.ike.exceptions {
+
+  public abstract class IkeProtocolException extends android.net.ipsec.ike.exceptions.IkeException {
+    method @Nullable public byte[] getErrorData();
+  }
+
+}
+
+package android.net.ipsec.ike.ike3gpp {
+
+  public final class Ike3gppBackoffTimer extends android.net.ipsec.ike.ike3gpp.Ike3gppData {
+    ctor public Ike3gppBackoffTimer(byte, int);
+    method public int getBackoffCause();
+    method public byte getBackoffTimer();
+    method public int getDataType();
+    field public static final int ERROR_TYPE_NETWORK_FAILURE = 10500; // 0x2904
+    field public static final int ERROR_TYPE_NO_APN_SUBSCRIPTION = 9002; // 0x232a
+  }
+
+  public abstract class Ike3gppData {
+    method public abstract int getDataType();
+    field public static final int DATA_TYPE_NOTIFY_BACKOFF_TIMER = 2; // 0x2
+    field public static final int DATA_TYPE_NOTIFY_N1_MODE_INFORMATION = 1; // 0x1
+  }
+
+  public final class Ike3gppExtension {
+    ctor public Ike3gppExtension(@NonNull android.net.ipsec.ike.ike3gpp.Ike3gppParams, @NonNull android.net.ipsec.ike.ike3gpp.Ike3gppExtension.Ike3gppDataListener);
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppExtension.Ike3gppDataListener getIke3gppDataListener();
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppParams getIke3gppParams();
+  }
+
+  public static interface Ike3gppExtension.Ike3gppDataListener {
+    method public void onIke3gppDataReceived(@NonNull java.util.List<android.net.ipsec.ike.ike3gpp.Ike3gppData>);
+  }
+
+  public final class Ike3gppN1ModeInformation extends android.net.ipsec.ike.ike3gpp.Ike3gppData {
+    ctor public Ike3gppN1ModeInformation(@NonNull byte[]);
+    method public int getDataType();
+    method @NonNull public byte[] getSnssai();
+  }
+
+  public final class Ike3gppParams {
+    method public byte getPduSessionId();
+    field public static final byte PDU_SESSION_ID_UNSET = 0; // 0x0
+  }
+
+  public static final class Ike3gppParams.Builder {
+    ctor public Ike3gppParams.Builder();
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppParams build();
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppParams.Builder setPduSessionId(byte);
+  }
+
+}
+
diff --git a/32/system/api/android.test.base-removed.txt b/32/system/api/android.test.base-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/android.test.base-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/android.test.base.txt b/32/system/api/android.test.base.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/android.test.base.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/android.test.mock-removed.txt b/32/system/api/android.test.mock-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/android.test.mock-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/android.test.mock.txt b/32/system/api/android.test.mock.txt
new file mode 100644
index 0000000..f87785b
--- /dev/null
+++ b/32/system/api/android.test.mock.txt
@@ -0,0 +1,41 @@
+// Signature format: 2.0
+package android.test.mock {
+
+  public class MockContext extends android.content.Context {
+    method public android.content.Context createCredentialProtectedStorageContext();
+    method public java.io.File getPreloadsFileCache();
+    method public boolean isCredentialProtectedStorage();
+    method public void sendBroadcast(android.content.Intent, String, android.os.Bundle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, String, android.os.Bundle);
+    method public void sendOrderedBroadcast(android.content.Intent, String, android.os.Bundle, android.content.BroadcastReceiver, android.os.Handler, int, String, android.os.Bundle);
+  }
+
+  @Deprecated public class MockPackageManager extends android.content.pm.PackageManager {
+    method public void addOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public boolean arePermissionsIndividuallyControlled();
+    method @Deprecated public java.util.List<android.content.IntentFilter> getAllIntentFilters(String);
+    method public String getDefaultBrowserPackageNameAsUser(int);
+    method public java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int);
+    method public android.graphics.drawable.Drawable getInstantAppIcon(String);
+    method public android.content.ComponentName getInstantAppInstallerComponent();
+    method public android.content.ComponentName getInstantAppResolverSettingsComponent();
+    method public java.util.List<android.content.pm.InstantAppInfo> getInstantApps();
+    method public java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(String);
+    method public int getIntentVerificationStatusAsUser(String, int);
+    method public int getPermissionFlags(String, String, android.os.UserHandle);
+    method public void grantRuntimePermission(String, String, android.os.UserHandle);
+    method public int installExistingPackage(String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public int installExistingPackage(String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method public void registerDexModule(String, @Nullable android.content.pm.PackageManager.DexModuleRegisterCallback);
+    method public void removeOnPermissionsChangeListener(android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public void revokeRuntimePermission(String, String, android.os.UserHandle);
+    method public boolean setDefaultBrowserPackageNameAsUser(String, int);
+    method public String[] setPackagesSuspended(String[], boolean, android.os.PersistableBundle, android.os.PersistableBundle, String);
+    method public void setUpdateAvailable(String, boolean);
+    method public boolean updateIntentVerificationStatusAsUser(String, int, int);
+    method public void updatePermissionFlags(String, String, int, int, android.os.UserHandle);
+    method public void verifyIntentFilter(int, int, java.util.List<java.lang.String>);
+  }
+
+}
+
diff --git a/32/system/api/android.test.runner-removed.txt b/32/system/api/android.test.runner-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/android.test.runner-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/android.test.runner.txt b/32/system/api/android.test.runner.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/android.test.runner.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/android.txt b/32/system/api/android.txt
new file mode 100644
index 0000000..034f25d
--- /dev/null
+++ b/32/system/api/android.txt
@@ -0,0 +1,17203 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String ACCESS_AMBIENT_LIGHT_STATS = "android.permission.ACCESS_AMBIENT_LIGHT_STATS";
+    field public static final String ACCESS_BROADCAST_RADIO = "android.permission.ACCESS_BROADCAST_RADIO";
+    field public static final String ACCESS_CACHE_FILESYSTEM = "android.permission.ACCESS_CACHE_FILESYSTEM";
+    field public static final String ACCESS_CONTEXT_HUB = "android.permission.ACCESS_CONTEXT_HUB";
+    field public static final String ACCESS_DRM_CERTIFICATES = "android.permission.ACCESS_DRM_CERTIFICATES";
+    field @Deprecated public static final String ACCESS_FM_RADIO = "android.permission.ACCESS_FM_RADIO";
+    field public static final String ACCESS_INSTANT_APPS = "android.permission.ACCESS_INSTANT_APPS";
+    field public static final String ACCESS_LOCUS_ID_USAGE_STATS = "android.permission.ACCESS_LOCUS_ID_USAGE_STATS";
+    field public static final String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION";
+    field public static final String ACCESS_MTP = "android.permission.ACCESS_MTP";
+    field public static final String ACCESS_NETWORK_CONDITIONS = "android.permission.ACCESS_NETWORK_CONDITIONS";
+    field public static final String ACCESS_NOTIFICATIONS = "android.permission.ACCESS_NOTIFICATIONS";
+    field public static final String ACCESS_RCS_USER_CAPABILITY_EXCHANGE = "android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE";
+    field public static final String ACCESS_SHARED_LIBRARIES = "android.permission.ACCESS_SHARED_LIBRARIES";
+    field public static final String ACCESS_SHORTCUTS = "android.permission.ACCESS_SHORTCUTS";
+    field public static final String ACCESS_SURFACE_FLINGER = "android.permission.ACCESS_SURFACE_FLINGER";
+    field public static final String ACCESS_TUNED_INFO = "android.permission.ACCESS_TUNED_INFO";
+    field public static final String ACCESS_TV_DESCRAMBLER = "android.permission.ACCESS_TV_DESCRAMBLER";
+    field public static final String ACCESS_TV_TUNER = "android.permission.ACCESS_TV_TUNER";
+    field public static final String ACCESS_VIBRATOR_STATE = "android.permission.ACCESS_VIBRATOR_STATE";
+    field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
+    field public static final String ADJUST_RUNTIME_PERMISSIONS_POLICY = "android.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY";
+    field public static final String ALLOCATE_AGGRESSIVE = "android.permission.ALLOCATE_AGGRESSIVE";
+    field public static final String ALLOW_ANY_CODEC_FOR_PLAYBACK = "android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK";
+    field public static final String ALLOW_PLACE_IN_MULTI_PANE_SETTINGS = "android.permission.ALLOW_PLACE_IN_MULTI_PANE_SETTINGS";
+    field public static final String AMBIENT_WALLPAPER = "android.permission.AMBIENT_WALLPAPER";
+    field public static final String APPROVE_INCIDENT_REPORTS = "android.permission.APPROVE_INCIDENT_REPORTS";
+    field public static final String ASSOCIATE_COMPANION_DEVICES = "android.permission.ASSOCIATE_COMPANION_DEVICES";
+    field public static final String BACKGROUND_CAMERA = "android.permission.BACKGROUND_CAMERA";
+    field public static final String BACKUP = "android.permission.BACKUP";
+    field public static final String BATTERY_PREDICTION = "android.permission.BATTERY_PREDICTION";
+    field public static final String BIND_ATTENTION_SERVICE = "android.permission.BIND_ATTENTION_SERVICE";
+    field public static final String BIND_AUGMENTED_AUTOFILL_SERVICE = "android.permission.BIND_AUGMENTED_AUTOFILL_SERVICE";
+    field public static final String BIND_CALL_DIAGNOSTIC_SERVICE = "android.permission.BIND_CALL_DIAGNOSTIC_SERVICE";
+    field public static final String BIND_CELL_BROADCAST_SERVICE = "android.permission.BIND_CELL_BROADCAST_SERVICE";
+    field @Deprecated public static final String BIND_CONNECTION_SERVICE = "android.permission.BIND_CONNECTION_SERVICE";
+    field public static final String BIND_CONTENT_CAPTURE_SERVICE = "android.permission.BIND_CONTENT_CAPTURE_SERVICE";
+    field public static final String BIND_CONTENT_SUGGESTIONS_SERVICE = "android.permission.BIND_CONTENT_SUGGESTIONS_SERVICE";
+    field public static final String BIND_DIRECTORY_SEARCH = "android.permission.BIND_DIRECTORY_SEARCH";
+    field public static final String BIND_DISPLAY_HASHING_SERVICE = "android.permission.BIND_DISPLAY_HASHING_SERVICE";
+    field public static final String BIND_DOMAIN_VERIFICATION_AGENT = "android.permission.BIND_DOMAIN_VERIFICATION_AGENT";
+    field public static final String BIND_EUICC_SERVICE = "android.permission.BIND_EUICC_SERVICE";
+    field public static final String BIND_EXTERNAL_STORAGE_SERVICE = "android.permission.BIND_EXTERNAL_STORAGE_SERVICE";
+    field public static final String BIND_GBA_SERVICE = "android.permission.BIND_GBA_SERVICE";
+    field public static final String BIND_HOTWORD_DETECTION_SERVICE = "android.permission.BIND_HOTWORD_DETECTION_SERVICE";
+    field public static final String BIND_IMS_SERVICE = "android.permission.BIND_IMS_SERVICE";
+    field public static final String BIND_KEYGUARD_APPWIDGET = "android.permission.BIND_KEYGUARD_APPWIDGET";
+    field public static final String BIND_MUSIC_RECOGNITION_SERVICE = "android.permission.BIND_MUSIC_RECOGNITION_SERVICE";
+    field public static final String BIND_NETWORK_RECOMMENDATION_SERVICE = "android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE";
+    field public static final String BIND_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE";
+    field public static final String BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE = "android.permission.BIND_PHONE_ACCOUNT_SUGGESTION_SERVICE";
+    field public static final String BIND_PRINT_RECOMMENDATION_SERVICE = "android.permission.BIND_PRINT_RECOMMENDATION_SERVICE";
+    field public static final String BIND_RESOLVER_RANKER_SERVICE = "android.permission.BIND_RESOLVER_RANKER_SERVICE";
+    field public static final String BIND_RESUME_ON_REBOOT_SERVICE = "android.permission.BIND_RESUME_ON_REBOOT_SERVICE";
+    field public static final String BIND_ROTATION_RESOLVER_SERVICE = "android.permission.BIND_ROTATION_RESOLVER_SERVICE";
+    field public static final String BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE = "android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE";
+    field public static final String BIND_SETTINGS_SUGGESTIONS_SERVICE = "android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE";
+    field public static final String BIND_SOUND_TRIGGER_DETECTION_SERVICE = "android.permission.BIND_SOUND_TRIGGER_DETECTION_SERVICE";
+    field public static final String BIND_TELEPHONY_DATA_SERVICE = "android.permission.BIND_TELEPHONY_DATA_SERVICE";
+    field public static final String BIND_TELEPHONY_NETWORK_SERVICE = "android.permission.BIND_TELEPHONY_NETWORK_SERVICE";
+    field public static final String BIND_TEXTCLASSIFIER_SERVICE = "android.permission.BIND_TEXTCLASSIFIER_SERVICE";
+    field public static final String BIND_TIME_ZONE_PROVIDER_SERVICE = "android.permission.BIND_TIME_ZONE_PROVIDER_SERVICE";
+    field public static final String BIND_TRANSLATION_SERVICE = "android.permission.BIND_TRANSLATION_SERVICE";
+    field public static final String BIND_TRUST_AGENT = "android.permission.BIND_TRUST_AGENT";
+    field public static final String BIND_TV_REMOTE_SERVICE = "android.permission.BIND_TV_REMOTE_SERVICE";
+    field public static final String BRICK = "android.permission.BRICK";
+    field public static final String BRIGHTNESS_SLIDER_USAGE = "android.permission.BRIGHTNESS_SLIDER_USAGE";
+    field public static final String BROADCAST_CLOSE_SYSTEM_DIALOGS = "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS";
+    field @Deprecated public static final String BROADCAST_NETWORK_PRIVILEGED = "android.permission.BROADCAST_NETWORK_PRIVILEGED";
+    field public static final String BYPASS_ROLE_QUALIFICATION = "android.permission.BYPASS_ROLE_QUALIFICATION";
+    field public static final String CAMERA_DISABLE_TRANSMIT_LED = "android.permission.CAMERA_DISABLE_TRANSMIT_LED";
+    field public static final String CAMERA_OPEN_CLOSE_LISTENER = "android.permission.CAMERA_OPEN_CLOSE_LISTENER";
+    field public static final String CAPTURE_AUDIO_HOTWORD = "android.permission.CAPTURE_AUDIO_HOTWORD";
+    field public static final String CAPTURE_MEDIA_OUTPUT = "android.permission.CAPTURE_MEDIA_OUTPUT";
+    field public static final String CAPTURE_TUNER_AUDIO_INPUT = "android.permission.CAPTURE_TUNER_AUDIO_INPUT";
+    field public static final String CAPTURE_TV_INPUT = "android.permission.CAPTURE_TV_INPUT";
+    field public static final String CAPTURE_VOICE_COMMUNICATION_OUTPUT = "android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT";
+    field public static final String CHANGE_APP_IDLE_STATE = "android.permission.CHANGE_APP_IDLE_STATE";
+    field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST";
+    field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA";
+    field public static final String COMPANION_APPROVE_WIFI_CONNECTIONS = "android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS";
+    field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
+    field public static final String CONFIGURE_WIFI_DISPLAY = "android.permission.CONFIGURE_WIFI_DISPLAY";
+    field @Deprecated public static final String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL";
+    field public static final String CONNECTIVITY_USE_RESTRICTED_NETWORKS = "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS";
+    field public static final String CONTROL_DEVICE_LIGHTS = "android.permission.CONTROL_DEVICE_LIGHTS";
+    field public static final String CONTROL_DISPLAY_COLOR_TRANSFORMS = "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS";
+    field public static final String CONTROL_DISPLAY_SATURATION = "android.permission.CONTROL_DISPLAY_SATURATION";
+    field public static final String CONTROL_INCALL_EXPERIENCE = "android.permission.CONTROL_INCALL_EXPERIENCE";
+    field public static final String CONTROL_KEYGUARD_SECURE_NOTIFICATIONS = "android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS";
+    field public static final String CONTROL_OEM_PAID_NETWORK_PREFERENCE = "android.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE";
+    field public static final String CONTROL_VPN = "android.permission.CONTROL_VPN";
+    field public static final String CREATE_USERS = "android.permission.CREATE_USERS";
+    field public static final String CRYPT_KEEPER = "android.permission.CRYPT_KEEPER";
+    field public static final String DEVICE_POWER = "android.permission.DEVICE_POWER";
+    field public static final String DISABLE_SYSTEM_SOUND_EFFECTS = "android.permission.DISABLE_SYSTEM_SOUND_EFFECTS";
+    field public static final String DISPATCH_PROVISIONING_MESSAGE = "android.permission.DISPATCH_PROVISIONING_MESSAGE";
+    field public static final String DOMAIN_VERIFICATION_AGENT = "android.permission.DOMAIN_VERIFICATION_AGENT";
+    field public static final String ENTER_CAR_MODE_PRIORITIZED = "android.permission.ENTER_CAR_MODE_PRIORITIZED";
+    field public static final String EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS = "android.permission.EXEMPT_FROM_AUDIO_RECORD_RESTRICTIONS";
+    field public static final String FORCE_BACK = "android.permission.FORCE_BACK";
+    field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES";
+    field public static final String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS";
+    field public static final String GET_PROCESS_STATE_AND_OOM_SCORE = "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE";
+    field public static final String GET_RUNTIME_PERMISSIONS = "android.permission.GET_RUNTIME_PERMISSIONS";
+    field public static final String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO";
+    field @Deprecated public static final String GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS = "android.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS";
+    field public static final String GRANT_RUNTIME_PERMISSIONS = "android.permission.GRANT_RUNTIME_PERMISSIONS";
+    field public static final String GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS = "android.permission.GRANT_RUNTIME_PERMISSIONS_TO_TELEPHONY_DEFAULTS";
+    field public static final String HANDLE_CAR_MODE_CHANGES = "android.permission.HANDLE_CAR_MODE_CHANGES";
+    field public static final String HARDWARE_TEST = "android.permission.HARDWARE_TEST";
+    field public static final String HDMI_CEC = "android.permission.HDMI_CEC";
+    field @Deprecated public static final String HIDE_NON_SYSTEM_OVERLAY_WINDOWS = "android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS";
+    field public static final String INJECT_EVENTS = "android.permission.INJECT_EVENTS";
+    field public static final String INSTALL_DYNAMIC_SYSTEM = "android.permission.INSTALL_DYNAMIC_SYSTEM";
+    field public static final String INSTALL_GRANT_RUNTIME_PERMISSIONS = "android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS";
+    field public static final String INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE = "android.permission.INSTALL_LOCATION_TIME_ZONE_PROVIDER_SERVICE";
+    field public static final String INSTALL_PACKAGE_UPDATES = "android.permission.INSTALL_PACKAGE_UPDATES";
+    field public static final String INSTALL_SELF_UPDATES = "android.permission.INSTALL_SELF_UPDATES";
+    field public static final String INTENT_FILTER_VERIFICATION_AGENT = "android.permission.INTENT_FILTER_VERIFICATION_AGENT";
+    field public static final String INTERACT_ACROSS_USERS = "android.permission.INTERACT_ACROSS_USERS";
+    field public static final String INTERACT_ACROSS_USERS_FULL = "android.permission.INTERACT_ACROSS_USERS_FULL";
+    field public static final String INTERNAL_SYSTEM_WINDOW = "android.permission.INTERNAL_SYSTEM_WINDOW";
+    field public static final String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP";
+    field public static final String KILL_UID = "android.permission.KILL_UID";
+    field public static final String LOCAL_MAC_ADDRESS = "android.permission.LOCAL_MAC_ADDRESS";
+    field public static final String LOCK_DEVICE = "android.permission.LOCK_DEVICE";
+    field public static final String LOOP_RADIO = "android.permission.LOOP_RADIO";
+    field public static final String MANAGE_ACCESSIBILITY = "android.permission.MANAGE_ACCESSIBILITY";
+    field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+    field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
+    field public static final String MANAGE_APP_HIBERNATION = "android.permission.MANAGE_APP_HIBERNATION";
+    field public static final String MANAGE_APP_OPS_RESTRICTIONS = "android.permission.MANAGE_APP_OPS_RESTRICTIONS";
+    field public static final String MANAGE_APP_PREDICTIONS = "android.permission.MANAGE_APP_PREDICTIONS";
+    field public static final String MANAGE_APP_TOKENS = "android.permission.MANAGE_APP_TOKENS";
+    field public static final String MANAGE_AUTO_FILL = "android.permission.MANAGE_AUTO_FILL";
+    field public static final String MANAGE_CARRIER_OEM_UNLOCK_STATE = "android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE";
+    field public static final String MANAGE_CA_CERTIFICATES = "android.permission.MANAGE_CA_CERTIFICATES";
+    field public static final String MANAGE_CONTENT_CAPTURE = "android.permission.MANAGE_CONTENT_CAPTURE";
+    field public static final String MANAGE_CONTENT_SUGGESTIONS = "android.permission.MANAGE_CONTENT_SUGGESTIONS";
+    field public static final String MANAGE_DEBUGGING = "android.permission.MANAGE_DEBUGGING";
+    field public static final String MANAGE_FACTORY_RESET_PROTECTION = "android.permission.MANAGE_FACTORY_RESET_PROTECTION";
+    field public static final String MANAGE_HOTWORD_DETECTION = "android.permission.MANAGE_HOTWORD_DETECTION";
+    field public static final String MANAGE_IPSEC_TUNNELS = "android.permission.MANAGE_IPSEC_TUNNELS";
+    field public static final String MANAGE_MUSIC_RECOGNITION = "android.permission.MANAGE_MUSIC_RECOGNITION";
+    field public static final String MANAGE_NOTIFICATION_LISTENERS = "android.permission.MANAGE_NOTIFICATION_LISTENERS";
+    field public static final String MANAGE_ONE_TIME_PERMISSION_SESSIONS = "android.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS";
+    field public static final String MANAGE_ROLE_HOLDERS = "android.permission.MANAGE_ROLE_HOLDERS";
+    field public static final String MANAGE_ROLLBACKS = "android.permission.MANAGE_ROLLBACKS";
+    field public static final String MANAGE_ROTATION_RESOLVER = "android.permission.MANAGE_ROTATION_RESOLVER";
+    field public static final String MANAGE_SEARCH_UI = "android.permission.MANAGE_SEARCH_UI";
+    field public static final String MANAGE_SENSOR_PRIVACY = "android.permission.MANAGE_SENSOR_PRIVACY";
+    field public static final String MANAGE_SMARTSPACE = "android.permission.MANAGE_SMARTSPACE";
+    field public static final String MANAGE_SOUND_TRIGGER = "android.permission.MANAGE_SOUND_TRIGGER";
+    field public static final String MANAGE_SPEECH_RECOGNITION = "android.permission.MANAGE_SPEECH_RECOGNITION";
+    field public static final String MANAGE_SUBSCRIPTION_PLANS = "android.permission.MANAGE_SUBSCRIPTION_PLANS";
+    field public static final String MANAGE_TEST_NETWORKS = "android.permission.MANAGE_TEST_NETWORKS";
+    field public static final String MANAGE_TIME_AND_ZONE_DETECTION = "android.permission.MANAGE_TIME_AND_ZONE_DETECTION";
+    field public static final String MANAGE_UI_TRANSLATION = "android.permission.MANAGE_UI_TRANSLATION";
+    field public static final String MANAGE_USB = "android.permission.MANAGE_USB";
+    field public static final String MANAGE_USERS = "android.permission.MANAGE_USERS";
+    field public static final String MANAGE_USER_OEM_UNLOCK_STATE = "android.permission.MANAGE_USER_OEM_UNLOCK_STATE";
+    field public static final String MANAGE_WIFI_COUNTRY_CODE = "android.permission.MANAGE_WIFI_COUNTRY_CODE";
+    field public static final String MODIFY_APPWIDGET_BIND_PERMISSIONS = "android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS";
+    field public static final String MODIFY_AUDIO_ROUTING = "android.permission.MODIFY_AUDIO_ROUTING";
+    field public static final String MODIFY_CELL_BROADCASTS = "android.permission.MODIFY_CELL_BROADCASTS";
+    field public static final String MODIFY_DAY_NIGHT_MODE = "android.permission.MODIFY_DAY_NIGHT_MODE";
+    field @Deprecated public static final String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING";
+    field public static final String MODIFY_PARENTAL_CONTROLS = "android.permission.MODIFY_PARENTAL_CONTROLS";
+    field public static final String MODIFY_QUIET_MODE = "android.permission.MODIFY_QUIET_MODE";
+    field public static final String MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE = "android.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE";
+    field public static final String MOVE_PACKAGE = "android.permission.MOVE_PACKAGE";
+    field public static final String NETWORK_AIRPLANE_MODE = "android.permission.NETWORK_AIRPLANE_MODE";
+    field public static final String NETWORK_CARRIER_PROVISIONING = "android.permission.NETWORK_CARRIER_PROVISIONING";
+    field public static final String NETWORK_FACTORY = "android.permission.NETWORK_FACTORY";
+    field public static final String NETWORK_MANAGED_PROVISIONING = "android.permission.NETWORK_MANAGED_PROVISIONING";
+    field public static final String NETWORK_SCAN = "android.permission.NETWORK_SCAN";
+    field public static final String NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
+    field public static final String NETWORK_SETUP_WIZARD = "android.permission.NETWORK_SETUP_WIZARD";
+    field public static final String NETWORK_SIGNAL_STRENGTH_WAKEUP = "android.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP";
+    field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
+    field public static final String NETWORK_STATS_PROVIDER = "android.permission.NETWORK_STATS_PROVIDER";
+    field public static final String NFC_SET_CONTROLLER_ALWAYS_ON = "android.permission.NFC_SET_CONTROLLER_ALWAYS_ON";
+    field public static final String NOTIFICATION_DURING_SETUP = "android.permission.NOTIFICATION_DURING_SETUP";
+    field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS";
+    field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE";
+    field public static final String OBSERVE_NETWORK_POLICY = "android.permission.OBSERVE_NETWORK_POLICY";
+    field public static final String OBSERVE_ROLE_HOLDERS = "android.permission.OBSERVE_ROLE_HOLDERS";
+    field public static final String OBSERVE_SENSOR_PRIVACY = "android.permission.OBSERVE_SENSOR_PRIVACY";
+    field public static final String OPEN_ACCESSIBILITY_DETAILS_SETTINGS = "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS";
+    field public static final String OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD = "android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD";
+    field public static final String OVERRIDE_WIFI_CONFIG = "android.permission.OVERRIDE_WIFI_CONFIG";
+    field public static final String PACKAGE_VERIFICATION_AGENT = "android.permission.PACKAGE_VERIFICATION_AGENT";
+    field public static final String PACKET_KEEPALIVE_OFFLOAD = "android.permission.PACKET_KEEPALIVE_OFFLOAD";
+    field public static final String PEERS_MAC_ADDRESS = "android.permission.PEERS_MAC_ADDRESS";
+    field public static final String PERFORM_CDMA_PROVISIONING = "android.permission.PERFORM_CDMA_PROVISIONING";
+    field public static final String PERFORM_IMS_SINGLE_REGISTRATION = "android.permission.PERFORM_IMS_SINGLE_REGISTRATION";
+    field public static final String PERFORM_SIM_ACTIVATION = "android.permission.PERFORM_SIM_ACTIVATION";
+    field public static final String POWER_SAVER = "android.permission.POWER_SAVER";
+    field public static final String PROVIDE_RESOLVER_RANKER_SERVICE = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE";
+    field public static final String PROVIDE_TRUST_AGENT = "android.permission.PROVIDE_TRUST_AGENT";
+    field public static final String QUERY_TIME_ZONE_RULES = "android.permission.QUERY_TIME_ZONE_RULES";
+    field public static final String RADIO_SCAN_WITHOUT_LOCATION = "android.permission.RADIO_SCAN_WITHOUT_LOCATION";
+    field public static final String READ_ACTIVE_EMERGENCY_SESSION = "android.permission.READ_ACTIVE_EMERGENCY_SESSION";
+    field public static final String READ_CARRIER_APP_INFO = "android.permission.READ_CARRIER_APP_INFO";
+    field public static final String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS";
+    field public static final String READ_CONTENT_RATING_SYSTEMS = "android.permission.READ_CONTENT_RATING_SYSTEMS";
+    field public static final String READ_DEVICE_CONFIG = "android.permission.READ_DEVICE_CONFIG";
+    field public static final String READ_DREAM_STATE = "android.permission.READ_DREAM_STATE";
+    field public static final String READ_GLOBAL_APP_SEARCH_DATA = "android.permission.READ_GLOBAL_APP_SEARCH_DATA";
+    field public static final String READ_INSTALL_SESSIONS = "android.permission.READ_INSTALL_SESSIONS";
+    field public static final String READ_NETWORK_USAGE_HISTORY = "android.permission.READ_NETWORK_USAGE_HISTORY";
+    field public static final String READ_OEM_UNLOCK_STATE = "android.permission.READ_OEM_UNLOCK_STATE";
+    field public static final String READ_PEOPLE_DATA = "android.permission.READ_PEOPLE_DATA";
+    field public static final String READ_PRINT_SERVICES = "android.permission.READ_PRINT_SERVICES";
+    field public static final String READ_PRINT_SERVICE_RECOMMENDATIONS = "android.permission.READ_PRINT_SERVICE_RECOMMENDATIONS";
+    field public static final String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
+    field public static final String READ_PROJECTION_STATE = "android.permission.READ_PROJECTION_STATE";
+    field public static final String READ_RUNTIME_PROFILES = "android.permission.READ_RUNTIME_PROFILES";
+    field public static final String READ_SEARCH_INDEXABLES = "android.permission.READ_SEARCH_INDEXABLES";
+    field public static final String READ_SYSTEM_UPDATE_INFO = "android.permission.READ_SYSTEM_UPDATE_INFO";
+    field public static final String READ_WALLPAPER_INTERNAL = "android.permission.READ_WALLPAPER_INTERNAL";
+    field public static final String READ_WIFI_CREDENTIAL = "android.permission.READ_WIFI_CREDENTIAL";
+    field public static final String REAL_GET_TASKS = "android.permission.REAL_GET_TASKS";
+    field public static final String RECEIVE_DATA_ACTIVITY_CHANGE = "android.permission.RECEIVE_DATA_ACTIVITY_CHANGE";
+    field public static final String RECEIVE_DEVICE_CUSTOMIZATION_READY = "android.permission.RECEIVE_DEVICE_CUSTOMIZATION_READY";
+    field public static final String RECEIVE_EMERGENCY_BROADCAST = "android.permission.RECEIVE_EMERGENCY_BROADCAST";
+    field public static final String RECEIVE_WIFI_CREDENTIAL_CHANGE = "android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE";
+    field public static final String RECORD_BACKGROUND_AUDIO = "android.permission.RECORD_BACKGROUND_AUDIO";
+    field public static final String RECOVERY = "android.permission.RECOVERY";
+    field public static final String RECOVER_KEYSTORE = "android.permission.RECOVER_KEYSTORE";
+    field public static final String REGISTER_CALL_PROVIDER = "android.permission.REGISTER_CALL_PROVIDER";
+    field public static final String REGISTER_CONNECTION_MANAGER = "android.permission.REGISTER_CONNECTION_MANAGER";
+    field public static final String REGISTER_SIM_SUBSCRIPTION = "android.permission.REGISTER_SIM_SUBSCRIPTION";
+    field public static final String REGISTER_STATS_PULL_ATOM = "android.permission.REGISTER_STATS_PULL_ATOM";
+    field public static final String REMOTE_DISPLAY_PROVIDER = "android.permission.REMOTE_DISPLAY_PROVIDER";
+    field public static final String REMOVE_DRM_CERTIFICATES = "android.permission.REMOVE_DRM_CERTIFICATES";
+    field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
+    field public static final String RENOUNCE_PERMISSIONS = "android.permission.RENOUNCE_PERMISSIONS";
+    field public static final String REQUEST_NETWORK_SCORES = "android.permission.REQUEST_NETWORK_SCORES";
+    field public static final String REQUEST_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE";
+    field public static final String RESET_PASSWORD = "android.permission.RESET_PASSWORD";
+    field public static final String RESTART_WIFI_SUBSYSTEM = "android.permission.RESTART_WIFI_SUBSYSTEM";
+    field public static final String RESTORE_RUNTIME_PERMISSIONS = "android.permission.RESTORE_RUNTIME_PERMISSIONS";
+    field public static final String RESTRICTED_VR_ACCESS = "android.permission.RESTRICTED_VR_ACCESS";
+    field public static final String RETRIEVE_WINDOW_CONTENT = "android.permission.RETRIEVE_WINDOW_CONTENT";
+    field public static final String REVIEW_ACCESSIBILITY_SERVICES = "android.permission.REVIEW_ACCESSIBILITY_SERVICES";
+    field public static final String REVOKE_RUNTIME_PERMISSIONS = "android.permission.REVOKE_RUNTIME_PERMISSIONS";
+    field public static final String ROTATE_SURFACE_FLINGER = "android.permission.ROTATE_SURFACE_FLINGER";
+    field public static final String SCHEDULE_PRIORITIZED_ALARM = "android.permission.SCHEDULE_PRIORITIZED_ALARM";
+    field public static final String SCORE_NETWORKS = "android.permission.SCORE_NETWORKS";
+    field public static final String SECURE_ELEMENT_PRIVILEGED_OPERATION = "android.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION";
+    field public static final String SEND_CATEGORY_CAR_NOTIFICATIONS = "android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS";
+    field public static final String SEND_DEVICE_CUSTOMIZATION_READY = "android.permission.SEND_DEVICE_CUSTOMIZATION_READY";
+    field public static final String SEND_SHOW_SUSPENDED_APP_DETAILS = "android.permission.SEND_SHOW_SUSPENDED_APP_DETAILS";
+    field public static final String SEND_SMS_NO_CONFIRMATION = "android.permission.SEND_SMS_NO_CONFIRMATION";
+    field public static final String SERIAL_PORT = "android.permission.SERIAL_PORT";
+    field public static final String SET_ACTIVITY_WATCHER = "android.permission.SET_ACTIVITY_WATCHER";
+    field public static final String SET_CLIP_SOURCE = "android.permission.SET_CLIP_SOURCE";
+    field public static final String SET_HARMFUL_APP_WARNINGS = "android.permission.SET_HARMFUL_APP_WARNINGS";
+    field public static final String SET_MEDIA_KEY_LISTENER = "android.permission.SET_MEDIA_KEY_LISTENER";
+    field public static final String SET_ORIENTATION = "android.permission.SET_ORIENTATION";
+    field public static final String SET_POINTER_SPEED = "android.permission.SET_POINTER_SPEED";
+    field public static final String SET_SCREEN_COMPATIBILITY = "android.permission.SET_SCREEN_COMPATIBILITY";
+    field public static final String SET_VOLUME_KEY_LONG_PRESS_LISTENER = "android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER";
+    field public static final String SET_WALLPAPER_COMPONENT = "android.permission.SET_WALLPAPER_COMPONENT";
+    field public static final String SHOW_KEYGUARD_MESSAGE = "android.permission.SHOW_KEYGUARD_MESSAGE";
+    field public static final String SHUTDOWN = "android.permission.SHUTDOWN";
+    field public static final String SIGNAL_REBOOT_READINESS = "android.permission.SIGNAL_REBOOT_READINESS";
+    field public static final String SOUND_TRIGGER_RUN_IN_BATTERY_SAVER = "android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER";
+    field public static final String START_ACTIVITIES_FROM_BACKGROUND = "android.permission.START_ACTIVITIES_FROM_BACKGROUND";
+    field public static final String STATUS_BAR_SERVICE = "android.permission.STATUS_BAR_SERVICE";
+    field public static final String STOP_APP_SWITCHES = "android.permission.STOP_APP_SWITCHES";
+    field public static final String SUBSTITUTE_NOTIFICATION_APP_NAME = "android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME";
+    field public static final String SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON = "android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON";
+    field public static final String SUGGEST_EXTERNAL_TIME = "android.permission.SUGGEST_EXTERNAL_TIME";
+    field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
+    field public static final String SYSTEM_APPLICATION_OVERLAY = "android.permission.SYSTEM_APPLICATION_OVERLAY";
+    field public static final String SYSTEM_CAMERA = "android.permission.SYSTEM_CAMERA";
+    field public static final String TETHER_PRIVILEGED = "android.permission.TETHER_PRIVILEGED";
+    field public static final String TOGGLE_AUTOMOTIVE_PROJECTION = "android.permission.TOGGLE_AUTOMOTIVE_PROJECTION";
+    field public static final String TV_INPUT_HARDWARE = "android.permission.TV_INPUT_HARDWARE";
+    field public static final String TV_VIRTUAL_REMOTE_CONTROLLER = "android.permission.TV_VIRTUAL_REMOTE_CONTROLLER";
+    field public static final String UNLIMITED_SHORTCUTS_API_CALLS = "android.permission.UNLIMITED_SHORTCUTS_API_CALLS";
+    field public static final String UPDATE_APP_OPS_STATS = "android.permission.UPDATE_APP_OPS_STATS";
+    field public static final String UPDATE_DOMAIN_VERIFICATION_USER_SELECTION = "android.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION";
+    field public static final String UPDATE_FONTS = "android.permission.UPDATE_FONTS";
+    field public static final String UPDATE_LOCK = "android.permission.UPDATE_LOCK";
+    field public static final String UPDATE_TIME_ZONE_RULES = "android.permission.UPDATE_TIME_ZONE_RULES";
+    field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS";
+    field public static final String USER_ACTIVITY = "android.permission.USER_ACTIVITY";
+    field public static final String USE_RESERVED_DISK = "android.permission.USE_RESERVED_DISK";
+    field public static final String UWB_PRIVILEGED = "android.permission.UWB_PRIVILEGED";
+    field public static final String WHITELIST_AUTO_REVOKE_PERMISSIONS = "android.permission.WHITELIST_AUTO_REVOKE_PERMISSIONS";
+    field public static final String WHITELIST_RESTRICTED_PERMISSIONS = "android.permission.WHITELIST_RESTRICTED_PERMISSIONS";
+    field public static final String WIFI_ACCESS_COEX_UNSAFE_CHANNELS = "android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS";
+    field public static final String WIFI_SET_DEVICE_MOBILITY_STATE = "android.permission.WIFI_SET_DEVICE_MOBILITY_STATE";
+    field public static final String WIFI_UPDATE_COEX_UNSAFE_CHANNELS = "android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS";
+    field public static final String WIFI_UPDATE_USABILITY_STATS_SCORE = "android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE";
+    field public static final String WRITE_DEVICE_CONFIG = "android.permission.WRITE_DEVICE_CONFIG";
+    field public static final String WRITE_DREAM_STATE = "android.permission.WRITE_DREAM_STATE";
+    field public static final String WRITE_EMBEDDED_SUBSCRIPTIONS = "android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS";
+    field @Deprecated public static final String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE";
+    field public static final String WRITE_OBB = "android.permission.WRITE_OBB";
+  }
+
+  public static final class Manifest.permission_group {
+    field public static final String UNDEFINED = "android.permission-group.UNDEFINED";
+  }
+
+  public static final class R.array {
+    field public static final int config_keySystemUuidMapping = 17235973; // 0x1070005
+  }
+
+  public static final class R.attr {
+    field public static final int allowClearUserDataOnFailedRestore = 16844288; // 0x1010600
+    field public static final int hotwordDetectionService = 16844326; // 0x1010626
+    field public static final int isVrOnly = 16844152; // 0x1010578
+    field public static final int minExtensionVersion = 16844305; // 0x1010611
+    field public static final int playHomeTransitionSound = 16844358; // 0x1010646
+    field public static final int requiredSystemPropertyName = 16844133; // 0x1010565
+    field public static final int requiredSystemPropertyValue = 16844134; // 0x1010566
+    field public static final int sdkVersion = 16844304; // 0x1010610
+    field public static final int supportsAmbientMode = 16844173; // 0x101058d
+    field public static final int userRestriction = 16844164; // 0x1010584
+  }
+
+  public static final class R.bool {
+    field public static final int config_sendPackageName = 17891328; // 0x1110000
+    field public static final int config_showDefaultAssistant = 17891329; // 0x1110001
+    field public static final int config_showDefaultEmergency = 17891330; // 0x1110002
+    field public static final int config_showDefaultHome = 17891331; // 0x1110003
+  }
+
+  public static final class R.color {
+    field public static final int system_notification_accent_color = 17170460; // 0x106001c
+  }
+
+  public static final class R.dimen {
+    field public static final int config_restrictedIconSize = 17104903; // 0x1050007
+  }
+
+  public static final class R.drawable {
+    field public static final int ic_info = 17301684; // 0x10800b4
+  }
+
+  public static final class R.raw {
+    field public static final int loaderror = 17825792; // 0x1100000
+    field public static final int nodomain = 17825793; // 0x1100001
+  }
+
+  public static final class R.string {
+    field public static final int config_customMediaKeyDispatcher = 17039404; // 0x104002c
+    field public static final int config_customMediaSessionPolicyProvider = 17039405; // 0x104002d
+    field public static final int config_defaultAssistant = 17039393; // 0x1040021
+    field public static final int config_defaultBrowser = 17039394; // 0x1040022
+    field public static final int config_defaultCallRedirection = 17039397; // 0x1040025
+    field public static final int config_defaultCallScreening = 17039398; // 0x1040026
+    field public static final int config_defaultDialer = 17039395; // 0x1040023
+    field public static final int config_defaultSms = 17039396; // 0x1040024
+    field public static final int config_feedbackIntentExtraKey = 17039391; // 0x104001f
+    field public static final int config_feedbackIntentNameKey = 17039392; // 0x1040020
+    field public static final int config_helpIntentExtraKey = 17039389; // 0x104001d
+    field public static final int config_helpIntentNameKey = 17039390; // 0x104001e
+    field public static final int config_helpPackageNameKey = 17039387; // 0x104001b
+    field public static final int config_helpPackageNameValue = 17039388; // 0x104001c
+    field public static final int config_systemActivityRecognizer = 17039416; // 0x1040038
+    field public static final int config_systemAmbientAudioIntelligence = 17039411; // 0x1040033
+    field public static final int config_systemAudioIntelligence = 17039412; // 0x1040034
+    field public static final int config_systemAutomotiveCluster = 17039400; // 0x1040028
+    field public static final int config_systemAutomotiveProjection = 17039401; // 0x1040029
+    field public static final int config_systemCompanionDeviceProvider = 17039417; // 0x1040039
+    field public static final int config_systemContacts = 17039403; // 0x104002b
+    field public static final int config_systemGallery = 17039399; // 0x1040027
+    field public static final int config_systemNotificationIntelligence = 17039413; // 0x1040035
+    field public static final int config_systemShell = 17039402; // 0x104002a
+    field public static final int config_systemSpeechRecognizer = 17039406; // 0x104002e
+    field public static final int config_systemTelevisionNotificationHandler = 17039409; // 0x1040031
+    field public static final int config_systemTextIntelligence = 17039414; // 0x1040036
+    field public static final int config_systemUi = 17039418; // 0x104003a
+    field public static final int config_systemUiIntelligence = 17039410; // 0x1040032
+    field public static final int config_systemVisualIntelligence = 17039415; // 0x1040037
+    field public static final int config_systemWellbeing = 17039408; // 0x1040030
+    field public static final int config_systemWifiCoexManager = 17039407; // 0x104002f
+  }
+
+  public static final class R.style {
+    field public static final int Theme_DeviceDefault_DocumentsUI = 16974562; // 0x10302e2
+    field public static final int Theme_Leanback_FormWizard = 16974544; // 0x10302d0
+  }
+
+}
+
+package android.accounts {
+
+  public class AccountManager {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.accounts.AccountManagerFuture<android.os.Bundle> finishSessionAsUser(android.os.Bundle, android.app.Activity, android.os.UserHandle, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+  }
+
+}
+
+package android.app {
+
+  @UiContext public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    method public void convertFromTranslucent();
+    method public boolean convertToTranslucent(android.app.Activity.TranslucentConversionListener, android.app.ActivityOptions);
+    method @Deprecated public boolean isBackgroundVisibleBehind();
+    method @Deprecated public void onBackgroundVisibleBehindChanged(boolean);
+  }
+
+  public static interface Activity.TranslucentConversionListener {
+    method public void onTranslucentConversionComplete(boolean);
+  }
+
+  public class ActivityManager {
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int);
+    method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void forceStopPackage(String);
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public static int getCurrentUser();
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getPackageImportance(String);
+    method @NonNull public java.util.Collection<java.util.Locale> getSupportedLocales();
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidImportance(int);
+    method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void killProcessesWhenImperceptible(@NonNull int[], @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.KILL_UID) public void killUid(int, String);
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener);
+    method public void setDeviceLocales(@NonNull android.os.LocaleList);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public static void setPersistentVrThread(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public boolean startProfile(@NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public boolean stopProfile(@NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean switchUser(@NonNull android.os.UserHandle);
+  }
+
+  public static interface ActivityManager.OnUidImportanceListener {
+    method public void onUidImportance(int, int);
+  }
+
+  public class ActivityOptions {
+    method public int getLaunchTaskId();
+    method @RequiresPermission("android.permission.START_TASKS_FROM_RECENTS") public void setLaunchTaskId(int);
+  }
+
+  public class AlarmManager {
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void set(int, long, long, long, android.app.PendingIntent, android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void set(int, long, long, long, android.app.AlarmManager.OnAlarmListener, android.os.Handler, android.os.WorkSource);
+    method @RequiresPermission(allOf={android.Manifest.permission.UPDATE_DEVICE_STATS, android.Manifest.permission.SCHEDULE_EXACT_ALARM}, conditional=true) public void setExact(int, long, @Nullable String, @NonNull java.util.concurrent.Executor, @NonNull android.os.WorkSource, @NonNull android.app.AlarmManager.OnAlarmListener);
+    method @RequiresPermission(android.Manifest.permission.SCHEDULE_PRIORITIZED_ALARM) public void setPrioritized(int, long, long, @Nullable String, @NonNull java.util.concurrent.Executor, @NonNull android.app.AlarmManager.OnAlarmListener);
+  }
+
+  public class AppOpsManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public android.app.RuntimeAppOpAccessMessage collectRuntimeAppOpAccessMessage();
+    method @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public void getHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
+    method public static String[] getOpStrs();
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getOpsForPackage(int, @NonNull String, @Nullable java.lang.String...);
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getPackagesForOps(@Nullable String[]);
+    method public static int opToDefaultMode(@NonNull String);
+    method @Nullable public static String opToPermission(@NonNull String);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(@NonNull String, int, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setUidMode(@NonNull String, int, int);
+    field public static final int HISTORY_FLAGS_ALL = 3; // 0x3
+    field public static final int HISTORY_FLAG_AGGREGATE = 1; // 0x1
+    field public static final int HISTORY_FLAG_DISCRETE = 2; // 0x2
+    field public static final String OPSTR_ACCEPT_HANDOVER = "android:accept_handover";
+    field public static final String OPSTR_ACCESS_ACCESSIBILITY = "android:access_accessibility";
+    field public static final String OPSTR_ACCESS_NOTIFICATIONS = "android:access_notifications";
+    field public static final String OPSTR_ACTIVATE_PLATFORM_VPN = "android:activate_platform_vpn";
+    field public static final String OPSTR_ACTIVATE_VPN = "android:activate_vpn";
+    field public static final String OPSTR_ASSIST_SCREENSHOT = "android:assist_screenshot";
+    field public static final String OPSTR_ASSIST_STRUCTURE = "android:assist_structure";
+    field public static final String OPSTR_AUDIO_ACCESSIBILITY_VOLUME = "android:audio_accessibility_volume";
+    field public static final String OPSTR_AUDIO_ALARM_VOLUME = "android:audio_alarm_volume";
+    field public static final String OPSTR_AUDIO_BLUETOOTH_VOLUME = "android:audio_bluetooth_volume";
+    field public static final String OPSTR_AUDIO_MASTER_VOLUME = "android:audio_master_volume";
+    field public static final String OPSTR_AUDIO_MEDIA_VOLUME = "android:audio_media_volume";
+    field public static final String OPSTR_AUDIO_NOTIFICATION_VOLUME = "android:audio_notification_volume";
+    field public static final String OPSTR_AUDIO_RING_VOLUME = "android:audio_ring_volume";
+    field public static final String OPSTR_AUDIO_VOICE_VOLUME = "android:audio_voice_volume";
+    field public static final String OPSTR_AUTO_REVOKE_MANAGED_BY_INSTALLER = "android:auto_revoke_managed_by_installer";
+    field public static final String OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED = "android:auto_revoke_permissions_if_unused";
+    field public static final String OPSTR_BIND_ACCESSIBILITY_SERVICE = "android:bind_accessibility_service";
+    field public static final String OPSTR_CHANGE_WIFI_STATE = "android:change_wifi_state";
+    field public static final String OPSTR_GET_ACCOUNTS = "android:get_accounts";
+    field public static final String OPSTR_GPS = "android:gps";
+    field public static final String OPSTR_INSTANT_APP_START_FOREGROUND = "android:instant_app_start_foreground";
+    field public static final String OPSTR_INTERACT_ACROSS_PROFILES = "android:interact_across_profiles";
+    field public static final String OPSTR_LEGACY_STORAGE = "android:legacy_storage";
+    field public static final String OPSTR_LOADER_USAGE_STATS = "android:loader_usage_stats";
+    field public static final String OPSTR_MANAGE_EXTERNAL_STORAGE = "android:manage_external_storage";
+    field public static final String OPSTR_MANAGE_IPSEC_TUNNELS = "android:manage_ipsec_tunnels";
+    field public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls";
+    field public static final String OPSTR_MUTE_MICROPHONE = "android:mute_microphone";
+    field public static final String OPSTR_NEIGHBORING_CELLS = "android:neighboring_cells";
+    field public static final String OPSTR_PHONE_CALL_CAMERA = "android:phone_call_camera";
+    field public static final String OPSTR_PHONE_CALL_MICROPHONE = "android:phone_call_microphone";
+    field public static final String OPSTR_PLAY_AUDIO = "android:play_audio";
+    field public static final String OPSTR_POST_NOTIFICATION = "android:post_notification";
+    field public static final String OPSTR_PROJECT_MEDIA = "android:project_media";
+    field public static final String OPSTR_READ_CLIPBOARD = "android:read_clipboard";
+    field public static final String OPSTR_READ_ICC_SMS = "android:read_icc_sms";
+    field public static final String OPSTR_READ_MEDIA_AUDIO = "android:read_media_audio";
+    field public static final String OPSTR_READ_MEDIA_IMAGES = "android:read_media_images";
+    field public static final String OPSTR_READ_MEDIA_VIDEO = "android:read_media_video";
+    field public static final String OPSTR_RECEIVE_EMERGENCY_BROADCAST = "android:receive_emergency_broadcast";
+    field public static final String OPSTR_REQUEST_DELETE_PACKAGES = "android:request_delete_packages";
+    field public static final String OPSTR_REQUEST_INSTALL_PACKAGES = "android:request_install_packages";
+    field public static final String OPSTR_RUN_ANY_IN_BACKGROUND = "android:run_any_in_background";
+    field public static final String OPSTR_RUN_IN_BACKGROUND = "android:run_in_background";
+    field public static final String OPSTR_START_FOREGROUND = "android:start_foreground";
+    field public static final String OPSTR_TAKE_AUDIO_FOCUS = "android:take_audio_focus";
+    field public static final String OPSTR_TAKE_MEDIA_BUTTONS = "android:take_media_buttons";
+    field public static final String OPSTR_TOAST_WINDOW = "android:toast_window";
+    field public static final String OPSTR_TURN_SCREEN_ON = "android:turn_screen_on";
+    field public static final String OPSTR_VIBRATE = "android:vibrate";
+    field public static final String OPSTR_WAKE_LOCK = "android:wake_lock";
+    field public static final String OPSTR_WIFI_SCAN = "android:wifi_scan";
+    field public static final String OPSTR_WRITE_CLIPBOARD = "android:write_clipboard";
+    field public static final String OPSTR_WRITE_ICC_SMS = "android:write_icc_sms";
+    field public static final String OPSTR_WRITE_MEDIA_AUDIO = "android:write_media_audio";
+    field public static final String OPSTR_WRITE_MEDIA_IMAGES = "android:write_media_images";
+    field public static final String OPSTR_WRITE_MEDIA_VIDEO = "android:write_media_video";
+    field public static final String OPSTR_WRITE_SMS = "android:write_sms";
+    field public static final String OPSTR_WRITE_WALLPAPER = "android:write_wallpaper";
+    field public static final int OP_FLAGS_ALL = 31; // 0x1f
+    field public static final int OP_FLAGS_ALL_TRUSTED = 13; // 0xd
+    field public static final int OP_FLAG_SELF = 1; // 0x1
+    field public static final int OP_FLAG_TRUSTED_PROXIED = 8; // 0x8
+    field public static final int OP_FLAG_TRUSTED_PROXY = 2; // 0x2
+    field public static final int OP_FLAG_UNTRUSTED_PROXIED = 16; // 0x10
+    field public static final int OP_FLAG_UNTRUSTED_PROXY = 4; // 0x4
+    field public static final int UID_STATE_BACKGROUND = 600; // 0x258
+    field public static final int UID_STATE_CACHED = 700; // 0x2bc
+    field public static final int UID_STATE_FOREGROUND = 500; // 0x1f4
+    field public static final int UID_STATE_FOREGROUND_SERVICE = 400; // 0x190
+    field @Deprecated public static final int UID_STATE_FOREGROUND_SERVICE_LOCATION = 300; // 0x12c
+    field public static final int UID_STATE_PERSISTENT = 100; // 0x64
+    field public static final int UID_STATE_TOP = 200; // 0xc8
+  }
+
+  public static final class AppOpsManager.AttributedHistoricalOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.AppOpsManager.HistoricalOp getOp(@NonNull String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOp getOpAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getOpCount();
+    method @Nullable public String getTag();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.AttributedHistoricalOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.AttributedOpEntry implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getLastAccessBackgroundTime(int);
+    method public long getLastAccessForegroundTime(int);
+    method public long getLastAccessTime(int);
+    method public long getLastAccessTime(int, int, int);
+    method public long getLastBackgroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastBackgroundProxyInfo(int);
+    method public long getLastDuration(int);
+    method public long getLastDuration(int, int, int);
+    method public long getLastForegroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastForegroundProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int, int, int);
+    method public long getLastRejectBackgroundTime(int);
+    method public long getLastRejectForegroundTime(int);
+    method public long getLastRejectTime(int);
+    method public long getLastRejectTime(int, int, int);
+    method public boolean isRunning();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.AttributedOpEntry> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalOp implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAccessCount(int, int, int);
+    method public long getAccessDuration(int, int, int);
+    method public long getBackgroundAccessCount(int);
+    method public long getBackgroundAccessDuration(int);
+    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getBackgroundDiscreteAccesses(int);
+    method public long getBackgroundRejectCount(int);
+    method @NonNull public android.app.AppOpsManager.AttributedOpEntry getDiscreteAccessAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getDiscreteAccessCount();
+    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getDiscreteAccesses(int, int, int);
+    method public long getForegroundAccessCount(int);
+    method public long getForegroundAccessDuration(int);
+    method @NonNull public java.util.List<android.app.AppOpsManager.AttributedOpEntry> getForegroundDiscreteAccesses(int);
+    method public long getForegroundRejectCount(int);
+    method @NonNull public String getOpName();
+    method public long getRejectCount(int, int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOp> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getBeginTimeMillis();
+    method public long getEndTimeMillis();
+    method @IntRange(from=0) public int getUidCount();
+    method @Nullable public android.app.AppOpsManager.HistoricalUidOps getUidOps(int);
+    method @NonNull public android.app.AppOpsManager.HistoricalUidOps getUidOpsAt(@IntRange(from=0) int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalOpsRequest {
+  }
+
+  public static final class AppOpsManager.HistoricalOpsRequest.Builder {
+    ctor public AppOpsManager.HistoricalOpsRequest.Builder(long, long);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest build();
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setAttributionTag(@Nullable String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setFlags(int);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setHistoryFlags(int);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setOpNames(@Nullable java.util.List<java.lang.String>);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setPackageName(@Nullable String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOpsRequest.Builder setUid(int);
+  }
+
+  public static final class AppOpsManager.HistoricalPackageOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.AppOpsManager.AttributedHistoricalOps getAttributedOps(@Nullable String);
+    method @NonNull public android.app.AppOpsManager.AttributedHistoricalOps getAttributedOpsAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getAttributedOpsCount();
+    method @Nullable public android.app.AppOpsManager.HistoricalOp getOp(@NonNull String);
+    method @NonNull public android.app.AppOpsManager.HistoricalOp getOpAt(@IntRange(from=0) int);
+    method @IntRange(from=0) public int getOpCount();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalPackageOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.HistoricalUidOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public int getPackageCount();
+    method @Nullable public android.app.AppOpsManager.HistoricalPackageOps getPackageOps(@NonNull String);
+    method @NonNull public android.app.AppOpsManager.HistoricalPackageOps getPackageOpsAt(@IntRange(from=0) int);
+    method public int getUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.HistoricalUidOps> CREATOR;
+  }
+
+  public static final class AppOpsManager.OpEntry implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,android.app.AppOpsManager.AttributedOpEntry> getAttributedOpEntries();
+    method @Deprecated public long getDuration();
+    method public long getLastAccessBackgroundTime(int);
+    method public long getLastAccessForegroundTime(int);
+    method public long getLastAccessTime(int);
+    method public long getLastAccessTime(int, int, int);
+    method public long getLastBackgroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastBackgroundProxyInfo(int);
+    method public long getLastDuration(int);
+    method public long getLastDuration(int, int, int);
+    method public long getLastForegroundDuration(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastForegroundProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int);
+    method @Nullable public android.app.AppOpsManager.OpEventProxyInfo getLastProxyInfo(int, int, int);
+    method public long getLastRejectBackgroundTime(int);
+    method public long getLastRejectForegroundTime(int);
+    method public long getLastRejectTime(int);
+    method public long getLastRejectTime(int, int, int);
+    method public int getMode();
+    method @NonNull public String getOpStr();
+    method @Deprecated @Nullable public String getProxyPackageName();
+    method @Deprecated @Nullable public String getProxyPackageName(int, int);
+    method @Deprecated public int getProxyUid();
+    method @Deprecated public int getProxyUid(int, int);
+    method public boolean isRunning();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEntry> CREATOR;
+  }
+
+  public static final class AppOpsManager.OpEventProxyInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @Nullable public String getPackageName();
+    method @IntRange(from=0) public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.OpEventProxyInfo> CREATOR;
+  }
+
+  public static final class AppOpsManager.PackageOps implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.app.AppOpsManager.OpEntry> getOps();
+    method @NonNull public String getPackageName();
+    method public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.AppOpsManager.PackageOps> CREATOR;
+  }
+
+  public class BroadcastOptions {
+    method public static android.app.BroadcastOptions makeBasic();
+    method @RequiresPermission(android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND) public void setBackgroundActivityStartsAllowed(boolean);
+    method public void setDontSendToRestrictedApps(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST, android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND, android.Manifest.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND}) public void setTemporaryAppAllowlist(long, int, int, @Nullable String);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST, android.Manifest.permission.START_ACTIVITIES_FROM_BACKGROUND, android.Manifest.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND}) public void setTemporaryAppWhitelistDuration(long);
+    method public android.os.Bundle toBundle();
+  }
+
+  public class DownloadManager {
+    method @RequiresPermission(android.Manifest.permission.WRITE_MEDIA_STORAGE) public void onMediaStoreDownloadsDeleted(@NonNull android.util.LongSparseArray<java.lang.String>);
+    field public static final String ACTION_DOWNLOAD_COMPLETED = "android.intent.action.DOWNLOAD_COMPLETED";
+  }
+
+  public abstract class InstantAppResolverService extends android.app.Service {
+    ctor public InstantAppResolverService();
+    method public final void attachBaseContext(android.content.Context);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public void onGetInstantAppIntentFilter(@Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppIntentFilter(@NonNull android.content.Intent, @Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppIntentFilter(@NonNull android.content.Intent, @Nullable int[], @NonNull android.os.UserHandle, @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @MainThread public void onGetInstantAppIntentFilter(@NonNull android.content.pm.InstantAppRequestInfo, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppResolveInfo(@Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppResolveInfo(@NonNull android.content.Intent, @Nullable int[], @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @Deprecated public void onGetInstantAppResolveInfo(@NonNull android.content.Intent, @Nullable int[], @NonNull android.os.UserHandle, @NonNull String, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+    method @MainThread public void onGetInstantAppResolveInfo(@NonNull android.content.pm.InstantAppRequestInfo, @NonNull android.app.InstantAppResolverService.InstantAppResolutionCallback);
+  }
+
+  public static final class InstantAppResolverService.InstantAppResolutionCallback {
+    method public void onInstantAppResolveInfo(java.util.List<android.content.pm.InstantAppResolveInfo>);
+  }
+
+  public class KeyguardManager {
+    method public android.content.Intent createConfirmFactoryResetCredentialIntent(CharSequence, CharSequence, CharSequence);
+    method @RequiresPermission("android.permission.SET_INITIAL_LOCK") public int getMinLockLength(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS) public boolean getPrivateNotificationsAllowed();
+    method @RequiresPermission("android.permission.SET_INITIAL_LOCK") public boolean isValidLockPasswordComplexity(int, @NonNull byte[], int);
+    method @RequiresPermission(android.Manifest.permission.SHOW_KEYGUARD_MESSAGE) public void requestDismissKeyguard(@NonNull android.app.Activity, @Nullable CharSequence, @Nullable android.app.KeyguardManager.KeyguardDismissCallback);
+    method @RequiresPermission("android.permission.SET_INITIAL_LOCK") public boolean setLock(int, @NonNull byte[], int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS) public void setPrivateNotificationsAllowed(boolean);
+    field public static final int PASSWORD = 0; // 0x0
+    field public static final int PATTERN = 2; // 0x2
+    field public static final int PIN = 1; // 0x1
+  }
+
+  public class Notification implements android.os.Parcelable {
+    field public static final String CATEGORY_CAR_EMERGENCY = "car_emergency";
+    field public static final String CATEGORY_CAR_INFORMATION = "car_information";
+    field public static final String CATEGORY_CAR_WARNING = "car_warning";
+    field @RequiresPermission(android.Manifest.permission.NOTIFICATION_DURING_SETUP) public static final String EXTRA_ALLOW_DURING_SETUP = "android.allowDuringSetup";
+    field @RequiresPermission(android.Manifest.permission.SUBSTITUTE_NOTIFICATION_APP_NAME) public static final String EXTRA_SUBSTITUTE_APP_NAME = "android.substName";
+    field public static final int FLAG_AUTOGROUP_SUMMARY = 1024; // 0x400
+  }
+
+  public static class Notification.Action implements android.os.Parcelable {
+    field public static final int SEMANTIC_ACTION_CONVERSATION_IS_PHISHING = 12; // 0xc
+    field public static final int SEMANTIC_ACTION_MARK_CONVERSATION_AS_PRIORITY = 11; // 0xb
+  }
+
+  public static final class Notification.TvExtender implements android.app.Notification.Extender {
+    ctor public Notification.TvExtender();
+    ctor public Notification.TvExtender(android.app.Notification);
+    method public android.app.Notification.Builder extend(android.app.Notification.Builder);
+    method public String getChannelId();
+    method public android.app.PendingIntent getContentIntent();
+    method public android.app.PendingIntent getDeleteIntent();
+    method public boolean getSuppressShowOverApps();
+    method public boolean isAvailableOnTv();
+    method public android.app.Notification.TvExtender setChannel(String);
+    method public android.app.Notification.TvExtender setChannelId(String);
+    method public android.app.Notification.TvExtender setContentIntent(android.app.PendingIntent);
+    method public android.app.Notification.TvExtender setDeleteIntent(android.app.PendingIntent);
+    method public android.app.Notification.TvExtender setSuppressShowOverApps(boolean);
+  }
+
+  public final class NotificationChannel implements android.os.Parcelable {
+    method public int getUserLockedFields();
+    method public boolean isDeleted();
+    method public void populateFromXml(org.xmlpull.v1.XmlPullParser);
+    method public void setBlockable(boolean);
+    method public org.json.JSONObject toJson() throws org.json.JSONException;
+    method public void writeXml(org.xmlpull.v1.XmlSerializer) throws java.io.IOException;
+    field public static final int USER_LOCKED_SOUND = 32; // 0x20
+  }
+
+  public final class NotificationChannelGroup implements android.os.Parcelable {
+    method public org.json.JSONObject toJson() throws org.json.JSONException;
+  }
+
+  public class NotificationManager {
+    method @NonNull public java.util.List<java.lang.String> getAllowedAssistantAdjustments();
+    method @Nullable public android.content.ComponentName getAllowedNotificationAssistant();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public java.util.List<android.content.ComponentName> getEnabledNotificationListeners();
+    method public boolean isNotificationAssistantAccessGranted(@NonNull android.content.ComponentName);
+    method public void setNotificationAssistantAccessGranted(@Nullable android.content.ComponentName, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public void setNotificationListenerAccessGranted(@NonNull android.content.ComponentName, boolean, boolean);
+    field @RequiresPermission(android.Manifest.permission.STATUS_BAR_SERVICE) public static final String ACTION_CLOSE_NOTIFICATION_HANDLER_PANEL = "android.app.action.CLOSE_NOTIFICATION_HANDLER_PANEL";
+    field @RequiresPermission(android.Manifest.permission.STATUS_BAR_SERVICE) public static final String ACTION_OPEN_NOTIFICATION_HANDLER_PANEL = "android.app.action.OPEN_NOTIFICATION_HANDLER_PANEL";
+    field @RequiresPermission(android.Manifest.permission.STATUS_BAR_SERVICE) public static final String ACTION_TOGGLE_NOTIFICATION_HANDLER_PANEL = "android.app.action.TOGGLE_NOTIFICATION_HANDLER_PANEL";
+  }
+
+  public final class RuntimeAppOpAccessMessage implements android.os.Parcelable {
+    ctor public RuntimeAppOpAccessMessage(@IntRange(from=0L) int, @IntRange(from=0L) int, @NonNull String, @Nullable String, @NonNull String, int);
+    method public int describeContents();
+    method @Nullable public String getAttributionTag();
+    method @NonNull public String getMessage();
+    method @NonNull public String getOp();
+    method @NonNull public String getPackageName();
+    method public int getSamplingStrategy();
+    method @IntRange(from=0L) public int getUid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.RuntimeAppOpAccessMessage> CREATOR;
+  }
+
+  public class SearchManager implements android.content.DialogInterface.OnCancelListener android.content.DialogInterface.OnDismissListener {
+    method public void launchAssist(@Nullable android.os.Bundle);
+  }
+
+  public final class StatsManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void addConfig(long, byte[]) throws android.app.StatsManager.StatsUnavailableException;
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean addConfiguration(long, byte[]);
+    method @RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM) public void clearPullAtomCallback(int);
+    method @Deprecated @Nullable @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getData(long);
+    method @Deprecated @Nullable @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getMetadata();
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] getRegisteredExperimentIds() throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getReports(long) throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getStatsMetadata() throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void removeConfig(long) throws android.app.StatsManager.StatsUnavailableException;
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean removeConfiguration(long);
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] setActiveConfigsChangedOperation(@Nullable android.app.PendingIntent) throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void setBroadcastSubscriber(android.app.PendingIntent, long, long) throws android.app.StatsManager.StatsUnavailableException;
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setDataFetchOperation(long, android.app.PendingIntent);
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void setFetchReportsOperation(android.app.PendingIntent, long) throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM) public void setPullAtomCallback(int, @Nullable android.app.StatsManager.PullAtomMetadata, @NonNull java.util.concurrent.Executor, @NonNull android.app.StatsManager.StatsPullAtomCallback);
+    field public static final String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED";
+    field public static final String EXTRA_STATS_ACTIVE_CONFIG_KEYS = "android.app.extra.STATS_ACTIVE_CONFIG_KEYS";
+    field public static final String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES";
+    field public static final String EXTRA_STATS_CONFIG_KEY = "android.app.extra.STATS_CONFIG_KEY";
+    field public static final String EXTRA_STATS_CONFIG_UID = "android.app.extra.STATS_CONFIG_UID";
+    field public static final String EXTRA_STATS_DIMENSIONS_VALUE = "android.app.extra.STATS_DIMENSIONS_VALUE";
+    field public static final String EXTRA_STATS_SUBSCRIPTION_ID = "android.app.extra.STATS_SUBSCRIPTION_ID";
+    field public static final String EXTRA_STATS_SUBSCRIPTION_RULE_ID = "android.app.extra.STATS_SUBSCRIPTION_RULE_ID";
+    field public static final int PULL_SKIP = 1; // 0x1
+    field public static final int PULL_SUCCESS = 0; // 0x0
+  }
+
+  public static class StatsManager.PullAtomMetadata {
+    method @Nullable public int[] getAdditiveFields();
+    method public long getCoolDownMillis();
+    method public long getTimeoutMillis();
+  }
+
+  public static class StatsManager.PullAtomMetadata.Builder {
+    ctor public StatsManager.PullAtomMetadata.Builder();
+    method @NonNull public android.app.StatsManager.PullAtomMetadata build();
+    method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setAdditiveFields(@NonNull int[]);
+    method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setCoolDownMillis(long);
+    method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setTimeoutMillis(long);
+  }
+
+  public static interface StatsManager.StatsPullAtomCallback {
+    method public int onPullAtom(int, @NonNull java.util.List<android.util.StatsEvent>);
+  }
+
+  public static class StatsManager.StatsUnavailableException extends android.util.AndroidException {
+    ctor public StatsManager.StatsUnavailableException(String);
+    ctor public StatsManager.StatsUnavailableException(String, Throwable);
+  }
+
+  public class StatusBarManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.STATUS_BAR) public android.app.StatusBarManager.DisableInfo getDisableInfo();
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setDisabledForSetup(boolean);
+  }
+
+  public static final class StatusBarManager.DisableInfo {
+    method public boolean areAllComponentsEnabled();
+    method public boolean isNavigateToHomeDisabled();
+    method public boolean isNotificationPeekingDisabled();
+    method public boolean isRecentsDisabled();
+    method public boolean isSearchDisabled();
+    method public boolean isStatusBarExpansionDisabled();
+  }
+
+  public final class SystemServiceRegistry {
+    method public static <TServiceClass> void registerContextAwareService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.ContextAwareServiceProducerWithBinder<TServiceClass>);
+    method public static <TServiceClass> void registerContextAwareService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.ContextAwareServiceProducerWithoutBinder<TServiceClass>);
+    method public static <TServiceClass> void registerStaticService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.StaticServiceProducerWithBinder<TServiceClass>);
+    method public static <TServiceClass> void registerStaticService(@NonNull String, @NonNull Class<TServiceClass>, @NonNull android.app.SystemServiceRegistry.StaticServiceProducerWithoutBinder<TServiceClass>);
+  }
+
+  public static interface SystemServiceRegistry.ContextAwareServiceProducerWithBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService(@NonNull android.content.Context, @NonNull android.os.IBinder);
+  }
+
+  public static interface SystemServiceRegistry.ContextAwareServiceProducerWithoutBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService(@NonNull android.content.Context);
+  }
+
+  public static interface SystemServiceRegistry.StaticServiceProducerWithBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService(@NonNull android.os.IBinder);
+  }
+
+  public static interface SystemServiceRegistry.StaticServiceProducerWithoutBinder<TServiceClass> {
+    method @NonNull public TServiceClass createService();
+  }
+
+  public class UiModeManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void addOnProjectionStateChangedListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.app.UiModeManager.OnProjectionStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED) public void enableCarMode(@IntRange(from=0) int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public int getActiveProjectionTypes();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public java.util.Set<java.lang.String> getProjectingPackages(int);
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean releaseProjection(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void removeOnProjectionStateChangedListener(@NonNull android.app.UiModeManager.OnProjectionStateChangedListener);
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean requestProjection(int);
+    field public static final String ACTION_ENTER_CAR_MODE_PRIORITIZED = "android.app.action.ENTER_CAR_MODE_PRIORITIZED";
+    field public static final String ACTION_EXIT_CAR_MODE_PRIORITIZED = "android.app.action.EXIT_CAR_MODE_PRIORITIZED";
+    field public static final int DEFAULT_PRIORITY = 0; // 0x0
+    field public static final String EXTRA_CALLING_PACKAGE = "android.app.extra.CALLING_PACKAGE";
+    field public static final String EXTRA_PRIORITY = "android.app.extra.PRIORITY";
+    field public static final int PROJECTION_TYPE_ALL = -1; // 0xffffffff
+    field public static final int PROJECTION_TYPE_AUTOMOTIVE = 1; // 0x1
+    field public static final int PROJECTION_TYPE_NONE = 0; // 0x0
+  }
+
+  public static interface UiModeManager.OnProjectionStateChangedListener {
+    method public void onProjectionStateChanged(int, @NonNull java.util.Set<java.lang.String>);
+  }
+
+  public final class Vr2dDisplayProperties implements android.os.Parcelable {
+    ctor public Vr2dDisplayProperties(int, int, int);
+    method public int describeContents();
+    method public void dump(@NonNull java.io.PrintWriter, @NonNull String);
+    method public int getAddedFlags();
+    method public int getDpi();
+    method public int getHeight();
+    method public int getRemovedFlags();
+    method public int getWidth();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.Vr2dDisplayProperties> CREATOR;
+    field public static final int FLAG_VIRTUAL_DISPLAY_ENABLED = 1; // 0x1
+  }
+
+  public static final class Vr2dDisplayProperties.Builder {
+    ctor public Vr2dDisplayProperties.Builder();
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder addFlags(int);
+    method @NonNull public android.app.Vr2dDisplayProperties build();
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder removeFlags(int);
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder setDimensions(int, int, int);
+    method @NonNull public android.app.Vr2dDisplayProperties.Builder setEnabled(boolean);
+  }
+
+  public class VrManager {
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public int getVr2dDisplayId();
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public boolean isPersistentVrModeEnabled();
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public boolean isVrModeEnabled();
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public void registerVrStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.app.VrStateCallback);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setAndBindVrCompositor(android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setPersistentVrModeEnabled(boolean);
+    method @RequiresPermission("android.permission.ACCESS_VR_MANAGER") public void setStandbyEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setVr2dDisplayProperties(@NonNull android.app.Vr2dDisplayProperties);
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public void setVrInputMethod(@Nullable android.content.ComponentName);
+    method @RequiresPermission(anyOf={android.Manifest.permission.RESTRICTED_VR_ACCESS, "android.permission.ACCESS_VR_STATE"}) public void unregisterVrStateCallback(@NonNull android.app.VrStateCallback);
+  }
+
+  public abstract class VrStateCallback {
+    ctor public VrStateCallback();
+    method public void onPersistentVrStateChanged(boolean);
+    method public void onVrStateChanged(boolean);
+  }
+
+  public final class WallpaperInfo implements android.os.Parcelable {
+    method public boolean supportsAmbientMode();
+  }
+
+  public class WallpaperManager {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public void clearWallpaper(int, int);
+    method public void setDisplayOffset(android.os.IBinder, int, int);
+    method @RequiresPermission(android.Manifest.permission.SET_WALLPAPER_COMPONENT) public boolean setWallpaperComponent(android.content.ComponentName);
+  }
+
+}
+
+package android.app.admin {
+
+  public class DevicePolicyKeyguardService extends android.app.Service {
+    ctor public DevicePolicyKeyguardService();
+    method @Nullable public void dismiss();
+    method @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @Nullable public android.view.SurfaceControlViewHost.SurfacePackage onCreateKeyguardSurface(@NonNull android.os.IBinder);
+  }
+
+  public class DevicePolicyManager {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public boolean getBluetoothContactSharingDisabled(@NonNull android.os.UserHandle);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getDeviceOwner();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"}) public android.content.ComponentName getDeviceOwnerComponentOnAnyUser();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getDeviceOwnerNameOnAnyUser();
+    method @Nullable public CharSequence getDeviceOwnerOrganizationName();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.UserHandle getDeviceOwnerUser();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List<java.lang.String> getPermittedAccessibilityServices(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List<java.lang.String> getPermittedInputMethodsForCurrentUser();
+    method @Nullable public android.content.ComponentName getProfileOwner() throws java.lang.IllegalArgumentException;
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getProfileOwnerNameAsUser(int) throws java.lang.IllegalArgumentException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public int getUserProvisioningState();
+    method public boolean isDeviceManaged();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isDeviceProvisioned();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isDeviceProvisioningConfigApplied();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isManagedKiosk();
+    method public boolean isSecondaryLockscreenEnabled(@NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isUnattendedManagedKiosk();
+    method @RequiresPermission("android.permission.NOTIFY_PENDING_SYSTEM_UPDATE") public void notifyPendingSystemUpdate(long);
+    method @RequiresPermission("android.permission.NOTIFY_PENDING_SYSTEM_UPDATE") public void notifyPendingSystemUpdate(long, boolean);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public boolean packageHasActiveAdmins(String);
+    method @Deprecated @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public boolean setActiveProfileOwner(@NonNull android.content.ComponentName, String) throws java.lang.IllegalArgumentException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setDeviceProvisioningConfigApplied();
+    method @Deprecated @RequiresPermission(value=android.Manifest.permission.GRANT_PROFILE_OWNER_DEVICE_IDS_ACCESS, conditional=true) public void setProfileOwnerCanAccessDeviceIds(@NonNull android.content.ComponentName);
+    method public void setSecondaryLockscreenEnabled(@NonNull android.content.ComponentName, boolean);
+    field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED";
+    field public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED = "android.account.DEVICE_OR_PROFILE_OWNER_DISALLOWED";
+    field public static final String ACTION_BIND_SECONDARY_LOCKSCREEN_SERVICE = "android.app.action.BIND_SECONDARY_LOCKSCREEN_SERVICE";
+    field public static final String ACTION_PROVISION_FINALIZATION = "android.app.action.PROVISION_FINALIZATION";
+    field public static final String ACTION_PROVISION_FINANCED_DEVICE = "android.app.action.PROVISION_FINANCED_DEVICE";
+    field public static final String ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE = "android.app.action.PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_FACTORY_RESET_PROTECTION) public static final String ACTION_RESET_PROTECTION_POLICY_CHANGED = "android.app.action.RESET_PROTECTION_POLICY_CHANGED";
+    field public static final String ACTION_SET_PROFILE_OWNER = "android.app.action.SET_PROFILE_OWNER";
+    field public static final String ACTION_STATE_USER_SETUP_COMPLETE = "android.app.action.STATE_USER_SETUP_COMPLETE";
+    field public static final String EXTRA_PROFILE_OWNER_NAME = "android.app.extra.PROFILE_OWNER_NAME";
+    field @Deprecated public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_ICON_URI";
+    field @Deprecated public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL = "android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_LABEL";
+    field public static final String EXTRA_PROVISIONING_ORGANIZATION_NAME = "android.app.extra.PROVISIONING_ORGANIZATION_NAME";
+    field public static final String EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE = "android.app.extra.PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE";
+    field public static final String EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER = "android.app.extra.PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER";
+    field public static final String EXTRA_PROVISIONING_SUPPORTED_MODES = "android.app.extra.PROVISIONING_SUPPORTED_MODES";
+    field public static final String EXTRA_PROVISIONING_SUPPORT_URL = "android.app.extra.PROVISIONING_SUPPORT_URL";
+    field public static final String EXTRA_PROVISIONING_TRIGGER = "android.app.extra.PROVISIONING_TRIGGER";
+    field public static final String EXTRA_RESTRICTION = "android.app.extra.RESTRICTION";
+    field public static final int FLAG_SUPPORTED_MODES_DEVICE_OWNER = 4; // 0x4
+    field public static final int FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED = 1; // 0x1
+    field public static final int FLAG_SUPPORTED_MODES_PERSONALLY_OWNED = 2; // 0x2
+    field public static final int PROVISIONING_TRIGGER_CLOUD_ENROLLMENT = 1; // 0x1
+    field public static final int PROVISIONING_TRIGGER_MANAGED_ACCOUNT = 4; // 0x4
+    field @Deprecated public static final int PROVISIONING_TRIGGER_PERSISTENT_DEVICE_OWNER = 3; // 0x3
+    field public static final int PROVISIONING_TRIGGER_QR_CODE = 2; // 0x2
+    field public static final int PROVISIONING_TRIGGER_UNSPECIFIED = 0; // 0x0
+    field public static final String REQUIRED_APP_MANAGED_DEVICE = "android.app.REQUIRED_APP_MANAGED_DEVICE";
+    field public static final String REQUIRED_APP_MANAGED_PROFILE = "android.app.REQUIRED_APP_MANAGED_PROFILE";
+    field public static final String REQUIRED_APP_MANAGED_USER = "android.app.REQUIRED_APP_MANAGED_USER";
+    field public static final int STATE_USER_PROFILE_COMPLETE = 4; // 0x4
+    field public static final int STATE_USER_PROFILE_FINALIZED = 5; // 0x5
+    field public static final int STATE_USER_SETUP_COMPLETE = 2; // 0x2
+    field public static final int STATE_USER_SETUP_FINALIZED = 3; // 0x3
+    field public static final int STATE_USER_SETUP_INCOMPLETE = 1; // 0x1
+    field public static final int STATE_USER_UNMANAGED = 0; // 0x0
+  }
+
+  public final class SystemUpdatePolicy implements android.os.Parcelable {
+    method public android.app.admin.SystemUpdatePolicy.InstallationOption getInstallationOptionAt(long);
+    field public static final int TYPE_PAUSE = 4; // 0x4
+  }
+
+  public static class SystemUpdatePolicy.InstallationOption {
+    method public long getEffectiveTime();
+    method public int getType();
+  }
+
+}
+
+package android.app.appsearch {
+
+  public class AppSearchManagerFrameworkInitializer {
+    method public static void initialize();
+  }
+
+}
+
+package android.app.assist {
+
+  public class ActivityId {
+  }
+
+  public static class AssistStructure.ViewNode {
+    ctor public AssistStructure.ViewNode();
+  }
+
+}
+
+package android.app.backup {
+
+  public class BackupDataInput {
+    ctor public BackupDataInput(java.io.FileDescriptor);
+  }
+
+  public class BackupDataOutput {
+    ctor public BackupDataOutput(java.io.FileDescriptor);
+    ctor public BackupDataOutput(java.io.FileDescriptor, long);
+  }
+
+  public class BackupManager {
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void backupNow();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public android.app.backup.RestoreSession beginRestoreSession();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void cancelBackups();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void excludeKeysFromRestore(@NonNull String, @NonNull java.util.List<java.lang.String>);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public long getAvailableRestoreToken(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.Intent getConfigurationIntent(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public String getCurrentTransport();
+    method @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.ComponentName getCurrentTransportComponent();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public android.content.Intent getDataManagementIntent(String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public CharSequence getDataManagementIntentLabel(@NonNull String);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.BACKUP) public String getDataManagementLabel(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public String getDestinationString(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isAppEligibleForBackup(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isBackupEnabled();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public boolean isBackupServiceActive(android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public String[] listAllTransports();
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[], android.app.backup.BackupObserver);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public int requestBackup(String[], android.app.backup.BackupObserver, android.app.backup.BackupManagerMonitor, int);
+    method @Deprecated public int requestRestore(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BACKUP) public String selectBackupTransport(String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void selectBackupTransport(android.content.ComponentName, android.app.backup.SelectBackupTransportCallback);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAncestralSerialNumber(long);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAutoRestore(boolean);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void setBackupEnabled(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.BACKUP) public void updateTransportAttributes(@NonNull android.content.ComponentName, @NonNull String, @Nullable android.content.Intent, @NonNull String, @Nullable android.content.Intent, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.BACKUP) public void updateTransportAttributes(@NonNull android.content.ComponentName, @NonNull String, @Nullable android.content.Intent, @NonNull String, @Nullable android.content.Intent, @Nullable CharSequence);
+    field public static final int ERROR_AGENT_FAILURE = -1003; // 0xfffffc15
+    field public static final int ERROR_BACKUP_CANCELLED = -2003; // 0xfffff82d
+    field public static final int ERROR_BACKUP_NOT_ALLOWED = -2001; // 0xfffff82f
+    field public static final int ERROR_PACKAGE_NOT_FOUND = -2002; // 0xfffff82e
+    field public static final int ERROR_TRANSPORT_ABORTED = -1000; // 0xfffffc18
+    field public static final int ERROR_TRANSPORT_INVALID = -2; // 0xfffffffe
+    field public static final int ERROR_TRANSPORT_PACKAGE_REJECTED = -1002; // 0xfffffc16
+    field public static final int ERROR_TRANSPORT_QUOTA_EXCEEDED = -1005; // 0xfffffc13
+    field public static final int ERROR_TRANSPORT_UNAVAILABLE = -1; // 0xffffffff
+    field public static final int FLAG_NON_INCREMENTAL_BACKUP = 1; // 0x1
+    field public static final String PACKAGE_MANAGER_SENTINEL = "@pm@";
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public class BackupManagerMonitor {
+    ctor public BackupManagerMonitor();
+    method public void onEvent(android.os.Bundle);
+    field public static final String EXTRA_LOG_CANCEL_ALL = "android.app.backup.extra.LOG_CANCEL_ALL";
+    field public static final String EXTRA_LOG_EVENT_CATEGORY = "android.app.backup.extra.LOG_EVENT_CATEGORY";
+    field public static final String EXTRA_LOG_EVENT_ID = "android.app.backup.extra.LOG_EVENT_ID";
+    field public static final String EXTRA_LOG_EVENT_PACKAGE_LONG_VERSION = "android.app.backup.extra.LOG_EVENT_PACKAGE_FULL_VERSION";
+    field public static final String EXTRA_LOG_EVENT_PACKAGE_NAME = "android.app.backup.extra.LOG_EVENT_PACKAGE_NAME";
+    field @Deprecated public static final String EXTRA_LOG_EVENT_PACKAGE_VERSION = "android.app.backup.extra.LOG_EVENT_PACKAGE_VERSION";
+    field public static final String EXTRA_LOG_EXCEPTION_FULL_BACKUP = "android.app.backup.extra.LOG_EXCEPTION_FULL_BACKUP";
+    field public static final String EXTRA_LOG_ILLEGAL_KEY = "android.app.backup.extra.LOG_ILLEGAL_KEY";
+    field public static final String EXTRA_LOG_MANIFEST_PACKAGE_NAME = "android.app.backup.extra.LOG_MANIFEST_PACKAGE_NAME";
+    field public static final String EXTRA_LOG_OLD_VERSION = "android.app.backup.extra.LOG_OLD_VERSION";
+    field public static final String EXTRA_LOG_POLICY_ALLOW_APKS = "android.app.backup.extra.LOG_POLICY_ALLOW_APKS";
+    field public static final String EXTRA_LOG_PREFLIGHT_ERROR = "android.app.backup.extra.LOG_PREFLIGHT_ERROR";
+    field public static final String EXTRA_LOG_RESTORE_ANYWAY = "android.app.backup.extra.LOG_RESTORE_ANYWAY";
+    field public static final String EXTRA_LOG_RESTORE_VERSION = "android.app.backup.extra.LOG_RESTORE_VERSION";
+    field public static final String EXTRA_LOG_WIDGET_PACKAGE_NAME = "android.app.backup.extra.LOG_WIDGET_PACKAGE_NAME";
+    field public static final int LOG_EVENT_CATEGORY_AGENT = 2; // 0x2
+    field public static final int LOG_EVENT_CATEGORY_BACKUP_MANAGER_POLICY = 3; // 0x3
+    field public static final int LOG_EVENT_CATEGORY_TRANSPORT = 1; // 0x1
+    field public static final int LOG_EVENT_ID_APK_NOT_INSTALLED = 40; // 0x28
+    field public static final int LOG_EVENT_ID_APP_HAS_NO_AGENT = 28; // 0x1c
+    field public static final int LOG_EVENT_ID_BACKUP_DISABLED = 13; // 0xd
+    field public static final int LOG_EVENT_ID_CANNOT_RESTORE_WITHOUT_APK = 41; // 0x29
+    field public static final int LOG_EVENT_ID_CANT_FIND_AGENT = 30; // 0x1e
+    field public static final int LOG_EVENT_ID_CORRUPT_MANIFEST = 46; // 0x2e
+    field public static final int LOG_EVENT_ID_DEVICE_NOT_PROVISIONED = 14; // 0xe
+    field public static final int LOG_EVENT_ID_ERROR_PREFLIGHT = 16; // 0x10
+    field public static final int LOG_EVENT_ID_EXCEPTION_FULL_BACKUP = 19; // 0x13
+    field public static final int LOG_EVENT_ID_EXPECTED_DIFFERENT_PACKAGE = 43; // 0x2b
+    field public static final int LOG_EVENT_ID_FULL_BACKUP_CANCEL = 4; // 0x4
+    field public static final int LOG_EVENT_ID_FULL_RESTORE_ALLOW_BACKUP_FALSE = 39; // 0x27
+    field public static final int LOG_EVENT_ID_FULL_RESTORE_SIGNATURE_MISMATCH = 37; // 0x25
+    field public static final int LOG_EVENT_ID_FULL_RESTORE_TIMEOUT = 45; // 0x2d
+    field public static final int LOG_EVENT_ID_ILLEGAL_KEY = 5; // 0x5
+    field public static final int LOG_EVENT_ID_KEY_VALUE_BACKUP_CANCEL = 21; // 0x15
+    field public static final int LOG_EVENT_ID_KEY_VALUE_RESTORE_TIMEOUT = 31; // 0x1f
+    field public static final int LOG_EVENT_ID_LOST_TRANSPORT = 25; // 0x19
+    field public static final int LOG_EVENT_ID_MISSING_SIGNATURE = 42; // 0x2a
+    field public static final int LOG_EVENT_ID_NO_DATA_TO_SEND = 7; // 0x7
+    field public static final int LOG_EVENT_ID_NO_PACKAGES = 49; // 0x31
+    field public static final int LOG_EVENT_ID_NO_PM_METADATA_RECEIVED = 23; // 0x17
+    field public static final int LOG_EVENT_ID_NO_RESTORE_METADATA_AVAILABLE = 22; // 0x16
+    field public static final int LOG_EVENT_ID_PACKAGE_INELIGIBLE = 9; // 0x9
+    field public static final int LOG_EVENT_ID_PACKAGE_KEY_VALUE_PARTICIPANT = 10; // 0xa
+    field public static final int LOG_EVENT_ID_PACKAGE_NOT_FOUND = 12; // 0xc
+    field public static final int LOG_EVENT_ID_PACKAGE_NOT_PRESENT = 26; // 0x1a
+    field public static final int LOG_EVENT_ID_PACKAGE_STOPPED = 11; // 0xb
+    field public static final int LOG_EVENT_ID_PACKAGE_TRANSPORT_NOT_PRESENT = 15; // 0xf
+    field public static final int LOG_EVENT_ID_PM_AGENT_HAS_NO_METADATA = 24; // 0x18
+    field public static final int LOG_EVENT_ID_QUOTA_HIT_PREFLIGHT = 18; // 0x12
+    field public static final int LOG_EVENT_ID_RESTORE_ANY_VERSION = 34; // 0x22
+    field public static final int LOG_EVENT_ID_RESTORE_VERSION_HIGHER = 27; // 0x1b
+    field public static final int LOG_EVENT_ID_SIGNATURE_MISMATCH = 29; // 0x1d
+    field public static final int LOG_EVENT_ID_SYSTEM_APP_NO_AGENT = 38; // 0x26
+    field public static final int LOG_EVENT_ID_TRANSPORT_IS_NULL = 50; // 0x32
+    field public static final int LOG_EVENT_ID_TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED = 51; // 0x33
+    field public static final int LOG_EVENT_ID_UNKNOWN_VERSION = 44; // 0x2c
+    field public static final int LOG_EVENT_ID_VERSIONS_MATCH = 35; // 0x23
+    field public static final int LOG_EVENT_ID_VERSION_OF_BACKUP_OLDER = 36; // 0x24
+    field public static final int LOG_EVENT_ID_WIDGET_METADATA_MISMATCH = 47; // 0x2f
+    field public static final int LOG_EVENT_ID_WIDGET_UNKNOWN_VERSION = 48; // 0x30
+  }
+
+  public abstract class BackupObserver {
+    ctor public BackupObserver();
+    method public void backupFinished(int);
+    method public void onResult(String, int);
+    method public void onUpdate(String, android.app.backup.BackupProgress);
+  }
+
+  public class BackupProgress implements android.os.Parcelable {
+    ctor public BackupProgress(long, long);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.BackupProgress> CREATOR;
+    field public final long bytesExpected;
+    field public final long bytesTransferred;
+  }
+
+  public class BackupTransport {
+    ctor public BackupTransport();
+    method public int abortFullRestore();
+    method public void cancelFullBackup();
+    method public int checkFullBackupSize(long);
+    method public int clearBackupData(android.content.pm.PackageInfo);
+    method public android.content.Intent configurationIntent();
+    method public String currentDestinationString();
+    method public android.content.Intent dataManagementIntent();
+    method @Nullable public CharSequence dataManagementIntentLabel();
+    method @Deprecated @Nullable public String dataManagementLabel();
+    method public int finishBackup();
+    method public void finishRestore();
+    method public android.app.backup.RestoreSet[] getAvailableRestoreSets();
+    method public long getBackupQuota(String, boolean);
+    method public android.os.IBinder getBinder();
+    method public long getCurrentRestoreSet();
+    method public int getNextFullRestoreDataChunk(android.os.ParcelFileDescriptor);
+    method public int getRestoreData(android.os.ParcelFileDescriptor);
+    method public int getTransportFlags();
+    method public int initializeDevice();
+    method public boolean isAppEligibleForBackup(android.content.pm.PackageInfo, boolean);
+    method public String name();
+    method public android.app.backup.RestoreDescription nextRestorePackage();
+    method public int performBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor, int);
+    method public int performBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor);
+    method public int performFullBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor, int);
+    method public int performFullBackup(android.content.pm.PackageInfo, android.os.ParcelFileDescriptor);
+    method public long requestBackupTime();
+    method public long requestFullBackupTime();
+    method public int sendBackupData(int);
+    method public int startRestore(long, android.content.pm.PackageInfo[]);
+    method public String transportDirName();
+    field public static final int AGENT_ERROR = -1003; // 0xfffffc15
+    field public static final int AGENT_UNKNOWN = -1004; // 0xfffffc14
+    field public static final String EXTRA_TRANSPORT_REGISTRATION = "android.app.backup.extra.TRANSPORT_REGISTRATION";
+    field public static final int FLAG_DATA_NOT_CHANGED = 8; // 0x8
+    field public static final int FLAG_INCREMENTAL = 2; // 0x2
+    field public static final int FLAG_NON_INCREMENTAL = 4; // 0x4
+    field public static final int FLAG_USER_INITIATED = 1; // 0x1
+    field public static final int NO_MORE_DATA = -1; // 0xffffffff
+    field public static final int TRANSPORT_ERROR = -1000; // 0xfffffc18
+    field public static final int TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED = -1006; // 0xfffffc12
+    field public static final int TRANSPORT_NOT_INITIALIZED = -1001; // 0xfffffc17
+    field public static final int TRANSPORT_OK = 0; // 0x0
+    field public static final int TRANSPORT_PACKAGE_REJECTED = -1002; // 0xfffffc16
+    field public static final int TRANSPORT_QUOTA_EXCEEDED = -1005; // 0xfffffc13
+  }
+
+  public class RestoreDescription implements android.os.Parcelable {
+    ctor public RestoreDescription(String, int);
+    method public int describeContents();
+    method public int getDataType();
+    method public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.RestoreDescription> CREATOR;
+    field public static final android.app.backup.RestoreDescription NO_MORE_PACKAGES;
+    field public static final int TYPE_FULL_STREAM = 2; // 0x2
+    field public static final int TYPE_KEY_VALUE = 1; // 0x1
+  }
+
+  public abstract class RestoreObserver {
+    method public void restoreSetsAvailable(android.app.backup.RestoreSet[]);
+  }
+
+  public class RestoreSession {
+    method public void endRestoreSession();
+    method public int getAvailableRestoreSets(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method public int getAvailableRestoreSets(android.app.backup.RestoreObserver);
+    method public int restoreAll(long, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method public int restoreAll(long, android.app.backup.RestoreObserver);
+    method public int restorePackage(String, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
+    method public int restorePackage(String, android.app.backup.RestoreObserver);
+    method public int restorePackages(long, @Nullable android.app.backup.RestoreObserver, @NonNull java.util.Set<java.lang.String>, @Nullable android.app.backup.BackupManagerMonitor);
+    method public int restorePackages(long, @Nullable android.app.backup.RestoreObserver, @NonNull java.util.Set<java.lang.String>);
+  }
+
+  public class RestoreSet implements android.os.Parcelable {
+    ctor public RestoreSet();
+    ctor public RestoreSet(@Nullable String, @Nullable String, long);
+    ctor public RestoreSet(@Nullable String, @Nullable String, long, int);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.backup.RestoreSet> CREATOR;
+    field public final int backupTransportFlags;
+    field @Nullable public String device;
+    field @Nullable public String name;
+    field public long token;
+  }
+
+  public abstract class SelectBackupTransportCallback {
+    ctor public SelectBackupTransportCallback();
+    method public void onFailure(int);
+    method public void onSuccess(String);
+  }
+
+}
+
+package android.app.compat {
+
+  public final class CompatChanges {
+    method public static boolean isChangeEnabled(long);
+    method @RequiresPermission(allOf={"android.permission.READ_COMPAT_CHANGE_CONFIG", "android.permission.LOG_COMPAT_CHANGE"}) public static boolean isChangeEnabled(long, @NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(allOf={"android.permission.READ_COMPAT_CHANGE_CONFIG", "android.permission.LOG_COMPAT_CHANGE"}) public static boolean isChangeEnabled(long, int);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD) public static void putPackageOverrides(@NonNull String, @NonNull java.util.Map<java.lang.Long,android.app.compat.PackageOverride>);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD) public static void removePackageOverrides(@NonNull String, @NonNull java.util.Set<java.lang.Long>);
+  }
+
+  public final class PackageOverride {
+    method public long getMaxVersionCode();
+    method public long getMinVersionCode();
+    method public boolean isEnabled();
+  }
+
+  public static final class PackageOverride.Builder {
+    ctor public PackageOverride.Builder();
+    method @NonNull public android.app.compat.PackageOverride build();
+    method @NonNull public android.app.compat.PackageOverride.Builder setEnabled(boolean);
+    method @NonNull public android.app.compat.PackageOverride.Builder setMaxVersionCode(long);
+    method @NonNull public android.app.compat.PackageOverride.Builder setMinVersionCode(long);
+  }
+
+}
+
+package android.app.contentsuggestions {
+
+  public final class ClassificationsRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public java.util.List<android.app.contentsuggestions.ContentSelection> getSelections();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ClassificationsRequest> CREATOR;
+  }
+
+  public static final class ClassificationsRequest.Builder {
+    ctor public ClassificationsRequest.Builder(@NonNull java.util.List<android.app.contentsuggestions.ContentSelection>);
+    method @NonNull public android.app.contentsuggestions.ClassificationsRequest build();
+    method @NonNull public android.app.contentsuggestions.ClassificationsRequest.Builder setExtras(@NonNull android.os.Bundle);
+  }
+
+  public final class ContentClassification implements android.os.Parcelable {
+    ctor public ContentClassification(@NonNull String, @NonNull android.os.Bundle);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ContentClassification> CREATOR;
+  }
+
+  public final class ContentSelection implements android.os.Parcelable {
+    ctor public ContentSelection(@NonNull String, @NonNull android.os.Bundle);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.ContentSelection> CREATOR;
+  }
+
+  public final class ContentSuggestionsManager {
+    method public void classifyContentSelections(@NonNull android.app.contentsuggestions.ClassificationsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.ClassificationsCallback);
+    method public boolean isEnabled();
+    method public void notifyInteraction(@NonNull String, @NonNull android.os.Bundle);
+    method public void provideContextImage(@NonNull android.graphics.Bitmap, @NonNull android.os.Bundle);
+    method public void provideContextImage(int, @NonNull android.os.Bundle);
+    method public void suggestContentSelections(@NonNull android.app.contentsuggestions.SelectionsRequest, @NonNull java.util.concurrent.Executor, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.SelectionsCallback);
+  }
+
+  public static interface ContentSuggestionsManager.ClassificationsCallback {
+    method public void onContentClassificationsAvailable(int, @NonNull java.util.List<android.app.contentsuggestions.ContentClassification>);
+  }
+
+  public static interface ContentSuggestionsManager.SelectionsCallback {
+    method public void onContentSelectionsAvailable(int, @NonNull java.util.List<android.app.contentsuggestions.ContentSelection>);
+  }
+
+  public final class SelectionsRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.Point getInterestPoint();
+    method public int getTaskId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.contentsuggestions.SelectionsRequest> CREATOR;
+  }
+
+  public static final class SelectionsRequest.Builder {
+    ctor public SelectionsRequest.Builder(int);
+    method @NonNull public android.app.contentsuggestions.SelectionsRequest build();
+    method @NonNull public android.app.contentsuggestions.SelectionsRequest.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.contentsuggestions.SelectionsRequest.Builder setInterestPoint(@NonNull android.graphics.Point);
+  }
+
+}
+
+package android.app.job {
+
+  public abstract class JobScheduler {
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public abstract int scheduleAsPackage(@NonNull android.app.job.JobInfo, @NonNull String, int, String);
+  }
+
+  public class JobSchedulerFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+}
+
+package android.app.people {
+
+  public final class PeopleManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PEOPLE_DATA) public boolean isConversation(@NonNull String, @NonNull String);
+  }
+
+}
+
+package android.app.prediction {
+
+  public final class AppPredictionContext implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public String getPackageName();
+    method @IntRange(from=0) public int getPredictedTargetCount();
+    method @NonNull public String getUiSurface();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionContext> CREATOR;
+  }
+
+  public static final class AppPredictionContext.Builder {
+    ctor public AppPredictionContext.Builder(@NonNull android.content.Context);
+    method @NonNull public android.app.prediction.AppPredictionContext build();
+    method @NonNull public android.app.prediction.AppPredictionContext.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.prediction.AppPredictionContext.Builder setPredictedTargetCount(@IntRange(from=0) int);
+    method @NonNull public android.app.prediction.AppPredictionContext.Builder setUiSurface(@NonNull String);
+  }
+
+  public final class AppPredictionManager {
+    method @NonNull public android.app.prediction.AppPredictor createAppPredictionSession(@NonNull android.app.prediction.AppPredictionContext);
+  }
+
+  public final class AppPredictionSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppPredictionSessionId> CREATOR;
+  }
+
+  public final class AppPredictor {
+    method public void destroy();
+    method public void notifyAppTargetEvent(@NonNull android.app.prediction.AppTargetEvent);
+    method public void notifyLaunchLocationShown(@NonNull String, @NonNull java.util.List<android.app.prediction.AppTargetId>);
+    method public void registerPredictionUpdates(@NonNull java.util.concurrent.Executor, @NonNull android.app.prediction.AppPredictor.Callback);
+    method public void requestPredictionUpdate();
+    method @Nullable public void sortTargets(@NonNull java.util.List<android.app.prediction.AppTarget>, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<android.app.prediction.AppTarget>>);
+    method public void unregisterPredictionUpdates(@NonNull android.app.prediction.AppPredictor.Callback);
+  }
+
+  public static interface AppPredictor.Callback {
+    method public void onTargetsAvailable(@NonNull java.util.List<android.app.prediction.AppTarget>);
+  }
+
+  public final class AppTarget implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getClassName();
+    method @NonNull public android.app.prediction.AppTargetId getId();
+    method @NonNull public String getPackageName();
+    method @IntRange(from=0) public int getRank();
+    method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo();
+    method @NonNull public android.os.UserHandle getUser();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTarget> CREATOR;
+  }
+
+  public static final class AppTarget.Builder {
+    ctor public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId, @NonNull String, @NonNull android.os.UserHandle);
+    ctor public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId, @NonNull android.content.pm.ShortcutInfo);
+    method @NonNull public android.app.prediction.AppTarget build();
+    method @NonNull public android.app.prediction.AppTarget.Builder setClassName(@NonNull String);
+    method @NonNull public android.app.prediction.AppTarget.Builder setRank(@IntRange(from=0) int);
+  }
+
+  public final class AppTargetEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAction();
+    method @Nullable public String getLaunchLocation();
+    method @Nullable public android.app.prediction.AppTarget getTarget();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTION_DISMISS = 2; // 0x2
+    field public static final int ACTION_LAUNCH = 1; // 0x1
+    field public static final int ACTION_PIN = 3; // 0x3
+    field public static final int ACTION_UNPIN = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetEvent> CREATOR;
+  }
+
+  public static final class AppTargetEvent.Builder {
+    ctor public AppTargetEvent.Builder(@Nullable android.app.prediction.AppTarget, int);
+    method @NonNull public android.app.prediction.AppTargetEvent build();
+    method @NonNull public android.app.prediction.AppTargetEvent.Builder setLaunchLocation(@Nullable String);
+  }
+
+  public final class AppTargetId implements android.os.Parcelable {
+    ctor public AppTargetId(@NonNull String);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.prediction.AppTargetId> CREATOR;
+  }
+
+}
+
+package android.app.role {
+
+  public interface OnRoleHoldersChangedListener {
+    method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle);
+  }
+
+  @Deprecated public abstract class RoleControllerService extends android.app.Service {
+    ctor @Deprecated public RoleControllerService();
+    method @Deprecated @WorkerThread public abstract boolean onAddRoleHolder(@NonNull String, @NonNull String, int);
+    method @Deprecated @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @Deprecated @WorkerThread public abstract boolean onClearRoleHolders(@NonNull String, int);
+    method @Deprecated @WorkerThread public abstract boolean onGrantDefaultRoles();
+    method @Deprecated public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String);
+    method @Deprecated public boolean onIsApplicationVisibleForRole(@NonNull String, @NonNull String);
+    method @Deprecated public abstract boolean onIsRoleVisible(@NonNull String);
+    method @Deprecated @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int);
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService";
+  }
+
+  public final class RoleManager {
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List<java.lang.String> getHeldRolesFromController(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHolders(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public boolean isBypassingRoleQualification();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.BYPASS_ROLE_QUALIFICATION) public void setBypassingRoleQualification(boolean);
+    method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List<java.lang.String>);
+    field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1
+    field public static final String ROLE_SYSTEM_ACTIVITY_RECOGNIZER = "android.app.role.SYSTEM_ACTIVITY_RECOGNIZER";
+    field public static final String ROLE_SYSTEM_WELLBEING = "android.app.role.SYSTEM_WELLBEING";
+  }
+
+}
+
+package android.app.search {
+
+  public final class Query implements android.os.Parcelable {
+    ctor public Query(@NonNull String, long, @NonNull android.os.Bundle);
+    ctor public Query(@NonNull String, long);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getInput();
+    method public long getTimestampMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.Query> CREATOR;
+    field public static final String EXTRA_IME_HEIGHT = "android.app.search.extra.IME_HEIGHT";
+  }
+
+  public final class SearchAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getContentDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @NonNull public String getId();
+    method @Nullable public android.content.Intent getIntent();
+    method @Nullable public android.app.PendingIntent getPendingIntent();
+    method @Nullable public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method @Nullable public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchAction> CREATOR;
+  }
+
+  public static final class SearchAction.Builder {
+    ctor public SearchAction.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.search.SearchAction build();
+    method @NonNull public android.app.search.SearchAction.Builder setContentDescription(@Nullable CharSequence);
+    method @NonNull public android.app.search.SearchAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.search.SearchAction.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.search.SearchAction.Builder setIntent(@Nullable android.content.Intent);
+    method @NonNull public android.app.search.SearchAction.Builder setPendingIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.search.SearchAction.Builder setSubtitle(@Nullable CharSequence);
+    method @NonNull public android.app.search.SearchAction.Builder setUserHandle(@Nullable android.os.UserHandle);
+  }
+
+  public final class SearchContext implements android.os.Parcelable {
+    ctor public SearchContext(int, int);
+    ctor public SearchContext(int, int, @NonNull android.os.Bundle);
+    method public int describeContents();
+    method @NonNull public android.os.Bundle getExtras();
+    method @Nullable public String getPackageName();
+    method @NonNull public int getResultTypes();
+    method @NonNull public int getTimeoutMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchContext> CREATOR;
+  }
+
+  public final class SearchSession implements java.lang.AutoCloseable {
+    method public void close();
+    method protected void finalize();
+    method public void notifyEvent(@NonNull android.app.search.Query, @NonNull android.app.search.SearchTargetEvent);
+    method @Nullable public void query(@NonNull android.app.search.Query, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.util.List<android.app.search.SearchTarget>>);
+  }
+
+  public final class SearchSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchSessionId> CREATOR;
+  }
+
+  public final class SearchTarget implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.appwidget.AppWidgetProviderInfo getAppWidgetProviderInfo();
+    method @NonNull public android.os.Bundle getExtras();
+    method @NonNull public String getId();
+    method @NonNull public String getLayoutType();
+    method @NonNull public String getPackageName();
+    method @NonNull public String getParentId();
+    method public int getResultType();
+    method public float getScore();
+    method @Nullable public android.app.search.SearchAction getSearchAction();
+    method @Nullable public android.content.pm.ShortcutInfo getShortcutInfo();
+    method @Nullable public android.net.Uri getSliceUri();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public boolean isHidden();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchTarget> CREATOR;
+    field public static final String LAYOUT_TYPE_ICON = "icon";
+    field public static final String LAYOUT_TYPE_ICON_ROW = "icon_row";
+    field public static final String LAYOUT_TYPE_SHORT_ICON_ROW = "short_icon_row";
+    field public static final int RESULT_TYPE_APPLICATION = 1; // 0x1
+    field public static final int RESULT_TYPE_SHORTCUT = 2; // 0x2
+    field public static final int RESULT_TYPE_SLICE = 4; // 0x4
+    field public static final int RESULT_TYPE_WIDGETS = 8; // 0x8
+  }
+
+  public static final class SearchTarget.Builder {
+    ctor public SearchTarget.Builder(int, @NonNull String, @NonNull String);
+    method @NonNull public android.app.search.SearchTarget build();
+    method @NonNull public android.app.search.SearchTarget.Builder setAppWidgetProviderInfo(@NonNull android.appwidget.AppWidgetProviderInfo);
+    method @NonNull public android.app.search.SearchTarget.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.search.SearchTarget.Builder setHidden(boolean);
+    method @NonNull public android.app.search.SearchTarget.Builder setPackageName(@NonNull String);
+    method @NonNull public android.app.search.SearchTarget.Builder setParentId(@NonNull String);
+    method @NonNull public android.app.search.SearchTarget.Builder setScore(@FloatRange(from=0.0f, to=1.0f) float);
+    method @NonNull public android.app.search.SearchTarget.Builder setSearchAction(@Nullable android.app.search.SearchAction);
+    method @NonNull public android.app.search.SearchTarget.Builder setShortcutInfo(@NonNull android.content.pm.ShortcutInfo);
+    method @NonNull public android.app.search.SearchTarget.Builder setSliceUri(@NonNull android.net.Uri);
+    method @NonNull public android.app.search.SearchTarget.Builder setUserHandle(@NonNull android.os.UserHandle);
+  }
+
+  public final class SearchTargetEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAction();
+    method public int getFlags();
+    method @Nullable public String getLaunchLocation();
+    method @NonNull public String getTargetId();
+    method @NonNull public java.util.List<java.lang.String> getTargetIds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int ACTION_DRAGNDROP = 7; // 0x7
+    field public static final int ACTION_LAUNCH_KEYBOARD_FOCUS = 6; // 0x6
+    field public static final int ACTION_LAUNCH_TOUCH = 5; // 0x5
+    field public static final int ACTION_LONGPRESS = 4; // 0x4
+    field public static final int ACTION_SURFACE_INVISIBLE = 8; // 0x8
+    field public static final int ACTION_SURFACE_VISIBLE = 1; // 0x1
+    field public static final int ACTION_TAP = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.search.SearchTargetEvent> CREATOR;
+    field public static final int FLAG_IME_SHOWN = 1; // 0x1
+  }
+
+  public static final class SearchTargetEvent.Builder {
+    ctor public SearchTargetEvent.Builder(@NonNull String, int);
+    ctor public SearchTargetEvent.Builder(@NonNull java.util.List<java.lang.String>, int);
+    method @NonNull public android.app.search.SearchTargetEvent build();
+    method @NonNull public android.app.search.SearchTargetEvent.Builder setFlags(int);
+    method @NonNull public android.app.search.SearchTargetEvent.Builder setLaunchLocation(@Nullable String);
+  }
+
+  public final class SearchUiManager {
+    method @NonNull public android.app.search.SearchSession createSearchSession(@NonNull android.app.search.SearchContext);
+  }
+
+}
+
+package android.app.smartspace {
+
+  public final class SmartspaceAction implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public CharSequence getContentDescription();
+    method @Nullable public android.os.Bundle getExtras();
+    method @Nullable public android.graphics.drawable.Icon getIcon();
+    method @NonNull public String getId();
+    method @Nullable public android.content.Intent getIntent();
+    method @Nullable public android.app.PendingIntent getPendingIntent();
+    method @Nullable public CharSequence getSubtitle();
+    method @NonNull public CharSequence getTitle();
+    method @Nullable public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceAction> CREATOR;
+  }
+
+  public static final class SmartspaceAction.Builder {
+    ctor public SmartspaceAction.Builder(@NonNull String, @NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceAction build();
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setContentDescription(@Nullable CharSequence);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setExtras(@Nullable android.os.Bundle);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setIcon(@Nullable android.graphics.drawable.Icon);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setIntent(@Nullable android.content.Intent);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setPendingIntent(@Nullable android.app.PendingIntent);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setSubtitle(@Nullable CharSequence);
+    method @NonNull public android.app.smartspace.SmartspaceAction.Builder setUserHandle(@Nullable android.os.UserHandle);
+  }
+
+  public final class SmartspaceConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.os.Bundle getExtras();
+    method @NonNull public String getPackageName();
+    method @NonNull public int getSmartspaceTargetCount();
+    method @NonNull public String getUiSurface();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceConfig> CREATOR;
+  }
+
+  public static final class SmartspaceConfig.Builder {
+    ctor public SmartspaceConfig.Builder(@NonNull android.content.Context, @NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceConfig build();
+    method @NonNull public android.app.smartspace.SmartspaceConfig.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.app.smartspace.SmartspaceConfig.Builder setSmartspaceTargetCount(@IntRange(from=0, to=50) int);
+  }
+
+  public final class SmartspaceManager {
+    method @NonNull public android.app.smartspace.SmartspaceSession createSmartspaceSession(@NonNull android.app.smartspace.SmartspaceConfig);
+  }
+
+  public final class SmartspaceSession implements java.lang.AutoCloseable {
+    method public void addOnTargetsAvailableListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.smartspace.SmartspaceSession.OnTargetsAvailableListener);
+    method public void close();
+    method protected void finalize();
+    method public void notifySmartspaceEvent(@NonNull android.app.smartspace.SmartspaceTargetEvent);
+    method public void removeOnTargetsAvailableListener(@NonNull android.app.smartspace.SmartspaceSession.OnTargetsAvailableListener);
+    method public void requestSmartspaceUpdate();
+  }
+
+  public static interface SmartspaceSession.OnTargetsAvailableListener {
+    method public void onTargetsAvailable(@NonNull java.util.List<android.app.smartspace.SmartspaceTarget>);
+  }
+
+  public final class SmartspaceSessionId implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getId();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceSessionId> CREATOR;
+  }
+
+  public final class SmartspaceTarget implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.app.smartspace.SmartspaceAction> getActionChips();
+    method @Nullable public String getAssociatedSmartspaceTargetId();
+    method @Nullable public android.app.smartspace.SmartspaceAction getBaseAction();
+    method @NonNull public android.content.ComponentName getComponentName();
+    method public long getCreationTimeMillis();
+    method public long getExpiryTimeMillis();
+    method public int getFeatureType();
+    method @Nullable public android.app.smartspace.SmartspaceAction getHeaderAction();
+    method @NonNull public java.util.List<android.app.smartspace.SmartspaceAction> getIconGrid();
+    method public float getScore();
+    method @Nullable public android.net.Uri getSliceUri();
+    method @NonNull public String getSmartspaceTargetId();
+    method @Nullable public String getSourceNotificationKey();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method @Nullable public android.appwidget.AppWidgetProviderInfo getWidget();
+    method public boolean isSensitive();
+    method public boolean shouldShowExpanded();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceTarget> CREATOR;
+    field public static final int FEATURE_ALARM = 7; // 0x7
+    field public static final int FEATURE_BEDTIME_ROUTINE = 16; // 0x10
+    field public static final int FEATURE_CALENDAR = 2; // 0x2
+    field public static final int FEATURE_COMMUTE_TIME = 3; // 0x3
+    field public static final int FEATURE_CONSENT = 11; // 0xb
+    field public static final int FEATURE_ETA_MONITORING = 18; // 0x12
+    field public static final int FEATURE_FITNESS_TRACKING = 17; // 0x11
+    field public static final int FEATURE_FLIGHT = 4; // 0x4
+    field public static final int FEATURE_LOYALTY_CARD = 14; // 0xe
+    field public static final int FEATURE_MEDIA = 15; // 0xf
+    field public static final int FEATURE_MISSED_CALL = 19; // 0x13
+    field public static final int FEATURE_ONBOARDING = 8; // 0x8
+    field public static final int FEATURE_PACKAGE_TRACKING = 20; // 0x14
+    field public static final int FEATURE_REMINDER = 6; // 0x6
+    field public static final int FEATURE_SHOPPING_LIST = 13; // 0xd
+    field public static final int FEATURE_SPORTS = 9; // 0x9
+    field public static final int FEATURE_STOCK_PRICE_CHANGE = 12; // 0xc
+    field public static final int FEATURE_STOPWATCH = 22; // 0x16
+    field public static final int FEATURE_TIMER = 21; // 0x15
+    field public static final int FEATURE_TIPS = 5; // 0x5
+    field public static final int FEATURE_UNDEFINED = 0; // 0x0
+    field public static final int FEATURE_UPCOMING_ALARM = 23; // 0x17
+    field public static final int FEATURE_WEATHER = 1; // 0x1
+    field public static final int FEATURE_WEATHER_ALERT = 10; // 0xa
+  }
+
+  public static final class SmartspaceTarget.Builder {
+    ctor public SmartspaceTarget.Builder(@NonNull String, @NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+    method @NonNull public android.app.smartspace.SmartspaceTarget build();
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setActionChips(@NonNull java.util.List<android.app.smartspace.SmartspaceAction>);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setAssociatedSmartspaceTargetId(@NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setBaseAction(@NonNull android.app.smartspace.SmartspaceAction);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setCreationTimeMillis(long);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setExpiryTimeMillis(long);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setFeatureType(int);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setHeaderAction(@NonNull android.app.smartspace.SmartspaceAction);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setIconGrid(@NonNull java.util.List<android.app.smartspace.SmartspaceAction>);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setScore(float);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setSensitive(boolean);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setShouldShowExpanded(boolean);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setSliceUri(@NonNull android.net.Uri);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setSourceNotificationKey(@NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceTarget.Builder setWidget(@NonNull android.appwidget.AppWidgetProviderInfo);
+  }
+
+  public final class SmartspaceTargetEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public int getEventType();
+    method @Nullable public String getSmartspaceActionId();
+    method @Nullable public android.app.smartspace.SmartspaceTarget getSmartspaceTarget();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.smartspace.SmartspaceTargetEvent> CREATOR;
+    field public static final int EVENT_TARGET_BLOCK = 5; // 0x5
+    field public static final int EVENT_TARGET_DISMISS = 4; // 0x4
+    field public static final int EVENT_TARGET_HIDDEN = 3; // 0x3
+    field public static final int EVENT_TARGET_INTERACTION = 1; // 0x1
+    field public static final int EVENT_TARGET_SHOWN = 2; // 0x2
+    field public static final int EVENT_UI_SURFACE_HIDDEN = 7; // 0x7
+    field public static final int EVENT_UI_SURFACE_SHOWN = 6; // 0x6
+  }
+
+  public static final class SmartspaceTargetEvent.Builder {
+    ctor public SmartspaceTargetEvent.Builder(int);
+    method @NonNull public android.app.smartspace.SmartspaceTargetEvent build();
+    method @NonNull public android.app.smartspace.SmartspaceTargetEvent.Builder setSmartspaceActionId(@NonNull String);
+    method @NonNull public android.app.smartspace.SmartspaceTargetEvent.Builder setSmartspaceTarget(@NonNull android.app.smartspace.SmartspaceTarget);
+  }
+
+}
+
+package android.app.time {
+
+  public final class Capabilities {
+    field public static final int CAPABILITY_NOT_ALLOWED = 20; // 0x14
+    field public static final int CAPABILITY_NOT_APPLICABLE = 30; // 0x1e
+    field public static final int CAPABILITY_NOT_SUPPORTED = 10; // 0xa
+    field public static final int CAPABILITY_POSSESSED = 40; // 0x28
+  }
+
+  public final class ExternalTimeSuggestion implements android.os.Parcelable {
+    ctor public ExternalTimeSuggestion(long, long);
+    method public void addDebugInfo(@NonNull java.lang.String...);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getDebugInfo();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.ExternalTimeSuggestion> CREATOR;
+  }
+
+  public final class TimeManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public void addTimeZoneDetectorListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.time.TimeManager.TimeZoneDetectorListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public android.app.time.TimeZoneCapabilitiesAndConfig getTimeZoneCapabilitiesAndConfig();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public void removeTimeZoneDetectorListener(@NonNull android.app.time.TimeManager.TimeZoneDetectorListener);
+    method @RequiresPermission(android.Manifest.permission.SUGGEST_EXTERNAL_TIME) public void suggestExternalTime(@NonNull android.app.time.ExternalTimeSuggestion);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TIME_AND_ZONE_DETECTION) public boolean updateTimeZoneConfiguration(@NonNull android.app.time.TimeZoneConfiguration);
+  }
+
+  @java.lang.FunctionalInterface public static interface TimeManager.TimeZoneDetectorListener {
+    method public void onChange();
+  }
+
+  public final class TimeZoneCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getConfigureAutoDetectionEnabledCapability();
+    method public int getConfigureGeoDetectionEnabledCapability();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.TimeZoneCapabilities> CREATOR;
+  }
+
+  public final class TimeZoneCapabilitiesAndConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.app.time.TimeZoneCapabilities getCapabilities();
+    method @NonNull public android.app.time.TimeZoneConfiguration getConfiguration();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.TimeZoneCapabilitiesAndConfig> CREATOR;
+  }
+
+  public final class TimeZoneConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isAutoDetectionEnabled();
+    method public boolean isGeoDetectionEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.time.TimeZoneConfiguration> CREATOR;
+  }
+
+  public static final class TimeZoneConfiguration.Builder {
+    ctor public TimeZoneConfiguration.Builder();
+    ctor public TimeZoneConfiguration.Builder(@NonNull android.app.time.TimeZoneConfiguration);
+    method @NonNull public android.app.time.TimeZoneConfiguration build();
+    method @NonNull public android.app.time.TimeZoneConfiguration.Builder setAutoDetectionEnabled(boolean);
+    method @NonNull public android.app.time.TimeZoneConfiguration.Builder setGeoDetectionEnabled(boolean);
+  }
+
+}
+
+package android.app.usage {
+
+  public final class CacheQuotaHint implements android.os.Parcelable {
+    ctor public CacheQuotaHint(@NonNull android.app.usage.CacheQuotaHint.Builder);
+    method public int describeContents();
+    method public long getQuota();
+    method public int getUid();
+    method @Nullable public android.app.usage.UsageStats getUsageStats();
+    method @Nullable public String getVolumeUuid();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.CacheQuotaHint> CREATOR;
+    field public static final long QUOTA_NOT_SET = -1L; // 0xffffffffffffffffL
+  }
+
+  public static final class CacheQuotaHint.Builder {
+    ctor public CacheQuotaHint.Builder();
+    ctor public CacheQuotaHint.Builder(@NonNull android.app.usage.CacheQuotaHint);
+    method @NonNull public android.app.usage.CacheQuotaHint build();
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setQuota(long);
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setUid(int);
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setUsageStats(@Nullable android.app.usage.UsageStats);
+    method @NonNull public android.app.usage.CacheQuotaHint.Builder setVolumeUuid(@Nullable String);
+  }
+
+  public abstract class CacheQuotaService extends android.app.Service {
+    ctor public CacheQuotaService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract java.util.List<android.app.usage.CacheQuotaHint> onComputeCacheQuotaHints(java.util.List<android.app.usage.CacheQuotaHint>);
+    field public static final String SERVICE_INTERFACE = "android.app.usage.CacheQuotaService";
+  }
+
+  public class NetworkStatsManager {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void registerNetworkStatsProvider(@NonNull String, @NonNull android.net.netstats.provider.NetworkStatsProvider);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STATS_PROVIDER, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void unregisterNetworkStatsProvider(@NonNull android.net.netstats.provider.NetworkStatsProvider);
+  }
+
+  public static final class UsageEvents.Event {
+    method public int getInstanceId();
+    method @Nullable public String getNotificationChannelId();
+    method @Nullable public String getTaskRootClassName();
+    method @Nullable public String getTaskRootPackageName();
+    method public boolean isInstantApp();
+    field public static final int NOTIFICATION_INTERRUPTION = 12; // 0xc
+    field public static final int NOTIFICATION_SEEN = 10; // 0xa
+    field public static final int SLICE_PINNED = 14; // 0xe
+    field public static final int SLICE_PINNED_PRIV = 13; // 0xd
+    field public static final int SYSTEM_INTERACTION = 6; // 0x6
+  }
+
+  public final class UsageStats implements android.os.Parcelable {
+    method public int getAppLaunchCount();
+    method public long getLastTimeAnyComponentUsed();
+  }
+
+  public final class UsageStatsManager {
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getAppStandbyBucket(String);
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public java.util.Map<java.lang.String,java.lang.Integer> getAppStandbyBuckets();
+    method @RequiresPermission(allOf={android.Manifest.permission.INTERACT_ACROSS_USERS, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long getLastTimeAnyComponentUsed(@NonNull String);
+    method public int getUsageSource();
+    method @RequiresPermission(android.Manifest.permission.BIND_CARRIER_SERVICES) public void onCarrierPrivilegedAppsChanged();
+    method @RequiresPermission(allOf={android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void registerAppUsageLimitObserver(int, @NonNull String[], @NonNull java.time.Duration, @NonNull java.time.Duration, @Nullable android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerAppUsageObserver(int, @NonNull String[], long, @NonNull java.util.concurrent.TimeUnit, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void registerUsageSessionObserver(int, @NonNull String[], @NonNull java.time.Duration, @NonNull java.time.Duration, @NonNull android.app.PendingIntent, @Nullable android.app.PendingIntent);
+    method public void reportUsageStart(@NonNull android.app.Activity, @NonNull String);
+    method public void reportUsageStart(@NonNull android.app.Activity, @NonNull String, long);
+    method public void reportUsageStop(@NonNull android.app.Activity, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_APP_IDLE_STATE) public void setAppStandbyBucket(String, int);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_APP_IDLE_STATE) public void setAppStandbyBuckets(java.util.Map<java.lang.String,java.lang.Integer>);
+    method @RequiresPermission(allOf={android.Manifest.permission.SUSPEND_APPS, android.Manifest.permission.OBSERVE_APP_USAGE}) public void unregisterAppUsageLimitObserver(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void unregisterAppUsageObserver(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_APP_USAGE) public void unregisterUsageSessionObserver(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(String, long, android.os.UserHandle);
+    field public static final String EXTRA_OBSERVER_ID = "android.app.usage.extra.OBSERVER_ID";
+    field public static final String EXTRA_TIME_LIMIT = "android.app.usage.extra.TIME_LIMIT";
+    field public static final String EXTRA_TIME_USED = "android.app.usage.extra.TIME_USED";
+    field public static final int STANDBY_BUCKET_EXEMPTED = 5; // 0x5
+    field public static final int STANDBY_BUCKET_NEVER = 50; // 0x32
+    field public static final int USAGE_SOURCE_CURRENT_ACTIVITY = 2; // 0x2
+    field public static final int USAGE_SOURCE_TASK_ROOT_ACTIVITY = 1; // 0x1
+  }
+
+}
+
+package android.apphibernation {
+
+  public class AppHibernationManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public java.util.List<java.lang.String> getHibernatingPackagesForUser();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingForUser(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public boolean isHibernatingGlobally(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingForUser(@NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_APP_HIBERNATION) public void setHibernatingGlobally(@NonNull String, boolean);
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothA2dp implements android.bluetooth.BluetoothProfile {
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public android.bluetooth.BufferConstraints getBufferConstraints();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getDynamicBufferSupport();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setBufferLengthMillis(int, int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field public static final int DYNAMIC_BUFFER_SUPPORT_A2DP_OFFLOAD = 1; // 0x1
+    field public static final int DYNAMIC_BUFFER_SUPPORT_A2DP_SOFTWARE_ENCODING = 2; // 0x2
+    field public static final int DYNAMIC_BUFFER_SUPPORT_NONE = 0; // 0x0
+    field public static final int OPTIONAL_CODECS_NOT_SUPPORTED = 0; // 0x0
+    field public static final int OPTIONAL_CODECS_PREF_DISABLED = 0; // 0x0
+    field public static final int OPTIONAL_CODECS_PREF_ENABLED = 1; // 0x1
+    field public static final int OPTIONAL_CODECS_PREF_UNKNOWN = -1; // 0xffffffff
+    field public static final int OPTIONAL_CODECS_SUPPORTED = 1; // 0x1
+    field public static final int OPTIONAL_CODECS_SUPPORT_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class BluetoothA2dpSink implements android.bluetooth.BluetoothProfile {
+    method public void finalize();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean isAudioPlaying(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothAdapter {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean addOnMetadataChangedListener(@NonNull android.bluetooth.BluetoothDevice, @NonNull java.util.concurrent.Executor, @NonNull android.bluetooth.BluetoothAdapter.OnMetadataChangedListener);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disableBLE();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean enableBLE();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean enableNoAutoConnect();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public void generateLocalOobData(int, @NonNull java.util.concurrent.Executor, @NonNull android.bluetooth.BluetoothAdapter.OobDataCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public long getDiscoveryEndMillis();
+    method public boolean isBleScanAlwaysAvailable();
+    method public boolean isLeEnabled();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean removeActiveDevice(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean removeOnMetadataChangedListener(@NonNull android.bluetooth.BluetoothDevice, @NonNull android.bluetooth.BluetoothAdapter.OnMetadataChangedListener);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean setActiveDevice(@NonNull android.bluetooth.BluetoothDevice, int);
+    field public static final String ACTION_BLE_STATE_CHANGED = "android.bluetooth.adapter.action.BLE_STATE_CHANGED";
+    field public static final String ACTION_REQUEST_BLE_SCAN_ALWAYS_AVAILABLE = "android.bluetooth.adapter.action.REQUEST_BLE_SCAN_ALWAYS_AVAILABLE";
+    field public static final int ACTIVE_DEVICE_ALL = 2; // 0x2
+    field public static final int ACTIVE_DEVICE_AUDIO = 0; // 0x0
+    field public static final int ACTIVE_DEVICE_PHONE_CALL = 1; // 0x1
+  }
+
+  public static interface BluetoothAdapter.OnMetadataChangedListener {
+    method public void onMetadataChanged(@NonNull android.bluetooth.BluetoothDevice, int, @Nullable byte[]);
+  }
+
+  public static interface BluetoothAdapter.OobDataCallback {
+    method public void onError(int);
+    method public void onOobData(int, @NonNull android.bluetooth.OobData);
+  }
+
+  public final class BluetoothDevice implements android.os.Parcelable {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean canBondWithoutDialog();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean cancelBondProcess();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean createBondOutOfBand(int, @Nullable android.bluetooth.OobData, @Nullable android.bluetooth.OobData);
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public byte[] getMetadata(int);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getSimAccessPermission();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isConnected();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isEncrypted();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean isInSilenceMode();
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean removeBond();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setMessageAccessPermission(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setMetadata(int, @NonNull byte[]);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setPhonebookAccessPermission(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setSilenceMode(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setSimAccessPermission(int);
+    field public static final int ACCESS_ALLOWED = 1; // 0x1
+    field public static final int ACCESS_REJECTED = 2; // 0x2
+    field public static final int ACCESS_UNKNOWN = 0; // 0x0
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_SILENCE_MODE_CHANGED = "android.bluetooth.device.action.SILENCE_MODE_CHANGED";
+    field public static final String DEVICE_TYPE_DEFAULT = "Default";
+    field public static final String DEVICE_TYPE_UNTETHERED_HEADSET = "Untethered Headset";
+    field public static final String DEVICE_TYPE_WATCH = "Watch";
+    field public static final int METADATA_COMPANION_APP = 4; // 0x4
+    field public static final int METADATA_DEVICE_TYPE = 17; // 0x11
+    field public static final int METADATA_ENHANCED_SETTINGS_UI_URI = 16; // 0x10
+    field public static final int METADATA_HARDWARE_VERSION = 3; // 0x3
+    field public static final int METADATA_IS_UNTETHERED_HEADSET = 6; // 0x6
+    field public static final int METADATA_MAIN_BATTERY = 18; // 0x12
+    field public static final int METADATA_MAIN_CHARGING = 19; // 0x13
+    field public static final int METADATA_MAIN_ICON = 5; // 0x5
+    field public static final int METADATA_MAIN_LOW_BATTERY_THRESHOLD = 20; // 0x14
+    field public static final int METADATA_MANUFACTURER_NAME = 0; // 0x0
+    field public static final int METADATA_MAX_LENGTH = 2048; // 0x800
+    field public static final int METADATA_MODEL_NAME = 1; // 0x1
+    field public static final int METADATA_SOFTWARE_VERSION = 2; // 0x2
+    field public static final int METADATA_UNTETHERED_CASE_BATTERY = 12; // 0xc
+    field public static final int METADATA_UNTETHERED_CASE_CHARGING = 15; // 0xf
+    field public static final int METADATA_UNTETHERED_CASE_ICON = 9; // 0x9
+    field public static final int METADATA_UNTETHERED_CASE_LOW_BATTERY_THRESHOLD = 23; // 0x17
+    field public static final int METADATA_UNTETHERED_LEFT_BATTERY = 10; // 0xa
+    field public static final int METADATA_UNTETHERED_LEFT_CHARGING = 13; // 0xd
+    field public static final int METADATA_UNTETHERED_LEFT_ICON = 7; // 0x7
+    field public static final int METADATA_UNTETHERED_LEFT_LOW_BATTERY_THRESHOLD = 21; // 0x15
+    field public static final int METADATA_UNTETHERED_RIGHT_BATTERY = 11; // 0xb
+    field public static final int METADATA_UNTETHERED_RIGHT_CHARGING = 14; // 0xe
+    field public static final int METADATA_UNTETHERED_RIGHT_ICON = 8; // 0x8
+    field public static final int METADATA_UNTETHERED_RIGHT_LOW_BATTERY_THRESHOLD = 22; // 0x16
+  }
+
+  public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean connect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean disconnect(android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+  }
+
+  public final class BluetoothHearingAid implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public long getHiSyncId(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+  }
+
+  public final class BluetoothHidDevice implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+  }
+
+  public final class BluetoothHidHost implements android.bluetooth.BluetoothProfile {
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothMap implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
+    method public void close();
+    method protected void finalize();
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.map.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public final class BluetoothMapClient implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.SEND_SMS}) public boolean sendMessage(@NonNull android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.net.Uri>, @NonNull String, @Nullable android.app.PendingIntent, @Nullable android.app.PendingIntent);
+  }
+
+  public final class BluetoothPan implements android.bluetooth.BluetoothProfile {
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isTetheringOn();
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED, android.Manifest.permission.TETHER_PRIVILEGED}) public void setBluetoothTethering(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED";
+    field public static final String ACTION_TETHERING_STATE_CHANGED = "android.bluetooth.action.TETHERING_STATE_CHANGED";
+    field public static final String EXTRA_LOCAL_ROLE = "android.bluetooth.pan.extra.LOCAL_ROLE";
+    field public static final String EXTRA_TETHERING_STATE = "android.bluetooth.extra.TETHERING_STATE";
+    field public static final int LOCAL_NAP_ROLE = 1; // 0x1
+    field public static final int LOCAL_PANU_ROLE = 2; // 0x2
+    field public static final int PAN_ROLE_NONE = 0; // 0x0
+    field public static final int REMOTE_NAP_ROLE = 1; // 0x1
+    field public static final int REMOTE_PANU_ROLE = 2; // 0x2
+    field public static final int TETHERING_STATE_OFF = 1; // 0x1
+    field public static final int TETHERING_STATE_ON = 2; // 0x2
+  }
+
+  public class BluetoothPbap implements android.bluetooth.BluetoothProfile {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public int getConnectionState(@NonNull android.bluetooth.BluetoothDevice);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
+    field @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED";
+  }
+
+  public interface BluetoothProfile {
+    field public static final int A2DP_SINK = 11; // 0xb
+    field public static final int AVRCP_CONTROLLER = 12; // 0xc
+    field public static final int CONNECTION_POLICY_ALLOWED = 100; // 0x64
+    field public static final int CONNECTION_POLICY_FORBIDDEN = 0; // 0x0
+    field public static final int CONNECTION_POLICY_UNKNOWN = -1; // 0xffffffff
+    field public static final int HEADSET_CLIENT = 16; // 0x10
+    field public static final int MAP_CLIENT = 18; // 0x12
+    field public static final int PAN = 5; // 0x5
+    field public static final int PBAP_CLIENT = 17; // 0x11
+    field @Deprecated public static final int PRIORITY_OFF = 0; // 0x0
+    field @Deprecated public static final int PRIORITY_ON = 100; // 0x64
+  }
+
+  public final class BluetoothStatusCodes {
+    field public static final int ERROR_ANOTHER_ACTIVE_OOB_REQUEST = 1000; // 0x3e8
+  }
+
+  public final class BluetoothUuid {
+    method public static boolean containsAnyUuid(@Nullable android.os.ParcelUuid[], @Nullable android.os.ParcelUuid[]);
+    method @NonNull public static android.os.ParcelUuid parseUuidFrom(@Nullable byte[]);
+    field @NonNull public static final android.os.ParcelUuid A2DP_SINK;
+    field @NonNull public static final android.os.ParcelUuid A2DP_SOURCE;
+    field @NonNull public static final android.os.ParcelUuid ADV_AUDIO_DIST;
+    field @NonNull public static final android.os.ParcelUuid AVRCP_CONTROLLER;
+    field @NonNull public static final android.os.ParcelUuid AVRCP_TARGET;
+    field @NonNull public static final android.os.ParcelUuid BASE_UUID;
+    field @NonNull public static final android.os.ParcelUuid BNEP;
+    field @NonNull public static final android.os.ParcelUuid DIP;
+    field @NonNull public static final android.os.ParcelUuid HEARING_AID;
+    field @NonNull public static final android.os.ParcelUuid HFP;
+    field @NonNull public static final android.os.ParcelUuid HFP_AG;
+    field @NonNull public static final android.os.ParcelUuid HID;
+    field @NonNull public static final android.os.ParcelUuid HOGP;
+    field @NonNull public static final android.os.ParcelUuid HSP;
+    field @NonNull public static final android.os.ParcelUuid HSP_AG;
+    field @NonNull public static final android.os.ParcelUuid LE_AUDIO;
+    field @NonNull public static final android.os.ParcelUuid MAP;
+    field @NonNull public static final android.os.ParcelUuid MAS;
+    field @NonNull public static final android.os.ParcelUuid MNS;
+    field @NonNull public static final android.os.ParcelUuid NAP;
+    field @NonNull public static final android.os.ParcelUuid OBEX_OBJECT_PUSH;
+    field @NonNull public static final android.os.ParcelUuid PANU;
+    field @NonNull public static final android.os.ParcelUuid PBAP_PCE;
+    field @NonNull public static final android.os.ParcelUuid PBAP_PSE;
+    field @NonNull public static final android.os.ParcelUuid SAP;
+    field public static final int UUID_BYTES_128_BIT = 16; // 0x10
+    field public static final int UUID_BYTES_16_BIT = 2; // 0x2
+    field public static final int UUID_BYTES_32_BIT = 4; // 0x4
+    field @NonNull public static final android.os.ParcelUuid VOLUME_CONTROL;
+  }
+
+  public final class BufferConstraint implements android.os.Parcelable {
+    ctor public BufferConstraint(int, int, int);
+    method public int describeContents();
+    method public int getDefaultMillis();
+    method public int getMaxMillis();
+    method public int getMinMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BufferConstraint> CREATOR;
+  }
+
+  public final class BufferConstraints implements android.os.Parcelable {
+    ctor public BufferConstraints(@NonNull java.util.List<android.bluetooth.BufferConstraint>);
+    method public int describeContents();
+    method @Nullable public android.bluetooth.BufferConstraint forCodec(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BUFFER_CODEC_MAX_NUM = 32; // 0x20
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.BufferConstraints> CREATOR;
+  }
+
+  public final class OobData implements android.os.Parcelable {
+    method @NonNull public byte[] getClassOfDevice();
+    method @NonNull public byte[] getClassicLength();
+    method @NonNull public byte[] getConfirmationHash();
+    method @NonNull public byte[] getDeviceAddressWithType();
+    method @Nullable public byte[] getDeviceName();
+    method @Nullable public byte[] getLeAppearance();
+    method @NonNull public int getLeDeviceRole();
+    method @NonNull public int getLeFlags();
+    method @Nullable public byte[] getLeTemporaryKey();
+    method @NonNull public byte[] getRandomizerHash();
+    field public static final int CLASS_OF_DEVICE_OCTETS = 3; // 0x3
+    field public static final int CONFIRMATION_OCTETS = 16; // 0x10
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.OobData> CREATOR;
+    field public static final int DEVICE_ADDRESS_OCTETS = 7; // 0x7
+    field public static final int LE_APPEARANCE_OCTETS = 2; // 0x2
+    field public static final int LE_DEVICE_FLAG_OCTETS = 1; // 0x1
+    field public static final int LE_DEVICE_ROLE_BOTH_PREFER_CENTRAL = 3; // 0x3
+    field public static final int LE_DEVICE_ROLE_BOTH_PREFER_PERIPHERAL = 2; // 0x2
+    field public static final int LE_DEVICE_ROLE_CENTRAL_ONLY = 1; // 0x1
+    field public static final int LE_DEVICE_ROLE_OCTETS = 1; // 0x1
+    field public static final int LE_DEVICE_ROLE_PERIPHERAL_ONLY = 0; // 0x0
+    field public static final int LE_FLAG_BREDR_NOT_SUPPORTED = 2; // 0x2
+    field public static final int LE_FLAG_GENERAL_DISCOVERY_MODE = 1; // 0x1
+    field public static final int LE_FLAG_LIMITED_DISCOVERY_MODE = 0; // 0x0
+    field public static final int LE_FLAG_SIMULTANEOUS_CONTROLLER = 3; // 0x3
+    field public static final int LE_FLAG_SIMULTANEOUS_HOST = 4; // 0x4
+    field public static final int LE_TK_OCTETS = 16; // 0x10
+    field public static final int OOB_LENGTH_OCTETS = 2; // 0x2
+    field public static final int RANDOMIZER_OCTETS = 16; // 0x10
+  }
+
+  public static final class OobData.ClassicBuilder {
+    ctor public OobData.ClassicBuilder(@NonNull byte[], @NonNull byte[], @NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData build();
+    method @NonNull public android.bluetooth.OobData.ClassicBuilder setClassOfDevice(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.ClassicBuilder setDeviceName(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.ClassicBuilder setRandomizerHash(@NonNull byte[]);
+  }
+
+  public static final class OobData.LeBuilder {
+    ctor public OobData.LeBuilder(@NonNull byte[], @NonNull byte[], int);
+    method @NonNull public android.bluetooth.OobData build();
+    method @NonNull public android.bluetooth.OobData.LeBuilder setDeviceName(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.LeBuilder setLeFlags(int);
+    method @NonNull public android.bluetooth.OobData.LeBuilder setLeTemporaryKey(@NonNull byte[]);
+    method @NonNull public android.bluetooth.OobData.LeBuilder setRandomizerHash(@NonNull byte[]);
+  }
+
+}
+
+package android.bluetooth.le {
+
+  public final class BluetoothLeScanner {
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(android.os.WorkSource, android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.UPDATE_DEVICE_STATS}) public void startScanFromSource(java.util.List<android.bluetooth.le.ScanFilter>, android.bluetooth.le.ScanSettings, android.os.WorkSource, android.bluetooth.le.ScanCallback);
+    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN) public void startTruncatedScan(java.util.List<android.bluetooth.le.TruncatedFilter>, android.bluetooth.le.ScanSettings, android.bluetooth.le.ScanCallback);
+  }
+
+  public final class ResultStorageDescriptor implements android.os.Parcelable {
+    ctor public ResultStorageDescriptor(int, int, int);
+    method public int describeContents();
+    method public int getLength();
+    method public int getOffset();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.bluetooth.le.ResultStorageDescriptor> CREATOR;
+  }
+
+  public final class ScanFilter implements android.os.Parcelable {
+    method public int getAddressType();
+    method @Nullable public byte[] getIrk();
+  }
+
+  public static final class ScanFilter.Builder {
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(@NonNull String, int);
+    method @NonNull public android.bluetooth.le.ScanFilter.Builder setDeviceAddress(@NonNull String, int, @NonNull byte[]);
+    field public static final int LEN_IRK_OCTETS = 16; // 0x10
+  }
+
+  public final class ScanSettings implements android.os.Parcelable {
+    field public static final int SCAN_MODE_AMBIENT_DISCOVERY = 3; // 0x3
+    field public static final int SCAN_RESULT_TYPE_ABBREVIATED = 1; // 0x1
+    field public static final int SCAN_RESULT_TYPE_FULL = 0; // 0x0
+  }
+
+  public static final class ScanSettings.Builder {
+    method public android.bluetooth.le.ScanSettings.Builder setScanResultType(int);
+  }
+
+  public final class TruncatedFilter {
+    ctor public TruncatedFilter(android.bluetooth.le.ScanFilter, java.util.List<android.bluetooth.le.ResultStorageDescriptor>);
+    method public android.bluetooth.le.ScanFilter getFilter();
+    method public java.util.List<android.bluetooth.le.ResultStorageDescriptor> getStorageDescriptors();
+  }
+
+}
+
+package android.companion {
+
+  public final class CompanionDeviceManager {
+    method @RequiresPermission(android.Manifest.permission.ASSOCIATE_COMPANION_DEVICES) public void associate(@NonNull String, @NonNull android.net.MacAddress, @NonNull byte[]);
+    method @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public boolean canPairWithoutPrompt(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public boolean isDeviceAssociatedForWifiConnection(@NonNull String, @NonNull android.net.MacAddress, @NonNull android.os.UserHandle);
+  }
+
+}
+
+package android.content {
+
+  public class ApexEnvironment {
+    method @NonNull public static android.content.ApexEnvironment getApexEnvironment(@NonNull String);
+    method @NonNull public java.io.File getCredentialProtectedDataDirForUser(@NonNull android.os.UserHandle);
+    method @NonNull public java.io.File getDeviceProtectedDataDir();
+    method @NonNull public java.io.File getDeviceProtectedDataDirForUser(@NonNull android.os.UserHandle);
+  }
+
+  public final class AttributionSource implements android.os.Parcelable {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public java.util.Set<java.lang.String> getRenouncedPermissions();
+  }
+
+  public static final class AttributionSource.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public android.content.AttributionSource.Builder setRenouncedPermissions(@Nullable java.util.Set<java.lang.String>);
+  }
+
+  public abstract class BroadcastReceiver {
+    method @NonNull public final android.os.UserHandle getSendingUser();
+  }
+
+  public class ClipboardManager extends android.text.ClipboardManager {
+    method @RequiresPermission(android.Manifest.permission.SET_CLIP_SOURCE) public void setPrimaryClipAsPackage(@NonNull android.content.ClipData, @NonNull String);
+  }
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method public int checkUriPermission(@NonNull android.net.Uri, int, int);
+  }
+
+  public class ContentProviderClient implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.REMOVE_TASKS) public void setDetectNotResponding(long);
+  }
+
+  public abstract class ContentResolver {
+    method public int checkUriPermission(@NonNull android.net.Uri, int, int);
+    method @NonNull public static android.net.Uri decodeFromFile(@NonNull java.io.File);
+    method @NonNull public static java.io.File encodeToFile(@NonNull android.net.Uri);
+    method @Nullable @RequiresPermission("android.permission.CACHE_CONTENT") public android.os.Bundle getCache(@NonNull android.net.Uri);
+    method @RequiresPermission("android.permission.CACHE_CONTENT") public void putCache(@NonNull android.net.Uri, @Nullable android.os.Bundle);
+  }
+
+  public abstract class Context {
+    method @NonNull public android.content.Context createContextAsUser(@NonNull android.os.UserHandle, int);
+    method public abstract android.content.Context createCredentialProtectedStorageContext();
+    method @NonNull public android.content.Context createPackageContextAsUser(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Nullable public abstract java.io.File getPreloadsFileCache();
+    method public abstract boolean isCredentialProtectedStorage();
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public android.content.Intent registerReceiverForAllUsers(@Nullable android.content.BroadcastReceiver, @NonNull android.content.IntentFilter, @Nullable String, @Nullable android.os.Handler);
+    method public abstract void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public abstract void sendBroadcastAsUser(@RequiresPermission android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.os.Bundle);
+    method public abstract void sendOrderedBroadcast(@NonNull android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public void startActivityAsUser(@NonNull @RequiresPermission android.content.Intent, @NonNull android.os.UserHandle);
+    field public static final String APP_HIBERNATION_SERVICE = "app_hibernation";
+    field public static final String APP_INTEGRITY_SERVICE = "app_integrity";
+    field public static final String APP_PREDICTION_SERVICE = "app_prediction";
+    field public static final String BACKUP_SERVICE = "backup";
+    field public static final String BATTERY_STATS_SERVICE = "batterystats";
+    field public static final int BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS = 1048576; // 0x100000
+    field public static final int BIND_ALLOW_FOREGROUND_SERVICE_STARTS_FROM_BACKGROUND = 262144; // 0x40000
+    field public static final String CONTENT_SUGGESTIONS_SERVICE = "content_suggestions";
+    field public static final String CONTEXTHUB_SERVICE = "contexthub";
+    field public static final String ETHERNET_SERVICE = "ethernet";
+    field public static final String EUICC_CARD_SERVICE = "euicc_card";
+    field public static final String FONT_SERVICE = "font";
+    field public static final String HDMI_CONTROL_SERVICE = "hdmi_control";
+    field public static final String MEDIA_TRANSCODING_SERVICE = "media_transcoding";
+    field public static final String MUSIC_RECOGNITION_SERVICE = "music_recognition";
+    field public static final String NETD_SERVICE = "netd";
+    field public static final String NETWORK_SCORE_SERVICE = "network_score";
+    field public static final String OEM_LOCK_SERVICE = "oem_lock";
+    field public static final String PERMISSION_CONTROLLER_SERVICE = "permission_controller";
+    field public static final String PERMISSION_SERVICE = "permission";
+    field public static final String PERSISTENT_DATA_BLOCK_SERVICE = "persistent_data_block";
+    field public static final String REBOOT_READINESS_SERVICE = "reboot_readiness";
+    field public static final String ROLLBACK_SERVICE = "rollback";
+    field public static final String SEARCH_UI_SERVICE = "search_ui";
+    field public static final String SECURE_ELEMENT_SERVICE = "secure_element";
+    field public static final String SMARTSPACE_SERVICE = "smartspace";
+    field public static final String STATS_MANAGER = "stats";
+    field public static final String STATUS_BAR_SERVICE = "statusbar";
+    field public static final String SYSTEM_CONFIG_SERVICE = "system_config";
+    field public static final String SYSTEM_UPDATE_SERVICE = "system_update";
+    field public static final String TETHERING_SERVICE = "tethering";
+    field public static final String TRANSLATION_MANAGER_SERVICE = "translation";
+    field public static final String UI_TRANSLATION_SERVICE = "ui_translation";
+    field public static final String VR_SERVICE = "vrmanager";
+    field public static final String WIFI_NL80211_SERVICE = "wifinl80211";
+    field @Deprecated public static final String WIFI_RTT_SERVICE = "rttmanager";
+    field public static final String WIFI_SCANNING_SERVICE = "wifiscanner";
+  }
+
+  public final class ContextParams {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public java.util.Set<java.lang.String> getRenouncedPermissions();
+  }
+
+  public static final class ContextParams.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RENOUNCE_PERMISSIONS) public android.content.ContextParams.Builder setRenouncedPermissions(@Nullable java.util.Set<java.lang.String>);
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    method public android.content.Context createCredentialProtectedStorageContext();
+    method @Nullable public java.io.File getPreloadsFileCache();
+    method public boolean isCredentialProtectedStorage();
+    method public void sendBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendBroadcastAsUser(android.content.Intent, android.os.UserHandle, @Nullable String, @Nullable android.os.Bundle);
+    method public void sendOrderedBroadcast(android.content.Intent, @Nullable String, @Nullable android.os.Bundle, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, @Nullable String, @Nullable android.os.Bundle);
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field public static final String ACTION_ACTIVITY_RECOGNIZER = "android.intent.action.ACTIVITY_RECOGNIZER";
+    field public static final String ACTION_BATTERY_LEVEL_CHANGED = "android.intent.action.BATTERY_LEVEL_CHANGED";
+    field public static final String ACTION_CALL_EMERGENCY = "android.intent.action.CALL_EMERGENCY";
+    field public static final String ACTION_CALL_PRIVILEGED = "android.intent.action.CALL_PRIVILEGED";
+    field public static final String ACTION_DEVICE_CUSTOMIZATION_READY = "android.intent.action.DEVICE_CUSTOMIZATION_READY";
+    field public static final String ACTION_DIAL_EMERGENCY = "android.intent.action.DIAL_EMERGENCY";
+    field public static final String ACTION_DOMAINS_NEED_VERIFICATION = "android.intent.action.DOMAINS_NEED_VERIFICATION";
+    field public static final String ACTION_FACTORY_RESET = "android.intent.action.FACTORY_RESET";
+    field public static final String ACTION_GLOBAL_BUTTON = "android.intent.action.GLOBAL_BUTTON";
+    field public static final String ACTION_INCIDENT_REPORT_READY = "android.intent.action.INCIDENT_REPORT_READY";
+    field public static final String ACTION_INSTALL_INSTANT_APP_PACKAGE = "android.intent.action.INSTALL_INSTANT_APP_PACKAGE";
+    field public static final String ACTION_INSTANT_APP_RESOLVER_SETTINGS = "android.intent.action.INSTANT_APP_RESOLVER_SETTINGS";
+    field @Deprecated public static final String ACTION_INTENT_FILTER_NEEDS_VERIFICATION = "android.intent.action.INTENT_FILTER_NEEDS_VERIFICATION";
+    field public static final String ACTION_LOAD_DATA = "android.intent.action.LOAD_DATA";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_MANAGE_APP_PERMISSION = "android.intent.action.MANAGE_APP_PERMISSION";
+    field public static final String ACTION_MANAGE_APP_PERMISSIONS = "android.intent.action.MANAGE_APP_PERMISSIONS";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public static final String ACTION_MANAGE_DEFAULT_APP = "android.intent.action.MANAGE_DEFAULT_APP";
+    field public static final String ACTION_MANAGE_PERMISSIONS = "android.intent.action.MANAGE_PERMISSIONS";
+    field public static final String ACTION_MANAGE_PERMISSION_APPS = "android.intent.action.MANAGE_PERMISSION_APPS";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public static final String ACTION_MANAGE_SPECIAL_APP_ACCESSES = "android.intent.action.MANAGE_SPECIAL_APP_ACCESSES";
+    field public static final String ACTION_MASTER_CLEAR_NOTIFICATION = "android.intent.action.MASTER_CLEAR_NOTIFICATION";
+    field public static final String ACTION_PACKAGE_NEEDS_INTEGRITY_VERIFICATION = "android.intent.action.PACKAGE_NEEDS_INTEGRITY_VERIFICATION";
+    field public static final String ACTION_PACKAGE_UNSUSPENDED_MANUALLY = "android.intent.action.PACKAGE_UNSUSPENDED_MANUALLY";
+    field public static final String ACTION_PENDING_INCIDENT_REPORTS_CHANGED = "android.intent.action.PENDING_INCIDENT_REPORTS_CHANGED";
+    field public static final String ACTION_PRE_BOOT_COMPLETED = "android.intent.action.PRE_BOOT_COMPLETED";
+    field public static final String ACTION_QUERY_PACKAGE_RESTART = "android.intent.action.QUERY_PACKAGE_RESTART";
+    field public static final String ACTION_RESOLVE_INSTANT_APP_PACKAGE = "android.intent.action.RESOLVE_INSTANT_APP_PACKAGE";
+    field @RequiresPermission(android.Manifest.permission.REVIEW_ACCESSIBILITY_SERVICES) public static final String ACTION_REVIEW_ACCESSIBILITY_SERVICES = "android.intent.action.REVIEW_ACCESSIBILITY_SERVICES";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_ONGOING_PERMISSION_USAGE = "android.intent.action.REVIEW_ONGOING_PERMISSION_USAGE";
+    field public static final String ACTION_REVIEW_PERMISSIONS = "android.intent.action.REVIEW_PERMISSIONS";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_PERMISSION_HISTORY = "android.intent.action.REVIEW_PERMISSION_HISTORY";
+    field @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public static final String ACTION_REVIEW_PERMISSION_USAGE = "android.intent.action.REVIEW_PERMISSION_USAGE";
+    field public static final String ACTION_ROLLBACK_COMMITTED = "android.intent.action.ROLLBACK_COMMITTED";
+    field public static final String ACTION_SHOW_SUSPENDED_APP_DETAILS = "android.intent.action.SHOW_SUSPENDED_APP_DETAILS";
+    field @Deprecated public static final String ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED";
+    field public static final String ACTION_SPLIT_CONFIGURATION_CHANGED = "android.intent.action.SPLIT_CONFIGURATION_CHANGED";
+    field public static final String ACTION_UPGRADE_SETUP = "android.intent.action.UPGRADE_SETUP";
+    field public static final String ACTION_USER_ADDED = "android.intent.action.USER_ADDED";
+    field public static final String ACTION_USER_REMOVED = "android.intent.action.USER_REMOVED";
+    field public static final String ACTION_VOICE_ASSIST = "android.intent.action.VOICE_ASSIST";
+    field public static final String CATEGORY_LEANBACK_SETTINGS = "android.intent.category.LEANBACK_SETTINGS";
+    field public static final String EXTRA_CALLING_PACKAGE = "android.intent.extra.CALLING_PACKAGE";
+    field public static final String EXTRA_FORCE_FACTORY_RESET = "android.intent.extra.FORCE_FACTORY_RESET";
+    field public static final String EXTRA_INSTANT_APP_ACTION = "android.intent.extra.INSTANT_APP_ACTION";
+    field public static final String EXTRA_INSTANT_APP_BUNDLES = "android.intent.extra.INSTANT_APP_BUNDLES";
+    field public static final String EXTRA_INSTANT_APP_EXTRAS = "android.intent.extra.INSTANT_APP_EXTRAS";
+    field public static final String EXTRA_INSTANT_APP_FAILURE = "android.intent.extra.INSTANT_APP_FAILURE";
+    field public static final String EXTRA_INSTANT_APP_HOSTNAME = "android.intent.extra.INSTANT_APP_HOSTNAME";
+    field public static final String EXTRA_INSTANT_APP_SUCCESS = "android.intent.extra.INSTANT_APP_SUCCESS";
+    field public static final String EXTRA_INSTANT_APP_TOKEN = "android.intent.extra.INSTANT_APP_TOKEN";
+    field public static final String EXTRA_LONG_VERSION_CODE = "android.intent.extra.LONG_VERSION_CODE";
+    field public static final String EXTRA_ORIGINATING_UID = "android.intent.extra.ORIGINATING_UID";
+    field public static final String EXTRA_PACKAGES = "android.intent.extra.PACKAGES";
+    field public static final String EXTRA_PERMISSION_NAME = "android.intent.extra.PERMISSION_NAME";
+    field public static final String EXTRA_REASON = "android.intent.extra.REASON";
+    field public static final String EXTRA_REMOTE_CALLBACK = "android.intent.extra.REMOTE_CALLBACK";
+    field public static final String EXTRA_RESULT_NEEDED = "android.intent.extra.RESULT_NEEDED";
+    field public static final String EXTRA_ROLE_NAME = "android.intent.extra.ROLE_NAME";
+    field public static final String EXTRA_UNKNOWN_INSTANT_APP = "android.intent.extra.UNKNOWN_INSTANT_APP";
+    field public static final String EXTRA_VERIFICATION_BUNDLE = "android.intent.extra.VERIFICATION_BUNDLE";
+    field public static final int FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT = 67108864; // 0x4000000
+    field public static final String METADATA_SETUP_VERSION = "android.SETUP_VERSION";
+  }
+
+  public class IntentFilter implements android.os.Parcelable {
+    method public final int getOrder();
+    method public final void setOrder(int);
+  }
+
+}
+
+package android.content.integrity {
+
+  public class AppIntegrityManager {
+    method @NonNull public String getCurrentRuleSetProvider();
+    method @NonNull public String getCurrentRuleSetVersion();
+    method public void updateRuleSet(@NonNull android.content.integrity.RuleSet, @NonNull android.content.IntentSender);
+    field public static final String EXTRA_STATUS = "android.content.integrity.extra.STATUS";
+    field public static final int STATUS_FAILURE = 1; // 0x1
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public abstract class IntegrityFormula {
+    method @NonNull public static android.content.integrity.IntegrityFormula all(@NonNull android.content.integrity.IntegrityFormula...);
+    method @NonNull public static android.content.integrity.IntegrityFormula any(@NonNull android.content.integrity.IntegrityFormula...);
+    method @NonNull public static android.content.integrity.IntegrityFormula not(@NonNull android.content.integrity.IntegrityFormula);
+  }
+
+  public static final class IntegrityFormula.Application {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula isPreInstalled();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeEquals(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThan(@NonNull long);
+    method @NonNull public static android.content.integrity.IntegrityFormula versionCodeGreaterThanOrEqualTo(@NonNull long);
+  }
+
+  public static final class IntegrityFormula.Installer {
+    method @NonNull public static android.content.integrity.IntegrityFormula certificatesContain(@NonNull String);
+    method @NonNull public static android.content.integrity.IntegrityFormula notAllowedByManifest();
+    method @NonNull public static android.content.integrity.IntegrityFormula packageNameEquals(@NonNull String);
+  }
+
+  public static final class IntegrityFormula.SourceStamp {
+    method @NonNull public static android.content.integrity.IntegrityFormula notTrusted();
+    method @NonNull public static android.content.integrity.IntegrityFormula stampCertificateHashEquals(@NonNull String);
+  }
+
+  public final class Rule implements android.os.Parcelable {
+    ctor public Rule(@NonNull android.content.integrity.IntegrityFormula, int);
+    method public int describeContents();
+    method public int getEffect();
+    method @NonNull public android.content.integrity.IntegrityFormula getFormula();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.integrity.Rule> CREATOR;
+    field public static final int DENY = 0; // 0x0
+    field public static final int FORCE_ALLOW = 1; // 0x1
+  }
+
+  public class RuleSet {
+    method @NonNull public java.util.List<android.content.integrity.Rule> getRules();
+    method @NonNull public String getVersion();
+  }
+
+  public static class RuleSet.Builder {
+    ctor public RuleSet.Builder();
+    method @NonNull public android.content.integrity.RuleSet.Builder addRules(@NonNull java.util.List<android.content.integrity.Rule>);
+    method @NonNull public android.content.integrity.RuleSet build();
+    method @NonNull public android.content.integrity.RuleSet.Builder setVersion(@NonNull String);
+  }
+
+}
+
+package android.content.om {
+
+  public final class OverlayInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getCategory();
+    method @NonNull public String getPackageName();
+    method @Nullable public String getTargetOverlayableName();
+    method @NonNull public String getTargetPackageName();
+    method public int getUserId();
+    method public boolean isEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.om.OverlayInfo> CREATOR;
+  }
+
+  public class OverlayManager {
+    method @Nullable public android.content.om.OverlayInfo getOverlayInfo(@NonNull String, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public java.util.List<android.content.om.OverlayInfo> getOverlayInfosForTarget(@NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public void setEnabled(@NonNull String, boolean, @NonNull android.os.UserHandle) throws java.lang.IllegalStateException, java.lang.SecurityException;
+    method @RequiresPermission(anyOf={"android.permission.INTERACT_ACROSS_USERS", "android.permission.INTERACT_ACROSS_USERS_FULL"}) public void setEnabledExclusiveInCategory(@NonNull String, @NonNull android.os.UserHandle) throws java.lang.IllegalStateException, java.lang.SecurityException;
+  }
+
+}
+
+package android.content.pm {
+
+  public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    method public boolean isEncryptionAware();
+    method public boolean isInstantApp();
+    method public boolean isOem();
+    method public boolean isProduct();
+    method public boolean isVendor();
+    field public String credentialProtectedDataDir;
+    field public int targetSandboxVersion;
+  }
+
+  public class CrossProfileApps {
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_PROFILES) public void startActivity(@NonNull android.content.ComponentName, @NonNull android.os.UserHandle);
+  }
+
+  public class DataLoaderParams {
+    method @NonNull public static final android.content.pm.DataLoaderParams forIncremental(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public static final android.content.pm.DataLoaderParams forStreaming(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public final String getArguments();
+    method @NonNull public final android.content.ComponentName getComponentName();
+    method @NonNull public final int getType();
+  }
+
+  public final class InstallationFile {
+    method public long getLengthBytes();
+    method public int getLocation();
+    method @Nullable public byte[] getMetadata();
+    method @NonNull public String getName();
+    method @Nullable public byte[] getSignature();
+  }
+
+  public final class InstantAppInfo implements android.os.Parcelable {
+    ctor public InstantAppInfo(android.content.pm.ApplicationInfo, String[], String[]);
+    ctor public InstantAppInfo(String, CharSequence, String[], String[]);
+    method public int describeContents();
+    method @Nullable public android.content.pm.ApplicationInfo getApplicationInfo();
+    method @Nullable public String[] getGrantedPermissions();
+    method @NonNull public String getPackageName();
+    method @Nullable public String[] getRequestedPermissions();
+    method @NonNull public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.pm.PackageManager);
+    method @NonNull public CharSequence loadLabel(@NonNull android.content.pm.PackageManager);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppInfo> CREATOR;
+  }
+
+  public final class InstantAppIntentFilter implements android.os.Parcelable {
+    ctor public InstantAppIntentFilter(@Nullable String, @NonNull java.util.List<android.content.IntentFilter>);
+    method public int describeContents();
+    method public java.util.List<android.content.IntentFilter> getFilters();
+    method public String getSplitName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppIntentFilter> CREATOR;
+  }
+
+  public final class InstantAppRequestInfo implements android.os.Parcelable {
+    ctor public InstantAppRequestInfo(@NonNull android.content.Intent, @Nullable int[], @NonNull android.os.UserHandle, boolean, @NonNull String);
+    method public int describeContents();
+    method @Nullable public int[] getHostDigestPrefix();
+    method @NonNull public android.content.Intent getIntent();
+    method @NonNull public String getToken();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public boolean isRequesterInstantApp();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppRequestInfo> CREATOR;
+  }
+
+  public final class InstantAppResolveInfo implements android.os.Parcelable {
+    ctor public InstantAppResolveInfo(@NonNull android.content.pm.InstantAppResolveInfo.InstantAppDigest, @Nullable String, @Nullable java.util.List<android.content.pm.InstantAppIntentFilter>, int);
+    ctor public InstantAppResolveInfo(@NonNull android.content.pm.InstantAppResolveInfo.InstantAppDigest, @Nullable String, @Nullable java.util.List<android.content.pm.InstantAppIntentFilter>, long, @Nullable android.os.Bundle);
+    ctor public InstantAppResolveInfo(@NonNull String, @Nullable String, @Nullable java.util.List<android.content.pm.InstantAppIntentFilter>);
+    ctor public InstantAppResolveInfo(@Nullable android.os.Bundle);
+    method public int describeContents();
+    method public byte[] getDigestBytes();
+    method public int getDigestPrefix();
+    method @Nullable public android.os.Bundle getExtras();
+    method public java.util.List<android.content.pm.InstantAppIntentFilter> getIntentFilters();
+    method public long getLongVersionCode();
+    method public String getPackageName();
+    method @Deprecated public int getVersionCode();
+    method public boolean shouldLetInstallerDecide();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo> CREATOR;
+  }
+
+  public static final class InstantAppResolveInfo.InstantAppDigest implements android.os.Parcelable {
+    ctor public InstantAppResolveInfo.InstantAppDigest(@NonNull String);
+    method public int describeContents();
+    method public byte[][] getDigestBytes();
+    method public int[] getDigestPrefix();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstantAppResolveInfo.InstantAppDigest> CREATOR;
+    field public static final android.content.pm.InstantAppResolveInfo.InstantAppDigest UNDEFINED;
+  }
+
+  public final class IntentFilterVerificationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.Set<java.lang.String> getDomains();
+    method public String getPackageName();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.IntentFilterVerificationInfo> CREATOR;
+  }
+
+  public class LauncherApps {
+    method @Nullable public android.content.pm.LauncherApps.AppUsageLimit getAppUsageLimit(@NonNull String, @NonNull android.os.UserHandle);
+  }
+
+  public static final class LauncherApps.AppUsageLimit implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getTotalUsageLimit();
+    method public long getUsageRemaining();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.LauncherApps.AppUsageLimit> CREATOR;
+  }
+
+  public static class LauncherApps.ShortcutQuery {
+    field @RequiresPermission(android.Manifest.permission.ACCESS_SHORTCUTS) public static final int FLAG_GET_PERSONS_DATA = 2048; // 0x800
+  }
+
+  public class PackageInstaller {
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setPermissionsResult(int, boolean);
+    field public static final int DATA_LOADER_TYPE_INCREMENTAL = 2; // 0x2
+    field public static final int DATA_LOADER_TYPE_NONE = 0; // 0x0
+    field public static final int DATA_LOADER_TYPE_STREAMING = 1; // 0x1
+    field public static final String EXTRA_DATA_LOADER_TYPE = "android.content.pm.extra.DATA_LOADER_TYPE";
+    field public static final int LOCATION_DATA_APP = 0; // 0x0
+    field public static final int LOCATION_MEDIA_DATA = 2; // 0x2
+    field public static final int LOCATION_MEDIA_OBB = 1; // 0x1
+  }
+
+  public static class PackageInstaller.Session implements java.io.Closeable {
+    method @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public void addFile(int, @NonNull String, long, @NonNull byte[], @Nullable byte[]);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void commitTransferred(@NonNull android.content.IntentSender);
+    method @Nullable @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public android.content.pm.DataLoaderParams getDataLoaderParams();
+    method @RequiresPermission("com.android.permission.USE_INSTALLER_V2") public void removeFile(int, @NonNull String);
+  }
+
+  public static class PackageInstaller.SessionInfo implements android.os.Parcelable {
+    method public boolean getAllocateAggressive();
+    method @Deprecated public boolean getAllowDowngrade();
+    method public int getAutoRevokePermissionsMode();
+    method public boolean getDontKillApp();
+    method public boolean getEnableRollback();
+    method @Nullable public String[] getGrantedRuntimePermissions();
+    method public boolean getInstallAsFullApp(boolean);
+    method public boolean getInstallAsInstantApp(boolean);
+    method public boolean getInstallAsVirtualPreload();
+    method public boolean getRequestDowngrade();
+    method public int getRollbackDataPolicy();
+    method @NonNull public java.util.Set<java.lang.String> getWhitelistedRestrictedPermissions();
+  }
+
+  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public void setAllocateAggressive(boolean);
+    method @Deprecated public void setAllowDowngrade(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.INSTALL_PACKAGES, "com.android.permission.USE_INSTALLER_V2"}) public void setDataLoaderParams(@NonNull android.content.pm.DataLoaderParams);
+    method public void setDontKillApp(boolean);
+    method public void setEnableRollback(boolean);
+    method public void setEnableRollback(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS) public void setGrantedRuntimePermissions(String[]);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setInstallAsApex();
+    method public void setInstallAsInstantApp(boolean);
+    method public void setInstallAsVirtualPreload();
+    method public void setRequestDowngrade(boolean);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged();
+  }
+
+  public class PackageItemInfo {
+    method public static void forceSafeLabels();
+    method @Deprecated @NonNull public CharSequence loadSafeLabel(@NonNull android.content.pm.PackageManager);
+    method @NonNull public CharSequence loadSafeLabel(@NonNull android.content.pm.PackageManager, @FloatRange(from=0) float, int);
+  }
+
+  public abstract class PackageManager {
+    method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void addOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public abstract boolean arePermissionsIndividuallyControlled();
+    method @NonNull public abstract java.util.List<android.content.IntentFilter> getAllIntentFilters(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.pm.ApplicationInfo getApplicationInfoAsUser(@NonNull String, int, @NonNull android.os.UserHandle) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull public android.content.pm.dex.ArtManager getArtManager();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_SHARED_LIBRARIES) public java.util.List<android.content.pm.SharedLibraryInfo> getDeclaredSharedLibraries(@NonNull String, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract String getDefaultBrowserPackageNameAsUser(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.SET_HARMFUL_APP_WARNINGS) public CharSequence getHarmfulAppWarning(@NonNull String);
+    method @Nullable public String getIncidentReportApproverPackageName();
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackagesAsUser(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_INSTANT_APPS) public abstract android.graphics.drawable.Drawable getInstantAppIcon(String);
+    method @Nullable public abstract android.content.ComponentName getInstantAppInstallerComponent();
+    method @Nullable public abstract android.content.ComponentName getInstantAppResolverSettingsComponent();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_INSTANT_APPS) public abstract java.util.List<android.content.pm.InstantAppInfo> getInstantApps();
+    method @Deprecated @NonNull public abstract java.util.List<android.content.pm.IntentFilterVerificationInfo> getIntentFilterVerifications(@NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public abstract int getIntentVerificationStatusAsUser(@NonNull String, int);
+    method @android.content.pm.PackageManager.PermissionFlags @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS, android.Manifest.permission.GET_RUNTIME_PERMISSIONS}) public abstract int getPermissionFlags(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] getUnsuspendablePackages(@NonNull String[]);
+    method @RequiresPermission(android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS) public abstract void grantRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @Deprecated public abstract int installExistingPackage(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @Deprecated public abstract int installExistingPackage(@NonNull String, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceiversAsUser(@NonNull android.content.Intent, int, android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryIntentActivitiesAsUser(@NonNull android.content.Intent, int, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryIntentContentProvidersAsUser(@NonNull android.content.Intent, int, @NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public java.util.List<android.content.pm.ResolveInfo> queryIntentServicesAsUser(@NonNull android.content.Intent, int, @NonNull android.os.UserHandle);
+    method public abstract void registerDexModule(@NonNull String, @Nullable android.content.pm.PackageManager.DexModuleRegisterCallback);
+    method @RequiresPermission("android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS") public abstract void removeOnPermissionsChangeListener(@NonNull android.content.pm.PackageManager.OnPermissionsChangedListener);
+    method public void replacePreferredActivity(@NonNull android.content.IntentFilter, int, @NonNull java.util.List<android.content.ComponentName>, @NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public abstract void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String, @NonNull android.os.UserHandle, @NonNull String);
+    method public void sendDeviceCustomizationReadyBroadcast();
+    method @RequiresPermission(allOf={android.Manifest.permission.SET_PREFERRED_APPLICATIONS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public abstract boolean setDefaultBrowserPackageNameAsUser(@Nullable String, int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setDistractingPackageRestrictions(@NonNull String[], int);
+    method @RequiresPermission(android.Manifest.permission.SET_HARMFUL_APP_WARNINGS) public void setHarmfulAppWarning(@NonNull String, @Nullable CharSequence);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setPackagesSuspended(@Nullable String[], boolean, @Nullable android.os.PersistableBundle, @Nullable android.os.PersistableBundle, @Nullable String);
+    method @Nullable @RequiresPermission(android.Manifest.permission.SUSPEND_APPS) public String[] setPackagesSuspended(@Nullable String[], boolean, @Nullable android.os.PersistableBundle, @Nullable android.os.PersistableBundle, @Nullable android.content.pm.SuspendDialogInfo);
+    method @RequiresPermission(value=android.Manifest.permission.CHANGE_COMPONENT_ENABLED_STATE, conditional=true) public void setSyntheticAppDetailsActivityEnabled(@NonNull String, boolean);
+    method public void setSystemAppState(@NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public abstract void setUpdateAvailable(@NonNull String, boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.SET_PREFERRED_APPLICATIONS) public abstract boolean updateIntentVerificationStatusAsUser(@NonNull String, int, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS}) public abstract void updatePermissionFlags(@NonNull String, @NonNull String, @android.content.pm.PackageManager.PermissionFlags int, @android.content.pm.PackageManager.PermissionFlags int, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.INTENT_FILTER_VERIFICATION_AGENT) public abstract void verifyIntentFilter(int, int, @NonNull java.util.List<java.lang.String>);
+    field public static final String ACTION_REQUEST_PERMISSIONS = "android.content.pm.action.REQUEST_PERMISSIONS";
+    field public static final String EXTRA_REQUEST_PERMISSIONS_NAMES = "android.content.pm.extra.REQUEST_PERMISSIONS_NAMES";
+    field public static final String EXTRA_REQUEST_PERMISSIONS_RESULTS = "android.content.pm.extra.REQUEST_PERMISSIONS_RESULTS";
+    field public static final String FEATURE_BROADCAST_RADIO = "android.hardware.broadcastradio";
+    field public static final String FEATURE_CONTEXT_HUB = "android.hardware.context_hub";
+    field public static final String FEATURE_INCREMENTAL_DELIVERY = "android.software.incremental_delivery";
+    field public static final String FEATURE_REBOOT_ESCROW = "android.hardware.reboot_escrow";
+    field public static final String FEATURE_TELEPHONY_CARRIERLOCK = "android.hardware.telephony.carrierlock";
+    field public static final String FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION = "android.hardware.telephony.ims.singlereg";
+    field public static final int FLAGS_PERMISSION_RESERVED_PERMISSION_CONTROLLER = -268435456; // 0xf0000000
+    field public static final int FLAG_PERMISSION_APPLY_RESTRICTION = 16384; // 0x4000
+    field public static final int FLAG_PERMISSION_AUTO_REVOKED = 131072; // 0x20000
+    field public static final int FLAG_PERMISSION_GRANTED_BY_DEFAULT = 32; // 0x20
+    field public static final int FLAG_PERMISSION_GRANTED_BY_ROLE = 32768; // 0x8000
+    field public static final int FLAG_PERMISSION_ONE_TIME = 65536; // 0x10000
+    field public static final int FLAG_PERMISSION_POLICY_FIXED = 4; // 0x4
+    field public static final int FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT = 2048; // 0x800
+    field public static final int FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT = 4096; // 0x1000
+    field public static final int FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT = 8192; // 0x2000
+    field public static final int FLAG_PERMISSION_REVIEW_REQUIRED = 64; // 0x40
+    field public static final int FLAG_PERMISSION_REVOKED_COMPAT = 8; // 0x8
+    field @Deprecated public static final int FLAG_PERMISSION_REVOKE_ON_UPGRADE = 8; // 0x8
+    field public static final int FLAG_PERMISSION_REVOKE_WHEN_REQUESTED = 128; // 0x80
+    field public static final int FLAG_PERMISSION_SELECTED_LOCATION_ACCURACY = 524288; // 0x80000
+    field public static final int FLAG_PERMISSION_SYSTEM_FIXED = 16; // 0x10
+    field public static final int FLAG_PERMISSION_USER_FIXED = 2; // 0x2
+    field public static final int FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED = 512; // 0x200
+    field public static final int FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED = 256; // 0x100
+    field public static final int FLAG_PERMISSION_USER_SET = 1; // 0x1
+    field public static final int INSTALL_FAILED_ALREADY_EXISTS = -1; // 0xffffffff
+    field public static final int INSTALL_FAILED_CONFLICTING_PROVIDER = -13; // 0xfffffff3
+    field public static final int INSTALL_FAILED_CONTAINER_ERROR = -18; // 0xffffffee
+    field public static final int INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16; // 0xfffffff0
+    field public static final int INSTALL_FAILED_DEXOPT = -11; // 0xfffffff5
+    field public static final int INSTALL_FAILED_DUPLICATE_PACKAGE = -5; // 0xfffffffb
+    field public static final int INSTALL_FAILED_INSUFFICIENT_STORAGE = -4; // 0xfffffffc
+    field public static final int INSTALL_FAILED_INTERNAL_ERROR = -110; // 0xffffff92
+    field public static final int INSTALL_FAILED_INVALID_APK = -2; // 0xfffffffe
+    field public static final int INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19; // 0xffffffed
+    field public static final int INSTALL_FAILED_INVALID_URI = -3; // 0xfffffffd
+    field public static final int INSTALL_FAILED_MEDIA_UNAVAILABLE = -20; // 0xffffffec
+    field public static final int INSTALL_FAILED_MISSING_FEATURE = -17; // 0xffffffef
+    field public static final int INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9; // 0xfffffff7
+    field public static final int INSTALL_FAILED_NEWER_SDK = -14; // 0xfffffff2
+    field public static final int INSTALL_FAILED_NO_SHARED_USER = -6; // 0xfffffffa
+    field public static final int INSTALL_FAILED_OLDER_SDK = -12; // 0xfffffff4
+    field public static final int INSTALL_FAILED_PACKAGE_CHANGED = -23; // 0xffffffe9
+    field public static final int INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26; // 0xffffffe6
+    field public static final int INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10; // 0xfffffff6
+    field public static final int INSTALL_FAILED_SANDBOX_VERSION_DOWNGRADE = -27; // 0xffffffe5
+    field public static final int INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8; // 0xfffffff8
+    field public static final int INSTALL_FAILED_TEST_ONLY = -15; // 0xfffffff1
+    field public static final int INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7; // 0xfffffff9
+    field public static final int INSTALL_FAILED_VERIFICATION_FAILURE = -22; // 0xffffffea
+    field public static final int INSTALL_FAILED_VERIFICATION_TIMEOUT = -21; // 0xffffffeb
+    field public static final int INSTALL_PARSE_FAILED_BAD_MANIFEST = -101; // 0xffffff9b
+    field public static final int INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106; // 0xffffff96
+    field public static final int INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107; // 0xffffff95
+    field public static final int INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105; // 0xffffff97
+    field public static final int INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104; // 0xffffff98
+    field public static final int INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109; // 0xffffff93
+    field public static final int INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108; // 0xffffff94
+    field public static final int INSTALL_PARSE_FAILED_NOT_APK = -100; // 0xffffff9c
+    field public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103; // 0xffffff99
+    field public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102; // 0xffffff9a
+    field public static final int INSTALL_SUCCEEDED = 1; // 0x1
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS = 2; // 0x2
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK = 4; // 0x4
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK = 1; // 0x1
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER = 3; // 0x3
+    field @Deprecated public static final int INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED = 0; // 0x0
+    field @Deprecated public static final int INTENT_FILTER_VERIFICATION_FAILURE = -1; // 0xffffffff
+    field @Deprecated public static final int INTENT_FILTER_VERIFICATION_SUCCESS = 1; // 0x1
+    field @Deprecated public static final int MASK_PERMISSION_FLAGS = 255; // 0xff
+    field public static final int MATCH_ANY_USER = 4194304; // 0x400000
+    field public static final int MATCH_FACTORY_ONLY = 2097152; // 0x200000
+    field public static final int MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS = 536870912; // 0x20000000
+    field public static final int MATCH_INSTANT = 8388608; // 0x800000
+    field public static final int MODULE_APEX_NAME = 1; // 0x1
+    field public static final int RESTRICTION_HIDE_FROM_SUGGESTIONS = 1; // 0x1
+    field public static final int RESTRICTION_HIDE_NOTIFICATIONS = 2; // 0x2
+    field public static final int RESTRICTION_NONE = 0; // 0x0
+    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_HIDDEN = 0; // 0x0
+    field public static final int SYSTEM_APP_STATE_HIDDEN_UNTIL_INSTALLED_VISIBLE = 1; // 0x1
+    field public static final int SYSTEM_APP_STATE_INSTALLED = 2; // 0x2
+    field public static final int SYSTEM_APP_STATE_UNINSTALLED = 3; // 0x3
+  }
+
+  public abstract static class PackageManager.DexModuleRegisterCallback {
+    ctor public PackageManager.DexModuleRegisterCallback();
+    method public abstract void onDexModuleRegistered(String, boolean, String);
+  }
+
+  public static interface PackageManager.OnPermissionsChangedListener {
+    method public void onPermissionsChanged(int);
+  }
+
+  @IntDef(prefix={"FLAG_PERMISSION_"}, value={android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET, android.content.pm.PackageManager.FLAG_PERMISSION_USER_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_POLICY_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE, android.content.pm.PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_DEFAULT, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED, android.content.pm.PackageManager.FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT, android.content.pm.PackageManager.FLAG_PERMISSION_APPLY_RESTRICTION, android.content.pm.PackageManager.FLAG_PERMISSION_GRANTED_BY_ROLE, android.content.pm.PackageManager.FLAG_PERMISSION_REVOKED_COMPAT, android.content.pm.PackageManager.FLAG_PERMISSION_ONE_TIME, android.content.pm.PackageManager.FLAG_PERMISSION_AUTO_REVOKED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PackageManager.PermissionFlags {
+  }
+
+  public class PermissionGroupInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    field @StringRes public final int backgroundRequestDetailResourceId;
+    field @StringRes public final int backgroundRequestResourceId;
+    field @StringRes public final int requestDetailResourceId;
+    field @StringRes public int requestRes;
+  }
+
+  public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    field public static final int FLAG_REMOVED = 2; // 0x2
+    field public static final int PROTECTION_FLAG_APP_PREDICTOR = 2097152; // 0x200000
+    field public static final int PROTECTION_FLAG_COMPANION = 8388608; // 0x800000
+    field public static final int PROTECTION_FLAG_CONFIGURATOR = 524288; // 0x80000
+    field public static final int PROTECTION_FLAG_DOCUMENTER = 262144; // 0x40000
+    field public static final int PROTECTION_FLAG_INCIDENT_REPORT_APPROVER = 1048576; // 0x100000
+    field public static final int PROTECTION_FLAG_KNOWN_SIGNER = 134217728; // 0x8000000
+    field public static final int PROTECTION_FLAG_OEM = 16384; // 0x4000
+    field public static final int PROTECTION_FLAG_RECENTS = 33554432; // 0x2000000
+    field public static final int PROTECTION_FLAG_RETAIL_DEMO = 16777216; // 0x1000000
+    field public static final int PROTECTION_FLAG_ROLE = 67108864; // 0x4000000
+    field public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 65536; // 0x10000
+    field @Deprecated public static final int PROTECTION_FLAG_WELLBEING = 131072; // 0x20000
+    field @Nullable public final String backgroundPermission;
+    field @StringRes public int requestRes;
+  }
+
+  public class ResolveInfo implements android.os.Parcelable {
+    field public boolean handleAllWebDataURI;
+  }
+
+  public final class ShortcutInfo implements android.os.Parcelable {
+    method @Nullable public android.app.Person[] getPersons();
+  }
+
+  public class ShortcutManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_APP_PREDICTIONS) @WorkerThread public java.util.List<android.content.pm.ShortcutManager.ShareShortcutInfo> getShareTargets(@NonNull android.content.IntentFilter);
+    method public boolean hasShareTargets(@NonNull String);
+  }
+
+  public static final class ShortcutManager.ShareShortcutInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.pm.ShortcutInfo getShortcutInfo();
+    method @NonNull public android.content.ComponentName getTargetComponent();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ShortcutManager.ShareShortcutInfo> CREATOR;
+  }
+
+  public final class SuspendDialogInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BUTTON_ACTION_MORE_DETAILS = 0; // 0x0
+    field public static final int BUTTON_ACTION_UNSUSPEND = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.SuspendDialogInfo> CREATOR;
+  }
+
+  public static final class SuspendDialogInfo.Builder {
+    ctor public SuspendDialogInfo.Builder();
+    method @NonNull public android.content.pm.SuspendDialogInfo build();
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setIcon(@DrawableRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setMessage(@NonNull String);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setMessage(@StringRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setNeutralButtonAction(int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setNeutralButtonText(@StringRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setNeutralButtonText(@NonNull String);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setTitle(@StringRes int);
+    method @NonNull public android.content.pm.SuspendDialogInfo.Builder setTitle(@NonNull String);
+  }
+
+}
+
+package android.content.pm.dex {
+
+  public class ArtManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_RUNTIME_PROFILES, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean isRuntimeProfilingEnabled(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_RUNTIME_PROFILES, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void snapshotRuntimeProfile(int, @Nullable String, @Nullable String, @NonNull java.util.concurrent.Executor, @NonNull android.content.pm.dex.ArtManager.SnapshotRuntimeProfileCallback);
+    field public static final int PROFILE_APPS = 0; // 0x0
+    field public static final int PROFILE_BOOT_IMAGE = 1; // 0x1
+    field public static final int SNAPSHOT_FAILED_CODE_PATH_NOT_FOUND = 1; // 0x1
+    field public static final int SNAPSHOT_FAILED_INTERNAL_ERROR = 2; // 0x2
+    field public static final int SNAPSHOT_FAILED_PACKAGE_NOT_FOUND = 0; // 0x0
+  }
+
+  public abstract static class ArtManager.SnapshotRuntimeProfileCallback {
+    ctor public ArtManager.SnapshotRuntimeProfileCallback();
+    method public abstract void onError(int);
+    method public abstract void onSuccess(android.os.ParcelFileDescriptor);
+  }
+
+}
+
+package android.content.pm.permission {
+
+  @Deprecated public final class RuntimePermissionPresentationInfo implements android.os.Parcelable {
+    ctor @Deprecated public RuntimePermissionPresentationInfo(CharSequence, boolean, boolean);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public CharSequence getLabel();
+    method @Deprecated public boolean isGranted();
+    method @Deprecated public boolean isStandard();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.content.pm.permission.RuntimePermissionPresentationInfo> CREATOR;
+  }
+
+}
+
+package android.content.pm.verify.domain {
+
+  public final class DomainOwner implements android.os.Parcelable {
+    ctor public DomainOwner(@NonNull String, boolean);
+    method public int describeContents();
+    method @NonNull public String getPackageName();
+    method public boolean isOverrideable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainOwner> CREATOR;
+  }
+
+  public final class DomainVerificationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.Integer> getHostToStateMap();
+    method @NonNull public java.util.UUID getIdentifier();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainVerificationInfo> CREATOR;
+    field public static final int STATE_FIRST_VERIFIER_DEFINED = 1024; // 0x400
+    field public static final int STATE_MODIFIABLE_UNVERIFIED = 3; // 0x3
+    field public static final int STATE_MODIFIABLE_VERIFIED = 4; // 0x4
+    field public static final int STATE_NO_RESPONSE = 0; // 0x0
+    field public static final int STATE_SUCCESS = 1; // 0x1
+    field public static final int STATE_UNMODIFIABLE = 2; // 0x2
+  }
+
+  public final class DomainVerificationManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.DOMAIN_VERIFICATION_AGENT) public android.content.pm.verify.domain.DomainVerificationInfo getDomainVerificationInfo(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION) public java.util.SortedSet<android.content.pm.verify.domain.DomainOwner> getOwnersForDomain(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.DOMAIN_VERIFICATION_AGENT) public java.util.List<java.lang.String> queryValidVerificationPackageNames();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION) public void setDomainVerificationLinkHandlingAllowed(@NonNull String, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @CheckResult @RequiresPermission(android.Manifest.permission.DOMAIN_VERIFICATION_AGENT) public int setDomainVerificationStatus(@NonNull java.util.UUID, @NonNull java.util.Set<java.lang.String>, int) throws android.content.pm.PackageManager.NameNotFoundException;
+    method @CheckResult @RequiresPermission(android.Manifest.permission.UPDATE_DOMAIN_VERIFICATION_USER_SELECTION) public int setDomainVerificationUserSelection(@NonNull java.util.UUID, @NonNull java.util.Set<java.lang.String>, boolean) throws android.content.pm.PackageManager.NameNotFoundException;
+    field public static final int ERROR_DOMAIN_SET_ID_INVALID = 1; // 0x1
+    field public static final int ERROR_UNABLE_TO_APPROVE = 3; // 0x3
+    field public static final int ERROR_UNKNOWN_DOMAIN = 2; // 0x2
+    field public static final String EXTRA_VERIFICATION_REQUEST = "android.content.pm.verify.domain.extra.VERIFICATION_REQUEST";
+    field public static final int STATUS_OK = 0; // 0x0
+  }
+
+  public final class DomainVerificationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<java.lang.String> getPackageNames();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.verify.domain.DomainVerificationRequest> CREATOR;
+  }
+
+  public final class DomainVerificationUserState implements android.os.Parcelable {
+    method @NonNull public java.util.UUID getIdentifier();
+  }
+
+}
+
+package android.content.rollback {
+
+  public final class PackageRollbackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getPackageName();
+    method @NonNull public android.content.pm.VersionedPackage getVersionRolledBackFrom();
+    method @NonNull public android.content.pm.VersionedPackage getVersionRolledBackTo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.PackageRollbackInfo> CREATOR;
+  }
+
+  public final class RollbackInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.content.pm.VersionedPackage> getCausePackages();
+    method public int getCommittedSessionId();
+    method @NonNull public java.util.List<android.content.rollback.PackageRollbackInfo> getPackages();
+    method public int getRollbackId();
+    method public boolean isStaged();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.rollback.RollbackInfo> CREATOR;
+  }
+
+  public final class RollbackManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, "android.permission.TEST_MANAGE_ROLLBACKS"}) public void commitRollback(int, @NonNull java.util.List<android.content.pm.VersionedPackage>, @NonNull android.content.IntentSender);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, "android.permission.TEST_MANAGE_ROLLBACKS"}) public java.util.List<android.content.rollback.RollbackInfo> getAvailableRollbacks();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_ROLLBACKS, "android.permission.TEST_MANAGE_ROLLBACKS"}) public java.util.List<android.content.rollback.RollbackInfo> getRecentlyCommittedRollbacks();
+    field public static final String EXTRA_STATUS = "android.content.rollback.extra.STATUS";
+    field public static final String EXTRA_STATUS_MESSAGE = "android.content.rollback.extra.STATUS_MESSAGE";
+    field public static final int STATUS_FAILURE = 1; // 0x1
+    field public static final int STATUS_FAILURE_INSTALL = 3; // 0x3
+    field public static final int STATUS_FAILURE_ROLLBACK_UNAVAILABLE = 2; // 0x2
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.debug {
+
+  public class AdbManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_DEBUGGING) public boolean isAdbWifiQrSupported();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_DEBUGGING) public boolean isAdbWifiSupported();
+  }
+
+}
+
+package android.graphics.fonts {
+
+  public final class FontFamilyUpdateRequest {
+    method @NonNull public java.util.List<android.graphics.fonts.FontFamilyUpdateRequest.FontFamily> getFontFamilies();
+    method @NonNull public java.util.List<android.graphics.fonts.FontFileUpdateRequest> getFontFileUpdateRequests();
+  }
+
+  public static final class FontFamilyUpdateRequest.Builder {
+    ctor public FontFamilyUpdateRequest.Builder();
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Builder addFontFamily(@NonNull android.graphics.fonts.FontFamilyUpdateRequest.FontFamily);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Builder addFontFileUpdateRequest(@NonNull android.graphics.fonts.FontFileUpdateRequest);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest build();
+  }
+
+  public static final class FontFamilyUpdateRequest.Font {
+    method @NonNull public java.util.List<android.graphics.fonts.FontVariationAxis> getAxes();
+    method @IntRange(from=0) public int getIndex();
+    method @NonNull public String getPostScriptName();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+  }
+
+  public static final class FontFamilyUpdateRequest.Font.Builder {
+    ctor public FontFamilyUpdateRequest.Font.Builder(@NonNull String, @NonNull android.graphics.fonts.FontStyle);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Font build();
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Font.Builder setAxes(@NonNull java.util.List<android.graphics.fonts.FontVariationAxis>);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.Font.Builder setIndex(@IntRange(from=0) int);
+  }
+
+  public static final class FontFamilyUpdateRequest.FontFamily {
+    method @NonNull public java.util.List<android.graphics.fonts.FontFamilyUpdateRequest.Font> getFonts();
+    method @NonNull public String getName();
+  }
+
+  public static final class FontFamilyUpdateRequest.FontFamily.Builder {
+    ctor public FontFamilyUpdateRequest.FontFamily.Builder(@NonNull String, @NonNull java.util.List<android.graphics.fonts.FontFamilyUpdateRequest.Font>);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.FontFamily.Builder addFont(@NonNull android.graphics.fonts.FontFamilyUpdateRequest.Font);
+    method @NonNull public android.graphics.fonts.FontFamilyUpdateRequest.FontFamily build();
+  }
+
+  public final class FontFileUpdateRequest {
+    ctor public FontFileUpdateRequest(@NonNull android.os.ParcelFileDescriptor, @NonNull byte[]);
+    method @NonNull public android.os.ParcelFileDescriptor getParcelFileDescriptor();
+    method @NonNull public byte[] getSignature();
+  }
+
+  public class FontManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public android.text.FontConfig getFontConfig();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public int updateFontFamily(@NonNull android.graphics.fonts.FontFamilyUpdateRequest, @IntRange(from=0) int);
+    field public static final int RESULT_ERROR_DOWNGRADING = -5; // 0xfffffffb
+    field public static final int RESULT_ERROR_FAILED_TO_WRITE_FONT_FILE = -1; // 0xffffffff
+    field public static final int RESULT_ERROR_FAILED_UPDATE_CONFIG = -6; // 0xfffffffa
+    field public static final int RESULT_ERROR_FONT_NOT_FOUND = -9; // 0xfffffff7
+    field public static final int RESULT_ERROR_FONT_UPDATER_DISABLED = -7; // 0xfffffff9
+    field public static final int RESULT_ERROR_INVALID_FONT_FILE = -3; // 0xfffffffd
+    field public static final int RESULT_ERROR_INVALID_FONT_NAME = -4; // 0xfffffffc
+    field public static final int RESULT_ERROR_VERIFICATION_FAILURE = -2; // 0xfffffffe
+    field public static final int RESULT_ERROR_VERSION_MISMATCH = -8; // 0xfffffff8
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.hardware {
+
+  public final class Sensor {
+    method public java.util.UUID getUuid();
+    method public boolean isDataInjectionSupported();
+    field public static final String STRING_TYPE_DYNAMIC_SENSOR_META = "android.sensor.dynamic_sensor_meta";
+    field public static final String STRING_TYPE_WRIST_TILT_GESTURE = "android.sensor.wrist_tilt_gesture";
+    field public static final int TYPE_DYNAMIC_SENSOR_META = 32; // 0x20
+    field public static final int TYPE_WRIST_TILT_GESTURE = 26; // 0x1a
+  }
+
+  public abstract class SensorManager {
+    method public boolean initDataInjection(boolean);
+    method public boolean injectSensorData(android.hardware.Sensor, float[], int, long);
+  }
+
+  public final class SensorPrivacyManager {
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void addSensorPrivacyListener(int, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void addSensorPrivacyListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public boolean isSensorPrivacyEnabled(int);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_SENSOR_PRIVACY) public void removeSensorPrivacyListener(int, @NonNull android.hardware.SensorPrivacyManager.OnSensorPrivacyChangedListener);
+  }
+
+  public static interface SensorPrivacyManager.OnSensorPrivacyChangedListener {
+    method public void onSensorPrivacyChanged(int, boolean);
+  }
+
+}
+
+package android.hardware.biometrics {
+
+  public static interface BiometricManager.Authenticators {
+    field @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static final int BIOMETRIC_CONVENIENCE = 4095; // 0xfff
+    field @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static final int EMPTY_SET = 0; // 0x0
+  }
+
+}
+
+package android.hardware.camera2 {
+
+  public abstract class CameraDevice implements java.lang.AutoCloseable {
+    method @Deprecated public abstract void createCustomCaptureSession(android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, int, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    field public static final int SESSION_OPERATION_MODE_CONSTRAINED_HIGH_SPEED = 1; // 0x1
+    field public static final int SESSION_OPERATION_MODE_NORMAL = 0; // 0x0
+    field public static final int SESSION_OPERATION_MODE_VENDOR_START = 32768; // 0x8000
+  }
+
+  public final class CameraManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.SYSTEM_CAMERA, android.Manifest.permission.CAMERA}) public void openCamera(@NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraManager.AvailabilityCallback {
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraClosed(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraOpened(@NonNull String, @NonNull String);
+  }
+
+}
+
+package android.hardware.camera2.params {
+
+  public final class OutputConfiguration implements android.os.Parcelable {
+    ctor public OutputConfiguration(@NonNull android.view.Surface, int);
+    ctor public OutputConfiguration(int, @NonNull android.view.Surface, int);
+    method public int getRotation();
+    field public static final int ROTATION_0 = 0; // 0x0
+    field public static final int ROTATION_180 = 2; // 0x2
+    field public static final int ROTATION_270 = 3; // 0x3
+    field public static final int ROTATION_90 = 1; // 0x1
+  }
+
+}
+
+package android.hardware.display {
+
+  public final class AmbientBrightnessDayStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public float[] getBucketBoundaries();
+    method public java.time.LocalDate getLocalDate();
+    method public float[] getStats();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.AmbientBrightnessDayStats> CREATOR;
+  }
+
+  public final class BrightnessChangeEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessChangeEvent> CREATOR;
+    field public final float batteryLevel;
+    field public final float brightness;
+    field public final long colorSampleDuration;
+    field public final int colorTemperature;
+    field @Nullable public final long[] colorValueBuckets;
+    field public final boolean isDefaultBrightnessConfig;
+    field public final boolean isUserSetBrightness;
+    field public final float lastBrightness;
+    field public final long[] luxTimestamps;
+    field public final float[] luxValues;
+    field public final boolean nightMode;
+    field public final String packageName;
+    field public final float powerBrightnessFactor;
+    field public final boolean reduceBrightColors;
+    field public final float reduceBrightColorsOffset;
+    field public final int reduceBrightColorsStrength;
+    field public final long timeStamp;
+    field @NonNull public final String uniqueDisplayId;
+  }
+
+  public final class BrightnessConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByCategory(int);
+    method @Nullable public android.hardware.display.BrightnessCorrection getCorrectionByPackageName(@NonNull String);
+    method public android.util.Pair<float[],float[]> getCurve();
+    method public float getShortTermModelLowerLuxMultiplier();
+    method public long getShortTermModelTimeoutMillis();
+    method public float getShortTermModelUpperLuxMultiplier();
+    method public boolean shouldCollectColorSamples();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessConfiguration> CREATOR;
+    field public static final long SHORT_TERM_TIMEOUT_UNSET = -1L; // 0xffffffffffffffffL
+  }
+
+  public static class BrightnessConfiguration.Builder {
+    ctor public BrightnessConfiguration.Builder(float[], float[]);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByCategory(int, @NonNull android.hardware.display.BrightnessCorrection);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder addCorrectionByPackageName(@NonNull String, @NonNull android.hardware.display.BrightnessCorrection);
+    method @NonNull public android.hardware.display.BrightnessConfiguration build();
+    method public int getMaxCorrectionsByCategory();
+    method public int getMaxCorrectionsByPackageName();
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setDescription(@Nullable String);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelLowerLuxMultiplier(@FloatRange(from=0.0f) float);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelTimeoutMillis(long);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShortTermModelUpperLuxMultiplier(@FloatRange(from=0.0f) float);
+    method @NonNull public android.hardware.display.BrightnessConfiguration.Builder setShouldCollectColorSamples(boolean);
+  }
+
+  public final class BrightnessCorrection implements android.os.Parcelable {
+    method @FloatRange(from=0.0) public float apply(@FloatRange(from=0.0) float);
+    method @NonNull public static android.hardware.display.BrightnessCorrection createScaleAndTranslateLog(float, float);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.display.BrightnessCorrection> CREATOR;
+  }
+
+  public final class ColorDisplayManager {
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public int getNightDisplayAutoMode();
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public int getTransformCapabilities();
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setAppSaturationLevel(@NonNull String, @IntRange(from=0, to=100) int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setNightDisplayAutoMode(int);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setNightDisplayCustomEndTime(@NonNull java.time.LocalTime);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setNightDisplayCustomStartTime(@NonNull java.time.LocalTime);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean setSaturationLevel(@IntRange(from=0, to=100) int);
+    field public static final int AUTO_MODE_CUSTOM_TIME = 1; // 0x1
+    field public static final int AUTO_MODE_DISABLED = 0; // 0x0
+    field public static final int AUTO_MODE_TWILIGHT = 2; // 0x2
+    field public static final int CAPABILITY_HARDWARE_ACCELERATION_GLOBAL = 2; // 0x2
+    field public static final int CAPABILITY_HARDWARE_ACCELERATION_PER_APP = 4; // 0x4
+    field public static final int CAPABILITY_NONE = 0; // 0x0
+    field public static final int CAPABILITY_PROTECTED_CONTENT = 1; // 0x1
+  }
+
+  public final class DisplayManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_AMBIENT_LIGHT_STATS) public java.util.List<android.hardware.display.AmbientBrightnessDayStats> getAmbientBrightnessStats();
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getBrightnessConfiguration();
+    method @Nullable @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getBrightnessConfigurationForDisplay(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.BRIGHTNESS_SLIDER_USAGE) public java.util.List<android.hardware.display.BrightnessChangeEvent> getBrightnessEvents();
+    method @Nullable @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public android.hardware.display.BrightnessConfiguration getDefaultBrightnessConfiguration();
+    method public android.util.Pair<float[],float[]> getMinimumBrightnessCurve();
+    method public android.graphics.Point getStableDisplaySize();
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public void setBrightnessConfiguration(android.hardware.display.BrightnessConfiguration);
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_DISPLAY_BRIGHTNESS) public void setBrightnessConfigurationForDisplay(@NonNull android.hardware.display.BrightnessConfiguration, @NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_SATURATION) public void setSaturationLevel(float);
+  }
+
+}
+
+package android.hardware.hdmi {
+
+  public abstract class HdmiClient {
+    method public android.hardware.hdmi.HdmiDeviceInfo getActiveSource();
+    method public void sendKeyEvent(int, boolean);
+    method public void sendVendorCommand(int, byte[], boolean);
+    method public void setVendorCommandListener(@NonNull android.hardware.hdmi.HdmiControlManager.VendorCommandListener);
+  }
+
+  public final class HdmiControlManager {
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHdmiCecEnabledChangeListener(@NonNull android.hardware.hdmi.HdmiControlManager.CecSettingChangeListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHdmiCecEnabledChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiControlManager.CecSettingChangeListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void addHotplugEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public java.util.List<java.lang.Integer> getAllowedCecSettingIntValues(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public java.util.List<java.lang.String> getAllowedCecSettingStringValues(@NonNull String);
+    method @Nullable public android.hardware.hdmi.HdmiClient getClient(int);
+    method @NonNull public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getConnectedDevices();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getHdmiCecEnabled();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getHdmiCecVersion();
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getHdmiCecVolumeControlEnabled();
+    method public int getPhysicalAddress();
+    method @Nullable public android.hardware.hdmi.HdmiPlaybackClient getPlaybackClient();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public String getPowerControlMode();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public String getPowerStateChangeOnActiveSourceLost();
+    method @Nullable public android.hardware.hdmi.HdmiSwitchClient getSwitchClient();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getSystemAudioModeMuting();
+    method @Nullable public android.hardware.hdmi.HdmiTvClient getTvClient();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getTvSendStandbyOnSleep();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public int getTvWakeOnOneTouchPlay();
+    method @NonNull @RequiresPermission(android.Manifest.permission.HDMI_CEC) public java.util.List<java.lang.String> getUserCecSettings();
+    method public boolean isDeviceConnected(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method public void powerOffDevice(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void removeHdmiCecEnabledChangeListener(@NonNull android.hardware.hdmi.HdmiControlManager.CecSettingChangeListener);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void removeHotplugEventListener(android.hardware.hdmi.HdmiControlManager.HotplugEventListener);
+    method public void setActiveSource(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setHdmiCecEnabled(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setHdmiCecVersion(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setHdmiCecVolumeControlEnabled(int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setPowerControlMode(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setPowerStateChangeOnActiveSourceLost(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setStandbyMode(boolean);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setSystemAudioModeMuting(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setTvSendStandbyOnSleep(@NonNull int);
+    method @RequiresPermission(android.Manifest.permission.HDMI_CEC) public void setTvWakeOnOneTouchPlay(@NonNull int);
+    field public static final String ACTION_OSD_MESSAGE = "android.hardware.hdmi.action.OSD_MESSAGE";
+    field public static final int AVR_VOLUME_MUTED = 101; // 0x65
+    field public static final String CEC_SETTING_NAME_HDMI_CEC_ENABLED = "hdmi_cec_enabled";
+    field public static final String CEC_SETTING_NAME_HDMI_CEC_VERSION = "hdmi_cec_version";
+    field public static final String CEC_SETTING_NAME_POWER_CONTROL_MODE = "power_control_mode";
+    field public static final String CEC_SETTING_NAME_POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST = "power_state_change_on_active_source_lost";
+    field public static final String CEC_SETTING_NAME_SYSTEM_AUDIO_MODE_MUTING = "system_audio_mode_muting";
+    field public static final String CEC_SETTING_NAME_TV_SEND_STANDBY_ON_SLEEP = "tv_send_standby_on_sleep";
+    field public static final String CEC_SETTING_NAME_TV_WAKE_ON_ONE_TOUCH_PLAY = "tv_wake_on_one_touch_play";
+    field public static final String CEC_SETTING_NAME_VOLUME_CONTROL_MODE = "volume_control_enabled";
+    field public static final int CLEAR_TIMER_STATUS_CEC_DISABLE = 162; // 0xa2
+    field public static final int CLEAR_TIMER_STATUS_CHECK_RECORDER_CONNECTION = 160; // 0xa0
+    field public static final int CLEAR_TIMER_STATUS_FAIL_TO_CLEAR_SELECTED_SOURCE = 161; // 0xa1
+    field public static final int CLEAR_TIMER_STATUS_TIMER_CLEARED = 128; // 0x80
+    field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_INFO_AVAILABLE = 2; // 0x2
+    field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_NO_MATCHING = 1; // 0x1
+    field public static final int CLEAR_TIMER_STATUS_TIMER_NOT_CLEARED_RECORDING = 0; // 0x0
+    field public static final int CONTROL_STATE_CHANGED_REASON_SETTING = 1; // 0x1
+    field public static final int CONTROL_STATE_CHANGED_REASON_STANDBY = 3; // 0x3
+    field public static final int CONTROL_STATE_CHANGED_REASON_START = 0; // 0x0
+    field public static final int CONTROL_STATE_CHANGED_REASON_WAKEUP = 2; // 0x2
+    field public static final int DEVICE_EVENT_ADD_DEVICE = 1; // 0x1
+    field public static final int DEVICE_EVENT_REMOVE_DEVICE = 2; // 0x2
+    field public static final int DEVICE_EVENT_UPDATE_DEVICE = 3; // 0x3
+    field public static final String EXTRA_MESSAGE_EXTRA_PARAM1 = "android.hardware.hdmi.extra.MESSAGE_EXTRA_PARAM1";
+    field public static final String EXTRA_MESSAGE_ID = "android.hardware.hdmi.extra.MESSAGE_ID";
+    field public static final int HDMI_CEC_CONTROL_DISABLED = 0; // 0x0
+    field public static final int HDMI_CEC_CONTROL_ENABLED = 1; // 0x1
+    field public static final int HDMI_CEC_VERSION_1_4_B = 5; // 0x5
+    field public static final int HDMI_CEC_VERSION_2_0 = 6; // 0x6
+    field public static final int ONE_TOUCH_RECORD_ALREADY_RECORDING = 18; // 0x12
+    field public static final int ONE_TOUCH_RECORD_CEC_DISABLED = 51; // 0x33
+    field public static final int ONE_TOUCH_RECORD_CHECK_RECORDER_CONNECTION = 49; // 0x31
+    field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_COPY = 13; // 0xd
+    field public static final int ONE_TOUCH_RECORD_DISALLOW_TO_FUTHER_COPIES = 14; // 0xe
+    field public static final int ONE_TOUCH_RECORD_FAIL_TO_RECORD_DISPLAYED_SCREEN = 50; // 0x32
+    field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PHYSICAL_ADDRESS = 10; // 0xa
+    field public static final int ONE_TOUCH_RECORD_INVALID_EXTERNAL_PLUG_NUMBER = 9; // 0x9
+    field public static final int ONE_TOUCH_RECORD_MEDIA_PROBLEM = 21; // 0x15
+    field public static final int ONE_TOUCH_RECORD_MEDIA_PROTECTED = 19; // 0x13
+    field public static final int ONE_TOUCH_RECORD_NOT_ENOUGH_SPACE = 22; // 0x16
+    field public static final int ONE_TOUCH_RECORD_NO_MEDIA = 16; // 0x10
+    field public static final int ONE_TOUCH_RECORD_NO_OR_INSUFFICIENT_CA_ENTITLEMENTS = 12; // 0xc
+    field public static final int ONE_TOUCH_RECORD_NO_SOURCE_SIGNAL = 20; // 0x14
+    field public static final int ONE_TOUCH_RECORD_OTHER_REASON = 31; // 0x1f
+    field public static final int ONE_TOUCH_RECORD_PARENT_LOCK_ON = 23; // 0x17
+    field public static final int ONE_TOUCH_RECORD_PLAYING = 17; // 0x11
+    field public static final int ONE_TOUCH_RECORD_PREVIOUS_RECORDING_IN_PROGRESS = 48; // 0x30
+    field public static final int ONE_TOUCH_RECORD_RECORDING_ALREADY_TERMINATED = 27; // 0x1b
+    field public static final int ONE_TOUCH_RECORD_RECORDING_ANALOGUE_SERVICE = 3; // 0x3
+    field public static final int ONE_TOUCH_RECORD_RECORDING_CURRENTLY_SELECTED_SOURCE = 1; // 0x1
+    field public static final int ONE_TOUCH_RECORD_RECORDING_DIGITAL_SERVICE = 2; // 0x2
+    field public static final int ONE_TOUCH_RECORD_RECORDING_EXTERNAL_INPUT = 4; // 0x4
+    field public static final int ONE_TOUCH_RECORD_RECORDING_TERMINATED_NORMALLY = 26; // 0x1a
+    field public static final int ONE_TOUCH_RECORD_UNABLE_ANALOGUE_SERVICE = 6; // 0x6
+    field public static final int ONE_TOUCH_RECORD_UNABLE_DIGITAL_SERVICE = 5; // 0x5
+    field public static final int ONE_TOUCH_RECORD_UNABLE_SELECTED_SERVICE = 7; // 0x7
+    field public static final int ONE_TOUCH_RECORD_UNSUPPORTED_CA = 11; // 0xb
+    field public static final int OSD_MESSAGE_ARC_CONNECTED_INVALID_PORT = 1; // 0x1
+    field public static final int OSD_MESSAGE_AVR_VOLUME_CHANGED = 2; // 0x2
+    field public static final String POWER_CONTROL_MODE_BROADCAST = "broadcast";
+    field public static final String POWER_CONTROL_MODE_NONE = "none";
+    field public static final String POWER_CONTROL_MODE_TV = "to_tv";
+    field public static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_NONE = "none";
+    field public static final String POWER_STATE_CHANGE_ON_ACTIVE_SOURCE_LOST_STANDBY_NOW = "standby_now";
+    field public static final int POWER_STATUS_ON = 0; // 0x0
+    field public static final int POWER_STATUS_STANDBY = 1; // 0x1
+    field public static final int POWER_STATUS_TRANSIENT_TO_ON = 2; // 0x2
+    field public static final int POWER_STATUS_TRANSIENT_TO_STANDBY = 3; // 0x3
+    field public static final int POWER_STATUS_UNKNOWN = -1; // 0xffffffff
+    field @Deprecated public static final int RESULT_ALREADY_IN_PROGRESS = 4; // 0x4
+    field public static final int RESULT_COMMUNICATION_FAILED = 7; // 0x7
+    field public static final int RESULT_EXCEPTION = 5; // 0x5
+    field public static final int RESULT_INCORRECT_MODE = 6; // 0x6
+    field public static final int RESULT_SOURCE_NOT_AVAILABLE = 2; // 0x2
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int RESULT_TARGET_NOT_AVAILABLE = 3; // 0x3
+    field public static final int RESULT_TIMEOUT = 1; // 0x1
+    field public static final int SYSTEM_AUDIO_MODE_MUTING_DISABLED = 0; // 0x0
+    field public static final int SYSTEM_AUDIO_MODE_MUTING_ENABLED = 1; // 0x1
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_CEC_DISABLED = 3; // 0x3
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_CHECK_RECORDER_CONNECTION = 1; // 0x1
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_FAIL_TO_RECORD_SELECTED_SOURCE = 2; // 0x2
+    field public static final int TIMER_RECORDING_RESULT_EXTRA_NO_ERROR = 0; // 0x0
+    field public static final int TIMER_RECORDING_TYPE_ANALOGUE = 2; // 0x2
+    field public static final int TIMER_RECORDING_TYPE_DIGITAL = 1; // 0x1
+    field public static final int TIMER_RECORDING_TYPE_EXTERNAL = 3; // 0x3
+    field public static final int TIMER_STATUS_MEDIA_INFO_NOT_PRESENT = 2; // 0x2
+    field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_NOT_PROTECTED = 0; // 0x0
+    field public static final int TIMER_STATUS_MEDIA_INFO_PRESENT_PROTECTED = 1; // 0x1
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_CA_NOT_SUPPORTED = 6; // 0x6
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_CLOCK_FAILURE = 10; // 0xa
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_DATE_OUT_OF_RANGE = 2; // 0x2
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_DUPLICATED = 14; // 0xe
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PHYSICAL_NUMBER = 5; // 0x5
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_EXTERNAL_PLUG_NUMBER = 4; // 0x4
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_INVALID_SEQUENCE = 3; // 0x3
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_CA_ENTITLEMENTS = 7; // 0x7
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_NO_FREE_TIME = 1; // 0x1
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_PARENTAL_LOCK_ON = 9; // 0x9
+    field public static final int TIMER_STATUS_NOT_PROGRAMMED_UNSUPPORTED_RESOLUTION = 8; // 0x8
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_ENOUGH_SPACE = 8; // 0x8
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_MIGHT_NOT_ENOUGH_SPACE = 11; // 0xb
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_NOT_ENOUGH_SPACE = 9; // 0x9
+    field public static final int TIMER_STATUS_PROGRAMMED_INFO_NO_MEDIA_INFO = 10; // 0xa
+    field public static final int TV_SEND_STANDBY_ON_SLEEP_DISABLED = 0; // 0x0
+    field public static final int TV_SEND_STANDBY_ON_SLEEP_ENABLED = 1; // 0x1
+    field public static final int TV_WAKE_ON_ONE_TOUCH_PLAY_DISABLED = 0; // 0x0
+    field public static final int TV_WAKE_ON_ONE_TOUCH_PLAY_ENABLED = 1; // 0x1
+    field public static final int VOLUME_CONTROL_DISABLED = 0; // 0x0
+    field public static final int VOLUME_CONTROL_ENABLED = 1; // 0x1
+  }
+
+  public static interface HdmiControlManager.CecSettingChangeListener {
+    method public void onChange(@NonNull String);
+  }
+
+  @IntDef({android.hardware.hdmi.HdmiControlManager.RESULT_SUCCESS, android.hardware.hdmi.HdmiControlManager.RESULT_TIMEOUT, android.hardware.hdmi.HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE, android.hardware.hdmi.HdmiControlManager.RESULT_TARGET_NOT_AVAILABLE, android.hardware.hdmi.HdmiControlManager.RESULT_ALREADY_IN_PROGRESS, android.hardware.hdmi.HdmiControlManager.RESULT_EXCEPTION, android.hardware.hdmi.HdmiControlManager.RESULT_INCORRECT_MODE, android.hardware.hdmi.HdmiControlManager.RESULT_COMMUNICATION_FAILED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public static @interface HdmiControlManager.ControlCallbackResult {
+  }
+
+  public static interface HdmiControlManager.HotplugEventListener {
+    method public void onReceived(android.hardware.hdmi.HdmiHotplugEvent);
+  }
+
+  public static interface HdmiControlManager.VendorCommandListener {
+    method public void onControlStateChanged(boolean, int);
+    method public void onReceived(int, int, byte[], boolean);
+  }
+
+  public class HdmiDeviceInfo implements android.os.Parcelable {
+    ctor public HdmiDeviceInfo();
+    method public int describeContents();
+    method public int getAdopterId();
+    method public int getDeviceId();
+    method public int getDevicePowerStatus();
+    method public int getDeviceType();
+    method public String getDisplayName();
+    method public int getId();
+    method public int getLogicalAddress();
+    method public int getPhysicalAddress();
+    method public int getPortId();
+    method public int getVendorId();
+    method public static int idForCecDevice(int);
+    method public static int idForHardware(int);
+    method public static int idForMhlDevice(int);
+    method public boolean isCecDevice();
+    method public boolean isInactivated();
+    method public boolean isMhlDevice();
+    method public boolean isSourceType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ADDR_INTERNAL = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiDeviceInfo> CREATOR;
+    field public static final int DEVICE_AUDIO_SYSTEM = 5; // 0x5
+    field public static final int DEVICE_INACTIVE = -1; // 0xffffffff
+    field public static final int DEVICE_PLAYBACK = 4; // 0x4
+    field public static final int DEVICE_RECORDER = 1; // 0x1
+    field public static final int DEVICE_RESERVED = 2; // 0x2
+    field public static final int DEVICE_TUNER = 3; // 0x3
+    field public static final int DEVICE_TV = 0; // 0x0
+    field public static final int ID_INVALID = 65535; // 0xffff
+    field public static final android.hardware.hdmi.HdmiDeviceInfo INACTIVE_DEVICE;
+    field public static final int PATH_INTERNAL = 0; // 0x0
+    field public static final int PATH_INVALID = 65535; // 0xffff
+    field public static final int PORT_INVALID = -1; // 0xffffffff
+  }
+
+  public final class HdmiHotplugEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getPort();
+    method public boolean isConnected();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiHotplugEvent> CREATOR;
+  }
+
+  public final class HdmiPlaybackClient extends android.hardware.hdmi.HdmiClient {
+    method public int getDeviceType();
+    method public void oneTouchPlay(android.hardware.hdmi.HdmiPlaybackClient.OneTouchPlayCallback);
+    method public void queryDisplayStatus(android.hardware.hdmi.HdmiPlaybackClient.DisplayStatusCallback);
+    method public void sendStandby();
+  }
+
+  public static interface HdmiPlaybackClient.DisplayStatusCallback {
+    method public void onComplete(int);
+  }
+
+  public static interface HdmiPlaybackClient.OneTouchPlayCallback {
+    method public void onComplete(int);
+  }
+
+  public final class HdmiPortInfo implements android.os.Parcelable {
+    ctor public HdmiPortInfo(int, int, int, boolean, boolean, boolean);
+    method public int describeContents();
+    method public int getAddress();
+    method public int getId();
+    method public int getType();
+    method public boolean isArcSupported();
+    method public boolean isCecSupported();
+    method public boolean isMhlSupported();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.hdmi.HdmiPortInfo> CREATOR;
+    field public static final int PORT_INPUT = 0; // 0x0
+    field public static final int PORT_OUTPUT = 1; // 0x1
+  }
+
+  public abstract class HdmiRecordListener {
+    ctor public HdmiRecordListener();
+    method public void onClearTimerRecordingResult(int, int);
+    method public void onOneTouchRecordResult(int, int);
+    method public abstract android.hardware.hdmi.HdmiRecordSources.RecordSource onOneTouchRecordSourceRequested(int);
+    method public void onTimerRecordingResult(int, android.hardware.hdmi.HdmiRecordListener.TimerStatusData);
+  }
+
+  public static class HdmiRecordListener.TimerStatusData {
+    method public int getDurationHour();
+    method public int getDurationMinute();
+    method public int getExtraError();
+    method public int getMediaInfo();
+    method public int getNotProgammedError();
+    method public int getProgrammedInfo();
+    method public boolean isOverlapped();
+    method public boolean isProgrammed();
+  }
+
+  public final class HdmiRecordSources {
+    method public static boolean checkRecordSource(byte[]);
+    method public static android.hardware.hdmi.HdmiRecordSources.OwnSource ofOwnSource();
+  }
+
+  public static final class HdmiRecordSources.AnalogueServiceSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.DigitalServiceSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.ExternalPhysicalAddress extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.ExternalPlugData extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public static final class HdmiRecordSources.OwnSource extends android.hardware.hdmi.HdmiRecordSources.RecordSource {
+  }
+
+  public abstract static class HdmiRecordSources.RecordSource {
+  }
+
+  public class HdmiSwitchClient extends android.hardware.hdmi.HdmiClient {
+    method public int getDeviceType();
+    method @NonNull public java.util.List<android.hardware.hdmi.HdmiPortInfo> getPortInfo();
+    method public void selectPort(int, @NonNull android.hardware.hdmi.HdmiSwitchClient.OnSelectListener);
+    method public void selectPort(int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.hdmi.HdmiSwitchClient.OnSelectListener);
+  }
+
+  public static interface HdmiSwitchClient.OnSelectListener {
+    method public void onSelect(@android.hardware.hdmi.HdmiControlManager.ControlCallbackResult int);
+  }
+
+  public class HdmiTimerRecordSources {
+    method public static boolean checkTimerRecordSource(int, byte[]);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.Duration durationOf(int, int);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofAnalogueSource(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.AnalogueServiceSource);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofDigitalSource(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.DigitalServiceSource);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofExternalPhysicalAddress(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.ExternalPhysicalAddress);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource ofExternalPlug(android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo, android.hardware.hdmi.HdmiRecordSources.ExternalPlugData);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.Time timeOf(int, int);
+    method public static android.hardware.hdmi.HdmiTimerRecordSources.TimerInfo timerInfoOf(int, int, android.hardware.hdmi.HdmiTimerRecordSources.Time, android.hardware.hdmi.HdmiTimerRecordSources.Duration, int);
+    field public static final int RECORDING_SEQUENCE_REPEAT_FRIDAY = 32; // 0x20
+    field public static final int RECORDING_SEQUENCE_REPEAT_MONDAY = 2; // 0x2
+    field public static final int RECORDING_SEQUENCE_REPEAT_ONCE_ONLY = 0; // 0x0
+    field public static final int RECORDING_SEQUENCE_REPEAT_SATUREDAY = 64; // 0x40
+    field public static final int RECORDING_SEQUENCE_REPEAT_SUNDAY = 1; // 0x1
+    field public static final int RECORDING_SEQUENCE_REPEAT_THURSDAY = 16; // 0x10
+    field public static final int RECORDING_SEQUENCE_REPEAT_TUESDAY = 4; // 0x4
+    field public static final int RECORDING_SEQUENCE_REPEAT_WEDNESDAY = 8; // 0x8
+  }
+
+  public static final class HdmiTimerRecordSources.Duration {
+  }
+
+  public static final class HdmiTimerRecordSources.Time {
+  }
+
+  public static final class HdmiTimerRecordSources.TimerInfo {
+  }
+
+  public static final class HdmiTimerRecordSources.TimerRecordSource {
+  }
+
+  public final class HdmiTvClient extends android.hardware.hdmi.HdmiClient {
+    method public void clearTimerRecording(int, int, android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource);
+    method public void deviceSelect(int, @NonNull android.hardware.hdmi.HdmiTvClient.SelectCallback);
+    method public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getDeviceList();
+    method public int getDeviceType();
+    method public void portSelect(int, @NonNull android.hardware.hdmi.HdmiTvClient.SelectCallback);
+    method public void sendMhlVendorCommand(int, int, int, byte[]);
+    method public void sendStandby(int);
+    method public void setHdmiMhlVendorCommandListener(android.hardware.hdmi.HdmiTvClient.HdmiMhlVendorCommandListener);
+    method public void setInputChangeListener(android.hardware.hdmi.HdmiTvClient.InputChangeListener);
+    method public void setRecordListener(@NonNull android.hardware.hdmi.HdmiRecordListener);
+    method public void setSystemAudioMode(boolean, android.hardware.hdmi.HdmiTvClient.SelectCallback);
+    method public void setSystemAudioMute(boolean);
+    method public void setSystemAudioVolume(int, int, int);
+    method public void startOneTouchRecord(int, @NonNull android.hardware.hdmi.HdmiRecordSources.RecordSource);
+    method public void startTimerRecording(int, int, android.hardware.hdmi.HdmiTimerRecordSources.TimerRecordSource);
+    method public void stopOneTouchRecord(int);
+    field public static final int VENDOR_DATA_SIZE = 16; // 0x10
+  }
+
+  public static interface HdmiTvClient.HdmiMhlVendorCommandListener {
+    method public void onReceived(int, int, int, byte[]);
+  }
+
+  public static interface HdmiTvClient.InputChangeListener {
+    method public void onChanged(android.hardware.hdmi.HdmiDeviceInfo);
+  }
+
+  public static interface HdmiTvClient.SelectCallback {
+    method public void onComplete(int);
+  }
+
+}
+
+package android.hardware.lights {
+
+  public final class LightState implements android.os.Parcelable {
+    ctor @Deprecated public LightState(@ColorInt int);
+  }
+
+  public abstract class LightsManager {
+    field @Deprecated public static final int LIGHT_TYPE_MICROPHONE = 8; // 0x8
+  }
+
+  public static final class LightsRequest.Builder {
+    method @Deprecated @NonNull public android.hardware.lights.LightsRequest.Builder setLight(@NonNull android.hardware.lights.Light, @NonNull android.hardware.lights.LightState);
+  }
+
+}
+
+package android.hardware.location {
+
+  public class ContextHubClient implements java.io.Closeable {
+    method public void close();
+    method @NonNull public android.hardware.location.ContextHubInfo getAttachedHub();
+    method @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int sendMessageToNanoApp(@NonNull android.hardware.location.NanoAppMessage);
+  }
+
+  public class ContextHubClientCallback {
+    ctor public ContextHubClientCallback();
+    method public void onClientAuthorizationChanged(@NonNull android.hardware.location.ContextHubClient, long, int);
+    method public void onHubReset(android.hardware.location.ContextHubClient);
+    method public void onMessageFromNanoApp(android.hardware.location.ContextHubClient, android.hardware.location.NanoAppMessage);
+    method public void onNanoAppAborted(android.hardware.location.ContextHubClient, long, int);
+    method public void onNanoAppDisabled(android.hardware.location.ContextHubClient, long);
+    method public void onNanoAppEnabled(android.hardware.location.ContextHubClient, long);
+    method public void onNanoAppLoaded(android.hardware.location.ContextHubClient, long);
+    method public void onNanoAppUnloaded(android.hardware.location.ContextHubClient, long);
+  }
+
+  public class ContextHubInfo implements android.os.Parcelable {
+    ctor public ContextHubInfo();
+    method public int describeContents();
+    method public byte getChreApiMajorVersion();
+    method public byte getChreApiMinorVersion();
+    method public short getChrePatchVersion();
+    method public long getChrePlatformId();
+    method public int getId();
+    method public int getMaxPacketLengthBytes();
+    method public android.hardware.location.MemoryRegion[] getMemoryRegions();
+    method public String getName();
+    method public float getPeakMips();
+    method public float getPeakPowerDrawMw();
+    method public int getPlatformVersion();
+    method public float getSleepPowerDrawMw();
+    method public int getStaticSwVersion();
+    method public float getStoppedPowerDrawMw();
+    method public int[] getSupportedSensors();
+    method public String getToolchain();
+    method public int getToolchainVersion();
+    method public String getVendor();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubInfo> CREATOR;
+  }
+
+  public class ContextHubIntentEvent {
+    method @NonNull public static android.hardware.location.ContextHubIntentEvent fromIntent(@NonNull android.content.Intent);
+    method public int getClientAuthorizationState();
+    method @NonNull public android.hardware.location.ContextHubInfo getContextHubInfo();
+    method public int getEventType();
+    method public int getNanoAppAbortCode();
+    method public long getNanoAppId();
+    method @NonNull public android.hardware.location.NanoAppMessage getNanoAppMessage();
+  }
+
+  public final class ContextHubManager {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.location.ContextHubClientCallback);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback, @NonNull java.util.concurrent.Executor);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.ContextHubClientCallback);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@Nullable android.content.Context, @NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubClient createClient(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.app.PendingIntent, long);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> disableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> enableNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
+    method @Deprecated @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int[] findNanoAppOnHub(int, @NonNull android.hardware.location.NanoAppFilter);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int[] getContextHubHandles();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubInfo getContextHubInfo(int);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public java.util.List<android.hardware.location.ContextHubInfo> getContextHubs();
+    method @Deprecated @Nullable @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.NanoAppInstanceInfo getNanoAppInstanceInfo(int);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int loadNanoApp(int, @NonNull android.hardware.location.NanoApp);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> loadNanoApp(@NonNull android.hardware.location.ContextHubInfo, @NonNull android.hardware.location.NanoAppBinary);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.util.List<android.hardware.location.NanoAppState>> queryNanoApps(@NonNull android.hardware.location.ContextHubInfo);
+    method @Deprecated public int registerCallback(@NonNull android.hardware.location.ContextHubManager.Callback);
+    method @Deprecated public int registerCallback(android.hardware.location.ContextHubManager.Callback, android.os.Handler);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int sendMessage(int, int, @NonNull android.hardware.location.ContextHubMessage);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public int unloadNanoApp(int);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_CONTEXT_HUB}) public android.hardware.location.ContextHubTransaction<java.lang.Void> unloadNanoApp(@NonNull android.hardware.location.ContextHubInfo, long);
+    method @Deprecated public int unregisterCallback(@NonNull android.hardware.location.ContextHubManager.Callback);
+    field public static final int AUTHORIZATION_DENIED = 0; // 0x0
+    field public static final int AUTHORIZATION_DENIED_GRACE_PERIOD = 1; // 0x1
+    field public static final int AUTHORIZATION_GRANTED = 2; // 0x2
+    field public static final int EVENT_CLIENT_AUTHORIZATION = 7; // 0x7
+    field public static final int EVENT_HUB_RESET = 6; // 0x6
+    field public static final int EVENT_NANOAPP_ABORTED = 4; // 0x4
+    field public static final int EVENT_NANOAPP_DISABLED = 3; // 0x3
+    field public static final int EVENT_NANOAPP_ENABLED = 2; // 0x2
+    field public static final int EVENT_NANOAPP_LOADED = 0; // 0x0
+    field public static final int EVENT_NANOAPP_MESSAGE = 5; // 0x5
+    field public static final int EVENT_NANOAPP_UNLOADED = 1; // 0x1
+    field public static final String EXTRA_CLIENT_AUTHORIZATION_STATE = "android.hardware.location.extra.CLIENT_AUTHORIZATION_STATE";
+    field public static final String EXTRA_CONTEXT_HUB_INFO = "android.hardware.location.extra.CONTEXT_HUB_INFO";
+    field public static final String EXTRA_EVENT_TYPE = "android.hardware.location.extra.EVENT_TYPE";
+    field public static final String EXTRA_MESSAGE = "android.hardware.location.extra.MESSAGE";
+    field public static final String EXTRA_NANOAPP_ABORT_CODE = "android.hardware.location.extra.NANOAPP_ABORT_CODE";
+    field public static final String EXTRA_NANOAPP_ID = "android.hardware.location.extra.NANOAPP_ID";
+  }
+
+  @Deprecated public abstract static class ContextHubManager.Callback {
+    ctor @Deprecated protected ContextHubManager.Callback();
+    method @Deprecated public abstract void onMessageReceipt(int, int, @NonNull android.hardware.location.ContextHubMessage);
+  }
+
+  @Deprecated public class ContextHubMessage implements android.os.Parcelable {
+    ctor @Deprecated public ContextHubMessage(int, int, byte[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated public byte[] getData();
+    method @Deprecated public int getMsgType();
+    method @Deprecated public int getVersion();
+    method @Deprecated public void setMsgData(byte[]);
+    method @Deprecated public void setMsgType(int);
+    method @Deprecated public void setVersion(int);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.ContextHubMessage> CREATOR;
+  }
+
+  public class ContextHubTransaction<T> {
+    method public int getType();
+    method public void setOnCompleteListener(@NonNull android.hardware.location.ContextHubTransaction.OnCompleteListener<T>, @NonNull java.util.concurrent.Executor);
+    method public void setOnCompleteListener(@NonNull android.hardware.location.ContextHubTransaction.OnCompleteListener<T>);
+    method public static String typeToString(int, boolean);
+    method public android.hardware.location.ContextHubTransaction.Response<T> waitForResponse(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    field public static final int RESULT_FAILED_AT_HUB = 5; // 0x5
+    field public static final int RESULT_FAILED_BAD_PARAMS = 2; // 0x2
+    field public static final int RESULT_FAILED_BUSY = 4; // 0x4
+    field public static final int RESULT_FAILED_HAL_UNAVAILABLE = 8; // 0x8
+    field public static final int RESULT_FAILED_SERVICE_INTERNAL_FAILURE = 7; // 0x7
+    field public static final int RESULT_FAILED_TIMEOUT = 6; // 0x6
+    field public static final int RESULT_FAILED_UNINITIALIZED = 3; // 0x3
+    field public static final int RESULT_FAILED_UNKNOWN = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int TYPE_DISABLE_NANOAPP = 3; // 0x3
+    field public static final int TYPE_ENABLE_NANOAPP = 2; // 0x2
+    field public static final int TYPE_LOAD_NANOAPP = 0; // 0x0
+    field public static final int TYPE_QUERY_NANOAPPS = 4; // 0x4
+    field public static final int TYPE_UNLOAD_NANOAPP = 1; // 0x1
+  }
+
+  @java.lang.FunctionalInterface public static interface ContextHubTransaction.OnCompleteListener<L> {
+    method public void onComplete(android.hardware.location.ContextHubTransaction<L>, android.hardware.location.ContextHubTransaction.Response<L>);
+  }
+
+  public static class ContextHubTransaction.Response<R> {
+    method public R getContents();
+    method public int getResult();
+  }
+
+  public final class GeofenceHardware {
+    method public boolean addGeofence(int, int, android.hardware.location.GeofenceHardwareRequest, android.hardware.location.GeofenceHardwareCallback);
+    method public int[] getMonitoringTypes();
+    method public int getStatusOfMonitoringType(int);
+    method public boolean pauseGeofence(int, int);
+    method public boolean registerForMonitorStateChangeCallback(int, android.hardware.location.GeofenceHardwareMonitorCallback);
+    method public boolean removeGeofence(int, int);
+    method public boolean resumeGeofence(int, int, int);
+    method public boolean unregisterForMonitorStateChangeCallback(int, android.hardware.location.GeofenceHardwareMonitorCallback);
+    field public static final int GEOFENCE_ENTERED = 1; // 0x1
+    field public static final int GEOFENCE_ERROR_ID_EXISTS = 2; // 0x2
+    field public static final int GEOFENCE_ERROR_ID_UNKNOWN = 3; // 0x3
+    field public static final int GEOFENCE_ERROR_INSUFFICIENT_MEMORY = 6; // 0x6
+    field public static final int GEOFENCE_ERROR_INVALID_TRANSITION = 4; // 0x4
+    field public static final int GEOFENCE_ERROR_TOO_MANY_GEOFENCES = 1; // 0x1
+    field public static final int GEOFENCE_EXITED = 2; // 0x2
+    field public static final int GEOFENCE_FAILURE = 5; // 0x5
+    field public static final int GEOFENCE_SUCCESS = 0; // 0x0
+    field public static final int GEOFENCE_UNCERTAIN = 4; // 0x4
+    field public static final int MONITORING_TYPE_FUSED_HARDWARE = 1; // 0x1
+    field public static final int MONITORING_TYPE_GPS_HARDWARE = 0; // 0x0
+    field public static final int MONITOR_CURRENTLY_AVAILABLE = 0; // 0x0
+    field public static final int MONITOR_CURRENTLY_UNAVAILABLE = 1; // 0x1
+    field public static final int MONITOR_UNSUPPORTED = 2; // 0x2
+    field public static final int SOURCE_TECHNOLOGY_BLUETOOTH = 16; // 0x10
+    field public static final int SOURCE_TECHNOLOGY_CELL = 8; // 0x8
+    field public static final int SOURCE_TECHNOLOGY_GNSS = 1; // 0x1
+    field public static final int SOURCE_TECHNOLOGY_SENSORS = 4; // 0x4
+    field public static final int SOURCE_TECHNOLOGY_WIFI = 2; // 0x2
+  }
+
+  public abstract class GeofenceHardwareCallback {
+    ctor public GeofenceHardwareCallback();
+    method public void onGeofenceAdd(int, int);
+    method public void onGeofencePause(int, int);
+    method public void onGeofenceRemove(int, int);
+    method public void onGeofenceResume(int, int);
+    method public void onGeofenceTransition(int, int, android.location.Location, long, int);
+  }
+
+  public abstract class GeofenceHardwareMonitorCallback {
+    ctor public GeofenceHardwareMonitorCallback();
+    method @Deprecated public void onMonitoringSystemChange(int, boolean, android.location.Location);
+    method public void onMonitoringSystemChange(android.hardware.location.GeofenceHardwareMonitorEvent);
+  }
+
+  public class GeofenceHardwareMonitorEvent implements android.os.Parcelable {
+    ctor public GeofenceHardwareMonitorEvent(int, int, int, android.location.Location);
+    method public int describeContents();
+    method public android.location.Location getLocation();
+    method public int getMonitoringStatus();
+    method public int getMonitoringType();
+    method public int getSourceTechnologies();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.GeofenceHardwareMonitorEvent> CREATOR;
+  }
+
+  public final class GeofenceHardwareRequest {
+    ctor public GeofenceHardwareRequest();
+    method public static android.hardware.location.GeofenceHardwareRequest createCircularGeofence(double, double, double);
+    method public int getLastTransition();
+    method public double getLatitude();
+    method public double getLongitude();
+    method public int getMonitorTransitions();
+    method public int getNotificationResponsiveness();
+    method public double getRadius();
+    method public int getSourceTechnologies();
+    method public int getUnknownTimer();
+    method public void setLastTransition(int);
+    method public void setMonitorTransitions(int);
+    method public void setNotificationResponsiveness(int);
+    method public void setSourceTechnologies(int);
+    method public void setUnknownTimer(int);
+  }
+
+  public class MemoryRegion implements android.os.Parcelable {
+    ctor public MemoryRegion(android.os.Parcel);
+    method public int describeContents();
+    method public int getCapacityBytes();
+    method public int getFreeCapacityBytes();
+    method public boolean isExecutable();
+    method public boolean isReadable();
+    method public boolean isWritable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.MemoryRegion> CREATOR;
+  }
+
+  @Deprecated public class NanoApp implements android.os.Parcelable {
+    ctor @Deprecated public NanoApp();
+    ctor @Deprecated public NanoApp(int, byte[]);
+    ctor @Deprecated public NanoApp(long, byte[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated public byte[] getAppBinary();
+    method @Deprecated public long getAppId();
+    method @Deprecated public int getAppVersion();
+    method @Deprecated public String getName();
+    method @Deprecated public int getNeededExecMemBytes();
+    method @Deprecated public int getNeededReadMemBytes();
+    method @Deprecated public int[] getNeededSensors();
+    method @Deprecated public int getNeededWriteMemBytes();
+    method @Deprecated public int[] getOutputEvents();
+    method @Deprecated public String getPublisher();
+    method @Deprecated public void setAppBinary(byte[]);
+    method @Deprecated public void setAppId(long);
+    method @Deprecated public void setAppVersion(int);
+    method @Deprecated public void setName(String);
+    method @Deprecated public void setNeededExecMemBytes(int);
+    method @Deprecated public void setNeededReadMemBytes(int);
+    method @Deprecated public void setNeededSensors(int[]);
+    method @Deprecated public void setNeededWriteMemBytes(int);
+    method @Deprecated public void setOutputEvents(int[]);
+    method @Deprecated public void setPublisher(String);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoApp> CREATOR;
+  }
+
+  public final class NanoAppBinary implements android.os.Parcelable {
+    ctor public NanoAppBinary(byte[]);
+    method public int describeContents();
+    method public byte[] getBinary();
+    method public byte[] getBinaryNoHeader();
+    method public int getFlags();
+    method public int getHeaderVersion();
+    method public long getHwHubType();
+    method public long getNanoAppId();
+    method public int getNanoAppVersion();
+    method public byte getTargetChreApiMajorVersion();
+    method public byte getTargetChreApiMinorVersion();
+    method public boolean hasValidHeader();
+    method public boolean isEncrypted();
+    method public boolean isSigned();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppBinary> CREATOR;
+  }
+
+  @Deprecated public class NanoAppFilter implements android.os.Parcelable {
+    ctor @Deprecated public NanoAppFilter(long, int, int, long);
+    method @Deprecated public int describeContents();
+    method @Deprecated public boolean testMatch(android.hardware.location.NanoAppInstanceInfo);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final int APP_ANY = -1; // 0xffffffff
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppFilter> CREATOR;
+    field @Deprecated public static final int FLAGS_VERSION_ANY = -1; // 0xffffffff
+    field @Deprecated public static final int FLAGS_VERSION_GREAT_THAN = 2; // 0x2
+    field @Deprecated public static final int FLAGS_VERSION_LESS_THAN = 4; // 0x4
+    field @Deprecated public static final int FLAGS_VERSION_STRICTLY_EQUAL = 8; // 0x8
+    field @Deprecated public static final int HUB_ANY = -1; // 0xffffffff
+    field @Deprecated public static final int VENDOR_ANY = -1; // 0xffffffff
+  }
+
+  @Deprecated public class NanoAppInstanceInfo implements android.os.Parcelable {
+    ctor @Deprecated public NanoAppInstanceInfo();
+    method @Deprecated public int describeContents();
+    method @Deprecated public long getAppId();
+    method @Deprecated public int getAppVersion();
+    method @Deprecated public int getContexthubId();
+    method @Deprecated public int getHandle();
+    method @Deprecated public String getName();
+    method @Deprecated public int getNeededExecMemBytes();
+    method @Deprecated public int getNeededReadMemBytes();
+    method @Deprecated @NonNull public int[] getNeededSensors();
+    method @Deprecated public int getNeededWriteMemBytes();
+    method @Deprecated @NonNull public int[] getOutputEvents();
+    method @Deprecated public String getPublisher();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppInstanceInfo> CREATOR;
+  }
+
+  public final class NanoAppMessage implements android.os.Parcelable {
+    method public static android.hardware.location.NanoAppMessage createMessageFromNanoApp(long, int, byte[], boolean);
+    method public static android.hardware.location.NanoAppMessage createMessageToNanoApp(long, int, byte[]);
+    method public int describeContents();
+    method public byte[] getMessageBody();
+    method public int getMessageType();
+    method public long getNanoAppId();
+    method public boolean isBroadcastMessage();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppMessage> CREATOR;
+  }
+
+  public final class NanoAppState implements android.os.Parcelable {
+    ctor public NanoAppState(long, int, boolean);
+    ctor public NanoAppState(long, int, boolean, @NonNull java.util.List<java.lang.String>);
+    method public int describeContents();
+    method public long getNanoAppId();
+    method @NonNull public java.util.List<java.lang.String> getNanoAppPermissions();
+    method public long getNanoAppVersion();
+    method public boolean isEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.location.NanoAppState> CREATOR;
+  }
+
+}
+
+package android.hardware.radio {
+
+  public final class Announcement implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.hardware.radio.ProgramSelector getSelector();
+    method public int getType();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getVendorInfo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.Announcement> CREATOR;
+    field public static final int TYPE_EMERGENCY = 1; // 0x1
+    field public static final int TYPE_EVENT = 6; // 0x6
+    field public static final int TYPE_MISC = 8; // 0x8
+    field public static final int TYPE_NEWS = 5; // 0x5
+    field public static final int TYPE_SPORT = 7; // 0x7
+    field public static final int TYPE_TRAFFIC = 3; // 0x3
+    field public static final int TYPE_WARNING = 2; // 0x2
+    field public static final int TYPE_WEATHER = 4; // 0x4
+  }
+
+  public static interface Announcement.OnListUpdatedListener {
+    method public void onListUpdated(java.util.Collection<android.hardware.radio.Announcement>);
+  }
+
+  public final class ProgramList implements java.lang.AutoCloseable {
+    method public void addOnCompleteListener(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.radio.ProgramList.OnCompleteListener);
+    method public void addOnCompleteListener(@NonNull android.hardware.radio.ProgramList.OnCompleteListener);
+    method public void close();
+    method @Nullable public android.hardware.radio.RadioManager.ProgramInfo get(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+    method public void registerListCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.radio.ProgramList.ListCallback);
+    method public void registerListCallback(@NonNull android.hardware.radio.ProgramList.ListCallback);
+    method public void removeOnCompleteListener(@NonNull android.hardware.radio.ProgramList.OnCompleteListener);
+    method @NonNull public java.util.List<android.hardware.radio.RadioManager.ProgramInfo> toList();
+    method public void unregisterListCallback(@NonNull android.hardware.radio.ProgramList.ListCallback);
+  }
+
+  public static final class ProgramList.Filter implements android.os.Parcelable {
+    ctor public ProgramList.Filter(@NonNull java.util.Set<java.lang.Integer>, @NonNull java.util.Set<android.hardware.radio.ProgramSelector.Identifier>, boolean, boolean);
+    method public boolean areCategoriesIncluded();
+    method public boolean areModificationsExcluded();
+    method public int describeContents();
+    method @NonNull public java.util.Set<java.lang.Integer> getIdentifierTypes();
+    method @NonNull public java.util.Set<android.hardware.radio.ProgramSelector.Identifier> getIdentifiers();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramList.Filter> CREATOR;
+  }
+
+  public abstract static class ProgramList.ListCallback {
+    ctor public ProgramList.ListCallback();
+    method public void onItemChanged(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+    method public void onItemRemoved(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+  }
+
+  public static interface ProgramList.OnCompleteListener {
+    method public void onComplete();
+  }
+
+  public final class ProgramSelector implements android.os.Parcelable {
+    ctor public ProgramSelector(@android.hardware.radio.ProgramSelector.ProgramType int, @NonNull android.hardware.radio.ProgramSelector.Identifier, @Nullable android.hardware.radio.ProgramSelector.Identifier[], @Nullable long[]);
+    method @NonNull public static android.hardware.radio.ProgramSelector createAmFmSelector(@android.hardware.radio.RadioManager.Band int, int);
+    method @NonNull public static android.hardware.radio.ProgramSelector createAmFmSelector(@android.hardware.radio.RadioManager.Band int, int, int);
+    method public int describeContents();
+    method @NonNull public android.hardware.radio.ProgramSelector.Identifier[] getAllIds(@android.hardware.radio.ProgramSelector.IdentifierType int);
+    method public long getFirstId(@android.hardware.radio.ProgramSelector.IdentifierType int);
+    method @NonNull public android.hardware.radio.ProgramSelector.Identifier getPrimaryId();
+    method @Deprecated @android.hardware.radio.ProgramSelector.ProgramType public int getProgramType();
+    method @NonNull public android.hardware.radio.ProgramSelector.Identifier[] getSecondaryIds();
+    method @Deprecated @NonNull public long[] getVendorIds();
+    method @NonNull public android.hardware.radio.ProgramSelector withSecondaryPreferred(@NonNull android.hardware.radio.ProgramSelector.Identifier);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector> CREATOR;
+    field public static final int IDENTIFIER_TYPE_AMFM_FREQUENCY = 1; // 0x1
+    field public static final int IDENTIFIER_TYPE_DAB_ENSEMBLE = 6; // 0x6
+    field public static final int IDENTIFIER_TYPE_DAB_FREQUENCY = 8; // 0x8
+    field public static final int IDENTIFIER_TYPE_DAB_SCID = 7; // 0x7
+    field public static final int IDENTIFIER_TYPE_DAB_SIDECC = 5; // 0x5
+    field public static final int IDENTIFIER_TYPE_DAB_SID_EXT = 5; // 0x5
+    field public static final int IDENTIFIER_TYPE_DRMO_FREQUENCY = 10; // 0xa
+    field @Deprecated public static final int IDENTIFIER_TYPE_DRMO_MODULATION = 11; // 0xb
+    field public static final int IDENTIFIER_TYPE_DRMO_SERVICE_ID = 9; // 0x9
+    field public static final int IDENTIFIER_TYPE_HD_STATION_ID_EXT = 3; // 0x3
+    field public static final int IDENTIFIER_TYPE_HD_STATION_NAME = 10004; // 0x2714
+    field @Deprecated public static final int IDENTIFIER_TYPE_HD_SUBCHANNEL = 4; // 0x4
+    field public static final int IDENTIFIER_TYPE_INVALID = 0; // 0x0
+    field public static final int IDENTIFIER_TYPE_RDS_PI = 2; // 0x2
+    field public static final int IDENTIFIER_TYPE_SXM_CHANNEL = 13; // 0xd
+    field public static final int IDENTIFIER_TYPE_SXM_SERVICE_ID = 12; // 0xc
+    field public static final int IDENTIFIER_TYPE_VENDOR_END = 1999; // 0x7cf
+    field @Deprecated public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_END = 1999; // 0x7cf
+    field @Deprecated public static final int IDENTIFIER_TYPE_VENDOR_PRIMARY_START = 1000; // 0x3e8
+    field public static final int IDENTIFIER_TYPE_VENDOR_START = 1000; // 0x3e8
+    field @Deprecated public static final int PROGRAM_TYPE_AM = 1; // 0x1
+    field @Deprecated public static final int PROGRAM_TYPE_AM_HD = 3; // 0x3
+    field @Deprecated public static final int PROGRAM_TYPE_DAB = 5; // 0x5
+    field @Deprecated public static final int PROGRAM_TYPE_DRMO = 6; // 0x6
+    field @Deprecated public static final int PROGRAM_TYPE_FM = 2; // 0x2
+    field @Deprecated public static final int PROGRAM_TYPE_FM_HD = 4; // 0x4
+    field @Deprecated public static final int PROGRAM_TYPE_INVALID = 0; // 0x0
+    field @Deprecated public static final int PROGRAM_TYPE_SXM = 7; // 0x7
+    field @Deprecated public static final int PROGRAM_TYPE_VENDOR_END = 1999; // 0x7cf
+    field @Deprecated public static final int PROGRAM_TYPE_VENDOR_START = 1000; // 0x3e8
+  }
+
+  public static final class ProgramSelector.Identifier implements android.os.Parcelable {
+    ctor public ProgramSelector.Identifier(@android.hardware.radio.ProgramSelector.IdentifierType int, long);
+    method public int describeContents();
+    method @android.hardware.radio.ProgramSelector.IdentifierType public int getType();
+    method public long getValue();
+    method public boolean isCategoryType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.ProgramSelector.Identifier> CREATOR;
+  }
+
+  @IntDef(prefix={"IDENTIFIER_TYPE_"}, value={android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_INVALID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_AMFM_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_RDS_PI, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_STATION_ID_EXT, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_SUBCHANNEL, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_HD_STATION_NAME, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SID_EXT, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SIDECC, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_ENSEMBLE, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_SCID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DAB_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_SERVICE_ID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_FREQUENCY, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_DRMO_MODULATION, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_SXM_SERVICE_ID, android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_SXM_CHANNEL}) @IntRange(from=android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_VENDOR_START, to=android.hardware.radio.ProgramSelector.IDENTIFIER_TYPE_VENDOR_END) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ProgramSelector.IdentifierType {
+  }
+
+  @Deprecated @IntDef(prefix={"PROGRAM_TYPE_"}, value={android.hardware.radio.ProgramSelector.PROGRAM_TYPE_INVALID, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_AM, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_FM, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_AM_HD, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_FM_HD, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_DAB, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_DRMO, android.hardware.radio.ProgramSelector.PROGRAM_TYPE_SXM}) @IntRange(from=android.hardware.radio.ProgramSelector.PROGRAM_TYPE_VENDOR_START, to=android.hardware.radio.ProgramSelector.PROGRAM_TYPE_VENDOR_END) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ProgramSelector.ProgramType {
+  }
+
+  public class RadioManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public void addAnnouncementListener(@NonNull java.util.Set<java.lang.Integer>, @NonNull android.hardware.radio.Announcement.OnListUpdatedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public void addAnnouncementListener(@NonNull java.util.concurrent.Executor, @NonNull java.util.Set<java.lang.Integer>, @NonNull android.hardware.radio.Announcement.OnListUpdatedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public int listModules(java.util.List<android.hardware.radio.RadioManager.ModuleProperties>);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public android.hardware.radio.RadioTuner openTuner(int, android.hardware.radio.RadioManager.BandConfig, boolean, android.hardware.radio.RadioTuner.Callback, android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_BROADCAST_RADIO) public void removeAnnouncementListener(@NonNull android.hardware.radio.Announcement.OnListUpdatedListener);
+    field public static final int BAND_AM = 0; // 0x0
+    field public static final int BAND_AM_HD = 3; // 0x3
+    field public static final int BAND_FM = 1; // 0x1
+    field public static final int BAND_FM_HD = 2; // 0x2
+    field public static final int BAND_INVALID = -1; // 0xffffffff
+    field public static final int CLASS_AM_FM = 0; // 0x0
+    field public static final int CLASS_DT = 2; // 0x2
+    field public static final int CLASS_SAT = 1; // 0x1
+    field public static final int CONFIG_DAB_DAB_LINKING = 6; // 0x6
+    field public static final int CONFIG_DAB_DAB_SOFT_LINKING = 8; // 0x8
+    field public static final int CONFIG_DAB_FM_LINKING = 7; // 0x7
+    field public static final int CONFIG_DAB_FM_SOFT_LINKING = 9; // 0x9
+    field public static final int CONFIG_FORCE_ANALOG = 2; // 0x2
+    field public static final int CONFIG_FORCE_DIGITAL = 3; // 0x3
+    field public static final int CONFIG_FORCE_MONO = 1; // 0x1
+    field public static final int CONFIG_RDS_AF = 4; // 0x4
+    field public static final int CONFIG_RDS_REG = 5; // 0x5
+    field public static final int REGION_ITU_1 = 0; // 0x0
+    field public static final int REGION_ITU_2 = 1; // 0x1
+    field public static final int REGION_JAPAN = 3; // 0x3
+    field public static final int REGION_KOREA = 4; // 0x4
+    field public static final int REGION_OIRT = 2; // 0x2
+    field public static final int STATUS_BAD_VALUE = -22; // 0xffffffea
+    field public static final int STATUS_DEAD_OBJECT = -32; // 0xffffffe0
+    field public static final int STATUS_ERROR = -2147483648; // 0x80000000
+    field public static final int STATUS_INVALID_OPERATION = -38; // 0xffffffda
+    field public static final int STATUS_NO_INIT = -19; // 0xffffffed
+    field public static final int STATUS_OK = 0; // 0x0
+    field public static final int STATUS_PERMISSION_DENIED = -1; // 0xffffffff
+    field public static final int STATUS_TIMED_OUT = -110; // 0xffffff92
+  }
+
+  public static class RadioManager.AmBandConfig extends android.hardware.radio.RadioManager.BandConfig {
+    method public boolean getStereo();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandConfig> CREATOR;
+  }
+
+  public static class RadioManager.AmBandConfig.Builder {
+    ctor public RadioManager.AmBandConfig.Builder(android.hardware.radio.RadioManager.AmBandDescriptor);
+    ctor public RadioManager.AmBandConfig.Builder(android.hardware.radio.RadioManager.AmBandConfig);
+    method public android.hardware.radio.RadioManager.AmBandConfig build();
+    method public android.hardware.radio.RadioManager.AmBandConfig.Builder setStereo(boolean);
+  }
+
+  public static class RadioManager.AmBandDescriptor extends android.hardware.radio.RadioManager.BandDescriptor {
+    method public boolean isStereoSupported();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.AmBandDescriptor> CREATOR;
+  }
+
+  @IntDef(prefix={"BAND_"}, value={android.hardware.radio.RadioManager.BAND_INVALID, android.hardware.radio.RadioManager.BAND_AM, android.hardware.radio.RadioManager.BAND_FM, android.hardware.radio.RadioManager.BAND_AM_HD, android.hardware.radio.RadioManager.BAND_FM_HD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface RadioManager.Band {
+  }
+
+  public static class RadioManager.BandConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getLowerLimit();
+    method public int getRegion();
+    method public int getSpacing();
+    method public int getType();
+    method public int getUpperLimit();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandConfig> CREATOR;
+  }
+
+  public static class RadioManager.BandDescriptor implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getLowerLimit();
+    method public int getRegion();
+    method public int getSpacing();
+    method public int getType();
+    method public int getUpperLimit();
+    method public boolean isAmBand();
+    method public boolean isFmBand();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.BandDescriptor> CREATOR;
+  }
+
+  public static class RadioManager.FmBandConfig extends android.hardware.radio.RadioManager.BandConfig {
+    method public boolean getAf();
+    method public boolean getEa();
+    method public boolean getRds();
+    method public boolean getStereo();
+    method public boolean getTa();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandConfig> CREATOR;
+  }
+
+  public static class RadioManager.FmBandConfig.Builder {
+    ctor public RadioManager.FmBandConfig.Builder(android.hardware.radio.RadioManager.FmBandDescriptor);
+    ctor public RadioManager.FmBandConfig.Builder(android.hardware.radio.RadioManager.FmBandConfig);
+    method public android.hardware.radio.RadioManager.FmBandConfig build();
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setAf(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setEa(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setRds(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setStereo(boolean);
+    method public android.hardware.radio.RadioManager.FmBandConfig.Builder setTa(boolean);
+  }
+
+  public static class RadioManager.FmBandDescriptor extends android.hardware.radio.RadioManager.BandDescriptor {
+    method public boolean isAfSupported();
+    method public boolean isEaSupported();
+    method public boolean isRdsSupported();
+    method public boolean isStereoSupported();
+    method public boolean isTaSupported();
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.FmBandDescriptor> CREATOR;
+  }
+
+  public static class RadioManager.ModuleProperties implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.hardware.radio.RadioManager.BandDescriptor[] getBands();
+    method public int getClassId();
+    method @Nullable public java.util.Map<java.lang.String,java.lang.Integer> getDabFrequencyTable();
+    method public int getId();
+    method public String getImplementor();
+    method public int getNumAudioSources();
+    method public int getNumTuners();
+    method public String getProduct();
+    method public String getSerial();
+    method @NonNull public String getServiceName();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getVendorInfo();
+    method public String getVersion();
+    method public boolean isBackgroundScanningSupported();
+    method public boolean isCaptureSupported();
+    method public boolean isInitializationRequired();
+    method public boolean isProgramIdentifierSupported(@android.hardware.radio.ProgramSelector.IdentifierType int);
+    method public boolean isProgramTypeSupported(@android.hardware.radio.ProgramSelector.ProgramType int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ModuleProperties> CREATOR;
+  }
+
+  public static class RadioManager.ProgramInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Deprecated public int getChannel();
+    method @Nullable public android.hardware.radio.ProgramSelector.Identifier getLogicallyTunedTo();
+    method public android.hardware.radio.RadioMetadata getMetadata();
+    method @Nullable public android.hardware.radio.ProgramSelector.Identifier getPhysicallyTunedTo();
+    method @Nullable public java.util.Collection<android.hardware.radio.ProgramSelector.Identifier> getRelatedContent();
+    method @NonNull public android.hardware.radio.ProgramSelector getSelector();
+    method public int getSignalStrength();
+    method @Deprecated public int getSubChannel();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getVendorInfo();
+    method @Deprecated public boolean isDigital();
+    method public boolean isLive();
+    method public boolean isMuted();
+    method public boolean isStereo();
+    method public boolean isTrafficAnnouncementActive();
+    method public boolean isTrafficProgram();
+    method public boolean isTuned();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioManager.ProgramInfo> CREATOR;
+  }
+
+  public final class RadioMetadata implements android.os.Parcelable {
+    method public boolean containsKey(String);
+    method public int describeContents();
+    method @Deprecated public android.graphics.Bitmap getBitmap(String);
+    method public android.hardware.radio.RadioMetadata.Clock getClock(String);
+    method public int getInt(String);
+    method public String getString(String);
+    method public java.util.Set<java.lang.String> keySet();
+    method public int size();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata> CREATOR;
+    field public static final String METADATA_KEY_ALBUM = "android.hardware.radio.metadata.ALBUM";
+    field public static final String METADATA_KEY_ART = "android.hardware.radio.metadata.ART";
+    field public static final String METADATA_KEY_ARTIST = "android.hardware.radio.metadata.ARTIST";
+    field public static final String METADATA_KEY_CLOCK = "android.hardware.radio.metadata.CLOCK";
+    field public static final String METADATA_KEY_DAB_COMPONENT_NAME = "android.hardware.radio.metadata.DAB_COMPONENT_NAME";
+    field public static final String METADATA_KEY_DAB_COMPONENT_NAME_SHORT = "android.hardware.radio.metadata.DAB_COMPONENT_NAME_SHORT";
+    field public static final String METADATA_KEY_DAB_ENSEMBLE_NAME = "android.hardware.radio.metadata.DAB_ENSEMBLE_NAME";
+    field public static final String METADATA_KEY_DAB_ENSEMBLE_NAME_SHORT = "android.hardware.radio.metadata.DAB_ENSEMBLE_NAME_SHORT";
+    field public static final String METADATA_KEY_DAB_SERVICE_NAME = "android.hardware.radio.metadata.DAB_SERVICE_NAME";
+    field public static final String METADATA_KEY_DAB_SERVICE_NAME_SHORT = "android.hardware.radio.metadata.DAB_SERVICE_NAME_SHORT";
+    field public static final String METADATA_KEY_GENRE = "android.hardware.radio.metadata.GENRE";
+    field public static final String METADATA_KEY_ICON = "android.hardware.radio.metadata.ICON";
+    field public static final String METADATA_KEY_PROGRAM_NAME = "android.hardware.radio.metadata.PROGRAM_NAME";
+    field public static final String METADATA_KEY_RBDS_PTY = "android.hardware.radio.metadata.RBDS_PTY";
+    field public static final String METADATA_KEY_RDS_PI = "android.hardware.radio.metadata.RDS_PI";
+    field public static final String METADATA_KEY_RDS_PS = "android.hardware.radio.metadata.RDS_PS";
+    field public static final String METADATA_KEY_RDS_PTY = "android.hardware.radio.metadata.RDS_PTY";
+    field public static final String METADATA_KEY_RDS_RT = "android.hardware.radio.metadata.RDS_RT";
+    field public static final String METADATA_KEY_TITLE = "android.hardware.radio.metadata.TITLE";
+  }
+
+  public static final class RadioMetadata.Builder {
+    ctor public RadioMetadata.Builder();
+    ctor public RadioMetadata.Builder(android.hardware.radio.RadioMetadata);
+    method public android.hardware.radio.RadioMetadata build();
+    method public android.hardware.radio.RadioMetadata.Builder putBitmap(String, android.graphics.Bitmap);
+    method public android.hardware.radio.RadioMetadata.Builder putClock(String, long, int);
+    method public android.hardware.radio.RadioMetadata.Builder putInt(String, int);
+    method public android.hardware.radio.RadioMetadata.Builder putString(String, String);
+  }
+
+  public static final class RadioMetadata.Clock implements android.os.Parcelable {
+    ctor public RadioMetadata.Clock(long, int);
+    method public int describeContents();
+    method public int getTimezoneOffsetMinutes();
+    method public long getUtcEpochSeconds();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.radio.RadioMetadata.Clock> CREATOR;
+  }
+
+  public abstract class RadioTuner {
+    ctor public RadioTuner();
+    method public abstract int cancel();
+    method public abstract void cancelAnnouncement();
+    method public abstract void close();
+    method @Deprecated public abstract int getConfiguration(android.hardware.radio.RadioManager.BandConfig[]);
+    method @Nullable public android.hardware.radio.ProgramList getDynamicProgramList(@Nullable android.hardware.radio.ProgramList.Filter);
+    method public abstract boolean getMute();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getParameters(@NonNull java.util.List<java.lang.String>);
+    method @Deprecated public abstract int getProgramInformation(android.hardware.radio.RadioManager.ProgramInfo[]);
+    method @Deprecated @NonNull public abstract java.util.List<android.hardware.radio.RadioManager.ProgramInfo> getProgramList(@Nullable java.util.Map<java.lang.String,java.lang.String>);
+    method public abstract boolean hasControl();
+    method @Deprecated public abstract boolean isAnalogForced();
+    method @Deprecated public abstract boolean isAntennaConnected();
+    method public boolean isConfigFlagSet(int);
+    method public boolean isConfigFlagSupported(int);
+    method public abstract int scan(int, boolean);
+    method @Deprecated public abstract void setAnalogForced(boolean);
+    method public void setConfigFlag(int, boolean);
+    method @Deprecated public abstract int setConfiguration(android.hardware.radio.RadioManager.BandConfig);
+    method public abstract int setMute(boolean);
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> setParameters(@NonNull java.util.Map<java.lang.String,java.lang.String>);
+    method public abstract boolean startBackgroundScan();
+    method public abstract int step(int, boolean);
+    method @Deprecated public abstract int tune(int, int);
+    method public abstract void tune(@NonNull android.hardware.radio.ProgramSelector);
+    field public static final int DIRECTION_DOWN = 1; // 0x1
+    field public static final int DIRECTION_UP = 0; // 0x0
+    field @Deprecated public static final int ERROR_BACKGROUND_SCAN_FAILED = 6; // 0x6
+    field @Deprecated public static final int ERROR_BACKGROUND_SCAN_UNAVAILABLE = 5; // 0x5
+    field @Deprecated public static final int ERROR_CANCELLED = 2; // 0x2
+    field @Deprecated public static final int ERROR_CONFIG = 4; // 0x4
+    field @Deprecated public static final int ERROR_HARDWARE_FAILURE = 0; // 0x0
+    field @Deprecated public static final int ERROR_SCAN_TIMEOUT = 3; // 0x3
+    field @Deprecated public static final int ERROR_SERVER_DIED = 1; // 0x1
+  }
+
+  public abstract static class RadioTuner.Callback {
+    ctor public RadioTuner.Callback();
+    method public void onAntennaState(boolean);
+    method public void onBackgroundScanAvailabilityChange(boolean);
+    method public void onBackgroundScanComplete();
+    method @Deprecated public void onConfigurationChanged(android.hardware.radio.RadioManager.BandConfig);
+    method public void onControlChanged(boolean);
+    method public void onEmergencyAnnouncement(boolean);
+    method @Deprecated public void onError(int);
+    method @Deprecated public void onMetadataChanged(android.hardware.radio.RadioMetadata);
+    method public void onParametersUpdated(@NonNull java.util.Map<java.lang.String,java.lang.String>);
+    method public void onProgramInfoChanged(android.hardware.radio.RadioManager.ProgramInfo);
+    method public void onProgramListChanged();
+    method public void onTrafficAnnouncement(boolean);
+    method public void onTuneFailed(int, @Nullable android.hardware.radio.ProgramSelector);
+  }
+
+}
+
+package android.hardware.soundtrigger {
+
+  public class SoundTrigger {
+    field public static final int RECOGNITION_MODE_GENERIC = 8; // 0x8
+    field public static final int RECOGNITION_MODE_USER_AUTHENTICATION = 4; // 0x4
+    field public static final int RECOGNITION_MODE_USER_IDENTIFICATION = 2; // 0x2
+    field public static final int RECOGNITION_MODE_VOICE_TRIGGER = 1; // 0x1
+    field public static final int STATUS_OK = 0; // 0x0
+  }
+
+  public static final class SoundTrigger.Keyphrase implements android.os.Parcelable {
+    ctor public SoundTrigger.Keyphrase(int, int, @NonNull java.util.Locale, @NonNull String, @Nullable int[]);
+    method public int getId();
+    method @NonNull public java.util.Locale getLocale();
+    method public int getRecognitionModes();
+    method @NonNull public String getText();
+    method @NonNull public int[] getUsers();
+    method @NonNull public static android.hardware.soundtrigger.SoundTrigger.Keyphrase readFromParcel(@NonNull android.os.Parcel);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.Keyphrase> CREATOR;
+  }
+
+  public static final class SoundTrigger.KeyphraseSoundModel extends android.hardware.soundtrigger.SoundTrigger.SoundModel implements android.os.Parcelable {
+    ctor public SoundTrigger.KeyphraseSoundModel(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], @Nullable android.hardware.soundtrigger.SoundTrigger.Keyphrase[], int);
+    ctor public SoundTrigger.KeyphraseSoundModel(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], @Nullable android.hardware.soundtrigger.SoundTrigger.Keyphrase[]);
+    method @NonNull public android.hardware.soundtrigger.SoundTrigger.Keyphrase[] getKeyphrases();
+    method @NonNull public static android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel readFromParcel(@NonNull android.os.Parcel);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel> CREATOR;
+  }
+
+  public static final class SoundTrigger.ModelParamRange implements android.os.Parcelable {
+    method public int getEnd();
+    method public int getStart();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModelParamRange> CREATOR;
+  }
+
+  public static final class SoundTrigger.ModuleProperties implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAudioCapabilities();
+    method @NonNull public String getDescription();
+    method public int getId();
+    method @NonNull public String getImplementor();
+    method public int getMaxBufferMillis();
+    method public int getMaxKeyphrases();
+    method public int getMaxSoundModels();
+    method public int getMaxUsers();
+    method public int getPowerConsumptionMw();
+    method public int getRecognitionModes();
+    method @NonNull public String getSupportedModelArch();
+    method @NonNull public java.util.UUID getUuid();
+    method public int getVersion();
+    method public boolean isCaptureTransitionSupported();
+    method public boolean isConcurrentCaptureSupported();
+    method public boolean isTriggerReturnedInEvent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
+    field public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.SoundTrigger.ModuleProperties> CREATOR;
+  }
+
+  public static class SoundTrigger.RecognitionEvent {
+    method @Nullable public android.media.AudioFormat getCaptureFormat();
+    method public int getCaptureSession();
+    method public byte[] getData();
+    method public boolean isCaptureAvailable();
+  }
+
+  public static class SoundTrigger.SoundModel {
+    method @NonNull public byte[] getData();
+    method public int getType();
+    method @NonNull public java.util.UUID getUuid();
+    method @NonNull public java.util.UUID getVendorUuid();
+    method public int getVersion();
+    field public static final int TYPE_GENERIC_SOUND = 1; // 0x1
+    field public static final int TYPE_KEYPHRASE = 0; // 0x0
+  }
+
+}
+
+package android.hardware.usb {
+
+  public class UsbDeviceConnection {
+    method public boolean resetDevice();
+  }
+
+  public class UsbManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public long getCurrentFunctions();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_USB) public java.util.List<android.hardware.usb.UsbPort> getPorts();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void grantPermission(android.hardware.usb.UsbDevice, String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void resetUsbGadget();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void setCurrentFunctions(long);
+    field @RequiresPermission(android.Manifest.permission.MANAGE_USB) public static final String ACTION_USB_ACCESSORY_HANDSHAKE = "android.hardware.usb.action.USB_ACCESSORY_HANDSHAKE";
+    field @RequiresPermission(android.Manifest.permission.MANAGE_USB) public static final String ACTION_USB_PORT_CHANGED = "android.hardware.usb.action.USB_PORT_CHANGED";
+    field public static final String ACTION_USB_STATE = "android.hardware.usb.action.USB_STATE";
+    field public static final String EXTRA_ACCESSORY_HANDSHAKE_END = "android.hardware.usb.extra.ACCESSORY_HANDSHAKE_END";
+    field public static final String EXTRA_ACCESSORY_START = "android.hardware.usb.extra.ACCESSORY_START";
+    field public static final String EXTRA_ACCESSORY_STRING_COUNT = "android.hardware.usb.extra.ACCESSORY_STRING_COUNT";
+    field public static final String EXTRA_ACCESSORY_UEVENT_TIME = "android.hardware.usb.extra.ACCESSORY_UEVENT_TIME";
+    field public static final long FUNCTION_ACCESSORY = 2L; // 0x2L
+    field public static final long FUNCTION_ADB = 1L; // 0x1L
+    field public static final long FUNCTION_AUDIO_SOURCE = 64L; // 0x40L
+    field public static final long FUNCTION_MIDI = 8L; // 0x8L
+    field public static final long FUNCTION_MTP = 4L; // 0x4L
+    field public static final long FUNCTION_NCM = 1024L; // 0x400L
+    field public static final long FUNCTION_NONE = 0L; // 0x0L
+    field public static final long FUNCTION_PTP = 16L; // 0x10L
+    field public static final long FUNCTION_RNDIS = 32L; // 0x20L
+    field public static final String USB_CONFIGURED = "configured";
+    field public static final String USB_CONNECTED = "connected";
+    field public static final String USB_FUNCTION_NCM = "ncm";
+    field public static final String USB_FUNCTION_RNDIS = "rndis";
+  }
+
+  public final class UsbPort {
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_USB) public android.hardware.usb.UsbPortStatus getStatus();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USB) public void setRoles(int, int);
+  }
+
+  public final class UsbPortStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCurrentDataRole();
+    method public int getCurrentMode();
+    method public int getCurrentPowerRole();
+    method public int getSupportedRoleCombinations();
+    method public boolean isConnected();
+    method public boolean isRoleCombinationSupported(int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.usb.UsbPortStatus> CREATOR;
+    field public static final int DATA_ROLE_DEVICE = 2; // 0x2
+    field public static final int DATA_ROLE_HOST = 1; // 0x1
+    field public static final int DATA_ROLE_NONE = 0; // 0x0
+    field public static final int MODE_AUDIO_ACCESSORY = 4; // 0x4
+    field public static final int MODE_DEBUG_ACCESSORY = 8; // 0x8
+    field public static final int MODE_DFP = 2; // 0x2
+    field public static final int MODE_NONE = 0; // 0x0
+    field public static final int MODE_UFP = 1; // 0x1
+    field public static final int POWER_ROLE_NONE = 0; // 0x0
+    field public static final int POWER_ROLE_SINK = 2; // 0x2
+    field public static final int POWER_ROLE_SOURCE = 1; // 0x1
+  }
+
+}
+
+package android.location {
+
+  public abstract class BatchedLocationCallback {
+    ctor public BatchedLocationCallback();
+    method public void onLocationBatch(java.util.List<android.location.Location>);
+  }
+
+  public final class CorrelationVector implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0f) public double getFrequencyOffsetMetersPerSecond();
+    method @NonNull public int[] getMagnitude();
+    method @FloatRange(from=0.0f) public double getSamplingStartMeters();
+    method @FloatRange(from=0.0f, fromInclusive=false) public double getSamplingWidthMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.CorrelationVector> CREATOR;
+  }
+
+  public static final class CorrelationVector.Builder {
+    ctor public CorrelationVector.Builder();
+    method @NonNull public android.location.CorrelationVector build();
+    method @NonNull public android.location.CorrelationVector.Builder setFrequencyOffsetMetersPerSecond(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.CorrelationVector.Builder setMagnitude(@NonNull int[]);
+    method @NonNull public android.location.CorrelationVector.Builder setSamplingStartMeters(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.CorrelationVector.Builder setSamplingWidthMeters(@FloatRange(from=0.0f, fromInclusive=false) double);
+  }
+
+  public final class GnssCapabilities implements android.os.Parcelable {
+    method public boolean hasGeofencing();
+    method public boolean hasLowPowerMode();
+    method public boolean hasMeasurementCorrections();
+    method public boolean hasMeasurementCorrectionsExcessPathLength();
+    method public boolean hasMeasurementCorrectionsForDriving();
+    method public boolean hasMeasurementCorrectionsLosSats();
+    method @Deprecated public boolean hasMeasurementCorrectionsReflectingPane();
+    method public boolean hasMeasurementCorrectionsReflectingPlane();
+    method public boolean hasMeasurementCorrelationVectors();
+    method @Deprecated public boolean hasNavMessages();
+    method @Deprecated public boolean hasSatelliteBlacklist();
+    method public boolean hasSatelliteBlocklist();
+    method public boolean hasSatellitePvt();
+  }
+
+  public static final class GnssCapabilities.Builder {
+    method @NonNull public android.location.GnssCapabilities.Builder setHasGeofencing(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasLowPowerMode(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrections(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsExcessPathLength(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsForDriving(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsLosSats(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrectionsReflectingPlane(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasMeasurementCorrelationVectors(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasSatelliteBlocklist(boolean);
+    method @NonNull public android.location.GnssCapabilities.Builder setHasSatellitePvt(boolean);
+  }
+
+  public final class GnssMeasurement implements android.os.Parcelable {
+    method @Nullable public java.util.Collection<android.location.CorrelationVector> getCorrelationVectors();
+    method @Nullable public android.location.SatellitePvt getSatellitePvt();
+    method public boolean hasCorrelationVectors();
+    method public boolean hasSatellitePvt();
+  }
+
+  public final class GnssMeasurementCorrections implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=-1000.0F, to=10000.0f) public double getAltitudeMeters();
+    method @FloatRange(from=0.0f, to=360.0f) public float getEnvironmentBearingDegrees();
+    method @FloatRange(from=0.0f, to=180.0f) public float getEnvironmentBearingUncertaintyDegrees();
+    method @FloatRange(from=0.0f) public double getHorizontalPositionUncertaintyMeters();
+    method @FloatRange(from=-90.0F, to=90.0f) public double getLatitudeDegrees();
+    method @FloatRange(from=-180.0F, to=180.0f) public double getLongitudeDegrees();
+    method @NonNull public java.util.List<android.location.GnssSingleSatCorrection> getSingleSatelliteCorrectionList();
+    method @IntRange(from=0) public long getToaGpsNanosecondsOfWeek();
+    method @FloatRange(from=0.0f) public double getVerticalPositionUncertaintyMeters();
+    method public boolean hasEnvironmentBearing();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.location.GnssMeasurementCorrections> CREATOR;
+  }
+
+  public static final class GnssMeasurementCorrections.Builder {
+    ctor public GnssMeasurementCorrections.Builder();
+    method @NonNull public android.location.GnssMeasurementCorrections build();
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setAltitudeMeters(@FloatRange(from=-1000.0F, to=10000.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setEnvironmentBearingDegrees(@FloatRange(from=0.0f, to=360.0f) float);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setEnvironmentBearingUncertaintyDegrees(@FloatRange(from=0.0f, to=180.0f) float);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setHorizontalPositionUncertaintyMeters(@FloatRange(from=0.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setLatitudeDegrees(@FloatRange(from=-90.0F, to=90.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setLongitudeDegrees(@FloatRange(from=-180.0F, to=180.0f) double);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setSingleSatelliteCorrectionList(@NonNull java.util.List<android.location.GnssSingleSatCorrection>);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setToaGpsNanosecondsOfWeek(@IntRange(from=0) long);
+    method @NonNull public android.location.GnssMeasurementCorrections.Builder setVerticalPositionUncertaintyMeters(@FloatRange(from=0.0f) double);
+  }
+
+  public final class GnssMeasurementRequest implements android.os.Parcelable {
+    method public boolean isCorrelationVectorOutputsEnabled();
+  }
+
+  public static final class GnssMeasurementRequest.Builder {
+    method @NonNull public android.location.GnssMeasurementRequest.Builder setCorrelationVectorOutputsEnabled(boolean);
+  }
+
+  public final class GnssReflectingPlane implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=-1000.0F, to=10000.0f) public double getAltitudeMeters();
+    method @FloatRange(from=0.0f, to=360.0f) public double getAzimuthDegrees();
+    method @FloatRange(from=-90.0F, to=90.0f) public double getLatitudeDegrees();
+    method @FloatRange(from=-180.0F, to=180.0f) public double getLongitudeDegrees();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.location.GnssReflectingPlane> CREATOR;
+  }
+
+  public static final class GnssReflectingPlane.Builder {
+    ctor public GnssReflectingPlane.Builder();
+    method @NonNull public android.location.GnssReflectingPlane build();
+    method @NonNull public android.location.GnssReflectingPlane.Builder setAltitudeMeters(@FloatRange(from=-1000.0F, to=10000.0f) double);
+    method @NonNull public android.location.GnssReflectingPlane.Builder setAzimuthDegrees(@FloatRange(from=0.0f, to=360.0f) double);
+    method @NonNull public android.location.GnssReflectingPlane.Builder setLatitudeDegrees(@FloatRange(from=-90.0F, to=90.0f) double);
+    method @NonNull public android.location.GnssReflectingPlane.Builder setLongitudeDegrees(@FloatRange(from=-180.0F, to=180.0f) double);
+  }
+
+  public final class GnssRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isFullTracking();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.GnssRequest> CREATOR;
+  }
+
+  public static final class GnssRequest.Builder {
+    ctor public GnssRequest.Builder();
+    ctor public GnssRequest.Builder(@NonNull android.location.GnssRequest);
+    method @NonNull public android.location.GnssRequest build();
+    method @NonNull public android.location.GnssRequest.Builder setFullTracking(boolean);
+  }
+
+  public final class GnssSingleSatCorrection implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0f, fromInclusive=false) public float getCarrierFrequencyHz();
+    method public int getConstellationType();
+    method @FloatRange(from=0.0f) public float getExcessPathLengthMeters();
+    method @FloatRange(from=0.0f) public float getExcessPathLengthUncertaintyMeters();
+    method @FloatRange(from=0.0f, to=1.0f) public float getProbabilityLineOfSight();
+    method @Nullable public android.location.GnssReflectingPlane getReflectingPlane();
+    method @IntRange(from=0) public int getSatelliteId();
+    method public boolean hasExcessPathLength();
+    method public boolean hasExcessPathLengthUncertainty();
+    method public boolean hasReflectingPlane();
+    method public boolean hasValidSatelliteLineOfSight();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.location.GnssSingleSatCorrection> CREATOR;
+  }
+
+  public static final class GnssSingleSatCorrection.Builder {
+    ctor public GnssSingleSatCorrection.Builder();
+    method @NonNull public android.location.GnssSingleSatCorrection build();
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setCarrierFrequencyHz(@FloatRange(from=0.0f, fromInclusive=false) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setConstellationType(int);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setExcessPathLengthMeters(@FloatRange(from=0.0f) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setExcessPathLengthUncertaintyMeters(@FloatRange(from=0.0f) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setProbabilityLineOfSight(@FloatRange(from=0.0f, to=1.0f) float);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setReflectingPlane(@Nullable android.location.GnssReflectingPlane);
+    method @NonNull public android.location.GnssSingleSatCorrection.Builder setSatelliteId(@IntRange(from=0) int);
+  }
+
+  @Deprecated public class GpsClock implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public double getBiasInNs();
+    method @Deprecated public double getBiasUncertaintyInNs();
+    method @Deprecated public double getDriftInNsPerSec();
+    method @Deprecated public double getDriftUncertaintyInNsPerSec();
+    method @Deprecated public long getFullBiasInNs();
+    method @Deprecated public short getLeapSecond();
+    method @Deprecated public long getTimeInNs();
+    method @Deprecated public double getTimeUncertaintyInNs();
+    method @Deprecated public byte getType();
+    method @Deprecated public boolean hasBiasInNs();
+    method @Deprecated public boolean hasBiasUncertaintyInNs();
+    method @Deprecated public boolean hasDriftInNsPerSec();
+    method @Deprecated public boolean hasDriftUncertaintyInNsPerSec();
+    method @Deprecated public boolean hasFullBiasInNs();
+    method @Deprecated public boolean hasLeapSecond();
+    method @Deprecated public boolean hasTimeUncertaintyInNs();
+    method @Deprecated public void reset();
+    method @Deprecated public void resetBiasInNs();
+    method @Deprecated public void resetBiasUncertaintyInNs();
+    method @Deprecated public void resetDriftInNsPerSec();
+    method @Deprecated public void resetDriftUncertaintyInNsPerSec();
+    method @Deprecated public void resetFullBiasInNs();
+    method @Deprecated public void resetLeapSecond();
+    method @Deprecated public void resetTimeUncertaintyInNs();
+    method @Deprecated public void set(android.location.GpsClock);
+    method @Deprecated public void setBiasInNs(double);
+    method @Deprecated public void setBiasUncertaintyInNs(double);
+    method @Deprecated public void setDriftInNsPerSec(double);
+    method @Deprecated public void setDriftUncertaintyInNsPerSec(double);
+    method @Deprecated public void setFullBiasInNs(long);
+    method @Deprecated public void setLeapSecond(short);
+    method @Deprecated public void setTimeInNs(long);
+    method @Deprecated public void setTimeUncertaintyInNs(double);
+    method @Deprecated public void setType(byte);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsClock> CREATOR;
+    field @Deprecated public static final byte TYPE_GPS_TIME = 2; // 0x2
+    field @Deprecated public static final byte TYPE_LOCAL_HW_TIME = 1; // 0x1
+    field @Deprecated public static final byte TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public class GpsMeasurement implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated public double getAccumulatedDeltaRangeInMeters();
+    method @Deprecated public short getAccumulatedDeltaRangeState();
+    method @Deprecated public double getAccumulatedDeltaRangeUncertaintyInMeters();
+    method @Deprecated public double getAzimuthInDeg();
+    method @Deprecated public double getAzimuthUncertaintyInDeg();
+    method @Deprecated public int getBitNumber();
+    method @Deprecated public long getCarrierCycles();
+    method @Deprecated public float getCarrierFrequencyInHz();
+    method @Deprecated public double getCarrierPhase();
+    method @Deprecated public double getCarrierPhaseUncertainty();
+    method @Deprecated public double getCn0InDbHz();
+    method @Deprecated public double getCodePhaseInChips();
+    method @Deprecated public double getCodePhaseUncertaintyInChips();
+    method @Deprecated public double getDopplerShiftInHz();
+    method @Deprecated public double getDopplerShiftUncertaintyInHz();
+    method @Deprecated public double getElevationInDeg();
+    method @Deprecated public double getElevationUncertaintyInDeg();
+    method @Deprecated public byte getLossOfLock();
+    method @Deprecated public byte getMultipathIndicator();
+    method @Deprecated public byte getPrn();
+    method @Deprecated public double getPseudorangeInMeters();
+    method @Deprecated public double getPseudorangeRateInMetersPerSec();
+    method @Deprecated public double getPseudorangeRateUncertaintyInMetersPerSec();
+    method @Deprecated public double getPseudorangeUncertaintyInMeters();
+    method @Deprecated public long getReceivedGpsTowInNs();
+    method @Deprecated public long getReceivedGpsTowUncertaintyInNs();
+    method @Deprecated public double getSnrInDb();
+    method @Deprecated public short getState();
+    method @Deprecated public short getTimeFromLastBitInMs();
+    method @Deprecated public double getTimeOffsetInNs();
+    method @Deprecated public boolean hasAzimuthInDeg();
+    method @Deprecated public boolean hasAzimuthUncertaintyInDeg();
+    method @Deprecated public boolean hasBitNumber();
+    method @Deprecated public boolean hasCarrierCycles();
+    method @Deprecated public boolean hasCarrierFrequencyInHz();
+    method @Deprecated public boolean hasCarrierPhase();
+    method @Deprecated public boolean hasCarrierPhaseUncertainty();
+    method @Deprecated public boolean hasCodePhaseInChips();
+    method @Deprecated public boolean hasCodePhaseUncertaintyInChips();
+    method @Deprecated public boolean hasDopplerShiftInHz();
+    method @Deprecated public boolean hasDopplerShiftUncertaintyInHz();
+    method @Deprecated public boolean hasElevationInDeg();
+    method @Deprecated public boolean hasElevationUncertaintyInDeg();
+    method @Deprecated public boolean hasPseudorangeInMeters();
+    method @Deprecated public boolean hasPseudorangeUncertaintyInMeters();
+    method @Deprecated public boolean hasSnrInDb();
+    method @Deprecated public boolean hasTimeFromLastBitInMs();
+    method @Deprecated public boolean isPseudorangeRateCorrected();
+    method @Deprecated public boolean isUsedInFix();
+    method @Deprecated public void reset();
+    method @Deprecated public void resetAzimuthInDeg();
+    method @Deprecated public void resetAzimuthUncertaintyInDeg();
+    method @Deprecated public void resetBitNumber();
+    method @Deprecated public void resetCarrierCycles();
+    method @Deprecated public void resetCarrierFrequencyInHz();
+    method @Deprecated public void resetCarrierPhase();
+    method @Deprecated public void resetCarrierPhaseUncertainty();
+    method @Deprecated public void resetCodePhaseInChips();
+    method @Deprecated public void resetCodePhaseUncertaintyInChips();
+    method @Deprecated public void resetDopplerShiftInHz();
+    method @Deprecated public void resetDopplerShiftUncertaintyInHz();
+    method @Deprecated public void resetElevationInDeg();
+    method @Deprecated public void resetElevationUncertaintyInDeg();
+    method @Deprecated public void resetPseudorangeInMeters();
+    method @Deprecated public void resetPseudorangeUncertaintyInMeters();
+    method @Deprecated public void resetSnrInDb();
+    method @Deprecated public void resetTimeFromLastBitInMs();
+    method @Deprecated public void set(android.location.GpsMeasurement);
+    method @Deprecated public void setAccumulatedDeltaRangeInMeters(double);
+    method @Deprecated public void setAccumulatedDeltaRangeState(short);
+    method @Deprecated public void setAccumulatedDeltaRangeUncertaintyInMeters(double);
+    method @Deprecated public void setAzimuthInDeg(double);
+    method @Deprecated public void setAzimuthUncertaintyInDeg(double);
+    method @Deprecated public void setBitNumber(int);
+    method @Deprecated public void setCarrierCycles(long);
+    method @Deprecated public void setCarrierFrequencyInHz(float);
+    method @Deprecated public void setCarrierPhase(double);
+    method @Deprecated public void setCarrierPhaseUncertainty(double);
+    method @Deprecated public void setCn0InDbHz(double);
+    method @Deprecated public void setCodePhaseInChips(double);
+    method @Deprecated public void setCodePhaseUncertaintyInChips(double);
+    method @Deprecated public void setDopplerShiftInHz(double);
+    method @Deprecated public void setDopplerShiftUncertaintyInHz(double);
+    method @Deprecated public void setElevationInDeg(double);
+    method @Deprecated public void setElevationUncertaintyInDeg(double);
+    method @Deprecated public void setLossOfLock(byte);
+    method @Deprecated public void setMultipathIndicator(byte);
+    method @Deprecated public void setPrn(byte);
+    method @Deprecated public void setPseudorangeInMeters(double);
+    method @Deprecated public void setPseudorangeRateInMetersPerSec(double);
+    method @Deprecated public void setPseudorangeRateUncertaintyInMetersPerSec(double);
+    method @Deprecated public void setPseudorangeUncertaintyInMeters(double);
+    method @Deprecated public void setReceivedGpsTowInNs(long);
+    method @Deprecated public void setReceivedGpsTowUncertaintyInNs(long);
+    method @Deprecated public void setSnrInDb(double);
+    method @Deprecated public void setState(short);
+    method @Deprecated public void setTimeFromLastBitInMs(short);
+    method @Deprecated public void setTimeOffsetInNs(double);
+    method @Deprecated public void setUsedInFix(boolean);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated public static final short ADR_STATE_CYCLE_SLIP = 4; // 0x4
+    field @Deprecated public static final short ADR_STATE_RESET = 2; // 0x2
+    field @Deprecated public static final short ADR_STATE_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final short ADR_STATE_VALID = 1; // 0x1
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurement> CREATOR;
+    field @Deprecated public static final byte LOSS_OF_LOCK_CYCLE_SLIP = 2; // 0x2
+    field @Deprecated public static final byte LOSS_OF_LOCK_OK = 1; // 0x1
+    field @Deprecated public static final byte LOSS_OF_LOCK_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_DETECTED = 1; // 0x1
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_NOT_USED = 2; // 0x2
+    field @Deprecated public static final byte MULTIPATH_INDICATOR_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final short STATE_BIT_SYNC = 2; // 0x2
+    field @Deprecated public static final short STATE_CODE_LOCK = 1; // 0x1
+    field @Deprecated public static final short STATE_MSEC_AMBIGUOUS = 16; // 0x10
+    field @Deprecated public static final short STATE_SUBFRAME_SYNC = 4; // 0x4
+    field @Deprecated public static final short STATE_TOW_DECODED = 8; // 0x8
+    field @Deprecated public static final short STATE_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public class GpsMeasurementsEvent implements android.os.Parcelable {
+    ctor @Deprecated public GpsMeasurementsEvent(android.location.GpsClock, android.location.GpsMeasurement[]);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.location.GpsClock getClock();
+    method @Deprecated @NonNull public java.util.Collection<android.location.GpsMeasurement> getMeasurements();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsMeasurementsEvent> CREATOR;
+    field @Deprecated public static final int STATUS_GPS_LOCATION_DISABLED = 2; // 0x2
+    field @Deprecated public static final int STATUS_NOT_SUPPORTED = 0; // 0x0
+    field @Deprecated public static final int STATUS_READY = 1; // 0x1
+  }
+
+  @Deprecated public static interface GpsMeasurementsEvent.Listener {
+    method @Deprecated public void onGpsMeasurementsReceived(android.location.GpsMeasurementsEvent);
+    method @Deprecated public void onStatusChanged(int);
+  }
+
+  @Deprecated public class GpsNavigationMessage implements android.os.Parcelable {
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public byte[] getData();
+    method @Deprecated public short getMessageId();
+    method @Deprecated public byte getPrn();
+    method @Deprecated public short getStatus();
+    method @Deprecated public short getSubmessageId();
+    method @Deprecated public byte getType();
+    method @Deprecated public void reset();
+    method @Deprecated public void set(android.location.GpsNavigationMessage);
+    method @Deprecated public void setData(byte[]);
+    method @Deprecated public void setMessageId(short);
+    method @Deprecated public void setPrn(byte);
+    method @Deprecated public void setStatus(short);
+    method @Deprecated public void setSubmessageId(short);
+    method @Deprecated public void setType(byte);
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessage> CREATOR;
+    field @Deprecated public static final short STATUS_PARITY_PASSED = 1; // 0x1
+    field @Deprecated public static final short STATUS_PARITY_REBUILT = 2; // 0x2
+    field @Deprecated public static final short STATUS_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final byte TYPE_CNAV2 = 4; // 0x4
+    field @Deprecated public static final byte TYPE_L1CA = 1; // 0x1
+    field @Deprecated public static final byte TYPE_L2CNAV = 2; // 0x2
+    field @Deprecated public static final byte TYPE_L5CNAV = 3; // 0x3
+    field @Deprecated public static final byte TYPE_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public class GpsNavigationMessageEvent implements android.os.Parcelable {
+    ctor @Deprecated public GpsNavigationMessageEvent(android.location.GpsNavigationMessage);
+    method @Deprecated public int describeContents();
+    method @Deprecated @NonNull public android.location.GpsNavigationMessage getNavigationMessage();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.location.GpsNavigationMessageEvent> CREATOR;
+    field @Deprecated public static int STATUS_GPS_LOCATION_DISABLED;
+    field @Deprecated public static int STATUS_NOT_SUPPORTED;
+    field @Deprecated public static int STATUS_READY;
+  }
+
+  @Deprecated public static interface GpsNavigationMessageEvent.Listener {
+    method @Deprecated public void onGpsNavigationMessageReceived(android.location.GpsNavigationMessageEvent);
+    method @Deprecated public void onStatusChanged(int);
+  }
+
+  public final class LastLocationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean isHiddenFromAppOps();
+    method public boolean isLocationSettingsIgnored();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.LastLocationRequest> CREATOR;
+  }
+
+  public static final class LastLocationRequest.Builder {
+    ctor public LastLocationRequest.Builder();
+    ctor public LastLocationRequest.Builder(@NonNull android.location.LastLocationRequest);
+    method @NonNull public android.location.LastLocationRequest build();
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public android.location.LastLocationRequest.Builder setHiddenFromAppOps(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LastLocationRequest.Builder setLocationSettingsIgnored(boolean);
+  }
+
+  public class Location implements android.os.Parcelable {
+    method public boolean isComplete();
+    method public void makeComplete();
+    method @Deprecated public void setIsFromMockProvider(boolean);
+    field @Deprecated public static final String EXTRA_NO_GPS_LOCATION = "noGPSLocation";
+  }
+
+  public class LocationManager {
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void addProviderRequestChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.provider.ProviderRequest.ChangedListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void flushGnssBatch();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull android.location.LocationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
+    method @Nullable public String getExtraLocationControllerPackage();
+    method @Deprecated public int getGnssBatchSize();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.location.Location getLastKnownLocation(@NonNull String, @NonNull android.location.LastLocationRequest);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void injectGnssMeasurementCorrections(@NonNull android.location.GnssMeasurementCorrections);
+    method public boolean isExtraLocationControllerPackageEnabled();
+    method public boolean isLocationEnabledForUser(@NonNull android.os.UserHandle);
+    method public boolean isProviderEnabledForUser(@NonNull String, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String, @Nullable String);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.UPDATE_APP_OPS_STATS}) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void removeProviderRequestChangedListener(@NonNull android.location.provider.ProviderRequest.ChangedListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setExtraLocationControllerPackage(@Nullable String);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setExtraLocationControllerPackageEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean setProviderEnabledForUser(@NonNull String, boolean, @NonNull android.os.UserHandle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean unregisterGnssBatchedLocationCallback(@NonNull android.location.BatchedLocationCallback);
+  }
+
+  public final class LocationRequest implements android.os.Parcelable {
+    method @Deprecated @NonNull public static android.location.LocationRequest create();
+    method @Deprecated @NonNull public static android.location.LocationRequest createFromDeprecatedCriteria(@NonNull android.location.Criteria, long, float, boolean);
+    method @Deprecated @NonNull public static android.location.LocationRequest createFromDeprecatedProvider(@NonNull String, long, float, boolean);
+    method @Deprecated public long getExpireAt();
+    method @Deprecated public long getExpireIn();
+    method @Deprecated public long getFastestInterval();
+    method @Deprecated public boolean getHideFromAppOps();
+    method @Deprecated public long getInterval();
+    method @Deprecated public int getNumUpdates();
+    method @Deprecated @NonNull public String getProvider();
+    method @Deprecated public float getSmallestDisplacement();
+    method @NonNull public android.os.WorkSource getWorkSource();
+    method public boolean isHiddenFromAppOps();
+    method public boolean isLocationSettingsIgnored();
+    method public boolean isLowPower();
+    method @Deprecated public boolean isLowPowerMode();
+    method @Deprecated @NonNull public android.location.LocationRequest setExpireAt(long);
+    method @Deprecated @NonNull public android.location.LocationRequest setExpireIn(long);
+    method @Deprecated @NonNull public android.location.LocationRequest setFastestInterval(long);
+    method @Deprecated public void setHideFromAppOps(boolean);
+    method @Deprecated @NonNull public android.location.LocationRequest setInterval(long);
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest setLocationSettingsIgnored(boolean);
+    method @Deprecated @NonNull public android.location.LocationRequest setLowPowerMode(boolean);
+    method @Deprecated @NonNull public android.location.LocationRequest setNumUpdates(int);
+    method @Deprecated @NonNull public android.location.LocationRequest setProvider(@NonNull String);
+    method @Deprecated @NonNull public android.location.LocationRequest setQuality(int);
+    method @Deprecated @NonNull public android.location.LocationRequest setSmallestDisplacement(float);
+    method @Deprecated public void setWorkSource(@Nullable android.os.WorkSource);
+    field @Deprecated public static final int ACCURACY_BLOCK = 102; // 0x66
+    field @Deprecated public static final int ACCURACY_CITY = 104; // 0x68
+    field @Deprecated public static final int ACCURACY_FINE = 100; // 0x64
+    field @Deprecated public static final int POWER_HIGH = 203; // 0xcb
+    field @Deprecated public static final int POWER_LOW = 201; // 0xc9
+    field @Deprecated public static final int POWER_NONE = 200; // 0xc8
+  }
+
+  public static final class LocationRequest.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_APP_OPS_STATS) public android.location.LocationRequest.Builder setHiddenFromAppOps(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest.Builder setLocationSettingsIgnored(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public android.location.LocationRequest.Builder setLowPower(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.location.LocationRequest.Builder setWorkSource(@Nullable android.os.WorkSource);
+  }
+
+  public final class SatellitePvt implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.location.SatellitePvt.ClockInfo getClockInfo();
+    method @FloatRange public double getIonoDelayMeters();
+    method @Nullable public android.location.SatellitePvt.PositionEcef getPositionEcef();
+    method @FloatRange public double getTropoDelayMeters();
+    method @Nullable public android.location.SatellitePvt.VelocityEcef getVelocityEcef();
+    method public boolean hasIono();
+    method public boolean hasPositionVelocityClockInfo();
+    method public boolean hasTropo();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt> CREATOR;
+  }
+
+  public static final class SatellitePvt.Builder {
+    ctor public SatellitePvt.Builder();
+    method @NonNull public android.location.SatellitePvt build();
+    method @NonNull public android.location.SatellitePvt.Builder setClockInfo(@NonNull android.location.SatellitePvt.ClockInfo);
+    method @NonNull public android.location.SatellitePvt.Builder setIonoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double);
+    method @NonNull public android.location.SatellitePvt.Builder setPositionEcef(@NonNull android.location.SatellitePvt.PositionEcef);
+    method @NonNull public android.location.SatellitePvt.Builder setTropoDelayMeters(@FloatRange(from=0.0f, to=100.0f) double);
+    method @NonNull public android.location.SatellitePvt.Builder setVelocityEcef(@NonNull android.location.SatellitePvt.VelocityEcef);
+  }
+
+  public static final class SatellitePvt.ClockInfo implements android.os.Parcelable {
+    ctor public SatellitePvt.ClockInfo(double, double, double);
+    method public int describeContents();
+    method @FloatRange public double getClockDriftMetersPerSecond();
+    method @FloatRange public double getHardwareCodeBiasMeters();
+    method @FloatRange public double getTimeCorrectionMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt.ClockInfo> CREATOR;
+  }
+
+  public static final class SatellitePvt.PositionEcef implements android.os.Parcelable {
+    ctor public SatellitePvt.PositionEcef(double, double, double, double);
+    method public int describeContents();
+    method @FloatRange(from=0.0f, fromInclusive=false) public double getUreMeters();
+    method @FloatRange public double getXMeters();
+    method @FloatRange public double getYMeters();
+    method @FloatRange public double getZMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt.PositionEcef> CREATOR;
+  }
+
+  public static final class SatellitePvt.VelocityEcef implements android.os.Parcelable {
+    ctor public SatellitePvt.VelocityEcef(double, double, double, double);
+    method public int describeContents();
+    method @FloatRange(from=0.0f, fromInclusive=false) public double getUreRateMetersPerSecond();
+    method @FloatRange public double getXMetersPerSecond();
+    method @FloatRange public double getYMetersPerSecond();
+    method @FloatRange public double getZMetersPerSecond();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.SatellitePvt.VelocityEcef> CREATOR;
+  }
+
+}
+
+package android.location.provider {
+
+  public abstract class LocationProviderBase {
+    ctor public LocationProviderBase(@NonNull android.content.Context, @NonNull String, @NonNull android.location.provider.ProviderProperties);
+    method @Nullable public final android.os.IBinder getBinder();
+    method @NonNull public android.location.provider.ProviderProperties getProperties();
+    method public boolean isAllowed();
+    method public abstract void onFlush(@NonNull android.location.provider.LocationProviderBase.OnFlushCompleteCallback);
+    method public abstract void onSendExtraCommand(@NonNull String, @Nullable android.os.Bundle);
+    method public abstract void onSetRequest(@NonNull android.location.provider.ProviderRequest);
+    method public void reportLocation(@NonNull android.location.Location);
+    method public void reportLocations(@NonNull java.util.List<android.location.Location>);
+    method public void setAllowed(boolean);
+    method public void setProperties(@NonNull android.location.provider.ProviderProperties);
+    field public static final String ACTION_FUSED_PROVIDER = "com.android.location.service.FusedLocationProvider";
+    field public static final String ACTION_NETWORK_PROVIDER = "com.android.location.service.v3.NetworkLocationProvider";
+  }
+
+  public static interface LocationProviderBase.OnFlushCompleteCallback {
+    method public void onFlushComplete();
+  }
+
+  public final class ProviderRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public long getIntervalMillis();
+    method @IntRange(from=0) public long getMaxUpdateDelayMillis();
+    method public int getQuality();
+    method @NonNull public android.os.WorkSource getWorkSource();
+    method public boolean isActive();
+    method public boolean isLocationSettingsIgnored();
+    method public boolean isLowPower();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.location.provider.ProviderRequest> CREATOR;
+    field @NonNull public static final android.location.provider.ProviderRequest EMPTY_REQUEST;
+    field public static final long INTERVAL_DISABLED = 9223372036854775807L; // 0x7fffffffffffffffL
+  }
+
+  public static final class ProviderRequest.Builder {
+    ctor public ProviderRequest.Builder();
+    method @NonNull public android.location.provider.ProviderRequest build();
+    method @NonNull public android.location.provider.ProviderRequest.Builder setIntervalMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setLocationSettingsIgnored(boolean);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setLowPower(boolean);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setMaxUpdateDelayMillis(@IntRange(from=0) long);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setQuality(int);
+    method @NonNull public android.location.provider.ProviderRequest.Builder setWorkSource(@NonNull android.os.WorkSource);
+  }
+
+  public static interface ProviderRequest.ChangedListener {
+    method public void onProviderRequestChanged(@NonNull String, @NonNull android.location.provider.ProviderRequest);
+  }
+
+}
+
+package android.media {
+
+  public final class AudioAttributes implements android.os.Parcelable {
+    method public int getAllFlags();
+    method public android.os.Bundle getBundle();
+    method public int getCapturePreset();
+    method public int getSystemUsage();
+    method public static boolean isSystemUsage(int);
+    field public static final int FLAG_BEACON = 8; // 0x8
+    field public static final int FLAG_BYPASS_INTERRUPTION_POLICY = 64; // 0x40
+    field public static final int FLAG_BYPASS_MUTE = 128; // 0x80
+    field public static final int FLAG_HW_HOTWORD = 32; // 0x20
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_ANNOUNCEMENT = 1003; // 0x3eb
+    field @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public static final int USAGE_CALL_ASSISTANT = 17; // 0x11
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_EMERGENCY = 1000; // 0x3e8
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_SAFETY = 1001; // 0x3e9
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int USAGE_VEHICLE_STATUS = 1002; // 0x3ea
+  }
+
+  public static class AudioAttributes.Builder {
+    method public android.media.AudioAttributes.Builder addBundle(@NonNull android.os.Bundle);
+    method public android.media.AudioAttributes.Builder setCapturePreset(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public android.media.AudioAttributes.Builder setHotwordModeEnabled(boolean);
+    method public android.media.AudioAttributes.Builder setInternalCapturePreset(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioAttributes.Builder setSystemUsage(int);
+  }
+
+  public final class AudioDeviceAttributes implements android.os.Parcelable {
+    ctor public AudioDeviceAttributes(@NonNull android.media.AudioDeviceInfo);
+    ctor public AudioDeviceAttributes(int, int, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String getAddress();
+    method public int getRole();
+    method public int getType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioDeviceAttributes> CREATOR;
+    field public static final int ROLE_INPUT = 1; // 0x1
+    field public static final int ROLE_OUTPUT = 2; // 0x2
+  }
+
+  public final class AudioFocusInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.media.AudioAttributes getAttributes();
+    method @NonNull public String getClientId();
+    method public int getClientUid();
+    method public int getFlags();
+    method public int getGainRequest();
+    method public int getLossReceived();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.AudioFocusInfo> CREATOR;
+  }
+
+  public final class AudioFocusRequest {
+    method public boolean locksFocus();
+  }
+
+  public static final class AudioFocusRequest.Builder {
+    method @NonNull public android.media.AudioFocusRequest.Builder setLocksFocus(boolean);
+  }
+
+  public class AudioManager {
+    method @Deprecated public int abandonAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, android.media.AudioAttributes);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDeviceForStrategyChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDevicesForCapturePresetChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDevicesForCapturePresetChangedListener) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void addOnPreferredDevicesForStrategyChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.OnPreferredDevicesForStrategyChangedListener) throws java.lang.SecurityException;
+    method public void clearAudioServerStateCallback();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean clearPreferredDevicesForCapturePreset(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int dispatchAudioFocusChange(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
+    method @IntRange(from=0) public long getAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioProductStrategy> getAudioProductStrategies();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static java.util.List<android.media.audiopolicy.AudioVolumeGroup> getAudioVolumeGroups();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public int getDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, "android.permission.QUERY_AUDIO_STATE"}) public java.util.List<android.media.AudioDeviceAttributes> getDevicesForAttributes(@NonNull android.media.AudioAttributes);
+    method @IntRange(from=0) public long getMaxAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo);
+    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMaxVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getMinVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioDeviceAttributes getPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getPreferredDevicesForCapturePreset(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public java.util.List<android.media.AudioDeviceAttributes> getPreferredDevicesForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int[] getSupportedSystemUsages();
+    method @IntRange(from=0) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getVolumeIndexForAttributes(@NonNull android.media.AudioAttributes);
+    method public boolean isAudioServerRunning();
+    method public boolean isHdmiSystemAudioSupported();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int registerAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
+    method public void registerVolumeGroupCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.VolumeGroupCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDeviceForStrategyChangedListener(@NonNull android.media.AudioManager.OnPreferredDeviceForStrategyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDevicesForCapturePresetChangedListener(@NonNull android.media.AudioManager.OnPreferredDevicesForCapturePresetChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void removeOnPreferredDevicesForStrategyChangedListener(@NonNull android.media.AudioManager.OnPreferredDevicesForStrategyChangedListener);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean removePreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int) throws java.lang.IllegalArgumentException;
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.MODIFY_AUDIO_ROUTING}) public int requestAudioFocus(android.media.AudioManager.OnAudioFocusChangeListener, @NonNull android.media.AudioAttributes, int, int, android.media.audiopolicy.AudioPolicy) throws java.lang.IllegalArgumentException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int requestAudioFocus(@NonNull android.media.AudioFocusRequest, @Nullable android.media.audiopolicy.AudioPolicy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setAdditionalOutputDeviceDelay(@NonNull android.media.AudioDeviceInfo, @IntRange(from=0) long);
+    method public void setAudioServerStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.AudioManager.AudioServerStateCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setDeviceVolumeBehavior(@NonNull android.media.AudioDeviceAttributes, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setFocusRequestResult(@NonNull android.media.AudioFocusInfo, int, @NonNull android.media.audiopolicy.AudioPolicy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForCapturePreset(int, @NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDeviceForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public boolean setPreferredDevicesForStrategy(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull java.util.List<android.media.AudioDeviceAttributes>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setSupportedSystemUsages(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void setVolumeIndexForAttributes(@NonNull android.media.AudioAttributes, int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicy(@NonNull android.media.audiopolicy.AudioPolicy);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public void unregisterAudioPolicyAsync(@NonNull android.media.audiopolicy.AudioPolicy);
+    method public void unregisterVolumeGroupCallback(@NonNull android.media.AudioManager.VolumeGroupCallback);
+    field public static final int AUDIOFOCUS_FLAG_DELAY_OK = 1; // 0x1
+    field public static final int AUDIOFOCUS_FLAG_LOCK = 4; // 0x4
+    field public static final int AUDIOFOCUS_FLAG_PAUSES_ON_DUCKABLE_LOSS = 2; // 0x2
+    field public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE = 3; // 0x3
+    field public static final int DEVICE_VOLUME_BEHAVIOR_ABSOLUTE_MULTI_MODE = 4; // 0x4
+    field public static final int DEVICE_VOLUME_BEHAVIOR_FIXED = 2; // 0x2
+    field public static final int DEVICE_VOLUME_BEHAVIOR_FULL = 1; // 0x1
+    field public static final int DEVICE_VOLUME_BEHAVIOR_VARIABLE = 0; // 0x0
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int STREAM_ASSISTANT = 11; // 0xb
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public abstract static class AudioManager.AudioServerStateCallback {
+    ctor public AudioManager.AudioServerStateCallback();
+    method public void onAudioServerDown();
+    method public void onAudioServerUp();
+  }
+
+  @Deprecated public static interface AudioManager.OnPreferredDeviceForStrategyChangedListener {
+    method @Deprecated public void onPreferredDeviceForStrategyChanged(@NonNull android.media.audiopolicy.AudioProductStrategy, @Nullable android.media.AudioDeviceAttributes);
+  }
+
+  public static interface AudioManager.OnPreferredDevicesForCapturePresetChangedListener {
+    method public void onPreferredDevicesForCapturePresetChanged(int, @NonNull java.util.List<android.media.AudioDeviceAttributes>);
+  }
+
+  public static interface AudioManager.OnPreferredDevicesForStrategyChangedListener {
+    method public void onPreferredDevicesForStrategyChanged(@NonNull android.media.audiopolicy.AudioProductStrategy, @NonNull java.util.List<android.media.AudioDeviceAttributes>);
+  }
+
+  public abstract static class AudioManager.VolumeGroupCallback {
+    ctor public AudioManager.VolumeGroupCallback();
+    method public void onAudioVolumeGroupChanged(int, int);
+  }
+
+  public final class AudioPlaybackConfiguration implements android.os.Parcelable {
+    method public int getClientPid();
+    method public int getClientUid();
+    method public int getPlayerInterfaceId();
+    method public android.media.PlayerProxy getPlayerProxy();
+    method public int getPlayerState();
+    method public int getPlayerType();
+    method @IntRange(from=0) public int getSessionId();
+    method public boolean isActive();
+    field public static final int PLAYER_STATE_IDLE = 1; // 0x1
+    field public static final int PLAYER_STATE_PAUSED = 3; // 0x3
+    field public static final int PLAYER_STATE_RELEASED = 0; // 0x0
+    field public static final int PLAYER_STATE_STARTED = 2; // 0x2
+    field public static final int PLAYER_STATE_STOPPED = 4; // 0x4
+    field public static final int PLAYER_STATE_UNKNOWN = -1; // 0xffffffff
+    field public static final int PLAYER_TYPE_AAUDIO = 13; // 0xd
+    field public static final int PLAYER_TYPE_JAM_AUDIOTRACK = 1; // 0x1
+    field public static final int PLAYER_TYPE_JAM_MEDIAPLAYER = 2; // 0x2
+    field public static final int PLAYER_TYPE_JAM_SOUNDPOOL = 3; // 0x3
+    field public static final int PLAYER_TYPE_SLES_AUDIOPLAYER_BUFFERQUEUE = 11; // 0xb
+    field public static final int PLAYER_TYPE_SLES_AUDIOPLAYER_URI_FD = 12; // 0xc
+    field public static final int PLAYER_TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public class AudioRecord implements android.media.AudioRecordingMonitor android.media.AudioRouting android.media.MicrophoneDirection {
+    ctor @RequiresPermission(android.Manifest.permission.RECORD_AUDIO) public AudioRecord(android.media.AudioAttributes, android.media.AudioFormat, int, int) throws java.lang.IllegalArgumentException;
+    method public static long getMaxSharedAudioHistoryMillis();
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public android.media.MediaSyncEvent shareAudioHistory(@NonNull String, @IntRange(from=0) long);
+  }
+
+  public static class AudioRecord.Builder {
+    method public android.media.AudioRecord.Builder setAudioAttributes(@NonNull android.media.AudioAttributes) throws java.lang.IllegalArgumentException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public android.media.AudioRecord.Builder setMaxSharedAudioHistoryMillis(long) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioRecord.Builder setSessionId(int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.AudioRecord.Builder setSharedAudioEvent(@NonNull android.media.MediaSyncEvent) throws java.lang.IllegalArgumentException;
+  }
+
+  public final class AudioRecordingConfiguration implements android.os.Parcelable {
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getClientUid();
+  }
+
+  public class AudioTrack implements android.media.AudioRouting android.media.VolumeAutomation {
+    field @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static final int ENCAPSULATION_MODE_HANDLE = 2; // 0x2
+  }
+
+  public static class AudioTrack.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public android.media.AudioTrack.Builder setTunerConfiguration(@NonNull android.media.AudioTrack.TunerConfiguration);
+  }
+
+  public static class AudioTrack.TunerConfiguration {
+    ctor @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public AudioTrack.TunerConfiguration(@IntRange(from=0) int, @IntRange(from=1) int);
+    method @IntRange(from=1) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getContentId();
+    method @IntRange(from=1) @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public int getSyncId();
+    field public static final int CONTENT_ID_NONE = 0; // 0x0
+  }
+
+  public class HwAudioSource {
+    method public boolean isPlaying();
+    method public void start();
+    method public void stop();
+  }
+
+  public static final class HwAudioSource.Builder {
+    ctor public HwAudioSource.Builder();
+    method @NonNull public android.media.HwAudioSource build();
+    method @NonNull public android.media.HwAudioSource.Builder setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method @NonNull public android.media.HwAudioSource.Builder setAudioDeviceInfo(@NonNull android.media.AudioDeviceInfo);
+  }
+
+  public class MediaPlayer implements android.media.AudioRouting android.media.VolumeAutomation {
+    method @RequiresPermission(android.Manifest.permission.BIND_IMS_SERVICE) public void setOnRtpRxNoticeListener(@NonNull android.content.Context, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaPlayer.OnRtpRxNoticeListener);
+  }
+
+  public static interface MediaPlayer.OnRtpRxNoticeListener {
+    method public void onRtpRxNotice(@NonNull android.media.MediaPlayer, int, @NonNull int[]);
+  }
+
+  public final class MediaRecorder.AudioSource {
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int ECHO_REFERENCE = 1997; // 0x7cd
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD) public static final int HOTWORD = 1999; // 0x7cf
+    field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int RADIO_TUNER = 1998; // 0x7ce
+  }
+
+  public final class MediaRouter2 {
+    method @NonNull public java.util.List<android.media.MediaRoute2Info> getAllRoutes();
+    method @Nullable public String getClientPackageName();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void setRouteVolume(@NonNull android.media.MediaRoute2Info, int);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void startScan();
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void stopScan();
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void transfer(@NonNull android.media.MediaRouter2.RoutingController, @NonNull android.media.MediaRoute2Info);
+  }
+
+  public abstract static class MediaRouter2.RouteCallback {
+    method public void onPreferredFeaturesChanged(@NonNull java.util.List<java.lang.String>);
+  }
+
+  public class MediaSyncEvent implements android.os.Parcelable {
+    field public static final int SYNC_EVENT_SHARE_AUDIO_HISTORY = 100; // 0x64
+  }
+
+  public final class MediaTranscodingManager {
+    method @Nullable public android.media.MediaTranscodingManager.TranscodingSession enqueueRequest(@NonNull android.media.MediaTranscodingManager.TranscodingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaTranscodingManager.OnTranscodingFinishedListener);
+  }
+
+  @java.lang.FunctionalInterface public static interface MediaTranscodingManager.OnTranscodingFinishedListener {
+    method public void onTranscodingFinished(@NonNull android.media.MediaTranscodingManager.TranscodingSession);
+  }
+
+  public abstract static class MediaTranscodingManager.TranscodingRequest {
+    method public int getClientPid();
+    method public int getClientUid();
+    method @Nullable public android.os.ParcelFileDescriptor getDestinationFileDescriptor();
+    method @NonNull public android.net.Uri getDestinationUri();
+    method @Nullable public android.os.ParcelFileDescriptor getSourceFileDescriptor();
+    method @NonNull public android.net.Uri getSourceUri();
+  }
+
+  public static class MediaTranscodingManager.TranscodingRequest.VideoFormatResolver {
+    ctor public MediaTranscodingManager.TranscodingRequest.VideoFormatResolver(@NonNull android.media.ApplicationMediaCapabilities, @NonNull android.media.MediaFormat);
+    method @Nullable public android.media.MediaFormat resolveVideoFormat();
+    method public boolean shouldTranscode();
+  }
+
+  public static final class MediaTranscodingManager.TranscodingSession {
+    method public boolean addClientUid(int);
+    method public void cancel();
+    method @NonNull public java.util.List<java.lang.Integer> getClientUids();
+    method public int getErrorCode();
+    method @IntRange(from=0, to=100) public int getProgress();
+    method public int getResult();
+    method public int getSessionId();
+    method public int getStatus();
+    method public void setOnProgressUpdateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodingManager.TranscodingSession.OnProgressUpdateListener);
+    field public static final int ERROR_DROPPED_BY_SERVICE = 1; // 0x1
+    field public static final int ERROR_NONE = 0; // 0x0
+    field public static final int ERROR_SERVICE_DIED = 2; // 0x2
+    field public static final int RESULT_CANCELED = 4; // 0x4
+    field public static final int RESULT_ERROR = 3; // 0x3
+    field public static final int RESULT_NONE = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 2; // 0x2
+    field public static final int STATUS_FINISHED = 3; // 0x3
+    field public static final int STATUS_PAUSED = 4; // 0x4
+    field public static final int STATUS_PENDING = 1; // 0x1
+    field public static final int STATUS_RUNNING = 2; // 0x2
+  }
+
+  @java.lang.FunctionalInterface public static interface MediaTranscodingManager.TranscodingSession.OnProgressUpdateListener {
+    method public void onProgressUpdate(@NonNull android.media.MediaTranscodingManager.TranscodingSession, @IntRange(from=0, to=100) int);
+  }
+
+  public static final class MediaTranscodingManager.VideoTranscodingRequest extends android.media.MediaTranscodingManager.TranscodingRequest {
+    method @NonNull public android.media.MediaFormat getVideoTrackFormat();
+  }
+
+  public static final class MediaTranscodingManager.VideoTranscodingRequest.Builder {
+    ctor public MediaTranscodingManager.VideoTranscodingRequest.Builder(@NonNull android.net.Uri, @NonNull android.net.Uri, @NonNull android.media.MediaFormat);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest build();
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setClientPid(int);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setClientUid(int);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setDestinationFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setSourceFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+  }
+
+  public class PlayerProxy {
+    method public void pause();
+    method public void setPan(float);
+    method public void setStartDelayMs(int);
+    method public void setVolume(float);
+    method public void start();
+    method public void stop();
+  }
+
+  public class RingtoneManager {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SETTINGS) public static void ensureDefaultRingtones(@NonNull android.content.Context);
+  }
+
+  public final class RouteDiscoveryPreference implements android.os.Parcelable {
+    field public static final android.media.RouteDiscoveryPreference EMPTY;
+  }
+
+  public class Spatializer {
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void addCompatibleAudioDevice(@NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void addOnHeadTrackingModeChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnHeadTrackingModeChangedListener);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void clearOnHeadToSoundstagePoseUpdatedListener();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void clearOnSpatializerOutputChangedListener();
+    method @NonNull @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public java.util.List<android.media.AudioDeviceAttributes> getCompatibleAudioDevices();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public int getDesiredHeadTrackingMode();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void getEffectParameter(int, @NonNull byte[]);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public int getHeadTrackingMode();
+    method @IntRange(from=0) @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public int getOutput();
+    method @NonNull @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public java.util.List<java.lang.Integer> getSupportedHeadTrackingModes();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void recenterHeadTracker();
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void removeCompatibleAudioDevice(@NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void removeOnHeadTrackingModeChangedListener(@NonNull android.media.Spatializer.OnHeadTrackingModeChangedListener);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setDesiredHeadTrackingMode(int);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setEffectParameter(int, @NonNull byte[]);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setEnabled(boolean);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setGlobalTransform(@NonNull float[]);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setOnHeadToSoundstagePoseUpdatedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnHeadToSoundstagePoseUpdatedListener);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public void setOnSpatializerOutputChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.Spatializer.OnSpatializerOutputChangedListener);
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_DISABLED = -1; // 0xffffffff
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_OTHER = 0; // 0x0
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_RELATIVE_DEVICE = 2; // 0x2
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_RELATIVE_WORLD = 1; // 0x1
+    field @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static final int HEAD_TRACKING_MODE_UNSUPPORTED = -2; // 0xfffffffe
+  }
+
+  public static interface Spatializer.OnHeadToSoundstagePoseUpdatedListener {
+    method public void onHeadToSoundstagePoseUpdated(@NonNull android.media.Spatializer, @NonNull float[]);
+  }
+
+  public static interface Spatializer.OnHeadTrackingModeChangedListener {
+    method public void onDesiredHeadTrackingModeChanged(@NonNull android.media.Spatializer, int);
+    method public void onHeadTrackingModeChanged(@NonNull android.media.Spatializer, int);
+  }
+
+  public static interface Spatializer.OnSpatializerOutputChangedListener {
+    method public void onSpatializerOutputChanged(@NonNull android.media.Spatializer, @IntRange(from=0) int);
+  }
+
+}
+
+package android.media.audiofx {
+
+  public class AudioEffect {
+    ctor @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public AudioEffect(@NonNull java.util.UUID, @NonNull android.media.AudioDeviceAttributes);
+    method @RequiresPermission("android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS") public static boolean isEffectSupportedForDevice(@NonNull java.util.UUID, @NonNull android.media.AudioDeviceAttributes);
+  }
+
+}
+
+package android.media.audiopolicy {
+
+  public class AudioMix {
+    method public int getMixState();
+    field public static final int MIX_STATE_DISABLED = -1; // 0xffffffff
+    field public static final int MIX_STATE_IDLE = 0; // 0x0
+    field public static final int MIX_STATE_MIXING = 1; // 0x1
+    field public static final int ROUTE_FLAG_LOOP_BACK = 2; // 0x2
+    field public static final int ROUTE_FLAG_RENDER = 1; // 0x1
+  }
+
+  public static class AudioMix.Builder {
+    ctor public AudioMix.Builder(android.media.audiopolicy.AudioMixingRule) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix build() throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix.Builder setDevice(@NonNull android.media.AudioDeviceInfo) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix.Builder setFormat(android.media.AudioFormat) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMix.Builder setRouteFlags(int) throws java.lang.IllegalArgumentException;
+  }
+
+  public class AudioMixingRule {
+    field public static final int RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET = 2; // 0x2
+    field public static final int RULE_MATCH_ATTRIBUTE_USAGE = 1; // 0x1
+    field public static final int RULE_MATCH_UID = 4; // 0x4
+    field public static final int RULE_MATCH_USERID = 8; // 0x8
+  }
+
+  public static class AudioMixingRule.Builder {
+    ctor public AudioMixingRule.Builder();
+    method public android.media.audiopolicy.AudioMixingRule.Builder addMixRule(int, Object) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMixingRule.Builder addRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.audiopolicy.AudioMixingRule.Builder allowPrivilegedPlaybackCapture(boolean);
+    method public android.media.audiopolicy.AudioMixingRule build();
+    method public android.media.audiopolicy.AudioMixingRule.Builder excludeMixRule(int, Object) throws java.lang.IllegalArgumentException;
+    method public android.media.audiopolicy.AudioMixingRule.Builder excludeRule(android.media.AudioAttributes, int) throws java.lang.IllegalArgumentException;
+  }
+
+  public class AudioPolicy {
+    method public int attachMixes(@NonNull java.util.List<android.media.audiopolicy.AudioMix>);
+    method public android.media.AudioRecord createAudioRecordSink(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
+    method public android.media.AudioTrack createAudioTrackSource(android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
+    method public int detachMixes(@NonNull java.util.List<android.media.audiopolicy.AudioMix>);
+    method public int getFocusDuckingBehavior();
+    method public int getStatus();
+    method public boolean removeUidDeviceAffinity(int);
+    method public boolean removeUserIdDeviceAffinity(int);
+    method public int setFocusDuckingBehavior(int) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException;
+    method public void setRegistration(String);
+    method public boolean setUidDeviceAffinity(int, @NonNull java.util.List<android.media.AudioDeviceInfo>);
+    method public boolean setUserIdDeviceAffinity(int, @NonNull java.util.List<android.media.AudioDeviceInfo>);
+    method public String toLogFriendlyString();
+    field public static final int FOCUS_POLICY_DUCKING_DEFAULT = 0; // 0x0
+    field public static final int FOCUS_POLICY_DUCKING_IN_APP = 0; // 0x0
+    field public static final int FOCUS_POLICY_DUCKING_IN_POLICY = 1; // 0x1
+    field public static final int POLICY_STATUS_REGISTERED = 2; // 0x2
+    field public static final int POLICY_STATUS_UNREGISTERED = 1; // 0x1
+  }
+
+  public abstract static class AudioPolicy.AudioPolicyFocusListener {
+    ctor public AudioPolicy.AudioPolicyFocusListener();
+    method public void onAudioFocusAbandon(android.media.AudioFocusInfo);
+    method public void onAudioFocusGrant(android.media.AudioFocusInfo, int);
+    method public void onAudioFocusLoss(android.media.AudioFocusInfo, boolean);
+    method public void onAudioFocusRequest(android.media.AudioFocusInfo, int);
+  }
+
+  public abstract static class AudioPolicy.AudioPolicyStatusListener {
+    ctor public AudioPolicy.AudioPolicyStatusListener();
+    method public void onMixStateUpdate(android.media.audiopolicy.AudioMix);
+    method public void onStatusChange();
+  }
+
+  public abstract static class AudioPolicy.AudioPolicyVolumeCallback {
+    ctor public AudioPolicy.AudioPolicyVolumeCallback();
+    method public void onVolumeAdjustment(int);
+  }
+
+  public static class AudioPolicy.Builder {
+    ctor public AudioPolicy.Builder(android.content.Context);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder addMix(@NonNull android.media.audiopolicy.AudioMix) throws java.lang.IllegalArgumentException;
+    method @NonNull public android.media.audiopolicy.AudioPolicy build();
+    method public void setAudioPolicyFocusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyFocusListener);
+    method public void setAudioPolicyStatusListener(android.media.audiopolicy.AudioPolicy.AudioPolicyStatusListener);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setAudioPolicyVolumeCallback(@NonNull android.media.audiopolicy.AudioPolicy.AudioPolicyVolumeCallback);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setIsAudioFocusPolicy(boolean);
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setLooper(@NonNull android.os.Looper) throws java.lang.IllegalArgumentException;
+  }
+
+  public final class AudioProductStrategy implements android.os.Parcelable {
+    method @NonNull public static android.media.audiopolicy.AudioProductStrategy createInvalidAudioProductStrategy(int);
+    method public int describeContents();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method public int getId();
+    method public boolean supportsAudioAttributes(@NonNull android.media.AudioAttributes);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioProductStrategy> CREATOR;
+  }
+
+  public final class AudioVolumeGroup implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.media.AudioAttributes> getAudioAttributes();
+    method public int getId();
+    method @NonNull public int[] getLegacyStreamTypes();
+    method @NonNull public String name();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.media.audiopolicy.AudioVolumeGroup> CREATOR;
+    field public static final int DEFAULT_VOLUME_GROUP = -1; // 0xffffffff
+  }
+
+}
+
+package android.media.musicrecognition {
+
+  public class MusicRecognitionManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_MUSIC_RECOGNITION) public void beginStreamingSearch(@NonNull android.media.musicrecognition.RecognitionRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.musicrecognition.MusicRecognitionManager.RecognitionCallback);
+    field public static final int RECOGNITION_FAILED_AUDIO_UNAVAILABLE = 7; // 0x7
+    field public static final int RECOGNITION_FAILED_NOT_FOUND = 1; // 0x1
+    field public static final int RECOGNITION_FAILED_NO_CONNECTIVITY = 2; // 0x2
+    field public static final int RECOGNITION_FAILED_SERVICE_KILLED = 5; // 0x5
+    field public static final int RECOGNITION_FAILED_SERVICE_UNAVAILABLE = 3; // 0x3
+    field public static final int RECOGNITION_FAILED_TIMEOUT = 6; // 0x6
+    field public static final int RECOGNITION_FAILED_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static interface MusicRecognitionManager.RecognitionCallback {
+    method public void onAudioStreamClosed();
+    method public void onRecognitionFailed(@NonNull android.media.musicrecognition.RecognitionRequest, int);
+    method public void onRecognitionSucceeded(@NonNull android.media.musicrecognition.RecognitionRequest, @NonNull android.media.MediaMetadata, @Nullable android.os.Bundle);
+  }
+
+  public abstract class MusicRecognitionService extends android.app.Service {
+    ctor public MusicRecognitionService();
+    method public abstract void onRecognize(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @NonNull android.media.musicrecognition.MusicRecognitionService.Callback);
+  }
+
+  public static interface MusicRecognitionService.Callback {
+    method public void onRecognitionFailed(int);
+    method public void onRecognitionSucceeded(@NonNull android.media.MediaMetadata, @Nullable android.os.Bundle);
+  }
+
+  public final class RecognitionRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.media.AudioAttributes getAudioAttributes();
+    method @NonNull public android.media.AudioFormat getAudioFormat();
+    method public int getCaptureSession();
+    method public int getIgnoreBeginningFrames();
+    method public int getMaxAudioLengthSeconds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.musicrecognition.RecognitionRequest> CREATOR;
+  }
+
+  public static final class RecognitionRequest.Builder {
+    ctor public RecognitionRequest.Builder();
+    method @NonNull public android.media.musicrecognition.RecognitionRequest build();
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setAudioAttributes(@NonNull android.media.AudioAttributes);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setAudioFormat(@NonNull android.media.AudioFormat);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setCaptureSession(int);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setIgnoreBeginningFrames(int);
+    method @NonNull public android.media.musicrecognition.RecognitionRequest.Builder setMaxAudioLengthSeconds(int);
+  }
+
+}
+
+package android.media.session {
+
+  public final class MediaSessionManager {
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void addOnMediaKeyEventDispatchedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.OnMediaKeyEventDispatchedListener);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void addOnMediaKeyEventSessionChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.OnMediaKeyEventSessionChangedListener);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public android.media.session.MediaSession.Token getMediaKeyEventSession();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public String getMediaKeyEventSessionPackageName();
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void removeOnMediaKeyEventDispatchedListener(@NonNull android.media.session.MediaSessionManager.OnMediaKeyEventDispatchedListener);
+    method @RequiresPermission(android.Manifest.permission.MEDIA_CONTENT_CONTROL) public void removeOnMediaKeyEventSessionChangedListener(@NonNull android.media.session.MediaSessionManager.OnMediaKeyEventSessionChangedListener);
+    method @RequiresPermission(android.Manifest.permission.SET_MEDIA_KEY_LISTENER) public void setOnMediaKeyListener(android.media.session.MediaSessionManager.OnMediaKeyListener, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER) public void setOnVolumeKeyLongPressListener(android.media.session.MediaSessionManager.OnVolumeKeyLongPressListener, @Nullable android.os.Handler);
+  }
+
+  public static interface MediaSessionManager.OnMediaKeyEventDispatchedListener {
+    method public void onMediaKeyEventDispatched(@NonNull android.view.KeyEvent, @NonNull String, @Nullable android.media.session.MediaSession.Token);
+  }
+
+  public static interface MediaSessionManager.OnMediaKeyEventSessionChangedListener {
+    method public void onMediaKeyEventSessionChanged(@NonNull String, @Nullable android.media.session.MediaSession.Token);
+  }
+
+  public static interface MediaSessionManager.OnMediaKeyListener {
+    method public boolean onMediaKey(android.view.KeyEvent);
+  }
+
+  public static interface MediaSessionManager.OnVolumeKeyLongPressListener {
+    method public void onVolumeKeyLongPress(android.view.KeyEvent);
+  }
+
+}
+
+package android.media.soundtrigger {
+
+  public abstract class SoundTriggerDetectionService extends android.app.Service {
+    ctor public SoundTriggerDetectionService();
+    method @MainThread public void onConnected(@NonNull java.util.UUID, @Nullable android.os.Bundle);
+    method @MainThread public void onDisconnected(@NonNull java.util.UUID, @Nullable android.os.Bundle);
+    method @MainThread public void onError(@NonNull java.util.UUID, @Nullable android.os.Bundle, int, int);
+    method @MainThread public void onGenericRecognitionEvent(@NonNull java.util.UUID, @Nullable android.os.Bundle, int, @NonNull android.hardware.soundtrigger.SoundTrigger.RecognitionEvent);
+    method @MainThread public abstract void onStopOperation(@NonNull java.util.UUID, @Nullable android.os.Bundle, int);
+    method public final void operationFinished(@Nullable java.util.UUID, int);
+  }
+
+  public final class SoundTriggerDetector {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public boolean startRecognition(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public boolean stopRecognition();
+    field public static final int RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS = 2; // 0x2
+    field public static final int RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO = 1; // 0x1
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_ECHO_CANCELLATION = 4; // 0x4
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION = 8; // 0x8
+    field public static final int RECOGNITION_FLAG_RUN_IN_BATTERY_SAVER = 16; // 0x10
+  }
+
+  public abstract static class SoundTriggerDetector.Callback {
+    ctor public SoundTriggerDetector.Callback();
+    method public abstract void onAvailabilityChanged(int);
+    method public abstract void onDetected(@NonNull android.media.soundtrigger.SoundTriggerDetector.EventPayload);
+    method public abstract void onError();
+    method public abstract void onRecognitionPaused();
+    method public abstract void onRecognitionResumed();
+  }
+
+  public static class SoundTriggerDetector.EventPayload {
+    method @Nullable public android.media.AudioFormat getCaptureAudioFormat();
+    method @Nullable public byte[] getTriggerAudio();
+  }
+
+  public final class SoundTriggerManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.media.soundtrigger.SoundTriggerDetector createSoundTriggerDetector(java.util.UUID, @NonNull android.media.soundtrigger.SoundTriggerDetector.Callback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public void deleteModel(java.util.UUID);
+    method public int getDetectionServiceOperationsTimeout();
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.media.soundtrigger.SoundTriggerManager.Model getModel(java.util.UUID);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.hardware.soundtrigger.SoundTrigger.ModuleProperties getModuleProperties();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public int getParameter(@NonNull java.util.UUID, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public android.hardware.soundtrigger.SoundTrigger.ModelParamRange queryParameter(@Nullable java.util.UUID, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public int setParameter(@Nullable java.util.UUID, int, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SOUND_TRIGGER) public void updateModel(android.media.soundtrigger.SoundTriggerManager.Model);
+  }
+
+  public static class SoundTriggerManager.Model {
+    method @NonNull public static android.media.soundtrigger.SoundTriggerManager.Model create(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[], int);
+    method @NonNull public static android.media.soundtrigger.SoundTriggerManager.Model create(@NonNull java.util.UUID, @NonNull java.util.UUID, @Nullable byte[]);
+    method @Nullable public byte[] getModelData();
+    method @NonNull public java.util.UUID getModelUuid();
+    method @NonNull public java.util.UUID getVendorUuid();
+    method public int getVersion();
+  }
+
+}
+
+package android.media.tv {
+
+  public final class DvbDeviceInfo implements android.os.Parcelable {
+    ctor public DvbDeviceInfo(int, int);
+    method public int describeContents();
+    method @IntRange(from=0) public int getAdapterId();
+    method @IntRange(from=0) public int getDeviceId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.DvbDeviceInfo> CREATOR;
+  }
+
+  public final class TunedInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAppTag();
+    method public int getAppType();
+    method @Nullable public android.net.Uri getChannelUri();
+    method @NonNull public String getInputId();
+    method public boolean isMainSession();
+    method public boolean isRecordingSession();
+    method public boolean isVisible();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int APP_TAG_SELF = 0; // 0x0
+    field public static final int APP_TYPE_NON_SYSTEM = 3; // 0x3
+    field public static final int APP_TYPE_SELF = 1; // 0x1
+    field public static final int APP_TYPE_SYSTEM = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TunedInfo> CREATOR;
+  }
+
+  public final class TvContentRatingSystemInfo implements android.os.Parcelable {
+    method public static android.media.tv.TvContentRatingSystemInfo createTvContentRatingSystemInfo(int, android.content.pm.ApplicationInfo);
+    method public int describeContents();
+    method public android.net.Uri getXmlUri();
+    method public boolean isSystemDefined();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public final class TvContract {
+    method public static android.net.Uri buildChannelsUriForInput(@Nullable String, boolean);
+    method public static android.net.Uri buildChannelsUriForInput(@Nullable String, @Nullable String, boolean);
+    field public static final String ACTION_CHANNEL_BROWSABLE_REQUESTED = "android.media.tv.action.CHANNEL_BROWSABLE_REQUESTED";
+    field public static final String EXTRA_BLOCKED_PACKAGES = "android.media.tv.extra.BLOCKED_PACKAGES";
+    field public static final String EXTRA_COLUMN_NAME = "android.media.tv.extra.COLUMN_NAME";
+    field public static final String EXTRA_DATA_TYPE = "android.media.tv.extra.DATA_TYPE";
+    field public static final String EXTRA_DEFAULT_VALUE = "android.media.tv.extra.DEFAULT_VALUE";
+    field public static final String EXTRA_EXISTING_COLUMN_NAMES = "android.media.tv.extra.EXISTING_COLUMN_NAMES";
+    field public static final String EXTRA_PACKAGE_NAME = "android.media.tv.extra.PACKAGE_NAME";
+    field public static final String EXTRA_RESULT_CODE = "android.media.tv.extra.RESULT_CODE";
+    field public static final String METHOD_ADD_COLUMN = "add_column";
+    field public static final String METHOD_BLOCK_PACKAGE = "block_package";
+    field public static final String METHOD_GET_BLOCKED_PACKAGES = "get_blocked_packages";
+    field public static final String METHOD_GET_COLUMNS = "get_columns";
+    field public static final String METHOD_UNBLOCK_PACKAGE = "unblock_package";
+    field public static final int RESULT_ERROR_INVALID_ARGUMENT = 2; // 0x2
+    field public static final int RESULT_ERROR_IO = 1; // 0x1
+    field public static final int RESULT_OK = 0; // 0x0
+  }
+
+  public static final class TvContract.WatchedPrograms implements android.media.tv.TvContract.BaseTvColumns {
+    field public static final String COLUMN_CHANNEL_ID = "channel_id";
+    field public static final String COLUMN_DESCRIPTION = "description";
+    field public static final String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final String COLUMN_INTERNAL_SESSION_TOKEN = "session_token";
+    field public static final String COLUMN_INTERNAL_TUNE_PARAMS = "tune_params";
+    field public static final String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_WATCH_END_TIME_UTC_MILLIS = "watch_end_time_utc_millis";
+    field public static final String COLUMN_WATCH_START_TIME_UTC_MILLIS = "watch_start_time_utc_millis";
+    field public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/watched_program";
+    field public static final String CONTENT_TYPE = "vnd.android.cursor.dir/watched_program";
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
+  public final class TvInputHardwareInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public String getAudioAddress();
+    method public int getAudioType();
+    method public int getCableConnectionStatus();
+    method public int getDeviceId();
+    method public int getHdmiPortId();
+    method public int getType();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CABLE_CONNECTION_STATUS_CONNECTED = 1; // 0x1
+    field public static final int CABLE_CONNECTION_STATUS_DISCONNECTED = 2; // 0x2
+    field public static final int CABLE_CONNECTION_STATUS_UNKNOWN = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvInputHardwareInfo> CREATOR;
+    field public static final int TV_INPUT_TYPE_COMPONENT = 6; // 0x6
+    field public static final int TV_INPUT_TYPE_COMPOSITE = 3; // 0x3
+    field public static final int TV_INPUT_TYPE_DISPLAY_PORT = 10; // 0xa
+    field public static final int TV_INPUT_TYPE_DVI = 8; // 0x8
+    field public static final int TV_INPUT_TYPE_HDMI = 9; // 0x9
+    field public static final int TV_INPUT_TYPE_OTHER_HARDWARE = 1; // 0x1
+    field public static final int TV_INPUT_TYPE_SCART = 5; // 0x5
+    field public static final int TV_INPUT_TYPE_SVIDEO = 4; // 0x4
+    field public static final int TV_INPUT_TYPE_TUNER = 2; // 0x2
+    field public static final int TV_INPUT_TYPE_VGA = 7; // 0x7
+  }
+
+  public static final class TvInputHardwareInfo.Builder {
+    ctor public TvInputHardwareInfo.Builder();
+    method public android.media.tv.TvInputHardwareInfo.Builder audioAddress(String);
+    method public android.media.tv.TvInputHardwareInfo.Builder audioType(int);
+    method public android.media.tv.TvInputHardwareInfo build();
+    method public android.media.tv.TvInputHardwareInfo.Builder cableConnectionStatus(int);
+    method public android.media.tv.TvInputHardwareInfo.Builder deviceId(int);
+    method public android.media.tv.TvInputHardwareInfo.Builder hdmiPortId(int);
+    method public android.media.tv.TvInputHardwareInfo.Builder type(int);
+  }
+
+  public final class TvInputInfo implements android.os.Parcelable {
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.hardware.hdmi.HdmiDeviceInfo, String, String, android.net.Uri) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.hardware.hdmi.HdmiDeviceInfo, String, int, android.graphics.drawable.Icon) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.media.tv.TvInputHardwareInfo, String, android.net.Uri) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method @Deprecated public static android.media.tv.TvInputInfo createTvInputInfo(android.content.Context, android.content.pm.ResolveInfo, android.media.tv.TvInputHardwareInfo, int, android.graphics.drawable.Icon) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public android.hardware.hdmi.HdmiDeviceInfo getHdmiDeviceInfo();
+    method public boolean isConnectedToHdmiSwitch();
+    method public boolean isHardwareInput();
+    method public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context, int);
+  }
+
+  public static final class TvInputInfo.Builder {
+    method public android.media.tv.TvInputInfo.Builder setHdmiDeviceInfo(android.hardware.hdmi.HdmiDeviceInfo);
+    method public android.media.tv.TvInputInfo.Builder setIcon(android.graphics.drawable.Icon);
+    method public android.media.tv.TvInputInfo.Builder setIcon(android.graphics.drawable.Icon, int);
+    method public android.media.tv.TvInputInfo.Builder setLabel(CharSequence);
+    method public android.media.tv.TvInputInfo.Builder setLabel(@StringRes int);
+    method public android.media.tv.TvInputInfo.Builder setParentId(String);
+    method public android.media.tv.TvInputInfo.Builder setTvInputHardwareInfo(android.media.tv.TvInputHardwareInfo);
+  }
+
+  public static final class TvInputInfo.TvInputSettings {
+    method public static java.util.Map<java.lang.String,java.lang.String> getCustomLabels(android.content.Context, int);
+    method public static java.util.Set<java.lang.String> getHiddenTvInputIds(android.content.Context, int);
+    method public static void putCustomLabels(android.content.Context, java.util.Map<java.lang.String,java.lang.String>, int);
+    method public static void putHiddenTvInputs(android.content.Context, java.util.Set<java.lang.String>, int);
+  }
+
+  public final class TvInputManager {
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, @NonNull android.media.tv.TvInputInfo, @NonNull android.media.tv.TvInputManager.HardwareCallback);
+    method @Nullable @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, @NonNull android.media.tv.TvInputInfo, @Nullable String, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.TvInputManager.HardwareCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void addBlockedRating(@NonNull android.media.tv.TvContentRating);
+    method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public boolean captureFrame(String, android.view.Surface, android.media.tv.TvStreamConfig);
+    method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public java.util.List<android.media.tv.TvStreamConfig> getAvailableTvStreamConfigList(String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_TUNED_INFO) public java.util.List<android.media.tv.TunedInfo> getCurrentTunedInfos();
+    method @NonNull @RequiresPermission("android.permission.DVB_DEVICE") public java.util.List<android.media.tv.DvbDeviceInfo> getDvbDeviceList();
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public java.util.List<android.media.tv.TvInputHardwareInfo> getHardwareList();
+    method @RequiresPermission(android.Manifest.permission.READ_CONTENT_RATING_SYSTEMS) public java.util.List<android.media.tv.TvContentRatingSystemInfo> getTvContentRatingSystemList();
+    method @RequiresPermission(android.Manifest.permission.CAPTURE_TV_INPUT) public boolean isSingleSessionActive();
+    method @RequiresPermission(android.Manifest.permission.NOTIFY_TV_INPUTS) public void notifyPreviewProgramAddedToWatchNext(String, long, long);
+    method @RequiresPermission(android.Manifest.permission.NOTIFY_TV_INPUTS) public void notifyPreviewProgramBrowsableDisabled(String, long);
+    method @RequiresPermission(android.Manifest.permission.NOTIFY_TV_INPUTS) public void notifyWatchNextProgramBrowsableDisabled(String, long);
+    method @Nullable @RequiresPermission("android.permission.DVB_DEVICE") public android.os.ParcelFileDescriptor openDvbDevice(@NonNull android.media.tv.DvbDeviceInfo, int);
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public void releaseTvInputHardware(int, android.media.tv.TvInputManager.Hardware);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void removeBlockedRating(@NonNull android.media.tv.TvContentRating);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void setParentalControlsEnabled(boolean);
+  }
+
+  public static final class TvInputManager.Hardware {
+    method public void overrideAudioSink(int, String, int, int, int);
+    method public void setStreamVolume(float);
+    method public boolean setSurface(android.view.Surface, android.media.tv.TvStreamConfig);
+  }
+
+  public abstract static class TvInputManager.HardwareCallback {
+    ctor public TvInputManager.HardwareCallback();
+    method public abstract void onReleased();
+    method public abstract void onStreamConfigChanged(android.media.tv.TvStreamConfig[]);
+  }
+
+  public abstract static class TvInputManager.TvInputCallback {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_TUNED_INFO) public void onCurrentTunedInfosUpdated(@NonNull java.util.List<android.media.tv.TunedInfo>);
+  }
+
+  public abstract class TvInputService extends android.app.Service {
+    method @Nullable public android.os.IBinder createExtension();
+    method @Nullable public android.media.tv.TvInputInfo onHardwareAdded(android.media.tv.TvInputHardwareInfo);
+    method @Nullable public String onHardwareRemoved(android.media.tv.TvInputHardwareInfo);
+    method @Nullable public android.media.tv.TvInputInfo onHdmiDeviceAdded(android.hardware.hdmi.HdmiDeviceInfo);
+    method @Nullable public String onHdmiDeviceRemoved(android.hardware.hdmi.HdmiDeviceInfo);
+    method public void onHdmiDeviceUpdated(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+  }
+
+  public abstract static class TvInputService.RecordingSession {
+    method public void notifySessionEvent(@NonNull String, android.os.Bundle);
+  }
+
+  public abstract static class TvInputService.Session implements android.view.KeyEvent.Callback {
+    method public void notifySessionEvent(@NonNull String, android.os.Bundle);
+    method public void onSetMain(boolean);
+  }
+
+  public abstract static class TvRecordingClient.RecordingCallback {
+    method public void onEvent(String, String, android.os.Bundle);
+  }
+
+  public class TvStreamConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getGeneration();
+    method public int getMaxHeight();
+    method public int getMaxWidth();
+    method public int getStreamId();
+    method public int getType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.media.tv.TvStreamConfig> CREATOR;
+    field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2
+    field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1
+  }
+
+  public static final class TvStreamConfig.Builder {
+    ctor public TvStreamConfig.Builder();
+    method public android.media.tv.TvStreamConfig build();
+    method public android.media.tv.TvStreamConfig.Builder generation(int);
+    method public android.media.tv.TvStreamConfig.Builder maxHeight(int);
+    method public android.media.tv.TvStreamConfig.Builder maxWidth(int);
+    method public android.media.tv.TvStreamConfig.Builder streamId(int);
+    method public android.media.tv.TvStreamConfig.Builder type(int);
+  }
+
+  public class TvView extends android.view.ViewGroup {
+    method @RequiresPermission("android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE") public void setMain();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PARENTAL_CONTROLS) public void unblockContent(android.media.tv.TvContentRating);
+  }
+
+  public abstract static class TvView.TvInputCallback {
+    method public void onEvent(String, String, android.os.Bundle);
+  }
+
+}
+
+package android.media.tv.tuner {
+
+  public class DemuxCapabilities {
+    method public int getAudioFilterCount();
+    method public int getDemuxCount();
+    method public int getFilterCapabilities();
+    method @NonNull @Size(5) public int[] getLinkCapabilities();
+    method public int getPcrFilterCount();
+    method public int getPesFilterCount();
+    method public int getPlaybackCount();
+    method public int getRecordCount();
+    method public int getSectionFilterCount();
+    method public long getSectionFilterLength();
+    method public int getTsFilterCount();
+    method public int getVideoFilterCount();
+    method public boolean isTimeFilterSupported();
+  }
+
+  public class Descrambler implements java.lang.AutoCloseable {
+    method public int addPid(int, int, @Nullable android.media.tv.tuner.filter.Filter);
+    method public void close();
+    method public static boolean isValidKeyToken(@NonNull byte[]);
+    method public int removePid(int, int, @Nullable android.media.tv.tuner.filter.Filter);
+    method public int setKeyToken(@NonNull byte[]);
+    field public static final int PID_TYPE_MMTP = 2; // 0x2
+    field public static final int PID_TYPE_T = 1; // 0x1
+  }
+
+  public class Lnb implements java.lang.AutoCloseable {
+    method public void close();
+    method public int sendDiseqcMessage(@NonNull byte[]);
+    method public int setSatellitePosition(int);
+    method public int setTone(int);
+    method public int setVoltage(int);
+    field public static final int EVENT_TYPE_DISEQC_RX_OVERFLOW = 0; // 0x0
+    field public static final int EVENT_TYPE_DISEQC_RX_PARITY_ERROR = 2; // 0x2
+    field public static final int EVENT_TYPE_DISEQC_RX_TIMEOUT = 1; // 0x1
+    field public static final int EVENT_TYPE_LNB_OVERLOAD = 3; // 0x3
+    field public static final int POSITION_A = 1; // 0x1
+    field public static final int POSITION_B = 2; // 0x2
+    field public static final int POSITION_UNDEFINED = 0; // 0x0
+    field public static final int TONE_CONTINUOUS = 1; // 0x1
+    field public static final int TONE_NONE = 0; // 0x0
+    field public static final int VOLTAGE_11V = 2; // 0x2
+    field public static final int VOLTAGE_12V = 3; // 0x3
+    field public static final int VOLTAGE_13V = 4; // 0x4
+    field public static final int VOLTAGE_14V = 5; // 0x5
+    field public static final int VOLTAGE_15V = 6; // 0x6
+    field public static final int VOLTAGE_18V = 7; // 0x7
+    field public static final int VOLTAGE_19V = 8; // 0x8
+    field public static final int VOLTAGE_5V = 1; // 0x1
+    field public static final int VOLTAGE_NONE = 0; // 0x0
+  }
+
+  public interface LnbCallback {
+    method public void onDiseqcMessage(@NonNull byte[]);
+    method public void onEvent(int);
+  }
+
+  public class Tuner implements java.lang.AutoCloseable {
+    ctor @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public Tuner(@NonNull android.content.Context, @Nullable String, int);
+    method public int cancelScanning();
+    method public int cancelTuning();
+    method public void clearOnTuneEventListener();
+    method public void clearResourceLostListener();
+    method public void close();
+    method public int connectCiCam(int);
+    method public int connectFrontendToCiCam(int);
+    method public int disconnectCiCam();
+    method public int disconnectFrontendToCiCam(int);
+    method public int getAvSyncHwId(@NonNull android.media.tv.tuner.filter.Filter);
+    method public long getAvSyncTime(int);
+    method @Nullable public java.util.List<android.media.tv.tuner.frontend.FrontendInfo> getAvailableFrontendInfos();
+    method @Nullable public android.media.tv.tuner.DemuxCapabilities getDemuxCapabilities();
+    method @Nullable public android.media.tv.tuner.frontend.FrontendInfo getFrontendInfo();
+    method @Nullable public android.media.tv.tuner.frontend.FrontendStatus getFrontendStatus(@NonNull int[]);
+    method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_TV_DESCRAMBLER) public android.media.tv.tuner.Descrambler openDescrambler();
+    method @Nullable public android.media.tv.tuner.dvr.DvrPlayback openDvrPlayback(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnPlaybackStatusChangedListener);
+    method @Nullable public android.media.tv.tuner.dvr.DvrRecorder openDvrRecorder(long, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.dvr.OnRecordStatusChangedListener);
+    method @Nullable public android.media.tv.tuner.filter.Filter openFilter(int, int, long, @Nullable java.util.concurrent.Executor, @Nullable android.media.tv.tuner.filter.FilterCallback);
+    method @Nullable public android.media.tv.tuner.Lnb openLnb(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
+    method @Nullable public android.media.tv.tuner.Lnb openLnbByName(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.LnbCallback);
+    method @Nullable public android.media.tv.tuner.filter.TimeFilter openTimeFilter();
+    method public int scan(@NonNull android.media.tv.tuner.frontend.FrontendSettings, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.ScanCallback);
+    method public int setLnaEnabled(boolean);
+    method public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener);
+    method public void setResourceLostListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.Tuner.OnResourceLostListener);
+    method public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner);
+    method public int tune(@NonNull android.media.tv.tuner.frontend.FrontendSettings);
+    method public void updateResourcePriority(int, int);
+    field public static final int INVALID_AV_SYNC_ID = -1; // 0xffffffff
+    field public static final int INVALID_FILTER_ID = -1; // 0xffffffff
+    field public static final long INVALID_FILTER_ID_LONG = -1L; // 0xffffffffffffffffL
+    field public static final int INVALID_FIRST_MACROBLOCK_IN_SLICE = -1; // 0xffffffff
+    field public static final int INVALID_FRONTEND_ID = -1; // 0xffffffff
+    field public static final int INVALID_FRONTEND_SETTING_FREQUENCY = -1; // 0xffffffff
+    field public static final int INVALID_LTS_ID = -1; // 0xffffffff
+    field public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = -1; // 0xffffffff
+    field public static final int INVALID_STREAM_ID = 65535; // 0xffff
+    field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL
+    field public static final int INVALID_TS_PID = 65535; // 0xffff
+    field public static final int RESULT_INVALID_ARGUMENT = 4; // 0x4
+    field public static final int RESULT_INVALID_STATE = 3; // 0x3
+    field public static final int RESULT_NOT_INITIALIZED = 2; // 0x2
+    field public static final int RESULT_OUT_OF_MEMORY = 5; // 0x5
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int RESULT_UNAVAILABLE = 1; // 0x1
+    field public static final int RESULT_UNKNOWN_ERROR = 6; // 0x6
+    field public static final int SCAN_TYPE_AUTO = 1; // 0x1
+    field public static final int SCAN_TYPE_BLIND = 2; // 0x2
+    field public static final int SCAN_TYPE_UNDEFINED = 0; // 0x0
+    field @NonNull public static final byte[] VOID_KEYTOKEN;
+  }
+
+  public static interface Tuner.OnResourceLostListener {
+    method public void onResourceLost(@NonNull android.media.tv.tuner.Tuner);
+  }
+
+  public final class TunerVersionChecker {
+    method public static int getTunerVersion();
+    field public static final int TUNER_VERSION_1_0 = 65536; // 0x10000
+    field public static final int TUNER_VERSION_1_1 = 65537; // 0x10001
+    field public static final int TUNER_VERSION_UNKNOWN = 0; // 0x0
+  }
+
+}
+
+package android.media.tv.tuner.dvr {
+
+  public class DvrPlayback implements java.lang.AutoCloseable {
+    method @Deprecated public int attachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public void close();
+    method public int configure(@NonNull android.media.tv.tuner.dvr.DvrSettings);
+    method @Deprecated public int detachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public int flush();
+    method public long read(long);
+    method public long read(@NonNull byte[], long, long);
+    method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public int start();
+    method public int stop();
+    field public static final int PLAYBACK_STATUS_ALMOST_EMPTY = 2; // 0x2
+    field public static final int PLAYBACK_STATUS_ALMOST_FULL = 4; // 0x4
+    field public static final int PLAYBACK_STATUS_EMPTY = 1; // 0x1
+    field public static final int PLAYBACK_STATUS_FULL = 8; // 0x8
+  }
+
+  public class DvrRecorder implements java.lang.AutoCloseable {
+    method public int attachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public void close();
+    method public int configure(@NonNull android.media.tv.tuner.dvr.DvrSettings);
+    method public int detachFilter(@NonNull android.media.tv.tuner.filter.Filter);
+    method public int flush();
+    method public void setFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method public int start();
+    method public int stop();
+    method public long write(long);
+    method public long write(@NonNull byte[], long, long);
+  }
+
+  public class DvrSettings {
+    method @NonNull public static android.media.tv.tuner.dvr.DvrSettings.Builder builder();
+    method public int getDataFormat();
+    method public long getHighThreshold();
+    method public long getLowThreshold();
+    method public long getPacketSize();
+    method public int getStatusMask();
+    field public static final int DATA_FORMAT_ES = 2; // 0x2
+    field public static final int DATA_FORMAT_PES = 1; // 0x1
+    field public static final int DATA_FORMAT_SHV_TLV = 3; // 0x3
+    field public static final int DATA_FORMAT_TS = 0; // 0x0
+  }
+
+  public static final class DvrSettings.Builder {
+    ctor public DvrSettings.Builder();
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings build();
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setDataFormat(int);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setHighThreshold(long);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setLowThreshold(long);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setPacketSize(long);
+    method @NonNull public android.media.tv.tuner.dvr.DvrSettings.Builder setStatusMask(int);
+  }
+
+  public interface OnPlaybackStatusChangedListener {
+    method public void onPlaybackStatusChanged(int);
+  }
+
+  public interface OnRecordStatusChangedListener {
+    method public void onRecordStatusChanged(int);
+  }
+
+}
+
+package android.media.tv.tuner.filter {
+
+  public final class AlpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.AlpFilterConfiguration.Builder builder();
+    method public int getLengthType();
+    method public int getPacketType();
+    method public int getType();
+    field public static final int LENGTH_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int LENGTH_TYPE_WITHOUT_ADDITIONAL_HEADER = 1; // 0x1
+    field public static final int LENGTH_TYPE_WITH_ADDITIONAL_HEADER = 2; // 0x2
+    field public static final int PACKET_TYPE_COMPRESSED = 2; // 0x2
+    field public static final int PACKET_TYPE_EXTENSION = 6; // 0x6
+    field public static final int PACKET_TYPE_IPV4 = 0; // 0x0
+    field public static final int PACKET_TYPE_MPEG2_TS = 7; // 0x7
+    field public static final int PACKET_TYPE_SIGNALING = 4; // 0x4
+  }
+
+  public static final class AlpFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration.Builder setLengthType(int);
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration.Builder setPacketType(int);
+    method @NonNull public android.media.tv.tuner.filter.AlpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+  }
+
+  public class AudioDescriptor {
+    method public byte getAdFade();
+    method public byte getAdGainCenter();
+    method public byte getAdGainFront();
+    method public byte getAdGainSurround();
+    method public byte getAdPan();
+    method public char getAdVersionTextTag();
+  }
+
+  public class AvSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean);
+    method public int getAudioStreamType();
+    method public int getVideoStreamType();
+    method public boolean isPassthrough();
+    field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6
+    field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7
+    field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9
+    field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf
+    field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa
+    field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb
+    field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8
+    field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2
+    field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3
+    field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4
+    field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5
+    field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd
+    field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1
+    field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe
+    field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc
+    field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa
+    field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5
+    field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb
+    field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc
+    field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6
+    field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2
+    field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3
+    field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4
+    field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1
+    field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7
+    field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8
+    field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9
+  }
+
+  public static class AvSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.AvSettings build();
+    method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int);
+    method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean);
+    method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int);
+  }
+
+  public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+    method public int getItemFragmentIndex();
+    method public int getItemId();
+    method public int getLastItemFragmentIndex();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+  }
+
+  public class DownloadSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.DownloadSettings.Builder builder(int);
+    method public int getDownloadId();
+  }
+
+  public static class DownloadSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.DownloadSettings build();
+    method @NonNull public android.media.tv.tuner.filter.DownloadSettings.Builder setDownloadId(int);
+  }
+
+  public class Filter implements java.lang.AutoCloseable {
+    method public void close();
+    method public int configure(@NonNull android.media.tv.tuner.filter.FilterConfiguration);
+    method public int flush();
+    method public int getId();
+    method public long getIdLong();
+    method public int read(@NonNull byte[], long, long);
+    method public int setDataSource(@Nullable android.media.tv.tuner.filter.Filter);
+    method public int setMonitorEventMask(int);
+    method public int start();
+    method public int stop();
+    field public static final int MONITOR_EVENT_IP_CID_CHANGE = 2; // 0x2
+    field public static final int MONITOR_EVENT_SCRAMBLING_STATUS = 1; // 0x1
+    field public static final int SCRAMBLING_STATUS_NOT_SCRAMBLED = 2; // 0x2
+    field public static final int SCRAMBLING_STATUS_SCRAMBLED = 4; // 0x4
+    field public static final int SCRAMBLING_STATUS_UNKNOWN = 1; // 0x1
+    field public static final int STATUS_DATA_READY = 1; // 0x1
+    field public static final int STATUS_HIGH_WATER = 4; // 0x4
+    field public static final int STATUS_LOW_WATER = 2; // 0x2
+    field public static final int STATUS_OVERFLOW = 8; // 0x8
+    field public static final int SUBTYPE_AUDIO = 3; // 0x3
+    field public static final int SUBTYPE_DOWNLOAD = 5; // 0x5
+    field public static final int SUBTYPE_IP = 13; // 0xd
+    field public static final int SUBTYPE_IP_PAYLOAD = 12; // 0xc
+    field public static final int SUBTYPE_MMTP = 10; // 0xa
+    field public static final int SUBTYPE_NTP = 11; // 0xb
+    field public static final int SUBTYPE_PAYLOAD_THROUGH = 14; // 0xe
+    field public static final int SUBTYPE_PCR = 8; // 0x8
+    field public static final int SUBTYPE_PES = 2; // 0x2
+    field public static final int SUBTYPE_PTP = 16; // 0x10
+    field public static final int SUBTYPE_RECORD = 6; // 0x6
+    field public static final int SUBTYPE_SECTION = 1; // 0x1
+    field public static final int SUBTYPE_TEMI = 9; // 0x9
+    field public static final int SUBTYPE_TLV = 15; // 0xf
+    field public static final int SUBTYPE_TS = 7; // 0x7
+    field public static final int SUBTYPE_UNDEFINED = 0; // 0x0
+    field public static final int SUBTYPE_VIDEO = 4; // 0x4
+    field public static final int TYPE_ALP = 16; // 0x10
+    field public static final int TYPE_IP = 4; // 0x4
+    field public static final int TYPE_MMTP = 2; // 0x2
+    field public static final int TYPE_TLV = 8; // 0x8
+    field public static final int TYPE_TS = 1; // 0x1
+    field public static final int TYPE_UNDEFINED = 0; // 0x0
+  }
+
+  public interface FilterCallback {
+    method public void onFilterEvent(@NonNull android.media.tv.tuner.filter.Filter, @NonNull android.media.tv.tuner.filter.FilterEvent[]);
+    method public void onFilterStatusChanged(@NonNull android.media.tv.tuner.filter.Filter, int);
+  }
+
+  public abstract class FilterConfiguration {
+    method @Nullable public android.media.tv.tuner.filter.Settings getSettings();
+    method public abstract int getType();
+  }
+
+  public abstract class FilterEvent {
+    ctor public FilterEvent();
+  }
+
+  public final class IpCidChangeEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getIpCid();
+  }
+
+  public final class IpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.IpFilterConfiguration.Builder builder();
+    method @NonNull @Size(min=4, max=16) public byte[] getDstIpAddress();
+    method public int getDstPort();
+    method @IntRange(from=0, to=61439) public int getIpFilterContextId();
+    method @NonNull @Size(min=4, max=16) public byte[] getSrcIpAddress();
+    method public int getSrcPort();
+    method public int getType();
+    method public boolean isPassthrough();
+    field public static final int INVALID_IP_FILTER_CONTEXT_ID = -1; // 0xffffffff
+  }
+
+  public static final class IpFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstIpAddress(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setDstPort(int);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setIpFilterContextId(int);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setPassthrough(boolean);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcIpAddress(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.IpFilterConfiguration.Builder setSrcPort(int);
+  }
+
+  public class IpPayloadEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+  }
+
+  public class MediaEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public long getAudioHandle();
+    method public long getAvDataId();
+    method public long getDataLength();
+    method @Nullable public android.media.tv.tuner.filter.AudioDescriptor getExtraMetaData();
+    method @Nullable public android.media.MediaCodec.LinearBlock getLinearBlock();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+    method public long getOffset();
+    method public long getPts();
+    method public int getStreamId();
+    method public boolean isPrivateData();
+    method public boolean isPtsPresent();
+    method public boolean isSecureMemory();
+    method public void release();
+  }
+
+  public final class MmtpFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder builder();
+    method public int getMmtpPacketId();
+    method public int getType();
+  }
+
+  public static final class MmtpFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.MmtpFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder setMmtpPacketId(int);
+    method @NonNull public android.media.tv.tuner.filter.MmtpFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+  }
+
+  public class MmtpRecordEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public long getDataLength();
+    method public int getFirstMacroblockInSlice();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+    method public long getPts();
+    method public int getScHevcIndexMask();
+    method public int getTsIndexMask();
+  }
+
+  public class PesEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+    method @IntRange(from=0) public int getMpuSequenceNumber();
+    method public int getStreamId();
+  }
+
+  public class PesSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.PesSettings.Builder builder(int);
+    method public int getStreamId();
+    method public boolean isRaw();
+  }
+
+  public static class PesSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.PesSettings build();
+    method @NonNull public android.media.tv.tuner.filter.PesSettings.Builder setRaw(boolean);
+    method @NonNull public android.media.tv.tuner.filter.PesSettings.Builder setStreamId(int);
+  }
+
+  public class RecordSettings extends android.media.tv.tuner.filter.Settings {
+    method @NonNull public static android.media.tv.tuner.filter.RecordSettings.Builder builder(int);
+    method public int getScIndexMask();
+    method public int getScIndexType();
+    method public int getTsIndexMask();
+    field public static final int INDEX_TYPE_NONE = 0; // 0x0
+    field public static final int INDEX_TYPE_SC = 1; // 0x1
+    field public static final int INDEX_TYPE_SC_HEVC = 2; // 0x2
+    field public static final int MPT_INDEX_AUDIO = 262144; // 0x40000
+    field public static final int MPT_INDEX_MPT = 65536; // 0x10000
+    field public static final int MPT_INDEX_TIMESTAMP_TARGET_AUDIO = 1048576; // 0x100000
+    field public static final int MPT_INDEX_TIMESTAMP_TARGET_VIDEO = 524288; // 0x80000
+    field public static final int MPT_INDEX_VIDEO = 131072; // 0x20000
+    field public static final int SC_HEVC_INDEX_AUD = 2; // 0x2
+    field public static final int SC_HEVC_INDEX_SLICE_BLA_N_LP = 16; // 0x10
+    field public static final int SC_HEVC_INDEX_SLICE_BLA_W_RADL = 8; // 0x8
+    field public static final int SC_HEVC_INDEX_SLICE_CE_BLA_W_LP = 4; // 0x4
+    field public static final int SC_HEVC_INDEX_SLICE_IDR_N_LP = 64; // 0x40
+    field public static final int SC_HEVC_INDEX_SLICE_IDR_W_RADL = 32; // 0x20
+    field public static final int SC_HEVC_INDEX_SLICE_TRAIL_CRA = 128; // 0x80
+    field public static final int SC_HEVC_INDEX_SPS = 1; // 0x1
+    field public static final int SC_INDEX_B_FRAME = 4; // 0x4
+    field public static final int SC_INDEX_B_SLICE = 64; // 0x40
+    field public static final int SC_INDEX_I_FRAME = 1; // 0x1
+    field public static final int SC_INDEX_I_SLICE = 16; // 0x10
+    field public static final int SC_INDEX_P_FRAME = 2; // 0x2
+    field public static final int SC_INDEX_P_SLICE = 32; // 0x20
+    field public static final int SC_INDEX_SEQUENCE = 8; // 0x8
+    field public static final int SC_INDEX_SI_SLICE = 128; // 0x80
+    field public static final int SC_INDEX_SP_SLICE = 256; // 0x100
+    field public static final int TS_INDEX_ADAPTATION_EXTENSION_FLAG = 4096; // 0x1000
+    field public static final int TS_INDEX_CHANGE_TO_EVEN_SCRAMBLED = 8; // 0x8
+    field public static final int TS_INDEX_CHANGE_TO_NOT_SCRAMBLED = 4; // 0x4
+    field public static final int TS_INDEX_CHANGE_TO_ODD_SCRAMBLED = 16; // 0x10
+    field public static final int TS_INDEX_DISCONTINUITY_INDICATOR = 32; // 0x20
+    field public static final int TS_INDEX_FIRST_PACKET = 1; // 0x1
+    field public static final int TS_INDEX_INVALID = 0; // 0x0
+    field public static final int TS_INDEX_OPCR_FLAG = 512; // 0x200
+    field public static final int TS_INDEX_PAYLOAD_UNIT_START_INDICATOR = 2; // 0x2
+    field public static final int TS_INDEX_PCR_FLAG = 256; // 0x100
+    field public static final int TS_INDEX_PRIORITY_INDICATOR = 128; // 0x80
+    field public static final int TS_INDEX_PRIVATE_DATA = 2048; // 0x800
+    field public static final int TS_INDEX_RANDOM_ACCESS_INDICATOR = 64; // 0x40
+    field public static final int TS_INDEX_SPLICING_POINT_FLAG = 1024; // 0x400
+  }
+
+  public static class RecordSettings.Builder {
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings build();
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings.Builder setScIndexMask(int);
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings.Builder setScIndexType(int);
+    method @NonNull public android.media.tv.tuner.filter.RecordSettings.Builder setTsIndexMask(int);
+  }
+
+  public final class RestartEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getStartId();
+    field public static final int NEW_FILTER_FIRST_START_ID = 0; // 0x0
+  }
+
+  public final class ScramblingStatusEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getScramblingStatus();
+  }
+
+  public class SectionEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public int getDataLength();
+    method public int getSectionNumber();
+    method public int getTableId();
+    method public int getVersion();
+  }
+
+  public abstract class SectionSettings extends android.media.tv.tuner.filter.Settings {
+    method public boolean isCrcEnabled();
+    method public boolean isRaw();
+    method public boolean isRepeat();
+  }
+
+  public abstract static class SectionSettings.Builder<T extends android.media.tv.tuner.filter.SectionSettings.Builder<T>> {
+    method @NonNull public T setCrcEnabled(boolean);
+    method @NonNull public T setRaw(boolean);
+    method @NonNull public T setRepeat(boolean);
+  }
+
+  public class SectionSettingsWithSectionBits extends android.media.tv.tuner.filter.SectionSettings {
+    method @NonNull public static android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder builder(int);
+    method @NonNull public byte[] getFilterBytes();
+    method @NonNull public byte[] getMask();
+    method @NonNull public byte[] getMode();
+  }
+
+  public static class SectionSettingsWithSectionBits.Builder extends android.media.tv.tuner.filter.SectionSettings.Builder<android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder> {
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits build();
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setFilter(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setMask(@NonNull byte[]);
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setMode(@NonNull byte[]);
+  }
+
+  public class SectionSettingsWithTableInfo extends android.media.tv.tuner.filter.SectionSettings {
+    method @NonNull public static android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder builder(int);
+    method public int getTableId();
+    method public int getVersion();
+  }
+
+  public static class SectionSettingsWithTableInfo.Builder extends android.media.tv.tuner.filter.SectionSettings.Builder<android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder> {
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo build();
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder setTableId(int);
+    method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder setVersion(int);
+  }
+
+  public abstract class Settings {
+    method public int getType();
+  }
+
+  public class TemiEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method @NonNull public byte[] getDescriptorData();
+    method public byte getDescriptorTag();
+    method public long getPts();
+  }
+
+  public class TimeFilter implements java.lang.AutoCloseable {
+    method public int clearTimestamp();
+    method public void close();
+    method public long getSourceTime();
+    method public long getTimeStamp();
+    method public int setCurrentTimestamp(long);
+  }
+
+  public final class TlvFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.TlvFilterConfiguration.Builder builder();
+    method public int getPacketType();
+    method public int getType();
+    method public boolean isCompressedIpPacket();
+    method public boolean isPassthrough();
+    field public static final int PACKET_TYPE_COMPRESSED = 3; // 0x3
+    field public static final int PACKET_TYPE_IPV4 = 1; // 0x1
+    field public static final int PACKET_TYPE_IPV6 = 2; // 0x2
+    field public static final int PACKET_TYPE_NULL = 255; // 0xff
+    field public static final int PACKET_TYPE_SIGNALING = 254; // 0xfe
+  }
+
+  public static final class TlvFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setCompressedIpPacket(boolean);
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setPacketType(int);
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setPassthrough(boolean);
+    method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+  }
+
+  public final class TsFilterConfiguration extends android.media.tv.tuner.filter.FilterConfiguration {
+    method @NonNull public static android.media.tv.tuner.filter.TsFilterConfiguration.Builder builder();
+    method public int getTpid();
+    method public int getType();
+  }
+
+  public static final class TsFilterConfiguration.Builder {
+    method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration build();
+    method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration.Builder setSettings(@Nullable android.media.tv.tuner.filter.Settings);
+    method @NonNull public android.media.tv.tuner.filter.TsFilterConfiguration.Builder setTpid(int);
+  }
+
+  public class TsRecordEvent extends android.media.tv.tuner.filter.FilterEvent {
+    method public long getDataLength();
+    method public int getFirstMacroblockInSlice();
+    method public int getPacketId();
+    method public long getPts();
+    method public int getScIndexMask();
+    method public int getTsIndexMask();
+  }
+
+}
+
+package android.media.tv.tuner.frontend {
+
+  public class AnalogFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getSifStandardCapability();
+    method public int getSignalTypeCapability();
+  }
+
+  public class AnalogFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder builder();
+    method public int getAftFlag();
+    method public int getSifStandard();
+    method public int getSignalType();
+    method public int getType();
+    field public static final int AFT_FLAG_FALSE = 2; // 0x2
+    field public static final int AFT_FLAG_TRUE = 1; // 0x1
+    field public static final int AFT_FLAG_UNDEFINED = 0; // 0x0
+    field public static final int SIF_AUTO = 1; // 0x1
+    field public static final int SIF_BG = 2; // 0x2
+    field public static final int SIF_BG_A2 = 4; // 0x4
+    field public static final int SIF_BG_NICAM = 8; // 0x8
+    field public static final int SIF_DK = 32; // 0x20
+    field public static final int SIF_DK1_A2 = 64; // 0x40
+    field public static final int SIF_DK2_A2 = 128; // 0x80
+    field public static final int SIF_DK3_A2 = 256; // 0x100
+    field public static final int SIF_DK_NICAM = 512; // 0x200
+    field public static final int SIF_I = 16; // 0x10
+    field public static final int SIF_I_NICAM = 32768; // 0x8000
+    field public static final int SIF_L = 1024; // 0x400
+    field public static final int SIF_L_NICAM = 65536; // 0x10000
+    field public static final int SIF_L_PRIME = 131072; // 0x20000
+    field public static final int SIF_M = 2048; // 0x800
+    field public static final int SIF_M_A2 = 8192; // 0x2000
+    field public static final int SIF_M_BTSC = 4096; // 0x1000
+    field public static final int SIF_M_EIAJ = 16384; // 0x4000
+    field public static final int SIF_UNDEFINED = 0; // 0x0
+    field public static final int SIGNAL_TYPE_AUTO = 1; // 0x1
+    field public static final int SIGNAL_TYPE_NTSC = 32; // 0x20
+    field public static final int SIGNAL_TYPE_NTSC_443 = 64; // 0x40
+    field public static final int SIGNAL_TYPE_PAL = 2; // 0x2
+    field public static final int SIGNAL_TYPE_PAL_60 = 16; // 0x10
+    field public static final int SIGNAL_TYPE_PAL_M = 4; // 0x4
+    field public static final int SIGNAL_TYPE_PAL_N = 8; // 0x8
+    field public static final int SIGNAL_TYPE_SECAM = 128; // 0x80
+    field public static final int SIGNAL_TYPE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class AnalogFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setAftFlag(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSifStandard(int);
+    method @NonNull public android.media.tv.tuner.frontend.AnalogFrontendSettings.Builder setSignalType(int);
+  }
+
+  public class Atsc3FrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getDemodOutputFormatCapability();
+    method public int getFecCapability();
+    method public int getModulationCapability();
+    method public int getPlpCodeRateCapability();
+    method public int getTimeInterleaveModeCapability();
+  }
+
+  public class Atsc3FrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getDemodOutputFormat();
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings[] getPlpSettings();
+    method public int getType();
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_BANDWIDTH_6MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_BANDWIDTH_8MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int CODERATE_10_15 = 512; // 0x200
+    field public static final int CODERATE_11_15 = 1024; // 0x400
+    field public static final int CODERATE_12_15 = 2048; // 0x800
+    field public static final int CODERATE_13_15 = 4096; // 0x1000
+    field public static final int CODERATE_2_15 = 2; // 0x2
+    field public static final int CODERATE_3_15 = 4; // 0x4
+    field public static final int CODERATE_4_15 = 8; // 0x8
+    field public static final int CODERATE_5_15 = 16; // 0x10
+    field public static final int CODERATE_6_15 = 32; // 0x20
+    field public static final int CODERATE_7_15 = 64; // 0x40
+    field public static final int CODERATE_8_15 = 128; // 0x80
+    field public static final int CODERATE_9_15 = 256; // 0x100
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int DEMOD_OUTPUT_FORMAT_ATSC3_LINKLAYER_PACKET = 1; // 0x1
+    field public static final int DEMOD_OUTPUT_FORMAT_BASEBAND_PACKET = 2; // 0x2
+    field public static final int DEMOD_OUTPUT_FORMAT_UNDEFINED = 0; // 0x0
+    field public static final int FEC_AUTO = 1; // 0x1
+    field public static final int FEC_BCH_LDPC_16K = 2; // 0x2
+    field public static final int FEC_BCH_LDPC_64K = 4; // 0x4
+    field public static final int FEC_CRC_LDPC_16K = 8; // 0x8
+    field public static final int FEC_CRC_LDPC_64K = 16; // 0x10
+    field public static final int FEC_LDPC_16K = 32; // 0x20
+    field public static final int FEC_LDPC_64K = 64; // 0x40
+    field public static final int FEC_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_1024QAM = 32; // 0x20
+    field public static final int MODULATION_MOD_16QAM = 4; // 0x4
+    field public static final int MODULATION_MOD_256QAM = 16; // 0x10
+    field public static final int MODULATION_MOD_4096QAM = 64; // 0x40
+    field public static final int MODULATION_MOD_64QAM = 8; // 0x8
+    field public static final int MODULATION_MOD_QPSK = 2; // 0x2
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_CTI = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_HTI = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class Atsc3FrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setDemodOutputFormat(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3FrontendSettings.Builder setPlpSettings(@NonNull android.media.tv.tuner.frontend.Atsc3PlpSettings[]);
+  }
+
+  public class Atsc3PlpInfo {
+    method public boolean getLlsFlag();
+    method public int getPlpId();
+  }
+
+  public class Atsc3PlpSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder builder();
+    method public int getCodeRate();
+    method public int getFec();
+    method public int getInterleaveMode();
+    method public int getModulation();
+    method public int getPlpId();
+  }
+
+  public static class Atsc3PlpSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setCodeRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setFec(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setInterleaveMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.Atsc3PlpSettings.Builder setPlpId(int);
+  }
+
+  public class AtscFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getModulationCapability();
+  }
+
+  public class AtscFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.AtscFrontendSettings.Builder builder();
+    method public int getModulation();
+    method public int getType();
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_16VSB = 8; // 0x8
+    field public static final int MODULATION_MOD_8VSB = 4; // 0x4
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+  }
+
+  public static class AtscFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings build();
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings.Builder setModulation(int);
+  }
+
+  public final class DtmbFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getCodeRateCapability();
+    method public int getGuardIntervalCapability();
+    method public int getModulationCapability();
+    method public int getTimeInterleaveModeCapability();
+    method public int getTransmissionModeCapability();
+  }
+
+  public final class DtmbFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getCodeRate();
+    method public int getGuardInterval();
+    method public int getModulation();
+    method public int getTimeInterleaveMode();
+    method public int getTransmissionMode();
+    method public int getType();
+    field public static final int BANDWIDTH_6MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int CODERATE_2_5 = 2; // 0x2
+    field public static final int CODERATE_3_5 = 4; // 0x4
+    field public static final int CODERATE_4_5 = 8; // 0x8
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int GUARD_INTERVAL_AUTO = 1; // 0x1
+    field public static final int GUARD_INTERVAL_PN_420_CONST = 16; // 0x10
+    field public static final int GUARD_INTERVAL_PN_420_VARIOUS = 2; // 0x2
+    field public static final int GUARD_INTERVAL_PN_595_CONST = 4; // 0x4
+    field public static final int GUARD_INTERVAL_PN_945_CONST = 32; // 0x20
+    field public static final int GUARD_INTERVAL_PN_945_VARIOUS = 8; // 0x8
+    field public static final int GUARD_INTERVAL_PN_RESERVED = 64; // 0x40
+    field public static final int GUARD_INTERVAL_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_CONSTELLATION_16QAM = 8; // 0x8
+    field public static final int MODULATION_CONSTELLATION_32QAM = 16; // 0x10
+    field public static final int MODULATION_CONSTELLATION_4QAM = 2; // 0x2
+    field public static final int MODULATION_CONSTELLATION_4QAM_NR = 4; // 0x4
+    field public static final int MODULATION_CONSTELLATION_64QAM = 32; // 0x20
+    field public static final int MODULATION_CONSTELLATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_CONSTELLATION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_240 = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_720 = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+    field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+    field public static final int TRANSMISSION_MODE_C1 = 2; // 0x2
+    field public static final int TRANSMISSION_MODE_C3780 = 4; // 0x4
+    field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static final class DtmbFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setGuardInterval(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTimeInterleaveMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTransmissionMode(int);
+  }
+
+  public class DvbcFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getAnnexCapability();
+    method public long getCodeRateCapability();
+    method @Deprecated public int getFecCapability();
+    method public int getModulationCapability();
+  }
+
+  public class DvbcFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder builder();
+    method public int getAnnex();
+    method public int getBandwidth();
+    method public long getInnerFec();
+    method public int getModulation();
+    method public int getOuterFec();
+    method public int getSpectralInversion();
+    method public int getSymbolRate();
+    method public int getTimeInterleaveMode();
+    method public int getType();
+    field public static final int ANNEX_A = 1; // 0x1
+    field public static final int ANNEX_B = 2; // 0x2
+    field public static final int ANNEX_C = 4; // 0x4
+    field public static final int ANNEX_UNDEFINED = 0; // 0x0
+    field public static final int BANDWIDTH_5MHZ = 1; // 0x1
+    field public static final int BANDWIDTH_6MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_128QAM = 16; // 0x10
+    field public static final int MODULATION_MOD_16QAM = 2; // 0x2
+    field public static final int MODULATION_MOD_256QAM = 32; // 0x20
+    field public static final int MODULATION_MOD_32QAM = 4; // 0x4
+    field public static final int MODULATION_MOD_64QAM = 8; // 0x8
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int OUTER_FEC_OUTER_FEC_NONE = 1; // 0x1
+    field public static final int OUTER_FEC_OUTER_FEC_RS = 2; // 0x2
+    field public static final int OUTER_FEC_UNDEFINED = 0; // 0x0
+    field @Deprecated public static final int SPECTRAL_INVERSION_INVERTED = 2; // 0x2
+    field @Deprecated public static final int SPECTRAL_INVERSION_NORMAL = 1; // 0x1
+    field @Deprecated public static final int SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
+    field public static final int TIME_INTERLEAVE_MODE_128_1_0 = 2; // 0x2
+    field public static final int TIME_INTERLEAVE_MODE_128_1_1 = 4; // 0x4
+    field public static final int TIME_INTERLEAVE_MODE_128_2 = 128; // 0x80
+    field public static final int TIME_INTERLEAVE_MODE_128_3 = 256; // 0x100
+    field public static final int TIME_INTERLEAVE_MODE_128_4 = 512; // 0x200
+    field public static final int TIME_INTERLEAVE_MODE_16_8 = 32; // 0x20
+    field public static final int TIME_INTERLEAVE_MODE_32_4 = 16; // 0x10
+    field public static final int TIME_INTERLEAVE_MODE_64_2 = 8; // 0x8
+    field public static final int TIME_INTERLEAVE_MODE_8_16 = 64; // 0x40
+    field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+    field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class DvbcFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setAnnex(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setBandwidth(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setInnerFec(long);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setOuterFec(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSpectralInversion(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setSymbolRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbcFrontendSettings.Builder setTimeInterleaveMode(int);
+  }
+
+  public class DvbsCodeRate {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbsCodeRate.Builder builder();
+    method public int getBitsPer1000Symbol();
+    method public long getInnerFec();
+    method public boolean isLinear();
+    method public boolean isShortFrameEnabled();
+  }
+
+  public static class DvbsCodeRate.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setBitsPer1000Symbol(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setInnerFec(long);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setLinear(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsCodeRate.Builder setShortFrameEnabled(boolean);
+  }
+
+  public class DvbsFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public long getInnerFecCapability();
+    method public int getModulationCapability();
+    method public int getStandardCapability();
+  }
+
+  public class DvbsFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder builder();
+    method public boolean canHandleDiseqcRxMessage();
+    method @Nullable public android.media.tv.tuner.frontend.DvbsCodeRate getCodeRate();
+    method public int getInputStreamId();
+    method public int getModulation();
+    method public int getPilot();
+    method public int getRolloff();
+    method public int getScanType();
+    method public int getStandard();
+    method public int getSymbolRate();
+    method public int getType();
+    method public int getVcmMode();
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_128APSK = 2048; // 0x800
+    field public static final int MODULATION_MOD_16APSK = 256; // 0x100
+    field public static final int MODULATION_MOD_16PSK = 16; // 0x10
+    field public static final int MODULATION_MOD_16QAM = 8; // 0x8
+    field public static final int MODULATION_MOD_256APSK = 4096; // 0x1000
+    field public static final int MODULATION_MOD_32APSK = 512; // 0x200
+    field public static final int MODULATION_MOD_32PSK = 32; // 0x20
+    field public static final int MODULATION_MOD_64APSK = 1024; // 0x400
+    field public static final int MODULATION_MOD_8APSK = 128; // 0x80
+    field public static final int MODULATION_MOD_8PSK = 4; // 0x4
+    field public static final int MODULATION_MOD_ACM = 64; // 0x40
+    field public static final int MODULATION_MOD_QPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_RESERVED = 8192; // 0x2000
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int PILOT_AUTO = 3; // 0x3
+    field public static final int PILOT_OFF = 2; // 0x2
+    field public static final int PILOT_ON = 1; // 0x1
+    field public static final int PILOT_UNDEFINED = 0; // 0x0
+    field public static final int ROLLOFF_0_10 = 5; // 0x5
+    field public static final int ROLLOFF_0_15 = 4; // 0x4
+    field public static final int ROLLOFF_0_20 = 3; // 0x3
+    field public static final int ROLLOFF_0_25 = 2; // 0x2
+    field public static final int ROLLOFF_0_35 = 1; // 0x1
+    field public static final int ROLLOFF_0_5 = 6; // 0x6
+    field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_DIRECT = 1; // 0x1
+    field public static final int SCAN_TYPE_DISEQC = 2; // 0x2
+    field public static final int SCAN_TYPE_JESS = 4; // 0x4
+    field public static final int SCAN_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int SCAN_TYPE_UNICABLE = 3; // 0x3
+    field public static final int STANDARD_AUTO = 1; // 0x1
+    field public static final int STANDARD_S = 2; // 0x2
+    field public static final int STANDARD_S2 = 4; // 0x4
+    field public static final int STANDARD_S2X = 8; // 0x8
+    field public static final int VCM_MODE_AUTO = 1; // 0x1
+    field public static final int VCM_MODE_MANUAL = 2; // 0x2
+    field public static final int VCM_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class DvbsFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setCanHandleDiseqcRxMessage(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setCodeRate(@Nullable android.media.tv.tuner.frontend.DvbsCodeRate);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setInputStreamId(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setPilot(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setScanType(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setStandard(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setSymbolRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbsFrontendSettings.Builder setVcmMode(int);
+  }
+
+  public class DvbtFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getCodeRateCapability();
+    method public int getConstellationCapability();
+    method public int getGuardIntervalCapability();
+    method public int getHierarchyCapability();
+    method public int getTransmissionModeCapability();
+    method public boolean isMisoSupported();
+    method public boolean isT2Supported();
+  }
+
+  public class DvbtFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getConstellation();
+    method public int getGuardInterval();
+    method public int getHierarchy();
+    method public int getHighPriorityCodeRate();
+    method public int getLowPriorityCodeRate();
+    method public int getPlpGroupId();
+    method public int getPlpId();
+    method public int getPlpMode();
+    method public int getStandard();
+    method public int getTransmissionMode();
+    method public int getType();
+    method public boolean isHighPriority();
+    method public boolean isMiso();
+    field public static final int BANDWIDTH_10MHZ = 64; // 0x40
+    field public static final int BANDWIDTH_1_7MHZ = 32; // 0x20
+    field public static final int BANDWIDTH_5MHZ = 16; // 0x10
+    field public static final int BANDWIDTH_6MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int CODERATE_1_2 = 2; // 0x2
+    field public static final int CODERATE_2_3 = 4; // 0x4
+    field public static final int CODERATE_3_4 = 8; // 0x8
+    field public static final int CODERATE_3_5 = 64; // 0x40
+    field public static final int CODERATE_4_5 = 128; // 0x80
+    field public static final int CODERATE_5_6 = 16; // 0x10
+    field public static final int CODERATE_6_7 = 256; // 0x100
+    field public static final int CODERATE_7_8 = 32; // 0x20
+    field public static final int CODERATE_8_9 = 512; // 0x200
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int CONSTELLATION_16QAM = 4; // 0x4
+    field public static final int CONSTELLATION_16QAM_R = 64; // 0x40
+    field public static final int CONSTELLATION_256QAM = 16; // 0x10
+    field public static final int CONSTELLATION_256QAM_R = 256; // 0x100
+    field public static final int CONSTELLATION_64QAM = 8; // 0x8
+    field public static final int CONSTELLATION_64QAM_R = 128; // 0x80
+    field public static final int CONSTELLATION_AUTO = 1; // 0x1
+    field public static final int CONSTELLATION_QPSK = 2; // 0x2
+    field public static final int CONSTELLATION_QPSK_R = 32; // 0x20
+    field public static final int CONSTELLATION_UNDEFINED = 0; // 0x0
+    field public static final int GUARD_INTERVAL_19_128 = 64; // 0x40
+    field public static final int GUARD_INTERVAL_19_256 = 128; // 0x80
+    field public static final int GUARD_INTERVAL_1_128 = 32; // 0x20
+    field public static final int GUARD_INTERVAL_1_16 = 4; // 0x4
+    field public static final int GUARD_INTERVAL_1_32 = 2; // 0x2
+    field public static final int GUARD_INTERVAL_1_4 = 16; // 0x10
+    field public static final int GUARD_INTERVAL_1_8 = 8; // 0x8
+    field public static final int GUARD_INTERVAL_AUTO = 1; // 0x1
+    field public static final int GUARD_INTERVAL_UNDEFINED = 0; // 0x0
+    field public static final int HIERARCHY_1_INDEPTH = 64; // 0x40
+    field public static final int HIERARCHY_1_NATIVE = 4; // 0x4
+    field public static final int HIERARCHY_2_INDEPTH = 128; // 0x80
+    field public static final int HIERARCHY_2_NATIVE = 8; // 0x8
+    field public static final int HIERARCHY_4_INDEPTH = 256; // 0x100
+    field public static final int HIERARCHY_4_NATIVE = 16; // 0x10
+    field public static final int HIERARCHY_AUTO = 1; // 0x1
+    field public static final int HIERARCHY_NON_INDEPTH = 32; // 0x20
+    field public static final int HIERARCHY_NON_NATIVE = 2; // 0x2
+    field public static final int HIERARCHY_UNDEFINED = 0; // 0x0
+    field public static final int PLP_MODE_AUTO = 1; // 0x1
+    field public static final int PLP_MODE_MANUAL = 2; // 0x2
+    field public static final int PLP_MODE_UNDEFINED = 0; // 0x0
+    field public static final int STANDARD_AUTO = 1; // 0x1
+    field public static final int STANDARD_T = 2; // 0x2
+    field public static final int STANDARD_T2 = 4; // 0x4
+    field public static final int TRANSMISSION_MODE_16K = 32; // 0x20
+    field public static final int TRANSMISSION_MODE_1K = 16; // 0x10
+    field public static final int TRANSMISSION_MODE_2K = 2; // 0x2
+    field public static final int TRANSMISSION_MODE_32K = 64; // 0x40
+    field public static final int TRANSMISSION_MODE_4K = 8; // 0x8
+    field public static final int TRANSMISSION_MODE_8K = 4; // 0x4
+    field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+    field public static final int TRANSMISSION_MODE_EXTENDED_16K = 256; // 0x100
+    field public static final int TRANSMISSION_MODE_EXTENDED_32K = 512; // 0x200
+    field public static final int TRANSMISSION_MODE_EXTENDED_8K = 128; // 0x80
+    field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
+  }
+
+  public static class DvbtFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setConstellation(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setGuardInterval(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setHierarchy(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setHighPriority(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setHighPriorityCodeRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setLowPriorityCodeRate(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setMiso(boolean);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setPlpGroupId(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setPlpId(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setPlpMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setStandard(int);
+    method @NonNull public android.media.tv.tuner.frontend.DvbtFrontendSettings.Builder setTransmissionMode(int);
+  }
+
+  public abstract class FrontendCapabilities {
+    ctor public FrontendCapabilities();
+  }
+
+  public class FrontendInfo {
+    method public int getAcquireRange();
+    method public int getExclusiveGroupId();
+    method @NonNull public android.util.Range<java.lang.Integer> getFrequencyRange();
+    method @NonNull public android.media.tv.tuner.frontend.FrontendCapabilities getFrontendCapabilities();
+    method public int getId();
+    method @NonNull public int[] getStatusCapabilities();
+    method @NonNull public android.util.Range<java.lang.Integer> getSymbolRateRange();
+    method public int getType();
+  }
+
+  public abstract class FrontendSettings {
+    method @IntRange(from=1) public int getEndFrequency();
+    method public int getFrequency();
+    method public int getFrontendSpectralInversion();
+    method public abstract int getType();
+    method @IntRange(from=1) public void setEndFrequency(int);
+    method public void setSpectralInversion(int);
+    field public static final long FEC_11_15 = 4194304L; // 0x400000L
+    field public static final long FEC_11_20 = 8388608L; // 0x800000L
+    field public static final long FEC_11_45 = 16777216L; // 0x1000000L
+    field public static final long FEC_13_18 = 33554432L; // 0x2000000L
+    field public static final long FEC_13_45 = 67108864L; // 0x4000000L
+    field public static final long FEC_14_45 = 134217728L; // 0x8000000L
+    field public static final long FEC_1_2 = 2L; // 0x2L
+    field public static final long FEC_1_3 = 4L; // 0x4L
+    field public static final long FEC_1_4 = 8L; // 0x8L
+    field public static final long FEC_1_5 = 16L; // 0x10L
+    field public static final long FEC_23_36 = 268435456L; // 0x10000000L
+    field public static final long FEC_25_36 = 536870912L; // 0x20000000L
+    field public static final long FEC_26_45 = 1073741824L; // 0x40000000L
+    field public static final long FEC_28_45 = -2147483648L; // 0xffffffff80000000L
+    field public static final long FEC_29_45 = 1L; // 0x1L
+    field public static final long FEC_2_3 = 32L; // 0x20L
+    field public static final long FEC_2_5 = 64L; // 0x40L
+    field public static final long FEC_2_9 = 128L; // 0x80L
+    field public static final long FEC_31_45 = 2L; // 0x2L
+    field public static final long FEC_32_45 = 4L; // 0x4L
+    field public static final long FEC_3_4 = 256L; // 0x100L
+    field public static final long FEC_3_5 = 512L; // 0x200L
+    field public static final long FEC_4_15 = 2048L; // 0x800L
+    field public static final long FEC_4_5 = 1024L; // 0x400L
+    field public static final long FEC_5_6 = 4096L; // 0x1000L
+    field public static final long FEC_5_9 = 8192L; // 0x2000L
+    field public static final long FEC_6_7 = 16384L; // 0x4000L
+    field public static final long FEC_77_90 = 8L; // 0x8L
+    field public static final long FEC_7_15 = 131072L; // 0x20000L
+    field public static final long FEC_7_8 = 32768L; // 0x8000L
+    field public static final long FEC_7_9 = 65536L; // 0x10000L
+    field public static final long FEC_8_15 = 524288L; // 0x80000L
+    field public static final long FEC_8_9 = 262144L; // 0x40000L
+    field public static final long FEC_9_10 = 1048576L; // 0x100000L
+    field public static final long FEC_9_20 = 2097152L; // 0x200000L
+    field public static final long FEC_AUTO = 1L; // 0x1L
+    field public static final long FEC_UNDEFINED = 0L; // 0x0L
+    field public static final int FRONTEND_SPECTRAL_INVERSION_INVERTED = 2; // 0x2
+    field public static final int FRONTEND_SPECTRAL_INVERSION_NORMAL = 1; // 0x1
+    field public static final int FRONTEND_SPECTRAL_INVERSION_UNDEFINED = 0; // 0x0
+    field public static final int TYPE_ANALOG = 1; // 0x1
+    field public static final int TYPE_ATSC = 2; // 0x2
+    field public static final int TYPE_ATSC3 = 3; // 0x3
+    field public static final int TYPE_DTMB = 10; // 0xa
+    field public static final int TYPE_DVBC = 4; // 0x4
+    field public static final int TYPE_DVBS = 5; // 0x5
+    field public static final int TYPE_DVBT = 6; // 0x6
+    field public static final int TYPE_ISDBS = 7; // 0x7
+    field public static final int TYPE_ISDBS3 = 8; // 0x8
+    field public static final int TYPE_ISDBT = 9; // 0x9
+    field public static final int TYPE_UNDEFINED = 0; // 0x0
+  }
+
+  public class FrontendStatus {
+    method public int getAgc();
+    method @NonNull public android.media.tv.tuner.frontend.FrontendStatus.Atsc3PlpTuningInfo[] getAtsc3PlpTuningInfo();
+    method public int getBandwidth();
+    method public int getBer();
+    method @NonNull public int[] getBers();
+    method @NonNull public int[] getCodeRates();
+    method @NonNull public int[] getExtendedModulations();
+    method public int getFreqOffset();
+    method public int getGuardInterval();
+    method public int getHierarchy();
+    method public long getInnerFec();
+    method @NonNull public int[] getInterleaving();
+    method @IntRange(from=0, to=255) @NonNull public int[] getIsdbtSegment();
+    method @NonNull public boolean[] getLayerErrors();
+    method public int getLnbVoltage();
+    method public int getMer();
+    method public int getModulation();
+    method public int getPer();
+    method public int getPerBer();
+    method public int getPlpId();
+    method public int getRollOff();
+    method public int getSignalQuality();
+    method public int getSignalStrength();
+    method public int getSnr();
+    method public int getSpectralInversion();
+    method public int getSymbolRate();
+    method @IntRange(from=0, to=65535) public int getSystemId();
+    method public int getTransmissionMode();
+    method @NonNull public int[] getTsDataRate();
+    method public int getUec();
+    method public boolean isDemodLocked();
+    method public boolean isEwbs();
+    method public boolean isLinear();
+    method public boolean isLnaOn();
+    method public boolean isMisoEnabled();
+    method public boolean isRfLocked();
+    method public boolean isShortFramesEnabled();
+    field public static final int FRONTEND_STATUS_TYPE_AGC = 14; // 0xe
+    field public static final int FRONTEND_STATUS_TYPE_ATSC3_PLP_INFO = 21; // 0x15
+    field public static final int FRONTEND_STATUS_TYPE_BANDWIDTH = 25; // 0x19
+    field public static final int FRONTEND_STATUS_TYPE_BER = 2; // 0x2
+    field public static final int FRONTEND_STATUS_TYPE_BERS = 23; // 0x17
+    field public static final int FRONTEND_STATUS_TYPE_CODERATES = 24; // 0x18
+    field public static final int FRONTEND_STATUS_TYPE_DEMOD_LOCK = 0; // 0x0
+    field public static final int FRONTEND_STATUS_TYPE_EWBS = 13; // 0xd
+    field public static final int FRONTEND_STATUS_TYPE_FEC = 8; // 0x8
+    field public static final int FRONTEND_STATUS_TYPE_FREQ_OFFSET = 18; // 0x12
+    field public static final int FRONTEND_STATUS_TYPE_GUARD_INTERVAL = 26; // 0x1a
+    field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 19; // 0x13
+    field public static final int FRONTEND_STATUS_TYPE_INTERLEAVINGS = 30; // 0x1e
+    field public static final int FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS = 31; // 0x1f
+    field public static final int FRONTEND_STATUS_TYPE_IS_LINEAR = 35; // 0x23
+    field public static final int FRONTEND_STATUS_TYPE_IS_MISO_ENABLED = 34; // 0x22
+    field public static final int FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES_ENABLED = 36; // 0x24
+    field public static final int FRONTEND_STATUS_TYPE_LAYER_ERROR = 16; // 0x10
+    field public static final int FRONTEND_STATUS_TYPE_LNA = 15; // 0xf
+    field public static final int FRONTEND_STATUS_TYPE_LNB_VOLTAGE = 11; // 0xb
+    field public static final int FRONTEND_STATUS_TYPE_MER = 17; // 0x11
+    field public static final int FRONTEND_STATUS_TYPE_MODULATION = 9; // 0x9
+    field public static final int FRONTEND_STATUS_TYPE_MODULATIONS_EXT = 22; // 0x16
+    field public static final int FRONTEND_STATUS_TYPE_PER = 3; // 0x3
+    field public static final int FRONTEND_STATUS_TYPE_PLP_ID = 12; // 0xc
+    field public static final int FRONTEND_STATUS_TYPE_PRE_BER = 4; // 0x4
+    field public static final int FRONTEND_STATUS_TYPE_RF_LOCK = 20; // 0x14
+    field public static final int FRONTEND_STATUS_TYPE_ROLL_OFF = 33; // 0x21
+    field public static final int FRONTEND_STATUS_TYPE_SIGNAL_QUALITY = 5; // 0x5
+    field public static final int FRONTEND_STATUS_TYPE_SIGNAL_STRENGTH = 6; // 0x6
+    field public static final int FRONTEND_STATUS_TYPE_SNR = 1; // 0x1
+    field public static final int FRONTEND_STATUS_TYPE_SPECTRAL = 10; // 0xa
+    field public static final int FRONTEND_STATUS_TYPE_SYMBOL_RATE = 7; // 0x7
+    field public static final int FRONTEND_STATUS_TYPE_T2_SYSTEM_ID = 29; // 0x1d
+    field public static final int FRONTEND_STATUS_TYPE_TRANSMISSION_MODE = 27; // 0x1b
+    field public static final int FRONTEND_STATUS_TYPE_TS_DATA_RATES = 32; // 0x20
+    field public static final int FRONTEND_STATUS_TYPE_UEC = 28; // 0x1c
+  }
+
+  public static class FrontendStatus.Atsc3PlpTuningInfo {
+    method public int getPlpId();
+    method public int getUec();
+    method public boolean isLocked();
+  }
+
+  public class Isdbs3FrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getCodeRateCapability();
+    method public int getModulationCapability();
+  }
+
+  public class Isdbs3FrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder builder();
+    method public int getCodeRate();
+    method public int getModulation();
+    method public int getRolloff();
+    method public int getStreamId();
+    method public int getStreamIdType();
+    method public int getSymbolRate();
+    method public int getType();
+    field public static final int CODERATE_1_2 = 8; // 0x8
+    field public static final int CODERATE_1_3 = 2; // 0x2
+    field public static final int CODERATE_2_3 = 32; // 0x20
+    field public static final int CODERATE_2_5 = 4; // 0x4
+    field public static final int CODERATE_3_4 = 64; // 0x40
+    field public static final int CODERATE_3_5 = 16; // 0x10
+    field public static final int CODERATE_4_5 = 256; // 0x100
+    field public static final int CODERATE_5_6 = 512; // 0x200
+    field public static final int CODERATE_7_8 = 1024; // 0x400
+    field public static final int CODERATE_7_9 = 128; // 0x80
+    field public static final int CODERATE_9_10 = 2048; // 0x800
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_16APSK = 16; // 0x10
+    field public static final int MODULATION_MOD_32APSK = 32; // 0x20
+    field public static final int MODULATION_MOD_8PSK = 8; // 0x8
+    field public static final int MODULATION_MOD_BPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_QPSK = 4; // 0x4
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int ROLLOFF_0_03 = 1; // 0x1
+    field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+  }
+
+  public static class Isdbs3FrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setStreamId(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setStreamIdType(int);
+    method @NonNull public android.media.tv.tuner.frontend.Isdbs3FrontendSettings.Builder setSymbolRate(int);
+  }
+
+  public class IsdbsFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getCodeRateCapability();
+    method public int getModulationCapability();
+  }
+
+  public class IsdbsFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder builder();
+    method public int getCodeRate();
+    method public int getModulation();
+    method public int getRolloff();
+    method public int getStreamId();
+    method public int getStreamIdType();
+    method public int getSymbolRate();
+    method public int getType();
+    field public static final int CODERATE_1_2 = 2; // 0x2
+    field public static final int CODERATE_2_3 = 4; // 0x4
+    field public static final int CODERATE_3_4 = 8; // 0x8
+    field public static final int CODERATE_5_6 = 16; // 0x10
+    field public static final int CODERATE_7_8 = 32; // 0x20
+    field public static final int CODERATE_AUTO = 1; // 0x1
+    field public static final int CODERATE_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_BPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_QPSK = 4; // 0x4
+    field public static final int MODULATION_MOD_TC8PSK = 8; // 0x8
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+    field public static final int ROLLOFF_0_35 = 1; // 0x1
+    field public static final int ROLLOFF_UNDEFINED = 0; // 0x0
+    field public static final int STREAM_ID_TYPE_ID = 0; // 0x0
+    field public static final int STREAM_ID_TYPE_RELATIVE_NUMBER = 1; // 0x1
+  }
+
+  public static class IsdbsFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setRolloff(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setStreamId(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setStreamIdType(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbsFrontendSettings.Builder setSymbolRate(int);
+  }
+
+  public class IsdbtFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+    method public int getBandwidthCapability();
+    method public int getCodeRateCapability();
+    method public int getGuardIntervalCapability();
+    method public int getModeCapability();
+    method public int getModulationCapability();
+  }
+
+  public class IsdbtFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+    method @NonNull public static android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder builder();
+    method public int getBandwidth();
+    method public int getCodeRate();
+    method public int getGuardInterval();
+    method public int getMode();
+    method public int getModulation();
+    method public int getServiceAreaId();
+    method public int getType();
+    field public static final int BANDWIDTH_6MHZ = 8; // 0x8
+    field public static final int BANDWIDTH_7MHZ = 4; // 0x4
+    field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+    field public static final int BANDWIDTH_AUTO = 1; // 0x1
+    field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+    field public static final int MODE_1 = 2; // 0x2
+    field public static final int MODE_2 = 4; // 0x4
+    field public static final int MODE_3 = 8; // 0x8
+    field public static final int MODE_AUTO = 1; // 0x1
+    field public static final int MODE_UNDEFINED = 0; // 0x0
+    field public static final int MODULATION_AUTO = 1; // 0x1
+    field public static final int MODULATION_MOD_16QAM = 8; // 0x8
+    field public static final int MODULATION_MOD_64QAM = 16; // 0x10
+    field public static final int MODULATION_MOD_DQPSK = 2; // 0x2
+    field public static final int MODULATION_MOD_QPSK = 4; // 0x4
+    field public static final int MODULATION_UNDEFINED = 0; // 0x0
+  }
+
+  public static class IsdbtFrontendSettings.Builder {
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings build();
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setBandwidth(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setCodeRate(int);
+    method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setFrequency(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setGuardInterval(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setMode(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setModulation(int);
+    method @NonNull public android.media.tv.tuner.frontend.IsdbtFrontendSettings.Builder setServiceAreaId(int);
+  }
+
+  public interface OnTuneEventListener {
+    method public void onTuneEvent(int);
+    field public static final int SIGNAL_LOCKED = 0; // 0x0
+    field public static final int SIGNAL_LOST_LOCK = 2; // 0x2
+    field public static final int SIGNAL_NO_SIGNAL = 1; // 0x1
+  }
+
+  public interface ScanCallback {
+    method public void onAnalogSifStandardReported(int);
+    method public void onAtsc3PlpInfosReported(@NonNull android.media.tv.tuner.frontend.Atsc3PlpInfo[]);
+    method public default void onDvbcAnnexReported(int);
+    method public void onDvbsStandardReported(int);
+    method public void onDvbtStandardReported(int);
+    method public void onFrequenciesReported(@NonNull int[]);
+    method public void onGroupIdsReported(@NonNull int[]);
+    method public void onHierarchyReported(int);
+    method public void onInputStreamIdsReported(@NonNull int[]);
+    method public void onLocked();
+    method public default void onModulationReported(int);
+    method public void onPlpIdsReported(@NonNull int[]);
+    method public default void onPriorityReported(boolean);
+    method public void onProgress(@IntRange(from=0, to=100) int);
+    method public void onScanStopped();
+    method public void onSignalTypeReported(int);
+    method public void onSymbolRatesReported(@NonNull int[]);
+  }
+
+}
+
+package android.media.voice {
+
+  public final class KeyphraseModelManager {
+    method @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public void deleteKeyphraseSoundModel(int, @NonNull java.util.Locale);
+    method @Nullable @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel getKeyphraseSoundModel(int, @NonNull java.util.Locale);
+    method @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public void updateKeyphraseSoundModel(@NonNull android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel);
+  }
+
+}
+
+package android.metrics {
+
+  public class LogMaker {
+    ctor public LogMaker(int);
+    ctor public LogMaker(Object[]);
+    method public android.metrics.LogMaker addTaggedData(int, Object);
+    method public android.metrics.LogMaker clearCategory();
+    method public android.metrics.LogMaker clearPackageName();
+    method public android.metrics.LogMaker clearSubtype();
+    method public android.metrics.LogMaker clearTaggedData(int);
+    method public android.metrics.LogMaker clearType();
+    method public void deserialize(Object[]);
+    method public int getCategory();
+    method public long getCounterBucket();
+    method public String getCounterName();
+    method public int getCounterValue();
+    method public String getPackageName();
+    method public int getProcessId();
+    method public int getSubtype();
+    method public Object getTaggedData(int);
+    method public long getTimestamp();
+    method public int getType();
+    method public int getUid();
+    method public boolean isLongCounterBucket();
+    method public boolean isSubsetOf(android.metrics.LogMaker);
+    method public boolean isValidValue(Object);
+    method public Object[] serialize();
+    method public android.metrics.LogMaker setCategory(int);
+    method public android.metrics.LogMaker setPackageName(String);
+    method public android.metrics.LogMaker setSubtype(int);
+    method public android.metrics.LogMaker setType(int);
+  }
+
+  public class MetricsReader {
+    ctor public MetricsReader();
+    method public void checkpoint();
+    method public boolean hasNext();
+    method public android.metrics.LogMaker next();
+    method public void read(long);
+    method public void reset();
+  }
+
+}
+
+package android.net {
+
+  public class CaptivePortal implements android.os.Parcelable {
+    method @Deprecated public void logEvent(int, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void reevaluateNetwork();
+    method public void useNetwork();
+    field public static final int APP_REQUEST_REEVALUATION_REQUIRED = 100; // 0x64
+    field public static final int APP_RETURN_DISMISSED = 0; // 0x0
+    field public static final int APP_RETURN_UNWANTED = 1; // 0x1
+    field public static final int APP_RETURN_WANTED_AS_IS = 2; // 0x2
+  }
+
+  public final class CaptivePortalData implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getByteLimit();
+    method public long getExpiryTimeMillis();
+    method public long getRefreshTimeMillis();
+    method @Nullable public android.net.Uri getUserPortalUrl();
+    method public int getUserPortalUrlSource();
+    method @Nullable public CharSequence getVenueFriendlyName();
+    method @Nullable public android.net.Uri getVenueInfoUrl();
+    method public int getVenueInfoUrlSource();
+    method public boolean isCaptive();
+    method public boolean isSessionExtendable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CAPTIVE_PORTAL_DATA_SOURCE_OTHER = 0; // 0x0
+    field public static final int CAPTIVE_PORTAL_DATA_SOURCE_PASSPOINT = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.CaptivePortalData> CREATOR;
+  }
+
+  public static class CaptivePortalData.Builder {
+    ctor public CaptivePortalData.Builder();
+    ctor public CaptivePortalData.Builder(@Nullable android.net.CaptivePortalData);
+    method @NonNull public android.net.CaptivePortalData build();
+    method @NonNull public android.net.CaptivePortalData.Builder setBytesRemaining(long);
+    method @NonNull public android.net.CaptivePortalData.Builder setCaptive(boolean);
+    method @NonNull public android.net.CaptivePortalData.Builder setExpiryTime(long);
+    method @NonNull public android.net.CaptivePortalData.Builder setRefreshTime(long);
+    method @NonNull public android.net.CaptivePortalData.Builder setSessionExtendable(boolean);
+    method @NonNull public android.net.CaptivePortalData.Builder setUserPortalUrl(@Nullable android.net.Uri);
+    method @NonNull public android.net.CaptivePortalData.Builder setUserPortalUrl(@Nullable android.net.Uri, int);
+    method @NonNull public android.net.CaptivePortalData.Builder setVenueFriendlyName(@Nullable CharSequence);
+    method @NonNull public android.net.CaptivePortalData.Builder setVenueInfoUrl(@Nullable android.net.Uri);
+    method @NonNull public android.net.CaptivePortalData.Builder setVenueInfoUrl(@Nullable android.net.Uri, int);
+  }
+
+  public class ConnectivityManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createNattKeepalive(@NonNull android.net.Network, @NonNull android.os.ParcelFileDescriptor, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
+    method @NonNull @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull java.net.Socket, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String getCaptivePortalServerUrl();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEntitlementResultListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported();
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_FACTORY}) public int registerNetworkProvider(@NonNull android.net.NetworkProvider);
+    method public void registerQosCallback(@NonNull android.net.QosSocketInfo, @NonNull java.util.concurrent.Executor, @NonNull android.net.QosCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEventCallback);
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void requestNetwork(@NonNull android.net.NetworkRequest, int, int, @NonNull android.os.Handler, @NonNull android.net.ConnectivityManager.NetworkCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_AIRPLANE_MODE, android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void setAirplaneMode(boolean);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE) public void setOemNetworkPreference(@NonNull android.net.OemNetworkPreferences, @Nullable java.util.concurrent.Executor, @Nullable Runnable);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public boolean shouldAvoidBadWifi();
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void startCaptivePortalApp(@NonNull android.net.Network, @NonNull android.os.Bundle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback, android.os.Handler);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void stopTethering(int);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_FACTORY}) public void unregisterNetworkProvider(@NonNull android.net.NetworkProvider);
+    method public void unregisterQosCallback(@NonNull android.net.QosCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void unregisterTetheringEventCallback(@NonNull android.net.ConnectivityManager.OnTetheringEventCallback);
+    field public static final String EXTRA_CAPTIVE_PORTAL_PROBE_SPEC = "android.net.extra.CAPTIVE_PORTAL_PROBE_SPEC";
+    field public static final String EXTRA_CAPTIVE_PORTAL_USER_AGENT = "android.net.extra.CAPTIVE_PORTAL_USER_AGENT";
+    field public static final int TETHERING_BLUETOOTH = 2; // 0x2
+    field public static final int TETHERING_USB = 1; // 0x1
+    field public static final int TETHERING_WIFI = 0; // 0x0
+    field @Deprecated public static final int TETHER_ERROR_ENTITLEMENT_UNKONWN = 13; // 0xd
+    field @Deprecated public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
+    field @Deprecated public static final int TETHER_ERROR_PROVISION_FAILED = 11; // 0xb
+    field public static final int TYPE_NONE = -1; // 0xffffffff
+    field @Deprecated public static final int TYPE_PROXY = 16; // 0x10
+    field @Deprecated public static final int TYPE_WIFI_P2P = 13; // 0xd
+  }
+
+  @Deprecated public abstract static class ConnectivityManager.OnStartTetheringCallback {
+    ctor @Deprecated public ConnectivityManager.OnStartTetheringCallback();
+    method @Deprecated public void onTetheringFailed();
+    method @Deprecated public void onTetheringStarted();
+  }
+
+  @Deprecated public static interface ConnectivityManager.OnTetheringEntitlementResultListener {
+    method @Deprecated public void onTetheringEntitlementResult(int);
+  }
+
+  @Deprecated public abstract static class ConnectivityManager.OnTetheringEventCallback {
+    ctor @Deprecated public ConnectivityManager.OnTetheringEventCallback();
+    method @Deprecated public void onUpstreamChanged(@Nullable android.net.Network);
+  }
+
+  public class EthernetManager {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public android.net.EthernetManager.TetheredInterfaceRequest requestTetheredInterface(@NonNull java.util.concurrent.Executor, @NonNull android.net.EthernetManager.TetheredInterfaceCallback);
+  }
+
+  public static interface EthernetManager.TetheredInterfaceCallback {
+    method public void onAvailable(@NonNull String);
+    method public void onUnavailable();
+  }
+
+  public static class EthernetManager.TetheredInterfaceRequest {
+    method public void release();
+  }
+
+  public final class InvalidPacketException extends java.lang.Exception {
+    ctor public InvalidPacketException(int);
+    method public int getError();
+    field public static final int ERROR_INVALID_IP_ADDRESS = -21; // 0xffffffeb
+    field public static final int ERROR_INVALID_LENGTH = -23; // 0xffffffe9
+    field public static final int ERROR_INVALID_PORT = -22; // 0xffffffea
+  }
+
+  public final class IpConfiguration implements android.os.Parcelable {
+    ctor public IpConfiguration();
+    ctor public IpConfiguration(@NonNull android.net.IpConfiguration);
+    method public int describeContents();
+    method @Nullable public android.net.ProxyInfo getHttpProxy();
+    method @NonNull public android.net.IpConfiguration.IpAssignment getIpAssignment();
+    method @NonNull public android.net.IpConfiguration.ProxySettings getProxySettings();
+    method @Nullable public android.net.StaticIpConfiguration getStaticIpConfiguration();
+    method public void setHttpProxy(@Nullable android.net.ProxyInfo);
+    method public void setIpAssignment(@NonNull android.net.IpConfiguration.IpAssignment);
+    method public void setProxySettings(@NonNull android.net.IpConfiguration.ProxySettings);
+    method public void setStaticIpConfiguration(@Nullable android.net.StaticIpConfiguration);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpConfiguration> CREATOR;
+  }
+
+  public enum IpConfiguration.IpAssignment {
+    enum_constant public static final android.net.IpConfiguration.IpAssignment DHCP;
+    enum_constant public static final android.net.IpConfiguration.IpAssignment STATIC;
+    enum_constant public static final android.net.IpConfiguration.IpAssignment UNASSIGNED;
+  }
+
+  public enum IpConfiguration.ProxySettings {
+    enum_constant public static final android.net.IpConfiguration.ProxySettings NONE;
+    enum_constant public static final android.net.IpConfiguration.ProxySettings PAC;
+    enum_constant public static final android.net.IpConfiguration.ProxySettings STATIC;
+    enum_constant public static final android.net.IpConfiguration.ProxySettings UNASSIGNED;
+  }
+
+  public final class IpPrefix implements android.os.Parcelable {
+    ctor public IpPrefix(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
+    ctor public IpPrefix(@NonNull String);
+  }
+
+  public final class IpSecManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void applyTunnelModeTransform(@NonNull android.net.IpSecManager.IpSecTunnelInterface, int, @NonNull android.net.IpSecTransform) throws java.io.IOException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public android.net.IpSecManager.IpSecTunnelInterface createIpSecTunnelInterface(@NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull android.net.Network) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException;
+  }
+
+  public static final class IpSecManager.IpSecTunnelInterface implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void addAddress(@NonNull java.net.InetAddress, int) throws java.io.IOException;
+    method public void close();
+    method @NonNull public String getInterfaceName();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void removeAddress(@NonNull java.net.InetAddress, int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public void setUnderlyingNetwork(@NonNull android.net.Network) throws java.io.IOException;
+  }
+
+  public static class IpSecTransform.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_IPSEC_TUNNELS) public android.net.IpSecTransform buildTunnelModeTransform(@NonNull java.net.InetAddress, @NonNull android.net.IpSecManager.SecurityParameterIndex) throws java.io.IOException, android.net.IpSecManager.ResourceUnavailableException, android.net.IpSecManager.SpiUnavailableException;
+  }
+
+  public class KeepalivePacketData {
+    ctor protected KeepalivePacketData(@NonNull java.net.InetAddress, @IntRange(from=0, to=65535) int, @NonNull java.net.InetAddress, @IntRange(from=0, to=65535) int, @NonNull byte[]) throws android.net.InvalidPacketException;
+    method @NonNull public java.net.InetAddress getDstAddress();
+    method public int getDstPort();
+    method @NonNull public byte[] getPacket();
+    method @NonNull public java.net.InetAddress getSrcAddress();
+    method public int getSrcPort();
+  }
+
+  public class LinkAddress implements android.os.Parcelable {
+    ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int, int, int);
+    ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int, int, int, long, long);
+    ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
+    ctor public LinkAddress(@NonNull String);
+    ctor public LinkAddress(@NonNull String, int, int);
+    method public long getDeprecationTime();
+    method public long getExpirationTime();
+    method public boolean isGlobalPreferred();
+    method public boolean isIpv4();
+    method public boolean isIpv6();
+    method public boolean isSameAddressAs(@Nullable android.net.LinkAddress);
+    field public static final long LIFETIME_PERMANENT = 9223372036854775807L; // 0x7fffffffffffffffL
+    field public static final long LIFETIME_UNKNOWN = -1L; // 0xffffffffffffffffL
+  }
+
+  public final class LinkProperties implements android.os.Parcelable {
+    ctor public LinkProperties(@Nullable android.net.LinkProperties);
+    ctor public LinkProperties(@Nullable android.net.LinkProperties, boolean);
+    method public boolean addDnsServer(@NonNull java.net.InetAddress);
+    method public boolean addLinkAddress(@NonNull android.net.LinkAddress);
+    method public boolean addPcscfServer(@NonNull java.net.InetAddress);
+    method @NonNull public java.util.List<java.net.InetAddress> getAddresses();
+    method @NonNull public java.util.List<java.lang.String> getAllInterfaceNames();
+    method @NonNull public java.util.List<android.net.LinkAddress> getAllLinkAddresses();
+    method @NonNull public java.util.List<android.net.RouteInfo> getAllRoutes();
+    method @Nullable public android.net.Uri getCaptivePortalApiUrl();
+    method @Nullable public android.net.CaptivePortalData getCaptivePortalData();
+    method @NonNull public java.util.List<java.net.InetAddress> getPcscfServers();
+    method @Nullable public String getTcpBufferSizes();
+    method @NonNull public java.util.List<java.net.InetAddress> getValidatedPrivateDnsServers();
+    method public boolean hasGlobalIpv6Address();
+    method public boolean hasIpv4Address();
+    method public boolean hasIpv4DefaultRoute();
+    method public boolean hasIpv4DnsServer();
+    method public boolean hasIpv6DefaultRoute();
+    method public boolean hasIpv6DnsServer();
+    method public boolean isIpv4Provisioned();
+    method public boolean isIpv6Provisioned();
+    method public boolean isProvisioned();
+    method public boolean isReachable(@NonNull java.net.InetAddress);
+    method public boolean removeDnsServer(@NonNull java.net.InetAddress);
+    method public boolean removeLinkAddress(@NonNull android.net.LinkAddress);
+    method public boolean removeRoute(@NonNull android.net.RouteInfo);
+    method public void setCaptivePortalApiUrl(@Nullable android.net.Uri);
+    method public void setCaptivePortalData(@Nullable android.net.CaptivePortalData);
+    method public void setPcscfServers(@NonNull java.util.Collection<java.net.InetAddress>);
+    method public void setPrivateDnsServerName(@Nullable String);
+    method public void setTcpBufferSizes(@Nullable String);
+    method public void setUsePrivateDns(boolean);
+    method public void setValidatedPrivateDnsServers(@NonNull java.util.Collection<java.net.InetAddress>);
+  }
+
+  public final class MatchAllNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
+    ctor public MatchAllNetworkSpecifier();
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.MatchAllNetworkSpecifier> CREATOR;
+  }
+
+  public final class NattKeepalivePacketData extends android.net.KeepalivePacketData implements android.os.Parcelable {
+    ctor public NattKeepalivePacketData(@NonNull java.net.InetAddress, int, @NonNull java.net.InetAddress, int, @NonNull byte[]) throws android.net.InvalidPacketException;
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NattKeepalivePacketData> CREATOR;
+  }
+
+  public class Network implements android.os.Parcelable {
+    ctor public Network(@NonNull android.net.Network);
+    method public int getNetId();
+    method @NonNull public android.net.Network getPrivateDnsBypassingCopy();
+  }
+
+  public abstract class NetworkAgent {
+    ctor public NetworkAgent(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String, @NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties, int, @NonNull android.net.NetworkAgentConfig, @Nullable android.net.NetworkProvider);
+    ctor public NetworkAgent(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String, @NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties, @NonNull android.net.NetworkScore, @NonNull android.net.NetworkAgentConfig, @Nullable android.net.NetworkProvider);
+    method @Nullable public android.net.Network getNetwork();
+    method public void markConnected();
+    method public void onAddKeepalivePacketFilter(int, @NonNull android.net.KeepalivePacketData);
+    method public void onAutomaticReconnectDisabled();
+    method public void onBandwidthUpdateRequested();
+    method public void onNetworkCreated();
+    method public void onNetworkDestroyed();
+    method public void onNetworkUnwanted();
+    method public void onQosCallbackRegistered(int, @NonNull android.net.QosFilter);
+    method public void onQosCallbackUnregistered(int);
+    method public void onRemoveKeepalivePacketFilter(int);
+    method public void onSaveAcceptUnvalidated(boolean);
+    method public void onSignalStrengthThresholdsUpdated(@NonNull int[]);
+    method public void onStartSocketKeepalive(int, @NonNull java.time.Duration, @NonNull android.net.KeepalivePacketData);
+    method public void onStopSocketKeepalive(int);
+    method public void onValidationStatus(int, @Nullable android.net.Uri);
+    method @NonNull public android.net.Network register();
+    method public final void sendLinkProperties(@NonNull android.net.LinkProperties);
+    method public final void sendNetworkCapabilities(@NonNull android.net.NetworkCapabilities);
+    method public final void sendNetworkScore(@NonNull android.net.NetworkScore);
+    method public final void sendNetworkScore(@IntRange(from=0, to=99) int);
+    method public final void sendQosCallbackError(int, int);
+    method public final void sendQosSessionAvailable(int, int, @NonNull android.net.QosSessionAttributes);
+    method public final void sendQosSessionLost(int, int, int);
+    method public final void sendSocketKeepaliveEvent(int, int);
+    method @Deprecated public void setLegacySubtype(int, @NonNull String);
+    method public void setLingerDuration(@NonNull java.time.Duration);
+    method public void setTeardownDelayMillis(@IntRange(from=0, to=0x1388) int);
+    method public final void setUnderlyingNetworks(@Nullable java.util.List<android.net.Network>);
+    method public void unregister();
+    field public static final int VALIDATION_STATUS_NOT_VALID = 2; // 0x2
+    field public static final int VALIDATION_STATUS_VALID = 1; // 0x1
+  }
+
+  public final class NetworkAgentConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getLegacyType();
+    method @NonNull public String getLegacyTypeName();
+    method public boolean isExplicitlySelected();
+    method public boolean isPartialConnectivityAcceptable();
+    method public boolean isUnvalidatedConnectivityAcceptable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkAgentConfig> CREATOR;
+  }
+
+  public static final class NetworkAgentConfig.Builder {
+    ctor public NetworkAgentConfig.Builder();
+    method @NonNull public android.net.NetworkAgentConfig build();
+    method @NonNull public android.net.NetworkAgentConfig.Builder setExplicitlySelected(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyExtraInfo(@NonNull String);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacySubType(int);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacySubTypeName(@NonNull String);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyType(int);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyTypeName(@NonNull String);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setNat64DetectionEnabled(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setPartialConnectivityAcceptable(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setProvisioningNotificationEnabled(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setUnvalidatedConnectivityAcceptable(boolean);
+  }
+
+  public final class NetworkCapabilities implements android.os.Parcelable {
+    method @NonNull public int[] getAdministratorUids();
+    method @Nullable public static String getCapabilityCarrierName(int);
+    method @Nullable public String getSsid();
+    method @NonNull public java.util.Set<java.lang.Integer> getSubscriptionIds();
+    method @NonNull public int[] getTransportTypes();
+    method public boolean isPrivateDnsBroken();
+    method public boolean satisfiedByNetworkCapabilities(@Nullable android.net.NetworkCapabilities);
+    field public static final int NET_CAPABILITY_BIP = 31; // 0x1f
+    field public static final int NET_CAPABILITY_NOT_VCN_MANAGED = 28; // 0x1c
+    field public static final int NET_CAPABILITY_OEM_PAID = 22; // 0x16
+    field public static final int NET_CAPABILITY_OEM_PRIVATE = 26; // 0x1a
+    field public static final int NET_CAPABILITY_PARTIAL_CONNECTIVITY = 24; // 0x18
+    field public static final int NET_CAPABILITY_VEHICLE_INTERNAL = 27; // 0x1b
+    field public static final int NET_CAPABILITY_VSIM = 30; // 0x1e
+  }
+
+  public static final class NetworkCapabilities.Builder {
+    ctor public NetworkCapabilities.Builder();
+    ctor public NetworkCapabilities.Builder(@NonNull android.net.NetworkCapabilities);
+    method @NonNull public android.net.NetworkCapabilities.Builder addCapability(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder addTransportType(int);
+    method @NonNull public android.net.NetworkCapabilities build();
+    method @NonNull public android.net.NetworkCapabilities.Builder removeCapability(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder removeTransportType(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setAdministratorUids(@NonNull int[]);
+    method @NonNull public android.net.NetworkCapabilities.Builder setLinkDownstreamBandwidthKbps(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder setLinkUpstreamBandwidthKbps(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder setNetworkSpecifier(@Nullable android.net.NetworkSpecifier);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setOwnerUid(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setRequestorPackageName(@Nullable String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setRequestorUid(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP) public android.net.NetworkCapabilities.Builder setSignalStrength(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setSsid(@Nullable String);
+    method @NonNull public android.net.NetworkCapabilities.Builder setSubscriptionIds(@NonNull java.util.Set<java.lang.Integer>);
+    method @NonNull public android.net.NetworkCapabilities.Builder setTransportInfo(@Nullable android.net.TransportInfo);
+    method @NonNull public static android.net.NetworkCapabilities.Builder withoutDefaultCapabilities();
+  }
+
+  public class NetworkKey implements android.os.Parcelable {
+    ctor public NetworkKey(android.net.WifiKey);
+    method @Nullable public static android.net.NetworkKey createFromScanResult(@NonNull android.net.wifi.ScanResult);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkKey> CREATOR;
+    field public static final int TYPE_WIFI = 1; // 0x1
+    field public final int type;
+    field public final android.net.WifiKey wifiKey;
+  }
+
+  public class NetworkProvider {
+    ctor public NetworkProvider(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void declareNetworkRequestUnfulfillable(@NonNull android.net.NetworkRequest);
+    method public int getProviderId();
+    method public void onNetworkRequestWithdrawn(@NonNull android.net.NetworkRequest);
+    method public void onNetworkRequested(@NonNull android.net.NetworkRequest, @IntRange(from=0, to=99) int, int);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void registerNetworkOffer(@NonNull android.net.NetworkScore, @NonNull android.net.NetworkCapabilities, @NonNull java.util.concurrent.Executor, @NonNull android.net.NetworkProvider.NetworkOfferCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void unregisterNetworkOffer(@NonNull android.net.NetworkProvider.NetworkOfferCallback);
+    field public static final int ID_NONE = -1; // 0xffffffff
+  }
+
+  public static interface NetworkProvider.NetworkOfferCallback {
+    method public void onNetworkNeeded(@NonNull android.net.NetworkRequest);
+    method public void onNetworkUnneeded(@NonNull android.net.NetworkRequest);
+  }
+
+  public abstract class NetworkRecommendationProvider {
+    ctor public NetworkRecommendationProvider(android.content.Context, java.util.concurrent.Executor);
+    method public final android.os.IBinder getBinder();
+    method public abstract void onRequestScores(android.net.NetworkKey[]);
+  }
+
+  public class NetworkReleasedException extends java.lang.Exception {
+  }
+
+  public class NetworkRequest implements android.os.Parcelable {
+    method @Nullable public String getRequestorPackageName();
+    method public int getRequestorUid();
+  }
+
+  public static class NetworkRequest.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP) public android.net.NetworkRequest.Builder setSignalStrength(int);
+    method @NonNull public android.net.NetworkRequest.Builder setSubscriptionIds(@NonNull java.util.Set<java.lang.Integer>);
+  }
+
+  public final class NetworkScore implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getKeepConnectedReason();
+    method public int getLegacyInt();
+    method public boolean isExiting();
+    method public boolean isTransportPrimary();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkScore> CREATOR;
+    field public static final int KEEP_CONNECTED_FOR_HANDOVER = 1; // 0x1
+    field public static final int KEEP_CONNECTED_NONE = 0; // 0x0
+  }
+
+  public static final class NetworkScore.Builder {
+    ctor public NetworkScore.Builder();
+    method @NonNull public android.net.NetworkScore build();
+    method @NonNull public android.net.NetworkScore.Builder setExiting(boolean);
+    method @NonNull public android.net.NetworkScore.Builder setKeepConnectedReason(int);
+    method @NonNull public android.net.NetworkScore.Builder setLegacyInt(int);
+    method @NonNull public android.net.NetworkScore.Builder setTransportPrimary(boolean);
+  }
+
+  public class NetworkScoreManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public boolean clearScores() throws java.lang.SecurityException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public void disableScoring() throws java.lang.SecurityException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public String getActiveScorerPackage();
+    method @RequiresPermission(android.Manifest.permission.REQUEST_NETWORK_SCORES) public void registerNetworkScoreCallback(int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.NetworkScoreManager.NetworkScoreCallback) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.REQUEST_NETWORK_SCORES) public boolean requestScores(@NonNull java.util.Collection<android.net.NetworkKey>) throws java.lang.SecurityException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.SCORE_NETWORKS, android.Manifest.permission.REQUEST_NETWORK_SCORES}) public boolean setActiveScorer(String) throws java.lang.SecurityException;
+    method @RequiresPermission(android.Manifest.permission.SCORE_NETWORKS) public boolean updateScores(@NonNull android.net.ScoredNetwork[]) throws java.lang.SecurityException;
+    field @Deprecated public static final String ACTION_CHANGE_ACTIVE = "android.net.scoring.CHANGE_ACTIVE";
+    field public static final String ACTION_CUSTOM_ENABLE = "android.net.scoring.CUSTOM_ENABLE";
+    field public static final String ACTION_RECOMMEND_NETWORKS = "android.net.action.RECOMMEND_NETWORKS";
+    field public static final String ACTION_SCORER_CHANGED = "android.net.scoring.SCORER_CHANGED";
+    field @Deprecated public static final String ACTION_SCORE_NETWORKS = "android.net.scoring.SCORE_NETWORKS";
+    field @Deprecated public static final String EXTRA_NETWORKS_TO_SCORE = "networksToScore";
+    field public static final String EXTRA_NEW_SCORER = "newScorer";
+    field @Deprecated public static final String EXTRA_PACKAGE_NAME = "packageName";
+    field public static final int SCORE_FILTER_CURRENT_NETWORK = 1; // 0x1
+    field public static final int SCORE_FILTER_NONE = 0; // 0x0
+    field public static final int SCORE_FILTER_SCAN_RESULTS = 2; // 0x2
+  }
+
+  public abstract static class NetworkScoreManager.NetworkScoreCallback {
+    ctor public NetworkScoreManager.NetworkScoreCallback();
+    method public abstract void onScoresInvalidated();
+    method public abstract void onScoresUpdated(@NonNull java.util.Collection<android.net.ScoredNetwork>);
+  }
+
+  public abstract class NetworkSpecifier {
+    method public boolean canBeSatisfiedBy(@Nullable android.net.NetworkSpecifier);
+    method @Nullable public android.net.NetworkSpecifier redact();
+  }
+
+  public class NetworkStack {
+    method @Nullable public static android.os.IBinder getService();
+    field public static final String PERMISSION_MAINLINE_NETWORK_STACK = "android.permission.MAINLINE_NETWORK_STACK";
+  }
+
+  public final class NetworkStats implements android.os.Parcelable {
+    ctor public NetworkStats(long, int);
+    method @NonNull public android.net.NetworkStats add(@NonNull android.net.NetworkStats);
+    method @NonNull public android.net.NetworkStats addEntry(@NonNull android.net.NetworkStats.Entry);
+    method public int describeContents();
+    method @NonNull public android.net.NetworkStats subtract(@NonNull android.net.NetworkStats);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkStats> CREATOR;
+    field public static final int DEFAULT_NETWORK_NO = 0; // 0x0
+    field public static final int DEFAULT_NETWORK_YES = 1; // 0x1
+    field public static final String IFACE_VT = "vt_data0";
+    field public static final int METERED_NO = 0; // 0x0
+    field public static final int METERED_YES = 1; // 0x1
+    field public static final int ROAMING_NO = 0; // 0x0
+    field public static final int ROAMING_YES = 1; // 0x1
+    field public static final int SET_DEFAULT = 0; // 0x0
+    field public static final int SET_FOREGROUND = 1; // 0x1
+    field public static final int TAG_NONE = 0; // 0x0
+    field public static final int UID_ALL = -1; // 0xffffffff
+    field public static final int UID_TETHERING = -5; // 0xfffffffb
+  }
+
+  public static class NetworkStats.Entry {
+    ctor public NetworkStats.Entry(@Nullable String, int, int, int, int, int, int, long, long, long, long, long);
+  }
+
+  public final class OemNetworkPreferences implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.Integer> getNetworkPreferences();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.OemNetworkPreferences> CREATOR;
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PAID = 1; // 0x1
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK = 2; // 0x2
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY = 3; // 0x3
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY = 4; // 0x4
+    field public static final int OEM_NETWORK_PREFERENCE_UNINITIALIZED = 0; // 0x0
+  }
+
+  public static final class OemNetworkPreferences.Builder {
+    ctor public OemNetworkPreferences.Builder();
+    ctor public OemNetworkPreferences.Builder(@NonNull android.net.OemNetworkPreferences);
+    method @NonNull public android.net.OemNetworkPreferences.Builder addNetworkPreference(@NonNull String, int);
+    method @NonNull public android.net.OemNetworkPreferences build();
+    method @NonNull public android.net.OemNetworkPreferences.Builder clearNetworkPreference(@NonNull String);
+  }
+
+  public abstract class QosCallback {
+    ctor public QosCallback();
+    method public void onError(@NonNull android.net.QosCallbackException);
+    method public void onQosSessionAvailable(@NonNull android.net.QosSession, @NonNull android.net.QosSessionAttributes);
+    method public void onQosSessionLost(@NonNull android.net.QosSession);
+  }
+
+  public static class QosCallback.QosCallbackRegistrationException extends java.lang.RuntimeException {
+  }
+
+  public final class QosCallbackException extends java.lang.Exception {
+  }
+
+  public abstract class QosFilter {
+    method @NonNull public abstract android.net.Network getNetwork();
+    method public abstract boolean matchesLocalAddress(@NonNull java.net.InetAddress, int, int);
+    method public abstract boolean matchesRemoteAddress(@NonNull java.net.InetAddress, int, int);
+  }
+
+  public final class QosSession implements android.os.Parcelable {
+    ctor public QosSession(int, int);
+    method public int describeContents();
+    method public int getSessionId();
+    method public int getSessionType();
+    method public long getUniqueId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.QosSession> CREATOR;
+    field public static final int TYPE_EPS_BEARER = 1; // 0x1
+    field public static final int TYPE_NR_BEARER = 2; // 0x2
+  }
+
+  public interface QosSessionAttributes {
+  }
+
+  public final class QosSocketInfo implements android.os.Parcelable {
+    ctor public QosSocketInfo(@NonNull android.net.Network, @NonNull java.net.Socket) throws java.io.IOException;
+    method public int describeContents();
+    method @NonNull public java.net.InetSocketAddress getLocalSocketAddress();
+    method @NonNull public android.net.Network getNetwork();
+    method @Nullable public java.net.InetSocketAddress getRemoteSocketAddress();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.QosSocketInfo> CREATOR;
+  }
+
+  public final class RouteInfo implements android.os.Parcelable {
+    ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int);
+    ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int, int);
+    method public int getMtu();
+    method public int getType();
+    field public static final int RTN_THROW = 9; // 0x9
+    field public static final int RTN_UNICAST = 1; // 0x1
+    field public static final int RTN_UNREACHABLE = 7; // 0x7
+  }
+
+  public class RssiCurve implements android.os.Parcelable {
+    ctor public RssiCurve(int, int, byte[]);
+    ctor public RssiCurve(int, int, byte[], int);
+    method public int describeContents();
+    method public byte lookupScore(int);
+    method public byte lookupScore(int, boolean);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.RssiCurve> CREATOR;
+    field public final int activeNetworkRssiBoost;
+    field public final int bucketWidth;
+    field public final byte[] rssiBuckets;
+    field public final int start;
+  }
+
+  public class ScoredNetwork implements android.os.Parcelable {
+    ctor public ScoredNetwork(android.net.NetworkKey, android.net.RssiCurve);
+    ctor public ScoredNetwork(android.net.NetworkKey, android.net.RssiCurve, boolean);
+    ctor public ScoredNetwork(android.net.NetworkKey, android.net.RssiCurve, boolean, @Nullable android.os.Bundle);
+    method public int calculateBadge(int);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final String ATTRIBUTES_KEY_BADGING_CURVE = "android.net.attributes.key.BADGING_CURVE";
+    field public static final String ATTRIBUTES_KEY_HAS_CAPTIVE_PORTAL = "android.net.attributes.key.HAS_CAPTIVE_PORTAL";
+    field public static final String ATTRIBUTES_KEY_RANKING_SCORE_OFFSET = "android.net.attributes.key.RANKING_SCORE_OFFSET";
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.ScoredNetwork> CREATOR;
+    field @Nullable public final android.os.Bundle attributes;
+    field public final boolean meteredHint;
+    field public final android.net.NetworkKey networkKey;
+    field public final android.net.RssiCurve rssiCurve;
+  }
+
+  public abstract class SocketKeepalive implements java.lang.AutoCloseable {
+    field public static final int ERROR_NO_SUCH_SLOT = -33; // 0xffffffdf
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public class SocketLocalAddressChangedException extends java.lang.Exception {
+  }
+
+  public class SocketNotBoundException extends java.lang.Exception {
+  }
+
+  public final class StaticIpConfiguration implements android.os.Parcelable {
+    ctor public StaticIpConfiguration();
+    ctor public StaticIpConfiguration(@Nullable android.net.StaticIpConfiguration);
+    method public void addDnsServer(@NonNull java.net.InetAddress);
+    method public void clear();
+    method public int describeContents();
+    method @NonNull public java.util.List<java.net.InetAddress> getDnsServers();
+    method @Nullable public String getDomains();
+    method @Nullable public java.net.InetAddress getGateway();
+    method @Nullable public android.net.LinkAddress getIpAddress();
+    method @NonNull public java.util.List<android.net.RouteInfo> getRoutes(@Nullable String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.StaticIpConfiguration> CREATOR;
+  }
+
+  public static final class StaticIpConfiguration.Builder {
+    ctor public StaticIpConfiguration.Builder();
+    method @NonNull public android.net.StaticIpConfiguration build();
+    method @NonNull public android.net.StaticIpConfiguration.Builder setDnsServers(@NonNull Iterable<java.net.InetAddress>);
+    method @NonNull public android.net.StaticIpConfiguration.Builder setDomains(@Nullable String);
+    method @NonNull public android.net.StaticIpConfiguration.Builder setGateway(@Nullable java.net.InetAddress);
+    method @NonNull public android.net.StaticIpConfiguration.Builder setIpAddress(@Nullable android.net.LinkAddress);
+  }
+
+  public final class TcpKeepalivePacketData extends android.net.KeepalivePacketData implements android.os.Parcelable {
+    ctor public TcpKeepalivePacketData(@NonNull java.net.InetAddress, int, @NonNull java.net.InetAddress, int, @NonNull byte[], int, int, int, int, int, int) throws android.net.InvalidPacketException;
+    method public int describeContents();
+    method public int getIpTos();
+    method public int getIpTtl();
+    method public int getTcpAck();
+    method public int getTcpSeq();
+    method public int getTcpWindow();
+    method public int getTcpWindowScale();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TcpKeepalivePacketData> CREATOR;
+  }
+
+  public final class TetheredClient implements android.os.Parcelable {
+    ctor public TetheredClient(@NonNull android.net.MacAddress, @NonNull java.util.Collection<android.net.TetheredClient.AddressInfo>, int);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.TetheredClient.AddressInfo> getAddresses();
+    method @NonNull public android.net.MacAddress getMacAddress();
+    method public int getTetheringType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheredClient> CREATOR;
+  }
+
+  public static final class TetheredClient.AddressInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.LinkAddress getAddress();
+    method @Nullable public String getHostname();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheredClient.AddressInfo> CREATOR;
+  }
+
+  public final class TetheringInterface implements android.os.Parcelable {
+    ctor public TetheringInterface(int, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String getInterface();
+    method public int getType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheringInterface> CREATOR;
+  }
+
+  public class TetheringManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.TetheringEventCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void requestLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.OnTetheringEntitlementResultListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void startTethering(@NonNull android.net.TetheringManager.TetheringRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.StartTetheringCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void stopAllTethering();
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void stopTethering(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.ACCESS_NETWORK_STATE}) public void unregisterTetheringEventCallback(@NonNull android.net.TetheringManager.TetheringEventCallback);
+    field @Deprecated public static final String ACTION_TETHER_STATE_CHANGED = "android.net.conn.TETHER_STATE_CHANGED";
+    field public static final int CONNECTIVITY_SCOPE_GLOBAL = 1; // 0x1
+    field public static final int CONNECTIVITY_SCOPE_LOCAL = 2; // 0x2
+    field public static final String EXTRA_ACTIVE_LOCAL_ONLY = "android.net.extra.ACTIVE_LOCAL_ONLY";
+    field public static final String EXTRA_ACTIVE_TETHER = "tetherArray";
+    field public static final String EXTRA_AVAILABLE_TETHER = "availableArray";
+    field public static final String EXTRA_ERRORED_TETHER = "erroredArray";
+    field public static final int TETHERING_BLUETOOTH = 2; // 0x2
+    field public static final int TETHERING_ETHERNET = 5; // 0x5
+    field public static final int TETHERING_INVALID = -1; // 0xffffffff
+    field public static final int TETHERING_NCM = 4; // 0x4
+    field public static final int TETHERING_USB = 1; // 0x1
+    field public static final int TETHERING_WIFI = 0; // 0x0
+    field public static final int TETHERING_WIFI_P2P = 3; // 0x3
+    field public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12; // 0xc
+    field public static final int TETHER_ERROR_DISABLE_FORWARDING_ERROR = 9; // 0x9
+    field public static final int TETHER_ERROR_ENABLE_FORWARDING_ERROR = 8; // 0x8
+    field public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13; // 0xd
+    field public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10; // 0xa
+    field public static final int TETHER_ERROR_INTERNAL_ERROR = 5; // 0x5
+    field public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15; // 0xf
+    field public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14; // 0xe
+    field public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
+    field public static final int TETHER_ERROR_PROVISIONING_FAILED = 11; // 0xb
+    field public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2; // 0x2
+    field public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6; // 0x6
+    field public static final int TETHER_ERROR_UNAVAIL_IFACE = 4; // 0x4
+    field public static final int TETHER_ERROR_UNKNOWN_IFACE = 1; // 0x1
+    field public static final int TETHER_ERROR_UNKNOWN_TYPE = 16; // 0x10
+    field public static final int TETHER_ERROR_UNSUPPORTED = 3; // 0x3
+    field public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7; // 0x7
+    field public static final int TETHER_HARDWARE_OFFLOAD_FAILED = 2; // 0x2
+    field public static final int TETHER_HARDWARE_OFFLOAD_STARTED = 1; // 0x1
+    field public static final int TETHER_HARDWARE_OFFLOAD_STOPPED = 0; // 0x0
+  }
+
+  public static interface TetheringManager.OnTetheringEntitlementResultListener {
+    method public void onTetheringEntitlementResult(int);
+  }
+
+  public static interface TetheringManager.StartTetheringCallback {
+    method public default void onTetheringFailed(int);
+    method public default void onTetheringStarted();
+  }
+
+  public static interface TetheringManager.TetheringEventCallback {
+    method public default void onClientsChanged(@NonNull java.util.Collection<android.net.TetheredClient>);
+    method public default void onError(@NonNull String, int);
+    method public default void onError(@NonNull android.net.TetheringInterface, int);
+    method public default void onLocalOnlyInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public default void onLocalOnlyInterfacesChanged(@NonNull java.util.Set<android.net.TetheringInterface>);
+    method public default void onOffloadStatusChanged(int);
+    method public default void onTetherableInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public default void onTetherableInterfacesChanged(@NonNull java.util.Set<android.net.TetheringInterface>);
+    method public default void onTetheredInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public default void onTetheredInterfacesChanged(@NonNull java.util.Set<android.net.TetheringInterface>);
+    method public default void onTetheringSupported(boolean);
+    method public default void onUpstreamChanged(@Nullable android.net.Network);
+  }
+
+  public static class TetheringManager.TetheringRequest {
+    method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
+    method public int getConnectivityScope();
+    method @Nullable public android.net.LinkAddress getLocalIpv4Address();
+    method public boolean getShouldShowEntitlementUi();
+    method public int getTetheringType();
+    method public boolean isExemptFromEntitlementCheck();
+  }
+
+  public static class TetheringManager.TetheringRequest.Builder {
+    ctor public TetheringManager.TetheringRequest.Builder(int);
+    method @NonNull public android.net.TetheringManager.TetheringRequest build();
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setConnectivityScope(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
+  }
+
+  public class TrafficStats {
+    method public static void setThreadStatsTagApp();
+    method public static void setThreadStatsTagBackup();
+    method public static void setThreadStatsTagRestore();
+    field public static final int TAG_NETWORK_STACK_IMPERSONATION_RANGE_END = -113; // 0xffffff8f
+    field public static final int TAG_NETWORK_STACK_IMPERSONATION_RANGE_START = -128; // 0xffffff80
+    field public static final int TAG_NETWORK_STACK_RANGE_END = -257; // 0xfffffeff
+    field public static final int TAG_NETWORK_STACK_RANGE_START = -768; // 0xfffffd00
+    field public static final int TAG_SYSTEM_IMPERSONATION_RANGE_END = -241; // 0xffffff0f
+    field public static final int TAG_SYSTEM_IMPERSONATION_RANGE_START = -256; // 0xffffff00
+  }
+
+  public abstract class Uri implements java.lang.Comparable<android.net.Uri> android.os.Parcelable {
+    method @NonNull public String toSafeString();
+  }
+
+  public class VpnService extends android.app.Service {
+    method @RequiresPermission(android.Manifest.permission.CONTROL_VPN) public static void prepareAndAuthorize(android.content.Context);
+  }
+
+  public class WebAddress {
+    ctor public WebAddress(String) throws android.net.ParseException;
+  }
+
+  public class WifiKey implements android.os.Parcelable {
+    ctor public WifiKey(String, String);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.WifiKey> CREATOR;
+    field public final String bssid;
+    field public final String ssid;
+  }
+
+}
+
+package android.net.apf {
+
+  public final class ApfCapabilities implements android.os.Parcelable {
+    ctor public ApfCapabilities(int, int, int);
+    method public int describeContents();
+    method public static boolean getApfDrop8023Frames();
+    method @NonNull public static int[] getApfEtherTypeBlackList();
+    method public boolean hasDataAccess();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.net.apf.ApfCapabilities> CREATOR;
+    field public final int apfPacketFormat;
+    field public final int apfVersionSupported;
+    field public final int maximumApfProgramSize;
+  }
+
+}
+
+package android.net.eap {
+
+  public final class EapSessionConfig {
+    method @Deprecated @Nullable public android.net.eap.EapSessionConfig.EapMsChapV2Config getEapMsChapV2onfig();
+  }
+
+  @Deprecated public abstract static class EapSessionConfig.EapUiccConfig extends android.net.eap.EapSessionConfig.EapMethodConfig {
+    method @Deprecated public int getAppType();
+    method @Deprecated public int getSubId();
+  }
+
+}
+
+package android.net.ipsec.ike {
+
+  public interface ChildSessionCallback {
+    method @Deprecated public default void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method public default void onIpSecTransformsMigrated(@NonNull android.net.IpSecTransform, @NonNull android.net.IpSecTransform);
+  }
+
+  public final class ChildSessionConfiguration {
+    method @NonNull public java.util.List<android.net.LinkAddress> getInternalAddresses();
+    method @NonNull public java.util.List<java.net.InetAddress> getInternalDhcpServers();
+    method @NonNull public java.util.List<java.net.InetAddress> getInternalDnsServers();
+    method @NonNull public java.util.List<android.net.IpPrefix> getInternalSubnets();
+  }
+
+  public static final class ChildSessionConfiguration.Builder {
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalAddress(@NonNull android.net.LinkAddress);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalDhcpServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalDnsServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder addInternalSubnet(@NonNull android.net.IpPrefix);
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalAddresses();
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalDhcpServers();
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalDnsServers();
+    method @NonNull public android.net.ipsec.ike.ChildSessionConfiguration.Builder clearInternalSubnets();
+  }
+
+  public abstract class ChildSessionParams {
+    method @Deprecated @NonNull public java.util.List<android.net.ipsec.ike.ChildSaProposal> getSaProposals();
+  }
+
+  public final class IkeSession implements java.lang.AutoCloseable {
+    method public void setNetwork(@NonNull android.net.Network);
+  }
+
+  public interface IkeSessionCallback {
+    method @Deprecated public default void onClosedExceptionally(@NonNull android.net.ipsec.ike.exceptions.IkeException);
+    method @Deprecated public default void onError(@NonNull android.net.ipsec.ike.exceptions.IkeProtocolException);
+    method public default void onIkeSessionConnectionInfoChanged(@NonNull android.net.ipsec.ike.IkeSessionConnectionInfo);
+  }
+
+  public final class IkeSessionConfiguration {
+    method @NonNull public java.util.List<java.net.InetAddress> getPcscfServers();
+  }
+
+  public static final class IkeSessionConfiguration.Builder {
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder addPcscfServer(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.IkeSessionConfiguration.Builder clearPcscfServers();
+  }
+
+  public final class IkeSessionParams {
+    method @NonNull public java.util.List<android.net.ipsec.ike.IkeSessionParams.IkeConfigRequest> getConfigurationRequests();
+    method @IntRange(from=0x0, to=0x3f) public int getDscp();
+    method @Nullable public android.net.ipsec.ike.ike3gpp.Ike3gppExtension getIke3gppExtension();
+    method @Deprecated @NonNull public java.util.List<android.net.ipsec.ike.IkeSaProposal> getSaProposals();
+  }
+
+  public static final class IkeSessionParams.Builder {
+    ctor @Deprecated public IkeSessionParams.Builder(@NonNull android.content.Context);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addPcscfServerRequest(@NonNull java.net.InetAddress);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addPcscfServerRequest(int);
+    method @Deprecated @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder addSaProposal(@NonNull android.net.ipsec.ike.IkeSaProposal);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setDscp(@IntRange(from=0x0, to=0x3f) int);
+    method @NonNull public android.net.ipsec.ike.IkeSessionParams.Builder setIke3gppExtension(@NonNull android.net.ipsec.ike.ike3gpp.Ike3gppExtension);
+  }
+
+  public static interface IkeSessionParams.ConfigRequestIpv4PcscfServer extends android.net.ipsec.ike.IkeSessionParams.IkeConfigRequest {
+    method @Nullable public java.net.Inet4Address getAddress();
+  }
+
+  public static interface IkeSessionParams.ConfigRequestIpv6PcscfServer extends android.net.ipsec.ike.IkeSessionParams.IkeConfigRequest {
+    method @Nullable public java.net.Inet6Address getAddress();
+  }
+
+  public static interface IkeSessionParams.IkeConfigRequest {
+  }
+
+  public static final class TransportModeChildSessionParams.Builder {
+    method @Deprecated @NonNull public android.net.ipsec.ike.TransportModeChildSessionParams.Builder addSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+  }
+
+  public static final class TunnelModeChildSessionParams.Builder {
+    method @Deprecated @NonNull public android.net.ipsec.ike.TunnelModeChildSessionParams.Builder addSaProposal(@NonNull android.net.ipsec.ike.ChildSaProposal);
+  }
+
+}
+
+package android.net.ipsec.ike.exceptions {
+
+  public abstract class IkeProtocolException extends android.net.ipsec.ike.exceptions.IkeException {
+    method @Nullable public byte[] getErrorData();
+  }
+
+}
+
+package android.net.ipsec.ike.ike3gpp {
+
+  public final class Ike3gppBackoffTimer extends android.net.ipsec.ike.ike3gpp.Ike3gppData {
+    ctor public Ike3gppBackoffTimer(byte, int);
+    method public int getBackoffCause();
+    method public byte getBackoffTimer();
+    method public int getDataType();
+    field public static final int ERROR_TYPE_NETWORK_FAILURE = 10500; // 0x2904
+    field public static final int ERROR_TYPE_NO_APN_SUBSCRIPTION = 9002; // 0x232a
+  }
+
+  public abstract class Ike3gppData {
+    method public abstract int getDataType();
+    field public static final int DATA_TYPE_NOTIFY_BACKOFF_TIMER = 2; // 0x2
+    field public static final int DATA_TYPE_NOTIFY_N1_MODE_INFORMATION = 1; // 0x1
+  }
+
+  public final class Ike3gppExtension {
+    ctor public Ike3gppExtension(@NonNull android.net.ipsec.ike.ike3gpp.Ike3gppParams, @NonNull android.net.ipsec.ike.ike3gpp.Ike3gppExtension.Ike3gppDataListener);
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppExtension.Ike3gppDataListener getIke3gppDataListener();
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppParams getIke3gppParams();
+  }
+
+  public static interface Ike3gppExtension.Ike3gppDataListener {
+    method public void onIke3gppDataReceived(@NonNull java.util.List<android.net.ipsec.ike.ike3gpp.Ike3gppData>);
+  }
+
+  public final class Ike3gppN1ModeInformation extends android.net.ipsec.ike.ike3gpp.Ike3gppData {
+    ctor public Ike3gppN1ModeInformation(@NonNull byte[]);
+    method public int getDataType();
+    method @NonNull public byte[] getSnssai();
+  }
+
+  public final class Ike3gppParams {
+    method public byte getPduSessionId();
+    field public static final byte PDU_SESSION_ID_UNSET = 0; // 0x0
+  }
+
+  public static final class Ike3gppParams.Builder {
+    ctor public Ike3gppParams.Builder();
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppParams build();
+    method @NonNull public android.net.ipsec.ike.ike3gpp.Ike3gppParams.Builder setPduSessionId(byte);
+  }
+
+}
+
+package android.net.metrics {
+
+  @Deprecated public final class ApfProgramEvent implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class ApfProgramEvent.Builder {
+    ctor @Deprecated public ApfProgramEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent build();
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setActualLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setCurrentRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setFilteredRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setFlags(boolean, boolean);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.ApfProgramEvent.Builder setProgramLength(int);
+  }
+
+  @Deprecated public final class ApfStats implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class ApfStats.Builder {
+    ctor @Deprecated public ApfStats.Builder();
+    method @Deprecated @NonNull public android.net.metrics.ApfStats build();
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setDroppedRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setDurationMs(long);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setMatchingRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setMaxProgramSize(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setParseErrors(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdates(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdatesAll(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setProgramUpdatesAllowingMulticast(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setReceivedRas(int);
+    method @Deprecated @NonNull public android.net.metrics.ApfStats.Builder setZeroLifetimeRas(int);
+  }
+
+  @Deprecated public final class DhcpClientEvent implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class DhcpClientEvent.Builder {
+    ctor @Deprecated public DhcpClientEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.DhcpClientEvent build();
+    method @Deprecated @NonNull public android.net.metrics.DhcpClientEvent.Builder setDurationMs(int);
+    method @Deprecated @NonNull public android.net.metrics.DhcpClientEvent.Builder setMsg(String);
+  }
+
+  @Deprecated public final class DhcpErrorEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public DhcpErrorEvent(int);
+    method @Deprecated public static int errorCodeWithOption(int, int);
+    field @Deprecated public static final int BOOTP_TOO_SHORT = 67174400; // 0x4010000
+    field @Deprecated public static final int BUFFER_UNDERFLOW = 83951616; // 0x5010000
+    field @Deprecated public static final int DHCP_BAD_MAGIC_COOKIE = 67239936; // 0x4020000
+    field @Deprecated public static final int DHCP_ERROR = 4; // 0x4
+    field @Deprecated public static final int DHCP_INVALID_OPTION_LENGTH = 67305472; // 0x4030000
+    field @Deprecated public static final int DHCP_NO_COOKIE = 67502080; // 0x4060000
+    field @Deprecated public static final int DHCP_NO_MSG_TYPE = 67371008; // 0x4040000
+    field @Deprecated public static final int DHCP_UNKNOWN_MSG_TYPE = 67436544; // 0x4050000
+    field @Deprecated public static final int L2_ERROR = 1; // 0x1
+    field @Deprecated public static final int L2_TOO_SHORT = 16842752; // 0x1010000
+    field @Deprecated public static final int L2_WRONG_ETH_TYPE = 16908288; // 0x1020000
+    field @Deprecated public static final int L3_ERROR = 2; // 0x2
+    field @Deprecated public static final int L3_INVALID_IP = 33751040; // 0x2030000
+    field @Deprecated public static final int L3_NOT_IPV4 = 33685504; // 0x2020000
+    field @Deprecated public static final int L3_TOO_SHORT = 33619968; // 0x2010000
+    field @Deprecated public static final int L4_ERROR = 3; // 0x3
+    field @Deprecated public static final int L4_NOT_UDP = 50397184; // 0x3010000
+    field @Deprecated public static final int L4_WRONG_PORT = 50462720; // 0x3020000
+    field @Deprecated public static final int MISC_ERROR = 5; // 0x5
+    field @Deprecated public static final int PARSING_ERROR = 84082688; // 0x5030000
+    field @Deprecated public static final int RECEIVE_ERROR = 84017152; // 0x5020000
+  }
+
+  @Deprecated public class IpConnectivityLog {
+    ctor @Deprecated public IpConnectivityLog();
+    method @Deprecated public boolean log(long, @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(@NonNull String, @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(@NonNull android.net.Network, @NonNull int[], @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(int, @NonNull int[], @NonNull android.net.metrics.IpConnectivityLog.Event);
+    method @Deprecated public boolean log(@NonNull android.net.metrics.IpConnectivityLog.Event);
+  }
+
+  @Deprecated public static interface IpConnectivityLog.Event extends android.os.Parcelable {
+  }
+
+  @Deprecated public final class IpManagerEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public IpManagerEvent(int, long);
+    field @Deprecated public static final int COMPLETE_LIFECYCLE = 3; // 0x3
+    field @Deprecated public static final int ERROR_INTERFACE_NOT_FOUND = 8; // 0x8
+    field @Deprecated public static final int ERROR_INVALID_PROVISIONING = 7; // 0x7
+    field @Deprecated public static final int ERROR_STARTING_IPREACHABILITYMONITOR = 6; // 0x6
+    field @Deprecated public static final int ERROR_STARTING_IPV4 = 4; // 0x4
+    field @Deprecated public static final int ERROR_STARTING_IPV6 = 5; // 0x5
+    field @Deprecated public static final int PROVISIONING_FAIL = 2; // 0x2
+    field @Deprecated public static final int PROVISIONING_OK = 1; // 0x1
+  }
+
+  @Deprecated public final class IpReachabilityEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public IpReachabilityEvent(int);
+    field @Deprecated public static final int NUD_FAILED = 512; // 0x200
+    field @Deprecated public static final int NUD_FAILED_ORGANIC = 1024; // 0x400
+    field @Deprecated public static final int PROBE = 256; // 0x100
+    field @Deprecated public static final int PROVISIONING_LOST = 768; // 0x300
+    field @Deprecated public static final int PROVISIONING_LOST_ORGANIC = 1280; // 0x500
+  }
+
+  @Deprecated public final class NetworkEvent implements android.net.metrics.IpConnectivityLog.Event {
+    ctor @Deprecated public NetworkEvent(int, long);
+    ctor @Deprecated public NetworkEvent(int);
+    field @Deprecated public static final int NETWORK_CAPTIVE_PORTAL_FOUND = 4; // 0x4
+    field @Deprecated public static final int NETWORK_CONNECTED = 1; // 0x1
+    field @Deprecated public static final int NETWORK_CONSECUTIVE_DNS_TIMEOUT_FOUND = 12; // 0xc
+    field @Deprecated public static final int NETWORK_DISCONNECTED = 7; // 0x7
+    field @Deprecated public static final int NETWORK_FIRST_VALIDATION_PORTAL_FOUND = 10; // 0xa
+    field @Deprecated public static final int NETWORK_FIRST_VALIDATION_SUCCESS = 8; // 0x8
+    field @Deprecated public static final int NETWORK_LINGER = 5; // 0x5
+    field @Deprecated public static final int NETWORK_PARTIAL_CONNECTIVITY = 13; // 0xd
+    field @Deprecated public static final int NETWORK_REVALIDATION_PORTAL_FOUND = 11; // 0xb
+    field @Deprecated public static final int NETWORK_REVALIDATION_SUCCESS = 9; // 0x9
+    field @Deprecated public static final int NETWORK_UNLINGER = 6; // 0x6
+    field @Deprecated public static final int NETWORK_VALIDATED = 2; // 0x2
+    field @Deprecated public static final int NETWORK_VALIDATION_FAILED = 3; // 0x3
+  }
+
+  @Deprecated public final class RaEvent implements android.net.metrics.IpConnectivityLog.Event {
+  }
+
+  @Deprecated public static final class RaEvent.Builder {
+    ctor @Deprecated public RaEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.RaEvent build();
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateDnsslLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updatePrefixPreferredLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updatePrefixValidLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateRdnssLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateRouteInfoLifetime(long);
+    method @Deprecated @NonNull public android.net.metrics.RaEvent.Builder updateRouterLifetime(long);
+  }
+
+  @Deprecated public final class ValidationProbeEvent implements android.net.metrics.IpConnectivityLog.Event {
+    method @Deprecated @NonNull public static String getProbeName(int);
+    field @Deprecated public static final int DNS_FAILURE = 0; // 0x0
+    field @Deprecated public static final int DNS_SUCCESS = 1; // 0x1
+    field @Deprecated public static final int PROBE_DNS = 0; // 0x0
+    field @Deprecated public static final int PROBE_FALLBACK = 4; // 0x4
+    field @Deprecated public static final int PROBE_HTTP = 1; // 0x1
+    field @Deprecated public static final int PROBE_HTTPS = 2; // 0x2
+    field @Deprecated public static final int PROBE_PAC = 3; // 0x3
+    field @Deprecated public static final int PROBE_PRIVDNS = 5; // 0x5
+  }
+
+  @Deprecated public static final class ValidationProbeEvent.Builder {
+    ctor @Deprecated public ValidationProbeEvent.Builder();
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent build();
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent.Builder setDurationMs(long);
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent.Builder setProbeType(int, boolean);
+    method @Deprecated @NonNull public android.net.metrics.ValidationProbeEvent.Builder setReturnCode(int);
+  }
+
+}
+
+package android.net.netstats.provider {
+
+  public abstract class NetworkStatsProvider {
+    ctor public NetworkStatsProvider();
+    method public void notifyAlertReached();
+    method public void notifyLimitReached();
+    method public void notifyStatsUpdated(int, @NonNull android.net.NetworkStats, @NonNull android.net.NetworkStats);
+    method public void notifyWarningReached();
+    method public abstract void onRequestStatsUpdate(int);
+    method public abstract void onSetAlert(long);
+    method public abstract void onSetLimit(@NonNull String, long);
+    method public void onSetWarningAndLimit(@NonNull String, long, long);
+    field public static final int QUOTA_UNLIMITED = -1; // 0xffffffff
+  }
+
+}
+
+package android.net.sip {
+
+  @Deprecated public class SipAudioCall {
+    method @Deprecated @Nullable public android.net.rtp.AudioGroup getAudioGroup();
+    method @Deprecated public void setAudioGroup(@NonNull android.net.rtp.AudioGroup);
+  }
+
+  @Deprecated public class SipManager {
+    method @Deprecated @NonNull public java.util.List<android.net.sip.SipProfile> getProfiles() throws android.net.sip.SipException;
+    field @Deprecated public static final String ACTION_SIP_CALL_OPTION_CHANGED = "android.net.sip.action.SIP_CALL_OPTION_CHANGED";
+    field @Deprecated public static final String ACTION_SIP_INCOMING_CALL = "android.net.sip.action.SIP_INCOMING_CALL";
+    field @Deprecated public static final String ACTION_SIP_REMOVE_PROFILE = "android.net.sip.action.SIP_REMOVE_PROFILE";
+    field @Deprecated public static final String ACTION_SIP_SERVICE_UP = "android.net.sip.action.SIP_SERVICE_UP";
+    field @Deprecated public static final String ACTION_START_SIP = "android.net.sip.action.START_SIP";
+  }
+
+  @Deprecated public class SipProfile implements java.lang.Cloneable android.os.Parcelable java.io.Serializable {
+    method @Deprecated public int getCallingUid();
+  }
+
+}
+
+package android.net.util {
+
+  public final class SocketUtils {
+    method public static void bindSocketToInterface(@NonNull java.io.FileDescriptor, @NonNull String) throws android.system.ErrnoException;
+    method public static void closeSocket(@Nullable java.io.FileDescriptor) throws java.io.IOException;
+    method @NonNull public static java.net.SocketAddress makeNetlinkSocketAddress(int, int);
+    method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int);
+    method @Deprecated @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, @NonNull byte[]);
+    method @NonNull public static java.net.SocketAddress makePacketSocketAddress(int, int, @NonNull byte[]);
+  }
+
+}
+
+package android.net.vcn {
+
+  public class VcnManager {
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void addVcnNetworkPolicyChangeListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.vcn.VcnManager.VcnNetworkPolicyChangeListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.vcn.VcnNetworkPolicyResult applyVcnNetworkPolicy(@NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void removeVcnNetworkPolicyChangeListener(@NonNull android.net.vcn.VcnManager.VcnNetworkPolicyChangeListener);
+  }
+
+  public static interface VcnManager.VcnNetworkPolicyChangeListener {
+    method public void onPolicyChanged();
+  }
+
+  public final class VcnNetworkPolicyResult implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.NetworkCapabilities getNetworkCapabilities();
+    method public boolean isTeardownRequested();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.vcn.VcnNetworkPolicyResult> CREATOR;
+  }
+
+}
+
+package android.net.wifi {
+
+  public final class CoexUnsafeChannel implements android.os.Parcelable {
+    ctor public CoexUnsafeChannel(int, int);
+    ctor public CoexUnsafeChannel(int, int, int);
+    method public int getBand();
+    method public int getChannel();
+    method public int getPowerCapDbm();
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.CoexUnsafeChannel> CREATOR;
+    field public static final int POWER_CAP_NONE = 2147483647; // 0x7fffffff
+  }
+
+  public abstract class EasyConnectStatusCallback {
+    ctor public EasyConnectStatusCallback();
+    method public void onBootstrapUriGenerated(@NonNull android.net.Uri);
+    method public abstract void onConfiguratorSuccess(int);
+    method public abstract void onEnrolleeSuccess(int);
+    method public void onFailure(int);
+    method public void onFailure(int, @Nullable String, @NonNull android.util.SparseArray<int[]>, @NonNull int[]);
+    method public abstract void onProgress(int);
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_AUTHENTICATION_SUCCESS = 0; // 0x0
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_CONFIGURATION_ACCEPTED = 3; // 0x3
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_CONFIGURATION_SENT_WAITING_RESPONSE = 2; // 0x2
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_RESPONSE_PENDING = 1; // 0x1
+    field public static final int EASY_CONNECT_EVENT_SUCCESS_CONFIGURATION_APPLIED = 1; // 0x1
+    field public static final int EASY_CONNECT_EVENT_SUCCESS_CONFIGURATION_SENT = 0; // 0x0
+  }
+
+  @Deprecated public class RttManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void disableResponder(android.net.wifi.RttManager.ResponderCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void enableResponder(android.net.wifi.RttManager.ResponderCallback);
+    method @Deprecated public android.net.wifi.RttManager.Capabilities getCapabilities();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public android.net.wifi.RttManager.RttCapabilities getRttCapabilities();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startRanging(android.net.wifi.RttManager.RttParams[], android.net.wifi.RttManager.RttListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void stopRanging(android.net.wifi.RttManager.RttListener);
+    field @Deprecated public static final int BASE = 160256; // 0x27200
+    field @Deprecated public static final int CMD_OP_ABORTED = 160260; // 0x27204
+    field @Deprecated public static final int CMD_OP_DISABLE_RESPONDER = 160262; // 0x27206
+    field @Deprecated public static final int CMD_OP_ENABLE_RESPONDER = 160261; // 0x27205
+    field @Deprecated public static final int CMD_OP_ENALBE_RESPONDER_FAILED = 160264; // 0x27208
+    field @Deprecated public static final int CMD_OP_ENALBE_RESPONDER_SUCCEEDED = 160263; // 0x27207
+    field @Deprecated public static final int CMD_OP_FAILED = 160258; // 0x27202
+    field @Deprecated public static final int CMD_OP_START_RANGING = 160256; // 0x27200
+    field @Deprecated public static final int CMD_OP_STOP_RANGING = 160257; // 0x27201
+    field @Deprecated public static final int CMD_OP_SUCCEEDED = 160259; // 0x27203
+    field @Deprecated public static final String DESCRIPTION_KEY = "android.net.wifi.RttManager.Description";
+    field @Deprecated public static final int PREAMBLE_HT = 2; // 0x2
+    field @Deprecated public static final int PREAMBLE_LEGACY = 1; // 0x1
+    field @Deprecated public static final int PREAMBLE_VHT = 4; // 0x4
+    field @Deprecated public static final int REASON_INITIATOR_NOT_ALLOWED_WHEN_RESPONDER_ON = -6; // 0xfffffffa
+    field @Deprecated public static final int REASON_INVALID_LISTENER = -3; // 0xfffffffd
+    field @Deprecated public static final int REASON_INVALID_REQUEST = -4; // 0xfffffffc
+    field @Deprecated public static final int REASON_NOT_AVAILABLE = -2; // 0xfffffffe
+    field @Deprecated public static final int REASON_PERMISSION_DENIED = -5; // 0xfffffffb
+    field @Deprecated public static final int REASON_UNSPECIFIED = -1; // 0xffffffff
+    field @Deprecated public static final int RTT_BW_10_SUPPORT = 2; // 0x2
+    field @Deprecated public static final int RTT_BW_160_SUPPORT = 32; // 0x20
+    field @Deprecated public static final int RTT_BW_20_SUPPORT = 4; // 0x4
+    field @Deprecated public static final int RTT_BW_40_SUPPORT = 8; // 0x8
+    field @Deprecated public static final int RTT_BW_5_SUPPORT = 1; // 0x1
+    field @Deprecated public static final int RTT_BW_80_SUPPORT = 16; // 0x10
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_10 = 6; // 0x6
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_160 = 3; // 0x3
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_20 = 0; // 0x0
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_40 = 1; // 0x1
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_5 = 5; // 0x5
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_80 = 2; // 0x2
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_80P80 = 4; // 0x4
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; // 0xffffffff
+    field @Deprecated public static final int RTT_PEER_NAN = 5; // 0x5
+    field @Deprecated public static final int RTT_PEER_P2P_CLIENT = 4; // 0x4
+    field @Deprecated public static final int RTT_PEER_P2P_GO = 3; // 0x3
+    field @Deprecated public static final int RTT_PEER_TYPE_AP = 1; // 0x1
+    field @Deprecated public static final int RTT_PEER_TYPE_STA = 2; // 0x2
+    field @Deprecated public static final int RTT_PEER_TYPE_UNSPECIFIED = 0; // 0x0
+    field @Deprecated public static final int RTT_STATUS_ABORTED = 8; // 0x8
+    field @Deprecated public static final int RTT_STATUS_FAILURE = 1; // 0x1
+    field @Deprecated public static final int RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6; // 0x6
+    field @Deprecated public static final int RTT_STATUS_FAIL_BUSY_TRY_LATER = 12; // 0xc
+    field @Deprecated public static final int RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE = 15; // 0xf
+    field @Deprecated public static final int RTT_STATUS_FAIL_INVALID_TS = 9; // 0x9
+    field @Deprecated public static final int RTT_STATUS_FAIL_NOT_SCHEDULED_YET = 4; // 0x4
+    field @Deprecated public static final int RTT_STATUS_FAIL_NO_CAPABILITY = 7; // 0x7
+    field @Deprecated public static final int RTT_STATUS_FAIL_NO_RSP = 2; // 0x2
+    field @Deprecated public static final int RTT_STATUS_FAIL_PROTOCOL = 10; // 0xa
+    field @Deprecated public static final int RTT_STATUS_FAIL_REJECTED = 3; // 0x3
+    field @Deprecated public static final int RTT_STATUS_FAIL_SCHEDULE = 11; // 0xb
+    field @Deprecated public static final int RTT_STATUS_FAIL_TM_TIMEOUT = 5; // 0x5
+    field @Deprecated public static final int RTT_STATUS_INVALID_REQ = 13; // 0xd
+    field @Deprecated public static final int RTT_STATUS_NO_WIFI = 14; // 0xe
+    field @Deprecated public static final int RTT_STATUS_SUCCESS = 0; // 0x0
+    field @Deprecated public static final int RTT_TYPE_11_MC = 4; // 0x4
+    field @Deprecated public static final int RTT_TYPE_11_V = 2; // 0x2
+    field @Deprecated public static final int RTT_TYPE_ONE_SIDED = 1; // 0x1
+    field @Deprecated public static final int RTT_TYPE_TWO_SIDED = 2; // 0x2
+    field @Deprecated public static final int RTT_TYPE_UNSPECIFIED = 0; // 0x0
+  }
+
+  @Deprecated public class RttManager.Capabilities {
+    ctor @Deprecated public RttManager.Capabilities();
+    field @Deprecated public int supportedPeerType;
+    field @Deprecated public int supportedType;
+  }
+
+  @Deprecated public static class RttManager.ParcelableRttParams implements android.os.Parcelable {
+    field @Deprecated @NonNull public android.net.wifi.RttManager.RttParams[] mParams;
+  }
+
+  @Deprecated public static class RttManager.ParcelableRttResults implements android.os.Parcelable {
+    ctor @Deprecated public RttManager.ParcelableRttResults(android.net.wifi.RttManager.RttResult[]);
+    field @Deprecated public android.net.wifi.RttManager.RttResult[] mResults;
+  }
+
+  @Deprecated public abstract static class RttManager.ResponderCallback {
+    ctor @Deprecated public RttManager.ResponderCallback();
+    method @Deprecated public abstract void onResponderEnableFailure(int);
+    method @Deprecated public abstract void onResponderEnabled(android.net.wifi.RttManager.ResponderConfig);
+  }
+
+  @Deprecated public static class RttManager.ResponderConfig implements android.os.Parcelable {
+    ctor @Deprecated public RttManager.ResponderConfig();
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.RttManager.ResponderConfig> CREATOR;
+    field @Deprecated public int centerFreq0;
+    field @Deprecated public int centerFreq1;
+    field @Deprecated public int channelWidth;
+    field @Deprecated public int frequency;
+    field @Deprecated public String macAddress;
+    field @Deprecated public int preamble;
+  }
+
+  @Deprecated public static class RttManager.RttCapabilities implements android.os.Parcelable {
+    ctor @Deprecated public RttManager.RttCapabilities();
+    field @Deprecated public int bwSupported;
+    field @Deprecated public boolean lciSupported;
+    field @Deprecated public boolean lcrSupported;
+    field @Deprecated public int mcVersion;
+    field @Deprecated public boolean oneSidedRttSupported;
+    field @Deprecated public int preambleSupported;
+    field @Deprecated public boolean responderSupported;
+    field @Deprecated public boolean secureRttSupported;
+    field @Deprecated public boolean supportedPeerType;
+    field @Deprecated public boolean supportedType;
+    field @Deprecated public boolean twoSided11McRttSupported;
+  }
+
+  @Deprecated public static interface RttManager.RttListener {
+    method @Deprecated public void onAborted();
+    method @Deprecated public void onFailure(int, String);
+    method @Deprecated public void onSuccess(android.net.wifi.RttManager.RttResult[]);
+  }
+
+  @Deprecated public static class RttManager.RttParams {
+    ctor @Deprecated public RttManager.RttParams();
+    field @Deprecated public boolean LCIRequest;
+    field @Deprecated public boolean LCRRequest;
+    field @Deprecated public int bandwidth;
+    field @Deprecated public String bssid;
+    field @Deprecated public int burstTimeout;
+    field @Deprecated public int centerFreq0;
+    field @Deprecated public int centerFreq1;
+    field @Deprecated public int channelWidth;
+    field @Deprecated public int deviceType;
+    field @Deprecated public int frequency;
+    field @Deprecated public int interval;
+    field @Deprecated public int numRetriesPerFTMR;
+    field @Deprecated public int numRetriesPerMeasurementFrame;
+    field @Deprecated public int numSamplesPerBurst;
+    field @Deprecated public int num_retries;
+    field @Deprecated public int num_samples;
+    field @Deprecated public int numberBurst;
+    field @Deprecated public int preamble;
+    field @Deprecated public int requestType;
+    field @Deprecated public boolean secure;
+  }
+
+  @Deprecated public static class RttManager.RttResult {
+    ctor @Deprecated public RttManager.RttResult();
+    field @Deprecated public android.net.wifi.RttManager.WifiInformationElement LCI;
+    field @Deprecated public android.net.wifi.RttManager.WifiInformationElement LCR;
+    field @Deprecated public String bssid;
+    field @Deprecated public int burstDuration;
+    field @Deprecated public int burstNumber;
+    field @Deprecated public int distance;
+    field @Deprecated public int distanceSpread;
+    field @Deprecated public int distanceStandardDeviation;
+    field @Deprecated public int distance_cm;
+    field @Deprecated public int distance_sd_cm;
+    field @Deprecated public int distance_spread_cm;
+    field @Deprecated public int frameNumberPerBurstPeer;
+    field @Deprecated public int measurementFrameNumber;
+    field @Deprecated public int measurementType;
+    field @Deprecated public int negotiatedBurstNum;
+    field @Deprecated public int requestType;
+    field @Deprecated public int retryAfterDuration;
+    field @Deprecated public int rssi;
+    field @Deprecated public int rssiSpread;
+    field @Deprecated public int rssi_spread;
+    field @Deprecated public long rtt;
+    field @Deprecated public long rttSpread;
+    field @Deprecated public long rttStandardDeviation;
+    field @Deprecated public long rtt_ns;
+    field @Deprecated public long rtt_sd_ns;
+    field @Deprecated public long rtt_spread_ns;
+    field @Deprecated public int rxRate;
+    field @Deprecated public boolean secure;
+    field @Deprecated public int status;
+    field @Deprecated public int successMeasurementFrameNumber;
+    field @Deprecated public long ts;
+    field @Deprecated public int txRate;
+    field @Deprecated public int tx_rate;
+  }
+
+  @Deprecated public static class RttManager.WifiInformationElement {
+    ctor @Deprecated public RttManager.WifiInformationElement();
+    field @Deprecated public byte[] data;
+    field @Deprecated public byte id;
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    field public static final int CIPHER_BIP_CMAC_256 = 9; // 0x9
+    field public static final int CIPHER_BIP_GMAC_128 = 7; // 0x7
+    field public static final int CIPHER_BIP_GMAC_256 = 8; // 0x8
+    field public static final int CIPHER_CCMP = 3; // 0x3
+    field public static final int CIPHER_GCMP_128 = 6; // 0x6
+    field public static final int CIPHER_GCMP_256 = 4; // 0x4
+    field public static final int CIPHER_NONE = 0; // 0x0
+    field public static final int CIPHER_NO_GROUP_ADDRESSED = 1; // 0x1
+    field public static final int CIPHER_SMS4 = 5; // 0x5
+    field public static final int CIPHER_TKIP = 2; // 0x2
+    field public static final int KEY_MGMT_EAP = 2; // 0x2
+    field public static final int KEY_MGMT_EAP_SHA256 = 6; // 0x6
+    field public static final int KEY_MGMT_EAP_SUITE_B_192 = 10; // 0xa
+    field public static final int KEY_MGMT_FT_EAP = 4; // 0x4
+    field public static final int KEY_MGMT_FT_PSK = 3; // 0x3
+    field public static final int KEY_MGMT_FT_SAE = 11; // 0xb
+    field public static final int KEY_MGMT_NONE = 0; // 0x0
+    field public static final int KEY_MGMT_OSEN = 7; // 0x7
+    field public static final int KEY_MGMT_OWE = 9; // 0x9
+    field public static final int KEY_MGMT_OWE_TRANSITION = 12; // 0xc
+    field public static final int KEY_MGMT_PSK = 1; // 0x1
+    field public static final int KEY_MGMT_PSK_SHA256 = 5; // 0x5
+    field public static final int KEY_MGMT_SAE = 8; // 0x8
+    field public static final int KEY_MGMT_WAPI_CERT = 14; // 0xe
+    field public static final int KEY_MGMT_WAPI_PSK = 13; // 0xd
+    field public static final int PROTOCOL_NONE = 0; // 0x0
+    field public static final int PROTOCOL_OSEN = 3; // 0x3
+    field public static final int PROTOCOL_RSN = 2; // 0x2
+    field public static final int PROTOCOL_WAPI = 4; // 0x4
+    field public static final int PROTOCOL_WPA = 1; // 0x1
+  }
+
+  public final class SoftApCapability implements android.os.Parcelable {
+    method public boolean areFeaturesSupported(long);
+    method public int describeContents();
+    method public int getMaxSupportedClients();
+    method @NonNull public int[] getSupportedChannelList(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.SoftApCapability> CREATOR;
+    field public static final long SOFTAP_FEATURE_ACS_OFFLOAD = 1L; // 0x1L
+    field public static final long SOFTAP_FEATURE_BAND_24G_SUPPORTED = 32L; // 0x20L
+    field public static final long SOFTAP_FEATURE_BAND_5G_SUPPORTED = 64L; // 0x40L
+    field public static final long SOFTAP_FEATURE_BAND_60G_SUPPORTED = 256L; // 0x100L
+    field public static final long SOFTAP_FEATURE_BAND_6G_SUPPORTED = 128L; // 0x80L
+    field public static final long SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT = 2L; // 0x2L
+    field public static final long SOFTAP_FEATURE_IEEE80211_AX = 16L; // 0x10L
+    field public static final long SOFTAP_FEATURE_MAC_ADDRESS_CUSTOMIZATION = 8L; // 0x8L
+    field public static final long SOFTAP_FEATURE_WPA3_SAE = 4L; // 0x4L
+  }
+
+  public final class SoftApConfiguration implements android.os.Parcelable {
+    method @NonNull public java.util.List<android.net.MacAddress> getAllowedClientList();
+    method @Deprecated public int getBand();
+    method @NonNull public java.util.List<android.net.MacAddress> getBlockedClientList();
+    method @Deprecated public int getChannel();
+    method @NonNull public android.util.SparseIntArray getChannels();
+    method public int getMacRandomizationSetting();
+    method public int getMaxNumberOfClients();
+    method public long getShutdownTimeoutMillis();
+    method public boolean isAutoShutdownEnabled();
+    method public boolean isBridgedModeOpportunisticShutdownEnabled();
+    method public boolean isClientControlByUserEnabled();
+    method public boolean isIeee80211axEnabled();
+    method public boolean isUserConfiguration();
+    method @Nullable public android.net.wifi.WifiConfiguration toWifiConfiguration();
+    field public static final int BAND_2GHZ = 1; // 0x1
+    field public static final int BAND_5GHZ = 2; // 0x2
+    field public static final int BAND_60GHZ = 8; // 0x8
+    field public static final int BAND_6GHZ = 4; // 0x4
+    field @Deprecated public static final int BAND_ANY = 7; // 0x7
+    field public static final int RANDOMIZATION_NONE = 0; // 0x0
+    field public static final int RANDOMIZATION_PERSISTENT = 1; // 0x1
+  }
+
+  public static final class SoftApConfiguration.Builder {
+    ctor public SoftApConfiguration.Builder();
+    ctor public SoftApConfiguration.Builder(@NonNull android.net.wifi.SoftApConfiguration);
+    method @NonNull public android.net.wifi.SoftApConfiguration build();
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setAllowedClientList(@NonNull java.util.List<android.net.MacAddress>);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setAutoShutdownEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBand(int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBands(@NonNull int[]);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBlockedClientList(@NonNull java.util.List<android.net.MacAddress>);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBridgedModeOpportunisticShutdownEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBssid(@Nullable android.net.MacAddress);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setChannel(int, int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setChannels(@NonNull android.util.SparseIntArray);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setClientControlByUserEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setHiddenSsid(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setIeee80211axEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setMacRandomizationSetting(int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setMaxNumberOfClients(@IntRange(from=0) int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setPassphrase(@Nullable String, int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setShutdownTimeoutMillis(@IntRange(from=0) long);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setSsid(@Nullable String);
+  }
+
+  public final class SoftApInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAutoShutdownTimeoutMillis();
+    method public int getBandwidth();
+    method @Nullable public android.net.MacAddress getBssid();
+    method public int getFrequency();
+    method public int getWifiStandard();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CHANNEL_WIDTH_160MHZ = 6; // 0x6
+    field public static final int CHANNEL_WIDTH_20MHZ = 2; // 0x2
+    field public static final int CHANNEL_WIDTH_20MHZ_NOHT = 1; // 0x1
+    field public static final int CHANNEL_WIDTH_2160MHZ = 7; // 0x7
+    field public static final int CHANNEL_WIDTH_40MHZ = 3; // 0x3
+    field public static final int CHANNEL_WIDTH_4320MHZ = 8; // 0x8
+    field public static final int CHANNEL_WIDTH_6480MHZ = 9; // 0x9
+    field public static final int CHANNEL_WIDTH_80MHZ = 4; // 0x4
+    field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 5; // 0x5
+    field public static final int CHANNEL_WIDTH_8640MHZ = 10; // 0xa
+    field public static final int CHANNEL_WIDTH_INVALID = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.SoftApInfo> CREATOR;
+  }
+
+  public final class WifiAvailableChannel implements android.os.Parcelable {
+    ctor public WifiAvailableChannel(int, int);
+    method public int describeContents();
+    method public int getFrequencyMhz();
+    method public int getOperationalModes();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiAvailableChannel> CREATOR;
+    field public static final int OP_MODE_SAP = 2; // 0x2
+    field public static final int OP_MODE_STA = 1; // 0x1
+    field public static final int OP_MODE_TDLS = 32; // 0x20
+    field public static final int OP_MODE_WIFI_AWARE = 16; // 0x10
+    field public static final int OP_MODE_WIFI_DIRECT_CLI = 4; // 0x4
+    field public static final int OP_MODE_WIFI_DIRECT_GO = 8; // 0x8
+  }
+
+  public final class WifiClient implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.MacAddress getMacAddress();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiClient> CREATOR;
+  }
+
+  @Deprecated public class WifiConfiguration implements android.os.Parcelable {
+    method @Deprecated public int getAuthType();
+    method @Deprecated public int getDeletionPriority();
+    method @Deprecated @NonNull public android.net.IpConfiguration getIpConfiguration();
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus getNetworkSelectionStatus();
+    method @Deprecated @NonNull public String getPrintableSsid();
+    method @Deprecated @NonNull public String getProfileKey();
+    method @Deprecated public int getRecentFailureReason();
+    method @Deprecated public boolean hasNoInternetAccess();
+    method @Deprecated public boolean isEphemeral();
+    method @Deprecated public static boolean isMetered(@Nullable android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiInfo);
+    method @Deprecated public boolean isNoInternetAccessExpected();
+    method @Deprecated public void setDeletionPriority(int) throws java.lang.IllegalArgumentException;
+    method @Deprecated public void setIpConfiguration(@Nullable android.net.IpConfiguration);
+    method @Deprecated public void setNetworkSelectionStatus(@NonNull android.net.wifi.WifiConfiguration.NetworkSelectionStatus);
+    field @Deprecated public static final int INVALID_NETWORK_ID = -1; // 0xffffffff
+    field @Deprecated public static final int METERED_OVERRIDE_METERED = 1; // 0x1
+    field @Deprecated public static final int METERED_OVERRIDE_NONE = 0; // 0x0
+    field @Deprecated public static final int METERED_OVERRIDE_NOT_METERED = 2; // 0x2
+    field @Deprecated public static final int RANDOMIZATION_AUTO = 3; // 0x3
+    field @Deprecated public static final int RANDOMIZATION_NONE = 0; // 0x0
+    field @Deprecated public static final int RANDOMIZATION_NON_PERSISTENT = 2; // 0x2
+    field @Deprecated public static final int RANDOMIZATION_PERSISTENT = 1; // 0x1
+    field @Deprecated public static final int RECENT_FAILURE_AP_UNABLE_TO_HANDLE_NEW_STA = 17; // 0x11
+    field @Deprecated public static final int RECENT_FAILURE_DISCONNECTION_AP_BUSY = 1004; // 0x3ec
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_AIR_INTERFACE_OVERLOADED = 1007; // 0x3ef
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_AUTH_SERVER_OVERLOADED = 1008; // 0x3f0
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_INSUFFICIENT_RSSI = 1009; // 0x3f1
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_MAX_NUM_STA_ASSOCIATED = 1006; // 0x3ee
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_UNSPECIFIED = 1005; // 0x3ed
+    field @Deprecated public static final int RECENT_FAILURE_NETWORK_NOT_FOUND = 1011; // 0x3f3
+    field @Deprecated public static final int RECENT_FAILURE_NONE = 0; // 0x0
+    field @Deprecated public static final int RECENT_FAILURE_OCE_RSSI_BASED_ASSOCIATION_REJECTION = 1010; // 0x3f2
+    field @Deprecated public static final int RECENT_FAILURE_POOR_CHANNEL_CONDITIONS = 1003; // 0x3eb
+    field @Deprecated public static final int RECENT_FAILURE_REFUSED_TEMPORARILY = 1002; // 0x3ea
+    field @Deprecated public boolean allowAutojoin;
+    field @Deprecated public int carrierId;
+    field @Deprecated public boolean carrierMerged;
+    field @Deprecated public String creatorName;
+    field @Deprecated public int creatorUid;
+    field @Deprecated public boolean fromWifiNetworkSpecifier;
+    field @Deprecated public boolean fromWifiNetworkSuggestion;
+    field @Deprecated public int lastConnectUid;
+    field @Deprecated public String lastUpdateName;
+    field @Deprecated public int lastUpdateUid;
+    field @Deprecated public int macRandomizationSetting;
+    field @Deprecated public boolean meteredHint;
+    field @Deprecated public int meteredOverride;
+    field @Deprecated public int numAssociation;
+    field @Deprecated public int numScorerOverride;
+    field @Deprecated public int numScorerOverrideAndSwitchedNetwork;
+    field @Deprecated public boolean requirePmf;
+    field @Deprecated public boolean shared;
+    field @Deprecated public int subscriptionId;
+    field @Deprecated public boolean useExternalScores;
+  }
+
+  @Deprecated public static class WifiConfiguration.KeyMgmt {
+    field @Deprecated public static final int WAPI_CERT = 14; // 0xe
+    field @Deprecated public static final int WAPI_PSK = 13; // 0xd
+    field @Deprecated public static final int WPA2_PSK = 4; // 0x4
+  }
+
+  @Deprecated public static class WifiConfiguration.NetworkSelectionStatus {
+    method @Deprecated public int getDisableReasonCounter(int);
+    method @Deprecated public long getDisableTime();
+    method @Deprecated public static int getMaxNetworkSelectionDisableReason();
+    method @Deprecated public int getNetworkSelectionDisableReason();
+    method @Deprecated @Nullable public static String getNetworkSelectionDisableReasonString(int);
+    method @Deprecated public int getNetworkSelectionStatus();
+    method @Deprecated @NonNull public String getNetworkStatusString();
+    method @Deprecated public boolean hasEverConnected();
+    field @Deprecated public static final int DISABLED_ASSOCIATION_REJECTION = 1; // 0x1
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_FAILURE = 2; // 0x2
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_NO_CREDENTIALS = 5; // 0x5
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_NO_SUBSCRIPTION = 9; // 0x9
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_PRIVATE_EAP_ERROR = 10; // 0xa
+    field @Deprecated public static final int DISABLED_BY_WIFI_MANAGER = 7; // 0x7
+    field @Deprecated public static final int DISABLED_BY_WRONG_PASSWORD = 8; // 0x8
+    field @Deprecated public static final int DISABLED_CONSECUTIVE_FAILURES = 12; // 0xc
+    field @Deprecated public static final int DISABLED_DHCP_FAILURE = 3; // 0x3
+    field @Deprecated public static final int DISABLED_NETWORK_NOT_FOUND = 11; // 0xb
+    field @Deprecated public static final int DISABLED_NONE = 0; // 0x0
+    field @Deprecated public static final int DISABLED_NO_INTERNET_PERMANENT = 6; // 0x6
+    field @Deprecated public static final int DISABLED_NO_INTERNET_TEMPORARY = 4; // 0x4
+    field @Deprecated public static final int NETWORK_SELECTION_ENABLED = 0; // 0x0
+    field @Deprecated public static final int NETWORK_SELECTION_PERMANENTLY_DISABLED = 2; // 0x2
+    field @Deprecated public static final int NETWORK_SELECTION_TEMPORARY_DISABLED = 1; // 0x1
+  }
+
+  @Deprecated public static final class WifiConfiguration.NetworkSelectionStatus.Builder {
+    ctor @Deprecated public WifiConfiguration.NetworkSelectionStatus.Builder();
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus build();
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus.Builder setNetworkSelectionDisableReason(int);
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus.Builder setNetworkSelectionStatus(int);
+  }
+
+  public final class WifiConnectedSessionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getSessionId();
+    method public boolean isUserSelected();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiConnectedSessionInfo> CREATOR;
+  }
+
+  public static final class WifiConnectedSessionInfo.Builder {
+    ctor public WifiConnectedSessionInfo.Builder(int);
+    method @NonNull public android.net.wifi.WifiConnectedSessionInfo build();
+    method @NonNull public android.net.wifi.WifiConnectedSessionInfo.Builder setUserSelected(boolean);
+  }
+
+  public class WifiEnterpriseConfig implements android.os.Parcelable {
+    method @Nullable public String[] getCaCertificateAliases();
+    method @NonNull public String getCaPath();
+    method @NonNull public String getClientCertificateAlias();
+    method public int getOcsp();
+    method @NonNull public String getWapiCertSuite();
+    method public void setCaCertificateAliases(@Nullable String[]);
+    method public void setCaPath(@NonNull String);
+    method public void setClientCertificateAlias(@NonNull String);
+    method public void setOcsp(int);
+    method public void setWapiCertSuite(@NonNull String);
+    field public static final int OCSP_NONE = 0; // 0x0
+    field public static final int OCSP_REQUEST_CERT_STATUS = 1; // 0x1
+    field public static final int OCSP_REQUIRE_ALL_NON_TRUSTED_CERTS_STATUS = 3; // 0x3
+    field public static final int OCSP_REQUIRE_CERT_STATUS = 2; // 0x2
+  }
+
+  public class WifiFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+  public class WifiInfo implements android.os.Parcelable android.net.TransportInfo {
+    method public double getLostTxPacketsPerSecond();
+    method @Nullable public String getRequestingPackageName();
+    method public double getRetriedTxPacketsPerSecond();
+    method public int getScore();
+    method public double getSuccessfulRxPacketsPerSecond();
+    method public double getSuccessfulTxPacketsPerSecond();
+    method public boolean isCarrierMerged();
+    method public boolean isEphemeral();
+    method public boolean isOemPaid();
+    method public boolean isOemPrivate();
+    method public boolean isOsuAp();
+    method public boolean isPasspointAp();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean isPrimary();
+    method public boolean isTrusted();
+    method @Nullable public static String sanitizeSsid(@Nullable String);
+    field public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00";
+    field public static final int INVALID_RSSI = -127; // 0xffffff81
+  }
+
+  public class WifiManager {
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void addOnWifiUsabilityStatsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void addWifiVerboseLoggingStatusChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.WifiVerboseLoggingStatusChangedListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoin(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoinGlobal(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoinPasspoint(@NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_WIFI_COUNTRY_CODE) public void clearOverrideCountryCode();
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void clearWifiConnectedNetworkScorer();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void disable(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK}) public void disableEphemeralNetwork(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void factoryReset();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void forget(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.util.Pair<android.net.wifi.WifiConfiguration,java.util.Map<java.lang.Integer,java.util.List<android.net.wifi.ScanResult>>>> getAllMatchingWifiConfigs(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<android.net.wifi.WifiAvailableChannel> getAllowedChannels(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String getCountryCode();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public android.net.Network getCurrentNetwork();
+    method public static int getEasyConnectMaxAllowedResponderDeviceInfoLength();
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String[] getFactoryMacAddresses();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,java.util.List<android.net.wifi.ScanResult>> getMatchingOsuProviders(@Nullable java.util.List<android.net.wifi.ScanResult>);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,android.net.wifi.hotspot2.PasspointConfiguration> getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set<android.net.wifi.hotspot2.OsuProvider>);
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public java.util.Map<android.net.wifi.WifiNetworkSuggestion,java.util.List<android.net.wifi.ScanResult>> getMatchingScanResults(@NonNull java.util.List<android.net.wifi.WifiNetworkSuggestion>, @Nullable java.util.List<android.net.wifi.ScanResult>);
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public java.util.List<android.net.wifi.WifiConfiguration> getPrivilegedConfiguredNetworks();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public android.net.wifi.SoftApConfiguration getSoftApConfiguration();
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<android.net.wifi.WifiAvailableChannel> getUsableChannels(int, int);
+    method public int getVerboseLoggingLevel();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void getWifiActivityEnergyInfoAsync(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiActivityEnergyInfoListener);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.net.wifi.WifiConfiguration> getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method public boolean isApMacRandomizationSupported();
+    method public boolean isConnectedMacRandomizationSupported();
+    method @Deprecated public boolean isDeviceToDeviceRttSupported();
+    method public boolean isPortableHotspotSupported();
+    method public boolean isStaConcurrencyForRestrictedConnectionsSupported();
+    method public boolean isVerboseLoggingEnabled();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled();
+    method public boolean isWifiScannerSupported();
+    method @RequiresPermission(android.Manifest.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS) public void registerCoexCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.CoexCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerNetworkRequestMatchCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void registerSoftApCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SoftApCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerTrafficStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.TrafficStateCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void removeAppState(int, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void removeOnWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void removeWifiVerboseLoggingStatusChangedListener(@NonNull android.net.wifi.WifiManager.WifiVerboseLoggingStatusChangedListener);
+    method @RequiresPermission(android.Manifest.permission.RESTART_WIFI_SUBSYSTEM) public void restartWifiSubsystem();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void restoreBackupData(@NonNull byte[]);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public android.net.wifi.SoftApConfiguration restoreSoftApBackupData(@NonNull byte[]);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void restoreSupplicantBackupData(@NonNull byte[], @NonNull byte[]);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveBackupData();
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveSoftApBackupData();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setAutoWakeupEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void setCarrierNetworkOffloadEnabled(int, boolean, boolean);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS) public void setCoexUnsafeChannels(@NonNull java.util.List<android.net.wifi.CoexUnsafeChannel>, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_WIFI_COUNTRY_CODE) public void setDefaultCountryCode(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.WIFI_SET_DEVICE_MOBILITY_STATE) public void setDeviceMobilityState(int);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMacRandomizationSettingPasspointEnabled(@NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_WIFI_COUNTRY_CODE) public void setOverrideCountryCode(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setPasspointMeteredOverride(@NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanAlwaysAvailable(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanThrottleEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public boolean setSoftApConfiguration(@NonNull android.net.wifi.SoftApConfiguration);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setVerboseLoggingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setVerboseLoggingLevel(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public boolean setWifiConnectedNetworkScorer(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.WifiConnectedNetworkScorer);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean setWifiScoringEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsConfiguratorInitiator(@NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeInitiator(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeResponder(@Nullable String, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startLocalOnlyHotspot(@NonNull android.net.wifi.SoftApConfiguration, @Nullable java.util.concurrent.Executor, @Nullable android.net.wifi.WifiManager.LocalOnlyHotspotCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startRestrictingAutoJoinToSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public boolean startScan(android.os.WorkSource);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startSubscriptionProvisioning(@NonNull android.net.wifi.hotspot2.OsuProvider, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.hotspot2.ProvisioningCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean startTetheredHotspot(@Nullable android.net.wifi.SoftApConfiguration);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopEasyConnectSession();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopRestrictingAutoJoinToSubscriptionId();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean stopSoftAp();
+    method @RequiresPermission(android.Manifest.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS) public void unregisterCoexCallback(@NonNull android.net.wifi.WifiManager.CoexCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterNetworkRequestMatchCallback(@NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void unregisterSoftApCallback(@NonNull android.net.wifi.WifiManager.SoftApCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterTrafficStateCallback(@NonNull android.net.wifi.WifiManager.TrafficStateCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void updateInterfaceIpState(@Nullable String, int);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void updateWifiUsabilityScore(int, int, int);
+    field public static final String ACTION_LINK_CONFIGURATION_CHANGED = "android.net.wifi.LINK_CONFIGURATION_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public static final String ACTION_NETWORK_SETTINGS_RESET = "android.net.wifi.action.NETWORK_SETTINGS_RESET";
+    field public static final String ACTION_PASSPOINT_LAUNCH_OSU_VIEW = "android.net.wifi.action.PASSPOINT_LAUNCH_OSU_VIEW";
+    field @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public static final String ACTION_REFRESH_USER_PROVISIONING = "android.net.wifi.action.REFRESH_USER_PROVISIONING";
+    field public static final String ACTION_REQUEST_DISABLE = "android.net.wifi.action.REQUEST_DISABLE";
+    field public static final String ACTION_REQUEST_ENABLE = "android.net.wifi.action.REQUEST_ENABLE";
+    field public static final int CHANGE_REASON_ADDED = 0; // 0x0
+    field public static final int CHANGE_REASON_CONFIG_CHANGE = 2; // 0x2
+    field public static final int CHANGE_REASON_REMOVED = 1; // 0x1
+    field public static final int COEX_RESTRICTION_SOFTAP = 2; // 0x2
+    field public static final int COEX_RESTRICTION_WIFI_AWARE = 4; // 0x4
+    field public static final int COEX_RESTRICTION_WIFI_DIRECT = 1; // 0x1
+    field public static final String CONFIGURED_NETWORKS_CHANGED_ACTION = "android.net.wifi.CONFIGURED_NETWORKS_CHANGE";
+    field public static final int DEVICE_MOBILITY_STATE_HIGH_MVMT = 1; // 0x1
+    field public static final int DEVICE_MOBILITY_STATE_LOW_MVMT = 2; // 0x2
+    field public static final int DEVICE_MOBILITY_STATE_STATIONARY = 3; // 0x3
+    field public static final int DEVICE_MOBILITY_STATE_UNKNOWN = 0; // 0x0
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_BRAINPOOLP256R1 = 3; // 0x3
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_BRAINPOOLP384R1 = 4; // 0x4
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_BRAINPOOLP512R1 = 5; // 0x5
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_PRIME256V1 = 0; // 0x0
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_SECP384R1 = 1; // 0x1
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_SECP521R1 = 2; // 0x2
+    field public static final int EASY_CONNECT_NETWORK_ROLE_AP = 1; // 0x1
+    field public static final int EASY_CONNECT_NETWORK_ROLE_STA = 0; // 0x0
+    field public static final String EXTRA_CHANGE_REASON = "changeReason";
+    field @Deprecated public static final String EXTRA_LINK_PROPERTIES = "android.net.wifi.extra.LINK_PROPERTIES";
+    field @Deprecated public static final String EXTRA_MULTIPLE_NETWORKS_CHANGED = "multipleChanges";
+    field public static final String EXTRA_OSU_NETWORK = "android.net.wifi.extra.OSU_NETWORK";
+    field public static final String EXTRA_PREVIOUS_WIFI_AP_STATE = "previous_wifi_state";
+    field public static final String EXTRA_URL = "android.net.wifi.extra.URL";
+    field public static final String EXTRA_WIFI_AP_FAILURE_REASON = "android.net.wifi.extra.WIFI_AP_FAILURE_REASON";
+    field public static final String EXTRA_WIFI_AP_INTERFACE_NAME = "android.net.wifi.extra.WIFI_AP_INTERFACE_NAME";
+    field public static final String EXTRA_WIFI_AP_MODE = "android.net.wifi.extra.WIFI_AP_MODE";
+    field public static final String EXTRA_WIFI_AP_STATE = "wifi_state";
+    field @Deprecated public static final String EXTRA_WIFI_CONFIGURATION = "wifiConfiguration";
+    field public static final String EXTRA_WIFI_CREDENTIAL_EVENT_TYPE = "et";
+    field public static final String EXTRA_WIFI_CREDENTIAL_SSID = "ssid";
+    field public static final int IFACE_IP_MODE_CONFIGURATION_ERROR = 0; // 0x0
+    field public static final int IFACE_IP_MODE_LOCAL_ONLY = 2; // 0x2
+    field public static final int IFACE_IP_MODE_TETHERED = 1; // 0x1
+    field public static final int IFACE_IP_MODE_UNSPECIFIED = -1; // 0xffffffff
+    field public static final int PASSPOINT_HOME_NETWORK = 0; // 0x0
+    field public static final int PASSPOINT_ROAMING_NETWORK = 1; // 0x1
+    field public static final int SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER = 0; // 0x0
+    field public static final int SAP_CLIENT_BLOCK_REASON_CODE_NO_MORE_STAS = 1; // 0x1
+    field public static final int SAP_START_FAILURE_GENERAL = 0; // 0x0
+    field public static final int SAP_START_FAILURE_NO_CHANNEL = 1; // 0x1
+    field public static final int SAP_START_FAILURE_UNSUPPORTED_CONFIGURATION = 2; // 0x2
+    field public static final int VERBOSE_LOGGING_LEVEL_DISABLED = 0; // 0x0
+    field public static final int VERBOSE_LOGGING_LEVEL_ENABLED = 1; // 0x1
+    field public static final int VERBOSE_LOGGING_LEVEL_ENABLED_SHOW_KEY = 2; // 0x2
+    field public static final String WIFI_AP_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_AP_STATE_CHANGED";
+    field public static final int WIFI_AP_STATE_DISABLED = 11; // 0xb
+    field public static final int WIFI_AP_STATE_DISABLING = 10; // 0xa
+    field public static final int WIFI_AP_STATE_ENABLED = 13; // 0xd
+    field public static final int WIFI_AP_STATE_ENABLING = 12; // 0xc
+    field public static final int WIFI_AP_STATE_FAILED = 14; // 0xe
+    field public static final String WIFI_CREDENTIAL_CHANGED_ACTION = "android.net.wifi.WIFI_CREDENTIAL_CHANGED";
+    field public static final int WIFI_CREDENTIAL_FORGOT = 1; // 0x1
+    field public static final int WIFI_CREDENTIAL_SAVED = 0; // 0x0
+  }
+
+  public static interface WifiManager.ActionListener {
+    method public void onFailure(int);
+    method public void onSuccess();
+  }
+
+  public abstract static class WifiManager.CoexCallback {
+    ctor public WifiManager.CoexCallback();
+    method public abstract void onCoexUnsafeChannelsChanged(@NonNull java.util.List<android.net.wifi.CoexUnsafeChannel>, int);
+  }
+
+  public static interface WifiManager.NetworkRequestMatchCallback {
+    method public default void onAbort();
+    method public default void onMatch(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method public default void onUserSelectionCallbackRegistration(@NonNull android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback);
+    method public default void onUserSelectionConnectFailure(@NonNull android.net.wifi.WifiConfiguration);
+    method public default void onUserSelectionConnectSuccess(@NonNull android.net.wifi.WifiConfiguration);
+  }
+
+  public static interface WifiManager.NetworkRequestUserSelectionCallback {
+    method public default void reject();
+    method public default void select(@NonNull android.net.wifi.WifiConfiguration);
+  }
+
+  public static interface WifiManager.OnWifiActivityEnergyInfoListener {
+    method public void onWifiActivityEnergyInfo(@Nullable android.os.connectivity.WifiActivityEnergyInfo);
+  }
+
+  public static interface WifiManager.OnWifiUsabilityStatsListener {
+    method public void onWifiUsabilityStats(int, boolean, @NonNull android.net.wifi.WifiUsabilityStatsEntry);
+  }
+
+  public static interface WifiManager.ScoreUpdateObserver {
+    method public default void blocklistCurrentBssid(int);
+    method public void notifyScoreUpdate(int, int);
+    method public default void notifyStatusUpdate(int, boolean);
+    method public default void requestNudOperation(int);
+    method public void triggerUpdateOfWifiUsabilityStats(int);
+  }
+
+  public static interface WifiManager.SoftApCallback {
+    method public default void onBlockedClientConnecting(@NonNull android.net.wifi.WifiClient, int);
+    method public default void onCapabilityChanged(@NonNull android.net.wifi.SoftApCapability);
+    method @Deprecated public default void onConnectedClientsChanged(@NonNull java.util.List<android.net.wifi.WifiClient>);
+    method public default void onConnectedClientsChanged(@NonNull android.net.wifi.SoftApInfo, @NonNull java.util.List<android.net.wifi.WifiClient>);
+    method @Deprecated public default void onInfoChanged(@NonNull android.net.wifi.SoftApInfo);
+    method public default void onInfoChanged(@NonNull java.util.List<android.net.wifi.SoftApInfo>);
+    method public default void onStateChanged(int, int);
+  }
+
+  public static interface WifiManager.TrafficStateCallback {
+    method public void onStateChanged(int);
+    field public static final int DATA_ACTIVITY_IN = 1; // 0x1
+    field public static final int DATA_ACTIVITY_INOUT = 3; // 0x3
+    field public static final int DATA_ACTIVITY_NONE = 0; // 0x0
+    field public static final int DATA_ACTIVITY_OUT = 2; // 0x2
+  }
+
+  public static interface WifiManager.WifiConnectedNetworkScorer {
+    method public void onSetScoreUpdateObserver(@NonNull android.net.wifi.WifiManager.ScoreUpdateObserver);
+    method @Deprecated public default void onStart(int);
+    method public default void onStart(@NonNull android.net.wifi.WifiConnectedSessionInfo);
+    method public void onStop(int);
+  }
+
+  public static interface WifiManager.WifiVerboseLoggingStatusChangedListener {
+    method public void onWifiVerboseLoggingStatusChanged(boolean);
+  }
+
+  public final class WifiMigration {
+    method @Nullable public static java.io.InputStream convertAndRetrieveSharedConfigStoreFile(int);
+    method @Nullable public static java.io.InputStream convertAndRetrieveUserConfigStoreFile(int, @NonNull android.os.UserHandle);
+    method @NonNull public static android.net.wifi.WifiMigration.SettingsMigrationData loadFromSettings(@NonNull android.content.Context);
+    method public static void removeSharedConfigStoreFile(int);
+    method public static void removeUserConfigStoreFile(int, @NonNull android.os.UserHandle);
+    field public static final int STORE_FILE_SHARED_GENERAL = 0; // 0x0
+    field public static final int STORE_FILE_SHARED_SOFTAP = 1; // 0x1
+    field public static final int STORE_FILE_USER_GENERAL = 2; // 0x2
+    field public static final int STORE_FILE_USER_NETWORK_SUGGESTIONS = 3; // 0x3
+  }
+
+  public static final class WifiMigration.SettingsMigrationData implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getP2pDeviceName();
+    method public boolean isP2pFactoryResetPending();
+    method public boolean isScanAlwaysAvailable();
+    method public boolean isScanThrottleEnabled();
+    method public boolean isSoftApTimeoutEnabled();
+    method public boolean isVerboseLoggingEnabled();
+    method public boolean isWakeUpEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiMigration.SettingsMigrationData> CREATOR;
+  }
+
+  public static final class WifiMigration.SettingsMigrationData.Builder {
+    ctor public WifiMigration.SettingsMigrationData.Builder();
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData build();
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setP2pDeviceName(@Nullable String);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setP2pFactoryResetPending(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setScanAlwaysAvailable(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setScanThrottleEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setSoftApTimeoutEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setVerboseLoggingEnabled(boolean);
+    method @NonNull public android.net.wifi.WifiMigration.SettingsMigrationData.Builder setWakeUpEnabled(boolean);
+  }
+
+  @Deprecated public class WifiNetworkConnectionStatistics implements android.os.Parcelable {
+    ctor @Deprecated public WifiNetworkConnectionStatistics(int, int);
+    ctor @Deprecated public WifiNetworkConnectionStatistics();
+    ctor @Deprecated public WifiNetworkConnectionStatistics(android.net.wifi.WifiNetworkConnectionStatistics);
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkConnectionStatistics> CREATOR;
+    field @Deprecated public int numConnection;
+    field @Deprecated public int numUsage;
+  }
+
+  public final class WifiNetworkSuggestion implements android.os.Parcelable {
+    method public int getCarrierId();
+    method @NonNull public android.net.wifi.WifiConfiguration getWifiConfiguration();
+    method public boolean isOemPaid();
+    method public boolean isOemPrivate();
+  }
+
+  public static final class WifiNetworkSuggestion.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public android.net.wifi.WifiNetworkSuggestion.Builder setCarrierId(int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPaid(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPrivate(boolean);
+  }
+
+  public class WifiScanner {
+    method @Deprecated public void configureWifiChange(int, int, int, int, int, android.net.wifi.WifiScanner.BssidInfo[]);
+    method @Deprecated public void configureWifiChange(android.net.wifi.WifiScanner.WifiChangeSettings);
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<java.lang.Integer> getAvailableChannels(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean getScanResults();
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<android.net.wifi.ScanResult> getSingleScanResults();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void registerScanListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiScanner.ScanListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void setScanningEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener, android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener, android.os.WorkSource);
+    method @Deprecated public void startTrackingBssids(android.net.wifi.WifiScanner.BssidInfo[], int, android.net.wifi.WifiScanner.BssidListener);
+    method @Deprecated public void startTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void stopBackgroundScan(android.net.wifi.WifiScanner.ScanListener);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void stopScan(android.net.wifi.WifiScanner.ScanListener);
+    method @Deprecated public void stopTrackingBssids(android.net.wifi.WifiScanner.BssidListener);
+    method @Deprecated public void stopTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener);
+    method public void unregisterScanListener(@NonNull android.net.wifi.WifiScanner.ScanListener);
+    field public static final int MAX_SCAN_PERIOD_MS = 1024000; // 0xfa000
+    field public static final int MIN_SCAN_PERIOD_MS = 1000; // 0x3e8
+    field public static final int REASON_DUPLICATE_REQEUST = -5; // 0xfffffffb
+    field public static final int REASON_INVALID_LISTENER = -2; // 0xfffffffe
+    field public static final int REASON_INVALID_REQUEST = -3; // 0xfffffffd
+    field public static final int REASON_NOT_AUTHORIZED = -4; // 0xfffffffc
+    field public static final int REASON_SUCCEEDED = 0; // 0x0
+    field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff
+    field @Deprecated public static final int REPORT_EVENT_AFTER_BUFFER_FULL = 0; // 0x0
+    field public static final int REPORT_EVENT_AFTER_EACH_SCAN = 1; // 0x1
+    field public static final int REPORT_EVENT_FULL_SCAN_RESULT = 2; // 0x2
+    field public static final int REPORT_EVENT_NO_BATCH = 4; // 0x4
+    field public static final int SCAN_TYPE_HIGH_ACCURACY = 2; // 0x2
+    field public static final int SCAN_TYPE_LOW_LATENCY = 0; // 0x0
+    field public static final int SCAN_TYPE_LOW_POWER = 1; // 0x1
+    field public static final int WIFI_BAND_24_5_6_GHZ = 11; // 0xb
+    field public static final int WIFI_BAND_24_5_WITH_DFS_6_GHZ = 15; // 0xf
+    field public static final int WIFI_BAND_24_GHZ = 1; // 0x1
+    field public static final int WIFI_BAND_5_GHZ = 2; // 0x2
+    field public static final int WIFI_BAND_5_GHZ_DFS_ONLY = 4; // 0x4
+    field public static final int WIFI_BAND_5_GHZ_WITH_DFS = 6; // 0x6
+    field public static final int WIFI_BAND_60_GHZ = 16; // 0x10
+    field public static final int WIFI_BAND_6_GHZ = 8; // 0x8
+    field public static final int WIFI_BAND_BOTH = 3; // 0x3
+    field public static final int WIFI_BAND_BOTH_WITH_DFS = 7; // 0x7
+    field public static final int WIFI_BAND_UNSPECIFIED = 0; // 0x0
+    field public static final int WIFI_RNR_ENABLED = 1; // 0x1
+    field public static final int WIFI_RNR_ENABLED_IF_WIFI_BAND_6_GHZ_SCANNED = 0; // 0x0
+    field public static final int WIFI_RNR_NOT_NEEDED = 2; // 0x2
+  }
+
+  public static interface WifiScanner.ActionListener {
+    method public void onFailure(int, String);
+    method public void onSuccess();
+  }
+
+  @Deprecated public static class WifiScanner.BssidInfo {
+    ctor @Deprecated public WifiScanner.BssidInfo();
+    field @Deprecated public String bssid;
+    field @Deprecated public int frequencyHint;
+    field @Deprecated public int high;
+    field @Deprecated public int low;
+  }
+
+  @Deprecated public static interface WifiScanner.BssidListener extends android.net.wifi.WifiScanner.ActionListener {
+    method @Deprecated public void onFound(android.net.wifi.ScanResult[]);
+    method @Deprecated public void onLost(android.net.wifi.ScanResult[]);
+  }
+
+  public static class WifiScanner.ChannelSpec {
+    ctor public WifiScanner.ChannelSpec(int);
+    field public int frequency;
+  }
+
+  @Deprecated public static class WifiScanner.HotlistSettings implements android.os.Parcelable {
+    ctor @Deprecated public WifiScanner.HotlistSettings();
+    field @Deprecated public int apLostThreshold;
+    field @Deprecated public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos;
+  }
+
+  public static class WifiScanner.ParcelableScanData implements android.os.Parcelable {
+    ctor public WifiScanner.ParcelableScanData(android.net.wifi.WifiScanner.ScanData[]);
+    method public android.net.wifi.WifiScanner.ScanData[] getResults();
+    field public android.net.wifi.WifiScanner.ScanData[] mResults;
+  }
+
+  public static class WifiScanner.ParcelableScanResults implements android.os.Parcelable {
+    ctor public WifiScanner.ParcelableScanResults(android.net.wifi.ScanResult[]);
+    method public android.net.wifi.ScanResult[] getResults();
+    field public android.net.wifi.ScanResult[] mResults;
+  }
+
+  public static class WifiScanner.ScanData implements android.os.Parcelable {
+    ctor public WifiScanner.ScanData(int, int, android.net.wifi.ScanResult[]);
+    ctor public WifiScanner.ScanData(android.net.wifi.WifiScanner.ScanData);
+    method public int getFlags();
+    method public int getId();
+    method public android.net.wifi.ScanResult[] getResults();
+    method public int getScannedBands();
+  }
+
+  public static interface WifiScanner.ScanListener extends android.net.wifi.WifiScanner.ActionListener {
+    method public void onFullResult(android.net.wifi.ScanResult);
+    method @Deprecated public void onPeriodChanged(int);
+    method public void onResults(android.net.wifi.WifiScanner.ScanData[]);
+  }
+
+  public static class WifiScanner.ScanSettings implements android.os.Parcelable {
+    ctor public WifiScanner.ScanSettings();
+    method public int getRnrSetting();
+    method public boolean is6GhzPscOnlyEnabled();
+    method public void set6GhzPscOnlyEnabled(boolean);
+    method public void setRnrSetting(int);
+    field public int band;
+    field public android.net.wifi.WifiScanner.ChannelSpec[] channels;
+    field @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public final java.util.List<android.net.wifi.WifiScanner.ScanSettings.HiddenNetwork> hiddenNetworks;
+    field public boolean hideFromAppOps;
+    field public boolean ignoreLocationSettings;
+    field @Deprecated public int maxPeriodInMs;
+    field @Deprecated public int maxScansToCache;
+    field @Deprecated public int numBssidsPerScan;
+    field @Deprecated public int periodInMs;
+    field @Deprecated public int reportEvents;
+    field @Deprecated public int stepCount;
+    field @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public int type;
+  }
+
+  public static class WifiScanner.ScanSettings.HiddenNetwork {
+    ctor public WifiScanner.ScanSettings.HiddenNetwork(@NonNull String);
+    field @NonNull public final String ssid;
+  }
+
+  @Deprecated public static interface WifiScanner.WifiChangeListener extends android.net.wifi.WifiScanner.ActionListener {
+    method @Deprecated public void onChanging(android.net.wifi.ScanResult[]);
+    method @Deprecated public void onQuiescence(android.net.wifi.ScanResult[]);
+  }
+
+  @Deprecated public static class WifiScanner.WifiChangeSettings implements android.os.Parcelable {
+    ctor @Deprecated public WifiScanner.WifiChangeSettings();
+    field @Deprecated public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos;
+    field @Deprecated public int lostApSampleSize;
+    field @Deprecated public int minApsBreachingThreshold;
+    field @Deprecated public int periodInMs;
+    field @Deprecated public int rssiSampleSize;
+    field @Deprecated public int unchangedSampleSize;
+  }
+
+  public final class WifiUsabilityStatsEntry implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCellularDataNetworkType();
+    method public int getCellularSignalStrengthDb();
+    method public int getCellularSignalStrengthDbm();
+    method @IntRange(from=0, to=255) public int getChannelUtilizationRatio();
+    method @NonNull public android.net.wifi.WifiUsabilityStatsEntry.ContentionTimeStats getContentionTimeStats(int);
+    method public int getLinkSpeedMbps();
+    method public int getProbeElapsedTimeSinceLastUpdateMillis();
+    method public int getProbeMcsRateSinceLastUpdate();
+    method public int getProbeStatusSinceLastUpdate();
+    method @NonNull public java.util.List<android.net.wifi.WifiUsabilityStatsEntry.RateStats> getRateStats();
+    method public int getRssi();
+    method public int getRxLinkSpeedMbps();
+    method @IntRange(from=0, to=100) public int getTimeSliceDutyCycleInPercent();
+    method public long getTimeStampMillis();
+    method public long getTotalBackgroundScanTimeMillis();
+    method public long getTotalBeaconRx();
+    method public long getTotalCcaBusyFreqTimeMillis();
+    method public long getTotalHotspot2ScanTimeMillis();
+    method public long getTotalNanScanTimeMillis();
+    method public long getTotalPnoScanTimeMillis();
+    method public long getTotalRadioOnFreqTimeMillis();
+    method public long getTotalRadioOnTimeMillis();
+    method public long getTotalRadioRxTimeMillis();
+    method public long getTotalRadioTxTimeMillis();
+    method public long getTotalRoamScanTimeMillis();
+    method public long getTotalRxSuccess();
+    method public long getTotalScanTimeMillis();
+    method public long getTotalTxBad();
+    method public long getTotalTxRetries();
+    method public long getTotalTxSuccess();
+    method @NonNull public java.util.List<android.net.wifi.WifiUsabilityStatsEntry.RadioStats> getWifiLinkLayerRadioStats();
+    method public boolean isCellularDataAvailable();
+    method public boolean isSameRegisteredCell();
+    method public boolean isThroughputSufficient();
+    method public boolean isWifiScoringEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry> CREATOR;
+    field public static final int NUM_WME_ACCESS_CATEGORIES = 4; // 0x4
+    field public static final int PROBE_STATUS_FAILURE = 3; // 0x3
+    field public static final int PROBE_STATUS_NO_PROBE = 1; // 0x1
+    field public static final int PROBE_STATUS_SUCCESS = 2; // 0x2
+    field public static final int PROBE_STATUS_UNKNOWN = 0; // 0x0
+    field public static final int WIFI_BANDWIDTH_10_MHZ = 6; // 0x6
+    field public static final int WIFI_BANDWIDTH_160_MHZ = 3; // 0x3
+    field public static final int WIFI_BANDWIDTH_20_MHZ = 0; // 0x0
+    field public static final int WIFI_BANDWIDTH_40_MHZ = 1; // 0x1
+    field public static final int WIFI_BANDWIDTH_5_MHZ = 5; // 0x5
+    field public static final int WIFI_BANDWIDTH_80P80_MHZ = 4; // 0x4
+    field public static final int WIFI_BANDWIDTH_80_MHZ = 2; // 0x2
+    field public static final int WIFI_BANDWIDTH_INVALID = -1; // 0xffffffff
+    field public static final int WIFI_PREAMBLE_CCK = 1; // 0x1
+    field public static final int WIFI_PREAMBLE_HE = 5; // 0x5
+    field public static final int WIFI_PREAMBLE_HT = 2; // 0x2
+    field public static final int WIFI_PREAMBLE_INVALID = -1; // 0xffffffff
+    field public static final int WIFI_PREAMBLE_OFDM = 0; // 0x0
+    field public static final int WIFI_PREAMBLE_VHT = 3; // 0x3
+    field public static final int WIFI_SPATIAL_STREAMS_FOUR = 4; // 0x4
+    field public static final int WIFI_SPATIAL_STREAMS_INVALID = -1; // 0xffffffff
+    field public static final int WIFI_SPATIAL_STREAMS_ONE = 1; // 0x1
+    field public static final int WIFI_SPATIAL_STREAMS_THREE = 3; // 0x3
+    field public static final int WIFI_SPATIAL_STREAMS_TWO = 2; // 0x2
+    field public static final int WME_ACCESS_CATEGORY_BE = 0; // 0x0
+    field public static final int WME_ACCESS_CATEGORY_BK = 1; // 0x1
+    field public static final int WME_ACCESS_CATEGORY_VI = 2; // 0x2
+    field public static final int WME_ACCESS_CATEGORY_VO = 3; // 0x3
+  }
+
+  public static final class WifiUsabilityStatsEntry.ContentionTimeStats implements android.os.Parcelable {
+    ctor public WifiUsabilityStatsEntry.ContentionTimeStats(long, long, long, long);
+    method public int describeContents();
+    method public long getContentionNumSamples();
+    method public long getContentionTimeAvgMicros();
+    method public long getContentionTimeMaxMicros();
+    method public long getContentionTimeMinMicros();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry.ContentionTimeStats> CREATOR;
+  }
+
+  public static final class WifiUsabilityStatsEntry.RadioStats implements android.os.Parcelable {
+    ctor public WifiUsabilityStatsEntry.RadioStats(int, long, long, long, long, long, long, long, long, long);
+    method public int describeContents();
+    method public long getRadioId();
+    method public long getTotalBackgroundScanTimeMillis();
+    method public long getTotalHotspot2ScanTimeMillis();
+    method public long getTotalNanScanTimeMillis();
+    method public long getTotalPnoScanTimeMillis();
+    method public long getTotalRadioOnTimeMillis();
+    method public long getTotalRadioRxTimeMillis();
+    method public long getTotalRadioTxTimeMillis();
+    method public long getTotalRoamScanTimeMillis();
+    method public long getTotalScanTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry.RadioStats> CREATOR;
+  }
+
+  public static final class WifiUsabilityStatsEntry.RateStats implements android.os.Parcelable {
+    ctor public WifiUsabilityStatsEntry.RateStats(int, int, int, int, int, int, int, int, int);
+    method public int describeContents();
+    method public int getBandwidthInMhz();
+    method public int getBitRateInKbps();
+    method public int getMpduLost();
+    method public int getNumberOfSpatialStreams();
+    method public int getPreamble();
+    method public int getRateMcsIdx();
+    method public int getRetries();
+    method public int getRxMpdu();
+    method public int getTxMpdu();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry.RateStats> CREATOR;
+  }
+
+}
+
+package android.net.wifi.aware {
+
+  public class DiscoverySession implements java.lang.AutoCloseable {
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPmk(@NonNull android.net.wifi.aware.PeerHandle, @NonNull byte[]);
+  }
+
+  public class WifiAwareManager {
+    method public void enableInstantCommunicationMode(boolean);
+  }
+
+  public class WifiAwareSession implements java.lang.AutoCloseable {
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPmk(int, @NonNull byte[], @NonNull byte[]);
+  }
+
+}
+
+package android.net.wifi.hotspot2 {
+
+  public final class OsuProvider implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getFriendlyName();
+    method @Nullable public android.net.Uri getServerUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.OsuProvider> CREATOR;
+  }
+
+  public final class PasspointConfiguration implements android.os.Parcelable {
+    method public int getMeteredOverride();
+    method public boolean isAutojoinEnabled();
+    method public boolean isMacRandomizationEnabled();
+  }
+
+  public abstract class ProvisioningCallback {
+    ctor public ProvisioningCallback();
+    method public abstract void onProvisioningComplete();
+    method public abstract void onProvisioningFailure(int);
+    method public abstract void onProvisioningStatus(int);
+    field public static final int OSU_FAILURE_ADD_PASSPOINT_CONFIGURATION = 22; // 0x16
+    field public static final int OSU_FAILURE_AP_CONNECTION = 1; // 0x1
+    field public static final int OSU_FAILURE_INVALID_URL_FORMAT_FOR_OSU = 8; // 0x8
+    field public static final int OSU_FAILURE_NO_AAA_SERVER_TRUST_ROOT_NODE = 17; // 0x11
+    field public static final int OSU_FAILURE_NO_AAA_TRUST_ROOT_CERTIFICATE = 21; // 0x15
+    field public static final int OSU_FAILURE_NO_OSU_ACTIVITY_FOUND = 14; // 0xe
+    field public static final int OSU_FAILURE_NO_POLICY_SERVER_TRUST_ROOT_NODE = 19; // 0x13
+    field public static final int OSU_FAILURE_NO_PPS_MO = 16; // 0x10
+    field public static final int OSU_FAILURE_NO_REMEDIATION_SERVER_TRUST_ROOT_NODE = 18; // 0x12
+    field public static final int OSU_FAILURE_OSU_PROVIDER_NOT_FOUND = 23; // 0x17
+    field public static final int OSU_FAILURE_PROVISIONING_ABORTED = 6; // 0x6
+    field public static final int OSU_FAILURE_PROVISIONING_NOT_AVAILABLE = 7; // 0x7
+    field public static final int OSU_FAILURE_RETRIEVE_TRUST_ROOT_CERTIFICATES = 20; // 0x14
+    field public static final int OSU_FAILURE_SERVER_CONNECTION = 3; // 0x3
+    field public static final int OSU_FAILURE_SERVER_URL_INVALID = 2; // 0x2
+    field public static final int OSU_FAILURE_SERVER_VALIDATION = 4; // 0x4
+    field public static final int OSU_FAILURE_SERVICE_PROVIDER_VERIFICATION = 5; // 0x5
+    field public static final int OSU_FAILURE_SOAP_MESSAGE_EXCHANGE = 11; // 0xb
+    field public static final int OSU_FAILURE_START_REDIRECT_LISTENER = 12; // 0xc
+    field public static final int OSU_FAILURE_TIMED_OUT_REDIRECT_LISTENER = 13; // 0xd
+    field public static final int OSU_FAILURE_UNEXPECTED_COMMAND_TYPE = 9; // 0x9
+    field public static final int OSU_FAILURE_UNEXPECTED_SOAP_MESSAGE_STATUS = 15; // 0xf
+    field public static final int OSU_FAILURE_UNEXPECTED_SOAP_MESSAGE_TYPE = 10; // 0xa
+    field public static final int OSU_STATUS_AP_CONNECTED = 2; // 0x2
+    field public static final int OSU_STATUS_AP_CONNECTING = 1; // 0x1
+    field public static final int OSU_STATUS_INIT_SOAP_EXCHANGE = 6; // 0x6
+    field public static final int OSU_STATUS_REDIRECT_RESPONSE_RECEIVED = 8; // 0x8
+    field public static final int OSU_STATUS_RETRIEVING_TRUST_ROOT_CERTS = 11; // 0xb
+    field public static final int OSU_STATUS_SECOND_SOAP_EXCHANGE = 9; // 0x9
+    field public static final int OSU_STATUS_SERVER_CONNECTED = 5; // 0x5
+    field public static final int OSU_STATUS_SERVER_CONNECTING = 3; // 0x3
+    field public static final int OSU_STATUS_SERVER_VALIDATED = 4; // 0x4
+    field public static final int OSU_STATUS_THIRD_SOAP_EXCHANGE = 10; // 0xa
+    field public static final int OSU_STATUS_WAITING_FOR_REDIRECT_RESPONSE = 7; // 0x7
+  }
+
+}
+
+package android.net.wifi.nl80211 {
+
+  public final class DeviceWiphyCapabilities implements android.os.Parcelable {
+    ctor public DeviceWiphyCapabilities();
+    method public int describeContents();
+    method public int getMaxNumberRxSpatialStreams();
+    method public int getMaxNumberTxSpatialStreams();
+    method public boolean isChannelWidthSupported(int);
+    method public boolean isWifiStandardSupported(int);
+    method public void setWifiStandardSupport(int, boolean);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.DeviceWiphyCapabilities> CREATOR;
+  }
+
+  public final class NativeScanResult implements android.os.Parcelable {
+    ctor public NativeScanResult();
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getBssid();
+    method public int getCapabilities();
+    method public int getFrequencyMhz();
+    method @NonNull public byte[] getInformationElements();
+    method @NonNull public java.util.List<android.net.wifi.nl80211.RadioChainInfo> getRadioChainInfos();
+    method public int getSignalMbm();
+    method @NonNull public byte[] getSsid();
+    method public long getTsf();
+    method public boolean isAssociated();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int BSS_CAPABILITY_APSD = 2048; // 0x800
+    field public static final int BSS_CAPABILITY_CF_POLLABLE = 4; // 0x4
+    field public static final int BSS_CAPABILITY_CF_POLL_REQUEST = 8; // 0x8
+    field public static final int BSS_CAPABILITY_CHANNEL_AGILITY = 128; // 0x80
+    field public static final int BSS_CAPABILITY_DELAYED_BLOCK_ACK = 16384; // 0x4000
+    field public static final int BSS_CAPABILITY_DMG_ESS = 3; // 0x3
+    field public static final int BSS_CAPABILITY_DMG_IBSS = 1; // 0x1
+    field public static final int BSS_CAPABILITY_DSSS_OFDM = 8192; // 0x2000
+    field public static final int BSS_CAPABILITY_ESS = 1; // 0x1
+    field public static final int BSS_CAPABILITY_IBSS = 2; // 0x2
+    field public static final int BSS_CAPABILITY_IMMEDIATE_BLOCK_ACK = 32768; // 0x8000
+    field public static final int BSS_CAPABILITY_PBCC = 64; // 0x40
+    field public static final int BSS_CAPABILITY_PRIVACY = 16; // 0x10
+    field public static final int BSS_CAPABILITY_QOS = 512; // 0x200
+    field public static final int BSS_CAPABILITY_RADIO_MANAGEMENT = 4096; // 0x1000
+    field public static final int BSS_CAPABILITY_SHORT_PREAMBLE = 32; // 0x20
+    field public static final int BSS_CAPABILITY_SHORT_SLOT_TIME = 1024; // 0x400
+    field public static final int BSS_CAPABILITY_SPECTRUM_MANAGEMENT = 256; // 0x100
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.NativeScanResult> CREATOR;
+  }
+
+  public final class NativeWifiClient implements android.os.Parcelable {
+    ctor public NativeWifiClient(@Nullable android.net.MacAddress);
+    method public int describeContents();
+    method @Nullable public android.net.MacAddress getMacAddress();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.NativeWifiClient> CREATOR;
+  }
+
+  public final class PnoNetwork implements android.os.Parcelable {
+    ctor public PnoNetwork();
+    method public int describeContents();
+    method @NonNull public int[] getFrequenciesMhz();
+    method @NonNull public byte[] getSsid();
+    method public boolean isHidden();
+    method public void setFrequenciesMhz(@NonNull int[]);
+    method public void setHidden(boolean);
+    method public void setSsid(@NonNull byte[]);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.PnoNetwork> CREATOR;
+  }
+
+  public final class PnoSettings implements android.os.Parcelable {
+    ctor public PnoSettings();
+    method public int describeContents();
+    method public long getIntervalMillis();
+    method public int getMin2gRssiDbm();
+    method public int getMin5gRssiDbm();
+    method public int getMin6gRssiDbm();
+    method @NonNull public java.util.List<android.net.wifi.nl80211.PnoNetwork> getPnoNetworks();
+    method public void setIntervalMillis(long);
+    method public void setMin2gRssiDbm(int);
+    method public void setMin5gRssiDbm(int);
+    method public void setMin6gRssiDbm(int);
+    method public void setPnoNetworks(@NonNull java.util.List<android.net.wifi.nl80211.PnoNetwork>);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.PnoSettings> CREATOR;
+  }
+
+  public final class RadioChainInfo implements android.os.Parcelable {
+    ctor public RadioChainInfo(int, int);
+    method public int describeContents();
+    method public int getChainId();
+    method public int getLevelDbm();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.nl80211.RadioChainInfo> CREATOR;
+  }
+
+  public class WifiNl80211Manager {
+    method public void abortScan(@NonNull String);
+    method public void enableVerboseLogging(boolean);
+    method @NonNull public int[] getChannelsMhzForBand(int);
+    method @Nullable public android.net.wifi.nl80211.DeviceWiphyCapabilities getDeviceWiphyCapabilities(@NonNull String);
+    method @NonNull public java.util.List<android.net.wifi.nl80211.NativeScanResult> getScanResults(@NonNull String, int);
+    method @Nullable public android.net.wifi.nl80211.WifiNl80211Manager.TxPacketCounters getTxPacketCounters(@NonNull String);
+    method @Nullable public static android.net.wifi.nl80211.WifiNl80211Manager.OemSecurityType parseOemSecurityTypeElement(int, int, @NonNull byte[]);
+    method @Deprecated public boolean registerApCallback(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.SoftApCallback);
+    method public boolean registerCountryCodeChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.CountryCodeChangedListener);
+    method public void sendMgmtFrame(@NonNull String, @NonNull byte[], int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.SendMgmtFrameCallback);
+    method public void setOnServiceDeadCallback(@NonNull Runnable);
+    method public boolean setupInterfaceForClientMode(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.ScanEventCallback, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.ScanEventCallback);
+    method public boolean setupInterfaceForSoftApMode(@NonNull String);
+    method @Nullable public android.net.wifi.nl80211.WifiNl80211Manager.SignalPollResult signalPoll(@NonNull String);
+    method public boolean startPnoScan(@NonNull String, @NonNull android.net.wifi.nl80211.PnoSettings, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.nl80211.WifiNl80211Manager.PnoScanRequestCallback);
+    method @Deprecated public boolean startScan(@NonNull String, int, @Nullable java.util.Set<java.lang.Integer>, @Nullable java.util.List<byte[]>);
+    method public boolean startScan(@NonNull String, int, @Nullable java.util.Set<java.lang.Integer>, @Nullable java.util.List<byte[]>, @Nullable android.os.Bundle);
+    method public boolean stopPnoScan(@NonNull String);
+    method public boolean tearDownClientInterface(@NonNull String);
+    method public boolean tearDownInterfaces();
+    method public boolean tearDownSoftApInterface(@NonNull String);
+    method public void unregisterCountryCodeChangedListener(@NonNull android.net.wifi.nl80211.WifiNl80211Manager.CountryCodeChangedListener);
+    field public static final String SCANNING_PARAM_ENABLE_6GHZ_RNR = "android.net.wifi.nl80211.SCANNING_PARAM_ENABLE_6GHZ_RNR";
+    field public static final int SCAN_TYPE_PNO_SCAN = 1; // 0x1
+    field public static final int SCAN_TYPE_SINGLE_SCAN = 0; // 0x0
+    field public static final int SEND_MGMT_FRAME_ERROR_ALREADY_STARTED = 5; // 0x5
+    field public static final int SEND_MGMT_FRAME_ERROR_MCS_UNSUPPORTED = 2; // 0x2
+    field public static final int SEND_MGMT_FRAME_ERROR_NO_ACK = 3; // 0x3
+    field public static final int SEND_MGMT_FRAME_ERROR_TIMEOUT = 4; // 0x4
+    field public static final int SEND_MGMT_FRAME_ERROR_UNKNOWN = 1; // 0x1
+  }
+
+  public static interface WifiNl80211Manager.CountryCodeChangedListener {
+    method public void onCountryCodeChanged(@NonNull String);
+  }
+
+  public static class WifiNl80211Manager.OemSecurityType {
+    ctor public WifiNl80211Manager.OemSecurityType(int, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, int);
+    field public final int groupCipher;
+    field @NonNull public final java.util.List<java.lang.Integer> keyManagement;
+    field @NonNull public final java.util.List<java.lang.Integer> pairwiseCipher;
+    field public final int protocol;
+  }
+
+  public static interface WifiNl80211Manager.PnoScanRequestCallback {
+    method public void onPnoRequestFailed();
+    method public void onPnoRequestSucceeded();
+  }
+
+  public static interface WifiNl80211Manager.ScanEventCallback {
+    method public void onScanFailed();
+    method public void onScanResultReady();
+  }
+
+  public static interface WifiNl80211Manager.SendMgmtFrameCallback {
+    method public void onAck(int);
+    method public void onFailure(int);
+  }
+
+  public static class WifiNl80211Manager.SignalPollResult {
+    field public final int associationFrequencyMHz;
+    field public final int currentRssiDbm;
+    field public final int rxBitrateMbps;
+    field public final int txBitrateMbps;
+  }
+
+  @Deprecated public static interface WifiNl80211Manager.SoftApCallback {
+    method @Deprecated public void onConnectedClientsChanged(@NonNull android.net.wifi.nl80211.NativeWifiClient, boolean);
+    method @Deprecated public void onFailure();
+    method @Deprecated public void onSoftApChannelSwitched(int, int);
+  }
+
+  public static class WifiNl80211Manager.TxPacketCounters {
+    field public final int txPacketFailed;
+    field public final int txPacketSucceeded;
+  }
+
+}
+
+package android.net.wifi.p2p {
+
+  public final class WifiP2pGroupList implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.wifi.p2p.WifiP2pGroup> getGroupList();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroupList> CREATOR;
+  }
+
+  public class WifiP2pManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void deletePersistentGroup(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void factoryReset(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public void requestPersistentGroupInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setDeviceName(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull String, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY) public void setMiracastMode(int);
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY) public void setWfdInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pWfdInfo, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setWifiP2pChannels(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void startListening(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void stopListening(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    field public static final String ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED = "android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED";
+    field public static final int MIRACAST_DISABLED = 0; // 0x0
+    field public static final int MIRACAST_SINK = 2; // 0x2
+    field public static final int MIRACAST_SOURCE = 1; // 0x1
+  }
+
+  public static interface WifiP2pManager.PersistentGroupInfoListener {
+    method public void onPersistentGroupInfoAvailable(@NonNull android.net.wifi.p2p.WifiP2pGroupList);
+  }
+
+}
+
+package android.net.wifi.rtt {
+
+  public final class RangingRequest implements android.os.Parcelable {
+    method @NonNull public java.util.List<android.net.wifi.rtt.ResponderConfig> getRttResponders();
+  }
+
+  public static final class RangingRequest.Builder {
+    method public android.net.wifi.rtt.RangingRequest.Builder addResponder(@NonNull android.net.wifi.rtt.ResponderConfig);
+  }
+
+  public final class RangingResult implements android.os.Parcelable {
+    method @NonNull public byte[] getLci();
+    method @NonNull public byte[] getLcr();
+  }
+
+  public final class ResponderConfig implements android.os.Parcelable {
+    ctor public ResponderConfig(@NonNull android.net.MacAddress, int, boolean, int, int, int, int, int);
+    ctor public ResponderConfig(@NonNull android.net.wifi.aware.PeerHandle, int, boolean, int, int, int, int, int);
+    method public int describeContents();
+    method public static android.net.wifi.rtt.ResponderConfig fromScanResult(android.net.wifi.ScanResult);
+    method public static android.net.wifi.rtt.ResponderConfig fromWifiAwarePeerHandleWithDefaults(android.net.wifi.aware.PeerHandle);
+    method public static android.net.wifi.rtt.ResponderConfig fromWifiAwarePeerMacAddressWithDefaults(android.net.MacAddress);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CHANNEL_WIDTH_160MHZ = 3; // 0x3
+    field public static final int CHANNEL_WIDTH_20MHZ = 0; // 0x0
+    field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1
+    field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2
+    field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.ResponderConfig> CREATOR;
+    field public static final int PREAMBLE_HE = 3; // 0x3
+    field public static final int PREAMBLE_HT = 1; // 0x1
+    field public static final int PREAMBLE_LEGACY = 0; // 0x0
+    field public static final int PREAMBLE_VHT = 2; // 0x2
+    field public static final int RESPONDER_AP = 0; // 0x0
+    field public static final int RESPONDER_AWARE = 4; // 0x4
+    field public static final int RESPONDER_P2P_CLIENT = 3; // 0x3
+    field public static final int RESPONDER_P2P_GO = 2; // 0x2
+    field public static final int RESPONDER_STA = 1; // 0x1
+    field public final int centerFreq0;
+    field public final int centerFreq1;
+    field public final int channelWidth;
+    field public final int frequency;
+    field public final android.net.MacAddress macAddress;
+    field public final android.net.wifi.aware.PeerHandle peerHandle;
+    field public final int preamble;
+    field public final int responderType;
+    field public final boolean supports80211mc;
+  }
+
+  public final class ResponderLocation implements android.os.Parcelable {
+    method public boolean getExtraInfoOnAssociationIndication();
+  }
+
+  public class WifiRttManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE}) public void cancelRanging(@Nullable android.os.WorkSource);
+    method @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.ACCESS_WIFI_STATE}) public void startRanging(@Nullable android.os.WorkSource, @NonNull android.net.wifi.rtt.RangingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.rtt.RangingResultCallback);
+  }
+
+}
+
+package android.nfc {
+
+  public final class NfcAdapter {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean addNfcUnlockHandler(android.nfc.NfcAdapter.NfcUnlockHandler, String[]);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean disable();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean disable(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean disableNdefPush();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enable();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enableNdefPush();
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean enableSecureNfc(boolean);
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean isControllerAlwaysOn();
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean isControllerAlwaysOnSupported();
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public void registerControllerAlwaysOnListener(@NonNull java.util.concurrent.Executor, @NonNull android.nfc.NfcAdapter.ControllerAlwaysOnListener);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean removeNfcUnlockHandler(android.nfc.NfcAdapter.NfcUnlockHandler);
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public boolean setControllerAlwaysOn(boolean);
+    method public void setNdefPushMessage(android.nfc.NdefMessage, android.app.Activity, int);
+    method @RequiresPermission(android.Manifest.permission.NFC_SET_CONTROLLER_ALWAYS_ON) public void unregisterControllerAlwaysOnListener(@NonNull android.nfc.NfcAdapter.ControllerAlwaysOnListener);
+    field public static final int FLAG_NDEF_PUSH_NO_CONFIRM = 1; // 0x1
+  }
+
+  public static interface NfcAdapter.ControllerAlwaysOnListener {
+    method public void onControllerAlwaysOnChanged(boolean);
+  }
+
+  public static interface NfcAdapter.NfcUnlockHandler {
+    method public boolean onUnlockAttempted(android.nfc.Tag);
+  }
+
+}
+
+package android.os {
+
+  public class BatteryManager {
+    method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public boolean setChargingStateUpdateDelayMillis(int);
+    field public static final String EXTRA_EVENTS = "android.os.extra.EVENTS";
+    field public static final String EXTRA_EVENT_TIMESTAMP = "android.os.extra.EVENT_TIMESTAMP";
+  }
+
+  public final class BatterySaverPolicyConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public float getAdjustBrightnessFactor();
+    method public boolean getAdvertiseIsEnabled();
+    method public boolean getDeferFullBackup();
+    method public boolean getDeferKeyValueBackup();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.String> getDeviceSpecificSettings();
+    method public boolean getDisableAnimation();
+    method public boolean getDisableAod();
+    method public boolean getDisableLaunchBoost();
+    method public boolean getDisableOptionalSensors();
+    method @Deprecated public boolean getDisableSoundTrigger();
+    method public boolean getDisableVibration();
+    method public boolean getEnableAdjustBrightness();
+    method public boolean getEnableDataSaver();
+    method public boolean getEnableFirewall();
+    method public boolean getEnableNightMode();
+    method public boolean getEnableQuickDoze();
+    method public boolean getForceAllAppsStandby();
+    method public boolean getForceBackgroundCheck();
+    method public int getLocationMode();
+    method public int getSoundTriggerMode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.BatterySaverPolicyConfig> CREATOR;
+  }
+
+  public static final class BatterySaverPolicyConfig.Builder {
+    ctor public BatterySaverPolicyConfig.Builder();
+    ctor public BatterySaverPolicyConfig.Builder(@NonNull android.os.BatterySaverPolicyConfig);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder addDeviceSpecificSetting(@NonNull String, @NonNull String);
+    method @NonNull public android.os.BatterySaverPolicyConfig build();
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setAdjustBrightnessFactor(float);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setAdvertiseIsEnabled(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDeferFullBackup(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDeferKeyValueBackup(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableAnimation(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableAod(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableLaunchBoost(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableOptionalSensors(boolean);
+    method @Deprecated @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableSoundTrigger(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setDisableVibration(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableAdjustBrightness(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableDataSaver(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableFirewall(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableNightMode(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setEnableQuickDoze(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setForceAllAppsStandby(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setForceBackgroundCheck(boolean);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setLocationMode(int);
+    method @NonNull public android.os.BatterySaverPolicyConfig.Builder setSoundTriggerMode(int);
+  }
+
+  public final class BatteryStatsManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.os.connectivity.CellularBatteryStats getCellularBatteryStats();
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public android.os.connectivity.WifiBatteryStats getWifiBatteryStats();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportFullWifiLockAcquiredFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportFullWifiLockReleasedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportMobileRadioPowerState(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiBatchedScanStartedFromSource(@NonNull android.os.WorkSource, @IntRange(from=0) int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiBatchedScanStoppedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiMulticastDisabled(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiMulticastEnabled(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiOff();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiOn();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiRadioPowerState(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiRssiChanged(@IntRange(from=0xffffff81, to=0) int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiScanStartedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiScanStoppedFromSource(@NonNull android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiState(int, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public void reportWifiSupplicantStateChanged(int, boolean);
+    field public static final int WIFI_STATE_OFF = 0; // 0x0
+    field public static final int WIFI_STATE_OFF_SCANNING = 1; // 0x1
+    field public static final int WIFI_STATE_ON_CONNECTED_P2P = 5; // 0x5
+    field public static final int WIFI_STATE_ON_CONNECTED_STA = 4; // 0x4
+    field public static final int WIFI_STATE_ON_CONNECTED_STA_P2P = 6; // 0x6
+    field public static final int WIFI_STATE_ON_DISCONNECTED = 3; // 0x3
+    field public static final int WIFI_STATE_ON_NO_NETWORKS = 2; // 0x2
+    field public static final int WIFI_STATE_SOFT_AP = 7; // 0x7
+    field public static final int WIFI_SUPPL_STATE_ASSOCIATED = 7; // 0x7
+    field public static final int WIFI_SUPPL_STATE_ASSOCIATING = 6; // 0x6
+    field public static final int WIFI_SUPPL_STATE_AUTHENTICATING = 5; // 0x5
+    field public static final int WIFI_SUPPL_STATE_COMPLETED = 10; // 0xa
+    field public static final int WIFI_SUPPL_STATE_DISCONNECTED = 1; // 0x1
+    field public static final int WIFI_SUPPL_STATE_DORMANT = 11; // 0xb
+    field public static final int WIFI_SUPPL_STATE_FOUR_WAY_HANDSHAKE = 8; // 0x8
+    field public static final int WIFI_SUPPL_STATE_GROUP_HANDSHAKE = 9; // 0x9
+    field public static final int WIFI_SUPPL_STATE_INACTIVE = 3; // 0x3
+    field public static final int WIFI_SUPPL_STATE_INTERFACE_DISABLED = 2; // 0x2
+    field public static final int WIFI_SUPPL_STATE_INVALID = 0; // 0x0
+    field public static final int WIFI_SUPPL_STATE_SCANNING = 4; // 0x4
+    field public static final int WIFI_SUPPL_STATE_UNINITIALIZED = 12; // 0xc
+  }
+
+  public class Binder implements android.os.IBinder {
+    method public int handleShellCommand(@NonNull android.os.ParcelFileDescriptor, @NonNull android.os.ParcelFileDescriptor, @NonNull android.os.ParcelFileDescriptor, @NonNull String[]);
+    method public static void setProxyTransactListener(@Nullable android.os.Binder.ProxyTransactListener);
+  }
+
+  public static interface Binder.ProxyTransactListener {
+    method public void onTransactEnded(@Nullable Object);
+    method @Nullable public Object onTransactStarted(@NonNull android.os.IBinder, int);
+  }
+
+  public final class BugreportManager {
+    method @RequiresPermission(android.Manifest.permission.DUMP) public void requestBugreport(@NonNull android.os.BugreportParams, @Nullable CharSequence, @Nullable CharSequence);
+    method @RequiresPermission(android.Manifest.permission.DUMP) @WorkerThread public void startBugreport(@NonNull android.os.ParcelFileDescriptor, @Nullable android.os.ParcelFileDescriptor, @NonNull android.os.BugreportParams, @NonNull java.util.concurrent.Executor, @NonNull android.os.BugreportManager.BugreportCallback);
+  }
+
+  public final class BugreportParams {
+    ctor public BugreportParams(int);
+    method public int getMode();
+    field public static final int BUGREPORT_MODE_FULL = 0; // 0x0
+    field public static final int BUGREPORT_MODE_INTERACTIVE = 1; // 0x1
+    field public static final int BUGREPORT_MODE_REMOTE = 2; // 0x2
+    field public static final int BUGREPORT_MODE_TELEPHONY = 4; // 0x4
+    field public static final int BUGREPORT_MODE_WEAR = 3; // 0x3
+    field public static final int BUGREPORT_MODE_WIFI = 5; // 0x5
+  }
+
+  public static class Build.VERSION {
+    field @NonNull public static final String PREVIEW_SDK_FINGERPRINT;
+  }
+
+  public final class ConfigUpdate {
+    field public static final String ACTION_UPDATE_CARRIER_ID_DB = "android.os.action.UPDATE_CARRIER_ID_DB";
+    field public static final String ACTION_UPDATE_CARRIER_PROVISIONING_URLS = "android.intent.action.UPDATE_CARRIER_PROVISIONING_URLS";
+    field public static final String ACTION_UPDATE_CONVERSATION_ACTIONS = "android.intent.action.UPDATE_CONVERSATION_ACTIONS";
+    field public static final String ACTION_UPDATE_CT_LOGS = "android.intent.action.UPDATE_CT_LOGS";
+    field public static final String ACTION_UPDATE_EMERGENCY_NUMBER_DB = "android.os.action.UPDATE_EMERGENCY_NUMBER_DB";
+    field public static final String ACTION_UPDATE_INTENT_FIREWALL = "android.intent.action.UPDATE_INTENT_FIREWALL";
+    field public static final String ACTION_UPDATE_LANG_ID = "android.intent.action.UPDATE_LANG_ID";
+    field public static final String ACTION_UPDATE_NETWORK_WATCHLIST = "android.intent.action.UPDATE_NETWORK_WATCHLIST";
+    field public static final String ACTION_UPDATE_PINS = "android.intent.action.UPDATE_PINS";
+    field public static final String ACTION_UPDATE_SMART_SELECTION = "android.intent.action.UPDATE_SMART_SELECTION";
+    field public static final String ACTION_UPDATE_SMS_SHORT_CODES = "android.intent.action.UPDATE_SMS_SHORT_CODES";
+    field public static final String EXTRA_REQUIRED_HASH = "android.os.extra.REQUIRED_HASH";
+    field public static final String EXTRA_VERSION = "android.os.extra.VERSION";
+  }
+
+  public class DeviceIdleManager {
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void endIdle(@NonNull String);
+  }
+
+  public class Environment {
+    method @NonNull public static java.util.Collection<java.io.File> getInternalMediaDirectories();
+    method @NonNull public static java.io.File getOdmDirectory();
+    method @NonNull public static java.io.File getOemDirectory();
+    method @NonNull public static java.io.File getProductDirectory();
+    method @Deprecated @NonNull public static java.io.File getProductServicesDirectory();
+    method @NonNull public static java.io.File getSystemExtDirectory();
+    method @NonNull public static java.io.File getVendorDirectory();
+  }
+
+  public class HidlMemory implements java.io.Closeable {
+    ctor public HidlMemory(@NonNull String, @IntRange(from=0) long, @Nullable android.os.NativeHandle);
+    method public void close() throws java.io.IOException;
+    method @NonNull public android.os.HidlMemory dup() throws java.io.IOException;
+    method protected void finalize();
+    method @Nullable public android.os.NativeHandle getHandle();
+    method @NonNull public String getName();
+    method public long getSize();
+    method @Nullable public android.os.NativeHandle releaseHandle();
+  }
+
+  public class HidlSupport {
+    method public static boolean deepEquals(Object, Object);
+    method public static int deepHashCode(Object);
+    method public static int getPidIfSharable();
+    method public static boolean interfacesEqual(android.os.IHwInterface, Object);
+  }
+
+  public abstract class HwBinder implements android.os.IHwBinder {
+    ctor public HwBinder();
+    method public static final void configureRpcThreadpool(long, boolean);
+    method public static void enableInstrumentation();
+    method public static final android.os.IHwBinder getService(String, String) throws java.util.NoSuchElementException, android.os.RemoteException;
+    method public static final android.os.IHwBinder getService(String, String, boolean) throws java.util.NoSuchElementException, android.os.RemoteException;
+    method public static final void joinRpcThreadpool();
+    method public abstract void onTransact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
+    method public final void registerService(String) throws android.os.RemoteException;
+    method public final void transact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
+  }
+
+  public class HwBlob {
+    ctor public HwBlob(int);
+    method public final void copyToBoolArray(long, boolean[], int);
+    method public final void copyToDoubleArray(long, double[], int);
+    method public final void copyToFloatArray(long, float[], int);
+    method public final void copyToInt16Array(long, short[], int);
+    method public final void copyToInt32Array(long, int[], int);
+    method public final void copyToInt64Array(long, long[], int);
+    method public final void copyToInt8Array(long, byte[], int);
+    method public final boolean getBool(long);
+    method public final double getDouble(long);
+    method public final long getFieldHandle(long);
+    method public final float getFloat(long);
+    method public final short getInt16(long);
+    method public final int getInt32(long);
+    method public final long getInt64(long);
+    method public final byte getInt8(long);
+    method public final String getString(long);
+    method public final long handle();
+    method public final void putBlob(long, android.os.HwBlob);
+    method public final void putBool(long, boolean);
+    method public final void putBoolArray(long, boolean[]);
+    method public final void putDouble(long, double);
+    method public final void putDoubleArray(long, double[]);
+    method public final void putFloat(long, float);
+    method public final void putFloatArray(long, float[]);
+    method public final void putHidlMemory(long, @NonNull android.os.HidlMemory);
+    method public final void putInt16(long, short);
+    method public final void putInt16Array(long, short[]);
+    method public final void putInt32(long, int);
+    method public final void putInt32Array(long, int[]);
+    method public final void putInt64(long, long);
+    method public final void putInt64Array(long, long[]);
+    method public final void putInt8(long, byte);
+    method public final void putInt8Array(long, byte[]);
+    method public final void putNativeHandle(long, @Nullable android.os.NativeHandle);
+    method public final void putString(long, String);
+    method public static Boolean[] wrapArray(@NonNull boolean[]);
+    method public static Long[] wrapArray(@NonNull long[]);
+    method public static Byte[] wrapArray(@NonNull byte[]);
+    method public static Short[] wrapArray(@NonNull short[]);
+    method public static Integer[] wrapArray(@NonNull int[]);
+    method public static Float[] wrapArray(@NonNull float[]);
+    method public static Double[] wrapArray(@NonNull double[]);
+  }
+
+  public class HwParcel {
+    ctor public HwParcel();
+    method public final void enforceInterface(String);
+    method public final boolean readBool();
+    method public final java.util.ArrayList<java.lang.Boolean> readBoolVector();
+    method public final android.os.HwBlob readBuffer(long);
+    method public final double readDouble();
+    method public final java.util.ArrayList<java.lang.Double> readDoubleVector();
+    method public final android.os.HwBlob readEmbeddedBuffer(long, long, long, boolean);
+    method @NonNull @Nullable public final android.os.HidlMemory readEmbeddedHidlMemory(long, long, long);
+    method @Nullable public final android.os.NativeHandle readEmbeddedNativeHandle(long, long);
+    method public final float readFloat();
+    method public final java.util.ArrayList<java.lang.Float> readFloatVector();
+    method @NonNull public final android.os.HidlMemory readHidlMemory();
+    method public final short readInt16();
+    method public final java.util.ArrayList<java.lang.Short> readInt16Vector();
+    method public final int readInt32();
+    method public final java.util.ArrayList<java.lang.Integer> readInt32Vector();
+    method public final long readInt64();
+    method public final java.util.ArrayList<java.lang.Long> readInt64Vector();
+    method public final byte readInt8();
+    method public final java.util.ArrayList<java.lang.Byte> readInt8Vector();
+    method @Nullable public final android.os.NativeHandle readNativeHandle();
+    method @NonNull public final java.util.ArrayList<android.os.NativeHandle> readNativeHandleVector();
+    method public final String readString();
+    method public final java.util.ArrayList<java.lang.String> readStringVector();
+    method public final android.os.IHwBinder readStrongBinder();
+    method public final void release();
+    method public final void releaseTemporaryStorage();
+    method public final void send();
+    method public final void verifySuccess();
+    method public final void writeBool(boolean);
+    method public final void writeBoolVector(java.util.ArrayList<java.lang.Boolean>);
+    method public final void writeBuffer(android.os.HwBlob);
+    method public final void writeDouble(double);
+    method public final void writeDoubleVector(java.util.ArrayList<java.lang.Double>);
+    method public final void writeFloat(float);
+    method public final void writeFloatVector(java.util.ArrayList<java.lang.Float>);
+    method public final void writeHidlMemory(@NonNull android.os.HidlMemory);
+    method public final void writeInt16(short);
+    method public final void writeInt16Vector(java.util.ArrayList<java.lang.Short>);
+    method public final void writeInt32(int);
+    method public final void writeInt32Vector(java.util.ArrayList<java.lang.Integer>);
+    method public final void writeInt64(long);
+    method public final void writeInt64Vector(java.util.ArrayList<java.lang.Long>);
+    method public final void writeInt8(byte);
+    method public final void writeInt8Vector(java.util.ArrayList<java.lang.Byte>);
+    method public final void writeInterfaceToken(String);
+    method public final void writeNativeHandle(@Nullable android.os.NativeHandle);
+    method public final void writeNativeHandleVector(@NonNull java.util.ArrayList<android.os.NativeHandle>);
+    method public final void writeStatus(int);
+    method public final void writeString(String);
+    method public final void writeStringVector(java.util.ArrayList<java.lang.String>);
+    method public final void writeStrongBinder(android.os.IHwBinder);
+    field public static final int STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public interface IHwBinder {
+    method public boolean linkToDeath(android.os.IHwBinder.DeathRecipient, long);
+    method public android.os.IHwInterface queryLocalInterface(String);
+    method public void transact(int, android.os.HwParcel, android.os.HwParcel, int) throws android.os.RemoteException;
+    method public boolean unlinkToDeath(android.os.IHwBinder.DeathRecipient);
+  }
+
+  public static interface IHwBinder.DeathRecipient {
+    method public void serviceDied(long);
+  }
+
+  public interface IHwInterface {
+    method public android.os.IHwBinder asBinder();
+  }
+
+  public class IncidentManager {
+    method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public void approveReport(android.net.Uri);
+    method @RequiresPermission("android.permission.REQUEST_INCIDENT_REPORT_APPROVAL") public void cancelAuthorization(android.os.IncidentManager.AuthListener);
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void deleteIncidentReports(android.net.Uri);
+    method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public void denyReport(android.net.Uri);
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public android.os.IncidentManager.IncidentReport getIncidentReport(android.net.Uri);
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public java.util.List<android.net.Uri> getIncidentReportList(String);
+    method @RequiresPermission(android.Manifest.permission.APPROVE_INCIDENT_REPORTS) public java.util.List<android.os.IncidentManager.PendingReport> getPendingReports();
+    method public void registerSection(int, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.IncidentManager.DumpCallback);
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void reportIncident(android.os.IncidentReportArgs);
+    method @RequiresPermission("android.permission.REQUEST_INCIDENT_REPORT_APPROVAL") public void requestAuthorization(int, String, int, android.os.IncidentManager.AuthListener);
+    method public void unregisterSection(int);
+    field public static final int FLAG_CONFIRMATION_DIALOG = 1; // 0x1
+    field public static final int PRIVACY_POLICY_AUTO = 200; // 0xc8
+    field public static final int PRIVACY_POLICY_EXPLICIT = 100; // 0x64
+    field public static final int PRIVACY_POLICY_LOCAL = 0; // 0x0
+  }
+
+  public static class IncidentManager.AuthListener {
+    ctor public IncidentManager.AuthListener();
+    method public void onReportApproved();
+    method public void onReportDenied();
+  }
+
+  public static class IncidentManager.DumpCallback {
+    ctor public IncidentManager.DumpCallback();
+    method public void onDumpSection(int, @NonNull java.io.OutputStream);
+  }
+
+  public static class IncidentManager.IncidentReport implements java.io.Closeable android.os.Parcelable {
+    ctor public IncidentManager.IncidentReport(android.os.Parcel);
+    method public void close();
+    method public int describeContents();
+    method public java.io.InputStream getInputStream() throws java.io.IOException;
+    method public long getPrivacyPolicy();
+    method public long getTimestamp();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentManager.IncidentReport> CREATOR;
+  }
+
+  public static class IncidentManager.PendingReport {
+    ctor public IncidentManager.PendingReport(@NonNull android.net.Uri);
+    method public int getFlags();
+    method @NonNull public String getRequestingPackage();
+    method public long getTimestamp();
+    method @NonNull public android.net.Uri getUri();
+  }
+
+  public final class IncidentReportArgs implements android.os.Parcelable {
+    ctor public IncidentReportArgs();
+    ctor public IncidentReportArgs(android.os.Parcel);
+    method public void addHeader(byte[]);
+    method public void addSection(int);
+    method public boolean containsSection(int);
+    method public int describeContents();
+    method public boolean isAll();
+    method public void readFromParcel(android.os.Parcel);
+    method public int sectionCount();
+    method public void setAll(boolean);
+    method public void setPrivacyPolicy(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.IncidentReportArgs> CREATOR;
+  }
+
+  public final class NativeHandle implements java.io.Closeable {
+    ctor public NativeHandle();
+    ctor public NativeHandle(@NonNull java.io.FileDescriptor, boolean);
+    ctor public NativeHandle(@NonNull java.io.FileDescriptor[], @NonNull int[], boolean);
+    method public void close() throws java.io.IOException;
+    method @NonNull public android.os.NativeHandle dup() throws java.io.IOException;
+    method @NonNull public java.io.FileDescriptor getFileDescriptor();
+    method @NonNull public java.io.FileDescriptor[] getFileDescriptors();
+    method @NonNull public int[] getInts();
+    method public boolean hasSingleFileDescriptor();
+  }
+
+  public interface Parcelable {
+    field public static final int PARCELABLE_STABILITY_LOCAL = 0; // 0x0
+    field public static final int PARCELABLE_STABILITY_VINTF = 1; // 0x1
+  }
+
+  public final class ParcelableHolder implements android.os.Parcelable {
+    ctor public ParcelableHolder(int);
+    method public int describeContents();
+    method @Nullable public <T extends android.os.Parcelable> T getParcelable(@NonNull Class<T>);
+    method public int getStability();
+    method public void readFromParcel(@NonNull android.os.Parcel);
+    method public void setParcelable(@Nullable android.os.Parcelable);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.ParcelableHolder> CREATOR;
+  }
+
+  public class PowerExemptionManager {
+    method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void addToTemporaryAllowList(@NonNull String, int, @Nullable String, long);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long addToTemporaryAllowListForEvent(@NonNull String, int, @Nullable String, int);
+    field public static final int EVENT_MMS = 2; // 0x2
+    field public static final int EVENT_SMS = 1; // 0x1
+    field public static final int EVENT_UNSPECIFIED = 0; // 0x0
+    field public static final int REASON_ACCOUNT_TRANSFER = 104; // 0x68
+    field public static final int REASON_ACTIVITY_RECOGNITION = 103; // 0x67
+    field public static final int REASON_GEOFENCING = 100; // 0x64
+    field public static final int REASON_LOCATION_PROVIDER = 312; // 0x138
+    field public static final int REASON_OTHER = 1; // 0x1
+    field public static final int REASON_PUSH_MESSAGING = 101; // 0x65
+    field public static final int REASON_PUSH_MESSAGING_OVER_QUOTA = 102; // 0x66
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+    field public static final int TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED = 0; // 0x0
+    field public static final int TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED = 1; // 0x1
+    field public static final int TEMPORARY_ALLOW_LIST_TYPE_NONE = -1; // 0xffffffff
+  }
+
+  public final class PowerManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_DREAM_STATE, android.Manifest.permission.WRITE_DREAM_STATE}) public void dream(long);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public boolean forceSuspend();
+    method @NonNull public android.os.BatterySaverPolicyConfig getFullPowerSavePolicy();
+    method public int getPowerSaveModeTrigger();
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplayAvailable();
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplaySuppressed();
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isAmbientDisplaySuppressedForToken(@NonNull String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setAdaptivePowerSaveEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setAdaptivePowerSavePolicy(@NonNull android.os.BatterySaverPolicyConfig);
+    method @RequiresPermission(anyOf={android.Manifest.permission.BATTERY_PREDICTION, android.Manifest.permission.DEVICE_POWER}) public void setBatteryDischargePrediction(@NonNull java.time.Duration, boolean);
+    method @RequiresPermission(android.Manifest.permission.POWER_SAVER) public boolean setDynamicPowerSaveHint(boolean, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setFullPowerSavePolicy(@NonNull android.os.BatterySaverPolicyConfig);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.POWER_SAVER}) public boolean setPowerSaveModeEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void suppressAmbientDisplay(@NonNull String, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.DEVICE_POWER, android.Manifest.permission.USER_ACTIVITY}) public void userActivity(long, int, int);
+    field public static final int POWER_SAVE_MODE_TRIGGER_DYNAMIC = 1; // 0x1
+    field public static final int POWER_SAVE_MODE_TRIGGER_PERCENTAGE = 0; // 0x0
+    field public static final String REBOOT_USERSPACE = "userspace";
+    field public static final int SOUND_TRIGGER_MODE_ALL_DISABLED = 2; // 0x2
+    field public static final int SOUND_TRIGGER_MODE_ALL_ENABLED = 0; // 0x0
+    field public static final int SOUND_TRIGGER_MODE_CRITICAL_ONLY = 1; // 0x1
+    field public static final int USER_ACTIVITY_EVENT_ACCESSIBILITY = 3; // 0x3
+    field public static final int USER_ACTIVITY_EVENT_BUTTON = 1; // 0x1
+    field public static final int USER_ACTIVITY_EVENT_OTHER = 0; // 0x0
+    field public static final int USER_ACTIVITY_EVENT_TOUCH = 2; // 0x2
+    field public static final int USER_ACTIVITY_FLAG_INDIRECT = 2; // 0x2
+    field public static final int USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS = 1; // 0x1
+  }
+
+  @Deprecated public class PowerWhitelistManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void addToWhitelist(@NonNull java.util.List<java.lang.String>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void removeFromWhitelist(@NonNull String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(@NonNull String, long, int, @Nullable String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public void whitelistAppTemporarily(@NonNull String, long);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long whitelistAppTemporarilyForEvent(@NonNull String, int, @Nullable String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST) public long whitelistAppTemporarilyForEvent(@NonNull String, int, int, @Nullable String);
+    field @Deprecated public static final int EVENT_MMS = 2; // 0x2
+    field @Deprecated public static final int EVENT_SMS = 1; // 0x1
+    field @Deprecated public static final int EVENT_UNSPECIFIED = 0; // 0x0
+    field @Deprecated public static final int REASON_ACTIVITY_RECOGNITION = 103; // 0x67
+    field @Deprecated public static final int REASON_GEOFENCING = 100; // 0x64
+    field @Deprecated public static final int REASON_LOCATION_PROVIDER = 312; // 0x138
+    field @Deprecated public static final int REASON_OTHER = 1; // 0x1
+    field @Deprecated public static final int REASON_PUSH_MESSAGING = 101; // 0x65
+    field @Deprecated public static final int REASON_PUSH_MESSAGING_OVER_QUOTA = 102; // 0x66
+    field @Deprecated public static final int REASON_UNKNOWN = 0; // 0x0
+    field @Deprecated public static final int TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_ALLOWED = 0; // 0x0
+    field @Deprecated public static final int TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_NOT_ALLOWED = 1; // 0x1
+  }
+
+  public class RecoverySystem {
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void cancelScheduledUpdate(android.content.Context) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static void clearPrepareForUnattendedUpdate(@NonNull android.content.Context) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void installPackage(android.content.Context, java.io.File, boolean) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static boolean isPreparedForUnattendedUpdate(@NonNull android.content.Context) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static void prepareForUnattendedUpdate(@NonNull android.content.Context, @NonNull String, @Nullable android.content.IntentSender) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener, android.os.Handler) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener) throws java.io.IOException;
+    method @Deprecated @RequiresPermission(android.Manifest.permission.RECOVERY) public static void rebootAndApply(@NonNull android.content.Context, @NonNull String, @NonNull String) throws java.io.IOException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static int rebootAndApply(@NonNull android.content.Context, @NonNull String, boolean) throws java.io.IOException;
+    method @RequiresPermission(allOf={android.Manifest.permission.RECOVERY, android.Manifest.permission.REBOOT}) public static void rebootWipeAb(android.content.Context, java.io.File, String) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public static void scheduleUpdateOnBoot(android.content.Context, java.io.File) throws java.io.IOException;
+    method public static boolean verifyPackageCompatibility(java.io.File) throws java.io.IOException;
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_INVALID_PACKAGE_NAME = 2000; // 0x7d0
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_LSKF_NOT_CAPTURED = 3000; // 0xbb8
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_PROVIDER_PREPARATION_FAILURE = 5000; // 0x1388
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_SLOT_MISMATCH = 4000; // 0xfa0
+    field public static final int RESUME_ON_REBOOT_REBOOT_ERROR_UNSPECIFIED = 1000; // 0x3e8
+  }
+
+  public final class RemoteCallback implements android.os.Parcelable {
+    ctor public RemoteCallback(android.os.RemoteCallback.OnResultListener);
+    ctor public RemoteCallback(@NonNull android.os.RemoteCallback.OnResultListener, @Nullable android.os.Handler);
+    method public int describeContents();
+    method public void sendResult(@Nullable android.os.Bundle);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.RemoteCallback> CREATOR;
+  }
+
+  public static interface RemoteCallback.OnResultListener {
+    method public void onResult(@Nullable android.os.Bundle);
+  }
+
+  public class ServiceSpecificException extends java.lang.RuntimeException {
+    ctor public ServiceSpecificException(int, @Nullable String);
+    ctor public ServiceSpecificException(int);
+    field public final int errorCode;
+  }
+
+  public final class StatsDimensionsValue implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getBooleanValue();
+    method public int getField();
+    method public float getFloatValue();
+    method public int getIntValue();
+    method public long getLongValue();
+    method public String getStringValue();
+    method public java.util.List<android.os.StatsDimensionsValue> getTupleValueList();
+    method public int getValueType();
+    method public boolean isValueType(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BOOLEAN_VALUE_TYPE = 5; // 0x5
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.StatsDimensionsValue> CREATOR;
+    field public static final int FLOAT_VALUE_TYPE = 6; // 0x6
+    field public static final int INT_VALUE_TYPE = 3; // 0x3
+    field public static final int LONG_VALUE_TYPE = 4; // 0x4
+    field public static final int STRING_VALUE_TYPE = 2; // 0x2
+    field public static final int TUPLE_VALUE_TYPE = 7; // 0x7
+  }
+
+  public class SystemConfigManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Set<java.lang.String> getDisabledUntilUsedPreinstalledCarrierApps();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_CARRIER_APP_INFO) public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getDisabledUntilUsedPreinstalledCarrierAssociatedApps();
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public int[] getSystemPermissionUids(@NonNull String);
+  }
+
+  public class SystemProperties {
+    method @NonNull public static String get(@NonNull String);
+    method @NonNull public static String get(@NonNull String, @Nullable String);
+    method public static boolean getBoolean(@NonNull String, boolean);
+    method public static int getInt(@NonNull String, int);
+    method public static long getLong(@NonNull String, long);
+  }
+
+  public class SystemUpdateManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_SYSTEM_UPDATE_INFO, android.Manifest.permission.RECOVERY}) public android.os.Bundle retrieveSystemUpdateInfo();
+    method @RequiresPermission(android.Manifest.permission.RECOVERY) public void updateSystemUpdateInfo(android.os.PersistableBundle);
+    field public static final String KEY_IS_SECURITY_UPDATE = "is_security_update";
+    field public static final String KEY_STATUS = "status";
+    field public static final String KEY_TARGET_BUILD_FINGERPRINT = "target_build_fingerprint";
+    field public static final String KEY_TARGET_SECURITY_PATCH_LEVEL = "target_security_patch_level";
+    field public static final String KEY_TITLE = "title";
+    field public static final int STATUS_IDLE = 1; // 0x1
+    field public static final int STATUS_IN_PROGRESS = 3; // 0x3
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+    field public static final int STATUS_WAITING_DOWNLOAD = 2; // 0x2
+    field public static final int STATUS_WAITING_INSTALL = 4; // 0x4
+    field public static final int STATUS_WAITING_REBOOT = 5; // 0x5
+  }
+
+  public class UpdateEngine {
+    ctor public UpdateEngine();
+    method @NonNull @WorkerThread public android.os.UpdateEngine.AllocateSpaceResult allocateSpace(@NonNull String, @NonNull String[]);
+    method public void applyPayload(String, long, long, String[]);
+    method public void applyPayload(@NonNull android.content.res.AssetFileDescriptor, @NonNull String[]);
+    method public boolean bind(android.os.UpdateEngineCallback, android.os.Handler);
+    method public boolean bind(android.os.UpdateEngineCallback);
+    method public void cancel();
+    method @WorkerThread public int cleanupAppliedPayload();
+    method public void resetStatus();
+    method public void resume();
+    method public void suspend();
+    method public boolean unbind();
+    method public boolean verifyPayloadMetadata(String);
+  }
+
+  public static final class UpdateEngine.AllocateSpaceResult {
+    method public int getErrorCode();
+    method public long getFreeSpaceRequired();
+  }
+
+  public static final class UpdateEngine.ErrorCodeConstants {
+    ctor public UpdateEngine.ErrorCodeConstants();
+    field public static final int DEVICE_CORRUPTED = 61; // 0x3d
+    field public static final int DOWNLOAD_PAYLOAD_VERIFICATION_ERROR = 12; // 0xc
+    field public static final int DOWNLOAD_TRANSFER_ERROR = 9; // 0x9
+    field public static final int ERROR = 1; // 0x1
+    field public static final int FILESYSTEM_COPIER_ERROR = 4; // 0x4
+    field public static final int INSTALL_DEVICE_OPEN_ERROR = 7; // 0x7
+    field public static final int KERNEL_DEVICE_OPEN_ERROR = 8; // 0x8
+    field public static final int NOT_ENOUGH_SPACE = 60; // 0x3c
+    field public static final int PAYLOAD_HASH_MISMATCH_ERROR = 10; // 0xa
+    field public static final int PAYLOAD_MISMATCHED_TYPE_ERROR = 6; // 0x6
+    field public static final int PAYLOAD_SIZE_MISMATCH_ERROR = 11; // 0xb
+    field public static final int PAYLOAD_TIMESTAMP_ERROR = 51; // 0x33
+    field public static final int POST_INSTALL_RUNNER_ERROR = 5; // 0x5
+    field public static final int SUCCESS = 0; // 0x0
+    field public static final int UPDATED_BUT_NOT_ACTIVE = 52; // 0x34
+  }
+
+  public static final class UpdateEngine.UpdateStatusConstants {
+    ctor public UpdateEngine.UpdateStatusConstants();
+    field public static final int ATTEMPTING_ROLLBACK = 8; // 0x8
+    field public static final int CHECKING_FOR_UPDATE = 1; // 0x1
+    field public static final int DISABLED = 9; // 0x9
+    field public static final int DOWNLOADING = 3; // 0x3
+    field public static final int FINALIZING = 5; // 0x5
+    field public static final int IDLE = 0; // 0x0
+    field public static final int REPORTING_ERROR_EVENT = 7; // 0x7
+    field public static final int UPDATED_NEED_REBOOT = 6; // 0x6
+    field public static final int UPDATE_AVAILABLE = 2; // 0x2
+    field public static final int VERIFYING = 4; // 0x4
+  }
+
+  public abstract class UpdateEngineCallback {
+    ctor public UpdateEngineCallback();
+    method public abstract void onPayloadApplicationComplete(int);
+    method public abstract void onStatusUpdate(int, float);
+  }
+
+  public final class UserHandle implements android.os.Parcelable {
+    method @NonNull public static String formatUid(int);
+    method public static int getAppId(int);
+    method public int getIdentifier();
+    method public int getUid(int);
+    method @Deprecated public boolean isOwner();
+    method public boolean isSystem();
+    method public static int myUserId();
+    method public static android.os.UserHandle of(int);
+    field @NonNull public static final android.os.UserHandle ALL;
+    field @NonNull public static final android.os.UserHandle CURRENT;
+    field @NonNull public static final android.os.UserHandle SYSTEM;
+  }
+
+  public class UserManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean canHaveRestrictedProfile();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void clearSeedAccountData();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle createProfile(@NonNull String, @NonNull String, @NonNull java.util.Set<java.lang.String>) throws android.os.UserManager.UserOperationException;
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List<android.os.UserHandle> getAllProfiles();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}, conditional=true) public java.util.List<android.os.UserHandle> getEnabledProfiles();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public android.os.UserHandle getProfileParent(@NonNull android.os.UserHandle);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.os.UserHandle getRestrictedProfileParent();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getSeedAccountName();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public android.os.PersistableBundle getSeedAccountOptions();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public String getSeedAccountType();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public long[] getSerialNumbersOfUsers(boolean);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.os.UserHandle> getUserHandles(boolean);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public android.graphics.Bitmap getUserIcon();
+    method @Deprecated @android.os.UserManager.UserRestrictionSource @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public int getUserRestrictionSource(String, android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public java.util.List<android.os.UserManager.EnforcingUser> getUserRestrictionSources(String, android.os.UserHandle);
+    method @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public int getUserSwitchability();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean hasRestrictedProfiles();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean hasUserRestrictionForUser(@NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isAdminUser();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isCloneProfile();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean isGuestUser();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isManagedProfile(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isMediaSharedWithParent();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean isPrimaryUser();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isProfile();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isRestrictedProfile();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean isRestrictedProfile(@NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isSameProfileGroup(@NonNull android.os.UserHandle, @NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.GET_ACCOUNTS_PRIVILEGED}) public boolean isUserNameSet();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public boolean isUserOfType(@NonNull String);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}, conditional=true) public boolean isUserUnlockingOrUnlocked(@NonNull android.os.UserHandle);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean removeUser(@NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setUserIcon(@NonNull android.graphics.Bitmap) throws android.os.UserManager.UserOperationException;
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public void setUserName(@Nullable String);
+    field public static final String ACTION_USER_RESTRICTIONS_CHANGED = "android.os.action.USER_RESTRICTIONS_CHANGED";
+    field @Deprecated public static final String DISALLOW_OEM_UNLOCK = "no_oem_unlock";
+    field public static final String DISALLOW_RUN_IN_BACKGROUND = "no_run_in_background";
+    field public static final int RESTRICTION_NOT_SET = 0; // 0x0
+    field public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 2; // 0x2
+    field public static final int RESTRICTION_SOURCE_PROFILE_OWNER = 4; // 0x4
+    field public static final int RESTRICTION_SOURCE_SYSTEM = 1; // 0x1
+    field public static final int SWITCHABILITY_STATUS_OK = 0; // 0x0
+    field public static final int SWITCHABILITY_STATUS_SYSTEM_USER_LOCKED = 4; // 0x4
+    field public static final int SWITCHABILITY_STATUS_USER_IN_CALL = 1; // 0x1
+    field public static final int SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED = 2; // 0x2
+    field public static final String USER_TYPE_FULL_SECONDARY = "android.os.usertype.full.SECONDARY";
+    field public static final String USER_TYPE_FULL_SYSTEM = "android.os.usertype.full.SYSTEM";
+    field public static final String USER_TYPE_PROFILE_CLONE = "android.os.usertype.profile.CLONE";
+    field public static final String USER_TYPE_PROFILE_MANAGED = "android.os.usertype.profile.MANAGED";
+    field public static final String USER_TYPE_SYSTEM_HEADLESS = "android.os.usertype.system.HEADLESS";
+  }
+
+  public static final class UserManager.EnforcingUser implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.os.UserHandle getUserHandle();
+    method @android.os.UserManager.UserRestrictionSource public int getUserRestrictionSource();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.UserManager.EnforcingUser> CREATOR;
+  }
+
+  @IntDef(flag=true, prefix={"RESTRICTION_"}, value={android.os.UserManager.RESTRICTION_NOT_SET, android.os.UserManager.RESTRICTION_SOURCE_SYSTEM, android.os.UserManager.RESTRICTION_SOURCE_DEVICE_OWNER, android.os.UserManager.RESTRICTION_SOURCE_PROFILE_OWNER}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface UserManager.UserRestrictionSource {
+  }
+
+  public abstract class Vibrator {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void addVibratorStateListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public boolean isVibrating();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_VIBRATOR_STATE) public void removeVibratorStateListener(@NonNull android.os.Vibrator.OnVibratorStateChangedListener);
+  }
+
+  public static interface Vibrator.OnVibratorStateChangedListener {
+    method public void onVibratorStateChanged(boolean);
+  }
+
+  public class WorkSource implements android.os.Parcelable {
+    ctor public WorkSource(int);
+    ctor public WorkSource(int, @NonNull String);
+    method public android.os.WorkSource.WorkChain createWorkChain();
+    method @Nullable public String getPackageName(int);
+    method public int getUid(int);
+    method @Nullable public java.util.List<android.os.WorkSource.WorkChain> getWorkChains();
+    method public boolean isEmpty();
+    method public int size();
+    method @NonNull public android.os.WorkSource withoutNames();
+  }
+
+  public static final class WorkSource.WorkChain implements android.os.Parcelable {
+    ctor public WorkSource.WorkChain();
+    method public android.os.WorkSource.WorkChain addNode(int, @Nullable String);
+    method public int describeContents();
+    method public String getAttributionTag();
+    method public int getAttributionUid();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.WorkSource.WorkChain> CREATOR;
+  }
+
+}
+
+package android.os.connectivity {
+
+  public final class CellularBatteryStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getEnergyConsumedMaMillis();
+    method public long getIdleTimeMillis();
+    method public long getKernelActiveTimeMillis();
+    method public long getLoggingDurationMillis();
+    method public long getMonitoredRailChargeConsumedMaMillis();
+    method public long getNumBytesRx();
+    method public long getNumBytesTx();
+    method public long getNumPacketsRx();
+    method public long getNumPacketsTx();
+    method public long getRxTimeMillis();
+    method public long getSleepTimeMillis();
+    method @NonNull public long getTimeInRatMicros(int);
+    method @NonNull public long getTimeInRxSignalStrengthLevelMicros(@IntRange(from=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN, to=android.telephony.CellSignalStrength.SIGNAL_STRENGTH_GREAT) int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.CellularBatteryStats> CREATOR;
+  }
+
+  public final class WifiActivityEnergyInfo implements android.os.Parcelable {
+    ctor public WifiActivityEnergyInfo(long, int, @IntRange(from=0) long, @IntRange(from=0) long, @IntRange(from=0) long, @IntRange(from=0) long);
+    method public int describeContents();
+    method @IntRange(from=0) public long getControllerEnergyUsedMicroJoules();
+    method @IntRange(from=0) public long getControllerIdleDurationMillis();
+    method @IntRange(from=0) public long getControllerRxDurationMillis();
+    method @IntRange(from=0) public long getControllerScanDurationMillis();
+    method @IntRange(from=0) public long getControllerTxDurationMillis();
+    method public int getStackState();
+    method public long getTimeSinceBootMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.WifiActivityEnergyInfo> CREATOR;
+    field public static final int STACK_STATE_INVALID = 0; // 0x0
+    field public static final int STACK_STATE_STATE_ACTIVE = 1; // 0x1
+    field public static final int STACK_STATE_STATE_IDLE = 3; // 0x3
+    field public static final int STACK_STATE_STATE_SCANNING = 2; // 0x2
+  }
+
+  public final class WifiBatteryStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAppScanRequestCount();
+    method public long getEnergyConsumedMaMillis();
+    method public long getIdleTimeMillis();
+    method public long getKernelActiveTimeMillis();
+    method public long getLoggingDurationMillis();
+    method public long getMonitoredRailChargeConsumedMaMillis();
+    method public long getNumBytesRx();
+    method public long getNumBytesTx();
+    method public long getNumPacketsRx();
+    method public long getNumPacketsTx();
+    method public long getRxTimeMillis();
+    method public long getScanTimeMillis();
+    method public long getSleepTimeMillis();
+    method public long getTxTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.connectivity.WifiBatteryStats> CREATOR;
+  }
+
+}
+
+package android.os.ext {
+
+  public class SdkExtensions {
+    method @NonNull public static java.util.Map<java.lang.Integer,java.lang.Integer> getAllExtensionVersions();
+    method public static int getExtensionVersion(int);
+  }
+
+}
+
+package android.os.image {
+
+  public class DynamicSystemClient {
+    ctor public DynamicSystemClient(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void bind();
+    method public void setOnStatusChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener);
+    method public void setOnStatusChangedListener(@NonNull android.os.image.DynamicSystemClient.OnStatusChangedListener);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void start(@NonNull android.net.Uri, long);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void start(@NonNull android.net.Uri, long, long);
+    method @RequiresPermission(android.Manifest.permission.INSTALL_DYNAMIC_SYSTEM) public void unbind();
+    field public static final int CAUSE_ERROR_EXCEPTION = 6; // 0x6
+    field public static final int CAUSE_ERROR_INVALID_URL = 4; // 0x4
+    field public static final int CAUSE_ERROR_IO = 3; // 0x3
+    field public static final int CAUSE_ERROR_IPC = 5; // 0x5
+    field public static final int CAUSE_INSTALL_CANCELLED = 2; // 0x2
+    field public static final int CAUSE_INSTALL_COMPLETED = 1; // 0x1
+    field public static final int CAUSE_NOT_SPECIFIED = 0; // 0x0
+    field public static final int STATUS_IN_PROGRESS = 2; // 0x2
+    field public static final int STATUS_IN_USE = 4; // 0x4
+    field public static final int STATUS_NOT_STARTED = 1; // 0x1
+    field public static final int STATUS_READY = 3; // 0x3
+    field public static final int STATUS_UNKNOWN = 0; // 0x0
+  }
+
+  public static interface DynamicSystemClient.OnStatusChangedListener {
+    method public void onStatusChanged(int, int, long, @Nullable Throwable);
+  }
+
+}
+
+package android.os.storage {
+
+  public class StorageManager {
+    method @WorkerThread public void allocateBytes(@NonNull java.util.UUID, long, @RequiresPermission int) throws java.io.IOException;
+    method @WorkerThread public void allocateBytes(java.io.FileDescriptor, long, @RequiresPermission int) throws java.io.IOException;
+    method @WorkerThread public long getAllocatableBytes(@NonNull java.util.UUID, @RequiresPermission int) throws java.io.IOException;
+    method @RequiresPermission(android.Manifest.permission.WRITE_MEDIA_STORAGE) public int getExternalStorageMountMode(int, @NonNull String);
+    method public static boolean hasIsolatedStorage();
+    method public void updateExternalStorageFileQuotaType(@NonNull java.io.File, int) throws java.io.IOException;
+    field @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public static final int FLAG_ALLOCATE_AGGRESSIVE = 1; // 0x1
+    field public static final int MOUNT_MODE_EXTERNAL_ANDROID_WRITABLE = 4; // 0x4
+    field public static final int MOUNT_MODE_EXTERNAL_DEFAULT = 1; // 0x1
+    field public static final int MOUNT_MODE_EXTERNAL_INSTALLER = 2; // 0x2
+    field public static final int MOUNT_MODE_EXTERNAL_NONE = 0; // 0x0
+    field public static final int MOUNT_MODE_EXTERNAL_PASS_THROUGH = 3; // 0x3
+    field public static final int QUOTA_TYPE_MEDIA_AUDIO = 2; // 0x2
+    field public static final int QUOTA_TYPE_MEDIA_IMAGE = 1; // 0x1
+    field public static final int QUOTA_TYPE_MEDIA_NONE = 0; // 0x0
+    field public static final int QUOTA_TYPE_MEDIA_VIDEO = 3; // 0x3
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method @NonNull public String getId();
+  }
+
+}
+
+package android.permission {
+
+  public final class AdminPermissionControlParams implements android.os.Parcelable {
+    method public boolean canAdminGrantSensorsPermissions();
+    method public int describeContents();
+    method public int getGrantState();
+    method @NonNull public String getGranteePackageName();
+    method @NonNull public String getPermission();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.permission.AdminPermissionControlParams> CREATOR;
+  }
+
+  public final class PermissionControllerManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void applyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getRuntimePermissionBackup(@NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<byte[]>);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void stageAndApplyRuntimePermissionsBackup(@NonNull byte[], @NonNull android.os.UserHandle);
+    field public static final int COUNT_ONLY_WHEN_GRANTED = 1; // 0x1
+    field public static final int COUNT_WHEN_SYSTEM = 2; // 0x2
+    field public static final int REASON_INSTALLER_POLICY_VIOLATION = 2; // 0x2
+    field public static final int REASON_MALWARE = 1; // 0x1
+  }
+
+  public abstract static class PermissionControllerManager.OnRevokeRuntimePermissionsCallback {
+    ctor public PermissionControllerManager.OnRevokeRuntimePermissionsCallback();
+    method public abstract void onRevokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>);
+  }
+
+  public abstract class PermissionControllerService extends android.app.Service {
+    ctor public PermissionControllerService();
+    method @NonNull @RequiresPermission("android.permission.MANAGE_COMPANION_DEVICES") public String getPrivilegesDescriptionStringForProfile(@NonNull String);
+    method @BinderThread public void onApplyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @NonNull public final android.os.IBinder onBind(android.content.Intent);
+    method @BinderThread public abstract void onCountPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull java.util.function.IntConsumer);
+    method @BinderThread public abstract void onGetAppPermissions(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionPresentationInfo>>);
+    method @BinderThread public void onGetGroupOfPlatformPermission(@NonNull String, @NonNull java.util.function.Consumer<java.lang.String>);
+    method @BinderThread public abstract void onGetPermissionUsages(boolean, long, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionUsageInfo>>);
+    method @BinderThread public void onGetPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>);
+    method @BinderThread public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream, @NonNull Runnable);
+    method @BinderThread public abstract void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable);
+    method @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String);
+    method @Deprecated @BinderThread public void onRestoreDelayedRuntimePermissionsBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @BinderThread public void onRestoreRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.InputStream, @NonNull Runnable);
+    method @BinderThread public abstract void onRevokeRuntimePermission(@NonNull String, @NonNull String, @NonNull Runnable);
+    method @BinderThread public abstract void onRevokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull String, @NonNull java.util.function.Consumer<java.util.Map<java.lang.String,java.util.List<java.lang.String>>>);
+    method @Deprecated @BinderThread public abstract void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String, @NonNull String, @NonNull String, int, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @BinderThread public void onSetRuntimePermissionGrantStateByDeviceAdmin(@NonNull String, @NonNull android.permission.AdminPermissionControlParams, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @BinderThread public void onStageAndApplyRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.InputStream, @NonNull Runnable);
+    method @BinderThread public void onUpdateUserSensitivePermissionFlags(int, @NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method @BinderThread public void onUpdateUserSensitivePermissionFlags(int, @NonNull Runnable);
+    field public static final String SERVICE_INTERFACE = "android.permission.PermissionControllerService";
+  }
+
+  public final class PermissionManager {
+    method public int checkDeviceIdentifierAccess(@Nullable String, @Nullable String, @Nullable String, int, int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionGrantedPackages();
+    method @NonNull @RequiresPermission(android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY) public java.util.Set<java.lang.String> getAutoRevokeExemptionRequestedPackages();
+    method @IntRange(from=0) @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public int getRuntimePermissionsVersion();
+    method @NonNull public java.util.List<android.permission.PermissionManager.SplitPermissionInfo> getSplitPermissions();
+    method @RequiresPermission(anyOf={android.Manifest.permission.ADJUST_RUNTIME_PERMISSIONS_POLICY, android.Manifest.permission.UPGRADE_RUNTIME_PERMISSIONS}) public void setRuntimePermissionsVersion(@IntRange(from=0) int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void startOneTimePermissionSession(@NonNull String, long, int, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ONE_TIME_PERMISSION_SESSIONS) public void stopOneTimePermissionSession(@NonNull String);
+  }
+
+  public static final class PermissionManager.SplitPermissionInfo {
+    method @NonNull public java.util.List<java.lang.String> getNewPermissions();
+    method @NonNull public String getSplitPermission();
+    method public int getTargetSdk();
+  }
+
+  public final class RuntimePermissionPresentationInfo implements android.os.Parcelable {
+    ctor public RuntimePermissionPresentationInfo(@NonNull CharSequence, boolean, boolean);
+    method public int describeContents();
+    method @NonNull public CharSequence getLabel();
+    method public boolean isGranted();
+    method public boolean isStandard();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionPresentationInfo> CREATOR;
+  }
+
+  public final class RuntimePermissionUsageInfo implements android.os.Parcelable {
+    ctor public RuntimePermissionUsageInfo(@NonNull String, int);
+    method public int describeContents();
+    method public int getAppAccessCount();
+    method @NonNull public String getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.permission.RuntimePermissionUsageInfo> CREATOR;
+  }
+
+}
+
+package android.permissionpresenterservice {
+
+  @Deprecated public abstract class RuntimePermissionPresenterService extends android.app.Service {
+    ctor @Deprecated public RuntimePermissionPresenterService();
+    method @Deprecated public final void attachBaseContext(android.content.Context);
+    method @Deprecated public final android.os.IBinder onBind(android.content.Intent);
+    method @Deprecated public abstract java.util.List<android.content.pm.permission.RuntimePermissionPresentationInfo> onGetAppPermissions(@NonNull String);
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.permissionpresenterservice.RuntimePermissionPresenterService";
+  }
+
+}
+
+package android.preference {
+
+  @Deprecated public class PreferenceManager {
+    method @Deprecated public boolean isStorageCredentialProtected();
+    method @Deprecated public void setStorageCredentialProtected();
+  }
+
+}
+
+package android.print {
+
+  public final class PrintManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS) public void addPrintServiceRecommendationsChangeListener(@NonNull android.print.PrintManager.PrintServiceRecommendationsChangeListener, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES) public void addPrintServicesChangeListener(@NonNull android.print.PrintManager.PrintServicesChangeListener, @Nullable android.os.Handler);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS) public java.util.List<android.printservice.recommendation.RecommendationInfo> getPrintServiceRecommendations();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES) public java.util.List<android.printservice.PrintServiceInfo> getPrintServices(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICE_RECOMMENDATIONS) public void removePrintServiceRecommendationsChangeListener(@NonNull android.print.PrintManager.PrintServiceRecommendationsChangeListener);
+    method @RequiresPermission(android.Manifest.permission.READ_PRINT_SERVICES) public void removePrintServicesChangeListener(@NonNull android.print.PrintManager.PrintServicesChangeListener);
+    field public static final int ENABLED_SERVICES = 1; // 0x1
+  }
+
+  public static interface PrintManager.PrintServiceRecommendationsChangeListener {
+    method public void onPrintServiceRecommendationsChanged();
+  }
+
+  public static interface PrintManager.PrintServicesChangeListener {
+    method public void onPrintServicesChanged();
+  }
+
+}
+
+package android.printservice {
+
+  public final class PrintServiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.ComponentName getComponentName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.printservice.PrintServiceInfo> CREATOR;
+  }
+
+}
+
+package android.printservice.recommendation {
+
+  public final class RecommendationInfo implements android.os.Parcelable {
+    ctor public RecommendationInfo(@NonNull CharSequence, @NonNull CharSequence, @NonNull java.util.List<java.net.InetAddress>, boolean);
+    ctor @Deprecated public RecommendationInfo(@NonNull CharSequence, @NonNull CharSequence, @IntRange(from=0) int, boolean);
+    method public int describeContents();
+    method @NonNull public java.util.List<java.net.InetAddress> getDiscoveredPrinters();
+    method public CharSequence getName();
+    method public int getNumDiscoveredPrinters();
+    method public CharSequence getPackageName();
+    method public boolean recommendsMultiVendorService();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.printservice.recommendation.RecommendationInfo> CREATOR;
+  }
+
+  public abstract class RecommendationService extends android.app.Service {
+    ctor public RecommendationService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onConnected();
+    method public abstract void onDisconnected();
+    method public final void updateRecommendations(@Nullable java.util.List<android.printservice.recommendation.RecommendationInfo>);
+    field public static final String SERVICE_INTERFACE = "android.printservice.recommendation.RecommendationService";
+  }
+
+}
+
+package android.provider {
+
+  public class CallLog {
+    method @RequiresPermission(allOf={android.Manifest.permission.WRITE_CALL_LOG, android.Manifest.permission.INTERACT_ACROSS_USERS}) public static void storeCallComposerPicture(@NonNull android.content.Context, @NonNull java.io.InputStream, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.net.Uri,android.provider.CallLog.CallComposerLoggingException>);
+  }
+
+  public static class CallLog.CallComposerLoggingException extends java.lang.Throwable {
+    ctor public CallLog.CallComposerLoggingException(int);
+    method public int getErrorCode();
+    field public static final int ERROR_INPUT_CLOSED = 3; // 0x3
+    field public static final int ERROR_REMOTE_END_CLOSED = 1; // 0x1
+    field public static final int ERROR_STORAGE_FULL = 2; // 0x2
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  @Deprecated public static final class ContactsContract.MetadataSync implements android.provider.BaseColumns android.provider.ContactsContract.MetadataSyncColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_metadata";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_metadata";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+    field @Deprecated public static final String METADATA_AUTHORITY = "com.android.contacts.metadata";
+    field @Deprecated public static final android.net.Uri METADATA_AUTHORITY_URI;
+  }
+
+  @Deprecated protected static interface ContactsContract.MetadataSyncColumns {
+    field @Deprecated public static final String ACCOUNT_NAME = "account_name";
+    field @Deprecated public static final String ACCOUNT_TYPE = "account_type";
+    field @Deprecated public static final String DATA = "data";
+    field @Deprecated public static final String DATA_SET = "data_set";
+    field @Deprecated public static final String DELETED = "deleted";
+    field @Deprecated public static final String RAW_CONTACT_BACKUP_ID = "raw_contact_backup_id";
+  }
+
+  @Deprecated public static final class ContactsContract.MetadataSyncState implements android.provider.BaseColumns android.provider.ContactsContract.MetadataSyncStateColumns {
+    field @Deprecated public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_metadata_sync_state";
+    field @Deprecated public static final String CONTENT_TYPE = "vnd.android.cursor.dir/contact_metadata_sync_state";
+    field @Deprecated public static final android.net.Uri CONTENT_URI;
+  }
+
+  @Deprecated protected static interface ContactsContract.MetadataSyncStateColumns {
+    field @Deprecated public static final String ACCOUNT_NAME = "account_name";
+    field @Deprecated public static final String ACCOUNT_TYPE = "account_type";
+    field @Deprecated public static final String DATA_SET = "data_set";
+    field @Deprecated public static final String STATE = "state";
+  }
+
+  public static final class ContactsContract.SimContacts {
+    method @RequiresPermission("android.contacts.permission.MANAGE_SIM_ACCOUNTS") public static void addSimAccount(@NonNull android.content.ContentResolver, @NonNull String, @NonNull String, int, int);
+    method @RequiresPermission("android.contacts.permission.MANAGE_SIM_ACCOUNTS") public static void removeSimAccounts(@NonNull android.content.ContentResolver, int);
+  }
+
+  public final class DeviceConfig {
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static void addOnPropertiesChangedListener(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static boolean getBoolean(@NonNull String, @NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static float getFloat(@NonNull String, @NonNull String, float);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static int getInt(@NonNull String, @NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static long getLong(@NonNull String, @NonNull String, long);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static android.provider.DeviceConfig.Properties getProperties(@NonNull String, @NonNull java.lang.String...);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getProperty(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public static String getString(@NonNull String, @NonNull String, @Nullable String);
+    method public static void removeOnPropertiesChangedListener(@NonNull android.provider.DeviceConfig.OnPropertiesChangedListener);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static void resetToDefaults(int, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperties(@NonNull android.provider.DeviceConfig.Properties) throws android.provider.DeviceConfig.BadConfigException;
+    method @RequiresPermission(android.Manifest.permission.WRITE_DEVICE_CONFIG) public static boolean setProperty(@NonNull String, @NonNull String, @Nullable String, boolean);
+    field public static final String NAMESPACE_ACTIVITY_MANAGER = "activity_manager";
+    field public static final String NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT = "activity_manager_native_boot";
+    field public static final String NAMESPACE_APPSEARCH = "appsearch";
+    field public static final String NAMESPACE_APP_COMPAT = "app_compat";
+    field public static final String NAMESPACE_APP_HIBERNATION = "app_hibernation";
+    field public static final String NAMESPACE_ATTENTION_MANAGER_SERVICE = "attention_manager_service";
+    field public static final String NAMESPACE_AUTOFILL = "autofill";
+    field public static final String NAMESPACE_BATTERY_SAVER = "battery_saver";
+    field public static final String NAMESPACE_BIOMETRICS = "biometrics";
+    field public static final String NAMESPACE_BLOBSTORE = "blobstore";
+    field public static final String NAMESPACE_BLUETOOTH = "bluetooth";
+    field public static final String NAMESPACE_CLIPBOARD = "clipboard";
+    field public static final String NAMESPACE_CONNECTIVITY = "connectivity";
+    field public static final String NAMESPACE_CONTENT_CAPTURE = "content_capture";
+    field @Deprecated public static final String NAMESPACE_DEX_BOOT = "dex_boot";
+    field public static final String NAMESPACE_DISPLAY_MANAGER = "display_manager";
+    field public static final String NAMESPACE_GAME_DRIVER = "game_driver";
+    field public static final String NAMESPACE_INPUT_NATIVE_BOOT = "input_native_boot";
+    field public static final String NAMESPACE_INTELLIGENCE_ATTENTION = "intelligence_attention";
+    field public static final String NAMESPACE_LOCATION = "location";
+    field public static final String NAMESPACE_MEDIA = "media";
+    field public static final String NAMESPACE_MEDIA_NATIVE = "media_native";
+    field public static final String NAMESPACE_NETD_NATIVE = "netd_native";
+    field public static final String NAMESPACE_OTA = "ota";
+    field public static final String NAMESPACE_PACKAGE_MANAGER_SERVICE = "package_manager_service";
+    field public static final String NAMESPACE_PERMISSIONS = "permissions";
+    field public static final String NAMESPACE_PRIVACY = "privacy";
+    field public static final String NAMESPACE_PROFCOLLECT_NATIVE_BOOT = "profcollect_native_boot";
+    field public static final String NAMESPACE_REBOOT_READINESS = "reboot_readiness";
+    field public static final String NAMESPACE_ROLLBACK = "rollback";
+    field public static final String NAMESPACE_ROLLBACK_BOOT = "rollback_boot";
+    field public static final String NAMESPACE_RUNTIME = "runtime";
+    field public static final String NAMESPACE_RUNTIME_NATIVE = "runtime_native";
+    field public static final String NAMESPACE_RUNTIME_NATIVE_BOOT = "runtime_native_boot";
+    field public static final String NAMESPACE_SCHEDULER = "scheduler";
+    field public static final String NAMESPACE_STATSD_JAVA = "statsd_java";
+    field public static final String NAMESPACE_STATSD_JAVA_BOOT = "statsd_java_boot";
+    field public static final String NAMESPACE_STATSD_NATIVE = "statsd_native";
+    field public static final String NAMESPACE_STATSD_NATIVE_BOOT = "statsd_native_boot";
+    field @Deprecated public static final String NAMESPACE_STORAGE = "storage";
+    field public static final String NAMESPACE_STORAGE_NATIVE_BOOT = "storage_native_boot";
+    field public static final String NAMESPACE_SYSTEMUI = "systemui";
+    field public static final String NAMESPACE_SYSTEM_TIME = "system_time";
+    field public static final String NAMESPACE_TELEPHONY = "telephony";
+    field public static final String NAMESPACE_TEXTCLASSIFIER = "textclassifier";
+    field public static final String NAMESPACE_WINDOW_MANAGER_NATIVE_BOOT = "window_manager_native_boot";
+  }
+
+  public static class DeviceConfig.BadConfigException extends java.lang.Exception {
+    ctor public DeviceConfig.BadConfigException();
+  }
+
+  public static interface DeviceConfig.OnPropertiesChangedListener {
+    method public void onPropertiesChanged(@NonNull android.provider.DeviceConfig.Properties);
+  }
+
+  public static class DeviceConfig.Properties {
+    method public boolean getBoolean(@NonNull String, boolean);
+    method public float getFloat(@NonNull String, float);
+    method public int getInt(@NonNull String, int);
+    method @NonNull public java.util.Set<java.lang.String> getKeyset();
+    method public long getLong(@NonNull String, long);
+    method @NonNull public String getNamespace();
+    method @Nullable public String getString(@NonNull String, @Nullable String);
+  }
+
+  public static final class DeviceConfig.Properties.Builder {
+    ctor public DeviceConfig.Properties.Builder(@NonNull String);
+    method @NonNull public android.provider.DeviceConfig.Properties build();
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setBoolean(@NonNull String, boolean);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setFloat(@NonNull String, float);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setInt(@NonNull String, int);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setLong(@NonNull String, long);
+    method @NonNull public android.provider.DeviceConfig.Properties.Builder setString(@NonNull String, @Nullable String);
+  }
+
+  public final class DocumentsContract {
+    method @NonNull public static android.net.Uri buildDocumentUriAsUser(@NonNull String, @NonNull String, @NonNull android.os.UserHandle);
+    method public static boolean isManageMode(@NonNull android.net.Uri);
+    method @NonNull public static android.net.Uri setManageMode(@NonNull android.net.Uri);
+    field public static final String ACTION_DOCUMENT_ROOT_SETTINGS = "android.provider.action.DOCUMENT_ROOT_SETTINGS";
+    field public static final String ACTION_MANAGE_DOCUMENT = "android.provider.action.MANAGE_DOCUMENT";
+    field public static final String DOWNLOADS_PROVIDER_AUTHORITY = "downloads";
+    field public static final String EXTERNAL_STORAGE_PROVIDER_AUTHORITY = "com.android.externalstorage.documents";
+    field public static final String EXTRA_SHOW_ADVANCED = "android.provider.extra.SHOW_ADVANCED";
+  }
+
+  public static final class DocumentsContract.Root {
+    field public static final int FLAG_ADVANCED = 65536; // 0x10000
+    field public static final int FLAG_HAS_SETTINGS = 131072; // 0x20000
+    field public static final int FLAG_REMOVABLE_SD = 262144; // 0x40000
+    field public static final int FLAG_REMOVABLE_USB = 524288; // 0x80000
+  }
+
+  public final class MediaStore {
+    method @NonNull public static android.net.Uri rewriteToLegacy(@NonNull android.net.Uri);
+    method @NonNull @WorkerThread public static android.net.Uri scanFile(@NonNull android.content.ContentResolver, @NonNull java.io.File);
+    method @WorkerThread public static void scanVolume(@NonNull android.content.ContentResolver, @NonNull String);
+    method @WorkerThread public static void waitForIdle(@NonNull android.content.ContentResolver);
+    field public static final String AUTHORITY_LEGACY = "media_legacy";
+    field @NonNull public static final android.net.Uri AUTHORITY_LEGACY_URI;
+    field public static final String QUERY_ARG_DEFER_SCAN = "android:query-arg-defer-scan";
+  }
+
+  public abstract class SearchIndexableData {
+    ctor public SearchIndexableData();
+    ctor public SearchIndexableData(android.content.Context);
+    field public String className;
+    field public android.content.Context context;
+    field public boolean enabled;
+    field public int iconResId;
+    field public String intentAction;
+    field public String intentTargetClass;
+    field public String intentTargetPackage;
+    field public String key;
+    field public java.util.Locale locale;
+    field public String packageName;
+    field public int rank;
+    field public int userId;
+  }
+
+  public class SearchIndexableResource extends android.provider.SearchIndexableData {
+    ctor public SearchIndexableResource(int, int, String, int);
+    ctor public SearchIndexableResource(android.content.Context);
+    field public int xmlResId;
+  }
+
+  public class SearchIndexablesContract {
+    ctor public SearchIndexablesContract();
+    field public static final int COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE = 0; // 0x0
+    field public static final int COLUMN_INDEX_RAW_CLASS_NAME = 7; // 0x7
+    field public static final int COLUMN_INDEX_RAW_ENTRIES = 4; // 0x4
+    field public static final int COLUMN_INDEX_RAW_ICON_RESID = 8; // 0x8
+    field public static final int COLUMN_INDEX_RAW_INTENT_ACTION = 9; // 0x9
+    field public static final int COLUMN_INDEX_RAW_INTENT_TARGET_CLASS = 11; // 0xb
+    field public static final int COLUMN_INDEX_RAW_INTENT_TARGET_PACKAGE = 10; // 0xa
+    field public static final int COLUMN_INDEX_RAW_KEY = 12; // 0xc
+    field public static final int COLUMN_INDEX_RAW_KEYWORDS = 5; // 0x5
+    field public static final int COLUMN_INDEX_RAW_RANK = 0; // 0x0
+    field public static final int COLUMN_INDEX_RAW_SCREEN_TITLE = 6; // 0x6
+    field public static final int COLUMN_INDEX_RAW_SUMMARY_OFF = 3; // 0x3
+    field public static final int COLUMN_INDEX_RAW_SUMMARY_ON = 2; // 0x2
+    field public static final int COLUMN_INDEX_RAW_TITLE = 1; // 0x1
+    field public static final int COLUMN_INDEX_RAW_USER_ID = 13; // 0xd
+    field public static final int COLUMN_INDEX_XML_RES_CLASS_NAME = 2; // 0x2
+    field public static final int COLUMN_INDEX_XML_RES_ICON_RESID = 3; // 0x3
+    field public static final int COLUMN_INDEX_XML_RES_INTENT_ACTION = 4; // 0x4
+    field public static final int COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS = 6; // 0x6
+    field public static final int COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE = 5; // 0x5
+    field public static final int COLUMN_INDEX_XML_RES_RANK = 0; // 0x0
+    field public static final int COLUMN_INDEX_XML_RES_RESID = 1; // 0x1
+    field public static final String DYNAMIC_INDEXABLES_RAW = "dynamic_indexables_raw";
+    field public static final String DYNAMIC_INDEXABLES_RAW_PATH = "settings/dynamic_indexables_raw";
+    field public static final String INDEXABLES_RAW = "indexables_raw";
+    field public static final String[] INDEXABLES_RAW_COLUMNS;
+    field public static final String INDEXABLES_RAW_PATH = "settings/indexables_raw";
+    field public static final String INDEXABLES_XML_RES = "indexables_xml_res";
+    field public static final String[] INDEXABLES_XML_RES_COLUMNS;
+    field public static final String INDEXABLES_XML_RES_PATH = "settings/indexables_xml_res";
+    field public static final String NON_INDEXABLES_KEYS = "non_indexables_key";
+    field public static final String[] NON_INDEXABLES_KEYS_COLUMNS;
+    field public static final String NON_INDEXABLES_KEYS_PATH = "settings/non_indexables_key";
+    field public static final String PROVIDER_INTERFACE = "android.content.action.SEARCH_INDEXABLES_PROVIDER";
+    field public static final String SLICE_URI_PAIRS = "slice_uri_pairs";
+    field @NonNull public static final String[] SLICE_URI_PAIRS_COLUMNS;
+    field public static final String SLICE_URI_PAIRS_PATH = "settings/slice_uri_pairs";
+  }
+
+  public static class SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_CLASS_NAME = "className";
+    field public static final String COLUMN_ICON_RESID = "iconResId";
+    field public static final String COLUMN_INTENT_ACTION = "intentAction";
+    field public static final String COLUMN_INTENT_TARGET_CLASS = "intentTargetClass";
+    field public static final String COLUMN_INTENT_TARGET_PACKAGE = "intentTargetPackage";
+    field public static final String COLUMN_RANK = "rank";
+  }
+
+  public static final class SearchIndexablesContract.NonIndexableKey extends android.provider.SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_KEY_VALUE = "key";
+    field public static final String MIME_TYPE = "vnd.android.cursor.dir/non_indexables_key";
+  }
+
+  public static final class SearchIndexablesContract.RawData extends android.provider.SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_ENTRIES = "entries";
+    field public static final String COLUMN_KEY = "key";
+    field public static final String COLUMN_KEYWORDS = "keywords";
+    field public static final String COLUMN_SCREEN_TITLE = "screenTitle";
+    field public static final String COLUMN_SUMMARY_OFF = "summaryOff";
+    field public static final String COLUMN_SUMMARY_ON = "summaryOn";
+    field public static final String COLUMN_TITLE = "title";
+    field public static final String COLUMN_USER_ID = "user_id";
+    field public static final String MIME_TYPE = "vnd.android.cursor.dir/indexables_raw";
+  }
+
+  public static final class SearchIndexablesContract.SliceUriPairColumns {
+    field public static final String KEY = "key";
+    field public static final String SLICE_URI = "slice_uri";
+  }
+
+  public static final class SearchIndexablesContract.XmlResource extends android.provider.SearchIndexablesContract.BaseColumns {
+    field public static final String COLUMN_XML_RESID = "xmlResId";
+    field public static final String MIME_TYPE = "vnd.android.cursor.dir/indexables_xml_res";
+  }
+
+  public abstract class SearchIndexablesProvider extends android.content.ContentProvider {
+    ctor public SearchIndexablesProvider();
+    method public final int delete(android.net.Uri, String, String[]);
+    method public String getType(android.net.Uri);
+    method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public android.database.Cursor query(android.net.Uri, String[], String, String[], String);
+    method @Nullable public android.database.Cursor queryDynamicRawData(@Nullable String[]);
+    method public abstract android.database.Cursor queryNonIndexableKeys(String[]);
+    method public abstract android.database.Cursor queryRawData(String[]);
+    method @Nullable public android.database.Cursor querySliceUriPairs();
+    method public abstract android.database.Cursor queryXmlResources(String[]);
+    method public final int update(android.net.Uri, android.content.ContentValues, String, String[]);
+  }
+
+  public final class Settings {
+    method @Deprecated public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, boolean);
+    method public static boolean checkAndNoteWriteSettingsOperation(@NonNull android.content.Context, int, @NonNull String, @Nullable String, boolean);
+    field public static final String ACTION_ACCESSIBILITY_DETAILS_SETTINGS = "android.settings.ACCESSIBILITY_DETAILS_SETTINGS";
+    field public static final String ACTION_BUGREPORT_HANDLER_SETTINGS = "android.settings.BUGREPORT_HANDLER_SETTINGS";
+    field public static final String ACTION_ENTERPRISE_PRIVACY_SETTINGS = "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
+    field public static final String ACTION_LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS = "android.settings.LOCATION_CONTROLLER_EXTRA_PACKAGE_SETTINGS";
+    field public static final String ACTION_MANAGE_APP_OVERLAY_PERMISSION = "android.settings.MANAGE_APP_OVERLAY_PERMISSION";
+    field public static final String ACTION_MANAGE_DOMAIN_URLS = "android.settings.MANAGE_DOMAIN_URLS";
+    field public static final String ACTION_MANAGE_MORE_DEFAULT_APPS_SETTINGS = "android.settings.MANAGE_MORE_DEFAULT_APPS_SETTINGS";
+    field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_DETAIL_SETTINGS = "android.settings.NOTIFICATION_POLICY_ACCESS_DETAIL_SETTINGS";
+    field public static final String ACTION_REQUEST_ENABLE_CONTENT_CAPTURE = "android.settings.REQUEST_ENABLE_CONTENT_CAPTURE";
+    field public static final String ACTION_SHOW_ADMIN_SUPPORT_DETAILS = "android.settings.SHOW_ADMIN_SUPPORT_DETAILS";
+    field public static final String ACTION_TETHER_PROVISIONING_UI = "android.settings.TETHER_PROVISIONING_UI";
+    field public static final String ACTION_TETHER_SETTINGS = "android.settings.TETHER_SETTINGS";
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, @Nullable String, boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static void resetToDefaults(@NonNull android.content.ContentResolver, @Nullable String);
+    field public static final String AIRPLANE_MODE_TOGGLEABLE_RADIOS = "airplane_mode_toggleable_radios";
+    field public static final String APP_STANDBY_ENABLED = "app_standby_enabled";
+    field public static final String AUTOFILL_COMPAT_MODE_ALLOWED_PACKAGES = "autofill_compat_mode_allowed_packages";
+    field public static final String CARRIER_APP_NAMES = "carrier_app_names";
+    field public static final String CARRIER_APP_WHITELIST = "carrier_app_whitelist";
+    field public static final String DEFAULT_SM_DP_PLUS = "default_sm_dp_plus";
+    field public static final String DEVICE_DEMO_MODE = "device_demo_mode";
+    field public static final String DEVICE_PROVISIONING_MOBILE_DATA_ENABLED = "device_provisioning_mobile_data";
+    field public static final String EUICC_PROVISIONED = "euicc_provisioned";
+    field public static final String EUICC_SUPPORTED_COUNTRIES = "euicc_supported_countries";
+    field public static final String EUICC_UNSUPPORTED_COUNTRIES = "euicc_unsupported_countries";
+    field public static final String INSTALL_CARRIER_APP_NOTIFICATION_PERSISTENT = "install_carrier_app_notification_persistent";
+    field public static final String INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS = "install_carrier_app_notification_sleep_millis";
+    field public static final String OTA_DISABLE_AUTOMATIC_UPDATE = "ota_disable_automatic_update";
+    field public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
+    field public static final String TETHER_OFFLOAD_DISABLED = "tether_offload_disabled";
+    field public static final String TETHER_SUPPORTED = "tether_supported";
+    field public static final String THEATER_MODE_ON = "theater_mode_on";
+    field public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess";
+    field public static final String WIFI_BADGING_THRESHOLDS = "wifi_badging_thresholds";
+    field @Deprecated public static final String WIFI_WAKEUP_ENABLED = "wifi_wakeup_enabled";
+  }
+
+  public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, @Nullable String, boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static void resetToDefaults(@NonNull android.content.ContentResolver, @Nullable String);
+    field @Deprecated public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED = "accessibility_display_magnification_navbar_enabled";
+    field public static final String ASSIST_GESTURE_SETUP_COMPLETE = "assist_gesture_setup_complete";
+    field public static final String AUTOFILL_FEATURE_FIELD_CLASSIFICATION = "autofill_field_classification";
+    field public static final String AUTOFILL_USER_DATA_MAX_CATEGORY_COUNT = "autofill_user_data_max_category_count";
+    field public static final String AUTOFILL_USER_DATA_MAX_FIELD_CLASSIFICATION_IDS_SIZE = "autofill_user_data_max_field_classification_size";
+    field public static final String AUTOFILL_USER_DATA_MAX_USER_DATA_SIZE = "autofill_user_data_max_user_data_size";
+    field public static final String AUTOFILL_USER_DATA_MAX_VALUE_LENGTH = "autofill_user_data_max_value_length";
+    field public static final String AUTOFILL_USER_DATA_MIN_VALUE_LENGTH = "autofill_user_data_min_value_length";
+    field public static final String AUTO_REVOKE_DISABLED = "auto_revoke_disabled";
+    field public static final String COMPLETED_CATEGORY_PREFIX = "suggested.completed_category.";
+    field public static final String DOZE_ALWAYS_ON = "doze_always_on";
+    field public static final String HUSH_GESTURE_USED = "hush_gesture_used";
+    field public static final String INSTANT_APPS_ENABLED = "instant_apps_enabled";
+    field public static final String LAST_SETUP_SHOWN = "last_setup_shown";
+    field public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS = "location_access_check_delay_millis";
+    field public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS = "location_access_check_interval_millis";
+    field public static final int LOCATION_MODE_ON = 3; // 0x3
+    field @Deprecated public static final String LOCATION_PERMISSIONS_UPGRADE_TO_Q_MODE = "location_permissions_upgrade_to_q_mode";
+    field public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS = "lock_screen_allow_private_notifications";
+    field public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS = "lock_screen_show_notifications";
+    field public static final String ODI_CAPTIONS_ENABLED = "odi_captions_enabled";
+    field public static final String THEME_CUSTOMIZATION_OVERLAY_PACKAGES = "theme_customization_overlay_packages";
+    field public static final String UI_TRANSLATION_ENABLED = "ui_translation_enabled";
+    field public static final String USER_SETUP_COMPLETE = "user_setup_complete";
+    field public static final int USER_SETUP_PERSONALIZATION_COMPLETE = 10; // 0xa
+    field public static final int USER_SETUP_PERSONALIZATION_NOT_STARTED = 0; // 0x0
+    field public static final int USER_SETUP_PERSONALIZATION_PAUSED = 2; // 0x2
+    field public static final int USER_SETUP_PERSONALIZATION_STARTED = 1; // 0x1
+    field public static final String USER_SETUP_PERSONALIZATION_STATE = "user_setup_personalization_state";
+    field public static final String VOLUME_HUSH_GESTURE = "volume_hush_gesture";
+    field public static final int VOLUME_HUSH_MUTE = 2; // 0x2
+    field public static final int VOLUME_HUSH_OFF = 0; // 0x0
+    field public static final int VOLUME_HUSH_VIBRATE = 1; // 0x1
+  }
+
+  public static final class Settings.System extends android.provider.Settings.NameValueTable {
+    method @RequiresPermission(android.Manifest.permission.MODIFY_SETTINGS_OVERRIDEABLE_BY_RESTORE) public static boolean putString(@NonNull android.content.ContentResolver, @NonNull String, @Nullable String, boolean);
+  }
+
+  public static final class SimPhonebookContract.SimRecords {
+    field public static final String QUERY_ARG_PIN2 = "android:query-arg-pin2";
+  }
+
+  public static final class Telephony.Carriers implements android.provider.BaseColumns {
+    field public static final String APN_SET_ID = "apn_set_id";
+    field public static final int CARRIER_EDITED = 4; // 0x4
+    field public static final String EDITED_STATUS = "edited";
+    field public static final int MATCH_ALL_APN_SET_ID = -1; // 0xffffffff
+    field public static final String MAX_CONNECTIONS = "max_conns";
+    field public static final String MODEM_PERSIST = "modem_cognitive";
+    field public static final String MTU = "mtu";
+    field public static final int NO_APN_SET_ID = 0; // 0x0
+    field public static final String TIME_LIMIT_FOR_MAX_CONNECTIONS = "max_conns_time";
+    field public static final int UNEDITED = 0; // 0x0
+    field public static final int USER_DELETED = 2; // 0x2
+    field public static final String USER_EDITABLE = "user_editable";
+    field public static final int USER_EDITED = 1; // 0x1
+    field public static final String USER_VISIBLE = "user_visible";
+    field public static final String WAIT_TIME_RETRY = "wait_time";
+  }
+
+  public static final class Telephony.CellBroadcasts implements android.provider.BaseColumns {
+    field @NonNull public static final String AUTHORITY_LEGACY = "cellbroadcast-legacy";
+    field @NonNull public static final android.net.Uri AUTHORITY_LEGACY_URI;
+    field @NonNull public static final String CALL_METHOD_GET_PREFERENCE = "get_preference";
+    field public static final String CID = "cid";
+    field public static final String CMAS_CATEGORY = "cmas_category";
+    field public static final String CMAS_CERTAINTY = "cmas_certainty";
+    field public static final String CMAS_MESSAGE_CLASS = "cmas_message_class";
+    field public static final String CMAS_RESPONSE_TYPE = "cmas_response_type";
+    field public static final String CMAS_SEVERITY = "cmas_severity";
+    field public static final String CMAS_URGENCY = "cmas_urgency";
+    field @NonNull public static final android.net.Uri CONTENT_URI;
+    field public static final String DATA_CODING_SCHEME = "dcs";
+    field public static final String DEFAULT_SORT_ORDER = "date DESC";
+    field public static final String DELIVERY_TIME = "date";
+    field public static final String ETWS_IS_PRIMARY = "etws_is_primary";
+    field public static final String ETWS_WARNING_TYPE = "etws_warning_type";
+    field public static final String GEOGRAPHICAL_SCOPE = "geo_scope";
+    field public static final String GEOMETRIES = "geometries";
+    field public static final String LAC = "lac";
+    field public static final String LANGUAGE_CODE = "language";
+    field public static final String LOCATION_CHECK_TIME = "location_check_time";
+    field public static final String MAXIMUM_WAIT_TIME = "maximum_wait_time";
+    field public static final String MESSAGE_BODY = "body";
+    field public static final String MESSAGE_BROADCASTED = "message_broadcasted";
+    field public static final String MESSAGE_DISPLAYED = "message_displayed";
+    field public static final String MESSAGE_FORMAT = "format";
+    field @NonNull @RequiresPermission(android.Manifest.permission.READ_CELL_BROADCASTS) public static final android.net.Uri MESSAGE_HISTORY_URI;
+    field public static final String MESSAGE_PRIORITY = "priority";
+    field public static final String MESSAGE_READ = "read";
+    field public static final String PLMN = "plmn";
+    field public static final String RECEIVED_TIME = "received_time";
+    field public static final String SERIAL_NUMBER = "serial_number";
+    field public static final String SERVICE_CATEGORY = "service_category";
+    field public static final String SLOT_INDEX = "slot_index";
+    field public static final String SUBSCRIPTION_ID = "sub_id";
+  }
+
+  public static final class Telephony.CellBroadcasts.Preference {
+    field @NonNull public static final String ENABLE_ALERT_VIBRATION_PREF = "enable_alert_vibrate";
+    field @NonNull public static final String ENABLE_AREA_UPDATE_INFO_PREF = "enable_area_update_info_alerts";
+    field @NonNull public static final String ENABLE_CMAS_AMBER_PREF = "enable_cmas_amber_alerts";
+    field @NonNull public static final String ENABLE_CMAS_EXTREME_THREAT_PREF = "enable_cmas_extreme_threat_alerts";
+    field @NonNull public static final String ENABLE_CMAS_IN_SECOND_LANGUAGE_PREF = "receive_cmas_in_second_language";
+    field @NonNull public static final String ENABLE_CMAS_PRESIDENTIAL_PREF = "enable_cmas_presidential_alerts";
+    field @NonNull public static final String ENABLE_CMAS_SEVERE_THREAT_PREF = "enable_cmas_severe_threat_alerts";
+    field @NonNull public static final String ENABLE_EMERGENCY_PERF = "enable_emergency_alerts";
+    field @NonNull public static final String ENABLE_PUBLIC_SAFETY_PREF = "enable_public_safety_messages";
+    field @NonNull public static final String ENABLE_STATE_LOCAL_TEST_PREF = "enable_state_local_test_alerts";
+    field @NonNull public static final String ENABLE_TEST_ALERT_PREF = "enable_test_alerts";
+  }
+
+  public static final class Telephony.Sms.Intents {
+    field public static final String ACTION_SMS_EMERGENCY_CB_RECEIVED = "android.provider.action.SMS_EMERGENCY_CB_RECEIVED";
+  }
+
+  public final class TimeZoneRulesDataContract {
+    field public static final String AUTHORITY = "com.android.timezone";
+  }
+
+  public static final class TimeZoneRulesDataContract.Operation {
+    field public static final String COLUMN_DISTRO_MAJOR_VERSION = "distro_major_version";
+    field public static final String COLUMN_DISTRO_MINOR_VERSION = "distro_minor_version";
+    field public static final String COLUMN_REVISION = "revision";
+    field public static final String COLUMN_RULES_VERSION = "rules_version";
+    field public static final String COLUMN_TYPE = "type";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final String TYPE_INSTALL = "INSTALL";
+    field public static final String TYPE_NO_OP = "NOOP";
+    field public static final String TYPE_UNINSTALL = "UNINSTALL";
+  }
+
+}
+
+package android.scheduling {
+
+  public final class RebootReadinessManager {
+    method @RequiresPermission(android.Manifest.permission.SIGNAL_REBOOT_READINESS) public void addRequestRebootReadinessStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.scheduling.RebootReadinessManager.RequestRebootReadinessStatusListener);
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public void cancelPendingReboot();
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public boolean isReadyToReboot();
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public void markRebootPending();
+    method @RequiresPermission(android.Manifest.permission.SIGNAL_REBOOT_READINESS) public void removeRequestRebootReadinessStatusListener(@NonNull android.scheduling.RebootReadinessManager.RequestRebootReadinessStatusListener);
+    field public static final String ACTION_REBOOT_READY = "android.scheduling.action.REBOOT_READY";
+    field public static final String EXTRA_IS_READY_TO_REBOOT = "android.scheduling.extra.IS_READY_TO_REBOOT";
+  }
+
+  public static final class RebootReadinessManager.RebootReadinessStatus {
+    ctor public RebootReadinessManager.RebootReadinessStatus(boolean, long, @NonNull String);
+    method public long getEstimatedFinishTime();
+    method @NonNull public String getLogSubsystemName();
+    method public boolean isReadyToReboot();
+  }
+
+  public static interface RebootReadinessManager.RequestRebootReadinessStatusListener {
+    method @NonNull public android.scheduling.RebootReadinessManager.RebootReadinessStatus onRequestRebootReadinessStatus();
+  }
+
+}
+
+package android.se.omapi {
+
+  public final class Reader {
+    method @RequiresPermission(android.Manifest.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION) public boolean reset();
+  }
+
+}
+
+package android.security {
+
+  public final class KeyChain {
+    method @Nullable @WorkerThread public static String getWifiKeyGrantAsUser(@NonNull android.content.Context, @NonNull android.os.UserHandle, @NonNull String);
+    method @WorkerThread public static boolean hasWifiKeyGrantAsUser(@NonNull android.content.Context, @NonNull android.os.UserHandle, @NonNull String);
+  }
+
+}
+
+package android.security.keystore {
+
+  public class AndroidKeyStoreProvider extends java.security.Provider {
+    method @NonNull public static java.security.KeyStore getKeyStoreForUid(int) throws java.security.KeyStoreException, java.security.NoSuchProviderException;
+  }
+
+  public abstract class AttestationUtils {
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static java.security.cert.X509Certificate[] attestDeviceIds(android.content.Context, @NonNull int[], @NonNull byte[]) throws android.security.keystore.DeviceIdAttestationException;
+    field public static final int ID_TYPE_IMEI = 2; // 0x2
+    field public static final int ID_TYPE_MEID = 3; // 0x3
+    field public static final int ID_TYPE_SERIAL = 1; // 0x1
+    field public static final int USE_INDIVIDUAL_ATTESTATION = 4; // 0x4
+  }
+
+  public class DeviceIdAttestationException extends java.lang.Exception {
+    ctor public DeviceIdAttestationException(@Nullable String);
+    ctor public DeviceIdAttestationException(@Nullable String, @Nullable Throwable);
+  }
+
+  public final class KeyGenParameterSpec implements java.security.spec.AlgorithmParameterSpec {
+    method @NonNull public int[] getAttestationIds();
+    method public int getNamespace();
+  }
+
+  public static final class KeyGenParameterSpec.Builder {
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setAttestationIds(@NonNull int[]);
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setNamespace(int);
+    method @Deprecated @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUid(int);
+  }
+
+  public abstract class KeyProperties {
+    field public static final int NAMESPACE_APPLICATION = -1; // 0xffffffff
+    field public static final int NAMESPACE_WIFI = 102; // 0x66
+  }
+
+}
+
+package android.security.keystore.recovery {
+
+  public class DecryptionFailedException extends java.security.GeneralSecurityException {
+    ctor public DecryptionFailedException(String);
+  }
+
+  public class InternalRecoveryServiceException extends java.security.GeneralSecurityException {
+    ctor public InternalRecoveryServiceException(String);
+    ctor public InternalRecoveryServiceException(String, Throwable);
+  }
+
+  public final class KeyChainProtectionParams implements android.os.Parcelable {
+    method public void clearSecret();
+    method public int describeContents();
+    method @NonNull public android.security.keystore.recovery.KeyDerivationParams getKeyDerivationParams();
+    method public int getLockScreenUiFormat();
+    method @NonNull public byte[] getSecret();
+    method public int getUserSecretType();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyChainProtectionParams> CREATOR;
+    field public static final int TYPE_LOCKSCREEN = 100; // 0x64
+    field public static final int UI_FORMAT_PASSWORD = 2; // 0x2
+    field public static final int UI_FORMAT_PATTERN = 3; // 0x3
+    field public static final int UI_FORMAT_PIN = 1; // 0x1
+  }
+
+  public static class KeyChainProtectionParams.Builder {
+    ctor public KeyChainProtectionParams.Builder();
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams build();
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setKeyDerivationParams(@NonNull android.security.keystore.recovery.KeyDerivationParams);
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setLockScreenUiFormat(int);
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setSecret(@NonNull byte[]);
+    method @NonNull public android.security.keystore.recovery.KeyChainProtectionParams.Builder setUserSecretType(int);
+  }
+
+  public final class KeyChainSnapshot implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getCounterId();
+    method @NonNull public byte[] getEncryptedRecoveryKeyBlob();
+    method @NonNull public java.util.List<android.security.keystore.recovery.KeyChainProtectionParams> getKeyChainProtectionParams();
+    method public int getMaxAttempts();
+    method @NonNull public byte[] getServerParams();
+    method public int getSnapshotVersion();
+    method @NonNull public java.security.cert.CertPath getTrustedHardwareCertPath();
+    method @NonNull public java.util.List<android.security.keystore.recovery.WrappedApplicationKey> getWrappedApplicationKeys();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyChainSnapshot> CREATOR;
+  }
+
+  public final class KeyDerivationParams implements android.os.Parcelable {
+    method @NonNull public static android.security.keystore.recovery.KeyDerivationParams createScryptParams(@NonNull byte[], int);
+    method @NonNull public static android.security.keystore.recovery.KeyDerivationParams createSha256Params(@NonNull byte[]);
+    method public int describeContents();
+    method public int getAlgorithm();
+    method public int getMemoryDifficulty();
+    method @NonNull public byte[] getSalt();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ALGORITHM_SCRYPT = 2; // 0x2
+    field public static final int ALGORITHM_SHA256 = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.KeyDerivationParams> CREATOR;
+  }
+
+  public class LockScreenRequiredException extends java.security.GeneralSecurityException {
+    ctor public LockScreenRequiredException(String);
+  }
+
+  public class RecoveryController {
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public android.security.keystore.recovery.RecoverySession createRecoverySession();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key generateKey(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key generateKey(@NonNull String, @Nullable byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.util.List<java.lang.String> getAliases() throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public static android.security.keystore.recovery.RecoveryController getInstance(@NonNull android.content.Context);
+    method @Nullable @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key getKey(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException, java.security.UnrecoverableKeyException;
+    method @Nullable @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public android.security.keystore.recovery.KeyChainSnapshot getKeyChainSnapshot() throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public int[] getRecoverySecretTypes() throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public int getRecoveryStatus(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.util.Map<java.lang.String,java.security.cert.X509Certificate> getRootCertificates();
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key importKey(@NonNull String, @NonNull byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.security.Key importKey(@NonNull String, @NonNull byte[], @Nullable byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.LockScreenRequiredException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void initRecoveryService(@NonNull String, @NonNull byte[], @NonNull byte[]) throws java.security.cert.CertificateException, android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public static boolean isRecoverableKeyStoreEnabled(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void removeKey(@NonNull String) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setRecoverySecretTypes(@NonNull int[]) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setRecoveryStatus(@NonNull String, int) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setServerParams(@NonNull byte[]) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void setSnapshotCreatedPendingIntent(@Nullable android.app.PendingIntent) throws android.security.keystore.recovery.InternalRecoveryServiceException;
+    field public static final int RECOVERY_STATUS_PERMANENT_FAILURE = 3; // 0x3
+    field public static final int RECOVERY_STATUS_SYNCED = 0; // 0x0
+    field public static final int RECOVERY_STATUS_SYNC_IN_PROGRESS = 1; // 0x1
+  }
+
+  public class RecoverySession implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public void close();
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public java.util.Map<java.lang.String,java.security.Key> recoverKeyChainSnapshot(@NonNull byte[], @NonNull java.util.List<android.security.keystore.recovery.WrappedApplicationKey>) throws android.security.keystore.recovery.DecryptionFailedException, android.security.keystore.recovery.InternalRecoveryServiceException, android.security.keystore.recovery.SessionExpiredException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public byte[] start(@NonNull String, @NonNull java.security.cert.CertPath, @NonNull byte[], @NonNull byte[], @NonNull java.util.List<android.security.keystore.recovery.KeyChainProtectionParams>) throws java.security.cert.CertificateException, android.security.keystore.recovery.InternalRecoveryServiceException;
+  }
+
+  public class SessionExpiredException extends java.security.GeneralSecurityException {
+    ctor public SessionExpiredException(String);
+  }
+
+  public final class WrappedApplicationKey implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getAlias();
+    method @NonNull public byte[] getEncryptedKeyMaterial();
+    method @Nullable public byte[] getMetadata();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.security.keystore.recovery.WrappedApplicationKey> CREATOR;
+  }
+
+  public static class WrappedApplicationKey.Builder {
+    ctor public WrappedApplicationKey.Builder();
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey build();
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey.Builder setAlias(@NonNull String);
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey.Builder setEncryptedKeyMaterial(@NonNull byte[]);
+    method @NonNull public android.security.keystore.recovery.WrappedApplicationKey.Builder setMetadata(@Nullable byte[]);
+  }
+
+}
+
+package android.service.appprediction {
+
+  public abstract class AppPredictionService extends android.app.Service {
+    ctor public AppPredictionService();
+    method @MainThread public abstract void onAppTargetEvent(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull android.app.prediction.AppTargetEvent);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onCreatePredictionSession(@NonNull android.app.prediction.AppPredictionContext, @NonNull android.app.prediction.AppPredictionSessionId);
+    method @MainThread public void onDestroyPredictionSession(@NonNull android.app.prediction.AppPredictionSessionId);
+    method @MainThread public abstract void onLaunchLocationShown(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull String, @NonNull java.util.List<android.app.prediction.AppTargetId>);
+    method @MainThread public abstract void onRequestPredictionUpdate(@NonNull android.app.prediction.AppPredictionSessionId);
+    method @MainThread public abstract void onSortAppTargets(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull java.util.List<android.app.prediction.AppTarget>, @NonNull android.os.CancellationSignal, @NonNull java.util.function.Consumer<java.util.List<android.app.prediction.AppTarget>>);
+    method @MainThread public void onStartPredictionUpdates();
+    method @MainThread public void onStopPredictionUpdates();
+    method public final void updatePredictions(@NonNull android.app.prediction.AppPredictionSessionId, @NonNull java.util.List<android.app.prediction.AppTarget>);
+  }
+
+}
+
+package android.service.attention {
+
+  public abstract class AttentionService extends android.app.Service {
+    ctor public AttentionService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCancelAttentionCheck(@NonNull android.service.attention.AttentionService.AttentionCallback);
+    method public abstract void onCheckAttention(@NonNull android.service.attention.AttentionService.AttentionCallback);
+    field public static final int ATTENTION_FAILURE_CAMERA_PERMISSION_ABSENT = 6; // 0x6
+    field public static final int ATTENTION_FAILURE_CANCELLED = 3; // 0x3
+    field public static final int ATTENTION_FAILURE_PREEMPTED = 4; // 0x4
+    field public static final int ATTENTION_FAILURE_TIMED_OUT = 5; // 0x5
+    field public static final int ATTENTION_FAILURE_UNKNOWN = 2; // 0x2
+    field public static final int ATTENTION_SUCCESS_ABSENT = 0; // 0x0
+    field public static final int ATTENTION_SUCCESS_PRESENT = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.attention.AttentionService";
+  }
+
+  public static final class AttentionService.AttentionCallback {
+    method public void onFailure(int);
+    method public void onSuccess(int, long);
+  }
+
+}
+
+package android.service.autofill {
+
+  public abstract class AutofillFieldClassificationService extends android.app.Service {
+    ctor public AutofillFieldClassificationService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public float[][] onCalculateScores(@NonNull java.util.List<android.view.autofill.AutofillValue>, @NonNull java.util.List<java.lang.String>, @NonNull java.util.List<java.lang.String>, @Nullable String, @Nullable android.os.Bundle, @Nullable java.util.Map, @Nullable java.util.Map);
+    method @Deprecated @Nullable public float[][] onGetScores(@Nullable String, @Nullable android.os.Bundle, @NonNull java.util.List<android.view.autofill.AutofillValue>, @NonNull java.util.List<java.lang.String>);
+    field public static final String REQUIRED_ALGORITHM_CREDIT_CARD = "CREDIT_CARD";
+    field public static final String REQUIRED_ALGORITHM_EDIT_DISTANCE = "EDIT_DISTANCE";
+    field public static final String REQUIRED_ALGORITHM_EXACT_MATCH = "EXACT_MATCH";
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.AutofillFieldClassificationService";
+    field public static final String SERVICE_META_DATA_KEY_AVAILABLE_ALGORITHMS = "android.autofill.field_classification.available_algorithms";
+    field public static final String SERVICE_META_DATA_KEY_DEFAULT_ALGORITHM = "android.autofill.field_classification.default_algorithm";
+  }
+
+  public static final class Dataset.Builder {
+    ctor public Dataset.Builder(@NonNull android.service.autofill.InlinePresentation);
+    method @NonNull public android.service.autofill.Dataset.Builder setContent(@NonNull android.view.autofill.AutofillId, @Nullable android.content.ClipData);
+    method @NonNull public android.service.autofill.Dataset.Builder setFieldInlinePresentation(@NonNull android.view.autofill.AutofillId, @Nullable android.view.autofill.AutofillValue, @Nullable java.util.regex.Pattern, @NonNull android.service.autofill.InlinePresentation);
+  }
+
+  public abstract class InlineSuggestionRenderService extends android.app.Service {
+    ctor public InlineSuggestionRenderService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @NonNull public android.os.Bundle onGetInlineSuggestionsRendererInfo();
+    method @Nullable public android.view.View onRenderSuggestion(@NonNull android.service.autofill.InlinePresentation, int, int);
+    method public final void startIntentSender(@NonNull android.content.IntentSender);
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.InlineSuggestionRenderService";
+  }
+
+}
+
+package android.service.autofill.augmented {
+
+  public abstract class AugmentedAutofillService extends android.app.Service {
+    ctor public AugmentedAutofillService();
+    method protected final void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
+    method protected void dump(@NonNull java.io.PrintWriter, @NonNull String[]);
+    method @Nullable public final android.service.autofill.FillEventHistory getFillEventHistory();
+    method public void onConnected();
+    method public void onDisconnected();
+    method public void onFillRequest(@NonNull android.service.autofill.augmented.FillRequest, @NonNull android.os.CancellationSignal, @NonNull android.service.autofill.augmented.FillController, @NonNull android.service.autofill.augmented.FillCallback);
+    method public final boolean requestAutofill(@NonNull android.content.ComponentName, @NonNull android.view.autofill.AutofillId);
+    field public static final String SERVICE_INTERFACE = "android.service.autofill.augmented.AugmentedAutofillService";
+  }
+
+  public final class FillCallback {
+    method public void onSuccess(@Nullable android.service.autofill.augmented.FillResponse);
+  }
+
+  public final class FillController {
+    method public void autofill(@NonNull java.util.List<android.util.Pair<android.view.autofill.AutofillId,android.view.autofill.AutofillValue>>);
+  }
+
+  public final class FillRequest {
+    method @NonNull public android.content.ComponentName getActivityComponent();
+    method @NonNull public android.view.autofill.AutofillId getFocusedId();
+    method @NonNull public android.view.autofill.AutofillValue getFocusedValue();
+    method @Nullable public android.app.assist.AssistStructure.ViewNode getFocusedViewNode();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest getInlineSuggestionsRequest();
+    method @Nullable public android.service.autofill.augmented.PresentationParams getPresentationParams();
+    method public int getTaskId();
+  }
+
+  public final class FillResponse {
+  }
+
+  public static final class FillResponse.Builder {
+    ctor public FillResponse.Builder();
+    method @NonNull public android.service.autofill.augmented.FillResponse build();
+    method @NonNull public android.service.autofill.augmented.FillResponse.Builder setClientState(@NonNull android.os.Bundle);
+    method @NonNull public android.service.autofill.augmented.FillResponse.Builder setFillWindow(@NonNull android.service.autofill.augmented.FillWindow);
+    method @NonNull public android.service.autofill.augmented.FillResponse.Builder setInlineSuggestions(@NonNull java.util.List<android.service.autofill.Dataset>);
+  }
+
+  public final class FillWindow implements java.lang.AutoCloseable {
+    ctor public FillWindow();
+    method public void destroy();
+    method public boolean update(@NonNull android.service.autofill.augmented.PresentationParams.Area, @NonNull android.view.View, long);
+  }
+
+  public abstract class PresentationParams {
+    method @Nullable public android.service.autofill.augmented.PresentationParams.Area getSuggestionArea();
+  }
+
+  public abstract static class PresentationParams.Area {
+    method @NonNull public android.graphics.Rect getBounds();
+  }
+
+}
+
+package android.service.carrier {
+
+  public abstract class ApnService extends android.app.Service {
+    ctor public ApnService();
+    method @NonNull public android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @NonNull @WorkerThread public abstract java.util.List<android.content.ContentValues> onRestoreApns(int);
+  }
+
+  public final class CarrierMessagingServiceWrapper implements java.lang.AutoCloseable {
+    ctor public CarrierMessagingServiceWrapper();
+    method public boolean bindToCarrierMessagingService(@NonNull android.content.Context, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull Runnable);
+    method public void disconnect();
+    method public void downloadMms(@NonNull android.net.Uri, int, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void receiveSms(@NonNull android.service.carrier.MessagePdu, @NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendDataSms(@NonNull byte[], int, @NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendMms(@NonNull android.net.Uri, int, @NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendMultipartTextSms(@NonNull java.util.List<java.lang.String>, int, @NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+    method public void sendTextSms(@NonNull String, int, @NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback);
+  }
+
+  public static interface CarrierMessagingServiceWrapper.CarrierMessagingCallback {
+    method public default void onDownloadMmsComplete(int);
+    method public default void onReceiveSmsComplete(int);
+    method public default void onSendMmsComplete(int, @Nullable byte[]);
+    method public default void onSendMultipartSmsComplete(int, @Nullable int[]);
+    method public default void onSendSmsComplete(int, int);
+  }
+
+}
+
+package android.service.contentcapture {
+
+  public final class ActivityEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.content.ComponentName getComponentName();
+    method public int getEventType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.ActivityEvent> CREATOR;
+    field public static final int TYPE_ACTIVITY_DESTROYED = 24; // 0x18
+    field public static final int TYPE_ACTIVITY_PAUSED = 2; // 0x2
+    field public static final int TYPE_ACTIVITY_RESUMED = 1; // 0x1
+    field public static final int TYPE_ACTIVITY_STOPPED = 23; // 0x17
+  }
+
+  public abstract class ContentCaptureService extends android.app.Service {
+    ctor public ContentCaptureService();
+    method public final void disableSelf();
+    method public void onActivityEvent(@NonNull android.service.contentcapture.ActivityEvent);
+    method public void onActivitySnapshot(@NonNull android.view.contentcapture.ContentCaptureSessionId, @NonNull android.service.contentcapture.SnapshotData);
+    method public void onConnected();
+    method public void onContentCaptureEvent(@NonNull android.view.contentcapture.ContentCaptureSessionId, @NonNull android.view.contentcapture.ContentCaptureEvent);
+    method public void onCreateContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureContext, @NonNull android.view.contentcapture.ContentCaptureSessionId);
+    method public void onDataRemovalRequest(@NonNull android.view.contentcapture.DataRemovalRequest);
+    method public void onDataShareRequest(@NonNull android.view.contentcapture.DataShareRequest, @NonNull android.service.contentcapture.DataShareCallback);
+    method public void onDestroyContentCaptureSession(@NonNull android.view.contentcapture.ContentCaptureSessionId);
+    method public void onDisconnected();
+    method public final void setContentCaptureConditions(@NonNull String, @Nullable java.util.Set<android.view.contentcapture.ContentCaptureCondition>);
+    method public final void setContentCaptureWhitelist(@Nullable java.util.Set<java.lang.String>, @Nullable java.util.Set<android.content.ComponentName>);
+    field public static final String SERVICE_INTERFACE = "android.service.contentcapture.ContentCaptureService";
+    field public static final String SERVICE_META_DATA = "android.content_capture";
+  }
+
+  public interface DataShareCallback {
+    method public void onAccept(@NonNull java.util.concurrent.Executor, @NonNull android.service.contentcapture.DataShareReadAdapter);
+    method public void onReject();
+  }
+
+  public interface DataShareReadAdapter {
+    method public void onError(int);
+    method public void onStart(@NonNull android.os.ParcelFileDescriptor);
+  }
+
+  public final class SnapshotData implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.app.assist.AssistContent getAssistContent();
+    method @NonNull public android.os.Bundle getAssistData();
+    method @NonNull public android.app.assist.AssistStructure getAssistStructure();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.contentcapture.SnapshotData> CREATOR;
+  }
+
+}
+
+package android.service.contentsuggestions {
+
+  public abstract class ContentSuggestionsService extends android.app.Service {
+    ctor public ContentSuggestionsService();
+    method public abstract void onClassifyContentSelections(@NonNull android.app.contentsuggestions.ClassificationsRequest, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.ClassificationsCallback);
+    method public abstract void onNotifyInteraction(@NonNull String, @NonNull android.os.Bundle);
+    method public abstract void onProcessContextImage(int, @Nullable android.graphics.Bitmap, @NonNull android.os.Bundle);
+    method public abstract void onSuggestContentSelections(@NonNull android.app.contentsuggestions.SelectionsRequest, @NonNull android.app.contentsuggestions.ContentSuggestionsManager.SelectionsCallback);
+    field public static final String SERVICE_INTERFACE = "android.service.contentsuggestions.ContentSuggestionsService";
+  }
+
+}
+
+package android.service.dataloader {
+
+  public abstract class DataLoaderService extends android.app.Service {
+    ctor public DataLoaderService();
+    method @Nullable public android.service.dataloader.DataLoaderService.DataLoader onCreateDataLoader(@NonNull android.content.pm.DataLoaderParams);
+  }
+
+  public static interface DataLoaderService.DataLoader {
+    method public boolean onCreate(@NonNull android.content.pm.DataLoaderParams, @NonNull android.service.dataloader.DataLoaderService.FileSystemConnector);
+    method public boolean onPrepareImage(@NonNull java.util.Collection<android.content.pm.InstallationFile>, @NonNull java.util.Collection<java.lang.String>);
+  }
+
+  public static final class DataLoaderService.FileSystemConnector {
+    method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void writeData(@NonNull String, long, long, @NonNull android.os.ParcelFileDescriptor) throws java.io.IOException;
+  }
+
+}
+
+package android.service.displayhash {
+
+  public final class DisplayHashParams implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.util.Size getBufferSize();
+    method public boolean isGrayscaleBuffer();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.displayhash.DisplayHashParams> CREATOR;
+  }
+
+  public static final class DisplayHashParams.Builder {
+    ctor public DisplayHashParams.Builder();
+    method @NonNull public android.service.displayhash.DisplayHashParams build();
+    method @NonNull public android.service.displayhash.DisplayHashParams.Builder setBufferSize(int, int);
+    method @NonNull public android.service.displayhash.DisplayHashParams.Builder setGrayscaleBuffer(boolean);
+  }
+
+  public abstract class DisplayHashingService extends android.app.Service {
+    ctor public DisplayHashingService();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onGenerateDisplayHash(@NonNull byte[], @NonNull android.hardware.HardwareBuffer, @NonNull android.graphics.Rect, @NonNull String, @NonNull android.view.displayhash.DisplayHashResultCallback);
+    method @NonNull public abstract java.util.Map<java.lang.String,android.service.displayhash.DisplayHashParams> onGetDisplayHashAlgorithms();
+    method public abstract int onGetIntervalBetweenRequestsMillis();
+    method @Nullable public abstract android.view.displayhash.VerifiedDisplayHash onVerifyDisplayHash(@NonNull byte[], @NonNull android.view.displayhash.DisplayHash);
+    field public static final String SERVICE_INTERFACE = "android.service.displayhash.DisplayHashingService";
+  }
+
+}
+
+package android.service.euicc {
+
+  public final class DownloadSubscriptionResult implements android.os.Parcelable {
+    ctor public DownloadSubscriptionResult(int, int, int);
+    method public int describeContents();
+    method public int getCardId();
+    method public int getResolvableErrors();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.DownloadSubscriptionResult> CREATOR;
+  }
+
+  public final class EuiccProfileInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.service.carrier.CarrierIdentifier getCarrierIdentifier();
+    method public String getIccid();
+    method @Nullable public String getNickname();
+    method @android.service.euicc.EuiccProfileInfo.PolicyRule public int getPolicyRules();
+    method @android.service.euicc.EuiccProfileInfo.ProfileClass public int getProfileClass();
+    method public String getProfileName();
+    method public String getServiceProviderName();
+    method @android.service.euicc.EuiccProfileInfo.ProfileState public int getState();
+    method @Nullable public java.util.List<android.telephony.UiccAccessRule> getUiccAccessRules();
+    method public boolean hasPolicyRule(@android.service.euicc.EuiccProfileInfo.PolicyRule int);
+    method public boolean hasPolicyRules();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.EuiccProfileInfo> CREATOR;
+    field public static final int POLICY_RULE_DELETE_AFTER_DISABLING = 4; // 0x4
+    field public static final int POLICY_RULE_DO_NOT_DELETE = 2; // 0x2
+    field public static final int POLICY_RULE_DO_NOT_DISABLE = 1; // 0x1
+    field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2
+    field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1
+    field public static final int PROFILE_CLASS_TESTING = 0; // 0x0
+    field public static final int PROFILE_STATE_DISABLED = 0; // 0x0
+    field public static final int PROFILE_STATE_ENABLED = 1; // 0x1
+  }
+
+  public static final class EuiccProfileInfo.Builder {
+    ctor public EuiccProfileInfo.Builder(String);
+    ctor public EuiccProfileInfo.Builder(android.service.euicc.EuiccProfileInfo);
+    method public android.service.euicc.EuiccProfileInfo build();
+    method public android.service.euicc.EuiccProfileInfo.Builder setCarrierIdentifier(android.service.carrier.CarrierIdentifier);
+    method public android.service.euicc.EuiccProfileInfo.Builder setIccid(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setNickname(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setPolicyRules(@android.service.euicc.EuiccProfileInfo.PolicyRule int);
+    method public android.service.euicc.EuiccProfileInfo.Builder setProfileClass(@android.service.euicc.EuiccProfileInfo.ProfileClass int);
+    method public android.service.euicc.EuiccProfileInfo.Builder setProfileName(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setServiceProviderName(String);
+    method public android.service.euicc.EuiccProfileInfo.Builder setState(@android.service.euicc.EuiccProfileInfo.ProfileState int);
+    method public android.service.euicc.EuiccProfileInfo.Builder setUiccAccessRule(@Nullable java.util.List<android.telephony.UiccAccessRule>);
+  }
+
+  @IntDef(flag=true, prefix={"POLICY_RULE_"}, value={android.service.euicc.EuiccProfileInfo.POLICY_RULE_DO_NOT_DISABLE, android.service.euicc.EuiccProfileInfo.POLICY_RULE_DO_NOT_DELETE, android.service.euicc.EuiccProfileInfo.POLICY_RULE_DELETE_AFTER_DISABLING}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccProfileInfo.PolicyRule {
+  }
+
+  @IntDef(prefix={"PROFILE_CLASS_"}, value={android.service.euicc.EuiccProfileInfo.PROFILE_CLASS_TESTING, android.service.euicc.EuiccProfileInfo.PROFILE_CLASS_PROVISIONING, android.service.euicc.EuiccProfileInfo.PROFILE_CLASS_OPERATIONAL, 0xffffffff}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccProfileInfo.ProfileClass {
+  }
+
+  @IntDef(prefix={"PROFILE_STATE_"}, value={android.service.euicc.EuiccProfileInfo.PROFILE_STATE_DISABLED, android.service.euicc.EuiccProfileInfo.PROFILE_STATE_ENABLED, 0xffffffff}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccProfileInfo.ProfileState {
+  }
+
+  public abstract class EuiccService extends android.app.Service {
+    ctor public EuiccService();
+    method public void dump(@NonNull java.io.PrintWriter);
+    method public int encodeSmdxSubjectAndReasonCode(@Nullable String, @Nullable String);
+    method @CallSuper public android.os.IBinder onBind(android.content.Intent);
+    method public abstract int onDeleteSubscription(int, String);
+    method public android.service.euicc.DownloadSubscriptionResult onDownloadSubscription(int, @NonNull android.telephony.euicc.DownloadableSubscription, boolean, boolean, @Nullable android.os.Bundle);
+    method @Deprecated public int onDownloadSubscription(int, @NonNull android.telephony.euicc.DownloadableSubscription, boolean, boolean);
+    method @Deprecated public abstract int onEraseSubscriptions(int);
+    method public int onEraseSubscriptions(int, @android.telephony.euicc.EuiccCardManager.ResetOption int);
+    method public abstract android.service.euicc.GetDefaultDownloadableSubscriptionListResult onGetDefaultDownloadableSubscriptionList(int, boolean);
+    method public abstract android.service.euicc.GetDownloadableSubscriptionMetadataResult onGetDownloadableSubscriptionMetadata(int, android.telephony.euicc.DownloadableSubscription, boolean);
+    method public abstract String onGetEid(int);
+    method @NonNull public abstract android.telephony.euicc.EuiccInfo onGetEuiccInfo(int);
+    method @NonNull public abstract android.service.euicc.GetEuiccProfileInfoListResult onGetEuiccProfileInfoList(int);
+    method @android.telephony.euicc.EuiccManager.OtaStatus public abstract int onGetOtaStatus(int);
+    method public abstract int onRetainSubscriptionsForFactoryReset(int);
+    method public abstract void onStartOtaIfNecessary(int, android.service.euicc.EuiccService.OtaStatusChangedCallback);
+    method public abstract int onSwitchToSubscription(int, @Nullable String, boolean);
+    method public abstract int onUpdateSubscriptionNickname(int, String, String);
+    field public static final String ACTION_BIND_CARRIER_PROVISIONING_SERVICE = "android.service.euicc.action.BIND_CARRIER_PROVISIONING_SERVICE";
+    field public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED";
+    field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";
+    field public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION";
+    field public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED";
+    field @Deprecated public static final String ACTION_RESOLVE_CONFIRMATION_CODE = "android.service.euicc.action.RESOLVE_CONFIRMATION_CODE";
+    field public static final String ACTION_RESOLVE_DEACTIVATE_SIM = "android.service.euicc.action.RESOLVE_DEACTIVATE_SIM";
+    field public static final String ACTION_RESOLVE_NO_PRIVILEGES = "android.service.euicc.action.RESOLVE_NO_PRIVILEGES";
+    field public static final String ACTION_RESOLVE_RESOLVABLE_ERRORS = "android.service.euicc.action.RESOLVE_RESOLVABLE_ERRORS";
+    field public static final String ACTION_START_CARRIER_ACTIVATION = "android.service.euicc.action.START_CARRIER_ACTIVATION";
+    field public static final String ACTION_START_EUICC_ACTIVATION = "android.service.euicc.action.START_EUICC_ACTIVATION";
+    field public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = "android.service.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED";
+    field public static final String CATEGORY_EUICC_UI = "android.service.euicc.category.EUICC_UI";
+    field public static final String EUICC_SERVICE_INTERFACE = "android.service.euicc.EuiccService";
+    field public static final String EXTRA_RESOLUTION_ALLOW_POLICY_RULES = "android.service.euicc.extra.RESOLUTION_ALLOW_POLICY_RULES";
+    field public static final String EXTRA_RESOLUTION_CALLING_PACKAGE = "android.service.euicc.extra.RESOLUTION_CALLING_PACKAGE";
+    field public static final String EXTRA_RESOLUTION_CARD_ID = "android.service.euicc.extra.RESOLUTION_CARD_ID";
+    field public static final String EXTRA_RESOLUTION_CONFIRMATION_CODE = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE";
+    field public static final String EXTRA_RESOLUTION_CONFIRMATION_CODE_RETRIED = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE_RETRIED";
+    field public static final String EXTRA_RESOLUTION_CONSENT = "android.service.euicc.extra.RESOLUTION_CONSENT";
+    field public static final String EXTRA_RESOLVABLE_ERRORS = "android.service.euicc.extra.RESOLVABLE_ERRORS";
+    field public static final int RESOLVABLE_ERROR_CONFIRMATION_CODE = 1; // 0x1
+    field public static final int RESOLVABLE_ERROR_POLICY_RULES = 2; // 0x2
+    field public static final int RESULT_FIRST_USER = 1; // 0x1
+    field public static final int RESULT_MUST_DEACTIVATE_SIM = -1; // 0xffffffff
+    field @Deprecated public static final int RESULT_NEED_CONFIRMATION_CODE = -2; // 0xfffffffe
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_RESOLVABLE_ERRORS = -2; // 0xfffffffe
+  }
+
+  public abstract static class EuiccService.OtaStatusChangedCallback {
+    ctor public EuiccService.OtaStatusChangedCallback();
+    method public abstract void onOtaStatusChanged(int);
+  }
+
+  public final class GetDefaultDownloadableSubscriptionListResult implements android.os.Parcelable {
+    ctor public GetDefaultDownloadableSubscriptionListResult(int, @Nullable android.telephony.euicc.DownloadableSubscription[]);
+    method public int describeContents();
+    method @Nullable public java.util.List<android.telephony.euicc.DownloadableSubscription> getDownloadableSubscriptions();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetDefaultDownloadableSubscriptionListResult> CREATOR;
+  }
+
+  public final class GetDownloadableSubscriptionMetadataResult implements android.os.Parcelable {
+    ctor public GetDownloadableSubscriptionMetadataResult(int, @Nullable android.telephony.euicc.DownloadableSubscription);
+    method public int describeContents();
+    method @Nullable public android.telephony.euicc.DownloadableSubscription getDownloadableSubscription();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetDownloadableSubscriptionMetadataResult> CREATOR;
+  }
+
+  public final class GetEuiccProfileInfoListResult implements android.os.Parcelable {
+    ctor public GetEuiccProfileInfoListResult(int, @Nullable android.service.euicc.EuiccProfileInfo[], boolean);
+    method public int describeContents();
+    method public boolean getIsRemovable();
+    method @Nullable public java.util.List<android.service.euicc.EuiccProfileInfo> getProfiles();
+    method public int getResult();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.euicc.GetEuiccProfileInfoListResult> CREATOR;
+  }
+
+}
+
+package android.service.notification {
+
+  public final class Adjustment implements android.os.Parcelable {
+    ctor public Adjustment(String, String, android.os.Bundle, CharSequence, int);
+    ctor public Adjustment(@NonNull String, @NonNull String, @NonNull android.os.Bundle, @NonNull CharSequence, @NonNull android.os.UserHandle);
+    ctor protected Adjustment(android.os.Parcel);
+    method public int describeContents();
+    method @NonNull public CharSequence getExplanation();
+    method @NonNull public String getKey();
+    method @NonNull public String getPackage();
+    method @NonNull public android.os.Bundle getSignals();
+    method public int getUser();
+    method @NonNull public android.os.UserHandle getUserHandle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.Adjustment> CREATOR;
+    field public static final String KEY_CONTEXTUAL_ACTIONS = "key_contextual_actions";
+    field public static final String KEY_IMPORTANCE = "key_importance";
+    field public static final String KEY_NOT_CONVERSATION = "key_not_conversation";
+    field public static final String KEY_PEOPLE = "key_people";
+    field public static final String KEY_RANKING_SCORE = "key_ranking_score";
+    field public static final String KEY_SNOOZE_CRITERIA = "key_snooze_criteria";
+    field public static final String KEY_TEXT_REPLIES = "key_text_replies";
+    field public static final String KEY_USER_SENTIMENT = "key_user_sentiment";
+  }
+
+  public abstract class NotificationAssistantService extends android.service.notification.NotificationListenerService {
+    ctor public NotificationAssistantService();
+    method public final void adjustNotification(@NonNull android.service.notification.Adjustment);
+    method public final void adjustNotifications(@NonNull java.util.List<android.service.notification.Adjustment>);
+    method public void onActionInvoked(@NonNull String, @NonNull android.app.Notification.Action, int);
+    method public void onAllowedAdjustmentsChanged();
+    method @NonNull public final android.os.IBinder onBind(@Nullable android.content.Intent);
+    method public void onNotificationClicked(@NonNull String);
+    method public void onNotificationDirectReplied(@NonNull String);
+    method @Nullable public abstract android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification);
+    method @Nullable public android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification, @NonNull android.app.NotificationChannel);
+    method @Nullable public android.service.notification.Adjustment onNotificationEnqueued(@NonNull android.service.notification.StatusBarNotification, @NonNull android.app.NotificationChannel, @NonNull android.service.notification.NotificationListenerService.RankingMap);
+    method public void onNotificationExpansionChanged(@NonNull String, boolean, boolean);
+    method public void onNotificationFeedbackReceived(@NonNull String, @NonNull android.service.notification.NotificationListenerService.RankingMap, @NonNull android.os.Bundle);
+    method public abstract void onNotificationSnoozedUntilContext(@NonNull android.service.notification.StatusBarNotification, @NonNull String);
+    method public void onNotificationVisibilityChanged(@NonNull String, boolean);
+    method public void onNotificationsSeen(@NonNull java.util.List<java.lang.String>);
+    method public void onPanelHidden();
+    method public void onPanelRevealed(int);
+    method public void onSuggestedReplySent(@NonNull String, @NonNull CharSequence, int);
+    method public final void unsnoozeNotification(@NonNull String);
+    field public static final String FEEDBACK_RATING = "feedback.rating";
+    field public static final String SERVICE_INTERFACE = "android.service.notification.NotificationAssistantService";
+    field public static final int SOURCE_FROM_APP = 0; // 0x0
+    field public static final int SOURCE_FROM_ASSISTANT = 1; // 0x1
+  }
+
+  public abstract class NotificationListenerService extends android.app.Service {
+    method public void onNotificationRemoved(@NonNull android.service.notification.StatusBarNotification, @NonNull android.service.notification.NotificationListenerService.RankingMap, @NonNull android.service.notification.NotificationStats, int);
+  }
+
+  public final class NotificationStats implements android.os.Parcelable {
+    ctor public NotificationStats();
+    ctor protected NotificationStats(android.os.Parcel);
+    method public int describeContents();
+    method public int getDismissalSentiment();
+    method public int getDismissalSurface();
+    method public boolean hasDirectReplied();
+    method public boolean hasExpanded();
+    method public boolean hasInteracted();
+    method public boolean hasSeen();
+    method public boolean hasSnoozed();
+    method public boolean hasViewedSettings();
+    method public void setDirectReplied();
+    method public void setDismissalSentiment(int);
+    method public void setDismissalSurface(int);
+    method public void setExpanded();
+    method public void setSeen();
+    method public void setSnoozed();
+    method public void setViewedSettings();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.NotificationStats> CREATOR;
+    field public static final int DISMISSAL_AOD = 2; // 0x2
+    field public static final int DISMISSAL_NOT_DISMISSED = -1; // 0xffffffff
+    field public static final int DISMISSAL_OTHER = 0; // 0x0
+    field public static final int DISMISSAL_PEEK = 1; // 0x1
+    field public static final int DISMISSAL_SHADE = 3; // 0x3
+    field public static final int DISMISS_SENTIMENT_NEGATIVE = 0; // 0x0
+    field public static final int DISMISS_SENTIMENT_NEUTRAL = 1; // 0x1
+    field public static final int DISMISS_SENTIMENT_POSITIVE = 2; // 0x2
+    field public static final int DISMISS_SENTIMENT_UNKNOWN = -1000; // 0xfffffc18
+  }
+
+  public final class SnoozeCriterion implements android.os.Parcelable {
+    ctor public SnoozeCriterion(String, CharSequence, CharSequence);
+    ctor protected SnoozeCriterion(android.os.Parcel);
+    method public int describeContents();
+    method public CharSequence getConfirmation();
+    method public CharSequence getExplanation();
+    method public String getId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.SnoozeCriterion> CREATOR;
+  }
+
+}
+
+package android.service.oemlock {
+
+  public class OemLockManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE) public String getLockName();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE) public boolean isOemUnlockAllowedByCarrier();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USER_OEM_UNLOCK_STATE) public boolean isOemUnlockAllowedByUser();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE) public void setOemUnlockAllowedByCarrier(boolean, @Nullable byte[]);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_USER_OEM_UNLOCK_STATE) public void setOemUnlockAllowedByUser(boolean);
+  }
+
+}
+
+package android.service.persistentdata {
+
+  public class PersistentDataBlockManager {
+    method @RequiresPermission("android.permission.ACCESS_PDB_STATE") public int getDataBlockSize();
+    method @android.service.persistentdata.PersistentDataBlockManager.FlashLockState @RequiresPermission(anyOf={android.Manifest.permission.READ_OEM_UNLOCK_STATE, "android.permission.OEM_UNLOCK_STATE"}) public int getFlashLockState();
+    method public long getMaximumDataBlockSize();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_OEM_UNLOCK_STATE, "android.permission.OEM_UNLOCK_STATE"}) public boolean getOemUnlockEnabled();
+    method public byte[] read();
+    method @Deprecated @RequiresPermission("android.permission.OEM_UNLOCK_STATE") public void setOemUnlockEnabled(boolean);
+    method @RequiresPermission("android.permission.OEM_UNLOCK_STATE") public void wipe();
+    method public int write(byte[]);
+    field public static final int FLASH_LOCK_LOCKED = 1; // 0x1
+    field public static final int FLASH_LOCK_UNKNOWN = -1; // 0xffffffff
+    field public static final int FLASH_LOCK_UNLOCKED = 0; // 0x0
+  }
+
+  @IntDef(prefix={"FLASH_LOCK_"}, value={android.service.persistentdata.PersistentDataBlockManager.FLASH_LOCK_UNKNOWN, android.service.persistentdata.PersistentDataBlockManager.FLASH_LOCK_LOCKED, android.service.persistentdata.PersistentDataBlockManager.FLASH_LOCK_UNLOCKED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface PersistentDataBlockManager.FlashLockState {
+  }
+
+}
+
+package android.service.quicksettings {
+
+  public class TileService extends android.app.Service {
+    method public final void setStatusIcon(android.graphics.drawable.Icon, String);
+  }
+
+}
+
+package android.service.resolver {
+
+  public abstract class ResolverRankerService extends android.app.Service {
+    ctor public ResolverRankerService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void onPredictSharingProbabilities(java.util.List<android.service.resolver.ResolverTarget>);
+    method public void onTrainRankingModel(java.util.List<android.service.resolver.ResolverTarget>, int);
+    field public static final String BIND_PERMISSION = "android.permission.BIND_RESOLVER_RANKER_SERVICE";
+    field public static final String HOLD_PERMISSION = "android.permission.PROVIDE_RESOLVER_RANKER_SERVICE";
+    field public static final String SERVICE_INTERFACE = "android.service.resolver.ResolverRankerService";
+  }
+
+  public final class ResolverTarget implements android.os.Parcelable {
+    ctor public ResolverTarget();
+    method public int describeContents();
+    method public float getChooserScore();
+    method public float getLaunchScore();
+    method public float getRecencyScore();
+    method public float getSelectProbability();
+    method public float getTimeSpentScore();
+    method public void setChooserScore(float);
+    method public void setLaunchScore(float);
+    method public void setRecencyScore(float);
+    method public void setSelectProbability(float);
+    method public void setTimeSpentScore(float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.resolver.ResolverTarget> CREATOR;
+  }
+
+}
+
+package android.service.resumeonreboot {
+
+  public abstract class ResumeOnRebootService extends android.app.Service {
+    ctor public ResumeOnRebootService();
+    method @Nullable public android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @NonNull public abstract byte[] onUnwrap(@NonNull byte[]) throws java.io.IOException;
+    method @NonNull public abstract byte[] onWrap(@NonNull byte[], long) throws java.io.IOException;
+    field public static final String SERVICE_INTERFACE = "android.service.resumeonreboot.ResumeOnRebootService";
+  }
+
+}
+
+package android.service.rotationresolver {
+
+  public final class RotationResolutionRequest implements android.os.Parcelable {
+    ctor public RotationResolutionRequest(@NonNull String, int, int, boolean, long);
+    method public int describeContents();
+    method public int getCurrentRotation();
+    method @NonNull public String getForegroundPackageName();
+    method public int getProposedRotation();
+    method public long getTimeoutMillis();
+    method public boolean shouldUseCamera();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.rotationresolver.RotationResolutionRequest> CREATOR;
+  }
+
+  public abstract class RotationResolverService extends android.app.Service {
+    ctor public RotationResolverService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onResolveRotation(@NonNull android.service.rotationresolver.RotationResolutionRequest, @Nullable android.os.CancellationSignal, @NonNull android.service.rotationresolver.RotationResolverService.RotationResolverCallback);
+    field public static final int ROTATION_RESULT_FAILURE_CANCELLED = 0; // 0x0
+    field public static final int ROTATION_RESULT_FAILURE_NOT_SUPPORTED = 4; // 0x4
+    field public static final int ROTATION_RESULT_FAILURE_PREEMPTED = 2; // 0x2
+    field public static final int ROTATION_RESULT_FAILURE_TIMED_OUT = 1; // 0x1
+    field public static final int ROTATION_RESULT_FAILURE_UNKNOWN = 3; // 0x3
+    field public static final String SERVICE_INTERFACE = "android.service.rotationresolver.RotationResolverService";
+  }
+
+  public static interface RotationResolverService.RotationResolverCallback {
+    method public void onFailure(int);
+    method public void onSuccess(int);
+  }
+
+}
+
+package android.service.search {
+
+  public abstract class SearchUiService extends android.app.Service {
+    ctor public SearchUiService();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @MainThread public abstract void onDestroy(@NonNull android.app.search.SearchSessionId);
+    method @MainThread public abstract void onNotifyEvent(@NonNull android.app.search.SearchSessionId, @NonNull android.app.search.Query, @NonNull android.app.search.SearchTargetEvent);
+    method @MainThread public abstract void onQuery(@NonNull android.app.search.SearchSessionId, @NonNull android.app.search.Query, @NonNull java.util.function.Consumer<java.util.List<android.app.search.SearchTarget>>);
+    method public void onSearchSessionCreated(@NonNull android.app.search.SearchContext, @NonNull android.app.search.SearchSessionId);
+  }
+
+}
+
+package android.service.settings.suggestions {
+
+  public final class Suggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getFlags();
+    method public android.graphics.drawable.Icon getIcon();
+    method public String getId();
+    method public android.app.PendingIntent getPendingIntent();
+    method public CharSequence getSummary();
+    method public CharSequence getTitle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.settings.suggestions.Suggestion> CREATOR;
+    field public static final int FLAG_HAS_BUTTON = 1; // 0x1
+  }
+
+  public static class Suggestion.Builder {
+    ctor public Suggestion.Builder(String);
+    method public android.service.settings.suggestions.Suggestion build();
+    method public android.service.settings.suggestions.Suggestion.Builder setFlags(int);
+    method public android.service.settings.suggestions.Suggestion.Builder setIcon(android.graphics.drawable.Icon);
+    method public android.service.settings.suggestions.Suggestion.Builder setPendingIntent(android.app.PendingIntent);
+    method public android.service.settings.suggestions.Suggestion.Builder setSummary(CharSequence);
+    method public android.service.settings.suggestions.Suggestion.Builder setTitle(CharSequence);
+  }
+
+  public abstract class SuggestionService extends android.app.Service {
+    ctor public SuggestionService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract java.util.List<android.service.settings.suggestions.Suggestion> onGetSuggestions();
+    method public abstract void onSuggestionDismissed(android.service.settings.suggestions.Suggestion);
+    method public abstract void onSuggestionLaunched(android.service.settings.suggestions.Suggestion);
+  }
+
+}
+
+package android.service.smartspace {
+
+  public abstract class SmartspaceService extends android.app.Service {
+    ctor public SmartspaceService();
+    method @MainThread public abstract void notifySmartspaceEvent(@NonNull android.app.smartspace.SmartspaceSessionId, @NonNull android.app.smartspace.SmartspaceTargetEvent);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCreateSmartspaceSession(@NonNull android.app.smartspace.SmartspaceConfig, @NonNull android.app.smartspace.SmartspaceSessionId);
+    method @MainThread public abstract void onDestroy(@NonNull android.app.smartspace.SmartspaceSessionId);
+    method public abstract void onDestroySmartspaceSession(@NonNull android.app.smartspace.SmartspaceSessionId);
+    method @MainThread public abstract void onRequestSmartspaceUpdate(@NonNull android.app.smartspace.SmartspaceSessionId);
+    method public final void updateSmartspaceTargets(@NonNull android.app.smartspace.SmartspaceSessionId, @NonNull java.util.List<android.app.smartspace.SmartspaceTarget>);
+  }
+
+}
+
+package android.service.storage {
+
+  public abstract class ExternalStorageService extends android.app.Service {
+    ctor public ExternalStorageService();
+    method public void onAnrDelayStarted(@NonNull String, int, int, int);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onEndSession(@NonNull String) throws java.io.IOException;
+    method public void onFreeCache(@NonNull java.util.UUID, long) throws java.io.IOException;
+    method public abstract void onStartSession(@NonNull String, int, @NonNull android.os.ParcelFileDescriptor, @NonNull java.io.File, @NonNull java.io.File) throws java.io.IOException;
+    method public abstract void onVolumeStateChanged(@NonNull android.os.storage.StorageVolume) throws java.io.IOException;
+    field public static final int FLAG_SESSION_ATTRIBUTE_INDEXABLE = 2; // 0x2
+    field public static final int FLAG_SESSION_TYPE_FUSE = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.storage.ExternalStorageService";
+  }
+
+}
+
+package android.service.textclassifier {
+
+  public abstract class TextClassifierService extends android.app.Service {
+    ctor public TextClassifierService();
+    method @NonNull public static android.view.textclassifier.TextClassifier getDefaultTextClassifierImplementation(@NonNull android.content.Context);
+    method @Deprecated public final android.view.textclassifier.TextClassifier getLocalTextClassifier();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method @MainThread public abstract void onClassifyText(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassification.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextClassification>);
+    method public void onConnected();
+    method @MainThread public void onCreateTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationContext, @NonNull android.view.textclassifier.TextClassificationSessionId);
+    method @MainThread public void onDestroyTextClassificationSession(@NonNull android.view.textclassifier.TextClassificationSessionId);
+    method @MainThread public void onDetectLanguage(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLanguage.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLanguage>);
+    method public void onDisconnected();
+    method @MainThread public abstract void onGenerateLinks(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextLinks.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextLinks>);
+    method @Deprecated @MainThread public void onSelectionEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.SelectionEvent);
+    method @MainThread public void onSuggestConversationActions(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.ConversationActions.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.ConversationActions>);
+    method @MainThread public abstract void onSuggestSelection(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextSelection.Request, @NonNull android.os.CancellationSignal, @NonNull android.service.textclassifier.TextClassifierService.Callback<android.view.textclassifier.TextSelection>);
+    method @MainThread public void onTextClassifierEvent(@Nullable android.view.textclassifier.TextClassificationSessionId, @NonNull android.view.textclassifier.TextClassifierEvent);
+    field public static final String SERVICE_INTERFACE = "android.service.textclassifier.TextClassifierService";
+  }
+
+  public static interface TextClassifierService.Callback<T> {
+    method public void onFailure(@NonNull CharSequence);
+    method public void onSuccess(T);
+  }
+
+}
+
+package android.service.timezone {
+
+  public abstract class TimeZoneProviderService extends android.app.Service {
+    ctor public TimeZoneProviderService();
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onStartUpdates(long);
+    method public abstract void onStopUpdates();
+    method public final void reportPermanentFailure(@NonNull Throwable);
+    method public final void reportSuggestion(@NonNull android.service.timezone.TimeZoneProviderSuggestion);
+    method public final void reportUncertain();
+    field public static final String PRIMARY_LOCATION_TIME_ZONE_PROVIDER_SERVICE_INTERFACE = "android.service.timezone.PrimaryLocationTimeZoneProviderService";
+    field public static final String SECONDARY_LOCATION_TIME_ZONE_PROVIDER_SERVICE_INTERFACE = "android.service.timezone.SecondaryLocationTimeZoneProviderService";
+  }
+
+  public final class TimeZoneProviderSuggestion implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getElapsedRealtimeMillis();
+    method @NonNull public java.util.List<java.lang.String> getTimeZoneIds();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.timezone.TimeZoneProviderSuggestion> CREATOR;
+  }
+
+  public static final class TimeZoneProviderSuggestion.Builder {
+    ctor public TimeZoneProviderSuggestion.Builder();
+    method @NonNull public android.service.timezone.TimeZoneProviderSuggestion build();
+    method @NonNull public android.service.timezone.TimeZoneProviderSuggestion.Builder setElapsedRealtimeMillis(long);
+    method @NonNull public android.service.timezone.TimeZoneProviderSuggestion.Builder setTimeZoneIds(@NonNull java.util.List<java.lang.String>);
+  }
+
+}
+
+package android.service.translation {
+
+  public abstract class TranslationService extends android.app.Service {
+    ctor public TranslationService();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onConnected();
+    method public abstract void onCreateTranslationSession(@NonNull android.view.translation.TranslationContext, int, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method public void onDisconnected();
+    method public abstract void onFinishTranslationSession(int);
+    method public abstract void onTranslationCapabilitiesRequest(int, int, @NonNull java.util.function.Consumer<java.util.Set<android.view.translation.TranslationCapability>>);
+    method public abstract void onTranslationRequest(@NonNull android.view.translation.TranslationRequest, int, @Nullable android.os.CancellationSignal, @NonNull java.util.function.Consumer<android.view.translation.TranslationResponse>);
+    method public final void updateTranslationCapability(@NonNull android.view.translation.TranslationCapability);
+    field public static final String SERVICE_INTERFACE = "android.service.translation.TranslationService";
+    field public static final String SERVICE_META_DATA = "android.translation_service";
+  }
+
+}
+
+package android.service.trust {
+
+  public class TrustAgentService extends android.app.Service {
+    ctor public TrustAgentService();
+    method public final void addEscrowToken(byte[], android.os.UserHandle);
+    method @Deprecated public final void grantTrust(CharSequence, long, boolean);
+    method public final void grantTrust(CharSequence, long, int);
+    method public final void isEscrowTokenActive(long, android.os.UserHandle);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public boolean onConfigure(java.util.List<android.os.PersistableBundle>);
+    method public void onDeviceLocked();
+    method public void onDeviceUnlockLockout(long);
+    method public void onDeviceUnlocked();
+    method public void onEscrowTokenAdded(byte[], long, android.os.UserHandle);
+    method public void onEscrowTokenRemoved(long, boolean);
+    method public void onEscrowTokenStateReceived(long, int);
+    method public void onTrustTimeout();
+    method public void onUnlockAttempt(boolean);
+    method public final void removeEscrowToken(long, android.os.UserHandle);
+    method public final void revokeTrust();
+    method public final void setManagingTrust(boolean);
+    method public final void showKeyguardErrorMessage(@NonNull CharSequence);
+    method public final void unlockUserWithToken(long, byte[], android.os.UserHandle);
+    field public static final int FLAG_GRANT_TRUST_DISMISS_KEYGUARD = 2; // 0x2
+    field public static final int FLAG_GRANT_TRUST_INITIATED_BY_USER = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "android.service.trust.TrustAgentService";
+    field public static final int TOKEN_STATE_ACTIVE = 1; // 0x1
+    field public static final int TOKEN_STATE_INACTIVE = 0; // 0x0
+    field public static final String TRUST_AGENT_META_DATA = "android.service.trust.trustagent";
+  }
+
+}
+
+package android.service.voice {
+
+  public class AlwaysOnHotwordDetector implements android.service.voice.HotwordDetector {
+    method @Nullable public android.content.Intent createEnrollIntent();
+    method @Nullable public android.content.Intent createReEnrollIntent();
+    method @Nullable public android.content.Intent createUnEnrollIntent();
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public int getParameter(int);
+    method public int getSupportedAudioCapabilities();
+    method public int getSupportedRecognitionModes();
+    method @Nullable @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public android.service.voice.AlwaysOnHotwordDetector.ModelParamRange queryParameter(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public int setParameter(int, int);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition(int);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition();
+    method public boolean startRecognition(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle);
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean stopRecognition();
+    method public final void updateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory);
+    field public static final int AUDIO_CAPABILITY_ECHO_CANCELLATION = 1; // 0x1
+    field public static final int AUDIO_CAPABILITY_NOISE_SUPPRESSION = 2; // 0x2
+    field public static final int MODEL_PARAM_THRESHOLD_FACTOR = 0; // 0x0
+    field public static final int RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS = 2; // 0x2
+    field public static final int RECOGNITION_FLAG_CAPTURE_TRIGGER_AUDIO = 1; // 0x1
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_ECHO_CANCELLATION = 4; // 0x4
+    field public static final int RECOGNITION_FLAG_ENABLE_AUDIO_NOISE_SUPPRESSION = 8; // 0x8
+    field public static final int RECOGNITION_FLAG_RUN_IN_BATTERY_SAVER = 16; // 0x10
+    field public static final int RECOGNITION_MODE_USER_IDENTIFICATION = 2; // 0x2
+    field public static final int RECOGNITION_MODE_VOICE_TRIGGER = 1; // 0x1
+    field public static final int STATE_ERROR = 3; // 0x3
+    field public static final int STATE_HARDWARE_UNAVAILABLE = -2; // 0xfffffffe
+    field public static final int STATE_KEYPHRASE_ENROLLED = 2; // 0x2
+    field public static final int STATE_KEYPHRASE_UNENROLLED = 1; // 0x1
+    field @Deprecated public static final int STATE_KEYPHRASE_UNSUPPORTED = -1; // 0xffffffff
+  }
+
+  public abstract static class AlwaysOnHotwordDetector.Callback implements android.service.voice.HotwordDetector.Callback {
+    ctor public AlwaysOnHotwordDetector.Callback();
+    method public abstract void onAvailabilityChanged(int);
+    method public void onHotwordDetectionServiceInitialized(int);
+    method public void onHotwordDetectionServiceRestarted();
+    method public void onRejected(@NonNull android.service.voice.HotwordRejectedResult);
+  }
+
+  public static class AlwaysOnHotwordDetector.EventPayload {
+    method @Nullable public android.os.ParcelFileDescriptor getAudioStream();
+    method @Nullable public android.media.AudioFormat getCaptureAudioFormat();
+    method @Nullable public android.service.voice.HotwordDetectedResult getHotwordDetectedResult();
+    method @Nullable public byte[] getTriggerAudio();
+  }
+
+  public static final class AlwaysOnHotwordDetector.ModelParamRange {
+    method public int getEnd();
+    method public int getStart();
+  }
+
+  public final class HotwordDetectedResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAudioChannel();
+    method public int getConfidenceLevel();
+    method @NonNull public android.os.PersistableBundle getExtras();
+    method public int getHotwordDurationMillis();
+    method public int getHotwordOffsetMillis();
+    method public int getHotwordPhraseId();
+    method public static int getMaxBundleSize();
+    method public static int getMaxHotwordPhraseId();
+    method public static int getMaxScore();
+    method @Nullable public android.media.MediaSyncEvent getMediaSyncEvent();
+    method public int getPersonalizedScore();
+    method public int getScore();
+    method public boolean isHotwordDetectionPersonalized();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int AUDIO_CHANNEL_UNSET = -1; // 0xffffffff
+    field public static final int CONFIDENCE_LEVEL_HIGH = 5; // 0x5
+    field public static final int CONFIDENCE_LEVEL_LOW = 1; // 0x1
+    field public static final int CONFIDENCE_LEVEL_LOW_MEDIUM = 2; // 0x2
+    field public static final int CONFIDENCE_LEVEL_MEDIUM = 3; // 0x3
+    field public static final int CONFIDENCE_LEVEL_MEDIUM_HIGH = 4; // 0x4
+    field public static final int CONFIDENCE_LEVEL_NONE = 0; // 0x0
+    field public static final int CONFIDENCE_LEVEL_VERY_HIGH = 6; // 0x6
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.voice.HotwordDetectedResult> CREATOR;
+    field public static final int HOTWORD_OFFSET_UNSET = -1; // 0xffffffff
+  }
+
+  public static final class HotwordDetectedResult.Builder {
+    ctor public HotwordDetectedResult.Builder();
+    method @NonNull public android.service.voice.HotwordDetectedResult build();
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setAudioChannel(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setConfidenceLevel(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setExtras(@NonNull android.os.PersistableBundle);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordDetectionPersonalized(boolean);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordDurationMillis(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordOffsetMillis(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setHotwordPhraseId(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setMediaSyncEvent(@NonNull android.media.MediaSyncEvent);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setPersonalizedScore(int);
+    method @NonNull public android.service.voice.HotwordDetectedResult.Builder setScore(int);
+  }
+
+  public abstract class HotwordDetectionService extends android.app.Service {
+    ctor public HotwordDetectionService();
+    method public static int getMaxCustomInitializationStatus();
+    method @Nullable public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public void onDetect(@NonNull android.service.voice.AlwaysOnHotwordDetector.EventPayload, long, @NonNull android.service.voice.HotwordDetectionService.Callback);
+    method public void onDetect(@NonNull android.service.voice.HotwordDetectionService.Callback);
+    method public void onDetect(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle, @NonNull android.service.voice.HotwordDetectionService.Callback);
+    method public void onStopDetection();
+    method public void onUpdateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, long, @Nullable java.util.function.IntConsumer);
+    field public static final int INITIALIZATION_STATUS_SUCCESS = 0; // 0x0
+    field public static final int INITIALIZATION_STATUS_UNKNOWN = 100; // 0x64
+    field public static final String SERVICE_INTERFACE = "android.service.voice.HotwordDetectionService";
+  }
+
+  public static final class HotwordDetectionService.Callback {
+    method public void onDetected(@NonNull android.service.voice.HotwordDetectedResult);
+    method public void onRejected(@NonNull android.service.voice.HotwordRejectedResult);
+  }
+
+  public interface HotwordDetector {
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public boolean startRecognition();
+    method public boolean startRecognition(@NonNull android.os.ParcelFileDescriptor, @NonNull android.media.AudioFormat, @Nullable android.os.PersistableBundle);
+    method public boolean stopRecognition();
+    method public void updateState(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory);
+  }
+
+  public static interface HotwordDetector.Callback {
+    method public void onDetected(@NonNull android.service.voice.AlwaysOnHotwordDetector.EventPayload);
+    method public void onError();
+    method public void onHotwordDetectionServiceInitialized(int);
+    method public void onHotwordDetectionServiceRestarted();
+    method public void onRecognitionPaused();
+    method public void onRecognitionResumed();
+    method public void onRejected(@NonNull android.service.voice.HotwordRejectedResult);
+  }
+
+  public final class HotwordRejectedResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getConfidenceLevel();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CONFIDENCE_LEVEL_HIGH = 3; // 0x3
+    field public static final int CONFIDENCE_LEVEL_LOW = 1; // 0x1
+    field public static final int CONFIDENCE_LEVEL_MEDIUM = 2; // 0x2
+    field public static final int CONFIDENCE_LEVEL_NONE = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.voice.HotwordRejectedResult> CREATOR;
+  }
+
+  public static final class HotwordRejectedResult.Builder {
+    ctor public HotwordRejectedResult.Builder();
+    method @NonNull public android.service.voice.HotwordRejectedResult build();
+    method @NonNull public android.service.voice.HotwordRejectedResult.Builder setConfidenceLevel(int);
+  }
+
+  public class VoiceInteractionService extends android.app.Service {
+    method @NonNull public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(String, java.util.Locale, android.service.voice.AlwaysOnHotwordDetector.Callback);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_HOTWORD_DETECTION) public final android.service.voice.AlwaysOnHotwordDetector createAlwaysOnHotwordDetector(String, java.util.Locale, @Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, android.service.voice.AlwaysOnHotwordDetector.Callback);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_HOTWORD_DETECTION) public final android.service.voice.HotwordDetector createHotwordDetector(@Nullable android.os.PersistableBundle, @Nullable android.os.SharedMemory, @NonNull android.service.voice.HotwordDetector.Callback);
+    method @NonNull @RequiresPermission("android.permission.MANAGE_VOICE_KEYPHRASES") public final android.media.voice.KeyphraseModelManager createKeyphraseModelManager();
+  }
+
+}
+
+package android.service.wallpaper {
+
+  public class WallpaperService.Engine {
+    method public boolean isInAmbientMode();
+    method public void onAmbientModeChanged(boolean, long);
+  }
+
+}
+
+package android.service.watchdog {
+
+  public abstract class ExplicitHealthCheckService extends android.app.Service {
+    ctor public ExplicitHealthCheckService();
+    method public final void notifyHealthCheckPassed(@NonNull String);
+    method @NonNull public final android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onCancelHealthCheck(@NonNull String);
+    method @NonNull public abstract java.util.List<java.lang.String> onGetRequestedPackages();
+    method @NonNull public abstract java.util.List<android.service.watchdog.ExplicitHealthCheckService.PackageConfig> onGetSupportedPackages();
+    method public abstract void onRequestHealthCheck(@NonNull String);
+    field public static final String BIND_PERMISSION = "android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE";
+    field public static final String SERVICE_INTERFACE = "android.service.watchdog.ExplicitHealthCheckService";
+  }
+
+  public static final class ExplicitHealthCheckService.PackageConfig implements android.os.Parcelable {
+    ctor public ExplicitHealthCheckService.PackageConfig(@NonNull String, long);
+    method public int describeContents();
+    method public long getHealthCheckTimeoutMillis();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.watchdog.ExplicitHealthCheckService.PackageConfig> CREATOR;
+  }
+
+}
+
+package android.telecom {
+
+  @Deprecated public class AudioState implements android.os.Parcelable {
+    ctor @Deprecated public AudioState(boolean, int, int);
+    ctor @Deprecated public AudioState(android.telecom.AudioState);
+    ctor @Deprecated public AudioState(android.telecom.CallAudioState);
+    method @Deprecated public static String audioRouteToString(int);
+    method @Deprecated public int describeContents();
+    method @Deprecated public int getRoute();
+    method @Deprecated public int getSupportedRouteMask();
+    method @Deprecated public boolean isMuted();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.telecom.AudioState> CREATOR;
+    field @Deprecated public static final int ROUTE_BLUETOOTH = 2; // 0x2
+    field @Deprecated public static final int ROUTE_EARPIECE = 1; // 0x1
+    field @Deprecated public static final int ROUTE_SPEAKER = 8; // 0x8
+    field @Deprecated public static final int ROUTE_WIRED_HEADSET = 4; // 0x4
+    field @Deprecated public static final int ROUTE_WIRED_OR_EARPIECE = 5; // 0x5
+  }
+
+  public final class BluetoothCallQualityReport implements android.os.Parcelable {
+    method public int describeContents();
+    method @IntRange(from=0) public int getNegativeAcknowledgementCount();
+    method @IntRange(from=0) public int getPacketsNotReceivedCount();
+    method @IntRange(from=0) public int getRetransmittedPacketsCount();
+    method @IntRange(from=0xffffff81, to=20) public int getRssiDbm();
+    method public long getSentTimestampMillis();
+    method public int getSnrDb();
+    method public boolean isChoppyVoice();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.BluetoothCallQualityReport> CREATOR;
+    field public static final String EVENT_BLUETOOTH_CALL_QUALITY_REPORT = "android.telecom.event.BLUETOOTH_CALL_QUALITY_REPORT";
+    field public static final String EXTRA_BLUETOOTH_CALL_QUALITY_REPORT = "android.telecom.extra.BLUETOOTH_CALL_QUALITY_REPORT";
+  }
+
+  public static final class BluetoothCallQualityReport.Builder {
+    ctor public BluetoothCallQualityReport.Builder();
+    method @NonNull public android.telecom.BluetoothCallQualityReport build();
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setChoppyVoice(boolean);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setNegativeAcknowledgementCount(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setPacketsNotReceivedCount(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setRetransmittedPacketsCount(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setRssiDbm(int);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setSentTimestampMillis(long);
+    method @NonNull public android.telecom.BluetoothCallQualityReport.Builder setSnrDb(int);
+  }
+
+  public final class Call {
+    method @Deprecated public void addListener(android.telecom.Call.Listener);
+    method public void enterBackgroundAudioProcessing();
+    method public void exitBackgroundAudioProcessing(boolean);
+    method @Deprecated public void removeListener(android.telecom.Call.Listener);
+    field @Deprecated public static final int STATE_PRE_DIAL_WAIT = 8; // 0x8
+  }
+
+  @Deprecated public abstract static class Call.Listener extends android.telecom.Call.Callback {
+    ctor @Deprecated public Call.Listener();
+  }
+
+  public abstract class CallDiagnosticService extends android.app.Service {
+    ctor public CallDiagnosticService();
+    method @NonNull public java.util.concurrent.Executor getExecutor();
+    method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
+    method public abstract void onBluetoothCallQualityReportReceived(@NonNull android.telecom.BluetoothCallQualityReport);
+    method public abstract void onCallAudioStateChanged(@NonNull android.telecom.CallAudioState);
+    method @NonNull public abstract android.telecom.CallDiagnostics onInitializeCallDiagnostics(@NonNull android.telecom.Call.Details);
+    method public abstract void onRemoveCallDiagnostics(@NonNull android.telecom.CallDiagnostics);
+    field public static final String SERVICE_INTERFACE = "android.telecom.CallDiagnosticService";
+  }
+
+  public abstract class CallDiagnostics {
+    ctor public CallDiagnostics();
+    method public final void clearDiagnosticMessage(int);
+    method public final void displayDiagnosticMessage(int, @NonNull CharSequence);
+    method public abstract void onCallDetailsChanged(@NonNull android.telecom.Call.Details);
+    method @Nullable public abstract CharSequence onCallDisconnected(int, int);
+    method @Nullable public abstract CharSequence onCallDisconnected(@NonNull android.telephony.ims.ImsReasonInfo);
+    method public abstract void onCallQualityReceived(@NonNull android.telephony.CallQuality);
+    method public abstract void onReceiveDeviceToDeviceMessage(int, int);
+    method public final void sendDeviceToDeviceMessage(int, int);
+    field public static final int BATTERY_STATE_CHARGING = 3; // 0x3
+    field public static final int BATTERY_STATE_GOOD = 2; // 0x2
+    field public static final int BATTERY_STATE_LOW = 1; // 0x1
+    field public static final int COVERAGE_GOOD = 2; // 0x2
+    field public static final int COVERAGE_POOR = 1; // 0x1
+    field public static final int MESSAGE_CALL_AUDIO_CODEC = 2; // 0x2
+    field public static final int MESSAGE_CALL_NETWORK_TYPE = 1; // 0x1
+    field public static final int MESSAGE_DEVICE_BATTERY_STATE = 3; // 0x3
+    field public static final int MESSAGE_DEVICE_NETWORK_COVERAGE = 4; // 0x4
+  }
+
+  public static class CallScreeningService.CallResponse.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public android.telecom.CallScreeningService.CallResponse.Builder setShouldScreenCallViaAudioProcessing(boolean);
+  }
+
+  public abstract class Conference extends android.telecom.Conferenceable {
+    method @Deprecated public final android.telecom.AudioState getAudioState();
+    method @Deprecated public final long getConnectTimeMillis();
+    method public android.telecom.Connection getPrimaryConnection();
+    method @NonNull public final String getTelecomCallId();
+    method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setAddress(@NonNull android.net.Uri, int);
+    method public final void setCallerDisplayName(@NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setConferenceState(boolean);
+    method @Deprecated public final void setConnectTimeMillis(long);
+  }
+
+  public abstract class Connection extends android.telecom.Conferenceable {
+    method @Deprecated public final android.telecom.AudioState getAudioState();
+    method @IntRange(from=0) public final long getConnectTimeMillis();
+    method public final long getConnectionStartElapsedRealtimeMillis();
+    method @Nullable public android.telecom.PhoneAccountHandle getPhoneAccountHandle();
+    method @Nullable public final String getTelecomCallId();
+    method @Deprecated public void onAudioStateChanged(android.telecom.AudioState);
+    method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(@NonNull android.telecom.Connection.CallFilteringCompletionInfo);
+    method public final void resetConnectionTime();
+    method public void setCallDirection(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectTimeMillis(@IntRange(from=0) long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public final void setConnectionStartElapsedRealtimeMillis(long);
+    method public void setPhoneAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
+    method public void setTelecomCallId(@NonNull String);
+    field public static final int CAPABILITY_CONFERENCE_HAS_NO_CHILDREN = 2097152; // 0x200000
+    field public static final int CAPABILITY_SPEED_UP_MT_AUDIO = 262144; // 0x40000
+    field public static final String EVENT_DEVICE_TO_DEVICE_MESSAGE = "android.telecom.event.DEVICE_TO_DEVICE_MESSAGE";
+    field public static final String EXTRA_DEVICE_TO_DEVICE_MESSAGE_TYPE = "android.telecom.extra.DEVICE_TO_DEVICE_MESSAGE_TYPE";
+    field public static final String EXTRA_DEVICE_TO_DEVICE_MESSAGE_VALUE = "android.telecom.extra.DEVICE_TO_DEVICE_MESSAGE_VALUE";
+    field public static final String EXTRA_DISABLE_ADD_CALL = "android.telecom.extra.DISABLE_ADD_CALL";
+    field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 1; // 0x1
+    field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
+    field public static final int PROPERTY_IS_DOWNGRADED_CONFERENCE = 64; // 0x40
+    field public static final int PROPERTY_REMOTELY_HOSTED = 2048; // 0x800
+  }
+
+  public static final class Connection.CallFilteringCompletionInfo implements android.os.Parcelable {
+    ctor public Connection.CallFilteringCompletionInfo(boolean, boolean, @Nullable android.telecom.CallScreeningService.CallResponse, @Nullable android.content.ComponentName);
+    method public int describeContents();
+    method @Nullable public android.telecom.CallScreeningService.CallResponse getCallResponse();
+    method @Nullable public android.content.ComponentName getCallScreeningComponent();
+    method public boolean isBlocked();
+    method public boolean isInContacts();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.Connection.CallFilteringCompletionInfo> CREATOR;
+  }
+
+  public final class ConnectionRequest implements android.os.Parcelable {
+    method @Nullable public String getTelecomCallId();
+  }
+
+  public abstract class ConnectionService extends android.app.Service {
+    method public final void addExistingConnection(@NonNull android.telecom.PhoneAccountHandle, @NonNull android.telecom.Connection, @NonNull android.telecom.Conference);
+  }
+
+  public abstract class InCallService extends android.app.Service {
+    method @Deprecated public android.telecom.Phone getPhone();
+    method @Deprecated public void onPhoneCreated(android.telecom.Phone);
+    method @Deprecated public void onPhoneDestroyed(android.telecom.Phone);
+  }
+
+  public class ParcelableCallAnalytics implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics(long, long, int, boolean, boolean, int, int, boolean, String, boolean, java.util.List<android.telecom.ParcelableCallAnalytics.AnalyticsEvent>, java.util.List<android.telecom.ParcelableCallAnalytics.EventTiming>);
+    ctor public ParcelableCallAnalytics(android.os.Parcel);
+    method public java.util.List<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> analyticsEvents();
+    method public int describeContents();
+    method public long getCallDurationMillis();
+    method public int getCallTechnologies();
+    method public int getCallTerminationCode();
+    method public int getCallType();
+    method public String getConnectionService();
+    method public java.util.List<android.telecom.ParcelableCallAnalytics.EventTiming> getEventTimings();
+    method public long getStartTimeMillis();
+    method public boolean isAdditionalCall();
+    method public boolean isCreatedFromExistingConnection();
+    method public boolean isEmergencyCall();
+    method public boolean isInterrupted();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALLTYPE_INCOMING = 1; // 0x1
+    field public static final int CALLTYPE_OUTGOING = 2; // 0x2
+    field public static final int CALLTYPE_UNKNOWN = 0; // 0x0
+    field public static final int CDMA_PHONE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics> CREATOR;
+    field public static final int GSM_PHONE = 2; // 0x2
+    field public static final int IMS_PHONE = 4; // 0x4
+    field public static final long MILLIS_IN_1_SECOND = 1000L; // 0x3e8L
+    field public static final long MILLIS_IN_5_MINUTES = 300000L; // 0x493e0L
+    field public static final int SIP_PHONE = 8; // 0x8
+    field public static final int STILL_CONNECTED = -1; // 0xffffffff
+    field public static final int THIRD_PARTY_PHONE = 16; // 0x10
+  }
+
+  public static final class ParcelableCallAnalytics.AnalyticsEvent implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics.AnalyticsEvent(int, long);
+    method public int describeContents();
+    method public int getEventName();
+    method public long getTimeSinceLastEvent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_ROUTE_BT = 204; // 0xcc
+    field public static final int AUDIO_ROUTE_EARPIECE = 205; // 0xcd
+    field public static final int AUDIO_ROUTE_HEADSET = 206; // 0xce
+    field public static final int AUDIO_ROUTE_SPEAKER = 207; // 0xcf
+    field public static final int BIND_CS = 5; // 0x5
+    field public static final int BLOCK_CHECK_FINISHED = 105; // 0x69
+    field public static final int BLOCK_CHECK_INITIATED = 104; // 0x68
+    field public static final int CONFERENCE_WITH = 300; // 0x12c
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> CREATOR;
+    field public static final int CS_BOUND = 6; // 0x6
+    field public static final int DIRECT_TO_VM_FINISHED = 103; // 0x67
+    field public static final int DIRECT_TO_VM_INITIATED = 102; // 0x66
+    field public static final int FILTERING_COMPLETED = 107; // 0x6b
+    field public static final int FILTERING_INITIATED = 106; // 0x6a
+    field public static final int FILTERING_TIMED_OUT = 108; // 0x6c
+    field public static final int MUTE = 202; // 0xca
+    field public static final int REMOTELY_HELD = 402; // 0x192
+    field public static final int REMOTELY_UNHELD = 403; // 0x193
+    field public static final int REQUEST_ACCEPT = 7; // 0x7
+    field public static final int REQUEST_HOLD = 400; // 0x190
+    field public static final int REQUEST_PULL = 500; // 0x1f4
+    field public static final int REQUEST_REJECT = 8; // 0x8
+    field public static final int REQUEST_UNHOLD = 401; // 0x191
+    field public static final int SCREENING_COMPLETED = 101; // 0x65
+    field public static final int SCREENING_SENT = 100; // 0x64
+    field public static final int SET_ACTIVE = 1; // 0x1
+    field public static final int SET_DIALING = 4; // 0x4
+    field public static final int SET_DISCONNECTED = 2; // 0x2
+    field public static final int SET_HOLD = 404; // 0x194
+    field public static final int SET_PARENT = 302; // 0x12e
+    field public static final int SET_SELECT_PHONE_ACCOUNT = 0; // 0x0
+    field public static final int SILENCE = 201; // 0xc9
+    field public static final int SKIP_RINGING = 200; // 0xc8
+    field public static final int SPLIT_CONFERENCE = 301; // 0x12d
+    field public static final int START_CONNECTION = 3; // 0x3
+    field public static final int SWAP = 405; // 0x195
+    field public static final int UNMUTE = 203; // 0xcb
+  }
+
+  public static final class ParcelableCallAnalytics.EventTiming implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics.EventTiming(int, long);
+    method public int describeContents();
+    method public int getName();
+    method public long getTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACCEPT_TIMING = 0; // 0x0
+    field public static final int BIND_CS_TIMING = 6; // 0x6
+    field public static final int BLOCK_CHECK_FINISHED_TIMING = 9; // 0x9
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.EventTiming> CREATOR;
+    field public static final int DIRECT_TO_VM_FINISHED_TIMING = 8; // 0x8
+    field public static final int DISCONNECT_TIMING = 2; // 0x2
+    field public static final int FILTERING_COMPLETED_TIMING = 10; // 0xa
+    field public static final int FILTERING_TIMED_OUT_TIMING = 11; // 0xb
+    field public static final int HOLD_TIMING = 3; // 0x3
+    field public static final int INVALID = 999999; // 0xf423f
+    field public static final int OUTGOING_TIME_TO_DIALING_TIMING = 5; // 0x5
+    field public static final int REJECT_TIMING = 1; // 0x1
+    field public static final int SCREENING_COMPLETED_TIMING = 7; // 0x7
+    field public static final int UNHOLD_TIMING = 4; // 0x4
+  }
+
+  @Deprecated public final class Phone {
+    method @Deprecated public void addListener(android.telecom.Phone.Listener);
+    method @Deprecated public boolean canAddCall();
+    method @Deprecated public android.telecom.AudioState getAudioState();
+    method @Deprecated public android.telecom.CallAudioState getCallAudioState();
+    method @Deprecated public java.util.List<android.telecom.Call> getCalls();
+    method @Deprecated public void removeListener(android.telecom.Phone.Listener);
+    method @Deprecated public void requestBluetoothAudio(String);
+    method @Deprecated public void setAudioRoute(int);
+    method @Deprecated public void setMuted(boolean);
+  }
+
+  @Deprecated public abstract static class Phone.Listener {
+    ctor @Deprecated public Phone.Listener();
+    method @Deprecated public void onAudioStateChanged(android.telecom.Phone, android.telecom.AudioState);
+    method @Deprecated public void onBringToForeground(android.telecom.Phone, boolean);
+    method @Deprecated public void onCallAdded(android.telecom.Phone, android.telecom.Call);
+    method @Deprecated public void onCallAudioStateChanged(android.telecom.Phone, android.telecom.CallAudioState);
+    method @Deprecated public void onCallRemoved(android.telecom.Phone, android.telecom.Call);
+    method @Deprecated public void onCanAddCallChanged(android.telecom.Phone, boolean);
+    method @Deprecated public void onSilenceRinger(android.telecom.Phone);
+  }
+
+  public final class PhoneAccount implements android.os.Parcelable {
+    field public static final int CAPABILITY_EMERGENCY_CALLS_ONLY = 128; // 0x80
+    field public static final int CAPABILITY_EMERGENCY_PREFERRED = 8192; // 0x2000
+    field public static final int CAPABILITY_EMERGENCY_VIDEO_CALLING = 512; // 0x200
+    field public static final int CAPABILITY_MULTI_USER = 32; // 0x20
+    field public static final String EXTRA_PLAY_CALL_RECORDING_TONE = "android.telecom.extra.PLAY_CALL_RECORDING_TONE";
+    field public static final String EXTRA_SORT_ORDER = "android.telecom.extra.SORT_ORDER";
+  }
+
+  public static class PhoneAccount.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telecom.PhoneAccount.Builder setGroupId(@NonNull String);
+  }
+
+  public class PhoneAccountSuggestionService extends android.app.Service {
+    ctor public PhoneAccountSuggestionService();
+    method public void onAccountSuggestionRequest(@NonNull String);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public final void suggestPhoneAccounts(@NonNull String, @NonNull java.util.List<android.telecom.PhoneAccountSuggestion>);
+    field public static final String SERVICE_INTERFACE = "android.telecom.PhoneAccountSuggestionService";
+  }
+
+  public final class RemoteConference {
+    method @Deprecated public void setAudioState(android.telecom.AudioState);
+  }
+
+  public final class RemoteConnection {
+    method @RequiresPermission(android.Manifest.permission.READ_CONTACTS) public void onCallFilteringCompleted(@NonNull android.telecom.Connection.CallFilteringCompletionInfo);
+    method @Deprecated public void setAudioState(android.telecom.AudioState);
+  }
+
+  public final class StatusHints implements android.os.Parcelable {
+    ctor @Deprecated public StatusHints(android.content.ComponentName, CharSequence, int, android.os.Bundle);
+    method @Deprecated public android.graphics.drawable.Drawable getIcon(android.content.Context);
+    method @Deprecated public int getIconResId();
+    method @Deprecated public android.content.ComponentName getPackageName();
+  }
+
+  public final class TelecomAnalytics implements android.os.Parcelable {
+    ctor public TelecomAnalytics(java.util.List<android.telecom.TelecomAnalytics.SessionTiming>, java.util.List<android.telecom.ParcelableCallAnalytics>);
+    method public int describeContents();
+    method public java.util.List<android.telecom.ParcelableCallAnalytics> getCallAnalytics();
+    method public java.util.List<android.telecom.TelecomAnalytics.SessionTiming> getSessionTimings();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics> CREATOR;
+  }
+
+  public static final class TelecomAnalytics.SessionTiming implements android.os.Parcelable {
+    ctor public TelecomAnalytics.SessionTiming(int, long);
+    method public int describeContents();
+    method public Integer getKey();
+    method public long getTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics.SessionTiming> CREATOR;
+    field public static final int CSW_ADD_CONFERENCE_CALL = 108; // 0x6c
+    field public static final int CSW_HANDLE_CREATE_CONNECTION_COMPLETE = 100; // 0x64
+    field public static final int CSW_REMOVE_CALL = 106; // 0x6a
+    field public static final int CSW_SET_ACTIVE = 101; // 0x65
+    field public static final int CSW_SET_DIALING = 103; // 0x67
+    field public static final int CSW_SET_DISCONNECTED = 104; // 0x68
+    field public static final int CSW_SET_IS_CONFERENCED = 107; // 0x6b
+    field public static final int CSW_SET_ON_HOLD = 105; // 0x69
+    field public static final int CSW_SET_RINGING = 102; // 0x66
+    field public static final int ICA_ANSWER_CALL = 1; // 0x1
+    field public static final int ICA_CONFERENCE = 8; // 0x8
+    field public static final int ICA_DISCONNECT_CALL = 3; // 0x3
+    field public static final int ICA_HOLD_CALL = 4; // 0x4
+    field public static final int ICA_MUTE = 6; // 0x6
+    field public static final int ICA_REJECT_CALL = 2; // 0x2
+    field public static final int ICA_SET_AUDIO_ROUTE = 7; // 0x7
+    field public static final int ICA_UNHOLD_CALL = 5; // 0x5
+  }
+
+  public class TelecomManager {
+    method public void addNewUnknownCall(android.telecom.PhoneAccountHandle, android.os.Bundle);
+    method @Deprecated public void clearAccounts();
+    method public void clearPhoneAccounts();
+    method @NonNull public android.content.Intent createLaunchEmergencyDialerIntent(@Nullable String);
+    method @RequiresPermission(android.Manifest.permission.DUMP) public android.telecom.TelecomAnalytics dumpAnalytics();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void enablePhoneAccount(android.telecom.PhoneAccountHandle, boolean);
+    method public java.util.List<android.telecom.PhoneAccountHandle> getAllPhoneAccountHandles();
+    method public java.util.List<android.telecom.PhoneAccount> getAllPhoneAccounts();
+    method public int getAllPhoneAccountsCount();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.telecom.PhoneAccountHandle> getCallCapablePhoneAccounts(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}, conditional=true) public int getCallState();
+    method public android.telecom.PhoneAccountHandle getConnectionManager();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCurrentTtyMode();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultDialerPackage(@NonNull android.os.UserHandle);
+    method @Deprecated public android.content.ComponentName getDefaultPhoneApp();
+    method @Deprecated public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsForPackage();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public java.util.List<android.telecom.PhoneAccountHandle> getPhoneAccountsSupportingScheme(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isInEmergencyCall();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUserSelectedOutgoingPhoneAccount(@Nullable android.telecom.PhoneAccountHandle);
+    field public static final String ACTION_CURRENT_TTY_MODE_CHANGED = "android.telecom.action.CURRENT_TTY_MODE_CHANGED";
+    field public static final String ACTION_TTY_PREFERRED_MODE_CHANGED = "android.telecom.action.TTY_PREFERRED_MODE_CHANGED";
+    field public static final int CALL_SOURCE_EMERGENCY_DIALPAD = 1; // 0x1
+    field public static final int CALL_SOURCE_EMERGENCY_SHORTCUT = 2; // 0x2
+    field public static final int CALL_SOURCE_UNSPECIFIED = 0; // 0x0
+    field public static final String EXTRA_CALL_BACK_INTENT = "android.telecom.extra.CALL_BACK_INTENT";
+    field public static final String EXTRA_CALL_SOURCE = "android.telecom.extra.CALL_SOURCE";
+    field public static final String EXTRA_CALL_TECHNOLOGY_TYPE = "android.telecom.extra.CALL_TECHNOLOGY_TYPE";
+    field public static final String EXTRA_CLEAR_MISSED_CALLS_INTENT = "android.telecom.extra.CLEAR_MISSED_CALLS_INTENT";
+    field public static final String EXTRA_CONNECTION_SERVICE = "android.telecom.extra.CONNECTION_SERVICE";
+    field public static final String EXTRA_CURRENT_TTY_MODE = "android.telecom.extra.CURRENT_TTY_MODE";
+    field public static final String EXTRA_IS_USER_INTENT_EMERGENCY_CALL = "android.telecom.extra.IS_USER_INTENT_EMERGENCY_CALL";
+    field public static final String EXTRA_TTY_PREFERRED_MODE = "android.telecom.extra.TTY_PREFERRED_MODE";
+    field public static final String EXTRA_UNKNOWN_CALL_HANDLE = "android.telecom.extra.UNKNOWN_CALL_HANDLE";
+    field public static final int TTY_MODE_FULL = 1; // 0x1
+    field public static final int TTY_MODE_HCO = 2; // 0x2
+    field public static final int TTY_MODE_OFF = 0; // 0x0
+    field public static final int TTY_MODE_VCO = 3; // 0x3
+  }
+
+}
+
+package android.telephony {
+
+  public final class AccessNetworkConstants {
+    field public static final int TRANSPORT_TYPE_INVALID = -1; // 0xffffffff
+  }
+
+  public static final class AccessNetworkConstants.NgranBands {
+    method public static int getFrequencyRangeGroup(int);
+    field public static final int FREQUENCY_RANGE_GROUP_1 = 1; // 0x1
+    field public static final int FREQUENCY_RANGE_GROUP_2 = 2; // 0x2
+    field public static final int FREQUENCY_RANGE_GROUP_UNKNOWN = 0; // 0x0
+  }
+
+  public final class BarringInfo implements android.os.Parcelable {
+    ctor public BarringInfo();
+    method @NonNull public android.telephony.BarringInfo createLocationInfoSanitizedCopy();
+  }
+
+  public final class CallAttributes implements android.os.Parcelable {
+    ctor public CallAttributes(@NonNull android.telephony.PreciseCallState, int, @NonNull android.telephony.CallQuality);
+    method public int describeContents();
+    method @NonNull public android.telephony.CallQuality getCallQuality();
+    method public int getNetworkType();
+    method @NonNull public android.telephony.PreciseCallState getPreciseCallState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallAttributes> CREATOR;
+  }
+
+  public final class CallForwardingInfo implements android.os.Parcelable {
+    ctor public CallForwardingInfo(boolean, int, @Nullable String, int);
+    method public int describeContents();
+    method @Nullable public String getNumber();
+    method public int getReason();
+    method public int getTimeoutSeconds();
+    method public boolean isEnabled();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallForwardingInfo> CREATOR;
+    field public static final int REASON_ALL = 4; // 0x4
+    field public static final int REASON_ALL_CONDITIONAL = 5; // 0x5
+    field public static final int REASON_BUSY = 1; // 0x1
+    field public static final int REASON_NOT_REACHABLE = 3; // 0x3
+    field public static final int REASON_NO_REPLY = 2; // 0x2
+    field public static final int REASON_UNCONDITIONAL = 0; // 0x0
+  }
+
+  public final class CallQuality implements android.os.Parcelable {
+    ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int);
+    ctor public CallQuality(int, int, int, int, int, int, int, int, int, int, int, boolean, boolean, boolean);
+    method public int describeContents();
+    method public int getAverageRelativeJitter();
+    method public int getAverageRoundTripTime();
+    method public int getCallDuration();
+    method public int getCodecType();
+    method public int getDownlinkCallQualityLevel();
+    method public int getMaxRelativeJitter();
+    method public int getNumRtpPacketsNotReceived();
+    method public int getNumRtpPacketsReceived();
+    method public int getNumRtpPacketsTransmitted();
+    method public int getNumRtpPacketsTransmittedLost();
+    method public int getUplinkCallQualityLevel();
+    method public boolean isIncomingSilenceDetectedAtCallSetup();
+    method public boolean isOutgoingSilenceDetectedAtCallSetup();
+    method public boolean isRtpInactivityDetected();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALL_QUALITY_BAD = 4; // 0x4
+    field public static final int CALL_QUALITY_EXCELLENT = 0; // 0x0
+    field public static final int CALL_QUALITY_FAIR = 2; // 0x2
+    field public static final int CALL_QUALITY_GOOD = 1; // 0x1
+    field public static final int CALL_QUALITY_NOT_AVAILABLE = 5; // 0x5
+    field public static final int CALL_QUALITY_POOR = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CallQuality> CREATOR;
+  }
+
+  public class CarrierConfigManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getDefaultCarrierServicePackageName();
+    method @NonNull public static android.os.PersistableBundle getDefaultConfig();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void overrideConfig(int, @Nullable android.os.PersistableBundle);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void updateConfigForPhoneId(int, String);
+    field public static final int GBA_DIGEST = 3; // 0x3
+    field public static final int GBA_ME = 1; // 0x1
+    field public static final int GBA_U = 2; // 0x2
+    field public static final String KEY_CARRIER_SETUP_APP_STRING = "carrier_setup_app_string";
+    field public static final String KEY_GBA_MODE_INT = "gba_mode_int";
+    field public static final String KEY_GBA_UA_SECURITY_ORGANIZATION_INT = "gba_ua_security_organization_int";
+    field public static final String KEY_GBA_UA_SECURITY_PROTOCOL_INT = "gba_ua_security_protocol_int";
+    field public static final String KEY_GBA_UA_TLS_CIPHER_SUITE_INT = "gba_ua_tls_cipher_suite_int";
+    field public static final String KEY_SUPPORT_CDMA_1X_VOICE_CALLS_BOOL = "support_cdma_1x_voice_calls_bool";
+  }
+
+  public static final class CarrierConfigManager.Wifi {
+    field public static final String KEY_AVOID_5GHZ_SOFTAP_FOR_LAA_BOOL = "wifi.avoid_5ghz_softap_for_laa_bool";
+    field public static final String KEY_AVOID_5GHZ_WIFI_DIRECT_FOR_LAA_BOOL = "wifi.avoid_5ghz_wifi_direct_for_laa_bool";
+    field public static final String KEY_HOTSPOT_MAX_CLIENT_COUNT = "wifi.hotspot_maximum_client_count";
+    field public static final String KEY_PREFIX = "wifi.";
+    field public static final String KEY_SUGGESTION_SSID_LIST_WITH_MAC_RANDOMIZATION_DISABLED = "wifi.suggestion_ssid_list_with_mac_randomization_disabled";
+  }
+
+  public final class CarrierRestrictionRules implements android.os.Parcelable {
+    method @NonNull public java.util.List<java.lang.Boolean> areCarrierIdentifiersAllowed(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers();
+    method public int getDefaultCarrierRestriction();
+    method @NonNull public java.util.List<android.service.carrier.CarrierIdentifier> getExcludedCarriers();
+    method public int getMultiSimPolicy();
+    method public boolean isAllCarriersAllowed();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CARRIER_RESTRICTION_DEFAULT_ALLOWED = 1; // 0x1
+    field public static final int CARRIER_RESTRICTION_DEFAULT_NOT_ALLOWED = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.CarrierRestrictionRules> CREATOR;
+    field public static final int MULTISIM_POLICY_NONE = 0; // 0x0
+    field public static final int MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT = 1; // 0x1
+  }
+
+  public static final class CarrierRestrictionRules.Builder {
+    ctor public CarrierRestrictionRules.Builder();
+    method @NonNull public android.telephony.CarrierRestrictionRules build();
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed();
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int);
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>);
+    method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int);
+  }
+
+  public class CbGeoUtils {
+  }
+
+  public static class CbGeoUtils.Circle implements android.telephony.CbGeoUtils.Geometry {
+    ctor public CbGeoUtils.Circle(@NonNull android.telephony.CbGeoUtils.LatLng, double);
+    method public boolean contains(@NonNull android.telephony.CbGeoUtils.LatLng);
+    method @NonNull public android.telephony.CbGeoUtils.LatLng getCenter();
+    method public double getRadius();
+  }
+
+  public static interface CbGeoUtils.Geometry {
+    method public boolean contains(@NonNull android.telephony.CbGeoUtils.LatLng);
+  }
+
+  public static class CbGeoUtils.LatLng {
+    ctor public CbGeoUtils.LatLng(double, double);
+    method public double distance(@NonNull android.telephony.CbGeoUtils.LatLng);
+    method @NonNull public android.telephony.CbGeoUtils.LatLng subtract(@NonNull android.telephony.CbGeoUtils.LatLng);
+    field public final double lat;
+    field public final double lng;
+  }
+
+  public static class CbGeoUtils.Polygon implements android.telephony.CbGeoUtils.Geometry {
+    ctor public CbGeoUtils.Polygon(@NonNull java.util.List<android.telephony.CbGeoUtils.LatLng>);
+    method public boolean contains(@NonNull android.telephony.CbGeoUtils.LatLng);
+    method @NonNull public java.util.List<android.telephony.CbGeoUtils.LatLng> getVertices();
+  }
+
+  public class CellBroadcastIntents {
+    method public static void sendSmsCbReceivedBroadcast(@NonNull android.content.Context, @Nullable android.os.UserHandle, @NonNull android.telephony.SmsCbMessage, @Nullable android.content.BroadcastReceiver, @Nullable android.os.Handler, int, int);
+    field public static final String ACTION_AREA_INFO_UPDATED = "android.telephony.action.AREA_INFO_UPDATED";
+  }
+
+  public abstract class CellBroadcastService extends android.app.Service {
+    ctor public CellBroadcastService();
+    method @NonNull @WorkerThread public abstract CharSequence getCellBroadcastAreaInfo(int);
+    method @CallSuper public android.os.IBinder onBind(@Nullable android.content.Intent);
+    method public abstract void onCdmaCellBroadcastSms(int, @NonNull byte[], int);
+    method public abstract void onCdmaScpMessage(int, @NonNull java.util.List<android.telephony.cdma.CdmaSmsCbProgramData>, @NonNull String, @NonNull java.util.function.Consumer<android.os.Bundle>);
+    method public abstract void onGsmCellBroadcastSms(int, @NonNull byte[]);
+    field public static final String CELL_BROADCAST_SERVICE_INTERFACE = "android.telephony.CellBroadcastService";
+  }
+
+  public abstract class CellIdentity implements android.os.Parcelable {
+    method @NonNull public abstract android.telephony.CellLocation asCellLocation();
+    method @NonNull public abstract android.telephony.CellIdentity sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityCdma extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.cdma.CdmaCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityCdma sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityGsm extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityGsm sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityLte extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityLte sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityNr extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.CellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityNr sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityTdscdma extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityTdscdma sanitizeLocationInfo();
+  }
+
+  public final class CellIdentityWcdma extends android.telephony.CellIdentity {
+    method @NonNull public android.telephony.gsm.GsmCellLocation asCellLocation();
+    method @NonNull public android.telephony.CellIdentityWcdma sanitizeLocationInfo();
+  }
+
+  public final class DataFailCause {
+    field @Deprecated public static final int VSNCP_APN_UNATHORIZED = 2238; // 0x8be
+  }
+
+  public final class DataSpecificRegistrationInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Deprecated @NonNull public android.telephony.LteVopsSupportInfo getLteVopsSupportInfo();
+    method @Nullable public android.telephony.VopsSupportInfo getVopsSupportInfo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DataSpecificRegistrationInfo> CREATOR;
+  }
+
+  public final class DataThrottlingRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getCompletionDurationMillis();
+    method public int getDataThrottlingAction();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.DataThrottlingRequest> CREATOR;
+    field public static final int DATA_THROTTLING_ACTION_HOLD = 3; // 0x3
+    field public static final int DATA_THROTTLING_ACTION_NO_DATA_THROTTLING = 0; // 0x0
+    field public static final int DATA_THROTTLING_ACTION_THROTTLE_PRIMARY_CARRIER = 2; // 0x2
+    field public static final int DATA_THROTTLING_ACTION_THROTTLE_SECONDARY_CARRIER = 1; // 0x1
+  }
+
+  public static final class DataThrottlingRequest.Builder {
+    ctor public DataThrottlingRequest.Builder();
+    method @NonNull public android.telephony.DataThrottlingRequest build();
+    method @NonNull public android.telephony.DataThrottlingRequest.Builder setCompletionDurationMillis(long);
+    method @NonNull public android.telephony.DataThrottlingRequest.Builder setDataThrottlingAction(int);
+  }
+
+  public final class ImsiEncryptionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getKeyIdentifier();
+    method @Nullable public java.security.PublicKey getPublicKey();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ImsiEncryptionInfo> CREATOR;
+  }
+
+  public final class LinkCapacityEstimate implements android.os.Parcelable {
+    ctor public LinkCapacityEstimate(int, int, int);
+    method public int describeContents();
+    method public int getDownlinkCapacityKbps();
+    method public int getType();
+    method public int getUplinkCapacityKbps();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.LinkCapacityEstimate> CREATOR;
+    field public static final int INVALID = -1; // 0xffffffff
+    field public static final int LCE_TYPE_COMBINED = 2; // 0x2
+    field public static final int LCE_TYPE_PRIMARY = 0; // 0x0
+    field public static final int LCE_TYPE_SECONDARY = 1; // 0x1
+  }
+
+  public final class LteVopsSupportInfo extends android.telephony.VopsSupportInfo {
+    ctor public LteVopsSupportInfo(int, int);
+    method public int getEmcBearerSupport();
+    method public int getVopsSupport();
+    method public boolean isEmergencyServiceFallbackSupported();
+    method public boolean isEmergencyServiceSupported();
+    method public boolean isVopsSupported();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.LteVopsSupportInfo> CREATOR;
+    field @Deprecated public static final int LTE_STATUS_NOT_AVAILABLE = 1; // 0x1
+    field public static final int LTE_STATUS_NOT_SUPPORTED = 3; // 0x3
+    field public static final int LTE_STATUS_SUPPORTED = 2; // 0x2
+  }
+
+  public class MbmsDownloadSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_DOWNLOAD_SERVICE_ACTION = "android.telephony.action.EmbmsDownload";
+  }
+
+  public class MbmsGroupCallSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_GROUP_CALL_SERVICE_ACTION = "android.telephony.action.EmbmsGroupCall";
+  }
+
+  public class MbmsStreamingSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_STREAMING_SERVICE_ACTION = "android.telephony.action.EmbmsStreaming";
+  }
+
+  public final class ModemActivityInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.telephony.ModemActivityInfo getDelta(@NonNull android.telephony.ModemActivityInfo);
+    method public long getIdleTimeMillis();
+    method public static int getNumTxPowerLevels();
+    method public long getReceiveTimeMillis();
+    method public long getSleepTimeMillis();
+    method public long getTimestampMillis();
+    method public long getTransmitDurationMillisAtPowerLevel(int);
+    method @NonNull public android.util.Range<java.lang.Integer> getTransmitPowerRange(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ModemActivityInfo> CREATOR;
+    field public static final int TX_POWER_LEVEL_0 = 0; // 0x0
+    field public static final int TX_POWER_LEVEL_1 = 1; // 0x1
+    field public static final int TX_POWER_LEVEL_2 = 2; // 0x2
+    field public static final int TX_POWER_LEVEL_3 = 3; // 0x3
+    field public static final int TX_POWER_LEVEL_4 = 4; // 0x4
+  }
+
+  public final class NetworkRegistrationInfo implements android.os.Parcelable {
+    method @Nullable public android.telephony.DataSpecificRegistrationInfo getDataSpecificInfo();
+    method public int getRegistrationState();
+    method public int getRejectCause();
+    method public int getRoamingType();
+    method public boolean isEmergencyEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int REGISTRATION_STATE_DENIED = 3; // 0x3
+    field public static final int REGISTRATION_STATE_HOME = 1; // 0x1
+    field public static final int REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING = 0; // 0x0
+    field public static final int REGISTRATION_STATE_NOT_REGISTERED_SEARCHING = 2; // 0x2
+    field public static final int REGISTRATION_STATE_ROAMING = 5; // 0x5
+    field public static final int REGISTRATION_STATE_UNKNOWN = 4; // 0x4
+  }
+
+  public static final class NetworkRegistrationInfo.Builder {
+    ctor public NetworkRegistrationInfo.Builder();
+    method @NonNull public android.telephony.NetworkRegistrationInfo build();
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAccessNetworkTechnology(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setAvailableServices(@NonNull java.util.List<java.lang.Integer>);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setCellIdentity(@Nullable android.telephony.CellIdentity);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setDomain(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setEmergencyOnly(boolean);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegisteredPlmn(@Nullable String);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRegistrationState(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setRejectCause(int);
+    method @NonNull public android.telephony.NetworkRegistrationInfo.Builder setTransportType(int);
+  }
+
+  public abstract class NetworkService extends android.app.Service {
+    ctor public NetworkService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public abstract android.telephony.NetworkService.NetworkServiceProvider onCreateNetworkServiceProvider(int);
+    field public static final String SERVICE_INTERFACE = "android.telephony.NetworkService";
+  }
+
+  public abstract class NetworkService.NetworkServiceProvider implements java.lang.AutoCloseable {
+    ctor public NetworkService.NetworkServiceProvider(int);
+    method public abstract void close();
+    method public final int getSlotIndex();
+    method public final void notifyNetworkRegistrationInfoChanged();
+    method public void requestNetworkRegistrationInfo(int, @NonNull android.telephony.NetworkServiceCallback);
+  }
+
+  public class NetworkServiceCallback {
+    method public void onRequestNetworkRegistrationInfoComplete(int, @Nullable android.telephony.NetworkRegistrationInfo);
+    field public static final int RESULT_ERROR_BUSY = 3; // 0x3
+    field public static final int RESULT_ERROR_FAILED = 5; // 0x5
+    field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4
+    field public static final int RESULT_ERROR_INVALID_ARG = 2; // 0x2
+    field public static final int RESULT_ERROR_UNSUPPORTED = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public final class NrVopsSupportInfo extends android.telephony.VopsSupportInfo {
+    ctor public NrVopsSupportInfo(int, int, int);
+    method public int getEmcSupport();
+    method public int getEmfSupport();
+    method public int getVopsSupport();
+    method public boolean isEmergencyServiceFallbackSupported();
+    method public boolean isEmergencyServiceSupported();
+    method public boolean isVopsSupported();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.NrVopsSupportInfo> CREATOR;
+    field public static final int NR_STATUS_EMC_5GCN_ONLY = 1; // 0x1
+    field public static final int NR_STATUS_EMC_EUTRA_5GCN_ONLY = 2; // 0x2
+    field public static final int NR_STATUS_EMC_NOT_SUPPORTED = 0; // 0x0
+    field public static final int NR_STATUS_EMC_NR_EUTRA_5GCN = 3; // 0x3
+    field public static final int NR_STATUS_EMF_5GCN_ONLY = 1; // 0x1
+    field public static final int NR_STATUS_EMF_EUTRA_5GCN_ONLY = 2; // 0x2
+    field public static final int NR_STATUS_EMF_NOT_SUPPORTED = 0; // 0x0
+    field public static final int NR_STATUS_EMF_NR_EUTRA_5GCN = 3; // 0x3
+    field public static final int NR_STATUS_VOPS_3GPP_SUPPORTED = 1; // 0x1
+    field public static final int NR_STATUS_VOPS_NON_3GPP_SUPPORTED = 2; // 0x2
+    field public static final int NR_STATUS_VOPS_NOT_SUPPORTED = 0; // 0x0
+  }
+
+  public interface NumberVerificationCallback {
+    method public default void onCallReceived(@NonNull String);
+    method public default void onVerificationFailed(int);
+    field public static final int REASON_CONCURRENT_REQUESTS = 4; // 0x4
+    field public static final int REASON_IN_ECBM = 5; // 0x5
+    field public static final int REASON_IN_EMERGENCY_CALL = 6; // 0x6
+    field public static final int REASON_NETWORK_NOT_AVAILABLE = 2; // 0x2
+    field public static final int REASON_TIMED_OUT = 1; // 0x1
+    field public static final int REASON_TOO_MANY_CALLS = 3; // 0x3
+    field public static final int REASON_UNSPECIFIED = 0; // 0x0
+  }
+
+  public final class PhoneCapability implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public int[] getDeviceNrCapabilities();
+    method @IntRange(from=1) public int getMaxActiveDataSubscriptions();
+    method @IntRange(from=1) public int getMaxActiveVoiceSubscriptions();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhoneCapability> CREATOR;
+    field public static final int DEVICE_NR_CAPABILITY_NSA = 1; // 0x1
+    field public static final int DEVICE_NR_CAPABILITY_SA = 2; // 0x2
+  }
+
+  public final class PhoneNumberRange implements android.os.Parcelable {
+    ctor public PhoneNumberRange(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
+    method public int describeContents();
+    method public boolean matches(@NonNull String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PhoneNumberRange> CREATOR;
+  }
+
+  public class PhoneNumberUtils {
+    method @NonNull public static String getUsernameFromUriNumber(@NonNull String);
+    method public static boolean isUriNumber(@Nullable String);
+    method public static boolean isVoiceMailNumber(@NonNull android.content.Context, int, @Nullable String);
+  }
+
+  @Deprecated public class PhoneStateListener {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber);
+    method @Deprecated public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber, int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onRadioPowerStateChanged(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onSrvccStateChanged(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onVoiceActivationStateChanged(int);
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_CALL_ATTRIBUTES_CHANGED = 67108864; // 0x4000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int LISTEN_OUTGOING_EMERGENCY_CALL = 268435456; // 0x10000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int LISTEN_OUTGOING_EMERGENCY_SMS = 536870912; // 0x20000000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int LISTEN_PRECISE_CALL_STATE = 2048; // 0x800
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_RADIO_POWER_STATE_CHANGED = 8388608; // 0x800000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_SRVCC_STATE_CHANGED = 16384; // 0x4000
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int LISTEN_VOICE_ACTIVATION_STATE = 131072; // 0x20000
+  }
+
+  public final class PinResult implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAttemptsRemaining();
+    method public int getResult();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PinResult> CREATOR;
+    field public static final int PIN_RESULT_TYPE_ABORTED = 3; // 0x3
+    field public static final int PIN_RESULT_TYPE_FAILURE = 2; // 0x2
+    field public static final int PIN_RESULT_TYPE_INCORRECT = 1; // 0x1
+    field public static final int PIN_RESULT_TYPE_SUCCESS = 0; // 0x0
+  }
+
+  public final class PreciseCallState implements android.os.Parcelable {
+    ctor public PreciseCallState(int, int, int, int, int);
+    method public int describeContents();
+    method public int getBackgroundCallState();
+    method public int getForegroundCallState();
+    method public int getRingingCallState();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.PreciseCallState> CREATOR;
+    field public static final int PRECISE_CALL_STATE_ACTIVE = 1; // 0x1
+    field public static final int PRECISE_CALL_STATE_ALERTING = 4; // 0x4
+    field public static final int PRECISE_CALL_STATE_DIALING = 3; // 0x3
+    field public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; // 0x7
+    field public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; // 0x8
+    field public static final int PRECISE_CALL_STATE_HOLDING = 2; // 0x2
+    field public static final int PRECISE_CALL_STATE_IDLE = 0; // 0x0
+    field public static final int PRECISE_CALL_STATE_INCOMING = 5; // 0x5
+    field public static final int PRECISE_CALL_STATE_NOT_VALID = -1; // 0xffffffff
+    field public static final int PRECISE_CALL_STATE_WAITING = 6; // 0x6
+  }
+
+  public final class PreciseDataConnectionState implements android.os.Parcelable {
+    method @Deprecated @NonNull public String getDataConnectionApn();
+    method @Deprecated public int getDataConnectionApnTypeBitMask();
+    method @Deprecated public int getDataConnectionFailCause();
+    method @Deprecated public int getDataConnectionState();
+  }
+
+  public final class PreciseDisconnectCause {
+    field public static final int ACCESS_CLASS_BLOCKED = 260; // 0x104
+    field public static final int ACCESS_INFORMATION_DISCARDED = 43; // 0x2b
+    field public static final int ACM_LIMIT_EXCEEDED = 68; // 0x44
+    field public static final int BEARER_CAPABILITY_NOT_AUTHORIZED = 57; // 0x39
+    field public static final int BEARER_NOT_AVAIL = 58; // 0x3a
+    field public static final int BEARER_SERVICE_NOT_IMPLEMENTED = 65; // 0x41
+    field public static final int BUSY = 17; // 0x11
+    field public static final int CALL_BARRED = 240; // 0xf0
+    field public static final int CALL_REJECTED = 21; // 0x15
+    field public static final int CDMA_ACCESS_BLOCKED = 1009; // 0x3f1
+    field public static final int CDMA_ACCESS_FAILURE = 1006; // 0x3ee
+    field public static final int CDMA_DROP = 1001; // 0x3e9
+    field public static final int CDMA_INTERCEPT = 1002; // 0x3ea
+    field public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000; // 0x3e8
+    field public static final int CDMA_NOT_EMERGENCY = 1008; // 0x3f0
+    field public static final int CDMA_PREEMPTED = 1007; // 0x3ef
+    field public static final int CDMA_REORDER = 1003; // 0x3eb
+    field public static final int CDMA_RETRY_ORDER = 1005; // 0x3ed
+    field public static final int CDMA_SO_REJECT = 1004; // 0x3ec
+    field public static final int CHANNEL_NOT_AVAIL = 44; // 0x2c
+    field public static final int CHANNEL_UNACCEPTABLE = 6; // 0x6
+    field public static final int CONDITIONAL_IE_ERROR = 100; // 0x64
+    field public static final int DESTINATION_OUT_OF_ORDER = 27; // 0x1b
+    field public static final int ERROR_UNSPECIFIED = 65535; // 0xffff
+    field public static final int FACILITY_REJECTED = 29; // 0x1d
+    field public static final int FDN_BLOCKED = 241; // 0xf1
+    field public static final int IMEI_NOT_ACCEPTED = 243; // 0xf3
+    field public static final int IMSI_UNKNOWN_IN_VLR = 242; // 0xf2
+    field public static final int INCOMING_CALLS_BARRED_WITHIN_CUG = 55; // 0x37
+    field public static final int INCOMPATIBLE_DESTINATION = 88; // 0x58
+    field public static final int INFORMATION_ELEMENT_NON_EXISTENT = 99; // 0x63
+    field public static final int INTERWORKING_UNSPECIFIED = 127; // 0x7f
+    field public static final int INVALID_MANDATORY_INFORMATION = 96; // 0x60
+    field public static final int INVALID_NUMBER_FORMAT = 28; // 0x1c
+    field public static final int INVALID_TRANSACTION_IDENTIFIER = 81; // 0x51
+    field public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101; // 0x65
+    field public static final int MESSAGE_TYPE_NON_IMPLEMENTED = 97; // 0x61
+    field public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98; // 0x62
+    field public static final int NETWORK_DETACH = 261; // 0x105
+    field public static final int NETWORK_OUT_OF_ORDER = 38; // 0x26
+    field public static final int NETWORK_REJECT = 252; // 0xfc
+    field public static final int NETWORK_RESP_TIMEOUT = 251; // 0xfb
+    field public static final int NORMAL = 16; // 0x10
+    field public static final int NORMAL_UNSPECIFIED = 31; // 0x1f
+    field public static final int NOT_VALID = -1; // 0xffffffff
+    field public static final int NO_ANSWER_FROM_USER = 19; // 0x13
+    field public static final int NO_CIRCUIT_AVAIL = 34; // 0x22
+    field public static final int NO_DISCONNECT_CAUSE_AVAILABLE = 0; // 0x0
+    field public static final int NO_ROUTE_TO_DESTINATION = 3; // 0x3
+    field public static final int NO_USER_RESPONDING = 18; // 0x12
+    field public static final int NO_VALID_SIM = 249; // 0xf9
+    field public static final int NUMBER_CHANGED = 22; // 0x16
+    field public static final int OEM_CAUSE_1 = 61441; // 0xf001
+    field public static final int OEM_CAUSE_10 = 61450; // 0xf00a
+    field public static final int OEM_CAUSE_11 = 61451; // 0xf00b
+    field public static final int OEM_CAUSE_12 = 61452; // 0xf00c
+    field public static final int OEM_CAUSE_13 = 61453; // 0xf00d
+    field public static final int OEM_CAUSE_14 = 61454; // 0xf00e
+    field public static final int OEM_CAUSE_15 = 61455; // 0xf00f
+    field public static final int OEM_CAUSE_2 = 61442; // 0xf002
+    field public static final int OEM_CAUSE_3 = 61443; // 0xf003
+    field public static final int OEM_CAUSE_4 = 61444; // 0xf004
+    field public static final int OEM_CAUSE_5 = 61445; // 0xf005
+    field public static final int OEM_CAUSE_6 = 61446; // 0xf006
+    field public static final int OEM_CAUSE_7 = 61447; // 0xf007
+    field public static final int OEM_CAUSE_8 = 61448; // 0xf008
+    field public static final int OEM_CAUSE_9 = 61449; // 0xf009
+    field public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 70; // 0x46
+    field public static final int OPERATOR_DETERMINED_BARRING = 8; // 0x8
+    field public static final int OUT_OF_SRV = 248; // 0xf8
+    field public static final int PREEMPTION = 25; // 0x19
+    field public static final int PROTOCOL_ERROR_UNSPECIFIED = 111; // 0x6f
+    field public static final int QOS_NOT_AVAIL = 49; // 0x31
+    field public static final int RADIO_ACCESS_FAILURE = 253; // 0xfd
+    field public static final int RADIO_INTERNAL_ERROR = 250; // 0xfa
+    field public static final int RADIO_LINK_FAILURE = 254; // 0xfe
+    field public static final int RADIO_LINK_LOST = 255; // 0xff
+    field public static final int RADIO_OFF = 247; // 0xf7
+    field public static final int RADIO_RELEASE_ABNORMAL = 259; // 0x103
+    field public static final int RADIO_RELEASE_NORMAL = 258; // 0x102
+    field public static final int RADIO_SETUP_FAILURE = 257; // 0x101
+    field public static final int RADIO_UPLINK_FAILURE = 256; // 0x100
+    field public static final int RECOVERY_ON_TIMER_EXPIRED = 102; // 0x66
+    field public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED = 69; // 0x45
+    field public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED = 50; // 0x32
+    field public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 47; // 0x2f
+    field public static final int SEMANTICALLY_INCORRECT_MESSAGE = 95; // 0x5f
+    field public static final int SERVICE_OPTION_NOT_AVAILABLE = 63; // 0x3f
+    field public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79; // 0x4f
+    field public static final int STATUS_ENQUIRY = 30; // 0x1e
+    field public static final int SWITCHING_CONGESTION = 42; // 0x2a
+    field public static final int TEMPORARY_FAILURE = 41; // 0x29
+    field public static final int UNOBTAINABLE_NUMBER = 1; // 0x1
+    field public static final int USER_NOT_MEMBER_OF_CUG = 87; // 0x57
+  }
+
+  public class ServiceState implements android.os.Parcelable {
+    method @Nullable public android.telephony.NetworkRegistrationInfo getNetworkRegistrationInfo(int, int);
+    method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForDomain(int);
+    method @NonNull public java.util.List<android.telephony.NetworkRegistrationInfo> getNetworkRegistrationInfoListForTransportType(int);
+    field public static final int ROAMING_TYPE_DOMESTIC = 2; // 0x2
+    field public static final int ROAMING_TYPE_INTERNATIONAL = 3; // 0x3
+    field public static final int ROAMING_TYPE_NOT_ROAMING = 0; // 0x0
+    field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1
+  }
+
+  public final class SmsCbCmasInfo implements android.os.Parcelable {
+    ctor public SmsCbCmasInfo(int, int, int, int, int, int);
+    method public int describeContents();
+    method public int getCategory();
+    method public int getCertainty();
+    method public int getMessageClass();
+    method public int getResponseType();
+    method public int getSeverity();
+    method public int getUrgency();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CMAS_CATEGORY_CBRNE = 10; // 0xa
+    field public static final int CMAS_CATEGORY_ENV = 7; // 0x7
+    field public static final int CMAS_CATEGORY_FIRE = 5; // 0x5
+    field public static final int CMAS_CATEGORY_GEO = 0; // 0x0
+    field public static final int CMAS_CATEGORY_HEALTH = 6; // 0x6
+    field public static final int CMAS_CATEGORY_INFRA = 9; // 0x9
+    field public static final int CMAS_CATEGORY_MET = 1; // 0x1
+    field public static final int CMAS_CATEGORY_OTHER = 11; // 0xb
+    field public static final int CMAS_CATEGORY_RESCUE = 4; // 0x4
+    field public static final int CMAS_CATEGORY_SAFETY = 2; // 0x2
+    field public static final int CMAS_CATEGORY_SECURITY = 3; // 0x3
+    field public static final int CMAS_CATEGORY_TRANSPORT = 8; // 0x8
+    field public static final int CMAS_CATEGORY_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_CERTAINTY_LIKELY = 1; // 0x1
+    field public static final int CMAS_CERTAINTY_OBSERVED = 0; // 0x0
+    field public static final int CMAS_CERTAINTY_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY = 3; // 0x3
+    field public static final int CMAS_CLASS_CMAS_EXERCISE = 5; // 0x5
+    field public static final int CMAS_CLASS_EXTREME_THREAT = 1; // 0x1
+    field public static final int CMAS_CLASS_OPERATOR_DEFINED_USE = 6; // 0x6
+    field public static final int CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT = 0; // 0x0
+    field public static final int CMAS_CLASS_REQUIRED_MONTHLY_TEST = 4; // 0x4
+    field public static final int CMAS_CLASS_SEVERE_THREAT = 2; // 0x2
+    field public static final int CMAS_CLASS_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_RESPONSE_TYPE_ASSESS = 6; // 0x6
+    field public static final int CMAS_RESPONSE_TYPE_AVOID = 5; // 0x5
+    field public static final int CMAS_RESPONSE_TYPE_EVACUATE = 1; // 0x1
+    field public static final int CMAS_RESPONSE_TYPE_EXECUTE = 3; // 0x3
+    field public static final int CMAS_RESPONSE_TYPE_MONITOR = 4; // 0x4
+    field public static final int CMAS_RESPONSE_TYPE_NONE = 7; // 0x7
+    field public static final int CMAS_RESPONSE_TYPE_PREPARE = 2; // 0x2
+    field public static final int CMAS_RESPONSE_TYPE_SHELTER = 0; // 0x0
+    field public static final int CMAS_RESPONSE_TYPE_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_SEVERITY_EXTREME = 0; // 0x0
+    field public static final int CMAS_SEVERITY_SEVERE = 1; // 0x1
+    field public static final int CMAS_SEVERITY_UNKNOWN = -1; // 0xffffffff
+    field public static final int CMAS_URGENCY_EXPECTED = 1; // 0x1
+    field public static final int CMAS_URGENCY_IMMEDIATE = 0; // 0x0
+    field public static final int CMAS_URGENCY_UNKNOWN = -1; // 0xffffffff
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbCmasInfo> CREATOR;
+  }
+
+  public final class SmsCbEtwsInfo implements android.os.Parcelable {
+    ctor public SmsCbEtwsInfo(int, boolean, boolean, boolean, @Nullable byte[]);
+    method public int describeContents();
+    method @Nullable public byte[] getPrimaryNotificationSignature();
+    method public long getPrimaryNotificationTimestamp();
+    method public int getWarningType();
+    method public boolean isEmergencyUserAlert();
+    method public boolean isPopupAlert();
+    method public boolean isPrimary();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbEtwsInfo> CREATOR;
+    field public static final int ETWS_WARNING_TYPE_EARTHQUAKE = 0; // 0x0
+    field public static final int ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI = 2; // 0x2
+    field public static final int ETWS_WARNING_TYPE_OTHER_EMERGENCY = 4; // 0x4
+    field public static final int ETWS_WARNING_TYPE_TEST_MESSAGE = 3; // 0x3
+    field public static final int ETWS_WARNING_TYPE_TSUNAMI = 1; // 0x1
+    field public static final int ETWS_WARNING_TYPE_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public final class SmsCbLocation implements android.os.Parcelable {
+    ctor public SmsCbLocation(@NonNull String, int, int);
+    method public int describeContents();
+    method public int getCid();
+    method public int getLac();
+    method @NonNull public String getPlmn();
+    method public boolean isInLocationArea(@NonNull android.telephony.SmsCbLocation);
+    method public boolean isInLocationArea(@Nullable String, int, int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbLocation> CREATOR;
+  }
+
+  public final class SmsCbMessage implements android.os.Parcelable {
+    ctor public SmsCbMessage(int, int, int, @NonNull android.telephony.SmsCbLocation, int, @Nullable String, int, @Nullable String, int, @Nullable android.telephony.SmsCbEtwsInfo, @Nullable android.telephony.SmsCbCmasInfo, int, @Nullable java.util.List<android.telephony.CbGeoUtils.Geometry>, long, int, int);
+    method @NonNull public static android.telephony.SmsCbMessage createFromCursor(@NonNull android.database.Cursor);
+    method public int describeContents();
+    method @Nullable public android.telephony.SmsCbCmasInfo getCmasWarningInfo();
+    method @NonNull public android.content.ContentValues getContentValues();
+    method public int getDataCodingScheme();
+    method @Nullable public android.telephony.SmsCbEtwsInfo getEtwsWarningInfo();
+    method public int getGeographicalScope();
+    method @NonNull public java.util.List<android.telephony.CbGeoUtils.Geometry> getGeometries();
+    method @Nullable public String getLanguageCode();
+    method @NonNull public android.telephony.SmsCbLocation getLocation();
+    method public int getMaximumWaitingDuration();
+    method @Nullable public String getMessageBody();
+    method public int getMessageFormat();
+    method public int getMessagePriority();
+    method public long getReceivedTime();
+    method public int getSerialNumber();
+    method public int getServiceCategory();
+    method public int getSlotIndex();
+    method public int getSubscriptionId();
+    method public boolean isCmasMessage();
+    method public boolean isEmergencyMessage();
+    method public boolean isEtwsMessage();
+    method public boolean needGeoFencingCheck();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbMessage> CREATOR;
+    field public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE = 3; // 0x3
+    field public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE = 0; // 0x0
+    field public static final int GEOGRAPHICAL_SCOPE_LOCATION_AREA_WIDE = 2; // 0x2
+    field public static final int GEOGRAPHICAL_SCOPE_PLMN_WIDE = 1; // 0x1
+    field public static final int MAXIMUM_WAIT_TIME_NOT_SET = 255; // 0xff
+    field public static final int MESSAGE_FORMAT_3GPP = 1; // 0x1
+    field public static final int MESSAGE_FORMAT_3GPP2 = 2; // 0x2
+    field public static final int MESSAGE_PRIORITY_EMERGENCY = 3; // 0x3
+    field public static final int MESSAGE_PRIORITY_INTERACTIVE = 1; // 0x1
+    field public static final int MESSAGE_PRIORITY_NORMAL = 0; // 0x0
+    field public static final int MESSAGE_PRIORITY_URGENT = 2; // 0x2
+  }
+
+  public final class SmsManager {
+    method public boolean disableCellBroadcastRange(int, int, int);
+    method public boolean enableCellBroadcastRange(int, int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getPremiumSmsConsent(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_CELL_BROADCASTS) public void resetAllCellBroadcastRanges();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void sendMultipartTextMessageWithoutPersisting(String, String, java.util.List<java.lang.String>, java.util.List<android.app.PendingIntent>, java.util.List<android.app.PendingIntent>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPremiumSmsConsent(@NonNull String, int);
+    field public static final int PREMIUM_SMS_CONSENT_ALWAYS_ALLOW = 3; // 0x3
+    field public static final int PREMIUM_SMS_CONSENT_ASK_USER = 1; // 0x1
+    field public static final int PREMIUM_SMS_CONSENT_NEVER_ALLOW = 2; // 0x2
+    field public static final int PREMIUM_SMS_CONSENT_UNKNOWN = 0; // 0x0
+  }
+
+  public class SmsMessage {
+    method @Nullable public static android.telephony.SmsMessage createFromNativeSmsSubmitPdu(@NonNull byte[], boolean);
+    method @Nullable public static android.telephony.SmsMessage.SubmitPdu getSmsPdu(int, int, @Nullable String, @NonNull String, @NonNull String, long);
+    method @NonNull @RequiresPermission(android.Manifest.permission.BLUETOOTH_PRIVILEGED) public static byte[] getSubmitPduEncodedMessage(boolean, @NonNull String, @NonNull String, int, @IntRange(from=0) int, @IntRange(from=0) int, @IntRange(from=0, to=255) int, @IntRange(from=1, to=255) int, @IntRange(from=1, to=255) int);
+  }
+
+  public class SubscriptionInfo implements android.os.Parcelable {
+    method public boolean areUiccApplicationsEnabled();
+    method @Nullable public java.util.List<android.telephony.UiccAccessRule> getAccessRules();
+    method public int getProfileClass();
+    method public boolean isGroupDisabled();
+  }
+
+  public class SubscriptionManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean canDisablePhysicalSubscription();
+    method public boolean canManageSubscription(@NonNull android.telephony.SubscriptionInfo, @NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int[] getActiveSubscriptionIdList();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.SubscriptionInfo getActiveSubscriptionInfoForIcc(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public byte[] getAllSimSpecificSettingsForBackup();
+    method public java.util.List<android.telephony.SubscriptionInfo> getAvailableSubscriptionInfoList();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int[] getCompleteActiveSubscriptionIdList();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getEnabledSubscriptionId(int);
+    method @NonNull public static android.content.res.Resources getResourcesForSubId(@NonNull android.content.Context, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isSubscriptionEnabled(int);
+    method public void requestEmbeddedSubscriptionInfoListRefresh();
+    method public void requestEmbeddedSubscriptionInfoListRefresh(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void restoreAllSimSpecificSettingsFromBackup(@NonNull byte[]);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultDataSubId(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultSmsSubId(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDefaultVoiceSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setPreferredDataSubscriptionId(int, boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setSubscriptionEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUiccApplicationsEnabled(int, boolean);
+    field @RequiresPermission(android.Manifest.permission.MANAGE_SUBSCRIPTION_PLANS) public static final String ACTION_SUBSCRIPTION_PLANS_CHANGED = "android.telephony.action.SUBSCRIPTION_PLANS_CHANGED";
+    field @NonNull public static final android.net.Uri ADVANCED_CALLING_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri CROSS_SIM_ENABLED_CONTENT_URI;
+    field @Deprecated public static final int PROFILE_CLASS_DEFAULT = -1; // 0xffffffff
+    field public static final int PROFILE_CLASS_OPERATIONAL = 2; // 0x2
+    field public static final int PROFILE_CLASS_PROVISIONING = 1; // 0x1
+    field public static final int PROFILE_CLASS_TESTING = 0; // 0x0
+    field public static final int PROFILE_CLASS_UNSET = -1; // 0xffffffff
+    field @NonNull public static final android.net.Uri VT_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_MODE_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_ROAMING_ENABLED_CONTENT_URI;
+    field @NonNull public static final android.net.Uri WFC_ROAMING_MODE_CONTENT_URI;
+  }
+
+  public static class SubscriptionPlan.Builder {
+    method @Deprecated public static android.telephony.SubscriptionPlan.Builder createRecurringDaily(java.time.ZonedDateTime);
+    method @Deprecated public static android.telephony.SubscriptionPlan.Builder createRecurringMonthly(java.time.ZonedDateTime);
+    method @Deprecated public static android.telephony.SubscriptionPlan.Builder createRecurringWeekly(java.time.ZonedDateTime);
+  }
+
+  public class TelephonyCallback {
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGED = 23; // 0x17
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_ALLOWED_NETWORK_TYPE_LIST_CHANGED = 35; // 0x23
+    field public static final int EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED = 10; // 0xa
+    field @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int EVENT_BARRING_INFO_CHANGED = 32; // 0x20
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_CALL_ATTRIBUTES_CHANGED = 27; // 0x1b
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_CALL_DISCONNECT_CAUSE_CHANGED = 26; // 0x1a
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_CALL_FORWARDING_INDICATOR_CHANGED = 4; // 0x4
+    field public static final int EVENT_CALL_STATE_CHANGED = 6; // 0x6
+    field public static final int EVENT_CARRIER_NETWORK_CHANGED = 17; // 0x11
+    field @RequiresPermission(allOf={android.Manifest.permission.READ_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int EVENT_CELL_INFO_CHANGED = 11; // 0xb
+    field @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public static final int EVENT_CELL_LOCATION_CHANGED = 5; // 0x5
+    field public static final int EVENT_DATA_ACTIVATION_STATE_CHANGED = 19; // 0x13
+    field public static final int EVENT_DATA_ACTIVITY_CHANGED = 8; // 0x8
+    field @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_DATA_CONNECTION_REAL_TIME_INFO_CHANGED = 14; // 0xe
+    field public static final int EVENT_DATA_CONNECTION_STATE_CHANGED = 7; // 0x7
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_DATA_ENABLED_CHANGED = 34; // 0x22
+    field public static final int EVENT_DISPLAY_INFO_CHANGED = 21; // 0x15
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_EMERGENCY_NUMBER_LIST_CHANGED = 25; // 0x19
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_IMS_CALL_DISCONNECT_CAUSE_CHANGED = 28; // 0x1c
+    field @RequiresPermission(android.Manifest.permission.READ_CALL_LOG) public static final int EVENT_LEGACY_CALL_STATE_CHANGED = 36; // 0x24
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_LINK_CAPACITY_ESTIMATE_CHANGED = 37; // 0x25
+    field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_MESSAGE_WAITING_INDICATOR_CHANGED = 3; // 0x3
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_OEM_HOOK_RAW = 15; // 0xf
+    field @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int EVENT_OUTGOING_EMERGENCY_CALL = 29; // 0x1d
+    field @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int EVENT_OUTGOING_EMERGENCY_SMS = 30; // 0x1e
+    field public static final int EVENT_PHONE_CAPABILITY_CHANGED = 22; // 0x16
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED = 33; // 0x21
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_PRECISE_CALL_STATE_CHANGED = 12; // 0xc
+    field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_PRECISE_DATA_CONNECTION_STATE_CHANGED = 13; // 0xd
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_RADIO_POWER_STATE_CHANGED = 24; // 0x18
+    field @RequiresPermission(allOf={android.Manifest.permission.READ_PRECISE_PHONE_STATE, android.Manifest.permission.ACCESS_FINE_LOCATION}) public static final int EVENT_REGISTRATION_FAILURE = 31; // 0x1f
+    field public static final int EVENT_SERVICE_STATE_CHANGED = 1; // 0x1
+    field public static final int EVENT_SIGNAL_STRENGTHS_CHANGED = 9; // 0x9
+    field public static final int EVENT_SIGNAL_STRENGTH_CHANGED = 2; // 0x2
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_SRVCC_STATE_CHANGED = 16; // 0x10
+    field public static final int EVENT_USER_MOBILE_DATA_STATE_CHANGED = 20; // 0x14
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_VOICE_ACTIVATION_STATE_CHANGED = 18; // 0x12
+  }
+
+  public static interface TelephonyCallback.AllowedNetworkTypesListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onAllowedNetworkTypesChanged(int, long);
+  }
+
+  public static interface TelephonyCallback.CallAttributesListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes);
+  }
+
+  public static interface TelephonyCallback.DataEnabledListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onDataEnabledChanged(boolean, int);
+  }
+
+  public static interface TelephonyCallback.LinkCapacityEstimateChangedListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onLinkCapacityEstimateChanged(@NonNull java.util.List<android.telephony.LinkCapacityEstimate>);
+  }
+
+  public static interface TelephonyCallback.OutgoingEmergencyCallListener {
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
+  }
+
+  public static interface TelephonyCallback.OutgoingEmergencySmsListener {
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber, int);
+  }
+
+  public static interface TelephonyCallback.PhoneCapabilityListener {
+    method public void onPhoneCapabilityChanged(@NonNull android.telephony.PhoneCapability);
+  }
+
+  public static interface TelephonyCallback.PreciseCallStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
+  }
+
+  public static interface TelephonyCallback.RadioPowerStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onRadioPowerStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.SrvccStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onSrvccStateChanged(int);
+  }
+
+  public static interface TelephonyCallback.VoiceActivationStateListener {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void onVoiceActivationStateChanged(int);
+  }
+
+  public final class TelephonyHistogram implements android.os.Parcelable {
+    ctor public TelephonyHistogram(int, int, int);
+    ctor public TelephonyHistogram(android.telephony.TelephonyHistogram);
+    ctor public TelephonyHistogram(android.os.Parcel);
+    method public void addTimeTaken(int);
+    method public int describeContents();
+    method public int getAverageTime();
+    method public int getBucketCount();
+    method public int[] getBucketCounters();
+    method public int[] getBucketEndPoints();
+    method public int getCategory();
+    method public int getId();
+    method public int getMaxTime();
+    method public int getMinTime();
+    method public int getSampleCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.TelephonyHistogram> CREATOR;
+    field public static final int TELEPHONY_CATEGORY_RIL = 1; // 0x1
+  }
+
+  public class TelephonyManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) @WorkerThread public void bootstrapAuthenticationRequest(int, @NonNull android.net.Uri, @NonNull android.telephony.gba.UaSecurityProtocolIdentifier, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.BootstrapAuthenticationCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void call(String, String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult changeIccLockPin(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int checkCarrierPrivilegesForPackage(String);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int checkCarrierPrivilegesForPackageAnyPhone(String);
+    method public void dial(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean disableDataConnectivity();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableDataConnectivity();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean enableModemForSlot(int, boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void enableVideoCalling(boolean);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getAidForAppType(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.service.carrier.CarrierIdentifier> getAllowedCarriers(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getAllowedNetworkTypes();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getAllowedNetworkTypesBitmask();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getAllowedNetworkTypesForReason(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.ComponentName getAndUpdateDefaultRespondViaMessageApplication();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getCallForwarding(int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CallForwardingInfoCallback);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getCallWaitingStatus(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.ImsiEncryptionInfo getCarrierInfoForImsiEncryption(int);
+    method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<java.lang.String> getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCarrierPrivilegeStatus(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<java.lang.String> getCarrierPrivilegedPackagesForAllActiveSubscriptions();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.CarrierRestrictionRules getCarrierRestrictionRules();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCdmaEnhancedRoamingIndicatorDisplayNumber();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMdn();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMdn(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMin();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String getCdmaMin(int);
+    method public String getCdmaPrlVersion();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCdmaRoamingMode();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getCdmaSubscriptionMode();
+    method public int getCurrentPhoneType();
+    method public int getCurrentPhoneType(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getDataActivationState();
+    method @Deprecated public boolean getDataEnabled();
+    method @Deprecated public boolean getDataEnabled(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.ComponentName getDefaultRespondViaMessageApplication();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getDeviceSoftwareVersion(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean getEmergencyCallbackMode();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getEmergencyNumberDbVersion();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimDomain();
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getIsimIst();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.Map<java.lang.Integer,java.lang.Integer> getLogicalToPhysicalSlotMapping();
+    method public int getMaxNumberOfSimultaneouslyActiveSims();
+    method public static long getMaxNumberVerificationTimeoutMillis();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String[] getMergedImsisFromGroup();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.PhoneCapability getPhoneCapability();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getPreferredNetworkTypeBitmask();
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public int getRadioPowerState();
+    method public int getSimApplicationState();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getSimApplicationState(int);
+    method public int getSimCardState();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getSimCardState(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.Locale getSimLocale();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getSupportedRadioAccessFamily();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<android.telephony.RadioAccessSpecifier> getSystemSelectionChannels();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.UiccSlotInfo[] getUiccSlotsInfo();
+    method @Nullable public android.os.Bundle getVisualVoicemailSettings();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoiceActivationState();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handlePinMmi(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean handlePinMmiForSubscriber(int, String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean iccCloseLogicalChannelBySlot(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannelBySlot(int, @Nullable String, int);
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduBasicChannelBySlot(int, int, int, int, int, int, @Nullable String);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public String iccTransmitApduLogicalChannelBySlot(int, int, int, int, int, int, int, @Nullable String);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAnyRadioPoweredOn();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isApnMetered(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isApplicationOnUicc(int);
+    method public boolean isDataConnectivityPossible();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isDataEnabledForApn(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isEmergencyAssistanceEnabled();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean isIccLockEnabled();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isIdle();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isInEmergencySmsMode();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isLteCdmaEvdoGsmWcdmaEnabled();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isMobileDataPolicyEnabled(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isNrDualConnectivityEnabled();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isOpportunisticNetworkEnabled();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isPotentialEmergencyNumber(@NonNull String);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRadioOn();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isTetheringApnRequired();
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isVideoCallingEnabled();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isVisualVoicemailEnabled(android.telecom.PhoneAccountHandle);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean matchesCurrentSimOperator(@NonNull String, int, @Nullable String);
+    method public boolean needsOtaServiceProvisioning();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyOtaEmergencyNumberDbInstalled();
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public int prepareForUnattendedReboot();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean rebootRadio();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void reportDefaultNetworkStatus(boolean);
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.MODIFY_PHONE_STATE}) public void requestCellInfoUpdate(@NonNull android.os.WorkSource, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CellInfoCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void requestModemActivityInfo(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.telephony.ModemActivityInfo,android.telephony.TelephonyManager.ModemActivityInfoException>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void requestNumberVerification(@NonNull android.telephony.PhoneNumberRange, long, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.NumberVerificationCallback);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetAllCarrierActions();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void resetCarrierKeysForImsiEncryption();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void resetIms(int);
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void resetOtaEmergencyNumberDbFilePath();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean resetRadioConfig();
+    method @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL) public void resetSettings();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int sendThermalMitigationRequest(@NonNull android.telephony.ThermalMitigationRequest);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setAllowedCarriers(int, java.util.List<android.service.carrier.CarrierIdentifier>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setAllowedNetworkTypes(long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAllowedNetworkTypesForReason(int, long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCallForwarding(@NonNull android.telephony.CallForwardingInfo, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCallWaitingEnabled(boolean, @Nullable java.util.concurrent.Executor, @Nullable java.util.function.Consumer<java.lang.Integer>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCarrierDataEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setCarrierRestrictionRules(@NonNull android.telephony.CarrierRestrictionRules);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCdmaRoamingMode(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCdmaSubscriptionMode(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataActivationState(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setDataRoamingEnabled(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult setIccLockEnabled(boolean, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMobileDataPolicyEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setMultiSimCarrierRestriction(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int setNrDualConnectivityState(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setOpportunisticNetworkState(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setPreferredNetworkTypeBitmask(long);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadio(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRadioEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean setRadioPower(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerState(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerState(int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerStateForSlot(int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSimPowerStateForSlot(int, int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSystemSelectionChannels(@NonNull java.util.List<android.telephony.RadioAccessSpecifier>, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setSystemSelectionChannels(@NonNull java.util.List<android.telephony.RadioAccessSpecifier>);
+    method @Deprecated public void setVisualVoicemailEnabled(android.telecom.PhoneAccountHandle, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoiceActivationState(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void shutdownAllRadios();
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult supplyIccLockPin(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult supplyIccLockPuk(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean supplyPin(String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPinReportResult(String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean supplyPuk(String, String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public int[] supplyPukReportResult(String, String);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean switchSlots(int[]);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void toggleRadioOnOff();
+    method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void updateOtaEmergencyNumberDbFilePath(@NonNull android.os.ParcelFileDescriptor);
+    method public void updateServiceLocation();
+    field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final String ACTION_ANOMALY_REPORTED = "android.telephony.action.ANOMALY_REPORTED";
+    field public static final String ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED = "android.intent.action.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED";
+    field public static final String ACTION_EMERGENCY_ASSISTANCE = "android.telephony.action.EMERGENCY_ASSISTANCE";
+    field public static final String ACTION_EMERGENCY_CALLBACK_MODE_CHANGED = "android.intent.action.EMERGENCY_CALLBACK_MODE_CHANGED";
+    field public static final String ACTION_EMERGENCY_CALL_STATE_CHANGED = "android.intent.action.EMERGENCY_CALL_STATE_CHANGED";
+    field public static final String ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE = "com.android.omadm.service.CONFIGURATION_UPDATE";
+    field public static final String ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS = "android.telephony.action.SHOW_NOTICE_ECM_BLOCK_OTHERS";
+    field public static final String ACTION_SIM_APPLICATION_STATE_CHANGED = "android.telephony.action.SIM_APPLICATION_STATE_CHANGED";
+    field public static final String ACTION_SIM_CARD_STATE_CHANGED = "android.telephony.action.SIM_CARD_STATE_CHANGED";
+    field public static final String ACTION_SIM_SLOT_STATUS_CHANGED = "android.telephony.action.SIM_SLOT_STATUS_CHANGED";
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_CARRIER = 2; // 0x2
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G = 3; // 0x3
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_POWER = 1; // 0x1
+    field public static final int ALLOWED_NETWORK_TYPES_REASON_USER = 0; // 0x0
+    field public static final int CALL_WAITING_STATUS_DISABLED = 2; // 0x2
+    field public static final int CALL_WAITING_STATUS_ENABLED = 1; // 0x1
+    field public static final int CALL_WAITING_STATUS_NOT_SUPPORTED = 4; // 0x4
+    field public static final int CALL_WAITING_STATUS_UNKNOWN_ERROR = 3; // 0x3
+    field public static final String CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE = "CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE";
+    field public static final String CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE = "CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE";
+    field public static final String CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING = "CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING";
+    field public static final String CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK = "CAPABILITY_USES_ALLOWED_NETWORK_TYPES_BITMASK";
+    field public static final int CARRIER_PRIVILEGE_STATUS_ERROR_LOADING_RULES = -2; // 0xfffffffe
+    field public static final int CARRIER_PRIVILEGE_STATUS_HAS_ACCESS = 1; // 0x1
+    field public static final int CARRIER_PRIVILEGE_STATUS_NO_ACCESS = 0; // 0x0
+    field public static final int CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED = -1; // 0xffffffff
+    field public static final int CDMA_SUBSCRIPTION_NV = 1; // 0x1
+    field public static final int CDMA_SUBSCRIPTION_RUIM_SIM = 0; // 0x0
+    field public static final int CDMA_SUBSCRIPTION_UNKNOWN = -1; // 0xffffffff
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_INVALID_STATE = 4; // 0x4
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_NOT_SUPPORTED = 1; // 0x1
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_RADIO_ERROR = 3; // 0x3
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_RADIO_NOT_AVAILABLE = 2; // 0x2
+    field public static final int ENABLE_NR_DUAL_CONNECTIVITY_SUCCESS = 0; // 0x0
+    field public static final String EXTRA_ANOMALY_DESCRIPTION = "android.telephony.extra.ANOMALY_DESCRIPTION";
+    field public static final String EXTRA_ANOMALY_ID = "android.telephony.extra.ANOMALY_ID";
+    field public static final String EXTRA_PHONE_IN_ECM_STATE = "android.telephony.extra.PHONE_IN_ECM_STATE";
+    field public static final String EXTRA_PHONE_IN_EMERGENCY_CALL = "android.telephony.extra.PHONE_IN_EMERGENCY_CALL";
+    field public static final String EXTRA_SIM_STATE = "android.telephony.extra.SIM_STATE";
+    field public static final String EXTRA_VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL = "android.telephony.extra.VISUAL_VOICEMAIL_ENABLED_BY_USER_BOOL";
+    field public static final String EXTRA_VOICEMAIL_SCRAMBLED_PIN_STRING = "android.telephony.extra.VOICEMAIL_SCRAMBLED_PIN_STRING";
+    field public static final int GBA_FAILURE_REASON_FEATURE_NOT_READY = 2; // 0x2
+    field public static final int GBA_FAILURE_REASON_FEATURE_NOT_SUPPORTED = 1; // 0x1
+    field public static final int GBA_FAILURE_REASON_INCORRECT_NAF_ID = 4; // 0x4
+    field public static final int GBA_FAILURE_REASON_NETWORK_FAILURE = 3; // 0x3
+    field public static final int GBA_FAILURE_REASON_SECURITY_PROTOCOL_NOT_SUPPORTED = 5; // 0x5
+    field public static final int GBA_FAILURE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int INVALID_EMERGENCY_NUMBER_DB_VERSION = -1; // 0xffffffff
+    field public static final int KEY_TYPE_EPDG = 1; // 0x1
+    field public static final int KEY_TYPE_WLAN = 2; // 0x2
+    field public static final int MOBILE_DATA_POLICY_DATA_ON_NON_DEFAULT_DURING_VOICE_CALL = 1; // 0x1
+    field public static final int MOBILE_DATA_POLICY_MMS_ALWAYS_ALLOWED = 2; // 0x2
+    field public static final long NETWORK_TYPE_BITMASK_1xRTT = 64L; // 0x40L
+    field public static final long NETWORK_TYPE_BITMASK_CDMA = 8L; // 0x8L
+    field public static final long NETWORK_TYPE_BITMASK_EDGE = 2L; // 0x2L
+    field public static final long NETWORK_TYPE_BITMASK_EHRPD = 8192L; // 0x2000L
+    field public static final long NETWORK_TYPE_BITMASK_EVDO_0 = 16L; // 0x10L
+    field public static final long NETWORK_TYPE_BITMASK_EVDO_A = 32L; // 0x20L
+    field public static final long NETWORK_TYPE_BITMASK_EVDO_B = 2048L; // 0x800L
+    field public static final long NETWORK_TYPE_BITMASK_GPRS = 1L; // 0x1L
+    field public static final long NETWORK_TYPE_BITMASK_GSM = 32768L; // 0x8000L
+    field public static final long NETWORK_TYPE_BITMASK_HSDPA = 128L; // 0x80L
+    field public static final long NETWORK_TYPE_BITMASK_HSPA = 512L; // 0x200L
+    field public static final long NETWORK_TYPE_BITMASK_HSPAP = 16384L; // 0x4000L
+    field public static final long NETWORK_TYPE_BITMASK_HSUPA = 256L; // 0x100L
+    field public static final long NETWORK_TYPE_BITMASK_IWLAN = 131072L; // 0x20000L
+    field public static final long NETWORK_TYPE_BITMASK_LTE = 4096L; // 0x1000L
+    field public static final long NETWORK_TYPE_BITMASK_LTE_CA = 262144L; // 0x40000L
+    field public static final long NETWORK_TYPE_BITMASK_NR = 524288L; // 0x80000L
+    field public static final long NETWORK_TYPE_BITMASK_TD_SCDMA = 65536L; // 0x10000L
+    field public static final long NETWORK_TYPE_BITMASK_UMTS = 4L; // 0x4L
+    field public static final long NETWORK_TYPE_BITMASK_UNKNOWN = 0L; // 0x0L
+    field public static final int NR_DUAL_CONNECTIVITY_DISABLE = 2; // 0x2
+    field public static final int NR_DUAL_CONNECTIVITY_DISABLE_IMMEDIATE = 3; // 0x3
+    field public static final int NR_DUAL_CONNECTIVITY_ENABLE = 1; // 0x1
+    field public static final int PREPARE_UNATTENDED_REBOOT_ERROR = 2; // 0x2
+    field public static final int PREPARE_UNATTENDED_REBOOT_PIN_REQUIRED = 1; // 0x1
+    field public static final int PREPARE_UNATTENDED_REBOOT_SUCCESS = 0; // 0x0
+    field public static final int RADIO_POWER_OFF = 0; // 0x0
+    field public static final int RADIO_POWER_ON = 1; // 0x1
+    field public static final int RADIO_POWER_UNAVAILABLE = 2; // 0x2
+    field public static final int SET_CARRIER_RESTRICTION_ERROR = 2; // 0x2
+    field public static final int SET_CARRIER_RESTRICTION_NOT_SUPPORTED = 1; // 0x1
+    field public static final int SET_CARRIER_RESTRICTION_SUCCESS = 0; // 0x0
+    field public static final int SET_SIM_POWER_STATE_ALREADY_IN_STATE = 1; // 0x1
+    field public static final int SET_SIM_POWER_STATE_MODEM_ERROR = 2; // 0x2
+    field public static final int SET_SIM_POWER_STATE_NOT_SUPPORTED = 4; // 0x4
+    field public static final int SET_SIM_POWER_STATE_SIM_ERROR = 3; // 0x3
+    field public static final int SET_SIM_POWER_STATE_SUCCESS = 0; // 0x0
+    field public static final int SIM_ACTIVATION_STATE_ACTIVATED = 2; // 0x2
+    field public static final int SIM_ACTIVATION_STATE_ACTIVATING = 1; // 0x1
+    field public static final int SIM_ACTIVATION_STATE_DEACTIVATED = 3; // 0x3
+    field public static final int SIM_ACTIVATION_STATE_RESTRICTED = 4; // 0x4
+    field public static final int SIM_ACTIVATION_STATE_UNKNOWN = 0; // 0x0
+    field public static final int SIM_STATE_LOADED = 10; // 0xa
+    field public static final int SIM_STATE_PRESENT = 11; // 0xb
+    field public static final int SRVCC_STATE_HANDOVER_CANCELED = 3; // 0x3
+    field public static final int SRVCC_STATE_HANDOVER_COMPLETED = 1; // 0x1
+    field public static final int SRVCC_STATE_HANDOVER_FAILED = 2; // 0x2
+    field public static final int SRVCC_STATE_HANDOVER_NONE = -1; // 0xffffffff
+    field public static final int SRVCC_STATE_HANDOVER_STARTED = 0; // 0x0
+    field public static final int THERMAL_MITIGATION_RESULT_INVALID_STATE = 3; // 0x3
+    field public static final int THERMAL_MITIGATION_RESULT_MODEM_ERROR = 1; // 0x1
+    field public static final int THERMAL_MITIGATION_RESULT_MODEM_NOT_AVAILABLE = 2; // 0x2
+    field public static final int THERMAL_MITIGATION_RESULT_SUCCESS = 0; // 0x0
+    field public static final int THERMAL_MITIGATION_RESULT_UNKNOWN_ERROR = 4; // 0x4
+  }
+
+  public static class TelephonyManager.BootstrapAuthenticationCallback {
+    ctor public TelephonyManager.BootstrapAuthenticationCallback();
+    method public void onAuthenticationFailure(int);
+    method public void onKeysAvailable(@NonNull byte[], @NonNull String);
+  }
+
+  public static interface TelephonyManager.CallForwardingInfoCallback {
+    method public void onCallForwardingInfoAvailable(@NonNull android.telephony.CallForwardingInfo);
+    method public void onError(int);
+    field public static final int RESULT_ERROR_FDN_CHECK_FAILURE = 2; // 0x2
+    field public static final int RESULT_ERROR_NOT_SUPPORTED = 3; // 0x3
+    field public static final int RESULT_ERROR_UNKNOWN = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public static class TelephonyManager.ModemActivityInfoException extends java.lang.Exception {
+    method public int getErrorCode();
+    field public static final int ERROR_INVALID_INFO_RECEIVED = 2; // 0x2
+    field public static final int ERROR_MODEM_RESPONSE_ERROR = 3; // 0x3
+    field public static final int ERROR_PHONE_NOT_AVAILABLE = 1; // 0x1
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  public final class ThermalMitigationRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.telephony.DataThrottlingRequest getDataThrottlingRequest();
+    method public int getThermalMitigationAction();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ThermalMitigationRequest> CREATOR;
+    field public static final int THERMAL_MITIGATION_ACTION_DATA_THROTTLING = 0; // 0x0
+    field public static final int THERMAL_MITIGATION_ACTION_RADIO_OFF = 2; // 0x2
+    field public static final int THERMAL_MITIGATION_ACTION_VOICE_ONLY = 1; // 0x1
+  }
+
+  public static final class ThermalMitigationRequest.Builder {
+    ctor public ThermalMitigationRequest.Builder();
+    method @NonNull public android.telephony.ThermalMitigationRequest build();
+    method @NonNull public android.telephony.ThermalMitigationRequest.Builder setDataThrottlingRequest(@NonNull android.telephony.DataThrottlingRequest);
+    method @NonNull public android.telephony.ThermalMitigationRequest.Builder setThermalMitigationAction(int);
+  }
+
+  public final class UiccAccessRule implements android.os.Parcelable {
+    ctor public UiccAccessRule(byte[], @Nullable String, long);
+    method public int describeContents();
+    method public int getCarrierPrivilegeStatus(android.content.pm.PackageInfo);
+    method public int getCarrierPrivilegeStatus(android.content.pm.Signature, String);
+    method public String getCertificateHexString();
+    method @Nullable public String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccAccessRule> CREATOR;
+  }
+
+  public class UiccSlotInfo implements android.os.Parcelable {
+    ctor @Deprecated public UiccSlotInfo(boolean, boolean, String, int, int, boolean);
+    method public int describeContents();
+    method public String getCardId();
+    method public int getCardStateInfo();
+    method public boolean getIsActive();
+    method public boolean getIsEuicc();
+    method public boolean getIsExtendedApduSupported();
+    method public int getLogicalSlotIdx();
+    method public boolean isRemovable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CARD_STATE_INFO_ABSENT = 1; // 0x1
+    field public static final int CARD_STATE_INFO_ERROR = 3; // 0x3
+    field public static final int CARD_STATE_INFO_PRESENT = 2; // 0x2
+    field public static final int CARD_STATE_INFO_RESTRICTED = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.UiccSlotInfo> CREATOR;
+  }
+
+  public abstract class VisualVoicemailService extends android.app.Service {
+    method public static final void sendVisualVoicemailSms(android.content.Context, android.telecom.PhoneAccountHandle, String, short, String, android.app.PendingIntent);
+    method public static final void setSmsFilterSettings(android.content.Context, android.telecom.PhoneAccountHandle, android.telephony.VisualVoicemailSmsFilterSettings);
+  }
+
+  public abstract class VopsSupportInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public abstract boolean equals(Object);
+    method public abstract int hashCode();
+    method public abstract boolean isEmergencyServiceFallbackSupported();
+    method public abstract boolean isEmergencyServiceSupported();
+    method public abstract boolean isVopsSupported();
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.VopsSupportInfo> CREATOR;
+  }
+
+}
+
+package android.telephony.cdma {
+
+  public final class CdmaSmsCbProgramData implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCategory();
+    method public int getOperation();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY = 4099; // 0x1003
+    field public static final int CATEGORY_CMAS_EXTREME_THREAT = 4097; // 0x1001
+    field public static final int CATEGORY_CMAS_LAST_RESERVED_VALUE = 4351; // 0x10ff
+    field public static final int CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT = 4096; // 0x1000
+    field public static final int CATEGORY_CMAS_SEVERE_THREAT = 4098; // 0x1002
+    field public static final int CATEGORY_CMAS_TEST_MESSAGE = 4100; // 0x1004
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.cdma.CdmaSmsCbProgramData> CREATOR;
+    field public static final int OPERATION_ADD_CATEGORY = 1; // 0x1
+    field public static final int OPERATION_CLEAR_CATEGORIES = 2; // 0x2
+    field public static final int OPERATION_DELETE_CATEGORY = 0; // 0x0
+  }
+
+}
+
+package android.telephony.data {
+
+  public class ApnSetting implements android.os.Parcelable {
+    method public static int getApnTypeInt(@NonNull String);
+    method @NonNull public static String getApnTypeString(int);
+    field public static final String TYPE_ALL_STRING = "*";
+    field public static final String TYPE_BIP_STRING = "bip";
+    field public static final String TYPE_CBS_STRING = "cbs";
+    field public static final String TYPE_DEFAULT_STRING = "default";
+    field public static final String TYPE_DUN_STRING = "dun";
+    field public static final String TYPE_EMERGENCY_STRING = "emergency";
+    field public static final String TYPE_FOTA_STRING = "fota";
+    field public static final String TYPE_HIPRI_STRING = "hipri";
+    field public static final String TYPE_IA_STRING = "ia";
+    field public static final String TYPE_IMS_STRING = "ims";
+    field public static final String TYPE_MCX_STRING = "mcx";
+    field public static final String TYPE_MMS_STRING = "mms";
+    field public static final String TYPE_SUPL_STRING = "supl";
+    field public static final String TYPE_VSIM_STRING = "vsim";
+    field public static final String TYPE_XCAP_STRING = "xcap";
+  }
+
+  public final class DataCallResponse implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.LinkAddress> getAddresses();
+    method public int getCause();
+    method @NonNull public java.util.List<java.net.InetAddress> getDnsAddresses();
+    method @NonNull public java.util.List<java.net.InetAddress> getGatewayAddresses();
+    method public int getHandoverFailureMode();
+    method public int getId();
+    method @NonNull public String getInterfaceName();
+    method public int getLinkStatus();
+    method @Deprecated public int getMtu();
+    method public int getMtuV4();
+    method public int getMtuV6();
+    method @NonNull public java.util.List<java.net.InetAddress> getPcscfAddresses();
+    method public int getPduSessionId();
+    method public int getProtocolType();
+    method public long getRetryDurationMillis();
+    method @Nullable public android.telephony.data.NetworkSliceInfo getSliceInfo();
+    method @Deprecated public int getSuggestedRetryTime();
+    method @NonNull public java.util.List<android.telephony.data.TrafficDescriptor> getTrafficDescriptors();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.DataCallResponse> CREATOR;
+    field public static final int HANDOVER_FAILURE_MODE_DO_FALLBACK = 1; // 0x1
+    field public static final int HANDOVER_FAILURE_MODE_LEGACY = 0; // 0x0
+    field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_HANDOVER = 2; // 0x2
+    field public static final int HANDOVER_FAILURE_MODE_NO_FALLBACK_RETRY_SETUP_NORMAL = 3; // 0x3
+    field public static final int HANDOVER_FAILURE_MODE_UNKNOWN = -1; // 0xffffffff
+    field public static final int LINK_STATUS_ACTIVE = 2; // 0x2
+    field public static final int LINK_STATUS_DORMANT = 1; // 0x1
+    field public static final int LINK_STATUS_INACTIVE = 0; // 0x0
+    field public static final int LINK_STATUS_UNKNOWN = -1; // 0xffffffff
+    field public static final int PDU_SESSION_ID_NOT_SET = 0; // 0x0
+    field public static final int RETRY_DURATION_UNDEFINED = -1; // 0xffffffff
+  }
+
+  public static final class DataCallResponse.Builder {
+    ctor public DataCallResponse.Builder();
+    method @NonNull public android.telephony.data.DataCallResponse build();
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setAddresses(@NonNull java.util.List<android.net.LinkAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setCause(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setDnsAddresses(@NonNull java.util.List<java.net.InetAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setGatewayAddresses(@NonNull java.util.List<java.net.InetAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setHandoverFailureMode(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setId(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setInterfaceName(@NonNull String);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setLinkStatus(int);
+    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setMtu(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV4(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV6(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setPcscfAddresses(@NonNull java.util.List<java.net.InetAddress>);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setPduSessionId(@IntRange(from=android.telephony.data.DataCallResponse.PDU_SESSION_ID_NOT_SET, to=15) int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setProtocolType(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setRetryDurationMillis(long);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setSliceInfo(@Nullable android.telephony.data.NetworkSliceInfo);
+    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setSuggestedRetryTime(int);
+    method @NonNull public android.telephony.data.DataCallResponse.Builder setTrafficDescriptors(@NonNull java.util.List<android.telephony.data.TrafficDescriptor>);
+  }
+
+  public final class DataProfile implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getApn();
+    method public int getAuthType();
+    method public int getBearerBitmask();
+    method @Deprecated public int getMtu();
+    method public int getMtuV4();
+    method public int getMtuV6();
+    method @Nullable public String getPassword();
+    method public int getProfileId();
+    method public int getProtocolType();
+    method public int getRoamingProtocolType();
+    method public int getSupportedApnTypesBitmask();
+    method public int getType();
+    method @Nullable public String getUserName();
+    method public boolean isEnabled();
+    method public boolean isPersistent();
+    method public boolean isPreferred();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.DataProfile> CREATOR;
+    field public static final int TYPE_3GPP = 1; // 0x1
+    field public static final int TYPE_3GPP2 = 2; // 0x2
+    field public static final int TYPE_COMMON = 0; // 0x0
+  }
+
+  public static final class DataProfile.Builder {
+    ctor public DataProfile.Builder();
+    method @NonNull public android.telephony.data.DataProfile build();
+    method @NonNull public android.telephony.data.DataProfile.Builder enable(boolean);
+    method @NonNull public android.telephony.data.DataProfile.Builder setApn(@NonNull String);
+    method @NonNull public android.telephony.data.DataProfile.Builder setAuthType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setBearerBitmask(int);
+    method @Deprecated @NonNull public android.telephony.data.DataProfile.Builder setMtu(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setMtuV4(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setMtuV6(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setPassword(@NonNull String);
+    method @NonNull public android.telephony.data.DataProfile.Builder setPersistent(boolean);
+    method @NonNull public android.telephony.data.DataProfile.Builder setPreferred(boolean);
+    method @NonNull public android.telephony.data.DataProfile.Builder setProfileId(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setProtocolType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setRoamingProtocolType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setSupportedApnTypesBitmask(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setType(int);
+    method @NonNull public android.telephony.data.DataProfile.Builder setUserName(@NonNull String);
+  }
+
+  public abstract class DataService extends android.app.Service {
+    ctor public DataService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method @Nullable public abstract android.telephony.data.DataService.DataServiceProvider onCreateDataServiceProvider(int);
+    field public static final int REQUEST_REASON_HANDOVER = 3; // 0x3
+    field public static final int REQUEST_REASON_NORMAL = 1; // 0x1
+    field public static final int REQUEST_REASON_SHUTDOWN = 2; // 0x2
+    field public static final int REQUEST_REASON_UNKNOWN = 0; // 0x0
+    field public static final String SERVICE_INTERFACE = "android.telephony.data.DataService";
+  }
+
+  public abstract class DataService.DataServiceProvider implements java.lang.AutoCloseable {
+    ctor public DataService.DataServiceProvider(int);
+    method public abstract void close();
+    method public void deactivateDataCall(int, int, @Nullable android.telephony.data.DataServiceCallback);
+    method public final int getSlotIndex();
+    method public final void notifyApnUnthrottled(@NonNull String);
+    method public final void notifyDataCallListChanged(java.util.List<android.telephony.data.DataCallResponse>);
+    method public void requestDataCallList(@NonNull android.telephony.data.DataServiceCallback);
+    method public void setDataProfile(@NonNull java.util.List<android.telephony.data.DataProfile>, boolean, @NonNull android.telephony.data.DataServiceCallback);
+    method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @NonNull android.telephony.data.DataServiceCallback);
+    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @NonNull android.telephony.data.DataServiceCallback);
+    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @IntRange(from=0, to=15) int, @Nullable android.telephony.data.NetworkSliceInfo, @Nullable android.telephony.data.TrafficDescriptor, boolean, @NonNull android.telephony.data.DataServiceCallback);
+  }
+
+  public class DataServiceCallback {
+    method public void onApnUnthrottled(@NonNull String);
+    method public void onDataCallListChanged(@NonNull java.util.List<android.telephony.data.DataCallResponse>);
+    method public void onDeactivateDataCallComplete(int);
+    method public void onRequestDataCallListComplete(int, @NonNull java.util.List<android.telephony.data.DataCallResponse>);
+    method public void onSetDataProfileComplete(int);
+    method public void onSetInitialAttachApnComplete(int);
+    method public void onSetupDataCallComplete(int, @Nullable android.telephony.data.DataCallResponse);
+    field public static final int RESULT_ERROR_BUSY = 3; // 0x3
+    field public static final int RESULT_ERROR_ILLEGAL_STATE = 4; // 0x4
+    field public static final int RESULT_ERROR_INVALID_ARG = 2; // 0x2
+    field public static final int RESULT_ERROR_UNSUPPORTED = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+  public final class EpsBearerQosSessionAttributes implements android.os.Parcelable android.net.QosSessionAttributes {
+    method public int describeContents();
+    method public long getGuaranteedDownlinkBitRateKbps();
+    method public long getGuaranteedUplinkBitRateKbps();
+    method public long getMaxDownlinkBitRateKbps();
+    method public long getMaxUplinkBitRateKbps();
+    method public int getQosIdentifier();
+    method @NonNull public java.util.List<java.net.InetSocketAddress> getRemoteAddresses();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.EpsBearerQosSessionAttributes> CREATOR;
+  }
+
+  public final class NrQosSessionAttributes implements android.os.Parcelable android.net.QosSessionAttributes {
+    method public int describeContents();
+    method @NonNull public java.time.Duration getBitRateWindowDuration();
+    method public long getGuaranteedDownlinkBitRateKbps();
+    method public long getGuaranteedUplinkBitRateKbps();
+    method public long getMaxDownlinkBitRateKbps();
+    method public long getMaxUplinkBitRateKbps();
+    method @IntRange(from=1, to=63) public int getQosFlowIdentifier();
+    method public int getQosIdentifier();
+    method @NonNull public java.util.List<java.net.InetSocketAddress> getRemoteAddresses();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.NrQosSessionAttributes> CREATOR;
+  }
+
+  public abstract class QualifiedNetworksService extends android.app.Service {
+    ctor public QualifiedNetworksService();
+    method @NonNull public abstract android.telephony.data.QualifiedNetworksService.NetworkAvailabilityProvider onCreateNetworkAvailabilityProvider(int);
+    field public static final String QUALIFIED_NETWORKS_SERVICE_INTERFACE = "android.telephony.data.QualifiedNetworksService";
+  }
+
+  public abstract class QualifiedNetworksService.NetworkAvailabilityProvider implements java.lang.AutoCloseable {
+    ctor public QualifiedNetworksService.NetworkAvailabilityProvider(int);
+    method public abstract void close();
+    method public final int getSlotIndex();
+    method public void reportThrottleStatusChanged(@NonNull java.util.List<android.telephony.data.ThrottleStatus>);
+    method public final void updateQualifiedNetworkTypes(int, @NonNull java.util.List<java.lang.Integer>);
+  }
+
+  public final class ThrottleStatus implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getApnType();
+    method public int getRetryType();
+    method public int getSlotIndex();
+    method public long getThrottleExpiryTimeMillis();
+    method public int getThrottleType();
+    method public int getTransportType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.ThrottleStatus> CREATOR;
+    field public static final int RETRY_TYPE_HANDOVER = 3; // 0x3
+    field public static final int RETRY_TYPE_NEW_CONNECTION = 2; // 0x2
+    field public static final int RETRY_TYPE_NONE = 1; // 0x1
+    field public static final int THROTTLE_TYPE_ELAPSED_TIME = 2; // 0x2
+    field public static final int THROTTLE_TYPE_NONE = 1; // 0x1
+  }
+
+  public static final class ThrottleStatus.Builder {
+    ctor public ThrottleStatus.Builder();
+    method @NonNull public android.telephony.data.ThrottleStatus build();
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setApnType(int);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setNoThrottle();
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setRetryType(int);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setSlotIndex(int);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setThrottleExpiryTimeMillis(long);
+    method @NonNull public android.telephony.data.ThrottleStatus.Builder setTransportType(int);
+  }
+
+}
+
+package android.telephony.euicc {
+
+  public final class DownloadableSubscription implements android.os.Parcelable {
+    method public java.util.List<android.telephony.UiccAccessRule> getAccessRules();
+    method @Nullable public String getCarrierName();
+  }
+
+  public static final class DownloadableSubscription.Builder {
+    ctor public DownloadableSubscription.Builder();
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setAccessRules(@NonNull java.util.List<android.telephony.UiccAccessRule>);
+    method @NonNull public android.telephony.euicc.DownloadableSubscription.Builder setCarrierName(@NonNull String);
+  }
+
+  public class EuiccCardManager {
+    method public void authenticateServer(String, String, byte[], byte[], byte[], byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void cancelSession(String, byte[], @android.telephony.euicc.EuiccCardManager.CancelReason int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void deleteProfile(String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void disableProfile(String, String, boolean, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void listNotifications(String, @android.telephony.euicc.EuiccNotification.Event int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification[]>);
+    method public void loadBoundProfilePackage(String, byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void prepareDownload(String, @Nullable byte[], byte[], byte[], byte[], java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void removeNotificationFromList(String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void requestAllProfiles(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo[]>);
+    method public void requestDefaultSmdpAddress(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.String>);
+    method public void requestEuiccChallenge(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void requestEuiccInfo1(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void requestEuiccInfo2(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<byte[]>);
+    method public void requestProfile(String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo>);
+    method public void requestRulesAuthTable(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccRulesAuthTable>);
+    method public void requestSmdsAddress(String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.String>);
+    method public void resetMemory(String, @android.telephony.euicc.EuiccCardManager.ResetOption int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void retrieveNotification(String, int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification>);
+    method public void retrieveNotificationList(String, @android.telephony.euicc.EuiccNotification.Event int, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.telephony.euicc.EuiccNotification[]>);
+    method public void setDefaultSmdpAddress(String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void setNickname(String, String, String, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<java.lang.Void>);
+    method public void switchToProfile(String, String, boolean, java.util.concurrent.Executor, android.telephony.euicc.EuiccCardManager.ResultCallback<android.service.euicc.EuiccProfileInfo>);
+    field public static final int CANCEL_REASON_END_USER_REJECTED = 0; // 0x0
+    field public static final int CANCEL_REASON_POSTPONED = 1; // 0x1
+    field public static final int CANCEL_REASON_PPR_NOT_ALLOWED = 3; // 0x3
+    field public static final int CANCEL_REASON_TIMEOUT = 2; // 0x2
+    field public static final int RESET_OPTION_DELETE_FIELD_LOADED_TEST_PROFILES = 2; // 0x2
+    field public static final int RESET_OPTION_DELETE_OPERATIONAL_PROFILES = 1; // 0x1
+    field public static final int RESET_OPTION_RESET_DEFAULT_SMDP_ADDRESS = 4; // 0x4
+    field public static final int RESULT_CALLER_NOT_ALLOWED = -3; // 0xfffffffd
+    field public static final int RESULT_EUICC_NOT_FOUND = -2; // 0xfffffffe
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_UNKNOWN_ERROR = -1; // 0xffffffff
+  }
+
+  @IntDef(prefix={"CANCEL_REASON_"}, value={android.telephony.euicc.EuiccCardManager.CANCEL_REASON_END_USER_REJECTED, android.telephony.euicc.EuiccCardManager.CANCEL_REASON_POSTPONED, android.telephony.euicc.EuiccCardManager.CANCEL_REASON_TIMEOUT, android.telephony.euicc.EuiccCardManager.CANCEL_REASON_PPR_NOT_ALLOWED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccCardManager.CancelReason {
+  }
+
+  @IntDef(flag=true, prefix={"RESET_OPTION_"}, value={android.telephony.euicc.EuiccCardManager.RESET_OPTION_DELETE_OPERATIONAL_PROFILES, android.telephony.euicc.EuiccCardManager.RESET_OPTION_DELETE_FIELD_LOADED_TEST_PROFILES, android.telephony.euicc.EuiccCardManager.RESET_OPTION_RESET_DEFAULT_SMDP_ADDRESS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccCardManager.ResetOption {
+  }
+
+  public static interface EuiccCardManager.ResultCallback<T> {
+    method public void onComplete(int, T);
+  }
+
+  public class EuiccManager {
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void continueOperation(android.content.Intent, android.os.Bundle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptions(@NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptions(@android.telephony.euicc.EuiccCardManager.ResetOption int, @NonNull android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDefaultDownloadableSubscriptionList(android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDownloadableSubscriptionMetadata(android.telephony.euicc.DownloadableSubscription, android.app.PendingIntent);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public int getOtaStatus();
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public java.util.List<java.lang.String> getSupportedCountries();
+    method @NonNull @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public java.util.List<java.lang.String> getUnsupportedCountries();
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public boolean isSupportedCountry(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void setSupportedCountries(@NonNull java.util.List<java.lang.String>);
+    method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void setUnsupportedCountries(@NonNull java.util.List<java.lang.String>);
+    field public static final String ACTION_DELETE_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.DELETE_SUBSCRIPTION_PRIVILEGED";
+    field @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public static final String ACTION_OTA_STATUS_CHANGED = "android.telephony.euicc.action.OTA_STATUS_CHANGED";
+    field public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION = "android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION";
+    field public static final String ACTION_RENAME_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.RENAME_SUBSCRIPTION_PRIVILEGED";
+    field public static final String ACTION_TOGGLE_SUBSCRIPTION_PRIVILEGED = "android.telephony.euicc.action.TOGGLE_SUBSCRIPTION_PRIVILEGED";
+    field public static final int EUICC_ACTIVATION_TYPE_ACCOUNT_REQUIRED = 4; // 0x4
+    field public static final int EUICC_ACTIVATION_TYPE_BACKUP = 2; // 0x2
+    field public static final int EUICC_ACTIVATION_TYPE_DEFAULT = 1; // 0x1
+    field public static final int EUICC_ACTIVATION_TYPE_TRANSFER = 3; // 0x3
+    field public static final int EUICC_OTA_FAILED = 2; // 0x2
+    field public static final int EUICC_OTA_IN_PROGRESS = 1; // 0x1
+    field public static final int EUICC_OTA_NOT_NEEDED = 4; // 0x4
+    field public static final int EUICC_OTA_STATUS_UNAVAILABLE = 5; // 0x5
+    field public static final int EUICC_OTA_SUCCEEDED = 3; // 0x3
+    field public static final String EXTRA_ACTIVATION_TYPE = "android.telephony.euicc.extra.ACTIVATION_TYPE";
+    field public static final String EXTRA_EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS = "android.telephony.euicc.extra.EMBEDDED_SUBSCRIPTION_DOWNLOADABLE_SUBSCRIPTIONS";
+    field public static final String EXTRA_ENABLE_SUBSCRIPTION = "android.telephony.euicc.extra.ENABLE_SUBSCRIPTION";
+    field public static final String EXTRA_FORCE_PROVISION = "android.telephony.euicc.extra.FORCE_PROVISION";
+    field public static final String EXTRA_FROM_SUBSCRIPTION_ID = "android.telephony.euicc.extra.FROM_SUBSCRIPTION_ID";
+    field public static final String EXTRA_PHYSICAL_SLOT_ID = "android.telephony.euicc.extra.PHYSICAL_SLOT_ID";
+    field public static final String EXTRA_SUBSCRIPTION_ID = "android.telephony.euicc.extra.SUBSCRIPTION_ID";
+    field public static final String EXTRA_SUBSCRIPTION_NICKNAME = "android.telephony.euicc.extra.SUBSCRIPTION_NICKNAME";
+  }
+
+  @IntDef(prefix={"EUICC_OTA_"}, value={android.telephony.euicc.EuiccManager.EUICC_OTA_IN_PROGRESS, android.telephony.euicc.EuiccManager.EUICC_OTA_FAILED, android.telephony.euicc.EuiccManager.EUICC_OTA_SUCCEEDED, android.telephony.euicc.EuiccManager.EUICC_OTA_NOT_NEEDED, android.telephony.euicc.EuiccManager.EUICC_OTA_STATUS_UNAVAILABLE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccManager.OtaStatus {
+  }
+
+  public final class EuiccNotification implements android.os.Parcelable {
+    ctor public EuiccNotification(int, String, @android.telephony.euicc.EuiccNotification.Event int, @Nullable byte[]);
+    method public int describeContents();
+    method @Nullable public byte[] getData();
+    method @android.telephony.euicc.EuiccNotification.Event public int getEvent();
+    method public int getSeq();
+    method public String getTargetAddr();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @android.telephony.euicc.EuiccNotification.Event public static final int ALL_EVENTS = 15; // 0xf
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccNotification> CREATOR;
+    field public static final int EVENT_DELETE = 8; // 0x8
+    field public static final int EVENT_DISABLE = 4; // 0x4
+    field public static final int EVENT_ENABLE = 2; // 0x2
+    field public static final int EVENT_INSTALL = 1; // 0x1
+  }
+
+  @IntDef(flag=true, prefix={"EVENT_"}, value={android.telephony.euicc.EuiccNotification.EVENT_INSTALL, android.telephony.euicc.EuiccNotification.EVENT_ENABLE, android.telephony.euicc.EuiccNotification.EVENT_DISABLE, android.telephony.euicc.EuiccNotification.EVENT_DELETE}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccNotification.Event {
+  }
+
+  public final class EuiccRulesAuthTable implements android.os.Parcelable {
+    method public int describeContents();
+    method public int findIndex(@android.service.euicc.EuiccProfileInfo.PolicyRule int, android.service.carrier.CarrierIdentifier);
+    method public boolean hasPolicyRuleFlag(int, @android.telephony.euicc.EuiccRulesAuthTable.PolicyRuleFlag int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.euicc.EuiccRulesAuthTable> CREATOR;
+    field public static final int POLICY_RULE_FLAG_CONSENT_REQUIRED = 1; // 0x1
+  }
+
+  public static final class EuiccRulesAuthTable.Builder {
+    ctor public EuiccRulesAuthTable.Builder(int);
+    method public android.telephony.euicc.EuiccRulesAuthTable.Builder add(int, java.util.List<android.service.carrier.CarrierIdentifier>, int);
+    method public android.telephony.euicc.EuiccRulesAuthTable build();
+  }
+
+  @IntDef(flag=true, prefix={"POLICY_RULE_FLAG_"}, value={android.telephony.euicc.EuiccRulesAuthTable.POLICY_RULE_FLAG_CONSENT_REQUIRED}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface EuiccRulesAuthTable.PolicyRuleFlag {
+  }
+
+}
+
+package android.telephony.gba {
+
+  public class GbaService extends android.app.Service {
+    ctor public GbaService();
+    method public void onAuthenticationRequest(int, int, int, @NonNull android.net.Uri, @NonNull byte[], boolean);
+    method public final void reportAuthenticationFailure(int, int) throws java.lang.RuntimeException;
+    method public final void reportKeysAvailable(int, @NonNull byte[], @NonNull String) throws java.lang.RuntimeException;
+    field public static final String SERVICE_INTERFACE = "android.telephony.gba.GbaService";
+  }
+
+  public class TlsParams {
+    method public static boolean isTlsCipherSuiteSupported(int);
+    field public static final int GROUP_SECP256R1 = 23; // 0x17
+    field public static final int GROUP_SECP384R1 = 24; // 0x18
+    field public static final int GROUP_X25519 = 29; // 0x1d
+    field public static final int GROUP_X448 = 30; // 0x1e
+    field public static final int PROTOCOL_VERSION_TLS_1_2 = 771; // 0x303
+    field public static final int PROTOCOL_VERSION_TLS_1_3 = 772; // 0x304
+    field public static final int SIG_ECDSA_BRAINPOOLP256R1TLS13_SHA256 = 2074; // 0x81a
+    field public static final int SIG_ECDSA_BRAINPOOLP384R1TLS13_SHA384 = 2075; // 0x81b
+    field public static final int SIG_ECDSA_BRAINPOOLP512R1TLS13_SHA512 = 2076; // 0x81c
+    field public static final int SIG_ECDSA_SECP256R1_SHA256 = 1027; // 0x403
+    field public static final int SIG_ECDSA_SECP384R1_SHA384 = 1283; // 0x503
+    field public static final int SIG_ECDSA_SECP521R1_SHA512 = 1539; // 0x603
+    field public static final int SIG_ECDSA_SHA1 = 515; // 0x203
+    field public static final int SIG_RSA_PKCS1_SHA1 = 513; // 0x201
+    field public static final int SIG_RSA_PKCS1_SHA256 = 1025; // 0x401
+    field public static final int SIG_RSA_PKCS1_SHA256_LEGACY = 1056; // 0x420
+    field public static final int SIG_RSA_PKCS1_SHA384 = 1281; // 0x501
+    field public static final int SIG_RSA_PKCS1_SHA384_LEGACY = 1312; // 0x520
+    field public static final int SIG_RSA_PKCS1_SHA512 = 1537; // 0x601
+    field public static final int SIG_RSA_PKCS1_SHA512_LEGACY = 1568; // 0x620
+    field public static final int SIG_RSA_PSS_RSAE_SHA256 = 2052; // 0x804
+    field public static final int SIG_RSA_PSS_RSAE_SHA384 = 2053; // 0x805
+    field public static final int SIG_RSA_PSS_RSAE_SHA512 = 2054; // 0x806
+    field public static final int TLS_AES_128_CCM_SHA256 = 4868; // 0x1304
+    field public static final int TLS_AES_128_GCM_SHA256 = 4865; // 0x1301
+    field public static final int TLS_AES_256_GCM_SHA384 = 4866; // 0x1302
+    field public static final int TLS_CHACHA20_POLY1305_SHA256 = 4867; // 0x1303
+    field public static final int TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = 19; // 0x13
+    field public static final int TLS_DHE_DSS_WITH_AES_128_CBC_SHA = 50; // 0x32
+    field public static final int TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = 64; // 0x40
+    field public static final int TLS_DHE_DSS_WITH_AES_256_CBC_SHA = 56; // 0x38
+    field public static final int TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = 106; // 0x6a
+    field public static final int TLS_DHE_PSK_WITH_AES_128_CCM = 49318; // 0xc0a6
+    field public static final int TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 = 170; // 0xaa
+    field public static final int TLS_DHE_PSK_WITH_AES_256_CCM = 49319; // 0xc0a7
+    field public static final int TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 = 171; // 0xab
+    field public static final int TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 52397; // 0xccad
+    field public static final int TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = 22; // 0x16
+    field public static final int TLS_DHE_RSA_WITH_AES_128_CBC_SHA = 51; // 0x33
+    field public static final int TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = 103; // 0x67
+    field public static final int TLS_DHE_RSA_WITH_AES_128_CCM = 49310; // 0xc09e
+    field public static final int TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = 158; // 0x9e
+    field public static final int TLS_DHE_RSA_WITH_AES_256_CBC_SHA = 57; // 0x39
+    field public static final int TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = 107; // 0x6b
+    field public static final int TLS_DHE_RSA_WITH_AES_256_CCM = 49311; // 0xc09f
+    field public static final int TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = 159; // 0x9f
+    field public static final int TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 52394; // 0xccaa
+    field public static final int TLS_DH_ANON_WITH_3DES_EDE_CBC_SHA = 27; // 0x1b
+    field public static final int TLS_DH_ANON_WITH_AES_128_CBC_SHA = 52; // 0x34
+    field public static final int TLS_DH_ANON_WITH_AES_128_CBC_SHA256 = 108; // 0x6c
+    field public static final int TLS_DH_ANON_WITH_AES_256_CBC_SHA = 58; // 0x3a
+    field public static final int TLS_DH_ANON_WITH_AES_256_CBC_SHA256 = 109; // 0x6d
+    field public static final int TLS_DH_ANON_WITH_RC4_128_MD5 = 24; // 0x18
+    field public static final int TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = 13; // 0xd
+    field public static final int TLS_DH_DSS_WITH_AES_128_CBC_SHA = 48; // 0x30
+    field public static final int TLS_DH_DSS_WITH_AES_128_CBC_SHA256 = 62; // 0x3e
+    field public static final int TLS_DH_DSS_WITH_AES_256_CBC_SHA = 54; // 0x36
+    field public static final int TLS_DH_DSS_WITH_AES_256_CBC_SHA256 = 104; // 0x68
+    field public static final int TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = 16; // 0x10
+    field public static final int TLS_DH_RSA_WITH_AES_128_CBC_SHA = 49; // 0x31
+    field public static final int TLS_DH_RSA_WITH_AES_128_CBC_SHA256 = 63; // 0x3f
+    field public static final int TLS_DH_RSA_WITH_AES_256_CBC_SHA = 55; // 0x37
+    field public static final int TLS_DH_RSA_WITH_AES_256_CBC_SHA256 = 105; // 0x69
+    field public static final int TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = 49195; // 0xc02b
+    field public static final int TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = 49196; // 0xc02c
+    field public static final int TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 52393; // 0xcca9
+    field public static final int TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256 = 53253; // 0xd005
+    field public static final int TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256 = 53249; // 0xd001
+    field public static final int TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384 = 53250; // 0xd002
+    field public static final int TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = 52396; // 0xccac
+    field public static final int TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = 49199; // 0xc02f
+    field public static final int TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = 49200; // 0xc030
+    field public static final int TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = 52392; // 0xcca8
+    field public static final int TLS_NULL_WITH_NULL_NULL = 0; // 0x0
+    field public static final int TLS_RSA_WITH_3DES_EDE_CBC_SHA = 10; // 0xa
+    field public static final int TLS_RSA_WITH_AES_128_CBC_SHA = 47; // 0x2f
+    field public static final int TLS_RSA_WITH_AES_128_CBC_SHA256 = 60; // 0x3c
+    field public static final int TLS_RSA_WITH_AES_256_CBC_SHA = 53; // 0x35
+    field public static final int TLS_RSA_WITH_AES_256_CBC_SHA256 = 61; // 0x3d
+    field public static final int TLS_RSA_WITH_NULL_MD5 = 1; // 0x1
+    field public static final int TLS_RSA_WITH_NULL_SHA = 2; // 0x2
+    field public static final int TLS_RSA_WITH_NULL_SHA256 = 59; // 0x3b
+    field public static final int TLS_RSA_WITH_RC4_128_MD5 = 4; // 0x4
+    field public static final int TLS_RSA_WITH_RC4_128_SHA = 5; // 0x5
+  }
+
+  public final class UaSecurityProtocolIdentifier implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getOrg();
+    method public int getProtocol();
+    method public int getTlsCipherSuite();
+    method @NonNull public byte[] toByteArray();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.gba.UaSecurityProtocolIdentifier> CREATOR;
+    field public static final int ORG_3GPP = 1; // 0x1
+    field public static final int ORG_3GPP2 = 2; // 0x2
+    field public static final int ORG_GSMA = 4; // 0x4
+    field public static final int ORG_LOCAL = 255; // 0xff
+    field public static final int ORG_NONE = 0; // 0x0
+    field public static final int ORG_OMA = 3; // 0x3
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_GENERATION_TMPI = 256; // 0x100
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_GENERIC_PUSH_LAYER = 5; // 0x5
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_HTTP_BASED_MBMS = 3; // 0x3
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_HTTP_DIGEST_AUTHENTICATION = 2; // 0x2
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_IMS_MEDIA_PLANE = 6; // 0x6
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_MBMS = 1; // 0x1
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_SIP_BASED_MBMS = 4; // 0x4
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_SUBSCRIBER_CERTIFICATE = 0; // 0x0
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_TLS_BROWSER = 131072; // 0x20000
+    field public static final int UA_SECURITY_PROTOCOL_3GPP_TLS_DEFAULT = 65536; // 0x10000
+  }
+
+  public static final class UaSecurityProtocolIdentifier.Builder {
+    ctor public UaSecurityProtocolIdentifier.Builder();
+    ctor public UaSecurityProtocolIdentifier.Builder(@NonNull android.telephony.gba.UaSecurityProtocolIdentifier);
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier build();
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier.Builder setOrg(int);
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier.Builder setProtocol(int);
+    method @NonNull public android.telephony.gba.UaSecurityProtocolIdentifier.Builder setTlsCipherSuite(int);
+  }
+
+}
+
+package android.telephony.ims {
+
+  public final class AudioCodecAttributes implements android.os.Parcelable {
+    ctor public AudioCodecAttributes(float, @NonNull android.util.Range<java.lang.Float>, float, @NonNull android.util.Range<java.lang.Float>);
+    method public int describeContents();
+    method public float getBandwidthKhz();
+    method @NonNull public android.util.Range<java.lang.Float> getBandwidthRangeKhz();
+    method public float getBitrateKbps();
+    method @NonNull public android.util.Range<java.lang.Float> getBitrateRangeKbps();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.AudioCodecAttributes> CREATOR;
+  }
+
+  public interface DelegateMessageCallback {
+    method public void onMessageReceived(@NonNull android.telephony.ims.SipMessage);
+    method public void onMessageSendFailure(@NonNull String, int);
+    method public void onMessageSent(@NonNull String);
+  }
+
+  public final class DelegateRegistrationState implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.telephony.ims.FeatureTagState> getDeregisteredFeatureTags();
+    method @NonNull public java.util.Set<android.telephony.ims.FeatureTagState> getDeregisteringFeatureTags();
+    method @NonNull public java.util.Set<java.lang.String> getRegisteredFeatureTags();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.DelegateRegistrationState> CREATOR;
+    field public static final int DEREGISTERED_REASON_NOT_PROVISIONED = 1; // 0x1
+    field public static final int DEREGISTERED_REASON_NOT_REGISTERED = 2; // 0x2
+    field public static final int DEREGISTERED_REASON_UNKNOWN = 0; // 0x0
+    field public static final int DEREGISTERING_REASON_DESTROY_PENDING = 6; // 0x6
+    field public static final int DEREGISTERING_REASON_FEATURE_TAGS_CHANGING = 5; // 0x5
+    field public static final int DEREGISTERING_REASON_PDN_CHANGE = 3; // 0x3
+    field public static final int DEREGISTERING_REASON_PROVISIONING_CHANGE = 4; // 0x4
+  }
+
+  public static final class DelegateRegistrationState.Builder {
+    ctor public DelegateRegistrationState.Builder();
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addDeregisteredFeatureTag(@NonNull String, int);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addDeregisteringFeatureTag(@NonNull String, int);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addRegisteredFeatureTag(@NonNull String);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState.Builder addRegisteredFeatureTags(@NonNull java.util.Set<java.lang.String>);
+    method @NonNull public android.telephony.ims.DelegateRegistrationState build();
+  }
+
+  public final class DelegateRequest implements android.os.Parcelable {
+    ctor public DelegateRequest(@NonNull java.util.Set<java.lang.String>);
+    method public int describeContents();
+    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.DelegateRequest> CREATOR;
+  }
+
+  public interface DelegateStateCallback {
+    method public void onConfigurationChanged(@NonNull android.telephony.ims.SipDelegateConfiguration);
+    method public void onCreated(@NonNull android.telephony.ims.stub.SipDelegate, @Nullable java.util.Set<android.telephony.ims.FeatureTagState>);
+    method public void onDestroyed(int);
+    method public void onFeatureTagRegistrationChanged(@NonNull android.telephony.ims.DelegateRegistrationState);
+  }
+
+  public final class FeatureTagState implements android.os.Parcelable {
+    ctor public FeatureTagState(@NonNull String, int);
+    method public int describeContents();
+    method @NonNull public String getFeatureTag();
+    method public int getState();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.FeatureTagState> CREATOR;
+  }
+
+  public final class ImsCallForwardInfo implements android.os.Parcelable {
+    ctor public ImsCallForwardInfo(int, int, int, int, @NonNull String, int);
+    method public int describeContents();
+    method public int getCondition();
+    method public String getNumber();
+    method public int getServiceClass();
+    method public int getStatus();
+    method public int getTimeSeconds();
+    method public int getToA();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CDIV_CF_REASON_ALL = 4; // 0x4
+    field public static final int CDIV_CF_REASON_ALL_CONDITIONAL = 5; // 0x5
+    field public static final int CDIV_CF_REASON_BUSY = 1; // 0x1
+    field public static final int CDIV_CF_REASON_NOT_LOGGED_IN = 6; // 0x6
+    field public static final int CDIV_CF_REASON_NOT_REACHABLE = 3; // 0x3
+    field public static final int CDIV_CF_REASON_NO_REPLY = 2; // 0x2
+    field public static final int CDIV_CF_REASON_UNCONDITIONAL = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallForwardInfo> CREATOR;
+    field public static final int STATUS_ACTIVE = 1; // 0x1
+    field public static final int STATUS_NOT_ACTIVE = 0; // 0x0
+    field public static final int TYPE_OF_ADDRESS_INTERNATIONAL = 145; // 0x91
+    field public static final int TYPE_OF_ADDRESS_UNKNOWN = 129; // 0x81
+  }
+
+  public final class ImsCallProfile implements android.os.Parcelable {
+    ctor public ImsCallProfile();
+    ctor public ImsCallProfile(int, int);
+    ctor public ImsCallProfile(int, int, android.os.Bundle, android.telephony.ims.ImsStreamMediaProfile);
+    method public int describeContents();
+    method @NonNull public java.util.Set<android.telephony.ims.RtpHeaderExtensionType> getAcceptedRtpHeaderExtensionTypes();
+    method public String getCallExtra(String);
+    method public String getCallExtra(String, String);
+    method public boolean getCallExtraBoolean(String);
+    method public boolean getCallExtraBoolean(String, boolean);
+    method public int getCallExtraInt(String);
+    method public int getCallExtraInt(String, int);
+    method @Nullable public <T extends android.os.Parcelable> T getCallExtraParcelable(@Nullable String);
+    method public android.os.Bundle getCallExtras();
+    method public int getCallType();
+    method public static int getCallTypeFromVideoState(int);
+    method public int getCallerNumberVerificationStatus();
+    method public int getEmergencyCallRouting();
+    method public int getEmergencyServiceCategories();
+    method @NonNull public java.util.List<java.lang.String> getEmergencyUrns();
+    method public android.telephony.ims.ImsStreamMediaProfile getMediaProfile();
+    method @NonNull public android.os.Bundle getProprietaryCallExtras();
+    method public int getRestrictCause();
+    method public int getServiceType();
+    method public static int getVideoStateFromCallType(int);
+    method public static int getVideoStateFromImsCallProfile(android.telephony.ims.ImsCallProfile);
+    method public boolean hasKnownUserIntentEmergency();
+    method public boolean isEmergencyCallTesting();
+    method public boolean isVideoCall();
+    method public boolean isVideoPaused();
+    method public static int presentationToOir(int);
+    method public void setAcceptedRtpHeaderExtensionTypes(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtensionType>);
+    method public void setCallExtra(String, String);
+    method public void setCallExtraBoolean(String, boolean);
+    method public void setCallExtraInt(String, int);
+    method public void setCallExtraParcelable(@NonNull String, @NonNull android.os.Parcelable);
+    method public void setCallRestrictCause(int);
+    method public void setCallerNumberVerificationStatus(int);
+    method public void setEmergencyCallRouting(int);
+    method public void setEmergencyCallTesting(boolean);
+    method public void setEmergencyServiceCategories(int);
+    method public void setEmergencyUrns(@NonNull java.util.List<java.lang.String>);
+    method public void setHasKnownUserIntentEmergency(boolean);
+    method public void updateCallExtras(android.telephony.ims.ImsCallProfile);
+    method public void updateCallType(android.telephony.ims.ImsCallProfile);
+    method public void updateMediaProfile(android.telephony.ims.ImsCallProfile);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALL_RESTRICT_CAUSE_DISABLED = 2; // 0x2
+    field public static final int CALL_RESTRICT_CAUSE_HD = 3; // 0x3
+    field public static final int CALL_RESTRICT_CAUSE_NONE = 0; // 0x0
+    field public static final int CALL_RESTRICT_CAUSE_RAT = 1; // 0x1
+    field public static final int CALL_TYPE_VIDEO_N_VOICE = 3; // 0x3
+    field public static final int CALL_TYPE_VOICE = 2; // 0x2
+    field public static final int CALL_TYPE_VOICE_N_VIDEO = 1; // 0x1
+    field public static final int CALL_TYPE_VS = 8; // 0x8
+    field public static final int CALL_TYPE_VS_RX = 10; // 0xa
+    field public static final int CALL_TYPE_VS_TX = 9; // 0x9
+    field public static final int CALL_TYPE_VT = 4; // 0x4
+    field public static final int CALL_TYPE_VT_NODIR = 7; // 0x7
+    field public static final int CALL_TYPE_VT_RX = 6; // 0x6
+    field public static final int CALL_TYPE_VT_TX = 5; // 0x5
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsCallProfile> CREATOR;
+    field public static final int DIALSTRING_NORMAL = 0; // 0x0
+    field public static final int DIALSTRING_SS_CONF = 1; // 0x1
+    field public static final int DIALSTRING_USSD = 2; // 0x2
+    field public static final String EXTRA_ADDITIONAL_CALL_INFO = "AdditionalCallInfo";
+    field public static final String EXTRA_ADDITIONAL_SIP_INVITE_FIELDS = "android.telephony.ims.extra.ADDITIONAL_SIP_INVITE_FIELDS";
+    field public static final String EXTRA_CALL_DISCONNECT_CAUSE = "android.telephony.ims.extra.CALL_DISCONNECT_CAUSE";
+    field public static final String EXTRA_CALL_NETWORK_TYPE = "android.telephony.ims.extra.CALL_NETWORK_TYPE";
+    field @Deprecated public static final String EXTRA_CALL_RAT_TYPE = "CallRadioTech";
+    field public static final String EXTRA_CALL_SUBJECT = "android.telephony.ims.extra.CALL_SUBJECT";
+    field public static final String EXTRA_CHILD_NUMBER = "ChildNum";
+    field public static final String EXTRA_CNA = "cna";
+    field public static final String EXTRA_CNAP = "cnap";
+    field public static final String EXTRA_CODEC = "Codec";
+    field public static final String EXTRA_CONFERENCE = "android.telephony.ims.extra.CONFERENCE";
+    field public static final String EXTRA_DIALSTRING = "dialstring";
+    field public static final String EXTRA_DISPLAY_TEXT = "DisplayText";
+    field public static final String EXTRA_EMERGENCY_CALL = "e_call";
+    field public static final String EXTRA_EXTENDING_TO_CONFERENCE_SUPPORTED = "android.telephony.ims.extra.EXTENDING_TO_CONFERENCE_SUPPORTED";
+    field public static final String EXTRA_FORWARDED_NUMBER = "android.telephony.ims.extra.FORWARDED_NUMBER";
+    field public static final String EXTRA_IS_BUSINESS_CALL = "android.telephony.ims.extra.IS_BUSINESS_CALL";
+    field public static final String EXTRA_IS_CALL_PULL = "CallPull";
+    field public static final String EXTRA_IS_CROSS_SIM_CALL = "android.telephony.ims.extra.IS_CROSS_SIM_CALL";
+    field public static final String EXTRA_LOCATION = "android.telephony.ims.extra.LOCATION";
+    field public static final String EXTRA_OI = "oi";
+    field public static final String EXTRA_OIR = "oir";
+    field public static final String EXTRA_PICTURE_URL = "android.telephony.ims.extra.PICTURE_URL";
+    field public static final String EXTRA_PRIORITY = "android.telephony.ims.extra.PRIORITY";
+    field public static final String EXTRA_REMOTE_URI = "remote_uri";
+    field public static final String EXTRA_USSD = "ussd";
+    field public static final int OIR_DEFAULT = 0; // 0x0
+    field public static final int OIR_PRESENTATION_NOT_RESTRICTED = 2; // 0x2
+    field public static final int OIR_PRESENTATION_PAYPHONE = 4; // 0x4
+    field public static final int OIR_PRESENTATION_RESTRICTED = 1; // 0x1
+    field public static final int OIR_PRESENTATION_UNKNOWN = 3; // 0x3
+    field public static final int PRIORITY_NORMAL = 0; // 0x0
+    field public static final int PRIORITY_URGENT = 1; // 0x1
+    field public static final int SERVICE_TYPE_EMERGENCY = 2; // 0x2
+    field public static final int SERVICE_TYPE_NONE = 0; // 0x0
+    field public static final int SERVICE_TYPE_NORMAL = 1; // 0x1
+    field public static final int VERIFICATION_STATUS_FAILED = 2; // 0x2
+    field public static final int VERIFICATION_STATUS_NOT_VERIFIED = 0; // 0x0
+    field public static final int VERIFICATION_STATUS_PASSED = 1; // 0x1
+  }
+
+  public class ImsCallSessionListener {
+    method public void callQualityChanged(@NonNull android.telephony.CallQuality);
+    method public void callSessionConferenceExtendFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionConferenceExtendReceived(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
+    method public void callSessionConferenceExtended(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
+    method public void callSessionConferenceStateUpdated(android.telephony.ims.ImsConferenceState);
+    method public void callSessionDtmfReceived(char);
+    method @Deprecated public void callSessionHandover(int, int, android.telephony.ims.ImsReasonInfo);
+    method @Deprecated public void callSessionHandoverFailed(int, int, android.telephony.ims.ImsReasonInfo);
+    method public void callSessionHeld(android.telephony.ims.ImsCallProfile);
+    method public void callSessionHoldFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionHoldReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionInitiated(android.telephony.ims.ImsCallProfile);
+    method @Deprecated public void callSessionInitiatedFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionInitiating(@NonNull android.telephony.ims.ImsCallProfile);
+    method public void callSessionInitiatingFailed(@NonNull android.telephony.ims.ImsReasonInfo);
+    method public void callSessionInviteParticipantsRequestDelivered();
+    method public void callSessionInviteParticipantsRequestFailed(android.telephony.ims.ImsReasonInfo);
+    method @Deprecated public void callSessionMayHandover(int, int);
+    method public void callSessionMergeComplete(android.telephony.ims.stub.ImsCallSessionImplBase);
+    method public void callSessionMergeFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionMergeStarted(android.telephony.ims.stub.ImsCallSessionImplBase, android.telephony.ims.ImsCallProfile);
+    method public void callSessionMultipartyStateChanged(boolean);
+    method public void callSessionProgressing(android.telephony.ims.ImsStreamMediaProfile);
+    method public void callSessionRemoveParticipantsRequestDelivered();
+    method public void callSessionRemoveParticipantsRequestFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionResumeFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionResumeReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionResumed(android.telephony.ims.ImsCallProfile);
+    method public void callSessionRtpHeaderExtensionsReceived(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtension>);
+    method public void callSessionRttAudioIndicatorChanged(@NonNull android.telephony.ims.ImsStreamMediaProfile);
+    method public void callSessionRttMessageReceived(String);
+    method public void callSessionRttModifyRequestReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionRttModifyResponseReceived(int);
+    method public void callSessionSuppServiceReceived(android.telephony.ims.ImsSuppServiceNotification);
+    method public void callSessionTerminated(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionTtyModeReceived(int);
+    method public void callSessionUpdateFailed(android.telephony.ims.ImsReasonInfo);
+    method public void callSessionUpdateReceived(android.telephony.ims.ImsCallProfile);
+    method public void callSessionUpdated(android.telephony.ims.ImsCallProfile);
+    method public void callSessionUssdMessageReceived(int, String);
+    method public void onHandover(int, int, @Nullable android.telephony.ims.ImsReasonInfo);
+    method public void onHandoverFailed(int, int, @NonNull android.telephony.ims.ImsReasonInfo);
+    method public void onMayHandover(int, int);
+  }
+
+  public final class ImsConferenceState implements android.os.Parcelable {
+    method public int describeContents();
+    method public static int getConnectionStateForStatus(String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsConferenceState> CREATOR;
+    field public static final String DISPLAY_TEXT = "display-text";
+    field public static final String ENDPOINT = "endpoint";
+    field public static final String SIP_STATUS_CODE = "sipstatuscode";
+    field public static final String STATUS = "status";
+    field public static final String STATUS_ALERTING = "alerting";
+    field public static final String STATUS_CONNECTED = "connected";
+    field public static final String STATUS_CONNECT_FAIL = "connect-fail";
+    field public static final String STATUS_DIALING_IN = "dialing-in";
+    field public static final String STATUS_DIALING_OUT = "dialing-out";
+    field public static final String STATUS_DISCONNECTED = "disconnected";
+    field public static final String STATUS_DISCONNECTING = "disconnecting";
+    field public static final String STATUS_MUTED_VIA_FOCUS = "muted-via-focus";
+    field public static final String STATUS_ON_HOLD = "on-hold";
+    field public static final String STATUS_PENDING = "pending";
+    field public static final String STATUS_SEND_ONLY = "sendonly";
+    field public static final String STATUS_SEND_RECV = "sendrecv";
+    field public static final String USER = "user";
+    field public final java.util.HashMap<java.lang.String,android.os.Bundle> mParticipants;
+  }
+
+  public final class ImsException extends java.lang.Exception {
+    ctor public ImsException(@Nullable String);
+    ctor public ImsException(@Nullable String, int);
+    ctor public ImsException(@Nullable String, int, @Nullable Throwable);
+  }
+
+  public final class ImsExternalCallState implements android.os.Parcelable {
+    ctor public ImsExternalCallState(@NonNull String, @NonNull android.net.Uri, @Nullable android.net.Uri, boolean, int, int, boolean);
+    method public int describeContents();
+    method @NonNull public android.net.Uri getAddress();
+    method public int getCallId();
+    method public int getCallState();
+    method public int getCallType();
+    method @Nullable public android.net.Uri getLocalAddress();
+    method public boolean isCallHeld();
+    method public boolean isCallPullable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CALL_STATE_CONFIRMED = 1; // 0x1
+    field public static final int CALL_STATE_TERMINATED = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsExternalCallState> CREATOR;
+  }
+
+  public class ImsManager {
+    method @NonNull public android.telephony.ims.SipDelegateManager getSipDelegateManager(int);
+  }
+
+  public class ImsMmTelManager implements android.telephony.ims.RegistrationManager {
+    method @Deprecated @NonNull @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public static android.telephony.ims.ImsMmTelManager createForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getFeatureState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getRegistrationState(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getVoWiFiRoamingModeSetting();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAvailable(int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCapable(int, int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void isSupported(int, int, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>) throws android.telephony.ims.ImsException;
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerImsRegistrationCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setAdvancedCallingSettingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setCrossSimCallingEnabled(boolean) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setRttCapabilitySetting(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiModeSetting(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiNonPersistent(boolean, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingModeSetting(int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiRoamingSettingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVoWiFiSettingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setVtSettingEnabled(boolean);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterImsRegistrationCallback(@NonNull android.telephony.ims.ImsMmTelManager.RegistrationCallback);
+  }
+
+  @Deprecated public static class ImsMmTelManager.RegistrationCallback extends android.telephony.ims.RegistrationManager.RegistrationCallback {
+    ctor @Deprecated public ImsMmTelManager.RegistrationCallback();
+    method @Deprecated public void onRegistered(int);
+    method @Deprecated public void onRegistering(int);
+  }
+
+  public class ImsRcsManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void addOnAvailabilityChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ImsRcsManager.OnAvailabilityChangedListener) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isAvailable(int, int) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isCapable(int, int) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void removeOnAvailabilityChangedListener(@NonNull android.telephony.ims.ImsRcsManager.OnAvailabilityChangedListener);
+  }
+
+  public static interface ImsRcsManager.OnAvailabilityChangedListener {
+    method public void onAvailabilityChanged(int);
+  }
+
+  public final class ImsReasonInfo implements android.os.Parcelable {
+    field public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service";
+  }
+
+  public final class ImsRegistrationAttributes implements android.os.Parcelable {
+    method public int getRegistrationTechnology();
+  }
+
+  public static final class ImsRegistrationAttributes.Builder {
+    ctor public ImsRegistrationAttributes.Builder(int);
+    method @NonNull public android.telephony.ims.ImsRegistrationAttributes build();
+    method @NonNull public android.telephony.ims.ImsRegistrationAttributes.Builder setFeatureTags(@NonNull java.util.Set<java.lang.String>);
+  }
+
+  public class ImsService extends android.app.Service {
+    ctor public ImsService();
+    method public android.telephony.ims.feature.MmTelFeature createMmTelFeature(int);
+    method public android.telephony.ims.feature.RcsFeature createRcsFeature(int);
+    method public void disableIms(int);
+    method public void enableIms(int);
+    method public android.telephony.ims.stub.ImsConfigImplBase getConfig(int);
+    method public long getImsServiceCapabilities();
+    method public android.telephony.ims.stub.ImsRegistrationImplBase getRegistration(int);
+    method @Nullable public android.telephony.ims.stub.SipTransportImplBase getSipTransport(int);
+    method public final void onUpdateSupportedImsFeatures(android.telephony.ims.stub.ImsFeatureConfiguration) throws android.os.RemoteException;
+    method public android.telephony.ims.stub.ImsFeatureConfiguration querySupportedImsFeatures();
+    method public void readyForFeatureCreation();
+    field public static final long CAPABILITY_SIP_DELEGATE_CREATION = 2L; // 0x2L
+  }
+
+  public final class ImsSsData implements android.os.Parcelable {
+    ctor public ImsSsData(int, int, int, int, int);
+    method public int describeContents();
+    method @Nullable public java.util.List<android.telephony.ims.ImsCallForwardInfo> getCallForwardInfo();
+    method public int getRequestType();
+    method public int getResult();
+    method public int getServiceClass();
+    method public int getServiceType();
+    method @NonNull public java.util.List<android.telephony.ims.ImsSsInfo> getSuppServiceInfo();
+    method public int getTeleserviceType();
+    method public boolean isTypeBarring();
+    method public boolean isTypeCf();
+    method public boolean isTypeClip();
+    method public boolean isTypeClir();
+    method public boolean isTypeColp();
+    method public boolean isTypeColr();
+    method public boolean isTypeCw();
+    method public boolean isTypeIcb();
+    method public boolean isTypeInterrogation();
+    method public boolean isTypeUnConditional();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsData> CREATOR;
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+    field public static final int SERVICE_CLASS_DATA = 2; // 0x2
+    field public static final int SERVICE_CLASS_DATA_CIRCUIT_ASYNC = 32; // 0x20
+    field public static final int SERVICE_CLASS_DATA_CIRCUIT_SYNC = 16; // 0x10
+    field public static final int SERVICE_CLASS_DATA_PACKET_ACCESS = 64; // 0x40
+    field public static final int SERVICE_CLASS_DATA_PAD = 128; // 0x80
+    field public static final int SERVICE_CLASS_FAX = 4; // 0x4
+    field public static final int SERVICE_CLASS_NONE = 0; // 0x0
+    field public static final int SERVICE_CLASS_SMS = 8; // 0x8
+    field public static final int SERVICE_CLASS_VOICE = 1; // 0x1
+    field public static final int SS_ACTIVATION = 0; // 0x0
+    field public static final int SS_ALL_BARRING = 18; // 0x12
+    field public static final int SS_ALL_DATA_TELESERVICES = 3; // 0x3
+    field public static final int SS_ALL_TELESERVICES_EXCEPT_SMS = 5; // 0x5
+    field public static final int SS_ALL_TELESEVICES = 1; // 0x1
+    field public static final int SS_ALL_TELE_AND_BEARER_SERVICES = 0; // 0x0
+    field public static final int SS_BAIC = 16; // 0x10
+    field public static final int SS_BAIC_ROAMING = 17; // 0x11
+    field public static final int SS_BAOC = 13; // 0xd
+    field public static final int SS_BAOIC = 14; // 0xe
+    field public static final int SS_BAOIC_EXC_HOME = 15; // 0xf
+    field public static final int SS_CFU = 0; // 0x0
+    field public static final int SS_CFUT = 6; // 0x6
+    field public static final int SS_CF_ALL = 4; // 0x4
+    field public static final int SS_CF_ALL_CONDITIONAL = 5; // 0x5
+    field public static final int SS_CF_BUSY = 1; // 0x1
+    field public static final int SS_CF_NOT_REACHABLE = 3; // 0x3
+    field public static final int SS_CF_NO_REPLY = 2; // 0x2
+    field public static final int SS_CLIP = 7; // 0x7
+    field public static final int SS_CLIR = 8; // 0x8
+    field public static final int SS_CNAP = 11; // 0xb
+    field public static final int SS_COLP = 9; // 0x9
+    field public static final int SS_COLR = 10; // 0xa
+    field public static final int SS_DEACTIVATION = 1; // 0x1
+    field public static final int SS_ERASURE = 4; // 0x4
+    field public static final int SS_INCOMING_BARRING = 20; // 0x14
+    field public static final int SS_INCOMING_BARRING_ANONYMOUS = 22; // 0x16
+    field public static final int SS_INCOMING_BARRING_DN = 21; // 0x15
+    field public static final int SS_INTERROGATION = 2; // 0x2
+    field public static final int SS_OUTGOING_BARRING = 19; // 0x13
+    field public static final int SS_REGISTRATION = 3; // 0x3
+    field public static final int SS_SMS_SERVICES = 4; // 0x4
+    field public static final int SS_TELEPHONY = 2; // 0x2
+    field public static final int SS_WAIT = 12; // 0xc
+  }
+
+  public static final class ImsSsData.Builder {
+    ctor public ImsSsData.Builder(int, int, int, int, int);
+    method @NonNull public android.telephony.ims.ImsSsData build();
+    method @NonNull public android.telephony.ims.ImsSsData.Builder setCallForwardingInfo(@NonNull java.util.List<android.telephony.ims.ImsCallForwardInfo>);
+    method @NonNull public android.telephony.ims.ImsSsData.Builder setSuppServiceInfo(@NonNull java.util.List<android.telephony.ims.ImsSsInfo>);
+  }
+
+  public final class ImsSsInfo implements android.os.Parcelable {
+    ctor @Deprecated public ImsSsInfo(int, @Nullable String);
+    method public int describeContents();
+    method public int getClirInterrogationStatus();
+    method public int getClirOutgoingState();
+    method @Deprecated public String getIcbNum();
+    method @Nullable public String getIncomingCommunicationBarringNumber();
+    method public int getProvisionStatus();
+    method public int getStatus();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CLIR_OUTGOING_DEFAULT = 0; // 0x0
+    field public static final int CLIR_OUTGOING_INVOCATION = 1; // 0x1
+    field public static final int CLIR_OUTGOING_SUPPRESSION = 2; // 0x2
+    field public static final int CLIR_STATUS_NOT_PROVISIONED = 0; // 0x0
+    field public static final int CLIR_STATUS_PROVISIONED_PERMANENT = 1; // 0x1
+    field public static final int CLIR_STATUS_TEMPORARILY_ALLOWED = 4; // 0x4
+    field public static final int CLIR_STATUS_TEMPORARILY_RESTRICTED = 3; // 0x3
+    field public static final int CLIR_STATUS_UNKNOWN = 2; // 0x2
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSsInfo> CREATOR;
+    field public static final int DISABLED = 0; // 0x0
+    field public static final int ENABLED = 1; // 0x1
+    field public static final int NOT_REGISTERED = -1; // 0xffffffff
+    field public static final int SERVICE_NOT_PROVISIONED = 0; // 0x0
+    field public static final int SERVICE_PROVISIONED = 1; // 0x1
+    field public static final int SERVICE_PROVISIONING_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public static final class ImsSsInfo.Builder {
+    ctor public ImsSsInfo.Builder(int);
+    method @NonNull public android.telephony.ims.ImsSsInfo build();
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirInterrogationStatus(int);
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setClirOutgoingState(int);
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setIncomingCommunicationBarringNumber(@NonNull String);
+    method @NonNull public android.telephony.ims.ImsSsInfo.Builder setProvisionStatus(int);
+  }
+
+  public final class ImsStreamMediaProfile implements android.os.Parcelable {
+    ctor public ImsStreamMediaProfile(int, int, int, int, int);
+    method public void copyFrom(android.telephony.ims.ImsStreamMediaProfile);
+    method public int describeContents();
+    method @Nullable public android.telephony.ims.AudioCodecAttributes getAudioCodecAttributes();
+    method public int getAudioDirection();
+    method public int getAudioQuality();
+    method public int getRttMode();
+    method public int getVideoDirection();
+    method public int getVideoQuality();
+    method public boolean isReceivingRttAudio();
+    method public boolean isRttCall();
+    method public void setAudioCodecAttributes(@NonNull android.telephony.ims.AudioCodecAttributes);
+    method public void setReceivingRttAudio(boolean);
+    method public void setRttMode(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_QUALITY_AMR = 1; // 0x1
+    field public static final int AUDIO_QUALITY_AMR_WB = 2; // 0x2
+    field public static final int AUDIO_QUALITY_EVRC = 4; // 0x4
+    field public static final int AUDIO_QUALITY_EVRC_B = 5; // 0x5
+    field public static final int AUDIO_QUALITY_EVRC_NW = 7; // 0x7
+    field public static final int AUDIO_QUALITY_EVRC_WB = 6; // 0x6
+    field public static final int AUDIO_QUALITY_EVS_FB = 20; // 0x14
+    field public static final int AUDIO_QUALITY_EVS_NB = 17; // 0x11
+    field public static final int AUDIO_QUALITY_EVS_SWB = 19; // 0x13
+    field public static final int AUDIO_QUALITY_EVS_WB = 18; // 0x12
+    field public static final int AUDIO_QUALITY_G711A = 13; // 0xd
+    field public static final int AUDIO_QUALITY_G711AB = 15; // 0xf
+    field public static final int AUDIO_QUALITY_G711U = 11; // 0xb
+    field public static final int AUDIO_QUALITY_G722 = 14; // 0xe
+    field public static final int AUDIO_QUALITY_G723 = 12; // 0xc
+    field public static final int AUDIO_QUALITY_G729 = 16; // 0x10
+    field public static final int AUDIO_QUALITY_GSM_EFR = 8; // 0x8
+    field public static final int AUDIO_QUALITY_GSM_FR = 9; // 0x9
+    field public static final int AUDIO_QUALITY_GSM_HR = 10; // 0xa
+    field public static final int AUDIO_QUALITY_NONE = 0; // 0x0
+    field public static final int AUDIO_QUALITY_QCELP13K = 3; // 0x3
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsStreamMediaProfile> CREATOR;
+    field public static final int DIRECTION_INACTIVE = 0; // 0x0
+    field public static final int DIRECTION_INVALID = -1; // 0xffffffff
+    field public static final int DIRECTION_RECEIVE = 1; // 0x1
+    field public static final int DIRECTION_SEND = 2; // 0x2
+    field public static final int DIRECTION_SEND_RECEIVE = 3; // 0x3
+    field public static final int RTT_MODE_DISABLED = 0; // 0x0
+    field public static final int RTT_MODE_FULL = 1; // 0x1
+    field public static final int VIDEO_QUALITY_NONE = 0; // 0x0
+    field public static final int VIDEO_QUALITY_QCIF = 1; // 0x1
+    field public static final int VIDEO_QUALITY_QVGA_LANDSCAPE = 2; // 0x2
+    field public static final int VIDEO_QUALITY_QVGA_PORTRAIT = 4; // 0x4
+    field public static final int VIDEO_QUALITY_VGA_LANDSCAPE = 8; // 0x8
+    field public static final int VIDEO_QUALITY_VGA_PORTRAIT = 16; // 0x10
+  }
+
+  public final class ImsSuppServiceNotification implements android.os.Parcelable {
+    ctor public ImsSuppServiceNotification(int, int, int, int, String, String[]);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsSuppServiceNotification> CREATOR;
+    field public final int code;
+    field public final String[] history;
+    field public final int index;
+    field public final int notificationType;
+    field public final String number;
+    field public final int type;
+  }
+
+  public class ImsUtListener {
+    method public void onLineIdentificationSupplementaryServiceResponse(int, @NonNull android.telephony.ims.ImsSsInfo);
+    method public void onSupplementaryServiceIndication(android.telephony.ims.ImsSsData);
+    method public void onUtConfigurationCallBarringQueried(int, android.telephony.ims.ImsSsInfo[]);
+    method public void onUtConfigurationCallForwardQueried(int, android.telephony.ims.ImsCallForwardInfo[]);
+    method public void onUtConfigurationCallWaitingQueried(int, android.telephony.ims.ImsSsInfo[]);
+    method @Deprecated public void onUtConfigurationQueried(int, android.os.Bundle);
+    method public void onUtConfigurationQueryFailed(int, android.telephony.ims.ImsReasonInfo);
+    method public void onUtConfigurationUpdateFailed(int, android.telephony.ims.ImsReasonInfo);
+    method public void onUtConfigurationUpdated(int);
+    field @Deprecated public static final String BUNDLE_KEY_CLIR = "queryClir";
+    field @Deprecated public static final String BUNDLE_KEY_SSINFO = "imsSsInfo";
+  }
+
+  public abstract class ImsVideoCallProvider {
+    ctor public ImsVideoCallProvider();
+    method public void changeCallDataUsage(long);
+    method public void changeCameraCapabilities(android.telecom.VideoProfile.CameraCapabilities);
+    method public void changePeerDimensions(int, int);
+    method public void changeVideoQuality(int);
+    method public void handleCallSessionEvent(int);
+    method public abstract void onRequestCallDataUsage();
+    method public abstract void onRequestCameraCapabilities();
+    method public abstract void onSendSessionModifyRequest(android.telecom.VideoProfile, android.telecom.VideoProfile);
+    method public abstract void onSendSessionModifyResponse(android.telecom.VideoProfile);
+    method public abstract void onSetCamera(String);
+    method public void onSetCamera(String, int);
+    method public abstract void onSetDeviceOrientation(int);
+    method public abstract void onSetDisplaySurface(android.view.Surface);
+    method public abstract void onSetPauseImage(android.net.Uri);
+    method public abstract void onSetPreviewSurface(android.view.Surface);
+    method public abstract void onSetZoom(float);
+    method public void receiveSessionModifyRequest(android.telecom.VideoProfile);
+    method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile);
+  }
+
+  public class ProvisioningManager {
+    method @NonNull public static android.telephony.ims.ProvisioningManager createForSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public int getProvisioningIntValue(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getProvisioningStatusForCapability(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public String getProvisioningStringValue(int);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) @WorkerThread public boolean getRcsProvisioningStatusForCapability(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public boolean isRcsVolteSingleRegistrationCapable() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void notifyRcsAutoConfigurationReceived(@NonNull byte[], boolean);
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.Callback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public void registerRcsProvisioningCallback(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.ProvisioningManager.RcsProvisioningCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningIntValue(int, int);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setProvisioningStatusForCapability(int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public int setProvisioningStringValue(int, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void setRcsClientConfiguration(@NonNull android.telephony.ims.RcsClientConfiguration) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) @WorkerThread public void setRcsProvisioningStatusForCapability(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void triggerRcsReconfiguration();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull android.telephony.ims.ProvisioningManager.Callback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public void unregisterRcsProvisioningCallback(@NonNull android.telephony.ims.ProvisioningManager.RcsProvisioningCallback);
+    field @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public static final String ACTION_RCS_SINGLE_REGISTRATION_CAPABILITY_UPDATE = "android.telephony.ims.action.RCS_SINGLE_REGISTRATION_CAPABILITY_UPDATE";
+    field public static final String EXTRA_STATUS = "android.telephony.ims.extra.STATUS";
+    field public static final String EXTRA_SUBSCRIPTION_ID = "android.telephony.ims.extra.SUBSCRIPTION_ID";
+    field public static final int KEY_VOICE_OVER_WIFI_ENTITLEMENT_ID = 67; // 0x43
+    field public static final int KEY_VOICE_OVER_WIFI_MODE_OVERRIDE = 27; // 0x1b
+    field public static final int KEY_VOICE_OVER_WIFI_ROAMING_ENABLED_OVERRIDE = 26; // 0x1a
+    field public static final int PROVISIONING_VALUE_DISABLED = 0; // 0x0
+    field public static final int PROVISIONING_VALUE_ENABLED = 1; // 0x1
+    field public static final int STATUS_CAPABLE = 0; // 0x0
+    field public static final int STATUS_CARRIER_NOT_CAPABLE = 2; // 0x2
+    field public static final int STATUS_DEVICE_NOT_CAPABLE = 1; // 0x1
+    field public static final String STRING_QUERY_RESULT_ERROR_GENERIC = "STRING_QUERY_RESULT_ERROR_GENERIC";
+    field public static final String STRING_QUERY_RESULT_ERROR_NOT_READY = "STRING_QUERY_RESULT_ERROR_NOT_READY";
+  }
+
+  public static class ProvisioningManager.Callback {
+    ctor public ProvisioningManager.Callback();
+    method public void onProvisioningIntChanged(int, int);
+    method public void onProvisioningStringChanged(int, @NonNull String);
+  }
+
+  public static class ProvisioningManager.RcsProvisioningCallback {
+    ctor public ProvisioningManager.RcsProvisioningCallback();
+    method public void onAutoConfigurationErrorReceived(int, @NonNull String);
+    method public void onConfigurationChanged(@NonNull byte[]);
+    method public void onConfigurationReset();
+    method public void onPreProvisioningReceived(@NonNull byte[]);
+    method public void onRemoved();
+  }
+
+  public final class RcsClientConfiguration implements android.os.Parcelable {
+    ctor public RcsClientConfiguration(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String getClientVendor();
+    method @NonNull public String getClientVersion();
+    method @NonNull public String getRcsProfile();
+    method @NonNull public String getRcsVersion();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsClientConfiguration> CREATOR;
+    field public static final String RCS_PROFILE_1_0 = "UP_1.0";
+    field public static final String RCS_PROFILE_2_3 = "UP_2.3";
+  }
+
+  public final class RcsContactPresenceTuple implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.net.Uri getContactUri();
+    method @Nullable public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities getServiceCapabilities();
+    method @Nullable public String getServiceDescription();
+    method @NonNull public String getServiceId();
+    method @NonNull public String getServiceVersion();
+    method @NonNull public String getStatus();
+    method @Nullable public java.time.Instant getTime();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsContactPresenceTuple> CREATOR;
+    field public static final String SERVICE_ID_CALL_COMPOSER = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.callcomposer";
+    field public static final String SERVICE_ID_CHATBOT = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.chatbot";
+    field public static final String SERVICE_ID_CHATBOT_ROLE = "org.gsma.rcs.isbot";
+    field public static final String SERVICE_ID_CHATBOT_STANDALONE = " org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.chatbot.sa";
+    field public static final String SERVICE_ID_CHAT_V1 = "org.openmobilealliance:IM-session";
+    field public static final String SERVICE_ID_CHAT_V2 = "org.openmobilealliance:ChatSession";
+    field public static final String SERVICE_ID_FT = "org.openmobilealliance:File-Transfer-HTTP";
+    field public static final String SERVICE_ID_FT_OVER_SMS = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.ftsms";
+    field public static final String SERVICE_ID_GEO_PUSH = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.geopush";
+    field public static final String SERVICE_ID_GEO_PUSH_VIA_SMS = "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcs.geosms";
+    field public static final String SERVICE_ID_MMTEL = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.mmtel";
+    field public static final String SERVICE_ID_POST_CALL = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.callunanswered";
+    field public static final String SERVICE_ID_SHARED_MAP = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.sharedmap";
+    field public static final String SERVICE_ID_SHARED_SKETCH = "org.3gpp.urn:urn-7:3gpp-service.ims.icsi.gsma.sharedsketch";
+    field public static final String TUPLE_BASIC_STATUS_CLOSED = "closed";
+    field public static final String TUPLE_BASIC_STATUS_OPEN = "open";
+  }
+
+  public static final class RcsContactPresenceTuple.Builder {
+    ctor public RcsContactPresenceTuple.Builder(@NonNull String, @NonNull String, @NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple build();
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setContactUri(@NonNull android.net.Uri);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setServiceCapabilities(@NonNull android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setServiceDescription(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.Builder setTime(@NonNull java.time.Instant);
+  }
+
+  public static final class RcsContactPresenceTuple.ServiceCapabilities implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<java.lang.String> getSupportedDuplexModes();
+    method @NonNull public java.util.List<java.lang.String> getUnsupportedDuplexModes();
+    method public boolean isAudioCapable();
+    method public boolean isVideoCapable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities> CREATOR;
+    field public static final String DUPLEX_MODE_FULL = "full";
+    field public static final String DUPLEX_MODE_HALF = "half";
+    field public static final String DUPLEX_MODE_RECEIVE_ONLY = "receive-only";
+    field public static final String DUPLEX_MODE_SEND_ONLY = "send-only";
+  }
+
+  public static final class RcsContactPresenceTuple.ServiceCapabilities.Builder {
+    ctor public RcsContactPresenceTuple.ServiceCapabilities.Builder(boolean, boolean);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities.Builder addSupportedDuplexMode(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities.Builder addUnsupportedDuplexMode(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactPresenceTuple.ServiceCapabilities build();
+  }
+
+  public final class RcsContactUceCapability implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCapabilityMechanism();
+    method @Nullable public android.telephony.ims.RcsContactPresenceTuple getCapabilityTuple(@NonNull String);
+    method @NonNull public java.util.List<android.telephony.ims.RcsContactPresenceTuple> getCapabilityTuples();
+    method @NonNull public android.net.Uri getContactUri();
+    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
+    method public int getRequestResult();
+    method public int getSourceType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CAPABILITY_MECHANISM_OPTIONS = 2; // 0x2
+    field public static final int CAPABILITY_MECHANISM_PRESENCE = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RcsContactUceCapability> CREATOR;
+    field public static final int REQUEST_RESULT_FOUND = 3; // 0x3
+    field public static final int REQUEST_RESULT_NOT_FOUND = 2; // 0x2
+    field public static final int REQUEST_RESULT_NOT_ONLINE = 1; // 0x1
+    field public static final int REQUEST_RESULT_UNKNOWN = 0; // 0x0
+    field public static final int SOURCE_TYPE_CACHED = 1; // 0x1
+    field public static final int SOURCE_TYPE_NETWORK = 0; // 0x0
+  }
+
+  public static final class RcsContactUceCapability.OptionsBuilder {
+    ctor public RcsContactUceCapability.OptionsBuilder(@NonNull android.net.Uri);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder addFeatureTag(@NonNull String);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder addFeatureTags(@NonNull java.util.Set<java.lang.String>);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability build();
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.OptionsBuilder setRequestResult(int);
+  }
+
+  public static final class RcsContactUceCapability.PresenceBuilder {
+    ctor public RcsContactUceCapability.PresenceBuilder(@NonNull android.net.Uri, int, int);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.PresenceBuilder addCapabilityTuple(@NonNull android.telephony.ims.RcsContactPresenceTuple);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability.PresenceBuilder addCapabilityTuples(@NonNull java.util.List<android.telephony.ims.RcsContactPresenceTuple>);
+    method @NonNull public android.telephony.ims.RcsContactUceCapability build();
+  }
+
+  public class RcsUceAdapter {
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void addOnPublishStateChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RcsUceAdapter.OnPublishStateChangedListener) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getUcePublishState() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void removeOnPublishStateChangedListener(@NonNull android.telephony.ims.RcsUceAdapter.OnPublishStateChangedListener) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE, android.Manifest.permission.READ_CONTACTS}) public void requestAvailability(@NonNull android.net.Uri, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RcsUceAdapter.CapabilitiesCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE, android.Manifest.permission.READ_CONTACTS}) public void requestCapabilities(@NonNull java.util.Collection<android.net.Uri>, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.RcsUceAdapter.CapabilitiesCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void setUceSettingEnabled(boolean) throws android.telephony.ims.ImsException;
+    field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
+    field public static final int CAPABILITY_UPDATE_TRIGGER_ETAG_EXPIRED = 1; // 0x1
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_2G = 7; // 0x7
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_3G = 6; // 0x6
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_EHRPD = 4; // 0x4
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_HSPAPLUS = 5; // 0x5
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_IWLAN = 9; // 0x9
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_DISABLED = 2; // 0x2
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_LTE_VOPS_ENABLED = 3; // 0x3
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_DISABLED = 10; // 0xa
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_NR5G_VOPS_ENABLED = 11; // 0xb
+    field public static final int CAPABILITY_UPDATE_TRIGGER_MOVE_TO_WLAN = 8; // 0x8
+    field public static final int CAPABILITY_UPDATE_TRIGGER_UNKNOWN = 0; // 0x0
+    field public static final int ERROR_FORBIDDEN = 6; // 0x6
+    field public static final int ERROR_GENERIC_FAILURE = 1; // 0x1
+    field public static final int ERROR_INSUFFICIENT_MEMORY = 10; // 0xa
+    field public static final int ERROR_LOST_NETWORK = 11; // 0xb
+    field public static final int ERROR_NOT_AUTHORIZED = 5; // 0x5
+    field public static final int ERROR_NOT_AVAILABLE = 3; // 0x3
+    field public static final int ERROR_NOT_ENABLED = 2; // 0x2
+    field public static final int ERROR_NOT_FOUND = 7; // 0x7
+    field public static final int ERROR_NOT_REGISTERED = 4; // 0x4
+    field public static final int ERROR_REQUEST_TIMEOUT = 9; // 0x9
+    field public static final int ERROR_REQUEST_TOO_LARGE = 8; // 0x8
+    field public static final int ERROR_SERVER_UNAVAILABLE = 12; // 0xc
+    field public static final int PUBLISH_STATE_NOT_PUBLISHED = 2; // 0x2
+    field public static final int PUBLISH_STATE_OK = 1; // 0x1
+    field public static final int PUBLISH_STATE_OTHER_ERROR = 6; // 0x6
+    field public static final int PUBLISH_STATE_RCS_PROVISION_ERROR = 4; // 0x4
+    field public static final int PUBLISH_STATE_REQUEST_TIMEOUT = 5; // 0x5
+    field public static final int PUBLISH_STATE_VOICE_PROVISION_ERROR = 3; // 0x3
+  }
+
+  public static interface RcsUceAdapter.CapabilitiesCallback {
+    method public void onCapabilitiesReceived(@NonNull java.util.List<android.telephony.ims.RcsContactUceCapability>);
+    method public void onComplete();
+    method public void onError(int, long);
+  }
+
+  public static interface RcsUceAdapter.OnPublishStateChangedListener {
+    method public void onPublishStateChange(int);
+  }
+
+  public final class RtpHeaderExtension implements android.os.Parcelable {
+    ctor public RtpHeaderExtension(@IntRange(from=1, to=14) int, @NonNull byte[]);
+    method public int describeContents();
+    method @NonNull public byte[] getExtensionData();
+    method @IntRange(from=1, to=14) public int getLocalIdentifier();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RtpHeaderExtension> CREATOR;
+  }
+
+  public final class RtpHeaderExtensionType implements android.os.Parcelable {
+    ctor public RtpHeaderExtensionType(@IntRange(from=1, to=14) int, @NonNull android.net.Uri);
+    method public int describeContents();
+    method @IntRange(from=1, to=14) public int getLocalIdentifier();
+    method @NonNull public android.net.Uri getUri();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.RtpHeaderExtensionType> CREATOR;
+  }
+
+  public final class SipDelegateConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getHomeDomain();
+    method @Nullable public String getImei();
+    method @Nullable public android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration getIpSecConfiguration();
+    method @NonNull public java.net.InetSocketAddress getLocalAddress();
+    method public int getMaxUdpPayloadSizeBytes();
+    method @Nullable public java.net.InetSocketAddress getNatSocketAddress();
+    method @Nullable public String getPrivateUserIdentifier();
+    method @Nullable public android.net.Uri getPublicGruuUri();
+    method @Nullable public String getPublicUserIdentifier();
+    method @Nullable public String getSipAssociatedUriHeader();
+    method @Nullable public String getSipAuthenticationHeader();
+    method @Nullable public String getSipAuthenticationNonce();
+    method @Nullable public String getSipCniHeader();
+    method @Nullable public String getSipContactUserParameter();
+    method @Nullable public String getSipPaniHeader();
+    method @Nullable public String getSipPathHeader();
+    method @Nullable public String getSipPlaniHeader();
+    method @NonNull public java.net.InetSocketAddress getSipServerAddress();
+    method @Nullable public String getSipServiceRouteHeader();
+    method @Nullable public String getSipUserAgentHeader();
+    method public int getTransportType();
+    method @IntRange(from=0) public long getVersion();
+    method public boolean isSipCompactFormEnabled();
+    method public boolean isSipKeepaliveEnabled();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipDelegateConfiguration> CREATOR;
+    field public static final int SIP_TRANSPORT_TCP = 1; // 0x1
+    field public static final int SIP_TRANSPORT_UDP = 0; // 0x0
+    field public static final int UDP_PAYLOAD_SIZE_UNDEFINED = -1; // 0xffffffff
+  }
+
+  public static final class SipDelegateConfiguration.Builder {
+    ctor public SipDelegateConfiguration.Builder(@IntRange(from=0) long, int, @NonNull java.net.InetSocketAddress, @NonNull java.net.InetSocketAddress);
+    ctor public SipDelegateConfiguration.Builder(@NonNull android.telephony.ims.SipDelegateConfiguration);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration build();
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setHomeDomain(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setImei(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setIpSecConfiguration(@Nullable android.telephony.ims.SipDelegateConfiguration.IpSecConfiguration);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setMaxUdpPayloadSizeBytes(@IntRange(from=1) int);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setNatSocketAddress(@Nullable java.net.InetSocketAddress);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setPrivateUserIdentifier(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setPublicGruuUri(@Nullable android.net.Uri);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setPublicUserIdentifier(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipAssociatedUriHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipAuthenticationHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipAuthenticationNonce(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipCniHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipCompactFormEnabled(boolean);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipContactUserParameter(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipKeepaliveEnabled(boolean);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipPaniHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipPathHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipPlaniHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipServiceRouteHeader(@Nullable String);
+    method @NonNull public android.telephony.ims.SipDelegateConfiguration.Builder setSipUserAgentHeader(@Nullable String);
+  }
+
+  public static final class SipDelegateConfiguration.IpSecConfiguration {
+    ctor public SipDelegateConfiguration.IpSecConfiguration(int, int, int, int, int, int, @NonNull String);
+    method public int getLastLocalTxPort();
+    method public int getLastRemoteTxPort();
+    method public int getLocalRxPort();
+    method public int getLocalTxPort();
+    method public int getRemoteRxPort();
+    method public int getRemoteTxPort();
+    method @NonNull public String getSipSecurityVerifyHeader();
+  }
+
+  public interface SipDelegateConnection {
+    method public void cleanupSession(@NonNull String);
+    method public void notifyMessageReceiveError(@NonNull String, int);
+    method public void notifyMessageReceived(@NonNull String);
+    method public void sendMessage(@NonNull android.telephony.ims.SipMessage, long);
+  }
+
+  public class SipDelegateManager {
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void createSipDelegate(@NonNull android.telephony.ims.DelegateRequest, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.ims.stub.DelegateConnectionStateCallback, @NonNull android.telephony.ims.stub.DelegateConnectionMessageCallback) throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void destroySipDelegate(@NonNull android.telephony.ims.SipDelegateConnection, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) public boolean isSupported() throws android.telephony.ims.ImsException;
+    method @RequiresPermission(android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION) public void triggerFullNetworkRegistration(@NonNull android.telephony.ims.SipDelegateConnection, @IntRange(from=100, to=699) int, @Nullable String);
+    field public static final int DENIED_REASON_INVALID = 4; // 0x4
+    field public static final int DENIED_REASON_IN_USE_BY_ANOTHER_DELEGATE = 1; // 0x1
+    field public static final int DENIED_REASON_NOT_ALLOWED = 2; // 0x2
+    field public static final int DENIED_REASON_SINGLE_REGISTRATION_NOT_ALLOWED = 3; // 0x3
+    field public static final int DENIED_REASON_UNKNOWN = 0; // 0x0
+    field public static final int MESSAGE_FAILURE_REASON_DELEGATE_CLOSED = 2; // 0x2
+    field public static final int MESSAGE_FAILURE_REASON_DELEGATE_DEAD = 1; // 0x1
+    field public static final int MESSAGE_FAILURE_REASON_INTERNAL_DELEGATE_STATE_TRANSITION = 11; // 0xb
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_BODY_CONTENT = 5; // 0x5
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_FEATURE_TAG = 6; // 0x6
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_HEADER_FIELDS = 4; // 0x4
+    field public static final int MESSAGE_FAILURE_REASON_INVALID_START_LINE = 3; // 0x3
+    field public static final int MESSAGE_FAILURE_REASON_NETWORK_NOT_AVAILABLE = 8; // 0x8
+    field public static final int MESSAGE_FAILURE_REASON_NOT_REGISTERED = 9; // 0x9
+    field public static final int MESSAGE_FAILURE_REASON_STALE_IMS_CONFIGURATION = 10; // 0xa
+    field public static final int MESSAGE_FAILURE_REASON_TAG_NOT_ENABLED_FOR_DELEGATE = 7; // 0x7
+    field public static final int MESSAGE_FAILURE_REASON_UNKNOWN = 0; // 0x0
+    field public static final int SIP_DELEGATE_DESTROY_REASON_REQUESTED_BY_APP = 2; // 0x2
+    field public static final int SIP_DELEGATE_DESTROY_REASON_SERVICE_DEAD = 1; // 0x1
+    field public static final int SIP_DELEGATE_DESTROY_REASON_SUBSCRIPTION_TORN_DOWN = 4; // 0x4
+    field public static final int SIP_DELEGATE_DESTROY_REASON_UNKNOWN = 0; // 0x0
+    field public static final int SIP_DELEGATE_DESTROY_REASON_USER_DISABLED_RCS = 3; // 0x3
+  }
+
+  public final class SipMessage implements android.os.Parcelable {
+    ctor public SipMessage(@NonNull String, @NonNull String, @NonNull byte[]);
+    method public int describeContents();
+    method @Nullable public String getCallIdParameter();
+    method @NonNull public byte[] getContent();
+    method @NonNull public String getHeaderSection();
+    method @NonNull public String getStartLine();
+    method @NonNull public String getViaBranchParameter();
+    method @NonNull public byte[] toEncodedMessage();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipMessage> CREATOR;
+  }
+
+}
+
+package android.telephony.ims.feature {
+
+  public final class CapabilityChangeRequest implements android.os.Parcelable {
+    method public void addCapabilitiesToDisableForTech(int, int);
+    method public void addCapabilitiesToEnableForTech(int, int);
+    method public int describeContents();
+    method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToDisable();
+    method public java.util.List<android.telephony.ims.feature.CapabilityChangeRequest.CapabilityPair> getCapabilitiesToEnable();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.feature.CapabilityChangeRequest> CREATOR;
+  }
+
+  public static class CapabilityChangeRequest.CapabilityPair {
+    ctor public CapabilityChangeRequest.CapabilityPair(int, int);
+    method public int getCapability();
+    method public int getRadioTech();
+  }
+
+  public abstract class ImsFeature {
+    ctor public ImsFeature();
+    method public abstract void changeEnabledCapabilities(android.telephony.ims.feature.CapabilityChangeRequest, android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
+    method public int getFeatureState();
+    method public final int getSlotIndex();
+    method public abstract void onFeatureReady();
+    method public abstract void onFeatureRemoved();
+    method public final void setFeatureState(int);
+    field public static final int CAPABILITY_ERROR_GENERIC = -1; // 0xffffffff
+    field public static final int CAPABILITY_SUCCESS = 0; // 0x0
+    field public static final int FEATURE_EMERGENCY_MMTEL = 0; // 0x0
+    field public static final int FEATURE_MMTEL = 1; // 0x1
+    field public static final int FEATURE_RCS = 2; // 0x2
+    field public static final int STATE_INITIALIZING = 1; // 0x1
+    field public static final int STATE_READY = 2; // 0x2
+    field public static final int STATE_UNAVAILABLE = 0; // 0x0
+  }
+
+  @Deprecated public static class ImsFeature.Capabilities {
+    field @Deprecated protected int mCapabilities;
+  }
+
+  protected static class ImsFeature.CapabilityCallbackProxy {
+    method public void onChangeCapabilityConfigurationError(int, int, int);
+  }
+
+  public class MmTelFeature extends android.telephony.ims.feature.ImsFeature {
+    ctor public MmTelFeature();
+    method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
+    method public void changeOfferedRtpHeaderExtensionTypes(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtensionType>);
+    method @Nullable public android.telephony.ims.ImsCallProfile createCallProfile(int, int);
+    method @Nullable public android.telephony.ims.stub.ImsCallSessionImplBase createCallSession(@NonNull android.telephony.ims.ImsCallProfile);
+    method @NonNull public android.telephony.ims.stub.ImsEcbmImplBase getEcbm();
+    method @NonNull public android.telephony.ims.stub.ImsMultiEndpointImplBase getMultiEndpoint();
+    method @NonNull public android.telephony.ims.stub.ImsSmsImplBase getSmsImplementation();
+    method @NonNull public android.telephony.ims.stub.ImsUtImplBase getUt();
+    method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.MmTelFeature.MmTelCapabilities);
+    method public final void notifyIncomingCall(@NonNull android.telephony.ims.stub.ImsCallSessionImplBase, @NonNull android.os.Bundle);
+    method public final void notifyRejectedCall(@NonNull android.telephony.ims.ImsCallProfile, @NonNull android.telephony.ims.ImsReasonInfo);
+    method public final void notifyVoiceMessageCountUpdate(int);
+    method public void onFeatureReady();
+    method public void onFeatureRemoved();
+    method public boolean queryCapabilityConfiguration(int, int);
+    method @NonNull public final android.telephony.ims.feature.MmTelFeature.MmTelCapabilities queryCapabilityStatus();
+    method public void setUiTtyMode(int, @Nullable android.os.Message);
+    method public int shouldProcessCall(@NonNull String[]);
+    field public static final String EXTRA_IS_UNKNOWN_CALL = "android.telephony.ims.feature.extra.IS_UNKNOWN_CALL";
+    field public static final String EXTRA_IS_USSD = "android.telephony.ims.feature.extra.IS_USSD";
+    field public static final int PROCESS_CALL_CSFB = 1; // 0x1
+    field public static final int PROCESS_CALL_IMS = 0; // 0x0
+  }
+
+  public static class MmTelFeature.MmTelCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
+    ctor public MmTelFeature.MmTelCapabilities();
+    ctor @Deprecated public MmTelFeature.MmTelCapabilities(android.telephony.ims.feature.ImsFeature.Capabilities);
+    ctor public MmTelFeature.MmTelCapabilities(int);
+    method public final void addCapabilities(int);
+    method public final void removeCapabilities(int);
+  }
+
+  public class RcsFeature extends android.telephony.ims.feature.ImsFeature {
+    ctor @Deprecated public RcsFeature();
+    ctor public RcsFeature(@NonNull java.util.concurrent.Executor);
+    method public void changeEnabledCapabilities(@NonNull android.telephony.ims.feature.CapabilityChangeRequest, @NonNull android.telephony.ims.feature.ImsFeature.CapabilityCallbackProxy);
+    method @NonNull public android.telephony.ims.stub.RcsCapabilityExchangeImplBase createCapabilityExchangeImpl(@NonNull android.telephony.ims.stub.CapabilityExchangeEventListener);
+    method public void destroyCapabilityExchangeImpl(@NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase);
+    method public final void notifyCapabilitiesStatusChanged(@NonNull android.telephony.ims.feature.RcsFeature.RcsImsCapabilities);
+    method public void onFeatureReady();
+    method public void onFeatureRemoved();
+    method public boolean queryCapabilityConfiguration(int, int);
+    method @NonNull public final android.telephony.ims.feature.RcsFeature.RcsImsCapabilities queryCapabilityStatus();
+  }
+
+  public static class RcsFeature.RcsImsCapabilities extends android.telephony.ims.feature.ImsFeature.Capabilities {
+    ctor public RcsFeature.RcsImsCapabilities(int);
+    method public void addCapabilities(int);
+    method public boolean isCapable(int);
+    method public void removeCapabilities(int);
+    field public static final int CAPABILITY_TYPE_NONE = 0; // 0x0
+    field public static final int CAPABILITY_TYPE_OPTIONS_UCE = 1; // 0x1
+    field public static final int CAPABILITY_TYPE_PRESENCE_UCE = 2; // 0x2
+  }
+
+}
+
+package android.telephony.ims.stub {
+
+  public interface CapabilityExchangeEventListener {
+    method public void onRemoteCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.Set<java.lang.String>, @NonNull android.telephony.ims.stub.CapabilityExchangeEventListener.OptionsRequestCallback) throws android.telephony.ims.ImsException;
+    method public void onRequestPublishCapabilities(int) throws android.telephony.ims.ImsException;
+    method public void onUnpublish() throws android.telephony.ims.ImsException;
+  }
+
+  public static interface CapabilityExchangeEventListener.OptionsRequestCallback {
+    method public void onRespondToCapabilityRequest(@NonNull android.telephony.ims.RcsContactUceCapability, boolean);
+    method public void onRespondToCapabilityRequestWithError(@IntRange(from=100, to=699) int, @NonNull String);
+  }
+
+  public interface DelegateConnectionMessageCallback {
+    method public void onMessageReceived(@NonNull android.telephony.ims.SipMessage);
+    method public void onMessageSendFailure(@NonNull String, int);
+    method public void onMessageSent(@NonNull String);
+  }
+
+  public interface DelegateConnectionStateCallback {
+    method public void onConfigurationChanged(@NonNull android.telephony.ims.SipDelegateConfiguration);
+    method public void onCreated(@NonNull android.telephony.ims.SipDelegateConnection);
+    method public void onDestroyed(int);
+    method public void onFeatureTagStatusChanged(@NonNull android.telephony.ims.DelegateRegistrationState, @NonNull java.util.Set<android.telephony.ims.FeatureTagState>);
+  }
+
+  public class ImsCallSessionImplBase implements java.lang.AutoCloseable {
+    ctor public ImsCallSessionImplBase();
+    method public void accept(int, android.telephony.ims.ImsStreamMediaProfile);
+    method public void close();
+    method public void deflect(String);
+    method public void extendToConference(String[]);
+    method public String getCallId();
+    method public android.telephony.ims.ImsCallProfile getCallProfile();
+    method public android.telephony.ims.ImsVideoCallProvider getImsVideoCallProvider();
+    method public android.telephony.ims.ImsCallProfile getLocalCallProfile();
+    method public String getProperty(String);
+    method public android.telephony.ims.ImsCallProfile getRemoteCallProfile();
+    method public int getState();
+    method public void hold(android.telephony.ims.ImsStreamMediaProfile);
+    method public void inviteParticipants(String[]);
+    method public boolean isInCall();
+    method public boolean isMultiparty();
+    method public void merge();
+    method public void reject(int);
+    method public void removeParticipants(String[]);
+    method public void resume(android.telephony.ims.ImsStreamMediaProfile);
+    method public void sendDtmf(char, android.os.Message);
+    method public void sendRtpHeaderExtensions(@NonNull java.util.Set<android.telephony.ims.RtpHeaderExtension>);
+    method public void sendRttMessage(String);
+    method public void sendRttModifyRequest(android.telephony.ims.ImsCallProfile);
+    method public void sendRttModifyResponse(boolean);
+    method public void sendUssd(String);
+    method public void setListener(android.telephony.ims.ImsCallSessionListener);
+    method public void setMute(boolean);
+    method public void start(String, android.telephony.ims.ImsCallProfile);
+    method public void startConference(String[], android.telephony.ims.ImsCallProfile);
+    method public void startDtmf(char);
+    method public void stopDtmf();
+    method public void terminate(int);
+    method public void update(int, android.telephony.ims.ImsStreamMediaProfile);
+    field public static final int USSD_MODE_NOTIFY = 0; // 0x0
+    field public static final int USSD_MODE_REQUEST = 1; // 0x1
+  }
+
+  public static class ImsCallSessionImplBase.State {
+    method public static String toString(int);
+    field public static final int ESTABLISHED = 4; // 0x4
+    field public static final int ESTABLISHING = 3; // 0x3
+    field public static final int IDLE = 0; // 0x0
+    field public static final int INITIATED = 1; // 0x1
+    field public static final int INVALID = -1; // 0xffffffff
+    field public static final int NEGOTIATING = 2; // 0x2
+    field public static final int REESTABLISHING = 6; // 0x6
+    field public static final int RENEGOTIATING = 5; // 0x5
+    field public static final int TERMINATED = 8; // 0x8
+    field public static final int TERMINATING = 7; // 0x7
+  }
+
+  public class ImsConfigImplBase {
+    ctor public ImsConfigImplBase();
+    method public int getConfigInt(int);
+    method public String getConfigString(int);
+    method public final void notifyAutoConfigurationErrorReceived(int, @NonNull String);
+    method public final void notifyPreProvisioningReceived(@NonNull byte[]);
+    method public final void notifyProvisionedValueChanged(int, int);
+    method public final void notifyProvisionedValueChanged(int, String);
+    method public void notifyRcsAutoConfigurationReceived(@NonNull byte[], boolean);
+    method public void notifyRcsAutoConfigurationRemoved();
+    method public int setConfig(int, int);
+    method public int setConfig(int, String);
+    method public void setRcsClientConfiguration(@NonNull android.telephony.ims.RcsClientConfiguration);
+    method public void triggerAutoConfiguration();
+    field public static final int CONFIG_RESULT_FAILED = 1; // 0x1
+    field public static final int CONFIG_RESULT_SUCCESS = 0; // 0x0
+    field public static final int CONFIG_RESULT_UNKNOWN = -1; // 0xffffffff
+  }
+
+  public class ImsEcbmImplBase {
+    ctor public ImsEcbmImplBase();
+    method public final void enteredEcbm();
+    method public void exitEmergencyCallbackMode();
+    method public final void exitedEcbm();
+  }
+
+  public final class ImsFeatureConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.Set<android.telephony.ims.stub.ImsFeatureConfiguration.FeatureSlotPair> getServiceFeatures();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.stub.ImsFeatureConfiguration> CREATOR;
+  }
+
+  public static class ImsFeatureConfiguration.Builder {
+    ctor public ImsFeatureConfiguration.Builder();
+    method public android.telephony.ims.stub.ImsFeatureConfiguration.Builder addFeature(int, int);
+    method public android.telephony.ims.stub.ImsFeatureConfiguration build();
+  }
+
+  public static final class ImsFeatureConfiguration.FeatureSlotPair {
+    ctor public ImsFeatureConfiguration.FeatureSlotPair(int, int);
+    field public final int featureType;
+    field public final int slotId;
+  }
+
+  public class ImsMultiEndpointImplBase {
+    ctor public ImsMultiEndpointImplBase();
+    method public final void onImsExternalCallStateUpdate(java.util.List<android.telephony.ims.ImsExternalCallState>);
+    method public void requestImsExternalCallStateInfo();
+  }
+
+  public class ImsRegistrationImplBase {
+    ctor public ImsRegistrationImplBase();
+    method public final void onDeregistered(android.telephony.ims.ImsReasonInfo);
+    method public final void onRegistered(int);
+    method public final void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method public final void onRegistering(int);
+    method public final void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes);
+    method public final void onSubscriberAssociatedUriChanged(android.net.Uri[]);
+    method public final void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo);
+    method public void triggerFullNetworkRegistration(@IntRange(from=100, to=699) int, @Nullable String);
+    method public void triggerSipDelegateDeregistration();
+    method public void updateSipDelegateRegistration();
+    field public static final int REGISTRATION_TECH_CROSS_SIM = 2; // 0x2
+    field public static final int REGISTRATION_TECH_IWLAN = 1; // 0x1
+    field public static final int REGISTRATION_TECH_LTE = 0; // 0x0
+    field public static final int REGISTRATION_TECH_NONE = -1; // 0xffffffff
+    field public static final int REGISTRATION_TECH_NR = 3; // 0x3
+  }
+
+  public class ImsSmsImplBase {
+    ctor public ImsSmsImplBase();
+    method public void acknowledgeSms(int, @IntRange(from=0, to=65535) int, int);
+    method public void acknowledgeSmsReport(int, @IntRange(from=0, to=65535) int, int);
+    method public String getSmsFormat();
+    method public void onReady();
+    method @Deprecated public final void onSendSmsResult(int, @IntRange(from=0, to=65535) int, int, int) throws java.lang.RuntimeException;
+    method public final void onSendSmsResultError(int, @IntRange(from=0, to=65535) int, int, int, int) throws java.lang.RuntimeException;
+    method public final void onSendSmsResultSuccess(int, @IntRange(from=0, to=65535) int) throws java.lang.RuntimeException;
+    method public final void onSmsReceived(int, String, byte[]) throws java.lang.RuntimeException;
+    method @Deprecated public final void onSmsStatusReportReceived(int, @IntRange(from=0, to=65535) int, String, byte[]) throws java.lang.RuntimeException;
+    method public final void onSmsStatusReportReceived(int, String, byte[]) throws java.lang.RuntimeException;
+    method public void sendSms(int, @IntRange(from=0, to=65535) int, String, String, boolean, byte[]);
+    field public static final int DELIVER_STATUS_ERROR_GENERIC = 2; // 0x2
+    field public static final int DELIVER_STATUS_ERROR_NO_MEMORY = 3; // 0x3
+    field public static final int DELIVER_STATUS_ERROR_REQUEST_NOT_SUPPORTED = 4; // 0x4
+    field public static final int DELIVER_STATUS_OK = 1; // 0x1
+    field public static final int RESULT_NO_NETWORK_ERROR = -1; // 0xffffffff
+    field public static final int SEND_STATUS_ERROR = 2; // 0x2
+    field public static final int SEND_STATUS_ERROR_FALLBACK = 4; // 0x4
+    field public static final int SEND_STATUS_ERROR_RETRY = 3; // 0x3
+    field public static final int SEND_STATUS_OK = 1; // 0x1
+    field public static final int STATUS_REPORT_STATUS_ERROR = 2; // 0x2
+    field public static final int STATUS_REPORT_STATUS_OK = 1; // 0x1
+  }
+
+  public class ImsUtImplBase {
+    ctor public ImsUtImplBase();
+    method public void close();
+    method public int queryCallBarring(int);
+    method public int queryCallBarringForServiceClass(int, int);
+    method public int queryCallForward(int, String);
+    method public int queryCallWaiting();
+    method public int queryClip();
+    method public int queryClir();
+    method public int queryColp();
+    method public int queryColr();
+    method public void setListener(android.telephony.ims.ImsUtListener);
+    method public int transact(android.os.Bundle);
+    method public int updateCallBarring(int, int, String[]);
+    method public int updateCallBarringForServiceClass(int, int, String[], int);
+    method public int updateCallForward(int, int, String, int, int);
+    method public int updateCallWaiting(boolean, int);
+    method public int updateClip(boolean);
+    method public int updateClir(int);
+    method public int updateColp(boolean);
+    method public int updateColr(int);
+  }
+
+  public class RcsCapabilityExchangeImplBase {
+    ctor public RcsCapabilityExchangeImplBase();
+    method public void publishCapabilities(@NonNull String, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.PublishResponseCallback);
+    method public void sendOptionsCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.Set<java.lang.String>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.OptionsResponseCallback);
+    method public void subscribeForCapabilities(@NonNull java.util.Collection<android.net.Uri>, @NonNull android.telephony.ims.stub.RcsCapabilityExchangeImplBase.SubscribeResponseCallback);
+    field public static final int COMMAND_CODE_FETCH_ERROR = 3; // 0x3
+    field public static final int COMMAND_CODE_GENERIC_FAILURE = 1; // 0x1
+    field public static final int COMMAND_CODE_INSUFFICIENT_MEMORY = 5; // 0x5
+    field public static final int COMMAND_CODE_INVALID_PARAM = 2; // 0x2
+    field public static final int COMMAND_CODE_LOST_NETWORK_CONNECTION = 6; // 0x6
+    field public static final int COMMAND_CODE_NOT_FOUND = 8; // 0x8
+    field public static final int COMMAND_CODE_NOT_SUPPORTED = 7; // 0x7
+    field public static final int COMMAND_CODE_NO_CHANGE = 10; // 0xa
+    field public static final int COMMAND_CODE_REQUEST_TIMEOUT = 4; // 0x4
+    field public static final int COMMAND_CODE_SERVICE_UNAVAILABLE = 9; // 0x9
+    field public static final int COMMAND_CODE_SERVICE_UNKNOWN = 0; // 0x0
+  }
+
+  public static interface RcsCapabilityExchangeImplBase.OptionsResponseCallback {
+    method public void onCommandError(int) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(int, @NonNull String, @NonNull java.util.List<java.lang.String>) throws android.telephony.ims.ImsException;
+  }
+
+  public static interface RcsCapabilityExchangeImplBase.PublishResponseCallback {
+    method public void onCommandError(int) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String, @IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+  }
+
+  public static interface RcsCapabilityExchangeImplBase.SubscribeResponseCallback {
+    method public void onCommandError(int) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String, @IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
+    method public void onNotifyCapabilitiesUpdate(@NonNull java.util.List<java.lang.String>) throws android.telephony.ims.ImsException;
+    method public void onResourceTerminated(@NonNull java.util.List<android.util.Pair<android.net.Uri,java.lang.String>>) throws android.telephony.ims.ImsException;
+    method public void onTerminated(@NonNull String, long) throws android.telephony.ims.ImsException;
+  }
+
+  public interface SipDelegate {
+    method public void cleanupSession(@NonNull String);
+    method public void notifyMessageReceiveError(@NonNull String, int);
+    method public void notifyMessageReceived(@NonNull String);
+    method public void sendMessage(@NonNull android.telephony.ims.SipMessage, long);
+  }
+
+  public class SipTransportImplBase {
+    ctor public SipTransportImplBase(@NonNull java.util.concurrent.Executor);
+    method public void createSipDelegate(int, @NonNull android.telephony.ims.DelegateRequest, @NonNull android.telephony.ims.DelegateStateCallback, @NonNull android.telephony.ims.DelegateMessageCallback);
+    method public void destroySipDelegate(@NonNull android.telephony.ims.stub.SipDelegate, int);
+  }
+
+}
+
+package android.telephony.mbms {
+
+  public static class DownloadRequest.Builder {
+    method public android.telephony.mbms.DownloadRequest.Builder setServiceId(String);
+  }
+
+  public final class FileInfo implements android.os.Parcelable {
+    ctor public FileInfo(android.net.Uri, String);
+  }
+
+  public final class FileServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    ctor public FileServiceInfo(java.util.Map<java.util.Locale,java.lang.String>, String, java.util.List<java.util.Locale>, String, java.util.Date, java.util.Date, java.util.List<android.telephony.mbms.FileInfo>);
+  }
+
+  public class MbmsDownloadReceiver extends android.content.BroadcastReceiver {
+    field public static final int RESULT_APP_NOTIFICATION_ERROR = 6; // 0x6
+    field public static final int RESULT_BAD_TEMP_FILE_ROOT = 3; // 0x3
+    field public static final int RESULT_DOWNLOAD_FINALIZATION_ERROR = 4; // 0x4
+    field public static final int RESULT_INVALID_ACTION = 1; // 0x1
+    field public static final int RESULT_MALFORMED_INTENT = 2; // 0x2
+    field public static final int RESULT_OK = 0; // 0x0
+    field public static final int RESULT_TEMP_FILE_GENERATION_ERROR = 5; // 0x5
+  }
+
+  public final class StreamingServiceInfo extends android.telephony.mbms.ServiceInfo implements android.os.Parcelable {
+    ctor public StreamingServiceInfo(java.util.Map<java.util.Locale,java.lang.String>, String, java.util.List<java.util.Locale>, String, java.util.Date, java.util.Date);
+  }
+
+  public final class UriPathPair implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.net.Uri getContentUri();
+    method public android.net.Uri getFilePathUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.mbms.UriPathPair> CREATOR;
+  }
+
+}
+
+package android.telephony.mbms.vendor {
+
+  public class MbmsDownloadServiceBase extends android.os.Binder implements android.os.IInterface {
+    ctor public MbmsDownloadServiceBase();
+    method public int addProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+    method public int addServiceAnnouncement(int, @NonNull byte[]);
+    method public int addStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
+    method public android.os.IBinder asBinder();
+    method public int cancelDownload(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
+    method public void dispose(int) throws android.os.RemoteException;
+    method public int download(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
+    method public int initialize(int, android.telephony.mbms.MbmsDownloadSessionCallback) throws android.os.RemoteException;
+    method @NonNull public java.util.List<android.telephony.mbms.DownloadRequest> listPendingDownloads(int) throws android.os.RemoteException;
+    method public void onAppCallbackDied(int, int);
+    method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;
+    method public int removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener) throws android.os.RemoteException;
+    method public int removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener) throws android.os.RemoteException;
+    method public int requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo) throws android.os.RemoteException;
+    method public int requestUpdateFileServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
+    method public int resetDownloadKnowledge(android.telephony.mbms.DownloadRequest) throws android.os.RemoteException;
+    method public int setTempFileRootDirectory(int, String) throws android.os.RemoteException;
+  }
+
+  public class MbmsGroupCallServiceBase extends android.app.Service {
+    ctor public MbmsGroupCallServiceBase();
+    method public void dispose(int) throws android.os.RemoteException;
+    method public int initialize(@NonNull android.telephony.mbms.MbmsGroupCallSessionCallback, int) throws android.os.RemoteException;
+    method public void onAppCallbackDied(int, int);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public int startGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>, @NonNull android.telephony.mbms.GroupCallCallback);
+    method public void stopGroupCall(int, long);
+    method public void updateGroupCall(int, long, @NonNull java.util.List<java.lang.Integer>, @NonNull java.util.List<java.lang.Integer>);
+  }
+
+  public class MbmsStreamingServiceBase extends android.os.Binder implements android.os.IInterface {
+    ctor public MbmsStreamingServiceBase();
+    method public android.os.IBinder asBinder();
+    method public void dispose(int) throws android.os.RemoteException;
+    method @Nullable public android.net.Uri getPlaybackUri(int, String) throws android.os.RemoteException;
+    method public int initialize(android.telephony.mbms.MbmsStreamingSessionCallback, int) throws android.os.RemoteException;
+    method public void onAppCallbackDied(int, int);
+    method public boolean onTransact(int, android.os.Parcel, android.os.Parcel, int) throws android.os.RemoteException;
+    method public int requestUpdateStreamingServices(int, java.util.List<java.lang.String>) throws android.os.RemoteException;
+    method public int startStreaming(int, String, android.telephony.mbms.StreamingServiceCallback) throws android.os.RemoteException;
+    method public void stopStreaming(int, String) throws android.os.RemoteException;
+  }
+
+  public class VendorUtils {
+    ctor public VendorUtils();
+    method public static android.content.ComponentName getAppReceiverFromPackageName(android.content.Context, String);
+    field public static final String ACTION_CLEANUP = "android.telephony.mbms.action.CLEANUP";
+    field public static final String ACTION_DOWNLOAD_RESULT_INTERNAL = "android.telephony.mbms.action.DOWNLOAD_RESULT_INTERNAL";
+    field public static final String ACTION_FILE_DESCRIPTOR_REQUEST = "android.telephony.mbms.action.FILE_DESCRIPTOR_REQUEST";
+    field public static final String EXTRA_FD_COUNT = "android.telephony.mbms.extra.FD_COUNT";
+    field public static final String EXTRA_FINAL_URI = "android.telephony.mbms.extra.FINAL_URI";
+    field public static final String EXTRA_FREE_URI_LIST = "android.telephony.mbms.extra.FREE_URI_LIST";
+    field public static final String EXTRA_PAUSED_LIST = "android.telephony.mbms.extra.PAUSED_LIST";
+    field public static final String EXTRA_PAUSED_URI_LIST = "android.telephony.mbms.extra.PAUSED_URI_LIST";
+    field public static final String EXTRA_SERVICE_ID = "android.telephony.mbms.extra.SERVICE_ID";
+    field public static final String EXTRA_TEMP_FILES_IN_USE = "android.telephony.mbms.extra.TEMP_FILES_IN_USE";
+    field public static final String EXTRA_TEMP_FILE_ROOT = "android.telephony.mbms.extra.TEMP_FILE_ROOT";
+    field public static final String EXTRA_TEMP_LIST = "android.telephony.mbms.extra.TEMP_LIST";
+  }
+
+}
+
+package android.text {
+
+  public final class FontConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Alias> getAliases();
+    method @IntRange(from=0) public int getConfigVersion();
+    method @NonNull public java.util.List<android.text.FontConfig.FontFamily> getFontFamilies();
+    method public long getLastModifiedTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig> CREATOR;
+  }
+
+  public static final class FontConfig.Alias implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getName();
+    method @NonNull public String getOriginal();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Alias> CREATOR;
+  }
+
+  public static final class FontConfig.Font implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.io.File getFile();
+    method @Nullable public String getFontFamilyName();
+    method @NonNull public String getFontVariationSettings();
+    method @NonNull public String getPostScriptName();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+    method public int getTtcIndex();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Font> CREATOR;
+  }
+
+  public static final class FontConfig.FontFamily implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Font> getFontList();
+    method @NonNull public android.os.LocaleList getLocaleList();
+    method @Nullable public String getName();
+    method public int getVariant();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.FontFamily> CREATOR;
+    field public static final int VARIANT_COMPACT = 1; // 0x1
+    field public static final int VARIANT_DEFAULT = 0; // 0x0
+    field public static final int VARIANT_ELEGANT = 2; // 0x2
+  }
+
+}
+
+package android.util {
+
+  public class EventLog {
+    method public static void readEventsOnWrapping(int[], long, java.util.Collection<android.util.EventLog.Event>) throws java.io.IOException;
+  }
+
+  public static final class EventLog.Event {
+    method public int getUid();
+  }
+
+  public final class StatsEvent {
+    method @NonNull public static android.util.StatsEvent.Builder newBuilder();
+  }
+
+  public static final class StatsEvent.Builder {
+    method @NonNull public android.util.StatsEvent.Builder addBooleanAnnotation(byte, boolean);
+    method @NonNull public android.util.StatsEvent.Builder addIntAnnotation(byte, int);
+    method @NonNull public android.util.StatsEvent build();
+    method @NonNull public android.util.StatsEvent.Builder setAtomId(int);
+    method @NonNull public android.util.StatsEvent.Builder usePooledBuffer();
+    method @NonNull public android.util.StatsEvent.Builder writeAttributionChain(@NonNull int[], @NonNull String[]);
+    method @NonNull public android.util.StatsEvent.Builder writeBoolean(boolean);
+    method @NonNull public android.util.StatsEvent.Builder writeByteArray(@NonNull byte[]);
+    method @NonNull public android.util.StatsEvent.Builder writeFloat(float);
+    method @NonNull public android.util.StatsEvent.Builder writeInt(int);
+    method @NonNull public android.util.StatsEvent.Builder writeKeyValuePairs(@Nullable android.util.SparseIntArray, @Nullable android.util.SparseLongArray, @Nullable android.util.SparseArray<java.lang.String>, @Nullable android.util.SparseArray<java.lang.Float>);
+    method @NonNull public android.util.StatsEvent.Builder writeLong(long);
+    method @NonNull public android.util.StatsEvent.Builder writeString(@NonNull String);
+  }
+
+  public final class StatsLog {
+    method public static void write(@NonNull android.util.StatsEvent);
+    method @Deprecated public static void writeRaw(@NonNull byte[], int);
+    field public static final byte ANNOTATION_ID_DEFAULT_STATE = 6; // 0x6
+    field public static final byte ANNOTATION_ID_EXCLUSIVE_STATE = 4; // 0x4
+    field public static final byte ANNOTATION_ID_IS_UID = 1; // 0x1
+    field public static final byte ANNOTATION_ID_PRIMARY_FIELD = 3; // 0x3
+    field public static final byte ANNOTATION_ID_PRIMARY_FIELD_FIRST_UID = 5; // 0x5
+    field public static final byte ANNOTATION_ID_STATE_NESTED = 8; // 0x8
+    field public static final byte ANNOTATION_ID_TRIGGER_STATE_RESET = 7; // 0x7
+    field public static final byte ANNOTATION_ID_TRUNCATE_TIMESTAMP = 2; // 0x2
+  }
+
+}
+
+package android.uwb {
+
+  public final class AngleMeasurement implements android.os.Parcelable {
+    ctor public AngleMeasurement(@FloatRange(from=-3.141592653589793, to=3.141592653589793) double, @FloatRange(from=0.0, to=3.141592653589793) double, @FloatRange(from=0.0, to=1.0) double);
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public double getConfidenceLevel();
+    method @FloatRange(from=0.0, to=3.141592653589793) public double getErrorRadians();
+    method @FloatRange(from=-3.141592653589793, to=3.141592653589793) public double getRadians();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.AngleMeasurement> CREATOR;
+  }
+
+  public final class AngleOfArrivalMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.uwb.AngleMeasurement getAltitude();
+    method @NonNull public android.uwb.AngleMeasurement getAzimuth();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.AngleOfArrivalMeasurement> CREATOR;
+  }
+
+  public static final class AngleOfArrivalMeasurement.Builder {
+    ctor public AngleOfArrivalMeasurement.Builder(@NonNull android.uwb.AngleMeasurement);
+    method @NonNull public android.uwb.AngleOfArrivalMeasurement build();
+    method @NonNull public android.uwb.AngleOfArrivalMeasurement.Builder setAltitude(@NonNull android.uwb.AngleMeasurement);
+  }
+
+  public final class DistanceMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method @FloatRange(from=0.0, to=1.0) public double getConfidenceLevel();
+    method @FloatRange(from=0.0) public double getErrorMeters();
+    method public double getMeters();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.DistanceMeasurement> CREATOR;
+  }
+
+  public static final class DistanceMeasurement.Builder {
+    ctor public DistanceMeasurement.Builder();
+    method @NonNull public android.uwb.DistanceMeasurement build();
+    method @NonNull public android.uwb.DistanceMeasurement.Builder setConfidenceLevel(@FloatRange(from=0.0, to=1.0) double);
+    method @NonNull public android.uwb.DistanceMeasurement.Builder setErrorMeters(@FloatRange(from=0.0) double);
+    method @NonNull public android.uwb.DistanceMeasurement.Builder setMeters(double);
+  }
+
+  public final class RangingMeasurement implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.uwb.AngleOfArrivalMeasurement getAngleOfArrivalMeasurement();
+    method @Nullable public android.uwb.DistanceMeasurement getDistanceMeasurement();
+    method public long getElapsedRealtimeNanos();
+    method @NonNull public android.uwb.UwbAddress getRemoteDeviceAddress();
+    method public int getStatus();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.RangingMeasurement> CREATOR;
+    field public static final int RANGING_STATUS_FAILURE_OUT_OF_RANGE = 1; // 0x1
+    field public static final int RANGING_STATUS_FAILURE_UNKNOWN_ERROR = -1; // 0xffffffff
+    field public static final int RANGING_STATUS_SUCCESS = 0; // 0x0
+  }
+
+  public static final class RangingMeasurement.Builder {
+    ctor public RangingMeasurement.Builder();
+    method @NonNull public android.uwb.RangingMeasurement build();
+    method @NonNull public android.uwb.RangingMeasurement.Builder setAngleOfArrivalMeasurement(@NonNull android.uwb.AngleOfArrivalMeasurement);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setDistanceMeasurement(@NonNull android.uwb.DistanceMeasurement);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setElapsedRealtimeNanos(long);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setRemoteDeviceAddress(@NonNull android.uwb.UwbAddress);
+    method @NonNull public android.uwb.RangingMeasurement.Builder setStatus(int);
+  }
+
+  public final class RangingReport implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.uwb.RangingMeasurement> getMeasurements();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.RangingReport> CREATOR;
+  }
+
+  public static final class RangingReport.Builder {
+    ctor public RangingReport.Builder();
+    method @NonNull public android.uwb.RangingReport.Builder addMeasurement(@NonNull android.uwb.RangingMeasurement);
+    method @NonNull public android.uwb.RangingReport.Builder addMeasurements(@NonNull java.util.List<android.uwb.RangingMeasurement>);
+    method @NonNull public android.uwb.RangingReport build();
+  }
+
+  public final class RangingSession implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void close();
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void reconfigure(@NonNull android.os.PersistableBundle);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void start(@NonNull android.os.PersistableBundle);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void stop();
+  }
+
+  public static interface RangingSession.Callback {
+    method public void onClosed(int, @NonNull android.os.PersistableBundle);
+    method public void onOpenFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onOpened(@NonNull android.uwb.RangingSession);
+    method public void onReconfigureFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onReconfigured(@NonNull android.os.PersistableBundle);
+    method public void onReportReceived(@NonNull android.uwb.RangingReport);
+    method public void onStartFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onStarted(@NonNull android.os.PersistableBundle);
+    method public void onStopFailed(int, @NonNull android.os.PersistableBundle);
+    method public void onStopped(int, @NonNull android.os.PersistableBundle);
+    field public static final int REASON_BAD_PARAMETERS = 3; // 0x3
+    field public static final int REASON_GENERIC_ERROR = 4; // 0x4
+    field public static final int REASON_LOCAL_REQUEST = 1; // 0x1
+    field public static final int REASON_MAX_SESSIONS_REACHED = 5; // 0x5
+    field public static final int REASON_PROTOCOL_SPECIFIC_ERROR = 7; // 0x7
+    field public static final int REASON_REMOTE_REQUEST = 2; // 0x2
+    field public static final int REASON_SYSTEM_POLICY = 6; // 0x6
+    field public static final int REASON_UNKNOWN = 0; // 0x0
+  }
+
+  public final class UwbAddress implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.uwb.UwbAddress fromBytes(@NonNull byte[]);
+    method public int size();
+    method @NonNull public byte[] toBytes();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.uwb.UwbAddress> CREATOR;
+    field public static final int EXTENDED_ADDRESS_BYTE_LENGTH = 8; // 0x8
+    field public static final int SHORT_ADDRESS_BYTE_LENGTH = 2; // 0x2
+  }
+
+  public final class UwbManager {
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public long elapsedRealtimeResolutionNanos();
+    method @NonNull @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public android.os.PersistableBundle getSpecificationInfo();
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.UWB_PRIVILEGED, android.Manifest.permission.UWB_RANGING}) public android.os.CancellationSignal openRangingSession(@NonNull android.os.PersistableBundle, @NonNull java.util.concurrent.Executor, @NonNull android.uwb.RangingSession.Callback);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void registerAdapterStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.uwb.UwbManager.AdapterStateCallback);
+    method @RequiresPermission(android.Manifest.permission.UWB_PRIVILEGED) public void unregisterAdapterStateCallback(@NonNull android.uwb.UwbManager.AdapterStateCallback);
+  }
+
+  public static interface UwbManager.AdapterStateCallback {
+    method public void onStateChanged(int, int);
+    field public static final int STATE_CHANGED_REASON_ALL_SESSIONS_CLOSED = 1; // 0x1
+    field public static final int STATE_CHANGED_REASON_ERROR_UNKNOWN = 4; // 0x4
+    field public static final int STATE_CHANGED_REASON_SESSION_STARTED = 0; // 0x0
+    field public static final int STATE_CHANGED_REASON_SYSTEM_BOOT = 3; // 0x3
+    field public static final int STATE_CHANGED_REASON_SYSTEM_POLICY = 2; // 0x2
+    field public static final int STATE_DISABLED = 0; // 0x0
+    field public static final int STATE_ENABLED_ACTIVE = 2; // 0x2
+    field public static final int STATE_ENABLED_INACTIVE = 1; // 0x1
+  }
+
+}
+
+package android.view {
+
+  public abstract class Window {
+    method public void addSystemFlags(@android.view.WindowManager.LayoutParams.SystemFlags int);
+  }
+
+  public interface WindowManager extends android.view.ViewManager {
+    method @RequiresPermission(android.Manifest.permission.RESTRICTED_VR_ACCESS) public android.graphics.Region getCurrentImeTouchRegion();
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    method public final long getUserActivityTimeout();
+    method public boolean isSystemApplicationOverlay();
+    method @RequiresPermission(android.Manifest.permission.SYSTEM_APPLICATION_OVERLAY) public void setSystemApplicationOverlay(boolean);
+    method public final void setUserActivityTimeout(long);
+    field @RequiresPermission(android.Manifest.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS) public static final int SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS = 524288; // 0x80000
+    field @RequiresPermission(android.Manifest.permission.INTERNAL_SYSTEM_WINDOW) public static final int SYSTEM_FLAG_SHOW_FOR_ALL_USERS = 16; // 0x10
+  }
+
+  @IntDef(flag=true, prefix={"SYSTEM_FLAG_"}, value={android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS, android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface WindowManager.LayoutParams.SystemFlags {
+  }
+
+}
+
+package android.view.accessibility {
+
+  public final class AccessibilityManager {
+    method public int getAccessibilityWindowId(@Nullable android.os.IBinder);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void performAccessibilityShortcut();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void registerSystemAction(@NonNull android.app.RemoteAction, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public void unregisterSystemAction(int);
+  }
+
+}
+
+package android.view.autofill {
+
+  public final class AutofillManager {
+    method public void setAugmentedAutofillWhitelist(@Nullable java.util.Set<java.lang.String>, @Nullable java.util.Set<android.content.ComponentName>);
+  }
+
+}
+
+package android.view.contentcapture {
+
+  public final class ContentCaptureContext implements android.os.Parcelable {
+    method @Nullable public android.content.ComponentName getActivityComponent();
+    method @Nullable public android.app.assist.ActivityId getActivityId();
+    method public int getDisplayId();
+    method public int getFlags();
+    method @Nullable public android.view.contentcapture.ContentCaptureSessionId getParentSessionId();
+    method public int getTaskId();
+    method @Nullable public android.os.IBinder getWindowToken();
+    field public static final int FLAG_DISABLED_BY_APP = 1; // 0x1
+    field public static final int FLAG_DISABLED_BY_FLAG_SECURE = 2; // 0x2
+    field public static final int FLAG_RECONNECTED = 4; // 0x4
+  }
+
+  public final class ContentCaptureEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.graphics.Rect getBounds();
+    method @Nullable public android.view.contentcapture.ContentCaptureContext getContentCaptureContext();
+    method public long getEventTime();
+    method @Nullable public android.view.autofill.AutofillId getId();
+    method @Nullable public java.util.List<android.view.autofill.AutofillId> getIds();
+    method @Nullable public android.graphics.Insets getInsets();
+    method @Nullable public CharSequence getText();
+    method public int getType();
+    method @Nullable public android.view.contentcapture.ViewNode getViewNode();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.contentcapture.ContentCaptureEvent> CREATOR;
+    field public static final int TYPE_CONTEXT_UPDATED = 6; // 0x6
+    field public static final int TYPE_SESSION_PAUSED = 8; // 0x8
+    field public static final int TYPE_SESSION_RESUMED = 7; // 0x7
+    field public static final int TYPE_VIEW_APPEARED = 1; // 0x1
+    field public static final int TYPE_VIEW_DISAPPEARED = 2; // 0x2
+    field public static final int TYPE_VIEW_INSETS_CHANGED = 9; // 0x9
+    field public static final int TYPE_VIEW_TEXT_CHANGED = 3; // 0x3
+    field public static final int TYPE_VIEW_TREE_APPEARED = 5; // 0x5
+    field public static final int TYPE_VIEW_TREE_APPEARING = 4; // 0x4
+    field public static final int TYPE_WINDOW_BOUNDS_CHANGED = 10; // 0xa
+  }
+
+  public final class ContentCaptureManager {
+    method public boolean isContentCaptureFeatureEnabled();
+    field public static final int NO_SESSION_ID = 0; // 0x0
+  }
+
+  public final class ViewNode extends android.app.assist.AssistStructure.ViewNode {
+    method @Nullable public android.view.autofill.AutofillId getParentAutofillId();
+  }
+
+}
+
+package android.view.displayhash {
+
+  public final class DisplayHash implements android.os.Parcelable {
+    ctor public DisplayHash(long, @NonNull android.graphics.Rect, @NonNull String, @NonNull byte[], @NonNull byte[]);
+    method public int describeContents();
+    method @NonNull public android.graphics.Rect getBoundsInWindow();
+    method @NonNull public String getHashAlgorithm();
+    method @NonNull public byte[] getHmac();
+    method @NonNull public byte[] getImageHash();
+    method public long getTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+  }
+
+}
+
+package android.view.translation {
+
+  public final class TranslationCapability implements android.os.Parcelable {
+    ctor public TranslationCapability(int, @NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec, boolean, int);
+  }
+
+  public final class UiTranslationManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void finishTranslation(@NonNull android.app.assist.ActivityId);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void pauseTranslation(@NonNull android.app.assist.ActivityId);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void resumeTranslation(@NonNull android.app.assist.ActivityId);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void startTranslation(@NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec, @NonNull java.util.List<android.view.autofill.AutofillId>, @NonNull android.app.assist.ActivityId, @NonNull android.view.translation.UiTranslationSpec);
+  }
+
+  public final class UiTranslationSpec implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean shouldPadContentForCompat();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.view.translation.UiTranslationSpec> CREATOR;
+  }
+
+  public static final class UiTranslationSpec.Builder {
+    ctor public UiTranslationSpec.Builder();
+    method @NonNull public android.view.translation.UiTranslationSpec build();
+    method @NonNull public android.view.translation.UiTranslationSpec.Builder setShouldPadContentForCompat(boolean);
+  }
+
+}
+
+package android.webkit {
+
+  public abstract class CookieManager {
+    method protected abstract boolean allowFileSchemeCookiesImpl();
+    method public abstract String getCookie(String, boolean);
+    method public String getCookie(android.net.WebAddress);
+    method public abstract boolean hasCookies(boolean);
+    method protected abstract void setAcceptFileSchemeCookiesImpl(boolean);
+  }
+
+  public class FindActionModeCallback implements android.view.ActionMode.Callback android.text.TextWatcher android.view.View.OnClickListener android.webkit.WebView.FindListener {
+    ctor public FindActionModeCallback(android.content.Context);
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void findAll();
+    method public void finish();
+    method public int getActionModeGlobalBottom();
+    method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem);
+    method public void onClick(android.view.View);
+    method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onDestroyActionMode(android.view.ActionMode);
+    method public void onFindResultReceived(int, int, boolean);
+    method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onTextChanged(CharSequence, int, int, int);
+    method public void setText(String);
+    method public void setWebView(@NonNull android.webkit.WebView);
+    method public void showSoftInput();
+    method public void updateMatchCount(int, int, boolean);
+  }
+
+  public static class FindActionModeCallback.NoAction implements android.view.ActionMode.Callback {
+    ctor public FindActionModeCallback.NoAction();
+    method public boolean onActionItemClicked(android.view.ActionMode, android.view.MenuItem);
+    method public boolean onCreateActionMode(android.view.ActionMode, android.view.Menu);
+    method public void onDestroyActionMode(android.view.ActionMode);
+    method public boolean onPrepareActionMode(android.view.ActionMode, android.view.Menu);
+  }
+
+  public class GeolocationPermissions {
+    ctor public GeolocationPermissions();
+  }
+
+  public class HttpAuthHandler extends android.os.Handler {
+    ctor public HttpAuthHandler();
+  }
+
+  public class JsDialogHelper {
+    ctor public JsDialogHelper(android.webkit.JsPromptResult, int, String, String, String);
+    ctor public JsDialogHelper(android.webkit.JsPromptResult, android.os.Message);
+    method public boolean invokeCallback(android.webkit.WebChromeClient, android.webkit.WebView);
+    method public void showDialog(android.content.Context);
+    field public static final int ALERT = 1; // 0x1
+    field public static final int CONFIRM = 2; // 0x2
+    field public static final int PROMPT = 3; // 0x3
+    field public static final int UNLOAD = 4; // 0x4
+  }
+
+  public class JsPromptResult extends android.webkit.JsResult {
+    ctor public JsPromptResult(android.webkit.JsResult.ResultReceiver);
+    method public String getStringResult();
+  }
+
+  public class JsResult {
+    ctor public JsResult(android.webkit.JsResult.ResultReceiver);
+    method public final boolean getResult();
+  }
+
+  public static interface JsResult.ResultReceiver {
+    method public void onJsResultComplete(android.webkit.JsResult);
+  }
+
+  public interface PacProcessor {
+    method @NonNull public static android.webkit.PacProcessor createInstance();
+    method @Nullable public String findProxyForUrl(@NonNull String);
+    method @NonNull public static android.webkit.PacProcessor getInstance();
+    method @Nullable public default android.net.Network getNetwork();
+    method public default void release();
+    method public default void setNetwork(@Nullable android.net.Network);
+    method public boolean setProxyScript(@NonNull String);
+  }
+
+  public class SslErrorHandler extends android.os.Handler {
+    ctor public SslErrorHandler();
+  }
+
+  @Deprecated public abstract class TokenBindingService {
+    ctor @Deprecated public TokenBindingService();
+  }
+
+  public class WebChromeClient {
+    method @Deprecated public void openFileChooser(android.webkit.ValueCallback<android.net.Uri>, String, String);
+  }
+
+  public abstract class WebHistoryItem implements java.lang.Cloneable {
+    method @Deprecated public abstract int getId();
+  }
+
+  @Deprecated public abstract class WebIconDatabase {
+    method @Deprecated public abstract void bulkRequestIconForPageUrl(android.content.ContentResolver, String, android.webkit.WebIconDatabase.IconListener);
+  }
+
+  public abstract class WebMessagePort {
+    ctor public WebMessagePort();
+  }
+
+  public abstract class WebResourceError {
+    ctor public WebResourceError();
+  }
+
+  public class WebResourceResponse {
+    ctor public WebResourceResponse(boolean, String, String, int, String, java.util.Map<java.lang.String,java.lang.String>, java.io.InputStream);
+  }
+
+  public abstract class WebSettings {
+    method public abstract boolean getAcceptThirdPartyCookies();
+    method @Deprecated public abstract boolean getNavDump();
+    method @Deprecated public abstract boolean getPluginsEnabled();
+    method @Deprecated public abstract boolean getUseWebViewBackgroundForOverscrollBackground();
+    method @Deprecated public abstract int getUserAgent();
+    method public abstract boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled();
+    method public abstract void setAcceptThirdPartyCookies(boolean);
+    method @Deprecated public abstract void setNavDump(boolean);
+    method @Deprecated public abstract void setPluginsEnabled(boolean);
+    method @Deprecated public abstract void setUseWebViewBackgroundForOverscrollBackground(boolean);
+    method @Deprecated public abstract void setUserAgent(int);
+    method public abstract void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean);
+  }
+
+  public class WebStorage {
+    ctor public WebStorage();
+  }
+
+  public static class WebStorage.Origin {
+    ctor protected WebStorage.Origin(String, long, long);
+  }
+
+  public class WebView extends android.widget.AbsoluteLayout implements android.view.ViewGroup.OnHierarchyChangeListener android.view.ViewTreeObserver.OnGlobalFocusChangeListener {
+    method public android.webkit.WebViewProvider getWebViewProvider();
+  }
+
+  public static class WebView.HitTestResult {
+    ctor public WebView.HitTestResult();
+    method public void setExtra(String);
+    method public void setType(int);
+  }
+
+  public class WebView.PrivateAccess {
+    ctor public WebView.PrivateAccess();
+    method public void awakenScrollBars(int);
+    method public void awakenScrollBars(int, boolean);
+    method public float getHorizontalScrollFactor();
+    method public int getHorizontalScrollbarHeight();
+    method public float getVerticalScrollFactor();
+    method public void onScrollChanged(int, int, int, int);
+    method public void overScrollBy(int, int, int, int, int, int, int, int, boolean);
+    method public void setMeasuredDimension(int, int);
+    method public void setScrollXRaw(int);
+    method public void setScrollYRaw(int);
+    method public void super_computeScroll();
+    method public boolean super_dispatchKeyEvent(android.view.KeyEvent);
+    method public int super_getScrollBarStyle();
+    method @Nullable public android.view.WindowInsets super_onApplyWindowInsets(@Nullable android.view.WindowInsets);
+    method public void super_onDrawVerticalScrollBar(android.graphics.Canvas, android.graphics.drawable.Drawable, int, int, int, int);
+    method public boolean super_onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean super_onHoverEvent(android.view.MotionEvent);
+    method public boolean super_performAccessibilityAction(int, android.os.Bundle);
+    method public boolean super_performLongClick();
+    method public boolean super_requestFocus(int, android.graphics.Rect);
+    method public void super_scrollTo(int, int);
+    method public boolean super_setFrame(int, int, int, int);
+    method public void super_setLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void super_startActivityForResult(android.content.Intent, int);
+  }
+
+  public final class WebViewDelegate {
+    method public void addWebViewAssetPath(android.content.Context);
+    method @Deprecated public void callDrawGlFunction(android.graphics.Canvas, long);
+    method @Deprecated public void callDrawGlFunction(@NonNull android.graphics.Canvas, long, @Nullable Runnable);
+    method @Deprecated public boolean canInvokeDrawGlFunctor(android.view.View);
+    method @Deprecated public void detachDrawGlFunctor(android.view.View, long);
+    method public void drawWebViewFunctor(@NonNull android.graphics.Canvas, int);
+    method public android.app.Application getApplication();
+    method public String getDataDirectorySuffix();
+    method public String getErrorString(android.content.Context, int);
+    method public int getPackageId(android.content.res.Resources, String);
+    method @NonNull public android.webkit.WebViewFactory.StartupTimestamps getStartupTimestamps();
+    method @Deprecated public void invokeDrawGlFunctor(android.view.View, long, boolean);
+    method public boolean isMultiProcessEnabled();
+    method public boolean isTraceTagEnabled();
+    method public void setOnTraceEnabledChangeListener(android.webkit.WebViewDelegate.OnTraceEnabledChangeListener);
+  }
+
+  public static interface WebViewDelegate.OnTraceEnabledChangeListener {
+    method public void onTraceEnabledChange(boolean);
+  }
+
+  public final class WebViewFactory {
+    ctor public WebViewFactory();
+    method public static android.content.pm.PackageInfo getLoadedPackageInfo();
+    method public static int loadWebViewNativeLibraryFromPackage(String, ClassLoader);
+    method public static void prepareWebViewInZygote();
+    field public static final int LIBLOAD_ADDRESS_SPACE_NOT_RESERVED = 2; // 0x2
+    field public static final int LIBLOAD_FAILED_JNI_CALL = 7; // 0x7
+    field public static final int LIBLOAD_FAILED_LISTING_WEBVIEW_PACKAGES = 4; // 0x4
+    field public static final int LIBLOAD_FAILED_TO_FIND_NAMESPACE = 10; // 0xa
+    field public static final int LIBLOAD_FAILED_TO_LOAD_LIBRARY = 6; // 0x6
+    field public static final int LIBLOAD_FAILED_TO_OPEN_RELRO_FILE = 5; // 0x5
+    field public static final int LIBLOAD_FAILED_WAITING_FOR_RELRO = 3; // 0x3
+    field public static final int LIBLOAD_FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN = 8; // 0x8
+    field public static final int LIBLOAD_SUCCESS = 0; // 0x0
+    field public static final int LIBLOAD_WRONG_PACKAGE_NAME = 1; // 0x1
+  }
+
+  public static class WebViewFactory.StartupTimestamps {
+    method public long getAddAssetsEnd();
+    method public long getAddAssetsStart();
+    method public long getCreateContextEnd();
+    method public long getCreateContextStart();
+    method public long getGetClassLoaderEnd();
+    method public long getGetClassLoaderStart();
+    method public long getNativeLoadEnd();
+    method public long getNativeLoadStart();
+    method public long getProviderClassForNameEnd();
+    method public long getProviderClassForNameStart();
+    method public long getWebViewLoadStart();
+  }
+
+  public interface WebViewFactoryProvider {
+    method @NonNull public default android.webkit.PacProcessor createPacProcessor();
+    method public android.webkit.WebViewProvider createWebView(android.webkit.WebView, android.webkit.WebView.PrivateAccess);
+    method public android.webkit.CookieManager getCookieManager();
+    method public android.webkit.GeolocationPermissions getGeolocationPermissions();
+    method @NonNull public default android.webkit.PacProcessor getPacProcessor();
+    method public android.webkit.ServiceWorkerController getServiceWorkerController();
+    method public android.webkit.WebViewFactoryProvider.Statics getStatics();
+    method @Deprecated public android.webkit.TokenBindingService getTokenBindingService();
+    method public android.webkit.TracingController getTracingController();
+    method public android.webkit.WebIconDatabase getWebIconDatabase();
+    method public android.webkit.WebStorage getWebStorage();
+    method public ClassLoader getWebViewClassLoader();
+    method public android.webkit.WebViewDatabase getWebViewDatabase(android.content.Context);
+  }
+
+  public static interface WebViewFactoryProvider.Statics {
+    method public void clearClientCertPreferences(Runnable);
+    method public void enableSlowWholeDocumentDraw();
+    method public String findAddress(String);
+    method public void freeMemoryForTests();
+    method public String getDefaultUserAgent(android.content.Context);
+    method @NonNull public android.net.Uri getSafeBrowsingPrivacyPolicyUrl();
+    method public void initSafeBrowsing(android.content.Context, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public android.net.Uri[] parseFileChooserResult(int, android.content.Intent);
+    method public void setSafeBrowsingWhitelist(java.util.List<java.lang.String>, android.webkit.ValueCallback<java.lang.Boolean>);
+    method public void setWebContentsDebuggingEnabled(boolean);
+  }
+
+  public interface WebViewProvider {
+    method public void addJavascriptInterface(Object, String);
+    method public boolean canGoBack();
+    method public boolean canGoBackOrForward(int);
+    method public boolean canGoForward();
+    method public boolean canZoomIn();
+    method public boolean canZoomOut();
+    method public android.graphics.Picture capturePicture();
+    method public void clearCache(boolean);
+    method public void clearFormData();
+    method public void clearHistory();
+    method public void clearMatches();
+    method public void clearSslPreferences();
+    method public void clearView();
+    method public android.webkit.WebBackForwardList copyBackForwardList();
+    method public android.print.PrintDocumentAdapter createPrintDocumentAdapter(String);
+    method public android.webkit.WebMessagePort[] createWebMessageChannel();
+    method public void destroy();
+    method public void documentHasImages(android.os.Message);
+    method public void dumpViewHierarchyWithProperties(java.io.BufferedWriter, int);
+    method public void evaluateJavaScript(String, android.webkit.ValueCallback<java.lang.String>);
+    method public int findAll(String);
+    method public void findAllAsync(String);
+    method public android.view.View findHierarchyView(String, int);
+    method public void findNext(boolean);
+    method public void flingScroll(int, int);
+    method public void freeMemory();
+    method public android.net.http.SslCertificate getCertificate();
+    method public int getContentHeight();
+    method public int getContentWidth();
+    method public android.graphics.Bitmap getFavicon();
+    method public android.webkit.WebView.HitTestResult getHitTestResult();
+    method public String[] getHttpAuthUsernamePassword(String, String);
+    method public String getOriginalUrl();
+    method public int getProgress();
+    method public boolean getRendererPriorityWaivedWhenNotVisible();
+    method public int getRendererRequestedPriority();
+    method public float getScale();
+    method public android.webkit.WebViewProvider.ScrollDelegate getScrollDelegate();
+    method public android.webkit.WebSettings getSettings();
+    method @NonNull public default android.view.textclassifier.TextClassifier getTextClassifier();
+    method public String getTitle();
+    method public String getTouchIconUrl();
+    method public String getUrl();
+    method public android.webkit.WebViewProvider.ViewDelegate getViewDelegate();
+    method public int getVisibleTitleHeight();
+    method public android.webkit.WebChromeClient getWebChromeClient();
+    method public android.webkit.WebViewClient getWebViewClient();
+    method @Nullable public android.webkit.WebViewRenderProcess getWebViewRenderProcess();
+    method @Nullable public android.webkit.WebViewRenderProcessClient getWebViewRenderProcessClient();
+    method public android.view.View getZoomControls();
+    method public void goBack();
+    method public void goBackOrForward(int);
+    method public void goForward();
+    method public void init(java.util.Map<java.lang.String,java.lang.Object>, boolean);
+    method public void insertVisualStateCallback(long, android.webkit.WebView.VisualStateCallback);
+    method public void invokeZoomPicker();
+    method public boolean isPaused();
+    method public boolean isPrivateBrowsingEnabled();
+    method public void loadData(String, String, String);
+    method public void loadDataWithBaseURL(String, String, String, String, String);
+    method public void loadUrl(String, java.util.Map<java.lang.String,java.lang.String>);
+    method public void loadUrl(String);
+    method public void notifyFindDialogDismissed();
+    method public void onPause();
+    method public void onResume();
+    method public boolean overlayHorizontalScrollbar();
+    method public boolean overlayVerticalScrollbar();
+    method public boolean pageDown(boolean);
+    method public boolean pageUp(boolean);
+    method public void pauseTimers();
+    method public void postMessageToMainFrame(android.webkit.WebMessage, android.net.Uri);
+    method public void postUrl(String, byte[]);
+    method public void reload();
+    method public void removeJavascriptInterface(String);
+    method public void requestFocusNodeHref(android.os.Message);
+    method public void requestImageRef(android.os.Message);
+    method public boolean restorePicture(android.os.Bundle, java.io.File);
+    method public android.webkit.WebBackForwardList restoreState(android.os.Bundle);
+    method public void resumeTimers();
+    method public void savePassword(String, String, String);
+    method public boolean savePicture(android.os.Bundle, java.io.File);
+    method public android.webkit.WebBackForwardList saveState(android.os.Bundle);
+    method public void saveWebArchive(String);
+    method public void saveWebArchive(String, boolean, android.webkit.ValueCallback<java.lang.String>);
+    method public void setCertificate(android.net.http.SslCertificate);
+    method public void setDownloadListener(android.webkit.DownloadListener);
+    method public void setFindListener(android.webkit.WebView.FindListener);
+    method public void setHorizontalScrollbarOverlay(boolean);
+    method public void setHttpAuthUsernamePassword(String, String, String, String);
+    method public void setInitialScale(int);
+    method public void setMapTrackballToArrowKeys(boolean);
+    method public void setNetworkAvailable(boolean);
+    method public void setPictureListener(android.webkit.WebView.PictureListener);
+    method public void setRendererPriorityPolicy(int, boolean);
+    method public default void setTextClassifier(@Nullable android.view.textclassifier.TextClassifier);
+    method public void setVerticalScrollbarOverlay(boolean);
+    method public void setWebChromeClient(android.webkit.WebChromeClient);
+    method public void setWebViewClient(android.webkit.WebViewClient);
+    method public void setWebViewRenderProcessClient(@Nullable java.util.concurrent.Executor, @Nullable android.webkit.WebViewRenderProcessClient);
+    method public boolean showFindDialog(String, boolean);
+    method public void stopLoading();
+    method public boolean zoomBy(float);
+    method public boolean zoomIn();
+    method public boolean zoomOut();
+  }
+
+  public static interface WebViewProvider.ScrollDelegate {
+    method public int computeHorizontalScrollOffset();
+    method public int computeHorizontalScrollRange();
+    method public void computeScroll();
+    method public int computeVerticalScrollExtent();
+    method public int computeVerticalScrollOffset();
+    method public int computeVerticalScrollRange();
+  }
+
+  public static interface WebViewProvider.ViewDelegate {
+    method public default void autofill(android.util.SparseArray<android.view.autofill.AutofillValue>);
+    method public default void dispatchCreateViewTranslationRequest(@NonNull java.util.Map<android.view.autofill.AutofillId,long[]>, @NonNull int[], @Nullable android.view.translation.TranslationCapability, @NonNull java.util.List<android.view.translation.ViewTranslationRequest>);
+    method public boolean dispatchKeyEvent(android.view.KeyEvent);
+    method public android.view.View findFocus(android.view.View);
+    method public android.view.accessibility.AccessibilityNodeProvider getAccessibilityNodeProvider();
+    method public android.os.Handler getHandler(android.os.Handler);
+    method public default boolean isVisibleToUserForAutofill(int);
+    method public void onActivityResult(int, int, android.content.Intent);
+    method @Nullable public default android.view.WindowInsets onApplyWindowInsets(@Nullable android.view.WindowInsets);
+    method public void onAttachedToWindow();
+    method public default boolean onCheckIsTextEditor();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public android.view.inputmethod.InputConnection onCreateInputConnection(android.view.inputmethod.EditorInfo);
+    method public default void onCreateVirtualViewTranslationRequests(@NonNull long[], @NonNull int[], @NonNull java.util.function.Consumer<android.view.translation.ViewTranslationRequest>);
+    method public void onDetachedFromWindow();
+    method public boolean onDragEvent(android.view.DragEvent);
+    method public void onDraw(android.graphics.Canvas);
+    method public void onDrawVerticalScrollBar(android.graphics.Canvas, android.graphics.drawable.Drawable, int, int, int, int);
+    method public void onFinishTemporaryDetach();
+    method public void onFocusChanged(boolean, int, android.graphics.Rect);
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onHoverEvent(android.view.MotionEvent);
+    method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
+    method public void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public void onMeasure(int, int);
+    method public default void onMovedToDisplay(int, android.content.res.Configuration);
+    method public void onOverScrolled(int, int, boolean, boolean);
+    method public default void onProvideAutofillVirtualStructure(android.view.ViewStructure, int);
+    method public default void onProvideContentCaptureStructure(@NonNull android.view.ViewStructure, int);
+    method public void onProvideVirtualStructure(android.view.ViewStructure);
+    method public void onScrollChanged(int, int, int, int);
+    method public void onSizeChanged(int, int, int, int);
+    method public void onStartTemporaryDetach();
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public default void onVirtualViewTranslationResponses(@NonNull android.util.LongSparseArray<android.view.translation.ViewTranslationResponse>);
+    method public void onVisibilityChanged(android.view.View, int);
+    method public void onWindowFocusChanged(boolean);
+    method public void onWindowVisibilityChanged(int);
+    method public boolean performAccessibilityAction(int, android.os.Bundle);
+    method public boolean performLongClick();
+    method public void preDispatchDraw(android.graphics.Canvas);
+    method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
+    method public boolean requestFocus(int, android.graphics.Rect);
+    method public void setBackgroundColor(int);
+    method public boolean setFrame(int, int, int, int);
+    method public void setLayerType(int, android.graphics.Paint);
+    method public void setLayoutParams(android.view.ViewGroup.LayoutParams);
+    method public void setOverScrollMode(int);
+    method public void setScrollBarStyle(int);
+    method public boolean shouldDelayChildPressedState();
+  }
+
+  public final class WebViewProviderInfo implements android.os.Parcelable {
+    ctor public WebViewProviderInfo(String, String, boolean, boolean, String[]);
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.webkit.WebViewProviderInfo> CREATOR;
+    field public final boolean availableByDefault;
+    field public final String description;
+    field public final boolean isFallback;
+    field public final String packageName;
+    field public final android.content.pm.Signature[] signatures;
+  }
+
+  public final class WebViewUpdateService {
+    method public static android.webkit.WebViewProviderInfo[] getAllWebViewPackages();
+    method public static String getCurrentWebViewPackageName();
+    method public static android.webkit.WebViewProviderInfo[] getValidWebViewPackages();
+  }
+
+}
+
diff --git a/32/system/api/art-removed.txt b/32/system/api/art-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/art-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/art.txt b/32/system/api/art.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/art.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.future.usb.accessory-removed.txt b/32/system/api/com.android.future.usb.accessory-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.future.usb.accessory-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.future.usb.accessory.txt b/32/system/api/com.android.future.usb.accessory.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.future.usb.accessory.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.location.provider-removed.txt b/32/system/api/com.android.location.provider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.location.provider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.location.provider.txt b/32/system/api/com.android.location.provider.txt
new file mode 100644
index 0000000..7046abd
--- /dev/null
+++ b/32/system/api/com.android.location.provider.txt
@@ -0,0 +1,62 @@
+// Signature format: 2.0
+package com.android.location.provider {
+
+  @Deprecated public final class FusedLocationHardware {
+    method @Deprecated public void flushBatchedLocations();
+    method @Deprecated public int getSupportedBatchSize();
+    method @Deprecated public int getVersion();
+    method @Deprecated public void injectDeviceContext(int);
+    method @Deprecated public void injectDiagnosticData(String);
+    method @Deprecated public void registerSink(com.android.location.provider.FusedLocationHardwareSink, android.os.Looper);
+    method @Deprecated public void requestBatchOfLocations(int);
+    method @Deprecated public void startBatching(int, com.android.location.provider.GmsFusedBatchOptions);
+    method @Deprecated public void stopBatching(int);
+    method @Deprecated public boolean supportsDeviceContextInjection();
+    method @Deprecated public boolean supportsDiagnosticDataInjection();
+    method @Deprecated public void unregisterSink(com.android.location.provider.FusedLocationHardwareSink);
+    method @Deprecated public void updateBatchingOptions(int, com.android.location.provider.GmsFusedBatchOptions);
+  }
+
+  @Deprecated public class FusedLocationHardwareSink {
+    ctor @Deprecated public FusedLocationHardwareSink();
+    method @Deprecated public void onCapabilities(int);
+    method @Deprecated public void onDiagnosticDataAvailable(String);
+    method @Deprecated public void onLocationAvailable(android.location.Location[]);
+    method @Deprecated public void onStatusChanged(int);
+  }
+
+  @Deprecated public class GmsFusedBatchOptions {
+    ctor @Deprecated public GmsFusedBatchOptions();
+    method @Deprecated public int getFlags();
+    method @Deprecated public double getMaxPowerAllocationInMW();
+    method @Deprecated public long getPeriodInNS();
+    method @Deprecated public float getSmallestDisplacementMeters();
+    method @Deprecated public int getSourcesToUse();
+    method @Deprecated public boolean isFlagSet(int);
+    method @Deprecated public boolean isSourceToUseSet(int);
+    method @Deprecated public void resetFlag(int);
+    method @Deprecated public void resetSourceToUse(int);
+    method @Deprecated public void setFlag(int);
+    method @Deprecated public void setMaxPowerAllocationInMW(double);
+    method @Deprecated public void setPeriodInNS(long);
+    method @Deprecated public void setSmallestDisplacementMeters(float);
+    method @Deprecated public void setSourceToUse(int);
+  }
+
+  @Deprecated public static final class GmsFusedBatchOptions.BatchFlags {
+    ctor @Deprecated public GmsFusedBatchOptions.BatchFlags();
+    field @Deprecated public static int CALLBACK_ON_LOCATION_FIX;
+    field @Deprecated public static int WAKEUP_ON_FIFO_FULL;
+  }
+
+  @Deprecated public static final class GmsFusedBatchOptions.SourceTechnologies {
+    ctor @Deprecated public GmsFusedBatchOptions.SourceTechnologies();
+    field @Deprecated public static int BLUETOOTH;
+    field @Deprecated public static int CELL;
+    field @Deprecated public static int GNSS;
+    field @Deprecated public static int SENSORS;
+    field @Deprecated public static int WIFI;
+  }
+
+}
+
diff --git a/32/system/api/com.android.media.remotedisplay-removed.txt b/32/system/api/com.android.media.remotedisplay-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.media.remotedisplay-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.media.remotedisplay.txt b/32/system/api/com.android.media.remotedisplay.txt
new file mode 100644
index 0000000..3619fcf
--- /dev/null
+++ b/32/system/api/com.android.media.remotedisplay.txt
@@ -0,0 +1,53 @@
+// Signature format: 2.0
+package com.android.media.remotedisplay {
+
+  public class RemoteDisplay {
+    ctor public RemoteDisplay(String, String);
+    method public String getDescription();
+    method public String getId();
+    method public String getName();
+    method public int getPresentationDisplayId();
+    method public int getStatus();
+    method public int getVolume();
+    method public int getVolumeHandling();
+    method public int getVolumeMax();
+    method public void setDescription(String);
+    method public void setName(String);
+    method public void setPresentationDisplayId(int);
+    method public void setStatus(int);
+    method public void setVolume(int);
+    method public void setVolumeHandling(int);
+    method public void setVolumeMax(int);
+    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
+    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
+    field public static final int STATUS_AVAILABLE = 2; // 0x2
+    field public static final int STATUS_CONNECTED = 4; // 0x4
+    field public static final int STATUS_CONNECTING = 3; // 0x3
+    field public static final int STATUS_IN_USE = 1; // 0x1
+    field public static final int STATUS_NOT_AVAILABLE = 0; // 0x0
+  }
+
+  public abstract class RemoteDisplayProvider {
+    ctor public RemoteDisplayProvider(android.content.Context);
+    method public void addDisplay(com.android.media.remotedisplay.RemoteDisplay);
+    method public com.android.media.remotedisplay.RemoteDisplay findRemoteDisplay(String);
+    method public android.os.IBinder getBinder();
+    method public final android.content.Context getContext();
+    method public int getDiscoveryMode();
+    method public java.util.Collection<com.android.media.remotedisplay.RemoteDisplay> getDisplays();
+    method public android.app.PendingIntent getSettingsPendingIntent();
+    method public void onAdjustVolume(com.android.media.remotedisplay.RemoteDisplay, int);
+    method public void onConnect(com.android.media.remotedisplay.RemoteDisplay);
+    method public void onDisconnect(com.android.media.remotedisplay.RemoteDisplay);
+    method public void onDiscoveryModeChanged(int);
+    method public void onSetVolume(com.android.media.remotedisplay.RemoteDisplay, int);
+    method public void removeDisplay(com.android.media.remotedisplay.RemoteDisplay);
+    method public void updateDisplay(com.android.media.remotedisplay.RemoteDisplay);
+    field public static final int DISCOVERY_MODE_ACTIVE = 2; // 0x2
+    field public static final int DISCOVERY_MODE_NONE = 0; // 0x0
+    field public static final int DISCOVERY_MODE_PASSIVE = 1; // 0x1
+    field public static final String SERVICE_INTERFACE = "com.android.media.remotedisplay.RemoteDisplayProvider";
+  }
+
+}
+
diff --git a/32/system/api/com.android.media.tv.remoteprovider-removed.txt b/32/system/api/com.android.media.tv.remoteprovider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.media.tv.remoteprovider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.media.tv.remoteprovider.txt b/32/system/api/com.android.media.tv.remoteprovider.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.media.tv.remoteprovider.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.mediadrm.signer-removed.txt b/32/system/api/com.android.mediadrm.signer-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.mediadrm.signer-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.mediadrm.signer.txt b/32/system/api/com.android.mediadrm.signer.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.mediadrm.signer.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.nfc_extras-removed.txt b/32/system/api/com.android.nfc_extras-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.nfc_extras-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/com.android.nfc_extras.txt b/32/system/api/com.android.nfc_extras.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/com.android.nfc_extras.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-appsearch-removed.txt b/32/system/api/framework-appsearch-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-appsearch-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-appsearch.txt b/32/system/api/framework-appsearch.txt
new file mode 100644
index 0000000..4a6194e
--- /dev/null
+++ b/32/system/api/framework-appsearch.txt
@@ -0,0 +1,9 @@
+// Signature format: 2.0
+package android.app.appsearch {
+
+  public class AppSearchManagerFrameworkInitializer {
+    method public static void initialize();
+  }
+
+}
+
diff --git a/32/system/api/framework-connectivity-removed.txt b/32/system/api/framework-connectivity-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-connectivity-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-connectivity.txt b/32/system/api/framework-connectivity.txt
new file mode 100644
index 0000000..d1d51da
--- /dev/null
+++ b/32/system/api/framework-connectivity.txt
@@ -0,0 +1,505 @@
+// Signature format: 2.0
+package android.net {
+
+  public class CaptivePortal implements android.os.Parcelable {
+    method @Deprecated public void logEvent(int, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void reevaluateNetwork();
+    method public void useNetwork();
+    field public static final int APP_REQUEST_REEVALUATION_REQUIRED = 100; // 0x64
+    field public static final int APP_RETURN_DISMISSED = 0; // 0x0
+    field public static final int APP_RETURN_UNWANTED = 1; // 0x1
+    field public static final int APP_RETURN_WANTED_AS_IS = 2; // 0x2
+  }
+
+  public final class CaptivePortalData implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getByteLimit();
+    method public long getExpiryTimeMillis();
+    method public long getRefreshTimeMillis();
+    method @Nullable public android.net.Uri getUserPortalUrl();
+    method public int getUserPortalUrlSource();
+    method @Nullable public CharSequence getVenueFriendlyName();
+    method @Nullable public android.net.Uri getVenueInfoUrl();
+    method public int getVenueInfoUrlSource();
+    method public boolean isCaptive();
+    method public boolean isSessionExtendable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CAPTIVE_PORTAL_DATA_SOURCE_OTHER = 0; // 0x0
+    field public static final int CAPTIVE_PORTAL_DATA_SOURCE_PASSPOINT = 1; // 0x1
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.CaptivePortalData> CREATOR;
+  }
+
+  public static class CaptivePortalData.Builder {
+    ctor public CaptivePortalData.Builder();
+    ctor public CaptivePortalData.Builder(@Nullable android.net.CaptivePortalData);
+    method @NonNull public android.net.CaptivePortalData build();
+    method @NonNull public android.net.CaptivePortalData.Builder setBytesRemaining(long);
+    method @NonNull public android.net.CaptivePortalData.Builder setCaptive(boolean);
+    method @NonNull public android.net.CaptivePortalData.Builder setExpiryTime(long);
+    method @NonNull public android.net.CaptivePortalData.Builder setRefreshTime(long);
+    method @NonNull public android.net.CaptivePortalData.Builder setSessionExtendable(boolean);
+    method @NonNull public android.net.CaptivePortalData.Builder setUserPortalUrl(@Nullable android.net.Uri);
+    method @NonNull public android.net.CaptivePortalData.Builder setUserPortalUrl(@Nullable android.net.Uri, int);
+    method @NonNull public android.net.CaptivePortalData.Builder setVenueFriendlyName(@Nullable CharSequence);
+    method @NonNull public android.net.CaptivePortalData.Builder setVenueInfoUrl(@Nullable android.net.Uri);
+    method @NonNull public android.net.CaptivePortalData.Builder setVenueInfoUrl(@Nullable android.net.Uri, int);
+  }
+
+  public class ConnectivityManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createNattKeepalive(@NonNull android.net.Network, @NonNull android.os.ParcelFileDescriptor, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
+    method @NonNull @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull java.net.Socket, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String getCaptivePortalServerUrl();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEntitlementResultListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported();
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_FACTORY}) public int registerNetworkProvider(@NonNull android.net.NetworkProvider);
+    method public void registerQosCallback(@NonNull android.net.QosSocketInfo, @NonNull java.util.concurrent.Executor, @NonNull android.net.QosCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEventCallback);
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void requestNetwork(@NonNull android.net.NetworkRequest, int, int, @NonNull android.os.Handler, @NonNull android.net.ConnectivityManager.NetworkCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_AIRPLANE_MODE, android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void setAirplaneMode(boolean);
+    method @RequiresPermission(android.Manifest.permission.CONTROL_OEM_PAID_NETWORK_PREFERENCE) public void setOemNetworkPreference(@NonNull android.net.OemNetworkPreferences, @Nullable java.util.concurrent.Executor, @Nullable Runnable);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_STACK}) public boolean shouldAvoidBadWifi();
+    method @RequiresPermission(android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) public void startCaptivePortalApp(@NonNull android.net.Network, @NonNull android.os.Bundle);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int, boolean, android.net.ConnectivityManager.OnStartTetheringCallback, android.os.Handler);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void stopTethering(int);
+    method @RequiresPermission(anyOf={android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_FACTORY}) public void unregisterNetworkProvider(@NonNull android.net.NetworkProvider);
+    method public void unregisterQosCallback(@NonNull android.net.QosCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void unregisterTetheringEventCallback(@NonNull android.net.ConnectivityManager.OnTetheringEventCallback);
+    field public static final String EXTRA_CAPTIVE_PORTAL_PROBE_SPEC = "android.net.extra.CAPTIVE_PORTAL_PROBE_SPEC";
+    field public static final String EXTRA_CAPTIVE_PORTAL_USER_AGENT = "android.net.extra.CAPTIVE_PORTAL_USER_AGENT";
+    field public static final int TETHERING_BLUETOOTH = 2; // 0x2
+    field public static final int TETHERING_USB = 1; // 0x1
+    field public static final int TETHERING_WIFI = 0; // 0x0
+    field @Deprecated public static final int TETHER_ERROR_ENTITLEMENT_UNKONWN = 13; // 0xd
+    field @Deprecated public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
+    field @Deprecated public static final int TETHER_ERROR_PROVISION_FAILED = 11; // 0xb
+    field public static final int TYPE_NONE = -1; // 0xffffffff
+    field @Deprecated public static final int TYPE_PROXY = 16; // 0x10
+    field @Deprecated public static final int TYPE_WIFI_P2P = 13; // 0xd
+  }
+
+  @Deprecated public abstract static class ConnectivityManager.OnStartTetheringCallback {
+    ctor @Deprecated public ConnectivityManager.OnStartTetheringCallback();
+    method @Deprecated public void onTetheringFailed();
+    method @Deprecated public void onTetheringStarted();
+  }
+
+  @Deprecated public static interface ConnectivityManager.OnTetheringEntitlementResultListener {
+    method @Deprecated public void onTetheringEntitlementResult(int);
+  }
+
+  @Deprecated public abstract static class ConnectivityManager.OnTetheringEventCallback {
+    ctor @Deprecated public ConnectivityManager.OnTetheringEventCallback();
+    method @Deprecated public void onUpstreamChanged(@Nullable android.net.Network);
+  }
+
+  public final class InvalidPacketException extends java.lang.Exception {
+    ctor public InvalidPacketException(int);
+    method public int getError();
+    field public static final int ERROR_INVALID_IP_ADDRESS = -21; // 0xffffffeb
+    field public static final int ERROR_INVALID_LENGTH = -23; // 0xffffffe9
+    field public static final int ERROR_INVALID_PORT = -22; // 0xffffffea
+  }
+
+  public final class IpConfiguration implements android.os.Parcelable {
+    ctor public IpConfiguration();
+    ctor public IpConfiguration(@NonNull android.net.IpConfiguration);
+    method public int describeContents();
+    method @Nullable public android.net.ProxyInfo getHttpProxy();
+    method @NonNull public android.net.IpConfiguration.IpAssignment getIpAssignment();
+    method @NonNull public android.net.IpConfiguration.ProxySettings getProxySettings();
+    method @Nullable public android.net.StaticIpConfiguration getStaticIpConfiguration();
+    method public void setHttpProxy(@Nullable android.net.ProxyInfo);
+    method public void setIpAssignment(@NonNull android.net.IpConfiguration.IpAssignment);
+    method public void setProxySettings(@NonNull android.net.IpConfiguration.ProxySettings);
+    method public void setStaticIpConfiguration(@Nullable android.net.StaticIpConfiguration);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.IpConfiguration> CREATOR;
+  }
+
+  public enum IpConfiguration.IpAssignment {
+    enum_constant public static final android.net.IpConfiguration.IpAssignment DHCP;
+    enum_constant public static final android.net.IpConfiguration.IpAssignment STATIC;
+    enum_constant public static final android.net.IpConfiguration.IpAssignment UNASSIGNED;
+  }
+
+  public enum IpConfiguration.ProxySettings {
+    enum_constant public static final android.net.IpConfiguration.ProxySettings NONE;
+    enum_constant public static final android.net.IpConfiguration.ProxySettings PAC;
+    enum_constant public static final android.net.IpConfiguration.ProxySettings STATIC;
+    enum_constant public static final android.net.IpConfiguration.ProxySettings UNASSIGNED;
+  }
+
+  public final class IpPrefix implements android.os.Parcelable {
+    ctor public IpPrefix(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
+    ctor public IpPrefix(@NonNull String);
+  }
+
+  public class KeepalivePacketData {
+    ctor protected KeepalivePacketData(@NonNull java.net.InetAddress, @IntRange(from=0, to=65535) int, @NonNull java.net.InetAddress, @IntRange(from=0, to=65535) int, @NonNull byte[]) throws android.net.InvalidPacketException;
+    method @NonNull public java.net.InetAddress getDstAddress();
+    method public int getDstPort();
+    method @NonNull public byte[] getPacket();
+    method @NonNull public java.net.InetAddress getSrcAddress();
+    method public int getSrcPort();
+  }
+
+  public class LinkAddress implements android.os.Parcelable {
+    ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int, int, int);
+    ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int, int, int, long, long);
+    ctor public LinkAddress(@NonNull java.net.InetAddress, @IntRange(from=0, to=128) int);
+    ctor public LinkAddress(@NonNull String);
+    ctor public LinkAddress(@NonNull String, int, int);
+    method public long getDeprecationTime();
+    method public long getExpirationTime();
+    method public boolean isGlobalPreferred();
+    method public boolean isIpv4();
+    method public boolean isIpv6();
+    method public boolean isSameAddressAs(@Nullable android.net.LinkAddress);
+    field public static final long LIFETIME_PERMANENT = 9223372036854775807L; // 0x7fffffffffffffffL
+    field public static final long LIFETIME_UNKNOWN = -1L; // 0xffffffffffffffffL
+  }
+
+  public final class LinkProperties implements android.os.Parcelable {
+    ctor public LinkProperties(@Nullable android.net.LinkProperties);
+    ctor public LinkProperties(@Nullable android.net.LinkProperties, boolean);
+    method public boolean addDnsServer(@NonNull java.net.InetAddress);
+    method public boolean addLinkAddress(@NonNull android.net.LinkAddress);
+    method public boolean addPcscfServer(@NonNull java.net.InetAddress);
+    method @NonNull public java.util.List<java.net.InetAddress> getAddresses();
+    method @NonNull public java.util.List<java.lang.String> getAllInterfaceNames();
+    method @NonNull public java.util.List<android.net.LinkAddress> getAllLinkAddresses();
+    method @NonNull public java.util.List<android.net.RouteInfo> getAllRoutes();
+    method @Nullable public android.net.Uri getCaptivePortalApiUrl();
+    method @Nullable public android.net.CaptivePortalData getCaptivePortalData();
+    method @NonNull public java.util.List<java.net.InetAddress> getPcscfServers();
+    method @Nullable public String getTcpBufferSizes();
+    method @NonNull public java.util.List<java.net.InetAddress> getValidatedPrivateDnsServers();
+    method public boolean hasGlobalIpv6Address();
+    method public boolean hasIpv4Address();
+    method public boolean hasIpv4DefaultRoute();
+    method public boolean hasIpv4DnsServer();
+    method public boolean hasIpv6DefaultRoute();
+    method public boolean hasIpv6DnsServer();
+    method public boolean isIpv4Provisioned();
+    method public boolean isIpv6Provisioned();
+    method public boolean isProvisioned();
+    method public boolean isReachable(@NonNull java.net.InetAddress);
+    method public boolean removeDnsServer(@NonNull java.net.InetAddress);
+    method public boolean removeLinkAddress(@NonNull android.net.LinkAddress);
+    method public boolean removeRoute(@NonNull android.net.RouteInfo);
+    method public void setCaptivePortalApiUrl(@Nullable android.net.Uri);
+    method public void setCaptivePortalData(@Nullable android.net.CaptivePortalData);
+    method public void setPcscfServers(@NonNull java.util.Collection<java.net.InetAddress>);
+    method public void setPrivateDnsServerName(@Nullable String);
+    method public void setTcpBufferSizes(@Nullable String);
+    method public void setUsePrivateDns(boolean);
+    method public void setValidatedPrivateDnsServers(@NonNull java.util.Collection<java.net.InetAddress>);
+  }
+
+  public final class NattKeepalivePacketData extends android.net.KeepalivePacketData implements android.os.Parcelable {
+    ctor public NattKeepalivePacketData(@NonNull java.net.InetAddress, int, @NonNull java.net.InetAddress, int, @NonNull byte[]) throws android.net.InvalidPacketException;
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NattKeepalivePacketData> CREATOR;
+  }
+
+  public class Network implements android.os.Parcelable {
+    ctor public Network(@NonNull android.net.Network);
+    method public int getNetId();
+    method @NonNull public android.net.Network getPrivateDnsBypassingCopy();
+  }
+
+  public abstract class NetworkAgent {
+    ctor public NetworkAgent(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String, @NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties, int, @NonNull android.net.NetworkAgentConfig, @Nullable android.net.NetworkProvider);
+    ctor public NetworkAgent(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String, @NonNull android.net.NetworkCapabilities, @NonNull android.net.LinkProperties, @NonNull android.net.NetworkScore, @NonNull android.net.NetworkAgentConfig, @Nullable android.net.NetworkProvider);
+    method @Nullable public android.net.Network getNetwork();
+    method public void markConnected();
+    method public void onAddKeepalivePacketFilter(int, @NonNull android.net.KeepalivePacketData);
+    method public void onAutomaticReconnectDisabled();
+    method public void onBandwidthUpdateRequested();
+    method public void onNetworkCreated();
+    method public void onNetworkDestroyed();
+    method public void onNetworkUnwanted();
+    method public void onQosCallbackRegistered(int, @NonNull android.net.QosFilter);
+    method public void onQosCallbackUnregistered(int);
+    method public void onRemoveKeepalivePacketFilter(int);
+    method public void onSaveAcceptUnvalidated(boolean);
+    method public void onSignalStrengthThresholdsUpdated(@NonNull int[]);
+    method public void onStartSocketKeepalive(int, @NonNull java.time.Duration, @NonNull android.net.KeepalivePacketData);
+    method public void onStopSocketKeepalive(int);
+    method public void onValidationStatus(int, @Nullable android.net.Uri);
+    method @NonNull public android.net.Network register();
+    method public final void sendLinkProperties(@NonNull android.net.LinkProperties);
+    method public final void sendNetworkCapabilities(@NonNull android.net.NetworkCapabilities);
+    method public final void sendNetworkScore(@NonNull android.net.NetworkScore);
+    method public final void sendNetworkScore(@IntRange(from=0, to=99) int);
+    method public final void sendQosCallbackError(int, int);
+    method public final void sendQosSessionAvailable(int, int, @NonNull android.net.QosSessionAttributes);
+    method public final void sendQosSessionLost(int, int, int);
+    method public final void sendSocketKeepaliveEvent(int, int);
+    method @Deprecated public void setLegacySubtype(int, @NonNull String);
+    method public void setLingerDuration(@NonNull java.time.Duration);
+    method public void setTeardownDelayMillis(@IntRange(from=0, to=0x1388) int);
+    method public final void setUnderlyingNetworks(@Nullable java.util.List<android.net.Network>);
+    method public void unregister();
+    field public static final int VALIDATION_STATUS_NOT_VALID = 2; // 0x2
+    field public static final int VALIDATION_STATUS_VALID = 1; // 0x1
+  }
+
+  public final class NetworkAgentConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getLegacyType();
+    method @NonNull public String getLegacyTypeName();
+    method public boolean isExplicitlySelected();
+    method public boolean isPartialConnectivityAcceptable();
+    method public boolean isUnvalidatedConnectivityAcceptable();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkAgentConfig> CREATOR;
+  }
+
+  public static final class NetworkAgentConfig.Builder {
+    ctor public NetworkAgentConfig.Builder();
+    method @NonNull public android.net.NetworkAgentConfig build();
+    method @NonNull public android.net.NetworkAgentConfig.Builder setExplicitlySelected(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyExtraInfo(@NonNull String);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacySubType(int);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacySubTypeName(@NonNull String);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyType(int);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setLegacyTypeName(@NonNull String);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setNat64DetectionEnabled(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setPartialConnectivityAcceptable(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setProvisioningNotificationEnabled(boolean);
+    method @NonNull public android.net.NetworkAgentConfig.Builder setUnvalidatedConnectivityAcceptable(boolean);
+  }
+
+  public final class NetworkCapabilities implements android.os.Parcelable {
+    method @NonNull public int[] getAdministratorUids();
+    method @Nullable public static String getCapabilityCarrierName(int);
+    method @Nullable public String getSsid();
+    method @NonNull public java.util.Set<java.lang.Integer> getSubscriptionIds();
+    method @NonNull public int[] getTransportTypes();
+    method public boolean isPrivateDnsBroken();
+    method public boolean satisfiedByNetworkCapabilities(@Nullable android.net.NetworkCapabilities);
+    field public static final int NET_CAPABILITY_BIP = 31; // 0x1f
+    field public static final int NET_CAPABILITY_NOT_VCN_MANAGED = 28; // 0x1c
+    field public static final int NET_CAPABILITY_OEM_PAID = 22; // 0x16
+    field public static final int NET_CAPABILITY_OEM_PRIVATE = 26; // 0x1a
+    field public static final int NET_CAPABILITY_PARTIAL_CONNECTIVITY = 24; // 0x18
+    field public static final int NET_CAPABILITY_VEHICLE_INTERNAL = 27; // 0x1b
+    field public static final int NET_CAPABILITY_VSIM = 30; // 0x1e
+  }
+
+  public static final class NetworkCapabilities.Builder {
+    ctor public NetworkCapabilities.Builder();
+    ctor public NetworkCapabilities.Builder(@NonNull android.net.NetworkCapabilities);
+    method @NonNull public android.net.NetworkCapabilities.Builder addCapability(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder addTransportType(int);
+    method @NonNull public android.net.NetworkCapabilities build();
+    method @NonNull public android.net.NetworkCapabilities.Builder removeCapability(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder removeTransportType(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setAdministratorUids(@NonNull int[]);
+    method @NonNull public android.net.NetworkCapabilities.Builder setLinkDownstreamBandwidthKbps(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder setLinkUpstreamBandwidthKbps(int);
+    method @NonNull public android.net.NetworkCapabilities.Builder setNetworkSpecifier(@Nullable android.net.NetworkSpecifier);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setOwnerUid(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setRequestorPackageName(@Nullable String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setRequestorUid(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP) public android.net.NetworkCapabilities.Builder setSignalStrength(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public android.net.NetworkCapabilities.Builder setSsid(@Nullable String);
+    method @NonNull public android.net.NetworkCapabilities.Builder setSubscriptionIds(@NonNull java.util.Set<java.lang.Integer>);
+    method @NonNull public android.net.NetworkCapabilities.Builder setTransportInfo(@Nullable android.net.TransportInfo);
+    method @NonNull public static android.net.NetworkCapabilities.Builder withoutDefaultCapabilities();
+  }
+
+  public class NetworkProvider {
+    ctor public NetworkProvider(@NonNull android.content.Context, @NonNull android.os.Looper, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void declareNetworkRequestUnfulfillable(@NonNull android.net.NetworkRequest);
+    method public int getProviderId();
+    method public void onNetworkRequestWithdrawn(@NonNull android.net.NetworkRequest);
+    method public void onNetworkRequested(@NonNull android.net.NetworkRequest, @IntRange(from=0, to=99) int, int);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void registerNetworkOffer(@NonNull android.net.NetworkScore, @NonNull android.net.NetworkCapabilities, @NonNull java.util.concurrent.Executor, @NonNull android.net.NetworkProvider.NetworkOfferCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY) public void unregisterNetworkOffer(@NonNull android.net.NetworkProvider.NetworkOfferCallback);
+    field public static final int ID_NONE = -1; // 0xffffffff
+  }
+
+  public static interface NetworkProvider.NetworkOfferCallback {
+    method public void onNetworkNeeded(@NonNull android.net.NetworkRequest);
+    method public void onNetworkUnneeded(@NonNull android.net.NetworkRequest);
+  }
+
+  public class NetworkReleasedException extends java.lang.Exception {
+  }
+
+  public class NetworkRequest implements android.os.Parcelable {
+    method @Nullable public String getRequestorPackageName();
+    method public int getRequestorUid();
+  }
+
+  public static class NetworkRequest.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SIGNAL_STRENGTH_WAKEUP) public android.net.NetworkRequest.Builder setSignalStrength(int);
+    method @NonNull public android.net.NetworkRequest.Builder setSubscriptionIds(@NonNull java.util.Set<java.lang.Integer>);
+  }
+
+  public final class NetworkScore implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getKeepConnectedReason();
+    method public int getLegacyInt();
+    method public boolean isExiting();
+    method public boolean isTransportPrimary();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.NetworkScore> CREATOR;
+    field public static final int KEEP_CONNECTED_FOR_HANDOVER = 1; // 0x1
+    field public static final int KEEP_CONNECTED_NONE = 0; // 0x0
+  }
+
+  public static final class NetworkScore.Builder {
+    ctor public NetworkScore.Builder();
+    method @NonNull public android.net.NetworkScore build();
+    method @NonNull public android.net.NetworkScore.Builder setExiting(boolean);
+    method @NonNull public android.net.NetworkScore.Builder setKeepConnectedReason(int);
+    method @NonNull public android.net.NetworkScore.Builder setLegacyInt(int);
+    method @NonNull public android.net.NetworkScore.Builder setTransportPrimary(boolean);
+  }
+
+  public final class OemNetworkPreferences implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.Map<java.lang.String,java.lang.Integer> getNetworkPreferences();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.OemNetworkPreferences> CREATOR;
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PAID = 1; // 0x1
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK = 2; // 0x2
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY = 3; // 0x3
+    field public static final int OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY = 4; // 0x4
+    field public static final int OEM_NETWORK_PREFERENCE_UNINITIALIZED = 0; // 0x0
+  }
+
+  public static final class OemNetworkPreferences.Builder {
+    ctor public OemNetworkPreferences.Builder();
+    ctor public OemNetworkPreferences.Builder(@NonNull android.net.OemNetworkPreferences);
+    method @NonNull public android.net.OemNetworkPreferences.Builder addNetworkPreference(@NonNull String, int);
+    method @NonNull public android.net.OemNetworkPreferences build();
+    method @NonNull public android.net.OemNetworkPreferences.Builder clearNetworkPreference(@NonNull String);
+  }
+
+  public abstract class QosCallback {
+    ctor public QosCallback();
+    method public void onError(@NonNull android.net.QosCallbackException);
+    method public void onQosSessionAvailable(@NonNull android.net.QosSession, @NonNull android.net.QosSessionAttributes);
+    method public void onQosSessionLost(@NonNull android.net.QosSession);
+  }
+
+  public static class QosCallback.QosCallbackRegistrationException extends java.lang.RuntimeException {
+  }
+
+  public final class QosCallbackException extends java.lang.Exception {
+  }
+
+  public abstract class QosFilter {
+    method @NonNull public abstract android.net.Network getNetwork();
+    method public abstract boolean matchesLocalAddress(@NonNull java.net.InetAddress, int, int);
+    method public abstract boolean matchesRemoteAddress(@NonNull java.net.InetAddress, int, int);
+  }
+
+  public final class QosSession implements android.os.Parcelable {
+    ctor public QosSession(int, int);
+    method public int describeContents();
+    method public int getSessionId();
+    method public int getSessionType();
+    method public long getUniqueId();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.QosSession> CREATOR;
+    field public static final int TYPE_EPS_BEARER = 1; // 0x1
+    field public static final int TYPE_NR_BEARER = 2; // 0x2
+  }
+
+  public interface QosSessionAttributes {
+  }
+
+  public final class QosSocketInfo implements android.os.Parcelable {
+    ctor public QosSocketInfo(@NonNull android.net.Network, @NonNull java.net.Socket) throws java.io.IOException;
+    method public int describeContents();
+    method @NonNull public java.net.InetSocketAddress getLocalSocketAddress();
+    method @NonNull public android.net.Network getNetwork();
+    method @Nullable public java.net.InetSocketAddress getRemoteSocketAddress();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.QosSocketInfo> CREATOR;
+  }
+
+  public final class RouteInfo implements android.os.Parcelable {
+    ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int);
+    ctor public RouteInfo(@Nullable android.net.IpPrefix, @Nullable java.net.InetAddress, @Nullable String, int, int);
+    method public int getMtu();
+    method public int getType();
+    field public static final int RTN_THROW = 9; // 0x9
+    field public static final int RTN_UNICAST = 1; // 0x1
+    field public static final int RTN_UNREACHABLE = 7; // 0x7
+  }
+
+  public abstract class SocketKeepalive implements java.lang.AutoCloseable {
+    field public static final int ERROR_NO_SUCH_SLOT = -33; // 0xffffffdf
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public class SocketLocalAddressChangedException extends java.lang.Exception {
+  }
+
+  public class SocketNotBoundException extends java.lang.Exception {
+  }
+
+  public final class StaticIpConfiguration implements android.os.Parcelable {
+    ctor public StaticIpConfiguration();
+    ctor public StaticIpConfiguration(@Nullable android.net.StaticIpConfiguration);
+    method public void addDnsServer(@NonNull java.net.InetAddress);
+    method public void clear();
+    method public int describeContents();
+    method @NonNull public java.util.List<java.net.InetAddress> getDnsServers();
+    method @Nullable public String getDomains();
+    method @Nullable public java.net.InetAddress getGateway();
+    method @Nullable public android.net.LinkAddress getIpAddress();
+    method @NonNull public java.util.List<android.net.RouteInfo> getRoutes(@Nullable String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.StaticIpConfiguration> CREATOR;
+  }
+
+  public static final class StaticIpConfiguration.Builder {
+    ctor public StaticIpConfiguration.Builder();
+    method @NonNull public android.net.StaticIpConfiguration build();
+    method @NonNull public android.net.StaticIpConfiguration.Builder setDnsServers(@NonNull Iterable<java.net.InetAddress>);
+    method @NonNull public android.net.StaticIpConfiguration.Builder setDomains(@Nullable String);
+    method @NonNull public android.net.StaticIpConfiguration.Builder setGateway(@Nullable java.net.InetAddress);
+    method @NonNull public android.net.StaticIpConfiguration.Builder setIpAddress(@Nullable android.net.LinkAddress);
+  }
+
+  public final class TcpKeepalivePacketData extends android.net.KeepalivePacketData implements android.os.Parcelable {
+    ctor public TcpKeepalivePacketData(@NonNull java.net.InetAddress, int, @NonNull java.net.InetAddress, int, @NonNull byte[], int, int, int, int, int, int) throws android.net.InvalidPacketException;
+    method public int describeContents();
+    method public int getIpTos();
+    method public int getIpTtl();
+    method public int getTcpAck();
+    method public int getTcpSeq();
+    method public int getTcpWindow();
+    method public int getTcpWindowScale();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TcpKeepalivePacketData> CREATOR;
+  }
+
+}
+
+package android.net.apf {
+
+  public final class ApfCapabilities implements android.os.Parcelable {
+    ctor public ApfCapabilities(int, int, int);
+    method public int describeContents();
+    method public static boolean getApfDrop8023Frames();
+    method @NonNull public static int[] getApfEtherTypeBlackList();
+    method public boolean hasDataAccess();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.net.apf.ApfCapabilities> CREATOR;
+    field public final int apfPacketFormat;
+    field public final int apfVersionSupported;
+    field public final int maximumApfProgramSize;
+  }
+
+}
+
diff --git a/32/system/api/framework-graphics-removed.txt b/32/system/api/framework-graphics-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-graphics-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-graphics.txt b/32/system/api/framework-graphics.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-graphics.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-media-removed.txt b/32/system/api/framework-media-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-media-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-media.txt b/32/system/api/framework-media.txt
new file mode 100644
index 0000000..6eea769
--- /dev/null
+++ b/32/system/api/framework-media.txt
@@ -0,0 +1,68 @@
+// Signature format: 2.0
+package android.media {
+
+  public final class MediaTranscodingManager {
+    method @Nullable public android.media.MediaTranscodingManager.TranscodingSession enqueueRequest(@NonNull android.media.MediaTranscodingManager.TranscodingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaTranscodingManager.OnTranscodingFinishedListener);
+  }
+
+  @java.lang.FunctionalInterface public static interface MediaTranscodingManager.OnTranscodingFinishedListener {
+    method public void onTranscodingFinished(@NonNull android.media.MediaTranscodingManager.TranscodingSession);
+  }
+
+  public abstract static class MediaTranscodingManager.TranscodingRequest {
+    method public int getClientPid();
+    method public int getClientUid();
+    method @Nullable public android.os.ParcelFileDescriptor getDestinationFileDescriptor();
+    method @NonNull public android.net.Uri getDestinationUri();
+    method @Nullable public android.os.ParcelFileDescriptor getSourceFileDescriptor();
+    method @NonNull public android.net.Uri getSourceUri();
+  }
+
+  public static class MediaTranscodingManager.TranscodingRequest.VideoFormatResolver {
+    ctor public MediaTranscodingManager.TranscodingRequest.VideoFormatResolver(@NonNull android.media.ApplicationMediaCapabilities, @NonNull android.media.MediaFormat);
+    method @Nullable public android.media.MediaFormat resolveVideoFormat();
+    method public boolean shouldTranscode();
+  }
+
+  public static final class MediaTranscodingManager.TranscodingSession {
+    method public boolean addClientUid(int);
+    method public void cancel();
+    method @NonNull public java.util.List<java.lang.Integer> getClientUids();
+    method public int getErrorCode();
+    method @IntRange(from=0, to=100) public int getProgress();
+    method public int getResult();
+    method public int getSessionId();
+    method public int getStatus();
+    method public void setOnProgressUpdateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodingManager.TranscodingSession.OnProgressUpdateListener);
+    field public static final int ERROR_DROPPED_BY_SERVICE = 1; // 0x1
+    field public static final int ERROR_NONE = 0; // 0x0
+    field public static final int ERROR_SERVICE_DIED = 2; // 0x2
+    field public static final int RESULT_CANCELED = 4; // 0x4
+    field public static final int RESULT_ERROR = 3; // 0x3
+    field public static final int RESULT_NONE = 1; // 0x1
+    field public static final int RESULT_SUCCESS = 2; // 0x2
+    field public static final int STATUS_FINISHED = 3; // 0x3
+    field public static final int STATUS_PAUSED = 4; // 0x4
+    field public static final int STATUS_PENDING = 1; // 0x1
+    field public static final int STATUS_RUNNING = 2; // 0x2
+  }
+
+  @java.lang.FunctionalInterface public static interface MediaTranscodingManager.TranscodingSession.OnProgressUpdateListener {
+    method public void onProgressUpdate(@NonNull android.media.MediaTranscodingManager.TranscodingSession, @IntRange(from=0, to=100) int);
+  }
+
+  public static final class MediaTranscodingManager.VideoTranscodingRequest extends android.media.MediaTranscodingManager.TranscodingRequest {
+    method @NonNull public android.media.MediaFormat getVideoTrackFormat();
+  }
+
+  public static final class MediaTranscodingManager.VideoTranscodingRequest.Builder {
+    ctor public MediaTranscodingManager.VideoTranscodingRequest.Builder(@NonNull android.net.Uri, @NonNull android.net.Uri, @NonNull android.media.MediaFormat);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest build();
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setClientPid(int);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setClientUid(int);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setDestinationFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+    method @NonNull public android.media.MediaTranscodingManager.VideoTranscodingRequest.Builder setSourceFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+  }
+
+}
+
diff --git a/32/system/api/framework-mediaprovider-removed.txt b/32/system/api/framework-mediaprovider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-mediaprovider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-mediaprovider.txt b/32/system/api/framework-mediaprovider.txt
new file mode 100644
index 0000000..d29a6ed
--- /dev/null
+++ b/32/system/api/framework-mediaprovider.txt
@@ -0,0 +1,15 @@
+// Signature format: 2.0
+package android.provider {
+
+  public final class MediaStore {
+    method @NonNull public static android.net.Uri rewriteToLegacy(@NonNull android.net.Uri);
+    method @NonNull @WorkerThread public static android.net.Uri scanFile(@NonNull android.content.ContentResolver, @NonNull java.io.File);
+    method @WorkerThread public static void scanVolume(@NonNull android.content.ContentResolver, @NonNull String);
+    method @WorkerThread public static void waitForIdle(@NonNull android.content.ContentResolver);
+    field public static final String AUTHORITY_LEGACY = "media_legacy";
+    field @NonNull public static final android.net.Uri AUTHORITY_LEGACY_URI;
+    field public static final String QUERY_ARG_DEFER_SCAN = "android:query-arg-defer-scan";
+  }
+
+}
+
diff --git a/32/system/api/framework-permission-removed.txt b/32/system/api/framework-permission-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-permission-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-permission-s-removed.txt b/32/system/api/framework-permission-s-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-permission-s-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-permission-s.txt b/32/system/api/framework-permission-s.txt
new file mode 100644
index 0000000..92c85e2
--- /dev/null
+++ b/32/system/api/framework-permission-s.txt
@@ -0,0 +1,43 @@
+// Signature format: 2.0
+package android.app.role {
+
+  public interface OnRoleHoldersChangedListener {
+    method public void onRoleHoldersChanged(@NonNull String, @NonNull android.os.UserHandle);
+  }
+
+  @Deprecated public abstract class RoleControllerService extends android.app.Service {
+    ctor @Deprecated public RoleControllerService();
+    method @Deprecated @WorkerThread public abstract boolean onAddRoleHolder(@NonNull String, @NonNull String, int);
+    method @Deprecated @Nullable public final android.os.IBinder onBind(@Nullable android.content.Intent);
+    method @Deprecated @WorkerThread public abstract boolean onClearRoleHolders(@NonNull String, int);
+    method @Deprecated @WorkerThread public abstract boolean onGrantDefaultRoles();
+    method @Deprecated public abstract boolean onIsApplicationQualifiedForRole(@NonNull String, @NonNull String);
+    method @Deprecated public boolean onIsApplicationVisibleForRole(@NonNull String, @NonNull String);
+    method @Deprecated public abstract boolean onIsRoleVisible(@NonNull String);
+    method @Deprecated @WorkerThread public abstract boolean onRemoveRoleHolder(@NonNull String, @NonNull String, int);
+    field @Deprecated public static final String SERVICE_INTERFACE = "android.app.role.RoleControllerService";
+  }
+
+  public final class RoleManager {
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void addOnRoleHoldersChangedListenerAsUser(@NonNull java.util.concurrent.Executor, @NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void addRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean addRoleHolderFromController(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void clearRoleHoldersAsUser(@NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @NonNull @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public java.util.List<java.lang.String> getHeldRolesFromController(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHolders(@NonNull String);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public java.util.List<java.lang.String> getRoleHoldersAsUser(@NonNull String, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isApplicationVisibleForRole(@NonNull String, @NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public boolean isBypassingRoleQualification();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void isRoleVisible(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_ROLE_HOLDERS) public void removeOnRoleHoldersChangedListenerAsUser(@NonNull android.app.role.OnRoleHoldersChangedListener, @NonNull android.os.UserHandle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ROLE_HOLDERS) public void removeRoleHolderAsUser(@NonNull String, @NonNull String, int, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+    method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public boolean removeRoleHolderFromController(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.BYPASS_ROLE_QUALIFICATION) public void setBypassingRoleQualification(boolean);
+    method @Deprecated @RequiresPermission("com.android.permissioncontroller.permission.MANAGE_ROLES_FROM_CONTROLLER") public void setRoleNamesFromController(@NonNull java.util.List<java.lang.String>);
+    field public static final int MANAGE_HOLDERS_FLAG_DONT_KILL_APP = 1; // 0x1
+    field public static final String ROLE_SYSTEM_ACTIVITY_RECOGNIZER = "android.app.role.SYSTEM_ACTIVITY_RECOGNIZER";
+    field public static final String ROLE_SYSTEM_WELLBEING = "android.app.role.SYSTEM_WELLBEING";
+  }
+
+}
+
diff --git a/32/system/api/framework-permission.txt b/32/system/api/framework-permission.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-permission.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-scheduling-removed.txt b/32/system/api/framework-scheduling-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-scheduling-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-scheduling.txt b/32/system/api/framework-scheduling.txt
new file mode 100644
index 0000000..5b76cd4
--- /dev/null
+++ b/32/system/api/framework-scheduling.txt
@@ -0,0 +1,26 @@
+// Signature format: 2.0
+package android.scheduling {
+
+  public final class RebootReadinessManager {
+    method @RequiresPermission(android.Manifest.permission.SIGNAL_REBOOT_READINESS) public void addRequestRebootReadinessStatusListener(@NonNull java.util.concurrent.Executor, @NonNull android.scheduling.RebootReadinessManager.RequestRebootReadinessStatusListener);
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public void cancelPendingReboot();
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public boolean isReadyToReboot();
+    method @RequiresPermission(android.Manifest.permission.REBOOT) public void markRebootPending();
+    method @RequiresPermission(android.Manifest.permission.SIGNAL_REBOOT_READINESS) public void removeRequestRebootReadinessStatusListener(@NonNull android.scheduling.RebootReadinessManager.RequestRebootReadinessStatusListener);
+    field public static final String ACTION_REBOOT_READY = "android.scheduling.action.REBOOT_READY";
+    field public static final String EXTRA_IS_READY_TO_REBOOT = "android.scheduling.extra.IS_READY_TO_REBOOT";
+  }
+
+  public static final class RebootReadinessManager.RebootReadinessStatus {
+    ctor public RebootReadinessManager.RebootReadinessStatus(boolean, long, @NonNull String);
+    method public long getEstimatedFinishTime();
+    method @NonNull public String getLogSubsystemName();
+    method public boolean isReadyToReboot();
+  }
+
+  public static interface RebootReadinessManager.RequestRebootReadinessStatusListener {
+    method @NonNull public android.scheduling.RebootReadinessManager.RebootReadinessStatus onRequestRebootReadinessStatus();
+  }
+
+}
+
diff --git a/32/system/api/framework-sdkextensions-removed.txt b/32/system/api/framework-sdkextensions-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-sdkextensions-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-sdkextensions.txt b/32/system/api/framework-sdkextensions.txt
new file mode 100644
index 0000000..180afea
--- /dev/null
+++ b/32/system/api/framework-sdkextensions.txt
@@ -0,0 +1,10 @@
+// Signature format: 2.0
+package android.os.ext {
+
+  public class SdkExtensions {
+    method @NonNull public static java.util.Map<java.lang.Integer,java.lang.Integer> getAllExtensionVersions();
+    method public static int getExtensionVersion(int);
+  }
+
+}
+
diff --git a/32/system/api/framework-statsd-removed.txt b/32/system/api/framework-statsd-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-statsd-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-statsd.txt b/32/system/api/framework-statsd.txt
new file mode 100644
index 0000000..6fbdf0d
--- /dev/null
+++ b/32/system/api/framework-statsd.txt
@@ -0,0 +1,119 @@
+// Signature format: 2.0
+package android.app {
+
+  public final class StatsManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void addConfig(long, byte[]) throws android.app.StatsManager.StatsUnavailableException;
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean addConfiguration(long, byte[]);
+    method @RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM) public void clearPullAtomCallback(int);
+    method @Deprecated @Nullable @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getData(long);
+    method @Deprecated @Nullable @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getMetadata();
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] getRegisteredExperimentIds() throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getReports(long) throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public byte[] getStatsMetadata() throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void removeConfig(long) throws android.app.StatsManager.StatsUnavailableException;
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean removeConfiguration(long);
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public long[] setActiveConfigsChangedOperation(@Nullable android.app.PendingIntent) throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void setBroadcastSubscriber(android.app.PendingIntent, long, long) throws android.app.StatsManager.StatsUnavailableException;
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setBroadcastSubscriber(long, long, android.app.PendingIntent);
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public boolean setDataFetchOperation(long, android.app.PendingIntent);
+    method @RequiresPermission(allOf={android.Manifest.permission.DUMP, android.Manifest.permission.PACKAGE_USAGE_STATS}) public void setFetchReportsOperation(android.app.PendingIntent, long) throws android.app.StatsManager.StatsUnavailableException;
+    method @RequiresPermission(android.Manifest.permission.REGISTER_STATS_PULL_ATOM) public void setPullAtomCallback(int, @Nullable android.app.StatsManager.PullAtomMetadata, @NonNull java.util.concurrent.Executor, @NonNull android.app.StatsManager.StatsPullAtomCallback);
+    field public static final String ACTION_STATSD_STARTED = "android.app.action.STATSD_STARTED";
+    field public static final String EXTRA_STATS_ACTIVE_CONFIG_KEYS = "android.app.extra.STATS_ACTIVE_CONFIG_KEYS";
+    field public static final String EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES = "android.app.extra.STATS_BROADCAST_SUBSCRIBER_COOKIES";
+    field public static final String EXTRA_STATS_CONFIG_KEY = "android.app.extra.STATS_CONFIG_KEY";
+    field public static final String EXTRA_STATS_CONFIG_UID = "android.app.extra.STATS_CONFIG_UID";
+    field public static final String EXTRA_STATS_DIMENSIONS_VALUE = "android.app.extra.STATS_DIMENSIONS_VALUE";
+    field public static final String EXTRA_STATS_SUBSCRIPTION_ID = "android.app.extra.STATS_SUBSCRIPTION_ID";
+    field public static final String EXTRA_STATS_SUBSCRIPTION_RULE_ID = "android.app.extra.STATS_SUBSCRIPTION_RULE_ID";
+    field public static final int PULL_SKIP = 1; // 0x1
+    field public static final int PULL_SUCCESS = 0; // 0x0
+  }
+
+  public static class StatsManager.PullAtomMetadata {
+    method @Nullable public int[] getAdditiveFields();
+    method public long getCoolDownMillis();
+    method public long getTimeoutMillis();
+  }
+
+  public static class StatsManager.PullAtomMetadata.Builder {
+    ctor public StatsManager.PullAtomMetadata.Builder();
+    method @NonNull public android.app.StatsManager.PullAtomMetadata build();
+    method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setAdditiveFields(@NonNull int[]);
+    method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setCoolDownMillis(long);
+    method @NonNull public android.app.StatsManager.PullAtomMetadata.Builder setTimeoutMillis(long);
+  }
+
+  public static interface StatsManager.StatsPullAtomCallback {
+    method public int onPullAtom(int, @NonNull java.util.List<android.util.StatsEvent>);
+  }
+
+  public static class StatsManager.StatsUnavailableException extends android.util.AndroidException {
+    ctor public StatsManager.StatsUnavailableException(String);
+    ctor public StatsManager.StatsUnavailableException(String, Throwable);
+  }
+
+}
+
+package android.os {
+
+  public final class StatsDimensionsValue implements android.os.Parcelable {
+    method public int describeContents();
+    method public boolean getBooleanValue();
+    method public int getField();
+    method public float getFloatValue();
+    method public int getIntValue();
+    method public long getLongValue();
+    method public String getStringValue();
+    method public java.util.List<android.os.StatsDimensionsValue> getTupleValueList();
+    method public int getValueType();
+    method public boolean isValueType(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int BOOLEAN_VALUE_TYPE = 5; // 0x5
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.StatsDimensionsValue> CREATOR;
+    field public static final int FLOAT_VALUE_TYPE = 6; // 0x6
+    field public static final int INT_VALUE_TYPE = 3; // 0x3
+    field public static final int LONG_VALUE_TYPE = 4; // 0x4
+    field public static final int STRING_VALUE_TYPE = 2; // 0x2
+    field public static final int TUPLE_VALUE_TYPE = 7; // 0x7
+  }
+
+}
+
+package android.util {
+
+  public final class StatsEvent {
+    method @NonNull public static android.util.StatsEvent.Builder newBuilder();
+  }
+
+  public static final class StatsEvent.Builder {
+    method @NonNull public android.util.StatsEvent.Builder addBooleanAnnotation(byte, boolean);
+    method @NonNull public android.util.StatsEvent.Builder addIntAnnotation(byte, int);
+    method @NonNull public android.util.StatsEvent build();
+    method @NonNull public android.util.StatsEvent.Builder setAtomId(int);
+    method @NonNull public android.util.StatsEvent.Builder usePooledBuffer();
+    method @NonNull public android.util.StatsEvent.Builder writeAttributionChain(@NonNull int[], @NonNull String[]);
+    method @NonNull public android.util.StatsEvent.Builder writeBoolean(boolean);
+    method @NonNull public android.util.StatsEvent.Builder writeByteArray(@NonNull byte[]);
+    method @NonNull public android.util.StatsEvent.Builder writeFloat(float);
+    method @NonNull public android.util.StatsEvent.Builder writeInt(int);
+    method @NonNull public android.util.StatsEvent.Builder writeKeyValuePairs(@Nullable android.util.SparseIntArray, @Nullable android.util.SparseLongArray, @Nullable android.util.SparseArray<java.lang.String>, @Nullable android.util.SparseArray<java.lang.Float>);
+    method @NonNull public android.util.StatsEvent.Builder writeLong(long);
+    method @NonNull public android.util.StatsEvent.Builder writeString(@NonNull String);
+  }
+
+  public final class StatsLog {
+    method public static void write(@NonNull android.util.StatsEvent);
+    method @Deprecated public static void writeRaw(@NonNull byte[], int);
+    field public static final byte ANNOTATION_ID_DEFAULT_STATE = 6; // 0x6
+    field public static final byte ANNOTATION_ID_EXCLUSIVE_STATE = 4; // 0x4
+    field public static final byte ANNOTATION_ID_IS_UID = 1; // 0x1
+    field public static final byte ANNOTATION_ID_PRIMARY_FIELD = 3; // 0x3
+    field public static final byte ANNOTATION_ID_PRIMARY_FIELD_FIRST_UID = 5; // 0x5
+    field public static final byte ANNOTATION_ID_STATE_NESTED = 8; // 0x8
+    field public static final byte ANNOTATION_ID_TRIGGER_STATE_RESET = 7; // 0x7
+    field public static final byte ANNOTATION_ID_TRUNCATE_TIMESTAMP = 2; // 0x2
+  }
+
+}
+
diff --git a/32/system/api/framework-tethering-removed.txt b/32/system/api/framework-tethering-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/framework-tethering-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/framework-tethering.txt b/32/system/api/framework-tethering.txt
new file mode 100644
index 0000000..844ff64
--- /dev/null
+++ b/32/system/api/framework-tethering.txt
@@ -0,0 +1,117 @@
+// Signature format: 2.0
+package android.net {
+
+  public final class TetheredClient implements android.os.Parcelable {
+    ctor public TetheredClient(@NonNull android.net.MacAddress, @NonNull java.util.Collection<android.net.TetheredClient.AddressInfo>, int);
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.TetheredClient.AddressInfo> getAddresses();
+    method @NonNull public android.net.MacAddress getMacAddress();
+    method public int getTetheringType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheredClient> CREATOR;
+  }
+
+  public static final class TetheredClient.AddressInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.LinkAddress getAddress();
+    method @Nullable public String getHostname();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheredClient.AddressInfo> CREATOR;
+  }
+
+  public final class TetheringInterface implements android.os.Parcelable {
+    ctor public TetheringInterface(int, @NonNull String);
+    method public int describeContents();
+    method @NonNull public String getInterface();
+    method public int getType();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.TetheringInterface> CREATOR;
+  }
+
+  public class TetheringManager {
+    method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.TetheringEventCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void requestLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.OnTetheringEntitlementResultListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void startTethering(@NonNull android.net.TetheringManager.TetheringRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.TetheringManager.StartTetheringCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void stopAllTethering();
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public void stopTethering(int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.ACCESS_NETWORK_STATE}) public void unregisterTetheringEventCallback(@NonNull android.net.TetheringManager.TetheringEventCallback);
+    field @Deprecated public static final String ACTION_TETHER_STATE_CHANGED = "android.net.conn.TETHER_STATE_CHANGED";
+    field public static final int CONNECTIVITY_SCOPE_GLOBAL = 1; // 0x1
+    field public static final int CONNECTIVITY_SCOPE_LOCAL = 2; // 0x2
+    field public static final String EXTRA_ACTIVE_LOCAL_ONLY = "android.net.extra.ACTIVE_LOCAL_ONLY";
+    field public static final String EXTRA_ACTIVE_TETHER = "tetherArray";
+    field public static final String EXTRA_AVAILABLE_TETHER = "availableArray";
+    field public static final String EXTRA_ERRORED_TETHER = "erroredArray";
+    field public static final int TETHERING_BLUETOOTH = 2; // 0x2
+    field public static final int TETHERING_ETHERNET = 5; // 0x5
+    field public static final int TETHERING_INVALID = -1; // 0xffffffff
+    field public static final int TETHERING_NCM = 4; // 0x4
+    field public static final int TETHERING_USB = 1; // 0x1
+    field public static final int TETHERING_WIFI = 0; // 0x0
+    field public static final int TETHERING_WIFI_P2P = 3; // 0x3
+    field public static final int TETHER_ERROR_DHCPSERVER_ERROR = 12; // 0xc
+    field public static final int TETHER_ERROR_DISABLE_FORWARDING_ERROR = 9; // 0x9
+    field public static final int TETHER_ERROR_ENABLE_FORWARDING_ERROR = 8; // 0x8
+    field public static final int TETHER_ERROR_ENTITLEMENT_UNKNOWN = 13; // 0xd
+    field public static final int TETHER_ERROR_IFACE_CFG_ERROR = 10; // 0xa
+    field public static final int TETHER_ERROR_INTERNAL_ERROR = 5; // 0x5
+    field public static final int TETHER_ERROR_NO_ACCESS_TETHERING_PERMISSION = 15; // 0xf
+    field public static final int TETHER_ERROR_NO_CHANGE_TETHERING_PERMISSION = 14; // 0xe
+    field public static final int TETHER_ERROR_NO_ERROR = 0; // 0x0
+    field public static final int TETHER_ERROR_PROVISIONING_FAILED = 11; // 0xb
+    field public static final int TETHER_ERROR_SERVICE_UNAVAIL = 2; // 0x2
+    field public static final int TETHER_ERROR_TETHER_IFACE_ERROR = 6; // 0x6
+    field public static final int TETHER_ERROR_UNAVAIL_IFACE = 4; // 0x4
+    field public static final int TETHER_ERROR_UNKNOWN_IFACE = 1; // 0x1
+    field public static final int TETHER_ERROR_UNKNOWN_TYPE = 16; // 0x10
+    field public static final int TETHER_ERROR_UNSUPPORTED = 3; // 0x3
+    field public static final int TETHER_ERROR_UNTETHER_IFACE_ERROR = 7; // 0x7
+    field public static final int TETHER_HARDWARE_OFFLOAD_FAILED = 2; // 0x2
+    field public static final int TETHER_HARDWARE_OFFLOAD_STARTED = 1; // 0x1
+    field public static final int TETHER_HARDWARE_OFFLOAD_STOPPED = 0; // 0x0
+  }
+
+  public static interface TetheringManager.OnTetheringEntitlementResultListener {
+    method public void onTetheringEntitlementResult(int);
+  }
+
+  public static interface TetheringManager.StartTetheringCallback {
+    method public default void onTetheringFailed(int);
+    method public default void onTetheringStarted();
+  }
+
+  public static interface TetheringManager.TetheringEventCallback {
+    method public default void onClientsChanged(@NonNull java.util.Collection<android.net.TetheredClient>);
+    method public default void onError(@NonNull String, int);
+    method public default void onError(@NonNull android.net.TetheringInterface, int);
+    method public default void onLocalOnlyInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public default void onLocalOnlyInterfacesChanged(@NonNull java.util.Set<android.net.TetheringInterface>);
+    method public default void onOffloadStatusChanged(int);
+    method public default void onTetherableInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public default void onTetherableInterfacesChanged(@NonNull java.util.Set<android.net.TetheringInterface>);
+    method public default void onTetheredInterfacesChanged(@NonNull java.util.List<java.lang.String>);
+    method public default void onTetheredInterfacesChanged(@NonNull java.util.Set<android.net.TetheringInterface>);
+    method public default void onTetheringSupported(boolean);
+    method public default void onUpstreamChanged(@Nullable android.net.Network);
+  }
+
+  public static class TetheringManager.TetheringRequest {
+    method @Nullable public android.net.LinkAddress getClientStaticIpv4Address();
+    method public int getConnectivityScope();
+    method @Nullable public android.net.LinkAddress getLocalIpv4Address();
+    method public boolean getShouldShowEntitlementUi();
+    method public int getTetheringType();
+    method public boolean isExemptFromEntitlementCheck();
+  }
+
+  public static class TetheringManager.TetheringRequest.Builder {
+    ctor public TetheringManager.TetheringRequest.Builder(int);
+    method @NonNull public android.net.TetheringManager.TetheringRequest build();
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setConnectivityScope(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setExemptFromEntitlementCheck(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setShouldShowEntitlementUi(boolean);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public android.net.TetheringManager.TetheringRequest.Builder setStaticIpv4Addresses(@NonNull android.net.LinkAddress, @NonNull android.net.LinkAddress);
+  }
+
+}
+
diff --git a/32/system/api/framework-wifi-removed.txt b/32/system/api/framework-wifi-removed.txt
new file mode 100644
index 0000000..a2d0dff
--- /dev/null
+++ b/32/system/api/framework-wifi-removed.txt
@@ -0,0 +1,16 @@
+// Signature format: 2.0
+package android.net.wifi {
+
+  @Deprecated public class BatchedScanResult implements android.os.Parcelable {
+    ctor public BatchedScanResult();
+    ctor public BatchedScanResult(android.net.wifi.BatchedScanResult);
+    field public final java.util.List<android.net.wifi.ScanResult> scanResults;
+    field public boolean truncated;
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    field public boolean untrusted;
+  }
+
+}
+
diff --git a/32/system/api/framework-wifi.txt b/32/system/api/framework-wifi.txt
new file mode 100644
index 0000000..dda7481
--- /dev/null
+++ b/32/system/api/framework-wifi.txt
@@ -0,0 +1,1183 @@
+// Signature format: 2.0
+package android.net.wifi {
+
+  public final class CoexUnsafeChannel implements android.os.Parcelable {
+    ctor public CoexUnsafeChannel(int, int);
+    ctor public CoexUnsafeChannel(int, int, int);
+    method public int getBand();
+    method public int getChannel();
+    method public int getPowerCapDbm();
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.CoexUnsafeChannel> CREATOR;
+    field public static final int POWER_CAP_NONE = 2147483647; // 0x7fffffff
+  }
+
+  public abstract class EasyConnectStatusCallback {
+    ctor public EasyConnectStatusCallback();
+    method public void onBootstrapUriGenerated(@NonNull android.net.Uri);
+    method public abstract void onConfiguratorSuccess(int);
+    method public abstract void onEnrolleeSuccess(int);
+    method public void onFailure(int);
+    method public void onFailure(int, @Nullable String, @NonNull android.util.SparseArray<int[]>, @NonNull int[]);
+    method public abstract void onProgress(int);
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_AUTHENTICATION_SUCCESS = 0; // 0x0
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_CONFIGURATION_ACCEPTED = 3; // 0x3
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_CONFIGURATION_SENT_WAITING_RESPONSE = 2; // 0x2
+    field public static final int EASY_CONNECT_EVENT_PROGRESS_RESPONSE_PENDING = 1; // 0x1
+    field public static final int EASY_CONNECT_EVENT_SUCCESS_CONFIGURATION_APPLIED = 1; // 0x1
+    field public static final int EASY_CONNECT_EVENT_SUCCESS_CONFIGURATION_SENT = 0; // 0x0
+  }
+
+  @Deprecated public class RttManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void disableResponder(android.net.wifi.RttManager.ResponderCallback);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void enableResponder(android.net.wifi.RttManager.ResponderCallback);
+    method @Deprecated public android.net.wifi.RttManager.Capabilities getCapabilities();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public android.net.wifi.RttManager.RttCapabilities getRttCapabilities();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startRanging(android.net.wifi.RttManager.RttParams[], android.net.wifi.RttManager.RttListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void stopRanging(android.net.wifi.RttManager.RttListener);
+    field @Deprecated public static final int BASE = 160256; // 0x27200
+    field @Deprecated public static final int CMD_OP_ABORTED = 160260; // 0x27204
+    field @Deprecated public static final int CMD_OP_DISABLE_RESPONDER = 160262; // 0x27206
+    field @Deprecated public static final int CMD_OP_ENABLE_RESPONDER = 160261; // 0x27205
+    field @Deprecated public static final int CMD_OP_ENALBE_RESPONDER_FAILED = 160264; // 0x27208
+    field @Deprecated public static final int CMD_OP_ENALBE_RESPONDER_SUCCEEDED = 160263; // 0x27207
+    field @Deprecated public static final int CMD_OP_FAILED = 160258; // 0x27202
+    field @Deprecated public static final int CMD_OP_START_RANGING = 160256; // 0x27200
+    field @Deprecated public static final int CMD_OP_STOP_RANGING = 160257; // 0x27201
+    field @Deprecated public static final int CMD_OP_SUCCEEDED = 160259; // 0x27203
+    field @Deprecated public static final String DESCRIPTION_KEY = "android.net.wifi.RttManager.Description";
+    field @Deprecated public static final int PREAMBLE_HT = 2; // 0x2
+    field @Deprecated public static final int PREAMBLE_LEGACY = 1; // 0x1
+    field @Deprecated public static final int PREAMBLE_VHT = 4; // 0x4
+    field @Deprecated public static final int REASON_INITIATOR_NOT_ALLOWED_WHEN_RESPONDER_ON = -6; // 0xfffffffa
+    field @Deprecated public static final int REASON_INVALID_LISTENER = -3; // 0xfffffffd
+    field @Deprecated public static final int REASON_INVALID_REQUEST = -4; // 0xfffffffc
+    field @Deprecated public static final int REASON_NOT_AVAILABLE = -2; // 0xfffffffe
+    field @Deprecated public static final int REASON_PERMISSION_DENIED = -5; // 0xfffffffb
+    field @Deprecated public static final int REASON_UNSPECIFIED = -1; // 0xffffffff
+    field @Deprecated public static final int RTT_BW_10_SUPPORT = 2; // 0x2
+    field @Deprecated public static final int RTT_BW_160_SUPPORT = 32; // 0x20
+    field @Deprecated public static final int RTT_BW_20_SUPPORT = 4; // 0x4
+    field @Deprecated public static final int RTT_BW_40_SUPPORT = 8; // 0x8
+    field @Deprecated public static final int RTT_BW_5_SUPPORT = 1; // 0x1
+    field @Deprecated public static final int RTT_BW_80_SUPPORT = 16; // 0x10
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_10 = 6; // 0x6
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_160 = 3; // 0x3
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_20 = 0; // 0x0
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_40 = 1; // 0x1
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_5 = 5; // 0x5
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_80 = 2; // 0x2
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_80P80 = 4; // 0x4
+    field @Deprecated public static final int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; // 0xffffffff
+    field @Deprecated public static final int RTT_PEER_NAN = 5; // 0x5
+    field @Deprecated public static final int RTT_PEER_P2P_CLIENT = 4; // 0x4
+    field @Deprecated public static final int RTT_PEER_P2P_GO = 3; // 0x3
+    field @Deprecated public static final int RTT_PEER_TYPE_AP = 1; // 0x1
+    field @Deprecated public static final int RTT_PEER_TYPE_STA = 2; // 0x2
+    field @Deprecated public static final int RTT_PEER_TYPE_UNSPECIFIED = 0; // 0x0
+    field @Deprecated public static final int RTT_STATUS_ABORTED = 8; // 0x8
+    field @Deprecated public static final int RTT_STATUS_FAILURE = 1; // 0x1
+    field @Deprecated public static final int RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6; // 0x6
+    field @Deprecated public static final int RTT_STATUS_FAIL_BUSY_TRY_LATER = 12; // 0xc
+    field @Deprecated public static final int RTT_STATUS_FAIL_FTM_PARAM_OVERRIDE = 15; // 0xf
+    field @Deprecated public static final int RTT_STATUS_FAIL_INVALID_TS = 9; // 0x9
+    field @Deprecated public static final int RTT_STATUS_FAIL_NOT_SCHEDULED_YET = 4; // 0x4
+    field @Deprecated public static final int RTT_STATUS_FAIL_NO_CAPABILITY = 7; // 0x7
+    field @Deprecated public static final int RTT_STATUS_FAIL_NO_RSP = 2; // 0x2
+    field @Deprecated public static final int RTT_STATUS_FAIL_PROTOCOL = 10; // 0xa
+    field @Deprecated public static final int RTT_STATUS_FAIL_REJECTED = 3; // 0x3
+    field @Deprecated public static final int RTT_STATUS_FAIL_SCHEDULE = 11; // 0xb
+    field @Deprecated public static final int RTT_STATUS_FAIL_TM_TIMEOUT = 5; // 0x5
+    field @Deprecated public static final int RTT_STATUS_INVALID_REQ = 13; // 0xd
+    field @Deprecated public static final int RTT_STATUS_NO_WIFI = 14; // 0xe
+    field @Deprecated public static final int RTT_STATUS_SUCCESS = 0; // 0x0
+    field @Deprecated public static final int RTT_TYPE_11_MC = 4; // 0x4
+    field @Deprecated public static final int RTT_TYPE_11_V = 2; // 0x2
+    field @Deprecated public static final int RTT_TYPE_ONE_SIDED = 1; // 0x1
+    field @Deprecated public static final int RTT_TYPE_TWO_SIDED = 2; // 0x2
+    field @Deprecated public static final int RTT_TYPE_UNSPECIFIED = 0; // 0x0
+  }
+
+  @Deprecated public class RttManager.Capabilities {
+    ctor @Deprecated public RttManager.Capabilities();
+    field @Deprecated public int supportedPeerType;
+    field @Deprecated public int supportedType;
+  }
+
+  @Deprecated public static class RttManager.ParcelableRttParams implements android.os.Parcelable {
+    field @Deprecated @NonNull public android.net.wifi.RttManager.RttParams[] mParams;
+  }
+
+  @Deprecated public static class RttManager.ParcelableRttResults implements android.os.Parcelable {
+    ctor @Deprecated public RttManager.ParcelableRttResults(android.net.wifi.RttManager.RttResult[]);
+    field @Deprecated public android.net.wifi.RttManager.RttResult[] mResults;
+  }
+
+  @Deprecated public abstract static class RttManager.ResponderCallback {
+    ctor @Deprecated public RttManager.ResponderCallback();
+    method @Deprecated public abstract void onResponderEnableFailure(int);
+    method @Deprecated public abstract void onResponderEnabled(android.net.wifi.RttManager.ResponderConfig);
+  }
+
+  @Deprecated public static class RttManager.ResponderConfig implements android.os.Parcelable {
+    ctor @Deprecated public RttManager.ResponderConfig();
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.RttManager.ResponderConfig> CREATOR;
+    field @Deprecated public int centerFreq0;
+    field @Deprecated public int centerFreq1;
+    field @Deprecated public int channelWidth;
+    field @Deprecated public int frequency;
+    field @Deprecated public String macAddress;
+    field @Deprecated public int preamble;
+  }
+
+  @Deprecated public static class RttManager.RttCapabilities implements android.os.Parcelable {
+    ctor @Deprecated public RttManager.RttCapabilities();
+    field @Deprecated public int bwSupported;
+    field @Deprecated public boolean lciSupported;
+    field @Deprecated public boolean lcrSupported;
+    field @Deprecated public int mcVersion;
+    field @Deprecated public boolean oneSidedRttSupported;
+    field @Deprecated public int preambleSupported;
+    field @Deprecated public boolean responderSupported;
+    field @Deprecated public boolean secureRttSupported;
+    field @Deprecated public boolean supportedPeerType;
+    field @Deprecated public boolean supportedType;
+    field @Deprecated public boolean twoSided11McRttSupported;
+  }
+
+  @Deprecated public static interface RttManager.RttListener {
+    method @Deprecated public void onAborted();
+    method @Deprecated public void onFailure(int, String);
+    method @Deprecated public void onSuccess(android.net.wifi.RttManager.RttResult[]);
+  }
+
+  @Deprecated public static class RttManager.RttParams {
+    ctor @Deprecated public RttManager.RttParams();
+    field @Deprecated public boolean LCIRequest;
+    field @Deprecated public boolean LCRRequest;
+    field @Deprecated public int bandwidth;
+    field @Deprecated public String bssid;
+    field @Deprecated public int burstTimeout;
+    field @Deprecated public int centerFreq0;
+    field @Deprecated public int centerFreq1;
+    field @Deprecated public int channelWidth;
+    field @Deprecated public int deviceType;
+    field @Deprecated public int frequency;
+    field @Deprecated public int interval;
+    field @Deprecated public int numRetriesPerFTMR;
+    field @Deprecated public int numRetriesPerMeasurementFrame;
+    field @Deprecated public int numSamplesPerBurst;
+    field @Deprecated public int num_retries;
+    field @Deprecated public int num_samples;
+    field @Deprecated public int numberBurst;
+    field @Deprecated public int preamble;
+    field @Deprecated public int requestType;
+    field @Deprecated public boolean secure;
+  }
+
+  @Deprecated public static class RttManager.RttResult {
+    ctor @Deprecated public RttManager.RttResult();
+    field @Deprecated public android.net.wifi.RttManager.WifiInformationElement LCI;
+    field @Deprecated public android.net.wifi.RttManager.WifiInformationElement LCR;
+    field @Deprecated public String bssid;
+    field @Deprecated public int burstDuration;
+    field @Deprecated public int burstNumber;
+    field @Deprecated public int distance;
+    field @Deprecated public int distanceSpread;
+    field @Deprecated public int distanceStandardDeviation;
+    field @Deprecated public int distance_cm;
+    field @Deprecated public int distance_sd_cm;
+    field @Deprecated public int distance_spread_cm;
+    field @Deprecated public int frameNumberPerBurstPeer;
+    field @Deprecated public int measurementFrameNumber;
+    field @Deprecated public int measurementType;
+    field @Deprecated public int negotiatedBurstNum;
+    field @Deprecated public int requestType;
+    field @Deprecated public int retryAfterDuration;
+    field @Deprecated public int rssi;
+    field @Deprecated public int rssiSpread;
+    field @Deprecated public int rssi_spread;
+    field @Deprecated public long rtt;
+    field @Deprecated public long rttSpread;
+    field @Deprecated public long rttStandardDeviation;
+    field @Deprecated public long rtt_ns;
+    field @Deprecated public long rtt_sd_ns;
+    field @Deprecated public long rtt_spread_ns;
+    field @Deprecated public int rxRate;
+    field @Deprecated public boolean secure;
+    field @Deprecated public int status;
+    field @Deprecated public int successMeasurementFrameNumber;
+    field @Deprecated public long ts;
+    field @Deprecated public int txRate;
+    field @Deprecated public int tx_rate;
+  }
+
+  @Deprecated public static class RttManager.WifiInformationElement {
+    ctor @Deprecated public RttManager.WifiInformationElement();
+    field @Deprecated public byte[] data;
+    field @Deprecated public byte id;
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    field public static final int CIPHER_BIP_CMAC_256 = 9; // 0x9
+    field public static final int CIPHER_BIP_GMAC_128 = 7; // 0x7
+    field public static final int CIPHER_BIP_GMAC_256 = 8; // 0x8
+    field public static final int CIPHER_CCMP = 3; // 0x3
+    field public static final int CIPHER_GCMP_128 = 6; // 0x6
+    field public static final int CIPHER_GCMP_256 = 4; // 0x4
+    field public static final int CIPHER_NONE = 0; // 0x0
+    field public static final int CIPHER_NO_GROUP_ADDRESSED = 1; // 0x1
+    field public static final int CIPHER_SMS4 = 5; // 0x5
+    field public static final int CIPHER_TKIP = 2; // 0x2
+    field public static final int KEY_MGMT_EAP = 2; // 0x2
+    field public static final int KEY_MGMT_EAP_SHA256 = 6; // 0x6
+    field public static final int KEY_MGMT_EAP_SUITE_B_192 = 10; // 0xa
+    field public static final int KEY_MGMT_FT_EAP = 4; // 0x4
+    field public static final int KEY_MGMT_FT_PSK = 3; // 0x3
+    field public static final int KEY_MGMT_FT_SAE = 11; // 0xb
+    field public static final int KEY_MGMT_NONE = 0; // 0x0
+    field public static final int KEY_MGMT_OSEN = 7; // 0x7
+    field public static final int KEY_MGMT_OWE = 9; // 0x9
+    field public static final int KEY_MGMT_OWE_TRANSITION = 12; // 0xc
+    field public static final int KEY_MGMT_PSK = 1; // 0x1
+    field public static final int KEY_MGMT_PSK_SHA256 = 5; // 0x5
+    field public static final int KEY_MGMT_SAE = 8; // 0x8
+    field public static final int KEY_MGMT_WAPI_CERT = 14; // 0xe
+    field public static final int KEY_MGMT_WAPI_PSK = 13; // 0xd
+    field public static final int PROTOCOL_NONE = 0; // 0x0
+    field public static final int PROTOCOL_OSEN = 3; // 0x3
+    field public static final int PROTOCOL_RSN = 2; // 0x2
+    field public static final int PROTOCOL_WAPI = 4; // 0x4
+    field public static final int PROTOCOL_WPA = 1; // 0x1
+  }
+
+  public final class SoftApCapability implements android.os.Parcelable {
+    method public boolean areFeaturesSupported(long);
+    method public int describeContents();
+    method public int getMaxSupportedClients();
+    method @NonNull public int[] getSupportedChannelList(int);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.SoftApCapability> CREATOR;
+    field public static final long SOFTAP_FEATURE_ACS_OFFLOAD = 1L; // 0x1L
+    field public static final long SOFTAP_FEATURE_BAND_24G_SUPPORTED = 32L; // 0x20L
+    field public static final long SOFTAP_FEATURE_BAND_5G_SUPPORTED = 64L; // 0x40L
+    field public static final long SOFTAP_FEATURE_BAND_60G_SUPPORTED = 256L; // 0x100L
+    field public static final long SOFTAP_FEATURE_BAND_6G_SUPPORTED = 128L; // 0x80L
+    field public static final long SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT = 2L; // 0x2L
+    field public static final long SOFTAP_FEATURE_IEEE80211_AX = 16L; // 0x10L
+    field public static final long SOFTAP_FEATURE_MAC_ADDRESS_CUSTOMIZATION = 8L; // 0x8L
+    field public static final long SOFTAP_FEATURE_WPA3_SAE = 4L; // 0x4L
+  }
+
+  public final class SoftApConfiguration implements android.os.Parcelable {
+    method @NonNull public java.util.List<android.net.MacAddress> getAllowedClientList();
+    method @Deprecated public int getBand();
+    method @NonNull public java.util.List<android.net.MacAddress> getBlockedClientList();
+    method @Deprecated public int getChannel();
+    method @NonNull public android.util.SparseIntArray getChannels();
+    method public int getMacRandomizationSetting();
+    method public int getMaxNumberOfClients();
+    method public long getShutdownTimeoutMillis();
+    method public boolean isAutoShutdownEnabled();
+    method public boolean isBridgedModeOpportunisticShutdownEnabled();
+    method public boolean isClientControlByUserEnabled();
+    method public boolean isIeee80211axEnabled();
+    method public boolean isUserConfiguration();
+    method @Nullable public android.net.wifi.WifiConfiguration toWifiConfiguration();
+    field public static final int BAND_2GHZ = 1; // 0x1
+    field public static final int BAND_5GHZ = 2; // 0x2
+    field public static final int BAND_60GHZ = 8; // 0x8
+    field public static final int BAND_6GHZ = 4; // 0x4
+    field @Deprecated public static final int BAND_ANY = 7; // 0x7
+    field public static final int RANDOMIZATION_NONE = 0; // 0x0
+    field public static final int RANDOMIZATION_PERSISTENT = 1; // 0x1
+  }
+
+  public static final class SoftApConfiguration.Builder {
+    ctor public SoftApConfiguration.Builder();
+    ctor public SoftApConfiguration.Builder(@NonNull android.net.wifi.SoftApConfiguration);
+    method @NonNull public android.net.wifi.SoftApConfiguration build();
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setAllowedClientList(@NonNull java.util.List<android.net.MacAddress>);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setAutoShutdownEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBand(int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBands(@NonNull int[]);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBlockedClientList(@NonNull java.util.List<android.net.MacAddress>);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBridgedModeOpportunisticShutdownEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setBssid(@Nullable android.net.MacAddress);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setChannel(int, int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setChannels(@NonNull android.util.SparseIntArray);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setClientControlByUserEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setHiddenSsid(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setIeee80211axEnabled(boolean);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setMacRandomizationSetting(int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setMaxNumberOfClients(@IntRange(from=0) int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setPassphrase(@Nullable String, int);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setShutdownTimeoutMillis(@IntRange(from=0) long);
+    method @NonNull public android.net.wifi.SoftApConfiguration.Builder setSsid(@Nullable String);
+  }
+
+  public final class SoftApInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getAutoShutdownTimeoutMillis();
+    method public int getBandwidth();
+    method @Nullable public android.net.MacAddress getBssid();
+    method public int getFrequency();
+    method public int getWifiStandard();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field public static final int CHANNEL_WIDTH_160MHZ = 6; // 0x6
+    field public static final int CHANNEL_WIDTH_20MHZ = 2; // 0x2
+    field public static final int CHANNEL_WIDTH_20MHZ_NOHT = 1; // 0x1
+    field public static final int CHANNEL_WIDTH_2160MHZ = 7; // 0x7
+    field public static final int CHANNEL_WIDTH_40MHZ = 3; // 0x3
+    field public static final int CHANNEL_WIDTH_4320MHZ = 8; // 0x8
+    field public static final int CHANNEL_WIDTH_6480MHZ = 9; // 0x9
+    field public static final int CHANNEL_WIDTH_80MHZ = 4; // 0x4
+    field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 5; // 0x5
+    field public static final int CHANNEL_WIDTH_8640MHZ = 10; // 0xa
+    field public static final int CHANNEL_WIDTH_INVALID = 0; // 0x0
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.SoftApInfo> CREATOR;
+  }
+
+  public final class WifiAvailableChannel implements android.os.Parcelable {
+    ctor public WifiAvailableChannel(int, int);
+    method public int describeContents();
+    method public int getFrequencyMhz();
+    method public int getOperationalModes();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiAvailableChannel> CREATOR;
+    field public static final int OP_MODE_SAP = 2; // 0x2
+    field public static final int OP_MODE_STA = 1; // 0x1
+    field public static final int OP_MODE_TDLS = 32; // 0x20
+    field public static final int OP_MODE_WIFI_AWARE = 16; // 0x10
+    field public static final int OP_MODE_WIFI_DIRECT_CLI = 4; // 0x4
+    field public static final int OP_MODE_WIFI_DIRECT_GO = 8; // 0x8
+  }
+
+  public final class WifiClient implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public android.net.MacAddress getMacAddress();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiClient> CREATOR;
+  }
+
+  @Deprecated public class WifiConfiguration implements android.os.Parcelable {
+    method @Deprecated public int getAuthType();
+    method @Deprecated public int getDeletionPriority();
+    method @Deprecated @NonNull public android.net.IpConfiguration getIpConfiguration();
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus getNetworkSelectionStatus();
+    method @Deprecated @NonNull public String getPrintableSsid();
+    method @Deprecated @NonNull public String getProfileKey();
+    method @Deprecated public int getRecentFailureReason();
+    method @Deprecated public boolean hasNoInternetAccess();
+    method @Deprecated public boolean isEphemeral();
+    method @Deprecated public static boolean isMetered(@Nullable android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiInfo);
+    method @Deprecated public boolean isNoInternetAccessExpected();
+    method @Deprecated public void setDeletionPriority(int) throws java.lang.IllegalArgumentException;
+    method @Deprecated public void setIpConfiguration(@Nullable android.net.IpConfiguration);
+    method @Deprecated public void setNetworkSelectionStatus(@NonNull android.net.wifi.WifiConfiguration.NetworkSelectionStatus);
+    field @Deprecated public static final int INVALID_NETWORK_ID = -1; // 0xffffffff
+    field @Deprecated public static final int METERED_OVERRIDE_METERED = 1; // 0x1
+    field @Deprecated public static final int METERED_OVERRIDE_NONE = 0; // 0x0
+    field @Deprecated public static final int METERED_OVERRIDE_NOT_METERED = 2; // 0x2
+    field @Deprecated public static final int RANDOMIZATION_AUTO = 3; // 0x3
+    field @Deprecated public static final int RANDOMIZATION_NONE = 0; // 0x0
+    field @Deprecated public static final int RANDOMIZATION_NON_PERSISTENT = 2; // 0x2
+    field @Deprecated public static final int RANDOMIZATION_PERSISTENT = 1; // 0x1
+    field @Deprecated public static final int RECENT_FAILURE_AP_UNABLE_TO_HANDLE_NEW_STA = 17; // 0x11
+    field @Deprecated public static final int RECENT_FAILURE_DISCONNECTION_AP_BUSY = 1004; // 0x3ec
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_AIR_INTERFACE_OVERLOADED = 1007; // 0x3ef
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_AUTH_SERVER_OVERLOADED = 1008; // 0x3f0
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_INSUFFICIENT_RSSI = 1009; // 0x3f1
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_MAX_NUM_STA_ASSOCIATED = 1006; // 0x3ee
+    field @Deprecated public static final int RECENT_FAILURE_MBO_ASSOC_DISALLOWED_UNSPECIFIED = 1005; // 0x3ed
+    field @Deprecated public static final int RECENT_FAILURE_NETWORK_NOT_FOUND = 1011; // 0x3f3
+    field @Deprecated public static final int RECENT_FAILURE_NONE = 0; // 0x0
+    field @Deprecated public static final int RECENT_FAILURE_OCE_RSSI_BASED_ASSOCIATION_REJECTION = 1010; // 0x3f2
+    field @Deprecated public static final int RECENT_FAILURE_POOR_CHANNEL_CONDITIONS = 1003; // 0x3eb
+    field @Deprecated public static final int RECENT_FAILURE_REFUSED_TEMPORARILY = 1002; // 0x3ea
+    field @Deprecated public boolean allowAutojoin;
+    field @Deprecated public int carrierId;
+    field @Deprecated public boolean carrierMerged;
+    field @Deprecated public String creatorName;
+    field @Deprecated public int creatorUid;
+    field @Deprecated public boolean fromWifiNetworkSpecifier;
+    field @Deprecated public boolean fromWifiNetworkSuggestion;
+    field @Deprecated public int lastConnectUid;
+    field @Deprecated public String lastUpdateName;
+    field @Deprecated public int lastUpdateUid;
+    field @Deprecated public int macRandomizationSetting;
+    field @Deprecated public boolean meteredHint;
+    field @Deprecated public int meteredOverride;
+    field @Deprecated public int numAssociation;
+    field @Deprecated public int numScorerOverride;
+    field @Deprecated public int numScorerOverrideAndSwitchedNetwork;
+    field @Deprecated public boolean requirePmf;
+    field @Deprecated public boolean shared;
+    field @Deprecated public int subscriptionId;
+    field @Deprecated public boolean useExternalScores;
+  }
+
+  @Deprecated public static class WifiConfiguration.KeyMgmt {
+    field @Deprecated public static final int WAPI_CERT = 14; // 0xe
+    field @Deprecated public static final int WAPI_PSK = 13; // 0xd
+    field @Deprecated public static final int WPA2_PSK = 4; // 0x4
+  }
+
+  @Deprecated public static class WifiConfiguration.NetworkSelectionStatus {
+    method @Deprecated public int getDisableReasonCounter(int);
+    method @Deprecated public long getDisableTime();
+    method @Deprecated public static int getMaxNetworkSelectionDisableReason();
+    method @Deprecated public int getNetworkSelectionDisableReason();
+    method @Deprecated @Nullable public static String getNetworkSelectionDisableReasonString(int);
+    method @Deprecated public int getNetworkSelectionStatus();
+    method @Deprecated @NonNull public String getNetworkStatusString();
+    method @Deprecated public boolean hasEverConnected();
+    field @Deprecated public static final int DISABLED_ASSOCIATION_REJECTION = 1; // 0x1
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_FAILURE = 2; // 0x2
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_NO_CREDENTIALS = 5; // 0x5
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_NO_SUBSCRIPTION = 9; // 0x9
+    field @Deprecated public static final int DISABLED_AUTHENTICATION_PRIVATE_EAP_ERROR = 10; // 0xa
+    field @Deprecated public static final int DISABLED_BY_WIFI_MANAGER = 7; // 0x7
+    field @Deprecated public static final int DISABLED_BY_WRONG_PASSWORD = 8; // 0x8
+    field @Deprecated public static final int DISABLED_CONSECUTIVE_FAILURES = 12; // 0xc
+    field @Deprecated public static final int DISABLED_DHCP_FAILURE = 3; // 0x3
+    field @Deprecated public static final int DISABLED_NETWORK_NOT_FOUND = 11; // 0xb
+    field @Deprecated public static final int DISABLED_NONE = 0; // 0x0
+    field @Deprecated public static final int DISABLED_NO_INTERNET_PERMANENT = 6; // 0x6
+    field @Deprecated public static final int DISABLED_NO_INTERNET_TEMPORARY = 4; // 0x4
+    field @Deprecated public static final int NETWORK_SELECTION_ENABLED = 0; // 0x0
+    field @Deprecated public static final int NETWORK_SELECTION_PERMANENTLY_DISABLED = 2; // 0x2
+    field @Deprecated public static final int NETWORK_SELECTION_TEMPORARY_DISABLED = 1; // 0x1
+  }
+
+  @Deprecated public static final class WifiConfiguration.NetworkSelectionStatus.Builder {
+    ctor @Deprecated public WifiConfiguration.NetworkSelectionStatus.Builder();
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus build();
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus.Builder setNetworkSelectionDisableReason(int);
+    method @Deprecated @NonNull public android.net.wifi.WifiConfiguration.NetworkSelectionStatus.Builder setNetworkSelectionStatus(int);
+  }
+
+  public final class WifiConnectedSessionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getSessionId();
+    method public boolean isUserSelected();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiConnectedSessionInfo> CREATOR;
+  }
+
+  public static final class WifiConnectedSessionInfo.Builder {
+    ctor public WifiConnectedSessionInfo.Builder(int);
+    method @NonNull public android.net.wifi.WifiConnectedSessionInfo build();
+    method @NonNull public android.net.wifi.WifiConnectedSessionInfo.Builder setUserSelected(boolean);
+  }
+
+  public class WifiEnterpriseConfig implements android.os.Parcelable {
+    method @Nullable public String[] getCaCertificateAliases();
+    method @NonNull public String getCaPath();
+    method @NonNull public String getClientCertificateAlias();
+    method public int getOcsp();
+    method @NonNull public String getWapiCertSuite();
+    method public void setCaCertificateAliases(@Nullable String[]);
+    method public void setCaPath(@NonNull String);
+    method public void setClientCertificateAlias(@NonNull String);
+    method public void setOcsp(int);
+    method public void setWapiCertSuite(@NonNull String);
+    field public static final int OCSP_NONE = 0; // 0x0
+    field public static final int OCSP_REQUEST_CERT_STATUS = 1; // 0x1
+    field public static final int OCSP_REQUIRE_ALL_NON_TRUSTED_CERTS_STATUS = 3; // 0x3
+    field public static final int OCSP_REQUIRE_CERT_STATUS = 2; // 0x2
+  }
+
+  public class WifiFrameworkInitializer {
+    method public static void registerServiceWrappers();
+  }
+
+  public class WifiInfo implements android.os.Parcelable android.net.TransportInfo {
+    method public double getLostTxPacketsPerSecond();
+    method @Nullable public String getRequestingPackageName();
+    method public double getRetriedTxPacketsPerSecond();
+    method public int getScore();
+    method public double getSuccessfulRxPacketsPerSecond();
+    method public double getSuccessfulTxPacketsPerSecond();
+    method public boolean isCarrierMerged();
+    method public boolean isEphemeral();
+    method public boolean isOemPaid();
+    method public boolean isOemPrivate();
+    method public boolean isOsuAp();
+    method public boolean isPasspointAp();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean isPrimary();
+    method public boolean isTrusted();
+    method @Nullable public static String sanitizeSsid(@Nullable String);
+    field public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00";
+    field public static final int INVALID_RSSI = -127; // 0xffffff81
+  }
+
+  public class WifiManager {
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void addOnWifiUsabilityStatsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void addWifiVerboseLoggingStatusChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.WifiVerboseLoggingStatusChangedListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoin(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoinGlobal(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void allowAutojoinPasspoint(@NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_WIFI_COUNTRY_CODE) public void clearOverrideCountryCode();
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void clearWifiConnectedNetworkScorer();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void connect(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void disable(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK}) public void disableEphemeralNetwork(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void factoryReset();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void forget(int, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.util.Pair<android.net.wifi.WifiConfiguration,java.util.Map<java.lang.Integer,java.util.List<android.net.wifi.ScanResult>>>> getAllMatchingWifiConfigs(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<android.net.wifi.WifiAvailableChannel> getAllowedChannels(int, int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String getCountryCode();
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public android.net.Network getCurrentNetwork();
+    method public static int getEasyConnectMaxAllowedResponderDeviceInfoLength();
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public String[] getFactoryMacAddresses();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,java.util.List<android.net.wifi.ScanResult>> getMatchingOsuProviders(@Nullable java.util.List<android.net.wifi.ScanResult>);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.Map<android.net.wifi.hotspot2.OsuProvider,android.net.wifi.hotspot2.PasspointConfiguration> getMatchingPasspointConfigsForOsuProviders(@NonNull java.util.Set<android.net.wifi.hotspot2.OsuProvider>);
+    method @NonNull @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE}) public java.util.Map<android.net.wifi.WifiNetworkSuggestion,java.util.List<android.net.wifi.ScanResult>> getMatchingScanResults(@NonNull java.util.List<android.net.wifi.WifiNetworkSuggestion>, @Nullable java.util.List<android.net.wifi.ScanResult>);
+    method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_WIFI_STATE, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public java.util.List<android.net.wifi.WifiConfiguration> getPrivilegedConfiguredNetworks();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public android.net.wifi.SoftApConfiguration getSoftApConfiguration();
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<android.net.wifi.WifiAvailableChannel> getUsableChannels(int, int);
+    method public int getVerboseLoggingLevel();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void getWifiActivityEnergyInfoAsync(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiActivityEnergyInfoListener);
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List<android.net.wifi.WifiConfiguration> getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method public boolean isApMacRandomizationSupported();
+    method public boolean isConnectedMacRandomizationSupported();
+    method @Deprecated public boolean isDeviceToDeviceRttSupported();
+    method public boolean isPortableHotspotSupported();
+    method public boolean isStaConcurrencyForRestrictedConnectionsSupported();
+    method public boolean isVerboseLoggingEnabled();
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled();
+    method public boolean isWifiScannerSupported();
+    method @RequiresPermission(android.Manifest.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS) public void registerCoexCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.CoexCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerNetworkRequestMatchCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void registerSoftApCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.SoftApCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerTrafficStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.TrafficStateCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void removeAppState(int, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void removeOnWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
+    method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public void removeWifiVerboseLoggingStatusChangedListener(@NonNull android.net.wifi.WifiManager.WifiVerboseLoggingStatusChangedListener);
+    method @RequiresPermission(android.Manifest.permission.RESTART_WIFI_SUBSYSTEM) public void restartWifiSubsystem();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void restoreBackupData(@NonNull byte[]);
+    method @Nullable @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public android.net.wifi.SoftApConfiguration restoreSoftApBackupData(@NonNull byte[]);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void restoreSupplicantBackupData(@NonNull byte[], @NonNull byte[]);
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveBackupData();
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public byte[] retrieveSoftApBackupData();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD, android.Manifest.permission.NETWORK_STACK}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setAutoWakeupEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void setCarrierNetworkOffloadEnabled(int, boolean, boolean);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS) public void setCoexUnsafeChannels(@NonNull java.util.List<android.net.wifi.CoexUnsafeChannel>, int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_WIFI_COUNTRY_CODE) public void setDefaultCountryCode(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.WIFI_SET_DEVICE_MOBILITY_STATE) public void setDeviceMobilityState(int);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setMacRandomizationSettingPasspointEnabled(@NonNull String, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_WIFI_COUNTRY_CODE) public void setOverrideCountryCode(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setPasspointMeteredOverride(@NonNull String, int);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanAlwaysAvailable(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setScanThrottleEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public boolean setSoftApConfiguration(@NonNull android.net.wifi.SoftApConfiguration);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setVerboseLoggingEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void setVerboseLoggingLevel(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public boolean setWifiConnectedNetworkScorer(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.WifiConnectedNetworkScorer);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public boolean setWifiScoringEnabled(boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsConfiguratorInitiator(@NonNull String, int, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeInitiator(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startEasyConnectAsEnrolleeResponder(@Nullable String, int, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.EasyConnectStatusCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startLocalOnlyHotspot(@NonNull android.net.wifi.SoftApConfiguration, @Nullable java.util.concurrent.Executor, @Nullable android.net.wifi.WifiManager.LocalOnlyHotspotCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startRestrictingAutoJoinToSubscriptionId(int);
+    method @RequiresPermission(android.Manifest.permission.UPDATE_DEVICE_STATS) public boolean startScan(android.os.WorkSource);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void startSubscriptionProvisioning(@NonNull android.net.wifi.hotspot2.OsuProvider, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.hotspot2.ProvisioningCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean startTetheredHotspot(@Nullable android.net.wifi.SoftApConfiguration);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopEasyConnectSession();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public void stopRestrictingAutoJoinToSubscriptionId();
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public boolean stopSoftAp();
+    method @RequiresPermission(android.Manifest.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS) public void unregisterCoexCallback(@NonNull android.net.wifi.WifiManager.CoexCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterNetworkRequestMatchCallback(@NonNull android.net.wifi.WifiManager.NetworkRequestMatchCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void unregisterSoftApCallback(@NonNull android.net.wifi.WifiManager.SoftApCallback);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void unregisterTrafficStateCallback(@NonNull android.net.wifi.WifiManager.TrafficStateCallback);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_STACK, android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK}) public void updateInterfaceIpState(@Nullable String, int);
+    method @RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE) public void updateWifiUsabilityScore(int, int, int);
+    field public static final String ACTION_LINK_CONFIGURATION_CHANGED = "android.net.wifi.LINK_CONFIGURATION_CHANGED";
+    field @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public static final String ACTION_NETWORK_SETTINGS_RESET = "android.net.wifi.action.NETWORK_SETTINGS_RESET";
+    field public static final String ACTION_PASSPOINT_LAUNCH_OSU_VIEW = "android.net.wifi.action.PASSPOINT_LAUNCH_OSU_VIEW";
+    field @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public static final String ACTION_REFRESH_USER_PROVISIONING = "android.net.wifi.action.REFRESH_USER_PROVISIONING";
+    field public static final String ACTION_REQUEST_DISABLE = "android.net.wifi.action.REQUEST_DISABLE";
+    field public static final String ACTION_REQUEST_ENABLE = "android.net.wifi.action.REQUEST_ENABLE";
+    field public static final int CHANGE_REASON_ADDED = 0; // 0x0
+    field public static final int CHANGE_REASON_CONFIG_CHANGE = 2; // 0x2
+    field public static final int CHANGE_REASON_REMOVED = 1; // 0x1
+    field public static final int COEX_RESTRICTION_SOFTAP = 2; // 0x2
+    field public static final int COEX_RESTRICTION_WIFI_AWARE = 4; // 0x4
+    field public static final int COEX_RESTRICTION_WIFI_DIRECT = 1; // 0x1
+    field public static final String CONFIGURED_NETWORKS_CHANGED_ACTION = "android.net.wifi.CONFIGURED_NETWORKS_CHANGE";
+    field public static final int DEVICE_MOBILITY_STATE_HIGH_MVMT = 1; // 0x1
+    field public static final int DEVICE_MOBILITY_STATE_LOW_MVMT = 2; // 0x2
+    field public static final int DEVICE_MOBILITY_STATE_STATIONARY = 3; // 0x3
+    field public static final int DEVICE_MOBILITY_STATE_UNKNOWN = 0; // 0x0
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_BRAINPOOLP256R1 = 3; // 0x3
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_BRAINPOOLP384R1 = 4; // 0x4
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_BRAINPOOLP512R1 = 5; // 0x5
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_PRIME256V1 = 0; // 0x0
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_SECP384R1 = 1; // 0x1
+    field public static final int EASY_CONNECT_CRYPTOGRAPHY_CURVE_SECP521R1 = 2; // 0x2
+    field public static final int EASY_CONNECT_NETWORK_ROLE_AP = 1; // 0x1
+    field public static final int EASY_CONNECT_NETWORK_ROLE_STA = 0; // 0x0
+    field public static final String EXTRA_CHANGE_REASON = "changeReason";
+    field @Deprecated public static final String EXTRA_LINK_PROPERTIES = "android.net.wifi.extra.LINK_PROPERTIES";
+    field @Deprecated public static final String EXTRA_MULTIPLE_NETWORKS_CHANGED = "multipleChanges";
+    field public static final String EXTRA_OSU_NETWORK = "android.net.wifi.extra.OSU_NETWORK";
+    field public static final String EXTRA_PREVIOUS_WIFI_AP_STATE = "previous_wifi_state";
+    field public static final String EXTRA_URL = "android.net.wifi.extra.URL";
+    field public static final String EXTRA_WIFI_AP_FAILURE_REASON = "android.net.wifi.extra.WIFI_AP_FAILURE_REASON";
+    field public static final String EXTRA_WIFI_AP_INTERFACE_NAME = "android.net.wifi.extra.WIFI_AP_INTERFACE_NAME";
+    field public static final String EXTRA_WIFI_AP_MODE = "android.net.wifi.extra.WIFI_AP_MODE";
+    field public static final String EXTRA_WIFI_AP_STATE = "wifi_state";
+    field @Deprecated public static final String EXTRA_WIFI_CONFIGURATION = "wifiConfiguration";
+    field public static final String EXTRA_WIFI_CREDENTIAL_EVENT_TYPE = "et";
+    field public static final String EXTRA_WIFI_CREDENTIAL_SSID = "ssid";
+    field public static final int IFACE_IP_MODE_CONFIGURATION_ERROR = 0; // 0x0
+    field public static final int IFACE_IP_MODE_LOCAL_ONLY = 2; // 0x2
+    field public static final int IFACE_IP_MODE_TETHERED = 1; // 0x1
+    field public static final int IFACE_IP_MODE_UNSPECIFIED = -1; // 0xffffffff
+    field public static final int PASSPOINT_HOME_NETWORK = 0; // 0x0
+    field public static final int PASSPOINT_ROAMING_NETWORK = 1; // 0x1
+    field public static final int SAP_CLIENT_BLOCK_REASON_CODE_BLOCKED_BY_USER = 0; // 0x0
+    field public static final int SAP_CLIENT_BLOCK_REASON_CODE_NO_MORE_STAS = 1; // 0x1
+    field public static final int SAP_START_FAILURE_GENERAL = 0; // 0x0
+    field public static final int SAP_START_FAILURE_NO_CHANNEL = 1; // 0x1
+    field public static final int SAP_START_FAILURE_UNSUPPORTED_CONFIGURATION = 2; // 0x2
+    field public static final int VERBOSE_LOGGING_LEVEL_DISABLED = 0; // 0x0
+    field public static final int VERBOSE_LOGGING_LEVEL_ENABLED = 1; // 0x1
+    field public static final int VERBOSE_LOGGING_LEVEL_ENABLED_SHOW_KEY = 2; // 0x2
+    field public static final String WIFI_AP_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_AP_STATE_CHANGED";
+    field public static final int WIFI_AP_STATE_DISABLED = 11; // 0xb
+    field public static final int WIFI_AP_STATE_DISABLING = 10; // 0xa
+    field public static final int WIFI_AP_STATE_ENABLED = 13; // 0xd
+    field public static final int WIFI_AP_STATE_ENABLING = 12; // 0xc
+    field public static final int WIFI_AP_STATE_FAILED = 14; // 0xe
+    field public static final String WIFI_CREDENTIAL_CHANGED_ACTION = "android.net.wifi.WIFI_CREDENTIAL_CHANGED";
+    field public static final int WIFI_CREDENTIAL_FORGOT = 1; // 0x1
+    field public static final int WIFI_CREDENTIAL_SAVED = 0; // 0x0
+  }
+
+  public static interface WifiManager.ActionListener {
+    method public void onFailure(int);
+    method public void onSuccess();
+  }
+
+  public abstract static class WifiManager.CoexCallback {
+    ctor public WifiManager.CoexCallback();
+    method public abstract void onCoexUnsafeChannelsChanged(@NonNull java.util.List<android.net.wifi.CoexUnsafeChannel>, int);
+  }
+
+  public static interface WifiManager.NetworkRequestMatchCallback {
+    method public default void onAbort();
+    method public default void onMatch(@NonNull java.util.List<android.net.wifi.ScanResult>);
+    method public default void onUserSelectionCallbackRegistration(@NonNull android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback);
+    method public default void onUserSelectionConnectFailure(@NonNull android.net.wifi.WifiConfiguration);
+    method public default void onUserSelectionConnectSuccess(@NonNull android.net.wifi.WifiConfiguration);
+  }
+
+  public static interface WifiManager.NetworkRequestUserSelectionCallback {
+    method public default void reject();
+    method public default void select(@NonNull android.net.wifi.WifiConfiguration);
+  }
+
+  public static interface WifiManager.OnWifiActivityEnergyInfoListener {
+    method public void onWifiActivityEnergyInfo(@Nullable android.os.connectivity.WifiActivityEnergyInfo);
+  }
+
+  public static interface WifiManager.OnWifiUsabilityStatsListener {
+    method public void onWifiUsabilityStats(int, boolean, @NonNull android.net.wifi.WifiUsabilityStatsEntry);
+  }
+
+  public static interface WifiManager.ScoreUpdateObserver {
+    method public default void blocklistCurrentBssid(int);
+    method public void notifyScoreUpdate(int, int);
+    method public default void notifyStatusUpdate(int, boolean);
+    method public default void requestNudOperation(int);
+    method public void triggerUpdateOfWifiUsabilityStats(int);
+  }
+
+  public static interface WifiManager.SoftApCallback {
+    method public default void onBlockedClientConnecting(@NonNull android.net.wifi.WifiClient, int);
+    method public default void onCapabilityChanged(@NonNull android.net.wifi.SoftApCapability);
+    method @Deprecated public default void onConnectedClientsChanged(@NonNull java.util.List<android.net.wifi.WifiClient>);
+    method public default void onConnectedClientsChanged(@NonNull android.net.wifi.SoftApInfo, @NonNull java.util.List<android.net.wifi.WifiClient>);
+    method @Deprecated public default void onInfoChanged(@NonNull android.net.wifi.SoftApInfo);
+    method public default void onInfoChanged(@NonNull java.util.List<android.net.wifi.SoftApInfo>);
+    method public default void onStateChanged(int, int);
+  }
+
+  public static interface WifiManager.TrafficStateCallback {
+    method public void onStateChanged(int);
+    field public static final int DATA_ACTIVITY_IN = 1; // 0x1
+    field public static final int DATA_ACTIVITY_INOUT = 3; // 0x3
+    field public static final int DATA_ACTIVITY_NONE = 0; // 0x0
+    field public static final int DATA_ACTIVITY_OUT = 2; // 0x2
+  }
+
+  public static interface WifiManager.WifiConnectedNetworkScorer {
+    method public void onSetScoreUpdateObserver(@NonNull android.net.wifi.WifiManager.ScoreUpdateObserver);
+    method @Deprecated public default void onStart(int);
+    method public default void onStart(@NonNull android.net.wifi.WifiConnectedSessionInfo);
+    method public void onStop(int);
+  }
+
+  public static interface WifiManager.WifiVerboseLoggingStatusChangedListener {
+    method public void onWifiVerboseLoggingStatusChanged(boolean);
+  }
+
+  @Deprecated public class WifiNetworkConnectionStatistics implements android.os.Parcelable {
+    ctor @Deprecated public WifiNetworkConnectionStatistics(int, int);
+    ctor @Deprecated public WifiNetworkConnectionStatistics();
+    ctor @Deprecated public WifiNetworkConnectionStatistics(android.net.wifi.WifiNetworkConnectionStatistics);
+    method @Deprecated public int describeContents();
+    method @Deprecated public void writeToParcel(android.os.Parcel, int);
+    field @Deprecated @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiNetworkConnectionStatistics> CREATOR;
+    field @Deprecated public int numConnection;
+    field @Deprecated public int numUsage;
+  }
+
+  public final class WifiNetworkSuggestion implements android.os.Parcelable {
+    method public int getCarrierId();
+    method @NonNull public android.net.wifi.WifiConfiguration getWifiConfiguration();
+    method public boolean isOemPaid();
+    method public boolean isOemPrivate();
+  }
+
+  public static final class WifiNetworkSuggestion.Builder {
+    method @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_CARRIER_PROVISIONING) public android.net.wifi.WifiNetworkSuggestion.Builder setCarrierId(int);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPaid(boolean);
+    method @NonNull public android.net.wifi.WifiNetworkSuggestion.Builder setOemPrivate(boolean);
+  }
+
+  public class WifiScanner {
+    method @Deprecated public void configureWifiChange(int, int, int, int, int, android.net.wifi.WifiScanner.BssidInfo[]);
+    method @Deprecated public void configureWifiChange(android.net.wifi.WifiScanner.WifiChangeSettings);
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<java.lang.Integer> getAvailableChannels(int);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean getScanResults();
+    method @NonNull @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public java.util.List<android.net.wifi.ScanResult> getSingleScanResults();
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void registerScanListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiScanner.ScanListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public void setScanningEnabled(boolean);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startBackgroundScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener, android.os.WorkSource);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void startScan(android.net.wifi.WifiScanner.ScanSettings, android.net.wifi.WifiScanner.ScanListener, android.os.WorkSource);
+    method @Deprecated public void startTrackingBssids(android.net.wifi.WifiScanner.BssidInfo[], int, android.net.wifi.WifiScanner.BssidListener);
+    method @Deprecated public void startTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void stopBackgroundScan(android.net.wifi.WifiScanner.ScanListener);
+    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void stopScan(android.net.wifi.WifiScanner.ScanListener);
+    method @Deprecated public void stopTrackingBssids(android.net.wifi.WifiScanner.BssidListener);
+    method @Deprecated public void stopTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener);
+    method public void unregisterScanListener(@NonNull android.net.wifi.WifiScanner.ScanListener);
+    field public static final int MAX_SCAN_PERIOD_MS = 1024000; // 0xfa000
+    field public static final int MIN_SCAN_PERIOD_MS = 1000; // 0x3e8
+    field public static final int REASON_DUPLICATE_REQEUST = -5; // 0xfffffffb
+    field public static final int REASON_INVALID_LISTENER = -2; // 0xfffffffe
+    field public static final int REASON_INVALID_REQUEST = -3; // 0xfffffffd
+    field public static final int REASON_NOT_AUTHORIZED = -4; // 0xfffffffc
+    field public static final int REASON_SUCCEEDED = 0; // 0x0
+    field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff
+    field @Deprecated public static final int REPORT_EVENT_AFTER_BUFFER_FULL = 0; // 0x0
+    field public static final int REPORT_EVENT_AFTER_EACH_SCAN = 1; // 0x1
+    field public static final int REPORT_EVENT_FULL_SCAN_RESULT = 2; // 0x2
+    field public static final int REPORT_EVENT_NO_BATCH = 4; // 0x4
+    field public static final int SCAN_TYPE_HIGH_ACCURACY = 2; // 0x2
+    field public static final int SCAN_TYPE_LOW_LATENCY = 0; // 0x0
+    field public static final int SCAN_TYPE_LOW_POWER = 1; // 0x1
+    field public static final int WIFI_BAND_24_5_6_GHZ = 11; // 0xb
+    field public static final int WIFI_BAND_24_5_WITH_DFS_6_GHZ = 15; // 0xf
+    field public static final int WIFI_BAND_24_GHZ = 1; // 0x1
+    field public static final int WIFI_BAND_5_GHZ = 2; // 0x2
+    field public static final int WIFI_BAND_5_GHZ_DFS_ONLY = 4; // 0x4
+    field public static final int WIFI_BAND_5_GHZ_WITH_DFS = 6; // 0x6
+    field public static final int WIFI_BAND_60_GHZ = 16; // 0x10
+    field public static final int WIFI_BAND_6_GHZ = 8; // 0x8
+    field public static final int WIFI_BAND_BOTH = 3; // 0x3
+    field public static final int WIFI_BAND_BOTH_WITH_DFS = 7; // 0x7
+    field public static final int WIFI_BAND_UNSPECIFIED = 0; // 0x0
+    field public static final int WIFI_RNR_ENABLED = 1; // 0x1
+    field public static final int WIFI_RNR_ENABLED_IF_WIFI_BAND_6_GHZ_SCANNED = 0; // 0x0
+    field public static final int WIFI_RNR_NOT_NEEDED = 2; // 0x2
+  }
+
+  public static interface WifiScanner.ActionListener {
+    method public void onFailure(int, String);
+    method public void onSuccess();
+  }
+
+  @Deprecated public static class WifiScanner.BssidInfo {
+    ctor @Deprecated public WifiScanner.BssidInfo();
+    field @Deprecated public String bssid;
+    field @Deprecated public int frequencyHint;
+    field @Deprecated public int high;
+    field @Deprecated public int low;
+  }
+
+  @Deprecated public static interface WifiScanner.BssidListener extends android.net.wifi.WifiScanner.ActionListener {
+    method @Deprecated public void onFound(android.net.wifi.ScanResult[]);
+    method @Deprecated public void onLost(android.net.wifi.ScanResult[]);
+  }
+
+  public static class WifiScanner.ChannelSpec {
+    ctor public WifiScanner.ChannelSpec(int);
+    field public int frequency;
+  }
+
+  @Deprecated public static class WifiScanner.HotlistSettings implements android.os.Parcelable {
+    ctor @Deprecated public WifiScanner.HotlistSettings();
+    field @Deprecated public int apLostThreshold;
+    field @Deprecated public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos;
+  }
+
+  public static class WifiScanner.ParcelableScanData implements android.os.Parcelable {
+    ctor public WifiScanner.ParcelableScanData(android.net.wifi.WifiScanner.ScanData[]);
+    method public android.net.wifi.WifiScanner.ScanData[] getResults();
+    field public android.net.wifi.WifiScanner.ScanData[] mResults;
+  }
+
+  public static class WifiScanner.ParcelableScanResults implements android.os.Parcelable {
+    ctor public WifiScanner.ParcelableScanResults(android.net.wifi.ScanResult[]);
+    method public android.net.wifi.ScanResult[] getResults();
+    field public android.net.wifi.ScanResult[] mResults;
+  }
+
+  public static class WifiScanner.ScanData implements android.os.Parcelable {
+    ctor public WifiScanner.ScanData(int, int, android.net.wifi.ScanResult[]);
+    ctor public WifiScanner.ScanData(android.net.wifi.WifiScanner.ScanData);
+    method public int getFlags();
+    method public int getId();
+    method public android.net.wifi.ScanResult[] getResults();
+    method public int getScannedBands();
+  }
+
+  public static interface WifiScanner.ScanListener extends android.net.wifi.WifiScanner.ActionListener {
+    method public void onFullResult(android.net.wifi.ScanResult);
+    method @Deprecated public void onPeriodChanged(int);
+    method public void onResults(android.net.wifi.WifiScanner.ScanData[]);
+  }
+
+  public static class WifiScanner.ScanSettings implements android.os.Parcelable {
+    ctor public WifiScanner.ScanSettings();
+    method public int getRnrSetting();
+    method public boolean is6GhzPscOnlyEnabled();
+    method public void set6GhzPscOnlyEnabled(boolean);
+    method public void setRnrSetting(int);
+    field public int band;
+    field public android.net.wifi.WifiScanner.ChannelSpec[] channels;
+    field @NonNull @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public final java.util.List<android.net.wifi.WifiScanner.ScanSettings.HiddenNetwork> hiddenNetworks;
+    field public boolean hideFromAppOps;
+    field public boolean ignoreLocationSettings;
+    field @Deprecated public int maxPeriodInMs;
+    field @Deprecated public int maxScansToCache;
+    field @Deprecated public int numBssidsPerScan;
+    field @Deprecated public int periodInMs;
+    field @Deprecated public int reportEvents;
+    field @Deprecated public int stepCount;
+    field @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public int type;
+  }
+
+  public static class WifiScanner.ScanSettings.HiddenNetwork {
+    ctor public WifiScanner.ScanSettings.HiddenNetwork(@NonNull String);
+    field @NonNull public final String ssid;
+  }
+
+  @Deprecated public static interface WifiScanner.WifiChangeListener extends android.net.wifi.WifiScanner.ActionListener {
+    method @Deprecated public void onChanging(android.net.wifi.ScanResult[]);
+    method @Deprecated public void onQuiescence(android.net.wifi.ScanResult[]);
+  }
+
+  @Deprecated public static class WifiScanner.WifiChangeSettings implements android.os.Parcelable {
+    ctor @Deprecated public WifiScanner.WifiChangeSettings();
+    field @Deprecated public android.net.wifi.WifiScanner.BssidInfo[] bssidInfos;
+    field @Deprecated public int lostApSampleSize;
+    field @Deprecated public int minApsBreachingThreshold;
+    field @Deprecated public int periodInMs;
+    field @Deprecated public int rssiSampleSize;
+    field @Deprecated public int unchangedSampleSize;
+  }
+
+  public final class WifiUsabilityStatsEntry implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getCellularDataNetworkType();
+    method public int getCellularSignalStrengthDb();
+    method public int getCellularSignalStrengthDbm();
+    method @IntRange(from=0, to=255) public int getChannelUtilizationRatio();
+    method @NonNull public android.net.wifi.WifiUsabilityStatsEntry.ContentionTimeStats getContentionTimeStats(int);
+    method public int getLinkSpeedMbps();
+    method public int getProbeElapsedTimeSinceLastUpdateMillis();
+    method public int getProbeMcsRateSinceLastUpdate();
+    method public int getProbeStatusSinceLastUpdate();
+    method @NonNull public java.util.List<android.net.wifi.WifiUsabilityStatsEntry.RateStats> getRateStats();
+    method public int getRssi();
+    method public int getRxLinkSpeedMbps();
+    method @IntRange(from=0, to=100) public int getTimeSliceDutyCycleInPercent();
+    method public long getTimeStampMillis();
+    method public long getTotalBackgroundScanTimeMillis();
+    method public long getTotalBeaconRx();
+    method public long getTotalCcaBusyFreqTimeMillis();
+    method public long getTotalHotspot2ScanTimeMillis();
+    method public long getTotalNanScanTimeMillis();
+    method public long getTotalPnoScanTimeMillis();
+    method public long getTotalRadioOnFreqTimeMillis();
+    method public long getTotalRadioOnTimeMillis();
+    method public long getTotalRadioRxTimeMillis();
+    method public long getTotalRadioTxTimeMillis();
+    method public long getTotalRoamScanTimeMillis();
+    method public long getTotalRxSuccess();
+    method public long getTotalScanTimeMillis();
+    method public long getTotalTxBad();
+    method public long getTotalTxRetries();
+    method public long getTotalTxSuccess();
+    method @NonNull public java.util.List<android.net.wifi.WifiUsabilityStatsEntry.RadioStats> getWifiLinkLayerRadioStats();
+    method public boolean isCellularDataAvailable();
+    method public boolean isSameRegisteredCell();
+    method public boolean isThroughputSufficient();
+    method public boolean isWifiScoringEnabled();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry> CREATOR;
+    field public static final int NUM_WME_ACCESS_CATEGORIES = 4; // 0x4
+    field public static final int PROBE_STATUS_FAILURE = 3; // 0x3
+    field public static final int PROBE_STATUS_NO_PROBE = 1; // 0x1
+    field public static final int PROBE_STATUS_SUCCESS = 2; // 0x2
+    field public static final int PROBE_STATUS_UNKNOWN = 0; // 0x0
+    field public static final int WIFI_BANDWIDTH_10_MHZ = 6; // 0x6
+    field public static final int WIFI_BANDWIDTH_160_MHZ = 3; // 0x3
+    field public static final int WIFI_BANDWIDTH_20_MHZ = 0; // 0x0
+    field public static final int WIFI_BANDWIDTH_40_MHZ = 1; // 0x1
+    field public static final int WIFI_BANDWIDTH_5_MHZ = 5; // 0x5
+    field public static final int WIFI_BANDWIDTH_80P80_MHZ = 4; // 0x4
+    field public static final int WIFI_BANDWIDTH_80_MHZ = 2; // 0x2
+    field public static final int WIFI_BANDWIDTH_INVALID = -1; // 0xffffffff
+    field public static final int WIFI_PREAMBLE_CCK = 1; // 0x1
+    field public static final int WIFI_PREAMBLE_HE = 5; // 0x5
+    field public static final int WIFI_PREAMBLE_HT = 2; // 0x2
+    field public static final int WIFI_PREAMBLE_INVALID = -1; // 0xffffffff
+    field public static final int WIFI_PREAMBLE_OFDM = 0; // 0x0
+    field public static final int WIFI_PREAMBLE_VHT = 3; // 0x3
+    field public static final int WIFI_SPATIAL_STREAMS_FOUR = 4; // 0x4
+    field public static final int WIFI_SPATIAL_STREAMS_INVALID = -1; // 0xffffffff
+    field public static final int WIFI_SPATIAL_STREAMS_ONE = 1; // 0x1
+    field public static final int WIFI_SPATIAL_STREAMS_THREE = 3; // 0x3
+    field public static final int WIFI_SPATIAL_STREAMS_TWO = 2; // 0x2
+    field public static final int WME_ACCESS_CATEGORY_BE = 0; // 0x0
+    field public static final int WME_ACCESS_CATEGORY_BK = 1; // 0x1
+    field public static final int WME_ACCESS_CATEGORY_VI = 2; // 0x2
+    field public static final int WME_ACCESS_CATEGORY_VO = 3; // 0x3
+  }
+
+  public static final class WifiUsabilityStatsEntry.ContentionTimeStats implements android.os.Parcelable {
+    ctor public WifiUsabilityStatsEntry.ContentionTimeStats(long, long, long, long);
+    method public int describeContents();
+    method public long getContentionNumSamples();
+    method public long getContentionTimeAvgMicros();
+    method public long getContentionTimeMaxMicros();
+    method public long getContentionTimeMinMicros();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry.ContentionTimeStats> CREATOR;
+  }
+
+  public static final class WifiUsabilityStatsEntry.RadioStats implements android.os.Parcelable {
+    ctor public WifiUsabilityStatsEntry.RadioStats(int, long, long, long, long, long, long, long, long, long);
+    method public int describeContents();
+    method public long getRadioId();
+    method public long getTotalBackgroundScanTimeMillis();
+    method public long getTotalHotspot2ScanTimeMillis();
+    method public long getTotalNanScanTimeMillis();
+    method public long getTotalPnoScanTimeMillis();
+    method public long getTotalRadioOnTimeMillis();
+    method public long getTotalRadioRxTimeMillis();
+    method public long getTotalRadioTxTimeMillis();
+    method public long getTotalRoamScanTimeMillis();
+    method public long getTotalScanTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry.RadioStats> CREATOR;
+  }
+
+  public static final class WifiUsabilityStatsEntry.RateStats implements android.os.Parcelable {
+    ctor public WifiUsabilityStatsEntry.RateStats(int, int, int, int, int, int, int, int, int);
+    method public int describeContents();
+    method public int getBandwidthInMhz();
+    method public int getBitRateInKbps();
+    method public int getMpduLost();
+    method public int getNumberOfSpatialStreams();
+    method public int getPreamble();
+    method public int getRateMcsIdx();
+    method public int getRetries();
+    method public int getRxMpdu();
+    method public int getTxMpdu();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry.RateStats> CREATOR;
+  }
+
+}
+
+package android.net.wifi.aware {
+
+  public class DiscoverySession implements java.lang.AutoCloseable {
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPmk(@NonNull android.net.wifi.aware.PeerHandle, @NonNull byte[]);
+  }
+
+  public class WifiAwareManager {
+    method public void enableInstantCommunicationMode(boolean);
+  }
+
+  public class WifiAwareSession implements java.lang.AutoCloseable {
+    method @Deprecated public android.net.NetworkSpecifier createNetworkSpecifierPmk(int, @NonNull byte[], @NonNull byte[]);
+  }
+
+}
+
+package android.net.wifi.hotspot2 {
+
+  public final class OsuProvider implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public String getFriendlyName();
+    method @Nullable public android.net.Uri getServerUri();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.hotspot2.OsuProvider> CREATOR;
+  }
+
+  public final class PasspointConfiguration implements android.os.Parcelable {
+    method public int getMeteredOverride();
+    method public boolean isAutojoinEnabled();
+    method public boolean isMacRandomizationEnabled();
+  }
+
+  public abstract class ProvisioningCallback {
+    ctor public ProvisioningCallback();
+    method public abstract void onProvisioningComplete();
+    method public abstract void onProvisioningFailure(int);
+    method public abstract void onProvisioningStatus(int);
+    field public static final int OSU_FAILURE_ADD_PASSPOINT_CONFIGURATION = 22; // 0x16
+    field public static final int OSU_FAILURE_AP_CONNECTION = 1; // 0x1
+    field public static final int OSU_FAILURE_INVALID_URL_FORMAT_FOR_OSU = 8; // 0x8
+    field public static final int OSU_FAILURE_NO_AAA_SERVER_TRUST_ROOT_NODE = 17; // 0x11
+    field public static final int OSU_FAILURE_NO_AAA_TRUST_ROOT_CERTIFICATE = 21; // 0x15
+    field public static final int OSU_FAILURE_NO_OSU_ACTIVITY_FOUND = 14; // 0xe
+    field public static final int OSU_FAILURE_NO_POLICY_SERVER_TRUST_ROOT_NODE = 19; // 0x13
+    field public static final int OSU_FAILURE_NO_PPS_MO = 16; // 0x10
+    field public static final int OSU_FAILURE_NO_REMEDIATION_SERVER_TRUST_ROOT_NODE = 18; // 0x12
+    field public static final int OSU_FAILURE_OSU_PROVIDER_NOT_FOUND = 23; // 0x17
+    field public static final int OSU_FAILURE_PROVISIONING_ABORTED = 6; // 0x6
+    field public static final int OSU_FAILURE_PROVISIONING_NOT_AVAILABLE = 7; // 0x7
+    field public static final int OSU_FAILURE_RETRIEVE_TRUST_ROOT_CERTIFICATES = 20; // 0x14
+    field public static final int OSU_FAILURE_SERVER_CONNECTION = 3; // 0x3
+    field public static final int OSU_FAILURE_SERVER_URL_INVALID = 2; // 0x2
+    field public static final int OSU_FAILURE_SERVER_VALIDATION = 4; // 0x4
+    field public static final int OSU_FAILURE_SERVICE_PROVIDER_VERIFICATION = 5; // 0x5
+    field public static final int OSU_FAILURE_SOAP_MESSAGE_EXCHANGE = 11; // 0xb
+    field public static final int OSU_FAILURE_START_REDIRECT_LISTENER = 12; // 0xc
+    field public static final int OSU_FAILURE_TIMED_OUT_REDIRECT_LISTENER = 13; // 0xd
+    field public static final int OSU_FAILURE_UNEXPECTED_COMMAND_TYPE = 9; // 0x9
+    field public static final int OSU_FAILURE_UNEXPECTED_SOAP_MESSAGE_STATUS = 15; // 0xf
+    field public static final int OSU_FAILURE_UNEXPECTED_SOAP_MESSAGE_TYPE = 10; // 0xa
+    field public static final int OSU_STATUS_AP_CONNECTED = 2; // 0x2
+    field public static final int OSU_STATUS_AP_CONNECTING = 1; // 0x1
+    field public static final int OSU_STATUS_INIT_SOAP_EXCHANGE = 6; // 0x6
+    field public static final int OSU_STATUS_REDIRECT_RESPONSE_RECEIVED = 8; // 0x8
+    field public static final int OSU_STATUS_RETRIEVING_TRUST_ROOT_CERTS = 11; // 0xb
+    field public static final int OSU_STATUS_SECOND_SOAP_EXCHANGE = 9; // 0x9
+    field public static final int OSU_STATUS_SERVER_CONNECTED = 5; // 0x5
+    field public static final int OSU_STATUS_SERVER_CONNECTING = 3; // 0x3
+    field public static final int OSU_STATUS_SERVER_VALIDATED = 4; // 0x4
+    field public static final int OSU_STATUS_THIRD_SOAP_EXCHANGE = 10; // 0xa
+    field public static final int OSU_STATUS_WAITING_FOR_REDIRECT_RESPONSE = 7; // 0x7
+  }
+
+}
+
+package android.net.wifi.p2p {
+
+  public final class WifiP2pGroupList implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.net.wifi.p2p.WifiP2pGroup> getGroupList();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.p2p.WifiP2pGroupList> CREATOR;
+  }
+
+  public class WifiP2pManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void deletePersistentGroup(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void factoryReset(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.READ_WIFI_CREDENTIAL}) public void requestPersistentGroupInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.PersistentGroupInfoListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setDeviceName(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull String, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY) public void setMiracastMode(int);
+    method @RequiresPermission(android.Manifest.permission.CONFIGURE_WIFI_DISPLAY) public void setWfdInfo(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @NonNull android.net.wifi.p2p.WifiP2pWfdInfo, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_STACK, android.Manifest.permission.OVERRIDE_WIFI_CONFIG}) public void setWifiP2pChannels(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, int, int, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void startListening(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    method @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void stopListening(@NonNull android.net.wifi.p2p.WifiP2pManager.Channel, @Nullable android.net.wifi.p2p.WifiP2pManager.ActionListener);
+    field public static final String ACTION_WIFI_P2P_PERSISTENT_GROUPS_CHANGED = "android.net.wifi.p2p.action.WIFI_P2P_PERSISTENT_GROUPS_CHANGED";
+    field public static final int MIRACAST_DISABLED = 0; // 0x0
+    field public static final int MIRACAST_SINK = 2; // 0x2
+    field public static final int MIRACAST_SOURCE = 1; // 0x1
+  }
+
+  public static interface WifiP2pManager.PersistentGroupInfoListener {
+    method public void onPersistentGroupInfoAvailable(@NonNull android.net.wifi.p2p.WifiP2pGroupList);
+  }
+
+}
+
+package android.net.wifi.rtt {
+
+  public final class RangingRequest implements android.os.Parcelable {
+    method @NonNull public java.util.List<android.net.wifi.rtt.ResponderConfig> getRttResponders();
+  }
+
+  public static final class RangingRequest.Builder {
+    method public android.net.wifi.rtt.RangingRequest.Builder addResponder(@NonNull android.net.wifi.rtt.ResponderConfig);
+  }
+
+  public final class RangingResult implements android.os.Parcelable {
+    method @NonNull public byte[] getLci();
+    method @NonNull public byte[] getLcr();
+  }
+
+  public final class ResponderConfig implements android.os.Parcelable {
+    ctor public ResponderConfig(@NonNull android.net.MacAddress, int, boolean, int, int, int, int, int);
+    ctor public ResponderConfig(@NonNull android.net.wifi.aware.PeerHandle, int, boolean, int, int, int, int, int);
+    method public int describeContents();
+    method public static android.net.wifi.rtt.ResponderConfig fromScanResult(android.net.wifi.ScanResult);
+    method public static android.net.wifi.rtt.ResponderConfig fromWifiAwarePeerHandleWithDefaults(android.net.wifi.aware.PeerHandle);
+    method public static android.net.wifi.rtt.ResponderConfig fromWifiAwarePeerMacAddressWithDefaults(android.net.MacAddress);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CHANNEL_WIDTH_160MHZ = 3; // 0x3
+    field public static final int CHANNEL_WIDTH_20MHZ = 0; // 0x0
+    field public static final int CHANNEL_WIDTH_40MHZ = 1; // 0x1
+    field public static final int CHANNEL_WIDTH_80MHZ = 2; // 0x2
+    field public static final int CHANNEL_WIDTH_80MHZ_PLUS_MHZ = 4; // 0x4
+    field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.rtt.ResponderConfig> CREATOR;
+    field public static final int PREAMBLE_HE = 3; // 0x3
+    field public static final int PREAMBLE_HT = 1; // 0x1
+    field public static final int PREAMBLE_LEGACY = 0; // 0x0
+    field public static final int PREAMBLE_VHT = 2; // 0x2
+    field public static final int RESPONDER_AP = 0; // 0x0
+    field public static final int RESPONDER_AWARE = 4; // 0x4
+    field public static final int RESPONDER_P2P_CLIENT = 3; // 0x3
+    field public static final int RESPONDER_P2P_GO = 2; // 0x2
+    field public static final int RESPONDER_STA = 1; // 0x1
+    field public final int centerFreq0;
+    field public final int centerFreq1;
+    field public final int channelWidth;
+    field public final int frequency;
+    field public final android.net.MacAddress macAddress;
+    field public final android.net.wifi.aware.PeerHandle peerHandle;
+    field public final int preamble;
+    field public final int responderType;
+    field public final boolean supports80211mc;
+  }
+
+  public final class ResponderLocation implements android.os.Parcelable {
+    method public boolean getExtraInfoOnAssociationIndication();
+  }
+
+  public class WifiRttManager {
+    method @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE}) public void cancelRanging(@Nullable android.os.WorkSource);
+    method @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.CHANGE_WIFI_STATE, android.Manifest.permission.ACCESS_WIFI_STATE}) public void startRanging(@Nullable android.os.WorkSource, @NonNull android.net.wifi.rtt.RangingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.rtt.RangingResultCallback);
+  }
+
+}
+
diff --git a/32/system/api/javax.obex-removed.txt b/32/system/api/javax.obex-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/javax.obex-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/javax.obex.txt b/32/system/api/javax.obex.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/javax.obex.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/org.apache.http.legacy-removed.txt b/32/system/api/org.apache.http.legacy-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/org.apache.http.legacy-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/org.apache.http.legacy.txt b/32/system/api/org.apache.http.legacy.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/system/api/org.apache.http.legacy.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/system/api/removed.txt b/32/system/api/removed.txt
new file mode 100644
index 0000000..1c484dd
--- /dev/null
+++ b/32/system/api/removed.txt
@@ -0,0 +1,334 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String MANAGE_DEVICE_ADMINS = "android.permission.MANAGE_DEVICE_ADMINS";
+  }
+
+}
+
+package android.app {
+
+  public class AppOpsManager {
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.app.AppOpsManager.PackageOps> getOpsForPackage(int, @NonNull String, @Nullable int[]);
+    method @Deprecated public void setNotedAppOpsCollector(@Nullable android.app.AppOpsManager.AppOpsCollector);
+  }
+
+  @Deprecated public abstract static class AppOpsManager.AppOpsCollector extends android.app.AppOpsManager.OnOpNotedCallback {
+    ctor public AppOpsManager.AppOpsCollector();
+    method @NonNull public java.util.concurrent.Executor getAsyncNotedExecutor();
+  }
+
+  public class Notification implements android.os.Parcelable {
+    method public static Class<? extends android.app.Notification.Style> getNotificationStyleClass(String);
+  }
+
+  public static final class Notification.TvExtender implements android.app.Notification.Extender {
+    method @Deprecated public String getChannel();
+  }
+
+}
+
+package android.app.backup {
+
+  public class RestoreSession {
+    method @Deprecated public int restoreSome(long, android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor, String[]);
+    method @Deprecated public int restoreSome(long, android.app.backup.RestoreObserver, String[]);
+  }
+
+}
+
+package android.app.prediction {
+
+  public static final class AppTarget.Builder {
+    ctor @Deprecated public AppTarget.Builder(@NonNull android.app.prediction.AppTargetId);
+    method @Deprecated @NonNull public android.app.prediction.AppTarget.Builder setTarget(@NonNull String, @NonNull android.os.UserHandle);
+    method @Deprecated @NonNull public android.app.prediction.AppTarget.Builder setTarget(@NonNull android.content.pm.ShortcutInfo);
+  }
+
+}
+
+package android.app.search {
+
+  public final class Query implements android.os.Parcelable {
+    method @Deprecated @NonNull public long getTimestamp();
+  }
+
+  public final class SearchSession implements java.lang.AutoCloseable {
+    method @Deprecated public void destroy();
+  }
+
+  public final class SearchTarget implements android.os.Parcelable {
+    method @Deprecated public boolean shouldHide();
+  }
+
+  public static final class SearchTarget.Builder {
+    method @Deprecated @NonNull public android.app.search.SearchTarget.Builder setShouldHide(boolean);
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothHeadset implements android.bluetooth.BluetoothProfile {
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.MODIFY_PHONE_STATE}) public boolean setPriority(android.bluetooth.BluetoothDevice, int);
+  }
+
+}
+
+package android.content {
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field @Deprecated public static final String ACTION_DEVICE_INITIALIZATION_WIZARD = "android.intent.action.DEVICE_INITIALIZATION_WIZARD";
+    field @Deprecated public static final String ACTION_MASTER_CLEAR = "android.intent.action.MASTER_CLEAR";
+    field @Deprecated public static final String ACTION_SERVICE_STATE = "android.intent.action.SERVICE_STATE";
+    field @Deprecated public static final String EXTRA_CDMA_DEFAULT_ROAMING_INDICATOR = "cdmaDefaultRoamingIndicator";
+    field @Deprecated public static final String EXTRA_CDMA_ROAMING_INDICATOR = "cdmaRoamingIndicator";
+    field @Deprecated public static final String EXTRA_CSS_INDICATOR = "cssIndicator";
+    field @Deprecated public static final String EXTRA_DATA_OPERATOR_ALPHA_LONG = "data-operator-alpha-long";
+    field @Deprecated public static final String EXTRA_DATA_OPERATOR_ALPHA_SHORT = "data-operator-alpha-short";
+    field @Deprecated public static final String EXTRA_DATA_OPERATOR_NUMERIC = "data-operator-numeric";
+    field @Deprecated public static final String EXTRA_DATA_RADIO_TECH = "dataRadioTechnology";
+    field @Deprecated public static final String EXTRA_DATA_REG_STATE = "dataRegState";
+    field @Deprecated public static final String EXTRA_DATA_ROAMING_TYPE = "dataRoamingType";
+    field @Deprecated public static final String EXTRA_EMERGENCY_ONLY = "emergencyOnly";
+    field @Deprecated public static final String EXTRA_IS_DATA_ROAMING_FROM_REGISTRATION = "isDataRoamingFromRegistration";
+    field @Deprecated public static final String EXTRA_IS_USING_CARRIER_AGGREGATION = "isUsingCarrierAggregation";
+    field @Deprecated public static final String EXTRA_LTE_EARFCN_RSRP_BOOST = "LteEarfcnRsrpBoost";
+    field @Deprecated public static final String EXTRA_MANUAL = "manual";
+    field @Deprecated public static final String EXTRA_NETWORK_ID = "networkId";
+    field @Deprecated public static final String EXTRA_OPERATOR_ALPHA_LONG = "operator-alpha-long";
+    field @Deprecated public static final String EXTRA_OPERATOR_ALPHA_SHORT = "operator-alpha-short";
+    field @Deprecated public static final String EXTRA_OPERATOR_NUMERIC = "operator-numeric";
+    field @Deprecated public static final String EXTRA_SYSTEM_ID = "systemId";
+    field @Deprecated public static final String EXTRA_VOICE_RADIO_TECH = "radioTechnology";
+    field @Deprecated public static final String EXTRA_VOICE_REG_STATE = "voiceRegState";
+    field @Deprecated public static final String EXTRA_VOICE_ROAMING_TYPE = "voiceRoamingType";
+  }
+
+}
+
+package android.content.pm {
+
+  public class PackageItemInfo {
+    field @Deprecated public static final int SAFE_LABEL_FLAG_FIRST_LINE = 4; // 0x4
+    field @Deprecated public static final int SAFE_LABEL_FLAG_SINGLE_LINE = 2; // 0x2
+    field @Deprecated public static final int SAFE_LABEL_FLAG_TRIM = 1; // 0x1
+  }
+
+}
+
+package android.hardware.hdmi {
+
+  public final class HdmiControlManager {
+    method @Deprecated public java.util.List<android.hardware.hdmi.HdmiDeviceInfo> getConnectedDevicesList();
+    method @Deprecated public boolean isRemoteDeviceConnected(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @Deprecated public void powerOffRemoteDevice(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+    method @Deprecated public void powerOnRemoteDevice(android.hardware.hdmi.HdmiDeviceInfo);
+    method @Deprecated public void requestRemoteDeviceToBecomeActiveSource(@NonNull android.hardware.hdmi.HdmiDeviceInfo);
+  }
+
+}
+
+package android.location {
+
+  public class LocationManager {
+    method @Deprecated public boolean addGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
+    method @Deprecated public boolean addGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String);
+    method @Deprecated public void removeGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
+    method @Deprecated public void removeGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setLocationControllerExtraPackage(String);
+    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setLocationControllerExtraPackageEnabled(boolean);
+  }
+
+}
+
+package android.media.tv {
+
+  public final class TvInputManager {
+    method @RequiresPermission(android.Manifest.permission.TV_INPUT_HARDWARE) public android.media.tv.TvInputManager.Hardware acquireTvInputHardware(int, android.media.tv.TvInputManager.HardwareCallback, android.media.tv.TvInputInfo);
+  }
+
+  public static final class TvInputManager.Hardware {
+    method public boolean dispatchKeyEventToHdmi(android.view.KeyEvent);
+  }
+
+}
+
+package android.net.wifi {
+
+  @Deprecated public class BatchedScanResult implements android.os.Parcelable {
+    ctor public BatchedScanResult();
+    ctor public BatchedScanResult(android.net.wifi.BatchedScanResult);
+    field public final java.util.List<android.net.wifi.ScanResult> scanResults;
+    field public boolean truncated;
+  }
+
+  public final class ScanResult implements android.os.Parcelable {
+    field public boolean untrusted;
+  }
+
+}
+
+package android.os {
+
+  public class Build {
+    field public static final boolean PERMISSIONS_REVIEW_REQUIRED = true;
+  }
+
+}
+
+package android.service.notification {
+
+  public abstract class NotificationListenerService extends android.app.Service {
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(int);
+    method public android.service.notification.StatusBarNotification[] getActiveNotifications(String[], int);
+    method public void registerAsSystemService(android.content.Context, android.content.ComponentName, int) throws android.os.RemoteException;
+    method public final void setOnNotificationPostedTrim(int);
+    method public final void snoozeNotification(String, String);
+    method public void unregisterAsSystemService() throws android.os.RemoteException;
+    field public static final int TRIM_FULL = 0; // 0x0
+    field public static final int TRIM_LIGHT = 1; // 0x1
+  }
+
+  public static class NotificationListenerService.Ranking {
+    method public java.util.List<java.lang.String> getAdditionalPeople();
+    method public java.util.List<android.service.notification.SnoozeCriterion> getSnoozeCriteria();
+  }
+
+}
+
+package android.service.search {
+
+  public abstract class SearchUiService extends android.app.Service {
+    method @Deprecated public void onCreateSearchSession(@NonNull android.app.search.SearchContext, @NonNull android.app.search.SearchSessionId);
+  }
+
+}
+
+package android.service.translation {
+
+  public abstract class TranslationService extends android.app.Service {
+    method @Deprecated public void onCreateTranslationSession(@NonNull android.view.translation.TranslationContext, int);
+    method @Deprecated public void onTranslationRequest(@NonNull android.view.translation.TranslationRequest, int, @Nullable android.os.CancellationSignal, @NonNull android.service.translation.TranslationService.OnTranslationResultCallback);
+  }
+
+  @Deprecated public static interface TranslationService.OnTranslationResultCallback {
+    method @Deprecated public void onError();
+    method public void onTranslationSuccess(@NonNull android.view.translation.TranslationResponse);
+  }
+
+}
+
+package android.telecom {
+
+  public class TelecomManager {
+    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.WRITE_SECURE_SETTINGS}) public boolean setDefaultDialer(@Nullable String);
+  }
+
+}
+
+package android.telephony {
+
+  public class TelephonyManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void answerRingingCall();
+    method @Deprecated @RequiresPermission(android.Manifest.permission.CALL_PHONE) public boolean endCall();
+    method @Deprecated public void silenceRinger();
+  }
+
+}
+
+package android.telephony.data {
+
+  public final class DataCallResponse implements android.os.Parcelable {
+    ctor public DataCallResponse(int, int, int, int, int, @Nullable String, @Nullable java.util.List<android.net.LinkAddress>, @Nullable java.util.List<java.net.InetAddress>, @Nullable java.util.List<java.net.InetAddress>, @Nullable java.util.List<java.net.InetAddress>, int);
+  }
+
+}
+
+package android.telephony.ims {
+
+  public interface DelegateStateCallback {
+    method @Deprecated public void onImsConfigurationChanged(@NonNull android.telephony.ims.SipDelegateImsConfiguration);
+  }
+
+  @Deprecated public final class SipDelegateImsConfiguration implements android.os.Parcelable {
+    method public boolean containsKey(@NonNull String);
+    method @NonNull public android.os.PersistableBundle copyBundle();
+    method public int describeContents();
+    method public boolean getBoolean(@NonNull String, boolean);
+    method public int getInt(@NonNull String, int);
+    method @Nullable public String getString(@NonNull String);
+    method public long getVersion();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipDelegateImsConfiguration> CREATOR;
+    field public static final String IPTYPE_IPV4 = "IPV4";
+    field public static final String IPTYPE_IPV6 = "IPV6";
+    field public static final String KEY_SIP_CONFIG_AUTHENTICATION_HEADER_STRING = "sip_config_auhentication_header_string";
+    field public static final String KEY_SIP_CONFIG_AUTHENTICATION_NONCE_STRING = "sip_config_authentication_nonce_string";
+    field public static final String KEY_SIP_CONFIG_CELLULAR_NETWORK_INFO_HEADER_STRING = "sip_config_cellular_network_info_header_string";
+    field public static final String KEY_SIP_CONFIG_HOME_DOMAIN_STRING = "sip_config_home_domain_string";
+    field public static final String KEY_SIP_CONFIG_IMEI_STRING = "sip_config_imei_string";
+    field public static final String KEY_SIP_CONFIG_IPTYPE_STRING = "sip_config_iptype_string";
+    field public static final String KEY_SIP_CONFIG_IS_COMPACT_FORM_ENABLED_BOOL = "sip_config_is_compact_form_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_GRUU_ENABLED_BOOL = "sip_config_is_gruu_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_IPSEC_ENABLED_BOOL = "sip_config_is_ipsec_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_KEEPALIVE_ENABLED_BOOL = "sip_config_is_keepalive_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_IS_NAT_ENABLED_BOOL = "sip_config_is_nat_enabled_bool";
+    field public static final String KEY_SIP_CONFIG_MAX_PAYLOAD_SIZE_ON_UDP_INT = "sip_config_udp_max_payload_size_int";
+    field public static final String KEY_SIP_CONFIG_PATH_HEADER_STRING = "sip_config_path_header_string";
+    field public static final String KEY_SIP_CONFIG_P_ACCESS_NETWORK_INFO_HEADER_STRING = "sip_config_p_access_network_info_header_string";
+    field public static final String KEY_SIP_CONFIG_P_ASSOCIATED_URI_HEADER_STRING = "sip_config_p_associated_uri_header_string";
+    field public static final String KEY_SIP_CONFIG_P_LAST_ACCESS_NETWORK_INFO_HEADER_STRING = "sip_config_p_last_access_network_info_header_string";
+    field public static final String KEY_SIP_CONFIG_SECURITY_VERIFY_HEADER_STRING = "sip_config_security_verify_header_string";
+    field public static final String KEY_SIP_CONFIG_SERVER_DEFAULT_IPADDRESS_STRING = "sip_config_server_default_ipaddress_string";
+    field public static final String KEY_SIP_CONFIG_SERVER_DEFAULT_PORT_INT = "sip_config_server_default_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVER_IPSEC_CLIENT_PORT_INT = "sip_config_server_ipsec_client_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVER_IPSEC_OLD_CLIENT_PORT_INT = "sip_config_server_ipsec_old_client_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVER_IPSEC_SERVER_PORT_INT = "sip_config_server_ipsec_server_port_int";
+    field public static final String KEY_SIP_CONFIG_SERVICE_ROUTE_HEADER_STRING = "sip_config_service_route_header_string";
+    field public static final String KEY_SIP_CONFIG_TRANSPORT_TYPE_STRING = "sip_config_protocol_type_string";
+    field public static final String KEY_SIP_CONFIG_UE_DEFAULT_IPADDRESS_STRING = "sip_config_ue_default_ipaddress_string";
+    field public static final String KEY_SIP_CONFIG_UE_DEFAULT_PORT_INT = "sip_config_ue_default_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_IPSEC_CLIENT_PORT_INT = "sip_config_ue_ipsec_client_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_IPSEC_OLD_CLIENT_PORT_INT = "sip_config_ue_ipsec_old_client_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_IPSEC_SERVER_PORT_INT = "sip_config_ue_ipsec_server_port_int";
+    field public static final String KEY_SIP_CONFIG_UE_PRIVATE_USER_ID_STRING = "sip_config_ue_private_user_id_string";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_GRUU_STRING = "sip_config_ue_public_gruu_string";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_IPADDRESS_WITH_NAT_STRING = "sip_config_ue_public_ipaddress_with_nat_string";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_PORT_WITH_NAT_INT = "sip_config_ue_public_port_with_nat_int";
+    field public static final String KEY_SIP_CONFIG_UE_PUBLIC_USER_ID_STRING = "sip_config_ue_public_user_id_string";
+    field public static final String KEY_SIP_CONFIG_URI_USER_PART_STRING = "sip_config_uri_user_part_string";
+    field public static final String KEY_SIP_CONFIG_USER_AGENT_HEADER_STRING = "sip_config_sip_user_agent_header_string";
+    field public static final String SIP_TRANSPORT_TCP = "TCP";
+    field public static final String SIP_TRANSPORT_UDP = "UDP";
+  }
+
+  public static final class SipDelegateImsConfiguration.Builder {
+    ctor public SipDelegateImsConfiguration.Builder(int);
+    ctor public SipDelegateImsConfiguration.Builder(@NonNull android.telephony.ims.SipDelegateImsConfiguration);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration.Builder addBoolean(@NonNull String, boolean);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration.Builder addInt(@NonNull String, int);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration.Builder addString(@NonNull String, @NonNull String);
+    method @NonNull public android.telephony.ims.SipDelegateImsConfiguration build();
+  }
+
+}
+
+package android.telephony.ims.stub {
+
+  public interface DelegateConnectionStateCallback {
+    method @Deprecated public default void onImsConfigurationChanged(@NonNull android.telephony.ims.SipDelegateImsConfiguration);
+  }
+
+}
+
+package android.view.translation {
+
+  public final class UiTranslationManager {
+    method @Deprecated @RequiresPermission(android.Manifest.permission.MANAGE_UI_TRANSLATION) public void startTranslation(@NonNull android.view.translation.TranslationSpec, @NonNull android.view.translation.TranslationSpec, @NonNull java.util.List<android.view.autofill.AutofillId>, @NonNull android.app.assist.ActivityId);
+  }
+
+}
+
diff --git a/32/system/art.jar b/32/system/art.jar
new file mode 100644
index 0000000..a93ccd5
--- /dev/null
+++ b/32/system/art.jar
Binary files differ
diff --git a/32/system/com.android.future.usb.accessory.jar b/32/system/com.android.future.usb.accessory.jar
new file mode 100644
index 0000000..c9e49a1
--- /dev/null
+++ b/32/system/com.android.future.usb.accessory.jar
Binary files differ
diff --git a/32/system/com.android.location.provider.jar b/32/system/com.android.location.provider.jar
new file mode 100644
index 0000000..f31b739
--- /dev/null
+++ b/32/system/com.android.location.provider.jar
Binary files differ
diff --git a/32/system/com.android.media.remotedisplay.jar b/32/system/com.android.media.remotedisplay.jar
new file mode 100644
index 0000000..1593ed0
--- /dev/null
+++ b/32/system/com.android.media.remotedisplay.jar
Binary files differ
diff --git a/32/system/com.android.media.tv.remoteprovider.jar b/32/system/com.android.media.tv.remoteprovider.jar
new file mode 100644
index 0000000..7c90a83
--- /dev/null
+++ b/32/system/com.android.media.tv.remoteprovider.jar
Binary files differ
diff --git a/32/system/com.android.mediadrm.signer.jar b/32/system/com.android.mediadrm.signer.jar
new file mode 100644
index 0000000..1942f06
--- /dev/null
+++ b/32/system/com.android.mediadrm.signer.jar
Binary files differ
diff --git a/32/system/com.android.nfc_extras.jar b/32/system/com.android.nfc_extras.jar
new file mode 100644
index 0000000..a921544
--- /dev/null
+++ b/32/system/com.android.nfc_extras.jar
Binary files differ
diff --git a/32/system/framework-appsearch.jar b/32/system/framework-appsearch.jar
new file mode 100644
index 0000000..a9ec3d4
--- /dev/null
+++ b/32/system/framework-appsearch.jar
Binary files differ
diff --git a/32/system/framework-graphics.jar b/32/system/framework-graphics.jar
new file mode 100644
index 0000000..d0cbc01
--- /dev/null
+++ b/32/system/framework-graphics.jar
Binary files differ
diff --git a/32/system/framework-media.jar b/32/system/framework-media.jar
new file mode 100644
index 0000000..346905c
--- /dev/null
+++ b/32/system/framework-media.jar
Binary files differ
diff --git a/32/system/framework-permission-s.jar b/32/system/framework-permission-s.jar
new file mode 100644
index 0000000..1cb985c
--- /dev/null
+++ b/32/system/framework-permission-s.jar
Binary files differ
diff --git a/32/system/framework-statsd.jar b/32/system/framework-statsd.jar
new file mode 100644
index 0000000..dea2999
--- /dev/null
+++ b/32/system/framework-statsd.jar
Binary files differ
diff --git a/32/system/framework-tethering.jar b/32/system/framework-tethering.jar
new file mode 100644
index 0000000..ba4f8d1
--- /dev/null
+++ b/32/system/framework-tethering.jar
Binary files differ
diff --git a/32/system/javax.obex.jar b/32/system/javax.obex.jar
new file mode 100644
index 0000000..5524768
--- /dev/null
+++ b/32/system/javax.obex.jar
Binary files differ
diff --git a/32/system/org.apache.http.legacy.jar b/32/system/org.apache.http.legacy.jar
new file mode 100644
index 0000000..c3654cd
--- /dev/null
+++ b/32/system/org.apache.http.legacy.jar
Binary files differ
diff --git a/32/test/android-non-updatable.jar b/32/test/android-non-updatable.jar
new file mode 100644
index 0000000..8b97add
--- /dev/null
+++ b/32/test/android-non-updatable.jar
Binary files differ
diff --git a/32/test/android.jar b/32/test/android.jar
new file mode 100644
index 0000000..e774226
--- /dev/null
+++ b/32/test/android.jar
Binary files differ
diff --git a/32/test/android.test.base.jar b/32/test/android.test.base.jar
new file mode 100644
index 0000000..f48d4ac
--- /dev/null
+++ b/32/test/android.test.base.jar
Binary files differ
diff --git a/32/test/android.test.mock.jar b/32/test/android.test.mock.jar
new file mode 100644
index 0000000..9e410d3
--- /dev/null
+++ b/32/test/android.test.mock.jar
Binary files differ
diff --git a/32/test/android.test.runner.jar b/32/test/android.test.runner.jar
new file mode 100644
index 0000000..16b9a0a
--- /dev/null
+++ b/32/test/android.test.runner.jar
Binary files differ
diff --git a/32/test/api/android-non-updatable-removed.txt b/32/test/api/android-non-updatable-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/android-non-updatable-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/android-non-updatable.txt b/32/test/api/android-non-updatable.txt
new file mode 100644
index 0000000..a8e06fc
--- /dev/null
+++ b/32/test/api/android-non-updatable.txt
@@ -0,0 +1,3338 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String ACCESS_NOTIFICATIONS = "android.permission.ACCESS_NOTIFICATIONS";
+    field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
+    field public static final String APPROVE_INCIDENT_REPORTS = "android.permission.APPROVE_INCIDENT_REPORTS";
+    field public static final String BACKGROUND_CAMERA = "android.permission.BACKGROUND_CAMERA";
+    field public static final String BIND_CELL_BROADCAST_SERVICE = "android.permission.BIND_CELL_BROADCAST_SERVICE";
+    field public static final String BRIGHTNESS_SLIDER_USAGE = "android.permission.BRIGHTNESS_SLIDER_USAGE";
+    field public static final String BROADCAST_CLOSE_SYSTEM_DIALOGS = "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS";
+    field public static final String CHANGE_APP_IDLE_STATE = "android.permission.CHANGE_APP_IDLE_STATE";
+    field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA";
+    field public static final String CLEAR_FREEZE_PERIOD = "android.permission.CLEAR_FREEZE_PERIOD";
+    field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
+    field public static final String CONTROL_DEVICE_LIGHTS = "android.permission.CONTROL_DEVICE_LIGHTS";
+    field public static final String CONTROL_DEVICE_STATE = "android.permission.CONTROL_DEVICE_STATE";
+    field public static final String FORCE_DEVICE_POLICY_MANAGER_LOGS = "android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS";
+    field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES";
+    field public static final String INSTALL_TEST_ONLY_PACKAGE = "android.permission.INSTALL_TEST_ONLY_PACKAGE";
+    field public static final String KEEP_UNINSTALLED_PACKAGES = "android.permission.KEEP_UNINSTALLED_PACKAGES";
+    field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+    field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
+    field public static final String MANAGE_CRATES = "android.permission.MANAGE_CRATES";
+    field public static final String MANAGE_NOTIFICATION_LISTENERS = "android.permission.MANAGE_NOTIFICATION_LISTENERS";
+    field public static final String MANAGE_ROLLBACKS = "android.permission.MANAGE_ROLLBACKS";
+    field public static final String MANAGE_TOAST_RATE_LIMITING = "android.permission.MANAGE_TOAST_RATE_LIMITING";
+    field public static final String MODIFY_REFRESH_RATE_SWITCHING_TYPE = "android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE";
+    field public static final String NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
+    field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
+    field public static final String OVERRIDE_DISPLAY_MODE_REQUESTS = "android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS";
+    field public static final String QUERY_AUDIO_STATE = "android.permission.QUERY_AUDIO_STATE";
+    field public static final String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS";
+    field public static final String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
+    field public static final String RECORD_BACKGROUND_AUDIO = "android.permission.RECORD_BACKGROUND_AUDIO";
+    field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
+    field public static final String RESET_APP_ERRORS = "android.permission.RESET_APP_ERRORS";
+    field public static final String SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS = "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS";
+    field public static final String START_TASKS_FROM_RECENTS = "android.permission.START_TASKS_FROM_RECENTS";
+    field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
+    field public static final String TEST_BIOMETRIC = "android.permission.TEST_BIOMETRIC";
+    field public static final String TEST_MANAGE_ROLLBACKS = "android.permission.TEST_MANAGE_ROLLBACKS";
+    field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS";
+    field public static final String WRITE_DEVICE_CONFIG = "android.permission.WRITE_DEVICE_CONFIG";
+    field @Deprecated public static final String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE";
+    field public static final String WRITE_OBB = "android.permission.WRITE_OBB";
+  }
+
+  public static final class Manifest.permission_group {
+    field public static final String UNDEFINED = "android.permission-group.UNDEFINED";
+  }
+
+  public static final class R.attr {
+    field public static final int requestForegroundServiceExemption = 16844362; // 0x101064a
+  }
+
+  public static final class R.bool {
+    field public static final int config_assistantOnTopOfDream = 17891333; // 0x1110005
+    field public static final int config_perDisplayFocusEnabled = 17891332; // 0x1110004
+    field public static final int config_remoteInsetsControllerControlsSystemBars = 17891334; // 0x1110006
+  }
+
+  public static final class R.string {
+    field public static final int config_defaultAssistant = 17039393; // 0x1040021
+    field public static final int config_defaultDialer = 17039395; // 0x1040023
+    field public static final int config_systemAutomotiveCluster = 17039400; // 0x1040028
+    field public static final int config_systemAutomotiveProjection = 17039401; // 0x1040029
+    field public static final int config_systemGallery = 17039399; // 0x1040027
+  }
+
+}
+
+package android.accessibilityservice {
+
+  public final class AccessibilityGestureEvent implements android.os.Parcelable {
+    ctor public AccessibilityGestureEvent(int, int);
+  }
+
+  public abstract class AccessibilityService extends android.app.Service {
+    field public static final int ACCESSIBILITY_TAKE_SCREENSHOT_REQUEST_INTERVAL_TIMES_MS = 333; // 0x14d
+  }
+
+  public class AccessibilityServiceInfo implements android.os.Parcelable {
+    method @NonNull public android.content.ComponentName getComponentName();
+  }
+
+}
+
+package android.animation {
+
+  public class ValueAnimator extends android.animation.Animator {
+    method public static float getDurationScale();
+    method public static void setDurationScale(float);
+  }
+
+}
+
+package android.app {
+
+  @UiContext public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    method public void onMovedToDisplay(int, android.content.res.Configuration);
+  }
+
+  public class ActivityManager {
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener);
+    method public void alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName);
+    method public long getTotalRam();
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidProcessCapabilities(int);
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidProcessState(int);
+    method public void holdLock(android.os.IBinder, int);
+    method public static boolean isHighEndGfx();
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener);
+    method @RequiresPermission(android.Manifest.permission.RESET_APP_ERRORS) public void resetAppErrors();
+    method public static void resumeAppSwitches() throws android.os.RemoteException;
+    method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public void scheduleApplicationInfoChanged(java.util.List<java.lang.String>, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public void setStopUserOnSwitch(int);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public boolean stopUser(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public boolean updateMccMncConfiguration(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.DUMP) public void waitForBroadcastIdle();
+    field public static final long LOCK_DOWN_CLOSE_SYSTEM_DIALOGS = 174664365L; // 0xa692aadL
+    field public static final int PROCESS_CAPABILITY_ALL = 15; // 0xf
+    field public static final int PROCESS_CAPABILITY_ALL_EXPLICIT = 1; // 0x1
+    field public static final int PROCESS_CAPABILITY_ALL_IMPLICIT = 6; // 0x6
+    field public static final int PROCESS_CAPABILITY_FOREGROUND_CAMERA = 2; // 0x2
+    field public static final int PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1; // 0x1
+    field public static final int PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 4; // 0x4
+    field public static final int PROCESS_CAPABILITY_NETWORK = 8; // 0x8
+    field public static final int PROCESS_CAPABILITY_NONE = 0; // 0x0
+    field public static final int PROCESS_STATE_FOREGROUND_SERVICE = 4; // 0x4
+    field public static final int PROCESS_STATE_TOP = 2; // 0x2
+    field public static final int STOP_USER_ON_SWITCH_DEFAULT = -1; // 0xffffffff
+    field public static final int STOP_USER_ON_SWITCH_FALSE = 0; // 0x0
+    field public static final int STOP_USER_ON_SWITCH_TRUE = 1; // 0x1
+  }
+
+  public static class ActivityManager.RunningAppProcessInfo implements android.os.Parcelable {
+    field public static final int IMPORTANCE_CANT_SAVE_STATE_PRE_26 = 170; // 0xaa
+  }
+
+  public static class ActivityManager.TaskDescription implements android.os.Parcelable {
+    method public String getIconFilename();
+    method public int getIconResource();
+    method @Nullable public String getIconResourcePackage();
+  }
+
+  public class ActivityOptions {
+    method @NonNull public static android.app.ActivityOptions makeCustomAnimation(@NonNull android.content.Context, int, int, @Nullable android.os.Handler, @Nullable android.app.ActivityOptions.OnAnimationStartedListener, @Nullable android.app.ActivityOptions.OnAnimationFinishedListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.START_TASKS_FROM_RECENTS) public static android.app.ActivityOptions makeCustomTaskAnimation(@NonNull android.content.Context, int, int, @Nullable android.os.Handler, @Nullable android.app.ActivityOptions.OnAnimationStartedListener, @Nullable android.app.ActivityOptions.OnAnimationFinishedListener);
+    method public static void setExitTransitionTimeout(long);
+    method public void setLaunchActivityType(int);
+    method public void setLaunchWindowingMode(int);
+    method public void setLaunchedFromBubble(boolean);
+    method public void setTaskAlwaysOnTop(boolean);
+    method public void setTaskOverlay(boolean, boolean);
+  }
+
+  public static interface ActivityOptions.OnAnimationFinishedListener {
+    method public void onAnimationFinished();
+  }
+
+  public static interface ActivityOptions.OnAnimationStartedListener {
+    method public void onAnimationStarted();
+  }
+
+  public class ActivityTaskManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void clearLaunchParamsForPackages(java.util.List<java.lang.String>);
+    method public static boolean currentUiModeSupportsErrorDialogs(@NonNull android.content.Context);
+    method public static int getMaxNumPictureInPictureActions(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void moveTaskToRootTask(int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksInWindowingModes(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksWithActivityTypes(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean removeTask(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void resizeTask(int, android.graphics.Rect);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void startSystemLockTaskMode(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void stopSystemLockTaskMode();
+    method public static boolean supportsMultiWindow(android.content.Context);
+    method public static boolean supportsSplitScreenMultiWindow(android.content.Context);
+    field public static final int DEFAULT_MINIMAL_SPLIT_SCREEN_DISPLAY_SIZE_DP = 440; // 0x1b8
+    field public static final int INVALID_STACK_ID = -1; // 0xffffffff
+  }
+
+  public class AlarmManager {
+    method public boolean hasScheduleExactAlarm(@NonNull String, int);
+  }
+
+  public class AppDetailsActivity extends android.app.Activity {
+    ctor public AppDetailsActivity();
+  }
+
+  public class AppOpsManager {
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void addHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOps);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void clearHistory();
+    method public static void collectNotedOpSync(@NonNull android.app.SyncNotedAppOp);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void getHistoricalOpsFromDiskRaw(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @Nullable java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
+    method public static int getNumOps();
+    method public boolean isOperationActive(int, int, String);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void offsetHistory(long);
+    method public static String opToPermission(int);
+    method public static int permissionToOpCode(String);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void rebootHistory(long);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void reloadNonHistoricalState();
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void resetHistoryParameters();
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void resetPackageOpsNoHistory(@NonNull String);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void setHistoryParameters(int, long, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(int, int, String, int);
+    method public static int strOpToOp(@NonNull String);
+    field public static final int ATTRIBUTION_CHAIN_ID_NONE = -1; // 0xffffffff
+    field public static final int ATTRIBUTION_FLAGS_NONE = 0; // 0x0
+    field public static final int ATTRIBUTION_FLAG_ACCESSOR = 1; // 0x1
+    field public static final int ATTRIBUTION_FLAG_INTERMEDIARY = 2; // 0x2
+    field public static final int ATTRIBUTION_FLAG_RECEIVER = 4; // 0x4
+    field public static final int HISTORICAL_MODE_DISABLED = 0; // 0x0
+    field public static final int HISTORICAL_MODE_ENABLED_ACTIVE = 1; // 0x1
+    field public static final int HISTORICAL_MODE_ENABLED_PASSIVE = 2; // 0x2
+    field public static final int HISTORY_FLAGS_ALL = 3; // 0x3
+    field public static final int HISTORY_FLAG_AGGREGATE = 1; // 0x1
+    field public static final int HISTORY_FLAG_DISCRETE = 2; // 0x2
+    field public static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time";
+    field public static final String KEY_FG_SERVICE_STATE_SETTLE_TIME = "fg_service_state_settle_time";
+    field public static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time";
+    field public static final String OPSTR_ACTIVITY_RECOGNITION = "android:activity_recognition";
+    field public static final String OPSTR_ACTIVITY_RECOGNITION_SOURCE = "android:activity_recognition_source";
+    field public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls";
+    field public static final String OPSTR_RECORD_AUDIO_HOTWORD = "android:record_audio_hotword";
+    field public static final String OPSTR_USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER = "android:use_icc_auth_with_device_identifier";
+    field public static final int OP_COARSE_LOCATION = 0; // 0x0
+    field public static final int OP_RECORD_AUDIO = 27; // 0x1b
+    field public static final int OP_START_FOREGROUND = 76; // 0x4c
+    field public static final int OP_SYSTEM_ALERT_WINDOW = 24; // 0x18
+    field public static final long SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE = 151105954L; // 0x901b1a2L
+  }
+
+  public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
+    ctor public AppOpsManager.HistoricalOps(long, long);
+    method public void addDiscreteAccess(int, int, @NonNull String, @Nullable String, int, int, long, long);
+    method public void increaseAccessCount(int, int, @NonNull String, @Nullable String, int, int, long);
+    method public void increaseAccessDuration(int, int, @NonNull String, @Nullable String, int, int, long);
+    method public void increaseRejectCount(int, int, @NonNull String, @Nullable String, int, int, long);
+    method public void offsetBeginAndEndTime(long);
+  }
+
+  public static interface AppOpsManager.OnOpActiveChangedListener {
+    method public default void onOpActiveChanged(@NonNull String, int, @NonNull String, @Nullable String, boolean, int, int);
+  }
+
+  public class BroadcastOptions {
+    ctor public BroadcastOptions(@NonNull android.os.Bundle);
+    method public int getMaxManifestReceiverApiLevel();
+    method public long getTemporaryAppAllowlistDuration();
+    method @Nullable public String getTemporaryAppAllowlistReason();
+    method public int getTemporaryAppAllowlistReasonCode();
+    method public int getTemporaryAppAllowlistType();
+    method public void setMaxManifestReceiverApiLevel(int);
+  }
+
+  public class DownloadManager {
+    field public static final String COLUMN_MEDIASTORE_URI = "mediastore_uri";
+  }
+
+  public class DreamManager {
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isDreaming();
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void setActiveDream(@NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void startDream(@NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void stopDream();
+  }
+
+  public final class GameManager {
+    method @RequiresPermission("android.permission.MANAGE_GAME_MODE") public void setGameMode(@NonNull String, int);
+  }
+
+  public abstract class HomeVisibilityListener {
+    ctor public HomeVisibilityListener();
+    method public abstract void onHomeVisibilityChanged(boolean);
+  }
+
+  public class KeyguardManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS, "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"}) public boolean checkLock(int, @Nullable byte[]);
+    method @RequiresPermission(anyOf={android.Manifest.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS, "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"}) public boolean setLock(int, @Nullable byte[], int, @Nullable byte[]);
+  }
+
+  public class Notification implements android.os.Parcelable {
+    method public boolean shouldShowForegroundImmediately();
+  }
+
+  public final class NotificationChannel implements android.os.Parcelable {
+    method public int getOriginalImportance();
+    method public boolean isBlockable();
+    method public boolean isImportanceLockedByCriticalDeviceFunction();
+    method public boolean isImportanceLockedByOEM();
+    method public void lockFields(int);
+    method public void setDeleted(boolean);
+    method public void setDeletedTimeMs(long);
+    method public void setDemoted(boolean);
+    method public void setFgServiceShown(boolean);
+    method public void setImportanceLockedByCriticalDeviceFunction(boolean);
+    method public void setImportanceLockedByOEM(boolean);
+    method public void setImportantConversation(boolean);
+    method public void setOriginalImportance(int);
+  }
+
+  public final class NotificationChannelGroup implements android.os.Parcelable {
+    method public int getUserLockedFields();
+    method public void lockFields(int);
+    method public void setBlocked(boolean);
+  }
+
+  public class NotificationManager {
+    method public void allowAssistantAdjustment(String);
+    method public void disallowAssistantAdjustment(String);
+    method public android.content.ComponentName getEffectsSuppressor();
+    method public boolean isNotificationPolicyAccessGrantedForPackage(@NonNull String);
+    method public boolean matchesCallFilter(android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public void setNotificationListenerAccessGranted(@NonNull android.content.ComponentName, boolean, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TOAST_RATE_LIMITING) public void setToastRateLimitingEnabled(boolean);
+    method public void updateNotificationChannel(@NonNull String, int, @NonNull android.app.NotificationChannel);
+  }
+
+  public final class PendingIntent implements android.os.Parcelable {
+    method @RequiresPermission("android.permission.GET_INTENT_SENDER_INTENT") public boolean intentFilterEquals(@Nullable android.app.PendingIntent);
+    method @NonNull @RequiresPermission("android.permission.GET_INTENT_SENDER_INTENT") public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
+    field @Deprecated public static final int FLAG_MUTABLE_UNAUDITED = 33554432; // 0x2000000
+  }
+
+  public final class PictureInPictureParams implements android.os.Parcelable {
+    method public java.util.List<android.app.RemoteAction> getActions();
+    method public float getAspectRatio();
+    method public android.graphics.Rect getSourceRectHint();
+    method public boolean isSeamlessResizeEnabled();
+  }
+
+  public final class PictureInPictureUiState implements android.os.Parcelable {
+    ctor public PictureInPictureUiState(boolean);
+  }
+
+  public class StatusBarManager {
+    method public void clickNotification(@Nullable String, int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void collapsePanels();
+    method public void expandNotificationsPanel();
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void handleSystemKey(int);
+    method public void sendNotificationFeedback(@Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setExpansionDisabledForSimNetworkLock(boolean);
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void togglePanel();
+  }
+
+  public final class SyncNotedAppOp implements android.os.Parcelable {
+    ctor public SyncNotedAppOp(int, @IntRange(from=0L) int, @Nullable String, @NonNull String);
+  }
+
+  public class TaskInfo {
+    method public boolean containsLaunchCookie(@NonNull android.os.IBinder);
+    method @NonNull public android.content.res.Configuration getConfiguration();
+    method public int getParentTaskId();
+    method @Nullable public android.app.PictureInPictureParams getPictureInPictureParams();
+    method @NonNull public android.window.WindowContainerToken getToken();
+    method public boolean hasParentTask();
+  }
+
+  public class TimePickerDialog extends android.app.AlertDialog implements android.content.DialogInterface.OnClickListener android.widget.TimePicker.OnTimeChangedListener {
+    method public android.widget.TimePicker getTimePicker();
+  }
+
+  public final class UiAutomation {
+    method public void destroy();
+    method @NonNull public android.os.ParcelFileDescriptor[] executeShellCommandRwe(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getAdoptedShellPermissions();
+    method @Deprecated public boolean grantRuntimePermission(String, String, android.os.UserHandle);
+    method public boolean injectInputEvent(@NonNull android.view.InputEvent, boolean, boolean);
+    method @Deprecated public boolean revokeRuntimePermission(String, String, android.os.UserHandle);
+    method public void syncInputTransactions();
+    method public void syncInputTransactions(boolean);
+    method @Nullable public android.graphics.Bitmap takeScreenshot(@NonNull android.view.Window);
+    field @NonNull public static final java.util.Set<java.lang.String> ALL_PERMISSIONS;
+  }
+
+  public class UiModeManager {
+    method public boolean isNightModeLocked();
+    method public boolean isUiModeLocked();
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean releaseProjection(int);
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean requestProjection(int);
+    field public static final int PROJECTION_TYPE_ALL = -1; // 0xffffffff
+    field public static final int PROJECTION_TYPE_AUTOMOTIVE = 1; // 0x1
+    field public static final int PROJECTION_TYPE_NONE = 0; // 0x0
+  }
+
+  public class WallpaperManager {
+    method @Nullable public android.graphics.Bitmap getBitmap();
+    method public boolean shouldEnableWideColorGamut();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public boolean wallpaperSupportsWcg(int);
+  }
+
+  public class WindowConfiguration implements java.lang.Comparable<android.app.WindowConfiguration> android.os.Parcelable {
+    ctor public WindowConfiguration();
+    method public int compareTo(android.app.WindowConfiguration);
+    method public int describeContents();
+    method public int getActivityType();
+    method public android.graphics.Rect getAppBounds();
+    method public android.graphics.Rect getBounds();
+    method @NonNull public android.graphics.Rect getMaxBounds();
+    method public int getRotation();
+    method public int getWindowingMode();
+    method public void setActivityType(int);
+    method public void setAppBounds(android.graphics.Rect);
+    method public void setBounds(android.graphics.Rect);
+    method public void setMaxBounds(@Nullable android.graphics.Rect);
+    method public void setRotation(int);
+    method public void setTo(android.app.WindowConfiguration);
+    method public void setWindowingMode(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTIVITY_TYPE_ASSISTANT = 4; // 0x4
+    field public static final int ACTIVITY_TYPE_DREAM = 5; // 0x5
+    field public static final int ACTIVITY_TYPE_HOME = 2; // 0x2
+    field public static final int ACTIVITY_TYPE_RECENTS = 3; // 0x3
+    field public static final int ACTIVITY_TYPE_STANDARD = 1; // 0x1
+    field public static final int ACTIVITY_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int ROTATION_UNDEFINED = -1; // 0xffffffff
+    field public static final int WINDOWING_MODE_FREEFORM = 5; // 0x5
+    field public static final int WINDOWING_MODE_FULLSCREEN = 1; // 0x1
+    field public static final int WINDOWING_MODE_MULTI_WINDOW = 6; // 0x6
+    field public static final int WINDOWING_MODE_PINNED = 2; // 0x2
+    field public static final int WINDOWING_MODE_SPLIT_SCREEN_PRIMARY = 3; // 0x3
+    field public static final int WINDOWING_MODE_SPLIT_SCREEN_SECONDARY = 4; // 0x4
+    field public static final int WINDOWING_MODE_UNDEFINED = 0; // 0x0
+  }
+
+}
+
+package android.app.admin {
+
+  public class DevicePolicyManager {
+    method public int checkProvisioningPreCondition(@Nullable String, @NonNull String);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void clearOrganizationId();
+    method @RequiresPermission(android.Manifest.permission.CLEAR_FREEZE_PERIOD) public void clearSystemUpdatePolicyFreezePeriodRecord();
+    method @Nullable public android.os.UserHandle createAndProvisionManagedProfile(@NonNull android.app.admin.ManagedProfileProvisioningParams) throws android.app.admin.ProvisioningException;
+    method @RequiresPermission(android.Manifest.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS) public long forceNetworkLogs();
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void forceRemoveActiveAdmin(@NonNull android.content.ComponentName, int);
+    method @RequiresPermission(android.Manifest.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS) public long forceSecurityLogs();
+    method public void forceUpdateUserSetupComplete(int);
+    method @NonNull public java.util.Set<java.lang.String> getDefaultCrossProfilePackages();
+    method @NonNull public java.util.Set<java.lang.String> getDisallowedSystemApps(@NonNull android.content.ComponentName, int, @NonNull String);
+    method public long getLastBugReportRequestTime();
+    method public long getLastNetworkLogRetrievalTime();
+    method public long getLastSecurityLogRetrievalTime();
+    method public java.util.List<java.lang.String> getOwnerInstalledCaCerts(@NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public java.util.Set<java.lang.String> getPolicyExemptApps();
+    method public boolean isCurrentInputMethodSetByOwner();
+    method public boolean isFactoryResetProtectionPolicySupported();
+    method @RequiresPermission(anyOf={"android.permission.MARK_DEVICE_ORGANIZATION_OWNED", "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"}, conditional=true) public void markProfileOwnerOnOrganizationOwnedDevice(@NonNull android.content.ComponentName);
+    method @NonNull public static String operationSafetyReasonToString(int);
+    method @NonNull public static String operationToString(int);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void provisionFullyManagedDevice(@NonNull android.app.admin.FullyManagedDeviceProvisioningParams) throws android.app.admin.ProvisioningException;
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void resetDefaultCrossProfileIntentFilters(int);
+    method @RequiresPermission(allOf={"android.permission.MANAGE_DEVICE_ADMINS", android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public void setActiveAdmin(@NonNull android.content.ComponentName, boolean, int);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public boolean setDeviceOwner(@NonNull android.content.ComponentName, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public boolean setDeviceOwnerOnly(@NonNull android.content.ComponentName, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public void setNextOperationSafety(int, int);
+    field public static final String ACTION_DATA_SHARING_RESTRICTION_APPLIED = "android.app.action.DATA_SHARING_RESTRICTION_APPLIED";
+    field public static final String ACTION_DEVICE_POLICY_CONSTANTS_CHANGED = "android.app.action.DEVICE_POLICY_CONSTANTS_CHANGED";
+    field public static final int CODE_ACCOUNTS_NOT_EMPTY = 6; // 0x6
+    field public static final int CODE_CANNOT_ADD_MANAGED_PROFILE = 11; // 0xb
+    field public static final int CODE_DEVICE_ADMIN_NOT_SUPPORTED = 13; // 0xd
+    field public static final int CODE_HAS_DEVICE_OWNER = 1; // 0x1
+    field public static final int CODE_HAS_PAIRED = 8; // 0x8
+    field public static final int CODE_MANAGED_USERS_NOT_SUPPORTED = 9; // 0x9
+    field public static final int CODE_NONSYSTEM_USER_EXISTS = 5; // 0x5
+    field public static final int CODE_NOT_SYSTEM_USER = 7; // 0x7
+    field @Deprecated public static final int CODE_NOT_SYSTEM_USER_SPLIT = 12; // 0xc
+    field public static final int CODE_OK = 0; // 0x0
+    field public static final int CODE_PROVISIONING_NOT_ALLOWED_FOR_NON_DEVELOPER_USERS = 15; // 0xf
+    field @Deprecated public static final int CODE_SPLIT_SYSTEM_USER_DEVICE_SYSTEM_USER = 14; // 0xe
+    field public static final int CODE_SYSTEM_USER = 10; // 0xa
+    field public static final int CODE_USER_HAS_PROFILE_OWNER = 2; // 0x2
+    field public static final int CODE_USER_NOT_RUNNING = 3; // 0x3
+    field public static final int CODE_USER_SETUP_COMPLETED = 4; // 0x4
+    field public static final int OPERATION_CLEAR_APPLICATION_USER_DATA = 23; // 0x17
+    field public static final int OPERATION_CREATE_AND_MANAGE_USER = 5; // 0x5
+    field public static final int OPERATION_INSTALL_CA_CERT = 24; // 0x18
+    field public static final int OPERATION_INSTALL_KEY_PAIR = 25; // 0x19
+    field public static final int OPERATION_INSTALL_SYSTEM_UPDATE = 26; // 0x1a
+    field public static final int OPERATION_LOCK_NOW = 1; // 0x1
+    field public static final int OPERATION_LOGOUT_USER = 9; // 0x9
+    field public static final int OPERATION_REBOOT = 7; // 0x7
+    field public static final int OPERATION_REMOVE_ACTIVE_ADMIN = 27; // 0x1b
+    field public static final int OPERATION_REMOVE_KEY_PAIR = 28; // 0x1c
+    field public static final int OPERATION_REMOVE_USER = 6; // 0x6
+    field public static final int OPERATION_REQUEST_BUGREPORT = 29; // 0x1d
+    field public static final int OPERATION_SAFETY_REASON_NONE = -1; // 0xffffffff
+    field public static final int OPERATION_SET_ALWAYS_ON_VPN_PACKAGE = 30; // 0x1e
+    field public static final int OPERATION_SET_APPLICATION_HIDDEN = 15; // 0xf
+    field public static final int OPERATION_SET_APPLICATION_RESTRICTIONS = 16; // 0x10
+    field public static final int OPERATION_SET_CAMERA_DISABLED = 31; // 0x1f
+    field public static final int OPERATION_SET_FACTORY_RESET_PROTECTION_POLICY = 32; // 0x20
+    field public static final int OPERATION_SET_GLOBAL_PRIVATE_DNS = 33; // 0x21
+    field public static final int OPERATION_SET_KEEP_UNINSTALLED_PACKAGES = 17; // 0x11
+    field public static final int OPERATION_SET_KEYGUARD_DISABLED = 12; // 0xc
+    field public static final int OPERATION_SET_LOCK_TASK_FEATURES = 18; // 0x12
+    field public static final int OPERATION_SET_LOCK_TASK_PACKAGES = 19; // 0x13
+    field public static final int OPERATION_SET_LOGOUT_ENABLED = 34; // 0x22
+    field public static final int OPERATION_SET_MASTER_VOLUME_MUTED = 35; // 0x23
+    field public static final int OPERATION_SET_OVERRIDE_APNS_ENABLED = 36; // 0x24
+    field public static final int OPERATION_SET_PACKAGES_SUSPENDED = 20; // 0x14
+    field public static final int OPERATION_SET_PERMISSION_GRANT_STATE = 37; // 0x25
+    field public static final int OPERATION_SET_PERMISSION_POLICY = 38; // 0x26
+    field public static final int OPERATION_SET_RESTRICTIONS_PROVIDER = 39; // 0x27
+    field public static final int OPERATION_SET_STATUS_BAR_DISABLED = 13; // 0xd
+    field public static final int OPERATION_SET_SYSTEM_SETTING = 11; // 0xb
+    field public static final int OPERATION_SET_SYSTEM_UPDATE_POLICY = 14; // 0xe
+    field public static final int OPERATION_SET_TRUST_AGENT_CONFIGURATION = 21; // 0x15
+    field public static final int OPERATION_SET_USER_CONTROL_DISABLED_PACKAGES = 22; // 0x16
+    field public static final int OPERATION_SET_USER_RESTRICTION = 10; // 0xa
+    field public static final int OPERATION_START_USER_IN_BACKGROUND = 3; // 0x3
+    field public static final int OPERATION_STOP_USER = 4; // 0x4
+    field public static final int OPERATION_SWITCH_USER = 2; // 0x2
+    field public static final int OPERATION_UNINSTALL_CA_CERT = 40; // 0x28
+    field public static final int OPERATION_WIPE_DATA = 8; // 0x8
+    field public static final int PROVISIONING_RESULT_ADMIN_PACKAGE_INSTALLATION_FAILED = 3; // 0x3
+    field public static final int PROVISIONING_RESULT_PRE_CONDITION_FAILED = 1; // 0x1
+    field public static final int PROVISIONING_RESULT_PROFILE_CREATION_FAILED = 2; // 0x2
+    field public static final int PROVISIONING_RESULT_REMOVE_NON_REQUIRED_APPS_FAILED = 6; // 0x6
+    field public static final int PROVISIONING_RESULT_SETTING_PROFILE_OWNER_FAILED = 4; // 0x4
+    field public static final int PROVISIONING_RESULT_SET_DEVICE_OWNER_FAILED = 7; // 0x7
+    field public static final int PROVISIONING_RESULT_STARTING_PROFILE_FAILED = 5; // 0x5
+  }
+
+  public final class FullyManagedDeviceProvisioningParams implements android.os.Parcelable {
+    method public boolean canDeviceOwnerGrantSensorsPermissions();
+    method public int describeContents();
+    method @NonNull public android.content.ComponentName getDeviceAdminComponentName();
+    method public long getLocalTime();
+    method @Nullable public java.util.Locale getLocale();
+    method @NonNull public String getOwnerName();
+    method @Nullable public String getTimeZone();
+    method public boolean isLeaveAllSystemAppsEnabled();
+    method public void logParams(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.FullyManagedDeviceProvisioningParams> CREATOR;
+  }
+
+  public static final class FullyManagedDeviceProvisioningParams.Builder {
+    ctor public FullyManagedDeviceProvisioningParams.Builder(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams build();
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setDeviceOwnerCanGrantSensorsPermissions(boolean);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocalTime(long);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocale(@Nullable java.util.Locale);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setTimeZone(@Nullable String);
+  }
+
+  public final class ManagedProfileProvisioningParams implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.accounts.Account getAccountToMigrate();
+    method @NonNull public String getOwnerName();
+    method @NonNull public android.content.ComponentName getProfileAdminComponentName();
+    method @Nullable public String getProfileName();
+    method public boolean isKeepAccountMigrated();
+    method public boolean isLeaveAllSystemAppsEnabled();
+    method public boolean isOrganizationOwnedProvisioning();
+    method public void logParams(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.ManagedProfileProvisioningParams> CREATOR;
+  }
+
+  public static final class ManagedProfileProvisioningParams.Builder {
+    ctor public ManagedProfileProvisioningParams.Builder(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams build();
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setAccountToMigrate(@Nullable android.accounts.Account);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setKeepAccountMigrated(boolean);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setOrganizationOwnedProvisioning(boolean);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setProfileName(@Nullable String);
+  }
+
+  public class ProvisioningException extends android.util.AndroidException {
+    ctor public ProvisioningException(@NonNull Exception, int);
+    method public int getProvisioningResult();
+  }
+
+  public static final class SecurityLog.SecurityEvent implements android.os.Parcelable {
+    ctor public SecurityLog.SecurityEvent(long, byte[]);
+  }
+
+  public final class UnsafeStateException extends java.lang.IllegalStateException implements android.os.Parcelable {
+    ctor public UnsafeStateException(int, int);
+    method public int getOperation();
+  }
+
+}
+
+package android.app.assist {
+
+  public class ActivityId {
+    method public int getTaskId();
+    method @Nullable public android.os.IBinder getToken();
+  }
+
+}
+
+package android.app.blob {
+
+  public class BlobStoreManager {
+    method @Nullable public android.app.blob.LeaseInfo getLeaseInfo(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+    method public void waitForIdle(long) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+  }
+
+  public final class LeaseInfo implements android.os.Parcelable {
+    ctor public LeaseInfo(@NonNull String, long, @IdRes int, @Nullable CharSequence);
+    method public int describeContents();
+    method @Nullable public CharSequence getDescription();
+    method @IdRes public int getDescriptionResId();
+    method public long getExpiryTimeMillis();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.blob.LeaseInfo> CREATOR;
+  }
+
+}
+
+package android.app.contentsuggestions {
+
+  public final class ContentSuggestionsManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void resetTemporaryService(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void setDefaultServiceEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void setTemporaryService(int, @NonNull String, int);
+  }
+
+}
+
+package android.app.prediction {
+
+  public final class AppPredictor {
+    method public android.app.prediction.AppPredictionSessionId getSessionId();
+  }
+
+}
+
+package android.app.usage {
+
+  public class NetworkStatsManager {
+    method public void setPollForce(boolean);
+  }
+
+  public class StorageStatsManager {
+    method public boolean isQuotaSupported(@NonNull java.util.UUID);
+    method public boolean isReservedSupported(@NonNull java.util.UUID);
+    method @NonNull @WorkerThread public java.util.Collection<android.os.storage.CrateInfo> queryCratesForPackage(@NonNull java.util.UUID, @NonNull String, @NonNull android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @WorkerThread public java.util.Collection<android.os.storage.CrateInfo> queryCratesForUid(@NonNull java.util.UUID, int) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_CRATES) @WorkerThread public java.util.Collection<android.os.storage.CrateInfo> queryCratesForUser(@NonNull java.util.UUID, @NonNull android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+  }
+
+  public final class UsageStats implements android.os.Parcelable {
+    ctor public UsageStats();
+  }
+
+  public static final class UsageStats.Builder {
+    ctor public UsageStats.Builder();
+    method @NonNull public android.app.usage.UsageStats build();
+    method @NonNull public android.app.usage.UsageStats.Builder setFirstTimeStamp(long);
+    method @NonNull public android.app.usage.UsageStats.Builder setLastTimeStamp(long);
+    method @NonNull public android.app.usage.UsageStats.Builder setLastTimeUsed(long);
+    method @NonNull public android.app.usage.UsageStats.Builder setPackageName(@Nullable String);
+    method @NonNull public android.app.usage.UsageStats.Builder setTotalTimeInForeground(long);
+  }
+
+  public final class UsageStatsManager {
+    method public void forceUsageSourceSettingRead();
+  }
+
+}
+
+package android.appwidget {
+
+  public class AppWidgetManager {
+    method public void setBindAppWidgetPermission(@NonNull String, int, boolean);
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothClass implements android.os.Parcelable {
+    method public int getClassOfDevice();
+  }
+
+}
+
+package android.content {
+
+  public final class AttributionSource implements android.os.Parcelable {
+    ctor public AttributionSource(int, @Nullable String, @Nullable String);
+    ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder);
+    ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource);
+  }
+
+  public final class AutofillOptions implements android.os.Parcelable {
+    ctor public AutofillOptions(int, boolean);
+    method public int describeContents();
+    method public static android.content.AutofillOptions forWhitelistingItself();
+    method public boolean isAugmentedAutofillEnabled(@NonNull android.content.Context);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.AutofillOptions> CREATOR;
+    field public long appDisabledExpiration;
+    field public boolean augmentedAutofillEnabled;
+    field public final boolean compatModeEnabled;
+    field @Nullable public android.util.ArrayMap<java.lang.String,java.lang.Long> disabledActivities;
+    field public final int loggingLevel;
+    field @Nullable public android.util.ArraySet<android.content.ComponentName> whitelistedActivitiesForAugmentedAutofill;
+  }
+
+  public class ClipboardManager extends android.text.ClipboardManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.SET_CLIP_SOURCE) public String getPrimaryClipSource();
+  }
+
+  public final class ContentCaptureOptions implements android.os.Parcelable {
+    ctor public ContentCaptureOptions(int);
+    ctor public ContentCaptureOptions(int, int, int, int, int, @Nullable android.util.ArraySet<android.content.ComponentName>);
+    method public int describeContents();
+    method public static android.content.ContentCaptureOptions forWhitelistingItself();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentCaptureOptions> CREATOR;
+    field public final int idleFlushingFrequencyMs;
+    field public final boolean lite;
+    field public final int logHistorySize;
+    field public final int loggingLevel;
+    field public final int maxBufferSize;
+    field public final int textChangeFlushingFrequencyMs;
+    field @Nullable public final android.util.ArraySet<android.content.ComponentName> whitelistedComponents;
+  }
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method @NonNull public static android.os.UserHandle getUserHandleFromUri(@NonNull android.net.Uri);
+  }
+
+  public abstract class ContentResolver {
+    method public static String[] getSyncAdapterPackagesForAuthorityAsUser(String, int);
+  }
+
+  public abstract class Context {
+    method @NonNull public java.io.File getCrateDir(@NonNull String);
+    method public abstract int getDisplayId();
+    method @NonNull public android.os.UserHandle getUser();
+    method public int getUserId();
+    method public void setAutofillOptions(@Nullable android.content.AutofillOptions);
+    method public void setContentCaptureOptions(@Nullable android.content.ContentCaptureOptions);
+    field public static final String CONTENT_CAPTURE_MANAGER_SERVICE = "content_capture";
+    field public static final String DEVICE_IDLE_CONTROLLER = "deviceidle";
+    field public static final String DREAM_SERVICE = "dream";
+    field public static final String FONT_SERVICE = "font";
+    field public static final String POWER_EXEMPTION_SERVICE = "power_exemption";
+    field @Deprecated public static final String POWER_WHITELIST_MANAGER = "power_whitelist";
+    field public static final String TEST_NETWORK_SERVICE = "test_network";
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    method public int getDisplayId();
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field public static final String ACTION_USER_STOPPED = "android.intent.action.USER_STOPPED";
+  }
+
+  public class SyncAdapterType implements android.os.Parcelable {
+    method @Nullable public String getPackageName();
+  }
+
+}
+
+package android.content.integrity {
+
+  public class AppIntegrityManager {
+    method @NonNull public android.content.integrity.RuleSet getCurrentRuleSet();
+    method @NonNull public java.util.List<java.lang.String> getWhitelistedRuleProviders();
+  }
+
+}
+
+package android.content.pm {
+
+  public class ActivityInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    method public static boolean isTranslucentOrFloating(android.content.res.TypedArray);
+    field public static final long ALWAYS_SANDBOX_DISPLAY_APIS = 185004937L; // 0xb06f389L
+    field public static final long FORCE_NON_RESIZE_APP = 181136395L; // 0xacbec0bL
+    field public static final long FORCE_RESIZE_APP = 174042936L; // 0xa5faf38L
+    field public static final long NEVER_SANDBOX_DISPLAY_APIS = 184838306L; // 0xb0468a2L
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO = 174042980L; // 0xa5faf64L
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO_LARGE = 180326787L; // 0xabf9183L
+    field public static final float OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE = 1.7777778f;
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO_MEDIUM = 180326845L; // 0xabf91bdL
+    field public static final float OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE = 1.5f;
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY = 203647190L; // 0xc2368d6L
+    field public static final int RESIZE_MODE_RESIZEABLE = 2; // 0x2
+  }
+
+  public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    method public boolean hasRequestForegroundServiceExemption();
+    method public boolean isPrivilegedApp();
+    method public boolean isSystemApp();
+    field public static final int PRIVATE_FLAG_PRIVILEGED = 8; // 0x8
+    field public int privateFlags;
+  }
+
+  public class CrossProfileApps {
+    method public boolean canConfigureInteractAcrossProfiles(@NonNull String);
+  }
+
+  public class LauncherApps {
+    ctor public LauncherApps(android.content.Context);
+  }
+
+  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
+    method public void setInstallFlagAllowTest();
+    method public void setInstallerPackageName(@Nullable String);
+  }
+
+  public abstract class PackageManager {
+    method @Nullable public String getContentCaptureServicePackageName();
+    method @Nullable public String getDefaultTextClassifierPackageName();
+    method @RequiresPermission(android.Manifest.permission.INJECT_EVENTS) public android.os.IBinder getHoldLockToken();
+    method public abstract int getInstallReason(@NonNull String, @NonNull android.os.UserHandle);
+    method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int);
+    method @Nullable public abstract String[] getNamesForUids(int[]);
+    method @NonNull public String getPermissionControllerPackageName();
+    method @NonNull public abstract String getServicesSystemSharedLibraryPackageName();
+    method @NonNull public abstract String getSharedSystemSharedLibraryPackageName();
+    method @Nullable public String getSystemTextClassifierPackageName();
+    method @Nullable public String getWellbeingPackageName();
+    method public void holdLock(android.os.IBinder, int);
+    method @RequiresPermission(android.Manifest.permission.KEEP_UNINSTALLED_PACKAGES) public void setKeepUninstalledPackages(@NonNull java.util.List<java.lang.String>);
+    field public static final String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage";
+    field public static final String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption";
+    field public static final String FEATURE_HDMI_CEC = "android.hardware.hdmi.cec";
+    field public static final int FLAG_PERMISSION_REVOKE_WHEN_REQUESTED = 128; // 0x80
+    field public static final int MATCH_KNOWN_PACKAGES = 4202496; // 0x402000
+    field public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services";
+    field public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared";
+  }
+
+  public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    field public static final int PROTECTION_FLAG_VENDOR_PRIVILEGED = 32768; // 0x8000
+  }
+
+  public final class ProviderInfoList implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.content.pm.ProviderInfoList fromList(@NonNull java.util.List<android.content.pm.ProviderInfo>);
+    method @NonNull public java.util.List<android.content.pm.ProviderInfo> getList();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ProviderInfoList> CREATOR;
+  }
+
+  public final class SharedLibraryInfo implements android.os.Parcelable {
+    method @NonNull public java.util.List<java.lang.String> getAllCodePaths();
+    method public boolean isNative();
+  }
+
+  public final class ShortcutInfo implements android.os.Parcelable {
+    method public boolean isVisibleToPublisher();
+  }
+
+  public class ShortcutManager {
+    ctor public ShortcutManager(android.content.Context);
+  }
+
+  public class UserInfo implements android.os.Parcelable {
+    ctor public UserInfo(int, String, int);
+    ctor public UserInfo(int, String, String, int);
+    ctor public UserInfo(int, String, String, int, String);
+    ctor @Deprecated public UserInfo();
+    ctor public UserInfo(android.content.pm.UserInfo);
+    method public boolean canHaveProfile();
+    method public int describeContents();
+    method public android.os.UserHandle getUserHandle();
+    method public boolean isAdmin();
+    method public boolean isCloneProfile();
+    method public boolean isDemo();
+    method public boolean isEnabled();
+    method public boolean isEphemeral();
+    method public boolean isFull();
+    method public boolean isGuest();
+    method public boolean isInitialized();
+    method public boolean isManagedProfile();
+    method public boolean isPrimary();
+    method public boolean isProfile();
+    method public boolean isQuietModeEnabled();
+    method public boolean isRestricted();
+    method public boolean isSystemOnly();
+    method public static boolean isSystemOnly(int);
+    method public boolean supportsSwitchTo();
+    method public boolean supportsSwitchToByUser();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.UserInfo> CREATOR;
+    field public static final int FLAG_ADMIN = 2; // 0x2
+    field @Deprecated public static final int FLAG_DEMO = 512; // 0x200
+    field public static final int FLAG_DISABLED = 64; // 0x40
+    field public static final int FLAG_EPHEMERAL = 256; // 0x100
+    field public static final int FLAG_FULL = 1024; // 0x400
+    field @Deprecated public static final int FLAG_GUEST = 4; // 0x4
+    field public static final int FLAG_INITIALIZED = 16; // 0x10
+    field @Deprecated public static final int FLAG_MANAGED_PROFILE = 32; // 0x20
+    field public static final int FLAG_PRIMARY = 1; // 0x1
+    field public static final int FLAG_PROFILE = 4096; // 0x1000
+    field public static final int FLAG_QUIET_MODE = 128; // 0x80
+    field @Deprecated public static final int FLAG_RESTRICTED = 8; // 0x8
+    field public static final int FLAG_SYSTEM = 2048; // 0x800
+    field public static final int NO_PROFILE_GROUP_ID = -10000; // 0xffffd8f0
+    field public boolean convertedFromPreCreated;
+    field public long creationTime;
+    field public int flags;
+    field public boolean guestToRemove;
+    field public String iconPath;
+    field public int id;
+    field public String lastLoggedInFingerprint;
+    field public long lastLoggedInTime;
+    field public String name;
+    field public boolean partial;
+    field public boolean preCreated;
+    field public int profileBadge;
+    field public int profileGroupId;
+    field public int restrictedProfileParentId;
+    field public int serialNumber;
+    field public String userType;
+  }
+
+}
+
+package android.content.res {
+
+  public final class AssetManager implements java.lang.AutoCloseable {
+    method @NonNull public String[] getApkPaths();
+    method @Nullable public String getLastResourceResolution();
+    method @Nullable public String getOverlayablesToString(String);
+    method public void setResourceResolutionLoggingEnabled(boolean);
+  }
+
+  public final class Configuration implements java.lang.Comparable<android.content.res.Configuration> android.os.Parcelable {
+    field public int assetsSeq;
+    field public final android.app.WindowConfiguration windowConfiguration;
+  }
+
+}
+
+package android.content.rollback {
+
+  public final class RollbackManager {
+    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void blockRollbackManager(long);
+    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void expireRollbackForPackage(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void reloadPersistedData();
+    field public static final String PROPERTY_ROLLBACK_LIFETIME_MILLIS = "rollback_lifetime_in_millis";
+  }
+
+}
+
+package android.database.sqlite {
+
+  public class SQLiteCompatibilityWalFlags {
+    method public static void reset();
+  }
+
+  public final class SQLiteDebug {
+    method public static void dump(android.util.Printer, String[]);
+    method public static android.database.sqlite.SQLiteDebug.PagerStats getDatabaseInfo();
+  }
+
+  public static class SQLiteDebug.DbStats {
+    ctor public SQLiteDebug.DbStats(String, long, long, int, int, int, int);
+    field public String cache;
+    field public String dbName;
+    field public long dbSize;
+    field public int lookaside;
+    field public long pageSize;
+  }
+
+  public static class SQLiteDebug.PagerStats {
+    ctor public SQLiteDebug.PagerStats();
+    field public java.util.ArrayList<android.database.sqlite.SQLiteDebug.DbStats> dbStats;
+    field public int largestMemAlloc;
+    field public int memoryUsed;
+    field public int pageCacheOverflow;
+  }
+
+  public final class SQLiteDirectCursorDriver implements android.database.sqlite.SQLiteCursorDriver {
+    ctor public SQLiteDirectCursorDriver(android.database.sqlite.SQLiteDatabase, String, String, android.os.CancellationSignal);
+    method public void cursorClosed();
+    method public void cursorDeactivated();
+    method public void cursorRequeried(android.database.Cursor);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]);
+    method public void setBindArguments(String[]);
+  }
+
+  public final class SQLiteGlobal {
+    method public static String getDefaultJournalMode();
+    method public static int getDefaultPageSize();
+    method public static String getDefaultSyncMode();
+    method public static int getIdleConnectionTimeout();
+    method public static int getJournalSizeLimit();
+    method public static int getWALAutoCheckpoint();
+    method public static int getWALConnectionPoolSize();
+    method public static String getWALSyncMode();
+    method public static int releaseMemory();
+  }
+
+}
+
+package android.graphics {
+
+  public final class ImageDecoder implements java.lang.AutoCloseable {
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(android.content.res.Resources, java.io.InputStream, int);
+  }
+
+  public final class Rect implements android.os.Parcelable {
+    method public void splitHorizontally(@NonNull android.graphics.Rect...);
+    method public void splitVertically(@NonNull android.graphics.Rect...);
+  }
+
+  public class Typeface {
+    method @NonNull public static long[] deserializeFontMap(@NonNull java.nio.ByteBuffer, @NonNull java.util.Map<java.lang.String,android.graphics.Typeface>) throws java.io.IOException;
+    method @Nullable public static android.os.SharedMemory getSystemFontMapSharedMemory();
+    method @NonNull public static android.os.SharedMemory serializeFontMap(@NonNull java.util.Map<java.lang.String,android.graphics.Typeface>) throws android.system.ErrnoException, java.io.IOException;
+  }
+
+}
+
+package android.graphics.drawable {
+
+  public class AdaptiveIconDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    method public android.graphics.Region getSafeZone();
+    field public static final float MASK_SIZE = 100.0f;
+  }
+
+  public class ColorDrawable extends android.graphics.drawable.Drawable {
+    method public android.graphics.Xfermode getXfermode();
+  }
+
+  public class ShapeDrawable extends android.graphics.drawable.Drawable {
+    method public void setXfermode(@Nullable android.graphics.Xfermode);
+  }
+
+}
+
+package android.graphics.fonts {
+
+  public class FontManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public android.text.FontConfig getFontConfig();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public int updateFontFamily(@NonNull android.graphics.fonts.FontFamilyUpdateRequest, @IntRange(from=0) int);
+    field public static final int RESULT_ERROR_DOWNGRADING = -5; // 0xfffffffb
+    field public static final int RESULT_ERROR_FAILED_TO_WRITE_FONT_FILE = -1; // 0xffffffff
+    field public static final int RESULT_ERROR_FAILED_UPDATE_CONFIG = -6; // 0xfffffffa
+    field public static final int RESULT_ERROR_FONT_NOT_FOUND = -9; // 0xfffffff7
+    field public static final int RESULT_ERROR_FONT_UPDATER_DISABLED = -7; // 0xfffffff9
+    field public static final int RESULT_ERROR_INVALID_FONT_FILE = -3; // 0xfffffffd
+    field public static final int RESULT_ERROR_INVALID_FONT_NAME = -4; // 0xfffffffc
+    field public static final int RESULT_ERROR_VERIFICATION_FAILURE = -2; // 0xfffffffe
+    field public static final int RESULT_ERROR_VERSION_MISMATCH = -8; // 0xfffffff8
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.hardware {
+
+  public final class SensorPrivacyManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setSensorPrivacy(int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setSensorPrivacyForProfileGroup(int, int, boolean);
+  }
+
+  public static class SensorPrivacyManager.Sources {
+    field public static final int DIALOG = 3; // 0x3
+    field public static final int OTHER = 5; // 0x5
+    field public static final int QS_TILE = 1; // 0x1
+    field public static final int SETTINGS = 2; // 0x2
+    field public static final int SHELL = 4; // 0x4
+  }
+
+}
+
+package android.hardware.biometrics {
+
+  public class BiometricManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public android.hardware.biometrics.BiometricTestSession createTestSession(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public java.util.List<android.hardware.biometrics.SensorProperties> getSensorProperties();
+    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public String getUiPackage();
+  }
+
+  public class BiometricPrompt {
+    method @NonNull public java.util.List<java.lang.Integer> getAllowedSensorIds();
+    method public boolean isAllowBackgroundAuthentication();
+  }
+
+  public static class BiometricPrompt.Builder {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.TEST_BIOMETRIC, "android.permission.USE_BIOMETRIC_INTERNAL"}) public android.hardware.biometrics.BiometricPrompt.Builder setAllowBackgroundAuthentication(boolean);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.TEST_BIOMETRIC, "android.permission.USE_BIOMETRIC_INTERNAL"}) public android.hardware.biometrics.BiometricPrompt.Builder setAllowedSensorIds(@NonNull java.util.List<java.lang.Integer>);
+  }
+
+  public class BiometricTestSession implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void acceptAuthentication(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void cleanupInternalState(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void close();
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void finishEnroll(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyAcquired(int, int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyError(int, int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void rejectAuthentication(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void startEnroll(int);
+  }
+
+  public class SensorProperties {
+    method @NonNull public java.util.List<android.hardware.biometrics.SensorProperties.ComponentInfo> getComponentInfo();
+    method public int getSensorId();
+    method public int getSensorStrength();
+    field public static final int STRENGTH_CONVENIENCE = 0; // 0x0
+    field public static final int STRENGTH_STRONG = 2; // 0x2
+    field public static final int STRENGTH_WEAK = 1; // 0x1
+  }
+
+  public static final class SensorProperties.ComponentInfo {
+    method @NonNull public String getComponentId();
+    method @NonNull public String getFirmwareVersion();
+    method @NonNull public String getHardwareVersion();
+    method @NonNull public String getSerialNumber();
+    method @NonNull public String getSoftwareVersion();
+  }
+
+}
+
+package android.hardware.camera2 {
+
+  public final class CameraManager {
+    method public String[] getCameraIdListNoLazy() throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(allOf={android.Manifest.permission.SYSTEM_CAMERA, android.Manifest.permission.CAMERA}) public void openCamera(@NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraManager.AvailabilityCallback {
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraClosed(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraOpened(@NonNull String, @NonNull String);
+  }
+
+  public abstract class CameraMetadata<TKey> {
+    field public static final int SENSOR_TEST_PATTERN_MODE_BLACK = 5; // 0x5
+  }
+
+}
+
+package android.hardware.devicestate {
+
+  public final class DeviceStateManager {
+    method @RequiresPermission(value=android.Manifest.permission.CONTROL_DEVICE_STATE, conditional=true) public void cancelRequest(@NonNull android.hardware.devicestate.DeviceStateRequest);
+    method @NonNull public int[] getSupportedStates();
+    method public void registerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.devicestate.DeviceStateManager.DeviceStateCallback);
+    method @RequiresPermission(value=android.Manifest.permission.CONTROL_DEVICE_STATE, conditional=true) public void requestState(@NonNull android.hardware.devicestate.DeviceStateRequest, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.devicestate.DeviceStateRequest.Callback);
+    method public void unregisterCallback(@NonNull android.hardware.devicestate.DeviceStateManager.DeviceStateCallback);
+    field public static final int MAXIMUM_DEVICE_STATE = 255; // 0xff
+    field public static final int MINIMUM_DEVICE_STATE = 0; // 0x0
+  }
+
+  public static interface DeviceStateManager.DeviceStateCallback {
+    method public default void onBaseStateChanged(int);
+    method public void onStateChanged(int);
+    method public default void onSupportedStatesChanged(@NonNull int[]);
+  }
+
+  public final class DeviceStateRequest {
+    method public int getFlags();
+    method public int getState();
+    method @NonNull public static android.hardware.devicestate.DeviceStateRequest.Builder newBuilder(int);
+    field public static final int FLAG_CANCEL_WHEN_BASE_CHANGES = 1; // 0x1
+  }
+
+  public static final class DeviceStateRequest.Builder {
+    method @NonNull public android.hardware.devicestate.DeviceStateRequest build();
+    method @NonNull public android.hardware.devicestate.DeviceStateRequest.Builder setFlags(int);
+  }
+
+  public static interface DeviceStateRequest.Callback {
+    method public default void onRequestActivated(@NonNull android.hardware.devicestate.DeviceStateRequest);
+    method public default void onRequestCanceled(@NonNull android.hardware.devicestate.DeviceStateRequest);
+    method public default void onRequestSuspended(@NonNull android.hardware.devicestate.DeviceStateRequest);
+  }
+
+}
+
+package android.hardware.display {
+
+  public class AmbientDisplayConfiguration {
+    ctor public AmbientDisplayConfiguration(android.content.Context);
+    method public boolean alwaysOnAvailable();
+    method public boolean alwaysOnAvailableForUser(int);
+    method public boolean alwaysOnEnabled(int);
+  }
+
+  public final class DisplayManager {
+    method public boolean areUserDisabledHdrTypesAllowed();
+    method @NonNull public int[] getUserDisabledHdrTypes();
+    method public boolean isMinimalPostProcessingRequested(int);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setAreUserDisabledHdrTypesAllowed(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE) public void setRefreshRateSwitchingType(int);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public void setShouldAlwaysRespectAppRequestedMode(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setUserDisabledHdrTypes(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public boolean shouldAlwaysRespectAppRequestedMode();
+    field public static final int SWITCHING_TYPE_ACROSS_AND_WITHIN_GROUPS = 2; // 0x2
+    field public static final int SWITCHING_TYPE_NONE = 0; // 0x0
+    field public static final int SWITCHING_TYPE_WITHIN_GROUPS = 1; // 0x1
+    field public static final int VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS = 512; // 0x200
+    field public static final int VIRTUAL_DISPLAY_FLAG_TRUSTED = 1024; // 0x400
+  }
+
+}
+
+package android.hardware.fingerprint {
+
+  @Deprecated public class FingerprintManager {
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public android.hardware.biometrics.BiometricTestSession createTestSession(int);
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public java.util.List<android.hardware.biometrics.SensorProperties> getSensorProperties();
+  }
+
+}
+
+package android.hardware.hdmi {
+
+  public final class HdmiControlServiceWrapper {
+    ctor public HdmiControlServiceWrapper();
+    method @NonNull public android.hardware.hdmi.HdmiControlManager createHdmiControlManager();
+    method @BinderThread public void setDeviceTypes(@NonNull int[]);
+    method @BinderThread public void setPortInfo(@NonNull java.util.List<android.hardware.hdmi.HdmiPortInfo>);
+    field public static final int DEVICE_PURE_CEC_SWITCH = 6; // 0x6
+  }
+
+}
+
+package android.hardware.input {
+
+  public final class InputManager {
+    method public int getBlockUntrustedTouchesMode(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setBlockUntrustedTouchesMode(@NonNull android.content.Context, int);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setMaximumObscuringOpacityForTouch(@FloatRange(from=0, to=1) float);
+    field public static final long BLOCK_UNTRUSTED_TOUCHES = 158002302L; // 0x96aec7eL
+  }
+
+}
+
+package android.hardware.lights {
+
+  public final class Light implements android.os.Parcelable {
+    method public int getCapabilities();
+  }
+
+  public abstract class LightsManager {
+    method @NonNull public abstract android.hardware.lights.LightsManager.LightsSession openSession(int);
+  }
+
+}
+
+package android.hardware.soundtrigger {
+
+  public class KeyphraseEnrollmentInfo {
+    ctor public KeyphraseEnrollmentInfo(@NonNull android.content.pm.PackageManager);
+    method @Nullable public android.hardware.soundtrigger.KeyphraseMetadata getKeyphraseMetadata(@NonNull String, @NonNull java.util.Locale);
+    method @Nullable public android.content.Intent getManageKeyphraseIntent(int, @NonNull String, @NonNull java.util.Locale);
+    method @NonNull public String getParseError();
+    method @NonNull public java.util.Collection<android.hardware.soundtrigger.KeyphraseMetadata> listKeyphraseMetadata();
+    field public static final int MANAGE_ACTION_ENROLL = 0; // 0x0
+    field public static final int MANAGE_ACTION_RE_ENROLL = 1; // 0x1
+    field public static final int MANAGE_ACTION_UN_ENROLL = 2; // 0x2
+  }
+
+  public final class KeyphraseMetadata implements android.os.Parcelable {
+    ctor public KeyphraseMetadata(int, @NonNull String, @NonNull java.util.Set<java.util.Locale>, int);
+    method public int describeContents();
+    method public int getId();
+    method @NonNull public String getKeyphrase();
+    method public int getRecognitionModeFlags();
+    method @NonNull public java.util.Set<java.util.Locale> getSupportedLocales();
+    method public boolean supportsLocale(@Nullable java.util.Locale);
+    method public boolean supportsPhrase(@Nullable String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.KeyphraseMetadata> CREATOR;
+  }
+
+  public static final class SoundTrigger.ModelParamRange implements android.os.Parcelable {
+    ctor public SoundTrigger.ModelParamRange(int, int);
+  }
+
+  public static final class SoundTrigger.ModuleProperties implements android.os.Parcelable {
+    ctor public SoundTrigger.ModuleProperties(int, @NonNull String, @NonNull String, @NonNull String, int, @NonNull String, int, int, int, int, boolean, int, boolean, int, boolean, int);
+  }
+
+  public static class SoundTrigger.RecognitionEvent {
+    ctor public SoundTrigger.RecognitionEvent(int, int, boolean, int, int, int, boolean, @NonNull android.media.AudioFormat, @Nullable byte[]);
+  }
+
+}
+
+package android.inputmethodservice {
+
+  public abstract class AbstractInputMethodService extends android.window.WindowProviderService implements android.view.KeyEvent.Callback {
+    method public final int getInitialDisplayId();
+    method @Nullable public final android.os.Bundle getWindowContextOptions();
+    method public final int getWindowType();
+  }
+
+  @UiContext public class InputMethodService extends android.inputmethodservice.AbstractInputMethodService {
+    field public static final long FINISH_INPUT_NO_FALLBACK_CONNECTION = 156215187L; // 0x94fa793L
+  }
+
+}
+
+package android.location {
+
+  public final class GnssClock implements android.os.Parcelable {
+    ctor public GnssClock();
+    method public void reset();
+    method public void resetBiasNanos();
+    method public void resetBiasUncertaintyNanos();
+    method public void resetDriftNanosPerSecond();
+    method public void resetDriftUncertaintyNanosPerSecond();
+    method public void resetElapsedRealtimeNanos();
+    method public void resetElapsedRealtimeUncertaintyNanos();
+    method public void resetFullBiasNanos();
+    method public void resetLeapSecond();
+    method public void resetReferenceCarrierFrequencyHzForIsb();
+    method public void resetReferenceCodeTypeForIsb();
+    method public void resetReferenceConstellationTypeForIsb();
+    method public void resetTimeUncertaintyNanos();
+    method public void set(android.location.GnssClock);
+    method public void setBiasNanos(double);
+    method public void setBiasUncertaintyNanos(@FloatRange(from=0.0f) double);
+    method public void setDriftNanosPerSecond(double);
+    method public void setDriftUncertaintyNanosPerSecond(@FloatRange(from=0.0f) double);
+    method public void setElapsedRealtimeNanos(long);
+    method public void setElapsedRealtimeUncertaintyNanos(@FloatRange(from=0.0f) double);
+    method public void setFullBiasNanos(long);
+    method public void setHardwareClockDiscontinuityCount(int);
+    method public void setLeapSecond(int);
+    method public void setReferenceCarrierFrequencyHzForIsb(@FloatRange(from=0.0) double);
+    method public void setReferenceCodeTypeForIsb(@NonNull String);
+    method public void setReferenceConstellationTypeForIsb(int);
+    method public void setTimeNanos(long);
+    method public void setTimeUncertaintyNanos(@FloatRange(from=0.0f) double);
+  }
+
+  public final class GnssMeasurement implements android.os.Parcelable {
+    ctor public GnssMeasurement();
+    method public void reset();
+    method public void resetAutomaticGainControlLevel();
+    method public void resetBasebandCn0DbHz();
+    method @Deprecated public void resetCarrierCycles();
+    method public void resetCarrierFrequencyHz();
+    method @Deprecated public void resetCarrierPhase();
+    method @Deprecated public void resetCarrierPhaseUncertainty();
+    method public void resetCodeType();
+    method public void resetCorrelationVectors();
+    method public void resetFullInterSignalBiasNanos();
+    method public void resetFullInterSignalBiasUncertaintyNanos();
+    method public void resetSatelliteInterSignalBiasNanos();
+    method public void resetSatelliteInterSignalBiasUncertaintyNanos();
+    method public void resetSatellitePvt();
+    method public void resetSnrInDb();
+    method public void set(android.location.GnssMeasurement);
+    method public void setAccumulatedDeltaRangeMeters(double);
+    method public void setAccumulatedDeltaRangeState(int);
+    method public void setAccumulatedDeltaRangeUncertaintyMeters(double);
+    method public void setAutomaticGainControlLevelInDb(double);
+    method public void setBasebandCn0DbHz(double);
+    method @Deprecated public void setCarrierCycles(long);
+    method public void setCarrierFrequencyHz(float);
+    method @Deprecated public void setCarrierPhase(double);
+    method @Deprecated public void setCarrierPhaseUncertainty(double);
+    method public void setCn0DbHz(double);
+    method public void setCodeType(@NonNull String);
+    method public void setConstellationType(int);
+    method public void setCorrelationVectors(@Nullable java.util.Collection<android.location.CorrelationVector>);
+    method public void setFullInterSignalBiasNanos(double);
+    method public void setFullInterSignalBiasUncertaintyNanos(@FloatRange(from=0.0) double);
+    method public void setMultipathIndicator(int);
+    method public void setPseudorangeRateMetersPerSecond(double);
+    method public void setPseudorangeRateUncertaintyMetersPerSecond(double);
+    method public void setReceivedSvTimeNanos(long);
+    method public void setReceivedSvTimeUncertaintyNanos(long);
+    method public void setSatelliteInterSignalBiasNanos(double);
+    method public void setSatelliteInterSignalBiasUncertaintyNanos(@FloatRange(from=0.0) double);
+    method public void setSatellitePvt(@Nullable android.location.SatellitePvt);
+    method public void setSnrInDb(double);
+    method public void setState(int);
+    method public void setSvid(int);
+    method public void setTimeOffsetNanos(double);
+    field public static final int ADR_STATE_ALL = 31; // 0x1f
+  }
+
+  public final class GnssMeasurementsEvent implements android.os.Parcelable {
+    ctor public GnssMeasurementsEvent(android.location.GnssClock, android.location.GnssMeasurement[]);
+  }
+
+  public final class GnssNavigationMessage implements android.os.Parcelable {
+    ctor public GnssNavigationMessage();
+    method public void reset();
+    method public void set(android.location.GnssNavigationMessage);
+    method public void setData(byte[]);
+    method public void setMessageId(@IntRange(from=0xffffffff, to=120) int);
+    method public void setStatus(int);
+    method public void setSubmessageId(@IntRange(from=1) int);
+    method public void setSvid(@IntRange(from=1, to=200) int);
+    method public void setType(int);
+  }
+
+  public class LocationManager {
+    method @NonNull public String[] getBackgroundThrottlingWhitelist();
+    method @NonNull public android.os.PackageTagsList getIgnoreSettingsAllowlist();
+    method @Deprecated @NonNull public String[] getIgnoreSettingsWhitelist();
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public java.util.List<java.lang.String> getProviderPackages(@NonNull String);
+  }
+
+}
+
+package android.media {
+
+  public final class AudioAttributes implements android.os.Parcelable {
+    method @NonNull public static String usageToXsdString(int);
+    method public static int xsdStringToUsage(@NonNull String);
+  }
+
+  public final class AudioDeviceInfo {
+    method public static void enforceValidAudioDeviceTypeIn(int);
+    method public static void enforceValidAudioDeviceTypeOut(int);
+  }
+
+  public final class AudioFocusRequest {
+    method @Nullable public android.media.AudioManager.OnAudioFocusChangeListener getOnAudioFocusChangeListener();
+  }
+
+  public final class AudioFormat implements android.os.Parcelable {
+    method public static int channelCountFromInChannelMask(int);
+    method public static int channelCountFromOutChannelMask(int);
+    method public static int getBytesPerSample(int);
+    method public static boolean isEncodingLinearPcm(int);
+  }
+
+  public class AudioManager {
+    method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int abandonAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String);
+    method @Nullable public static android.media.AudioDeviceInfo getDeviceInfoFromType(int);
+    method @IntRange(from=0) @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public long getFadeOutDurationOnFocusLossMillis(@NonNull android.media.AudioAttributes);
+    method @NonNull public java.util.List<java.lang.Integer> getReportedSurroundFormats();
+    method @NonNull public java.util.Map<java.lang.Integer,java.lang.Boolean> getSurroundFormats();
+    method public boolean hasRegisteredDynamicPolicy();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.QUERY_AUDIO_STATE}) public boolean isFullVolumeDevice();
+    method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int requestAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String, int, int);
+  }
+
+  public static final class AudioRecord.MetricsConstants {
+    field public static final String ATTRIBUTES = "android.media.audiorecord.attributes";
+    field public static final String CHANNEL_MASK = "android.media.audiorecord.channelMask";
+    field public static final String DURATION_MS = "android.media.audiorecord.durationMs";
+    field public static final String FRAME_COUNT = "android.media.audiorecord.frameCount";
+    field public static final String PORT_ID = "android.media.audiorecord.portId";
+    field public static final String START_COUNT = "android.media.audiorecord.startCount";
+  }
+
+  public final class AudioRecordingConfiguration implements android.os.Parcelable {
+    ctor public AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]);
+    ctor public AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String);
+  }
+
+  public class AudioSystem {
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS) public static float getMasterBalance();
+    method public static final int getNumStreamTypes();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS) public static int setMasterBalance(float);
+    field public static final int DEVICE_ROLE_DISABLED = 2; // 0x2
+    field public static final int DEVICE_ROLE_NONE = 0; // 0x0
+    field public static final int DEVICE_ROLE_PREFERRED = 1; // 0x1
+    field public static final int OFFLOAD_GAPLESS_SUPPORTED = 2; // 0x2
+    field public static final int OFFLOAD_SUPPORTED = 1; // 0x1
+    field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+  }
+
+  public static final class AudioTrack.MetricsConstants {
+    field public static final String ATTRIBUTES = "android.media.audiotrack.attributes";
+    field public static final String CHANNEL_MASK = "android.media.audiotrack.channelMask";
+    field public static final String ENCODING = "android.media.audiotrack.encoding";
+    field public static final String FRAME_COUNT = "android.media.audiotrack.frameCount";
+    field public static final String PORT_ID = "android.media.audiotrack.portId";
+    field public static final String SAMPLE_RATE = "android.media.audiotrack.sampleRate";
+  }
+
+  public abstract class Image implements java.lang.AutoCloseable {
+    ctor protected Image();
+  }
+
+  public abstract static class Image.Plane {
+    ctor protected Image.Plane();
+  }
+
+  public final class MediaCas implements java.lang.AutoCloseable {
+    method public void forceResourceLost();
+  }
+
+  public static final class MediaCodecInfo.VideoCapabilities.PerformancePoint {
+    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(int, int, int, int, @NonNull android.util.Size);
+    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(@NonNull android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint, @NonNull android.util.Size);
+    method public int getMaxFrameRate();
+    method public long getMaxMacroBlockRate();
+    method public int getMaxMacroBlocks();
+  }
+
+  public final class MediaRoute2Info implements android.os.Parcelable {
+    method @NonNull public String getOriginalId();
+  }
+
+  public class MediaRouter2.RoutingController {
+    method @NonNull public String getOriginalId();
+  }
+
+  public final class PlaybackParams implements android.os.Parcelable {
+    method public int getAudioStretchMode();
+    method public android.media.PlaybackParams setAudioStretchMode(int);
+  }
+
+  public static final class VolumeShaper.Configuration.Builder {
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setOptionFlags(int);
+  }
+
+}
+
+package android.media.audiofx {
+
+  public class AudioEffect {
+    method public static int byteArrayToInt(byte[]);
+    method public static short byteArrayToShort(byte[]);
+    method public int getParameter(byte[], byte[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int, byte[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int, int[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int, short[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int[], short[]) throws java.lang.IllegalStateException;
+    method public static byte[] intToByteArray(int);
+    method public static boolean isEffectTypeAvailable(java.util.UUID);
+    method public static boolean isError(int);
+    method public int setParameter(byte[], byte[]) throws java.lang.IllegalStateException;
+    method public int setParameter(int, int) throws java.lang.IllegalStateException;
+    method public int setParameter(int, short) throws java.lang.IllegalStateException;
+    method public int setParameter(int, byte[]) throws java.lang.IllegalStateException;
+    method public int setParameter(int[], int[]) throws java.lang.IllegalStateException;
+    method public int setParameter(int[], byte[]) throws java.lang.IllegalStateException;
+    method public void setParameterListener(android.media.audiofx.AudioEffect.OnParameterChangeListener);
+    method public static byte[] shortToByteArray(short);
+    field public static final java.util.UUID EFFECT_TYPE_NULL;
+  }
+
+  public static class AudioEffect.Descriptor {
+    ctor public AudioEffect.Descriptor(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel);
+  }
+
+  public static interface AudioEffect.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.AudioEffect, int, byte[], byte[]);
+  }
+
+}
+
+package android.media.audiopolicy {
+
+  public static class AudioPolicy.Builder {
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setIsTestFocusPolicy(boolean);
+  }
+
+}
+
+package android.media.metrics {
+
+  public final class LogSessionId {
+    ctor public LogSessionId(@NonNull String);
+  }
+
+}
+
+package android.media.tv {
+
+  public final class TvInputManager {
+    method public void addHardwareDevice(int);
+    method public void removeHardwareDevice(int);
+  }
+
+}
+
+package android.media.tv.tuner {
+
+  public final class TunerVersionChecker {
+    method public static int getMajorVersion(int);
+    method public static int getMinorVersion(int);
+    method public static boolean isHigherOrEqualVersionTo(int);
+    method public static boolean supportTunerVersion(int);
+  }
+
+}
+
+package android.net {
+
+  public class EthernetManager {
+    method public void setIncludeTestInterfaces(boolean);
+  }
+
+  public final class IpSecManager {
+    field public static final int INVALID_SECURITY_PARAMETER_INDEX = 0; // 0x0
+  }
+
+  public class NetworkPolicyManager {
+    method public boolean getRestrictBackground();
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidNetworkingBlocked(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidRestrictedOnMeteredNetworks(int);
+    method @NonNull public static String resolveNetworkId(@NonNull android.net.wifi.WifiConfiguration);
+    method public void setRestrictBackground(boolean);
+  }
+
+  public class NetworkStack {
+    method public static void setServiceForTest(@Nullable android.os.IBinder);
+  }
+
+  public class NetworkWatchlistManager {
+    method @Nullable public byte[] getWatchlistConfigHash();
+  }
+
+  public class TrafficStats {
+    method public static long getLoopbackRxBytes();
+    method public static long getLoopbackRxPackets();
+    method public static long getLoopbackTxBytes();
+    method public static long getLoopbackTxPackets();
+  }
+
+}
+
+package android.os {
+
+  public final class BatteryStatsManager {
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void resetBattery(boolean);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void setBatteryLevel(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void setChargerAcOnline(boolean, boolean);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void suspendBatteryInput();
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void unplugBattery(boolean);
+  }
+
+  public class Build {
+    method public static boolean is64BitAbi(String);
+    method public static boolean isDebuggable();
+    field public static final boolean IS_EMULATOR;
+  }
+
+  public static class Build.VERSION {
+    field public static final String[] ACTIVE_CODENAMES;
+    field public static final int DEVICE_INITIAL_SDK_INT;
+    field public static final int RESOURCES_SDK_INT;
+  }
+
+  public abstract class CombinedVibration implements android.os.Parcelable {
+    method public abstract long getDuration();
+    method @NonNull public static android.os.CombinedVibration.SequentialCombination startSequential();
+  }
+
+  public static final class CombinedVibration.Mono extends android.os.CombinedVibration {
+    method public long getDuration();
+    method @NonNull public android.os.VibrationEffect getEffect();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration.Mono> CREATOR;
+  }
+
+  public static final class CombinedVibration.Sequential extends android.os.CombinedVibration {
+    method @NonNull public java.util.List<java.lang.Integer> getDelays();
+    method public long getDuration();
+    method @NonNull public java.util.List<android.os.CombinedVibration> getEffects();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration.Sequential> CREATOR;
+  }
+
+  public static final class CombinedVibration.SequentialCombination {
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(int, @NonNull android.os.VibrationEffect);
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(int, @NonNull android.os.VibrationEffect, int);
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(@NonNull android.os.CombinedVibration);
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(@NonNull android.os.CombinedVibration, int);
+    method @NonNull public android.os.CombinedVibration combine();
+  }
+
+  public static final class CombinedVibration.Stereo extends android.os.CombinedVibration {
+    method public long getDuration();
+    method @NonNull public android.util.SparseArray<android.os.VibrationEffect> getEffects();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration.Stereo> CREATOR;
+  }
+
+  public class DeviceIdleManager {
+    method @NonNull public String[] getSystemPowerWhitelist();
+    method @NonNull public String[] getSystemPowerWhitelistExceptIdle();
+  }
+
+  public class Environment {
+    method public static java.io.File buildPath(java.io.File, java.lang.String...);
+  }
+
+  public final class FileUtils {
+    method public static boolean contains(java.io.File, java.io.File);
+    method @NonNull public static byte[] digest(@NonNull java.io.File, @NonNull String) throws java.io.IOException, java.security.NoSuchAlgorithmException;
+    method @NonNull public static byte[] digest(@NonNull java.io.InputStream, @NonNull String) throws java.io.IOException, java.security.NoSuchAlgorithmException;
+  }
+
+  public final class MessageQueue {
+    method public int postSyncBarrier();
+    method public void removeSyncBarrier(int);
+  }
+
+  public final class PackageTagsList implements android.os.Parcelable {
+    method public boolean contains(@NonNull String, @Nullable String);
+    method public boolean contains(@NonNull android.os.PackageTagsList);
+    method public boolean containsAll(@NonNull String);
+    method public int describeContents();
+    method public boolean includes(@NonNull String);
+    method public boolean isEmpty();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.PackageTagsList> CREATOR;
+  }
+
+  public static final class PackageTagsList.Builder {
+    ctor public PackageTagsList.Builder();
+    ctor public PackageTagsList.Builder(int);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull String);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull String, @Nullable String);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull android.os.PackageTagsList);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull java.util.Map<java.lang.String,? extends java.util.Set<java.lang.String>>);
+    method @NonNull public android.os.PackageTagsList build();
+    method @NonNull public android.os.PackageTagsList.Builder clear();
+  }
+
+  public final class Parcel {
+    method public boolean allowSquashing();
+    method public int readExceptionCode();
+    method public void restoreAllowSquashing(boolean);
+  }
+
+  public class ParcelFileDescriptor implements java.io.Closeable android.os.Parcelable {
+    method public static java.io.File getFile(java.io.FileDescriptor) throws java.io.IOException;
+  }
+
+  public final class PowerManager {
+    field public static final String ACTION_ENHANCED_DISCHARGE_PREDICTION_CHANGED = "android.os.action.ENHANCED_DISCHARGE_PREDICTION_CHANGED";
+  }
+
+  public class Process {
+    method public static final int getThreadScheduler(int) throws java.lang.IllegalArgumentException;
+    field public static final int FIRST_APP_ZYGOTE_ISOLATED_UID = 90000; // 0x15f90
+    field public static final int FIRST_ISOLATED_UID = 99000; // 0x182b8
+    field public static final int LAST_APP_ZYGOTE_ISOLATED_UID = 98999; // 0x182b7
+    field public static final int LAST_ISOLATED_UID = 99999; // 0x1869f
+    field public static final int NFC_UID = 1027; // 0x403
+    field public static final int NUM_UIDS_PER_APP_ZYGOTE = 100; // 0x64
+  }
+
+  public final class StrictMode {
+    method public static void conditionallyCheckInstanceCounts();
+    method public static void setViolationLogger(android.os.StrictMode.ViolationLogger);
+  }
+
+  public static final class StrictMode.ThreadPolicy.Builder {
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectExplicitGc();
+  }
+
+  public static final class StrictMode.ViolationInfo implements android.os.Parcelable {
+    ctor public StrictMode.ViolationInfo(android.os.Parcel);
+    ctor public StrictMode.ViolationInfo(android.os.Parcel, boolean);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public String getStackTrace();
+    method public Class<? extends android.os.strictmode.Violation> getViolationClass();
+    method public String getViolationDetails();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.StrictMode.ViolationInfo> CREATOR;
+    field public String broadcastIntentAction;
+    field public int durationMillis;
+    field public int numAnimationsRunning;
+    field public long numInstances;
+    field public String[] tags;
+    field public int violationNumThisLoop;
+    field public long violationUptimeMillis;
+  }
+
+  public static interface StrictMode.ViolationLogger {
+    method public void log(android.os.StrictMode.ViolationInfo);
+  }
+
+  public static final class StrictMode.VmPolicy.Builder {
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder permitIncorrectContextUse();
+  }
+
+  public final class UserHandle implements android.os.Parcelable {
+    method public static int getUid(int, int);
+    method public static int getUserId(int);
+    method public static boolean isApp(int);
+    field public static final int MIN_SECONDARY_USER_ID = 10; // 0xa
+    field public static final int USER_ALL = -1; // 0xffffffff
+    field public static final int USER_NULL = -10000; // 0xffffd8f0
+    field public static final int USER_SYSTEM = 0; // 0x0
+  }
+
+  public class UserManager {
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createProfileForUser(@Nullable String, @NonNull String, int, int, @Nullable String[]);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createRestrictedProfile(@Nullable String);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createUser(@Nullable String, @NonNull String, int);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.Set<java.lang.String> getPreInstallableSystemPackages(@NonNull String);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public String getUserType();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getUsers(boolean, boolean, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle);
+    method public static boolean isGuestUserEphemeral();
+    method public static boolean isSplitSystemUser();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo preCreateUser(@NonNull String) throws android.os.UserManager.UserOperationException;
+  }
+
+  public final class VibrationAttributes implements android.os.Parcelable {
+    method public int getAudioUsage();
+  }
+
+  public static final class VibrationAttributes.Builder {
+    ctor public VibrationAttributes.Builder(@NonNull android.media.AudioAttributes, @Nullable android.os.VibrationEffect);
+  }
+
+  public abstract class VibrationEffect implements android.os.Parcelable {
+    method public static android.os.VibrationEffect get(int);
+    method public static android.os.VibrationEffect get(int, boolean);
+    method @Nullable public static android.os.VibrationEffect get(android.net.Uri, android.content.Context);
+    method public abstract long getDuration();
+    method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform();
+    field public static final int EFFECT_POP = 4; // 0x4
+    field public static final int EFFECT_STRENGTH_LIGHT = 0; // 0x0
+    field public static final int EFFECT_STRENGTH_MEDIUM = 1; // 0x1
+    field public static final int EFFECT_STRENGTH_STRONG = 2; // 0x2
+    field public static final int EFFECT_TEXTURE_TICK = 21; // 0x15
+    field public static final int EFFECT_THUD = 3; // 0x3
+    field public static final int[] RINGTONES;
+  }
+
+  public static final class VibrationEffect.Composed extends android.os.VibrationEffect {
+    method @NonNull public android.os.VibrationEffect.Composed applyEffectStrength(int);
+    method public long getDuration();
+    method public int getRepeatIndex();
+    method @NonNull public java.util.List<android.os.vibrator.VibrationEffectSegment> getSegments();
+    method @NonNull public android.os.VibrationEffect.Composed resolve(int);
+    method @NonNull public android.os.VibrationEffect.Composed scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Composed> CREATOR;
+  }
+
+  public static final class VibrationEffect.Composition {
+    method @NonNull public android.os.VibrationEffect.Composition addEffect(@NonNull android.os.VibrationEffect);
+    method @NonNull public android.os.VibrationEffect.Composition addEffect(@NonNull android.os.VibrationEffect, @IntRange(from=0) int);
+  }
+
+  public static final class VibrationEffect.WaveformBuilder {
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addRamp(@FloatRange(from=0.0f, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addRamp(@FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=-1.0F, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addStep(@FloatRange(from=0.0f, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addStep(@FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=-1.0F, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect build();
+    method @NonNull public android.os.VibrationEffect build(int);
+  }
+
+  public class VintfObject {
+    method public static String[] getHalNamesAndVersions();
+    method @NonNull public static String getPlatformSepolicyVersion();
+    method public static String getSepolicyVersion();
+    method public static Long getTargetFrameworkCompatibilityMatrixVersion();
+    method public static java.util.Map<java.lang.String,java.lang.String[]> getVndkSnapshots();
+    method public static String[] report();
+  }
+
+  public class VintfRuntimeInfo {
+    method public static String getCpuInfo();
+    method public static String getHardwareId();
+    method public static String getKernelVersion();
+    method public static String getNodeName();
+    method public static String getOsName();
+    method public static String getOsRelease();
+    method public static String getOsVersion();
+  }
+
+  public class WorkSource implements android.os.Parcelable {
+    method public boolean add(int);
+    method public boolean add(int, String);
+    method @Deprecated public android.os.WorkSource addReturningNewbs(android.os.WorkSource);
+    method @Deprecated public android.os.WorkSource[] setReturningDiffs(android.os.WorkSource);
+  }
+
+}
+
+package android.os.health {
+
+  public class HealthKeys {
+    ctor public HealthKeys();
+    field public static final int BASE_PACKAGE = 40000; // 0x9c40
+    field public static final int BASE_PID = 20000; // 0x4e20
+    field public static final int BASE_PROCESS = 30000; // 0x7530
+    field public static final int BASE_SERVICE = 50000; // 0xc350
+    field public static final int BASE_UID = 10000; // 0x2710
+    field public static final int TYPE_COUNT = 5; // 0x5
+    field public static final int TYPE_MEASUREMENT = 1; // 0x1
+    field public static final int TYPE_MEASUREMENTS = 4; // 0x4
+    field public static final int TYPE_STATS = 2; // 0x2
+    field public static final int TYPE_TIMER = 0; // 0x0
+    field public static final int TYPE_TIMERS = 3; // 0x3
+    field public static final int UNKNOWN_KEY = 0; // 0x0
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD}) public static @interface HealthKeys.Constant {
+    method public abstract int type();
+  }
+
+  public static class HealthKeys.Constants {
+    ctor public HealthKeys.Constants(Class);
+    method public String getDataType();
+    method public int getIndex(int, int);
+    method public int[] getKeys(int);
+    method public int getSize(int);
+  }
+
+  public class HealthStats {
+    ctor public HealthStats(android.os.Parcel);
+  }
+
+  public class HealthStatsParceler implements android.os.Parcelable {
+    ctor public HealthStatsParceler(android.os.health.HealthStatsWriter);
+    ctor public HealthStatsParceler(android.os.Parcel);
+    method public int describeContents();
+    method public android.os.health.HealthStats getHealthStats();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.health.HealthStatsParceler> CREATOR;
+  }
+
+  public class HealthStatsWriter {
+    ctor public HealthStatsWriter(android.os.health.HealthKeys.Constants);
+    method public void addMeasurement(int, long);
+    method public void addMeasurements(int, String, long);
+    method public void addStats(int, String, android.os.health.HealthStatsWriter);
+    method public void addTimer(int, int, long);
+    method public void addTimers(int, String, android.os.health.TimerStat);
+    method public void flattenToParcel(android.os.Parcel);
+  }
+
+}
+
+package android.os.storage {
+
+  public final class CrateInfo implements android.os.Parcelable {
+    ctor public CrateInfo(@NonNull CharSequence, long);
+    ctor public CrateInfo(@NonNull CharSequence);
+    method @Nullable public static android.os.storage.CrateInfo copyFrom(int, @Nullable String, @Nullable String);
+    method public int describeContents();
+    method public long getExpirationMillis();
+    method @NonNull public CharSequence getLabel();
+    method public void writeToParcel(@Nullable android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.storage.CrateInfo> CREATOR;
+  }
+
+  public class StorageManager {
+    method @NonNull public static java.util.UUID convert(@NonNull String);
+    method @NonNull public static String convert(@NonNull java.util.UUID);
+    method public boolean isAppIoBlocked(@NonNull java.util.UUID, int, int, int);
+    method public static boolean isUserKeyUnlocked(int);
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method public String getPath();
+  }
+
+  public static final class StorageVolume.Builder {
+    ctor public StorageVolume.Builder(@NonNull String, @NonNull java.io.File, @NonNull String, @NonNull android.os.UserHandle, @NonNull String);
+    method @NonNull public android.os.storage.StorageVolume build();
+    method @NonNull public android.os.storage.StorageVolume.Builder setEmulated(boolean);
+    method @NonNull public android.os.storage.StorageVolume.Builder setPrimary(boolean);
+    method @NonNull public android.os.storage.StorageVolume.Builder setRemovable(boolean);
+    method @NonNull public android.os.storage.StorageVolume.Builder setStorageUuid(@Nullable java.util.UUID);
+    method @NonNull public android.os.storage.StorageVolume.Builder setUuid(@Nullable String);
+  }
+
+}
+
+package android.os.strictmode {
+
+  public final class ExplicitGcViolation extends android.os.strictmode.Violation {
+  }
+
+}
+
+package android.os.vibrator {
+
+  public final class PrebakedSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.PrebakedSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public long getDuration();
+    method public int getEffectId();
+    method public int getEffectStrength();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.PrebakedSegment resolve(int);
+    method @NonNull public android.os.vibrator.PrebakedSegment scale(float);
+    method public boolean shouldFallback();
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.PrebakedSegment> CREATOR;
+  }
+
+  public final class PrimitiveSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.PrimitiveSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public int getDelay();
+    method public long getDuration();
+    method public int getPrimitiveId();
+    method public float getScale();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.PrimitiveSegment resolve(int);
+    method @NonNull public android.os.vibrator.PrimitiveSegment scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.PrimitiveSegment> CREATOR;
+  }
+
+  public final class RampSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.RampSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public long getDuration();
+    method public float getEndAmplitude();
+    method public float getEndFrequency();
+    method public float getStartAmplitude();
+    method public float getStartFrequency();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.RampSegment resolve(int);
+    method @NonNull public android.os.vibrator.RampSegment scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.RampSegment> CREATOR;
+  }
+
+  public final class StepSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.StepSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public float getAmplitude();
+    method public long getDuration();
+    method public float getFrequency();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.StepSegment resolve(int);
+    method @NonNull public android.os.vibrator.StepSegment scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.StepSegment> CREATOR;
+  }
+
+  public abstract class VibrationEffectSegment implements android.os.Parcelable {
+    method @NonNull public abstract <T extends android.os.vibrator.VibrationEffectSegment> T applyEffectStrength(int);
+    method public abstract long getDuration();
+    method public abstract boolean hasNonZeroAmplitude();
+    method @NonNull public abstract <T extends android.os.vibrator.VibrationEffectSegment> T resolve(int);
+    method @NonNull public abstract <T extends android.os.vibrator.VibrationEffectSegment> T scale(float);
+    method public abstract void validate();
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.VibrationEffectSegment> CREATOR;
+  }
+
+}
+
+package android.permission {
+
+  public final class PermGroupUsage {
+    ctor public PermGroupUsage(@NonNull String, int, @NonNull String, long, boolean, boolean, @Nullable CharSequence);
+    method @Nullable public CharSequence getAttribution();
+    method public long getLastAccess();
+    method @NonNull public String getPackageName();
+    method @NonNull public String getPermGroupName();
+    method public int getUid();
+    method public boolean isActive();
+    method public boolean isPhoneCall();
+  }
+
+  public final class PermissionControllerManager {
+    method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void countPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull android.permission.PermissionControllerManager.OnCountPermissionAppsResultCallback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getAppPermissions(@NonNull String, @NonNull android.permission.PermissionControllerManager.OnGetAppPermissionResultCallback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String);
+  }
+
+  public static interface PermissionControllerManager.OnCountPermissionAppsResultCallback {
+    method public void onCountPermissionApps(int);
+  }
+
+  public static interface PermissionControllerManager.OnGetAppPermissionResultCallback {
+    method public void onGetAppPermissions(@NonNull java.util.List<android.permission.RuntimePermissionPresentationInfo>);
+  }
+
+  public final class PermissionManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.permission.PermGroupUsage> getIndicatorAppOpUsageData();
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.permission.PermGroupUsage> getIndicatorAppOpUsageData(boolean);
+    method @NonNull public android.content.AttributionSource registerAttributionSource(@NonNull android.content.AttributionSource);
+  }
+
+}
+
+package android.print {
+
+  public final class PrintJobInfo implements android.os.Parcelable {
+    method public float getProgress();
+    method @Nullable public CharSequence getStatus(@NonNull android.content.pm.PackageManager);
+  }
+
+  public final class PrinterInfo implements android.os.Parcelable {
+    method @Nullable public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context);
+  }
+
+}
+
+package android.provider {
+
+  public interface AndroidDeviceConfig {
+    field public static final String KEY_SYSTEM_GESTURES_EXCLUDED_BY_PRE_Q_STICKY_IMMERSIVE = "system_gestures_excluded_by_pre_q_sticky_immersive";
+    field public static final String KEY_SYSTEM_GESTURE_EXCLUSION_LIMIT_DP = "system_gesture_exclusion_limit_dp";
+  }
+
+  public static final class CalendarContract.Calendars implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+    field public static final String[] SYNC_WRITABLE_COLUMNS;
+  }
+
+  public static final class CalendarContract.Events implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+    field public static final String[] SYNC_WRITABLE_COLUMNS;
+  }
+
+  public final class ContactsContract {
+    field public static final String HIDDEN_COLUMN_PREFIX = "x_";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Phone implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+  }
+
+  public static final class ContactsContract.PinnedPositions {
+    field public static final String UNDEMOTE_METHOD = "undemote";
+  }
+
+  public static final class ContactsContract.RawContactsEntity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.RawContactsColumns {
+    field public static final android.net.Uri CORP_CONTENT_URI;
+  }
+
+  public final class DeviceConfig {
+    field public static final String NAMESPACE_ALARM_MANAGER = "alarm_manager";
+    field public static final String NAMESPACE_ANDROID = "android";
+    field public static final String NAMESPACE_APP_COMPAT_OVERRIDES = "app_compat_overrides";
+    field public static final String NAMESPACE_CONSTRAIN_DISPLAY_APIS = "constrain_display_apis";
+    field public static final String NAMESPACE_DEVICE_IDLE = "device_idle";
+    field public static final String NAMESPACE_JOB_SCHEDULER = "jobscheduler";
+  }
+
+  public final class Settings {
+    field public static final int RESET_MODE_PACKAGE_DEFAULTS = 1; // 0x1
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    field public static final String APP_OPS_CONSTANTS = "app_ops_constants";
+    field public static final String ARE_USER_DISABLED_HDR_FORMATS_ALLOWED = "are_user_disabled_hdr_formats_allowed";
+    field public static final String AUTOMATIC_POWER_SAVE_MODE = "automatic_power_save_mode";
+    field public static final String BATTERY_SAVER_CONSTANTS = "battery_saver_constants";
+    field public static final String DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW = "enable_non_resizable_multi_window";
+    field public static final String DISABLE_WINDOW_BLURS = "disable_window_blurs";
+    field public static final String DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD = "dynamic_power_savings_disable_threshold";
+    field public static final String DYNAMIC_POWER_SAVINGS_ENABLED = "dynamic_power_savings_enabled";
+    field public static final String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions";
+    field public static final String HIDDEN_API_POLICY = "hidden_api_policy";
+    field public static final String HIDE_ERROR_DIALOGS = "hide_error_dialogs";
+    field @Deprecated public static final String LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST = "location_ignore_settings_package_whitelist";
+    field public static final String LOW_POWER_MODE = "low_power";
+    field public static final String LOW_POWER_MODE_STICKY = "low_power_sticky";
+    field @Deprecated public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
+    field public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
+    field public static final String SHOW_FIRST_CRASH_DIALOG = "show_first_crash_dialog";
+    field public static final String USER_DISABLED_HDR_FORMATS = "user_disabled_hdr_formats";
+    field public static final String USE_OPEN_WIFI_PACKAGE = "use_open_wifi_package";
+  }
+
+  public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
+    field public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED = "accessibility_display_magnification_enabled";
+    field public static final String ACCESSIBILITY_MAGNIFICATION_CAPABILITY = "accessibility_magnification_capability";
+    field public static final String ACCESSIBILITY_MAGNIFICATION_MODE = "accessibility_magnification_mode";
+    field public static final int ACCESSIBILITY_MAGNIFICATION_MODE_ALL = 3; // 0x3
+    field public static final int ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN = 1; // 0x1
+    field public static final int ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW = 2; // 0x2
+    field public static final String ACCESSIBILITY_SHORTCUT_TARGET_SERVICE = "accessibility_shortcut_target_service";
+    field public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
+    field public static final String AUTOFILL_SERVICE = "autofill_service";
+    field public static final String CONTENT_CAPTURE_ENABLED = "content_capture_enabled";
+    field public static final String DISABLED_PRINT_SERVICES = "disabled_print_services";
+    field @Deprecated public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = "enabled_notification_policy_access_packages";
+    field public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
+    field public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations";
+    field public static final String NOTIFICATION_BADGING = "notification_badging";
+    field public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
+    field public static final String POWER_MENU_LOCKED_SHOW_CONTENT = "power_menu_locked_show_content";
+    field public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker";
+    field public static final String SELECTED_SPELL_CHECKER_SUBTYPE = "selected_spell_checker_subtype";
+    field public static final String SHOW_FIRST_CRASH_DIALOG_DEV_OPTION = "show_first_crash_dialog_dev_option";
+    field public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard";
+    field @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds";
+    field public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
+  }
+
+  public static final class Telephony.Sms.Intents {
+    field public static final String SMS_CARRIER_PROVISION_ACTION = "android.provider.Telephony.SMS_CARRIER_PROVISION";
+  }
+
+  public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns {
+    field public static final String _DATA = "_data";
+  }
+
+}
+
+package android.security {
+
+  public final class KeyChain {
+    method @RequiresPermission("android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP") @WorkerThread public static boolean setCredentialManagementApp(@NonNull android.content.Context, @NonNull String, @NonNull android.security.AppUriAuthenticationPolicy);
+  }
+
+  public class KeyStoreException extends java.lang.Exception {
+    ctor public KeyStoreException(int, String);
+    method public int getErrorCode();
+  }
+
+}
+
+package android.security.keystore {
+
+  public static final class KeyGenParameterSpec.Builder {
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUniqueIdIncluded(boolean);
+  }
+
+  public final class KeyProtection implements java.security.KeyStore.ProtectionParameter {
+    method public long getBoundToSpecificSecureUserId();
+  }
+
+  public static final class KeyProtection.Builder {
+    method public android.security.keystore.KeyProtection.Builder setBoundToSpecificSecureUserId(long);
+  }
+
+}
+
+package android.service.autofill {
+
+  public final class CharSequenceTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
+  }
+
+  public final class CompositeUserData implements android.os.Parcelable {
+    ctor public CompositeUserData(@Nullable android.service.autofill.UserData, @NonNull android.service.autofill.UserData);
+    method public int describeContents();
+    method public String[] getCategoryIds();
+    method public android.os.Bundle getDefaultFieldClassificationArgs();
+    method @Nullable public String getFieldClassificationAlgorithm();
+    method @Nullable public String getFieldClassificationAlgorithmForCategory(@NonNull String);
+    method public android.util.ArrayMap<java.lang.String,java.lang.String> getFieldClassificationAlgorithms();
+    method public android.util.ArrayMap<java.lang.String,android.os.Bundle> getFieldClassificationArgs();
+    method public String[] getValues();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CompositeUserData> CREATOR;
+  }
+
+  public final class CustomDescription implements android.os.Parcelable {
+    method @Nullable public android.util.SparseArray<android.service.autofill.InternalOnClickAction> getActions();
+  }
+
+  public final class Dataset implements android.os.Parcelable {
+    method @Nullable public android.content.IntentSender getAuthentication();
+    method @Nullable public android.content.ClipData getFieldContent();
+    method @Nullable public java.util.ArrayList<android.view.autofill.AutofillId> getFieldIds();
+    method @Nullable public java.util.ArrayList<android.view.autofill.AutofillValue> getFieldValues();
+    method @Nullable public String getId();
+    method public boolean isEmpty();
+  }
+
+  public static final class Dataset.Builder {
+    method @NonNull public android.service.autofill.Dataset.Builder setContent(@NonNull android.view.autofill.AutofillId, @Nullable android.content.ClipData);
+  }
+
+  public final class DateTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
+  }
+
+  public final class DateValueSanitizer extends android.service.autofill.InternalSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    method @Nullable public android.view.autofill.AutofillValue sanitize(@NonNull android.view.autofill.AutofillValue);
+  }
+
+  public final class FillResponse implements android.os.Parcelable {
+    method public int getFlags();
+  }
+
+  public final class ImageTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
+  }
+
+  public abstract class InternalOnClickAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+    ctor public InternalOnClickAction();
+    method public abstract void onClick(@NonNull android.view.ViewGroup);
+  }
+
+  public abstract class InternalSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    ctor public InternalSanitizer();
+    method @Nullable public abstract android.view.autofill.AutofillValue sanitize(@NonNull android.view.autofill.AutofillValue);
+  }
+
+  public abstract class InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    ctor public InternalTransformation();
+    method public static boolean batchApply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, @NonNull java.util.ArrayList<android.util.Pair<java.lang.Integer,android.service.autofill.InternalTransformation>>);
+  }
+
+  public abstract class InternalValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public InternalValidator();
+    method public abstract boolean isValid(@NonNull android.service.autofill.ValueFinder);
+  }
+
+  public final class LuhnChecksumValidator extends android.service.autofill.InternalValidator implements android.os.Parcelable android.service.autofill.Validator {
+    method public boolean isValid(@NonNull android.service.autofill.ValueFinder);
+  }
+
+  public final class RegexValidator extends android.service.autofill.InternalValidator implements android.os.Parcelable android.service.autofill.Validator {
+    method public boolean isValid(@NonNull android.service.autofill.ValueFinder);
+  }
+
+  public final class TextValueSanitizer extends android.service.autofill.InternalSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    method @Nullable public android.view.autofill.AutofillValue sanitize(@NonNull android.view.autofill.AutofillValue);
+  }
+
+  public final class UserData implements android.os.Parcelable {
+    method public android.util.ArrayMap<java.lang.String,java.lang.String> getFieldClassificationAlgorithms();
+  }
+
+  public interface ValueFinder {
+    method @Nullable public default String findByAutofillId(@NonNull android.view.autofill.AutofillId);
+    method @Nullable public android.view.autofill.AutofillValue findRawValueByAutofillId(@NonNull android.view.autofill.AutofillId);
+  }
+
+  public final class VisibilitySetterAction extends android.service.autofill.InternalOnClickAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+    method public void onClick(@NonNull android.view.ViewGroup);
+  }
+
+}
+
+package android.service.autofill.augmented {
+
+  public final class FillRequest {
+    method @NonNull public android.content.ComponentName getActivityComponent();
+    method @NonNull public android.view.autofill.AutofillId getFocusedId();
+    method @NonNull public android.view.autofill.AutofillValue getFocusedValue();
+    method @Nullable public android.app.assist.AssistStructure.ViewNode getFocusedViewNode();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest getInlineSuggestionsRequest();
+    method @Nullable public android.service.autofill.augmented.PresentationParams getPresentationParams();
+    method public int getTaskId();
+  }
+
+}
+
+package android.service.notification {
+
+  @Deprecated public abstract class ConditionProviderService extends android.app.Service {
+    method @Deprecated public boolean isBound();
+  }
+
+}
+
+package android.service.quickaccesswallet {
+
+  public interface QuickAccessWalletClient extends java.io.Closeable {
+    method public void addWalletServiceEventListener(@NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method public void addWalletServiceEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method @NonNull public static android.service.quickaccesswallet.QuickAccessWalletClient create(@NonNull android.content.Context);
+    method @Nullable public android.content.Intent createWalletIntent();
+    method @Nullable public android.content.Intent createWalletSettingsIntent();
+    method public void disconnect();
+    method public void getWalletCards(@NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.QuickAccessWalletClient.OnWalletCardsRetrievedCallback);
+    method public void getWalletCards(@NonNull java.util.concurrent.Executor, @NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.QuickAccessWalletClient.OnWalletCardsRetrievedCallback);
+    method public boolean isWalletFeatureAvailable();
+    method public boolean isWalletFeatureAvailableWhenDeviceLocked();
+    method public boolean isWalletServiceAvailable();
+    method public void notifyWalletDismissed();
+    method public void removeWalletServiceEventListener(@NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method public void selectWalletCard(@NonNull android.service.quickaccesswallet.SelectWalletCardRequest);
+  }
+
+  public static interface QuickAccessWalletClient.OnWalletCardsRetrievedCallback {
+    method public void onWalletCardRetrievalError(@NonNull android.service.quickaccesswallet.GetWalletCardsError);
+    method public void onWalletCardsRetrieved(@NonNull android.service.quickaccesswallet.GetWalletCardsResponse);
+  }
+
+  public static interface QuickAccessWalletClient.WalletServiceEventListener {
+    method public void onWalletServiceEvent(@NonNull android.service.quickaccesswallet.WalletServiceEvent);
+  }
+
+}
+
+package android.service.quicksettings {
+
+  public class TileService extends android.app.Service {
+    method public static boolean isQuickSettingsSupported();
+  }
+
+}
+
+package android.service.voice {
+
+  public class AlwaysOnHotwordDetector implements android.service.voice.HotwordDetector {
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public void triggerHardwareRecognitionEventForTest(int, int, boolean, int, int, int, boolean, @NonNull android.media.AudioFormat, @Nullable byte[]);
+  }
+
+  public final class VisibleActivityInfo implements android.os.Parcelable {
+    ctor public VisibleActivityInfo(int, @NonNull android.os.IBinder);
+  }
+
+}
+
+package android.service.watchdog {
+
+  public abstract class ExplicitHealthCheckService extends android.app.Service {
+    method public void setCallback(@Nullable android.os.RemoteCallback);
+  }
+
+}
+
+package android.speech {
+
+  public class SpeechRecognizer {
+    method @MainThread @NonNull public static android.speech.SpeechRecognizer createOnDeviceTestingSpeechRecognizer(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SPEECH_RECOGNITION) public void setTemporaryOnDeviceRecognizer(@Nullable android.content.ComponentName);
+  }
+
+}
+
+package android.telecom {
+
+  public static class Call.Details {
+    method public String getTelecomCallId();
+  }
+
+  public final class CallAudioState implements android.os.Parcelable {
+    ctor public CallAudioState(boolean, int, int, @Nullable android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.bluetooth.BluetoothDevice>);
+  }
+
+  public static final class ConnectionRequest.Builder {
+    ctor public ConnectionRequest.Builder();
+    method @NonNull public android.telecom.ConnectionRequest build();
+    method @NonNull public android.telecom.ConnectionRequest.Builder setAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setAddress(@NonNull android.net.Uri);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setIsAdhocConferenceCall(boolean);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setParticipants(@Nullable java.util.List<android.net.Uri>);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setRttPipeFromInCall(@NonNull android.os.ParcelFileDescriptor);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setRttPipeToInCall(@NonNull android.os.ParcelFileDescriptor);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setShouldShowIncomingCallUi(boolean);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setTelecomCallId(@NonNull String);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setVideoState(int);
+  }
+
+  public abstract class ConnectionService extends android.app.Service {
+    method public void onBindClient(@Nullable android.content.Intent);
+  }
+
+}
+
+package android.telephony {
+
+  public final class BarringInfo implements android.os.Parcelable {
+    ctor public BarringInfo(@Nullable android.telephony.CellIdentity, @NonNull android.util.SparseArray<android.telephony.BarringInfo.BarringServiceInfo>);
+  }
+
+  public static final class BarringInfo.BarringServiceInfo implements android.os.Parcelable {
+    ctor public BarringInfo.BarringServiceInfo(int, boolean, int, int);
+  }
+
+  public class MbmsDownloadSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_DOWNLOAD_SERVICE_OVERRIDE_METADATA = "mbms-download-service-override";
+  }
+
+  public class MbmsGroupCallSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_GROUP_CALL_SERVICE_OVERRIDE_METADATA = "mbms-group-call-service-override";
+  }
+
+  public class MbmsStreamingSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_STREAMING_SERVICE_OVERRIDE_METADATA = "mbms-streaming-service-override";
+  }
+
+  public final class ModemActivityInfo implements android.os.Parcelable {
+    ctor public ModemActivityInfo(long, int, int, @NonNull int[], int);
+    method public boolean isEmpty();
+    method public boolean isValid();
+  }
+
+  public class PhoneNumberUtils {
+    method public static int getMinMatchForTest();
+    method public static void setMinMatchForTest(int);
+  }
+
+  public final class PreciseDataConnectionState implements android.os.Parcelable {
+    ctor @Deprecated public PreciseDataConnectionState(int, int, int, @NonNull String, @Nullable android.net.LinkProperties, int);
+  }
+
+  public class ServiceState implements android.os.Parcelable {
+    method public void addNetworkRegistrationInfo(android.telephony.NetworkRegistrationInfo);
+    method public int getDataNetworkType();
+    method public int getDataRegState();
+    method public void setCdmaSystemAndNetworkId(int, int);
+    method public void setCellBandwidths(int[]);
+    method public void setChannelNumber(int);
+    method public void setDataRoamingType(int);
+    method public void setRilDataRadioTechnology(int);
+    method public void setRilVoiceRadioTechnology(int);
+    method public void setVoiceRoamingType(int);
+  }
+
+  public final class SmsManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int checkSmsShortCodeDestination(String, String);
+    field public static final int SMS_CATEGORY_FREE_SHORT_CODE = 1; // 0x1
+    field public static final int SMS_CATEGORY_NOT_SHORT_CODE = 0; // 0x0
+    field public static final int SMS_CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE = 3; // 0x3
+    field public static final int SMS_CATEGORY_PREMIUM_SHORT_CODE = 4; // 0x4
+    field public static final int SMS_CATEGORY_STANDARD_SHORT_CODE = 2; // 0x2
+  }
+
+  public class TelephonyManager {
+    method public int addDevicePolicyOverrideApn(@NonNull android.content.Context, @NonNull android.telephony.data.ApnSetting);
+    method public int getCarrierIdListVersion();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<java.lang.String> getCertsFromCarrierPrivilegeAccessRules();
+    method @NonNull public java.util.List<android.telephony.data.ApnSetting> getDevicePolicyOverrideApns(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getLine1AlphaTag();
+    method public android.util.Pair<java.lang.Integer,java.lang.Integer> getRadioHalVersion();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getSupportedRadioAccessFamily();
+    method public boolean modifyDevicePolicyOverrideApn(@NonNull android.content.Context, int, @NonNull android.telephony.data.ApnSetting);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void refreshUiccProfile();
+    method @Deprecated public void setCarrierTestOverride(String, String, String, String, String, String, String);
+    method public void setCarrierTestOverride(String, String, String, String, String, String, String, String, String);
+    field public static final int UNKNOWN_CARRIER_ID_LIST_VERSION = -1; // 0xffffffff
+  }
+
+}
+
+package android.telephony.emergency {
+
+  public final class EmergencyNumber implements java.lang.Comparable<android.telephony.emergency.EmergencyNumber> android.os.Parcelable {
+    field public static final int EMERGENCY_NUMBER_SOURCE_TEST = 32; // 0x20
+  }
+
+}
+
+package android.telephony.ims {
+
+  public final class ImsCallProfile implements android.os.Parcelable {
+    field public static final String EXTRA_OEM_EXTRAS = "android.telephony.ims.extra.OEM_EXTRAS";
+  }
+
+}
+
+package android.telephony.ims.feature {
+
+  @Deprecated public static class ImsFeature.Capabilities {
+    field @Deprecated protected int mCapabilities;
+  }
+
+}
+
+package android.text {
+
+  public final class FontConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Alias> getAliases();
+    method @IntRange(from=0) public int getConfigVersion();
+    method @NonNull public java.util.List<android.text.FontConfig.FontFamily> getFontFamilies();
+    method public long getLastModifiedTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig> CREATOR;
+  }
+
+  public static final class FontConfig.Alias implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getName();
+    method @NonNull public String getOriginal();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Alias> CREATOR;
+  }
+
+  public static final class FontConfig.Font implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.io.File getFile();
+    method @Nullable public String getFontFamilyName();
+    method @NonNull public String getFontVariationSettings();
+    method @NonNull public String getPostScriptName();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+    method public int getTtcIndex();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Font> CREATOR;
+  }
+
+  public static final class FontConfig.FontFamily implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Font> getFontList();
+    method @NonNull public android.os.LocaleList getLocaleList();
+    method @Nullable public String getName();
+    method public int getVariant();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.FontFamily> CREATOR;
+    field public static final int VARIANT_COMPACT = 1; // 0x1
+    field public static final int VARIANT_DEFAULT = 0; // 0x0
+    field public static final int VARIANT_ELEGANT = 2; // 0x2
+  }
+
+  public static final class Selection.MemoryTextWatcher implements android.text.TextWatcher {
+    ctor public Selection.MemoryTextWatcher();
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+}
+
+package android.transition {
+
+  public class TransitionManager {
+    method public android.transition.Transition getTransition(android.transition.Scene);
+  }
+
+}
+
+package android.util {
+
+  public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
+    method public E valueAtUnchecked(int);
+  }
+
+  public class FeatureFlagUtils {
+    ctor public FeatureFlagUtils();
+    method public static java.util.Map<java.lang.String,java.lang.String> getAllFeatureFlags();
+    method public static boolean isEnabled(android.content.Context, String);
+    method public static void setEnabled(android.content.Context, String, boolean);
+    field public static final String FFLAG_OVERRIDE_PREFIX = "sys.fflag.override.";
+    field public static final String FFLAG_PREFIX = "sys.fflag.";
+    field public static final String HEARING_AID_SETTINGS = "settings_bluetooth_hearing_aid";
+    field public static final String PERSIST_PREFIX = "persist.sys.fflag.override.";
+    field public static final String SETTINGS_WIFITRACKER2 = "settings_wifitracker2";
+  }
+
+  public class SparseArrayMap<K, V> {
+    ctor public SparseArrayMap();
+    method public void add(int, @NonNull K, @Nullable V);
+    method public void clear();
+    method public boolean contains(int, @NonNull K);
+    method public void delete(int);
+    method @Nullable public V delete(int, @NonNull K);
+    method public void forEach(@NonNull java.util.function.Consumer<V>);
+    method @Nullable public V get(int, @NonNull K);
+    method @Nullable public V getOrDefault(int, @NonNull K, V);
+    method public int indexOfKey(int);
+    method public int indexOfKey(int, @NonNull K);
+    method public int keyAt(int);
+    method @NonNull public K keyAt(int, int);
+    method public int numElementsForKey(int);
+    method public int numMaps();
+    method @Nullable public V valueAt(int, int);
+  }
+
+  public class TimeUtils {
+    method public static String formatDuration(long);
+  }
+
+}
+
+package android.util.proto {
+
+  public final class EncodedBuffer {
+    ctor public EncodedBuffer();
+    ctor public EncodedBuffer(int);
+    method public void dumpBuffers(String);
+    method public static void dumpByteString(String, String, byte[]);
+    method public void editRawFixed32(int, int);
+    method public byte[] getBytes(int);
+    method public int getChunkCount();
+    method public String getDebugString();
+    method public int getRawFixed32At(int);
+    method public static int getRawVarint32Size(int);
+    method public static int getRawVarint64Size(long);
+    method public static int getRawZigZag32Size(int);
+    method public static int getRawZigZag64Size(long);
+    method public int getReadPos();
+    method public int getReadableSize();
+    method public int getSize();
+    method public int getWriteBufIndex();
+    method public int getWriteIndex();
+    method public int getWritePos();
+    method public byte readRawByte();
+    method public int readRawFixed32();
+    method public long readRawUnsigned();
+    method public void rewindRead();
+    method public void rewindWriteTo(int);
+    method public void skipRead(int);
+    method public void startEditing();
+    method public void writeFromThisBuffer(int, int);
+    method public void writeRawBuffer(byte[]);
+    method public void writeRawBuffer(byte[], int, int);
+    method public void writeRawByte(byte);
+    method public void writeRawFixed32(int);
+    method public void writeRawFixed64(long);
+    method public void writeRawVarint32(int);
+    method public void writeRawVarint64(long);
+    method public void writeRawZigZag32(int);
+    method public void writeRawZigZag64(long);
+  }
+
+  public class ProtoParseException extends java.lang.RuntimeException {
+    ctor public ProtoParseException(String);
+  }
+
+  public class WireTypeMismatchException extends android.util.proto.ProtoParseException {
+    ctor public WireTypeMismatchException(String);
+  }
+
+}
+
+package android.view {
+
+  public abstract class ActionMode {
+    method public boolean isUiFocusable();
+  }
+
+  public final class Choreographer {
+    method public static long getFrameDelay();
+    method public void postCallback(int, Runnable, Object);
+    method public void postCallbackDelayed(int, Runnable, Object, long);
+    method public void removeCallbacks(int, Runnable, Object);
+    method public static void setFrameDelay(long);
+    field public static final int CALLBACK_ANIMATION = 1; // 0x1
+  }
+
+  public final class ContentInfo implements android.os.Parcelable {
+    method @NonNull public android.util.Pair<android.view.ContentInfo,android.view.ContentInfo> partition(@NonNull java.util.function.Predicate<android.content.ClipData.Item>);
+    method public void releasePermissions();
+  }
+
+  public static final class ContentInfo.Builder {
+    method @NonNull public android.view.ContentInfo.Builder setDragAndDropPermissions(@Nullable android.view.DragAndDropPermissions);
+    method @NonNull public android.view.ContentInfo.Builder setInputContentInfo(@Nullable android.view.inputmethod.InputContentInfo);
+  }
+
+  public final class Display {
+    method @NonNull public int[] getReportedHdrTypes();
+    method @NonNull public android.graphics.ColorSpace[] getSupportedWideColorGamut();
+    method public int getType();
+    method public boolean hasAccess(int);
+    field public static final int FLAG_TRUSTED = 128; // 0x80
+    field public static final int TYPE_EXTERNAL = 2; // 0x2
+    field public static final int TYPE_INTERNAL = 1; // 0x1
+    field public static final int TYPE_OVERLAY = 4; // 0x4
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_VIRTUAL = 5; // 0x5
+    field public static final int TYPE_WIFI = 3; // 0x3
+  }
+
+  public class FocusFinder {
+    method public static void sort(android.view.View[], int, int, android.view.ViewGroup, boolean);
+  }
+
+  public final class InputDevice implements android.os.Parcelable {
+    method @RequiresPermission("android.permission.DISABLE_INPUT_DEVICE") public void disable();
+    method @RequiresPermission("android.permission.DISABLE_INPUT_DEVICE") public void enable();
+  }
+
+  public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable {
+    method public static String actionToString(int);
+    method public final void setDisplayId(int);
+    field public static final int FLAG_IS_ACCESSIBILITY_EVENT = 2048; // 0x800
+    field public static final int LAST_KEYCODE = 288; // 0x120
+  }
+
+  public final class KeyboardShortcutGroup implements android.os.Parcelable {
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence, @NonNull java.util.List<android.view.KeyboardShortcutInfo>, boolean);
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence, boolean);
+    method public boolean isSystemGroup();
+  }
+
+  public abstract class LayoutInflater {
+    method public void setPrecompiledLayoutsEnabledForTesting(boolean);
+  }
+
+  public final class MotionEvent extends android.view.InputEvent implements android.os.Parcelable {
+    method public void setActionButton(int);
+    method public void setButtonState(int);
+    method public void setDisplayId(int);
+    field public static final int FLAG_IS_ACCESSIBILITY_EVENT = 2048; // 0x800
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface RemotableViewMethod {
+    method public abstract String asyncImpl() default "";
+  }
+
+  public final class SurfaceControl implements android.os.Parcelable {
+    ctor public SurfaceControl(@NonNull android.view.SurfaceControl, @NonNull String);
+    method public static long acquireFrameRateFlexibilityToken();
+    method @NonNull public static android.os.IBinder getInternalDisplayToken();
+    method public boolean isSameSurface(@NonNull android.view.SurfaceControl);
+    method public static void overrideHdrTypes(@NonNull android.os.IBinder, @NonNull int[]);
+    method public static void releaseFrameRateFlexibilityToken(long);
+  }
+
+  public class SurfaceControlViewHost {
+    method public void relayout(android.view.WindowManager.LayoutParams);
+    method public void setView(@NonNull android.view.View, @NonNull android.view.WindowManager.LayoutParams);
+  }
+
+  @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
+    method public android.view.View getTooltipView();
+    method public boolean isAutofilled();
+    method public static boolean isDefaultFocusHighlightEnabled();
+    method public boolean isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+    method protected void resetResolvedDrawables();
+    method public void resetResolvedLayoutDirection();
+    method public void resetResolvedPadding();
+    method public void resetResolvedTextAlignment();
+    method public void resetResolvedTextDirection();
+    method public void resetRtlProperties();
+    method public boolean restoreFocusInCluster(int);
+    method public boolean restoreFocusNotInCluster();
+    method public void setAutofilled(boolean, boolean);
+    method public final void setFocusedInCluster();
+    method public void setIsRootNamespace(boolean);
+    method public final void setShowingLayoutBounds(boolean);
+  }
+
+  public class ViewConfiguration {
+    method public long getDeviceGlobalActionKeyTimeout();
+    method public static int getHoverTooltipHideShortTimeout();
+    method public static int getHoverTooltipHideTimeout();
+    method public static int getHoverTooltipShowTimeout();
+    method public static int getLongPressTooltipHideTimeout();
+  }
+
+  public class ViewDebug {
+    method @Deprecated @Nullable public static AutoCloseable startRenderingCommandsCapture(android.view.View, java.util.concurrent.Executor, java.util.function.Function<android.graphics.Picture,java.lang.Boolean>);
+    method @Nullable public static AutoCloseable startRenderingCommandsCapture(android.view.View, java.util.concurrent.Executor, java.util.concurrent.Callable<java.io.OutputStream>);
+  }
+
+  public abstract class Window {
+    method @Nullable public android.view.View getNavigationBarBackgroundView();
+    method @Nullable public android.view.View getStatusBarBackgroundView();
+  }
+
+  public interface WindowManager extends android.view.ViewManager {
+    method public default int getDisplayImePolicy(int);
+    method public default void holdLock(android.os.IBinder, int);
+    method public default boolean isTaskSnapshotSupported();
+    method public default void setDisplayImePolicy(int, int);
+    method public default void setShouldShowSystemDecors(int, boolean);
+    method public default void setShouldShowWithInsecureKeyguard(int, boolean);
+    method public default boolean shouldShowSystemDecors(int);
+    field public static final int DISPLAY_IME_POLICY_FALLBACK_DISPLAY = 1; // 0x1
+    field public static final int DISPLAY_IME_POLICY_HIDE = 2; // 0x2
+    field public static final int DISPLAY_IME_POLICY_LOCAL = 0; // 0x0
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    method @Nullable public final android.os.IBinder getWindowContextToken();
+    method public final void setWindowContextToken(@NonNull android.os.IBinder);
+    field public static final int ACCESSIBILITY_TITLE_CHANGED = 33554432; // 0x2000000
+    field public static final int PRIVATE_FLAG_NO_MOVE_ANIMATION = 64; // 0x40
+    field public CharSequence accessibilityTitle;
+    field public int privateFlags;
+  }
+
+}
+
+package android.view.accessibility {
+
+  public final class AccessibilityManager {
+    method public void addAccessibilityServicesStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener, @Nullable android.os.Handler);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public java.util.List<java.lang.String> getAccessibilityShortcutTargets(int);
+    method public void removeAccessibilityServicesStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
+  }
+
+  public static interface AccessibilityManager.AccessibilityServicesStateChangeListener {
+    method public void onAccessibilityServicesStateChanged(android.view.accessibility.AccessibilityManager);
+  }
+
+  public class AccessibilityNodeInfo implements android.os.Parcelable {
+    method public void addChild(@NonNull android.os.IBinder);
+    method public long getSourceNodeId();
+    method public void setLeashedParent(@Nullable android.os.IBinder, int);
+    method public static void setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger);
+    method public void writeToParcelNoRecycle(android.os.Parcel, int);
+  }
+
+  public static final class AccessibilityNodeInfo.TouchDelegateInfo implements android.os.Parcelable {
+    method public long getAccessibilityIdForRegion(@NonNull android.graphics.Region);
+  }
+
+  public final class AccessibilityWindowInfo implements android.os.Parcelable {
+    method public static void setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger);
+  }
+
+}
+
+package android.view.animation {
+
+  public class AnimationUtils {
+    method public static void lockAnimationClock(long);
+    method public static void unlockAnimationClock();
+  }
+
+}
+
+package android.view.autofill {
+
+  public final class AutofillId implements android.os.Parcelable {
+    ctor public AutofillId(int);
+    ctor public AutofillId(@NonNull android.view.autofill.AutofillId, int);
+    ctor public AutofillId(int, int);
+    ctor public AutofillId(@NonNull android.view.autofill.AutofillId, long, int);
+    method public boolean equalsIgnoreSession(@Nullable android.view.autofill.AutofillId);
+    method public boolean isNonVirtual();
+    method @NonNull public static android.view.autofill.AutofillId withoutSession(@NonNull android.view.autofill.AutofillId);
+  }
+
+  public final class AutofillManager {
+    field public static final String DEVICE_CONFIG_AUTOFILL_SMART_SUGGESTION_SUPPORTED_MODES = "smart_suggestion_supported_modes";
+    field public static final int FLAG_SMART_SUGGESTION_OFF = 0; // 0x0
+    field public static final int FLAG_SMART_SUGGESTION_SYSTEM = 1; // 0x1
+    field public static final int MAX_TEMP_AUGMENTED_SERVICE_DURATION_MS = 120000; // 0x1d4c0
+  }
+
+}
+
+package android.view.contentcapture {
+
+  public final class ContentCaptureManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_CAPTURE) public static void resetTemporaryService(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_CAPTURE) public static void setDefaultServiceEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_CAPTURE) public static void setTemporaryService(int, @NonNull String, int);
+    field public static final String DEVICE_CONFIG_PROPERTY_IDLE_FLUSH_FREQUENCY = "idle_flush_frequency";
+    field public static final String DEVICE_CONFIG_PROPERTY_LOGGING_LEVEL = "logging_level";
+    field public static final String DEVICE_CONFIG_PROPERTY_LOG_HISTORY_SIZE = "log_history_size";
+    field public static final String DEVICE_CONFIG_PROPERTY_MAX_BUFFER_SIZE = "max_buffer_size";
+    field public static final String DEVICE_CONFIG_PROPERTY_SERVICE_EXPLICITLY_ENABLED = "service_explicitly_enabled";
+    field public static final String DEVICE_CONFIG_PROPERTY_TEXT_CHANGE_FLUSH_FREQUENCY = "text_change_flush_frequency";
+    field public static final int LOGGING_LEVEL_DEBUG = 1; // 0x1
+    field public static final int LOGGING_LEVEL_OFF = 0; // 0x0
+    field public static final int LOGGING_LEVEL_VERBOSE = 2; // 0x2
+  }
+
+  public final class ViewNode extends android.app.assist.AssistStructure.ViewNode {
+    method @Nullable public static android.view.contentcapture.ViewNode readFromParcel(@NonNull android.os.Parcel);
+    method public static void writeToParcel(@NonNull android.os.Parcel, @Nullable android.view.contentcapture.ViewNode, int);
+  }
+
+  public static final class ViewNode.ViewStructureImpl extends android.view.ViewStructure {
+    ctor public ViewNode.ViewStructureImpl(@NonNull android.view.View);
+    ctor public ViewNode.ViewStructureImpl(@NonNull android.view.autofill.AutofillId, long, int);
+    method public int addChildCount(int);
+    method public void asyncCommit();
+    method public android.view.ViewStructure asyncNewChild(int);
+    method public android.view.autofill.AutofillId getAutofillId();
+    method public int getChildCount();
+    method public android.os.Bundle getExtras();
+    method public CharSequence getHint();
+    method public android.view.contentcapture.ViewNode getNode();
+    method public android.graphics.Rect getTempRect();
+    method public CharSequence getText();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method public boolean hasExtras();
+    method public android.view.ViewStructure newChild(int);
+    method public android.view.ViewStructure.HtmlInfo.Builder newHtmlInfoBuilder(String);
+    method public void setAccessibilityFocused(boolean);
+    method public void setActivated(boolean);
+    method public void setAlpha(float);
+    method public void setAssistBlocked(boolean);
+    method public void setAutofillHints(String[]);
+    method public void setAutofillId(android.view.autofill.AutofillId);
+    method public void setAutofillId(android.view.autofill.AutofillId, int);
+    method public void setAutofillOptions(CharSequence[]);
+    method public void setAutofillType(int);
+    method public void setAutofillValue(android.view.autofill.AutofillValue);
+    method public void setCheckable(boolean);
+    method public void setChecked(boolean);
+    method public void setChildCount(int);
+    method public void setClassName(String);
+    method public void setClickable(boolean);
+    method public void setContentDescription(CharSequence);
+    method public void setContextClickable(boolean);
+    method public void setDataIsSensitive(boolean);
+    method public void setDimens(int, int, int, int, int, int);
+    method public void setElevation(float);
+    method public void setEnabled(boolean);
+    method public void setFocusable(boolean);
+    method public void setFocused(boolean);
+    method public void setHint(CharSequence);
+    method public void setHtmlInfo(android.view.ViewStructure.HtmlInfo);
+    method public void setId(int, String, String, String);
+    method public void setInputType(int);
+    method public void setLocaleList(android.os.LocaleList);
+    method public void setLongClickable(boolean);
+    method public void setOpaque(boolean);
+    method public void setSelected(boolean);
+    method public void setText(CharSequence);
+    method public void setText(CharSequence, int, int);
+    method public void setTextLines(int[], int[]);
+    method public void setTextStyle(float, int, int, int);
+    method public void setTransformation(android.graphics.Matrix);
+    method public void setVisibility(int);
+    method public void setWebDomain(String);
+  }
+
+}
+
+package android.view.displayhash {
+
+  public final class DisplayHashManager {
+    method @RequiresPermission("android.permission.READ_FRAME_BUFFER") public void setDisplayHashThrottlingEnabled(boolean);
+  }
+
+}
+
+package android.view.inputmethod {
+
+  public final class InlineSuggestion implements android.os.Parcelable {
+    method @NonNull public static android.view.inputmethod.InlineSuggestion newInlineSuggestion(@NonNull android.view.inputmethod.InlineSuggestionInfo);
+  }
+
+  public final class InlineSuggestionInfo implements android.os.Parcelable {
+    method @NonNull public static android.view.inputmethod.InlineSuggestionInfo newInlineSuggestionInfo(@NonNull android.widget.inline.InlinePresentationSpec, @NonNull String, @Nullable String[], @NonNull String, boolean);
+  }
+
+  public final class InlineSuggestionsResponse implements android.os.Parcelable {
+    method @NonNull public static android.view.inputmethod.InlineSuggestionsResponse newInlineSuggestionsResponse(@NonNull java.util.List<android.view.inputmethod.InlineSuggestion>);
+  }
+
+  public final class InputMethodInfo implements android.os.Parcelable {
+    ctor public InputMethodInfo(@NonNull String, @NonNull String, @NonNull CharSequence, @NonNull String, int);
+  }
+
+  public final class InputMethodManager {
+    method public int getDisplayId();
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodListAsUser(int);
+    method public boolean hasActiveInputConnection(@Nullable android.view.View);
+    method public boolean isInputMethodPickerShown();
+  }
+
+}
+
+package android.view.inspector {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD}) public @interface InspectableProperty {
+    method public abstract int attributeId() default android.content.res.Resources.ID_NULL;
+    method public abstract android.view.inspector.InspectableProperty.EnumEntry[] enumMapping() default {};
+    method public abstract android.view.inspector.InspectableProperty.FlagEntry[] flagMapping() default {};
+    method public abstract boolean hasAttributeId() default true;
+    method public abstract String name() default "";
+    method public abstract android.view.inspector.InspectableProperty.ValueType valueType() default android.view.inspector.InspectableProperty.ValueType.INFERRED;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface InspectableProperty.EnumEntry {
+    method public abstract String name();
+    method public abstract int value();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface InspectableProperty.FlagEntry {
+    method public abstract int mask() default 0;
+    method public abstract String name();
+    method public abstract int target();
+  }
+
+  public enum InspectableProperty.ValueType {
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType COLOR;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType GRAVITY;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType INFERRED;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType INT_ENUM;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType INT_FLAG;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType NONE;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType RESOURCE_ID;
+  }
+
+}
+
+package android.view.textservice {
+
+  public final class SpellCheckerSubtype implements android.os.Parcelable {
+    field public static final int SUBTYPE_ID_NONE = 0; // 0x0
+  }
+
+}
+
+package android.widget {
+
+  public abstract class AbsListView extends android.widget.AdapterView<android.widget.ListAdapter> implements android.widget.Filter.FilterListener android.text.TextWatcher android.view.ViewTreeObserver.OnGlobalLayoutListener android.view.ViewTreeObserver.OnTouchModeChangeListener {
+    method public final boolean shouldDrawSelector();
+  }
+
+  public class CalendarView extends android.widget.FrameLayout {
+    method public boolean getBoundsForDate(long, android.graphics.Rect);
+  }
+
+  public class DatePicker extends android.widget.FrameLayout {
+    method @android.view.inspector.InspectableProperty(name="datePickerMode", enumMapping={@android.view.inspector.InspectableProperty.EnumEntry(value=android.widget.DatePicker.MODE_SPINNER, name="spinner"), @android.view.inspector.InspectableProperty.EnumEntry(value=android.widget.DatePicker.MODE_CALENDAR, name="calendar")}) public int getMode();
+    field public static final int MODE_CALENDAR = 2; // 0x2
+    field public static final int MODE_SPINNER = 1; // 0x1
+  }
+
+  @UiThread public final class Magnifier {
+    method @Nullable public android.graphics.Bitmap getContent();
+    method public static android.graphics.PointF getMagnifierDefaultSize();
+    method @Nullable public android.graphics.Bitmap getOriginalContent();
+    method public void setOnOperationCompleteCallback(android.widget.Magnifier.Callback);
+  }
+
+  public static interface Magnifier.Callback {
+    method public void onOperationComplete();
+  }
+
+  public class NumberPicker extends android.widget.LinearLayout {
+    method public CharSequence getDisplayedValueForCurrentSelection();
+  }
+
+  public class PopupMenu {
+    method public android.widget.ListView getMenuListView();
+  }
+
+  public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener {
+    method public boolean isPopupShowing();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextClock extends android.widget.TextView {
+    method public void disableClockTick();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
+    method public void onActivityResult(int, int, @Nullable android.content.Intent);
+    field public static final int PROCESS_TEXT_REQUEST_CODE = 100; // 0x64
+  }
+
+  public class TimePicker extends android.widget.FrameLayout {
+    method public android.view.View getAmView();
+    method public android.view.View getHourView();
+    method public android.view.View getMinuteView();
+    method @android.view.inspector.InspectableProperty(name="timePickerMode", enumMapping={@android.view.inspector.InspectableProperty.EnumEntry(name="clock", value=android.widget.TimePicker.MODE_CLOCK), @android.view.inspector.InspectableProperty.EnumEntry(name="spinner", value=android.widget.TimePicker.MODE_SPINNER)}) public int getMode();
+    method public android.view.View getPmView();
+    field public static final int MODE_CLOCK = 2; // 0x2
+    field public static final int MODE_SPINNER = 1; // 0x1
+  }
+
+  public class Toolbar extends android.view.ViewGroup {
+    method @Nullable public android.view.View getNavigationView();
+  }
+
+}
+
+package android.widget.inline {
+
+  public class InlineContentView extends android.view.ViewGroup {
+    method public void setChildSurfacePackageUpdater(@Nullable android.widget.inline.InlineContentView.SurfacePackageUpdater);
+  }
+
+  public static interface InlineContentView.SurfacePackageUpdater {
+    method public void getSurfacePackage(@NonNull java.util.function.Consumer<android.view.SurfaceControlViewHost.SurfacePackage>);
+    method public void onSurfacePackageReleased();
+  }
+
+}
+
+package android.window {
+
+  public final class DisplayAreaAppearedInfo implements android.os.Parcelable {
+    ctor public DisplayAreaAppearedInfo(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl);
+    method public int describeContents();
+    method @NonNull public android.window.DisplayAreaInfo getDisplayAreaInfo();
+    method @NonNull public android.view.SurfaceControl getLeash();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.DisplayAreaAppearedInfo> CREATOR;
+  }
+
+  public final class DisplayAreaInfo implements android.os.Parcelable {
+    ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int, int);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.DisplayAreaInfo> CREATOR;
+    field @NonNull public final android.content.res.Configuration configuration;
+    field public final int displayId;
+    field public final int featureId;
+    field @NonNull public final android.window.WindowContainerToken token;
+  }
+
+  public class DisplayAreaOrganizer extends android.window.WindowOrganizer {
+    method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl);
+    method public void onDisplayAreaVanished(@NonNull android.window.DisplayAreaInfo);
+    method @CallSuper @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.window.DisplayAreaAppearedInfo> registerOrganizer(int);
+    field public static final int FEATURE_DEFAULT_TASK_CONTAINER = 1; // 0x1
+    field public static final int FEATURE_ONE_HANDED = 3; // 0x3
+    field public static final int FEATURE_ROOT = 0; // 0x0
+    field public static final int FEATURE_SYSTEM_FIRST = 0; // 0x0
+    field public static final int FEATURE_SYSTEM_LAST = 10000; // 0x2710
+    field public static final int FEATURE_UNDEFINED = -1; // 0xffffffff
+    field public static final int FEATURE_VENDOR_FIRST = 10001; // 0x2711
+    field public static final int FEATURE_WINDOWED_MAGNIFICATION = 4; // 0x4
+    field public static final int FEATURE_WINDOW_TOKENS = 2; // 0x2
+  }
+
+  public final class SplashScreenView extends android.widget.FrameLayout {
+    method @Nullable public android.view.View getBrandingView();
+  }
+
+  public final class TaskAppearedInfo implements android.os.Parcelable {
+    ctor public TaskAppearedInfo(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
+    method public int describeContents();
+    method @NonNull public android.view.SurfaceControl getLeash();
+    method @NonNull public android.app.ActivityManager.RunningTaskInfo getTaskInfo();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskAppearedInfo> CREATOR;
+  }
+
+  public final class TaskFragmentCreationParams implements android.os.Parcelable {
+    method @NonNull public android.os.IBinder getFragmentToken();
+    method @NonNull public android.graphics.Rect getInitialBounds();
+    method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizer();
+    method @NonNull public android.os.IBinder getOwnerToken();
+    method public int getWindowingMode();
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentCreationParams> CREATOR;
+  }
+
+  public static final class TaskFragmentCreationParams.Builder {
+    ctor public TaskFragmentCreationParams.Builder(@NonNull android.window.TaskFragmentOrganizerToken, @NonNull android.os.IBinder, @NonNull android.os.IBinder);
+    method @NonNull public android.window.TaskFragmentCreationParams build();
+    method @NonNull public android.window.TaskFragmentCreationParams.Builder setInitialBounds(@NonNull android.graphics.Rect);
+    method @NonNull public android.window.TaskFragmentCreationParams.Builder setWindowingMode(int);
+  }
+
+  public final class TaskFragmentInfo implements android.os.Parcelable {
+    method public boolean equalsForTaskFragmentOrganizer(@Nullable android.window.TaskFragmentInfo);
+    method @NonNull public java.util.List<android.os.IBinder> getActivities();
+    method @NonNull public android.content.res.Configuration getConfiguration();
+    method @NonNull public android.os.IBinder getFragmentToken();
+    method @NonNull public android.graphics.Point getPositionInParent();
+    method public int getRunningActivityCount();
+    method @NonNull public android.window.WindowContainerToken getToken();
+    method public int getWindowingMode();
+    method public boolean hasRunningActivity();
+    method public boolean isEmpty();
+    method public boolean isTaskClearedForReuse();
+    method public boolean isVisible();
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentInfo> CREATOR;
+  }
+
+  public class TaskFragmentOrganizer extends android.window.WindowOrganizer {
+    ctor public TaskFragmentOrganizer(@NonNull java.util.concurrent.Executor);
+    method @NonNull public java.util.concurrent.Executor getExecutor();
+    method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizerToken();
+    method public void onTaskFragmentAppeared(@NonNull android.window.TaskFragmentInfo);
+    method public void onTaskFragmentError(@NonNull android.os.IBinder, @NonNull Throwable);
+    method public void onTaskFragmentInfoChanged(@NonNull android.window.TaskFragmentInfo);
+    method public void onTaskFragmentParentInfoChanged(@NonNull android.os.IBinder, @NonNull android.content.res.Configuration);
+    method public void onTaskFragmentVanished(@NonNull android.window.TaskFragmentInfo);
+    method @CallSuper public void registerOrganizer();
+    method @CallSuper public void unregisterOrganizer();
+  }
+
+  public final class TaskFragmentOrganizerToken implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentOrganizerToken> CREATOR;
+  }
+
+  public class TaskOrganizer extends android.window.WindowOrganizer {
+    ctor public TaskOrganizer();
+    method @BinderThread public void copySplashScreenView(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void createRootTask(int, int, @Nullable android.os.IBinder);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean deleteRootTask(@NonNull android.window.WindowContainerToken);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public android.window.WindowContainerToken getImeTarget(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]);
+    method @BinderThread public void onAppSplashScreenViewRemoved(int);
+    method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo);
+    method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
+    method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
+    method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
+    method @CallSuper @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.window.TaskAppearedInfo> registerOrganizer();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void setInterceptBackPressedOnTaskRoot(@NonNull android.window.WindowContainerToken, boolean);
+    method @CallSuper @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void unregisterOrganizer();
+  }
+
+  public final class WindowContainerToken implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerToken> CREATOR;
+  }
+
+  public final class WindowContainerTransaction implements android.os.Parcelable {
+    ctor public WindowContainerTransaction();
+    method @NonNull public android.window.WindowContainerTransaction createTaskFragment(@NonNull android.window.TaskFragmentCreationParams);
+    method @NonNull public android.window.WindowContainerTransaction deleteTaskFragment(@NonNull android.window.WindowContainerToken);
+    method public int describeContents();
+    method @NonNull public android.window.WindowContainerTransaction reorder(@NonNull android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction reparent(@NonNull android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction reparentActivityToTaskFragment(@NonNull android.os.IBinder, @NonNull android.os.IBinder);
+    method @NonNull public android.window.WindowContainerTransaction reparentChildren(@NonNull android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken);
+    method @NonNull public android.window.WindowContainerTransaction reparentTasks(@Nullable android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, @Nullable int[], @Nullable int[], boolean);
+    method @NonNull public android.window.WindowContainerTransaction scheduleFinishEnterPip(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
+    method @NonNull public android.window.WindowContainerTransaction setActivityWindowingMode(@NonNull android.window.WindowContainerToken, int);
+    method @NonNull public android.window.WindowContainerTransaction setAdjacentRoots(@NonNull android.window.WindowContainerToken, @NonNull android.window.WindowContainerToken);
+    method @NonNull public android.window.WindowContainerTransaction setAdjacentTaskFragments(@NonNull android.os.IBinder, @Nullable android.os.IBinder, @Nullable android.window.WindowContainerTransaction.TaskFragmentAdjacentParams);
+    method @NonNull public android.window.WindowContainerTransaction setAppBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
+    method @NonNull public android.window.WindowContainerTransaction setBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
+    method @NonNull public android.window.WindowContainerTransaction setBoundsChangeTransaction(@NonNull android.window.WindowContainerToken, @NonNull android.view.SurfaceControl.Transaction);
+    method @NonNull public android.window.WindowContainerTransaction setErrorCallbackToken(@NonNull android.os.IBinder);
+    method @NonNull public android.window.WindowContainerTransaction setFocusable(@NonNull android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction setHidden(@NonNull android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction setLaunchRoot(@NonNull android.window.WindowContainerToken, @Nullable int[], @Nullable int[]);
+    method @NonNull public android.window.WindowContainerTransaction setScreenSizeDp(@NonNull android.window.WindowContainerToken, int, int);
+    method @NonNull public android.window.WindowContainerTransaction setSmallestScreenWidthDp(@NonNull android.window.WindowContainerToken, int);
+    method @NonNull public android.window.WindowContainerTransaction setWindowingMode(@NonNull android.window.WindowContainerToken, int);
+    method @NonNull public android.window.WindowContainerTransaction startActivityInTaskFragment(@NonNull android.os.IBinder, @NonNull android.os.IBinder, @NonNull android.content.Intent, @Nullable android.os.Bundle);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerTransaction> CREATOR;
+  }
+
+  public static class WindowContainerTransaction.TaskFragmentAdjacentParams {
+    ctor public WindowContainerTransaction.TaskFragmentAdjacentParams();
+    ctor public WindowContainerTransaction.TaskFragmentAdjacentParams(@NonNull android.os.Bundle);
+    method public void setShouldDelayPrimaryLastActivityRemoval(boolean);
+    method public void setShouldDelaySecondaryLastActivityRemoval(boolean);
+    method public boolean shouldDelayPrimaryLastActivityRemoval();
+    method public boolean shouldDelaySecondaryLastActivityRemoval();
+  }
+
+  public abstract class WindowContainerTransactionCallback {
+    ctor public WindowContainerTransactionCallback();
+    method public abstract void onTransactionReady(int, @NonNull android.view.SurfaceControl.Transaction);
+  }
+
+  public class WindowOrganizer {
+    ctor public WindowOrganizer();
+    method @RequiresPermission(value=android.Manifest.permission.MANAGE_ACTIVITY_TASKS, conditional=true) public int applySyncTransaction(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.WindowContainerTransactionCallback);
+    method @RequiresPermission(value=android.Manifest.permission.MANAGE_ACTIVITY_TASKS, conditional=true) public void applyTransaction(@NonNull android.window.WindowContainerTransaction);
+  }
+
+  @UiContext public abstract class WindowProviderService extends android.app.Service {
+    ctor public WindowProviderService();
+    method public final void attachToWindowToken(@NonNull android.os.IBinder);
+    method @NonNull public int getInitialDisplayId();
+    method @CallSuper @Nullable public android.os.Bundle getWindowContextOptions();
+    method public abstract int getWindowType();
+  }
+
+}
+
diff --git a/32/test/api/android.test.base-removed.txt b/32/test/api/android.test.base-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/android.test.base-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/android.test.base.txt b/32/test/api/android.test.base.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/android.test.base.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/android.test.mock-removed.txt b/32/test/api/android.test.mock-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/android.test.mock-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/android.test.mock.txt b/32/test/api/android.test.mock.txt
new file mode 100644
index 0000000..531dd7c
--- /dev/null
+++ b/32/test/api/android.test.mock.txt
@@ -0,0 +1,17 @@
+// Signature format: 2.0
+package android.test.mock {
+
+  public class MockContext extends android.content.Context {
+    method public int getDisplayId();
+  }
+
+  @Deprecated public class MockPackageManager extends android.content.pm.PackageManager {
+    method public int getInstallReason(String, android.os.UserHandle);
+    method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int);
+    method public String[] getNamesForUids(int[]);
+    method @NonNull public String getServicesSystemSharedLibraryPackageName();
+    method @NonNull public String getSharedSystemSharedLibraryPackageName();
+  }
+
+}
+
diff --git a/32/test/api/android.test.runner-removed.txt b/32/test/api/android.test.runner-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/android.test.runner-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/android.test.runner.txt b/32/test/api/android.test.runner.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/android.test.runner.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/android.txt b/32/test/api/android.txt
new file mode 100644
index 0000000..a8e06fc
--- /dev/null
+++ b/32/test/api/android.txt
@@ -0,0 +1,3338 @@
+// Signature format: 2.0
+package android {
+
+  public static final class Manifest.permission {
+    field public static final String ACCESS_NOTIFICATIONS = "android.permission.ACCESS_NOTIFICATIONS";
+    field public static final String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING";
+    field public static final String APPROVE_INCIDENT_REPORTS = "android.permission.APPROVE_INCIDENT_REPORTS";
+    field public static final String BACKGROUND_CAMERA = "android.permission.BACKGROUND_CAMERA";
+    field public static final String BIND_CELL_BROADCAST_SERVICE = "android.permission.BIND_CELL_BROADCAST_SERVICE";
+    field public static final String BRIGHTNESS_SLIDER_USAGE = "android.permission.BRIGHTNESS_SLIDER_USAGE";
+    field public static final String BROADCAST_CLOSE_SYSTEM_DIALOGS = "android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS";
+    field public static final String CHANGE_APP_IDLE_STATE = "android.permission.CHANGE_APP_IDLE_STATE";
+    field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA";
+    field public static final String CLEAR_FREEZE_PERIOD = "android.permission.CLEAR_FREEZE_PERIOD";
+    field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
+    field public static final String CONTROL_DEVICE_LIGHTS = "android.permission.CONTROL_DEVICE_LIGHTS";
+    field public static final String CONTROL_DEVICE_STATE = "android.permission.CONTROL_DEVICE_STATE";
+    field public static final String FORCE_DEVICE_POLICY_MANAGER_LOGS = "android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS";
+    field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES";
+    field public static final String INSTALL_TEST_ONLY_PACKAGE = "android.permission.INSTALL_TEST_ONLY_PACKAGE";
+    field public static final String KEEP_UNINSTALLED_PACKAGES = "android.permission.KEEP_UNINSTALLED_PACKAGES";
+    field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
+    field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
+    field public static final String MANAGE_CRATES = "android.permission.MANAGE_CRATES";
+    field public static final String MANAGE_NOTIFICATION_LISTENERS = "android.permission.MANAGE_NOTIFICATION_LISTENERS";
+    field public static final String MANAGE_ROLLBACKS = "android.permission.MANAGE_ROLLBACKS";
+    field public static final String MANAGE_TOAST_RATE_LIMITING = "android.permission.MANAGE_TOAST_RATE_LIMITING";
+    field public static final String MODIFY_REFRESH_RATE_SWITCHING_TYPE = "android.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE";
+    field public static final String NETWORK_SETTINGS = "android.permission.NETWORK_SETTINGS";
+    field public static final String NETWORK_STACK = "android.permission.NETWORK_STACK";
+    field public static final String OVERRIDE_DISPLAY_MODE_REQUESTS = "android.permission.OVERRIDE_DISPLAY_MODE_REQUESTS";
+    field public static final String QUERY_AUDIO_STATE = "android.permission.QUERY_AUDIO_STATE";
+    field public static final String READ_CELL_BROADCASTS = "android.permission.READ_CELL_BROADCASTS";
+    field public static final String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
+    field public static final String RECORD_BACKGROUND_AUDIO = "android.permission.RECORD_BACKGROUND_AUDIO";
+    field public static final String REMOVE_TASKS = "android.permission.REMOVE_TASKS";
+    field public static final String RESET_APP_ERRORS = "android.permission.RESET_APP_ERRORS";
+    field public static final String SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS = "android.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS";
+    field public static final String START_TASKS_FROM_RECENTS = "android.permission.START_TASKS_FROM_RECENTS";
+    field public static final String SUSPEND_APPS = "android.permission.SUSPEND_APPS";
+    field public static final String TEST_BIOMETRIC = "android.permission.TEST_BIOMETRIC";
+    field public static final String TEST_MANAGE_ROLLBACKS = "android.permission.TEST_MANAGE_ROLLBACKS";
+    field public static final String UPGRADE_RUNTIME_PERMISSIONS = "android.permission.UPGRADE_RUNTIME_PERMISSIONS";
+    field public static final String WRITE_DEVICE_CONFIG = "android.permission.WRITE_DEVICE_CONFIG";
+    field @Deprecated public static final String WRITE_MEDIA_STORAGE = "android.permission.WRITE_MEDIA_STORAGE";
+    field public static final String WRITE_OBB = "android.permission.WRITE_OBB";
+  }
+
+  public static final class Manifest.permission_group {
+    field public static final String UNDEFINED = "android.permission-group.UNDEFINED";
+  }
+
+  public static final class R.attr {
+    field public static final int requestForegroundServiceExemption = 16844362; // 0x101064a
+  }
+
+  public static final class R.bool {
+    field public static final int config_assistantOnTopOfDream = 17891333; // 0x1110005
+    field public static final int config_perDisplayFocusEnabled = 17891332; // 0x1110004
+    field public static final int config_remoteInsetsControllerControlsSystemBars = 17891334; // 0x1110006
+  }
+
+  public static final class R.string {
+    field public static final int config_defaultAssistant = 17039393; // 0x1040021
+    field public static final int config_defaultDialer = 17039395; // 0x1040023
+    field public static final int config_systemAutomotiveCluster = 17039400; // 0x1040028
+    field public static final int config_systemAutomotiveProjection = 17039401; // 0x1040029
+    field public static final int config_systemGallery = 17039399; // 0x1040027
+  }
+
+}
+
+package android.accessibilityservice {
+
+  public final class AccessibilityGestureEvent implements android.os.Parcelable {
+    ctor public AccessibilityGestureEvent(int, int);
+  }
+
+  public abstract class AccessibilityService extends android.app.Service {
+    field public static final int ACCESSIBILITY_TAKE_SCREENSHOT_REQUEST_INTERVAL_TIMES_MS = 333; // 0x14d
+  }
+
+  public class AccessibilityServiceInfo implements android.os.Parcelable {
+    method @NonNull public android.content.ComponentName getComponentName();
+  }
+
+}
+
+package android.animation {
+
+  public class ValueAnimator extends android.animation.Animator {
+    method public static float getDurationScale();
+    method public static void setDurationScale(float);
+  }
+
+}
+
+package android.app {
+
+  @UiContext public class Activity extends android.view.ContextThemeWrapper implements android.content.ComponentCallbacks2 android.view.KeyEvent.Callback android.view.LayoutInflater.Factory2 android.view.View.OnCreateContextMenuListener android.view.Window.Callback {
+    method public void onMovedToDisplay(int, android.content.res.Configuration);
+  }
+
+  public class ActivityManager {
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener);
+    method public void alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName);
+    method public long getTotalRam();
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidProcessCapabilities(int);
+    method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public int getUidProcessState(int);
+    method public void holdLock(android.os.IBinder, int);
+    method public static boolean isHighEndGfx();
+    method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener);
+    method @RequiresPermission(android.Manifest.permission.RESET_APP_ERRORS) public void resetAppErrors();
+    method public static void resumeAppSwitches() throws android.os.RemoteException;
+    method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public void scheduleApplicationInfoChanged(java.util.List<java.lang.String>, int);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS}) public void setStopUserOnSwitch(int);
+    method @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public boolean stopUser(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.CHANGE_CONFIGURATION) public boolean updateMccMncConfiguration(@NonNull String, @NonNull String);
+    method @RequiresPermission(android.Manifest.permission.DUMP) public void waitForBroadcastIdle();
+    field public static final long LOCK_DOWN_CLOSE_SYSTEM_DIALOGS = 174664365L; // 0xa692aadL
+    field public static final int PROCESS_CAPABILITY_ALL = 15; // 0xf
+    field public static final int PROCESS_CAPABILITY_ALL_EXPLICIT = 1; // 0x1
+    field public static final int PROCESS_CAPABILITY_ALL_IMPLICIT = 6; // 0x6
+    field public static final int PROCESS_CAPABILITY_FOREGROUND_CAMERA = 2; // 0x2
+    field public static final int PROCESS_CAPABILITY_FOREGROUND_LOCATION = 1; // 0x1
+    field public static final int PROCESS_CAPABILITY_FOREGROUND_MICROPHONE = 4; // 0x4
+    field public static final int PROCESS_CAPABILITY_NETWORK = 8; // 0x8
+    field public static final int PROCESS_CAPABILITY_NONE = 0; // 0x0
+    field public static final int PROCESS_STATE_FOREGROUND_SERVICE = 4; // 0x4
+    field public static final int PROCESS_STATE_TOP = 2; // 0x2
+    field public static final int STOP_USER_ON_SWITCH_DEFAULT = -1; // 0xffffffff
+    field public static final int STOP_USER_ON_SWITCH_FALSE = 0; // 0x0
+    field public static final int STOP_USER_ON_SWITCH_TRUE = 1; // 0x1
+  }
+
+  public static class ActivityManager.RunningAppProcessInfo implements android.os.Parcelable {
+    field public static final int IMPORTANCE_CANT_SAVE_STATE_PRE_26 = 170; // 0xaa
+  }
+
+  public static class ActivityManager.TaskDescription implements android.os.Parcelable {
+    method public String getIconFilename();
+    method public int getIconResource();
+    method @Nullable public String getIconResourcePackage();
+  }
+
+  public class ActivityOptions {
+    method @NonNull public static android.app.ActivityOptions makeCustomAnimation(@NonNull android.content.Context, int, int, @Nullable android.os.Handler, @Nullable android.app.ActivityOptions.OnAnimationStartedListener, @Nullable android.app.ActivityOptions.OnAnimationFinishedListener);
+    method @NonNull @RequiresPermission(android.Manifest.permission.START_TASKS_FROM_RECENTS) public static android.app.ActivityOptions makeCustomTaskAnimation(@NonNull android.content.Context, int, int, @Nullable android.os.Handler, @Nullable android.app.ActivityOptions.OnAnimationStartedListener, @Nullable android.app.ActivityOptions.OnAnimationFinishedListener);
+    method public static void setExitTransitionTimeout(long);
+    method public void setLaunchActivityType(int);
+    method public void setLaunchWindowingMode(int);
+    method public void setLaunchedFromBubble(boolean);
+    method public void setTaskAlwaysOnTop(boolean);
+    method public void setTaskOverlay(boolean, boolean);
+  }
+
+  public static interface ActivityOptions.OnAnimationFinishedListener {
+    method public void onAnimationFinished();
+  }
+
+  public static interface ActivityOptions.OnAnimationStartedListener {
+    method public void onAnimationStarted();
+  }
+
+  public class ActivityTaskManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void clearLaunchParamsForPackages(java.util.List<java.lang.String>);
+    method public static boolean currentUiModeSupportsErrorDialogs(@NonNull android.content.Context);
+    method public static int getMaxNumPictureInPictureActions(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void moveTaskToRootTask(int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksInWindowingModes(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void removeRootTasksWithActivityTypes(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean removeTask(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void resizeTask(int, android.graphics.Rect);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void startSystemLockTaskMode(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void stopSystemLockTaskMode();
+    method public static boolean supportsMultiWindow(android.content.Context);
+    method public static boolean supportsSplitScreenMultiWindow(android.content.Context);
+    field public static final int DEFAULT_MINIMAL_SPLIT_SCREEN_DISPLAY_SIZE_DP = 440; // 0x1b8
+    field public static final int INVALID_STACK_ID = -1; // 0xffffffff
+  }
+
+  public class AlarmManager {
+    method public boolean hasScheduleExactAlarm(@NonNull String, int);
+  }
+
+  public class AppDetailsActivity extends android.app.Activity {
+    ctor public AppDetailsActivity();
+  }
+
+  public class AppOpsManager {
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void addHistoricalOps(@NonNull android.app.AppOpsManager.HistoricalOps);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void clearHistory();
+    method public static void collectNotedOpSync(@NonNull android.app.SyncNotedAppOp);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void getHistoricalOpsFromDiskRaw(@NonNull android.app.AppOpsManager.HistoricalOpsRequest, @Nullable java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.app.AppOpsManager.HistoricalOps>);
+    method public static int getNumOps();
+    method public boolean isOperationActive(int, int, String);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void offsetHistory(long);
+    method public static String opToPermission(int);
+    method public static int permissionToOpCode(String);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void rebootHistory(long);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void reloadNonHistoricalState();
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void resetHistoryParameters();
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void resetPackageOpsNoHistory(@NonNull String);
+    method @RequiresPermission("android.permission.MANAGE_APPOPS") public void setHistoryParameters(int, long, int);
+    method @RequiresPermission("android.permission.MANAGE_APP_OPS_MODES") public void setMode(int, int, String, int);
+    method public static int strOpToOp(@NonNull String);
+    field public static final int ATTRIBUTION_CHAIN_ID_NONE = -1; // 0xffffffff
+    field public static final int ATTRIBUTION_FLAGS_NONE = 0; // 0x0
+    field public static final int ATTRIBUTION_FLAG_ACCESSOR = 1; // 0x1
+    field public static final int ATTRIBUTION_FLAG_INTERMEDIARY = 2; // 0x2
+    field public static final int ATTRIBUTION_FLAG_RECEIVER = 4; // 0x4
+    field public static final int HISTORICAL_MODE_DISABLED = 0; // 0x0
+    field public static final int HISTORICAL_MODE_ENABLED_ACTIVE = 1; // 0x1
+    field public static final int HISTORICAL_MODE_ENABLED_PASSIVE = 2; // 0x2
+    field public static final int HISTORY_FLAGS_ALL = 3; // 0x3
+    field public static final int HISTORY_FLAG_AGGREGATE = 1; // 0x1
+    field public static final int HISTORY_FLAG_DISCRETE = 2; // 0x2
+    field public static final String KEY_BG_STATE_SETTLE_TIME = "bg_state_settle_time";
+    field public static final String KEY_FG_SERVICE_STATE_SETTLE_TIME = "fg_service_state_settle_time";
+    field public static final String KEY_TOP_STATE_SETTLE_TIME = "top_state_settle_time";
+    field public static final String OPSTR_ACTIVITY_RECOGNITION = "android:activity_recognition";
+    field public static final String OPSTR_ACTIVITY_RECOGNITION_SOURCE = "android:activity_recognition_source";
+    field public static final String OPSTR_MANAGE_ONGOING_CALLS = "android:manage_ongoing_calls";
+    field public static final String OPSTR_RECORD_AUDIO_HOTWORD = "android:record_audio_hotword";
+    field public static final String OPSTR_USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER = "android:use_icc_auth_with_device_identifier";
+    field public static final int OP_COARSE_LOCATION = 0; // 0x0
+    field public static final int OP_RECORD_AUDIO = 27; // 0x1b
+    field public static final int OP_START_FOREGROUND = 76; // 0x4c
+    field public static final int OP_SYSTEM_ALERT_WINDOW = 24; // 0x18
+    field public static final long SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE = 151105954L; // 0x901b1a2L
+  }
+
+  public static final class AppOpsManager.HistoricalOps implements android.os.Parcelable {
+    ctor public AppOpsManager.HistoricalOps(long, long);
+    method public void addDiscreteAccess(int, int, @NonNull String, @Nullable String, int, int, long, long);
+    method public void increaseAccessCount(int, int, @NonNull String, @Nullable String, int, int, long);
+    method public void increaseAccessDuration(int, int, @NonNull String, @Nullable String, int, int, long);
+    method public void increaseRejectCount(int, int, @NonNull String, @Nullable String, int, int, long);
+    method public void offsetBeginAndEndTime(long);
+  }
+
+  public static interface AppOpsManager.OnOpActiveChangedListener {
+    method public default void onOpActiveChanged(@NonNull String, int, @NonNull String, @Nullable String, boolean, int, int);
+  }
+
+  public class BroadcastOptions {
+    ctor public BroadcastOptions(@NonNull android.os.Bundle);
+    method public int getMaxManifestReceiverApiLevel();
+    method public long getTemporaryAppAllowlistDuration();
+    method @Nullable public String getTemporaryAppAllowlistReason();
+    method public int getTemporaryAppAllowlistReasonCode();
+    method public int getTemporaryAppAllowlistType();
+    method public void setMaxManifestReceiverApiLevel(int);
+  }
+
+  public class DownloadManager {
+    field public static final String COLUMN_MEDIASTORE_URI = "mediastore_uri";
+  }
+
+  public class DreamManager {
+    method @RequiresPermission(android.Manifest.permission.READ_DREAM_STATE) public boolean isDreaming();
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void setActiveDream(@NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void startDream(@NonNull android.content.ComponentName);
+    method @RequiresPermission(android.Manifest.permission.WRITE_DREAM_STATE) public void stopDream();
+  }
+
+  public final class GameManager {
+    method @RequiresPermission("android.permission.MANAGE_GAME_MODE") public void setGameMode(@NonNull String, int);
+  }
+
+  public abstract class HomeVisibilityListener {
+    ctor public HomeVisibilityListener();
+    method public abstract void onHomeVisibilityChanged(boolean);
+  }
+
+  public class KeyguardManager {
+    method @RequiresPermission(anyOf={android.Manifest.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS, "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"}) public boolean checkLock(int, @Nullable byte[]);
+    method @RequiresPermission(anyOf={android.Manifest.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS, "android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"}) public boolean setLock(int, @Nullable byte[], int, @Nullable byte[]);
+  }
+
+  public class Notification implements android.os.Parcelable {
+    method public boolean shouldShowForegroundImmediately();
+  }
+
+  public final class NotificationChannel implements android.os.Parcelable {
+    method public int getOriginalImportance();
+    method public boolean isBlockable();
+    method public boolean isImportanceLockedByCriticalDeviceFunction();
+    method public boolean isImportanceLockedByOEM();
+    method public void lockFields(int);
+    method public void setDeleted(boolean);
+    method public void setDeletedTimeMs(long);
+    method public void setDemoted(boolean);
+    method public void setFgServiceShown(boolean);
+    method public void setImportanceLockedByCriticalDeviceFunction(boolean);
+    method public void setImportanceLockedByOEM(boolean);
+    method public void setImportantConversation(boolean);
+    method public void setOriginalImportance(int);
+  }
+
+  public final class NotificationChannelGroup implements android.os.Parcelable {
+    method public int getUserLockedFields();
+    method public void lockFields(int);
+    method public void setBlocked(boolean);
+  }
+
+  public class NotificationManager {
+    method public void allowAssistantAdjustment(String);
+    method public void disallowAssistantAdjustment(String);
+    method public android.content.ComponentName getEffectsSuppressor();
+    method public boolean isNotificationPolicyAccessGrantedForPackage(@NonNull String);
+    method public boolean matchesCallFilter(android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public void setNotificationListenerAccessGranted(@NonNull android.content.ComponentName, boolean, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_TOAST_RATE_LIMITING) public void setToastRateLimitingEnabled(boolean);
+    method public void updateNotificationChannel(@NonNull String, int, @NonNull android.app.NotificationChannel);
+  }
+
+  public final class PendingIntent implements android.os.Parcelable {
+    method @RequiresPermission("android.permission.GET_INTENT_SENDER_INTENT") public boolean intentFilterEquals(@Nullable android.app.PendingIntent);
+    method @NonNull @RequiresPermission("android.permission.GET_INTENT_SENDER_INTENT") public java.util.List<android.content.pm.ResolveInfo> queryIntentComponents(int);
+    field @Deprecated public static final int FLAG_MUTABLE_UNAUDITED = 33554432; // 0x2000000
+  }
+
+  public final class PictureInPictureParams implements android.os.Parcelable {
+    method public java.util.List<android.app.RemoteAction> getActions();
+    method public float getAspectRatio();
+    method public android.graphics.Rect getSourceRectHint();
+    method public boolean isSeamlessResizeEnabled();
+  }
+
+  public final class PictureInPictureUiState implements android.os.Parcelable {
+    ctor public PictureInPictureUiState(boolean);
+  }
+
+  public class StatusBarManager {
+    method public void clickNotification(@Nullable String, int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void collapsePanels();
+    method public void expandNotificationsPanel();
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void handleSystemKey(int);
+    method public void sendNotificationFeedback(@Nullable String, @Nullable android.os.Bundle);
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setExpansionDisabledForSimNetworkLock(boolean);
+    method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void togglePanel();
+  }
+
+  public final class SyncNotedAppOp implements android.os.Parcelable {
+    ctor public SyncNotedAppOp(int, @IntRange(from=0L) int, @Nullable String, @NonNull String);
+  }
+
+  public class TaskInfo {
+    method public boolean containsLaunchCookie(@NonNull android.os.IBinder);
+    method @NonNull public android.content.res.Configuration getConfiguration();
+    method public int getParentTaskId();
+    method @Nullable public android.app.PictureInPictureParams getPictureInPictureParams();
+    method @NonNull public android.window.WindowContainerToken getToken();
+    method public boolean hasParentTask();
+  }
+
+  public class TimePickerDialog extends android.app.AlertDialog implements android.content.DialogInterface.OnClickListener android.widget.TimePicker.OnTimeChangedListener {
+    method public android.widget.TimePicker getTimePicker();
+  }
+
+  public final class UiAutomation {
+    method public void destroy();
+    method @NonNull public android.os.ParcelFileDescriptor[] executeShellCommandRwe(@NonNull String);
+    method @NonNull public java.util.Set<java.lang.String> getAdoptedShellPermissions();
+    method @Deprecated public boolean grantRuntimePermission(String, String, android.os.UserHandle);
+    method public boolean injectInputEvent(@NonNull android.view.InputEvent, boolean, boolean);
+    method @Deprecated public boolean revokeRuntimePermission(String, String, android.os.UserHandle);
+    method public void syncInputTransactions();
+    method public void syncInputTransactions(boolean);
+    method @Nullable public android.graphics.Bitmap takeScreenshot(@NonNull android.view.Window);
+    field @NonNull public static final java.util.Set<java.lang.String> ALL_PERMISSIONS;
+  }
+
+  public class UiModeManager {
+    method public boolean isNightModeLocked();
+    method public boolean isUiModeLocked();
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean releaseProjection(int);
+    method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean requestProjection(int);
+    field public static final int PROJECTION_TYPE_ALL = -1; // 0xffffffff
+    field public static final int PROJECTION_TYPE_AUTOMOTIVE = 1; // 0x1
+    field public static final int PROJECTION_TYPE_NONE = 0; // 0x0
+  }
+
+  public class WallpaperManager {
+    method @Nullable public android.graphics.Bitmap getBitmap();
+    method public boolean shouldEnableWideColorGamut();
+    method @RequiresPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE) public boolean wallpaperSupportsWcg(int);
+  }
+
+  public class WindowConfiguration implements java.lang.Comparable<android.app.WindowConfiguration> android.os.Parcelable {
+    ctor public WindowConfiguration();
+    method public int compareTo(android.app.WindowConfiguration);
+    method public int describeContents();
+    method public int getActivityType();
+    method public android.graphics.Rect getAppBounds();
+    method public android.graphics.Rect getBounds();
+    method @NonNull public android.graphics.Rect getMaxBounds();
+    method public int getRotation();
+    method public int getWindowingMode();
+    method public void setActivityType(int);
+    method public void setAppBounds(android.graphics.Rect);
+    method public void setBounds(android.graphics.Rect);
+    method public void setMaxBounds(@Nullable android.graphics.Rect);
+    method public void setRotation(int);
+    method public void setTo(android.app.WindowConfiguration);
+    method public void setWindowingMode(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACTIVITY_TYPE_ASSISTANT = 4; // 0x4
+    field public static final int ACTIVITY_TYPE_DREAM = 5; // 0x5
+    field public static final int ACTIVITY_TYPE_HOME = 2; // 0x2
+    field public static final int ACTIVITY_TYPE_RECENTS = 3; // 0x3
+    field public static final int ACTIVITY_TYPE_STANDARD = 1; // 0x1
+    field public static final int ACTIVITY_TYPE_UNDEFINED = 0; // 0x0
+    field public static final int ROTATION_UNDEFINED = -1; // 0xffffffff
+    field public static final int WINDOWING_MODE_FREEFORM = 5; // 0x5
+    field public static final int WINDOWING_MODE_FULLSCREEN = 1; // 0x1
+    field public static final int WINDOWING_MODE_MULTI_WINDOW = 6; // 0x6
+    field public static final int WINDOWING_MODE_PINNED = 2; // 0x2
+    field public static final int WINDOWING_MODE_SPLIT_SCREEN_PRIMARY = 3; // 0x3
+    field public static final int WINDOWING_MODE_SPLIT_SCREEN_SECONDARY = 4; // 0x4
+    field public static final int WINDOWING_MODE_UNDEFINED = 0; // 0x0
+  }
+
+}
+
+package android.app.admin {
+
+  public class DevicePolicyManager {
+    method public int checkProvisioningPreCondition(@Nullable String, @NonNull String);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void clearOrganizationId();
+    method @RequiresPermission(android.Manifest.permission.CLEAR_FREEZE_PERIOD) public void clearSystemUpdatePolicyFreezePeriodRecord();
+    method @Nullable public android.os.UserHandle createAndProvisionManagedProfile(@NonNull android.app.admin.ManagedProfileProvisioningParams) throws android.app.admin.ProvisioningException;
+    method @RequiresPermission(android.Manifest.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS) public long forceNetworkLogs();
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void forceRemoveActiveAdmin(@NonNull android.content.ComponentName, int);
+    method @RequiresPermission(android.Manifest.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS) public long forceSecurityLogs();
+    method public void forceUpdateUserSetupComplete(int);
+    method @NonNull public java.util.Set<java.lang.String> getDefaultCrossProfilePackages();
+    method @NonNull public java.util.Set<java.lang.String> getDisallowedSystemApps(@NonNull android.content.ComponentName, int, @NonNull String);
+    method public long getLastBugReportRequestTime();
+    method public long getLastNetworkLogRetrievalTime();
+    method public long getLastSecurityLogRetrievalTime();
+    method public java.util.List<java.lang.String> getOwnerInstalledCaCerts(@NonNull android.os.UserHandle);
+    method @NonNull @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public java.util.Set<java.lang.String> getPolicyExemptApps();
+    method public boolean isCurrentInputMethodSetByOwner();
+    method public boolean isFactoryResetProtectionPolicySupported();
+    method @RequiresPermission(anyOf={"android.permission.MARK_DEVICE_ORGANIZATION_OWNED", "android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"}, conditional=true) public void markProfileOwnerOnOrganizationOwnedDevice(@NonNull android.content.ComponentName);
+    method @NonNull public static String operationSafetyReasonToString(int);
+    method @NonNull public static String operationToString(int);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void provisionFullyManagedDevice(@NonNull android.app.admin.FullyManagedDeviceProvisioningParams) throws android.app.admin.ProvisioningException;
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public void resetDefaultCrossProfileIntentFilters(int);
+    method @RequiresPermission(allOf={"android.permission.MANAGE_DEVICE_ADMINS", android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public void setActiveAdmin(@NonNull android.content.ComponentName, boolean, int);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public boolean setDeviceOwner(@NonNull android.content.ComponentName, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS") public boolean setDeviceOwnerOnly(@NonNull android.content.ComponentName, @Nullable String, int);
+    method @RequiresPermission("android.permission.MANAGE_DEVICE_ADMINS") public void setNextOperationSafety(int, int);
+    field public static final String ACTION_DATA_SHARING_RESTRICTION_APPLIED = "android.app.action.DATA_SHARING_RESTRICTION_APPLIED";
+    field public static final String ACTION_DEVICE_POLICY_CONSTANTS_CHANGED = "android.app.action.DEVICE_POLICY_CONSTANTS_CHANGED";
+    field public static final int CODE_ACCOUNTS_NOT_EMPTY = 6; // 0x6
+    field public static final int CODE_CANNOT_ADD_MANAGED_PROFILE = 11; // 0xb
+    field public static final int CODE_DEVICE_ADMIN_NOT_SUPPORTED = 13; // 0xd
+    field public static final int CODE_HAS_DEVICE_OWNER = 1; // 0x1
+    field public static final int CODE_HAS_PAIRED = 8; // 0x8
+    field public static final int CODE_MANAGED_USERS_NOT_SUPPORTED = 9; // 0x9
+    field public static final int CODE_NONSYSTEM_USER_EXISTS = 5; // 0x5
+    field public static final int CODE_NOT_SYSTEM_USER = 7; // 0x7
+    field @Deprecated public static final int CODE_NOT_SYSTEM_USER_SPLIT = 12; // 0xc
+    field public static final int CODE_OK = 0; // 0x0
+    field public static final int CODE_PROVISIONING_NOT_ALLOWED_FOR_NON_DEVELOPER_USERS = 15; // 0xf
+    field @Deprecated public static final int CODE_SPLIT_SYSTEM_USER_DEVICE_SYSTEM_USER = 14; // 0xe
+    field public static final int CODE_SYSTEM_USER = 10; // 0xa
+    field public static final int CODE_USER_HAS_PROFILE_OWNER = 2; // 0x2
+    field public static final int CODE_USER_NOT_RUNNING = 3; // 0x3
+    field public static final int CODE_USER_SETUP_COMPLETED = 4; // 0x4
+    field public static final int OPERATION_CLEAR_APPLICATION_USER_DATA = 23; // 0x17
+    field public static final int OPERATION_CREATE_AND_MANAGE_USER = 5; // 0x5
+    field public static final int OPERATION_INSTALL_CA_CERT = 24; // 0x18
+    field public static final int OPERATION_INSTALL_KEY_PAIR = 25; // 0x19
+    field public static final int OPERATION_INSTALL_SYSTEM_UPDATE = 26; // 0x1a
+    field public static final int OPERATION_LOCK_NOW = 1; // 0x1
+    field public static final int OPERATION_LOGOUT_USER = 9; // 0x9
+    field public static final int OPERATION_REBOOT = 7; // 0x7
+    field public static final int OPERATION_REMOVE_ACTIVE_ADMIN = 27; // 0x1b
+    field public static final int OPERATION_REMOVE_KEY_PAIR = 28; // 0x1c
+    field public static final int OPERATION_REMOVE_USER = 6; // 0x6
+    field public static final int OPERATION_REQUEST_BUGREPORT = 29; // 0x1d
+    field public static final int OPERATION_SAFETY_REASON_NONE = -1; // 0xffffffff
+    field public static final int OPERATION_SET_ALWAYS_ON_VPN_PACKAGE = 30; // 0x1e
+    field public static final int OPERATION_SET_APPLICATION_HIDDEN = 15; // 0xf
+    field public static final int OPERATION_SET_APPLICATION_RESTRICTIONS = 16; // 0x10
+    field public static final int OPERATION_SET_CAMERA_DISABLED = 31; // 0x1f
+    field public static final int OPERATION_SET_FACTORY_RESET_PROTECTION_POLICY = 32; // 0x20
+    field public static final int OPERATION_SET_GLOBAL_PRIVATE_DNS = 33; // 0x21
+    field public static final int OPERATION_SET_KEEP_UNINSTALLED_PACKAGES = 17; // 0x11
+    field public static final int OPERATION_SET_KEYGUARD_DISABLED = 12; // 0xc
+    field public static final int OPERATION_SET_LOCK_TASK_FEATURES = 18; // 0x12
+    field public static final int OPERATION_SET_LOCK_TASK_PACKAGES = 19; // 0x13
+    field public static final int OPERATION_SET_LOGOUT_ENABLED = 34; // 0x22
+    field public static final int OPERATION_SET_MASTER_VOLUME_MUTED = 35; // 0x23
+    field public static final int OPERATION_SET_OVERRIDE_APNS_ENABLED = 36; // 0x24
+    field public static final int OPERATION_SET_PACKAGES_SUSPENDED = 20; // 0x14
+    field public static final int OPERATION_SET_PERMISSION_GRANT_STATE = 37; // 0x25
+    field public static final int OPERATION_SET_PERMISSION_POLICY = 38; // 0x26
+    field public static final int OPERATION_SET_RESTRICTIONS_PROVIDER = 39; // 0x27
+    field public static final int OPERATION_SET_STATUS_BAR_DISABLED = 13; // 0xd
+    field public static final int OPERATION_SET_SYSTEM_SETTING = 11; // 0xb
+    field public static final int OPERATION_SET_SYSTEM_UPDATE_POLICY = 14; // 0xe
+    field public static final int OPERATION_SET_TRUST_AGENT_CONFIGURATION = 21; // 0x15
+    field public static final int OPERATION_SET_USER_CONTROL_DISABLED_PACKAGES = 22; // 0x16
+    field public static final int OPERATION_SET_USER_RESTRICTION = 10; // 0xa
+    field public static final int OPERATION_START_USER_IN_BACKGROUND = 3; // 0x3
+    field public static final int OPERATION_STOP_USER = 4; // 0x4
+    field public static final int OPERATION_SWITCH_USER = 2; // 0x2
+    field public static final int OPERATION_UNINSTALL_CA_CERT = 40; // 0x28
+    field public static final int OPERATION_WIPE_DATA = 8; // 0x8
+    field public static final int PROVISIONING_RESULT_ADMIN_PACKAGE_INSTALLATION_FAILED = 3; // 0x3
+    field public static final int PROVISIONING_RESULT_PRE_CONDITION_FAILED = 1; // 0x1
+    field public static final int PROVISIONING_RESULT_PROFILE_CREATION_FAILED = 2; // 0x2
+    field public static final int PROVISIONING_RESULT_REMOVE_NON_REQUIRED_APPS_FAILED = 6; // 0x6
+    field public static final int PROVISIONING_RESULT_SETTING_PROFILE_OWNER_FAILED = 4; // 0x4
+    field public static final int PROVISIONING_RESULT_SET_DEVICE_OWNER_FAILED = 7; // 0x7
+    field public static final int PROVISIONING_RESULT_STARTING_PROFILE_FAILED = 5; // 0x5
+  }
+
+  public final class FullyManagedDeviceProvisioningParams implements android.os.Parcelable {
+    method public boolean canDeviceOwnerGrantSensorsPermissions();
+    method public int describeContents();
+    method @NonNull public android.content.ComponentName getDeviceAdminComponentName();
+    method public long getLocalTime();
+    method @Nullable public java.util.Locale getLocale();
+    method @NonNull public String getOwnerName();
+    method @Nullable public String getTimeZone();
+    method public boolean isLeaveAllSystemAppsEnabled();
+    method public void logParams(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.FullyManagedDeviceProvisioningParams> CREATOR;
+  }
+
+  public static final class FullyManagedDeviceProvisioningParams.Builder {
+    ctor public FullyManagedDeviceProvisioningParams.Builder(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams build();
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setDeviceOwnerCanGrantSensorsPermissions(boolean);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocalTime(long);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setLocale(@Nullable java.util.Locale);
+    method @NonNull public android.app.admin.FullyManagedDeviceProvisioningParams.Builder setTimeZone(@Nullable String);
+  }
+
+  public final class ManagedProfileProvisioningParams implements android.os.Parcelable {
+    method public int describeContents();
+    method @Nullable public android.accounts.Account getAccountToMigrate();
+    method @NonNull public String getOwnerName();
+    method @NonNull public android.content.ComponentName getProfileAdminComponentName();
+    method @Nullable public String getProfileName();
+    method public boolean isKeepAccountMigrated();
+    method public boolean isLeaveAllSystemAppsEnabled();
+    method public boolean isOrganizationOwnedProvisioning();
+    method public void logParams(@NonNull String);
+    method public void writeToParcel(@NonNull android.os.Parcel, @Nullable int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.admin.ManagedProfileProvisioningParams> CREATOR;
+  }
+
+  public static final class ManagedProfileProvisioningParams.Builder {
+    ctor public ManagedProfileProvisioningParams.Builder(@NonNull android.content.ComponentName, @NonNull String);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams build();
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setAccountToMigrate(@Nullable android.accounts.Account);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setKeepAccountMigrated(boolean);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setLeaveAllSystemAppsEnabled(boolean);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setOrganizationOwnedProvisioning(boolean);
+    method @NonNull public android.app.admin.ManagedProfileProvisioningParams.Builder setProfileName(@Nullable String);
+  }
+
+  public class ProvisioningException extends android.util.AndroidException {
+    ctor public ProvisioningException(@NonNull Exception, int);
+    method public int getProvisioningResult();
+  }
+
+  public static final class SecurityLog.SecurityEvent implements android.os.Parcelable {
+    ctor public SecurityLog.SecurityEvent(long, byte[]);
+  }
+
+  public final class UnsafeStateException extends java.lang.IllegalStateException implements android.os.Parcelable {
+    ctor public UnsafeStateException(int, int);
+    method public int getOperation();
+  }
+
+}
+
+package android.app.assist {
+
+  public class ActivityId {
+    method public int getTaskId();
+    method @Nullable public android.os.IBinder getToken();
+  }
+
+}
+
+package android.app.blob {
+
+  public class BlobStoreManager {
+    method @Nullable public android.app.blob.LeaseInfo getLeaseInfo(@NonNull android.app.blob.BlobHandle) throws java.io.IOException;
+    method public void waitForIdle(long) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+  }
+
+  public final class LeaseInfo implements android.os.Parcelable {
+    ctor public LeaseInfo(@NonNull String, long, @IdRes int, @Nullable CharSequence);
+    method public int describeContents();
+    method @Nullable public CharSequence getDescription();
+    method @IdRes public int getDescriptionResId();
+    method public long getExpiryTimeMillis();
+    method @NonNull public String getPackageName();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.app.blob.LeaseInfo> CREATOR;
+  }
+
+}
+
+package android.app.contentsuggestions {
+
+  public final class ContentSuggestionsManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void resetTemporaryService(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void setDefaultServiceEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_SUGGESTIONS) public void setTemporaryService(int, @NonNull String, int);
+  }
+
+}
+
+package android.app.prediction {
+
+  public final class AppPredictor {
+    method public android.app.prediction.AppPredictionSessionId getSessionId();
+  }
+
+}
+
+package android.app.usage {
+
+  public class NetworkStatsManager {
+    method public void setPollForce(boolean);
+  }
+
+  public class StorageStatsManager {
+    method public boolean isQuotaSupported(@NonNull java.util.UUID);
+    method public boolean isReservedSupported(@NonNull java.util.UUID);
+    method @NonNull @WorkerThread public java.util.Collection<android.os.storage.CrateInfo> queryCratesForPackage(@NonNull java.util.UUID, @NonNull String, @NonNull android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @WorkerThread public java.util.Collection<android.os.storage.CrateInfo> queryCratesForUid(@NonNull java.util.UUID, int) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_CRATES) @WorkerThread public java.util.Collection<android.os.storage.CrateInfo> queryCratesForUser(@NonNull java.util.UUID, @NonNull android.os.UserHandle) throws java.io.IOException, android.content.pm.PackageManager.NameNotFoundException;
+  }
+
+  public final class UsageStats implements android.os.Parcelable {
+    ctor public UsageStats();
+  }
+
+  public static final class UsageStats.Builder {
+    ctor public UsageStats.Builder();
+    method @NonNull public android.app.usage.UsageStats build();
+    method @NonNull public android.app.usage.UsageStats.Builder setFirstTimeStamp(long);
+    method @NonNull public android.app.usage.UsageStats.Builder setLastTimeStamp(long);
+    method @NonNull public android.app.usage.UsageStats.Builder setLastTimeUsed(long);
+    method @NonNull public android.app.usage.UsageStats.Builder setPackageName(@Nullable String);
+    method @NonNull public android.app.usage.UsageStats.Builder setTotalTimeInForeground(long);
+  }
+
+  public final class UsageStatsManager {
+    method public void forceUsageSourceSettingRead();
+  }
+
+}
+
+package android.appwidget {
+
+  public class AppWidgetManager {
+    method public void setBindAppWidgetPermission(@NonNull String, int, boolean);
+  }
+
+}
+
+package android.bluetooth {
+
+  public final class BluetoothClass implements android.os.Parcelable {
+    method public int getClassOfDevice();
+  }
+
+}
+
+package android.content {
+
+  public final class AttributionSource implements android.os.Parcelable {
+    ctor public AttributionSource(int, @Nullable String, @Nullable String);
+    ctor public AttributionSource(int, @Nullable String, @Nullable String, @NonNull android.os.IBinder);
+    ctor public AttributionSource(int, @Nullable String, @Nullable String, @Nullable java.util.Set<java.lang.String>, @Nullable android.content.AttributionSource);
+  }
+
+  public final class AutofillOptions implements android.os.Parcelable {
+    ctor public AutofillOptions(int, boolean);
+    method public int describeContents();
+    method public static android.content.AutofillOptions forWhitelistingItself();
+    method public boolean isAugmentedAutofillEnabled(@NonNull android.content.Context);
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.AutofillOptions> CREATOR;
+    field public long appDisabledExpiration;
+    field public boolean augmentedAutofillEnabled;
+    field public final boolean compatModeEnabled;
+    field @Nullable public android.util.ArrayMap<java.lang.String,java.lang.Long> disabledActivities;
+    field public final int loggingLevel;
+    field @Nullable public android.util.ArraySet<android.content.ComponentName> whitelistedActivitiesForAugmentedAutofill;
+  }
+
+  public class ClipboardManager extends android.text.ClipboardManager {
+    method @Nullable @RequiresPermission(android.Manifest.permission.SET_CLIP_SOURCE) public String getPrimaryClipSource();
+  }
+
+  public final class ContentCaptureOptions implements android.os.Parcelable {
+    ctor public ContentCaptureOptions(int);
+    ctor public ContentCaptureOptions(int, int, int, int, int, @Nullable android.util.ArraySet<android.content.ComponentName>);
+    method public int describeContents();
+    method public static android.content.ContentCaptureOptions forWhitelistingItself();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.ContentCaptureOptions> CREATOR;
+    field public final int idleFlushingFrequencyMs;
+    field public final boolean lite;
+    field public final int logHistorySize;
+    field public final int loggingLevel;
+    field public final int maxBufferSize;
+    field public final int textChangeFlushingFrequencyMs;
+    field @Nullable public final android.util.ArraySet<android.content.ComponentName> whitelistedComponents;
+  }
+
+  public abstract class ContentProvider implements android.content.ComponentCallbacks2 {
+    method @NonNull public static android.os.UserHandle getUserHandleFromUri(@NonNull android.net.Uri);
+  }
+
+  public abstract class ContentResolver {
+    method public static String[] getSyncAdapterPackagesForAuthorityAsUser(String, int);
+  }
+
+  public abstract class Context {
+    method @NonNull public java.io.File getCrateDir(@NonNull String);
+    method public abstract int getDisplayId();
+    method @NonNull public android.os.UserHandle getUser();
+    method public int getUserId();
+    method public void setAutofillOptions(@Nullable android.content.AutofillOptions);
+    method public void setContentCaptureOptions(@Nullable android.content.ContentCaptureOptions);
+    field public static final String CONTENT_CAPTURE_MANAGER_SERVICE = "content_capture";
+    field public static final String DEVICE_IDLE_CONTROLLER = "deviceidle";
+    field public static final String DREAM_SERVICE = "dream";
+    field public static final String FONT_SERVICE = "font";
+    field public static final String POWER_EXEMPTION_SERVICE = "power_exemption";
+    field @Deprecated public static final String POWER_WHITELIST_MANAGER = "power_whitelist";
+    field public static final String TEST_NETWORK_SERVICE = "test_network";
+  }
+
+  public class ContextWrapper extends android.content.Context {
+    method public int getDisplayId();
+  }
+
+  public class Intent implements java.lang.Cloneable android.os.Parcelable {
+    field public static final String ACTION_USER_STOPPED = "android.intent.action.USER_STOPPED";
+  }
+
+  public class SyncAdapterType implements android.os.Parcelable {
+    method @Nullable public String getPackageName();
+  }
+
+}
+
+package android.content.integrity {
+
+  public class AppIntegrityManager {
+    method @NonNull public android.content.integrity.RuleSet getCurrentRuleSet();
+    method @NonNull public java.util.List<java.lang.String> getWhitelistedRuleProviders();
+  }
+
+}
+
+package android.content.pm {
+
+  public class ActivityInfo extends android.content.pm.ComponentInfo implements android.os.Parcelable {
+    method public static boolean isTranslucentOrFloating(android.content.res.TypedArray);
+    field public static final long ALWAYS_SANDBOX_DISPLAY_APIS = 185004937L; // 0xb06f389L
+    field public static final long FORCE_NON_RESIZE_APP = 181136395L; // 0xacbec0bL
+    field public static final long FORCE_RESIZE_APP = 174042936L; // 0xa5faf38L
+    field public static final long NEVER_SANDBOX_DISPLAY_APIS = 184838306L; // 0xb0468a2L
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO = 174042980L; // 0xa5faf64L
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO_LARGE = 180326787L; // 0xabf9183L
+    field public static final float OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE = 1.7777778f;
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO_MEDIUM = 180326845L; // 0xabf91bdL
+    field public static final float OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE = 1.5f;
+    field public static final long OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY = 203647190L; // 0xc2368d6L
+    field public static final int RESIZE_MODE_RESIZEABLE = 2; // 0x2
+  }
+
+  public class ApplicationInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    method public boolean hasRequestForegroundServiceExemption();
+    method public boolean isPrivilegedApp();
+    method public boolean isSystemApp();
+    field public static final int PRIVATE_FLAG_PRIVILEGED = 8; // 0x8
+    field public int privateFlags;
+  }
+
+  public class CrossProfileApps {
+    method public boolean canConfigureInteractAcrossProfiles(@NonNull String);
+  }
+
+  public class LauncherApps {
+    ctor public LauncherApps(android.content.Context);
+  }
+
+  public static class PackageInstaller.SessionParams implements android.os.Parcelable {
+    method public void setInstallFlagAllowTest();
+    method public void setInstallerPackageName(@Nullable String);
+  }
+
+  public abstract class PackageManager {
+    method @Nullable public String getContentCaptureServicePackageName();
+    method @Nullable public String getDefaultTextClassifierPackageName();
+    method @RequiresPermission(android.Manifest.permission.INJECT_EVENTS) public android.os.IBinder getHoldLockToken();
+    method public abstract int getInstallReason(@NonNull String, @NonNull android.os.UserHandle);
+    method @NonNull public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplicationsAsUser(int, int);
+    method @Nullable public abstract String[] getNamesForUids(int[]);
+    method @NonNull public String getPermissionControllerPackageName();
+    method @NonNull public abstract String getServicesSystemSharedLibraryPackageName();
+    method @NonNull public abstract String getSharedSystemSharedLibraryPackageName();
+    method @Nullable public String getSystemTextClassifierPackageName();
+    method @Nullable public String getWellbeingPackageName();
+    method public void holdLock(android.os.IBinder, int);
+    method @RequiresPermission(android.Manifest.permission.KEEP_UNINSTALLED_PACKAGES) public void setKeepUninstalledPackages(@NonNull java.util.List<java.lang.String>);
+    field public static final String FEATURE_ADOPTABLE_STORAGE = "android.software.adoptable_storage";
+    field public static final String FEATURE_FILE_BASED_ENCRYPTION = "android.software.file_based_encryption";
+    field public static final String FEATURE_HDMI_CEC = "android.hardware.hdmi.cec";
+    field public static final int FLAG_PERMISSION_REVOKE_WHEN_REQUESTED = 128; // 0x80
+    field public static final int MATCH_KNOWN_PACKAGES = 4202496; // 0x402000
+    field public static final String SYSTEM_SHARED_LIBRARY_SERVICES = "android.ext.services";
+    field public static final String SYSTEM_SHARED_LIBRARY_SHARED = "android.ext.shared";
+  }
+
+  public class PermissionInfo extends android.content.pm.PackageItemInfo implements android.os.Parcelable {
+    field public static final int PROTECTION_FLAG_VENDOR_PRIVILEGED = 32768; // 0x8000
+  }
+
+  public final class ProviderInfoList implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public static android.content.pm.ProviderInfoList fromList(@NonNull java.util.List<android.content.pm.ProviderInfo>);
+    method @NonNull public java.util.List<android.content.pm.ProviderInfo> getList();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.ProviderInfoList> CREATOR;
+  }
+
+  public final class SharedLibraryInfo implements android.os.Parcelable {
+    method @NonNull public java.util.List<java.lang.String> getAllCodePaths();
+    method public boolean isNative();
+  }
+
+  public final class ShortcutInfo implements android.os.Parcelable {
+    method public boolean isVisibleToPublisher();
+  }
+
+  public class ShortcutManager {
+    ctor public ShortcutManager(android.content.Context);
+  }
+
+  public class UserInfo implements android.os.Parcelable {
+    ctor public UserInfo(int, String, int);
+    ctor public UserInfo(int, String, String, int);
+    ctor public UserInfo(int, String, String, int, String);
+    ctor @Deprecated public UserInfo();
+    ctor public UserInfo(android.content.pm.UserInfo);
+    method public boolean canHaveProfile();
+    method public int describeContents();
+    method public android.os.UserHandle getUserHandle();
+    method public boolean isAdmin();
+    method public boolean isCloneProfile();
+    method public boolean isDemo();
+    method public boolean isEnabled();
+    method public boolean isEphemeral();
+    method public boolean isFull();
+    method public boolean isGuest();
+    method public boolean isInitialized();
+    method public boolean isManagedProfile();
+    method public boolean isPrimary();
+    method public boolean isProfile();
+    method public boolean isQuietModeEnabled();
+    method public boolean isRestricted();
+    method public boolean isSystemOnly();
+    method public static boolean isSystemOnly(int);
+    method public boolean supportsSwitchTo();
+    method public boolean supportsSwitchToByUser();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.UserInfo> CREATOR;
+    field public static final int FLAG_ADMIN = 2; // 0x2
+    field @Deprecated public static final int FLAG_DEMO = 512; // 0x200
+    field public static final int FLAG_DISABLED = 64; // 0x40
+    field public static final int FLAG_EPHEMERAL = 256; // 0x100
+    field public static final int FLAG_FULL = 1024; // 0x400
+    field @Deprecated public static final int FLAG_GUEST = 4; // 0x4
+    field public static final int FLAG_INITIALIZED = 16; // 0x10
+    field @Deprecated public static final int FLAG_MANAGED_PROFILE = 32; // 0x20
+    field public static final int FLAG_PRIMARY = 1; // 0x1
+    field public static final int FLAG_PROFILE = 4096; // 0x1000
+    field public static final int FLAG_QUIET_MODE = 128; // 0x80
+    field @Deprecated public static final int FLAG_RESTRICTED = 8; // 0x8
+    field public static final int FLAG_SYSTEM = 2048; // 0x800
+    field public static final int NO_PROFILE_GROUP_ID = -10000; // 0xffffd8f0
+    field public boolean convertedFromPreCreated;
+    field public long creationTime;
+    field public int flags;
+    field public boolean guestToRemove;
+    field public String iconPath;
+    field public int id;
+    field public String lastLoggedInFingerprint;
+    field public long lastLoggedInTime;
+    field public String name;
+    field public boolean partial;
+    field public boolean preCreated;
+    field public int profileBadge;
+    field public int profileGroupId;
+    field public int restrictedProfileParentId;
+    field public int serialNumber;
+    field public String userType;
+  }
+
+}
+
+package android.content.res {
+
+  public final class AssetManager implements java.lang.AutoCloseable {
+    method @NonNull public String[] getApkPaths();
+    method @Nullable public String getLastResourceResolution();
+    method @Nullable public String getOverlayablesToString(String);
+    method public void setResourceResolutionLoggingEnabled(boolean);
+  }
+
+  public final class Configuration implements java.lang.Comparable<android.content.res.Configuration> android.os.Parcelable {
+    field public int assetsSeq;
+    field public final android.app.WindowConfiguration windowConfiguration;
+  }
+
+}
+
+package android.content.rollback {
+
+  public final class RollbackManager {
+    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void blockRollbackManager(long);
+    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void expireRollbackForPackage(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.TEST_MANAGE_ROLLBACKS) public void reloadPersistedData();
+    field public static final String PROPERTY_ROLLBACK_LIFETIME_MILLIS = "rollback_lifetime_in_millis";
+  }
+
+}
+
+package android.database.sqlite {
+
+  public class SQLiteCompatibilityWalFlags {
+    method public static void reset();
+  }
+
+  public final class SQLiteDebug {
+    method public static void dump(android.util.Printer, String[]);
+    method public static android.database.sqlite.SQLiteDebug.PagerStats getDatabaseInfo();
+  }
+
+  public static class SQLiteDebug.DbStats {
+    ctor public SQLiteDebug.DbStats(String, long, long, int, int, int, int);
+    field public String cache;
+    field public String dbName;
+    field public long dbSize;
+    field public int lookaside;
+    field public long pageSize;
+  }
+
+  public static class SQLiteDebug.PagerStats {
+    ctor public SQLiteDebug.PagerStats();
+    field public java.util.ArrayList<android.database.sqlite.SQLiteDebug.DbStats> dbStats;
+    field public int largestMemAlloc;
+    field public int memoryUsed;
+    field public int pageCacheOverflow;
+  }
+
+  public final class SQLiteDirectCursorDriver implements android.database.sqlite.SQLiteCursorDriver {
+    ctor public SQLiteDirectCursorDriver(android.database.sqlite.SQLiteDatabase, String, String, android.os.CancellationSignal);
+    method public void cursorClosed();
+    method public void cursorDeactivated();
+    method public void cursorRequeried(android.database.Cursor);
+    method public android.database.Cursor query(android.database.sqlite.SQLiteDatabase.CursorFactory, String[]);
+    method public void setBindArguments(String[]);
+  }
+
+  public final class SQLiteGlobal {
+    method public static String getDefaultJournalMode();
+    method public static int getDefaultPageSize();
+    method public static String getDefaultSyncMode();
+    method public static int getIdleConnectionTimeout();
+    method public static int getJournalSizeLimit();
+    method public static int getWALAutoCheckpoint();
+    method public static int getWALConnectionPoolSize();
+    method public static String getWALSyncMode();
+    method public static int releaseMemory();
+  }
+
+}
+
+package android.graphics {
+
+  public final class ImageDecoder implements java.lang.AutoCloseable {
+    method @AnyThread @NonNull public static android.graphics.ImageDecoder.Source createSource(android.content.res.Resources, java.io.InputStream, int);
+  }
+
+  public final class Rect implements android.os.Parcelable {
+    method public void splitHorizontally(@NonNull android.graphics.Rect...);
+    method public void splitVertically(@NonNull android.graphics.Rect...);
+  }
+
+  public class Typeface {
+    method @NonNull public static long[] deserializeFontMap(@NonNull java.nio.ByteBuffer, @NonNull java.util.Map<java.lang.String,android.graphics.Typeface>) throws java.io.IOException;
+    method @Nullable public static android.os.SharedMemory getSystemFontMapSharedMemory();
+    method @NonNull public static android.os.SharedMemory serializeFontMap(@NonNull java.util.Map<java.lang.String,android.graphics.Typeface>) throws android.system.ErrnoException, java.io.IOException;
+  }
+
+}
+
+package android.graphics.drawable {
+
+  public class AdaptiveIconDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    method public android.graphics.Region getSafeZone();
+    field public static final float MASK_SIZE = 100.0f;
+  }
+
+  public class ColorDrawable extends android.graphics.drawable.Drawable {
+    method public android.graphics.Xfermode getXfermode();
+  }
+
+  public class ShapeDrawable extends android.graphics.drawable.Drawable {
+    method public void setXfermode(@Nullable android.graphics.Xfermode);
+  }
+
+}
+
+package android.graphics.fonts {
+
+  public class FontManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public android.text.FontConfig getFontConfig();
+    method @RequiresPermission(android.Manifest.permission.UPDATE_FONTS) public int updateFontFamily(@NonNull android.graphics.fonts.FontFamilyUpdateRequest, @IntRange(from=0) int);
+    field public static final int RESULT_ERROR_DOWNGRADING = -5; // 0xfffffffb
+    field public static final int RESULT_ERROR_FAILED_TO_WRITE_FONT_FILE = -1; // 0xffffffff
+    field public static final int RESULT_ERROR_FAILED_UPDATE_CONFIG = -6; // 0xfffffffa
+    field public static final int RESULT_ERROR_FONT_NOT_FOUND = -9; // 0xfffffff7
+    field public static final int RESULT_ERROR_FONT_UPDATER_DISABLED = -7; // 0xfffffff9
+    field public static final int RESULT_ERROR_INVALID_FONT_FILE = -3; // 0xfffffffd
+    field public static final int RESULT_ERROR_INVALID_FONT_NAME = -4; // 0xfffffffc
+    field public static final int RESULT_ERROR_VERIFICATION_FAILURE = -2; // 0xfffffffe
+    field public static final int RESULT_ERROR_VERSION_MISMATCH = -8; // 0xfffffff8
+    field public static final int RESULT_SUCCESS = 0; // 0x0
+  }
+
+}
+
+package android.hardware {
+
+  public final class SensorPrivacyManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setSensorPrivacy(int, int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SENSOR_PRIVACY) public void setSensorPrivacyForProfileGroup(int, int, boolean);
+  }
+
+  public static class SensorPrivacyManager.Sources {
+    field public static final int DIALOG = 3; // 0x3
+    field public static final int OTHER = 5; // 0x5
+    field public static final int QS_TILE = 1; // 0x1
+    field public static final int SETTINGS = 2; // 0x2
+    field public static final int SHELL = 4; // 0x4
+  }
+
+}
+
+package android.hardware.biometrics {
+
+  public class BiometricManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public android.hardware.biometrics.BiometricTestSession createTestSession(int);
+    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public java.util.List<android.hardware.biometrics.SensorProperties> getSensorProperties();
+    method @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public String getUiPackage();
+  }
+
+  public class BiometricPrompt {
+    method @NonNull public java.util.List<java.lang.Integer> getAllowedSensorIds();
+    method public boolean isAllowBackgroundAuthentication();
+  }
+
+  public static class BiometricPrompt.Builder {
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.TEST_BIOMETRIC, "android.permission.USE_BIOMETRIC_INTERNAL"}) public android.hardware.biometrics.BiometricPrompt.Builder setAllowBackgroundAuthentication(boolean);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.TEST_BIOMETRIC, "android.permission.USE_BIOMETRIC_INTERNAL"}) public android.hardware.biometrics.BiometricPrompt.Builder setAllowedSensorIds(@NonNull java.util.List<java.lang.Integer>);
+  }
+
+  public class BiometricTestSession implements java.lang.AutoCloseable {
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void acceptAuthentication(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void cleanupInternalState(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void close();
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void finishEnroll(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyAcquired(int, int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void notifyError(int, int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void rejectAuthentication(int);
+    method @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public void startEnroll(int);
+  }
+
+  public class SensorProperties {
+    method @NonNull public java.util.List<android.hardware.biometrics.SensorProperties.ComponentInfo> getComponentInfo();
+    method public int getSensorId();
+    method public int getSensorStrength();
+    field public static final int STRENGTH_CONVENIENCE = 0; // 0x0
+    field public static final int STRENGTH_STRONG = 2; // 0x2
+    field public static final int STRENGTH_WEAK = 1; // 0x1
+  }
+
+  public static final class SensorProperties.ComponentInfo {
+    method @NonNull public String getComponentId();
+    method @NonNull public String getFirmwareVersion();
+    method @NonNull public String getHardwareVersion();
+    method @NonNull public String getSerialNumber();
+    method @NonNull public String getSoftwareVersion();
+  }
+
+}
+
+package android.hardware.camera2 {
+
+  public final class CameraManager {
+    method public String[] getCameraIdListNoLazy() throws android.hardware.camera2.CameraAccessException;
+    method @RequiresPermission(allOf={android.Manifest.permission.SYSTEM_CAMERA, android.Manifest.permission.CAMERA}) public void openCamera(@NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
+  }
+
+  public abstract static class CameraManager.AvailabilityCallback {
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraClosed(@NonNull String);
+    method @RequiresPermission(android.Manifest.permission.CAMERA_OPEN_CLOSE_LISTENER) public void onCameraOpened(@NonNull String, @NonNull String);
+  }
+
+  public abstract class CameraMetadata<TKey> {
+    field public static final int SENSOR_TEST_PATTERN_MODE_BLACK = 5; // 0x5
+  }
+
+}
+
+package android.hardware.devicestate {
+
+  public final class DeviceStateManager {
+    method @RequiresPermission(value=android.Manifest.permission.CONTROL_DEVICE_STATE, conditional=true) public void cancelRequest(@NonNull android.hardware.devicestate.DeviceStateRequest);
+    method @NonNull public int[] getSupportedStates();
+    method public void registerCallback(@NonNull java.util.concurrent.Executor, @NonNull android.hardware.devicestate.DeviceStateManager.DeviceStateCallback);
+    method @RequiresPermission(value=android.Manifest.permission.CONTROL_DEVICE_STATE, conditional=true) public void requestState(@NonNull android.hardware.devicestate.DeviceStateRequest, @Nullable java.util.concurrent.Executor, @Nullable android.hardware.devicestate.DeviceStateRequest.Callback);
+    method public void unregisterCallback(@NonNull android.hardware.devicestate.DeviceStateManager.DeviceStateCallback);
+    field public static final int MAXIMUM_DEVICE_STATE = 255; // 0xff
+    field public static final int MINIMUM_DEVICE_STATE = 0; // 0x0
+  }
+
+  public static interface DeviceStateManager.DeviceStateCallback {
+    method public default void onBaseStateChanged(int);
+    method public void onStateChanged(int);
+    method public default void onSupportedStatesChanged(@NonNull int[]);
+  }
+
+  public final class DeviceStateRequest {
+    method public int getFlags();
+    method public int getState();
+    method @NonNull public static android.hardware.devicestate.DeviceStateRequest.Builder newBuilder(int);
+    field public static final int FLAG_CANCEL_WHEN_BASE_CHANGES = 1; // 0x1
+  }
+
+  public static final class DeviceStateRequest.Builder {
+    method @NonNull public android.hardware.devicestate.DeviceStateRequest build();
+    method @NonNull public android.hardware.devicestate.DeviceStateRequest.Builder setFlags(int);
+  }
+
+  public static interface DeviceStateRequest.Callback {
+    method public default void onRequestActivated(@NonNull android.hardware.devicestate.DeviceStateRequest);
+    method public default void onRequestCanceled(@NonNull android.hardware.devicestate.DeviceStateRequest);
+    method public default void onRequestSuspended(@NonNull android.hardware.devicestate.DeviceStateRequest);
+  }
+
+}
+
+package android.hardware.display {
+
+  public class AmbientDisplayConfiguration {
+    ctor public AmbientDisplayConfiguration(android.content.Context);
+    method public boolean alwaysOnAvailable();
+    method public boolean alwaysOnAvailableForUser(int);
+    method public boolean alwaysOnEnabled(int);
+  }
+
+  public final class DisplayManager {
+    method public boolean areUserDisabledHdrTypesAllowed();
+    method @NonNull public int[] getUserDisabledHdrTypes();
+    method public boolean isMinimalPostProcessingRequested(int);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setAreUserDisabledHdrTypesAllowed(boolean);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_REFRESH_RATE_SWITCHING_TYPE) public void setRefreshRateSwitchingType(int);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public void setShouldAlwaysRespectAppRequestedMode(boolean);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setUserDisabledHdrTypes(@NonNull int[]);
+    method @RequiresPermission(android.Manifest.permission.OVERRIDE_DISPLAY_MODE_REQUESTS) public boolean shouldAlwaysRespectAppRequestedMode();
+    field public static final int SWITCHING_TYPE_ACROSS_AND_WITHIN_GROUPS = 2; // 0x2
+    field public static final int SWITCHING_TYPE_NONE = 0; // 0x0
+    field public static final int SWITCHING_TYPE_WITHIN_GROUPS = 1; // 0x1
+    field public static final int VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS = 512; // 0x200
+    field public static final int VIRTUAL_DISPLAY_FLAG_TRUSTED = 1024; // 0x400
+  }
+
+}
+
+package android.hardware.fingerprint {
+
+  @Deprecated public class FingerprintManager {
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public android.hardware.biometrics.BiometricTestSession createTestSession(int);
+    method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.TEST_BIOMETRIC) public java.util.List<android.hardware.biometrics.SensorProperties> getSensorProperties();
+  }
+
+}
+
+package android.hardware.hdmi {
+
+  public final class HdmiControlServiceWrapper {
+    ctor public HdmiControlServiceWrapper();
+    method @NonNull public android.hardware.hdmi.HdmiControlManager createHdmiControlManager();
+    method @BinderThread public void setDeviceTypes(@NonNull int[]);
+    method @BinderThread public void setPortInfo(@NonNull java.util.List<android.hardware.hdmi.HdmiPortInfo>);
+    field public static final int DEVICE_PURE_CEC_SWITCH = 6; // 0x6
+  }
+
+}
+
+package android.hardware.input {
+
+  public final class InputManager {
+    method public int getBlockUntrustedTouchesMode(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setBlockUntrustedTouchesMode(@NonNull android.content.Context, int);
+    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setMaximumObscuringOpacityForTouch(@FloatRange(from=0, to=1) float);
+    field public static final long BLOCK_UNTRUSTED_TOUCHES = 158002302L; // 0x96aec7eL
+  }
+
+}
+
+package android.hardware.lights {
+
+  public final class Light implements android.os.Parcelable {
+    method public int getCapabilities();
+  }
+
+  public abstract class LightsManager {
+    method @NonNull public abstract android.hardware.lights.LightsManager.LightsSession openSession(int);
+  }
+
+}
+
+package android.hardware.soundtrigger {
+
+  public class KeyphraseEnrollmentInfo {
+    ctor public KeyphraseEnrollmentInfo(@NonNull android.content.pm.PackageManager);
+    method @Nullable public android.hardware.soundtrigger.KeyphraseMetadata getKeyphraseMetadata(@NonNull String, @NonNull java.util.Locale);
+    method @Nullable public android.content.Intent getManageKeyphraseIntent(int, @NonNull String, @NonNull java.util.Locale);
+    method @NonNull public String getParseError();
+    method @NonNull public java.util.Collection<android.hardware.soundtrigger.KeyphraseMetadata> listKeyphraseMetadata();
+    field public static final int MANAGE_ACTION_ENROLL = 0; // 0x0
+    field public static final int MANAGE_ACTION_RE_ENROLL = 1; // 0x1
+    field public static final int MANAGE_ACTION_UN_ENROLL = 2; // 0x2
+  }
+
+  public final class KeyphraseMetadata implements android.os.Parcelable {
+    ctor public KeyphraseMetadata(int, @NonNull String, @NonNull java.util.Set<java.util.Locale>, int);
+    method public int describeContents();
+    method public int getId();
+    method @NonNull public String getKeyphrase();
+    method public int getRecognitionModeFlags();
+    method @NonNull public java.util.Set<java.util.Locale> getSupportedLocales();
+    method public boolean supportsLocale(@Nullable java.util.Locale);
+    method public boolean supportsPhrase(@Nullable String);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.hardware.soundtrigger.KeyphraseMetadata> CREATOR;
+  }
+
+  public static final class SoundTrigger.ModelParamRange implements android.os.Parcelable {
+    ctor public SoundTrigger.ModelParamRange(int, int);
+  }
+
+  public static final class SoundTrigger.ModuleProperties implements android.os.Parcelable {
+    ctor public SoundTrigger.ModuleProperties(int, @NonNull String, @NonNull String, @NonNull String, int, @NonNull String, int, int, int, int, boolean, int, boolean, int, boolean, int);
+  }
+
+  public static class SoundTrigger.RecognitionEvent {
+    ctor public SoundTrigger.RecognitionEvent(int, int, boolean, int, int, int, boolean, @NonNull android.media.AudioFormat, @Nullable byte[]);
+  }
+
+}
+
+package android.inputmethodservice {
+
+  public abstract class AbstractInputMethodService extends android.window.WindowProviderService implements android.view.KeyEvent.Callback {
+    method public final int getInitialDisplayId();
+    method @Nullable public final android.os.Bundle getWindowContextOptions();
+    method public final int getWindowType();
+  }
+
+  @UiContext public class InputMethodService extends android.inputmethodservice.AbstractInputMethodService {
+    field public static final long FINISH_INPUT_NO_FALLBACK_CONNECTION = 156215187L; // 0x94fa793L
+  }
+
+}
+
+package android.location {
+
+  public final class GnssClock implements android.os.Parcelable {
+    ctor public GnssClock();
+    method public void reset();
+    method public void resetBiasNanos();
+    method public void resetBiasUncertaintyNanos();
+    method public void resetDriftNanosPerSecond();
+    method public void resetDriftUncertaintyNanosPerSecond();
+    method public void resetElapsedRealtimeNanos();
+    method public void resetElapsedRealtimeUncertaintyNanos();
+    method public void resetFullBiasNanos();
+    method public void resetLeapSecond();
+    method public void resetReferenceCarrierFrequencyHzForIsb();
+    method public void resetReferenceCodeTypeForIsb();
+    method public void resetReferenceConstellationTypeForIsb();
+    method public void resetTimeUncertaintyNanos();
+    method public void set(android.location.GnssClock);
+    method public void setBiasNanos(double);
+    method public void setBiasUncertaintyNanos(@FloatRange(from=0.0f) double);
+    method public void setDriftNanosPerSecond(double);
+    method public void setDriftUncertaintyNanosPerSecond(@FloatRange(from=0.0f) double);
+    method public void setElapsedRealtimeNanos(long);
+    method public void setElapsedRealtimeUncertaintyNanos(@FloatRange(from=0.0f) double);
+    method public void setFullBiasNanos(long);
+    method public void setHardwareClockDiscontinuityCount(int);
+    method public void setLeapSecond(int);
+    method public void setReferenceCarrierFrequencyHzForIsb(@FloatRange(from=0.0) double);
+    method public void setReferenceCodeTypeForIsb(@NonNull String);
+    method public void setReferenceConstellationTypeForIsb(int);
+    method public void setTimeNanos(long);
+    method public void setTimeUncertaintyNanos(@FloatRange(from=0.0f) double);
+  }
+
+  public final class GnssMeasurement implements android.os.Parcelable {
+    ctor public GnssMeasurement();
+    method public void reset();
+    method public void resetAutomaticGainControlLevel();
+    method public void resetBasebandCn0DbHz();
+    method @Deprecated public void resetCarrierCycles();
+    method public void resetCarrierFrequencyHz();
+    method @Deprecated public void resetCarrierPhase();
+    method @Deprecated public void resetCarrierPhaseUncertainty();
+    method public void resetCodeType();
+    method public void resetCorrelationVectors();
+    method public void resetFullInterSignalBiasNanos();
+    method public void resetFullInterSignalBiasUncertaintyNanos();
+    method public void resetSatelliteInterSignalBiasNanos();
+    method public void resetSatelliteInterSignalBiasUncertaintyNanos();
+    method public void resetSatellitePvt();
+    method public void resetSnrInDb();
+    method public void set(android.location.GnssMeasurement);
+    method public void setAccumulatedDeltaRangeMeters(double);
+    method public void setAccumulatedDeltaRangeState(int);
+    method public void setAccumulatedDeltaRangeUncertaintyMeters(double);
+    method public void setAutomaticGainControlLevelInDb(double);
+    method public void setBasebandCn0DbHz(double);
+    method @Deprecated public void setCarrierCycles(long);
+    method public void setCarrierFrequencyHz(float);
+    method @Deprecated public void setCarrierPhase(double);
+    method @Deprecated public void setCarrierPhaseUncertainty(double);
+    method public void setCn0DbHz(double);
+    method public void setCodeType(@NonNull String);
+    method public void setConstellationType(int);
+    method public void setCorrelationVectors(@Nullable java.util.Collection<android.location.CorrelationVector>);
+    method public void setFullInterSignalBiasNanos(double);
+    method public void setFullInterSignalBiasUncertaintyNanos(@FloatRange(from=0.0) double);
+    method public void setMultipathIndicator(int);
+    method public void setPseudorangeRateMetersPerSecond(double);
+    method public void setPseudorangeRateUncertaintyMetersPerSecond(double);
+    method public void setReceivedSvTimeNanos(long);
+    method public void setReceivedSvTimeUncertaintyNanos(long);
+    method public void setSatelliteInterSignalBiasNanos(double);
+    method public void setSatelliteInterSignalBiasUncertaintyNanos(@FloatRange(from=0.0) double);
+    method public void setSatellitePvt(@Nullable android.location.SatellitePvt);
+    method public void setSnrInDb(double);
+    method public void setState(int);
+    method public void setSvid(int);
+    method public void setTimeOffsetNanos(double);
+    field public static final int ADR_STATE_ALL = 31; // 0x1f
+  }
+
+  public final class GnssMeasurementsEvent implements android.os.Parcelable {
+    ctor public GnssMeasurementsEvent(android.location.GnssClock, android.location.GnssMeasurement[]);
+  }
+
+  public final class GnssNavigationMessage implements android.os.Parcelable {
+    ctor public GnssNavigationMessage();
+    method public void reset();
+    method public void set(android.location.GnssNavigationMessage);
+    method public void setData(byte[]);
+    method public void setMessageId(@IntRange(from=0xffffffff, to=120) int);
+    method public void setStatus(int);
+    method public void setSubmessageId(@IntRange(from=1) int);
+    method public void setSvid(@IntRange(from=1, to=200) int);
+    method public void setType(int);
+  }
+
+  public class LocationManager {
+    method @NonNull public String[] getBackgroundThrottlingWhitelist();
+    method @NonNull public android.os.PackageTagsList getIgnoreSettingsAllowlist();
+    method @Deprecated @NonNull public String[] getIgnoreSettingsWhitelist();
+    method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public java.util.List<java.lang.String> getProviderPackages(@NonNull String);
+  }
+
+}
+
+package android.media {
+
+  public final class AudioAttributes implements android.os.Parcelable {
+    method @NonNull public static String usageToXsdString(int);
+    method public static int xsdStringToUsage(@NonNull String);
+  }
+
+  public final class AudioDeviceInfo {
+    method public static void enforceValidAudioDeviceTypeIn(int);
+    method public static void enforceValidAudioDeviceTypeOut(int);
+  }
+
+  public final class AudioFocusRequest {
+    method @Nullable public android.media.AudioManager.OnAudioFocusChangeListener getOnAudioFocusChangeListener();
+  }
+
+  public final class AudioFormat implements android.os.Parcelable {
+    method public static int channelCountFromInChannelMask(int);
+    method public static int channelCountFromOutChannelMask(int);
+    method public static int getBytesPerSample(int);
+    method public static boolean isEncodingLinearPcm(int);
+  }
+
+  public class AudioManager {
+    method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int abandonAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String);
+    method @Nullable public static android.media.AudioDeviceInfo getDeviceInfoFromType(int);
+    method @IntRange(from=0) @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public long getFadeOutDurationOnFocusLossMillis(@NonNull android.media.AudioAttributes);
+    method @NonNull public java.util.List<java.lang.Integer> getReportedSurroundFormats();
+    method @NonNull public java.util.Map<java.lang.Integer,java.lang.Boolean> getSurroundFormats();
+    method public boolean hasRegisteredDynamicPolicy();
+    method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_AUDIO_ROUTING, android.Manifest.permission.QUERY_AUDIO_STATE}) public boolean isFullVolumeDevice();
+    method @RequiresPermission("android.permission.QUERY_AUDIO_STATE") public int requestAudioFocusForTest(@NonNull android.media.AudioFocusRequest, @NonNull String, int, int);
+  }
+
+  public static final class AudioRecord.MetricsConstants {
+    field public static final String ATTRIBUTES = "android.media.audiorecord.attributes";
+    field public static final String CHANNEL_MASK = "android.media.audiorecord.channelMask";
+    field public static final String DURATION_MS = "android.media.audiorecord.durationMs";
+    field public static final String FRAME_COUNT = "android.media.audiorecord.frameCount";
+    field public static final String PORT_ID = "android.media.audiorecord.portId";
+    field public static final String START_COUNT = "android.media.audiorecord.startCount";
+  }
+
+  public final class AudioRecordingConfiguration implements android.os.Parcelable {
+    ctor public AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String, int, boolean, int, android.media.audiofx.AudioEffect.Descriptor[], android.media.audiofx.AudioEffect.Descriptor[]);
+    ctor public AudioRecordingConfiguration(int, int, int, android.media.AudioFormat, android.media.AudioFormat, int, String);
+  }
+
+  public class AudioSystem {
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS) public static float getMasterBalance();
+    method public static final int getNumStreamTypes();
+    method @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS) public static int setMasterBalance(float);
+    field public static final int DEVICE_ROLE_DISABLED = 2; // 0x2
+    field public static final int DEVICE_ROLE_NONE = 0; // 0x0
+    field public static final int DEVICE_ROLE_PREFERRED = 1; // 0x1
+    field public static final int OFFLOAD_GAPLESS_SUPPORTED = 2; // 0x2
+    field public static final int OFFLOAD_SUPPORTED = 1; // 0x1
+    field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+  }
+
+  public static final class AudioTrack.MetricsConstants {
+    field public static final String ATTRIBUTES = "android.media.audiotrack.attributes";
+    field public static final String CHANNEL_MASK = "android.media.audiotrack.channelMask";
+    field public static final String ENCODING = "android.media.audiotrack.encoding";
+    field public static final String FRAME_COUNT = "android.media.audiotrack.frameCount";
+    field public static final String PORT_ID = "android.media.audiotrack.portId";
+    field public static final String SAMPLE_RATE = "android.media.audiotrack.sampleRate";
+  }
+
+  public abstract class Image implements java.lang.AutoCloseable {
+    ctor protected Image();
+  }
+
+  public abstract static class Image.Plane {
+    ctor protected Image.Plane();
+  }
+
+  public final class MediaCas implements java.lang.AutoCloseable {
+    method public void forceResourceLost();
+  }
+
+  public static final class MediaCodecInfo.VideoCapabilities.PerformancePoint {
+    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(int, int, int, int, @NonNull android.util.Size);
+    ctor public MediaCodecInfo.VideoCapabilities.PerformancePoint(@NonNull android.media.MediaCodecInfo.VideoCapabilities.PerformancePoint, @NonNull android.util.Size);
+    method public int getMaxFrameRate();
+    method public long getMaxMacroBlockRate();
+    method public int getMaxMacroBlocks();
+  }
+
+  public final class MediaRoute2Info implements android.os.Parcelable {
+    method @NonNull public String getOriginalId();
+  }
+
+  public class MediaRouter2.RoutingController {
+    method @NonNull public String getOriginalId();
+  }
+
+  public final class PlaybackParams implements android.os.Parcelable {
+    method public int getAudioStretchMode();
+    method public android.media.PlaybackParams setAudioStretchMode(int);
+  }
+
+  public static final class VolumeShaper.Configuration.Builder {
+    method @NonNull public android.media.VolumeShaper.Configuration.Builder setOptionFlags(int);
+  }
+
+}
+
+package android.media.audiofx {
+
+  public class AudioEffect {
+    method public static int byteArrayToInt(byte[]);
+    method public static short byteArrayToShort(byte[]);
+    method public int getParameter(byte[], byte[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int, byte[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int, int[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int, short[]) throws java.lang.IllegalStateException;
+    method public int getParameter(int[], short[]) throws java.lang.IllegalStateException;
+    method public static byte[] intToByteArray(int);
+    method public static boolean isEffectTypeAvailable(java.util.UUID);
+    method public static boolean isError(int);
+    method public int setParameter(byte[], byte[]) throws java.lang.IllegalStateException;
+    method public int setParameter(int, int) throws java.lang.IllegalStateException;
+    method public int setParameter(int, short) throws java.lang.IllegalStateException;
+    method public int setParameter(int, byte[]) throws java.lang.IllegalStateException;
+    method public int setParameter(int[], int[]) throws java.lang.IllegalStateException;
+    method public int setParameter(int[], byte[]) throws java.lang.IllegalStateException;
+    method public void setParameterListener(android.media.audiofx.AudioEffect.OnParameterChangeListener);
+    method public static byte[] shortToByteArray(short);
+    field public static final java.util.UUID EFFECT_TYPE_NULL;
+  }
+
+  public static class AudioEffect.Descriptor {
+    ctor public AudioEffect.Descriptor(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel);
+  }
+
+  public static interface AudioEffect.OnParameterChangeListener {
+    method public void onParameterChange(android.media.audiofx.AudioEffect, int, byte[], byte[]);
+  }
+
+}
+
+package android.media.audiopolicy {
+
+  public static class AudioPolicy.Builder {
+    method @NonNull public android.media.audiopolicy.AudioPolicy.Builder setIsTestFocusPolicy(boolean);
+  }
+
+}
+
+package android.media.metrics {
+
+  public final class LogSessionId {
+    ctor public LogSessionId(@NonNull String);
+  }
+
+}
+
+package android.media.tv {
+
+  public final class TvInputManager {
+    method public void addHardwareDevice(int);
+    method public void removeHardwareDevice(int);
+  }
+
+}
+
+package android.media.tv.tuner {
+
+  public final class TunerVersionChecker {
+    method public static int getMajorVersion(int);
+    method public static int getMinorVersion(int);
+    method public static boolean isHigherOrEqualVersionTo(int);
+    method public static boolean supportTunerVersion(int);
+  }
+
+}
+
+package android.net {
+
+  public class EthernetManager {
+    method public void setIncludeTestInterfaces(boolean);
+  }
+
+  public final class IpSecManager {
+    field public static final int INVALID_SECURITY_PARAMETER_INDEX = 0; // 0x0
+  }
+
+  public class NetworkPolicyManager {
+    method public boolean getRestrictBackground();
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidNetworkingBlocked(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.OBSERVE_NETWORK_POLICY) public boolean isUidRestrictedOnMeteredNetworks(int);
+    method @NonNull public static String resolveNetworkId(@NonNull android.net.wifi.WifiConfiguration);
+    method public void setRestrictBackground(boolean);
+  }
+
+  public class NetworkStack {
+    method public static void setServiceForTest(@Nullable android.os.IBinder);
+  }
+
+  public class NetworkWatchlistManager {
+    method @Nullable public byte[] getWatchlistConfigHash();
+  }
+
+  public class TrafficStats {
+    method public static long getLoopbackRxBytes();
+    method public static long getLoopbackRxPackets();
+    method public static long getLoopbackTxBytes();
+    method public static long getLoopbackTxPackets();
+  }
+
+}
+
+package android.os {
+
+  public final class BatteryStatsManager {
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void resetBattery(boolean);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void setBatteryLevel(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void setChargerAcOnline(boolean, boolean);
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void suspendBatteryInput();
+    method @RequiresPermission(android.Manifest.permission.DEVICE_POWER) public void unplugBattery(boolean);
+  }
+
+  public class Build {
+    method public static boolean is64BitAbi(String);
+    method public static boolean isDebuggable();
+    field public static final boolean IS_EMULATOR;
+  }
+
+  public static class Build.VERSION {
+    field public static final String[] ACTIVE_CODENAMES;
+    field public static final int DEVICE_INITIAL_SDK_INT;
+    field public static final int RESOURCES_SDK_INT;
+  }
+
+  public abstract class CombinedVibration implements android.os.Parcelable {
+    method public abstract long getDuration();
+    method @NonNull public static android.os.CombinedVibration.SequentialCombination startSequential();
+  }
+
+  public static final class CombinedVibration.Mono extends android.os.CombinedVibration {
+    method public long getDuration();
+    method @NonNull public android.os.VibrationEffect getEffect();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration.Mono> CREATOR;
+  }
+
+  public static final class CombinedVibration.Sequential extends android.os.CombinedVibration {
+    method @NonNull public java.util.List<java.lang.Integer> getDelays();
+    method public long getDuration();
+    method @NonNull public java.util.List<android.os.CombinedVibration> getEffects();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration.Sequential> CREATOR;
+  }
+
+  public static final class CombinedVibration.SequentialCombination {
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(int, @NonNull android.os.VibrationEffect);
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(int, @NonNull android.os.VibrationEffect, int);
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(@NonNull android.os.CombinedVibration);
+    method @NonNull public android.os.CombinedVibration.SequentialCombination addNext(@NonNull android.os.CombinedVibration, int);
+    method @NonNull public android.os.CombinedVibration combine();
+  }
+
+  public static final class CombinedVibration.Stereo extends android.os.CombinedVibration {
+    method public long getDuration();
+    method @NonNull public android.util.SparseArray<android.os.VibrationEffect> getEffects();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.CombinedVibration.Stereo> CREATOR;
+  }
+
+  public class DeviceIdleManager {
+    method @NonNull public String[] getSystemPowerWhitelist();
+    method @NonNull public String[] getSystemPowerWhitelistExceptIdle();
+  }
+
+  public class Environment {
+    method public static java.io.File buildPath(java.io.File, java.lang.String...);
+  }
+
+  public final class FileUtils {
+    method public static boolean contains(java.io.File, java.io.File);
+    method @NonNull public static byte[] digest(@NonNull java.io.File, @NonNull String) throws java.io.IOException, java.security.NoSuchAlgorithmException;
+    method @NonNull public static byte[] digest(@NonNull java.io.InputStream, @NonNull String) throws java.io.IOException, java.security.NoSuchAlgorithmException;
+  }
+
+  public final class MessageQueue {
+    method public int postSyncBarrier();
+    method public void removeSyncBarrier(int);
+  }
+
+  public final class PackageTagsList implements android.os.Parcelable {
+    method public boolean contains(@NonNull String, @Nullable String);
+    method public boolean contains(@NonNull android.os.PackageTagsList);
+    method public boolean containsAll(@NonNull String);
+    method public int describeContents();
+    method public boolean includes(@NonNull String);
+    method public boolean isEmpty();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.PackageTagsList> CREATOR;
+  }
+
+  public static final class PackageTagsList.Builder {
+    ctor public PackageTagsList.Builder();
+    ctor public PackageTagsList.Builder(int);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull String);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull String, @Nullable String);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull android.os.PackageTagsList);
+    method @NonNull public android.os.PackageTagsList.Builder add(@NonNull java.util.Map<java.lang.String,? extends java.util.Set<java.lang.String>>);
+    method @NonNull public android.os.PackageTagsList build();
+    method @NonNull public android.os.PackageTagsList.Builder clear();
+  }
+
+  public final class Parcel {
+    method public boolean allowSquashing();
+    method public int readExceptionCode();
+    method public void restoreAllowSquashing(boolean);
+  }
+
+  public class ParcelFileDescriptor implements java.io.Closeable android.os.Parcelable {
+    method public static java.io.File getFile(java.io.FileDescriptor) throws java.io.IOException;
+  }
+
+  public final class PowerManager {
+    field public static final String ACTION_ENHANCED_DISCHARGE_PREDICTION_CHANGED = "android.os.action.ENHANCED_DISCHARGE_PREDICTION_CHANGED";
+  }
+
+  public class Process {
+    method public static final int getThreadScheduler(int) throws java.lang.IllegalArgumentException;
+    field public static final int FIRST_APP_ZYGOTE_ISOLATED_UID = 90000; // 0x15f90
+    field public static final int FIRST_ISOLATED_UID = 99000; // 0x182b8
+    field public static final int LAST_APP_ZYGOTE_ISOLATED_UID = 98999; // 0x182b7
+    field public static final int LAST_ISOLATED_UID = 99999; // 0x1869f
+    field public static final int NFC_UID = 1027; // 0x403
+    field public static final int NUM_UIDS_PER_APP_ZYGOTE = 100; // 0x64
+  }
+
+  public final class StrictMode {
+    method public static void conditionallyCheckInstanceCounts();
+    method public static void setViolationLogger(android.os.StrictMode.ViolationLogger);
+  }
+
+  public static final class StrictMode.ThreadPolicy.Builder {
+    method @NonNull public android.os.StrictMode.ThreadPolicy.Builder detectExplicitGc();
+  }
+
+  public static final class StrictMode.ViolationInfo implements android.os.Parcelable {
+    ctor public StrictMode.ViolationInfo(android.os.Parcel);
+    ctor public StrictMode.ViolationInfo(android.os.Parcel, boolean);
+    method public int describeContents();
+    method public void dump(android.util.Printer, String);
+    method public String getStackTrace();
+    method public Class<? extends android.os.strictmode.Violation> getViolationClass();
+    method public String getViolationDetails();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.StrictMode.ViolationInfo> CREATOR;
+    field public String broadcastIntentAction;
+    field public int durationMillis;
+    field public int numAnimationsRunning;
+    field public long numInstances;
+    field public String[] tags;
+    field public int violationNumThisLoop;
+    field public long violationUptimeMillis;
+  }
+
+  public static interface StrictMode.ViolationLogger {
+    method public void log(android.os.StrictMode.ViolationInfo);
+  }
+
+  public static final class StrictMode.VmPolicy.Builder {
+    method @NonNull public android.os.StrictMode.VmPolicy.Builder permitIncorrectContextUse();
+  }
+
+  public final class UserHandle implements android.os.Parcelable {
+    method public static int getUid(int, int);
+    method public static int getUserId(int);
+    method public static boolean isApp(int);
+    field public static final int MIN_SECONDARY_USER_ID = 10; // 0xa
+    field public static final int USER_ALL = -1; // 0xffffffff
+    field public static final int USER_NULL = -10000; // 0xffffd8f0
+    field public static final int USER_SYSTEM = 0; // 0x0
+  }
+
+  public class UserManager {
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createProfileForUser(@Nullable String, @NonNull String, int, int, @Nullable String[]);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createRestrictedProfile(@Nullable String);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo createUser(@Nullable String, @NonNull String, int);
+    method @Nullable @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.Set<java.lang.String> getPreInstallableSystemPackages(@NonNull String);
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public String getUserType();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public java.util.List<android.content.pm.UserInfo> getUsers(boolean, boolean, boolean);
+    method @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public boolean hasBaseUserRestriction(@NonNull String, @NonNull android.os.UserHandle);
+    method public static boolean isGuestUserEphemeral();
+    method public static boolean isSplitSystemUser();
+    method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.content.pm.UserInfo preCreateUser(@NonNull String) throws android.os.UserManager.UserOperationException;
+  }
+
+  public final class VibrationAttributes implements android.os.Parcelable {
+    method public int getAudioUsage();
+  }
+
+  public static final class VibrationAttributes.Builder {
+    ctor public VibrationAttributes.Builder(@NonNull android.media.AudioAttributes, @Nullable android.os.VibrationEffect);
+  }
+
+  public abstract class VibrationEffect implements android.os.Parcelable {
+    method public static android.os.VibrationEffect get(int);
+    method public static android.os.VibrationEffect get(int, boolean);
+    method @Nullable public static android.os.VibrationEffect get(android.net.Uri, android.content.Context);
+    method public abstract long getDuration();
+    method @NonNull public static android.os.VibrationEffect.WaveformBuilder startWaveform();
+    field public static final int EFFECT_POP = 4; // 0x4
+    field public static final int EFFECT_STRENGTH_LIGHT = 0; // 0x0
+    field public static final int EFFECT_STRENGTH_MEDIUM = 1; // 0x1
+    field public static final int EFFECT_STRENGTH_STRONG = 2; // 0x2
+    field public static final int EFFECT_TEXTURE_TICK = 21; // 0x15
+    field public static final int EFFECT_THUD = 3; // 0x3
+    field public static final int[] RINGTONES;
+  }
+
+  public static final class VibrationEffect.Composed extends android.os.VibrationEffect {
+    method @NonNull public android.os.VibrationEffect.Composed applyEffectStrength(int);
+    method public long getDuration();
+    method public int getRepeatIndex();
+    method @NonNull public java.util.List<android.os.vibrator.VibrationEffectSegment> getSegments();
+    method @NonNull public android.os.VibrationEffect.Composed resolve(int);
+    method @NonNull public android.os.VibrationEffect.Composed scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.VibrationEffect.Composed> CREATOR;
+  }
+
+  public static final class VibrationEffect.Composition {
+    method @NonNull public android.os.VibrationEffect.Composition addEffect(@NonNull android.os.VibrationEffect);
+    method @NonNull public android.os.VibrationEffect.Composition addEffect(@NonNull android.os.VibrationEffect, @IntRange(from=0) int);
+  }
+
+  public static final class VibrationEffect.WaveformBuilder {
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addRamp(@FloatRange(from=0.0f, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addRamp(@FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=-1.0F, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addStep(@FloatRange(from=0.0f, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect.WaveformBuilder addStep(@FloatRange(from=0.0f, to=1.0f) float, @FloatRange(from=-1.0F, to=1.0f) float, @IntRange(from=0) int);
+    method @NonNull public android.os.VibrationEffect build();
+    method @NonNull public android.os.VibrationEffect build(int);
+  }
+
+  public class VintfObject {
+    method public static String[] getHalNamesAndVersions();
+    method @NonNull public static String getPlatformSepolicyVersion();
+    method public static String getSepolicyVersion();
+    method public static Long getTargetFrameworkCompatibilityMatrixVersion();
+    method public static java.util.Map<java.lang.String,java.lang.String[]> getVndkSnapshots();
+    method public static String[] report();
+  }
+
+  public class VintfRuntimeInfo {
+    method public static String getCpuInfo();
+    method public static String getHardwareId();
+    method public static String getKernelVersion();
+    method public static String getNodeName();
+    method public static String getOsName();
+    method public static String getOsRelease();
+    method public static String getOsVersion();
+  }
+
+  public class WorkSource implements android.os.Parcelable {
+    method public boolean add(int);
+    method public boolean add(int, String);
+    method @Deprecated public android.os.WorkSource addReturningNewbs(android.os.WorkSource);
+    method @Deprecated public android.os.WorkSource[] setReturningDiffs(android.os.WorkSource);
+  }
+
+}
+
+package android.os.health {
+
+  public class HealthKeys {
+    ctor public HealthKeys();
+    field public static final int BASE_PACKAGE = 40000; // 0x9c40
+    field public static final int BASE_PID = 20000; // 0x4e20
+    field public static final int BASE_PROCESS = 30000; // 0x7530
+    field public static final int BASE_SERVICE = 50000; // 0xc350
+    field public static final int BASE_UID = 10000; // 0x2710
+    field public static final int TYPE_COUNT = 5; // 0x5
+    field public static final int TYPE_MEASUREMENT = 1; // 0x1
+    field public static final int TYPE_MEASUREMENTS = 4; // 0x4
+    field public static final int TYPE_STATS = 2; // 0x2
+    field public static final int TYPE_TIMER = 0; // 0x0
+    field public static final int TYPE_TIMERS = 3; // 0x3
+    field public static final int UNKNOWN_KEY = 0; // 0x0
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD}) public static @interface HealthKeys.Constant {
+    method public abstract int type();
+  }
+
+  public static class HealthKeys.Constants {
+    ctor public HealthKeys.Constants(Class);
+    method public String getDataType();
+    method public int getIndex(int, int);
+    method public int[] getKeys(int);
+    method public int getSize(int);
+  }
+
+  public class HealthStats {
+    ctor public HealthStats(android.os.Parcel);
+  }
+
+  public class HealthStatsParceler implements android.os.Parcelable {
+    ctor public HealthStatsParceler(android.os.health.HealthStatsWriter);
+    ctor public HealthStatsParceler(android.os.Parcel);
+    method public int describeContents();
+    method public android.os.health.HealthStats getHealthStats();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.health.HealthStatsParceler> CREATOR;
+  }
+
+  public class HealthStatsWriter {
+    ctor public HealthStatsWriter(android.os.health.HealthKeys.Constants);
+    method public void addMeasurement(int, long);
+    method public void addMeasurements(int, String, long);
+    method public void addStats(int, String, android.os.health.HealthStatsWriter);
+    method public void addTimer(int, int, long);
+    method public void addTimers(int, String, android.os.health.TimerStat);
+    method public void flattenToParcel(android.os.Parcel);
+  }
+
+}
+
+package android.os.storage {
+
+  public final class CrateInfo implements android.os.Parcelable {
+    ctor public CrateInfo(@NonNull CharSequence, long);
+    ctor public CrateInfo(@NonNull CharSequence);
+    method @Nullable public static android.os.storage.CrateInfo copyFrom(int, @Nullable String, @Nullable String);
+    method public int describeContents();
+    method public long getExpirationMillis();
+    method @NonNull public CharSequence getLabel();
+    method public void writeToParcel(@Nullable android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.storage.CrateInfo> CREATOR;
+  }
+
+  public class StorageManager {
+    method @NonNull public static java.util.UUID convert(@NonNull String);
+    method @NonNull public static String convert(@NonNull java.util.UUID);
+    method public boolean isAppIoBlocked(@NonNull java.util.UUID, int, int, int);
+    method public static boolean isUserKeyUnlocked(int);
+  }
+
+  public final class StorageVolume implements android.os.Parcelable {
+    method public String getPath();
+  }
+
+  public static final class StorageVolume.Builder {
+    ctor public StorageVolume.Builder(@NonNull String, @NonNull java.io.File, @NonNull String, @NonNull android.os.UserHandle, @NonNull String);
+    method @NonNull public android.os.storage.StorageVolume build();
+    method @NonNull public android.os.storage.StorageVolume.Builder setEmulated(boolean);
+    method @NonNull public android.os.storage.StorageVolume.Builder setPrimary(boolean);
+    method @NonNull public android.os.storage.StorageVolume.Builder setRemovable(boolean);
+    method @NonNull public android.os.storage.StorageVolume.Builder setStorageUuid(@Nullable java.util.UUID);
+    method @NonNull public android.os.storage.StorageVolume.Builder setUuid(@Nullable String);
+  }
+
+}
+
+package android.os.strictmode {
+
+  public final class ExplicitGcViolation extends android.os.strictmode.Violation {
+  }
+
+}
+
+package android.os.vibrator {
+
+  public final class PrebakedSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.PrebakedSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public long getDuration();
+    method public int getEffectId();
+    method public int getEffectStrength();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.PrebakedSegment resolve(int);
+    method @NonNull public android.os.vibrator.PrebakedSegment scale(float);
+    method public boolean shouldFallback();
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.PrebakedSegment> CREATOR;
+  }
+
+  public final class PrimitiveSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.PrimitiveSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public int getDelay();
+    method public long getDuration();
+    method public int getPrimitiveId();
+    method public float getScale();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.PrimitiveSegment resolve(int);
+    method @NonNull public android.os.vibrator.PrimitiveSegment scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.PrimitiveSegment> CREATOR;
+  }
+
+  public final class RampSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.RampSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public long getDuration();
+    method public float getEndAmplitude();
+    method public float getEndFrequency();
+    method public float getStartAmplitude();
+    method public float getStartFrequency();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.RampSegment resolve(int);
+    method @NonNull public android.os.vibrator.RampSegment scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.RampSegment> CREATOR;
+  }
+
+  public final class StepSegment extends android.os.vibrator.VibrationEffectSegment {
+    method @NonNull public android.os.vibrator.StepSegment applyEffectStrength(int);
+    method public int describeContents();
+    method public float getAmplitude();
+    method public long getDuration();
+    method public float getFrequency();
+    method public boolean hasNonZeroAmplitude();
+    method @NonNull public android.os.vibrator.StepSegment resolve(int);
+    method @NonNull public android.os.vibrator.StepSegment scale(float);
+    method public void validate();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.StepSegment> CREATOR;
+  }
+
+  public abstract class VibrationEffectSegment implements android.os.Parcelable {
+    method @NonNull public abstract <T extends android.os.vibrator.VibrationEffectSegment> T applyEffectStrength(int);
+    method public abstract long getDuration();
+    method public abstract boolean hasNonZeroAmplitude();
+    method @NonNull public abstract <T extends android.os.vibrator.VibrationEffectSegment> T resolve(int);
+    method @NonNull public abstract <T extends android.os.vibrator.VibrationEffectSegment> T scale(float);
+    method public abstract void validate();
+    field @NonNull public static final android.os.Parcelable.Creator<android.os.vibrator.VibrationEffectSegment> CREATOR;
+  }
+
+}
+
+package android.permission {
+
+  public final class PermGroupUsage {
+    ctor public PermGroupUsage(@NonNull String, int, @NonNull String, long, boolean, boolean, @Nullable CharSequence);
+    method @Nullable public CharSequence getAttribution();
+    method public long getLastAccess();
+    method @NonNull public String getPackageName();
+    method @NonNull public String getPermGroupName();
+    method public int getUid();
+    method public boolean isActive();
+    method public boolean isPhoneCall();
+  }
+
+  public final class PermissionControllerManager {
+    method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void countPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull android.permission.PermissionControllerManager.OnCountPermissionAppsResultCallback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getAppPermissions(@NonNull String, @NonNull android.permission.PermissionControllerManager.OnGetAppPermissionResultCallback, @Nullable android.os.Handler);
+    method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermission(@NonNull String, @NonNull String);
+  }
+
+  public static interface PermissionControllerManager.OnCountPermissionAppsResultCallback {
+    method public void onCountPermissionApps(int);
+  }
+
+  public static interface PermissionControllerManager.OnGetAppPermissionResultCallback {
+    method public void onGetAppPermissions(@NonNull java.util.List<android.permission.RuntimePermissionPresentationInfo>);
+  }
+
+  public final class PermissionManager {
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.permission.PermGroupUsage> getIndicatorAppOpUsageData();
+    method @NonNull @RequiresPermission(android.Manifest.permission.GET_APP_OPS_STATS) public java.util.List<android.permission.PermGroupUsage> getIndicatorAppOpUsageData(boolean);
+    method @NonNull public android.content.AttributionSource registerAttributionSource(@NonNull android.content.AttributionSource);
+  }
+
+}
+
+package android.print {
+
+  public final class PrintJobInfo implements android.os.Parcelable {
+    method public float getProgress();
+    method @Nullable public CharSequence getStatus(@NonNull android.content.pm.PackageManager);
+  }
+
+  public final class PrinterInfo implements android.os.Parcelable {
+    method @Nullable public android.graphics.drawable.Drawable loadIcon(@NonNull android.content.Context);
+  }
+
+}
+
+package android.provider {
+
+  public interface AndroidDeviceConfig {
+    field public static final String KEY_SYSTEM_GESTURES_EXCLUDED_BY_PRE_Q_STICKY_IMMERSIVE = "system_gestures_excluded_by_pre_q_sticky_immersive";
+    field public static final String KEY_SYSTEM_GESTURE_EXCLUSION_LIMIT_DP = "system_gesture_exclusion_limit_dp";
+  }
+
+  public static final class CalendarContract.Calendars implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.SyncColumns {
+    field public static final String[] SYNC_WRITABLE_COLUMNS;
+  }
+
+  public static final class CalendarContract.Events implements android.provider.BaseColumns android.provider.CalendarContract.CalendarColumns android.provider.CalendarContract.EventsColumns android.provider.CalendarContract.SyncColumns {
+    field public static final String[] SYNC_WRITABLE_COLUMNS;
+  }
+
+  public final class ContactsContract {
+    field public static final String HIDDEN_COLUMN_PREFIX = "x_";
+  }
+
+  public static final class ContactsContract.CommonDataKinds.Phone implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    field public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+  }
+
+  public static final class ContactsContract.PinnedPositions {
+    field public static final String UNDEMOTE_METHOD = "undemote";
+  }
+
+  public static final class ContactsContract.RawContactsEntity implements android.provider.BaseColumns android.provider.ContactsContract.DataColumns android.provider.ContactsContract.RawContactsColumns {
+    field public static final android.net.Uri CORP_CONTENT_URI;
+  }
+
+  public final class DeviceConfig {
+    field public static final String NAMESPACE_ALARM_MANAGER = "alarm_manager";
+    field public static final String NAMESPACE_ANDROID = "android";
+    field public static final String NAMESPACE_APP_COMPAT_OVERRIDES = "app_compat_overrides";
+    field public static final String NAMESPACE_CONSTRAIN_DISPLAY_APIS = "constrain_display_apis";
+    field public static final String NAMESPACE_DEVICE_IDLE = "device_idle";
+    field public static final String NAMESPACE_JOB_SCHEDULER = "jobscheduler";
+  }
+
+  public final class Settings {
+    field public static final int RESET_MODE_PACKAGE_DEFAULTS = 1; // 0x1
+  }
+
+  public static final class Settings.Global extends android.provider.Settings.NameValueTable {
+    field public static final String APP_OPS_CONSTANTS = "app_ops_constants";
+    field public static final String ARE_USER_DISABLED_HDR_FORMATS_ALLOWED = "are_user_disabled_hdr_formats_allowed";
+    field public static final String AUTOMATIC_POWER_SAVE_MODE = "automatic_power_save_mode";
+    field public static final String BATTERY_SAVER_CONSTANTS = "battery_saver_constants";
+    field public static final String DEVELOPMENT_ENABLE_NON_RESIZABLE_MULTI_WINDOW = "enable_non_resizable_multi_window";
+    field public static final String DISABLE_WINDOW_BLURS = "disable_window_blurs";
+    field public static final String DYNAMIC_POWER_SAVINGS_DISABLE_THRESHOLD = "dynamic_power_savings_disable_threshold";
+    field public static final String DYNAMIC_POWER_SAVINGS_ENABLED = "dynamic_power_savings_enabled";
+    field public static final String HIDDEN_API_BLACKLIST_EXEMPTIONS = "hidden_api_blacklist_exemptions";
+    field public static final String HIDDEN_API_POLICY = "hidden_api_policy";
+    field public static final String HIDE_ERROR_DIALOGS = "hide_error_dialogs";
+    field @Deprecated public static final String LOCATION_IGNORE_SETTINGS_PACKAGE_WHITELIST = "location_ignore_settings_package_whitelist";
+    field public static final String LOW_POWER_MODE = "low_power";
+    field public static final String LOW_POWER_MODE_STICKY = "low_power_sticky";
+    field @Deprecated public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
+    field public static final String OVERLAY_DISPLAY_DEVICES = "overlay_display_devices";
+    field public static final String SHOW_FIRST_CRASH_DIALOG = "show_first_crash_dialog";
+    field public static final String USER_DISABLED_HDR_FORMATS = "user_disabled_hdr_formats";
+    field public static final String USE_OPEN_WIFI_PACKAGE = "use_open_wifi_package";
+  }
+
+  public static final class Settings.Secure extends android.provider.Settings.NameValueTable {
+    field public static final String ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED = "accessibility_display_magnification_enabled";
+    field public static final String ACCESSIBILITY_MAGNIFICATION_CAPABILITY = "accessibility_magnification_capability";
+    field public static final String ACCESSIBILITY_MAGNIFICATION_MODE = "accessibility_magnification_mode";
+    field public static final int ACCESSIBILITY_MAGNIFICATION_MODE_ALL = 3; // 0x3
+    field public static final int ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN = 1; // 0x1
+    field public static final int ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW = 2; // 0x2
+    field public static final String ACCESSIBILITY_SHORTCUT_TARGET_SERVICE = "accessibility_shortcut_target_service";
+    field public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
+    field public static final String AUTOFILL_SERVICE = "autofill_service";
+    field public static final String CONTENT_CAPTURE_ENABLED = "content_capture_enabled";
+    field public static final String DISABLED_PRINT_SERVICES = "disabled_print_services";
+    field @Deprecated public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = "enabled_notification_policy_access_packages";
+    field public static final String ENABLED_VR_LISTENERS = "enabled_vr_listeners";
+    field public static final String IMMERSIVE_MODE_CONFIRMATIONS = "immersive_mode_confirmations";
+    field public static final String NOTIFICATION_BADGING = "notification_badging";
+    field public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
+    field public static final String POWER_MENU_LOCKED_SHOW_CONTENT = "power_menu_locked_show_content";
+    field public static final String SELECTED_SPELL_CHECKER = "selected_spell_checker";
+    field public static final String SELECTED_SPELL_CHECKER_SUBTYPE = "selected_spell_checker_subtype";
+    field public static final String SHOW_FIRST_CRASH_DIALOG_DEV_OPTION = "show_first_crash_dialog_dev_option";
+    field public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard";
+    field @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds";
+    field public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
+  }
+
+  public static final class Telephony.Sms.Intents {
+    field public static final String SMS_CARRIER_PROVISION_ACTION = "android.provider.Telephony.SMS_CARRIER_PROVISION";
+  }
+
+  public static final class VoicemailContract.Voicemails implements android.provider.BaseColumns android.provider.OpenableColumns {
+    field public static final String _DATA = "_data";
+  }
+
+}
+
+package android.security {
+
+  public final class KeyChain {
+    method @RequiresPermission("android.permission.MANAGE_CREDENTIAL_MANAGEMENT_APP") @WorkerThread public static boolean setCredentialManagementApp(@NonNull android.content.Context, @NonNull String, @NonNull android.security.AppUriAuthenticationPolicy);
+  }
+
+  public class KeyStoreException extends java.lang.Exception {
+    ctor public KeyStoreException(int, String);
+    method public int getErrorCode();
+  }
+
+}
+
+package android.security.keystore {
+
+  public static final class KeyGenParameterSpec.Builder {
+    method @NonNull public android.security.keystore.KeyGenParameterSpec.Builder setUniqueIdIncluded(boolean);
+  }
+
+  public final class KeyProtection implements java.security.KeyStore.ProtectionParameter {
+    method public long getBoundToSpecificSecureUserId();
+  }
+
+  public static final class KeyProtection.Builder {
+    method public android.security.keystore.KeyProtection.Builder setBoundToSpecificSecureUserId(long);
+  }
+
+}
+
+package android.service.autofill {
+
+  public final class CharSequenceTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
+  }
+
+  public final class CompositeUserData implements android.os.Parcelable {
+    ctor public CompositeUserData(@Nullable android.service.autofill.UserData, @NonNull android.service.autofill.UserData);
+    method public int describeContents();
+    method public String[] getCategoryIds();
+    method public android.os.Bundle getDefaultFieldClassificationArgs();
+    method @Nullable public String getFieldClassificationAlgorithm();
+    method @Nullable public String getFieldClassificationAlgorithmForCategory(@NonNull String);
+    method public android.util.ArrayMap<java.lang.String,java.lang.String> getFieldClassificationAlgorithms();
+    method public android.util.ArrayMap<java.lang.String,android.os.Bundle> getFieldClassificationArgs();
+    method public String[] getValues();
+    method public void writeToParcel(android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.service.autofill.CompositeUserData> CREATOR;
+  }
+
+  public final class CustomDescription implements android.os.Parcelable {
+    method @Nullable public android.util.SparseArray<android.service.autofill.InternalOnClickAction> getActions();
+  }
+
+  public final class Dataset implements android.os.Parcelable {
+    method @Nullable public android.content.IntentSender getAuthentication();
+    method @Nullable public android.content.ClipData getFieldContent();
+    method @Nullable public java.util.ArrayList<android.view.autofill.AutofillId> getFieldIds();
+    method @Nullable public java.util.ArrayList<android.view.autofill.AutofillValue> getFieldValues();
+    method @Nullable public String getId();
+    method public boolean isEmpty();
+  }
+
+  public static final class Dataset.Builder {
+    method @NonNull public android.service.autofill.Dataset.Builder setContent(@NonNull android.view.autofill.AutofillId, @Nullable android.content.ClipData);
+  }
+
+  public final class DateTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
+  }
+
+  public final class DateValueSanitizer extends android.service.autofill.InternalSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    method @Nullable public android.view.autofill.AutofillValue sanitize(@NonNull android.view.autofill.AutofillValue);
+  }
+
+  public final class FillResponse implements android.os.Parcelable {
+    method public int getFlags();
+  }
+
+  public final class ImageTransformation extends android.service.autofill.InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    method public void apply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, int) throws java.lang.Exception;
+  }
+
+  public abstract class InternalOnClickAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+    ctor public InternalOnClickAction();
+    method public abstract void onClick(@NonNull android.view.ViewGroup);
+  }
+
+  public abstract class InternalSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    ctor public InternalSanitizer();
+    method @Nullable public abstract android.view.autofill.AutofillValue sanitize(@NonNull android.view.autofill.AutofillValue);
+  }
+
+  public abstract class InternalTransformation implements android.os.Parcelable android.service.autofill.Transformation {
+    ctor public InternalTransformation();
+    method public static boolean batchApply(@NonNull android.service.autofill.ValueFinder, @NonNull android.widget.RemoteViews, @NonNull java.util.ArrayList<android.util.Pair<java.lang.Integer,android.service.autofill.InternalTransformation>>);
+  }
+
+  public abstract class InternalValidator implements android.os.Parcelable android.service.autofill.Validator {
+    ctor public InternalValidator();
+    method public abstract boolean isValid(@NonNull android.service.autofill.ValueFinder);
+  }
+
+  public final class LuhnChecksumValidator extends android.service.autofill.InternalValidator implements android.os.Parcelable android.service.autofill.Validator {
+    method public boolean isValid(@NonNull android.service.autofill.ValueFinder);
+  }
+
+  public final class RegexValidator extends android.service.autofill.InternalValidator implements android.os.Parcelable android.service.autofill.Validator {
+    method public boolean isValid(@NonNull android.service.autofill.ValueFinder);
+  }
+
+  public final class TextValueSanitizer extends android.service.autofill.InternalSanitizer implements android.os.Parcelable android.service.autofill.Sanitizer {
+    method @Nullable public android.view.autofill.AutofillValue sanitize(@NonNull android.view.autofill.AutofillValue);
+  }
+
+  public final class UserData implements android.os.Parcelable {
+    method public android.util.ArrayMap<java.lang.String,java.lang.String> getFieldClassificationAlgorithms();
+  }
+
+  public interface ValueFinder {
+    method @Nullable public default String findByAutofillId(@NonNull android.view.autofill.AutofillId);
+    method @Nullable public android.view.autofill.AutofillValue findRawValueByAutofillId(@NonNull android.view.autofill.AutofillId);
+  }
+
+  public final class VisibilitySetterAction extends android.service.autofill.InternalOnClickAction implements android.service.autofill.OnClickAction android.os.Parcelable {
+    method public void onClick(@NonNull android.view.ViewGroup);
+  }
+
+}
+
+package android.service.autofill.augmented {
+
+  public final class FillRequest {
+    method @NonNull public android.content.ComponentName getActivityComponent();
+    method @NonNull public android.view.autofill.AutofillId getFocusedId();
+    method @NonNull public android.view.autofill.AutofillValue getFocusedValue();
+    method @Nullable public android.app.assist.AssistStructure.ViewNode getFocusedViewNode();
+    method @Nullable public android.view.inputmethod.InlineSuggestionsRequest getInlineSuggestionsRequest();
+    method @Nullable public android.service.autofill.augmented.PresentationParams getPresentationParams();
+    method public int getTaskId();
+  }
+
+}
+
+package android.service.notification {
+
+  @Deprecated public abstract class ConditionProviderService extends android.app.Service {
+    method @Deprecated public boolean isBound();
+  }
+
+}
+
+package android.service.quickaccesswallet {
+
+  public interface QuickAccessWalletClient extends java.io.Closeable {
+    method public void addWalletServiceEventListener(@NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method public void addWalletServiceEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method @NonNull public static android.service.quickaccesswallet.QuickAccessWalletClient create(@NonNull android.content.Context);
+    method @Nullable public android.content.Intent createWalletIntent();
+    method @Nullable public android.content.Intent createWalletSettingsIntent();
+    method public void disconnect();
+    method public void getWalletCards(@NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.QuickAccessWalletClient.OnWalletCardsRetrievedCallback);
+    method public void getWalletCards(@NonNull java.util.concurrent.Executor, @NonNull android.service.quickaccesswallet.GetWalletCardsRequest, @NonNull android.service.quickaccesswallet.QuickAccessWalletClient.OnWalletCardsRetrievedCallback);
+    method public boolean isWalletFeatureAvailable();
+    method public boolean isWalletFeatureAvailableWhenDeviceLocked();
+    method public boolean isWalletServiceAvailable();
+    method public void notifyWalletDismissed();
+    method public void removeWalletServiceEventListener(@NonNull android.service.quickaccesswallet.QuickAccessWalletClient.WalletServiceEventListener);
+    method public void selectWalletCard(@NonNull android.service.quickaccesswallet.SelectWalletCardRequest);
+  }
+
+  public static interface QuickAccessWalletClient.OnWalletCardsRetrievedCallback {
+    method public void onWalletCardRetrievalError(@NonNull android.service.quickaccesswallet.GetWalletCardsError);
+    method public void onWalletCardsRetrieved(@NonNull android.service.quickaccesswallet.GetWalletCardsResponse);
+  }
+
+  public static interface QuickAccessWalletClient.WalletServiceEventListener {
+    method public void onWalletServiceEvent(@NonNull android.service.quickaccesswallet.WalletServiceEvent);
+  }
+
+}
+
+package android.service.quicksettings {
+
+  public class TileService extends android.app.Service {
+    method public static boolean isQuickSettingsSupported();
+  }
+
+}
+
+package android.service.voice {
+
+  public class AlwaysOnHotwordDetector implements android.service.voice.HotwordDetector {
+    method @RequiresPermission(allOf={android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAPTURE_AUDIO_HOTWORD}) public void triggerHardwareRecognitionEventForTest(int, int, boolean, int, int, int, boolean, @NonNull android.media.AudioFormat, @Nullable byte[]);
+  }
+
+  public final class VisibleActivityInfo implements android.os.Parcelable {
+    ctor public VisibleActivityInfo(int, @NonNull android.os.IBinder);
+  }
+
+}
+
+package android.service.watchdog {
+
+  public abstract class ExplicitHealthCheckService extends android.app.Service {
+    method public void setCallback(@Nullable android.os.RemoteCallback);
+  }
+
+}
+
+package android.speech {
+
+  public class SpeechRecognizer {
+    method @MainThread @NonNull public static android.speech.SpeechRecognizer createOnDeviceTestingSpeechRecognizer(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_SPEECH_RECOGNITION) public void setTemporaryOnDeviceRecognizer(@Nullable android.content.ComponentName);
+  }
+
+}
+
+package android.telecom {
+
+  public static class Call.Details {
+    method public String getTelecomCallId();
+  }
+
+  public final class CallAudioState implements android.os.Parcelable {
+    ctor public CallAudioState(boolean, int, int, @Nullable android.bluetooth.BluetoothDevice, @NonNull java.util.Collection<android.bluetooth.BluetoothDevice>);
+  }
+
+  public static final class ConnectionRequest.Builder {
+    ctor public ConnectionRequest.Builder();
+    method @NonNull public android.telecom.ConnectionRequest build();
+    method @NonNull public android.telecom.ConnectionRequest.Builder setAccountHandle(@NonNull android.telecom.PhoneAccountHandle);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setAddress(@NonNull android.net.Uri);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setExtras(@NonNull android.os.Bundle);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setIsAdhocConferenceCall(boolean);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setParticipants(@Nullable java.util.List<android.net.Uri>);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setRttPipeFromInCall(@NonNull android.os.ParcelFileDescriptor);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setRttPipeToInCall(@NonNull android.os.ParcelFileDescriptor);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setShouldShowIncomingCallUi(boolean);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setTelecomCallId(@NonNull String);
+    method @NonNull public android.telecom.ConnectionRequest.Builder setVideoState(int);
+  }
+
+  public abstract class ConnectionService extends android.app.Service {
+    method public void onBindClient(@Nullable android.content.Intent);
+  }
+
+}
+
+package android.telephony {
+
+  public final class BarringInfo implements android.os.Parcelable {
+    ctor public BarringInfo(@Nullable android.telephony.CellIdentity, @NonNull android.util.SparseArray<android.telephony.BarringInfo.BarringServiceInfo>);
+  }
+
+  public static final class BarringInfo.BarringServiceInfo implements android.os.Parcelable {
+    ctor public BarringInfo.BarringServiceInfo(int, boolean, int, int);
+  }
+
+  public class MbmsDownloadSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_DOWNLOAD_SERVICE_OVERRIDE_METADATA = "mbms-download-service-override";
+  }
+
+  public class MbmsGroupCallSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_GROUP_CALL_SERVICE_OVERRIDE_METADATA = "mbms-group-call-service-override";
+  }
+
+  public class MbmsStreamingSession implements java.lang.AutoCloseable {
+    field public static final String MBMS_STREAMING_SERVICE_OVERRIDE_METADATA = "mbms-streaming-service-override";
+  }
+
+  public final class ModemActivityInfo implements android.os.Parcelable {
+    ctor public ModemActivityInfo(long, int, int, @NonNull int[], int);
+    method public boolean isEmpty();
+    method public boolean isValid();
+  }
+
+  public class PhoneNumberUtils {
+    method public static int getMinMatchForTest();
+    method public static void setMinMatchForTest(int);
+  }
+
+  public final class PreciseDataConnectionState implements android.os.Parcelable {
+    ctor @Deprecated public PreciseDataConnectionState(int, int, int, @NonNull String, @Nullable android.net.LinkProperties, int);
+  }
+
+  public class ServiceState implements android.os.Parcelable {
+    method public void addNetworkRegistrationInfo(android.telephony.NetworkRegistrationInfo);
+    method public int getDataNetworkType();
+    method public int getDataRegState();
+    method public void setCdmaSystemAndNetworkId(int, int);
+    method public void setCellBandwidths(int[]);
+    method public void setChannelNumber(int);
+    method public void setDataRoamingType(int);
+    method public void setRilDataRadioTechnology(int);
+    method public void setRilVoiceRadioTechnology(int);
+    method public void setVoiceRoamingType(int);
+  }
+
+  public final class SmsManager {
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int checkSmsShortCodeDestination(String, String);
+    field public static final int SMS_CATEGORY_FREE_SHORT_CODE = 1; // 0x1
+    field public static final int SMS_CATEGORY_NOT_SHORT_CODE = 0; // 0x0
+    field public static final int SMS_CATEGORY_POSSIBLE_PREMIUM_SHORT_CODE = 3; // 0x3
+    field public static final int SMS_CATEGORY_PREMIUM_SHORT_CODE = 4; // 0x4
+    field public static final int SMS_CATEGORY_STANDARD_SHORT_CODE = 2; // 0x2
+  }
+
+  public class TelephonyManager {
+    method public int addDevicePolicyOverrideApn(@NonNull android.content.Context, @NonNull android.telephony.data.ApnSetting);
+    method public int getCarrierIdListVersion();
+    method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public java.util.List<java.lang.String> getCertsFromCarrierPrivilegeAccessRules();
+    method @NonNull public java.util.List<android.telephony.data.ApnSetting> getDevicePolicyOverrideApns(@NonNull android.content.Context);
+    method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public String getLine1AlphaTag();
+    method public android.util.Pair<java.lang.Integer,java.lang.Integer> getRadioHalVersion();
+    method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getSupportedRadioAccessFamily();
+    method public boolean modifyDevicePolicyOverrideApn(@NonNull android.content.Context, int, @NonNull android.telephony.data.ApnSetting);
+    method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void refreshUiccProfile();
+    method @Deprecated public void setCarrierTestOverride(String, String, String, String, String, String, String);
+    method public void setCarrierTestOverride(String, String, String, String, String, String, String, String, String);
+    field public static final int UNKNOWN_CARRIER_ID_LIST_VERSION = -1; // 0xffffffff
+  }
+
+}
+
+package android.telephony.emergency {
+
+  public final class EmergencyNumber implements java.lang.Comparable<android.telephony.emergency.EmergencyNumber> android.os.Parcelable {
+    field public static final int EMERGENCY_NUMBER_SOURCE_TEST = 32; // 0x20
+  }
+
+}
+
+package android.telephony.ims {
+
+  public final class ImsCallProfile implements android.os.Parcelable {
+    field public static final String EXTRA_OEM_EXTRAS = "android.telephony.ims.extra.OEM_EXTRAS";
+  }
+
+}
+
+package android.telephony.ims.feature {
+
+  @Deprecated public static class ImsFeature.Capabilities {
+    field @Deprecated protected int mCapabilities;
+  }
+
+}
+
+package android.text {
+
+  public final class FontConfig implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Alias> getAliases();
+    method @IntRange(from=0) public int getConfigVersion();
+    method @NonNull public java.util.List<android.text.FontConfig.FontFamily> getFontFamilies();
+    method public long getLastModifiedTimeMillis();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig> CREATOR;
+  }
+
+  public static final class FontConfig.Alias implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public String getName();
+    method @NonNull public String getOriginal();
+    method @IntRange(from=0, to=1000) public int getWeight();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Alias> CREATOR;
+  }
+
+  public static final class FontConfig.Font implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.io.File getFile();
+    method @Nullable public String getFontFamilyName();
+    method @NonNull public String getFontVariationSettings();
+    method @NonNull public String getPostScriptName();
+    method @NonNull public android.graphics.fonts.FontStyle getStyle();
+    method public int getTtcIndex();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.Font> CREATOR;
+  }
+
+  public static final class FontConfig.FontFamily implements android.os.Parcelable {
+    method public int describeContents();
+    method @NonNull public java.util.List<android.text.FontConfig.Font> getFontList();
+    method @NonNull public android.os.LocaleList getLocaleList();
+    method @Nullable public String getName();
+    method public int getVariant();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.text.FontConfig.FontFamily> CREATOR;
+    field public static final int VARIANT_COMPACT = 1; // 0x1
+    field public static final int VARIANT_DEFAULT = 0; // 0x0
+    field public static final int VARIANT_ELEGANT = 2; // 0x2
+  }
+
+  public static final class Selection.MemoryTextWatcher implements android.text.TextWatcher {
+    ctor public Selection.MemoryTextWatcher();
+    method public void afterTextChanged(android.text.Editable);
+    method public void beforeTextChanged(CharSequence, int, int, int);
+    method public void onTextChanged(CharSequence, int, int, int);
+  }
+
+}
+
+package android.transition {
+
+  public class TransitionManager {
+    method public android.transition.Transition getTransition(android.transition.Scene);
+  }
+
+}
+
+package android.util {
+
+  public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
+    method public E valueAtUnchecked(int);
+  }
+
+  public class FeatureFlagUtils {
+    ctor public FeatureFlagUtils();
+    method public static java.util.Map<java.lang.String,java.lang.String> getAllFeatureFlags();
+    method public static boolean isEnabled(android.content.Context, String);
+    method public static void setEnabled(android.content.Context, String, boolean);
+    field public static final String FFLAG_OVERRIDE_PREFIX = "sys.fflag.override.";
+    field public static final String FFLAG_PREFIX = "sys.fflag.";
+    field public static final String HEARING_AID_SETTINGS = "settings_bluetooth_hearing_aid";
+    field public static final String PERSIST_PREFIX = "persist.sys.fflag.override.";
+    field public static final String SETTINGS_WIFITRACKER2 = "settings_wifitracker2";
+  }
+
+  public class SparseArrayMap<K, V> {
+    ctor public SparseArrayMap();
+    method public void add(int, @NonNull K, @Nullable V);
+    method public void clear();
+    method public boolean contains(int, @NonNull K);
+    method public void delete(int);
+    method @Nullable public V delete(int, @NonNull K);
+    method public void forEach(@NonNull java.util.function.Consumer<V>);
+    method @Nullable public V get(int, @NonNull K);
+    method @Nullable public V getOrDefault(int, @NonNull K, V);
+    method public int indexOfKey(int);
+    method public int indexOfKey(int, @NonNull K);
+    method public int keyAt(int);
+    method @NonNull public K keyAt(int, int);
+    method public int numElementsForKey(int);
+    method public int numMaps();
+    method @Nullable public V valueAt(int, int);
+  }
+
+  public class TimeUtils {
+    method public static String formatDuration(long);
+  }
+
+}
+
+package android.util.proto {
+
+  public final class EncodedBuffer {
+    ctor public EncodedBuffer();
+    ctor public EncodedBuffer(int);
+    method public void dumpBuffers(String);
+    method public static void dumpByteString(String, String, byte[]);
+    method public void editRawFixed32(int, int);
+    method public byte[] getBytes(int);
+    method public int getChunkCount();
+    method public String getDebugString();
+    method public int getRawFixed32At(int);
+    method public static int getRawVarint32Size(int);
+    method public static int getRawVarint64Size(long);
+    method public static int getRawZigZag32Size(int);
+    method public static int getRawZigZag64Size(long);
+    method public int getReadPos();
+    method public int getReadableSize();
+    method public int getSize();
+    method public int getWriteBufIndex();
+    method public int getWriteIndex();
+    method public int getWritePos();
+    method public byte readRawByte();
+    method public int readRawFixed32();
+    method public long readRawUnsigned();
+    method public void rewindRead();
+    method public void rewindWriteTo(int);
+    method public void skipRead(int);
+    method public void startEditing();
+    method public void writeFromThisBuffer(int, int);
+    method public void writeRawBuffer(byte[]);
+    method public void writeRawBuffer(byte[], int, int);
+    method public void writeRawByte(byte);
+    method public void writeRawFixed32(int);
+    method public void writeRawFixed64(long);
+    method public void writeRawVarint32(int);
+    method public void writeRawVarint64(long);
+    method public void writeRawZigZag32(int);
+    method public void writeRawZigZag64(long);
+  }
+
+  public class ProtoParseException extends java.lang.RuntimeException {
+    ctor public ProtoParseException(String);
+  }
+
+  public class WireTypeMismatchException extends android.util.proto.ProtoParseException {
+    ctor public WireTypeMismatchException(String);
+  }
+
+}
+
+package android.view {
+
+  public abstract class ActionMode {
+    method public boolean isUiFocusable();
+  }
+
+  public final class Choreographer {
+    method public static long getFrameDelay();
+    method public void postCallback(int, Runnable, Object);
+    method public void postCallbackDelayed(int, Runnable, Object, long);
+    method public void removeCallbacks(int, Runnable, Object);
+    method public static void setFrameDelay(long);
+    field public static final int CALLBACK_ANIMATION = 1; // 0x1
+  }
+
+  public final class ContentInfo implements android.os.Parcelable {
+    method @NonNull public android.util.Pair<android.view.ContentInfo,android.view.ContentInfo> partition(@NonNull java.util.function.Predicate<android.content.ClipData.Item>);
+    method public void releasePermissions();
+  }
+
+  public static final class ContentInfo.Builder {
+    method @NonNull public android.view.ContentInfo.Builder setDragAndDropPermissions(@Nullable android.view.DragAndDropPermissions);
+    method @NonNull public android.view.ContentInfo.Builder setInputContentInfo(@Nullable android.view.inputmethod.InputContentInfo);
+  }
+
+  public final class Display {
+    method @NonNull public int[] getReportedHdrTypes();
+    method @NonNull public android.graphics.ColorSpace[] getSupportedWideColorGamut();
+    method public int getType();
+    method public boolean hasAccess(int);
+    field public static final int FLAG_TRUSTED = 128; // 0x80
+    field public static final int TYPE_EXTERNAL = 2; // 0x2
+    field public static final int TYPE_INTERNAL = 1; // 0x1
+    field public static final int TYPE_OVERLAY = 4; // 0x4
+    field public static final int TYPE_UNKNOWN = 0; // 0x0
+    field public static final int TYPE_VIRTUAL = 5; // 0x5
+    field public static final int TYPE_WIFI = 3; // 0x3
+  }
+
+  public class FocusFinder {
+    method public static void sort(android.view.View[], int, int, android.view.ViewGroup, boolean);
+  }
+
+  public final class InputDevice implements android.os.Parcelable {
+    method @RequiresPermission("android.permission.DISABLE_INPUT_DEVICE") public void disable();
+    method @RequiresPermission("android.permission.DISABLE_INPUT_DEVICE") public void enable();
+  }
+
+  public class KeyEvent extends android.view.InputEvent implements android.os.Parcelable {
+    method public static String actionToString(int);
+    method public final void setDisplayId(int);
+    field public static final int FLAG_IS_ACCESSIBILITY_EVENT = 2048; // 0x800
+    field public static final int LAST_KEYCODE = 288; // 0x120
+  }
+
+  public final class KeyboardShortcutGroup implements android.os.Parcelable {
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence, @NonNull java.util.List<android.view.KeyboardShortcutInfo>, boolean);
+    ctor public KeyboardShortcutGroup(@Nullable CharSequence, boolean);
+    method public boolean isSystemGroup();
+  }
+
+  public abstract class LayoutInflater {
+    method public void setPrecompiledLayoutsEnabledForTesting(boolean);
+  }
+
+  public final class MotionEvent extends android.view.InputEvent implements android.os.Parcelable {
+    method public void setActionButton(int);
+    method public void setButtonState(int);
+    method public void setDisplayId(int);
+    field public static final int FLAG_IS_ACCESSIBILITY_EVENT = 2048; // 0x800
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD}) public @interface RemotableViewMethod {
+    method public abstract String asyncImpl() default "";
+  }
+
+  public final class SurfaceControl implements android.os.Parcelable {
+    ctor public SurfaceControl(@NonNull android.view.SurfaceControl, @NonNull String);
+    method public static long acquireFrameRateFlexibilityToken();
+    method @NonNull public static android.os.IBinder getInternalDisplayToken();
+    method public boolean isSameSurface(@NonNull android.view.SurfaceControl);
+    method public static void overrideHdrTypes(@NonNull android.os.IBinder, @NonNull int[]);
+    method public static void releaseFrameRateFlexibilityToken(long);
+  }
+
+  public class SurfaceControlViewHost {
+    method public void relayout(android.view.WindowManager.LayoutParams);
+    method public void setView(@NonNull android.view.View, @NonNull android.view.WindowManager.LayoutParams);
+  }
+
+  @UiThread public class View implements android.view.accessibility.AccessibilityEventSource android.graphics.drawable.Drawable.Callback android.view.KeyEvent.Callback {
+    method public android.view.View getTooltipView();
+    method public boolean isAutofilled();
+    method public static boolean isDefaultFocusHighlightEnabled();
+    method public boolean isDefaultFocusHighlightNeeded(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable);
+    method protected void resetResolvedDrawables();
+    method public void resetResolvedLayoutDirection();
+    method public void resetResolvedPadding();
+    method public void resetResolvedTextAlignment();
+    method public void resetResolvedTextDirection();
+    method public void resetRtlProperties();
+    method public boolean restoreFocusInCluster(int);
+    method public boolean restoreFocusNotInCluster();
+    method public void setAutofilled(boolean, boolean);
+    method public final void setFocusedInCluster();
+    method public void setIsRootNamespace(boolean);
+    method public final void setShowingLayoutBounds(boolean);
+  }
+
+  public class ViewConfiguration {
+    method public long getDeviceGlobalActionKeyTimeout();
+    method public static int getHoverTooltipHideShortTimeout();
+    method public static int getHoverTooltipHideTimeout();
+    method public static int getHoverTooltipShowTimeout();
+    method public static int getLongPressTooltipHideTimeout();
+  }
+
+  public class ViewDebug {
+    method @Deprecated @Nullable public static AutoCloseable startRenderingCommandsCapture(android.view.View, java.util.concurrent.Executor, java.util.function.Function<android.graphics.Picture,java.lang.Boolean>);
+    method @Nullable public static AutoCloseable startRenderingCommandsCapture(android.view.View, java.util.concurrent.Executor, java.util.concurrent.Callable<java.io.OutputStream>);
+  }
+
+  public abstract class Window {
+    method @Nullable public android.view.View getNavigationBarBackgroundView();
+    method @Nullable public android.view.View getStatusBarBackgroundView();
+  }
+
+  public interface WindowManager extends android.view.ViewManager {
+    method public default int getDisplayImePolicy(int);
+    method public default void holdLock(android.os.IBinder, int);
+    method public default boolean isTaskSnapshotSupported();
+    method public default void setDisplayImePolicy(int, int);
+    method public default void setShouldShowSystemDecors(int, boolean);
+    method public default void setShouldShowWithInsecureKeyguard(int, boolean);
+    method public default boolean shouldShowSystemDecors(int);
+    field public static final int DISPLAY_IME_POLICY_FALLBACK_DISPLAY = 1; // 0x1
+    field public static final int DISPLAY_IME_POLICY_HIDE = 2; // 0x2
+    field public static final int DISPLAY_IME_POLICY_LOCAL = 0; // 0x0
+  }
+
+  public static class WindowManager.LayoutParams extends android.view.ViewGroup.LayoutParams implements android.os.Parcelable {
+    method @Nullable public final android.os.IBinder getWindowContextToken();
+    method public final void setWindowContextToken(@NonNull android.os.IBinder);
+    field public static final int ACCESSIBILITY_TITLE_CHANGED = 33554432; // 0x2000000
+    field public static final int PRIVATE_FLAG_NO_MOVE_ANIMATION = 64; // 0x40
+    field public CharSequence accessibilityTitle;
+    field public int privateFlags;
+  }
+
+}
+
+package android.view.accessibility {
+
+  public final class AccessibilityManager {
+    method public void addAccessibilityServicesStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener, @Nullable android.os.Handler);
+    method @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACCESSIBILITY) public java.util.List<java.lang.String> getAccessibilityShortcutTargets(int);
+    method public void removeAccessibilityServicesStateChangeListener(@NonNull android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener);
+  }
+
+  public static interface AccessibilityManager.AccessibilityServicesStateChangeListener {
+    method public void onAccessibilityServicesStateChanged(android.view.accessibility.AccessibilityManager);
+  }
+
+  public class AccessibilityNodeInfo implements android.os.Parcelable {
+    method public void addChild(@NonNull android.os.IBinder);
+    method public long getSourceNodeId();
+    method public void setLeashedParent(@Nullable android.os.IBinder, int);
+    method public static void setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger);
+    method public void writeToParcelNoRecycle(android.os.Parcel, int);
+  }
+
+  public static final class AccessibilityNodeInfo.TouchDelegateInfo implements android.os.Parcelable {
+    method public long getAccessibilityIdForRegion(@NonNull android.graphics.Region);
+  }
+
+  public final class AccessibilityWindowInfo implements android.os.Parcelable {
+    method public static void setNumInstancesInUseCounter(java.util.concurrent.atomic.AtomicInteger);
+  }
+
+}
+
+package android.view.animation {
+
+  public class AnimationUtils {
+    method public static void lockAnimationClock(long);
+    method public static void unlockAnimationClock();
+  }
+
+}
+
+package android.view.autofill {
+
+  public final class AutofillId implements android.os.Parcelable {
+    ctor public AutofillId(int);
+    ctor public AutofillId(@NonNull android.view.autofill.AutofillId, int);
+    ctor public AutofillId(int, int);
+    ctor public AutofillId(@NonNull android.view.autofill.AutofillId, long, int);
+    method public boolean equalsIgnoreSession(@Nullable android.view.autofill.AutofillId);
+    method public boolean isNonVirtual();
+    method @NonNull public static android.view.autofill.AutofillId withoutSession(@NonNull android.view.autofill.AutofillId);
+  }
+
+  public final class AutofillManager {
+    field public static final String DEVICE_CONFIG_AUTOFILL_SMART_SUGGESTION_SUPPORTED_MODES = "smart_suggestion_supported_modes";
+    field public static final int FLAG_SMART_SUGGESTION_OFF = 0; // 0x0
+    field public static final int FLAG_SMART_SUGGESTION_SYSTEM = 1; // 0x1
+    field public static final int MAX_TEMP_AUGMENTED_SERVICE_DURATION_MS = 120000; // 0x1d4c0
+  }
+
+}
+
+package android.view.contentcapture {
+
+  public final class ContentCaptureManager {
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_CAPTURE) public static void resetTemporaryService(int);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_CAPTURE) public static void setDefaultServiceEnabled(int, boolean);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_CONTENT_CAPTURE) public static void setTemporaryService(int, @NonNull String, int);
+    field public static final String DEVICE_CONFIG_PROPERTY_IDLE_FLUSH_FREQUENCY = "idle_flush_frequency";
+    field public static final String DEVICE_CONFIG_PROPERTY_LOGGING_LEVEL = "logging_level";
+    field public static final String DEVICE_CONFIG_PROPERTY_LOG_HISTORY_SIZE = "log_history_size";
+    field public static final String DEVICE_CONFIG_PROPERTY_MAX_BUFFER_SIZE = "max_buffer_size";
+    field public static final String DEVICE_CONFIG_PROPERTY_SERVICE_EXPLICITLY_ENABLED = "service_explicitly_enabled";
+    field public static final String DEVICE_CONFIG_PROPERTY_TEXT_CHANGE_FLUSH_FREQUENCY = "text_change_flush_frequency";
+    field public static final int LOGGING_LEVEL_DEBUG = 1; // 0x1
+    field public static final int LOGGING_LEVEL_OFF = 0; // 0x0
+    field public static final int LOGGING_LEVEL_VERBOSE = 2; // 0x2
+  }
+
+  public final class ViewNode extends android.app.assist.AssistStructure.ViewNode {
+    method @Nullable public static android.view.contentcapture.ViewNode readFromParcel(@NonNull android.os.Parcel);
+    method public static void writeToParcel(@NonNull android.os.Parcel, @Nullable android.view.contentcapture.ViewNode, int);
+  }
+
+  public static final class ViewNode.ViewStructureImpl extends android.view.ViewStructure {
+    ctor public ViewNode.ViewStructureImpl(@NonNull android.view.View);
+    ctor public ViewNode.ViewStructureImpl(@NonNull android.view.autofill.AutofillId, long, int);
+    method public int addChildCount(int);
+    method public void asyncCommit();
+    method public android.view.ViewStructure asyncNewChild(int);
+    method public android.view.autofill.AutofillId getAutofillId();
+    method public int getChildCount();
+    method public android.os.Bundle getExtras();
+    method public CharSequence getHint();
+    method public android.view.contentcapture.ViewNode getNode();
+    method public android.graphics.Rect getTempRect();
+    method public CharSequence getText();
+    method public int getTextSelectionEnd();
+    method public int getTextSelectionStart();
+    method public boolean hasExtras();
+    method public android.view.ViewStructure newChild(int);
+    method public android.view.ViewStructure.HtmlInfo.Builder newHtmlInfoBuilder(String);
+    method public void setAccessibilityFocused(boolean);
+    method public void setActivated(boolean);
+    method public void setAlpha(float);
+    method public void setAssistBlocked(boolean);
+    method public void setAutofillHints(String[]);
+    method public void setAutofillId(android.view.autofill.AutofillId);
+    method public void setAutofillId(android.view.autofill.AutofillId, int);
+    method public void setAutofillOptions(CharSequence[]);
+    method public void setAutofillType(int);
+    method public void setAutofillValue(android.view.autofill.AutofillValue);
+    method public void setCheckable(boolean);
+    method public void setChecked(boolean);
+    method public void setChildCount(int);
+    method public void setClassName(String);
+    method public void setClickable(boolean);
+    method public void setContentDescription(CharSequence);
+    method public void setContextClickable(boolean);
+    method public void setDataIsSensitive(boolean);
+    method public void setDimens(int, int, int, int, int, int);
+    method public void setElevation(float);
+    method public void setEnabled(boolean);
+    method public void setFocusable(boolean);
+    method public void setFocused(boolean);
+    method public void setHint(CharSequence);
+    method public void setHtmlInfo(android.view.ViewStructure.HtmlInfo);
+    method public void setId(int, String, String, String);
+    method public void setInputType(int);
+    method public void setLocaleList(android.os.LocaleList);
+    method public void setLongClickable(boolean);
+    method public void setOpaque(boolean);
+    method public void setSelected(boolean);
+    method public void setText(CharSequence);
+    method public void setText(CharSequence, int, int);
+    method public void setTextLines(int[], int[]);
+    method public void setTextStyle(float, int, int, int);
+    method public void setTransformation(android.graphics.Matrix);
+    method public void setVisibility(int);
+    method public void setWebDomain(String);
+  }
+
+}
+
+package android.view.displayhash {
+
+  public final class DisplayHashManager {
+    method @RequiresPermission("android.permission.READ_FRAME_BUFFER") public void setDisplayHashThrottlingEnabled(boolean);
+  }
+
+}
+
+package android.view.inputmethod {
+
+  public final class InlineSuggestion implements android.os.Parcelable {
+    method @NonNull public static android.view.inputmethod.InlineSuggestion newInlineSuggestion(@NonNull android.view.inputmethod.InlineSuggestionInfo);
+  }
+
+  public final class InlineSuggestionInfo implements android.os.Parcelable {
+    method @NonNull public static android.view.inputmethod.InlineSuggestionInfo newInlineSuggestionInfo(@NonNull android.widget.inline.InlinePresentationSpec, @NonNull String, @Nullable String[], @NonNull String, boolean);
+  }
+
+  public final class InlineSuggestionsResponse implements android.os.Parcelable {
+    method @NonNull public static android.view.inputmethod.InlineSuggestionsResponse newInlineSuggestionsResponse(@NonNull java.util.List<android.view.inputmethod.InlineSuggestion>);
+  }
+
+  public final class InputMethodInfo implements android.os.Parcelable {
+    ctor public InputMethodInfo(@NonNull String, @NonNull String, @NonNull CharSequence, @NonNull String, int);
+  }
+
+  public final class InputMethodManager {
+    method public int getDisplayId();
+    method @NonNull @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) public java.util.List<android.view.inputmethod.InputMethodInfo> getInputMethodListAsUser(int);
+    method public boolean hasActiveInputConnection(@Nullable android.view.View);
+    method public boolean isInputMethodPickerShown();
+  }
+
+}
+
+package android.view.inspector {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD}) public @interface InspectableProperty {
+    method public abstract int attributeId() default android.content.res.Resources.ID_NULL;
+    method public abstract android.view.inspector.InspectableProperty.EnumEntry[] enumMapping() default {};
+    method public abstract android.view.inspector.InspectableProperty.FlagEntry[] flagMapping() default {};
+    method public abstract boolean hasAttributeId() default true;
+    method public abstract String name() default "";
+    method public abstract android.view.inspector.InspectableProperty.ValueType valueType() default android.view.inspector.InspectableProperty.ValueType.INFERRED;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface InspectableProperty.EnumEntry {
+    method public abstract String name();
+    method public abstract int value();
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE}) public static @interface InspectableProperty.FlagEntry {
+    method public abstract int mask() default 0;
+    method public abstract String name();
+    method public abstract int target();
+  }
+
+  public enum InspectableProperty.ValueType {
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType COLOR;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType GRAVITY;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType INFERRED;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType INT_ENUM;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType INT_FLAG;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType NONE;
+    enum_constant public static final android.view.inspector.InspectableProperty.ValueType RESOURCE_ID;
+  }
+
+}
+
+package android.view.textservice {
+
+  public final class SpellCheckerSubtype implements android.os.Parcelable {
+    field public static final int SUBTYPE_ID_NONE = 0; // 0x0
+  }
+
+}
+
+package android.widget {
+
+  public abstract class AbsListView extends android.widget.AdapterView<android.widget.ListAdapter> implements android.widget.Filter.FilterListener android.text.TextWatcher android.view.ViewTreeObserver.OnGlobalLayoutListener android.view.ViewTreeObserver.OnTouchModeChangeListener {
+    method public final boolean shouldDrawSelector();
+  }
+
+  public class CalendarView extends android.widget.FrameLayout {
+    method public boolean getBoundsForDate(long, android.graphics.Rect);
+  }
+
+  public class DatePicker extends android.widget.FrameLayout {
+    method @android.view.inspector.InspectableProperty(name="datePickerMode", enumMapping={@android.view.inspector.InspectableProperty.EnumEntry(value=android.widget.DatePicker.MODE_SPINNER, name="spinner"), @android.view.inspector.InspectableProperty.EnumEntry(value=android.widget.DatePicker.MODE_CALENDAR, name="calendar")}) public int getMode();
+    field public static final int MODE_CALENDAR = 2; // 0x2
+    field public static final int MODE_SPINNER = 1; // 0x1
+  }
+
+  @UiThread public final class Magnifier {
+    method @Nullable public android.graphics.Bitmap getContent();
+    method public static android.graphics.PointF getMagnifierDefaultSize();
+    method @Nullable public android.graphics.Bitmap getOriginalContent();
+    method public void setOnOperationCompleteCallback(android.widget.Magnifier.Callback);
+  }
+
+  public static interface Magnifier.Callback {
+    method public void onOperationComplete();
+  }
+
+  public class NumberPicker extends android.widget.LinearLayout {
+    method public CharSequence getDisplayedValueForCurrentSelection();
+  }
+
+  public class PopupMenu {
+    method public android.widget.ListView getMenuListView();
+  }
+
+  public class Spinner extends android.widget.AbsSpinner implements android.content.DialogInterface.OnClickListener {
+    method public boolean isPopupShowing();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextClock extends android.widget.TextView {
+    method public void disableClockTick();
+  }
+
+  @android.widget.RemoteViews.RemoteView public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
+    method public void onActivityResult(int, int, @Nullable android.content.Intent);
+    field public static final int PROCESS_TEXT_REQUEST_CODE = 100; // 0x64
+  }
+
+  public class TimePicker extends android.widget.FrameLayout {
+    method public android.view.View getAmView();
+    method public android.view.View getHourView();
+    method public android.view.View getMinuteView();
+    method @android.view.inspector.InspectableProperty(name="timePickerMode", enumMapping={@android.view.inspector.InspectableProperty.EnumEntry(name="clock", value=android.widget.TimePicker.MODE_CLOCK), @android.view.inspector.InspectableProperty.EnumEntry(name="spinner", value=android.widget.TimePicker.MODE_SPINNER)}) public int getMode();
+    method public android.view.View getPmView();
+    field public static final int MODE_CLOCK = 2; // 0x2
+    field public static final int MODE_SPINNER = 1; // 0x1
+  }
+
+  public class Toolbar extends android.view.ViewGroup {
+    method @Nullable public android.view.View getNavigationView();
+  }
+
+}
+
+package android.widget.inline {
+
+  public class InlineContentView extends android.view.ViewGroup {
+    method public void setChildSurfacePackageUpdater(@Nullable android.widget.inline.InlineContentView.SurfacePackageUpdater);
+  }
+
+  public static interface InlineContentView.SurfacePackageUpdater {
+    method public void getSurfacePackage(@NonNull java.util.function.Consumer<android.view.SurfaceControlViewHost.SurfacePackage>);
+    method public void onSurfacePackageReleased();
+  }
+
+}
+
+package android.window {
+
+  public final class DisplayAreaAppearedInfo implements android.os.Parcelable {
+    ctor public DisplayAreaAppearedInfo(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl);
+    method public int describeContents();
+    method @NonNull public android.window.DisplayAreaInfo getDisplayAreaInfo();
+    method @NonNull public android.view.SurfaceControl getLeash();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.DisplayAreaAppearedInfo> CREATOR;
+  }
+
+  public final class DisplayAreaInfo implements android.os.Parcelable {
+    ctor public DisplayAreaInfo(@NonNull android.window.WindowContainerToken, int, int);
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.DisplayAreaInfo> CREATOR;
+    field @NonNull public final android.content.res.Configuration configuration;
+    field public final int displayId;
+    field public final int featureId;
+    field @NonNull public final android.window.WindowContainerToken token;
+  }
+
+  public class DisplayAreaOrganizer extends android.window.WindowOrganizer {
+    method public void onDisplayAreaAppeared(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl);
+    method public void onDisplayAreaVanished(@NonNull android.window.DisplayAreaInfo);
+    method @CallSuper @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.window.DisplayAreaAppearedInfo> registerOrganizer(int);
+    field public static final int FEATURE_DEFAULT_TASK_CONTAINER = 1; // 0x1
+    field public static final int FEATURE_ONE_HANDED = 3; // 0x3
+    field public static final int FEATURE_ROOT = 0; // 0x0
+    field public static final int FEATURE_SYSTEM_FIRST = 0; // 0x0
+    field public static final int FEATURE_SYSTEM_LAST = 10000; // 0x2710
+    field public static final int FEATURE_UNDEFINED = -1; // 0xffffffff
+    field public static final int FEATURE_VENDOR_FIRST = 10001; // 0x2711
+    field public static final int FEATURE_WINDOWED_MAGNIFICATION = 4; // 0x4
+    field public static final int FEATURE_WINDOW_TOKENS = 2; // 0x2
+  }
+
+  public final class SplashScreenView extends android.widget.FrameLayout {
+    method @Nullable public android.view.View getBrandingView();
+  }
+
+  public final class TaskAppearedInfo implements android.os.Parcelable {
+    ctor public TaskAppearedInfo(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
+    method public int describeContents();
+    method @NonNull public android.view.SurfaceControl getLeash();
+    method @NonNull public android.app.ActivityManager.RunningTaskInfo getTaskInfo();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskAppearedInfo> CREATOR;
+  }
+
+  public final class TaskFragmentCreationParams implements android.os.Parcelable {
+    method @NonNull public android.os.IBinder getFragmentToken();
+    method @NonNull public android.graphics.Rect getInitialBounds();
+    method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizer();
+    method @NonNull public android.os.IBinder getOwnerToken();
+    method public int getWindowingMode();
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentCreationParams> CREATOR;
+  }
+
+  public static final class TaskFragmentCreationParams.Builder {
+    ctor public TaskFragmentCreationParams.Builder(@NonNull android.window.TaskFragmentOrganizerToken, @NonNull android.os.IBinder, @NonNull android.os.IBinder);
+    method @NonNull public android.window.TaskFragmentCreationParams build();
+    method @NonNull public android.window.TaskFragmentCreationParams.Builder setInitialBounds(@NonNull android.graphics.Rect);
+    method @NonNull public android.window.TaskFragmentCreationParams.Builder setWindowingMode(int);
+  }
+
+  public final class TaskFragmentInfo implements android.os.Parcelable {
+    method public boolean equalsForTaskFragmentOrganizer(@Nullable android.window.TaskFragmentInfo);
+    method @NonNull public java.util.List<android.os.IBinder> getActivities();
+    method @NonNull public android.content.res.Configuration getConfiguration();
+    method @NonNull public android.os.IBinder getFragmentToken();
+    method @NonNull public android.graphics.Point getPositionInParent();
+    method public int getRunningActivityCount();
+    method @NonNull public android.window.WindowContainerToken getToken();
+    method public int getWindowingMode();
+    method public boolean hasRunningActivity();
+    method public boolean isEmpty();
+    method public boolean isTaskClearedForReuse();
+    method public boolean isVisible();
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentInfo> CREATOR;
+  }
+
+  public class TaskFragmentOrganizer extends android.window.WindowOrganizer {
+    ctor public TaskFragmentOrganizer(@NonNull java.util.concurrent.Executor);
+    method @NonNull public java.util.concurrent.Executor getExecutor();
+    method @NonNull public android.window.TaskFragmentOrganizerToken getOrganizerToken();
+    method public void onTaskFragmentAppeared(@NonNull android.window.TaskFragmentInfo);
+    method public void onTaskFragmentError(@NonNull android.os.IBinder, @NonNull Throwable);
+    method public void onTaskFragmentInfoChanged(@NonNull android.window.TaskFragmentInfo);
+    method public void onTaskFragmentParentInfoChanged(@NonNull android.os.IBinder, @NonNull android.content.res.Configuration);
+    method public void onTaskFragmentVanished(@NonNull android.window.TaskFragmentInfo);
+    method @CallSuper public void registerOrganizer();
+    method @CallSuper public void unregisterOrganizer();
+  }
+
+  public final class TaskFragmentOrganizerToken implements android.os.Parcelable {
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.TaskFragmentOrganizerToken> CREATOR;
+  }
+
+  public class TaskOrganizer extends android.window.WindowOrganizer {
+    ctor public TaskOrganizer();
+    method @BinderThread public void copySplashScreenView(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void createRootTask(int, int, @Nullable android.os.IBinder);
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public boolean deleteRootTask(@NonNull android.window.WindowContainerToken);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public android.window.WindowContainerToken getImeTarget(int);
+    method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.app.ActivityManager.RunningTaskInfo> getRootTasks(int, @NonNull int[]);
+    method @BinderThread public void onAppSplashScreenViewRemoved(int);
+    method @BinderThread public void onBackPressedOnTaskRoot(@NonNull android.app.ActivityManager.RunningTaskInfo);
+    method @BinderThread public void onTaskAppeared(@NonNull android.app.ActivityManager.RunningTaskInfo, @NonNull android.view.SurfaceControl);
+    method @BinderThread public void onTaskInfoChanged(@NonNull android.app.ActivityManager.RunningTaskInfo);
+    method @BinderThread public void onTaskVanished(@NonNull android.app.ActivityManager.RunningTaskInfo);
+    method @CallSuper @NonNull @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public java.util.List<android.window.TaskAppearedInfo> registerOrganizer();
+    method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void setInterceptBackPressedOnTaskRoot(@NonNull android.window.WindowContainerToken, boolean);
+    method @CallSuper @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_TASKS) public void unregisterOrganizer();
+  }
+
+  public final class WindowContainerToken implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerToken> CREATOR;
+  }
+
+  public final class WindowContainerTransaction implements android.os.Parcelable {
+    ctor public WindowContainerTransaction();
+    method @NonNull public android.window.WindowContainerTransaction createTaskFragment(@NonNull android.window.TaskFragmentCreationParams);
+    method @NonNull public android.window.WindowContainerTransaction deleteTaskFragment(@NonNull android.window.WindowContainerToken);
+    method public int describeContents();
+    method @NonNull public android.window.WindowContainerTransaction reorder(@NonNull android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction reparent(@NonNull android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction reparentActivityToTaskFragment(@NonNull android.os.IBinder, @NonNull android.os.IBinder);
+    method @NonNull public android.window.WindowContainerTransaction reparentChildren(@NonNull android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken);
+    method @NonNull public android.window.WindowContainerTransaction reparentTasks(@Nullable android.window.WindowContainerToken, @Nullable android.window.WindowContainerToken, @Nullable int[], @Nullable int[], boolean);
+    method @NonNull public android.window.WindowContainerTransaction scheduleFinishEnterPip(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
+    method @NonNull public android.window.WindowContainerTransaction setActivityWindowingMode(@NonNull android.window.WindowContainerToken, int);
+    method @NonNull public android.window.WindowContainerTransaction setAdjacentRoots(@NonNull android.window.WindowContainerToken, @NonNull android.window.WindowContainerToken);
+    method @NonNull public android.window.WindowContainerTransaction setAdjacentTaskFragments(@NonNull android.os.IBinder, @Nullable android.os.IBinder, @Nullable android.window.WindowContainerTransaction.TaskFragmentAdjacentParams);
+    method @NonNull public android.window.WindowContainerTransaction setAppBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
+    method @NonNull public android.window.WindowContainerTransaction setBounds(@NonNull android.window.WindowContainerToken, @NonNull android.graphics.Rect);
+    method @NonNull public android.window.WindowContainerTransaction setBoundsChangeTransaction(@NonNull android.window.WindowContainerToken, @NonNull android.view.SurfaceControl.Transaction);
+    method @NonNull public android.window.WindowContainerTransaction setErrorCallbackToken(@NonNull android.os.IBinder);
+    method @NonNull public android.window.WindowContainerTransaction setFocusable(@NonNull android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction setHidden(@NonNull android.window.WindowContainerToken, boolean);
+    method @NonNull public android.window.WindowContainerTransaction setLaunchRoot(@NonNull android.window.WindowContainerToken, @Nullable int[], @Nullable int[]);
+    method @NonNull public android.window.WindowContainerTransaction setScreenSizeDp(@NonNull android.window.WindowContainerToken, int, int);
+    method @NonNull public android.window.WindowContainerTransaction setSmallestScreenWidthDp(@NonNull android.window.WindowContainerToken, int);
+    method @NonNull public android.window.WindowContainerTransaction setWindowingMode(@NonNull android.window.WindowContainerToken, int);
+    method @NonNull public android.window.WindowContainerTransaction startActivityInTaskFragment(@NonNull android.os.IBinder, @NonNull android.os.IBinder, @NonNull android.content.Intent, @Nullable android.os.Bundle);
+    method public void writeToParcel(@NonNull android.os.Parcel, int);
+    field @NonNull public static final android.os.Parcelable.Creator<android.window.WindowContainerTransaction> CREATOR;
+  }
+
+  public static class WindowContainerTransaction.TaskFragmentAdjacentParams {
+    ctor public WindowContainerTransaction.TaskFragmentAdjacentParams();
+    ctor public WindowContainerTransaction.TaskFragmentAdjacentParams(@NonNull android.os.Bundle);
+    method public void setShouldDelayPrimaryLastActivityRemoval(boolean);
+    method public void setShouldDelaySecondaryLastActivityRemoval(boolean);
+    method public boolean shouldDelayPrimaryLastActivityRemoval();
+    method public boolean shouldDelaySecondaryLastActivityRemoval();
+  }
+
+  public abstract class WindowContainerTransactionCallback {
+    ctor public WindowContainerTransactionCallback();
+    method public abstract void onTransactionReady(int, @NonNull android.view.SurfaceControl.Transaction);
+  }
+
+  public class WindowOrganizer {
+    ctor public WindowOrganizer();
+    method @RequiresPermission(value=android.Manifest.permission.MANAGE_ACTIVITY_TASKS, conditional=true) public int applySyncTransaction(@NonNull android.window.WindowContainerTransaction, @NonNull android.window.WindowContainerTransactionCallback);
+    method @RequiresPermission(value=android.Manifest.permission.MANAGE_ACTIVITY_TASKS, conditional=true) public void applyTransaction(@NonNull android.window.WindowContainerTransaction);
+  }
+
+  @UiContext public abstract class WindowProviderService extends android.app.Service {
+    ctor public WindowProviderService();
+    method public final void attachToWindowToken(@NonNull android.os.IBinder);
+    method @NonNull public int getInitialDisplayId();
+    method @CallSuper @Nullable public android.os.Bundle getWindowContextOptions();
+    method public abstract int getWindowType();
+  }
+
+}
+
diff --git a/32/test/api/com.android.future.usb.accessory-removed.txt b/32/test/api/com.android.future.usb.accessory-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.future.usb.accessory-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.future.usb.accessory.txt b/32/test/api/com.android.future.usb.accessory.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.future.usb.accessory.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.location.provider-removed.txt b/32/test/api/com.android.location.provider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.location.provider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.location.provider.txt b/32/test/api/com.android.location.provider.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.location.provider.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.media.remotedisplay-removed.txt b/32/test/api/com.android.media.remotedisplay-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.media.remotedisplay-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.media.remotedisplay.txt b/32/test/api/com.android.media.remotedisplay.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.media.remotedisplay.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.media.tv.remoteprovider-removed.txt b/32/test/api/com.android.media.tv.remoteprovider-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.media.tv.remoteprovider-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.media.tv.remoteprovider.txt b/32/test/api/com.android.media.tv.remoteprovider.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.media.tv.remoteprovider.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.mediadrm.signer-removed.txt b/32/test/api/com.android.mediadrm.signer-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.mediadrm.signer-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.mediadrm.signer.txt b/32/test/api/com.android.mediadrm.signer.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.mediadrm.signer.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.nfc_extras-removed.txt b/32/test/api/com.android.nfc_extras-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.nfc_extras-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/com.android.nfc_extras.txt b/32/test/api/com.android.nfc_extras.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/com.android.nfc_extras.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/javax.obex-removed.txt b/32/test/api/javax.obex-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/javax.obex-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/javax.obex.txt b/32/test/api/javax.obex.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/javax.obex.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/org.apache.http.legacy-removed.txt b/32/test/api/org.apache.http.legacy-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/org.apache.http.legacy-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/org.apache.http.legacy.txt b/32/test/api/org.apache.http.legacy.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/org.apache.http.legacy.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/api/removed.txt b/32/test/api/removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/32/test/api/removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/32/test/com.android.future.usb.accessory.jar b/32/test/com.android.future.usb.accessory.jar
new file mode 100644
index 0000000..c9e49a1
--- /dev/null
+++ b/32/test/com.android.future.usb.accessory.jar
Binary files differ
diff --git a/32/test/com.android.location.provider.jar b/32/test/com.android.location.provider.jar
new file mode 100644
index 0000000..f31b739
--- /dev/null
+++ b/32/test/com.android.location.provider.jar
Binary files differ
diff --git a/32/test/com.android.media.remotedisplay.jar b/32/test/com.android.media.remotedisplay.jar
new file mode 100644
index 0000000..1593ed0
--- /dev/null
+++ b/32/test/com.android.media.remotedisplay.jar
Binary files differ
diff --git a/32/test/com.android.media.tv.remoteprovider.jar b/32/test/com.android.media.tv.remoteprovider.jar
new file mode 100644
index 0000000..7c90a83
--- /dev/null
+++ b/32/test/com.android.media.tv.remoteprovider.jar
Binary files differ
diff --git a/32/test/com.android.mediadrm.signer.jar b/32/test/com.android.mediadrm.signer.jar
new file mode 100644
index 0000000..1942f06
--- /dev/null
+++ b/32/test/com.android.mediadrm.signer.jar
Binary files differ
diff --git a/32/test/com.android.nfc_extras.jar b/32/test/com.android.nfc_extras.jar
new file mode 100644
index 0000000..a921544
--- /dev/null
+++ b/32/test/com.android.nfc_extras.jar
Binary files differ
diff --git a/32/test/javax.obex.jar b/32/test/javax.obex.jar
new file mode 100644
index 0000000..5524768
--- /dev/null
+++ b/32/test/javax.obex.jar
Binary files differ
diff --git a/32/test/org.apache.http.legacy.jar b/32/test/org.apache.http.legacy.jar
new file mode 100644
index 0000000..c3654cd
--- /dev/null
+++ b/32/test/org.apache.http.legacy.jar
Binary files differ
diff --git a/current/core/android.jar b/current/core/android.jar
index 246ca2e..70142d7 100644
--- a/current/core/android.jar
+++ b/current/core/android.jar
Binary files differ
diff --git a/current/module-lib/android-non-updatable.jar b/current/module-lib/android-non-updatable.jar
index cf9979f..232b5d1 100644
--- a/current/module-lib/android-non-updatable.jar
+++ b/current/module-lib/android-non-updatable.jar
Binary files differ
diff --git a/current/module-lib/android.jar b/current/module-lib/android.jar
index d7a281e..1bc3cd7 100644
--- a/current/module-lib/android.jar
+++ b/current/module-lib/android.jar
Binary files differ
diff --git a/current/module-lib/android.net.ipsec.ike.jar b/current/module-lib/android.net.ipsec.ike.jar
index 5d54c19..7f546e6 100644
--- a/current/module-lib/android.net.ipsec.ike.jar
+++ b/current/module-lib/android.net.ipsec.ike.jar
Binary files differ
diff --git a/current/module-lib/framework-statsd.jar b/current/module-lib/framework-statsd.jar
index 949a7bd..141b45a 100644
--- a/current/module-lib/framework-statsd.jar
+++ b/current/module-lib/framework-statsd.jar
Binary files differ
diff --git a/current/public/android-non-updatable.jar b/current/public/android-non-updatable.jar
index 4f07aff..a217e8b 100644
--- a/current/public/android-non-updatable.jar
+++ b/current/public/android-non-updatable.jar
Binary files differ
diff --git a/current/public/android.jar b/current/public/android.jar
index 37e9122..32d7c47 100644
--- a/current/public/android.jar
+++ b/current/public/android.jar
Binary files differ
diff --git a/current/public/art.jar b/current/public/art.jar
index 0d80eab..2f64897 100644
--- a/current/public/art.jar
+++ b/current/public/art.jar
Binary files differ
diff --git a/current/public/core-for-system-modules.jar b/current/public/core-for-system-modules.jar
index 3a5fa54..7c8969e 100644
--- a/current/public/core-for-system-modules.jar
+++ b/current/public/core-for-system-modules.jar
Binary files differ
diff --git a/current/public/data/annotations.zip b/current/public/data/annotations.zip
index d160e7f..3d8a0bb 100644
--- a/current/public/data/annotations.zip
+++ b/current/public/data/annotations.zip
Binary files differ
diff --git a/current/public/data/api-versions-filtered.xml b/current/public/data/api-versions-filtered.xml
index 78a8f25..f27fcb7 100644
--- a/current/public/data/api-versions-filtered.xml
+++ b/current/public/data/api-versions-filtered.xml
@@ -114,6 +114,7 @@
 		<field name="INTERNAL_SYSTEM_WINDOW" removed="23" />
 		<field name="INTERNET" />
 		<field name="KILL_BACKGROUND_PROCESSES" since="8" />
+		<field name="LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" since="33" />
 		<field name="LOADER_USAGE_STATS" since="30" />
 		<field name="LOCATION_HARDWARE" since="18" />
 		<field name="MANAGE_ACCOUNTS" since="5" removed="23" />
@@ -137,7 +138,6 @@
 		<field name="PERSISTENT_ACTIVITY" deprecated="15" />
 		<field name="PROCESS_OUTGOING_CALLS" deprecated="29" />
 		<field name="QUERY_ALL_PACKAGES" since="30" />
-		<field name="READ_BASIC_PHONE_STATE" since="32" />
 		<field name="READ_CALENDAR" />
 		<field name="READ_CALL_LOG" since="16" />
 		<field name="READ_CONTACTS" />
@@ -1361,6 +1361,7 @@
 		<field name="shortcutLongLabel" since="25" />
 		<field name="shortcutShortLabel" since="25" />
 		<field name="shouldDisableView" />
+		<field name="shouldUseDefaultUnfoldTransition" since="33" />
 		<field name="showAsAction" since="11" />
 		<field name="showDefault" />
 		<field name="showDividers" since="11" />
@@ -2076,6 +2077,9 @@
 		<extends name="java/lang/Object" />
 		<method name="&lt;init&gt;()V" />
 		<field name="accessibilityActionContextClick" since="23" />
+		<field name="accessibilityActionDragCancel" since="33" />
+		<field name="accessibilityActionDragDrop" since="33" />
+		<field name="accessibilityActionDragStart" since="33" />
 		<field name="accessibilityActionHideTooltip" since="28" />
 		<field name="accessibilityActionImeEnter" since="30" />
 		<field name="accessibilityActionMoveWindow" since="26" />
@@ -6657,6 +6661,7 @@
 	</class>
 	<class name="android/app/TaskInfo" since="29">
 		<extends name="java/lang/Object" />
+		<method name="isVisible()Z" since="33" />
 		<field name="baseActivity" />
 		<field name="baseIntent" />
 		<field name="isRunning" />
@@ -6869,6 +6874,7 @@
 		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
 		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;" />
 		<method name="loadThumbnail(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;" />
+		<method name="shouldUseDefaultUnfoldTransition()Z" since="33" />
 		<method name="supportsMultipleDisplays()Z" since="29" />
 		<field name="CREATOR" />
 	</class>
@@ -9100,8 +9106,7 @@
 		<method name="connect(Landroid/bluetooth/BluetoothDevice;Z)Z" />
 		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;" />
 		<method name="getServices()Ljava/util/List;" />
-		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z" deprecated="32" />
-		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z[B)I" since="32" />
+		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z" />
 		<method name="readPhy(Landroid/bluetooth/BluetoothDevice;)V" since="26" />
 		<method name="removeService(Landroid/bluetooth/BluetoothGattService;)Z" />
 		<method name="sendResponse(Landroid/bluetooth/BluetoothDevice;III[B)Z" />
@@ -9376,7 +9381,6 @@
 		<method name="getServiceData()Ljava/util/Map;" />
 		<method name="getServiceSolicitationUuids()Ljava/util/List;" since="31" />
 		<method name="getServiceUuids()Ljava/util/List;" />
-		<method name="getTransportDiscoveryData()Ljava/util/List;" since="32" />
 		<field name="CREATOR" />
 	</class>
 	<class name="android/bluetooth/le/AdvertiseData$Builder" since="21">
@@ -9386,7 +9390,6 @@
 		<method name="addServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/AdvertiseData$Builder;" />
 		<method name="addServiceSolicitationUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;" since="31" />
 		<method name="addServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;" />
-		<method name="addTransportDiscoveryData(Landroid/bluetooth/le/TransportDiscoveryData;)Landroid/bluetooth/le/AdvertiseData$Builder;" since="32" />
 		<method name="build()Landroid/bluetooth/le/AdvertiseData;" />
 		<method name="setIncludeDeviceName(Z)Landroid/bluetooth/le/AdvertiseData$Builder;" />
 		<method name="setIncludeTxPowerLevel(Z)Landroid/bluetooth/le/AdvertiseData$Builder;" />
@@ -9639,29 +9642,6 @@
 		<method name="setReportDelay(J)Landroid/bluetooth/le/ScanSettings$Builder;" />
 		<method name="setScanMode(I)Landroid/bluetooth/le/ScanSettings$Builder;" />
 	</class>
-	<class name="android/bluetooth/le/TransportBlock" since="32">
-		<extends name="java/lang/Object" />
-		<implements name="android/os/Parcelable" />
-		<method name="&lt;init&gt;(III[B)V" />
-		<method name="getOrgId()I" />
-		<method name="getTdsFlags()I" />
-		<method name="getTransportData()[B" />
-		<method name="getTransportDataLength()I" />
-		<method name="toByteArray()[B" />
-		<method name="totalBytes()I" />
-		<field name="CREATOR" />
-	</class>
-	<class name="android/bluetooth/le/TransportDiscoveryData" since="32">
-		<extends name="java/lang/Object" />
-		<implements name="android/os/Parcelable" />
-		<method name="&lt;init&gt;(ILjava/util/List;)V" />
-		<method name="&lt;init&gt;([B)V" />
-		<method name="getTransportBlocks()Ljava/util/List;" />
-		<method name="getTransportDataType()I" />
-		<method name="toByteArray()[B" />
-		<method name="totalBytes()I" />
-		<field name="CREATOR" />
-	</class>
 	<class name="android/companion/AssociationRequest" since="26">
 		<extends name="java/lang/Object" />
 		<implements name="android/os/Parcelable" />
@@ -17564,6 +17544,7 @@
 		<field name="EDGE_AVAILABLE_EDGE_MODES" />
 		<field name="FLASH_INFO_AVAILABLE" />
 		<field name="HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES" />
+		<field name="INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP" since="33" />
 		<field name="INFO_SUPPORTED_HARDWARE_LEVEL" />
 		<field name="INFO_VERSION" since="28" />
 		<field name="JPEG_AVAILABLE_THUMBNAIL_SIZES" />
@@ -18249,6 +18230,12 @@
 		<method name="copyElements([Landroid/util/Rational;I)V" />
 		<method name="getElement(II)Landroid/util/Rational;" />
 	</class>
+	<class name="android/hardware/camera2/params/DeviceStateSensorOrientationMap" since="33">
+		<extends name="java/lang/Object" />
+		<method name="getSensorOrientation(J)I" />
+		<field name="FOLDED" />
+		<field name="NORMAL" />
+	</class>
 	<class name="android/hardware/camera2/params/ExtensionSessionConfiguration" since="31">
 		<extends name="java/lang/Object" />
 		<method name="&lt;init&gt;(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$StateCallback;)V" />
@@ -19749,8 +19736,10 @@
 		<method name="getAllowedCapturePolicy()I" since="29" />
 		<method name="getContentType()I" />
 		<method name="getFlags()I" />
+		<method name="getSpatializationBehavior()I" since="33" />
 		<method name="getUsage()I" />
 		<method name="getVolumeControlStream()I" since="26" />
+		<method name="isContentSpatialized()Z" since="33" />
 		<field name="ALLOW_CAPTURE_BY_ALL" since="29" />
 		<field name="ALLOW_CAPTURE_BY_NONE" since="29" />
 		<field name="ALLOW_CAPTURE_BY_SYSTEM" since="29" />
@@ -19763,6 +19752,8 @@
 		<field name="FLAG_AUDIBILITY_ENFORCED" />
 		<field name="FLAG_HW_AV_SYNC" />
 		<field name="FLAG_LOW_LATENCY" since="24" deprecated="26" />
+		<field name="SPATIALIZATION_BEHAVIOR_AUTO" since="33" />
+		<field name="SPATIALIZATION_BEHAVIOR_NEVER" since="33" />
 		<field name="USAGE_ALARM" />
 		<field name="USAGE_ASSISTANCE_ACCESSIBILITY" />
 		<field name="USAGE_ASSISTANCE_NAVIGATION_GUIDANCE" />
@@ -19789,7 +19780,9 @@
 		<method name="setContentType(I)Landroid/media/AudioAttributes$Builder;" />
 		<method name="setFlags(I)Landroid/media/AudioAttributes$Builder;" />
 		<method name="setHapticChannelsMuted(Z)Landroid/media/AudioAttributes$Builder;" since="29" />
+		<method name="setIsContentSpatialized(Z)Landroid/media/AudioAttributes$Builder;" since="33" />
 		<method name="setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;" />
+		<method name="setSpatializationBehavior(I)Landroid/media/AudioAttributes$Builder;" since="33" />
 		<method name="setUsage(I)Landroid/media/AudioAttributes$Builder;" />
 	</class>
 	<class name="android/media/AudioDescriptor" since="31">
@@ -19906,24 +19899,45 @@
 		<field name="CHANNEL_IN_Y_AXIS" since="5" />
 		<field name="CHANNEL_IN_Z_AXIS" since="5" />
 		<field name="CHANNEL_OUT_5POINT1" since="5" />
+		<field name="CHANNEL_OUT_5POINT1POINT2" since="33" />
+		<field name="CHANNEL_OUT_5POINT1POINT4" since="33" />
 		<field name="CHANNEL_OUT_7POINT1" since="5" deprecated="23" />
+		<field name="CHANNEL_OUT_7POINT1POINT2" since="33" />
+		<field name="CHANNEL_OUT_7POINT1POINT4" since="33" />
 		<field name="CHANNEL_OUT_7POINT1_SURROUND" since="23" />
+		<field name="CHANNEL_OUT_9POINT1POINT4" since="33" />
+		<field name="CHANNEL_OUT_9POINT1POINT6" since="33" />
 		<field name="CHANNEL_OUT_BACK_CENTER" since="5" />
 		<field name="CHANNEL_OUT_BACK_LEFT" since="5" />
 		<field name="CHANNEL_OUT_BACK_RIGHT" since="5" />
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_CENTER" since="33" />
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_LEFT" since="33" />
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_RIGHT" since="33" />
 		<field name="CHANNEL_OUT_DEFAULT" since="5" />
 		<field name="CHANNEL_OUT_FRONT_CENTER" since="5" />
 		<field name="CHANNEL_OUT_FRONT_LEFT" since="5" />
 		<field name="CHANNEL_OUT_FRONT_LEFT_OF_CENTER" since="5" />
 		<field name="CHANNEL_OUT_FRONT_RIGHT" since="5" />
 		<field name="CHANNEL_OUT_FRONT_RIGHT_OF_CENTER" since="5" />
+		<field name="CHANNEL_OUT_FRONT_WIDE_LEFT" since="33" />
+		<field name="CHANNEL_OUT_FRONT_WIDE_RIGHT" since="33" />
 		<field name="CHANNEL_OUT_LOW_FREQUENCY" since="5" />
+		<field name="CHANNEL_OUT_LOW_FREQUENCY_2" since="33" />
 		<field name="CHANNEL_OUT_MONO" since="5" />
 		<field name="CHANNEL_OUT_QUAD" since="5" />
 		<field name="CHANNEL_OUT_SIDE_LEFT" since="21" />
 		<field name="CHANNEL_OUT_SIDE_RIGHT" since="21" />
 		<field name="CHANNEL_OUT_STEREO" since="5" />
 		<field name="CHANNEL_OUT_SURROUND" since="5" />
+		<field name="CHANNEL_OUT_TOP_BACK_CENTER" since="33" />
+		<field name="CHANNEL_OUT_TOP_BACK_LEFT" since="33" />
+		<field name="CHANNEL_OUT_TOP_BACK_RIGHT" since="33" />
+		<field name="CHANNEL_OUT_TOP_CENTER" since="33" />
+		<field name="CHANNEL_OUT_TOP_FRONT_CENTER" since="33" />
+		<field name="CHANNEL_OUT_TOP_FRONT_LEFT" since="33" />
+		<field name="CHANNEL_OUT_TOP_FRONT_RIGHT" since="33" />
+		<field name="CHANNEL_OUT_TOP_SIDE_LEFT" since="33" />
+		<field name="CHANNEL_OUT_TOP_SIDE_RIGHT" since="33" />
 		<field name="CREATOR" since="24" />
 		<field name="ENCODING_AAC_ELD" since="28" />
 		<field name="ENCODING_AAC_HE_V1" since="28" />
@@ -19993,6 +20007,7 @@
 		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" since="17" />
 		<method name="getRingerMode()I" />
 		<method name="getRouting(I)I" deprecated="15" />
+		<method name="getSpatializer()Landroid/media/Spatializer;" since="33" />
 		<method name="getStreamMaxVolume(I)I" />
 		<method name="getStreamMinVolume(I)I" since="28" />
 		<method name="getStreamVolume(I)I" />
@@ -22096,6 +22111,7 @@
 		<field name="KEY_MAX_FPS_TO_ENCODER" since="29" />
 		<field name="KEY_MAX_HEIGHT" since="19" />
 		<field name="KEY_MAX_INPUT_SIZE" />
+		<field name="KEY_MAX_OUTPUT_CHANNEL_COUNT" since="33" />
 		<field name="KEY_MAX_PTS_GAP_TO_ENCODER" since="29" />
 		<field name="KEY_MAX_WIDTH" since="19" />
 		<field name="KEY_MIME" />
@@ -23344,6 +23360,22 @@
 		<extends name="java/lang/Object" />
 		<method name="onLoadComplete(Landroid/media/SoundPool;II)V" />
 	</class>
+	<class name="android/media/Spatializer" since="33">
+		<extends name="java/lang/Object" />
+		<method name="addOnSpatializerStateChangedListener(Ljava/util/concurrent/Executor;Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V" />
+		<method name="canBeSpatialized(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;)Z" />
+		<method name="getImmersiveAudioLevel()I" />
+		<method name="isAvailable()Z" />
+		<method name="isEnabled()Z" />
+		<method name="removeOnSpatializerStateChangedListener(Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V" />
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL" />
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_NONE" />
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_OTHER" />
+	</class>
+	<class name="android/media/Spatializer$OnSpatializerStateChangedListener" since="33">
+		<method name="onSpatializerAvailableChanged(Landroid/media/Spatializer;Z)V" />
+		<method name="onSpatializerEnabledChanged(Landroid/media/Spatializer;Z)V" />
+	</class>
 	<class name="android/media/SubtitleData" since="28">
 		<extends name="java/lang/Object" />
 		<method name="&lt;init&gt;(IJJ[B)V" since="29" />
@@ -26808,7 +26840,6 @@
 		<field name="CATEGORY_PAYMENT" />
 		<field name="EXTRA_CATEGORY" />
 		<field name="EXTRA_SERVICE_COMPONENT" />
-		<field name="EXTRA_USERID" since="32" />
 		<field name="SELECTION_MODE_ALWAYS_ASK" />
 		<field name="SELECTION_MODE_ASK_IF_CONFLICT" />
 		<field name="SELECTION_MODE_PREFER_DEFAULT" />
@@ -30207,7 +30238,7 @@
 		<field name="Q" since="29" />
 		<field name="R" since="30" />
 		<field name="S" since="31" />
-		<field name="TIRAMISU" since="32" />
+		<field name="S_V2" since="33" />
 	</class>
 	<class name="android/os/Bundle" since="1">
 		<extends name="android/os/BaseBundle" since="21" />
@@ -30847,16 +30878,15 @@
 		<method name="dataPosition()I" />
 		<method name="dataSize()I" />
 		<method name="enforceInterface(Ljava/lang/String;)V" />
-		<method name="enforceNoDataAvail()V" since="32" />
 		<method name="hasFileDescriptors()Z" />
 		<method name="hasFileDescriptors(II)Z" since="32" />
 		<method name="marshall()[B" />
 		<method name="obtain()Landroid/os/Parcel;" />
 		<method name="obtain(I)Landroid/os/Parcel;" removed="21" />
 		<method name="obtain(Landroid/os/IBinder;)Landroid/os/Parcel;" since="32" />
-		<method name="readArray(Ljava/lang/ClassLoader;)[Ljava/lang/Object;" deprecated="32" />
+		<method name="readArray(Ljava/lang/ClassLoader;)[Ljava/lang/Object;" />
 		<method name="readArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;" since="32" />
-		<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;" deprecated="32" />
+		<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;" />
 		<method name="readArrayList(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/ArrayList;" since="32" />
 		<method name="readBinderArray([Landroid/os/IBinder;)V" />
 		<method name="readBinderList(Ljava/util/List;)V" />
@@ -30874,33 +30904,32 @@
 		<method name="readFileDescriptor()Landroid/os/ParcelFileDescriptor;" />
 		<method name="readFloat()F" />
 		<method name="readFloatArray([F)V" />
-		<method name="readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;" deprecated="32" />
+		<method name="readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;" />
 		<method name="readHashMap(Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/HashMap;" since="32" />
 		<method name="readInt()I" />
 		<method name="readIntArray([I)V" />
 		<method name="readInterfaceArray([Landroid/os/IInterface;Ljava/util/function/Function;)V" since="32" />
 		<method name="readInterfaceList(Ljava/util/List;Ljava/util/function/Function;)V" since="32" />
-		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;)V" deprecated="32" />
+		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;)V" />
 		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)V" since="32" />
 		<method name="readLong()J" />
 		<method name="readLongArray([J)V" />
-		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V" deprecated="32" />
+		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V" />
 		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)V" since="32" />
-		<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;" deprecated="32" />
+		<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;" />
 		<method name="readParcelable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/os/Parcelable;" since="32" />
 		<method name="readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;" />
 		<method name="readParcelableArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;" since="32" />
-		<method name="readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;" since="30" deprecated="32" />
+		<method name="readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;" since="30" />
 		<method name="readParcelableCreator(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/os/Parcelable$Creator;" since="32" />
-		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;" since="29" deprecated="32" />
-		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/List;" since="32" />
+		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;" since="29" />
 		<method name="readPersistableBundle()Landroid/os/PersistableBundle;" since="21" />
 		<method name="readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;" since="21" />
-		<method name="readSerializable()Ljava/io/Serializable;" deprecated="32" />
+		<method name="readSerializable()Ljava/io/Serializable;" />
 		<method name="readSerializable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/io/Serializable;" since="32" />
 		<method name="readSize()Landroid/util/Size;" since="21" />
 		<method name="readSizeF()Landroid/util/SizeF;" since="21" />
-		<method name="readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;" deprecated="32" />
+		<method name="readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;" />
 		<method name="readSparseArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;" since="32" />
 		<method name="readSparseBooleanArray()Landroid/util/SparseBooleanArray;" />
 		<method name="readString()Ljava/lang/String;" />
@@ -34879,6 +34908,7 @@
 		<field name="ACTION_SEARCH_SETTINGS" since="8" />
 		<field name="ACTION_SECURITY_SETTINGS" />
 		<field name="ACTION_SETTINGS" />
+		<field name="ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY" since="33" />
 		<field name="ACTION_SHOW_REGULATORY_INFO" since="21" />
 		<field name="ACTION_SHOW_WORK_POLICY_INFO" since="30" />
 		<field name="ACTION_SOUND_SETTINGS" />
@@ -34919,6 +34949,8 @@
 		<field name="EXTRA_EASY_CONNECT_ERROR_CODE" since="30" />
 		<field name="EXTRA_INPUT_METHOD_ID" since="11" />
 		<field name="EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME" since="30" />
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY" since="33" />
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI" since="33" />
 		<field name="EXTRA_SUB_ID" since="28" />
 		<field name="EXTRA_WIFI_NETWORK_LIST" since="30" />
 		<field name="EXTRA_WIFI_NETWORK_RESULT_LIST" since="30" />
@@ -38937,6 +38969,12 @@
 		<method name="getEnd()I" />
 		<method name="getStart()I" />
 	</class>
+	<class name="android/service/voice/VisibleActivityInfo" since="33">
+		<extends name="java/lang/Object" />
+		<implements name="android/os/Parcelable" />
+		<method name="getActivityId()Landroid/service/voice/VoiceInteractionSession$ActivityId;" />
+		<field name="CREATOR" />
+	</class>
 	<class name="android/service/voice/VoiceInteractionService" since="21">
 		<extends name="android/app/Service" />
 		<method name="&lt;init&gt;()V" />
@@ -38996,6 +39034,7 @@
 		<method name="onTaskFinished(Landroid/content/Intent;I)V" since="23" />
 		<method name="onTaskStarted(Landroid/content/Intent;I)V" since="23" />
 		<method name="performDirectAction(Landroid/app/DirectAction;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29" />
+		<method name="registerVisibleActivityCallback(Ljava/util/concurrent/Executor;Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33" />
 		<method name="requestDirectActions(Landroid/service/voice/VoiceInteractionSession$ActivityId;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29" />
 		<method name="setContentView(Landroid/view/View;)V" />
 		<method name="setDisabledShowContext(I)V" since="23" />
@@ -39005,6 +39044,7 @@
 		<method name="show(Landroid/os/Bundle;I)V" since="23" />
 		<method name="startAssistantActivity(Landroid/content/Intent;)V" since="26" />
 		<method name="startVoiceActivity(Landroid/content/Intent;)V" since="23" />
+		<method name="unregisterVisibleActivityCallback(Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33" />
 		<field name="SHOW_SOURCE_ACTIVITY" since="24" />
 		<field name="SHOW_SOURCE_APPLICATION" since="23" />
 		<field name="SHOW_SOURCE_ASSIST_GESTURE" since="23" />
@@ -39077,6 +39117,10 @@
 		<method name="getExtras()Landroid/os/Bundle;" />
 		<method name="isActive()Z" />
 	</class>
+	<class name="android/service/voice/VoiceInteractionSession$VisibleActivityCallback" since="33">
+		<method name="onInvisible(Landroid/service/voice/VoiceInteractionSession$ActivityId;)V" />
+		<method name="onVisible(Landroid/service/voice/VisibleActivityInfo;)V" />
+	</class>
 	<class name="android/service/voice/VoiceInteractionSessionService" since="21">
 		<extends name="android/app/Service" />
 		<method name="&lt;init&gt;()V" />
@@ -41321,21 +41365,12 @@
 		<method name="getBands()Ljava/util/List;" />
 		<method name="getMccMncs()Ljava/util/List;" />
 		<method name="getPriority()I" />
-		<method name="getRadioAccessSpecifiers()Ljava/util/List;" since="32" />
 		<method name="getSubId()I" />
 		<field name="CREATOR" />
 		<field name="PRIORITY_HIGH" />
 		<field name="PRIORITY_LOW" />
 		<field name="PRIORITY_MED" />
 	</class>
-	<class name="android/telephony/AvailableNetworkInfo$Builder" since="32">
-		<extends name="java/lang/Object" />
-		<method name="&lt;init&gt;(I)V" />
-		<method name="build()Landroid/telephony/AvailableNetworkInfo;" />
-		<method name="setMccMncs(Ljava/util/List;)Landroid/telephony/AvailableNetworkInfo$Builder;" />
-		<method name="setPriority(I)Landroid/telephony/AvailableNetworkInfo$Builder;" />
-		<method name="setRadioAccessSpecifiers(Ljava/util/List;)Landroid/telephony/AvailableNetworkInfo$Builder;" />
-	</class>
 	<class name="android/telephony/BarringInfo" since="30">
 		<extends name="java/lang/Object" />
 		<implements name="android/os/Parcelable" />
@@ -44007,9 +44042,7 @@
 		<method name="isVoWiFiRoamingSettingEnabled()Z" />
 		<method name="isVoWiFiSettingEnabled()Z" />
 		<method name="isVtSettingEnabled()Z" />
-		<method name="registerImsStateCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsStateCallback;)V" since="32" />
 		<method name="registerMmTelCapabilityCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V" />
-		<method name="unregisterImsStateCallback(Landroid/telephony/ims/ImsStateCallback;)V" since="32" />
 		<method name="unregisterMmTelCapabilityCallback(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V" />
 		<field name="WIFI_MODE_CELLULAR_PREFERRED" />
 		<field name="WIFI_MODE_WIFI_ONLY" />
@@ -44026,9 +44059,7 @@
 		<method name="getRegistrationTransportType(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31" />
 		<method name="getUceAdapter()Landroid/telephony/ims/RcsUceAdapter;" />
 		<method name="registerImsRegistrationCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31" />
-		<method name="registerImsStateCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsStateCallback;)V" since="32" />
 		<method name="unregisterImsRegistrationCallback(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31" />
-		<method name="unregisterImsStateCallback(Landroid/telephony/ims/ImsStateCallback;)V" since="32" />
 		<field name="ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN" />
 	</class>
 	<class name="android/telephony/ims/ImsReasonInfo" since="30">
@@ -44224,19 +44255,6 @@
 		<field name="ATTR_EPDG_OVER_CELL_INTERNET" />
 		<field name="CREATOR" />
 	</class>
-	<class name="android/telephony/ims/ImsStateCallback" since="32">
-		<extends name="java/lang/Object" />
-		<method name="&lt;init&gt;()V" />
-		<method name="onAvailable()V" />
-		<method name="onError()V" />
-		<method name="onUnavailable(I)V" />
-		<field name="REASON_IMS_SERVICE_DISCONNECTED" />
-		<field name="REASON_IMS_SERVICE_NOT_READY" />
-		<field name="REASON_NO_IMS_SERVICE_CONFIGURED" />
-		<field name="REASON_SUBSCRIPTION_INACTIVE" />
-		<field name="REASON_UNKNOWN_PERMANENT_ERROR" />
-		<field name="REASON_UNKNOWN_TEMPORARY_ERROR" />
-	</class>
 	<class name="android/telephony/ims/RcsUceAdapter" since="30">
 		<extends name="java/lang/Object" />
 		<method name="isUceSettingEnabled()Z" />
@@ -44452,140 +44470,140 @@
 	</class>
 	<class name="android/test/ActivityInstrumentationTestCase" since="1" deprecated="3">
 		<extends name="android/test/ActivityTestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="32" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;Z)V" deprecated="32" />
-		<method name="testActivityTestCaseSetUpProperly()V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;Z)V" deprecated="33" />
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33" />
 	</class>
 	<class name="android/test/ActivityInstrumentationTestCase2" since="3" deprecated="24">
 		<extends name="android/test/ActivityTestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;)V" since="8" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" since="8" deprecated="33" />
 		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="15" />
-		<method name="setActivityInitialTouchMode(Z)V" deprecated="32" />
-		<method name="setActivityIntent(Landroid/content/Intent;)V" deprecated="32" />
+		<method name="setActivityInitialTouchMode(Z)V" deprecated="33" />
+		<method name="setActivityIntent(Landroid/content/Intent;)V" deprecated="33" />
 	</class>
 	<class name="android/test/ActivityTestCase" since="1" deprecated="24">
 		<extends name="android/test/InstrumentationTestCase" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="getActivity()Landroid/app/Activity;" deprecated="32" />
-		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="32" />
-		<method name="setActivity(Landroid/app/Activity;)V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33" />
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="setActivity(Landroid/app/Activity;)V" deprecated="33" />
 	</class>
 	<class name="android/test/ActivityUnitTestCase" since="1" deprecated="24">
 		<extends name="android/test/ActivityTestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="32" />
-		<method name="getFinishedActivityRequest()I" deprecated="32" />
-		<method name="getRequestedOrientation()I" deprecated="32" />
-		<method name="getStartedActivityIntent()Landroid/content/Intent;" deprecated="32" />
-		<method name="getStartedActivityRequest()I" deprecated="32" />
-		<method name="isFinishCalled()Z" deprecated="32" />
-		<method name="setActivityContext(Landroid/content/Context;)V" deprecated="32" />
-		<method name="setApplication(Landroid/app/Application;)V" deprecated="32" />
-		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="getFinishedActivityRequest()I" deprecated="33" />
+		<method name="getRequestedOrientation()I" deprecated="33" />
+		<method name="getStartedActivityIntent()Landroid/content/Intent;" deprecated="33" />
+		<method name="getStartedActivityRequest()I" deprecated="33" />
+		<method name="isFinishCalled()Z" deprecated="33" />
+		<method name="setActivityContext(Landroid/content/Context;)V" deprecated="33" />
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33" />
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;" deprecated="33" />
 	</class>
 	<class name="android/test/AndroidTestCase" since="1" deprecated="24">
 		<extends name="junit/framework/TestCase" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4" deprecated="32" />
-		<method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="32" />
-		<method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="32" />
-		<method name="getContext()Landroid/content/Context;" deprecated="32" />
-		<method name="getTestContext()Landroid/content/Context;" since="32" deprecated="32" />
-		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="32" />
-		<method name="setContext(Landroid/content/Context;)V" deprecated="32" />
-		<method name="setTestContext(Landroid/content/Context;)V" since="32" deprecated="32" />
-		<method name="testAndroidTestCaseSetupProperly()V" deprecated="32" />
-		<field name="mContext" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4" deprecated="33" />
+		<method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33" />
+		<method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33" />
+		<method name="getContext()Landroid/content/Context;" deprecated="33" />
+		<method name="getTestContext()Landroid/content/Context;" since="33" deprecated="33" />
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33" />
+		<method name="setTestContext(Landroid/content/Context;)V" since="33" deprecated="33" />
+		<method name="testAndroidTestCaseSetupProperly()V" deprecated="33" />
+		<field name="mContext" deprecated="33" />
 	</class>
 	<class name="android/test/AndroidTestRunner" since="1" deprecated="24">
 		<extends name="junit/runner/BaseTestRunner" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="addTestListener(Ljunit/framework/TestListener;)V" deprecated="32" />
-		<method name="clearTestListeners()V" deprecated="32" />
-		<method name="createTestResult()Ljunit/framework/TestResult;" deprecated="32" />
-		<method name="getTestCases()Ljava/util/List;" deprecated="32" />
-		<method name="getTestClassName()Ljava/lang/String;" deprecated="32" />
-		<method name="getTestResult()Ljunit/framework/TestResult;" deprecated="32" />
-		<method name="runTest()V" deprecated="32" />
-		<method name="runTest(Ljunit/framework/TestResult;)V" deprecated="32" />
-		<method name="setContext(Landroid/content/Context;)V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" deprecated="33" />
+		<method name="clearTestListeners()V" deprecated="33" />
+		<method name="createTestResult()Ljunit/framework/TestResult;" deprecated="33" />
+		<method name="getTestCases()Ljava/util/List;" deprecated="33" />
+		<method name="getTestClassName()Ljava/lang/String;" deprecated="33" />
+		<method name="getTestResult()Ljunit/framework/TestResult;" deprecated="33" />
+		<method name="runTest()V" deprecated="33" />
+		<method name="runTest(Ljunit/framework/TestResult;)V" deprecated="33" />
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33" />
 		<method name="setInstrumentaiton(Landroid/app/Instrumentation;)V" deprecated="15" />
-		<method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="32" />
-		<method name="setTest(Ljunit/framework/Test;)V" deprecated="32" />
-		<method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V" deprecated="32" />
+		<method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33" />
+		<method name="setTest(Ljunit/framework/Test;)V" deprecated="33" />
+		<method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
 	</class>
 	<class name="android/test/ApplicationTestCase" since="1" deprecated="24">
 		<extends name="android/test/AndroidTestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="32" />
-		<method name="createApplication()V" deprecated="32" />
-		<method name="getApplication()Landroid/app/Application;" deprecated="32" />
-		<method name="getSystemContext()Landroid/content/Context;" deprecated="32" />
-		<method name="terminateApplication()V" deprecated="32" />
-		<method name="testApplicationTestCaseSetUpProperly()V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="createApplication()V" deprecated="33" />
+		<method name="getApplication()Landroid/app/Application;" deprecated="33" />
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33" />
+		<method name="terminateApplication()V" deprecated="33" />
+		<method name="testApplicationTestCaseSetUpProperly()V" deprecated="33" />
 	</class>
 	<class name="android/test/AssertionFailedError" since="1" deprecated="16">
 		<extends name="java/lang/Error" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;)V" deprecated="33" />
 	</class>
 	<class name="android/test/ComparisonFailure" since="1" deprecated="16">
 		<extends name="android/test/AssertionFailedError" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
 	</class>
 	<class name="android/test/FlakyTest" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
 		<implements name="java/lang/annotation/Annotation" />
-		<method name="tolerance()I" deprecated="32" />
+		<method name="tolerance()I" deprecated="33" />
 	</class>
 	<class name="android/test/InstrumentationTestCase" since="1" deprecated="24">
 		<extends name="junit/framework/TestCase" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="getInstrumentation()Landroid/app/Instrumentation;" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="getInstrumentation()Landroid/app/Instrumentation;" deprecated="33" />
 		<method name="injectInsrumentation(Landroid/app/Instrumentation;)V" deprecated="15" />
-		<method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="32" />
-		<method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;" deprecated="32" />
-		<method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3" deprecated="32" />
-		<method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3" deprecated="32" />
-		<method name="sendKeys(Ljava/lang/String;)V" deprecated="32" />
-		<method name="sendKeys([I)V" deprecated="32" />
-		<method name="sendRepeatedKeys([I)V" deprecated="32" />
+		<method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33" />
+		<method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;" deprecated="33" />
+		<method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3" deprecated="33" />
+		<method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3" deprecated="33" />
+		<method name="sendKeys(Ljava/lang/String;)V" deprecated="33" />
+		<method name="sendKeys([I)V" deprecated="33" />
+		<method name="sendRepeatedKeys([I)V" deprecated="33" />
 	</class>
 	<class name="android/test/InstrumentationTestRunner" since="1" deprecated="24">
 		<extends name="android/app/Instrumentation" />
 		<implements name="android/test/TestSuiteProvider" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="addTestListener(Ljunit/framework/TestListener;)V" since="32" deprecated="32" />
-		<method name="getAllTests()Ljunit/framework/TestSuite;" deprecated="32" />
-		<method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;" deprecated="32" />
-		<method name="getArguments()Landroid/os/Bundle;" since="18" deprecated="32" />
-		<method name="getLoader()Ljava/lang/ClassLoader;" deprecated="32" />
-		<field name="REPORT_KEY_NAME_CLASS" deprecated="32" />
-		<field name="REPORT_KEY_NAME_TEST" deprecated="32" />
-		<field name="REPORT_KEY_NUM_CURRENT" deprecated="32" />
-		<field name="REPORT_KEY_NUM_TOTAL" deprecated="32" />
-		<field name="REPORT_KEY_STACK" deprecated="32" />
-		<field name="REPORT_VALUE_ID" deprecated="32" />
-		<field name="REPORT_VALUE_RESULT_ERROR" deprecated="32" />
-		<field name="REPORT_VALUE_RESULT_FAILURE" deprecated="32" />
-		<field name="REPORT_VALUE_RESULT_OK" deprecated="32" />
-		<field name="REPORT_VALUE_RESULT_START" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" since="33" deprecated="33" />
+		<method name="getAllTests()Ljunit/framework/TestSuite;" deprecated="33" />
+		<method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;" deprecated="33" />
+		<method name="getArguments()Landroid/os/Bundle;" since="18" deprecated="33" />
+		<method name="getLoader()Ljava/lang/ClassLoader;" deprecated="33" />
+		<field name="REPORT_KEY_NAME_CLASS" deprecated="33" />
+		<field name="REPORT_KEY_NAME_TEST" deprecated="33" />
+		<field name="REPORT_KEY_NUM_CURRENT" deprecated="33" />
+		<field name="REPORT_KEY_NUM_TOTAL" deprecated="33" />
+		<field name="REPORT_KEY_STACK" deprecated="33" />
+		<field name="REPORT_VALUE_ID" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_ERROR" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_FAILURE" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_OK" deprecated="33" />
+		<field name="REPORT_VALUE_RESULT_START" deprecated="33" />
 	</class>
 	<class name="android/test/InstrumentationTestSuite" since="1" deprecated="24">
 		<extends name="junit/framework/TestSuite" />
-		<method name="&lt;init&gt;(Landroid/app/Instrumentation;)V" deprecated="32" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;Landroid/app/Instrumentation;)V" deprecated="32" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/app/Instrumentation;)V" deprecated="32" />
+		<method name="&lt;init&gt;(Landroid/app/Instrumentation;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Landroid/app/Instrumentation;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Landroid/app/Instrumentation;)V" deprecated="33" />
 	</class>
 	<class name="android/test/IsolatedContext" since="1" deprecated="24">
 		<extends name="android/content/ContextWrapper" />
-		<method name="&lt;init&gt;(Landroid/content/ContentResolver;Landroid/content/Context;)V" deprecated="32" />
-		<method name="getAndClearBroadcastIntents()Ljava/util/List;" deprecated="32" />
+		<method name="&lt;init&gt;(Landroid/content/ContentResolver;Landroid/content/Context;)V" deprecated="33" />
+		<method name="getAndClearBroadcastIntents()Ljava/util/List;" deprecated="33" />
 	</class>
-	<class name="android/test/LaunchPerformanceBase" since="32" deprecated="32">
+	<class name="android/test/LaunchPerformanceBase" since="33" deprecated="33">
 		<extends name="android/app/Instrumentation" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="LaunchApp()V" deprecated="32" />
-		<field name="mIntent" deprecated="32" />
-		<field name="mResults" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="LaunchApp()V" deprecated="33" />
+		<field name="mIntent" deprecated="33" />
+		<field name="mResults" deprecated="33" />
 	</class>
 	<class name="android/test/LoaderTestCase" since="11">
 		<extends name="android/test/AndroidTestCase" />
@@ -44594,63 +44612,63 @@
 	</class>
 	<class name="android/test/MoreAsserts" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
-		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V" deprecated="32" />
-		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32" />
-		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32" />
-		<method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertEmpty(Ljava/lang/Iterable;)V" deprecated="32" />
-		<method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="32" />
-		<method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="32" />
-		<method name="assertEmpty(Ljava/util/Map;)V" deprecated="32" />
-		<method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V" deprecated="32" />
-		<method name="assertEquals(Ljava/lang/String;[B[B)V" deprecated="32" />
-		<method name="assertEquals(Ljava/lang/String;[D[D)V" deprecated="32" />
-		<method name="assertEquals(Ljava/lang/String;[I[I)V" deprecated="32" />
-		<method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V" deprecated="32" />
-		<method name="assertEquals([B[B)V" deprecated="32" />
-		<method name="assertEquals([D[D)V" deprecated="32" />
-		<method name="assertEquals([I[I)V" deprecated="32" />
-		<method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32" />
-		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32" />
-		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="32" />
-		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32" />
-		<method name="assertNotEmpty(Ljava/lang/Iterable;)V" deprecated="32" />
-		<method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="32" />
-		<method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="32" />
-		<method name="assertNotEmpty(Ljava/util/Map;)V" deprecated="32" />
-		<method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="32" />
-		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="32" />
-		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32" />
-		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="32" />
-		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="32" />
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertEmpty(Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[B[B)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[D[D)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[I[I)V" deprecated="33" />
+		<method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V" deprecated="33" />
+		<method name="assertEquals([B[B)V" deprecated="33" />
+		<method name="assertEquals([D[D)V" deprecated="33" />
+		<method name="assertEquals([I[I)V" deprecated="33" />
+		<method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33" />
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertNotEmpty(Ljava/util/Map;)V" deprecated="33" />
+		<method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33" />
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33" />
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33" />
 	</class>
 	<class name="android/test/PerformanceTestCase" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
-		<method name="isPerformanceOnly()Z" deprecated="32" />
-		<method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I" deprecated="32" />
+		<method name="isPerformanceOnly()Z" deprecated="33" />
+		<method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I" deprecated="33" />
 	</class>
-	<class name="android/test/PerformanceTestCase$Intermediates" since="1" deprecated="32">
+	<class name="android/test/PerformanceTestCase$Intermediates" since="1" deprecated="33">
 		<extends name="java/lang/Object" />
-		<method name="addIntermediate(Ljava/lang/String;)V" deprecated="32" />
-		<method name="addIntermediate(Ljava/lang/String;J)V" deprecated="32" />
-		<method name="finishTiming(Z)V" deprecated="32" />
-		<method name="setInternalIterations(I)V" deprecated="32" />
-		<method name="startTiming(Z)V" deprecated="32" />
+		<method name="addIntermediate(Ljava/lang/String;)V" deprecated="33" />
+		<method name="addIntermediate(Ljava/lang/String;J)V" deprecated="33" />
+		<method name="finishTiming(Z)V" deprecated="33" />
+		<method name="setInternalIterations(I)V" deprecated="33" />
+		<method name="startTiming(Z)V" deprecated="33" />
 	</class>
 	<class name="android/test/ProviderTestCase" since="1" deprecated="5">
 		<extends name="android/test/InstrumentationTestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" deprecated="32" />
-		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" deprecated="32" />
-		<method name="getMockContext()Landroid/test/IsolatedContext;" deprecated="32" />
-		<method name="getProvider()Landroid/content/ContentProvider;" deprecated="32" />
-		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;Ljava/lang/String;)V" deprecated="33" />
+		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" deprecated="33" />
+		<method name="getMockContext()Landroid/test/IsolatedContext;" deprecated="33" />
+		<method name="getProvider()Landroid/content/ContentProvider;" deprecated="33" />
+		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" deprecated="33" />
 	</class>
 	<class name="android/test/ProviderTestCase2" since="3">
 		<extends name="android/test/AndroidTestCase" />
@@ -44662,81 +44680,81 @@
 	</class>
 	<class name="android/test/RenamingDelegatingContext" since="1" deprecated="24">
 		<extends name="android/content/ContextWrapper" />
-		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V" deprecated="32" />
-		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" deprecated="32" />
-		<method name="getDatabasePrefix()Ljava/lang/String;" deprecated="32" />
-		<method name="makeExistingFilesAndDbsAccessible()V" deprecated="32" />
-		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;" deprecated="32" />
-		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;" deprecated="32" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;)V" deprecated="33" />
+		<method name="getDatabasePrefix()Ljava/lang/String;" deprecated="33" />
+		<method name="makeExistingFilesAndDbsAccessible()V" deprecated="33" />
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;" deprecated="33" />
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;" deprecated="33" />
 	</class>
-	<class name="android/test/RepetitiveTest" since="32" deprecated="32">
+	<class name="android/test/RepetitiveTest" since="33" deprecated="33">
 		<extends name="java/lang/Object" />
 		<implements name="java/lang/annotation/Annotation" />
-		<method name="numIterations()I" deprecated="32" />
+		<method name="numIterations()I" deprecated="33" />
 	</class>
 	<class name="android/test/ServiceTestCase" since="1" deprecated="24">
 		<extends name="android/test/AndroidTestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="32" />
-		<method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;" deprecated="32" />
-		<method name="getApplication()Landroid/app/Application;" deprecated="32" />
-		<method name="getService()Landroid/app/Service;" deprecated="32" />
-		<method name="getSystemContext()Landroid/content/Context;" deprecated="32" />
-		<method name="setApplication(Landroid/app/Application;)V" deprecated="32" />
-		<method name="setupService()V" deprecated="32" />
-		<method name="shutdownService()V" deprecated="32" />
-		<method name="startService(Landroid/content/Intent;)V" deprecated="32" />
-		<method name="testServiceTestCaseSetUpProperly()V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;" deprecated="33" />
+		<method name="getApplication()Landroid/app/Application;" deprecated="33" />
+		<method name="getService()Landroid/app/Service;" deprecated="33" />
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33" />
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33" />
+		<method name="setupService()V" deprecated="33" />
+		<method name="shutdownService()V" deprecated="33" />
+		<method name="startService(Landroid/content/Intent;)V" deprecated="33" />
+		<method name="testServiceTestCaseSetUpProperly()V" deprecated="33" />
 	</class>
 	<class name="android/test/SingleLaunchActivityTestCase" since="1" deprecated="24">
 		<extends name="android/test/InstrumentationTestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="32" />
-		<method name="getActivity()Landroid/app/Activity;" deprecated="32" />
-		<method name="testActivityTestCaseSetUpProperly()V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33" />
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33" />
 	</class>
 	<class name="android/test/SyncBaseInstrumentation" since="1" deprecated="24">
 		<extends name="android/test/InstrumentationTestCase" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="cancelSyncsandDisableAutoSync()V" deprecated="32" />
-		<method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="cancelSyncsandDisableAutoSync()V" deprecated="33" />
+		<method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33" />
 	</class>
 	<class name="android/test/TestSuiteProvider" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
-		<method name="getTestSuite()Ljunit/framework/TestSuite;" deprecated="32" />
+		<method name="getTestSuite()Ljunit/framework/TestSuite;" deprecated="33" />
 	</class>
 	<class name="android/test/TouchUtils" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33" />
 		<method name="drag(Landroid/test/ActivityInstrumentationTestCase;FFFFI)V" deprecated="15" />
-		<method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3" deprecated="32" />
+		<method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3" deprecated="33" />
 		<method name="dragQuarterScreenDown(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15" />
-		<method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="32" />
+		<method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33" />
 		<method name="dragQuarterScreenUp(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15" />
-		<method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="32" />
+		<method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33" />
 		<method name="dragViewBy(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15" />
 		<method name="dragViewBy(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="15" />
 		<method name="dragViewTo(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15" />
-		<method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="32" />
+		<method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="33" />
 		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15" />
 		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15" />
-		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3" deprecated="32" />
-		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3" deprecated="32" />
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3" deprecated="33" />
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3" deprecated="33" />
 		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15" />
 		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15" />
-		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="32" />
-		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3" deprecated="32" />
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33" />
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3" deprecated="33" />
 		<method name="dragViewToX(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15" />
-		<method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="32" />
+		<method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33" />
 		<method name="dragViewToY(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15" />
-		<method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="32" />
+		<method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33" />
 		<method name="longClickView(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15" />
-		<method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="32" />
+		<method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33" />
 		<method name="scrollToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15" />
-		<method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="32" />
+		<method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33" />
 		<method name="scrollToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15" />
-		<method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="32" />
-		<method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="32" />
-		<method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="32" />
+		<method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33" />
+		<method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33" />
+		<method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33" />
 	</class>
 	<class name="android/test/UiThreadTest" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
@@ -44744,39 +44762,39 @@
 	</class>
 	<class name="android/test/ViewAsserts" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
-		<method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32" />
-		<method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V" deprecated="32" />
-		<method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V" deprecated="32" />
-		<method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32" />
-		<method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32" />
-		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
-		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32" />
-		<method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32" />
+		<method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V" deprecated="33" />
+		<method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V" deprecated="33" />
+		<method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33" />
+		<method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33" />
 	</class>
-	<class name="android/test/mock/MockAccountManager" since="32" deprecated="32">
+	<class name="android/test/mock/MockAccountManager" since="33" deprecated="33">
 		<extends name="java/lang/Object" />
-		<method name="newMockAccountManager(Landroid/content/Context;)Landroid/accounts/AccountManager;" deprecated="32" />
+		<method name="newMockAccountManager(Landroid/content/Context;)Landroid/accounts/AccountManager;" deprecated="33" />
 	</class>
 	<class name="android/test/mock/MockApplication" since="1" deprecated="24">
 		<extends name="android/app/Application" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
 	</class>
 	<class name="android/test/mock/MockContentProvider" since="8">
 		<extends name="android/content/ContentProvider" />
 		<method name="&lt;init&gt;()V" />
 		<method name="&lt;init&gt;(Landroid/content/Context;)V" />
 		<method name="&lt;init&gt;(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V" />
-		<method name="attachInfoForTesting(Landroid/content/ContentProvider;Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" since="32" deprecated="32" />
+		<method name="attachInfoForTesting(Landroid/content/ContentProvider;Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" since="33" deprecated="33" />
 	</class>
 	<class name="android/test/mock/MockContentResolver" since="1">
 		<extends name="android/content/ContentResolver" />
@@ -44793,7 +44811,7 @@
 	<class name="android/test/mock/MockCursor" since="8" deprecated="24">
 		<extends name="java/lang/Object" />
 		<implements name="android/database/Cursor" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
 		<method name="abortUpdates()V" removed="11" />
 		<method name="commitUpdates()Z" removed="11" />
 		<method name="commitUpdates(Ljava/util/Map;)Z" removed="11" />
@@ -44812,58 +44830,58 @@
 	<class name="android/test/mock/MockDialogInterface" since="1" deprecated="24">
 		<extends name="java/lang/Object" />
 		<implements name="android/content/DialogInterface" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
 	</class>
 	<class name="android/test/mock/MockPackageManager" since="1" deprecated="24">
 		<extends name="android/content/pm/PackageManager" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
-		<method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
+		<method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23" deprecated="33" />
 		<method name="getDefaultBrowserPackageName(I)Ljava/lang/String;" since="23" removed="24" />
-		<method name="resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;" since="32" deprecated="32" />
+		<method name="resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;" since="33" deprecated="33" />
 		<method name="setDefaultBrowserPackageName(Ljava/lang/String;I)Z" since="23" removed="24" />
 		<method name="setPackageObbPath(Ljava/lang/String;Ljava/lang/String;)V" since="9" removed="10" />
 	</class>
 	<class name="android/test/mock/MockResources" since="1" deprecated="24">
 		<extends name="android/content/res/Resources" />
-		<method name="&lt;init&gt;()V" deprecated="32" />
+		<method name="&lt;init&gt;()V" deprecated="33" />
 	</class>
-	<class name="android/test/mock/MockService" since="32" deprecated="32">
+	<class name="android/test/mock/MockService" since="33" deprecated="33">
 		<extends name="java/lang/Object" />
-		<method name="attachForTesting(Landroid/app/Service;Landroid/content/Context;Ljava/lang/String;Landroid/app/Application;)V" deprecated="32" />
+		<method name="attachForTesting(Landroid/app/Service;Landroid/content/Context;Ljava/lang/String;Landroid/app/Application;)V" deprecated="33" />
 	</class>
 	<class name="android/test/suitebuilder/TestMethod" since="1" deprecated="26">
 		<extends name="java/lang/Object" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" since="3" deprecated="32" />
-		<method name="&lt;init&gt;(Ljava/lang/reflect/Method;Ljava/lang/Class;)V" deprecated="32" />
-		<method name="&lt;init&gt;(Ljunit/framework/TestCase;)V" since="3" deprecated="32" />
-		<method name="createTest()Ljunit/framework/TestCase;" deprecated="32" />
-		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" deprecated="32" />
-		<method name="getEnclosingClass()Ljava/lang/Class;" deprecated="32" />
-		<method name="getEnclosingClassname()Ljava/lang/String;" deprecated="32" />
-		<method name="getName()Ljava/lang/String;" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/Class;)V" since="3" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/reflect/Method;Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljunit/framework/TestCase;)V" since="3" deprecated="33" />
+		<method name="createTest()Ljunit/framework/TestCase;" deprecated="33" />
+		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" deprecated="33" />
+		<method name="getEnclosingClass()Ljava/lang/Class;" deprecated="33" />
+		<method name="getEnclosingClassname()Ljava/lang/String;" deprecated="33" />
+		<method name="getName()Ljava/lang/String;" deprecated="33" />
 	</class>
 	<class name="android/test/suitebuilder/TestSuiteBuilder" since="1" deprecated="26">
 		<extends name="java/lang/Object" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="32" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33" />
 		<method name="addRequirements(Ljava/util/List;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28" />
 		<method name="addRequirements([Lcom/android/internal/util/Predicate;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28" />
-		<method name="build()Ljunit/framework/TestSuite;" deprecated="32" />
-		<method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32" />
-		<method name="getSuiteName()Ljava/lang/String;" deprecated="32" />
-		<method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32" />
-		<method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32" />
-		<method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32" />
+		<method name="build()Ljunit/framework/TestSuite;" deprecated="33" />
+		<method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
+		<method name="getSuiteName()Ljava/lang/String;" deprecated="33" />
+		<method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
+		<method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
+		<method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33" />
 	</class>
 	<class name="android/test/suitebuilder/TestSuiteBuilder$FailedToCreateTests" since="1" deprecated="26">
 		<extends name="junit/framework/TestCase" />
-		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" deprecated="32" />
-		<method name="testSuiteConstructionFailed()V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Exception;)V" deprecated="33" />
+		<method name="testSuiteConstructionFailed()V" deprecated="33" />
 	</class>
-	<class name="android/test/suitebuilder/UnitTestSuiteBuilder" since="32" deprecated="32">
+	<class name="android/test/suitebuilder/UnitTestSuiteBuilder" since="33" deprecated="33">
 		<extends name="android/test/suitebuilder/TestSuiteBuilder" />
-		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="32" />
-		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="32" />
+		<method name="&lt;init&gt;(Ljava/lang/Class;)V" deprecated="33" />
+		<method name="&lt;init&gt;(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33" />
 	</class>
 	<class name="android/test/suitebuilder/annotation/LargeTest" since="2" deprecated="24">
 		<extends name="java/lang/Object" />
@@ -47682,8 +47700,14 @@
 	</class>
 	<class name="android/view/AttachedSurfaceControl" since="31">
 		<extends name="java/lang/Object" />
+		<method name="addOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33" />
 		<method name="applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z" />
 		<method name="buildReparentTransaction(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;" />
+		<method name="getBufferTransformHint()I" since="33" />
+		<method name="removeOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33" />
+	</class>
+	<class name="android/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener" since="33">
+		<method name="onBufferTransformHintChanged(I)V" />
 	</class>
 	<class name="android/view/Choreographer" since="16">
 		<extends name="java/lang/Object" />
@@ -48307,10 +48331,6 @@
 		<field name="KEYCODE_CUT" since="24" />
 		<field name="KEYCODE_D" />
 		<field name="KEYCODE_DEL" />
-		<field name="KEYCODE_DEMO_APP_1" since="32" />
-		<field name="KEYCODE_DEMO_APP_2" since="32" />
-		<field name="KEYCODE_DEMO_APP_3" since="32" />
-		<field name="KEYCODE_DEMO_APP_4" since="32" />
 		<field name="KEYCODE_DPAD_CENTER" />
 		<field name="KEYCODE_DPAD_DOWN" />
 		<field name="KEYCODE_DPAD_DOWN_LEFT" since="24" />
@@ -48342,10 +48362,6 @@
 		<field name="KEYCODE_F7" since="11" />
 		<field name="KEYCODE_F8" since="11" />
 		<field name="KEYCODE_F9" since="11" />
-		<field name="KEYCODE_FEATURED_APP_1" since="32" />
-		<field name="KEYCODE_FEATURED_APP_2" since="32" />
-		<field name="KEYCODE_FEATURED_APP_3" since="32" />
-		<field name="KEYCODE_FEATURED_APP_4" since="32" />
 		<field name="KEYCODE_FOCUS" />
 		<field name="KEYCODE_FORWARD" since="11" />
 		<field name="KEYCODE_FORWARD_DEL" since="11" />
@@ -48511,14 +48527,6 @@
 		<field name="KEYCODE_U" />
 		<field name="KEYCODE_UNKNOWN" />
 		<field name="KEYCODE_V" />
-		<field name="KEYCODE_VIDEO_APP_1" since="32" />
-		<field name="KEYCODE_VIDEO_APP_2" since="32" />
-		<field name="KEYCODE_VIDEO_APP_3" since="32" />
-		<field name="KEYCODE_VIDEO_APP_4" since="32" />
-		<field name="KEYCODE_VIDEO_APP_5" since="32" />
-		<field name="KEYCODE_VIDEO_APP_6" since="32" />
-		<field name="KEYCODE_VIDEO_APP_7" since="32" />
-		<field name="KEYCODE_VIDEO_APP_8" since="32" />
 		<field name="KEYCODE_VOICE_ASSIST" since="21" />
 		<field name="KEYCODE_VOLUME_DOWN" />
 		<field name="KEYCODE_VOLUME_MUTE" since="11" />
@@ -49199,6 +49207,12 @@
 		<method name="isValid()Z" />
 		<method name="readFromParcel(Landroid/os/Parcel;)V" />
 		<method name="release()V" />
+		<field name="BUFFER_TRANSFORM_IDENTITY" since="33" />
+		<field name="BUFFER_TRANSFORM_MIRROR_HORIZONTAL" since="33" />
+		<field name="BUFFER_TRANSFORM_MIRROR_VERTICAL" since="33" />
+		<field name="BUFFER_TRANSFORM_ROTATE_180" since="33" />
+		<field name="BUFFER_TRANSFORM_ROTATE_270" since="33" />
+		<field name="BUFFER_TRANSFORM_ROTATE_90" since="33" />
 		<field name="CREATOR" />
 	</class>
 	<class name="android/view/SurfaceControl$Builder" since="29">
@@ -50054,6 +50068,7 @@
 		<field name="AUTOFILL_TYPE_NONE" since="26" />
 		<field name="AUTOFILL_TYPE_TEXT" since="26" />
 		<field name="AUTOFILL_TYPE_TOGGLE" since="26" />
+		<field name="DRAG_FLAG_ACCESSIBILITY_ACTION" since="33" />
 		<field name="DRAG_FLAG_GLOBAL" since="24" />
 		<field name="DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION" since="24" />
 		<field name="DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION" since="24" />
@@ -51485,6 +51500,9 @@
 		<method name="setPassword(Z)V" removed="14" />
 		<method name="setRemovedCount(I)V" removed="14" />
 		<field name="CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION" since="19" />
+		<field name="CONTENT_CHANGE_TYPE_DRAG_CANCELLED" since="33" />
+		<field name="CONTENT_CHANGE_TYPE_DRAG_DROPPED" since="33" />
+		<field name="CONTENT_CHANGE_TYPE_DRAG_STARTED" since="33" />
 		<field name="CONTENT_CHANGE_TYPE_PANE_APPEARED" since="28" />
 		<field name="CONTENT_CHANGE_TYPE_PANE_DISAPPEARED" since="28" />
 		<field name="CONTENT_CHANGE_TYPE_PANE_TITLE" since="28" />
@@ -51781,6 +51799,9 @@
 		<field name="ACTION_COPY" />
 		<field name="ACTION_CUT" />
 		<field name="ACTION_DISMISS" />
+		<field name="ACTION_DRAG_CANCEL" since="33" />
+		<field name="ACTION_DRAG_DROP" since="33" />
+		<field name="ACTION_DRAG_START" since="33" />
 		<field name="ACTION_EXPAND" />
 		<field name="ACTION_FOCUS" />
 		<field name="ACTION_HIDE_TOOLTIP" since="28" />
diff --git a/current/public/data/api-versions.xml b/current/public/data/api-versions.xml
index 82814c7..e8f6634 100644
--- a/current/public/data/api-versions.xml
+++ b/current/public/data/api-versions.xml
@@ -115,6 +115,7 @@
 		<field name="INTERNAL_SYSTEM_WINDOW" removed="23"/>
 		<field name="INTERNET"/>
 		<field name="KILL_BACKGROUND_PROCESSES" since="8"/>
+		<field name="LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK" since="33"/>
 		<field name="LOADER_USAGE_STATS" since="30"/>
 		<field name="LOCATION_HARDWARE" since="18"/>
 		<field name="MANAGE_ACCOUNTS" since="5" removed="23"/>
@@ -138,7 +139,6 @@
 		<field name="PERSISTENT_ACTIVITY" deprecated="15"/>
 		<field name="PROCESS_OUTGOING_CALLS" deprecated="29"/>
 		<field name="QUERY_ALL_PACKAGES" since="30"/>
-		<field name="READ_BASIC_PHONE_STATE" since="32"/>
 		<field name="READ_CALENDAR"/>
 		<field name="READ_CALL_LOG" since="16"/>
 		<field name="READ_CONTACTS"/>
@@ -1362,6 +1362,7 @@
 		<field name="shortcutLongLabel" since="25"/>
 		<field name="shortcutShortLabel" since="25"/>
 		<field name="shouldDisableView"/>
+		<field name="shouldUseDefaultUnfoldTransition" since="33"/>
 		<field name="showAsAction" since="11"/>
 		<field name="showDefault"/>
 		<field name="showDividers" since="11"/>
@@ -2077,6 +2078,9 @@
 		<extends name="java/lang/Object"/>
 		<method name="&lt;init>()V"/>
 		<field name="accessibilityActionContextClick" since="23"/>
+		<field name="accessibilityActionDragCancel" since="33"/>
+		<field name="accessibilityActionDragDrop" since="33"/>
+		<field name="accessibilityActionDragStart" since="33"/>
 		<field name="accessibilityActionHideTooltip" since="28"/>
 		<field name="accessibilityActionImeEnter" since="30"/>
 		<field name="accessibilityActionMoveWindow" since="26"/>
@@ -6658,6 +6662,7 @@
 	</class>
 	<class name="android/app/TaskInfo" since="29">
 		<extends name="java/lang/Object"/>
+		<method name="isVisible()Z" since="33"/>
 		<field name="baseActivity"/>
 		<field name="baseIntent"/>
 		<field name="isRunning"/>
@@ -6870,6 +6875,7 @@
 		<method name="loadIcon(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
 		<method name="loadLabel(Landroid/content/pm/PackageManager;)Ljava/lang/CharSequence;"/>
 		<method name="loadThumbnail(Landroid/content/pm/PackageManager;)Landroid/graphics/drawable/Drawable;"/>
+		<method name="shouldUseDefaultUnfoldTransition()Z" since="33"/>
 		<method name="supportsMultipleDisplays()Z" since="29"/>
 		<field name="CREATOR"/>
 	</class>
@@ -9566,8 +9572,7 @@
 		<method name="connect(Landroid/bluetooth/BluetoothDevice;Z)Z"/>
 		<method name="getService(Ljava/util/UUID;)Landroid/bluetooth/BluetoothGattService;"/>
 		<method name="getServices()Ljava/util/List;"/>
-		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z" deprecated="32"/>
-		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z[B)I" since="32"/>
+		<method name="notifyCharacteristicChanged(Landroid/bluetooth/BluetoothDevice;Landroid/bluetooth/BluetoothGattCharacteristic;Z)Z"/>
 		<method name="readPhy(Landroid/bluetooth/BluetoothDevice;)V" since="26"/>
 		<method name="removeService(Landroid/bluetooth/BluetoothGattService;)Z"/>
 		<method name="sendResponse(Landroid/bluetooth/BluetoothDevice;III[B)Z"/>
@@ -9842,7 +9847,6 @@
 		<method name="getServiceData()Ljava/util/Map;"/>
 		<method name="getServiceSolicitationUuids()Ljava/util/List;" since="31"/>
 		<method name="getServiceUuids()Ljava/util/List;"/>
-		<method name="getTransportDiscoveryData()Ljava/util/List;" since="32"/>
 		<field name="CREATOR"/>
 	</class>
 	<class name="android/bluetooth/le/AdvertiseData$Builder" since="21">
@@ -9852,7 +9856,6 @@
 		<method name="addServiceData(Landroid/os/ParcelUuid;[B)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
 		<method name="addServiceSolicitationUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;" since="31"/>
 		<method name="addServiceUuid(Landroid/os/ParcelUuid;)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
-		<method name="addTransportDiscoveryData(Landroid/bluetooth/le/TransportDiscoveryData;)Landroid/bluetooth/le/AdvertiseData$Builder;" since="32"/>
 		<method name="build()Landroid/bluetooth/le/AdvertiseData;"/>
 		<method name="setIncludeDeviceName(Z)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
 		<method name="setIncludeTxPowerLevel(Z)Landroid/bluetooth/le/AdvertiseData$Builder;"/>
@@ -10105,29 +10108,6 @@
 		<method name="setReportDelay(J)Landroid/bluetooth/le/ScanSettings$Builder;"/>
 		<method name="setScanMode(I)Landroid/bluetooth/le/ScanSettings$Builder;"/>
 	</class>
-	<class name="android/bluetooth/le/TransportBlock" since="32">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(III[B)V"/>
-		<method name="getOrgId()I"/>
-		<method name="getTdsFlags()I"/>
-		<method name="getTransportData()[B"/>
-		<method name="getTransportDataLength()I"/>
-		<method name="toByteArray()[B"/>
-		<method name="totalBytes()I"/>
-		<field name="CREATOR"/>
-	</class>
-	<class name="android/bluetooth/le/TransportDiscoveryData" since="32">
-		<extends name="java/lang/Object"/>
-		<implements name="android/os/Parcelable"/>
-		<method name="&lt;init>(ILjava/util/List;)V"/>
-		<method name="&lt;init>([B)V"/>
-		<method name="getTransportBlocks()Ljava/util/List;"/>
-		<method name="getTransportDataType()I"/>
-		<method name="toByteArray()[B"/>
-		<method name="totalBytes()I"/>
-		<field name="CREATOR"/>
-	</class>
 	<class name="android/companion/AssociationRequest" since="26">
 		<extends name="java/lang/Object"/>
 		<implements name="android/os/Parcelable"/>
@@ -18048,6 +18028,7 @@
 		<field name="EDGE_AVAILABLE_EDGE_MODES"/>
 		<field name="FLASH_INFO_AVAILABLE"/>
 		<field name="HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES"/>
+		<field name="INFO_DEVICE_STATE_SENSOR_ORIENTATION_MAP" since="33"/>
 		<field name="INFO_SUPPORTED_HARDWARE_LEVEL"/>
 		<field name="INFO_VERSION" since="28"/>
 		<field name="JPEG_AVAILABLE_THUMBNAIL_SIZES"/>
@@ -18733,6 +18714,12 @@
 		<method name="copyElements([Landroid/util/Rational;I)V"/>
 		<method name="getElement(II)Landroid/util/Rational;"/>
 	</class>
+	<class name="android/hardware/camera2/params/DeviceStateSensorOrientationMap" since="33">
+		<extends name="java/lang/Object"/>
+		<method name="getSensorOrientation(J)I"/>
+		<field name="FOLDED"/>
+		<field name="NORMAL"/>
+	</class>
 	<class name="android/hardware/camera2/params/ExtensionSessionConfiguration" since="31">
 		<extends name="java/lang/Object"/>
 		<method name="&lt;init>(ILjava/util/List;Ljava/util/concurrent/Executor;Landroid/hardware/camera2/CameraExtensionSession$StateCallback;)V"/>
@@ -25192,8 +25179,10 @@
 		<method name="getAllowedCapturePolicy()I" since="29"/>
 		<method name="getContentType()I"/>
 		<method name="getFlags()I"/>
+		<method name="getSpatializationBehavior()I" since="33"/>
 		<method name="getUsage()I"/>
 		<method name="getVolumeControlStream()I" since="26"/>
+		<method name="isContentSpatialized()Z" since="33"/>
 		<field name="ALLOW_CAPTURE_BY_ALL" since="29"/>
 		<field name="ALLOW_CAPTURE_BY_NONE" since="29"/>
 		<field name="ALLOW_CAPTURE_BY_SYSTEM" since="29"/>
@@ -25206,6 +25195,8 @@
 		<field name="FLAG_AUDIBILITY_ENFORCED"/>
 		<field name="FLAG_HW_AV_SYNC"/>
 		<field name="FLAG_LOW_LATENCY" since="24" deprecated="26"/>
+		<field name="SPATIALIZATION_BEHAVIOR_AUTO" since="33"/>
+		<field name="SPATIALIZATION_BEHAVIOR_NEVER" since="33"/>
 		<field name="USAGE_ALARM"/>
 		<field name="USAGE_ASSISTANCE_ACCESSIBILITY"/>
 		<field name="USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"/>
@@ -25232,7 +25223,9 @@
 		<method name="setContentType(I)Landroid/media/AudioAttributes$Builder;"/>
 		<method name="setFlags(I)Landroid/media/AudioAttributes$Builder;"/>
 		<method name="setHapticChannelsMuted(Z)Landroid/media/AudioAttributes$Builder;" since="29"/>
+		<method name="setIsContentSpatialized(Z)Landroid/media/AudioAttributes$Builder;" since="33"/>
 		<method name="setLegacyStreamType(I)Landroid/media/AudioAttributes$Builder;"/>
+		<method name="setSpatializationBehavior(I)Landroid/media/AudioAttributes$Builder;" since="33"/>
 		<method name="setUsage(I)Landroid/media/AudioAttributes$Builder;"/>
 	</class>
 	<class name="android/media/AudioDescriptor" since="31">
@@ -25349,24 +25342,45 @@
 		<field name="CHANNEL_IN_Y_AXIS" since="5"/>
 		<field name="CHANNEL_IN_Z_AXIS" since="5"/>
 		<field name="CHANNEL_OUT_5POINT1" since="5"/>
+		<field name="CHANNEL_OUT_5POINT1POINT2" since="33"/>
+		<field name="CHANNEL_OUT_5POINT1POINT4" since="33"/>
 		<field name="CHANNEL_OUT_7POINT1" since="5" deprecated="23"/>
+		<field name="CHANNEL_OUT_7POINT1POINT2" since="33"/>
+		<field name="CHANNEL_OUT_7POINT1POINT4" since="33"/>
 		<field name="CHANNEL_OUT_7POINT1_SURROUND" since="23"/>
+		<field name="CHANNEL_OUT_9POINT1POINT4" since="33"/>
+		<field name="CHANNEL_OUT_9POINT1POINT6" since="33"/>
 		<field name="CHANNEL_OUT_BACK_CENTER" since="5"/>
 		<field name="CHANNEL_OUT_BACK_LEFT" since="5"/>
 		<field name="CHANNEL_OUT_BACK_RIGHT" since="5"/>
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_BOTTOM_FRONT_RIGHT" since="33"/>
 		<field name="CHANNEL_OUT_DEFAULT" since="5"/>
 		<field name="CHANNEL_OUT_FRONT_CENTER" since="5"/>
 		<field name="CHANNEL_OUT_FRONT_LEFT" since="5"/>
 		<field name="CHANNEL_OUT_FRONT_LEFT_OF_CENTER" since="5"/>
 		<field name="CHANNEL_OUT_FRONT_RIGHT" since="5"/>
 		<field name="CHANNEL_OUT_FRONT_RIGHT_OF_CENTER" since="5"/>
+		<field name="CHANNEL_OUT_FRONT_WIDE_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_FRONT_WIDE_RIGHT" since="33"/>
 		<field name="CHANNEL_OUT_LOW_FREQUENCY" since="5"/>
+		<field name="CHANNEL_OUT_LOW_FREQUENCY_2" since="33"/>
 		<field name="CHANNEL_OUT_MONO" since="5"/>
 		<field name="CHANNEL_OUT_QUAD" since="5"/>
 		<field name="CHANNEL_OUT_SIDE_LEFT" since="21"/>
 		<field name="CHANNEL_OUT_SIDE_RIGHT" since="21"/>
 		<field name="CHANNEL_OUT_STEREO" since="5"/>
 		<field name="CHANNEL_OUT_SURROUND" since="5"/>
+		<field name="CHANNEL_OUT_TOP_BACK_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_TOP_BACK_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_BACK_RIGHT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_TOP_FRONT_CENTER" since="33"/>
+		<field name="CHANNEL_OUT_TOP_FRONT_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_FRONT_RIGHT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_SIDE_LEFT" since="33"/>
+		<field name="CHANNEL_OUT_TOP_SIDE_RIGHT" since="33"/>
 		<field name="CREATOR" since="24"/>
 		<field name="ENCODING_AAC_ELD" since="28"/>
 		<field name="ENCODING_AAC_HE_V1" since="28"/>
@@ -25436,6 +25450,7 @@
 		<method name="getProperty(Ljava/lang/String;)Ljava/lang/String;" since="17"/>
 		<method name="getRingerMode()I"/>
 		<method name="getRouting(I)I" deprecated="15"/>
+		<method name="getSpatializer()Landroid/media/Spatializer;" since="33"/>
 		<method name="getStreamMaxVolume(I)I"/>
 		<method name="getStreamMinVolume(I)I" since="28"/>
 		<method name="getStreamVolume(I)I"/>
@@ -27579,6 +27594,7 @@
 		<field name="KEY_MAX_FPS_TO_ENCODER" since="29"/>
 		<field name="KEY_MAX_HEIGHT" since="19"/>
 		<field name="KEY_MAX_INPUT_SIZE"/>
+		<field name="KEY_MAX_OUTPUT_CHANNEL_COUNT" since="33"/>
 		<field name="KEY_MAX_PTS_GAP_TO_ENCODER" since="29"/>
 		<field name="KEY_MAX_WIDTH" since="19"/>
 		<field name="KEY_MIME"/>
@@ -29023,6 +29039,22 @@
 		<extends name="java/lang/Object"/>
 		<method name="onLoadComplete(Landroid/media/SoundPool;II)V"/>
 	</class>
+	<class name="android/media/Spatializer" since="33">
+		<extends name="java/lang/Object"/>
+		<method name="addOnSpatializerStateChangedListener(Ljava/util/concurrent/Executor;Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V"/>
+		<method name="canBeSpatialized(Landroid/media/AudioAttributes;Landroid/media/AudioFormat;)Z"/>
+		<method name="getImmersiveAudioLevel()I"/>
+		<method name="isAvailable()Z"/>
+		<method name="isEnabled()Z"/>
+		<method name="removeOnSpatializerStateChangedListener(Landroid/media/Spatializer$OnSpatializerStateChangedListener;)V"/>
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL"/>
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_NONE"/>
+		<field name="SPATIALIZER_IMMERSIVE_LEVEL_OTHER"/>
+	</class>
+	<class name="android/media/Spatializer$OnSpatializerStateChangedListener" since="33">
+		<method name="onSpatializerAvailableChanged(Landroid/media/Spatializer;Z)V"/>
+		<method name="onSpatializerEnabledChanged(Landroid/media/Spatializer;Z)V"/>
+	</class>
 	<class name="android/media/SubtitleData" since="28">
 		<extends name="java/lang/Object"/>
 		<method name="&lt;init>(IJJ[B)V" since="29"/>
@@ -34688,7 +34720,6 @@
 		<field name="CATEGORY_PAYMENT"/>
 		<field name="EXTRA_CATEGORY"/>
 		<field name="EXTRA_SERVICE_COMPONENT"/>
-		<field name="EXTRA_USERID" since="32"/>
 		<field name="SELECTION_MODE_ALWAYS_ASK"/>
 		<field name="SELECTION_MODE_ASK_IF_CONFLICT"/>
 		<field name="SELECTION_MODE_PREFER_DEFAULT"/>
@@ -38087,7 +38118,7 @@
 		<field name="Q" since="29"/>
 		<field name="R" since="30"/>
 		<field name="S" since="31"/>
-		<field name="TIRAMISU" since="32"/>
+		<field name="S_V2" since="33"/>
 	</class>
 	<class name="android/os/Bundle" since="1">
 		<extends name="android/os/BaseBundle" since="21"/>
@@ -38727,16 +38758,15 @@
 		<method name="dataPosition()I"/>
 		<method name="dataSize()I"/>
 		<method name="enforceInterface(Ljava/lang/String;)V"/>
-		<method name="enforceNoDataAvail()V" since="32"/>
 		<method name="hasFileDescriptors()Z"/>
 		<method name="hasFileDescriptors(II)Z" since="32"/>
 		<method name="marshall()[B"/>
 		<method name="obtain()Landroid/os/Parcel;"/>
 		<method name="obtain(I)Landroid/os/Parcel;" removed="21"/>
 		<method name="obtain(Landroid/os/IBinder;)Landroid/os/Parcel;" since="32"/>
-		<method name="readArray(Ljava/lang/ClassLoader;)[Ljava/lang/Object;" deprecated="32"/>
+		<method name="readArray(Ljava/lang/ClassLoader;)[Ljava/lang/Object;"/>
 		<method name="readArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;" since="32"/>
-		<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;" deprecated="32"/>
+		<method name="readArrayList(Ljava/lang/ClassLoader;)Ljava/util/ArrayList;"/>
 		<method name="readArrayList(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/ArrayList;" since="32"/>
 		<method name="readBinderArray([Landroid/os/IBinder;)V"/>
 		<method name="readBinderList(Ljava/util/List;)V"/>
@@ -38754,33 +38784,32 @@
 		<method name="readFileDescriptor()Landroid/os/ParcelFileDescriptor;"/>
 		<method name="readFloat()F"/>
 		<method name="readFloatArray([F)V"/>
-		<method name="readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;" deprecated="32"/>
+		<method name="readHashMap(Ljava/lang/ClassLoader;)Ljava/util/HashMap;"/>
 		<method name="readHashMap(Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)Ljava/util/HashMap;" since="32"/>
 		<method name="readInt()I"/>
 		<method name="readIntArray([I)V"/>
 		<method name="readInterfaceArray([Landroid/os/IInterface;Ljava/util/function/Function;)V" since="32"/>
 		<method name="readInterfaceList(Ljava/util/List;Ljava/util/function/Function;)V" since="32"/>
-		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;)V" deprecated="32"/>
+		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;)V"/>
 		<method name="readList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)V" since="32"/>
 		<method name="readLong()J"/>
 		<method name="readLongArray([J)V"/>
-		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V" deprecated="32"/>
+		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;)V"/>
 		<method name="readMap(Ljava/util/Map;Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Class;)V" since="32"/>
-		<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;" deprecated="32"/>
+		<method name="readParcelable(Ljava/lang/ClassLoader;)Landroid/os/Parcelable;"/>
 		<method name="readParcelable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/os/Parcelable;" since="32"/>
 		<method name="readParcelableArray(Ljava/lang/ClassLoader;)[Landroid/os/Parcelable;"/>
 		<method name="readParcelableArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)[Ljava/lang/Object;" since="32"/>
-		<method name="readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;" since="30" deprecated="32"/>
+		<method name="readParcelableCreator(Ljava/lang/ClassLoader;)Landroid/os/Parcelable$Creator;" since="30"/>
 		<method name="readParcelableCreator(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/os/Parcelable$Creator;" since="32"/>
-		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;" since="29" deprecated="32"/>
-		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/util/List;" since="32"/>
+		<method name="readParcelableList(Ljava/util/List;Ljava/lang/ClassLoader;)Ljava/util/List;" since="29"/>
 		<method name="readPersistableBundle()Landroid/os/PersistableBundle;" since="21"/>
 		<method name="readPersistableBundle(Ljava/lang/ClassLoader;)Landroid/os/PersistableBundle;" since="21"/>
-		<method name="readSerializable()Ljava/io/Serializable;" deprecated="32"/>
+		<method name="readSerializable()Ljava/io/Serializable;"/>
 		<method name="readSerializable(Ljava/lang/ClassLoader;Ljava/lang/Class;)Ljava/io/Serializable;" since="32"/>
 		<method name="readSize()Landroid/util/Size;" since="21"/>
 		<method name="readSizeF()Landroid/util/SizeF;" since="21"/>
-		<method name="readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;" deprecated="32"/>
+		<method name="readSparseArray(Ljava/lang/ClassLoader;)Landroid/util/SparseArray;"/>
 		<method name="readSparseArray(Ljava/lang/ClassLoader;Ljava/lang/Class;)Landroid/util/SparseArray;" since="32"/>
 		<method name="readSparseBooleanArray()Landroid/util/SparseBooleanArray;"/>
 		<method name="readString()Ljava/lang/String;"/>
@@ -43210,6 +43239,7 @@
 		<field name="ACTION_SEARCH_SETTINGS" since="8"/>
 		<field name="ACTION_SECURITY_SETTINGS"/>
 		<field name="ACTION_SETTINGS"/>
+		<field name="ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY" since="33"/>
 		<field name="ACTION_SHOW_REGULATORY_INFO" since="21"/>
 		<field name="ACTION_SHOW_WORK_POLICY_INFO" since="30"/>
 		<field name="ACTION_SOUND_SETTINGS"/>
@@ -43250,6 +43280,8 @@
 		<field name="EXTRA_EASY_CONNECT_ERROR_CODE" since="30"/>
 		<field name="EXTRA_INPUT_METHOD_ID" since="11"/>
 		<field name="EXTRA_NOTIFICATION_LISTENER_COMPONENT_NAME" since="30"/>
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY" since="33"/>
+		<field name="EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI" since="33"/>
 		<field name="EXTRA_SUB_ID" since="28"/>
 		<field name="EXTRA_WIFI_NETWORK_LIST" since="30"/>
 		<field name="EXTRA_WIFI_NETWORK_RESULT_LIST" since="30"/>
@@ -47268,6 +47300,12 @@
 		<method name="getEnd()I"/>
 		<method name="getStart()I"/>
 	</class>
+	<class name="android/service/voice/VisibleActivityInfo" since="33">
+		<extends name="java/lang/Object"/>
+		<implements name="android/os/Parcelable"/>
+		<method name="getActivityId()Landroid/service/voice/VoiceInteractionSession$ActivityId;"/>
+		<field name="CREATOR"/>
+	</class>
 	<class name="android/service/voice/VoiceInteractionService" since="21">
 		<extends name="android/app/Service"/>
 		<method name="&lt;init>()V"/>
@@ -47327,6 +47365,7 @@
 		<method name="onTaskFinished(Landroid/content/Intent;I)V" since="23"/>
 		<method name="onTaskStarted(Landroid/content/Intent;I)V" since="23"/>
 		<method name="performDirectAction(Landroid/app/DirectAction;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
+		<method name="registerVisibleActivityCallback(Ljava/util/concurrent/Executor;Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33"/>
 		<method name="requestDirectActions(Landroid/service/voice/VoiceInteractionSession$ActivityId;Landroid/os/CancellationSignal;Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="29"/>
 		<method name="setContentView(Landroid/view/View;)V"/>
 		<method name="setDisabledShowContext(I)V" since="23"/>
@@ -47336,6 +47375,7 @@
 		<method name="show(Landroid/os/Bundle;I)V" since="23"/>
 		<method name="startAssistantActivity(Landroid/content/Intent;)V" since="26"/>
 		<method name="startVoiceActivity(Landroid/content/Intent;)V" since="23"/>
+		<method name="unregisterVisibleActivityCallback(Landroid/service/voice/VoiceInteractionSession$VisibleActivityCallback;)V" since="33"/>
 		<field name="SHOW_SOURCE_ACTIVITY" since="24"/>
 		<field name="SHOW_SOURCE_APPLICATION" since="23"/>
 		<field name="SHOW_SOURCE_ASSIST_GESTURE" since="23"/>
@@ -47408,6 +47448,10 @@
 		<method name="getExtras()Landroid/os/Bundle;"/>
 		<method name="isActive()Z"/>
 	</class>
+	<class name="android/service/voice/VoiceInteractionSession$VisibleActivityCallback" since="33">
+		<method name="onInvisible(Landroid/service/voice/VoiceInteractionSession$ActivityId;)V"/>
+		<method name="onVisible(Landroid/service/voice/VisibleActivityInfo;)V"/>
+	</class>
 	<class name="android/service/voice/VoiceInteractionSessionService" since="21">
 		<extends name="android/app/Service"/>
 		<method name="&lt;init>()V"/>
@@ -49652,21 +49696,12 @@
 		<method name="getBands()Ljava/util/List;"/>
 		<method name="getMccMncs()Ljava/util/List;"/>
 		<method name="getPriority()I"/>
-		<method name="getRadioAccessSpecifiers()Ljava/util/List;" since="32"/>
 		<method name="getSubId()I"/>
 		<field name="CREATOR"/>
 		<field name="PRIORITY_HIGH"/>
 		<field name="PRIORITY_LOW"/>
 		<field name="PRIORITY_MED"/>
 	</class>
-	<class name="android/telephony/AvailableNetworkInfo$Builder" since="32">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(I)V"/>
-		<method name="build()Landroid/telephony/AvailableNetworkInfo;"/>
-		<method name="setMccMncs(Ljava/util/List;)Landroid/telephony/AvailableNetworkInfo$Builder;"/>
-		<method name="setPriority(I)Landroid/telephony/AvailableNetworkInfo$Builder;"/>
-		<method name="setRadioAccessSpecifiers(Ljava/util/List;)Landroid/telephony/AvailableNetworkInfo$Builder;"/>
-	</class>
 	<class name="android/telephony/BarringInfo" since="30">
 		<extends name="java/lang/Object"/>
 		<implements name="android/os/Parcelable"/>
@@ -52338,9 +52373,7 @@
 		<method name="isVoWiFiRoamingSettingEnabled()Z"/>
 		<method name="isVoWiFiSettingEnabled()Z"/>
 		<method name="isVtSettingEnabled()Z"/>
-		<method name="registerImsStateCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsStateCallback;)V" since="32"/>
 		<method name="registerMmTelCapabilityCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V"/>
-		<method name="unregisterImsStateCallback(Landroid/telephony/ims/ImsStateCallback;)V" since="32"/>
 		<method name="unregisterMmTelCapabilityCallback(Landroid/telephony/ims/ImsMmTelManager$CapabilityCallback;)V"/>
 		<field name="WIFI_MODE_CELLULAR_PREFERRED"/>
 		<field name="WIFI_MODE_WIFI_ONLY"/>
@@ -52357,9 +52390,7 @@
 		<method name="getRegistrationTransportType(Ljava/util/concurrent/Executor;Ljava/util/function/Consumer;)V" since="31"/>
 		<method name="getUceAdapter()Landroid/telephony/ims/RcsUceAdapter;"/>
 		<method name="registerImsRegistrationCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31"/>
-		<method name="registerImsStateCallback(Ljava/util/concurrent/Executor;Landroid/telephony/ims/ImsStateCallback;)V" since="32"/>
 		<method name="unregisterImsRegistrationCallback(Landroid/telephony/ims/RegistrationManager$RegistrationCallback;)V" since="31"/>
-		<method name="unregisterImsStateCallback(Landroid/telephony/ims/ImsStateCallback;)V" since="32"/>
 		<field name="ACTION_SHOW_CAPABILITY_DISCOVERY_OPT_IN"/>
 	</class>
 	<class name="android/telephony/ims/ImsReasonInfo" since="30">
@@ -52555,19 +52586,6 @@
 		<field name="ATTR_EPDG_OVER_CELL_INTERNET"/>
 		<field name="CREATOR"/>
 	</class>
-	<class name="android/telephony/ims/ImsStateCallback" since="32">
-		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V"/>
-		<method name="onAvailable()V"/>
-		<method name="onError()V"/>
-		<method name="onUnavailable(I)V"/>
-		<field name="REASON_IMS_SERVICE_DISCONNECTED"/>
-		<field name="REASON_IMS_SERVICE_NOT_READY"/>
-		<field name="REASON_NO_IMS_SERVICE_CONFIGURED"/>
-		<field name="REASON_SUBSCRIPTION_INACTIVE"/>
-		<field name="REASON_UNKNOWN_PERMANENT_ERROR"/>
-		<field name="REASON_UNKNOWN_TEMPORARY_ERROR"/>
-	</class>
 	<class name="android/telephony/ims/RcsUceAdapter" since="30">
 		<extends name="java/lang/Object"/>
 		<method name="isUceSettingEnabled()Z"/>
@@ -52783,140 +52801,140 @@
 	</class>
 	<class name="android/test/ActivityInstrumentationTestCase" since="1" deprecated="3">
 		<extends name="android/test/ActivityTestCase"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V" deprecated="32"/>
-		<method name="testActivityTestCaseSetUpProperly()V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;Z)V" deprecated="33"/>
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33"/>
 	</class>
 	<class name="android/test/ActivityInstrumentationTestCase2" since="3" deprecated="24">
 		<extends name="android/test/ActivityTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" since="8" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" since="8" deprecated="33"/>
 		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="15"/>
-		<method name="setActivityInitialTouchMode(Z)V" deprecated="32"/>
-		<method name="setActivityIntent(Landroid/content/Intent;)V" deprecated="32"/>
+		<method name="setActivityInitialTouchMode(Z)V" deprecated="33"/>
+		<method name="setActivityIntent(Landroid/content/Intent;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/ActivityTestCase" since="1" deprecated="24">
 		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="getActivity()Landroid/app/Activity;" deprecated="32"/>
-		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="setActivity(Landroid/app/Activity;)V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33"/>
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="setActivity(Landroid/app/Activity;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/ActivityUnitTestCase" since="1" deprecated="24">
 		<extends name="android/test/ActivityTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="getFinishedActivityRequest()I" deprecated="32"/>
-		<method name="getRequestedOrientation()I" deprecated="32"/>
-		<method name="getStartedActivityIntent()Landroid/content/Intent;" deprecated="32"/>
-		<method name="getStartedActivityRequest()I" deprecated="32"/>
-		<method name="isFinishCalled()Z" deprecated="32"/>
-		<method name="setActivityContext(Landroid/content/Context;)V" deprecated="32"/>
-		<method name="setApplication(Landroid/app/Application;)V" deprecated="32"/>
-		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="getFinishedActivityRequest()I" deprecated="33"/>
+		<method name="getRequestedOrientation()I" deprecated="33"/>
+		<method name="getStartedActivityIntent()Landroid/content/Intent;" deprecated="33"/>
+		<method name="getStartedActivityRequest()I" deprecated="33"/>
+		<method name="isFinishCalled()Z" deprecated="33"/>
+		<method name="setActivityContext(Landroid/content/Context;)V" deprecated="33"/>
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33"/>
+		<method name="startActivity(Landroid/content/Intent;Landroid/os/Bundle;Ljava/lang/Object;)Landroid/app/Activity;" deprecated="33"/>
 	</class>
 	<class name="android/test/AndroidTestCase" since="1" deprecated="24">
 		<extends name="junit/framework/TestCase"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4" deprecated="32"/>
-		<method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="32"/>
-		<method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="32"/>
-		<method name="getContext()Landroid/content/Context;" deprecated="32"/>
-		<method name="getTestContext()Landroid/content/Context;" since="32" deprecated="32"/>
-		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="setContext(Landroid/content/Context;)V" deprecated="32"/>
-		<method name="setTestContext(Landroid/content/Context;)V" since="32" deprecated="32"/>
-		<method name="testAndroidTestCaseSetupProperly()V" deprecated="32"/>
-		<field name="mContext" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="assertActivityRequiresPermission(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" since="4" deprecated="33"/>
+		<method name="assertReadingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33"/>
+		<method name="assertWritingContentUriRequiresPermission(Landroid/net/Uri;Ljava/lang/String;)V" since="4" deprecated="33"/>
+		<method name="getContext()Landroid/content/Context;" deprecated="33"/>
+		<method name="getTestContext()Landroid/content/Context;" since="33" deprecated="33"/>
+		<method name="scrubClass(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33"/>
+		<method name="setTestContext(Landroid/content/Context;)V" since="33" deprecated="33"/>
+		<method name="testAndroidTestCaseSetupProperly()V" deprecated="33"/>
+		<field name="mContext" deprecated="33"/>
 	</class>
 	<class name="android/test/AndroidTestRunner" since="1" deprecated="24">
 		<extends name="junit/runner/BaseTestRunner"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="addTestListener(Ljunit/framework/TestListener;)V" deprecated="32"/>
-		<method name="clearTestListeners()V" deprecated="32"/>
-		<method name="createTestResult()Ljunit/framework/TestResult;" deprecated="32"/>
-		<method name="getTestCases()Ljava/util/List;" deprecated="32"/>
-		<method name="getTestClassName()Ljava/lang/String;" deprecated="32"/>
-		<method name="getTestResult()Ljunit/framework/TestResult;" deprecated="32"/>
-		<method name="runTest()V" deprecated="32"/>
-		<method name="runTest(Ljunit/framework/TestResult;)V" deprecated="32"/>
-		<method name="setContext(Landroid/content/Context;)V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" deprecated="33"/>
+		<method name="clearTestListeners()V" deprecated="33"/>
+		<method name="createTestResult()Ljunit/framework/TestResult;" deprecated="33"/>
+		<method name="getTestCases()Ljava/util/List;" deprecated="33"/>
+		<method name="getTestClassName()Ljava/lang/String;" deprecated="33"/>
+		<method name="getTestResult()Ljunit/framework/TestResult;" deprecated="33"/>
+		<method name="runTest()V" deprecated="33"/>
+		<method name="runTest(Ljunit/framework/TestResult;)V" deprecated="33"/>
+		<method name="setContext(Landroid/content/Context;)V" deprecated="33"/>
 		<method name="setInstrumentaiton(Landroid/app/Instrumentation;)V" deprecated="15"/>
-		<method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="32"/>
-		<method name="setTest(Ljunit/framework/Test;)V" deprecated="32"/>
-		<method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V" deprecated="32"/>
+		<method name="setInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33"/>
+		<method name="setTest(Ljunit/framework/Test;)V" deprecated="33"/>
+		<method name="setTestClassName(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/ApplicationTestCase" since="1" deprecated="24">
 		<extends name="android/test/AndroidTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="createApplication()V" deprecated="32"/>
-		<method name="getApplication()Landroid/app/Application;" deprecated="32"/>
-		<method name="getSystemContext()Landroid/content/Context;" deprecated="32"/>
-		<method name="terminateApplication()V" deprecated="32"/>
-		<method name="testApplicationTestCaseSetUpProperly()V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="createApplication()V" deprecated="33"/>
+		<method name="getApplication()Landroid/app/Application;" deprecated="33"/>
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33"/>
+		<method name="terminateApplication()V" deprecated="33"/>
+		<method name="testApplicationTestCaseSetUpProperly()V" deprecated="33"/>
 	</class>
 	<class name="android/test/AssertionFailedError" since="1" deprecated="16">
 		<extends name="java/lang/Error"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/ComparisonFailure" since="1" deprecated="16">
 		<extends name="android/test/AssertionFailedError"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/FlakyTest" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
 		<implements name="java/lang/annotation/Annotation"/>
-		<method name="tolerance()I" deprecated="32"/>
+		<method name="tolerance()I" deprecated="33"/>
 	</class>
 	<class name="android/test/InstrumentationTestCase" since="1" deprecated="24">
 		<extends name="junit/framework/TestCase"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="getInstrumentation()Landroid/app/Instrumentation;" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="getInstrumentation()Landroid/app/Instrumentation;" deprecated="33"/>
 		<method name="injectInsrumentation(Landroid/app/Instrumentation;)V" deprecated="15"/>
-		<method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="32"/>
-		<method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;" deprecated="32"/>
-		<method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3" deprecated="32"/>
-		<method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3" deprecated="32"/>
-		<method name="sendKeys(Ljava/lang/String;)V" deprecated="32"/>
-		<method name="sendKeys([I)V" deprecated="32"/>
-		<method name="sendRepeatedKeys([I)V" deprecated="32"/>
+		<method name="injectInstrumentation(Landroid/app/Instrumentation;)V" since="5" deprecated="33"/>
+		<method name="launchActivity(Ljava/lang/String;Ljava/lang/Class;Landroid/os/Bundle;)Landroid/app/Activity;" deprecated="33"/>
+		<method name="launchActivityWithIntent(Ljava/lang/String;Ljava/lang/Class;Landroid/content/Intent;)Landroid/app/Activity;" since="3" deprecated="33"/>
+		<method name="runTestOnUiThread(Ljava/lang/Runnable;)V" since="3" deprecated="33"/>
+		<method name="sendKeys(Ljava/lang/String;)V" deprecated="33"/>
+		<method name="sendKeys([I)V" deprecated="33"/>
+		<method name="sendRepeatedKeys([I)V" deprecated="33"/>
 	</class>
 	<class name="android/test/InstrumentationTestRunner" since="1" deprecated="24">
 		<extends name="android/app/Instrumentation"/>
 		<implements name="android/test/TestSuiteProvider"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="addTestListener(Ljunit/framework/TestListener;)V" since="32" deprecated="32"/>
-		<method name="getAllTests()Ljunit/framework/TestSuite;" deprecated="32"/>
-		<method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;" deprecated="32"/>
-		<method name="getArguments()Landroid/os/Bundle;" since="18" deprecated="32"/>
-		<method name="getLoader()Ljava/lang/ClassLoader;" deprecated="32"/>
-		<field name="REPORT_KEY_NAME_CLASS" deprecated="32"/>
-		<field name="REPORT_KEY_NAME_TEST" deprecated="32"/>
-		<field name="REPORT_KEY_NUM_CURRENT" deprecated="32"/>
-		<field name="REPORT_KEY_NUM_TOTAL" deprecated="32"/>
-		<field name="REPORT_KEY_STACK" deprecated="32"/>
-		<field name="REPORT_VALUE_ID" deprecated="32"/>
-		<field name="REPORT_VALUE_RESULT_ERROR" deprecated="32"/>
-		<field name="REPORT_VALUE_RESULT_FAILURE" deprecated="32"/>
-		<field name="REPORT_VALUE_RESULT_OK" deprecated="32"/>
-		<field name="REPORT_VALUE_RESULT_START" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="addTestListener(Ljunit/framework/TestListener;)V" since="33" deprecated="33"/>
+		<method name="getAllTests()Ljunit/framework/TestSuite;" deprecated="33"/>
+		<method name="getAndroidTestRunner()Landroid/test/AndroidTestRunner;" deprecated="33"/>
+		<method name="getArguments()Landroid/os/Bundle;" since="18" deprecated="33"/>
+		<method name="getLoader()Ljava/lang/ClassLoader;" deprecated="33"/>
+		<field name="REPORT_KEY_NAME_CLASS" deprecated="33"/>
+		<field name="REPORT_KEY_NAME_TEST" deprecated="33"/>
+		<field name="REPORT_KEY_NUM_CURRENT" deprecated="33"/>
+		<field name="REPORT_KEY_NUM_TOTAL" deprecated="33"/>
+		<field name="REPORT_KEY_STACK" deprecated="33"/>
+		<field name="REPORT_VALUE_ID" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_ERROR" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_FAILURE" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_OK" deprecated="33"/>
+		<field name="REPORT_VALUE_RESULT_START" deprecated="33"/>
 	</class>
 	<class name="android/test/InstrumentationTestSuite" since="1" deprecated="24">
 		<extends name="junit/framework/TestSuite"/>
-		<method name="&lt;init>(Landroid/app/Instrumentation;)V" deprecated="32"/>
-		<method name="&lt;init>(Ljava/lang/Class;Landroid/app/Instrumentation;)V" deprecated="32"/>
-		<method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation;)V" deprecated="32"/>
+		<method name="&lt;init>(Landroid/app/Instrumentation;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/Class;Landroid/app/Instrumentation;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Landroid/app/Instrumentation;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/IsolatedContext" since="1" deprecated="24">
 		<extends name="android/content/ContextWrapper"/>
-		<method name="&lt;init>(Landroid/content/ContentResolver;Landroid/content/Context;)V" deprecated="32"/>
-		<method name="getAndClearBroadcastIntents()Ljava/util/List;" deprecated="32"/>
+		<method name="&lt;init>(Landroid/content/ContentResolver;Landroid/content/Context;)V" deprecated="33"/>
+		<method name="getAndClearBroadcastIntents()Ljava/util/List;" deprecated="33"/>
 	</class>
-	<class name="android/test/LaunchPerformanceBase" since="32" deprecated="32">
+	<class name="android/test/LaunchPerformanceBase" since="33" deprecated="33">
 		<extends name="android/app/Instrumentation"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="LaunchApp()V" deprecated="32"/>
-		<field name="mIntent" deprecated="32"/>
-		<field name="mResults" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="LaunchApp()V" deprecated="33"/>
+		<field name="mIntent" deprecated="33"/>
+		<field name="mResults" deprecated="33"/>
 	</class>
 	<class name="android/test/LoaderTestCase" since="11">
 		<extends name="android/test/AndroidTestCase"/>
@@ -52925,63 +52943,63 @@
 	</class>
 	<class name="android/test/MoreAsserts" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
-		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32"/>
-		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32"/>
-		<method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertEmpty(Ljava/lang/Iterable;)V" deprecated="32"/>
-		<method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="32"/>
-		<method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="32"/>
-		<method name="assertEmpty(Ljava/util/Map;)V" deprecated="32"/>
-		<method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V" deprecated="32"/>
-		<method name="assertEquals(Ljava/lang/String;[B[B)V" deprecated="32"/>
-		<method name="assertEquals(Ljava/lang/String;[D[D)V" deprecated="32"/>
-		<method name="assertEquals(Ljava/lang/String;[I[I)V" deprecated="32"/>
-		<method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V" deprecated="32"/>
-		<method name="assertEquals([B[B)V" deprecated="32"/>
-		<method name="assertEquals([D[D)V" deprecated="32"/>
-		<method name="assertEquals([I[I)V" deprecated="32"/>
-		<method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32"/>
-		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="32"/>
-		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="32"/>
-		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32"/>
-		<method name="assertNotEmpty(Ljava/lang/Iterable;)V" deprecated="32"/>
-		<method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="32"/>
-		<method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="32"/>
-		<method name="assertNotEmpty(Ljava/util/Map;)V" deprecated="32"/>
-		<method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="32"/>
-		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="32"/>
-		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32"/>
-		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="32"/>
-		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="32"/>
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="assertAssignableFrom(Ljava/lang/Class;Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertContentsInAnyOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContentsInAnyOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContentsInOrder(Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertContentsInOrder(Ljava/lang/String;Ljava/lang/Iterable;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertEmpty(Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[B[B)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[D[D)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[I[I)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertEquals(Ljava/util/Set;Ljava/util/Set;)V" deprecated="33"/>
+		<method name="assertEquals([B[B)V" deprecated="33"/>
+		<method name="assertEquals([D[D)V" deprecated="33"/>
+		<method name="assertEquals([I[I)V" deprecated="33"/>
+		<method name="assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/regex/MatchResult;" deprecated="33"/>
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="assertNotContainsRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/lang/Iterable;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/lang/String;Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertNotEmpty(Ljava/util/Map;)V" deprecated="33"/>
+		<method name="assertNotEqual(Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertNotEqual(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V" deprecated="33"/>
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="assertNotMatchesRegex(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33"/>
+		<method name="checkEqualsAndHashCodeMethods(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Z)V" deprecated="33"/>
 	</class>
 	<class name="android/test/PerformanceTestCase" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
-		<method name="isPerformanceOnly()Z" deprecated="32"/>
-		<method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I" deprecated="32"/>
+		<method name="isPerformanceOnly()Z" deprecated="33"/>
+		<method name="startPerformance(Landroid/test/PerformanceTestCase$Intermediates;)I" deprecated="33"/>
 	</class>
-	<class name="android/test/PerformanceTestCase$Intermediates" since="1" deprecated="32">
+	<class name="android/test/PerformanceTestCase$Intermediates" since="1" deprecated="33">
 		<extends name="java/lang/Object"/>
-		<method name="addIntermediate(Ljava/lang/String;)V" deprecated="32"/>
-		<method name="addIntermediate(Ljava/lang/String;J)V" deprecated="32"/>
-		<method name="finishTiming(Z)V" deprecated="32"/>
-		<method name="setInternalIterations(I)V" deprecated="32"/>
-		<method name="startTiming(Z)V" deprecated="32"/>
+		<method name="addIntermediate(Ljava/lang/String;)V" deprecated="33"/>
+		<method name="addIntermediate(Ljava/lang/String;J)V" deprecated="33"/>
+		<method name="finishTiming(Z)V" deprecated="33"/>
+		<method name="setInternalIterations(I)V" deprecated="33"/>
+		<method name="startTiming(Z)V" deprecated="33"/>
 	</class>
 	<class name="android/test/ProviderTestCase" since="1" deprecated="5">
 		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V" deprecated="32"/>
-		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" deprecated="32"/>
-		<method name="getMockContext()Landroid/test/IsolatedContext;" deprecated="32"/>
-		<method name="getProvider()Landroid/content/ContentProvider;" deprecated="32"/>
-		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Class;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="getMockContentResolver()Landroid/test/mock/MockContentResolver;" deprecated="33"/>
+		<method name="getMockContext()Landroid/test/IsolatedContext;" deprecated="33"/>
+		<method name="getProvider()Landroid/content/ContentProvider;" deprecated="33"/>
+		<method name="newResolverWithContentProviderFromSql(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)Landroid/content/ContentResolver;" deprecated="33"/>
 	</class>
 	<class name="android/test/ProviderTestCase2" since="3">
 		<extends name="android/test/AndroidTestCase"/>
@@ -52993,81 +53011,81 @@
 	</class>
 	<class name="android/test/RenamingDelegatingContext" since="1" deprecated="24">
 		<extends name="android/content/ContextWrapper"/>
-		<method name="&lt;init>(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V" deprecated="32"/>
-		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V" deprecated="32"/>
-		<method name="getDatabasePrefix()Ljava/lang/String;" deprecated="32"/>
-		<method name="makeExistingFilesAndDbsAccessible()V" deprecated="32"/>
-		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;" deprecated="32"/>
-		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;" deprecated="32"/>
+		<method name="&lt;init>(Landroid/content/Context;Landroid/content/Context;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;)V" deprecated="33"/>
+		<method name="getDatabasePrefix()Ljava/lang/String;" deprecated="33"/>
+		<method name="makeExistingFilesAndDbsAccessible()V" deprecated="33"/>
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;)Landroid/content/ContentProvider;" deprecated="33"/>
+		<method name="providerWithRenamedContext(Ljava/lang/Class;Landroid/content/Context;Ljava/lang/String;Z)Landroid/content/ContentProvider;" deprecated="33"/>
 	</class>
-	<class name="android/test/RepetitiveTest" since="32" deprecated="32">
+	<class name="android/test/RepetitiveTest" since="33" deprecated="33">
 		<extends name="java/lang/Object"/>
 		<implements name="java/lang/annotation/Annotation"/>
-		<method name="numIterations()I" deprecated="32"/>
+		<method name="numIterations()I" deprecated="33"/>
 	</class>
 	<class name="android/test/ServiceTestCase" since="1" deprecated="24">
 		<extends name="android/test/AndroidTestCase"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;" deprecated="32"/>
-		<method name="getApplication()Landroid/app/Application;" deprecated="32"/>
-		<method name="getService()Landroid/app/Service;" deprecated="32"/>
-		<method name="getSystemContext()Landroid/content/Context;" deprecated="32"/>
-		<method name="setApplication(Landroid/app/Application;)V" deprecated="32"/>
-		<method name="setupService()V" deprecated="32"/>
-		<method name="shutdownService()V" deprecated="32"/>
-		<method name="startService(Landroid/content/Intent;)V" deprecated="32"/>
-		<method name="testServiceTestCaseSetUpProperly()V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="bindService(Landroid/content/Intent;)Landroid/os/IBinder;" deprecated="33"/>
+		<method name="getApplication()Landroid/app/Application;" deprecated="33"/>
+		<method name="getService()Landroid/app/Service;" deprecated="33"/>
+		<method name="getSystemContext()Landroid/content/Context;" deprecated="33"/>
+		<method name="setApplication(Landroid/app/Application;)V" deprecated="33"/>
+		<method name="setupService()V" deprecated="33"/>
+		<method name="shutdownService()V" deprecated="33"/>
+		<method name="startService(Landroid/content/Intent;)V" deprecated="33"/>
+		<method name="testServiceTestCaseSetUpProperly()V" deprecated="33"/>
 	</class>
 	<class name="android/test/SingleLaunchActivityTestCase" since="1" deprecated="24">
 		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="getActivity()Landroid/app/Activity;" deprecated="32"/>
-		<method name="testActivityTestCaseSetUpProperly()V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="getActivity()Landroid/app/Activity;" deprecated="33"/>
+		<method name="testActivityTestCaseSetUpProperly()V" deprecated="33"/>
 	</class>
 	<class name="android/test/SyncBaseInstrumentation" since="1" deprecated="24">
 		<extends name="android/test/InstrumentationTestCase"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="cancelSyncsandDisableAutoSync()V" deprecated="32"/>
-		<method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="cancelSyncsandDisableAutoSync()V" deprecated="33"/>
+		<method name="syncProvider(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/TestSuiteProvider" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
-		<method name="getTestSuite()Ljunit/framework/TestSuite;" deprecated="32"/>
+		<method name="getTestSuite()Ljunit/framework/TestSuite;" deprecated="33"/>
 	</class>
 	<class name="android/test/TouchUtils" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="clickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33"/>
 		<method name="drag(Landroid/test/ActivityInstrumentationTestCase;FFFFI)V" deprecated="15"/>
-		<method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3" deprecated="32"/>
+		<method name="drag(Landroid/test/InstrumentationTestCase;FFFFI)V" since="3" deprecated="33"/>
 		<method name="dragQuarterScreenDown(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15"/>
-		<method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="32"/>
+		<method name="dragQuarterScreenDown(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33"/>
 		<method name="dragQuarterScreenUp(Landroid/test/ActivityInstrumentationTestCase;)V" deprecated="15"/>
-		<method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="32"/>
+		<method name="dragQuarterScreenUp(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;)V" since="3" deprecated="33"/>
 		<method name="dragViewBy(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15"/>
 		<method name="dragViewBy(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="15"/>
 		<method name="dragViewTo(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;III)I" deprecated="15"/>
-		<method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="32"/>
+		<method name="dragViewTo(Landroid/test/InstrumentationTestCase;Landroid/view/View;III)I" since="3" deprecated="33"/>
 		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
 		<method name="dragViewToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15"/>
-		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3" deprecated="32"/>
-		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3" deprecated="32"/>
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;)V" since="3" deprecated="33"/>
+		<method name="dragViewToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/View;I)V" since="3" deprecated="33"/>
 		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
 		<method name="dragViewToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;I)V" deprecated="15"/>
-		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="32"/>
-		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3" deprecated="32"/>
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33"/>
+		<method name="dragViewToTop(Landroid/test/InstrumentationTestCase;Landroid/view/View;I)V" since="3" deprecated="33"/>
 		<method name="dragViewToX(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15"/>
-		<method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="32"/>
+		<method name="dragViewToX(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33"/>
 		<method name="dragViewToY(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;II)I" deprecated="15"/>
-		<method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="32"/>
+		<method name="dragViewToY(Landroid/test/InstrumentationTestCase;Landroid/view/View;II)I" since="3" deprecated="33"/>
 		<method name="longClickView(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/View;)V" deprecated="15"/>
-		<method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="32"/>
+		<method name="longClickView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" since="3" deprecated="33"/>
 		<method name="scrollToBottom(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15"/>
-		<method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="32"/>
+		<method name="scrollToBottom(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33"/>
 		<method name="scrollToTop(Landroid/test/ActivityInstrumentationTestCase;Landroid/view/ViewGroup;)V" deprecated="15"/>
-		<method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="32"/>
-		<method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="32"/>
-		<method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="32"/>
+		<method name="scrollToTop(Landroid/test/InstrumentationTestCase;Landroid/app/Activity;Landroid/view/ViewGroup;)V" since="3" deprecated="33"/>
+		<method name="tapView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33"/>
+		<method name="touchAndCancelView(Landroid/test/InstrumentationTestCase;Landroid/view/View;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/UiThreadTest" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
@@ -53075,39 +53093,39 @@
 	</class>
 	<class name="android/test/ViewAsserts" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
-		<method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32"/>
-		<method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V" deprecated="32"/>
-		<method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V" deprecated="32"/>
-		<method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32"/>
-		<method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32"/>
-		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
-		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="32"/>
-		<method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="32"/>
+		<method name="assertBaselineAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertBottomAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertGroupContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertGroupIntegrity(Landroid/view/ViewGroup;)V" deprecated="33"/>
+		<method name="assertGroupNotContains(Landroid/view/ViewGroup;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertHasScreenCoordinates(Landroid/view/View;Landroid/view/View;II)V" deprecated="33"/>
+		<method name="assertHorizontalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertLeftAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertOffScreenAbove(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertOffScreenBelow(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertOnScreen(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertRightAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
+		<method name="assertTopAligned(Landroid/view/View;Landroid/view/View;I)V" deprecated="33"/>
+		<method name="assertVerticalCenterAligned(Landroid/view/View;Landroid/view/View;)V" deprecated="33"/>
 	</class>
-	<class name="android/test/mock/MockAccountManager" since="32" deprecated="32">
+	<class name="android/test/mock/MockAccountManager" since="33" deprecated="33">
 		<extends name="java/lang/Object"/>
-		<method name="newMockAccountManager(Landroid/content/Context;)Landroid/accounts/AccountManager;" deprecated="32"/>
+		<method name="newMockAccountManager(Landroid/content/Context;)Landroid/accounts/AccountManager;" deprecated="33"/>
 	</class>
 	<class name="android/test/mock/MockApplication" since="1" deprecated="24">
 		<extends name="android/app/Application"/>
-		<method name="&lt;init>()V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
 	</class>
 	<class name="android/test/mock/MockContentProvider" since="8">
 		<extends name="android/content/ContentProvider"/>
 		<method name="&lt;init>()V"/>
 		<method name="&lt;init>(Landroid/content/Context;)V"/>
 		<method name="&lt;init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;[Landroid/content/pm/PathPermission;)V"/>
-		<method name="attachInfoForTesting(Landroid/content/ContentProvider;Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" since="32" deprecated="32"/>
+		<method name="attachInfoForTesting(Landroid/content/ContentProvider;Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V" since="33" deprecated="33"/>
 	</class>
 	<class name="android/test/mock/MockContentResolver" since="1">
 		<extends name="android/content/ContentResolver"/>
@@ -53124,7 +53142,7 @@
 	<class name="android/test/mock/MockCursor" since="8" deprecated="24">
 		<extends name="java/lang/Object"/>
 		<implements name="android/database/Cursor"/>
-		<method name="&lt;init>()V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
 		<method name="abortUpdates()V" removed="11"/>
 		<method name="commitUpdates()Z" removed="11"/>
 		<method name="commitUpdates(Ljava/util/Map;)Z" removed="11"/>
@@ -53143,58 +53161,58 @@
 	<class name="android/test/mock/MockDialogInterface" since="1" deprecated="24">
 		<extends name="java/lang/Object"/>
 		<implements name="android/content/DialogInterface"/>
-		<method name="&lt;init>()V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
 	</class>
 	<class name="android/test/mock/MockPackageManager" since="1" deprecated="24">
 		<extends name="android/content/pm/PackageManager"/>
-		<method name="&lt;init>()V" deprecated="32"/>
-		<method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
+		<method name="getAllIntentFilters(Ljava/lang/String;)Ljava/util/List;" since="23" deprecated="33"/>
 		<method name="getDefaultBrowserPackageName(I)Ljava/lang/String;" since="23" removed="24"/>
-		<method name="resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;" since="32" deprecated="32"/>
+		<method name="resolveServiceAsUser(Landroid/content/Intent;II)Landroid/content/pm/ResolveInfo;" since="33" deprecated="33"/>
 		<method name="setDefaultBrowserPackageName(Ljava/lang/String;I)Z" since="23" removed="24"/>
 		<method name="setPackageObbPath(Ljava/lang/String;Ljava/lang/String;)V" since="9" removed="10"/>
 	</class>
 	<class name="android/test/mock/MockResources" since="1" deprecated="24">
 		<extends name="android/content/res/Resources"/>
-		<method name="&lt;init>()V" deprecated="32"/>
+		<method name="&lt;init>()V" deprecated="33"/>
 	</class>
-	<class name="android/test/mock/MockService" since="32" deprecated="32">
+	<class name="android/test/mock/MockService" since="33" deprecated="33">
 		<extends name="java/lang/Object"/>
-		<method name="attachForTesting(Landroid/app/Service;Landroid/content/Context;Ljava/lang/String;Landroid/app/Application;)V" deprecated="32"/>
+		<method name="attachForTesting(Landroid/app/Service;Landroid/content/Context;Ljava/lang/String;Landroid/app/Application;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/suitebuilder/TestMethod" since="1" deprecated="26">
 		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="3" deprecated="32"/>
-		<method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="&lt;init>(Ljunit/framework/TestCase;)V" since="3" deprecated="32"/>
-		<method name="createTest()Ljunit/framework/TestCase;" deprecated="32"/>
-		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" deprecated="32"/>
-		<method name="getEnclosingClass()Ljava/lang/Class;" deprecated="32"/>
-		<method name="getEnclosingClassname()Ljava/lang/String;" deprecated="32"/>
-		<method name="getName()Ljava/lang/String;" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/Class;)V" since="3" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/reflect/Method;Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljunit/framework/TestCase;)V" since="3" deprecated="33"/>
+		<method name="createTest()Ljunit/framework/TestCase;" deprecated="33"/>
+		<method name="getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;" deprecated="33"/>
+		<method name="getEnclosingClass()Ljava/lang/Class;" deprecated="33"/>
+		<method name="getEnclosingClassname()Ljava/lang/String;" deprecated="33"/>
+		<method name="getName()Ljava/lang/String;" deprecated="33"/>
 	</class>
 	<class name="android/test/suitebuilder/TestSuiteBuilder" since="1" deprecated="26">
 		<extends name="java/lang/Object"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33"/>
 		<method name="addRequirements(Ljava/util/List;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28"/>
 		<method name="addRequirements([Lcom/android/internal/util/Predicate;)Landroid/test/suitebuilder/TestSuiteBuilder;" removed="28"/>
-		<method name="build()Ljunit/framework/TestSuite;" deprecated="32"/>
-		<method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32"/>
-		<method name="getSuiteName()Ljava/lang/String;" deprecated="32"/>
-		<method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32"/>
-		<method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32"/>
-		<method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="32"/>
+		<method name="build()Ljunit/framework/TestSuite;" deprecated="33"/>
+		<method name="excludePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
+		<method name="getSuiteName()Ljava/lang/String;" deprecated="33"/>
+		<method name="includeAllPackagesUnderHere()Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
+		<method name="includePackages([Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
+		<method name="named(Ljava/lang/String;)Landroid/test/suitebuilder/TestSuiteBuilder;" deprecated="33"/>
 	</class>
 	<class name="android/test/suitebuilder/TestSuiteBuilder$FailedToCreateTests" since="1" deprecated="26">
 		<extends name="junit/framework/TestCase"/>
-		<method name="&lt;init>(Ljava/lang/Exception;)V" deprecated="32"/>
-		<method name="testSuiteConstructionFailed()V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Exception;)V" deprecated="33"/>
+		<method name="testSuiteConstructionFailed()V" deprecated="33"/>
 	</class>
-	<class name="android/test/suitebuilder/UnitTestSuiteBuilder" since="32" deprecated="32">
+	<class name="android/test/suitebuilder/UnitTestSuiteBuilder" since="33" deprecated="33">
 		<extends name="android/test/suitebuilder/TestSuiteBuilder"/>
-		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="32"/>
-		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="32"/>
+		<method name="&lt;init>(Ljava/lang/Class;)V" deprecated="33"/>
+		<method name="&lt;init>(Ljava/lang/String;Ljava/lang/ClassLoader;)V" deprecated="33"/>
 	</class>
 	<class name="android/test/suitebuilder/annotation/LargeTest" since="2" deprecated="24">
 		<extends name="java/lang/Object"/>
@@ -56020,8 +56038,14 @@
 	</class>
 	<class name="android/view/AttachedSurfaceControl" since="31">
 		<extends name="java/lang/Object"/>
+		<method name="addOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33"/>
 		<method name="applyTransactionOnDraw(Landroid/view/SurfaceControl$Transaction;)Z"/>
 		<method name="buildReparentTransaction(Landroid/view/SurfaceControl;)Landroid/view/SurfaceControl$Transaction;"/>
+		<method name="getBufferTransformHint()I" since="33"/>
+		<method name="removeOnBufferTransformHintChangedListener(Landroid/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener;)V" since="33"/>
+	</class>
+	<class name="android/view/AttachedSurfaceControl$OnBufferTransformHintChangedListener" since="33">
+		<method name="onBufferTransformHintChanged(I)V"/>
 	</class>
 	<class name="android/view/Choreographer" since="16">
 		<extends name="java/lang/Object"/>
@@ -56645,10 +56669,6 @@
 		<field name="KEYCODE_CUT" since="24"/>
 		<field name="KEYCODE_D"/>
 		<field name="KEYCODE_DEL"/>
-		<field name="KEYCODE_DEMO_APP_1" since="32"/>
-		<field name="KEYCODE_DEMO_APP_2" since="32"/>
-		<field name="KEYCODE_DEMO_APP_3" since="32"/>
-		<field name="KEYCODE_DEMO_APP_4" since="32"/>
 		<field name="KEYCODE_DPAD_CENTER"/>
 		<field name="KEYCODE_DPAD_DOWN"/>
 		<field name="KEYCODE_DPAD_DOWN_LEFT" since="24"/>
@@ -56680,10 +56700,6 @@
 		<field name="KEYCODE_F7" since="11"/>
 		<field name="KEYCODE_F8" since="11"/>
 		<field name="KEYCODE_F9" since="11"/>
-		<field name="KEYCODE_FEATURED_APP_1" since="32"/>
-		<field name="KEYCODE_FEATURED_APP_2" since="32"/>
-		<field name="KEYCODE_FEATURED_APP_3" since="32"/>
-		<field name="KEYCODE_FEATURED_APP_4" since="32"/>
 		<field name="KEYCODE_FOCUS"/>
 		<field name="KEYCODE_FORWARD" since="11"/>
 		<field name="KEYCODE_FORWARD_DEL" since="11"/>
@@ -56849,14 +56865,6 @@
 		<field name="KEYCODE_U"/>
 		<field name="KEYCODE_UNKNOWN"/>
 		<field name="KEYCODE_V"/>
-		<field name="KEYCODE_VIDEO_APP_1" since="32"/>
-		<field name="KEYCODE_VIDEO_APP_2" since="32"/>
-		<field name="KEYCODE_VIDEO_APP_3" since="32"/>
-		<field name="KEYCODE_VIDEO_APP_4" since="32"/>
-		<field name="KEYCODE_VIDEO_APP_5" since="32"/>
-		<field name="KEYCODE_VIDEO_APP_6" since="32"/>
-		<field name="KEYCODE_VIDEO_APP_7" since="32"/>
-		<field name="KEYCODE_VIDEO_APP_8" since="32"/>
 		<field name="KEYCODE_VOICE_ASSIST" since="21"/>
 		<field name="KEYCODE_VOLUME_DOWN"/>
 		<field name="KEYCODE_VOLUME_MUTE" since="11"/>
@@ -57537,6 +57545,12 @@
 		<method name="isValid()Z"/>
 		<method name="readFromParcel(Landroid/os/Parcel;)V"/>
 		<method name="release()V"/>
+		<field name="BUFFER_TRANSFORM_IDENTITY" since="33"/>
+		<field name="BUFFER_TRANSFORM_MIRROR_HORIZONTAL" since="33"/>
+		<field name="BUFFER_TRANSFORM_MIRROR_VERTICAL" since="33"/>
+		<field name="BUFFER_TRANSFORM_ROTATE_180" since="33"/>
+		<field name="BUFFER_TRANSFORM_ROTATE_270" since="33"/>
+		<field name="BUFFER_TRANSFORM_ROTATE_90" since="33"/>
 		<field name="CREATOR"/>
 	</class>
 	<class name="android/view/SurfaceControl$Builder" since="29">
@@ -58392,6 +58406,7 @@
 		<field name="AUTOFILL_TYPE_NONE" since="26"/>
 		<field name="AUTOFILL_TYPE_TEXT" since="26"/>
 		<field name="AUTOFILL_TYPE_TOGGLE" since="26"/>
+		<field name="DRAG_FLAG_ACCESSIBILITY_ACTION" since="33"/>
 		<field name="DRAG_FLAG_GLOBAL" since="24"/>
 		<field name="DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION" since="24"/>
 		<field name="DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION" since="24"/>
@@ -59823,6 +59838,9 @@
 		<method name="setPassword(Z)V" removed="14"/>
 		<method name="setRemovedCount(I)V" removed="14"/>
 		<field name="CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION" since="19"/>
+		<field name="CONTENT_CHANGE_TYPE_DRAG_CANCELLED" since="33"/>
+		<field name="CONTENT_CHANGE_TYPE_DRAG_DROPPED" since="33"/>
+		<field name="CONTENT_CHANGE_TYPE_DRAG_STARTED" since="33"/>
 		<field name="CONTENT_CHANGE_TYPE_PANE_APPEARED" since="28"/>
 		<field name="CONTENT_CHANGE_TYPE_PANE_DISAPPEARED" since="28"/>
 		<field name="CONTENT_CHANGE_TYPE_PANE_TITLE" since="28"/>
@@ -60119,6 +60137,9 @@
 		<field name="ACTION_COPY"/>
 		<field name="ACTION_CUT"/>
 		<field name="ACTION_DISMISS"/>
+		<field name="ACTION_DRAG_CANCEL" since="33"/>
+		<field name="ACTION_DRAG_DROP" since="33"/>
+		<field name="ACTION_DRAG_START" since="33"/>
 		<field name="ACTION_EXPAND"/>
 		<field name="ACTION_FOCUS"/>
 		<field name="ACTION_HIDE_TOOLTIP" since="28"/>
diff --git a/current/public/framework.aidl b/current/public/framework.aidl
index 7617338..acd8b00 100644
--- a/current/public/framework.aidl
+++ b/current/public/framework.aidl
@@ -131,8 +131,6 @@
 parcelable android.bluetooth.le.ScanFilter;
 parcelable android.bluetooth.le.ScanResult;
 parcelable android.bluetooth.le.ScanSettings;
-parcelable android.bluetooth.le.TransportBlock;
-parcelable android.bluetooth.le.TransportDiscoveryData;
 parcelable android.companion.AssociationRequest;
 parcelable android.companion.BluetoothDeviceFilter;
 parcelable android.companion.BluetoothLeDeviceFilter;
@@ -596,6 +594,7 @@
 parcelable android.service.timezone.TimeZoneProviderSuggestion;
 parcelable android.service.voice.HotwordDetectedResult;
 parcelable android.service.voice.HotwordRejectedResult;
+parcelable android.service.voice.VisibleActivityInfo;
 parcelable android.service.watchdog.ExplicitHealthCheckService.PackageConfig;
 parcelable android.speech.tts.Voice;
 parcelable android.telecom.AudioState;
@@ -865,7 +864,9 @@
 parcelable android.widget.inline.InlinePresentationSpec;
 parcelable android.window.DisplayAreaAppearedInfo;
 parcelable android.window.DisplayAreaInfo;
-parcelable android.window.StartingWindowInfo;
 parcelable android.window.TaskAppearedInfo;
+parcelable android.window.TaskFragmentCreationParams;
+parcelable android.window.TaskFragmentInfo;
+parcelable android.window.TaskFragmentOrganizerToken;
 parcelable android.window.WindowContainerToken;
 parcelable android.window.WindowContainerTransaction;
diff --git a/current/system-server/android.jar b/current/system-server/android.jar
index 68b3a01..294eb0b 100644
--- a/current/system-server/android.jar
+++ b/current/system-server/android.jar
Binary files differ
diff --git a/current/system/android-non-updatable.jar b/current/system/android-non-updatable.jar
index 3e500c5..0038123 100644
--- a/current/system/android-non-updatable.jar
+++ b/current/system/android-non-updatable.jar
Binary files differ
diff --git a/current/system/android.jar b/current/system/android.jar
index d0bf4a5..3bd3036 100644
--- a/current/system/android.jar
+++ b/current/system/android.jar
Binary files differ
diff --git a/current/system/android.net.ipsec.ike.jar b/current/system/android.net.ipsec.ike.jar
index 5d54c19..7f546e6 100644
--- a/current/system/android.net.ipsec.ike.jar
+++ b/current/system/android.net.ipsec.ike.jar
Binary files differ
diff --git a/current/system/framework-statsd.jar b/current/system/framework-statsd.jar
index 169ca7e..dea2999 100644
--- a/current/system/framework-statsd.jar
+++ b/current/system/framework-statsd.jar
Binary files differ
diff --git a/current/test/android-non-updatable.jar b/current/test/android-non-updatable.jar
index 9aa46ae..8b97add 100644
--- a/current/test/android-non-updatable.jar
+++ b/current/test/android-non-updatable.jar
Binary files differ
diff --git a/current/test/android.jar b/current/test/android.jar
index a0572db..e774226 100644
--- a/current/test/android.jar
+++ b/current/test/android.jar
Binary files differ
diff --git a/update_prebuilts/update_prebuilts.py b/update_prebuilts/update_prebuilts.py
index 7a8998a..f7daa82 100755
--- a/update_prebuilts/update_prebuilts.py
+++ b/update_prebuilts/update_prebuilts.py
@@ -10,10 +10,13 @@
 from shutil import copyfile, rmtree, which, move
 from distutils.version import LooseVersion
 from functools import reduce
+import six
+import urllib.request, urllib.parse, urllib.error
 
 current_path = 'current'
 framework_sdk_target = 'sdk_phone_armv7-win_sdk'
 androidx_dir = os.path.join(current_path, 'androidx')
+gmaven_dir = os.path.join(current_path, 'gmaven')
 extras_dir = os.path.join(current_path, 'extras')
 buildtools_dir = 'tools'
 jetifier_dir = os.path.join(buildtools_dir, 'jetifier', 'jetifier-standalone')
@@ -26,6 +29,9 @@
 FETCH_ARTIFACT = '/google/data/ro/projects/android/fetch_artifact'
 FETCH_ARTIFACT_BEYOND_CORP = '/usr/bin/fetch_artifact'
 
+# See (https://developer.android.com/studio/build/dependencies#gmaven-access)
+GMAVEN_BASE_URL = 'https://maven.google.com'
+
 # Leave map blank to automatically populate name and path:
 # - Name format is MAVEN.replaceAll(':','_')
 # - Path format is MAVEN.replaceAll(':','/').replaceAll('.','/')
@@ -133,7 +139,6 @@
     'androidx.car.app:app-automotive': { },
     'androidx.car.app:app-testing': { },
     'androidx.startup:startup-runtime': { },
-    'androidx.window:window': {'optional-uses-libs':{'androidx.window.extensions', 'androidx.window.sidecar'}},
     'androidx.resourceinspection:resourceinspection-annotation': { },
     'androidx.profileinstaller:profileinstaller': { },
 
@@ -226,6 +231,15 @@
     'org.jetbrains.kotlinx:kotlinx-metadata-jvm':'kotlinx_metadata_jvm',
 }
 
+# List of artifacts that will be updated from GMaven
+# Use pattern: `group:library:version:extension`
+# e.g.:
+#   androidx.appcompat:appcompat:1.2.0:aar
+# Use `latest` to always fetch the latest version.
+# e.g.:
+#   androidx.appcompat:appcompat:latest:aar
+# Also make sure you add `group:library`:{} to maven_to_make as well.
+gmaven_artifacts = {}
 
 def name_for_artifact(group_artifact):
     return group_artifact.replace(':','_')
@@ -390,6 +404,9 @@
         args.extend(["-optional-uses-libs=" + maven_to_make[name]['name'] + "=" + ",".join(sorted(maven_to_make[name]['optional-uses-libs'])) for name in maven_to_make if 'optional-uses-libs' in maven_to_make[name]])
         args.extend(["-host=" + name for name in maven_to_make if maven_to_make[name].get('host')])
         args.extend(["-host-and-device=" + name for name in maven_to_make if maven_to_make[name].get('host_and_device')])
+        # these depend on GSON which is not in AOSP
+        args.extend(["-exclude=android-arch-room-migration",
+                     "-exclude=android-arch-room-testing"])
         args.extend(["."])
         subprocess.check_call(args, stdout=f, cwd=working_dir)
 
@@ -454,6 +471,89 @@
             os.remove(file_path)
 
 
+class GMavenArtifact(object):
+    # A map from group:library to the latest available version
+    key_versions_map = {}
+    def __init__(self, artifact_glob):
+        try:
+            (group, library, version, ext) = artifact_glob.split(':')
+        except ValueError:
+            raise ValueError(f'Error in {artifact_glob} expected: group:library:version:ext')
+
+        if not group or not library or not version or not ext:
+            raise ValueError(f'Error in {artifact_glob} expected: group:library:version:ext')
+
+        self.group = group
+        self.group_path = group.replace('.', '/')
+        self.library = library
+        self.key = f'{group}:{library}'
+        self.version = version
+        self.ext = ext
+
+    def get_pom_file_url(self):
+        return f'{GMAVEN_BASE_URL}/{self.group_path}/{self.library}/{self.version}/{self.library}-{self.version}.pom'
+
+    def get_artifact_url(self):
+        return f'{GMAVEN_BASE_URL}/{self.group_path}/{self.library}/{self.version}/{self.library}-{self.version}.{self.ext}'
+
+    def get_latest_version(self):
+        latest_version = GMavenArtifact.key_versions_map[self.key] \
+                if self.key in GMavenArtifact.key_versions_map else None
+
+        if not latest_version:
+            print(f'Fetching latest version for {self.key}')
+            group_index_url = f'{GMAVEN_BASE_URL}/{self.group_path}/group-index.xml'
+            import xml.etree.ElementTree as ET
+            tree = ET.parse(urllib.request.urlopen(group_index_url))
+            root = tree.getroot()
+            libraries = root.findall('./*[@versions]')
+            for library in libraries:
+                key = f'{root.tag}:{library.tag}'
+                GMavenArtifact.key_versions_map[key] = library.get('versions').split(',')[-1]
+            latest_version = GMavenArtifact.key_versions_map[self.key]
+        return latest_version
+
+
+def fetch_gmaven_artifact(artifact):
+    """Fetch a GMaven artifact.
+
+    Downloads a GMaven artifact
+    (https://developer.android.com/studio/build/dependencies#gmaven-access)
+
+    Args:
+        artifact_glob: an instance of GMavenArtifact.
+    """
+    download_to = os.path.join('gmaven', artifact.group, artifact.library, artifact.version)
+
+    _DownloadFileToDisk(artifact.get_pom_file_url(), os.path.join(download_to, f'{artifact.library}-{artifact.version}.pom'))
+    _DownloadFileToDisk(artifact.get_artifact_url(), os.path.join(download_to, f'{artifact.library}-{artifact.version}.{artifact.ext}'))
+
+    return download_to
+
+
+def _DownloadFileToDisk(url, filepath):
+    """Download the file at URL to the location dictated by the path.
+
+    Args:
+        url: Remote URL to download file from.
+        filepath: Filesystem path to write the file to.
+    """
+    print(f'Downloading URL: {url}')
+    file_data = urllib.request.urlopen(url)
+
+    try:
+        os.makedirs(os.path.dirname(filepath))
+    except os.error:
+        # This is a common situation - os.makedirs fails if dir already exists.
+        pass
+    try:
+        with open(filepath, 'wb') as f:
+            f.write(six.ensure_binary(file_data.read()))
+    except:
+        os.remove(os.path.dirname(filepath))
+        raise
+
+
 def fetch_artifact(target, build_id, artifact_path):
     global args
     download_to = os.path.join('.', os.path.dirname(artifact_path))
@@ -501,6 +601,18 @@
     return extract_artifact(artifact_path)
 
 
+def update_gmaven(gmaven_artifacts):
+    artifacts = [GMavenArtifact(artifact) for artifact in gmaven_artifacts]
+    for artifact in artifacts:
+        if artifact.version == 'latest':
+            artifact.version = artifact.get_latest_version()
+
+    artifact_dirs = [fetch_gmaven_artifact(artifact) for artifact in artifacts]
+    if not transform_maven_repos(['gmaven'], gmaven_dir, extract_res=False):
+        return []
+    return [artifact.key for artifact in artifacts]
+
+
 def update_androidx(target, build_id, local_file):
     if build_id:
         repo_file = 'top-of-tree-m2repository-all-%s.zip' % build_id.fs_id
@@ -743,7 +855,7 @@
 parser = argparse.ArgumentParser(
     description=('Update current prebuilts'))
 parser.add_argument(
-    'source',
+    'source', nargs='?',
     help='Build server build ID or local Maven ZIP file')
 parser.add_argument(
     '-m', '--material', action="store_true",
@@ -771,6 +883,9 @@
     '-x', '--androidx', action="store_true",
     help='If specified, updates only the Jetpack (androidx) libraries excluding those covered by other arguments')
 parser.add_argument(
+    '-g', '--gmaven', action="store_true",
+    help='If specified, updates only the artifact from GMaven libraries excluding those covered by other arguments')
+parser.add_argument(
     '--commit-first', action="store_true",
     help='If specified, then if uncommited changes exist, commit before continuing')
 parser.add_argument(
@@ -778,15 +893,17 @@
     help='If specified, then fetch artifacts with tooling that works on BeyondCorp devices')
 args = parser.parse_args()
 args.file = True
-if not args.source:
+if not args.source and (args.platform or args.buildtools \
+                or args.jetifier or args.androidx or args.material \
+                or args.finalize_sdk or args.constraint):
     parser.error("You must specify a build ID or local Maven ZIP file")
     sys.exit(1)
-if not (args.platform or args.buildtools \
+if not (args.gmaven or args.platform or args.buildtools \
                 or args.jetifier or args.androidx or args.material \
                 or args.finalize_sdk or args.constraint):
     parser.error("You must specify at least one target to update")
     sys.exit(1)
-if (args.constraint or args.material or args.androidx) \
+if (args.constraint or args.material or args.androidx or args.gmaven) \
         and which('pom2bp') is None:
     parser.error("Cannot find pom2bp in path; please run lunch to set up build environment. You may also need to run 'm pom2bp' if it hasn't been built already.")
     sys.exit(1)
@@ -808,6 +925,13 @@
         else:
             print_e('Failed to update Constraint Layout X, aborting...')
             sys.exit(1)
+    if args.gmaven:
+        updated_artifacts = update_gmaven(gmaven_artifacts)
+        if updated_artifacts:
+            components = append(components, '\n'.join(updated_artifacts))
+        else:
+            print_e('Failed to update GMaven, aborting...')
+            sys.exit(1)
     if args.androidx:
         if update_androidx('androidx', \
                            getBuildId(args), getFile(args)):
@@ -856,7 +980,9 @@
 
 
     subprocess.check_call(['git', 'add', current_path, buildtools_dir])
-    if not args.source.isnumeric():
+    if not args.source and args.gmaven:
+        src_msg = "GMaven"
+    elif not args.source.isnumeric():
         src_msg = "local Maven ZIP"
     else:
         src_msg = "build %s" % (getBuildId(args).url_id)
